{"version":3,"file":"static/js/orbit-main.fd2b5821.chunk.js","mappings":"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xC,kCAAmC,MACnC,uBAAwB,MACxB,kCAAmC,OAIpC,SAAS0gT,EAAeztG,GACvB,IAAIr4L,EAAK+lS,EAAsB1tG,GAC/B,OAAO2tG,EAAoBhmS,EAC5B,CACA,SAAS+lS,EAAsB1tG,GAC9B,IAAI2tG,EAAoBv/O,EAAErhE,EAAKizM,GAAM,CACpC,IAAIn/M,EAAI,IAAImzE,MAAM,uBAAyBgsI,EAAM,KAEjD,MADAn/M,EAAEqtC,KAAO,mBACHrtC,CACP,CACA,OAAOkM,EAAIizM,EACZ,CACAytG,EAAex1Q,KAAO,WACrB,OAAOD,OAAOC,KAAKlrC,EACpB,EACA0gT,EAAev7R,QAAUw7R,EACzBn7L,EAAOq7L,QAAUH,EACjBA,EAAe9lS,GAAK,G,wBCxCpB,IAAI5a,EAAM,CACT,+BAAgC,CAC/B,MACA,KACA,KACA,KACA,KACA,KACA,KACA,MAED,mCAAoC,CACnC,MACA,KACA,KACA,KAED,mCAAoC,CACnC,MACA,KACA,KACA,MAED,+BAAgC,CAC/B,MACA,KACA,KACA,KAED,6BAA8B,CAC7B,MACA,KACA,KACA,MAED,iCAAkC,CACjC,MACA,KACA,KACA,IACA,KACA,KACA,MAED,iCAAkC,CACjC,MACA,KACA,KACA,IACA,KACA,KACA,KAED,6BAA8B,CAC7B,MACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,MAED,4BAA6B,CAC5B,MACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,MAED,wBAAyB,CACxB,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAED,8BAA+B,CAC9B,MACA,KACA,MAED,0BAA2B,CAC1B,MACA,KACA,KACA,KACA,MAGF,SAAS8gT,EAAoB7tG,GAC5B,IAAI2tG,EAAoBv/O,EAAErhE,EAAKizM,GAC9B,OAAO/tL,QAAQC,UAAUrX,MAAK,WAC7B,IAAIha,EAAI,IAAImzE,MAAM,uBAAyBgsI,EAAM,KAEjD,MADAn/M,EAAEqtC,KAAO,mBACHrtC,CACP,IAGD,IAAIitT,EAAM/gT,EAAIizM,GAAMr4L,EAAKmmS,EAAI,GAC7B,OAAO77R,QAAQ6Z,IAAIgiR,EAAI5zS,MAAM,GAAGnN,IAAI4gT,EAAoB9sT,IAAIga,MAAK,WAChE,OAAO8yS,EAAoBhmS,EAC5B,GACD,CACAkmS,EAAoB51Q,KAAO,WAAa,OAAOD,OAAOC,KAAKlrC,EAAM,EACjE8gT,EAAoBlmS,GAAK,MACzB4qG,EAAOq7L,QAAUC,C,wBCrHjB,IAAI9gT,EAAM,CACT,6BAA8B,CAC7B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,yCAA0C,CACzC,MACA,MAED,4CAA6C,CAC5C,MACA,MAED,mCAAoC,CACnC,MACA,MAED,sCAAuC,CACtC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,yCAA0C,CACzC,MACA,MAED,4CAA6C,CAC5C,MACA,MAED,mCAAoC,CACnC,MACA,MAED,sCAAuC,CACtC,MACA,MAED,0CAA2C,CAC1C,MACA,MAED,6CAA8C,CAC7C,MACA,MAED,kCAAmC,CAClC,IACA,KAED,qCAAsC,CACrC,IACA,KAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,yCAA0C,CACzC,MACA,MAED,4CAA6C,CAC5C,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,yCAA0C,CACzC,KACA,MAED,4CAA6C,CAC5C,KACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,mBAAoB,CACnB,OAED,sBAAuB,CACtB,OAED,gCAAiC,CAChC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,uCAAwC,CACvC,MACA,MAED,0CAA2C,CAC1C,MACA,MAED,iCAAkC,CACjC,KACA,MAED,oCAAqC,CACpC,KACA,MAED,wCAAyC,CACxC,MACA,MAED,2CAA4C,CAC3C,MACA,MAED,wCAAyC,CACxC,MACA,MAED,2CAA4C,CAC3C,MACA,MAED,wCAAyC,CACxC,MACA,MAED,2CAA4C,CAC3C,MACA,MAED,wCAAyC,CACxC,MACA,MAED,2CAA4C,CAC3C,MACA,MAED,gCAAiC,CAChC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,uCAAwC,CACvC,MACA,MAED,0CAA2C,CAC1C,MACA,MAED,iCAAkC,CACjC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,wCAAyC,CACxC,MACA,MAED,2CAA4C,CAC3C,MACA,MAED,gCAAiC,CAChC,MACA,KAED,mCAAoC,CACnC,MACA,KAED,uCAAwC,CACvC,MACA,KAED,0CAA2C,CAC1C,MACA,KAED,2BAA4B,CAC3B,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,kCAAmC,CAClC,MACA,KAED,qCAAsC,CACrC,MACA,KAED,6BAA8B,CAC7B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,uCAAwC,CACvC,MACA,OAGF,SAAS8gT,EAAoB7tG,GAC5B,IAAI2tG,EAAoBv/O,EAAErhE,EAAKizM,GAC9B,OAAO/tL,QAAQC,UAAUrX,MAAK,WAC7B,IAAIha,EAAI,IAAImzE,MAAM,uBAAyBgsI,EAAM,KAEjD,MADAn/M,EAAEqtC,KAAO,mBACHrtC,CACP,IAGD,IAAIitT,EAAM/gT,EAAIizM,GAAMr4L,EAAKmmS,EAAI,GAC7B,OAAO77R,QAAQ6Z,IAAIgiR,EAAI5zS,MAAM,GAAGnN,IAAI4gT,EAAoB9sT,IAAIga,MAAK,WAChE,OAAO8yS,EAAoBhmS,EAC5B,GACD,CACAkmS,EAAoB51Q,KAAO,WAAa,OAAOD,OAAOC,KAAKlrC,EAAM,EACjE8gT,EAAoBlmS,GAAK,MACzB4qG,EAAOq7L,QAAUC,C,wBCxTjB,IAAI9gT,EAAM,CACT,6BAA8B,CAC7B,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,kCAAmC,CAClC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,kCAAmC,CAClC,IACA,KAED,kCAAmC,CAClC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,gCAAiC,CAChC,MACA,MAED,iCAAkC,CACjC,KACA,MAED,gCAAiC,CAChC,MACA,MAED,iCAAkC,CACjC,MACA,MAED,gCAAiC,CAChC,MACA,KAED,2BAA4B,CAC3B,MACA,MAED,6BAA8B,CAC7B,MACA,OAGF,SAAS8gT,EAAoB7tG,GAC5B,IAAI2tG,EAAoBv/O,EAAErhE,EAAKizM,GAC9B,OAAO/tL,QAAQC,UAAUrX,MAAK,WAC7B,IAAIha,EAAI,IAAImzE,MAAM,uBAAyBgsI,EAAM,KAEjD,MADAn/M,EAAEqtC,KAAO,mBACHrtC,CACP,IAGD,IAAIitT,EAAM/gT,EAAIizM,GAAMr4L,EAAKmmS,EAAI,GAC7B,OAAOH,EAAoB9sT,EAAEitT,EAAI,IAAIjzS,MAAK,WACzC,OAAO8yS,EAAoBhmS,EAC5B,GACD,CACAkmS,EAAoB51Q,KAAO,WAAa,OAAOD,OAAOC,KAAKlrC,EAAM,EACjE8gT,EAAoBlmS,GAAK,MACzB4qG,EAAOq7L,QAAUC,C,wBCtGjB,IAAI9gT,EAAM,CACT,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,KACA,MAED,WAAY,CACX,KACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,OAED,WAAY,CACX,OAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,KAED,WAAY,CACX,MACA,KAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,KAED,WAAY,CACX,MACA,KAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,OAGF,SAAS8gT,EAAoB7tG,GAC5B,IAAI2tG,EAAoBv/O,EAAErhE,EAAKizM,GAC9B,OAAO/tL,QAAQC,UAAUrX,MAAK,WAC7B,IAAIha,EAAI,IAAImzE,MAAM,uBAAyBgsI,EAAM,KAEjD,MADAn/M,EAAEqtC,KAAO,mBACHrtC,CACP,IAGD,IAAIitT,EAAM/gT,EAAIizM,GAAMr4L,EAAKmmS,EAAI,GAC7B,OAAO77R,QAAQ6Z,IAAIgiR,EAAI5zS,MAAM,GAAGnN,IAAI4gT,EAAoB9sT,IAAIga,MAAK,WAChE,OAAO8yS,EAAoBhmS,EAC5B,GACD,CACAkmS,EAAoB51Q,KAAO,WAAa,OAAOD,OAAOC,KAAKlrC,EAAM,EACjE8gT,EAAoBlmS,GAAK,MACzB4qG,EAAOq7L,QAAUC,C","sources":["app-react/basic-components/blank-separator/blank-horizontal-separator.box.ts","app-react/basic-components/game-icon-wrapper/game-icon-wrapper.box.ts","app-react/basic-components/game-icon-wrapper/game-icon-wrapper.default.box.ts","app-react/basic-components/game-icon/game-icon.box.ts","app-react/basic-components/game-icon/game-icon.default.box.ts","app-react/basic-components/lobby-grid/lobby-grid.box.ts","app-react/basic-components/lobby-wrapper/lobby-wrapper.box.ts","app-react/basic-components/main-screen/main-screen.component.tsx","app-react/basic-components/space-between-items-consts.ts","app-react/basic-ui-components/button/base/button-hover-colors-helpers.ts","app-react/basic-ui-components/button/base/boxes/button.box.ts","app-react/basic-ui-components/button/base/boxes/label/button-label.box.ts","app-react/basic-ui-components/button/base/boxes/button-icon-wrapper.box.ts","app-react/basic-ui-components/button/base/boxes/label-padding-box/button-label-padding.box.ts","app-react/basic-ui-components/button/skeleton/button-skeleton.box.tsx","app-react/basic-ui-components/button/base/button.component.tsx","app-react/basic-ui-components/form/select.component.tsx","app-react/basic-ui-components/icon/svg-icon/svg.icon.tsx","app-react/basic-ui-components/layout/divider/divider.box.ts","app-react/basic-ui-components/layout/spacer.box.ts","app-react/basic-ui-components/x-close-button/x-close-button.box.ts","app-react/components/orbit-swiper/swiper-window.component.tsx","app-react/react-hooks/use-is-in-viewport.hook.ts","app-react/components/arena-games-lists/arena-games-lists.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid-item/live-casino-grid-item.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid-item/live-casino-grid-item.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/info-item/live-casino-grid-item-info-item.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/infobar-icon/live-casino-grid-item-infobar-icon.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/infobar-icon/live-casino-grid-item-infobar-icon.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail-image.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail-image.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/css-constants.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/live-casino-grid-item-infobar.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/live-casino-grid-item-infobar.casino777.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/live-casino-grid-item-infobar.mrgreen.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/live-casino-grid-item-infobar.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/closed-message/live-casino-grid-item-closed-message.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail-overlay.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail-overlay.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/wrapper/live-casino-grid-item-wrapper.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/title/live-casino-grid-item-title.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/bet-behind/live-casino-grid-item-bet-behind-button.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/jackpot/live-casino-grid-item-jackpot.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/closed-message/live-casino-grid-item-open-at.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/live-casino-arena-grid-item.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid/live-casino-grid.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid/skeleton/live-casino-grid-item-skeleton.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid/skeleton/live-casino-grid-item-skeleton-title.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid/skeleton/live-casino-grid-item-skeleton-wrapper.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/live-casino-arena-grid.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/draws/live-casino-grid-item-draws.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/draws/live-casino-grid-item-draws.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/draws/live-casino-grid-item-draw.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/roulette-draws.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/table-seats.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/boxes/live-casino-arena-navbar-button/wrapper/live-casino-arena-navbar-button-wrapper.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/boxes/live-casino-filter-buttons/live-casino-filter-buttons.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/boxes/live-casino-navbar/live-casino-navbar.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/live-casino-arena-navbar.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/css-constants.ts","app-react/components/balance-box/balance-box-buttons/boxes/button-wrapper.box.ts","app-react/components/balance-box/balance-value.component.tsx","app-react/components/admin-banner/boxes/admin-banner-wrapper.box.ts","app-react/components/admin-banner/admin-banner.component.tsx","app-react/components/banner/banner.component.tsx","app-react/components/base-components/orbit-suspense/orbit-suspense.tsx","app-react/components/base-components/routed-component/routed.component.ts","app-react/components/bottom-navigation-bar/bottom-navigation-bar-consts.ts","app-react/components/burnout/burnout-animation/burnout-animation-constants.ts","app-react/components/burnout/burnout-animation/boxes/burnout-animation-container.box.ts","app-react/components/burnout/burnout-animation/boxes/burnout-animation.box.ts","app-react/components/burnout/burnout-animation/boxes/burnout-animation-text.box.ts","app-react/components/burnout/burnout-animation/disposable-burnout-dependencies.ts","app-react/components/burnout/burnout-animation/burnout-animation.component.tsx","app-react/components/burnout/burnout-animation/boxes/burnout-fab.box.tsx","app-react/components/burnout/burnout-animation/burnout-animation-wrapper.component.tsx","app-react/components/clock-and-last-login-box/boxes/clock-last-login.box.ts","app-react/components/clock-and-last-login-box/boxes/last-login.box.ts","app-react/components/clock-and-last-login-box/clock-and-last-login-box.component.tsx","app-react/components/clock/boxes/clock.component.box.tsx","app-react/components/clock/clock.component.tsx","app-react/components/cms-banner/banner-container/banner-container.box.ts","app-react/components/cms-banner/banner-container/banner-container.default.box.ts","app-react/components/cms-banner/cms-banner.component.tsx","app-react/components/cms-banner/empty-banner/empty-banner-container.box.ts","app-react/components/cms-banner/empty-banner/empty-banner.component.tsx","app-react/components/free-play/boxes/container/free-play-container.box.ts","app-react/components/free-play/boxes/vouchers-swiper/vouchers-swiper.box.ts","app-react/components/free-play/boxes/vouchers-swiper/arrow/voucher-swiper-arrow-container.box.ts","app-react/components/swiper/swiper.component.tsx","app-react/components/free-play/parts/voucher-card/swiper/vouchers-swiper.component.tsx","app-react/components/free-play/boxes/voucher-games-list/voucher-games-list.box.ts","app-react/components/free-play/boxes/vouchers-swiper/vouchers-swiper-title.box.ts","app-react/components/free-play/boxes/vouchers-swiper/vouchers-swiper-background.box.ts","app-react/components/free-play/boxes/voucher-games-list-title/voucher-games-list-title.box.ts","app-react/components/free-play/free-play-container.component.tsx","app-react/components/free-play/boxes/voucher-card/voucher-card.box.ts","app-react/components/free-play/boxes/voucher-card/voucher-card-side.box.ts","app-react/components/free-play/boxes/voucher-card/face/voucher-card-face.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/voucher-card-face-content.box.ts","app-react/components/free-play/boxes/voucher-card/common/footer/voucher-card-side-footer.box.ts","app-react/components/free-play/boxes/voucher-card/face/footer/voucher-card-face-footer.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/icon/voucher-card-face-icon-container.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/details/voucher-card-face-details.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/details/original-amount/voucher-card-face-original-amount.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/details/name/voucher-card-face-voucher-name.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/details/current-amount/voucher-card-face-current-amount-container.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/icon/voucher-card-face-icon.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/details/current-amount/voucher-card-face-current-amount.box.ts","app-react/components/free-play/boxes/voucher-card/common/footer/side-toggle/voucher-card-side-toggle-button.box.ts","app-react/components/free-play/boxes/voucher-card/common/footer/footer-content/voucher-card-side-footer-content.box.ts","app-react/components/free-play/boxes/voucher-card/face/header/voucher-card-face-header.box.ts","app-react/components/free-play/parts/voucher-card/face/voucher-card-face-header.component.tsx","app-react/components/free-play/parts/voucher-card/face/voucher-card-face.component.tsx","app-react/components/free-play/boxes/voucher-card/back/voucher-card-back.box.ts","app-react/components/free-play/boxes/voucher-card/back/header/voucher-card-back-header.box.ts","app-react/components/free-play/boxes/voucher-card/back/content/voucher-card-back-content.box.ts","app-react/components/free-play/boxes/voucher-card/back/footer/voucher-card-back-footer.box.ts","app-react/components/free-play/parts/voucher-card/back/voucher-card-back.component.tsx","app-react/components/free-play/parts/voucher-card/voucher-card.component.tsx","app-react/components/free-to-play-animated-icon/boxes/free-to-play-animated-icon.box.ts","app-react/components/free-to-play-animated-icon/boxes/free-to-play-animated-icon.default.box.ts","app-react/components/free-to-play-animated-icon/boxes/free-to-play-click.box.ts","app-react/components/free-to-play-animated-icon/free-to-play-animated-icon.component.tsx","app-react/components/gambling-session/boxes/gambling-session-message.box.ts","app-react/components/gambling-session/limit-reached/gambling-session-limit-reached.component.tsx","app-react/components/gambling-session/logout/gambling-session-logout-dialog.component.tsx","app-react/components/gambling-session/session-info/boxes/gambling-session-limits-summary.box.ts","app-react/components/gambling-session/session-info/boxes/gambling-session-info.box.ts","app-react/components/gambling-session/session-info/gambling-session-info.component.tsx","app-react/components/gambling-session/setup/boxes/gambling-session-limits.box.ts","app-react/components/gambling-session/setup/boxes/drop-downs-group.box.ts","app-react/components/gambling-session/setup/parts/loss-limit-drop-down.component.tsx","app-react/services/translation/translations-helper.ts","app-react/components/gambling-session/setup/parts/time-limit-drop-down.component.tsx","app-react/components/gambling-session/setup/parts/interval-reminder-drop-down.component.tsx","app-react/components/gambling-session/setup/parts/restriction-periods-drop-down.component.tsx","app-react/components/gambling-session/setup/boxes/footer.box.ts","app-react/components/gambling-session/setup/boxes/drop-downs-separator.box.ts","app-react/components/gambling-session/setup/css-constants.ts","app-react/components/gambling-session/setup/boxes/regulatory-text.box.ts","app-react/components/gambling-session/setup/boxes/gambling-session-message.box.ts","app-react/components/gambling-session/setup/boxes/gambling-session-warn-message.box.ts","app-react/components/gambling-session/setup/gambling-session-setup.component.tsx","app-react/components/gambling-session/setup/boxes/drop-down-container.box.ts","app-react/components/gambling-session/setup/boxes/error-message.box.ts","app-react/components/gambling-session/setup/boxes/drop-down-label.box.ts","app-react/components/gambling-session/setup/parts/drop-down.component.tsx","app-react/components/game-item/boxes/game-item-img-wrapper.box.ts","app-react/components/game-item/boxes/game-item-container.box.ts","app-react/components/game-item/boxes/game-item-fp-thumb.box.ts","app-react/components/game-item/boxes/game-item-delimiter.box.ts","app-react/components/game-item/boxes/game-item-details-wrapper.box.ts","app-react/components/game-item/boxes/game-item-title.box.ts","app-react/components/game-item/boxes/game-item-jackpot.box.ts","app-react/components/game-item/boxes/game-item-buttons-area.box.ts","app-react/components/game-item/game-item.component.tsx","app-react/components/game-jackpot/boxes/root/game-jackpot.box.ts","app-react/components/game-jackpot/boxes/value/game-jackpot-value.box.ts","app-react/components/game-jackpot/game-jackpot.component.tsx","app-react/components/game-list-title/constants.ts","app-react/components/game-search/search-result/search-box-title/boxes/search-title-box/search-title.box.ts","app-react/components/game-search/search-result/search-box-title/boxes/number-of-results-box/number-of-results.box.ts","app-react/components/game-search/search-result/search-box-title/boxes/number-of-results-box/number-of-results.default.box.ts","app-react/components/game-search/search-result/search-box-title/search-box-title.component.tsx","app-react/components/game-search/search-result/found-games/boxes/search-games-list/search-games-list.box.ts","app-react/components/game-search/search-result/found-games/boxes/search-no-game-found/search-no-games-found.box.ts","app-react/components/game-search/search-result/search-game-item/boxes/search-game-item/search-game-item.box.ts","app-react/components/game-search/search-result/highlight-search-list-item/boxes/search-match.box.ts","app-react/components/game-search/search-result/highlight-search-list-item/highlight-search-list-item.component.tsx","app-react/components/game-search/search-result/search-game-item/boxes/search-text-wrapper/search-text-wrapper.box.ts","app-react/components/game-search/search-result/search-game-item/boxes/search-game-image-box/search-game-image.box.ts","app-react/components/game-search/search-result/search-game-item/search-game-item.component.tsx","app-react/components/game-search/search-result/suggested-games/suggested-games.component.tsx","app-react/components/game-search/search-result/found-games/boxes/more-games/more-games.box.ts","app-react/components/game-search/search-result/found-games/found-games.component.tsx","app-react/components/game-search/search-result/search-result-item/boxes/search-result-item-box/search-result-item.box.ts","app-react/components/game-search/search-result/search-result-item/boxes/search-result-item-box/search-result-item.default.box.ts","app-react/components/game-search/search-result/search-result-item/boxes/search-links/slots-search-link/slots-search-link.box.ts","app-react/components/game-search/search-result/search-result-item/boxes/search-links/live-search-link/live-search-link.box.ts","app-react/components/game-search/search-result/search-result-item/boxes/search-links/card-and-table-search-link/card-and-table-search-link.box.ts","app-react/components/game-search/search-result/search-result-item/boxes/search-links/regular-search-link/regular-search-link.box.ts","app-react/components/game-search/search-result/search-result-item/search-result-item.component.tsx","app-react/components/game-search/search-result/suggested-links/boxes/search-links-list/search-links-list.box.ts","app-react/components/game-search/search-result/suggested-links/boxes/search-links-list/search-links-list.default.box.ts","app-react/components/game-search/search-result/suggested-links/suggested-links.component.tsx","app-react/components/game-search/search-result/boxes/search-form-results-box/search-form-results.box.ts","app-react/components/game-search/search-result/boxes/search-form-results-wrapper-box/search-form-results-wrapper.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/boxes/suggested-video-slides-filter-list-preview-title/suggested-video-slides-filter-list-preview-title.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/components/suggested-video-slides-filter-item-preview/boxes/suggested-video-slides-filter-item-preview/suggested-video-slides-filter-item-preview.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/components/suggested-video-slides-filter-item-preview/boxes/suggested-video-slides-filter-item-preview-player/suggested-video-slides-filter-item-preview-player.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/components/suggested-video-slides-filter-item-preview/boxes/suggested-video-slides-filter-item-preview-footer/suggested-video-slides-filter-item-preview-footer.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/components/suggested-video-slides-filter-item-preview/boxes/suggested-video-slides-filter-item-preview-footer-text/suggested-video-slides-filter-item-preview-footer-text.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/components/suggested-video-slides-filter-item-preview/suggested-video-slides-filter-item-preview.component.tsx","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/boxes/suggested-video-slides-filter-list-preview-header/suggested-video-slides-filter-list-preview-header.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/boxes/suggested-video-slides-filter-list-preview.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/boxes/suggested-video-slides-filter-list-preview-content/suggested-video-slides-filter-list-preview-content.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/suggested-video-slides-filter-list-preview.component.tsx","app-react/components/game-search/search-result/search-result.component.tsx","app-react/components/game-search/search-input/search-input-mobile/boxes/search-clear-icon/search-clear-icon.box.ts","app-react/components/game-search/search-input/search-input-mobile/boxes/search-input-mobile/search-input-mobile.box.ts","app-react/components/game-search/search-input/search-input-area/boxes/search-input-area-box/search-input-area.box.ts","app-react/components/game-search/search-input/search-input-area/search-input-area.tsx","app-react/components/game-search/search-input/search-input-pc/boxes/search-icon/search-icon.box.ts","app-react/components/game-search/search-input/search-input-mobile/search-input-mobile.component.tsx","app-react/components/game-search/search-input/search-input-pc/search-input-pc.component.tsx","app-react/components/game-search/boxes/game-search-box/game-search.box.ts","app-react/components/game-search/game-search.component.tsx","app-react/components/game-search/search-input/search-input-pc/boxes/search-input-form/search-input-form.box.ts","app-react/components/game-search/search-input/search-input-pc/boxes/search-input-form/search-input-form.default.box.ts","app-react/components/geo/boxes/geo-modal-wrapper.box.ts","app-react/components/header/header-consts.ts","app-react/components/header/top-header-left/regulatory-data/boxes/regulatory-data.box.ts","app-react/components/header/gambling-warning/boxes/gambling-warning.default.box.ts","app-react/components/header/gambling-warning/boxes/gambling-warning.box.ts","app-react/components/header/gambling-warning/gambling-warning.component.tsx","app-react/components/header/responsible-icons/boxes/responsible-gaming-icons.default.box.ts","app-react/components/header/responsible-icons/boxes/responsible-gaming-icons.box.ts","app-react/components/header/responsible-icons/responsible-icons.component.tsx","app-react/components/header/top-header-left/regulatory-data/regulatory-data.component.tsx","app-react/components/header/welcome-buttons/authorized-user/boxes/mobile-container/mobile-container.box.ts","app-react/components/header/welcome-buttons/authorized-user/boxes/icon/user-icon.box.ts","app-react/components/header/welcome-buttons/authorized-user/boxes/bankroll/user-bankroll.box.ts","app-react/components/header/welcome-buttons/authorized-user/boxes/free-play-dot-indicator/free-play-dot-indicator.box.ts","app-react/components/header/welcome-buttons/authorized-user/mobile-view/header-welcome-buttons-for-authorized-user-mobile-view.component.tsx","app-react/components/header/welcome-buttons/header-welcome-buttons-helpers.tsx","app-react/components/header/welcome-buttons/anonymous-user/boxes/buttons-container/anonymous-buttons-container.box.ts","app-react/components/header/welcome-buttons/anonymous-user/header-welcome-buttons-for-anonymous-user.component.tsx","app-react/components/header/welcome-buttons/authorized-user/boxes/pc-container/pc-container.box.ts","app-react/components/header/buttons/cashier-button/header-cashier-button.component.tsx","app-react/components/header/welcome-buttons/authorized-user/pc-view/header-welcome-buttons-for-authorized-user-pc-view.component.tsx","app-react/components/header/welcome-buttons/authorized-user/header-welcome-buttons-for-authorized-user.component.tsx","app-react/components/header/welcome-buttons/boxes/header-welcome-buttons.box.ts","app-react/components/header/welcome-buttons/header-welcome-buttons.component.tsx","app-react/components/inside-orbit-menu-container/inside-orbit-menu-container.component.tsx","app-react/components/inside-orbit-menu-container/inside-orbit-menu-container.consts.ts","app-react/components/jackpot-widget/boxes/aspect-ratio/jackpot-widget-aspect-ratio.box.ts","app-react/components/jackpot-widget/boxes/bg/jackpot-widget-bg.box.ts","app-react/components/jackpot-widget/boxes/jackpot-widget.box.ts","app-react/components/jackpot-widget/boxes/logo/jackpot-widget-logo.box.ts","app-react/components/jackpot-widget/boxes/amount/jackpot-widget-amount.box.ts","app-react/components/jackpot-widget/boxes/footer/jackpot-widget-footer.box.ts","app-react/components/jackpot-widget/boxes/footer/clock/label/jackpot-widget-clock-label.box.ts","app-react/components/jackpot-widget/boxes/footer/clock/box/jackpot-widget-clock.box.ts","app-react/components/jackpot-widget/jackpot-widget-clock.component.tsx","app-react/components/jackpot-widget/boxes/amount/label/jackpot-widget-amount-label.box.ts","app-react/components/jackpot-widget/boxes/footer/collecting/label/jackpot-widget-collecting-label.box.ts","app-react/components/jackpot-widget/boxes/footer/collecting/amount/jackpot-widget-collecting-amount.box.ts","app-react/components/jackpot-widget/boxes/shine/jackpot-widget-shine.box.ts","app-react/components/jackpot-widget/jackpot-widget.component.tsx","app-react/components/jackpot-widget/boxes/amount/container/jackpot-widget-amount-container.box.ts","app-react/components/jackpot-widget/boxes/title/jackpot-title.box.ts","app-react/components/jackpot-widget/skeleton/boxes/footer/jackpot-widget-clock-label-skeleton.box.ts","app-react/components/jackpot-widget/skeleton/boxes/footer/jackpot-widget-collecting-label-skeleton.box.ts","app-react/components/jackpot-widget/skeleton/boxes/footer/jackpot-widget-footer-container-skeleton.box.ts","app-react/components/jackpot-widget/skeleton/boxes/footer/jackpot-widget-footer-element-skeleton.box.ts","app-react/components/jackpot-widget/skeleton/boxes/jackpot-widget-amount-skeleton.box.ts","app-react/components/laboratory-showcase/showcases/gambling-session-setup-dialog-showcase.component.tsx","app-react/components/laboratory-showcase/boxes/page-wrapper/laboratory-showcase-page-wrapper.box.ts","app-react/components/laboratory-showcase/showcases/geo-location-browser-api-test.component.tsx","app-react/basic-ui-components/form/textarea.box.ts","app-react/components/laboratory-showcase/boxes/label.ts","app-react/components/laboratory-showcase/boxes/showcase-configuration/showcase-configuration.box.ts","app-react/components/laboratory-showcase/boxes/showcase-content-container/showcase-content-container.box.ts","app-react/components/laboratory-showcase/showcases/toaster-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/burnout-animation-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/onboarding-tour-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/icons-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/pixi-spine-showcase.component.tsx","app-react/components/laboratory-showcase/boxes/bg.box.ts","app-react/components/laboratory-showcase/theme-switcher.component.tsx","app-react/basic-ui-components/form/textinput.box.ts","app-react/components/laboratory-showcase/showcases/buttons-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/typography-color-and-preset-showcase.component.tsx","app-react/components/laboratory-showcase/showcase-dropdown.component.tsx","app-react/components/laboratory-showcase/showcases/popups-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/media-query-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/client-hints-showcase.component.tsx","app-react/components/laboratory-showcase/boxes/showcase-wrapper/showcase-wrapper.box.ts","app-react/components/laboratory-showcase/boxes/showcase-label/showcase-label.box.ts","app-react/components/laboratory-showcase/boxes/showcase-collapse-indicator/showcase-collapse-indicator.box.ts","app-react/components/laboratory-showcase/boxes/showcase-content-wrapper/showcase-content-wrapper.box.ts","app-react/components/laboratory-showcase/laboratory-showcase-container.component.tsx","app-react/components/laboratory-showcase/showcases/simple-message-dialog-showcase.component.tsx","app-react/components/laboratory-showcase/laboratory-showcase.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-component/boxes/video.box.ts","app-react/components/live-streaming-tile/video-common-components/video-container/video-container.box.ts","app-react/components/live-streaming-tile/video-common-components/video-component/video.component.tsx","app-react/components/lobby-game-info-preview/common/boxes/section-title/section-title.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/cell/boxes/cell-value-bool/cell-value-bool.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/cell/boxes/cell-value-bool/cell-value-bool.default.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/cell/boxes/cell-value-text/cell-value-text.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/cell/boxes/cell-title/cell-title.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/cell/game-feature-cell.component.tsx","app-react/components/lobby-game-info-preview/common/game-info-container/features/table/boxes/table-container/table-container.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/table/game-features-table.component.tsx","app-react/components/lobby-game-info-preview/common/game-info-container/about/boxes/game-description-text/game-description-text.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/about/game-about.component.tsx","app-react/components/lobby-game-info-preview/common/game-info-container/jackpot/boxes/game-jackpot-preview/game-jackpot-preview.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/jackpot/boxes/game-jackpot-preview/game-jackpot-preview.default.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/jackpot/boxes/jackpot-amount-preview/jackpot-amount-preview.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/jackpot/game-jackpot-preview.component.tsx","app-react/components/lobby-game-info-preview/common/game-info-container/game-preview-info-container.default.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/game-preview-info-container.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/game-preview-info-container.component.tsx","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/stripe-image/boxes/stripe-image/stripe-image.default.box.ts","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/stripe-image/boxes/stripe-image/stripe-image.box.ts","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/stripe-image/game-stripe-image.component.tsx","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/trailer/boxes/trailer/trailer.box.ts","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/trailer/boxes/trailer/trailer.default.box.ts","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/trailer/game-trailer.component.tsx","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/trailer-or-stripe-image.component.tsx","app-react/components/lobby-header/boxes/container/lobby-header-title.container.box.ts","app-react/components/lobby-header/boxes/title/lobby-header-title.box.ts","app-react/components/lobby-header/boxes/lobby-header.default.box.ts","app-react/components/lobby-header/boxes/lobby-header.si.box.ts","app-react/components/lobby-header/boxes/lobby-header.mrgreen.box.ts","app-react/components/lobby-header/boxes/lobby-header.wsop.box.ts","app-react/components/lobby-header/boxes/lobby-header.box.ts","app-react/components/lobby-header/boxes/line/lobby-header-line.box.ts","app-react/components/lobby-header/boxes/buttons/lobby-header-buttons-container.box.ts","app-react/components/lobby-header/boxes/buttons/lobby-header-button.box.ts","app-react/components/lobby-header/lobby-header.component.tsx","app-react/components/lottie-player/dot-lottie-player.component.tsx","app-react/components/loyalty-bar/loyalty-bar-wrapper.component.tsx","app-react/components/modal-dialog/boxes/close-button/dialog-close-button.box.ts","app-react/components/modal-dialog/boxes/close-button/dialog-close-button.default.box.ts","app-react/components/modal-dialog/boxes/text/dialog-text.box.ts","app-react/components/modal-dialog/boxes/title/dialog-title.box.ts","app-react/components/modal-dialog/css-classes.ts","app-react/components/modal-dialog/boxes/actions/buttons-wrapper.box.ts","app-react/components/modal-dialog/boxes/actions/button-wrapper.box.ts","app-react/components/modal-dialog/boxes/actions/link-action.box.ts","app-react/components/modal-dialog/boxes/actions/link-wrapper.box.ts","app-react/components/modal-dialog/modal-dialog-actions.component.tsx","app-react/components/modal-dialog/boxes/header/dialog-header.box.ts","app-react/components/modal-dialog/boxes/header-buttons/header-buttons-container.box.ts","app-react/components/modal-dialog/parts/header/dialog-header.component.tsx","app-react/components/raw-components/aspect-ratio-container/aspect-ratio-container.component.tsx","app-react/components/raw-components/link/link.tsx","app-react/components/responsible-gambling/minimum-gambling-age/boxes/icon/minimum-gambling-age-icon.default.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/boxes/minimum-gambling-age.default.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/boxes/minimum-gambling-age.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/boxes/icon/minimum-gambling-age-icon.si.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/boxes/icon/minimum-gambling-age-icon.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/minimum-gambling-age.component.tsx","app-react/components/responsible-gambling/minimum-gambling-age/regulations/netherlands/boxes/netherlands-minimum-gambling-age-label.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/regulations/netherlands/netherlands.minimum-gambling-age.component.tsx","app-react/components/responsible-gambling/minimum-gambling-age/regulations/sweden/boxes/sweden.minimum-gambling-age-icon.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/regulations/sweden/sweden.minimum-gambling-age.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/boxes/denmark.responsible-gaming-buttons.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/boxes/denmark.responsible-gaming-button-base.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/safe-to-play-button/boxes/denmark.safe-to-play-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/safe-to-play-button/denmark.safe-to-play-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/self-exclusion/boxes/denmark.self-exclusion-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/self-exclusion/denmark.self-exclusion-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/self-test-button/boxes/denmark.self-test-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/self-test-button/denmark.self-test-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/responsible-gaming-button/denmark.secondary-responsible-gaming-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/responsible-gaming-button/denmark.secondary-responsible-gaming-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/denmark.responsible-gaming-buttons.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/css-classes.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-tooltip.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-popup.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-popup-time.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-popup-ok.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/panic-button-popup.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-tooltip-click-here.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-tooltip-close.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-mobile-overlay.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/responsible-gaming-buttons-germany.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/netherlands/self-test-button/boxes/netherlands.self-test-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/netherlands/self-test-button/netherlands.self-test-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/ontario/boxes/ontario.responsible-gaming-buttons.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/ontario/safe-to-play/boxes/ontario.safe-to-play-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/ontario/safe-to-play/ontario.safe-to-play-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/ontario/ontario.responsible-gaming-buttons.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/boxes/sweden.responsible-gaming-buttons.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/boxes/sweden.responsible-gaming-button-base.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/self-exclusion-button/boxes/sweden.self-exclusion-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/self-exclusion-button/sweden.self-exclusion-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/gaming-limits/boxes/sweden.gaming-limits-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/gaming-limits/sweden.gaming-limits-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/self-test-button/boxes/sweden.self-test-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/self-test-button/sweden.self-test-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/sweden.responsible-gaming-buttons.component.tsx","app-react/components/side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-icon.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-label.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/side-menu-items-list.default.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/side-menu-items-list.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-image.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-pre-icon.box.ts","app-react/components/side-menu-rework/side-menu-items/generic-side-menu-item.component.tsx","app-react/components/side-menu-rework/side-menu-items/boxes/side-menu-item-container.box.ts","app-react/components/side-menu-rework/side-menu-items/side-menu-item-container.component.tsx","app-react/components/side-menu-rework/side-menu-links-group/side-menu-links-group.component.tsx","app-react/components/single-game/common/boxes/game-image/game-image.box.ts","app-react/components/single-game/common/boxes/game-image/game-image.default.box.ts","app-react/components/single-game/common/boxes/game-image/game-image-animated.box.ts","app-react/components/single-game/common/boxes/game-image/game-image-animated.default.box.ts","app-react/components/single-game/common/parts/game-image/game-image-animated.component.tsx","app-react/components/single-game/common/parts/game-image/game-image.component.tsx","app-react/components/single-game/css-constants.ts","app-react/components/toaster/toasts-content/boxes/standard-toast-image/standard-toast-image.default.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.default.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.777.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.si.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.mrgreen.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.888.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.box.ts","app-react/components/top-image/boxes/top-banner-image/top-banner-image.box.ts","app-react/components/top-image/boxes/top-banner-image/top-banner-image.default.box.ts","app-react/components/top-image/boxes/top-banner-logo-image/top-banner-logo-image.default.box.ts","app-react/components/top-image/boxes/top-banner-logo-image/top-banner-logo-image.box.ts","app-react/components/top-image/boxes/top-banner-title/top-banner-title.default.box.ts","app-react/components/top-image/boxes/top-banner-title/top-banner-title.casino777.box.ts","app-react/components/top-image/boxes/top-banner-title/top-banner-title.box.ts","app-react/components/top-image/boxes/top-banner-live-logo/top-banner-live-logo.default.box.ts","app-react/components/top-image/boxes/top-banner-live-logo/top-banner-live-logo.casino777.box.ts","app-react/components/top-image/boxes/top-banner-live-logo/top-banner-live-logo.box.ts","app-react/components/animated-top-image/boxes/animated-top-image-wrapper.ts","app-react/components/animated-top-image/lottie-animated-top-image.component.tsx","app-react/components/animated-top-image/pixi-animated-top-image.component.tsx","app-react/components/animated-top-image/animated-top-image.component.tsx","app-react/components/top-image/top-image.component.tsx","app-react/components/useful-links/boxes/list/useful-links-list.box.ts","app-react/components/useful-links/parts/useful-links-list/useful-links-list.component.tsx","app-react/components/user-menu/user-menu-items/boxes/separator/user-menu-separator.box.ts","app-react/components/user-menu/user-menu/boxes/section/user-menu-section.box.ts","app-react/components/video-player/play-button/boxes/video-play-button.box.tsx","app-react/react-hooks/use-services.hook.ts","app-react/react-hooks/with-services.tsx","app-react/services/ServiceBase.ts","app-react/services/analytics/analytics.service.interface.ts","app-react/services/arenas/arena-consts.ts","app-react/services/casinofied/casinofied-helper-functions.ts","app-react/services/casinofied/message-broker/message-broker.consts.ts","app-react/services/cms/cms-banners/banner-definition/empty-banner-definition.tsx","app-react/services/cms/cms-banners/cm-banner-id/cms-banner-id.ts","app-react/services/control-center/control-center.service.interface.ts","app-react/services/dialog/dialog.service.interface.ts","app-react/services/external-links/external-links-z-indexes.ts","app-react/services/external-links/handlers/pending-action/pending-action.external-link-handler.interface.ts","app-react/services/external-links/handlers/registration/registration.external-link-handler.interface.ts","app-react/services/game-preview-features-selector/preview-features/game-preview-feature.interface.ts","app-react/services/game-runner/interfaces/game-context/game-context-view-model.interface.ts","app-react/services/game-runner/interfaces/game-step/game-run-step.interface.ts","app-react/services/game-vendor/game-vendor-id.enum.ts","app-react/services/games-filter/games-filter.service.interface.ts","app-react/services/games-open-sessions/games-open-sessions-kind.enum.ts","app-react/components/lobby-game-info-preview/intermediate-page/title/boxes/game-info-button/game-info-button.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/title/title.component.tsx","app-react/components/lobby-game-info-preview/intermediate-page/game-icon-and-play-buttons/boxes/container/container.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/game-icon-and-play-buttons/boxes/container/container.default.box.ts","app-react/basic-components/play-buttons/play-buttons.box.ts","app-react/basic-components/play-buttons/play-buttons.default.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/game-icon-and-play-buttons/game-icon-and-play-buttons.component.tsx","app-react/components/lobby-game-info-preview/intermediate-page/boxes/intermediate-page/intermediate-page.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/boxes/stripe-image-and-buttons/stripe-image-and-buttons.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/boxes/stripe-image-and-buttons/stripe-image-and-buttons.default.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/boxes/gradient/gradient.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-image/warning-image.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-image/warning-image.default.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-text/warning-text.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-text/warning-text.default.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-message/warning-message.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-message/warning-message.default.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/only-real-money-warning.component.tsx","app-react/components/lobby-game-info-preview/intermediate-page/open-game-intermediate-page.component.tsx","app-react/services/games/game-info.tsx","app-react/services/games/games-categories.enum.ts","app-react/services/gaming-history/gaming-history-type.ts","app-react/services/gnwp/gnwp-consts.ts","app-react/services/media-query/breakpoints.ts","app-react/services/media-query/media-query-builder.ts","app-react/services/media-query/media-queries.ts","app-react/services/menu-item-action-factory/custom-actions/about-dialog.action.ts","app-react/services/menu-item-action-factory/custom-actions/cashier-upload-documents.action.ts","app-react/services/menu-item-action-factory/custom-actions/chat.action.ts","app-react/services/menu-item-action-factory/custom-actions/com-points.action.ts","app-react/services/menu-item-action-factory/custom-actions/control-center.action.ts","app-react/services/menu-item-action-factory/custom-actions/deposit.action.ts","app-react/services/menu-item-action-factory/custom-actions/help-center.action.ts","app-react/services/menu-item-action-factory/custom-actions/hybrid-info.action.ts","app-react/services/menu-item-action-factory/custom-actions/inactivity-timeout-settings.action.ts","app-react/services/menu-item-action-factory/custom-actions/install-pwa.action.ts","app-react/services/menu-item-action-factory/custom-actions/loyalty-indicator.action.ts","app-react/services/menu-item-action-factory/custom-actions/my-club.action.ts","app-react/services/menu-item-action-factory/custom-actions/push-notifications-permissions-request.action.ts","app-react/services/menu-item-action-factory/custom-actions/reverse-withdrawal.action.ts","app-react/services/menu-item-action-factory/custom-actions/sign-up.action.ts","app-react/services/menu-item-action-factory/custom-actions/test-regulation-specific.action.ts","app-react/services/menu-item-action-factory/custom-actions/time-spent-reminder.action.ts","app-react/services/menu-item-action-factory/custom-actions/touch-id.action.ts","app-react/services/menu-item-action-factory/custom-actions/transaction-history.action.ts","app-react/services/menu-item-action-factory/menu-item-action-base.ts","app-react/services/menu-items-common/menu-item-config-reader/menu-item-config-reader-base.ts","app-react/services/menu-items-common/menu-item-config-reader/menu-item-default-config-reader.ts","app-react/services/menu-items-common/renderer/menu-item-renderer-base.ts","app-react/services/pixi-app/animated-icon-base-service.service.ts","app-react/services/pixi-app/pixi-spine-animation.ts","app-react/services/storage/local-storage-keys.ts","app-react/services/theme/standard-theme-customizer.ts","app-react/services/toaster/toast-helpers/toast-classnames.helper.ts","app-react/services/toaster/toaster.service.interface.ts","app-react/services/tooltip/on-boarding-tooltip/on-boarding-tooltip-target-selectors.ts","app-react/themes/architecture/asset.ts","app-react/themes/architecture/by-theme-registry.ts","app-react/themes/architecture/css-helpers/css-rule.ts","app-react/themes/architecture/css-helpers/flex.ts","app-react/themes/architecture/gray-colors.ts","app-react/themes/architecture/sections/theme-layout.interface.ts","app-react/themes/architecture/styled-box.tsx","app-react/themes/architecture/styled-by-device.tsx","app-react/themes/architecture/styled-by-theme.tsx","app-react/themes/architecture/theme-names.ts","app-react/themes/assets.ts","app-react/themes/defaults/icons/mobile-menu.icon.tsx","app-react/themes/defaults/icons/add.icon.tsx","app-react/themes/defaults/icons/back.icon.tsx","app-react/themes/defaults/icons/forward.icon.tsx","app-react/themes/defaults/icons/close.icon.tsx","app-react/themes/defaults/icons/control-center.icon.tsx","app-react/themes/defaults/icons/help.icon.tsx","app-react/themes/defaults/icons/two-chars.icon.tsx","app-react/themes/defaults/icons/earth-globe.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/top-games.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/roulette.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/blackjack.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/elite-lounge.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/poker.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/baccarat.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/game-shows.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/new-games.icon.tsx","app-react/themes/defaults/icons/link-to-offer.icon.tsx","app-react/themes/defaults/icons/link-to-offer-close.icon.tsx","app-react/themes/defaults/icons/source-of-funds.icon.tsx","app-react/themes/defaults/icons/arrows-up-down.icon.tsx","app-react/themes/defaults/icons/megaphone.icon.tsx","app-react/themes/defaults/icons/chip.icon.tsx","app-react/themes/defaults/icons/settings.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/mute.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/unmute.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/viewers.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/broken-link.icon.tsx","app-react/themes/defaults/icons/time-reminder.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/triple-eight-exclusive.icon.tsx","app-react/themes/defaults/icons/payments-redirect.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/left-arrow.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/right-arrow.icon.tsx","app-react/themes/defaults/icons/location.icon.tsx","app-react/themes/defaults/icons/side-menu/blog.icon.tsx","app-react/themes/defaults/icons/side-menu/home.icon.tsx","app-react/themes/defaults/icons/side-menu/promotions.icon.tsx","app-react/themes/defaults/icons/side-menu/slots.icon.tsx","app-react/themes/defaults/icons/side-menu/jackpots.icon.tsx","app-react/themes/defaults/icons/side-menu/live-casino.icon.tsx","app-react/themes/defaults/icons/side-menu/casino-games.icon.tsx","app-react/themes/defaults/icons/side-menu/vip.icon.tsx","app-react/themes/defaults/icons/side-menu/new-games.icon.tsx","app-react/themes/defaults/icons/side-menu/888casino.icon.tsx","app-react/themes/defaults/icons/side-menu/blackjack.icon.tsx","app-react/themes/defaults/icons/side-menu/roulette.icon.tsx","app-react/themes/defaults/icons/side-menu/getting-started.icon.tsx","app-react/themes/defaults/icons/side-menu/banking.icon.tsx","app-react/themes/defaults/icons/side-menu/live-chat.icon.tsx","app-react/themes/defaults/icons/side-menu/download-app.icon.tsx","app-react/themes/defaults/icons/side-menu/club888.icon.tsx","app-react/themes/defaults/icons/side-menu/poker-circle.icon.tsx","app-react/themes/defaults/icons/side-menu/sport-circle.icon.tsx","app-react/themes/defaults/icons/side-menu/video-poker.icon.tsx","app-react/themes/defaults/icons/side-menu/deposit.icon.tsx","app-react/themes/defaults/icons/freeplay.icon.tsx","app-react/themes/defaults/icons/notifications.icon.tsx","app-react/themes/defaults/icons/help-center.icon.tsx","app-react/themes/defaults/icons/warning-sign.icon.tsx","app-react/themes/defaults/icons/usa-map.icon.tsx","app-react/themes/defaults/icons/side-menu/scratch-cards.icon.tsx","app-react/themes/defaults/icons/mobile-menu-no-search.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/speed-games.icon.tsx","app-react/themes/defaults/icons/filter.icon.tsx","app-react/themes/defaults/icons/temp-account-popup.icon.tsx","app-react/themes/defaults/icons/side-menu/mobile-apps.icon.tsx","app-react/themes/defaults/icons/header-navbar/app-header-sport.icon.tsx","app-react/themes/defaults/icons/header-navbar/app-header-poker.icon.tsx","app-react/themes/defaults/icons/header-navbar/app-header-logo-888.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/self-exclusion.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/self-exclusion-symbol.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/gaming-limit.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/gaming-limit-symbol.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/self-test.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/self-test-symbol.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/minimum-gambling-age.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/panic-button.icon.tsx","app-react/themes/defaults/icons/history.icon.tsx","app-react/themes/defaults/icons/transaction-history.icon.tsx","app-react/themes/defaults/icons/security.icon.tsx","app-react/themes/defaults/icons/comp-points.icon.tsx","app-react/themes/defaults/icons/timer.icon.tsx","app-react/themes/defaults/icons/biometric-login.icon.tsx","app-react/themes/defaults/icons/about.icon.tsx","app-react/themes/defaults/icons/gaming-history.icon.tsx","app-react/themes/defaults/icons/upload-documents.icon.tsx","app-react/themes/defaults/icons/tipping-history.icon.tsx","app-react/themes/defaults/icons/reverse-withdrawal.icon.tsx","app-react/themes/defaults/icons/open-external.icon.tsx","app-react/themes/defaults/icons/wallet.icon.tsx","app-react/themes/defaults/icons/register-user.icon.tsx","app-react/themes/defaults/icons/save-game.icon.tsx","app-react/themes/defaults/icons/side-menu/poker-chip.icon.tsx","app-react/themes/defaults/icons/side-menu/sport-football.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/red-record-circle.icon.tsx","app-react/themes/defaults/icons/leave.icon.tsx","app-react/themes/defaults/icons/sound-on.icon.tsx","app-react/themes/defaults/icons/sound-off.icon.tsx","app-react/themes/defaults/icons/retry-arrow.icon.tsx","app-react/themes/defaults/icons/explore-filled.icon.tsx","app-react/themes/defaults/icons/explore-outlined.icon.tsx","app-react/themes/defaults/icons-registry.ts","app-react/themes/defaults/icons/info.icon.tsx","app-react/themes/defaults/icons/search.icon.tsx","app-react/themes/definitions/casino777/base-colors.ts","app-react/themes/definitions/casino888/base-colors.ts","app-react/themes/definitions/harrahs/base-colors.ts","app-react/themes/definitions/mrgreen/base-colors.ts","app-react/themes/definitions/mrgreen/icons/header-navbar/app-header-casino.icon.tsx","app-react/themes/definitions/si/base-colors.ts","app-react/themes/hex-to-rgba.ts","common/const/ab-testing-names.ts","common/const/ai-trending-list-ids-map.ts","common/const/casinofied-analytics-consts.ts","common/const/free_play_consts.ts","common/const/game_groups_consts.ts","common/const/jackpot_map_ids.ts","common/const/migration_consts.ts","common/const/responsible-gaming.ts","common/const/state-of-residence-cookie_const.ts","common/const/temp_account_status.ts","common/const/wallet_balance_type.ts","common/cy-classes.ts","common/enums/game-childish-icon-mode.enum.ts","common/interfaces/orbit-component-to-sdk-adapter/components-props/time-spent-reminder-options.ts","common/utils/color-util.ts","common/utils/image-preload.ts","app-react/app-bootstrap/application-startup-configurations-reader/application-startup-configurations-reader.ts","app-react/app-bootstrap/sdk-initializer/sdk-hooks-provider.ts","app-react/services/configurations/evaluation/properties-evaluator/properties-evaluator.ts","app-react/services/configurations/evaluation/statements/statements-evaluator/statements-evaluator.ts","app-react/services/configurations/evaluation/value-evaluators/object-evaluator/object-evaluator.ts","app-react/services/configurations/evaluation/value-evaluators/array-evaluator/array-evaluator.ts","app-react/services/configurations/evaluation/value-evaluators/simple-value-evaluator/simple-value-evaluator.ts","app-react/services/configurations/evaluation/statements/statement-evaluator/statement-evaluator.ts","app-react/services/configurations/evaluation/statements/logical-operators/base-logical-operator.ts","app-react/services/configurations/evaluation/statements/logical-operators/or-logical-operator/or-logical-operator.ts","app-react/services/configurations/evaluation/statements/logical-operators/and-logical-operator/and-logical-operator.ts","app-react/services/configurations/evaluation/statements/segmentation-rule/segmentation-rule.ts","app-react/services/configurations/evaluation/statements/comparison-operators/base-comparison-operator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/equal-operator/equal-operator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/not-equal-operator/not-equal-operator.ts","app-react/services/configurations/evaluation/property-level-context/property-level-context.ts","app-react/services/configurations/evaluation/property-evaluator/property-evaluator.ts","app-react/services/configurations/create-statements-definition.ts","app-react/services/configurations/evaluation/special-properties-evaluators/games-id-property-evaluator/games-id-property-evaluator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/is-falsy-operator/is-falsy-operator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/greater-than-operator/greater-than-operator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/less-than-operator/less-than-operator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/any-of-operator/any-of-operator.ts","app-react/services/configurations/evaluation/configuration-evaluation-context/configuration-evaluation-context.ts","app-react/services/configurations/inject-admin-arenas.ts","app-react/app-bootstrap/sdk-initializer/sdk-initializer.ts","app-react/services/qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.service.constants.ts","app-react/services/qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.service.ts","app-react/services/video-live-stream/video-playing-service-base.ts","common/utils/pausable-timer.ts","app-react/services/video-live-stream/video-players/live-stream-players/video-live-stream-player-base.ts","app-react/services/video-live-stream/video-players/live-stream-players/native/video-live-stream-player-native.ts","app-react/services/video-live-stream/video-players/live-stream-players/hls/video-player-hls-base.ts","app-react/services/video-live-stream/video-players/live-stream-players/hls/video-live-stream-player-hls.ts","app-react/services/video-live-stream/live-stream-playing.service.ts","app-react/services/translation/text-translation.ts","app-react/services/translation/translation.service.ts","app-react/services/currency/currency-symbol.interface.ts","app-react/services/currency/currency.service.ts","app-react/services/analytics/analytics.service.ts","common/const/saved-games-ls-key_const.ts","app-react/services/games/games.service.ts","app-react/services/configurations/configurations.service.ts","app-react/services/configurations/config-data-sections/arenas.configuration.ts","app-react/services/user/model/user-sound-preferences.ts","app-react/services/user/model/user-preferences.ts","app-react/services/user/user.service.ts","app-react/services/segmentation-aggregator/segmentation-aggregator.service.ts","app-react/services/device/device.service.ts","app-react/consts/seo-categories.ts","app-react/services/ai-engine/ai-engine.service.ts","app-react/services/sdk/cgp-sdk.interface.ts","app-react/services/sdk/sdk-events.ts","app-react/services/sdk/sdk-events-trigger.ts","app-react/services/sdk/sdk.service.ts","app-react/app-bootstrap/constants.ts","app-react/services/games-filter/strategies/no-filter/no-games-filter.strategy.ts","app-react/services/games-filter/games-filters-storage.ts","app-react/services/games-filter/games-filter.service.ts","app-react/components/single-game/common/boxes/game-badge/game-badge.default.box.ts","app-react/components/single-game/common/boxes/game-badge/game-badge.casino777.box.ts","app-react/components/single-game/common/boxes/game-badge/game-badge.box.ts","app-react/components/single-game/common/parts/game-badge/game-badge.component.tsx","app-react/components/single-game/common/parts/game-image-container.component/game-image-container.component.tsx","app-react/components/single-game/regular-template/boxes/game-title/game-title.default.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.casino777.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.cip.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.si.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.mrgreen.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.default.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.casino777.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.si.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.mrgreen.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.cis.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.box.ts","app-react/components/single-game/regular-template/parts/info-page-button/info-page-button.component.tsx","app-react/components/single-game/regular-template/boxes/game-buttons/game-buttons.box.ts","app-react/components/single-game/regular-template/boxes/game-buttons/game-buttons.default.box.ts","app-react/components/single-game/regular-template/parts/play-demo-button/play-demo-button.component.tsx","app-react/components/single-game/regular-template/boxes/game-details-container/game-details-container.default.box.ts","app-react/components/single-game/regular-template/boxes/game-details-container/game-details-container.casino777.box.ts","app-react/components/single-game/regular-template/boxes/game-details-container/game-details-container.box.ts","app-react/components/single-game/regular-template/boxes/jackpot-amount/jackpot-amount.default.box.ts","app-react/components/single-game/regular-template/boxes/jackpot-amount/jackpot-amount.casino777.box.ts","app-react/components/single-game/regular-template/boxes/jackpot-amount/jackpot-amount.si.box.ts","app-react/components/single-game/regular-template/boxes/jackpot-amount/jackpot-amount.mrgreen.box.ts","app-react/components/single-game/regular-template/boxes/jackpot-amount/jackpot-amount.box.ts","app-react/components/single-game/regular-template/boxes/game-info-container/game-info-container.box.ts","app-react/components/single-game/regular-template/boxes/game-info-container/game-info-container.default.box.ts","app-react/components/single-game/regular-template/boxes/amount-container/amount-container.box.ts","app-react/components/single-game/regular-template/boxes/two-rows-game-title-container/two-rows-game-title-container.box.ts","app-react/components/single-game/regular-template/parts/game-details-container/game-details-container.component.tsx","app-react/components/single-game/regular-template/boxes/game/game.default.box.ts","app-react/components/single-game/regular-template/boxes/game/game.casino777.box.ts","app-react/components/single-game/regular-template/boxes/game/game.cis.box.ts","app-react/components/single-game/regular-template/boxes/game/game.box.ts","app-react/components/single-game/regular-template/boxes/play-real-button/play-real-button.default.box.ts","app-react/components/single-game/regular-template/boxes/play-real-button/play-real-button.casino777.box.ts","app-react/components/single-game/regular-template/boxes/play-real-button/play-real-button.casino888.box.ts","app-react/components/single-game/regular-template/boxes/play-real-button/play-real-button.box.tsx","app-react/components/single-game/regular-template/boxes/game-image-container/game-image-container.default.box.ts","app-react/components/single-game/regular-template/boxes/game-image-container/game-image-container.casino777.box.ts","app-react/components/single-game/video-template/single-game-video-template.component.tsx","app-react/components/single-game/regular-template/boxes/game-image-container/game-image-container.box.ts","app-react/components/single-game/regular-template/boxes/game-number-badge/game-number-badge.default.box.ts","app-react/components/single-game/regular-template/boxes/game-number-badge/game-number-badge.mrgreen.box.ts","app-react/components/single-game/regular-template/boxes/game-number-badge/game-number-badge.wsop.box.ts","app-react/components/single-game/regular-template/boxes/game-number-badge/game-number-badge.box.ts","app-react/components/single-game/regular-template/single-game-regular-template.component.tsx","utils/css-class-name-builder.ts","app-react/components/single-game/jackpot-template/boxes/game/game.default.box.ts","app-react/components/single-game/jackpot-template/boxes/game/game.box.ts","app-react/components/single-game/jackpot-template/boxes/game-image-container/game-image-container.default.box.ts","app-react/components/single-game/jackpot-template/boxes/game-image-container/game-image-container.box.ts","app-react/components/single-game/jackpot-template/boxes/game-details-container/game-details-container.box.ts","app-react/components/single-game/jackpot-template/boxes/game-details-container/game-details-container.default.box.ts","app-react/components/single-game/jackpot-template/boxes/game-title/game-title.default.box.ts","app-react/components/single-game/jackpot-template/boxes/game-title/game-title.casino777.box.ts","app-react/components/single-game/jackpot-template/boxes/game-title/game-title.box.ts","app-react/components/single-game/jackpot-template/boxes/jackpot-amount/jackpot-amount.default.box.ts","app-react/components/single-game/jackpot-template/boxes/jackpot-amount/jackpot-amount.casino777.box.ts","app-react/components/single-game/jackpot-template/boxes/jackpot-amount/jackpot-amount.box.ts","app-react/components/single-game/jackpot-template/parts/game-details-container/game-details-container.component.tsx","app-react/components/single-game/jackpot-template/single-game-jackpot-template.component.tsx","app-react/components/single-game/live-template/boxes/live-game-container/live-game-container.box.ts","app-react/components/single-game/live-template/boxes/live-game-container/live-game-container.default.box.ts","app-react/components/single-game/live-template/single-game-live-template.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile/boxes/video-tile.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile/boxes/video-tile-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-overlay-item/video-overlay-item.box.ts","app-react/components/live-streaming-tile/video-common-components/video-overlay-item/video-overlay-item.default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-sound-button/boxes/video-sound-button.box.ts","app-react/components/live-streaming-tile/video-common-components/video-sound-button/boxes/video-sound-button-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-sound-button/video-sound-button.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile-overlay/video-tile-overlay.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile-overlay/boxes/video-tile-overlay.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-overlay/boxes/video-tile-overlay-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-static-image-overlay/video-tile-static-image-overlay.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton-container/video-tile-skeleton-container.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton-container/video-tile-skeleton-container-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton/skeleton-animated-button.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton/skeleton-animated-rectangle.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-footer/boxes/video-tile-footer.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-footer/boxes/video-tile-footer-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton/video-tile.skeletonbox.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton/video-tile-skeleton.defaultbox.ts","app-react/components/single-game/single-game-skeleton.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-tile.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-tile-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-icon.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-icon-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-title.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-title-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-text.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-text-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-thumbnail-image/video-thumbnail-image.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile-betting-range/video-tile-betting-range.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-betting-range/video-tile-betting-range-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-game-title/video-tile-game-title.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-game-title/video-tile-game-title-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-footer/boxes/video-tile-footer-section.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-footer/boxes/video-tile-footer-section-default.box.ts","app-react/components/live-streaming-tile/static-video-specific-components/video-list-jackpot-value/video-list-jackpot-value.box.tsx","app-react/components/live-streaming-tile/static-video-specific-components/video-list-jackpot-container/video-list-jackpot-container.box.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile-footer/video-tile-footer.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile/video-tile.component.tsx","app-react/components/single-game/video-template/boxes/video-item-container.box.ts","app-react/components/single-game/video-template/boxes/video-item-container-default.box.ts","app-react/components/single-game/single-game.component.tsx","app-react/components/single-game-placeholder/boxes/placeholder/game-placeholder.default.box.ts","app-react/components/single-game-placeholder/boxes/placeholder/game-placeholder.box.ts","app-react/components/single-game-placeholder/boxes/game-image/game-image.box.ts","app-react/components/single-game-placeholder/boxes/game-image/game-image.default.box.ts","app-react/components/single-game-placeholder/single-game-placeholder.component.tsx","app-react/components/orbit-swiper/boxes/swiper-wrapper/swiper-wrapper.box.ts","app-react/components/orbit-swiper/boxes/swiper-games-list/swiper-games-list.box.ts","app-react/components/orbit-swiper/boxes/swiper/swiper.box.ts","app-react/components/orbit-swiper/boxes/swiper/swiper.default.box.ts","app-react/components/orbit-swiper/orbit-swiper.component.tsx","app-react/components/recently-played/recently-played.component.tsx","app-react/services/arenas/models/lists/games-list-base.model.tsx","app-react/components/game-list-title/boxes/list-title-icon/list-title-icon.box.ts","app-react/components/orbit-swiper/boxes/jackpot-widget-wrapper/jackpot-widget-wrapper.box.ts","app-react/components/orbit-swiper/boxes/jackpot-widget-wrapper/jackpot-widget-wrapper.default.box.ts","app-react/components/red-tiger-widget/boxes/widget/red-tiger-widget.box.ts","app-react/components/red-tiger-widget/boxes/widget/red-tiger-widget.default.box.ts","app-react/components/red-tiger-widget/boxes/hitArea/red-tiger-widget-hit-area.default.box.ts","app-react/components/red-tiger-widget/boxes/hitArea/red-tiger-widget-hit-area.casino777.box.ts","app-react/components/red-tiger-widget/boxes/hitArea/red-tiger-widget-hit-area.box.ts","app-react/components/red-tiger-widget/boxes/frameContainer/red-tiger-widget-frame-container.default.box.ts","app-react/components/red-tiger-widget/boxes/frameContainer/red-tiger-widget-frame-container.box.ts","app-react/components/red-tiger-widget/red-tiger-widget.component.tsx","app-react/components/game-list-title/boxes/list-title-text/list-title-text.box.ts","app-react/components/game-list-title/boxes/list-title/list-title.box.ts","app-react/components/game-list-title/game-list-title.component.tsx","app-react/components/orbit-swiper/orbit-swiper-buttons/boxes/wrapper/swiper-buttons.box.ts","app-react/components/orbit-swiper/orbit-swiper-buttons/boxes/button/swiper-button.box.ts","app-react/components/orbit-swiper/orbit-swiper-buttons/boxes/button/explore-button.box.ts","app-react/components/orbit-swiper/orbit-swiper-buttons/orbit-swiper-buttons.tsx","app-react/services/arenas/models/swiper-logic-handler/swipe-logic-handler.ts","app-react/components/titan-jackpot-widget/titan-jackpot-animation.component.tsx","app-react/components/titan-jackpot-widget/boxes/titan-jackpot-amount-container.box.ts","app-react/components/titan-jackpot-widget/titan-jackpot-amount.component.tsx","app-react/components/titan-jackpot-widget/titan-jackpot-widget.component.tsx","app-react/services/arenas/models/lists/swiper-list-base.model.tsx","app-react/services/arenas/models/lists/api-list-base.model.tsx","app-react/services/arenas/models/lists/recently-played/recently-played-list.model.tsx","app-react/components/ai-list/top-picks.component.tsx","app-react/services/arenas/models/lists/top-picks/top-picks-list.model.tsx","app-react/components/ai-new-games-list/ai-new-games-list.component.tsx","app-react/services/arenas/models/lists/new-games/new-games-list.model.tsx","app-react/components/players-like-you/players-like-you.component.tsx","app-react/services/arenas/models/lists/players-like-you/players-like-you-list.model.tsx","app-react/services/arenas/models/lists/static-swiper/static-swiper-list.model.tsx","app-react/components/games-grid/games-grid-batch/games-grid-batch.component.tsx","app-react/components/games-grid/boxes/games-grid/games-grid.box.ts","app-react/components/games-grid/boxes/no-games-found-message/no-games-found-message.box.ts","app-react/components/games-grid/boxes/no-games-found-message/no-games-found-message.default.box.ts","app-react/components/games-grid/boxes/games-grid-container.box.ts","app-react/components/games-grid/games-grid.component.tsx","app-react/services/arenas/models/lists/games-grid/games-grid-list.model.tsx","app-react/components/because-you-played/because-you-played.component.tsx","app-react/services/arenas/models/lists/because-you-played/because-you-played-list.model.tsx","app-react/components/live-streaming-tile/live-streaming-specific-components/live-streaming-list-title/live-streaming-list-title.box.ts","app-react/components/live-streaming-tile/live-streaming-specific-components/live-streaming-list-title/live-streaming-list-title.default.box.ts","app-react/components/live-streaming-tile/live-streaming-specific-components/live-streaming-title-icon/live-streaming-title-icon.box.ts","app-react/components/live-streaming-tile/live-streaming-specific-components/live-streaming-title-icon/live-streaming-title-icon.default.box.ts","app-react/services/arenas/models/swiper-logic-handler/live-stream-swipe-logic-handler.ts","app-react/components/live-streaming-tile/video-common-components/video-navigation/video-navigation.default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-navigation/video-navigation.box.ts","app-react/components/video-list-component/video-list.component.tsx","app-react/services/arenas/models/lists/video-list/default-video-list.model.tsx","app-react/services/arenas/models/lists/video-list/live-streaming-video-list.model.tsx","app-react/services/user-game-orientation/user-game-orientation.service.interface.ts","app-react/services/arenas/models/lists/video-list/static-video-list.model.tsx","app-react/services/arenas/models/lists/list-factory.ts","app-react/services/arenas/models/swiper-extra-content/promotional-banner/promotional-banner.model.tsx","app-react/components/video-slides/filter-preview/item/footer/video-slides-filter-item-preview-footer.box.ts","app-react/components/video-slides/filter-preview/item/footer-text/video-slides-filter-item-preview-footer-text.box.ts","app-react/components/video-slides/filter-preview/item/container/video-slides-filter-item-preview.box.ts","app-react/components/video-slides/filter-preview/item/player/video-slides-filter-item-preview-player.box.ts","app-react/components/video-slides/filter-preview/item/video-slides-filter-item-preview.component.tsx","app-react/components/video-slides/filter-preview/list/container/video-slides-filter-list-preview.box.ts","app-react/components/video-slides/filter-preview/list/header/video-slides-filter-list-preview-header.box.ts","app-react/components/video-slides/filter-preview/list/title/video-slides-filter-list-preview-title.box.ts","app-react/components/video-slides/filter-preview/list/content/video-slides-filter-list-preview-content.box.ts","app-react/components/video-slides/filter-preview/video-slides-filter-list-preview.component.tsx","app-react/services/arenas/models/swiper-extra-content/video-slides-filter-preview/video-slides-filter-preview.model.tsx","app-react/services/arenas/models/swiper-extra-content/swiper-extra-content.model.tsx","app-react/services/arenas/models/arenas/arena-base.model.tsx","app-react/components/daily-deal/boxes/daily-deal-container.box.ts","app-react/components/daily-deal/boxes/daily-deal-chest-glow.box.ts","app-react/components/daily-deal/boxes/daily-deal-chest.box.ts","app-react/components/daily-deal/boxes/daily-deal-text-strip.box.ts","app-react/components/daily-deal/boxes/daily-deal-chest-halo.box.ts","app-react/components/daily-deal/daily-deal.component.tsx","app-react/basic-components/layout-wrapper/layout-wrapper.box.ts","app-react/components/home-page-header-arenas/boxes/menu/menu-item/home-page-header-arena-menu-item.default.box.ts","app-react/components/home-page-header-arenas/boxes/menu/menu-item/home-page-header-arena-menu-item.mrgreen.box.ts","app-react/components/home-page-header-arenas/boxes/menu/menu-item/home-page-header-arena-menu-item.box.ts","app-react/components/home-page-header-arenas/boxes/menu/icon-box/home-page-header-arena-menu-item-icon.default.box.ts","app-react/components/home-page-header-arenas/boxes/menu/icon-box/home-page-header-arena-menu-item-icon.box.ts","app-react/components/home-page-header-arenas/boxes/menu/menu-item-name/home-page-header-arena-menu-item-name.default.box.ts","app-react/components/home-page-header-arenas/boxes/menu/menu-item-name/home-page-header-arena-menu-item-name.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.default.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.si.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.casino777.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.casino888.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.wsop.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/name/home-page-header-arena-name.default.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/name/home-page-header-arena-name.si.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/name/home-page-header-arena-name.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-badge/home-page-header-arena-badge.default.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-badge/home-page-header-arena-badge.si.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-badge/home-page-header-arena-badge.mrgreen.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-badge/home-page-header-arena-badge.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arenas-container.default.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arenas-container.casino888.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arenas-container.mrgreen.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arenas-container.casino777.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arenas-container.wsop.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arenas-container.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-link/home-page-header-arena-link.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-link/home-page-header-arena-link.default.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/skeleton/home-page-header-arena-skeleton.default.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/skeleton/home-page-header-arena-skeleton.si.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/skeleton/home-page-header-arena-skeleton.casino888.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/skeleton/home-page-header-arena-skeleton.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/ratio-image-wrapper/home-page-header-arena-ratio-image-wrapper.default.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/ratio-image-wrapper/home-page-header-arena-ratio-image-wrapper.caisno888.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/ratio-image-wrapper/home-page-header-arena-ratio-image-wrapper.box.ts","app-react/components/home-page-header-arenas/home-page-header-arena-tile.component.tsx","app-react/components/home-page-header-arenas/home-page-header-arenas.component.tsx","app-react/components/home-page/boxes/home-page-top-banner-background.box.ts","app-react/components/home-page/boxes/home-page-top-banner-divider-line.ts","app-react/components/link-to-offer/boxes/link-to-offer-base/link-to-offer-box-base.ts","app-react/components/link-to-offer/boxes/link-to-offer-icon/link-to-offer-icon.default.box.ts","app-react/components/link-to-offer/boxes/link-to-offer-icon/link-to-offer-icon.box.ts","app-react/components/link-to-offer/boxes/link-to-offer-dialog-close/link-to-offer-dialog-close.box.ts","app-react/components/link-to-offer/boxes/link-to-offer-dialog-close/link-to-offer-dialog-close.default.box.ts","app-react/components/link-to-offer/link-to-offer.component.tsx","app-react/components/home-page/home-page.component.tsx","app-react/services/games-filter/evaluators/game-filter-evaluator.interface.ts","app-react/services/games-filter/evaluators/or-game-filters-evaluator.ts","app-react/services/games-filter/evaluators/and-game-filters-evaluator.ts","app-react/services/games-filter/filters-categories-definitions/filter-category-definition-base.ts","app-react/services/game-theme/game-theme-id.enum.ts","app-react/services/games-filter/filters-definitions/game-filter-definition-base.ts","app-react/services/games-filter/filters-definitions/volatility/high-volatility.filter-definition.ts","app-react/services/games-filter/filters-definitions/volatility/low-volatility.filter-definition.ts","app-react/services/games-filter/filters-definitions/volatility/medium-volatility.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/volatility.filters-category-definition.ts","app-react/services/games-filter/filters-definitions/game-feature-filter-definition-base.ts","app-react/services/games-filter/filters-definitions/game-features/one-to-twenty-five.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/twenty-five-plus.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/new-game.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/low-stake.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/high-stake.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/bonus-game.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/free-spins.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/has-side-bets.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/is-multi-hand.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/game-features.filters-category-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-dailight-jackpot.filter-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-twilight-jackpot.filter-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-captain8-jackpot.filter-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-red-tiger-jackpot.filter-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-jackpot.filter-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-no-jackpot.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/has-jackpot.filters-category-definition.ts","app-react/services/games-filter/filters-definitions/vendor/vendor.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/game-vendor.filters-category-definition.ts","app-react/services/games-filter/filters-definitions/game-group-filter-definition-base.ts","app-react/services/games-filter/filters-definitions/game-group/baccarat.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/blackjack.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/craps.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/keno.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-elite-lunge.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-elite-lounge-or-exclusive.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-game-filter-definition-base.ts","app-react/services/games-filter/filters-definitions/game-group/live-game-shows.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/poker.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/roulette.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/scratchcards.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/slots.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/other-game-group.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-baccarat.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-blackjack.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-poker.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-roulette.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/game-group.filters-category-definition.ts","app-react/services/games-filter/filters-definitions/theme/game-theme.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/game-theme.filters-category-definition.ts","app-react/services/games-filter/filters-categories-definitions/filter-category-definition-factory.ts","app-react/services/games-filter/strategies/games-filter-strategy-base.ts","app-react/components/filters/advanced-filtering/filter-categories-list/boxes/filter-categories-list-container.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/filter-category.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/filter-category-content.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/filter-Item.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/input/filter-input.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/filter-item-title.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/sub-filters.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/filter-item-container.box.ts","app-react/components/filters/advanced-filtering/filter-category/filter-category-item.component.tsx","app-react/components/filters/advanced-filtering/filter-category/filter-category-content.component.tsx","app-react/components/filters/advanced-filtering/filter-category/boxes/title-category/filter-title-container.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/title/filter-title.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/preview/filter-preview.box.ts","app-react/components/filters/advanced-filtering/filter-category/filter-category-header.component.tsx","app-react/components/filters/advanced-filtering/filter-category/filter-category.component.tsx","app-react/components/filters/advanced-filtering/filter-categories-list/filter-categories-list.component.tsx","app-react/components/filters/advanced-filtering/boxes/filter/advanced-games-filter.box.ts","app-react/components/filters/advanced-filtering/boxes/filter-footer/advanced-games-filter-footer.box.ts","app-react/components/filters/advanced-filtering/boxes/filter-header/advanced-games-filter-header.box.ts","app-react/components/filters/advanced-filtering/boxes/filter-button/advanced-games-filter-button.box.ts","app-react/components/filters/advanced-filtering/filter-categories-list/boxes/filter-by.box.ts","app-react/components/filters/advanced-filtering/boxes/filter-categories-list.box.ts","app-react/components/filters/advanced-filtering/advanced-games-filter.component.tsx","app-react/services/games-filter/strategies/advanced-filter/advanced-games-filter-drawer-renderer.tsx","app-react/services/games-filter/arena-filters/filters/arena-game-filter-editor.ts","app-react/services/games-filter/arena-filters/categories/arena-game-filters-category-editor.ts","app-react/services/games-filter/strategies/advanced-filter/advanced-filters-analytics.ts","app-react/services/games-filter/strategies/advanced-filter/advanced-strategy-filters-editor.ts","app-react/components/filters/filters-games-list-mobile/boxes/menu-button/filters-mobile-button.box.ts","app-react/components/header/top-header-left/filters/filters-mobile-button.component.tsx","app-react/components/filters/advanced-filtering/boxes/indicator-container.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/boxes/applied-filter-indicator.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/boxes/applied-filters.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/boxes/remove-filter-button.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/boxes/applied-filter-name.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/boxes/applied-filters-container.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/applied-filters-pc-indicator-for-advanced-filtering.component.tsx","app-react/services/games-filter/arena-filters/categories/arena-game-filters-category-base.ts","app-react/services/games-filter/arena-filters/filters/arena-game-filter-base.ts","app-react/services/games-filter/arena-filters/filters/dynamic-arena-game-filter.ts","app-react/services/games-filter/arena-filters/categories/dynamic-arena-game-filters-category.ts","app-react/services/games-filter/strategies/advanced-filter/advanced-games-filter.strategy.tsx","app-react/services/arenas/models/arenas/home-page/home-page-arena.model.tsx","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-picture/arena-picture.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-picture/arena-picture.default.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-title/arena-title.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-title/arena-title.default.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-description-text/arena-description-text.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-description-text/arena-description-text.default.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/boxes/lobby-game-info/lobby-game-info.default.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/boxes/lobby-game-info/lobby-game-info.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/arena-info-preview.component.tsx","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/game-info-preview/title/pc-game-preview-title.component.tsx","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/game-info-preview/game-info-preview.component.tsx","app-react/components/lobby-game-info-preview/pc-game-info-preview/pc-game-info-preview.component.tsx","app-react/components/arena-host/seo-bread-crumbs/seo-breadcrumbs-container.box.ts","app-react/components/arena-host/seo-bread-crumbs/seo-bread-crumbs.component.tsx","app-react/components/arena-host/casino-arena/casino-arena.template-types.ts","app-react/components/arena-host/casino-arena/casino-arena.component.tsx","app-react/services/arenas/models/filters-configuration-to-map.ts","app-react/components/filters/filter-link/boxes/icon/filter-link-icon.box.ts","common/const/sub_game_group_consts.ts","app-react/components/filters/filter-link/boxes/filter-link.box.ts","app-react/components/filters/filter-link/filter-link.component.tsx","app-react/components/filters/filter-link-list/filters-games-list.default.box.ts","app-react/components/filters/filter-link-list/filters-games-list.box.ts","app-react/components/filters/filter-link-list/filter-link-list.component.tsx","app-react/components/filters/filters-games-list-mobile/boxes/popup/filters-games-mobile-popup.box.ts","app-react/components/filters/filters-games-list-mobile/boxes/popup/menu/filters-mobile-buttons.default.box.ts","app-react/components/filters/filters-games-list-mobile/boxes/popup/menu/filters-mobile-buttons.box.ts","app-react/components/filters/filters-games-list-mobile/filters-games-list-mobile.component.tsx","app-react/services/games-filter/strategies/simple-games-filter/simple-strategy-filters-editor.ts","app-react/services/games-filter/filters-definitions/other/other.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/other.filters-category-definition.ts","app-react/services/games-filter/arena-filters/filters/static-arena-game-filter.ts","app-react/services/games-filter/arena-filters/categories/static-arena-game-filters-category.ts","app-react/components/filters/filters-games-list-pc/boxes/filters-game-list-pc.default.box.ts","app-react/components/filters/filters-games-list-pc/boxes/filters-game-list-pc.box.ts","app-react/components/filters/filters-games-list-pc/filters-games-list-pc.component.tsx","app-react/services/games-filter/arena-filters/filters/adhoc-arena-game-filter.ts","app-react/services/games-filter/filters-definitions/company/company.filter-definitions.ts","app-react/services/games-filter/arena-filters/categories/adhoc-arena-games-filters-category.ts","app-react/services/games-filter/strategies/simple-games-filter/simple-games-filter.strategy.tsx","app-react/services/arenas/models/arenas/casino-lobby/casino-lobby-arena.model.tsx","app-react/services/arenas/models/arenas/void-arena/void-arena.model.ts","app-react/services/arenas/models/lists-sort-order-storage.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/boxes/live-casino-filter-button-label/live-casino-filter-button-label.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/boxes/live-casino-arena-navbar-button/live-casino-arena-navbar-button.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/live-casino-arena-navbar-button.component.tsx","app-react/components/arena-host/new-live-casino-arena/new-live-casino-arena.component.tsx","app-react/services/arenas/models/arenas/new-live-casino/new-live-casino-arena.model.tsx","app-react/services/arenas/models/arenas/new-live-casino-ab/new-live-casino-arena-ab.model.tsx","app-react/components/bottom-navigation-bar/boxes/container/bottom-navigation-bar-container.default.box.ts","app-react/components/bottom-navigation-bar/boxes/container/bottom-navigation-bar-container.box.ts","app-react/components/bottom-navigation-bar/boxes/menu-items-list/bottom-navigation-bar-menu-items-list.default.box.ts","app-react/components/bottom-navigation-bar/boxes/menu-items-list/bottom-navigation-bar-menu-items-list.box.ts","app-react/components/bottom-navigation-bar/bottom-navigation-bar-menu-items-list.component.tsx","app-react/components/bottom-navigation-bar/boxes/container/bottom-navbar-menu-item-container.box.ts","app-react/components/bottom-navigation-bar/bottom-navigation-bar.component.tsx","app-react/components/arena-host/video-slides-arena/boxes/video-slides-arena.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/boxes/video-slides-arena-header.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-arena-filters-indicator/boxes/video-slides-arena-filters-indicator.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-header-filter-button/video-slide-filter-button.box.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-header-filter-button/video-slide-filter-button-icon.box.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-header-filter-button/video-slides-header-filter-button.component.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-arena-filters-indicator/video-slides-arena-filters-indicator.component.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/boxes/video-slide-regulatory-data.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-header-filter-button/video-slides-user-menu-button.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/boxes/regulatory/video-slides-arena-regulatory-data.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/boxes/regulatory/license-status/license-status.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/boxes/regulatory/license-status/license-text-link.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-license-popup-content/video-slides-license-popup-content.component.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/video-slides-arena-header.component.tsx","app-react/components/spark-swiper/boxes/spark-swiper.box.ts","app-react/components/spark-swiper/boxes/spark-swiper-slide.box.ts","app-react/components/spark-swiper/spark-swiper-slide.component.tsx","app-react/components/spark-swiper/spark-swiper-consts.ts","app-react/components/spark-swiper/spark-swiper.component.tsx","app-react/components/video-slides/parts/on-boarding/boxes/video-slides-onboarding-overlay.box.ts","app-react/components/video-slides/parts/on-boarding/boxes/swiping-user-tip.box.ts","app-react/components/video-slides/parts/on-boarding/boxes/video-slides-tip-text.box.ts","app-react/components/video-slides/parts/on-boarding/video-slides-onboarding.component.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-swiper/video-slides-arena-swiper.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-swiper/video-slides-arena-swiper.component.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena.consts.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena.component.tsx","app-react/components/welcome-user/boxes/welcome-user.box.ts","app-react/components/welcome-user/boxes/welcome-greeting.box.ts","app-react/components/welcome-user/welcome-user.component.tsx","app-react/components/profile-box-messages-indicator/boxes/indicator.box.ts","app-react/components/profile-box-messages-indicator/boxes/indicator-icon.box.ts","app-react/components/profile-box-messages-indicator/boxes/indicator-badge.box.ts","app-react/components/profile-box-messages-indicator/boxes/indicator-text.box.ts","app-react/components/profile-box-messages-indicator/boxes/indicator-icon-wrapper.box.ts","app-react/components/profile-box-messages-indicator/profile-box-messages-indicator.component.tsx","app-react/components/profile-box-messages-indicator/indicators/omg-indicator.component.tsx","app-react/components/profile-box-messages-indicator/indicators/freeplay-indicator.component.tsx","app-react/components/loyalty-bar/loyalty-bar.component.tsx","app-react/components/user-info/user-info.component.tsx","app-react/components/user-info/user-info-label.box.ts","app-react/components/user-details/boxes/user-menu-name.box.ts","app-react/components/user-details/boxes/user-menu-support-id.box.ts","app-react/components/user-details/user-details.component.tsx","app-react/components/useful-links/useful-links.component.tsx","app-react/components/balance-box/bonus-and-cash-balance/boxes/bonus-and-cash-balance.box.ts","app-react/components/balance-box/bonus-and-cash-balance/boxes/balance-inner.box.ts","app-react/components/balance-box/bonus-and-cash-balance/boxes/balance-label-inner.box.ts","app-react/components/balance-box/balance-value-boxes/balance-value-bonus-and-cash.box.ts","app-react/components/balance-box/bonus-and-cash-balance/bonus-and-cash-balance.component.tsx","app-react/components/balance-box/balance-box-buttons/boxes/balance-buttons-group.box.ts","app-react/components/balance-box/balance-box-buttons/user-balance-buttons.component.tsx","app-react/components/balance-box/boxes/user-menu-balance-label.box.ts","app-react/components/balance-box/balance-value-boxes/balance-value-primary.box.ts","app-react/components/balance-box/user-balance.component.tsx","app-react/components/user-menu/user-menu-items/user-menu-items-container.component.tsx","app-react/components/user-menu/mini-control-center/boxes/mini-control-center.box.ts","app-react/components/user-menu/mini-control-center/mini-control-center.component.tsx","app-react/components/user-menu/user-menu/boxes/user-menu-scroll-wrapper.box.ts","app-react/components/profile-box/boxes/profile-box-messages/profile-messages.box.ts","app-react/components/user-menu/user-menu/boxes/user-menu-fake-ios-padding.box.ts","app-react/components/user-menu-logout/boxes/log-out-link.box.ts","app-react/components/user-menu-logout/user-menu-logout.component.tsx","app-react/components/user-menu-footer/boxes/user-menu-app-version.box.ts","app-react/components/user-menu-footer/user-menu-footer.component.tsx","app-react/components/user-menu/save-games-widget/boxes/save-games-widget.box.ts","app-react/components/user-menu/save-games-widget/boxes/save-games-widget-games-container.box.tsx","app-react/components/user-menu/save-games-widget/boxes/save-games-widget-games-title.box.ts","app-react/components/user-menu/save-games-widget/boxes/save-games-widget-header.box.ts","app-react/components/user-menu/save-games-widget/save-games-widget-header.component.tsx","app-react/components/user-menu/save-games-widget/save-games-widget.component.tsx","app-react/components/user-menu/user-menu/user-menu-mobile.component.tsx","app-react/components/user-menu/close-button/boxes/user-menu-close-pc-button.box.ts","app-react/components/user-menu/close-button/boxes/close-icon/user-menu-close-icon.box.tsx","app-react/components/user-menu/user-menu/boxes/header/user-menu-header.box.ts","app-react/components/user-menu/user-menu/user-menu-pc.component.tsx","app-react/components/main-nav/boxes/mobile/mobile-menu-header.box.ts","app-react/components/main-nav/boxes/mobile/back/mobile-back.box.ts","app-react/components/main-nav/boxes/mobile/back/mobile-back-label.box.ts","app-react/components/user-menu/user-menu/boxes/root/user-menu-root.box.ts","app-react/components/user-menu/user-menu/boxes/wrapper/user-menu-wrapper.default.box.ts","app-react/components/user-menu/user-menu/boxes/wrapper/user-menu-wrapper.box.ts","app-react/components/user-menu/user-menu/boxes/holder/user-menu-holder.default.box.ts","app-react/components/user-menu/user-menu/boxes/holder/user-menu-holder.box.ts","app-react/components/user-menu/user-menu.component.tsx","app-react/components/drawer/boxes/body/drawer-body.box.tsx","app-react/components/drawer/boxes/body/drawer-body.default.box.tsx","app-react/components/drawer/boxes/content/drawer-content.box.ts","app-react/components/spinner/boxes/spinner/spinner.box.ts","app-react/components/spinner/boxes/spinner/spinner.default.box.ts","app-react/components/spinner/boxes/spinner-brand/spinner-brand.box.ts","app-react/components/spinner/boxes/spinner-brand/spinner-brand.default.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.default.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.casino777.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.cip.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.cis.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.mrgreen.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.box.ts","app-react/components/drawer/drawer-spinner.component.tsx","app-react/components/drawer/drawer.component.tsx","app-react/services/arenas/models/arenas/video-slides/video-slides-arena.model.tsx","app-react/services/arenas/arenas.service.tsx","app-react/services/language/language-switcher/language-switcher-item.ts","app-react/services/language/language-switcher/language-switcher-section.ts","app-react/services/language/language-switcher/selected-language-switcher-item.ts","app-react/services/language/language.service.ts","app-react/components/sticky-handler/sticky-handler.ts","app-react/services/sticky-handler-factory/sticky-handler-factory.service.ts","app-react/services/game-route-handler/game-route-handler.service.ts","app-react/app-bootstrap/launcher-overrides-reader/launcher-overrides-reader.ts","app-react/services/launcher/launcher.service.ts","app-react/services/spinner/spinner.service.ts","app-react/services/cross-brands/cross-brands.service.ts","app-react/components/mini-orbit/routing/mini-orbit-routing-definition.tsx","app-react/services/routing-configuration/routing-configuration.service.tsx","app-react/services/routing/route/orbit-route.ts","app-react/services/routing/routing.service.ts","app-react/services/overlay/overlay.service.ts","app-react/services/time/time.service.ts","app-react/services/ai-new-games-engine/ai-new-games.service.ts","app-react/services/theme/theme.service.tsx","app-react/services/mini-orbit/adapters/void/void-communication-adapter.ts","app-react/services/mini-orbit/mini-orbit.service.tsx","app-react/components/modal-dialog/boxes/consumer-content/dialog-consumer-content.box.ts","app-react/components/modal-dialog/boxes/overlay/dialog-overlay.default.box.ts","app-react/components/modal-dialog/boxes/overlay/dialog-overlay.mrgreen.box.ts","app-react/components/modal-dialog/boxes/overlay/dialog-overlay.box.ts","app-react/components/modal-dialog/boxes/overlay-content/dialog-overlay-constants.ts","app-react/components/modal-dialog/boxes/overlay-content/dialog-overlay-content.default.box.ts","app-react/components/modal-dialog/boxes/overlay-content/dialog-overlay-content.box.ts","app-react/components/modal-dialog/boxes/icon-wrapper/dialog-icon-wrapper.box.ts","app-react/components/modal-dialog/boxes/icon-wrapper/dialog-icon-wrapper.default.box.ts","app-react/components/modal-dialog/modal-dialog.component.tsx","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog-single-line-content.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog-buttons-container.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog-button.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/simple-message-dialog-button.component.tsx","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog-icon-container.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog-multi-line-content.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/simple-message-dialog.component.tsx","app-react/services/dialog/dialog.service.tsx","app-react/services/manifest/pwa-manifest.service.ts","app-react/services/manifest/pwa-manifest-constants.ts","app-react/services/mini-orbit/adapters/poker/poker-communication-adapter.ts","app-react/services/mini-orbit/adapters/sport/sport-communication-adapter.ts","app-react/services/mini-orbit/adapter-factory/mini-orbit-communication-adapter-factory.service.ts","app-react/services/live-table-feeds-service/live-table-feeds.service.interface.ts","utils/memoize.ts","app-react/services/live-table-feeds-service/live-table-feeds.service.ts","app-react/services/homepage/homepage.service.tsx","utils/ab-testing-feature-check.ts","app-react/services/ab-testing/ab-testing-feature-data-provider.service.ts","app-react/services/control-center/control-center.service.ts","app-react/services/wallet-proxy/wallet-proxy.service.ts","app-react/components/time-spent-reminder/with-dropdown/time-spent-reminder-with-dropdown.component.tsx","app-react/components/session-cooldown-popup/boxes/session-cooldown.popup.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup.default.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-text.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-text.default.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-timer.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-timer.default.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-timer-remaining.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-timer-remaining.default.box.ts","app-react/components/session-cooldown-popup/session-cooldown-popup.component.tsx","app-react/services/session-cooldown/session-cooldown.service.tsx","app-react/services/media-query/media-query-listener.ts","app-react/services/media-query/media-query.service.ts","app-react/services/tools/tools.service.ts","app-react/services/user-game-orientation/user-game-orientation.service.ts","app-react/services/api/api-controller-base.ts","app-react/services/api/api.service.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown.box.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown-option-selector.box.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown-main-text.default.box.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown-main-text.casino777.box.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown-main-text.box.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown-selector-container.box.ts","app-react/components/geo/geo-permission-popup/geo-permission-popup.component.tsx","app-react/components/time-spent-reminder/with-balance/boxes/tsr-with-balance.box.ts","app-react/components/time-spent-reminder/with-balance/time-spent-reminder-with-balance.component.tsx","app-react/components/idle-recommendation/boxes/idle-recommendation-toaster.box.ts","app-react/components/idle-recommendation/boxes/idle-recommendation-header.box.ts","app-react/components/idle-recommendation/boxes/idle-recommendation-header-title-wrapper.box.ts","app-react/components/idle-recommendation/boxes/idle-recommendation-game-details.box.ts","app-react/components/idle-recommendation/boxes/idle-recommendation-toaster-background.box.ts","app-react/components/toaster/toasts-content/boxes/standard-toast-title/standard-toast-title.box.ts","app-react/components/toaster/toasts-content/boxes/standard-toast-message/standard-toast-message.box.ts","app-react/components/idle-recommendation/idle-recommendation.component.tsx","app-react/components/temp-account-popup/boxes/temp-account-popup.box.ts","app-react/components/temp-account-popup/boxes/temp-account-days-left-number.box.ts","app-react/components/temp-account-popup/boxes/temp-account-days-left-text.box.ts","app-react/components/temp-account-popup/temp-account-popup.component.tsx","app-react/components/biometric-dialog/init-biometric-dialog/boxes/init-biometric-footer-section.box.ts","app-react/components/biometric-dialog/init-biometric-dialog/boxes/init-biometric-dialog.box.ts","app-react/components/biometric-dialog/init-biometric-dialog/boxes/init-biometric-info-section.box.ts","app-react/components/biometric-dialog/init-biometric-dialog/boxes/help-option.box.ts","app-react/components/biometric-dialog/init-biometric-dialog/init-biometric-dialog.component.tsx","app-react/components/login-toast/boxes/login-toast.box.ts","app-react/components/login-toast/boxes/login-toast-message/login-toast-responsible-gaming-link.box.ts","app-react/components/toaster/toasts-content/boxes/standard-toast-image/standard-toast-image.box.ts","app-react/components/login-toast/login-toast.component.tsx","app-react/services/orbit-component-to-sdk-adapter/orbit-component-to-sdk-adapter.service.tsx","app-react/services/casinofied/message-broker/message-broker.service.ts","app-react/services/casinofied/action-handler/action-handler-base.ts","app-react/services/casinofied/action-handler/handlers/open-banking.action-handler.ts","app-react/services/casinofied/action-handler/handlers/upload-documents-from-cashier.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-deposit.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-withdraw.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-link.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-chat.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-link-with-form-post.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-control-center-full.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-client-page.action-handler.ts","app-react/services/casinofied/action-handler/handlers/logout.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-help-center.action-handler.ts","app-react/services/casinofied/action-handler/handlers/login.action-handler.ts","app-react/services/casinofied/action-handler/handlers/registration.action-handler.ts","app-react/services/casinofied/action-handler/handlers/transaction-history.action-handler.ts","utils/case-insensitive-property-reader.ts","app-react/services/casinofied/action-handler/handlers/open-cashier.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-challenges.action-handler.ts","app-react/services/casinofied/action-handler/handlers/navigate-client-page.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-my-account.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-rich.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-control-center-mini.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-casino-game.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-forgot-your-password.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-casino-free-to-play.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-online-help.action-handler.ts","app-react/services/casinofied/action-handler/handlers/autologin.action-handler.ts","app-react/services/casinofied/action-handler/casinofied-action-handler.service.ts","app-react/services/floating-bubbles/floating-bubbles.service.ts","app-react/components/source-of-funds/boxes/source-of-funds.box.ts","app-react/components/source-of-funds/source-of-funds-popup.component.tsx","app-react/services/restriction-ruler/restriction-ruler.service.tsx","app-react/services/restriction-ruler/restriction-ruler.service.interface.ts","app-react/services/casinofied/analytics-publisher/casinofied-analytics.service.ts","app-react/services/ab-testing-ai-sort/ab-testing-ai-sort-games-lists.service.ts","common/utils/cashier-util.ts","app-react/services/external-links/handlers/cashier/cashier.external-link-handler.ts","app-react/services/cashier/cashier.service.ts","app-react/services/external-links/handlers/external-link-handler-base.ts","app-react/components/external-links/boxes/external-link-iframe-container.box.ts","app-react/components/external-links/boxes/external-link-close-button-wrapper.box.ts","app-react/components/external-links/boxes/external-link-iframe.box.ts","app-react/components/external-links/external-link-iframe.component.tsx","app-react/components/external-links/external-link-iframe-in-modal-dialog.component.tsx","app-react/services/external-links/renderers/external-link-iframe.renderer.tsx","app-react/services/external-links/handlers/external-link-in-iframe-handler-base.ts","app-react/services/external-links/handlers/registration/registration.external-link-handler.ts","app-react/services/external-links/handlers/my-account/my-account.external-link-handler.tsx","common/enums/platform-event-type.enum.ts","app-react/services/external-links/handlers/omg/omg.external-link-handler.ts","app-react/services/external-links/handlers/forgot-credentials/forgot-credentials-external-link-handler-base.ts","app-react/services/external-links/handlers/forgot-credentials/forgot-user-name/forgot-user-name.external-link-handler.ts","app-react/services/external-links/handlers/forgot-credentials/forgot-password/forgot-password.external-link-handler.ts","app-react/services/external-links/handlers/pending-login/pending-login.external-link-handler.ts","app-react/services/external-links/handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers/game-limits/game-limits.external-link-handler.ts","app-react/services/external-links/handlers/contact-us/contact-us.external-link-handler.ts","app-react/services/external-links/handlers/rich/rich.external-link-handler.ts","app-react/services/external-links/handlers/help/help.external-link-handler.ts","app-react/services/external-links/handlers/pending-action/pending-action.external-link-handler.ts","app-react/services/external-links/handlers/pending-action/deposit/deposit-pending-action.external-link-handler.ts","app-react/services/links-navigation/regulation-hooks/regulation-link-navigation-hook.interface.ts","app-react/services/external-links/handlers/pending-action/transaction-history/transaction-history-pending-action.external-link-handler.ts","app-react/services/external-links/handlers/pending-action/real-game-play/real-game-play-pending-action.external-link-handler.ts","app-react/services/external-links/handlers-factory/external-links-handlers-factory.ts","app-react/components/header/welcome-buttons/header-welcome-buttons-analytics-sender.ts","app-react/components/header/buttons/login-button/header-login-button.component.tsx","app-react/components/header/buttons/register-button/header-register-button.component.tsx","app-react/components/about-component/boxes/about.box.ts","app-react/components/about-component/boxes/about-info-section.box.ts","app-react/components/about-component/boxes/about-footer-section.box.ts","app-react/components/about-component/about.component.tsx","app-react/components/clock-and-last-login-box/last-login/boxes/last-login-label.box.ts","app-react/components/clock-and-last-login-box/last-login/boxes/last-login-value.box.ts","app-react/components/clock-and-last-login-box/last-login/last-login.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/bet-interval/live-casino-grid-item-bet-interval.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/bet-interval/live-casino-grid-item-bet-interval-min-wrapper.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/live-casino-min-max-bet.component.tsx","app-react/services/regulation/regulation-components-common.tsx","app-react/services/menu-items-common/regulations-specific/regulation-menu-item-factory-base.ts","app-react/services/links-navigation/regulation-hooks/regulation-navigation-hook-base.ts","app-react/services/specific-dialogs/specific-dialogs.service.interface.ts","app-react/services/regulation/legacy-regulation-wrapper.ts","app-react/services/regulation/germany/components/germany.regulation-components.tsx","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog.box.ts","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog-header.box.ts","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog-footer.box.ts","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog-field-label.box.ts","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog-field-value.box.ts","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog-buttons.box.ts","app-react/components/reality-check/germany/germany.reality-check-dialog.component.tsx","app-react/services/regulation/germany/germany.regulation.tsx","app-react/services/external-links/handlers/registration/regulations/michigan/michigan.registration.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/michigan/michigan.external-links-handlers-factory.ts","app-react/components/clock-and-last-login-box/session-timer/boxes/session-timer-label.box.ts","app-react/components/clock-and-last-login-box/session-timer/boxes/session-timer-value.box.ts","app-react/components/clock-and-last-login-box/session-timer/boxes/session-timer.box.ts","app-react/components/clock-and-last-login-box/session-timer/session-timer.component.tsx","app-react/components/clock-and-last-login-box/last-login-and-session-timer/boxes/last-login-and-session-timer.box.ts","app-react/components/clock-and-last-login-box/last-login-and-session-timer/boxes/last-login-container.box.ts","app-react/components/clock-and-last-login-box/last-login-and-session-timer/last-login-and-session-timer.component.tsx","app-react/components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component.tsx","app-react/services/regulation/regulation-const.ts","app-react/services/regulation/michigan/components/michigan.regulation-components.tsx","app-react/services/menu-item-regulation-specific/michigan/side-menu/components/michigan.sport-side-menu-item.component.tsx","app-react/services/menu-item-regulation-specific/michigan/side-menu/michigan.sport-side-menu-item.renderer.tsx","app-react/services/menu-item-regulation-specific/michigan/michigan.menu-item-factory.ts","app-react/services/regulation/michigan/michigan.regulation.ts","app-react/services/regulation/ontario/components/ontario.regulation-components.tsx","app-react/services/external-links/handlers/registration/regulations/ontario/ontario.registration.external-link-handler.ts","app-react/services/external-links/handlers/my-account-upload-documents/regulations/ontario/ontario.my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/ontario/ontario.external-links-handlers-factory.ts","app-react/services/regulation/ontario/ontario.regulation.ts","app-react/services/external-links/handlers/registration/regulations/netherlands/netherlands.registration.external-link-handler.ts","app-react/services/external-links/handlers/my-account-upload-documents/regulations/netherlands/netherlands.my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers/pending-action/real-game-play/netherlands/netherlands.real-game-play-pending-action.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/netherlands/netherlands.external-links-handlers-factory.ts","app-react/services/regulation/netherland/components/netherlands.regulation-components.tsx","app-react/services/regulation/netherland/netherlands.regulation.ts","app-react/services/external-links/handlers/registration/regulations/new-jersey/new-jersey.registration.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/new-jersey/new-jersey.external-links-handlers-factory.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/boxes/us.safe-to-play.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/boxes/us.safe-to-play-container.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/boxes/us.safe-to-play-label.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/safe-to-play/us.safe-to-play.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/boxes/us.responsible-gaming-buttons.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/boxes/us.responsible-gaming.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/responsible-gaming/us.responsible-gaming.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/us.responsible-gaming-buttons.component.tsx","app-react/services/regulation/new-jersey/components/new-jersey.regulation-components.tsx","app-react/services/regulation/new-jersey/new-jersey.regulation.ts","app-react/services/external-links/handlers/registration/regulations/uk/uk.registration.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/uk/uk.external-links-handlers-factory.ts","app-react/services/regulation/uk/components/uk.regulation-components.ts","app-react/services/regulation/uk/uk.regulation.ts","app-react/services/external-links/handlers/my-account-upload-documents/regulations/italy/italy.my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/italy/italy.external-links-handlers-factory.ts","app-react/services/regulation/italy/components/italy.regulation-components.ts","app-react/services/menu-item-regulation-specific/italy/side-menu/italy.test-menu-item.renderer.tsx","app-react/services/menu-item-regulation-specific/italy/italy.menu-item-factory.ts","app-react/components/inactivity-timeout-settings/boxes/inactivity-timeout-settings.box.ts","app-react/components/inactivity-timeout-settings/boxes/drop-down.box.ts","app-react/components/inactivity-timeout-settings/inactivity-timeout-settings.component.tsx","app-react/services/regulation/italy/italy.regulation.tsx","app-react/services/external-links/handlers/my-account-upload-documents/regulations/romania/romania.my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/romania/romania.external-links-handlers-factory.ts","app-react/services/regulation/romania/romania.regulation.ts","app-react/services/regulation/portugal/components/portugal.regulation-components.ts","app-react/services/regulation/portugal/portugal.regulation.ts","app-react/services/regulation/sweden/components/sweden.regulation-components.tsx","app-react/services/regulation/sweden/sweden.regulation.ts","app-react/services/external-links/handlers/my-account-upload-documents/regulations/denmark/denmark.my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/denmark/denmark.external-links-handlers-factory.ts","app-react/services/regulation/denmark/components/denmark.regulation-components.tsx","app-react/services/regulation/denmark/denmark.regulation.ts","app-react/services/regulation/spain/spain.regulation.ts","app-react/services/limits-toaster/limits-toaster.service.ts","app-react/services/regulation/regulation.service.ts","app-react/services/burnout/player-burnout.service.ts","app-react/services/player-offerings/player-offerings/offers/offer-base.ts","app-react/services/player-offerings/player-offerings/offers/welcome-offer.tsx","app-react/components/wheel-of-fortune/boxes/wheel-of-fortune-shell.box.ts","app-react/components/wheel-of-fortune/boxes/wheel-of-fortune-colors.box.ts","app-react/components/wheel-of-fortune/boxes/wheel-of-fortune-wrapper.box.ts","app-react/components/wheel-of-fortune/wheel-of-fortune.component.tsx","app-react/services/player-offerings/player-offerings/offers/wheel-of-fortune-offer.tsx","app-react/components/link-to-offer/boxes/link-to-offer-banner/link-to-offer-banner.default.box.ts","app-react/components/link-to-offer/boxes/link-to-offer-banner/link-to-offer-banner.box.ts","app-react/services/player-offerings/player-offerings/offers/registration-offer.tsx","app-react/services/player-offerings/player-offerings.service.tsx","app-react/services/pixi-app/pixi-app-creator.ts","app-react/services/pixi-app/pixi-app.service.ts","app-react/services/free-play/free-play.service.interface.ts","app-react/services/free-play/providers/3rdparty/third-party-vouchers.provider.ts","app-react/services/game-animated-icons-manager/game-animated-icons-manager.service.ts","app-react/services/webgl-context-manager/webgl-context-manager.service.ts","app-react/services/tooltip/tooltip-base.service.ts","app-react/services/tooltip/tooltip-base/tooltip-modifiers.ts","app-react/services/tooltip/tooltip-base/tooltip-base.model.ts","app-react/services/tooltip/regular-tooltip/regular-tooltip.model.ts","app-react/services/tooltip/regular-tooltip/regular-tooltips.service.ts","app-react/services/gaming-history/models/paginator/history-paginator-base.model.ts","app-react/services/gaming-history/models/record/history-record-base.model.ts","app-react/services/gaming-history/models/record/user-gaming-history-record.model.ts","app-react/services/gaming-history/models/record/migrated-gaming-history-record.model.ts","app-react/services/gaming-history/models/paginator/migrated-gaming-history-paginator.model.ts","app-react/services/gaming-history/models/paginator/void-gaming-history-paginator.model.ts","app-react/services/gaming-history/models/paginator/user-gaming-history-paginator.model.ts","app-react/services/gaming-history/models/record/session-gaming-history-record.model.ts","app-react/services/gaming-history/models/paginator/session-gaming-history-paginator.model.ts","app-react/services/gaming-history/gaming-history.service.ts","app-react/services/because-you-played/because-you-played.service.ts","utils/version-number.ts","app-react/services/hybrid/hybrid.service.ts","app-react/services/video-live-stream/video-players/static-video-player/static-video-player.ts","app-react/services/video-live-stream/static-video-playing.service.ts","app-react/services/storage/session-storage.service.ts","app-react/services/storage/cookies.service.ts","app-react/services/free-play/free-play-game/free-play-game.model.ts","app-react/services/free-play/vouchers/voucher-base.model.ts","app-react/services/free-play/vouchers/free-play/free-play-voucher.model.ts","app-react/services/free-play/vouchers/jackpot-free-play/jackpot-free-play-voucher.model.ts","app-react/services/free-play/vouchers/free-spins/free-spins-voucher.model.ts","app-react/services/free-play/vouchers/jackpot-free-spins/jackpot-free-spins-voucher.model.ts","app-react/services/free-play/providers/vouchers-provider-base.ts","app-react/services/free-play/providers/888/888-free-play-vouchers.provider.ts","common/interfaces/crm-sdk-lib.interface.ts","app-react/services/free-play/free-play.service.ts","app-react/services/restrictions/restrictions.service.ts","app-react/services/free-to-play/free-to-play.service.ts","app-react/services/scrip-loader/script-loader.service.ts","app-react/services/session-timer/session-timer.service.ts","app-react/services/crm/crm.service.ts","sdk/src/services/player_messages_service/firebase/handlers/gambling-session_handler_interfaces.ts","app-react/components/lugas/boxes/line-box.ts","app-react/components/lugas/lugas-active-popup.component.tsx","app-react/components/login-popup/boxes/login-popup.box.ts","app-react/components/login-popup/boxes/login-popup-dialog-text.box.ts","app-react/components/login-popup/login-popup.component.tsx","app-react/basic-ui-components/form/toggle-switch/boxes/checkbox/toggle-switch-checkbox.box.ts","app-react/basic-ui-components/form/toggle-switch/boxes/slider/toggle-switch-slider.box.ts","app-react/basic-ui-components/form/toggle-switch/boxes/toggle-switch.box.ts","app-react/basic-ui-components/form/toggle-switch/toggle-switch.component.tsx","app-react/components/biometric-dialog/modify-biometric-dialog/boxes/modify-biometric-dialog.box.ts","app-react/components/biometric-dialog/modify-biometric-dialog/boxes/modify-biometric-info-section/modify-biometric-info-section.box.ts","app-react/components/biometric-dialog/modify-biometric-dialog/boxes/modify-biometric-toggle-section/modify-biometric-toggle-section.box.ts","app-react/components/biometric-dialog/modify-biometric-dialog/modify-biometric-dialog.component.tsx","app-react/services/specific-dialogs/specific-dialogs.service.tsx","app-react/services/tipping-history/models/tipping-history-view-model.ts","app-react/services/tipping-history/tipping-history.service.ts","app-react/services/loyalty-indicator/models/loyalty-indicator.model.ts","app-react/services/loyalty-indicator/loyalty-indicator.service.ts","app-react/components/state-popup/boxes/state-popup-wrapper.box.ts","app-react/components/state-popup/state-popup.component.tsx","app-react/components/state-popup/boxes/state-popup-error-message.box.ts","app-react/components/state-popup/boxes/state-popup-select-wrapper.box.ts","app-react/components/state-popup/state-popup-with-dropdown.component.tsx","app-react/services/state-of-residence-identifier/state-popup-strategies-consts.ts","app-react/services/state-of-residence-identifier/state-popup-strategies.ts","app-react/services/state-of-residence-identifier/state-of-residence-identifier.service.tsx","app-react/services/onboarding-tour/steps/welcome.step.ts","app-react/services/onboarding-tour/geometry.helper.ts","app-react/services/onboarding-tour/steps/main-menu.step.ts","app-react/services/onboarding-tour/steps/user-menu.step.ts","app-react/services/features-toggle-management/FeatureId.ts","utils/rem-to-px.ts","app-react/services/onboarding-tour/onboarding-tour.service.ts","app-react/services/nyx/nyx.service.ts","app-react/services/tooltip/on-boarding-tooltip/on-boarding-tooltip.model.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/container.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/text-container.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/title.default.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/title.mrgreen.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/title.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/icon.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/separator/separator.default.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/separator/separator.777.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/separator/seperator.mrgreen.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/separator/separator.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/icon-container/icon-container.default.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/icon-container/icon-container.mrgreen.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/icon-container/icon-container.box.ts","app-react/components/tooltip/tooltips/icon-title-text/icon-title-text.tooltip.tsx","app-react/services/tooltip/on-boarding-tooltip/free-play/free-play.on-boarding-tooltip.model.tsx","app-react/components/tooltip/tooltips/ios-add-to-home/boxes/icon-container.box.ts","app-react/components/tooltip/tooltips/ios-add-to-home/boxes/ios-add-to-home-share-icon.box.ts","app-react/components/tooltip/tooltips/ios-add-to-home/boxes/message-body-container.box.ts","app-react/components/tooltip/tooltips/ios-add-to-home/ios-add-to-home.component.tsx","app-react/services/tooltip/on-boarding-tooltip/pwa/ios-pwa.on-boarding-tooltip.model.tsx","app-react/services/tooltip/on-boarding-tooltip/control-center/control-center.on-boarding-tooltip.model.tsx","app-react/services/tooltip/on-boarding-tooltip/video-slides-explorer/video-slides-explorer.on-boarding-tooltip.model.tsx","app-react/services/tooltip/on-boarding-tooltip/on-boarding-tooltips.service.ts","app-react/services/player-migration/player-migration.service.ts","app-react/services/toaster/toasts-queue.ts","app-react/services/toaster/firebase-toaster.service.interface.ts","app-react/components/toaster/toasts-content/boxes/standard-toast-image.box.ts","app-react/components/toaster/toasts-content/standard-toast.component.tsx","app-react/services/toaster/toast-helpers/toast-analytics.helper.ts","app-react/services/toaster/taoster-service-consts.ts","app-react/services/toaster/toast-handler.tsx","app-react/services/toaster/toaster.service.tsx","app-react/services/features-toggle-management/FeaturesMaxDisplayCountMap.ts","app-react/services/features-toggle-management/features-toggle-management.service.ts","app-react/services/links-navigation/link-configuration-parser.ts","app-react/services/links-navigation/links-navigation.service.ts","utils/json-helper.ts","app-react/services/toaster/firebase-toaster.service.tsx","app-react/services/video/models/video-type.enum.ts","app-react/services/video-slides/analytics/video-slides-analytics-data.interface.ts","app-react/services/titan-jackpot/titan-jackpot.service.ts","app-react/services/game-theme/game-theme-definition/game-theme-definition.ts","app-react/services/game-theme/games-theme.service.ts","app-react/services/game-vendor/game-vendor-definition.ts/game-vendor-definition.ts","app-react/services/game-vendor/games-vendor.service.ts","app-react/services/player-messages/player-messages.service.ts","app-react/services/video-slides/models/video-slides-filter-editor/video-slides-filter.model.ts","app-react/services/video-slides/models/video-slides-filter-editor/for-you-video-slides-filter.ts","app-react/services/video-slides/models/rules/slide-rule-base.model.ts","app-react/services/video-slides/analytics/video-slides-analytics-reporter.ts","app-react/components/spark-swiper/models/spark-swiper-slide-controller.interface.ts","app-react/services/video-slides/video-slides-renderers/video-slide-base.renderer.ts","app-react/components/video-slides/slides-types/live-stream/player/boxes/live-stream-slide-player-container.box.ts","app-react/components/video-player/boxes/video-player.box.ts","app-react/components/video-player/boxes/video-element-container.box.ts","app-react/components/video-player/play-button/video-play-button.component.tsx","app-react/components/video-player/error/boxes/video-error-title.box.tsx","app-react/components/video-player/error/boxes/video-error-container.box.tsx","app-react/components/video-player/error/video-error.component.tsx","app-react/components/video-player/watch-limit/boxes/video-watch-time-limit-reached.box.ts","app-react/components/video-player/watch-limit/video-watch-time-limit-reached.component.tsx","app-react/components/video-player/video-player.component.tsx","app-react/components/video-slides/parts/skeleton/video-slide-player-skeleton.box.ts","app-react/components/video-slides/slides-types/video-stream/parts/player/video-stream-slide-player.component.tsx","app-react/components/video-slides/layout/boxes/video-slide-layout.box.ts","app-react/components/progress-bar/thin/boxes/thin-progress-bar-container.box.tsx","app-react/components/progress-bar/thin/boxes/thin-progress-bar.box.tsx","app-react/components/progress-bar/thin/thin-progress-bar.component.tsx","app-react/components/video-slides/layout/boxes/video-slide-layout-progress-indicator.box.ts","app-react/components/video-slides/layout/boxes/video-slide-layout-children-container.box.ts","app-react/components/video-slides/layout/video-slide-layout.component.tsx","app-react/components/video-slides/layout/content/video-slide-content-layout.component.tsx","app-react/components/video-slides/layout/footer/boxes/video-slide-footer-layout.box.ts","app-react/components/video-slides/layout/footer/boxes/game-title/video-slide-footer-game-title-layout.box.ts","app-react/components/video-slides/parts/save-game-button/save-game-button-container.box.tsx","app-react/components/video-slides/parts/save-game-button/boxes/save-game-button-title.box.ts","app-react/components/video-slides/parts/save-game-button/save-game-button.component.tsx","app-react/components/video-slides/parts/sound-button/boxes/video-slides-sound-icon.box.tsx","app-react/components/video-slides/parts/sound-button/video-slides-sound-button.component.tsx","app-react/components/video-slides/layout/footer/boxes/left/video-slide-footer-left-container.box.ts","app-react/components/video-slides/layout/footer/boxes/right/video-slide-footer-right-container.box.ts","app-react/components/video-slides/layout/footer/video-slide-footer-layout.component.tsx","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/betting-range/video-slides-stream-betting-range.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/betting-range/video-slides-stream-betting-range-default.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/footer-container/video-slides-stream-footer.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/footer-container/video-slides-stream-footer-default.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/jackpot/video-slides-stream-jackpot-container.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/jackpot/video-slides-stream-jackpot-container-default.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/jackpot/video-slides-stream-jackpot-value.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/jackpot/video-slides-stream-jackpot-value-default.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/video-slides-stream-footer.component.tsx","app-react/components/video-slides/slides-types/video-stream/video-stream-slide.component.tsx","app-react/services/video-slides/video-slides-renderers/video-stream-game-slide.renderer.tsx","app-react/services/video-slides/models/rules/video-stream-slide-rule.model.ts","app-react/components/video-slides/slides-types/live-stream/player/boxes/status-badge/live-stream-slide-status-badge.box.ts","app-react/components/video-slides/slides-types/live-stream/player/boxes/status-details/live-stream-slide-status-details.box.ts","app-react/components/video-slides/slides-types/live-stream/player/boxes/status-icon/live-stream-slide-status-icon.box.ts","app-react/components/video-slides/slides-types/live-stream/player/live-stream-slide-player.component.tsx","app-react/components/video-slides/slides-types/live-stream/live-stream-slide.component.tsx","app-react/services/video-slides/video-slides-renderers/live-stream-game-slide.renderer.tsx","app-react/services/video-slides/models/rules/live-stream-video-slide-rule.model.ts","app-react/components/video-slides/slides-types/promotion/boxes/promotion-slide.box.ts","app-react/components/video-slides/slides-types/promotion/promotion-slide.component.tsx","app-react/services/video-slides/video-slides-renderers/promotion-slide.renderer.tsx","app-react/services/video-slides/models/rules/banner-slide-rule.model.ts","app-react/services/video-slides/models/rules/slides-rules-handler.ts","app-react/services/video-slides/models/swiper/video-slides-swiper-slide.controller.ts","app-react/components/spark-swiper/models/spark-swiper-slide-controller.tsx","app-react/components/spark-swiper/models/spark-swiper-controller.ts","app-react/services/gambling-session/gambling-session.service.interface.ts","app-react/services/video-slides/models/swiper/video-slides-swiper.ts","app-react/services/video-slides/video-slides.service.tsx","app-react/services/gambling-session/gambling-session-analytics.ts","app-react/services/gambling-session/gambling-session.service.tsx","utils/lazy-async.ts","app-react/services-groups/services-group-loader.ts","app-react/components/notifications/snackbar-notification.component.box.tsx","app-react/components/notifications/snackbar-notification.component.tsx","app-react/services/notifications/notifications.service.tsx","app-react/services/video-live-stream/video-players/live-stream-players/hls/video-on-demand-player-hls.ts","app-react/services/video-live-stream/video-players/live-stream-players/native/video-on-demand-player-native.ts","app-react/services/video-live-stream/video-on-demand-playing.service.ts","app-react/services/cross-brands/cross-brands-item-config-reader.ts","app-react/components/header/top-header-left/cross-brand/boxes/app-header-cross-brand-item/app-header-cross-brand-item.box.ts","app-react/components/header/top-header-left/cross-brand/boxes/app-header-cross-brand-text/app-header-cross-brand-text.box.ts","app-react/components/header/top-header-left/cross-brand/cross-brands-items/generic-cross-brands-menu-item.component.tsx","app-react/services/header/menu-items/generic-cross-brands-menu-item.renderer.tsx","app-react/services/header/header.service.ts","app-react/services/menu-item-action-factory/link-navigation.action.ts","app-react/services/menu-item-action-factory/menu-item-action-factory.service.ts","app-react/services/video/models/video-element-container.ts","app-react/services/video/models/video-watch-time-handler.ts","app-react/services/video/models/analytics/video-analytics-reporter.interface.ts","app-react/services/video/models/video-events-controller.ts","app-react/services/video/models/analytics/video-console-analytics-reporter.ts","app-react/services/video/models/video-player-base.model.ts","app-react/services/video/models/video-streaming/strategies/native-video-streaming.strategy.ts","app-react/services/video/models/video-streaming/strategies/hls-video-streaming.strategy.ts","app-react/services/video/models/video-streaming/video-streaming-player.model.ts","app-react/services/video/video.service.ts","app-react/services/idle-recommendations/idle-recommendations.service.tsx","app-react/services/service-factory.ts","app-react/components/user-menu/logo-box/boxes/logo-container/logo-container.box.ts","app-react/components/user-menu/logo-box/boxes/logo-image/default-logo-icon/logo-image.box.ts","app-react/components/user-menu/logo-box/logo-box.component.tsx","app-react/components/profile-box/profile-picture/boxes/profile-picture.box.ts","app-react/components/profile-box/profile-picture/boxes/profile-user-name.box.ts","app-react/components/profile-box/profile-picture/boxes/profile-picture-image.box.ts","app-react/components/profile-box/profile-picture/profile-picture.component.tsx","app-react/components/profile-box/boxes/profile-messages-divider.box.ts","app-react/components/profile-box/boxes/profile-buttons.box.ts","app-react/components/profile-box/boxes/profile-cashier-button/profile-cashier-button.box.ts","app-react/components/profile-box/boxes/profile-cashier-button/profile-cashier-add-button/profile-cashier-add-button.box.ts","app-react/components/profile-box/boxes/profile-wrapper.box.ts","app-react/components/profile-box/profile-box.component.tsx","app-react/components/side-menu/store-button/store-button.component.tsx","app-react/components/side-menu/boxes/menu-links-groups-container.box.ts","app-react/components/side-menu/boxes/side-menu-container.box.ts","app-react/components/side-menu/boxes/mobile-menu-item-container.box.ts","app-react/components/side-menu/boxes/mobile-menu-item-link.box.ts","app-react/components/side-menu/mobile-help-menu-item/mobile-help-center-menu-item.component.tsx","app-react/components/side-menu/mobile-lang-switcher-menu-item/boxes/mobile-lang-switcher-menu-item-selected-lang.box.ts","app-react/components/side-menu/mobile-lang-switcher-menu-item/boxes/mobile-lang-switcher-container.box.ts","app-react/components/side-menu/boxes/mobile-language-menu-item.box.ts","app-react/components/side-menu/mobile-lang-switcher-menu-item/mobile-lang-switcher-menu-item.component.tsx","app-react/components/side-menu/horizontal-ruler/side-menu-horizontal-line.box.ts","app-react/components/side-menu/boxes/mobile-menu-items-container.box.ts","app-react/components/header/top-header-right/state-selector-button/state-selector-button.component.tsx","app-react/components/side-menu/mobile-state-selector-menu-item/mobile-state-selector-menu-item.component.tsx","app-react/components/main-nav/boxes/related-sites/boxes/related-sites-wrapper.box.ts","app-react/components/main-nav/boxes/related-sites/boxes/related-site-link.box.ts","app-react/components/main-nav/boxes/related-sites/related-site.component.tsx","app-react/components/main-nav/boxes/related-sites/related-sites.component.tsx","app-react/components/side-menu-rework/side-menu-above-search-group/boxes/cross-brands-items-above-search.box.ts","app-react/components/side-menu-rework/side-menu-above-search-group/cross-brands-items-above-search.component.tsx","app-react/components/side-menu/side-menu.component.tsx","app-react/components/language-switcher-dropdown/boxes/language-switcher-dropdown.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/language-switcher-section-list.default.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/language-switcher-section-list.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-title/language-switcher-section-title.default.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-title/language-switcher-section-title.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/section-list-item/language-switcher-section-list-item.default.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/section-list-item/language-switcher-section-list-item.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/section-list-item/section-list-item-label/language-switcher-item-label.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/section-list-item/section-list-item-checkbox/language-switcher-item-checkbox.default.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/section-list-item/section-list-item-checkbox/language-switcher-item-checkbox.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/language-switcher-section.component.tsx","app-react/components/language-switcher-dropdown/language-switcher-dropdown.component.tsx","app-react/components/main-nav/boxes/main-nav-canvas/main-nav-canvas.box.ts","app-react/components/main-nav/boxes/main-nav.box.ts","app-react/components/main-nav/boxes/main-nav-content-wrapper.box.ts","app-react/components/main-nav/boxes/main-nav-menu.box.ts","app-react/components/main-nav/main-nav.component.tsx","app-react/components/header/top-header-right/help-button/help-button.component.tsx","app-react/components/header/top-header-left/cross-brand/boxes/app-header-cross-brand-list/app-header-cross-brand-list.box.ts","app-react/components/header/top-header-left/cross-brand/app-header-cross-brands.component.tsx","app-react/components/header/top-header-left/mobile-burger-menu/boxes/container/burger-menu-container.box.ts","app-react/components/header/top-header-left/mobile-burger-menu/mobile-burger-menu.component.tsx","app-react/components/header/boxes/language-switcher/header-language-switcher.box.ts","app-react/components/header/top-header-right/language-switcher/header-language-switcher.component.tsx","app-react/components/header/top-header-right/deposit/boxes/deposit-header-button.box.ts","app-react/components/header/top-header-right/deposit/deposit-header-button.component.tsx","app-react/components/header/boxes/navbar-separator/navbar-separator.box.ts","app-react/components/header/boxes/header-navbar-container/header-navbar-container.box.ts","app-react/components/header/boxes/navbar-left-container/header-navbar-left-container.box.ts","app-react/components/header/boxes/navbar-left-container/header-navbar-left-container.default.box.ts","app-react/components/header/boxes/navbar-right-container/header-navbar-right-container.box.ts","app-react/components/header/boxes/navbar-right-container/header-navbar-right-container.default.box.ts","app-react/components/header/header.component.tsx","app-react/components/overlay/boxes/overlay.component.box.tsx","app-react/components/overlay/overlay.component.tsx","app-react/components/spinner/boxes/spinner-logo/spinner-logo.default.box.ts","app-react/components/spinner/boxes/spinner-logo/spinner-logo.casino777.box.ts","app-react/components/spinner/boxes/spinner-logo/spinner-logo.cip.box.ts","app-react/components/spinner/boxes/spinner-logo/spinner-logo.wsop.box.ts","app-react/components/spinner/boxes/spinner-logo/spinner-logo.cis.box.ts","app-react/components/spinner/boxes/spinner-logo/spinner-logo.box.ts","app-react/components/spinner/boxes/spinner-subtext/spinner-subtext.box.ts","app-react/components/spinner/boxes/spinner-subtext/spinner-subtext.default.box.ts","app-react/components/spinner/spinner.component.tsx","app-react/components/breadcrumbs/boxes/breadcrumbs.box.ts","app-react/components/breadcrumbs/breadcrumbs.component.tsx","app-react/components/app-footer/app-footer.component.tsx","app-react/components/router-outlet/boxes/router-outlet.default.box.ts","app-react/components/router-outlet/boxes/router-outlet.casino777.box.ts","app-react/components/router-outlet/boxes/router-outlet.casino888.box.ts","app-react/components/router-outlet/boxes/router-outlet.harrahs.box.ts","app-react/components/router-outlet/boxes/router-outlet.si.box.ts","app-react/components/router-outlet/boxes/router-outlet.box.ts","app-react/components/router-outlet/router-outlet.component.tsx","app-react/components/floating-bubbles/boxes/floating-bubbles-container.box.ts","app-react/components/floating-bubbles/boxes/floating-bubble.box.ts","app-react/components/floating-bubbles/floating-bubbles.component.tsx","app-react/components/container/boxes/main-wrapper.box.ts","app-react/components/onboarding-tour/spotlight/boxes/mask-cutout.box.ts","app-react/components/onboarding-tour/spotlight/boxes/mask-fabric/mask-fabric.box.ts","app-react/services/onboarding-tour/onboarding-spotlight.helper.ts","app-react/components/onboarding-tour/spotlight/boxes/spotlight-svg.box.ts","app-react/components/onboarding-tour/spotlight/boxes/gradient-stop-svg/gradient-stop-svg.box.ts","app-react/components/onboarding-tour/spotlight/onboarding-spotlight.component.tsx","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-log/onboarding-dialog-logo.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-main-text.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-secondary-text.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-next/onboarding-dialog-next.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-step-indicator/onboarding-dialog-step-indicator.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-content.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-close.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog/onboarding-dialog.box.ts","app-react/components/onboarding-tour/dialog/onboarding-dialog.component.tsx","app-react/components/onboarding-tour/onboarding-tour.component.tsx","app-react/components/container/container.component.tsx","app-react/components/modal-dialog/modal-dialogs-container.component.tsx","app-react/components/sdk/orbit-components-rendered-inside-sdk-container.tsx","app-react/components/burnout/player-burnout-layer.component.tsx","app-react/components/tooltip/boxes/tooltip-arrow/tooltip-arrow.default.ts","app-react/components/tooltip/boxes/tooltip-arrow/tooltip-arrow.777.ts","app-react/components/tooltip/boxes/tooltip-arrow/tooltip-arrow.mrgreen.box.ts","app-react/components/tooltip/boxes/tooltip-arrow/tooltip-arrow.box.ts","app-react/components/tooltip/boxes/tooltip-close-button.box.ts","app-react/components/tooltip/boxes/tooltip-container/tooltip-container.default.ts","app-react/components/tooltip/boxes/tooltip-container/tooltip-container.box.ts","app-react/components/tooltip/boxes/tooltip-glow/tooltip-glow.default.ts","app-react/components/tooltip/boxes/tooltip-glow/tooltip-glow.777.ts","app-react/components/tooltip/boxes/tooltip-glow/tooltip-glow.mrgreen.box.ts","app-react/components/tooltip/boxes/tooltip-glow/tooltip-glow.box.ts","app-react/components/tooltip/boxes/tooltip-content.box.ts","app-react/components/tooltip/tooltip-container.component.tsx","app-react/components/game-window/loading-indicators/boxes/game-loading-indicator-root.box.ts","app-react/components/game-window/loading-indicators/game-loading-indicator.component.tsx","app-react/components/current-game-container/current-game-container.component.tsx","app-react/components/toaster/boxes/toaster-styles-wrapper.box.ts","app-react/components/toaster/boxes/toast-container/toast-container.box.ts","app-react/components/toaster/toaster.component.tsx","app-react/components/notifications/snackbar-notification-container.component.tsx","app-react/components/app/app.component.tsx","app-react/services/storage/in-memory-local-storage.service.ts","app-react/app-bootstrap/b2c-framework-loader/b2c-framework-loader.ts","app-react/themes/select-theme.ts","app-react/orbit-api.interface.ts","app-react/b2c-adapter.ts","app-react/orbit-api.ts","main.ts","sdk/src/events/events.ts","sdk/src/exceptions/cgp_error_codes.ts","sdk/src/services/games_information/games_information_service_interface.ts","sdk/src/services/oauth/oauth_const.ts","sdk/src/services/overlay_manager/overlay_manager_levels.ts","sdk/src/services/player_messages_service/firebase/handlers/messages_handler_interfaces.ts","sdk/src/services/regulation/regulation_const.ts","sdk/src/utils/date_formatter.ts","sdk/src/utils/event.ts","settings/configs/default-config.ts","settings/languages/eng.ts","utils/delay.ts","utils/disposable-object.ts","app-react/services/menu-item-action-factory/custom-actions|sync|/.+/.action/.(ts%7Ctsx)$","app-react/themes/definitions|lazy|/^/.*/theme/.definition$/|chunkName: theme-definition|groupOptions: {}|namespace object","settings/configs|lazy|/^/.*$/|groupOptions: {}|namespace object","settings/configs|lazy|/^/.*/config$/|groupOptions: {}|namespace object","settings/languages|lazy|/^/.*$/|chunkName: language|groupOptions: {}|namespace object"],"sourcesContent":["import styled from \"styled-components\";\nimport {flexFixedSizeItem} from \"../../themes/architecture/css-helpers/flex\";\nimport {MOBILE_HORIZONTAL_SPACE_BETWEEN_ITEMS, PC_HORIZONTAL_SPACE_BETWEEN_ITEMS} from \"../space-between-items-consts\";\n\nexport const BlankHorizontalSeparatorBox = styled.span<{multiplier?: number}>`\n ${flexFixedSizeItem}\n width: ${props => PC_HORIZONTAL_SPACE_BETWEEN_ITEMS(props.multiplier ?? 1)};\n @media ${props => props.theme.mediaQuery.lAndBelow} {\n width: ${props => MOBILE_HORIZONTAL_SPACE_BETWEEN_ITEMS(props.multiplier ?? 1)};\n }\n`;\n","import {GameIconWrapperDefaultBox} from './game-icon-wrapper.default.box';\n\nexport const GameIconWrapperBox = GameIconWrapperDefaultBox;","import styled from 'styled-components';\n\nexport const GameIconWrapperDefaultBox = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n\n @media ${({theme}) => theme.mediaQuery.xs} {\n padding-left: 15px;\n width: 80%;\n }\n`;","import {GameIconDefaultBox} from './game-icon.default.box';\n\nexport const GameIconBox = GameIconDefaultBox;","import styled from 'styled-components';\nimport { Image } from '../../components/raw-components/image/image';\n\n//game-info-icon\nexport const GameIconDefaultBox = styled(Image)`\n display: block;\n background-size: 100%;\n background-image: url(\"${props => props.theme.images.singleGame.defaultBackgroundImage.toString()}\");\n background-repeat: no-repeat;\n`;\n\n","import {styledBox} from \"../../themes/architecture/styled-box\";\n\nexport const LobbyGridBox = styledBox('LobbyGridBox');","import {styledBox} from \"../../themes/architecture/styled-box\";\n\nexport const LobbyWrapperBox = styledBox('LobbyWrapperBox');\n","import React from 'react';\nimport {OrbitComponent} from '../../components/base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {MAIN_SCREEN} from '../../themes/css-global-classes';\nimport {CyClass} from \"../../../common/cy-classes\";\n\nexport const MainScreenComponent = observer(class MainScreenComponent extends OrbitComponent {\n\n render() {\n //TODO - main-screen class should be removed once we convert all the components to styled-components\n\n return (\n
\n {this.props.children}\n
\n );\n }\n});\n\n","export function PC_HORIZONTAL_SPACE_BETWEEN_ITEMS(multiplier: number = 1) {\n return (15 * multiplier) + 'px';\n}\n\nexport function MOBILE_HORIZONTAL_SPACE_BETWEEN_ITEMS(multiplier: number = 1) {\n return (5 * multiplier) + 'px';\n}","import {Check} from \"@sparkware/app-utils\";\nimport {Color} from \"../../../../common/utils/color-util\";\nimport {IButtonColor, IButtonColorSet, IButtonColorSetDef} from \"./button-props.interface\";\n\nexport function hoverColor(hex: string, hoverAdjustAmount: number = 17) {\n try {\n const color = Color.fromHex(hex);\n // i chose 60 here because it's a value close to sqrt(35^2 + 35^2 + 35^2)\n if (color.distanceFrom(new Color(255, 255, 255)) < 60) {\n return color.darken(hoverAdjustAmount).hexa();\n }\n return color.lighten(hoverAdjustAmount).hexa();\n } catch (e) {\n console.log(e);\n console.log(\"HOVER COLOR WAS CALLED WITH: \", hex);\n return hex;\n }\n}\n\nexport function activeColor(hex: string, activeAdjustAmount: number = 17) {\n try {\n const color = Color.fromHex(hex);\n // i chose 60 here because it's a value close to sqrt(35^2 + 35^2 + 35^2)\n if (color.distanceFrom(new Color(255, 255, 255)) < 60) {\n return color.darken(activeAdjustAmount * 1.75).hexa();\n }\n return color.darken(activeAdjustAmount).hexa();\n } catch (e) {\n console.log(e);\n console.log(\"ACTIVE COLOR WAS CALLED WITH: \", hex);\n return hex;\n }\n}\n\nexport function hoverGradient(gradient: string, hoverAdjustAmount?: number) {\n const clrs = gradient.split(\"#\");\n if (clrs.length > 1) {\n for (let i = 1; i < clrs.length; i++) {\n const hexClr = clrs[i].substring(0, 6);\n // get the hover color and remove # because we will add when joining\n const hexHoverClr = hoverColor(hexClr, hoverAdjustAmount).substring(1);\n clrs[i] = hexHoverClr + clrs[i].substring(6);\n }\n return clrs.join(\"#\");\n }\n return gradient;\n}\n\nexport function activeGradient(gradient: string, activeAdjustAmount?: number) {\n const clrs = gradient.split(\"#\");\n if (clrs.length > 1) {\n for (let i = 1; i < clrs.length; i++) {\n const hexClr = clrs[i].substring(0, 6);\n // get the hover color and remove # because we will add when joining\n const hexActiveClr = activeColor(hexClr, activeAdjustAmount).substring(1);\n clrs[i] = hexActiveClr + clrs[i].substring(6);\n }\n return clrs.join(\"#\");\n }\n return gradient;\n}\n\nexport function computeColorSet(colorSet: IButtonColorSetDef, defaultDisabled: IButtonColor): IButtonColorSet {\n const hoverAdjustAmount = Check.isNumber(colorSet.hover) ? colorSet.hover : undefined;\n const activeAdjustAmount = Check.isNumber(colorSet.active) ? colorSet.active : undefined;\n if (Check.isNumber(colorSet.hover)) {\n // I need to clone the colorSet otherwise I will delete hover globally (colorSet is passed by reference)\n colorSet = {\n ...colorSet\n };\n delete colorSet.hover;\n }\n if (Check.isNumber(colorSet.active)) {\n // I need to clone the colorSet otherwise I will delete active globally (colorSet is passed by reference)\n colorSet = {\n ...colorSet\n };\n delete colorSet.active;\n }\n\n let hoverBgGradient = undefined;\n if (colorSet.normal.bgGradient) {\n hoverBgGradient = hoverGradient(colorSet.normal.bgGradient, hoverAdjustAmount);\n }\n const defaultHover: IButtonColor = {\n ...colorSet.normal,\n bg: hoverColor(colorSet.normal.bg, hoverAdjustAmount),\n border: hoverColor(colorSet.normal.border, hoverAdjustAmount),\n bgGradient: hoverBgGradient\n };\n \n let activeBgGradient = undefined;\n if (colorSet.normal.bgGradient) {\n activeBgGradient = activeGradient(colorSet.normal.bgGradient, activeAdjustAmount);\n }\n const defaultActive: IButtonColor = {\n ...colorSet.normal,\n bg: activeColor(colorSet.normal.bg, activeAdjustAmount),\n border: activeColor(colorSet.normal.border, activeAdjustAmount),\n bgGradient: activeBgGradient\n };\n /**\n * I get a weird Typescript bug probably because interfaces IButtonColorSet and IButtonColorSetDef.\n * It says that type number is not assignable to IButtonColor but defaultHover cannot be number and is not defined as number.\n * I cast it as any\n */\n const cset: IButtonColorSet = {\n disabled: defaultDisabled,\n hover: defaultHover as any,\n active: defaultActive,\n ...colorSet,\n }\n return cset\n}\n","import styled, { css } from \"styled-components\";\nimport { IButtonCommonProps, IButtonColorSet, IButtonPreset } from \"../button-props.interface\";\n\nenum ColorSetWanted {\n Default = 0,\n Hover = 1,\n Active = 2\n}\n\ninterface IButtonBoxProps extends IButtonCommonProps {\n colorSet: IButtonColorSet;\n\n width: number;\n height: number;\n strokeWidth: number;\n iconSize: number;\n lateralPadding: number;\n\n hasLabel: boolean;\n hasIcon: boolean;\n}\n\nexport const ButtonBox = styled.button`\n cursor: ${props => props.disabled ? \"default\" : \"pointer\"};\n user-select: none;\n\n border-radius: ${props => props.rounded ? \"100px\" : props.theme.layout.border.radius};\n ${props => props.margin ? css`\n margin: ${props.margin};\n ` : null};\n\n /* Override user-agent styles */\n background: none;\n outline: none;\n\n ${({theme}) => theme.font.presets.ultra};\n /**\n * This is not the actual text size.\n * The text size is set in the span wrapping the text, here i'm just creating a context for the em units to compute relative to this\n */\n font-size: ${props => props.noRemUnits ? \"10px\" : \"1rem\"};\n /**\n * If we have only an icon and no label, we want a square (or circle) button\n * that means the width = height =>\n * border x 2 + lateral-padding x 2 + icon_size = height =>\n * lateral_padding = (height - icon_size - 2 x border)/2 =>\n * lateral_padding = (height - icon_size)/2 - border\n *\n * If we have label (with or without icon), don't bother, put 1em or whatever value decided by design (hardcoded or from the theme)\n */\n padding: 0 ${props => {\n if (props.hasIcon && !props.hasLabel) {\n return \"calc(\"+((props.height - props.iconSize)/2)+\"em - \"+props.strokeWidth+\"px)\";\n } else {\n return props.lateralPadding + \"em\";\n }\n }};\n line-height: 0.8;\n letter-spacing: 0.05em;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n /** content-box because the border is in px. So when computing heights, paddings etc in em border is not taken in consideration */\n /* box-sizing: content-box;\n height: calc(${props => props.height }em - 2*${props => props.strokeWidth }px); */\n /** OOORRR */\n box-sizing: border-box;\n height: ${props => props.height}em;\n\n width: ${props => {\n if (props.fullWidth) {\n return \"100%\";\n }\n if (props.width && props.hasLabel && props.labelOverflow !== \"expand\") {\n return props.width+\"em\";\n }\n return \"auto\";\n }};\n ${props => props.hasLabel && props.labelOverflow === \"expand\" ? css`\n min-width: ${props.width+\"em\"};\n ` : null};\n transition: all 0.2s ease-in-out;\n\n border-width: ${props => props.strokeWidth}px;\n border-style: solid;\n\n color: ${props => colorSet(props).text};\n background-color: ${props => colorSet(props).bg};\n border-color: ${props => colorSet(props).border};\n box-shadow: ${props => (props.elevated && colorSet(props).shadow) ? colorSet(props).shadow : \"none\"};\n\n /** support for bgGradient because */\n ${props => colorSet(props).bgGradient ? css`\n background: ${colorSet(props).bgGradient};\n ` : null}\n\n /** support for textGradient because */\n ${props => colorSet(props).textGradient ? css`\n & span {\n background: ${colorSet(props).text};\n background: ${colorSet(props).textGradient};\n background-size: 100%;\n -webkit-background-clip: text;\n -moz-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n -moz-text-fill-color: transparent;\n }\n ` : null}\n\n /* Putting the &:hover rules inside the hover media queries prevents the button to remain in hover state after pressing it.\n We wouldn't need this is the pressed/active state would be different from the hover state */\n @media ${({theme}) => theme.mediaQuery.hover } {\n &:hover {\n /* First reset the background, if the hover doesn't have a gradient bg then we don't want to show the \"normal\" state */\n ${props => colorSet(props).bgGradient && !colorSet(props, ColorSetWanted.Hover).bgGradient ? css`\n background: none;\n ` : null}\n\n color: ${props => colorSet(props, ColorSetWanted.Hover).text};\n background-color: ${props => colorSet(props, ColorSetWanted.Hover).bg};\n border-color: ${props => colorSet(props, ColorSetWanted.Hover).border};\n ${props => colorSet(props, ColorSetWanted.Hover).bgGradient ? css`\n background: ${colorSet(props, ColorSetWanted.Hover).bgGradient};\n ` : null}\n box-shadow: ${props => (props.elevated && colorSet(props, ColorSetWanted.Hover).shadow) ? colorSet(props, ColorSetWanted.Hover).shadow : \"none\"};\n\n /* Reset the text gradient, if the hover doesn't have a text gradient */\n ${props => colorSet(props).textGradient && !colorSet(props, ColorSetWanted.Hover).textGradient ? css`\n & span {\n background: none;\n background-size: 100%;\n -webkit-background-clip: unset;\n -moz-background-clip: unset;\n background-clip: unset;\n -webkit-text-fill-color: unset;\n -moz-text-fill-color: unset;\n }\n ` : null}\n ${props => colorSet(props, ColorSetWanted.Hover).textGradient ? css`\n & span {\n background: ${colorSet(props, ColorSetWanted.Hover).text};\n background: ${colorSet(props, ColorSetWanted.Hover).textGradient};\n background-size: 100%;\n -webkit-background-clip: text;\n -moz-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n -moz-text-fill-color: transparent;\n }\n ` : null}\n }\n }\n\n &:active {\n /* First reset the background, if the hover doesn't have a gradient bg then we don't want to show the \"normal\" state */\n ${props => colorSet(props).bgGradient && !colorSet(props, ColorSetWanted.Active).bgGradient ? css`\n background: none;\n ` : null}\n\n color: ${props => colorSet(props, ColorSetWanted.Active).text};\n background-color: ${props => colorSet(props, ColorSetWanted.Active).bg};\n border-color: ${props => colorSet(props, ColorSetWanted.Active).border};\n ${props => colorSet(props, ColorSetWanted.Active).bgGradient ? css`\n background: ${colorSet(props, ColorSetWanted.Active).bgGradient};\n ` : null}\n box-shadow: ${props => (props.elevated && colorSet(props, ColorSetWanted.Active).shadow) ? colorSet(props, ColorSetWanted.Active).shadow : \"none\"};\n\n /* Reset the text gradient, if the hover doesn't have a text gradient */\n ${props => colorSet(props).textGradient && !colorSet(props, ColorSetWanted.Active).textGradient ? css`\n & span {\n background: none;\n background-size: 100%;\n -webkit-background-clip: unset;\n -moz-background-clip: unset;\n background-clip: unset;\n -webkit-text-fill-color: unset;\n -moz-text-fill-color: unset;\n }\n ` : null}\n ${props => colorSet(props, ColorSetWanted.Active).textGradient ? css`\n & span {\n background: ${colorSet(props, ColorSetWanted.Active).text};\n background: ${colorSet(props, ColorSetWanted.Active).textGradient};\n background-size: 100%;\n -webkit-background-clip: text;\n -moz-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n -moz-text-fill-color: transparent;\n }\n ` : null}\n }\n`;\n\nexport function colorSet(props: IButtonBoxProps, hoverSet?: ColorSetWanted) {\n let setKey: keyof IButtonPreset[\"colors\"] = \"normal\";\n if (hoverSet === ColorSetWanted.Active || props.active) {\n setKey = \"active\";\n }\n if (hoverSet === ColorSetWanted.Hover) {\n setKey = \"hover\";\n }\n if (props.disabled) {\n setKey = \"disabled\";\n }\n // const setKey: keyof IButtonPreset[\"colors\"] = props.disabled ? \"disabled\" : (hoverSet || props.active ? \"hover\" : \"normal\");\n if (props.colorSet[setKey]) {\n return props.colorSet[setKey];\n }\n return props.colorSet.normal;\n}\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const ButtonLabelBox = styledBox('ButtonLabelBox');","import styled, { css } from \"styled-components\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\n\ninterface IButtonIconWrapperProps {\n reverseOnRTL?: boolean;\n}\n\nexport const ButtonIconWrapperBox = styled.span`\n ${props => props.reverseOnRTL ? css`\n ${CssRule.For.RTL.build()} &{\n transform: scaleX(-1);\n }\n ` : null}\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const ButtonLabelPaddingBox = styledBox('ButtonLabelPaddingBox');","import styled, {css} from \"styled-components\";\n\ninterface IButtonSkeletonProps {\n fullWidth?: boolean;\n rounded?: boolean;\n margin?: React.CSSProperties[\"margin\"];\n width: number;\n height: number;\n strokeWidth: number;\n iconOnly: boolean;\n noRemUnits?: boolean;\n}\n\nexport const ButtonSkeletonBox = styled.div`\n /**\n * Here i'm just creating a context for the em units to compute relative to this\n */\n font-size: ${props => props.noRemUnits ? \"10px\" : \"1rem\"};\n\n border-radius: ${props => props.rounded ? \"100px\" : props.theme.layout.border.radius};\n ${props => props.margin ? css`\n margin: ${props.margin};\n ` : null};\n\n box-sizing: border-box;\n height: ${props => props.height}em;\n\n width: ${props => {\n if (props.fullWidth) {\n return \"100%\";\n }\n if (props.iconOnly) {\n return props.height+\"em\";\n }\n return props.width+\"em\";\n }};\n \n border-width: ${props => props.strokeWidth}px;\n border-style: solid;\n\n\n background: rgba(255, 255, 255, 0.25);\n animation: PulsatingAnimation 1s alternate infinite;\n @keyframes PulsatingAnimation {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.25;\n }\n }\n`;\n","import React, {PropsWithChildren} from \"react\";\nimport { withTheme } from \"styled-components\";\nimport { OrbitTheme } from \"../../../themes/architecture/orbit-theme.interface\";\nimport { SvgSizeUnit } from \"../../icon/svg-icon/svg.icon\";\nimport { IButtonCommonProps, ButtonPreset, ButtonStroke, ButtonSizeVariant, IButtonIconProps, IButtonColorSet } from \"./button-props.interface\";\nimport { ButtonBox } from \"./boxes/button.box\";\nimport { ButtonLabelBox } from \"./boxes/label/button-label.box\";\nimport { ButtonIconWrapperBox } from \"./boxes/button-icon-wrapper.box\";\nimport { FlexShrinkItemBox } from \"../../../themes/architecture/css-helpers/flex\";\nimport { ButtonLabelPaddingBox } from \"./boxes/label-padding-box/button-label-padding.box\";\nimport { computeColorSet } from \"./button-hover-colors-helpers\";\nimport {ButtonSkeletonBox} from \"../skeleton/button-skeleton.box\";\n\ninterface IButtonProps extends IButtonCommonProps {\n preset: ButtonPreset;\n stroke?: ButtonStroke;\n icon?: IButtonIconProps;\n sizeVariant?: ButtonSizeVariant;\n className?: string;\n tooltip?: string;\n\n /**\n * theme is addded by styled-component's withTheme\n */\n theme: OrbitTheme;\n\n /* button interactions */\n onClick?(): void;\n onMouseEnter?(): void;\n onMouseLeave?(): void;\n\n /** skeleton */\n skeleton?: boolean;\n}\n\nconst ButtonIcon: React.FC<{IconComponent: IButtonIconProps[\"Component\"], size: number, options?: {reverseOnRTL?: boolean}}> = (props) => {\n if(!props.IconComponent) {\n return null;\n }\n\n const IconComponent = props.IconComponent;\n return \n \n \n};\n\nconst $Button: React.FC> = (props) => {\n\n let {\n children, theme, preset, icon, stroke, sizeVariant, rounded, elevated, tooltip, labelOverflow,\n onClick, onMouseEnter, onMouseLeave,\n ...otherProps\n } = props;\n let hasIcon = !!icon;\n let hasLabel = !!children;\n\n onClick = props.disabled ? undefined : onClick;\n onMouseEnter = props.disabled ? undefined : onMouseEnter;\n onMouseLeave = props.disabled ? undefined : onMouseLeave;\n\n let presetValues = theme.baseUIComponents.button.presets[preset];\n let themePresetDefaults = theme.baseUIComponents.button.defaults;\n\n const colorSet: IButtonColorSet = computeColorSet(presetValues.colors, theme.baseUIComponents.button.disabledColorSet);\n\n stroke = stroke ?? presetValues.stroke ?? themePresetDefaults.stroke;\n rounded = rounded ?? presetValues.rounded ?? themePresetDefaults.rounded;\n elevated = elevated ?? presetValues.elevated ?? themePresetDefaults.elevated;\n sizeVariant = sizeVariant || \"s\";\n labelOverflow = labelOverflow || \"expand\";\n\n let iconSize = icon && icon.size ? icon.size : \"regular\";\n let iconPlacement = icon && icon.placement ? icon.placement : \"left\";\n\n let strokeWidth = theme.baseUIComponents.button.strokeValues[stroke];\n let width = theme.baseUIComponents.button.sizeVariantValues[sizeVariant].width;\n let height = theme.baseUIComponents.button.sizeVariantValues[sizeVariant].height;\n let iconSizeValue = theme.baseUIComponents.button.sizeVariantValues[sizeVariant].iconSize[iconSize];\n let fontSize = theme.baseUIComponents.button.sizeVariantValues[sizeVariant].fontSize || presetValues.fontSize || themePresetDefaults.fontSize;\n let lateralPadding = sizeVariant === \"xs\" ? 0.6 : 1;\n\n if (props.skeleton) {\n return \n }\n\n return \n { icon ? (iconPlacement === \"left\" ? : ) : null }\n { props.children ? \n \n {props.children}\n \n : null }\n { icon ? (iconPlacement === \"right\" ? : ) : null }\n ;\n\n}\n\nexport const Button = withTheme($Button);\n","import React, {PropsWithChildren} from \"react\";\nimport styled from \"styled-components\";\nimport {OrbitComponent} from \"../../components/base-components/orbit-component/orbit-component\";\n\nconst SelectWrapperBox = styled.div<{width?: string;}>`\n display: inline-block;\n position: relative;\n width: ${({width}) => width};\n color: ${({theme}) => theme.colors.textLight};\n`;\n\nconst SelectBox = styled.select<{width: string; hasError?: boolean;}>`\n width: ${({width}) => width};\n ${({theme}) => theme.font.presets.regular};\n font-size: 1.275rem;\n transition: border-radius 0.2s linear, border-color 0.2s linear;\n background-color: ${props => props.theme.colors.backgroundMiddleDark};\n color: inherit;\n border-radius: ${({theme}) => theme.layout.border.radius};\n border-color: ${props => props.hasError ? props.theme.colors.danger : props.theme.colors.boxBorderLighter};\n &:hover {\n border-color: ${props => props.hasError ? props.theme.colors.danger : props.theme.colors.boxBorderContrast};;\n }\n border-width: 1px;\n border-style: solid;\n padding: 1rem 4rem 1rem 1.6rem;\n\n /* REMOVE THE DEFAULT ARROW */\n /* for Firefox */\n -moz-appearance: none;\n /* for Safari, Chrome, Opera */\n -webkit-appearance: none;\n /* for IE10 */\n &::-ms-expand {\n display: none;\n }\n`;\n\nconst SelectBoxArrow = styled.div`\n position: absolute;\n right: 0.6rem;\n top: -0.3rem;\n width: 3rem;\n padding: 0.7rem;\n margin-top: 0.72rem;\n pointer-events: none;\n border-radius: 50%;\n\n transition: transform 0.2s linear;\n transform: rotate(90deg);\n`;\n\ninterface ISelectProps extends PropsWithChildren {\n // standard props from native html select element that will be passed directly\n id?: string;\n name?: string;\n value?: string | number;\n onChange?(event: React.ChangeEvent): void;\n className?: string;\n\n // custom props, not native html select element\n hasError?: boolean;\n width?: string;\n}\n\nexport class Select extends OrbitComponent { // React.SelectHTMLAttributes\n render() {\n let {width, ...passThroughProps} = this.props;\n width = width || \"auto\";\n const selectWidth = width !== \"auto\" ? \"100%\" : \"auto\";\n\n const ArrowIcon = this.services.theme.currentTheme.icons.rightArrowIcon;\n return \n \n {this.props.children}\n \n \n \n \n ;\n }\n}","import * as React from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { CssRule } from '../../../themes/architecture/css-helpers/css-rule';\nimport {PropsWithChildren} from \"react\";\n\nexport enum SvgSizeUnit {\n Rem = \"rem\",\n Em = \"em\",\n Px = \"px\",\n Percent = \"%\"\n}\n\nexport interface ISvgIconProps extends PropsWithChildren {\n /**\n * The size of the icon.\n * @default 2.4\n */\n size?: number;\n /**\n * if false, the property size represents the width\n * if true, the property size represents the height\n * @default false\n */\n sizeIsHeight?: boolean;\n /**\n * Css unit: rem, em, px, %\n * @default rem\n */\n sizeUnit?: SvgSizeUnit;\n /**\n * Additional css,\n * Do not abuse this prop. You will be punished\n */\n style?: React.CSSProperties;\n /**\n * Additional class name for styling, selectors\n * Do not abuse this prop. You will be punished\n */\n className?: string;\n /**\n * title is required for SEO\n */\n title?: string;\n}\n\ninterface ISvgIconPrivateProps {\n /**\n * The aspect ratio of the icon. is expressed by the width divided by the height.\n * For example an icon that is 16:9 will have a ratio of 16/9 = 1.(7) ~= 1.78\n * Default is 1, square icon\n * @default 1\n */\n ratio?: number;\n /**\n * Specific svg property\n */\n viewBox?: string;\n /**\n * Some icons needs to be flipped on RTL languages, for example left arrow icon (<) must be flipped, and will look like a right arrow icon (>)\n */\n flipOnRTL?: boolean;\n /**\n * Used to normalize / reset the fill property. Some of the icons have black backdrop opacity without it.\n * alternative to wrapping the whole svg markup content in . It doesn't matter which one is used\n */\n fill?: string;\n}\n\nconst Svg = styled.svg<{flipOnRTL?: boolean}>`\n ${({flipOnRTL}) => flipOnRTL ? css`\n ${CssRule.For.RTL.build()} & {\n transform: scaleX(-1);\n }`\n : null}\n`;\n\nexport class SvgIcon extends React.Component {\n render() {\n const sizeUnit = this.props.sizeUnit ? this.props.sizeUnit : SvgSizeUnit.Rem;\n const defaultSize = sizeUnit === SvgSizeUnit.Px ? 24 : (sizeUnit === SvgSizeUnit.Percent ? 100 : 2.4);\n const size = this.props.size ? this.props.size : defaultSize;\n const ratio = this.props.ratio ? this.props.ratio : 1;\n\n const width = this.props.sizeIsHeight ? (size * ratio) : size;\n const height = this.props.sizeIsHeight ? size : (size / ratio);\n\n const viewBox = this.props.viewBox ?? \"0 0 24 24\";\n const style = {\n display: \"block\",\n ...this.props.style\n };\n\n return (\n \n {this.props.title ? {this.props.title} : null}\n {this.props.children}\n \n );\n }\n}\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const DividerBox = styledBox('DividerBox');","import styled from \"styled-components\";\n\nexport const SpacerBox = styled.div<{height: string}>`\n height: ${({height}) => height};\n`;\n","import styled from \"styled-components\";\n\nexport const XCloseButtonBox = styled.button`\n cursor: pointer;\n background-image: url(\"${props => props.theme.images.closeModalDialog.toString()}\");\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n &:hover {\n opacity: 0.5;\n }\n`;","import {IArenaViewModel} from \"../../services/arenas/models/arenas/arena-view-model.interface\";\nimport React from 'react';\nimport {observer} from \"mobx-react\";\n\ninterface SwiperWindowComponentProps {\n windowPosition: number;\n arena: IArenaViewModel;\n}\n\nexport const SwiperWindowComponent: React.FC = observer((props) => {\n return props.arena.renderList(props.windowPosition);\n});\n\n\n","import {MutableRefObject, useEffect, useState} from \"react\";\n\ninterface UseIsInViewPortHookOptions {\n intersectionRoot?: string;\n intersectionThreshold?: number;\n}\n\nexport default function useIsInViewPort(ref: MutableRefObject, opt?: UseIsInViewPortHookOptions) {\n\n const [isIntersecting, setIntersecting] = useState(false);\n\n useEffect(() => {\n const intersectionObserverInit: IntersectionObserverInit = {};\n if(opt){\n intersectionObserverInit.threshold = opt.intersectionThreshold;\n intersectionObserverInit.root = document.getElementById(opt.intersectionRoot);\n }\n\n const intersectionObserverHandler = (entry: IntersectionObserverEntry): boolean => opt?.intersectionThreshold\n ? entry.isIntersecting \n : entry.intersectionRatio > 0 || entry.isIntersecting;\n const observer = new IntersectionObserver(\n ([entry]) => setIntersecting(intersectionObserverHandler(entry)), intersectionObserverInit\n );\n if (ref.current) {\n observer.observe(ref.current);\n }\n return () => {\n try {\n observer.disconnect()\n } catch (err) {\n console.error('Failed to disconnect observer');\n }\n }\n }, [ref, opt]);\n\n return isIntersecting;\n}\n","import React, {useEffect, useRef, useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {SwiperWindowComponent} from \"../orbit-swiper/swiper-window.component\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {reaction} from \"mobx\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport useIsInViewPort from \"../../react-hooks/use-is-in-viewport.hook\";\n\ninterface ArenaGamesListsComponentProps {\n arenaName: string;\n}\n\nexport const ArenaGamesListsComponent: React.FC = observer((props) => {\n const services = useServices();\n const [listsCount, setListsCount] = useState(0);\n const [hasMoreLists, setHasMoreLists] = useState(true);\n const intersectionSpyRef = useRef(null);\n let isIntersectionSpyInViewport = useIsInViewPort(intersectionSpyRef);\n\n const arena = services.arenas.getArena(props.arenaName);\n\n const loadNextBatch = () => {\n const nextBatch = arena.getNextBatchSize(listsCount);\n if(nextBatch === 0) {\n if(hasMoreLists !== false) {\n setHasMoreLists(false);\n }\n } else {\n setListsCount(listsCount + nextBatch);\n }\n }\n\n useEffect(() => {\n const reactionDispose = reaction(() => services.user.isAuthorized,\n () => {\n setListsCount(0);\n setHasMoreLists(true);\n });\n\n return () => {\n reactionDispose();\n }\n }, [services.user.isAuthorized]);\n\n useEffect(() => {\n\n const spyRectangle = intersectionSpyRef.current.getBoundingClientRect();\n //spyRectangle.top <= window.innerHeight is here because IntersectionObserver used by useIsInViewPort hook has a delay in detecting that the element is not in the viewport anymore.\n if(spyRectangle.top <= window.innerHeight && hasMoreLists && isIntersectionSpyInViewport) {\n loadNextBatch();\n }\n });\n\n\n\n\n const range = Array.from({length: listsCount}, (x, i) => i + 1);\n\n return (\n\n \n {range.map(listWindowPosition => ())}\n\n
\n \n );\n\n});\n\n","import {LiveCasinoGridItemDefaultBox} from \"./live-casino-grid-item.default.box\";\n\nexport const LiveCasinoGridItemBox = LiveCasinoGridItemDefaultBox;","import styled, {css} from \"styled-components\";\n\ninterface ILiveCasinoGridItemDefaultBoxProps {\n fluidWidth?: boolean; // when true, don't set the width, let it flow within its parent\n}\n\nexport const LiveCasinoGridItemDefaultBox = styled.div`\n box-sizing: border-box;\n\n /* Prevents CSS Transform flicker */\n backface-visibility: hidden;\n\n ${({fluidWidth}) => !fluidWidth && css`\n\n width: calc(100% / 5);\n padding: 1em 0.5em;\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n width: calc(100% / 3);\n }\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n width: calc(100% / 4);\n }\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: calc(100% / 2);\n padding: 0.5em 0.25em;\n }\n `}\n`;","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemInfoItemBox = styledBox('LiveCasinoGridItemInfoItemBox');\n","import {LiveCasinoGridItemInfobarIconDefaultBox} from \"./live-casino-grid-item-infobar-icon.default.box\";\n\nexport const LiveCasinoGridItemInfobarIconBox = LiveCasinoGridItemInfobarIconDefaultBox;","import styled from \"styled-components\";\nimport { Image } from \"../../../../../../raw-components/image/image\";\n\nexport const LiveCasinoGridItemInfobarIconDefaultBox = styled(Image)`\n margin-right: 0.25em;\n`;","import {LiveCasinoGridItemThumbnailImageDefaultBox} from \"./live-casino-grid-item-thumbnail-image.default.box\";\n\nexport const LiveCasinoGridItemThumbnailImageBox = LiveCasinoGridItemThumbnailImageDefaultBox;","import styled from \"styled-components\";\nimport {ITEM_WRAPPER_BOX} from \"../../css-constants\";\nimport { Image } from \"../../../../../raw-components/image/image\";\n\nexport const LiveCasinoGridItemThumbnailImageDefaultBox = styled(Image)<{filterBlur?: boolean}>`\n width: 100%;\n transition: transform 0.25s ease;\n ${({filterBlur}) => filterBlur ? 'filter: blur(2px)' : null};\n .${ITEM_WRAPPER_BOX}:hover &{\n transform: scale(1.2);\n }\n`;","export const ITEM_WRAPPER_BOX = 'item-wrapper-box';\nexport const RED = 'red';\nexport const GREEN = 'green';","import styled from \"styled-components\";\nimport {hexToRgba} from \"../../../../../../themes/hex-to-rgba\";\n\nexport const LiveCasinoGridItemInfobarDefaultBox = styled.div`\n display: flex;\n left: 0;\n bottom: 0;\n width: 100%;\n padding: 0.5em 1em;\n background: ${props => hexToRgba(props.theme.components.newLiveCasino.colors.gridItem.infobarBackground, 0.75)};\n position: absolute;\n\n &::before {\n content: \"\";\n position: absolute;\n top: -1px;\n left: 0;\n width: 100%;\n height: 1px;\n background: linear-gradient(90deg, transparent, ${props => props.theme.colors.backgroundContrast}, transparent);\n }\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding: 0.25em;\n }\n`;","import styled from \"styled-components\";\nimport {hexToRgba} from \"../../../../../../themes/hex-to-rgba\";\nimport {LiveCasinoGridItemInfobarDefaultBox} from \"./live-casino-grid-item-infobar.default.box\";\n\nexport const LiveCasinoGridItemInfobarCasino777Box = styled(LiveCasinoGridItemInfobarDefaultBox)`\n background: ${props => hexToRgba(props.theme.components.newLiveCasino.colors.gridItem.infobarBackground, 0.92)};\n &::before {\n background: transparent linear-gradient(90deg, transparent 0%, ${props => props.theme.colors.background} 33%, ${props => props.theme.colors.background} 69%, transparent 100%) 0% 0% no-repeat padding-box;\n }\n`;\n","import styled from \"styled-components\";\nimport {hexToRgba} from \"../../../../../../themes/hex-to-rgba\";\nimport {LiveCasinoGridItemInfobarDefaultBox} from \"./live-casino-grid-item-infobar.default.box\";\n\nexport const LiveCasinoGridItemInfobarMrGreenBox = styled(LiveCasinoGridItemInfobarDefaultBox)`\n background: ${props => hexToRgba(props.theme.colors.horizontalLineBackgroundColor, 0.6)};\n &::before {\n background: none;\n }\n`;\n","import { styledByTheme } from \"../../../../../../themes/architecture/styled-by-theme\";\nimport { LiveCasinoGridItemInfobarCasino777Box } from \"./live-casino-grid-item-infobar.casino777.box\";\nimport {LiveCasinoGridItemInfobarDefaultBox} from \"./live-casino-grid-item-infobar.default.box\";\nimport {LiveCasinoGridItemInfobarMrGreenBox} from \"./live-casino-grid-item-infobar.mrgreen.box\";\n\nexport const LiveCasinoGridItemInfobarBox = styledByTheme(LiveCasinoGridItemInfobarDefaultBox)\n .forCasino777(LiveCasinoGridItemInfobarCasino777Box)\n .forMrGreen(LiveCasinoGridItemInfobarMrGreenBox)\n .apply();\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemClosedMessageBox = styledBox('LiveCasinoGridItemClosedMessageBox');\n","import {LiveCasinoGridItemThumbnailOverlayDefaultBox} from \"./live-casino-grid-item-thumbnail-overlay.default.box\";\n\nexport const LiveCasinoGridItemThumbnailOverlayBox = LiveCasinoGridItemThumbnailOverlayDefaultBox;","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemThumbnailOverlayDefaultBox = styled.div`\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n`;","import {LiveCasinoGridItemThumbnailDefaultBox} from \"./live-casino-grid-item-thumbnail.default.box\";\n\nexport const LiveCasinoGridItemThumbnailBox = LiveCasinoGridItemThumbnailDefaultBox;","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemThumbnailDefaultBox = styled.div`\n position: relative;\n width: 100%;\n height: 0;\n padding-bottom: 56.25%; // keeps a 16:9 ratio\n overflow: hidden;\n`;","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemWrapperBox = styledBox(\"LiveCasinoGridItemWrapperBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemTitleBox = styledBox(\"LiveCasinoGridItemTitleBox\");\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemBetBehindButtonBox = styledBox('LiveCasinoGridItemBetBehindButtonBox');\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemJackpotBox = styledBox('LiveCasinoGridItemJackpotBox');\n","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemOpenAtBox = styled.div`\n width: 100%;\n font-size: 2.25em;\n font-weight: 700;\n`;","import React from \"react\";\nimport { observer } from 'mobx-react';\nimport classNames from \"classnames\";\nimport { GameInfo, OpenGameParameters } from '../../../../services/games/game-info';\nimport { OrbitComponent } from '../../../base-components/orbit-component/orbit-component';\nimport { ILiveTableInfo } from '../../../../services/live-table-feeds-service/live-table-feeds.service.interface';\nimport { Check } from \"@sparkware/app-utils\";\nimport { LiveCasinoGridItemInfobarBox } from \"./boxes/infobar/live-casino-grid-item-infobar.box\";\nimport { LiveCasinoGridItemInfobarIconBox } from \"./boxes/infobar/infobar-icon/live-casino-grid-item-infobar-icon.box\";\nimport { LiveCasinoGridItemInfoItemBox } from \"./boxes/infobar/info-item/live-casino-grid-item-info-item.box\";\nimport { LiveCasinoGridItemClosedMessageBox } from \"./boxes/closed-message/live-casino-grid-item-closed-message.box\";\nimport { LiveCasinoGridItemThumbnailOverlayBox } from \"./boxes/thumbnail/live-casino-grid-item-thumbnail-overlay.box\";\nimport { LiveCasinoGridItemThumbnailBox } from \"./boxes/thumbnail/live-casino-grid-item-thumbnail.box\";\nimport { LiveCasinoGridItemWrapperBox } from \"./boxes/wrapper/live-casino-grid-item-wrapper.box\";\nimport { LiveCasinoGridItemBox } from \"./boxes/grid-item/live-casino-grid-item.box\";\nimport { ITEM_WRAPPER_BOX } from \"./css-constants\";\nimport { LiveCasinoGridItemThumbnailImageBox } from \"./boxes/thumbnail/live-casino-grid-item-thumbnail-image.box\";\nimport { LiveCasinoGridItemTitleBox } from \"./boxes/title/live-casino-grid-item-title.box\";\nimport { LiveCasinoGridItemBetBehindButtonBox } from \"./boxes/infobar/bet-behind/live-casino-grid-item-bet-behind-button.box\";\nimport { LiveCasinoGridItemJackpotBox } from \"./boxes/infobar/jackpot/live-casino-grid-item-jackpot.box\";\nimport { addQueryParam } from \"../../../../../utils/url-utils\";\nimport { LiveCasinoGridItemOpenAtBox } from \"./boxes/closed-message/live-casino-grid-item-open-at.box\";\nimport { TableSeatsComponent } from \"./shared-components/table-seats.component\";\nimport { RouletteDrawsComponent } from \"./shared-components/roulette-draws.component\";\nimport { FlexGrowItemBox } from \"../../../../themes/architecture/css-helpers/flex\";\nimport { ComponentServicesPick } from \"../../../../services/component-services-pick\";\nimport { withServices } from \"../../../../react-hooks/with-services\";\nimport {LiveCasinoMinMaxBetComponentProps} from \"./shared-components/live-casino-min-max-bet.component.props\";\n\n\nexport interface ILiveCasinoArenaGridItemProps extends ComponentServicesPick<'jackpots'> {\n tableId: number;\n gameInfo: GameInfo;\n listTitle: string;\n gameIndex: number;\n seoCategory: string;\n liveTable: ILiveTableInfo;\n fluidWidth?: boolean;\n captureGameElementRef: (element: any) => void;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent {\n\n private _openGame = (gameInfo: GameInfo) => {\n const openGameParams: OpenGameParameters = {\n isRealMode: true,\n pageName: this.props.seoCategory,\n gameIndex: this.props.gameIndex,\n listTitle: this.props.listTitle\n };\n\n gameInfo.open(openGameParams);\n };\n\n\n private _renderDealerName() {\n\n const tableInfo = this.props.liveTable;\n const isMobilePhone = this.services.device.isMobile && !this.services.device.isTablet;\n\n if (Check.isEmpty(tableInfo) || Check.isNullOrUndefined(tableInfo.Dealer) || tableInfo.Dealer.length === 0 || isMobilePhone) {\n return null;\n }\n\n return (\n \n \n {tableInfo.Dealer}\n \n )\n }\n\n private _renderSeatsCount() {\n return ;\n }\n\n private _renderRouletteDraws() {\n return ;\n }\n\n private _renderJackpot() {\n let jpValue = this.props.jackpots.getGameJackpot(this.props.gameInfo.gameType);\n if (!Check.isNullOrUndefined(jpValue)) {\n return \n {this.services.currency.formatMoney(jpValue)}\n ;\n }\n return null;\n }\n\n private _renderBetBehindButton() {\n const tableInfo = this.props.liveTable;\n let tableIsFull = false;\n if (tableInfo.Seats && tableInfo.SeatsTaken) {\n tableIsFull = tableInfo.SeatsTaken.length === tableInfo.Seats;\n }\n\n if (Check.isEmpty(tableInfo) || !tableInfo.BetBehind || !tableIsFull) {\n return null;\n }\n\n return (\n \n Bet behind\n \n );\n }\n\n private _renderGameInfobar() {\n\n const tableInfo = this.props.liveTable;\n\n if (Check.isEmpty(tableInfo) || !tableInfo.IsOpen) {\n return null;\n }\n\n return (\n \n {this._renderDealerName()}\n {this._renderSeatsCount()}\n \n {this._renderRouletteDraws()}\n {this._renderJackpot()}\n {this._renderBetBehindButton()}\n \n );\n }\n\n private _renderGameIsClosed() {\n const tableInfo = this.props.liveTable;\n\n if (Check.isEmpty(tableInfo) || tableInfo.IsOpen) {\n return null;\n }\n\n return (\n \n {this.services.translation.translate(\"LIVE_ARENA_TABLE_IS_CLOSED_MESSAGE\")}\n {this.props.liveTable?.OperationHoursStartTime}\n \n );\n }\n\n private _renderGameThumbnailImage() {\n const tableInfo: ILiveTableInfo = this.props.liveTable;\n const gameInfo: GameInfo = this.props.gameInfo;\n let gameTitle: string;\n let gameImage: string;\n\n if (Check.isEmpty(tableInfo) || !tableInfo.TableImage) {\n gameTitle = gameInfo?.title;\n gameImage = gameInfo?.gameArenaIcon;\n } else {\n // We need this random because we want to force react to reload the image because the url of the image is identical but the image changed.\n let imageRandom = Math.random();\n\n gameTitle = tableInfo.Name;\n\n gameImage = addQueryParam(tableInfo.TableImage, imageRandom.toString());\n }\n\n return ();\n }\n\n private _renderGameThumbnail() {\n const liveCasinoMinMaxBetProps: LiveCasinoMinMaxBetComponentProps = {\n liveTable: this.props.liveTable,\n gameInfo: this.props.gameInfo\n }\n\n return (\n \n {this._renderGameThumbnailImage()}\n \n {this.services.regulation.current.components.renderLiveCasinoMinMaxBet(liveCasinoMinMaxBetProps)}\n {this._renderGameInfobar()}\n {this._renderGameIsClosed()}\n \n \n );\n }\n\n private _renderGameTitle() {\n // Render an empty character so the div doesn't just collapse\n let title = this.props.gameInfo?.title || \"\\xa0\";\n const tableInfo = this.props.liveTable;\n\n if (tableInfo && tableInfo.Name !== undefined && tableInfo.Name.length > 0) {\n title = tableInfo.Name;\n }\n\n return (\n \n {title}\n \n );\n }\n\n private _renderGameItem() {\n return (\n \n this._openGame(this.props.gameInfo)} className={classNames('cy-live-casino-grid-item-inner-wrapper', ITEM_WRAPPER_BOX)}>\n {this._renderGameThumbnail()}\n {this._renderGameTitle()}\n \n \n );\n }\n\n render() {\n try {\n return this._renderGameItem();\n } catch (err) {\n this.services.logger.error(`Failed to render LiveCasinoArenaGridItem for game ${this.props.gameInfo && this.props.gameInfo.gameType}`, err);\n return null;\n }\n }\n}\n\nexport const LiveCasinoArenaGridItem = withServices(ComponentBody, ['jackpots']);","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridBox = styledBox('LiveCasinoGridBox');\n","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemSkeletonBox = styled.div`\n padding-top: 56.25%;\n`;","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemSkeletonTitleBox = styled.div`\n padding: 0.5em 1em;\n font-size: 1.2em;\n color: rgba(0, 0, 0, 0);;\n overflow: hidden;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding: 0.25em 0.5em;\n }\n animation: AmountSkeletonAnimation 1.5s linear infinite;\n @keyframes AmountSkeletonAnimation {\n 0% {\n background-color: ${props => props.theme.components.newLiveCasino.colors.gridItem.wrapperBorder};\n }\n 50% {\n background-color: ${props => props.theme.colors.backgroundLight};\n }\n 100% {\n background-color: ${props => props.theme.components.newLiveCasino.colors.gridItem.wrapperBorder};\n }\n }\n`;","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemSkeletonWrapperBox = styled.div`\n display: flex;\n flex-direction: column;\n border: 1px solid ${props => props.theme.components.newLiveCasino.colors.gridItem.wrapperBorder};\n border-radius: 3px;\n overflow: hidden;\n`;","import React from \"react\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {LiveCasinoGridBox} from \"./boxes/grid/live-casino-grid.box\";\nimport { observable, action, makeObservable } from \"mobx\";\nimport {LiveCasinoGridItemBox} from \"./boxes/grid-item/live-casino-grid-item.box\";\nimport {LiveCasinoArenaGridItem} from './live-casino-arena-grid-item.component';\nimport {LiveCasinoGridItemSkeletonBox} from \"./boxes/grid/skeleton/live-casino-grid-item-skeleton.box\";\nimport {LiveCasinoGridItemSkeletonTitleBox} from \"./boxes/grid/skeleton/live-casino-grid-item-skeleton-title.box\";\nimport {LiveCasinoGridItemSkeletonWrapperBox} from \"./boxes/grid/skeleton/live-casino-grid-item-skeleton-wrapper.box\";\nimport {LiveCasinoPromotionalBannerConfiguration} from '../../../../services/configurations/config-data-sections/arenas.configuration';\nimport {BannerComponent} from \"../../../banner/banner.component\";\nimport {\n LiveTableTabConfiguration\n} from \"../../../../services/live-table-feeds-service/live-table-feeds.service.interface\";\n\nexport interface ILiveCasinoArenaGridProps {\n seoCategory: string;\n useAISortedList: boolean;\n promotionalBannerConfig?: LiveCasinoPromotionalBannerConfiguration;\n}\n\n@observer\nexport class LiveCasinoArenaGrid extends OrbitComponent {\n private _gameElementRef: HTMLDivElement | null = null;\n private _gridElementRef: HTMLDivElement | null = null;\n\n constructor(props: ILiveCasinoArenaGridProps) {\n super(props);\n\n makeObservable(this);\n }\n\n get liveTabConfigs(): LiveTableTabConfiguration | null {\n return this.services.liveTableFeeds.currentArenaTabConfiguration;\n }\n\n @observable.ref\n private _cmsBannerPosition: number = 0;\n\n @observable.ref\n private _numberOfGamesPerRow: number = 0;\n\n private _numberOfGames: number = 0;\n\n private _captureGameElementRef = (gameElement: HTMLDivElement | null) => {\n this._gameElementRef = gameElement;\n this._computeNumberOfGamesInARow();\n };\n\n private _captureGridElementRef = (gridElement: HTMLDivElement | null) => {\n this._gridElementRef = gridElement;\n this._computeNumberOfGamesInARow();\n };\n\n @action.bound\n private _setCMSBannerPosition() {\n let cmsBannerPositionFromConfig = this._numberOfGamesPerRow * this.props?.promotionalBannerConfig?.displayRowPlace;\n this._cmsBannerPosition = this._numberOfGames > cmsBannerPositionFromConfig ? cmsBannerPositionFromConfig : this._numberOfGames;\n }\n\n private _computeNumberOfGamesInARow() {\n\n if (!this._gridElementRef || !this._gameElementRef) return;\n\n try {\n this._numberOfGamesPerRow = Math.round(Number(this._gridElementRef[\"offsetWidth\"]) / Number(this._gameElementRef[\"offsetWidth\"]));\n this._setCMSBannerPosition();\n } catch (error) {\n this.services.logger.error(\"Failed to compute number of live games in a row\", error);\n }\n }\n\n\n private _renderPromotionalBanner() {\n\n if (Check.isNullOrUndefined(this.props.promotionalBannerConfig)) return null;\n\n let promotionalBanner = this.liveTabConfigs?.headerConfiguration?.banners?.promotionalBanner;\n if (!promotionalBanner) {\n promotionalBanner = this.props.promotionalBannerConfig;\n }\n\n\n return (\n \n );\n }\n\n private _renderGridSkeleton() {\n\n let skeletons = [];\n\n for (var i = 0; i < 12; i++) {\n skeletons.push(\n \n \n \n Loading\n \n \n );\n }\n\n return skeletons;\n }\n\n private _renderGridItem(tableId: number, gameIndex: number, key: number) {\n\n let listTitle = this.services.liveTableFeeds.currentArenaTabConfiguration?.gridConfiguration.title;\n\n //this if is a duplicate with the one in live-casino-arena-navbar-button.component.tsx\n // in the future we should look for a way to refactor this for_you logic and have it come from the admin somehow, have only one source of truth\n if (this.services.user.isAuthorized && listTitle === \"TOP_EVO_GAMES\") {\n listTitle = \"FOR_YOU_GAMES\";\n }\n const shouldRenderPromoBanner = gameIndex === (this._cmsBannerPosition - 1);\n\n return (\n \n \n {\n shouldRenderPromoBanner && this._renderPromotionalBanner()\n }\n \n );\n }\n\n private _renderGames() {\n\n let gameIds: number[] = [];\n\n\n if (this.liveTabConfigs) {\n gameIds = this.services.liveTableFeeds.getLiveGames();\n }\n\n if (gameIds.length === 0) {\n return this._renderGridSkeleton();\n } else {\n this._numberOfGames = gameIds.length;\n return gameIds.map((tableId, gameIndex) => this._renderGridItem(tableId, gameIndex, tableId));\n }\n }\n\n componentDidMount() {\n super.componentDidMount();\n\n this.reaction(() => [\n this.services.device.os.isPC,\n this.services.device.isTablet,\n this.services.device.isMobile\n ], () => this._setCMSBannerPosition(), {fireImmediately: true});\n }\n\n render() {\n\n return (\n \n {this._renderGames()}\n \n );\n }\n}\n\n","import {DrawsDefaultBox} from \"./live-casino-grid-item-draws.default.box\";\n\nexport const LiveCasinoGridItemDrawsBox = DrawsDefaultBox;","import styled from \"styled-components\";\n\nexport const DrawsDefaultBox = styled.div`\n display: flex;\n`;","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemDrawBox = styledBox('LiveCasinoGridItemDrawBox');\n","import React from \"react\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {GREEN, RED} from \"../css-constants\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {ILiveTableInfo} from \"../../../../../services/live-table-feeds-service/live-table-feeds.service.interface\";\nimport {LiveCasinoGridItemDrawsBox} from \"../boxes/infobar/draws/live-casino-grid-item-draws.box\";\nimport {LiveCasinoGridItemDrawBox} from \"../boxes/infobar/draws/live-casino-grid-item-draw.box\";\n\ninterface IRouletteDrawsComponentProps {\n tableInfo: ILiveTableInfo;\n}\n\nconst ROULETTE_NUMBERS_MAP = {\n red: [\n \"1\", \"3\", \"5\", \"7\", \"9\", \"12\",\n \"14\", \"16\", \"18\", \"19\", \"21\", \"23\",\n \"25\", \"27\", \"30\", \"32\", \"34\", \"36\"\n ],\n green: [\"0\", \"00\"]\n // Black numbers are implied by default, no need to map them\n};\n\nexport class RouletteDrawsComponent extends OrbitComponent {\n\n private _getDrawColor(drawValue: string): string {\n\n if (ROULETTE_NUMBERS_MAP.red.includes(drawValue)) {\n return RED;\n } else if (ROULETTE_NUMBERS_MAP.green.includes(drawValue)) {\n return GREEN;\n }\n\n return null;\n }\n\n render() {\n\n if (Check.isEmpty(this.props.tableInfo) || this.props.tableInfo.BetBehind || !this.props.tableInfo.RouletteLast5Numbers || this.props.tableInfo.RouletteLast5Numbers.length === 0) {\n return null;\n }\n\n return (\n \n {this.props.tableInfo.RouletteLast5Numbers.map((drawValue, i) =>\n \n {drawValue}\n \n )}\n \n );\n }\n}\n","import React from \"react\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {ILiveTableInfo} from \"../../../../../services/live-table-feeds-service/live-table-feeds.service.interface\";\nimport {LiveCasinoGridItemInfoItemBox} from \"../boxes/infobar/info-item/live-casino-grid-item-info-item.box\";\nimport {LiveCasinoGridItemInfobarIconBox} from \"../boxes/infobar/infobar-icon/live-casino-grid-item-infobar-icon.box\";\n\nexport interface ITableSeatsComponentProps {\n tableInfo: ILiveTableInfo;\n isLiveStreamOverlay?: boolean;\n}\n\nexport class TableSeatsComponent extends OrbitComponent {\n\n private _isTableFull() {\n\n if (this.props.tableInfo.Seats) {\n if (this.props.tableInfo.SeatsTaken?.length > 0) {\n return this.props.tableInfo.SeatsTaken.length === this.props.tableInfo.Seats;\n } else {\n return this.props.tableInfo.Players === this.props.tableInfo.Seats;\n }\n }\n\n return false;\n }\n\n private _getTableIsFullText() {\n return this._isTableFull() ? this.services.translation.translate(this._getTableIsFullTranslationKey()) : this._getPlayersCountFormated();\n }\n\n private _getTableIsFullTranslationKey() {\n return this.services.device.isMobile ? \"LIVE_CASINO_TABLE_FULL_MOBILE\" : \"LIVE_CASINO_TABLE_FULL_PC\";\n }\n\n private _getSeatsIconSource() {\n return this._isTableFull()\n ? this.services.theme.currentTheme.images.liveArena.fullSeatIcon.toString()\n : this.services.theme.currentTheme.images.liveArena.seatIcon.toString();\n }\n\n private _getPlayersCountFormated() {\n\n if (this.props.tableInfo.Seats) {\n if (this.props.tableInfo.SeatsTaken?.length > 0) {\n return `${this.props.tableInfo.SeatsTaken.length}/${this.props.tableInfo.Seats}`;\n } else {\n return `${this.props.tableInfo.Players}/${this.props.tableInfo.Seats}`;\n }\n }\n\n return this.props.tableInfo.Players;\n }\n\n render() {\n\n if (Check.isEmpty(this.props.tableInfo) || this.props.tableInfo.Players === undefined) {\n return null;\n }\n\n return (\n \n \n {this._getTableIsFullText()}\n \n );\n }\n}\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoArenaNavbarButtonWrapperBox = styledBox(\"LiveCasinoArenaNavbarButtonWrapperBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoFilterButtonsBox = styledBox(\"LiveCasinoFilterButtonsBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoNavbarBox = styledBox(\"LiveCasinoNavbarBox\");\n","import React, {useEffect} from \"react\";\nimport {observer} from \"mobx-react\";\nimport classNames from \"classnames\";\nimport {IStickyHandler} from \"../../../sticky-handler/sticky-handler.interface\";\nimport {LiveCasinoFilterButtonsBox} from \"./boxes/live-casino-filter-buttons/live-casino-filter-buttons.box\";\nimport {STICKY_NAVBAR} from \"./css-constants\";\nimport {LiveCasinoNavbarBox} from \"./boxes/live-casino-navbar/live-casino-navbar.box\";\nimport {LiveCasinoArenaNavbarButtonProps} from \"./live-casino-arena-navbar-button.component\";\nimport {ThemeProvider} from \"styled-components\";\nimport {\n LiveTableTabConfiguration\n} from \"../../../../services/live-table-feeds-service/live-table-feeds.service.interface\";\nimport {LobbyHeaderTitleBox} from \"../../../lobby-header/boxes/title/lobby-header-title.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {LobbyHeaderTitleContainerBox} from \"../../../lobby-header/boxes/container/lobby-header-title.container.box\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface LiveCasinoArenaNavbarProps extends ComponentServicesPick<'header'>{\n title?: string;\n configs: LiveTableTabConfiguration[];\n stickyHandler: IStickyHandler;\n FilterButtonComponent: React.ComponentType;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n useEffect(() => {\n return () => props.stickyHandler && props.stickyHandler.dispose();\n }, [props.stickyHandler]);\n\n const _onFilterClicked = async (tabId: string) => {\n await services.liveTableFeeds.setCurrentArenaTab(tabId);\n };\n\n\n const FilterButtonComponent = props.FilterButtonComponent || React.Fragment;\n return (\n \n \n {props.title ? \n \n \n {services.translation.translate(props.title)}\n \n \n : null}\n \n {props.configs.map((tabConfig) => {\n return (\n tabConfig.gridConfiguration.gamesId.length === 0 ? null :\n await _onFilterClicked(tabConfig.headerConfiguration.filter)}\n seoPage={tabConfig.headerConfiguration.seoPage}\n isActiveTab={tabConfig.headerConfiguration?.filter?.toLowerCase() === services.liveTableFeeds.currentArenaTabConfiguration?.headerConfiguration?.filter?.toLowerCase()}\n />\n );\n\n })}\n \n \n \n );\n})\n\n\nexport const LiveCasinoArenaNavbar = withServices(ComponentBody, ['header']);","export const STICKY_NAVBAR = 'sticky-navbar';\n","import styled from \"styled-components\";\n\nexport const ButtonWrapperBox = styled.div`\n width: 15rem;\n`;\n","import React from 'react';\nimport { observer } from \"mobx-react\";\nimport styled, { AnyStyledComponent } from 'styled-components';\nimport { BalanceType } from '../../../common/const/wallet_balance_type';\nimport { OrbitComponent } from \"../base-components/orbit-component/orbit-component\";\n\ninterface IBalanceValueProps {\n balanceType?: BalanceType;\n className?: string;\n WrapperComponent?: AnyStyledComponent;\n}\n\nexport const BalanceValue = observer(class BalanceValue extends OrbitComponent {\n static defaultProps: Partial = {\n balanceType: BalanceType.BOTH,\n WrapperComponent: styled.span`\n color: ${props => props.theme.colors.moneyColor};\n `\n };\n render() {\n let bankroll = this.services.walletProxy.bankroll[this.props.balanceType!];\n const balanceMaxChars = 15;\n // Bankroll length limited by 15 chars\n const numberIndex = bankroll.search(/[0-9]/g);\n const symbolIndex = bankroll.search(/[^0-9.,]/g);\n let balance: string;\n\n if (numberIndex > symbolIndex) {\n balance = bankroll.slice(numberIndex, numberIndex + balanceMaxChars);\n bankroll = bankroll.slice(symbolIndex, numberIndex) + balance;\n } else {\n balance = bankroll.slice(numberIndex, Math.min(balanceMaxChars, symbolIndex - numberIndex));\n bankroll = balance + bankroll.slice(symbolIndex);\n }\n\n let WrapperComponent = this.props.WrapperComponent!;\n return \n { bankroll }\n ;\n }\n});\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const AdminBannerBox = styledBox('AdminBannerBox');","import React, {useEffect, useState} from \"react\";\nimport {AdminBannerBox} from \"./boxes/admin-banner-wrapper.box\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {NullableString} from \"../../../common/types/nullable-types\";\nimport {Check} from \"@sparkware/app-utils\";\n\n\ndeclare global {\n namespace JSX {\n interface IntrinsicElements {\n \"banner-slider\": any;\n }\n }\n}\n\nexport interface AdminBannerComponentProps {\n bannerAdminPlaceholderId: string;\n}\nexport interface AdminBannerComponentWithServicesProps extends ComponentServicesPick<'adminBanner' | 'user'>, AdminBannerComponentProps{\n\n}\n\nconst ComponentBody:React.FC = observer((props) => {\n const [bannerSegmentation, setBannerSegmentation] = useState(null);\n\n useEffect(() => {\n props.adminBanner.getSegmentationsForAdminBanner().then(segmentation => {\n setBannerSegmentation(JSON.stringify(segmentation));\n })\n }, [props.adminBanner, props.user.isAuthorized]);\n\n if(Check.isNullOrUndefined(bannerSegmentation)) {\n return null;\n }\n\n const bannerConfig = JSON.stringify(props.adminBanner.getConfigForAdminBanner(props.bannerAdminPlaceholderId));\n return (\n \n \n \n );\n});\n\nexport const AdminBannerComponent = withServices(ComponentBody, [\"adminBanner\", \"user\"]);","import {CmsBannerComponent, CmsBannerComponentProps} from \"../cms-banner/cms-banner.component\";\nimport {AdminBannerComponent, AdminBannerComponentProps} from \"../admin-banner/admin-banner.component\";\nimport * as React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {BannerContainerBox} from \"../cms-banner/banner-container/banner-container.box\";\n\nexport interface BannerComponentProps extends CmsBannerComponentProps, AdminBannerComponentProps {\n\n}\ninterface BannerComponentWithServicesProps extends ComponentServicesPick<'adminBanner'>, BannerComponentProps {\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n if(props.adminBanner.adminBannerEnabled) {\n return (\n \n );\n } else {\n return ()\n }\n});\n\n\nexport const BannerComponent = withServices(ComponentBody, [\"adminBanner\"]);","import React, {PropsWithChildren, Suspense} from \"react\";\n\nexport class OrbitSuspense extends React.Component {\n render() {\n return
}>\n {this.props.children}\n \n }\n}\n","import {OrbitComponent} from '../orbit-component/orbit-component';\n\nexport class RoutedComponent extends OrbitComponent {\n}\n","export const HYBRID_EMBEDDED_NAV_MENU = 'hybrid-embedded-nav-menu';//don't delete it - we need it to get the height for the hybrid embedded","export enum AnimationDismissType {\n FloatingButton = 1,\n FadeOut = 2\n}\nexport const FADE_OUT_DURATION_IN_SECONDS = 1;\nexport const FLOATING_BUTTON_DURATION_IN_SECONDS = 0.8;\nexport const TEXT_TRANSITION_DURATION_IN_SECONDS = 0.3;\nexport const FAB_DISAPPEAR_DURATION_IN_SECONDS = 2;\n\n/* The native frame width as it was made by the designer. Intrinsic size of the png image. We agreed for a frame of 600px wide and 1000px tall */\nexport const NATIVE_ANIMATION_FRAME_WIDTH = 600;\n","import styled, { css } from \"styled-components\"\nimport { AnimationDismissType, FADE_OUT_DURATION_IN_SECONDS, FLOATING_BUTTON_DURATION_IN_SECONDS } from \"../burnout-animation-constants\";\n\ninterface IBurnoutAnimationContainerProps {\n animationEnded: boolean;\n dismissType: AnimationDismissType;\n viewportHeight: number;\n zIndex: number;\n}\n\nexport const BurnoutAnimationContainer = styled.div`\n /* Position the container in the viewport, covering all visible area from top to bottom */\n position: fixed;\n top: 0;\n height: ${({viewportHeight}) => viewportHeight}px;\n /* it should be as wide as it can but no wider than 800px or the height of the viewport whichever is smaller\n Why no wider than 100vh? Because on very wide landscape screens (landscape mobile phones for example)\n we want to contain the animation in a square of the size equal to the height of the screen, any bigger, it will cut top and bottom part */\n width: 100%;\n max-width: min(${({viewportHeight}) => viewportHeight}px, 100vh, 800px);\n /* Horizontal alignment in viewport with right and transform */\n right: 50%;\n transform: translateX(50%);\n /* A big z-index, to make sure it's above everything */\n z-index: ${({zIndex}) => zIndex};\n /* Allow clicks to go through the animation elements so that the user can control the gameplay for example */\n pointer-events: none;\n /* overflow: hidden; */\n opacity: 1;\n ${({animationEnded, dismissType}) => animationEnded ? (\n dismissType === AnimationDismissType.FadeOut ? css`\n transition: opacity ${FADE_OUT_DURATION_IN_SECONDS}s;\n opacity: 0;\n ` : css`\n transition: height ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, width ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, max-width ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, top ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, right ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, border-radius ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, opacity ${FLOATING_BUTTON_DURATION_IN_SECONDS}s;\n height: 60px;\n width: 60px;\n max-width: 60px;\n overflow: hidden;\n top: 75px;\n right: 60px;\n @media ${({theme}) => theme.mediaQuery.sAndBelow } {\n right: 40px;\n }\n border-radius: 50%;\n pointer-events: auto;\n opacity: 0.91;\n `\n ) : ''};\n\n`;\n","import styled, { css } from \"styled-components\"\nimport { AnimationDismissType, FLOATING_BUTTON_DURATION_IN_SECONDS } from \"../burnout-animation-constants\";\n\ninterface IBurnoutAnimationBoxProps {\n animationEnded: boolean;\n dismissType: AnimationDismissType;\n}\n\nexport const BurnoutAnimationBox = styled.div`\n position: absolute;\n width: 100%;\n top: 50%;\n transform: translateY(-70%);\n ${({animationEnded, theme}) => animationEnded ? css`\n background-image: url(${theme.images.burnoutAnimation.lastFrame.toString()});\n background-position: 0 0;\n background-size: 100% 100%;\n ` : \"\"}\n\n /* Aspect ratio. 1000 / 600 = 1.(6) => In percentage 166.(6)% */\n height: 0;\n padding-top: calc(166.66667%);\n ${({animationEnded, dismissType}) => (animationEnded && dismissType === AnimationDismissType.FloatingButton) ? css`\n transition: transform ${FLOATING_BUTTON_DURATION_IN_SECONDS}s;\n transform: translateY(-90%) scale(2);\n @media ${({theme}) => theme.mediaQuery.lAndAbove } {\n transform: translate(-3%, -100%) scale(2.5);\n }\n ` : \"\"}\n`;\n","import styled from \"styled-components\"\nimport { NATIVE_ANIMATION_FRAME_WIDTH, TEXT_TRANSITION_DURATION_IN_SECONDS } from \"../burnout-animation-constants\";\n\ninterface ICongratulationsTextBoxProps {\n animationWidth: number;\n show: boolean;\n}\nexport const CongratulationsTextBox = styled.div`\n position: absolute;\n z-index: 2;\n width: 100%;\n top: 66%;\n text-align: center;\n color: ${({theme}) => theme.colors.brandSecondary};\n -webkit-text-stroke: 2px ${({theme}) => theme.colors.backgroundLight};\n ${({theme}) => theme.font.presets.ultra};\n\n font-size: ${({animationWidth}) => animationWidth * 33 / NATIVE_ANIMATION_FRAME_WIDTH}px;\n line-height: 1.1;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: ${({animationWidth}) => animationWidth * 39 / NATIVE_ANIMATION_FRAME_WIDTH}px;\n letter-spacing: -0.5px;\n }\n\n transition: opacity ${TEXT_TRANSITION_DURATION_IN_SECONDS}s, transform ${TEXT_TRANSITION_DURATION_IN_SECONDS}s;\n opacity: ${({show}) => show ? 1 : 0};\n transform: scale(${({show}) => show ? 1 : 0.25});\n`;\n","import {DisposableObject} from \"../../../../utils/disposable-object\";\n\nexport class DisposableBurnoutAnimationDependencies extends DisposableObject {\n public addTimeout(handler: () => void, timeout?: number) {\n return super.addTimeout(handler, timeout)\n }\n}","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport { AnimationDismissType, FADE_OUT_DURATION_IN_SECONDS, FLOATING_BUTTON_DURATION_IN_SECONDS, NATIVE_ANIMATION_FRAME_WIDTH } from \"./burnout-animation-constants\";\nimport { BurnoutAnimationContainer } from \"./boxes/burnout-animation-container.box\";\nimport { BurnoutAnimationBox } from \"./boxes/burnout-animation.box\";\nimport { CongratulationsTextBox } from \"./boxes/burnout-animation-text.box\";\nimport { TrackEntry } from \"../../../services/pixi-app/pixi-app.service.interface\";\nimport { imagePreload } from \"../../../../common/utils/image-preload\";\nimport {AnimationStatus, PixiSpineAnimation} from \"../../../services/pixi-app/pixi-spine-animation\";\nimport {DisposableBurnoutAnimationDependencies} from \"./disposable-burnout-dependencies\";\n\nconst ExitAnimationDurationByDismissType = {\n [AnimationDismissType.FadeOut]: FADE_OUT_DURATION_IN_SECONDS,\n [AnimationDismissType.FloatingButton]: FLOATING_BUTTON_DURATION_IN_SECONDS\n};\n\ninterface IBurnoutAnimationProps {\n zIndex: number;\n getExitAnimation(): AnimationDismissType;\n onExitAnimationEnd(exitAnimationType: AnimationDismissType): void;\n paused?: boolean;\n}\n\n@observer\nexport class BurnoutAnimation extends OrbitComponent {\n /* Sometimes the last frame iamge is loaded again at the end of the animation.\n My supposition is that when the preloaded image is not used immediately the browser assumes it will not be used so it unloads it.\n So I keep the reference to the image tag so the garbage collecter will not dispose the image.\n Apparently it works */\n private lastFrameCache: HTMLImageElement | null = null;\n\n private pixiBurnoutAnimation: PixiSpineAnimation;\n private disposableDependencies: DisposableBurnoutAnimationDependencies = new DisposableBurnoutAnimationDependencies();\n\n constructor(props: IBurnoutAnimationProps) {\n super(props);\n\n makeObservable(this);\n\n this._viewportHeight = window.innerHeight;\n }\n\n componentDidMount(): void {\n super.componentDidMount();\n this.pixiBurnoutAnimation = this.createAnimation();\n if (!this.props.paused) {\n this.startAnimation();\n }\n }\n\n componentDidUpdate(prevProps: IBurnoutAnimationProps) {\n\n if (this.props.paused !== prevProps.paused) {\n if (!this.props.paused) {\n this.startAnimation();\n } else {\n if (this._onPauseHandler) {\n this._onPauseHandler(!!this.props.paused);\n }\n }\n }\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this.lastFrameCache = null;\n this._onPauseHandler = null;\n this.disposableDependencies.dispose();\n this.pixiBurnoutAnimation.dispose();\n }\n\n @observable.ref\n private _dismissType = AnimationDismissType.FadeOut;\n @observable.ref\n private _hasAnimationEnded = false;\n @observable.ref\n private _showCongratsText = false;\n private _animationElement: HTMLDivElement | null = null;\n private _animationWidth = NATIVE_ANIMATION_FRAME_WIDTH;\n /* In mobile, i cannot use 100vh in css because it does not consider the browser chrome (tool bar and address bars and such).\n So I have to do this horrible hack, I take the height from JS */\n private _viewportHeight = NATIVE_ANIMATION_FRAME_WIDTH;\n\n private _onPauseHandler: ((pause: boolean) => void) | null = null;\n\n private async startAnimation() {\n if (this.pixiBurnoutAnimation.status === AnimationStatus.Loading || this.pixiBurnoutAnimation.status === AnimationStatus.Running) {\n return;\n }\n this.pixiBurnoutAnimation.start();\n this.pixiBurnoutAnimation.attachToDOM(this._animationElement);\n }\n\n private createAnimation() {\n return new PixiSpineAnimation(this.services, {\n width: 600, height: 1000, force2DCanvasContext: true\n }, [{\n name: 'burnoutAnimationResource',\n jsonUrl: this.services.theme.currentTheme.images.burnoutAnimation.pixiJson.toString()\n }], {\n render: ({spineAnimations}) => {\n\n /* Animation assets are all loaded and we can play, but before that we should also preload the last frame image to avoid flicker at the end of animation */\n imagePreload(this.services.theme.currentTheme.images.burnoutAnimation.lastFrame.toString()).then((response) => {\n this.lastFrameCache = response.imageObj;\n });\n\n let currentAnimationTrackEntry: TrackEntry | null;\n\n this._onPauseHandler = (pause: boolean) => {\n // spineAnimation.autoUpdate = !pause;\n if (currentAnimationTrackEntry) {\n currentAnimationTrackEntry.timeScale = pause ? 0 : 1;\n }\n }\n\n let spineAnimation = spineAnimations['burnoutAnimationResource'];\n // play animation\n const runAnimation = () => {\n spineAnimation.state.setAnimation(0, \"1-zoom\", false);\n spineAnimation.state.addAnimation(0, \"2-static_close\", false, 0.3);\n const spineAnimationTrackEntry3 = spineAnimation.state.addAnimation(0, \"3-opening\", false, 0);\n spineAnimationTrackEntry3.listener = {\n event: (entry, event) => {\n if (event.stringValue === \"open_text\") {\n this.setShowCongratsText(true);\n }\n }\n };\n spineAnimation.state.addAnimation(0, \"4-static _open\", false, 0);\n spineAnimation.state.addAnimation(0, \"5-static _open_tranzition\", false, 1.5);\n const spineAnimationTrackEntry6 = spineAnimation.state.addAnimation(0, \"6-static _open_empty\", false, 0);\n spineAnimationTrackEntry6.listener = {\n start: (entry) => {\n this.setShowCongratsText(false);\n }\n };\n spineAnimation.state.addAnimation(0, \"7-closing\", false, 0);\n const finalTrackEntry = spineAnimation.state.addAnimation(0, \"8-closed\", false, 0);\n finalTrackEntry.listener = {\n complete: (entry) => {\n this.setDismissType(this.props.getExitAnimation());\n this.markAnimationEnding();\n\n this.disposableDependencies.addTimeout(() => {\n this._onPauseHandler = null;\n this.pixiBurnoutAnimation.dispose();\n });\n\n this.disposableDependencies.addTimeout(() => {\n this.lastFrameCache = null;\n this.props.onExitAnimationEnd(this._dismissType);\n }, ExitAnimationDurationByDismissType[this._dismissType] * 1000 + 100);\n }\n };\n }\n\n spineAnimation.state.addListener({\n start: (entry) => {\n currentAnimationTrackEntry = entry;\n }\n });\n\n runAnimation();\n\n this._viewportHeight = this.services.window.innerHeight;\n }\n }, {\n position: \"absolute\",\n top: \"0\",\n width: \"100%\"\n });\n }\n\n @action.bound\n private markAnimationEnding() {\n this._hasAnimationEnded = true;\n };\n\n @action.bound\n private setDismissType(v: AnimationDismissType) {\n this._dismissType = v;\n }\n\n @action.bound\n private setShowCongratsText(v: boolean) {\n this._showCongratsText = v;\n }\n\n private captureAnimationDivElement = (el: HTMLDivElement | null) => {\n this._animationElement = el;\n if (el) {\n this._animationWidth = el.getBoundingClientRect().width;\n }\n }\n\n render() {\n /* Delay the rendering of the animation for the time the image is preloaded.\n As soon we can start the animation then we can display, measure the size of the animation based on viewport and play */\n return \n \n \n {this.services.translation.translate(\"BURNOUT_MESSAGE_LINE_1\")}\n
\n {this.services.translation.translate(\"BURNOUT_MESSAGE_LINE_2\")}\n \n \n
;\n }\n}\n","import React from \"react\";\nimport styled, { css, keyframes } from \"styled-components\";\nimport { FAB_DISAPPEAR_DURATION_IN_SECONDS } from \"../burnout-animation-constants\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\ninterface IBurnoutFabProps {\n zIndex: number;\n onClick(): void;\n onMount(): void;\n removeButton?: boolean;\n}\n\nexport const BurnoutFab: React.FC = ({zIndex, onClick, onMount, removeButton}) => {\n\n React.useEffect(() => {\n onMount();\n }, [onMount]);\n\n return (\n \n );\n};\n\nconst disappearAnimation = keyframes`\n 0% {\n transform: translateX(50%) scale(1.3);\n opacity: 1;\n }\n 50% {\n transform: translateX(50%) scale(1.3);\n opacity: 1;\n }\n 99% {\n transform: translateX(50%) scale(1.3);\n opacity: 0;\n }\n 100% {\n transform: translateX(50%) scale(1.3);\n opacity: 0;\n display: none;\n }\n`;\n\nconst pulseAnimation = keyframes`\n 0% {\n transform: translateX(50%) scale(1);\n }\n 50% {\n transform: translateX(50%) scale(1);\n }\n 100% {\n transform: translateX(50%) scale(1.1);\n }\n`;\n\nconst shadowAppear = keyframes`\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nconst BurnoutFabContainer = styled.div<{zIndex: number; removeButton?: boolean;}>`\n position: fixed;\n height: 60px;\n width: 60px;\n max-width: 60px;\n overflow: visible;\n top: 75px;\n right: 60px;\n @media ${({theme}) => theme.mediaQuery.sAndBelow } {\n right: 40px;\n }\n border-radius: 50%;\n cursor: pointer;\n /* A big z-index, to make sure it's above everything */\n z-index: ${({zIndex}) => zIndex};\n transform: translateX(50%);\n opacity: 0.9;\n /* box-shadow: 0px 0px 40px ${({theme}) => theme.colors.brandSecondary}, inset 0 0 40px ${({theme}) => theme.colors.brandSecondary}; */\n transition: transform 0.3s, opacity 0.3s;\n &:hover {\n transform: translateX(50%) scale(1.1);\n opacity: 1;\n }\n &:active {\n transform: translateX(50%) scale(1.3);\n opacity: 1;\n }\n ${({removeButton}) => removeButton ? css`\n animation: ${FAB_DISAPPEAR_DURATION_IN_SECONDS}s linear 0s 1 forwards running ${disappearAnimation};\n ` : css`\n animation: 1s linear 0s infinite alternate running ${pulseAnimation};\n &:hover {\n animation: 1s linear 0s infinite alternate paused ${pulseAnimation};\n }\n `}\n\n &::after {\n content: '';\n position: absolute;\n z-index: -1;\n width: 40%;\n height: 40%;\n top: 30%;\n left: 30%;\n background: transparent;\n border-radius: 50%;\n box-shadow: 0px 0px 40px 15px ${({theme}) => theme.colors.brandPrimary};\n transition: opacity 0.3s;\n opacity: 0;\n animation: 2s linear 0s 1 forwards running ${shadowAppear};\n }\n`;\n\nconst BurnoutFabInner = styled.div`\n position: absolute;\n width: 100%;\n top: 50%;\n background-image: url(${({theme}) => theme.images.burnoutAnimation.lastFrame.toString()});\n background-position: 0 0;\n background-size: 100% 100%;\n /* Aspect ratio. 1000 / 600 = 1.(6) => In percentage 166.(6)% */\n height: 0;\n padding-top: calc(166.66667%);\n transform: translateY(-90%) scale(2);\n transition: transform 0.3s;\n @media ${({theme}) => theme.mediaQuery.lAndAbove } {\n transform: translate(-3%, -100%) scale(2.5);\n }\n`;\n","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { action, observable, runInAction, makeObservable } from \"mobx\";\nimport { BurnoutAnimation } from \"./burnout-animation.component\";\nimport { AnimationDismissType, FAB_DISAPPEAR_DURATION_IN_SECONDS } from \"./burnout-animation-constants\";\nimport { BurnoutFab } from \"./boxes/burnout-fab.box\";\nimport {ISendElasticEventOptions} from \"../../../services/analytics/analytics.service.interface\";\nimport {DisposableBurnoutAnimationDependencies} from \"./disposable-burnout-dependencies\";\n\ninterface IBurnoutAnimationWrapper {\n checkOmg(): boolean;\n showOmg?(): void;\n paused?: boolean;\n onSafeUnmountNotice?(): void;\n}\n\n@observer\nexport class BurnoutAnimationWrapper extends OrbitComponent {\n\n constructor(props: IBurnoutAnimationWrapper) {\n super(props);\n\n makeObservable(this);\n }\n\n @observable.ref\n private _showButton = false;\n @observable.ref\n private _animationEnded = false;\n @observable.ref\n private _removeButtonAnimation = false;\n private disposableDependencies: DisposableBurnoutAnimationDependencies = new DisposableBurnoutAnimationDependencies();\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this.disposableDependencies.dispose();\n }\n\n\n private getExitAnimation = () => {\n if (this.props.checkOmg()) {\n return AnimationDismissType.FloatingButton;\n } else {\n return AnimationDismissType.FadeOut;\n }\n }\n\n @action.bound\n private onExitAnimationEnd = () => {\n if (this.props.checkOmg()) {\n this._showButton = true;\n } else {\n this.disposableDependencies.addTimeout(() => {\n this.recheckOmg(true);\n }, 2000);\n }\n this._animationEnded = true;\n };\n\n @action.bound\n private recheckOmg = (retryOnFail: boolean) => {\n if (this.props.checkOmg()) {\n this._showButton = true;\n } else {\n if (retryOnFail) {\n this.disposableDependencies.addTimeout(() => {\n this.recheckOmg(false);\n }, 2000);\n } else {\n // we can safely unmount this component\n this.props.onSafeUnmountNotice && this.props.onSafeUnmountNotice();\n }\n }\n };\n\n @action.bound\n private onClickFAB = () => {\n let data: ISendElasticEventOptions = {\n eventType: \"Orbit_Marketing\",\n category: 'Burnout',\n action: 'Click_floating_icon'\n }\n this.services.analytics.sendElasticInfoEvent(data, true);\n\n if (this.props.showOmg) {\n this.props.showOmg();\n }\n this._removeButtonAnimation = true;\n this.disposableDependencies.addTimeout(() => {\n runInAction(() => {\n this._showButton = false;\n // we can safely unmount this component\n this.props.onSafeUnmountNotice && this.props.onSafeUnmountNotice();\n });\n }, FAB_DISAPPEAR_DURATION_IN_SECONDS * 1000 + 500);\n };\n\n private _onMountFAB = () => {\n let data: ISendElasticEventOptions = {\n eventType: \"Orbit_Marketing\",\n category: 'Burnout',\n action: 'View_floating_icon'\n }\n this.services.analytics.sendElasticInfoEvent(data, true);\n };\n\n private _renderFAB = (zIndex: number) => {\n if (this._showButton) {\n return (\n \n )\n }\n return null;\n };\n\n\n render() {\n const zIndex = this.services.burnoutService.getBurnoutAnimationZIndex();\n /* Show the animation. If the prize is in bonus money and the omg was already received, the animation transform itself into a button.\n Else, the animation dissapear and I use another element as a button because\n it is a lot of logic inside the animation component that we don't need anymore and it might break stuff */\n return this._animationEnded ? this._renderFAB(zIndex) : ;\n }\n}\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ClockLastLoginBox = styledBox('ClockLastLoginBox');","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const LastLoginBox = styledBox('LastLoginBox');","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {ClockLastLoginBox} from \"./boxes/clock-last-login.box\";\nimport {LastLoginBox} from './boxes/last-login.box';\nimport {ClockComponent} from \"../clock/clock.component\";\n\n\nexport const ClockAndLastLoginBoxComponent = observer(class ClockAndLastLoginBoxComponent extends OrbitComponent<{}> {\n\n render() {\n if (!this.services.configuration.data.ClockAndLastLoginBox.display) {\n return null;\n }\n\n return (\n \n \n {this._renderLastLoginComponent()}\n \n );\n\n }\n\n\n private _renderLastLoginComponent(): any {\n let data = this.services.configuration.data;\n if (!data.ClockAndLastLoginBox.lastLoginDisplay) {\n return null;\n }\n\n return (\n \n {this.services.regulation.current.components.renderLastLoginComponent()}\n \n );\n\n }\n});\n\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ClockComponentBox = styledBox(\"ClockComponentBox\");\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {observer} from 'mobx-react';\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {namedSetInterval} from \"../../../common/utils/time-functions\";\nimport {AnyStyledComponent} from \"styled-components\";\nimport {ClockComponentBox} from \"./boxes/clock.component.box\";\nimport classNames from \"classnames\";\n\ninterface ClockComponentProps {\n format?: string\n box?: AnyStyledComponent | React.ComponentType;\n className?: string;\n}\n\nexport const ClockComponent: React.FC = observer((props) => {\n const services = useServices();\n\n const dateTimeFormat = props.format ? props.format : services.time.getDateTimeFormat();\n\n const getFormattedTime = useCallback(() => {\n const currentDate = services.time.getCurrentServerDate() ? services.time.getCurrentServerDate() : services.time.getCurrentDate();\n\n const currentDateInRegulationTimeZone = services.time.convertToRegulationTimeZone(currentDate);\n\n if (!currentDateInRegulationTimeZone) {\n return;\n }\n\n return services.time.format(currentDateInRegulationTimeZone.date, dateTimeFormat, currentDateInRegulationTimeZone.isUTC);\n }, [dateTimeFormat, services.time]);\n\n const [dateTime, setDateTime] = useState(getFormattedTime());\n\n const updateTime = useCallback(() => {\n const time = getFormattedTime();\n\n if (dateTime !== time) {\n setDateTime(time);\n }\n }, [dateTime, getFormattedTime]);\n\n useEffect(() => {\n const subscription = services.time.onServerTimeUpdated(updateTime);\n return () => {\n subscription.off();\n }\n }, [services.time, updateTime]);\n\n useEffect(() => {\n const interval = namedSetInterval('CLOCK_UPDATE_TIMER', updateTime, 1000);\n return () => {\n clearInterval(interval)\n }\n }, [services.time, updateTime]);\n\n const Box: AnyStyledComponent | React.ComponentType = props.box ? props.box : ClockComponentBox;\n\n return (\n \n
\n {dateTime}\n
\n
\n );\n});\n","import {BannerContainerDefaultBox} from \"./banner-container.default.box\";\n\nexport const BannerContainerBox = BannerContainerDefaultBox;","import styled, {css} from \"styled-components\";\nimport {LOBBY_PAGE, NEW_LIVE_AB_CASINO_PAGE} from \"../../../themes/css-global-classes\";\n\nexport interface IBannerContainerBoxProps {\n minHeight?: string;\n}\n\nexport const BannerContainerDefaultBox = styled.div`\n position: relative;\n width: 100%;\n overflow-x: hidden;\n\n .${LOBBY_PAGE} & {\n z-index: 2;\n background-color: ${props => props.theme.colors.background}\n }\n \n .${NEW_LIVE_AB_CASINO_PAGE} & {\n margin-bottom: 4rem;\n }\n \n ${props => props.minHeight && css`\n min-height: ${props.minHeight};\n`};\n`;\n","import React, {useEffect} from 'react';\nimport {CmsBannerId} from '../../services/cms/cms-banners/cm-banner-id/cms-banner-id';\nimport {observer} from 'mobx-react';\nimport {EmptyBannerDefinition} from '../../services/cms/cms-banners/banner-definition/empty-banner-definition';\nimport {BannerContainerBox} from \"./banner-container/banner-container.box\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {EmptyBannerComponent} from \"./empty-banner/empty-banner.component\";\n\nexport interface CmsBannerComponentProps {\n componentID: string;\n templateID: string;\n fallbackComponent: string;\n showPlaceholder: boolean;\n className?: string;\n minHeight?: string;\n}\ninterface CmsBannerComponentWithServicesProps extends CmsBannerComponentProps, ComponentServicesPick<'cmsBanners'>{\n\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n\n const bannerId = new CmsBannerId(props.componentID, props.templateID, props.fallbackComponent);\n\n useEffect(() => {\n props.cmsBanners.loadBanner(bannerId)\n });\n\n let bannerDefinition = props.cmsBanners.bannersMap[bannerId.key];\n if(!bannerDefinition) {\n bannerDefinition = new EmptyBannerDefinition();\n }\n\n\n return (\n \n {\n bannerDefinition.render({\n showPlaceholder: props.showPlaceholder,\n minHeight: props.minHeight\n })\n }\n \n );\n});\n\nexport const CmsBannerComponent = withServices(ComponentBody,\n ['cmsBanners'],\n {\n renderSkeleton: (props) => \n });","import styled, {css} from \"styled-components\";\nimport {IBannerContainerBoxProps} from \"../banner-container/banner-container.default.box\";\n\nexport const EmptyBannerContainerBox = styled.div`\n width: 100%;\n ${props => props.minHeight && css`\n min-height: ${props.minHeight};\n `};\n`;\n","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {EmptyBannerContainerBox} from \"./empty-banner-container.box\";\n\nexport class EmptyBannerComponentProps {\n showPlaceholder: boolean;\n minHeight: string;\n}\n\n\nexport const EmptyBannerComponent = observer(\n class EmptyBannerComponent extends OrbitComponent {\n\n render() {\n if(this.props.showPlaceholder && !this.services.device.hybrid.isEmbedded) {\n return ()\n }\n return null;\n }\n }\n);\n\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const FreePlayContainerBox = styledBox('FreePlayContainerBox');\n","import styled from \"styled-components\";\n\nexport const VouchersSwiperBox = styled.div`\n width: 100%;\n flex-shrink: 0;\n position: relative;\n padding-top: 3.3rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 1.2rem;\n }\n\n .swiper-pagination {\n .swiper-pagination-bullet {\n background-color: white;\n opacity: 0.25;\n &.swiper-pagination-bullet-active {\n opacity: 1;\n }\n }\n }\n`","import styled, { css } from \"styled-components\";\n\nexport const VoucherSwiperArrowContainerBox = styled.div<{isPrev?: boolean;}>`\n position: absolute;\n width: 3rem;\n height: 4rem;\n background-size: contain;\n /* background-color: red; */\n z-index: 2;\n /* display: flex;\n flex-direction: column;\n align-content: center;\n justify-content: center;\n align-items: center;\n text-align: center; */\n font-size: 2rem;\n padding: 4px;\n cursor: pointer;\n top: 50%;\n transform: translate(0, -50%);\n ${({isPrev}) => isPrev ? css`\n left: 0;\n background-image: url(${({theme}) => theme.images.freePlay.swiperArrowPrev.toString()});\n ` : css`\n right: 0;\n background-image: url(${({theme}) => theme.images.freePlay.swiperArrowNext.toString()});\n `}\n &.swiper-button-disabled {\n opacity: 0.6;\n }\n`\n","import React from 'react';\nimport {SwiperProps, SwiperRef} from \"swiper/swiper-react\";\nimport {Swiper} from \"swiper/react\";\nimport 'swiper/css';\nimport 'swiper/css/navigation';\nimport 'swiper/css/pagination';\nimport 'swiper/css/virtual';\n\nexport const SwiperComponent: React.FC = React.forwardRef((props, ref) => {\n return (\n \n );\n})\n","import {observer} from \"mobx-react\";\nimport React from \"react\";\nimport {SwiperSlide} from \"swiper/react\";\nimport {Pagination, Navigation} from 'swiper/modules';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {VouchersSwiperBox} from \"../../../boxes/vouchers-swiper/vouchers-swiper.box\";\nimport {VoucherSwiperArrowContainerBox} from \"../../../boxes/vouchers-swiper/arrow/voucher-swiper-arrow-container.box\";\nimport {IFreePlayVoucherViewModel} from \"../../../../../services/free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {VoucherCardComponent} from \"../voucher-card.component\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {SwiperComponent} from \"../../../../swiper/swiper.component\";\n\ninterface VouchersSwiperComponentProps {\n onCurrentVoucherIndexChanged: (voucherIndex: number) => void;\n}\n\nexport const VouchersSwiperComponent = observer(\n class VouchersSwiperComponent extends OrbitComponent {\n prevElement = React.createRef();\n nextElement = React.createRef();\n\n private get _vouchers(): IFreePlayVoucherViewModel[] {\n return this.services.freePlay.userVouchersSortedByExpirationDate\n }\n\n render() {\n return (\n \n \n {\n if (typeof swiper.params.navigation !== \"boolean\") {\n swiper.params.navigation.prevEl = this.prevElement.current;\n swiper.params.navigation.nextEl = this.nextElement.current;\n }\n }}\n onActiveIndexChange={(swiper) => {\n this.props.onCurrentVoucherIndexChanged(swiper.activeIndex);\n }}\n >\n {this._vouchers.map((v) => {\n return \n {({ isActive }) => {\n return \n }}\n \n })}\n \n )\n }\n }\n);","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VoucherGamesListBox = styledBox(\"VoucherGamesListBox\");\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VouchersSwiperTitleBox = styledBox(\"VouchersSwiperTitleBox\");\n","import styled from \"styled-components\";\n\nexport const VouchersSwiperBackgroundBox = styled.div`\n width: 100%;\n background: linear-gradient(rgba(23, 23, 23, 0.5),rgba(0, 0, 0, 0.5)), url(${(props) => props.theme.images.freePlay.backgroundVouchersSlider.toString()});\n background-repeat: no-repeat;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n background: linear-gradient(rgba(23, 23, 23, 0.5),rgba(0, 0, 0, 0.5)), url(${(props) => props.theme.images.freePlay.backgroundVouchersSlider.toString()}) 0 -44px;\n background-size: cover;\n }\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VouchersGamesListTitleBox = styledBox(\"VouchersGamesListTitleBox\");\n","import React, {PropsWithChildren} from \"react\";\nimport { observable, action, makeObservable } from \"mobx\";\nimport {FreePlayContainerBox} from \"./boxes/container/free-play-container.box\";\nimport {observer} from \"mobx-react\";\nimport {VouchersSwiperComponent} from \"./parts/voucher-card/swiper/vouchers-swiper.component\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {VoucherGamesListBox} from \"./boxes/voucher-games-list/voucher-games-list.box\";\nimport {VouchersSwiperTitleBox} from \"./boxes/vouchers-swiper/vouchers-swiper-title.box\";\nimport {VouchersSwiperBackgroundBox} from \"./boxes/vouchers-swiper/vouchers-swiper-background.box\";\nimport {VouchersGamesListTitleBox} from \"./boxes/voucher-games-list-title/voucher-games-list-title.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {GameItemComponent} from \"../game-item/game-item.component\";\n\n@observer\nexport class FreePlayContainerComponent extends OrbitComponent {\n\n constructor(props: PropsWithChildren) {\n super(props);\n\n makeObservable(this);\n }\n\n @observable.ref\n currentVoucherIndex = 0;\n\n @action.bound\n private _onCurrentVoucherChangedHandler = (voucherIndex: number) => {\n this.currentVoucherIndex = voucherIndex;\n };\n\n private _renderVoucherGames = () => {\n const currentVoucher = this.services.freePlay.userVouchersSortedByExpirationDate[this.currentVoucherIndex];\n if(!currentVoucher) {\n return null;\n }\n\n return (\n {currentVoucher.freePlayGames.map(voucherGame => {\n await voucherGame.play()\n }}\n style={{marginBottom: \"1.5rem\"}}\n />)}\n );\n }\n\n\n\n render() {\n\n\n return (\n \n \n \n {this.services.translation.translate('FREE_PLAY_MESSAGE_LIST_TITLE')}\n \n \n \n \n {this.services.translation.translate('FREE_PLAY_MESSAGE_GAMES_LIST_TITLE')}\n \n {this._renderVoucherGames()}\n \n )\n }\n}","import styled, {css} from \"styled-components\";\n\nexport const VoucherCardBox = styled.div<{showCursor: boolean; }>`\n position: relative;\n\n width: 31rem;\n height: 18rem;\n margin: 0 auto 3rem;\n ${props => props.showCursor ? css`cursor: pointer` : ''};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 26rem;\n height: 15rem;\n }\n\n @media ${({theme}) => theme.mediaQuery.xlExact} {\n width: 33rem;\n } \n\n @media ${({theme}) => theme.mediaQuery.xxl + \" and \" + theme.mediaQuery.lowHeight} {\n width: 33rem;\n } \n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VoucherCardSideBox = styledBox(\"VoucherCardSideBox\");\n","import styled from \"styled-components\";\nimport {VoucherCardSideBox} from \"../voucher-card-side.box\";\n\nexport const VoucherCardFaceBox = styled(VoucherCardSideBox)`\n align-items: center;\n transform: rotateY(${({backSideShown}) => backSideShown ? \"180deg\" : \"0\"});\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardFaceContentBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n flex-grow: 1;\n line-height: 1.2;\n width: 100%;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardSideFooterBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n width: 100%;\n`","import styled from \"styled-components\";\nimport {VoucherCardSideFooterBox} from \"../../common/footer/voucher-card-side-footer.box\";\n\nexport const VoucherCardFaceFooterBox = styled(VoucherCardSideFooterBox)`\n`","import styled from \"styled-components\";\n\nexport const VoucherCardFaceIconContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding-right: 15px;\n height: 100%;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardFaceDetailsBox = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n flex-grow: 1;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin-top: 10px;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardFaceOriginalAmountBox = styled.div`\n font-size: 3rem;\n white-space: nowrap;\n ${({theme}) => theme.font.presets.ultra};\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 2rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardFaceVoucherNameBox = styled.div`\n font-size: 1.3rem;\n ${({theme}) => theme.font.presets.bold};\n letter-spacing: 1px;\n text-transform: uppercase;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardFaceCurrentAmountContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n ${({theme}) => theme.font.presets.regular};\n font-size: 1.5rem;\n margin-top: 20px;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin-top: 10px;\n font-size: 1.2rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardFaceIconBox = styled.div<{iconUrl: string}>`\n background-image: url(\"${props => props.iconUrl}\");\n background-repeat: no-repeat;\n background-position: center center;\n background-size: contain;\n width: 7.5em;\n height: 7.5em;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 6em;\n width: 6em;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardFaceCurrentAmountBox = styled.span`\n ${({theme}) => theme.font.presets.bold};\n padding-left: 4px;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardSideToggleButtonBox = styled.div`\n border: 1px solid;\n border-radius: 50%;\n padding: 1px;\n box-sizing: content-box;\n width: 1.4rem;\n height: 1.4rem;\n cursor: pointer;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardSideFooterContentBox = styled.div`\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n height: 100%;\n`","import styled, {css} from \"styled-components\";\n\nexport const VoucherCardFaceHeaderBox = styled.div<{isCloseToExpiration: boolean}>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n width: 100%;\n font-size: 1.1rem;\n line-height: 1;\n ${\n props => props.isCloseToExpiration \n ? css`\n color: ${props.theme.colors.danger};\n ${props.theme.font.presets.bold};\n `\n : ''\n }\n`;\n","import {\n OrbitComponentWithState\n} from \"../../../../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {\n IFreePlayVoucherViewModel\n} from \"../../../../../services/free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {VoucherCardFaceHeaderBox} from \"../../../boxes/voucher-card/face/header/voucher-card-face-header.box\";\nimport React from \"react\";\n\ninterface VoucherCardFaceHeaderComponentProps {\n voucher: IFreePlayVoucherViewModel;\n onClick?: () => void;\n}\n\ninterface VoucherCardFaceHeaderComponentState {\n expirationMessage: string;\n}\n\nexport class VoucherCardFaceHeaderComponent extends OrbitComponentWithState {\n\n constructor(props: VoucherCardFaceHeaderComponentProps) {\n super(props);\n this.state = {\n expirationMessage: props.voucher.expirationMessage\n };\n }\n\n private _expirationTimer: any = null;\n\n\n\n componentDidMount() {\n super.componentDidMount();\n if(this.props.voucher.isCloseToExpiration) {\n this._expirationTimer = setInterval(() => {\n this.setState({\n expirationMessage: this.props.voucher.expirationMessage\n })\n }, 1000);\n }\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n if(this._expirationTimer) {\n clearInterval(this._expirationTimer);\n }\n }\n\n render() {\n return (\n \n {this.props.voucher.expirationMessage}\n \n );\n }\n}","import React from \"react\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {\n IFreePlayVoucherViewModel\n} from \"../../../../../services/free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {VoucherCardFaceBox} from \"../../../boxes/voucher-card/face/voucher-card-face.box\";\nimport {VoucherCardFaceContentBox} from \"../../../boxes/voucher-card/face/content/voucher-card-face-content.box\";\nimport {VoucherCardFaceFooterBox} from \"../../../boxes/voucher-card/face/footer/voucher-card-face-footer.box\";\nimport {VoucherCardFaceIconContainerBox} from \"../../../boxes/voucher-card/face/content/icon/voucher-card-face-icon-container.box\";\nimport {\n VoucherCardFaceDetailsBox\n} from \"../../../boxes/voucher-card/face/content/details/voucher-card-face-details.box\";\nimport {\n VoucherCardFaceOriginalAmountBox\n} from \"../../../boxes/voucher-card/face/content/details/original-amount/voucher-card-face-original-amount.box\";\nimport {\n VoucherCardFaceVoucherNameBox\n} from \"../../../boxes/voucher-card/face/content/details/name/voucher-card-face-voucher-name.box\";\nimport {\n VoucherCardFaceCurrentAmountContainerBox\n} from \"../../../boxes/voucher-card/face/content/details/current-amount/voucher-card-face-current-amount-container.box\";\nimport {observer} from \"mobx-react\";\nimport {VoucherCardFaceIconBox} from \"../../../boxes/voucher-card/face/content/icon/voucher-card-face-icon.box\";\nimport {\n VoucherCardFaceCurrentAmountBox\n} from \"../../../boxes/voucher-card/face/content/details/current-amount/voucher-card-face-current-amount.box\";\nimport {\n VoucherCardSideToggleButtonBox\n} from \"../../../boxes/voucher-card/common/footer/side-toggle/voucher-card-side-toggle-button.box\";\nimport {\n VoucherCardSideFooterContentBox\n} from \"../../../boxes/voucher-card/common/footer/footer-content/voucher-card-side-footer-content.box\";\nimport { SvgSizeUnit } from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport {VoucherCardFaceHeaderComponent} from \"./voucher-card-face-header.component\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\ninterface VoucherCardFaceComponentProps {\n voucher: IFreePlayVoucherViewModel;\n onToggleSide?: () => void;\n onClick?: () => void;\n backSideShown: boolean;\n backgroundImageUrl: string;\n}\n\n\nexport const VoucherCardFaceComponent = observer(\n class VoucherCardFaceComponent extends OrbitComponent {\n\n private _renderOriginalAmount() {\n return (\n \n {this.props.voucher.formattedOriginalAmount || this.props.voucher.formattedCurrentBalance}\n \n )\n }\n\n private _renderCurrentAmount() {\n if(!this.props.voucher.formattedOriginalAmount) {\n return null;\n }\n\n return (\n \n \n {this.services.translation.translate('FREE_PLAY_VOUCHER_BALANCE_PREFIX')}\n \n \n {this.props.voucher.formattedCurrentBalance}\n \n \n );\n }\n\n render() {\n let InfoIcon = this.services.theme.currentTheme.icons.infoIcon;\n return (\n \n \n\n \n \n \n \n \n {this._renderOriginalAmount()}\n \n {this.props.voucher.voucherName}\n \n {this._renderCurrentAmount()}\n \n \n\n \n \n \n \n \n \n\n \n )\n }\n }\n);","import styled from \"styled-components\";\nimport {VoucherCardSideBox} from \"../voucher-card-side.box\";\n\nexport const VoucherCardBackBox = styled(VoucherCardSideBox)`\n align-items: flex-start;\n transform: rotateY(${({backSideShown}) => backSideShown ? \"0\" : \"180deg\"});\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardBackHeaderBox = styled.div`\n display: flex;\n flex-direction: row;\n align-content: flex-start;\n ${({theme}) => theme.font.presets.bold};\n font-size: 1.5rem;\n padding-top: 5px;\n padding-bottom: 5px;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardBackContentBox = styled.div`\n display: flex;\n flex-direction: row;\n align-content: flex-start;\n flex-grow: 1;\n font-size: 1.2rem;\n line-height: 1.3;\n`","import styled from \"styled-components\";\nimport {VoucherCardSideFooterBox} from \"../../common/footer/voucher-card-side-footer.box\";\n\nexport const VoucherCardBackFooterBox = styled(VoucherCardSideFooterBox)`\n`","import React from \"react\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {\n IFreePlayVoucherViewModel\n} from \"../../../../../services/free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {VoucherCardBackBox} from \"../../../boxes/voucher-card/back/voucher-card-back.box\";\nimport {VoucherCardBackHeaderBox} from \"../../../boxes/voucher-card/back/header/voucher-card-back-header.box\";\nimport {VoucherCardBackContentBox} from \"../../../boxes/voucher-card/back/content/voucher-card-back-content.box\";\nimport {VoucherCardBackFooterBox} from \"../../../boxes/voucher-card/back/footer/voucher-card-back-footer.box\";\nimport {observer} from \"mobx-react\";\nimport {\n VoucherCardSideToggleButtonBox\n} from \"../../../boxes/voucher-card/common/footer/side-toggle/voucher-card-side-toggle-button.box\";\nimport {\n VoucherCardSideFooterContentBox\n} from \"../../../boxes/voucher-card/common/footer/footer-content/voucher-card-side-footer-content.box\";\nimport { SvgSizeUnit } from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\ninterface VoucherCardBackComponentProps {\n voucher: IFreePlayVoucherViewModel;\n onToggleSide: () => void;\n onClick?: () => void;\n backSideShown: boolean;\n backgroundImageUrl: string;\n}\n\nexport const VoucherCardBackComponent = observer(\n class VoucherCardBackComponent extends OrbitComponent {\n render() {\n let CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n return (\n \n \n {this.props.voucher.voucherName}\n \n \n {this.props.voucher.voucherDescription}\n \n \n \n \n \n \n \n \n );\n }\n }\n);\n\n","import React from \"react\";\nimport {\n IFreePlayVoucherViewModel\n} from \"../../../../services/free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {VoucherCardBox} from \"../../boxes/voucher-card/voucher-card.box\";\nimport {VoucherCardFaceComponent} from \"./face/voucher-card-face.component\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponentWithState} from \"../../../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {VoucherCardBackComponent} from \"./back/voucher-card-back.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\n\ninterface VoucherCardComponentProps {\n voucher: IFreePlayVoucherViewModel;\n onClick?: (voucher: IFreePlayVoucherViewModel) => void;\n}\n\ninterface VoucherCardComponentState {\n showBackSide: boolean;\n}\n\nexport const VoucherCardComponent = observer(\n class VoucherCardComponent extends OrbitComponentWithState {\n constructor(props: VoucherCardComponentProps) {\n super(props);\n this.state = {\n showBackSide: false\n }\n }\n private _onToggleSide = () => {\n this.setState({\n showBackSide: !this.state.showBackSide\n });\n }\n\n private _onCardSideClickHandler = () => {\n if (this.props.onClick) {\n this.props.onClick(this.props.voucher);\n }\n }\n\n render() {\n return (\n \n \n \n \n )\n }\n }\n);","import {FreeToPlayAnimatedIconDefaultBox} from \"./free-to-play-animated-icon.default.box\";\n\nexport const FreeToPlayAnimatedIconBox = FreeToPlayAnimatedIconDefaultBox;","import styled from \"styled-components\";\nimport {CssRule} from \"../../../themes/architecture/css-helpers/css-rule\";\n\nexport const FreeToPlayAnimatedIconDefaultBox = styled.div<{isBottomNavBarEnabled?: boolean}>`\n position: fixed;\n z-index: 4;\n bottom: 0;\n right: 0; \n width: 150px;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 130px;\n bottom: ${props => props.isBottomNavBarEnabled ? \"calc(env(safe-area-inset-bottom) + 50px)\" : \"env(safe-area-inset-bottom)\"}\n } \n \n ${CssRule.For.hybrid.not.miniOrbit.build()} & {\n bottom: calc(env(safe-area-inset-bottom) + 53px);\n }\n`;\n","import styled from \"styled-components\";\nimport {CssRule} from \"../../../themes/architecture/css-helpers/css-rule\";\n\nexport const FreeToPlayClickBox = styled.div`\n position: fixed;\n cursor: pointer;\n z-index: 5;\n bottom: 0;\n right: 0;\n width: 150px;\n height: 123px;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 130px;\n height: 106px;\n } \n \n ${CssRule.For.hybrid.not.miniOrbit.build()} & {\n bottom: calc(env(safe-area-inset-bottom) + 53px);\n }\n`","import {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport * as React from \"react\";\nimport {FreeToPlayAnimatedIconBox} from \"./boxes/free-to-play-animated-icon.box\";\nimport {AnimatedIconObservableTarget, AnimatedIconUnloadReason, IAnimatedIconRequestOptions} from \"../../services/pixi-app/animated-icon-base-service.service\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ISendElasticEventOptions} from \"../../services/analytics/analytics.service.interface\";\nimport {FreeToPlayClickBox} from \"./boxes/free-to-play-click.box\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\n\ninterface FreeToPlayAnimatedIconComponentProps extends ComponentServicesPick<'bottomNavigationBar'> {\n\n}\n\nconst ComponentBody = observer(class FreeToPlayAnimatedIconComponent extends OrbitComponent {\n private iconRequestOptions = {\n jsonUrl: this.services.theme.currentTheme.images.f2p.freeToPlay.toString(),\n size: {\n width: 445,\n height: 364\n },\n timings: {\n delay: 2000,\n interval: 3000\n }\n };\n\n private iconObservableTarget: AnimatedIconObservableTarget | undefined;\n\n private _captureElementRefForIcon(element: HTMLElement | null) {\n // if element is null (the component was unmounted) or the element changed, then check if we have a currently running/loading animation and remove it\n if (!element || (this.iconObservableTarget && this.iconObservableTarget.wrapper !== element)) {\n // if the current animation is loading, cancel it\n // if the current animation is already running, stop and dispose it\n // animation disposer do both things, abort if loading, dispose if running\n if (this.iconObservableTarget && this.iconObservableTarget.animationDisposer) {\n this.iconObservableTarget.animationDisposer(AnimatedIconUnloadReason.REQUESTED);\n }\n }\n // if the element exists and is different from the previous one, then the animation must be started\n if (element && (!this.iconObservableTarget || this.iconObservableTarget.wrapper !== element)) {\n let requestOptions: Omit = this.iconRequestOptions;\n // update the reference\n this.iconObservableTarget = {\n ...requestOptions,\n wrapper: element\n };\n this.services.freeToPlay.loadFreeToPlayAnimation(this.iconObservableTarget);\n }\n // if element is null just update the reference so we know next time the capture is ran\n if (!element) {\n this.iconObservableTarget = undefined;\n }\n }\n\n componentDidUpdate() {\n if (this.services.freeToPlay.isPromotionEligible) {\n this._sendAnalytics(\"SHOW\");\n }\n }\n\n render() {\n if (!this.services.freeToPlay.isPromotionEligible) {\n return null;\n }\n\n // Hide UI of the widget but keep Functionality\n if (!this.services.freeToPlay.shouldShowIcon) {\n return null;\n }\n\n if (this.services.freeToPlay.isPromotionOpened) {\n return null;\n }\n\n return (\n <>\n \n this._openBonusWheel()} />\n \n );\n }\n\n private _openBonusWheel = async () => {\n this._sendAnalytics(\"CLICK\");\n await this.services.freeToPlay.showPromotion({\n channel: {\n area: AreaType.button,\n source: CHANNEL_SOURCE.casinoClient,\n element: CHANNEL_ELEMENTS.floatingIcon\n }\n }\n );\n }\n\n private _sendAnalytics(action: string) {\n try {\n let options: ISendElasticEventOptions = {\n action: action,\n category: \"Floating_icon\",\n eventType: \"bonus_widget\",\n appID: \"F2P\",\n customData: {\n location: this.services.location.isHomePage ? 'homepage' : this.services.location.currentUri.pathName.toString(),\n segmentation: this.services.user.playerRMSStatus\n }\n };\n this.services.analytics.sendElasticInfoEvent(options, true);\n }\n catch (err) {\n console.log(\"Floating_icon \" + action + \" analytics report failed with error: \" + err);\n }\n }\n});\n\nexport const FreeToPlayAnimatedIconComponent = withServices(ComponentBody, ['bottomNavigationBar']);\n","import styled from \"styled-components\";\n\nexport const GamblingSessionMessageBaseBox = styled.div`\n text-align: center;\n padding-bottom: 10px;\n font-weight: 700;\n`","import {TimeSpan} from \"@sparkware/app-utils\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {DividerBox} from \"../../../basic-ui-components/layout/divider/divider.box\";\nimport {SpacerBox} from \"../../../basic-ui-components/layout/spacer.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport {GamblingSessionMessageBaseBox} from \"../boxes/gambling-session-message.box\";\nimport {GamblingSessionLimitSummaryBox} from \"../session-info/boxes/gambling-session-limits-summary.box\";\nimport {GamblingSessionInfoComponent} from \"../session-info/gambling-session-info.component\";\n\nexport enum LimitType {\n Loss,\n Time,\n IntervalReminder\n}\n\ninterface IGamblingSessionLimitReachedComponentProps {\n sessionDuration: TimeSpan;\n limitType: LimitType;\n totalBets: number;\n totalWins: number;\n dialogHandler: IModalDialogHandler;\n\n sessionLimitTimestamp: string;\n}\n\nexport const GamblingSessionLimitReachedComponent: React.FC = (props) => {\n const services = useServices();\n let mainTextKey = \"GAMBLING_SESSION_INTERVAL_REMINDER_TEXT\";\n if (props.limitType === LimitType.Loss) {\n mainTextKey = 'GAMBLING_SESSION_LOSS_LIMIT_REACHED_TEXT';\n }\n if (props.limitType === LimitType.Time) {\n mainTextKey = 'GAMBLING_SESSION_TIME_LIMIT_REACHED_TEXT';\n }\n return (\n \n \n { services.translation.translate(mainTextKey, {\n gamblingSessionLimitTimestamp: props.sessionLimitTimestamp\n }) }\n \n \n \n\n \n\n
\n \n
\n\n
\n );\n};","import {TimeSpan} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {SpacerBox} from \"../../../basic-ui-components/layout/spacer.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport {ModalDialogActionsComponent} from \"../../modal-dialog/modal-dialog-actions.component\";\nimport {GamblingSessionLimitSummaryBox} from \"../session-info/boxes/gambling-session-limits-summary.box\";\nimport {GamblingSessionInfoComponent} from \"../session-info/gambling-session-info.component\";\n\ninterface IGamblingSessionLogoutDialogProps {\n dialogHandler: IModalDialogHandler;\n sessionDuration: TimeSpan;\n totalBets: number;\n totalWins: number;\n onLogout(): void;\n onCancel(): void;\n}\n\nexport const GamblingSessionLogoutDialog: React.FC = (props) => {\n const services = useServices();\n return (\n \n \n\n \n\n \n\n \n );\n}","import styled from \"styled-components\";\n\nexport const GamblingSessionLimitSummaryBox = styled.div`\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding: 15px;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n width: 600px;\n }\n`","import styled from \"styled-components\";\nimport {dialogHighlightedTextMixin, dialogTextMixin} from \"../../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const GamblingSessionInfoWrapperBox = styled.div`\n margin-bottom: 1.5rem;\n`;\n\nexport const GamblingSessionInfoTextBox = styled.div`\n ${dialogTextMixin}\n`;\n\nexport const GamblingSessionInfoValueBox = styled.div`\n ${dialogHighlightedTextMixin}\n`;\n","import React from 'react';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {GamblingSessionInfoTextBox, GamblingSessionInfoValueBox, GamblingSessionInfoWrapperBox} from \"./boxes/gambling-session-info.box\";\n\ninterface IGamblingSessionInfoProps {\n sessionDuration: TimeSpan;\n totalBets: number;\n totalWins: number;\n}\n\nexport const GamblingSessionInfoComponent: React.FC = (props) => {\n const services = useServices();\n return (<>\n \n {services.translation.translate(\"GAMBLING_SESSION_DATA_DURATION\")}\n {props.sessionDuration.toHoursAndMinutesString()}\n \n\n \n {services.translation.translate(\"GAMBLING_SESSION_DATA_WIN_LOSS_SUMMARY\")}\n {services.currency.formatMoney(props.totalWins - props.totalBets)}\n \n\n \n {services.translation.translate(\"GAMBLING_SESSION_DATA_TOTAL_BETS\")}\n {services.currency.formatMoney(props.totalBets)}\n \n );\n}","import styled from \"styled-components\";\n\nexport const GamblingSessionLimitsBox = styled.div`\n font-size: 1.275rem;\n line-height: 1.7rem;\n padding: 15px;\n @media ${({theme}) => theme.mediaQuery.sAndAbove} {\n max-width: 600px;\n }\n`","import styled from \"styled-components\";\n\nexport const DropDownsGroupBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n margin: 20px 0 15px 0;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n flex-direction: column;\n }\n \n`","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {DropDownComponent, DropDownItem, IDropDownSelectionResult} from \"./drop-down.component\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {parseCommaSeparatedNumbers} from \"../../../../../utils/string-helpers\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\ninterface LossLimitDropDownComponentProps {\n onItemSelected: (value: NullableNumber) => void;\n errorMessage?: string;\n}\n\nexport const LossLimitDropDownComponent = observer(\n class LossLimitDropDownComponent extends OrbitComponent {\n\n private _getLossLimits(): DropDownItem[] {\n let bankroll = this.services.walletProxy.totalBankroll;\n\n const translateLossLimit = (percent: number, lossAmount: number): string => {\n return this.services.translation.translate('GAMBLING_SESSION_LOSS_LIMIT_VALUE', {\n percent: percent,\n loss: this.services.currency.formatMoney(lossAmount)\n })\n }\n\n if (bankroll < 100) {\n return [\n {\n value: bankroll,\n text: translateLossLimit(100, bankroll)\n }\n ]\n }\n\n const percentages = parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.LossLimitPercentages);\n\n return percentages.map(p => {\n return {\n percent: p,\n value: Math.floor(p * bankroll / 100)\n }\n }).filter(lossLimit => lossLimit.value >= 100)\n .map(lossLimit => {\n return {\n value: lossLimit.value,\n text: translateLossLimit(lossLimit.percent, lossLimit.value)\n }\n });\n }\n\n private _onItemSelectedHandler = async (value: NullableNumber): Promise => {\n this.props.onItemSelected(value);\n return {\n cancel: false\n };\n }\n\n render() {\n return (\n \n );\n }\n }\n);","import {ITranslationService} from \"./translation.service.interface\";\n\nexport class TranslationsHelper {\n constructor(private readonly translation: ITranslationService) {\n }\n\n minutes(value: number): string {\n if (value === 1) {\n return this.translation.translate('ONE_MINUTE');\n }\n return this.translation.translate('X_MINUTES', {x: value});\n }\n\n hours(value: number): string {\n if(value === 1) {\n return this.translation.translate('ONE_HOUR');\n }\n return this.translation.translate('X_HOURS', {x: value});\n }\n\n days(value: number): string {\n\n if(value === 1) {\n return this.translation.translate('ONE_DAY');\n }\n return this.translation.translate('X_DAYS', {x: value});\n }\n\n week(): string {\n return this.translation.translate('ONE_WEEK');\n }\n\n month(): string {\n return this.translation.translate('ONE_MONTH');\n }\n}","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {DropDownComponent, DropDownItem, IDropDownSelectionResult} from \"./drop-down.component\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {TranslationsHelper} from \"../../../../services/translation/translations-helper\";\nimport {parseCommaSeparatedNumbers} from \"../../../../../utils/string-helpers\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {DialogButtonClickHandleResultEnum} from \"../../../../services/dialog/dialog.service.interface\";\n\ninterface TimeLimitDropDownComponentProps {\n onItemSelected: (value: NullableNumber) => void;\n errorMessage?: string;\n className?: string;\n}\n\nexport const TimeLimitDropDownComponent = observer(\n class TimeLimitDropDownComponent extends OrbitComponent {\n\n private get _translations(): TranslationsHelper {\n return new TranslationsHelper(this.services.translation);\n }\n\n private _translateTimeSpan(timeSpan: TimeSpan): string {\n return timeSpan.totalMinutes < 60 ? this._translations.minutes(timeSpan.totalMinutes) : this._translations.hours(timeSpan.totalHours)\n }\n\n private _parseMaxDurations(): number[] {\n if(this.services.device.os.isMobileOS) {\n return parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.MaxDurationsInMinutesForMobile);\n } else {\n return parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.MaxDurationsInMinutesForPC);\n }\n }\n\n private _getDropDownItems(): DropDownItem[] {\n return this._parseMaxDurations().map(minutes => {\n const timeSpan = TimeSpan.fromMinutes(minutes);\n return {\n value: timeSpan.totalSeconds,\n text: this._translateTimeSpan(timeSpan)\n };\n });\n }\n private _onItemSelectedHandler = (value: NullableNumber): Promise => {\n return new Promise((resolve) => {\n\n const cancelSelection = () => {\n resolve({\n cancel: true\n });\n }\n\n const acceptSelection = () => {\n resolve({\n cancel: false\n });\n this.props.onItemSelected(value);\n }\n\n if(Check.isNullOrUndefined(value) || value !== Math.min(...this._parseMaxDurations())) {\n acceptSelection();\n } else {\n this.services.dialog.showSimpleTextModal({\n hideCloseButton: true,\n title: this.services.translation.translate('ATTENTION'),\n text: this.services.translation.translate('GAMBLING_SESSION_LIMIT_TIME_LOSS_CONFIRMATION_TEXT', {time: this._translateTimeSpan(TimeSpan.fromMinutes(value))})\n + '\\n\\n\\n'\n + this.services.translation.translate('GAMBLING_SESSION_LIMIT_TIME_LOSS_CONFIRMATION_QUESTION'),\n\n buttons: [\n {\n text: this.services.translation.translate('NO'),\n buttonPreset: 'info',\n onClick: async () => {\n cancelSelection();\n this.services.analytics.sendAnalytics('spain_limit_window_minimal_time_message', 'no');\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n },\n {\n text: this.services.translation.translate('YES'),\n buttonPreset: 'info',\n onClick: async () => {\n acceptSelection();\n this.services.analytics.sendAnalytics('spain_limit_window_minimal_time_message', 'yes');\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ]\n })\n }\n\n\n });\n }\n\n render() {\n return (\n \n );\n }\n }\n);","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {TranslationsHelper} from \"../../../../services/translation/translations-helper\";\nimport {DropDownComponent, DropDownItem, IDropDownSelectionResult} from \"./drop-down.component\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {parseCommaSeparatedNumbers} from \"../../../../../utils/string-helpers\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\ninterface IntervalReminderDropDownComponentProps {\n onItemSelected: (value: NullableNumber) => void;\n}\n\nexport const IntervalReminderDropDownComponent = observer(\n class IntervalReminderDropDownComponent extends OrbitComponent {\n\n private get _translations(): TranslationsHelper {\n return new TranslationsHelper(this.services.translation);\n }\n\n private _getReminderIntervals(): DropDownItem[] {\n const values = parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.IntervalReminderInMinutes)\n .map(minutes => TimeSpan.fromMinutes(minutes))\n return values.map(val => {\n return {\n value: val.totalSeconds,\n text: val.totalMinutes < 60 ? this._translations.minutes(val.totalMinutes) : this._translations.hours(val.totalHours)\n };\n });\n }\n\n private _onItemSelectedHandler = async (value: NullableNumber): Promise => {\n this.props.onItemSelected(value);\n return {\n cancel: false\n };\n }\n\n render() {\n return (\n \n );\n }\n }\n);","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {DropDownComponent, DropDownItem, IDropDownSelectionResult} from \"./drop-down.component\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {TranslationsHelper} from \"../../../../services/translation/translations-helper\";\nimport {parseCommaSeparatedNumbers} from \"../../../../../utils/string-helpers\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {DialogButtonClickHandleResultEnum} from \"../../../../services/dialog/dialog.service.interface\";\n\n\ninterface RestrictionPeriodsDropDownComponentProps {\n onItemSelected: (value: NullableNumber) => void;\n}\n\nexport const RestrictionPeriodsDropDownComponent = observer(\n class RestrictionPeriodsDropDownComponent extends OrbitComponent {\n\n private get _translations(): TranslationsHelper {\n return new TranslationsHelper(this.services.translation);\n }\n\n private _translateTimeSpan = (time: TimeSpan): string => {\n if(time.totalMinutes < 60) {\n return this._translations.minutes(time.totalMinutes);\n }\n\n if(time.totalHours < 24) {\n return this._translations.hours(time.totalHours);\n }\n\n if(time.totalDays === 7) {\n return this._translations.week();\n }\n\n if(time.totalDays === 30 || time.totalDays === 31) {\n return this._translations.month();\n }\n\n return this._translations.days(time.totalDays);\n }\n\n private _getReminderIntervals(): DropDownItem[] {\n const values = parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.RestrictionPeriodsInMinutes)\n .map(minutes => TimeSpan.fromMinutes(minutes))\n return values.map(val => {\n return {\n value: val.totalSeconds,\n text: this.services.translation.translate('GAMBLING_SESSION_LIMIT_RESTRICTION_PERIOD_VALUE',{time: this._translateTimeSpan(val)})\n };\n });\n }\n\n private _onItemSelectedHandler = (value: NullableNumber): Promise => {\n return new Promise((resolve) => {\n\n const cancelSelection = () => {\n resolve({\n cancel: true,\n overrideValueOnCancel: null\n });\n this.props.onItemSelected(null);\n }\n\n const acceptSelection = () => {\n resolve({\n cancel: false\n });\n this.props.onItemSelected(value);\n }\n\n if(Check.isNullOrUndefined(value)) {\n acceptSelection();\n this.props.onItemSelected(value);\n } else {\n this.services.dialog.showSimpleTextModal({\n hideCloseButton: true,\n title: this.services.translation.translate('ATTENTION'),\n text: this.services.translation.translate('GAMBLING_SESSION_LIMIT_RESTRICTION_BLOCK_CONFIRMATION_TEXT', {time: this._translateTimeSpan(TimeSpan.fromSeconds(value))})\n + '\\n\\n\\n'\n + this.services.translation.translate('GAMBLING_SESSION_LIMIT_RESTRICTION_BLOCK_CONFIRMATION_QUESTION'),\n\n buttons: [\n {\n text: this.services.translation.translate('NO'),\n buttonPreset: 'info',\n onClick: async () => {\n cancelSelection();\n // TODO: SPAIN_DECREE - change analytics\n this.services.analytics.sendAnalytics('spain_limit_window_minimal_time_message', 'no');\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n },\n {\n text: this.services.translation.translate('YES'),\n buttonPreset: 'info',\n onClick: async () => {\n acceptSelection();\n // TODO: SPAIN_DECREE - change analytics\n this.services.analytics.sendAnalytics('spain_limit_window_minimal_time_message', 'yes');\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n\n ]\n })\n }\n\n\n });\n }\n\n render() {\n return (\n \n );\n }\n }\n);","import styled from \"styled-components\";\n\nexport const FooterBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n`","import styled from \"styled-components\";\n\n\nexport const DropDownsSeparatorBox = styled.div`\n width: 50px;\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n display: none;\n }\n`;\n","export const GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK = 'gambling-session-limits-responsible-gaming-link';","import styled from \"styled-components\";\nimport {GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK} from \"../css-constants\";\n\nexport const RegulatoryTextBox = styled.div`\n color: ${props => props.theme.colors.textMiddleDark};\n font-size: 1.3rem;\n white-space: pre-line;\n padding-top: 15px;\n \n \n > .${GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK} {\n color: ${props => props.theme.colors.brandPrimary};\n text-decoration-line: underline;\n }\n`","import styled from \"styled-components\";\nimport {GamblingSessionMessageBaseBox} from \"../../boxes/gambling-session-message.box\";\n\nexport const GamblingSessionMessageBox = styled(GamblingSessionMessageBaseBox)`\n max-width: 250px;\n margin: 0 auto;\n`;\n","import styled from \"styled-components\";\nimport {GamblingSessionMessageBaseBox} from \"../../boxes/gambling-session-message.box\";\n\nexport const GamblingSessionWarnMessageBox = styled(GamblingSessionMessageBaseBox)`\n color: ${({theme}) => theme.colors.buttonWarning};\n text-transform: uppercase;\n`","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {GamblingSessionLimitsBox} from \"./boxes/gambling-session-limits.box\";\nimport {IGamblingSessionLimitsSetup} from '../../../services/gambling-session/gambling-session-limits-setup.interface';\nimport {IModalDialogHandler} from '../../../services/dialog/dialog.service.interface';\nimport {DropDownsGroupBox} from \"./boxes/drop-downs-group.box\";\nimport {NullableNumber, NullableString} from '../../../../common/types/nullable-types';\nimport {OrbitComponentWithState} from '../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {LossLimitDropDownComponent} from \"./parts/loss-limit-drop-down.component\";\nimport {TimeLimitDropDownComponent} from \"./parts/time-limit-drop-down.component\";\nimport {IntervalReminderDropDownComponent} from \"./parts/interval-reminder-drop-down.component\";\nimport {RestrictionPeriodsDropDownComponent} from \"./parts/restriction-periods-drop-down.component\";\nimport {FooterBox} from \"./boxes/footer.box\";\nimport {Button} from '../../../basic-ui-components/button/base/button.component';\nimport {parseCommaSeparatedNumbers} from '../../../../utils/string-helpers';\nimport {DropDownsSeparatorBox} from \"./boxes/drop-downs-separator.box\";\nimport {RegulatoryTextBox} from \"./boxes/regulatory-text.box\";\nimport {GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK} from './css-constants';\nimport {GamblingSessionMessageBox} from './boxes/gambling-session-message.box';\nimport {GamblingSessionWarnMessageBox} from './boxes/gambling-session-warn-message.box';\nimport {DividerBox} from '../../../basic-ui-components/layout/divider/divider.box';\nimport {CyClass} from \"../../../../common/cy-classes\";\n\ninterface IGamblingSessionSetupProps {\n onSetLimits: (gameLimits: IGamblingSessionLimitsSetup) => void;\n dialogHandler: IModalDialogHandler;\n lastBetActivity?: NullableString;\n}\n\ninterface IGamblingSessionLimitsInternalData {\n lossLimitAmount: number;\n sessionDurationLimit: number;\n reminderInterval: number;\n restrictionPeriod?: number;\n}\n\ninterface IGamblingSessionSetupState {\n selectedLimits: Partial;\n isValidationEnabled: boolean;\n lossLimitsErrorMessage: NullableString;\n timeLimitsErrorMessage: NullableString;\n}\n\n\n\n@observer\nexport class GamblingSessionSetupComponent extends OrbitComponentWithState {\n\n constructor(props: IGamblingSessionSetupProps) {\n super(props);\n this.state = {\n selectedLimits: {},\n isValidationEnabled: false,\n lossLimitsErrorMessage: null,\n timeLimitsErrorMessage: null\n }\n }\n\n private _onAfterValidationEnabled = () => {\n\n if(!this._performValidation()) {\n return;\n }\n\n this.props.dialogHandler.close();\n\n let intervalReminder = this.state.selectedLimits.reminderInterval;\n if(Check.isNullOrUndefined(intervalReminder)) {\n intervalReminder = TimeSpan.fromMinutes(parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.IntervalReminderInMinutes)[0]).totalSeconds;\n }\n\n this.props.onSetLimits({\n lossLimitAmount: this.state.selectedLimits.lossLimitAmount,\n sessionDurationLimit: TimeSpan.fromSeconds(this.state.selectedLimits.sessionDurationLimit),\n reminderInterval: TimeSpan.fromSeconds(intervalReminder),\n restrictionPeriod: TimeSpan.fromSeconds(this.state.selectedLimits.restrictionPeriod)\n });\n }\n\n private _onContinue = () => {\n\n this.setState({\n isValidationEnabled: true\n }, () => this._onAfterValidationEnabled());\n\n }\n\n private _performValidation(): boolean {\n if(!this.state.isValidationEnabled) {\n return true;\n }\n\n const errorMessages: Pick = {\n lossLimitsErrorMessage: null,\n timeLimitsErrorMessage: null\n };\n\n if(Check.isNullOrUndefined(this.state.selectedLimits.lossLimitAmount)) {\n errorMessages.lossLimitsErrorMessage = this.services.translation.translate('GAMBLING_SESSION_LOSS_LIMIT_REQUIRED_ERROR');\n }\n\n if(Check.isNullOrUndefined(this.state.selectedLimits.sessionDurationLimit)) {\n errorMessages.timeLimitsErrorMessage = this.services.translation.translate('GAMBLING_SESSION_TIME_LIMIT_REQUIRED_ERROR');\n }\n\n this.setState({\n ...this.state,\n ...errorMessages\n });\n\n return !Boolean(errorMessages.lossLimitsErrorMessage || errorMessages.timeLimitsErrorMessage);\n }\n\n private _onTimeLimitSelected = (value: NullableNumber) => {\n this.setState({\n selectedLimits: {\n ...this.state.selectedLimits,\n sessionDurationLimit: value ? value : null\n }\n }, () => this._performValidation());\n\n\n }\n\n private _onGameLimitSelected = (value: NullableNumber) => {\n this.setState({\n selectedLimits: {\n ...this.state.selectedLimits,\n lossLimitAmount: value\n }\n }, () => this._performValidation());\n }\n\n private _onIntervalReminderSelected = (value: NullableNumber) => {\n this.setState({\n selectedLimits: {\n ...this.state.selectedLimits,\n reminderInterval: value ? value : null\n }\n });\n }\n\n private _onRestrictionPeriodSelected = (value: NullableNumber) => {\n this.setState({\n selectedLimits: {\n ...this.state.selectedLimits,\n restrictionPeriod: value ? value : null\n }\n });\n }\n\n private _getRegulatoryText() {\n const responsibleGamingLinkText = this.services.translation.translate('GAMBLING_SESSION_LIMIT_RESPONSIBLE_GAMING_LINK');\n return this.services.translation.translate('GAMBLING_SESSION_LIMIT_REGULATORY_TEXT', {\n responsibleGamblingLink: `${responsibleGamingLinkText}`\n });\n }\n\n private _captureRegulatoryTextElement = (element: HTMLElement) => {\n const linkElement = element?.querySelector(`.${GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK}`);\n linkElement?.addEventListener('click', () => {\n this.services.linksNavigation.openResponsibleGaming();\n })\n }\n\n render() {\n return (\n \n \n {this.services.translation.translate('GAMBLING_SESSION_MESSAGE')}\n \n \n {this.services.translation.translate('GAMBLING_SESSION_WARN_MESSAGE')}\n \n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n\n \n { this.props.lastBetActivity &&\n {this.services.translation.translate('GAMBLING_SESSION_LAST_BET', {lastBetDate: this.props.lastBetActivity})}\n }\n \n\n \n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const DropDownContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`","import styled from \"styled-components\";\n\nexport const ErrorMessageBox = styled.div<{visible: boolean}>`\n color: ${props => props.theme.colors.danger};\n visibility: ${props => props.visible ? 'visible' : 'hidden'};\n min-height: 17px;\n padding: 0 0 0 4px;\n`","import styled from \"styled-components\";\n\nexport const DropDownLabelBox = styled.label`\n padding: 0 0 7px 0;\n`","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {DropDownContainerBox} from \"../boxes/drop-down-container.box\";\nimport {ErrorMessageBox} from \"../boxes/error-message.box\";\nimport {DropDownLabelBox} from \"../boxes/drop-down-label.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {Select} from \"../../../../basic-ui-components/form/select.component\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {OrbitComponentWithState} from \"../../../base-components/orbit-component-with-state/orbit-component-with-state\";\n\nexport interface DropDownItem {\n value: NullableNumber;\n text: string;\n}\n\nexport interface IDropDownSelectionResult {\n cancel: boolean;\n overrideValueOnCancel?: NullableNumber;\n}\n\ninterface SpainGameLimitDropDownComponentProps {\n label: string;\n items: DropDownItem[];\n nullItemText?: string;\n onItemSelected: (value: NullableNumber) => Promise;\n errorMessage?: string;\n className?: string;\n}\n\ninterface SpainGameLimitDropDownComponentState {\n selectedOption: NullableNumber;\n}\n\n@observer\nexport class DropDownComponent extends OrbitComponentWithState {\n constructor(props: SpainGameLimitDropDownComponentProps) {\n super(props);\n this.state = {\n selectedOption: null\n };\n }\n\n private _onChange = async (eventData: any) => {\n let value: NullableNumber = null;\n if(eventData.target.value !== \"0\") {\n value = parseInt(eventData.target.value);\n }\n\n const selectionResult = await this.props.onItemSelected(value);\n if(selectionResult.cancel) {\n if(Check.isUndefined(selectionResult.overrideValueOnCancel)) {\n this.setState({\n selectedOption: this.state.selectedOption\n });\n } else {\n this.setState({\n selectedOption: selectionResult.overrideValueOnCancel\n });\n }\n\n } else {\n this.setState({\n selectedOption: value\n });\n }\n }\n\n private _renderErrorMessage = () => {\n return (\n \n {this.props.errorMessage}\n \n );\n }\n\n render() {\n\n const items: DropDownItem[] = [...this.props.items];\n\n if(this.props.nullItemText) {\n items.splice(0, 0, {\n value: 0,\n text: this.props.nullItemText\n });\n }\n\n return (\n \n \n {this.props.label}\n \n \n {this._renderErrorMessage()}\n \n )\n }\n}","import styled from 'styled-components';\nimport { CssRule } from '../../../themes/architecture/css-helpers/css-rule';\n\nexport const GameItemImgWrapperBox = styled.div<{fixedWidth?: boolean}>`\n // cgp-game-item-img-wrapper\n display: flex;\n flex-direction: column;\n justify-content: center;\n position: relative;\n cursor: pointer;\n width: ${props => props.fixedWidth ? \"10rem\" : \"12rem\"};\n flex-shrink: 0;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: ${props => props.fixedWidth ? \"10rem\" : \"11.4rem\"};\n ${CssRule.For.iPhoneVer5.build()} {\n width: 6.5rem;\n background-position: center center;\n }\n }\n`;\n","import styled, { css } from 'styled-components';\nimport {FP_VOUCHER_TYPES} from \"../../../../common/const/free_play_consts\";\n\n\n\nexport const GameItemContainerBox = styled.div<{freePlayType?: FP_VOUCHER_TYPES; hide?: boolean;}>`\n // cgp-game-item-container\n display: ${({hide}) => hide ? \"none\" : \"flex\"};\n ${({freePlayType, theme}) => freePlayType ? css`\n width: 35.5rem;\n ` : \"\"}\n \n\n /* When also have cgp-game-item-fp class but is inside .idleRecommendation-layout apply width: 100% */\n .idleRecommendation-layout &.cgp-game-item-fp {\n width: 100%;\n }\n`;","import styled from 'styled-components';\n\nimport { OrbitTheme } from '../../../themes/architecture/orbit-theme.interface';\nimport {FP_VOUCHER_TYPES} from \"../../../../common/const/free_play_consts\";\n\nlet freePlayBgImage = (theme: OrbitTheme, freePlayType: FP_VOUCHER_TYPES) => {\n switch (freePlayType) {\n case FP_VOUCHER_TYPES.FreeSpin:\n return theme.images.freePlay.typeFS.toString();\n case FP_VOUCHER_TYPES.FreePlay:\n return theme.images.freePlay.typeFP.toString();\n case FP_VOUCHER_TYPES.FreeJackpotSpin:\n return theme.images.freePlay.typeJFS.toString();\n case FP_VOUCHER_TYPES.FreeJackpotPlay:\n return theme.images.freePlay.typeJFP.toString();\n default:\n return \"\";\n }\n}\n\nexport const GameItemFpThumbBox = styled.div<{freePlayType?: FP_VOUCHER_TYPES, useSquareIcons?: boolean}>`\n position: absolute;\n bottom: ${({useSquareIcons}) => useSquareIcons ? \"-1.5rem\": \"0.5rem\"};\n right: ${({useSquareIcons}) => useSquareIcons ? \"-1.5rem\": \"-0.5rem\"};\n display: ${({freePlayType}) => freePlayType ? \"block\": \"none\"};\n width: 3rem;\n height: 3rem;\n background-image: ${({theme, freePlayType}) => 'url(\"' + freePlayBgImage(theme, freePlayType) + '\")' };\n`;\n","import styled from 'styled-components';\n\nexport const GameItemDelimiterBox = styled.div`\n width: 2.5rem;\n margin-left: 2rem;\n background-size: cover;\n flex-shrink: 0;\n background-image: url(${props => '\"' + props.theme.images.verticalLineGlow.toString() + '\"'});\n /* Inside .idleRecommendation-layout apply: width: 1.5rem; */\n .idleRecommendation-layout & {\n width: 1.5rem;\n }\n`;","import styled from 'styled-components';\n\nexport const GameItemDetailsWrapperBox = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n flex-grow: 1;\n text-align: center;\n min-height: 16rem;\n`;\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const GameItemTitleBox = styledBox('GameItemTitleBox');","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const GameItemJackpotBox = styledBox('GameItemJackpotBox');\n","import styled from 'styled-components';\n\nexport const GameItemButtonsAreaBox = styled.div`\n margin-top: 0.5rem;\n`;\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {Button} from '../../basic-ui-components/button/base/button.component';\nimport {GameInfo} from '../../services/games/game-info';\nimport {GameItemComponentProps} from '../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/game-item.component-props';\nimport {GameItemContainerBox} from './boxes/game-item-container.box';\nimport {GameItemImgWrapperBox} from './boxes/game-item-img-wrapper.box';\nimport {GameItemFpThumbBox} from './boxes/game-item-fp-thumb.box';\n// import { GameItemThumbnailBox } from './boxes/game-item-thumbnail.box';\nimport {GameItemDelimiterBox} from './boxes/game-item-delimiter.box';\nimport {GameItemDetailsWrapperBox} from './boxes/game-item-details-wrapper.box';\nimport {GameItemTitleBox} from './boxes/game-item-title.box';\nimport {GameItemJackpotBox} from './boxes/game-item-jackpot.box';\nimport {GameItemButtonsAreaBox} from './boxes/game-item-buttons-area.box';\nimport {GameImageComponent} from '../single-game/common/parts/game-image/game-image.component';\nimport {GameJackpotComponent} from \"../game-jackpot/game-jackpot.component\";\n\n/**\n * This component (used for idle-recommendation toaster)\n * may have roughly the same functionality and/or visual\n * as game-popup.component.tsx\n * TODO: Maybe make a common component\n */\nexport class GameItemComponent extends OrbitComponent {\n render() {\n let playBtnText = this.props.playBtnText || this.services.translation.translate('PLAY');\n let gameInfo: GameInfo = this.services.games.gamesMap[this.props.gameType];\n\n return (\n \n \n {/* */}\n \n \n \n \n\n \n {gameInfo.title}\n \n \n \n \n \n \n \n \n )\n\n }\n}\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const GameJackpotBox = styledBox('GameJackpotBox');\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const GameJackpotValueBox = styledBox('GameJackpotValueBox');\n","import React from 'react';\nimport {GameJackpotBox} from \"./boxes/root/game-jackpot.box\";\nimport {GameJackpotValueBox} from \"./boxes/value/game-jackpot-value.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\n\nexport interface GameJackpotComponentProps extends ComponentServicesPick<'jackpots'> {\n gameType: number;\n className?: string;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const jackpotValue = props.jackpots.getGameJackpot(props.gameType);\n if(!jackpotValue) {\n return null;\n }\n\n return (\n\n \n \n {services.currency.formatMoney(jackpotValue)}\n \n \n );\n})\n\nexport const GameJackpotComponent = withServices(ComponentBody, ['jackpots']);","export const JACKPOT_WIDGET = 'daily-jackpot';\nexport const RED_TIGER_JACKPOT = 'red-tiger-jackpot';","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SearchTitleBox = styledBox(\"SearchTitleBox\");","import {NumberOfResultsDefaultBox} from \"./number-of-results.default.box\";\n\nexport const NumberOfResultsBox = NumberOfResultsDefaultBox;","import styled from \"styled-components\";\n\nexport const NumberOfResultsDefaultBox = styled.span`\n margin: 0 0 0 1rem;\n color: ${props => props.theme.colors.brandPrimary};\n font-size: 1.5rem;\n`;","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {SearchTitleBox} from \"./boxes/search-title-box/search-title.box\";\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {Check} from \"@sparkware/app-utils\";\nimport {NumberOfResultsBox} from \"./boxes/number-of-results-box/number-of-results.box\";\n\nexport interface SearchBoxTitleComponentProps {\n title: string;\n numberOfResults?: number;\n}\n\nexport class SearchBoxTitleComponent extends OrbitComponent {\n private _renderNumberOfResults = () => {\n if (Check.isNumber(this.props.numberOfResults)) {\n return ({this.props.numberOfResults});\n }\n return null;\n }\n\n render() {\n return (\n \n {this.services.translation.translate(this.props.title)}\n {this._renderNumberOfResults()}\n \n )\n }\n}\n","import styled from \"styled-components\";\n\nexport const SearchGamesListBox = styled.div`\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n`;\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SearchNoGamesFoundBox = styledBox(\"SearchNoGamesFoundBox\");","import styled from \"styled-components\";\n\nexport const SearchGameItemBox = styled.div`\n width: calc(100% / 3);\n padding-right: 3px;\n display: flex;\n flex-direction: column;\n cursor: pointer;\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const SearchMatchBox = styledBox('SearchMatchBox');","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {SearchMatchBox} from \"./boxes/search-match.box\";\nimport {removeSpecialCharacters} from \"../../../../../utils/string-helpers\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface HighlightSearchListItemComponentProps extends ComponentServicesPick<'gameSearch'>{\n nameOfTheGame: string;\n}\n\nconst ComponentBody: React.FC = observer(props => {\n\n let searchText = removeSpecialCharacters(props.gameSearch.currentSearchText).toLowerCase();\n const gameName = props.nameOfTheGame\n if(!searchText) {\n return (\n <>{gameName}\n );\n }\n\n let index = removeSpecialCharacters(gameName).toLowerCase().indexOf(searchText);\n if(index < 0) {\n return (\n <>{gameName}\n );\n }\n\n const beforeHighlightText = gameName.substring(0, index);\n let highlightText = gameName.substring(index, index + searchText.length);\n // Found how many special characters we have in this string\n const numberOfSpecialCharacters = highlightText.length - removeSpecialCharacters(highlightText).length;\n highlightText = gameName.substring(index, index + searchText.length + numberOfSpecialCharacters);\n\n const afterHighlightText = gameName.substring(index + searchText.length + numberOfSpecialCharacters);\n\n return (\n <>\n {beforeHighlightText}{highlightText}{afterHighlightText}\n \n )\n})\n\nexport const HighlightSearchListItemComponent = withServices(ComponentBody, ['gameSearch'])","import styled from \"styled-components\";\n\nexport const SearchTextWrapperBox = styled.div`\n text-align: center;\n margin-bottom: 0.5rem;\n`;\n","import styled from \"styled-components\";\n\nexport const SearchGameImageBox = styled.div`\n border-radius: 15px;\n overflow: hidden;\n`;\n","import React from 'react';\nimport { observer } from 'mobx-react';\nimport { SearchGameItemBox } from './boxes/search-game-item/search-game-item.box';\nimport { ISearchSuggestion } from '../../../../services/game-search/game-search-result';\nimport { GameImageComponent } from '../../../single-game/common/parts/game-image/game-image.component';\nimport { HighlightSearchListItemComponent } from '../highlight-search-list-item/highlight-search-list-item.component';\nimport { SearchTextWrapperBox } from './boxes/search-text-wrapper/search-text-wrapper.box';\nimport {SearchGameImageBox} from \"./boxes/search-game-image-box/search-game-image.box\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\n\nexport interface SearchGameItemComponentProps extends ComponentServicesPick<'sideMenu' | 'gameSearch'>{\n searchSuggestion: ISearchSuggestion;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const _onClickHandler = async () => {\n await props.gameSearch.closeSearchResult();\n (await services.userMenu).closeMenu();\n await props.sideMenu.closeMobileMenu();\n await props.searchSuggestion.executeAction();\n };\n\n return (\n \n \n \n \n \n \n \n \n );\n})\n\nexport const SearchGameItemComponent = withServices(ComponentBody, ['sideMenu', 'gameSearch']);\n","import React from 'react';\nimport { OrbitComponent } from '../../../base-components/orbit-component/orbit-component';\nimport { SearchBoxTitleComponent } from '../search-box-title/search-box-title.component';\nimport { ISearchSuggestion } from '../../../../services/game-search/game-search-result';\nimport { observer } from 'mobx-react';\nimport { CyClass } from '../../../../../common/cy-classes';\nimport { SearchGameItemComponent } from '../search-game-item/search-game-item.component';\nimport { SearchGamesListBox } from '../found-games/boxes/search-games-list/search-games-list.box';\n\nexport interface SuggestedGamesComponentProps {\n items: ISearchSuggestion[];\n}\n\nexport const SuggestedGamesComponent = observer(\n class SuggestedGamesComponent extends OrbitComponent {\n\n private _renderGame(suggestedCategory: ISearchSuggestion) {\n return (\n \n )\n }\n\n private _renderGames() {\n return (\n \n { this.props.items.map(suggestedCategory => this._renderGame(suggestedCategory)) }\n \n );\n }\n\n render() {\n if (this.props.items.length === 0) {\n return null;\n }\n\n return (\n \n \n {this._renderGames()}\n \n )\n }\n }\n);\n","import styled from \"styled-components\";\n\nexport const MoreGamesBox = styled.div<{shouldDisplay: boolean}>`\n display: ${props => props.shouldDisplay ? \"block\" : \"none\"};\n width: 100%;\n padding: 3px 1rem;\n`;\n","import React from 'react';\nimport { SearchBoxTitleComponent } from '../search-box-title/search-box-title.component';\nimport { ISearchSuggestion } from '../../../../services/game-search/game-search-result';\nimport { observer } from 'mobx-react';\nimport { SearchGamesListBox } from \"./boxes/search-games-list/search-games-list.box\";\nimport { SearchNoGamesFoundBox } from \"./boxes/search-no-game-found/search-no-games-found.box\";\nimport { CyClass } from \"../../../../../common/cy-classes\";\nimport { SearchGameItemComponent } from '../search-game-item/search-game-item.component';\nimport { SuggestedGamesComponent } from '../suggested-games/suggested-games.component';\nimport { Button } from '../../../../basic-ui-components/button/base/button.component';\nimport { MoreGamesBox } from './boxes/more-games/more-games.box';\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface FoundGamesComponentProps extends ComponentServicesPick<'gameSearch'> {\n loadedGamesCount: number;\n onLoadMore: () => void;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const _renderGame = (suggestedGame: ISearchSuggestion) => {\n return (\n \n );\n }\n\n const hasMoreItems = props.loadedGamesCount < props.gameSearch.searchResult.games.length;\n\n const _renderMoreGames = () => {\n if (services.device.os.isPC) {\n return null;\n }\n\n return (\n \n \n {services.translation.translate(\"MORE\")}\n \n \n );\n }\n\n const _renderFoundGames = () => {\n const gamesToRender = Math.min(props.loadedGamesCount, props.gameSearch.searchResult.games.length);\n return (\n \n {props.gameSearch.searchResult.games.slice(0, gamesToRender).map(suggestedGame => _renderGame(suggestedGame))}\n {_renderMoreGames()}\n \n );\n }\n\n const _renderNoSearchResultMessage = () => {\n return (\n <>\n \n {services.translation.translate('NO_SEARCH_RESULTS')}\n \n\n \n \n );\n }\n\n return (\n
\n \n { props.gameSearch.searchResult?.games?.length > 0 ?\n _renderFoundGames() :\n _renderNoSearchResultMessage()\n }\n
\n );\n})\n\nexport const FoundGamesComponent = withServices(ComponentBody, ['gameSearch']);","import {SearchResultItemDefaultBox} from \"./search-result-item.default.box\";\n\nexport const SearchResultItemBox = SearchResultItemDefaultBox;","import styled from \"styled-components\";\n\nexport const SearchResultItemDefaultBox = styled.li`\n list-style-type: none;\n \n &:hover {\n background-color: ${props => props.theme.colors.background};\n }\n`;","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const SlotsSearchLinkBox = styledBox('SlotsSearchLinkBox');\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveSearchLinkBox = styledBox('LiveSearchLinkBox');\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const CardAndTableSearchLinkBox = styledBox(\"CardAndTableSearchLinkBox\");","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const RegularSearchLinkBox = styledBox('RegularSearchLinkBox');\n","import React from 'react';\nimport {ISearchSuggestion} from '../../../../services/game-search/game-search-result';\nimport {HighlightSearchListItemComponent} from '../highlight-search-list-item/highlight-search-list-item.component';\nimport {observer} from 'mobx-react';\nimport {SearchResultItemBox} from \"./boxes/search-result-item-box/search-result-item.box\";\nimport {SlotsSearchLinkBox} from \"./boxes/search-links/slots-search-link/slots-search-link.box\";\nimport {LiveSearchLinkBox} from \"./boxes/search-links/live-search-link/live-search-link.box\";\nimport {CardAndTableSearchLinkBox} from \"./boxes/search-links/card-and-table-search-link/card-and-table-search-link.box\";\nimport {RegularSearchLinkBox} from \"./boxes/search-links/regular-search-link/regular-search-link.box\";\nimport {GAMES_CATEGORIES} from \"../../../../services/games/games-categories.enum\";\nimport {OrbitUserFlowAnalyticsCategory} from \"../../../../services/analytics/analytics.service.interface\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface SearchResultItemComponentProps extends ComponentServicesPick<'sideMenu' | 'gameSearch'>{\n searchSuggestion: ISearchSuggestion\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const _onClickHandler = async () => {\n await props.gameSearch.closeSearchResult();\n (await services.userMenu).closeMenu();\n await props.sideMenu.closeMobileMenu();\n await props.searchSuggestion.executeAction();\n services.analytics.sendOrbitUserFlowEvent(OrbitUserFlowAnalyticsCategory.Search, props.searchSuggestion.type, props.searchSuggestion.text);\n };\n\n const _renderSearchLinkBox = (iconStyle: string) => {\n switch(iconStyle) {\n case GAMES_CATEGORIES.SLOTS:\n return (\n \n \n \n );\n case GAMES_CATEGORIES.LIVE:\n return (\n \n \n \n );\n case GAMES_CATEGORIES.CARD_AND_TABLE:\n return (\n \n \n \n );\n\n default:\n return (\n \n \n \n );\n }\n }\n\n return (\n \n {_renderSearchLinkBox(props.searchSuggestion.linkIconClass)}\n \n );\n});\n\nexport const SearchResultItemComponent = withServices(ComponentBody, ['sideMenu', 'gameSearch']);","import {SearchLinksListDefaultBox} from \"./search-links-list.default.box\";\n\nexport const SearchLinksListBox = SearchLinksListDefaultBox;","import styled from \"styled-components\";\n\nexport const SearchLinksListDefaultBox = styled.ul`\n margin: 0 0 2rem 0;\n padding: 0;\n border-left: 2px solid ${props => props.theme.colors.boxBorderLight};\n`;","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {SearchBoxTitleComponent} from '../search-box-title/search-box-title.component';\nimport {ISearchSuggestion} from '../../../../services/game-search/game-search-result';\nimport {observer} from 'mobx-react';\nimport {SearchResultItemComponent} from '../search-result-item/search-result-item.component';\nimport {SearchLinksListBox} from \"./boxes/search-links-list/search-links-list.box\";\n\nexport interface SuggestedCategoriesComponentProps {\n title: string;\n className: string;\n items: ISearchSuggestion[];\n}\n\nexport const SuggestedLinksComponent = observer(\n class SuggestedLinksComponent extends OrbitComponent {\n\n private _renderSuggestedCategory(suggestedCategory: ISearchSuggestion) {\n return (\n \n )\n }\n\n private _renderSuggestedCategories() {\n return this.props.items.map(suggestedCategory => this._renderSuggestedCategory(suggestedCategory))\n\n }\n\n render() {\n if(this.props.items.length === 0) {\n return null;\n }\n\n return (\n \n \n \n {this._renderSuggestedCategories()}\n \n \n )\n }\n\n }\n);\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const SearchFormResultsBox = styledBox(\"SearchFormResultsBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const SearchFormResultsWrapperBox = styledBox(\"SearchFormResultsWrapperBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SuggestedVideoSlidesFilterListPreviewTitleBox = styledBox(\"SuggestedVideoSlidesFilterListPreviewTitleBox\");","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const SuggestedVideoSlidesFilterItemPreviewBox = styledBox(\"SuggestedVideoSlidesFilterItemPreviewBox\");","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const SuggestedVideoSlidesFilterItemPreviewPlayerBox = styledBox(\"SuggestedVideoSlidesFilterItemPreviewPlayerBox\");","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const SuggestedVideoSlidesFilterItemPreviewFooterBox = styledBox(\"SuggestedVideoSlidesFilterItemPreviewFooterBox\");","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\n\nexport const SuggestedVideoSlidesFilterItemPreviewFooterTextBox = styledBox(\"SuggestedVideoSlidesFilterItemPreviewFooterTextBox\");","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../../../react-hooks/use-services.hook\";\nimport {SuggestedVideoSlidesFilterItemPreviewBox} from \"./boxes/suggested-video-slides-filter-item-preview/suggested-video-slides-filter-item-preview.box\";\nimport {SuggestedVideoSlidesFilterItemPreviewPlayerBox} from \"./boxes/suggested-video-slides-filter-item-preview-player/suggested-video-slides-filter-item-preview-player.box\";\nimport {ISearchSuggestion} from \"../../../../../../services/game-search/game-search-result\";\nimport {SuggestedVideoSlidesFilterItemPreviewFooterBox} from \"./boxes/suggested-video-slides-filter-item-preview-footer/suggested-video-slides-filter-item-preview-footer.box\";\nimport {SuggestedVideoSlidesFilterItemPreviewFooterTextBox} from \"./boxes/suggested-video-slides-filter-item-preview-footer-text/suggested-video-slides-filter-item-preview-footer-text.box\";\n\ninterface SuggestedVideoSlidesFilterItemPreviewProps {\n videoSlidesFilterPreviewSuggestion: ISearchSuggestion;\n filterCount: number;\n}\nexport const SuggestedVideoSlidesFilterItemPreviewComponent: React.FC = observer((props) => {\n const services = useServices();\n \n return ( {props.videoSlidesFilterPreviewSuggestion.executeAction()}}\n >\n {}} //TODO we will have a task for videoPlayer\n onLoading={() => {}}\n onWatchTimeLimitReached={() => {}}\n isInCenterStage={true}\n inViewport={true}\n display={true}\n videoPlayingService={services.videoOnDemandPlaying}\n loop={true}\n />\n \n \n {props.videoSlidesFilterPreviewSuggestion.text}\n \n \n\n )\n})","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\n\nexport const SuggestedVideoSlidesFilterListPreviewHeaderBox = styledBox(\"SuggestedVideoSlidesFilterListPreviewHeaderBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n\nexport const SuggestedVideoSlidesFilterListPreviewBox = styledBox(\"SuggestedVideoSlidesFilterListPreviewBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\n\nexport const SuggestedVideoSlidesFilterListPreviewContentBox = styledBox(\"SuggestedVideoSlidesFilterListPreviewContentBox\");","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {ISearchSuggestion} from \"../../../../services/game-search/game-search-result\";\nimport {SuggestedVideoSlidesFilterListPreviewTitleBox} from \"./boxes/suggested-video-slides-filter-list-preview-title/suggested-video-slides-filter-list-preview-title.box\";\nimport {SuggestedVideoSlidesFilterItemPreviewComponent} from \"./components/suggested-video-slides-filter-item-preview/suggested-video-slides-filter-item-preview.component\";\nimport {SuggestedVideoSlidesFilterListPreviewHeaderBox} from \"./boxes/suggested-video-slides-filter-list-preview-header/suggested-video-slides-filter-list-preview-header.box\";\nimport {SuggestedVideoSlidesFilterListPreviewBox} from \"./boxes/suggested-video-slides-filter-list-preview.box\";\nimport {SuggestedVideoSlidesFilterListPreviewContentBox} from \"./boxes/suggested-video-slides-filter-list-preview-content/suggested-video-slides-filter-list-preview-content.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\ninterface SuggestedVideoSlidesFilterPreviewProps {\n items: ISearchSuggestion[];\n}\nexport const SuggestedVideoSlidesFilterListPreviewComponent: React.FC = observer((props) => {\n const services = useServices();\n let ExploreOutlinedIcon = services.theme.currentTheme.icons.exploreOutlinedIcon;\n\n return \n \n \n \n {services.translation.translate(\"VIDEO_SLIDES_FILTER_PREVIEW_TITLE\")}\n \n \n \n {\n props.items.map(videoSlidesFilterPreviewSuggestion => (\n \n ))\n }\n \n \n});","import React, {useEffect, useState} from 'react';\nimport {observer} from 'mobx-react';\nimport {FoundGamesComponent} from \"./found-games/found-games.component\";\nimport {SuggestedLinksComponent} from \"./suggested-links/suggested-links.component\";\nimport {SearchFormResultsBox} from \"./boxes/search-form-results-box/search-form-results.box\";\nimport {SearchFormResultsWrapperBox} from \"./boxes/search-form-results-wrapper-box/search-form-results-wrapper.box\";\nimport {SuggestedGamesComponent} from './suggested-games/suggested-games.component';\nimport {\n OrbitUserFlowAnalyticsCategory,\n OrbitUserFlowAnalyticsLabel\n} from \"../../../services/analytics/analytics.service.interface\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {reaction} from \"mobx\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../react-hooks/with-services\";\nimport {SuggestedVideoSlidesFilterListPreviewComponent} from './suggested-video-slides-filter-list-preview/suggested-video-slides-filter-list-preview.component';\n\nconst LOAD_BATCH_SIZE = 12;\n\n\ninterface SearchResultComponentProps extends ComponentServicesPick<'gameSearch'> {\n\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const [loadedGames, setLoadedGames] = useState(LOAD_BATCH_SIZE);\n\n useEffect(() => {\n const r = reaction(() => props.gameSearch.currentSearchText, () => {\n setLoadedGames(LOAD_BATCH_SIZE);\n });\n\n return () => r();\n }, [props.gameSearch.currentSearchText]);\n\n\n if (!props.gameSearch.isSearchBoxOpened) {\n return null;\n }\n\n const _onLoadMore = () => {\n services.analytics.sendOrbitUserFlowEvent(OrbitUserFlowAnalyticsCategory.Search, 'Entry', OrbitUserFlowAnalyticsLabel.ShowMore);\n const moreItems = Math.min(loadedGames + LOAD_BATCH_SIZE, props.gameSearch.searchResult.games.length);\n setLoadedGames(moreItems);\n }\n\n\n const renderSuggestedVideoSlidesFilterListPreview = () => {\n if (services.videoSlides.shouldBeDisplayed) {\n return ()\n }\n\n return null;\n }\n\n const _renderSearchResults = () => {\n if (props.gameSearch.isSearchInProgress) {\n return (\n <>\n \n {services.miniOrbit.isEnabled ? null : }\n \n );\n } else {\n return (\n <>\n {renderSuggestedVideoSlidesFilterListPreview()}\n \n {services.miniOrbit.isEnabled ? null : }\n \n );\n }\n }\n\n\n\n const isHybridAndroid = services.device.hybrid.isHybrid && !services.device.os.isIOS;\n\n return (\n \n \n {_renderSearchResults()}\n \n \n );\n\n})\n\nexport const SearchResultComponent = withServices(ComponentBody, ['gameSearch']);","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport interface ISearchClearIconBoxProps {\n visible: boolean;\n}\n\nexport const SearchClearIconBox = styledBox(\"SearchClearIconBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SearchInputMobileBox = styledBox(\"SearchInputMobileBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SearchInputAreaBox = styledBox(\"SearchInputAreaBox\");\n","import React, { useEffect, useRef } from 'react';\nimport { observer } from 'mobx-react';\nimport { SearchInputAreaBox } from \"./boxes/search-input-area-box/search-input-area.box\";\nimport { CyClass } from '../../../../../common/cy-classes';\nimport { ComponentServicesPick } from \"../../../../services/component-services-pick\";\nimport { useServices } from \"../../../../react-hooks/use-services.hook\";\nimport { withServices } from \"../../../../react-hooks/with-services\";\n\ninterface SearchInputAreaProps extends ComponentServicesPick<'gameSearch'> {\n\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const _timeoutRef = useRef(null);\n const HIDE_KEYBOARD_DELAY_MS = 2000;\n\n useEffect(() => {\n return () => {\n if (_timeoutRef.current) {\n clearTimeout(_timeoutRef.current)\n }\n }\n }, []);\n\n const _onChangeHandler = (event: React.ChangeEvent) => {\n props.gameSearch.search(event.target.value);\n }\n\n const _onChangeHandlerWithBlur = (event: React.ChangeEvent) => {\n props.gameSearch.search(event.target.value);\n\n if (_timeoutRef.current) {\n clearTimeout(_timeoutRef.current);\n }\n\n _timeoutRef.current = setTimeout(() => {\n _timeoutRef.current = null;\n if (props.gameSearch.currentSearchText) {\n props.gameSearch.searchInputRef.current?.blur();\n }\n }, HIDE_KEYBOARD_DELAY_MS);\n };\n\n const _onClickHandler = async () => {\n await props.gameSearch.openSearchResult();\n };\n\n const onChangeHandler = services.device.isMobile ? _onChangeHandlerWithBlur : _onChangeHandler;\n\n return (\n \n );\n})\n\nexport const SearchInputArea = withServices(ComponentBody, ['gameSearch']);","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SearchIconBox = styledBox(\"SearchIconBox\");","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {SearchClearIconBox} from \"./boxes/search-clear-icon/search-clear-icon.box\";\nimport {SearchInputMobileBox} from \"./boxes/search-input-mobile/search-input-mobile.box\";\nimport {SearchInputArea} from \"../search-input-area/search-input-area\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {SearchIconBox} from '../search-input-pc/boxes/search-icon/search-icon.box';\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\n\ninterface SearchInputMobileComponentProps extends ComponentServicesPick<'gameSearch'>{\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const _onResetSearchTextHandler = () => {\n props.gameSearch.search('');\n props.gameSearch.searchInputRef?.current?.focus();\n };\n\n const _showResetSearchIcon = (props.gameSearch.currentSearchText || '').length > 0;\n\n const SearchIcon = services.theme.currentTheme.icons.searchIcon;\n return (\n \n \n \n \n \n \n \n );\n\n})\n\nexport const SearchInputMobileComponent = withServices(ComponentBody, ['gameSearch']);","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {SearchInputArea} from \"../search-input-area/search-input-area\";\nimport {SearchInputFormBox} from \"./boxes/search-input-form/search-input-form.box\";\nimport {SearchIconBox} from \"./boxes/search-icon/search-icon.box\";\nimport {observer} from \"mobx-react\";\n\nexport const SearchInputPCComponent = observer(class SearchInputPCComponent extends OrbitComponent {\n render() {\n const SearchIcon = this.services.theme.currentTheme.icons.searchIcon;\n return (\n \n \n \n \n \n \n );\n }\n});","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const GameSearchBox = styledBox(\"GameSearchBox\");\n","import React, {useCallback, useEffect} from 'react';\nimport {observer} from 'mobx-react';\nimport {SearchResultComponent} from './search-result/search-result.component';\nimport {SearchInputMobileComponent} from \"./search-input/search-input-mobile/search-input-mobile.component\";\nimport {SearchInputPCComponent} from \"./search-input/search-input-pc/search-input-pc.component\";\nimport {GameSearchBox} from \"./boxes/game-search-box/game-search.box\";\nimport {CyClass} from '../../../common/cy-classes';\nimport classNames from 'classnames';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface GameSearchComponentProps extends ComponentServicesPick<'gameSearch'> {\n className?: string;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const _onUpdate = useCallback(() => {\n props.gameSearch.searchResultComponentRef.current?.scrollTo(0, 0);\n }, [props.gameSearch])\n\n const _renderSearchInput = () => {\n return services.device.isMobile ? : ;\n }\n\n useEffect(() => {\n props.gameSearch.searchInputRef?.current?.addEventListener(\"input\", _onUpdate);\n\n return () => {\n props.gameSearch.searchInputRef?.current?.removeEventListener(\"input\", _onUpdate);\n }\n }, [props.gameSearch, _onUpdate]);\n\n return (\n \n {_renderSearchInput()}\n \n \n );\n})\n\nexport const GameSearchComponent = withServices(ComponentBody, ['gameSearch']);","import {SearchInputFormDefaultBox} from \"./search-input-form.default.box\";\n\nexport const SearchInputFormBox = SearchInputFormDefaultBox;","import styled from \"styled-components\";\n\nexport const SearchInputFormDefaultBox = styled.div`\n display: flex;\n justify-content: center;\n`;","import styled from \"styled-components\";\n\nexport const GeoModalWrapperBox = styled.div`\n max-width: 560px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-content: center;\n align-items: center;\n\n width: 25vw;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 82vw;\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow + \" and \" + theme.mediaQuery.landscape} {\n width: 56vw;\n }\n`;\n","export const HEADER_Z_INDEX = 105;","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const RegulatoryDataBox = styledBox('RegulatoryDataBox');","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.div`\n margin: auto 0;\n color: ${props => props.theme.colors.textLight};\n ${({theme}) => theme.font.presets.regular};\n font-weight: 300;\n font-size: 0.9rem;\n line-height: 1.2;\n\n a {\n text-decoration: underline;\n }\n`;\n\nconst PcBox = styled(DefaultBox)`\n max-width: 40%;\n text-align: left;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n max-width: 100%;\n }\n`;\n\nconst MobileBox = styled(DefaultBox)`\n max-width: 100%;\n padding: 0.25rem 0;\n font-size: 1rem;\n text-align: center;\n`;\n\nexport const GamblingWarningDefaultBox = styledByDevice(PcBox, MobileBox);\n","import {GamblingWarningDefaultBox} from \"./gambling-warning.default.box\";\n\nexport const GamblingWarningBox = GamblingWarningDefaultBox;\n","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {Link} from '../../raw-components/link/link';\nimport {GamblingWarningBox} from \"./boxes/gambling-warning.box\";\n\nexport const GamblingWarningComponent = observer(class GamblingWarningComponent extends OrbitComponent<{}> {\n\n render() {\n let gamblingMessageConfig = this.services.configuration.data.header.gambling_message;\n if(!gamblingMessageConfig || !gamblingMessageConfig.display) {\n return null;\n }\n\n return (\n \n {this.services.translation.translate('GAMBLING_WARNING_part1')}\n \n {'Probabilità di vincita'}\n \n {this.services.translation.translate('GAMBLING_WARNING_part2')}\n \n {'maggiori informazioni.'}\n \n \n );\n\n }\n});\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.div`\n display: flex;\n`;\n\nconst PcBox = styled(DefaultBox)`\n align-items: center;\n`;\n\nconst Mobilebox = styled(DefaultBox)`\n width: 100%;\n padding: 0.5rem 0 0 0;\n justify-content: center;\n\n .cgp-dk & {\n //justify-content: flex-start;\n }\n`;\n\nexport const ResponsibleGamingIconsDefaultBox = styledByDevice(PcBox, Mobilebox);\n","import {ResponsibleGamingIconsDefaultBox} from \"./responsible-gaming-icons.default.box\";\n\nexport const ResponsibleGamingIconsBox = ResponsibleGamingIconsDefaultBox;\n","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {ResponsibleIconsAgeButtonConfiguration} from '../../../services/configurations/config-data-sections/header.configuration';\nimport {ResponsibleGamingIconsBox} from \"./boxes/responsible-gaming-icons.box\";\n\nexport const ResponsibleIconsComponent = observer(class ResponsibleIconsComponent extends OrbitComponent {\n\n private _renderAgeButton(ageButtonConfig: ResponsibleIconsAgeButtonConfiguration) {\n if(ageButtonConfig && ageButtonConfig.display) {\n return this.services.regulation.current.components.renderHeaderMinimumGamblingAge();\n }\n\n return null;\n }\n\n private _renderResponsibleIcons() {\n return this.services.regulation.current.components.renderHeaderRegulationIcons();\n }\n\n render() {\n let responsibleIconsConfig = this.services.configuration.data.header.responsibleIcons;\n if(!responsibleIconsConfig || !responsibleIconsConfig.display) {\n return null;\n }\n\n return (\n \n {this._renderAgeButton(responsibleIconsConfig.ageButton)}\n {this._renderResponsibleIcons()}\n \n );\n }\n});\n","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {RegulatoryDataBox} from \"./boxes/regulatory-data.box\";\nimport {HeaderConfiguration} from '../../../../services/configurations/config-data-sections/header.configuration';\nimport {GamblingWarningComponent} from '../../gambling-warning/gambling-warning.component';\nimport {ResponsibleIconsComponent} from '../../responsible-icons/responsible-icons.component';\nimport {ClockAndLastLoginBoxComponent} from '../../../clock-and-last-login-box/clock-and-last-login-box.component';\nimport {observer} from \"mobx-react\";\nimport classNames from \"classnames\";\n\ninterface RegulatoryDataComponentProps {\n attachToHeaderService: boolean;\n className?: string;\n}\n\n@observer\nexport class RegulatoryDataComponent extends OrbitComponent {\n\n private get _headerConfig(): HeaderConfiguration {\n return this.services.configuration.data.header;\n }\n\n private _captureHeaderUpperRef = (element: HTMLElement | null) => {\n if (this.props.attachToHeaderService) {\n this.services.header.setHeaderRegulationDataElement(element);\n }\n };\n\n private _renderMobileLastLogin() {\n if (this.services.device.isMobile) {\n return ;\n }\n\n return null;\n }\n\n private _getRegulatoryContent() {\n if (this.services.miniOrbit.isCis) {\n return null;\n }\n\n\n let gamblingMessageConfig = this._headerConfig.gambling_message;\n let responsibleIconsConfig = this._headerConfig.responsibleIcons;\n\n if (responsibleIconsConfig && responsibleIconsConfig.display) {\n return ;\n } else if (gamblingMessageConfig && gamblingMessageConfig.display) {\n return ;\n }\n\n return null;\n };\n\n render() {\n return (\n \n {this._renderMobileLastLogin()}\n {this._getRegulatoryContent()}\n \n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const MobileContainerBox = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 80px;\n`","import styled from \"styled-components\";\n\nexport const UserIconBox = styled.div`\n width: 20px;\n height: 20px;\n background-size: contain;\n background-repeat: no-repeat;\n background-image: url(\"${props => props.theme.images.user.welcomePostLoginMobile.toString()}\");\n color: ${props => props.theme.colors.brandSecondary};\n`","import styled from \"styled-components\";\n\nexport const UserBankrollBox = styled.div`\n font-size: 1.3rem;\n color: ${props => props.theme.colors.moneyColor};\n`","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const FreePlayDotIndicatorBox = styledBox('FreePlayDotIndicatorBox');","import {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {MobileContainerBox} from \"../boxes/mobile-container/mobile-container.box\";\nimport {UserIconBox} from \"../boxes/icon/user-icon.box\";\nimport {UserBankrollBox} from \"../boxes/bankroll/user-bankroll.box\";\nimport {FreePlayDotIndicatorBox} from \"../boxes/free-play-dot-indicator/free-play-dot-indicator.box\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {\n TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE\n} from \"../../../../../services/tooltip/on-boarding-tooltip/on-boarding-tooltip-target-selectors\";\n\nexport const HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent = observer(\n class HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent extends OrbitComponent {\n private _onClick = async () => {\n (await this.services.userMenu).openMenu();\n };\n\n private _renderFreePlayIndicator = () => {\n if(!this.services.freePlay.hasVouchers) {\n return null;\n }\n return (\n \n )\n }\n\n render() {\n return (\n \n \n {this._renderFreePlayIndicator()}\n \n {this.services.currency.formatMoney(this.services.walletProxy.totalBankroll)}\n \n \n );\n }\n }\n);","import {ButtonSizeVariant} from \"../../../basic-ui-components/button/base/button-props.interface\";\nimport {IServiceFactory} from \"../../../services/service-factory.interface\";\nimport React from \"react\";\nimport {BlankHorizontalSeparatorBox} from \"../../../basic-components/blank-separator/blank-horizontal-separator.box\";\n\nexport function getButtonSizeVariant(services: IServiceFactory): ButtonSizeVariant {\n if(services.mediaQuery.lAndBelow) {\n return \"xs\";\n } else {\n return \"m\";\n }\n}\n\nexport function getButtonsSeparator(services: IServiceFactory): React.ReactElement {\n return ()\n}","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const AnonymousButtonsContainerBox = styledBox('AnonymousButtonsContainerBox');\n","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {AnonymousButtonsContainerBox} from \"./boxes/buttons-container/anonymous-buttons-container.box\";\nimport React from \"react\";\nimport {getButtonsSeparator} from \"../header-welcome-buttons-helpers\";\nimport {\n IGameContextViewModel\n} from \"../../../../services/game-runner/interfaces/game-context/game-context-view-model.interface\";\n\ninterface HeaderWelcomeButtonsForAnonymousUserComponentProps {\n gameContext?: IGameContextViewModel;\n}\n\nexport const HeaderWelcomeButtonsForAnonymousUserComponent = observer(\n class HeaderWelcomeButtonsForAnonymousUserComponent extends OrbitComponent {\n\n render() {\n const separator = getButtonsSeparator(this.services);\n return (\n \n {separator}\n {this.services.regulation.current.components.renderHeaderRegisterButton({gameContext: this.props.gameContext})}\n {separator}\n {this.services.regulation.current.components.renderHeaderLoginButton({gameContext: this.props.gameContext})}\n \n );\n }\n }\n);","import styled from \"styled-components\";\n\nexport const PCContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\nimport {getButtonSizeVariant} from \"../../welcome-buttons/header-welcome-buttons-helpers\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType, CashierSessionType} from \"@sparkware/uc-sdk-core\";\n\n\nexport const HeaderCashierButtonComponent = observer(class HeaderCashierButtonComponent extends OrbitComponent {\n private _onCashierClick = async () => {\n await this.services.cashier.openCashier({\n sessionType: CashierSessionType.FullCashier,\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n }\n render() {\n return (\n \n {this.services.translation.translate('CASHIER')}\n \n )\n }\n});","import {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {PCContainerBox} from \"../boxes/pc-container/pc-container.box\";\nimport {getButtonsSeparator} from \"../../header-welcome-buttons-helpers\";\nimport {HeaderCashierButtonComponent} from \"../../../buttons/cashier-button/header-cashier-button.component\";\nimport React from \"react\";\n\nexport const HeaderWelcomeButtonsForAuthorizedUserPcViewComponent = observer(\n class HeaderWelcomeButtonsForAuthorizedUserPcViewComponent extends OrbitComponent {\n render() {\n return (\n \n {getButtonsSeparator(this.services)}\n \n \n );\n }\n }\n);","import React from 'react';\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent} from \"./mobile-view/header-welcome-buttons-for-authorized-user-mobile-view.component\";\nimport {HeaderWelcomeButtonsForAuthorizedUserPcViewComponent} from \"./pc-view/header-welcome-buttons-for-authorized-user-pc-view.component\";\n\nexport const HeaderWelcomeButtonsForAuthorizedUserComponent = observer(\n class HeaderWelcomeButtonsForAuthorizedUserComponent extends OrbitComponent {\n render() {\n if(this.services.mediaQuery.lAndBelow) {\n return ();\n } else {\n return ();\n }\n\n }\n }\n);","import styled from \"styled-components\";\n\nexport const HeaderWelcomeButtonsBox = styled.div`\n \n`","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {HeaderWelcomeButtonsForAnonymousUserComponent} from \"./anonymous-user/header-welcome-buttons-for-anonymous-user.component\";\nimport {HeaderWelcomeButtonsForAuthorizedUserComponent} from \"./authorized-user/header-welcome-buttons-for-authorized-user.component\";\nimport {\n IGameContextViewModel\n} from \"../../../services/game-runner/interfaces/game-context/game-context-view-model.interface\";\nimport {HeaderWelcomeButtonsBox} from \"./boxes/header-welcome-buttons.box\";\nimport {CyClass} from \"../../../../common/cy-classes\";\n\ninterface HeaderWelcomeButtonsComponentProps {\n gameContext?: IGameContextViewModel;\n}\nexport const HeaderWelcomeButtonsComponent = observer(\n class HeaderWelcomeButtonsComponent extends OrbitComponent {\n render() {\n\n return (\n \n {\n this.services.user.isAuthorized\n ? ()\n : ()\n }\n \n );\n }\n }\n);\n","import {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {INSIDE_ORBIT_MENU_CONTAINER} from \"./inside-orbit-menu-container.consts\";\nimport {isInsideAutomation} from '../../../utils/automation-helpers';\n\n\nexport class InsideOrbitMenuContainerComponent extends OrbitComponent<{}> {\n render() {\n if(isInsideAutomation()) {\n return null;\n }\n return
\n }\n}","export const INSIDE_ORBIT_MENU_CONTAINER = 'inside-orbit-menu-container';","import styled from \"styled-components\";\nimport {JACKPOT_WIDGET_LAYOUT} from \"../../jackpot-widget.component\";\n\nexport interface IJackpotWidgetAspectRatioBoxProps {\n layout: JACKPOT_WIDGET_LAYOUT; \n};\n\nconst handlePaddingTop = (layout: JACKPOT_WIDGET_LAYOUT) => {\n switch (layout) {\n case JACKPOT_WIDGET_LAYOUT.LANDSCAPE:\n return \"58%\";\n case JACKPOT_WIDGET_LAYOUT.LANDSCAPE_WIDE:\n return \"25%\";\n case JACKPOT_WIDGET_LAYOUT.PORTRAIT_TALL:\n return \"128%\";\n case JACKPOT_WIDGET_LAYOUT.PORTRAIT:\n default: \n return \"123%\";\n }\n};\n\nexport const JackpotWidgetAspectRatioBox = styled.div`\n position: relative;\n padding-top: ${({layout}) => handlePaddingTop(layout)};\n transition: padding-top 0.5s ease-in-out;\n`;\n","import styled, {css} from 'styled-components';\nimport { JackpotType } from '../../../../../common/const/jackpot_map_ids';\nimport {JACKPOT_WIDGET_LAYOUT} from '../../jackpot-widget.component';\nimport {OrbitTheme} from '../../../../themes/architecture/orbit-theme.interface';\n\nexport interface IJackpotWidgetBgBoxProps {\n jackpotType: JackpotType;\n layout: JACKPOT_WIDGET_LAYOUT;\n shouldRenderSkeleton?: boolean;\n}\n\nconst handleBackgroundImage = (props: IJackpotWidgetBgBoxProps, theme: OrbitTheme) => {\n if (props.shouldRenderSkeleton) {\n return 'none';\n }\n if (\n (props.layout === JACKPOT_WIDGET_LAYOUT.LANDSCAPE || props.layout === JACKPOT_WIDGET_LAYOUT.LANDSCAPE_WIDE) &&\n theme.images.jackpotWidget.byType[props.jackpotType].landscape?.background\n ) {\n return 'url(' + theme.images.jackpotWidget.byType[props.jackpotType].landscape.background.toString() + ')';\n }\n return 'url(' + theme.images.jackpotWidget.byType[props.jackpotType].background.toString() + ')';\n}\n\nexport const JackpotWidgetBgBox = styled.div`\n background-image: ${props => handleBackgroundImage(props, props.theme) };\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n width: 100%;\n height: 100%;\n\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n border-radius: 10px;\n\n ${({layout}) => layout === JACKPOT_WIDGET_LAYOUT.LANDSCAPE_WIDE && css`\n flex-direction: row;\n align-items: center;\n `}\n\n animation: JackpotBackgroundLoadingAnimation 1.5s linear infinite;\n\n @keyframes JackpotBackgroundLoadingAnimation {\n 0% {\n background-color: #000000;\n }\n 50% {\n background-color: #171717;\n }\n 100% {\n background-color: #000000;\n }\n }\n`;\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetBox = styledBox(\"JackpotWidgetBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetLogoBox = styledBox(\"JackpotWidgetLogoBox\");\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetAmountBox = styledBox(\"JackpotWidgetAmountBox\");\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetFooterBox = styledBox(\"JackpotWidgetFooterBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetClockLabelBox = styledBox(\"JackpotWidgetClockLabelBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetClockBox = styledBox(\"JackpotWidgetClockBox\");\n","import React from 'react';\nimport {action, makeObservable, observable} from 'mobx';\nimport {observer} from 'mobx-react';\nimport {TimeSpan} from '@sparkware/app-utils';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {JackpotWidgetClockBox} from './boxes/footer/clock/box/jackpot-widget-clock.box';\nimport {JackpotType} from '../../../common/const/jackpot_map_ids';\nimport {JACKPOT_WIDGET_LAYOUT} from './jackpot-widget.component';\nimport {SetIntervalType} from \"../../../common/types/set-interval-type\";\nimport {IJackpotStatefulData} from '../../services/jackpots/jackpots.service.interface';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface IDailyJackpotWidgetClockComponentProps extends ComponentServicesPick<'jackpots'>{\n jackpotData: IJackpotStatefulData;\n layout: JACKPOT_WIDGET_LAYOUT;\n widgetWidth?: number;\n jackpotType: JackpotType;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent {\n private updateClockInterval: SetIntervalType;\n\n @observable.ref\n private clockValue: string = \"\";\n\n constructor(props: IDailyJackpotWidgetClockComponentProps) {\n super(props);\n\n makeObservable(this);\n }\n\n componentDidMount() {\n this.clockInit();\n }\n\n componentDidUpdate(prevProps: IDailyJackpotWidgetClockComponentProps) {\n if ( prevProps.jackpotData.mustHitTime !== this.props.jackpotData.mustHitTime) {\n this.clearClockInterval();\n this.clockInit();\n }\n }\n\n componentWillUnmount() {\n this.clearClockInterval();\n }\n\n private clockInit() {\n this.updateClock();\n this.updateClockInterval = setInterval(() => {\n this.updateClock();\n }, 1000);\n }\n\n private clearClockInterval() {\n if (this.updateClockInterval) {\n clearInterval(this.updateClockInterval);\n this.updateClockInterval = undefined;\n }\n }\n\n @action.bound\n private updateClock() {\n const serverDate = this.services.time.getCurrentServerDate();\n if (!serverDate) {\n this.services.logger.warning('Server date is invalid');\n return;\n }\n\n const mustHitDate = this.props.jackpotData.mustHitTime;\n\n // round it to 1 second\n const remainingTimeMilis = Math.round((mustHitDate.getTime() - serverDate.getTime()) / 1000) * 1000;\n const remainingTimeTimeSp = TimeSpan.fromMilliseconds(Math.max(0, remainingTimeMilis));\n this.clockValue = remainingTimeTimeSp.toString({useTotalHours: true});\n }\n\n render() {\n return \n {this.clockValue}\n ;\n }\n}\n\nexport const JackpotWidgetClockComponent = withServices(ComponentBody, ['jackpots']);","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n/**\n * This is the \"PAID\" label shown above the amount at cold state\n */\nexport const JackpotWidgetAmountLabelBox = styledBox(\"JackpotWidgetAmountLabelBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetCollectingLabelBox = styledBox(\"JackpotWidgetCollectingLabelBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetCollectingAmountBox = styledBox(\"JackpotWidgetCollectingAmountBox\");\n","import styled, { keyframes, css } from \"styled-components\";\n\nconst animationProps = \"2s ease-in-out 0s normal infinite none running\";\n\n/**\n * The leftmost position of the sparkle (the center of the sparkle) in percentage\n */\nconst ShineLeftPosition = 20;\n/**\n * The rightmost position of the sparkle (the center of the sparkle) in percentage\n */\nconst ShineRightPosition = 80;\n\nconst BorderShineHeight = 2;\nconst BorderShineWidth = 30;\nfunction borderShineKeyframes(rtl?: boolean) {\n const startPos = (rtl ? ShineRightPosition : ShineLeftPosition) - (BorderShineWidth / 2);\n const endPos = (rtl ? ShineLeftPosition : ShineRightPosition) - (BorderShineWidth / 2);\n return keyframes`\n 0% {\n opacity: 0;\n left: ${startPos}%;\n }\n 20%, 30% {\n opacity: 0.5;\n left: ${startPos}%;\n }\n 50%, 60% {\n opacity: 1;\n left: ${endPos}%;\n }\n 80% {\n opacity: 0;\n left: ${endPos}%;\n }\n 100% {\n opacity: 0;\n left: ${startPos}%;\n }\n `;\n}\nexport const JackpotWidgetBorderShine = styled.div<{bottom?: boolean}>`\n position: absolute;\n width: ${BorderShineWidth}%;\n ${({bottom}) => bottom ? css`\n bottom: ${-(BorderShineHeight / 2)}px;\n ` : css`\n top: ${-(BorderShineHeight / 2)}px;\n `}\n height: ${BorderShineHeight}px;\n z-index: 10;\n background-color: transparent;\n background-image: linear-gradient(90deg, #00000000 0%, #FFFFFF 50%, #00000000 100%);\n\n animation: ${({bottom}) => borderShineKeyframes(bottom)} ${animationProps};\n`;\n\nconst RadialShineHeight = 22;\nconst RadialShineWidth = 20;\nfunction radialShineKeyframes(rtl?: boolean) {\n const startPos = (rtl ? ShineRightPosition : ShineLeftPosition) - (RadialShineWidth / 2);\n const endPos = (rtl ? ShineLeftPosition : ShineRightPosition) - (RadialShineWidth / 2);\n return keyframes`\n 0% {\n opacity: 0;\n left: ${startPos}%;\n }\n 20%, 30% {\n opacity: 0.1;\n left: ${startPos}%;\n }\n 50%, 60% {\n opacity: 1;\n left: ${endPos}%;\n }\n 80% {\n opacity: 0;\n left: ${endPos}%;\n }\n 100% {\n opacity: 0;\n left: ${startPos}%;\n }\n `;\n}\nexport const JackpotWidgetRadialShine = styled.div<{bottom?: boolean}>`\n position: absolute;\n width: ${RadialShineWidth}%;\n ${({bottom}) => bottom ? css`\n bottom: ${-(RadialShineHeight / 2)}px;\n ` : css`\n top: ${-(RadialShineHeight / 2)}px;\n `}\n height: ${RadialShineHeight}px;\n z-index: 10;\n background-color: transparent;\n background-image: radial-gradient(closest-side at 50% 50%, #FFFFFF 0%, #FFFFFF61 35%, #00000000 100%);\n\n animation: ${({bottom}) => radialShineKeyframes(bottom)} ${animationProps};\n`;\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {Check} from '@sparkware/app-utils';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {JACKPOT_STATE, JackpotInternalId, JackpotType} from '../../../common/const/jackpot_map_ids';\nimport {\n JackpotWidgetConfiguration\n} from '../../services/configurations/config-data-sections/jackpot-widget.configuration';\nimport {JackpotWidgetBox} from './boxes/jackpot-widget.box';\nimport {JackpotWidgetBgBox} from './boxes/bg/jackpot-widget-bg.box';\nimport {JackpotWidgetLogoBox} from './boxes/logo/jackpot-widget-logo.box';\nimport {JackpotWidgetAmountBox} from './boxes/amount/jackpot-widget-amount.box';\nimport {JackpotWidgetFooterBox} from './boxes/footer/jackpot-widget-footer.box';\nimport {JackpotWidgetClockLabelBox} from './boxes/footer/clock/label/jackpot-widget-clock-label.box';\nimport {JackpotWidgetClockComponent} from './jackpot-widget-clock.component';\nimport {JackpotWidgetAmountLabelBox} from './boxes/amount/label/jackpot-widget-amount-label.box';\nimport {JackpotWidgetCollectingLabelBox} from './boxes/footer/collecting/label/jackpot-widget-collecting-label.box';\nimport {JackpotWidgetCollectingAmountBox} from './boxes/footer/collecting/amount/jackpot-widget-collecting-amount.box';\nimport {JackpotWidgetBorderShine, JackpotWidgetRadialShine} from './boxes/shine/jackpot-widget-shine.box';\nimport {JackpotWidgetAspectRatioBox} from './boxes/aspect-ratio/jackpot-widget-aspect-ratio.box';\nimport {JackpotWidgetAmountContainer} from './boxes/amount/container/jackpot-widget-amount-container.box';\nimport {JackpotWidgetClockLabelSkeletonBox} from \"./skeleton/boxes/footer/jackpot-widget-clock-label-skeleton.box\";\nimport {\n JackpotWidgetCollectingLabelSkeletonBox\n} from \"./skeleton/boxes/footer/jackpot-widget-collecting-label-skeleton.box\";\nimport {JackpotWidgetFooterSkeletonBox} from \"./skeleton/boxes/footer/jackpot-widget-footer-container-skeleton.box\";\nimport {JackpotWidgetAmountSkeletonBox} from \"./skeleton/boxes/jackpot-widget-amount-skeleton.box\";\nimport {action, makeObservable, observable} from \"mobx\";\nimport {imagePreload} from '../../../common/utils/image-preload';\nimport {ResizeObserver, ResizeObserverEntry} from '@juggle/resize-observer';\nimport {IJackpotHandler} from '../../services/jackpots/jackpot-handler/jackpot-handler.interface';\nimport {IJackpotData} from '../../services/jackpots/jackpots.service.interface';\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {SpacerBox} from '../../basic-ui-components/layout/spacer.box';\nimport JackpotTitleBox from \"./boxes/title/jackpot-title.box\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\n\nexport enum JACKPOT_WIDGET_LAYOUT {\n PORTRAIT,\n PORTRAIT_TALL,\n LANDSCAPE,\n LANDSCAPE_WIDE\n}\n\nexport interface IJackpotWidgetLayout {\n layout: JACKPOT_WIDGET_LAYOUT;\n}\n\nexport interface JackpotWidgetComponentProps extends ComponentServicesPick<'jackpots'> {\n\t/**\n\t * We send the wrapper as prop because if the widget is not rendered, then we don't want to render the Wrapper either\n\t */\n WrapperBox?: React.ComponentType;\n\twidgetConfig?: JackpotWidgetConfiguration;\n layout?: JACKPOT_WIDGET_LAYOUT;\n seoCategory?: string;\n onClick?: () => void;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent {\n\n constructor(props: JackpotWidgetComponentProps) {\n super(props);\n makeObservable(this);\n }\n\n private _onWidgetClick = () => {\n //Product want to check how many users click on the widgets even if it's not clickable\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\", \"Jackpot_Widget\", `${this.services.routing.currentRoute?.data?.arenaType}, ${this.props.widgetConfig?.jackpotType}`);\n\n if (this.props.onClick) {\n const listInfo = this.services.configuration.getGamesListByJackpotId(this.props.widgetConfig.jackpotId);\n this.services.analytics.sendOrbitMarketingEvent(this.props.seoCategory ?? \"List_Widget\", \"Widget_Clicked\", this.props.widgetConfig.jackpotType + (listInfo?.title ? \"_\" + listInfo.title : \"\"));\n this.props.onClick();\n }\n }\n\n private _isWidgetClickable = () => {\n return !!this.props.onClick || this.props.widgetConfig.jackpotType === JackpotType.Party;\n }\n\n @observable.ref\n private imagesReady = false;\n\n\n @action.bound\n private _setImagesReady(readyState: boolean) {\n this.imagesReady = readyState;\n }\n\n private get _isJackpotHandlerReady(): boolean {\n const jackpotId = this.props.widgetConfig?.jackpotId ?? JackpotInternalId.Daily;\n const jackpotHandler = this.props.jackpots.currentJackpotsById[jackpotId];\n return !Check.isNullOrUndefined(jackpotHandler?.jackpotData);\n }\n\n private get _shouldRenderSkeleton() {\n return (!this.imagesReady || !this._isJackpotHandlerReady);\n }\n\n componentDidMount() {\n super.componentDidMount();\n\n const jackpotType = this.props.widgetConfig?.jackpotType ?? JackpotType.Daily;\n\n if (!this.services.theme.currentTheme.images.jackpotWidget.byType[jackpotType]) {\n // this can happen if in Orbit Admin metadata has jackpotType has unknown value for Orbit - for example \"HourlyCaptain8\"\n this.services.logger.warning(`Unknown JP type ${jackpotType} found!`)\n return;\n }\n\n Promise.all([\n imagePreload(this.services.theme.currentTheme.images.jackpotWidget.byType[jackpotType].logo.toString()),\n imagePreload(this.services.theme.currentTheme.images.jackpotWidget.byType[jackpotType].background.toString())\n ]).then(() => {\n this._setImagesReady(true);\n });\n }\n\n componentWillUnmount() {\n if (this.resizeObserverInstance) {\n this.resizeObserverInstance.disconnect();\n this.resizeObserverInstance = null;\n }\n }\n\n @observable.ref\n private widgetWidth: number;\n private aspectRatioBox: HTMLDivElement | null;\n private resizeObserverInstance: ResizeObserver;\n private disposer: undefined | ((oldRefEl: HTMLDivElement) => void);\n\n @action.bound\n private setWidgetWidth = (entries: ResizeObserverEntry[]) => {\n // We know we are only watching the aspect ratio box element so we take the first element in the array.\n // We are not using this.aspectRatioBox directly because from a typescript point of view that could be null\n // and from a react component lifecycle perspective it could be null as well\n let targetElement = entries[0].target;\n const elementRectangle = targetElement.getBoundingClientRect();\n this.widgetWidth = elementRectangle.width;\n };\n\n private _captureJackpotWidgetAspectRatioBoxRef = (refEl: HTMLDivElement | null) => {\n if (this.disposer) {\n this.disposer(this.aspectRatioBox);\n this.disposer = undefined;\n }\n this.aspectRatioBox = refEl;\n if (this.aspectRatioBox) {\n if (!this.resizeObserverInstance) {\n this.resizeObserverInstance = new ResizeObserver(this.setWidgetWidth);\n }\n this.resizeObserverInstance.observe(this.aspectRatioBox);\n this.disposer = (oldRefEl: HTMLDivElement) => {\n // At unmount, the resizeObserverInstance will be destroyed and the disposer will be called too late.\n // In that case, we don't do anything since the observer was disconnected at unmount\n if (this.resizeObserverInstance) {\n this.resizeObserverInstance.unobserve(oldRefEl);\n }\n }\n }\n };\n\n private _getCountDownTimerTranslationKey(jackpotState: JACKPOT_STATE) {\n let translationKey = '';\n switch (jackpotState) {\n case JACKPOT_STATE.Hot:\n translationKey = 'JACKPOT-WIDGET-DROPS-SOON';\n break;\n\n case JACKPOT_STATE.OffHours:\n translationKey = 'JACKPOT-WIDGET-STARTS-SOON';\n break;\n\n case JACKPOT_STATE.Regular:\n default:\n translationKey = 'JACKPOT-WIDGET-MUST-PAY';\n break;\n }\n\n return translationKey;\n }\n\n private _getJackpotWidgetLayout(): JACKPOT_WIDGET_LAYOUT {\n const isMobileTablet = this.services.mediaQuery.mAndAbove && this.services.mediaQuery.lAndBelow;\n\n return this.props.layout || isMobileTablet ? JACKPOT_WIDGET_LAYOUT.PORTRAIT_TALL : JACKPOT_WIDGET_LAYOUT.PORTRAIT;\n }\n\n private _getAmountDisplayed(jackpotHandler: IJackpotHandler) {\n const {jackpotState, lastWinAmount} = jackpotHandler.jackpotData || {};\n\n return (\n jackpotState === JACKPOT_STATE.Cold ?\n this.services.currency.formatMoney(lastWinAmount) :\n this.services.currency.formatMoney(jackpotHandler?.jackpotAmount)\n );\n }\n\n render() {\n if (!this.props.widgetConfig || !this.props.widgetConfig.display) {\n return null;\n }\n\n const jackpotId = String(this.props.widgetConfig.jackpotId ?? JackpotInternalId.Daily);\n const jackpotType: JackpotType = this.props.widgetConfig.jackpotType ?? JackpotType.Daily;\n\n const jackpotHandler: IJackpotHandler = this.props.jackpots.currentJackpotsById[jackpotId];\n const jackpotData = (jackpotHandler?.jackpotData || {}) as IJackpotData;\n\n if (!this._shouldRenderSkeleton) {\n jackpotHandler.startGradual(jackpotData);\n }\n\n const {jackpotState} = jackpotData || {};\n\n const WrapperBox = this.props.WrapperBox || React.Fragment;\n\n const layout = this._getJackpotWidgetLayout();\n\n const themeType = this.props.jackpots.getThemeType(jackpotType);\n\n const isDailyJPWidget = this.props.widgetConfig.jackpotType === JackpotType.Daily;\n\n return \n \n \n \n {jackpotState === JACKPOT_STATE.Hot ? <>\n \n \n \n \n : null}\n\n {(this._shouldRenderSkeleton) ?\n <>\n \n \n \n \n \n :\n <>\n \n {this.services.translation.translate(\"JACKPOT_WIDGET_TITLE\")}\n \n \n \n {jackpotState === JACKPOT_STATE.Cold &&\n \n {this.services.translation.translate('JACKPOT-WIDGET-LAST-WIN')}\n \n }\n\n \n \n {this._getAmountDisplayed(jackpotHandler)}\n \n \n \n \n { jackpotData.jackpotState ?\n (jackpotState === JACKPOT_STATE.Cold ?\n <>\n \n {this.services.translation.translate('JACKPOT-WIDGET-NEXT-JACKPOT')}\n \n\n \n {this.services.currency.formatMoney(jackpotHandler.jackpotAmount)}\n \n :\n <>\n \n {this.services.translation.translate(this._getCountDownTimerTranslationKey(jackpotState))}\n \n \n \n ) : }\n \n }\n \n \n \n ;\n }\n}\n\n\nexport const JackpotWidgetComponent = withServices(ComponentBody, ['jackpots']);","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetAmountContainer = styledBox('JackpotWidgetAmountContainer');","import styled from \"styled-components\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {JACKPOT_WIDGET_LAYOUT} from \"../../jackpot-widget.component\";\n\nexport interface IJackpotWidgetTitleBox {\n layout: JACKPOT_WIDGET_LAYOUT;\n widgetWidth: number;\n isDaily: boolean;\n}\n\nconst handleTitleBoxFontSize = (layout: JACKPOT_WIDGET_LAYOUT, widgetWidth: number, mAndBelow: boolean = false) => {\n switch (layout) {\n case JACKPOT_WIDGET_LAYOUT.LANDSCAPE:\n /** In desktop view at a widget width of 468px, the title should be of font-size 35px */\n return widgetWidth * 35 / 468 + \"px\";\n case JACKPOT_WIDGET_LAYOUT.LANDSCAPE_WIDE:\n /** In minimized view at a widget width of 375px, the title should be of font-size 25px */\n return widgetWidth * 25 / 375 + \"px\";\n case JACKPOT_WIDGET_LAYOUT.PORTRAIT:\n default:\n if (mAndBelow) {\n /** In mobile view at a widget width of 131px, the title should be of font-size 14px */\n return widgetWidth * 14 / 131 + \"px\";\n } else {\n /** At a widget width of 240px, the title should be of font-size 25px */\n return widgetWidth * 25 / 240 + \"px\";\n }\n }\n};\n\nexport const JackpotTitleDefaultBox = styled.div`\n display: none;\n`;\n\nexport const JackpotTitleMrGreenBox = styled(JackpotTitleDefaultBox)`\n display: ${({isDaily}) => isDaily ? \"block\" : \"none\"};\n text-shadow: 0px 2.70px 2.70px rgba(0, 0, 0, 0.29);\n line-height: 1.2;\n text-align: center;\n ${({theme}) => theme.font.presets.bold};\n color: ${({theme}) => theme.colors.brandSecondaryLight};\n padding-top: 5%;\n\n font-size: ${({layout, widgetWidth}) => handleTitleBoxFontSize(layout, widgetWidth)};\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n font-size: ${({layout, widgetWidth}) => handleTitleBoxFontSize(layout, widgetWidth, true)};\n }\n\n`;\n\nconst JackpotTitleBox = styledByTheme(JackpotTitleDefaultBox)\n .forMrGreen(JackpotTitleMrGreenBox)\n .forMrGreenCip(JackpotTitleMrGreenBox)\n .forMrGreenCis(JackpotTitleMrGreenBox)\n .apply();\n\nexport default JackpotTitleBox;\n\n","import styled from \"styled-components\";\nimport {JackpotWidgetFooterElementSkeletonBox} from \"./jackpot-widget-footer-element-skeleton.box\";\n\nexport const JackpotWidgetClockLabelSkeletonBox = styled(JackpotWidgetFooterElementSkeletonBox)`\n margin-left: 50%;\n`;","import styled from \"styled-components\";\nimport {JackpotWidgetFooterElementSkeletonBox} from \"./jackpot-widget-footer-element-skeleton.box\";\n\nexport const JackpotWidgetCollectingLabelSkeletonBox = styled(JackpotWidgetFooterElementSkeletonBox)`\n margin-left: 5%;\n`;","import styled from \"styled-components\";\n\nexport const JackpotWidgetFooterSkeletonBox = styled.div`\n display: flex;\n margin-bottom: 0.8rem;\n`;","import styled from \"styled-components\";\n\nexport const JackpotWidgetFooterElementSkeletonBox = styled.div`\n width: 20%;\n height: 2rem;\n \n animation: FooterElementSkeletonAnimation 1.5s linear infinite;\n \n @keyframes FooterElementSkeletonAnimation {\n 0% {\n background-color: #474747;\n }\n 100% {\n background-color: #333333;\n }\n }\n`;","import styled from \"styled-components\";\n\nexport const JackpotWidgetAmountSkeletonBox = styled.div`\n margin-top: 35%;\n margin-left: 25%;\n\n width: 50%;\n height: 2.8rem;\n \n animation: AmountSkeletonAnimation 1.5s linear infinite;\n @keyframes AmountSkeletonAnimation {\n 0% {\n background-color: #474747;\n }\n 100% {\n background-color: #333333;\n }\n }\n`;","import {useState} from \"react\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {GamblingSessionLimitReachedComponent, LimitType} from \"../../gambling-session/limit-reached/gambling-session-limit-reached.component\";\nimport {DropDownComponent} from \"../../gambling-session/setup/parts/drop-down.component\";\nimport {GamblingSessionSetupComponent} from \"../../gambling-session/setup/gambling-session-setup.component\";\nimport {IGamblingSessionLimitsSetup} from \"../../../services/gambling-session/gambling-session-limits-setup.interface\";\nimport {GamblingSessionLogoutDialog} from \"../../gambling-session/logout/gambling-session-logout-dialog.component\";\n\nenum GamblingSessionDialog {\n Setup = 1,\n IntervalReminder,\n LimitReached,\n Logout\n}\n\nexport const GamblingSessionSetupDialogShowcase: React.FC = () => {\n const services = useServices();\n const [dialogType, setDialogType] = useState(GamblingSessionDialog.Setup);\n const onSetLimits = (limits: IGamblingSessionLimitsSetup) => {\n alert(JSON.stringify(limits));\n };\n // window.TimeSpan = TimeSpan;\n const toggleOpen = () => {\n switch (dialogType) {\n case GamblingSessionDialog.Setup:\n services.dialog.showModal(dialogHandler => (), {\n title: services.translation.translate('GAMBLING_SESSION_SETUP_TITLE'),\n isHighPriority: true,\n mobileCenterHeader: true,\n // onClosedByXButton: () => resolve(GameStepsExecutionResultEnum.Cancel),\n // renderExtraHeaderButtons: () => \n });\n break;\n case GamblingSessionDialog.IntervalReminder:\n services.dialog.showModal(dialogHandler => (), {\n title: services.translation.translate('GAMBLING_SESSION_INTERVAL_REMINDER_TITLE'),\n noDefaultContentPadding: true,\n isHighPriority: true,\n mobileCenterHeader: true,\n });\n break;\n case GamblingSessionDialog.LimitReached:\n services.dialog.showModal(dialogHandler => (), {\n title: services.translation.translate('GAMBLING_SESSION_LOSS_LIMIT_REACHED_TITLE'),\n noDefaultContentPadding: true,\n isHighPriority: true,\n mobileCenterHeader: true,\n });\n break;\n case GamblingSessionDialog.Logout:\n services.dialog.showModal((dialogHandler) => (\n {\n dialogHandler.close();\n }}\n onCancel={() => {\n dialogHandler.close();\n }}\n />\n ), {\n title: services.translation.translate(\"GAMBLING_SESSION_LOGOUT_DIALOG_TITLE\"),\n noDefaultContentPadding: true,\n isHighPriority: true,\n mobileCenterHeader: true,\n // onClosedByXButton: () => {}\n });\n break;\n default:\n break;\n }\n };\n return (
\n
\n {\n setDialogType(value);\n return Promise.resolve({\n cancel: false\n });\n }}\n className=\"showcase-gambling-session-dialog-select\"\n />\n
\n \n
);\n}","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const LaboratoryShowcasePageWrapperBox = styledBox(\"LaboratoryShowcasePageWrapperBox\");","import React from \"react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\n\nexport const GeoLocationBrowserApiTestComponent: React.FC = () => {\n const services = useServices();\n const _onGetGeo = () => {\n const onSuccess = (data: GeolocationPosition) => {\n services.dialog.showSimpleTextModal({\n title: \"Success GEO\",\n text: JSON.stringify({\n latitude: data?.coords?.latitude,\n longitude: data?.coords?.longitude\n }, null, 2)\n })\n }\n\n const onError = (err: GeolocationPositionError) => {\n services.dialog.showSimpleTextModal({\n title: \"Error GEO\",\n text: JSON.stringify({\n code: err?.code,\n message: err?.message\n }, null, 2)\n })\n }\n\n navigator.geolocation.getCurrentPosition(onSuccess, onError);\n }\n\n return (\n \n );\n}","import styled from \"styled-components\";\n\nexport const TextareaBox = styled.textarea`\n padding: 10px;\n\n font-size: 1.5rem;\n\n color: ${({theme}) => theme.colors.textLight};\n background-color: ${props => props.theme.colors.backgroundDark};\n\n border-radius: ${({theme}) => theme.layout.border.radius};\n border-color: ${({theme}) => theme.colors.boxBorderContrast};\n border-width: 2px;\n border-style: solid;\n`;","import styled from \"styled-components\";\n\nexport const Label = styled.label`\n font-size: 1.6rem;\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseConfigurationBox = styledBox(\"ShowcaseConfigurationBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseContentContainerBox = styledBox(\"ShowcaseContentContainerBox\");","import {useServices} from \"../../../react-hooks/use-services.hook\";\nimport React, {useState} from \"react\";\nimport {IStandardToastDefinition} from \"../../../services/toaster/toaster.service.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {TextareaBox} from \"../../../basic-ui-components/form/textarea.box\";\nimport {Label} from \"../boxes/label\";\nimport {ShowcaseConfigurationBox} from \"../boxes/showcase-configuration/showcase-configuration.box\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\n\nconst BASE_CONTENT = {\n title: 'Test toaster',\n message: 'This is an example for standard toaster',\n showProgressBar: true,\n showDefaultImage: true,\n showDefaultButton: false,\n};\nconst BASE_BUTTON = {\n text: 'Close toaster',\n onClick: (closeToast) => {closeToast()}\n};\n\nexport const ToasterShowcase: React.FC = () => {\n const [toasterOpt, setToasterOpt] = useState(BASE_CONTENT);\n const services = useServices();\n\n const onChangeInput = (ev) => {\n const value = ev.target.type === 'checkbox' ? ev.target.checked : ev.target.value;\n const field = ev.target.name;\n setToasterOpt({...toasterOpt, [field]: value});\n };\n\n const showToaster = () => {\n const customizeToasterOptions: IStandardToastDefinition = {\n contentProps: {\n title: toasterOpt.title,\n message: toasterOpt.message,\n image: toasterOpt.showDefaultImage && 'DEFAULT_TOAST_IMAGE',\n button: toasterOpt.showDefaultButton && BASE_BUTTON\n },\n toastOptions: {\n timeout: toasterOpt.showProgressBar && TimeSpan.fromMilliseconds(5000)\n }\n };\n\n services.toaster.showStandardToast(customizeToasterOptions);\n };\n\n const closeToasters = () => {\n services.toaster.removeAllToasts()\n };\n\n return (<>\n \n \n

Title:

\n \n
\n\n \n

Message:

\n \n
\n\n \n

Options:

\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n
\n\n \n \n \n \n \n );\n}","import React, {PropsWithChildren} from \"react\";\nimport { observer } from \"mobx-react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { action, observable, runInAction, makeObservable } from \"mobx\";\nimport { BurnoutAnimationWrapper } from \"../../burnout/burnout-animation/burnout-animation-wrapper.component\";\nimport { Button } from \"../../../basic-ui-components/button/base/button.component\";\nimport {Label} from \"../boxes/label\";\n\nenum BurnoutAnimationScenario {\n GotOMG,\n NotYetOMG\n}\n\n@observer\nexport class BurnoutAnimationShowcase extends OrbitComponent {\n constructor(props: PropsWithChildren) {\n super(props);\n\n makeObservable(this);\n }\n\n\n @observable.ref\n private _paused = false;\n @observable.ref\n private _renderAnimation = false;\n @observable.ref\n private _scenario = BurnoutAnimationScenario.GotOMG;\n\n private checkOmg = () => {\n return (this._scenario === BurnoutAnimationScenario.GotOMG);\n }\n\n @action.bound\n private togglePauseAnimation = () => {\n this._paused = !this._paused;\n };\n\n @action.bound\n private toggleRenderAnimation = () => {\n this._renderAnimation = !this._renderAnimation;\n }\n\n\n render() {\n return
\n
Dismiss type:\n {[\n [BurnoutAnimationScenario.GotOMG, \"Got OMG\"],\n [BurnoutAnimationScenario.NotYetOMG, \"Not Yet OMG\"]\n ].map((scenario) =>\n
\n {\n runInAction(() => {\n this._scenario = parseInt(ev.target.value) as BurnoutAnimationScenario\n })\n }}\n />\n \n
\n )}\n
\n
\n \n {this._renderAnimation ? : null}\n
\n
Known issues: On iOS the fade animation and floating button animation have some problems. Don't try to\n change the orientation of the device while the animation is playing\n
\n\n {this._renderAnimation ? : null}\n
;\n }\n}\n","import React from \"react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { Button } from \"../../../basic-ui-components/button/base/button.component\";\n\nconst ONBOARDING_TOUR_ALREADY_SHOWN = \"onboarding_tour_already_shown\";\n\nexport class OnboardingTourShowcase extends OrbitComponent {\n\n private openOnboarding = () => {\n this.services.onboardingTour.open();\n }\n\n render() {\n let onboardingAlreadyShown = this.services.localStorage.getItem(ONBOARDING_TOUR_ALREADY_SHOWN);\n if (onboardingAlreadyShown) {\n return
\n Onboarding tour was already presented to this user;\n \n
;\n }\n if (!this.services.onboardingTour.enabled) {\n return
\n Onboarding tour is not available\n
;\n }\n return
\n \n
\n }\n}","import React, {PropsWithChildren} from \"react\";\nimport { observer } from \"mobx-react\";\nimport { observable, runInAction, makeObservable } from \"mobx\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport {ThemeDefaultIcons} from '../../../themes/defaults/icons-registry';\nimport { Label } from \"../boxes/label\";\nimport {Select} from \"../../../basic-ui-components/form/select.component\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\n\nenum AvailableSizes {\n Default = \"default\",\n Rem2 = \"2rem\",\n Rem4 = \"4rem\",\n Rem6 = \"6rem\",\n Rem12 = \"12rem\"\n}\n\n@observer\nexport class IconsShowcase extends OrbitComponent {\n @observable.ref\n private color: string = \"#fff\";\n\n @observable.ref\n private size = AvailableSizes.Default;\n\n constructor(props: PropsWithChildren) {\n\n super(props);\n\n makeObservable(this);\n }\n\n componentDidMount() {\n super.componentDidMount();\n runInAction(() => {\n this.color = this.services.theme.currentTheme.colors.brandSecondary;\n })\n }\n\n private getIconSizeProps(inputSize: AvailableSizes) {\n switch (inputSize) {\n case AvailableSizes.Rem2:\n return 2;\n case AvailableSizes.Rem4:\n return 4;\n case AvailableSizes.Rem6:\n return 6;\n case AvailableSizes.Rem12:\n return 12;\n default:\n return undefined;\n }\n }\n\n render() {\n return <>\n \n
\n {\n runInAction(() => {\n this.color = this.services.theme.currentTheme.colors.brandSecondary\n })\n }}\n />\n \n
\n
\n {\n runInAction(() => {\n this.color = this.services.theme.currentTheme.colors.brandPrimary\n })\n }}\n />\n \n
\n
\n \n
\n
\n
\n {Object.keys(ThemeDefaultIcons).map(key => {\n let specialProps: any = {};\n if (key === \"twoCharsIcon\") {\n specialProps = {text: \"test\"};\n }\n if (key === \"locationIcon\") {\n specialProps = {animated: true};\n }\n let TheIcon = this.services.theme.currentTheme.icons[key];\n return ;\n })}\n
\n ;\n }\n}\n","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { Button } from \"../../../basic-ui-components/button/base/button.component\";\nimport {Label} from \"../boxes/label\";\nimport {SetTimeoutType} from \"../../../../common/types/set-timeout-type\";\nimport {PixiSpineAnimation} from \"../../../services/pixi-app/pixi-spine-animation\";\nimport {ShowcaseConfigurationBox} from \"../boxes/showcase-configuration/showcase-configuration.box\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\n\n\ntype PixiAppDestroyerFn = () => void;\ninterface IAnimationDef {\n label: string;\n spineJsonUrl: string;\n width: number;\n height: number;\n};\n\nexport const PixiSpineShowcase = observer(class PixiSpineShowcase extends OrbitComponent {\n\n private _forceCanvas = false;\n private _runAnimationASAP = true;\n private _animationIndex = 0;\n private _animationList: IAnimationDef[] = [{\n spineJsonUrl: this.services.theme.currentTheme.images.animatedIconsPOC.millionaireGenieMegawaysSpineV1.toString(),\n label: \"Genie Megaways, Small, open setup pose with some artifacts (v1)\",\n width: 190, height: 191\n }, {\n spineJsonUrl: this.services.theme.currentTheme.images.animatedIconsPOC.millionaireGenieMegawaysSpineV2.toString(),\n label: \"Genie Megaways, Big, open setup pose\",\n width: 210, height: 290\n }, {\n spineJsonUrl: this.services.theme.currentTheme.images.animatedIconsPOC.millionaireGenieMegawaysSpineV3.toString(),\n label: \"Genie Megaways, Small, open setup pose with some artifacts (v2)\",\n width: 190, height: 191\n }, {\n spineJsonUrl: this.services.theme.currentTheme.images.animatedIconsPOC.millionaireGenieMegawaysSpineV4.toString(),\n label: \"Genie Megaways, Small, closed setup pose, wrong origin\",\n width: 190, height: 191\n }];\n\n private _pixiAppDestroyers: PixiAppDestroyerFn[] = [];\n\n private addPixiAnimation = async (def: IAnimationDef) => {\n if (!this._pixiAppRootEl) {\n return;\n }\n let iconPixiAnimation = new PixiSpineAnimation(this.services, {\n width: def.width, height: def.height, force2DCanvasContext: !!this._forceCanvas\n }, [{name: 'burnoutAnimationResource', jsonUrl: def.spineJsonUrl}], {\n render: ({spineAnimations, loaderResources}) => {\n const spineAnimation = spineAnimations.burnoutAnimationResource;\n // get the animations\n const availableAnimations = loaderResources.burnoutAnimationResource.spineData.animations.map(a => a.name);\n\n // set the position and scale\n // spineAnimation.x = app.screen.width / 2;\n // spineAnimation.y = app.screen.height;\n // spineAnimation.scale.set(0.5);\n\n // play animation\n const runAnimation = () => {\n /* let spineAnimationTrackEntry = */spineAnimation.state.setAnimation(0, availableAnimations[0], false);\n // spineAnimationTrackEntry.timeScale = 0.25;\n // spineAnimationTrackEntry.listener = {\n // event: (entry, event) => {\n // console.log('TRACK ENTRY event', event, 'entry', entry);\n // if (event.stringValue === \"event name\") { do stuff here... }\n // },\n // complete: (entry) => { console.log(\"TRACK ENTRY COMPLETE\", entry); },\n // start: (entry) => { console.log('TRACK ENTRY start ', entry); }, <-- this cannot be trusted. It doesn't fire for the first animation in a track and for any animation set with \"setAnimation\"\n // end: (entry) => { console.log('TRACK ENTRY ended', entry); },\n // dispose: (entry) => { console.log('TRACK ENTRY disposed', entry); },\n // interrupt: (entry) => { console.log('TRACK ENTRY interrupted ', entry); }\n // };\n }\n let animationSchedule: SetTimeoutType;\n\n spineAnimation.state.addListener({\n // event: (entry, event) => {\n // console.log('ANIMATION event', event, 'entry', entry);\n // if (event.stringValue === \"event name\") { do stuff here... }\n // },\n complete: (entry) => {\n // when animation completes, schedule the next iteration\n animationSchedule = setTimeout(runAnimation, 2000);\n },\n // start: (entry) => { console.log('ANIMATION start ', entry); },\n // end: (entry) => { console.log('ANIMATION ended', entry); },\n // dispose: (entry) => { console.log('ANIMATION disposed', entry); },\n // interrupt: (entry) => { console.log('ANIMATION interrupted ', entry); }\n });\n\n if (this._runAnimationASAP) {\n runAnimation();\n } else {\n animationSchedule = setTimeout(runAnimation, 2000);\n }\n\n this._pixiAppDestroyers.push(iconPixiAnimation.dispose);\n\n return () => {\n clearTimeout(animationSchedule);\n animationSchedule = undefined;\n };\n }\n });\n\n iconPixiAnimation.start();\n iconPixiAnimation.attachToDOM(this._pixiAppRootEl);\n };\n\n private removePixiAnimation = (oldest: boolean = true) => {\n let appDestroyer = oldest ? this._pixiAppDestroyers.shift() : this._pixiAppDestroyers.pop();\n if (appDestroyer) {\n appDestroyer();\n appDestroyer = undefined;\n }\n };\n private _pixiAppRootEl: HTMLDivElement | null = null;\n private capturePixiAppRootEl = (el: HTMLDivElement | null) => {\n this._pixiAppRootEl = el;\n };\n render() {\n return <>\n \n \n
\n { this._forceCanvas = e.target.checked; }} defaultChecked={this._forceCanvas}\n />\n \n
\n
\n { this._runAnimationASAP = e.target.checked; }} defaultChecked={this._runAnimationASAP}\n />\n \n
\n
\n \n
{ this._animationList.map((animationDef, i) =>\n
\n { this._animationIndex = i; }}\n />\n \n
\n ) }
\n
\n
\n \n \n \n \n \n
\n\n {/* */}\n ;\n }\n});\n","import styled from \"styled-components\";\n\nexport const BgBox = styled.div`\n background-color: ${({theme}) => theme.colors.background};\n color: ${({theme}) => theme.colors.text};\n`;","import {useState} from \"react\";\nimport {PropsWithChildren} from \"react\";\nimport {ThemeProvider} from \"styled-components\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {FlexContainerBox} from \"../../themes/architecture/css-helpers/flex\";\nimport {BgBox} from \"./boxes/bg.box\";\nimport {Label} from \"./boxes/label\";\n\nexport const ThemeSwitcher: React.FC = (props) => {\n const services = useServices();\n const [guid] = useState(services.tools.getGuid());\n const [theme, setTheme] = useState(\"content\");\n\n function getTheme(key: string) {\n if (key === \"shell\") {\n return services.theme.currentTheme;\n }\n if (key === \"content\") {\n return services.theme.mainContentTheme;\n }\n return services.theme.mainContentTheme;\n }\n\n return
\n \n

Theme:

\n {[\"shell\", \"content\"].map((th) =>\n
\n {\n setTheme(th); \n }}\n />\n \n
\n )}\n
\n\n \n \n {props.children}\n \n \n
;\n};\n","import styled from \"styled-components\";\n\nexport const TextInputBox = styled.input`\n padding: 10px;\n\n font-size: 1.5rem;\n\n color: ${({theme}) => theme.colors.textLight};\n background-color: ${props => props.theme.colors.backgroundDark};\n\n border-radius: ${({theme}) => theme.layout.border.radius};\n border-color: ${({theme}) => theme.colors.boxBorderContrast};\n border-width: 2px;\n border-style: solid;\n`;","import React, {PropsWithChildren} from \"react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {TextInputBox} from \"../../../basic-ui-components/form/textinput.box\";\nimport { observer } from \"mobx-react\";\nimport { observable, runInAction, makeObservable } from \"mobx\";\nimport styled from \"styled-components\"\nimport { ButtonPreset, ButtonSizeVariant, ButtonIconSize, ButtonStroke, IButtonIconProps, ButtonLabelOverflow } from \"../../../basic-ui-components/button/base/button-props.interface\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport {Label} from \"../boxes/label\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\nimport {ShowcaseConfigurationBox} from \"../boxes/showcase-configuration/showcase-configuration.box\";\n\nconst ButtonWrapper = styled.div`\n border: 1px dashed ${({theme}) => theme.colors.text};\n padding: 8px;\n min-width: 400px;\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n min-width: 80%;\n }\n`;\n\n@observer\nexport class ButtonsShowcase extends OrbitComponent {\n constructor(props: PropsWithChildren) {\n super(props);\n\n makeObservable(this);\n }\n\n @observable.ref\n preset: ButtonPreset = \"special\";\n @observable.ref\n sizeVariant: ButtonSizeVariant = \"m\";\n @observable.ref\n withIcon = false;\n @observable.ref\n iconSizeVariant: ButtonIconSize = \"large\";\n @observable.ref\n stroke: ButtonStroke | undefined = undefined;\n @observable.ref\n _iconComponent: IButtonIconProps[\"Component\"]\n @observable.ref\n iconPlacement: IButtonIconProps[\"placement\"] = \"left\";\n @observable.ref\n rounded: boolean | undefined = undefined;\n @observable.ref\n elevated: boolean | undefined = undefined;\n @observable.ref\n labelOverflow: ButtonLabelOverflow = \"expand\";\n @observable.ref\n fullWidth = false;\n @observable.ref\n noRemUnits = false;\n @observable.ref\n disabled = false;\n @observable.ref\n skeleton = false;\n @observable.ref\n buttonLabel = \"Button Label\";\n\n get iconComponent(): IButtonIconProps[\"Component\"] {\n if (!this._iconComponent) {\n return this.services.theme.currentTheme.icons.settingsIcon;\n } else {\n return this._iconComponent;\n }\n\n }\n\n set iconComponent(value: IButtonIconProps[\"Component\"]) {\n runInAction(() => {\n this._iconComponent = value;\n });\n\n }\n\n componentDidMount() {\n super.componentDidMount();\n }\n\n\n render() {\n return \n \n

PRESET:

\n
\n {[\"primary\", \"secondary\", \"special\", \"info\", \"warning\", \"flatStroked\"].map((color) =>\n
\n {\n runInAction(() => {\n this.preset = color as ButtonPreset;\n })\n }}\n />\n \n
\n )}\n
\n
\n \n

Size Variant:

\n
\n {[\"xl\", \"l\", \"m\", \"s\", \"xs\"].map((sizeVariant) =>\n
\n {\n runInAction(() => {\n this.sizeVariant = sizeVariant as ButtonSizeVariant;\n })\n }}\n />\n \n
\n )}\n
\n

Stroke:

\n
\n {[\"heavy\", \"light\", \"none\", \"undefined\"].map((stroke) =>\n
\n {\n runInAction(() => {\n this.stroke = ev.target.value !== \"undefined\" ? ev.target.value as ButtonStroke : undefined;\n })\n }}\n />\n \n
\n )}\n
\n
\n \n

Icon Component:

\n
\n {\n runInAction(() => {\n this.withIcon = !this.withIcon;\n })\n }}\n />\n \n
\n
\n
\n {[\n {name: \"AddIcon\", component: this.services.theme.currentTheme.icons.addIcon},\n {name: \"BackIcon\", component: this.services.theme.currentTheme.icons.backIcon},\n {name: \"CloseIcon\", component: this.services.theme.currentTheme.icons.closeIcon},\n {name: \"InfoIcon\", component: this.services.theme.currentTheme.icons.infoIcon},\n {name: \"SettingsIcon\", component: this.services.theme.currentTheme.icons.settingsIcon}\n ].map((icon) =>\n
\n this.iconComponent = icon.component}\n />\n \n
\n )}\n
\n
\n \n

Icon Size Variant:

\n
\n {[\"large\", \"regular\", \"small\"].map((iconSizeVariant) =>\n
\n {\n runInAction(() => {\n this.iconSizeVariant = iconSizeVariant as ButtonIconSize;\n })\n }}\n />\n \n
\n )}\n
\n

Icon Placement:

\n
\n {[\"left\", \"right\"].map((iconPlacement) =>\n
\n {\n runInAction(() => {\n this.iconPlacement = iconPlacement as IButtonIconProps[\"placement\"];\n })\n }}\n />\n \n
\n )}\n
\n
\n \n
\n

Rounded

\n {[\"true\", \"false\", \"undefined\"].map((rounded) =>\n
\n {\n runInAction(() => {\n this.rounded = ev.target.value === \"undefined\" ? undefined : (ev.target.value === \"true\" ? true : false);\n })\n }}\n />\n \n
\n )}\n
\n
\n
\n

Elevated

\n {[\"true\", \"false\", \"undefined\"].map((elevated) =>\n
\n {\n runInAction(() => {\n this.elevated = ev.target.value === \"undefined\" ? undefined : (ev.target.value === \"true\" ? true : false);\n })\n }}\n />\n \n
\n )}\n
\n
\n \n
\n

Label Overflow

\n {[\"expand\", \"ellipsis\", \"clip\", \"wrap\"].map((labelOverflow) =>\n
\n {\n runInAction(() => {\n this.labelOverflow = labelOverflow as ButtonLabelOverflow;\n })\n }}\n />\n \n
\n )}\n
\n
\n \n
\n {\n runInAction(() => {\n this.noRemUnits = !this.noRemUnits;\n })\n }}\n />\n \n
\n
\n {\n runInAction(() => {\n this.fullWidth = !this.fullWidth;\n })\n }}\n />\n \n
\n
\n {\n runInAction(() => {\n this.disabled = !this.disabled;\n })\n }}\n />\n \n
\n
\n {\n runInAction(() => {\n this.skeleton = !this.skeleton;\n })\n }}\n />\n \n
\n
\n {\n runInAction(() => {\n this.buttonLabel = ev.target.value;\n })\n }}\n />\n
\n
\n\n
\n \n \n {this.buttonLabel}\n \n \n
\n
;\n }\n}\n","import {makeObservable, observable, runInAction} from \"mobx\";\nimport {observer} from \"mobx-react\";\nimport {PropsWithChildren} from \"react\";\nimport styled from \"styled-components\";\nimport {TextInputBox} from \"../../../basic-ui-components/form/textinput.box\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {Label} from \"../boxes/label\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\nimport {ShowcaseConfigurationBox} from \"../boxes/showcase-configuration/showcase-configuration.box\";\n\n\nconst ThemedBox = styled.div<{\n text: string;\n background: string;\n border: string;\n fontPreset: string;\n fontSize: number;\n}>`\n color: ${(p) => p.theme.colors[p.text] || \"transparent\"};\n background-color: ${(p) => p.theme.colors[p.background] || \"transparent\"};\n border: 5px solid ${(p) => p.theme.colors[p.border] || \"transparent\"};\n ${(p) => p.theme.font.presets[p.fontPreset] || p.theme.font.presets.body}\n font-size: ${(p) => p.fontSize || \"1.6\"}rem;\n\n margin: 15px 0;\n padding: 15px;\n\n`;\n\n@observer\nexport class TypographyColorAndPresetShowcase extends OrbitComponent {\n constructor(props: PropsWithChildren) {\n super(props);\n makeObservable(this);\n }\n\n @observable.ref\n background: string = \"background\";\n\n @observable.ref\n textColor: string = \"text\";\n\n @observable.ref\n boxBorder: string = \"boxBorder\";\n\n @observable.ref\n fontPreset: string = \"body\";\n\n @observable.ref\n fontSize: number = 1.6;\n\n render() {\n return \n \n

BACKGROUNDS:

\n
\n {[\n \"brandPrimary\", \"brandPrimaryDark\", \"brandPrimaryLight\", \"brandPrimaryContrast\",\n \"brandSecondary\", \"brandSecondaryDark\", \"brandSecondaryLight\", \"brandSecondaryContrast\",\n \"backgroundDark\", \"backgroundMiddleDark\", \"background\", \"backgroundLight\", \"backgroundHover\", \"backgroundActive\", \"backgroundContrast\",\n \"iconBackgroundActive\", \"logoBackground\"\n ].map((background) =>\n
\n {\n runInAction(() => {\n this.background = background;\n })\n }}\n />\n \n
\n )}\n
\n
\n \n

TEXT COLORS:

\n
\n {[\n \"brandPrimary\", \"brandPrimaryDark\", \"brandPrimaryLight\", \"brandPrimaryContrast\",\n \"brandSecondary\", \"brandSecondaryDark\", \"brandSecondaryLight\", \"brandSecondaryContrast\",\n \"textDark\", \"textMiddleDark\", \"text\", \"textLight\", \"textHover\", \"textActive\", \"textContrast\",\n \"moneyColor\"\n ].map((textColor) =>\n
\n {\n runInAction(() => {\n this.textColor = textColor;\n })\n }}\n />\n \n
\n )}\n
\n
\n \n

BOX BORDER:

\n
\n {[\n \"brandPrimary\", \"brandPrimaryDark\", \"brandPrimaryLight\", \"brandPrimaryContrast\",\n \"brandSecondary\", \"brandSecondaryDark\", \"brandSecondaryLight\", \"brandSecondaryContrast\",\n \"boxBorderDark\", \"boxBorderMediumDark\", \"boxBorder\", \"boxBorderLight\", \"boxBorderLighter\", \"boxBorderContrast\",\n \"modalDialogBorder\"\n ].map((boxBorder) =>\n
\n {\n runInAction(() => {\n this.boxBorder = boxBorder;\n })\n }}\n />\n \n
\n )}\n
\n
\n \n

FONT PRESETS:

\n
\n {[\n \"thin\", \"light\", \"regular\", \"medium\", \"body\", \"bold\", \"black\", \"ultra\", \"secondary\"\n ].map((fontPreset) =>\n
\n {\n runInAction(() => {\n this.fontPreset = fontPreset;\n })\n }}\n />\n \n
\n )}\n
\n
\n {\n runInAction(() => {\n this.fontSize = Math.max(1, Math.min(3, parseFloat(ev.target.value)));\n })\n }}\n /> REM\n
\n
\n\n
\n \n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n \n
\n
\n }\n}\n","import React from \"react\";\nimport { observable, makeObservable } from \"mobx\";\nimport { OrbitComponent } from \"../base-components/orbit-component/orbit-component\";\nimport { observer } from \"mobx-react\";\nimport { Select } from \"../../basic-ui-components/form/select.component\";\nimport {Label} from \"./boxes/label\";\n\ninterface IShowcaseDropdownComponentProps {\n fieldName: string;\n caption: string;\n defaultValue?: T | undefined;\n values: T[];\n onChanged: (fieldName: string, value: T) => void;\n}\n\n@observer\nexport class ShowcaseDropdownComponent extends OrbitComponent> {\n @observable\n currentValue: T = this.props.defaultValue;\n\n constructor(props: IShowcaseDropdownComponentProps) {\n super(props);\n\n makeObservable(this);\n }\n\n render() {\n let optionsTemplate = [undefined].concat(this.props.values).map((value: T | undefined) => {\n const display = value === undefined ? \"NOT SET\" : value.toString().toUpperCase();\n return \n });\n\n return
\n \n {\n this.currentValue = e.target.options[e.target.selectedIndex].value as any;\n this.props.onChanged(this.props.fieldName, this.currentValue);\n }}\n width=\"100%\"\n >\n {optionsTemplate}\n \n
;\n }\n}\n","import React, {PropsWithChildren} from \"react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport { observer } from \"mobx-react\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport styled from \"styled-components\"\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { IModalDialogHandler, ShowModalOptions } from \"../../../services/dialog/dialog.service.interface\";\nimport { Check } from \"@sparkware/app-utils\";\nimport { ShowcaseDropdownComponent } from \"../showcase-dropdown.component\";\nimport { TextInputBox } from \"../../../basic-ui-components/form/textinput.box\";\nimport { TextareaBox } from \"../../../basic-ui-components/form/textarea.box\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\nimport {ShowcaseConfigurationBox} from \"../boxes/showcase-configuration/showcase-configuration.box\";\n\nconst Label = styled.label`\n display: block;\n font-size: 1.6rem;\n`;\n\nconst showEditBox = (options: {\n fieldName: keyof ShowModalOptions;\n caption: string;\n value: string;\n onValueChanged: (fieldName: string, value: string) => void\n}) => {\n return
\n \n {\n options.onValueChanged(options.fieldName, ev.target.value);\n }}\n />\n
;\n}\n\nconst showTextAreaBox = (options: {\n fieldName: string;\n caption: string;\n value: string;\n onValueChanged: (fieldName: string, value: string) => void\n}) => {\n return
\n \n {\n options.onValueChanged(options.fieldName, ev.target.value);\n }}\n />\n
;\n}\n\nconst showBooleanDropDownBox = (options: {\n fieldName: keyof ShowModalOptions;\n caption: string;\n onValueChanged: (fieldName: string, value: boolean) => void,\n defaultValue?: boolean\n}) => {\n return {\n options.onValueChanged(fieldName, value === \"\" ? undefined : value === \"true\");\n }}\n defaultValue={options.defaultValue? options.defaultValue.toString() : undefined}\n />\n}\n\n@observer\nexport class PopoupsShowcase extends OrbitComponent {\n @observable.ref\n private _contentText = `Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit,\nsed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\nUt enim ad minim veniam,\nquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`;\n\n @observable.ref\n private _popupOptions: ShowModalOptions = {\n title: \"Default title\"\n };\n\n private _dialogHandler: IModalDialogHandler;\n\n constructor(props: PropsWithChildren) {\n super(props);\n\n makeObservable(this);\n }\n\n @action.bound\n _onUpdateFieldNameValue(fieldName: keyof ShowModalOptions, value: any) {\n if (Check.isUndefined(value)) {\n delete this._popupOptions[fieldName];\n return;\n }\n\n this._popupOptions[fieldName] = value as never;\n }\n\n @action.bound\n _onUpdateContentValue(fieldName: string, value: any) {\n this._contentText = value;\n }\n\n render() {\n return \n \n {showEditBox({\n fieldName: \"title\",\n caption: \"Title text\",\n value: this._popupOptions.title,\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showTextAreaBox({\n fieldName: \"\",\n caption: \"Content text\",\n value: this._contentText,\n onValueChanged: this._onUpdateContentValue\n }\n )}\n\n \n
\n \n
\n\n \n {showBooleanDropDownBox({\n fieldName: \"hideCloseButton\",\n caption: \"Hide close button\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"hideBorders\",\n caption: \"Hide borders\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"showOpenAndCloseAnimation\",\n caption: \"Show hide and close animation\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"forceTransparentBackground\",\n caption: \"Force transparent background\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"forceTransparentContentBackground\",\n caption: \"Force transparent content background\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"hideDialogHeader\",\n caption: \"Hide dialog header\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"forceCentralization\",\n caption: \"Force centralization\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"disableFullscreenMobile\",\n caption: \"Disable fullscreen on mobile\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"mobileCenterHeader\",\n caption: \"Mobile center header\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"isHighPriority\",\n caption: \"Is high priority\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"shouldBeClosedOnlyByUser\",\n caption: \"Should be closed only by the user\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"forceFullscreenTablet\",\n caption: \"Force fullscreen on tablet\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n \n\n
\n {\n const popupBody = \n
\n
\n {this._contentText}\n
\n
\n
\n \n
\n
;\n\n const options: ShowModalOptions = {\n ...this._popupOptions, onClosed: () => {\n this._dialogHandler = null;\n }\n };\n\n this._dialogHandler = this.services.dialog.showModal(() => popupBody, options);\n }}>\n SHOW POPUP!\n \n
\n \n }\n }","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport styled from \"styled-components\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { IMediaQueries } from \"../../../services/media-query/media-queries.interface\";\n\nconst MQBox = styled.div<{mq: keyof IMediaQueries}>`\n display: inline-block;\n width: 200px;\n margin: 4px 8px 4px 0;\n padding: 5px 0;\n text-align: center;\n font-size: 1.6rem;\n color: ${({theme}) => theme.colors.text};\n border: 2px solid #777;\n border-radius: 4px;\n background-color: black;\n text-decoration: line-through;\n background-color: red;\n\n @media ${({theme, mq}) => theme.mediaQuery[mq]} {\n text-decoration: none;\n background-color: green;\n\n &:hover {\n background-color: darkgreen;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: 45%;\n }\n`;\n\nexport const MediaQueryShowcase = observer(class MediaQueryShowcase extends OrbitComponent {\n\n render() {\n return <>\n
\n \n pointer\n \n \n pointer: fine\n \n \n pointer: coarse\n \n \n pointer: none\n \n
\n
\n \n any-pointer\n \n \n any-pointer: fine\n \n \n any-pointer: coarse\n \n \n any-pointer: none\n \n
\n
\n \n hover: hover\n \n \n hover: none\n \n
\n
\n \n any-hover: hover\n \n \n any-hover: none\n \n
\n ;\n }\n});\n","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport styled from \"styled-components\"\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport Device from \"../../../../sdk/src/utils/device/device\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\nconst Label = styled.span`\n color: ${({theme}) => theme.colors.brandPrimary};\n`;\nconst Value = styled.span`\n color: ${({theme}) => theme.colors.brandSecondary};\n`;\n\ninterface ClientHintsShowcaseProps extends ComponentServicesPick<'clientDevice'> {\n \n}\n\nconst ComponentBody = observer(class ClientHintsShowcase extends OrbitComponent {\n private renderUserAgentString() {\n return
\n
USER AGENT
\n
\n (string) \"{window.navigator.userAgent}\"\n
\n
;\n }\n private renderClientHints() {\n if (!this.props.clientDevice.detected.clientHintsAvailable) {\n return
CLIENT HINTS NOT AVAILABLE
;\n }\n return <>\n
Data taken from
\n
\n
DEVICE
\n
\n (string) \"{this.props.clientDevice.detected.model}\"\n (string) \"{this.props.clientDevice.detected.architecture}\"\n
\n
\n\n
\n
OS:
\n
\n (string) \"{this.props.clientDevice.detected.platform}\"\n (string) \"{this.props.clientDevice.detected.platformVersion}\"\n (string) \"{this.props.clientDevice.detected.bitness}\"\n
\n
\n\n
\n
MOBILE FLAG:
\n
(boolean) {this.props.clientDevice.detected.mobile === true ? \"true\" : (this.props.clientDevice.detected.mobile === false ? \"false\" : \"undefined\")}
\n
\n\n
\n
BROWSER:
\n
(Array<{ brand: string; version: string; }>)\n
(array showing the hierarchy of the browser. For example \"Not A Brand\" > \"Chromium\" > \"Chrome\")
\n {this.props.clientDevice.detected.brands.map((brand, i) => {\n return
{JSON.stringify(brand)}
;\n })}
\n
(browser version, user agent full version): \"{this.props.clientDevice.detected.uaFullVersion}\"
\n
\n ;\n }\n private renderDeviceDetectionData() {\n return <>\n
Data taken from
\n
\n
OS:
\n
\n (string) \"{Device.os.name}\"\n (string) \"{Device.os.version}\"\n
\n
\n
\n
BROWSER:
\n
\n (string) \"{Device.browser.name}\"\n (string) \"{Device.browser.version}\"\n
\n
\n
\n
VIEWPORT:
\n
\n {Device.viewport.width} x {Device.viewport.height}\n
\n
\n ;\n }\n render() {\n return
\n { this.renderUserAgentString() }\n { this.renderClientHints() }\n { this.renderDeviceDetectionData() }\n
;\n }\n});\n\nexport const ClientHintsShowcase = withServices(ComponentBody, ['clientDevice']);","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseWrapperBox = styledBox(\"ShowcaseWrapperBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseLabelBox = styledBox(\"ShowcaseLabelBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseCollapseIndicatorBox = styledBox(\"ShowcaseCollapseIndicatorBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseContentWrapperBox = styledBox(\"ShowcaseContentWrapperBox\");\n","import {useState} from \"react\";\nimport {ILaboratoryShowcase} from \"./laboratory-showcase.inteface\";\nimport {ShowcaseWrapperBox} from \"./boxes/showcase-wrapper/showcase-wrapper.box\";\nimport {ShowcaseLabelBox} from \"./boxes/showcase-label/showcase-label.box\";\nimport {ShowcaseCollapseIndicatorBox} from \"./boxes/showcase-collapse-indicator/showcase-collapse-indicator.box\";\nimport {ShowcaseContentWrapperBox} from \"./boxes/showcase-content-wrapper/showcase-content-wrapper.box\";\n\nexport const LaboratoryShowcaseContainerComponent = (showcase: ILaboratoryShowcase) => {\n const [isOpen, setIsOpen] = useState(false)\n\n const toggleIsOpen = () => {\n setIsOpen(!isOpen)\n }\n\n return (showcase.showcaseDisabled\n ? null\n : \n \n {showcase.title}\n \n {showcase.renderer}\n )\n}","import {observer} from \"mobx-react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {DialogButtonClickHandleResultEnum} from \"../../../services/dialog/dialog.service.interface\";\n\nexport const SimpleMessageDialogShowcase: React.FC = observer(() => {\n const services = useServices();\n const LoremIpsum = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam egestas felis eu enim imperdiet, ut dapibus lectus pellentesque. Morbi vulputate, turpis eu malesuada porta, neque ipsum semper purus, sed tempor neque tortor at mi. Donec eu accumsan nulla, eget suscipit urna. Cras egestas dolor non nisi pellentesque vehicula. Aliquam mattis bibendum nibh ut laoreet. Suspendisse justo enim, porttitor non pharetra id, interdum eget ex. Maecenas aliquet lacinia commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.Nulla vitae libero malesuada sapien finibus commodo et iaculis velit. Proin ultricies tristique sem, dapibus porta augue bibendum non. Morbi molestie lacinia enim. Phasellus quis est ac leo vulputate molestie. Praesent dictum ipsum in lacinia facilisis. Donec ut urna at ligula hendrerit lobortis eget ut leo. Fusce molestie molestie tortor id bibendum. Nulla hendrerit ipsum at interdum iaculis. Aliquam fermentum pretium lectus nec pharetra. Aliquam ligula nunc, sodales eu felis eu, rhoncus maximus justo. Curabitur tempus ex id lectus malesuada sodales id vitae telluDonec interdum, augue ut egestas scelerisque, magna justo eleifend dui, malesuada hendrerit lorem dui at lorem. Donec pulvinar ante quis arcu aliquam tempus. Nullam et diam accumsan ligula commodo dapibus. Mauris pretium ultrices quam sit amet tincidunt. Proin nisi risus, facilisis sed dui id, rutrum dapibus arcu. Nunc ornare tortor et euismod convallis. Ut sed lobortis velit, tempor lacinia ligula. Vestibulum sollicitudin eros vitae dolor condimentum convallis.Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut egestas justo sed tortor blandit sagittis quis ac diam. Quisque pulvinar interdum velit. Etiam id metus nec enim pretium suscipit vel nec purus. Donec fringilla vestibulum nisl, id scelerisque risus blandit eget. Vestibulum id pulvinar arcu. Quisque a erat id augue ullamcorper accumsan eu eget enim.Donec pellentesque vitae tellus ut elementum. Sed nec efficitur urna, quis tincidunt tellus. Pellentesque tempus tempor libero, ut pretium massa dictum in. Cras eu eros nec nulla consequat auctor sit amet non urna. Sed in mauris non nunc rhoncus iaculis. Aliquam erat volutpat. Sed varius tortor eget purus condimentum consectetur. Nunc elit risus, molestie ut fermentum quis, convallis et nisl. Nullam nec varius nulla, ut semper enim. Nam tincidunt nibh velit, nec ultrices leo eleifend id. Donec lobortis turpis arcu, vitae fringilla purus varius in. Nulla facilisi. Aenean consectetur fermentum arcu, ac placerat purus posuere mattis. Donec eros erat, ultricies ut leo eget, pharetra vehicula elit.'\n return (\n
\n {\n const WarningIcon = services.theme.currentTheme.icons.warningSignIcon;\n services.dialog.showSimpleTextModal({\n title: services.translation.translate(\"LICENSE_STATUS\"),\n text: LoremIpsum, \n showEmptyTitle: true,\n icon: ,\n disableFullscreenMobile: true,\n buttons: [\n {\n text: services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n }}\n >\n SHOW POPUP!\n \n
)\n})\n\n","import {LaboratoryShowcasePageWrapperBox} from \"./boxes/page-wrapper/laboratory-showcase-page-wrapper.box\";\nimport {ILaboratoryShowcase} from \"./laboratory-showcase.inteface\";\nimport {GeoLocationBrowserApiTestComponent} from \"./showcases/geo-location-browser-api-test.component\";\nimport {ToasterShowcase} from \"./showcases/toaster-showcase.component\";\nimport {GamblingSessionSetupDialogShowcase} from \"./showcases/gambling-session-setup-dialog-showcase.component\";\nimport {OnboardingTourShowcase} from \"./showcases/onboarding-tour-showcase.component\";\nimport {BurnoutAnimationShowcase} from \"./showcases/burnout-animation-showcase.component\";\nimport {PixiSpineShowcase} from \"./showcases/pixi-spine-showcase.component\";\nimport {ThemeSwitcher} from \"./theme-switcher.component\";\nimport {ButtonsShowcase} from \"./showcases/buttons-showcase.component\";\nimport {TypographyColorAndPresetShowcase} from \"./showcases/typography-color-and-preset-showcase.component\";\nimport {PopoupsShowcase} from \"./showcases/popups-showcase.component\";\nimport {IconsShowcase} from \"./showcases/icons-showcase.component\";\nimport {MediaQueryShowcase} from \"./showcases/media-query-showcase.component\";\nimport {ClientHintsShowcase} from \"./showcases/client-hints-showcase.component\";\nimport {LaboratoryShowcaseContainerComponent} from \"./laboratory-showcase-container.component\";\nimport {SimpleMessageDialogShowcase} from \"./showcases/simple-message-dialog-showcase.component\";\n\nconst SHOWCASES: ILaboratoryShowcase[] = [\n {\n name: \"geoLocation\",\n title: \"Geo Location Browser Api Test\",\n renderer: \n }, {\n name: \"toaster\",\n title: \"Toasters\",\n renderer: \n }, {\n name: \"gamblingSession\",\n title: \"Gambling Session Setup Dialog\",\n renderer: \n }, {\n name: \"onboardingTour\",\n title: \"Onboarding Tour\",\n renderer: \n }, {\n name: \"burnoutAnimation\",\n title: \"Burnout Animation\",\n renderer: \n }, {\n name: \"pixiSpine\",\n title: \"Pixi Spine\",\n renderer: \n }, {\n name: \"buttons\",\n title: \"Buttons\",\n renderer: \n }, {\n name: \"typographyColorAndPreset\",\n title: \"Typography Color And Preset\",\n renderer: ,\n showcaseDisabled: true\n }, {\n name: \"popups\",\n title: \"Popups\",\n renderer: \n },{\n name: \"simpleDialogs\",\n title: \"Simple dialogs\",\n renderer: \n },\n {\n name: \"icons\",\n title: \"Icons\",\n renderer: \n }, {\n name: \"mediaQuery\",\n title: \"Media Query\",\n renderer: \n }, {\n name: \"clientHints\",\n title: \"Client Hints\",\n renderer: \n },\n];\n\nexport function LaboratoryShowcase() {\n return (\n \n {SHOWCASES.map(showcase => LaboratoryShowcaseContainerComponent(showcase))}\n \n );\n}\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoBox = styledBox(\"VideoBox\");\n","import {styledBox} from '../../../../themes/architecture/styled-box';\n\nexport const VideoContainerBox = styledBox(\"VideoContainerBox\");\n","import React, {useCallback, useEffect, useRef} from 'react';\nimport {observer} from 'mobx-react';\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {IVideoPlayer} from '../../../../services/video-live-stream/video-players/video-player.interface';\nimport {VideoBox} from './boxes/video.box';\nimport {VideoPlayButtonBox} from \"../../../video-player/play-button/boxes/video-play-button.box\";\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport {VideoContainerBox} from '../video-container/video-container.box';\nimport {IVideoPlayingService} from \"../../../../services/video-live-stream/video-playing.service.interface\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {IReactionDisposer, reaction} from \"mobx\";\nimport classNames from 'classnames';\n\ninterface VideoComponentProps {\n className?: string;\n gameInfo: GameInfo;\n muted: boolean;\n onError?: (hasError: boolean, retryFn?: (() => void) | undefined) => void;\n onLoading?: (isLoading: boolean) => void;\n onWatchTimeLimitReached?: (watchTimeLimitReached: boolean) => void;\n isInCenterStage: boolean;\n inViewport: boolean;\n display: boolean;\n videoPlayingService: IVideoPlayingService;\n isLastGameType?: boolean;\n loop?: boolean;\n isVideoOnDemand?: boolean;\n}\n\nexport const VideoComponent: React.FC = observer((props) => {\n const services = useServices();\n const videoPlayerRef = useRef(null);\n const videoElementRef = useRef(null);\n const reactionsRef = useRef([]);\n const isAppVisible = props.videoPlayingService.isAppVisible;\n\n const createVideoPlayer = useCallback(() => {\n if(videoElementRef.current) {\n return props.videoPlayingService.getVideoPlayer(props.gameInfo, videoElementRef.current, props.isLastGameType);\n } else {\n return null;\n }\n\n }, [props.gameInfo, props.isLastGameType, props.videoPlayingService]);\n\n useEffect(() => {\n\n const videoPlayer = createVideoPlayer();\n videoPlayerRef.current = videoPlayer;\n\n const videoElement = videoElementRef.current;\n\n return () => {\n videoPlayer?.destroy();\n try {\n if(videoElement) {\n videoElement.poster = \"\";\n videoElement.src = \"\";\n videoElement.load();\n }\n videoElementRef.current = null;\n }\n catch (err){\n services.logger.error('VideoComponent - Failed to cleanup video element', err);\n }\n }\n\n }, [createVideoPlayer, services.logger]);\n\n\n const loadVideo = useCallback(() => {\n videoPlayerRef.current?.load();\n }, []);\n\n const playVideo = useCallback(() => {\n videoPlayerRef.current?.play();\n }, []);\n\n const pauseVideo = useCallback(() => {\n videoPlayerRef.current?.pause();\n }, []);\n\n const retryPlay = useCallback(() => {\n videoPlayerRef.current?.destroy();\n videoPlayerRef.current = createVideoPlayer();\n playVideo();\n }, [createVideoPlayer, playVideo]);\n\n\n\n useEffect(() => {\n\n const reactions = reactionsRef.current;\n\n reactions.push(reaction(() => videoPlayerRef.current?.hasError, (hasError) => {\n props.onError(hasError, hasError ? retryPlay : undefined);\n }));\n\n reactions.push(reaction(() => videoPlayerRef.current?.isLoading, (isLoading) => {\n props.onLoading(isLoading);\n }));\n\n reactions.push(reaction(() => videoPlayerRef.current?.watchTimeLimitReached, (watchTimeLimitReached) => {\n props.onWatchTimeLimitReached(watchTimeLimitReached);\n }));\n\n return () => {\n reactions.forEach(r => r());\n reactionsRef.current = [];\n }\n\n }, [props, retryPlay]);\n\n useEffect(() => {\n\n if(isAppVisible) {\n if (props.isInCenterStage && props.inViewport) {\n playVideo();\n } else if (props.isVideoOnDemand) {\n loadVideo();\n } else {\n pauseVideo();\n }\n } else {\n pauseVideo();\n }\n });\n\n const handlePlayVideoClick = () => {\n if (isAppVisible && props.isInCenterStage && props.inViewport) {\n playVideo();\n videoPlayerRef.current?.logUIAction('info', 'VideoPlayClick');\n services.analytics.sendAnalytics(props.videoPlayingService.gaCategory, \"AUTOPLAY\", \"VIDEO_PLAY_CLICK\", props.gameInfo.gameType, true);\n }\n }\n\n\n const renderPlayerControls = () => {\n if(videoPlayerRef.current?.autoplayAllowed || !videoElementRef.current?.paused) {\n return null;\n } else {\n return ()\n }\n }\n\n return (\n \n \n {renderPlayerControls()}\n \n )\n\n});\n\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const SectionTitleBox = styledBox(\"SectionTitleBox\");","import {CellValueBoolDefaultBox} from './cell-value-bool.default.box';\n\nexport const CellValueBoolBox = CellValueBoolDefaultBox;","import styled from 'styled-components';\n\n//check-div\nexport const CellValueBoolDefaultBox = styled.div`\n width: 13px;\n height: 13px;\n float: right;\n background-image: url(\"${props => props.theme.images.checkMark.toString()}\");\n background-repeat: no-repeat;\n`;","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const CellValueTextBox = styledBox(\"CellValueTextBox\");\n","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const CellTitleBox = styledBox(\"CellTitleBox\");","import React from 'react';\nimport {OrbitComponent} from '../../../../../base-components/orbit-component/orbit-component';\nimport {PreviewFeatureType} from '../../../../../../services/game-preview-features-selector/preview-features/game-preview-feature.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {CellValueBoolBox} from './boxes/cell-value-bool/cell-value-bool.box';\nimport {CellValueTextBox} from './boxes/cell-value-text/cell-value-text.box';\nimport {CellTitleBox} from './boxes/cell-title/cell-title.box';\n\nexport interface GameFeaturePreviewCellComponentProps{\n title: string;\n type: PreviewFeatureType,\n value: any\n}\n\nexport class GameFeatureCellComponent extends OrbitComponent {\n\n private _renderNoInfo() {\n return (-);\n }\n private _renderCheckbox() {\n if(this.props.value) {\n return ();\n }\n\n return this._renderNoInfo();\n }\n\n private _renderDescription() {\n if(Check.isEmpty(this.props.value)) {\n return this._renderNoInfo();\n }\n\n return ({this.props.value});\n }\n\n\n private _renderValue() {\n if(this.props.type === PreviewFeatureType.check) {\n return this._renderCheckbox();\n }\n\n return this._renderDescription();\n }\n\n render() {\n return (\n \n {this.props.title}\n {this._renderValue()}\n \n );\n\n }\n}\n","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const TableContainerBox = styledBox(\"TableContainerBox\");","import React from 'react';\nimport {OrbitComponent} from '../../../../../base-components/orbit-component/orbit-component';\nimport {PreviewFeatureEvaluationResult} from '../../../../../../services/game-preview-features-selector/preview-features/game-preview-feature.interface';\nimport {splitArrayToChunks} from '../../../../../../../utils/array-helper';\nimport {GameFeatureCellComponent} from '../cell/game-feature-cell.component';\nimport {TableContainerBox} from './boxes/table-container/table-container.box';\n\n\nexport interface GameFeaturesPreviewTableComponentProps {\n features: PreviewFeatureEvaluationResult[]\n}\n\nexport class GameFeaturesTableComponent extends OrbitComponent {\n\n private _renderGameInfoTableRow(cells: PreviewFeatureEvaluationResult[]) {\n let key = cells.reduce((acc, curr) => curr.title + '_' + acc, '');\n return (\n \n {cells.map(cell => ())}\n \n );\n }\n\n render() {\n if(this.props.features.length === 0) {\n return null;\n }\n\n let chunks = splitArrayToChunks(this.props.features, 2);\n\n return (\n \n \n {chunks.map(chunk => this._renderGameInfoTableRow(chunk))}\n \n \n );\n }\n}\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const GameDescriptionTextBox = styledBox(\"GameDescriptionTextBox\");","import React from 'react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {Check} from '@sparkware/app-utils';\nimport {GameDescriptionTextBox} from './boxes/game-description-text/game-description-text.box';\nimport {SectionTitleBox} from '../../boxes/section-title/section-title.box';\n\nexport interface GameAboutTextComponentProps {\n aboutText: string\n}\n\nexport class GameAboutComponent extends OrbitComponent {\n render() {\n if(Check.isEmpty(this.props.aboutText)) {\n return null;\n }\n\n return (\n <>\n \n {this.services.translation.translate('ABOUT')}\n \n \n {this.props.aboutText}\n \n \n );\n }\n}\n","import {GameJackpotPreviewDefaultBox} from './game-jackpot-preview.default.box';\n\nexport const GameJackpotPreviewBox = GameJackpotPreviewDefaultBox;","import styled from 'styled-components';\n\n//game-info-jackpot game-preview\nexport const GameJackpotPreviewDefaultBox = styled.div`\n width: 100%;\n`;","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const JackpotAmountPreviewBox = styledBox(\"JackpotAmountPreviewBox\");","import React from 'react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {SectionTitleBox} from '../../boxes/section-title/section-title.box';\nimport {GameJackpotPreviewBox} from './boxes/game-jackpot-preview/game-jackpot-preview.box';\nimport {JackpotAmountPreviewBox} from './boxes/jackpot-amount-preview/jackpot-amount-preview.box';\n\nexport interface GameJackpotPreviewComponentProps {\n gameType: number;\n}\n\nexport class GameJackpotPreviewComponent extends OrbitComponent {\n\n render() {\n //className={'game-info-jackpot game-preview'}\n return (\n \n \n {this.services.translation.translate('GAME_JACKPOT')}\n \n \n \n )\n }\n}\n\n\n","import styled from 'styled-components';\nimport {styledByDevice} from '../../../../themes/architecture/styled-by-device';\n\nconst DefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n`;\n\nconst PcBox = DefaultBox;\nconst MobileBox = styled(DefaultBox)`\n padding: 0 10px 20px;\n`;\n\nexport const GamePreviewInfoContainerDefaultBox = styledByDevice(PcBox, MobileBox);","import {GamePreviewInfoContainerDefaultBox} from './game-preview-info-container.default.box';\n\nexport const GamePreviewInfoContainerBox = GamePreviewInfoContainerDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {GameFeaturesTableComponent} from './features/table/game-features-table.component';\nimport {GameAboutComponent} from './about/game-about.component';\nimport {GameJackpotPreviewComponent} from './jackpot/game-jackpot-preview.component';\nimport {Check} from \"@sparkware/app-utils\";\nimport {GameInfo} from '../../../../services/games/game-info';\nimport {GamePreviewInfoContainerBox} from './game-preview-info-container.box';\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n//import {RelatedGamesComponent} from './related-games/related-games.component';\n\ninterface GameInfoWrapperComponentProps extends ComponentServicesPick<'gamePreviewFeaturesSelector'> {\n gameInfo: GameInfo;\n gameTitleComponent: React.ReactNode | null;\n}\nclass ComponentBody extends OrbitComponent {\n\n private _renderJackpotPreview(gameInfo: GameInfo) {\n\n if(!gameInfo.hasJackpot){\n return null;\n }\n\n let generalSettings = this.services.configuration.data.generalSettings;\n\n let shouldRenderJackpotPreview = generalSettings?.gamesPreviewConfig?.shouldDisplayJackpot;\n\n if (Check.isNullOrUndefined(shouldRenderJackpotPreview) || shouldRenderJackpotPreview)\n {\n return ;\n }\n\n return null;\n }\n\n render() {\n let gameInfo = this.props.gameInfo;\n\n return (\n \n {this.props.gameTitleComponent}\n \n \n {this._renderJackpotPreview(gameInfo)}\n {/**/}\n \n );\n }\n}\n\nexport const GamePreviewInfoContainerComponent = withServices(ComponentBody, ['gamePreviewFeaturesSelector'])","import styled from 'styled-components';\nimport {styledByDevice} from '../../../../../../../themes/architecture/styled-by-device';\nimport { Image } from '../../../../../../raw-components/image/image';\n\n\n//.info-image-wrapper + info-image\n\nconst DefaultBox = styled(Image)`\n display: block;\n width: 100%;\n height: 100%;\n margin-bottom: 1.1rem;\n`;\n\nconst PcBox = styled(DefaultBox)`\n width: 375px;\n height: 121px;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n width: 285px;\n height: 92px;\n }\n`;\n\nconst MobileBox = styled(DefaultBox)`\n opacity: 0.7;\n`;\n\nexport const StripeImageDefaultBox = styledByDevice(PcBox, MobileBox);","import {StripeImageDefaultBox} from './stripe-image.default.box';\n\nexport const StripeImageBox = StripeImageDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {StripeImageBox} from './boxes/stripe-image/stripe-image.box';\n\nexport interface GameImagePreviewComponentProps {\n gameInfo: GameInfo;\n}\n\nexport const GameStripeImageComponent = observer(\n class GameStripeImageComponent extends OrbitComponent {\n\n render() {\n let gameInfo = this.props.gameInfo;\n let imageSrc = gameInfo.stripImage ? gameInfo.stripImage : gameInfo.stripeImageFallback;\n // I noticed that sometimes react doesn't re render this component even if a different gameInfo is provided.\n // Setting key={gameInfo.gameType} seems to overcome this issue\n return (\n \n );\n }\n }\n);\n\n","import {TrailerDefaultBox} from './trailer.default.box';\n\nexport const TrailerBox = TrailerDefaultBox;","import styled from 'styled-components';\n\n//.info-video-wrapper + info-movie\nexport const TrailerDefaultBox = styled.div`\n width: 100%;\n height: 100%;\n margin-bottom: 1.1rem;\n`;","import React from 'react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {GameStripeImageComponent} from '../stripe-image/game-stripe-image.component';\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {TrailerBox} from './boxes/trailer/trailer.box';\n\nexport interface GameTrailerPreviewComponentProps {\n gameInfo: GameInfo;\n}\nexport const GameTrailerComponent = observer(\n class GameTrailerComponent extends OrbitComponent {\n\n render() {\n let gameInfo = this.props.gameInfo;\n\n //we used here key={gameInfo.gameType} to make react re render the component when a different gameInfo is provided\n return (\n \n \n \n );\n }\n }\n);\n","import * as React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {GameStripeImageComponent} from './stripe-image/game-stripe-image.component';\nimport {GameTrailerComponent} from './trailer/game-trailer.component';\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../../services/games/game-info';\n\nexport interface GameImageContainerComponentProps {\n gameInfo: GameInfo;\n}\n\nexport const TrailerOrStripeImageComponent = observer(\n class TrailerOrStripeImageComponent extends OrbitComponent {\n render() {\n if (this.props.gameInfo.hasVideoTrailer) {\n return (\n \n );\n } else {\n return (\n \n );\n }\n }\n }\n);\n","import styled from \"styled-components\";\nimport {LIVE_CASINO_PAGE_WRAPPER} from \"../../../../themes/css-global-classes\";\n\nexport const LobbyHeaderTitleContainerBox = styled.div`\n display: flex;\n width: 100%;\n min-height: 4rem;\n padding-left: 4rem;\n padding-right: 4rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-left: 1rem;\n padding-right: 1rem;\n margin-bottom: 1rem;\n }\n\n .${LIVE_CASINO_PAGE_WRAPPER} & {\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin-bottom: 0;\n }\n }\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const LobbyHeaderTitleBox = styledBox(\"LobbyHeaderTitleBox\");\n","import styled from \"styled-components\";\nimport {Color} from \"../../../../common/utils/color-util\";\nimport {GAMING_HISTORY_PAGE, SESSION_HISTORY_PAGE, STICKY, GAMES_OPEN_SESSIONS_PAGE} from \"../../../themes/css-global-classes\";\nimport {HEADER_Z_INDEX} from \"../../header/header-consts\";\n\nexport const LobbyHeaderDefaultBox = styled.div<{stickOffset: number;}>`\n display: flex;\n flex-direction: column;\n align-items: center;\n background-color: ${props => props.theme.colors.background};\n position: sticky;\n top: ${({stickOffset}) => (stickOffset - 1)+ \"px\"};\n z-index: ${HEADER_Z_INDEX - 1};\n\n padding-top: 1.4rem;\n padding-bottom: 1.4rem;\n transition: background-color 0.2s linear;\n\n &.${STICKY} {\n background-color: ${props => Color.fromHex(props.theme.colors.backgroundDark, 0.85).hexa()};\n @supports (backdrop-filter: blur(6px)) {\n background-color: ${props => Color.fromHex(props.theme.colors.backgroundDark, 0.5).hexa()};\n backdrop-filter: blur(10px);\n }\n }\n\n .${GAMING_HISTORY_PAGE} &, .${SESSION_HISTORY_PAGE} &, .${GAMES_OPEN_SESSIONS_PAGE} &{\n padding-bottom: 0;\n }\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 1rem;\n padding-bottom: 0;\n &.${STICKY}{\n width:100%;\n }\n }\n`;\n","import styled from \"styled-components\";\nimport {LobbyHeaderDefaultBox} from \"./lobby-header.default.box\";\nimport {STICKY} from \"../../../themes/css-global-classes\";\nimport {Color} from \"../../../../common/utils/color-util\";\nimport {baseColors} from \"../../../themes/definitions/si/base-colors\";\n\nexport const LobbyHeaderSiBox = styled(LobbyHeaderDefaultBox)`\n &.${STICKY} {\n background-color: ${Color.fromHex(baseColors.gray023, 0.85).hexa()};\n @supports (backdrop-filter: blur(6px)) {\n background-color: ${Color.fromHex(baseColors.gray023, 0.5).hexa()};\n backdrop-filter: blur(10px);\n }\n }\n`","import styled from \"styled-components\";\nimport {LobbyHeaderDefaultBox} from \"./lobby-header.default.box\";\nimport {baseColors} from \"../../../themes/definitions/mrgreen/base-colors\";\nimport {Color} from \"../../../../common/utils/color-util\";\nimport {STICKY} from \"../../../themes/css-global-classes\";\n\nexport const LobbyHeaderMrGreenBox = styled(LobbyHeaderDefaultBox)`\n background-color: ${baseColors.gray033};\n &.${STICKY} {\n background-color: ${Color.fromHex(baseColors.gray033, 0.85).hexa()};\n @supports (backdrop-filter: blur(6px)) {\n background-color: ${Color.fromHex(baseColors.black, 0.5).hexa()};\n backdrop-filter: blur(10px);\n }\n }\n`;\n","import styled from \"styled-components\";\nimport {LobbyHeaderDefaultBox} from \"./lobby-header.default.box\";\nexport const LobbyHeaderWsopBox = styled(LobbyHeaderDefaultBox)`\n background-color: #00000099;\n`","import {LobbyHeaderDefaultBox} from \"./lobby-header.default.box\";\nimport {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\nimport {LobbyHeaderSiBox} from \"./lobby-header.si.box\";\nimport {LobbyHeaderMrGreenBox} from \"./lobby-header.mrgreen.box\";\nimport {LobbyHeaderWsopBox} from \"./lobby-header.wsop.box\";\n\nexport const LobbyHeaderBox = styledByTheme(LobbyHeaderDefaultBox)\n .forSI(LobbyHeaderSiBox)\n .forMrGreen(LobbyHeaderMrGreenBox)\n .forWsop(LobbyHeaderWsopBox)\n .apply();\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const LobbyHeaderLineBox = styledBox(\"LobbyHeaderLineBox\");\n","import styled from \"styled-components\";\n\nexport const LobbyHeaderButtonsContainerBox = styled.div`\n display: flex;\n self-justify: flex-end;\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const LobbyHeaderButtonsBox = styledBox('LobbyHeaderButtonsBox');","import React, {PropsWithChildren} from 'react';\nimport {observer} from 'mobx-react';\nimport {IStickyHandler} from '../sticky-handler/sticky-handler.interface';\nimport {LobbyHeaderBox} from \"./boxes/lobby-header.box\";\nimport {LobbyHeaderTitleBox} from \"./boxes/title/lobby-header-title.box\";\nimport {LobbyHeaderLineBox} from \"./boxes/line/lobby-header-line.box\";\nimport classNames from 'classnames';\nimport {STICKY} from \"../../themes/css-global-classes\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {LobbyHeaderButtonsContainerBox} from \"./boxes/buttons/lobby-header-buttons-container.box\";\nimport {LobbyHeaderButtonsBox} from \"./boxes/buttons/lobby-header-button.box\";\nimport {ThemeProvider} from \"styled-components\";\nimport { LobbyHeaderTitleContainerBox } from './boxes/container/lobby-header-title.container.box';\nimport {Nullable} from \"../../../common/types/nullable-types\";\nimport {\n IFilterIndicatorRenderingOptions,\n FilterIndicatorRenderingLocation\n} from \"../../services/games-filter/games-filter.service.interface\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface LobbyHeaderComponentProps extends ComponentServicesPick<'header'>, PropsWithChildren{\n stickyHandler: IStickyHandler;\n title: string;\n showSearchIcon: boolean;\n arenaFiltersRenderingOptions?: Nullable;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n\n const handleSearchClick = async () => {\n await (await services.gameSearch).openSearchResult();\n }\n\n const _renderFiltersIndicatorUnderTheTitle = () => {\n const renderingOptions = services.gamesFilter.renderFiltersIndicator();\n\n if(renderingOptions?.location !== FilterIndicatorRenderingLocation.BelowArenaTitle) {\n return null;\n }\n\n return renderingOptions.reactElement;\n }\n\n const _renderFiltersIndicatorNextToTheTitle = () => {\n const renderingOptions = services.gamesFilter.renderFiltersIndicator();\n\n if(renderingOptions?.location !== FilterIndicatorRenderingLocation.NextToArenaTitle) {\n return null;\n }\n\n return renderingOptions.reactElement;\n }\n\n const _onCaptureElement = (el: HTMLElement | null) => {\n props.stickyHandler.updateElement(el);\n }\n\n const isMobile = services.device.isMobile;\n const lobbyHeaderClasses = classNames('cy-lobby-header', {\n [STICKY]: props.stickyHandler.isSticky\n });\n\n const SearchIcon = services.theme.currentTheme.icons.searchIcon;\n //console.log('HeaderHeight: ' + services.header.headerHeight);\n return (\n \n \n {props.title &&\n \n \n \n {services.translation.translate(props.title)}\n \n {_renderFiltersIndicatorNextToTheTitle()}\n \n { isMobile &&\n \n {\n props.showSearchIcon &&\n \n
\n \n
\n
\n }\n {services.gamesFilter.renderMobileFiltersIndicator()}\n
\n }\n
\n }\n {_renderFiltersIndicatorUnderTheTitle()}\n \n
\n
\n );\n})\n\nexport const LobbyHeaderComponent = withServices(ComponentBody, ['header']);","import { Props as IDotLottiePlayerProps } from '@dotlottie/react-player';\nimport React from 'react';\nimport { OrbitSuspense } from '../base-components/orbit-suspense/orbit-suspense';\n\nconst Player = React.lazy(\n () => import('@dotlottie/react-player').then(({ DotLottiePlayer }) => ({ default: DotLottiePlayer }))\n);\n\nexport const DotLottiePlayer = React.forwardRef((props: IDotLottiePlayerProps, ref: any) => {\n return \n \n ;\n});\n","import React from 'react';\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\n\nexport const LoyaltyBarWrapperComponent = observer(class LoyaltyBarWrapperComponent extends OrbitComponent {\n componentDidMount() {\n super.componentDidMount();\n this.services.loyaltyIndicator.init();\n }\n\n render() {\n return (\n
\n );\n }\n});","import {DialogCloseButtonDefaultBox} from './dialog-close-button.default.box';\n\nexport const DialogCloseButtonBox = DialogCloseButtonDefaultBox;","import styled from 'styled-components';\nimport {XCloseButtonBox} from \"../../../../basic-ui-components/x-close-button/x-close-button.box\";\nexport const DialogCloseButtonDefaultBox = styled(XCloseButtonBox)`\n width: ${props => props.theme.components.modalDialog.closeButtonSize};\n height: ${props => props.theme.components.modalDialog.closeButtonSize};\n`;","import styled, { css } from 'styled-components';\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const dialogTextMixin = css`\n color: ${({theme}) => theme.colors.textLight};\n font-size: 1.5rem;\n text-align: center;\n`;\n\nexport const dialogHighlightedTextMixin = css`\n color: ${props => props.theme.colors.brandPrimary};\n font-size: 1.5rem;\n text-align: center;\n`;\n\nexport const DialogTextBox = styled.div`\n margin-top: 2rem;\n ${dialogTextMixin}\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n ${CssRule.For.landscape.build()} & {\n margin-top: 0.5rem;\n }\n }\n`;\n\nexport const DialogBoldTextBox = styled(DialogTextBox)`\n font-weight: bold;\n ${dialogTextMixin}\n`;\n\nexport const DialogHighlightedTextBox = styled.div`\n margin-top: 2rem;\n ${dialogHighlightedTextMixin}\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n ${CssRule.For.landscape.build()} & {\n margin-top: 0.5rem;\n }\n }\n`;\n\nexport const ListDialogTextBox = styled.div`\n color: ${({theme}) => theme.colors.textContrast};\n margin-top: 4rem;\n font-size: 1.5rem;\n text-align: left;\n`;\n\nexport const DialogDimmedTextBox = styled.div` \n margin-top: 2rem;\n font-size: 1.4rem;\n text-align: center;\n color: ${({theme}) => theme.colors.textMiddleDark};\n `;","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const DialogTitleBox = styledBox(\"DialogTitleBox\");\n","export const APPLY_BORDERS = 'apply-borders';\nexport const APPLY_ANIMATION = 'apply-animation';\nexport const MOBILE_CENTERED_HEADER = 'mobile-centered-header';\nexport const FORCE_TRANSPARENT_BACKGROUND = 'force-transparent-background';\nexport const FORCE_TRANSPARENT_CONTENT_BACKGROUND = 'force-transparent-content-background';\nexport const DISABLE_FULLSCREEN_MOBILE = 'disable-fullscreen-mobile';\nexport const FORCE_CENTRALIZATION = 'force-centralization';\nexport const APPLY_MAX_HEIGHT = 'apply-max-height';\nexport const FORCE_FULLSCREEN_TABLET = 'force-fullscreen-tablet';\nexport const APPLY_MODAL_CLOSING_ANIMATION = 'apply-modal-closing-animation';","import styled from 'styled-components';\nimport {flexColumnContainerMixin, flexRowReverseContainerMixin} from '../../../../themes/architecture/css-helpers/flex';\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const ButtonsWrapperDefaultBox = styled.div<{buttonsOnSeparateLines?: boolean; margin?: string}>`\n width: 100%;\n margin: ${({margin}) => margin ? margin : \"5rem auto 0\" };\n ${({buttonsOnSeparateLines}) => buttonsOnSeparateLines ? flexColumnContainerMixin : flexRowReverseContainerMixin }\n\n ${CssRule.For.mobile.landscape.build()} & {\n margin: 1rem auto 0;\n width: 80%;\n }\n`;\n","import styled from 'styled-components';\nimport {flexGrowItem, flexFixedSizeItem} from '../../../../themes/architecture/css-helpers/flex';\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const ButtonWrapperBox = styled.div<{buttonsOnSeparateLines?: boolean; flexBasis?: string;}>`\n ${flexGrowItem}\n width: ${({buttonsOnSeparateLines}) => buttonsOnSeparateLines ? \"100%\" : \"40%\" };\n`;\n\nexport const ButtonSpacerDefaultBox = styled.div`\n ${flexFixedSizeItem}\n width: 1rem;\n height: 1.5rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n ${CssRule.For.landscape.build()} & {\n height: 0.5rem;\n }\n }\n`;\n","import styled from 'styled-components';\n\nexport const LinkActionBox = styled.button`\n margin: 0 auto;\n\n -webkit-appearance: none;\n -moz-appearance: none;\n background: transparent;\n padding: 5px 0px 0px;\n border: 0;\n border-radius: 0;\n line-height: 1;\n ${({theme}) => theme.font.presets.body};\n font-size: 1.6rem;\n font-weight: 700;\n color: ${({theme}) => theme.colors.brandPrimary};\n text-decoration: underline;\n cursor: pointer;\n`;\n","import styled from 'styled-components';\n\nexport const LinkWrapperDefaultBox = styled.div`\n width: 100%;\n margin-top: 3rem;\n text-align: center;\n`;\n","import React from 'react';\nimport { Button } from '../../basic-ui-components/button/base/button.component';\nimport {ButtonsWrapperDefaultBox} from './boxes/actions/buttons-wrapper.box';\nimport {ButtonWrapperBox, ButtonSpacerDefaultBox} from './boxes/actions/button-wrapper.box';\nimport {LinkActionBox} from './boxes/actions/link-action.box';\nimport {LinkWrapperDefaultBox} from './boxes/actions/link-wrapper.box';\nimport classNames from \"classnames\";\nimport {CyClass} from \"../../../common/cy-classes\";\n\n\nexport interface IModalDialogActionProps {\n text: string;\n onClick(): void;\n className?: string;\n disabled?:boolean;\n}\nexport interface IModalDialogButtonsComponentProps {\n buttonsOnSeparateLines?: boolean;\n primaryAction: IModalDialogActionProps;\n secondaryAction?: IModalDialogActionProps & {useWarningPreset?: boolean};\n linkAction?: IModalDialogActionProps;\n className?: string;\n margin?: string;\n}\n\nexport class ModalDialogActionsComponent extends React.Component {\n render() {\n return <>\n \n \n \n {this.props.primaryAction.text}\n \n \n {this.props.secondaryAction ? <>\n \n {this.props.secondaryAction.text}\n \n : null}\n \n {this.props.linkAction ? \n {this.props.linkAction.text}\n : null}\n ;\n }\n}\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const DialogHeaderBox = styledBox(\"DialogHeaderBox\");\n","import styled from \"styled-components\";\n\nexport const HeaderButtonsContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-end;\n position: absolute;\n right: 10px;\n \n`","import React, {PropsWithChildren} from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {DialogHeaderBox} from '../../boxes/header/dialog-header.box';\nimport {DialogTitleBox} from '../../boxes/title/dialog-title.box';\nimport {DialogCloseButtonBox} from '../../boxes/close-button/dialog-close-button.box';\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {HeaderButtonsContainerBox} from \"../../boxes/header-buttons/header-buttons-container.box\";\n\nexport interface ModalDialogHeaderComponentProps extends PropsWithChildren {\n title?: string;\n hideCloseButton?: boolean;\n onCloseButtonClick?: () => void;\n className?: string;\n renderExtraButtons?: () => React.ReactElement;\n}\nexport class DialogHeaderComponent extends OrbitComponent {\n\n private _renderTitle() {\n if(!this.props.title) {\n return null;\n }\n\n return (\n {this.props.title}\n );\n }\n\n private _renderCloseButton() {\n if(this.props.hideCloseButton) {\n return null;\n }\n\n return (\n \n );\n }\n\n private _renderExtraButtons() {\n if(this.props.renderExtraButtons) {\n return this.props.renderExtraButtons();\n }\n return null;\n }\n\n private _renderButtons() {\n if(this.props.hideCloseButton && !this.props.renderExtraButtons) {\n return null;\n }\n return (\n \n {this._renderExtraButtons()}\n {this._renderCloseButton()}\n \n )\n\n }\n\n private _renderContent() {\n if (this.props.children) {\n return this.props.children\n }\n\n return (\n <>\n {this._renderTitle()}\n {this._renderButtons()}\n \n );\n }\n\n render() {\n if(!this.props.title && this.props.hideCloseButton && !this.props.children) {\n return null;\n }\n\n let height: number | null = null;\n\n return (\n \n {this._renderContent()}\n \n )\n }\n\n}","import React, {PropsWithChildren} from \"react\";\nimport styled from \"styled-components\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\n\ninterface IAspectRatioBoxProps {\n expectedWidth: number;\n expectedHeight: number;\n}\n\nconst AspectRatioBox = styled.div`\n position: relative;\n width: 100%;\n height: 0;\n padding-top: calc(${({expectedWidth, expectedHeight}) => `${expectedHeight} / ${expectedWidth} * 100%`});\n`;\n\ninterface IAspectRatioContentBoxProps {\n isLoading?: boolean;\n useBGColorDuringLoadAnimation?: boolean;\n}\n\nconst AspectRatioContentBox = styled.div`\n position: absolute;\n display: flex;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n opacity: 0;\n\n ${(props) => props.useBGColorDuringLoadAnimation && props.isLoading && `background-color: ${props.theme.colors.backgroundDark}`};\n\n animation: ${({isLoading}) => isLoading ? \"LoadingAnimation 1.5s linear 3 forwards\" : \"RevealAnimation 0.5s ease-out forwards\"};\n\n @keyframes LoadingAnimation {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 1\n }\n 100% {\n opacity: 0;\n }\n }\n\n @keyframes RevealAnimation {\n to {\n opacity: 1;\n }\n }\n`;\n\ninterface IAspectRatioContainerComponentProp extends PropsWithChildren {\n width: number;\n height: number;\n isLoading?: boolean;\n useBGColorDuringLoadAnimation?: boolean;\n}\n\nexport class AspectRatioContainerComponent extends OrbitComponent {\n render() {\n return (\n \n \n {this.props.children}\n \n \n );\n }\n}\n","import React, {PropsWithChildren} from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {TapHandler} from '../../tap-handler/tap-handler.component';\nimport {Check} from '@sparkware/app-utils';\nimport {AnyStyledComponent} from 'styled-components';\nimport styled from 'styled-components';\n\ninterface LinkProps extends PropsWithChildren {\n box?: AnyStyledComponent;\n id?: string;\n onClick?: (event?: any) => void;\n className?: string;\n href?: string;\n enableTap?: boolean;\n preventDefaultOnClick?: boolean\n target?: string;\n itemProp?: string;\n customProps?: {[key: string]: any};\n}\n\nconst DefaultBox = styled.a`\n color: ${props => props.theme.colors.text};\n`;\n\nexport class Link extends OrbitComponent {\n\n private _onClick = (event) => {\n\n if (this.services.miniOrbit.isEnabled && this.props.target === \"_blank\") {\n event.preventDefault();\n this.services.miniOrbit.openUrl(this.props.href);\n\n } else if (Check.isNullOrUndefined(this.props.preventDefaultOnClick) || this.props.preventDefaultOnClick) {\n event.preventDefault();\n }\n\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private _getAnchorProps(): any {\n let result: any = {};\n\n if(this.props.id) {\n result.id = this.props.id;\n }\n if(this.props.className) {\n result.className = this.props.className;\n }\n\n if(this.props.href) {\n result.href = this.services.location.buildFullUri(this.props.href || '/').toString();\n }\n\n if(this.props.target) {\n result.target = this.props.target;\n }\n\n if(this.props.itemProp) {\n result.itemProp = this.props.itemProp;\n }\n\n if (this.props.customProps) {\n result.customProps = this.props.customProps;\n }\n\n return result;\n }\n\n private _renderAnchor(anchorRef: any) {\n const Box = this.props.box || DefaultBox;\n return (\n \n {this.props.children}\n \n );\n }\n\n render() {\n if (!this.props.enableTap) {\n return this._renderAnchor(null);\n }\n\n let anchorRef: any = React.createRef();\n return (\n \n {this._renderAnchor(anchorRef)}\n \n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const MinimumGamblingAgeIconDefaultBox = styled.img<{isShownInHeader: boolean, isWide?: boolean}>`\n height: ${props=> props.isWide === true ? \"33px\" : \"27px\"};\n width: ${props => props.isWide === true ? \"96px\" : (props.isShownInHeader === true ? \"35px\" : \"27px\")};\n min-width: ${props => props.isWide === true ? \"96px\" : \"initial\"};\n`","import styled, {css} from \"styled-components\";\n\nexport const MinimumGamblingAgeDefaultBox = styled.div<{isShownInHeader: boolean, disableClick?: boolean}>`\n display: flex;\n flex-direction: row;\n align-items: center;\n \n ${props => !props.disableClick ? css`\n cursor: pointer;\n \n @media ${({theme}) => theme.mediaQuery.hover}{\n &:hover {\n opacity: 0.5;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.hoverNone}{\n &:active {\n opacity: 0.5;\n }\n }\n ` : null}\n`;","import {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {MinimumGamblingAgeDefaultBox} from \"./minimum-gambling-age.default.box\";\n\nexport const MinimumGamblingAgeBox = styledByTheme(MinimumGamblingAgeDefaultBox)\n .apply();","import {MinimumGamblingAgeIconDefaultBox} from \"./minimum-gambling-age-icon.default.box\";\nimport styled from \"styled-components\";\n\nexport const MinimumGamblingAgeIconSiBox = styled(MinimumGamblingAgeIconDefaultBox)`\n height: 40px;\n width: 40px;\n`","import {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\nimport {MinimumGamblingAgeIconDefaultBox} from \"./minimum-gambling-age-icon.default.box\";\nimport {MinimumGamblingAgeIconSiBox} from \"./minimum-gambling-age-icon.si.box\";\n\nexport const MinimumGamblingAgeIconBox = styledByTheme(MinimumGamblingAgeIconDefaultBox).forSI(MinimumGamblingAgeIconSiBox).apply();","import React, {PropsWithChildren} from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {MinimumGamblingAgeBox} from \"./boxes/minimum-gambling-age.box\";\nimport {MinimumGamblingAgeIconBox} from \"./boxes/icon/minimum-gambling-age-icon.box\";\nimport classNames from 'classnames';\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {BlankHorizontalSeparatorBox} from \"../../../basic-components/blank-separator/blank-horizontal-separator.box\";\n\ninterface MinimumGamblingAgeComponentProps extends PropsWithChildren {\n className?: string;\n iconBox?: React.ComponentType;\n isShownInHeader?: boolean;\n}\n\nexport const MinimumGamblingAgeComponent = observer(\n class MinimumGamblingAgeComponent extends OrbitComponent {\n\n private _onClickHandler = async () => {\n if (this.services.configuration.data.header.responsibleIcons?.ageButton?.disableClick) {\n return;\n }\n\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_responsible_gaming_click');\n await this.services.linksNavigation.openResponsibleGaming();\n }\n\n private _getIconType(): string {\n return this.services.configuration.data.header.responsibleIcons?.ageButton?.iconType;\n }\n\n private _getIcon(): string {\n const age = this.services.regulation.current.responsibleGamingAge;\n switch (this._getIconType()) {\n case 'wide':\n return this.services.theme.currentTheme.images.regulationSpecific.denmark.age18PlusWide.toString();\n case 'flat':\n if(age === 21) {\n return this.services.theme.currentTheme.images.responsibleGambling.age21PlusFlat.toString();\n } else {\n return this.services.theme.currentTheme.images.responsibleGambling.age18PlusFlat.toString();\n }\n case 'capsule':\n return this.services.theme.currentTheme.images.responsibleGambling.age18PlusCapsule.toString();\n default:\n if(age === 21) {\n return this.services.theme.currentTheme.images.responsibleGambling.age21PlusRound.toString();\n } else {\n return this.services.theme.currentTheme.images.responsibleGambling.age18PlusRound.toString();\n }\n }\n }\n\n render() {\n const url = this._getIcon();\n const IconBox = this.props.iconBox ?? MinimumGamblingAgeIconBox;\n const isShownInHeader = this.props.isShownInHeader ?? false;\n return (\n \n \n {this.props.children}\n \n \n );\n }\n }\n);","import styled from \"styled-components\";\n\n\nexport const NetherlandsMinimumGamblingAgeLabelBox = styled.div`\n color: ${props => props.theme.colors.textLight};\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {MinimumGamblingAgeComponent} from \"../../minimum-gambling-age.component\";\nimport {\n BlankHorizontalSeparatorBox\n} from \"../../../../../basic-components/blank-separator/blank-horizontal-separator.box\";\nimport {NetherlandsMinimumGamblingAgeLabelBox} from \"./boxes/netherlands-minimum-gambling-age-label.box\";\n\ninterface NetherlandsMinimumGamblingAgeComponentProps {\n isShownInHeader?: boolean;\n}\n\nexport const NetherlandsMinimumGamblingAgeComponent = observer(class NetherlandsMinimumGamblingAgeComponent extends OrbitComponent {\n render() {\n const isShownInHeader = this.props.isShownInHeader ?? false;\n return (\n \n \n \n Speel bewust\n \n \n );\n }\n});","import styled from \"styled-components\";\nimport {MinimumGamblingAgeIconDefaultBox} from \"../../../boxes/icon/minimum-gambling-age-icon.default.box\";\n\nexport const SwedenMinimumGamblingAgeIconBox = styled(MinimumGamblingAgeIconDefaultBox)<{isShownInHeader: boolean}>`\n height: ${props => props.isShownInHeader === true ? \"2.5rem\" : \"23px\"};\n width: ${props => props.isShownInHeader === true ? \"auto\" : \"35px\"};\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {MinimumGamblingAgeComponent} from \"../../minimum-gambling-age.component\";\nimport {SwedenMinimumGamblingAgeIconBox} from \"./boxes/sweden.minimum-gambling-age-icon.box\";\n\ninterface SwedenMinimumGamblingAgeComponentProps {\n isShownInHeader?: boolean;\n}\n\nexport const SwedenMinimumGamblingAgeComponent = observer(class SwedenMinimumGamblingAgeComponent extends OrbitComponent {\n render() {\n const isShownInHeader = this.props.isShownInHeader ?? false;\n return (\n \n );\n }\n});","import styled from \"styled-components\";\n\n\nexport const DenmarkResponsibleGamingButtonsBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`","import styled from \"styled-components\";\n\nexport const DenmarkResponsibleGamingButtonBaseBox = styled.button<{imageUrl: string}>`\n background-image: url(\"${props => props.imageUrl}\");\n background-repeat: no-repeat;\n background-size: contain;\n cursor: pointer;\n @media ${({theme}) => theme.mediaQuery.hover}{\n &:hover {\n opacity: 0.5;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.hoverNone}{\n &:active {\n opacity: 0.5;\n }\n }\n\n`","import styled from \"styled-components\";\nimport {DenmarkResponsibleGamingButtonBaseBox} from \"../../boxes/denmark.responsible-gaming-button-base.box\";\n\nexport const DenmarkSafeToPlayButtonBox = styled(DenmarkResponsibleGamingButtonBaseBox)`\n width: 40px;\n height: 40px;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: 25px;\n height: 25px;\n }\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {DenmarkSafeToPlayButtonBox} from \"./boxes/denmark.safe-to-play-button.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const DenmarkSafeToPlayButtonComponent = observer(class DenmarkSafeToPlayButtonComponent extends OrbitComponent {\n private _clickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_dk_doga_icon_click');\n await this.services.linksNavigation.openSafeToPlay();\n }\n render() {\n return (\n \n );\n }\n});","import styled from \"styled-components\";\nimport {DenmarkResponsibleGamingButtonBaseBox} from \"../../boxes/denmark.responsible-gaming-button-base.box\";\n\nexport const DenmarkSelfExclusionButtonBox = styled(DenmarkResponsibleGamingButtonBaseBox)`\n width: 50px;\n height: 25px;\n`;\n","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {DenmarkSelfExclusionButtonBox} from \"./boxes/denmark.self-exclusion-button.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const DenmarkSelfExclusionButtonComponent = observer(class DenmarkSelfExclusionButtonComponent extends OrbitComponent {\n private _clickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_dk_stop_spillet_icon_click');\n await this.services.linksNavigation.openSelfExclusion();\n }\n render() {\n return (\n \n )\n }\n});","import styled from \"styled-components\";\nimport {DenmarkResponsibleGamingButtonBaseBox} from \"../../boxes/denmark.responsible-gaming-button-base.box\";\nimport {styledByDevice} from \"../../../../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled(DenmarkResponsibleGamingButtonBaseBox)`\n width: 120px;\n height: 20px;\n`;\n\n\nconst PcBox = DefaultBox;\nconst MobileBox = styled(DefaultBox)`\n width: 90px;\n height: 15px;\n`;\n\nexport const DenmarkSelfTestButtonBox = styledByDevice(PcBox, MobileBox);","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {DenmarkSelfTestButtonBox} from \"./boxes/denmark.self-test-button.box\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const DenmarkSelfTestButtonComponent = observer(class DenmarkSelfTestButtonComponent extends OrbitComponent {\n private _clickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_dk_rofus_icon_click');\n await this.services.linksNavigation.openSelfTest();\n }\n render() {\n return (\n \n )\n }\n});","import styled from \"styled-components\";\nimport {DenmarkResponsibleGamingButtonBaseBox} from \"../boxes/denmark.responsible-gaming-button-base.box\";\n\nexport const DenmarkSecondaryResponsibleGamingButtonBox = styled(DenmarkResponsibleGamingButtonBaseBox)`\n width: 72px;\n height: 35px;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: 48px;\n height: 23px;\n }\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {DenmarkSecondaryResponsibleGamingButtonBox} from \"./denmark.secondary-responsible-gaming-button.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const DenmarkSecondaryResponsibleGamingButtonComponent = observer(class DenmarkSafeToPlayButtonComponent extends OrbitComponent {\n private _clickHandler = async () => {\n await this.services.linksNavigation.openSecondaryResponsibleGaming();\n }\n render() {\n return (\n \n );\n }\n});","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {DenmarkResponsibleGamingButtonsBox} from \"./boxes/denmark.responsible-gaming-buttons.box\";\nimport {\n BlankHorizontalSeparatorBox\n} from \"../../../../../basic-components/blank-separator/blank-horizontal-separator.box\";\nimport {DenmarkSafeToPlayButtonComponent} from \"./safe-to-play-button/denmark.safe-to-play-button.component\";\nimport {DenmarkSelfExclusionButtonComponent} from \"./self-exclusion/denmark.self-exclusion-button.component\";\nimport {DenmarkSelfTestButtonComponent} from \"./self-test-button/denmark.self-test-button.component\";\nimport {\n DenmarkSecondaryResponsibleGamingButtonComponent\n} from \"./responsible-gaming-button/denmark.secondary-responsible-gaming-button.component\";\n\nexport const DenmarkResponsibleGamingButtonsComponent = observer(class DenmarkResponsibleGamingButtonsComponent extends OrbitComponent<{hideSelfExclusionLinks?: boolean}> {\n\n private _renderSelfExclusionButtons() {\n if (this.props.hideSelfExclusionLinks) {\n return null;\n }\n\n return (\n <>\n \n \n \n \n \n );\n }\n\n private _renderSecondaryResponsibleGamblingIcon() {\n return (\n <>\n \n \n \n );\n }\n\n render() {\n return (\n \n {this._renderSecondaryResponsibleGamblingIcon()}\n \n {this._renderSelfExclusionButtons()}\n \n );\n }\n});","import styled from \"styled-components\";\nimport {ACTIVE} from \"../../../../../../themes/css-global-classes\";\n\nexport const PanicButtonSVGIconClassName = \"panic-button-svg-icon\";\n\nexport const PanicButtonBox = styled.div`\n width: 15.7rem;\n height: 2.7rem;\n\n &.${ACTIVE} {\n &::after{\n display: block;\n }\n }\n\n .${PanicButtonSVGIconClassName} {\n width: 100%;\n height: auto;\n }\n \n &::before {\n content: '';\n display: block;\n position: absolute;\n top: 3.9rem;\n width: 15rem;\n height: 0.8rem;\n background: transparent;\n }\n\n &::after{\n display: none;\n content: \" \";\n position: relative;\n left: 3rem;\n top: -0.3rem;\n width: 1px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent ${({theme}) => theme.colors.backgroundContrast} transparent;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow}{\n @media ${({theme}) => theme.mediaQuery.portrait}{\n left: 7.5rem;\n }\n }\n }\n`;\n","export const IN_DETAILED_HISTORY= 'in-detailed-history';\nexport const IN_GAME = \"in-game\";","import styled from \"styled-components\";\nimport {ACTIVE} from \"../../../../../../themes/css-global-classes\";\nimport {IN_DETAILED_HISTORY} from \"../css-classes\";\n\nexport const PanicButtonTooltipBox = styled.div`\n display: none;\n background-color: white;\n text-align: center;\n border-radius: 0.3rem;\n padding: 0.5rem;\n margin-top: 0.7rem;\n cursor: default;\n\n position: absolute !important;\n z-index: 107;\n ${({theme}) => theme.font.presets.body};\n font-size: 1.2rem;\n color: ${({theme}) => theme.colors.textDark};\n\n &.${ACTIVE} {\n display: block;\n }\n\n &.${IN_DETAILED_HISTORY} {\n @media ${({theme}) => theme.mediaQuery.sAndAbove}{\n @media ${({theme}) => theme.mediaQuery.landscape}{\n left: initial;\n transform: translateX(-58%);\n }\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow}{\n @media ${({theme}) => theme.mediaQuery.portrait}{\n left: 1rem;\n width: calc(100% - 2rem);\n box-sizing: border-box;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.hoverNone}{\n padding: 0.5rem 1rem 0.5rem 1rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const PanicButtonPopupBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n padding: 5rem 5rem 0;\n ${({theme}) => theme.font.presets.body};\n font-size: 1.5rem;\n color: ${({theme}) => theme.colors.textLight};\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow } {\n padding: 5rem 2rem 0 2rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const PanicButtonPopupTimeBox = styled.span`\n color: ${({theme}) => theme.colors.brandPrimary}; \n padding-left: 0.5rem;\n padding-right: 0.5rem;\n`;","import styled from \"styled-components\";\n\nexport const PanicButtonPopupOkBox = styled.div`\n width: 100%;\n margin-top: 5rem;\n`;","import {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {PanicButtonPopupBox} from \"./boxes/panic-button-popup.box\";\nimport React from 'react';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {IModalDialogHandler} from \"../../../../../services/dialog/dialog.service.interface\";\nimport {PanicButtonPopupTimeBox} from \"./boxes/panic-button-popup-time.box\";\nimport {PanicButtonPopupOkBox} from \"./boxes/panic-button-popup-ok.box\";\nimport { DialogTextBox } from \"../../../../modal-dialog/boxes/text/dialog-text.box\";\nimport { ModalDialogActionsComponent } from \"../../../../modal-dialog/modal-dialog-actions.component\";\n\ninterface PanicButtonPopupComponentProps{\n textMessage1:string,\n textMessage2:string,\n textMessage3:string,\n dialogHandler: IModalDialogHandler;\n}\n\nexport class PanicButtonPopupComponent extends OrbitComponent{\n\n private _getTime():string{\n const now = new Date();\n return new TimeSpan(0,now.getHours(),now.getMinutes()).toString();\n }\n\n private _closeDialog = () => {\n this.props.dialogHandler.close();\n }\n\n render(){\n return (\n \n {this.props.textMessage1}\n \n {this.props.textMessage2}\n {this._getTime()}\n {this.props.textMessage3}\n \n \n \n \n \n )\n }\n}","import styled from \"styled-components\";\n\nexport const TooltipClickHereBox = styled.span`\n text-decoration: underline;\n font-weight: bold;\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n cursor: pointer;\n margin-bottom: 0;\n`;","import styled from \"styled-components\";\n\nexport const PanicButtonTooltipCloseBox = styled.div`\n position: absolute;\n right: 0.2rem;\n top: 0.1rem;\n width: 1rem;\n height: 1rem;\n cursor: pointer;\n \n &::before, &::after {\n position: absolute;\n content: ' ';\n height: 1rem;\n width: 0.1rem;\n background-color: black;\n }\n &::before {\n transform: rotate(45deg);\n }\n &::after {\n transform: rotate(-45deg);\n }\n`;","import styled from \"styled-components\";\nimport {ACTIVE} from \"../../../../../../themes/css-global-classes\";\n\nexport const PanicButtonMobileOverlayBox = styled.div`\n display: none;\n position:absolute;\n width: 100vw;\n height: 100vh;\n background-color:rgba(0, 0, 0, 0);\n top:0;\n left:0;\n z-index: 106;\n \n &.${ACTIVE}{\n display: block;\n }\n`;","import React from 'react';\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {PanicButtonBox, PanicButtonSVGIconClassName} from \"./boxes/panic-button.box\";\nimport {PanicButtonTooltipBox} from \"./boxes/panic-button-tooltip.box\";\nimport classNames from 'classnames';\nimport {observer} from \"mobx-react\";\nimport {PanicButtonPopupComponent} from \"./panic-button-popup.component\";\nimport {TooltipClickHereBox} from \"./boxes/panic-button-tooltip-click-here\";\nimport {OrbitComponentWithState} from \"../../../../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {ACTIVE} from \"../../../../../themes/css-global-classes\";\nimport {IN_DETAILED_HISTORY} from \"./css-classes\";\nimport {GermanyResponsibleGamingButtonPlacement} from \"../../../../../../common/const/responsible-gaming\";\nimport {PanicButtonTooltipCloseBox} from \"./boxes/panic-button-tooltip-close.box\";\nimport {PanicButtonMobileOverlayBox} from \"./boxes/panic-button-mobile-overlay.box\";\n\ninterface TooltipState {\n isTooltipVisible: boolean\n}\n\nexport interface ResponsibleGamingButtonsGermanyComponentProps {\n placement: GermanyResponsibleGamingButtonPlacement\n}\n\nexport const ResponsibleGamingButtonsGermanyComponent = observer(\n class ResponsibleGamingButtonsGermanyComponent extends OrbitComponentWithState {\n state: TooltipState = {\n isTooltipVisible: false\n };\n\n componentDidMount() {\n super.componentDidMount();\n this.setState({\n isTooltipVisible: false\n })\n }\n\n private _restrictUser(): void {\n this.setState({isTooltipVisible: false});\n this.services.user.panicRestrictUser().then((data) => {\n console.log(data);\n this._openPopup();\n }).catch((err) => {\n console.log(err);\n });\n this._sendAnalytics(\"activate\");\n }\n\n private _openPopup() {\n this.services.dialog.showModal((dialogHandler) =>\n ,\n {\n title: this.services.translation.translate(\"panic_restriction_popup_title\"),\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: true,\n isHighPriority: true\n })\n }\n\n private _onMouseEnterPanicBtn() {\n if(!this.services.device.os.isMobileOS){\n this.setState({isTooltipVisible: true});\n this._sendAnalytics(\"click\");\n }\n }\n\n private _onMouseLeavePanicBtn() {\n if(!this.services.device.os.isMobileOS) {\n this.setState({isTooltipVisible: false});\n }\n }\n\n private _closeToolTip(event) {\n event.stopPropagation();\n this.setState({isTooltipVisible: false});\n }\n\n private onClickPanicBtn() {\n if (!this.state.isTooltipVisible) {\n this.setState({isTooltipVisible: true});\n this._sendAnalytics(\"click\");\n }\n }\n\n private _sendAnalytics(label: string) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\", \"Header\", \"Icon_panic_\" + label);\n }\n\n private _renderCloseBtn() {\n if (!this.services.mediaQuery.hover) {\n return this._closeToolTip(event)} />\n }\n return null;\n }\n\n private _renderTooltipClickHere() {\n if (this.services.mediaQuery.sAndBelow && this.services.mediaQuery.portrait) {\n return (
{this._getTooltipBox()}
);\n } else {\n return this._getTooltipBox();\n }\n }\n\n private _getTooltipBox() {\n return this._restrictUser()}>klicken Sie hier.\n }\n\n private _renderMobileOverlay() {\n if (this.services.device.os.isMobileOS) {\n return this._closeToolTip(event)} />\n }\n return null;\n }\n\n render() {\n const PanicButtonIcon = this.services.theme.currentTheme.icons.panicButtonRegulationIcon;\n return (\n \n this._onMouseEnterPanicBtn()}\n onMouseLeave={() => this._onMouseLeavePanicBtn()}\n onClick={() => this.onClickPanicBtn()}>\n \n \n
\n Um eine 24-stündige Spielpause einzulegen,\n {this._renderTooltipClickHere()}\n {this._renderCloseBtn()}\n
\n \n
\n {this._renderMobileOverlay()}\n
\n )\n }\n });","import styled from \"styled-components\";\n\nexport const NetherlandsSelfTestButtonBox = styled.button`\n width: 105px;\n height: 32px;\n cursor: pointer;\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {NetherlandsSelfTestButtonBox} from \"./boxes/netherlands.self-test-button.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const NetherlandsSelfTestButtonComponent = observer(class NetherlandsSelfTestButtonComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_ksa_click');\n await this.services.linksNavigation.openSelfTest();\n }\n render() {\n return (\n \n \n \n \n \n \n \n );\n }\n});","import styled from \"styled-components\";\n\nexport const OntarioResponsibleGamingButtonsBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`","import styled, {css} from \"styled-components\";\n\ninterface OntarioSafeToPlayButtonBoxProps {\n isShownInHeader: boolean\n}\n\nexport const OntarioSafeToPlayButtonBox = styled.button`\n width: 175px;\n height: 35px;\n background-image: url(\"${props => props.theme.images.regulationSpecific.ontario.safeToPlayButton.toString()}\");\n background-size: contain;\n background-repeat: no-repeat;\n cursor: pointer;\n ${props => !props.isShownInHeader && css`background-position: center center`}\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n height: 25px;\n }\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n background-position: center center\n }\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {OntarioSafeToPlayButtonBox} from \"./boxes/ontario.safe-to-play-button.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\ninterface OntarioSafeToPlayButtonComponentProps{\n isShownInHeader: boolean\n}\n\nexport const OntarioSafeToPlayButtonComponent = observer(class OntarioSafeToPlayButtonComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_ontario_safe_to_play_icon_click');\n await this.services.linksNavigation.openSafeToPlay();\n }\n\n render() {\n return (\n \n )\n }\n});","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {OntarioResponsibleGamingButtonsBox} from \"./boxes/ontario.responsible-gaming-buttons.box\";\nimport {OntarioSafeToPlayButtonComponent} from \"./safe-to-play/ontario.safe-to-play-button.component\";\n\ninterface OntarioResponsibleGamingButtonsComponentProps{\n isShownInHeader?: boolean\n}\n\nexport const OntarioResponsibleGamingButtonsComponent = observer(class OntarioResponsibleGamingButtonsComponent extends OrbitComponent {\n render() {\n const isShownInHeader = this.props.isShownInHeader ?? false;\n return (\n \n \n \n );\n }\n});","import styled from \"styled-components\";\n\nexport const SwedenResponsibleGamingButtonsBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`","import styled, {css} from \"styled-components\";\n\nexport const SwedenResponsibleGamingButtonSBGIconClassName = \"sweden-responsible-gaming-button-svg-icon\";\n\nexport const SwedenResponsibleGamingButtonBaseBox = styled.button<{useIconsOnly: boolean}>`\n background-repeat: no-repeat;\n background-size: contain;\n cursor: pointer;\n\n @media ${({theme}) => theme.mediaQuery.hover}{\n &:hover {\n opacity: 0.5;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.hoverNone}{\n &:active {\n opacity: 0.5;\n }\n }\n \n .${SwedenResponsibleGamingButtonSBGIconClassName} {\n width: 100%;\n height: auto;\n }\n \n ${props => props.useIconsOnly\n ? css`\n width: 25px;\n height: 24px;\n `\n : css`\n width: 100px;\n height: 30px;\n `\n }\n`","import styled, {css} from \"styled-components\";\nimport {SwedenResponsibleGamingButtonBaseBox} from \"../../boxes/sweden.responsible-gaming-button-base.box\";\n\ninterface SwedenSelfExclusionButtonBoxProps{\n isShownInHeader:boolean;\n useIconsOnly: boolean;\n}\n\nexport const SwedenSelfExclusionButtonBox = styled(SwedenResponsibleGamingButtonBaseBox)`\n ${props => props.isShownInHeader ? css`\n width: 8.5rem;\n height: 2.5rem;\n `: null}\n \n`;","import React from \"react\";\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\nimport {SwedenSelfExclusionButtonBox} from \"./boxes/sweden.self-exclusion-button.box\";\nimport {SwedenResponsibleGamingButtonSBGIconClassName} from \"../boxes/sweden.responsible-gaming-button-base.box\";\n\ninterface SwedenPanicButtonComponentProps {\n useIconsOnly: boolean;\n isShownInHeader: boolean;\n}\n\nexport const SwedenSelfExclusionButtonComponent = observer(\n class SwedenSelfExclusionButtonComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_panic_click');\n\n await this.services.linksNavigation.openSelfExclusion();\n };\n\n render() {\n const SelfExclusionIcon = this.services.theme.currentTheme.icons.selfExclusionRegulationIcon;\n const SelfExclusionSymbolIcon = this.services.theme.currentTheme.icons.selfExclusionRegulationSymbolIcon;\n\n return (\n \n {this.props.useIconsOnly ? \n : }\n )\n }}\n);","import styled, {css} from \"styled-components\";\nimport {SwedenResponsibleGamingButtonBaseBox} from \"../../boxes/sweden.responsible-gaming-button-base.box\";\n\nexport const SwedenGamingLimitsButtonBox = styled(SwedenResponsibleGamingButtonBaseBox)<{useIconsOnly: boolean, isShownInHeader: boolean}>`\n ${props => props.useIconsOnly\n ? css`\n width: 26px;\n height: 22px;\n `\n : css`\n width: 120px;\n `\n }\n \n ${props => props.isShownInHeader ? css`\n width: 10rem;\n height: 2.5rem;\n `: null}\n`;","import React from \"react\";\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\nimport {SwedenGamingLimitsButtonBox} from \"./boxes/sweden.gaming-limits-button.box\";\nimport {CHANNEL_ELEMENTS} from \"../../../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType, ControlCenterOpenSource} from \"@sparkware/uc-sdk-core\";\nimport {SwedenResponsibleGamingButtonSBGIconClassName} from \"../boxes/sweden.responsible-gaming-button-base.box\";\n\ninterface SwedenGamingLimitsButtonComponentProps {\n useIconsOnly: boolean;\n isShownInHeader: boolean;\n}\n\nexport const SwedenGamingLimitsButtonComponent = observer(\n class SwedenGamingLimitsButtonComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_deposit_limits_click');\n\n await (await this.services.externalLinks).openGameLimits({\n channelArea:AreaType.button,\n channelElement:CHANNEL_ELEMENTS.gamesLimitsGameButton,\n source: ControlCenterOpenSource.RgPolicy\n });\n }\n\n render() {\n const GamingLimitIcon = this.services.theme.currentTheme.icons.gamingLimitRegulationIcon;\n const GamingLimitSymbolIcon = this.services.theme.currentTheme.icons.gamingLimitRegulationSymbolIcon;\n\n return (\n \n {this.props.useIconsOnly ? \n : }\n )\n\n }\n }\n);","import styled, {css} from \"styled-components\";\nimport {SwedenResponsibleGamingButtonBaseBox} from \"../../boxes/sweden.responsible-gaming-button-base.box\";\n\nexport const SwedenSelfTestButtonBox = styled(SwedenResponsibleGamingButtonBaseBox)<{useIconsOnly: boolean, isShownInHeader: boolean}>`\n ${props => props.isShownInHeader ? css`\n width: 8.5rem;\n height: 2.5rem;\n `: null}\n`;","import React from \"react\";\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\nimport {SwedenSelfTestButtonBox} from \"./boxes/sweden.self-test-button.box\";\nimport {SwedenResponsibleGamingButtonSBGIconClassName} from \"../boxes/sweden.responsible-gaming-button-base.box\";\n\ninterface SwedenSelfTestButtonComponentProps {\n useIconsOnly: boolean;\n isShownInHeader: boolean;\n}\nexport const SwedenSelfTestButtonComponent = observer(\n class SwedenSelfTestButtonComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_self_test_click');\n this.services.analytics.sendElasticInfoEvent({\n eventType: 'sweden_self_test',\n category: 'Navigation',\n action: 'Header',\n label: 'Icon_self_test_click'\n },true);\n\n await this.services.linksNavigation.openSelfTest();\n }\n\n render() {\n const SelfTestIcon = this.services.theme.currentTheme.icons.selfTestRegulationIcon;\n const SelfTestSymbolIcon = this.services.theme.currentTheme.icons.selfTestRegulationSymbolIcon;\n\n return (\n \n {this.props.useIconsOnly ? \n : }\n )\n\n }\n }\n);","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {SwedenResponsibleGamingButtonsBox} from \"./boxes/sweden.responsible-gaming-buttons.box\";\nimport {SwedenSelfExclusionButtonComponent} from \"./self-exclusion-button/sweden.self-exclusion-button.component\";\nimport {SwedenGamingLimitsButtonComponent} from \"./gaming-limits/sweden.gaming-limits-button.component\";\nimport {SwedenSelfTestButtonComponent} from \"./self-test-button/sweden.self-test-button.component\";\nimport {\n BlankHorizontalSeparatorBox\n} from \"../../../../../basic-components/blank-separator/blank-horizontal-separator.box\";\n\ninterface SwedenResponsibleGamingButtonsComponentProps {\n useIconsOnly: boolean;\n isShownInHeader?: boolean;\n}\nexport const SwedenResponsibleGamingButtonsComponent = observer(\n class SwedenResponsibleGamingButtonsComponent extends OrbitComponent {\n render() {\n let spaceMultiplier;\n if(this.props.useIconsOnly) {\n spaceMultiplier = 2;\n } else if(this.props.isShownInHeader){\n spaceMultiplier = 0.5;\n } else {\n spaceMultiplier = 1;\n }\n\n\n const isShownInHeader = this.props.isShownInHeader ?? false;\n\n return (\n \n \n \n \n \n \n \n );\n }\n }\n);","import styled, { css } from \"styled-components\";\nimport { styledByTheme } from \"../../../../../../themes/architecture/styled-by-theme\";\n\nconst GenericSideMenuItemIconCommonBox = styled.div<{active?: boolean}>`\n box-sizing: border-box;\n margin: 0 1rem 0 0;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 0 2rem 0 0;\n }\n\n width: 2.4rem;\n height: 2.4rem;\n padding: 0.2rem;\n transition: color 0.2s ease, background-color 0.2s ease, border-bottom 0.2s ease;\n`;\n\nconst GenericSideMenuItemIconDefaultBox = styled(GenericSideMenuItemIconCommonBox)`\n ${(props) => props.active ? css`\n background-color: ${(props) => props.theme.colors.textActive};\n color: ${(props) => props.theme.colors.backgroundDark};\n ` : null}\n border-radius: 50%;\n`;\n\nconst GenericSideMenuItemIconCasino777Box = styled(GenericSideMenuItemIconCommonBox)`\n ${(props) => props.active ? css`\n background-color: ${({theme}) => theme.colors.backgroundActive};\n color: ${(props) => props.theme.colors.textActive};\n ` : null}\n border-radius: 50%;\n`;\n\nconst GenericSideMenuItemIconHarrahsBox = styled(GenericSideMenuItemIconCommonBox)`\n ${(props) => props.active ? css`\n background-color: ${(props) => props.theme.colors.textActive};\n color: ${(props) => props.theme.colors.brandSecondary};\n ` : null}\n border-radius: 50%;\n`;\n\nconst GenericSideMenuItemIconWsopBox = styled(GenericSideMenuItemIconCommonBox)`\n ${(props) => props.active ? css`\n background-color: ${(props) => props.theme.colors.logoBackground};\n color: ${(props) => props.theme.colors.textActive};\n ` : null}\n border-radius: 50%;\n`;\n\nconst GenericSideMenuItemIconSIBox = styled(GenericSideMenuItemIconCommonBox)`\n color: ${(props) => props.active ? props.theme.colors.textLight : props.theme.colors.textMiddleDark};\n`;\n\nconst GenericSideMenuItemIconMrGreenBox = styled(GenericSideMenuItemIconCommonBox)`\n ${(props) => props.active ? css`\n color: ${(props) => props.theme.colors.textActive};\n background-color: transparent;\n ` : null}\n`;\n\n\nexport const GenericSideMenuItemIconBox = styledByTheme(GenericSideMenuItemIconDefaultBox)\n .forCasino777(GenericSideMenuItemIconCasino777Box)\n .forHarrahs(GenericSideMenuItemIconHarrahsBox)\n .forWsop(GenericSideMenuItemIconWsopBox)\n .forSI(GenericSideMenuItemIconSIBox)\n .forMrGreen(GenericSideMenuItemIconMrGreenBox)\n .apply();","import styled from \"styled-components\";\n\nexport const GenericSideMenuItemLabelBox = styled.span`\n flex: 1 0 auto;\n`;\n","import styled from \"styled-components\";\nimport { styledByTheme } from \"../../../../../../themes/architecture/styled-by-theme\";\n\nexport const GenericSideMenuItemDefaultBox = styled.div<{active?: boolean}>`\n display: flex;\n align-items: center;\n padding: 0.8rem 0;\n font-size: 1.4rem;\n line-height: 1;\n color: ${({theme, active}) => active ? theme.colors.textActive: theme.colors.text};\n transition: color 0.2s ease;\n @media ${({theme}) => theme.mediaQuery.lowHeight}, ${({theme}) => theme.mediaQuery.xlAndBelow} {\n padding: 0.6rem 0;\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n ${({theme}) => theme.font.presets.regular};\n padding: 1rem 0;\n color: ${({theme, active}) => active ? theme.colors.textActive: theme.colors.textLight};\n font-weight: 300;\n }\n &:hover {\n color: ${({theme}) => theme.colors.textHover};\n }\n`;\n\nconst GenericSideMenuItemCasino777Box = styled(GenericSideMenuItemDefaultBox)`\n color: ${({theme, active}) => active ? theme.colors.backgroundActive: theme.colors.text};\n`;\n\nconst GenericSideMenuItemHarrahsBox = styled(GenericSideMenuItemDefaultBox)`\n ${({theme}) => theme.font.presets.regular};\n`;\n\nconst GenericSideMenuItemWsopBox = styled(GenericSideMenuItemDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-weight: ${({theme, active}) => active ? 600: 300};\n }\n`;\n\nexport const GenericSideMenuItemBox = styledByTheme(GenericSideMenuItemDefaultBox)\n .forCasino777(GenericSideMenuItemCasino777Box)\n .forHarrahs(GenericSideMenuItemHarrahsBox)\n .forWsop(GenericSideMenuItemWsopBox)\n .apply();\n","import styled from \"styled-components\";\n\nexport const SideMenuItemsListDefaultBox = styled.div`\n border-radius: 5px;\n background-color: ${({theme}) => theme.colors.background};\n margin: 1rem 0 0 0;\n padding: 0;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow}, ${({theme}) => theme.mediaQuery.lowHeight} {\n margin: 1rem 0 0 0;\n }\n`;\n","import styled from \"styled-components\";\nimport { styledByTheme } from \"../../../../themes/architecture/styled-by-theme\";\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\nimport {SideMenuItemsListDefaultBox} from \"./side-menu-items-list.default.box\";\n\nconst SideMenuItemsListHarrahsWsopBox = styled(SideMenuItemsListDefaultBox)`\n margin: 2rem 0 0 0;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow}, ${({theme}) => theme.mediaQuery.lowHeight} {\n margin: 1rem 0 0 0;\n }\n`;\n\nconst SideMenuItemsListMrGreenBox = styled(SideMenuItemsListDefaultBox)`\n background-color: transparent;\n border-bottom: 1px solid ${({theme}) => hexToRgba(theme.colors.boxBorderLighter, 0.2)};\n border-radius: 0;\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nexport const SideMenuItemsListBox = styledByTheme(SideMenuItemsListDefaultBox)\n .forHarrahs(SideMenuItemsListHarrahsWsopBox)\n .forWsop(SideMenuItemsListHarrahsWsopBox)\n .forMrGreen(SideMenuItemsListMrGreenBox)\n .apply();\n","import styled from \"styled-components\";\n\nexport const GenericSideMenuImageBox = styled.div`\n width: 100%;\n display: flex;\n justify-content: center;\n`;","import styled from \"styled-components\";\nimport { styledByTheme } from \"../../../../../../themes/architecture/styled-by-theme\";\nimport {GenericSideMenuItemDefaultBox} from \"./generic-side-menu-item.box\";\n\nconst GenericSideMenuItemPreIconDefaultBox = styled.span<{active: boolean}>`\n`;\n\nconst GenericSideMenuItemPreIconSIBox = styled(GenericSideMenuItemPreIconDefaultBox)`\n position: absolute;\n top: 0;\n bottom: 0;\n left: -1rem;\n width: 4px;\n border-radius: 0.5rem 0 0 0.5rem;\n\n background-color: ${(props) => props.active ? props.theme.colors.textActive : \"transparent\"};\n ${GenericSideMenuItemDefaultBox}:hover & {\n background-color: ${(props) => props.theme.colors.textActive};\n }\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n left: -1.6rem;\n }\n`;\n\nexport const GenericSideMenuItemPreIconBox = styledByTheme(GenericSideMenuItemPreIconDefaultBox)\n .forSI(GenericSideMenuItemPreIconSIBox)\n .apply();\n","import React from 'react';\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {GenericSideMenuImageBox} from \"./boxes/link/generic/generic-side-menu-item-image.box\";\nimport {Image} from \"../../raw-components/image/image\";\nimport {GenericSideMenuItemPreIconBox} from \"./boxes/link/generic/generic-side-menu-item-pre-icon.box\";\nimport {GenericSideMenuItemIconBox} from \"./boxes/link/generic/generic-side-menu-item-icon.box\";\nimport {GenericSideMenuItemLabelBox} from \"./boxes/link/generic/generic-side-menu-item-label.box\";\nimport {Link} from \"../../raw-components/link/link\";\nimport {GenericSideMenuItemBox} from \"./boxes/link/generic/generic-side-menu-item.box\";\nimport {MenuItemComponentProps} from \"../../../services/menu-items-common/menu-item-component-props.interface\";\nimport {get} from 'lodash';\nimport {SideMenuItemContainerComponent} from \"./side-menu-item-container.component\";\n\ninterface GenericSideMenuLinkComponentProps extends MenuItemComponentProps {\n withArrow?: boolean\n className?: string;\n}\n\n@observer\nexport class GenericSideMenuItemComponent extends OrbitComponent {\n\n private _onClickHandler = async () => {\n await this.props.menuItem.execute();\n }\n\n private _renderIcon = () => {\n if(!this.props.menuItem.iconSource || !this.props.menuItem.icon) {\n return null;\n }\n\n if(this.props.menuItem.iconSource === \"themeIcons\") {\n const Icon = this.services.theme.currentTheme.icons[this.props.menuItem.icon];\n if(!Icon) {\n this.services.logger.error(`Menu item ${this.props.menuItem.key} has configured icon ${this.props.menuItem.icon} which does not exist in currentTheme.icons`)\n\n return null;\n }\n\n return ();\n } else if(this.props.menuItem.iconSource === 'themeImages') {\n const imageURI = get(this.services.theme.currentTheme.images, this.props.menuItem.icon, '');\n if(!imageURI) {\n this.services.logger.error(`Menu item ${this.props.menuItem.key} has configured icon ${this.props.menuItem.icon} which does not exist in currentTheme.images`)\n return null;\n }\n return ({this.props.menuItem.iconAltText)\n } else {\n return ({this.props.menuItem.iconAltText)\n }\n }\n\n\n private _renderMenuItemContent = () => {\n\n if(this.props.menuItem.imageOnlyRendering) {\n return (\n \n {this._renderIcon()}\n \n );\n }\n\n return (<>\n \n \n {this._renderIcon()}\n \n \n { this.props.menuItem.text }\n \n { this.props.withArrow ? : null }\n );\n\n }\n\n\n\n render() {\n\n let href = this.props.menuItem.getLinkUrl() ?? \"\";\n if(href) {\n href = this.services.location.buildFullUri(href).toString();\n }\n\n return (\n \n \n \n {this._renderMenuItemContent()}\n \n \n \n );\n }\n}","import styled from \"styled-components\";\nimport { styledByTheme } from \"../../../../themes/architecture/styled-by-theme\";\n\nconst SideMenuItemContainerDefaultBox = styled.li`\n position: relative;\n display: block;\n border: none;\n margin: 1px 1.2rem 0 1.2rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 0 1.6rem;\n }\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n left: 0;\n width: 100%;\n\n box-sizing: content-box;\n height: 1px;\n background-color: ${({theme}) => theme.colors.backgroundDark};\n box-shadow: 0px 0.35px 0px 0px ${({theme}) => theme.colors.boxBorderContrast};\n margin-bottom: 1px;\n }\n\n &:first-child {\n margin-top: 0;\n &::before {\n display: none;\n }\n }\n`;\n\nconst SideMenuItemContainerCasino777Box = styled(SideMenuItemContainerDefaultBox)`\n &::before {\n box-shadow: 0px 0.25px 0px 0px ${({theme}) => theme.colors.boxBorderContrast};\n }\n`;\n\nconst SideMenuItemContainerMrGreenBox = styled(SideMenuItemContainerDefaultBox)`\n &::before {\n display: none;\n }\n`;\n\nconst SideMenuItemContainerSiBox = styled(SideMenuItemContainerDefaultBox)`\n &::before {\n box-shadow: 0px 0.35px 0px 0px ${({theme}) => theme.colors.boxBorderLighter};\n }\n`;\n\nexport const SideMenuItemContainerBox = styledByTheme(SideMenuItemContainerDefaultBox)\n .forCasino777(SideMenuItemContainerCasino777Box)\n .forMrGreen(SideMenuItemContainerMrGreenBox)\n .forSI(SideMenuItemContainerSiBox)\n .apply();\n","import React, {PropsWithChildren} from \"react\";\nimport { observer } from \"mobx-react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { SideMenuItemContainerBox } from \"./boxes/side-menu-item-container.box\";\nimport { CyClass } from \"../../../../common/cy-classes\";\nimport classNames from 'classnames';\n\n\ninterface SideMenuItemContainerComponentProps extends PropsWithChildren {\n className?: string;\n onClick?: () => void;\n}\n\n\n@observer\nexport class SideMenuItemContainerComponent extends OrbitComponent {\n render() {\n\n return \n { this.props.children }\n ;\n }\n}\n","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport { SideMenuItemsListBox } from \"../side-menu-items/boxes/side-menu-items-list.box\";\nimport {CyClass} from '../../../../common/cy-classes';\nimport {MenuItemKey} from \"../../../services/configurations/config-data-sections/generated-config-const\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\nexport interface SideMenuLinksProps extends ComponentServicesPick<'sideMenu'>{\n menuItemKeys: MenuItemKey[];\n className?: string;\n}\n\n\nconst ComponentBody: React.FC = observer((props) => {\n const menuItems = props.menuItemKeys.map(key => props.sideMenu.getMenuItem(key))\n .filter(menuItem => menuItem.display);\n if (menuItems.length === 0) {\n return null;\n }\n\n return (\n \n
    \n {\n menuItems.map(menuItem => (\n \n {menuItem.renderMenuItem()}\n )\n )\n }\n
\n
\n )\n})\n\nexport const SideMenuLinksGroup = withServices(ComponentBody, ['sideMenu']);","import {GameImageDefaultBox} from './game-image.default.box';\n\nexport const GameImageBox = GameImageDefaultBox;","import styled, { css } from 'styled-components';\nimport { GAME_BOX_JACKPOT_TEMPLATE } from '../../../css-constants';\nimport { Image } from '../../../../raw-components/image/image';\n\nexport const commonGameImageCssMixin = css`\n position: absolute;\n width: 100%;\n\n .${GAME_BOX_JACKPOT_TEMPLATE} & {\n max-width: 20rem;\n }\n`;\n\nexport const GameImageDefaultBox = styled(Image)<{hide?: boolean; squareIcon?: boolean;}>`\n opacity: ${({hide}) => hide ? 0: 1};\n ${commonGameImageCssMixin}\n /**\n * BUGFIX-1896215 https://dev.azure.com/888holdings/GamingNDL/_workitems/edit/1896215\n * In a scrolling container (in this case orbit swiper), the first animated icon loaded is above all elements (in this case the static image and the number badge)\n * When swiping, if the first animated icon gets out of the viewport and unloads, the problem is transfered to the second animation.\n * Yes, I know, the solution doesn't have any logic. But I tried this long shot and it worked:\n * https://css-tricks.com/forums/topic/safari-for-ios-z-index-ordering-bug-while-scrolling-a-page-with-a-fixed-element/\n * https://stackoverflow.com/questions/16033416/while-scrolling-on-an-ios-device-the-z-index-of-elements-isnt-working\n * https://stackoverflow.com/questions/9807620/ipad-safari-scrolling-causes-html-elements-to-disappear-and-reappear-with-a-dela\n */\n -webkit-transform: translate3d(0,0,0);\n /**\n * Normally, the radius is taken care in game-image-container.default.box, but for Safari, where we encountered the bug solved above\n * the image is rendered in a separate layer and ignores the border radius of the parent\n */\n ${props => props.squareIcon && css`\n border-radius: 15px;\n @media ${props.theme.mediaQuery.lAndBelow} {\n border-radius: 8px;\n }\n `};\n /**\n * Because YES, Safari is the new Internet Explorer!!!\n */\n`;\n","import {GameImageAnimatedDefaultBox} from './game-image-animated.default.box';\n\nexport const GameImageAnimatedBox = GameImageAnimatedDefaultBox;","import styled from 'styled-components';\nimport { commonGameImageCssMixin } from '../game-image/game-image.default.box';\n\nconst DefaultBox = styled.div`\n ${commonGameImageCssMixin};\n height: 100%;\n`;\n\nexport const GameImageAnimatedDefaultBox = DefaultBox;","import React from 'react';\nimport { OrbitComponent } from '../../../../base-components/orbit-component/orbit-component';\nimport { GameImageAnimatedBox } from '../../boxes/game-image/game-image-animated.box';\nimport { IGameAnimatedIconRegistrationResult } from '../../../../../services/game-animated-icons-manager/game-animated-icons-manager.service.interface';\n\ninterface IGameImageComponentProps {\n animationJsonUrl: string;\n animationTiming: {\n delay: number;\n interval: number;\n }\n width: number;\n height: number;\n useSquareIcons?: boolean;\n onAnimationLoad?(): void;\n onAnimationWillUnload?(): void;\n}\n\nexport class GameImageAnimatedComponent extends OrbitComponent {\n private animatedImageWrapper: HTMLElement | null = null;\n private pixiAnimationRegistration: IGameAnimatedIconRegistrationResult | null = null;\n\n private _captureAnimatedImageElementRef = (element: HTMLElement) => {\n this.animatedImageWrapper = element;\n // cancelAnimationRequest\n if (this.pixiAnimationRegistration) {\n this.pixiAnimationRegistration.unregister();\n this.pixiAnimationRegistration = null;\n }\n if (element) {\n // requestAnimation\n this.loadPixiAnimatedIcon();\n }\n this.animatedImageWrapper = element;\n };\n\n private async loadPixiAnimatedIcon() {\n this.pixiAnimationRegistration = this.services.gameAnimatedIconsManager.register({\n jsonUrl: this.props.animationJsonUrl,\n size: {\n width: this.props.width, height: this.props.height\n },\n wrapper: this.animatedImageWrapper,\n timings: this.props.animationTiming,\n onAnimationLoad: this.props.onAnimationLoad,\n onAnimationWillUnload: this.props.onAnimationWillUnload\n });\n }\n\n render() {\n return \n }\n}\n","import React from 'react';\nimport {Check} from \"@sparkware/app-utils\";\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {GameImageBox} from '../../boxes/game-image/game-image.box';\nimport {GameImageAnimatedComponent} from './game-image-animated.component';\nimport { OrbitComponentWithState } from '../../../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport {SINGLE_GAME_IMAGE} from '../../../css-constants';\nimport { AspectRatioContainerComponent } from '../../../../raw-components/aspect-ratio-container/aspect-ratio-container.component';\n\nexport type GameIconAnimationState = \"ab-disabled\" | \"unavailable\" | \"static\" | \"animated\";\n\nexport interface GameIconComponentProps {\n gameInfo: GameInfo;\n useSquareIcons?: boolean;\n useLazyLoading?: boolean;\n onLoad?(): void;\n onLoadStart?(): void;\n onSettled?(): void;\n onAnimationIconStateChange?(state: GameIconAnimationState): void;\n disableAnimation?: boolean;\n}\n\nexport interface GameIconComponentState {\n loadingAnimation?: boolean;\n animationJsonUrl?: string;\n hideStaticImage?: boolean;\n}\n\nexport const GameImageComponent = observer(\n class GameImageComponent extends OrbitComponentWithState {\n constructor(props: GameIconComponentProps) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {\n if (this.props.onAnimationIconStateChange) {\n this.props.onAnimationIconStateChange(!this.state.animationJsonUrl ? \"unavailable\" : \"static\");\n }\n }\n\n private _loadAnimatedIconTimeout = null;\n\n componentWillUnmount() {\n super.componentWillUnmount();\n if(this._loadAnimatedIconTimeout) {\n clearTimeout(this._loadAnimatedIconTimeout);\n this._loadAnimatedIconTimeout = null;\n }\n }\n private onSettled = () => {\n this.setState({loadingAnimation: false});\n if (this.props.onSettled) {\n this.props.onSettled();\n }\n\n if (this.props.disableAnimation) {\n return;\n }\n\n this.attemptLoadAnimatedIcon();\n };\n\n private attemptLoadAnimatedIcon = () => {\n this._loadAnimatedIconTimeout = setTimeout(() => {\n let data = this.props.gameInfo.getGameImage({squareIcon: this._shouldUseSquareIcons(), animatedIcon: true});\n if (data) {\n this.setState({animationJsonUrl: data});\n }\n this._loadAnimatedIconTimeout = null;\n }, this.props.gameInfo.getAnimatedImageTimings().delay || 0);\n };\n\n private onAnimationLoad = () => {\n this.setState({hideStaticImage: true});\n if (this.props.onAnimationIconStateChange) {\n this.props.onAnimationIconStateChange(\"animated\");\n }\n };\n\n private onAnimationWillUnload = () => {\n this.setState({hideStaticImage: false});\n if (this.props.onAnimationIconStateChange) {\n this.props.onAnimationIconStateChange(\"static\");\n }\n };\n\n private _shouldUseSquareIcons = () => {\n if (Check.isNullOrUndefined(this.props.useSquareIcons)) {\n return this.services.theme.shouldUseSquareIcons;\n }\n return this.props.useSquareIcons;\n }\n\n render() {\n const seoAlt = this.props.gameInfo.getImageSeoAlt();\n const imgUrl = this.props.gameInfo.getGameImage({squareIcon: this._shouldUseSquareIcons()});\n const useLazyLoad = Check.isNullOrUndefined(this.props.useLazyLoading) ? true : this.props.useLazyLoading;\n\n return \n { this.state.animationJsonUrl ? : null }\n {\n this.setState({loadingAnimation: true});\n }}\n onLoad={this.props.onLoad}\n onSettled={this.onSettled}\n />\n ;\n }\n }\n);\n","export const GAME_BOX = 'game-box';\nexport const GAME_BOX_JACKPOT_TEMPLATE = 'game-box-jackpot-template';\nexport const TWO_LINES_TITLE = 'two-lines-title';\nexport const MULTIPLE_LINES_TITLE = 'multiple-lines-title';\nexport const ENABLE_HOVER_ANIMATION = 'enable-hover-animation';\nexport const SWIPER_MODE = 'swiper-mode';\nexport const GAME_IMAGE_CONTAINER = 'game-image-container';\nexport const GRID_GAMES_LIST = 'grid-games-list'; //TODO - I should do something with this when I will refactor games grid list\nexport const SINGLE_GAME_IMAGE = 'single-game-image';\n","import styled from \"styled-components\";\n\nexport const StandardToastImageDefaultBox = styled.div`\n color: ${({theme}) => theme.colors.brandPrimary};\n border: 2px solid ${({theme}) => theme.colors.brandPrimary};\n border-radius: 50%;\n margin-right: 21px;\n padding: 1rem;\n`;\n","import styled from \"styled-components\";\nimport {GAMING_HISTORY_PAGE, NEW_LIVE_CASINO_PAGE, TIPPING_HISTORY_PAGE, GAMES_OPEN_SESSIONS_PAGE} from \"../../../../themes/css-global-classes\";\n\nexport const TopBannerDefaultBox = styled.div`\n position: relative;\n width: 100%;\n transition: all 0.03s ease-in-out;\n padding-bottom: calc(200 / 1750 * 100%);\n\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(204 / 1712 * 100%);\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n padding-bottom: calc(165 / 1024 * 100%);\n .${NEW_LIVE_CASINO_PAGE} &, .${GAMING_HISTORY_PAGE} &, .${TIPPING_HISTORY_PAGE} &, .${GAMES_OPEN_SESSIONS_PAGE} & {\n padding-bottom: calc(122 / 1024 * 100%);\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding-bottom: calc(105 / 414 * 100%);\n .${GAMING_HISTORY_PAGE} &, .${TIPPING_HISTORY_PAGE} &, .${GAMES_OPEN_SESSIONS_PAGE} & {\n padding-bottom: calc(77 / 600 * 100%);\n }\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(77 / 414 * 100%);\n }\n }\n`;","import styled from \"styled-components\";\nimport {NEW_LIVE_CASINO_PAGE} from \"../../../../themes/css-global-classes\";\n\n/**\n * After all banners will be replaced with ones of the same size remove this code\n * PC 1750 x 200 / Mobile 414 x 105\n * @deprecated\n */\nexport const TopBanner777Box = styled.div`\n position: relative;\n width: 100%;\n padding-bottom: calc(250 / 1750 * 100%);\n \n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(200 / 1690 * 100%);\n }\n \n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-bottom: calc(215 / 1024 * 100%);\n \n }\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding-bottom: calc(155 / 414 * 100%);\n \n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(77 / 375 * 100%);\n }\n }\n \n`;","import styled from \"styled-components\";\nimport { TopBannerDefaultBox } from './top-banner.default.box'\nimport {NEW_LIVE_CASINO_PAGE} from \"../../../../themes/css-global-classes\";\n\n/**\n * After all banners will be replaced with ones of the same size remove this code\n * PC 1750 x 200 / Mobile 414 x 105\n * @deprecated\n */\nexport const TopBannerSIBox = styled(TopBannerDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n padding-bottom: calc(165 / 1024 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(165 / 1024 * 100%);\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding-bottom: calc(100 / 414 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(100 / 414 * 100%);\n }\n }\n\n background-color: ${({theme}) => theme.colors.backgroundDark};\n`;","import styled from \"styled-components\";\nimport {TopBannerDefaultBox} from \"./top-banner.default.box\";\nimport {NEW_LIVE_CASINO_PAGE} from \"../../../../themes/css-global-classes\";\n\n/**\n * After all banners will be replaced with ones of the same size remove this code\n * PC 1750 x 200 / Mobile 414 x 105\n * @deprecated\n */\nexport const TopBannerMrGreenBox = styled(TopBannerDefaultBox)`\n padding-bottom: calc(200 / 1750 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(200 / 1750 * 100%);\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n padding-bottom: calc(105 / 414 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(105 / 414 * 100%);\n }\n }\n`;","import styled from \"styled-components\";\nimport {NEW_LIVE_CASINO_PAGE} from \"../../../../themes/css-global-classes\";\nimport {TopBannerDefaultBox} from \"./top-banner.default.box\";\n\n/**\n * After all banners will be replaced with ones of the same size remove this code\n * PC 1750 x 200 / Mobile 414 x 105\n * @deprecated\n */\nexport const TopBannerCasino888Box = styled(TopBannerDefaultBox)`\n padding-bottom: calc(200 / 1750 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(200 / 1750 * 100%);\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n padding-bottom: calc(105 / 414 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(105 / 414 * 100%);\n }\n }\n`;\n","import {TopBannerDefaultBox} from \"./top-banner.default.box\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {TopBanner777Box} from \"./top-banner.777.box\";\nimport {TopBannerSIBox} from \"./top-banner.si.box\";\nimport {TopBannerMrGreenBox} from \"./top-banner.mrgreen.box\";\nimport {TopBannerCasino888Box} from \"./top-banner.888.box\";\n\nexport const TopBannerBox = styledByTheme(TopBannerDefaultBox)\n .forCasino888(TopBannerCasino888Box)\n .forCasino777(TopBanner777Box)\n .forSI(TopBannerSIBox)\n .forMrGreen(TopBannerMrGreenBox)\n .apply();","import {TopBannerImageDefaultBox} from \"./top-banner-image.default.box\";\n\nexport const TopBannerImageBox = TopBannerImageDefaultBox;","import styled from \"styled-components\";\nimport { Image } from \"../../../raw-components/image/image\";\n\nexport const TopBannerImageDefaultBox = styled(Image)`\n position: absolute;\n width: 100%;\n height: auto;\n bottom: 0;\n`;","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\nimport {NEW_LIVE_CASINO_PAGE} from \"../../../../themes/css-global-classes\";\nimport { Image } from \"../../../raw-components/image/image\";\n\nconst PCBox = styled(Image)``;\n\nconst MobileBox = styled(Image)`\n .${NEW_LIVE_CASINO_PAGE} & {\n max-height: 40px;\n }\n`;\n\nexport const TopBannerLogoImageDefaultBox = styledByDevice(PCBox, MobileBox);","import {TopBannerLogoImageDefaultBox} from \"./top-banner-logo-image.default.box\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\n\nexport const TopBannerLogoImageBox = styledByTheme(TopBannerLogoImageDefaultBox).apply() ;\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.h1`\n font-weight: 300;\n ${({theme}) => theme.font.presets.medium};\n color: ${props => props.theme.colors.textLight};\n`;\n\nconst PCBox = styled(DefaultBox)`\n font-size: 2rem;\n text-transform: capitalize;\n`;\n\nconst MobileBox = styled(DefaultBox)`\n font-size: 1.8rem;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 1.2rem;\n }\n`;\n\nexport const TopBannerTitleDefaultBox = styledByDevice(PCBox, MobileBox);","import styled from \"styled-components\";\nimport {TopBannerTitleDefaultBox} from \"./top-banner-title.default.box\";\n\nexport const TopBannerTitleCasino777Box = styled(TopBannerTitleDefaultBox)`\n ${({theme}) => theme.font.presets.bold};\n`;\n","import {TopBannerTitleDefaultBox} from \"./top-banner-title.default.box\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {TopBannerTitleCasino777Box} from \"./top-banner-title.casino777.box\";\n\nexport const TopBannerTitleBox = styledByTheme(TopBannerTitleDefaultBox).forCasino777(TopBannerTitleCasino777Box).apply();","import styled from \"styled-components\";\n\nexport const TopBannerLiveLogoDefaultBox = styled.div`\n position: absolute;\n width: 100%;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n`;\n","import styled from \"styled-components\";\nimport {TopBannerLiveLogoDefaultBox} from \"./top-banner-live-logo.default.box\";\n\nexport const TopBannerLiveLogoCasino777Box = styled(TopBannerLiveLogoDefaultBox)`\n`;","import {TopBannerLiveLogoDefaultBox} from \"./top-banner-live-logo.default.box\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {TopBannerLiveLogoCasino777Box} from \"./top-banner-live-logo.casino777.box\";\n\nexport const TopBannerLiveLogoBox = styledByTheme(TopBannerLiveLogoDefaultBox).forCasino777(TopBannerLiveLogoCasino777Box).apply();","import styled from \"styled-components\";\n\nexport const AnimatedTopImageWrapper = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n`;\n\nexport const AnimatedTopImageScrollHandler = styled(AnimatedTopImageWrapper)`\n z-index: 5;\n`;\n","import React, {useMemo} from \"react\";\nimport styled from \"styled-components\";\nimport {observer} from \"mobx-react\";\nimport {DotLottiePlayer} from \"../lottie-player/dot-lottie-player.component\";\nimport {AnimatedTopImageWrapper} from \"./boxes/animated-top-image-wrapper\";\n\nconst LottieTopImageWrapper = styled(AnimatedTopImageWrapper)`\n svg {\n display: block;\n }\n`;\n\nexport interface AnimatedTopImageComponentProps {\n image: string;\n}\nexport const LottieAnimatedTopImageComponent: React.FC = observer((props) => {\n const styles = useMemo(() => ({}), []);\n return \n \n ;\n});\n","import {reaction} from \"mobx\";\nimport {observer} from \"mobx-react\";\nimport React from \"react\";\nimport {PixiSpineAnimation} from \"../../services/pixi-app/pixi-spine-animation\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {AnimatedTopImageScrollHandler, AnimatedTopImageWrapper} from \"./boxes/animated-top-image-wrapper\";\n\n\nexport interface AnimatedTopImageComponentProps {\n image: string;\n}\n@observer\nexport class PixiAnimatedTopImageComponent extends OrbitComponent {\n private _animationElement: HTMLDivElement | null = null;\n private _reactionDisposer = null;\n private _bannerPixiAnimation: PixiSpineAnimation = null;\n\n componentDidMount(): void {\n this._startAnimation();\n this._reactionDisposer = reaction(() =>\n [\n this.services.mediaQuery.lAndBelow,\n this.services.mediaQuery.sAndBelow\n ],\n (data) => {\n this._stopAnimation();\n this._startAnimation();\n })\n }\n\n\n componentWillUnmount(): void {\n this._stopAnimation();\n this._reactionDisposer();\n }\n\n private _createAnimation() {\n let defautSkinConfiguration = {\n width: 1750,\n height: 200,\n name: \"desktop\",\n scale: 1\n }\n\n if (this.services.mediaQuery.lAndBelow) {\n defautSkinConfiguration.width = 1024;\n defautSkinConfiguration.height = 165;\n defautSkinConfiguration.name = \"tablet\";\n defautSkinConfiguration.scale = 1;\n }\n\n if (this.services.mediaQuery.sAndBelow) {\n defautSkinConfiguration.width = 414;\n defautSkinConfiguration.height = 105;\n defautSkinConfiguration.name = \"mobile\";\n defautSkinConfiguration.scale = 0.6;\n }\n return new PixiSpineAnimation(\n this.services,\n {\n width: defautSkinConfiguration.width, height: defautSkinConfiguration.height, force2DCanvasContext: true\n },\n [{name: 'slotsAnimatedBannerResource', jsonUrl: this.props.image}],\n {\n render: ({pixiApp, spineAnimations}) => {\n let spineAnimation = spineAnimations.slotsAnimatedBannerResource;\n spineAnimation.skeleton.setSkinByName(defautSkinConfiguration.name);\n spineAnimation.skeleton.setSlotsToSetupPose();\n\n // set the position and scale\n spineAnimation.x = pixiApp.screen.width / 2;\n spineAnimation.y = pixiApp.screen.height / 2;\n spineAnimation.scale.set(defautSkinConfiguration.scale);\n\n const runAnimation = () => {\n spineAnimation.state.setAnimation(0, \"intro\", false);\n spineAnimation.state.addAnimation(0, \"loop\", true, 0);\n }\n\n runAnimation();\n }\n },\n {\n width: \"100%\"\n }\n );\n }\n\n private async _startAnimation() {\n this._bannerPixiAnimation = this._createAnimation();\n this._bannerPixiAnimation.start();\n this._bannerPixiAnimation.attachToDOM(this._animationElement);\n }\n\n private _stopAnimation() {\n this._bannerPixiAnimation.dispose();\n }\n\n private captureAnimationDivElement = (el: HTMLDivElement | null) => {\n this._animationElement = el;\n }\n\n render() {\n return (<>\n \n {/* when rendering the animated banner, on mobile, because of the canvas we cannot scroll the page when holding from the canvas element.\n So we put this div in front of it so when we touch the screen, the target element is the div not the canvas */}\n \n );\n }\n}","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport { LottieAnimatedTopImageComponent } from \"./lottie-animated-top-image.component\";\nimport {PixiAnimatedTopImageComponent} from \"./pixi-animated-top-image.component\";\nimport {AnimatedTopImageConfiguration} from \"../../services/configurations/config-data-sections/arenas.configuration\";\n\n\nexport interface AnimatedTopImageComponentProps {\n imageAnimationConfig: AnimatedTopImageConfiguration;\n}\n@observer\nexport class AnimatedTopImageComponent extends OrbitComponent {\n render() {\n if (this.props.imageAnimationConfig.engine === \"pixi\") {\n return \n }\n return \n }\n}","import React, {RefObject} from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {TopBannerBox} from \"./boxes/top-banner/top-banner.box\";\nimport {TopBannerImageBox} from \"./boxes/top-banner-image/top-banner-image.box\";\nimport {TopBannerLogoImageBox} from \"./boxes/top-banner-logo-image/top-banner-logo-image.box\";\nimport {TopBannerTitleBox} from \"./boxes/top-banner-title/top-banner-title.box\";\nimport {TopBannerLiveLogoBox} from \"./boxes/top-banner-live-logo/top-banner-live-logo.box\";\nimport {ThemeProvider} from \"styled-components\";\nimport {AnimatedTopImageComponent} from '../animated-top-image/animated-top-image.component';\nimport {AnimatedTopImageConfiguration} from '../../services/configurations/config-data-sections/arenas.configuration';\n\nexport interface TopImageComponentProps {\n image: string;\n animatedBanner?: AnimatedTopImageConfiguration;\n title?: string;\n altText?: string;\n className?: string;\n topImageRef?: RefObject;\n}\n\nexport const TopImageComponent = observer(class TopImageComponent extends OrbitComponent {\n\n private _renderLogoAndTitle() {\n if(this.props.title) {\n const srcLogo = this.services.device.isMobile\n ? this.services.theme.currentTheme.images.liveArena.casinoLiveLogoMobile.toString()\n : this.services.theme.currentTheme.images.liveArena.casinoLiveLogoPC.toString();\n return (\n \n \n {this.services.translation.translate(this.props.title)}\n \n )\n }\n return null;\n }\n\n render() {\n if (!this.props.image || (this.services.gamesFilter.isFilterOn && this.services.mediaQuery.sAndBelow)) {\n return null;\n }\n\n // TODO: maybe get also an image placeholder to enable lazy loading\n return (\n \n \n {this.props.animatedBanner ?\n \n :\n }\n {this._renderLogoAndTitle()}\n \n \n )\n\n }\n});\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const UsefulLinksListBox = styledBox('UsefulLinksListBox');","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {UsefulLinksListBox} from '../../boxes/list/useful-links-list.box';\nimport {observer} from 'mobx-react';\nimport {styled} from '@mui/material';\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface UsefulLinksListComponentProps extends ComponentServicesPick<'userMenu'> {\n onItemClick?: () => void;\n // this will be UserMenuSectionBox in general except for mini orbit where it is gonna be MiniOrbitUsefulLinksListBox\n linksGroupWrapperBox?: React.ComponentType<{className?: string}>;\n linksGroupWrapperClassName?: string;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent {\n render() {\n const LinksGroupWrapperBox = this.props.linksGroupWrapperBox ? this.props.linksGroupWrapperBox : styled.div``;\n return this.props.userMenu.usefulLinksMenuItems.map((list, index) =>\n \n \n { list.map((menuItem, index) => menuItem.renderMenuItem({onBeforeClick: this.props.onItemClick, showSeparator: !!index}) )}\n \n \n )\n }\n}\n\nexport const UsefulLinksListComponent = withServices(ComponentBody, [\"userMenu\"]);","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const UserMenuSeparatorBox = styledBox('UserMenuSeparatorBox');","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const UserMenuSectionBox = styledBox('UserMenuSectionBox');\n","import styled from \"styled-components\";\n\n\nexport const VideoPlayButtonBox = styled.button`\n background-image: url(\"${props => props.theme.images.spriteSheet.toString()}\");\n background-position: -544px -409px;\n background-size: 1200px;\n background-repeat: no-repeat;\n position: absolute;\n cursor: pointer;\n right: 0;\n left: 0;\n top: 0;\n bottom: 0;\n margin: auto;\n width: 6rem;\n height: 6rem;\n opacity: 0.9;\n transform: scale(1.5);\n transform: translateY(0);\n transition: all 0.35s ease-in-out;\n`;\n\n\n","import {IServiceFactory} from \"../services/service-factory.interface\";\nimport {useContext} from \"react\";\nimport {OrbitContext} from \"../orbit-context\";\n\nexport function useServices(): IServiceFactory {\n return useContext(OrbitContext).services;\n}","import {IServiceFactory, IServiceProvider} from \"../services/service-factory.interface\";\nimport React, {useEffect, useState} from \"react\";\nimport {useServices} from \"./use-services.hook\";\n\ntype CommonProperties = Extract;\n\ntype ComponentProps = Omit\n\n/*\ntype Permutations = [T] extends [never]\n ? []\n : K extends K\n ? [K, ...Permutations>]\n : never;\n*/\n\n\ninterface IServiceToInject {\n serviceName: string;\n serviceInstance: any;\n}\n\nfunction createServicesToInjectMap(services: IServiceToInject[]): Record {\n return services.reduce((accumulator, current) => {\n accumulator[current.serviceName] = current.serviceInstance;\n return accumulator;\n }, {});\n}\n\nfunction getServicesToInject(serviceProvider: IServiceProvider, servicesNames: string[]): Record {\n\n return createServicesToInjectMap(servicesNames.map(name => {\n return {\n serviceName: name,\n serviceInstance: serviceProvider.getServiceByName(name)\n }\n }));\n}\n\nfunction getUnresolvedServices(servicesMap: Record): IServiceToInject[] {\n const result: IServiceToInject[] = [];\n\n Object.keys(servicesMap).forEach(name => {\n const instance = servicesMap[name];\n if(instance instanceof Promise) {\n result.push({\n serviceName: name,\n serviceInstance: instance\n });\n }\n });\n\n return result;\n}\n\nasync function resolveServicesToInject(servicesToInject: IServiceToInject[]): Promise {\n return await Promise.all(servicesToInject.map(async (srv) => {\n const resolvedServiceInstance = await (srv.serviceInstance as Promise);\n return {\n serviceName: srv.serviceName,\n serviceInstance: resolvedServiceInstance\n }\n }))\n}\n\ninterface IWithServicesOptions {\n renderSkeleton?: (compProps: ComponentProps) => React.ReactElement | null\n}\n\nexport function withServices(Component: React.ComponentType,\n servicesNamesToInject: CommonProperties[],\n options?: IWithServicesOptions) {\n\n const HOC: React.FC> = (componentProps: ComponentProps) => {\n const serviceProvider = (useServices() as any) as IServiceProvider;\n const [servicesToInject, setServicesToInject] = useState(getServicesToInject(serviceProvider, servicesNamesToInject));\n\n const unresolvedServices = getUnresolvedServices(servicesToInject);\n\n useEffect(() => {\n if(unresolvedServices.length > 0) {\n resolveServicesToInject(unresolvedServices).then(resolvedServices => {\n setServicesToInject({\n ...servicesToInject,\n ...createServicesToInjectMap(resolvedServices)\n });\n });\n }\n }, [serviceProvider, servicesToInject, unresolvedServices]);\n\n if (unresolvedServices.length > 0) {\n if(options?.renderSkeleton) {\n return options?.renderSkeleton(componentProps);\n } else {\n return null;\n }\n }\n\n return (\n \n );\n }\n\n return HOC;\n}\n","import {IServiceFactoryExtended} from './service-factory-extended.interface';\nimport {IReactionOptions} from \"mobx\";\nimport {reaction as mobxReaction, IReactionDisposer, IReactionPublic} from 'mobx'\n\nexport class ServiceBase {\n constructor(private _serviceFactory: IServiceFactoryExtended) {\n }\n\n protected get services(): IServiceFactoryExtended {\n return this._serviceFactory;\n }\n\n private _reactions: IReactionDisposer[] = [];\n\n private _getClassName(): string {\n const thisProto = Object.getPrototypeOf(this);\n if(thisProto.constructor.name) {\n return thisProto.constructor.name;\n } else {\n return thisProto.constructor.CLASS;\n }\n }\n\n reaction(expression: (r: IReactionPublic) => T, effect: (arg: T, prev: FireImmediately extends true ? T | undefined : T, r: IReactionPublic) => void, opts?: IReactionOptions): void {\n this._reactions.push(mobxReaction(expression, effect, opts));\n }\n\n protected getABFeatureData(): any{\n if(!this.services.user.isAuthorized) {\n return;\n }\n return this.services.sdk.getAbTestingDataForFeature(this._getClassName());\n }\n\n\n dispose() {\n this._reactions.forEach(disposer => disposer());\n }\n}\n","import {IElasticEventData, IStructuredLogger} from '../../../common/interfaces/structured-logging-service-interface';\nimport {MenuItemKey} from \"../configurations/config-data-sections/generated-config-const\";\n\nexport enum OrbitUserFlowAnalyticsCategory {\n Navigation = 'Navigation',\n PWA = 'PWA',\n Search = 'Search',\n}\n\nexport enum OrbitUserFlowAnalyticsLabel {\n AppHeader = \"AppHeader\",\n NavigationMenu = 'NavMenu',\n UserArea = 'UserArea',\n BottomNavigationBar = 'BottomNavBar',\n ShowMore = 'Show_More'\n}\n\nexport type OrbitUserFlowAnalyticsAction = MenuItemKey\n | string\n | 'myAccountButton' | 'withdrawButton' | 'depositButton'\n | 'Entry';\n\nexport enum OrbitMarketingEventAnalyticsCategory {\n Conversion = 'Conversion',\n Communications = 'Communications',\n}\n\nexport enum OrbitMarketingEventAnalyticsLabel {\n PreGamePopUp = 'PreGamePopUp',\n DemoRegPopup = 'DemoRegPopup',\n VideoPlayback = 'VIDEO_PLAYBACK',\n Error = 'ERROR',\n Click = 'CLICK',\n}\n\nexport type OrbitMarketingEventAnalyticsAction = MenuItemKey\n | string\n | 'Play' | 'Show'\n | 'IN_VIEW' | 'LIMIT_REACH' | 'AUTOPLAY' | 'PLAY' | 'PLAY_GAME' | 'SOUND_CLICK'\n | 'Open_Floating_Button' | 'Close_Floating_Button' | 'View_Floating_Button';\n\nexport enum OrbitAIFeatureAnalyticsCategory {\n AIArenaIconsDisplayed = 'AI_ArenaIconsDisplayed',\n CorrelatedGamePopUp = 'CorrelatedGamePopUp'\n}\n\nexport type OrbitAIFeatureAnalyticsAction = MenuItemKey\n | string\n | 'Game_Unavailable'\n\n\nexport interface ISendElasticEventOptions {\n eventType: string;\n category: string;\n action: string;\n label?: string;\n value?: string;\n customData?: object;\n appID?: string;\n}\n\nexport interface IAnalyticsService {\n sendAnalytics(category: string, action?: string, label?: string, value?: any, omitStructuredLogger?: boolean): void;\n sendTechnicalEvent(action: string, label?: string, value?: any): void;\n sendElasticInfoEvent(options: ISendElasticEventOptions, sendToDWH?: boolean): void;\n sendOrbitUserFlowEvent(category: string | OrbitUserFlowAnalyticsCategory, action: OrbitUserFlowAnalyticsAction, label?: string | OrbitUserFlowAnalyticsLabel, value?: any): void;\n sendOrbitMarketingEvent(category: string | OrbitMarketingEventAnalyticsCategory, action: OrbitMarketingEventAnalyticsAction, label?: string | OrbitMarketingEventAnalyticsLabel, value?: any): void;\n sendOrbitAIFeatureEvent(category: string | OrbitAIFeatureAnalyticsCategory, action: OrbitAIFeatureAnalyticsAction, label?: string, value?: any): void;\n getLogger(eventData?: IElasticEventData): IStructuredLogger;\n getGoogleClientID(): string;\n}\n\n\n\n","export const NEW_LIVE_CASINO_ARENA_NAME = 'newLiveCasino';\nexport const NEW_LIVE_CASINO_AB_ARENA_NAME = 'newLiveCasinoAB';\nexport const CIP_ALL_GAMES_ARENA_NAME = 'cipAllGames';\nexport const SLOTS_ARENA_NAME = 'slots';\nexport const CASINO_GAMES_ARENA_NAME = 'casinoGames';\nexport const JACKPOTS_ARENA_NAME = 'jackpots';\nexport const EXCLUSIVE_ARENA_NAME = 'exclusive888Games';\nexport const SCRATCH_CARDS_ARENA_NAME = 'scratchCards';\nexport const VIDEO_POKER_ARENA_NAME = 'videoPoker';\nexport const INSTANT_WIN_GAMES_ARENA_NAME = 'instantWinGames';\nexport const BLACKJACK_ARENA_NAME = 'blackjack';\nexport const VIRTUAL_SPORT_ARENA_NAME = 'virtualSport';\nexport const ROULETTE_ARENA_NAME = 'roulette';\nexport const PROGRESSIVE_SLOTS_ARENA_NAME = 'progressiveSlots';\nexport const NEW_GAMES_ARENA_NAME = 'newGames';\nexport const HOME_PAGE_ARENA = 'homePage';\nexport const VIDEO_SLIDES_ARENA = 'videoSlidesArena';\n\nexport const ALL_ARENAS = Array.of(\n NEW_LIVE_CASINO_ARENA_NAME,\n NEW_LIVE_CASINO_AB_ARENA_NAME,\n CIP_ALL_GAMES_ARENA_NAME,\n SLOTS_ARENA_NAME,\n CASINO_GAMES_ARENA_NAME,\n JACKPOTS_ARENA_NAME,\n EXCLUSIVE_ARENA_NAME,\n SCRATCH_CARDS_ARENA_NAME,\n VIDEO_POKER_ARENA_NAME,\n INSTANT_WIN_GAMES_ARENA_NAME,\n BLACKJACK_ARENA_NAME,\n VIRTUAL_SPORT_ARENA_NAME,\n ROULETTE_ARENA_NAME,\n PROGRESSIVE_SLOTS_ARENA_NAME,\n NEW_GAMES_ARENA_NAME,\n HOME_PAGE_ARENA,\n);\n","import {IDeviceInfoParameters, DeviceType, IGeoInfoParameters, IUserInfoParameters} from '@sparkware/uc-sdk-core';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport Device from \"../../../sdk/src/utils/device/device\";\nimport {IMarketingObject} from '../hybrid/hybrid.service.interface';\n\nexport function getCasinofiedDeviceInfo(services: IServiceFactoryExtended): IDeviceInfoParameters {\n const hybridTestData: IMarketingObject = services.hybrid.getAppMareketingData();\n return {\n deviceType: getCasinofiedDeviceType(services),\n isHybrid: Device.hybrid.inCasino,\n OS: services.device.os.name,\n isNative: false,\n browserType: services.device.os.name,\n appsFlyerId: hybridTestData.AppsFlyerID,\n deviceId: hybridTestData.DeviceID,\n appId: hybridTestData.AppID,\n afInstall: services.hybrid.getAFInstall(),\n firebaseAppId: hybridTestData.FirebaseAppID,\n firebaseAppInstanceId: hybridTestData.FirebaseAppInstanceID\n };\n}\n\nexport function getCasinofiedCommonUserInfo(services: IServiceFactoryExtended): IUserInfoParameters {\n const userInfo: IUserInfoParameters = {\n userMode: 'anonymous',\n regulationTypeID: services.regulation.getRegulationCode(),\n isFTD: services.user.userData?.isFTD || false,\n isVIP: services.user.isVip,\n isPromotionPermitted: services.user.userData?.IsPromotionPermitted || false,\n RMS: services.user.playerRMSStatus,\n userFirstName: services.user.userData?.firstName,\n userLastName: services.user.userData?.lastName,\n }\n\n if (services.user.isAuthorized) {\n userInfo.cid = services.user.cid;\n }\n\n return userInfo;\n}\n\nexport async function getCasinofiedGeoInfoParams(services: IServiceFactoryExtended): Promise {\n const geoLocationInfo = await services.sdk.getGeoLocationInfo();\n\n return {\n country: services.sdk.getCountryIso3()?.toUpperCase(),\n timeZoneUTCOffset: services.time.getTimezoneOffset().toString(),\n loginIp: services.user.loginIP,\n ISP: geoLocationInfo?.isp,\n proxyType: geoLocationInfo?.proxyType,\n stateID: geoLocationInfo?.stateId,\n stateName: geoLocationInfo?.state ?? \"\"\n }\n}\n\nexport function getCasinofiedCommonAppContextParams(services: IServiceFactoryExtended) {\n return {\n productPackageFromID: services.sdk.getProductPackageId(),\n brandID: services.sdk.getBrandID(),\n subBrandID: services.sdk.getSubBrandID(),\n languageCode: services.language.currentLanguage,\n locale: services.sdk.getSkin().getCulture(),\n currencyCode: services.currency.currencyIso3,\n gaClientID: services.analytics.getGoogleClientID(),\n clientThemeName: services.theme.themeName.forWidgets\n }\n}\n\nfunction getCasinofiedDeviceType(services: IServiceFactoryExtended) {\n if (services.device.isTablet) {\n return DeviceType.Tablet;\n }\n\n if (services.device.os.isMobileOS) {\n return DeviceType.SmartPhone;\n }\n\n return DeviceType.PC;\n}\n","import {AppIdentifiers, ITopicHeaders} from '@sparkware/uc-sdk-core';\n\nexport const STANDARD_TOPIC_HEADER: ITopicHeaders = {\n publisher: AppIdentifiers.CasinoClient\n};\n\n","import React from 'react';\nimport {BannerRenderProps, IBannerDefinition} from './banner-definition.interface';\nimport {EmptyBannerComponent} from '../../../../components/cms-banner/empty-banner/empty-banner.component';\n\nexport class EmptyBannerDefinition implements IBannerDefinition {\n\n render(props: BannerRenderProps): React.ReactNode {\n return ()\n }\n}\n","import {Check} from '@sparkware/app-utils';\n\nexport class CmsBannerId {\n constructor(private _componentID: string, private _templateID: string, private _fallbackFileName: string | null) {\n }\n\n isMatch(componentId: number, templateId: number): boolean {\n return this._areEqual(componentId, this.componentID)\n && this._areEqual(templateId, this.templateID);\n }\n\n private _areEqual(val1: any, val2: any): boolean {\n val1 = Check.isNullOrUndefined(val1) ? '' : val1.toString();\n val2 = Check.isNullOrUndefined(val2) ? '' : val2.toString();\n\n return val1 === val2;\n }\n\n get key(): string {\n return `${this.componentID}_${this.templateID}_${this._fallbackFileName ?? 'null'}`;\n }\n\n get componentID(): any {\n return this._componentID;\n }\n\n get templateID(): any {\n return this._templateID;\n }\n\n get fallbackFileName(): string {\n return this._fallbackFileName;\n }\n\n isValidCmsId(): boolean {\n return !(Check.isEmpty(this._componentID) || Check.isEmpty(this._templateID));\n }\n\n toString() {\n return `templateID: ${this.templateID}; componentID: ${this.componentID}`;\n }\n}\n","export interface IControlCenterService {\n readonly isEnabled: boolean;\n}\n\nexport enum CONTROL_CENTER_CONTAINERS_ID {\n CONTROL_CENTER_FULL_CONTAINER_ID = \"FullSafeZoneContainer\",\n CONTROL_CENTER_MINI_CONTAINER_ID = \"MiniSafeZoneContainer\"\n}\n\nexport const CONTROL_CENTER_BI_EVENTS = {\n MINI_OPEN: \"sz_mini_open\", //01010101\n MINI_READY: \"sz_mini_ready\",\n MINI_CLOSE_INTERNAL: \"sz_mini_close_internal\",\n MINI_CLOSE_EXTERNAL: \"sz_mini_close_external\", //01010104\n FULL_OPEN: \"sz_full_open\", //01020101\n FULL_READY: \"sz_full_ready\",\n FULL_CLOSE_EXTERNAL: \"sz_full_close_external\", //01020104\n CATEGORY_MINI: \"mini\",\n CATEGORY_FULL: \"full\"\n};\n\n\n","import React from 'react';\nimport {ButtonPreset} from \"../../basic-ui-components/button/base/button-props.interface\";\nimport { ISvgIconProps } from '../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {OverflowProperty} from \"../../../common/types/css\";\n\nexport interface IModalDialogHandler {\n close(shouldApplyClosingAnimation?: boolean, isClosedDirectlyByUser?: boolean): void;\n zIndex: number;\n shouldBeClosedOnlyByUser: boolean;\n shouldApplyClosingAnimation: boolean;\n readonly isHidden: boolean;\n display(): void;\n hide(): void;\n}\n\nexport interface ShowModalOptions {\n useAutoHeight?: boolean;\n title?: string;\n icon?: React.ComponentType;\n onClosed?: () => void;\n onClosedByXButton?: ()=> void;\n onHide?: () => void;\n onDisplay?: () => void;\n debugInfo?: string;\n hideBorders?: boolean;\n hideCloseButton?: boolean;\n showOpenAndCloseAnimation?: boolean;\n forceTransparentBackground?: boolean;\n transparentBackgroundOpacity?: number;\n forceTransparentContentBackground?: boolean;\n hideDialogHeader?: boolean;\n forceCentralization?: boolean;\n disableFullscreenMobile?: boolean;\n applyMaxHeight?: boolean;\n mobileCenterHeader?: boolean;\n isHighPriority?: boolean;\n forceZOrder?:number;\n shouldBeClosedOnlyByUser?: boolean;\n forceFullscreenTablet?: boolean;\n headerClass?: string;\n showPopupAboveSecondWebViewHybrid?:boolean;\n noDefaultContentPadding?: boolean;\n renderExtraHeaderButtons?: () => React.ReactElement;\n overflow?: OverflowProperty;\n createAsHidden?: boolean;\n}\n\nexport enum DialogButtonClickHandleResultEnum {\n CloseDialogAndContinue,\n KeepDialogOpen\n}\n\nexport interface ISimpleTextModalButtonOptions {\n text: string;\n buttonPreset: ButtonPreset;\n onClick: () => Promise;\n}\n\nexport interface ISimpleTextModalOptions {\n text: string | string[] | React.ReactElement;\n title?: string;\n /** @deprecated Do not send an icon as a string url or as react element. Use an svg icon in the iconSvg prop */\n icon?: string | React.ReactElement;\n iconSvg?: React.ComponentType;\n showEmptyTitle?: boolean;\n hideCloseButton?: boolean;\n buttons?: ISimpleTextModalButtonOptions[];\n disableFullscreenMobile?: boolean;\n showPopupAboveSecondWebViewHybrid?: boolean;\n onClosedByXButton?: ()=> void;\n onClosed?: () => void;\n shouldBeClosedOnlyByUser?: boolean;\n}\n\nexport interface IDialogService {\n showModal(renderContent: (dialogHandler: IModalDialogHandler) => React.ReactNode, options?: ShowModalOptions): IModalDialogHandler;\n showSimpleTextModal(options: ISimpleTextModalOptions): IModalDialogHandler;\n readonly currentDialogs: React.ReactNode[];\n readonly hasOpenDialogs: boolean;\n getMaxCGPOverlayZIndex(): number;\n closeAllDialogs(): void;\n countDialogs(opts: {includeHidden: boolean;}): number;\n}","export enum ExternalLinksZIndexes {\n OmgBehindTheGame= 8035,\n GameFrame = 8040,\n MyAccount = 8060,\n InternalOverExternalLink= 8065,\n Omg = 8070,\n Cashier = 8072,\n GamesQuestionnaire = 8073,\n Membership = 8078,\n PendingAction = 8085\n /*\n [PRIORITY_LEVEL.BASE]: 8000,\n [PRIORITY_LEVEL.POP_UP]: 8010,\n [PRIORITY_LEVEL.OPEN_SESSION]: 8020,\n [PRIORITY_LEVEL.FP]: 8030,\n [PRIORITY_LEVEL.OMG_BEHIND]: 8035,\n [PRIORITY_LEVEL.GAME_LOADING_INDICATOR]: 8037,\n [PRIORITY_LEVEL.NEXT_GAME]: 8038,\n [PRIORITY_LEVEL.GAME_FRAME]: 8040,\n [PRIORITY_LEVEL.GAME_FRAME_FP]: 8041,\n [PRIORITY_LEVEL.GAME_FRAME_LOADER]: 8042,\n [PRIORITY_LEVEL.MINI_CASHIER]: 8045,\n [PRIORITY_LEVEL.LOGIN]: 8050,\n [PRIORITY_LEVEL.SPAIN_SUMMARY_MESSAGE]: 8055,\n [PRIORITY_LEVEL.EXTERNAL_LINK]: 8060,\n [PRIORITY_LEVEL.INTERNAL_OVER_EXTERNAL_LINK]: 8061,\n [PRIORITY_LEVEL.OMG]: 8070,\n [PRIORITY_LEVEL.CASHIER]: 8072,\n [PRIORITY_LEVEL.GAMES_QUESTIONNAIRE]: 8073,\n [PRIORITY_LEVEL.GEO_FREEZE_WINDOW]: 8074,\n [PRIORITY_LEVEL.TEMP_ACCOUNT]: 8075,\n [PRIORITY_LEVEL.MEMBERSHIP]: 8078,\n [PRIORITY_LEVEL.MESSAGE]: 8080,\n [PRIORITY_LEVEL.SECONDARY_MESSAGE]: 8082,\n [PRIORITY_LEVEL.TOUCH_ID]: 8090,\n [PRIORITY_LEVEL.TOUCH_ID_POPUP]: 9002,\n */\n}","import {UserController_GetPendingActionsResponse} from \"../../../api/api.service\";\n\n\nexport interface IPendingActionExternalLinkHandler {\n openPendingAction(options?: TOptions): Promise;\n}\n\nexport type PendingActionData = UserController_GetPendingActionsResponse[\"PendingActions\"][number];\n\nexport enum PendingActionResultEnum {\n ContinueCurrentFlow,\n BlockCurrentFlow\n}\n\nexport enum PendingActionTypeEnum {\n ResponsibleGaming = 19,\n ResponsibleGamingPhase2 = 22,\n\n /*\n Register player to regulator = 1,\n Demo to Real conversion = 2,\n Privacy policy = 3,\n Terms and Conditions approval = 4,\n Spain Full Migration = 5,\n Spain Only Migration = 6,\n Spain Only Registartion = 7,\n Complete Registration = 8,\n OPT-IN (whether the user wants Promotion Emails ) = 9,\n Geo Locate Mobile = 10,\n Players acknowledges before continuing = 11,\n Email Verification = 13,\n NEM-ID authentication required = 14,\n Sweden migration = 15,\n UK DOB Verification = 16,\n UK Address Verification = 17,\n UK View Verification Page = 18,\n Responsible Gaming = 19,\n Bonus Policy change = 20,\n Hesse Terms and Conditions Approval = 21,\n Responsible Gaming Phase 2 = 22,\n Retry Page = 23,\n Adding playing time limits = 24,\n ResubscribePending = 28,\n */\n}\n\nexport enum PendingActionReasonEnum {\n GamingCautionInteraction = 20,\n /*\n Complete real registration process = 1,\n Time out in registration to regulator = 2,\n Regulation Migration Process = 3,\n Short Registration Process = 4,\n Geo Location Detection = 5,\n Deposited more than the limit = 6,\n ThePlayerShouldVerifyHisEmailBeforeContinuing = 7,\n Terms and Conditions update = 8,\n Other = 9,\n DE Migration Process = 10,\n Danish Player should be authenticated with its NEM-ID = 11,\n UK account verification = 12,\n Gaming Caution escalation = 14,\n Adding playing time limits = 16,\n Adding playing time limits = 17,\n */\n}\n\nexport enum PendingActionIdEnum {\n SwedenGamingCaution = 40\n}","import {MarketingParams} from \"../../../../../common/interfaces/marketing-params.interface\";\nimport {IChannel} from \"@sparkware/uc-sdk-core\";\n\nexport const REGISTRATION_DATA_KEY = 'storeRegistrationData';\n\nexport interface IOpenRegistrationOptions {\n channel: IChannel;\n businessCorrelationID?: string;\n marketingParams?: MarketingParams;\n promoCode?: string;\n}\n\nexport interface IRegistrationExternalLinkHandler {\n openRegistration(options?: IOpenRegistrationOptions): Promise;\n}","import {IServiceFactory} from '../../service-factory.interface';\nimport {GameInfo} from '../../games/game-info';\n\nexport enum PreviewFeatureType {\n description = 1,\n check = 2\n}\n\nexport interface PreviewFeatureEvaluationResult {\n title: string;\n value: any;\n type: PreviewFeatureType;\n}\nexport interface IGamePreviewFeature {\n readonly name: string;\n evaluate(services: IServiceFactory, gameInfo: GameInfo): PreviewFeatureEvaluationResult;\n}\n","import {IGamePartsViewModel} from \"../game-parts/game-parts-view-model.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {IGameSize} from \"../open-game-api-callers/open-game-api-response.interface\";\nimport {\n Nullable,\n NullableUndefinedString,\n UndefinedNumber\n} from \"../../../../../common/types/nullable-types\";\nimport {IRunningGameControllerViewModel} from \"../game-controller/running-game-controller.interface\";\nimport {IOpenHistoryGameParams} from \"../../game-runner.service.interface\";\nimport {IFreePlayVoucherViewModel} from \"../../../free-play/vouchers/free-play-voucher-view-model.interface\";\n\nexport enum GameModeEnum {\n Demo = 0,\n Real = 1,\n History = 2\n}\n\nexport interface IGameSessionDataViewModel {\n readonly totalBets: number;\n readonly totalWins: number;\n readonly bankroll: number;\n readonly vendorGameSessionId: NullableUndefinedString;\n readonly regulationGameSessionId: NullableUndefinedString;\n readonly regulationParticipationTicketId: NullableUndefinedString;\n readonly netPosition: number;\n}\n\nexport interface IGameFreePlayContextViewModel {\n readonly isFreePlay: boolean;\n readonly isCurrentFreePlayMandatory: boolean;\n readonly isFreePlayMandatoryWhenAvailable: boolean;\n readonly shouldShowFreePlayHeader: boolean;\n readonly currentFreePlayVoucher: IFreePlayVoucherViewModel | null;\n readonly otherAvailableVouchersForCurrentGame: IFreePlayVoucherViewModel[];\n}\n\nexport interface IGameContextViewModel {\n readonly gameMode: GameModeEnum;\n readonly gameInfo: GameInfo;\n readonly controller: IRunningGameControllerViewModel;\n readonly gameParts: IGamePartsViewModel;\n readonly launchGameUrl: string | null;\n readonly gameSize: Nullable;\n readonly isGameResizable: boolean;\n readonly freePlayContext: IGameFreePlayContextViewModel;\n readonly historyGameParams: IOpenHistoryGameParams | undefined;\n readonly gameSessionData: IGameSessionDataViewModel;\n readonly referrerId: UndefinedNumber;\n readonly allowSwitchBetweenDemoAndReal: boolean;\n}","import {GameContextModel} from \"../../../companies/game-context/game-context.model\";\n\nexport enum GameStepsExecutionResultEnum {\n Continue,\n Cancel\n}\n\n\nexport interface IGameRunStep {\n readonly isEnabled: boolean;\n disableGameStep(): this;\n enableGameStep(): this;\n executeStep(gameContext: GameContextModel): Promise;\n dispose(): void;\n}","export enum GameVendorId {\n V_888 = 1,\n V_CTXM = 2,\n V_vsGaming = 3,\n V_Electracade = 4,\n V_LNW = 5,\n V_Rival = 6,\n V_Dynamite = 7,\n V_Ashgaming = 8,\n V_Crypto = 9,\n V_BlueSq = 10,\n V_Bellfruit = 11,\n V_Sportech = 12,\n V_Netent = 13,\n V_Evolution = 14,\n V_WagerWorks = 15,\n V_Betlow = 16,\n V_Fremantle = 17,\n V_Gamesq = 18,\n V_DSL = 19,\n V_Ponsbic = 20,\n V_Blueprint = 21,\n V_Endemol = 22,\n V_Mazooma = 23,\n V_Genesis = 24,\n V_RevolverGaming = 25,\n V_Kambi = 26,\n V_NetEnt = 27,\n V_LNW2 = 28,\n V_Ingenuity = 29,\n V_PlayTech = 30,\n V_UniversalStudios = 31,\n V_IGT = 32,\n V_Elk = 33,\n V_Thunderkick = 34,\n V_Merkur = 35,\n V_NextGenBigTime = 36,\n V_Sigma = 37,\n V_Wizard = 38,\n V_Quickspin = 39,\n V_GamesGlobal = 40,\n V_Yggdrasil = 41,\n V_Amatic = 42,\n V_BallyWulff = 43,\n V_Skilzz = 44,\n V_LightningBox = 46,\n V_RedTiger = 47,\n V_Pragmatic = 48,\n V_NorthernLight = 49,\n V_H5 = 50,\n V_RubyPlay = 51,\n V_NextGenChanceInteractive = 52,\n V_PlayNGo = 53,\n V_AGS = 54,\n V_Gamevy = 55,\n V_Eyecon = 56,\n V_Greentube = 57,\n V_iSoftBet = 58,\n V_Playson = 59,\n V_Spectate = 60,\n V_Inspired = 61,\n V_PGSoft = 62,\n V_Skywind = 63,\n V_Habanero = 64,\n V_MGA = 65,\n V_RFranco = 66,\n V_4theplayer = 67,\n V_Realistic = 68,\n V_Oryx = 69,\n V_ReelPlay = 70,\n V_GamingRealms = 71,\n V_Hacksaw = 72,\n V_PushGaming = 73,\n V_WMG = 74,\n V_1x2 = 75,\n V_GoldenRace = 76,\n V_Leap = 77,\n V_Core = 78,\n V_ReelNRG = 79,\n V_IronDog = 80,\n V_Authentic = 81,\n V_Gamomat = 82,\n V_EGT = 83,\n V_Endorphina = 84,\n V_Betsoft = 85,\n V_Playzido = 86,\n V_RedRake = 87,\n V_PlayzidoOthers = 88,\n V_TomHorn = 89,\n V_NeoGames = 90,\n V_BFGames = 91,\n V_Kalamba = 92,\n V_GiveMe = 93,\n V_GoldenHero = 94,\n V_2by2 = 95,\n V_PlankGaming = 96,\n V_BulletproofGames = 97,\n V_Ainsworth = 98,\n V_Everi = 99,\n V_Wazdan = 100,\n V_PlayzidoReelplay = 101,\n V_Gong = 102,\n V_NoLimitCity = 103,\n V_DWG = 104,\n V_TripleCherry = 105,\n V_Spearhead = 106,\n V_Spinomenal = 107,\n V_Spribe = 108,\n V_CIRSA = 109,\n V_Funfair = 110,\n V_GreenJade = 111,\n V_NazionaleElectronica = 112,\n V_Booming = 113,\n V_Darwin = 114,\n V_Betixon = 115,\n V_NetGaming = 116,\n V_BGaming = 117,\n V_BlueHorn = 118,\n V_SpinPlay = 119,\n V_Arcadia = 120,\n V_Stakelogic = 121,\n V_Live5 = 122,\n V_Swintt = 123,\n V_Edict = 124,\n V_GameArt = 125,\n V_LadyLuck = 126,\n V_SmartSoft = 127,\n V_Spinberry = 128,\n V_TopSpin = 129,\n V_eZugi = 130,\n V_IndigoMagic = 131,\n V_AtomicLabs = 132,\n V_Bluberi = 133,\n V_RAW = 134,\n V_Reevo = 135,\n V_WhiteHat = 136,\n V_Galaxis = 137,\n V_Synot = 138,\n V_EGTDigital = 139\n }","import {GameInfo} from '../games/game-info';\nimport React from \"react\";\nimport {Nullable} from \"../../../common/types/nullable-types\";\nimport {IGameFilterDefinition} from './filters-definitions/game-filter-definition.interface';\n\nexport interface IFiltersGroup {\n text: string;\n filters: ActiveFilter[];\n isMultiSelect: boolean;\n}\n\nexport interface ActiveFilter {\n readonly id: string;\n readonly text: string;\n readonly on: boolean;\n readonly isDynamic: boolean;\n}\n\n\n\nexport enum FilterIndicatorRenderingLocation {\n BelowArenaTitle,\n NextToArenaTitle\n}\nexport interface IFilterIndicatorRenderingOptions {\n reactElement: React.ReactElement;\n location: FilterIndicatorRenderingLocation;\n}\n\nexport interface IGamesFilterService {\n\n readonly filteredGamesMap: Record;\n readonly isFilterOn: boolean;\n readonly currentAppliedFiltersIds: string[];\n readonly isFilteringAvailable: boolean;\n isFilterApplied(filterId: string): boolean;\n applyFilters(filterIds: string[]): Promise;\n clearFilters(): Promise;\n renderMobileFiltersIndicator(): React.ReactElement;\n renderFiltersIndicator(): Nullable;\n showFiltersEditor(): void;\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number;\n\n getFiltersForGame(gameType: number): string[]; \n isValidFilter(filterId: string): boolean\n\n getFiltersDefinitions(filtersIds: string[]): Record;\n}\n","export enum GamesOpenSessionsKind\n{\n Real = 0,\n FreePlay = 1,\n All = 2\n}","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const GameInfoButtonBox = styledBox(\"GameInfoButtonBox\");","import React, {useEffect, useState} from 'react';\nimport {GameInfo} from '../../../../services/games/game-info';\nimport {Check} from '@sparkware/app-utils';\nimport {observer} from 'mobx-react';\nimport {IModalDialogHandler} from '../../../../services/dialog/dialog.service.interface';\nimport {GameInfoButtonBox} from './boxes/game-info-button/game-info-button.box';\nimport {DialogTitleBox} from '../../../modal-dialog/boxes/title/dialog-title.box';\nimport {DialogCloseButtonBox} from '../../../modal-dialog/boxes/close-button/dialog-close-button.box';\nimport {Image} from '../../../raw-components/image/image';\nimport {DialogHeaderComponent} from '../../../modal-dialog/parts/header/dialog-header.component';\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {NullableString} from \"../../../../../common/types/nullable-types\";\n\nexport interface MobileGamePreviewTitleComponentProps {\n gameInfo: GameInfo;\n arenaName?: string;\n dialogHandler: IModalDialogHandler;\n}\n\nexport const TitleComponent: React.FC = observer((props) => {\n const services = useServices();\n const [infoPageUrl, setInfoPageUrl] = useState(null);\n\n useEffect(() => {\n props.gameInfo.getInfoPageURL().then(infoPageUrl => {\n setInfoPageUrl(infoPageUrl);\n })\n }, [props.gameInfo]);\n\n const _openGameInfo = async () => {\n if(!infoPageUrl) {\n return;\n }\n\n _closeInfoMobile();\n\n if (props.arenaName) {\n //TODO: Do we need it?\n services.analytics.sendElasticInfoEvent({eventType:\"CGP_Game_Click\",category: props.arenaName, action: \"Open_Game_Info\", label: `SEO_${gameInfo.gameType}`}, true);\n }\n\n services.location.push(infoPageUrl);\n };\n\n const _closeInfoMobile = () => {\n props.dialogHandler?.close();\n };\n\n const _renderOpenInfoButton = (gameInfo: GameInfo) => {\n\n if (Check.isEmpty(infoPageUrl) || services.miniOrbit.isEnabled) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n\n let gameInfo = props.gameInfo;\n return (\n \n {gameInfo.title}\n {_renderOpenInfoButton(gameInfo)}\n \n \n );\n\n});\n\n","import {ContainerDefaultBox} from './container.default.box';\n\nexport const ContainerBox = ContainerDefaultBox;\n\n","import styled from 'styled-components';\n\n\n/**\n ContainerDefaultBox is placed over TrailerOrStripeImageComponent using position absolute.\n We do this because TrailerOrStripeImageComponent has opacity 0.5\n and we can't put ContainerDefaultBox inside TrailerOrStripeImageComponent because will inherit that opacity\n */\n\n\nexport const ContainerDefaultBox = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n`;\n","import {PlayButtonsDefaultBox} from './play-buttons.default.box';\n\nexport const PlayButtonsBox = PlayButtonsDefaultBox;","import styled from 'styled-components';\n\n\nexport const PlayButtonsDefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: center;\n width: 100%;\n height: 100%;\n margin-right: 10px;\n margin-left: 10px;\n`;\n","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {GameInfo, OpenGameParameters} from '../../../../services/games/game-info';\nimport {observer} from 'mobx-react';\nimport {IModalDialogHandler} from '../../../../services/dialog/dialog.service.interface';\nimport {ContainerBox} from './boxes/container/container.box';\nimport {GameIconBox} from '../../../../basic-components/game-icon/game-icon.box';\nimport {PlayButtonsBox} from '../../../../basic-components/play-buttons/play-buttons.box';\nimport {GameIconWrapperBox} from '../../../../basic-components/game-icon-wrapper/game-icon-wrapper.box';\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {Button} from '../../../../basic-ui-components/button/base/button.component';\n\nexport interface MobileDemoAndPlayComponentProps {\n gameInfo: GameInfo;\n openGameParams: OpenGameParameters;\n dialogHandler: IModalDialogHandler;\n}\n\nexport const GameIconAndPlayButtonsComponent = observer(\n class GameIconAndPlayButtonsComponent extends OrbitComponent {\n\n private _openRealGame = () => {\n this.props.dialogHandler.close();\n this.props.gameInfo.open({...this.props.openGameParams, isRealMode: true});\n };\n\n private _openDemoGame = () => {\n this.props.dialogHandler.close();\n this.props.gameInfo.open({...this.props.openGameParams, isRealMode: false});\n };\n\n private _renderDemoButton(gameInfo: GameInfo) {\n if (!gameInfo.allowDemoButtonInIntermediatePage) {\n return null;\n }\n\n return (\n \n { this.services.translation.translate('DEMO') }\n \n );\n }\n\n render() {\n if (!this.services.device.isMobile) {\n return null;\n }\n\n const gameInfo = this.props.gameInfo;\n\n return (\n \n \n \n \n \n \n {this.services.translation.translate('PLAY')}\n \n
\n {this._renderDemoButton(gameInfo)}\n
\n
\n );\n }\n }\n);\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const IntermediatePageBox = styledBox(\"IntermediatePageBox\");","import {StripeImageAndButtonsDefaultBox} from './stripe-image-and-buttons.default.box';\n\nexport const StripeImageAndButtonsBox = StripeImageAndButtonsDefaultBox;","import styled from 'styled-components';\n\nexport const StripeImageAndButtonsDefaultBox = styled.div`\n position: relative;\n width: 100%;\n height: 220px;\n margin-bottom: 0.5rem;\n`;","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const GradientBox = styledBox(\"GradientBox\");","import {WarningImageDefaultBox} from \"./warning-image.default.box\";\n\nexport const WarningImageBox = WarningImageDefaultBox;","import styled from \"styled-components\";\nimport { Image } from \"../../../../../raw-components/image/image\";\n\nexport const WarningImageDefaultBox = styled(Image)`\n margin: 10px 5px 5px 15px;\n`;","import {WarningTextDefaultBox} from \"./warning-text.default.box\";\n\nexport const WarningTextBox = WarningTextDefaultBox;","import styled from \"styled-components\";\n\nexport const WarningTextDefaultBox = styled.span`\n font-size: 1.2rem;\n width: calc(100% - 50px);\n display: inline-block;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n`;\n","import {WarningMessageDefaultBox} from \"./warning-message.default.box\";\n\nexport const WarningMessageBox = WarningMessageDefaultBox;","import styled from \"styled-components\";\n\nexport const WarningMessageDefaultBox = styled.div`\n position: relative;\n height: 40px;\n background-color: black;\n`;","import React from 'react';\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {WarningImageBox} from \"./boxes/warning-image/warning-image.box\";\nimport {WarningTextBox} from \"./boxes/warning-text/warning-text.box\";\nimport {WarningMessageBox} from \"./boxes/warning-message/warning-message.box\";\n\nexport class RealMoneyOnlyWarningComponent extends OrbitComponent<{}>{\n render() {\n return(\n \n \n {this.services.translation.translate('REAL_MONEY_GAME')}\n \n );\n }\n}","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {GameInfo, OpenGameParameters} from '../../../services/games/game-info';\nimport {TitleComponent} from './title/title.component';\nimport {TrailerOrStripeImageComponent} from '../common/trailer-or-stripe-image/trailer-or-stripe-image.component';\nimport {GamePreviewInfoContainerComponent} from '../common/game-info-container/game-preview-info-container.component';\nimport {observer} from 'mobx-react';\nimport {IModalDialogHandler} from '../../../services/dialog/dialog.service.interface';\nimport {GameIconAndPlayButtonsComponent} from './game-icon-and-play-buttons/game-icon-and-play-buttons.component';\nimport {IntermediatePageBox} from './boxes/intermediate-page/intermediate-page.box';\nimport {StripeImageAndButtonsBox} from './boxes/stripe-image-and-buttons/stripe-image-and-buttons.box';\nimport {GradientBox} from './boxes/gradient/gradient.box';\nimport {RealMoneyOnlyWarningComponent} from \"./only-real-money-warning/only-real-money-warning.component\";\n\nexport interface OpenGameIntermediatePageComponentProps {\n gameInfo: GameInfo;\n openGameParams: OpenGameParameters;\n dialogHandler: IModalDialogHandler;\n}\n\n\nexport const OpenGameIntermediatePageComponent = observer(\n class OpenGameIntermediatePageComponent extends OrbitComponent {\n\n componentDidMount() {\n super.componentDidMount();\n this.reaction(() => this.services.device.isMobile,\n (isMobile) => {\n if(!isMobile) { // this is for when you switch from mobile to PC in the emulator or when you resize de browser window\n this.props.dialogHandler.close();\n }\n });\n }\n\n _renderOnlyRealMoneyWarning() {\n return this.props.gameInfo.allowWithdrawOnlyFromReal ? () : null;\n }\n\n render() {\n return (\n \n \n {this._renderOnlyRealMoneyWarning()}\n \n \n {/*GameIconAndPlayButtonsComponent and GradientBox uses position absolute to place itself over the TrailerOrStripeImageComponent because TrailerOrStripeImageComponent box has opacity 0.5 */}\n \n \n \n \n \n\n );\n }\n }\n);","import { computed, makeObservable } from 'mobx';\nimport {Check} from '@sparkware/app-utils';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {IRunningGameHandler} from './running-game-handler.interface';\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\nimport {\n OpenGameIntermediatePageComponent\n} from \"../../components/lobby-game-info-preview/intermediate-page/open-game-intermediate-page.component\";\nimport React from \"react\";\nimport {GameIconAnimationState} from '../../components/single-game/common/parts/game-image/game-image.component';\nimport {\n IRunningGameControllerViewModel\n} from \"../game-runner/interfaces/game-controller/running-game-controller.interface\";\nimport {GameModeEnum} from \"../game-runner/interfaces/game-context/game-context-view-model.interface\";\nimport {IOpenFreePlayGameParams} from \"../game-runner/game-runner.service.interface\";\nimport {IGameRestriction} from \"../restrictions/game-restriction.interface\";\nimport {GAME_GROUP} from \"../../../common/const/game_groups_consts\";\nimport {NullableNumber, NullableString} from \"../../../common/types/nullable-types\";\nimport {GAMES_CATEGORIES} from \"./games-categories.enum\";\nimport {IGameInfo} from '../../../common/const/game-info.interface';\nimport {GAME_VOLATILITY} from '../../../sdk/src/services/games_information/games_information_service_interface';\nimport {\n OrbitMarketingEventAnalyticsCategory,\n OrbitMarketingEventAnalyticsLabel\n} from \"../analytics/analytics.service.interface\";\nimport { GameChildishIconMode } from '../../../common/enums/game-childish-icon-mode.enum';\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../common/const/casinofied-analytics-consts\";\n\n\nexport interface OpenGameParameters {\n isRealMode: boolean;\n pageName?: string;\n listTitle?: string;\n listPosition?: number;\n AdminListID?: number;\n marketingParams?: MarketingParams;\n gameIndex?: number;\n aiEngine?: string;\n aiSortingType?: string;\n AIListTypeID?: number;\n openFromDrawer?:boolean;\n showIntermediatePage?: boolean;\n isCalledFromIntermediatePage?: boolean;\n animatedIconState?: GameIconAnimationState;\n freePlayParams?: IOpenFreePlayGameParams;\n skipFreePlaySuggestion?: boolean;\n referrerId?: NullableNumber;\n}\n\n\n\nexport function gameInfoComparerByTitle(game1: GameInfo, game2: GameInfo): number {\n if(game1.title < game2.title) {\n return -1\n } else if(game1.title > game2.title) {\n return 1\n }\n\n return 0;\n}\n\n\nexport class GameInfo {\n constructor(private _rawGameData: IGameInfo,\n private services: IServiceFactoryExtended,\n private _aboutText: string) {\n makeObservable(this);\n\n Object.defineProperty(this._rawGameData, 'allowSwitchGameMode', {\n get: () => this.allowSwitchGameMode,\n configurable: true\n });\n }\n\n private get _isMobile(): boolean {\n return this.services.device.isMobile;\n }\n\n private get _isAuthorized(): boolean {\n return this.services.user.isAuthorized;\n }\n\n get gameType(): number {\n return this._rawGameData.gameType;\n }\n\n get title(): string {\n return this._rawGameData.title;\n }\n\n get numberOfLines(): number {\n return this._rawGameData.numberOfLines;\n }\n\n\n get hasJackpot(): boolean {\n return this._rawGameData.hasJackpot || false;\n }\n\n get isNewGame(): boolean {\n return this._hasCustomFilter('new');\n }\n\n get isExclusiveGame(): boolean {\n return this._hasCustomFilter('exclusive');\n }\n\n private _hasCustomFilter(filterName: string): boolean {\n if (!filterName) {\n return false;\n }\n\n if (!Check.isArray(this._rawGameData.filtersList)) {\n return false;\n }\n\n filterName = filterName.toLowerCase();\n\n return 0 <= this._rawGameData.filtersList.findIndex(filter => filter.toLowerCase() === filterName);\n\n }\n\n get hasBonusGames(): boolean {\n return this._rawGameData.hasBonusGames || false;\n }\n\n get numberOfDecks(): number {\n return this._rawGameData.numberOfDecks;\n }\n\n get isMultiHand(): boolean {\n return this._rawGameData.isMultiHand || false;\n }\n\n get hasFreeSpins(): boolean {\n return this._rawGameData.hasFreeSpins || false;\n }\n\n get subGroupName(): string {\n return this._rawGameData.subGroupName;\n }\n\n get isEliteLounge(): boolean {\n return this._rawGameData.isEliteLounge || false;\n }\n\n get isChildish(): boolean {\n return this._rawGameData.isChildish || false;\n }\n\n get hasSideBets(): boolean {\n return this._rawGameData.hasSideBets || false;\n }\n\n get maxBetPerSpot(): number {\n return this._rawGameData.maxBetPerSpot;\n }\n\n get allowWithdrawOnlyFromReal(): boolean {\n return this._rawGameData.allowWithdrawOnlyFromReal;\n }\n\n get hasLowStakes(): boolean {\n return this._hasCustomFilter('lowStakes');\n }\n\n get hasHighStakes(): boolean {\n return this._hasCustomFilter('highStakes');\n }\n\n get ClassicSlots(): boolean {\n return this._rawGameData.ClassicSlots;\n }\n\n get allowMinMaxBet(): boolean {\n let isAllowedCategory = this.isCardOrTableGame || this.isLiveCasino;\n\n return !this.hasJackpot && isAllowedCategory;\n }\n\n\n @computed\n get allowHoverDetails(): boolean {\n\n if (this.gameGroup === 'Live Casino') {\n return false;\n }\n\n return !this._isAuthorized || this._rawGameData.forceDemoButton;\n }\n\n get allowTap(): boolean {\n return this._isMobile;\n }\n\n\n async hasInfoPage(): Promise {\n return Boolean(await this.getInfoPageURL());\n }\n\n @computed\n get allowDemoButtonInSingleGame(): boolean {\n\n if (!this._rawGameData.isAnonymousSupported) {\n return false;\n }\n\n if (this._rawGameData.forceDemoButton) {\n return true;\n }\n\n\n if (this._isMobile) {\n return false;\n }\n\n\n return (this._rawGameData.demoSettings\n && this._rawGameData.demoSettings.demoCTAAnonymous\n && this._rawGameData.demoSettings.demoCTAAnonymous.pc);\n }\n\n\n @computed\n get allowDemoButtonInIntermediatePage(): boolean {\n if (!this._rawGameData.isAnonymousSupported) {\n return false;\n }\n\n if (this._rawGameData.forceDemoButton) {\n return true;\n }\n\n if (this.services.user.isAuthorized) {\n return this._rawGameData.demoSettings && this._rawGameData.demoSettings.demoCTAAuthorized && this._rawGameData.demoSettings.demoCTAAuthorized.mobile;\n }\n\n return this._rawGameData.demoSettings && this._rawGameData.demoSettings.demoCTAAnonymous && this._rawGameData.demoSettings.demoCTAAnonymous.mobile;\n }\n\n async getInfoPageURL(): Promise {\n\n if (!this._rawGameData.infoPageURL) {\n return '';\n }\n const siteMap = await this.services.siteMap;\n\n if (!siteMap.isUrlInSiteMap(this._rawGameData.infoPageURL)) {\n this.services.logger.debug(`Page info '${this._rawGameData.infoPageURL}' for game ${this.gameType} - ${this.title} is not in the site map`);\n return '';\n }\n\n return this._rawGameData.infoPageURL\n }\n\n //Can be either a live stream URL or a static video URL.\n get videoURL(): string {\n if (!this._rawGameData.videoURL) {\n return '';\n }\n\n return this._rawGameData.videoURL;\n }\n\n get hasVideoURL(): boolean {\n return Boolean(this.videoURL);\n }\n\n get gameGroup(): string {\n return this._rawGameData.gameGroup;\n }\n\n get gameGroupId(): GAME_GROUP {\n return this._rawGameData.gameGroupId;\n }\n\n get gameCategory(): string {\n if(this.isVideoSlot || this.isScratchCards) {\n return GAMES_CATEGORIES.SLOTS;\n }\n\n if(this.isLiveCasino) {\n return GAMES_CATEGORIES.LIVE;\n }\n\n if(this.isCardOrTableGame) {\n return GAMES_CATEGORIES.CARD_AND_TABLE;\n }\n\n return '';\n\n }\n\n get gameCategoryClassName(): string {\n return 'game-category-' + this.gameCategory;\n }\n\n get companyName(): string {\n return this._rawGameData.companyName;\n }\n\n get vendorId(): number {\n return this._rawGameData.vendorId;\n }\n\n get vendorName(): string {\n return this._rawGameData.vendorName;\n }\n\n private _getDefaultGameImage(opts: {squareIcon: boolean; animatedIcon: boolean;}): string {\n let images = this._rawGameData?.images;\n if (!images) {\n return '';\n }\n\n if (opts.squareIcon && images.hybrid_icon) {\n if (opts.animatedIcon) {\n return (images.animated_square) ? this.getAnimatedJsonUrl(this._getResolvedGameImagePath(images.animated_square)) : '';\n }\n return this._getResolvedGameImagePath(images.hybrid_icon);\n }\n\n if (opts.animatedIcon) {\n return (images.animated_round) ? this.getAnimatedJsonUrl(this._getResolvedGameImagePath(images.animated_round)) : '';\n }\n\n return this._getResolvedGameImagePath(images.icon);\n }\n\n private _shouldUseLessNonChildishIcon(gameChildishMode: GameChildishIconMode): boolean {\n return (gameChildishMode === GameChildishIconMode.UseLessNonChildishIcon || gameChildishMode === GameChildishIconMode.PreferLessNonChildishIcon)\n }\n\n private _getImageForChildishGame(opts: {squareIcon: boolean; animatedIcon: boolean;}): string {\n let images = this._rawGameData?.images;\n if (!images) {\n return '';\n }\n\n const gameChildishMode = this.services.regulation.current.getChildishIconMode();\n if (gameChildishMode === GameChildishIconMode.UseDefaultIcon) {\n return this._getDefaultGameImage(opts);\n }\n else {\n if (opts.squareIcon && images.hybrid_icon) {\n if (images.hybrid_less_non_childish_icon && this._shouldUseLessNonChildishIcon(gameChildishMode)) {\n return opts.animatedIcon ? '' : this._getResolvedGameImagePath(images.hybrid_less_non_childish_icon);\n }\n else if (images.hybrid_non_childish_icon) {\n /* we are happy with the - hybrid_non_childish_icon - for UseLessNonChildishIcon or UseNonChildishIcon MODE */\n return opts.animatedIcon ? '' : this._getResolvedGameImagePath(images.hybrid_non_childish_icon);\n }\n else if (gameChildishMode === GameChildishIconMode.PreferNonChildishIcon || gameChildishMode === GameChildishIconMode.PreferLessNonChildishIcon) {\n return this._getDefaultGameImage(opts);\n }\n else {\n /* Handling scenario of mode: UseNonChildishIcon / UseLessNonChildishIcon, having - non_childish_icon / less_non_childish_icon - (game is not restricted) but missing hybrid_non_childish_icon / hybrid_less_non_childish_icon */\n return opts.animatedIcon ? '' : this.getGameImagePlaceHolderUrl(opts.squareIcon);\n }\n }\n else {\n if (images.less_non_childish_icon && this._shouldUseLessNonChildishIcon(gameChildishMode)) {\n return opts.animatedIcon ? '' : this._getResolvedGameImagePath(images.less_non_childish_icon);\n }\n else if (images.non_childish_icon) {\n /* we are happy with the - non_childish_icon - for UseLessNonChildishIcon or UseNonChildishIcon MODE */\n return opts.animatedIcon ? '' : this._getResolvedGameImagePath(images.non_childish_icon);\n }\n else {\n /* game is Childish & does not have - non_childish_icon or less_non_childish_icon - & is not restricted, it means we just PreferNonChildishIcon and we are happy with default icon*/\n return this._getDefaultGameImage(opts);\n }\n }\n }\n }\n\n getGameImage(options?: {squareIcon?: boolean; animatedIcon?: boolean;}): string {\n let opts = {\n squareIcon: options?.squareIcon || false,\n animatedIcon: options?.animatedIcon || false,\n }\n let images = this._rawGameData && this._rawGameData.images;\n if (!images) {\n return '';\n }\n\n if(this.isChildish){\n return this._getImageForChildishGame(opts);\n }\n else {\n return this._getDefaultGameImage(opts);\n }\n }\n\n getBackgroundImage(): string {\n let background = this._rawGameData?.images?.background;\n if (!background) {\n return '';\n }\n\n return this._getResolvedGameImagePath(background);\n }\n\n private getAnimatedJsonUrl(pngImagePath: string) {\n if (!pngImagePath.endsWith('.png')) {\n this.services.logger.error(\"Animated icon path does not end in '.png': \" + pngImagePath);\n return '';\n }\n // we don't expect for substring '.png' to exist in other place than the end of the string, so we do a simple replace\n return pngImagePath.replace('.png', '.json');\n }\n\n getAnimatedImageTimings() {\n const animatedImageTimings = this._rawGameData && this._rawGameData.animatedImageTimings\n return {\n delay: animatedImageTimings?.delay || 2000,\n interval: animatedImageTimings?.interval || 3000,\n }\n }\n\n get gameImageInsideIntermediatePage(): string {\n const icon = this._rawGameData?.images?.icon;\n if (!icon) {\n return '';\n }\n\n return this._getResolvedGameImagePath(icon);\n }\n\n get gameImageInHistoryPage(): string {\n let images = this._rawGameData && this._rawGameData.images;\n if (!images) {\n return '';\n }\n\n let image: string = images.icon;\n if (this.services.theme.shouldUseSquareIcons && images.hybrid_icon) {\n image = images.hybrid_icon;\n }\n\n return this._getResolvedGameImagePath(image);\n }\n\n get badge(): string | null {\n return this._rawGameData.badge;\n }\n\n get videoThumbnailUrl(): string {\n const video_thumbnail = this._rawGameData?.images?.video_thumbnail;\n if (!video_thumbnail) {\n return '';\n }\n\n return this._getResolvedGameImagePath(video_thumbnail);\n }\n\n get slideCover() : string {\n const slideCover = this._rawGameData?.images?.slide_cover;\n if (!slideCover) {\n return '';\n }\n\n return this._getResolvedGameImagePath(slideCover);\n }\n\n get videoSlideUrl() : string {\n const slideVideo = this._rawGameData?.images?.hls_manifest;\n if (!slideVideo) {\n return '';\n }\n\n return this._getResolvedGameImagePath(slideVideo);\n }\n\n @computed\n get badgeUrl(): string | null {\n if (this.badge) {\n return this.services.configuration.data.generalSettings.gamesSettings.gameBadgePath + this.badge + '.png';\n }\n\n return null;\n }\n\n get minBet(): number {\n return this._rawGameData.minBet;\n }\n\n get maxBet(): number {\n return this._rawGameData.maxBet;\n }\n\n get maxBetPerBrand(): number {\n return this._rawGameData.maxBetPerBrand;\n }\n\n getGameImagePlaceHolderUrl(useSquareIcon?: boolean): string {\n if (useSquareIcon) {\n return this.services.theme.currentTheme.images.gameIconPlaceHolderSq.toString();\n }\n return this.services.theme.currentTheme.images.gameIconPlaceHolder.toString();\n }\n\n getImageSeoAlt() {\n\n let seoValue = this.services.configuration.data?.seo?.games?.images?.alt;\n\n return this.services.translation.translate(seoValue, {\n gameName: this.title,\n categoryName: this.gameCategory\n });\n };\n\n private _getResolvedGameImagePath(imagePath: string): string {\n return this.services.configuration.resolveGameImagePath(imagePath);\n }\n\n @computed\n get stripImage(): string {\n let images = this._rawGameData.images;\n if (!images) {\n return '';\n }\n\n return this._isMobile ? this._getResolvedGameImagePath(images.strip_mobile) :\n this._getResolvedGameImagePath(images.strip_pc);\n }\n\n @computed\n get stripeImageFallback(): string {\n let generalSettings = this.services.configuration.data.generalSettings;\n let previewDefaultImage = generalSettings && generalSettings.gamesSettings && generalSettings.gamesSettings.gamesPreviewDefaultImages;\n\n if (previewDefaultImage && this.gameCategory) {\n //Replace the game category dash to under score (like the image name for example card-and-table category name should be default_game_strip_card_and_table)\n let gameCategoryWithUnderScores = this.gameCategory.replace(/-/g, '_');\n previewDefaultImage = previewDefaultImage.replace(/{arena-category}/g, gameCategoryWithUnderScores);\n //Add _mobile if we are in mobile\n\n if (this.services.device.isMobile) {\n return previewDefaultImage.replace('.png', '_mobile.png');\n }\n\n return previewDefaultImage;\n }\n\n return ''\n }\n\n get hasVideoTrailer(): boolean {\n return this.gameType === 130136;\n }\n\n get aboutText(): string {\n return this._aboutText;\n }\n\n get multiplayer(): number {\n return this._rawGameData.multiplayer;\n }\n\n get isClassicSlot(): boolean {\n return this._hasCustomFilter('ClassicSlots');\n }\n\n get hasHighVolatility(): boolean {\n return this.volatility === GAME_VOLATILITY.High;\n }\n\n get hasLowVolatility(): boolean {\n return this.volatility === GAME_VOLATILITY.Low;\n }\n\n get hasMediumVolatility(): boolean {\n return this.volatility === GAME_VOLATILITY.Medium;\n }\n\n get hasDailyJackpot(): boolean {\n return this._hasCustomFilter('DailyJackpot');\n }\n\n get hasTwilightJackpot(): boolean {\n return this._hasCustomFilter('TwilightJackpot');\n }\n\n get hasCaptain8tJackpot(): boolean {\n return this._hasCustomFilter('Captain8Jackpot');\n }\n\n get hasRedTigerJackpot(): boolean {\n return this._hasCustomFilter('RedTigerJackpot');\n }\n\n @computed\n get shouldShowIntermediatePage(): boolean {\n if (!this._isMobile) {\n return false;\n }\n\n if (!this._rawGameData.isAnonymousSupported) {\n return false;\n }\n\n if (this.isLiveCasino) {\n return false;\n }\n\n if (this._rawGameData.forceDemoButton) {\n return true;\n }\n\n let demoSettings = this._rawGameData.demoSettings;\n if (this._isAuthorized) {\n if (demoSettings?.intermediatePageAuthorized?.mobile) {\n return true;\n }\n } else {\n if (demoSettings?.intermediatePageAnonymous?.mobile) {\n return true;\n }\n }\n\n return false;\n }\n\n get isDemoModeSupported(): boolean {\n return Boolean(this._rawGameData.isAnonymousSupported);\n }\n\n @computed\n get allowSwitchGameMode(): boolean {\n\n if(!this.isDemoModeSupported) {\n return false;\n }\n\n let demoSettings = this._rawGameData.demoSettings;\n if (!demoSettings) {\n return false;\n }\n\n if (this._isAuthorized) {\n return Boolean(demoSettings?.demoCTAAuthorized?.pc);\n } else {\n return Boolean(demoSettings?.demoCTAAnonymous?.pc);\n }\n }\n\n async open(params: OpenGameParameters): Promise {\n\n if(this._showIntermediatePage(params)) {\n return;\n }\n\n if (await this._shouldRedirectToMembership(params)) {\n this._openMembership();\n return {\n closeGame: () => {\n }\n };\n }\n\n this._sendOpenGameAnalytics(params);\n\n let gameController: IRunningGameControllerViewModel | null = null;\n if (params.isRealMode) {\n if(params.marketingParams) {\n this.services.sdk.eventsTrigger.updateMarketingParams(params.marketingParams);\n }\n gameController = await (await this.services.gameRunner).openGame({\n gameMode: GameModeEnum.Real,\n gameInfo: this,\n freePlayParams: params.freePlayParams,\n skipFreePlaySuggestion: params.skipFreePlaySuggestion,\n referrerId: params.referrerId\n });\n } else {\n gameController = await (await this.services.gameRunner).openGame({\n gameMode: GameModeEnum.Demo,\n gameInfo: this\n });\n }\n\n return {\n closeGame: async () => {\n await gameController?.closeGame({\n shouldSuggestNextGame: false\n })\n }\n }\n\n }\n\n private async _shouldRedirectToMembership(params: OpenGameParameters): Promise {\n return params.isRealMode && params.isCalledFromIntermediatePage\n && !this.services.user.isAuthorized\n && ((await this.services.cmsSegmentation).isCstatus === false);\n }\n\n\n //TODO - this should return a Promise\n private _showIntermediatePage(params: OpenGameParameters): boolean {\n if (this.shouldShowIntermediatePage && params.showIntermediatePage) {\n const dialogContentRenderer = ((dialogHandler) => );\n this.services.dialog.showModal(dialogContentRenderer, {hideCloseButton: true});\n\n return true;\n }\n\n return false;\n }\n\n\n private _openMembership() {\n this.services.analytics.sendOrbitMarketingEvent(OrbitMarketingEventAnalyticsCategory.Conversion, 'Play', OrbitMarketingEventAnalyticsLabel.PreGamePopUp);\n this.services.externalLinks.then(externalLinks => externalLinks.openMembership({\n channel: {\n area: AreaType.InGame,\n source: CHANNEL_SOURCE.casinoClient,\n element: CHANNEL_ELEMENTS.registerButton\n },\n marketingParams: {\n dl: \"20614\"\n }\n }));\n }\n\n private _sendOpenGameAnalytics(params: OpenGameParameters): void {\n if (!params.pageName || !params.listTitle) {\n return;\n }\n const listTitle = this._replaceUnderscore(params.listTitle);\n this.services.analytics.sendElasticInfoEvent({eventType:\"CGP_Game_Click\",category: params.pageName, action: 'game_click', label: listTitle, value: this.gameType.toString(), customData: params}, true);\n }\n\n\n isAllWordsMatch(words: RegExp[]) {\n let text = this.title + ' ' + this.vendorName;\n for (let index = 0; index < words.length; index++) {\n if (!text.match(words[index])) {\n return false;\n }\n }\n\n return true;\n }\n\n get gameArenaIcon(): string {\n const arena_icon = this._rawGameData?.images?.arena_icon;\n if (!arena_icon) {\n return '';\n }\n\n return this._getResolvedGameImagePath(arena_icon);\n }\n\n /**\n * @description BI/BA request not to send the underscore as part of the list title since they split by underscore to get all the data on the label\n * @param listTitle\n * @private\n */\n private _replaceUnderscore(listTitle): string {\n return listTitle.replace(/_/g, '-');\n }\n\n get restriction(): IGameRestriction {\n\n if(this._rawGameData.restriction) {\n return this._rawGameData.restriction as IGameRestriction;\n }\n\n return this.services.restrictions.getGameRestriction(this);\n }\n\n get isVideoSlot(): boolean {\n return this.gameGroupId === GAME_GROUP.VIDEO_SLOT\n || this.gameGroupId === GAME_GROUP.SLOT\n }\n\n get isCrashGame(): boolean {\n return this.gameGroupId === GAME_GROUP.CRASH_GAME;\n }\n\n //same as isCardOrTableGame() besides ARCADE, PAI_GOW_POKER, ROULETTE_LIKE\n get isCasinoGame() {\n const casinoGamesGroups = [\n GAME_GROUP.BACCARAT,\n GAME_GROUP.BLACKJACK,\n GAME_GROUP.CARRIBEAN_POKER,\n GAME_GROUP.CRAPS,\n GAME_GROUP.KENO,\n GAME_GROUP.POKER,\n GAME_GROUP.POKER_TEMPLATE_GAMES,\n GAME_GROUP.ROULETTE,\n GAME_GROUP.SCRATCH_CARD,\n GAME_GROUP.VIDEO_POKER\n ];\n\n return casinoGamesGroups.includes(this.gameGroupId);\n }\n\n get isVideoPoker(): boolean {\n return this.gameGroupId === GAME_GROUP.VIDEO_POKER;\n }\n\n get isScratchCards(): boolean {\n return this.gameGroupId === GAME_GROUP.SCRATCH_CARD;\n }\n\n get isBlackJack(): boolean {\n return this.gameGroupId === GAME_GROUP.BLACKJACK;\n }\n\n get isRoulette(): boolean {\n return this.gameGroupId === GAME_GROUP.ROULETTE;\n }\n\n get isLiveCasino(): boolean {\n return this.gameGroupId === GAME_GROUP.LIVE_CASINO;\n }\n\n get isBaccarat(): boolean {\n return this.gameGroupId === GAME_GROUP.BACCARAT;\n }\n\n\n get isCardOrTableGame(): boolean {\n\n return this.isBlackJack\n || this.isRoulette\n || this.isBaccarat\n || this.isVideoPoker\n || this.gameGroupId === GAME_GROUP.CRAPS\n || this.gameGroupId === GAME_GROUP.KENO\n || this.gameGroupId === GAME_GROUP.CARRIBEAN_POKER\n || this.gameGroupId === GAME_GROUP.POKER_TEMPLATE_GAMES\n || this.gameGroupId === GAME_GROUP.ROULETTE_LIKE\n || this.gameGroupId === GAME_GROUP.ARCADE\n || this.gameGroupId === GAME_GROUP.POWER_VIDEO_POKER\n || this.gameGroupId === GAME_GROUP.PAI_GOW_POKER\n || this.gameGroupId === GAME_GROUP.CRAZY_BLACKJACK\n }\n\n get externalGameCode(): NullableString {\n return this._rawGameData.externalGameCode;\n }\n\n get themeIds(): number[] {\n return this._rawGameData.gameThemes ?? [];\n }\n\n get volatility(): GAME_VOLATILITY {\n return this._rawGameData.volatility;\n }\n\n /**\n * For games like crash games we need to delay popups until the game animation complete event is received from the game\n */\n get requiresAnimationCompleteActionsDelay(): boolean {\n return this.isCrashGame;\n }\n\n get supportsStopAutoplay(): boolean {\n return !this.isCrashGame;\n }\n}\n","export enum GAMES_CATEGORIES {\n SLOTS = 'slots',\n CARD_AND_TABLE = 'card-and-table',\n LIVE = 'live'\n};\n","export enum GamingHistoryType {\n UserHistory = 1,\n SessionHistory = 2\n}\n","enum GNWP_SOURCES {\n CASHIER = 'cashier',\n CONTACT_US = 'contact_us',\n MEMBERSHIP = 'membership',\n FORGOT_PASSWORD = 'forgot_password',\n FORGOT_USERNAME = 'forgot_username',\n MY_ACCOUNT = 'my_account',\n OMG = 'omg',\n SPORT = 'sport',\n RICH = 'rich',\n PENDING_LOGIN = 'pending_login',\n PENDING_PLAY = 'pending_play',\n DOCUMENT_UPLOAD = 'upload_document',\n HELP = 'help',\n PENDING_APP = 'pending_app',\n POKER = 'poker',\n LIVE_CHAT = 'live_chat'\n}\n\nexport {GNWP_SOURCES};\n","/** Upper limits (non-inclusive) for media breakpoints */\nexport const breakpoints = {\n xsMax: 401,\n sMax: 768,\n mMax: 1024,\n lMax: 1280,\n xlMax: 1480\n};\n","export enum MediaType {\n All = \"all\",\n Screen = \"screen\",\n Print = \"print\",\n Speech = \"speech\",\n OnlyScreen = \"only screen\"\n}\nexport enum MediaOrientation {\n Portrait = \"portrait\",\n Landscape = \"landscape\"\n}\nexport enum MediaPointer {\n Fine = \"fine\",\n Coarse = \"coarse\",\n None = \"none\"\n}\n\nexport class MediaQueryBuilder {\n static get For(): MediaQueryBuilder {\n return new MediaQueryBuilder();\n }\n private _rules: string[] = [];\n private _mediaType: MediaType | undefined;\n\n mediaType(m: MediaType): MediaQueryBuilder {\n this._mediaType = m;\n return this;\n }\n minWidth(w: number): MediaQueryBuilder {\n this._rules.push(`(min-width: ${w}px)`);\n return this;\n }\n maxWidth(w: number): MediaQueryBuilder {\n this._rules.push(`(max-width: ${w}px)`);\n return this;\n }\n minHeight(h: number): MediaQueryBuilder {\n this._rules.push(`(min-height: ${h}px)`);\n return this;\n }\n maxHeight(h: number): MediaQueryBuilder {\n this._rules.push(`(max-height: ${h}px)`);\n return this;\n }\n orientation(o: MediaOrientation): MediaQueryBuilder {\n this._rules.push(`(orientation: ${o})`);\n return this;\n }\n hover(t: boolean) {\n this._rules.push(`(hover: ${t ? 'hover' : 'none'})`);\n return this;\n }\n anyHover(t: boolean) {\n this._rules.push(`(any-hover: ${t ? 'hover' : 'none'})`);\n return this;\n }\n pointer(precision?: MediaPointer) {\n if (precision) {\n this._rules.push(`(pointer: ${precision})`);\n } else {\n this._rules.push(`(pointer)`);\n }\n return this;\n }\n anyPointer(precision?: MediaPointer) {\n if (precision) {\n this._rules.push(`(any-pointer: ${precision})`);\n } else {\n this._rules.push(`(any-pointer)`);\n }\n return this;\n }\n build(): string {\n let rules = [...this._rules];\n if (this._mediaType) {\n rules.unshift(this._mediaType);\n }\n return rules.join(' and ');\n }\n}","import { breakpoints } from \"./breakpoints\";\nimport { IMediaQueries } from \"./media-queries.interface\";\nimport { MediaOrientation, MediaPointer, MediaQueryBuilder } from \"./media-query-builder\";\n\nlet { xsMax, sMax, mMax, lMax, xlMax } = breakpoints;\n\nexport const mediaQueries: IMediaQueries = {\n xs: MediaQueryBuilder.For.maxWidth(xsMax - 1).build(),\n\n sAndBelow: MediaQueryBuilder.For.maxWidth(sMax - 1).build(),\n sExact: MediaQueryBuilder.For.minWidth(xsMax).maxWidth(sMax - 1).build(),\n sAndAbove: MediaQueryBuilder.For.minWidth(xsMax).build(),\n\n mAndBelow: MediaQueryBuilder.For.maxWidth(mMax - 1).build(),\n mExact: MediaQueryBuilder.For.minWidth(sMax).maxWidth(mMax - 1).build(),\n mAndAbove: MediaQueryBuilder.For.minWidth(sMax).build(),\n\n lAndBelow: MediaQueryBuilder.For.maxWidth(lMax - 1).build(),\n lExact: MediaQueryBuilder.For.minWidth(mMax).maxWidth(lMax - 1).build(),\n lAndAbove: MediaQueryBuilder.For.minWidth(mMax).build(),\n\n xlAndBelow: MediaQueryBuilder.For.maxWidth(xlMax - 1).build(),\n xlExact: MediaQueryBuilder.For.minWidth(lMax).maxWidth(xlMax - 1).build(),\n xlAndAbove: MediaQueryBuilder.For.minWidth(lMax).build(),\n\n xxl: MediaQueryBuilder.For.minWidth(xlMax).build(),\n\n portrait: MediaQueryBuilder.For.orientation(MediaOrientation.Portrait).build(),\n landscape: MediaQueryBuilder.For.orientation(MediaOrientation.Landscape).build(),\n\n lowHeight: MediaQueryBuilder.For.maxHeight(900).build(),\n\n hover: MediaQueryBuilder.For.hover(true).build(),\n hoverNone: MediaQueryBuilder.For.hover(false).build(),\n\n anyHover: MediaQueryBuilder.For.anyHover(true).build(),\n anyHoverNone: MediaQueryBuilder.For.anyHover(false).build(),\n\n pointer: MediaQueryBuilder.For.pointer().build(),\n pointerFine: MediaQueryBuilder.For.pointer(MediaPointer.Fine).build(),\n pointerCoarse: MediaQueryBuilder.For.pointer(MediaPointer.Coarse).build(),\n pointerNone: MediaQueryBuilder.For.pointer(MediaPointer.None).build(),\n\n anyPointer: MediaQueryBuilder.For.anyPointer().build(),\n anyPointerFine: MediaQueryBuilder.For.anyPointer(MediaPointer.Fine).build(),\n anyPointerCoarse: MediaQueryBuilder.For.anyPointer(MediaPointer.Coarse).build(),\n anyPointerNone: MediaQueryBuilder.For.anyPointer(MediaPointer.None).build()\n}\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class AboutDialogAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"aboutDialogMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await this.services.orbitComponentInsideSdkProvider.showAboutDialog();\n }\n}\n\n\n\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\n\nexport default class CashierUploadDocumentsAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"cashierUploadDocumentsMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await this.services.cashier.openUploadDocumentsFromCashier();\n }\n}","import {AppIdentifiers, AreaType, ChatOpenMode} from \"@sparkware/uc-sdk-core\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {MenuItemActionBase} from \"../menu-item-action-base\";\n\n\nexport default class ChatAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"chatMenuItem\",configReader, services);\n }\n protected async _onClick(): Promise {\n await (await this.services.appLauncher).openChat( {\n businessCorrelationID: this.services.tools.getGuid(),\n appSpecificParameters: {\n openMode: ChatOpenMode.Chat,\n },\n channel: {\n area: AreaType.NavigationMenu,\n element: this.key,\n source: AppIdentifiers.CasinoClient\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\n\nexport default class ComPointsAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"compPointsMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await (await this.services.externalLinks).openMyAccount({\n tabId: MyAccountTab.ComPoints\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {AreaType, ControlCenterOpenSource} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\n\nexport default class ControlCenterAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"controlCenterMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: AreaType.UserArea,\n element: CHANNEL_ELEMENTS.controlCenterUsefulLink,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n source: ControlCenterOpenSource.UserArea\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class DepositAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"depositMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await this.services.cashier.openDeposit({\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.NavigationMenu,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {AppIdentifiers, AreaType} from \"@sparkware/uc-sdk-core\";\n\nexport default class HelpCenterAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"helpCenterMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await (await this.services.appLauncher).openContactUs({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: AreaType.NavigationMenu,\n element: AppIdentifiers.CRHelpCenter,\n source: AppIdentifiers.CasinoClient\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {DialogButtonClickHandleResultEnum} from \"../../dialog/dialog.service.interface\";\n\nexport default class HybridInfoAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"hybridInfoMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n const hybridInfo = await this.services.hybrid.getInfoForDisplay();\n this.services.dialog.showSimpleTextModal({\n title: 'Info',\n text: hybridInfo,\n buttons: [\n {\n text: 'Close',\n buttonPreset: 'special',\n onClick: async () => {\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n },\n {\n text: 'Mail to',\n buttonPreset: 'primary',\n onClick: async () => {\n this.services.hybrid.openMail(hybridInfo);\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ]\n })\n await this.services.orbitComponentInsideSdkProvider.showAboutDialog();\n }\n\n\n}\n\n\n\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class InactivityTimeoutSettingsAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"inactivityTimeoutSettingsMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n this.services.regulation.current.openInactivitySettings();\n }\n}\n\n\n\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class InstallPwaAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"installPWAMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await (await this.services.progressiveWebApp).prompt();\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class LoyaltyIndicatorAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"loyaltyIndicatorMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n //nothing to do here\n }\n\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class MyClubAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"myClubMenuItem\", configReader, services)\n }\n\n protected async _onClick(): Promise {\n await (await this.services.externalLinks).openMyAccount({\n tabId: MyAccountTab.LCChallenges\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IMenuItemExecuteOptions} from \"../menu-item-action.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nexport default class PushNotificationsPermissionsRequestAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"pushNotificationsPermissionsRequest\", configReader, services)\n }\n\n protected async _onClick(options?: IMenuItemExecuteOptions): Promise {\n this.services.sdk.promptPushNotificationPermissionRequest();\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {CashierSessionType} from \"@sparkware/uc-sdk-core\";\n\nexport default class ReverseWithdrawalAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"reverseWithdrawalMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await this.services.cashier.openOldCashier({sessionType: CashierSessionType.ReverseWithdrawal});\n }\n}\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\n\n\nexport default class SignUpAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"signUpMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await (await this.services.externalLinks).openMembership({\n channel: {\n area: AreaType.NavigationMenu,\n source: CHANNEL_SOURCE.casinoClient,\n element: CHANNEL_ELEMENTS.registerButton\n },\n marketingParams: {\n dl: this.config.dl\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IMenuItemExecuteOptions} from \"../menu-item-action.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\n/**\n * This class is for demonstrating how to override menu items per regulation. It should be removed when we will have a real case\n */\nexport default class TestRegulationSpecificAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"testRegulationSpecificMenuItem\", configReader, services);\n }\n protected async _onClick(options?: IMenuItemExecuteOptions): Promise {\n this.services.dialog.showSimpleTextModal({\n text: 'Test regulation specific menu item',\n title: 'test',\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {AreaType, ControlCenterDeeplink, ControlCenterOpenSource} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\n\nexport default class TimeSpentReminderAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"timeSpentReminderMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n\n channel: {\n area: AreaType.UserArea,\n element: CHANNEL_ELEMENTS.controlCenterUsefulLink,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n deeplink: ControlCenterDeeplink.TimeSpentReminderPage,\n source: ControlCenterOpenSource.UserArea\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class TouchIdAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"touchIdMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n this.services.specificDialogs.showModifyBiometricDialog();\n }\n}\n\n\n\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\n\nexport default class TransactionHistoryAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"transactionHistoryMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise {\n await this.services.cashier.openTransactionHistory(\n {\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.UserArea,\n element: CHANNEL_ELEMENTS.transactionHistoryButton\n }\n }\n );\n }\n}","import {IMenuItemAction, IMenuItemExecuteOptions} from \"./menu-item-action.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {\n IMenuItemConfigReader, MenuItemConfigurationExtended\n} from \"../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {MenuItemKey} from \"../configurations/config-data-sections/generated-config-const\";\nimport {NullableUndefinedString} from \"../../../common/types/nullable-types\";\n\nexport abstract class MenuItemActionBase implements IMenuItemAction {\n constructor(public readonly key: MenuItemKey,\n private readonly configReader: IMenuItemConfigReader,\n protected readonly services: IServiceFactoryExtended) {\n }\n\n\n protected abstract _onClick(options?: IMenuItemExecuteOptions): Promise;\n\n async execute(options?: IMenuItemExecuteOptions): Promise {\n const sideMenu = await this.services.sideMenu;\n await sideMenu.closeMobileMenu();\n (await this.services.userMenu).closeMenu();\n this.services.hybrid.closeSecondWebView();\n const drawer = await this.services.drawer;\n drawer.right.closeDrawer();\n const analytics = this.config.analytics;\n if(analytics) {\n this.services.analytics.sendOrbitUserFlowEvent(analytics.category, analytics.action, analytics.label);\n }\n await this._onClick();\n }\n\n private _config: MenuItemConfigurationExtended | null = null;\n\n protected get config(): MenuItemConfigurationExtended {\n if(!this._config) {\n this._config = this.configReader.getMenuItemConfig(this.key);\n }\n\n return this._config;\n }\n\n get isMatchToCurrentUrl(): boolean {\n return false;\n }\n\n getLinkUrl(): NullableUndefinedString {\n if(!this.config.linkId) {\n return null;\n }\n return this.services.linksNavigation.getLinkUrl(this.config.linkId);\n }\n\n}","import {\n IMenuItemConfigReader,\n MenuItemAnalyticsCategoryAndLabel,\n MenuItemConfigurationExtended\n} from \"./menu-item-config-reader.interface\";\nimport {\n MenuItemConfiguration,\n MenuItemsConfiguration\n} from \"../../configurations/config-data-sections/menu-items.configuration\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {AnalyticsConfiguration} from \"../../configurations/config-data-sections/analytics.configuration\";\n\nexport abstract class MenuItemConfigReaderBase implements IMenuItemConfigReader {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n\n protected abstract _getMenuItemsConfigOverrides(): MenuItemsConfiguration | undefined;\n protected abstract _getAnalyticsCategoryAndLabel(): MenuItemAnalyticsCategoryAndLabel | null;\n\n getMenuItemConfig(key: string): MenuItemConfigurationExtended {\n const allConfigs = this.services.configuration.data;\n const menuItemConfig: MenuItemConfiguration | undefined = allConfigs.menuItems[key];\n if(!menuItemConfig) {\n throw new Error(`Missing configuration for ${key} menu item`);\n }\n\n const menuItemsOverrides = this._getMenuItemsConfigOverrides();\n\n const menuItemConfigOverride: MenuItemConfiguration | undefined = menuItemsOverrides && menuItemsOverrides[key];\n\n\n\n const menuItemConfigProxyHandler = {\n get: (target: any, prop: string) => {\n if(prop === 'analytics') {\n const categoryAndLabel = this._getAnalyticsCategoryAndLabel();\n if(categoryAndLabel) {\n const analyticsConfig: AnalyticsConfiguration = {\n action: key,\n ...categoryAndLabel\n }\n return analyticsConfig;\n } else {\n return null;\n }\n } else {\n const overridePropValue = menuItemConfigOverride && menuItemConfigOverride[prop];\n if(Check.isUndefined(overridePropValue)) {\n return target[prop];\n } else {\n return overridePropValue;\n }\n }\n }\n }\n\n return new Proxy(menuItemConfig, menuItemConfigProxyHandler);\n\n\n }\n}\n\n","import {MenuItemConfigReaderBase} from \"./menu-item-config-reader-base\";\nimport {\n MenuItemsConfiguration\n} from \"../../configurations/config-data-sections/menu-items.configuration\";\nimport {MenuItemAnalyticsCategoryAndLabel} from \"./menu-item-config-reader.interface\";\n\nexport class MenuItemDefaultConfigReader extends MenuItemConfigReaderBase {\n protected _getMenuItemsConfigOverrides(): MenuItemsConfiguration | undefined {\n return undefined;\n }\n\n protected _getAnalyticsCategoryAndLabel(): MenuItemAnalyticsCategoryAndLabel | null {\n return null;\n }\n}","import {IMenuItemRenderer, IRenderMenuItemOptions} from \"./menu-item.renderer.interface\";\nimport React from \"react\";\nimport {\n IMenuItemAction,\n IMenuItemExecuteOptions\n} from \"../../menu-item-action-factory/menu-item-action.interface\";\nimport {MenuItemKey} from \"../../configurations/config-data-sections/generated-config-const\";\nimport {NullableUndefinedString} from \"../../../../common/types/nullable-types\";\nimport {IconSourceConfiguration} from \"../../configurations/config-data-sections/icon-source.configuration\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {\n IMenuItemConfigReader,\n MenuItemConfigurationExtended\n} from \"../menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IMenuItemActionFactoryService} from \"../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\n\nexport abstract class MenuItemRendererBase implements IMenuItemRenderer {\n constructor(public readonly key: MenuItemKey,\n private readonly configReader: IMenuItemConfigReader,\n protected readonly services: IServiceFactoryExtended,\n protected readonly menuItemActionFactory: IMenuItemActionFactoryService) {\n this.menuItemAction = this.menuItemActionFactory.getMenuItemAction(this.key, this.configReader);\n }\n\n protected abstract _createReactElement(options?: IRenderMenuItemOptions): React.ReactElement;\n\n\n private _config: MenuItemConfigurationExtended | null = null;\n protected _lastRenderOptions: IRenderMenuItemOptions | undefined = undefined;\n\n private get config(): MenuItemConfigurationExtended {\n if(!this._config) {\n this._config = this.configReader.getMenuItemConfig(this.key);\n }\n\n return this._config;\n }\n\n private readonly menuItemAction: IMenuItemAction;\n\n renderMenuItem(options?: IRenderMenuItemOptions): React.ReactElement {\n this._lastRenderOptions = options;\n return this._createReactElement(options);\n }\n\n execute(options?: IMenuItemExecuteOptions): Promise {\n if(this._lastRenderOptions?.onBeforeClick) {\n this._lastRenderOptions.onBeforeClick();\n }\n return this.menuItemAction.execute(options);\n }\n\n\n get text(): string {\n return this.services.translation.translate(this.config.text);\n }\n\n get sideText(): NullableUndefinedString {\n return null;\n }\n\n get imageOnlyRendering(): boolean {\n return this.config.imageOnlyRendering ?? false;\n }\n\n protected _shouldDisplay(): boolean {\n return this.config.display ?? true;\n }\n\n get display(): boolean {\n return this._shouldDisplay();\n }\n\n get isMatchToCurrentUrl(): boolean {\n return this.menuItemAction.isMatchToCurrentUrl;\n }\n\n get iconSource(): IconSourceConfiguration {\n return this.config.menuItemIconSource ?? \"themeIcons\";\n }\n\n get icon(): NullableUndefinedString {\n return this.config.menuItemIcon;\n }\n\n get iconAltText(): NullableUndefinedString {\n return this.services.translation.translate(this.config.menuItemIconAltText);\n }\n\n getLinkUrl(): NullableUndefinedString {\n return this.menuItemAction.getLinkUrl();\n }\n\n\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {AnimationStatus, PixiSpineAnimation} from \"./pixi-spine-animation\";\n\nexport enum AnimatedIconUnloadReason {\n CONTEXT_LOST,\n VIEWPORT_EXIT,\n REQUESTED,\n GAME_OPEN\n}\n\nexport interface IAnimatedIconRequestOptions {\n jsonUrl: string;\n wrapper: HTMLElement;\n size: {width: number; height: number};\n timings: {delay: number; interval: number;};\n onAnimationLoad?(): void;\n onAnimationWillUnload?(reason: AnimatedIconUnloadReason): void;\n}\n\nexport type AnimatedIconObservableTarget = IAnimatedIconRequestOptions & {\n animation?: PixiSpineAnimation;\n animationDisposer?(reason: AnimatedIconUnloadReason): void;\n inViewport?: boolean;\n};\n\n\nexport class AnimatedIconBaseService extends ServiceBase{\n\n\n protected loadAnimatedIcon(options: AnimatedIconObservableTarget, resourceName: string) {\n if (options.animation && (options.animation.status === AnimationStatus.Loading || options.animation.status === AnimationStatus.Running)) {\n throw new Error(\"Animated Icon Loading in progress already for this icon. Please be patient\");\n }\n\n let iconPixiAnimation = new PixiSpineAnimation(this.services, {\n width: options.size.width, height: options.size.height,\n onContextLost: () => {\n if (options.animationDisposer) {\n options.animationDisposer(AnimatedIconUnloadReason.CONTEXT_LOST);\n }\n }\n }, [{name: resourceName, jsonUrl: options.jsonUrl}], {\n render: ({spineAnimations, loaderResources}) => {\n let spineAnimation = spineAnimations[resourceName];\n // get the animations\n const availableAnimations = loaderResources[resourceName].spineData.animations.map(a => a.name);\n\n // play animation\n const runAnimation = () => {\n // animated icons will have only one animation that we play in loop. There won't be complex timeline animations\n spineAnimation.state.setAnimation(0, availableAnimations[0], false);\n }\n let animationSchedule: any;\n\n spineAnimation.state.addListener({\n complete: (entry) => {\n // when animation completes, schedule the next iteration\n animationSchedule = setTimeout(runAnimation, options.timings.interval);\n }\n });\n\n runAnimation();\n\n options.animationDisposer = (reason: AnimatedIconUnloadReason) => {\n if (options.onAnimationWillUnload) {\n options.onAnimationWillUnload(reason);\n }\n iconPixiAnimation.dispose();\n };\n\n return () => {\n clearTimeout(animationSchedule);\n };\n }\n }, {\n display: \"block\",\n width: \"100%\"\n });\n\n options.animation = iconPixiAnimation;\n options.animationDisposer = iconPixiAnimation.dispose;\n\n iconPixiAnimation.start().then(({status}) => {\n if (status === AnimationStatus.Running) {\n if (options.onAnimationLoad) {\n options.onAnimationLoad();\n }\n iconPixiAnimation.attachToDOM(options.wrapper);\n }\n }).catch((e) => {\n // An error occured while loading the animated icon. log the error\n this.services.logger.error(e);\n });\n }\n}","import {CSSProperties} from \"react\";\nimport {IServiceFactory} from \"../service-factory.interface\";\nimport {Spine, IPixiAppCreateOptions, Application, LoaderResource} from \"./pixi-app.service.interface\";\n\nexport interface IPixiSpineResourceDef {\n name: string;\n jsonUrl: string;\n}\n\ntype AnimationDef = (stuff: {pixiApp: Application, spineAnimations: Record; loaderResources: Record;}) => (void | (() => void));\n\nexport interface IAnimationRenderer {\n render: AnimationDef;\n dispose?(): void\n}\n\nexport enum AnimationStatus {\n Idle,\n Loading,\n Failed,\n Aborted,\n Running,\n Disposed\n}\n\ninterface IPixiAnimationPromiseResultSuccess {\n status: AnimationStatus.Running;\n canvas: HTMLCanvasElement;\n}\ninterface IPixiAnimationPromiseResultOther {\n status: AnimationStatus.Failed | AnimationStatus.Aborted | AnimationStatus.Disposed;\n canvas?: undefined;\n}\n\ntype IPixiAnimationPromiseResult = IPixiAnimationPromiseResultSuccess | IPixiAnimationPromiseResultOther;\n\nexport class PixiSpineAnimation {\n private pixiApp: Application;\n private pixiAppDisposer: () => void;\n private _spineAnimations: Record = {};\n private _loaderResources: Record = {};\n private disposeActions: Array<() => void> = [];\n private _signalAborted = false;\n private _status: AnimationStatus = AnimationStatus.Idle;\n\n constructor(\n private services: IServiceFactory,\n private pixiAppCreateOptions: IPixiAppCreateOptions,\n private resourcesUrls: IPixiSpineResourceDef[],\n private renderer: IAnimationRenderer,\n private canvasCss?: CSSProperties\n ) {\n }\n\n private initPromise: Promise = null;\n public start(): Promise {\n if (!this.initPromise) {\n this.initPromise = this._initialize();\n }\n return this.initPromise;\n }\n\n private async _initialize(): Promise {\n // The init started, set the status as Loading\n this._status = AnimationStatus.Loading;\n // between constructor and start, the animation could have been aborted or disposed, check it\n if (this._signalAborted) {\n this._status = AnimationStatus.Aborted;\n return {status: AnimationStatus.Aborted};\n }\n\n // create pixi app. this loads the pixi and pixi-spine libraries first time they are called\n let {app: pixiApp, dispose: disposePixiApp, PixiSpine, canvas} = await this.services.pixiApp.createPixiApp(this.pixiAppCreateOptions);\n this.pixiApp = pixiApp;\n this.pixiAppDisposer = disposePixiApp;\n\n const {resources} = await this.services.pixiApp.loadResources(pixiApp, this.resourcesUrls).catch((e: unknown) => {\n this._status = AnimationStatus.Failed;\n disposePixiApp();\n throw e;\n });\n\n // loading of pixi libraries and animation resources are async, I must check if someone aborted the animation meanwhile\n if (this._signalAborted) {\n this._status = AnimationStatus.Aborted;\n this._disposeInternal();\n return {status: AnimationStatus.Aborted};\n }\n\n // Apply custom CSS to the canvas element created by pixi\n if (this.canvasCss) {\n Object.getOwnPropertyNames(this.canvasCss).forEach((styleKey) => {\n canvas.style[styleKey] = this.canvasCss[styleKey];\n });\n }\n\n // for all loaded resources instantiate Spine objects.\n // keep both raw loaded resources and Spine objects in Map or Record objects. key is the name.\n this.resourcesUrls.forEach((resUrl) => {\n this._loaderResources[resUrl.name] = resources[resUrl.name];\n let spineAnimation = new PixiSpine.Spine(resources[resUrl.name].spineData);\n this._spineAnimations[resUrl.name] = spineAnimation;\n pixiApp.stage.addChild(spineAnimation);\n });\n\n // run the specific animation instructions that are given in constructor\n // for now, only sync code is supported. to support async make it await\n // const renderDisposer = await this.renderer.render({spineAnimations, loaderResources}); // <- the renderer return Promise\n const renderDisposer = this.renderer.render({pixiApp, spineAnimations: this._spineAnimations, loaderResources: this._loaderResources});\n if (renderDisposer) {\n this.disposeActions.push(renderDisposer);\n }\n\n // in case the renderer is async then we should check again if the loading was aborted.\n // for now, this code is useless because for the renderer to support async code it should be something like this:\n // const renderDisposer = await this.renderer.render({spineAnimations, loaderResources}); // <- the renderer return Promise\n if (this._signalAborted) {\n this._status = AnimationStatus.Aborted;\n this._disposeInternal();\n return {status: AnimationStatus.Aborted};\n }\n\n // all done, set the status to Running and return the status (resolve)\n this._status = AnimationStatus.Running;\n\n return {status: AnimationStatus.Running, canvas: this.pixiApp.view};\n }\n\n public attachToDOM(wrapper: HTMLElement): Promise {\n if (!this.initPromise) {\n throw new Error(\"Method attachToDOM MUST be called after the method start\");\n }\n return this.initPromise.then((result) => {\n // At this point the status can be only Aborted or Running\n // Or, after disposal, the status could be Disposed\n if (result.status === AnimationStatus.Running) {\n wrapper.appendChild(result.canvas);\n }\n return result;\n });\n }\n\n public get spineAnimations() {\n return this._spineAnimations;\n }\n\n public get loaderResources() {\n return this._loaderResources;\n }\n\n public get status() {\n return this._status;\n }\n\n /**\n * Dispose is the one method to be called both for disposal of the running animation and for aborting a loading one\n * If the animation object is newly created or loading, then the controller abort will be called.\n * that will cause a call to _disposeInternal from the _initialize method, as soon as the method checks the aborted flag\n * If the animation is running, we set the disposed status and call _disposeInternal owrselves\n */\n public dispose = () => {\n if (this._status === AnimationStatus.Idle || this._status === AnimationStatus.Loading) {\n this._signalAborted = true;\n } else if (this._status === AnimationStatus.Running) {\n this._status = AnimationStatus.Disposed;\n this._disposeInternal();\n }\n }\n\n private _disposeInternal = () => {\n while (this.disposeActions.length) {\n const disposeAction = this.disposeActions.pop();\n disposeAction();\n };\n if (this.renderer.dispose) {\n this.renderer.dispose();\n }\n while (this.resourcesUrls.length) {\n const resource = this.resourcesUrls.pop();\n if (this._spineAnimations[resource.name]) {\n this._spineAnimations[resource.name].autoUpdate = false;\n this._spineAnimations[resource.name].destroy();\n delete this._spineAnimations[resource.name];\n }\n }\n this.pixiAppDisposer();\n }\n\n}\n","export enum LocalStorageKeys {\n currentRunningGameTab = 'cgp_CURRENT_RUNNING_GAME_TAB',\n currentRunningGameType = 'cgp_CURRENT_RUNNING_GAME_TYPE',\n uccMessages = 'cgp_ucc',\n crossBrandSpecificNavigationInfo = 'orbit_crossBrandSpecificNavigation',\n clientIpAddressesV2 = \"orbit_clientIpAddressesV2\",\n videoSlides = 'cgp_VideoSlides',\n lastLogin = \"cgp_lastLogin\",\n}","import {LanguageSwitcherConfiguration} from \"../../app-bootstrap/config-interfaces/b2c-startup.configurations\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IThemeCustomizer} from \"./theme.service.interface\";\n\nexport class StandardThemeCustomizer implements IThemeCustomizer {\n constructor(protected readonly services: IServiceFactoryExtended) {}\n getHomePageTopBannerHeight(): string {\n if (this.services.homepage.headerArenasStyleIsSmallTiles) {\n if (this.services.mediaQuery.sAndBelow) {\n return \"22rem\";\n }\n\n return \"29rem\";\n }\n\n if (this.services.mediaQuery.sAndBelow) {\n return \"25rem\";\n } else if (this.services.mediaQuery.lAndBelow) {\n return \"30rem\";\n }\n\n return \"47rem\";\n }\n\n getLanguageSwitcherConfigForTestEnvironments(): LanguageSwitcherConfiguration {\n return {\n \"languages\": [\n {\n \"title\": \"简体中文\",\n \"url\": \"https://cns.888casino.com/\"\n },\n {\n \"title\": \"Deutsch\",\n \"url\": \"https://de.888casino.com/\"\n },\n {\n \"title\": \"Español\",\n \"url\": \"https://es.888casino.com/\"\n },\n {\n \"title\": \"Français\",\n \"url\": \"https://fr.888casino.com/\"\n },\n {\n \"title\": \"日本語\",\n \"url\": \"https://jp.888casino.com/\"\n },\n {\n \"title\": \"Русский\",\n \"url\": \"https://ru.888casino-game.com/\"\n },\n {\n \"title\": \"ภาษาไทย\",\n \"url\": \"https://th.888casino.com/\"\n },\n {\n \"title\": \"Português\",\n \"url\": \"https://br.888casino.com/\"\n },\n {\n \"title\": \"العربية\",\n \"url\": \"https://ar.playat888-games.com/\"\n }\n ],\n \"countries\": [\n {\n \"title\": \"Canada\",\n \"url\": \"https://ca.888casino.com/\"\n },\n {\n \"title\": \"España\",\n \"url\": \"https://www.888casino.es\"\n },\n {\n \"title\": \"Danmark\",\n \"url\": \"https://www.888casino.dk\"\n },\n {\n \"title\": \"România\",\n \"url\": \"https://www.888casino.ro\"\n },\n {\n \"title\": \"Italia\",\n \"url\": \"https://www.888casino.it\"\n },\n {\n \"title\": \"Sverige\",\n \"url\": \"https://www.888casino.se\"\n },\n {\n \"title\": \"United States\",\n \"url\": \"https://us.888casino.com\"\n },\n {\n \"title\": \"Portugal\",\n \"url\": \"https://casino.888.pt\",\n \"sendFunnelParameters\": true\n },\n {\n \"title\": \"Deutschland\",\n \"url\": \"https://www.888slots.de\"\n }\n ],\n \"languageSettings\": {\n \"title\": \"Choose your language:\",\n \"current\": \"English\"\n },\n \"countrySettings\": {\n \"title\": \"Or choose your country:\",\n \"current\": \"\"\n }\n }\n };\n}\n","export enum CypressToastClassNames {\n Container = \"cy-toast-container\",\n Toast = \"cy-toast\",\n}\n\nexport enum ToastClassNames {\n Container = \"orbit-toast-container\",\n Toast = \"orbit-toast\",\n Body = \"orbit-toast-body\",\n ProgressBar = \"orbit-toast-progress-bar\"\n}\n\nlet toastClassNames: string = \"\";\nexport function addToastClassName(className?: string | undefined) {\n if (!className) {\n return toastClassNames;\n }\n toastClassNames += \" \" + className;\n return toastClassNames;\n}","import React from 'react';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {IStandardToastContentProps} from \"../../components/toaster/toasts-content/standard-toast.component.props\";\n\nexport interface IToastHandler {\n readonly toastId: number | string;\n close(closeReason?: ToastCloseReason | string): void;\n}\n\ninterface IToastOptions {\n timeout?: TimeSpan;\n hideProgressBar?: boolean;\n className?: string;\n closeButton?: boolean;\n}\n\n\n\nexport enum ToastCloseReason {\n CloseButton = \"CloseButton\",\n}\n\nexport interface IToastDefinition {\n id?: number | string;\n toastOptions?: IToastOptions;\n renderContent: (handler: IToastHandler) => React.ReactElement;\n onToastShown?: () => void;\n displayCondition?: () => boolean;\n /**\n * @param closeReason ToastCloseReason | string | undefined\n * closeReason will be ToastCloseReason.CloseButton if the toast is closed from X button or undefined if it's autoClosed by the timeout or whatever you pass to the handler close method\n * Keep in mind that if you don't pass an argument to the close method the reason will be undefined just as in the case of timeout\n */\n onToastClosed?: (closeReason?: ToastCloseReason | string) => void;\n}\n\nexport interface IStandardToastDefinition extends Omit {\n contentProps: IStandardToastContentProps;\n}\n\ninterface IAnalyticsData {\n category: string;\n action: string;\n label?: string;\n}\n\nexport interface IAnalyticsOptions {\n analyticsData?: IAnalyticsData;\n}\n\nexport interface IToasterService {\n readonly hasOpenToasters: boolean;\n showCustomToast(toastDef: IToastDefinition): IToastHandler;// Promise;\n showStandardToast(toastDef: IStandardToastDefinition): IToastHandler;\n showAckStandardToast(toastDef: IStandardToastDefinition): IToastHandler;\n removeAllToasts: () => void;\n}\n","import {CyClass} from \"../../../../common/cy-classes\";\n\nexport const TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE = CyClass('cy-header-bankroll-button-mobile');\nexport const TOOLTIP_TARGET_FREE_PLAY_INDICATOR = CyClass('cy-free-play-indicator-button');\nexport const TOOLTIP_TARGET_GIFT_MINI_ORBIT_INDICATOR = CyClass('cy-header-menu-gift-button');\nexport const TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON = CyClass('cy-header-control-center-button');\nexport const TOOLTIP_TARGET_BOTTOM_NAV_BAR_INDICATOR = CyClass('cy-bottom-navbar-menu-item');\n","export interface IAsset {\n toString(): string;\n}\n\nexport interface AssetLocationInfo {\n readonly skinFullName: string;\n readonly serverPath: string;\n readonly configurationPath: string;\n}\nexport class Asset implements IAsset {\n constructor(private _relativePath: string, private _brandsOverrides: { [key: string]: boolean }) {\n }\n\n\n private _locationInfo: AssetLocationInfo;\n\n resolveLocation(locationInfo: AssetLocationInfo): string {\n this._locationInfo = locationInfo;\n return this.toString();\n }\n\n toString(): string {\n if(!this._locationInfo) { // this is for the asset to work on unit testing time\n return this._relativePath;\n }\n\n if (this._brandsOverrides[this._locationInfo.skinFullName]) {\n return this._locationInfo.configurationPath + 'assets/' + this._relativePath;\n }\n\n return this._locationInfo.serverPath + 'assets/' + this._relativePath;\n }\n}\n","import { ThemeName } from \"./theme-names\";\n\nexport class ByThemeRegistry {\n constructor(private _default: T) {}\n\n private _registry: Partial> = {};\n\n forCasino777(override: T): this {\n this._registry[ThemeName.Casino777.forClient] = override;\n return this;\n }\n\n forCasino888(override: T): this {\n this._registry[ThemeName.Casino888.forClient] = override;\n return this;\n }\n\n forCip(override: T): this {\n this._registry[ThemeName.Casino888Cip.forClient] = override;\n return this;\n }\n\n forWsopCip(override: T): this {\n this._registry[ThemeName.WsopCip.forClient] = override;\n return this;\n }\n\n forCis(override: T): this {\n this._registry[ThemeName.Casino888Cis.forClient] = override;\n return this;\n }\n\n forHarrahs(override: T): this {\n this._registry[ThemeName.Harrahs.forClient] = override;\n return this;\n }\n\n forWsop(override: T): this {\n this._registry[ThemeName.Wsop.forClient] = override;\n return this;\n }\n\n forSI(override: T): this {\n this._registry[ThemeName.SI.forClient] = override;\n return this;\n }\n\n forSICis(override: T): this {\n this._registry[ThemeName.SICis.forClient] = override;\n return this;\n }\n\n forMrGreen(override: T): this {\n this._registry[ThemeName.MrGreen.forClient] = override;\n return this;\n }\n\n forMrGreenCis(override: T): this {\n this._registry[ThemeName.MrGreenCis.forClient] = override;\n return this;\n }\n\n forMrGreenCip(override: T): this {\n this._registry[ThemeName.MrGreenCip.forClient] = override;\n return this;\n }\n\n getRegistryItem = (themeName: ThemeName) => {\n return this._registry[themeName.forClient] ? this._registry[themeName.forClient] : this._default;\n }\n}\n","import {EMBEDDED_HYBRID, MINI_ORBIT} from '../../css-global-classes';\n\nexport class CssRule {\n static get For(): CssRule {\n return new CssRule()\n }\n private _rules: string[] = [];\n private negateNextRule: boolean = false;\n private formatRule(rule: string) {\n if (this.negateNextRule) {\n this.negateNextRule = false;\n return `:not(${rule})`;\n }\n return rule;\n }\n get not(): CssRule {\n this.negateNextRule = true\n return this;\n }\n get desktop(): CssRule {\n this._rules.push(this.formatRule('.cgp-pc'));\n return this;\n }\n\n get ipad(): CssRule {\n this._rules.push(this.formatRule('.cgp-ipad-device'));\n return this;\n }\n\n get mobile(): CssRule {\n this._rules.push(this.formatRule('.cgp-mobile'));\n return this;\n }\n\n get notMobileOs(): CssRule {\n this._rules.push(this.formatRule('.cgp-not-mobile-os'));\n return this;\n }\n\n get lowRes(): CssRule {\n this._rules.push(this.formatRule('.cgp-low-resolution'));\n return this;\n }\n\n get portrait(): CssRule {\n this._rules.push(this.formatRule('.cgp-portrait'));\n return this;\n }\n\n get landscape(): CssRule {\n this._rules.push(this.formatRule('.cgp-landscape'));\n return this;\n }\n\n get tablet(): CssRule {\n this._rules.push(this.formatRule('.cgp-tablet'));\n return this;\n }\n\n get RTL(): CssRule {\n this._rules.push(this.formatRule('.cgp-rtl'));\n return this;\n }\n\n get embededHybrid(): CssRule {\n this._rules.push(this.formatRule(`.${EMBEDDED_HYBRID}`));\n return this;\n }\n\n get hybrid(): CssRule {\n this._rules.push(this.formatRule(`.cgp-hybrid`));\n return this;\n }\n\n get iPhoneVer5(): CssRule {\n this._rules.push(this.formatRule('.cgp-iphone-ver-5'));\n return this;\n }\n\n get iPhoneVer10(): CssRule {\n this._rules.push(this.formatRule('.cgp-iphone-ver-10'));\n return this;\n }\n\n get realMobile(): CssRule {\n this._rules.push(this.formatRule('.cgp-real-mobile'));\n return this;\n }\n\n get miniOrbit(): CssRule {\n this._rules.push(this.formatRule(`.${MINI_ORBIT}`));\n return this;\n }\n\n build(): string {\n if(this._rules.length === 0) {\n return '';\n }\n\n return `html${this._rules.join('')}`;\n }\n}\n","import styled, { css } from \"styled-components\";\n\ntype FlexAlignItemsProp = \"flex-start\" | \"flex-end\" | \"stretch\" | \"center\" | \"baseline\";\ntype FlexJustifyContentProp = \"flex-start\" | \"flex-end\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\ntype FlexDirection = \"column\" | \"column-reverse\" | \"row\" | \"row-reverse\";\n\n/* styled components css interpolations */\n\nexport const flexRowContainerMixin = css`\n display: flex;\n flex-direction: row;\n`;\nexport const flexRowReverseContainerMixin = css`\n display: flex;\n flex-direction: row-reverse;\n`;\nexport const flexColumnContainerMixin = css`\n display: flex;\n flex-direction: column;\n`;\n\nexport const flexAlignItemsMixin = (props: {alignItems?: FlexAlignItemsProp;}) => css`\n align-items: ${props.alignItems || \"unset\"};\n`;\nexport const flexJustifyContentMixin = (props: {justifyContent?: FlexJustifyContentProp;}) => css`\n justify-content: ${props.justifyContent || \"unset\"};\n`;\nexport const flexCenterAlignItemsMixin = css`\n ${flexAlignItemsMixin({alignItems: \"center\"})}\n`;\n\nexport const flexGrowItem = (props: {flexBasis?: string;}) => css`\n flex: 1 0 ${props.flexBasis || \"auto\"};\n`;\nexport const flexShrinkItem = (props: {flexBasis?: string; flexShrink?: number;}) => css`\n flex: 0 ${props.flexShrink || \"1\"} ${props.flexBasis || \"auto\"};\n`;\nexport const flexFixedSizeItem = css`\n flex: 0 0 auto;\n`;\nexport const flexAdaptiveSizeItem = css`\n flex: 1 1 auto;\n`;\n\n/* styled based components, to be used as is or as Base to be extended */\n\nexport const FlexFixedSizeItemBox = styled.div`\n ${flexFixedSizeItem}\n`;\n\nexport const FlexGrowItemBox = styled.div`\n ${flexGrowItem}\n`;\n\nexport const FlexShrinkItemBox = styled.div`\n ${flexShrinkItem}\n`;\n\nexport const FlexAdaptiveSizeItemBox = styled.div`\n ${flexAdaptiveSizeItem}\n`;\n\nexport const FlexContainerBox = styled.div<{\n alignItems?: FlexAlignItemsProp;\n justifyContent?: FlexJustifyContentProp;\n direction?: FlexDirection;\n}>`\n ${({direction}) => direction === \"column\" ? flexColumnContainerMixin : flexRowContainerMixin};\n ${flexAlignItemsMixin}\n ${flexJustifyContentMixin}\n`;\n","export const grayColors = {\n black: \"#000000\",\n gray013: \"#0d0d0d\",\n gray023: \"#171717\",\n gray033: \"#212121\",\n gray043: \"#2b2b2b\",\n gray053: \"#353535\",\n gray063: \"#3f3f3f\",\n gray073: \"#494949\",\n gray083: \"#535353\",\n gray093: \"#5d5d5d\",\n gray103: \"#676767\",\n gray113: \"#717171\",\n gray123: \"#7b7b7b\",\n gray133: \"#858585\",\n gray143: \"#8f8f8f\",\n gray153: \"#999999\",\n gray163: \"#a3a3a3\",\n gray173: \"#adadad\",\n gray183: \"#b7b7b7\",\n gray193: \"#c1c1c1\",\n gray203: \"#cbcbcb\",\n gray213: \"#d5d5d5\",\n gray223: \"#dfdfdf\",\n gray233: \"#e9e9e9\",\n gray243: \"#f3f3f3\",\n gray253: \"#fdfdfd\",\n white: \"#ffffff\",\n transparent: \"transparent\"\n}","\nexport enum HeaderArenasStyle {\n BigTiles,\n SmallTiles,\n Menu\n }\n\nexport interface IThemeLayout {\n headerArenasStyle?: HeaderArenasStyle;\n border: {\n radius: string;\n };\n}","import React from \"react\";\nimport {IThemeBoxes} from \"../../services/theme/theme-boxes.interface\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\n\nexport function styledBox(boxName: TBoxName): IThemeBoxes[TBoxName] {\n\n const Component: React.FC = (props: any) => {\n const services = useServices();\n const themeBoxes = services.theme.boxes;\n let Box: any = (themeBoxes && themeBoxes[boxName]);\n\n\n if(!Box) {\n throw new Error(`Missing styled box ${boxName}`);\n }\n\n return (\n \n {props.children}\n \n )\n\n }\n\n let finalComponent = React.forwardRef((props, ref) => );\n return (finalComponent as any) as IThemeBoxes[TBoxName];\n\n\n}\n","import React from 'react';\nimport {StyledComponent} from 'styled-components';\nimport {OrbitTheme} from './orbit-theme.interface';\nimport {OrbitComponent} from '../../components/base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\n\n/**\n * @deprecated\n */\nexport function styledByDevice, O extends object = {}>(\n pc: StyledComponent, mobile: StyledComponent\n): StyledComponent {\n\n let ComponentDefinition = observer(class extends OrbitComponent{\n render() {\n let Component = null;\n\n if(this.services.device.isMobile) {\n Component = mobile;\n } else {\n Component = pc;\n }\n\n return (\n \n {this.props.children}\n \n );\n }\n });\n\n\n let finalComponent = React.forwardRef((props, ref) => );\n\n return (finalComponent as any) as StyledComponent;\n}","import React from 'react';\nimport { StyledComponent } from 'styled-components';\nimport { OrbitTheme } from './orbit-theme.interface';\nimport { OrbitComponent } from '../../components/base-components/orbit-component/orbit-component';\nimport { ByThemeRegistry } from './by-theme-registry';\n\nclass StyledByTheme, O extends object = {}> extends ByThemeRegistry> {\n\n apply(): StyledComponent {\n const getRegistryItem = this.getRegistryItem;\n let ComponentDefinition = class extends OrbitComponent{\n render() {\n let Component: any = getRegistryItem(this.services.theme.themeName);\n\n return (\n \n {this.props.children}\n \n );\n }\n };\n\n let finalComponent = React.forwardRef((props, ref) => );\n\n return (finalComponent as any) as StyledComponent;\n }\n}\n\n\nexport function styledByTheme<\n C extends keyof JSX.IntrinsicElements | React.ComponentType,\n O extends object = {}\n>(defaultComponent: StyledComponent): StyledByTheme {\n return new StyledByTheme(defaultComponent);\n}\n","import {ClientThemeName} from \"@sparkware/uc-sdk-core\";\n\nexport class ThemeName {\n constructor(public readonly forClient: string,\n public readonly forWidgets: ClientThemeName) {\n }\n\n public static Casino888 = new ThemeName('casino888', ClientThemeName.Casino888);\n public static Casino888Cip = new ThemeName(\"casino888/cip\", ClientThemeName.Casino888);\n public static Casino888Cis = new ThemeName(\"casino888/cis\", ClientThemeName.Casino888);\n public static Casino777 = new ThemeName(\"casino777\", ClientThemeName.Casino777);\n\n public static Harrahs = new ThemeName(\"harrahs\", ClientThemeName.Harrahs)\n public static Wsop = new ThemeName('wsop', ClientThemeName.WSOP);\n public static WsopCip = new ThemeName(\"wsop/cip\", ClientThemeName.WSOP);\n public static SI = new ThemeName('si', ClientThemeName.SI); //sports illustrator\n public static SICis = new ThemeName('si/cis', ClientThemeName.SI);\n public static MrGreen = new ThemeName(\"mrgreen\", ClientThemeName.MrGreen);\n public static MrGreenCis = new ThemeName(\"mrgreen/cis\", ClientThemeName.MrGreen);\n public static MrGreenCip = new ThemeName(\"mrgreen/cip\", ClientThemeName.MrGreen);\n}","/** This is an automatically generated file.*/\nimport {Asset} from './architecture/asset';\nexport const Assets = {\n\tfallbackCMSComponent: {\n\t\tdefault_cgp_shell_css: new Asset(\"fallbackCMSComponent/default-cgp-shell.css\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\tdefaultFooter_html: new Asset(\"fallbackCMSComponent/defaultFooter.html\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\tharrahsFooter_html: new Asset(\"fallbackCMSComponent/harrahsFooter.html\", {'harrahs_nj': true}),\n\t\twsopFooter_html: new Asset(\"fallbackCMSComponent/wsopFooter.html\", {'wsop_nj': true})\n\t},\n\tfonts: {\n\t\t_888_Black_eot: new Asset(\"fonts/888-Black.eot\", {}),\n\t\t_888_Black_otf: new Asset(\"fonts/888-Black.otf\", {}),\n\t\t_888_Black_svg: new Asset(\"fonts/888-Black.svg\", {}),\n\t\t_888_Black_ttf: new Asset(\"fonts/888-Black.ttf\", {}),\n\t\t_888_Black_woff: new Asset(\"fonts/888-Black.woff\", {}),\n\t\t_888_Black_woff2: new Asset(\"fonts/888-Black.woff2\", {}),\n\t\t_888_Bold_eot: new Asset(\"fonts/888-Bold.eot\", {'777_com': true,'777_uk': true}),\n\t\t_888_Bold_otf: new Asset(\"fonts/888-Bold.otf\", {'777_com': true,'777_uk': true}),\n\t\t_888_Bold_svg: new Asset(\"fonts/888-Bold.svg\", {'777_com': true,'777_uk': true}),\n\t\t_888_Bold_ttf: new Asset(\"fonts/888-Bold.ttf\", {'777_com': true,'777_uk': true}),\n\t\t_888_Bold_woff: new Asset(\"fonts/888-Bold.woff\", {'777_com': true,'777_uk': true}),\n\t\t_888_DemiBold_eot: new Asset(\"fonts/888-DemiBold.eot\", {}),\n\t\t_888_DemiBold_otf: new Asset(\"fonts/888-DemiBold.otf\", {}),\n\t\t_888_DemiBold_svg: new Asset(\"fonts/888-DemiBold.svg\", {}),\n\t\t_888_DemiBold_ttf: new Asset(\"fonts/888-DemiBold.ttf\", {}),\n\t\t_888_DemiBold_woff: new Asset(\"fonts/888-DemiBold.woff\", {}),\n\t\t_888_DemiBold_woff2: new Asset(\"fonts/888-DemiBold.woff2\", {}),\n\t\t_888_Light_eot: new Asset(\"fonts/888-Light.eot\", {}),\n\t\t_888_Light_otf: new Asset(\"fonts/888-Light.otf\", {}),\n\t\t_888_Light_svg: new Asset(\"fonts/888-Light.svg\", {}),\n\t\t_888_Light_ttf: new Asset(\"fonts/888-Light.ttf\", {}),\n\t\t_888_Light_woff: new Asset(\"fonts/888-Light.woff\", {}),\n\t\t_888_Light_woff2: new Asset(\"fonts/888-Light.woff2\", {}),\n\t\t_888_Medium_eot: new Asset(\"fonts/888-Medium.eot\", {}),\n\t\t_888_Medium_otf: new Asset(\"fonts/888-Medium.otf\", {}),\n\t\t_888_Medium_svg: new Asset(\"fonts/888-Medium.svg\", {}),\n\t\t_888_Medium_ttf: new Asset(\"fonts/888-Medium.ttf\", {}),\n\t\t_888_Medium_woff: new Asset(\"fonts/888-Medium.woff\", {}),\n\t\t_888_Medium_woff2: new Asset(\"fonts/888-Medium.woff2\", {}),\n\t\t_888_Regular_eot: new Asset(\"fonts/888-Regular.eot\", {}),\n\t\t_888_Regular_otf: new Asset(\"fonts/888-Regular.otf\", {}),\n\t\t_888_Regular_svg: new Asset(\"fonts/888-Regular.svg\", {}),\n\t\t_888_Regular_ttf: new Asset(\"fonts/888-Regular.ttf\", {}),\n\t\t_888_Regular_woff: new Asset(\"fonts/888-Regular.woff\", {}),\n\t\t_888_Regular_woff2: new Asset(\"fonts/888-Regular.woff2\", {}),\n\t\t_888_SemiCondensedBold_eot: new Asset(\"fonts/888-SemiCondensedBold.eot\", {}),\n\t\t_888_SemiCondensedBold_otf: new Asset(\"fonts/888-SemiCondensedBold.otf\", {}),\n\t\t_888_SemiCondensedBold_svg: new Asset(\"fonts/888-SemiCondensedBold.svg\", {}),\n\t\t_888_SemiCondensedBold_ttf: new Asset(\"fonts/888-SemiCondensedBold.ttf\", {}),\n\t\t_888_SemiCondensedBold_woff: new Asset(\"fonts/888-SemiCondensedBold.woff\", {}),\n\t\t_888_SemiCondensedBold_woff2: new Asset(\"fonts/888-SemiCondensedBold.woff2\", {}),\n\t\t_888_SemiCondensedDemiBold_eot: new Asset(\"fonts/888-SemiCondensedDemiBold.eot\", {}),\n\t\t_888_SemiCondensedDemiBold_otf: new Asset(\"fonts/888-SemiCondensedDemiBold.otf\", {}),\n\t\t_888_SemiCondensedDemiBold_svg: new Asset(\"fonts/888-SemiCondensedDemiBold.svg\", {}),\n\t\t_888_SemiCondensedDemiBold_ttf: new Asset(\"fonts/888-SemiCondensedDemiBold.ttf\", {}),\n\t\t_888_SemiCondensedDemiBold_woff: new Asset(\"fonts/888-SemiCondensedDemiBold.woff\", {}),\n\t\t_888_SemiCondensedDemiBold_woff2: new Asset(\"fonts/888-SemiCondensedDemiBold.woff2\", {}),\n\t\t_888_Thin_eot: new Asset(\"fonts/888-Thin.eot\", {}),\n\t\t_888_Thin_otf: new Asset(\"fonts/888-Thin.otf\", {}),\n\t\t_888_Thin_svg: new Asset(\"fonts/888-Thin.svg\", {}),\n\t\t_888_Thin_ttf: new Asset(\"fonts/888-Thin.ttf\", {}),\n\t\t_888_Thin_woff: new Asset(\"fonts/888-Thin.woff\", {}),\n\t\t_888_Thin_woff2: new Asset(\"fonts/888-Thin.woff2\", {}),\n\t\t_888_Ultra_eot: new Asset(\"fonts/888-Ultra.eot\", {}),\n\t\t_888_Ultra_otf: new Asset(\"fonts/888-Ultra.otf\", {}),\n\t\t_888_Ultra_svg: new Asset(\"fonts/888-Ultra.svg\", {}),\n\t\t_888_Ultra_ttf: new Asset(\"fonts/888-Ultra.ttf\", {}),\n\t\t_888_Ultra_woff: new Asset(\"fonts/888-Ultra.woff\", {}),\n\t\t_888_Ultra_woff2: new Asset(\"fonts/888-Ultra.woff2\", {}),\n\t\tBello_Script_eot: new Asset(\"fonts/Bello_Script.eot\", {'777_com': true,'777_uk': true}),\n\t\tBello_Script_svg: new Asset(\"fonts/Bello_Script.svg\", {'777_com': true,'777_uk': true}),\n\t\tBello_Script_ttf: new Asset(\"fonts/Bello_Script.ttf\", {'777_com': true,'777_uk': true}),\n\t\tBello_Script_woff: new Asset(\"fonts/Bello_Script.woff\", {'777_com': true,'777_uk': true}),\n\t\tBello_Script_woff2: new Asset(\"fonts/Bello_Script.woff2\", {'777_com': true,'777_uk': true}),\n\t\tdigital_7_mono_ttf: new Asset(\"fonts/digital_7_mono.ttf\", {}),\n\t\tFutura_PT_Bold_eot: new Asset(\"fonts/Futura_PT_Bold.eot\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Bold_otf: new Asset(\"fonts/Futura_PT_Bold.otf\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Bold_svg: new Asset(\"fonts/Futura_PT_Bold.svg\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Bold_ttf: new Asset(\"fonts/Futura_PT_Bold.ttf\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Bold_woff: new Asset(\"fonts/Futura_PT_Bold.woff\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Bold_woff2: new Asset(\"fonts/Futura_PT_Bold.woff2\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Book_eot: new Asset(\"fonts/Futura_PT_Book.eot\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Book_otf: new Asset(\"fonts/Futura_PT_Book.otf\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Book_svg: new Asset(\"fonts/Futura_PT_Book.svg\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Book_ttf: new Asset(\"fonts/Futura_PT_Book.ttf\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Book_woff: new Asset(\"fonts/Futura_PT_Book.woff\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Book_woff2: new Asset(\"fonts/Futura_PT_Book.woff2\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Demi_eot: new Asset(\"fonts/Futura_PT_Demi.eot\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Demi_otf: new Asset(\"fonts/Futura_PT_Demi.otf\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Demi_svg: new Asset(\"fonts/Futura_PT_Demi.svg\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Demi_ttf: new Asset(\"fonts/Futura_PT_Demi.ttf\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Demi_woff: new Asset(\"fonts/Futura_PT_Demi.woff\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Demi_woff2: new Asset(\"fonts/Futura_PT_Demi.woff2\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Heavy_eot: new Asset(\"fonts/Futura_PT_Heavy.eot\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Heavy_otf: new Asset(\"fonts/Futura_PT_Heavy.otf\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Heavy_svg: new Asset(\"fonts/Futura_PT_Heavy.svg\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Heavy_ttf: new Asset(\"fonts/Futura_PT_Heavy.ttf\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Heavy_woff: new Asset(\"fonts/Futura_PT_Heavy.woff\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Heavy_woff2: new Asset(\"fonts/Futura_PT_Heavy.woff2\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Medium_eot: new Asset(\"fonts/Futura_PT_Medium.eot\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Medium_otf: new Asset(\"fonts/Futura_PT_Medium.otf\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Medium_svg: new Asset(\"fonts/Futura_PT_Medium.svg\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Medium_ttf: new Asset(\"fonts/Futura_PT_Medium.ttf\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Medium_woff: new Asset(\"fonts/Futura_PT_Medium.woff\", {'777_com': true,'777_uk': true}),\n\t\tFutura_PT_Medium_woff2: new Asset(\"fonts/Futura_PT_Medium.woff2\", {'777_com': true,'777_uk': true}),\n\t\tIndustry_Black_eot: new Asset(\"fonts/Industry-Black.eot\", {'si_mi': true}),\n\t\tIndustry_Black_ttf: new Asset(\"fonts/Industry-Black.ttf\", {'si_mi': true}),\n\t\tIndustry_Black_woff: new Asset(\"fonts/Industry-Black.woff\", {'si_mi': true}),\n\t\tIndustry_BlackItalic_eot: new Asset(\"fonts/Industry-BlackItalic.eot\", {'si_mi': true}),\n\t\tIndustry_BlackItalic_ttf: new Asset(\"fonts/Industry-BlackItalic.ttf\", {'si_mi': true}),\n\t\tIndustry_BlackItalic_woff: new Asset(\"fonts/Industry-BlackItalic.woff\", {'si_mi': true}),\n\t\tIndustry_Bold_eot: new Asset(\"fonts/Industry-Bold.eot\", {'si_mi': true}),\n\t\tIndustry_Bold_ttf: new Asset(\"fonts/Industry-Bold.ttf\", {'si_mi': true}),\n\t\tIndustry_Bold_woff: new Asset(\"fonts/Industry-Bold.woff\", {'si_mi': true}),\n\t\tIndustry_BoldItalic_eot: new Asset(\"fonts/Industry-BoldItalic.eot\", {'si_mi': true}),\n\t\tIndustry_BoldItalic_ttf: new Asset(\"fonts/Industry-BoldItalic.ttf\", {'si_mi': true}),\n\t\tIndustry_BoldItalic_woff: new Asset(\"fonts/Industry-BoldItalic.woff\", {'si_mi': true}),\n\t\tIndustry_Book_eot: new Asset(\"fonts/Industry-Book.eot\", {'si_mi': true}),\n\t\tIndustry_Book_ttf: new Asset(\"fonts/Industry-Book.ttf\", {'si_mi': true}),\n\t\tIndustry_Book_woff: new Asset(\"fonts/Industry-Book.woff\", {'si_mi': true}),\n\t\tIndustry_BookItalic_eot: new Asset(\"fonts/Industry-BookItalic.eot\", {'si_mi': true}),\n\t\tIndustry_BookItalic_ttf: new Asset(\"fonts/Industry-BookItalic.ttf\", {'si_mi': true}),\n\t\tIndustry_BookItalic_woff: new Asset(\"fonts/Industry-BookItalic.woff\", {'si_mi': true}),\n\t\tIndustry_Demi_eot: new Asset(\"fonts/Industry-Demi.eot\", {'si_mi': true}),\n\t\tIndustry_Demi_ttf: new Asset(\"fonts/Industry-Demi.ttf\", {'si_mi': true}),\n\t\tIndustry_Demi_woff: new Asset(\"fonts/Industry-Demi.woff\", {'si_mi': true}),\n\t\tIndustry_DemiItalic_eot: new Asset(\"fonts/Industry-DemiItalic.eot\", {'si_mi': true}),\n\t\tIndustry_DemiItalic_ttf: new Asset(\"fonts/Industry-DemiItalic.ttf\", {'si_mi': true}),\n\t\tIndustry_DemiItalic_woff: new Asset(\"fonts/Industry-DemiItalic.woff\", {'si_mi': true}),\n\t\tIndustry_Light_eot: new Asset(\"fonts/Industry-Light.eot\", {'si_mi': true}),\n\t\tIndustry_Light_ttf: new Asset(\"fonts/Industry-Light.ttf\", {'si_mi': true}),\n\t\tIndustry_Light_woff: new Asset(\"fonts/Industry-Light.woff\", {'si_mi': true}),\n\t\tIndustry_LightItalic_eot: new Asset(\"fonts/Industry-LightItalic.eot\", {'si_mi': true}),\n\t\tIndustry_LightItalic_ttf: new Asset(\"fonts/Industry-LightItalic.ttf\", {'si_mi': true}),\n\t\tIndustry_LightItalic_woff: new Asset(\"fonts/Industry-LightItalic.woff\", {'si_mi': true}),\n\t\tIndustry_Medium_eot: new Asset(\"fonts/Industry-Medium.eot\", {'si_mi': true}),\n\t\tIndustry_Medium_ttf: new Asset(\"fonts/Industry-Medium.ttf\", {'si_mi': true}),\n\t\tIndustry_Medium_woff: new Asset(\"fonts/Industry-Medium.woff\", {'si_mi': true}),\n\t\tIndustry_MediumItalic_eot: new Asset(\"fonts/Industry-MediumItalic.eot\", {'si_mi': true}),\n\t\tIndustry_MediumItalic_ttf: new Asset(\"fonts/Industry-MediumItalic.ttf\", {'si_mi': true}),\n\t\tIndustry_MediumItalic_woff: new Asset(\"fonts/Industry-MediumItalic.woff\", {'si_mi': true}),\n\t\tLobster_Regular_eot: new Asset(\"fonts/Lobster_Regular.eot\", {'777_com': true,'777_uk': true}),\n\t\tLobster_Regular_otf: new Asset(\"fonts/Lobster_Regular.otf\", {'777_com': true,'777_uk': true}),\n\t\tLobster_Regular_svg: new Asset(\"fonts/Lobster_Regular.svg\", {'777_com': true,'777_uk': true}),\n\t\tLobster_Regular_ttf: new Asset(\"fonts/Lobster_Regular.ttf\", {'777_com': true,'777_uk': true}),\n\t\tLobster_Regular_woff: new Asset(\"fonts/Lobster_Regular.woff\", {'777_com': true,'777_uk': true}),\n\t\tLobster_Regular_woff2: new Asset(\"fonts/Lobster_Regular.woff2\", {'777_com': true,'777_uk': true}),\n\t\tMontserrat_VariableFont_ttf: new Asset(\"fonts/Montserrat-VariableFont.ttf\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\toleo_script_reg_ext_woff2: new Asset(\"fonts/oleo_script_reg_ext.woff2\", {}),\n\t\toleo_script_reg_eot: new Asset(\"fonts/oleo_script_reg.eot\", {}),\n\t\toleo_script_reg_svg: new Asset(\"fonts/oleo_script_reg.svg\", {}),\n\t\toleo_script_reg_ttf: new Asset(\"fonts/oleo_script_reg.ttf\", {}),\n\t\toleo_script_reg_woff: new Asset(\"fonts/oleo_script_reg.woff\", {}),\n\t\toleo_script_reg_woff2: new Asset(\"fonts/oleo_script_reg.woff2\", {}),\n\t\tOleoScript_Bold_ttf: new Asset(\"fonts/OleoScript-Bold.ttf\", {}),\n\t\tPoppins_Regular_ttf: new Asset(\"fonts/Poppins-Regular.ttf\", {'si_mi': true}),\n\t\tPoppins_SemiBold_ttf: new Asset(\"fonts/Poppins-SemiBold.ttf\", {'si_mi': true}),\n\t\tRobotoCondensed_Bold_ttf: new Asset(\"fonts/RobotoCondensed-Bold.ttf\", {}),\n\t\tSolanoGothicMVB_Bd_ttf: new Asset(\"fonts/SolanoGothicMVB-Bd.ttf\", {'si_mi': true}),\n\t\tTradeGothicLTStd_Bd2_otf: new Asset(\"fonts/TradeGothicLTStd-Bd2.otf\", {})\n\t},\n\tgames: {\n\t\tgame_icon_placeholder_png: new Asset(\"games/game_icon_placeholder.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\tabout: {\n\t\t\teng_about_json: new Asset(\"games/about/eng_about.json\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true})\n\t\t},\n\t\tpreview_default_images: {\n\t\t\tdefault_game_strip_card_and_table_mobile_png: new Asset(\"games/preview_default_images/default_game_strip_card_and_table_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tdefault_game_strip_card_and_table_png: new Asset(\"games/preview_default_images/default_game_strip_card_and_table.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tdefault_game_strip_live_mobile_png: new Asset(\"games/preview_default_images/default_game_strip_live_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tdefault_game_strip_live_png: new Asset(\"games/preview_default_images/default_game_strip_live.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tdefault_game_strip_slots_mobile_png: new Asset(\"games/preview_default_images/default_game_strip_slots_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tdefault_game_strip_slots_png: new Asset(\"games/preview_default_images/default_game_strip_slots.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true})\n\t\t}\n\t},\n\timages: {\n\t\t_3px_tile_png: new Asset(\"images/3px-tile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t_777logo_png: new Asset(\"images/777logo.png\", {'777_com': true,'777_uk': true}),\n\t\t_777logo_svg: new Asset(\"images/777logo.svg\", {'777_com': true,'777_uk': true}),\n\t\t_888casinologo_dark_png: new Asset(\"images/888casinologo-dark.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t_888casinologo_mobile_svg: new Asset(\"images/888casinologo-mobile.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t_888casinologo_pc_svg: new Asset(\"images/888casinologo-pc.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t_888casinologo_png: new Asset(\"images/888casinologo.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\tarena_shaddow_png: new Asset(\"images/arena-shaddow.png\", {'777_com': true,'777_uk': true}),\n\t\tblackSquare_png: new Asset(\"images/blackSquare.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\tbrilliant_png: new Asset(\"images/brilliant.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tbroken_link_icon_png: new Asset(\"images/broken_link_icon.png\", {}),\n\t\tcasino_live_logo_mobile_png: new Asset(\"images/casino-live-logo-mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\tcasino_live_logo_png: new Asset(\"images/casino-live-logo.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\tcheck_png: new Asset(\"images/check.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tcheckbox_checked_png: new Asset(\"images/checkbox_checked.png\", {}),\n\t\tcheckbox_empty_png: new Asset(\"images/checkbox_empty.png\", {}),\n\t\tclose_modal_dialog_hover_png: new Asset(\"images/close_modal_dialog_hover.png\", {'777_com': true,'777_uk': true}),\n\t\tclose_modal_dialog_png: new Asset(\"images/close_modal_dialog.png\", {'777_com': true,'777_uk': true}),\n\t\tdeposit_header_icon_svg: new Asset(\"images/deposit_header_icon.svg\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\tdiv_lang_png: new Asset(\"images/div-lang.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\tempty_image_sq_gif: new Asset(\"images/empty-image-sq.gif\", {}),\n\t\tempty_image_gif: new Asset(\"images/empty-image.gif\", {}),\n\t\texclusives_list_icon_png: new Asset(\"images/exclusives_list_icon.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\tfull_screen_off_png: new Asset(\"images/full-screen-off.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\tfull_screen_on_png: new Asset(\"images/full-screen-on.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\tgame_default_background_png: new Asset(\"images/game_default_background.png\", {}),\n\t\tgermany_panic_icon_png: new Asset(\"images/germany_panic_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\tharrahslogo_svg: new Asset(\"images/harrahslogo.svg\", {'harrahs_nj': true}),\n\t\thccasinologo_png: new Asset(\"images/hccasinologo.png\", {'wsop_nj': true}),\n\t\thccasinologo_svg: new Asset(\"images/hccasinologo.svg\", {'harrahs_nj': true,'wsop_nj': true}),\n\t\thistory_bg_title_png: new Asset(\"images/history_bg_title.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\thome_content_banner_png: new Asset(\"images/home-content-banner.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\thome_page_top_banner_png: new Asset(\"images/home-page-top-banner.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\thorizontal_line_glow_mobile_png: new Asset(\"images/horizontal-line-glow-mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\thorizontal_line_glow_png: new Asset(\"images/horizontal-line-glow.png\", {'777_com': true,'777_uk': true,'wsop_nj': true}),\n\t\tidle_recomm_toaster_bg_png: new Asset(\"images/idle-recomm-toaster-bg.png\", {}),\n\t\tinfo_img_png: new Asset(\"images/info-img.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tinfoBTN_png: new Asset(\"images/infoBTN.png\", {}),\n\t\tios_share_svg: new Asset(\"images/ios-share.svg\", {}),\n\t\tjackpot_widget_title_crown_png: new Asset(\"images/jackpot_widget_title_crown.png\", {'777_com': true,'777_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\tjackpots_bg_png: new Asset(\"images/jackpots-bg.png\", {'777_com': true,'777_uk': true}),\n\t\tlamp_png: new Asset(\"images/lamp.png\", {}),\n\t\tlang_reg_icon_png: new Asset(\"images/lang_reg_icon.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tlang_selected_icon_png: new Asset(\"images/lang_selected_icon.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tletter_design_png: new Asset(\"images/letter_design.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tletter_info_png: new Asset(\"images/letter-info.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tletter_play_png: new Asset(\"images/letter-play.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tlive_arena_banner_png: new Asset(\"images/live-arena-banner.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\tlive_chat_png: new Asset(\"images/live-chat.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tlive_content_banner_png: new Asset(\"images/live-content-banner.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tlive_tables_top_border_png: new Asset(\"images/live-tables-top-border.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tmrgreenlogo_png: new Asset(\"images/mrgreenlogo.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\tmrgreenlogo_svg: new Asset(\"images/mrgreenlogo.svg\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\tnotification_off_png: new Asset(\"images/notification off.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tonly_real_money_game_warning_png: new Asset(\"images/only-real-money-game-warning.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\tparty_jackpot_logo_png: new Asset(\"images/party_jackpot_logo.png\", {}),\n\t\tpay_icon_png: new Asset(\"images/pay-icon.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tplaceholder_game_icon_sq_png: new Asset(\"images/placeholder_game_icon_sq.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\tplaceholder_game_icon_png: new Asset(\"images/placeholder_game_icon.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\tright_arrow_png: new Asset(\"images/right-arrow.png\", {'777_com': true,'777_uk': true}),\n\t\tselected_filter_sign_svg: new Asset(\"images/selected_filter_sign.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\tshaddow_bg_png: new Asset(\"images/shaddow-bg.png\", {'777_com': true,'777_uk': true}),\n\t\tsi_logo_mobile_png: new Asset(\"images/si_logo_mobile.png\", {'si_mi': true}),\n\t\tsi_logo_mobile_svg: new Asset(\"images/si_logo_mobile.svg\", {'si_mi': true}),\n\t\tsi_logo_pc_png: new Asset(\"images/si_logo_pc.png\", {'si_mi': true}),\n\t\tsi_logo_pc_svg: new Asset(\"images/si_logo_pc.svg\", {'si_mi': true}),\n\t\tsi_island_resort_png: new Asset(\"images/si-island-resort.png\", {'si_mi': true}),\n\t\tsi_island_resort_svg: new Asset(\"images/si-island-resort.svg\", {'si_mi': true}),\n\t\tsi_sports_book_png: new Asset(\"images/si-sports-book.png\", {'si_mi': true}),\n\t\tside_menu_header_decoration_png: new Asset(\"images/side-menu-header-decoration.png\", {'777_com': true,'777_uk': true,'wsop_nj': true}),\n\t\tsplash_page_logo_0_0_png: new Asset(\"images/splash_page_logo-0-0.png\", {}),\n\t\tsplash_page_logo_0_111_png: new Asset(\"images/splash_page_logo-0-111.png\", {'777_com': true,'777_uk': true}),\n\t\tsplash_page_logo_1_53_png: new Asset(\"images/splash_page_logo-1-53.png\", {}),\n\t\tsplash_page_logo_31_46_png: new Asset(\"images/splash_page_logo-31-46.png\", {}),\n\t\tsplash_page_logo_58_82_png: new Asset(\"images/splash_page_logo-58-82.png\", {}),\n\t\tsplash_page_logo_68_98_png: new Asset(\"images/splash_page_logo-68-98.png\", {}),\n\t\tsplash_page_logo_69_100_png: new Asset(\"images/splash_page_logo-69-100.png\", {}),\n\t\tsplash_page_logo_70_102_png: new Asset(\"images/splash_page_logo-70-102.png\", {}),\n\t\tsplash_page_logo_71_104_png: new Asset(\"images/splash_page_logo-71-104.png\", {}),\n\t\tsplash_page_logo_72_105_png: new Asset(\"images/splash_page_logo-72-105.png\", {}),\n\t\tsplash_page_logo_73_107_png: new Asset(\"images/splash_page_logo-73-107.png\", {}),\n\t\tsplash_page_logo_75_113_png: new Asset(\"images/splash_page_logo-75-113.png\", {}),\n\t\tsplash_page_logo_76_119_png: new Asset(\"images/splash_page_logo-76-119.png\", {}),\n\t\tsplash_page_logo_79_125_png: new Asset(\"images/splash_page_logo-79-125.png\", {}),\n\t\tsplash_page_logo_8_78_png: new Asset(\"images/splash_page_logo-8-78.png\", {}),\n\t\tsplash_page_logo_81_129_png: new Asset(\"images/splash_page_logo-81-129.png\", {}),\n\t\tsplash_page_logo_84_137_png: new Asset(\"images/splash_page_logo-84-137.png\", {}),\n\t\tsplash_page_logo_87_141_png: new Asset(\"images/splash_page_logo-87-141.png\", {}),\n\t\tsplash_page_logo_88_144_png: new Asset(\"images/splash_page_logo-88-144.png\", {}),\n\t\tsplash_page_logo_91_151_png: new Asset(\"images/splash_page_logo-91-151.png\", {'si_mi': true}),\n\t\tsplash_page_logo_92_152_png: new Asset(\"images/splash_page_logo-92-152.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\tsplash_page_logo_93_154_png: new Asset(\"images/splash_page_logo-93-154.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\tsplash_page_logo_cip8_0_0_png: new Asset(\"images/splash_page_logo-cip8-0-0.png\", {}),\n\t\tsplash_page_logo_cip8_1_53_png: new Asset(\"images/splash_page_logo-cip8-1-53.png\", {}),\n\t\tsplash_page_logo_cip8_31_46_png: new Asset(\"images/splash_page_logo-cip8-31-46.png\", {}),\n\t\tsplash_page_logo_cip8_58_82_png: new Asset(\"images/splash_page_logo-cip8-58-82.png\", {}),\n\t\tsplash_page_logo_cip8_71_104_png: new Asset(\"images/splash_page_logo-cip8-71-104.png\", {}),\n\t\tsplash_page_logo_cip8_73_107_png: new Asset(\"images/splash_page_logo-cip8-73-107.png\", {}),\n\t\tsplash_page_logo_cip8_75_113_png: new Asset(\"images/splash_page_logo-cip8-75-113.png\", {}),\n\t\tsplash_page_logo_cip8_76_119_png: new Asset(\"images/splash_page_logo-cip8-76-119.png\", {}),\n\t\tsplash_page_logo_cip8_79_125_png: new Asset(\"images/splash_page_logo-cip8-79-125.png\", {}),\n\t\tsplash_page_logo_cip8_8_78_png: new Asset(\"images/splash_page_logo-cip8-8-78.png\", {}),\n\t\tsplash_page_logo_cip8_81_129_png: new Asset(\"images/splash_page_logo-cip8-81-129.png\", {}),\n\t\tsplash_page_logo_cip8_84_137_png: new Asset(\"images/splash_page_logo-cip8-84-137.png\", {}),\n\t\tsplash_page_logo_cip8_87_142_png: new Asset(\"images/splash_page_logo-cip8-87-142.png\", {}),\n\t\tsplash_page_logo_cip8_88_145_png: new Asset(\"images/splash_page_logo-cip8-88-145.png\", {}),\n\t\tsplash_page_logo_cip8_png: new Asset(\"images/splash_page_logo-cip8.png\", {}),\n\t\tsplash_page_logo_cis_0_0_png: new Asset(\"images/splash_page_logo-cis-0-0.png\", {}),\n\t\tsplash_page_logo_cis_1_53_png: new Asset(\"images/splash_page_logo-cis-1-53.png\", {}),\n\t\tsplash_page_logo_cis_31_46_png: new Asset(\"images/splash_page_logo-cis-31-46.png\", {}),\n\t\tsplash_page_logo_cis_58_82_png: new Asset(\"images/splash_page_logo-cis-58-82.png\", {}),\n\t\tsplash_page_logo_cis_71_104_png: new Asset(\"images/splash_page_logo-cis-71-104.png\", {}),\n\t\tsplash_page_logo_cis_73_107_png: new Asset(\"images/splash_page_logo-cis-73-107.png\", {}),\n\t\tsplash_page_logo_cis_75_113_png: new Asset(\"images/splash_page_logo-cis-75-113.png\", {}),\n\t\tsplash_page_logo_cis_76_119_png: new Asset(\"images/splash_page_logo-cis-76-119.png\", {}),\n\t\tsplash_page_logo_cis_79_125_png: new Asset(\"images/splash_page_logo-cis-79-125.png\", {}),\n\t\tsplash_page_logo_cis_8_78_png: new Asset(\"images/splash_page_logo-cis-8-78.png\", {}),\n\t\tsplash_page_logo_cis_81_129_png: new Asset(\"images/splash_page_logo-cis-81-129.png\", {}),\n\t\tsplash_page_logo_cis_84_137_png: new Asset(\"images/splash_page_logo-cis-84-137.png\", {}),\n\t\tsplash_page_logo_cis_87_142_png: new Asset(\"images/splash_page_logo-cis-87-142.png\", {}),\n\t\tsplash_page_logo_cis_88_145_png: new Asset(\"images/splash_page_logo-cis-88-145.png\", {}),\n\t\tsplash_page_logo_cis_91_151_png: new Asset(\"images/splash_page_logo-cis-91-151.png\", {}),\n\t\tsplash_page_logo_cis_png: new Asset(\"images/splash_page_logo-cis.png\", {}),\n\t\tSpriteSheetPC1920_png: new Asset(\"images/SpriteSheetPC1920.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\tswiper_layout_bottom_shaddow_png: new Asset(\"images/swiper-layout-bottom-shaddow.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\ttexture_png: new Asset(\"images/texture.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\ttop_banner_placeholder_gif: new Asset(\"images/top_banner_placeholder.gif\", {}),\n\t\tuser_menu_box_icon_png: new Asset(\"images/user-menu-box-icon.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\tuser_png: new Asset(\"images/user.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\tvertical_line_glow_png: new Asset(\"images/vertical-line-glow.png\", {'777_com': true,'777_uk': true}),\n\t\twsoplogo_svg: new Asset(\"images/wsoplogo.svg\", {'wsop_nj': true}),\n\t\twww_splash_page_logo_1_111_png: new Asset(\"images/www_splash_page_logo-1-111.png\", {}),\n\t\tanimated_banners: {\n\t\t\tblackjack_arena_banner_mobile_lottie: new Asset(\"images/animated-banners/blackjack_arena_banner_mobile.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tblackjack_arena_banner_pc_lottie: new Asset(\"images/animated-banners/blackjack_arena_banner_pc.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tcasinogames_arena_banner_mobile_lottie: new Asset(\"images/animated-banners/casinogames_arena_banner_mobile.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tcasinogames_arena_banner_pc_lottie: new Asset(\"images/animated-banners/casinogames_arena_banner_pc.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\texclusive_arena_banner_mobile_lottie: new Asset(\"images/animated-banners/exclusive_arena_banner_mobile.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\texclusive_arena_banner_pc_lottie: new Asset(\"images/animated-banners/exclusive_arena_banner_pc.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tjackpot_arena_banner_mobile_lottie: new Asset(\"images/animated-banners/jackpot_arena_banner_mobile.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tjackpot_arena_banner_pc_lottie: new Asset(\"images/animated-banners/jackpot_arena_banner_pc.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tlivecasino_arena_banner_mobile_lottie: new Asset(\"images/animated-banners/livecasino_arena_banner_mobile.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tlivecasino_arena_banner_pc_lottie: new Asset(\"images/animated-banners/livecasino_arena_banner_pc.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tnewgames_arena_banner_mobile_lottie: new Asset(\"images/animated-banners/newgames_arena_banner_mobile.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tnewgames_arena_banner_pc_lottie: new Asset(\"images/animated-banners/newgames_arena_banner_pc.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\troulette_arena_banner_mobile_lottie: new Asset(\"images/animated-banners/roulette_arena_banner_mobile.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\troulette_arena_banner_pc_lottie: new Asset(\"images/animated-banners/roulette_arena_banner_pc.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tscratchcards_arena_banner_mobile_lottie: new Asset(\"images/animated-banners/scratchcards_arena_banner_mobile.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tscratchcards_arena_banner_pc_lottie: new Asset(\"images/animated-banners/scratchcards_arena_banner_pc.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tslots_arena_banner_mobile_lottie: new Asset(\"images/animated-banners/slots_arena_banner_mobile.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tslots_arena_banner_pc_lottie: new Asset(\"images/animated-banners/slots_arena_banner_pc.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tvideopoker_arena_banner_mobile_lottie: new Asset(\"images/animated-banners/videopoker_arena_banner_mobile.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tvideopoker_arena_banner_pc_lottie: new Asset(\"images/animated-banners/videopoker_arena_banner_pc.lottie\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true})\n\t\t},\n\t\tanimated_icons_poc: {\n\t\t\tmillionaire_genie_megaways: {\n\t\t\t\tgenie_megaways_v1_atlas: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v1.atlas\", {}),\n\t\t\t\tgenie_megaways_v1_json: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v1.json\", {}),\n\t\t\t\tgenie_megaways_v1_png: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v1.png\", {}),\n\t\t\t\tgenie_megaways_v2_atlas: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v2.atlas\", {}),\n\t\t\t\tgenie_megaways_v2_json: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v2.json\", {}),\n\t\t\t\tgenie_megaways_v2_png: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v2.png\", {}),\n\t\t\t\tgenie_megaways_v3_atlas: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v3.atlas\", {}),\n\t\t\t\tgenie_megaways_v3_json: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v3.json\", {}),\n\t\t\t\tgenie_megaways_v3_png: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v3.png\", {}),\n\t\t\t\tgenie_megaways_v4_atlas: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v4.atlas\", {}),\n\t\t\t\tgenie_megaways_v4_json: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v4.json\", {}),\n\t\t\t\tgenie_megaways_v4_png: new Asset(\"images/animated-icons-poc/millionaire-genie-megaways/genie_megaways_v4.png\", {})\n\t\t\t}\n\t\t},\n\t\tarena_link_to_offer: {\n\t\t\tClose_BTN_green_svg: new Asset(\"images/arena-link-to-offer/Close_BTN_green.svg\", {}),\n\t\t\tGift_BTN_green_svg: new Asset(\"images/arena-link-to-offer/Gift_BTN_green.svg\", {})\n\t\t},\n\t\tarenas: {\n\t\t\tCasinoGames: {\n\t\t\t\tonline_blackjack_png: new Asset(\"images/arenas/CasinoGames/online_blackjack.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tonline_casino_games_png: new Asset(\"images/arenas/CasinoGames/online_casino_games.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tonline_jackpot_png: new Asset(\"images/arenas/CasinoGames/online_jackpot.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tonline_roulette_png: new Asset(\"images/arenas/CasinoGames/online_roulette.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tonline_slots_png: new Asset(\"images/arenas/CasinoGames/online_slots.png\", {'777_com': true,'777_uk': true})\n\t\t\t},\n\t\t\tHomePage: {\n\t\t\t\t_888exclusive_arena_info_png: new Asset(\"images/arenas/HomePage/888exclusive_arena_info.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\t\t_888exclusive_arena_png: new Asset(\"images/arenas/HomePage/888exclusive_arena.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\t_888exclusive_header_arena_icon_png: new Asset(\"images/arenas/HomePage/888exclusive_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tblackjack_arena_info_png: new Asset(\"images/arenas/HomePage/blackjack_arena_info.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tblackjack_arena_png: new Asset(\"images/arenas/HomePage/blackjack_arena.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tblackjack_header_arena_icon_png: new Asset(\"images/arenas/HomePage/blackjack_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'wsop_nj': true}),\n\t\t\t\tcards_arena_info_png: new Asset(\"images/arenas/HomePage/cards_arena_info.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tcards_arena_png: new Asset(\"images/arenas/HomePage/cards_arena.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true}),\n\t\t\t\tcasino_games_arena_png: new Asset(\"images/arenas/HomePage/casino_games_arena.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tcasino_games_header_arena_icon_png: new Asset(\"images/arenas/HomePage/casino_games_header_arena_icon.png\", {'wsop_nj': true}),\n\t\t\t\tcasinogames_header_arena_icon_png: new Asset(\"images/arenas/HomePage/casinogames_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tdaily_jackpots_arena_icon_png: new Asset(\"images/arenas/HomePage/daily_jackpots_arena_icon.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true}),\n\t\t\t\tdaily_jackpots_header_arena_icon_png: new Asset(\"images/arenas/HomePage/daily_jackpots_header_arena_icon.png\", {'wsop_nj': true}),\n\t\t\t\tdefault_arena_png: new Asset(\"images/arenas/HomePage/default_arena.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true}),\n\t\t\t\tdefault_header_arena_icon_png: new Asset(\"images/arenas/HomePage/default_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'wsop_nj': true}),\n\t\t\t\texclusive_header_arena_icon_png: new Asset(\"images/arenas/HomePage/exclusive_header_arena_icon.png\", {'wsop_nj': true}),\n\t\t\t\tgame_show_header_arena_icon_png: new Asset(\"images/arenas/HomePage/game_show_header_arena_icon.png\", {'wsop_nj': true}),\n\t\t\t\tInstantWin_game_info_png: new Asset(\"images/arenas/HomePage/InstantWin_game_info.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\t\tjackpots_header_arena_icon_png: new Asset(\"images/arenas/HomePage/jackpots_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tlive_arena_elite_lounge_png: new Asset(\"images/arenas/HomePage/live_arena_elite_lounge.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\t\tlive_arena_png: new Asset(\"images/arenas/HomePage/live_arena.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true}),\n\t\t\t\tlive_casino_header_arena_icon_png: new Asset(\"images/arenas/HomePage/live_casino_header_arena_icon.png\", {'wsop_nj': true}),\n\t\t\t\tlive_game_shows_arena_png: new Asset(\"images/arenas/HomePage/live_game_shows_arena.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tlivecasino_header_arena_icon_png: new Asset(\"images/arenas/HomePage/livecasino_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tlivegameshows_header_arena_icon_png: new Asset(\"images/arenas/HomePage/livegameshows_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tnew_games_arena_info_png: new Asset(\"images/arenas/HomePage/new_games_arena_info.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tnew_games_arena_png: new Asset(\"images/arenas/HomePage/new_games_arena.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\t\tnewgames_header_arena_icon_png: new Asset(\"images/arenas/HomePage/newgames_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'wsop_nj': true}),\n\t\t\t\tprogressive_slots_arena_icon_png: new Asset(\"images/arenas/HomePage/progressive_slots_arena_icon.png\", {'harrahs_nj': true}),\n\t\t\t\tprogressive_slots_arena_info_png: new Asset(\"images/arenas/HomePage/progressive_slots_arena_info.png\", {'harrahs_nj': true,'wsop_nj': true}),\n\t\t\t\tprogressive_slots_header_arena_icon_png: new Asset(\"images/arenas/HomePage/progressive_slots_header_arena_icon.png\", {'wsop_nj': true}),\n\t\t\t\tpromotions_header_arena_icon_png: new Asset(\"images/arenas/HomePage/promotions_header_arena_icon.png\", {'wsop_nj': true}),\n\t\t\t\troulette_arena_info_png: new Asset(\"images/arenas/HomePage/roulette_arena_info.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true}),\n\t\t\t\troulette_arena_png: new Asset(\"images/arenas/HomePage/roulette_arena.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\troulette_header_arena_icon_png: new Asset(\"images/arenas/HomePage/roulette_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'wsop_nj': true}),\n\t\t\t\tscrach_cards_header_arena_icon_png: new Asset(\"images/arenas/HomePage/scrach_cards_header_arena_icon.png\", {'wsop_nj': true}),\n\t\t\t\tscratch_cards_arena_icon_png: new Asset(\"images/arenas/HomePage/scratch_cards_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tscratch_cards_arena_info_png: new Asset(\"images/arenas/HomePage/scratch_cards_arena_info.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tscratch_cards_arena_png: new Asset(\"images/arenas/HomePage/scratch_cards_arena.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tscratchcards_header_arena_icon_png: new Asset(\"images/arenas/HomePage/scratchcards_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tsi_exclusive_arena_png: new Asset(\"images/arenas/HomePage/si_exclusive_arena.png\", {'si_mi': true}),\n\t\t\t\tslots_arena_info_png: new Asset(\"images/arenas/HomePage/slots_arena_info.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tslots_header_arena_icon_png: new Asset(\"images/arenas/HomePage/slots_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'wsop_nj': true}),\n\t\t\t\tslots_jackpots_arena_png: new Asset(\"images/arenas/HomePage/slots_jackpots_arena.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true}),\n\t\t\t\tvideo_poker_arena_info_png: new Asset(\"images/arenas/HomePage/video_poker_arena_info.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvideo_poker_arena_png: new Asset(\"images/arenas/HomePage/video_poker_arena.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true}),\n\t\t\t\tvideo_poker_header_arena_icon_png: new Asset(\"images/arenas/HomePage/video_poker_header_arena_icon.png\", {'wsop_nj': true}),\n\t\t\t\tvideopoker_header_arena_icon_png: new Asset(\"images/arenas/HomePage/videopoker_header_arena_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tvisual_sport_arena_info_png: new Asset(\"images/arenas/HomePage/visual_sport_arena_info.png\", {'si_mi': true})\n\t\t\t},\n\t\t\tLiveArenas: {\n\t\t\t\tdefault_live_arena_png: new Asset(\"images/arenas/LiveArenas/default_live_arena.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tlive_arena_baccarat_png: new Asset(\"images/arenas/LiveArenas/live_arena_baccarat.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tlive_arena_bj_png: new Asset(\"images/arenas/LiveArenas/live_arena_bj.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tlive_arena_dream_catcher_png: new Asset(\"images/arenas/LiveArenas/live_arena_dream_catcher.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tlive_arena_elite_lounge_png: new Asset(\"images/arenas/LiveArenas/live_arena_elite_lounge.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tlive_arena_poker_png: new Asset(\"images/arenas/LiveArenas/live_arena_poker.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tlive_arena_roulette_png: new Asset(\"images/arenas/LiveArenas/live_arena_roulette.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true})\n\t\t\t}\n\t\t},\n\t\tavatars: {\n\t\t\tdiamond_vip: {\n\t\t\t\tmy_account_diamond_vip_png: new Asset(\"images/avatars/diamond-vip/my-account-diamond-vip.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_diamond_vip_avatar_hover_png: new Asset(\"images/avatars/diamond-vip/post-login-diamond-vip-avatar-hover.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_diamond_vip_avatar_hover_svg: new Asset(\"images/avatars/diamond-vip/post-login-diamond-vip-avatar-hover.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_diamond_vip_avatar_pressed_png: new Asset(\"images/avatars/diamond-vip/post-login-diamond-vip-avatar-pressed.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_diamond_vip_avatar_pressed_svg: new Asset(\"images/avatars/diamond-vip/post-login-diamond-vip-avatar-pressed.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_diamond_vip_avatar_regular_png: new Asset(\"images/avatars/diamond-vip/post-login-diamond-vip-avatar-regular.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_diamond_vip_avatar_regular_svg: new Asset(\"images/avatars/diamond-vip/post-login-diamond-vip-avatar-regular.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_diamond_vip_avatar_selected_pressed_png: new Asset(\"images/avatars/diamond-vip/post-login-diamond-vip-avatar-selected-pressed.png\", {'harrahs_nj': true,'wsop_nj': true}),\n\t\t\t\tpre_login_diamond_vip_avatar_hover_png: new Asset(\"images/avatars/diamond-vip/pre-login-diamond-vip-avatar-hover.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_diamond_vip_avatar_hover_svg: new Asset(\"images/avatars/diamond-vip/pre-login-diamond-vip-avatar-hover.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpre_login_diamond_vip_avatar_pressed_png: new Asset(\"images/avatars/diamond-vip/pre-login-diamond-vip-avatar-pressed.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_diamond_vip_avatar_pressed_svg: new Asset(\"images/avatars/diamond-vip/pre-login-diamond-vip-avatar-pressed.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpre_login_diamond_vip_avatar_regular_png: new Asset(\"images/avatars/diamond-vip/pre-login-diamond-vip-avatar-regular.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_diamond_vip_avatar_regular_svg: new Asset(\"images/avatars/diamond-vip/pre-login-diamond-vip-avatar-regular.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true})\n\t\t\t},\n\t\t\tgold_vip: {\n\t\t\t\tmy_account_gold_vip_png: new Asset(\"images/avatars/gold-vip/my-account-gold-vip.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_gold_vip_avatar_hover_png: new Asset(\"images/avatars/gold-vip/post-login-gold-vip-avatar-hover.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_gold_vip_avatar_hover_svg: new Asset(\"images/avatars/gold-vip/post-login-gold-vip-avatar-hover.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_gold_vip_avatar_pressed_png: new Asset(\"images/avatars/gold-vip/post-login-gold-vip-avatar-pressed.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_gold_vip_avatar_pressed_svg: new Asset(\"images/avatars/gold-vip/post-login-gold-vip-avatar-pressed.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_gold_vip_avatar_regular_png: new Asset(\"images/avatars/gold-vip/post-login-gold-vip-avatar-regular.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_gold_vip_avatar_regular_svg: new Asset(\"images/avatars/gold-vip/post-login-gold-vip-avatar-regular.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_gold_vip_avatar_selected_pressed_png: new Asset(\"images/avatars/gold-vip/post-login-gold-vip-avatar-selected-pressed.png\", {'harrahs_nj': true,'wsop_nj': true}),\n\t\t\t\tpre_login_gold_vip_avatar_hover_png: new Asset(\"images/avatars/gold-vip/pre-login-gold-vip-avatar-hover.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_gold_vip_avatar_hover_svg: new Asset(\"images/avatars/gold-vip/pre-login-gold-vip-avatar-hover.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpre_login_gold_vip_avatar_pressed_png: new Asset(\"images/avatars/gold-vip/pre-login-gold-vip-avatar-pressed.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_gold_vip_avatar_pressed_svg: new Asset(\"images/avatars/gold-vip/pre-login-gold-vip-avatar-pressed.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpre_login_gold_vip_avatar_regular_png: new Asset(\"images/avatars/gold-vip/pre-login-gold-vip-avatar-regular.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_gold_vip_avatar_regular_svg: new Asset(\"images/avatars/gold-vip/pre-login-gold-vip-avatar-regular.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true})\n\t\t\t},\n\t\t\tplatinum_vip: {\n\t\t\t\tmy_account_vip_platinum_png: new Asset(\"images/avatars/platinum-vip/my-account-vip-platinum.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_vip_platinum_avatar_hover_png: new Asset(\"images/avatars/platinum-vip/post-login-vip-platinum-avatar-hover.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_vip_platinum_avatar_hover_svg: new Asset(\"images/avatars/platinum-vip/post-login-vip-platinum-avatar-hover.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_vip_platinum_avatar_pressed_png: new Asset(\"images/avatars/platinum-vip/post-login-vip-platinum-avatar-pressed.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_vip_platinum_avatar_pressed_svg: new Asset(\"images/avatars/platinum-vip/post-login-vip-platinum-avatar-pressed.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_vip_platinum_avatar_regular_png: new Asset(\"images/avatars/platinum-vip/post-login-vip-platinum-avatar-regular.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_vip_platinum_avatar_regular_svg: new Asset(\"images/avatars/platinum-vip/post-login-vip-platinum-avatar-regular.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_vip_platinum_avatar_selected_pressed_png: new Asset(\"images/avatars/platinum-vip/post-login-vip-platinum-avatar-selected-pressed.png\", {'harrahs_nj': true,'wsop_nj': true}),\n\t\t\t\tpre_login_vip_platinum_avatar_hover_png: new Asset(\"images/avatars/platinum-vip/pre-login-vip-platinum-avatar-hover.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_vip_platinum_avatar_hover_svg: new Asset(\"images/avatars/platinum-vip/pre-login-vip-platinum-avatar-hover.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpre_login_vip_platinum_avatar_pressed_png: new Asset(\"images/avatars/platinum-vip/pre-login-vip-platinum-avatar-pressed.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_vip_platinum_avatar_pressed_svg: new Asset(\"images/avatars/platinum-vip/pre-login-vip-platinum-avatar-pressed.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpre_login_vip_platinum_avatar_regular_png: new Asset(\"images/avatars/platinum-vip/pre-login-vip-platinum-avatar-regular.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_vip_platinum_avatar_regular_svg: new Asset(\"images/avatars/platinum-vip/pre-login-vip-platinum-avatar-regular.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true})\n\t\t\t},\n\t\t\treg: {\n\t\t\t\tpost_login_hover_png: new Asset(\"images/avatars/reg/post-login-hover.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_hover_svg: new Asset(\"images/avatars/reg/post-login-hover.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_pressed_png: new Asset(\"images/avatars/reg/post-login-pressed.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_pressed_svg: new Asset(\"images/avatars/reg/post-login-pressed.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_reg_png: new Asset(\"images/avatars/reg/post-login-reg.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_reg_svg: new Asset(\"images/avatars/reg/post-login-reg.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpre_login_hover_png: new Asset(\"images/avatars/reg/pre-login-hover.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_hover_svg: new Asset(\"images/avatars/reg/pre-login-hover.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpre_login_pressed_png: new Asset(\"images/avatars/reg/pre-login-pressed.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_pressed_svg: new Asset(\"images/avatars/reg/pre-login-pressed.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpre_login_reg_png: new Asset(\"images/avatars/reg/pre-login-reg.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_reg_svg: new Asset(\"images/avatars/reg/pre-login-reg.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true})\n\t\t\t},\n\t\t\treg_vip: {\n\t\t\t\tMy_account_VIP_REG_icon_png: new Asset(\"images/avatars/reg-vip/My-account-VIP-REG-icon.png\", {'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tmy_account_vip_reg_png: new Asset(\"images/avatars/reg-vip/my-account-vip-reg.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_reg_vip_avatar_hover_png: new Asset(\"images/avatars/reg-vip/post-login-reg-vip-avatar-hover.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_reg_vip_avatar_hover_svg: new Asset(\"images/avatars/reg-vip/post-login-reg-vip-avatar-hover.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_reg_vip_avatar_icon_selected_pressed_png: new Asset(\"images/avatars/reg-vip/post-login-reg-vip-avatar-icon-selected-pressed.png\", {'harrahs_nj': true,'wsop_nj': true}),\n\t\t\t\tpost_login_reg_vip_avatar_pressed_png: new Asset(\"images/avatars/reg-vip/post-login-reg-vip-avatar-pressed.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_reg_vip_avatar_pressed_svg: new Asset(\"images/avatars/reg-vip/post-login-reg-vip-avatar-pressed.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_reg_vip_avatar_regular_png: new Asset(\"images/avatars/reg-vip/post-login-reg-vip-avatar-regular.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpost_login_reg_vip_avatar_regular_svg: new Asset(\"images/avatars/reg-vip/post-login-reg-vip-avatar-regular.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tpost_login_reg_vip_avatar_selected_pressed_png: new Asset(\"images/avatars/reg-vip/post-login-reg-vip-avatar-selected-pressed.png\", {'harrahs_nj': true,'wsop_nj': true}),\n\t\t\t\tpre_login_reg_vip_avatar_hover_png: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-hover.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\t\tpre_login_reg_vip_avatar_hover_svg: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-hover.svg\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\t\tpre_login_reg_vip_avatar_icon_hover_png: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-icon-hover.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_reg_vip_avatar_icon_hover_svg: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-icon-hover.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\t\tpre_login_reg_vip_avatar_icon_pressed_png: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-icon-pressed.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_reg_vip_avatar_icon_pressed_svg: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-icon-pressed.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\t\tpre_login_reg_vip_avatar_icon_regular_png: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-icon-regular.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tpre_login_reg_vip_avatar_icon_regular_svg: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-icon-regular.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\t\tpre_login_reg_vip_avatar_pressed_png: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-pressed.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\t\tpre_login_reg_vip_avatar_pressed_svg: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-pressed.svg\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\t\tpre_login_reg_vip_avatar_regular_png: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-regular.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\t\tpre_login_reg_vip_avatar_regular_svg: new Asset(\"images/avatars/reg-vip/pre-login-reg-vip-avatar-regular.svg\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true})\n\t\t\t}\n\t\t},\n\t\tbadges: {\n\t\t\tdropsAndWins_png: new Asset(\"images/badges/dropsAndWins.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\texclusive_png: new Asset(\"images/badges/exclusive.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\thot_png: new Asset(\"images/badges/hot.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tnew_badge_png: new Asset(\"images/badges/new-badge.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tvip_badge_png: new Asset(\"images/badges/vip-badge.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true})\n\t\t},\n\t\tbanners: {\n\t\t\t_777InstantWin_arena_banner_mobile_png: new Asset(\"images/banners/777InstantWin_arena_banner_mobile.png\", {'777_com': true,'777_uk': true}),\n\t\t\t_777InstantWin_arena_banner_pc_png: new Asset(\"images/banners/777InstantWin_arena_banner_pc.png\", {'777_com': true,'777_uk': true}),\n\t\t\t_777InstantWin_arena_banner_tablet_png: new Asset(\"images/banners/777InstantWin_arena_banner_tablet.png\", {'777_com': true,'777_uk': true}),\n\t\t\t_888exclusive_arena_banner_mobile_png: new Asset(\"images/banners/888exclusive_arena_banner_mobile.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t_888exclusive_arena_banner_pc_png: new Asset(\"images/banners/888exclusive_arena_banner_pc.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t_888exclusive_arena_banner_tablet_png: new Asset(\"images/banners/888exclusive_arena_banner_tablet.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t_888exclusive_arena_preview_image_png: new Asset(\"images/banners/888exclusive_arena_preview_image.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tall_casino_games_arena_banner_mobile_png: new Asset(\"images/banners/all_casino_games_arena_banner_mobile.png\", {'777_com': true,'777_uk': true}),\n\t\t\tall_casino_games_arena_banner_pc_png: new Asset(\"images/banners/all_casino_games_arena_banner_pc.png\", {'777_com': true,'777_uk': true}),\n\t\t\tall_casino_games_arena_banner_tablet_png: new Asset(\"images/banners/all_casino_games_arena_banner_tablet.png\", {'777_com': true,'777_uk': true}),\n\t\t\tblackjack_arena_banner_mobile_png: new Asset(\"images/banners/blackjack_arena_banner_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tblackjack_arena_banner_pc_png: new Asset(\"images/banners/blackjack_arena_banner_pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tblackjack_arena_banner_tablet_png: new Asset(\"images/banners/blackjack_arena_banner_tablet.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tcards_arena_banner_mobile_png: new Asset(\"images/banners/cards_arena_banner_mobile.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tcards_arena_banner_pc_png: new Asset(\"images/banners/cards_arena_banner_pc.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tcards_arena_banner_tablet_png: new Asset(\"images/banners/cards_arena_banner_tablet.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tcasino_games_arena_banner_mobile_png: new Asset(\"images/banners/casino_games_arena_banner_mobile.png\", {'777_com': true,'777_uk': true}),\n\t\t\tcasino_games_arena_banner_pc_png: new Asset(\"images/banners/casino_games_arena_banner_pc.png\", {'777_com': true,'777_uk': true}),\n\t\t\tcasino_games_arena_banner_tablet_png: new Asset(\"images/banners/casino_games_arena_banner_tablet.png\", {'777_com': true,'777_uk': true}),\n\t\t\tevo_lobby_banner_mobile_png: new Asset(\"images/banners/evo_lobby_banner_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tevo_lobby_banner_pc_png: new Asset(\"images/banners/evo_lobby_banner_pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tevo_lobby_banner_tablet_png: new Asset(\"images/banners/evo_lobby_banner_tablet.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\texclusive_arena_banner_mobile_png: new Asset(\"images/banners/exclusive_arena_banner_mobile.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\texclusive_arena_banner_pc_png: new Asset(\"images/banners/exclusive_arena_banner_pc.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\texclusive_arena_banner_tablet_png: new Asset(\"images/banners/exclusive_arena_banner_tablet.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tInstantWin_arena_banner_mobile_png: new Asset(\"images/banners/InstantWin_arena_banner_mobile.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tInstantWin_arena_banner_pc_png: new Asset(\"images/banners/InstantWin_arena_banner_pc.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tInstantWin_arena_banner_tablet_png: new Asset(\"images/banners/InstantWin_arena_banner_tablet.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tjackpot_arena_banner_mobile_png: new Asset(\"images/banners/jackpot_arena_banner_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tjackpot_arena_banner_pc_png: new Asset(\"images/banners/jackpot_arena_banner_pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tjackpot_arena_banner_tablet_png: new Asset(\"images/banners/jackpot_arena_banner_tablet.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tlive_arena_banner_mobile_png: new Asset(\"images/banners/live_arena_banner_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tlive_arena_banner_pc_png: new Asset(\"images/banners/live_arena_banner_pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tlive_arena_banner_tablet_png: new Asset(\"images/banners/live_arena_banner_tablet.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tlive_casino_arena_banner_mobile_png: new Asset(\"images/banners/live_casino_arena_banner_mobile.png\", {'wsop_nj': true}),\n\t\t\tlive_casino_arena_banner_pc_png: new Asset(\"images/banners/live_casino_arena_banner_pc.png\", {'wsop_nj': true}),\n\t\t\tnew_evo_lobby_banner_mobile_png: new Asset(\"images/banners/new_evo_lobby_banner_mobile.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\tnew_evo_lobby_banner_pc_png: new Asset(\"images/banners/new_evo_lobby_banner_pc.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\tnew_evo_lobby_banner_tablet_png: new Asset(\"images/banners/new_evo_lobby_banner_tablet.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\tnew_games_arena_banner_mobile_png: new Asset(\"images/banners/new_games_arena_banner_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tnew_games_arena_banner_pc_png: new Asset(\"images/banners/new_games_arena_banner_pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tnew_games_arena_banner_tablet_png: new Asset(\"images/banners/new_games_arena_banner_tablet.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tprogressive_slots_arena_banner_mobile_png: new Asset(\"images/banners/progressive_slots_arena_banner_mobile.png\", {'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tprogressive_slots_arena_banner_pc_png: new Asset(\"images/banners/progressive_slots_arena_banner_pc.png\", {'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tprogressive_slots_arena_banner_tablet_png: new Asset(\"images/banners/progressive_slots_arena_banner_tablet.png\", {'harrahs_nj': true}),\n\t\t\tpromotions_arena_banner_mobile_png: new Asset(\"images/banners/promotions_arena_banner_mobile.png\", {'wsop_nj': true}),\n\t\t\tpromotions_arena_banner_pc_png: new Asset(\"images/banners/promotions_arena_banner_pc.png\", {'wsop_nj': true}),\n\t\t\troulette_arena_banner_mobile_png: new Asset(\"images/banners/roulette_arena_banner_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\troulette_arena_banner_pc_png: new Asset(\"images/banners/roulette_arena_banner_pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\troulette_arena_banner_tablet_png: new Asset(\"images/banners/roulette_arena_banner_tablet.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tscrach_card_arena_banner_mobile_png: new Asset(\"images/banners/scrach_card_arena_banner_mobile.png\", {'wsop_nj': true}),\n\t\t\tscrach_card_arena_banner_pc_png: new Asset(\"images/banners/scrach_card_arena_banner_pc.png\", {'wsop_nj': true}),\n\t\t\tscratch_card_arena_banner_mobile_png: new Asset(\"images/banners/scratch_card_arena_banner_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tscratch_card_arena_banner_pc_png: new Asset(\"images/banners/scratch_card_arena_banner_pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tscratch_card_arena_banner_tablet_png: new Asset(\"images/banners/scratch_card_arena_banner_tablet.png\", {'777_com': true,'777_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tsi_exclusive_arena_banner_mobile_png: new Asset(\"images/banners/si_exclusive_arena_banner_mobile.png\", {'si_mi': true}),\n\t\t\tsi_exclusive_arena_banner_pc_png: new Asset(\"images/banners/si_exclusive_arena_banner_pc.png\", {'si_mi': true}),\n\t\t\tsi_exclusive_arena_banner_tablet_png: new Asset(\"images/banners/si_exclusive_arena_banner_tablet.png\", {'si_mi': true}),\n\t\t\tslots_arena_banner_mobile_png: new Asset(\"images/banners/slots_arena_banner_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tslots_arena_banner_pc_png: new Asset(\"images/banners/slots_arena_banner_pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tslots_arena_banner_tablet_png: new Asset(\"images/banners/slots_arena_banner_tablet.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tvideo_poker_arena_banner_mobile_png: new Asset(\"images/banners/video_poker_arena_banner_mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tvideo_poker_arena_banner_pc_png: new Asset(\"images/banners/video_poker_arena_banner_pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tvideo_poker_arena_banner_tablet_png: new Asset(\"images/banners/video_poker_arena_banner_tablet.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tvirtual_sports_arena_banner_mobile_png: new Asset(\"images/banners/virtual_sports_arena_banner_mobile.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tvirtual_sports_arena_banner_pc_png: new Asset(\"images/banners/virtual_sports_arena_banner_pc.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tvirtual_sports_arena_banner_tablet_png: new Asset(\"images/banners/virtual_sports_arena_banner_tablet.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true})\n\t\t},\n\t\tbrowser_icons: {\n\t\t\tchrome_icon_PNG: new Asset(\"images/browser-icons/chrome-icon.PNG\", {}),\n\t\t\tmicrosoft_edge_png: new Asset(\"images/browser-icons/microsoft-edge.png\", {}),\n\t\t\tmozilla_firefox_png: new Asset(\"images/browser-icons/mozilla-firefox.png\", {})\n\t\t},\n\t\tburnout: {\n\t\t\tburnout_animation_last_frame_png: new Asset(\"images/burnout/burnout_animation_last_frame.png\", {}),\n\t\t\tburnout_animation_atlas: new Asset(\"images/burnout/burnout_animation.atlas\", {}),\n\t\t\tburnout_animation_json: new Asset(\"images/burnout/burnout_animation.json\", {}),\n\t\t\tburnout_animation_png: new Asset(\"images/burnout/burnout_animation.png\", {})\n\t\t},\n\t\tdaily_deal: {\n\t\t\tdaily_deal_chest_glow_png: new Asset(\"images/daily-deal/daily-deal-chest-glow.png\", {}),\n\t\t\tdaily_deal_chest_halo_png: new Asset(\"images/daily-deal/daily-deal-chest-halo.png\", {}),\n\t\t\tdaily_deal_chest_text_strip_svg: new Asset(\"images/daily-deal/daily-deal-chest-text-strip.svg\", {}),\n\t\t\tdaily_deal_chest_png: new Asset(\"images/daily-deal/daily-deal-chest.png\", {})\n\t\t},\n\t\tf2p: {\n\t\t\tfreeToPlay_atlas: new Asset(\"images/f2p/freeToPlay.atlas\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tfreeToPlay_json: new Asset(\"images/f2p/freeToPlay.json\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true}),\n\t\t\tfreeToPlay_png: new Asset(\"images/f2p/freeToPlay.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true})\n\t\t},\n\t\tfree_play: {\n\t\t\tfp_left_arrow_png: new Asset(\"images/free-play/fp-left-arrow.png\", {}),\n\t\t\tfp_right_arrow_png: new Asset(\"images/free-play/fp-right-arrow.png\", {}),\n\t\t\tfp_step_msg_bg_png: new Asset(\"images/free-play/fp-step-msg-bg.png\", {}),\n\t\t\tfp_vouchers_bg_png: new Asset(\"images/free-play/fp-vouchers-bg.png\", {}),\n\t\t\tfreeplay_bg_type_fp_png: new Asset(\"images/free-play/freeplay-bg-type-fp.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tfreeplay_bg_type_fs_png: new Asset(\"images/free-play/freeplay-bg-type-fs.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tfreeplay_bg_type_jfp_png: new Asset(\"images/free-play/freeplay-bg-type-jfp.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfreeplay_bg_type_jfs_png: new Asset(\"images/free-play/freeplay-bg-type-jfs.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfreeplay_type_fp_png: new Asset(\"images/free-play/freeplay-type-fp.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tfreeplay_type_fs_png: new Asset(\"images/free-play/freeplay-type-fs.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tfreeplay_type_jfp_png: new Asset(\"images/free-play/freeplay-type-jfp.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfreeplay_type_jfs_png: new Asset(\"images/free-play/freeplay-type-jfs.png\", {'777_com': true,'777_uk': true})\n\t\t},\n\t\tgame_frame: {\n\t\t\tdemo_left_corner_png: new Asset(\"images/game_frame/demo_left_corner.png\", {'777_com': true,'777_uk': true}),\n\t\t\tdemo_right_corner_png: new Asset(\"images/game_frame/demo_right_corner.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfreeplay_indicator_selected_png: new Asset(\"images/game_frame/freeplay_indicator_selected.png\", {'777_com': true,'777_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tfreeplay_indicator_png: new Asset(\"images/game_frame/freeplay_indicator.png\", {'777_com': true,'777_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tfreeplay_left_corner_png: new Asset(\"images/game_frame/freeplay_left_corner.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tfreeplay_right_corner_png: new Asset(\"images/game_frame/freeplay_right_corner.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\treal_left_corner_png: new Asset(\"images/game_frame/real_left_corner.png\", {'777_com': true,'777_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\treal_right_corner_png: new Asset(\"images/game_frame/real_right_corner.png\", {'777_com': true,'777_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tregulation_strip_clock_png: new Asset(\"images/game_frame/regulation_strip_clock.png\", {})\n\t\t},\n\t\tgames_icons_background: {\n\t\t\tBGcardandtable_png: new Asset(\"images/games-icons-background/BGcardandtable.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true}),\n\t\t\tBGGameBlack_png: new Asset(\"images/games-icons-background/BGGameBlack.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true}),\n\t\t\tBGGameBlackSquare_png: new Asset(\"images/games-icons-background/BGGameBlackSquare.png\", {'777_com': true,'777_uk': true}),\n\t\t\tBGicon_png: new Asset(\"images/games-icons-background/BGicon.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true}),\n\t\t\tBGredTiger_png: new Asset(\"images/games-icons-background/BGredTiger.png\", {'777_com': true,'777_uk': true})\n\t\t},\n\t\thistory: {\n\t\t\thistory_calendar_png: new Asset(\"images/history/history_calendar.png\", {'777_com': true,'777_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\thistory_details_left_corner_png: new Asset(\"images/history/history-details-left-corner.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true})\n\t\t},\n\t\tjackpot_widget: {\n\t\t\tcrown_png: new Asset(\"images/jackpot_widget/crown.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tage_of_gods: {\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/age_of_gods/background.png\", {}),\n\t\t\t\tlogo_png: new Asset(\"images/jackpot_widget/age_of_gods/logo.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true})\n\t\t\t},\n\t\t\tdaily: {\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/daily/background.png\", {'777_com': true,'777_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\tlogo_png: new Asset(\"images/jackpot_widget/daily/logo.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true})\n\t\t\t},\n\t\t\thigh_noon: {\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/high_noon/background.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tlogo_png: new Asset(\"images/jackpot_widget/high_noon/logo.png\", {})\n\t\t\t},\n\t\t\thourly_captain8: {\n\t\t\t\tbackground_landscape_png: new Asset(\"images/jackpot_widget/hourly_captain8/background_landscape.png\", {}),\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/hourly_captain8/background.png\", {}),\n\t\t\t\tlogo_png: new Asset(\"images/jackpot_widget/hourly_captain8/logo.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true})\n\t\t\t},\n\t\t\tinfo_dialog: {\n\t\t\t\tmobile_landscape_png: new Asset(\"images/jackpot_widget/info_dialog/mobile_landscape.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tmobile_png: new Asset(\"images/jackpot_widget/info_dialog/mobile.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tpc_png: new Asset(\"images/jackpot_widget/info_dialog/pc.png\", {'777_com': true,'777_uk': true})\n\t\t\t},\n\t\t\tjackpot_king: {\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/jackpot_king/background.png\", {}),\n\t\t\t\tlogo_png: new Asset(\"images/jackpot_widget/jackpot_king/logo.png\", {})\n\t\t\t},\n\t\t\tlive_party: {\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/live_party/background.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tin_game_widget_background_png: new Asset(\"images/jackpot_widget/live_party/in_game_widget_background.png\", {}),\n\t\t\t\tlogo_png: new Asset(\"images/jackpot_widget/live_party/logo.png\", {})\n\t\t\t},\n\t\t\tmillionaire_genie: {\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/millionaire_genie/background.png\", {}),\n\t\t\t\tlogo_png: new Asset(\"images/jackpot_widget/millionaire_genie/logo.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true})\n\t\t\t},\n\t\t\tparty: {\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/party/background.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tin_game_widget_background_png: new Asset(\"images/jackpot_widget/party/in_game_widget_background.png\", {}),\n\t\t\t\tlogo_png: new Asset(\"images/jackpot_widget/party/logo.png\", {}),\n\t\t\t\ttoaster_icon_png: new Asset(\"images/jackpot_widget/party/toaster_icon.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\twinning_png: new Asset(\"images/jackpot_widget/party/winning.png\", {})\n\t\t\t},\n\t\t\ttitan: {\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/titan/background.png\", {})\n\t\t\t},\n\t\t\ttwilight: {\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/twilight/background.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tlogo_png: new Asset(\"images/jackpot_widget/twilight/logo.png\", {})\n\t\t\t},\n\t\t\tvegas_millions: {\n\t\t\t\tbackground_png: new Asset(\"images/jackpot_widget/vegas_millions/background.png\", {}),\n\t\t\t\tlogo_png: new Asset(\"images/jackpot_widget/vegas_millions/logo.png\", {})\n\t\t\t}\n\t\t},\n\t\tlive_arena: {\n\t\t\tactive_indicator_bg_png: new Asset(\"images/live_arena/active_indicator_bg.png\", {}),\n\t\t\tdealer_icon_png: new Asset(\"images/live_arena/dealer_icon.png\", {'777_com': true,'777_uk': true}),\n\t\t\tseat_icon_dark_png: new Asset(\"images/live_arena/seat_icon_dark.png\", {'777_com': true,'777_uk': true}),\n\t\t\tseat_icon_png: new Asset(\"images/live_arena/seat_icon.png\", {'777_com': true,'777_uk': true}),\n\t\t\tlive_arena_widget: {\n\t\t\t\tbackground_png: new Asset(\"images/live_arena/live_arena_widget/background.png\", {}),\n\t\t\t\tcapsule_end_png: new Asset(\"images/live_arena/live_arena_widget/capsule_end.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tcapsule_mid_png: new Asset(\"images/live_arena/live_arena_widget/capsule_mid.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tcapsule_start_png: new Asset(\"images/live_arena/live_arena_widget/capsule_start.png\", {'777_com': true,'777_uk': true}),\n\t\t\t\tcrown_png: new Asset(\"images/live_arena/live_arena_widget/crown.png\", {}),\n\t\t\t\tlogo_png: new Asset(\"images/live_arena/live_arena_widget/logo.png\", {}),\n\t\t\t\tseparator_png: new Asset(\"images/live_arena/live_arena_widget/separator.png\", {'777_com': true,'777_uk': true})\n\t\t\t}\n\t\t},\n\t\tlogos: {\n\t\t\tsi_logo_pc_svg: new Asset(\"images/logos/si_logo_pc.svg\", {'si_mi': true}),\n\t\t\tdiamond_vip: {\n\t\t\t\tvip_diamond_logo_mobile_png: new Asset(\"images/logos/diamond-vip/vip-diamond-logo-mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_diamond_logo_mobile_svg: new Asset(\"images/logos/diamond-vip/vip-diamond-logo-mobile.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_diamond_logo_pc_dark_png: new Asset(\"images/logos/diamond-vip/vip-diamond-logo-pc-dark.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tvip_diamond_logo_pc_png: new Asset(\"images/logos/diamond-vip/vip-diamond-logo-pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_diamond_logo_pc_svg: new Asset(\"images/logos/diamond-vip/vip-diamond-logo-pc.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_diamond_logo_png: new Asset(\"images/logos/diamond-vip/vip-diamond-logo.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\t\tvip_diamond_logo_svg: new Asset(\"images/logos/diamond-vip/vip-diamond-logo.svg\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true})\n\t\t\t},\n\t\t\tgold_vip: {\n\t\t\t\tvip_gold_logo_mobile_png: new Asset(\"images/logos/gold-vip/vip-gold-logo-mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_gold_logo_mobile_svg: new Asset(\"images/logos/gold-vip/vip-gold-logo-mobile.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_gold_logo_pc_dark_png: new Asset(\"images/logos/gold-vip/vip-gold-logo-pc-dark.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tvip_gold_logo_pc_png: new Asset(\"images/logos/gold-vip/vip-gold-logo-pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_gold_logo_pc_svg: new Asset(\"images/logos/gold-vip/vip-gold-logo-pc.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_gold_logo_png: new Asset(\"images/logos/gold-vip/vip-gold-logo.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\t\tvip_gold_logo_svg: new Asset(\"images/logos/gold-vip/vip-gold-logo.svg\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true})\n\t\t\t},\n\t\t\tplatinum_vip: {\n\t\t\t\tvip_platinum_logo_mobile_png: new Asset(\"images/logos/platinum-vip/vip-platinum-logo-mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_platinum_logo_mobile_svg: new Asset(\"images/logos/platinum-vip/vip-platinum-logo-mobile.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_platinum_logo_pc_dark_png: new Asset(\"images/logos/platinum-vip/vip-platinum-logo-pc-dark.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tvip_platinum_logo_pc_png: new Asset(\"images/logos/platinum-vip/vip-platinum-logo-pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_platinum_logo_pc_svg: new Asset(\"images/logos/platinum-vip/vip-platinum-logo-pc.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_platinum_logo_png: new Asset(\"images/logos/platinum-vip/vip-platinum-logo.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\t\tvip_platinum_logo_svg: new Asset(\"images/logos/platinum-vip/vip-platinum-logo.svg\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true})\n\t\t\t},\n\t\t\treg_vip: {\n\t\t\t\tvip_regular_logo_mobile_png: new Asset(\"images/logos/reg-vip/vip-regular-logo-mobile.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_regular_logo_mobile_svg: new Asset(\"images/logos/reg-vip/vip-regular-logo-mobile.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_regular_logo_pc_dark_png: new Asset(\"images/logos/reg-vip/vip-regular-logo-pc-dark.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true}),\n\t\t\t\tvip_regular_logo_pc_png: new Asset(\"images/logos/reg-vip/vip-regular-logo-pc.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_regular_logo_pc_svg: new Asset(\"images/logos/reg-vip/vip-regular-logo-pc.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'si_mi': true,'wsop_nj': true}),\n\t\t\t\tvip_regular_logo_png: new Asset(\"images/logos/reg-vip/vip-regular-logo.png\", {'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\t\tvip_regular_logo_svg: new Asset(\"images/logos/reg-vip/vip-regular-logo.svg\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true})\n\t\t\t}\n\t\t},\n\t\tmini_orbit: {\n\t\t\tcip: {\n\t\t\t\texclusives_list_icon_cip_png: new Asset(\"images/mini_orbit/cip/exclusives_list_icon_cip.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\t\tjackpot_widget_title_crown_png: new Asset(\"images/mini_orbit/cip/jackpot_widget_title_crown.png\", {'wsop_nj': true}),\n\t\t\t\ttexture_png: new Asset(\"images/mini_orbit/cip/texture.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\t\tx_close_png: new Asset(\"images/mini_orbit/cip/x_close.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\t\tarenas_header_buttons: {\n\t\t\t\t\tcasino_games_icon_png: new Asset(\"images/mini_orbit/cip/arenas_header_buttons/casino_games_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\t\t\tjackpots_icon_png: new Asset(\"images/mini_orbit/cip/arenas_header_buttons/jackpots_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\t\t\tlive_icon_png: new Asset(\"images/mini_orbit/cip/arenas_header_buttons/live_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\t\t\tmy_casino_icon_png: new Asset(\"images/mini_orbit/cip/arenas_header_buttons/my_casino_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\t\t\tnew_games_icon_png: new Asset(\"images/mini_orbit/cip/arenas_header_buttons/new_games_icon.png\", {'wsop_nj': true}),\n\t\t\t\t\tprogressive_slots_icon_png: new Asset(\"images/mini_orbit/cip/arenas_header_buttons/progressive_slots_icon.png\", {'wsop_nj': true}),\n\t\t\t\t\tselected_png: new Asset(\"images/mini_orbit/cip/arenas_header_buttons/selected.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'wsop_nj': true}),\n\t\t\t\t\tslots_icon_png: new Asset(\"images/mini_orbit/cip/arenas_header_buttons/slots_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\t\t\tunselected_png: new Asset(\"images/mini_orbit/cip/arenas_header_buttons/unselected.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'wsop_nj': true}),\n\t\t\t\t\tvideo_poker_icon_png: new Asset(\"images/mini_orbit/cip/arenas_header_buttons/video_poker_icon.png\", {'wsop_nj': true})\n\t\t\t\t},\n\t\t\t\theader_icons: {\n\t\t\t\t\tgift_png: new Asset(\"images/mini_orbit/cip/header_icons/gift.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\t\t\tmoreMenu_png: new Asset(\"images/mini_orbit/cip/header_icons/moreMenu.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true}),\n\t\t\t\t\tsearch_png: new Asset(\"images/mini_orbit/cip/header_icons/search.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'wsop_nj': true})\n\t\t\t\t},\n\t\t\t\ttooltip: {\n\t\t\t\t\tgift_svg: new Asset(\"images/mini_orbit/cip/tooltip/gift.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true})\n\t\t\t\t}\n\t\t\t},\n\t\t\tcis: {\n\t\t\t\tx_close_png: new Asset(\"images/mini_orbit/cis/x_close.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\t\tarenas_header_buttons: {\n\t\t\t\t\tcasino_games_icon_png: new Asset(\"images/mini_orbit/cis/arenas_header_buttons/casino_games_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\t\tjackpots_icon_png: new Asset(\"images/mini_orbit/cis/arenas_header_buttons/jackpots_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\t\tlive_icon_png: new Asset(\"images/mini_orbit/cis/arenas_header_buttons/live_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\t\tmy_casino_icon_png: new Asset(\"images/mini_orbit/cis/arenas_header_buttons/my_casino_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\t\tselected_png: new Asset(\"images/mini_orbit/cis/arenas_header_buttons/selected.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\t\tslots_icon_png: new Asset(\"images/mini_orbit/cis/arenas_header_buttons/slots_icon.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\t\tunselected_png: new Asset(\"images/mini_orbit/cis/arenas_header_buttons/unselected.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true})\n\t\t\t\t},\n\t\t\t\theader_icons: {\n\t\t\t\t\tgift_png: new Asset(\"images/mini_orbit/cis/header_icons/gift.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\t\tmoreMenu_png: new Asset(\"images/mini_orbit/cis/header_icons/moreMenu.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\t\t\tsearch_png: new Asset(\"images/mini_orbit/cis/header_icons/search.png\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true})\n\t\t\t\t},\n\t\t\t\ttooltip: {\n\t\t\t\t\tgift_svg: new Asset(\"images/mini_orbit/cis/tooltip/gift.svg\", {'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonboarding: {\n\t\t\tonboarding_logo_closing_png: new Asset(\"images/onboarding/onboarding_logo_closing.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true}),\n\t\t\tonboarding_logo_png: new Asset(\"images/onboarding/onboarding_logo.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true})\n\t\t},\n\t\tregulation_specific: {\n\t\t\tdenmark: {\n\t\t\t\t_18plus_wide_png: new Asset(\"images/regulation_specific/denmark/18plus_wide.png\", {}),\n\t\t\t\tresponsible_gaming_svg: new Asset(\"images/regulation_specific/denmark/responsible_gaming.svg\", {}),\n\t\t\t\tsafe_to_play_png: new Asset(\"images/regulation_specific/denmark/safe-to-play.png\", {}),\n\t\t\t\tself_exclusion_png: new Asset(\"images/regulation_specific/denmark/self-exclusion.png\", {}),\n\t\t\t\tself_test_png: new Asset(\"images/regulation_specific/denmark/self-test.png\", {})\n\t\t\t},\n\t\t\tontario: {\n\t\t\t\tsafe_to_play_icon_svg: new Asset(\"images/regulation_specific/ontario/safe-to-play-icon.svg\", {})\n\t\t\t},\n\t\t\tsweeden: {\n\t\t\t\tsw_resp_game_limit_symbol_png: new Asset(\"images/regulation_specific/sweeden/sw-resp-game-limit-symbol.png\", {}),\n\t\t\t\tsw_resp_game_limit_png: new Asset(\"images/regulation_specific/sweeden/sw-resp-game-limit.png\", {}),\n\t\t\t\tsw_resp_game_panic_symbol_png: new Asset(\"images/regulation_specific/sweeden/sw-resp-game-panic-symbol.png\", {}),\n\t\t\t\tsw_resp_game_panic_png: new Asset(\"images/regulation_specific/sweeden/sw-resp-game-panic.png\", {}),\n\t\t\t\tsw_resp_game_self_test_symbol_png: new Asset(\"images/regulation_specific/sweeden/sw-resp-game-self-test-symbol.png\", {}),\n\t\t\t\tsw_resp_game_self_test_png: new Asset(\"images/regulation_specific/sweeden/sw-resp-game-self-test.png\", {})\n\t\t\t},\n\t\t\tus: {\n\t\t\t\tnj_rg_icon_svg: new Asset(\"images/regulation_specific/us/nj-rg-icon.svg\", {}),\n\t\t\t\tnj_us_flag_svg: new Asset(\"images/regulation_specific/us/nj-us-flag.svg\", {})\n\t\t\t}\n\t\t},\n\t\tresponsible_gambling: {\n\t\t\tage_18plus_capsule_svg: new Asset(\"images/responsible-gambling/age-18plus-capsule.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tage_18plus_flat_svg: new Asset(\"images/responsible-gambling/age-18plus-flat.svg\", {'777_com': true,'777_uk': true}),\n\t\t\tage_18plus_round_svg: new Asset(\"images/responsible-gambling/age-18plus-round.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true}),\n\t\t\tage_21plus_flat_svg: new Asset(\"images/responsible-gambling/age-21plus-flat.svg\", {'777_com': true,'777_uk': true}),\n\t\t\tage_21plus_round_svg: new Asset(\"images/responsible-gambling/age-21plus-round.svg\", {'777_com': true,'777_uk': true,'si_mi': true}),\n\t\t\tbegambleaeare_logo_png: new Asset(\"images/responsible-gambling/begambleaeare-logo.png\", {'777_com': true,'777_uk': true}),\n\t\t\tgamecare_logo_png: new Asset(\"images/responsible-gambling/gamecare-logo.png\", {'777_com': true,'777_uk': true}),\n\t\t\tsafeZoneIcon_svg: new Asset(\"images/responsible-gambling/safeZoneIcon.svg\", {'777_com': true,'777_uk': true})\n\t\t},\n\t\tsdk_icons: {\n\t\t\t_18_plus_png: new Asset(\"images/sdk_icons/18_plus.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\t_21_plus_png: new Asset(\"images/sdk_icons/21_plus.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tClose_hover_png: new Asset(\"images/sdk_icons/Close_hover.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tClose_png: new Asset(\"images/sdk_icons/Close.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tfp_vouchers_bg_png: new Asset(\"images/sdk_icons/fp_vouchers_bg.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfprightarrow_png: new Asset(\"images/sdk_icons/fprightarrow.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfpvoucherback_png: new Asset(\"images/sdk_icons/fpvoucherback.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfpVoucherBG_png: new Asset(\"images/sdk_icons/fpVoucherBG.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfpvoucherfreeplay_png: new Asset(\"images/sdk_icons/fpvoucherfreeplay.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfpvoucherfreespin_png: new Asset(\"images/sdk_icons/fpvoucherfreespin.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfpvoucherinfoclose_png: new Asset(\"images/sdk_icons/fpvoucherinfoclose.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfpvoucherinfoopen_png: new Asset(\"images/sdk_icons/fpvoucherinfoopen.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfpvoucherjackpotfreeplay_png: new Asset(\"images/sdk_icons/fpvoucherjackpotfreeplay.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfpvoucherjackpotfreespin_png: new Asset(\"images/sdk_icons/fpvoucherjackpotfreespin.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfreeplayVoucherBG_png: new Asset(\"images/sdk_icons/freeplayVoucherBG.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfreeSpinsVoucherBG_png: new Asset(\"images/sdk_icons/freeSpinsVoucherBG.png\", {'777_com': true,'777_uk': true}),\n\t\t\tfull_screen_off_png: new Asset(\"images/sdk_icons/full_screen_off.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tfull_screen_png: new Asset(\"images/sdk_icons/full_screen.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tgame_frame_freeplay_mode_left_png: new Asset(\"images/sdk_icons/game_frame_freeplay_mode_left.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tgame_frame_freeplay_mode_right_png: new Asset(\"images/sdk_icons/game_frame_freeplay_mode_right.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tgame_frame_practicel_mode_left_png: new Asset(\"images/sdk_icons/game_frame_practicel_mode_left.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tgame_frame_practicel_mode_right_png: new Asset(\"images/sdk_icons/game_frame_practicel_mode_right.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tgame_frame_real_mode_left_png: new Asset(\"images/sdk_icons/game_frame_real_mode_left.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tgame_frame_real_mode_right_png: new Asset(\"images/sdk_icons/game_frame_real_mode_right.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tgame_frame_bg_fp_left_png: new Asset(\"images/sdk_icons/game-frame-bg-fp-left.png\", {'harrahs_nj': true,'si_mi': true}),\n\t\t\tgame_frame_bg_fp_right_png: new Asset(\"images/sdk_icons/game-frame-bg-fp-right.png\", {'harrahs_nj': true,'si_mi': true}),\n\t\t\tgame_frame_fp_indicator_png: new Asset(\"images/sdk_icons/game-frame-fp-indicator.png\", {'777_com': true,'777_uk': true}),\n\t\t\tgeneral_notification_png: new Asset(\"images/sdk_icons/general_notification.png\", {'777_com': true,'777_uk': true,'wsop_nj': true}),\n\t\t\that_png: new Asset(\"images/sdk_icons/hat.png\", {'777_com': true,'777_uk': true}),\n\t\t\thistory_details_left_corner_png: new Asset(\"images/sdk_icons/history-details-left-corner.png\", {'si_mi': true}),\n\t\t\thot_png: new Asset(\"images/sdk_icons/hot.png\", {'777_com': true,'777_uk': true}),\n\t\t\ticons_down_arrow_png: new Asset(\"images/sdk_icons/icons_down_arrow.png\", {'777_com': true,'777_uk': true}),\n\t\t\tjackpotplayFreePlayVoucherBG_png: new Asset(\"images/sdk_icons/jackpotplayFreePlayVoucherBG.png\", {'777_com': true,'777_uk': true}),\n\t\t\tjackpotplayFreeSpinVoucherBG_png: new Asset(\"images/sdk_icons/jackpotplayFreeSpinVoucherBG.png\", {'777_com': true,'777_uk': true}),\n\t\t\tjackpotplayVoucherBG_png: new Asset(\"images/sdk_icons/jackpotplayVoucherBG.png\", {'777_com': true,'777_uk': true}),\n\t\t\tleftarrow_png: new Asset(\"images/sdk_icons/leftarrow.png\", {'777_com': true,'777_uk': true}),\n\t\t\tnew_badge_png: new Asset(\"images/sdk_icons/new-badge.png\", {'777_com': true,'777_uk': true}),\n\t\t\tpassword_png: new Asset(\"images/sdk_icons/password.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tpost_login_mobile_svg: new Asset(\"images/sdk_icons/post-login-mobile.svg\", {'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\trightarrow_png: new Asset(\"images/sdk_icons/rightarrow.png\", {'777_com': true,'777_uk': true}),\n\t\t\ttoaster_information_message_png: new Asset(\"images/sdk_icons/toaster-information-message.png\", {'777_com': true,'777_uk': true,'wsop_nj': true}),\n\t\t\ttouchFinger_png: new Asset(\"images/sdk_icons/touchFinger.png\", {'777_com': true,'777_uk': true}),\n\t\t\tuser_png: new Asset(\"images/sdk_icons/user.png\", {'777_com': true,'777_uk': true}),\n\t\t\tusername_png: new Asset(\"images/sdk_icons/username.png\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'wsop_nj': true}),\n\t\t\tvip_badge_png: new Asset(\"images/sdk_icons/vip-badge.png\", {'777_com': true,'777_uk': true})\n\t\t},\n\t\tstore: {\n\t\t\tstore_button_android_eng_png: new Asset(\"images/store/store-button-android-eng.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_android_fin_png: new Asset(\"images/store/store-button-android-fin.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_android_fre_png: new Asset(\"images/store/store-button-android-fre.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_android_ger_png: new Asset(\"images/store/store-button-android-ger.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_android_nor_png: new Asset(\"images/store/store-button-android-nor.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_android_por_png: new Asset(\"images/store/store-button-android-por.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_android_rus_png: new Asset(\"images/store/store-button-android-rus.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_android_spa_png: new Asset(\"images/store/store-button-android-spa.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_android_swe_png: new Asset(\"images/store/store-button-android-swe.png\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_ios_eng_svg: new Asset(\"images/store/store-button-ios-eng.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_ios_fin_svg: new Asset(\"images/store/store-button-ios-fin.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_ios_fre_svg: new Asset(\"images/store/store-button-ios-fre.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_ios_ger_svg: new Asset(\"images/store/store-button-ios-ger.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_ios_nor_svg: new Asset(\"images/store/store-button-ios-nor.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_ios_por_svg: new Asset(\"images/store/store-button-ios-por.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_ios_rus_svg: new Asset(\"images/store/store-button-ios-rus.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_ios_spa_svg: new Asset(\"images/store/store-button-ios-spa.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true}),\n\t\t\tstore_button_ios_swe_svg: new Asset(\"images/store/store-button-ios-swe.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'si_mi': true,'wsop_nj': true})\n\t\t},\n\t\ttooltip: {\n\t\t\tgift_svg: new Asset(\"images/tooltip/gift.svg\", {'777_com': true,'777_uk': true,'888casino_ca': true,'888casino_com': true,'888casino_dk': true,'888casino_es': true,'888casino_ger': true,'888casino_it': true,'888casino_nj': true,'888casino_nl': true,'888casino_pt': true,'888casino_ro': true,'888casino_se': true,'888casino_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true})\n\t\t},\n\t\tuser: {\n\t\t\tpost_login_mobile_svg: new Asset(\"images/user/post-login-mobile.svg\", {'777_com': true,'777_uk': true,'harrahs_nj': true,'mrgreen_com': true,'mrgreen_dk': true,'mrgreen_ger': true,'mrgreen_se': true,'si_mi': true,'wsop_nj': true})\n\t\t},\n\t\twheel_of_fortune: {\n\t\t\tcolors_svg: new Asset(\"images/wheel-of-fortune/colors.svg\", {}),\n\t\t\tshell_svg: new Asset(\"images/wheel-of-fortune/shell.svg\", {'777_com': true,'777_uk': true})\n\t\t}\n\t},\n\tlottie_json: {\n\t\texplore_swipe_gesture_lottie: new Asset(\"lottie-json/explore-swipe-gesture.lottie\", {}),\n\t\tgeo_location_checking_json: new Asset(\"lottie-json/geo-location-checking.json\", {}),\n\t\tgeo_location_ok_json: new Asset(\"lottie-json/geo-location-ok.json\", {}),\n\t\tloading_bar_json: new Asset(\"lottie-json/loading_bar.json\", {}),\n\t\tsave_game_bookmark_lottie: new Asset(\"lottie-json/save_game_bookmark.lottie\", {}),\n\t\ttitan_jackpot_json: new Asset(\"lottie-json/titan-jackpot.json\", {})\n\t},\n\tvideos: {\n\t\tharmonium_mp4: new Asset(\"videos/harmonium.mp4\", {})\n\t}\n};","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class MobileMenuIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IAddIconProps extends ISvgIconProps {\n\n}\n\nexport class AddIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IBackIconProps extends ISvgIconProps {\n\n}\n\nexport class BackIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IForwardIconProps extends ISvgIconProps {\n\n}\n\nexport class ForwardIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface ICloseIconProps extends ISvgIconProps {\n\n}\n\nexport class CloseIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ControlCenterIcon extends React.Component {\n render() {\n return \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IHelpIconProps extends ISvgIconProps {\n\n}\n\nexport class HelpIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport styled from \"styled-components\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ITwoCharsIconProps extends ISvgIconProps {\n text: string;\n}\n\nconst TextTag = styled.text`\n font-family: \"888-Bold\", Verdana, sans-serif;\n font-size: 15px;\n text-transform: uppercase;\n dominant-baseline: central;\n`;\n\nexport class TwoCharsIcon extends React.Component {\n render() {\n let text = this.props.text.trim().substr(0,2);\n return (\n \n \n {text}\n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IEarthGlobeIconProps extends ISvgIconProps {\n\n}\n\nexport class EarthGlobeIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class TopGamesIcon extends React.Component {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class RouletteIcon extends React.Component {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class BlackjackIcon extends React.Component {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return \n \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class EliteLoungeIcon extends React.Component {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class PokerIcon extends React.Component {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return \n \n \n \n \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class BaccaratIcon extends React.Component {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class GameShowsIcon extends React.Component {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return \n \n \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class NewGamesIcon extends React.Component {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class LinkToOfferIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class LinkToOfferCloseIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n );\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface ISourceOfFundsIconProps extends ISvgIconProps {\n\n}\n\nexport class SourceOfFundsIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ArrowsUpDownIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class MegaphoneIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ChipIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class SettingsIcon extends React.Component {\n render() {\n return \n \n \n \n \n ;\n }\n}\n\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class MuteIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class UnmuteIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ViewersIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class BrokenLinkIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class TimeReminderIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n );\n }\n}\n\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class TripleEightExclusiveIcon extends React.Component {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class PaymentsRedirectIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class LeftArrowIcon extends React.Component {\n render() {\n return (\n \n \n \n );\n }\n}\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class RightArrowIcon extends React.Component {\n render() {\n return (\n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport styled, {keyframes, css} from \"styled-components\";\n\nconst pinAnimation = keyframes`\n from {\n transform: translateY(-13px);\n }\n to {\n transform: translateY(15px);\n }\n`;\nconst PinGroup = styled.g<{animated?: boolean;}>`\n ${({animated}) => animated ? css`\n transform: translateY(-13px);\n animation: 1s linear 1s infinite alternate ${pinAnimation};\n ` : \"\"}\n`;\n\nconst MaskPinPath = styled.path<{animated?: boolean;}>`\n transform: translateY(-35px);\n`;\nconst CirclesGroup = styled.g<{animated?: boolean;}>`\n ${({animated}) => animated ? css`\n /* when the icon is animated, move the circles down a bit so we make room for the pin's animation (up-down) */\n transform: translateY(19px);\n ` : \"\"}\n`;\nconst smallCircleAnimation = keyframes`\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n`;\nconst SmallCirclePath = styled.path<{animated?: boolean;}>`\n opacity: 0;\n ${({animated}) => animated ? css`\n animation: 1s linear 1s infinite alternate ${smallCircleAnimation};\n ` : \"\"}\n`;\n\nexport interface ILocationIconProps extends ISvgIconProps {\n animated?: boolean;\n}\n\nexport class LocationIcon extends React.Component {\n render() {\n return (\n \n \n {/* Everything under a white pixel will be visible */}\n \n\n {/* Everything under a black pixel will be invisible */}\n \n \n\n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IBlogIconProps extends ISvgIconProps {\n\n}\n\nexport class BlogIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IHomeIconProps extends ISvgIconProps {\n\n}\n\nexport class HomeIcon extends React.Component {\n render() {\n return (\n \n \n \n {/* \n \n */}\n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IPromotionsIconProps extends ISvgIconProps {\n\n}\n\nexport class PromotionsIcon extends React.Component {\n render() {\n return (\n \n \n \n {/* \n \n \n \n */}\n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ISlotsIconProps extends ISvgIconProps {\n\n}\n\nexport class SlotsIcon extends React.Component {\n render() {\n return (\n \n \n \n {/* \n \n \n */}\n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IJackpotsIconProps extends ISvgIconProps {\n\n}\n\nexport class JackpotsIcon extends React.Component {\n render() {\n return (\n \n \n \n {/* \n \n \n \n */}\n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ILiveCasinoIconProps extends ISvgIconProps {\n\n}\n\nexport class LiveCasinoIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n {/* \n */}\n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ICasinoGamesIconProps extends ISvgIconProps {\n\n}\n\nexport class CasinoGamesIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* \n \n \n \n \n */}\n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IVipIconProps extends ISvgIconProps {\n\n}\n\nexport class VipIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n {/* \n \n */}\n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface INewGamesIconProps extends ISvgIconProps {\n\n}\n\nexport class NewGamesIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n {/* \n \n \n \n \n */}\n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ITripleEightCasinoIconProps extends ISvgIconProps {\n\n}\n\nexport class TripleEightCasinoIcon extends React.Component {\n render() {\n return (\n \n \n \n \n {/* */}\n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IBlackjackIconProps extends ISvgIconProps {\n\n}\n\nexport class BlackjackIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IRouletteIconProps extends ISvgIconProps {\n\n}\n\nexport class RouletteIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IGettingStartedIconProps extends ISvgIconProps {\n\n}\n\nexport class GettingStartedIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IBankingIconProps extends ISvgIconProps {\n\n}\n\nexport class BankingIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ILiveChatIconProps extends ISvgIconProps {\n\n}\n\nexport class LiveChatIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IDownloadAppIconProps extends ISvgIconProps {\n\n}\n\nexport class DownloadAppIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IClub888IconProps extends ISvgIconProps {\n\n}\n\nexport class Club888Icon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IPokerCircleIconProps extends ISvgIconProps {\n\n}\n\nexport class PokerCircleIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ISportCircleIconProps extends ISvgIconProps {\n\n}\n\nexport class SportCircleIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IVideoPokerIconProps extends ISvgIconProps {\n\n}\n\nexport class VideoPokerIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IDepositIconProps extends ISvgIconProps {\n\n}\n\nexport class DepositIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n );\n }\n}\n","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport interface IFreePlayIconProps extends ISvgIconProps {\n\n}\n\nexport class FreePlayIcon extends React.Component {\n render() {\n return (\n \n \n \n );\n }\n}","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport interface INotificationIconProps extends ISvgIconProps {\n\n}\n\nexport class NotificationIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n );\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class HelpCenterIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class WarningSignIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\n\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IUSAMapIconProps extends ISvgIconProps {\ncolor: string;\n}\n\nexport class USAMapIcon extends React.Component {\n render() {\n return (\n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ScratchCardsIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class MobileMenuNoSearchIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class SpeedGamesIcon extends React.Component {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\nexport interface IFilterIconProps extends ISvgIconProps{\n}\n\nexport class FilterIcon extends React.Component {\n\n render() {\n return (\n \n \n \n \n \n )\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface TempAccountPopupIconProps extends ISvgIconProps {\n\n}\n\nexport class TempAccountPopupIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport { ISvgIconProps, SvgIcon } from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class MobileAppsIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import {ISvgIconProps, SvgIcon} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport class AppHeaderSportIcon extends React.Component {\n render() {\n return \n \n \n \n }\n}","import {ISvgIconProps, SvgIcon} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport interface IAppHeaderPokerIconProps extends ISvgIconProps {\n title: string;\n}\n\nexport class AppHeaderPokerIcon extends React.Component {\n render() {\n return \n \n \n \n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class AppHeaderLogo888Icon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class SelfExclusionRegulationIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class SelfExclusionRegulationSymbolIcon extends React.Component {\n render() {\n return \n \n \n \n \n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class GamingLimitRegulationIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class GamingLimitRegulationSymbolIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n \n \n \n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class SelfTestRegulationIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class SelfTestRegulationSymbolIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class MinimumGamblingAgeRegulationIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class PanicButtonRegulationIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n \n \n \n \n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class HistoryIcon extends React.Component {\n render() {\n return \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class TransactionHistoryIcon extends React.Component {\n render() {\n return \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class SecurityIcon extends React.Component {\n render() {\n return \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class CompPointsIcon extends React.Component {\n render() {\n return \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class TimerIcon extends React.Component {\n render() {\n return \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class BiometricLoginIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class AboutIcon extends React.Component {\n render() {\n return \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class GamingHistoryIcon extends React.Component {\n render() {\n return \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class UploadDocumentsIcon extends React.Component {\n render() {\n return \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class TippingHistoryIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ReverseWithdrawalIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n ;\n }\n}\n","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport class OpenExternalIcon extends React.Component {\n\n render() {\n return (\n \n \n \n \n \n \n )\n }\n}","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport class WalletIcon extends React.Component {\n\n render() {\n return (\n \n \n \n )\n }\n}","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport class RegisterUserIcon extends React.Component {\n\n render() {\n return (\n \n \n\t \n \n )\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface SaveGameIconProps extends ISvgIconProps {\n shouldFill?: boolean;\n}\n\nexport class SaveGameIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n// #0370DD\nexport class PokerChipIcon extends React.Component {\n render() {\n return (\n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n// #FC6200\nexport class SportFootballIcon extends React.Component {\n render() {\n return (\n \n \n \n );\n }\n}\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class RedRecordCircleIcon extends React.Component {\n render() {\n return (\n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class LeaveIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class SoundOnIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class SoundOffIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ;\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class RetryArrowIcon extends React.Component {\n render() {\n return \n \n \n \n \n \n \n \n \n ;\n }\n}\n","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\nexport interface IFilterIconProps extends ISvgIconProps {\n}\n\nexport class ExploreFilledIcon extends React.Component {\n\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n }\n}","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\nexport interface IFilterIconProps extends ISvgIconProps {\n}\n\nexport class ExploreOutlinedIcon extends React.Component {\n\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n }\n}","import {IThemeIcons} from '../architecture/sections/theme-icons.interface';\nimport {MobileMenuIcon} from './icons/mobile-menu.icon';\nimport {InfoIcon} from './icons/info.icon';\nimport {AddIcon} from './icons/add.icon';\nimport {BackIcon} from './icons/back.icon';\nimport {ForwardIcon} from './icons/forward.icon';\nimport {CloseIcon} from './icons/close.icon';\nimport {ControlCenterIcon} from './icons/control-center.icon';\nimport {HelpIcon} from './icons/help.icon';\nimport {TwoCharsIcon} from './icons/two-chars.icon';\nimport {EarthGlobeIcon} from './icons/earth-globe.icon';\nimport {TopGamesIcon} from './icons/live-arena-navbar/top-games.icon';\nimport {RouletteIcon} from './icons/live-arena-navbar/roulette.icon';\nimport {BlackjackIcon} from './icons/live-arena-navbar/blackjack.icon';\nimport {EliteLoungeIcon} from './icons/live-arena-navbar/elite-lounge.icon';\nimport {PokerIcon} from './icons/live-arena-navbar/poker.icon';\nimport {BaccaratIcon} from './icons/live-arena-navbar/baccarat.icon';\nimport {GameShowsIcon} from './icons/live-arena-navbar/game-shows.icon';\nimport {NewGamesIcon} from './icons/live-arena-navbar/new-games.icon';\nimport {LinkToOfferIcon} from \"./icons/link-to-offer.icon\";\nimport {LinkToOfferCloseIcon} from \"./icons/link-to-offer-close.icon\";\nimport {SourceOfFundsIcon} from \"./icons/source-of-funds.icon\";\nimport {ArrowsUpDownIcon} from \"./icons/arrows-up-down.icon\";\nimport {MegaphoneIcon} from \"./icons/megaphone.icon\";\nimport {ChipIcon} from \"./icons/chip.icon\";\nimport {SettingsIcon} from \"./icons/settings.icon\";\nimport {MuteIcon} from \"./icons/live-arena-tile/mute.icon\";\nimport {UnmuteIcon} from \"./icons/live-arena-tile/unmute.icon\";\nimport {ViewersIcon} from \"./icons/live-arena-tile/viewers.icon\";\nimport {BrokenLinkIcon} from \"./icons/live-arena-tile/broken-link.icon\";\nimport {TimeReminderIcon} from \"./icons/time-reminder.icon\";\nimport {TripleEightExclusiveIcon} from \"./icons/live-arena-navbar/triple-eight-exclusive.icon\";\nimport {PaymentsRedirectIcon} from \"./icons/payments-redirect.icon\";\nimport {LeftArrowIcon} from \"./icons/live-arena-tile/left-arrow.icon\";\nimport {RightArrowIcon} from \"./icons/live-arena-tile/right-arrow.icon\";\nimport {LocationIcon} from \"./icons/location.icon\";\nimport {SearchIcon} from './icons/search.icon';\nimport {BlogIcon} from './icons/side-menu/blog.icon';\nimport {HomeIcon} from './icons/side-menu/home.icon';\nimport {PromotionsIcon} from './icons/side-menu/promotions.icon';\nimport {SlotsIcon} from './icons/side-menu/slots.icon';\nimport {JackpotsIcon} from './icons/side-menu/jackpots.icon';\nimport {LiveCasinoIcon} from './icons/side-menu/live-casino.icon';\nimport {CasinoGamesIcon} from './icons/side-menu/casino-games.icon';\nimport {VipIcon} from './icons/side-menu/vip.icon';\nimport {NewGamesIcon as SideMenuNewGamesIcon} from './icons/side-menu/new-games.icon';\nimport {TripleEightCasinoIcon} from \"./icons/side-menu/888casino.icon\";\nimport {BlackjackIcon as SideMenuBlackjackIcon} from './icons/side-menu/blackjack.icon';\nimport {RouletteIcon as SideMenuRouletteIcon} from './icons/side-menu/roulette.icon';\nimport {GettingStartedIcon} from \"./icons/side-menu/getting-started.icon\";\nimport {BankingIcon} from \"./icons/side-menu/banking.icon\";\nimport {LiveChatIcon} from \"./icons/side-menu/live-chat.icon\";\nimport {DownloadAppIcon} from \"./icons/side-menu/download-app.icon\";\nimport {Club888Icon} from \"./icons/side-menu/club888.icon\";\nimport {PokerCircleIcon} from \"./icons/side-menu/poker-circle.icon\";\nimport {SportCircleIcon} from \"./icons/side-menu/sport-circle.icon\";\nimport {VideoPokerIcon} from \"./icons/side-menu/video-poker.icon\";\nimport {DepositIcon} from \"./icons/side-menu/deposit.icon\";\nimport {FreePlayIcon} from \"./icons/freeplay.icon\";\nimport {NotificationIcon} from \"./icons/notifications.icon\";\nimport {HelpCenterIcon} from \"./icons/help-center.icon\";\nimport {WarningSignIcon} from \"./icons/warning-sign.icon\";\nimport {USAMapIcon} from \"./icons/usa-map.icon\";\nimport {ScratchCardsIcon} from './icons/side-menu/scratch-cards.icon';\nimport {MobileMenuNoSearchIcon} from \"./icons/mobile-menu-no-search.icon\";\nimport {SpeedGamesIcon} from \"./icons/live-arena-navbar/speed-games.icon\";\nimport {FilterIcon} from \"./icons/filter.icon\";\nimport {TempAccountPopupIcon} from \"./icons/temp-account-popup.icon\";\nimport {MobileAppsIcon} from \"./icons/side-menu/mobile-apps.icon\";\nimport {AppHeaderSportIcon} from \"./icons/header-navbar/app-header-sport.icon\";\nimport {AppHeaderPokerIcon} from \"./icons/header-navbar/app-header-poker.icon\";\nimport {AppHeaderLogo888Icon} from \"./icons/header-navbar/app-header-logo-888.icon\";\nimport {AppHeaderCasinoIcon} from \"../definitions/mrgreen/icons/header-navbar/app-header-casino.icon\";\nimport {SelfExclusionRegulationIcon} from \"./icons/header-navbar/regulation-icons/self-exclusion.icon\";\nimport {SelfExclusionRegulationSymbolIcon} from \"./icons/header-navbar/regulation-icons/self-exclusion-symbol.icon\";\nimport {GamingLimitRegulationIcon} from \"./icons/header-navbar/regulation-icons/gaming-limit.icon\";\nimport {GamingLimitRegulationSymbolIcon} from \"./icons/header-navbar/regulation-icons/gaming-limit-symbol.icon\";\nimport {SelfTestRegulationIcon} from \"./icons/header-navbar/regulation-icons/self-test.icon\";\nimport {SelfTestRegulationSymbolIcon} from \"./icons/header-navbar/regulation-icons/self-test-symbol.icon\";\nimport {MinimumGamblingAgeRegulationIcon} from \"./icons/header-navbar/regulation-icons/minimum-gambling-age.icon\";\nimport {PanicButtonRegulationIcon} from \"./icons/header-navbar/regulation-icons/panic-button.icon\";\nimport {HistoryIcon} from './icons/history.icon';\nimport {TransactionHistoryIcon} from './icons/transaction-history.icon';\nimport {SecurityIcon} from './icons/security.icon';\nimport {CompPointsIcon} from './icons/comp-points.icon';\nimport {TimerIcon} from './icons/timer.icon';\nimport {BiometricLoginIcon} from './icons/biometric-login.icon';\nimport {AboutIcon} from './icons/about.icon';\nimport {GamingHistoryIcon} from './icons/gaming-history.icon';\nimport {UploadDocumentsIcon} from './icons/upload-documents.icon';\nimport {TippingHistoryIcon} from './icons/tipping-history.icon';\nimport {ReverseWithdrawalIcon} from './icons/reverse-withdrawal.icon';\nimport {OpenExternalIcon} from './icons/open-external.icon';\nimport {WalletIcon} from './icons/wallet.icon';\nimport {RegisterUserIcon} from './icons/register-user.icon';\nimport {SaveGameIcon} from \"./icons/save-game.icon\";\nimport {PokerChipIcon} from './icons/side-menu/poker-chip.icon';\nimport {SportFootballIcon} from './icons/side-menu/sport-football.icon';\nimport {RedRecordCircleIcon} from './icons/live-arena-tile/red-record-circle.icon';\nimport {LeaveIcon} from './icons/leave.icon';\nimport {SoundOnIcon} from \"./icons/sound-on.icon\";\nimport {SoundOffIcon} from \"./icons/sound-off.icon\";\nimport {RetryArrowIcon} from \"./icons/retry-arrow.icon\";\nimport {ExploreFilledIcon} from './icons/explore-filled.icon';\nimport {ExploreOutlinedIcon} from './icons/explore-outlined.icon';\n\nexport const ThemeDefaultIcons: IThemeIcons = {\n mobileAppsIcon: MobileAppsIcon,\n mobileMenuNoSearchIcon: MobileMenuNoSearchIcon,\n mobileMenuIcon: MobileMenuIcon,\n addIcon: AddIcon,\n infoIcon: InfoIcon,\n backIcon: BackIcon,\n forwardIcon: ForwardIcon,\n closeIcon: CloseIcon,\n controlCenterIcon: ControlCenterIcon,\n appHeaderPokerIcon: AppHeaderPokerIcon,\n appHeaderSportIcon: AppHeaderSportIcon,\n appHeaderCasinoIcon: AppHeaderCasinoIcon,\n appHeaderLogo888Icon: AppHeaderLogo888Icon,\n helpIcon: HelpIcon,\n twoCharsIcon: TwoCharsIcon,\n earthGlobeIcon: EarthGlobeIcon,\n topGamesIcon: TopGamesIcon,\n rouletteIcon: RouletteIcon,\n blackjackIcon: BlackjackIcon,\n eliteLoungeIcon: EliteLoungeIcon,\n pokerIcon: PokerIcon,\n baccaratIcon: BaccaratIcon,\n gameShowsIcon: GameShowsIcon,\n newGamesIcon: NewGamesIcon,\n linkToOfferIcon: LinkToOfferIcon,\n linkToOfferCloseIcon: LinkToOfferCloseIcon,\n sourceOfFundsIcon: SourceOfFundsIcon,\n arrowsUpDownIcon: ArrowsUpDownIcon,\n megaphoneIcon: MegaphoneIcon,\n chipIcon: ChipIcon,\n settingsIcon: SettingsIcon,\n muteIcon: MuteIcon,\n redRecordCircle: RedRecordCircleIcon,\n unmuteIcon: UnmuteIcon,\n viewersIcon: ViewersIcon,\n brokenLinkIcon: BrokenLinkIcon,\n timeSpentReminderClockIcon: TimeReminderIcon,\n tripleEightExclusiveIcon: TripleEightExclusiveIcon,\n paymentsRedirectIcon: PaymentsRedirectIcon,\n leftArrowIcon: LeftArrowIcon,\n rightArrowIcon: RightArrowIcon,\n locationIcon: LocationIcon,\n searchIcon: SearchIcon,\n sideMenuHome: HomeIcon,\n sideMenuBlog: BlogIcon,\n sideMenuPromotions: PromotionsIcon,\n sideMenuSlots: SlotsIcon,\n sideMenuJackpots: JackpotsIcon,\n sideMenuLiveCasino: LiveCasinoIcon,\n sideMenuVip: VipIcon,\n sideMenuNewGames: SideMenuNewGamesIcon,\n sideMenuCasinoGames: CasinoGamesIcon,\n sideMenuExclusive888: TripleEightCasinoIcon,\n sideMenuScratchCards: ScratchCardsIcon,\n sideMenuBlackjack: SideMenuBlackjackIcon,\n sideMenuRoulette: SideMenuRouletteIcon,\n sideMenuGettingStarted: GettingStartedIcon,\n sideMenuBanking: BankingIcon,\n sideMenuLiveChat: LiveChatIcon,\n sideMenuDownloadApp: DownloadAppIcon,\n sideMenuClub888: Club888Icon,\n sideMenuPokerCircle: PokerCircleIcon,\n sideMenuSportCircle: SportCircleIcon,\n sideMenuVideoPoker: VideoPokerIcon,\n sideMenuDeposit: DepositIcon,\n sideMenuPokerChip: PokerChipIcon,\n sideMenuSportFootball: SportFootballIcon,\n notificationIcon: NotificationIcon,\n freeplayIcon: FreePlayIcon,\n helpCenterIcon: HelpCenterIcon,\n warningSignIcon: WarningSignIcon,\n usaMapIcon: USAMapIcon,\n speedGames: SpeedGamesIcon,\n filterIcon: FilterIcon,\n tempAccountPopupIcon: TempAccountPopupIcon,\n selfExclusionRegulationIcon: SelfExclusionRegulationIcon,\n selfExclusionRegulationSymbolIcon: SelfExclusionRegulationSymbolIcon,\n gamingLimitRegulationIcon: GamingLimitRegulationIcon,\n gamingLimitRegulationSymbolIcon: GamingLimitRegulationSymbolIcon,\n selfTestRegulationIcon: SelfTestRegulationIcon,\n selfTestRegulationSymbolIcon: SelfTestRegulationSymbolIcon,\n minimumGamblingAgeRegulationIcon: MinimumGamblingAgeRegulationIcon,\n panicButtonRegulationIcon: PanicButtonRegulationIcon,\n historyIcon: HistoryIcon,\n openBetsIcon: GamingHistoryIcon,\n transactionHistoryIcon: TransactionHistoryIcon,\n securityIcon: SecurityIcon,\n compPointsIcon: CompPointsIcon,\n timerIcon: TimerIcon,\n biometricLoginIcon: BiometricLoginIcon,\n aboutIcon: AboutIcon,\n gamingHistoryIcon: GamingHistoryIcon,\n uploadDocumentsIcon: UploadDocumentsIcon,\n tippingHistoryIcon: TippingHistoryIcon,\n reverseWithdrawalIcon: ReverseWithdrawalIcon,\n openExternal: OpenExternalIcon,\n wallet: WalletIcon,\n registerUser: RegisterUserIcon,\n saveGameIcon: SaveGameIcon,\n leaveIcon: LeaveIcon,\n soundOnIcon: SoundOnIcon,\n soundOffIcon: SoundOffIcon,\n retryArrowIcon: RetryArrowIcon,\n exploreFilledIcon: ExploreFilledIcon,\n exploreOutlinedIcon: ExploreOutlinedIcon\n};\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IInfoIconProps extends ISvgIconProps {\n\n}\n\nexport class InfoIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface ISearchIconProps extends ISvgIconProps {\n\n}\n\nexport class SearchIcon extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n );\n }\n}\n","import {grayColors} from \"../../architecture/gray-colors\";\n\nexport const baseColors = {\n base01: \"#0ea79b\", //brandTeal\n base01Contrast: \"#19322f\", //blackTeal\n base01Dark: \"#8cd1ba\", //softTeal\n base01Light: \"#c3e3c7\", //lightGreen\n\n base02: \"#fcf6d5\", //brandYellow\n base02Contrast: \"#4c1723\", //blackRed\n base02Dark: \"#a4867c\", //tan\n base02Light: \"#eadfc3\", //sepia\n\n base03: \"#bc3554\", //pink\n base03Contrast: \"#fcf6d5\", //brandYellow,\n base03Dark: \"#b01619\", //brick\n base03Light: \"#ff014f\", //red\n\n base04: \"#ffd683\", //peach\n base04Contrast: \"#4c1723\", //blackRed\n base04Dark: \"#ffbe0b\", //papaya\n base04Light: \"#ffff00\", //yellow\n\n\n base05: \"#7aec37\", //inchWorm\n base05Contrast: \"#000000\",\n base05Dark: \"#135823\",\n base05Light: \"#d5ec37\", //pear //#87ee4b\n\n logoBackground: \"#DAEBCD\",\n\n ...grayColors\n}","import {grayColors} from \"../../architecture/gray-colors\";\n\nexport const baseColors = {\n base01: \"#7ff800\", //brandGreen\n base01Contrast: \"#000000\",\n base01Dark: \"#7aec37\", //inchWorm\n base01Light: \"#d2f800\", //limeGreen\n\n base02: \"#fce403\", //turbo\n base02Contrast: \"#000000\",\n base02Dark: \"#ffff00\", //yellow\n base02Light: \"#d5ec37\", //pear\n\n base03: \"#ff014f\", //red\n base03Contrast: \"#ffffff\",\n base03Dark: \"#e00146\",\n base03Light: \"#ff1a61\",\n\n ...grayColors\n}\n","import {grayColors} from \"../../architecture/gray-colors\";\n\nexport const baseColors = {\n base01: \"#d62a8c\",\n base01Contrast: \"#ffffff\",\n base01Dark: \"#bc257b\",\n base01Light: \"#da3f98\",\n\n base02: \"#310a53\",\n base02Contrast: \"#ffffff\",\n base02Dark: \"#462365\",\n base02Light: \"#6d5c80\",\n\n base03: \"#ff014f\",\n base03Contrast: \"#ffffff\",\n base03Dark: \"#e00146\",\n base03Light: \"#ff1a61\",\n\n\n base04: \"#d5ec37\",\n base04Contrast: \"#180529\",\n base04Dark: \"#7aec37\",\n base04Light: \"#ffff00\",\n\n ...grayColors\n}","import {grayColors} from \"../../architecture/gray-colors\";\n\nexport const baseColors = {\n base01: \"#015536\",\n base01Contrast: \"#262627\",\n base01Dark: \"#05372C\",\n base01Light: \"#41B169\",\n\n base02: \"#047C4C\",\n base02Contrast: \"\",\n base02Dark: \"\",\n base02Light: \"\",\n\n base03: \"#FFFFFF\",\n base03Contrast: \"\",\n base03Dark: \"\",\n base03Light: \"\",\n\n base04: \"linear-gradient(90deg, #F1C141 0%, #F9F19A 48.96%, #F1C141 100%)\",\n base05: \"#F12727\",\n gold: \"#F1C141\",\n yellow: \"#F9F19A\",\n warmWhite: \"#FFFFFFCC\",\n ...grayColors\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class AppHeaderCasinoIcon extends React.Component {\n render() {\n return \n \n \n \n }\n}","import {grayColors} from \"../../architecture/gray-colors\";\n\nexport const baseColors = {\n base01: \"#e63422\", //red\n base01Contrast: \"#ffffff\",\n base01Dark: \"#ca2e1e\",\n base01Light: \"#e94838\",\n\n base02: \"#7ff800\", //brandGreen\n base02Contrast: \"#000000\",\n base02Dark: \"#7aec37\", //inchWorm\n base02Light: \"#d2f800\", //limeGreen\n\n base03: \"#fce403\", //turbo\n base03Contrast: \"#000000\",\n base03Dark: \"#ffff00\", //yellow\n base03Light: \"#d5ec37\", //pear\n\n base04: \"#c81503\",\n\n ...grayColors\n};","export function hexToRgba(hex: string, opacity: number = 1): string {\n var c;\n if(/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)){\n c = hex.substring(1).split('');\n if(c.length === 3){\n c = [c[0], c[0], c[1], c[1], c[2], c[2]];\n }\n c = '0x'+c.join('');\n return 'rgba('+[(c>>16)&255, (c>>8)&255, c&255].join(',')+',' + opacity +')';\n }\n throw new Error('Bad color Hex code');\n}","export const FEATURE_GAME_RECOMMENDATIONS = 'GameRecommendations';\nexport const FEATURE_ROUTE_OVERWRITE = \"AbRouteOverwrite\";\nexport const FEATURE_DEPOSIT_WIDGET = \"DepositWidget\"; //used only on backend side\nexport const FEATURE_CASHOUT_WIDGET = \"CashoutWidget\"; //used only on backend side\nexport const FEATURE_TRANSACTION_HISTORY_WIDGET = \"TransactionHistoryWidget\";\nexport const FEATURE_NAME_CONTROL_CENTER_TOGGLE = \"AbTestingSafeZoneToggle\";\nexport const FEATURE_NAME_LIST_ON_TOP = \"ListOnTop\";\nexport const FEATURE_NAME_PARTY_JACKPOTS = \"PartyJackpots\";\nexport const FEATURE_NAME_SEARCH_GAME_SUGGESTED_BY_AI = \"SearchGameSuggestionByAI\";\nexport const FEATURE_NAME_PLAYERS_LIKE_YOU_GAMES_LIST_TYPE_ID = \"PlayersLikeYouGamesListTypeId\";\nexport const FEATURE_NAME_VIDEO_LIVE_STREAM = \"LiveStreamEnabled\";\nexport const FEATURE_NAME_STATIC_VIDEO_LIST = \"StaticVideoListEnabled\";\nexport const FEATURE_NAME_AI_SORT_GAME_LIST = \"AbTestingAiSortGamesLists\";\nexport const FEATURE_NAME_BECAUSE_YOU_PLAYED_LIST = \"BecauseYouPlayedListEnabled\";\nexport const FEATURE_NAME_MOBILE_HEADER_SEARCH_BUTTON = \"MobileHeaderSearchButton\";\nexport const FEATURE_NAME_ONBOARDING_TOUR = \"OnboardingTourActivated\";\nexport const FEATURE_NAME_REGISTRATION_WIDGET = \"RegistrationWidget\";\nexport const FEATURE_NAME_WEBAPP_BOTTOM_NAVIGATION = \"WebappBottomNavigation\";\nexport const FEATURE_NAME_IN_GAME_NAV_BAR = \"InGameNavBar\";\nexport const FEATURE_NAME_VIDEO_SLIDES = \"OrbitExplorer\";\n","export enum LIST_TYPE_ID {\n STICKINESS = 0,\n BETS = 2,\n ACTIVE_USERS = 1\n}","export const CHANNEL_SOURCE = {\n casinoClient: 'CASINO_CLIENT',\n partyJackpotToaster: 'PARTY_JACKPOT_TOASTER',\n omg: 'OMG',\n myAccount: 'MY_ACCOUNT',\n uploadDocuments: 'UPLOAD_DOCUMENTS',\n registration: 'REGISTRATION',\n pendingPlay: 'PENDING_PLAY',\n pendingAction: 'PENDING_ACTION',\n geoLocationRetry: 'GEO_LOCATION_RETRY',\n geoLocation: 'GEO_LOCATION',\n rich: 'RICH',\n about_popup: 'ABOUT_POPUP',\n cashier: \"CASHIER\",\n uk_acocunt_miration: 'UK_ACCOUNT_MIGRATION'\n}\n\nexport const CHANNEL_ELEMENTS = {\n depositButton: 'deposit_button',\n withdrawButton: 'withdraw_button',\n uploadDocumentsButton: 'upload_documents_button',\n transactionHistoryButton: 'transaction_history_button',\n retryButton: 'retry_button',\n plusButton: 'plus_button',\n urlParam: 'url_param',\n deepLink: 'deep_link',\n floatingIcon: 'floating_icon',\n controlCenterHeaderButton: 'safezone_header_button',\n controlCenterTooltip: 'control_center_tooltip',\n controlCenterUsefulLink: 'safezone_useful_link',\n gamesLimitsLobbyButton: 'games_limits_lobby_button',\n gamesLimitsGameButton: 'games_limits_game_button',\n omgAction: \"omg_action\",\n cashierAction: \"cashier_action\",\n registerButton: \"register_button\"\n}\n\nexport const DISPLAY_MESSAGE_IDS = {\n sofRequired: 100,\n retryCloseDrawerMessage: 101,\n psRedirectFocusDialog: 102,\n timeSpentReminder: 104,\n nightLimitWarning: 105,\n nightLimitKick: 106,\n lugasCooldown: 108,\n lugasActiveOnAnotherOperator: 109,\n lugasLogout: 110,\n loginMessage: 112,\n realityCheckGermany: 113,\n SDNetLossAdvanceWarning: 115,\n SDTimeLimitAdvanceWarning: 116,\n SDNetLossLimitsReached: 117,\n SDTimeLimitsReached: 118,\n SDRealityCheck: 119,\n SDResult: 120,\n SDSetLimitPopUp: 121\n}\n\nexport function getDisplayMessageName(messageId: number): string {\n switch (messageId) {\n case DISPLAY_MESSAGE_IDS.SDSetLimitPopUp:\n return \"SDSetLimitPopUp\";\n case DISPLAY_MESSAGE_IDS.SDNetLossAdvanceWarning:\n return \"SDNetLossAdvanceWarning\";\n case DISPLAY_MESSAGE_IDS.SDTimeLimitAdvanceWarning:\n return \"SDTimeLimitAdvanceWarning\";\n case DISPLAY_MESSAGE_IDS.SDNetLossLimitsReached:\n return \"SDNetLossLimitsReached\";\n case DISPLAY_MESSAGE_IDS.SDTimeLimitsReached:\n return \"SDTimeLimitsReached\";\n case DISPLAY_MESSAGE_IDS.SDRealityCheck:\n return \"SDRealityCheck\";\n case DISPLAY_MESSAGE_IDS.SDResult:\n return \"SDResult\";\n default:\n return \"\";\n }\n}\n\nexport const DISPLAY_MESSAGE_NAMES = {\n DISRUPTIVE_WARNING_MESSAGE_NAME: \"DisruptiveWarningMessage\",\n DISRUPTIVE_KICKOFF_MESSAGE_NAME: \"DisruptiveKickOffMessage\",\n LUGAS_COOLDOWN_MESSAGE_NAME: \"LugasCoolingPeriod\",\n LUGAS_ACTIVE_MESSAGE_NAME: \"LugasParallelPlaying\",\n LUGAS_LOGOUT_MESSAGE_NAME: \"LugasLogout\",\n REALITY_CHECK_GERMANY_MESSAGE_NAME: \"RealityCheck\",\n LOGIN_MESSAGE: \"LoginMessage\"\n}\n\nexport const ACTION_TAKEN_NAMES = {\n CONFIRM_ACTION: \"confirm\",\n CANCEL_ACTION: \"cancel\",\n}\n\n","export enum FP_VOUCHER_TYPES {\n FreeSpin = '1',\n FreePlay = '2',\n FreeJackpotSpin = '3',\n FreeJackpotPlay = '4'\n}\n\nexport const FP_MESSAGE_MODE = {\n POPUP: 'popup',\n EMBEDDED_INTERNAL: 'embedded-internal'\n};\n","export enum GAME_GROUP {\n ARCADE = 209,\n BACCARAT = 11,\n BACKGAMMONN = 40,\n BLACKJACK = 12,\n CARRIBEAN_POKER = 18,\n CRAPS = 10,\n CRAZY_BLACKJACK = 20,\n HEAD_TO_HEAD = 207,\n HI_LO = 202,\n KENO = 16,\n LIVE_CASINO = 201,\n PAI_GOW_POKER = 17,\n POKER = 100,\n POKER_TEMPLATE_GAMES = 206,\n POOLS = 212,\n POWER_VIDEO_POKER = 19,\n ROULETTE = 13,\n ROULETTE_LIKE = 203,\n SCRATCH_CARD = 204,\n SLOT = 14,\n VIDEO_SLOT = 30,\n VIDEO_POKER = 15,\n VIDEO_SLOT_BONUS_GAME = 31,\n CRASH_GAME = 301\n}\n","export enum JackpotInternalId {\n Daily = 8000,\n Twilight = 8001,\n HourlyCaptain8 = 8002,\n MillionaireGenie = 6,\n AgeOfTheGodsFranchises = 200019,\n\n}\n\nexport enum JackpotType {\n Daily = \"Daily\",\n HighNoon = \"HighNoon\",\n Twilight = \"Twilight\",\n Party = \"Party\",\n HourlyCaptain8 = \"HourlyCaptain8\",\n MillionaireGenie = \"MillionaireGenie\",\n AgeOfGods = \"AgeOfTheGodsFranchises\",\n Titan = \"Titan\",\n VegasMillions = \"VegasMillions\",\n JackpotKing = \"JackpotKing\"\n}\n\nexport enum JACKPOT_STATE {\n Cold = 1,\n Regular = 2,\n Hot = 3,\n OffHours = 4 // used only for Hourly Party Jackpots for now\n}\n","const MIGRATION = {\n PLAYER_MIGRATED_COOKIE : \"player_migrated\",\n LOADED_WITH_MIGRATION_TOKEN_SESSION_STORAGE_KEY: \"loadedWithMigrationToken\",\n MIGRATION_SOURCE_QUERY_PARAM: \"utm_source\",\n MIGRATION_SOURCE_QUERY_PARAM_VALUE: 'player_migration',\n MIGRATION_TOKEN_QUERY_PARAM: \"utm_content\",\n BUSINESS_CORRELATION_ID_QUERY_PARAM: \"utm_id\",\n UK_SCV_PLAYER_MIGRATED_COOKIE: \"uk_scv_player_migrated\",\n};\n\nexport default MIGRATION;","\nexport enum GermanyResponsibleGamingButtonPlacement {\n inGame = 0,\n inDetailedHistory = 1,\n inHeader = 2\n}","//This is the cookie name used in unified.\nexport const STATE_OF_RESIDENCE_COOKIE_KEY: string = 'userSelectedState';\n","const TEMP_ACCOUNT_STATUS = {\n APPROVED: 'APPROVED',\n DOCUMENTS_NOT_RECEIVED: 'DOCUMENTS_NOT_RECEIVED',\n PENDING_VERIFICATION: 'PENDING_VERIFICATION'\n};\nexport {TEMP_ACCOUNT_STATUS};","export enum BalanceType {\n CASH = \"cash\",\n BONUS = \"bonus\",\n BOTH = \"both\"\n}\n","export type CyCssClass =\n 'cy-main-screen' |\n 'cy-brand-switch-list' |\n 'cy-brand-switch-list-item' |\n 'cy-menu-link' |\n 'cy-spinner' |\n 'cy-game-iframe' |\n 'cy-single-game-regular-template' |\n 'cy-game-image-container' |\n 'cy-play-real-game-button' |\n 'cy-play-demo-game-button' |\n 'cy-modal' |\n 'cy-modal-content' |\n 'cy-reality-check-options' |\n 'cy-modal-dialog-buttons-area' |\n 'cy-welcome-component' |\n 'cy-balance-box' |\n 'cy-balance-box-amount' |\n 'cy-profile-box' |\n 'cy-cashier-button' |\n 'cy-clock' |\n 'cy-game-window' |\n 'cy-logout-link' |\n 'cy-burger-button' |\n 'cy-profile-box-login-button' |\n 'cy-menu-links-group' |\n 'cy-menu-links-cross-brands-group' |\n 'cy-profile-picture' |\n 'cy-menu-item' |\n 'cy-game-navbar-close-button' |\n 'cy-game-navbar-clock' |\n 'cy-game-stripe-clock' |\n 'cy-game-navbar' |\n 'cy-open-responsible-gaming-button' |\n 'cy-game-navbar-game-name' |\n 'cy-game-navbar-session-id' |\n 'cy-game-navbar-switch-to-real-label' |\n 'cy-game-navbar-switch-to-demo-label' |\n 'cy-game-navbar-game-mode-toggle' |\n \"cy-game-info-page-button\" |\n 'cy-welcome-cashier-button' |\n 'cy-game-navbar-fullscreen-button' |\n 'cy-game-regulation-stripe' |\n 'cy-gambling-session-limit-duration-select' |\n 'cy-gambling-session-limit-loss-limit-select' |\n 'cy-gambling-session-limit-interval-reminder-select' |\n 'cy-gambling-session-limit-restriction-period-select' |\n 'cy-header-regulation-data'|\n 'cy-self-exclusion-link' |\n 'cy-safe-to-play' |\n 'cy-responsible-gaming-button' |\n 'cy-balance-amount-pc' |\n 'cy-header-bankroll-button-mobile' |\n 'cy-bonus-and-cash-balance' |\n 'cy-cache-balance' |\n 'cy-bonus-balance' |\n 'cy-login-button-text' |\n 'cy-register-button' |\n 'cy-last-login-label' |\n 'cy-main-nav' |\n 'cy-navbar-mobile-wrapper' |\n 'cy-session-timer' |\n 'cy-last-login-value' |\n 'cy-open-game-intermediate-page' |\n 'cy-regulation-game-session-id' |\n 'cy-regulation-participation-ticket-id' |\n 'cy-italy-game-limit-default-amount-option' |\n 'cy-italy-game-limit-other-amount-option' |\n 'cy-italy-game-limit-other-amount-input' |\n 'cy-italy-game-limit-regulatory-value' |\n 'cy-sweden-panic-button' |\n 'cy-sweden-panic-icon' |\n 'cy-sweden-game-limit-button' |\n 'cy-sweden-game-limit-icon' |\n 'cy-sweden-self-test-button' |\n 'cy-sweden-self-test-icon' |\n 'cy-modal-dialog-x-close-button' |\n 'cy-external-link-container' |\n 'cy-cashier-external-link-container' |\n 'cy-new-live-casino' |\n 'cy-live-casino' |\n 'cy-live-casino-widget-container' |\n 'cy-modal-main-title' |\n 'cy-italy-game-limit-message' |\n 'cy-italy-game-limit-message-section' |\n 'cy-italy-game-limit-error-section' |\n 'cy-dk-doga-icon' |\n 'cy-dk-stop-spillen-icon' |\n 'cy-dk-rofus-icon' |\n 'cy-clear-search-box-icon' |\n 'cy-found-games-list-box' |\n 'cy-no-found-games-box' |\n 'cy-found-games-more-box' |\n 'cy-found-games-more' |\n 'cy-search-game-item' |\n 'cy-user-cid' |\n 'cy-close-mobile-menu-icon' |\n 'cy-close-mobile-search-icon' |\n 'cy-game-search-input' |\n 'cy-search-title-box' |\n 'cy-game-search-box' |\n 'cy-suggested-links-suggested-games' |\n 'cy-lobby-header' |\n 'cy-lobby-header-title'|\n 'cy-navbar-right-container' |\n 'cy-homepage-header-arenas-container' |\n 'cy-homepage-top-banner-background' |\n 'cy-homepage-top-banner-divider' |\n 'cy-arena-box' |\n 'cy-header-arena-title' |\n 'cy-new-games-arena-badge' |\n 'cy-party-jackpot-in-game-container' |\n 'cy-party-jackpot-in-game-widget-amount' |\n 'cy-party-jackpot-welcome-popup' |\n 'cy-party-jackpot-welcome-popup-accept-button' |\n 'cy-party-jackpot-welcome-popup-decline-button' |\n 'cy-party-jackpot-welcome-popup-terms-and-conditions' |\n 'cy-reality-check-close-button' |\n 'cy-session-cooldown-popup' |\n 'cy-session-cooldown-remaining' |\n 'cy-game-popup' |\n 'cy-game-popup-not-now-button' |\n 'cy-game-popup-open-real-button' |\n 'cy-game-popup-game-title' |\n 'cy-homepage-arenas-header' |\n 'cy-layout-wrapper-homepage'|\n 'cy-layout-wrapper-miniorbit-homepage' |\n 'cy-lobby-wrapper-miniorbit-arena' |\n 'cy-panic-button-germany' |\n 'cy-tooltip-click-here' |\n 'cy-modal-dialog-content' |\n 'cy-tooltip-box' |\n 'cy-history-more-details' |\n 'cy-details-history-header' |\n 'cy-useful-links-list' |\n 'cy-mini-orbit-useful-links-list' |\n 'cy-tooltip-close' |\n 'cy-remainder-select' |\n 'cy-more-info' |\n 'cy-free-play-indicator-button' |\n 'cy-deposit-button' |\n 'cy-user-menu-close-btn' |\n 'cy-free-play-voucher-container' |\n 'cy-free-play-games-container' |\n 'cy-free-play-game-item' |\n 'cy-drop-down-box' |\n 'cy-gaming-history-record' |\n 'cy-gaming-history-game-name' |\n 'cy-gaming-history-game-image' |\n 'cy-gaming-history-play-date' |\n 'cy-gaming-history-bet-value' |\n 'cy-gaming-history-winning-value' |\n 'cy-gaming-history-bankroll-value' |\n 'cy-gaming-history-free-play-winning' |\n 'cy-gaming-history-free-play-current-amount' |\n 'cy-gaming-history-amount-description' |\n 'cy-gaming-history-amount-value' |\n 'cy-gaming-history-round-id' |\n 'cy-migrated-gaming-history-round-id' |\n 'cy-gaming-history-session-id' |\n 'cy-gaming-history-participation-id' |\n 'cy-gaming-history-days-selector' |\n 'cy-gaming-history-big-win-message' |\n 'cy-gaming-history-loading-trigger' |\n 'cy-tipping-history-record' |\n 'cy-tipping-history-game-name' |\n 'cy-tipping-history-game-image' |\n 'cy-tipping-history-tip-id' |\n 'cy-tipping-history-play-date' |\n 'cy-tipping-history-tip-value' |\n 'cy-tipping-history-bankroll-value' |\n 'cy-tipping-history-days-selector' |\n 'cy-tipping-history-loading-trigger' |\n 'cy-tipping-history-amount-description' |\n 'cy-tipping-history-amount-value' |\n 'cy-skip-intermediate-page' |\n 'cy-orbit-swiper' |\n 'cy-swiper-button-prev' |\n 'cy-swiper-button-next' |\n 'cy-uk-malta-reality-check-title' |\n 'cy-live-casino-grid' |\n 'cy-live-casino-grid-item' |\n 'cy-live-casino-grid-item-infobar-game-seats-count-text' |\n 'cy-live-casino-grid-item-title' |\n 'cy-live-casino-grid-item-bet-interval' |\n 'cy-live-casino-grid-item-infobar-draws' |\n 'cy-live-casino-grid-item-infobar-dealer-name' |\n 'cy-live-casino-grid-item-infobar-bet-behind' |\n 'cy-live-casino-widget-amount' |\n 'cy-live-casino-widget-description' |\n 'cy-live-casino-filter-buttons' |\n 'cy-history-free-play-message' |\n 'cy-user-menu' |\n 'cy-games-list-title' |\n 'cy-games-title-text' |\n 'cy-orbit-swiper-wrapper' |\n 'cy-orbit-swiper-games-list' |\n 'cy-see-all-link' |\n 'cy-recently-played' |\n 'cy-help-mobile-link' |\n 'cy-filter-link' |\n 'cy-open-filters-button' |\n 'cy-apply-filters-button' |\n 'cy-clear-filters-button' |\n 'cy-side-menu' |\n 'cy-mini-orbit-side-menu-open-button' |\n 'cy-right-drawer' |\n 'cy-overlay' |\n 'cy-registration-popup-content' |\n 'cy-vertical-games-list' |\n 'cy-vertical-games-list-close-btn' |\n 'cy-lang-switcher-back' |\n 'cy-language-switcher-dropdown' |\n 'cy-lang-switch-label' |\n 'cy-lang-switch-current-lang' |\n 'cy-toast-container' |\n 'cy-toast' |\n 'cy-modal-dialog' |\n 'cy-modal-dialog-header' |\n 'cy-modal-dialog-consumer-content' |\n 'cy-source-of-funds-open-chat-btn' |\n 'cy-language-switcher-button' |\n 'cy-cms-banner-container' |\n 'cy-temp-account-days-number' |\n 'cy-temp-account-message-body' |\n 'cy-omg-indicator' |\n 'cy-jackpot-widget' |\n 'cy-cgp-red-tiger-widget-click-detector' |\n 'cy-game-jackpot-amount' |\n 'cy-useful-links-section' |\n 'cy-useful-links-item' |\n 'cy-useful-links-li-item' |\n 'cy-useful-links-item-expandable' |\n 'cy-useful-links-item-side-text' |\n 'cy-cgp-about-area' |\n 'cy-lobby-grid-arena' |\n 'cy-link-to-offer-banner-box' |\n 'cy-link-to-offer-wheel-of-fortune' |\n 'cy-link-to-offer-dialog-close-box' |\n 'cy-open-membership-deeplink' |\n 'cy-open-cashier-deeplink' |\n 'cy-link-to-offer-icon-box'|\n 'cy-games-grid-container' |\n 'cy-orbit-swiper-streaming-tile' |\n 'cy-orbit-swiper-streaming-tile-footer' |\n 'cy-cross-brand-link' |\n 'cy-arenas-header-button' |\n 'cy-live-video-item' |\n 'cy-players-like-you' |\n 'cy-because-you-played' |\n 'cy-game-title' |\n 'cy-lists-intersection-observer-target' |\n 'cy-inactivity-timeout-select' |\n 'cy-about-session-balance-amount' |\n 'cy-about-help-link' |\n 'cy-filters-games-list' |\n 'cy-game-net-position-value' |\n 'cy-game-duration-value' |\n 'cy-deposit-widget' |\n 'cy-deposit-widget-init-params' |\n 'cy-payments-redirect-focus' |\n 'cy-uk-tsr-main-text-box' |\n 'cy-withdraw-button' |\n 'cy-cashout-widget' |\n 'cy-cashout-widget-init-params' |\n 'cy-top-picks-list' |\n 'cy-arenas-header' |\n 'cy-logo' |\n 'cy-main-wrapper' |\n 'cy-clock-component' |\n 'cy-game-navbar-free-play-indicator' |\n 'cy-free-play-vouchers-container' |\n 'cy-header-menu-gift-button' |\n 'cy-overlay-content' |\n 'cy-user-menu-user-details' |\n 'cy-state-select-approve-button' |\n 'cy-wrong-app-message' |\n 'cy-swiper-buttons' |\n 'cy-burnout-animation-container' |\n 'cy-burnout-gift-button' |\n 'cy-tooltip-container' |\n 'cy-logo-container' |\n 'cy-navbar-container' |\n 'cy-user-profile-messages-indicator' |\n 'cy-free-play-indicator-dot' |\n 'cy-help-widget-app' |\n 'cy-header-help-button' |\n 'cy-form-post-form' |\n 'cy-free-to-play-click-box' |\n 'cy-modal-dialog-link' |\n 'cy-italy-other-limit-radio' |\n 'cy-standard-limit-radio' |\n 'cy-jackpot-widget-collecting-amount' |\n 'cy-jackpot-widget-amount'|\n 'cy-transaction-history-init-params' |\n 'cy-transaction-history-widget' |\n 'cy-netherlands-ksa-button' |\n 'cy-vouchers-previous-button' |\n 'cy-vouchers-next-button' |\n 'cy-voucher-card-face' |\n 'cy-voucher-card-back' |\n 'cy-game-restriction-geo-location-primary-button' |\n 'cy-game-restriction-geo-location-secondary-button' |\n 'cy-header-control-center-button' |\n 'cy-control-center-mini-app' |\n 'cy-control-center-mini-widget-init-params' |\n 'cy-control-center-full-app' |\n 'cy-control-center-full-title' |\n 'cy-control-center-full-widget-init-params' |\n 'cy-header-state-selector-button' |\n 'cy-state-select-dropdown' |\n 'cy-state-select-other-button' |\n 'cy-login-popup-approve-button' |\n 'cy-login-modal-content' |\n 'cy-login-popup-total-stakes' |\n 'cy-login-popup-net-position' |\n 'cy-advanced-filters' |\n 'cy-applied-advanced-filters-indicator' |\n 'cy-applied-advanced-filter-name' |\n 'cy-remove-advanced-filter-x-button' |\n 'cy-close-advanced-filters-x-button' |\n 'cy-mobile-header-search-button' |\n 'cy-daily-deal-box' |\n 'cy-hybrid-embedded-nav-menu' |\n 'cy-hybrid-embedded-nav-menu-list' |\n 'cy-bottom-navbar-menu-item' |\n 'cy-free-play-on-boarding-tooltip' |\n 'cy-control-center-on-boarding-tooltip' |\n 'cy-my-account-external-link-container' |\n 'cy-registration-external-link-container' |\n 'cy-omg-external-link-container' |\n 'cy-forgot-password-external-link-container' |\n 'cy-forgot-username-external-link-container' |\n 'cy-deposit-pending-action-external-link-container' |\n 'cy-transaction-history-pending-action-external-link-container' |\n 'cy-pending-play-external-link-container' |\n 'cy-pending-login-external-link-container' |\n 'cy-rich-external-link-container' |\n 'cy-upload-documents-external-link-container' |\n 'cy-cross-brand-list' |\n 'cy-onboarding-tour' |\n 'cy-biometric-login-toggle' |\n 'cy-game-number-badge' |\n 'cy-search-results-number' |\n 'cy-search-title-text' |\n 'cy-useful-links-sub-items-list' |\n 'cy-useful-links-subitem' |\n 'cy-games-filter-category' |\n 'cy-game-filter-item' |\n 'cy-registration-widget' |\n 'cy-tsr-session-balance-amount' |\n 'cy-tsr-wagered-amount' |\n 'cy-dk-secondary-rg-icon' |\n 'cy-gambling-session-profit-loss' |\n 'cy-gambling-session-total-bets' |\n 'cy-gambling-session-duration' |\n 'cy-last-bet-date' |\n 'cy-game-footer-bar' |\n 'cy-save-games-widget' |\n 'cy-save-games-widget-header' |\n 'cy-vertical-list-game' |\n 'cy-open-session-records' |\n 'cy-open-session-record' |\n 'cy-open-session-record-header' |\n 'cy-open-session-record-session-id' |\n 'cy-open-session-record-game-name' |\n 'cy-open-session-record-content' |\n 'cy-open-session-fields-grid' |\n 'cy-open-session-play-button' |\n 'cy-video-slides-onboarding-overlay' |\n 'cy-video-slides-onboarding-explorer' |\n 'cy-video-slides-arena-swiper' |\n 'cy-video-slides-search-suggestions-container' |\n 'cy-video-slides-filters-container' |\n 'cy-video-slides-filters-preview' |\n 'cy-video-slides-filters-explore-button'|\n 'cy-video-slide-game-title-footer';\n\n\n\nexport function CyClass(className: CyCssClass): string {\n return className.toString();\n}\n\nexport function CySelector(className: CyCssClass): string {\n return '.' + className.toString();\n}\n\nexport function CySelectors(...classNames: CyCssClass[]): string {\n return classNames.map(clsName => '.' + clsName).join(' ');\n}\n","export enum GameChildishIconMode { \n UseDefaultIcon,\n UseNonChildishIcon,\n UseLessNonChildishIcon,\n PreferNonChildishIcon,\n PreferLessNonChildishIcon\n}\n","import {TimeSpan} from \"@sparkware/app-utils\";\n\nexport enum TSR_TYPE {\n SESSION_TIMER,\n GAME_TIMER\n}\n\nexport type ITimeSpentReminderOptions = ISessionTimeSpentReminderComponentProps | IGameTimeSpentReminderComponentProps;\n\nexport interface ITimeSpentReminderComponentBaseProps {\n playingTime: TimeSpan;\n}\n\ninterface ISessionTimeSpentReminderComponentProps extends ITimeSpentReminderComponentBaseProps {\n timerType: TSR_TYPE.SESSION_TIMER;\n}\n\ninterface IGameTimeSpentReminderComponentProps extends ITimeSpentReminderComponentBaseProps {\n timerType: TSR_TYPE.GAME_TIMER;\n onStopReminders: () => void;\n}\n\nexport interface ITimeSpentReminderWithBalanceComponentProps extends ITimeSpentReminderComponentBaseProps {\n totalNetLoss: number;\n isInGame: boolean;\n amountWagered?: number; // only for Malta currently\n subtitle?: string; // only for Malta currently\n}","import {Check} from \"@sparkware/app-utils\";\n\nfunction hexToDec(h: string) {\n return parseInt(h, 16);\n}\n\nfunction decToHex(n: number) {\n let h = n.toString(16);\n if (h.length === 1) {\n return '0' + h;\n }\n return h;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\n// https://css-tricks.com/converting-color-spaces-in-javascript/\nexport function rgbToHsl(r: number, g: number, b: number) {\n // Make r, g, and b fractions of 1\n r = r / 255;\n g = g / 255;\n b = b / 255;\n\n // Find greatest and smallest channel values\n let cmin = Math.min(r,g,b),\n cmax = Math.max(r,g,b),\n delta = cmax - cmin,\n h = 0,\n s = 0,\n l = 0;\n \n // Calculate hue\n // No difference\n if (delta === 0)\n h = 0;\n // Red is max\n else if (cmax === r)\n h = ((g - b) / delta) % 6;\n // Green is max\n else if (cmax === g)\n h = (b - r) / delta + 2;\n // Blue is max\n else\n h = (r - g) / delta + 4;\n\n h = Math.round(h * 60);\n\n // Make negative hues positive behind 360°\n if (h < 0)\n h += 360;\n \n // Calculate lightness\n l = (cmax + cmin) / 2;\n\n // Calculate saturation\n s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n \n // Multiply l and s by 100\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n\n // return \"hsl(\" + h + \",\" + s + \"%,\" + l + \"%)\";\n return {\n hue: h,\n saturation: s,\n lightness: l\n };\n}\n\nexport function hslToRgb(h: number, s: number, l: number) {\n // Must be fractions of 1\n s /= 100;\n l /= 100;\n\n let c = (1 - Math.abs(2 * l - 1)) * s,\n x = c * (1 - Math.abs((h / 60) % 2 - 1)),\n m = l - c/2,\n r = 0,\n g = 0,\n b = 0;\n \n if (0 <= h && h < 60) {\n r = c; g = x; b = 0; \n } else if (60 <= h && h < 120) {\n r = x; g = c; b = 0;\n } else if (120 <= h && h < 180) {\n r = 0; g = c; b = x;\n } else if (180 <= h && h < 240) {\n r = 0; g = x; b = c;\n } else if (240 <= h && h < 300) {\n r = x; g = 0; b = c;\n } else if (300 <= h && h < 360) {\n r = c; g = 0; b = x;\n }\n r = Math.round((r + m) * 255);\n g = Math.round((g + m) * 255);\n b = Math.round((b + m) * 255);\n return {\n red: r,\n green: g,\n blue: b\n };\n}\n\nexport class Color {\n public readonly red: number;\n public readonly gre: number;\n public readonly blu: number;\n public readonly opa: number;\n\n static fromHex(hex: string, opacity?: number) {\n if (hex === \"transparent\") {\n return Color.transparent();\n }\n /**\n * A valid hex can be formed from 3, 4, 6 or 8 characters from 0 to F, case insensitive.\n * The long form (8 characters also contains opacity), 00 (numeric 0) is fully transparent, FF (numeric 255) is fully opaque\n * Short format hex, 3 characters for example #4A9 is the short form for #44AA99\n * Short format hexa, 4 characters for example #4A9B is the short form for #44AA99BB\n */\n if (!/^#?(([A-Fa-f0-9]{3}){1,2}|(([A-Fa-f0-9]{4}){1,2}))$/.test(hex)) {\n throw new Error('Bad color Hex code');\n }\n if (hex[0] === \"#\") hex = hex.substring(1);\n let c: string[] = hex.split('');\n if (c.length === 3) {\n c = [c[0], c[0], c[1], c[1], c[2], c[2]];\n }\n if (c.length === 4) {\n c = [c[0], c[0], c[1], c[1], c[2], c[2], c[3], c[3]];\n }\n const red = hexToDec('' + c[0] + c[1]);\n const gre = hexToDec('' + c[2] + c[3]);\n const blu = hexToDec('' + c[4] + c[5]);\n const opa255 = c.length === 8 ? hexToDec('' + c[6] + c[7]) : 255;\n const opa = (!Check.isNullOrUndefined(opacity)) ? opacity : (Math.round(10000 * opa255 / 255) / 10000);\n return new Color(red, gre, blu, opa);\n }\n\n static transparent() {\n return new Color(127, 127, 127, 0);\n }\n\n constructor(r: number, g: number, b: number, o: number = 1) {\n this.red = clamp(r, 0, 255);\n this.gre = clamp(g, 0, 255);\n this.blu = clamp(b, 0, 255);\n this.opa = clamp(o, 0, 1);\n }\n\n rgb() {\n return 'rgba(' + [this.red, this.gre, this.blu].join(', ') + ')';\n }\n\n rgba() {\n return 'rgba(' + [this.red, this.gre, this.blu, this.opa].join(', ') + ')';\n }\n\n hex(withHashtag = true) {\n return (withHashtag ? '#' : '') + decToHex(this.red) + decToHex(this.gre) + decToHex(this.blu);\n }\n\n hexa(withHashtag = true) {\n return (withHashtag ? '#' : '') + decToHex(this.red) + decToHex(this.gre) + decToHex(this.blu) + decToHex(Math.round(this.opa * 255));\n }\n\n /**\n * I am computing the distance between 2 colors using a simple Euclidian distance in RGB space even if RGB is not perceptually uniform,\n * because I only want to see how dark or how light a color is, to determine if I can lighten or darken it for the hover effect.\n * https://colorjs.io/docs/color-difference.html\n * In RGB space, the greatest distance possible is 441.6729559300637 from white (255, 255, 255) to black (0, 0, 0).\n * \n * So, for the hover effect, if the button is white, I cannot lighen the color white so I will darken it (making it a light gray)\n * \n * Another way of determining how bright or dark a color is, is to convert rgb to hsl space and use lightness\n * which we know is a percentual value (from 0 to 100%)\n * \n * Usage:\n * To compute the distance from black: color.distanceFrom(new Color(0, 0, 0))\n * To compute the distance from white: color.distanceFrom(new Color(255, 255, 255))\n */\n distanceFrom(c: Color) {\n return Math.sqrt(Math.pow(c.red - this.red, 2) + Math.pow(c.gre - this.gre, 2) + Math.pow(c.blu - this.blu, 2));\n }\n\n private adjustColorLightness(amount: number) {\n if (this.opa === 0) {\n if (amount > 0) {\n return new Color(255, 255, 255, amount / 100);\n }\n if (amount < 0) {\n return new Color(0, 0, 0, amount / 100);\n }\n }\n // return new Color(this.red + amount, this.gre + amount, this.blu + amount);\n const hslData = rgbToHsl(this.red, this.gre, this.blu);\n hslData.lightness = clamp(hslData.lightness + amount, 0, 100);\n const rgbData = hslToRgb(hslData.hue, hslData.saturation, hslData.lightness);\n return new Color(rgbData.red, rgbData.green, rgbData.blue, this.opa);\n }\n\n lighten(amount: number) {\n return this.adjustColorLightness(Math.abs(amount));\n }\n\n darken(amount: number) {\n return this.adjustColorLightness(-Math.abs(amount));\n }\n\n private adjustColorSaturation(amount: number) {\n const hslData = rgbToHsl(this.red, this.gre, this.blu);\n hslData.saturation = clamp(hslData.saturation + amount, 0, 100);\n const rgbData = hslToRgb(hslData.hue, hslData.saturation, hslData.lightness);\n return new Color(rgbData.red, rgbData.green, rgbData.blue, this.opa);\n }\n\n saturate(amount: number) {\n return this.adjustColorSaturation(Math.abs(amount));\n }\n\n desaturate(amount: number) {\n return this.adjustColorSaturation(-Math.abs(amount));\n }\n\n private adjustTransparency(amount: number) {\n const opacity = clamp(this.opa + amount, 0, 1);\n return new Color(this.red, this.gre, this.blu, opacity);\n }\n\n fadeIn(amount: number) {\n return this.adjustTransparency(Math.abs(amount));\n }\n \n fadeOut(amount: number) {\n return this.adjustTransparency(-Math.abs(amount));\n }\n}","import { TimeSpan } from \"@sparkware/app-utils\";\n\nexport interface ImagePreloadPromiseResponse {\n error: string | null;\n backgroundUrl: string;\n imageObj: HTMLImageElement;\n}\n\nexport function imagePreload(src: string, timeout?: TimeSpan) {\n timeout = timeout || TimeSpan.fromMinutes(2);\n let timeoutRef: any = null;\n return new Promise((res, rej) => {\n let image = new Image();\n image.onload = () => {\n clearTimeout(timeoutRef);\n res({error: null, backgroundUrl: src, imageObj: image});\n };\n image.onerror = ()=> {\n clearTimeout(timeoutRef);\n rej({\n error: 'Could not load image on path => ' + src,\n backgroundUrl: src\n });\n };\n timeoutRef = setTimeout(() => {\n rej({\n error: 'Timeout. Could not load image on path => ' + src,\n backgroundUrl: src\n });\n }, timeout.totalMilliseconds);\n image.src = src;\n });\n}\n\nexport function imagePreloadWithDefault(src: string | null | undefined, defaultPath: string) {\n if (src) {\n return imagePreload(src).catch(() => {\n return imagePreload(defaultPath);\n });\n } else {\n return imagePreload(defaultPath);\n }\n}\n","import {\n CasinoStartupConfigurations,\n OrbitStartupConfigurations\n} from '../config-interfaces/casino-startup.configurations';\nimport {ApplicationStartupConfigurations} from '../config-interfaces/application-startup.configurations';\nimport {B2CStartupConfigurations} from '../config-interfaces/b2c-startup.configurations';\nimport {LauncherOverridesReader} from '../launcher-overrides-reader/launcher-overrides-reader';\nimport {LauncherOverrides} from '../config-interfaces/launcher-overrides';\nimport {IWindowService} from '../../services/window/window.service.interface';\nimport {IHttpService} from '../../services/http/http.service.interface';\nimport {ILoggerService} from '../../services/logger/logger.service.interface';\nimport {mockApplicationStartupConfigs} from '../../../utils/automation-helpers';\nimport {ALL_CONFIGS_KEY} from \"../../../app-consts\";\nimport {IConfigurationData} from \"../../services/configurations/configuration-data.interface\";\n\nconst overrideJson = require('json-override');\n\nexport class ApplicationStartupConfigurationsReader {\n constructor(private _defaultOrbitConfigurations: any,\n private _window: IWindowService,\n private _launcherOverridesReader: LauncherOverridesReader,\n private _http: IHttpService,\n private _logger: ILoggerService) {\n\n\n }\n\n private _launcherOverrides: LauncherOverrides | null;\n private _b2cConfigurations: B2CStartupConfigurations;\n private _skinFullName: string;\n\n async readApplicationConfigurations(): Promise {\n this._launcherOverrides = this._launcherOverridesReader.getOverrides();\n this._b2cConfigurations = this._getB2CConfigurations();\n\n let casinoConfigurations = await this._getCasinoConfigurations();\n this._skinFullName = (`${casinoConfigurations.skin}_${casinoConfigurations.skinOverride}`).toLowerCase();\n const configs: ApplicationStartupConfigurations = {\n configurationPath: this._getConfigPath(casinoConfigurations),\n orbitServer: casinoConfigurations.sdk.config.ExtraProperties.paths.server,\n skin: casinoConfigurations.skin,\n skinOverride: casinoConfigurations.skinOverride,\n skinFullName: this._skinFullName,\n country: casinoConfigurations.country,\n orbit: casinoConfigurations.orbit,\n sdk: casinoConfigurations.sdk,\n admin: casinoConfigurations.adminConfig,\n b2c: this._b2cConfigurations,\n userSelectedState: casinoConfigurations.userSelectedState,\n useCountryAsState: casinoConfigurations.useCountryAsState\n };\n\n return mockApplicationStartupConfigs(configs);\n }\n\n private _getConfigPath(casinoConfigurations: CasinoStartupConfigurations): string {\n\n let server = casinoConfigurations.sdk.config.ExtraProperties.paths.server;\n if(!server.endsWith('/')) {\n server += '/';\n }\n\n return server + `configurations/${this._skinFullName}`;\n }\n\n\n private async _getCasinoConfigurations(): Promise {\n let casinoConfigurations: CasinoStartupConfigurations = this._window.getGlobalProperty(ALL_CONFIGS_KEY);\n const skin = casinoConfigurations.skin.toLowerCase();\n const skinOverride = casinoConfigurations.skinOverride.toLowerCase();\n const lang = this._b2cConfigurations.language.iso3.toLowerCase();\n\n casinoConfigurations.orbit.config = await this._loadOrbitConfigFile(skin, skinOverride);\n casinoConfigurations.orbit.lang = await this._tryLoadOrbitLanguageOverrideFile(skin, skinOverride, lang);\n casinoConfigurations = await this._applyOrbitConfigsOverrides(casinoConfigurations);\n casinoConfigurations = this._applySdkConfigOverrides(casinoConfigurations);\n return casinoConfigurations;\n\n }\n\n private async _loadOrbitConfigFile(skin: string, skinOverride: string): Promise {\n try {\n const configModule = await import(`../../../settings/configs/${skin}/overrides/${skinOverride}/config`);\n\n return configModule.default;\n } catch (err) {\n this._logger.error(`Failed to load orbit configuration file for skin ${skin}/${skinOverride}`, err);\n throw err;\n }\n\n }\n\n private async _tryLoadOrbitLanguageOverrideFile(skin: string, skinOverride: string, languageIso3: string): Promise {\n try {\n const langOverrideModule = await import(`../../../settings/configs/${skin}/overrides/${skinOverride}/languages/${languageIso3}`);\n return langOverrideModule.default;\n } catch (err) {\n this._logger.debug(`There is no override file for language ${languageIso3} in skin ${skin}/${skinOverride}`, err);\n }\n\n }\n\n\n async _applyOrbitConfigsOverrides(casinoConfigurations: CasinoStartupConfigurations): Promise {\n casinoConfigurations.orbit.config = overrideJson(this._defaultOrbitConfigurations, casinoConfigurations.orbit.config);\n if(this._launcherOverrides && this._launcherOverrides.orbit && this._launcherOverrides.orbit.configs) {\n overrideJson(casinoConfigurations.orbit.config, this._launcherOverrides.orbit.configs);\n }\n return casinoConfigurations;\n }\n\n\n\n private _applySdkConfigOverrides(casinoConfigurations: CasinoStartupConfigurations): CasinoStartupConfigurations {\n\n if(!(casinoConfigurations.sdk && casinoConfigurations.sdk.config)) { // if SDK configs are not here it probably means the app is loaded from a fallback file\n return casinoConfigurations;\n }\n\n overrideJson(casinoConfigurations, {\n sdk: {\n config: (this._launcherOverrides && this._launcherOverrides.sdk) || {}\n }\n });\n\n overrideJson(casinoConfigurations, {\n sdk: {\n config: {\n Language: {\n iso3: this._b2cConfigurations.language.iso3,\n iso2: this._b2cConfigurations.language.iso2\n }\n }\n }\n });\n\n let orbitLang = casinoConfigurations.orbit.lang;\n if(orbitLang && orbitLang.text && orbitLang.text.SDKTexts) {\n overrideJson(casinoConfigurations.sdk.config.Language.text, orbitLang.text.SDKTexts);\n }\n\n return casinoConfigurations;\n }\n\n\n\n\n private _applyB2COverrides(b2cConfigs: B2CStartupConfigurations): B2CStartupConfigurations {\n\n if(this._launcherOverrides?.orbit) {\n let languageIso3Override = this._launcherOverrides.orbit.language;\n let languageIso2Override = this._launcherOverrides.orbit.iso2;\n\n if(languageIso3Override) {\n b2cConfigs.language = {...b2cConfigs.language, iso3: languageIso3Override};\n }\n\n if(languageIso2Override) {\n b2cConfigs.language = {...b2cConfigs.language, iso2: languageIso2Override};\n }\n\n let publicationIdOverride = this._launcherOverrides.orbit.publicationID;\n if(publicationIdOverride) {\n b2cConfigs.publicationId = publicationIdOverride;\n }\n }\n\n\n let segmentsOverrides = this._launcherOverrides?.webData?.segments;\n\n if(segmentsOverrides) {\n b2cConfigs.segments = {...b2cConfigs.segments, ...segmentsOverrides};\n }\n\n return b2cConfigs;\n }\n\n private _getB2CConfigurations() : B2CStartupConfigurations {\n let b2cConfigs = this._window.getGlobalProperty('webData') || {} as B2CStartupConfigurations;\n\n b2cConfigs.language = b2cConfigs.language || {};\n b2cConfigs.language.iso3 = b2cConfigs.language.iso3 || 'eng';\n b2cConfigs.language.iso2 = b2cConfigs.language.iso2 || 'en';\n\n\n if(this._launcherOverrides) {\n return this._applyB2COverrides(b2cConfigs);\n }\n\n return b2cConfigs;\n }\n\n\n\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","import ISdkHooksProvider from './sdk-hooks-provider.interface';\nimport {MINI_CIP_BASE_ROUTE, MINI_CIS_BASE_ROUTE} from '../../services/mini-orbit/mini-orbit-consts';\nimport {Uri} from '../../services/location/uri/uri';\nimport {IServiceFactoryExtended} from '../../services/service-factory-extended.interface';\nimport {IOrbitComponentToSdkAdapterService} from '../../../common/interfaces/orbit-component-to-sdk-adapter/orbit-component-to-sdk-adapter.service.interface';\nimport {ICashierService} from \"../../../common/interfaces/cashier.service.interface\";\nimport {IGameRunnerProxy} from \"../../../common/interfaces/game-runner-proxy.interface\";\nimport {ICasinofiedAnalyticsService} from \"../../../common/interfaces/casinofied-analytics-proxy.interface\";\nimport {IExternalLinksProxy} from \"../../../common/interfaces/external-links-proxy.interface\";\nimport IPlayerMigration from \"../../../common/interfaces/player-migration.interface\";\nimport {IToasterProxy} from '../../../common/interfaces/toaster_proxy_service_interface';\nimport {ILinksNavigationService} from \"../../services/links-navigation/links-navigation.service.interface\";\nimport {ISpinnerService} from \"../../../common/interfaces/spinner.service.interface\";\nimport {IMarketingService} from \"../../services/marketing/marketing.service.interface\";\nimport {IRegulationProxyService} from \"../../services/regulation/regulation-proxy.service.interface\";\n\nexport class SdkHooksProvider implements ISdkHooksProvider {\n services: IServiceFactoryExtended;\n\n redirectProxy(url: string): void {\n if (!url) {\n return;\n }\n\n if (this.services) {\n //SDK is using this function to do redirects,\n //but we must do redirect only if the URL is an absolut URL.\n //If is a relative one like /gaming_history/ then we just need to do local routing\n if (this.services.window.isAbsolutUrl(url)) {\n this.services.location.redirect(url);\n } else {\n this.services.location.push(url);\n }\n } else {\n window.location.href = url;\n }\n };\n\n openInNewWindowHook(): (url: string) => void | null {\n if (this.services?.miniOrbit.isEnabled) {\n return this.services.miniOrbit.openUrl;\n } else {\n return null;\n }\n };\n\n isMiniCip(): boolean {\n return this._isMiniOrbit(MINI_CIP_BASE_ROUTE);\n }\n\n isMiniCis(): boolean {\n return this._isMiniOrbit(MINI_CIS_BASE_ROUTE);\n }\n\n private _isMiniOrbit(basePath: string): boolean {\n if (!this.services) {\n return false;\n }\n\n const uri = new Uri(new URL(window.location.href));\n return uri.pathName.getBase().toString().toLowerCase() === basePath;\n }\n\n getGameTypesMappingForSdk(): Record {\n if (!this.services) {\n return null;\n }\n\n const mapperData: Record = {};\n this.services?.configuration?.usedGameTypesBySite?.forEach(gameType => {\n mapperData[gameType] = {};\n });\n\n return mapperData;\n };\n\n async getHeaderRegulationDataElement(): Promise {\n return (await this.services?.header)?.getHeaderRegulationDataElement();\n }\n\n resolveGameImagePath(imageFilePath: string): string {\n return this.services?.configuration?.resolveGameImagePath(imageFilePath);\n }\n\n getOrbitComponentToSdkAdapter(): IOrbitComponentToSdkAdapterService {\n return (this.services.orbitComponentInsideSdkProvider as any) as IOrbitComponentToSdkAdapterService;\n }\n\n getCashierService(): ICashierService {\n return this.services.cashier;\n }\n\n async getGameRunnerService(): Promise {\n const gameRunner = await this.services.gameRunner;\n return (gameRunner as any) as IGameRunnerProxy;\n }\n\n getCasinofiedAnalyticsService(): ICasinofiedAnalyticsService {\n return this.services.casinofiedAnalytics;\n }\n\n getSpinnerService(): ISpinnerService {\n return this.services.spinner;\n }\n\n\n getPlayerMigrationService(): IPlayerMigration {\n return this.services.playerMigration;\n }\n\n getExternalLinksProxyService(): Promise {\n return this.services.externalLinks;\n }\n\n getToasterProxyService(): IToasterProxy {\n return this.services.toaster;\n }\n\n getLinksNavigationService(): ILinksNavigationService {\n return this.services.linksNavigation;\n }\n\n getMarketingService(): Promise {\n return this.services.marketing;\n }\n\n getRegulationServiceProxy(): IRegulationProxyService {\n return (this.services.regulation as any) as IRegulationProxyService;\n }\n}","import {IConfigurationEvaluationContext} from '../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IPropertyEvaluator} from '../property-evaluator/property-evaluator.interface';\nimport {Check} from '@sparkware/app-utils';\n\nexport class PropertiesEvaluator {\n constructor(private _propertiesEvaluators: IPropertyEvaluator[]) {\n }\n\n private _config: unknown = null;\n\n evaluate(context: IConfigurationEvaluationContext): any {\n if(Check.isNullOrUndefined(this._config)) {\n let config = {};\n\n this._propertiesEvaluators.forEach(propEvaluator => {\n Object.defineProperty(config, propEvaluator.propertyName, {\n get: () => propEvaluator.evaluate(context),\n set: () => {\n /*TODO - this setter is here because since we upgrade to mobx 6 it throws an error in underscore.ts in mergeDeep function which is called in config_service getConfig. We won't need this when all SDK code will be moved to orbit*/\n },\n configurable: false,\n enumerable: true\n });\n });\n\n this._config = config;\n }\n\n return this._config;\n }\n\n static fromRoot(rootObject: object, context: IConfigurationEvaluationContext): PropertiesEvaluator {\n let rootProps = Object.keys(rootObject).map(propName => context.createPropertyEvaluator(propName, rootObject));\n return new PropertiesEvaluator(rootProps);\n }\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {IValueEvaluator} from '../../value-evaluators/value-evaluator.interface/value-evaluator.interface';\nimport {IStatementEvaluator} from '../statement-evaluator/statement-evaluator.interface';\n\nexport class StatementsEvaluator implements IValueEvaluator {\n constructor(private _statementsEvaluators: IStatementEvaluator[], private _defaultValue: any) {\n }\n\n get defaultValue() {\n return this._defaultValue;\n }\n\n get evaluators(): IStatementEvaluator[] {\n return this._statementsEvaluators\n }\n\n evaluate(context: IConfigurationEvaluationContext): any {\n for(let i = 0, len = this.evaluators.length; i < len; i++) {\n let statementEvaluator = this.evaluators[i];\n let evaluatedValue = statementEvaluator.evaluate(context);\n if(!Check.isNullOrUndefined(evaluatedValue)) {\n return this._applyValueTransformation(context, evaluatedValue);\n }\n }\n\n return this._applyValueTransformation(context, this.defaultValue);\n }\n\n private _applyValueTransformation(context: IConfigurationEvaluationContext, value) {\n return context.parsePropertyValue(value).evaluate(context)\n }\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {PropertiesEvaluator} from '../../properties-evaluator/properties-evaluator';\nimport {IPropertyEvaluator} from '../../property-evaluator/property-evaluator.interface';\nimport {IValueEvaluator} from '../value-evaluator.interface/value-evaluator.interface';\nimport {Check} from '@sparkware/app-utils';\n\nexport class ObjectEvaluator implements IValueEvaluator {\n constructor(private _object: object) {\n }\n\n get obj() {\n return this._object;\n }\n\n private _evaluatedValue: unknown = undefined;\n\n evaluate(context: IConfigurationEvaluationContext): any {\n if(Check.isUndefined(this._evaluatedValue)) {\n let properties: IPropertyEvaluator[] = [];\n\n Object.keys(this.obj).forEach(propertyName => {\n properties.push(context.createPropertyEvaluator(propertyName, this.obj));\n });\n\n let configEvaluator = new PropertiesEvaluator(properties);\n this._evaluatedValue = configEvaluator.evaluate(context);\n }\n\n return this._evaluatedValue;\n }\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IValueEvaluator} from '../value-evaluator.interface/value-evaluator.interface';\n\nexport class ArrayEvaluator implements IValueEvaluator {\n constructor(private _itemsEvaluators: IValueEvaluator[]) {\n }\n\n get evaluators(): IValueEvaluator[] {\n return this._itemsEvaluators;\n }\n\n evaluate(context: IConfigurationEvaluationContext): any {\n return this.evaluators.map((item, index) => item.evaluate(context.createPropertyContext(index.toString())));\n }\n\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IValueEvaluator} from '../value-evaluator.interface/value-evaluator.interface';\nimport {Check} from '@sparkware/app-utils';\n\nexport class SimpleValueEvaluator implements IValueEvaluator {\n constructor(private _value: any) {\n }\n\n get value(): any {\n return this._value;\n }\n\n private _evaluatedValue = undefined;\n\n evaluate(context: IConfigurationEvaluationContext): any {\n if(Check.isUndefined(this._evaluatedValue)) {\n this._evaluatedValue = context.applyValueTransformation(context.getCurrentPropertyPath(), this.value);\n }\n return this._evaluatedValue;\n }\n}\n\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IStatementEvaluator} from './statement-evaluator.interface';\n\n\n\nexport class StatementEvaluator implements IStatementEvaluator {\n constructor(private _statementDefinition: any) {\n }\n\n get definition(): any {\n return this._statementDefinition;\n }\n\n evaluate(context: IConfigurationEvaluationContext): any {\n let rules = (this.definition.rules || []).map(rule => context.createSegmentationRule(rule));\n let logicalOperator = context.createLogicalOperator(this.definition.condition || 'AND', rules);\n if(logicalOperator.evaluate(context)) {\n return this.definition.value;\n }\n return null;\n }\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {ILogicalOperator} from './logical-operator.interface/logical-operator.interface';\nimport {ISegmentationRule} from '../segmentation-rule/segmentation-rule.interface';\n\nexport abstract class BaseLogicalOperator implements ILogicalOperator {\n\n constructor(private _rules: ISegmentationRule[]) {\n\n }\n\n get rules(): ISegmentationRule[] {\n return this._rules;\n }\n\n abstract evaluate(context: IConfigurationEvaluationContext): boolean;\n}\n","import {BaseLogicalOperator} from '../base-logical-operator';\nimport {IConfigurationEvaluationContext} from '../../../configuration-evaluation-context/configuration-evaluation-context.interface';\n\nexport class OrLogicalOperator extends BaseLogicalOperator {\n\n evaluate(context: IConfigurationEvaluationContext): boolean {\n for(let i = 0, len = this.rules.length; i < len; i++) {\n let rule = this.rules[i];\n if(rule.evaluate(context)) {\n return true;\n }\n }\n\n return false;\n }\n}\n","import {BaseLogicalOperator} from '../base-logical-operator';\nimport {IConfigurationEvaluationContext} from '../../../configuration-evaluation-context/configuration-evaluation-context.interface';\n\nexport class AndLogicalOperator extends BaseLogicalOperator {\n\n evaluate(context: IConfigurationEvaluationContext): boolean {\n if(this.rules.length === 0) {\n return false;\n }\n\n for(let i = 0, len = this.rules.length; i < len; i++) {\n let rule = this.rules[i];\n if(!rule.evaluate(context)) {\n return false;\n }\n }\n\n return true;\n }\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {ISegmentationRule} from './segmentation-rule.interface';\nimport {Check} from '@sparkware/app-utils';\n\n\nexport class SegmentationRule implements ISegmentationRule {\n constructor(private _ruleDefinition: any) {\n }\n\n get definition(): any {\n return this._ruleDefinition;\n }\n evaluate(context: IConfigurationEvaluationContext): boolean {\n if(Check.isArray(this.definition.rules)) {\n let innerRules = this.definition.rules.map(rule => context.createSegmentationRule(rule));\n let logicalOperator = context.createLogicalOperator(this.definition.condition || 'AND', innerRules);\n return logicalOperator.evaluate(context);\n } else {\n let operator = context.createComparisonOperator(this.definition.operator);\n let segmentValue = context.getSegmentValue(this.definition.id);\n return operator.compare(segmentValue, this.definition.value)\n }\n\n }\n}\n\n\n\n\n","import {IComparisonOperator} from './comparison-operator.interface/comparison-operator.interface';\n\nexport abstract class BaseComparisonOperator implements IComparisonOperator {\n\n abstract compare(value1: unknown, value2: unknown): boolean;\n}\n","import {BaseComparisonOperator} from '../base-comparison-operator';\n\nexport class EqualOperator extends BaseComparisonOperator {\n compare(value1: unknown, value2: unknown): boolean {\n if(this._isBooleanAsString(value1) || this._isBooleanAsString(value2)) {\n return value1?.toString() === value2?.toString();\n }\n // eslint-disable-next-line\n return value1 == value2;\n }\n\n private _isBooleanAsString(value: any) {\n if (value === 'true' || value === 'false') {\n return true;\n }\n\n return false;\n }\n}\n","import {BaseComparisonOperator} from '../base-comparison-operator';\nimport {EqualOperator} from '../equal-operator/equal-operator';\n\nexport class NotEqualOperator extends BaseComparisonOperator {\n compare(value1: unknown, value2: unknown) {\n return !(new EqualOperator().compare(value1, value2));\n }\n}\n","import {IConfigurationEvaluationContext} from '../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IComparisonOperator} from '../statements/comparison-operators/comparison-operator.interface/comparison-operator.interface';\nimport {ISegmentationRule} from '../statements/segmentation-rule/segmentation-rule.interface';\nimport {ILogicalOperator} from '../statements/logical-operators/logical-operator.interface/logical-operator.interface';\nimport {IStatementEvaluator} from '../statements/statement-evaluator/statement-evaluator.interface';\nimport {IValueEvaluator} from '../value-evaluators/value-evaluator.interface/value-evaluator.interface';\nimport {IPropertyEvaluator} from '../property-evaluator/property-evaluator.interface';\n\n\nexport class PropertyLevelContext implements IConfigurationEvaluationContext {\n constructor(private _originalContext: IConfigurationEvaluationContext, private _currentPropertyName) {\n\n }\n\n createComparisonOperator(operatorName: string): IComparisonOperator {\n return this._originalContext.createComparisonOperator(operatorName);\n }\n\n createLogicalOperator(logicalOperatorName: string, rules: ISegmentationRule[]): ILogicalOperator {\n return this._originalContext.createLogicalOperator(logicalOperatorName, rules);\n }\n\n createSegmentationRule(ruleDefinition: any): ISegmentationRule {\n return this._originalContext.createSegmentationRule(ruleDefinition);\n }\n\n createStatementEvaluator(statementDefinition: any): IStatementEvaluator {\n return this._originalContext.createStatementEvaluator(statementDefinition);\n }\n\n getSegmentValue(name: string): any {\n return this._originalContext.getSegmentValue(name);\n }\n\n parsePropertyValue(value: any): IValueEvaluator {\n return this._originalContext.parsePropertyValue(value);\n }\n\n\n getCurrentPropertyPath(): string {\n return this._originalContext.getCurrentPropertyPath() + '/' + this._currentPropertyName;\n }\n\n createPropertyContext(propertyName: string): IConfigurationEvaluationContext {\n return new PropertyLevelContext(this, propertyName);\n }\n\n applyValueTransformation(propertyPath: string, value: any): any {\n return this._originalContext.applyValueTransformation(propertyPath, value);\n }\n\n createPropertyEvaluator(propertyName: string, propertyOwner: object): IPropertyEvaluator {\n return this._originalContext.createPropertyEvaluator(propertyName, propertyOwner);\n }\n\n getLauncherGames(): number[] {\n return this._originalContext.getLauncherGames();\n }\n}\n","import {IConfigurationEvaluationContext} from '../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IPropertyEvaluator} from './property-evaluator.interface';\nimport {IValueEvaluator} from '../value-evaluators/value-evaluator.interface/value-evaluator.interface';\n\n\n\nexport class PropertyEvaluator implements IPropertyEvaluator {\n constructor(private _propertyName: string, private _valueEvaluator: IValueEvaluator) {\n\n }\n\n get propertyName(): string {\n return this._propertyName;\n }\n\n evaluate(context: IConfigurationEvaluationContext): any {\n\n let propertyContext = context.createPropertyContext(this.propertyName);\n\n try {\n return this._valueEvaluator.evaluate(propertyContext);\n } catch (err) {\n throw new Error(`Failed to evaluate property ${propertyContext.getCurrentPropertyPath()}; ${err}`);\n }\n\n }\n}\n","// BEWARE: In this file there are similar namings. Don't confuse them\n// TODO: Find better namings for interfaces and variables and eliminate implicit any's\ninterface IStatementsDefinition {\n defaultValue: unknown[];\n statements: unknown[];\n}\ninterface IStatementDefinition {\n condition: string;\n value: any,\n rules: unknown[]\n}\n\nexport function createStatementsDefinition(subLists: any): any {\n let statementsDefinition: IStatementsDefinition = {\n defaultValue: [],\n statements: []\n };\n\n if(!subLists) {\n return statementsDefinition;\n }\n\n subLists.forEach(sublist => {\n if (!sublist.Segment) {\n // the sublist with Segment null or undefined is considered to be the default value\n statementsDefinition.defaultValue = sublist.Games;\n } else {\n let statementDefinition: IStatementDefinition = {\n condition: \"AND\",\n value: sublist.Games,\n rules: []\n };\n\n sublist.Segment.forEach(segment => {\n statementDefinition.rules.push(_createStatementsRule(segment));\n });\n\n statementsDefinition.statements.push(statementDefinition);\n }\n });\n\n return statementsDefinition;\n}\n\nfunction _createStatementsRule(segment: any): any {\n return {\n id: segment.name,\n operator: \"=\",\n value:\n segment.value === 1 || segment.value === true || segment.value === \"true\"\n ? true\n : false // Admin sends 1 for true and 2 for false.\n };\n}\n","import { IPropertyEvaluator } from '../../property-evaluator/property-evaluator.interface';\nimport { IConfigurationEvaluationContext } from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport { createStatementsDefinition } from '../../../../../../app-react/services/configurations/create-statements-definition'\n\nexport class GamesIdPropertyEvaluator implements IPropertyEvaluator {\n constructor(private _owner: any, private _adminConfig: any) {\n\n }\n\n get owner(): any {\n return this._owner;\n }\n\n get adminConfig(): any {\n return this._adminConfig;\n }\n\n get propertyName(): string {\n return 'gamesId'\n }\n\n evaluate(context: IConfigurationEvaluationContext): any {\n let propertyContext = context.createPropertyContext(this.propertyName);\n\n let gamesAdminRefKey = this.owner.gamesAdminRefKey;\n\n //F TO DO - log if gamesAdminRefKey is missing\n\n let subLists = this.adminConfig && this.adminConfig.listsv2 && this.adminConfig.listsv2[gamesAdminRefKey];\n\n let gameTypes: number[] = [];\n if (!subLists) {\n //F TO DO - log if sub-lists is missing\n gameTypes = context.parsePropertyValue(this.owner[this.propertyName]).evaluate(propertyContext);\n } else {\n gameTypes = context.parsePropertyValue(createStatementsDefinition(subLists)).evaluate(propertyContext);\n }\n\n let launcherGames = context.getLauncherGames() || [];\n\n if (launcherGames.length === 0) {\n return gameTypes;\n }\n\n return [...launcherGames, ...gameTypes];\n }\n}\n","import {BaseComparisonOperator} from \"../base-comparison-operator\";\n\nexport class IsFalsyOperator extends BaseComparisonOperator {\n compare(value1: unknown, value2: unknown): boolean {\n return !((value1 || '').toString() === (value2 || '').toString());\n }\n}\n","import {BaseComparisonOperator} from '../base-comparison-operator';\nimport {Check} from \"@sparkware/app-utils\";\nimport {ILoggerService} from '../../../../../logger/logger.service.interface';\n\nexport class GreaterThanOperator extends BaseComparisonOperator {\n constructor(private _logger: ILoggerService){\n super();\n }\n\n compare(value1: unknown, value2: unknown): boolean {\n if (!Check.isNumber(value1) || !Check.isNumber(value2)) {\n this._logger.error(`Greater Than Operator: Values should be numbers! value1=${value1}; value2=${value2}`);\n }\n\n return value1 > value2;\n }\n}\n","import {BaseComparisonOperator} from '../base-comparison-operator';\nimport {Check} from \"@sparkware/app-utils\";\nimport {ILoggerService} from '../../../../../logger/logger.service.interface';\n\nexport class LessThanOperator extends BaseComparisonOperator {\n constructor(private _logger: ILoggerService) {\n super();\n }\n\n compare(value1: unknown, value2: unknown): boolean {\n if (!Check.isNumber(value1) || !Check.isNumber(value2)) {\n this._logger.error(`Less Than Operator: Values should be numbers! value1=${value1}; value2=${value2}`);\n }\n return value1 < value2;\n }\n}\n","import {BaseComparisonOperator} from \"../base-comparison-operator\";\nimport {ILoggerService} from \"../../../../../logger/logger.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {EqualOperator} from \"../equal-operator/equal-operator\";\n\nexport class AnyOfOperator extends BaseComparisonOperator {\n constructor(private _logger: ILoggerService){\n super();\n }\n\n compare(value1: unknown, value2: unknown): boolean {\n if(!Check.isArray(value2)) {\n this._logger.error(`Any Of Operator: The second parameter should be an array! value2=${value2}`);\n return new EqualOperator().compare(value1, value2);\n }\n\n return value2.includes(value1);\n }\n}","import {StatementsEvaluator} from '../statements/statements-evaluator/statements-evaluator';\nimport {ObjectEvaluator} from '../value-evaluators/object-evaluator/object-evaluator';\nimport {ArrayEvaluator} from '../value-evaluators/array-evaluator/array-evaluator';\nimport {SimpleValueEvaluator} from '../value-evaluators/simple-value-evaluator/simple-value-evaluator';\nimport {IValueEvaluator} from '../value-evaluators/value-evaluator.interface/value-evaluator.interface';\nimport {IConfigurationEvaluationContext} from './configuration-evaluation-context.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {IStatementEvaluator} from '../statements/statement-evaluator/statement-evaluator.interface';\nimport {StatementEvaluator} from '../statements/statement-evaluator/statement-evaluator';\nimport {ILogicalOperator} from '../statements/logical-operators/logical-operator.interface/logical-operator.interface';\nimport {ISegmentationRule} from '../statements/segmentation-rule/segmentation-rule.interface';\nimport {OrLogicalOperator} from '../statements/logical-operators/or-logical-operator/or-logical-operator';\nimport {AndLogicalOperator} from '../statements/logical-operators/and-logical-operator/and-logical-operator';\nimport {SegmentationRule} from '../statements/segmentation-rule/segmentation-rule';\nimport {IComparisonOperator} from '../statements/comparison-operators/comparison-operator.interface/comparison-operator.interface';\nimport {NotEqualOperator} from '../statements/comparison-operators/not-equal-operator/not-equal-operator';\nimport {EqualOperator} from '../statements/comparison-operators/equal-operator/equal-operator';\nimport {PropertyLevelContext} from '../property-level-context/property-level-context';\nimport {PropertyEvaluator} from '../property-evaluator/property-evaluator';\nimport {IPropertyEvaluator} from '../property-evaluator/property-evaluator.interface';\nimport {GamesIdPropertyEvaluator} from '../special-properties-evaluators/games-id-property-evaluator/games-id-property-evaluator';\nimport {IsFalsyOperator} from \"../statements/comparison-operators/is-falsy-operator/is-falsy-operator\";\nimport {IConfigurationEvaluationDataProvider} from './configuration-evaluation-data-provider.interface';\nimport {GreaterThanOperator} from \"../statements/comparison-operators/greater-than-operator/greater-than-operator\";\nimport {LessThanOperator} from \"../statements/comparison-operators/less-than-operator/less-than-operator\";\nimport {AnyOfOperator} from \"../statements/comparison-operators/any-of-operator/any-of-operator\";\nimport {isInsideAutomation} from '../../../../../utils/automation-helpers';\n\n\nexport function updateAssetPath(assetPath: string, configurationPath: string): string {\n return assetPath.replace(/{assetsPath}/gi, configurationPath + '/assets');\n}\n\nexport class ConfigurationEvaluationContext implements IConfigurationEvaluationContext {\n constructor(private dataProvider: IConfigurationEvaluationDataProvider) {\n\n }\n\n\n\n getSegmentValue(name: string): any {\n return this.dataProvider.getSegmentValue(name);\n }\n\n parsePropertyValue(value: any): IValueEvaluator {\n if(Check.isObject(value)) {\n if(this._hasStatementsOrDefaultValue(value)) {\n return new StatementsEvaluator(this._createStatementsEvaluators(value.statements), value.defaultValue);\n } else {\n return new ObjectEvaluator(value);\n }\n } else if(Check.isArray(value)) {\n return new ArrayEvaluator(value.map(item => this.parsePropertyValue(item)));\n } else {\n return new SimpleValueEvaluator(value);\n }\n }\n\n private _createStatementsEvaluators(statementsDefinitions): IStatementEvaluator[] {\n return (statementsDefinitions || []).map(statementDefinition => this.createStatementEvaluator(statementDefinition))\n }\n\n createStatementEvaluator(statementDefinition: any): IStatementEvaluator {\n return new StatementEvaluator(statementDefinition);\n }\n\n createLogicalOperator(logicalOperatorName: string, rules: ISegmentationRule[]): ILogicalOperator {\n switch (logicalOperatorName.toUpperCase()) {\n case 'OR':\n return new OrLogicalOperator(rules);\n case 'AND':\n return new AndLogicalOperator(rules);\n default: {\n throw new Error(`Unrecognized logical operator ${logicalOperatorName} for statement`);\n }\n }\n }\n\n createSegmentationRule(ruleDefinition: any): ISegmentationRule {\n return new SegmentationRule(ruleDefinition);\n }\n\n createComparisonOperator(operatorName: string): IComparisonOperator {\n switch (operatorName.toLowerCase()) {\n case 'equal':\n case '=':\n return new EqualOperator();\n case 'not_equal':\n case 'not equal':\n case '!=':\n return new NotEqualOperator();\n case 'is_falsy':\n case 'is falsy':\n return new IsFalsyOperator();\n case 'greater_than':\n return new GreaterThanOperator(this.dataProvider.logger);\n case 'less_than':\n return new LessThanOperator(this.dataProvider.logger);\n case \"any_of\":\n return new AnyOfOperator(this.dataProvider.logger);\n default:\n throw new Error(`Can't handle comparison operator ${operatorName}`);\n }\n }\n\n private _hasStatementsOrDefaultValue(obj: unknown): obj is {statements?: unknown, defaultValue?: unknown} {\n if(!Check.isNullOrUndefined(obj['statements'])\n || !Check.isNullOrUndefined(obj['defaultValue'])) {\n return true;\n } else {\n return false;\n }\n }\n\n getCurrentPropertyPath(): string {\n return '';\n }\n\n createPropertyContext(propertyName: string): IConfigurationEvaluationContext {\n return new PropertyLevelContext(this, propertyName);\n }\n\n applyValueTransformation(propertyPath: string, value: any): any {\n if(!Check.isString(value)) {\n return value;\n }\n return updateAssetPath(value, this.dataProvider.configurationPath);\n }\n\n createPropertyEvaluator(propertyName: string, propertyOwner: any): IPropertyEvaluator {\n switch (propertyName) {\n case 'gamesId':\n return new GamesIdPropertyEvaluator(propertyOwner, this.dataProvider.admin);\n case 'gamesSettings':\n let propertyValue = propertyOwner.gamesSettings;\n if (propertyOwner.gamesSettings && propertyOwner.gamesSettings.gamesTags) {\n propertyValue = {...propertyValue, gamesTags: this._mergeGamesFromLauncher(propertyOwner.gamesSettings.gamesTags)}\n } else {\n propertyValue = {...propertyValue, gamesTags: this._mergeGamesFromLauncher(this.dataProvider.admin && this.dataProvider.admin.gamesTags)}\n }\n return new PropertyEvaluator(propertyName, this.parsePropertyValue(propertyValue));\n default:\n return new PropertyEvaluator(propertyName, this.parsePropertyValue(propertyOwner[propertyName]));\n }\n }\n\n\n private _mergeGamesFromLauncher(existingGamesTags: any): any {\n\n const demoSettings = {\n demoCTAAnonymous: {pc: true, mobile: true},\n demoCTAAuthorized: {pc: true, mobile: true},\n intermediatePageAnonymous: {pc: true, mobile: true},\n intermediatePageAuthorized: {pc: true, mobile: true}\n };\n\n existingGamesTags = existingGamesTags || {};\n\n if(isInsideAutomation()) {\n Object.keys(existingGamesTags).forEach(gameType => {\n existingGamesTags[gameType]['demoSettings'] = demoSettings;\n });\n }\n\n let launcherGameTypes = this.getLauncherGames();\n\n launcherGameTypes.forEach(gameType => {\n if(existingGamesTags[gameType]) {\n existingGamesTags[gameType]['demoSettings'] = demoSettings;\n } else {\n existingGamesTags[gameType] = {};\n existingGamesTags[gameType]['demoSettings'] = demoSettings;\n }\n });\n\n return existingGamesTags;\n }\n\n getLauncherGames(): number[] {\n return this.dataProvider.getLauncherGames() || [];\n }\n}\n","import {AdminArenaConfiguration} from \"../../app-bootstrap/config-interfaces/casino-startup.configurations\";\nimport {createStatementsDefinition} from './create-statements-definition';\nimport {HOME_PAGE_ARENA, NEW_LIVE_CASINO_ARENA_NAME} from '../arenas/arena-consts';\nimport {Check} from \"@sparkware/app-utils\";\n\nenum List_Type {\n Swipers = \"swipers\",\n Grids = \"grids\",\n PopularTables = \"popularTables\"\n}\n\nexport function injectAdminArenas(\n originalConfigData: any,\n adminArenaConfigData: {[key: string]: AdminArenaConfiguration}\n): void {\n\n if (originalConfigData.homePage) {\n originalConfigData.homePage.gamesLists = getAdminArenaLists(\n adminArenaConfigData,\n HOME_PAGE_ARENA,\n List_Type.Swipers\n );\n }\n\n if (originalConfigData.arenas) {\n Object.keys(originalConfigData.arenas).forEach(arenaKey => {\n\n if (arenaKey === 'liveCasino') {\n //TODO - this empty if should be removed once we remove from all Admin DBs the liveCasino OrbitArenaKey\n /*\n originalConfigData.arenas[arenaKey].popularTables = getAdminArenaLists(\n adminArenaConfigData,\n arenaKey,\n List_Type.PopularTables\n );\n */\n } else if (arenaKey === NEW_LIVE_CASINO_ARENA_NAME) {\n originalConfigData.arenas[arenaKey].allGamesGrid = getAdminArenaLists(\n adminArenaConfigData,\n arenaKey,\n List_Type.Grids\n );\n }\n else {\n originalConfigData.arenas[arenaKey].swiperGamesList = getAdminArenaLists(\n adminArenaConfigData,\n arenaKey,\n List_Type.Swipers\n );\n originalConfigData.arenas[arenaKey].allGamesGrid = getAdminArenaLists(\n adminArenaConfigData,\n arenaKey,\n List_Type.Grids\n );\n }\n\n });\n }\n}\n\n\nfunction getAdminArenaLists(\n adminArenaConfigData: {[key: string]: AdminArenaConfiguration},\n arenaKey: string,\n listType: string\n) {\n let adminLists: unknown[] = [];\n if (adminArenaConfigData[arenaKey] && adminArenaConfigData[arenaKey].lists[listType]) {\n adminArenaConfigData[arenaKey].lists[listType].forEach(list => {\n let currentList = list.Metadata ?? {};\n\n currentList.display = Check.isNullOrUndefined(currentList.display) ? true : currentList.display;\n\n let segmentation = createStatementsDefinition(list.SubLists);\n currentList.gamesId = {};\n currentList.gamesId.defaultValue = segmentation.defaultValue;\n currentList.gamesId.statements = segmentation.statements;\n\n adminLists.push(currentList);\n });\n }\n\n return adminLists;\n}\n","import {ApplicationStartupConfigurations} from '../config-interfaces/application-startup.configurations';\nimport {LauncherOverridesReader} from '../launcher-overrides-reader/launcher-overrides-reader';\nimport {IWindowService} from '../../services/window/window.service.interface';\nimport {IConfigurationEvaluationDataProvider} from '../../services/configurations/evaluation/configuration-evaluation-context/configuration-evaluation-data-provider.interface';\nimport {PropertiesEvaluator} from '../../services/configurations/evaluation/properties-evaluator/properties-evaluator';\nimport {\n ConfigurationEvaluationContext\n} from '../../services/configurations/evaluation/configuration-evaluation-context/configuration-evaluation-context';\nimport {ILoggerService} from '../../services/logger/logger.service.interface';\nimport {CGP_OBJECT_NAME} from '../constants';\nimport ISdkHooksProvider from './sdk-hooks-provider.interface';\nimport {IThemeDefinition} from \"../../services/theme/theme-definition.interface\";\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\n\nconst overrideJson = require('json-override');\n\nexport class SdkInitializer {\n constructor(private _applicationConfiguration: ApplicationStartupConfigurations,\n private _sdkHooksProvider: ISdkHooksProvider,\n private _launcherOverridesReader: LauncherOverridesReader,\n private _windowService: IWindowService,\n private _theme: IThemeDefinition,\n private _logger: ILoggerService) {\n\n }\n\n init(): Promise {\n\n return import(/* webpackChunkName: \"cgp-sdk\" */ '../../../sdk/src/core/api').then(module => module.API).then(API => {\n window['LOG_LEVEL'] = this._applicationConfiguration.sdk.config.Logger.logLevel || 'INFO';\n const sdkApi = new API(this._applicationConfiguration.sdk.config);\n let sdkConfigOverrides: any = this.getSdkConfigOverrides();\n\n return new Promise(resolve => {\n let onInitCompleteCallback = () => {\n window[CGP_OBJECT_NAME] = sdkApi;\n resolve();\n };\n\n sdkApi.initialize(sdkConfigOverrides, onInitCompleteCallback);\n });\n });\n\n }\n\n\n private getSdkConfigOverrides() {\n let sdkConfigOverrides = {\n Country: this.getCountryServiceOverrides(),\n Skin: this.getSkinServiceOverrides(),\n Game: this.getGameServiceOverrides(),\n Integration: this.getIntegrationServiceOverrides(),\n Themes: this.getThemesServiceOverrides(),\n Http2: this.getHttp2ServiceOverrides(),\n JackpotToasters: this.getJackpotToastersServiceOverrides(),\n OrbitComponentRender: this.getOrbitComponentRenderOverrides(),\n CashierProxy: this.getCashierProxyOverrides(),\n GameRunnerProxy: this.getGameRunnerProxyOverrides(),\n CasinofiedAnalyticsProxy: this.getCasinofiedAnalyticsProxyOverrides(),\n ExternalLinksProxy: this.getExternalLinksProxyOverrides(),\n ToasterProxy: this.getToasterProxyOverrides(),\n PlayerMigrationProxy: this.getPlayerMigrationProxyOverrides(),\n LinksNavigationProxy: this.getLinksNavigationProxyOverrides(),\n SpinnerProxy: this.getSpinnerServiceProxyOverrides(),\n Regulation: {\n getOrbitRegulationProxy: () => this._sdkHooksProvider.getRegulationServiceProxy()\n }\n };\n\n overrideJson(sdkConfigOverrides, this._evaluateSdkConfigsInsideOrbit());\n return sdkConfigOverrides;\n }\n\n private getJackpotToastersServiceOverrides(): any {\n return {\n toasterImage: this._theme.shellTheme.images.jackpotWidget.generic.crown.toString()\n };\n }\n\n private getCountryServiceOverrides(): any {\n return {\n country: this._applicationConfiguration.country,\n };\n }\n\n private getSkinServiceOverrides(): any {\n return this._applicationConfiguration.orbit?.config?.SDK?.Skin || {};\n }\n\n private _evaluateSdkConfigsInsideOrbit(): any {\n let sdkConfigsInsideOrbit = this._applicationConfiguration.orbit && this._applicationConfiguration.orbit.config && this._applicationConfiguration.orbit.config.SDK;\n if(!sdkConfigsInsideOrbit) {\n return {};\n }\n\n let segments: Record = {\n env: this._applicationConfiguration.sdk.config.ExtraProperties.env\n };\n\n let configEvaluationDataProvider: IConfigurationEvaluationDataProvider = {\n configurationPath: this._applicationConfiguration.configurationPath,\n getSegmentValue: (segmentName => segments[segmentName]),\n getLauncherGames: () => [],\n admin: this._applicationConfiguration.admin,\n logger: this._logger\n };\n\n let context = new ConfigurationEvaluationContext(configEvaluationDataProvider);\n let evaluator = PropertiesEvaluator.fromRoot(sdkConfigsInsideOrbit, context);\n return evaluator.evaluate(context);\n }\n\n private getGameServiceOverrides(): any {\n\n let result: any = {\n resolveGameImagePath: (imageFilePath: string) => this._sdkHooksProvider.resolveGameImagePath(imageFilePath)\n };\n\n result.gameDefaultIcon = this._theme.mainContentTheme.images.gameDefaultIcon.toString();\n result.backgroundDefault = this._theme.mainContentTheme.images.gameDefaultBackground.toString();\n\n return result;\n }\n\n private _waitForMapperCGP = (resolve: (value?: unknown) => void) => {\n let mapperData = this._sdkHooksProvider.getGameTypesMappingForSdk();\n if(mapperData) {\n resolve(mapperData);\n } else {\n setTimeout(() => this._waitForMapperCGP(resolve), 5);\n }\n };\n\n private _gameTypeMapper() {\n return new Promise(resolve => {\n this._waitForMapperCGP(resolve);\n });\n };\n\n private _getHeaderRegulationDataElement() {\n return new Promise(resolve => {\n this._waitForHeaderRegulationDataElement(resolve);\n });\n };\n\n private _waitForHeaderRegulationDataElement = (resolve: (value?: unknown) => void) => {\n this._sdkHooksProvider.getHeaderRegulationDataElement().then(headerRegulationDataElement => {\n this.waitForElement(headerRegulationDataElement, resolve);\n })\n\n };\n\n waitForElement(element: HTMLElement, resolve: (value?: unknown) => void) {\n if(element) {\n resolve(element);\n } else {\n setTimeout(() => this._waitForHeaderRegulationDataElement(resolve), 5);\n }\n }\n\n private getIntegrationServiceOverrides(): any {\n let launcherOverrides = this._launcherOverridesReader.getOverrides();\n\n return {\n gameTypeMapper: this._gameTypeMapper.bind(this),\n proxyLink: (url: string) => this._sdkHooksProvider.redirectProxy(url),\n openInNewWindowHook: () => this._sdkHooksProvider.openInNewWindowHook(),\n isMiniCipFunc: () => this._sdkHooksProvider.isMiniCip(),\n isMiniCisFunc: () => this._sdkHooksProvider.isMiniCis(),\n headerRegulationDataElement: this._getHeaderRegulationDataElement.bind(this),\n CMSSource: launcherOverrides?.orbit?.cmsSource,\n getOrbitMarketingData: async (marketingParams?: MarketingParams) => (await this._sdkHooksProvider.getMarketingService()).getMarketingData(marketingParams)\n };\n }\n\n private getThemesServiceOverrides(): any {\n let sdkTheme = this._theme.shellTheme?.sdk;\n if (sdkTheme) {\n return sdkTheme;\n }\n return {}\n }\n\n private getHttp2ServiceOverrides(): any {\n let result: any = {};\n let launcherOverrides = this._launcherOverridesReader.getOverrides();\n if(launcherOverrides?.sdk?.api) {\n result.origin = launcherOverrides.sdk.api;\n }\n\n result.skin = this._applicationConfiguration.skin;\n result.skinOverride = this._applicationConfiguration.skinOverride;\n result.useCountryAsState = Boolean(launcherOverrides?.orbit?.useCountryAsState ?? this._applicationConfiguration.useCountryAsState)\n return result;\n }\n\n private getOrbitComponentRenderOverrides(): any {\n return {\n getOrbitComponentToSdkAdapter: () => this._sdkHooksProvider.getOrbitComponentToSdkAdapter()\n }\n }\n\n private getCashierProxyOverrides(): any {\n return {\n getCashierService: () => this._sdkHooksProvider.getCashierService()\n };\n }\n\n private getGameRunnerProxyOverrides(): any {\n return {\n getGameRunnerService: () => this._sdkHooksProvider.getGameRunnerService()\n };\n }\n\n private getCasinofiedAnalyticsProxyOverrides(): any {\n return {\n getCasinofiedAnalyticsService: () => this._sdkHooksProvider.getCasinofiedAnalyticsService()\n };\n }\n\n private getSpinnerServiceProxyOverrides(): any {\n return {\n getSpinnerService: () => this._sdkHooksProvider.getSpinnerService()\n };\n }\n\n\n private getPlayerMigrationProxyOverrides(): any {\n return {\n getPlayerMigrationService: () => this._sdkHooksProvider.getPlayerMigrationService()\n };\n }\n\n private getExternalLinksProxyOverrides() {\n return {\n externalLinksService: () => this._sdkHooksProvider.getExternalLinksProxyService()\n }\n }\n\n private getToasterProxyOverrides() {\n return {\n toasterService: () => this._sdkHooksProvider.getToasterProxyService()\n }\n }\n\n private getLinksNavigationProxyOverrides() {\n return {\n linksNavigation: () => this._sdkHooksProvider.getLinksNavigationService()\n };\n }\n\n}\n\n\n\n","export const QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE:string = 'dontShowEnvironmentPopUpBlockerAgain';","import { QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE } from './qa-environment-pop-up-blocker.service.constants';\nimport { ServiceBase } from './../ServiceBase';\nimport { IQAEnvironmentPopUpBlockerService } from './qa-environment-pop-up-blocker.service.interface';\nconst md5 = require('md5');\n\nexport class QAEnvironmentPopUpBlockerService extends ServiceBase implements IQAEnvironmentPopUpBlockerService {\n\n validatePassword(password) {\n if (md5(password) === this.services.configuration.servicesConfigs.QAEnvironmentPopUp.validationKey) {\n this._setCookie();\n return true;\n }\n return false;\n }\n\n private _setCookie() {\n let expirationDate:Date = new Date();\n expirationDate.setMonth(expirationDate.getMonth() + 3);\n this.services.cookies.createCookie(QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE, 'true', expirationDate);\n }\n\n}","import { Check } from '@sparkware/app-utils';\nimport { observable, action, computed, makeObservable } from 'mobx';\nimport { ServiceBase } from '../ServiceBase';\nimport { IVideoPlayer } from './video-players/video-player.interface';\nimport { IServiceFactoryExtended } from '../service-factory-extended.interface';\nimport { IVideoPlayingService } from './video-playing.service.interface';\nimport {GameInfo} from \"../games/game-info\";\nimport {ISwipeLogicHandler} from \"../arenas/models/swiper-logic-handler/swiper-logic-handler.interface\";\n\nexport abstract class VideoPlayingServiceBase extends ServiceBase implements IVideoPlayingService {\n\n public abstract gaCategory: string;\n\n @observable.ref\n isSupported: boolean = null;\n\n @action.bound\n private _setIsSupported(isSupported: boolean): void {\n this.isSupported = isSupported;\n }\n\n @observable.ref\n isAppVisible: boolean = true;\n\n @action.bound\n private _setIsAppVisible(isAppVisible: boolean): void {\n this.isAppVisible = isAppVisible;\n }\n\n @computed\n get isDisabledPrelogin(): boolean {\n if (this.services.user.isAuthorized) {\n return false;\n }\n\n const currentRegulationCode = this.services.regulation.getRegulationCode();\n const disableForRegulationPreLogin = this.services.configuration.servicesConfigs.LiveVideoStream.disableForRegulationPreLogin[currentRegulationCode];\n return !Check.isNullOrUndefined(disableForRegulationPreLogin) && disableForRegulationPreLogin;\n }\n\n //Swiper Handler for the orbit swiper handling the current playing video.\n //This implementation breaks if in the future there will be > 1 swipers playing the same type of video in the same page.\n //But for now, we need this to swipe to & start the next video after the current one finishes playing.\n private _swiperHandler: ISwipeLogicHandler | null = null;\n\n public setSwiperHandler(value: ISwipeLogicHandler): void {\n this._swiperHandler = value;\n }\n\n public getSwiperHandler(): ISwipeLogicHandler | null {\n return this._swiperHandler;\n }\n\n constructor (services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._init();\n this.services.sdk.events.onAppPaused(() => {\n this._setIsAppVisible(false);\n });\n this.services.sdk.events.onAppResumed(() => {\n this._setIsAppVisible(true);\n });\n services.sdk.events.onGameOpen(() => {\n this.services.user.preferences.sound.setIsMuted(true);\n });\n }\n\n @observable.ref\n bandwidthEstimate: number = 500000;\n @action.bound\n setBandwidthEstimate(value:number): void {\n this.bandwidthEstimate = value;\n }\n\n private _init() {\n const isSupported = this._checkIfSupported();\n\n if (!isSupported) {\n this.services.sdk.structuredLoggingService\n .getLogger()\n .addCategory(this.gaCategory)\n .addAction('VideoStreamNotSupported')\n .info();\n }\n\n this._setIsSupported(isSupported);\n }\n\n protected abstract _checkIfSupported(): boolean;\n\n public abstract getVideoPlayer(gameInfo: GameInfo, videoReference: HTMLVideoElement): IVideoPlayer;\n}","const PAUSABLE_TIMER_STATES = {\n EMPTY: '',\n PAUSED: 'paused',\n COUNTING: 'counting',\n};\n\nexport class PausableTimer {\n private _timerId: number;\n private _remainingTime: number;\n private _startTime: number;\n private _callback: Function;\n private _state: string = PAUSABLE_TIMER_STATES.EMPTY;\n\n constructor(callback: Function, delay: number) {\n this._remainingTime = delay;\n this._callback = callback;\n this.resume();\n }\n\n public pause() {\n if (this._state !== PAUSABLE_TIMER_STATES.PAUSED) {\n let timeElapsed = Date.now() - this._startTime;\n \n this._state = PAUSABLE_TIMER_STATES.PAUSED;\n this._clearTimer();\n this._remainingTime = this._remainingTime - timeElapsed;\n }\n }\n\n public resume() {\n if (this._state !== PAUSABLE_TIMER_STATES.COUNTING) {\n this._state = PAUSABLE_TIMER_STATES.COUNTING;\n this._clearTimer();\n this._startTime = Date.now();\n this._timerId = setTimeout(this._callback, this._remainingTime);\n }\n }\n\n public destroy() {\n this._clearTimer();\n this._timerId = null;\n }\n\n private _clearTimer() {\n if (this._timerId) {\n clearTimeout(this._timerId);\n }\n }\n}","import {Check} from '@sparkware/app-utils';\nimport {IServiceFactoryExtended} from '../../../service-factory-extended.interface';\nimport {PausableTimer} from '../../../../../common/utils/pausable-timer';\nimport {action, makeObservable, observable} from 'mobx';\nimport {IBitrateStats, IBufferingTime, IFramesDropStats, ILogType, IVideoPlayer} from '../video-player.interface';\nimport { OrbitMarketingEventAnalyticsLabel } from \"../../../analytics/analytics.service.interface\";\n\nconst DROP_FRAMES_THRESHOLD: number = 0.2;\n\nexport class VideoLiveStreamBasePlayer implements IVideoPlayer {\n\n private _gameType: number;\n private _videoReference: HTMLVideoElement;\n private _streamSource: string;\n private _playerType: string;\n private _pausableTimer: PausableTimer = null;\n\n private _bufferingStartTime: number;\n private _firstLoadTimeLogged: boolean = false;\n private _isFirstTimePlay: boolean = true;\n private _bufferingTimeValues: number[] = [];\n private _hadPlayStarted: boolean = false;\n private _isVisible: boolean = false;\n private _watchTimeLimitMs: number = 0;\n\n @observable.ref\n hasError: boolean = false;\n\n @action.bound\n _setHasError(value:boolean): void {\n this.hasError = value;\n }\n\n @observable.ref\n isLoading: boolean = true;\n\n @action.bound\n _setIsLoading(value:boolean): void {\n this.isLoading = value;\n }\n\n @observable.ref\n watchTimeLimitReached: boolean = false;\n\n @action.bound\n _setWatchTimeLimitReached(value:boolean): void {\n this.watchTimeLimitReached = value;\n }\n\n @observable.ref\n autoplayAllowed: boolean = true;\n\n @action.bound\n _setAutoplayAllowed(value:boolean): void {\n this.autoplayAllowed = value;\n }\n\n private _getGACategory = (): string => {\n return this._services.liveStreamPlaying.gaCategory;\n }\n\n constructor(playerType:string, gameType:number, videoReference: HTMLVideoElement, streamSource:string, watchTimeLimit: number, private readonly _services: IServiceFactoryExtended) {\n makeObservable(this);\n\n this._playerType = playerType;\n this._videoReference = videoReference;\n this._streamSource = streamSource;\n this._gameType = gameType;\n this._watchTimeLimitMs = watchTimeLimit;\n\n this._pausableTimer = new PausableTimer(() => {\n this.onWatchTimeLimitReached();\n }, watchTimeLimit);\n\n window.addEventListener('offline', this._onGoingOffline);\n this._videoReference.addEventListener('waiting', this._onWaiting);\n this._videoReference.addEventListener('playing', this._onPlaying);\n this._videoReference.addEventListener('canplay', this._onCanPlay);\n this._videoReference.addEventListener('error', this._onError);\n }\n\n get videoReference(): HTMLVideoElement {\n return this._videoReference;\n }\n\n get streamSource(): string {\n return this._streamSource;\n }\n\n play() {\n if (!this.watchTimeLimitReached) {\n this._isVisible = true;\n this._bufferingStartTime = performance.now();\n console.log('LSP play video for ' + this._gameType);\n this._videoReference.play()\n .then(() => {\n this._setAutoplayAllowed(true);\n console.log('LSP set auto-play video for ' + this._gameType);\n })\n .catch(error => {\n if (error.name === 'NotAllowedError') {\n // error triggered when autoplay of video is not allowed\n this._onAutoplayError();\n } else {\n this._onError(error);\n }\n });\n\n if (this._isFirstTimePlay) {\n this._isFirstTimePlay = false;\n this._log('info', 'play');\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'IN_VIEW', OrbitMarketingEventAnalyticsLabel.VideoPlayback, this._gameType.toString());\n }\n }\n }\n\n pause() {\n this._isVisible = false;\n\n console.log('LSP try pause for ' + this._gameType);\n\n // we can pause the video only if had ever started playing. A pause before first time play will cause in an error\n // play() request was interrupted by a call to pause()\n if (this._hadPlayStarted) {\n this._videoReference.pause();\n console.log('LSP pause for ' + this._gameType);\n }\n\n this._pausableTimer.pause();\n this._logAverageBufferingTimeOnPause();\n }\n\n load() {\n this._videoReference.load();\n }\n\n handleError(error: any) {\n this._onError(error);\n }\n\n onWatchTimeLimitReached() {\n this._videoReference.pause();\n this._setWatchTimeLimitReached(true);\n this._logAverageBufferingTimeOnEnd();\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'LIMIT_REACH', `VIDEO_PLAYBACK_LIMIT_${this._watchTimeLimitMs / 1000}`, this._gameType.toString());\n }\n\n destroy() {\n this._pausableTimer.destroy();\n this._pausableTimer = null;\n\n window.removeEventListener('offline', this._onGoingOffline);\n this._videoReference.removeEventListener('waiting', this._onWaiting);\n this._videoReference.removeEventListener('playing', this._onPlaying);\n this._videoReference.removeEventListener('canplay', this._onCanPlay);\n this._videoReference.removeEventListener('error', this._onError);\n this._videoReference = null;\n }\n\n logUIAction(type: ILogType, action: string) {\n this._log(type, action);\n }\n\n protected _onWaiting = () => {\n // Occurs when playback stops because the next frame of a video resource is not available.\n // Example: video had played everything that was loaded and cannot play further until the next sequence is loaded\n if (this.autoplayAllowed) {\n // For some reason, the waiting event is dispatched after catching the 'NotAllowedError'\n // The following code related to loading should execute only when we have a real waiting to load,\n // so only when the playback can start\n this._bufferingStartTime = performance.now();\n this._setIsLoading(true);\n }\n this._pausableTimer.pause();\n }\n\n protected _onPlaying = () => {\n // Occurs when the video playback is first started or when the playback resumes.\n this._hadPlayStarted = true;\n this._logFirstLoadTimeUntilPlay();\n this._setIsLoading(false);\n this._pausableTimer.resume();\n\n console.log('LSP onPlaying event for ' + this._gameType);\n \n if (!this._isVisible) {\n console.log('LSP onPlaying but paused due to not visible for ' + this._gameType);\n this.pause();\n }\n }\n\n private _onCanPlay = () => {\n // Occurs when the video playback resumes.\n // Example: if video was previously paused due to a waiting event, this will let us know that the next sequence is loaded\n // and the video will play further on\n // NOTE: usually the 'playing' event is triggered in the same conditions, but on iOS devices is not so we cannot base on 'playing' event\n // Example: on iOS devices, even if the video is playing, if you press unmute for the first time, a waiting event will be triggered, without\n // having also a 'playing' event trigger. Related bug: #1755199\n this._bufferingTimeValues.push(performance.now() - this._bufferingStartTime);\n this._setIsLoading(false);\n this._pausableTimer.resume();\n console.log('LSP onCanPlay event for ' + this._gameType);\n }\n\n private _onError = (err: ErrorEvent) => {\n this._setHasError(true);\n console.error('Live stream error', err);\n this._log('error', 'VideoStreamError');\n }\n\n private _onAutoplayError = () => {\n console.error('LSP AutoplayNotAllowed error for ' + this._gameType);\n\n this._setAutoplayAllowed(false);\n this._setIsLoading(false);\n this._log('info', 'AutoplayNotAllowed');\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'AUTOPLAY', OrbitMarketingEventAnalyticsLabel.Error, this._gameType.toString());\n }\n\n private _onGoingOffline = () => {\n this._setHasError(true);\n }\n\n private _getBufferAverageTime(): number {\n return this._bufferingTimeValues.reduce((prevValue, currentValue) => {\n return prevValue + currentValue\n }, 0);\n }\n\n private _logAverageBufferingTimeOnPause() {\n const totalBufferTime = this._getBufferAverageTime();\n const customData: IBufferingTime = {\n time: totalBufferTime / this._bufferingTimeValues.length\n };\n\n this._log('info', 'AvgBufferingTime', customData);\n }\n\n private _logAverageBufferingTimeOnEnd() {\n const totalBufferTime = this._getBufferAverageTime();\n const customData: IBufferingTime = {\n time: totalBufferTime / this._bufferingTimeValues.length,\n occurrence: this._bufferingTimeValues.length\n };\n\n this._log('info', 'AvgBufferingData', customData);\n }\n\n private _logFirstLoadTimeUntilPlay() {\n if (!this._firstLoadTimeLogged) {\n const firstLoadTime = performance.now() - this._bufferingStartTime;\n const loadTime: IBufferingTime = {\n time: firstLoadTime\n }\n this._firstLoadTimeLogged = true;\n this._log('info', 'FirstLoad', loadTime);\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'PLAY', OrbitMarketingEventAnalyticsLabel.VideoPlayback, this._gameType.toString());\n }\n }\n\n protected _checkDroppedFPS(droppedFrames: number, decodedFrames: number) {\n if (!this._videoReference.paused) {\n // when video is paused, we do not care about video frames\n // since on paused no frame is rendered\n\n const droppedFramesRatio = droppedFrames/decodedFrames;\n if (droppedFramesRatio > DROP_FRAMES_THRESHOLD) {\n // when dropped frames ratio is greater than the threshold we control\n // we want to log it to Elastic\n\n const framesDropData: IFramesDropStats = {\n droppedFrames: droppedFrames,\n totalFrames: decodedFrames\n }\n this._log('info', 'FpsDrop', framesDropData);\n }\n }\n }\n\n protected _log(type: ILogType, action: string, customData: IBufferingTime | IBitrateStats | IFramesDropStats = null) {\n let structuredLoger = this._services.sdk.structuredLoggingService\n .getLogger()\n .addCategory(this._services.liveStreamPlaying.gaCategory)\n .addAction(action)\n .addLabel(this._playerType)\n .addValue(this._gameType.toString());\n\n if (!Check.isNullOrUndefined(customData)) {\n structuredLoger.addCustomData(customData);\n }\n\n switch (type) {\n case 'error':\n structuredLoger.error();\n break;\n case 'info':\n default:\n structuredLoger.info();\n break;\n }\n }\n}\n","import { Check } from '@sparkware/app-utils';\nimport { IServiceFactoryExtended } from '../../../../service-factory-extended.interface';\nimport { VideoLiveStreamBasePlayer } from '../video-live-stream-player-base';\n\nconst VIDEO_STREAM_MIME_TYPE = 'application/vnd.apple.mpegurl';\n\n/**\n * Intervals used in this class are for fixing #1767947 and #1773060\n * The normal flow is like this:\n * - video element triggers a 'playing' or a 'canplay' event. On this event \n * the loading state is set to false (loading screen is hidden and the watch time counter resumes)\n * - video element triggers a 'waiting' event. On this event the loading state\n * is set to true, so the loading screen appears and the watch time counter is paused.\n * BUT, this events are not triggered also on Android. The 'waiting' event is not triggered but the video freeze so a loading is in progress\n * causing the loading screen to not appear and the watch time to still count how much the user is watching the movie.\n * \n * The solution for this, is to have a setInterval of 100ms and on each tick to check the playhead position against the previous playhead position.\n * If they are the same, it means that the video is loading.\n */\nconst TICK_INTERVAL = 100;\n// const that describe on how many ticks we want to check fps\n// in this case, we want to check FPS on every 1 second \nconst TICK_REPEATS_FOR_FPS_CHECK = 10;\nexport class LiveStreamNativePlayer extends VideoLiveStreamBasePlayer {\n private _tickInterval = null;\n private _previousTime = 0;\n\n private _isVideoPlaybackQualityAvailable: boolean = false;\n private _lastPeriodDroppedFrames: number = 0;\n private _lastPeriodDecodedFrames: number = 0;\n private _tickCount: number = 0;\n\n public static isSupported(videoEl: HTMLVideoElement): boolean {\n const validCanPlayValue = ['probably', 'maybe'];\n const canPlayResultValue = videoEl.canPlayType(VIDEO_STREAM_MIME_TYPE);\n\n return validCanPlayValue.includes(canPlayResultValue);\n }\n\n constructor(services: IServiceFactoryExtended, gameType: number, videoReference: HTMLVideoElement, streamSource:string, watchTimeLimit: number) {\n super('native', gameType, videoReference, streamSource, watchTimeLimit, services);\n\n if (Check.isFunction(videoReference.getVideoPlaybackQuality)) {\n this._isVideoPlaybackQualityAvailable = true;\n }\n }\n\n play() {\n if (Check.isEmpty(this.videoReference.src) || this.videoReference.src !== this.streamSource) {\n this.videoReference.src = this.streamSource;\n }\n if (!this.watchTimeLimitReached) {\n this._setInterval();\n }\n super.play();\n }\n\n pause() {\n this._clearInterval();\n super.pause();\n }\n\n onWatchTimeLimitReached() {\n super.onWatchTimeLimitReached();\n this._clearInterval();\n }\n\n destroy() {\n this._clearInterval();\n this._isVideoPlaybackQualityAvailable = false;\n\n super.destroy();\n }\n\n private _setInterval() {\n if (!this._tickInterval) {\n this._tickInterval = setInterval(this._onTick, TICK_INTERVAL);\n }\n }\n\n private _clearInterval() {\n if (this._tickInterval) {\n clearInterval(this._tickInterval);\n this._tickInterval = null;\n }\n }\n\n private _onTick = () => {\n // if stream didn't buffered anything there is no point in trying to detect loading\n // because is clear that the video is loading\n if (this.videoReference.readyState === 0) {\n return;\n }\n\n const currentTime = this.videoReference.currentTime;\n if (currentTime !== this._previousTime) {\n // video is playing because the playhead is moving\n this._previousTime = currentTime;\n if (this.isLoading) {\n //if loading is already set to false, meaning that the video is playing\n // don't spam the onPlaying\n this._onPlaying();\n }\n } else {\n // video is stalled(loading) because the playhead is not moving\n if (!this.isLoading) {\n //if loading is already set to true, meaning that the video is loading\n // don't spam the onWaiting\n this._onWaiting();\n }\n }\n\n this._tickCount++;\n if (this._tickCount === TICK_REPEATS_FOR_FPS_CHECK) {\n this._tickCount = 0;\n this._checkFPSInterval();\n }\n }\n\n private _checkFPSInterval() {\n // https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality\n if (this.videoReference) {\n if (this._isVideoPlaybackQualityAvailable) {\n const videoPlaybackQuality = this.videoReference.getVideoPlaybackQuality();\n this._checkFPS(\n videoPlaybackQuality.droppedVideoFrames,\n videoPlaybackQuality.totalVideoFrames\n );\n } else {\n // HTMLVideoElement doesn't include the webkit types\n this._checkFPS(\n (this.videoReference as any).webkitDroppedFrameCount as number,\n (this.videoReference as any).webkitDecodedFrameCount as number\n );\n }\n }\n }\n\n private _checkFPS(droppedFrames: number, decodedFrames:number) {\n // get dropped and decoded frames from the last period\n const currentDropped = droppedFrames - this._lastPeriodDroppedFrames;\n const currentDecoded = decodedFrames - this._lastPeriodDecodedFrames;\n\n this._checkDroppedFPS(currentDropped, currentDecoded);\n\n this._lastPeriodDroppedFrames = droppedFrames;\n this._lastPeriodDecodedFrames = decodedFrames;\n }\n}\n","import {IServiceFactoryExtended} from '../../../../service-factory-extended.interface';\nimport {VideoLiveStreamBasePlayer} from '../video-live-stream-player-base';\nimport Hls, {Events, ErrorData, FPSDropData, LevelUpdatedData, MediaAttachedData, ManifestParsedData, FragLoadedData, HlsConfig} from 'hls.js';\nimport {IBitrateStats} from '../../video-player.interface';\n\nexport class VideoHlsBasePlayer extends VideoLiveStreamBasePlayer {\n protected _hlsInstance: Hls;\n protected _isManifestParsed: boolean = false;\n private _bitrateStats: IBitrateStats = {\n min: Number.MAX_VALUE,\n max: Number.MIN_VALUE\n }\n\n protected readonly HLS_CONFIG: HlsConfig = {\n ...Hls.DefaultConfig,\n capLevelOnFPSDrop: true\n }\n\n public static isSupported(): boolean {\n return Hls.isSupported();\n }\n\n constructor(protected readonly services: IServiceFactoryExtended, gameType: number, videoReference: HTMLVideoElement, streamSource: string, watchTimeLimit: number) {\n super('HLS', gameType, videoReference, streamSource, watchTimeLimit, services);\n }\n\n onWatchTimeLimitReached() {\n super.onWatchTimeLimitReached();\n this._hlsInstance.stopLoad();\n this._log('info', 'VideoPlayedBitrate', this._bitrateStats);\n }\n\n destroy() {\n this._hlsInstance?.off(Hls.Events.ERROR, this._onHlsError);\n this._hlsInstance?.off(Hls.Events.MEDIA_ATTACHED, this._onMediaAttached);\n this._hlsInstance?.off(Hls.Events.MANIFEST_PARSED, this._onManifestParsed);\n this._hlsInstance?.off(Hls.Events.LEVEL_UPDATED, this._onLevelUpdated);\n this._hlsInstance?.off(Hls.Events.FPS_DROP, this._onFpsDrop);\n this._hlsInstance?.off(Hls.Events.FRAG_LOADED, this._onBandwidthEstimate)\n\n this._hlsInstance?.destroy();\n super.destroy();\n\n }\n\n protected _onHlsError = (event: Events.ERROR, data: ErrorData) => {\n const {fatal} = data;\n if (fatal) {\n this._hlsInstance.destroy();\n this.handleError(data);\n }\n }\n\n protected _onMediaAttached = (event: Events.MEDIA_ATTACHED, data: MediaAttachedData) => {\n this._hlsInstance.loadSource(this.streamSource);\n }\n\n protected _onManifestParsed = (event: Events.MANIFEST_PARSED, data: ManifestParsedData) => {\n super.play();\n this._isManifestParsed = true;\n }\n\n protected _onLevelUpdated = (event: Events.LEVEL_UPDATED, data: LevelUpdatedData) => {\n const updatedBitrate = this._hlsInstance.levels[data.level].bitrate;\n if (updatedBitrate < this._bitrateStats.min) {\n this._bitrateStats.min = updatedBitrate;\n }\n if (updatedBitrate > this._bitrateStats.max) {\n this._bitrateStats.max = updatedBitrate;\n }\n }\n\n protected _onFpsDrop = (event: Events.FPS_DROP, data: FPSDropData) => {\n // fps drop event is triggered on every 'fpsDroppedMonitoringPeriod' interval, only if\n // 'capLevelOnFPSDrop' is set to true. It contains information regarding dropped frames\n // and total frames from the last interval\n // 'capLevelOnFPSDrop' default value is false and 'fpsDroppedMonitoringPeriod' is 5000 ms\n // more regarding configuration https://github.com/video-dev/hls.js/blob/master/docs/API.md\n // fps controller implementation https://github.com/video-dev/hls.js/blob/ca644667584c8128a7620c0df4ef9152c23451e9/src/controller/fps-controller.ts\n\n this._checkDroppedFPS(data.currentDropped, data.currentDecoded);\n }\n\n protected _onBandwidthEstimate = (event: Events.FRAG_LOADED, data: FragLoadedData) => {\n this.services.videoOnDemandPlaying.setBandwidthEstimate(this._hlsInstance.bandwidthEstimate);\n }\n}\n","import Hls from 'hls.js';\nimport {VideoHlsBasePlayer} from './video-player-hls-base';\n\nexport class LiveStreamHlsPlayer extends VideoHlsBasePlayer {\n\n play() {\n if (this._hlsInstance) {\n this._hlsInstance.startLoad();\n super.play();\n } else {\n this._hlsInstance = this._createHlsInstance();\n }\n }\n\n pause() {\n super.pause();\n this._hlsInstance?.stopLoad();\n }\n\n private _createHlsInstance(): Hls {\n const hlsInstance = new Hls(this.HLS_CONFIG);\n\n hlsInstance.on(Hls.Events.ERROR, this._onHlsError);\n hlsInstance.on(Hls.Events.MEDIA_ATTACHED, this._onMediaAttached);\n hlsInstance.on(Hls.Events.LEVEL_UPDATED, this._onLevelUpdated);\n hlsInstance.on(Hls.Events.FPS_DROP, this._onFpsDrop);\n hlsInstance.on(Hls.Events.FRAG_LOADED, this._onBandwidthEstimate);\n hlsInstance.bandwidthEstimate = this.services.videoOnDemandPlaying.bandwidthEstimate;\n\n hlsInstance.on(Hls.Events.MANIFEST_PARSED, this._onManifestParsed);\n\n hlsInstance.attachMedia(this.videoReference);\n\n return hlsInstance;\n }\n}\n","import {VideoPlayingServiceBase} from \"./video-playing-service-base\";\nimport {GameInfo} from \"../games/game-info\";\nimport {IVideoPlayer} from \"./video-players/video-player.interface\";\nimport {LiveStreamNativePlayer} from \"./video-players/live-stream-players/native/video-live-stream-player-native\";\nimport {LiveStreamHlsPlayer} from \"./video-players/live-stream-players/hls/video-live-stream-player-hls\";\n\nexport const LIVE_STREAM_WATCH_TIME_LIMIT: number = 120000;\n\nexport class LiveStreamPlayingService extends VideoPlayingServiceBase {\n\n public gaCategory = \"ORBIT_LIVE_STREAM\";\n\n protected _checkIfSupported() {\n const videoEl = document.createElement('video');\n try {\n if (LiveStreamNativePlayer.isSupported(videoEl)) {\n return true;\n }\n\n return LiveStreamHlsPlayer.isSupported();\n }\n finally {\n try {\n videoEl.src = \"\";\n videoEl.load();\n videoEl.remove();\n } catch (err) {\n this.services.logger.error('LiveStreamPlayingService - Failed to release temp video element', err);\n }\n }\n\n }\n\n getVideoPlayer(gameInfo: GameInfo, videoReference: HTMLVideoElement, dontAutoSwipe?: boolean): IVideoPlayer {\n\n const gameType = gameInfo.gameType;\n const streamSource = gameInfo.videoURL;\n\n if(gameInfo.slideCover){\n videoReference.poster = gameInfo.slideCover;\n }\n\n //In the future, this should be coming from admin as well.\n const watchTimeLimit = LIVE_STREAM_WATCH_TIME_LIMIT;\n\n // We need to check also if not android because Evo live stream games not working on android real device because they use WAF and they don't get referer in android native.\n if (LiveStreamNativePlayer.isSupported(videoReference) && !this.services.device.os.isAndroid) {\n return new LiveStreamNativePlayer(this.services, gameType, videoReference, streamSource, watchTimeLimit);\n }\n\n if (LiveStreamHlsPlayer.isSupported()) {\n return new LiveStreamHlsPlayer(this.services, gameType, videoReference, streamSource, watchTimeLimit);\n }\n\n return null;\n }\n}\n","import {ITranslationService} from \"./translation.service.interface\";\n\nexport class TextTranslation {\n constructor(private readonly translationService: ITranslationService,\n public readonly translationKey: string,\n private readonly _parameters?: any) {\n }\n\n get translation(): string {\n return this.translationService.translate(this.translationKey, this._parameters);\n }\n\n}","import {ITranslationService} from './translation.service.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {Check} from \"@sparkware/app-utils\";\nimport {TextTranslation} from \"./text-translation\";\n\nexport class TranslationService extends ServiceBase implements ITranslationService {\n\n get langData(): any {\n return this.services.language.translatedTexts;\n }\n\n translate(key: string, parameters?: any): string {\n try {\n let translatedPhrase = '';\n\n if (this.langData && key !== '') {\n if (this.langData[key]) {\n translatedPhrase = this.langData[key];\n } else {\n\n this.services.logger.debug(`Missing translation for ${key} in language ${this.services.language.currentLanguage}`);\n\n return key;\n }\n }\n return this._resolveBraces(translatedPhrase, parameters);\n } catch (err) {\n console.log('error in transform function, error message: ', err);\n return '';\n }\n }\n\n getTranslation(key: string, parameters?: any): TextTranslation {\n return new TextTranslation(this, key, parameters);\n }\n\n private _resolveBraces(str: string, value = null) {\n\n if('' === str)\n return str;\n\n if (Check.isObject(value)) {\n Object.keys(value).forEach(key => str = str.replace(`{${key}}`, value[key]));\n }\n else {\n\n let objectKeys = str.match(/[^{]+(?=\\})/g) || []; //array of object keys that have to be replaced (looking for {foo})\n\n for (let objectKey of objectKeys) {\n if (value) {\n str = str.replace(`{${objectKey}}`, value);\n } else {\n //if we didn't get value we will look the key in the config\n str = str.replace(`{${objectKey}}`, this.services.configuration.resolveConfigurationValue(objectKey));\n }\n }\n\n }\n return str;\n\n }\n}\n","export const CURRENCY_SYMBOLS: Record = {\n CAD: 'C$',\n NOK: 'Kr.',\n USD: '$',\n EUR: '€',\n GBP: '£',\n DKK: 'Kr.',\n SEK: 'kr',\n RON: 'RON',\n BRL: 'R$'\n};","import {ICurrencyService} from './currency.service.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {CURRENCY_SYMBOLS} from \"./currency-symbol.interface\";\n\nexport class CurrencyService extends ServiceBase implements ICurrencyService {\n\n formatMoney(value: number, withDecimal?: boolean): string {\n return this.services.sdk.formatMoney(value, withDecimal);\n }\n\n // TODO: Check if formatMinMaxBet can be called with undefined/null\n // after switching to strictNullCheck and repair the signature and code\n formatMinMaxBet(minBet: number, maxBet: number): string | null {\n if(minBet && maxBet) {\n return this.formatMoney(minBet, true) + ' - ' + this.formatMoney(maxBet, true);\n } else {\n return null;\n }\n }\n\n get currencyIso3(): string {\n return this.services.sdk.getCurrencyIso3();\n }\n\n get getCurrencySymbol(): string {\n return CURRENCY_SYMBOLS[this.currencyIso3] || this.currencyIso3;\n }\n}\n","import {\n ISendElasticEventOptions,\n IAnalyticsService,\n OrbitUserFlowAnalyticsCategory,\n OrbitUserFlowAnalyticsAction,\n OrbitUserFlowAnalyticsLabel,\n OrbitMarketingEventAnalyticsCategory,\n OrbitMarketingEventAnalyticsLabel,\n OrbitMarketingEventAnalyticsAction,\n OrbitAIFeatureAnalyticsCategory,\n OrbitAIFeatureAnalyticsAction\n} from './analytics.service.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {IElasticEventData, IStructuredLogger} from '../../../common/interfaces/structured-logging-service-interface';\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class AnalyticsService extends ServiceBase implements IAnalyticsService {\n\n sendAnalytics(\n category: string,\n action: string | undefined = undefined,\n label: string | undefined = undefined,\n value: string | undefined = undefined,\n omitStructuredLogger?: boolean\n ) {\n this.services.sdk.sendAnalytics(category, action, label, value, omitStructuredLogger);\n }\n\n\n sendTechnicalEvent(action: string, label?: string, value?: any): void {\n this.sendAnalytics('[Technical-event]', action, label, value);\n }\n\n sendOrbitUserFlowEvent(category: string | OrbitUserFlowAnalyticsCategory, action: OrbitUserFlowAnalyticsAction, label?: string | OrbitUserFlowAnalyticsLabel, value?: any): void {\n try {\n let data:ISendElasticEventOptions ={\n eventType:\"Orbit_User_Flow\",\n category:category,\n action:action,\n label:label,\n value: value\n }\n this.sendElasticInfoEvent(data, true);\n }\n catch (err){\n console.log(\"Error on Orbit sendOrbitUserFlowEvent : \" + err);\n }\n }\n\n sendOrbitMarketingEvent(category: string | OrbitMarketingEventAnalyticsCategory, action: OrbitMarketingEventAnalyticsAction, label?: string | OrbitMarketingEventAnalyticsLabel, value?: any): void {\n try {\n let data:ISendElasticEventOptions ={\n eventType:\"Orbit_Marketing\",\n category:category,\n action:action,\n label:label,\n value:value\n }\n this.sendElasticInfoEvent(data, true);\n }\n catch (err){\n console.log(\"Error on Orbit sendOrbitMarketingEvent : \" + err);\n }\n }\n\n sendOrbitAIFeatureEvent(category: string | OrbitAIFeatureAnalyticsCategory, action: OrbitAIFeatureAnalyticsAction, label?: string, value?: any): void {\n try {\n let data: ISendElasticEventOptions = {\n eventType: \"Orbit_AI_Feature\",\n category: category,\n action: action,\n label: label,\n value: value\n }\n this.sendElasticInfoEvent(data, true);\n } catch (err) {\n console.log(\"Error on Orbit sendOrbitAIFeatureEvent : \" + err);\n }\n }\n\n sendElasticInfoEvent(options: ISendElasticEventOptions, sendToDWH?: boolean) {\n const logger: IStructuredLogger = this.services.sdk.structuredLoggingService\n .getLogger()\n .addCategory(options.category)\n .addAction(options.action)\n .addLabel(options.label)\n .addValue(options.value)\n .addCustomData(options.customData);\n\n if (!Check.isNullOrUndefined(options.appID)) {\n logger.setAppID(options.appID);\n }\n\n if (sendToDWH) {\n logger.setEventType(options.eventType,'Log', 'Analytics');\n }\n else {\n logger.setEventType(options.eventType, 'Log');\n }\n\n logger.info();\n }\n\n getLogger(eventData?: IElasticEventData): IStructuredLogger {\n return this.services.sdk.structuredLoggingService.getLogger(eventData);\n }\n\n getGoogleClientID(): string {\n return this.services.sdk.getGoogleClientID();\n }\n}\n","export const SAVED_GAMES_LOCAL_STORAGE_KEY: string = \"gamesSavedByUser\";","import {GamesMap, IGameImageSize, IGamesService, RecentlyPlayedGames} from './games.service.interface';\nimport {GameInfo} from './game-info';\nimport {action, observable, makeObservable} from 'mobx';\nimport {ServiceBase} from '../ServiceBase';\nimport {Check} from '@sparkware/app-utils';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {SAVED_GAMES_LOCAL_STORAGE_KEY} from \"../../../common/const/saved-games-ls-key_const\";\nimport {SwiperGamesListConfiguration} from \"../configurations/config-data-sections/arenas.configuration\";\n\nexport class GamesService extends ServiceBase implements IGamesService {\n\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n\n makeObservable(this);\n\n this.reaction(\n () => this.services.user.isAuthorized,\n () => {\n this._updateGamesMapPromise = this._updateGamesMap()\n },\n {\n fireImmediately: true\n });\n\n this.services.sdk.events.onRecentlyPlayedGamesUpdated(this._updateRecentlyPlayedGames);\n this._initializeSavedGames();\n }\n\n //This is an in-memory copy of the games saved in local storage. We need it so that components can react to changes in the array of saved games.\n @observable.ref\n savedGameTypes: number[] = [];\n\n @action.bound\n private _setInMemorySavedGames(newSavedGames: number[]): void {\n this.savedGameTypes = newSavedGames\n }\n\n private _initializeSavedGames(): void {\n let localStorageSavedGames = this.services.localStorage.getJson(SAVED_GAMES_LOCAL_STORAGE_KEY);\n this._setInMemorySavedGames(Check.isNullOrUndefined(localStorageSavedGames) ? [] : localStorageSavedGames);\n }\n\n @observable.ref\n gamesMap: GamesMap = {};\n @action.bound\n private _setGamesMap(gamesMap: GamesMap): void {\n this.gamesMap = gamesMap;\n }\n\n @observable.ref\n recentlyPlayedGames: RecentlyPlayedGames = {\n isInitialized: false,\n gameTypes: []\n };\n\n @action.bound\n private _updateRecentlyPlayedGames(gameTypes: number[]): void {\n if(!this.recentlyPlayedGames.isInitialized\n || !this.services.sdk.getUtils().arraysAreEqual(this.recentlyPlayedGames.gameTypes, gameTypes)) {\n this.recentlyPlayedGames = {\n isInitialized: true,\n gameTypes: gameTypes\n }\n }\n }\n\n\n\n private async _buildGamesMap(sdkGamesInfo: any): Promise {\n\n let aboutTexts = await this._getGamesAboutTexts();\n\n let gamesMap: GamesMap = {};\n\n const usedGameTypesBySiteMap = this.services.configuration.usedGameTypesBySite.reduce((accumulator, gt) => {\n accumulator[gt] = true;\n return accumulator;\n }, {});\n\n Object.keys(sdkGamesInfo).forEach(gameType => {\n try {\n // filter only in-layout games\n if (usedGameTypesBySiteMap[gameType]) {\n let sdkInfo = sdkGamesInfo[gameType];\n let generalSettings = this.services.configuration.data.generalSettings;\n let gameTagInfo = (generalSettings && generalSettings.gamesSettings && generalSettings.gamesSettings.gamesTags && generalSettings.gamesSettings.gamesTags[gameType]) || {};\n\n // for now, rawGameData will contain also gameTagInfo properties - which are read by adminClient settings\n // moreover, we'll add a new property on it regarding allowSwitchToDemo\n let rawGameData = Object.assign(sdkInfo, gameTagInfo);\n let gameInfo = new GameInfo(rawGameData, this.services, aboutTexts[gameType]);\n\n gamesMap[gameInfo.gameType] = gameInfo;\n \n }\n } catch(err) {\n this.services.logger.error(`Failed to generate GameInfo for game type ${gameType}`, err);\n }\n\n });\n\n return gamesMap;\n }\n\n private _gamesAboutTexts: {[key: string]: string} | null = null;\n\n private async _getGamesAboutTexts(): Promise<{[key: string]: string}> {\n if(this._gamesAboutTexts) {\n return this._gamesAboutTexts;\n }\n let gamesAboutTextConfigPath = this.services.configuration.data.generalSettings.gamesSettings.gamesAboutTextPath;\n\n //if there is no about path (not supported in this regulation) - we prevent the http call\n if(!gamesAboutTextConfigPath){\n this._gamesAboutTexts = {};\n return this._gamesAboutTexts;\n }\n\n let gamesAboutTextUrl = '';\n\n try {\n gamesAboutTextUrl = gamesAboutTextConfigPath.replace('{currentLanguage}', this.services.language.currentLanguage);\n let aboutTextsJson = await this.services.http.get(gamesAboutTextUrl);\n\n if(Check.isNullOrUndefined(aboutTextsJson) || Object.keys(aboutTextsJson).length === 0) {\n this.services.logger.warning(`No games about texts returned from ${gamesAboutTextUrl}`);\n }\n this._gamesAboutTexts = aboutTextsJson || {};\n\n return this._gamesAboutTexts!;\n } catch (err) {\n if(err && ('statusCode' in err) && err.statusCode === 404) {\n // NB: Ignore 404s, usually for things like spa_about.json that actually shouldn't exist.\n return {};\n }\n this.services.logger.error(`Failed to read games about texts from ${gamesAboutTextUrl}`, err);\n return {};\n }\n }\n\n private _updateGamesMapPromise: Promise = Promise.resolve();\n\n getGamesMapUpdatePromise(): Promise {\n return this._updateGamesMapPromise;\n }\n\n private async _updateGamesMap(): Promise {\n let usedGameTypesBySite = this.services.configuration.usedGameTypesBySite || [];\n if(usedGameTypesBySite.length === 0) {\n this.services.logger.error(`configuration.usedGameTypesBySite returned empty array`);\n return;\n }\n\n const gamesMap = await this._getGamesInfoMap(usedGameTypesBySite);\n\n this._setGamesMap(gamesMap);\n }\n\n async _getGamesInfoMap(gameTypes: number[]): Promise {\n try {\n let sdkGamesInfo = await this.services.sdk.getGamesInfo(gameTypes);\n \n return await this._buildGamesMap(sdkGamesInfo);\n } catch (err) {\n this.services.logger.error(`sdk.getGamesInfo failed in GamesService.getGamesInfo`, err);\n return {};\n }\n }\n\n async getGamesInfoMap(gameTypes: number[]): Promise {\n if (!gameTypes || gameTypes.length === 0) {\n return {};\n }\n\n // fill data from cache (if cache found)\n if (Object.keys(this.gamesMap).length > 0) {\n const inCacheGames = gameTypes.filter((gt) => this.gamesMap[gt]);\n const result = inCacheGames.reduce((acc, gt) => {acc[gt] = this.gamesMap[gt]; return acc;}, {});\n return result;\n } else {\n // otherwise fill it from SDK\n return this._getGamesInfoMap(gameTypes);\n }\n }\n\n async getGamesInfoForHistory(gameTypes: number[]): Promise {\n let sdkGamesInfo = await this.services.sdk.getGamesInfoForHistory(gameTypes);\n\n let gamesMap: GamesMap = {};\n Object.keys(sdkGamesInfo).forEach(gameType => {\n let rawGameData = Object.assign(sdkGamesInfo[gameType], this.gamesMap[gameType]);\n gamesMap[gameType] = new GameInfo(rawGameData, this.services, '')\n });\n return gamesMap;\n }\n\n async getGamesInfoArray(gameTypes: number[]): Promise {\n let gamesMap = await this.getGamesInfoMap(gameTypes);\n\n const result: GameInfo[] = [];\n for(let i = 0; i < gameTypes.length; i++) {\n const gameType = gameTypes[i];\n if (gamesMap[gameType]) {\n result.push(gamesMap[gameType]);\n }\n }\n return result;\n }\n\n async getGameInfo(gameType: number) {\n const gamesMap = await this.getGamesInfoMap([gameType]);\n if(gamesMap) {\n return gamesMap[gameType];\n } else {\n return null;\n }\n }\n\n async getCorrelatedGames(gameType: number, numberOfGames: number): Promise {\n try {\n return await this.services.sdk.getCorrelatedGames(gameType, numberOfGames);\n } catch (err) {\n this.services.logger.error(`Failed to get from SDK the correlated games for game type ${gameType}`, err);\n return [];\n }\n }\n\n getGameImageExpectedSizes(useSquareIcons?: boolean, animated?: boolean): IGameImageSize {\n if (useSquareIcons) {\n if (animated) {\n return {\n width: 210,\n height: 292\n };\n }\n return {\n width: 400,\n height: 555\n };\n }\n\n return {\n width: 210,\n height: 210\n };\n }\n\n saveGame(gameType: number): void {\n if (this.savedGameTypes.indexOf(gameType) >= 0) {\n return;\n }\n\n let newSavedGames: number[] = [gameType, ...this.savedGameTypes].slice(0, this._MAX_SAVED_GAMES);\n this.services.localStorage.setJson(SAVED_GAMES_LOCAL_STORAGE_KEY, newSavedGames);\n this._setInMemorySavedGames(newSavedGames)\n }\n\n removeSavedGame(gameType: number): void {\n let newSavedGames: number[] = this.savedGameTypes.filter(gt => gt !== gameType);\n this.services.localStorage.setJson(SAVED_GAMES_LOCAL_STORAGE_KEY, newSavedGames);\n this._setInMemorySavedGames(newSavedGames)\n }\n\n private _MAX_SAVED_GAMES: number = 10; // Max number of games that can be saved at a given time.\n private _DAILY_INCREMENT_SAVED_COUNTER: number = 2; // The fake counter (per gameType) will increase by this value per day passed since _START_DATE\n private _INFERIOR_THRESHOLD_BASE_COUNTER: number = 100;\n private _SUPERIOR_THRESHOLD_BASE_COUNTER: number = 1000;\n private _START_DATE: Date = new Date('April 12, 2024 00:00:00');\n\n //We generate a number in the _INFERIOR_THRESHOLD_BASE_COUNTER - _SUPERIOR_THRESHOLD_BASE_COUNTER interval based on the gametype.\n // Then, to that number we add _DAILY_INCREMENT_SAVED_COUNTER * (days passed since _START_DATE)\n public generateTimesSavedCounterForGame(gameType: number): number {\n let hash = this.services.tools.getHash(gameType.toString());\n\n let daysSinceStart = Math.round((new Date().getTime() - this._START_DATE.getTime())/ (1000 * 3600 * 24));\n\n let baseHash = Math.abs(hash) % (this._SUPERIOR_THRESHOLD_BASE_COUNTER - this._INFERIOR_THRESHOLD_BASE_COUNTER) + this._INFERIOR_THRESHOLD_BASE_COUNTER;\n\n return baseHash + (daysSinceStart * this._DAILY_INCREMENT_SAVED_COUNTER);\n }\n\n public async showAllSavedGamesDrawer(): Promise {\n const savedGamesSwiperConfig: SwiperGamesListConfiguration = {\n gamesId: this.savedGameTypes,\n display: true,\n title: this.services.translation.translate(\"MY_SAVED_GAMES\"),\n useSquareIcons: true\n };\n\n await (await this.services.verticalGamesList).renderList(savedGamesSwiperConfig);\n }\n}\n","import {ConfigurationEvaluationContext} from './evaluation/configuration-evaluation-context/configuration-evaluation-context';\nimport {PropertiesEvaluator} from './evaluation/properties-evaluator/properties-evaluator';\nimport {IConfigurationData} from './configuration-data.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {ServiceBase} from '../ServiceBase';\nimport {IConfigurationService} from './configuration.service.interface';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {NEW_GAMES_ARENA_NAME, NEW_LIVE_CASINO_ARENA_NAME} from '../arenas/arena-consts';\nimport { observable, runInAction, makeObservable } from 'mobx';\nimport {ApplicationStartupConfigurations} from '../../app-bootstrap/config-interfaces/application-startup.configurations';\nimport {IConfigurationEvaluationDataProvider} from './evaluation/configuration-evaluation-context/configuration-evaluation-data-provider.interface';\nimport {injectAdminArenas} from './inject-admin-arenas';\nimport {HomePageHeaderArena} from \"./config-data-sections/home-page.configuration\";\nimport {IServicesConfigurations} from './config-data-sections/services-configurations';\nimport {ListConfiguration, SwiperGamesListConfiguration} from \"./config-data-sections/arenas.configuration\";\n\n\ntype GameTypesMap = {[key: number]: number};\n\nexport class ConfigurationsService extends ServiceBase implements IConfigurationService {\n\n startupConfiguration: ApplicationStartupConfigurations;\n\n constructor(services: IServiceFactoryExtended, startupConfigs: ApplicationStartupConfigurations) {\n super(services);\n\n makeObservable(this);\n\n this.startupConfiguration = startupConfigs;\n\n this._createConfigData();\n }\n\n private _getConfigEvaluationContextServices(): IConfigurationEvaluationDataProvider {\n return {\n admin: this.startupConfiguration.admin,\n configurationPath: this.startupConfiguration.configurationPath,\n getLauncherGames: () => this.services.launcher.getTestedGames(),\n getSegmentValue: (segmentName) => this.services.segmentation.getSegmentValue(segmentName),\n logger: this.services.logger\n };\n }\n\n private _createConfigData(): void {\n let originalConfigData = this.startupConfiguration.orbit.config;\n if (this.startupConfiguration.admin && this.startupConfiguration.admin.arenas) {\n injectAdminArenas(originalConfigData, this.startupConfiguration.admin.arenas);\n }\n\n let context = new ConfigurationEvaluationContext(this._getConfigEvaluationContextServices());\n let configEvaluator = PropertiesEvaluator.fromRoot(originalConfigData, context);\n let data = configEvaluator.evaluate(context);\n this._defineCustomConfigProperty(data,\n 'allGamesTypes',\n () => {\n let gameTypes: number[] = [];\n let gamesTags = (data.generalSettings && data.generalSettings.gamesSettings && data.generalSettings.gamesSettings.gamesTags) || {};\n Object.getOwnPropertyNames(gamesTags).forEach(gt => {\n let gameType = parseInt(gt);\n if (!isNaN(gameType)) {\n gameTypes.push(gameType);\n }\n });\n return gameTypes;\n });\n\n\n runInAction(() => {\n this.data = data as IConfigurationData;\n });\n }\n\n\n private _defineCustomConfigProperty(configData: unknown, propertyName: string, evaluator: () => unknown) {\n Object.defineProperty(configData, propertyName, {\n get: evaluator,\n configurable: false\n });\n\n }\n\n @observable.ref\n data: IConfigurationData;\n\n get userSelectedState(): string {\n return this.startupConfiguration.userSelectedState;\n }\n\n get cmsPublicationId(): number {\n return this.startupConfiguration.b2c.publicationId;\n }\n\n get usedGameTypesBySite(): number[] {\n\n let gameTypesMap = {...this._getUsedGamesByHomePage(), ...this._getUsedGamesByArenas(), ...this._getUsedGameTypesByNewLiveGamesArena()};\n\n return Object.values(gameTypesMap);\n }\n\n private _getUsedGamesByHomePage(): GameTypesMap {\n let result: GameTypesMap = {};\n (this.data.homePage.gamesLists || []).forEach(gamesList => {\n if (gamesList.display) {\n let gamesIds = gamesList.gamesId || [];\n if (Check.isArray(gamesIds)) {\n gamesIds.forEach(gameType => {\n result[gameType] = gameType;\n })\n }\n\n }\n });\n\n return result;\n }\n\n private _getUsedGamesByArenas(): GameTypesMap {\n let result: GameTypesMap = {};\n Object.keys(this.data.arenas).forEach(arenaName => {\n let arenaConfig = this.data.arenas[arenaName];\n // game types from swipers\n (arenaConfig.swiperGamesList || []).forEach(swiperConfig => {\n if (swiperConfig.display) {\n let gamesIds = swiperConfig.gamesId || [];\n if (Check.isArray(gamesIds)) {\n gamesIds.forEach(gameType => {\n result[gameType] = gameType;\n });\n }\n\n }\n });\n\n // game types from all games grid\n (arenaConfig.allGamesGrid || []).forEach(gamesGridConfig => {\n if (gamesGridConfig.display) {\n let gamesIds = gamesGridConfig.gamesId || [];\n if (Check.isArray(gamesIds)) {\n gamesIds.forEach(gameType => {\n result[gameType] = gameType;\n });\n }\n }\n });\n });\n\n return result;\n }\n\n\n private _getUsedGameTypesByNewLiveGamesArena(): GameTypesMap {\n let result: GameTypesMap = {};\n\n let liveCasinoArenaConfig = this.data.arenas[NEW_LIVE_CASINO_ARENA_NAME];\n if (!liveCasinoArenaConfig) {\n return result;\n }\n\n let gamesIds = liveCasinoArenaConfig.arenas && liveCasinoArenaConfig.arenas.gamesId;\n\n if (Check.isArray(gamesIds)) {\n gamesIds.forEach(gameTypeConfig => {\n if (gameTypeConfig.display) {\n result[gameTypeConfig.gameId] = gameTypeConfig.gameId;\n }\n });\n }\n\n\n\n let popularTablesConfig = liveCasinoArenaConfig.popularTables;\n if (Check.isArray(popularTablesConfig)) {\n popularTablesConfig.forEach(tableConfig => {\n let tableGamesIds = tableConfig.gamesId || [];\n if (Check.isArray(tableGamesIds)) {\n tableGamesIds.forEach(gameType => result[gameType] = gameType);\n }\n });\n }\n\n return result;\n }\n\n resolveConfigurationValue(fullPath: string): string {\n let objectValue: any = this.data;\n let fullPathArray = fullPath.split('.');\n\n for (let objectKey of fullPathArray) {\n objectValue = objectValue[objectKey];\n }\n\n return (objectValue as string) || '';\n }\n\n\n buildConfigUrl(fileName: string): string {\n let configurationPath = this.startupConfiguration.configurationPath;\n if (!configurationPath.endsWith('/')) {\n configurationPath += '/';\n }\n return configurationPath + fileName;\n }\n\n resolveGameImagePath(imageFileName: string): string {\n if (Check.isEmpty(imageFileName)) {\n return '';\n }\n\n let imagesBasePath = this.startupConfiguration.sdk.config.ExtraProperties.paths.gamesImages; //paths.gamesImages is used by cypress environment\n if (imagesBasePath) {\n if (!imagesBasePath.endsWith('/')) {\n imagesBasePath += '/';\n }\n return imagesBasePath + imageFileName;\n } else {\n let serverPath = this.startupConfiguration.sdk.config.ExtraProperties.paths.server;\n if (!serverPath.endsWith('/')) {\n serverPath += '/';\n }\n return serverPath + 'gamesImages/' + imageFileName;\n }\n }\n\n resolveJsFilePath(fileName: string): string {\n if (Check.isEmpty(fileName)) {\n return '';\n }\n let serverPath = this.startupConfiguration.sdk.config.ExtraProperties.paths.server;\n let path = serverPath ? serverPath : this.services.window.origin;\n if (!path.endsWith('/')) {\n path += '/';\n }\n return (path + `js/${fileName}`);\n }\n\n getFontsPath(): string {\n return new URL(this.startupConfiguration.sdk.config.ExtraProperties.paths.server + \"/assets/fonts/\").href;\n }\n\n getGamesListByJackpotId(id: string): SwiperGamesListConfiguration {\n\n const homePageGamesLists = this.data.homePage.gamesLists || [];\n for (let i = 0; i < homePageGamesLists.length; i++) {\n let gamesList = homePageGamesLists[i];\n if (gamesList.jackpotWidget?.jackpotId) {\n let gamesIds = gamesList.gamesId || [];\n if (Check.isArray(gamesIds) && gamesList.jackpotWidget.jackpotId.toString() === id) {\n return gamesList;\n }\n }\n }\n\n return null;\n }\n\n getSelfUpdatedByNewestGamesList(): ListConfiguration {\n const newGameArenaConfig = this.data.arenas[NEW_GAMES_ARENA_NAME];\n if (!newGameArenaConfig) {\n return null;\n }\n\n const gamesLists: ListConfiguration[] = (newGameArenaConfig.swiperGamesList || []).concat(newGameArenaConfig.allGamesGrid || []);\n const firstSelfUpdatedByNewest = gamesLists.find(listConfig => listConfig.display && listConfig.isSelfUpdatedByNewest);\n return firstSelfUpdatedByNewest;\n }\n\n private _getCurrentArenaLists() {\n const arenaType = this.services.routing.currentRoute.data?.arenaType;\n const lists = Check.isNullOrUndefined(arenaType) || arenaType === \"homePage\" ?\n this.data.homePage.gamesLists :\n this.services.configuration.data.arenas[arenaType].swiperGamesList;\n return lists;\n }\n\n getGamesListByTitle(title: string): SwiperGamesListConfiguration {\n const lists = this._getCurrentArenaLists();\n return lists?.find(list => list.title.toUpperCase() === title.toUpperCase());\n }\n\n getGamesListById(id: number): SwiperGamesListConfiguration {\n const lists = this._getCurrentArenaLists();\n return lists?.find(list => list.listId === id);\n }\n\n getHomePageHeaderArenas(): HomePageHeaderArena[] {\n let homePageHeaderArenas: HomePageHeaderArena[] = [];\n this.data.homePage.headerArenasOrder.forEach(name => {\n const arenaHeader = this.data.arenas[name].homepageHeader;\n if (arenaHeader) {\n homePageHeaderArenas.push(arenaHeader);\n }\n });\n return homePageHeaderArenas;\n }\n\n getHomePageHeaderArenasByUserOrientation(arenaNames: string[]): HomePageHeaderArena[] {\n let orderedArenas: HomePageHeaderArena[] = [];\n arenaNames.forEach(arenaName => {\n const arenaConfig: HomePageHeaderArena = this.data.arenas[arenaName] && this.data.arenas[arenaName].homepageHeader;\n if (arenaConfig) {\n orderedArenas.push(arenaConfig);\n }\n });\n return orderedArenas;\n }\n\n get servicesConfigs(): IServicesConfigurations {\n return this.services.sdk.getConfigs();\n }\n}\n","import {RedTigerJackpotWidgetConfiguration} from './red-tiger-jackpot-widget.configuration';\nimport {JackpotWidgetConfiguration} from './jackpot-widget.configuration';\nimport {HomePageHeaderArena} from \"./home-page.configuration\";\nimport {LinkToOfferConfiguration} from \"./link-to-offer.configuration\";\nimport {NullableUndefined} from \"../../../../common/types/nullable-types\";\nimport {\n CategoryDefinitionId\n} from \"../../games-filter/filters-categories-definitions/filter-category-definition.interface\";\nimport {GAME_GROUP} from \"../../../../common/const/game_groups_consts\";\nimport { TitanJackpotWidgetConfiguration } from './titan-jackpot-widget.configuration';\n\nexport interface InfoSideBarConfiguration {\n readonly infoImage: string;\n readonly infoTitle: string;\n readonly infoText: string;\n}\n\nexport enum ApiListType {\n TOP_PICKS = \"TOP_PICKS\",\n NEW_GAMES = \"NEW_GAMES\",\n PLAYERS_LIKE_YOU = \"PLAYERS_LIKE_YOU\",\n RECENTLY_PLAYED = \"RECENTLY_PLAYED\",\n STATIC_VIDEO = \"STATIC_VIDEO\",\n LIVE_CASINO_VIDEO = \"LIVE_CASINO_VIDEO\",\n BECAUSE_YOU_PLAYED = \"BECAUSE_YOU_PLAYED\",\n}\n\nexport interface ListConfiguration {\n readonly title: string;\n readonly display: boolean;\n readonly gamesId: number[];\n readonly isSelfUpdatedByNewest?: boolean;\n readonly forceRoundIcons?: boolean;\n}\n\n\n\nexport interface SeoSectionConfiguration {\n display: boolean;\n componentID: string;\n templateID: string;\n fallbackComponent: string;\n}\n\nexport interface HeaderArenaConfiguration {\n display: boolean;\n title: string;\n image: string;\n link: string;\n}\n\nexport type AnimatedTopImageEngine = \"pixi\" | \"lottie\";\nexport interface AnimatedTopImageConfiguration {\n url: string;\n engine?: AnimatedTopImageEngine;\n}\n\nexport interface ArenaCommonConfiguration {\n topImage: string;\n animatedTopImage?: AnimatedTopImageConfiguration;\n title: string;\n seoSection: SeoSectionConfiguration;\n}\n\nexport interface IVideoSlidesFilter {\n translationKey: string;\n category: string; // to be replaced with CategoryDefinitionId when actual filtering logic is done\n id: string; // to be replaced with CategoryDefinitionId when actual filtering logic is done\n icon?: string;\n}\n\n\nexport type VideoSlideCategory = \"videoStream\" | \"liveStream\" | \"banner\";\nexport interface IVideoSlidesRuleConfig {\n category: VideoSlideCategory;\n slidesChunkSize: number;\n}\n\nexport interface VideoSlidesArenaConfiguration extends ArenaCommonConfiguration{\n filters: IVideoSlidesFilter[];\n slidesRules: IVideoSlidesRuleConfig[];\n promotionalBanner?: CasinoArenaPromotionalBannerConfiguration;\n header?: VideoSlidesArenaHeaderConfiguration;\n}\nexport interface VideoSlidesArenaHeaderConfiguration {\n licenseStatus?: {\n text: string;\n display: boolean;\n }\n}\nexport interface CasinoArenaPromotionalBannerConfiguration {\n templateID: string;\n componentID: string;\n displayListPlace?: number;\n displayRowPlace?: number;\n displayTablePlace?: number;\n fallbackComponent?: string;\n bannerAdminPlaceholderId?: string\n}\n\nexport interface VideoSlidesFilterWidgetConfiguration {\n displayListPlace?: number;\n advancedFilterIdList: string[];\n}\n\nexport interface CasinoArenaConfiguration extends ArenaCommonConfiguration {\n promotionalBanner?: CasinoArenaPromotionalBannerConfiguration;\n videoSlidesFilterPreview?: VideoSlidesFilterWidgetConfiguration;\n linkToOffer?: LinkToOfferConfiguration;\n filters: NullableUndefined;\n advancedFilters?: {\n categories: {\n id: CategoryDefinitionId;\n }[];\n };\n infoSideBar: InfoSideBarConfiguration;\n swiperGamesList: SwiperGamesListConfiguration[];\n allGamesGrid: ArenaGamesGridConfiguration[];\n orderListsByAI?: boolean;\n arenaType?: string;\n homepageHeader?: HomePageHeaderArena;\n}\n\nexport interface SwiperGamesListConfiguration extends ListConfiguration {\n readonly title: string;\n readonly display: boolean;\n readonly gamesId: number[];\n readonly gamesAdminRefKey?: string;\n readonly templateType?: string;\n readonly redTigerWidget?: RedTigerJackpotWidgetConfiguration;\n readonly titanJackpotWidget?: TitanJackpotWidgetConfiguration;\n readonly jackpotWidget?: JackpotWidgetConfiguration;\n readonly titleIconClassName?: string;\n readonly useSquareIcons?: boolean;\n readonly showNumberBadge?: boolean;\n readonly useAISortedList?: boolean;\n readonly ignoreNumberOfGamesInAISorting?: number;\n readonly forceListInLayout?: boolean;\n readonly seeAll?: string;\n readonly hasExploreButton?: boolean;\n readonly listId?: number; // should be mandatory??\n readonly shouldInjectUsernameInTitle?: boolean;\n readonly apiListType?: ApiListType;\n readonly allowedGameGroups?: GAME_GROUP[];\n}\n\nexport interface LiveCasinoHeaderConfiguration {\n display: boolean;\n gameId: number;\n image: string;\n}\n\nexport interface LiveCasinoPromotionalBannerConfiguration {\n displayTablePlace: number;\n displayRowPlace: number;\n componentID: string;\n templateID: string;\n bannerAdminPlaceholderId?: string;\n}\n\nexport interface LiveCasinoConfiguration extends ArenaCommonConfiguration {\n promotionalBanner: LiveCasinoPromotionalBannerConfiguration;\n linkToOffer?: LinkToOfferConfiguration\n arenas: {\n gamesId: LiveCasinoHeaderConfiguration[];\n },\n popularTables: LiveCasinoPopularTableConfiguration[];\n customLayout: string;\n}\n\nexport interface NewLiveCasinoConfiguration extends ArenaCommonConfiguration {\n promotionalBanner: LiveCasinoPromotionalBannerConfiguration;\n arenas: HeaderFilterConfiguration[],\n allGamesGrid: ArenaGamesGridConfiguration[];\n customLayout: string;\n useAISortedList: boolean;\n linkToOffer?: LinkToOfferConfiguration;\n}\n\nexport interface LiveCasinoPopularTableConfiguration {\n title: string;\n gamesId: number[];\n useAISortedList?: boolean;\n ignoreNumberOfGamesInAISorting?: number;\n}\n\nexport interface ArenaGamesGridConfiguration extends ListConfiguration {\n readonly listId: number;\n readonly title: string;\n readonly display: boolean;\n readonly useAISortedList?: boolean;\n readonly ignoreNumberOfGamesInAISorting?: number;\n readonly gamesId: number[];\n readonly templateType?: string;\n readonly gamesAdminRefKey?: string;\n readonly useSquareIcons?: boolean;\n}\n\nexport interface HeaderFilterConfiguration {\n display: boolean;\n title: string;\n image: string;\n filter: string;\n seoPage: string;\n isActiveTabDefault?: boolean;\n maxGamesToShow?: number;\n banners?: {\n promotionalBanner: {\n templateID: string,\n componentID: string,\n bannerAdminPlaceholderId?: string\n }\n }\n}\n\nexport type ArenaConfiguration = CasinoArenaConfiguration & LiveCasinoConfiguration & NewLiveCasinoConfiguration & VideoSlidesArenaConfiguration;\n\nexport type ArenasConfiguration = {[key: string]: ArenaConfiguration};\n\n","import {action, makeObservable, observable} from \"mobx\";\nimport {ISoundUserPreferences} from \"./user-sound-preferences.interface\";\n\nexport class SoundUserPreferences implements ISoundUserPreferences {\n @observable.ref\n isMuted: boolean = true;\n\n @action.bound\n setIsMuted(v: boolean) {\n this.isMuted = v;\n }\n\n @action.bound\n toggle() {\n this.isMuted = !this.isMuted;\n }\n\n constructor() {\n makeObservable(this);\n }\n}\n","import {SoundUserPreferences} from \"./user-sound-preferences\";\nimport {ISoundUserPreferences} from \"./user-sound-preferences.interface\";\n\nexport class UserPreferences {\n sound: ISoundUserPreferences = new SoundUserPreferences();\n}\n","import {IUserService} from './user.service.interface';\nimport {action, observable, makeObservable} from 'mobx';\nimport {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {UserData} from '../sdk/sdk.service.interface';\nimport {Check, TimeSpan} from '@sparkware/app-utils';\nimport {OnOauthStateChangedParams} from '../sdk/sdk-events';\nimport {GetPlatformTokenResponse} from \"../sdk/cgp-sdk.interface\";\nimport {IAutoLoginParams} from '../../../common/interfaces/autologin-params.interface';\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\nimport MIGRATION from \"../../../common/const/migration_consts\";\nimport {NullableString} from '../../../common/types/nullable-types';\nimport {GamesOpenSessionsKind} from \"../games-open-sessions/games-open-sessions-kind.enum\";\nimport {UserPreferences} from './model/user-preferences';\nimport {LocalStorageKeys} from \"../storage/local-storage-keys\";\nimport {IInactivityTimeoutSettings} from \"./model/inactivity-timeout-settings\";\n\nconst AUTOLOGIN_QUERY_PARAM = 'UserInfo';\nconst LAST_LOGIN_QUERY_PARAM = \"LastLogin\";\n\nexport class UserService extends ServiceBase implements IUserService {\n\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._updateUserData({});\n this.services.sdk.events.onOAuthStateChanged(this._updateUserData);\n\n this.reaction(() => this.isAuthorized, (isAuthorized) => {\n if(!isAuthorized) {\n this.services.localStorage.removeItem(LocalStorageKeys.lastLogin);\n }\n }, {\n fireImmediately: true\n })\n }\n\n preferences: UserPreferences = new UserPreferences();\n\n @observable.ref\n isAuthorized: boolean = false;\n @observable.ref\n logoutReason: number = null;\n\n\n @observable.ref\n private _userData: UserData = {};\n\n @action.bound\n private _updateUserData(params: OnOauthStateChangedParams) {\n\n params = params || {};\n\n this.isAuthorized = this.services.sdk.isAuthorized;\n\n if (Check.isNullOrUndefined(params.logoutReason)) {\n this.logoutReason = null;\n } else {\n this.logoutReason = params.logoutReason;\n }\n\n const userData = (this.services.sdk.userData || {}) as UserData;\n\n if (!this.isAuthorized) {\n const playerStatus = this.services.localStorage.getItem('playerStatus');\n this.services.window.scrollTo(0, 0);\n this._userData = {...userData, statusGroupId: (playerStatus ? parseInt(playerStatus) : undefined)};\n } else {\n this._userData = userData;\n this.services.localStorage.setItem('playerStatus', userData.statusGroupId);\n }\n\n this._updateSegments();\n }\n\n @action.bound\n private _updateSegments() {\n this.segments = {\n IsAuthorized: this.isAuthorized,\n statusGroupId: this._userData.statusGroupId || 0,\n IsVIP: this._userData.IsVIP || false,\n GenderId: this._userData.GenderId || null,\n DaysSinceRegistration: this.daysSinceRegistration,\n RegistrationCountry: this.registrationCountry?.toLowerCase()\n }\n }\n\n @observable.ref\n segments = {};\n\n\n get hasActiveChallenges(): boolean {\n return this.services.sdk.activeChallengeCount > 0;\n }\n\n\n get name(): string {\n return this._userData.userName || '';\n }\n\n\n get cid(): string {\n return this._userData.cid || '';\n }\n\n get registrationCountry(): string {\n return this._userData.registrationCountry;\n }\n\n get joinDate(): string {\n return this._userData.joinDate;\n }\n\n private _getLastLoginFromQueryParams(): NullableString {\n let lastLogin = this.services.location.currentUri.queryParams.getParamValue(LAST_LOGIN_QUERY_PARAM)?.trim();\n if(lastLogin) {\n this.services.localStorage.setItem(LocalStorageKeys.lastLogin, lastLogin);\n } else {\n lastLogin = this.services.localStorage.getItem(LocalStorageKeys.lastLogin);\n }\n\n if(!lastLogin) {\n return null;\n }\n\n const seconds = parseInt(lastLogin);\n\n if(Check.isNumber(seconds)) {\n return this.services.regulation.current.formatLastLoginFromUnixTimeStampInSeconds(seconds);\n } else {\n this.services.logger.error(`lastLogin from query params is not a number: ${lastLogin}`);\n return null;\n }\n }\n\n get lastLogin(): NullableString {\n try {\n const lastLoginFromQueryParam = this._getLastLoginFromQueryParams();\n\n if(lastLoginFromQueryParam) {\n return lastLoginFromQueryParam;\n }\n\n if (Check.isNullOrUndefined(this._userData.lastLogin) &&\n Check.isNullOrUndefined(this._userData.lastLoginDateInTimeZone)) {\n return null\n } else { \n return this.services.time.formatLastLogin(this._userData.lastLogin, this._userData.lastLoginDateInTimeZone);\n }\n } catch (err) {\n this.services.logger.error('Failed to parse last login', err);\n return null;\n }\n\n }\n\n get userData() {\n return this._userData;\n }\n\n get isVip(): boolean {\n return (this._userData.statusGroupId > 0 && this._userData.statusGroupId !== 4);\n }\n\n get timeSinceRegistration(): TimeSpan {\n if (!this._userData)\n return null;\n if (!this._userData.timeSinceRegistration)\n return null;\n return TimeSpan.parse(this._userData.timeSinceRegistration);\n }\n\n get daysSinceRegistration(): number {\n if (this.timeSinceRegistration)\n return this.timeSinceRegistration.totalDays;\n\n return Infinity;\n }\n\n get playerRMSStatus(): number {\n return this._userData.playerRMStatus;\n }\n\n get countryName(): string {\n return this.services.sdk.getCountryName();\n }\n\n getAutoLoginToken(): Promise {\n return this.services.sdk.getAutoLoginToken().then(data => data.token);\n }\n\n getPlatformToken(): Promise {\n return this.services.sdk.getPlatformToken();\n }\n\n getFirebaseToken(): string {\n return this.services.sdk.getFirebaseToken();\n }\n\n async openLogin(marketingParams?: MarketingParams): Promise {\n await this.services.sdk.openLoginForm(marketingParams);\n }\n\n isDocUploadRequired(): boolean {\n return this.services.sdk.getAccountData()?.IsDocUploadRequired;\n }\n\n logout(): Promise {\n return this.services.sdk.logout();\n }\n\n get genderTitle(): string {\n switch (this._userData.GenderId) {\n case 1:\n return 'MR_TITLE';\n case 2:\n return 'MRS_TITLE';\n default:\n return '';\n }\n }\n\n\n private _isInAutoLogin(): boolean {\n return this.services.sdk.isInAutologin();\n }\n\n waitForAutoLogin(): Promise {\n\n if (!this._isInAutoLogin()) {\n return Promise.resolve();\n }\n\n\n return this.services.sdk.waitForAutologin()\n .then(() => {\n return this._removeAutoLoginTokenFromUrl()\n .catch((err) => {\n this.services.logger.error('Remove auto login token from URL failed!', err);\n });\n\n });\n\n }\n\n async ensureUserIsLoggedIn(initiator: string): Promise {\n await this.waitForAutoLogin();\n\n if (!this.isAuthorized) {\n try {\n await this.openLogin();\n } catch (err) {\n this.services.logger.debug(initiator + \" - login cancelled or failed.\", err);\n }\n }\n return this.isAuthorized;\n }\n\n\n private _removeAutoLoginTokenFromUrl(): Promise {\n let paramToBeRemoved: string = AUTOLOGIN_QUERY_PARAM;\n const currentUri = this.services.location.currentUri;\n if (currentUri.queryParams.hasParam(MIGRATION.MIGRATION_TOKEN_QUERY_PARAM)\n && currentUri.queryParams.getParamValue(MIGRATION.MIGRATION_SOURCE_QUERY_PARAM)?.toLowerCase() === MIGRATION.MIGRATION_SOURCE_QUERY_PARAM_VALUE) {\n paramToBeRemoved = MIGRATION.MIGRATION_TOKEN_QUERY_PARAM;\n }\n const urlWithoutToken = currentUri.removeSearchParam(paramToBeRemoved).toString();\n return this.services.location.replace(urlWithoutToken);\n }\n\n\n runAutoLogin(autoLoginParams: IAutoLoginParams): Promise {\n return this.services.sdk.runAutoLogin(autoLoginParams);\n }\n\n panicRestrictUser(): Promise {\n const offset = this.services.time.getTimezoneOffset();\n\n return this.services.api.userController.selfExclusionPanic({\n timezoneOffset: offset,\n productPackage: this.services.sdk.getProductPackageId()\n }).then(() => {\n this.logout();\n }).catch((err) => {\n this.services.sdk.structuredLoggingService\n .getLogger()\n .addCategory(\"PANIC SELF EXCLUSION\")\n .addAction(\"SelfExclusion fails\")\n .addValue(JSON.stringify(err))\n .error();\n this.logout();\n this.services.logger.error('Self Exclusion Panic Failed.', err);\n });\n }\n\n get loginIP(): string | null {\n return this.services.sdk.tokenInfo?.loginIP;\n }\n\n async getOpenSessionsRealMoneyBalance(): Promise {\n if (!this.isAuthorized) {\n return 0;\n }\n\n\n const openSessions = await this.services.api.openSessionsController.getOpenSessions({\n openSessionsKind: GamesOpenSessionsKind.Real\n });\n\n return openSessions.sessionDetails.sum(s => s.Credit);\n\n }\n\n getInactivityTimeoutSettings(): IInactivityTimeoutSettings {\n return this.services.sdk.getInactivityTimeoutSettings();\n }\n\n setInactivityTimeout(timeout: TimeSpan): void {\n this.services.sdk.setInactivityTimeout(timeout);\n }\n\n\n\n getDefaultAccessTokenLifeTime(): TimeSpan {\n try {\n return TimeSpan.parse(this.services.configuration.servicesConfigs.OAuth2.defaultAccessTokenLifeTime)\n } catch (err) {\n this.services.logger.error(`Failed to parse defaultAccessTokenLifeTime ${this.services.configuration.servicesConfigs.OAuth2.defaultAccessTokenLifeTime}`, err);\n return TimeSpan.fromMinutes(60);\n }\n\n }\n}\n","import {ISegmentationAggregatorService} from './segmentation-aggregator.service.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport { action, observable, makeObservable } from 'mobx';\nimport {mediaQueries} from \"../media-query/media-queries\";\nimport {IMediaQueries} from '../media-query/media-queries.interface';\n\nexport class SegmentationAggregatorService extends ServiceBase implements ISegmentationAggregatorService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n\n makeObservable(this);\n\n this._subscribeReactions();\n }\n\n private async _subscribeReactions(): Promise {\n const cmsSegmentation = await this.services.cmsSegmentation;\n const progressiveWebApp = await this.services.progressiveWebApp;\n this.reaction(\n () => {\n return {\n userSegments: this.services.user.segments,\n cmsSegments: cmsSegmentation.segments,\n deviceSegments: this.services.device.segments,\n isMobile: this.services.device.isMobile,\n mediaQueryChange: this.services.mediaQuery.lastMediaChange,\n isMiniOrbit: this.services.miniOrbit.isEnabled,\n isPWAInstallable: progressiveWebApp.isPWAInstallable,\n videoSlidesEnabled: this.services.videoSlides.shouldBeDisplayed,\n }\n },\n () => {\n this._updateSegments();\n },\n {\n fireImmediately: true\n });\n }\n\n private async _updateSegments(): Promise {\n const cmsSegmentation = await this.services.cmsSegmentation;\n const extraSegments = await this._getExtraSegments();\n this._setAllSegments({\n ...cmsSegmentation.segments,\n ...this.services.user.segments,\n ...this.services.device.segments,\n ...this._getMediaQuerySegments,\n ...extraSegments});\n }\n\n @observable.ref\n private _allSegments: Record = {};\n\n @observable.ref\n segmentsLastUpdate: number = null;\n\n\n @action.bound\n private _setAllSegments(allSegments) {\n this._allSegments = allSegments;\n this.segmentsLastUpdate = Date.now();\n }\n\n getSegmentValue(name: string): any {\n let segmentValue = this._allSegments[name];\n\n if(Check.isUndefined(segmentValue)) {\n this.services.logger.debug(`Segment ${name} doesn't exists in the segments list!`);\n }\n\n return segmentValue;\n }\n\n private get _getMediaQuerySegments() {\n const tempRecords = {};\n (Object.keys(mediaQueries) as (keyof IMediaQueries)[]).forEach(mediaQueryName => {\n tempRecords[mediaQueryName] = this.services.mediaQuery[mediaQueryName];\n });\n return tempRecords;\n }\n\n private async _getExtraSegments() {\n const progressiveWebApp = await this.services.progressiveWebApp;\n return {\n env: this.services.configuration.startupConfiguration.sdk.config.ExtraProperties.env,\n countryCode: this.services.configuration.startupConfiguration.country,\n brandID: this.services.sdk.getBrandID(),\n subBrandID: this.services.sdk.getSubBrandID(),\n regulationID: this.services.regulation.getRegulationCode(),\n iso3: this.services.language.currentLanguage,\n langCode: this.services.language.currentLanguage,\n isMiniOrbit: this.services.miniOrbit.isEnabled,\n isPWAInstallable: progressiveWebApp.isPWAInstallable,\n videoSlidesEnabled: this.services.videoSlides.shouldBeDisplayed,\n };\n }\n\n get isCIS(): boolean {\n return Boolean(this.getSegmentValue('_IsCIS'));\n }\n\n get isCIP(): boolean {\n return Boolean(this.getSegmentValue('_IsCIP'));\n }\n\n}\n","import {ServiceBase} from '../ServiceBase';\nimport {IDeviceService} from './device.service.interface';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {DeviceInfo} from '../sdk/cgp-sdk.interface';\nimport { action, observable, makeObservable } from 'mobx';\nimport Device from \"../../../sdk/src/utils/device/device\";\n\nexport class DeviceService extends ServiceBase implements IDeviceService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._updateDeviceType();\n this.services.dom.subscribeTo.devicechanged(this._updateDeviceType);\n }\n\n private get _sdkDevice(): DeviceInfo {\n return this.services.sdk.device;\n }\n\n @action.bound\n private _updateDeviceType() {\n this.isMobile = this._sdkDevice.isMobile();\n this.isTablet = this._sdkDevice.isTablet();\n\n this.os = this._sdkDevice.os;\n this.browser = this._sdkDevice.browser;\n this.hybrid = this._sdkDevice.hybrid;\n this.feature = this._sdkDevice.feature;\n this.model = this._sdkDevice.model;\n this.isProgressiveWebApp = this._sdkDevice.isProgressiveWebApp;\n\n this.isStandalone = this._sdkDevice.isStandalone;\n\n this.segments = {\n isMobile: this.isMobile,\n deviceType: this.isMobile ? 'mobile' : 'pc',\n isHybrid: this.hybrid.isHybrid,\n isEmbeddedHybrid: this.hybrid.isEmbedded,\n operationSystem: this.os.name,\n tool: Device.isProbablyIPad ? \"tablet\" : '',\n isProgressiveWebApp: this._sdkDevice.isProgressiveWebApp\n };\n }\n\n /** @deprecated */\n @observable.ref\n isMobile: boolean;\n /** @deprecated */\n isTablet: boolean;\n\n os: DeviceInfo[\"os\"];\n browser: DeviceInfo[\"browser\"];\n model: DeviceInfo[\"model\"];\n hybrid: DeviceInfo[\"hybrid\"];\n feature: DeviceInfo[\"feature\"];\n isProgressiveWebApp: DeviceInfo[\"isProgressiveWebApp\"];\n\n isStandalone: boolean;\n\n @observable.ref\n segments: {\n [key: string]: any;\n }\n\n get productPackageId(): number {\n return this.services.sdk.getProductPackageId();\n }\n\n get isMobileWebApp(): boolean {\n return Device.isMobileWebApp;\n }\n\n get isProbablyIOSDevice(): boolean {\n return Device.isProbablyIOSDevice;\n }\n}\n","import {HOME_PAGE_ARENA} from \"../services/arenas/arena-consts\";\n\nexport const SEO_CATEGORIES = {\n HOME: HOME_PAGE_ARENA,\n AI_GAMES_RECOMMENDATIONS: 'AI_GamesDisplayed',\n AI_NEW_GAMES_RECOMMENDATIONS: 'AI_NewGamesDisplayed'\n};\n\n","import {ServiceBase} from '../ServiceBase';\nimport {AiRecommendedGames, IAiEngineService, IAiSortOptions} from './ai-engine.service.interface';\nimport { action, observable, makeObservable } from 'mobx';\nimport {SEO_CATEGORIES} from '../../consts/seo-categories';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {LIST_TYPE_ID} from \"../../../common/const/ai-trending-list-ids-map\";\n\nexport const NO_AI_GAMES_RECOMMENDATIONS: AiRecommendedGames = {\n isInitialized: false,\n gameTypes: [],\n gameTypesMap: {},\n engine: undefined\n};\n\ninterface ITrendingGamesRecommendations {\n gamesByBets: number[];\n gamesByActiveUsers: number[];\n}\n\nexport class AiEngineService extends ServiceBase implements IAiEngineService {\n constructor(services: IServiceFactoryExtended){\n super(services);\n\n makeObservable(this);\n\n this.reaction(() => this.services.user.isAuthorized,\n () => this._onOauthChange(),\n {\n fireImmediately: true\n });\n\n this.services.sdk.events.onGamesQuestionnaireCompleted(async () => {\n await this._updateAiRecommendedGames();\n });\n }\n\n @observable.ref\n aiRecommendedGames: AiRecommendedGames = NO_AI_GAMES_RECOMMENDATIONS;\n\n @observable.ref\n _trendingGamesRecommendations: ITrendingGamesRecommendations | null = null;\n get trendingRecommendedGamesForPlayerByBets(): number[] | null {\n this._loadTrendingRecommendedGamesForPlayer();\n return this._trendingGamesRecommendations?.gamesByBets || null;\n }\n get trendingRecommendedGamesForPlayerByActiveUsers(): number[] | null {\n this._loadTrendingRecommendedGamesForPlayer();\n return this._trendingGamesRecommendations?.gamesByActiveUsers || null;\n }\n\n /**\n * @description: A map where the key is the game type and the value is then game position in the AI recommendation\n */\n @observable.ref\n private _allAiRecommendedGameTypes: Record;\n\n\n @action.bound\n private _setAiRecommendedGames(value: AiRecommendedGames) {\n\n let tempGameTypesMap = {};\n\n if (value.gameTypes) {\n value.gameTypes.forEach((gameType, i) => tempGameTypesMap[gameType] = i);\n }\n\n this.aiRecommendedGames = {\n ...value,\n gameTypes: (value.gameTypes || []),\n gameTypesMap: tempGameTypesMap\n };\n }\n\n @action.bound\n private _setTrendingRecommendedGamesForPlayer(trendingRecommendedGamesForPlayer: {[key: number]: number[]}) {\n this._trendingGamesRecommendations = {\n gamesByBets: (trendingRecommendedGamesForPlayer && trendingRecommendedGamesForPlayer[LIST_TYPE_ID.BETS]) || [],\n gamesByActiveUsers: (trendingRecommendedGamesForPlayer && trendingRecommendedGamesForPlayer[LIST_TYPE_ID.ACTIVE_USERS]) || []\n }\n }\n\n @action.bound\n private _setAllAiRecommendedGameTypes(gameTypes: number[]) {\n gameTypes = gameTypes || [];\n // creates a map where the key is the game type and the value is the index of that game type in the array\n this._allAiRecommendedGameTypes = gameTypes.reduce((acc, curr, index) => {\n acc[curr] = index;\n return acc;\n }, {});\n }\n\n private _onOauthChange() {\n this._initalizeTrendingRecommendations();\n this._updateAiRecommendedGames();\n }\n\n _initalizeTrendingRecommendations() {\n if(this.services.user.isAuthorized) {\n this._trendingGamesRecommendations = null;\n }\n }\n\n private async _updateAiRecommendedGames(): Promise {\n let aiRecommendationsData = await this.services.sdk.getAIRecommendations({filterOutRecentlyPlayedGames: true});\n\n this._setAiRecommendedGames({\n gameTypes: aiRecommendationsData.gameTypes,\n engine: aiRecommendationsData.engine,\n gameTypesMap: {},\n isInitialized: true\n });\n aiRecommendationsData = await this.services.sdk.getAIRecommendations({maxGames: 500, filterOutRecentlyPlayedGames: false});\n this._setAllAiRecommendedGameTypes(aiRecommendationsData.gameTypes || []);\n\n this._sendAIRecommendationAnalytics();\n }\n\n private _sendAIRecommendationAnalytics(): void {\n\n let analyticsObject = this.aiRecommendedGames.gameTypes.reduce((result, gameType, index) => {\n result[gameType] = index;\n return result;\n }, {});\n\n this.services.analytics.sendElasticInfoEvent({\n category: SEO_CATEGORIES.AI_GAMES_RECOMMENDATIONS,\n action: JSON.stringify(analyticsObject),\n label: this.aiRecommendedGames.engine,\n eventType:\"Orbit_AI_Feature\"\n }, true);\n }\n\n async getCasinoRecommendedDynamicListsForPlayer(listIDs: string[]): Promise> {\n return await this.services.api.insightController.getCasinoRecommendedDynamicListsForPlayer({\n listsIDs: listIDs\n });\n }\n\n sortGames(gameTypes: number[], options?: IAiSortOptions): number[] {\n const allAiRecommendedGameTypes = Check.isEmpty(options?.gamesMapOverride) ? this._allAiRecommendedGameTypes : options?.gamesMapOverride;\n if(!allAiRecommendedGameTypes || Object.keys(allAiRecommendedGameTypes).length === 0) {\n return gameTypes;\n }\n\n const ignoreNumberOfGames = Check.isNumber(options?.ignoreNumberOfGames) ? options.ignoreNumberOfGames : 0;\n let fixedGameTypes = ignoreNumberOfGames > 0 ? gameTypes.slice(0, ignoreNumberOfGames) : [];\n const aiGameTypes = ignoreNumberOfGames > 0 ? gameTypes.slice(ignoreNumberOfGames) : gameTypes;\n\n const originalIndexes = {};\n aiGameTypes.forEach((gt, index) => {\n originalIndexes[gt] = index;\n });\n\n aiGameTypes.sort((gt1, gt2) => {\n let index1 = allAiRecommendedGameTypes[gt1];\n let index2 = allAiRecommendedGameTypes[gt2];\n\n if(Check.isUndefined(index1) && Check.isUndefined(index2)) {\n return (originalIndexes[gt1] < originalIndexes[gt2]) ? -1 : 1;\n }\n\n if(Check.isUndefined(index1)) { //if gt1 is not in the AI recommendations\n return 1;\n } else if(Check.isUndefined(index2)) {\n return -1;\n }\n\n return (index1 < index2) ? -1 : 1; //gt1 goes before gt2 if index1 < index2\n });\n\n // concatenate fixed game types (not sorted) with ai sorted ones\n return fixedGameTypes.concat(aiGameTypes);\n }\n\n getAiEngine(): string | undefined {\n return this.aiRecommendedGames.engine;\n }\n\n getAiEngineForGame(gameType: number): string | undefined {\n return this.aiRecommendedGames.gameTypesMap[gameType] === undefined ? undefined : this.aiRecommendedGames.engine;\n }\n\n private _isLoadTrendingRecommendedGamesForPlayerInProgress = false;\n private async _loadTrendingRecommendedGamesForPlayer(): Promise {\n if(this._isLoadTrendingRecommendedGamesForPlayerInProgress) {\n return;\n }\n\n if(!Check.isNullOrUndefined(this._trendingGamesRecommendations)) {\n return;\n }\n\n this._isLoadTrendingRecommendedGamesForPlayerInProgress = true;\n try {\n const trendingRecommendedGames: { [key: number]: number[] } = await this.services.sdk.getTrendingRecommendedGamesForPlayer(LIST_TYPE_ID.BETS, LIST_TYPE_ID.ACTIVE_USERS);\n this._setTrendingRecommendedGamesForPlayer(trendingRecommendedGames);\n } finally {\n this._isLoadTrendingRecommendedGamesForPlayerInProgress = false;\n }\n\n }\n\n // List Type can be either 1 or 2, when 1 is sorted by bets and 2 is sorted by active_users\n private _getGamesTypesByListTypeID(listTypeId?: LIST_TYPE_ID): number[] {\n\n if(!Check.isNullOrUndefined(listTypeId)) {\n if (listTypeId === LIST_TYPE_ID.BETS) {\n return this.trendingRecommendedGamesForPlayerByBets;\n } else if(listTypeId === LIST_TYPE_ID.ACTIVE_USERS) {\n return this.trendingRecommendedGamesForPlayerByActiveUsers;\n } else {\n this.services.logger.error(`Fail to get ai games order from api. wrong listTypeId: ${listTypeId}`);\n }\n }\n\n return [];\n }\n\n sortGamesByAI(gamesTypesArray: number[], listTypeId: LIST_TYPE_ID) {\n const aiGamesByScore = this._getGamesTypesByListTypeID(listTypeId);\n if(!aiGamesByScore) {\n return gamesTypesArray;\n }\n \n return gamesTypesArray.sort((first,second) => {\n const firstGamePlace = aiGamesByScore.indexOf(first);\n const secondGamePlace = aiGamesByScore.indexOf(second);\n if(firstGamePlace === -1 || secondGamePlace === -1) {\n if(firstGamePlace === -1) {\n return secondGamePlace === -1 ? 0 : 1;\n } else {\n return -1;\n }\n }\n\n return firstGamePlace - secondGamePlace;\n });\n\n }\n}\n\n\n","import {IRunningGameHandler} from '../games/running-game-handler.interface';\nimport {IAutoLoginParams} from '../../../common/interfaces/autologin-params.interface';\nimport {BalanceType} from \"../../../common/const/wallet_balance_type\";\nimport IStructuredLoggingService from \"../../../common/interfaces/structured-logging-service-interface\";\nimport {SdkOverlayZIndex} from \"../../../common/interfaces/sdk-overlay-z-index\";\nimport {IGeoLocationInfo} from \"../../../common/interfaces/geo-location-info.interface\";\nimport {GamingHistoryRecordRawData} from \"../gaming-history/gaming-history.service.interfce\";\nimport {IAbTestingFeatureProperties} from '../../../common/interfaces/ab-testing-interface';\nimport {ISdkHybridService} from \"../hybrid/hybrid.service.interface\";\nimport {ILegacyRegulation} from \"../regulation/legacy-regulation.interface\";\nimport {NullableString, UndefinedString} from \"../../../common/types/nullable-types\";\nimport ISdkGnwpService from \"../../../sdk/src/services/gnwp/gnwp_service_interface\";\nimport {IScriptLoaderService} from \"../scrip-loader/script-loader.service.interface\";\nimport IStateOfResidence from \"../../../common/interfaces/state-of-residence.interface\";\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\nimport {GNWP_SOURCES} from \"../gnwp/gnwp-consts\";\nimport {LoadScriptOptions} from \"../../../common/interfaces/load-script-options\";\nimport {IGameRestriction} from \"../restrictions/game-restriction.interface\";\nimport {DateFormattedToRegulationOffset} from \"../time/time.service.interface\";\nimport {IInactivityTimeoutSettings} from \"../user/model/inactivity-timeout-settings\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {GameRawData} from \"./gme-raw-data.type\";\n\n\nexport interface ITokenInfo {\n readonly loginIP: string;\n}\n\nexport interface CmsUserSignature {\n readonly message: string;\n readonly signature: string;\n}\n\nexport interface DateAndTimeFormat {\n date: string;\n time: string;\n dateTime: string;\n dateTimeHistory: string;\n}\n\ninterface OnEventParams {\n eventName: string;\n callback: Function;\n context: any;\n}\n\ninterface SendAnalyticsParams {\n category: string;\n action: string;\n label: string;\n value: string;\n omitStructuredLogger?: boolean\n}\n\ninterface GetAIListResponse {\n aiGameTypesArray: number[];\n aiEngine: string;\n}\n\n\n\n\nexport const CGP_EVENTS_NAMES = {\n ON_BEFORE_OAUTH_STATE_CHANGE: 'ON_BEFORE_OAUTH_STATE_CHANGE',\n OAUTH_STATE_CHANGE: 'OAUTH_STATE_CHANGE',\n RECENTLY_PLAYED_GAMES_UPDATED: 'RECENTLY_PLAYED_GAMES_UPDATED',\n AUTOLOGIN_SUCCESS: 'AUTOLOGIN_SUCCESS',\n AUTOLOGIN_FAILED: 'AUTOLOGIN_FAILED',\n DEEPLINK_RECEIVED: 'DEEPLINK_RECEIVED',\n GAME_OPEN: 'GAME_OPEN',\n CLOSE_GAME: 'CLOSE_GAME',\n LOGIN_FORM_OPEN: 'LOGIN_FORM_OPEN',\n LOGIN_FORM_CLOSE: 'LOGIN_FORM_CLOSE',\n TOKEN_LIFETIME_EXPIRED: 'TOKEN_LIFETIME_EXPIRED',\n LIVE_TABLES_UPDATE: 'LIVE_TABLES_UPDATE',\n GAMES_QUESTIONNAIRE_COMPLETED: 'GAMES_QUESTIONNAIRE_COMPLETED',\n GAME_POPUP_SHOW: 'GAME_POPUP_SHOW',\n BALANCE_UPDATED: 'BALANCE_UPDATED',\n REGISTRATION_COMPLETED: 'REGISTRATION_COMPLETED',\n APP_RESUMED: 'APP_RESUMED',\n APP_PAUSED: 'APP_PAUSED',\n EXTERNAL_LINK_CLOSED: 'EXTERNAL_LINK_CLOSED',\n TOUCH_ID_STATE_CHANGED: 'TOUCH_ID_STATE_CHANGED',\n OMG_DISPLAYED: 'OMG_DISPLAYED',\n SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED: 'SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED',\n LIVE_GAME_SWITCHED: 'LIVE_GAME_SWITCHED',\n PROMOTIONS_CHANGED: 'PROMOTIONS_CHANGED',\n DEPOSIT_WIDGET_CLOSED: 'DEPOSIT_WIDGET_CLOSED',\n};\n\n\nexport interface DeviceInfo {\n os: {\n name: string;\n version: number;\n isMobileOS: boolean;\n isIOS: boolean;\n isAndroid: boolean;\n isPC: boolean;\n isMacOS: boolean;\n };\n browser: {\n name: string;\n version: number;\n isSafari: boolean;\n isChrome: boolean;\n isFirefox: boolean;\n };\n model: {\n isIphone: boolean;\n isIpad: boolean;\n deviceType: string | undefined;\n };\n hybrid: {\n isHybrid: boolean;\n isEmbedded: boolean;\n inCasino: boolean;\n inPoker: boolean;\n inSport: boolean;\n };\n feature: {\n isTouch: boolean;\n };\n isProgressiveWebApp: boolean;\n isStandalone: boolean;\n\n /** @deprecated */\n isMobile(): boolean;\n /** @deprecated */\n isTablet(): boolean;\n\n}\n\nexport interface CGPEventSubscription {\n off();\n}\n\n\nexport interface GetAutoLoginTokenResponse {\n token: string;\n}\n\nexport interface GetPlatformTokenResponse {\n token: string;\n}\n\nexport interface IDailyDealCampaign {\n MarketingCampaignId: string;\n}\n\nexport interface IAppFlayerData {\n appsflyerid: string,\n appname: string,\n deviceid: string,\n afinstall: string,\n}\n\nexport interface ISkinSerialData extends IAppFlayerData {\n [key: string]: any;\n}\n\nexport interface CgpSkinInfo {\n getBrandName(): string;\n getPlatformSystemID(): number;\n getClientPlatform(): string;\n getVersion(): string;\n getCulture(): string;\n getMinimumAge(): number;\n getSerialData(marketingData: any): Promise;\n getDefaultHybridSerial(): string;\n}\n\nexport interface ISdkUtils {\n getGuid(): string\n arraysAreEqual(arr1: any[], arr2: any[]): boolean;\n}\n\nexport interface ISdkRegulationService {\n isUSRegulation(): boolean;\n getRegulationCode(): number;\n getSessionCooldownConfig(): {featureEnabled: boolean; cooldownTime: string};\n shouldShowPlayerLimitsToaster(): boolean;\n getErrorMessage(errorCode: number): NullableString;\n forceDemoButton(): boolean;\n isLoginPopupEnabled(): boolean;\n}\n\nexport interface IOpenHistoryGameRequest {\n historyRecordData: GamingHistoryRecordRawData;\n gameType: number,\n gameName: string,\n gameRoundId: string,\n gameRoundDate: string;\n}\n\nexport interface IDateFormattedToRegulationOffset {\n date: Date;\n isUTC: boolean;\n}\n\nexport interface ICgpSdk {\n countPlayerChallenges(): number;\n getRegulationDateAndTimeFormat(): DateAndTimeFormat;\n device(): DeviceInfo;\n displayHybrid?: () => void;\n isHybridEmbeddedGame(gameType: number): boolean;\n openHybridLink(url: string): void;\n format$$$(value: number, withDecimal: boolean);\n getBalance();\n getAIList(maxGames: number, filterOutRecentlyPlayedGames: boolean, numberOfRecentlyPlayedGameToFilterOut: number): Promise;\n getAINewGamesList(maxGames: number, filterOutRecentlyPlayedGames: boolean, numberOfRecentlyPlayedGameToFilterOut: number): Promise;\n getAutoLoginToken(): Promise;\n getPlatformToken(): Promise;\n getFirebaseToken(): string;\n getBrandID(): number;\n getCorrelatedGames(gameType: number, numberOfGames: number): Promise;\n getExternalBrandCallbackURL(): string;\n getExternalBrandCallbackURLMethod(): string;\n getGamesInfo(gameTypes: number[]): Promise;\n getGamesThemes(): Record;\n getGamesVendors(): Record;\n getGamesCompanies(): Record;\n getGamesInfoForHistory(gameTypes: number[]): Promise;\n getGRSEnvironments(): Promise;\n getSourceSubBrandName(): string;\n getSubBrandID(): number;\n dateAndTimeFormat(): DateAndTimeFormat;\n getUserData(): any;\n getUsername(): string;\n getSessionId(): string;\n getUserSegments(): CmsUserSignature;\n isAuthorized(): boolean;\n isLoginFromRegistration(): boolean;\n getCGPMaxOverlayZIndex(): number;\n structuredLoggingService(): IStructuredLoggingService;\n isVIP(): boolean;\n logout(): Promise;\n menuActionExecute(key: string): void;\n onEvent(params: OnEventParams): CGPEventSubscription;\n routeChanged(): void;\n openGame(options: any): Promise;\n openLoginForm(marketingParams?: MarketingParams): Promise;\n sendAnalytics(params: SendAnalyticsParams);\n setAutoLoginToken(autologinToken: any): void;\n startLiveTableFeeds(): void;\n stopLiveTableFeeds(): void;\n getAbTestingDataForFeature(featureName: string): IAbTestingFeatureProperties;\n getAbTestingData(): {[key: string]: IAbTestingFeatureProperties};\n waitForAnonymousAbTestingData(): Promise;\n getAnonymousPlayerAbTestingDataForFeature(featureName: string, shouldDefaultToLocalStorageData: boolean): IAbTestingFeatureProperties;\n getCurrentServerDate(): Date;\n formatToRegulationOffset(date: UndefinedString, dateFormattedToRegulation: UndefinedString): IDateFormattedToRegulationOffset;\n getDailyDealCampaigns(): Promise;\n getBankroll(balanceType: BalanceType, plainNumber?: boolean): string | number;\n\n getJackpotsById(): unknown;\n getJackpotsByGameType(): unknown;\n\n getProductPackage(): number;\n\n getSkin(): CgpSkinInfo;\n runAutoLogin(autoLoginParams: IAutoLoginParams): Promise;\n\n getUtils(): ISdkUtils;\n onOrbitInitComplete(): void;\n\n getEnvironment(): string;\n pushDataToDataLayer(data: {}): void;\n getCountryName(): string;\n getCountryIso3(): string;\n getSupportedStates(): IStateOfResidence[];\n getWrongLocationDetectionPath(): string;\n getTrendingRecommendedGamesForPlayer(listTypeId: number[]): Promise<{[key: number]: number[]}>;\n\n getRegulationService(): ISdkRegulationService;\n\n waitForAutologin(): Promise;\n httpPost(url: string, requestData: unknown): Promise;\n httpGet(url: string, requestData: unknown): Promise;\n getConfigs(): any;\n loadScript(options: LoadScriptOptions): Promise;\n getRefreshToken(): string;\n getCurrencyIso3(): string;\n readonly overlayZIndex: SdkOverlayZIndex;\n getGoogleClientID(): string;\n isInAutologin(): boolean;\n fireDepositWidgetClosed(): void;\n fireFreeToPlayWidgetClosed(): void;\n getToken(): ITokenInfo | null;\n isDepositWidgetSupportedByHybrid(): boolean;\n getGeoLocationInfo(): Promise;\n getDownloadAppLink(): string;\n promptPushNotificationPermissionRequest(): void;\n openPopUpOnSecondWebView(content: string, timeout: number): void;\n closePopUpOnSecondWebView(): void;\n getBurnoutAnimationZIndex(): number;\n readonly hybrid: ISdkHybridService;\n readonly currentRegulation: ILegacyRegulation;\n getCurrentBrowserTabId(): string;\n readonly hasOpenOverlays: boolean;\n setOrbitActiveOverlayExists(value: boolean): void;\n readonly gnwp: ISdkGnwpService;\n readonly scriptLoader: IScriptLoaderService;\n startAutoRetryGeoProcess(): Promise;\n extractTokenProperty(tokenProperty: string): NullableString;\n updateTokenProperty(tokenProperty: string, value: NullableString): void;\n isLoginPopupEnabled(): boolean;\n getAccountData(): any;\n getTempAccountGnwpSource(): GNWP_SOURCES;\n isPlayerMessagesConnected(): boolean;\n getGameRestriction(gameType: number, gameGroupId: number, vendorId: number): IGameRestriction;\n getCurrentDate(): Date;\n convertToRegulationTimeZone(date: Date): DateFormattedToRegulationOffset;\n format(date: any, mask?: string, utc?: boolean): string;\n getInactivityTimeoutSettings(): IInactivityTimeoutSettings;\n setInactivityTimeout(timeout: TimeSpan): void;\n createUserActivityDetactor(params): void;\n}\n","import {CGP_EVENTS_NAMES, CGPEventSubscription, ICgpSdk} from './cgp-sdk.interface';\nimport { LiveTables } from '../live-table-feeds-service/live-table-feeds.service.interface';\nimport {TimeSpan} from '@sparkware/app-utils';\nimport {CLIENT_EVENTS, SYSTEM_EVENTS} from \"../../../sdk/src/events/events\";\nimport {\n IFreePlayVoucherData,\n IFreePlayVoucherDelta\n} from \"../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport {\n INetPositionGameTypeData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/netposition_handler.interfaces\";\nimport {IJackpotDataById} from '../../../sdk/src/services/live_feeds/jackpots/jackpot_feeds_service_interface';\nimport {\n IGamblingSessionUpdateData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/gambling-session_handler_interfaces\";\nimport {\n IGamblingSessionActionData, IOMGParsedData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/messages_handler_interfaces\";\n\nexport interface OnShowGamePopupCallbackParams {\n gameType?: number,\n gamePopupApprovedCallback: () => void\n}\n\nexport interface OnGameOpenParams {\n gameType: number;\n isReal: boolean;\n}\n\nexport interface OnGameCloseParams {\n gameType: number;\n isReal: boolean;\n isGamePlayed: boolean;\n showNextGameSuggestion: boolean;\n}\n\nexport interface OnPlayerActionParams {\n actionName: string;\n options?: any;\n}\n\nexport interface OnOauthStateChangedParams {\n loginType?: number;\n logoutReason?: number;\n kickReason?: number;\n fromRegistration?: boolean;\n}\n\nexport interface IGeoRestrictionsUpdateEventParams {\n KickReasonId?: string;\n TroubleshooterRetry?: boolean;\n DetailedMessages?: string[];\n}\n\nexport interface IPeriodicGeoUpdateEventParams {\n mobileNumber: string;\n licenseKey: string;\n licenseWebKey: string;\n locationTransactionId: string;\n}\n\nexport class SdkEvents {\n constructor(private CGP: ICgpSdk) {\n\n }\n\n onOAuthStateChanged(callback: (params: OnOauthStateChangedParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.OAUTH_STATE_CHANGE,\n callback: callback,\n context: this\n });\n }\n\n onBeforeOAuthStateChanged(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.ON_BEFORE_OAUTH_STATE_CHANGE,\n callback: callback,\n context: this\n });\n }\n\n onDeepLinkReceived(callback: (deepLinkObject: any) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.DEEPLINK_RECEIVED,\n callback: callback,\n context: this\n });\n }\n\n onShowGamePopup(callback: (args: OnShowGamePopupCallbackParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.GAME_POPUP_SHOW,\n callback: callback,\n context: this\n });\n }\n\n onGameOpen(callback: (params: OnGameOpenParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.GAME_OPEN,\n callback: callback,\n context: this\n });\n }\n\n onGameClose(callback: (params?: OnGameCloseParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.CLOSE_GAME,\n callback: callback,\n context: this\n });\n }\n\n\n onPlayerAction(callback: (eventData: OnPlayerActionParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.PLAYER_ACTION,\n callback: (data) => callback(data || {} as OnPlayerActionParams),\n context: this\n });\n }\n\n onRecentlyPlayedGamesUpdated(callback: (gameTypes: number[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.RECENTLY_PLAYED_GAMES_UPDATED,\n callback: callback,\n context: this\n });\n }\n\n onLoginFormOpen(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.LOGIN_FORM_OPEN,\n callback: callback,\n context: this\n });\n }\n\n onLoginFormClosed(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.LOGIN_FORM_CLOSE,\n callback: callback,\n context: this\n });\n }\n\n onTokenLifetimeExpired(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.TOKEN_LIFETIME_EXPIRED,\n callback: callback,\n context: this\n });\n }\n\n onLiveTableFeedsUpdate(callback: (tablesData: LiveTables) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.LIVE_TABLES_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onGamesQuestionnaireCompleted(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.GAMES_QUESTIONNAIRE_COMPLETED,\n callback: callback,\n context: this\n });\n }\n\n\n onJackpotsByIdUpdate(callback: (jackpots: unknown) => void) {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LIVE_FEEDS_JACKPOTS_BY_ID_UPDATED,\n callback,\n context: this\n });\n }\n\n onJackpotsAmountsByGameUpdate(callback: (jackpots: Record) => void) {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LIVE_FEEDS_JACKPOT_AMOUNTS_BY_GAME_UPDATED,\n callback,\n context: this\n });\n }\n\n onJackpotsAmountsByIdUpdate(callback: (jackpots: Record) => void) {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LIVE_FEEDS_JACKPOTS_BY_ID_UPDATED,\n callback,\n context: this\n });\n }\n\n onBalanceUpdated(callback: () => void) {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.BALANCE_UPDATED,\n callback,\n context: this\n });\n }\n\n onSessionTimerUpdate(callback: (data: {sessionTime: TimeSpan}) => void) {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_TIMER_UPDATE,\n callback,\n context: this\n });\n }\n\n onRealityCheckOpened(callback: () => void) {\n return this.CGP.onEvent({\n eventName: CLIENT_EVENTS.REALITY_CHECK_OPENED,\n callback,\n context: this\n });\n }\n\n onRealityCheckClosed(callback: () => void) {\n return this.CGP.onEvent({\n eventName: CLIENT_EVENTS.REALITY_CHECK_CLOSED,\n callback,\n context: this\n });\n }\n\n\n onRegistrationCompleted(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.REGISTRATION_COMPLETED,\n callback,\n context: this\n });\n }\n\n onAppResumed(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.APP_RESUMED,\n callback: callback,\n context: this\n });\n }\n\n onAppPaused(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.APP_PAUSED,\n callback: callback,\n context: this\n });\n }\n\n onExternalLinkClosed(callback: (linkSource: string) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.EXTERNAL_LINK_CLOSED,\n callback: callback,\n context: this\n });\n }\n\n onTouchIDActiveStateChanged(callback: (state: boolean) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.TOUCH_ID_STATE_CHANGED,\n callback: callback,\n context: this\n });\n }\n\n onOmgDisplayed(callback: (state: unknown) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.OMG_DISPLAYED,\n callback,\n context: this\n });\n }\n\n onBurnoutMessageReceived(callback: (state: unknown) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED,\n callback,\n context: this\n });\n }\n\n onLiveGameSwitched(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.LIVE_GAME_SWITCHED,\n callback: callback,\n context: this\n });\n }\n\n onPromotionsChanged(callback: (data: {Cid: number, IsPromotionDisplayedInClient: boolean, IndicationInClientPromotionsIds: number[]}) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.PROMOTIONS_CHANGED,\n callback: callback,\n context: this\n });\n }\n\n onDepositWidgetClosed(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.DEPOSIT_WIDGET_CLOSED,\n callback: callback,\n context: this\n });\n }\n \n onFreeToPlayWidgetClosed(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.FREE_TO_PLAY_WIDGET_CLOSED,\n callback: callback,\n context: this\n });\n }\n\n onPostMessage(callback: (message: MessageEvent) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.POST_MESSAGE_ARRIVE,\n callback: callback,\n context: this\n });\n }\n\n onHybridPostMessage(callback: (message: MessageEvent) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.HYBRID_POST_MESSAGE_ARRIVE,\n callback: callback,\n context: this\n });\n }\n\n onFreePlayBatchAdded(callback: (data: IFreePlayVoucherData[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_FREE_PLAY_BATCH_ADDED,\n callback: callback,\n context: this\n });\n }\n\n onFreePlayBatchUpdated(callback: (data: IFreePlayVoucherDelta[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_FREE_PLAY_BATCH_UPDATED,\n callback: callback,\n context: this\n });\n }\n\n onFreePlayBatchRemoved(callback: (voucherIds: string[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_FREE_PLAY_BATCH_REMOVED,\n callback: callback,\n context: this\n });\n }\n\n\n onHybridEmbeddedGameLoadingIndicatorUpdateV1(callback: (percentage: number | string) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LOADING_INDICATOR_EMBEDDED_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onHybridEmbeddedGameLoadingIndicatorUpdateV2(callback: (eventData: {statusBar: number | string; numberOfPackages: string}) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LOADING_INDICATOR_EMBEDDED_UPDATE_V2,\n callback: callback,\n context: this\n });\n }\n\n onFirebaseGotNewToken(callback: (eventData: {token: string}) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.FIREBASE_GOT_NEW_TOKEN,\n callback: callback,\n context: this\n });\n }\n\n onNetPositionUpdated(callback: (gamesTypesData: INetPositionGameTypeData[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_NET_POSITION_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onLoginSessionResumed(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LOGIN_SESSION_RESUMED,\n callback: callback,\n context: this\n });\n }\n\n onUserApprovedPostLoginPopup(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.USER_APPROVE_GAME_POPUP,\n callback: callback,\n context: this\n });\n }\n\n onFirebaseOmgReceived(callback: (omgData: IOMGParsedData) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_OMG_RECEIVED,\n callback: callback,\n context: this\n });\n }\n\n onReceivedToaster(callback: (params: any[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_RECEIVED_TOASTER,\n callback: callback,\n context: this\n });\n }\n\n onSecondWebViewClose(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SECOND_WEB_VIEW_CLOSE,\n callback: callback,\n context: this\n });\n }\n\n onRestrictionsChanged(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.RESTRICTIONS_CHANGED,\n callback: callback,\n context: this\n });\n }\n\n onPlayerMessagesConnected(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.PLAYER_MESSAGES_STRATEGY_READY,\n callback: callback,\n context: this\n });\n }\n\n onGeoRestrictionsUpdate(callback: (params: IGeoRestrictionsUpdateEventParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.GEO_RESTRICTIONS_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onGeoPeriodicUpdate(callback: (params: IPeriodicGeoUpdateEventParams) => void ): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.GEO_PERIODIC_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onHybridGeoLocationResponse(callback: (result: string) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.GEO_HYBRID_GET_LOCATION_RES,\n callback: callback,\n context: this\n });\n }\n\n onGamblingSessionUpdate(callback: (sessionData: IGamblingSessionUpdateData) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.GAMBLING_SESSION_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onGamblingSessionAction(callback: (sessionData: IGamblingSessionActionData) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.GAMBLING_SESSION_ACTION,\n callback: callback,\n context: this\n });\n }\n\n onServerTimeUpdated(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.TIME_UPDATED_FROM_SERVER,\n callback: callback,\n context: this\n });\n }\n\n\n}\n","import Event from \"../../../sdk/src/utils/event\";\nimport {CLIENT_EVENTS, SYSTEM_EVENTS} from \"../../../sdk/src/events/events\";\nimport {GNWP_SOURCES} from \"../gnwp/gnwp-consts\";\nimport {IOmgHandlerHook} from \"../external-links/handlers/omg/omg-handler.hook.interface\";\n\nexport class SdkEventsTrigger {\n gameOpen(eventData: {gameType: number; isReal: boolean}): void {\n Event.fire(SYSTEM_EVENTS.GAME_OPEN, {\n gametype: eventData.gameType,\n gameType: eventData.gameType,\n isReal: eventData.isReal\n });\n }\n\n gameClosed(eventData: {gameType: number; isReal: boolean; isGamePlayed: boolean; showNextGameSuggestion: boolean}): void {\n Event.fire(SYSTEM_EVENTS.CLOSE_GAME, {\n gametype: eventData.gameType,\n gameType: eventData.gameType,\n isReal: eventData.isReal,\n isGamePlayed: eventData.isGamePlayed,\n showNextGameSuggestion: eventData.showNextGameSuggestion\n });\n }\n\n keepAlive(): void {\n Event.fire(SYSTEM_EVENTS.EXTEND_USER_TIME_TO_LIVE);\n }\n\n liveGameSwitched(): void {\n Event.fire(SYSTEM_EVENTS.LIVE_GAME_SWITCHED);\n }\n\n hybridGameLoadingIndicatorClosed(): void {\n Event.fire(SYSTEM_EVENTS.LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X);\n }\n\n updateMarketingParams(marketingParams: any): void {\n Event.fire(SYSTEM_EVENTS.INCOMING_MARKETING_DATA, marketingParams);\n }\n\n\n navigateToGameInWebView(url: string): void {\n Event.fire(SYSTEM_EVENTS.WEB_VIEW_NAVIGATE_GAME, url);\n }\n\n gameSequenceFinishedSuccess(): void {\n Event.fire(SYSTEM_EVENTS.GAME_SEQUENCE_FINISH, true);\n }\n\n showHybridAlert(message: string): void {\n Event.fire(SYSTEM_EVENTS.HYBRID_ALERT, message);\n }\n\n locationPopupClosed(): void {\n Event.fire(SYSTEM_EVENTS.LOCATION_POPUP_CLOSED);\n }\n\n registrationCompleted(params: {UserInfo: string, SourceProductPackage: string}) {\n Event.fire(SYSTEM_EVENTS.REGISTRATION_COMPLETED, params);\n }\n\n externalLinkClosed(params: {gnwpSource: GNWP_SOURCES}): void {\n Event.fire(SYSTEM_EVENTS.EXTERNAL_LINK_CLOSED, params.gnwpSource)\n }\n\n omgDisplayed(omgHook: IOmgHandlerHook): void {\n Event.fire(SYSTEM_EVENTS.OMG_DISPLAYED, omgHook)\n }\n\n closeAllSecondWebViews(): void {\n Event.fire(SYSTEM_EVENTS.SECOND_WEB_VIEW_CLOSE_ALL);\n }\n\n closeNyxSecondWebView(): void {\n Event.fire(SYSTEM_EVENTS.SECOND_WEB_VIEW_CLOSE_NYX);\n }\n\n openUrlInSecondWebView(url: string): void {\n Event.fire(SYSTEM_EVENTS.SECOND_WEB_VIEW_NAVIGATE_SPORT, url);\n }\n\n closeModifyBimetricDialog(): void {\n Event.fire(SYSTEM_EVENTS.TOUCH_ID_STATE_CHANGED);\n }\n\n onInitScreenShow(): void {\n Event.fire(SYSTEM_EVENTS.TOUCH_ID_INIT_SCREEN_SHOW);\n }\n\n enableHybridGeoLocation(enabled: boolean): void {\n Event.fire(SYSTEM_EVENTS.GEO_HYBRID_UPDATE_ENABLE, enabled);\n }\n\n hybridGeoLocation(geoParams: {license: string;\n sessionKey: string;\n userId: string\n phone: string;\n reason: string;\n identifierType: string }): void {\n Event.fire(SYSTEM_EVENTS.GEO_HYBRID_GET_LOCATION, geoParams);\n }\n\n realityCheckOpen(): void {\n Event.fire(CLIENT_EVENTS.REALITY_CHECK_OPENED)\n }\n\n realityCheckClosed(): void {\n Event.fire(CLIENT_EVENTS.REALITY_CHECK_CLOSED);\n }\n}","import {\n AIRecommendations,\n ISdkService,\n OpenGameOptions,\n UserData, IGetAiRecommendationsOptions\n} from './sdk.service.interface';\nimport {action, computed, observable, makeObservable} from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {\n DeviceInfo,\n GetAutoLoginTokenResponse,\n ICgpSdk,\n CgpSkinInfo,\n GetPlatformTokenResponse,\n ISdkUtils,\n ISdkRegulationService,\n IDateFormattedToRegulationOffset, DateAndTimeFormat, CmsUserSignature, ITokenInfo\n} from './cgp-sdk.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {IRunningGameHandler} from '../games/running-game-handler.interface';\nimport {SdkEvents} from './sdk-events';\nimport {Check, TimeSpan} from '@sparkware/app-utils';\nimport {CGP_OBJECT_NAME} from '../../app-bootstrap/constants';\nimport {IAutoLoginParams} from '../../../common/interfaces/autologin-params.interface';\nimport {BalanceType} from '../../../common/const/wallet_balance_type';\nimport IStructuredLoggingService from \"../../../common/interfaces/structured-logging-service-interface\";\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\nimport {IGeoLocationInfo} from \"../../../common/interfaces/geo-location-info.interface\";\nimport {IAbTestingFeatureProperties} from '../../../common/interfaces/ab-testing-interface';\nimport {ISdkHybridService} from \"../hybrid/hybrid.service.interface\";\nimport {ILegacyRegulation} from \"../regulation/legacy-regulation.interface\";\nimport {SdkEventsTrigger} from \"./sdk-events-trigger\";\nimport ISdkGnwpService from \"../../../sdk/src/services/gnwp/gnwp_service_interface\";\nimport {IScriptLoaderService} from \"../scrip-loader/script-loader.service.interface\";\nimport IStateOfResidence from \"../../../common/interfaces/state-of-residence.interface\";\nimport {GNWP_SOURCES} from \"../gnwp/gnwp-consts\";\nimport {NullableString, UndefinedString} from '../../../common/types/nullable-types';\nimport {LoadScriptOptions} from \"../../../common/interfaces/load-script-options\";\nimport {IGameRestriction} from \"../restrictions/game-restriction.interface\";\nimport {DateFormattedToRegulationOffset} from \"../time/time.service.interface\";\nimport {IInactivityTimeoutSettings} from \"../user/model/inactivity-timeout-settings\";\nimport {SdkOverlayZIndex} from \"../../../common/interfaces/sdk-overlay-z-index\";\nimport {ExternalLinksZIndexes} from \"../external-links/external-links-z-indexes\";\nimport {GameRawData} from \"./gme-raw-data.type\";\n\n\n\nexport class SdkService extends ServiceBase implements ISdkService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n\n //setTimeout to avoid circular dependency\n //SdkService (constructor)\n // => OAuth2AnonymousState (_onRunAutologin)\n // => OAuth2BackendProxy (_loginMethod is calling isMigrationEnabledFromConfig from PlayerMigrationService)\n // => PlayerMigrationService (isMigrationEnabledFromConfig)\n // => ConfigurationService (servicesConfigs is calling SdkService.getConfigs())\n // => SdkService - and here because the call was initiated in the SdkConstructor the ServiceFactory will execute again teh SdkService constructor.\n setTimeout(() => {\n this._updateLocalStorageAccordingToCookie();\n });\n\n\n this._displayHybrid();\n\n this.reaction(() => this.services.location.currentUri,\n () => {\n if (this.services.location.hasNavigationHistory) {\n this.CGP.routeChanged();\n }\n });\n }\n\n private _displayHybrid() {\n //F TO DO why is this here and not in the SDK ?\n if (Check.isFunction(this.CGP.displayHybrid)) {\n this.CGP.displayHybrid();\n }\n }\n\n private _events: SdkEvents = null;\n\n get events(): SdkEvents {\n if (!this._events) {\n this._events = new SdkEvents(this.CGP);\n }\n\n return this._events;\n }\n\n\n private get CGP(): ICgpSdk {\n return this.services.window.getGlobalProperty(CGP_OBJECT_NAME) as ICgpSdk;\n }\n\n\n get isAuthorized(): boolean {\n return this.CGP.isAuthorized();\n }\n\n get isLoginFromRegistration(): boolean {\n return this.CGP.isLoginFromRegistration();\n }\n\n get getCGPMaxOverlayZIndex(): number {\n return 9002;\n }\n\n get structuredLoggingService(): IStructuredLoggingService {\n return this.CGP.structuredLoggingService();\n }\n\n get dateAndTimeFormat(): DateAndTimeFormat {\n return this.CGP.getRegulationDateAndTimeFormat();\n }\n\n get userData(): UserData {\n let rawUserData = this.CGP.getUserData();\n let rawAccountData = (rawUserData && rawUserData.accountData) || {};\n\n\n return {\n userName: rawUserData?.userName,\n firstName: rawAccountData.FirstName,\n lastName: rawAccountData.LastName,\n IsVIP: this.CGP.isVIP(),\n DWHGameGroupOrientation: rawAccountData.DWHGameGroupOrientation, // when product are asking to do something with user Orientation, - it is not this one. use this.services.userGameOrientation.gameGroup\n statusGroupId: rawAccountData.StatusGroupId,\n GenderId: rawAccountData.genderID,\n timeSinceRegistration: rawAccountData.TimeSinceRegistration,\n cid: rawUserData?.cid,\n playerRMStatus: rawAccountData.PlayerRMStatus,\n sessionId: this.CGP.getSessionId(),\n registrationCountry: rawAccountData.RegistrationCountry,\n joinDate: rawAccountData.JoinDate,\n isFTD: !Check.isNullOrUndefined(rawAccountData.FTDSubBrand),\n IsPromotionPermitted: rawAccountData.IsPromotionPermitted,\n taxId: rawAccountData.TaxId,\n lastLogin: rawAccountData.LastLogin,\n lastLoginDateInTimeZone: rawAccountData.LastLoginDateInTimeZone,\n mobileNumber: rawAccountData.MobileNumber\n };\n }\n\n\n @observable.ref\n isSdkReady: boolean = true;\n\n @action.bound\n private _setIsSdkReady(value: boolean) {\n this.isSdkReady = value;\n }\n\n getAIRecommendations(options?: IGetAiRecommendationsOptions): Promise {\n return this.CGP.getAIList(options?.maxGames, options?.filterOutRecentlyPlayedGames, options?.numberOfRecentlyPlayedGameToFilterOut).then(data => {\n return {\n gameTypes: data.aiGameTypesArray || [],\n engine: data.aiEngine\n };\n });\n }\n\n getTrendingRecommendedGamesForPlayer(...listTypeIds: number[]): Promise<{[key: number]: number[]}> {\n return this.CGP.getTrendingRecommendedGamesForPlayer(listTypeIds);\n }\n\n getAINewRecommendations(options?: IGetAiRecommendationsOptions): Promise {\n return this.CGP.getAINewGamesList(options?.maxGames, options?.filterOutRecentlyPlayedGames, options?.numberOfRecentlyPlayedGameToFilterOut).then(data => {\n return {\n gameTypes: data.aiGameTypesArray || [],\n engine: data.aiEngine\n };\n });\n }\n\n getCurrentServerDate(): Date {\n return this.CGP.getCurrentServerDate();\n }\n\n formatToRegulationOffset(date: UndefinedString, dateFormattedToRegulation: UndefinedString): IDateFormattedToRegulationOffset {\n return this.CGP.formatToRegulationOffset(date, dateFormattedToRegulation);\n }\n\n getAbTestingData(): {[key: string]: IAbTestingFeatureProperties} {\n return this.CGP.getAbTestingData();\n }\n\n getAbTestingDataForFeature(featureName: string): IAbTestingFeatureProperties {\n return this.CGP.getAbTestingDataForFeature(featureName);\n }\n\n waitForAnonymousAbTestingData(): Promise {\n return this.CGP.waitForAnonymousAbTestingData();\n }\n\n sendAnalytics(category: string, action: string = null, label: string = null, value: string = null, omitStructuredLogger: boolean = null) {\n try {\n this.CGP.sendAnalytics({\n category: category,\n action: action,\n label: label,\n value: value,\n omitStructuredLogger: omitStructuredLogger\n });\n } catch (ex) {\n this.services.logger.error(`SdkService failed to sendAnalytics: ${ex}`);\n }\n }\n\n getCmsUserSignature(): CmsUserSignature {\n return this.CGP.getUserSegments();\n }\n\n formatMoney(value: number, withDecimal: boolean = false): string {\n return this.CGP.format$$$(value, withDecimal);\n }\n\n get device(): DeviceInfo {\n return this.CGP.device();\n }\n\n waitForAutologin(): Promise {\n return this.CGP.waitForAutologin();\n }\n\n getAnonymousPlayerAbTestingDataForFeature(featureName: string, shouldDefaultToLocalStorageData: boolean): IAbTestingFeatureProperties {\n return this.CGP.getAnonymousPlayerAbTestingDataForFeature(featureName, shouldDefaultToLocalStorageData);\n }\n async openGame(options: OpenGameOptions): Promise {\n\n let openGameOptions: any = {...options};\n if (!options.showRegister) {\n openGameOptions.navbar = { //F TO DO - do we realy need this navbar option ?\n login: {\n showRegister: false\n }\n }\n }\n\n return await this.CGP.openGame(openGameOptions);\n\n }\n\n async openLoginForm(marketingParams?: MarketingParams): Promise {\n\n await this.CGP.openLoginForm(marketingParams);\n }\n\n getGamesInfoForHistory(gameTypes: number[]): Promise {\n return this.CGP.getGamesInfoForHistory(gameTypes);\n }\n\n getGamesInfo(gameTypes: number[]): Promise {\n return this.CGP.getGamesInfo(gameTypes);\n }\n\n getGamesThemes(): Record {\n return this.CGP.getGamesThemes();\n }\n\n getGamesVendors(): Record {\n return this.CGP.getGamesVendors();\n }\n\n getGamesCompanies(): Record {\n return this.CGP.getGamesCompanies();\n }\n\n getAutoLoginToken(): Promise {\n return this.CGP.getAutoLoginToken();\n }\n\n getPlatformToken(): Promise {\n return this.CGP.getPlatformToken();\n }\n\n getFirebaseToken(): string {\n return this.CGP.getFirebaseToken();\n }\n\n getCorrelatedGames(gameType: number, numberOfGames: number = 3): Promise {\n return this.CGP.getCorrelatedGames(gameType, numberOfGames);\n }\n\n logout(): Promise {\n return this.CGP.logout();\n }\n\n getBrandID(): number {\n return this.CGP.getBrandID();\n }\n\n getSubBrandID(): number {\n return this.CGP.getSubBrandID();\n }\n\n getRegulationService(): ISdkRegulationService {\n return this.CGP.getRegulationService();\n }\n\n isHybridEmbeddedGame(gameType: number): boolean {\n return this.CGP.isHybridEmbeddedGame(gameType);\n }\n\n openHybridLink(url: string): void {\n this.CGP.openHybridLink(url);\n }\n\n private _updateLocalStorageAccordingToCookie() {\n try {\n let autologinCookie = this.services.cookies.getCookie('orbit_autologin_token');\n\n if (autologinCookie) {\n this.CGP.setAutoLoginToken(autologinCookie);\n }\n } catch (err) {\n this.services.logger.error('update local storage according to cookie failed. Error: ' + err);\n } finally {\n // Remove cookie\n this.services.cookies.removeCookie('orbit_autologin_token');\n }\n\n }\n\n getGRSEnvironmentUrls(): Promise {\n return this.CGP.getGRSEnvironments();\n }\n\n @computed\n get activeChallengeCount(): number {\n return this.CGP.countPlayerChallenges();\n }\n\n executeMenuAction(id: string): void {\n this.CGP.menuActionExecute(id);\n }\n\n menuActionExecute(key: string): void {\n return this.CGP.menuActionExecute(key);\n }\n\n\n startLiveTableFeeds(): void {\n if (Check.isFunction(this.CGP.startLiveTableFeeds)) {\n this.CGP.startLiveTableFeeds();\n } else {\n //TODO - to be removed in the future\n (this.CGP as any).startEvolutionLiveFeeds();\n }\n }\n\n stopLiveTableFeeds(): void {\n if (Check.isFunction(this.CGP.stopLiveTableFeeds)) {\n this.CGP.stopLiveTableFeeds();\n } else {\n //TODO - to be removed in the future\n (this.CGP as any).stopEvolutionLiveFeeds();\n }\n }\n\n getDailyDealCampaigns() {\n return this.CGP.getDailyDealCampaigns();\n }\n\n getJackpotsById() {\n return this.CGP.getJackpotsById();\n }\n\n getJackpotsByGameType() {\n return this.CGP.getJackpotsByGameType();\n }\n\n getBankroll(balanceType: BalanceType, plainNumber?: boolean) {\n return this.CGP.getBankroll(balanceType, plainNumber);\n }\n\n runAutoLogin(autoLoginParams: IAutoLoginParams) {\n return this.CGP.runAutoLogin(autoLoginParams);\n }\n\n\n getProductPackageId(): number {\n return this.CGP.getProductPackage();\n }\n\n getSkin(): CgpSkinInfo {\n return {\n getPlatformSystemID: () => this.CGP.getSkin().getPlatformSystemID(),\n getClientPlatform: () => this.CGP.getSkin().getClientPlatform(),\n getVersion: () => this.CGP.getSkin().getVersion(),\n getCulture: () => this.CGP.getSkin().getCulture(),\n getBrandName: () => this.CGP.getSkin().getBrandName(),\n getMinimumAge: () => this.CGP.getSkin().getMinimumAge(),\n getSerialData: (marketingData: any)=> this.CGP.getSkin().getSerialData(marketingData),\n getDefaultHybridSerial: () => this.CGP.getSkin().getDefaultHybridSerial()\n };\n }\n\n getUtils(): ISdkUtils {\n return this.CGP.getUtils();\n };\n\n fireOrbitInitComplete(): void {\n this.CGP.onOrbitInitComplete();\n }\n\n getEnvironment(): string {\n return this.CGP.getEnvironment();\n }\n\n pushDataToDataLayer(data: {}): void {\n this.CGP.pushDataToDataLayer(data);\n }\n\n getCountryName() {\n return this.CGP.getCountryName();\n }\n\n getCountryIso3(): string {\n return this.CGP.getCountryIso3();\n }\n\n getSupportedStates(): IStateOfResidence[] {\n return this.CGP.getSupportedStates();\n }\n\n getWrongLocationDetectionPath(): string {\n return this.CGP.getWrongLocationDetectionPath();\n }\n\n httpPost(url: string, requestData: unknown): Promise {\n return this.CGP.httpPost(url, requestData);\n }\n\n httpGet(url: string, requestData: unknown): Promise {\n return this.CGP.httpGet(url, requestData);\n }\n\n getConfigs(): any {\n return this.CGP.getConfigs();\n }\n\n loadScript(options: LoadScriptOptions): Promise {\n return this.CGP.loadScript(options);\n }\n\n getRefreshToken(): string {\n return this.CGP.getRefreshToken();\n }\n\n getCurrencyIso3(): string {\n return this.CGP.getCurrencyIso3();\n }\n\n get overlayZIndex(): SdkOverlayZIndex {\n return {\n OMG: ExternalLinksZIndexes.Omg,\n GAME_FRAME: ExternalLinksZIndexes.GameFrame\n };\n }\n\n getGoogleClientID(): string {\n return this.CGP.getGoogleClientID();\n }\n\n isInAutologin(): boolean {\n return this.CGP.isInAutologin();\n }\n\n fireDepositWidgetClosed(): void {\n this.CGP.fireDepositWidgetClosed();\n } \n \n fireFreeToPlayWidgetClosed(): void {\n this.CGP.fireFreeToPlayWidgetClosed();\n }\n\n get tokenInfo(): ITokenInfo | null {\n return this.CGP.getToken() || null;\n }\n\n getGeoLocationInfo(): Promise {\n return this.CGP.getGeoLocationInfo();\n }\n\n getDownloadAppLink(): string {\n return this.CGP.getDownloadAppLink();\n }\n\n isDepositWidgetSupportedByHybrid(): boolean {\n return this.CGP.isDepositWidgetSupportedByHybrid();\n }\n\n promptPushNotificationPermissionRequest() {\n return this.CGP.promptPushNotificationPermissionRequest();\n }\n\n openPopUpOnSecondWebView(content: string, timeout: number): void {\n this.CGP.openPopUpOnSecondWebView(content, timeout);\n }\n\n closePopUpOnSecondWebView(): void {\n this.CGP.closePopUpOnSecondWebView();\n }\n\n getBurnoutAnimationZIndex() {\n return this.CGP.getBurnoutAnimationZIndex();\n }\n\n get hybrid(): ISdkHybridService {\n return this.CGP.hybrid;\n }\n\n get currentRegulation(): ILegacyRegulation {\n return this.CGP.currentRegulation;\n }\n\n eventsTrigger: SdkEventsTrigger = new SdkEventsTrigger();\n\n getCurrentBrowserTabId(): string {\n return this.CGP.getCurrentBrowserTabId();\n }\n\n get hasOpenOverlays(): boolean {\n return this.CGP.hasOpenOverlays;\n }\n\n setOrbitActiveOverlayExists(value: boolean): void {\n this.CGP.setOrbitActiveOverlayExists(value);\n }\n\n get gnwp(): ISdkGnwpService {\n return this.CGP.gnwp;\n }\n\n get scriptLoader(): IScriptLoaderService {\n return this.CGP.scriptLoader;\n }\n\n startAutoRetryGeoProcess(): Promise {\n return this.CGP.startAutoRetryGeoProcess();\n }\n\n extractTokenProperty(tokenProperty: string) {\n return this.CGP.extractTokenProperty(tokenProperty);\n }\n\n updateTokenProperty(tokenProperty: string, value: NullableString): void {\n this.CGP.updateTokenProperty(tokenProperty, value);\n }\n\n isLoginPopupEnabled(): boolean {\n return this.CGP.isLoginPopupEnabled();\n }\n\n getAccountData(): any {\n return this.CGP.getAccountData();\n }\n\n getTempAccountGnwpSource(): GNWP_SOURCES {\n return this.CGP.getTempAccountGnwpSource();\n }\n\n\n get isPlayerMessagesConnected(): boolean {\n return this.CGP.isPlayerMessagesConnected();\n }\n\n getGameRestriction(gameType: number, gameGroupId: number, vendorId: number): IGameRestriction {\n return this.CGP.getGameRestriction(gameType, gameGroupId, vendorId);\n }\n\n getCurrentDate(): Date {\n return this.CGP.getCurrentDate();\n }\n\n convertToRegulationTimeZone(date: Date): DateFormattedToRegulationOffset {\n return this.CGP.convertToRegulationTimeZone(date);\n }\n\n format(date: any, mask?: string, utc?: boolean): string {\n return this.CGP.format(date, mask, utc);\n }\n getInactivityTimeoutSettings(): IInactivityTimeoutSettings {\n return this.CGP.getInactivityTimeoutSettings();\n }\n\n setInactivityTimeout(timeout: TimeSpan): void {\n this.CGP.setInactivityTimeout(timeout)\n }\n\n createUserActivityDetactor(params){\n return this.CGP.createUserActivityDetactor(params);\n }\n}","export const CGP_OBJECT_NAME = 'CGP';\n\n\n","import React from 'react';\nimport {IGamesFilterStrategy} from \"../games-filter-strategy.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GamesMap} from \"../../../games/games.service.interface\";\nimport {Nullable} from \"../../../../../common/types/nullable-types\";\nimport {IFilterIndicatorRenderingOptions} from \"../../games-filter.service.interface\";\nimport {IGameFilterDefinition} from '../../filters-definitions/game-filter-definition.interface';\n\nexport class NoGamesFilterStrategy implements IGamesFilterStrategy {\n constructor(private readonly services: IServiceFactoryExtended) {\n }\n\n getFiltersForGame(gameType: number): string[] {\n return null;\n }\n get filteredGamesMap(): GamesMap {\n return this.services.games.gamesMap;\n }\n readonly isFilteringAvailable: boolean = false;\n\n renderMobileFiltersIndicator(): React.ReactElement {\n return null;\n }\n\n renderFiltersIndicator(): Nullable {\n return null;\n }\n\n showFiltersEditor(): void {\n }\n\n dispose(): void {\n }\n\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number {\n return 0;\n }\n\n isValidFilter(filterId: string): boolean {\n return false;\n }\n\n getFiltersDefinitions(filtersIds: string[]): Record {\n return {};\n }\n}","import {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nexport const GAMES_FILTERS_STORAGE_KEY = 'orbitGamesFiltersData';\n\nexport class GamesFiltersStorage {\n constructor(private readonly services: IServiceFactoryExtended) {\n this._savedFilters = this.services.localStorage.getJson(GAMES_FILTERS_STORAGE_KEY) || {};\n }\n\n private _savedFilters: Record = {};\n\n saveFiltersForCurrentArena(filterIds: string[]): void {\n const arenaType = this.services.routing.currentRoute.data?.arenaType;\n if(arenaType) {\n this._savedFilters[arenaType] = filterIds;\n this.services.localStorage.setJson(GAMES_FILTERS_STORAGE_KEY, this._savedFilters);\n }\n }\n\n clearAllSavedFilters(): void {\n this._savedFilters = {};\n this.services.localStorage.removeItem(GAMES_FILTERS_STORAGE_KEY);\n }\n\n getSavedFiltersForCurrentArena(): string[] {\n const arenaType = this.services.routing.currentRoute.data?.arenaType;\n if(arenaType) {\n return this._savedFilters[arenaType] ?? []\n }\n return [];\n }\n}","import {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {\n IGamesFilterService,\n IFilterIndicatorRenderingOptions\n} from './games-filter.service.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {IGamesFilterStrategy} from \"./strategies/games-filter-strategy.interface\";\nimport {GameInfo} from \"../games/game-info\";\nimport React from \"react\";\nimport {action, computed, makeObservable, observable} from \"mobx\";\nimport {Nullable} from \"../../../common/types/nullable-types\";\nimport {NoGamesFilterStrategy} from \"./strategies/no-filter/no-games-filter.strategy\";\nimport {IArenaViewModel} from '../arenas/models/arenas/arena-view-model.interface';\nimport {GamesFiltersStorage} from \"./games-filters-storage\";\nimport {IGameFilterDefinition} from './filters-definitions/game-filter-definition.interface';\n\nconst FILTERS_HASH_NAME = '#filters=';\n\nexport class GamesFilterService extends ServiceBase implements IGamesFilterService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n this._currentFilteringStrategy = new NoGamesFilterStrategy(this.services);\n this._gamesFilterStorage = new GamesFiltersStorage(services);\n this.reaction(() => this.services.routing.currentRoute, () => {\n this._setCurrentStrategy(this.services.arenas.getCurrentArena());\n }, {\n fireImmediately: true\n });\n\n this.reaction(() => this.services.location.currentUri, () => {\n if (!this.services.location.currentUri.hash?.toString()) {\n const savedFilters = this._gamesFilterStorage.getSavedFiltersForCurrentArena();\n if (savedFilters.length > 0) {\n this.applyFilters(savedFilters);\n }\n } else if (this.isCurrentUrlHashWithFilters) {\n const savedFiltersForCurrentArena = this._gamesFilterStorage.getSavedFiltersForCurrentArena();\n if (savedFiltersForCurrentArena.toString() !== this.currentAppliedFiltersIds.toString()) {\n this._gamesFilterStorage.saveFiltersForCurrentArena(this.currentAppliedFiltersIds);\n }\n }\n }, {\n fireImmediately: true\n });\n\n this.reaction(() => this.services.user.isAuthorized, () => {\n if (!this.services.user.isAuthorized) {\n this._gamesFilterStorage.clearAllSavedFilters();\n }\n }, {\n fireImmediately: true\n });\n }\n\n private readonly _gamesFilterStorage: GamesFiltersStorage;\n\n @action.bound\n private _setCurrentStrategy(currentArena: IArenaViewModel) {\n if (this._currentFilteringStrategy) {\n this._currentFilteringStrategy.dispose();\n }\n\n if (currentArena) {\n this._currentFilteringStrategy = currentArena.getGamesFilteringStrategy();\n } else {\n this._currentFilteringStrategy = new NoGamesFilterStrategy(this.services);\n }\n }\n\n private get isCurrentUrlHashWithFilters() {\n const hash = this.services.location.currentUri.hash?.toString();\n if (!hash) {\n return false;\n }\n\n return hash.toLowerCase().startsWith(FILTERS_HASH_NAME)\n }\n\n get filteredGamesMap(): Record {\n return this._currentFilteringStrategy.filteredGamesMap;\n }\n\n @computed\n get currentAppliedFiltersIds(): string[] {\n const urlHash = this.services.location.currentUri.hash?.value;\n if (urlHash) {\n let params = urlHash.split('=');\n if (params[0]?.toLowerCase() === 'filters') {\n return params[1].split(',');\n }\n }\n\n return [];\n }\n\n async applyFilters(filterIds: string[]): Promise {\n this.services.window.scrollTo(0, 0);\n if (filterIds.length > 0) {\n await this.services.location.push(FILTERS_HASH_NAME + filterIds.join(','));\n this._gamesFilterStorage.saveFiltersForCurrentArena(filterIds);\n } else {\n await this.clearFilters();\n }\n }\n\n async clearFilters(): Promise {\n if (this.isFilterOn) {\n this._gamesFilterStorage.saveFiltersForCurrentArena([]);\n await this.services.location.push(this.services.location.currentUri.getUrlWithoutHash());\n }\n }\n\n @observable.ref\n private _currentFilteringStrategy: IGamesFilterStrategy;\n\n\n\n get isFilterOn(): boolean {\n return this.currentAppliedFiltersIds.length > 0;\n }\n\n get isFilteringAvailable(): boolean {\n return this._currentFilteringStrategy.isFilteringAvailable;\n }\n\n isFilterApplied(filterId: string): boolean {\n return this.currentAppliedFiltersIds.includes(filterId);\n }\n\n isValidFilter(filterId: string): boolean {\n return this._currentFilteringStrategy.isValidFilter(filterId);\n }\n\n renderMobileFiltersIndicator(): React.ReactElement {\n return this._currentFilteringStrategy.renderMobileFiltersIndicator();\n }\n\n renderFiltersIndicator(): Nullable {\n return this._currentFilteringStrategy.renderFiltersIndicator();\n }\n\n showFiltersEditor(): void {\n this._currentFilteringStrategy.showFiltersEditor();\n }\n\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number {\n return this._currentFilteringStrategy.getNumberOfGamesBeforeUserApply(filterIDS);\n }\n\n public getFiltersForGame(gameType: number): string[] {\n return this._currentFilteringStrategy.getFiltersForGame(gameType);\n }\n\n getFiltersDefinitions(filtersIds: string[]): Record {\n return this._currentFilteringStrategy.getFiltersDefinitions(filtersIds);\n }\n}\n","import styled, { css } from 'styled-components';\nimport { Image } from '../../../../raw-components/image/image';\n\nexport const GameBadgeDefaultBox = styled(Image) <{ useSquareIcons?: boolean; }>`\n position: absolute;\n left: 0;\n \n ${props => props.useSquareIcons ? css`\n bottom: 0;\n max-width: 40%;\n ` \n : css`\n top: 0;\n height: 24%;\n width: 23%;\n `}\n`;\n","import styled from 'styled-components';\nimport {GameBadgeDefaultBox} from './game-badge.default.box';\n\nexport const GameBadgeCasino777Box = styled(GameBadgeDefaultBox)`\n height: 28%;\n width: 28%;\n`;","import {GameBadgeDefaultBox} from './game-badge.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {GameBadgeCasino777Box} from './game-badge.casino777.box';\n\nexport const GameBadgeBox = styledByTheme(GameBadgeDefaultBox)\n .forCasino777(GameBadgeCasino777Box)\n .apply();\n\n","import React from 'react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {GameBadgeBox} from '../../boxes/game-badge/game-badge.box';\n\nexport interface GameBadgeComponentProps {\n badgeUrl?: string;\n useSquareIcons?: boolean;\n}\n\n\nexport class GameBadgeComponent extends OrbitComponent {\n\n render() {\n if(!this.props.badgeUrl) {\n return null;\n }\n\n if(this.props.badgeUrl) {\n return (\n \n );\n }\n return null;\n }\n}\n","import React from 'react';\nimport {GameBadgeComponent} from '../game-badge/game-badge.component';\nimport {GameImageComponent, GameIconAnimationState} from '../game-image/game-image.component';\nimport {observer} from 'mobx-react';\nimport {TapHandler} from '../../../../tap-handler/tap-handler.component';\nimport {AnyStyledComponent} from 'styled-components';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {GAME_IMAGE_CONTAINER} from '../../../css-constants';\nimport {OrbitComponentWithState} from '../../../../base-components/orbit-component-with-state/orbit-component-with-state';\n\ninterface GameImageContainerComponentState {\n isLoading: boolean;\n}\n\nexport interface GameGameImageContainerComponentProps {\n gameInfo: GameInfo;\n box: AnyStyledComponent;\n playRealGameButton: React.ReactNode | null;\n onOpenRealGame: () => void;\n useSquareIcons?: boolean;\n onAnimationIconStateChange?(state: GameIconAnimationState): void;\n}\n\n\nexport const GameImageContainerComponent = observer(\n class GameImageContainerComponent extends OrbitComponentWithState {\n\n constructor(props) {\n super(props);\n\n this.state = {\n isLoading: true\n };\n }\n\n private _handleImageDoneLoading = () => {\n this.setState({ isLoading: false });\n }\n\n render() {\n //className=\"game-item-image\"\n const gameItemImageRef: any = React.createRef();\n const Box = this.props.box;\n\n return (\n \n \n \n {this.props.playRealGameButton}\n \n \n );\n }\n }\n);\n","import styled from 'styled-components';\nimport { MULTIPLE_LINES_TITLE, TWO_LINES_TITLE } from '../../../css-constants';\n\nexport const GameTitleDefaultBox = styled.div<{ hasTwoLinesTitle?: boolean }>`\n position: relative;\n text-align: center;\n color: ${props => props.theme.colors.backgroundContrast};\n opacity: 1;\n font-size: 1.4rem;\n line-height: 1.3;\n width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n direction: initial;\n padding-bottom: 2px;\n\n &.${TWO_LINES_TITLE} {\n max-width: 90%;\n white-space: initial;\n }\n @media ${({ theme }) => theme.mediaQuery.lAndBelow} {\n font-size: 1.2rem;\n padding-bottom: 0;\n\n &.${MULTIPLE_LINES_TITLE} {\n &::after {\n content: \"...\";\n position: absolute;\n top: 16px;\n }\n }\n }\n\n @media ${({ theme }) => theme.mediaQuery.sAndBelow} {\n font-size: 1.2rem;\n }\n`;\n","import styled from 'styled-components';\nimport {GameTitleDefaultBox} from './game-title.default.box';\n\nexport const GameTitleCasino777Box = styled(GameTitleDefaultBox)`\n color: ${props => props.theme.colors.textContrast};\n ${({theme}) => theme.font.presets.bold};\n font-size: 1.5rem;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 1.2rem;\n }\n`\n","import styled from \"styled-components\";\nimport {GameTitleDefaultBox} from \"./game-title.default.box\";\n\nexport const GameTitleCipBox = styled(GameTitleDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n ${({theme}) => theme.font.presets.regular};\n }\n`","import styled from 'styled-components';\nimport {GameTitleDefaultBox} from './game-title.default.box';\n\nexport const GameTitleSIBox = styled(GameTitleDefaultBox)`\n font-weight: bold;\n`\n","import styled from 'styled-components';\nimport {GameTitleDefaultBox} from './game-title.default.box';\n\nexport const GameTitleMrGreenBox = styled(GameTitleDefaultBox)`\n ${({theme}) => theme.font.presets.light}\n`;\n","import {GameTitleDefaultBox} from './game-title.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {GameTitleCasino777Box} from './game-title.casino777.box';\nimport {GameTitleCipBox} from \"./game-title.cip.box\";\nimport {GameTitleSIBox} from \"./game-title.si.box\";\nimport {GameTitleMrGreenBox} from './game-title.mrgreen.box';\n\nexport const GameTitleBox = styledByTheme(GameTitleDefaultBox)\n .forCip(GameTitleCipBox)\n .forWsopCip(GameTitleCipBox)\n .forSI(GameTitleSIBox)\n .forSICis(GameTitleSIBox)\n .forCasino777(GameTitleCasino777Box)\n .forMrGreen(GameTitleMrGreenBox).apply();","import styled from 'styled-components';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\n\nconst DefaultBox = styled.div`\n text-align: center;\n opacity: 1;\n color: ${props => props.theme.colors.brandSecondary};\n`;\n\nexport const PcBox = styled(DefaultBox)`\n font-size: 1.4rem;\n font-weight: 600;\n`;\n\nexport const MobileBox = styled(DefaultBox)`\n font-size: 1.3rem;\n font-weight: 400;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 0.9rem;\n }\n`;\n\nexport const MinMaxBetAmountDefaultBox = styledByDevice(PcBox, MobileBox);\n","import styled, { css } from 'styled-components';\nimport {PcBox as BasePcBox, MobileBox as BaseMobileBox} from './min-max-bet-amount.default.box';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\n\nconst common = css`\n color: ${props => props.theme.colors.dangerLight};\n font-weight: 600;\n ${({theme}) => theme.font.presets.bold};\n`;\n\nconst PcBox = styled(BasePcBox)`\n ${common}\n font-size: 1.4rem;\n`;\n\nconst MobileBox = styled(BaseMobileBox)`\n ${common}\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n font-size: 1.4rem;\n top: 2rem;\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 1.2rem;\n }\n`;\n\n\nexport const MinMaxBetAmountCasino777Box = styledByDevice(PcBox, MobileBox);","import styled from 'styled-components';\nimport {MinMaxBetAmountDefaultBox} from './min-max-bet-amount.default.box';\n\nexport const MinMaxBetAmountSIBox = styled(MinMaxBetAmountDefaultBox) `\n color: ${({theme}) => theme.colors.textLight};\n ${({theme}) => theme.font.presets.bold};\n`;\n","import styled from 'styled-components';\nimport {MinMaxBetAmountDefaultBox} from './min-max-bet-amount.default.box';\nimport {baseColors} from '../../../../../themes/definitions/mrgreen/base-colors';\n\nexport const MinMaxBetAmountMrGreenBox = styled(MinMaxBetAmountDefaultBox)`\n color: ${baseColors.gray033};\n`;\n","import styled from 'styled-components';\nimport {MinMaxBetAmountDefaultBox} from './min-max-bet-amount.default.box';\n\n\nexport const MinMaxBetAmountCisBox = styled(MinMaxBetAmountDefaultBox)`\n`;\n","import {MinMaxBetAmountDefaultBox} from './min-max-bet-amount.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {MinMaxBetAmountCasino777Box} from './min-max-bet-amount.casino777.box';\nimport {MinMaxBetAmountSIBox} from './min-max-bet-amount.si.box';\nimport {MinMaxBetAmountMrGreenBox} from './min-max-bet-amount.mrgreen.box';\nimport { MinMaxBetAmountCisBox } from './min-max-bet-amount.cis.box';\n\nexport const MinMaxBetAmountBox = styledByTheme(MinMaxBetAmountDefaultBox)\n .forCasino777(MinMaxBetAmountCasino777Box)\n .forSI(MinMaxBetAmountSIBox)\n .forMrGreen(MinMaxBetAmountMrGreenBox)\n .forMrGreenCis(MinMaxBetAmountMrGreenBox)\n .forCis(MinMaxBetAmountCisBox)\n .forCip(MinMaxBetAmountCisBox)\n .apply();","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {Button} from '../../../../../basic-ui-components/button/base/button.component';\n\nexport interface InfoPageButtonComponentProps {\n enabled: boolean;\n onOpenInfoPage: () => void;\n}\n\nexport const InfoPageButtonComponent = observer(\n class InfoPageButtonComponent extends OrbitComponent {\n\n render() {\n if(!this.props.enabled) {\n return null;\n }\n\n return (\n \n );\n }\n }\n);\n","import {GameButtonsDefaultBox} from './game-buttons.default.box';\n\nexport const GameButtonsBox = GameButtonsDefaultBox;","import styled from 'styled-components';\nimport {GAME_BOX} from '../../../css-constants';\n\n//.hover-details\nexport const GameButtonsDefaultBox = styled.div`\n display: flex;\n justify-content: center;\n width: 100%;\n z-index: 2;\n position: absolute;\n margin: auto;\n top: 0;\n left: 0;\n right: 0;\n transform: translateY(5rem);\n opacity: 0;\n transition: all 0.3s ease-in-out;\n padding-top: 2px;\n\n .${GAME_BOX}:hover & {\n transform: translateY(0);\n opacity: 0.9;\n }\n`;","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {Button} from '../../../../../basic-ui-components/button/base/button.component';\nimport {CyClass} from '../../../../../../common/cy-classes';\n\nexport interface PlayDemoButtonComponentProps {\n enabled: boolean;\n onOpenAnonymousGame: () => void;\n}\n\nexport const PlayDemoButtonComponent = observer(\n class PlayDemoButtonComponent extends OrbitComponent {\n\n render() {\n if(!this.props.enabled) {\n return null;\n }\n\n return (\n \n { this.services.translation.translate('DEMO') }\n \n );\n\n }\n }\n);\n\n","import styled from 'styled-components';\n\ninterface GameDetailsContainerProps {\n squareGameIcon?: boolean;\n}\n\nexport const GameDetailsContainerDefaultBox = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n align-content: center;\n justify-content: flex-start;\n top: ${props => props.squareGameIcon? '10px' : '0'};\n min-height: 4.7rem;\n padding: 0 1rem;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n min-height: 4rem;\n padding: 0 0.4rem;\n top: ${props => props.squareGameIcon? '5px' : '0'};\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n min-height: 3.6rem;\n }\n /** Glow Line Boottom **/\n &:after {\n content: \"\";\n position: absolute;\n background-image: url(\"${props => props.theme.images.horizontalLineGlowPC.toString()}\");\n background-repeat: no-repeat;\n background-position: bottom center;\n background-size: contain;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 40px;\n margin: 0 auto;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n background-image: url(\"${props => props.theme.images.horizontalLineGlowMobile.toString()}\");\n }\n }\n`;\n","import styled from 'styled-components';\nimport {\n GameDetailsContainerDefaultBox\n} from './game-details-container.default.box';\n\n\n\nexport const GameDetailsContainerCasino777Box = styled(GameDetailsContainerDefaultBox)`\n overflow: initial;\n &:after {\n background-size: 75%;\n opacity: .6;\n height: 15px;\n bottom:-15px;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n bottom:-18px;\n }\n }\n`","import {GameDetailsContainerDefaultBox} from './game-details-container.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {GameDetailsContainerCasino777Box} from './game-details-container.casino777.box';\n\nexport const GameDetailsContainerBox = styledByTheme(GameDetailsContainerDefaultBox).forCasino777(GameDetailsContainerCasino777Box).apply();","import styled from 'styled-components';\n\nexport const JackpotAmountDefaultBox = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n width: 80%;\n text-align: center;\n opacity: 1;\n font-size: 1.4rem;\n font-weight: 600;\n margin-bottom: 4px;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 1.3rem;\n font-weight: 400;\n width: 100%;\n }\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 1rem;\n }\n`;\n","import styled from 'styled-components';\nimport {JackpotAmountDefaultBox} from './jackpot-amount.default.box';\n\n\nexport const JackpotAmountCasino777Box = styled(JackpotAmountDefaultBox)`\n color: ${props => props.theme.colors.dangerLight};\n font-weight: 600;\n ${({theme}) => theme.font.presets.bold};\n font-size: 1.4rem;\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n font-size: 1.4rem;\n top: 2rem;\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 1.2rem;\n }\n`","import styled from \"styled-components\";\nimport {JackpotAmountDefaultBox} from \"./jackpot-amount.default.box\";\n\nexport const JackpotAmountSiBox = styled(JackpotAmountDefaultBox)`\n font-size: ${props => props.theme.font.size.small};\n font-weight: 400;\n`","import styled from \"styled-components\";\nimport {JackpotAmountDefaultBox} from \"./jackpot-amount.default.box\";\n\nexport const JackpotAmountMrgreenBox = styled(JackpotAmountDefaultBox)`\n width: 100%;\n`","import {JackpotAmountDefaultBox} from './jackpot-amount.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {JackpotAmountCasino777Box} from './jackpot-amount.casino777.box';\nimport {JackpotAmountSiBox} from \"./jackpot-amount.si.box\";\nimport {JackpotAmountMrgreenBox} from \"./jackpot-amount.mrgreen.box\";\n\nexport const JackpotAmountBox = styledByTheme(JackpotAmountDefaultBox)\n .forCasino777(JackpotAmountCasino777Box)\n .forSI(JackpotAmountSiBox)\n .forSICis(JackpotAmountSiBox)\n .forMrGreen(JackpotAmountMrgreenBox)\n .forMrGreenCis(JackpotAmountMrgreenBox)\n .apply();","import {GameInfoContainerDefaultBox} from './game-info-container.default.box';\n\nexport const GameInfoContainerBox = GameInfoContainerDefaultBox;","import styled from 'styled-components';\nimport {ENABLE_HOVER_ANIMATION, GAME_BOX} from '../../../css-constants';\n\nexport const GameInfoContainerDefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-top: 2px;\n width: 100%;\n transition: all 0.3s ease-in-out;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 0;\n }\n \n\n .${GAME_BOX}:hover &{\n &.${ENABLE_HOVER_ANIMATION} {\n transform: translateY(6rem);\n opacity: 0;\n }\n }\n`;\n","import styled from 'styled-components';\n\nexport const AmountContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n width: 100%;\n height: 100%;\n min-height: 2.5rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n min-height: 2.0rem;\n }\n`;\n","import styled from 'styled-components';\n\nexport const TwoRowsGameTitleContainerBox = styled.div<{hasDetails: boolean}>`\n height: 3.5rem;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n height: 2.7rem;\n }\n\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n`;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { observer } from 'mobx-react';\nimport { GameTitleBox } from '../../boxes/game-title/game-title.box';\nimport classNames from 'classnames';\nimport { ENABLE_HOVER_ANIMATION, MULTIPLE_LINES_TITLE, TWO_LINES_TITLE } from '../../../css-constants';\nimport { GameInfo } from '../../../../../services/games/game-info';\nimport { MinMaxBetAmountBox } from '../../boxes/min-max-bet-amount/min-max-bet-amount.box';\nimport { InfoPageButtonComponent } from '../info-page-button/info-page-button.component';\nimport { GameButtonsBox } from '../../boxes/game-buttons/game-buttons.box';\nimport { PlayDemoButtonComponent } from '../play-demo-button/play-demo-button.component';\nimport { GameDetailsContainerBox } from '../../boxes/game-details-container/game-details-container.box';\nimport { JackpotAmountBox } from '../../boxes/jackpot-amount/jackpot-amount.box';\nimport { GameJackpotComponent } from '../../../../game-jackpot/game-jackpot.component';\nimport { GameInfoContainerBox } from '../../boxes/game-info-container/game-info-container.box';\nimport { CyClass } from \"../../../../../../common/cy-classes\";\nimport { AmountContainerBox } from '../../boxes/amount-container/amount-container.box';\nimport { TwoRowsGameTitleContainerBox } from '../../boxes/two-rows-game-title-container/two-rows-game-title-container.box';\nimport { useServices } from \"../../../../../react-hooks/use-services.hook\";\n\nexport interface GameDetailsContainerComponentProps {\n gameInfo: GameInfo;\n disableGameInfoHover: boolean;\n onOpenAnonymousGame: () => void;\n onOpenInfoPage: () => void;\n squareGameIcon?: boolean;\n hasTwoLinesTitle: boolean;\n}\n\nexport const GameDetailsContainerComponent: React.FC = observer((props) => {\n const services = useServices();\n const [hasInfoPage, setHasInfoPage] = useState(false);\n const titleRef = useRef(null);\n\n useEffect(() => {\n props.gameInfo.hasInfoPage().then(hasInfoPage => {\n setHasInfoPage(hasInfoPage)\n })\n }, [props.gameInfo]);\n\n const _allowHoverDetails = () => {\n\n if (props.disableGameInfoHover || services.device.isMobile || !props.gameInfo.allowHoverDetails) {\n return false;\n }\n\n return Boolean(hasInfoPage || props.gameInfo.allowDemoButtonInSingleGame);\n }\n\n useEffect(() => {\n if (!titleRef?.current) return;\n\n const titleElement = titleRef.current;\n const titleHeight = titleElement?.offsetHeight || 0;\n const titleLineHeight = +window.getComputedStyle(titleElement).getPropertyValue('line-height').substring(0, 2);\n const maxElSize = titleLineHeight * 2 + 1;\n\n if (titleHeight > maxElSize) {\n titleElement.style.maxHeight = maxElSize + 'px';\n titleElement.classList.add(MULTIPLE_LINES_TITLE);\n };\n }, [titleRef])\n\n\n const _renderGameButtons = () => {\n if (!_allowHoverDetails()) {\n return null;\n }\n\n return (\n\n \n \n \n \n );\n }\n\n const _renderAmount = () => {\n if (props.gameInfo.hasJackpot) {\n return _renderJackpot();\n }\n\n const formattedMinBaxBets = services.currency.formatMinMaxBet(props.gameInfo.minBet, props.gameInfo.maxBet);\n const hasMinMaxBets = props.gameInfo.allowMinMaxBet && formattedMinBaxBets;\n if (hasMinMaxBets) {\n return _renderMinBaxBet();\n }\n\n return null;\n }\n\n const _hasDetails = () => {\n return props.gameInfo.allowMinMaxBet || props.gameInfo.hasJackpot;\n }\n\n const _renderJackpot = () => {\n return (\n \n \n \n );\n }\n\n const _renderMinBaxBet = () => {\n const formattedMinBaxBets = services.currency.formatMinMaxBet(props.gameInfo.minBet, props.gameInfo.maxBet);\n return (\n \n {formattedMinBaxBets}\n \n );\n }\n\n const _renderTitle = () => {\n const hasDetails = _hasDetails();\n if (props.hasTwoLinesTitle) {\n return \n \n {props.gameInfo.title}\n \n ;\n } else {\n return \n {props.gameInfo.title}\n ;\n }\n }\n\n const _renderGameInfoSection = () => {\n return (\n \n {_renderTitle()}\n {props.hasTwoLinesTitle || _hasDetails() ?\n {_renderAmount()}\n : null}\n \n );\n }\n\n return (\n \n {_renderGameInfoSection()}\n {_renderGameButtons()}\n \n );\n});\n","import styled from 'styled-components';\nimport {SWIPER_MODE} from '../../../css-constants';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\nimport {HOME_PAGE, LOBBY_PAGE} from '../../../../../themes/css-global-classes';\n\nexport interface GameBoxProps {\n squareGameIcon: boolean;\n}\n\nconst DefaultBox = styled.div`\n position: relative;\n margin-top: 10px;\n margin-bottom: 3rem;\n width: calc(100% / 7);\n text-align: center;\n cursor: pointer;\n user-select: none;\n\n\n &.${SWIPER_MODE} {\n flex-shrink: 0;\n justify-content: center;\n }\n`;\n\nexport const PcBox = styled(DefaultBox)`\n .${HOME_PAGE} &.${SWIPER_MODE} {\n width: 16.6667%;\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n .${LOBBY_PAGE} & {\n padding: 0 1%;\n width: calc(100% / 7);\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n margin-right: ${props => props.squareGameIcon ? '15px' : '0'};\n }\n`;\n\nexport const MobileBox = styled(DefaultBox)`\n padding: 0 4px;\n margin-bottom: 0;\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n width: 16.667%;\n &.${SWIPER_MODE} {\n width: 16%;\n }\n }\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n width: 16.667%;\n &.${SWIPER_MODE} {\n width: 16.1%;\n }\n }\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n width: 20%;\n &.${SWIPER_MODE} {\n width: 19%;\n }\n }\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: 33.3333%;\n &.${SWIPER_MODE} {\n width: 31%;\n }\n }\n`;\n\nexport const GameDefaultBox = styledByDevice(PcBox, MobileBox);","import styled, { css } from 'styled-components';\nimport {PcBox as BasePcBox, MobileBox as BaseMobileBox} from './game.default.box';\nimport {SWIPER_MODE} from '../../../css-constants';\nimport {LOBBY_PAGE} from '../../../../../themes/css-global-classes';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\n\nconst common = css`\n ${({theme}) => theme.font.presets.bold};\n`;\n\nconst PcBox = styled(BasePcBox)`\n ${common}\n margin-bottom: 5.5rem;\n\n .${SWIPER_MODE} &{\n height:24rem;\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n .${LOBBY_PAGE} & {\n width:14.25%;\n padding: 0 1%;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n .${SWIPER_MODE} & {\n height:22rem;\n }\n }\n`;\n\nconst MobileBox = styled(BaseMobileBox)`\n ${common}\n\n margin-bottom: 0;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n .${SWIPER_MODE} &{\n height: 18rem;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n .${SWIPER_MODE} &{\n height: 26rem;\n }\n }\n`;\n\nexport const GameCasino777Box = styledByDevice(PcBox, MobileBox);","import styled from \"styled-components\";\nimport {GameDefaultBox} from \"./game.default.box\";\n\nexport const GameCisBox = styled(GameDefaultBox)`\n margin-bottom: 0;\n margin-top: 0\n`;","import {GameDefaultBox} from './game.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {GameCasino777Box} from './game.casino777.box';\nimport {GameCisBox} from \"./game.cis.box\";\n\n// TODO: address this any!!!!\nexport const GameBox: any = styledByTheme(GameDefaultBox)\n .forCis(GameCisBox)\n .forCasino777(GameCasino777Box)\n .apply();","import styled from 'styled-components';\nimport {GAME_BOX} from '../../../css-constants';\n\n\nexport const PlayRealButtonDefaultBox = styled.button`\n background-image: url(\"${props => props.theme.images.spriteSheet.toString()}\");\n background-position: -544px -409px;\n background-size: 1200px;\n background-repeat: no-repeat;\n position: absolute;\n cursor: pointer;\n right: 0;\n left: 0;\n top: 0;\n bottom: 0;\n margin: auto;\n width: 6rem;\n height: 6rem;\n opacity: 0;\n transition: all 0.35s ease-in-out;\n\n .${GAME_BOX}:hover & {\n transform: translateY(0);\n opacity: 0.9;\n }\n\n @media ${({theme}) => theme.mediaQuery.lowHeight}, ${({theme}) => theme.mediaQuery.xlExact} {\n background-position: -552px -408px;\n }\n\n`;","import styled from 'styled-components';\nimport {PlayRealButtonDefaultBox} from './play-real-button.default.box';\n\nexport const PlayRealButtonCasino777Box = styled(PlayRealButtonDefaultBox)`\n background-position: -195px -354px;\n width: 6.3rem;\n height: 6.3rem;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n background-position: -201px -358px;\n }\n`;","import styled from 'styled-components';\nimport {Color} from '../../../../../../common/utils/color-util';\nimport {PlayRealButtonDefaultBox} from './play-real-button.default.box';\n\nexport const PlayRealButtonCasino888Box = styled(PlayRealButtonDefaultBox)`\n background-position: -553px -409px;\n width: 5rem;\n height: 5rem;\n border-radius: 50%;\n box-shadow: 0 0 0 0 ${(props) => Color.fromHex(props.theme.colors.brandPrimary, 0.5).rgba()};\n\n @media ${({theme}) => theme.mediaQuery.lowHeight}, ${({theme}) => theme.mediaQuery.xlExact} {\n width: 6rem;\n height: 6rem;\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 5rem;\n height: 5rem;\n background-position: -553px -409px;\n }\n\n`;","import {PlayRealButtonDefaultBox} from './play-real-button.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {PlayRealButtonCasino777Box} from './play-real-button.casino777.box';\nimport {PlayRealButtonCasino888Box} from './play-real-button.casino888.box';\n\n\nexport const PlayRealButtonBox = styledByTheme(PlayRealButtonDefaultBox)\n .forCasino888(PlayRealButtonCasino888Box)\n .forCasino777(PlayRealButtonCasino777Box).apply();\n","import styled, {css} from 'styled-components';\nimport { ORBIT_TAP } from '../../../../../themes/css-global-classes';\nimport { styledByDevice } from '../../../../../themes/architecture/styled-by-device';\n\n\ninterface GameImageContainerProps {\n isLoading?: boolean;\n squareIcon?: boolean;\n isCasinoGameIcon?: boolean;\n}\n\nfunction getPlaceholderBackground(theme, isLoading: boolean, isSquareIcon: boolean, isCasinoGameIcon: boolean): string {\n\n if (isLoading) {\n return theme.images.emptyImage.toString();\n }\n\n if (isCasinoGameIcon) {\n\n if (isSquareIcon) {\n return theme.images.singleGame.cardAndTablesSquareBackgroundImage.toString();\n }\n\n return theme.images.singleGame.cardAndTablesBackgroundImage.toString();\n }\n\n if (isSquareIcon) {\n return theme.images.singleGame.defaultSquareBackgroundImage.toString();\n }\n\n return theme.images.singleGame.defaultBackgroundImage.toString();\n}\n\n//.game-item-image\nconst DefaultBox = styled.div`\n position: relative;\n width: 100%;\n overflow: hidden;\n max-width: 21rem;\n margin: auto;\n background: url(${({theme, squareIcon, isLoading, isCasinoGameIcon}) => getPlaceholderBackground(theme, isLoading, squareIcon, isCasinoGameIcon)}) no-repeat center center;\n background-size: 100%;\n ${props => props.squareIcon && css`\n border-radius: 15px;\n background-size: 96%;\n `};\n\n &::after {\n position: absolute;\n display: ${({isLoading}) => isLoading ? \"block\" : \"none\"};\n content: \"\";\n top: ${({squareIcon}) => squareIcon ? \"0\" : \"1rem\"};\n left: ${({squareIcon}) => squareIcon ? \"0\" : \"1rem\"};\n right: ${({squareIcon}) => squareIcon ? \"0\" : \"1rem\"};\n bottom: ${({squareIcon}) => squareIcon ? \"0\" : \"1.5rem\"};\n background: radial-gradient(rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.1));\n\n border-radius: ${({squareIcon}) => squareIcon ? \"1.5rem\" : \"35%\"};\n animation: LoadingAnimation 1s linear 3;\n }\n\n @keyframes LoadingAnimation {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n\nexport const MobileBox = styled(DefaultBox)`\n transform: none;\n\n &.${ORBIT_TAP}, &:active {\n transform: scale(0.95);\n }\n\n ${props => props.squareIcon && css`\n border-radius: 8px;\n `};\n`;\n\nexport const PcBox = DefaultBox;\n\nexport const GameImageContainerDefaultBox = styledByDevice(PcBox, MobileBox);","import styled from 'styled-components';\n\nimport {PcBox as BasePcBox, MobileBox as BaseMobileBox} from './game-image-container.default.box';\nimport {LOBBY_PAGE} from '../../../../../themes/css-global-classes';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\nimport {SINGLE_GAME_IMAGE} from '../../../css-constants';\n\n\nfunction common(): string {\n return `\n max-width: 19rem;\n & > .${SINGLE_GAME_IMAGE} {\n top: 4px;\n position: relative;\n }\n `;\n}\n\nconst PcBox = styled(BasePcBox)`\n ${common()}\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n &img {\n min-height: 139px\n .${LOBBY_PAGE} & {\n min-height: 125px;\n }\n }\n }\n`;\n\nconst MobileBox = styled(BaseMobileBox)`\n ${common()}\n`;\n\nexport const GameImageContainerCasino777Box = styledByDevice(PcBox, MobileBox);\n","import React from \"react\";\nimport { observable, action, makeObservable } from \"mobx\";\nimport { observer } from \"mobx-react\";\nimport {GameInfo} from \"../../../services/games/game-info\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {VideoTileComponent} from \"../../live-streaming-tile/video-common-components/video-tile/video-tile.component\";\nimport {VideoItemContainerBox} from \"./boxes/video-item-container.box\";\nimport {IVideoPlayingService} from \"../../../services/video-live-stream/video-playing.service.interface\";\n\nexport enum VIDEO_ITEM_TYPE {\n LIVE_STREAM = 'Live-Streaming-Video-Item',\n STATIC = 'Static-Video-Item'\n}\n\nexport interface SingleGameVideoTemplateProps {\n gameInfo: GameInfo;\n intersectionTarget?: HTMLDivElement;\n onOpenRealGame: () => void;\n videoItemType: VIDEO_ITEM_TYPE;\n isLastGametype?: boolean;\n gameIndex?: number;\n onBringInCentralView?: (gameIndex: number) => void;\n\n}\n\n@observer\nexport class SingleGameVideoTemplate extends OrbitComponent {\n\n constructor(props: SingleGameVideoTemplateProps) {\n super(props);\n\n makeObservable(this);\n }\n\n\n private _inSwiperIntersectionObserver: IntersectionObserver | null = null;\n private _viewportIntersectionObserver: IntersectionObserver | null = null;\n private _videoContainerElement: HTMLDivElement | null = null;\n @observable.ref\n private _isInCenterStage = false;\n @observable.ref\n private _inViewport = false;\n\n private _captureVideoContainerRef = (element: HTMLDivElement | null) => {\n this._videoContainerElement = element;\n if (!this._inSwiperIntersectionObserver || !this._viewportIntersectionObserver) {\n return;\n }\n if (element) {\n this._inSwiperIntersectionObserver.observe(element);\n this._viewportIntersectionObserver.observe(element);\n } else {\n this._inSwiperIntersectionObserver.unobserve(element);\n this._viewportIntersectionObserver.unobserve(element);\n }\n }\n\n\n private _triggerOnBringInCentralView(): void {\n if (this._inViewport && this._isInCenterStage) {\n this.props.onBringInCentralView(this.props.gameIndex);\n }\n }\n\n private _createSwiperIntersectionObserver(element: HTMLElement) {\n const intersectionObserverOptions: IntersectionObserverInit = {\n threshold: 0.99,\n root: element\n };\n if (this.services.mediaQuery.xlAndAbove) {\n intersectionObserverOptions.rootMargin = \"0px -33.33%\";\n }\n\n this._inSwiperIntersectionObserver = new IntersectionObserver(this._inSwiperIntersectionObserverCallback, intersectionObserverOptions);\n }\n\n private _inSwiperIntersectionObserverCallback = (entries: IntersectionObserverEntry[]) => {\n entries.forEach((entry) => {\n this.setIsInCenterStage(entry.isIntersecting);\n });\n }\n\n @action.bound\n setIsInCenterStage(i: boolean) {\n this._isInCenterStage = i;\n this._triggerOnBringInCentralView();\n }\n\n private _destroySwiperIntersectionObserver() {\n if (this._inSwiperIntersectionObserver) {\n this._inSwiperIntersectionObserver.disconnect();\n this._inSwiperIntersectionObserver = null;\n }\n }\n\n private _createViewportIntersectionObserver() {\n this._viewportIntersectionObserver = new IntersectionObserver(this._viewportIntersectionObserverCallback, {\n threshold: 0.99\n });\n }\n\n private _viewportIntersectionObserverCallback = (entries: IntersectionObserverEntry[]) => {\n entries.forEach((entry) => {\n this.setInViewport(entry.isIntersecting);\n });\n }\n\n @action.bound\n setInViewport(i: boolean) {\n this._inViewport = i;\n this._triggerOnBringInCentralView();\n }\n\n private _destroyViewportIntersectionObserver() {\n if (this._viewportIntersectionObserver) {\n this._viewportIntersectionObserver.disconnect();\n this._viewportIntersectionObserver = null;\n }\n }\n\n componentDidMount() {\n super.componentDidMount();\n this._createViewportIntersectionObserver();\n if (this._videoContainerElement) {\n this._viewportIntersectionObserver.observe(this._videoContainerElement);\n }\n if (this.props.intersectionTarget) {\n this._createSwiperIntersectionObserver(this.props.intersectionTarget);\n if (this._videoContainerElement) {\n this._inSwiperIntersectionObserver.observe(this._videoContainerElement);\n }\n }\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this._destroySwiperIntersectionObserver();\n this._destroyViewportIntersectionObserver();\n }\n\n componentDidUpdate(prevProps: SingleGameVideoTemplateProps) {\n if (this.props.intersectionTarget) {\n if (this.props.intersectionTarget !== prevProps.intersectionTarget) {\n this._destroySwiperIntersectionObserver();\n this._createSwiperIntersectionObserver(this.props.intersectionTarget);\n this._inSwiperIntersectionObserver.observe(this._videoContainerElement);\n }\n } else {\n this._destroySwiperIntersectionObserver();\n }\n }\n\n private _getVideoPlayingService = (): IVideoPlayingService => {\n if (this.props.videoItemType === VIDEO_ITEM_TYPE.LIVE_STREAM) {\n return this.services.liveStreamPlaying;\n }\n\n return this.services.staticVideoPlaying;\n };\n\n render() {\n return (\n \n \n \n );\n }\n}\n","import {GameImageContainerDefaultBox} from './game-image-container.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {GameImageContainerCasino777Box} from './game-image-container.casino777.box';\n\nexport const GameImageContainerBox = styledByTheme(GameImageContainerDefaultBox).forCasino777(GameImageContainerCasino777Box).apply();","import styled from \"styled-components\";\n\nexport const GameNumberBadgeDefaultBox = styled.div`\n font-size: 100px;\n line-height: 1;\n ${({theme}) => theme.font.presets.secondary};\n margin-right: -30px;\n color: ${props => props.theme.colors.backgroundDark};\n z-index: 2;\n text-shadow: -1px -1px 0 ${props => props.theme.colors.brandPrimary},\n 1px -1px 0 ${props => props.theme.colors.brandPrimary},\n -1px 1px 0 ${props => props.theme.colors.brandPrimary},\n 1px 1px 0 ${props => props.theme.colors.brandPrimary};\n\n /**\n * BUGFIX-1896215 https://dev.azure.com/888holdings/GamingNDL/_workitems/edit/1896215\n * In a scrolling container (in this case orbit swiper), the first animated icon loaded is above all elements (in this case the static image and the number badge)\n * When swiping, if the first animated icon gets out of the viewport and unloads, the problem is transfered to the second animation.\n * Yes, I know, the solution doesn't have any logic. But I tried this long shot and it worked:\n * https://css-tricks.com/forums/topic/safari-for-ios-z-index-ordering-bug-while-scrolling-a-page-with-a-fixed-element/\n * https://stackoverflow.com/questions/16033416/while-scrolling-on-an-ios-device-the-z-index-of-elements-isnt-working\n * https://stackoverflow.com/questions/9807620/ipad-safari-scrolling-causes-html-elements-to-disappear-and-reappear-with-a-dela\n */\n -webkit-transform: translate3d(0,0,0);\n /**\n * Because YES, Safari is the new Internet Explorer!!!\n */\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n margin-right: -17px;\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 75px;\n margin-right: -16px;\n }\n`;\n","import styled from \"styled-components\";\nimport {GameNumberBadgeDefaultBox} from \"./game-number-badge.default.box\";\n\nexport const GameNumberBadgeMrGreenBox = styled(GameNumberBadgeDefaultBox)`\n position: relative;\n top: -6px;\n right: -15px;\n font-size: 80px;\n font-family: \"888-Orbit\", verdana, sans-serif;\n font-weight: 900;\n text-shadow: none;\n color: white;\n -webkit-text-fill-color: white;\n -webkit-text-stroke-width: 3px;\n -webkit-text-stroke-color: ${props => props.theme.colors.brandPrimary};\n\n @media ${({theme}) => theme.mediaQuery.lAndAbove} {\n font-size: 100px;\n }\n \n &:first-of-type {\n right: -10px;\n }\n`;","import styled from \"styled-components\";\nimport {GameNumberBadgeDefaultBox} from \"./game-number-badge.default.box\";\n\nexport const GameNumberBadgeWsopBox = styled(GameNumberBadgeDefaultBox)`\n position: relative;\n left: 6px;\n ${({theme}) => theme.font.presets.black};\n font-size: 6.5em;\n letter-spacing: -0.05em;\n line-height: 0.9;\n -webkit-text-stroke: 1px ${({theme}) => theme.colors.brandPrimary};\n\n text-shadow: #00000080 0 4px 3px;\n\n @media ${({theme}) => theme.mediaQuery.lAndAbove} {\n font-size: 120px;\n -webkit-text-stroke-width: 2px;\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n margin-right: -30px;\n }\n`;","import {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\nimport {GameNumberBadgeDefaultBox} from \"./game-number-badge.default.box\";\nimport {GameNumberBadgeMrGreenBox} from \"./game-number-badge.mrgreen.box\";\nimport {GameNumberBadgeWsopBox} from \"./game-number-badge.wsop.box\";\n\nexport const GameNumberBadgeBox = styledByTheme(GameNumberBadgeDefaultBox)\n .forMrGreen(GameNumberBadgeMrGreenBox)\n .forWsop(GameNumberBadgeWsopBox)\n .forWsopCip(GameNumberBadgeWsopBox)\n .apply();\n","import React from 'react'\nimport {GameImageContainerComponent} from '../common/parts/game-image-container.component/game-image-container.component';\nimport {GameDetailsContainerComponent} from './parts/game-details-container/game-details-container.component';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {GameInfo} from '../../../services/games/game-info';\nimport {observer} from 'mobx-react';\nimport {GameBox} from './boxes/game/game.box';\nimport {PlayRealButtonBox} from './boxes/play-real-button/play-real-button.box';\nimport {GameImageContainerBox} from './boxes/game-image-container/game-image-container.box';\nimport {GameNumberBadgeBox} from \"./boxes/game-number-badge/game-number-badge.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport { GameIconAnimationState } from '../common/parts/game-image/game-image.component';\nimport {CyClass} from '../../../../common/cy-classes';\n\nexport interface SingleGameRegularTemplateComponentProps {\n className: string;\n gameInfo: GameInfo;\n disableGameInfoHover: boolean;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n onOpenRealGame: () => void;\n onOpenAnonymousGame: () => void;\n onOpenInfoPage: () => void;\n onAnimationIconStateChange?(state: GameIconAnimationState): void;\n gameIndex?: number;\n useSquareIcons?: boolean;\n showNumberBadge?: boolean;\n hasTwoLinesTitle: boolean;\n}\n\n@observer\nexport class SingleGameRegularTemplateComponent extends OrbitComponent {\n public stateActiveTimeout: number | null = null;\n\n get gameInfo(): GameInfo {\n return this.props.gameInfo;\n }\n\n private _renderPlayRealGameButton() {\n if(this.services.device.os.isMobileOS) {\n return null;\n }\n return ();\n }\n\n private _renderGameNumberBadge() {\n if(!this.props.showNumberBadge || Check.isNullOrUndefined(this.props.gameIndex)) {\n return null;\n }\n\n return (\n \n {this.props.gameIndex+1}\n \n )\n }\n render() {\n return (\n <>\n\n {this._renderGameNumberBadge()}\n\n \n\n \n\n \n \n \n );\n }\n}\n","import {Check} from '@sparkware/app-utils';\n\n\nexport class CssClassNameBuilder {\n _classes: string[] = [];\n append(...classes): this {\n\n classes.forEach(item => {\n if(Check.isString(item)) {\n this._classes.push(item);\n } else if(Check.isArray(item)) {\n item.forEach(c => this._classes.push(String(c)));\n } else if (Check.isNullOrUndefined(item)) {\n // just ignore it\n } else {\n throw new Error('append method accepts only string or string[] as argument');\n }\n });\n return this;\n }\n\n build() {\n let result = this._classes.reduce((acc, curr) => acc + ' ' + curr, '');\n return result.substring(1, result.length);\n }\n}\n\n\n","import styled from 'styled-components';\nimport {SWIPER_MODE} from '../../../css-constants';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\n\nconst DefaultBox = styled.div`\n display: flex;\n align-items: center;\n width: 32%;\n margin: 10px 1% 0 0.25rem;\n padding-left: 0;\n padding-right: 0;\n padding-bottom: 5rem;\n cursor: pointer;\n user-select: none;\n`;\n\nconst PcBox = styled(DefaultBox)`\n justify-content: center;\n &.${SWIPER_MODE} {\n flex-shrink: 0;\n }\n`;\n\nconst MobileBox = styled(DefaultBox)`\n flex-direction: row;\n justify-content: space-around;\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n width: 49%;\n flex-shrink: 0;\n padding: 0.5rem;\n margin-right:0;\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: 100%;\n padding: 0 2em 1em;\n margin-left:0;\n margin-right:0;\n margin-bottom: 1rem;\n }\n`;\n\n\n\nexport const GameDefaultBox = styledByDevice(PcBox, MobileBox);\n\n","import {GameDefaultBox} from './game.default.box';\n\nexport const GameBox = GameDefaultBox;","import styled from 'styled-components';\nimport { styledByDevice } from '../../../../../themes/architecture/styled-by-device';\nimport { CssRule } from '../../../../../themes/architecture/css-helpers/css-rule';\n\nconst DefaultBox = styled.div`\n position: relative;\n width: 40%;\n max-width: 20rem;\n margin-left: 0;\n margin-right: 3.5rem;\n overflow: visible;\n background-size: 100%;\n background-image: url(\"${props => props.theme.images.singleGame.defaultBackgroundImage.toString()}\");\n background-repeat: no-repeat;\n\n &:after {\n content: \"\";\n background-image: url(\"${props => props.theme.images.verticalLineGlow.toString()}\");\n background-repeat: no-repeat;\n background-size: contain;\n position: absolute;\n top: 0;\n height: 100%;\n transform: translateX(100%);\n }\n`;\n\n\nconst PcBox = styled(DefaultBox)`\n &:after {\n right: -10px;\n width: 40px;\n\n ${CssRule.For.RTL.build()} & {\n right: 28px;\n }\n }\n\n\n`;\n\nconst MobileBox = styled(DefaultBox)`\n\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n &:after {\n right: -10px;\n width: 40px;\n ${CssRule.For.RTL.build()} & {\n right: 28px;\n }\n }\n }\n\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n &:after {\n right: -8%;\n width: 25px;\n\n ${CssRule.For.RTL.build()} & {\n right: 80%;\n }\n }\n }\n`;\n\nexport const GameImageContainerDefaultBox = styledByDevice(PcBox, MobileBox);\n","import {GameImageContainerDefaultBox} from './game-image-container.default.box';\n\nexport const GameImageContainerBox = GameImageContainerDefaultBox;","import {GameDetailsContainerDefaultBox} from './game-details-container.default.box';\n\nexport const GameDetailsContainerBox = GameDetailsContainerDefaultBox;","import styled from 'styled-components';\n\nexport const GameDetailsContainerDefaultBox = styled.div`\n position: relative;\n flex: 1 0 auto;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n text-align: center;\n font-size: 1rem;\n align-items: flex-start;\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n font-size: 0.85rem;\n justify-content: space-between;\n min-height: 4rem;\n }\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n align-items: center;\n font-size: 0.7rem;\n }\n`;\n","import styled from 'styled-components';\n\nexport const GameTitleDefaultBox = styled.div`\n line-height: 2.5rem;\n font-size: 1.5em;\n font-weight: 300;\n ${({theme}) => theme.font.presets.medium};\n color: ${props => props.theme.colors.textLight};\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n max-width: 13rem;\n line-height: 1.7;\n }\n`;\n","import styled from 'styled-components';\nimport {GameTitleDefaultBox} from './game-title.default.box';\n\nexport const GameTitleCasino777Box = styled(GameTitleDefaultBox)`\n font-size: 1.9em;\n`;\n","import {GameTitleDefaultBox} from './game-title.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {GameTitleCasino777Box} from './game-title.casino777.box';\n\n\nexport const GameTitleBox = styledByTheme(GameTitleDefaultBox).forCasino777(GameTitleCasino777Box).apply();","import styled from 'styled-components';\n\nexport const JackpotAmountDefaultBox = styled.div`\n color: ${props => props.theme.colors.brandSecondary};\n ${({theme}) => theme.font.presets.ultra};\n font-size: 2.6em;\n width: 100%;\n margin-bottom: 4px;\n @media ${({theme}) => theme.mediaQuery.xlExact} {\n font-size: 2.2em;\n }\n`;\n","import styled from 'styled-components';\nimport {JackpotAmountDefaultBox} from './jackpot-amount.default.box';\nimport {baseColors} from \"../../../../../themes/definitions/casino777/base-colors\";\n\nexport const JackpotAmountCasino777Box = styled(JackpotAmountDefaultBox)`\n ${({theme}) => theme.font.presets.secondary};\n font-weight: 300;\n color: ${baseColors.base04Dark};\n text-shadow: 3px 3px 0 ${props => props.theme.colors.textLight}, 0 0 0 ${props => props.theme.colors.textLight}, 1px 1px 0 ${props => props.theme.colors.textLight}, 2px 2px 0 ${props => props.theme.colors.textLight}, 0 0 0 ${props => props.theme.colors.textLight};\n -webkit-text-stroke-width: .5px;\n -webkit-text-stroke-color: ${props => props.theme.colors.textLight};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n color: ${props => props.theme.colors.textLight};\n text-shadow: none;\n letter-spacing: .3px;\n -webkit-text-stroke-width: 0;\n -webkit-text-stroke-color: transparent;\n }\n`;\n","import {JackpotAmountDefaultBox} from './jackpot-amount.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {JackpotAmountCasino777Box} from './jackpot-amount.casino777.box';\n\nexport const JackpotAmountBox = styledByTheme(JackpotAmountDefaultBox).forCasino777(JackpotAmountCasino777Box).apply();","import React from 'react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {Button} from '../../../../../basic-ui-components/button/base/button.component';\nimport {GameDetailsContainerBox} from '../../boxes/game-details-container/game-details-container.box';\nimport {GameTitleBox} from '../../boxes/game-title/game-title.box';\nimport {JackpotAmountBox} from '../../boxes/jackpot-amount/jackpot-amount.box';\nimport {GameJackpotComponent} from '../../../../game-jackpot/game-jackpot.component';\n\nexport interface GameDetailsContainerComponentProps {\n gameInfo: GameInfo;\n onOpenRealGame: () => void;\n}\n\nexport const GameDetailsContainerComponent = observer(\n class GameDetailsContainerComponent extends OrbitComponent {\n render() {\n return (\n \n \n {this.props.gameInfo.title}\n \n\n \n \n \n\n \n {this.services.translation.translate('HIT_THE_JACKPOT')}\n \n \n );\n }\n }\n);","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../services/games/game-info';\nimport {GameImageContainerComponent} from '../common/parts/game-image-container.component/game-image-container.component';\nimport {GameBox} from './boxes/game/game.box';\nimport {GameImageContainerBox} from './boxes/game-image-container/game-image-container.box';\nimport {GameDetailsContainerComponent} from './parts/game-details-container/game-details-container.component';\nimport {GAME_BOX_JACKPOT_TEMPLATE} from '../css-constants';\n\nexport interface SingleGameJackpotTemplateComponentProps {\n gameInfo: GameInfo;\n className: string;\n onOpenRealGame: () => void;\n}\n\nexport const SingleGameJackpotTemplateComponent = observer(\n class SingleGameJackpotTemplateComponent extends OrbitComponent {\n\n\n render() {\n let gameInfo = this.props.gameInfo;\n\n return (\n \n \n\n \n \n );\n }\n }\n);","import {LiveGameContainerDefaultBox} from \"./live-game-container.default.box\";\n\nexport const LiveGameContainerBox = LiveGameContainerDefaultBox;\n","import styled from \"styled-components\";\n\nexport const LiveGameContainerDefaultBox = styled.div`\n\n flex-shrink: 0;\n width: calc(100% / 4);\n padding: 1rem 0.5rem 3rem 0.5rem;\n\n @media ${props => props.theme.mediaQuery.sAndBelow} {\n width: calc(100% / 2);\n padding: 1rem 0.5rem;\n }\n`;\n","import React from 'react'\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {LiveGameContainerBox} from './boxes/live-game-container/live-game-container.box';\nimport {LiveCasinoArenaGridItem} from '../../arena-host/new-live-casino-arena/live-casino-arena-grid/live-casino-arena-grid-item.component';\nimport {GameInfo} from '../../../services/games/game-info';\n\nexport interface SingleGameLiveTemplateComponentProps {\n tableConfig: GameInfo;\n listTitle: string;\n gameIndex: number | undefined;\n seoCategory: string;\n}\n\nexport const SingleGameLiveTemplateComponent = observer(\n class SingleGameLiveTemplateComponent extends OrbitComponent {\n\n render() {\n return (\n \n \n \n );\n }\n }\n);\n\n\n","import {VideoTileDefaultBox} from \"./video-tile-default.box\";\n\nexport const VideoTileBox = VideoTileDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoTileDefaultBox = styled.div`\n position: relative;\n width: 100%;\n overflow: hidden;\n box-shadow: ${props => props.theme.colors.boxBorderDark} 0px 10px 8px -6px;\n\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n border-radius: 12px;\n border: 0.5px solid ${props => props.theme.components.newLiveCasino.colors.gridItem.wrapperBorder};\n }\n\n @media ${({theme}) => `${theme.mediaQuery.lAndBelow} and ${theme.mediaQuery.landscape}`} {\n padding: 0 12.5vw;\n }\n\n @media ${({theme}) => `${theme.mediaQuery.mAndBelow} and ${theme.mediaQuery.landscape}`} {\n padding: 0 25vw;\n }\n`;\n","import {VideoOverlayItemDefaultBox} from \"./video-overlay-item.default.box\";\n\nexport const VideoOverlayItemBox = VideoOverlayItemDefaultBox;\n","import styled, {css} from \"styled-components\";\nimport { hexToRgba } from \"../../../../themes/hex-to-rgba\";\n\ninterface ILiveStreamingOverlayItemDefaultBoxProps {\n capsule?: boolean;\n transparent?: boolean;\n}\n\nexport const VideoOverlayItemDefaultBox = styled.div`\n display: flex;\n background: ${({theme, transparent}) => !transparent && hexToRgba(theme.colors.background.toString(), 0.7)};\n\n\n ${({capsule}) => !capsule ? css`\n padding: 2px;\n border-radius: 4px;\n ` : css`\n padding: 0 0.25rem;\n border-radius: 2rem;\n `}\n`;\n","import {VideoSoundButtonDefaultBox} from \"./video-sound-button-default.box\";\n\nexport const VideoSoundButtonBox = VideoSoundButtonDefaultBox;\n","import styled from \"styled-components\";\nimport { hexToRgba } from \"../../../../../themes/hex-to-rgba\";\n\nexport const VideoSoundButtonDefaultBox = styled.div`\n padding: 0.25rem;\n background: ${({theme}) => hexToRgba(theme.colors.background.toString(), 0.9) };\n border-radius: 50%;\n`;\n","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {VideoSoundButtonBox} from \"./boxes/video-sound-button.box\";\nimport {IVideoPlayingService} from \"../../../../services/video-live-stream/video-playing.service.interface\";\n\nexport interface VideoSoundButtonComponentProps {\n videoPlayingService: IVideoPlayingService;\n}\n\nexport class VideoSoundButtonComponent extends OrbitComponent {\n private _renderIcon() {\n\n if (this.services.user.preferences.sound.isMuted) {\n const MuteIcon = this.services.theme.currentTheme.icons.muteIcon;\n return ;\n }\n\n const UnmuteIcon = this.services.theme.currentTheme.icons.unmuteIcon;\n return ;\n }\n\n private _handleClick() {\n this.services.user.preferences.sound.toggle();\n }\n\n render() {\n return (\n this._handleClick()}>\n {this._renderIcon()}\n \n );\n }\n}\n","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {VideoOverlayItemBox} from \"../video-overlay-item/video-overlay-item.box\";\nimport {VideoSoundButtonComponent} from \"../video-sound-button/video-sound-button.component\";\nimport {IVideoPlayingService} from \"../../../../services/video-live-stream/video-playing.service.interface\";\n\nexport interface VideoTileOverlayComponentProps {\n videoPlayingService: IVideoPlayingService;\n videoPlaying: boolean;\n bottomLeftComponent?: React.ReactNode;\n bottomRightComponent?: React.ReactNode;\n}\n\nexport class VideoTileOverlayComponent extends OrbitComponent {\n\n private _padding = \"1rem\";\n\n private _renderTopRight(): React.ReactElement {\n if (!this.props.videoPlaying) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n\n private _renderBottomLeft(): React.ReactElement {\n if (!this.props.bottomLeftComponent) {\n return null;\n }\n\n return (\n \n {this.props.bottomLeftComponent}\n \n );\n }\n\n private _renderBottomRight(): React.ReactElement {\n if (!this.props.bottomRightComponent) {\n return null;\n }\n\n return (\n \n {this.props.bottomRightComponent}\n \n );\n }\n\n render() {\n return (\n \n {this._renderTopRight()}\n {this._renderBottomLeft()}\n {this._renderBottomRight()}\n \n );\n }\n}\n","import {VideoTileOverlayDefaultBox} from \"./video-tile-overlay-default.box\";\n\nexport const VideoTileOverlayBox = VideoTileOverlayDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoTileOverlayDefaultBox = styled.div`\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-size: 1.5rem;\n ${({theme}) => theme.font.presets.regular};\n color: ${({theme}) => theme.colors.textLight};\n background: rgba(0,0,0,0.5);\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VideoTileStaticImageOverlayBox = styledBox(\"VideoTileStaticImageOverlayBox\");\n","import {VideoTileSkeletonContainerDefaultBox} from \"./video-tile-skeleton-container-default.box\";\n\nexport const VideoTileSkeletonContainerBox = VideoTileSkeletonContainerDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoTileSkeletonContainerDefaultBox = styled.div`\n position: absolute;\n top: 0px;\n left: 0px;\n width: 100%;\n`;\n","import styled from \"styled-components\";\n\ninterface SkeletonAnimatedButtonProps {\n width: string;\n height: string;\n borderRadius?: string;\n}\n\nexport const SkeletonAnimatedButton = styled.div`\n\n width: ${({width}) => width};\n height: ${({height}) => height};\n margin-left: auto;\n\n background: rgba(255, 255, 255, 0.25);\n\n border-radius: ${({borderRadius}) => borderRadius || \"5px\"};\n animation: PulsatingAnimation 2.5s alternate infinite;\n\n @keyframes PulsatingAnimation {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.25;\n }\n }\n`;\n","import styled from \"styled-components\";\n\ninterface SkeletonAnimatedRectangleProps {\n top?: boolean;\n left?: boolean;\n right?: boolean;\n bottom?: boolean;\n width: string;\n height: string;\n borderRadius?: string;\n}\n\nexport const SkeletonAnimatedRectangle = styled.div`\n\n position: absolute;\n\n top: ${({top}) => top ? \"1rem\" : \"initial\"};\n left: ${({left}) => left ? \"1rem\" : \"initial\"};\n right: ${({right}) => right ? \"1rem\" : \"initial\"};\n bottom: ${({bottom}) => bottom ? \"1rem\" : \"initial\"};\n\n width: ${({width}) => width};\n height: ${({height}) => height};\n\n background: rgba(0, 0, 0, 0.25);\n\n border-radius: ${({borderRadius}) => borderRadius || \"5px\"};\n animation: PulsatingAnimation 2s alternate infinite;\n\n @keyframes PulsatingAnimation {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.5;\n }\n }\n`;\n","import {VideoTileFooterDefaultBox} from \"./video-tile-footer-default.box\";\n\nexport const VideoTileFooterBox = VideoTileFooterDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoTileFooterDefaultBox = styled.div`\n display: flex;\n position: relative;\n padding: 2rem 1rem;\n align-items: center;\n justify-content: space-between;\n background: ${({theme}) => theme.colors.backgroundLight.toString()};\n\n @media ${({theme}) => theme.mediaQuery.xlAndAbove } {\n padding: 3rem 2.5rem;\n }\n\n &::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 1px;\n left: 0;\n bottom: 0;\n background: linear-gradient(90deg, transparent 10%, rgba(255, 255, 255, 0.85), transparent 90%);\n }\n`;\n","import {VideoTileSkeletonDefaultbox} from \"./video-tile-skeleton.defaultbox\";\n\nexport const VideoTileSkeletonbox = VideoTileSkeletonDefaultbox;\n","import styled from \"styled-components\";\n\nexport const VideoTileSkeletonDefaultbox = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: ${({theme}) => theme.colors.backgroundLight.toString()};\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport {Image} from \"../raw-components/image/image\";\nimport {GameBox} from \"../single-game/regular-template/boxes/game/game.box\";\nimport {GameBox as JackpotGameBox} from \"../single-game/jackpot-template/boxes/game/game.box\";\nimport {GameTitleBox} from \"../single-game/regular-template/boxes/game-title/game-title.box\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {GameImageContainerBox} from \"../single-game/regular-template/boxes/game-image-container/game-image-container.box\";\nimport {GameImageContainerBox as JackpotGameImageContainerBox} from \"../single-game/jackpot-template/boxes/game-image-container/game-image-container.box\";\nimport {GameDetailsContainerBox} from \"../single-game/regular-template/boxes/game-details-container/game-details-container.box\";\nimport {GameDetailsContainerBox as JackpotGameDetailsContainerBox} from \"../single-game/jackpot-template/boxes/game-details-container/game-details-container.box\";\nimport {AspectRatioContainerComponent} from \"../raw-components/aspect-ratio-container/aspect-ratio-container.component\";\nimport {JACKPOTS_ITEM, LIVE_STREAMING_ITEM, STATIC_VIDEO_ITEM} from \"../../themes/css-global-classes\";\nimport {VideoTileBox} from \"../live-streaming-tile/video-common-components/video-tile/boxes/video-tile.box\";\nimport {SkeletonAnimatedButton} from \"../live-streaming-tile/video-common-components/video-tile-skeleton/skeleton-animated-button.box\";\nimport {SkeletonAnimatedRectangle} from \"../live-streaming-tile/video-common-components/video-tile-skeleton/skeleton-animated-rectangle.box\";\nimport {VideoTileFooterBox} from \"../live-streaming-tile/video-common-components/video-tile-footer/boxes/video-tile-footer.box\";\nimport {VideoTileSkeletonbox} from \"../live-streaming-tile/video-common-components/video-tile-skeleton/video-tile.skeletonbox\";\nimport { CyClass } from \"../../../common/cy-classes\";\nimport { AmountContainerBox } from \"./regular-template/boxes/amount-container/amount-container.box\";\n\nconst DummyTextBox = styled.div`\n background: linear-gradient(90deg, rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.25));\n background-size: 400px 100%;\n border-radius: 5px;\n animation: TextLoadingAnimation 1s linear infinite;\n\n @keyframes TextLoadingAnimation {\n 0% {\n background-position-x: -200px;\n }\n 100% {\n background-position-x: 200px;\n }\n }\n`;\n\nconst DummyTextBoxAbsolute = styled(DummyTextBox)`\n position: absolute;\n top: 0;\n left: 25%;\n right: 25%;\n bottom: 0;\n`;\n\ninterface IDummyTextBoxRelativeProps {\n small?: boolean;\n}\n\nconst DummyTextBoxRelative = styled(DummyTextBox)`\n position: relative;\n width: ${({small}) => small ? \"50%\" : \"80%\"};\n height: 2rem;\n margin-bottom: 1rem;\n`;\n\nexport interface ISingleGameSkeletonComponentProps {\n templateType: string;\n useSquareIcons: boolean;\n}\n\nexport class SingleGameSkeletonComponent extends OrbitComponent {\n\n private _getPlaceholderImageUrl = () => {\n if (this.props.useSquareIcons) {\n return this.services.theme.currentTheme?.images.gameIconPlaceHolderSq.toString();\n } else {\n return this.services.theme.currentTheme?.images.gameIconPlaceHolder.toString();\n }\n }\n private _renderRegularGameSkeleton() {\n return (\n \n \n \n \n \n  \n \n \n  \n \n \n );\n }\n\n private _renderJackpotGameSkeleton() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n }\n\n private _renderVideoSkeleton() {\n return (\n \n \n \n \n \n \n \n \n {this.services.mediaQuery.xlAndAbove ?\n :\n }\n \n \n \n );\n }\n\n render () {\n\n if (this.props.templateType === JACKPOTS_ITEM) {\n return this._renderJackpotGameSkeleton();\n }\n\n if ([LIVE_STREAMING_ITEM, STATIC_VIDEO_ITEM].includes(this.props.templateType)) {\n return this._renderVideoSkeleton();\n }\n\n return this._renderRegularGameSkeleton();\n }\n}\n","import {VideoRetryScreenTileDefaultBox} from \"./video-retry-screen-tile-default.box\";\n\nexport const VideoRetryScreenTileBox = VideoRetryScreenTileDefaultBox;\n","import styled from \"styled-components\";\nimport { hexToRgba } from \"../../../../../themes/hex-to-rgba\";\n\nexport const VideoRetryScreenTileDefaultBox = styled.div`\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n background: ${({theme}) => hexToRgba(theme.colors.background.toString(), 0.6)};\n`;\n","import {VideoRetryScreenIconDefaultBox} from \"./video-retry-screen-icon-default.box\";\n\nexport const VideoRetryScreenIconBox = VideoRetryScreenIconDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoRetryScreenIconDefaultBox = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 5rem;\n height: 5rem;\n background: ${({theme}) => theme.colors.background.toString()};\n border-radius: 50%;\n`;\n","import {VideoRetryScreenTitleDefaultBox} from \"./video-retry-screen-title-default.box\";\n\nexport const VideoRetryScreenTitleBox = VideoRetryScreenTitleDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoRetryScreenTitleDefaultBox = styled.div`\n margin: 1rem 0;\n font-size: 2rem;\n color: ${({theme}) => theme.colors.textLight.toString()};\n`;\n","import {VideoRetryScreenTextDefaultBox} from \"./video-retry-screen-text-default.box\";\n\nexport const VideoRetryScreenTextBox = VideoRetryScreenTextDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoRetryScreenTextDefaultBox = styled.div`\n margin-bottom: 1rem;\n font-size: 1.6rem;\n line-height: 1.5;\n color: ${({theme}) => theme.colors.textLight.toString()};\n`;\n","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport React from 'react';\nimport {VideoRetryScreenTileBox} from \"./video-retry-screen-boxes/video-retry-screen-tile.box\";\nimport {VideoRetryScreenIconBox} from \"./video-retry-screen-boxes/video-retry-screen-icon.box\";\nimport {SvgSizeUnit} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport {VideoRetryScreenTitleBox} from \"./video-retry-screen-boxes/video-retry-screen-title.box\";\nimport {VideoRetryScreenTextBox} from \"./video-retry-screen-boxes/video-retry-screen-text.box\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\n\nexport interface VideoRetryScreenComponentProps {\n retryFn: () => void;\n setHasError: (value: boolean, retryFn?: (() => void) | undefined) => void;\n}\n\nexport default class VideoRetryScreenComponent extends OrbitComponent {\n\n private _retryAndSetError = () => {\n if (this.props.retryFn) {\n this.props.retryFn();\n }\n this.props.setHasError(false);\n };\n\n render(): React.ReactNode {\n const BrokenLinkIcon = this.services.theme.currentTheme.icons.brokenLinkIcon;\n\n return (\n \n \n \n \n \n {this.services.translation.translate('CANT_CONNECT_ERROR_TITLE')}\n \n \n {this.services.translation.translate('CANT_CONNECT_ERROR_MESSAGE')}\n \n \n \n )\n }\n}\n","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport React from 'react';\nimport {LiveCasinoGridItemThumbnailImageBox} from \"../../../arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail-image.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {addQueryParam} from \"../../../../../utils/url-utils\";\n\nexport interface VideoThumbnailImageComponentProps {\n onLoad: () => void;\n onSettled: () => void;\n gameInfo: GameInfo;\n filterBlur: boolean;\n}\n\nexport default class VideoThumbnailImageComponent extends OrbitComponent {\n\n //Priority for game video thumbnail image(takes the 1st that exists):\n // gameinfo.videoThumbnailUrl\n // tableinfo.TableImage\n // gameinfo.gameArenaIcon\n\n private _getImageSource = (): string => {\n const gameInfo: GameInfo = this.props.gameInfo;\n\n if (gameInfo?.videoThumbnailUrl) {\n return gameInfo?.videoThumbnailUrl;\n }\n\n const tableInfo = this.services.liveTableFeeds.getTableInfo(gameInfo.gameType);\n\n if (Check.isEmpty(tableInfo) || !tableInfo.TableImage) {\n return gameInfo?.gameArenaIcon;\n } else {\n // We need this random because we want to force react to reload the image because the url of the image is identical but the image changed.\n let imageRandom = Math.random();\n\n return addQueryParam(tableInfo.TableImage, imageRandom.toString());\n }\n };\n\n render(): React.ReactNode {\n return ();\n }\n}\n","import {VideoTileBettingRangeDefaultBox} from \"./video-tile-betting-range-default.box\";\n\nexport const VideoTileBettingRangeBox = VideoTileBettingRangeDefaultBox;\n","import styled from \"styled-components\";\n\n\nexport const VideoTileBettingRangeDefaultBox = styled.div`\n font-size: 1.2rem;\n color: ${({theme}) => theme.colors.brandPrimary.toString()};\n line-height: 1;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove } {\n margin: 12px 0 0 0rem;\n font-size: 1.3rem;\n }\n`;\n","import {VideoTileGameTitleDefaultBox} from \"./video-tile-game-title-default.box\";\n\nexport const VideoTileGameTitleBox = VideoTileGameTitleDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoTileGameTitleDefaultBox = styled.div`\n text-overflow: ellipsis;\n font-size: 1rem;\n color: ${({theme}) => theme.colors.textLight.toString()};\n line-height: 1.1;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove } {\n font-size: 1.3rem;\n }\n`;\n","import {VideoTileFooterSectionDefaultBox} from \"./video-tile-footer-section-default.box\";\n\nexport const VideoTileFooterSectionBox = VideoTileFooterSectionDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoTileFooterSectionDefaultBox = styled.div<{width?: string;}>`\n width: ${({width}) => width ? width : \"auto\"};\n margin-right: 1rem;\n`;\n","import styled from \"styled-components\";\n\nconst VideoListJackpotValueDefaultBox = styled.span`\n color: ${({theme}) => theme.colors.brandPrimary.toString()};\n margin-left: 0.5rem;\n`;\n\nexport const VideoListJackpotValueBox = VideoListJackpotValueDefaultBox;\n","import styled from \"styled-components\";\n\nconst VideoListJackpotContainerDefaultBox = styled.div`\n display: flex;\n flex-direction: row;\n font-size: 1.2rem;\n margin-top: 5px;\n`;\n\nexport const VideoListJackpotContainerBox = VideoListJackpotContainerDefaultBox;","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport React, {ReactNode} from 'react';\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport {ILiveTableInfo} from \"../../../../services/live-table-feeds-service/live-table-feeds.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {VideoTileBettingRangeBox} from \"../video-tile-betting-range/video-tile-betting-range.box\";\nimport {VideoTileGameTitleBox} from \"../video-tile-game-title/video-tile-game-title.box\";\nimport {VideoTileFooterBox} from \"./boxes/video-tile-footer.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {VideoTileFooterSectionBox} from \"./boxes/video-tile-footer-section.box\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\nimport {GameJackpotComponent} from \"../../../game-jackpot/game-jackpot.component\";\nimport {\n VideoListJackpotValueBox\n} from \"../../static-video-specific-components/video-list-jackpot-value/video-list-jackpot-value.box\";\nimport {\n VideoListJackpotContainerBox\n} from \"../../static-video-specific-components/video-list-jackpot-container/video-list-jackpot-container.box\";\n\nexport type VideoTileFooterType = \"jackpot\" | \"bets\";\n\nexport interface VideoTileFooterComponentProps {\n onClickPlay: () => void;\n gameInfo: GameInfo;\n type: VideoTileFooterType;\n}\n\nexport default class VideoTileFooterComponent extends OrbitComponent {\n\n //Information from GetLiveTables request feed, for live casino games only.\n private get _tableInfo(): ILiveTableInfo | null {\n return this.services.liveTableFeeds.getTableInfo(this.props.gameInfo.gameType);\n }\n\n private _renderMinMaxBet(): ReactNode {\n\n let minBet: number;\n let maxBet: number;\n\n if(Check.isNullOrUndefined(this._tableInfo?.MinBet) || Check.isNullOrUndefined(this._tableInfo?.MaxBet)){\n minBet = this.props.gameInfo.minBet;\n maxBet = this.props.gameInfo.maxBet;\n } else {\n minBet = this._tableInfo.MinBet;\n maxBet = this._tableInfo.MaxBet;\n }\n\n return (\n \n {this.services.currency.formatMinMaxBet(minBet, maxBet)}\n \n );\n }\n\n private _renderGameTitle(): ReactNode {\n\n let title = this.props.gameInfo?.title || \"\\xa0\";\n\n if (this._tableInfo?.Name?.length > 0) {\n title = this._tableInfo.Name;\n }\n\n return (\n \n {title}\n \n );\n }\n\n private _renderJackpot() {\n if(!this.props.gameInfo.hasJackpot) {\n return null;\n }\n\n return (\n \n \n {this.services.translation.translate(\"JACKPOT\")}\n \n \n \n \n \n );\n }\n\n private _renderSecondaryText() {\n switch (this.props.type) {\n case \"bets\":\n return this._renderMinMaxBet();\n case \"jackpot\":\n return this._renderJackpot();\n default:\n return null;\n }\n }\n\n render(): React.ReactNode {\n return (\n \n \n {this._renderGameTitle()}\n {this._renderSecondaryText()}\n \n \n \n {this.services.translation.translate(\"PLAY_NOW\")}\n \n \n \n );\n }\n}\n","import React from \"react\";\nimport { imagePreload, ImagePreloadPromiseResponse } from \"../../../../../common/utils/image-preload\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {VideoTileBox} from \"./boxes/video-tile.box\";\nimport {AspectRatioContainerComponent} from \"../../../raw-components/aspect-ratio-container/aspect-ratio-container.component\";\nimport {VideoTileOverlayComponent} from \"../video-tile-overlay/video-tile-overlay.component\";\nimport {VideoTileOverlayBox} from \"../video-tile-overlay/boxes/video-tile-overlay.box\";\nimport {VideoTileStaticImageOverlayBox} from \"../video-tile-static-image-overlay/video-tile-static-image-overlay.box\";\nimport {VideoTileSkeletonContainerBox} from \"../video-tile-skeleton-container/video-tile-skeleton-container.box\";\nimport {VideoComponent} from \"../video-component/video.component\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport {observer} from \"mobx-react\";\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport {SingleGameSkeletonComponent} from \"../../../single-game/single-game-skeleton.component\";\nimport {LIVE_STREAMING_ITEM} from \"../../../../themes/css-global-classes\";\nimport {TableSeatsComponent} from \"../../../arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/table-seats.component\";\nimport {RouletteDrawsComponent} from \"../../../arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/roulette-draws.component\";\nimport {IVideoPlayingService} from \"../../../../services/video-live-stream/video-playing.service.interface\";\nimport VideoRetryScreenComponent from \"../video-retry-screen/video-retry-screen.component\";\nimport {VIDEO_ITEM_TYPE} from \"../../../single-game/video-template/single-game-video-template.component\";\nimport VideoThumbnailImageComponent from \"../video-thumbnail-image/video-thumbnail-image.component\";\nimport VideoTileFooterComponent from \"../video-tile-footer/video-tile-footer.component\";\nimport {\n OrbitMarketingEventAnalyticsLabel\n} from \"../../../../services/analytics/analytics.service.interface\";\n\nexport interface VideoTileComponentProps {\n gameInfo: GameInfo;\n isInCenterStage: boolean;\n inViewport: boolean;\n onOpenRealGame: () => void;\n videoPlayingService: IVideoPlayingService;\n videoItemType: VIDEO_ITEM_TYPE;\n isLastGameType?: boolean;\n}\n\n@observer\nexport class VideoTileComponent extends OrbitComponent {\n\n constructor(props: VideoTileComponentProps) {\n\n super(props);\n\n makeObservable(this);\n }\n\n private _posterImageLoadPromise: Promise | undefined = undefined;\n\n @observable.ref\n private _hasError: boolean = false;\n\n private _retryFn: (() => void) | undefined;\n\n @action.bound\n setHasError(value: boolean, retryFn?: (() => void) | undefined) {\n this._hasError = value;\n this._retryFn = retryFn;\n }\n\n @observable.ref\n private _posterImageLoaded = false;\n\n @action.bound\n private setPosterImageLoaded(value: boolean) {\n this._posterImageLoaded = value;\n }\n\n private onPosterImageLoaded = () => {\n this.setPosterImageLoaded(true);\n }\n\n @observable.ref\n private _isVideoLoading: boolean = true;\n\n @observable.ref\n private _isFirstTimeLoading: boolean = true;\n\n @action.bound\n setIsVideoLoading(value: boolean) {\n this._isVideoLoading = value;\n if (value === false) {\n this.firstTimeLoadingDone();\n }\n }\n\n @action.bound\n firstTimeLoadingDone() {\n if (this._isFirstTimeLoading === true) {\n this._isFirstTimeLoading = false;\n }\n }\n\n @observable.ref\n private _isWatchTimeLimitReached: boolean = false;\n\n @action.bound\n setIsWatchTimeLimitReached(value: boolean) {\n this._isWatchTimeLimitReached = value;\n }\n\n private _onPlayClickHandler = () => {\n this.props.onOpenRealGame();\n const gaCategory = this.props.videoPlayingService.gaCategory;\n this.services.analytics.sendOrbitMarketingEvent(gaCategory, 'PLAY_GAME', OrbitMarketingEventAnalyticsLabel.Click, this.props.gameInfo.gameType);\n };\n\n componentDidMount() {\n if (this.props.gameInfo.videoThumbnailUrl) {\n this._posterImageLoadPromise = imagePreload(this.props.gameInfo.videoThumbnailUrl);\n this._posterImageLoadPromise.then(this.onPosterImageLoaded);\n }\n }\n\n componentWillUnmount() {\n if (this._posterImageLoadPromise) {\n this._posterImageLoadPromise = undefined;\n }\n }\n\n private _renderPlayerOverlay() {\n if (!this._isWatchTimeLimitReached && !this._isVideoLoading) {\n return null;\n }\n\n let statusText = '';\n if (this._isWatchTimeLimitReached) {\n statusText = this.services.translation.translate('LIVE_STREAM_WATCH_TIME_REACHED');\n } else if (this._isVideoLoading) {\n statusText = this.services.translation.translate('LIVE_STREAM_VIDEO_LOADING');\n }\n\n return {statusText};\n }\n\n private _renderRetryScreen() {\n return (\n \n )\n }\n\n private _renderPlayer() {\n return (\n \n {/* For the video element I cannot conditionally render it for this.props.isInCenterStage because when the video reaches end and the user\n swipes right/left it renders again and starts again */}\n \n {((this.services.mediaQuery.xlAndAbove && !this.props.isInCenterStage) || this._hasError || (this.props.isInCenterStage && this._isFirstTimeLoading && this._posterImageLoaded)) ? this._renderVideoThumbnailImage(this._hasError && this.props.isInCenterStage) : this._renderPlayerOverlay()}\n {this._renderTileOverlayComponent()}\n {(this._hasError && this.props.isInCenterStage) ? this._renderRetryScreen() : null}\n \n );\n }\n\n private _renderTileOverlayComponent(): React.ReactNode {\n if (this.props.videoItemType === VIDEO_ITEM_TYPE.STATIC) {\n return (\n \n );\n }\n\n const tableInfo = this.services.liveTableFeeds.getTableInfo(this.props.gameInfo.gameType);\n\n return (\n }\n bottomRightComponent={}\n videoPlaying={this.props.isInCenterStage && !this._hasError}\n />\n )\n\n }\n\n private _renderVideoThumbnailImage(filterBlur: boolean) {\n return \n }\n\n private _renderFooter() {\n return (\n \n );\n }\n\n private _renderSkeleton() {\n if (this._isFirstTimeLoading && !this._posterImageLoaded) {\n return (\n \n \n \n )\n }\n }\n\n private _renderStaticImageOverlay() {\n if (this.props.isInCenterStage || this.services.mediaQuery.lAndBelow) {\n return null;\n }\n return ;\n }\n\n\n render() {\n\n return (\n \n {this._renderPlayer()}\n {this._renderFooter()}\n {this._renderSkeleton()}\n {this._renderStaticImageOverlay()}\n \n );\n }\n}\n","import {VideoItemContainerDefaultBox} from \"./video-item-container-default.box\";\n\nexport const VideoItemContainerBox = VideoItemContainerDefaultBox;\n","import styled from \"styled-components\";\nimport {flexFixedSizeItem} from \"../../../../themes/architecture/css-helpers/flex\";\n\nexport const VideoItemContainerDefaultBox = styled.div<{stepBackStyle: boolean;}>`\n width: 100%;\n ${flexFixedSizeItem}\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n width: 33.33%;\n transition: transform 0.5s ease-in-out;\n transform: ${({stepBackStyle}) => stepBackStyle ? \"scale(0.7)\" : \"scale(1)\"};\n }\n`;\n","import React, {useRef} from 'react';\nimport {SingleGameRegularTemplateComponent} from './regular-template/single-game-regular-template.component';\nimport {GameInfo, OpenGameParameters} from '../../services/games/game-info';\nimport {CssClassNameBuilder} from '../../../utils/css-class-name-builder';\nimport {observer} from 'mobx-react';\nimport {GAME_BOX, SWIPER_MODE} from './css-constants';\nimport {SingleGameJackpotTemplateComponent} from './jackpot-template/single-game-jackpot-template.component';\nimport {JACKPOTS_ITEM, LIVE_CASINO_ITEM, LIVE_STREAMING_ITEM, STATIC_VIDEO_ITEM} from '../../themes/css-global-classes';\nimport {CyClass} from '../../../common/cy-classes';\nimport {SingleGameLiveTemplateComponent} from './live-template/single-game-live-template.component';\nimport {SingleGameVideoTemplate, VIDEO_ITEM_TYPE} from './video-template/single-game-video-template.component';\nimport {GameIconAnimationState} from './common/parts/game-image/game-image.component';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {SingleGameSkeletonComponent} from \"./single-game-skeleton.component\";\n\ninterface SingleGameComponentProps extends ComponentServicesPick<'lobbyGameInfoPreview'>{\n gameType: number;\n seoCategory: string;\n listTitle: string;\n listPosition?: number,\n AdminListID?: number,\n AIListTypeID?: number;\n templateType?: any;\n gameIndex?: number;\n skipIntermediatePage?: boolean;\n disableGameInfoHover: boolean;\n isInsideSwiper?: boolean;\n aiEngineName?: string;\n useSquareIcons?: boolean;\n showNumberBadge?: boolean;\n intersectionTarget?: HTMLDivElement;\n hasTwoLinesTitle?: boolean;\n isLastGametype?: boolean;\n onBringInCentralView?: (gameIndex: number) => void;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const animatedIconState = useRef('static');\n const gameInfo = services.games.gamesMap[props.gameType];\n\n const _openGame = async (openInRealMode: boolean) => {\n\n\n const openGameParams: OpenGameParameters = {\n isRealMode: openInRealMode,\n pageName: props.seoCategory,\n listTitle: props.listTitle,\n listPosition: props.listPosition,\n AdminListID: props.AdminListID,\n AIListTypeID: props.AIListTypeID,\n gameIndex: props.gameIndex,\n aiEngine: props.aiEngineName,\n showIntermediatePage: !props.skipIntermediatePage,\n animatedIconState: animatedIconState.current\n };\n\n await gameInfo.open(openGameParams)\n }\n\n const sendAnalytics = (label: string) => {\n services.analytics.sendElasticInfoEvent({eventType:\"CGP_Game_Click\",category:props.seoCategory, action: props.listTitle, label: label}, true);\n }\n\n\n const openRealGame = async () => {\n await _openGame(true);\n };\n\n const openAnonymousGame = async () => {\n await _openGame(false);\n };\n\n const openInfoPage = async () => {\n const infoPageUrl = await gameInfo.getInfoPageURL();\n services.location.push(infoPageUrl);\n sendAnalytics(`SEO_${gameInfo.gameType}`);\n };\n\n const _allowPreview = () => {\n return props.lobbyGameInfoPreview.allowGamePreview\n && !props.disableGameInfoHover;\n }\n\n const setAnimatedIconState = (state: GameIconAnimationState) => {\n animatedIconState.current = state;\n }\n\n const onMouseEnter = () => {\n if (_allowPreview()) {\n props.lobbyGameInfoPreview.setGamePreview(props.gameType);\n }\n };\n\n const onMouseLeave = () => {\n if (_allowPreview()) {\n props.lobbyGameInfoPreview.clearGamePreview();\n }\n };\n\n const _buildComponentClasses = (gameInfo: GameInfo) => {\n let builder = new CssClassNameBuilder();\n\n builder.append(GAME_BOX);\n\n if(props.isInsideSwiper) {\n builder = builder.append(SWIPER_MODE);\n }\n\n if (gameInfo) {\n builder = builder.append(`game-group-${toCssClass(gameInfo.gameGroup)}`)\n .append(gameInfo.gameCategoryClassName)\n .append(`game-company-${toCssClass(gameInfo.companyName)}`)\n .append(`game-type-${gameInfo.gameType}`);\n }\n\n if(props.skipIntermediatePage) {\n builder.append(CyClass('cy-skip-intermediate-page'));\n }\n\n return builder.build();\n\n }\n\n\n if(!gameInfo) {\n return null;\n }\n\n try {\n\n const classes = _buildComponentClasses(gameInfo);\n\n switch (props.templateType) {\n\n case JACKPOTS_ITEM:\n return (\n \n );\n\n case LIVE_CASINO_ITEM:\n return (\n \n );\n\n case LIVE_STREAMING_ITEM:\n return (\n \n );\n\n case STATIC_VIDEO_ITEM:\n return (\n \n );\n\n default:\n return (\n \n );\n }\n\n } catch (err) {\n services.logger.error(`Failed to render SingleGameComponent for game ${gameInfo.gameType} - ${gameInfo.title} in list ${props.listTitle}`, err);\n return null;\n }\n\n});\n\nexport const SingleGameComponent = withServices(ComponentBody, ['lobbyGameInfoPreview'], {\n renderSkeleton: props => {\n return (\n \n );\n }\n});\n\nfunction toCssClass(str: string){\n try{\n return str.replace(/\\s+/g, '-').toLowerCase();\n }\n catch(e){\n return '';\n }\n}\n\n","import styled from 'styled-components';\nimport {GameBox} from '../../../single-game/regular-template/boxes/game/game.box';\nimport { CssRule } from '../../../../themes/architecture/css-helpers/css-rule';\n\n\nexport const GamePlaceHolderDefaultBox = styled(GameBox)`\n ${CssRule.For.mobile.embededHybrid.build()} & , ${CssRule.For.mobile.miniOrbit.build()} & {\n display: none;\n }\n`;","import {GamePlaceHolderDefaultBox} from './game-placeholder.default.box';\n\nexport const GamePlaceHolderBox = GamePlaceHolderDefaultBox;","import {GameImageDefaultBox} from './game-image.default.box';\n\nexport const GameImageBox = GameImageDefaultBox;","import styled from 'styled-components';\nimport {GameImageBox as BaseGameImageBox} from '../../../single-game/common/boxes/game-image/game-image.box';\n\nexport const GameImageDefaultBox = styled(BaseGameImageBox)`\n cursor: default;\n`;\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {GamePlaceHolderBox} from './boxes/placeholder/game-placeholder.box';\nimport {GameImageBox} from './boxes/game-image/game-image.box';\nimport {GameImageContainerBox} from '../single-game/regular-template/boxes/game-image-container/game-image-container.box';\nimport {observer} from 'mobx-react';\nimport {GAME_IMAGE_CONTAINER, SWIPER_MODE} from '../single-game/css-constants';\nimport classNames from 'classnames';\n\nexport interface SingleGamePlaceholderComponentProps {\n isInsideSwiper: boolean\n}\n\nexport const SingleGamePlaceholderComponent = observer(\n class SingleGamePlaceholderComponent extends OrbitComponent {\n render() {\n return (\n \n \n \n \n \n );\n }\n }\n);\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const SwiperWrapperBox = styledBox(\"SwiperWrapperBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const SwiperGamesListBox = styledBox(\"SwiperGamesListBox\")\n","import {SwiperDefaultBox} from './swiper.default.box';\n\nexport const SwiperBox = SwiperDefaultBox;","import styled from 'styled-components';\n\nexport const SwiperDefaultBox = styled.div`\n /** This overflow hidden solves a problem with live video streaming on right-to-left languages\n Without it, the IntersectionObserver does not work correctly and a weird behavior happens:\n The first video flicker like it is intersecting and transforms from scale(0.7) to scale(1) but in that process it loses intersection (ratio>0.99) and transforms back\n And again and again, an infinite flicker */\n overflow: hidden;\n`;","import React, {useEffect, useRef} from 'react';\nimport {observer} from 'mobx-react';\nimport {SingleGameComponent} from '../single-game/single-game.component';\nimport {SingleGamePlaceholderComponent} from '../single-game-placeholder/single-game-placeholder.component';\nimport classNames from 'classnames';\nimport {SwiperWrapperBox} from './boxes/swiper-wrapper/swiper-wrapper.box';\nimport {SwiperGamesListBox} from './boxes/swiper-games-list/swiper-games-list.box';\nimport {SwiperBox} from './boxes/swiper/swiper.box';\nimport {SingleGameSkeletonComponent} from '../single-game/single-game-skeleton.component';\nimport {CyClass} from '../../../common/cy-classes';\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\n\nexport interface OrbitSwiperComponentProps {\n viewModel: ISwiperListViewModel;\n numberOfPlaceholders?: number;\n skipIntermediatePage?: boolean;\n showNumberBadge?: boolean;\n className?: string;\n listPosition: number;\n lastGameType?: number;\n onGameBringInCentralView?: (gameIndex: number) => void;\n}\n\nexport const OrbitSwiperComponent: React.FC = observer((props) => {\n const services = useServices();\n const _swiperGameListElementRef = useRef(null);\n const _swiperWrapperElementRef = useRef(null);\n\n useEffect(() => {\n props.viewModel.swipeLogicHandler.setElement(_swiperGameListElementRef.current);\n\n return () => {\n props.viewModel.swipeLogicHandler.setElement(null);\n }\n\n }, [props.viewModel.swipeLogicHandler]);\n\n\n const _shouldUseSquareIcons = () => {\n return props.viewModel.shouldUseSquareIcons();\n }\n\n const _renderOneGame = (gameType: number, gameIndex: number, isLastGameType?: boolean) => {\n return ;\n }\n\n const _renderPlaceholders = () => {\n\n if (props.viewModel.numberOfGamesSkeletons > 0) {\n return null;\n }\n\n let placeHolders: React.ReactNode[] = [];\n let numberOfPlaceholders = props.numberOfPlaceholders || 0;\n\n for (let i = 0; i < numberOfPlaceholders; i++) {\n placeHolders.push();\n }\n\n return placeHolders;\n }\n\n const _renderGamesSkeletons = () => {\n\n let numSkeletons = props.viewModel.numberOfGamesSkeletons;\n\n let skeletons = [];\n\n for (let i = 1; i <= numSkeletons; i++) {\n skeletons.push(\n \n );\n }\n\n return skeletons;\n }\n\n const _renderGames = () => {\n\n const gameTypes = props.viewModel.gameTypes;\n if (gameTypes.length > 0) {\n return gameTypes.map((gameType, index) => {\n return _renderOneGame(gameType, index, gameType === props.lastGameType)\n });\n }\n return _renderGamesSkeletons();\n }\n\n\n if (!props.viewModel.isVisible) {\n return null;\n }\n\n return (\n \n\n {props.viewModel.renderListHeader()}\n\n \n \n {props.viewModel.renderSpecialWidgets()}\n {_renderGames()}\n {_renderPlaceholders()}\n \n {props.viewModel.renderListNavigation()}\n \n\n {props.viewModel.renderListFooter()}\n\n \n );\n\n});\n\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {observer} from 'mobx-react';\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\n\ninterface RecentlyPlayedComponentProps {\n viewModel: ISwiperListViewModel;\n listPosition: number\n}\n\nexport const RecentlyPlayedComponent = observer(\n class RecentlyPlayedComponent extends OrbitComponent {\n\n render() {\n const viewModel = this.props.viewModel;\n let numberOfPlaceholders = Math.max(0, 6 - viewModel.gameTypes.length);\n\n return (\n \n );\n }\n }\n);\n\n\n","import React from \"react\";\nimport {IGamesListRenderer} from \"./games-list-renderer.interface\";\nimport {IGamesListViewModel} from \"./games-list-view-model.interface\";\nimport {IArenaToGamesListAdapter} from \"../arenas/arena-to-games-list-adapter.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport { computed, makeObservable } from \"mobx\";\nimport {TextTranslation} from \"../../../translation/text-translation\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IAiSortOptions} from \"../../../ai-engine/ai-engine.service.interface\";\n\nexport abstract class GamesListBaseModel implements IGamesListRenderer, IGamesListViewModel {\n constructor(protected readonly arena: IArenaToGamesListAdapter) {\n makeObservable(this);\n }\n\n abstract get listId(): number;\n abstract get title(): TextTranslation;\n abstract get forceInLayout(): boolean;\n abstract get templateType(): string;\n\n protected abstract get _forceRoundIcons(): boolean;\n protected abstract get _useSquareIcons(): boolean;\n protected abstract get _isAISorted(): boolean;\n protected abstract get _numberOfGamesToBeIgnoredInAISorting(): number | undefined;\n protected abstract _shouldBeDisplayed(): boolean;\n protected abstract _renderList(listPosition: number): React.ReactElement | null;\n protected abstract _getGameTypes(): number[];\n abstract renderListHeader(): React.ReactElement;\n\n protected get services(): IServiceFactoryExtended {\n return this.arena.services;\n }\n\n get arenaName(): string {\n return this.arena.arenaName;\n }\n\n get listKey(): string {\n return `${this.arena.arenaName}_${this.title.translationKey}_${this.listId}`;\n }\n\n get aiEngine(): string {\n if(this.arena.aiEngine) {\n return this.arena.aiEngine;\n }\n\n if(this._isAISorted) {\n return this.services.aiEngine.getAiEngine();\n }\n\n return \"\";\n }\n get maxGamesToShowInList(): number {\n return this.arena.maxGamesToShowInList;\n }\n\n @computed\n get isVisible(): boolean {\n return this._shouldBeDisplayed();\n }\n\n @computed\n get gameTypes(): number[] {\n return this._applyGameTypesTransformations(this._getGameTypes());\n }\n\n protected _applyGameTypesTransformations(gameTypes: number[]): number[] {\n return this._reduceGameTypes(\n this._sortGameTypes(\n this._distinctGameTypes(gameTypes)));\n }\n\n protected _sortGameTypes(gameTypes: number[]): number[] {\n let aiSortingOptions: IAiSortOptions = {ignoreNumberOfGames: this._numberOfGamesToBeIgnoredInAISorting};\n\n if (!Check.isEmpty(this.arena.sortingGametypesMapOverride)) {\n aiSortingOptions.gamesMapOverride = this.arena.sortingGametypesMapOverride;\n }\n\n if(this._isAISorted) {\n return this.services.aiEngine.sortGames(gameTypes, aiSortingOptions);\n }\n\n return gameTypes;\n }\n\n protected _reduceGameTypes(gameTypes: number[]): number[] {\n return gameTypes.filter(gt => this.services.gamesFilter.filteredGamesMap[gt])\n .slice(0, this.maxGamesToShowInList);\n }\n\n protected _distinctGameTypes(gameTypes: number[]): number[] {\n return [...new Set(gameTypes)];\n }\n\n shouldUseSquareIcons(): boolean {\n if(this._forceRoundIcons){\n return false;\n }\n\n return this.services.theme.shouldUseSquareIcons || this._useSquareIcons;\n }\n\n render(listPosition: number): React.ReactElement | null {\n return this._renderList(listPosition);\n }\n\n}","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ListTitleIconBox = styledBox('ListTitleIconBox');\n","import {JackpotWidgetDefaultBox} from './jackpot-widget-wrapper.default.box';\n\nexport const JackpotWidgetWrapperBox = JackpotWidgetDefaultBox;\n","import styled from 'styled-components';\nimport { flexFixedSizeItem } from '../../../../themes/architecture/css-helpers/flex';\n\nexport const JackpotWidgetDefaultBox = styled.div`\n ${flexFixedSizeItem}\n margin: 1rem 1rem 3rem;\n align-self: stretch;\n max-width: 24rem;\n width: calc(100% / 6);\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n width: calc(100% / 5);\n margin: 1rem 1.5rem 0;\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: calc(100% / 3);\n margin: 1rem 1.5rem 0;\n }\n`;\n","import {RedTigerWidgetDefaultBox} from './red-tiger-widget.default.box';\n\nexport const RedTigerWidgetBox = RedTigerWidgetDefaultBox;\n","import styled from 'styled-components';\nimport { flexFixedSizeItem } from '../../../../themes/architecture/css-helpers/flex';\n\nexport const RedTigerWidgetDefaultBox = styled.div`\n ${flexFixedSizeItem}\n margin: 1rem 1rem 3rem;\n align-self: stretch;\n max-width: 24rem;\n width: calc(100% / 6);\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 1rem 1.5rem 0;\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n width: calc(100% / 5);\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: calc(100% / 3);\n }\n`;\n","import styled from 'styled-components';\n\n\nexport const RedTigerWidgetHitAreaDefaultBox = styled.div`\n cursor: pointer;\n width: 100%;\n height: 100%;\n`;\n","import styled from 'styled-components';\nimport { RedTigerWidgetHitAreaDefaultBox } from './red-tiger-widget-hit-area.default.box';\n\n\nexport const RedTigerWidgetHitAreaCasino777Box = styled(RedTigerWidgetHitAreaDefaultBox)`\n cursor: default;\n`;","import { styledByTheme } from './../../../../themes/architecture/styled-by-theme';\nimport { RedTigerWidgetHitAreaDefaultBox } from './red-tiger-widget-hit-area.default.box';\nimport { RedTigerWidgetHitAreaCasino777Box } from './red-tiger-widget-hit-area.casino777.box';\n\nexport const RedTigerWidgetHitAreaBox = styledByTheme(RedTigerWidgetHitAreaDefaultBox)\n .forCasino777(RedTigerWidgetHitAreaCasino777Box)\n .apply();","import styled from 'styled-components';\n\n\nexport const RedTigerWidgetFrameContainerDefaultBox = styled.iframe`\n pointer-events: none;\n width: 100%;\n height: 100%;\n border-radius: 10px;\n`;\n","import { styledByTheme } from './../../../../themes/architecture/styled-by-theme';\nimport { RedTigerWidgetFrameContainerDefaultBox } from './red-tiger-widget-frame-container.default.box';\n\nexport const RedTigerWidgetFrameContainerBox = styledByTheme(RedTigerWidgetFrameContainerDefaultBox)\n .apply();","import React from 'react';\nimport { OrbitComponent } from '../base-components/orbit-component/orbit-component';\nimport { RedTigerJackpotWidgetConfiguration } from '../../services/configurations/config-data-sections/red-tiger-jackpot-widget.configuration';\nimport { observer } from 'mobx-react';\nimport { RedTigerWidgetBox } from './boxes/widget/red-tiger-widget.box';\nimport { RedTigerWidgetHitAreaBox } from './boxes/hitArea/red-tiger-widget-hit-area.box';\nimport { RedTigerWidgetFrameContainerBox } from './boxes/frameContainer/red-tiger-widget-frame-container.box';\nimport { CyClass } from '../../../common/cy-classes';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface RedTigerWidgedComponentProps extends ComponentServicesPick<'redTiger'>{\n widgetConfig?: RedTigerJackpotWidgetConfiguration;\n}\n\nconst ComponentBody = observer(class extends OrbitComponent {\n \n private _onWidgetClick = () => {\n this.props.redTiger.redirectToWidgetActionLink(this.props.widgetConfig.actionLink);\n }\n \n private _logMissingProps() {\n if (!this.props.widgetConfig.actionLink) {\n // actionLink is optional. For example on 777 we don't have it\n this.services.logger.info('Missing actionLink parameter for RedTigerWidgetComponent');\n }\n\n if (!this.props.widgetConfig.parameters?.skin) {\n this.services.logger.warning('Missing skin parameter for RedTigerWidgetComponent');\n }\n\n if (!this.props.widgetConfig.parameters?.jackpotId) {\n this.services.logger.warning('Missing jackpotId parameter for RedTigerWidgetComponent');\n }\n }\n\n render() {\n if(!this.props.widgetConfig?.display) {\n return null;\n }\n this._logMissingProps();\n\n return (\n \n \n \n \n \n );\n }\n }\n);\n\nexport const RedTigerWidgetComponent = withServices(ComponentBody, [\"redTiger\"]);","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ListTitleTextBox = styledBox('ListTitleTextBox');","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ListTitleBox = styledBox('ListTitleBox');\n","import React, {PropsWithChildren} from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {FlexGrowItemBox} from '../../themes/architecture/css-helpers/flex';\nimport {observer} from 'mobx-react';\nimport classNames from \"classnames\";\nimport {ListTitleBox} from './boxes/list-title/list-title.box';\n\nexport interface GameListTitleComponentProps extends PropsWithChildren {\n className?: string;\n title: React.ReactElement;\n}\n\nexport const GameListTitleComponent = observer(\n class GameListTitleComponent extends OrbitComponent {\n\n render() {\n\n const cssClasses = classNames('cy-games-list-title', this.props.className);\n\n return (\n \n {this.props.title}\n {this.services.mediaQuery.mAndAbove ? : null}\n {this.props.children}\n \n );\n }\n }\n);\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const SwiperButtonsBox = styledBox(\"SwiperButtonsBox\");","import styled, { css } from \"styled-components\";\n\nexport const SwiperButtonBox = styled.div<{isTouchDevice?: boolean}>`\n margin: 0 0.5rem;\n\n ${({isTouchDevice}) => isTouchDevice ? css`\n display: none;\n ` : null}\n`;\n","import styled, {css} from \"styled-components\";\nimport {Button} from \"../../../../../basic-ui-components/button/base/button.component\";\n\nexport const ExploreButtonBox = styled(Button)`\n ${props => css`\n background: linear-gradient(${props.theme.colors.brandPrimaryContrast}, ${props.theme.colors.brandPrimaryContrast}) padding-box,\n linear-gradient(to bottom, ${props.theme.colors.brandSecondary}, ${props.theme.colors.brandPrimary}) border-box;\n border-radius: 18px;\n border: 2px solid transparent;\n color: ${props.theme.colors.textContrast};\n `}\n`;\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {SwiperButtonsBox} from './boxes/wrapper/swiper-buttons.box';\nimport {SwiperButtonBox} from './boxes/button/swiper-button.box';\nimport { Button } from '../../../basic-ui-components/button/base/button.component';\nimport {ISwipeLogicHandler} from \"../../../services/arenas/models/swiper-logic-handler/swiper-logic-handler.interface\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {ExploreButtonBox} from \"./boxes/button/explore-button.box\";\n\n\nexport interface OrbitSwiperButtonsProps {\n analyticsAction: string;\n swiper: ISwipeLogicHandler;\n seeAllButtonUrl: string;\n seoCategory: string;\n hasExploreButton?: boolean;\n}\n\n\n\nexport const OrbitSwiperButtons = observer(class OrbitSwiperButtons extends OrbitComponent {\n\n\n private onSwiperButtonPrevClick = () => {\n this.props.swiper.movePrevious();\n };\n\n private onSwiperButtonNextClick = () => {\n this.props.swiper.moveNext();\n };\n\n private _renderMoveNextAndPreviousButtons() {\n\n if (!this.props.swiper.allowNext && !this.props.swiper.allowPrevious) {\n return null;\n }\n\n const isTouchDevice = this.services.device.feature.isTouch; // device has touch\n\n return (<>\n \n \n \n\n \n \n \n );\n\n }\n\n private _shouldReplaceSeeAllWithExplore(): boolean {\n return this.services.device.isMobile && Boolean(this.props.hasExploreButton);\n }\n\n private seeAllClickHandler = () => {\n this.services.analytics.sendElasticInfoEvent({eventType:\"CGP_Game_Click\",category: this.props.seoCategory, action: 'See_All', label: this.props.analyticsAction}, true);\n\n const url = this.props.seeAllButtonUrl;\n this.services.location.push(url);\n };\n\n private _renderSeeAllButton() {\n if(this.props.seeAllButtonUrl.length === 0 || this.services.miniOrbit.isEnabled) {\n return null;\n }\n\n const translationKey: string = this._shouldReplaceSeeAllWithExplore() ? \"EXPLORE\" : \"SEE_ALL\";\n const ButtonBox = this._shouldReplaceSeeAllWithExplore() ? ExploreButtonBox : Button;\n\n return \n \n {this.services.translation.translate(translationKey)}\n \n ;\n }\n\n render() {\n\n return (\n \n {this._renderMoveNextAndPreviousButtons()}\n {this._renderSeeAllButton()}\n \n );\n }\n});\n\n\n","import { action, computed, observable, makeObservable } from 'mobx';\nimport {IServiceFactory} from '../../../service-factory.interface';\nimport {IGamesListViewModel} from \"../lists/games-list-view-model.interface\";\nimport {ISwipeLogicHandler} from \"./swiper-logic-handler.interface\";\nimport { ResizeObserver } from '@juggle/resize-observer';\n\nexport class SwipeLogicHandler implements ISwipeLogicHandler {\n\n private _resizeObserver: ResizeObserver | null = null;\n constructor(private services: IServiceFactory,\n private readonly _gamesListViewModel: IGamesListViewModel) {\n makeObservable(this);\n\n this._isRTLLanguage = this.services.language.isRTLLanguage;\n }\n\n @observable.ref\n private _element: HTMLElement = null;\n\n @observable.ref\n private _currentTranslateAmount: number = 0;\n\n @action.bound\n setElement(element: HTMLElement | null) {\n this._unsubscribe();\n if(element) {\n this._element = element;\n this._setScrollWidth(element.scrollWidth);\n this._currentTranslateAmount = this.services.window.getElementHorizontalTranslationAmount(this._element as Element);\n this._subscribe();\n } else {\n this.resetScrollPosition();\n this._element = null;\n }\n }\n\n @action.bound\n resetScrollPosition() {\n this._currentTranslateAmount = 0;\n if (this._element) {\n this._element['style'].transform = `translate3d(0px, 0, 0)`;\n }\n }\n\n private _subscribe() {\n\n if(!this._resizeObserver) {\n this._resizeObserver = new ResizeObserver(() => {\n this._setScrollWidth(this._element.scrollWidth);\n })\n }\n\n this._resizeObserver.observe(this._element);\n\n if(this.services.device.isMobile && this._element) {\n this._element.addEventListener(\"scroll\", this._onMobileSwipe);\n }\n }\n\n private _unsubscribe() {\n\n if(this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n\n if(this.services.device.isMobile && this._element) {\n this._element.removeEventListener(\"scroll\", this._onMobileSwipe);\n }\n }\n\n private readonly _isRTLLanguage : boolean;\n\n\n get allowPrevious(): boolean {\n if (this._element) {\n return Math.abs(this._currentTranslateAmount) >= 1;\n }\n\n return false;\n }\n\n get allowNext(): boolean {\n if (this._element) {\n return Math.abs(this._currentTranslateAmount) < this._maximumTranslationAmount - 1;\n }\n\n return false;\n }\n\n\n private get _width(): number {\n return this.services.window.getElementWidth(this._element);\n }\n\n\n @action.bound\n private _setScrollWidth(value: number): void {\n this._scrollWidth = value;\n }\n\n @observable.ref\n private _scrollWidth = 0;\n\n\n @computed\n private get _maximumTranslationAmount(): number {\n if(this._element) {\n return this._scrollWidth - this._width;\n }\n\n return 0;\n }\n\n private _isSwiperOnTheMove = false;\n\n @action.bound\n private _slide(computeIncrement: (absoluteCurrentTranslationAmount: number) => number) {\n if(this._isSwiperOnTheMove) {\n return;\n }\n\n this._isSwiperOnTheMove = true;\n\n try {\n let currentTranslateAmount = this.services.window.getElementHorizontalTranslationAmount(this._element);\n let increment = computeIncrement(Math.abs(currentTranslateAmount));\n\n if(this._isRTLLanguage) {\n increment = -1 * increment;\n }\n\n let translateAmount = currentTranslateAmount + increment;\n\n this._element['style'].transform = `translate3d(${translateAmount}px, 0, 0)`;\n this._currentTranslateAmount = translateAmount;\n\n this._sendAnalytics();\n } finally {\n this._isSwiperOnTheMove = false;\n }\n }\n\n private _sendAnalytics() {\n this.services.analytics.sendElasticInfoEvent({eventType:\"CGP_Game_Click\",category: this._gamesListViewModel.arenaName, action: 'Swipe', label: this._gamesListViewModel.title.translationKey}, true);\n }\n\n\n moveNext(): void {\n if(this.allowNext) {\n this._slide((absoluteCurrentTranslationAmount) => -1 * Math.min(this._width, this._maximumTranslationAmount - absoluteCurrentTranslationAmount));\n }\n\n }\n\n movePrevious(): void {\n if(this.allowPrevious) {\n this._slide((absoluteCurrentTranslationAmount) => Math.min(this._width, absoluteCurrentTranslationAmount));\n }\n }\n\n private _mobileScrollingTimeout: any;\n private _onMobileSwipe = () => {\n //Clear the timeout on every scroll to prevent form the scroll(swipe) event to fire multiple times. (debounce)\n clearTimeout(this._mobileScrollingTimeout);\n // Set a timeout to fire after the scrolling as end\n this._mobileScrollingTimeout = setTimeout(() => {\n this._sendAnalytics();\n }, 100);\n };\n}","import React, { useMemo, useRef } from 'react';\nimport {observer } from 'mobx-react';\nimport {PlayerEvents, DotLottieCommonPlayer} from '@dotlottie/react-player';\nimport {useServices } from '../../react-hooks/use-services.hook';\nimport {TitanJackpotWidgetConfiguration } from '../../services/configurations/config-data-sections/titan-jackpot-widget.configuration';\nimport {DotLottiePlayer} from '../lottie-player/dot-lottie-player.component';\n\nconst ANIMATION_PAUSE_INTERVAL = 3000;\n\nconst MINOR_JACKPOT_FRAME = 10;\nconst MAJOR_JACKPOT_FRAME = 90;\nconst MEGA_JACKPOT_FRAME = 180;\n\nconst ANIMATION_FRAME_STOPS = [MINOR_JACKPOT_FRAME, MAJOR_JACKPOT_FRAME, MEGA_JACKPOT_FRAME];\n\ninterface ITitanAnimationComponentProps {\n widgetConfig: TitanJackpotWidgetConfiguration;\n}\n\nexport const TitanJackpotAnimationComponent: React.FC = observer((props) => {\n let lottieRef = useRef(null);\n\n let animationCounter = 0;\n\n const services = useServices();\n\n const styles = useMemo(() => ({ borderRadius: 10, display: 'grid' }), []);\n\n const updateAnimationCounter = (): void => {\n animationCounter++;\n }\n\n const getTitanJackpotIndex = (): number => {\n return animationCounter % props.widgetConfig?.jackpotIds.length;\n }\n\n const getCurrentJackpotId = (): string => {\n const index: number = getTitanJackpotIndex();\n\n return String(props.widgetConfig.jackpotIds[index]);\n }\n\n const handleEnterFrame = (currentFrame: number): void => {\n if (Math.round(currentFrame) === ANIMATION_FRAME_STOPS[getTitanJackpotIndex()]) {\n lottieRef.current.pause();\n\n services.titanJackpot.updateJackpotHandler(getCurrentJackpotId());\n\n setTimeout(() => {\n lottieRef.current.play();\n }, ANIMATION_PAUSE_INTERVAL);\n\n updateAnimationCounter();\n }\n };\n\n const onEventHandler = (event: PlayerEvents, params: unknown) => {\n /**\n * Intercept any event from PlayerEvents in here\n * Example: Listen for player ready\n * if (event === PlayerEvents.Ready) { do stuff here }\n * Listening for frame change\n * if (event === PlayerEvents.Frame) {\n */\n if (event === PlayerEvents.Frame) {\n handleEnterFrame((params as Record).frame)\n }\n }\n\n return (\n \n )\n});\n","import styled from \"styled-components\";\n\nexport const TitanJackpotAmountBox = styled.div`\n position: absolute;\n top: calc(69%);\n\n text-align: center;\n\n color: ${props => props.theme.colors.brandSecondary};\n ${({theme}) => theme.font.presets.ultra};\n font-size: 1.8em;\n width: 100%;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 1.3em; \n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 1.1em;\n }\n`;","import React from 'react';\nimport { observer } from \"mobx-react\";\nimport { TitanJackpotAmountBox } from './boxes/titan-jackpot-amount-container.box'\nimport { useServices } from '../../react-hooks/use-services.hook';\n\nexport const TitanJackpotAmountComponent: React.FC = observer(() => {\n const services = useServices();\n\n return (\n \n {services.currency.formatMoney(services.titanJackpot.jackpotHandler?.jackpotAmount)}\n \n )\n});","import React from 'react';\nimport { observer } from \"mobx-react\";\nimport { TitanJackpotWidgetConfiguration } from \"../../services/configurations/config-data-sections/titan-jackpot-widget.configuration\";\nimport { JackpotWidgetAspectRatioBox } from '../jackpot-widget/boxes/aspect-ratio/jackpot-widget-aspect-ratio.box';\nimport { JackpotWidgetBgBox } from '../jackpot-widget/boxes/bg/jackpot-widget-bg.box';\nimport { JackpotWidgetBox } from '../jackpot-widget/boxes/jackpot-widget.box';\nimport { JACKPOT_WIDGET_LAYOUT } from '../jackpot-widget/jackpot-widget.component';\nimport { JackpotType } from '../../../common/const/jackpot_map_ids';\nimport { TitanJackpotAnimationComponent } from './titan-jackpot-animation.component';\nimport { TitanJackpotAmountComponent } from './titan-jackpot-amount.component';\nimport { JackpotWidgetClockLabelSkeletonBox } from '../jackpot-widget/skeleton/boxes/footer/jackpot-widget-clock-label-skeleton.box';\nimport { JackpotWidgetCollectingLabelSkeletonBox } from '../jackpot-widget/skeleton/boxes/footer/jackpot-widget-collecting-label-skeleton.box';\nimport { JackpotWidgetFooterSkeletonBox } from '../jackpot-widget/skeleton/boxes/footer/jackpot-widget-footer-container-skeleton.box';\nimport { JackpotWidgetAmountSkeletonBox } from '../jackpot-widget/skeleton/boxes/jackpot-widget-amount-skeleton.box';\nimport { Check } from '@sparkware/app-utils';\nimport { useServices } from '../../react-hooks/use-services.hook';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\n\ninterface TitanJackpotWidgetComponentProps extends ComponentServicesPick<'jackpots'> {\n WrapperBox?: React.ComponentType;\n widgetConfig?: TitanJackpotWidgetConfiguration;\n onClick?: () => void;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n\n const WrapperBox = props.WrapperBox || React.Fragment;\n\n const getJackpotWidgetLayout = (): JACKPOT_WIDGET_LAYOUT => {\n const isMobileTablet = services.mediaQuery.mAndAbove && services.mediaQuery.lAndBelow;\n\n return isMobileTablet ? JACKPOT_WIDGET_LAYOUT.PORTRAIT_TALL : JACKPOT_WIDGET_LAYOUT.PORTRAIT;\n }\n\n const isJackpotHandlerReady = (): boolean => {\n if (!props.widgetConfig?.jackpotIds?.length) {\n return false;\n }\n\n return props.widgetConfig.jackpotIds.every(jkpId => {\n const jackpotHandler = props.jackpots.currentJackpotsById[String(jkpId)];\n return !Check.isNullOrUndefined(jackpotHandler?.jackpotData);\n })\n }\n\n const renderTitanJackpotContent = (): React.ReactNode => {\n return isJackpotHandlerReady() ?\n <>\n \n \n :\n <>\n \n \n \n \n \n ;\n\n }\n\n if (!props.widgetConfig?.display) {\n return null;\n }\n\n return (\n \n \n props.onClick()} isClickable={!!props.onClick} className=\"cy-jackpot-widget\">\n \n {renderTitanJackpotContent()}\n \n \n \n \n );\n});\n\nexport const TitanJackpotWidgetComponent = withServices(ComponentBody, ['jackpots']);","import React from 'react';\nimport {GamesListBaseModel} from \"./games-list-base.model\";\nimport {\n ApiListType,\n SwiperGamesListConfiguration\n} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport {IArenaToGamesListAdapter} from \"../arenas/arena-to-games-list-adapter.interface\";\nimport {EXCLUSIVES_LIST_ICON, JACKPOTS_ITEM} from \"../../../../themes/css-global-classes\";\nimport {TextTranslation} from \"../../../translation/text-translation\";\nimport {ListTitleIconBox} from \"../../../../components/game-list-title/boxes/list-title-icon/list-title-icon.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {JackpotWidgetComponent} from \"../../../../components/jackpot-widget/jackpot-widget.component\";\nimport {JackpotWidgetWrapperBox} from \"../../../../components/orbit-swiper/boxes/jackpot-widget-wrapper/jackpot-widget-wrapper.box\";\nimport {RedTigerWidgetComponent} from \"../../../../components/red-tiger-widget/red-tiger-widget.component\";\nimport {ISwiperListViewModel} from \"./swiper-list-view-model.interface\";\nimport {JACKPOT_WIDGET, RED_TIGER_JACKPOT} from \"../../../../components/game-list-title/constants\";\nimport {ListTitleTextBox} from \"../../../../components/game-list-title/boxes/list-title-text/list-title-text.box\";\nimport {GameListTitleComponent} from \"../../../../components/game-list-title/game-list-title.component\";\nimport classNames from \"classnames\";\nimport {OrbitSwiperButtons} from \"../../../../components/orbit-swiper/orbit-swiper-buttons/orbit-swiper-buttons\";\nimport {SwipeLogicHandler} from \"../swiper-logic-handler/swipe-logic-handler\";\nimport {ISwipeLogicHandler} from \"../swiper-logic-handler/swiper-logic-handler.interface\";\nimport { JackpotType } from '../../../../../common/const/jackpot_map_ids';\nimport { TitanJackpotWidgetComponent } from '../../../../components/titan-jackpot-widget/titan-jackpot-widget.component';\n\nexport abstract class SwiperListBaseModel extends GamesListBaseModel implements ISwiperListViewModel {\n\n constructor(protected readonly listConfiguration: SwiperGamesListConfiguration, arena: IArenaToGamesListAdapter) {\n super(arena);\n }\n \n get listId(): number {\n return this.listConfiguration.listId;\n }\n\n get apiListType(): ApiListType | undefined {\n return this.listConfiguration.apiListType;\n }\n\n get title(): TextTranslation {\n return this.services.translation.getTranslation(this.listConfiguration.title, this._getTitleTranslationParams());\n }\n\n get swipeLogicHandler() {\n return this._swipeLogicHandler;\n }\n\n get showGameTitleOnMultipleLines() {\n const widgetConfig = this.listConfiguration.jackpotWidget;\n\t\tif (!widgetConfig || !widgetConfig.display) {\n\t\t\treturn false;\n\t\t}\n\n return widgetConfig.jackpotType === JackpotType.HourlyCaptain8;\n }\n\n protected _swipeLogicHandler: ISwipeLogicHandler = new SwipeLogicHandler(this.services, this);\n\n protected _getTitleTranslationParams(): object | string | undefined {\n return this.listConfiguration.shouldInjectUsernameInTitle ? this.services.user.name : undefined;\n }\n\n protected get _numberOfGamesToBeIgnoredInAISorting(): number | undefined {\n return this.listConfiguration.ignoreNumberOfGamesInAISorting;\n }\n\n get listTypeId(): number | null {\n return null;\n }\n\n get showNumberBadge(): boolean | undefined {\n return this.listConfiguration.showNumberBadge;\n }\n\n protected get _seeAllUrl(): string {\n const seeAllConfig = this.listConfiguration.seeAll || '';\n\n /**\n * We used to support SeeAll Button as an object, from 6.6.21 we've changed that to string, this is backward compatibility\n * Task https://dev.azure.com/888holdings/GamingNDL/_workitems/edit/1737512\n */\n if (Check.isObject(seeAllConfig)) {\n return (seeAllConfig as any).url || '';\n }\n\n return seeAllConfig;\n }\n\n protected get _isAISorted(): boolean {\n return this.listConfiguration.useAISortedList;\n }\n\n protected _shouldBeDisplayed(): boolean {\n return !this.services.gamesFilter.isFilterOn;\n }\n\n protected _getGameTypes(): number[] {\n const gameTypes = this.listConfiguration.gamesId || [];\n if (this.services.gamesFilter.isFilterOn) {\n return [];\n }\n\n return gameTypes;\n }\n\n\n protected _getNumberOfGamesSkeletons(): number {\n if (this.listConfiguration.jackpotWidget) {\n return 4;\n }\n\n if (this.listConfiguration.templateType === JACKPOTS_ITEM) {\n return 2;\n }\n\n return 6;\n }\n\n get numberOfGamesSkeletons(): number {\n return this._getNumberOfGamesSkeletons();\n }\n\n protected _reduceGameTypes(gameTypes: number[]): number[] {\n gameTypes = super._reduceGameTypes(gameTypes);\n return this._reduceGameTypesForJackpotsItemTemplateInHomePage(gameTypes);\n }\n\n private _reduceGameTypesForJackpotsItemTemplateInHomePage(gameTypes: number[]): number[] {\n if (!this.services.device.isMobile) {\n return gameTypes;\n }\n if (this.listConfiguration.templateType !== JACKPOTS_ITEM) {\n return gameTypes;\n }\n if (!this.services.location.isHomePage) {\n return gameTypes;\n }\n return gameTypes.slice(0, 6);\n }\n\n get forceInLayout(): boolean {\n return this.listConfiguration.forceListInLayout;\n }\n\n private get _isJackpotWidgetHost(): boolean {\n return Boolean(this.listConfiguration.jackpotWidget?.display);\n }\n\n private get _isRedTigerJackpotWidgetHost(): boolean {\n return Boolean(this.listConfiguration.redTigerWidget?.display);\n }\n\n get templateType(): string {\n return this.listConfiguration.templateType;\n }\n\n protected get _forceRoundIcons(): boolean {\n return this.listConfiguration.forceRoundIcons;\n }\n \n protected get _useSquareIcons(): boolean {\n return this.listConfiguration.useSquareIcons;\n }\n\n protected _renderJackpotWidget() {\n let onClickHandler = null;\n if(this.services.location.isHomePage) {\n onClickHandler = () => this.services.location.push('/jackpots/');\n }\n\n return ()\n }\n\n protected _renderRedTigerWidget() {\n return (\n \n );\n }\n\n protected _renderTitanJackpotWidget() {\n let onClickHandler = null;\n if(this.services.location.isHomePage) {\n onClickHandler = () => this.services.location.push('/jackpots/');\n }\n\n return (\n \n );\n }\n\n renderSpecialWidgets(): React.ReactElement | null {\n return (\n <>\n {this._renderJackpotWidget()}\n {this._renderRedTigerWidget()}\n {this._renderTitanJackpotWidget()}\n \n );\n }\n\n renderListHeader(): React.ReactElement {\n return (\n \n {this._renderSwiperButtons()}\n \n )\n }\n\n protected _renderSwiperButtons() {\n return ;\n }\n\n\n _getTitleCssClasses(): string[] {\n const cssClasses: string[] = [this.listConfiguration.titleIconClassName];\n if(this._isJackpotWidgetHost) {\n cssClasses.push(JACKPOT_WIDGET);\n }\n\n if(this._isRedTigerJackpotWidgetHost) {\n cssClasses.push(RED_TIGER_JACKPOT)\n }\n\n return cssClasses;\n }\n\n _renderHeaderIconAndText(): React.ReactElement {\n return (\n \n {this._renderHeaderIcon()}\n {this._renderHeaderText()}\n \n )\n }\n\n protected _renderHeaderIcon(): React.ReactElement | null {\n if (this._isJackpotWidgetHost || this.listConfiguration.titleIconClassName === EXCLUSIVES_LIST_ICON) {\n return ;\n }\n\n return null;\n }\n\n protected _renderHeaderText(): string | React.ReactElement {\n return this.title.translation\n }\n\n renderListNavigation(): React.ReactElement | null {\n return null;\n }\n\n renderListFooter(): React.ReactElement | null {\n return null;\n }\n}\n","import {SwiperListBaseModel} from \"./swiper-list-base.model\";\n\nexport abstract class ApiListBaseModel extends SwiperListBaseModel {\n protected get _isAISorted(): boolean {\n return false;\n }\n\n protected _applyGameGroupFiltering(gameTypes: number[]): number[] {\n const allowedGameGroups = this.listConfiguration.allowedGameGroups;\n if (!allowedGameGroups || allowedGameGroups.length === 0) {\n return gameTypes;\n }\n\n return gameTypes.filter(gameType => {\n return allowedGameGroups.includes(this.services.games.gamesMap[gameType]?.gameGroupId);\n });\n }\n}","import React from \"react\";\nimport {RecentlyPlayedComponent} from \"../../../../../components/recently-played/recently-played.component\";\nimport {ApiListBaseModel} from \"../api-list-base.model\";\n\n\nexport class RecentlyPlayedListModel extends ApiListBaseModel {\n\n protected _shouldBeDisplayed(): boolean {\n if(!this.services.user.isAuthorized || this.services.games.recentlyPlayedGames.isInitialized) {\n return super._shouldBeDisplayed() && this.gameTypes.length > 1;\n }\n return super._shouldBeDisplayed();\n }\n\n protected _getGameTypes(): number[] {\n if (!this.services.games.recentlyPlayedGames.gameTypes) {\n return [];\n }\n\n let gameTypes = this.services.games.recentlyPlayedGames.gameTypes;\n return this._applyGameGroupFiltering(gameTypes);\n }\n\n _renderList(listPosition: number): React.ReactElement | null {\n return ();\n }\n}","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {observer} from 'mobx-react';\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\n\n\ninterface TopPicksComponentProps {\n viewModel: ISwiperListViewModel;\n listPosition: number;\n}\n\nexport const TopPicksComponent = observer(class TopPicksComponent extends OrbitComponent {\n\n render() {\n\n const viewModel = this.props.viewModel;\n\n return (\n \n );\n }\n});\n\n\n","import React from \"react\";\nimport {TopPicksComponent} from \"../../../../../components/ai-list/top-picks.component\";\nimport {ApiListBaseModel} from \"../api-list-base.model\";\n\nexport class TopPicksListModel extends ApiListBaseModel {\n\n protected _shouldBeDisplayed(): boolean {\n if(!this.services.aiEngine.aiRecommendedGames.isInitialized) {\n return super._shouldBeDisplayed();\n }\n\n return super._shouldBeDisplayed() && this._getGameTypes().length > 0;\n }\n\n protected _getGameTypes(): number[] {\n return this.services.aiEngine.aiRecommendedGames?.gameTypes || [];\n }\n\n protected _getTitleTranslationParams() {\n return this.services.user.userData.firstName;\n }\n\n get aiEngine(): string {\n return this.services.aiEngine.aiRecommendedGames?.engine || '';\n }\n\n _renderList(listPosition: number): React.ReactElement | null {\n return ();\n }\n}","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {observer} from 'mobx-react';\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\n\ninterface AiNewGamesListComponentProps {\n viewModel: ISwiperListViewModel;\n listPosition: number;\n}\n\nexport const AiNewGamesListComponent = observer(\n class AiNewGamesListComponent extends OrbitComponent {\n render() {\n const viewModel = this.props.viewModel;\n return (\n \n )\n }\n\n }\n);\n\n\n","import React from \"react\";\nimport {AiNewGamesListComponent} from \"../../../../../components/ai-new-games-list/ai-new-games-list.component\";\nimport {SwiperListBaseModel} from \"../swiper-list-base.model\";\nimport {SwiperGamesListConfiguration} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {IArenaToGamesListAdapter} from \"../../arenas/arena-to-games-list-adapter.interface\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class NewGamesListModel extends SwiperListBaseModel {\n constructor(protected readonly listConfiguration: SwiperGamesListConfiguration,\n arena: IArenaToGamesListAdapter) {\n super(listConfiguration, arena);\n }\n\n protected _shouldBeDisplayed(): boolean {\n if(Check.isNullOrUndefined(this.services.aiNewEngine.aiNewRecommendedGames)) {\n return super._shouldBeDisplayed();\n }\n\n return super._shouldBeDisplayed() && this.gameTypes.length > 0;\n }\n\n protected _getGameTypes(): number[] {\n return this.services.aiNewEngine.aiNewRecommendedGames?.gameTypes || [];\n }\n\n protected _getTitleTranslationParams() {\n return this.services.user.name;\n }\n\n get aiEngine(): string {\n return this.services.aiNewEngine.aiNewRecommendedGames?.engine || '';\n }\n\n _renderList(listPosition: number): React.ReactElement | null {\n return ;\n }\n}","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {observer} from 'mobx-react';\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\n\ninterface PlayersLikeYouComponentProps {\n viewModel: ISwiperListViewModel;\n listPosition: number;\n}\n\nexport const PlayersLikeYouComponent = observer(\n class PlayersLikeYouComponent extends OrbitComponent {\n\n render() {\n\n const viewModel = this.props.viewModel;\n\n return (\n
\n \n
\n );\n }\n }\n);\n\n\n","import React from \"react\";\nimport {LIST_TYPE_ID} from \"../../../../../../common/const/ai-trending-list-ids-map\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {PlayersLikeYouComponent} from \"../../../../../components/players-like-you/players-like-you.component\";\nimport {ApiListBaseModel} from \"../api-list-base.model\";\n\nconst NUMBER_OF_TRENDING_RECOMMENDATIONS = 10;\n\nexport class PlayersLikeYouListModel extends ApiListBaseModel {\n\n protected _shouldBeDisplayed(): boolean {\n if(Check.isNullOrUndefined(this._computeGameTypes())) {\n return super._shouldBeDisplayed();\n }\n\n return super._shouldBeDisplayed() && this.gameTypes.length > 0;\n }\n\n get listTypeId(): number {\n if(Check.isNullOrUndefined(this.services.abTestingFeatureDataProvider.playersLikeYouGamesListTypeId)) {\n return LIST_TYPE_ID.ACTIVE_USERS;\n }\n\n return parseInt(this.services.abTestingFeatureDataProvider.playersLikeYouGamesListTypeId);\n }\n\n protected _getTitleTranslationParams() {\n let topCount = NUMBER_OF_TRENDING_RECOMMENDATIONS;\n\n if(0 < this.gameTypes.length && this.gameTypes.length < topCount) {\n topCount = this.gameTypes.length;\n }\n\n return {\n topNumber: topCount,\n countryName: this.services.user.countryName || this.services.translation.translate(\"YOUR_COUNTRY\")\n }\n }\n\n protected _getGameTypes(): number[] {\n return this._computeGameTypes() || [];\n }\n\n protected get _useSquareIcons(): boolean {\n return true;\n }\n\n private _computeGameTypes(): number[] | null {\n if(this.listTypeId === LIST_TYPE_ID.ACTIVE_USERS) {\n return this.services.aiEngine.trendingRecommendedGamesForPlayerByActiveUsers;\n } else {\n return this.services.aiEngine.trendingRecommendedGamesForPlayerByBets\n }\n }\n\n get maxGamesToShowInList(): number {\n return NUMBER_OF_TRENDING_RECOMMENDATIONS;\n }\n\n _renderList(listPosition: number): React.ReactElement | null {\n return (\n \n );\n }\n}","import React from \"react\";\nimport {OrbitSwiperComponent} from \"../../../../../components/orbit-swiper/orbit-swiper.component\";\nimport {SwiperListBaseModel} from \"../swiper-list-base.model\";\n\nexport class StaticSwiperListModel extends SwiperListBaseModel {\n\n protected _shouldBeDisplayed(): boolean {\n return super._shouldBeDisplayed() && this.gameTypes.length > 0;\n }\n\n _renderList(listPosition: number): React.ReactElement | null {\n const listConfig = this.listConfiguration;\n\n\n return (\n \n );\n }\n}","import React from 'react';\nimport {SingleGameComponent} from '../../single-game/single-game.component';\nimport {observer} from 'mobx-react';\nimport {OrbitComponentWithState} from '../../base-components/orbit-component-with-state/orbit-component-with-state';\n\nexport interface GamesGridBatchComponentProps {\n batchIndex: number;\n gameTypes: number[];\n aiEngine: string;\n seoCategory: string;\n skipIntermediatePage: boolean;\n disableGameInfoHover: boolean;\n listTitleTranslationKey: string;\n templateType?: string;\n useSquareIcons?: boolean;\n}\n\nexport interface GamesGridBatchComponentState {\n isResolved: boolean;\n}\n\nconst NUMBER_OF_GAMES_IN_BATCH = 20;\n\nexport const GamesGridBatchComponent = observer(\n class GamesGridBatchComponent extends OrbitComponentWithState {\n\n state = {\n isResolved: false\n };\n\n private _renderOneGame(gameType: number, gameIndex: number) {\n\n\n return (\n \n );\n }\n\n private _intersectionObserver: IntersectionObserver | null;\n\n private _intersectionObserverCallback = (entries: IntersectionObserverEntry[]) => {\n if (entries[0].intersectionRatio > 0 || entries[0].isIntersecting) {\n this._destroyIntersectionObserver();\n this.setState({\n isResolved: true\n });\n }\n };\n\n private _createIntersectionObserver(element: HTMLElement) {\n\n this._destroyIntersectionObserver(); // just in case this is called twice for this component we want to discard the existing intersection observer and create a new one\n\n this._intersectionObserver = new IntersectionObserver(this._intersectionObserverCallback, {\n rootMargin: '400px',\n threshold: 0.1\n });\n\n this._intersectionObserver.observe(element);\n }\n\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this._destroyIntersectionObserver();\n }\n\n private _destroyIntersectionObserver() {\n if (this._intersectionObserver) {\n this._intersectionObserver.disconnect();\n this._intersectionObserver = null;\n }\n }\n\n private _captureThresholdElement = (element: HTMLElement | null) => {\n if (element) {\n this._createIntersectionObserver(element)\n }\n };\n\n private _renderNextBatch() {\n const nextBatchGameTypes = this.props.gameTypes.slice(NUMBER_OF_GAMES_IN_BATCH);\n if(nextBatchGameTypes.length === 0) {\n return null;\n }\n\n const propsForNextBatch = {\n ...this.props,\n batchIndex: this.props.batchIndex + 1,\n gameTypes: nextBatchGameTypes\n };\n\n return ();\n }\n\n private _renderCurrentBatch() {\n const batchIndexOffset = this.props.batchIndex * NUMBER_OF_GAMES_IN_BATCH;\n const currentBatchGameTypes = this.props.gameTypes.slice(0, NUMBER_OF_GAMES_IN_BATCH);\n return (\n <>\n {currentBatchGameTypes.map((gameType, index) => this._renderOneGame(gameType, batchIndexOffset + index))}\n {this._renderNextBatch()}\n \n );\n }\n\n render() {\n\n if(this.props.batchIndex === 0 || this.state.isResolved) {\n return this._renderCurrentBatch();\n }\n\n return (\n
\n )\n }\n }\n);\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const GamesGridBox = styledBox('GamesGridBox');\n","import {NoGamesFoundMessageDefaultBox} from './no-games-found-message.default.box';\n\nexport const NoGamesFoundMessageBox = NoGamesFoundMessageDefaultBox;","import styled from 'styled-components';\n\nexport const NoGamesFoundMessageDefaultBox = styled.p`\n font-size: 1.2rem;\n margin: 15px 0;\n min-height: 300px;\n color: ${props => props.theme.colors.textLight};\n`;","import styled from \"styled-components\";\nimport {CGP_GAME_OPEN} from \"../../../themes/css-global-classes\";\n\nexport const GamesGridContainerBox = styled.div`\n .${CGP_GAME_OPEN} & {\n display: none;\n }\n`;","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {GamesGridBatchComponent} from './games-grid-batch/games-grid-batch.component';\nimport {GamesGridBox} from './boxes/games-grid/games-grid.box';\nimport {NoGamesFoundMessageBox} from './boxes/no-games-found-message/no-games-found-message.box';\nimport classNames from 'classnames';\nimport {GRID_GAMES_LIST} from '../single-game/css-constants';\nimport {GamesGridContainerBox} from \"./boxes/games-grid-container.box\";\nimport {IGamesListViewModel} from \"../../services/arenas/models/lists/games-list-view-model.interface\";\n\nexport interface GamesGridComponentProps {\n viewModel: IGamesListViewModel;\n skipIntermediatePage: boolean;\n disableGameInfoHover: boolean;\n useSquareIcons?: boolean;\n}\n\nexport const GamesGridComponent = observer(class GamesGridComponent extends OrbitComponent {\n\n private _renderTitle() {\n\n if(!this.props.disableGameInfoHover && this.services.gamesFilter.isFilterOn) {\n return null;\n }\n return this.props.viewModel.renderListHeader();\n }\n\n private _renderGames(gameTypes: number[]) {\n return (\n\n \n \n \n );\n }\n\n private _renderNoGames() {\n if(this.services.gamesFilter.isFilterOn) {\n return (\n {this.services.translation.translate('YOUR_SEARCH_DID_NOT_MATCH_ANY_GAMES')}\n )\n } else {\n return null;\n }\n }\n\n private _renderContent() {\n let gameTypes = this.props.viewModel.gameTypes;\n if(gameTypes.length === 0) {\n return this._renderNoGames();\n }\n return (\n <>\n {this._renderTitle()}\n {this._renderGames(gameTypes)}\n \n );\n }\n\n\n render() {\n return (\n \n {this._renderContent()}\n \n );\n }\n});\n","import React from \"react\";\nimport {GamesListBaseModel} from \"../games-list-base.model\";\nimport {GamesGridComponent} from \"../../../../../components/games-grid/games-grid.component\";\nimport {ArenaGamesGridConfiguration} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {IArenaToGamesListAdapter} from \"../../arenas/arena-to-games-list-adapter.interface\";\nimport {TextTranslation} from \"../../../../translation/text-translation\";\nimport {GameListTitleComponent} from \"../../../../../components/game-list-title/game-list-title.component\";\nimport {ListTitleTextBox} from \"../../../../../components/game-list-title/boxes/list-title-text/list-title-text.box\";\n\nexport class GamesGridListModel extends GamesListBaseModel {\n constructor(protected readonly gridConfig: ArenaGamesGridConfiguration,\n arena: IArenaToGamesListAdapter) {\n super(arena)\n }\n\n protected _getGameTypes(): number[] {\n return this.gridConfig.gamesId || [];\n }\n\n protected get _isAISorted(): boolean {\n return this.gridConfig.useAISortedList;\n }\n\n\n protected _shouldBeDisplayed(): boolean {\n return true;\n //return this.gridConfig.display;\n }\n\n protected get _numberOfGamesToBeIgnoredInAISorting(): number | undefined {\n return undefined;\n }\n\n get listId(): number {\n return this.gridConfig.listId;\n }\n\n get title(): TextTranslation {\n return this.services.translation.getTranslation(this.gridConfig.title);\n }\n\n get maxGamesToShowInList(): number {\n return this._getGameTypes().length; // for grids we show all games\n }\n\n get forceInLayout(): boolean {\n return true;\n }\n\n get templateType(): string {\n return this.gridConfig.templateType;\n }\n\n protected get _forceRoundIcons(): boolean {\n return this.gridConfig.forceRoundIcons;\n }\n \n protected get _useSquareIcons(): boolean {\n return this.gridConfig.useSquareIcons;\n }\n\n private get _shouldSquareIconsBeUsed(): boolean {\n return this.shouldUseSquareIcons();\n }\n\n renderListHeader(): React.ReactElement {\n const title = (\n \n {this.title.translation}\n \n );\n\n return (\n \n );\n }\n\n protected _renderList(listPosition: number): React.ReactElement | null {\n return (\n \n );\n }\n\n\n}","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {observer} from 'mobx-react';\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface BecauseYouPlayedComponentProps extends ComponentServicesPick<'gameRunner'>{\n viewModel: ISwiperListViewModel;\n listPosition: number;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent {\n\n componentDidMount() {\n super.componentDidMount();\n\n this.reaction(() => this.props.gameRunner.lastPlayedGame.correlatedGamesForLastPlayedRealGame,\n (correlatedGames) => {\n this.props.viewModel.swipeLogicHandler.resetScrollPosition();\n }\n );\n }\n\n render() {\n const viewModel = this.props.viewModel;\n\n return (\n
\n \n
\n );\n }\n}\n\nexport const BecauseYouPlayedComponent = withServices(ComponentBody, ['gameRunner']);","import React from \"react\";\nimport { BecauseYouPlayedComponent } from \"../../../../../components/because-you-played/because-you-played.component\";\nimport { SwiperGamesListConfiguration } from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport { IArenaToGamesListAdapter } from \"../../arenas/arena-to-games-list-adapter.interface\";\nimport {ApiListBaseModel} from \"../api-list-base.model\";\n\nexport class BecauseYouPlayedPlayedListModel extends ApiListBaseModel {\n constructor(protected readonly listConfiguration: SwiperGamesListConfiguration, arena: IArenaToGamesListAdapter) {\n super(listConfiguration, arena);\n this.services.gameRunner.then(gameRunner => {\n gameRunner.lastPlayedGame.listenForLastPlayedRealGame();\n })\n\n }\n\n protected _shouldBeDisplayed(): boolean {\n return super._shouldBeDisplayed() &&\n this.gameTypes.length > 0;\n }\n\n protected _getTitleTranslationParams(): object | string | undefined {\n const lastPlayedGames = this.services.becauseYouPlayed.currentBecauseYouPlayedGames[0];\n if (lastPlayedGames) {\n return {\n gameName: lastPlayedGames.title\n }\n }\n\n return super._getTitleTranslationParams();\n }\n\n protected _getGameTypes(): number[] {\n return this.services.becauseYouPlayed.currentBecauseYouPlayedGames.map(gInfo => gInfo.gameType);\n }\n\n\n\n protected _renderList(listPosition: number): React.ReactElement> {\n return (\n \n );\n }\n}\n","import {LiveStreamingListTitleDefaultBox} from \"./live-streaming-list-title.default.box\";\n\nexport const LiveStreamingListTitleBox = LiveStreamingListTitleDefaultBox;\n","import styled from \"styled-components\";\n\nexport const LiveStreamingListTitleDefaultBox = styled.div`\n color: ${({theme}) => theme.colors.textLight.toString()};\n`;\n","import {LiveStreamingTitleIconDefaultBox} from \"./live-streaming-title-icon.default.box\";\n\nexport const LiveStreamingTitleIconBox = LiveStreamingTitleIconDefaultBox;\n","import styled from \"styled-components\";\n\nexport const LiveStreamingTitleIconDefaultBox = styled.div`\n padding: 0 4px;\n margin-right: 1rem;\n border-radius: 2px;\n letter-spacing: 0;\n\n color: ${({theme}) => theme.colors.background.toString()};\n background: ${({theme}) => theme.colors.brandPrimary.toString()};\n\n animation: FlashingAnimation 2s ease infinite;\n\n @keyframes FlashingAnimation {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n","import {IServiceFactory} from \"../../../service-factory.interface\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport {ISwipeLogicHandlerMoveNextOptions, ISwipeLogicHandler} from \"./swiper-logic-handler.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {ISwiperListViewModel} from \"../lists/swiper-list-view-model.interface\";\n\nexport class LiveStreamSwipeLogicHandler implements ISwipeLogicHandler {\n\n private _element: HTMLElement = null;\n private _touchStartX = 0;\n private _swipeDirection = 0;\n private _touchDragThreshold = 25;\n private _swipeTransitionCss = \"transform 0.5s ease-in-out\";\n\n constructor(private readonly _services: IServiceFactory, private readonly _gamesListViewModel: ISwiperListViewModel) {\n makeObservable(this);\n }\n\n @observable.ref\n allowNext: boolean = true;\n @observable.ref\n allowPrevious: boolean = true;\n\n private _subscribe() {\n this._unsubscribe();\n this._element.addEventListener(\"transitionend\", this._handleTransitionEnd);\n this._element.addEventListener(\"touchstart\", this._handleTouchStart);\n this._element.addEventListener(\"touchend\", this._handleTouchEnd);\n }\n\n private _unsubscribe() {\n if (this._element) {\n this._element.removeEventListener(\"transitionend\", this._handleTransitionEnd);\n this._element.removeEventListener(\"touchstart\", this._handleTouchStart);\n this._element.removeEventListener(\"touchend\", this._handleTouchEnd);\n }\n }\n\n private _handleTouchStart = (event: TouchEvent) => {\n this._touchStartX = event.changedTouches[0].clientX;\n }\n\n private _handleTouchEnd = (event: TouchEvent) => {\n\n const dragDistance = Math.abs(event.changedTouches[0].clientX - this._touchStartX);\n\n if (dragDistance < this._touchDragThreshold) return;\n\n if (event.changedTouches[0].clientX < this._touchStartX) {\n this.moveNext();\n } else {\n this.movePrevious();\n }\n }\n\n private _handleTransitionEnd = (event: TransitionEvent) => {\n\n /** this._element is the swiper element and\n * if any element inside has any kind of transitions on their transform css property...\n * their \"transitionend\" events will also be catched here\n * So we check the event target because\n * we want to run this handler only for events that have this._element as target */\n if (event.propertyName === \"transform\" && event.target === this._element) {\n\n if (this._swipeDirection < 0) {\n\n this._element.append(this._element.firstElementChild);\n\n this._element.style.transition = \"none\";\n this._element.style.transform = \"translateX(0)\";\n }\n\n this._setIsNavigationAllowed(true);\n }\n };\n\n @action.bound\n private _setIsNavigationAllowed(allowed: boolean) {\n this.allowNext = allowed;\n this.allowPrevious = allowed;\n }\n\n setElement(element: HTMLElement | null): void {\n this._unsubscribe();\n if (element) {\n this._element = element;\n this._element.style.overflow = \"initial\";\n this._subscribe();\n } else {\n this._element = null;\n }\n }\n\n moveNext(options?: ISwipeLogicHandlerMoveNextOptions): void {\n\n if (!this.allowNext) return;\n\n options = {\n moveOnVideoFinished: false,\n ...options\n };\n\n this._reportSwipeToAnalytics(true, options.moveOnVideoFinished);\n\n this._swipeDirection = -1;\n this._element.style.transition = this._swipeTransitionCss;\n const translateAmount = (this._services.mediaQuery.xlAndAbove ? 33.33 : 100) * (this._services.language.isRTLLanguage ? 1 : -1);\n this._element.style.transform = \"translateX(\" + translateAmount + \"%)\";\n this._setIsNavigationAllowed(false);\n }\n\n movePrevious(): void {\n\n if (!this.allowPrevious) return;\n\n this._reportSwipeToAnalytics(false);\n\n this._swipeDirection = 1;\n\n this._element.style.transition = \"none\";\n this._element.prepend(this._element.lastElementChild);\n const translateAmount = (this._services.mediaQuery.xlAndAbove ? 33.33 : 100) * (this._services.language.isRTLLanguage ? 1 : -1);\n this._element.style.transform = \"translateX(\" + translateAmount + \"%)\";\n\n this._setIsNavigationAllowed(false);\n\n requestAnimationFrame(() => {\n this._element.style.transition = this._swipeTransitionCss;\n this._element.style.transform = \"translateX(0)\";\n });\n }\n\n resetScrollPosition(): void {\n this._element.style.transform = \"translateX(0)\";\n }\n\n private _currentGameIndex: NullableNumber = null;\n setCurrentGameIndex(gameIndex: number): void {\n this._currentGameIndex = gameIndex;\n }\n\n private _reportSwipeToAnalytics(swipeToLeft:boolean, isAutoSwipe:boolean=false): void {\n try {\n\n if(Check.isNullOrUndefined(this._currentGameIndex)) {\n return;\n }\n\n let nextGame;\n if(swipeToLeft === true){\n nextGame = (this._currentGameIndex + 1) % this._gamesListViewModel.gameTypes.length;\n }\n else {\n nextGame = (this._currentGameIndex>0) ? (this._currentGameIndex-1) : (this._gamesListViewModel.gameTypes.length-1);\n }\n\n let swipeFromGameId = this._gamesListViewModel.gameTypes[this._currentGameIndex];\n\n this._services.analytics.sendElasticInfoEvent({\n eventType:\"CGP_GENERIC_EVENT\",\n category: this._gamesListViewModel.arenaName,\n label: 'SWIPE',\n action: \"LIVE_CASINO_VIDEO\",\n customData: {\n swipeFromGameId:swipeFromGameId,\n swipeFromGameIndex:this._currentGameIndex,\n swipeToGameId:this._gamesListViewModel.gameTypes[nextGame],\n isAutoSwipe:isAutoSwipe\n }\n }, true);\n }\n catch (err){\n console.log(\"SWIPE analytics report failed : \" + err);\n }\n }\n\n}\n","import styled from \"styled-components\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\n\ninterface LiveStreamingNavigationProps {\n isActive: boolean;\n}\n\nconst LiveStreamingNavigationCommonBox = styled.div`\n position: absolute;\n top: 35%;\n width: 3rem;\n height: 3rem;\n opacity: ${({isActive}) => isActive ? \"1\" : \"0.25\"};\n cursor: pointer;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n /* On PC, one tile is a third of the swiper, but the ones not in center are scaled to 0.7 */\n /* So ... height is 100 * 0.7 */\n height: 70%;\n /* top is 100 * (1-0.7) / 2 */\n top: 15%;\n /* 23.331 is 33.33*0.7 */\n width: 23.331%;\n }\n`;\n\nexport const VideoListNavigationPrevButtonDefaultBox = styled(LiveStreamingNavigationCommonBox)`\n left: 1rem;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n /* On PC, one tile is a third of the swiper, but the ones not in center are scaled to 0.7 */\n /* left is 33.33*(1-0.7)/2 */\n left: 5%;\n }\n`;\n\nexport const VideoListNavigationNextButtonDefaultBox = styled(LiveStreamingNavigationCommonBox)`\n right: 1rem;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n /* On PC, one tile is a third of the swiper, but the ones not in center are scaled to 0.7 */\n /* right is 33.33*(1-0.7)/2 */\n right: 5%;\n }\n`;\n\nconst VideoCutCommonBox = styled.div`\n position: absolute;\n height: 80%;\n width: 2px;\n top: 10%;\n`;\n\nexport const VideoListLeftCutDefaultBox = styled(VideoCutCommonBox)`\n left: 8%;\n margin-left: -6px;\n\n ${CssRule.For.RTL.build()} & {\n left: unset;\n margin-left: 0px;\n right: 8%;\n margin-right: 6px;\n }\n`;\nexport const VideoListRightCutDefaultBox = styled(VideoCutCommonBox)`\n right: 8%;\n margin-right: 11px;\n\n ${CssRule.For.RTL.build()} & {\n right: unset;\n margin-right: 0px;\n left: 8%;\n margin-left: -11px;\n }\n`;\n","import {VideoListNavigationPrevButtonDefaultBox, VideoListNavigationNextButtonDefaultBox, VideoListLeftCutDefaultBox, VideoListRightCutDefaultBox} from \"./video-navigation.default.box\";\n\nexport const VideoListNavigationPrevButtonBox = VideoListNavigationPrevButtonDefaultBox;\nexport const VideoListNavigationNextButtonBox = VideoListNavigationNextButtonDefaultBox;\n\nexport const VideoListLeftCutBox = VideoListLeftCutDefaultBox;\nexport const VideoListRightCutBox = VideoListRightCutDefaultBox;\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {IVideoListViewModel} from \"../../services/arenas/models/lists/video-list/video-list-view-model.interface\";\n\n\ninterface VideoListComponentProps {\n viewModel: IVideoListViewModel;\n listPosition: number;\n}\n\nexport const VideoListComponent = observer(class VideoListComponent extends OrbitComponent {\n\n // For static video list we need to know the final gametype(from UI perspective)\n // For the final gametype, once video finishes, we don't auto swipe to the next one(= first one).\n private _getLastGameType(): number {\n let gameTypes = this.props.viewModel.gameTypes;\n let index = this.services.mediaQuery.xlAndAbove ? 0 : (gameTypes.length - 1);\n return gameTypes[index];\n }\n\n private _onGameBringInCentralView = (gameIndex: number) => {\n this.props.viewModel.setCurrentGameIndex(gameIndex);\n }\n\n render() {\n const viewModel = this.props.viewModel;\n return (\n \n );\n }\n});\n","import {SwiperListBaseModel} from \"../swiper-list-base.model\";\nimport {LiveStreamSwipeLogicHandler} from \"../../swiper-logic-handler/live-stream-swipe-logic-handler\";\nimport {Check} from \"@sparkware/app-utils\";\nimport React from \"react\";\nimport {\n VideoListLeftCutBox, VideoListNavigationNextButtonBox,\n VideoListNavigationPrevButtonBox, VideoListRightCutBox\n} from \"../../../../../components/live-streaming-tile/video-common-components/video-navigation/video-navigation.box\";\nimport {VideoListComponent} from \"../../../../../components/video-list-component/video-list.component\";\nimport {IVideoListViewModel} from \"./video-list-view-model.interface\";\n\nexport abstract class DefaultVideoListModel extends SwiperListBaseModel implements IVideoListViewModel {\n protected _swipeLogicHandler: LiveStreamSwipeLogicHandler = new LiveStreamSwipeLogicHandler(this.services, this);\n\n protected get _isAISorted(): boolean {\n return false;\n }\n\n protected _getGameTypesOffsetFromLocalStorage(): number {\n let storedValue = this.services.localStorage.getItem(this._offsetStorageKey);\n\n return Check.isNullOrUndefined(storedValue) ? 0 : parseInt(storedValue);\n }\n\n protected _offsetStorageKey: string = 'orbit-video-list-gametype-offset' + this.listConfiguration.listId;\n\n /**\n * This must be static. Because the ListFactory.createSwiper will be called several times, and that will create a new instance of this class.\n * (For every live casino video list and every time the list changes and maybe when the ai changes the list sorting)\n * So if this is not \"static\" at every instance creation _gameTypesOffset will be initialized with \"undefined\"\n * and when calling _getGameTypes the cycling will run again for every new instance.\n * And we want to do this only once after page load\n */\n protected static _gameTypesOffsets: Record = {};\n\n protected _cycleGamesAndIncrementOffset(baseArray: number[]) {\n if(Check.isNullOrUndefined(DefaultVideoListModel._gameTypesOffsets[this._offsetStorageKey])) {\n DefaultVideoListModel._gameTypesOffsets[this._offsetStorageKey] = this._getGameTypesOffsetFromLocalStorage();\n let newOffset = (DefaultVideoListModel._gameTypesOffsets[this._offsetStorageKey] + 1) % (this.listConfiguration.gamesId.length);\n this.services.localStorage.setItem(this._offsetStorageKey, newOffset);\n }\n\n return baseArray.splice(DefaultVideoListModel._gameTypesOffsets[this._offsetStorageKey]).concat(baseArray);\n }\n\n get gameTypes(): number[] {\n // gameTypes is a getter and in javascript I cannot call \"super.gameTypes\"\n let gTypes = this._applyGameTypesTransformations(this._getGameTypes());\n\n if (this.services.mediaQuery.xlAndAbove && gTypes.length > 2) {\n let lastGame = gTypes.pop();\n gTypes.unshift(lastGame);\n }\n return gTypes;\n }\n\n renderListNavigation(): React.ReactElement | null {\n\n const PrevIcon = this.services.theme.currentTheme.icons.leftArrowIcon;\n const NextIcon = this.services.theme.currentTheme.icons.rightArrowIcon;\n\n return (\n \n {this.services.mediaQuery.xlAndAbove ?\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n : null}\n this.swipeLogicHandler.movePrevious()}>\n \n \n this.swipeLogicHandler.moveNext()}>\n \n \n {this.services.mediaQuery.xlAndAbove ?\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n : null}\n \n );\n }\n\n\n\n _renderList(listPosition: number): React.ReactElement | null {\n return (\n \n );\n }\n\n setCurrentGameIndex(gameIndex: number): void {\n this._swipeLogicHandler.setCurrentGameIndex(gameIndex);\n }\n}\n","import React from \"react\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {LiveStreamingListTitleBox} from \"../../../../../components/live-streaming-tile/live-streaming-specific-components/live-streaming-list-title/live-streaming-list-title.box\";\nimport {LiveStreamingTitleIconBox} from \"../../../../../components/live-streaming-tile/live-streaming-specific-components/live-streaming-title-icon/live-streaming-title-icon.box\";\nimport {DefaultVideoListModel} from \"./default-video-list.model\";\nimport {LIVE_STREAMING_ITEM} from \"../../../../../themes/css-global-classes\";\n\nexport class LiveStreamingVideoListModel extends DefaultVideoListModel {\n\n get templateType(): string {\n return LIVE_STREAMING_ITEM;\n }\n\n private _isLiveStreamDisabled = () => {\n // live stream should be rendered on mobile only, excepting CIP8, if is enable from AB and\n // if user is authorized or if is not authorized only if is not disabled prelogin\n return this.services.miniOrbit.isEnabled ||\n !this.services.abTestingFeatureDataProvider.isVideoLiveStreamEnabled ||\n this.services.liveStreamPlaying.isDisabledPrelogin\n };\n\n protected _shouldBeDisplayed(): boolean {\n if(this._isLiveStreamDisabled()) {\n return false;\n }\n\n return super._shouldBeDisplayed() && this.gameTypes.length > 0;\n }\n\n get maxGamesToShowInList(): number {\n return 20;\n }\n\n protected _getGameTypes(): number[] {\n\n if(!Check.isNullOrUndefined(this.services.liveStreamPlaying.isSupported)\n && !this.services.liveStreamPlaying.isSupported) {\n return [];\n }\n\n let baseArray = [...this.listConfiguration.gamesId];\n let gameTypes = this._cycleGamesAndIncrementOffset(baseArray);\n\n gameTypes = gameTypes.filter((gt) => this.services.games.gamesMap[gt]?.hasVideoURL);\n\n if(this.services.liveTableFeeds.tablesData.length === 0) {\n return gameTypes;\n } else {\n return gameTypes.filter(gType => this.services.liveTableFeeds.openTablesIds.find(tableId => tableId === gType.toString()));\n }\n }\n\n get numberOfGamesSkeletons(): number {\n return this._getNumberOfGamesSkeletons();\n }\n\n protected _getNumberOfGamesSkeletons(): number {\n if(Check.isNullOrUndefined(this.services.liveStreamPlaying.isSupported) || this.services.liveTableFeeds.tablesData.length === 0) {\n return 1;\n }\n\n return 0;\n }\n\n protected _renderHeaderIcon(): React.ReactElement | null {\n return (\n {this.services.translation.translate(\"LIVE\")}\n );\n }\n\n protected _renderHeaderText(): string | React.ReactElement {\n return (\n \n {this.title.translation}\n \n );\n }\n\n}\n","\nexport interface IUserGameOrientationService {\n readonly gameGroup: IUserGameOrientation;\n}\n\nexport enum GAME_ORIENTATION_IDS{\n SLOTS = 5003,\n BLACKJACK = 5001,\n ROULETTE = 5002,\n LIVE_BLACKJACK = 5009,\n LIVE_ROULETTE = 5010,\n LIVE_CASINO = 6003,\n CASINO_SKILL = 6001,\n CASINO_SOFT = 6002,\n CASINO_MIXT = 8001\n}\n\nexport interface IUserGameOrientation{\n groupId?: number;\n groupName: string;\n}","import {DefaultVideoListModel} from \"./default-video-list.model\";\nimport {STATIC_VIDEO_ITEM} from \"../../../../../themes/css-global-classes\";\nimport {SwiperGamesListConfiguration} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {IArenaToGamesListAdapter} from \"../../arenas/arena-to-games-list-adapter.interface\";\n\nexport class StaticVideoListModel extends DefaultVideoListModel {\n\n constructor(listConfiguration: SwiperGamesListConfiguration, arena: IArenaToGamesListAdapter) {\n super(listConfiguration, arena);\n\n this.services.staticVideoPlaying.setSwiperHandler(this.swipeLogicHandler);\n }\n\n get templateType(): string {\n return STATIC_VIDEO_ITEM;\n }\n\n private _isStaticVideoListDisabled = () => {\n return (\n this.services.miniOrbit.isEnabled ||\n this.services.staticVideoPlaying.isDisabledPrelogin ||\n !this.services.abTestingFeatureDataProvider.isStaticVideoListEnabled\n );\n };\n\n protected _shouldBeDisplayed(): boolean {\n if(this._isStaticVideoListDisabled()) {\n return false;\n }\n\n return super._shouldBeDisplayed() && this.gameTypes.length > 0;\n }\n\n get maxGamesToShowInList(): number {\n return 4;\n }\n\n protected _getGameTypes(): number[] {\n\n let baseArray = [...this.listConfiguration.gamesId];\n let gameTypes = this._cycleGamesAndIncrementOffset(baseArray);\n\n gameTypes = gameTypes.filter((gt) => this.services.games.gamesMap[gt]?.hasVideoURL);\n\n return gameTypes;\n }\n\n get numberOfGamesSkeletons(): number {\n return this._getNumberOfGamesSkeletons();\n }\n\n protected _getNumberOfGamesSkeletons(): number {\n return 1;\n }\n}\n","import {\n ApiListType, ArenaGamesGridConfiguration,\n SwiperGamesListConfiguration\n} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport {IGamesListModel} from \"./games-list-model.interface\";\nimport {RecentlyPlayedListModel} from \"./recently-played/recently-played-list.model\";\nimport {TopPicksListModel} from \"./top-picks/top-picks-list.model\";\nimport {NewGamesListModel} from \"./new-games/new-games-list.model\";\nimport {PlayersLikeYouListModel} from \"./players-like-you/players-like-you-list.model\";\nimport {StaticSwiperListModel} from \"./static-swiper/static-swiper-list.model\";\nimport {IArenaToGamesListAdapter} from \"../arenas/arena-to-games-list-adapter.interface\";\nimport {GamesGridListModel} from \"./games-grid/games-grid-list.model\";\nimport { BecauseYouPlayedPlayedListModel } from \"./because-you-played/because-you-played-list.model\";\nimport {LiveStreamingVideoListModel} from \"./video-list/live-streaming-video-list.model\";\nimport {StaticVideoListModel} from \"./video-list/static-video-list.model\";\n\n\nexport class ListFactory {\n\n constructor(private readonly arena: IArenaToGamesListAdapter) {\n }\n createSwiper(swiperConfig: SwiperGamesListConfiguration): IGamesListModel {\n\n switch (swiperConfig.apiListType) {\n case ApiListType.RECENTLY_PLAYED:\n return new RecentlyPlayedListModel(swiperConfig, this.arena);\n case ApiListType.TOP_PICKS:\n return new TopPicksListModel(swiperConfig, this.arena);\n case ApiListType.NEW_GAMES:\n return new NewGamesListModel(swiperConfig, this.arena);\n case ApiListType.PLAYERS_LIKE_YOU:\n return new PlayersLikeYouListModel(swiperConfig, this.arena);\n case ApiListType.LIVE_CASINO_VIDEO: // maybe rename this to LIVE_STREAMING_VIDEO,but it'd also need admin updated\n return new LiveStreamingVideoListModel(swiperConfig, this.arena);\n case ApiListType.STATIC_VIDEO:\n return new StaticVideoListModel(swiperConfig, this.arena);\n case ApiListType.BECAUSE_YOU_PLAYED:\n return new BecauseYouPlayedPlayedListModel(swiperConfig, this.arena);\n\n default:\n return new StaticSwiperListModel(swiperConfig, this.arena);\n\n }\n }\n\n createGrid(gridConfig: ArenaGamesGridConfiguration) {\n return new GamesGridListModel(gridConfig, this.arena);\n }\n}\n","import {BannerComponent} from \"../../../../../components/banner/banner.component\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport {BannerConfig} from \"../../arenas/arena-base.model\";\n\nexport class PromotionalBannerModel {\n constructor(private readonly services: IServiceFactoryExtended,\n public readonly arenaName: string,\n private readonly _bannerConfig: BannerConfig | null) {\n\n }\n private _getBannerMinHeightInPixels(listPosition: number, numberOfListsInCurrentArena: number, bannerConfig: BannerConfig | null) {\n if (!bannerConfig) {\n return 0;\n }\n\n const shouldRenderBanner = listPosition === bannerConfig.position\n || (numberOfListsInCurrentArena < bannerConfig.position && listPosition === numberOfListsInCurrentArena);\n if (!shouldRenderBanner) {\n return 0;\n }\n\n if (this.services.mediaQuery.sAndBelow) {\n return 142;\n }\n\n return 223;\n }\n\n render(listPosition: number, numberOfListsInCurrentArena: number): React.ReactElement {\n const bannerMinHeight = this._getBannerMinHeightInPixels(listPosition, numberOfListsInCurrentArena, this._bannerConfig);\n if (bannerMinHeight === 0) {\n return null;\n }\n\n return (\n \n );\n }\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n\nexport const VideoSlidesFilterItemPreviewFooterBox = styledBox(\"VideoSlidesFilterItemPreviewFooterBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterItemPreviewFooterTextBox = styledBox(\"VideoSlidesFilterItemPreviewFooterTextBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterItemPreviewBox = styledBox(\"VideoSlidesFilterItemPreviewBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterItemPreviewPlayerBox = styledBox(\"VideoSlidesFilterItemPreviewPlayerBox\");","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from '../../../../react-hooks/use-services.hook';\nimport {Nullable} from \"../../../../../common/types/nullable-types\";\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport {VideoSlidesFilterItemPreviewFooterBox} from \"./footer/video-slides-filter-item-preview-footer.box\";\nimport {VideoSlidesFilterItemPreviewFooterTextBox} from \"./footer-text/video-slides-filter-item-preview-footer-text.box\";\nimport {VideoSlidesFilterItemPreviewBox} from \"./container/video-slides-filter-item-preview.box\";\nimport {IGameFilterDefinition} from \"../../../../services/games-filter/filters-definitions/game-filter-definition.interface\";\nimport {VideoSlidesFilterItemPreviewPlayerBox} from \"./player/video-slides-filter-item-preview-player.box\";\n\ninterface VideoSlidesFilterItemPreviewProps {\n filterId: string;\n filterCount: number;\n}\n\nexport const VideoSlidesFilterItemPreviewComponent: React.FC = observer((props) => {\n const services = useServices();\n const filtersMap: Record = services.gamesFilter.getFiltersDefinitions([props.filterId]);\n\n const gameType: Nullable = services.videoSlides.firstGameForFilter(props.filterId);\n\n const _onClick = () => {\n services.analytics.sendOrbitUserFlowEvent('navigation', 'videoSlidesOpenFromList', props.filterId);\n services.videoSlides.navigateToFilter(props.filterId);\n }\n\n if (!gameType) {\n return null;\n }\n\n return (\n \n {/* For the video element I cannot conditionally render it for this.props.isInCenterStage because when the video reaches end and the user\n swipes right/left it renders again and starts again */}\n {}} //TODO we will have a task for videoPlayer\n onLoading={() => {}}\n onWatchTimeLimitReached={() => {}}\n isInCenterStage={true}\n inViewport={true}\n display={true}\n videoPlayingService={services.videoOnDemandPlaying}\n loop={true}\n />\n \n \n {filtersMap[props.filterId]?.text ?? props.filterId}\n \n \n \n )\n\n})","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterListPreviewBox = styledBox(\"VideoSlidesFilterListPreviewBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterListPreviewHeaderBox = styledBox(\"VideoSlidesFilterListPreviewHeaderBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterListPreviewTitleBox = styledBox(\"VideoSlidesFilterListPreviewTitleBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterListPreviewContentBox = styledBox(\"VideoSlidesFilterListPreviewContentBox\");","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {VideoSlidesFilterItemPreviewComponent} from \"./item/video-slides-filter-item-preview.component\"\nimport {ExploreButtonBox} from \"../../orbit-swiper/orbit-swiper-buttons/boxes/button/explore-button.box\";\nimport styled, {css} from \"styled-components\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {VideoSlidesFilterListPreviewBox} from \"./list/container/video-slides-filter-list-preview.box\";\nimport {VideoSlidesFilterListPreviewHeaderBox} from \"./list/header/video-slides-filter-list-preview-header.box\";\nimport {VideoSlidesFilterListPreviewTitleBox} from \"./list/title/video-slides-filter-list-preview-title.box\";\nimport {VideoSlidesFilterListPreviewContentBox} from \"./list/content/video-slides-filter-list-preview-content.box\";\nimport {CyClass} from \"../../../../common/cy-classes\";\n\nexport const SwiperButtonBox = styled.div<{isTouchDevice?: boolean}>`\n ${({isTouchDevice}) => isTouchDevice ? css`\n display: none;\n ` : null}\n`;\n\n\ninterface VideoSlidesFilterPreviewProps {\n hasHeaderButton: boolean;\n height: string;\n filterIdList: string[];\n}\nexport const VideoSlidesFilterListPreviewComponent: React.FC = observer((props) => {\n const services = useServices();\n let ExploreOutlinedIcon = services.theme.currentTheme.icons.exploreOutlinedIcon;\n const btnOnClick = () => {\n services.analytics.sendOrbitUserFlowEvent('navigation', 'videoSlidesOpenSeeAllBtn');\n services.linksNavigation.navigateLink({linkId: 'videoSlideExploreLink'});\n }\n return (\n \n \n \n \n {services.translation.translate(\"VIDEO_SLIDES_FILTER_PREVIEW_TITLE\")}\n \n \n \n {services.translation.translate(\"EXPLORE\")}\n \n \n \n \n {props.filterIdList.map(filterId => (\n )\n )}\n \n \n )\n});\n","\nimport {Check} from \"@sparkware/app-utils\";\nimport {Nullable} from \"../../../../../../common/types/nullable-types\";\nimport {VideoSlidesFilterListPreviewComponent} from \"../../../../../components/video-slides/filter-preview/video-slides-filter-list-preview.component\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport {VideoSlidesFilterConfig} from \"../../arenas/arena-base.model\";\n\nexport class VideoSlidesFilterPreviewModel {\n constructor(private readonly services: IServiceFactoryExtended, public readonly arenaName: string,\n private readonly _videoSlidesFilterConfig: Nullable) {\n }\n\n private _shouldRenderVideoSlidesFilter(listPosition: number): boolean {\n if (!Check.isNullOrUndefined(this._videoSlidesFilterConfig) &&\n this.services.videoSlides.shouldBeDisplayed &&\n listPosition === this._videoSlidesFilterConfig.position) {\n return true;\n }\n\n return false;\n }\n\n render(listPosition: number): React.ReactElement {\n if (!this._shouldRenderVideoSlidesFilter(listPosition)) {return null}\n\n return ()\n }\n}","import {Nullable} from \"../../../../../common/types/nullable-types\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {BannerConfig, VideoSlidesFilterConfig} from \"../arenas/arena-base.model\";\nimport {PromotionalBannerModel} from \"./promotional-banner/promotional-banner.model\";\nimport {ISwiperExtraContentViewModel} from \"./swiper-extra-content-view-model.interface\";\nimport {VideoSlidesFilterPreviewModel} from \"./video-slides-filter-preview/video-slides-filter-preview.model\";\n\n\nexport class SwiperExtraContentModel implements ISwiperExtraContentViewModel {\n constructor(public readonly services: IServiceFactoryExtended,\n public readonly arenaName: string,\n readonly bannerConfig: BannerConfig | null,\n readonly videoSlidesFilterConfig: Nullable) {\n this._promotionalBanner = new PromotionalBannerModel(this.services, this.arenaName, this.bannerConfig);\n this._videoSlidesFilter = new VideoSlidesFilterPreviewModel(this.services, this.arenaName, this.videoSlidesFilterConfig);\n\n }\n\n private _promotionalBanner: PromotionalBannerModel;\n private _videoSlidesFilter: VideoSlidesFilterPreviewModel;\n renderExtraContent(listPosition: number, numberOfListsInCurrentArena: number): React.ReactElement {\n return (\n <>\n {this._promotionalBanner.render(listPosition, numberOfListsInCurrentArena)}\n {this._videoSlidesFilter.render(listPosition)}\n \n )\n }\n\n}","import { ArenaFiltersConfigurationMap, IArenaViewModel } from \"./arena-view-model.interface\";\nimport {\n ArenaGamesGridConfiguration,\n SwiperGamesListConfiguration\n} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport { action, computed, observable, reaction, makeObservable } from \"mobx\";\nimport { IArenaToGamesListAdapter } from \"./arena-to-games-list-adapter.interface\";\nimport { IServiceFactoryExtended } from \"../../../service-factory-extended.interface\";\nimport { IGamesListModel } from \"../lists/games-list-model.interface\";\nimport React from \"react\";\nimport { ListFactory } from \"../lists/list-factory\";\nimport { Check } from \"@sparkware/app-utils\";\nimport { ListsSortOrderStorage } from \"../lists-sort-order-storage\";\nimport { IGamesListRenderer } from \"../lists/games-list-renderer.interface\";\nimport { BannerComponent } from \"../../../../components/banner/banner.component\";\nimport { GameInfo } from \"../../../games/game-info\";\nimport { IGamesFilterStrategy } from \"../../../games-filter/strategies/games-filter-strategy.interface\";\nimport { Nullable } from \"../../../../../common/types/nullable-types\";\nimport {SwiperExtraContentModel} from \"../swiper-extra-content/swiper-extra-content.model\";\n\n\nexport type BannerConfig = { position: number; templateID: string; componentID: string; fallbackComponent: string, bannerAdminPlaceholderId: string };\nexport type VideoSlidesFilterConfig = { position: number; filterIds: string[] }\nexport abstract class ArenaBaseModel implements IArenaToGamesListAdapter, IArenaViewModel {\n constructor(public readonly arenaName: string,\n public readonly services: IServiceFactoryExtended,\n private readonly _postLoginListsSortOrderStorage: ListsSortOrderStorage) {\n makeObservable(this);\n\n this._listFactory = new ListFactory(this);\n this._swiperExtraContentHandler = new SwiperExtraContentModel(this.services,\n this.arenaName,\n this._getPromotionalBannerConfig(),\n this._getVideoSlidesFilterConfig())\n\n reaction(() => [this.services.user.isAuthorized, this.services.routing.currentRoute],\n async () => {\n await this._updateAIEngineSwipersSortOrder();\n }, {\n fireImmediately: true\n });\n }\n\n private _swiperExtraContentHandler: SwiperExtraContentModel;\n private _listFactory: ListFactory;\n abstract get maxSwipersToShow(): number;\n abstract get maxGamesToShowInList(): number;\n protected abstract _getSwipersConfigurations(): SwiperGamesListConfiguration[];\n protected abstract _getGridsConfigurations(): ArenaGamesGridConfiguration[];\n protected abstract _getPromotionalBannerConfig(): BannerConfig | null;\n protected abstract _getVideoSlidesFilterConfig(): Nullable;\n abstract renderArena(): React.ReactElement | null;\n abstract filterGamesByArenaType(gameInfos: GameInfo[]): GameInfo[];\n abstract get filtersConfigurationMap(): ArenaFiltersConfigurationMap;\n abstract getGamesFilteringStrategy(): IGamesFilterStrategy;\n\n protected _getBannerMinHeightInPixels(listPosition: number, bannerConfig: BannerConfig | null) {\n if (!bannerConfig) {\n return 0;\n }\n\n const shouldRenderBanner = listPosition === bannerConfig.position\n || (this.allLists.length < bannerConfig.position && listPosition === this.allLists.length);\n if (!shouldRenderBanner) {\n return 0;\n }\n\n if (this.services.mediaQuery.sAndBelow) {\n return 142;\n }\n\n return 223;\n }\n protected _renderPromotionalBanner(listPosition: number): React.ReactElement | null {\n const bannerConfig = this._getPromotionalBannerConfig();\n const bannerMinHeight = this._getBannerMinHeightInPixels(listPosition, bannerConfig);\n if (bannerMinHeight === 0) {\n return null;\n }\n\n return (\n \n );\n }\n\n protected get useAdvancedFilters(): boolean {\n return this.services.configuration.servicesConfigs.Filters.useAdvancedFilters;\n }\n\n protected get _isUsingExternalAIForSwipersSorting(): boolean {\n return false;\n }\n\n protected _getSwiperIdToPutOnTop(): number[] | null {\n return null;\n }\n\n get aiEngine(): string {\n return \"\";\n }\n\n get sortingGametypesMapOverride(): Record | null {\n return null;\n }\n\n @observable.ref\n private _aiEngineListsSortOrder: Record = null;\n\n @action.bound\n private _setAiEngineListsSortOrder(value: Record): void {\n this._aiEngineListsSortOrder = value;\n }\n private async _updateAIEngineSwipersSortOrder(): Promise {\n if (this._isUsingExternalAIForSwipersSorting) {\n return;\n }\n if (this._aiEngineListsSortOrder) {\n return;\n }\n\n if (!this.services.user.isAuthorized) {\n return;\n }\n\n if (this.services.routing.currentRoute.data?.arenaType === this.arenaName) {\n const listsIDs = this._getSwipersConfigurations().filter(sw => !Check.isNullOrUndefined(sw.listId))\n .map(sw => sw.listId.toString());\n if (listsIDs.length === 0) {\n return;\n }\n\n this._setAiEngineListsSortOrder(await this.services.aiEngine.getCasinoRecommendedDynamicListsForPlayer(listsIDs));\n }\n }\n\n private _movePreferredSwiperOnTop(swipers: IGamesListModel[]) {\n const listsIdsToPutOnTop = this._getSwiperIdToPutOnTop();\n\n if (Check.isNullOrUndefined(listsIdsToPutOnTop)) {\n return swipers;\n }\n\n // Reverse lists order, otherwise it will put last wanted on top list at first position\n listsIdsToPutOnTop.reverse();\n\n listsIdsToPutOnTop.forEach(id => {\n if (!Check.isNumber(id)) return;\n\n const listIndex = swipers.findIndex((list) => list.listId === id);\n\n if (listIndex > 0) {\n swipers.splice(0, 0, swipers.splice(listIndex, 1)[0]);\n }\n });\n\n return swipers;\n }\n\n\n protected _sortSwipersByAI(originalSwipers: IGamesListModel[]): IGamesListModel[] {\n const scores = this._aiEngineListsSortOrder;\n if (!scores) {\n return originalSwipers;\n }\n\n const notForcedInLayoutSortedSwipers = originalSwipers.filter(s => !s.forceInLayout)\n .sort((s1, s2) => (scores[s2.listId] || 0) - (scores[s1.listId] || 0));\n\n let sortedSwipersConfigs: IGamesListModel[] = [];\n originalSwipers.forEach(gameList => {\n if (gameList.forceInLayout) {\n sortedSwipersConfigs.push(gameList)\n } else {\n let mappedGameList = notForcedInLayoutSortedSwipers.shift();\n if (mappedGameList) {\n sortedSwipersConfigs.push(mappedGameList)\n }\n }\n });\n\n return sortedSwipersConfigs;\n }\n\n\n\n @computed\n public get allLists(): IGamesListModel[] {\n const result = this._createAllLists();\n this._sendGameListsAnalytics(result);\n return result;\n }\n\n @computed\n get allArenaGamesForFiltering(): GameInfo[] {\n let gameTypes: number[] = [];\n this._getGridsConfigurations().forEach(g => {\n gameTypes = [\n ...gameTypes,\n ...g.gamesId\n ]\n });\n\n //use Set here to make a list of distinct game types\n return [...new Set(gameTypes)].map(gameType => this.services.games.gamesMap[gameType]).filter(gameInfo => gameInfo);\n }\n\n\n get filteredGamesCount(): number {\n let gameTypes: number[] = [];\n\n for (let list of this.allLists) {\n gameTypes = [\n ...gameTypes,\n ...list.gameTypes\n ]\n }\n\n return [...new Set(gameTypes)].length;\n }\n\n get listsCount(): number {\n return this.allLists.length;\n }\n\n protected _createAllLists(): IGamesListModel[] {\n return this._appendGrids(\n this._limitTheNumberOfSwipers(\n this._saveSwipersPostLoginSortOrder(\n this._sortSwipersByPostLoginOrder(\n this._movePreferredSwiperOnTop(\n this._sortSwipersByAI(\n this._createSwipers()))))));\n }\n\n private _limitTheNumberOfSwipers(swipers: IGamesListModel[]): IGamesListModel[] {\n\n if (swipers.length <= this.maxSwipersToShow) {\n return swipers;\n }\n let result: IGamesListModel[] = [];\n\n let maxNumberOfSwipers = this.maxSwipersToShow;\n for (let i = 0; i < swipers.length; i++) {\n const list = swipers[i];\n if (maxNumberOfSwipers > 0 || list.forceInLayout) {\n result.push(list);\n }\n\n if (list.isVisible) {\n maxNumberOfSwipers--;\n }\n\n }\n\n return result;\n }\n\n renderList(listPosition: number): React.ReactElement | null {\n let position = listPosition;\n\n for (let list of this.allLists) {\n if (list.isVisible) {\n position--;\n }\n if (position === 0) {\n return this._renderListAndBanner(listPosition, list);\n }\n }\n\n return null;\n }\n\n protected _renderListAndBanner(listPosition: number, list: IGamesListRenderer) {\n return (\n \n {list.render(listPosition)}\n {this._swiperExtraContentHandler.renderExtraContent(listPosition, this.allLists.length)}\n \n )\n }\n\n getNextBatchSize(currentListPosition: number): number {\n if (currentListPosition > this.allLists.length) {\n return 0;\n }\n\n return 2;\n }\n\n protected _saveSwipersPostLoginSortOrder(swipers: IGamesListModel[]): IGamesListModel[] {\n if (this.services.user.isAuthorized) {\n this._postLoginListsSortOrderStorage.saveSortOrder(this.arenaName, swipers);\n }\n return swipers;\n }\n\n protected _sortSwipersByPostLoginOrder(swipers: IGamesListModel[]): IGamesListModel[] {\n if (this.services.user.isAuthorized) {\n return swipers;\n }\n\n return this._postLoginListsSortOrderStorage.sortLists(this.arenaName, swipers);\n }\n\n protected _createSwipers(): IGamesListModel[] {\n const configs = this._getSwipersConfigurations();\n const lists: IGamesListModel[] = [];\n\n configs.forEach((listConfig) => {\n lists.push(this._createSwiper(listConfig));\n });\n\n return lists;\n }\n\n protected _appendGrids(lists: IGamesListModel[]) {\n this._getGridsConfigurations().forEach(gridConfig => {\n lists.push(this._createGrid(gridConfig));\n });\n return lists;\n }\n\n protected _createGrid(gridConfig: ArenaGamesGridConfiguration) {\n return this._listFactory.createGrid(gridConfig);\n }\n\n protected _createSwiper(swiperConfig: SwiperGamesListConfiguration): IGamesListModel {\n return this._listFactory.createSwiper(swiperConfig);\n }\n\n protected _sendGameListsAnalytics(lists: IGamesListModel[]): IGamesListModel[] {\n if (!this.services.user.isAuthorized) {\n return lists;\n }\n\n if (!this._isUsingExternalAIForSwipersSorting) {\n return lists;\n }\n\n const analyticsObject = {\n category: 'AI_ListsDisplayed',\n action: lists.map(list => list.title).join(','),\n label: \"ML888\"\n };\n\n this.services.analytics.sendAnalytics(analyticsObject.category, analyticsObject.action, analyticsObject.label);\n\n return lists;\n }\n}","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../themes/architecture/styled-by-device\";\n\nconst MobileBox = styled.div<{isBottomNavbarEnabled: boolean}>`\n position: fixed;\n z-index:15;\n bottom: ${props => props.isBottomNavbarEnabled? 'calc(env(safe-area-inset-bottom) + 64px)' : '34px'};\n\n right: 3px;\n \n cursor: pointer;\n \n display: grid;\n grid-template-rows: 45px 30px;\n justify-items: center; \n`;\n\nconst PcBox = styled(MobileBox)`\n transform: scale(1.2);\n right: 20px;\n`;\n\nexport const DailyDealContainerBox = styledByDevice(PcBox, MobileBox);\n","import styled, {keyframes} from \"styled-components\";\n\n\nconst glowRotateAnimation = keyframes`\n 0% {\n transform: rotate(0deg);\n }\n 20%, 25% {\n transform: rotate(90deg);\n } \n 45%, 50% {\n transform: rotate(180deg);\n } \n 70%, 75% {\n transform: rotate(270deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n `;\n\nexport const DailyDealChestGlowBox = styled.div`\n\n background: url(${({theme}) => theme.images.dailyDeal.glow.toString()}) center no-repeat;\n position: relative;\n bottom: 25px;\n \n grid-column: 1;\n grid-row: 1;\n \n height: 106px;\n width: 106px; \n z-index: -1;\n \n transform: rotate(30deg);\n animation: ${glowRotateAnimation} 4s infinite;\n`;\n","import styled, {keyframes} from \"styled-components\";\n\nconst chestScaleAnimation = keyframes`\n 0% { \n transform: scale(1);\n }\n 40%, 50% { \n transform: scale(1.2);\n }\n 100% { \n transform: scale(1);\n }\n `;\n\n\nexport const DailyDealChestBox = styled.img` \n \n grid-column: 1;\n grid-row: 1;\n \n position: relative;\n height: 50px;\n \n animation: ${chestScaleAnimation} 2s infinite;\n`;\n","import styled from \"styled-components\";\n\nexport const DailyDealTextStripBox = styled.span`\n background: url(${({theme}) => theme.images.dailyDeal.textStrip.toString()}) center no-repeat;\n background-size: cover;\n \n display: block;\n \n width: 120px;\n height: 30px;\n \n color: ${({theme}) => theme.colors.textLight};\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n \n padding: 2.5px 10px 0;\n text-align: center;\n font-size: 13px;\n line-height: 19px; \n}\n`;\n","import styled from \"styled-components\";\n\nexport const DailyDealChestHaloBox = styled.div`\n\n background: url(${({theme}) => theme.images.dailyDeal.halo.toString()}) center no-repeat;\n position: relative;\n bottom: 15px;\n \n grid-column: 1;\n grid-row: 1;\n \n height: 90px;\n width: 83px; \n z-index: -1;\n`;\n","import React from 'react';\nimport { observer } from 'mobx-react';\nimport {DailyDealContainerBox} from \"./boxes/daily-deal-container.box\";\nimport {DailyDealChestGlowBox} from \"./boxes/daily-deal-chest-glow.box\";\nimport {DailyDealChestBox} from \"./boxes/daily-deal-chest.box\";\nimport {DailyDealTextStripBox} from \"./boxes/daily-deal-text-strip.box\";\nimport {DailyDealChestHaloBox} from \"./boxes/daily-deal-chest-halo.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface DailyDealComponentProps extends ComponentServicesPick<'dailyDeal' | 'bottomNavigationBar'> {\n \n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const _onDailyDealClick = async () => {\n services.analytics.sendAnalytics('Daily_Deal', 'Click', services.arenas.getCurrentArena().arenaName);\n props.dailyDeal.visitDailyDeal();\n }\n\n if (!props.dailyDeal.dailyDealCampaignId) {\n return null;\n }\n\n return (\n \n \n \n {services.translation.translate(\"DAILY_DEAL_WIDGET_STRIP\") } \n \n \n );\n \n})\nexport const DailyDealComponent = withServices(ComponentBody, ['dailyDeal', 'bottomNavigationBar']);","import {styledBox} from \"../../themes/architecture/styled-box\";\n\nexport const LayoutWrapperBox = styledBox('LayoutWrapperBox');\n","import styled from \"styled-components\";\n\nexport const HomepageHeaderArenaMenuItemDefaultBox = styled.div`\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n position: relative;\n margin: 0rem 3rem;\n padding-left: 3.6rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 0rem 1.5rem;\n padding-left: 2rem;\n\n padding-top: 0.3rem;\n padding-bottom: 0.3rem;\n }\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaMenuItemDefaultBox} from \"./home-page-header-arena-menu-item.default.box\";\nimport {baseColors} from \"../../../../../themes/definitions/mrgreen/base-colors\";\n\nexport const HomepageHeaderArenaMenuItemMrGreenBox = styled(HomepageHeaderArenaMenuItemDefaultBox)`\n color: ${({theme}) => theme.colors.textContrast};\n &:hover {\n color: ${baseColors.white};\n }\n`;\n","import {HomepageHeaderArenaMenuItemDefaultBox} from \"./home-page-header-arena-menu-item.default.box\";\nimport { styledByTheme } from \"../../../../../themes/architecture/styled-by-theme\";\nimport {HomepageHeaderArenaMenuItemMrGreenBox} from \"./home-page-header-arena-menu-item.mrgreen.box\";\n\nexport const HomepageHeaderArenaMenuItemBox = styledByTheme(HomepageHeaderArenaMenuItemDefaultBox)\n .forMrGreen(HomepageHeaderArenaMenuItemMrGreenBox)\n .apply();\n","import styled from \"styled-components\";\n\nexport const HomepageHeaderArenaMenuItemIconDefaultBox = styled.div`\n position: absolute;\n left: 0;\n top: 1px;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n top: 3px;\n }\n`;\n","import {HomepageHeaderArenaMenuItemIconDefaultBox} from \"./home-page-header-arena-menu-item-icon.default.box\";\nimport { styledByTheme } from \"../../../../../themes/architecture/styled-by-theme\";\n\nexport const HomepageHeaderArenaMenuItemIconBox = styledByTheme(HomepageHeaderArenaMenuItemIconDefaultBox).apply();\n","import styled from \"styled-components\";\n\nexport const HomepageHeaderArenaMenuItemNameDefaultBox = styled.div`\n position: relative;\n display: inline;\n font-size: 1.8rem;\n letter-spacing: 1px;\n padding-left: 1.2rem;\n ${({theme}) => theme.font.presets.body}\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 1.4rem;\n padding-left: 0.5rem;\n }\n`;\n","import {HomepageHeaderArenaMenuItemNameDefaultBox} from \"./home-page-header-arena-menu-item-name.default.box\";\nimport { styledByTheme } from \"../../../../../themes/architecture/styled-by-theme\";\n\nexport const HomepageHeaderArenaMenuItemNameBox = styledByTheme(HomepageHeaderArenaMenuItemNameDefaultBox)\n .apply();\n","import styled, { css } from \"styled-components\";\n\ninterface HomepageHeaderArenaTileBoxProps {\n useSmallHeaderArenas: boolean;\n totalItemsCount: number;\n}\n\nexport const HomepageHeaderArenaTileDefaultBox = styled.div`\n display: inline-block;\n width: 20%;\n ${props => props.useSmallHeaderArenas ? css`max-width: 290px` : \"\"};\n transition: transform 0.4s ease-in-out;\n\n &:hover {\n transform: scale(1.05);\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n max-width: ${({totalItemsCount}) => 100 / totalItemsCount}%;\n &::after {\n content: \"\";\n position: absolute;\n bottom: 5px;\n left: 0;\n width: 100%;\n height: 15px;\n background-image: url(${props => props.theme.images.headerArenaTileDropShadow.toString()});\n background-repeat: no-repeat;\n background-position: center;\n transform: translateY(100%);\n z-index: 0;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 22%;\n ${props => props.useSmallHeaderArenas ? css`max-width: 210px` : \"\"};\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: ${props => !props.useSmallHeaderArenas ? \"45%\" : \"31%\"};\n ${props => props.useSmallHeaderArenas ? css`min-width: 100px;`: \"\"};\n }\n\n`;\n","import styled, { css } from \"styled-components\";\nimport {HomepageHeaderArenaTileDefaultBox} from \"./home-page-header-arena-tile.default.box\";\n\nexport const HomepageHeaderArenaTileSIBox = styled(HomepageHeaderArenaTileDefaultBox)`\n ${props => props.useSmallHeaderArenas ? css`max-width: 252px` : \"\"};\n padding-right: 1rem;\n padding-left: 1rem;\n &::after {\n display: none;\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n ${props => props.useSmallHeaderArenas ? css`max-width: 210px` : \"\"};\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n ${props => props.useSmallHeaderArenas ? css`min-width: 100px;`: \"\"};\n }\n\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaTileDefaultBox} from \"./home-page-header-arena-tile.default.box\";\n\nexport const HomepageHeaderArenaTileCasino777Box = styled(HomepageHeaderArenaTileDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n max-width: min(${({totalItemsCount}) => 100 / totalItemsCount}%, 220px);\n }\n\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaTileDefaultBox} from \"./home-page-header-arena-tile.default.box\";\n\nexport const HomepageHeaderArenaTileCasino888Box = styled(HomepageHeaderArenaTileDefaultBox)`\n padding-right: 1rem;\n padding-left: 1rem;\n padding-top: 1rem;\n &::after {\n display: none;\n }\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaTileDefaultBox} from \"./home-page-header-arena-tile.default.box\";\n\nexport const HomepageHeaderArenaTileWsopBox = styled(HomepageHeaderArenaTileDefaultBox)`\n padding-right: 1rem;\n padding-left: 1rem;\n padding-top: 1rem;\n &::after {\n display: none;\n }\n`;\n","import {HomepageHeaderArenaTileDefaultBox} from \"./home-page-header-arena-tile.default.box\";\nimport {HomepageHeaderArenaTileSIBox} from \"./home-page-header-arena-tile.si.box\";\nimport { styledByTheme } from \"../../../../../themes/architecture/styled-by-theme\";\nimport {HomepageHeaderArenaTileCasino777Box} from \"./home-page-header-arena-tile.casino777.box\";\nimport {HomepageHeaderArenaTileCasino888Box} from \"./home-page-header-arena-tile.casino888.box\";\nimport {HomepageHeaderArenaTileWsopBox} from \"./home-page-header-arena-tile.wsop.box\";\n\nexport const HomepageHeaderArenaTileBox = styledByTheme(HomepageHeaderArenaTileDefaultBox)\n .forCasino888(HomepageHeaderArenaTileCasino888Box)\n .forSI(HomepageHeaderArenaTileSIBox)\n .forCasino777(HomepageHeaderArenaTileCasino777Box)\n .forWsop(HomepageHeaderArenaTileWsopBox)\n .apply();\n","import styled from \"styled-components\";\n\nexport const HomepageHeaderArenaNameDefaultBox = styled.div`\n position: relative;\n font-size: 1.4rem;\n text-transform: uppercase;\n text-align: center;\n letter-spacing: 1px;\n color: ${props => props.theme.colors.textLight};\n margin: 0 auto;\n width: fit-content;\n z-index: 1;\n padding-top: 1rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 0.5rem;\n font-size: 0.9rem;\n }\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaNameDefaultBox} from \"./home-page-header-arena-name.default.box\";\n\nexport const HomepageHeaderArenaNameSIBox = styled(HomepageHeaderArenaNameDefaultBox)`\n width: auto;\n color: ${({theme}) => theme.colors.brandPrimaryContrast};\n background-color: ${({theme}) => theme.colors.brandSecondaryContrast};\n border-bottom: 5px solid ${({theme}) => theme.colors.brandSecondaryLight};\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n ${({theme}) => theme.font.presets.secondary};\n font-size: 2.9rem;\n line-height: 1.2;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 2rem;\n }\n`;\n","import {HomepageHeaderArenaNameDefaultBox} from \"./home-page-header-arena-name.default.box\";\nimport {HomepageHeaderArenaNameSIBox} from \"./home-page-header-arena-name.si.box\";\nimport { styledByTheme } from \"../../../../../themes/architecture/styled-by-theme\";\n\nexport const HomepageHeaderArenaNameBox = styledByTheme(HomepageHeaderArenaNameDefaultBox)\n .forSI(HomepageHeaderArenaNameSIBox)\n .apply();\n","import styled from \"styled-components\";\n\nconst DefaultBox = styled.div<{headerArenasStyleIsMenu?: boolean;}>`\n position: absolute;\n top: ${({headerArenasStyleIsMenu}) => headerArenasStyleIsMenu ? \"0.2rem\" : 0};\n right: ${({headerArenasStyleIsMenu}) => headerArenasStyleIsMenu ? \"0.6rem\" : 0};\n padding: 0 0.5rem;\n background: ${({theme}) => theme.components.header.colors.indicatorBadge.backgroundInGridLayout.toString()};\n color: ${({theme}) => theme.colors.textLight.toString()};\n border-radius: 2rem;\n font-size: 0.9em;\n font-weight: 700;\n transform: translate(100%, -50%);\n`;\n\nexport const HomepageHeaderArenaBadgeDefaultBox = DefaultBox;\n","import styled from \"styled-components\";\nimport { HomepageHeaderArenaBadgeDefaultBox } from \"./home-page-header-arena-badge.default.box\";\nimport { baseColors} from '../../../../themes/definitions/si/base-colors';\n\nexport const HomepageHeaderArenaBadgeSIBox = styled(HomepageHeaderArenaBadgeDefaultBox)`\n font-size: 1.8rem;\n background-color: ${baseColors.base03Dark};\n padding: 0 0.7rem;\n box-shadow: 0 0 1px 1px ${props => props.theme.colors.background};\n border-radius: 0.5rem;\n transform: translate(50%, 10px);\n z-index: 1;\n`;\n","import styled from \"styled-components\";\nimport { HomepageHeaderArenaBadgeDefaultBox } from \"./home-page-header-arena-badge.default.box\";\n\nexport const HomepageHeaderArenaBadgeMrGreenBox = styled(HomepageHeaderArenaBadgeDefaultBox)`\n font-size: 1.2rem;\n top: ${({headerArenasStyleIsMenu}) => headerArenasStyleIsMenu ? \"-0.3rem\" : 0};\n color: ${({theme}) => theme.colors.textContrast};\n padding: 0.1rem 0.37rem;\n box-shadow: ${({theme}) => theme.components.header.colors.indicatorBadge.backgroundInGridLayout.toString()} 0px 0px 4px;\n min-width: 20px;\n`;\n","import { styledByTheme } from \"../../../../themes/architecture/styled-by-theme\";\nimport { HomepageHeaderArenaBadgeDefaultBox } from \"./home-page-header-arena-badge.default.box\";\nimport { HomepageHeaderArenaBadgeSIBox } from \"./home-page-header-arena-badge.si.box\";\nimport { HomepageHeaderArenaBadgeMrGreenBox } from \"./home-page-header-arena-badge.mrgreen.box\";\n\nexport const HomepageHeaderArenaBadgeBox = styledByTheme(HomepageHeaderArenaBadgeDefaultBox)\n .forSI(HomepageHeaderArenaBadgeSIBox)\n .forMrGreen(HomepageHeaderArenaBadgeMrGreenBox).apply();\n","import styled, {css} from \"styled-components\";\nimport {HeaderArenasStyle} from \"../../../themes/architecture/sections/theme-layout.interface\";\n\nexport const HomePageHeaderArenasContainerDefaultBox = styled.div<{headerArenasStyle: HeaderArenasStyle;}>`\n margin-bottom: 4rem;\n\n text-align: center;\n white-space: nowrap;\n\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n ${({headerArenasStyle}) => headerArenasStyle === HeaderArenasStyle.Menu ? css`\n background-color: ${({theme}) => theme.colors.background};\n padding: 1.8rem 0;\n ` : \"\"}\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n ${({headerArenasStyle}) => headerArenasStyle === HeaderArenasStyle.Menu ? css`\n margin-right: -4rem;\n margin-left: -4rem;\n padding: 2.2rem 0;\n ` : \"\"}\n }\n`;\n","import styled from \"styled-components\";\nimport {HomePageHeaderArenasContainerDefaultBox} from \"./home-page-header-arenas-container.default.box\";\n\nexport const HomePageHeaderArenasContainerCasino888Box = styled(HomePageHeaderArenasContainerDefaultBox)`\n margin-bottom: 1.5rem;\n @media ${({theme}) => theme.mediaQuery.lAndAbove} {\n padding-top: 2.8rem;\n margin-bottom: 2rem;\n }\n`;\n","import styled, {css} from \"styled-components\";\nimport {HomePageHeaderArenasContainerDefaultBox} from \"./home-page-header-arenas-container.default.box\";\nimport {HeaderArenasStyle} from \"../../../themes/architecture/sections/theme-layout.interface\";\n\nexport const HomePageHeaderArenasContainerMrGreenBox = styled(HomePageHeaderArenasContainerDefaultBox)`\n margin-bottom: 1.4rem;\n ${({headerArenasStyle, theme}) => headerArenasStyle === HeaderArenasStyle.Menu ? css`\n background-color: ${theme.colors.backgroundContrast};\n ` : \"\"}\n\n ${({headerArenasStyle}) => headerArenasStyle === HeaderArenasStyle.Menu ? css`\n padding: 1.5rem 0 1.4rem;\n ` : \"\"}\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n ${({headerArenasStyle}) => headerArenasStyle === HeaderArenasStyle.Menu ? css`\n padding: 2.2rem 0;\n ` : \"\"}\n }\n`;\n","import styled from \"styled-components\";\nimport {HomePageHeaderArenasContainerDefaultBox} from \"./home-page-header-arenas-container.default.box\";\n\nexport const HomePageHeaderArenasContainerCasino777Box = styled(HomePageHeaderArenasContainerDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.lAndAbove} {\n padding-top: 12px;\n }\n`;\n","import styled from \"styled-components\";\nimport {HomePageHeaderArenasContainerDefaultBox} from \"./home-page-header-arenas-container.default.box\";\n\nexport const HomePageHeaderArenasContainerWsopBox = styled(HomePageHeaderArenasContainerDefaultBox)`\n margin-bottom: 1.5rem;\n @media ${({theme}) => theme.mediaQuery.lAndAbove} {\n padding-top: 2.8rem;\n margin-bottom: 2rem;\n }\n`;\n","import {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\nimport {HomePageHeaderArenasContainerDefaultBox} from \"./home-page-header-arenas-container.default.box\";\nimport {HomePageHeaderArenasContainerCasino888Box} from \"./home-page-header-arenas-container.casino888.box\";\nimport {HomePageHeaderArenasContainerMrGreenBox} from \"./home-page-header-arenas-container.mrgreen.box\";\nimport {HomePageHeaderArenasContainerCasino777Box} from \"./home-page-header-arenas-container.casino777.box\";\nimport {HomePageHeaderArenasContainerWsopBox} from \"./home-page-header-arenas-container.wsop.box\";\n\nexport const HomePageHeaderArenasContainerBox = styledByTheme(HomePageHeaderArenasContainerDefaultBox)\n .forCasino888(HomePageHeaderArenasContainerCasino888Box)\n .forMrGreen(HomePageHeaderArenasContainerMrGreenBox)\n .forCasino777(HomePageHeaderArenasContainerCasino777Box)\n .forWsop(HomePageHeaderArenasContainerWsopBox)\n .apply();\n","import {HomepageHeaderArenaLinkDefaultBox} from \"./home-page-header-arena-link.default.box\";\n\nexport const HomepageHeaderArenaLinkBox = HomepageHeaderArenaLinkDefaultBox;\n","import styled from \"styled-components\";\n\nexport const HomepageHeaderArenaLinkDefaultBox = styled.a`\n position: relative;\n width: 100%;\n`;\n","import styled from \"styled-components\";\nimport {HeaderArenasStyle} from \"../../../../../themes/architecture/sections/theme-layout.interface\";\n\ninterface HomepageHeaderArenaSkeletonDefaultBoxProps {\n isLoading: boolean;\n tilesSize: HeaderArenasStyle.BigTiles | HeaderArenasStyle.SmallTiles;\n}\n\nexport const HomepageHeaderArenaSkeletonDefaultBox = styled.div`\n\n display: ${({isLoading}) => isLoading ? \"block\" : \"none\"};\n\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n\n &::before {\n position: absolute;\n content: \"\";\n top: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"4rem\" : \"2rem\"};\n left: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"2rem\" : \"1rem\"};\n right: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"2rem\" : \"1rem\"};\n bottom: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"3rem\" : \"1rem\"};\n background: radial-gradient(rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.1));\n border-radius: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"40%\" : \"16px\"};\n \n animation: LoadingAnimation linear 1s 5;\n }\n\n @keyframes LoadingAnimation {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaSkeletonDefaultBox} from \"./home-page-header-arena-skeleton.default.box\";\n\nexport const HomepageHeaderArenaSkeletonSIBox = styled(HomepageHeaderArenaSkeletonDefaultBox)`\n &::before {\n top: 0;\n left: 0;\n right: 0; \n bottom: 0;\n border-radius: 0;\n }\n`;","import styled from \"styled-components\";\nimport {HeaderArenasStyle} from \"../../../../../themes/architecture/sections/theme-layout.interface\";\nimport {HomepageHeaderArenaSkeletonDefaultBox} from \"./home-page-header-arena-skeleton.default.box\";\n\nexport const HomepageHeaderArenaSkeletonCasino888Box = styled(HomepageHeaderArenaSkeletonDefaultBox)`\n top: 50%;\n left: 50%;\n max-width: 219px;\n max-height: 186px;\n transform: translate(-50%, -50%);\n &::before {\n top: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"4rem\" : 0};\n left: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"2rem\" : 0};\n right: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"2rem\" : 0};\n bottom: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"3rem\" : 0};\n border-radius: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"40%\" : \"16px\"};\n }\n`;","import {HomepageHeaderArenaSkeletonDefaultBox} from \"./home-page-header-arena-skeleton.default.box\";\nimport {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\nimport {HomepageHeaderArenaSkeletonSIBox} from \"./home-page-header-arena-skeleton.si.box\";\nimport {HomepageHeaderArenaSkeletonCasino888Box} from \"./home-page-header-arena-skeleton.casino888.box\";\n\nexport const HomepageHeaderArenaSkeletonBox = styledByTheme(HomepageHeaderArenaSkeletonDefaultBox)\n .forCasino888(HomepageHeaderArenaSkeletonCasino888Box)\n .forSI(HomepageHeaderArenaSkeletonSIBox)\n .apply();\n","import styled from \"styled-components\";\n\nexport const HomePageHeaderArenaRatioImageWrapperDefaultBox = styled.div`\n width: 100%;\n`;","import styled from \"styled-components\";\nimport {HomePageHeaderArenaRatioImageWrapperDefaultBox} from \"./home-page-header-arena-ratio-image-wrapper.default.box\";\n\nexport const HomePageHeaderArenaRatioImageWrapperCasino888Box = styled(HomePageHeaderArenaRatioImageWrapperDefaultBox)`\n max-width: 219px;\n margin: 0 auto;\n`;","import {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\nimport {HomePageHeaderArenaRatioImageWrapperCasino888Box} from \"./home-page-header-arena-ratio-image-wrapper.caisno888.box\";\nimport {HomePageHeaderArenaRatioImageWrapperDefaultBox} from \"./home-page-header-arena-ratio-image-wrapper.default.box\";\n\nexport const HomePageHeaderArenaRatioImageWrapperBox = styledByTheme(HomePageHeaderArenaRatioImageWrapperDefaultBox)\n .forCasino888(HomePageHeaderArenaRatioImageWrapperCasino888Box)\n .apply()","import React from \"react\";\nimport {Image, ImageProps} from \"../raw-components/image/image\";\nimport {OrbitComponentWithState} from \"../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {AspectRatioContainerComponent} from '../raw-components/aspect-ratio-container/aspect-ratio-container.component';\nimport {HomepageHeaderArenaSkeletonBox} from './boxes/tiles/skeleton/home-page-header-arena-skeleton.box';\nimport { ByThemeRegistry } from \"../../themes/architecture/by-theme-registry\";\nimport {HeaderArenasStyle} from \"../../themes/architecture/sections/theme-layout.interface\";\nimport {HomePageHeaderArenaRatioImageWrapperBox} from \"./boxes/tiles/ratio-image-wrapper/home-page-header-arena-ratio-image-wrapper.box\";\n\ninterface HomePageHeaderArenaTileComponentState {\n isLoading: boolean;\n}\n\nexport class HomePageHeaderArenaTileComponent extends OrbitComponentWithState {\n private aspectRatioSizes: ByThemeRegistry<{width: number; height: number;}> = new ByThemeRegistry({width: 295, height: 275});\n\n constructor(props: ImageProps) {\n super(props);\n\n this.state = {\n isLoading: true\n };\n this.aspectRatioSizes.forCasino888({width: 219, height: 186});\n this.aspectRatioSizes.forWsop({width: 219, height: 186});\n this.aspectRatioSizes.forSI({width: 252, height: 150});\n this.aspectRatioSizes.forCasino777({width: 260, height: 244});\n }\n\n private _handleDoneLoading() {\n this.setState({ isLoading: false });\n }\n\n render() {\n return (\n \n \n \n {/* I have added width:100% and height:100% because lighthouse reports that images that has no width and height set and might affect the cls */}\n {/* But I don't think it affects the layout of the page. */}\n this._handleDoneLoading()} style={{...this.props.style, width: \"100%\", height: \"100%\"}}/>\n \n \n );\n }\n}","import React from 'react';\nimport {Link} from '../raw-components/link/link';\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {HomePageHeaderArena} from '../../services/configurations/config-data-sections/home-page.configuration';\nimport {HomepageHeaderArenaMenuItemBox} from \"./boxes/menu/menu-item/home-page-header-arena-menu-item.box\";\nimport {HomepageHeaderArenaMenuItemIconBox} from \"./boxes/menu/icon-box/home-page-header-arena-menu-item-icon.box\";\nimport {HomepageHeaderArenaMenuItemNameBox} from \"./boxes/menu/menu-item-name/home-page-header-arena-menu-item-name.box\";\nimport {HomepageHeaderArenaTileBox} from './boxes/tiles/tile/home-page-header-arena-tile.box';\nimport {HomepageHeaderArenaNameBox} from './boxes/tiles/name/home-page-header-arena-name.box';\nimport {HomepageHeaderArenaBadgeBox} from './boxes/home-page-header-arena-badge/home-page-header-arena-badge.box';\nimport {HomePageHeaderArenasContainerBox} from './boxes/home-page-header-arenas-container.box';\nimport {HomepageHeaderArenaLinkBox} from './boxes/home-page-header-arena-link/home-page-header-arena-link.box';\nimport {HomePageHeaderArenaTileComponent} from \"./home-page-header-arena-tile.component\";\nimport {SeoConfiguration} from '../../services/configurations/config-data-sections/seo.configuration';\nimport {ISendElasticEventOptions} from \"../../services/analytics/analytics.service.interface\";\n\nconst NEW_GAMES_TITLE = \"NEW_GAMES\";\n\nexport const HomePageHeaderArenasComponent = observer(class HomePageHeaderArenasComponent extends OrbitComponent {\n private menuButtonIconMap = new Map([\n [\"LIVE_CASINO\", this.services.theme.currentTheme.icons.sideMenuLiveCasino],\n [\"SLOTS\", this.services.theme.currentTheme.icons.sideMenuSlots],\n [\"NEW_GAMES\", this.services.theme.currentTheme.icons.sideMenuNewGames],\n [\"JACKPOTS\", this.services.theme.currentTheme.icons.sideMenuJackpots],\n [\"EXCLUSIVE\", this.services.theme.currentTheme.icons.sideMenuExclusive888],\n [\"SCRATCH_CARDS\", this.services.theme.currentTheme.icons.sideMenuScratchCards],\n [\"CASINO_GAMES\", this.services.theme.currentTheme.icons.sideMenuCasinoGames]\n ]);\n private _getButtonIcon(label: string) {\n const iconKey = label.toUpperCase().trim().replace(/(-|\\s)/g, \"_\");\n return this.menuButtonIconMap.has(iconKey) ? this.menuButtonIconMap.get(iconKey)! : this.services.theme.currentTheme.icons.sideMenuExclusive888;\n }\n\n private _getSeo(prop: keyof SeoConfiguration[\"categories\"][\"images\"], placeholder: string, dynamic: string) {\n\n let seoValue = '';\n let seoConfig = this.services.configuration.data.seo;\n\n if (seoConfig && seoConfig.categories && seoConfig.categories.images && seoConfig.categories.images[prop]) {\n seoValue = seoConfig.categories.images[prop];\n }\n\n return this.services.translation.translate(seoValue, {\n [placeholder]: this.services.translation.translate(dynamic)\n });\n }\n\n private _handleArenaAction = (action: string, index: number) => {\n try {\n const jsonAction = JSON.parse(action);\n\n if (jsonAction.action === 'game-real') {\n\n const gameInfo = this.services.games.gamesMap[jsonAction.id];\n\n gameInfo.open({\n isRealMode: true,\n gameIndex: index\n });\n }\n\n } catch (error) {\n this.services.logger.error(`Error in HomePageHeaderArenasComponent '_handleArenaAction', error: ${error}, value:${action}`)\n }\n };\n\n private _handleArenaRedirect = (link: string) => {\n /**\n * @desc added because of parallel actions [navigation + spinner]\n * F TO DO - This setTimeout was added by regev on 09/04/2018 in this commit 962fbdea53e3bc8828a215ed035fc0e9243b7a50. I should check if this really solves a performance issue.\n * we should keep this delay so that on mobile the user has time to see the image changing sizes upon touching, as a form of feedback\n */\n setTimeout(() => {\n this.services.location.push(link); // navigation is done this way, so we can have the trailing slash\n }, 500);\n };\n\n private _handleArenaClick(event: any, arena: HomePageHeaderArena, index: number): void {\n\n event.preventDefault();\n\n let data: ISendElasticEventOptions = {\n eventType: \"Orbit_AI_Feature\",\n category: 'Game Grid',\n action: 'Home',\n label: `${arena.title}_${index}`\n }\n\n this.services.analytics.sendElasticInfoEvent(data, true);\n\n if (arena.action) {\n this._handleArenaAction(arena.action, index);\n } else if (arena.link) {\n this._handleArenaRedirect(arena.link);\n }\n }\n\n private _renderOneHeaderArena(arena: HomePageHeaderArena, index: number, totalItemsCount: number) {\n const hasNewGamesIndication = arena.title === NEW_GAMES_TITLE && this.services.homepage.newAddedGames > 0;\n const newGamesIndication = hasNewGamesIndication ?\n \n {this.services.homepage.newAddedGames > 10 ? '10+' : this.services.homepage.newAddedGames}\n \n : null;\n\n if (this.services.homepage.headerArenasStyleIsMenu) {\n const Icon = this._getButtonIcon(arena.title);\n return \n this._handleArenaClick(event, arena, index)}\n >\n \n \n {newGamesIndication}\n \n \n {this.services.translation.translate(arena.title)}\n \n \n \n }\n return (\n this._handleArenaClick(event, arena, index)}\n useSmallHeaderArenas={this.services.homepage.headerArenasStyleIsSmallTiles}\n totalItemsCount={totalItemsCount}\n >\n {/*We need this href only for SEO*/}\n \n \n \n {this.services.translation.translate(arena.title)}\n {newGamesIndication}\n \n \n \n );\n }\n\n\n render() {\n\n const headerArenas = this.services.homepage.headerArenas;\n\n if (headerArenas.length === 0) {\n return null;\n }\n return (\n \n {headerArenas.map((arena, index) => this._renderOneHeaderArena(arena, index, headerArenas.length))}\n \n );\n }\n});\n","import styled, {css} from \"styled-components\";\nimport { IBannerContainerBoxProps } from \"../../cms-banner/banner-container/banner-container.default.box\";\n\nexport const HomepageTopBannerBackgroundBox = styled.div`\n width: 100%;\n position: absolute;\n background-image: url(\"${props => props.theme.images.homepageTopBannerPlaceholder.toString()}\");\n ${props => props.minHeight && css`\n min-height: calc(${props.minHeight} + 1px);\n `};\n`;\n","import styled from \"styled-components\";\n\nexport const HomepageTopBannerDividerBox = styled.div`\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n box-sizing: border-box;\n display: block;\n width: calc(100% - 14px);\n background-color: ${props => props.theme.colors.boxBorderLight};\n border-top: 3px solid ${props => props.theme.colors.boxBorder};\n margin: 4px 7px 7px;\n }\n`;\n","import styled, { css } from \"styled-components\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const LinkToOfferBoxBase = styled.div<{shouldAnimate: boolean, hasCircle: boolean, isHybridEmbedded: boolean, isBottomNavBarEnabled?: boolean}>`\n background-size: contain;\n height: 50px;\n width: 50px;\n position: fixed;\n bottom: ${props => props.isHybridEmbedded || props.isBottomNavBarEnabled? 'calc(env(safe-area-inset-bottom) + 75px)' : '50px'};\n right: 55px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 3;\n ${CssRule.For.mobile.build()} & {\n right: 40px;\n }\n ${props => props.hasCircle? css`\n background-repeat: no-repeat;\n background-color: ${props => props.theme.colors.brandPrimary};\n border-radius: 50%;\n ` : '' }\n`;","import styled, {css, keyframes, DefaultTheme} from \"styled-components\";\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\nimport {LinkToOfferBoxBase} from \"../link-to-offer-base/link-to-offer-box-base\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\n\n\nconst linkToOfferIconKeyframes = (props: {theme: DefaultTheme}) => keyframes`\n 0% {\n transform: scale(0.9);\n box-shadow: 0 0 0 0 ${hexToRgba(props.theme.colors.brandPrimary, 0.5)};\n }\n 60% {\n transform: scale(1);\n }\n 80% {\n transform: scale(1);\n box-shadow: 0 0 0 35px ${hexToRgba(props.theme.colors.brandPrimary, 0)};\n }\n 100% {\n transform: scale(0.9);\n box-shadow: 0 0 0 0 ${hexToRgba(props.theme.colors.brandPrimary, 0)};\n }\n`;\n\nexport const LinkToOfferIconDefaultBox = styled(LinkToOfferBoxBase)`\n color: ${({theme}) => theme.colors.textDark};\n ${props => props.shouldAnimate ? css`animation: ${linkToOfferIconKeyframes} 1.2s infinite` : ''};\n /* temporary solution for disabling button on mobile landscape - remove once banners will support landscape mode for phones */\n ${CssRule.For.mobile.landscape.not.tablet.build()} & {\n visibility: hidden;\n }\n`;\n","import {LinkToOfferIconDefaultBox} from \"./link-to-offer-icon.default.box\";\n\nexport const LinkToOfferIconBox = LinkToOfferIconDefaultBox;\n","import {LinkToOfferDialogCloseDefaultBox} from \"./link-to-offer-dialog-close.default.box\";\n\nexport const LinkToOfferDialogCloseBox = LinkToOfferDialogCloseDefaultBox;\n","import styled from \"styled-components\";\nimport {LinkToOfferBoxBase} from \"../link-to-offer-base/link-to-offer-box-base\";\n\nexport const LinkToOfferDialogCloseDefaultBox = styled(LinkToOfferBoxBase)<{zIndex?: number}>`\n color: ${({theme}) => theme.colors.textDark};\n z-index: ${props => props.zIndex ?? 201};\n`;\n","import React from 'react';\nimport { OrbitComponent } from '../base-components/orbit-component/orbit-component';\nimport {observer} from \"mobx-react\";\nimport {LinkToOfferIconBox} from \"./boxes/link-to-offer-icon/link-to-offer-icon.box\";\nimport {LinkToOfferDialogCloseBox} from \"./boxes/link-to-offer-dialog-close/link-to-offer-dialog-close.box\";\nimport {LinkToOfferConfiguration} from \"../../services/configurations/config-data-sections/link-to-offer.configuration\";\nimport {IOffer, IShowOfferOptions} from '../../services/player-offerings/player-offerings.service.interface';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\nexport interface LinkToOfferComponentProps extends ComponentServicesPick<'bottomNavigationBar'> {\n linkToOfferConfig: LinkToOfferConfiguration;\n}\n\n\nconst ComponentBody = observer(\n class LinkToOfferComponent extends OrbitComponent {\n\n componentDidMount() {\n super.componentDidMount();\n this.services.playerOfferings.setWelcomeOfferConfig(this.props.linkToOfferConfig?.welcomeBonus ?? null);\n }\n\n render() {\n if (this.services.playerOfferings.hasOpenedPopup) {\n let CloseIconComponent = this.services.theme.currentTheme.icons.linkToOfferCloseIcon;\n\n return (\n {this._onCloseDialog()}}\n shouldAnimate={false}\n hasCircle={true}\n zIndex={this.services.playerOfferings.isHighPriorityOffer ? this.services.dialog.getMaxCGPOverlayZIndex() + 2: null}\n isHybridEmbedded={this.services.device.hybrid.isEmbedded}\n >\n \n \n );\n }\n\n const currentOffer = this.services.playerOfferings.currentLinkToOffer;\n if(!currentOffer) {\n return null;\n }\n\n return (\n {this._onLinkToOfferClicked(currentOffer)}}\n shouldAnimate={currentOffer.shouldUseLinkToOfferAnimation()}\n hasCircle={currentOffer.shouldUseLinkToOfferAnimation()}\n isHybridEmbedded={this.services.device.hybrid.isEmbedded}\n isBottomNavBarEnabled={this.props.bottomNavigationBar.isBottomNavigationEnabled}\n >\n { currentOffer.render() }\n \n );\n }\n\n\n private _onLinkToOfferClicked(offer: IOffer): void {\n\n this.services.analytics.sendOrbitMarketingEvent(offer.analyticsCategory, 'Open_Floating_Button', this.services.routing.currentRoute.data.arenaType);\n\n const options: IShowOfferOptions = {\n onPopupClosed: () => {\n this.services.analytics.sendOrbitMarketingEvent(offer.analyticsCategory, 'Close_Floating_Button', this.services.routing.currentRoute.data.arenaType);\n }\n };\n this.services.playerOfferings.showOfferPopup(offer, options);\n }\n\n private _onCloseDialog = () => {\n if (this.services.playerOfferings.hasOpenedPopup) {\n this.services.playerOfferings.closeCurrentPopup();\n }\n };\n }\n);\n\nexport const LinkToOfferComponent = withServices(ComponentBody, ['bottomNavigationBar']);\n\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {CmsBannerComponent} from '../cms-banner/cms-banner.component';\nimport {DailyDealComponent} from \"../daily-deal/daily-deal.component\";\nimport {RoutedComponent} from '../base-components/routed-component/routed.component';\nimport {LayoutWrapperBox} from \"../../basic-components/layout-wrapper/layout-wrapper.box\";\nimport {MOVE_TOP} from \"../../themes/css-global-classes\";\nimport classNames from \"classnames\";\nimport {HomePageHeaderArenasComponent} from \"../home-page-header-arenas/home-page-header-arenas.component\";\nimport {HomepageTopBannerBackgroundBox} from \"./boxes/home-page-top-banner-background.box\";\nimport {HomepageTopBannerDividerBox} from './boxes/home-page-top-banner-divider-line';\nimport {CyClass} from '../../../common/cy-classes';\nimport {LinkToOfferComponent} from \"../link-to-offer/link-to-offer.component\";\nimport {ArenaGamesListsComponent} from \"../arena-games-lists/arena-games-lists.component\";\nimport {HOME_PAGE_ARENA} from \"../../services/arenas/arena-consts\";\nimport {FreeToPlayAnimatedIconComponent} from \"../free-to-play-animated-icon/free-to-play-animated-icon.component\";\nimport {BannerComponent} from \"../banner/banner.component\";\n\nexport const HomePageComponent = observer(class HomePageComponent extends RoutedComponent<{}> {\n\n private _renderTopBanner() {\n const topBannerProps = this.services.homepage.getTopBannerProps();\n\n return (\n <>\n \n \n {this.services.homepage.headerArenasStyleIsSmallTiles && !this.services.homepage.useAdminBanner? : null}\n \n );\n }\n\n private _renderHomePageArenaHeaders() {\n if(this.services.device.hybrid.isEmbedded) {\n return null;\n }\n\n return ;\n }\n\n private _renderSeoBanner() {\n if(this.services.device.hybrid.isEmbedded) {\n return null;\n }\n let bannerConfig = this.services.configuration.data.homePage.seoSection;\n if(!bannerConfig.display) {\n return null;\n }\n return (\n \n );\n }\n\n private _renderLinkToOffer() {\n return (\n <>\n \n \n \n );\n }\n\n render() {\n const className = classNames('cy-layout-wrapper-homepage', {\n [MOVE_TOP]: this.services.homepage.headerArenasStyleIsBigTiles\n });\n\n return (\n <>\n {this._renderTopBanner()}\n \n {this._renderHomePageArenaHeaders()}\n \n \n \n {this._renderSeoBanner()}\n {this._renderLinkToOffer()}\n \n );\n }\n});","import {GameInfo} from \"../../games/game-info\";\n\nexport enum ApplyGameFilterResult {\n IncludeGame,\n ExcludeGame,\n NotApplicable\n}\n\nexport interface IGameFilterEvaluator {\n applyFilter(gameInfo: GameInfo, selectedFiltersIDs?: string[]): ApplyGameFilterResult;\n}","import {ApplyGameFilterResult, IGameFilterEvaluator} from \"./game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../games/game-info\";\n\nclass OrGameFiltersEvaluator implements IGameFilterEvaluator {\n constructor(...evaluators: IGameFilterEvaluator[]) {\n this._evaluators = evaluators;\n }\n\n private readonly _evaluators: IGameFilterEvaluator[];\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n let result: ApplyGameFilterResult = ApplyGameFilterResult.NotApplicable;\n for(let evaluator of this._evaluators) {\n const r = evaluator.applyFilter(gameInfo);\n if(r === ApplyGameFilterResult.IncludeGame) {\n return r;\n } else if(r !== ApplyGameFilterResult.NotApplicable) {\n result = r;\n }\n }\n return result;\n }\n}\n\nexport function OR(...evaluators: IGameFilterEvaluator[]): OrGameFiltersEvaluator {\n return new OrGameFiltersEvaluator(...evaluators);\n}","import {ApplyGameFilterResult, IGameFilterEvaluator} from \"./game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../games/game-info\";\n\nexport class AndGameFiltersEvaluator implements IGameFilterEvaluator {\n constructor(...evaluators: IGameFilterEvaluator[]) {\n this._evaluators = evaluators;\n }\n\n private readonly _evaluators: IGameFilterEvaluator[];\n\n applyFilter(gameInfo: GameInfo, filterIDS?: string[]): ApplyGameFilterResult {\n let result = ApplyGameFilterResult.NotApplicable;\n for(let evaluator of this._evaluators) {\n const r = evaluator.applyFilter(gameInfo, filterIDS);\n if(r === ApplyGameFilterResult.ExcludeGame) {\n return r;\n } else if(r !== ApplyGameFilterResult.NotApplicable) {\n result = r;\n }\n }\n\n return result;\n }\n}\n\nexport function AND(...evaluators: IGameFilterEvaluator[]): IGameFilterEvaluator {\n return new AndGameFiltersEvaluator(...evaluators);\n}","import {CategoryDefinitionId, IFilterCategoryDefinition} from \"./filter-category-definition.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {ApplyGameFilterResult, IGameFilterEvaluator} from \"../evaluators/game-filter-evaluator.interface\";\nimport {OR} from \"../evaluators/or-game-filters-evaluator\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {AND} from \"../evaluators/and-game-filters-evaluator\";\n\nexport abstract class FilterCategoryDefinitionBase implements IFilterCategoryDefinition {\n constructor(protected readonly services: IServiceFactoryExtended) {\n this.availableFilters = this._loadAvailableFilters();\n }\n\n abstract get id(): CategoryDefinitionId;\n abstract get title(): string;\n protected abstract _loadAvailableFilters(): IGameFilterDefinition[];\n\n readonly availableFilters: IGameFilterDefinition[];\n\n get hasItsOwnFiltersOrder(): boolean {\n return false;\n }\n\n protected _getAppliedSubFiltersForFilter(filter: IGameFilterDefinition, appliedSubFilters: IGameFilterDefinition[]): IGameFilterDefinition[] {\n if (filter.subFilters.length === 0) {\n return [];\n }\n\n const result: IGameFilterDefinition[] = [];\n\n for (let appliedSubFilter of appliedSubFilters) {\n const subFilter = filter.subFilters.find(sf => sf.id === appliedSubFilter.id);\n if (subFilter) {\n result.push(subFilter);\n }\n }\n\n return result;\n\n }\n\n applyFilters(gameInfo: GameInfo, appliedFilters: IGameFilterDefinition[], appliedSubFilters: IGameFilterDefinition[]): ApplyGameFilterResult {\n\n const filterEvaluators: IGameFilterEvaluator[] = [];\n\n for (let filter of appliedFilters) {\n const appliedSubFiltersForCurrentFilter = this._getAppliedSubFiltersForFilter(filter, appliedSubFilters);\n if (appliedSubFiltersForCurrentFilter.length > 0) {\n filterEvaluators.push(AND(filter, OR(...appliedSubFiltersForCurrentFilter)));\n } else {\n filterEvaluators.push(filter)\n }\n }\n\n return OR(...filterEvaluators).applyFilter(gameInfo);\n }\n\n get isMultiSelect(): boolean {\n return true;\n }\n\n getFiltersForGame(gameInfo: GameInfo): string[] {\n const result: string[] = [];\n this.availableFilters.forEach(filter => {\n filter.getFiltersForGame(gameInfo).forEach(filterId => {\n result.push(filterId);\n })\n });\n\n return result;\n }\n}","export enum GameThemeId {\n Adventure = 1,\n AncientCivilization = 2,\n Wildlife = 3,\n ClassicStyle = 4,\n Asian = 5,\n TableGames = 7,\n MoviesAndMusic = 8,\n Fruit = 12,\n MoneyAndLeisure = 15,\n ComicsAndCartoons = 16,\n Irish = 19,\n Arcade = 25,\n DiamondsAndGems = 26,\n FantasyAndFolklore = 28,\n Seasonal = 29,\n Egyptian = 30,\n FarmAndPets = 35,\n Sports = 47,\n LiveCasino = 54,\n Arabic = 58,\n GreekMythology = 63,\n NA = 64,\n SpaceAndSciFi = 72,\n ScratchCards = 76,\n Fish = 77,\n Mexican = 82,\n Xmas = 93,\n Bingo = 94,\n ClassicStyleModernized = 95,\n AztecIncaMayan = 96,\n Crime = 97,\n WildWest = 98,\n CandyAndSweets = 99,\n GoldMining = 100,\n VikingsAndNordicMythology = 101,\n }","import {IGameFilterDefinition} from \"./game-filter-definition.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../evaluators/game-filter-evaluator.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nexport abstract class GameFilterDefinitionBase implements IGameFilterDefinition {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n abstract get id(): string;\n abstract get text(): string;\n abstract applyFilter(gameInfo: GameInfo): ApplyGameFilterResult;\n get subFilters(): IGameFilterDefinition[] {\n return [];\n }\n\n getFiltersForGame(gameInfo: GameInfo): string[] {\n if (this.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame) {\n return [this.id];\n }\n else {\n return [];\n }\n }\n}","import {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\n\nexport class HighVolatilityFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return 'high-volatility';\n }\n\n get text(): string {\n return this.services.translation.translate('HIGH_VOLATILITY');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(gameInfo.hasHighVolatility) {\n return ApplyGameFilterResult.IncludeGame;\n }\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\n\nexport class LowVolatilityFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return 'low-volatility';\n }\n\n get text(): string {\n return this.services.translation.translate('LOW_VOLATILITY');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(gameInfo.hasLowVolatility) {\n return ApplyGameFilterResult.IncludeGame;\n }\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\n\nexport class MediumVolatilityFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return 'medium-volatility';\n }\n\n get text(): string {\n return this.services.translation.translate('MEDIUM_VOLATILITY');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if (gameInfo.hasMediumVolatility) {\n return ApplyGameFilterResult.IncludeGame;\n }\n \n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {HighVolatilityFilterDefinition} from \"../filters-definitions/volatility/high-volatility.filter-definition\";\nimport {LowVolatilityFilterDefinition} from \"../filters-definitions/volatility/low-volatility.filter-definition\";\nimport {MediumVolatilityFilterDefinition} from \"../filters-definitions/volatility/medium-volatility.filter-definition\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\n\nexport class VolatilityFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n\n public get hasItsOwnFiltersOrder() {\n return true;\n }\n\n get id(): CategoryDefinitionId {\n return 'volatility';\n }\n\n get title(): string{\n return this.services.translation.translate('VOLATILITY');\n }\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n return [\n new HighVolatilityFilterDefinition(this.services),\n new MediumVolatilityFilterDefinition(this.services),\n new LowVolatilityFilterDefinition(this.services)\n ];\n }\n\n get isMultiSelect(): boolean {\n return false;\n }\n\n}","import {GameFilterDefinitionBase} from \"./game-filter-definition-base\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../evaluators/game-filter-evaluator.interface\";\n\nexport abstract class GameFeatureFilterDefinitionBase extends GameFilterDefinitionBase {\n\n abstract get id(): string;\n abstract get text(): string;\n protected abstract _shouldIncludeGame(gameInfo: GameInfo): boolean;\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(this._shouldIncludeGame(gameInfo)) {\n return ApplyGameFilterResult.IncludeGame;\n }\n \n return ApplyGameFilterResult.ExcludeGame;\n }\n\n\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class OneToTwentyFiveFilterDefinition extends GameFeatureFilterDefinitionBase {\n\n get id(): string {\n return \"one-to-twenty-five\";\n }\n\n get text(): string {\n return this.services.translation.translate('1-25_LINES');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return Check.isNumber(gameInfo.numberOfLines) && gameInfo.numberOfLines >= 1 && gameInfo.numberOfLines <= 24;\n }\n}","import {GameInfo} from \"../../../games/game-info\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\n\nexport class TwentyFivePlusFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"twenty-five-plus\";\n }\n\n get text(): string {\n return this.services.translation.translate('25_PLUS_LINES');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return Check.isNumber(gameInfo.numberOfLines) && gameInfo.numberOfLines >= 25;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class NewGameFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"new\";\n }\n\n get text(): string {\n return this.services.translation.translate('NEW');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.isNewGame;\n }\n\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class LowStakeFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"lowStakes\";\n }\n\n get text(): string {\n return this.services.translation.translate('LOW_STAKES');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasLowStakes;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HighStakeFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"highStakes\";\n }\n\n get text(): string {\n return this.services.translation.translate('HIGH_STAKES');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasHighStakes;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class BonusGameFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"bonus\";\n }\n\n get text(): string {\n return this.services.translation.translate('BONUS');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasBonusGames;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class FreeSpinsFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"freeSpins\";\n }\n\n get text(): string {\n return this.services.translation.translate('FREE_SPINS');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasFreeSpins;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasSideBetsFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"side-bets\";\n }\n\n get text(): string {\n return this.services.translation.translate('SIDE_BETS');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasSideBets;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class IsMultiHandFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"multi-hand\";\n }\n\n get text(): string {\n return this.services.translation.translate('MULTIHAND');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.isMultiHand;\n }\n}","import {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {\n OneToTwentyFiveFilterDefinition\n} from \"../filters-definitions/game-features/one-to-twenty-five.filter-definition\";\nimport {\n TwentyFivePlusFilterDefinition\n} from \"../filters-definitions/game-features/twenty-five-plus.filter-definition\";\nimport {NewGameFilterDefinition} from \"../filters-definitions/game-features/new-game.filter-definition\";\nimport {LowStakeFilterDefinition} from \"../filters-definitions/game-features/low-stake.filter-definition\";\nimport {HighStakeFilterDefinition} from \"../filters-definitions/game-features/high-stake.filter-definition\";\nimport {BonusGameFilterDefinition} from \"../filters-definitions/game-features/bonus-game.filter-definition\";\nimport {FreeSpinsFilterDefinition} from \"../filters-definitions/game-features/free-spins.filter-definition\";\nimport {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\nimport {HasSideBetsFilterDefinition} from \"../filters-definitions/game-features/has-side-bets.filter-definition\";\nimport {IsMultiHandFilterDefinition} from \"../filters-definitions/game-features/is-multi-hand.filter-definition\";\n\nexport class GameFeaturesFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n get title(): string {\n return this.services.translation.translate('GAME_FEATURES');\n }\n\n get id(): CategoryDefinitionId {\n return 'features';\n }\n\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n return [\n new OneToTwentyFiveFilterDefinition(this.services),\n new TwentyFivePlusFilterDefinition(this.services),\n new NewGameFilterDefinition(this.services),\n new LowStakeFilterDefinition(this.services),\n new HighStakeFilterDefinition(this.services),\n new BonusGameFilterDefinition(this.services),\n new FreeSpinsFilterDefinition(this.services),\n new HasSideBetsFilterDefinition(this.services),\n new IsMultiHandFilterDefinition(this.services),\n ];\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasDailyJackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-daily-jackpot\";\n }\n\n get text(): string {\n return this.services.translation.translate('THE_DAILY_JACKPOT');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasDailyJackpot;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasTwilightJackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-twilight-jackpot\";\n }\n\n get text(): string {\n return this.services.translation.translate('TWILIGHT_JACKPOT');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasTwilightJackpot;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasCaptain8JackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-captain8-jackpot\";\n }\n\n get text(): string {\n return 'Captain8 Jackpot';\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasCaptain8tJackpot;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasRedTigerJackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-red-tiger-jackpot\";\n }\n\n get text(): string {\n return 'Red Tiger Jackpot';\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasRedTigerJackpot;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {IGameFilterDefinition} from \"../game-filter-definition.interface\";\nimport {HasDailyJackpotFilterDefinition} from \"./has-dailight-jackpot.filter-definition\";\nimport {HasTwilightJackpotFilterDefinition} from \"./has-twilight-jackpot.filter-definition\";\nimport {HasCaptain8JackpotFilterDefinition} from \"./has-captain8-jackpot.filter-definition\";\nimport {HasRedTigerJackpotFilterDefinition} from \"./has-red-tiger-jackpot.filter-definition\";\n\nexport class HasJackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-jackpot\";\n }\n\n get text(): string {\n return this.services.translation.translate('JACKPOT');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasJackpot;\n }\n\n get subFilters(): IGameFilterDefinition[] {\n return [\n new HasDailyJackpotFilterDefinition(this.services),\n new HasTwilightJackpotFilterDefinition(this.services),\n new HasCaptain8JackpotFilterDefinition(this.services),\n new HasRedTigerJackpotFilterDefinition(this.services)\n ]\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasNoJackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-no-jackpot\";\n }\n\n get text(): string {\n return this.services.translation.translate('NO_JACKPOT');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return !gameInfo.hasJackpot;\n }\n}","import {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {HasJackpotFilterDefinition} from \"../filters-definitions/jackpot/has-jackpot.filter-definition\";\nimport {HasNoJackpotFilterDefinition} from \"../filters-definitions/jackpot/has-no-jackpot.filter-definition\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\n\nexport class HasJackpotFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n\n get id(): CategoryDefinitionId {\n return 'hasJackpot';\n }\n\n get title(): string{\n return this.services.translation.translate('JACKPOTS');\n }\n\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n return [\n new HasJackpotFilterDefinition(this.services),\n new HasNoJackpotFilterDefinition(this.services)\n ];\n }\n\n get isMultiSelect(): boolean {\n return false;\n }\n}\n","import {IGameFilterDefinition} from '../game-filter-definition.interface';\nimport {GameInfo} from '../../../games/game-info';\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameVendorDefinition} from '../../../game-vendor/game-vendor-definition.ts/game-vendor-definition';\n\nexport class VendorFilterDefinition implements IGameFilterDefinition {\n constructor(public readonly id: string,\n public readonly vendors: GameVendorDefinition[],\n private readonly _text?: string) {\n\n }\n\n getFiltersForGame(gameInfo: GameInfo): string[] {\n if (this.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame) {\n return [this.id];\n }\n else {\n return [];\n }\n }\n\n get text(): string {\n if (this._text) {\n return this._text;\n }\n return this.vendors[0].name;\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if (this.vendors?.some(vendor => vendor?.id === gameInfo.vendorId)) {\n return ApplyGameFilterResult.IncludeGame;\n }\n return ApplyGameFilterResult.ExcludeGame;\n }\n\n readonly subFilters: IGameFilterDefinition[] = [];\n}\n","import {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {VendorFilterDefinition} from \"../filters-definitions/vendor/vendor.filter-definition\";\nimport {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {GameVendorId} from \"../../game-vendor/game-vendor-id.enum\";\n\nexport class GameVendorFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n\n get id(): CategoryDefinitionId {\n return 'vendors';\n }\n\n get title(): string {\n return this.services.translation.translate('GAME_STUDIOS');\n }\n\n get hasItsOwnFiltersOrder(): boolean {\n return !Check.isEmpty(this.services.configuration.data.generalSettings.filters?.advancedFilters?.preferredVendorFilters);\n }\n\n public getAllPreferredVendorsFilters(): VendorFilterDefinition[] {\n return [\n new VendorFilterDefinition(\"vendor_888\", [this.services.gamesVendor.getVendor(GameVendorId.V_888)], this.services.translation.translate(\"BRAND_EXCLUSIVE_FILTER\", {brandName: this.services.configuration.data.generalSettings.filters?.exclusiveFilterBrandName ?? \"888\"})),\n new VendorFilterDefinition(\"vendor_ags\", [this.services.gamesVendor.getVendor(GameVendorId.V_AGS)]),\n new VendorFilterDefinition(\"vendor_amatic\", [this.services.gamesVendor.getVendor(GameVendorId.V_Amatic)]),\n new VendorFilterDefinition(\"vendor_authentic\", [this.services.gamesVendor.getVendor(GameVendorId.V_Authentic)]),\n new VendorFilterDefinition(\"vendor_ainsworth\", [this.services.gamesVendor.getVendor(GameVendorId.V_Ainsworth)]),\n new VendorFilterDefinition(\"vendor_blueprint\", [this.services.gamesVendor.getVendor(GameVendorId.V_Blueprint)]),\n new VendorFilterDefinition(\"vendor_darwin\", [this.services.gamesVendor.getVendor(GameVendorId.V_Darwin)]),\n new VendorFilterDefinition(\"vendor_egt\", [this.services.gamesVendor.getVendor(GameVendorId.V_EGT)]),\n new VendorFilterDefinition(\"vendor_elk\", [this.services.gamesVendor.getVendor(GameVendorId.V_Elk)]),\n new VendorFilterDefinition(\"vendor_evolution\", [this.services.gamesVendor.getVendor(GameVendorId.V_Evolution)]),\n new VendorFilterDefinition(\"vendor_eyecon\", [this.services.gamesVendor.getVendor(GameVendorId.V_Eyecon)]),\n new VendorFilterDefinition(\"vendor_gamesglobal\", [this.services.gamesVendor.getVendor(GameVendorId.V_GamesGlobal)]),\n new VendorFilterDefinition(\"vendor_gamingrealms\", [this.services.gamesVendor.getVendor(GameVendorId.V_GamingRealms)]),\n new VendorFilterDefinition(\"vendor_gamomat\", [this.services.gamesVendor.getVendor(GameVendorId.V_Gamomat)]),\n new VendorFilterDefinition(\"vendor_greentube\", [this.services.gamesVendor.getVendor(GameVendorId.V_Greentube)]),\n new VendorFilterDefinition(\"vendor_h5\", [this.services.gamesVendor.getVendor(GameVendorId.V_H5)]),\n new VendorFilterDefinition(\"vendor_habanero\", [this.services.gamesVendor.getVendor(GameVendorId.V_Habanero)]),\n new VendorFilterDefinition(\"vendor_igt\", [this.services.gamesVendor.getVendor(GameVendorId.V_IGT)]),\n new VendorFilterDefinition(\"vendor_inspired\", [this.services.gamesVendor.getVendor(GameVendorId.V_Inspired)]),\n new VendorFilterDefinition(\"vendor_isoftbet\", [this.services.gamesVendor.getVendor(GameVendorId.V_iSoftBet)]),\n new VendorFilterDefinition(\"vendor_lightningbox\", [this.services.gamesVendor.getVendor(GameVendorId.V_LightningBox)]),\n new VendorFilterDefinition(\"vendor_lnw\", [this.services.gamesVendor.getVendor(GameVendorId.V_LNW), this.services.gamesVendor.getVendor(GameVendorId.V_LNW2)], \"LNW\"),\n new VendorFilterDefinition(\"vendor_merkur\", [this.services.gamesVendor.getVendor(GameVendorId.V_Merkur)]),\n new VendorFilterDefinition(\"vendor_mga\", [this.services.gamesVendor.getVendor(GameVendorId.V_MGA)]),\n new VendorFilterDefinition(\"vendor_netent\", [this.services.gamesVendor.getVendor(GameVendorId.V_NetEnt)]),\n new VendorFilterDefinition(\"vendor_nextgen_bigtime\", [this.services.gamesVendor.getVendor(GameVendorId.V_NextGenBigTime)], `Big Time`), //TODO ?\n new VendorFilterDefinition(\"vendor_nextgen_chanceinteractive\", [this.services.gamesVendor.getVendor(GameVendorId.V_NextGenChanceInteractive)], `Reel Play`),\n new VendorFilterDefinition(\"vendor_nolimitcity\", [this.services.gamesVendor.getVendor(GameVendorId.V_NoLimitCity)]),\n new VendorFilterDefinition(\"vendor_playngo\", [this.services.gamesVendor.getVendor(GameVendorId.V_PlayNGo)], `Play'n GO`),\n new VendorFilterDefinition(\"vendor_playtech\", [this.services.gamesVendor.getVendor(GameVendorId.V_PlayTech)], `Playtech`),\n new VendorFilterDefinition(\"vendor_pragmatic\", [this.services.gamesVendor.getVendor(GameVendorId.V_Pragmatic)]),\n new VendorFilterDefinition(\"vendor_quickspin\", [this.services.gamesVendor.getVendor(GameVendorId.V_Quickspin)]),\n new VendorFilterDefinition(\"vendor_redrake\", [this.services.gamesVendor.getVendor(GameVendorId.V_RedRake)]),\n new VendorFilterDefinition(\"vendor_redtiger\", [this.services.gamesVendor.getVendor(GameVendorId.V_RedTiger)]),\n new VendorFilterDefinition(\"vendor_rubyplay\", [this.services.gamesVendor.getVendor(GameVendorId.V_RubyPlay)]),\n new VendorFilterDefinition(\"vendor_sigma\", [this.services.gamesVendor.getVendor(GameVendorId.V_Sigma)]),\n new VendorFilterDefinition(\"vendor_skywind\", [this.services.gamesVendor.getVendor(GameVendorId.V_Skywind)]),\n new VendorFilterDefinition(\"vendor_spribe\", [this.services.gamesVendor.getVendor(GameVendorId.V_Spribe)]),\n new VendorFilterDefinition(\"vendor_thunderkick\", [this.services.gamesVendor.getVendor(GameVendorId.V_Thunderkick)]),\n new VendorFilterDefinition(\"vendor_wizard\", [this.services.gamesVendor.getVendor(GameVendorId.V_Wizard)]),\n new VendorFilterDefinition(\"vendor_wmg\", [this.services.gamesVendor.getVendor(GameVendorId.V_WMG)]),\n new VendorFilterDefinition(\"vendor_yggdrasil\", [this.services.gamesVendor.getVendor(GameVendorId.V_Yggdrasil)]),\n new VendorFilterDefinition(\"vendor_everi\", [this.services.gamesVendor.getVendor(GameVendorId.V_Everi)]),\n new VendorFilterDefinition(\"vendor_push_gaming\", [this.services.gamesVendor.getVendor(GameVendorId.V_PushGaming)], `Push Gaming`),\n new VendorFilterDefinition(\"vendor_edict\", [this.services.gamesVendor.getVendor(GameVendorId.V_Edict)], this.services.translation.translate(\"BRAND_EDICT_FILTER\", {brandName: \"Edict\"})),\n new VendorFilterDefinition(\"vendor_gamevy\", [this.services.gamesVendor.getVendor(GameVendorId.V_Gamevy)]),\n new VendorFilterDefinition(\"vendor_wazdan\", [this.services.gamesVendor.getVendor(GameVendorId.V_Wazdan)]),\n new VendorFilterDefinition(\"vendor_playson\", [this.services.gamesVendor.getVendor(GameVendorId.V_Playson)]),\n new VendorFilterDefinition(\"vendor_realistic\", [this.services.gamesVendor.getVendor(GameVendorId.V_Realistic)]),\n new VendorFilterDefinition(\"vendor_1x2\", [this.services.gamesVendor.getVendor(GameVendorId.V_1x2)]),\n new VendorFilterDefinition(\"vendor_spinomenal\", [this.services.gamesVendor.getVendor(GameVendorId.V_Spinomenal)]),\n new VendorFilterDefinition(\"vendor_hacksaw\", [this.services.gamesVendor.getVendor(GameVendorId.V_Hacksaw)]),\n new VendorFilterDefinition(\"vendor_stake_logic\", [this.services.gamesVendor.getVendor(GameVendorId.V_Stakelogic)]),\n new VendorFilterDefinition(\"vendor_net_gaming\", [this.services.gamesVendor.getVendor(GameVendorId.V_NetGaming)]),\n new VendorFilterDefinition(\"vendor_pg_soft\", [this.services.gamesVendor.getVendor(GameVendorId.V_PGSoft)]),\n new VendorFilterDefinition(\"vendor_booming\", [this.services.gamesVendor.getVendor(GameVendorId.V_Booming)]),\n new VendorFilterDefinition(\"vendor_live5\", [this.services.gamesVendor.getVendor(GameVendorId.V_Live5)])\n ];\n }\n\n private _getPreferredVendorFiltersForCurrentSkin(): VendorFilterDefinition[] {\n const preferredVendorsFiltersIds = this.services.configuration.data.generalSettings.filters?.advancedFilters?.preferredVendorFilters ?? [];\n if (preferredVendorsFiltersIds.length === 0) {\n return [...this.getAllPreferredVendorsFilters()];\n }\n\n const allPreferredVendorsFiltersMap = this.getAllPreferredVendorsFilters().toDictionary(f => f.id);\n const result: VendorFilterDefinition[] = [];\n for (let filterId of preferredVendorsFiltersIds) {\n const filter = allPreferredVendorsFiltersMap[filterId];\n if (filter) {\n result.push(filter)\n } else {\n this.services.logger.error(`There is no definition for game vendor filter with id ${filterId}`)\n }\n }\n\n return result;\n }\n\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n const filters = this._getPreferredVendorFiltersForCurrentSkin();\n let preferredVendorsIds: number[] = filters.selectMany(f => f.vendors?.map(vendor => vendor?.id));\n const otherVendorsIds: number[] = [];\n\n const allVendorsIds = Object.keys(this.services.sdk.getGamesVendors()).map(id => parseInt(id));\n for (let vendorId of allVendorsIds) {\n if (!preferredVendorsIds.includes(vendorId)) {\n otherVendorsIds.push(vendorId);\n }\n }\n\n if (otherVendorsIds.length > 0) {\n filters.push(new VendorFilterDefinition('vendor_others', otherVendorsIds.map(vendorId => this.services.gamesVendor.getVendor(vendorId)), this.services.translation.translate('OTHER')));\n }\n\n\n return filters;\n }\n\n}\n","import {GameFilterDefinitionBase} from \"./game-filter-definition-base\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../evaluators/game-filter-evaluator.interface\";\n\nexport abstract class GameGroupFilterDefinitionBase extends GameFilterDefinitionBase {\n protected abstract get gameGroupsIdsToFilterFor(): number[];\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(this.gameGroupsIdsToFilterFor.includes(gameInfo.gameGroupId)) {\n return ApplyGameFilterResult.IncludeGame;\n }\n\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class BaccaratFilterDefinition extends GameGroupFilterDefinitionBase {\n get id(): string {\n return \"baccarat\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.BACCARAT];\n }\n\n get text(): string {\n return this.services.translation.translate('BACCARAT');\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class BlackjackFilterDefinition extends GameGroupFilterDefinitionBase {\n\n get id(): string {\n return \"blackjack\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.BLACKJACK];\n }\n\n get text(): string {\n return this.services.translation.translate('BLACKJACK');\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class CrapsFilterDefinition extends GameGroupFilterDefinitionBase {\n get id(): string {\n return \"craps\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.CRAPS];\n }\n\n get text(): string {\n return this.services.translation.translate('CRAPS')\n }\n}\n","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class KenoFilterDefinition extends GameGroupFilterDefinitionBase {\n get id(): string {\n return \"keno\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.KENO];\n }\n\n get text(): string {\n return this.services.translation.translate('KENO');\n }\n}","import {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\n\nexport class LiveEliteLungeFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return \"live-elite-lounge\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_ELITE_LOUNGE');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(gameInfo.isEliteLounge) {\n return ApplyGameFilterResult.IncludeGame;\n }\n\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\n\nexport class LiveEliteLoungeOrExclusiveFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return \"live-elite-lounge-or-exclusive\";\n }\n\n get text(): string {\n return this.services.translation.translate('EXCLUSIVE');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(gameInfo.isEliteLounge || gameInfo.isExclusiveGame) {\n return ApplyGameFilterResult.IncludeGame;\n }\n\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport abstract class LiveGameFilterDefinitionBase extends GameFilterDefinitionBase {\n\n protected abstract get textToSearchInSubgroupName(): string;\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if (gameInfo.gameGroupId !== GAME_GROUP.LIVE_CASINO || !gameInfo.subGroupName) {\n return ApplyGameFilterResult.ExcludeGame;\n }\n\n const subgroupName = gameInfo.subGroupName.toLowerCase();\n if (subgroupName && subgroupName.indexOf(this.textToSearchInSubgroupName) !== -1) {\n return ApplyGameFilterResult.IncludeGame;\n }\n\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {LiveGameFilterDefinitionBase} from \"./live-game-filter-definition-base\";\n\nexport class LiveGameShowsFilterDefinition extends LiveGameFilterDefinitionBase {\n get id(): string {\n return \"live-game-shows\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_GAME_SHOWS');\n }\n\n protected get textToSearchInSubgroupName(): string {\n return \"shows\";\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class PokerFilterDefinition extends GameGroupFilterDefinitionBase {\n\n get id(): string {\n return \"poker\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.VIDEO_POKER, GAME_GROUP.CARRIBEAN_POKER, GAME_GROUP.POKER, GAME_GROUP.PAI_GOW_POKER, GAME_GROUP.POWER_VIDEO_POKER, GAME_GROUP.POKER_TEMPLATE_GAMES];\n }\n\n get text(): string {\n return this.services.translation.translate('POKER');\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class RouletteFilterDefinition extends GameGroupFilterDefinitionBase {\n get id(): string {\n return \"roulette\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.ROULETTE, GAME_GROUP.ROULETTE_LIKE];\n }\n\n get text(): string {\n return this.services.translation.translate('ROULETTE');\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class ScratchcardsFilterDefinition extends GameGroupFilterDefinitionBase {\n get id(): string {\n return \"scratchCards\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.SCRATCH_CARD];\n }\n\n get text(): string {\n return this.services.translation.translate('SCRATCHCARDS');\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class SlotsFilterDefinition extends GameGroupFilterDefinitionBase {\n\n get id(): string {\n return \"slots\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.VIDEO_SLOT, GAME_GROUP.SLOT];\n }\n\n get text(): string {\n return this.services.translation.translate('SLOT_GAMES');\n }\n\n}","import {IGameFilterDefinition} from \"../game-filter-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\n\nexport class OtherGameGroupFilterDefinition implements IGameFilterDefinition {\n constructor(protected readonly services: IServiceFactoryExtended, private gameTypesFilterDefinitions: IGameFilterDefinition[]) {\n }\n getFiltersForGame(gameInfo: GameInfo): string[] {\n if (this.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame) {\n return [this.id];\n }\n else {\n return [];\n }\n }\n\n get id(): string {\n return \"other-game-group\";\n }\n\n readonly subFilters: IGameFilterDefinition[] = [];\n\n get text(): string {\n return this.services.translation.translate('OTHER');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n const categoriesInCurrentArena = this.gameTypesFilterDefinitions;\n for(let category of categoriesInCurrentArena) {\n if(category.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame) {\n return ApplyGameFilterResult.ExcludeGame;\n }\n }\n \n return ApplyGameFilterResult.IncludeGame;\n }\n\n}","import {LiveGameFilterDefinitionBase} from \"./live-game-filter-definition-base\";\n\nexport class LiveBaccaratFilterDefinition extends LiveGameFilterDefinitionBase {\n get id(): string {\n return \"live-baccarat\";\n }\n\n protected get textToSearchInSubgroupName(): string {\n return \"baccarat\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_BACCARAT');\n }\n}","import {LiveGameFilterDefinitionBase} from \"./live-game-filter-definition-base\";\n\nexport class LiveBlackjackFilterDefinition extends LiveGameFilterDefinitionBase {\n\n get id(): string {\n return \"live-blackjack\";\n }\n\n protected get textToSearchInSubgroupName(): string {\n return \"blackjack\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_BLACKJACK');\n }\n}","import {LiveGameFilterDefinitionBase} from \"./live-game-filter-definition-base\";\n\nexport class LivePokerFilterDefinition extends LiveGameFilterDefinitionBase {\n\n get id(): string {\n return \"live-poker\";\n }\n\n protected get textToSearchInSubgroupName(): string {\n return \"poker\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_POKER');\n }\n}","import {LiveGameFilterDefinitionBase} from \"./live-game-filter-definition-base\";\n\nexport class LiveRouletteFilterDefinition extends LiveGameFilterDefinitionBase {\n get id(): string {\n return \"live-roulette\";\n }\n\n protected get textToSearchInSubgroupName(): string {\n return \"roulette\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_ROULETTE');\n }\n}","import {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {BaccaratFilterDefinition} from \"../filters-definitions/game-group/baccarat.filter-definition\";\nimport {BlackjackFilterDefinition} from \"../filters-definitions/game-group/blackjack.filter-definition\";\nimport {CrapsFilterDefinition} from \"../filters-definitions/game-group/craps.filter-definition\";\nimport {KenoFilterDefinition} from \"../filters-definitions/game-group/keno.filter-definition\";\nimport {LiveEliteLungeFilterDefinition} from \"../filters-definitions/game-group/live-elite-lunge.filter-definition\";\nimport {\n LiveEliteLoungeOrExclusiveFilterDefinition\n} from \"../filters-definitions/game-group/live-elite-lounge-or-exclusive.filter-definition\";\nimport {LiveGameShowsFilterDefinition} from \"../filters-definitions/game-group/live-game-shows.filter-definition\";\nimport {PokerFilterDefinition} from \"../filters-definitions/game-group/poker.filter-definition\";\nimport {RouletteFilterDefinition} from \"../filters-definitions/game-group/roulette.filter-definition\";\nimport {ScratchcardsFilterDefinition} from \"../filters-definitions/game-group/scratchcards.filter-definition\";\nimport {SlotsFilterDefinition} from \"../filters-definitions/game-group/slots.filter-definition\";\nimport {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\nimport {OtherGameGroupFilterDefinition} from \"../filters-definitions/game-group/other-game-group.filter-definition\";\nimport {LiveBaccaratFilterDefinition} from \"../filters-definitions/game-group/live-baccarat.filter-definition\";\nimport {LiveBlackjackFilterDefinition} from \"../filters-definitions/game-group/live-blackjack.filter-definition\";\nimport {LivePokerFilterDefinition} from \"../filters-definitions/game-group/live-poker.filter-definition\";\nimport {LiveRouletteFilterDefinition} from \"../filters-definitions/game-group/live-roulette.filter-definition\";\n\nexport class GameGroupFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n\n get id(): CategoryDefinitionId {\n return 'gameGroups';\n }\n\n get title(): string{\n return this.services.translation.translate('GAME_CATEGORIES');\n }\n\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n const filters: IGameFilterDefinition[] = [\n new SlotsFilterDefinition(this.services),\n new RouletteFilterDefinition(this.services),\n new BlackjackFilterDefinition(this.services),\n new PokerFilterDefinition(this.services),\n new ScratchcardsFilterDefinition(this.services),\n new BaccaratFilterDefinition(this.services),\n new CrapsFilterDefinition(this.services),\n new KenoFilterDefinition(this.services),\n new LiveBaccaratFilterDefinition(this.services),\n new LiveBlackjackFilterDefinition(this.services),\n new LiveRouletteFilterDefinition(this.services),\n new LivePokerFilterDefinition(this.services),\n new LiveGameShowsFilterDefinition(this.services),\n new LiveEliteLungeFilterDefinition(this.services),\n new LiveEliteLoungeOrExclusiveFilterDefinition(this.services),\n ];\n return filters.concat(new OtherGameGroupFilterDefinition(this.services, filters));\n }\n\n\n}","import {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameThemeDefinition} from \"../../../game-theme/game-theme-definition/game-theme-definition\";\n\nexport class GameThemeFilterDefinition extends GameFilterDefinitionBase {\n constructor(public readonly id: string,\n protected readonly services: IServiceFactoryExtended,\n private _gameThemeDefinition: GameThemeDefinition,\n linkedThemeIds?: number[]) {\n super(services);\n this._themeIds = [this._gameThemeDefinition.id, ...(linkedThemeIds || [])]\n }\n\n private readonly _themeIds: number[];\n\n get text(): string {\n return this._gameThemeDefinition.name;\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n for(let themeId of gameInfo.themeIds) {\n if(this._themeIds.includes(themeId)) {\n return ApplyGameFilterResult.IncludeGame;\n }\n }\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {GameThemeFilterDefinition} from \"../filters-definitions/theme/game-theme.filter-definition\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {GameThemeId} from \"../../game-theme/game-theme-id.enum\";\n\nexport class GameThemeFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n\n get id(): CategoryDefinitionId {\n return 'themes';\n }\n\n get title(): string {\n return this.services.translation.translate('THEMES');\n }\n\n get hasItsOwnFiltersOrder(): boolean {\n return !Check.isEmpty(this.services.configuration.data.generalSettings.filters?.advancedFilters?.preferredThemeFilters);\n }\n\n private _getPreferredThemeFilters(): GameThemeFilterDefinition[] {\n return [\n new GameThemeFilterDefinition(\"theme_adventure\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Adventure)),\n new GameThemeFilterDefinition(\"theme_ancient-civilization\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.AncientCivilization)),\n new GameThemeFilterDefinition(\"theme_wildlife\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Wildlife)),\n new GameThemeFilterDefinition(\"theme_classic_style\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.ClassicStyle), [GameThemeId.ClassicStyleModernized]),\n new GameThemeFilterDefinition(\"theme_asian\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Asian)),\n new GameThemeFilterDefinition(\"theme_arabic\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Arabic)),\n new GameThemeFilterDefinition(\"theme_comics_and_cartoons\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.ComicsAndCartoons)),\n new GameThemeFilterDefinition(\"theme_diamonds_and_gems\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.DiamondsAndGems)),\n new GameThemeFilterDefinition(\"theme_egyptian\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Egyptian)),\n new GameThemeFilterDefinition(\"theme_fantasy_and_folklore\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.FantasyAndFolklore)),\n new GameThemeFilterDefinition(\"theme_farm_and_pets\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.FantasyAndFolklore)),\n new GameThemeFilterDefinition(\"theme_fish\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Fish)),\n new GameThemeFilterDefinition(\"theme_fruit_and_candy\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Fruit)),\n new GameThemeFilterDefinition(\"theme_greek_mythology\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.GreekMythology)),\n new GameThemeFilterDefinition(\"theme_irish\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Irish)),\n new GameThemeFilterDefinition(\"theme_money_and_leisure\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.MoneyAndLeisure)),\n new GameThemeFilterDefinition(\"theme_movies_and_music\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.MoviesAndMusic)),\n new GameThemeFilterDefinition(\"theme_seasonal\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Seasonal)),\n new GameThemeFilterDefinition(\"theme_space_and_sci-fi\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.SpaceAndSciFi)),\n new GameThemeFilterDefinition(\"theme_crime\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Crime))\n ];\n }\n\n\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n const preferredThemeFilters = this.services.configuration.data.generalSettings.filters?.advancedFilters?.preferredThemeFilters;\n if (Check.isEmpty(preferredThemeFilters)) {\n return this._getPreferredThemeFilters();\n }\n\n const themesDictionary = this._getPreferredThemeFilters().toDictionary(f => f.id);\n\n const result: IGameFilterDefinition[] = [];\n for (let filterId of preferredThemeFilters) {\n const filter = themesDictionary[filterId];\n if (filter) {\n result.push(filter);\n } else {\n this.services.logger.error(`There is no filter definition for filter with ID ${filterId}`);\n }\n }\n\n return result;\n\n }\n}","import {IFilterCategoryDefinitionFactory} from \"./filter-category-definition-factory.interface\";\nimport {CategoryDefinitionId, IFilterCategoryDefinition} from \"./filter-category-definition.interface\";\nimport {VolatilityFiltersCategoryDefinition} from \"./volatility.filters-category-definition\";\nimport {GameFeaturesFiltersCategoryDefinition} from \"./game-features.filters-category-definition\";\nimport {HasJackpotFiltersCategoryDefinition} from \"./has-jackpot.filters-category-definition\";\nimport {GameVendorFiltersCategoryDefinition} from \"./game-vendor.filters-category-definition\";\nimport {GameGroupFiltersCategoryDefinition} from \"./game-group.filters-category-definition\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nimport {GameThemeFiltersCategoryDefinition} from \"./game-theme.filters-category-definition\";\n\nexport class FilterCategoryDefinitionFactory implements IFilterCategoryDefinitionFactory {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n\n private readonly _allCategories: Record = {\n \"volatility\": new VolatilityFiltersCategoryDefinition(this.services),\n \"features\": this.createGameFeaturesCategoryDefinition(),\n \"hasJackpot\": new HasJackpotFiltersCategoryDefinition(this.services),\n \"themes\": new GameThemeFiltersCategoryDefinition(this.services),\n \"vendors\" : this.createVendorsCategoryDefinition(),\n \"gameGroups\": this.createGameGroupCategoryDefinition(),\n };\n\n createCategoryDefinition(categoryDefinitionId: CategoryDefinitionId): IFilterCategoryDefinition | null {\n if (categoryDefinitionId in this._allCategories) {\n return this._allCategories[categoryDefinitionId];\n } else {\n this.services.logger.error(`There is no filters category definition for id ${categoryDefinitionId}`);\n return null;\n }\n }\n \n\n createVendorsCategoryDefinition(): IFilterCategoryDefinition {\n return new GameVendorFiltersCategoryDefinition(this.services);\n }\n\n createGameGroupCategoryDefinition(): IFilterCategoryDefinition {\n return new GameGroupFiltersCategoryDefinition(this.services);\n }\n\n createGameFeaturesCategoryDefinition(): IFilterCategoryDefinition {\n return new GameFeaturesFiltersCategoryDefinition(this.services);\n }\n\n getAllCategoryDefinitions(): IFilterCategoryDefinition[] {\n return Object.values(this._allCategories);\n }\n}\n","import React from 'react';\nimport {DisposableObject} from \"../../../../utils/disposable-object\";\nimport {IGamesFilterStrategy} from \"./games-filter-strategy.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {computed, observable, runInAction, makeObservable} from \"mobx\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {Nullable} from \"../../../../common/types/nullable-types\";\nimport {GamesMap} from \"../../games/games.service.interface\";\nimport {IArenaGameFiltersCategory} from \"../arena-filters/categories/arena-game-filters-category.interface\";\nimport {IArenaGameFilter} from \"../arena-filters/filters/arena-game-filter.interface\";\nimport {ApplyGameFilterResult, IGameFilterEvaluator} from \"../evaluators/game-filter-evaluator.interface\";\nimport {IFilterIndicatorRenderingOptions} from \"../games-filter.service.interface\";\nimport {FilterCategoryDefinitionFactory} from '../filters-categories-definitions/filter-category-definition-factory';\nimport {IGameFilterDefinition} from '../filters-definitions/game-filter-definition.interface';\n\nexport abstract class GamesFilterStrategyBase extends DisposableObject implements IGamesFilterStrategy {\n\n constructor(protected readonly services: IServiceFactoryExtended) {\n super();\n makeObservable(this);\n\n this.addReaction(() => this.services.location.currentUri, () => {\n //We use set timeout in order to avoid a circular dependency error.\n //Because this reaction is with fireImmediately=true it executes in this constructor, but this constructor is called from the GamesFilterService constructor\n //and the code inside this._filterGames is trying to access methods and properties from GamesFilterService and the Lazy class will throw an error in this case.\n setTimeout(() => {\n runInAction(() => {\n try {\n this.filteredGamesMap = this._filterGames();\n if (this.services.gamesFilter.isFilterOn && !this._isInFilterAnalyticsReporting) {\n this._reportApplyFiltersByDeepLink();\n }\n } finally {\n this._isInFilterAnalyticsReporting = false;\n }\n });\n });\n\n }, {\n fireImmediately: true\n });\n\n this.addReaction(() => this.services.games.gamesMap, () => {\n //We use set timeout in order to avoid a circular dependency error.\n //Because this reaction is with fireImmediately=true it executes in this constructor, but this constructor is called from the GamesFilterService constructor\n //and the code inside this._filterGames is trying to access methods and properties from GamesFilterService and the Lazy class will throw an error in this case.\n setTimeout(() => {\n runInAction(() => {\n this.filteredGamesMap = this._filterGames();\n });\n });\n\n }, {\n fireImmediately: true\n });\n }\n protected _factory = new FilterCategoryDefinitionFactory(this.services);\n\n isValidFilter(filterId: string): boolean {\n return this.currentFilters.some(filter => filter.id === filterId);\n }\n\n private _isInFilterAnalyticsReporting = false;\n beginFilterAnalyticsReporting(): void {\n this._isInFilterAnalyticsReporting = true;\n }\n\n protected abstract _createFiltersCategories(): IArenaGameFiltersCategory[];\n abstract renderMobileFiltersIndicator(): React.ReactElement;\n abstract renderFiltersIndicator(): Nullable;\n protected abstract _reportApplyFiltersByDeepLink(): void;\n\n abstract showFiltersEditor(): void;\n protected abstract _createEvaluator(): IGameFilterEvaluator | null;\n\n @observable.ref\n filteredGamesMap: Record = {};\n\n private _filtersCategories: Nullable = null;\n public get filtersCategories(): IArenaGameFiltersCategory[] {\n if (!this._filtersCategories) {\n this._filtersCategories = this._createFiltersCategories();\n }\n return this._filtersCategories;\n }\n\n\n @computed\n public get currentFilters(): IArenaGameFilter[] {\n const result: IArenaGameFilter[] = [];\n this.filtersCategories.forEach(category => {\n category.availableFilters.forEach(f => result.push(f));\n });\n\n return result;\n }\n\n get isFilteringAvailable(): boolean {\n return this.currentFilters.length > 0;\n }\n\n protected _filterGames(): GamesMap {\n\n const gamesMap = this.services.games.gamesMap;\n\n if (!this.currentFilters.some(f => f.isApplied)) {\n return gamesMap;\n }\n\n const evaluator = this._createEvaluator();\n\n const result: GamesMap = {};\n\n for (let game of Object.values(this.services.games.gamesMap)) {\n const filterResult = evaluator.applyFilter(game);\n if (ApplyGameFilterResult.IncludeGame === filterResult) {\n result[game.gameType] = game;\n }\n }\n\n return result;\n }\n\n public getFiltersForGame(gameType: number): string[] {\n\n\n const gameInfo = this.services.games.gamesMap[gameType];\n if (!gameInfo) {\n return [];\n }\n const allCategories = this._factory.getAllCategoryDefinitions();\n const result: string[] = []\n allCategories.forEach(category => {\n category.getFiltersForGame(gameInfo).forEach(filterId => {\n result.push(filterId);\n })\n })\n\n return result;\n }\n\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number {\n return 0;\n }\n\n getFiltersDefinitions(filtersIds: string[]): Record {\n let result: Record = {};\n\n for (let categoryDefinition of this._factory.getAllCategoryDefinitions()) {\n for (let filterDefinition of categoryDefinition.availableFilters) {\n if (filterDefinition.subFilters.length > 0) {\n for (let subFilter of filterDefinition.subFilters.filter(subF => filtersIds.includes(subF.id))) {\n result[subFilter.id] = subFilter;\n }\n }\n if (filtersIds.includes(filterDefinition.id)) {\n result[filterDefinition.id] = filterDefinition;\n }\n }\n }\n\n return result;\n }\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const FilterCategoriesListContainerBox = styledBox(\"FilterCategoriesListContainerBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const FilterCategoryBox = styledBox(\"FilterCategoryBox\");\n","import styled from \"styled-components\";\n\nexport const FilterCategoryContentBox = styled.div`\n display: block;\n transition: all 0.2s ease-in;\n overflow: hidden;\n height: 100%;\n`;","import styled from \"styled-components\";\n\nexport const FilterItemBox = styled.div<{disabled: boolean}>`\n display: flex;\n align-items: center;\n padding: 18px 15px;\n cursor: ${props => props.disabled ? \"auto\" : \"pointer\"};\n`","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const FilterInputBox = styledBox(\"FilterInputBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const FilterItemTitleBox = styledBox(\"FilterItemTitleBox\");\n","import styled from \"styled-components\";\n\nexport const SubFiltersBox = styled.div`\n margin-left: 5rem;\n`","import styled from \"styled-components\";\n\nexport const FilterItemContainerBox = styled.div<{disabled: boolean}>`\n display: flex;\n flex-direction: column;\n opacity: ${props => props.disabled ? \"0.5\" : \"1\"};\n`\n","import React from 'react';\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {FilterItemBox} from \"./boxes/filter-Item.box\";\nimport {FilterInputBox} from \"./boxes/input/filter-input.box\";\nimport {FilterItemTitleBox} from \"./boxes/filter-item-title.box\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\nimport {observer} from \"mobx-react\";\nimport {SubFiltersBox} from \"./boxes/sub-filters.box\";\nimport {FilterItemContainerBox} from \"./boxes/filter-item-container.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nexport type FilterInputType = 'checkbox' | 'radio';\n\ninterface FilterCategoryItemComponentProps {\n inputType: FilterInputType;\n filter: IArenaGameFilterEditorViewModel;\n filterCategoryId: string;\n}\n\nexport const FilterCategoryItemComponent = observer(\n class FilterCategoryItemComponent extends OrbitComponent {\n\n private _onFilterToggle = () => {\n if (this.props.filter.disabled) {\n return;\n }\n this.props.filter.toggleFilter();\n }\n\n private _renderSubFilters() {\n const subFilters = this.props.filter.subFilters;\n if(subFilters.length === 0) {\n return null;\n }\n\n return (\n \n {subFilters.map(sf => ())}\n \n )\n }\n\n render() {\n const filter = this.props.filter;\n const inputType = this.props.inputType;\n\n return (\n \n \n \n \n {filter.text}\n {filter.gamesCount > 0 && ` (${filter.gamesCount})`}\n \n \n {this._renderSubFilters()}\n \n\n );\n }\n }\n);","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {\n IArenaGameFiltersCategoryEditorViewModel\n} from \"../../../../services/games-filter/arena-filters/categories/arena-game-filters-category-editor-view-model.interface\";\nimport {FilterCategoryContentBox} from \"./boxes/filter-category-content.box\";\nimport {observer} from \"mobx-react\";\nimport {FilterCategoryItemComponent} from \"./filter-category-item.component\";\n\ninterface FilterCategoryContentComponentProps {\n category: IArenaGameFiltersCategoryEditorViewModel;\n isOpen: boolean;\n}\n\n\nexport const FilterCategoryContentComponent = observer(\n class FilterCategoryContentComponent extends OrbitComponent {\n\n _renderFilters(category: IArenaGameFiltersCategoryEditorViewModel) {\n\n\n return <>\n {category.visibleFilters.map(filterToRender => ())}\n ;\n }\n\n render() {\n if(!this.props.isOpen) {\n return null;\n }\n\n return (\n \n {this._renderFilters(this.props.category)}\n \n )\n }\n }\n);","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const FilterTitleContainerBox = styledBox(\"FilterTitleContainerBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const FilterTitleBox = styledBox(\"FilterTitleBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const FilterPreviewBox = styledBox(\"FilterPreviewBox\");\n","import React from 'react';\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {FilterTitleContainerBox} from \"./boxes/title-category/filter-title-container.box\";\nimport {FilterTitleBox} from \"./boxes/title/filter-title.box\";\nimport {FilterPreviewBox} from \"./boxes/preview/filter-preview.box\";\nimport {\n IArenaGameFiltersCategoryEditorViewModel\n} from \"../../../../services/games-filter/arena-filters/categories/arena-game-filters-category-editor-view-model.interface\";\nimport {observer} from \"mobx-react\";\n\ninterface FilterCategoryHeaderComponentProps {\n category: IArenaGameFiltersCategoryEditorViewModel;\n isOpen: boolean;\n onCategoryToggle: (category: IArenaGameFiltersCategoryEditorViewModel) => void;\n}\n\n\nexport const FilterCategoryHeaderComponent = observer(\n class FilterCategoryHeaderComponent extends OrbitComponent {\n private _onClickHandler = () => {\n this.props.onCategoryToggle(this.props.category);\n }\n\n\n render() {\n const activeFiltersTexts = this.props.category.getVisibleAppliedFilters().map(f => f.text);\n return (\n \n \n {this.props.category.title}\n \n\n 0}>\n ({activeFiltersTexts.join(', ')})\n \n \n )\n }\n }\n);","import React from 'react';\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {IArenaGameFiltersCategoryEditorViewModel} from '../../../../services/games-filter/arena-filters/categories/arena-game-filters-category-editor-view-model.interface';\nimport {observer} from 'mobx-react';\nimport {FilterCategoryBox} from \"./boxes/filter-category.box\";\nimport {FilterCategoryContentComponent} from \"./filter-category-content.component\";\nimport {FilterCategoryHeaderComponent} from \"./filter-category-header.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\ninterface IFilterCategoryComponentProps {\n category: IArenaGameFiltersCategoryEditorViewModel;\n onCategoryToggle: (category: IArenaGameFiltersCategoryEditorViewModel) => void;\n isOpen: boolean;\n}\n\nexport const FilterCategoryComponent = observer(\n class FilterCategoryComponent extends OrbitComponent {\n\n render() {\n const {category, isOpen} = this.props;\n return (\n \n \n \n \n );\n }\n }\n);\n","import React from 'react';\nimport {OrbitComponentWithState} from '../../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport {FilterCategoriesListContainerBox} from \"./boxes/filter-categories-list-container.box\";\nimport {FilterCategoryComponent} from '../filter-category/filter-category.component';\nimport {IAdvancedStrategyFiltersEditorViewModel} from '../../../../services/games-filter/strategies/advanced-filter/advanced-strategy-filters-editor-view-model.interface';\nimport {IArenaGameFiltersCategoryEditorViewModel} from '../../../../services/games-filter/arena-filters/categories/arena-game-filters-category-editor-view-model.interface';\nimport {observer} from 'mobx-react';\n\nexport interface IFilterCategoriesListComponentProps {\n filtersEditor: IAdvancedStrategyFiltersEditorViewModel;\n}\n\ninterface IFilterCategoriesListComponentState {\n openFilterCategory: IArenaGameFiltersCategoryEditorViewModel | null;\n}\n\nexport const FilterCategoriesListComponent = observer(\n class FilterCategoriesListComponent extends OrbitComponentWithState {\n\n state: IFilterCategoriesListComponentState = {\n openFilterCategory: null\n }\n\n _onCategoryToggle = (category: IArenaGameFiltersCategoryEditorViewModel) => {\n let openFilterCategoryState = this.state.openFilterCategory;\n\n // if user clicked on new category emulate close current category first\n if (openFilterCategoryState && category.id !== openFilterCategoryState.id) {\n openFilterCategoryState = null;\n }\n\n this.setState({openFilterCategory: openFilterCategoryState ? null : category});\n }\n\n\n render() {\n return (\n \n\n\n {this.props.filtersEditor.visibleCategories.map(category => ())}\n \n )\n }\n }\n);","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const AdvancedGamesFilterBox = styledBox(\"AdvancedGamesFilterBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const AdvancedGamesFilterFooterBox = styledBox(\"AdvancedGamesFilterFooterBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const AdvancedGamesFilterHeaderBox = styledBox(\"AdvancedGamesFilterHeaderBox\");","import styled from \"styled-components\";\nimport {Button} from \"../../../../../basic-ui-components/button/base/button.component\";\nimport {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\n\nexport const AdvancedGamesFilterButtonBox = styled(Button)`\n min-width: 140px;\n`\n\nconst AdvancedGamesFilterButtonSIBox = styled(AdvancedGamesFilterButtonBox)`\n background-color: transparent; \n`\n\nexport const AdvancedGamesFilterButtonStyleBox = styledByTheme(AdvancedGamesFilterButtonBox)\n .forSI(AdvancedGamesFilterButtonSIBox)\n .forSICis(AdvancedGamesFilterButtonSIBox)\n .apply();","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const FilterByBox = styledBox('FilterByBox');\n","import styled from \"styled-components\";\nimport {flexGrowItem} from \"../../../../themes/architecture/css-helpers/flex\";\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\n\nexport const FilterCategoriesListBox = styled.div`\n ${flexGrowItem};\n flex-basis: 1%; /* We need it so this area will not take all the places(including the sticky buttons) */\n overflow-y: auto;\n background-color: ${({theme}) => hexToRgba(theme.colors.backgroundMiddleDark, 0.25)};\n padding-inline: 15px;\n`;","import React from 'react';\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {\n IAdvancedStrategyFiltersEditorViewModel\n} from \"../../../services/games-filter/strategies/advanced-filter/advanced-strategy-filters-editor-view-model.interface\";\nimport {FilterCategoriesListComponent} from './filter-categories-list/filter-categories-list.component';\nimport {AdvancedGamesFilterBox} from \"./boxes/filter/advanced-games-filter.box\";\nimport {AdvancedGamesFilterFooterBox} from \"./boxes/filter-footer/advanced-games-filter-footer.box\";\nimport {AdvancedGamesFilterHeaderBox} from \"./boxes/filter-header/advanced-games-filter-header.box\";\nimport {\n AdvancedGamesFilterButtonBox,\n AdvancedGamesFilterButtonStyleBox\n} from \"./boxes/filter-button/advanced-games-filter-button.box\";\nimport {FilterByBox} from \"./filter-categories-list/boxes/filter-by.box\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {FilterCategoriesListBox} from \"./boxes/filter-categories-list.box\";\n\n\ninterface AdvancedGamesFilterComponentProps {\n filtersEditor: IAdvancedStrategyFiltersEditorViewModel;\n}\n\nexport const AdvancedGamesFilterComponent = observer(\n class AdvancedGamesFilterComponent extends OrbitComponent {\n\n private _onApply = async () => {\n await this.props.filtersEditor.applyFilters();\n (await this.services.drawer).right.back();\n }\n\n private _onCancel = () => {\n this.props.filtersEditor.closeFilters();\n }\n\n private _onClearAll = async () => {\n await this.props.filtersEditor.clearFilters();\n }\n\n componentDidMount() {\n super.componentDidMount();\n this.props.filtersEditor.openFilters();\n }\n\n\n render() {\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n const numberOfGamesIfUserApply: number = this.props.filtersEditor.getNumberOfGamesBeforeUserApply();\n const numberOfSelectedFilters: number = this.props.filtersEditor.getAppliedFiltersIds().length;\n\n return (\n \n \n \n {this.services.translation.translate('FILTER_BY')}\n \n
\n \n
\n
\n \n \n \n \n \n {this.services.translation.translate('CLEAR_ALL')}\n \n\n \n {this.services.translation.translate('APPLY') + (numberOfSelectedFilters> 0 ? ` (${numberOfGamesIfUserApply})` : '')}\n \n \n\n
\n )\n }\n }\n);","import React from 'react';\nimport {IDrawerContent} from \"../../../drawer/drawer.service.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {\n AdvancedGamesFilterComponent\n} from \"../../../../components/filters/advanced-filtering/advanced-games-filter.component\";\nimport {AdvancedStrategyFiltersEditor} from \"./advanced-strategy-filters-editor\";\n\nexport class AdvancedGamesFilterDrawerRenderer implements IDrawerContent {\n\n constructor(private readonly services: IServiceFactoryExtended,\n private readonly filtersEditor: AdvancedStrategyFiltersEditor) {\n this.id = this.services.tools.getGuid();\n }\n\n readonly id: string;\n readonly isMinimized: boolean = false;\n readonly minOverlayZIndex: number | null = null;\n supportsCloseIntent: boolean = false;\n readonly title: string = '';\n isBlurBackground: boolean = true;\n\n onClose(): void {\n }\n\n onOverlayClicked(): void {\n }\n\n render(): React.ReactNode {\n return (\n \n );\n }\n}","import { action, observable, runInAction, makeObservable } from \"mobx\";\nimport {IArenaGameFilterEditorViewModel} from \"./arena-game-filter-editor-view-model.interface\";\nimport {IArenaGameFilter} from \"./arena-game-filter.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {ArenaGameFiltersCategoryEditor} from \"../categories/arena-game-filters-category-editor\";\n\nexport class ArenaGameFilterEditor implements IArenaGameFilterEditorViewModel {\n constructor(protected readonly arenaGameFilter: IArenaGameFilter,\n protected readonly categoryEditor?: ArenaGameFiltersCategoryEditor) {\n makeObservable(this);\n\n this._on = arenaGameFilter.isApplied;\n }\n\n get id(): string {\n return this.arenaGameFilter.id;\n }\n\n get text(): string {\n return this.arenaGameFilter.text;\n }\n\n @observable.ref\n protected _on: boolean = false;\n get on(): boolean {\n return this._on;\n }\n\n set on(value: boolean) {\n this._setOn(value);\n }\n\n protected _resetOtherFiltersInTheCategory(): void {\n this.categoryEditor.visibleFilters.forEach(f => {\n if(f.id !== this.id) {\n f.on = false;\n }\n })\n }\n\n protected _setOn(value: boolean): void {\n\n if(value && this.categoryEditor && !this.categoryEditor.isMultiSelect) {\n this._resetOtherFiltersInTheCategory();\n }\n\n runInAction(() => this._on = value);\n }\n\n get disabled(): boolean {\n return false;\n }\n\n @action.bound\n toggleFilter(): void {\n this.on = !this.on;\n }\n\n get shouldBeDisplayed(): boolean {\n return !this.arenaGameFilter.isAdhocFilter;\n }\n\n get gamesCount(): NullableNumber {\n return this.arenaGameFilter.gamesCount;\n }\n\n\n private _subFilters: ArenaGameSubFilterEditor[] | null = null;\n get subFilters(): ArenaGameSubFilterEditor[] {\n if(!this._subFilters) {\n this._subFilters = this.arenaGameFilter.subFilters.map(sf => new ArenaGameSubFilterEditor(this, sf));\n }\n return this._subFilters;\n }\n}\n\n\nexport class ArenaGameSubFilterEditor extends ArenaGameFilterEditor {\n constructor(private readonly parent: ArenaGameFilterEditor,\n arenaGameFilter: IArenaGameFilter) {\n super(arenaGameFilter)\n }\n\n get on(): boolean {\n return this._on && this.parent.on;\n }\n\n set on(value: boolean) {\n this._setOn(value);\n }\n\n get disabled(): boolean {\n return !this.parent.on;\n }\n}","import {ArenaGameFilterEditor} from \"../filters/arena-game-filter-editor\";\nimport {IArenaGameFiltersCategoryEditorViewModel} from \"./arena-game-filters-category-editor-view-model.interface\";\nimport {IArenaGameFiltersCategory} from \"./arena-game-filters-category.interface\";\nimport { computed, makeObservable } from \"mobx\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {IArenaGameFilterEditorViewModel} from \"../filters/arena-game-filter-editor-view-model.interface\";\nimport {CategoryDefinitionId} from \"../../filters-categories-definitions/filter-category-definition.interface\";\n\nexport class ArenaGameFiltersCategoryEditor implements IArenaGameFiltersCategoryEditorViewModel {\n constructor(private readonly arenaGameFilterCategory: IArenaGameFiltersCategory) {\n makeObservable(this);\n\n this._filters = arenaGameFilterCategory.availableFilters.map(f => new ArenaGameFilterEditor(f, this));\n }\n\n private readonly _filters: ArenaGameFilterEditor[];\n @computed\n get visibleFilters(): ArenaGameFilterEditor[] {\n return this._filters.filter(f => f.shouldBeDisplayed);\n }\n\n get id(): CategoryDefinitionId {\n return this.arenaGameFilterCategory.id;\n }\n\n get title(): string {\n return this.arenaGameFilterCategory.title;\n }\n\n getAppliedFiltersIds(): string[] {\n return this._getAllAppliedFilters().map(f => f.id);\n }\n\n get gamesCount(): NullableNumber {\n return this.arenaGameFilterCategory.gamesCount;\n }\n\n get isMultiSelect(): boolean {\n return this.arenaGameFilterCategory.isMultiSelect;\n }\n\n private _getAllAppliedFilters(): ArenaGameFilterEditor[] {\n const result: ArenaGameFilterEditor[] = [];\n\n for(let filter of this._filters) {\n if(filter.on) {\n result.push(filter);\n for(let subFilter of filter.subFilters) {\n if(subFilter.on) {\n result.push(subFilter)\n }\n }\n }\n }\n return result;\n }\n\n\n getVisibleAppliedFilters(): IArenaGameFilterEditorViewModel[] {\n return this._getAllAppliedFilters().filter(f => f.shouldBeDisplayed);\n }\n\n}","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\nexport interface IReportApplyFiltersParams {\n appliedFilters: Record; // the key is the filters category and the value is an array of applied filters from that category\n gamesCount: number;\n}\n\ninterface IFilterEventData {\n action: string;\n label: string;\n actionData?: string;\n}\n\nexport class AdvancedFiltersAnalytics {\n constructor(private readonly services: IServiceFactoryExtended) {\n\n }\n\n private _getLocation() {\n let location = this.services.location.currentUri.pathName.toString()\n if(location !== '/' && location.endsWith('/')) {\n location = location.substring(0, location.length - 1)\n }\n\n return location;\n }\n\n private _sendEvent(filterEventData: IFilterEventData): void {\n this.services.analytics.sendOrbitUserFlowEvent('advanced-filters', filterEventData.action, filterEventData.label, filterEventData.actionData);\n }\n\n reportOpenFilters(): void {\n this._sendEvent({\n action: 'open',\n label: this._getLocation()\n });\n }\n\n reportCloseFilters(): void {\n this._sendEvent({\n action: 'close',\n label: this._getLocation()\n });\n }\n\n reportClearFilters(): void {\n this._sendEvent({\n action: 'clear',\n label: this._getLocation()\n });\n }\n\n reportApplyFiltersByDeepLink(params: IReportApplyFiltersParams): void {\n this._sendEvent({\n action: 'deeplink',\n label: this._getLocation(),\n actionData: JSON.stringify(params)\n });\n }\n\n reportApplyFiltersByButton(params: IReportApplyFiltersParams): void {\n this._sendEvent({\n action: 'apply',\n label: this._getLocation(),\n actionData: JSON.stringify(params)\n });\n }\n\n reportRemoveFilter(filterID: string): void {\n this._sendEvent({\n action: 'remove',\n label: filterID\n });\n }\n}","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {ArenaGameFiltersCategoryEditor} from \"../../arena-filters/categories/arena-game-filters-category-editor\";\nimport {IAdvancedStrategyFiltersEditorViewModel} from \"./advanced-strategy-filters-editor-view-model.interface\";\nimport {IArenaGameFiltersCategory} from \"../../arena-filters/categories/arena-game-filters-category.interface\";\nimport {AdvancedFiltersAnalytics} from \"./advanced-filters-analytics\";\nimport {IAdvancedFiltersEditorToStrategyAdapter} from \"./advanced-filters-editor-to-strategy-adapter\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../arena-filters/filters/arena-game-filter-editor-view-model.interface\";\n\n\n\n\nexport class AdvancedStrategyFiltersEditor implements IAdvancedStrategyFiltersEditorViewModel {\n constructor(private readonly strategy: IAdvancedFiltersEditorToStrategyAdapter,\n private readonly services: IServiceFactoryExtended) {\n\n this._categories = this.filtersCategories.map(c => new ArenaGameFiltersCategoryEditor(c));\n this.analyticsReporter = new AdvancedFiltersAnalytics(this.services);\n }\n\n readonly analyticsReporter: AdvancedFiltersAnalytics;\n\n get filtersCategories(): IArenaGameFiltersCategory[] {\n return this.strategy.filtersCategories;\n }\n\n private _categories: ArenaGameFiltersCategoryEditor[];\n get visibleCategories(): ArenaGameFiltersCategoryEditor[] {\n return this._categories.filter(c => c.visibleFilters.length > 0);\n }\n\n public getAppliedFiltersIds(): string[] {\n let result: string[] = [];\n\n this._categories.forEach(c => {\n result = [\n ...result,\n ...c.getAppliedFiltersIds()\n ];\n\n });\n return result;\n }\n\n\n\n getNumberOfGamesBeforeUserApply(): number {\n return this.services.gamesFilter.getNumberOfGamesBeforeUserApply(this.getAppliedFiltersIds());\n }\n\n openFilters(): void {\n this.analyticsReporter.reportOpenFilters();\n }\n\n private async _executeWithAnalyticsReporting(action: () => Promise) {\n this.strategy.beginFilterAnalyticsReporting();\n await action();\n }\n\n async applyFilters(): Promise {\n if(this.getAppliedFiltersIds().toString() !== this.services.gamesFilter.currentAppliedFiltersIds.toString()) {\n await this._executeWithAnalyticsReporting(async () => {\n await this.services.gamesFilter.applyFilters(this.getAppliedFiltersIds());\n this.analyticsReporter.reportApplyFiltersByButton(this.strategy.getApplyFilterReportingParameters());\n })\n\n }\n }\n\n async removeFilter(filter: IArenaGameFilterEditorViewModel): Promise {\n filter.on = false;\n await this._executeWithAnalyticsReporting(async () => {\n await this.services.gamesFilter.applyFilters(this.getAppliedFiltersIds());\n this.analyticsReporter.reportRemoveFilter(filter.id);\n });\n }\n\n async closeFilters() : Promise {\n (await this.services.drawer).right.back();\n this.analyticsReporter.reportCloseFilters();\n }\n\n async clearFilters(): Promise {\n if(this.services.gamesFilter.isFilterOn) {\n await this._executeWithAnalyticsReporting(async () => {\n await this.services.gamesFilter.clearFilters();\n this.analyticsReporter.reportClearFilters();\n });\n }\n (await this.services.drawer).right.back();\n\n\n }\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const FiltersMobileButtonBox = styledBox('FiltersMobileButtonBox');","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {FiltersMobileButtonBox} from \"../../../filters/filters-games-list-mobile/boxes/menu-button/filters-mobile-button.box\";\nimport {Link} from \"../../../raw-components/link/link\";\nimport React from \"react\";\nimport classNames from \"classnames\";\nimport {ACTIVE} from \"../../../../themes/css-global-classes\";\nimport {observer} from \"mobx-react\";\n\nexport const FiltersMobileButtonComponent = observer(class FiltersMobileButtonComponent extends OrbitComponent<{}> {\n\n private _openPopup = () => {\n this.services.gamesFilter.showFiltersEditor();\n };\n\n render(){\n if(!this.services.gamesFilter.isFilteringAvailable) {\n return null;\n }\n\n if(this.services.arenas.shouldHideFiltersButtonMobile()) {\n return null;\n }\n\n const FilterIcon = this.services.theme.currentTheme.icons.filterIcon;\n\n return (\n \n \n \n )\n }\n});","import styled, {css} from \"styled-components\";\nimport {flexAdaptiveSizeItem} from \"../../../../themes/architecture/css-helpers/flex\";\n\nexport const IndicatorContainerBox = styled.div<{alignAppliedFiltersToCenter: boolean}>`\n display: flex;\n flex-direction: row;\n align-items: center;\n font-size: 14px;\n ${({alignAppliedFiltersToCenter}) => alignAppliedFiltersToCenter ? css`align-self: flex-start` : ''};\n max-width: 100%;\n ${props => props.theme.font.presets.medium};\n ${flexAdaptiveSizeItem}\n`;\n","import styled from \"styled-components\";\nimport {grayColors} from \"../../../../../../themes/architecture/gray-colors\";\nimport {hexToRgba} from \"../../../../../../themes/hex-to-rgba\";\n\nexport const AppliedFilterIndicatorBox = styled.span`\n display: flex;\n flex-direction: row;\n align-items: center;\n border: 2px solid ${hexToRgba(grayColors.gray183 ,0.3)};\n border-radius: 4px;\n padding: 0 12px;\n line-height: 3rem;\n margin-left: 2px;\n`","import styled from \"styled-components\";\n\nexport const AppliedFiltersBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n flex-wrap: wrap;\n row-gap: 5px;\n\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n overflow: -moz-scrollbars-none;\n overflow-x: auto;\n &::-webkit-scrollbar {\n display: none;\n }\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n flex-wrap: nowrap;\n margin-top: 1rem;\n margin-bottom: 1rem;\n &:empty {\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n`","import styled from \"styled-components\";\nimport {XCloseButtonBox} from \"../../../../../../basic-ui-components/x-close-button/x-close-button.box\";\n\nexport const RemoveFilterButtonBox = styled(XCloseButtonBox)`\n width: 14px;\n height: 14px;\n`","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const AppliedFilterNameBox = styledBox(\"AppliedFilterNameBox\")\n","import styled from \"styled-components\";\n\nexport const AppliedFilterContainerBox = styled.div`\n margin-right: 8px;\n &:last-child: {\n margin-right: 0;\n }\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {\n IAdvancedStrategyFiltersEditorViewModel\n} from \"../../../../../services/games-filter/strategies/advanced-filter/advanced-strategy-filters-editor-view-model.interface\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\nimport {IndicatorContainerBox} from \"../../boxes/indicator-container.box\";\nimport {BlankHorizontalSeparatorBox} from \"../../../../../basic-components/blank-separator/blank-horizontal-separator.box\";\nimport {FiltersMobileButtonComponent} from \"../../../../header/top-header-left/filters/filters-mobile-button.component\";\nimport {AppliedFilterIndicatorBox} from \"./boxes/applied-filter-indicator.box\";\nimport {AppliedFiltersBox} from \"./boxes/applied-filters.box\";\nimport {RemoveFilterButtonBox} from \"./boxes/remove-filter-button.box\";\nimport {AppliedFilterNameBox} from \"./boxes/applied-filter-name.box\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {AppliedFilterContainerBox} from \"./boxes/applied-filters-container.box\";\n\ninterface AdvancedGamesFilteringPcIndicatorComponentProps {\n filtersEditor: IAdvancedStrategyFiltersEditorViewModel;\n showFiltersButton?: boolean;\n alignAppliedFiltersToCenter?: boolean;\n}\n\nexport const AppliedFiltersIndicatorForAdvancedFilteringComponent = observer(\n class AppliedFiltersIndicatorForAdvancedFilteringComponent extends OrbitComponent {\n static defaultProps: Partial = {\n showFiltersButton:true,\n alignAppliedFiltersToCenter: true\n };\n\n private _onRemoveFilter = async (filter: IArenaGameFilterEditorViewModel) => {\n await this.props.filtersEditor.removeFilter(filter);\n }\n\n private _renderOneAppliedFilter(filter: IArenaGameFilterEditorViewModel) {\n return (\n \n \n \n \n {filter.text}\n \n \n this._onRemoveFilter(filter)} className={CyClass('cy-remove-advanced-filter-x-button')}/>\n \n\n \n\n )\n }\n\n private _getAppliedFilters(): IArenaGameFilterEditorViewModel[] {\n const filters: IArenaGameFilterEditorViewModel[] = [];\n this.props.filtersEditor.visibleCategories.forEach(category => {\n category.getVisibleAppliedFilters().forEach(f => {\n if(f.on) {\n filters.push(f);\n }\n\n })\n });\n return filters;\n }\n\n private _renderAppliedFilters() {\n\n return (\n \n {this._getAppliedFilters().map(filter => this._renderOneAppliedFilter(filter))}\n \n )\n }\n\n render() {\n return (\n \n \n {this.props.showFiltersButton && }\n\n {this._renderAppliedFilters()}\n\n \n );\n }\n }\n);","import {IArenaGameFiltersCategory} from \"./arena-game-filters-category.interface\";\nimport {\n CategoryDefinitionId,\n IFilterCategoryDefinition\n} from \"../../filters-categories-definitions/filter-category-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport { computed, makeObservable } from \"mobx\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {IArenaGameFilter} from \"../filters/arena-game-filter.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\n\nexport abstract class ArenaGameFiltersCategoryBase implements IArenaGameFiltersCategory {\n constructor(protected readonly categoryDefinition: IFilterCategoryDefinition,\n protected readonly services: IServiceFactoryExtended) {\n makeObservable(this);\n }\n\n abstract get availableFilters(): IArenaGameFilter[];\n abstract get gamesCount(): NullableNumber;\n\n\n get id(): CategoryDefinitionId {\n return this.categoryDefinition.id;\n }\n\n get title(): string {\n return this.categoryDefinition.title;\n }\n\n get isMultiSelect(): boolean {\n return this.categoryDefinition.isMultiSelect;\n }\n\n @computed\n private get _appliedFilters(): IArenaGameFilter[] {\n return this.availableFilters.filter(f => f.isApplied);\n }\n\n @computed\n private get _appliedSubFilters(): IArenaGameFilter[] {\n return this.availableFilters.selectMany(f => f.subFilters.filter(sf => sf.isApplied));\n }\n\n applyFilter(gameInfo: GameInfo, selectedFiltersIDs: string[] = null): ApplyGameFilterResult {\n let filters = this._appliedFilters;\n let subFilters = this._appliedSubFilters;\n\n // selectedFiltersIDs is the filters user select but still not apply. we need it to show the user the number of games that will shown to him before click.\n if(selectedFiltersIDs) {\n filters = this.availableFilters.filter(f => selectedFiltersIDs.includes(f.id));\n subFilters = this.availableFilters.selectMany(f => f.subFilters.filter(sf => selectedFiltersIDs.includes(sf.id)));\n }\n\n if(filters.length === 0 && subFilters.length === 0) {\n return ApplyGameFilterResult.NotApplicable;\n }\n\n return this.categoryDefinition.applyFilters(gameInfo,\n filters.map(arenaFilter => arenaFilter.filterDefinition),\n subFilters.map(subFilter => subFilter.filterDefinition));\n }\n\n isGameIncludedInThisCategory(gameInfo: GameInfo): boolean {\n return this.availableFilters.some(f => f.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame);\n }\n\n get allAppliedFiltersAndSubFilters(): IArenaGameFilter[] {\n return [\n ...this._appliedFilters,\n ...this._appliedSubFilters\n ];\n }\n\n}","import {IArenaGameFilter} from \"./arena-game-filter.interface\";\nimport {IGameFilterDefinition} from \"../../filters-definitions/game-filter-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\n\nexport abstract class ArenaGameFilterBase implements IArenaGameFilter {\n constructor(public readonly filterDefinition: IGameFilterDefinition,\n protected readonly services: IServiceFactoryExtended) {\n }\n\n abstract get subFilters(): IArenaGameFilter[];\n\n readonly isAdhocFilter = false;\n\n\n get id(): string {\n return this.filterDefinition.id;\n }\n\n get text(): string {\n return this.filterDefinition.text;\n }\n\n\n get isApplied(): boolean {\n return this.services.gamesFilter.isFilterApplied(this.filterDefinition.id);\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n return this.filterDefinition.applyFilter(gameInfo);\n }\n\n get gamesCount(): NullableNumber {\n return null;\n }\n\n\n}","import {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport { computed, makeObservable } from \"mobx\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {ArenaGameFilterBase} from \"./arena-game-filter-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {IArenaGameFilter} from \"./arena-game-filter.interface\";\nimport {IGameFilterDefinition} from \"../../filters-definitions/game-filter-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\nexport class DynamicArenaGameFilter extends ArenaGameFilterBase {\n constructor(filterDefinition: IGameFilterDefinition,\n services: IServiceFactoryExtended) {\n super(filterDefinition, services);\n\n makeObservable(this);\n }\n\n @computed\n get games(): GameInfo[] {\n const currentArenaGames = this.services.arenas.getCurrentArena().allArenaGamesForFiltering;\n return currentArenaGames.filter(gameInfo => this.filterDefinition.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame)\n }\n\n get gamesCount(): NullableNumber {\n return this.games.length;\n }\n\n @computed\n get subFilters(): IArenaGameFilter[] {\n return this.filterDefinition.subFilters.map(sf => new DynamicArenaGameFilter(sf, this.services))\n .filter(f => f.gamesCount > 0)\n .sort((f1, f2) => f2.gamesCount - f1.gamesCount);\n }\n}","import {ArenaGameFiltersCategoryBase} from \"./arena-game-filters-category-base\";\nimport { computed, makeObservable } from \"mobx\";\nimport {DynamicArenaGameFilter} from \"../filters/dynamic-arena-game-filter\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {IGameFilterDefinition} from \"../../filters-definitions/game-filter-definition.interface\";\nimport {IFilterCategoryDefinition} from \"../../filters-categories-definitions/filter-category-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\n\nexport class DynamicArenaGameFiltersCategory extends ArenaGameFiltersCategoryBase {\n constructor(categoryDefinition: IFilterCategoryDefinition,\n services: IServiceFactoryExtended) {\n super(categoryDefinition, services);\n\n makeObservable(this);\n }\n\n protected _createArenaGameFilter(filterDefinition: IGameFilterDefinition): DynamicArenaGameFilter {\n return new DynamicArenaGameFilter(filterDefinition, this.services);\n }\n\n /**\n * Restrict available filters to only those that have applicable games in the current arena\n */\n @computed\n get availableFilters(): DynamicArenaGameFilter[] {\n if(this.categoryDefinition.hasItsOwnFiltersOrder) {\n return this._getAvailableFilters();\n } else {\n return this._getAvailableFilters().sort((f1, f2) => f2.gamesCount - f1.gamesCount);\n }\n }\n\n protected _getAvailableFilters(): DynamicArenaGameFilter[]{\n return this.categoryDefinition.availableFilters\n .map(f => this._createArenaGameFilter(f))\n .filter(f => f.gamesCount > 0);\n }\n\n @computed\n get gamesCount(): NullableNumber {\n const uniqueGameTypes = new Set();\n this.availableFilters.forEach(f => {\n f.games.forEach(game => uniqueGameTypes.add(game.gameType))\n });\n return uniqueGameTypes.size;\n }\n}","import React from 'react';\nimport {GamesFilterStrategyBase} from \"../games-filter-strategy-base\";\nimport {AdvancedGamesFilterDrawerRenderer} from \"./advanced-games-filter-drawer-renderer\";\nimport {AdvancedStrategyFiltersEditor} from \"./advanced-strategy-filters-editor\";\nimport {IArenaGameFiltersCategory} from \"../../arena-filters/categories/arena-game-filters-category.interface\";\nimport {ApplyGameFilterResult, IGameFilterEvaluator} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {AND} from \"../../evaluators/and-game-filters-evaluator\";\nimport {\n FiltersMobileButtonComponent\n} from \"../../../../components/header/top-header-left/filters/filters-mobile-button.component\";\nimport {Nullable} from \"../../../../../common/types/nullable-types\";\nimport {\n IFilterIndicatorRenderingOptions,\n FilterIndicatorRenderingLocation\n} from \"../../games-filter.service.interface\";\nimport {\n AppliedFiltersIndicatorForAdvancedFilteringComponent\n} from \"../../../../components/filters/advanced-filtering/indicators/pc-indicator/applied-filters-pc-indicator-for-advanced-filtering.component\";\nimport {DynamicArenaGameFiltersCategory} from \"../../arena-filters/categories/dynamic-arena-game-filters-category\";\nimport {Check} from '@sparkware/app-utils';\nimport {IFilterCategoryDefinition} from '../../filters-categories-definitions/filter-category-definition.interface';\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {AdvancedFiltersAnalytics, IReportApplyFiltersParams} from \"./advanced-filters-analytics\";\nimport {GamesMap} from \"../../../games/games.service.interface\";\nimport {IAdvancedFiltersEditorToStrategyAdapter} from \"./advanced-filters-editor-to-strategy-adapter\";\n\nexport class AdvancedGamesFilterStrategy extends GamesFilterStrategyBase implements IAdvancedFiltersEditorToStrategyAdapter {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this._analyticsReporter = new AdvancedFiltersAnalytics(this.services);\n }\n\n private readonly _analyticsReporter: AdvancedFiltersAnalytics;\n\n protected _createFiltersCategories(): IArenaGameFiltersCategory[] {\n const arenaName = this.services.routing.currentRoute.data?.arenaType;\n if (!arenaName) {\n return [];\n }\n\n const categories = this.services.configuration.data.arenas[arenaName]?.advancedFilters?.categories;\n if (!Check.isArray(categories)) {\n return [];\n }\n \n const filters: IArenaGameFiltersCategory[] = [];\n categories.forEach(category => {\n if (category?.id) {\n const filterCategoryDef = this._factory.createCategoryDefinition(category.id);\n if(filterCategoryDef) {\n filters.push(this._createArenaGameFiltersCategory(filterCategoryDef));\n } else {\n this.services.logger.error(`There is no filter category definition for id ${category.id}`);\n }\n }\n });\n\n return filters;\n }\n\n protected _createArenaGameFiltersCategory(filterCategoryDef: IFilterCategoryDefinition): IArenaGameFiltersCategory {\n return new DynamicArenaGameFiltersCategory(filterCategoryDef, this.services);\n }\n\n protected _createEvaluator(): IGameFilterEvaluator | null {\n return AND(...this.filtersCategories);\n }\n\n private _createFiltersEditor() {\n return new AdvancedStrategyFiltersEditor(this, this.services);\n }\n\n getApplyFilterReportingParameters(): IReportApplyFiltersParams {\n const appliedFilters: Record = {};\n this.filtersCategories.forEach(category => {\n const appliedFiltersInCategory = category.allAppliedFiltersAndSubFilters;\n if(appliedFiltersInCategory.length > 0) {\n appliedFilters[category.id] = appliedFiltersInCategory.map(f => f.id);\n }\n })\n const gamesCount = this.services.arenas.getCurrentArena().filteredGamesCount;\n return {\n gamesCount: gamesCount,\n appliedFilters: appliedFilters\n };\n }\n\n protected _reportApplyFiltersByDeepLink(): void {\n\n this._analyticsReporter.reportApplyFiltersByDeepLink(this.getApplyFilterReportingParameters());\n\n }\n\n renderMobileFiltersIndicator(): React.ReactElement {\n if(this.services.mediaQuery.lAndBelow) {\n return ();\n } else {\n return null;\n }\n }\n\n renderFiltersIndicator(): Nullable {\n if(this.services.mediaQuery.lAndBelow) {\n return {\n location: FilterIndicatorRenderingLocation.BelowArenaTitle,\n reactElement: ()\n }\n } else {\n return {\n location: FilterIndicatorRenderingLocation.NextToArenaTitle,\n reactElement: ()\n };\n }\n }\n\n async showFiltersEditor(): Promise {\n (await this.services.drawer).right.push(new AdvancedGamesFilterDrawerRenderer(this.services, this._createFiltersEditor()));\n }\n\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number {\n let gamesToShowIfUserApply = this._filterGamesBeforeApplyClicked(filterIDS);\n return Object.keys(gamesToShowIfUserApply).length;\n }\n\n private _filterGamesBeforeApplyClicked(filterIDS: string[]): GamesMap {\n const currentArenaGames = this.services.arenas.getCurrentArena().allArenaGamesForFiltering;\n\n if(!this.currentFilters.some(f => filterIDS.includes(f.id))) {\n return currentArenaGames;\n }\n\n const evaluator = this._createEvaluator();\n\n const result: GamesMap = {};\n\n for(let game of Object.values(currentArenaGames)) {\n const filterResult = evaluator.applyFilter(game, filterIDS);\n if(ApplyGameFilterResult.IncludeGame === filterResult) {\n result[game.gameType] = game;\n }\n }\n\n return result;\n }\n\n}","import React from \"react\";\nimport {ArenaBaseModel, VideoSlidesFilterConfig} from \"../arena-base.model\";\nimport {\n ArenaGamesGridConfiguration,\n SwiperGamesListConfiguration\n} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport {IGamesListModel} from \"../../lists/games-list-model.interface\";\nimport {ListsSortOrderStorage} from \"../../lists-sort-order-storage\";\nimport {HomePageComponent} from \"../../../../../components/home-page/home-page.component\";\nimport {HOME_PAGE_ARENA, NEW_GAMES_ARENA_NAME} from \"../../../arena-consts\";\nimport {GAME_ORIENTATION_IDS} from \"../../../../user-game-orientation/user-game-orientation.service.interface\";\nimport { reaction } from \"mobx\";\nimport {GameInfo} from \"../../../../games/game-info\";\nimport {ArenaFiltersConfigurationMap} from \"../arena-view-model.interface\";\nimport {IGamesFilterStrategy} from \"../../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {Nullable} from \"../../../../../../common/types/nullable-types\";\nimport {AdvancedGamesFilterStrategy} from \"../../../../games-filter/strategies/advanced-filter/advanced-games-filter.strategy\";\n\nexport class HomePageArenaModel extends ArenaBaseModel {\n\n constructor(services: IServiceFactoryExtended, postLoginListsSortOrderStorage: ListsSortOrderStorage) {\n super(HOME_PAGE_ARENA, services, postLoginListsSortOrderStorage);\n\n reaction(\n () => this.services.routing.currentRoute,\n (currentRoute) => {\n if (currentRoute.routeDefinition.data?.arenaType === NEW_GAMES_ARENA_NAME) {\n this.services.homepage.resetNewAddedGames();\n }\n }, {\n fireImmediately: true\n }\n );\n }\n\n get maxSwipersToShow(): number {\n return 40;\n }\n\n get maxGamesToShowInList(): number {\n return 18\n }\n\n get aiEngine(): string {\n return \"\";\n }\n\n renderArena(): React.ReactElement | null {\n return ();\n }\n\n protected _getSwiperIdToPutOnTop(): number[] | null {\n //REQUIREMENT 1886942 - exclude live casino orientation players\n const gameGroupOrientation = this.services.userGameOrientation.gameGroup;\n if (gameGroupOrientation?.groupId && gameGroupOrientation?.groupId === GAME_ORIENTATION_IDS.LIVE_CASINO ) {\n return\n }\n\n return this.services.abTestingFeatureDataProvider.listOnTop;\n }\n\n protected _sortSwipersByAI(swipers: IGamesListModel[]): IGamesListModel[] {\n if(this._isUsingExternalAIForSwipersSorting) {\n return swipers;\n }\n\n return super._sortSwipersByAI(swipers);\n }\n\n protected _getSwipersConfigurations(): SwiperGamesListConfiguration[] {\n return this.services.configuration.data.homePage.gamesLists || [];\n }\n protected _getGridsConfigurations(): ArenaGamesGridConfiguration[] {\n return []\n }\n\n protected _getPromotionalBannerConfig() {\n const bannerConfig = this.services.configuration.data.homePage.promotionalBanner;\n if(!bannerConfig || this.services.miniOrbit.isEnabled) {\n return null;\n }\n\n return {\n position: bannerConfig.displayPlace + 1,\n templateID: bannerConfig.templateID,\n componentID: bannerConfig.componentID,\n fallbackComponent: bannerConfig.fallbackComponent,\n bannerAdminPlaceholderId: bannerConfig.bannerAdminPlaceholderId\n };\n }\n\n protected _getVideoSlidesFilterConfig(): Nullable {\n const videoSlideFilterConfig = this.services.configuration.data.homePage.videoSlidesFilter;\n if(!videoSlideFilterConfig) {\n return null;\n }\n\n return {\n position: videoSlideFilterConfig.position,\n filterIds: videoSlideFilterConfig.filterIds\n }\n }\n\n filterGamesByArenaType(gamesInfo: GameInfo[]): GameInfo[] {\n return gamesInfo;\n }\n\n get allArenaGamesForFiltering(): GameInfo[] {\n return [];\n }\n\n get filtersConfigurationMap(): ArenaFiltersConfigurationMap {\n return {};\n }\n\n getGamesFilteringStrategy(): IGamesFilterStrategy {\n return new AdvancedGamesFilterStrategy(this.services);\n }\n}","import {ArenaPictureDefaultBox} from './arena-picture.default.box';\n\nexport const ArenaPictureBox = ArenaPictureDefaultBox;","import styled from 'styled-components';\nimport { Image } from '../../../../../../raw-components/image/image';\n\n//info-image default\nexport const ArenaPictureDefaultBox = styled(Image)`\n display: block;\n min-height: 20rem;\n\n width: 372px;\n height: 200px;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n width: 282px;\n height: 175px;\n }\n`;\n\n","import {ArenaTitleDefaultBox} from './arena-title.default.box';\n\n\nexport const ArenaTitleBox = ArenaTitleDefaultBox;","import styled from 'styled-components';\n\n//info-title default\nexport const ArenaTitleDefaultBox = styled.div`\n font-size: 1.5rem;\n color: ${props => props.theme.colors.textLight};\n font-weight: 600;\n padding-top: 3rem;\n padding-left: 0.5rem;\n`;","import {ArenaDescriptionTextDefaultBox} from './arena-description-text.default.box';\n\nexport const ArenaDescriptionTextBox = ArenaDescriptionTextDefaultBox;","import styled from 'styled-components';\n\nexport const ArenaDescriptionTextDefaultBox = styled.div`\n font-size: 1.4rem;\n ${({theme}) => theme.font.presets.regular};\n color: ${props => props.theme.colors.textMiddleDark};\n font-weight: 300;\n line-height: normal;\n padding-top: 1rem;\n`;","import styled, {keyframes} from 'styled-components';\nimport {STICKY} from '../../../../../themes/css-global-classes';\n\nconst lobbyInfoKeyframes = keyframes`\n 0%{\n transform: translate(0, 13rem);\n }\n 25%{\n transform: translate(0, 15rem);\n }\n 50%{\n transform: translate(0, 18rem);\n }\n 100%{\n transform: translate(0, 22rem);\n }\n`;\n\nexport const LobbyGameInfoDefaultBox = styled.div`\n position: absolute;\n right: 0;\n top: 0;\n width: 375px;\n margin-right: 2.5rem;\n \n\n &.${STICKY} {\n position: fixed;\n animation: ${lobbyInfoKeyframes} 0.5s ease-in-out forwards;\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n width: 285px;\n }\n\n`;\n","import {LobbyGameInfoDefaultBox} from './lobby-game-info.default.box';\n\nexport const LobbyGameInfoBox = LobbyGameInfoDefaultBox;","import React from 'react';\nimport {observer} from 'mobx-react';\nimport classNames from 'classnames';\nimport { OrbitComponentWithState } from '../../../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport { AspectRatioContainerComponent } from '../../../../raw-components/aspect-ratio-container/aspect-ratio-container.component';\nimport {ArenaPictureBox} from './boxes/arena-picture/arena-picture.box';\nimport {ArenaTitleBox} from './boxes/arena-title/arena-title.box';\nimport {ArenaDescriptionTextBox} from './boxes/arena-description-text/arena-description-text.box';\nimport {LobbyGameInfoBox} from '../../boxes/lobby-game-info/lobby-game-info.box';\nimport {STICKY} from '../../../../../themes/css-global-classes';\n\nexport interface ArenaInfoPreviewComponentProps {\n isSticky?: boolean;\n arenaInfo: {\n previewImage: string;\n title: string;\n description: string;\n }\n}\n\nexport interface ArenaInfoPreviewComponentState {\n arenaPictureLoading: boolean;\n}\n\nexport const ArenaInfoPreviewComponent = observer(\n class ArenaInfoPreviewComponent extends OrbitComponentWithState {\n state: ArenaInfoPreviewComponentState = {\n arenaPictureLoading: false\n }\n\n render() {\n\n\n let title = this.services.translation.translate(this.props.arenaInfo.title);\n\n return (\n \n \n {\n this.setState({arenaPictureLoading: true});\n }}\n onSettled={() => {\n this.setState({arenaPictureLoading: false});\n }}\n />\n \n \n {title}\n \n \n {this.services.translation.translate(this.props.arenaInfo.description)}\n \n \n );\n }\n }\n);\n\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../../../../base-components/orbit-component/orbit-component';\nimport {SectionTitleBox} from '../../../../common/boxes/section-title/section-title.box';\n\n\nexport interface PcGamePreviewTitleComponentProps {\n gameTitle: string;\n}\n\nexport const PcGamePreviewTitleComponent = observer(\n class PcGamePreviewTitleComponent extends OrbitComponent {\n\n //className={`game-title general-title game-preview`}\n render() {\n return (\n \n {this.props.gameTitle}\n \n );\n }\n }\n);","import React from 'react';\nimport {TrailerOrStripeImageComponent} from '../../../common/trailer-or-stripe-image/trailer-or-stripe-image.component';\nimport {GamePreviewInfoContainerComponent} from '../../../common/game-info-container/game-preview-info-container.component';\nimport {observer} from 'mobx-react';\nimport {PcGamePreviewTitleComponent} from './title/pc-game-preview-title.component';\nimport {LobbyGameInfoBox} from '../../boxes/lobby-game-info/lobby-game-info.box';\nimport classNames from 'classnames';\nimport {STICKY} from '../../../../../themes/css-global-classes';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {ComponentServicesPick} from \"../../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../../react-hooks/with-services\";\n\n\nexport interface GameInfoPreviewComponentProps extends ComponentServicesPick<'lobbyGameInfoPreview'>{\n isSticky?: boolean;\n gameInfo: GameInfo;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const _onMouseEnter = () => {\n props.lobbyGameInfoPreview.pinCurrentGamePreview();\n };\n\n const _onMouseLeave = () => {\n props.lobbyGameInfoPreview.unPinCurrentGamePreview();\n };\n\n let gameInfo = props.gameInfo;\n return (\n \n \n }/>\n \n );\n})\n\nexport const GameInfoPreviewComponent = withServices(ComponentBody, ['lobbyGameInfoPreview']);\n\n\n","import React, {useEffect} from 'react';\nimport {ArenaInfoPreviewComponent} from './parts/arena-info-preview/arena-info-preview.component';\nimport {GameInfoPreviewComponent} from './parts/game-info-preview/game-info-preview.component';\nimport {observer} from 'mobx-react';\nimport {IStickyHandler} from '../../sticky-handler/sticky-handler.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\n\nexport interface LobbyGamesInfoComponentProps extends ComponentServicesPick<'lobbyGameInfoPreview'>{\n stickyHandler?: IStickyHandler;\n arenaInfo: {\n previewImage: string;\n title: string;\n description: string;\n }\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n useEffect(() => {\n if(!services.device.isMobile) {\n props.lobbyGameInfoPreview.enableGamePreview();\n }\n \n return () => {\n if(!services.device.isMobile) {\n props.lobbyGameInfoPreview.disableGamePreview();\n }\n }\n \n }, [props.lobbyGameInfoPreview, services.device.isMobile]);\n\n\n if (services.device.isMobile) {\n return null;\n }\n\n let enabledOnPC = services.configuration.data.generalSettings?.gamesPreviewConfig?.enabledOnPC;\n if(Check.isNullOrUndefined(enabledOnPC)) {\n enabledOnPC = true;\n }\n\n if(!enabledOnPC) {\n return null;\n }\n\n if (props.lobbyGameInfoPreview.currentPreviewedGame) {\n return ();\n } else {\n return ();\n }\n \n})\n\nexport const PcGameInfoPreviewComponent = withServices(ComponentBody, ['lobbyGameInfoPreview']);\n","import styled from \"styled-components\";\nimport {LOBBY_PAGE} from \"../../../themes/css-global-classes\";\n\nexport const SeoBreadcrumbsContainerBox = styled.div`\n .${LOBBY_PAGE} &{\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n margin-top: 55px;\n }\n }\n`;","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {SeoSectionConfiguration} from '../../../services/configurations/config-data-sections/arenas.configuration';\nimport {CmsBannerComponent} from '../../cms-banner/cms-banner.component';\nimport {SeoBreadcrumbsContainerBox} from \"./seo-breadcrumbs-container.box\";\n\nexport interface SeoBreadCrumbsComponentProps {\n arenaName: string;\n config: SeoSectionConfiguration;\n}\n\nexport class SeoBreadCrumbsComponent extends OrbitComponent {\n render() {\n if(!this.props.config.display || this.services.device.hybrid.isEmbedded) {\n return null;\n }\n\n return (\n \n \n \n\n )\n }\n}\n","export const ARENA_TYPES = {\n WIDE_ARENA: \"wide-arena\"\n};\n\n","import React from 'react';\nimport classNames from \"classnames\";\nimport {\n ArenaConfiguration,\n} from '../../../services/configurations/config-data-sections/arenas.configuration';\nimport {TopImageComponent} from '../../top-image/top-image.component';\nimport {LobbyHeaderComponent} from '../../lobby-header/lobby-header.component';\nimport {PcGameInfoPreviewComponent} from '../../lobby-game-info-preview/pc-game-info-preview/pc-game-info-preview.component';\nimport {observer} from 'mobx-react';\nimport {SeoBreadCrumbsComponent} from '../seo-bread-crumbs/seo-bread-crumbs.component';\nimport {IStickyHandler} from \"../../sticky-handler/sticky-handler.interface\";\nimport {ARENA_TYPES} from \"./casino-arena.template-types\";\nimport {LOBBY_PAGE} from '../../../themes/css-global-classes';\nimport {LobbyWrapperBox} from \"../../../basic-components/lobby-wrapper/lobby-wrapper.box\";\nimport {LobbyGridBox} from \"../../../basic-components/lobby-grid/lobby-grid.box\";\nimport {LinkToOfferComponent} from \"../../link-to-offer/link-to-offer.component\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {ArenaGamesListsComponent} from \"../../arena-games-lists/arena-games-lists.component\";\nimport {DailyDealComponent} from \"../../daily-deal/daily-deal.component\";\nimport {FreeToPlayAnimatedIconComponent} from '../../free-to-play-animated-icon/free-to-play-animated-icon.component';\n\n\nexport interface LobbyArenaComponentProps {\n arenaName: string;\n}\n\nexport const CasinoArenaComponent = observer(\n class CasinoArenaComponent extends OrbitComponent {\n\n private _stickyHandler: IStickyHandler;\n\n private get stickyHandler(): IStickyHandler {\n if (!this._stickyHandler) {\n this._stickyHandler = this.services.stickyHandlerFactory.createStickyHandler();\n }\n return this._stickyHandler;\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this.services.dom.body.classList.remove(LOBBY_PAGE);\n this.stickyHandler.dispose();\n }\n\n private get config(): ArenaConfiguration {\n return this.services.arenas.getArenaConfig(this.props.arenaName);\n }\n\n\n private _renderLinkToOffer() {\n return (\n <>\n \n \n \n );\n }\n\n\n\n render() {\n\n let sideBarInfo = {\n title: \"\",\n description: \"\",\n previewImage: \"\"\n };\n\n if (this.config.infoSideBar) {\n sideBarInfo = {\n title: this.config.infoSideBar.infoTitle,\n description: this.config.infoSideBar.infoText,\n previewImage: this.config.infoSideBar.infoImage\n };\n }\n\n return (\n <>\n \n \n \n\n \n \n \n \n {\n (this.config.arenaType !== ARENA_TYPES.WIDE_ARENA) && \n }\n {this._renderLinkToOffer()}\n \n \n\n \n \n );\n }\n }\n);","import {ArenaFiltersConfigurationMap} from \"./arenas/arena-view-model.interface\";\nimport {NullableUndefined} from \"../../../../common/types/nullable-types\";\n\nexport function filtersConfigurationToMap(filtersConfiguration: NullableUndefined): ArenaFiltersConfigurationMap {\n return (filtersConfiguration ?? []).toDictionary(filterId => filterId, \n (filterId, index) => {\n return {\n filterId: filterId,\n index: index\n }\n });\n }\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n\nexport const FilterLinkIconBox = styledBox('FilterLinkIconBox');\n","export enum SUB_GAME_GROUP {\n LIVE_BLACKJACK = \"Live Blackjack\",\n LIVE_ROULETTE = \"Live Roulette\",\n LIVE_BACCART = \"Live Baccarat\",\n LIVE_POKER = \"Live Poker\",\n LIVE_SLOT = \"Live Slot\",\n LIVE_GAME_SHOWS = \"Live Game Shows\"\n}","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const FilterLinkBox = styledBox('FilterLinkBox');\n","import React from 'react';\nimport {Link} from '../../raw-components/link/link';\nimport {FilterLinkIconBox} from \"./boxes/icon/filter-link-icon.box\";\nimport {ACTIVE} from \"../../../themes/css-global-classes\";\nimport classNames from \"classnames\";\nimport {observer} from \"mobx-react\";\nimport {FilterLinkBox} from \"./boxes/filter-link.box\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\n\nexport interface FilterLinkComponentProps {\n filter: IArenaGameFilterEditorViewModel,\n onChange: (filter: IArenaGameFilterEditorViewModel) => void;\n}\n\nexport const FilterLinkComponent = observer(\n class FilterLinkComponent extends OrbitComponent {\n\n private _onFilterClick = () => {\n this.props.onChange(this.props.filter);\n };\n\n render() {\n return (\n \n \n {this.props.filter.text}\n \n );\n }\n }\n);\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../themes/architecture/styled-by-device\";\nimport {CssRule} from \"../../../themes/architecture/css-helpers/css-rule\";\n\nconst CommonStyles = styled.div`\n display: flex;\n flex-direction: row;\n margin: 0;\n`;\n\nconst PCBox = CommonStyles;\n\nconst MobileBox = styled(CommonStyles)`\n margin: 10px auto;\n display: grid;\n grid-template-columns: repeat(3, 130px);\n grid-gap: 10px;\n justify-content: center;\n \n ${CssRule.For.mobile.landscape.build()} & {\n grid-template-columns: repeat(5, 130px);\n }\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n grid-template-columns: repeat(3, 100px);\n \n ${CssRule.For.mobile.landscape.build()} & {\n grid-template-columns: repeat(5, 100px);\n }\n }\n`;\n\n\nexport const FiltersGamesListDefaultBox = styledByDevice(PCBox, MobileBox);","import {FiltersGamesListDefaultBox} from \"./filters-games-list.default.box\";\n\nexport const FiltersGamesListBox = FiltersGamesListDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {FilterLinkComponent} from '../filter-link/filter-link.component';\nimport {FiltersGamesListBox} from \"./filters-games-list.box\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\n\nexport interface FilterLinkListComponentProps {\n filters: IArenaGameFilterEditorViewModel[];\n onToggle: (filter: IArenaGameFilterEditorViewModel) => void\n}\nexport class FilterLinkListComponent extends OrbitComponent {\n\n private _toggleHandler = (filter: IArenaGameFilterEditorViewModel) => {\n this.props.onToggle(filter);\n };\n\n private _renderOneFilter(filter: IArenaGameFilterEditorViewModel) {\n return (\n \n );\n }\n\n render() {\n return (\n \n {this.props.filters.map(filter => this._renderOneFilter(filter))}\n \n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const FiltersGamesMobilePopupBox = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n background: ${props => props.theme.colors.background};\n z-index: 1;\n`;","import styled from \"styled-components\";\n\nexport const FiltersMobileButtonsDefaultBox = styled.div`\n padding-bottom: 3rem;\n margin-top: auto;\n`;","import {FiltersMobileButtonsDefaultBox} from \"./filters-mobile-buttons.default.box\";\n\nexport const FiltersMobileButtonsBox = FiltersMobileButtonsDefaultBox;","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {FilterLinkListComponent} from '../filter-link-list/filter-link-list.component';\nimport {FiltersGamesMobilePopupBox} from \"./boxes/popup/filters-games-mobile-popup.box\";\nimport {FiltersMobileButtonsBox} from \"./boxes/popup/menu/filters-mobile-buttons.box\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport { ModalDialogActionsComponent } from '../../modal-dialog/modal-dialog-actions.component';\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\nimport {\n ISimpleStrategyFiltersEditorViewModel\n} from \"../../../services/games-filter/strategies/simple-games-filter/simple-strategy-filters-editor-view-model.interface\";\n\n\nexport interface FiltersGamesListMobileComponentProps {\n dialogHandler: IModalDialogHandler;\n filtersEditor: ISimpleStrategyFiltersEditorViewModel;\n}\n\nexport const FiltersGamesListMobileComponent = observer(\n class FiltersGamesListMobileComponent extends OrbitComponent {\n\n\n private _closePopup = () => {\n this.props.dialogHandler.close();\n };\n\n private _applyFilters = async () => {\n await this.props.filtersEditor.applyFilters();\n const checkedFiltersIds = this.props.filtersEditor.visibleFilters.filter(f => f.on).map(f => f.id);\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",this.services.routing.currentRoute.data.arenaType, checkedFiltersIds.join(','));\n this._closePopup();\n };\n\n private _clearFilters = async () => {\n this.props.filtersEditor.visibleFilters.forEach(f => {\n f.on = false;\n });\n\n await this._applyFilters();\n\n };\n\n private _renderPopupButtons() {\n return (\n \n );\n }\n\n private _onToggleFilter = (filter: IArenaGameFilterEditorViewModel) => {\n filter.toggleFilter();\n }\n\n render() {\n\n if (this.props.filtersEditor.visibleFilters.length === 0) {\n return null;\n }\n\n return (\n \n \n {this._renderPopupButtons()}\n \n )\n }\n }\n);\n\n","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {ArenaGameFilterEditor} from \"../../arena-filters/filters/arena-game-filter-editor\";\nimport {ISimpleStrategyFiltersEditorViewModel} from \"./simple-strategy-filters-editor-view-model.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IArenaGameFiltersCategory} from \"../../arena-filters/categories/arena-game-filters-category.interface\";\n\nexport class SimpleStrategyFiltersEditor implements ISimpleStrategyFiltersEditorViewModel {\n constructor(private readonly filtersCategories: IArenaGameFiltersCategory[],\n private readonly services: IServiceFactoryExtended) {\n this._filters = this._createFiltersEditor();\n }\n\n private readonly _filters: ArenaGameFilterEditor[];\n\n get visibleFilters(): ArenaGameFilterEditor[] {\n return this._filters.filter(f => f.shouldBeDisplayed);\n }\n\n private _createFiltersEditor(): ArenaGameFilterEditor[] {\n const result: ArenaGameFilterEditor[] = [];\n\n this.filtersCategories.forEach(c => {\n c.availableFilters.forEach(f => {\n result.push(new ArenaGameFilterEditor(f));\n });\n });\n\n return this._sortFilters(result);\n }\n\n private _sortFilters(filters: ArenaGameFilterEditor[]): ArenaGameFilterEditor[] {\n\n //sorting the filters by the order in which they were defined in config.json\n const filtersConfigurations = this.services.arenas.getCurrentArena().filtersConfigurationMap;\n\n if(Check.isEmpty(filtersConfigurations)) {\n return filters;\n }\n\n return filters.sort((f1, f2) => filtersConfigurations[f1.id]?.index - filtersConfigurations[f2.id]?.index);\n }\n\n async applyFilters(): Promise {\n await this.services.gamesFilter.applyFilters(this._filters.filter(f => f.on).map(f => f.id));\n }\n\n}","import {GameInfo} from '../../../games/game-info';\nimport {IArenaGameFiltersCategory} from \"../../arena-filters/categories/arena-game-filters-category.interface\";\nimport { computed, makeObservable } from \"mobx\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\n/**\n * This class is used to apply a filter that does something like this:\n * Show all games that doesn't fall in any of the other available games filters categories for the current arena\n */\n\nexport class OtherFilterDefinition extends GameFilterDefinitionBase {\n constructor(services: IServiceFactoryExtended, private readonly allOthersCategories: IArenaGameFiltersCategory[]) {\n super(services);\n\n makeObservable(this);\n }\n\n get id(): string {\n return 'other';\n }\n\n get text(): string {\n return this.services.translation.translate('OTHER');\n }\n\n @computed\n get currentArenaCategories(): IArenaGameFiltersCategory[] {\n return this.allOthersCategories.filter(c => c.availableFilters.length > 0);\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n const categoriesInCurrentArena = this.currentArenaCategories;\n for(let category of categoriesInCurrentArena) {\n if(category.isGameIncludedInThisCategory(gameInfo)) {\n return ApplyGameFilterResult.ExcludeGame;\n }\n }\n\n return ApplyGameFilterResult.IncludeGame;\n }\n\n}\n","import {IArenaGameFiltersCategory} from \"../arena-filters/categories/arena-game-filters-category.interface\";\nimport {CategoryDefinitionId, IFilterCategoryDefinition} from \"./filter-category-definition.interface\";\nimport {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {OtherFilterDefinition} from \"../filters-definitions/other/other.filter-definition\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../evaluators/game-filter-evaluator.interface\";\n\nexport class OtherFiltersCategoryDefinition implements IFilterCategoryDefinition {\n\n constructor(otherAvailableCategories: IArenaGameFiltersCategory[],\n private readonly services: IServiceFactoryExtended) {\n this.availableFilters = [\n new OtherFilterDefinition(services, otherAvailableCategories)\n ];\n }\n getFiltersForGame(gameInfo: GameInfo): string[] {\n throw new Error(\"Method not implemented.\");\n }\n\n readonly id: CategoryDefinitionId = null;\n\n applyFilters(gameInfo: GameInfo, filters: IGameFilterDefinition[]): ApplyGameFilterResult {\n return this.availableFilters[0].applyFilter(gameInfo);\n }\n\n get title(): string {\n return this.services.translation.translate('OTHER');\n }\n\n readonly availableFilters: IGameFilterDefinition[];\n\n get isMultiSelect(): boolean {\n return false;\n }\n\n readonly hasItsOwnFiltersOrder = false;\n}","import {ArenaGameFilterBase} from \"./arena-game-filter-base\";\nimport {IArenaGameFilter} from \"./arena-game-filter.interface\";\n\nexport class StaticArenaGameFilter extends ArenaGameFilterBase{\n get subFilters(): IArenaGameFilter[] {\n return [];\n }\n}\n","import {Check} from \"@sparkware/app-utils\";\nimport {StaticArenaGameFilter} from \"../filters/static-arena-game-filter\";\nimport {ArenaGameFiltersCategoryBase} from \"./arena-game-filters-category-base\";\nimport { computed, makeObservable } from \"mobx\";\nimport {IArenaGameFilter} from \"../filters/arena-game-filter.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {IFilterCategoryDefinition} from \"../../filters-categories-definitions/filter-category-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\nexport class StaticArenaGameFiltersCategory extends ArenaGameFiltersCategoryBase {\n constructor(categoryDefinition: IFilterCategoryDefinition,\n services: IServiceFactoryExtended) {\n super(categoryDefinition, services);\n\n makeObservable(this);\n }\n\n /**\n * Restrict available filters to only those that are defined in config.json for current arena\n */\n @computed\n get availableFilters(): IArenaGameFilter[] {\n return this._createFiltersForCurrentArena();\n }\n private _createFiltersForCurrentArena(): IArenaGameFilter[] {\n\n const currentArenaFiltersConfigurations = this.services.arenas.getCurrentArena().filtersConfigurationMap;\n if(Check.isEmpty(currentArenaFiltersConfigurations)) {\n return [];\n }\n\n return this.categoryDefinition.availableFilters\n .filter(f => currentArenaFiltersConfigurations[f.id])\n .map(f => new StaticArenaGameFilter(f, this.services));\n }\n\n get gamesCount(): NullableNumber {\n return null;\n }\n}","import styled from \"styled-components\";\n\nexport const FiltersGameListPcDefaultBox = styled.div`\n width:100%;\n padding-left: 4rem;\n padding-right: 4rem;\n padding-top: 1rem;\n`;","import {FiltersGameListPcDefaultBox} from \"./filters-game-list-pc.default.box\";\n\nexport const FiltersGameListPcBox = FiltersGameListPcDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {FilterLinkListComponent} from '../filter-link-list/filter-link-list.component';\nimport {FiltersGameListPcBox} from \"./boxes/filters-game-list-pc.box\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\nimport {\n ISimpleStrategyFiltersEditorViewModel\n} from \"../../../services/games-filter/strategies/simple-games-filter/simple-strategy-filters-editor-view-model.interface\";\n\n\ninterface FiltersGamesListPcComponentProps {\n filtersEditor: ISimpleStrategyFiltersEditorViewModel;\n}\nexport const FiltersGamesListPcComponent = observer(\n class FiltersGamesListPcComponent extends OrbitComponent {\n\n\n private _toggleFilter = async (filter: IArenaGameFilterEditorViewModel) => {\n filter.toggleFilter();\n await this.props.filtersEditor.applyFilters();\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",this.services.routing.currentRoute.data.arenaType, filter.id);\n };\n\n render() {\n\n if(this.props.filtersEditor.visibleFilters.length === 0) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n }\n);\n","import {IArenaGameFilter} from \"./arena-game-filter.interface\";\nimport {IGameFilterDefinition} from \"../../filters-definitions/game-filter-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\n\nexport class AdhocArenaGameFilter implements IArenaGameFilter {\n constructor(public readonly filterDefinition: IGameFilterDefinition,\n private readonly services: IServiceFactoryExtended) {\n }\n\n readonly isAdhocFilter = true;\n\n get id(): string {\n return this.filterDefinition.id;\n }\n\n get text(): string {\n return this.filterDefinition.text;\n }\n\n get isApplied(): boolean {\n return this.services.gamesFilter.isFilterApplied(this.id);\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n return this.filterDefinition.applyFilter(gameInfo);\n }\n \n readonly gamesCount: NullableNumber = null;\n\n readonly subFilters: IArenaGameFilter[] = [];\n}","import {IGameFilterDefinition} from '../game-filter-definition.interface';\nimport {GameInfo} from '../../../games/game-info';\nimport {removeSpaces} from \"../../../../../utils/string-helpers\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\n\nexport class CompanyFilterDefinitions implements IGameFilterDefinition {\n constructor(public readonly id: string,\n private readonly _companyName: string) {\n\n }\n getFiltersForGame(gameInfo: GameInfo): string[] {\n throw new Error('Method not implemented.');\n }\n\n get text(): string {\n return this._companyName;\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if (removeSpaces(gameInfo.companyName.toLowerCase()) === removeSpaces(this._companyName.toLowerCase())) {\n return ApplyGameFilterResult.IncludeGame;\n }\n return ApplyGameFilterResult.ExcludeGame;\n }\n\n readonly subFilters: IGameFilterDefinition[] = [];\n\n}\n","import {IArenaGameFiltersCategory} from \"./arena-game-filters-category.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {Nullable, NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {AdhocArenaGameFilter} from \"../filters/adhoc-arena-game-filter\";\nimport {CompanyFilterDefinitions} from \"../../filters-definitions/company/company.filter-definitions\";\nimport { computed, makeObservable } from \"mobx\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {AND} from \"../../evaluators/and-game-filters-evaluator\";\nimport {CategoryDefinitionId} from \"../../filters-categories-definitions/filter-category-definition.interface\";\nimport {\n GameVendorFiltersCategoryDefinition\n} from \"../../filters-categories-definitions/game-vendor.filters-category-definition\";\nimport {IArenaGameFilter} from \"../filters/arena-game-filter.interface\";\n\nexport class AdhocArenaGamesFiltersCategory implements IArenaGameFiltersCategory {\n constructor(private readonly services: IServiceFactoryExtended) {\n makeObservable(this);\n }\n\n readonly id: CategoryDefinitionId = 'adHoc';\n readonly title: string = 'Ad hoc filters';\n readonly gamesCount: NullableNumber = null;\n\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n\n if(this.availableFilters.length === 0) {\n return ApplyGameFilterResult.NotApplicable;\n }\n\n return AND(...this.availableFilters).applyFilter(gameInfo);\n }\n\n\n isGameIncludedInThisCategory(gameInfo: GameInfo): boolean {\n return this.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame;\n }\n\n @computed\n get availableFilters(): AdhocArenaGameFilter[] {\n return this._createDynamicFilters();\n }\n\n get allAppliedFiltersAndSubFilters(): IArenaGameFilter[] {\n return this.availableFilters.filter(f => f.isApplied);\n }\n\n private _createDynamicFilters(): AdhocArenaGameFilter[] {\n const result: AdhocArenaGameFilter[] = [];\n\n\n\n const currentArenaFiltersConfigurations = this.services.arenas.getCurrentArena().filtersConfigurationMap;\n\n for(let appliedFilterId of this.services.gamesFilter.currentAppliedFiltersIds) {\n if(!currentArenaFiltersConfigurations[appliedFilterId]) {\n const dynamicFilterDefinition = this._createDynamicFilterById(appliedFilterId);\n if(dynamicFilterDefinition) {\n result.push(dynamicFilterDefinition);\n }\n }\n }\n\n return result;\n }\n\n private _createDynamicFilterById(filterId: string): Nullable {\n const parts = filterId.split('_');\n if(parts.length < 2) {\n return null;\n }\n\n switch (parts[0]) {\n case 'vendor':\n const vendorsCategory = new GameVendorFiltersCategoryDefinition(this.services);\n const filter = vendorsCategory.getAllPreferredVendorsFilters().find(f => f.id === filterId) ?? null;\n if(filter) {\n return new AdhocArenaGameFilter(filter, this.services)\n } else {\n return null;\n }\n\n case 'company':\n return new AdhocArenaGameFilter(new CompanyFilterDefinitions(filterId, parts[1]), this.services);\n default:\n return null;\n\n }\n }\n\n get isMultiSelect(): boolean {\n return false;\n }\n}","import React from 'react';\nimport {\n FiltersGamesListMobileComponent\n} from \"../../../../components/filters/filters-games-list-mobile/filters-games-list-mobile.component\";\nimport {SimpleStrategyFiltersEditor} from \"./simple-strategy-filters-editor\";\nimport {GamesFilterStrategyBase} from \"../games-filter-strategy-base\";\nimport {OtherFiltersCategoryDefinition} from \"../../filters-categories-definitions/other.filters-category-definition\";\nimport {StaticArenaGameFiltersCategory} from \"../../arena-filters/categories/static-arena-game-filters-category\";\nimport {IArenaGameFiltersCategory} from \"../../arena-filters/categories/arena-game-filters-category.interface\";\nimport {Lazy} from \"../../../../../utils/lazy\";\nimport {IGameFilterEvaluator} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {OR} from \"../../evaluators/or-game-filters-evaluator\";\nimport {AND} from \"../../evaluators/and-game-filters-evaluator\";\nimport {\n FiltersMobileButtonComponent\n} from \"../../../../components/header/top-header-left/filters/filters-mobile-button.component\";\nimport {\n IFilterIndicatorRenderingOptions,\n FilterIndicatorRenderingLocation\n} from \"../../games-filter.service.interface\";\nimport {\n FiltersGamesListPcComponent\n} from \"../../../../components/filters/filters-games-list-pc/filters-games-list-pc.component\";\nimport {Nullable} from \"../../../../../common/types/nullable-types\";\nimport {AdhocArenaGamesFiltersCategory} from \"../../arena-filters/categories/adhoc-arena-games-filters-category\";\n\nexport class SimpleGamesFilterStrategy extends GamesFilterStrategyBase {\n\n private _vendorCategory = new Lazy(() => new StaticArenaGameFiltersCategory(this._factory.createVendorsCategoryDefinition(), this.services));\n private _groupCategory = new Lazy(() => new StaticArenaGameFiltersCategory(this._factory.createGameGroupCategoryDefinition(), this.services));\n private _featuresCategory = new Lazy(() => new StaticArenaGameFiltersCategory(this._factory.createGameFeaturesCategoryDefinition(), this.services));\n private _othersCategory = new Lazy(() => new StaticArenaGameFiltersCategory(new OtherFiltersCategoryDefinition([this._vendorCategory.value, this._groupCategory.value, this._featuresCategory.value], this.services), this.services));\n private _adhocCategory = new Lazy(() => new AdhocArenaGamesFiltersCategory(this.services));\n\n protected _createFiltersCategories(): IArenaGameFiltersCategory[] {\n return [\n this._vendorCategory.value,\n this._groupCategory.value,\n this._featuresCategory.value,\n this._othersCategory.value,\n this._adhocCategory.value\n ];\n }\n\n protected _createEvaluator(): IGameFilterEvaluator | null {\n return OR(AND(this._vendorCategory.value,\n this._groupCategory.value,\n this._featuresCategory.value,\n this._adhocCategory.value),\n this._othersCategory.value);\n }\n\n private _createFiltersEditor(): SimpleStrategyFiltersEditor {\n return new SimpleStrategyFiltersEditor(this.filtersCategories, this.services);\n }\n\n showFiltersEditor(): void {\n this.services.dialog.showModal((dialogHandler) => , {\n title: this.services.translation.translate('FILTER'),\n mobileCenterHeader: true,\n applyMaxHeight: true\n });\n }\n\n renderMobileFiltersIndicator(): React.ReactElement {\n if(this.services.mediaQuery.lAndBelow) {\n return ();\n } else {\n return null;\n }\n\n }\n\n renderFiltersIndicator(): Nullable {\n if(this.services.mediaQuery.lAndBelow) {\n return null;\n } else {\n return {\n location: FilterIndicatorRenderingLocation.BelowArenaTitle,\n reactElement: ()\n };\n }\n }\n\n protected _reportApplyFiltersByDeepLink(): void {\n // we don't report analytics for simple filters\n }\n\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number {\n return 0;\n }\n}","import React from \"react\";\nimport {ArenaBaseModel, VideoSlidesFilterConfig} from \"../arena-base.model\";\nimport {\n ArenaConfiguration, ArenaGamesGridConfiguration,\n SwiperGamesListConfiguration\n} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {CasinoArenaComponent} from \"../../../../../components/arena-host/casino-arena/casino-arena.component\";\nimport {GameInfo} from \"../../../../games/game-info\";\nimport {\n CASINO_GAMES_ARENA_NAME,\n EXCLUSIVE_ARENA_NAME,\n JACKPOTS_ARENA_NAME,\n SLOTS_ARENA_NAME\n} from \"../../../arena-consts\";\nimport {computed, makeObservable} from \"mobx\";\nimport {ArenaFiltersConfigurationMap} from \"../arena-view-model.interface\";\nimport {filtersConfigurationToMap} from \"../../filters-configuration-to-map\";\nimport {IGamesFilterStrategy} from \"../../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {\n AdvancedGamesFilterStrategy\n} from \"../../../../games-filter/strategies/advanced-filter/advanced-games-filter.strategy\";\nimport {\n SimpleGamesFilterStrategy\n} from \"../../../../games-filter/strategies/simple-games-filter/simple-games-filter.strategy\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport {ListsSortOrderStorage} from \"../../lists-sort-order-storage\";\n\nexport class CasinoLobbyArenaModel extends ArenaBaseModel {\n constructor(arenaName: string,\n services: IServiceFactoryExtended,\n postLoginListsSortOrderStorage: ListsSortOrderStorage) {\n super(arenaName, services, postLoginListsSortOrderStorage);\n\n makeObservable(this);\n }\n\n get maxSwipersToShow(): number {\n return 20;\n }\n\n get maxGamesToShowInList(): number {\n return 30;\n }\n\n private get config(): ArenaConfiguration {\n return this.services.configuration.data.arenas[this.arenaName]\n }\n\n protected _getSwipersConfigurations(): SwiperGamesListConfiguration[] {\n return this.config.swiperGamesList || [];\n }\n\n protected _getGridsConfigurations(): ArenaGamesGridConfiguration[] {\n return this.config.allGamesGrid || [];\n }\n\n renderArena(): React.ReactElement | null {\n return ;\n }\n\n protected _getPromotionalBannerConfig() {\n const bannerConfig = this.config.promotionalBanner;\n if (!bannerConfig) {\n return null;\n }\n\n if (this.services.device.hybrid.isEmbedded) {\n return null;\n }\n\n return {\n position: bannerConfig.displayListPlace || 2,\n templateID: bannerConfig.templateID,\n componentID: bannerConfig.componentID,\n fallbackComponent: bannerConfig.fallbackComponent,\n bannerAdminPlaceholderId: bannerConfig.bannerAdminPlaceholderId\n }\n }\n \n protected _getVideoSlidesFilterConfig(): VideoSlidesFilterConfig | null {\n const videoSlideFilterConfig = this.config.videoSlidesFilterPreview;\n if(!videoSlideFilterConfig) {\n return null;\n }\n\n return {\n position: videoSlideFilterConfig.displayListPlace,\n filterIds: videoSlideFilterConfig.advancedFilterIdList\n }\n }\n\n filterGamesByArenaType(gamesInfo: GameInfo[]): GameInfo[] {\n switch (this.arenaName) {\n case SLOTS_ARENA_NAME:\n case JACKPOTS_ARENA_NAME:\n return gamesInfo.filter(g => g.isVideoSlot);\n case EXCLUSIVE_ARENA_NAME:\n return gamesInfo.filter(g => g.isVideoSlot || g.isCasinoGame);\n case CASINO_GAMES_ARENA_NAME:\n return gamesInfo.filter(g => g.isCasinoGame);\n\n default:\n return gamesInfo.filter(g => !g.isLiveCasino);\n }\n }\n @computed\n get filtersConfigurationMap(): ArenaFiltersConfigurationMap {\n return filtersConfigurationToMap(this.config.filters);\n }\n\n getGamesFilteringStrategy(): IGamesFilterStrategy {\n if (this.useAdvancedFilters) {\n return new AdvancedGamesFilterStrategy(this.services);\n }\n return new SimpleGamesFilterStrategy(this.services);\n }\n}\n","import React from \"react\";\nimport {ArenaFiltersConfigurationMap, IArenaViewModel} from \"../arena-view-model.interface\";\nimport {GameInfo} from \"../../../../games/game-info\";\nimport {IGamesFilterStrategy} from \"../../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {NoGamesFilterStrategy} from \"../../../../games-filter/strategies/no-filter/no-games-filter.strategy\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\n\nexport class VoidArenaModel implements IArenaViewModel {\n constructor(private readonly services: IServiceFactoryExtended) {\n }\n get arenaName(): string {\n return 'voidArena';\n }\n\n get listsCount(): number {\n return 0;\n }\n\n renderArena(): React.ReactElement | null {\n return null;\n }\n\n renderList(listPosition: number): React.ReactElement | null {\n return null;\n }\n\n getNextBatchSize(currentListPosition: number): number {\n return 0;\n }\n\n filterGamesByArenaType(gamesInfo: GameInfo[]): GameInfo[] {\n return [];\n }\n\n readonly allArenaGamesForFiltering: GameInfo[] = [];\n\n readonly filteredGamesCount: number = 0;\n\n readonly filtersConfigurationMap: ArenaFiltersConfigurationMap = {};\n getGamesFilteringStrategy(): IGamesFilterStrategy {\n return new NoGamesFilterStrategy(this.services);\n }\n}","import {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IGamesListModel} from \"./lists/games-list-model.interface\";\n\nconst POST_LOGIN_LISTS_ORDER_KEY = \"cgp-post-login-lists-order\";\n\ninterface IPostLoginListsOrder {\n lists: Record;\n}\n\nexport class ListsSortOrderStorage {\n constructor(private readonly services: IServiceFactoryExtended) {\n }\n\n private _createEmptyListsOrder(): IPostLoginListsOrder {\n return {\n lists: {}\n };\n }\n\n private _listsSavedOrder: IPostLoginListsOrder = null;\n private _getSavedListsOrder(): IPostLoginListsOrder {\n if(!this._listsSavedOrder) {\n this._listsSavedOrder = this.services.localStorage.getJson(POST_LOGIN_LISTS_ORDER_KEY) || this._createEmptyListsOrder();\n }\n return this._listsSavedOrder;\n }\n\n saveSortOrder(arenaName: string, lists: IGamesListModel[]): void {\n const listsOrder = this._getSavedListsOrder();\n listsOrder.lists[arenaName] = lists.map(list => list.title.translationKey);\n this.services.localStorage.setJson(POST_LOGIN_LISTS_ORDER_KEY, listsOrder);\n }\n\n sortLists(arenaName: string, lists: IGamesListModel[]): IGamesListModel[] {\n const arenaListsOrder = this._getSavedListsOrder().lists[arenaName] || [];\n if(arenaListsOrder.length === 0) {\n return lists;\n }\n\n const listsOrderMap = arenaListsOrder.reduce>((map, listTitle, index) => {\n map[listTitle] = index;\n return map;\n }, {});\n\n\n return lists.sort((l1, l2) => (listsOrderMap[l1.title.translationKey] || 0) - (listsOrderMap[l2.title.translationKey] || 0));\n\n }\n}","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoFilterButtonLabelBox = styledBox(\"LiveCasinoFilterButtonLabelBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoArenaNavbarButtonBox = styledBox(\"LiveCasinoArenaNavbarButtonBox\");\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {observer} from \"mobx-react\";\n// import {LiveCasinoFilterButtonIconBox} from \"./boxes/live-casino-filter-button-icon/live-casino-filter-button-icon.box\";\nimport {LiveCasinoFilterButtonLabelBox} from \"./boxes/live-casino-filter-button-label/live-casino-filter-button-label.box\";\nimport {ACTIVE} from \"../../../../themes/css-global-classes\";\nimport {LiveCasinoArenaNavbarButtonBox} from \"./boxes/live-casino-arena-navbar-button/live-casino-arena-navbar-button.box\";\nimport {Link} from \"../../../raw-components/link/link\";\nimport {LiveCasinoArenaNavbarButtonWrapperBox} from \"./boxes/live-casino-arena-navbar-button/wrapper/live-casino-arena-navbar-button-wrapper.box\";\n\nexport interface LiveCasinoArenaNavbarButtonProps {\n labelTranslationKey: string;\n filter: string;\n isActiveTab: boolean;\n seoPage: string;\n onClick: () => void;\n};\n\nexport const LiveCasinoArenaNavbarButton = observer(\n class LiveCasinoArenaNavbarButton extends OrbitComponent {\n\n private buttonIconMap = new Map([\n [\"TOP_EVO_GAMES\", this.services.theme.currentTheme.icons.topGamesIcon],\n [\"ROULETTE\", this.services.theme.currentTheme.icons.rouletteIcon],\n [\"POKER_GAMES\", this.services.theme.currentTheme.icons.pokerIcon],\n [\"BLACKJACK\", this.services.theme.currentTheme.icons.blackjackIcon],\n [\"BACCARAT\", this.services.theme.currentTheme.icons.baccaratIcon],\n [\"ELITE_LOUNGE\", this.services.theme.currentTheme.icons.eliteLoungeIcon],\n [\"GAME_SHOWS\", this.services.theme.currentTheme.icons.gameShowsIcon],\n [\"NEW_GAMES\", this.services.theme.currentTheme.icons.newGamesIcon],\n [\"EXCLUSIVE\", this.services.theme.currentTheme.icons.tripleEightExclusiveIcon],\n [\"SPEED_GAMES\", this.services.theme.currentTheme.icons.speedGames]\n ]);\n\n private _getButtonIcon() {\n return this.buttonIconMap.get(this.props.labelTranslationKey);\n }\n\n private _getLabelTranslationKey(): string {\n //this if is a duplicate with the one in live-casino-arena-grid.component.tsx\n // in the future we should look for a way to refactor this for_you logic and have it come from the admin somehow, have only one source of truth\n let currentTranslationKey = this.props.labelTranslationKey;\n if (this.services.user.isAuthorized && currentTranslationKey === \"TOP_EVO_GAMES\") {\n currentTranslationKey = \"FOR_YOU_GAMES\";\n }\n\n return currentTranslationKey;\n }\n\n onFilterClicked(isActive: boolean) {\n if (!isActive) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\", \"Live Tab\", this._getLabelTranslationKey());\n this.props && this.props.onClick();\n }\n }\n\n render() {\n let IconComponent = this._getButtonIcon();\n return \n this.onFilterClicked(this.props.isActiveTab)}\n >\n \n \n {this.services.translation.translate(this._getLabelTranslationKey())}\n \n \n ;\n }\n }\n);\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {NewLiveCasinoConfiguration} from '../../../services/configurations/config-data-sections/arenas.configuration';\nimport {TopImageComponent} from '../../top-image/top-image.component';\nimport {SeoBreadCrumbsComponent} from '../seo-bread-crumbs/seo-bread-crumbs.component';\nimport {LiveCasinoArenaNavbar} from \"./live-casino-arena-navbar/live-casino-arena-navbar.component\";\nimport {LiveCasinoArenaGrid} from \"./live-casino-arena-grid/live-casino-arena-grid.component\";\nimport {OrbitComponentWithState} from '../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport {IStickyHandler} from \"../../sticky-handler/sticky-handler.interface\";\nimport {LiveCasinoArenaNavbarButton} from \"./live-casino-arena-navbar/live-casino-arena-navbar-button.component\";\nimport {LIVE_CASINO_PAGE_WRAPPER} from '../../../themes/css-global-classes';\nimport {LinkToOfferComponent} from \"../../link-to-offer/link-to-offer.component\";\nimport {DailyDealComponent} from \"../../daily-deal/daily-deal.component\";\nimport {FreeToPlayAnimatedIconComponent} from '../../free-to-play-animated-icon/free-to-play-animated-icon.component';\n\nexport interface NewLiveCasinoArenaComponentProps {\n configs: NewLiveCasinoConfiguration;\n arenaName: string;\n}\n\nexport interface INewLiveCasinoArenaComponentState {\n}\n\nconst SEO_CATEGORY = 'LIVE_CASINO_NEW';\n\nexport const NewLiveCasinoArenaComponent = observer(\n class NewLiveCasinoArenaComponent extends OrbitComponentWithState {\n\n private _stickyHandler: IStickyHandler;\n private _topImageRef = React.createRef();\n\n componentDidMount() {\n super.componentDidMount();\n }\n\n private get stickyHandler(): IStickyHandler {\n if (!this._stickyHandler && this._topImageRef?.current) {\n this._stickyHandler = this.services.stickyHandlerFactory.createStickyHandler();\n } else {\n return this.services.stickyHandlerFactory.createStickyHandler();\n }\n\n return this._stickyHandler;\n }\n\n private _renderLinkToOffer() {\n return (\n <>\n \n \n \n );\n }\n\n render() {\n return (\n
\n\n \n\n {\n this.services.liveTableFeeds.isNavbarVisible && \n }\n\n \n\n \n\n {this._renderLinkToOffer()}\n \n
\n );\n\n\n }\n }\n);\n","import {ArenaFiltersConfigurationMap, IArenaViewModel} from \"../arena-view-model.interface\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport React from \"react\";\nimport {OrbitSuspense} from \"../../../../../components/base-components/orbit-suspense/orbit-suspense\";\nimport {NewLiveCasinoArenaComponent} from \"../../../../../components/arena-host/new-live-casino-arena/new-live-casino-arena.component\";\nimport {GameInfo} from \"../../../../games/game-info\";\nimport {filtersConfigurationToMap} from \"../../filters-configuration-to-map\";\nimport {ArenaConfiguration} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {IGamesFilterStrategy} from \"../../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {\n SimpleGamesFilterStrategy\n} from \"../../../../games-filter/strategies/simple-games-filter/simple-games-filter.strategy\";\n\nexport class NewLiveCasinoArenaModel implements IArenaViewModel {\n constructor(public readonly arenaName: string,\n private readonly services: IServiceFactoryExtended) {\n }\n\n get listsCount(): number {\n return 0;\n }\n\n renderList(listPosition: number): React.ReactElement | null {\n return null;\n }\n\n getNextBatchSize(currentListPosition: number): number {\n return 0;\n }\n\n get configs(): ArenaConfiguration {\n return this.services.configuration.data.arenas[this.arenaName];\n }\n\n renderArena(): React.ReactElement | null {\n return (\n \n \n \n );\n }\n\n filterGamesByArenaType(gamesInfo: GameInfo[]): GameInfo[] {\n return gamesInfo.filter(g => g.isLiveCasino);\n }\n\n get allArenaGamesForFiltering(): GameInfo[] {\n return [];\n }\n\n readonly filteredGamesCount: number = 0;\n\n get filtersConfigurationMap(): ArenaFiltersConfigurationMap {\n return filtersConfigurationToMap(this.configs.filters);\n }\n\n getGamesFilteringStrategy(): IGamesFilterStrategy {\n return new SimpleGamesFilterStrategy(this.services);\n }\n\n}","import {CasinoLobbyArenaModel} from \"../casino-lobby/casino-lobby-arena.model\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class NewLiveCasinoArenaAbModel extends CasinoLobbyArenaModel {\n get sortingGametypesMapOverride(): Record | null {\n return Check.isEmpty(this.services.liveTableFeeds.aiSortingGamesMap) ? null : this.services.liveTableFeeds.aiSortingGamesMap;\n }\n}","import styled, {css} from \"styled-components\";\nimport {HEADER_Z_INDEX} from \"../../../header/header-consts\";\n\ninterface IBottomStickyNavbarContainerBoxProps {\n shouldElevate: boolean;\n}\n\n\nexport const BottomNavigationBarContainerDefaultBox = styled.div`\n position: fixed;\n bottom: 0;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: calc(100% - env(safe-area-inset-right) - env(safe-area-inset-left));\n }\n \n touch-action: none;\n z-index: ${HEADER_Z_INDEX};\n\n ${props => props.shouldElevate && css`\n z-index: 115;\n `}\n`;\n","import {BottomNavigationBarContainerDefaultBox} from \"./bottom-navigation-bar-container.default.box\";\n\nexport const BottomNavigationBarContainerBox = BottomNavigationBarContainerDefaultBox;\n","import styled from \"styled-components\";\n\nexport const BottomNavigationBarMenuItemsListDefaultBox = styled.div`\n display: flex;\n padding-top: 5px;\n position: relative;\n`;\n","import {BottomNavigationBarMenuItemsListDefaultBox} from \"./bottom-navigation-bar-menu-items-list.default.box\";\n\nexport const BottomNavigationBarMenuItemsListBox = BottomNavigationBarMenuItemsListDefaultBox;\n","import React from \"react\";\nimport {BottomNavigationBarMenuItemsListBox} from \"./boxes/menu-items-list/bottom-navigation-bar-menu-items-list.box\";\nimport {IMenuItemRenderer} from \"../../services/menu-items-common/renderer/menu-item.renderer.interface\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface BottomNavigationBarMenuItemsListComponentProps extends ComponentServicesPick<'bottomNavigationBar'> {\n\n}\nconst ComponentBody: React.FC = observer((props) => {\n\n const _renderMenuItem = (menuItem: IMenuItemRenderer) => {\n\n return (\n \n {menuItem.renderMenuItem()}\n \n );\n }\n\n const menuItems = props.bottomNavigationBar.getMenuItems();\n\n if(menuItems.length === 0) {\n return null;\n }\n return (\n \n \n {menuItems.map(menuItem => _renderMenuItem(menuItem))}\n \n \n );\n});\n\n\nexport const BottomNavigationBarMenuItemsListComponent = withServices(ComponentBody, [\"bottomNavigationBar\"]);","import styled from \"styled-components\";\n\nconst BottomNavigationBarMenuItemsContainerDefaultBox = styled.div`\n padding-bottom: calc(env(safe-area-inset-bottom) + 6px);\n background-color: ${props => props.theme.colors.backgroundDark};\n`;\n\nexport const BottomNavigationBarMenuItemsContainerBox = BottomNavigationBarMenuItemsContainerDefaultBox;\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {BottomNavigationBarContainerBox} from \"./boxes/container/bottom-navigation-bar-container.box\";\nimport {BottomNavigationBarMenuItemsListComponent} from \"./bottom-navigation-bar-menu-items-list.component\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport classNames from 'classnames';\nimport {HYBRID_EMBEDDED_NAV_MENU} from \"./bottom-navigation-bar-consts\";\nimport {SpacerBox} from '../../basic-ui-components/layout/spacer.box';\nimport {BottomNavigationBarMenuItemsContainerBox} from \"./boxes/container/bottom-navbar-menu-item-container.box\";\nimport {useServices} from '../../react-hooks/use-services.hook';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface BottomNavigationBarComponentProps extends ComponentServicesPick<'bottomNavigationBar'> {\n isInVideoSlidesArena?: boolean;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n\n if (!props.bottomNavigationBar.isBottomNavigationEnabled && !Boolean(props.isInVideoSlidesArena)) {\n return null;\n }\n\n return (\n <>\n \n \n \n \n \n \n \n );\n});\n\nexport const BottomNavigationBarComponent = withServices(ComponentBody, ['bottomNavigationBar']);","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesArenaBox = styledBox(\"VideoSlidesArenaBox\");\n ","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesArenaHeaderBox = styledBox(\"VideoSlidesArenaHeaderBox\");","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesArenaFiltersIndicatorBox = styledBox(\"VideoSlidesArenaFiltersIndicatorBox\");","import styled, {css} from \"styled-components\";\n\ninterface IVideoSlideFilterButtonBoxProps {\n isActive?: boolean;\n}\n\nexport const VideoSlideFilterButtonBox = styled.div`\n user-select: none;\n\n border-radius: 100px;\n margin: 0px 4px;\n \n background: none;\n outline: none;\n\n ${({theme}) => theme.font.presets.medium};\n \n font-size: 1.4rem;\n\n line-height: 0.8;\n letter-spacing: 0.05em;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n box-sizing: border-box;\n \n height: 32px;\n width: auto;\n\n transition: all 0.2s ease-in-out;\n\n border-width: 1px;\n border-style: solid;\n\n color: ${props => props.theme.colors.videoSlidesFilterButtonOutline ? props.theme.colors.videoSlidesFilterButtonOutline : props.theme.colors.brandPrimary};\n border-color: ${props => props.theme.colors.videoSlidesFilterButtonOutline ? props.theme.colors.videoSlidesFilterButtonOutline : props.theme.colors.brandPrimary};\n\n padding: 12px;\n\n ${props => props.isActive ? css`\n font-weight: 600;\n border-color: ${props => props.theme.colors.brandPrimary};\n color: ${props => props.theme.colors.brandPrimary};\n background-color: ${props => `${props.theme.colors.brandPrimary}30`}; // 30 is the opacity\n ` : null}\n`","import styled from \"styled-components\";\n\nexport const VideoSlideFilterButtonIconBox = styled.div`\n margin-right: 6px;\n`","import React, {useRef} from 'react';\nimport {observer} from \"mobx-react\";\nimport {useServices} from '../../../../../../react-hooks/use-services.hook';\nimport {FlexGrowItemBox} from '../../../../../../themes/architecture/css-helpers/flex';\nimport {VideoSlideFilterButtonBox} from \"./video-slide-filter-button.box\";\nimport {VideoSlideFilterButtonIconBox} from \"./video-slide-filter-button-icon.box\";\nimport {ISvgIconProps} from \"../../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IVideoSlidesFilterViewModel} from '../../../../../../services/video-slides/models/video-slides-filter-editor/video-slides-filter-view-model.interface';\n\ninterface VideoSlidesHeaderFilterButtonComponentProps {\n videoSlidesFilterEditor: IVideoSlidesFilterViewModel;\n textTranslationKey: string;\n isActive?: boolean;\n icon?: React.ComponentType;\n\n}\n\nexport const VideoSlidesHeaderFilterButtonComponent: React.FC = observer((props) => {\n const services = useServices();\n let filterButtonRef = useRef(null);\n\n React.useEffect(() => {\n if (filterButtonRef.current && props.videoSlidesFilterEditor.on) {\n setTimeout(() => {\n filterButtonRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center'\n });\n \n }, 300);\n }\n }, [props.videoSlidesFilterEditor.on]);\n\n const renderIcon = () => {\n if (Check.isEmpty(props.icon)) {\n return null;\n }\n\n let Icon = props.icon;\n let iconStyle: React.CSSProperties = props.videoSlidesFilterEditor.on ? {color: services.theme.currentTheme.colors.brandPrimary} : {};\n return (\n \n \n \n );\n };\n\n const getClassName = () => `cy-videos-slides-filter-${props.videoSlidesFilterEditor.on ? 'active' : 'disabled'}`;\n\n const onClickHandler = async () => {\n await props.videoSlidesFilterEditor.applyFilter();\n }\n\n return (\n \n \n {renderIcon()}\n {services.translation.translate(props.textTranslationKey)}\n \n \n );\n})","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {VideoSlidesArenaFiltersIndicatorBox} from './boxes/video-slides-arena-filters-indicator.box';\nimport {useServices} from '../../../../../../react-hooks/use-services.hook';\nimport {\n VideoSlidesHeaderFilterButtonComponent\n} from \"../video-slides-header-filter-button/video-slides-header-filter-button.component\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IVideoSlidesFilterViewModel} from '../../../../../../services/video-slides/models/video-slides-filter-editor/video-slides-filter-view-model.interface';\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\n\nexport const VideoSlidesArenaFiltersIndicator: React.FC = observer(() => {\n const services = useServices();\n\n const renderSingleFilter = (videoSlidesFilter: IVideoSlidesFilterViewModel) => {\n if (!videoSlidesFilter.shouldBeDisplayed) {\n return null;\n }\n\n return \n }\n\n return (\n \n {services.videoSlides.videoSlidesFilters.map(filterConfig => renderSingleFilter(filterConfig))}\n \n );\n})","import styled from \"styled-components\";\nimport {RegulatoryDataComponent} from \"../../../../header/top-header-left/regulatory-data/regulatory-data.component\";\n\nexport const VideoSlideRegulatoryDataBox = styled(RegulatoryDataComponent)`\n position: static;\n`","import styled from \"styled-components\";\n\nexport const VideoSlidesUserMenuButtonBox = styled.div`\n position: relative;\n &:before {\n background: linear-gradient(270deg, #000 5%, rgba(0, 0, 0, 0.00) 100%);\n box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);\n content: \" \";\n height: 100%;\n position: absolute;\n top: 0;\n width: 10px;\n left: -10px;\n }\n`;","import styled from \"styled-components\";\n\nexport const VideoSlidesArenaRegulatoryDataBox = styled.div`\n display: flex;\n align-items: center;\n margin-right: 12px;\n flex-direction: row;\n justify-content: space-between;\n`","import styled from \"styled-components\";\n\nexport const LicenseStatusBox = styled.div`\n text-decoration: underline;\n white-space: nowrap;\n color: ${props => props.theme.colors.textLight};\n padding-top: calc(env(safe-area-inset-top) + 0.5rem);\n`","import styled from \"styled-components\";\n\nexport const LicenseTextLinkBox = styled.span`\n text-decoration: underline;\n color: ${props => props.theme.colors.textLight};\n font-size: 1.5rem;\n`","import React from 'react';\nimport {observer} from \"mobx-react-lite\";\nimport {useServices} from \"../../../../../../react-hooks/use-services.hook\";\nimport {LicenseTextLinkBox} from \"../../boxes/regulatory/license-status/license-text-link.box\";\n\nexport const VideoSlidesLicensePopupContentComponent: React.FC = observer(() => {\n const services = useServices();\n\n /** Takes the str string and replaces the first occurrence of substr with the first React Element in the reactElements array,\n the second occurrence of substr with the second React Element in the reactElements array and so on\n This kind of logic is needed when we have a large text (which needs to be translated) which also needs to contain links and stylized pieces of text.\n **/\n\n const replaceWithReactElement = (str: string, substr: string, reactElements: React.ReactElement[]): (string | React.ReactElement)[] => {\n\n if (reactElements.length === 0) {\n return [str];\n }\n\n const parts = str.split(substr);\n let elArrIndex = 0;\n\n return parts.reduce((acc, part, index) => {\n acc.push(part);\n\n if (index < parts.length - 1) {\n acc.push(React.cloneElement(reactElements[elArrIndex], { key: index }));\n if (elArrIndex < reactElements.length - 1) {\n elArrIndex++;\n }\n }\n\n return acc;\n }, []);\n }\n\n return (\n <>\n {\n replaceWithReactElement(\n services.translation.translate(\"UK_LICENSE_TEXT\"),\n \"#UK-LICENSE-PAGE-LINK#\",\n [\n services.linksNavigation.openGamblingCommissionLink()}>\n {services.translation.translate('UK_LICENSE_GC_PAGE_LINK')}\n ,\n services.linksNavigation.openResponsibleGaming()}>\n {services.translation.translate('UK_LICENSE_RG_PAGE_LINK')}\n \n ]\n )\n }\n \n );\n})","import React from 'react';\nimport {observer} from \"mobx-react-lite\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent} from \"../../../header/welcome-buttons/authorized-user/mobile-view/header-welcome-buttons-for-authorized-user-mobile-view.component\";\nimport {VideoSlidesArenaHeaderBox} from \"./boxes/video-slides-arena-header.box\";\nimport {VideoSlidesArenaFiltersIndicator} from './components/video-slides-arena-filters-indicator/video-slides-arena-filters-indicator.component';\nimport {VideoSlideRegulatoryDataBox} from './boxes/video-slide-regulatory-data.box';\nimport {\n VideoSlidesUserMenuButtonBox\n} from \"./components/video-slides-header-filter-button/video-slides-user-menu-button.box\";\nimport {VideoSlidesArenaRegulatoryDataBox} from './boxes/regulatory/video-slides-arena-regulatory-data.box';\nimport {VideoSlidesArenaHeaderConfiguration} from '../../../../services/configurations/config-data-sections/arenas.configuration';\nimport {Check} from '@sparkware/app-utils';\nimport {DialogButtonClickHandleResultEnum} from \"./../../../../services/dialog/dialog.service.interface\";\nimport {LicenseStatusBox} from \"./boxes/regulatory/license-status/license-status.box\";\nimport {\n VideoSlidesLicensePopupContentComponent\n} from \"./components/video-slides-license-popup-content/video-slides-license-popup-content.component\";\n\nexport const VideoSlidesHeaderArena: React.FC = observer(() => {\n const services = useServices();\n\n const renderHeaderWelcomeButtonsForAuthorizedUserMobile = () => {\n if (services.user.isAuthorized) {\n return (\n \n \n \n );\n }\n }\n\n const renderLicenseStatus = () => {\n const videoSlidesArenaHeaderConfiguration: VideoSlidesArenaHeaderConfiguration = services.configuration.data.arenas.videoSlidesArena.header;\n if (Check.isNullOrUndefined(videoSlidesArenaHeaderConfiguration?.licenseStatus) || videoSlidesArenaHeaderConfiguration?.licenseStatus.display === false) {\n return null;\n }\n\n return {services.translation.translate(videoSlidesArenaHeaderConfiguration?.licenseStatus.text)}\n }\n\n const _showLicenseStatusDialog = () => {\n const WarningIcon = services.theme.currentTheme.icons.warningSignIcon;\n services.dialog.showSimpleTextModal({\n title: services.translation.translate(\"UK_LICENSE_STATUS\"),\n text: ,\n showEmptyTitle: true,\n icon: ,\n disableFullscreenMobile: true,\n buttons: [\n {\n text: services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n }\n\n\n return (\n <>\n \n \n {renderLicenseStatus()}\n \n \n \n {renderHeaderWelcomeButtonsForAuthorizedUserMobile()}\n \n \n );\n})","import styled from \"styled-components\";\n\nexport const SparkSwiperBox = styled.div`\n width: 100%;\n height: 100%;\n overflow: hidden;\n position: relative;\n`\n","import styled from \"styled-components\";\n\nexport const SparkSwiperSlideBox = styled.div`\n width: 100%;\n height: 100%;\n position: absolute;\n`","import React, {CSSProperties, useCallback, useEffect, useRef} from 'react';\nimport {observer} from \"mobx-react\";\nimport {SparkSwiperSlideBox} from \"./boxes/spark-swiper-slide.box\";\nimport {ISparkSwiperSlideController} from \"./models/spark-swiper-slide-controller.interface\";\nimport {SPARK_SWIPE_DELTA_THRESHOLD} from \"./spark-swiper-consts\";\nimport {ISparkSwiperController} from \"./models/spark-swiper-controller.interface\";\n\ninterface SparkSwiperSlideComponentProps {\n slideController: ISparkSwiperSlideController;\n swiperController: ISparkSwiperController;\n touchMoveDelta: number;\n animationStarted: boolean;\n onTransitionEnd?: () => void;\n}\nexport const SparkSwiperSlideComponent: React.FC = observer((props) => {\n const elementRef = useRef();\n const {swiperController, slideController, touchMoveDelta, animationStarted} = props;\n\n const deltaSign = Math.sign(touchMoveDelta);\n\n const computeTranslate = useCallback((indexOffset: number) => {\n const percentage = indexOffset * 100;\n\n if (animationStarted) {\n if(Math.abs(touchMoveDelta) > SPARK_SWIPE_DELTA_THRESHOLD) {\n if(slideController.itemIndex === 0 && slideController.isActiveSlide && deltaSign === 1) {\n // when the first slide is the active one and the user try to move up (previous; deltaSign === 1)\n // then we return to 0% translation.\n // if we don't do this then the below `translateY(${percentage + deltaSign * 100}%)` will be translateY(100%) because percentage will be 0 since we are on the active slide (indexOffset === 0)\n // and then on the next rerender will revert to 0% and the animation will look strange (go to 100% and then back to 0%)\n return `translateY(${percentage}%)`;\n } else if(slideController.itemIndex === swiperController.maxItemIndex && slideController.isActiveSlide && deltaSign === -1) {\n // when the last slide is the active one and the user try to move down (next; deltaSign === -1)\n // then we return to 0% translation.\n // if we don't do this then the below `translateY(${percentage + deltaSign * 100}%)` will be translateY(-100%) because percentage will be 0 since we are on the active slide (indexOffset === 0)\n // and then on the next rerender will revert to 0% and the animation will look strange (go to -100% and then back to 0%)\n return `translateY(${percentage}%)`;\n }\n // animate to the next/prev slide\n return `translateY(${percentage + deltaSign * 100}%)`;\n }\n // Not enough swipe, animate to the original point\n return `translateY(${percentage}%)`;\n }\n\n if(touchMoveDelta === 0) {\n return `translateY(${percentage}%)`;\n }\n\n return `translateY(calc(${percentage}% + ${touchMoveDelta}px))`;\n\n }, [touchMoveDelta, animationStarted, deltaSign, swiperController.maxItemIndex, slideController.itemIndex, slideController.isActiveSlide]);\n\n useEffect(() => {\n if(elementRef.current) {\n if(animationStarted) {\n elementRef.current.style.transition = 'transform 0.25s ease-in-out';\n } else {\n elementRef.current.style.transition = 'unset';\n }\n elementRef.current.style.transform = computeTranslate(slideController.itemIndexOffset);\n }\n }, [slideController.itemIndexOffset, computeTranslate, animationStarted]);\n\n const styles: CSSProperties = {\n transform: computeTranslate(slideController.itemIndexOffset)\n };\n\n return (\n \n {slideController.renderSlideContent()}\n \n )\n})","export const SPARK_SWIPE_DELTA_THRESHOLD = 75","import React, {useCallback, useEffect, useRef, useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {SparkSwiperBox} from \"./boxes/spark-swiper.box\";\nimport {ISparkSwiperSlideController} from \"./models/spark-swiper-slide-controller.interface\";\nimport {ISparkSwiperController} from \"./models/spark-swiper-controller.interface\";\nimport {SparkSwiperSlideComponent} from \"./spark-swiper-slide.component\";\nimport {SPARK_SWIPE_DELTA_THRESHOLD} from \"./spark-swiper-consts\";\n\ninterface SparkSwiperComponentProps {\n swiperController: ISparkSwiperController;\n}\n\nexport const SparkSwiperComponent: React.FC = observer((props) => {\n const swiperController = props.swiperController;\n const swiperElementRef = useRef(null);\n const touchStartY = useRef(0);\n const [touchMoveDelta, setTouchMoveDelta] = useState(0);\n const [animationStarted, setAnimationStarted] = useState(false);\n\n\n const onTransitionEndHandler = () => {\n if(touchMoveDelta < -1 * SPARK_SWIPE_DELTA_THRESHOLD) {\n swiperController.moveNext();\n } else if(touchMoveDelta > SPARK_SWIPE_DELTA_THRESHOLD){\n swiperController.movePrevious();\n }\n setAnimationStarted(false);\n setTouchMoveDelta(0);\n };\n\n const onTouchStartHandler = (event: any) => {\n touchStartY.current = event.touches[0].clientY;\n }\n\n const onTouchMoveHandler = useCallback((event: any) => {\n event.preventDefault();\n\n const deltaY = event.touches[0].clientY - touchStartY.current;\n setTouchMoveDelta(deltaY);\n }, [])\n\n const onTouchEndHandler = (event: any) => {\n const deltaY = event.changedTouches[0].clientY - touchStartY.current;\n setTouchMoveDelta(deltaY);\n setAnimationStarted(true);\n };\n\n useEffect(() => {\n const swiper = swiperElementRef.current;\n if(swiper) {\n swiper.addEventListener('touchmove', onTouchMoveHandler, { passive: false });\n }\n\n return () => {\n if(swiper) {\n swiper.removeEventListener('touchmove', onTouchMoveHandler);\n }\n\n };\n }, [onTouchMoveHandler]);\n\n\n\n const renderOneSlide = (slideController: ISparkSwiperSlideController) => {\n return (\n \n );\n }\n\n return (\n \n {swiperController.slides.map(renderOneSlide)}\n \n )\n})","import styled from \"styled-components\";\n\nexport const VideoSlidesOnboardingOverlayBox = styled.div`\n position: absolute;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.7);\n z-index: 100;\n`;\n","import styled from \"styled-components\";\n\nexport const SwipingUserTipBox = styled.div`\n position: absolute;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n","import styled from \"styled-components\";\n\nexport const VideoSlidesTipTextBox = styled.div`\n margin-top: 50px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n font-size: 1.4rem;\n font-weight: 200;\n \n p:first-of-type {\n font-weight: 800;\n margin-bottom: 0;\n font-size: 1.8rem;\n }\n`;\n","import {observer} from \"mobx-react\";\nimport React, {TouchEvent, useRef} from \"react\";\nimport {VideoSlidesOnboardingOverlayBox} from \"./boxes/video-slides-onboarding-overlay.box\";\nimport {DotLottiePlayer} from \"../../../lottie-player/dot-lottie-player.component\";\nimport {DotLottieCommonPlayer} from \"@dotlottie/react-player\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {SwipingUserTipBox} from \"./boxes/swiping-user-tip.box\";\nimport { VideoSlidesTipTextBox } from \"./boxes/video-slides-tip-text.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\n\ninterface VideoSlidesOnboardingComponentProps {\n onDismiss: () => void;\n}\n\nexport const VideoSlidesOnboardingComponent: React.FC = observer((props) => {\n let lottieRef = useRef(null);\n let services = useServices();\n\n\n const touchStartY = useRef(0);\n const touchEndY = useRef(0);\n\n const dismiss = () => {\n services.videoSlides.onBoardingWasShown = true;\n props.onDismiss();\n services.analytics.sendOrbitUserFlowEvent('videoSlides', 'dismiss', 'onBoarding');\n }\n\n\n const handleTouchStart = (e: TouchEvent) => {\n touchStartY.current = e.touches[0].clientY;\n };\n\n const handleSwipe = () => {\n const deltaY = touchStartY.current - touchEndY.current;\n if (deltaY > 40) {\n //Swiped up;\n dismiss();\n }\n };\n\n const handleTouchEnd = (e: TouchEvent) => {\n touchEndY.current = e.changedTouches[0].clientY;\n handleSwipe();\n };\n\n\n\n\n return (\n \n \n \n \n

{services.translation.translate(\"VIDEO_SLIDES_ONBOARDING_MAIN_TEXT\")}

\n

{services.translation.translate(\"VIDEO_SLIDES_ONBOARDING_SECONDARY_TEXT\")}

\n
\n
\n
\n );\n})","import styled from \"styled-components\";\n\nexport const VideoSlidesArenaSwiperBox = styled.div`\n width: 100%;\n height: 100%;\n`","import React, {useEffect, useState} from 'react';\nimport {observer} from \"mobx-react\";\nimport {SparkSwiperComponent} from \"../../../spark-swiper/spark-swiper.component\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {\n VideoSlidesOnboardingComponent\n} from \"../../../video-slides/parts/on-boarding/video-slides-onboarding.component\";\nimport {VideoSlidesArenaSwiperBox} from \"./video-slides-arena-swiper.box\";\nimport {VIDEO_SLIDES_ARENA_SWIPER_ID} from \"../video-slides-arena.consts\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nexport const VideoSlidesArenaSwiperComponent: React.FC = observer(() => {\n const services = useServices();\n const [showOnBoarding, setShowOnBoarding] = useState(!services.videoSlides.onBoardingWasShown);\n\n const swiperController = services.videoSlides.swiperController;\n\n useEffect(() => {\n if(showOnBoarding) {\n services.analytics.sendOrbitUserFlowEvent('videoSlides', 'show', 'onBoarding');\n }\n }, [showOnBoarding, services.analytics]);\n\n const renderOnBoarding = () => {\n if(showOnBoarding) {\n return (\n setShowOnBoarding(false)}/>\n )\n }\n return null;\n }\n\n return (\n \n {renderOnBoarding()}\n \n \n\n )\n});","export const VIDEO_SLIDES_ARENA_SWIPER_ID = 'video-slides-arena-swiper';","import React, {useEffect} from 'react';\nimport {observer} from \"mobx-react-lite\";\nimport {reaction} from \"mobx\";\nimport {BottomNavigationBarComponent} from \"../../bottom-navigation-bar/bottom-navigation-bar.component\";\nimport {VideoSlidesArenaBox} from \"./boxes/video-slides-arena.box\";\n//import {VideoSlidesContentArena} from \"./video-slides-arena-content/video-slides-arena-content.component\";\nimport {VideoSlidesHeaderArena} from \"./video-slides-arena-header/video-slides-arena-header.component\";\nimport {useServices} from '../../../react-hooks/use-services.hook';\nimport {VideoSlidesArenaSwiperComponent} from \"./video-slides-arena-swiper/video-slides-arena-swiper.component\";\n\nexport const VideoSlidesArena: React.FC = observer(() => {\n const services = useServices();\n\n useEffect(() => {\n const reactionDispose = reaction(() => services.videoSlides.shouldBeDisplayed,\n (shouldBeDisplayed) => {\n if (!shouldBeDisplayed) {\n services.location.goHome();\n }\n }, {\n fireImmediately: true\n })\n\n return () => {\n reactionDispose();\n }\n }, [services.location, services.videoSlides.shouldBeDisplayed]);\n\n\n\n return (\n \n \n \n \n \n );\n})","import styled from \"styled-components\";\n\nexport const WelcomeUserBox = styled.div`\n text-align: center;\n`;\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const WelcomeGreetingBox = styledBox('WelcomeGreetingBox');\n","import React from 'react';\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {WelcomeUserBox} from \"./boxes/welcome-user.box\";\nimport {WelcomeGreetingBox} from \"./boxes/welcome-greeting.box\";\n\nexport const WelcomeUser = observer(class WelcomeUser extends OrbitComponent {\n render() {\n const {translation} = this.services;\n\n return (\n \n {translation.translate(\"MY_ACCOUNT\")}\n \n );\n }\n\n});\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const IndicatorBox = styledBox(\"IndicatorBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const IndicatorIconBox = styledBox(\"IndicatorIconBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const IndicatorBadgeBox = styledBox(\"IndicatorBadgeBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const IndicatorTextBox = styledBox(\"IndicatorTextBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const IndicatorIconWrapperBox = styledBox(\"IndicatorIconWrapperBox\");","import React from \"react\";\nimport {IndicatorBox} from \"./boxes/indicator.box\";\nimport {IndicatorIconBox} from \"./boxes/indicator-icon.box\";\nimport {IndicatorBadgeBox} from \"./boxes/indicator-badge.box\";\nimport {IndicatorTextBox} from \"./boxes/indicator-text.box\";\nimport {IndicatorLayout} from \"./consts/indicator-layout\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {IndicatorIconWrapperBox} from \"./boxes/indicator-icon-wrapper.box\";\nimport {ISvgIconProps} from \"../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport interface ProfileBoxMessagesIndicatorProps {\n /**\n * Normally, we should only receive numberOfAwaitingMessages, and when that's greater than 0, then the indicator is active\n * and the bubble shows the number.\n * But for challenges, we have only the information whether the user has active challenges or not.\n * So we accept both data, both are optional.\n * If both are missing, the button is inactive. If both are present, numberOfAwaitingMessages takes precedence and hasAwaitingMessages is ignored.\n * If hasAwaitingMessages is true and numberOfAwaitingMessages is undefined, the button is active but the badge is supressed\n */\n numberOfAwaitingMessages?: number;\n hasAwaitingMessages?: boolean;\n\n onClick: React.MouseEventHandler;\n displayLayout?: IndicatorLayout;\n iconComponent: React.ComponentType;\n className: string;\n text: string;\n}\n\nexport class ProfileBoxMessagesIndicator extends OrbitComponent {\n render() {\n const indicatorActive = this.indicatorIsActive();\n const IconComponent = this.props.iconComponent;\n\n return (\n \n \n \n {IconComponent ? : null}\n {this.numberOfMessagesIsDefinedAndGreaterThanZero() ?\n {this.props.numberOfAwaitingMessages}\n : null}\n \n \n \n {this.props.text}\n \n \n );\n }\n\n private onClick = (e: React.MouseEvent) => {\n if (!this.indicatorIsActive()) {\n return;\n }\n this.props.onClick(e);\n }\n\n private numberOfMessagesIsDefinedAndGreaterThanZero() {\n return this.props.numberOfAwaitingMessages !== undefined && this.props.numberOfAwaitingMessages > 0;\n }\n\n private indicatorIsActive() {\n return this.numberOfMessagesIsDefinedAndGreaterThanZero() || !!this.props.hasAwaitingMessages;\n }\n\n}\n","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport { ProfileBoxMessagesIndicator } from \"../profile-box-messages-indicator.component\";\nimport { IndicatorLayout } from \"../consts/indicator-layout\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface OmgIndicatorProps extends ComponentServicesPick<'omg'> {\n displayLayout?: IndicatorLayout;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n \n const onClickHandler = async () => {\n await (await services.menuItemActionFactory).getMenuItemAction('pushNotificationsPermissionsRequest').execute();\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", \"Open_OMG\");\n // Open OMG\n await props.omg.openOmgAwaitingMessages();\n (await services.userMenu).closeMenu();\n \n }\n \n return (\n \n );\n})\nexport const OmgIndicator = withServices(ComponentBody, ['omg']);","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport { ProfileBoxMessagesIndicator } from \"../profile-box-messages-indicator.component\";\nimport {\n TOOLTIP_TARGET_FREE_PLAY_INDICATOR\n} from \"../../../services/tooltip/on-boarding-tooltip/on-boarding-tooltip-target-selectors\";\n\nexport const FreePlayIndicatorComponent = observer(class extends OrbitComponent {\n\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", \"Open_Rewards\");\n (await this.services.userMenu).openRewards();\n }\n\n public render() {\n return (\n \n );\n }\n});\n","import React from \"react\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {LoyaltyBarWrapperComponent} from \"./loyalty-bar-wrapper.component\";\nimport {UserMenuSectionBox} from \"../user-menu/user-menu/boxes/section/user-menu-section.box\";\n\nexport const LoyaltyBar = observer(class LoyaltyBar extends OrbitComponent {\n\n render() {\n const showLoyaltyConfig = this.services.configuration.data.drawer.showLoyalty;\n if (!showLoyaltyConfig || !showLoyaltyConfig.display)\n return null;\n\n return (\n \n
\n \n
\n
\n );\n }\n});\n","import React from \"react\";\nimport { OrbitComponent } from \"../base-components/orbit-component/orbit-component\";\nimport { UserData } from \"../../services/sdk/sdk.service.interface\";\nimport { Check } from \"@sparkware/app-utils\";\nimport {observer} from \"mobx-react\";\n\nexport interface UserInfoComponentProps {\n className?: string;\n useSpanWrapper?: boolean;\n selectedUserInfo: keyof UserData;\n}\n\n@observer\nexport class UserInfo extends OrbitComponent {\n render() {\n let shownData = this.services.user.userData[this.props.selectedUserInfo];\n if (Check.isNullOrUndefined(shownData)) {\n return null;\n }\n if (this.props.useSpanWrapper || this.props.className) {\n return \n {shownData}\n ;\n } else {\n return shownData;\n }\n }\n}\n","import styled from \"styled-components\";\n\nexport const UserInfoLabelBox = styled.span`\n margin: 0 1rem 0 0;\n`;\n","import styled from \"styled-components\";\n\nexport const UserMenuNameBox = styled.div`\n color: ${({theme}) => theme.colors.textContrast};\n font-size: 1.6rem;\n font-weight: 700;\n text-align: center;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n text-align: left;\n }\n`;","import styled from \"styled-components\";\n\nexport const UserMenuSupportIdBox = styled.div`\n color: ${({theme}) => theme.colors.textMiddleDark};\n font-size: 1.2rem;\n font-weight: 600;\n text-align: center;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n text-align: left;\n }\n`;","import React from 'react';\nimport {UserInfo} from \"../user-info/user-info.component\";\nimport {UserInfoLabelBox} from \"../user-info/user-info-label.box\";\nimport {UserMenuSectionBox} from '../user-menu/user-menu/boxes/section/user-menu-section.box';\nimport {useServices} from '../../react-hooks/use-services.hook';\nimport {UserMenuNameBox} from './boxes/user-menu-name.box';\nimport {UserMenuSupportIdBox} from './boxes/user-menu-support-id.box';\nimport {FlexContainerBox, FlexFixedSizeItemBox, FlexGrowItemBox, FlexShrinkItemBox} from \"../../themes/architecture/css-helpers/flex\";\nimport {UserData} from '../../services/sdk/sdk.service.interface';\nimport {ITranslationService} from '../../services/translation/translation.service.interface';\nimport {Image} from '../raw-components/image/image';\n\nexport const UserDetails: React.FC = () => {\n let services = useServices();\n const {showUserTitle, showFirstName, showLastName} = services.configuration.data.drawer.welcomeMessage;\n const avatarUrl = services.configuration.data.generalSettings.avatarUrl.sideMenu.regular;\n\n function _renderUserTitle(isEnabled: boolean, translator: ITranslationService) {\n if(!isEnabled)\n return null;\n\n const userGenderTitle = this.services.user.genderTitle;\n return {translator.translate(userGenderTitle)}\n }\n\n function _renderUserInfo(infoType: keyof UserData, isEnabled: boolean) {\n if(!isEnabled)\n return null;\n\n return ;\n }\n\n function _renderLeftPart() {\n let smallViewport = services.mediaQuery.lAndBelow;\n if (smallViewport) {\n return \n
\n
\n \"\"\n
\n
\n
;\n } else {\n return ;\n }\n }\n\n const RightArrowIcon = services.theme.currentTheme.icons.forwardIcon;\n\n const onClickHandler = async () => {\n (await services.userMenu).launchMyAccount();\n }\n\n return (\n \n \n { _renderLeftPart() }\n \n \n {_renderUserTitle(showUserTitle, services.translation)}\n {_renderUserInfo('firstName', showFirstName)}\n {_renderUserInfo('lastName', showLastName)}\n \n \n {services.translation.translate('SUPPORT_ID_MESSAGE')}\n \n \n \n \n \n \n \n \n );\n};\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {UsefulLinksListComponent} from './parts/useful-links-list/useful-links-list.component';\nimport {CyClass} from '../../../common/cy-classes';\nimport {UserMenuSectionBox} from '../user-menu/user-menu/boxes/section/user-menu-section.box';\n\nexport const UsefulLinks: React.FC = observer(() => {\n return (\n \n );\n});\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const BonusAndCashBalanceBox = styledBox(\"BonusAndCashBalanceBox\");\n","import styled from \"styled-components\";\n\nexport const BalanceInnerBox = styled.div`\n display: flex;\n justify-content: space-between;\n padding: 0 0 0.5rem;\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const BalanceLabelInnerBox = styledBox(\"BalanceLabelInnerBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const BalanceValueBonusAndCashBox = styledBox(\"BalanceValueBonusAndCashBox\");\n","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {BonusAndCashBalanceBox} from \"./boxes/bonus-and-cash-balance.box\";\nimport {BalanceInnerBox} from \"./boxes/balance-inner.box\";\nimport {BalanceLabelInnerBox} from \"./boxes/balance-label-inner.box\";\nimport { BalanceValue } from \"../balance-value.component\";\nimport { BalanceValueBonusAndCashBox } from \"../balance-value-boxes/balance-value-bonus-and-cash.box\";\nimport { BalanceType } from \"../../../../common/const/wallet_balance_type\";\nimport {CyClass} from '../../../../common/cy-classes';\n\nexport class BonusAndCashBalance extends OrbitComponent {\n render() {\n const translator = this.services.translation;\n\n return (\n \n \n {translator.translate('CASH_BALANCE')}\n \n \n \n {translator.translate('BONUS_BALANCE')}\n \n \n \n );\n }\n}\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const BalanceButtonsGroupBox = styledBox('BalanceButtonsGroupBox')","import React from \"react\";\nimport { Button } from \"../../../basic-ui-components/button/base/button.component\";\nimport { BalanceButtonsGroupBox } from \"./boxes/balance-buttons-group.box\";\nimport { ButtonWrapperBox } from \"./boxes/button-wrapper.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {observer} from \"mobx-react\";\n\nexport const UserBalanceButtons: React.FC = observer(() => {\n const services = useServices();\n const translator = services.translation;\n\n const openDeposit = async () => {\n (await services.userMenu).launchDeposit();\n }\n\n const openWithdraw = async () => {\n (await services.userMenu).launchWithdraw();\n }\n\n return (\n \n \n \n \n \n \n \n \n );\n})\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const UserMenuBalanceLabelBox = styledBox('UserMenuBalanceLabelBox');","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const BalanceValuePrimaryBox = styledBox(\"BalanceValuePrimaryBox\");\n","import React from 'react';\nimport {useServices} from '../../react-hooks/use-services.hook';\nimport {BonusAndCashBalance} from \"./bonus-and-cash-balance/bonus-and-cash-balance.component\";\nimport {UserBalanceButtons} from \"./balance-box-buttons/user-balance-buttons.component\";\nimport {UserMenuBalanceLabelBox} from \"./boxes/user-menu-balance-label.box\";\nimport { BalanceValue } from './balance-value.component';\nimport { BalanceValuePrimaryBox } from './balance-value-boxes/balance-value-primary.box';\nimport {CyClass} from '../../../common/cy-classes';\nimport {UserMenuSectionBox} from '../user-menu/user-menu/boxes/section/user-menu-section.box';\nimport {FlexContainerBox} from '../../themes/architecture/css-helpers/flex';\nimport {UserMenuSeparatorBox} from '../user-menu/user-menu-items/boxes/separator/user-menu-separator.box';\nimport {SpacerBox} from '../../basic-ui-components/layout/spacer.box';\n\nexport const UserBalance: React.FC = () => {\n const services = useServices();\n return \n \n {services.translation.translate('BALANCE')}\n \n \n \n \n \n \n \n ;\n};\n","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface UserMenuItemsContainerComponentProps extends ComponentServicesPick<'userMenu'> {\n}\n\n\nconst ComponentBody: React.FC = observer((props) => {\n\n const menuItems = props.userMenu.userMenuItems;\n\n return (\n <>\n {menuItems.map(menuItem => {menuItem.renderMenuItem()})}\n \n );\n});\n\nexport const UserMenuItemsContainerComponent = withServices(ComponentBody, [\"userMenu\"]);","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const MiniControlCenterBox = styledBox('MiniControlCenterBox');","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {MiniControlCenterBox} from \"./boxes/mini-control-center.box\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {CONTROL_CENTER_CONTAINERS_ID} from \"../../../services/control-center/control-center.service.interface\";\nimport {AreaType, ControlCenterCloseSource, ControlCenterOpenSource} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\nimport {ICasinofiedApplication} from \"../../../services/casinofied/app-launcher/apps/casinofied-application.interface\";\nimport {UserMenuSectionBox} from \"../user-menu/boxes/section/user-menu-section.box\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface MiniControlCenterComponentProps extends ComponentServicesPick<'userMenu'>{\n \n}\n@observer\nclass ComponentBody extends OrbitComponent {\n private iApplication: ICasinofiedApplication | null = null;\n private appLoadingInProgress = false;\n private cancelLoadingApp = false;\n private businessCorrelationID: string;\n private closeControlCenterReason: ControlCenterCloseSource;\n\n componentDidMount() {\n super.componentDidMount();\n this.businessCorrelationID = this.services.tools.getGuid();\n if (this.services.controlCenter.isEnabled && this.props.userMenu.isOpen) {\n this.loadControlCenterMini();\n }\n }\n\n componentDidUpdate() {\n if (this.services.controlCenter.isEnabled) {\n if (!this.props.userMenu.isOpen) {\n // so, the userMenu has closed. good. If we have an app, dispose of it\n if (this.iApplication) {\n this.disposeApplication();\n } else if (this.appLoadingInProgress) {\n // but what if the user closed the menu before the app finished loading?\n this.cancelLoadingApp = true;\n }\n }\n if (!this.iApplication && this.props.userMenu.isOpen) {\n this.loadControlCenterMini();\n }\n }\n }\n\n componentWillUnmount() {\n this.disposeApplication();\n }\n\n async loadControlCenterMini(): Promise {\n this.closeControlCenterReason = ControlCenterCloseSource.ClientPage;\n this.appLoadingInProgress = true;\n await (await this.services.appLauncher).openControlCenterMini({\n businessCorrelationID: this.businessCorrelationID,\n channel: {\n area: AreaType.UserArea,\n element: CHANNEL_ELEMENTS.controlCenterHeaderButton,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n source: ControlCenterOpenSource.UserArea\n }\n }).then((app) => {\n this.iApplication = app;\n this.appLoadingInProgress = false;\n if (this.cancelLoadingApp) {\n this.cancelLoadingApp = false;\n this.disposeApplication();\n }\n }).finally(() => {\n this.appLoadingInProgress = false;\n this.cancelLoadingApp = false;\n });\n }\n disposeApplication() {\n if (this.iApplication) {\n this.iApplication.close({\n channel: {\n area: AreaType.UserArea,\n source: CHANNEL_SOURCE.casinoClient\n },\n reason: this.closeControlCenterReason\n });\n this.iApplication = null;\n }\n }\n\n controlCenterBoxClickHandler = () => {\n this.closeControlCenterReason = ControlCenterCloseSource.MiniSafeZone;\n }\n\n render() {\n if (!this.services.controlCenter.isEnabled) {\n return null;\n }\n /* Normally why do I care if userMenu.isOpen ? After all, this component is rendered inside the userMenu and will be visible only if isOpen.\n Yes, BUT control center want's to be \"closed\" and \"opened\" with every close/open of the userMenu. So I add a class depending on\n this.props.userMenu.isOpen to trigger a componentDidMount and the magic will happen there */\n return (\n \n \n \n );\n }\n}\n\n\nexport const MiniControlCenterComponent = withServices(ComponentBody, ['userMenu']);","import styled from \"styled-components\";\n\nexport const UserMenuScrollWrapperBox = styled.div`\n flex: 1;\n padding: 1rem 0.75rem 1rem 1rem;\n overflow-y: auto;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 0;\n }\n\n &::-webkit-scrollbar {\n width: 5px;\n }\n\n &::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n }\n\n &::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.5);\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.8);\n }\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ProfileMessagesBox = styledBox(\"ProfileMessagesBox\");\n","import styled from \"styled-components\";\n\nexport const UserMenuFakeIOSPaddingBox = styled.div`\n display: block;\n height: 100px;\n width: 10px;\n`;\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const LogOutLinkBox = styledBox('LogOutLinkBox');\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport { LogOutLinkBox } from './boxes/log-out-link.box';\nimport {CyClass} from '../../../common/cy-classes';\nimport {useServices} from '../../react-hooks/use-services.hook';\nimport {UserMenuSectionBox} from '../user-menu/user-menu/boxes/section/user-menu-section.box';\n\nexport const UserMenuLogout: React.FC = observer(() => {\n const services = useServices();\n const translator = services.translation;\n const onClickHandler = async () => {\n (await services.userMenu).doLogout();\n }\n\n return \n \n {translator.translate(\"LOGOUT\")}\n \n ;\n});\n","import styled from \"styled-components\";\n\nexport const UserMenuAppVersionBox = styled.div`\n font-size: 1.2rem;\n font-weight: 400;\n text-align: center;\n color: ${props => props.theme.colors.text};\n`;\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {useServices} from '../../react-hooks/use-services.hook';\nimport {UserMenuSeparatorBox} from '../user-menu/user-menu-items/boxes/separator/user-menu-separator.box';\nimport {SpacerBox} from '../../basic-ui-components/layout/spacer.box';\nimport {UserMenuLogout} from '../user-menu-logout/user-menu-logout.component';\nimport {UserMenuAppVersionBox} from './boxes/user-menu-app-version.box';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface UserMenuFooterProps extends ComponentServicesPick<'clientDevice'> {\n\n}\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const translator = services.translation;\n\n return (<>\n \n \n {translator.translate(\"ABOUT_CLIENT_VERSION_TITLE\")}\n
\n {props.clientDevice.clientVersion}\n
\n \n \n \n \n );\n\n});\n\nexport const UserMenuFooter = withServices(ComponentBody, ['clientDevice']);","import styled from 'styled-components';\n\nexport const SaveGamesWidgetBox = styled.div`\n background-color: ${props => props.theme.colors.background};\n margin-top: 1rem;\n padding: 0;\n width: 100%;\n line-height: 3.75rem;\n\n align-items: center;\n\n display: flex;\n flex-direction: column;\n \n border-radius: 5px;\n max-width: 100%;\n\n`;\n","import styled from 'styled-components';\n\nexport const SaveGamesWidgetGamesContainerBox = styled.div`\n display: grid;\n grid-template-columns: 10rem 10rem 10rem;\n column-gap: 1rem;\n row-gap: 1rem;\n padding: 0.5rem 0;\n`;\n","import styled from 'styled-components';\n\nexport const SaveGamesWidgetGamesTitleBox = styled.div`\n text-align: center;\n line-height: normal;\n width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n direction: initial;\n padding: 4px 0;\n color: ${({theme}) => theme.colors.textContrast};\n`;\n","import styled from 'styled-components';\n\nexport const SaveGamesWidgetHeaderBox = styled.div`\n align-items: center;\n font-size: 1.4rem;\n display: flex;\n width: 100%;\n color: ${({theme}) => theme.colors.textContrast};\n\n & span:last-of-type {\n margin-left: auto;\n margin-right: 1rem;\n display: flex;\n align-items: center;\n cursor: pointer;\n }\n \n & span:first-of-type {\n margin: 0 1rem;\n }\n`;\n","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {SaveGamesWidgetHeaderBox} from \"./boxes/save-games-widget-header.box\";\n\nexport class SaveGamesWidgetHeaderComponent extends OrbitComponent<{}> {\n\n private async _onClick() {\n this.services.games.showAllSavedGamesDrawer();\n (await this.services.userMenu).closeMenu();\n }\n\n render() {\n\n const RightArrowIcon = this.services.theme.currentTheme.icons.rightArrowIcon;\n const SavedGamesIcon = this.services.theme.currentTheme.icons.saveGameIcon;\n\n return (\n \n \n \n \n \n {this.services.translation.translate(\"MY_SAVED_GAMES\")}\n \n this._onClick()}>\n {this.services.translation.translate(\"ALL\")}\n \n \n \n );\n }\n}\n","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {SaveGamesWidgetBox} from \"./boxes/save-games-widget.box\";\nimport {SaveGamesWidgetGamesContainerBox} from \"./boxes/save-games-widget-games-container.box\";\nimport {GameImageComponent} from \"../../single-game/common/parts/game-image/game-image.component\";\nimport {GameItemImgWrapperBox} from \"../../game-item/boxes/game-item-img-wrapper.box\";\nimport {SaveGamesWidgetGamesTitleBox} from \"./boxes/save-games-widget-games-title.box\";\nimport {SaveGamesWidgetHeaderComponent} from \"./save-games-widget-header.component\";\nimport {observer} from \"mobx-react\";\n\n\nexport const SaveGamesWidgetComponent = observer(class SaveGamesWidgetComponent extends OrbitComponent<{}> {\n\n private _onGameClick(gameType: number) {\n this.services.games.gamesMap[gameType]?.open({\n isRealMode: true,\n listTitle: \"SAVED_GAMES_WIDGET\"\n });\n }\n\n render() {\n if (this.services.games.savedGameTypes.length === 0) {\n return null;\n }\n\n if (!this.services.configuration.data.drawer.saveGamesWidget?.display) {\n return null;\n }\n\n return (\n \n \n \n {this.services.games.savedGameTypes.slice(0,6).map(gt => this.services.games.gamesMap[gt]).map(gi =>\n !gi ? null :\n
\n this._onGameClick(gi.gameType)}>\n \n \n \n {gi.title}\n \n
\n )}\n
\n
\n );\n }\n});\n","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {OmgIndicator} from \"../../profile-box-messages-indicator/indicators/omg-indicator.component\";\nimport {FreePlayIndicatorComponent} from \"../../profile-box-messages-indicator/indicators/freeplay-indicator.component\";\nimport {LoyaltyBar} from \"../../loyalty-bar/loyalty-bar.component\";\nimport {UserDetails} from \"../../user-details/user-details.component\";\nimport {observer} from \"mobx-react\";\nimport {UsefulLinks} from \"../../useful-links/useful-links.component\";\nimport {UserBalance} from \"../../balance-box/user-balance.component\";\nimport {UserMenuItemsContainerComponent} from \"../user-menu-items/user-menu-items-container.component\";\nimport {MiniControlCenterComponent} from \"../mini-control-center/mini-control-center.component\";\nimport {UserMenuScrollWrapperBox} from \"./boxes/user-menu-scroll-wrapper.box\";\nimport { ProfileMessagesBox } from \"../../profile-box/boxes/profile-box-messages/profile-messages.box\";\nimport {UserMenuFakeIOSPaddingBox} from \"./boxes/user-menu-fake-ios-padding.box\";\nimport {UserMenuFooter} from \"../../user-menu-footer/user-menu-footer.component\";\nimport {FlexContainerBox, FlexFixedSizeItemBox, FlexGrowItemBox} from \"../../../themes/architecture/css-helpers/flex\";\nimport {SaveGamesWidgetComponent} from \"../save-games-widget/save-games-widget.component\";\n\nexport const UserMenuMobile = observer(class UserMenuMobile extends OrbitComponent {\n\n render() {\n // NB: the PC layout has the profile-box-messages, loyalty bar, and\n // dynamics boxes in the SideMenu, whereas the mobile layout has them\n // here in the pop-out menu.\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {this.services.device.os.isIOS && }\n \n );\n }\n});\n","import styled from \"styled-components\";\n\nexport const UserMenuClosePCButtonBox = styled.div`\n position: absolute;\n top: 50%;\n right: 0.5rem;\n transform: translateY(-50%);\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const UserMenuCloseIconBox = styledBox('UserMenuCloseIconBox');","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const UserMenuHeaderBox = styledBox('UserMenuHeaderBox');","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {UserDetails} from \"../../user-details/user-details.component\";\nimport {UsefulLinks} from \"../../useful-links/useful-links.component\";\nimport {WelcomeUser} from \"../../welcome-user/welcome-user.component\";\nimport {UserBalance} from \"../../balance-box/user-balance.component\";\nimport { UserMenuClosePCButtonBox } from \"../close-button/boxes/user-menu-close-pc-button.box\";\nimport { UserMenuCloseIconBox } from \"../close-button/boxes/close-icon/user-menu-close-icon.box\";\nimport {MiniControlCenterComponent} from \"../mini-control-center/mini-control-center.component\";\nimport {UserMenuHeaderBox} from \"./boxes/header/user-menu-header.box\";\nimport {UserMenuScrollWrapperBox} from \"./boxes/user-menu-scroll-wrapper.box\";\nimport {UserMenuFooter} from \"../../user-menu-footer/user-menu-footer.component\";\nimport {FlexContainerBox, FlexFixedSizeItemBox, FlexGrowItemBox} from \"../../../themes/architecture/css-helpers/flex\";\nimport {SaveGamesWidgetComponent} from \"../save-games-widget/save-games-widget.component\";\n\ninterface IUserMenuPcProps {\n closeMenu: () => void;\n}\n\nexport class UserMenuPc extends OrbitComponent {\n\n private _renderUserMenuHeader() {\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n return (\n \n \n \n \n \n \n \n \n );\n }\n\n render() {\n return (\n <>\n {this._renderUserMenuHeader()}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const MobileMenuHeaderBox = styledBox(\"MobileMenuHeaderBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const MobileBackBox = styledBox(\"MobileBackBox\");\n","import styled from \"styled-components\";\n\nexport const MobileBackLabelBox = styled.span`\n padding-top: 2px;\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const UserMenuRootBox = styledBox('UserMenuRootBox');\n","import styled from \"styled-components\";\n\nexport const UserMenuWrapperDefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n padding-bottom: env(safe-area-inset-bottom, 0);\n\n &:hover {\n overflow-y: auto;\n }\n`","import {UserMenuWrapperDefaultBox} from \"./user-menu-wrapper.default.box\";\n\nexport const UserMenuWrapperBox = UserMenuWrapperDefaultBox;","import styled from \"styled-components\";\n\nexport const UserMenuHolderDefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 0 0 0.5rem 0;\n overflow: hidden;\n \n /*\n .cgp-rtl & {\n padding: 0.5rem 0 0.5rem 0.25rem;\n }\n */\n`","import {UserMenuHolderDefaultBox} from \"./user-menu-holder.default.box\";\n\nexport const UserMenuHolderBox = UserMenuHolderDefaultBox;","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {WelcomeUser} from \"../welcome-user/welcome-user.component\";\nimport {UserMenuMobile} from \"./user-menu/user-menu-mobile.component\";\nimport {UserMenuPc} from \"./user-menu/user-menu-pc.component\";\nimport { UserMenuCloseIconBox } from \"./close-button/boxes/close-icon/user-menu-close-icon.box\";\nimport { MobileMenuHeaderBox } from \"../main-nav/boxes/mobile/mobile-menu-header.box\";\nimport { FlexGrowItemBox, FlexContainerBox } from \"../../themes/architecture/css-helpers/flex\";\nimport { MobileBackBox } from \"../main-nav/boxes/mobile/back/mobile-back.box\";\nimport { MobileBackLabelBox } from \"../main-nav/boxes/mobile/back/mobile-back-label.box\";\n\nimport {FreePlayContainerComponent} from \"../free-play/free-play-container.component\";\nimport {UserMenuRootBox} from \"./user-menu/boxes/root/user-menu-root.box\";\nimport {UserMenuWrapperBox} from \"./user-menu/boxes/wrapper/user-menu-wrapper.box\";\nimport {UserMenuHolderBox} from \"./user-menu/boxes/holder/user-menu-holder.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport classNames from \"classnames\";\nimport {USER_MENU_OPEN} from \"../../themes/css-global-classes\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface UserMenuProps extends ComponentServicesPick<'userMenu'> {\n \n}\n\nconst ComponentBody = observer(class extends OrbitComponent {\n\n private holderRef = React.createRef();\n\n private _renderUserMenuHeader() {\n\n if (this.services.device.isMobile) {\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n return (\n \n \n {this._renderMobileBackButton()}\n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n\n return null;\n }\n\n render() {\n if(!this.services.user.isAuthorized) {\n return null;\n }\n\n const cssClasses = classNames(CyClass('cy-user-menu'), {\n [USER_MENU_OPEN]: this.props.userMenu.isOpen\n });\n\n return (\n \n \n {this._renderUserMenuHeader()}\n \n {this._renderMenuContents()}\n \n \n \n );\n }\n\n private _renderMobileBackButton() {\n if(!this.services.device.isMobile)\n return null;\n if(!this.props.userMenu.isRewardsInfo)\n return null;\n\n const BackIcon = this.services.theme.currentTheme.icons.backIcon;\n return (\n \n \n {this.services.translation.translate(\"BACK\")}\n \n );\n }\n\n private _renderMenuContents() {\n if(this.props.userMenu.isRewardsInfo) {\n return ();\n } else if(this.services.device.isMobile) {\n return ;\n } else {\n return ;\n }\n }\n\n private _closeMenu = () => {\n if (this.holderRef.current) {\n this.holderRef.current.scrollTop = 0;\n }\n this.props.userMenu.closeMenu();\n }\n});\n\n\nexport const UserMenu = withServices(ComponentBody, ['userMenu']);","import {DrawerBodyDefaultBox} from \"./drawer-body.default.box\";\n\nexport const DrawerBodyBox = DrawerBodyDefaultBox;\n","import styled, {css} from \"styled-components\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\n\n\n// To prevent bugs like BUG #1810621 we should add the scrollbar width to the drawer width\nconst DRAWER_WIDTH = 375;\nconst SCROLLBAR_WIDTH = 17; // varies in each browser but none should be larger than 17px\nexport const DrawerBodyDefaultBox = styled.div<{zIndex: number, isBlurBackground?: boolean}>`\n display: flex;\n flex-direction: column;\n position: fixed;\n right: 0;\n top: 0;\n width: ${DRAWER_WIDTH + SCROLLBAR_WIDTH}px;\n height: 100%;\n transform: translateX(100%);\n transition: transform 0.25s ease;\n z-index: ${props => props.zIndex};\n\n ${({isBlurBackground}) => isBlurBackground ? css`\n backdrop-filter: blur(15px);\n ` : css`\n background: ${props => props.theme.colors.backgroundDark};\n `};\n \n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);\n width: 100vw;\n }\n\n &.open {\n transform: translateX(0%);\n ${CssRule.For.RTL.build()} & {\n left: 0;\n right: auto;\n }\n &::before {\n content: \"\";\n position: absolute;\n width: 50px;\n height: 100%;\n left: -50px;\n background: linear-gradient(90deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5));\n\n ${CssRule.For.RTL.build()} & {\n background: linear-gradient(90deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n right: -50px;\n left: auto\n }\n \n pointer-events: none;\n }\n }\n`;","import styled from 'styled-components';\ninterface IDrawerContentBoxProps {\n visible: boolean;\n}\nexport const DrawerContentBox = styled.div`\n display: ${props => props.visible ? 'block' : 'none'};\n width: 100%;\n height: 100%;\n overflow-y: auto;\n`;\n","import {SpinnerDefaultBox} from './spinner.default.box';\n\nexport const SpinnerBox = SpinnerDefaultBox;","import styled from 'styled-components';\n\nexport const SpinnerDefaultBox = styled.div<{isMigrationSpinner?: boolean}>`\n position: fixed;\n height: 100%;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: ${props => props.isMigrationSpinner ? 99999 : 110};\n background-color: ${props => props.theme.colors.backgroundDark};\n`;\n","import {SpinnerBrandDefaultBox} from './spinner-brand.default.box';\n\nexport const SpinnerBrandBox = SpinnerBrandDefaultBox;","import styled from 'styled-components';\n\n\nexport const SpinnerBrandDefaultBox = styled.div`\n width: 180px;\n height: 180px;\n position: relative;\n \n`;","import styled, {keyframes} from 'styled-components';\n\nconst spinnerAnimationKeyframes = keyframes`\n 0% {\n transform: rotate(0);\n animation-timing-function: cubic-bezier(.55, .055, .675, .19)\n }\n 50% {\n transform: rotate(180deg);\n animation-timing-function: cubic-bezier(.215, .61, .355, 1)\n }\n to {\n transform: rotate(360deg)\n }\n`;\n\nexport const SpinnerBackgroundDefaultBox = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 0;\n background-image: url(\"${props => props.theme.images.spriteSheet.toString()}\");\n background-position: -1063px -318px;\n animation: ${spinnerAnimationKeyframes} 1s infinite;\n image-rendering: pixelated;\n animation-direction: normal;\n animation-play-state: running;\n animation-duration: 1s;\n mix-blend-mode: screen;\n`;","import {SpinnerBackgroundDefaultBox} from \"./spinner-background.default.box\";\nimport styled from \"styled-components\";\n\nexport const SpinnerBackgroundCasino777Box = styled(SpinnerBackgroundDefaultBox)`\n background-position: -1039px -70px;\n width: 250px;\n height: 215px;\n animation: none;\n`;","import {SpinnerBackgroundDefaultBox} from \"./spinner-background.default.box\";\nimport styled from \"styled-components\";\n\nexport const SpinnerBackgroundCIPBox = styled(SpinnerBackgroundDefaultBox)`\n background-position: -1253px -318px;\n border-radius: 50%;\n`;","import styled from \"styled-components\";\nimport {SpinnerBackgroundDefaultBox} from \"./spinner-background.default.box\";\n\nexport const SpinnerBackgroundCISBox = styled(SpinnerBackgroundDefaultBox)`\n background-position: -1253px -318px;\n border-radius: 50%;\n`;","import {SpinnerBackgroundDefaultBox} from \"./spinner-background.default.box\";\nimport styled from \"styled-components\";\n\nexport const SpinnerBackgroundMrGreenBox = styled(SpinnerBackgroundDefaultBox)`\n background-position: -1060px -320px;\n`;\n","import {SpinnerBackgroundDefaultBox} from './spinner-background.default.box';\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {SpinnerBackgroundCasino777Box} from \"./spinner-background.casino777.box\";\nimport {SpinnerBackgroundCIPBox} from \"./spinner-background.cip.box\";\nimport {SpinnerBackgroundCISBox} from \"./spinner-background.cis.box\";\nimport {SpinnerBackgroundMrGreenBox} from \"./spinner-background.mrgreen.box\";\n\nexport const SpinnerBackgroundBox = styledByTheme(SpinnerBackgroundDefaultBox)\n .forCasino777(SpinnerBackgroundCasino777Box)\n .forCip(SpinnerBackgroundCIPBox)\n .forWsopCip(SpinnerBackgroundCIPBox)\n .forCis(SpinnerBackgroundCISBox)\n .forMrGreen(SpinnerBackgroundMrGreenBox)\n .apply();","import React from 'react';\nimport {SpinnerBox} from \"../spinner/boxes/spinner/spinner.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {SpinnerBrandBox} from \"../spinner/boxes/spinner-brand/spinner-brand.box\";\nimport {SpinnerBackgroundBox} from \"../spinner/boxes/spinner-background/spinner-background.box\";\nimport {observer} from \"mobx-react\";\n\nexport const DrawerSpinnerComponent: React.FC = observer(() => {\n return (\n \n \n \n \n \n );\n});","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport classNames from \"classnames\";\nimport {observer} from \"mobx-react\";\nimport {DrawerBodyBox} from \"./boxes/body/drawer-body.box\";\nimport {DrawerContentBox} from './boxes/content/drawer-content.box';\nimport {DrawerSpinnerComponent} from \"./drawer-spinner.component\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\n\nexport interface RightDrawerComponentProps extends ComponentServicesPick<'drawer' | 'dom'> {\n className?: string;\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const rightDrawer = props.drawer.right;\n const renderContent = () => {\n const lastVisibleDrawerItemIndex = rightDrawer.getLastVisibleDrawerItemIndex();\n const isSpinnerVisible = rightDrawer.isSpinnerVisible;\n return rightDrawer.currentContent.map((content, index) => {\n return (\n \n {content.render()}\n \n )\n });\n }\n\n const renderSpinner = () => {\n if(rightDrawer.isSpinnerVisible) {\n return (\n \n )\n }\n\n return null;\n }\n\n const renderDrawer = () => {\n let zIndex = rightDrawer.getOverlayZIndex();\n let isBlurBackground = rightDrawer.hasBlurBackground;\n\n return (\n\n \n {renderContent()}\n {renderSpinner()}\n \n );\n }\n\n return ReactDOM.createPortal(renderDrawer(), props.dom.body);\n\n})\n\n\nexport const RightDrawerComponent = withServices(ComponentBody, [\"drawer\", \"dom\"]);","import {ArenaFiltersConfigurationMap, IArenaViewModel} from \"../arena-view-model.interface\";\nimport {GameInfo} from \"../../../../games/game-info\";\nimport {IGamesFilterStrategy} from \"../../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {VIDEO_SLIDES_ARENA} from \"../../../arena-consts\";\nimport {VideoSlidesArena} from \"../../../../../components/arena-host/video-slides-arena/video-slides-arena.component\";\nimport {UserMenu} from \"../../../../../components/user-menu/user-menu.component\";\nimport React from \"react\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport {RightDrawerComponent} from \"../../../../../components/drawer/drawer.component\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {AdvancedGamesFilterStrategy} from \"../../../../games-filter/strategies/advanced-filter/advanced-games-filter.strategy\";\n\n\nexport default class VideoSlidesArenaModel implements IArenaViewModel {\n constructor(private readonly services: IServiceFactoryExtended) {\n }\n\n readonly filteredGamesCount: number;\n readonly filtersConfigurationMap: ArenaFiltersConfigurationMap;\n readonly listsCount: number;\n maxGamesToShowInList: number;\n\n get allArenaGamesForFiltering(): GameInfo[] {\n return this.services.videoSlides.allGamesInArena;\n }\n\n readonly arenaName: string = VIDEO_SLIDES_ARENA;\n\n\n filterGamesByArenaType(gamesInfo: GameInfo[]): GameInfo[] {\n return [];\n }\n\n getGamesFilteringStrategy(): IGamesFilterStrategy {\n return new AdvancedGamesFilterStrategy(this.services);\n }\n\n getNextBatchSize(currentListPosition: number): number {\n return 0;\n }\n\n renderArena(): React.ReactElement | null {\n return (\n <>\n \n \n \n \n );\n }\n\n renderList(listPosition: number): React.ReactElement | null {\n return undefined;\n }\n\n}","import {ServiceBase} from '../ServiceBase';\nimport {IArenasService} from './arenas.service.interface';\nimport {\n HOME_PAGE_ARENA,\n NEW_LIVE_CASINO_AB_ARENA_NAME,\n NEW_LIVE_CASINO_ARENA_NAME, VIDEO_SLIDES_ARENA\n} from './arena-consts';\nimport {\n ArenaConfiguration\n} from \"../configurations/config-data-sections/arenas.configuration\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IArenaViewModel} from \"./models/arenas/arena-view-model.interface\";\nimport {HomePageArenaModel} from \"./models/arenas/home-page/home-page-arena.model\";\nimport {CasinoLobbyArenaModel} from \"./models/arenas/casino-lobby/casino-lobby-arena.model\";\nimport {VoidArenaModel} from \"./models/arenas/void-arena/void-arena.model\";\nimport {ListsSortOrderStorage} from \"./models/lists-sort-order-storage\";\nimport {NewLiveCasinoArenaModel} from \"./models/arenas/new-live-casino/new-live-casino-arena.model\";\nimport {NewLiveCasinoArenaAbModel} from \"./models/arenas/new-live-casino-ab/new-live-casino-arena-ab.model\";\nimport VideoSlidesArenaModel from \"./models/arenas/video-slides/video-slides-arena.model\";\n\n\nexport class ArenasService extends ServiceBase implements IArenasService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this._postLoginListsSortOrderStorage = new ListsSortOrderStorage(services);\n this._loadArenas();\n }\n\n private _arenas: Record = {};\n private readonly _postLoginListsSortOrderStorage: ListsSortOrderStorage;\n\n private _loadArenas(): void {\n this._arenas[HOME_PAGE_ARENA] = this._createArena(HOME_PAGE_ARENA);\n const arenasConfigs = this.services.configuration.data.arenas;\n for (let arenaName in arenasConfigs) {\n this._arenas[arenaName] = this._createArena(arenaName);\n }\n }\n\n getArena(arenaName: string): IArenaViewModel {\n return this._arenas[arenaName] || new VoidArenaModel(this.services);\n }\n\n private _createArena(arenaName: string): IArenaViewModel | null {\n switch (arenaName) {\n case NEW_LIVE_CASINO_AB_ARENA_NAME:\n return new NewLiveCasinoArenaAbModel(arenaName, this.services, this._postLoginListsSortOrderStorage);\n case HOME_PAGE_ARENA:\n return new HomePageArenaModel(this.services, this._postLoginListsSortOrderStorage);\n case NEW_LIVE_CASINO_ARENA_NAME:\n return new NewLiveCasinoArenaModel(arenaName, this.services);\n case VIDEO_SLIDES_ARENA:\n return new VideoSlidesArenaModel(this.services);\n default:\n return new CasinoLobbyArenaModel(arenaName, this.services, this._postLoginListsSortOrderStorage);\n }\n }\n\n getCurrentArena(): IArenaViewModel {\n const arenaName = this.services.routing.currentRoute.data?.arenaType;\n if (!arenaName) {\n return new VoidArenaModel(this.services);\n }\n return this.getArena(arenaName)\n\n }\n\n getArenaConfig(arenaType: string): ArenaConfiguration {\n return this.services.configuration.data.arenas[arenaType];\n }\n\n shouldHideFiltersButtonMobile(): boolean {\n const arenasWithoutFilterButton: string[] = [NEW_LIVE_CASINO_ARENA_NAME];\n const currentRoute = this.services.routing.currentRoute;\n return arenasWithoutFilterButton.includes(currentRoute?.data?.arenaType);\n }\n}\n","import {LanguageSwitcherItemConfiguration} from '../../../app-bootstrap/config-interfaces/b2c-startup.configurations';\nimport {IServiceFactoryExtended} from '../../service-factory-extended.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {ILanguageSwitcherItem} from './language-switcher-item.interface';\n\nexport class LanguageSwitcherItem implements ILanguageSwitcherItem {\n constructor(private _config: LanguageSwitcherItemConfiguration, private services: IServiceFactoryExtended) {\n }\n\n get title(): string {\n return this._config.title;\n }\n\n get url(): string {\n return this._config.url;\n }\n\n get isCurrent(): boolean {\n return false;\n }\n\n async makeCurrent(): Promise {\n this.services.analytics.sendOrbitUserFlowEvent('Navigation','Language', this.title);\n\n this._executeOnClickJs();\n let url = this._config.url;\n\n if(this.services.device.hybrid.isEmbedded) {\n this.services.window.openSelf(url);\n } else {\n await this._createCookie();\n\n await this.services.user.logout();\n if(this._config.sendFunnelParameters) {\n url = (await this.services.marketing).appendSCutToUrl(url);\n }\n this.services.window.openSelf(url);\n\n }\n }\n\n private _createCookie(): Promise {\n if(this.services.user.isAuthorized) {\n return this.services.user.getAutoLoginToken()\n .then(token => {\n this.services.cookies.createDomainCookie('orbit_autologin_token', token);\n }).catch(() => {\n this.services.logger.error('Failed to get autologin token in order to switch language');\n });\n } else {\n return Promise.resolve();\n }\n }\n\n private _executeOnClickJs(): void {\n try {\n\n\n if (!this._config.onClickJs) {\n return;\n }\n\n if (!Check.isString(this._config.onClickJs)) {\n this.services.logger.error(`onClickJs is not a string for language switcher item ${this.title}`);\n return;\n }\n\n if (this._config.onClickJs.length > 50) {\n this.services.logger.error(`Too long callback method for language switcher item ${this.title} click event: ${this._config.onClickJs.substring(0, 50)} ...`);\n return;\n }\n\n // eslint-disable-next-line\n let func = new Function(this._config.onClickJs);\n func();\n }\n catch (err) {\n this.services.logger.error(`Failed to execute onClickJs for language swithcer item ${this.title}; onClickJs: ${this._config.onClickJs}`, err);\n }\n }\n}\n\n\n","import {IServiceFactoryExtended} from '../../service-factory-extended.interface';\nimport {ILanguageSwitcherItem} from './language-switcher-item.interface';\n\nexport class LanguageSwitcherSection {\n constructor(private _services: IServiceFactoryExtended, private _title: string, private _fallbackTitleKey: string, private _items: ILanguageSwitcherItem[]) {\n\n }\n\n get title(): string {\n if(this._title) {\n return this._title;\n }\n\n return this._services.translation.translate(this._fallbackTitleKey);\n }\n\n get items(): ILanguageSwitcherItem[] {\n return this._items;\n }\n}\n","import {ILanguageSwitcherItem} from './language-switcher-item.interface';\n\nexport class SelectedLanguageSwitcherItem implements ILanguageSwitcherItem {\n constructor(private _title: string) {\n\n }\n get isCurrent(): boolean {\n return true;\n }\n get title(): string {\n return this._title;\n }\n\n get url(): string {\n return '';\n }\n\n makeCurrent(): void {\n }\n\n}\n","import {ServiceBase} from '../ServiceBase';\nimport {ILanguageData, ILanguageService} from './language.service.interface';\nimport {action, observable, makeObservable, runInAction} from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {TranslatedText} from './translated-text';\n\nimport {LanguageSwitcherStructure} from './language-switcher/language-switcher-structure';\nimport {LanguageSwitcherItem} from './language-switcher/language-switcher-item';\nimport {LanguageSwitcherSection} from './language-switcher/language-switcher-section';\nimport {SelectedLanguageSwitcherItem} from './language-switcher/selected-language-switcher-item';\nimport {ILanguageSwitcherItem} from './language-switcher/language-switcher-item.interface';\nimport {\n LanguageSwitcherConfiguration,\n LanguageSwitcherItemConfiguration, LanguageSwitcherSectionConfiguration\n} from '../../app-bootstrap/config-interfaces/b2c-startup.configurations';\nimport {isInsideAutomation} from \"../../../utils/automation-helpers\";\n\nexport class LanguageService extends ServiceBase implements ILanguageService {\n constructor(private _defaultLanguageData: ILanguageData, services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._loadLanguageData();\n\n if (this._isLanguageSwitcherEnabled) {\n this._setLanguageSwitcher(this.services.configuration.startupConfiguration.b2c.languageSwitcher);\n this.reaction(() => this.services.location.currentUri,\n (uri) => {\n this._updateLanguageSwitcher(uri.pathName.toString());\n }, {\n fireImmediately: this.languageSwitcher.isEmpty\n });\n } else {\n this._setLanguageSwitcher(null);\n }\n\n\n }\n\n private get _isLanguageSwitcherEnabled(): boolean {\n return Boolean(this.services.configuration.data.languageSwitcher?.display)\n }\n\n\n private _lastUrlWithoutTheFragmentQueriedForLanguageSwitcher = '';\n\n public get isRTLLanguage(): boolean {\n return this.services.dom.getElementsByTagName('html')[0].classList.contains('cgp-rtl');\n }\n\n get currentLanguage(): string {\n return this.services.configuration.startupConfiguration.b2c.language.iso3;\n }\n\n get currentLanguageIso2(): string {\n return this.services.configuration.startupConfiguration.b2c.language.iso2;\n }\n\n\n private _getDefaultTexts(): TranslatedText {\n return this._defaultLanguageData.text || {};\n }\n\n\n private _loadLanguageData(): void {\n let textOverrides = this.services.configuration.startupConfiguration.orbit.lang?.text;\n let translatedTexts = {...this._getDefaultTexts(), ...textOverrides};\n\n this._setTranslatedTexts(translatedTexts);\n }\n\n\n @observable.ref\n translatedTexts: TranslatedText = {};\n\n @action.bound\n private _setTranslatedTexts(data: TranslatedText): void {\n this.translatedTexts = data;\n }\n\n @observable.ref\n languageSwitcher: LanguageSwitcherStructure;\n\n\n private _extractLanguageSwitcherFromConfig(langSwitcherConfig: LanguageSwitcherConfiguration) {\n let languagesSection = this._extractLangSwitcherSection(langSwitcherConfig && langSwitcherConfig.languages, langSwitcherConfig && langSwitcherConfig.languageSettings, 'CHOOSE_LANG');\n\n let countriesSection = this._extractLangSwitcherSection(langSwitcherConfig && langSwitcherConfig.countries, langSwitcherConfig && langSwitcherConfig.countrySettings, 'CHOOSE_COUNTRY')\n\n return {\n languagesSection: languagesSection,\n countriesSection: countriesSection,\n isEmpty: languagesSection.items.length === 0 && countriesSection.items.length === 0\n };\n }\n\n @action.bound\n private _setLanguageSwitcher(langSwitcherConfig: LanguageSwitcherConfiguration): void {\n this.languageSwitcher = this._extractLanguageSwitcherFromConfig(langSwitcherConfig);\n }\n\n private _extractLangSwitcherSection(itemsConfig: LanguageSwitcherItemConfiguration[], sectionConfig: LanguageSwitcherSectionConfiguration, fallbackTitleKey: string): LanguageSwitcherSection {\n itemsConfig = itemsConfig || [];\n sectionConfig = sectionConfig || {title: '', current: ''};\n\n let items: ILanguageSwitcherItem[] = [];\n\n if (sectionConfig.current && itemsConfig.length > 0) {\n items.push(new SelectedLanguageSwitcherItem(sectionConfig.current));\n }\n\n itemsConfig.forEach(cfg => {\n items.push(new LanguageSwitcherItem(cfg, this.services));\n });\n\n return new LanguageSwitcherSection(this.services,\n sectionConfig.title,\n fallbackTitleKey,\n items);\n\n }\n\n async _updateLanguageSwitcher(url: string): Promise {\n if (!this._isLanguageSwitcherEnabled) {\n return;\n }\n\n if (this._lastUrlWithoutTheFragmentQueriedForLanguageSwitcher === url) {\n return;\n }\n\n\n if(this.services.device.hybrid.isEmbedded && !isInsideAutomation()) {\n if(this.languageSwitcher.isEmpty) {\n this._setLanguageSwitcher(this._getLanguageSwitcherConfigForHybridEmbedded());\n }\n return;\n }\n\n\n this._lastUrlWithoutTheFragmentQueriedForLanguageSwitcher = url;\n\n try {\n const config = await (await this.services.cmsApi).getLanguageSwitcherConfiguration(url);\n if (config) {\n const langSwitcher = this._extractLanguageSwitcherFromConfig(config);\n if (!langSwitcher.isEmpty) {\n runInAction(() => {\n this.languageSwitcher = langSwitcher;\n });\n }\n } else {\n if (this.languageSwitcher.isEmpty && this.services.configuration.startupConfiguration.sdk.config.ExtraProperties.env !== \"prod\") {\n this._setLanguageSwitcher(this._getLanguageSwitcherConfigForTestEnvironments());\n }\n }\n } catch (err) {\n this.services.logger.error('Failed to get language switcher from API', err);\n if (this.languageSwitcher.isEmpty && this.services.configuration.startupConfiguration.sdk.config.ExtraProperties.env !== \"prod\") {\n this._setLanguageSwitcher(this._getLanguageSwitcherConfigForTestEnvironments());\n }\n }\n }\n\n\n private _getLanguageSwitcherConfigForTestEnvironments(): LanguageSwitcherConfiguration {\n return this.services.theme.themeCustomizer.getLanguageSwitcherConfigForTestEnvironments();\n }\n\n\n private _getLanguageSwitcherConfigForHybridEmbedded(): LanguageSwitcherConfiguration {\n return {\n languages: [\n {title: \"English\", url: \"?langID=eng\"},\n {title: \"简体中文\", url: \"?langID=chi\"},\n {title: \"Deutsch\", url: \"?langID=ger\"},\n {title: \"Español\", url: \"?langID=spa\"},\n {title: \"Suomi\", url: \"?langID=fin\"},\n {title: \"Français\", url: \"?langID=fre\"},\n {title: \"日本語\", url: \"?langID=jpn\"},\n {title: \"Русский\", url: \"?langID=rus\"},\n {title: \"ภาษาไทย\", url: \"?langID=tha\"},\n {title: \"Portuguese\", url: \"?langID=por\"}\n ],\n countries: [],\n languageSettings: { \"title\": \"\", \"current\": \"\" },\n countrySettings: {\"title\": \"\"}\n }\n\n }\n}\n","import { action, observable, makeObservable, reaction, IReactionDisposer } from 'mobx';\nimport {IStickyHandler} from './sticky-handler.interface';\nimport {DomEventSubscription} from '../../../utils/event-listener-registration';\nimport {IServiceFactory} from \"../../services/service-factory.interface\";\n\nexport class StickyHandler implements IStickyHandler {\n private _onScrollSubscription: DomEventSubscription;\n private _onHeaderHeightReactionDisposer: IReactionDisposer\n private _scrollTopMinValue: number = -1;\n private _elementRef: HTMLElement | null = null;\n\n constructor(private services: IServiceFactory, el?: HTMLElement) {\n makeObservable(this);\n this.updateElement(el);\n this._onHeaderHeightReactionDisposer = reaction(() => this.services.header.headerHeight, (headerHeight) => {\n this._scrollTopMinValue = headerHeight;\n }, {\n fireImmediately: true\n });\n\n this._onScrollSubscription = this.services.window.subscribeTo.scroll(this.onWindowScroll);\n }\n\n updateElement(el: HTMLElement | null): void {\n this._elementRef = el;\n }\n\n @observable.ref\n private _isSticky: boolean = false;\n get isSticky(): boolean {\n return this._isSticky;\n }\n\n @action.bound\n private _setIsSticky(value: boolean): void {\n this._isSticky = value;\n }\n\n private onWindowScroll = () => {\n if (this._scrollTopMinValue < 0) {\n this._setIsSticky(false);\n } else {\n if (this._elementRef) {\n const topElementPosition = this._elementRef.getBoundingClientRect().top;\n this._setIsSticky(this._scrollTopMinValue >= topElementPosition);\n } else {\n this._setIsSticky(this.services.window.scrollY > this._scrollTopMinValue);\n }\n }\n };\n\n dispose() {\n if (this._onScrollSubscription) {\n this._onScrollSubscription.dispose();\n }\n this._onHeaderHeightReactionDisposer();\n this._elementRef = null;\n }\n\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {StickyHandler} from \"../../components/sticky-handler/sticky-handler\";\nimport {IStickyHandler} from \"../../components/sticky-handler/sticky-handler.interface\";\n\nexport class StickyHandlerFactoryService extends ServiceBase{\n\n createStickyHandler(el?: HTMLElement): IStickyHandler{\n return new StickyHandler(this.services, el);\n }\n\n}\n","import {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {CGPEventSubscription} from '../sdk/cgp-sdk.interface';\nimport {OnGameOpenParams} from '../sdk/sdk-events';\nimport {OpenGameParameters} from '../games/game-info';\nimport { action, IReactionDisposer, observable, reaction, makeObservable } from 'mobx';\nimport {Uri} from '../location/uri/uri';\nimport {IGameRouteHandlerService} from \"./game-route-handler.service.interface\";\n\n\nexport class GameRouteHandlerService extends ServiceBase implements IGameRouteHandlerService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._subscribeToGameEvents();\n\n this._subscribeToUriAndGamesMapChanges(true);\n }\n\n\n\n private _onGameOpenSubscription: CGPEventSubscription;\n private _onGameCloseSubscription: CGPEventSubscription;\n private _currentUriAndGamesMapReaction: IReactionDisposer | null = null;\n\n\n private _subscribeToUriAndGamesMapChanges(isFirstSubscription: boolean) {\n this._currentUriAndGamesMapReaction = reaction(() => {\n return {\n uri: this.services.location.currentUri\n }\n },\n (data) => {\n if (this._isOpenGameUri(data.uri)) {\n this._tryOpenGameFromUrl();\n } else {\n this.services.gameRunner.then(gameRunner => {\n gameRunner.currentRunningGame?.closeGame({\n shouldSuggestNextGame: false\n });\n })\n\n }\n }, {fireImmediately: isFirstSubscription});\n }\n\n private _unsubscribeFromUriAndGamesMapChanges() {\n if(this._currentUriAndGamesMapReaction) {\n this._currentUriAndGamesMapReaction();\n this._currentUriAndGamesMapReaction = null;\n }\n }\n\n\n private _subscribeToGameEvents() {\n this._onGameOpenSubscription = this.services.sdk.events.onGameOpen(this._onGameOpen.bind(this));\n this._onGameCloseSubscription = this.services.sdk.events.onGameClose(this._onGameClose.bind(this));\n }\n\n private _unsubscribeFromGameEvents() {\n if(this._onGameOpenSubscription) {\n this._onGameOpenSubscription.off();\n }\n\n if(this._onGameCloseSubscription) {\n this._onGameCloseSubscription.off();\n }\n }\n\n private _getOpenGameFragment(gameType: number, isReal: boolean) {\n return `#page/game/${gameType}/real/${isReal ? '1' : '0'}`;\n }\n\n private _isOpenGameUri(uri: Uri): boolean {\n if(uri.hash.value.startsWith('page/game')) {\n return true;\n } else {\n return false;\n }\n }\n\n private _shouldSkipNextCloseGameRedirect: boolean = false;\n\n private _previousUri: Uri | null = null;\n private _onGameOpen(eventParams: OnGameOpenParams): void {\n\n if(!this._isOpenGameUri(this.services.location.currentUri)) {\n this._previousUri = this.services.location.currentUri;\n }\n\n this._unsubscribeFromUriAndGamesMapChanges();\n this.services.location.push(this._getOpenGameFragment(eventParams.gameType, eventParams.isReal)).finally(() => this._subscribeToUriAndGamesMapChanges(false));\n }\n\n private _onGameClose(): void {\n if(this._shouldSkipNextCloseGameRedirect){\n this._shouldSkipNextCloseGameRedirect = false;\n return;\n }\n\n let urlToGoBack = this._previousUri ? this._previousUri.toString() : this.services.location.currentUri.pathName.toString();\n this.services.location.push(urlToGoBack);\n }\n\n @observable.ref\n lastAttemptToOpenGameFromUrl: number;\n @action.bound\n private _setLastAttemptToOpenGameFromUrl() {\n this.lastAttemptToOpenGameFromUrl = Date.now();\n }\n\n private _isOpenGameFromUrlInProgress = false;\n async _tryOpenGameFromUrl() {\n if(this._isOpenGameFromUrlInProgress) {\n return;\n }\n\n let hash = this.services.location.currentUri.hash;\n\n if(hash.isEmpty) {\n return;\n }\n\n let currentFragment = hash.value;\n\n let fragmentParts = currentFragment.split('/');\n\n if((fragmentParts[0] || '').toLowerCase() !== 'page'\n || (fragmentParts[1] || '').toLowerCase() !== 'game') {\n return;\n }\n let gameType = fragmentParts[2];\n let gameMode = fragmentParts[4];\n\n let gameInfo = await this.services.games.getGameInfo(parseInt(gameType));\n if(!gameInfo) {\n this._onGameClose();\n this._setLastAttemptToOpenGameFromUrl();\n return;\n }\n\n let openGameParams: OpenGameParameters = {\n isRealMode: gameMode === '1'\n };\n\n this._isOpenGameFromUrlInProgress = true;\n this._unsubscribeFromGameEvents();\n try {\n await gameInfo.open(openGameParams);\n }\n catch (err) {\n this._onGameClose();\n this.services.logger.error(`Failed to open game from URL: ${this.services.location.currentUri.toString()}`, err);\n }\n finally {\n this._isOpenGameFromUrlInProgress = false;\n this._subscribeToGameEvents();\n this._setLastAttemptToOpenGameFromUrl();\n }\n }\n\n redirectToHistory(): void {\n this._shouldSkipNextCloseGameRedirect = true;\n this.services.linksNavigation.openGamingHistoryPage();\n }\n\n}\n","import {LauncherOverrides} from '../config-interfaces/launcher-overrides';\nimport {IStorageService} from '../../services/storage/storage.service.interface';\nimport {ILoggerService} from '../../services/logger/logger.service.interface';\nimport {LAUNCHER_DATA_STORAGE_KEY} from \"../../../app-consts\";\nconst overrideJson = require('json-override');\n\nexport class LauncherOverridesReader {\n constructor(private _storage: IStorageService, private _logger: ILoggerService) {\n\n }\n\n private _getLauncherOverrides() {\n\n try {\n let cgp_client: any = this._storage.getJson(LAUNCHER_DATA_STORAGE_KEY);\n if(cgp_client) {\n return cgp_client.clientData;\n }\n } catch (err) {\n this._logger.error('Failed to read cgp_client from local storage', err);\n }\n\n return null;\n }\n\n private _getOrbitSpecificConfigOverrides() {\n try {\n let orbitSpecificOverrides = this._storage.getJson('orbitConfigOverrides');\n if(orbitSpecificOverrides) {\n return orbitSpecificOverrides;\n }\n } catch (err) {\n this._logger.error('Failed to get orbitConfigOverrides from local storage', err);\n }\n\n\n return null;\n }\n\n getOverrides() : LauncherOverrides | null {\n let launcherOverrides: LauncherOverrides = this._getLauncherOverrides();\n let orbitSpecificOverrides = this._getOrbitSpecificConfigOverrides();\n\n\n if(launcherOverrides || orbitSpecificOverrides) {\n launcherOverrides = (launcherOverrides || {}) as LauncherOverrides;\n\n if(orbitSpecificOverrides) {\n launcherOverrides.orbit = launcherOverrides.orbit || {};\n launcherOverrides.orbit.configs = launcherOverrides.orbit.configs || {};\n overrideJson(launcherOverrides.orbit.configs, orbitSpecificOverrides);\n }\n\n return launcherOverrides;\n }\n\n return null;\n }\n}\n\n\n\n\n","import {ILauncherService} from './launcher.service.interface';\nimport {LauncherOverrides} from '../../app-bootstrap/config-interfaces/launcher-overrides';\nimport {Check} from '@sparkware/app-utils';\nimport {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {LauncherOverridesReader} from '../../app-bootstrap/launcher-overrides-reader/launcher-overrides-reader';\n\nexport class LauncherService extends ServiceBase implements ILauncherService{\n\n private _launcherOverrides: LauncherOverrides;\n\n\n constructor(services: IServiceFactoryExtended){\n super(services);\n let launcherOverridesReader = new LauncherOverridesReader(this.services.localStorage, this.services.logger);\n this._launcherOverrides = launcherOverridesReader.getOverrides() || {};\n\n }\n\n getCMSOrigin(): string | undefined {\n return this._launcherOverrides.orbit && this._launcherOverrides.orbit.cmsSource;\n }\n\n getTestedGames(): number[] {\n\n let gameTypes = this._launcherOverrides.orbit && this._launcherOverrides.orbit.addedGameTypesFromSdm;\n if(!gameTypes) {\n return [];\n }\n\n if(Check.isNumber(gameTypes)) { // it means that the launcher gave us a single game\n return [gameTypes];\n }\n\n if(Check.isString(gameTypes)) {\n return gameTypes.split(',').map(gt => parseInt(gt)).filter(gt => Check.isNumber(gt));\n }\n\n if(Check.isArray(gameTypes)) {\n return gameTypes.map(gt => parseInt(String(gt))).filter(gt => Check.isNumber(gt));\n }\n\n return [];\n }\n\n getSegmentsOverride(): Record {\n return this._launcherOverrides?.webData?.segments || {};\n }\n}\n","import {ServiceBase} from '../ServiceBase';\nimport {action, observable, makeObservable, computed} from 'mobx';\nimport {Check} from '@sparkware/app-utils';\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {ISpinnerService} from \"../../../common/interfaces/spinner.service.interface\";\n\nexport type SPINNER_TYPE = \"REGULAR_SPINNER\" | \"MIGRATION_SPINNER\";\n\ninterface ActiveSpinnerInfo {\n startTime: number | null;\n spinnerType: SPINNER_TYPE | null;\n}\n\nexport class SpinnerService extends ServiceBase implements ISpinnerService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n }\n\n @computed\n get isSpinning(): boolean {\n return !Check.isNullOrUndefined(this._activeSpinner?.startTime);\n }\n\n @computed\n public get isTheRegularSpinnerActive(): boolean {\n return this.activeSpinnerType === \"REGULAR_SPINNER\";\n }\n\n @computed\n public get isTheMigrationSpinnerActive(): boolean {\n return this.activeSpinnerType === \"MIGRATION_SPINNER\";\n }\n\n @computed\n private get activeSpinnerType(): SPINNER_TYPE | null {\n return this._activeSpinner?.spinnerType || null;\n }\n\n @observable.ref\n private _activeSpinner: ActiveSpinnerInfo | null = null;\n\n @action.bound\n startSpinner(isMigrationSpinner?: boolean): void {\n\n if (this.isSpinning) {\n this.stopSpinner();\n }\n\n this._activeSpinner = {\n spinnerType: isMigrationSpinner ? \"MIGRATION_SPINNER\" : \"REGULAR_SPINNER\",\n startTime: this.services.time.performanceNow()\n };\n }\n\n @action.bound\n stopSpinner() {\n if(this.isSpinning) {\n this._activeSpinner = null;\n }\n }\n}","import {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {ICrossBrandsService, ICrossSpecificNavigationInfo} from \"./cross-brands.service.interface\";\nimport _ from \"../../../sdk/src/utils/underscore\";\nimport {LocalStorageKeys} from \"../storage/local-storage-keys\";\n\nexport class CrossBrandsService extends ServiceBase implements ICrossBrandsService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n const specificNavigationInfo = this._extractSpecificNavigationFromCurrentUrl();\n if(specificNavigationInfo) {\n this.services.localStorage.setJson(LocalStorageKeys.crossBrandSpecificNavigationInfo, specificNavigationInfo);\n } else {\n this.services.localStorage.removeItem(LocalStorageKeys.crossBrandSpecificNavigationInfo);\n }\n\n this.services.sdk.events.onTokenLifetimeExpired(this._onTokenLifetimeExpired.bind(this));\n }\n\n private _onTokenLifetimeExpired(): void {\n const crossBrandNavigationInfo = this.crossBackSpecificNavigation;\n if(crossBrandNavigationInfo && crossBrandNavigationInfo.callbackMethod === 'redirect') {\n this.services.location.redirect(crossBrandNavigationInfo.callbackUrl + '?ActionId=201');\n }\n }\n\n get crossBackSpecificNavigation(): ICrossSpecificNavigationInfo | null {\n return this.services.localStorage.getJson(LocalStorageKeys.crossBrandSpecificNavigationInfo);\n }\n\n get isCrossFromOtherBrand(): boolean {\n return Boolean(this.crossBackSpecificNavigation);\n }\n\n get isCrossFromPoker(): boolean {\n return this.isCrossFromOtherBrand && this.services.segmentation.isCIP;\n }\n\n get isCrossFromSport(): boolean {\n return this.isCrossFromOtherBrand && this.services.segmentation.isCIS;\n }\n\n private _extractSpecificNavigationFromCurrentUrl(): ICrossSpecificNavigationInfo | null {\n const specificNavigationParamValue = this.services.location.currentUri.queryParams.getParamValue('specificNavigation');\n if(!specificNavigationParamValue) {\n return null;\n }\n\n if(specificNavigationParamValue.startsWith('http')) {\n return {\n callbackUrl: specificNavigationParamValue\n };\n }\n\n const specificNavigationXml = _.parseXml(specificNavigationParamValue);\n if(!specificNavigationXml) {\n return null;\n }\n\n let callbackUrl: string;\n let callbackMethod: string;\n let xmlElement = specificNavigationXml.getElementsByTagName(\"CallBackURL\");\n if (xmlElement && xmlElement.length > 0) {\n callbackUrl = xmlElement.item(0).textContent;\n }\n\n xmlElement = specificNavigationXml.getElementsByTagName(\"callbackMethod\");\n if (xmlElement && xmlElement.length > 0) {\n callbackMethod = xmlElement.item(0).textContent;\n }\n\n if(callbackUrl) {\n return {\n callbackUrl: callbackUrl,\n callbackMethod: callbackMethod\n };\n }\n }\n}\n","import React from 'react';\nimport {OrbitSuspense} from '../../base-components/orbit-suspense/orbit-suspense';\nimport {RouteDefinition} from '../../../services/routing-configuration/route-definition/route-definition';\nimport {\n CASINO_GAMES_ARENA_NAME,\n CIP_ALL_GAMES_ARENA_NAME, HOME_PAGE_ARENA, JACKPOTS_ARENA_NAME, NEW_GAMES_ARENA_NAME,\n NEW_LIVE_CASINO_ARENA_NAME, PROGRESSIVE_SLOTS_ARENA_NAME,\n SLOTS_ARENA_NAME, VIDEO_POKER_ARENA_NAME\n} from '../../../services/arenas/arena-consts';\nimport {GamingHistoryType} from \"../../../services/gaming-history/gaming-history-type\";\nimport {\n CASINO_GAMES_PAGE, CHALLENGE_PAGE, GAMES_OPEN_SESSIONS_PAGE,\n GAMING_HISTORY_PAGE,\n HOME_PAGE,\n JACKPOTS_PAGE, NEW_GAMES_PAGE,\n NEW_LIVE_CASINO_PAGE, PROGRESSIVE_VIDEO_SLOTS_PAGE, SESSION_HISTORY_PAGE,\n SLOTS_PAGE, VIDEO_POKER_PAGE\n} from '../../../themes/css-global-classes';\nimport {MINI_CIP_BASE_ROUTE, MINI_CIS_BASE_ROUTE} from '../../../services/mini-orbit/mini-orbit-consts';\nimport {LaboratoryShowcase} from \"../../laboratory-showcase/laboratory-showcase.component\";\n\n\nconst MiniOrbitPageComponent = React.lazy(\n () => import(\"../mini-orbit-page.component\").then(({MiniOrbitPageComponent}) => ({default: MiniOrbitPageComponent}))\n);\nconst MiniOrbitHomePageComponent = React.lazy(\n () => import(\"../homepage/mini-orbit-homepage.component\").then(({MiniOrbitHomePageComponent}) => ({default: MiniOrbitHomePageComponent}))\n);\nconst MiniOrbitArenaHostComponent = React.lazy(\n () => import(\"../arenas/mini-orbit-arena-host.component\").then(({MiniOrbitArenaHostComponent}) => ({default: MiniOrbitArenaHostComponent}))\n);\nconst GamingHistoryComponent = React.lazy(\n () => import(\"../../gaming-history/gaming-history.component\").then(({GamingHistoryComponent}) => ({default: GamingHistoryComponent}))\n);\n\nconst GamesOpenSessionsPageComponent = React.lazy(\n () => import('../../games-open-sessions/games-open-sessions-page.component').then(({GamesOpenSessionsPageComponent}) => ({default: GamesOpenSessionsPageComponent}))\n);\n\nconst RichPageComponent = React.lazy(\n () => import('../../rich-page/rich-page.component').then(({RichPageComponent}) => ({default: RichPageComponent}))\n);\n\nexport const MINI_ORBIT_ROUTING_DEFINITION: Array = [\n {\n paths: [`${MINI_CIP_BASE_ROUTE}`, `${MINI_CIS_BASE_ROUTE}`],\n exact: true,\n data: {arenaType: HOME_PAGE_ARENA},\n cssSelectors: HOME_PAGE,\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/slots`, `${MINI_CIS_BASE_ROUTE}/slots`],\n exact: true,\n data: {arenaType: SLOTS_ARENA_NAME},\n cssSelectors: SLOTS_PAGE,\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/new-games`, `${MINI_CIS_BASE_ROUTE}/new-games`],\n exact: true,\n data: {arenaType: NEW_GAMES_ARENA_NAME},\n cssSelectors: NEW_GAMES_PAGE,\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/video-poker`, `${MINI_CIS_BASE_ROUTE}/video-poker`],\n exact: true,\n data: {arenaType: VIDEO_POKER_ARENA_NAME},\n cssSelectors: VIDEO_POKER_PAGE,\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/progressive-video-slots`, `${MINI_CIS_BASE_ROUTE}/progressive-video-slots`],\n exact: true,\n data: {arenaType: PROGRESSIVE_SLOTS_ARENA_NAME},\n cssSelectors: PROGRESSIVE_VIDEO_SLOTS_PAGE,\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/casino-games`, `${MINI_CIS_BASE_ROUTE}/casino-games`],\n exact: true,\n data: {arenaType: CASINO_GAMES_ARENA_NAME},\n cssSelectors: CASINO_GAMES_PAGE,\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/jackpots`, `${MINI_CIS_BASE_ROUTE}/jackpots`],\n exact: true,\n data: {arenaType: JACKPOTS_ARENA_NAME},\n cssSelectors: JACKPOTS_PAGE,\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/live-casino`, `${MINI_CIS_BASE_ROUTE}/live-casino`],\n exact: true,\n data: {arenaType: NEW_LIVE_CASINO_ARENA_NAME},\n cssSelectors: NEW_LIVE_CASINO_PAGE,\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/gaming-history`, `${MINI_CIS_BASE_ROUTE}/gaming-history`],\n exact: true,\n cssSelectors: GAMING_HISTORY_PAGE,\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/session-history`, `${MINI_CIS_BASE_ROUTE}/session-history`],\n exact: true,\n cssSelectors: SESSION_HISTORY_PAGE,\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/open-bets`, `${MINI_CIS_BASE_ROUTE}/open-bets`],\n exact: true,\n cssSelectors: GAMES_OPEN_SESSIONS_PAGE,\n render: () => \n \n }/>\n\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/cipallgames`, `${MINI_CIS_BASE_ROUTE}/cipallgames`],\n exact: true,\n data: {arenaType: CIP_ALL_GAMES_ARENA_NAME},\n render: () => \n \n \n } />\n \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/challenge`, `${MINI_CIS_BASE_ROUTE}/challenge`],\n exact: true,\n cssSelectors: CHALLENGE_PAGE,\n render: () => \n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/laboratory`, `${MINI_CIS_BASE_ROUTE}/laboratory`],\n exact: true,\n render: () => \n },\n];","import React from 'react';\nimport {OrbitSuspense} from '../../components/base-components/orbit-suspense/orbit-suspense';\nimport {IRoutingConfigurationService} from './routing-configuration.service.interface';\nimport {RoutingConfiguration} from './configuration/routing-configuration';\nimport {ServiceBase} from '../ServiceBase';\nimport {GamingHistoryType} from '../gaming-history/gaming-history-type';\nimport {MINI_ORBIT_ROUTING_DEFINITION} from '../../components/mini-orbit/routing/mini-orbit-routing-definition';\nimport {\n BLACKJACK_PAGE,\n CASINO_GAMES_PAGE,\n CHALLENGE_PAGE,\n EXCLUSIVE_888_GAMES_PAGE,\n GAMING_HISTORY_PAGE,\n HOME_PAGE,\n INSTANT_WIN_GAMES_PAGE,\n JACKPOTS_PAGE,\n NEW_GAMES_PAGE,\n NEW_LIVE_CASINO_PAGE,\n PROGRESSIVE_VIDEO_SLOTS_PAGE,\n ROULETTE_PAGE,\n SCRATCH_CARDS_PAGE,\n SESSION_HISTORY_PAGE,\n SLOTS_PAGE,\n VIDEO_POKER_PAGE,\n VIRTUAL_SPORTS_PAGE,\n TIPPING_HISTORY_PAGE,\n NEW_LIVE_AB_CASINO_PAGE,\n GAMES_OPEN_SESSIONS_PAGE\n} from '../../themes/css-global-classes';\nimport {\n BLACKJACK_ARENA_NAME,\n CASINO_GAMES_ARENA_NAME,\n EXCLUSIVE_ARENA_NAME,\n HOME_PAGE_ARENA,\n INSTANT_WIN_GAMES_ARENA_NAME,\n JACKPOTS_ARENA_NAME,\n NEW_LIVE_CASINO_AB_ARENA_NAME,\n NEW_GAMES_ARENA_NAME,\n NEW_LIVE_CASINO_ARENA_NAME,\n PROGRESSIVE_SLOTS_ARENA_NAME,\n ROULETTE_ARENA_NAME,\n SCRATCH_CARDS_ARENA_NAME,\n SLOTS_ARENA_NAME,\n VIDEO_POKER_ARENA_NAME,\n VIRTUAL_SPORT_ARENA_NAME,\n VIDEO_SLIDES_ARENA\n} from '../arenas/arena-consts';\nimport {CmsBannerComponent} from \"../../components/cms-banner/cms-banner.component\";\nimport {BannerComponent} from \"../../components/banner/banner.component\";\n\nconst ArenaHostComponent = React.lazy(\n () => import(\"../../components/arena-host/arena-host.component\").then(({ArenaHostComponent}) => ({default: ArenaHostComponent}))\n);\n\nconst CmsPageComponent = React.lazy(\n () => import('../../components/cms-page/cms-page.component').then(({CmsPageComponent}) => ({default: CmsPageComponent}))\n);\nconst GamingHistoryPageComponent = React.lazy(\n () => import('../../components/gaming-history/gaming-history-page.component').then(({GamingHistoryPageComponent}) => ({default: GamingHistoryPageComponent}))\n);\n\nconst GamesOpenSessionsPageComponent = React.lazy(\n () => import('../../components/games-open-sessions/games-open-sessions-page.component').then(({GamesOpenSessionsPageComponent}) => ({default: GamesOpenSessionsPageComponent}))\n);\n\nconst TippingHistoryPageComponent = React.lazy(\n () => import('../../components/tipping-history/tipping-history-page.component').then(({TippingHistoryPageComponent}) => ({default: TippingHistoryPageComponent}))\n);\n\nconst RichPageComponent = React.lazy(\n () => import('../../components/rich-page/rich-page.component').then(({RichPageComponent}) => ({default: RichPageComponent}))\n);\nconst LaboratoryShowcase = React.lazy(\n () => import('../../components/laboratory-showcase/laboratory-showcase.component').then(({LaboratoryShowcase}) => ({default: LaboratoryShowcase}))\n);\n\nexport class RoutingConfigurationService extends ServiceBase implements IRoutingConfigurationService {\n getRoutingConfiguration(): RoutingConfiguration {\n return {\n fallbackRoute: {\n render: () => \n },\n routes: [\n {\n paths: ['/'],\n exact: true,\n data: {arenaType: HOME_PAGE_ARENA},\n cssSelectors: HOME_PAGE,\n render: () =>\n \n \n \n },\n {\n paths: ['/slots', '/video-slots', '/slot-machines', '/slot-machine', '/spillemaskiner', '/spelautomater', '/casino-games/online-slots', '/spielautomaten', '/gokkasten', '/online-slots'],\n exact: true,\n data: {arenaType: SLOTS_ARENA_NAME},\n cssSelectors: SLOTS_PAGE,\n render: () =>\n \n \n \n },\n {\n paths: ['/new-games', '/nieuwe-spellen', '/new', '/neue-slots/', '/nya-spel/', '/nye-spil'],\n exact: true,\n data: {arenaType: NEW_GAMES_ARENA_NAME},\n cssSelectors: NEW_GAMES_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/progressive-video-slots'],\n exact: true,\n data: {arenaType: PROGRESSIVE_SLOTS_ARENA_NAME},\n cssSelectors: PROGRESSIVE_VIDEO_SLOTS_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/casino-games/online-roulette', '/roulette', '/ruleta', '/roleta'],\n exact: true,\n data: {arenaType: ROULETTE_ARENA_NAME},\n cssSelectors: ROULETTE_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/virtual-sports'],\n exact: true,\n data: {arenaType: VIRTUAL_SPORT_ARENA_NAME},\n cssSelectors: VIRTUAL_SPORTS_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/casino-games/online-blackjack', '/blackjack'],\n exact: true,\n data: {arenaType: BLACKJACK_ARENA_NAME},\n cssSelectors: BLACKJACK_PAGE,\n render: () =>\n \n \n },\n {\n paths: ['/casino-games/jackpots', '/jackpots', '/jackpot'],\n exact: true,\n data: {arenaType: JACKPOTS_ARENA_NAME},\n cssSelectors: JACKPOTS_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/casino-games/instant-win-games', '/instant-win-games'],\n exact: true,\n data: {arenaType: INSTANT_WIN_GAMES_ARENA_NAME},\n cssSelectors: INSTANT_WIN_GAMES_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/casino-games/all-games','/casino-games', '/jocuri-casino', '/jogos', '/card-table-games', '/juegos-de-casino', '/giochi-da-casino', '/casino-spil', '/casinospel', '/casino-spellen', '/table-games', '/bordsspel', '/bordspil'],\n exact: true,\n data: {arenaType: CASINO_GAMES_ARENA_NAME},\n cssSelectors: CASINO_GAMES_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/gaming-history'],\n exact: true,\n cssSelectors: GAMING_HISTORY_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/tipping-history'],\n exact: true,\n cssSelectors: TIPPING_HISTORY_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/session-history'],\n exact: true,\n cssSelectors: SESSION_HISTORY_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/open-bets'],\n exact: true,\n cssSelectors: GAMES_OPEN_SESSIONS_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/challenge'],\n data: {preventNotifications : true},\n exact: true,\n cssSelectors: CHALLENGE_PAGE,\n render: () => \n },\n {\n paths: ['/live-casino', '/cazinou-live', '/ruleta-en-vivo', '/live-dealer'],\n exact: true,\n data: {arenaType: NEW_LIVE_CASINO_ARENA_NAME},\n cssSelectors: NEW_LIVE_CASINO_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/live-casino/new/'],\n exact: true,\n data: {arenaType: NEW_LIVE_CASINO_ARENA_NAME},\n cssSelectors: NEW_LIVE_CASINO_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/live-casino-arena'],\n exact: true,\n data: {arenaType: NEW_LIVE_CASINO_AB_ARENA_NAME},\n cssSelectors: NEW_LIVE_CASINO_PAGE + ' ' + NEW_LIVE_AB_CASINO_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/video-poker'],\n exact: true,\n data: {arenaType: VIDEO_POKER_ARENA_NAME},\n cssSelectors: VIDEO_POKER_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/scratch-cards', '/rubbellose', '/reveal-games'],\n exact: true,\n data: {arenaType: SCRATCH_CARDS_ARENA_NAME},\n cssSelectors: SCRATCH_CARDS_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/888-exclusive-games', '/888-exklusive-spiele', '/888-exclusieve-spellen', '/si-exclusive-games/', '/exklusive-spiele', '/exklusiva-spel', '/eksklusive-spil/'],\n exact: true,\n data: {arenaType: EXCLUSIVE_ARENA_NAME},\n cssSelectors: EXCLUSIVE_888_GAMES_PAGE,\n render: () => \n \n \n },\n {\n paths: ['/laboratory/'],\n exact: true,\n render: () => \n },\n {\n paths: ['/banner-test/'],\n exact: true,\n render: () => (\n \n \n )\n },\n {\n paths: ['/video-slides'],\n exact: true,\n data: {standalone: true, arenaType: VIDEO_SLIDES_ARENA},\n render: () => \n },\n ...MINI_ORBIT_ROUTING_DEFINITION\n ]\n }\n }\n}\n","import {RouteBase} from './route-base';\n\nexport class OrbitRoute extends RouteBase {\n\n /**\n * Overrides base class\n * @return {boolean}\n * @private\n */\n protected _isOrbitRoute(): boolean {\n return true;\n }\n}\n","import {IRoutingService} from './routing.service.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport { action, observable, makeObservable } from 'mobx';\nimport {IRoute} from './route/route.interface';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {Uri} from '../location/uri/uri';\nimport {OrbitRoute} from './route/orbit-route';\nimport {FallbackRoute} from './route/fallback-route';\nimport {UriPath} from '../location/uri-path/uri-path';\nimport {tryMatchPath} from './routing-utils';\nimport {Check} from \"@sparkware/app-utils\";\nimport {RouteDefinition} from \"../routing-configuration/route-definition/route-definition\";\nimport {FEATURE_ROUTE_OVERWRITE} from \"../../../common/const/ab-testing-names\";\n\n//https://reacttraining.com/react-router/web/api/match\n\nexport class RoutingService extends ServiceBase implements IRoutingService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this.reaction(() => this.services.location.currentUri,\n (uri) => this._updateCurrentRoute(uri),\n {\n fireImmediately: true\n });\n\n this.reaction(\n () => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (isAuthorized) {\n\n let featureData = this.services.sdk.getAbTestingDataForFeature(FEATURE_ROUTE_OVERWRITE);\n\n if (Check.isNullOrUndefined(featureData)) {\n let abChangeRoute = this.services.localStorage.getJson('orbit_AbRouteOverwrite');\n if (!Check.isNullOrUndefined(abChangeRoute)) {\n this.services.localStorage.removeItem('orbit_AbRouteOverwrite');\n }\n }\n\n let routeChangeData = featureData && featureData.Properties && featureData.Properties.routeschange;\n\n if (!Check.isNullOrUndefined(routeChangeData)) {\n this.services.localStorage.setItem('orbit_AbRouteOverwrite', routeChangeData);\n }\n }\n\n this._doRedirect(this.currentRoute?.routeDefinition);\n }\n );\n }\n\n @observable.ref\n currentRoute: IRoute;\n\n private _currentPathName: UriPath = null;\n\n @action.bound\n private _updateCurrentRoute(uri: Uri): void {\n if (this._currentPathName?.equals(uri.pathName)) {\n return;\n }\n\n let routingConfiguration = this.services.routingConfiguration.getRoutingConfiguration();\n let match = tryMatchPath(uri.pathName.toString(), routingConfiguration.routes);\n\n if (match) {\n let didRedirect = this._doRedirect(match.routeDefinition);\n if (didRedirect) {\n return;\n }\n this._removeCurrentRouteCssSelectors();\n this.currentRoute = new OrbitRoute(this._overrideArenaType(match.routeDefinition), match.routeParams);\n this._addCurrentRouteCssSelectors();\n } else {\n if (this.services.miniOrbit.isEnabled) {\n this.currentRoute = new FallbackRoute(this.services.miniOrbit.fallbackRouteRender);\n } else {\n this.currentRoute = new FallbackRoute(routingConfiguration.fallbackRoute.render);\n }\n }\n this._currentPathName = uri.pathName;\n\n // We need this timeout to fix the following iOS bug(pages are not scrolled to the top upon navigation):\n // https://dev.azure.com/888holdings/GamingNDL/_workitems/edit/2072775\n // Probably happens because the route change here + scrollTo happen before the new page component loads.\n \n setTimeout(() => this.services.window.scrollTo(0, 0), 300);\n }\n\n private _overrideArenaType(routeDefinition: RouteDefinition): RouteDefinition {\n try {\n let routesToArenaTypesMapping = this.services.configuration.data.arenasRoutingOverride?.routesToArenaTypesMapping;\n if (routesToArenaTypesMapping) {\n for (const path of routeDefinition.paths) {\n if (routesToArenaTypesMapping[path]) {\n routeDefinition.data.arenaType = routesToArenaTypesMapping[path];\n return routeDefinition;\n }\n }\n }\n return routeDefinition;\n } catch (e) {\n this.services.logger.error('Error while overriding arenaType in routing service!', e);\n return routeDefinition;\n }\n }\n\n private _removeCurrentRouteCssSelectors() {\n this._getCurrentRouteCssSelectors().forEach(selector => {\n this.services.dom.body.classList.remove(selector);\n });\n }\n\n private _addCurrentRouteCssSelectors() {\n this._getCurrentRouteCssSelectors().forEach(selector => {\n this.services.dom.body.classList.add(selector);\n });\n }\n\n private _getCurrentRouteCssSelectors(): string[] {\n if (!this.currentRoute?.routeDefinition?.cssSelectors) {\n return [];\n }\n\n return this.currentRoute.routeDefinition.cssSelectors.split(' ').filter(selector => selector);\n\n }\n\n isOrbitRoute(path: UriPath): boolean {\n let match = tryMatchPath(path.toString(), this.services.routingConfiguration.getRoutingConfiguration().routes);\n if (match) {\n return true;\n } else {\n return false;\n }\n }\n\n private _cleanUpOldAbTestData(): void {\n let abChangeRoute = this.services.localStorage.getJson('orbit_abChangeRoute');\n if (!Check.isNullOrUndefined(abChangeRoute)) {\n // This cleanup is done to delete the local storage data remaining from the previous AB Test\n // TODO: Remove this after some time\n this.services.localStorage.removeItem('orbit_abChangeRoute');\n }\n }\n\n _doRedirect(routeDefinition: RouteDefinition): boolean {\n try {\n\n this._cleanUpOldAbTestData();\n\n let abChangeRoute = this.services.localStorage.getJson('orbit_AbRouteOverwrite');\n\n for (let index = 0; index < routeDefinition.paths?.length; index++) {\n let currentPathName = routeDefinition.paths[index]?.toLowerCase();\n if (abChangeRoute && abChangeRoute[currentPathName]) {\n this.services.location.push(abChangeRoute[currentPathName]);\n return true;\n }\n }\n return false;\n } catch (err) {\n this.services.logger.error('Routing service: doRedirect failed. Error: ' + err);\n return false;\n }\n }\n}\n","import {ServiceBase} from '../ServiceBase';\nimport {IOverlayService} from './overlay.service.interface';\nimport { action, computed, observable, runInAction, makeObservable } from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {IOverlayConsumer, IOverlaySubscription} from \"./overlay-consumer.interface\";\n//import {LoginFormOverlayController} from \"./login-form-overlay-controller\";\nimport {Check} from \"@sparkware/app-utils\";\n\n\nexport class OverlayService extends ServiceBase implements IOverlayService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n //this._loginFormOverlayController = new LoginFormOverlayController(services);\n //this.registerConsumer(this._loginFormOverlayController);\n this.reaction(\n () => this.isOpen,\n (isOpen) => {\n if(isOpen) {\n this.disableScrolling();\n } else {\n this.enableScrolling();\n }\n this.services.sdk.setOrbitActiveOverlayExists(isOpen);\n }\n );\n }\n\n //private readonly _loginFormOverlayController: LoginFormOverlayController;\n\n @observable\n private _overlayConsumers: IOverlayConsumer[] = [];\n\n registerConsumer(consumer: IOverlayConsumer): IOverlaySubscription {\n runInAction(() => {\n this._overlayConsumers.push(consumer);\n });\n\n return {\n unsubscribe: () => {\n const index = this._overlayConsumers.findIndex(c => c === consumer);\n if(index >= 0) {\n runInAction(() => {\n this._overlayConsumers.splice(index, 1);\n })\n }\n }\n }\n }\n\n\n get zIndex(): number | undefined {\n const zIndexes = this._overlayConsumers.filter(c => c.needsOverlay)\n .map(c => c.getOverlayZIndex())\n .filter(zIndex => !Check.isNullOrUndefined(zIndex));\n if(zIndexes.length === 0) {\n return undefined;\n }\n\n return Math.max(...zIndexes);\n }\n\n countCurrentConsumers(predicate: (consumer: IOverlayConsumer) => boolean): number {\n let count = 0;\n for(let c of this._overlayConsumers) {\n if(predicate(c)) {\n count++;\n }\n }\n return count;\n }\n\n\n @computed\n get isOpen(): boolean {\n //We do map here to iterate over all consumer in this way isOpen will be dependent on all observables in the _overlayConsumers\n return this._overlayConsumers.map(c => c.needsOverlay)\n .some(needsOverlay => needsOverlay);\n }\n\n\n @action.bound\n closeOverlay(): void {\n this._overlayConsumers.forEach(c => c.onOverlayClicked());\n }\n\n disableScrolling(): void {\n this.services.dom.disableScrolling();\n\n }\n enableScrolling(): void {\n if(!this.isOpen) {\n this.services.dom.enableScrolling();\n }\n\n }\n}\n","import {DateFormattedToRegulationOffset, ITimeService} from './time.service.interface';\nimport {ServiceBase} from \"../ServiceBase\";\nimport DateFormatter from \"../../../sdk/src/utils/date_formatter\";\nimport {CGPEventSubscription, IDateFormattedToRegulationOffset} from '../sdk/cgp-sdk.interface';\nimport {UndefinedString} from '../../../common/types/nullable-types';\n\nexport class TimeService extends ServiceBase implements ITimeService {\n now(): number {\n return Date.now();\n }\n\n performanceNow(): number {\n return performance.now();\n }\n\n getCurrentDate(): Date {\n return new Date();\n }\n\n getCurrentServerDate(): Date {\n return this.services.sdk.getCurrentServerDate();\n }\n\n formatLastLogin(date: UndefinedString, dateFormattedToRegulation: UndefinedString): string {\n const lastLogin = this._formatToRegulationOffset(date, dateFormattedToRegulation);\n const formattedText = this._lastLoginFormattedText(lastLogin.date + 'Z', lastLogin.isUTC)\n return formattedText;\n }\n\n private _formatToRegulationOffset(date: UndefinedString, dateFormattedToRegulation: UndefinedString): IDateFormattedToRegulationOffset {\n return this.services.sdk.formatToRegulationOffset(date, dateFormattedToRegulation);\n }\n\n private _lastLoginFormattedText(lastLogin: Date | string, isUtc: boolean): string {\n return DateFormatter.format(lastLogin.toString(), this._getRegulationDateTimeFormat(), isUtc);\n }\n\n private _getRegulationDateTimeFormat(): string {\n return this.services.sdk.dateAndTimeFormat.dateTime || this.getDateTimeHistoryFormat();\n }\n\n getDateFormat(): string {\n return this.services.sdk.dateAndTimeFormat.date;\n }\n\n getTimeFormat(): string {\n return this.services.sdk.dateAndTimeFormat.time;\n }\n\n getDateTimeFormat(): string {\n return this.services.sdk.dateAndTimeFormat.dateTime;\n }\n\n getDateTimeHistoryFormat(): string {\n return this.services.sdk.dateAndTimeFormat.dateTimeHistory;\n }\n\n getTimezoneOffset(): number {\n return (new Date().getTimezoneOffset() / 60) * (-1);\n }\n\n formatHistoryRecordDateTime(date: Date | string, isUtc: boolean): string {\n return DateFormatter.format(date.toString(), this.getDateTimeHistoryFormat(), isUtc);\n }\n\n onServerTimeUpdated(callBack: () => void): CGPEventSubscription {\n return this.services.sdk.events.onServerTimeUpdated(callBack);\n }\n\n convertToRegulationTimeZone(date: Date): DateFormattedToRegulationOffset {\n return this.services.sdk.convertToRegulationTimeZone(date);\n }\n\n format(date: any, mask?: string, utc?: boolean): string {\n return this.services.sdk.format(date, mask, utc);\n }\n}","import {ServiceBase} from '../ServiceBase';\nimport { action, observable, reaction, makeObservable } from 'mobx';\nimport {SEO_CATEGORIES} from '../../consts/seo-categories';\nimport {\n AiNewRecommendedGames,\n IAiNewGamesEngineService\n} from \"./ai-new-games.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nexport class AiNewGamesEngineService extends ServiceBase implements IAiNewGamesEngineService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n reaction(() => this.services.user.isAuthorized,\n () => {\n this._aiNewRecommendedGamesData = null;\n });\n }\n\n @observable.ref\n _aiNewRecommendedGamesData: AiNewRecommendedGames | null = null;\n private _isAINewRecommendedGamesUpdateInProgress = false;\n\n get aiNewRecommendedGames(): AiNewRecommendedGames | null {\n if (Check.isNullOrUndefined(this._aiNewRecommendedGamesData)) {\n this._updateAiNewRecommendedGames();\n }\n return this._aiNewRecommendedGamesData;\n }\n\n @action.bound\n private _setAiNewRecommendedGames(value: AiNewRecommendedGames) {\n\n let tempGameTypesMap = {};\n\n if (value.gameTypes) {\n value.gameTypes.forEach((gameType, i) => tempGameTypesMap[gameType] = i);\n }\n\n this._aiNewRecommendedGamesData = {...value, gameTypes: (value.gameTypes || []), gameTypesMap: tempGameTypesMap};\n }\n\n private async _updateAiNewRecommendedGames(): Promise {\n if(this._isAINewRecommendedGamesUpdateInProgress) {\n return;\n }\n this._isAINewRecommendedGamesUpdateInProgress = true;\n try {\n if(this.services.user.isAuthorized) {\n let aiRecommendationsData = await this.services.sdk.getAINewRecommendations({filterOutRecentlyPlayedGames: true});\n this._setAiNewRecommendedGames({\n gameTypes: aiRecommendationsData?.gameTypes || [],\n engine: aiRecommendationsData?.engine\n });\n } else {\n // we need this setTimeout because _updateAiNewRecommendedGames is called from aiNewRecommendedGames getter\n // which in turn might be called from a computed observable and this doesn't like to mobx\n setTimeout(() => {\n this._setAiNewRecommendedGames({\n gameTypes: [],\n engine: ''\n });\n })\n\n }\n\n this._sendAINewRecommendationAnalytics();\n } finally {\n this._isAINewRecommendedGamesUpdateInProgress = false;\n }\n\n }\n\n private _sendAINewRecommendationAnalytics(): void {\n if(!this.aiNewRecommendedGames) {\n return;\n }\n\n let analyticsObject = this.aiNewRecommendedGames.gameTypes.reduce((result, gameType, index) => {\n result[gameType] = index;\n return result;\n }, {});\n\n\n this.services.analytics.sendElasticInfoEvent({\n category: SEO_CATEGORIES.AI_NEW_GAMES_RECOMMENDATIONS,\n action: JSON.stringify(analyticsObject),\n label: this.aiNewRecommendedGames.engine,\n eventType:\"Orbit_AI_Feature\"\n }, true);\n }\n}\n","import React from 'react';\nimport {IThemeCustomizer, IThemeService} from './theme.service.interface';\nimport {OrbitTheme} from '../../themes/architecture/orbit-theme.interface';\nimport { action, observable, makeObservable } from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {IThemeDefinition} from \"./theme-definition.interface\";\nimport {SDK_CSS_OVERRIDE} from \"../../themes/css-global-classes\";\nimport {StandardThemeCustomizer} from \"./standard-theme-customizer\";\nimport {ThemeName} from \"../../themes/architecture/theme-names\";\nimport {IThemeBoxes} from \"./theme-boxes.interface\";\n\nexport class ThemeService extends ServiceBase implements IThemeService {\n\n constructor(services: IServiceFactoryExtended, themeDefinition: IThemeDefinition, defaultBoxes: IThemeBoxes) {\n super(services);\n\n makeObservable(this);\n this._boxes = {\n ...defaultBoxes,\n ...themeDefinition.themeBoxes\n }\n\n this._setCurrentTheme(themeDefinition);\n this.services.dom.body.classList.add(SDK_CSS_OVERRIDE)\n }\n\n\n\n @observable.ref\n private _currentThemeDefinition: IThemeDefinition | null;\n\n get themeName(): ThemeName {\n return this._currentThemeDefinition.themeName;\n }\n\n get currentTheme(): OrbitTheme | null {\n return this._currentThemeDefinition?.shellTheme;\n }\n\n private readonly _boxes: IThemeBoxes;\n get boxes(): IThemeBoxes{\n return this._boxes;\n }\n\n get mainContentTheme(): OrbitTheme {\n return this._currentThemeDefinition.mainContentTheme;\n }\n\n get popupsTheme(): OrbitTheme {\n return this._currentThemeDefinition.popupsTheme;\n }\n\n get toastersTheme(): OrbitTheme {\n return this._currentThemeDefinition.toastersTheme;\n }\n\n get shouldUseSquareIcons(): boolean {\n return this.services.device.hybrid.isEmbedded || Boolean(this._currentThemeDefinition.useSquareIconsForGames);\n }\n\n get themeCustomizer(): IThemeCustomizer {\n const createThemeCustomizer = this._currentThemeDefinition.createThemeCustomizer;\n if (createThemeCustomizer) {\n return createThemeCustomizer(this.services);\n }\n return new StandardThemeCustomizer(this.services);\n }\n\n @action.bound\n private _setCurrentTheme(themeDefinition: IThemeDefinition) {\n this._currentThemeDefinition = themeDefinition;\n }\n\n renderGlobalStyles(): React.ReactNode {\n return this.currentTheme.globalStyles;\n }\n\n}\n\n","import {IMiniOrbitCommunicationAdapter} from '../mini-orbit-communication-adapter.interface';\nimport {IServiceFactoryExtended} from '../../../service-factory-extended.interface';\nimport {IAutoLoginParams} from '../../../../../common/interfaces/autologin-params.interface';\nimport {IDepositWidgetAppLaunchInfo} from \"@sparkware/uc-sdk-core/lib/apps/deposit/deposit-widget.interfaces\";\n\nexport class VoidCommunicationAdapter implements IMiniOrbitCommunicationAdapter {\n constructor(private services: IServiceFactoryExtended) {\n }\n\n onUserKicked(logoutReason: number): Promise{\n return Promise.resolve(null);\n }\n\n openUrlInExternalBrowser = (url: string): void => {\n this.services.logger.error('You are not suppose to call MiniOrbitService.openUrl because orbit is not in the mini mode');\n this.services.window.open(url);\n };\n\n onSiteLoaded(): void { }\n onAutologinSuccess(): void { }\n onAutologinFailed(): void { }\n openControlCenter(): void { }\n openDeposit(data: IDepositWidgetAppLaunchInfo): Promise { return Promise.reject() };\n\n}\n","import React from 'react';\nimport {OrbitSuspense} from '../../components/base-components/orbit-suspense/orbit-suspense';\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IMiniOrbitService} from \"./mini-orbit.service.interface\";\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {\n ArenasHeaderButtonConfig,\n MiniOrbitConfiguration\n} from '../configurations/config-data-sections/mini-orbit.configuration';\nimport {Check} from '@sparkware/app-utils';\nimport {RouteRender} from '../routing-configuration/route-definition/route-definition';\nimport {UriPath} from '../location/uri-path/uri-path';\nimport {IControlCenterData, IMiniOrbitCommunicationAdapter} from './adapters/mini-orbit-communication-adapter.interface';\nimport {VoidCommunicationAdapter} from './adapters/void/void-communication-adapter';\nimport {MINI_CIP_BASE_ROUTE, MINI_CIS_BASE_ROUTE} from './mini-orbit-consts';\nimport {IDepositWidgetAppLaunchInfo} from \"@sparkware/uc-sdk-core/lib/apps/deposit/deposit-widget.interfaces\";\nimport {LOGOUT_REASONS} from \"../../../sdk/src/services/oauth/oauth_const\";\n\nconst CmsPageComponent = React.lazy(\n () => import('../../components/cms-page/cms-page.component').then(({CmsPageComponent}) => ({default: CmsPageComponent}))\n);\nconst MiniOrbitPageComponent = React.lazy(\n () => import('../../components/mini-orbit/mini-orbit-page.component').then(({MiniOrbitPageComponent}) => ({default: MiniOrbitPageComponent}))\n);\nconst MiniOrbitFreePlayDetails = React.lazy(\n () => import('../../components/user-menu/freeplay-details/freeplay-details.component').then(({MiniOrbitFreePlayDetails}) => ({default: MiniOrbitFreePlayDetails}))\n);\n\nexport class MiniOrbitService extends ServiceBase implements IMiniOrbitService {\n private _communicationAdapter: IMiniOrbitCommunicationAdapter;\n private _onKickUserCount = 0;\n\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this._communicationAdapter = new VoidCommunicationAdapter(services);\n this._currentMiniOrbitConfig = this._extractCurrentMiniOrbitConfig();\n if (this.isEnabled) {\n this.services.splash.onSplashRemoved(() => this._communicationAdapter.onSiteLoaded());\n this._reportAutologinResult();\n\n this.services.location.enableBasePathOverride(); // this will make the LocationService to prepend /cip to any navigation\n this._communicationAdapter = this.services.miniOrbitCommunicationAdapterFactory.createAdapter(this._currentMiniOrbitConfig.basePath);\n this.reaction(() => this.services.user.logoutReason,\n async (logoutReason) => {\n if(logoutReason === LOGOUT_REASONS.CLIENT_SIDE_LOGOUT) {\n //when we get this reason basically it means that we did a logout before an autologin (see oauth2_service.js runAutologin method), which in mini orbit is the only way to do the login.\n return;\n }\n // Every time an auto login happens if the user was already logged (having a valid token in the local storage) a logout is first executed.\n // So by calling _communicationAdapter.onUserKicked immediately after the user is logged out it will trigger another auto login\n // and we will end up with an infinite reloading of the app.\n // For this reason we wait for the auto login to complete and if after this the user is still not logged in then we call onUserKicked.\n if(!this.services.user.isAuthorized) {\n try {\n await this.services.user.waitForAutoLogin();\n } catch (err) {\n this.services.logger.error('Mini orbit: Waiting for auto login to complete failed!', err);\n }\n\n if(!this.services.user.isAuthorized) {\n this._onKickUserCount++;\n this.services.analytics.sendAnalytics('mini_orbit', 'onuserkicked', this._currentMiniOrbitConfig.basePath, this._onKickUserCount);\n this._communicationAdapter.onUserKicked(logoutReason).then(response => {\n if(response?.token)\n {\n this.services.user.runAutoLogin(response);\n }\n });\n }\n }\n });\n }\n }\n\n\n private async _reportAutologinResult() {\n try {\n await this.services.user.waitForAutoLogin();\n this._communicationAdapter.onAutologinSuccess();\n } catch (err) {\n this._communicationAdapter.onAutologinFailed();\n }\n\n };\n\n\n private _extractCurrentMiniOrbitConfig() {\n const currentLocationBasePath = this.services.location.currentUri.pathName.getBase().toString().toLowerCase();\n\n const miniOrbitConfigSection = this.services.configuration.data.miniOrbit;\n if (!Check.isObject(miniOrbitConfigSection)) {\n return null;\n }\n\n const basePaths = Object.keys(miniOrbitConfigSection);\n\n for (let i = 0; i < basePaths.length; i++) {\n const basePath = basePaths[i];\n if (basePath?.toLowerCase() === currentLocationBasePath) {\n let miniOrbitConfig = miniOrbitConfigSection[basePath];\n miniOrbitConfig.basePath = basePath;\n return miniOrbitConfig;\n }\n }\n\n return null;\n }\n\n private readonly _currentMiniOrbitConfig: MiniOrbitConfiguration = null;\n\n get currentMiniOrbitConfig(): MiniOrbitConfiguration {\n return this._currentMiniOrbitConfig;\n }\n\n get isEnabled(): boolean {\n\n if(this.services.device.os.isPC)\n return false;\n\n if (this._currentMiniOrbitConfig) {\n return true;\n }\n return false;\n }\n\n get isCip(): boolean {\n if(this.isEnabled) {\n return this._currentMiniOrbitConfig.basePath.toLowerCase() === MINI_CIP_BASE_ROUTE;\n }\n\n return false;\n }\n\n get isCis(): boolean {\n if(this.isEnabled) {\n return this._currentMiniOrbitConfig.basePath.toLowerCase() === MINI_CIS_BASE_ROUTE;\n }\n\n return false;\n }\n\n get fallbackRouteRender(): RouteRender {\n return () => \n } />\n ;\n }\n\n getCurrentMiniOrbitArenaConfig(): ArenasHeaderButtonConfig {\n let miniOrbitArenas = this.currentMiniOrbitConfig?.arenasHeaderButtons;\n\n return miniOrbitArenas && miniOrbitArenas.find(arena => this.services.location.currentUri.pathName.equals(new UriPath(arena.link)));\n }\n\n openUrl = (url: string): void => {\n this._communicationAdapter.openUrlInExternalBrowser(url);\n }\n\n openControlCenter(data: IControlCenterData): void {\n this._communicationAdapter.openControlCenter(data);\n }\n\n openDeposit(data: IDepositWidgetAppLaunchInfo): Promise {\n return this._communicationAdapter.openDeposit(data);\n }\n\n openFreePlays = () => {\n if(this.services.user.isAuthorized) {\n this.services.dialog.showModal(() => \n \n , {\n title: ' '\n });\n }\n };\n}\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const DialogConsumerContentBox = styledBox(\"DialogConsumerContentBox\");\n","import styled from 'styled-components';\nimport {FORCE_CENTRALIZATION, FORCE_TRANSPARENT_BACKGROUND} from '../../css-classes';\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\n\nexport const DialogOverlayDefaultBox = styled.div<{transparentBackgroundOpacity: number; isHidden: boolean; isIOS?: boolean}>`\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n \n display: ${props => props.isHidden ? \"none\" : \"flex\"};\n flex-direction: column;\n align-items: center;\n box-sizing: border-box;\n \n background-color: ${props => hexToRgba(props.theme.colors.background, 0.85)};\n \n &.${FORCE_TRANSPARENT_BACKGROUND} {\n background-color: rgba(0, 0, 0, ${props => props.transparentBackgroundOpacity});\n }\n\n justify-content: center;\n padding-top: env(safe-area-inset-top);\n padding-bottom: env(safe-area-inset-bottom);\n padding-left: env(safe-area-inset-left);\n padding-right: env(safe-area-inset-right);\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n justify-content: flex-start;\n\n &.${FORCE_CENTRALIZATION} {\n align-items: center;\n justify-content: center;\n }\n }\n`;\n","import {DialogOverlayDefaultBox} from \"./dialog-overlay.default.box\";\nimport styled from \"styled-components\";\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\n\nexport const DialogOverlayMrGreenBox= styled(DialogOverlayDefaultBox)`\n background-color: ${props => hexToRgba(props.theme.colors.backgroundContrast, 0.85)};\n`;","import {DialogOverlayDefaultBox} from './dialog-overlay.default.box';\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {DialogOverlayMrGreenBox} from \"./dialog-overlay.mrgreen.box\";\n\nexport const DialogOverlayBox = styledByTheme(DialogOverlayDefaultBox)\n .forMrGreen(DialogOverlayMrGreenBox)\n .apply();","export const MODAL_DIALOG_ANIMATION_DURATION: number = 400;","import styled, {keyframes, css} from 'styled-components';\nimport {\n APPLY_ANIMATION,\n APPLY_BORDERS, APPLY_MAX_HEIGHT, APPLY_MODAL_CLOSING_ANIMATION,\n DISABLE_FULLSCREEN_MOBILE,\n FORCE_FULLSCREEN_TABLET,\n FORCE_TRANSPARENT_BACKGROUND, FORCE_TRANSPARENT_CONTENT_BACKGROUND,\n} from '../../css-classes';\nimport {styledByDevice} from '../../../../themes/architecture/styled-by-device';\nimport { CssRule } from '../../../../themes/architecture/css-helpers/css-rule';\nimport {MODAL_DIALOG_ANIMATION_DURATION} from \"./dialog-overlay-constants\";\n\n\n\nconst showDialogKeyframes = keyframes`\n 0% {\n transform: scale(0.9) translateY(-40%) translateZ(1000px) perspective(600px) rotateX(80deg);\n }\n\n 100% {\n transform: scale(1) translateY(0) translateZ(1000px) perspective(600px) rotateX(0);\n }\n`;\n\nconst closeDialogKeyFrames = keyframes`\n 0% {\n transform: scale(1) translateY(0) translateZ(1000px) perspective(600px) rotateX(0);\n\n }\n\n 100% {\n transform: scale(0.9) translateY(-40%) translateZ(1000px) perspective(600px) rotateX(80deg);\n }\n`;\n\nconst showDialogAnimation = css`\n animation: ${showDialogKeyframes} ${MODAL_DIALOG_ANIMATION_DURATION}ms ease-in-out forwards;\n`;\n\nconst closeDialogAnimation = css`\n animation: ${closeDialogKeyFrames} ${MODAL_DIALOG_ANIMATION_DURATION}ms ease-in-out forwards;\n`;\n\nconst applyBorders = css`\n &.${APPLY_BORDERS} {\n border-width: 2px;\n border-style: solid;\n border-color: ${({theme}) => theme.colors.modalDialogBorder};\n border-radius: 10px;\n }\n`;\n\nconst applyMaxHeight = css`\n &.${APPLY_MAX_HEIGHT} {\n max-height: 80%;\n }\n`;\n\nconst DefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n background-color: ${props => props.theme.colors.background};\n &.${FORCE_TRANSPARENT_CONTENT_BACKGROUND}{\n background-color: transparent;\n }\n max-height: 100%;\n`;\n\nconst PcBox = styled(DefaultBox)`\n ${applyBorders}\n ${applyMaxHeight}\n &.${APPLY_ANIMATION} {\n ${showDialogAnimation};\n }\n &.${APPLY_MODAL_CLOSING_ANIMATION} {\n ${closeDialogAnimation}\n }\n`;\n\nconst MobileBox = styled(DefaultBox)`\n height: 100%;\n width: 100%;\n .${FORCE_TRANSPARENT_BACKGROUND} & {\n height: auto;\n }\n ${CssRule.For.mobile.tablet.build()} & {\n :not(.${FORCE_FULLSCREEN_TABLET}) {\n height: auto;\n width: auto;\n ${applyBorders}\n ${applyMaxHeight}\n }\n }\n .${DISABLE_FULLSCREEN_MOBILE} & {\n height: auto;\n width: auto;\n max-width: calc(100% - 2rem);\n max-height: calc(100% - 2rem);\n ${applyBorders}\n ${applyMaxHeight}\n }\n\n &.${APPLY_ANIMATION} {\n ${CssRule.For.mobile.tablet.build()} & {\n ${showDialogAnimation};\n }\n .${DISABLE_FULLSCREEN_MOBILE} & {\n ${showDialogAnimation};\n }\n }\n\n &.${APPLY_MODAL_CLOSING_ANIMATION} {\n ${CssRule.For.mobile.tablet.build()} & {\n ${closeDialogAnimation};\n }\n .${DISABLE_FULLSCREEN_MOBILE} & {\n ${closeDialogAnimation};\n }\n }\n`;\n\nexport const DialogOverlayContentDefaultBox = styledByDevice(PcBox, MobileBox);","import {DialogOverlayContentDefaultBox} from './dialog-overlay-content.default.box';\n\nexport const DialogOverlayContentBox = DialogOverlayContentDefaultBox;","import {DialogIconWrapperDefaultBox} from './dialog-icon-wrapper.default.box';\n\nexport const DialogIconWrapperBox = DialogIconWrapperDefaultBox;\n","import styled from 'styled-components';\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const DialogIconWrapperDefaultBox = styled.div`\n text-align: center;\n color: ${({theme}) => theme.colors.brandPrimary };\n margin: 2em auto;\n \n ${CssRule.For.mobile.landscape.build()} & {\n margin: 0 auto;\n }\n`;\n","import React from 'react';\nimport {IServiceFactory} from '../../services/service-factory.interface';\nimport {\n IModalDialogHandler,\n ShowModalOptions\n} from '../../services/dialog/dialog.service.interface';\nimport {DialogConsumerContentBox} from './boxes/consumer-content/dialog-consumer-content.box';\nimport {DialogHeaderComponent} from './parts/header/dialog-header.component';\nimport {DialogOverlayBox} from './boxes/overlay/dialog-overlay.box';\nimport {DialogOverlayContentBox} from './boxes/overlay-content/dialog-overlay-content.box';\nimport {DialogIconWrapperBox} from './boxes/icon-wrapper/dialog-icon-wrapper.box';\nimport classNames from 'classnames';\nimport {\n APPLY_ANIMATION,\n APPLY_BORDERS, APPLY_MAX_HEIGHT,\n MOBILE_CENTERED_HEADER,\n DISABLE_FULLSCREEN_MOBILE,\n FORCE_CENTRALIZATION,\n FORCE_TRANSPARENT_BACKGROUND,\n FORCE_TRANSPARENT_CONTENT_BACKGROUND,\n FORCE_FULLSCREEN_TABLET, APPLY_MODAL_CLOSING_ANIMATION\n} from './css-classes';\nimport {MODAL_DIALOG} from '../../themes/css-global-classes';\nimport {observer} from 'mobx-react';\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ThemeProvider} from \"styled-components\";\n\nexport interface ModalDialogComponentProps {\n services: IServiceFactory;\n dialogHandler: IModalDialogHandler;\n renderContent: (dialogHandler: IModalDialogHandler) => React.ReactNode;\n dialogOptions: ShowModalOptions;\n}\n\nexport const ModalDialogComponent = observer(\n class ModalDialogComponent extends React.Component {\n\n\n private _onCloseButtonClickHandler = () => {\n this.props.dialogHandler.close(true, true);\n };\n\n render() {\n const overlayClasses = classNames(CyClass('cy-modal-dialog'), CyClass('cy-modal'), MODAL_DIALOG, {\n [FORCE_TRANSPARENT_BACKGROUND]: this.props.dialogOptions.forceTransparentBackground,\n [FORCE_CENTRALIZATION]: this.props.dialogOptions.forceCentralization,\n [DISABLE_FULLSCREEN_MOBILE]: this.props.dialogOptions.disableFullscreenMobile,\n [APPLY_ANIMATION]: this.props.dialogOptions.showOpenAndCloseAnimation,\n [FORCE_FULLSCREEN_TABLET]: this.props.dialogOptions.forceFullscreenTablet\n });\n\n const additionalHeaderClass = this.props.dialogOptions.headerClass || '';\n\n const headerClasses = classNames(CyClass('cy-modal-dialog-header'), CyClass('cy-modal-main-title'), additionalHeaderClass, {\n [MOBILE_CENTERED_HEADER]: this.props.dialogOptions.mobileCenterHeader\n });\n\n const contentClasses = classNames(CyClass('cy-modal-dialog-content'), {\n [APPLY_BORDERS]: !this.props.dialogOptions.hideBorders,\n [APPLY_ANIMATION]: this.props.dialogOptions.showOpenAndCloseAnimation,\n [DISABLE_FULLSCREEN_MOBILE]: this.props.dialogOptions.disableFullscreenMobile,\n [FORCE_TRANSPARENT_BACKGROUND]: this.props.dialogOptions.forceTransparentBackground,\n [FORCE_TRANSPARENT_CONTENT_BACKGROUND]: this.props.dialogOptions.forceTransparentContentBackground,\n [APPLY_MAX_HEIGHT]: this.props.dialogOptions.applyMaxHeight,\n [FORCE_FULLSCREEN_TABLET]: this.props.dialogOptions.forceFullscreenTablet,\n [APPLY_MODAL_CLOSING_ANIMATION]: this.props.dialogHandler.shouldApplyClosingAnimation\n });\n\n const dialogHeaderComponent = this.props.dialogOptions.hideDialogHeader ? (<>) : (\n \n );\n const transparentBackgroundOpacity = this.props.dialogOptions.transparentBackgroundOpacity || 0.80;\n const DialogIcon = this.props.dialogOptions.icon;\n const isIOS = this.props.services.device.isProbablyIOSDevice;\n return (\n \n \n \n {dialogHeaderComponent}\n \n {DialogIcon && \n \n }\n {this.props.renderContent(this.props.dialogHandler)}\n \n \n \n \n );\n }\n }\n);","import styled from \"styled-components\";\n\nexport const SimpleMessageDialogBox = styled.div`\n display: flex;\n flex-direction: column;\n max-height: 80vh;\n max-height: 80dvh;\n\n @media ${props => props.theme.mediaQuery.sAndAbove} {\n min-width: 300px;\n min-height: 200px;\n max-width: 600px;\n }\n\n @media ${props => props.theme.mediaQuery.mAndAbove} {\n min-width: 500px;\n }\n`","import styled from \"styled-components\";\n\nexport const SimpleMessageDialogSingleLineContentBox = styled.div`\n display: flex;\n flex-direction: column; \n text-align: center;\n flex-grow: 1;\n width: 100%;\n font-size: 1.5rem;\n color: ${props => props.theme.colors.text};\n white-space: pre-line;\n overflow-y: auto;\n`","import styled from \"styled-components\";\n\nexport const SimpleMessageDialogButtonsContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n padding: 20px 20px 0 20px;\n width: 100%;\n\n @media ${props => props.theme.mediaQuery.sAndBelow} {\n flex-direction: column;\n align-items: flex-start;\n padding: 20px;\n\n }\n`","import styled from \"styled-components\";\nimport {Button} from \"../../../../../basic-ui-components/button/base/button.component\";\nimport {CssRule} from \"../../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const SimpleMessageDialogButtonBox = styled(Button)<{buttonWidthProportionOnPC: number}>`\n margin-right: 40px;\n ${CssRule.For.RTL.build()} & {\n margin-right: 0;\n margin-left: 40px;\n }\n width: ${props => 100/props.buttonWidthProportionOnPC}%;\n &:last-of-type {\n margin-right: 0;\n ${CssRule.For.RTL.build()} & {\n margin-left: 0;\n }\n }\n\n\n @media ${props => props.theme.mediaQuery.sAndBelow} {\n width: 100%;\n &:last-of-type {\n margin-right: 0;\n margin-top: 20px;\n ${CssRule.For.RTL.build()} & {\n margin-left: 0;\n }\n }\n }\n`","import {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {\n DialogButtonClickHandleResultEnum,\n IModalDialogHandler,\n ISimpleTextModalButtonOptions\n} from \"../../../../services/dialog/dialog.service.interface\";\nimport {SimpleMessageDialogButtonBox} from \"./boxes/simple-message-dialog-button.box\";\nimport React from \"react\";\n\ninterface SimpleMessageButtonComponentProps {\n buttonOptions: ISimpleTextModalButtonOptions;\n numberOfButtons: number;\n dialogHandler: IModalDialogHandler;\n}\n\nexport const SimpleMessageButtonComponent = observer(\n class SimpleMessageButtonComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n const button = this.props.buttonOptions;\n const result = await button.onClick();\n if(result === DialogButtonClickHandleResultEnum.CloseDialogAndContinue) {\n this.props.dialogHandler.close();\n }\n }\n render() {\n const button = this.props.buttonOptions;\n return (\n {/* On PC in general we don't want a button to have 100% width */}\n {button.text}\n \n )\n }\n }\n);","import styled from \"styled-components\";\n\nexport const SimpleMessageDialogIconContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n width: 100%;\n padding: 10px;\n color: ${({theme}) => theme.colors.brandPrimary };\n`","import styled from \"styled-components\";\nimport {SimpleMessageDialogSingleLineContentBox} from \"./simple-message-dialog-single-line-content.box\";\n\nexport const SimpleMessageDialogMultiLineContentBox = styled(SimpleMessageDialogSingleLineContentBox)` \n text-align: justify;\n overflow-y: auto;\n max-height: 450px;\n`","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {SimpleMessageDialogBox} from \"./boxes/simple-message-dialog.box\";\nimport {\n IModalDialogHandler,\n ISimpleTextModalButtonOptions\n} from \"../../../../services/dialog/dialog.service.interface\";\nimport {SimpleMessageDialogSingleLineContentBox} from \"./boxes/simple-message-dialog-single-line-content.box\";\nimport {SimpleMessageDialogButtonsContainerBox} from \"./boxes/simple-message-dialog-buttons-container.box\";\nimport {observer} from \"mobx-react\";\nimport {SimpleMessageButtonComponent} from \"./simple-message-dialog-button.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {SimpleMessageDialogIconContainerBox} from \"./boxes/simple-message-dialog-icon-container.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {Image} from \"../../../raw-components/image/image\";\nimport {ISvgIconProps} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport {SimpleMessageDialogMultiLineContentBox} from \"./boxes/simple-message-dialog-multi-line-content.box\";\n\ninterface SimpleMessageDialogComponentProps {\n text: string | string[] | React.ReactElement;\n /** @deprecated Do not send an icon as a string url or as react element. Use an svg icon in the iconSvg prop */\n icon?: string | React.ReactNode;\n iconSvg?: React.ComponentType;\n buttons: ISimpleTextModalButtonOptions[];\n dialogHandler: IModalDialogHandler;\n}\n\nexport const SimpleMessageDialogComponent = observer(\n class SimpleMessageDialogComponent extends OrbitComponent {\n\n private _renderIcon() {\n if(!this.props.icon) {\n return null;\n }\n\n if(Check.isString(this.props.icon)) {\n return \n \n ;\n }\n\n return \n {this.props.icon}\n ;\n }\n\n private _renderText() {\n if(!this.props.text) {\n return null;\n }\n\n if(Check.isString(this.props.text) || React.isValidElement(this.props.text)) {\n return (\n \n {this.props.text}\n \n );\n }\n\n if(this.props.text.length === 1) {\n return (\n \n {this.props.text[0]}\n \n );\n }\n\n return (\n \n
    \n {this.props.text.map(line =>
  • {line}
  • )}\n
\n
\n )\n }\n render() {\n return (\n \n {this._renderIcon()}\n \n {this._renderText()}\n \n \n {this.props.buttons.map(button => ())}\n \n \n );\n }\n }\n);","import React from 'react';\nimport {ServiceBase} from '../ServiceBase';\nimport {\n IDialogService,\n IModalDialogHandler,\n ISimpleTextModalOptions,\n ShowModalOptions\n} from './dialog.service.interface';\nimport {ModalDialogComponent} from '../../components/modal-dialog/modal-dialog.component';\nimport {Check} from '@sparkware/app-utils';\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {action, makeObservable, observable, runInAction} from 'mobx';\nimport {CGP_OVERLAY_OPEN} from \"../../themes/css-global-classes\";\n\nimport {namedSetTimeout} from \"../../../common/utils/time-functions\";\nimport {\n SimpleMessageDialogComponent\n} from \"../../components/modal-dialog/standard-dialogs/simple-message/simple-message-dialog.component\";\nimport {\n MODAL_DIALOG_ANIMATION_DURATION\n} from \"../../components/modal-dialog/boxes/overlay-content/dialog-overlay-constants\";\n\nconst DIALOG_CONTENT = '.cy-modal-dialog-content';\nconst ANALYTICS_CATEGORY = 'Dialog_Service';\n\ninterface IOpenDialog {\n dialogHandler: ModalDialogHandler;\n dialogComponent: React.ReactNode;\n}\n\nexport class DialogService extends ServiceBase implements IDialogService {\n\n constructor(services:IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._setCloseAllDialogsHook();\n this.services.deepLink.then(deepLink => {\n this.reaction(() => deepLink.lastTimeDeepLinkWasExecuted,\n ()=> this.closeAllDialogs()\n );\n })\n\n this.reaction(() => this.hasOpenDialogs, (hasOpenDialogs) => {\n if (hasOpenDialogs) {\n this._disableScroll();\n } else {\n this._enableScroll();\n }\n })\n }\n\n private _setCloseAllDialogsHook(): void {\n this.services.sdk.events.onGameOpen(this.closeAllDialogs.bind(this));\n\n this.reaction(() => [\n this.services.user.isAuthorized,\n this.services.routing.currentRoute\n ],\n ()=> this.closeAllDialogs()\n );\n }\n\n @observable.ref\n private _currentOpenModalDialogs: IOpenDialog[] = [];\n\n @action.bound\n private _setCurrentOpenModalDialogs(newDialogs: IOpenDialog[]): void {\n this._currentOpenModalDialogs = newDialogs;\n }\n\n public get currentDialogs(): React.ReactNode[] {\n return this._currentOpenModalDialogs.map(dialog => dialog.dialogComponent);\n }\n\n private _onDialogCloseHook = (closedHandler: ModalDialogHandler) => {\n\n this._setCurrentOpenModalDialogs(this._currentOpenModalDialogs.filter(dialog => dialog.dialogHandler.zIndex !== closedHandler.zIndex));\n this.services.gameRunner.then(gameRunner => {\n gameRunner.currentRunningGame?.gameCommunicationChannel.resumeGamePlay();\n })\n };\n\n private _enableScroll() {\n this.services.dom.body.classList.remove(CGP_OVERLAY_OPEN);\n }\n\n private _disableScroll() {\n this.services.dom.body.classList.add(CGP_OVERLAY_OPEN);\n }\n\n private _getNextZIndex(isHighPriority?: boolean, forceZOrder?:number): number {\n\n if(forceZOrder) {\n return forceZOrder;\n }\n\n const zIndexes = this._currentOpenModalDialogs.map(dialog => dialog.dialogHandler.zIndex);\n\n if(zIndexes.length === 0) {\n return isHighPriority ? this.services.sdk.getCGPMaxOverlayZIndex + 1 : 200;\n }\n\n if(isHighPriority) {\n return Math.max(...zIndexes, this.services.sdk.getCGPMaxOverlayZIndex) + 1;\n } else {\n return Math.max(...zIndexes) + 1;\n }\n }\n\n get hasOpenDialogs(): boolean {\n return !Check.isEmpty(this._currentOpenModalDialogs.filter(d => !d.dialogHandler.isHidden));\n }\n\n countDialogs(opts: {includeHidden: boolean;}): number {\n if (opts.includeHidden) {\n return this._currentOpenModalDialogs.length;\n }\n return this._currentOpenModalDialogs.filter(d => !d.dialogHandler.isHidden).length;\n }\n\n closeAllDialogs() {\n const dialogsToClose = this._currentOpenModalDialogs.filter(dialog => !dialog.dialogHandler.shouldBeClosedOnlyByUser)\n dialogsToClose.forEach((dialog)=> {\n dialog.dialogHandler.destroy();\n });\n\n this._setCurrentOpenModalDialogs(this._currentOpenModalDialogs.filter(dialog => dialog.dialogHandler.shouldBeClosedOnlyByUser));\n }\n\n showModal(renderContent: (dialogHandler: IModalDialogHandler) => React.ReactNode, options?: ShowModalOptions): IModalDialogHandler {\n const modalZIndex = this._getNextZIndex(options?.isHighPriority,options?.forceZOrder);\n\n options = {\n hideCloseButton: false,\n hideBorders: false,\n showOpenAndCloseAnimation: false,\n ...options\n };\n\n const dialogHandler = new ModalDialogHandler(modalZIndex, this.services, this._onDialogCloseHook, options);\n\n\n const executeDialogShow = () => {\n const isHybrid = this.services.device.hybrid.isHybrid;\n\n if(isHybrid && options?.showPopupAboveSecondWebViewHybrid){\n // check this option.\n this.services.sdk.openPopUpOnSecondWebView(DIALOG_CONTENT, 1000);\n }\n\n const dialogComponent = ();\n\n this._setCurrentOpenModalDialogs([\n ...this._currentOpenModalDialogs,\n {\n dialogHandler: dialogHandler,\n dialogComponent: dialogComponent\n }\n ]);\n }\n\n\n this.services.gameRunner.then(gameRunner => {\n\n if(gameRunner.currentRunningGame && modalZIndex > gameRunner.gameFrameZIndex) {\n\n return gameRunner.currentRunningGame.executeAnimationCompleteAction({\n execute: async ()=> {\n this.services.analytics.sendOrbitUserFlowEvent(ANALYTICS_CATEGORY, 'stopCurrentGameAutoplay', `modalZIndex: ${modalZIndex}`);\n if(gameRunner.currentRunningGame) { //We check for currentRunningGame because it possible that meanwhile the game to be closed and there is no current running game.\n await gameRunner.currentRunningGame.gameCommunicationChannel.stopAutoplay();\n }\n executeDialogShow();\n }\n })\n } else {\n executeDialogShow();\n }\n\n });\n\n return dialogHandler;\n }\n\n getMaxCGPOverlayZIndex(): number {\n return this.services.sdk.getCGPMaxOverlayZIndex;\n }\n\n showSimpleTextModal(options: ISimpleTextModalOptions): IModalDialogHandler {\n return this.showModal(dialogHandler => (), {\n title: options.title || (options.showEmptyTitle ? ' ' : ''),\n icon: options.iconSvg,\n mobileCenterHeader: true,\n hideCloseButton: options.hideCloseButton,\n isHighPriority: true,\n disableFullscreenMobile: Check.isNullOrUndefined(options.disableFullscreenMobile) ? true : options.disableFullscreenMobile,\n forceCentralization: true,\n showPopupAboveSecondWebViewHybrid: Boolean(options.showPopupAboveSecondWebViewHybrid),\n onClosedByXButton: options.onClosedByXButton,\n onClosed: options.onClosed,\n shouldBeClosedOnlyByUser: options.shouldBeClosedOnlyByUser\n });\n }\n}\n\n\nclass ModalDialogHandler implements IModalDialogHandler {\n constructor(zIndex: number,\n private _services,\n private _onCloseHook: (handler: ModalDialogHandler) => void,\n private _options: ShowModalOptions) {\n makeObservable(this);\n\n this.isHidden = Boolean(this._options.createAsHidden);\n this._zIndex = zIndex;\n }\n\n\n private _isClosed = false;\n\n public get shouldBeClosedOnlyByUser(): boolean {\n return this._options.shouldBeClosedOnlyByUser;\n }\n\n @observable.ref\n private _zIndex: number;\n\n get zIndex(): number {\n return this._zIndex;\n }\n\n set zIndex(value: number) {\n runInAction(() => {\n this._zIndex = value;\n });\n }\n\n @observable.ref\n isHidden: boolean = false;\n\n display(): void {\n runInAction(() => {\n this.isHidden = false;\n });\n\n if(this._options.onDisplay) {\n this._options.onDisplay();\n }\n }\n\n hide(): void {\n runInAction(() => {\n this.isHidden = true;\n });\n\n if(this._options.onHide) {\n this._options.onHide();\n }\n }\n\n @observable.ref\n public shouldApplyClosingAnimation: boolean = false;\n\n @action.bound\n close(isClosedWithXButton: boolean = false): void {\n if(this._isClosed) {\n return;\n }\n\n\n this.shouldApplyClosingAnimation = this._options.showOpenAndCloseAnimation;\n if(this.shouldApplyClosingAnimation) {\n namedSetTimeout('DIALOG_CLOSE_ANIMATION_TIMER', ()=> this._applyCallbackAndCloseDialog(isClosedWithXButton), 0.9 * MODAL_DIALOG_ANIMATION_DURATION);\n } else {\n this._applyCallbackAndCloseDialog(isClosedWithXButton)\n }\n\n }\n\n destroy(): void {\n this._applyCallbackAndCloseDialog(true);\n }\n\n private _applyCallbackAndCloseDialog = (isClosedWithXButton: boolean): void => {\n this._isClosed = true;\n\n if(isClosedWithXButton && this._options.onClosedByXButton) {\n try {\n this._options.onClosedByXButton();\n } catch (err) {\n this._services.logger.error(`onClosedByXButton dialog handler failed! Debug info: ${this._options?.debugInfo} | Dialog title: ${this._options?.title}`, this._options.onClosedByXButton, err);\n }\n }\n\n if(this._options.onClosed) {\n try {\n this._options.onClosed();\n } catch (err) {\n this._services.logger.error(`onClosed dialog handler failed! Debug info: ${this._options?.debugInfo} | Dialog title: ${this._options?.title}`, this._options.onClosed, err);\n }\n }\n\n this._onCloseHook(this);\n\n if(this._options?.showPopupAboveSecondWebViewHybrid){\n this._services.sdk.closePopUpOnSecondWebView();\n }\n\n }\n}","import {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {IHeadLinkTag, IPWAManifestIcon, IManifestProperties, IPWAManifestService} from \"./pwa-manifest.service.interface\";\nimport {LINK_REL_APPLE_ICON, LINK_MANIFEST_HEAD_SELECTOR} from \"./pwa-manifest-constants\";\n\nexport class PWAManifestService extends ServiceBase implements IPWAManifestService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this._init();\n }\n\n private get _orbitExtraProperties() {\n return this.services.configuration.startupConfiguration.sdk.config.ExtraProperties;\n }\n\n private _isPwaEnabled() {\n if (!this._orbitExtraProperties.pwaEnabled)\n return false;\n\n if (!this._orbitExtraProperties.paths.pwaResources) {\n this.services.logger.error(\"pwaResources is not defined even if pwaEnabled is true\");\n return false;\n }\n\n return true;\n }\n\n public get manifestUrl(): string | null {\n if (!this._isPwaEnabled())\n return null;\n\n return this._orbitExtraProperties.paths.pwaResources + '/manifest.json';\n }\n\n private _init() {\n if (this._isPwaEnabled()) {\n this._setManifestHrefInHead();\n\n if (this.services.device.os.isIOS) {\n this._initIOS();\n }\n }\n }\n\n // on IOS device, add link tags for icons from manifest\n private _initIOS() {\n if (this.manifestUrl) {\n this._addManifestIOSIconsInHead();\n } else {\n this.services.logger.error(\"Couldn't get manifest url\");\n }\n }\n\n private _addManifestIOSIconsInHead(): void {\n this._loadManifestJSON().then((manifestJson) => {\n const manifestIcons = manifestJson.icons || [];\n manifestIcons.forEach(iconInfo => this._addLinkTagToHead(LINK_REL_APPLE_ICON, iconInfo));\n });\n }\n\n private _addLinkTagToHead(rel: string, iconInfo: IPWAManifestIcon): void {\n const linkDOM = (this.services.dom.createElement('link') as IHeadLinkTag);\n linkDOM.rel = rel;\n linkDOM.href = this._orbitExtraProperties.paths.pwaResources + '/' + iconInfo.src;\n\n if (iconInfo.sizes) {\n linkDOM.sizes = iconInfo.sizes;\n }\n\n this.services.dom.head.append(linkDOM);\n }\n\n private _loadManifestJSON(): Promise {\n return this.services.http.get(this.manifestUrl)\n .catch(err => {\n this.services\n .logger.error(`Error in loading manifest, manifest url: ${this.manifestUrl}`, err);\n return Promise.reject();\n });\n }\n\n private _setManifestHrefInHead() {\n const linkTag = (this.services.dom.querySelector(LINK_MANIFEST_HEAD_SELECTOR) as IHeadLinkTag);\n\n if (linkTag) {\n linkTag.href = this.manifestUrl;\n }\n }\n}\n","export const LINK_MANIFEST_HEAD_SELECTOR = 'link#manifest-placeholder';\nexport const LINK_REL_APPLE_ICON = \"apple-touch-icon\";","import {IControlCenterData, IMiniOrbitCommunicationAdapter} from '../mini-orbit-communication-adapter.interface';\nimport {IServiceFactoryExtended} from '../../../service-factory-extended.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {IAutoLoginParams} from '../../../../../common/interfaces/autologin-params.interface';\nimport {IDepositWidgetAppLaunchInfo} from \"@sparkware/uc-sdk-core/lib/apps/deposit/deposit-widget.interfaces\";\nimport {ActionID, IPerformActionTopicPayload} from \"@sparkware/uc-sdk-core\";\n\nexport const POKER_COMMUNCATION_OBJECT_NAME = 'pokerNativeInterface';\n\nexport class PokerCommunicationAdapter implements IMiniOrbitCommunicationAdapter {\n constructor(private services: IServiceFactoryExtended) {\n\n }\n\n private get _pokerCommunicationObject(): any {\n const adapter = this.services.window.getGlobalProperty(POKER_COMMUNCATION_OBJECT_NAME);\n if(!adapter) {\n this.services.logger.error(`${POKER_COMMUNCATION_OBJECT_NAME} adapter is not defined`);\n }\n return adapter;\n }\n\n onUserKicked(logoutReason: number|null): Promise{\n if(this._pokerSupportsSoftLogin)\n {\n return this._pokerCommunicationObject?.onUserKicked(logoutReason);\n }\n else\n {\n this._pokerCommunicationObject?.kickUser();\n return Promise.resolve(null);\n }\n }\n\n openUrlInExternalBrowser = (url: string): void => {\n this._pokerCommunicationObject?.openUrlInExternalBrowser(url);\n };\n\n private get _pokerSupportsSoftLogin():boolean\n {\n return Check.isFunction(this._pokerCommunicationObject?.onUserKicked);\n };\n\n onSiteLoaded(): void {\n try {\n if(Check.isFunction(this._pokerCommunicationObject?.onSiteLoaded)) {\n this._pokerCommunicationObject.onSiteLoaded();\n } else {\n this.services.logger.warning(`${POKER_COMMUNCATION_OBJECT_NAME}.onSiteLoaded is missing`);\n }\n }catch (e) {\n this.services.logger.error(\"PokerCommunicationAdapter onSiteLoaded error : \"+e);\n }\n }\n\n onAutologinSuccess(): void{\n try {\n if(Check.isFunction(this._pokerCommunicationObject?.onAutologinSuccess)) {\n this._pokerCommunicationObject.onAutologinSuccess();\n } else {\n this.services.logger.warning(`${POKER_COMMUNCATION_OBJECT_NAME}.onAutologinSuccess is missing`);\n }\n }catch (e) {\n this.services.logger.error(\"PokerCommunicationAdapter onAutologinSuccess error : \"+e);\n }\n\n }\n\n onAutologinFailed(): void{\n if(Check.isFunction(this._pokerCommunicationObject?.onAutologinFailed)) {\n this._pokerCommunicationObject.onAutologinFailed();\n } else {\n this.services.logger.warning(`${POKER_COMMUNCATION_OBJECT_NAME}.onAutologinFailed is missing`);\n }\n }\n\n openControlCenter(data: IControlCenterData): void {\n this._pokerCommunicationObject?.performUCAction(JSON.stringify(data));\n }\n\n openDeposit(data: IDepositWidgetAppLaunchInfo): Promise {\n const performUCActionData: IPerformActionTopicPayload = {\n actionID: ActionID.deposit,\n launchInfo: data,\n correlationID: this.services.tools.getGuid()\n }\n\n this._pokerCommunicationObject?.performUCAction(JSON.stringify(performUCActionData));\n return Promise.resolve();\n }\n}\n","import {IAutoLoginParams} from \"../../../../../common/interfaces/autologin-params.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IControlCenterData, IMiniOrbitCommunicationAdapter} from \"../mini-orbit-communication-adapter.interface\";\nimport {reaction} from \"mobx\";\nimport {IDepositWidgetAppLaunchInfo} from \"@sparkware/uc-sdk-core/lib/apps/deposit/deposit-widget.interfaces\";\nimport {ActionID, IPerformActionTopicPayload} from \"@sparkware/uc-sdk-core\";\n\nexport const SPORT_COMMUNCATION_OBJECT_NAME = 'sportNativeInterface';\nexport const SPORT_MINI_ORBIT_COMMUNICATION = 'sport_mini_orbit_communication';\n\nexport class SportCommunicationAdapter implements IMiniOrbitCommunicationAdapter {\n constructor(private services: IServiceFactoryExtended) {\n\n //we trigger this call to overcome NYX - Push Gaming vendor issue when closing game (not redirecting to iframe -> thus onGameClose event not fired)\n this._showCasinoNavbar(true)\n\n this._subscribe();\n\n this.services.appLauncher.then(appLauncher => {\n reaction(\n () => appLauncher.isThereRunningApps,\n (isThereRunningApps) => {\n this._showCasinoNavbar(!isThereRunningApps)\n }\n );\n });\n }\n\n private _subscribe(): void {\n this.services.sdk.events.onGameOpen(() => this._showCasinoNavbar(false));\n this.services.sdk.events.onGameClose(() => this._showCasinoNavbar(true));\n }\n\n private get _sportCommunicationObject(): any {\n const adapter = this.services.window.getGlobalProperty(SPORT_COMMUNCATION_OBJECT_NAME);\n if (!adapter) {\n this.services.logger.error(`${SPORT_COMMUNCATION_OBJECT_NAME} adapter is not defined`);\n this.services.analytics.sendTechnicalEvent(SPORT_MINI_ORBIT_COMMUNICATION, \"adapter is not defined\", SPORT_COMMUNCATION_OBJECT_NAME);\n }\n return adapter;\n }\n\n private _showCasinoNavbar = (status: boolean): void => {\n this._sportCommunicationObject?.showCasinoNavbar(status);\n };\n\n openUrlInExternalBrowser = (url: string): void => {\n this._sportCommunicationObject?.openExternalLink(url);\n };\n\n onUserKicked(logoutReason: number): Promise {\n return new Promise((resolve, reject) => {\n const cleanUp = () => {\n delete this._sportCommunicationObject.onUserKickedSuccessCallback;\n delete this._sportCommunicationObject.onUserKickedErrorCallback;\n }\n\n this._sportCommunicationObject.onUserKickedSuccessCallback = (params: IAutoLoginParams) => {\n resolve(params);\n cleanUp();\n };\n\n this._sportCommunicationObject.onUserKickedErrorCallback = (error) => {\n reject(error);\n cleanUp();\n };\n\n try {\n this._sportCommunicationObject.onUserKicked(logoutReason)\n } catch (error) {\n reject(error);\n cleanUp();\n }\n });\n }\n\n openControlCenter = (data: IControlCenterData): void => {\n this._sportCommunicationObject?.performUCAction(JSON.stringify(data));\n };\n\n openDeposit = (data: IDepositWidgetAppLaunchInfo): Promise => {\n const performUCActionData: IPerformActionTopicPayload = {\n actionID: ActionID.deposit,\n launchInfo: data,\n correlationID: this.services.tools.getGuid()\n }\n\n this._sportCommunicationObject?.performUCAction(JSON.stringify(performUCActionData));\n return Promise.resolve();\n };\n\n onSiteLoaded(): void {}\n onAutologinSuccess(): void {}\n onAutologinFailed(): void {}\n}","import {IMiniOrbitCommunicationAdapterFactoryService} from './mini-orbit-communication-adapter-factory.service.interface';\nimport {IMiniOrbitCommunicationAdapter} from '../adapters/mini-orbit-communication-adapter.interface';\nimport {PokerCommunicationAdapter} from '../adapters/poker/poker-communication-adapter';\nimport {ServiceBase} from '../../ServiceBase';\nimport {VoidCommunicationAdapter} from '../adapters/void/void-communication-adapter';\nimport {MINI_CIP_BASE_ROUTE, MINI_CIS_BASE_ROUTE} from '../mini-orbit-consts';\nimport {SportCommunicationAdapter} from '../adapters/sport/sport-communication-adapter';\n\nexport class MiniOrbitCommunicationAdapterFactoryService extends ServiceBase implements IMiniOrbitCommunicationAdapterFactoryService{\n createAdapter(basePath: string): IMiniOrbitCommunicationAdapter {\n switch(basePath?.toLowerCase()) {\n case MINI_CIP_BASE_ROUTE:\n return new PokerCommunicationAdapter(this.services);\n case MINI_CIS_BASE_ROUTE:\n return new SportCommunicationAdapter(this.services);\n default:\n return new VoidCommunicationAdapter(this.services);\n }\n }\n}","import {\n\tArenaGamesGridConfiguration,\n\tHeaderFilterConfiguration\n} from \"../configurations/config-data-sections/arenas.configuration\";\n\nexport interface ILiveTableFeedsService {\n\treadonly liveArenaTabsConfiguration: LiveTableTabConfiguration[];\n\treadonly currentArenaTabConfiguration: LiveTableTabConfiguration | null;\n\treadonly tablesData: LiveTablesArray;\n\treadonly openTablesIds: string[];\n\treadonly aiSortingGamesMap: Record | undefined;\n\tsetCurrentArenaTab(tabId: string): Promise;\n\tgetTableInfo(tableId: number): ILiveTableInfo;\n\tgetLiveGames(): number[];\n\tmoveGamesThatOpenSoonToTheEnd(gamesIds: number[]): number[];\n\tupdateAiRecommendedLiveGames(): void;\n\tgetIsLiveSlotGroup(subGameGroup: string): boolean;\n\tisNavbarVisible: boolean;\n}\n\nexport class LiveTableTabConfiguration {\n\tconstructor(public readonly gridConfiguration: ArenaGamesGridConfiguration,\n\t\tpublic readonly headerConfiguration: HeaderFilterConfiguration) {\n\t}\n}\n\n\nexport interface ILiveTableInfo {\n\tGameId: number;\n\tName: string;\n\tMinBet: number;\n\tMaxBet: number;\n\tBetBehind: boolean;\n\tIsOpen: boolean;\n\tSeats: number,\n\tSeatsTaken: number[],\n\tPlayers: number;\n\tDealer: string;\n\tRouletteLast5Numbers?: string[];\n\tOperationHoursType: string; // type of operation hours - full or partially\n\tOperationHoursStartTime?: string; // if not full time - operation hours start time\n\tOperationHoursEndTime?: string; // if not full time - operation hours end time\n\tTableImage: string\n}\n\nexport type LiveTables = { [key: string]: ILiveTableInfo };\nexport type LiveTablesArray = { tableId: string, tableInfo: ILiveTableInfo }[];\n","import {memoize as _memoize} from 'lodash';\n\nconst keyResolver = (...args: unknown[]) => JSON.stringify(args);\n\nconst memoize: ((func: (a?: A, b?: B, c?: C, d?: D) => T) => (a?: A, b?: B, c?: C, d?: D) => T) = (func) => _memoize(func, keyResolver);\n\nexport default memoize;","import {ServiceBase} from '../ServiceBase';\nimport {action, observable, computed, runInAction, makeObservable} from 'mobx';\nimport {\n LiveTables,\n LiveTablesArray,\n ILiveTableInfo,\n ILiveTableFeedsService,\n LiveTableTabConfiguration\n} from './live-table-feeds.service.interface';\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {CGPEventSubscription} from '../sdk/cgp-sdk.interface';\nimport {arraysEqual} from '../../../utils/array-helper';\nimport {IAiSortOptions} from \"../ai-engine/ai-engine.service.interface\";\nimport memoize from \"../../../utils/memoize\";\nimport {NEW_LIVE_CASINO_ARENA_NAME} from '../arenas/arena-consts';\nimport {NullableString} from \"../../../common/types/nullable-types\";\nimport { SUB_GAME_GROUP } from '../../../common/const/sub_game_group_consts';\n\nexport interface IAiRecommendedLiveGames {\n engine?: string;\n gameTypes: number[];\n gameTypesMap?: Record;\n}\n\nexport interface IGetLiveGamesOptions {\n useAISortedList?: boolean;\n numberOfSortingExemptGames?: number;\n}\n\nconst GAME_MAX_TIME_TO_OPEN = 3600000;\nconst ARENA_WITHOUT_FILTER = 'ARENA_WITHOUT_FILTER';\n\n\nexport class LiveTableFeedsService extends ServiceBase implements ILiveTableFeedsService {\n\n private _startTime: number;\n private _liveTableUpdateSubscription: CGPEventSubscription;\n\n constructor(props) {\n super(props);\n\n makeObservable(this);\n\n this.reaction(() => this.services.routing.currentRoute, () => {\n this._stop();\n });\n\n this.reaction(() => this.services.user.isAuthorized,\n () => this.services.liveTableFeeds.updateAiRecommendedLiveGames(),\n {fireImmediately: true});\n\n const liveArenaConfig = this.services.configuration.data.arenas[NEW_LIVE_CASINO_ARENA_NAME];\n if (liveArenaConfig) {\n if (liveArenaConfig.arenas.find(headerConfig => headerConfig.title === ARENA_WITHOUT_FILTER)) {\n this._isNavbarVisible = false;\n }\n\n this.liveArenaTabsConfiguration = liveArenaConfig.allGamesGrid\n .map(grid => {\n let headerConfiguration = liveArenaConfig.arenas.find(headerConfig => headerConfig.title === grid.title);\n if (headerConfiguration) {\n return new LiveTableTabConfiguration(grid, headerConfiguration)\n } else {\n return null;\n }\n })\n .filter(grid => !Check.isNull(grid));\n }\n }\n\n liveArenaTabsConfiguration: LiveTableTabConfiguration[] = [];\n\n private _isNavbarVisible = true;\n get isNavbarVisible() {\n return this._isNavbarVisible;\n }\n\n @computed\n get currentArenaTabConfiguration(): LiveTableTabConfiguration | null {\n const currentAppliedFilter = this._getCurrentAppliedFilter();\n if (!currentAppliedFilter) {\n return this.liveArenaTabsConfiguration[0] ?? null;\n }\n\n const tabConfig = this.liveArenaTabsConfiguration.find(tab => tab.headerConfiguration?.filter?.toLowerCase() === currentAppliedFilter?.toLowerCase()) ?? null;\n\n if (tabConfig) {\n return tabConfig;\n }\n\n return this.liveArenaTabsConfiguration[0] ?? null;\n }\n\n private _getCurrentAppliedFilter(): NullableString {\n const urlHash = this.services.location.currentUri.hash?.value;\n if (urlHash) {\n let params = urlHash.split('=');\n return params[1];\n }\n\n return null;\n }\n\n async setCurrentArenaTab(tabId: string): Promise {\n if (tabId) {\n await this.services.location.push(`#filters=${tabId}`);\n }\n }\n\n @observable.ref\n private _liveCasinoRecommendedGames: IAiRecommendedLiveGames = null;\n\n @action.bound\n private _setLiveCasinoRecommendedGames(value: IAiRecommendedLiveGames) {\n\n let tempGameTypesMap = {};\n\n if (value.gameTypes) {\n value.gameTypes.forEach((gameType, i) => tempGameTypesMap[gameType] = i);\n }\n\n this._liveCasinoRecommendedGames = {...value, gameTypes: (value.gameTypes || []), gameTypesMap: tempGameTypesMap};\n }\n\n private _getLiveCasinoGameRecommendationsForPlayer = memoize(() => this.services.api.insightController.getLiveCasinoGameRecommendationsForPlayer({\n engineType: 1\n }));\n\n @observable.ref\n private _tablesData: LiveTablesArray = [];\n\n private _previousOpenTablesIds: string[] = [];\n @computed\n public get openTablesIds(): string[] {\n const currentOpenTablesIds = this._tablesData\n .filter(tableData => !Check.isEmpty(tableData.tableInfo) && tableData.tableInfo.IsOpen)\n .map(tableData => tableData.tableId);\n if (!arraysEqual(this._previousOpenTablesIds, currentOpenTablesIds)) {\n // update observer only if there is a difference between openTablesIds.\n // we don't want to cause useless reactions and re-renders\n this._previousOpenTablesIds = currentOpenTablesIds;\n }\n\n return this._previousOpenTablesIds;\n }\n\n async updateAiRecommendedLiveGames() {\n if (this.services.user.isAuthorized) {\n\n const aiRecommendationsData = await this._getLiveCasinoGameRecommendationsForPlayer();\n\n this._setLiveCasinoRecommendedGames({\n gameTypes: aiRecommendationsData.GameTypes,\n engine: aiRecommendationsData.Engine\n });\n }\n }\n\n get tablesData(): LiveTablesArray {\n\n // Check if the live feeds service needs to boot\n if (Check.isNullOrUndefined(this._liveTableUpdateSubscription)) {\n this._start();\n }\n\n return this._tablesData;\n }\n\n private _start() {\n this._startTime = this.services.time.performanceNow();\n this._liveTableUpdateSubscription = this.services.sdk.events.onLiveTableFeedsUpdate(this._onLiveFeedsUpdate.bind(this));\n this.services.sdk.startLiveTableFeeds();\n }\n\n private _stop() {\n if (this._liveTableUpdateSubscription) {\n this._liveTableUpdateSubscription.off();\n this._liveTableUpdateSubscription = null;\n }\n\n this.services.sdk.stopLiveTableFeeds();\n }\n\n public getTableInfo(tableId): ILiveTableInfo {\n let tableData = this.tablesData.find(tableData => tableData.tableId === tableId.toString());\n return tableData ? tableData.tableInfo : null;\n }\n\n private _updateOpenTimeToLocal(tableInfo: ILiveTableInfo): ILiveTableInfo {\n if (tableInfo?.IsOpen === true || Check.isNullOrUndefined(tableInfo?.OperationHoursStartTime)) {\n return tableInfo;\n }\n\n tableInfo.OperationHoursStartTime = this._convertTimeToLocalTimeZone(tableInfo?.OperationHoursStartTime);\n return tableInfo;\n }\n\n private _verifyRouletteLastNumbers(tableInfo: ILiveTableInfo): ILiveTableInfo {\n let rouletteLastNumbers = tableInfo.RouletteLast5Numbers;\n if (Check.isNullOrUndefined(rouletteLastNumbers)) {\n return tableInfo;\n }\n\n let rouletteLast5NumbersConverted = [];\n if (rouletteLastNumbers && rouletteLastNumbers.length === 0) {\n rouletteLast5NumbersConverted = rouletteLastNumbers;\n } else {\n // all the cells in the array should be number.\n rouletteLast5NumbersConverted = rouletteLastNumbers.map(cell => {\n // Should not start with 0 and should be number\n if (cell?.startsWith('0') && cell.length > 1 && cell !== '00') {\n return null;\n } else {\n if (cell !== '00') {\n return isNaN(Number(cell)) ? null : cell;\n }\n\n return cell;\n }\n });\n\n rouletteLast5NumbersConverted = rouletteLast5NumbersConverted.filter(cell => !Check.isNullOrUndefined(cell));\n\n // If not all cells are numbers should remove the last roulette numbers property.\n if (rouletteLast5NumbersConverted.length > 0) {\n // Take only last 5 numbers(defense if we got more)\n rouletteLast5NumbersConverted = rouletteLast5NumbersConverted.slice(0, 5);\n } else {\n rouletteLast5NumbersConverted = [];\n }\n }\n tableInfo.RouletteLast5Numbers = rouletteLast5NumbersConverted;\n return tableInfo;\n }\n\n\n private _onLiveFeedsUpdate = (data: LiveTables) => {\n // we shallow clone the data because SDK always sends the same instance\n\n runInAction(() => {\n this._tablesData = Object.keys(data).map(tableId => ({\n tableId,\n tableInfo: {...this._manipulateFeedData(data[tableId])}\n }));\n });\n\n\n if (!Check.isNullOrUndefined(this._startTime)) {\n this._sendEvent();\n this._startTime = null;\n }\n }\n\n private _manipulateFeedData(tableInfo: ILiveTableInfo): ILiveTableInfo {\n if (!Check.isNullOrUndefined(tableInfo)) {\n tableInfo = this._updateOpenTimeToLocal(tableInfo);\n tableInfo = this._verifyRouletteLastNumbers(tableInfo);\n }\n\n return tableInfo;\n }\n\n private _sendEvent(): void {\n let evoLiveFeedResponseTime = this.services.splash.computeSplashTimeInSeconds(this._startTime);\n this.services.analytics.sendTechnicalEvent('LIVE_TABLES_CALL', 'LIVE_TABLES_RESPONSE_TIME', evoLiveFeedResponseTime);\n }\n\n private _convertTimeToLocalTimeZone(timeUTC: string): string {\n return TimeSpan.parse(timeUTC).toLocalTime().toHoursAndMinutesString();\n }\n\n get aiSortingGamesMap(): Record | undefined {\n return this._liveCasinoRecommendedGames?.gameTypesMap;\n }\n\n public getLiveGames(): number[] {\n if (Check.isEmpty(this.tablesData)) {\n return [];\n }\n let tabConfig = this.currentArenaTabConfiguration;\n\n let filteredGameIds = tabConfig.gridConfiguration.gamesId.filter((gameID) => {\n const gameInfo = this.services.games.gamesMap[gameID];\n if (!gameInfo) {\n return false;\n }\n\n if (!Check.isEmpty(this.getTableInfo(gameID))) {\n return true;\n }\n\n if (Check.isEmpty(gameInfo?.gameArenaIcon)) {\n return false;\n }\n\n return !Check.isEmpty(this.tablesData);\n\n });\n\n let liveGames: IGetLiveGamesOptions = {\n useAISortedList: tabConfig.gridConfiguration.useAISortedList,\n numberOfSortingExemptGames: tabConfig.gridConfiguration.ignoreNumberOfGamesInAISorting\n }\n if (this._shouldSortGames(liveGames?.useAISortedList)) {\n const sortingOptions: IAiSortOptions = {\n gamesMapOverride: this._liveCasinoRecommendedGames?.gameTypesMap,\n ignoreNumberOfGames: Check.isNumber(liveGames?.numberOfSortingExemptGames) ? liveGames?.numberOfSortingExemptGames : 0\n\n };\n\n if (Check.isNullOrUndefined(tabConfig.headerConfiguration.maxGamesToShow)) {\n return this.services.aiEngine.sortGames(filteredGameIds, sortingOptions)\n } else {\n return this.services.aiEngine.sortGames(filteredGameIds, sortingOptions).slice(0, tabConfig.headerConfiguration.maxGamesToShow);\n }\n }\n\n try {\n filteredGameIds = this.moveGamesThatOpenSoonToTheEnd(filteredGameIds);\n\n if (Check.isNullOrUndefined(tabConfig.headerConfiguration.maxGamesToShow)) {\n return filteredGameIds;\n } else {\n return filteredGameIds.slice(0, tabConfig.headerConfiguration.maxGamesToShow);\n }\n\n } catch (error) {\n this.services.logger.error(\"Failed to reduce to max games\", error);\n return filteredGameIds;\n }\n }\n\n private _shouldSortGames(useAISortedList: boolean = false): boolean {\n return (useAISortedList || this.services.abTestingAiSortGamesLists.arenaHasAiSorting(\"newLiveCasino\"))\n && !Check.isEmpty(this._liveCasinoRecommendedGames?.gameTypes);\n }\n\n private _isGameOpenSoon(startTime: string): boolean {\n let currentDate = this.services.time.getCurrentDate();\n let timeToOpen = TimeSpan.parse(startTime).totalMilliseconds - TimeSpan.parse(currentDate.getHours() + ':' + currentDate.getMinutes()).totalMilliseconds;\n return timeToOpen <= GAME_MAX_TIME_TO_OPEN && timeToOpen > 0;\n }\n\n moveGamesThatOpenSoonToTheEnd(gamesID: number[]): number[] {\n let closeGamesArr: number[] = [];\n for (let index = 0; index < gamesID.length; index++) {\n let currentGame = gamesID[index];\n let tableInfo = this.getTableInfo(currentGame);\n if (!Check.isEmpty(tableInfo) && !tableInfo.IsOpen) {\n delete gamesID[index];\n\n // Not show games that not open soon.\n if (tableInfo.OperationHoursStartTime) {\n if (this._isGameOpenSoon(tableInfo.OperationHoursStartTime)) {\n closeGamesArr.push(currentGame);\n }\n }\n }\n }\n\n gamesID = gamesID.filter(game => !Check.isNullOrUndefined(game));\n return gamesID.concat(closeGamesArr);\n }\n \n getIsLiveSlotGroup(subGameGroup: string): boolean {\n return subGameGroup === SUB_GAME_GROUP.LIVE_SLOT;\n };\n}\n","import {IHomepageService} from \"./homepage.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {\n HomePageHeaderArena\n} from \"../configurations/config-data-sections/home-page.configuration\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {GAME_ORIENTATION_IDS} from \"../user-game-orientation/user-game-orientation.service.interface\";\nimport { Check } from \"@sparkware/app-utils\";\nimport {BannerComponentProps} from \"../../components/banner/banner.component\";\nimport {HeaderArenasStyle} from \"../../themes/architecture/sections/theme-layout.interface\";\nimport {OrbitAIFeatureAnalyticsCategory} from \"../analytics/analytics.service.interface\";\n\nexport const NEW_ADDED_GAMES_LOCAL_STORAGE_KEY = \"new_added_games\";\n\nenum ARENA_IDS {\n SLOTS = \"slots\",\n JACKPOTS = \"jackpots\",\n BLACKJACK = \"blackjack\",\n ROULETTE = \"roulette\",\n CASINO_GAMES = \"casinoGames\",\n LIVE_CASINO = \"newLiveCasino\",\n SCRATCH_CARDS = \"scratchCards\",\n EXCLUSIVE888 = \"exclusive888Games\",\n VIDEO_POKER = \"videoPoker\",\n GAME_SHOWS = \"gameShows\",\n NEW_GAMES = \"newGames\"\n}\n\nconst USER_GROUP_TO_HEADER_ARENAS_MAPPING = {\n [GAME_ORIENTATION_IDS.SLOTS]: [ARENA_IDS.SLOTS, ARENA_IDS.JACKPOTS, ARENA_IDS.NEW_GAMES, ARENA_IDS.EXCLUSIVE888, ARENA_IDS.LIVE_CASINO, ARENA_IDS.GAME_SHOWS],\n [GAME_ORIENTATION_IDS.BLACKJACK]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.BLACKJACK, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.CASINO_GAMES, ARENA_IDS.JACKPOTS],\n [GAME_ORIENTATION_IDS.ROULETTE]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.ROULETTE, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.CASINO_GAMES, ARENA_IDS.JACKPOTS],\n [GAME_ORIENTATION_IDS.LIVE_BLACKJACK]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.BLACKJACK, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.CASINO_GAMES, ARENA_IDS.JACKPOTS],\n [GAME_ORIENTATION_IDS.LIVE_ROULETTE]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.ROULETTE, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.CASINO_GAMES, ARENA_IDS.JACKPOTS],\n [GAME_ORIENTATION_IDS.LIVE_CASINO]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.ROULETTE, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.CASINO_GAMES, ARENA_IDS.JACKPOTS],\n [GAME_ORIENTATION_IDS.CASINO_SKILL]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.CASINO_GAMES, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.JACKPOTS, ARENA_IDS.VIDEO_POKER],\n [GAME_ORIENTATION_IDS.CASINO_SOFT]: [ARENA_IDS.SLOTS, ARENA_IDS.JACKPOTS, ARENA_IDS.NEW_GAMES, ARENA_IDS.GAME_SHOWS, ARENA_IDS.EXCLUSIVE888, ARENA_IDS.SCRATCH_CARDS],\n [GAME_ORIENTATION_IDS.CASINO_MIXT]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.SLOTS,ARENA_IDS.NEW_GAMES, ARENA_IDS.JACKPOTS, ARENA_IDS.EXCLUSIVE888, ARENA_IDS.CASINO_GAMES]\n};\n\nexport class HomepageService extends ServiceBase implements IHomepageService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._setHeaderArenas(this.services.configuration.getHomePageHeaderArenas());\n\n\n this.reaction(() => this.services.userGameOrientation.gameGroup,\n (group) => {\n if (group?.groupId) {\n this._orderHeaderArenas(group.groupId)\n }\n },\n {\n fireImmediately: true\n });\n\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (isAuthorized) {\n this._updateNewAddedGames();\n } else {\n this._setNewAddedGames(0);\n }\n },\n {\n fireImmediately: true\n });\n }\n\n @observable.ref\n private _newAddedGames: number = 0;\n\n get newAddedGames(): number {\n return this._newAddedGames;\n }\n\n @action.bound\n _setNewAddedGames(newGamesCount: number) {\n this._newAddedGames = newGamesCount;\n }\n\n @observable.ref\n headerArenas: HomePageHeaderArena[] = [];\n\n @action.bound\n private _setHeaderArenas(arenas: HomePageHeaderArena[]): void {\n this.headerArenas = arenas;\n }\n\n private _orderHeaderArenas(id: number): void {\n\n let arenasNames = USER_GROUP_TO_HEADER_ARENAS_MAPPING[id];\n if (!arenasNames) {\n this.services.logger.error(`User orientation id ${id} is missing from mapping.`);\n return;\n }\n\n let headerOrderedAreans: HomePageHeaderArena[] = this.services.configuration.getHomePageHeaderArenasByUserOrientation(arenasNames);\n this._sendUserOrientationArenasAnalytics(headerOrderedAreans);\n this._setHeaderArenas(headerOrderedAreans);\n }\n\n private _sendUserOrientationArenasAnalytics(arenas: HomePageHeaderArena[]) {\n this.services.analytics.sendOrbitAIFeatureEvent(OrbitAIFeatureAnalyticsCategory.AIArenaIconsDisplayed, this.services.userGameOrientation.gameGroup.groupName, arenas.map(arena => arena.title).join(','));\n }\n\n\n private async _updateNewAddedGames() {\n\n const selfUpdatedByNewestGamesList = this.services.configuration.getSelfUpdatedByNewestGamesList();\n if (!selfUpdatedByNewestGamesList || !Check.isArray(selfUpdatedByNewestGamesList.gamesId)) {\n this._setNewAddedGames(0);\n return;\n }\n\n //take only in-layout games\n const gamesInfo = await this.services.games.getGamesInfoArray(selfUpdatedByNewestGamesList.gamesId);\n const seenGames = this._getNewAddedGamesFromLocalStorage();\n\n const newGames: {[gameType: number] : number} = {};\n gamesInfo.reduce((newGames, gi) => {\n const gt = gi.gameType;\n if (gt && !seenGames[gt]) {\n newGames[gt] = gt;\n }\n return newGames;\n }, newGames);\n\n this._setNewAddedGames(Object.keys(newGames).length);\n }\n\n resetNewAddedGames() {\n if (this.services.user.isAuthorized) {\n this._resetNewAddedGames();\n }\n }\n\n private _resetNewAddedGames() {\n\n const selfUpdatedByNewestGamesList = this.services.configuration.getSelfUpdatedByNewestGamesList();\n if (!selfUpdatedByNewestGamesList || !Check.isArray(selfUpdatedByNewestGamesList.gamesId)) {\n return;\n }\n\n this._setNewAddedGamesFromLocalStorage(selfUpdatedByNewestGamesList.gamesId);\n this._setNewAddedGames(0);\n }\n\n private _getNewAddedGamesFromLocalStorage() : {[gameType: number] : number} {\n const result: {[gameType: number] : number} = {};\n try {\n const storedValue = this.services.localStorage.getItem(this._getNewAddedGamesLocalStorageKey()) as string;\n if (!Check.isString(storedValue)) {\n return result;\n }\n storedValue.split(';').forEach(gameType => {\n result[gameType] = gameType;\n });\n return result;\n } catch(err) {\n this.services.logger.error(`Failed to parse ${this._getNewAddedGamesLocalStorageKey()} from local storage! Error details: `, err);\n return result;\n }\n }\n\n private _setNewAddedGamesFromLocalStorage(newGames: number[]) {\n const gamesList = newGames.join(';')\n this.services.localStorage.setItem(this._getNewAddedGamesLocalStorageKey(), gamesList);\n }\n\n private _getNewAddedGamesLocalStorageKey(): string {\n return `${NEW_ADDED_GAMES_LOCAL_STORAGE_KEY}_${this.services.user.cid}`;\n }\n\n // mini top banner means a smaller banner + arena icons which not overlap with banner content (and also smaller on PC)\n get useMiniTopBanner(): boolean {\n return !Check.isEmpty(this.services.configuration.data.homePage.topBanner.miniTopBannerComponentID);\n }\n\n get useAdminBanner(): boolean {\n const bannerAdminIDFromConfig = this.services.configuration.data.homePage.topBanner.bannerAdminPlaceholderId;\n return !Check.isEmpty(bannerAdminIDFromConfig);\n }\n\n get headerArenasStyle() {\n const preferredStyle = this.services.theme.currentTheme.layout.headerArenasStyle;\n // if the preferred style is Menu (for MrGreen) or SmallTiles (this should never come from here) we return it directly,\n // but if it is null (the default) or BigTiles (also should never come from here) we have to check if we should use SmallTiles (from AB testing or something)\n // or we should leave the default BigTiles\n if (preferredStyle === HeaderArenasStyle.Menu || preferredStyle === HeaderArenasStyle.SmallTiles) {\n return preferredStyle;\n }\n if (this.useMiniTopBanner || this.useAdminBanner) {\n return HeaderArenasStyle.SmallTiles;\n } else {\n return HeaderArenasStyle.BigTiles;\n }\n }\n\n get headerArenasStyleIsBigTiles() {\n return this.headerArenasStyle === HeaderArenasStyle.BigTiles;\n }\n\n get headerArenasStyleIsSmallTiles() {\n return this.headerArenasStyle === HeaderArenasStyle.SmallTiles;\n }\n\n get headerArenasStyleIsMenu() {\n return this.headerArenasStyle === HeaderArenasStyle.Menu;\n }\n\n private _getMiniBannerComponentID() {\n return this.services.configuration.data.homePage.topBanner.miniTopBannerComponentID;\n }\n\n getTopBannerProps(): BannerComponentProps {\n const topBannerConfig = this.services.configuration.data.homePage.topBanner;\n const minHeight = this.services.theme.themeCustomizer.getHomePageTopBannerHeight();\n const componentID = this.useMiniTopBanner ? this._getMiniBannerComponentID() : topBannerConfig.componentID;\n return {\n showPlaceholder: true,\n minHeight: minHeight,\n componentID: componentID,\n templateID: topBannerConfig.templateID,\n fallbackComponent: topBannerConfig.fallbackComponent,\n bannerAdminPlaceholderId: topBannerConfig.bannerAdminPlaceholderId\n }\n }\n}\n","import {Check} from \"@sparkware/app-utils\";\nimport { IAbTestingFeatureProperties } from \"../common/interfaces/ab-testing-interface\";\n\nexport const abTestingFeatureIsValid = (featureObject: IAbTestingFeatureProperties, featureProperties: string[]): any => {\n\n if (Check.isNullOrUndefined(featureObject) || Check.isNullOrUndefined(featureObject.Properties)) {\n return false;\n }\n\n for (let i = 0; i < featureProperties.length; i++) {\n if (Check.isNullOrUndefined(featureObject.Properties[featureProperties[i]])) {\n return false;\n }\n }\n\n return true;\n};\n","import { ServiceBase } from \"../ServiceBase\";\nimport { IAbTestingFeatureProperties } from \"../../../common/interfaces/ab-testing-interface\";\nimport {\n IAbTestingAiSortData,\n IAbTestingFeatureDataProviderService,\n IWidgetABEligibility\n} from \"./ab-testing-feature-data-provider.service.interface\";\nimport { abTestingFeatureIsValid } from \"../../../utils/ab-testing-feature-check\";\nimport {\n FEATURE_NAME_CONTROL_CENTER_TOGGLE,\n FEATURE_NAME_SEARCH_GAME_SUGGESTED_BY_AI,\n FEATURE_NAME_PLAYERS_LIKE_YOU_GAMES_LIST_TYPE_ID,\n FEATURE_NAME_LIST_ON_TOP,\n FEATURE_NAME_VIDEO_LIVE_STREAM,\n FEATURE_NAME_AI_SORT_GAME_LIST,\n FEATURE_NAME_STATIC_VIDEO_LIST,\n FEATURE_TRANSACTION_HISTORY_WIDGET,\n FEATURE_DEPOSIT_WIDGET,\n FEATURE_CASHOUT_WIDGET,\n FEATURE_NAME_MOBILE_HEADER_SEARCH_BUTTON,\n FEATURE_NAME_ONBOARDING_TOUR,\n FEATURE_NAME_REGISTRATION_WIDGET, FEATURE_NAME_WEBAPP_BOTTOM_NAVIGATION,\n FEATURE_NAME_IN_GAME_NAV_BAR,\n FEATURE_NAME_VIDEO_SLIDES\n} from \"../../../common/const/ab-testing-names\";\nimport { action, observable, makeObservable } from 'mobx';\nimport { IServiceFactoryExtended } from '../service-factory-extended.interface';\nimport { Check } from \"@sparkware/app-utils\";\n\nexport class AbTestingFeatureDataProviderService extends ServiceBase implements IAbTestingFeatureDataProviderService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this.reaction(() => this.services.user.isAuthorized,\n () => {\n this._playersLikeYouGamesListTypeId();\n this._setIsVideoLiveStreamEnabled();\n this._setIsStaticVideoListEnabled();\n this._setMobileHeaderSearchButtonEnabled();\n this._setIsWebappBottomNavigationAbEnabled();\n this._setIsVideoSlidesAbEnabled();\n }, {\n fireImmediately: true\n });\n\n this._setDataFromAnonymousAbTesting();\n }\n\n @observable\n mobileHeaderSearchButtonEnabled: boolean = false;\n\n private _setDataFromAnonymousAbTesting(): void {\n this.services.sdk.waitForAnonymousAbTestingData().then(() => {\n this._setMobileHeaderSearchButtonEnabled();\n });\n }\n\n @action.bound\n private _setMobileHeaderSearchButtonEnabled(): void {\n let mobileHeaderSearchBtnFeatureData: IAbTestingFeatureProperties | undefined;\n if (this.services.user.isAuthorized) {\n mobileHeaderSearchBtnFeatureData = this._getFeature(FEATURE_NAME_MOBILE_HEADER_SEARCH_BUTTON);\n } else {\n mobileHeaderSearchBtnFeatureData = this.services.sdk.getAnonymousPlayerAbTestingDataForFeature(FEATURE_NAME_MOBILE_HEADER_SEARCH_BUTTON, true);\n }\n if (mobileHeaderSearchBtnFeatureData) {\n this.mobileHeaderSearchButtonEnabled = mobileHeaderSearchBtnFeatureData?.Properties?.featuretoggle?.toLowerCase() === \"true\";\n }\n }\n\n public async isRegistrationWidgetEnabled(): Promise {\n await this.services.sdk.waitForAnonymousAbTestingData();\n const featureData = this.services.sdk.getAnonymousPlayerAbTestingDataForFeature(FEATURE_NAME_REGISTRATION_WIDGET, true);\n\n return featureData?.Properties?.featuretoggle?.toString().toLowerCase() === \"true\";\n }\n\n private _getWidgetFeatureEnabled(widgetFeatureName: string): IWidgetABEligibility | null {\n const featureData = this._getFeature(widgetFeatureName);\n if (!featureData) {\n return null;\n }\n\n return {\n featureName: featureData.FeatureName,\n testGroup: featureData.GroupName,\n testId: featureData.TestId,\n isEligible: featureData.Properties.featuretoggle.toLowerCase() === \"true\"\n }\n }\n\n get transactionHistoryWidget(): IWidgetABEligibility | null {\n return this._getWidgetFeatureEnabled(FEATURE_TRANSACTION_HISTORY_WIDGET);\n }\n\n get depositWidget(): IWidgetABEligibility | null {\n return this._getWidgetFeatureEnabled(FEATURE_DEPOSIT_WIDGET);\n }\n\n get cashoutWidget(): IWidgetABEligibility | null {\n return this._getWidgetFeatureEnabled(FEATURE_CASHOUT_WIDGET);\n }\n\n private get _features(): { [featureName: string]: IAbTestingFeatureProperties } {\n return this.services.sdk.getAbTestingData() || {};\n }\n\n private _hasFeature(featureName: string) {\n const feature = this._getFeature(featureName);\n if (!feature || !feature.Properties) {\n return false;\n }\n\n return true;\n }\n\n private _getFeature(featureName: string): IAbTestingFeatureProperties | undefined {\n return this._features[featureName.toLowerCase()];\n }\n\n get aiSortGamesLists(): IAbTestingAiSortData {\n\n const aiSortGamesListsFeatureData = this._getFeature(FEATURE_NAME_AI_SORT_GAME_LIST);\n\n const result: IAbTestingAiSortData = { arenas: [] };\n if (abTestingFeatureIsValid(aiSortGamesListsFeatureData, [\"arenas\"]) && Check.isString(aiSortGamesListsFeatureData.Properties.arenas)) {\n try {\n result.arenas = JSON.parse(aiSortGamesListsFeatureData.Properties.arenas.replace(/'/g, '\"'));\n } catch (e) {\n this.services.logger.error(`Failed to parse AB Test data for feature \"${FEATURE_NAME_AI_SORT_GAME_LIST}\".\\n${e}`);\n }\n }\n return result;\n }\n\n get searchGameSuggestionByAI(): string | null {\n if (this._hasFeature(FEATURE_NAME_SEARCH_GAME_SUGGESTED_BY_AI)) {\n const abTestingSearchGameSuggestionByAI = this._getFeature(FEATURE_NAME_SEARCH_GAME_SUGGESTED_BY_AI);\n if (abTestingFeatureIsValid(abTestingSearchGameSuggestionByAI, [\"aitype\"])) {\n return abTestingSearchGameSuggestionByAI.Properties?.aitype?.toLowerCase();\n }\n }\n\n return null;\n }\n\n @observable.ref\n playersLikeYouGamesListTypeId = null;\n\n\n @action.bound\n private _playersLikeYouGamesListTypeId(): void {\n if (this._hasFeature(FEATURE_NAME_PLAYERS_LIKE_YOU_GAMES_LIST_TYPE_ID)) {\n const abTestingPlayersLikeYouGamesListTypeIdAIData = this._getFeature(FEATURE_NAME_PLAYERS_LIKE_YOU_GAMES_LIST_TYPE_ID);\n if (abTestingFeatureIsValid(abTestingPlayersLikeYouGamesListTypeIdAIData, [\"listid\"])) {\n this.playersLikeYouGamesListTypeId = abTestingPlayersLikeYouGamesListTypeIdAIData.Properties?.listid?.toLowerCase();\n } else {\n this.playersLikeYouGamesListTypeId = null;\n }\n } else {\n this.playersLikeYouGamesListTypeId = null;\n }\n }\n\n get listOnTop(): number[] | null {\n if (this._hasFeature(FEATURE_NAME_LIST_ON_TOP)) {\n const abTestingListOnTopData = this._getFeature(FEATURE_NAME_LIST_ON_TOP);\n if (abTestingFeatureIsValid(abTestingListOnTopData, [\"listid\"])) {\n let listId = abTestingListOnTopData.Properties?.listid;\n const splidedList = listId.split(',');\n\n listId = splidedList.map((id: string) => parseInt(id));\n\n return listId\n }\n }\n\n return null;\n }\n\n get isControlCenterEnabled(): boolean {\n if (this._hasFeature(FEATURE_NAME_CONTROL_CENTER_TOGGLE)) {\n const abTestingControlCenterData = this._getFeature(FEATURE_NAME_CONTROL_CENTER_TOGGLE);\n if (abTestingFeatureIsValid(abTestingControlCenterData, [\"enablesafezone\"])) {\n return abTestingControlCenterData.Properties?.enablesafezone.toLowerCase() === \"true\";\n }\n return false;\n }\n\n const currentRegulationCode = this.services.regulation.getRegulationCode();\n const enabledForRegulation = this.services.configuration.servicesConfigs.SafezoneLoader?.enabledForRegulation;\n if (enabledForRegulation && Check.isBoolean(enabledForRegulation[currentRegulationCode]) && enabledForRegulation[currentRegulationCode]) {\n return enabledForRegulation[currentRegulationCode];\n } else {\n return Boolean(this.services.configuration.data.safezone?.enabled);\n }\n }\n\n @observable.ref\n isVideoLiveStreamEnabled: boolean = false;\n\n @action.bound\n _setIsVideoLiveStreamEnabled(): void {\n let isEnabled = false;\n if (this._hasFeature(FEATURE_NAME_VIDEO_LIVE_STREAM)) {\n const featureData = this._getFeature(FEATURE_NAME_VIDEO_LIVE_STREAM);\n if (abTestingFeatureIsValid(featureData, [\"featuretoggle\"])) {\n isEnabled = featureData.Properties.featuretoggle.toLowerCase() === \"true\";\n }\n }\n this.isVideoLiveStreamEnabled = isEnabled;\n }\n\n @observable.ref\n isStaticVideoListEnabled: boolean = false;\n\n @action.bound\n _setIsWebappBottomNavigationAbEnabled(): void {\n let isEnabled = false;\n if (this._hasFeature(FEATURE_NAME_WEBAPP_BOTTOM_NAVIGATION)) {\n const featureData = this._getFeature(FEATURE_NAME_WEBAPP_BOTTOM_NAVIGATION);\n if (abTestingFeatureIsValid(featureData, [\"featuretoggle\"])) {\n isEnabled = featureData.Properties.featuretoggle.toLowerCase() === \"true\";\n }\n }\n this.isWebappBottomNavigationAbEnabled = isEnabled;\n }\n\n @observable\n isWebappBottomNavigationAbEnabled: boolean = false;\n\n @action.bound\n _setIsStaticVideoListEnabled(): void {\n let isEnabled = false;\n if (this._hasFeature(FEATURE_NAME_STATIC_VIDEO_LIST)) {\n const featureData = this._getFeature(FEATURE_NAME_STATIC_VIDEO_LIST);\n if (abTestingFeatureIsValid(featureData, [\"featuretoggle\"])) {\n isEnabled = featureData.Properties.featuretoggle.toLowerCase() === \"true\";\n }\n }\n this.isStaticVideoListEnabled = isEnabled;\n }\n\n \n @observable.ref\n isVideoSlidesAbEnabled: boolean = false;\n\n @action.bound\n _setIsVideoSlidesAbEnabled(): void {\n let isEnabled = false;\n if (this._hasFeature(FEATURE_NAME_VIDEO_SLIDES)) {\n const featureData = this._getFeature(FEATURE_NAME_VIDEO_SLIDES);\n if (abTestingFeatureIsValid(featureData, [\"featuretoggle\"])) {\n isEnabled = featureData.Properties.featuretoggle.toLowerCase() === \"true\";\n }\n }\n this.isVideoSlidesAbEnabled = isEnabled;\n }\n\n get onboardingTourEnabled(): boolean {\n if (this._hasFeature(FEATURE_NAME_ONBOARDING_TOUR)) {\n const feature = this._getFeature(FEATURE_NAME_ONBOARDING_TOUR);\n if (abTestingFeatureIsValid(feature, [\"featuretoggle\"])) {\n return feature.Properties.featuretoggle.toLowerCase() === \"true\";\n }\n }\n return false;\n }\n\n get inGameNavBarEnabled(): boolean {\n if (this._hasFeature(FEATURE_NAME_IN_GAME_NAV_BAR)) {\n const feature = this._getFeature(FEATURE_NAME_IN_GAME_NAV_BAR);\n if (abTestingFeatureIsValid(feature, [\"featuretoggle\"])) {\n return feature.Properties.featuretoggle.toLowerCase() === \"true\";\n }\n }\n return false;\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport { IControlCenterService } from \"./control-center.service.interface\";\nexport class ControlCenterService extends ServiceBase implements IControlCenterService {\n get isEnabled(): boolean {\n if(this.services.user.isAuthorized) {\n return this.services.abTestingFeatureDataProvider.isControlCenterEnabled;\n } else {\n return false;\n }\n }\n}","import { ServiceBase } from \"../ServiceBase\";\nimport { IWalletProxyService } from \"./wallet-proxy.service.interface\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { BalanceType } from \"../../../common/const/wallet_balance_type\";\n\nexport class WalletProxyService extends ServiceBase implements IWalletProxyService {\n\n @observable\n public bankroll: Record = {\n [BalanceType.CASH]: '',\n [BalanceType.BONUS]: '',\n [BalanceType.BOTH]: '',\n };\n\n @observable\n public plainNumberBankroll: Record = {\n [BalanceType.CASH]: 0,\n [BalanceType.BONUS]: 0,\n [BalanceType.BOTH]: 0,\n };\n\n get totalBankroll(): number {\n return this.plainNumberBankroll[BalanceType.BOTH] || 0;\n }\n\n get cashBankroll(): number {\n return this.plainNumberBankroll[BalanceType.CASH] || 0;\n }\n\n get bonusBankroll(): number {\n return this.plainNumberBankroll[BalanceType.BONUS] || 0;\n }\n\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n\n makeObservable(this);\n\n this.subscribe();\n this.fetchAllData();\n }\n\n @action.bound\n private setBankroll(bankroll: string, plainNumber: number, bType: BalanceType) {\n this.bankroll[bType] = bankroll;\n this.plainNumberBankroll[bType] = plainNumber;\n }\n\n /**\n * When the BALANCE_UPDATED from CGP is fired, the bankroll balance must pe updated\n */\n private subscribe() {\n this.services.sdk.events.onBalanceUpdated(() => {\n this.fetchAllData();\n });\n this.services.sdk.events.onOAuthStateChanged(async (params) => {\n this.fetchAllData();\n (await this.services.loginPopup).showLoginGamePopupOnAuthStateChange(params)\n })\n }\n\n private fetchAllData() {\n for (const bankrollType of Object.values(BalanceType)) {\n const {bankroll, plainNumber} = this._getData(bankrollType);\n this.setBankroll(bankroll, plainNumber, bankrollType);\n }\n }\n\n // retrieve bankroll data from Wallet\n private _getData(bankrollType: BalanceType): {bankroll: string, plainNumber: number} {\n let bankroll = '';\n let plainNumber: number = NaN;\n\n if (this.services.user.isAuthorized) {\n bankroll = this.services.sdk.getBankroll(bankrollType) as string;\n plainNumber = this.services.sdk.getBankroll(bankrollType, true) as number;\n }\n return {bankroll, plainNumber};\n }\n\n}\n","import React, {ReactNode} from 'react';\nimport {TsrWithDropdownBox} from \"./boxes/tsr-with-dropdown.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {OrbitComponentWithState} from \"../../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {Select} from \"../../../basic-ui-components/form/select.component\";\nimport {TsrWithDropdownOptionSelectorBox} from \"./boxes/tsr-with-dropdown-option-selector.box\";\nimport {TsrWithDropdownMainTextBox} from \"./boxes/tsr-with-dropdown-main-text.box\";\nimport {TsrWithDropdownSelectorContainerBox} from \"./boxes/tsr-with-dropdown-selector-container.box\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport {DISPLAY_MESSAGE_IDS} from \"../../../../common/const/casinofied-analytics-consts\";\nimport { TSR_TYPE, ITimeSpentReminderOptions } from '../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/time-spent-reminder-options';\nimport {ModalDialogActionsComponent} from \"../../modal-dialog/modal-dialog-actions.component\";\nimport { DialogTextBox } from '../../modal-dialog/boxes/text/dialog-text.box';\nimport { AppIdentifiers, AreaType, ControlCenterOpenSource } from '@sparkware/uc-sdk-core';\nimport {ControlCenterDeeplink} from '@sparkware/uc-sdk-core';\nimport {observer} from \"mobx-react\";\n\nenum UK_TSR_OPTIONS {\n UK_TSR_RESUME_GAME_OPT = \"UK_TSR_RESUME_GAME_OPT\",\n UK_TSR_CONTINUE_OPT = \"UK_TSR_CONTINUE_OPT\",\n UK_TSR_STOP_REMINDERS_OPT = \"UK_TSR_STOP_REMINDERS_OPT\",\n UK_TSR_REVIEW_REMINDERS_OPT = \"UK_TSR_REVIEW_REMINDERS_OPT\",\n UK_TSR_HISTORY_OPT = \"UK_TSR_HISTORY_OPT\",\n UK_TSR_CLOSE_GAME_OPT = \"UK_TSR_CLOSE_GAME_OPT\",\n UK_TSR_LOGOUT_OPT = \"UK_TSR_LOGOUT_OPT\"\n}\n\nconst ELASTIC_CATEGORY: string = \"Client_RealityCheck_Detail\";\n\nconst TRACKING_UK_TSR_OPTION_NAMES: Record = {\n [UK_TSR_OPTIONS.UK_TSR_RESUME_GAME_OPT]: \"ResumeGame\",\n [UK_TSR_OPTIONS.UK_TSR_CONTINUE_OPT]: \"Continue\",\n [UK_TSR_OPTIONS.UK_TSR_STOP_REMINDERS_OPT]: \"StopReminders\",\n [UK_TSR_OPTIONS.UK_TSR_REVIEW_REMINDERS_OPT]: \"ReviewReminders\",\n [UK_TSR_OPTIONS.UK_TSR_HISTORY_OPT]: \"ViewHistory\",\n [UK_TSR_OPTIONS.UK_TSR_CLOSE_GAME_OPT]: \"CloseGame\",\n [UK_TSR_OPTIONS.UK_TSR_LOGOUT_OPT]: \"LogOut\"\n};\n\nconst TSR_OPTIONS_BY_TYPE: Record = {\n [TSR_TYPE.SESSION_TIMER]: [\n UK_TSR_OPTIONS.UK_TSR_CONTINUE_OPT,\n UK_TSR_OPTIONS.UK_TSR_REVIEW_REMINDERS_OPT,\n UK_TSR_OPTIONS.UK_TSR_HISTORY_OPT,\n UK_TSR_OPTIONS.UK_TSR_LOGOUT_OPT\n ],\n [TSR_TYPE.GAME_TIMER]: [\n UK_TSR_OPTIONS.UK_TSR_RESUME_GAME_OPT,\n UK_TSR_OPTIONS.UK_TSR_STOP_REMINDERS_OPT,\n UK_TSR_OPTIONS.UK_TSR_HISTORY_OPT,\n UK_TSR_OPTIONS.UK_TSR_CLOSE_GAME_OPT\n ]\n};\n\nexport type ITimeSpentReminderComponentProps = ITimeSpentReminderOptions & TimeSpentReminderComponentBaseProps;\nexport interface TimeSpentReminderComponentBaseProps {\n dialogHandler: IModalDialogHandler;\n}\n\n\ninterface TimeSpentReminderComponentState {\n selectedOption: UK_TSR_OPTIONS;\n}\n\n@observer\nexport class TimeSpentReminderWithDropdownComponent extends OrbitComponentWithState {\n\n private _businessCorrelationId: string;\n\n constructor(props: ITimeSpentReminderComponentProps) {\n super(props);\n\n this.state = {\n selectedOption: UK_TSR_OPTIONS.UK_TSR_RESUME_GAME_OPT\n };\n }\n\n componentDidMount() {\n super.componentDidMount();\n this._businessCorrelationId = this.services.tools.getGuid();\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: this._businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.timeSpentReminder,\n displayMessageName: 'TimeSpentReminder'\n });\n }\n\n private _renderLoggedInText = (): ReactNode => {\n const playingTimeWithoutUnits = this.props.playingTime.toHoursAndMinutesString();\n //Temporary hack to also display 'h' and 'm', should probably modify TimeSpan class to support this\n const playingTime = `${playingTimeWithoutUnits.substring(0, 2)}h${playingTimeWithoutUnits.substring(2)}m`;\n return (\n \n {this.services.translation.translate('TSR_SESSION_TIME_TEXT')}\n {playingTime}\n \n );\n };\n\n private _renderSelectorContainer = (): ReactNode => {\n return (\n \n {this.services.translation.translate('TSR_SUBTEXT')}\n {this._renderSelect()}\n \n \n );\n };\n\n private _renderSelect = (): ReactNode => {\n return (\n \n this._updateSelection(e.target.value as UK_TSR_OPTIONS)}\n width=\"100%\"\n >\n {Object.values(TSR_OPTIONS_BY_TYPE[this.props.timerType]).map(tsrOption =>\n \n )}\n \n \n );\n };\n\n private _updateSelection = (selection: UK_TSR_OPTIONS): void => {\n return this.setState({\n selectedOption: selection\n });\n };\n\n private _actionAlreadyTriggered:boolean = false;//used to prevent multiple clicks on the action button.\n private _executeAction = async () => {\n if(this._actionAlreadyTriggered) {\n return;\n }\n this._actionAlreadyTriggered = true;\n\n const closeCurrentGame = async () => {\n await (await this.services.gameRunner).closeCurrentGame({\n shouldSuggestNextGame: false\n });\n }\n\n this._sendActionDataTracking();\n switch (this.state.selectedOption) {\n case UK_TSR_OPTIONS.UK_TSR_RESUME_GAME_OPT:\n case UK_TSR_OPTIONS.UK_TSR_CONTINUE_OPT:\n this._closeDialogBox();\n break;\n case UK_TSR_OPTIONS.UK_TSR_HISTORY_OPT:\n this._closeDialogBox();\n this.services.gameRouteHandler.redirectToHistory();\n break;\n case UK_TSR_OPTIONS.UK_TSR_CLOSE_GAME_OPT:\n this._closeDialogBox();\n closeCurrentGame();\n break;\n case UK_TSR_OPTIONS.UK_TSR_LOGOUT_OPT:\n this._closeDialogBox();\n await closeCurrentGame();\n this.services.user.logout();\n break;\n case UK_TSR_OPTIONS.UK_TSR_REVIEW_REMINDERS_OPT:\n this._closeDialogBox();\n closeCurrentGame();\n this._onReviewReminders();\n\n break;\n case UK_TSR_OPTIONS.UK_TSR_STOP_REMINDERS_OPT:\n this._onStopFurtherReminders();\n this._closeDialogBox();\n break;\n }\n };\n\n private _onReviewReminders = async () => {\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this._businessCorrelationId,\n channel: {\n area: AreaType.button,\n element: UK_TSR_OPTIONS.UK_TSR_REVIEW_REMINDERS_OPT,\n source: AppIdentifiers.CasinoClient\n },\n appSpecificParameters: {\n deeplink: ControlCenterDeeplink.TimeSpentReminderPage,\n source: ControlCenterOpenSource.Lobby\n }\n });\n }\n\n private _onStopFurtherReminders = (): void => {\n if (this.props.timerType === TSR_TYPE.GAME_TIMER) {\n if (Check.isFunction(this.props.onStopReminders)) {\n this.props.onStopReminders();\n } else {\n console.error(\"Time Spent Reminder: invalid callback to stop further reminders\");\n }\n }\n };\n\n private _closeDialogBox = (): void => {\n this.props.dialogHandler.close();\n };\n\n private _sendActionDataTracking = (): void => {\n const action = TRACKING_UK_TSR_OPTION_NAMES[this.state.selectedOption];\n\n this._sendActionDataToElastic(action);\n\n this.services.casinofiedAnalytics.messageActionTaken({\n actionType: action,\n businessCorrelationID: this._businessCorrelationId\n });\n };\n\n private _sendActionDataToElastic = (action: string): void => {\n const logger = this.services.analytics.getLogger({\n CGPEventCategory: ELASTIC_CATEGORY,\n CGPEventAction: action\n });\n\n logger.setTarget('casino-realityCheck');\n logger.info();\n };\n\n render() {\n return (\n \n {this._renderLoggedInText()}\n {this._renderSelectorContainer()}\n \n );\n }\n}","import {SessionCooldownPopupDefaultBox} from \"./session-cooldown-popup.default.box\";\n\nexport const SessionCooldownPopupBox = SessionCooldownPopupDefaultBox;\n","import styled from \"styled-components\";\n\nexport const SessionCooldownPopupDefaultBox = styled.div`\n display: flex;\n padding: 2rem;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n user-select: none;\n pointer-events: none;\n`;\n","import {SessionCooldownPopupTextDefaultBox} from \"./session-cooldown-popup-text.default.box\";\n\nexport const SessionCooldownPopupTextBox = SessionCooldownPopupTextDefaultBox;\n","import styled from \"styled-components\";\nimport { DialogTextBox } from \"../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const SessionCooldownPopupTextDefaultBox = styled(DialogTextBox)`\n font-size: 1.8rem;\n`;\n","import {SessionCooldownPopupTimerDefaultBox} from \"./session-cooldown-popup-timer.default.box\";\n\nexport const SessionCooldownPopupTimerBox = SessionCooldownPopupTimerDefaultBox;\n","import styled from \"styled-components\";\nimport { DialogHighlightedTextBox } from \"../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const SessionCooldownPopupTimerDefaultBox = styled(DialogHighlightedTextBox)`\n font-size: 4rem;\n`;\n","import {SessionCooldownPopupTimerRemainingDefaultBox} from \"./session-cooldown-popup-timer-remaining.default.box\";\n\nexport const SessionCooldownPopupTimerRemainingBox = SessionCooldownPopupTimerRemainingDefaultBox;\n","import styled from \"styled-components\";\nimport { DialogTextBox } from \"../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const SessionCooldownPopupTimerRemainingDefaultBox = styled(DialogTextBox)`\n font-size: 2rem;\n`;\n","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {SessionCooldownPopupBox} from \"./boxes/session-cooldown.popup.box\";\nimport {SessionCooldownPopupTextBox} from \"./boxes/session-cooldown-popup-text.box\";\nimport {SessionCooldownPopupTimerBox} from \"./boxes/session-cooldown-popup-timer.box\";\nimport {SessionCooldownPopupTimerRemainingBox} from \"./boxes/session-cooldown-popup-timer-remaining.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\n\nexport interface ISessionCooldownPopupComponentProps {\n getRemainingTime: () => TimeSpan;\n}\n\nexport const SessionCooldownPopupComponent: React.FC = observer((props) => {\n const services = useServices();\n const remainingTime = props.getRemainingTime();\n\n const prependZero = (value: number) => {\n return value.toString().padStart(2, '0');\n }\n\n return (\n \n \n {prependZero(remainingTime.minutes)}:{prependZero(remainingTime.seconds)}\n \n \n {services.translation.translate(\"SESSION_COOLDOWN_POPUP_REMAINING\")}\n \n \n {services.translation.translate(\"SESSION_COOLDOWN_POPUP_INFO_TEXT\")}\n \n \n );\n\n})\n","import React from \"react\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {makeObservable, observable, runInAction} from \"mobx\";\nimport {IModalDialogHandler} from \"../dialog/dialog.service.interface\";\nimport {CGPEventSubscription} from \"../sdk/cgp-sdk.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {SessionCooldownPopupComponent} from \"../../components/session-cooldown-popup/session-cooldown-popup.component\";\nimport {ISessionCooldownService} from \"./session-cooldown.service.interface\";\nimport {NullableNumber} from \"../../../common/types/nullable-types\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {namedSetInterval} from \"../../../common/utils/time-functions\";\n\nexport const COOL_DOWN_EXPIRATION_DATE_STORAGE_KEY: string = \"orbit-session-cooldown-expiration-date\";\n\nexport class SessionCooldownService extends ServiceBase implements ISessionCooldownService {\n\n private _sessionCoolDownConfig = this.services.regulation.getSessionCooldownConfig();\n\n @observable.ref\n private _remainingTime: TimeSpan = TimeSpan.fromMilliseconds(0);\n\n private _dialogHandler: IModalDialogHandler | null = null;\n private _realityCheckOpenedEventHandler: CGPEventSubscription = null;\n private _realityCheckClosedEventHandler: CGPEventSubscription = null;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n if (this._sessionCoolDownConfig.featureEnabled) {\n this.reaction(\n () => this.services.user.isAuthorized,\n isAuthorized => {\n if(isAuthorized) {\n this._onUserLogin();\n } else {\n this._onUserLogout()\n }\n },\n {\n fireImmediately: true\n }\n );\n }\n }\n\n private get coolDownExpirationDate(): NullableNumber {\n const storedExpirationDate = this.services.localStorage.getItem(COOL_DOWN_EXPIRATION_DATE_STORAGE_KEY);\n if(storedExpirationDate) {\n return parseInt(storedExpirationDate);\n }\n\n return null;\n }\n\n private set coolDownExpirationDate(value: NullableNumber) {\n if(Check.isNullOrUndefined(value)) {\n this.services.localStorage.removeItem(COOL_DOWN_EXPIRATION_DATE_STORAGE_KEY);\n } else {\n this.services.localStorage.setItem(COOL_DOWN_EXPIRATION_DATE_STORAGE_KEY, value);\n }\n }\n\n private get isInCoolDown(): boolean {\n const expirationDate = this.coolDownExpirationDate;\n if(Check.isNullOrUndefined(expirationDate)) {\n return false;\n }\n\n return this.services.time.now() < expirationDate;\n }\n\n private _onUserLogin() {\n if(this.isInCoolDown) {\n this._showCoolDownDialog();\n }\n\n this._realityCheckClosedEventHandler = this.services.sdk.events.onRealityCheckClosed(() => {\n this.coolDownExpirationDate = this.services.time.now() + this._sessionCoolDownConfig.cooldownTime.totalMilliseconds;\n this._showCoolDownDialog();\n });\n\n this._realityCheckOpenedEventHandler = this.services.sdk.events.onRealityCheckOpened(() => {\n this._closeCoolDownDialog();\n this.coolDownExpirationDate = null;\n });\n }\n\n private _onUserLogout() {\n\n this._closeCoolDownDialog();\n\n this._realityCheckClosedEventHandler?.off();\n this._realityCheckClosedEventHandler = null;\n\n this._realityCheckOpenedEventHandler?.off();\n this._realityCheckOpenedEventHandler = null;\n\n this.coolDownExpirationDate = null;\n }\n\n private _updateRemainingTime(): void {\n runInAction(() => {\n if(this.isInCoolDown) {\n this._remainingTime = TimeSpan.fromMilliseconds(this.coolDownExpirationDate - this.services.time.now());\n } else {\n this.coolDownExpirationDate = null;\n this._remainingTime = TimeSpan.fromMilliseconds(0);\n }\n });\n }\n\n private _countDownTimerRef: any = null;\n private _startCountDownTimer(): void {\n this._updateRemainingTime();\n this._countDownTimerRef = namedSetInterval('COOL_DOWN_COUNT_DOWN_TIMER',() => {\n this._updateRemainingTime();\n\n if(this.isInCoolDown) {\n this._preventCoolDownByPass(); //this is for the case when a smart user removes the dialog from DOM using dev tools\n } else {\n this._closeCoolDownDialog();\n }\n }, 1000);\n }\n\n private _stopCountDownTimer(): void {\n if(this._countDownTimerRef) {\n clearInterval(this._countDownTimerRef);\n this._countDownTimerRef = null;\n }\n }\n\n private _showCoolDownDialog() {\n\n this.services.dialog.showModal((dialogHandler) => {\n this._dialogHandler = dialogHandler;\n return this._remainingTime} />\n }, {\n title: this.services.translation.translate(\"SESSION_COOLDOWN_POPUP_TITLE\"),\n isHighPriority: true,\n hideCloseButton: true,\n shouldBeClosedOnlyByUser: true\n });\n\n this.services.analytics.sendElasticInfoEvent({\n eventType:\"Lugas\",\n category:\"SESSION_COOLDOWN_POPUP\",\n action:\"SHOW_POPUP\"\n }, false);\n\n this._startCountDownTimer();\n }\n\n private _closeCoolDownDialog(): void {\n this._stopCountDownTimer();\n if(this._dialogHandler) {\n this._dialogHandler.close();\n this._dialogHandler = null;\n this.services.analytics.sendElasticInfoEvent({\n eventType:\"Lugas\",\n category:\"SESSION_COOLDOWN_POPUP\",\n action:\"HIDE_POPUP\"\n }, false);\n\n }\n\n }\n\n private _preventCoolDownByPass(): void {\n const elem = document.getElementsByClassName(CyClass('cy-session-cooldown-popup'));\n if (elem.length === 0) {\n this.services.analytics.sendElasticInfoEvent({\n eventType:\"Lugas\",\n category:\"SESSION_COOLDOWN_POPUP\",\n action:\"POPUP_MANIPULATED\"\n }, false);\n this._stopCountDownTimer();\n this.services.window.reload();\n }\n }\n\n\n}\n","import { action, observable, makeObservable } from \"mobx\";\n\ninterface IMediaQueryData {\n matches: boolean;\n media: string;\n}\n\nexport class MediaQueryListener {\n @observable.ref\n isMatched: boolean;\n\n private mediaQueryList: MediaQueryList;\n\n constructor(public media: string, private onChangeConstructorParam: (matches: boolean) => void) {\n makeObservable(this);\n\n this.mediaQueryList = window.matchMedia(media);\n\n if (this.mediaQueryList.addEventListener) {\n this.mediaQueryList.addEventListener(\"change\", this.onChangeEventListener);\n } else if (this.mediaQueryList.addListener) {\n this.mediaQueryList.addListener(this.onChangeEventListener);\n } else if (this.mediaQueryList.onchange) {\n this.mediaQueryList.onchange = this.onChangeEventListener;\n } else {\n throw new Error(\"Cannot subscribe to MediaQueryList change event\");\n }\n this.onChangeEventListener(this.mediaQueryList);\n }\n\n @action.bound\n onChangeEventListener = (mQueryEventData: IMediaQueryData) => {\n let dataWillChange = this.isMatched !== mQueryEventData.matches;\n this.isMatched = mQueryEventData.matches;\n if (this.onChangeConstructorParam && dataWillChange) {\n this.onChangeConstructorParam(mQueryEventData.matches);\n }\n };\n\n dispose() {\n if (this.mediaQueryList.removeEventListener) {\n this.mediaQueryList.removeEventListener(\"change\", this.onChangeEventListener);\n } else if (this.mediaQueryList.removeListener) {\n this.mediaQueryList.removeListener(this.onChangeEventListener);\n } else if (this.mediaQueryList.onchange) {\n this.mediaQueryList.onchange = undefined;\n }\n }\n}\n","import { ServiceBase } from '../ServiceBase';\nimport { IServiceFactoryExtended } from '../service-factory-extended.interface';\nimport { MediaQueryListener } from \"./media-query-listener\";\nimport { mediaQueries } from \"./media-queries\";\nimport { IMediaQueryService, IMediaQueriesGeneric } from \"./media-queries.interface\";\nimport {action, makeObservable, observable} from 'mobx';\n\ntype IMediaListeners = IMediaQueriesGeneric;\n\nexport class MediaQueryService extends ServiceBase implements IMediaQueryService {\n private mediaQueryListeners: IMediaListeners;\n\n @observable.ref\n public lastMediaChange = new Date();\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n makeObservable(this);\n\n const tempRecords = {};\n (Object.keys(mediaQueries) as (keyof IMediaListeners)[]).forEach(mediaType => {\n tempRecords[mediaType] = new MediaQueryListener(mediaQueries[mediaType], this.updateLastMediaChange.bind(this));\n });\n this.mediaQueryListeners = tempRecords as IMediaListeners;\n }\n\n @action.bound\n updateLastMediaChange() {\n this.lastMediaChange = new Date();\n }\n\n get xs() {\n return this.mediaQueryListeners.xs.isMatched;\n }\n get sAndBelow() {\n return this.mediaQueryListeners.sAndBelow.isMatched;\n }\n get sExact() {\n return this.mediaQueryListeners.sExact.isMatched;\n }\n get sAndAbove() {\n return this.mediaQueryListeners.sAndAbove.isMatched;\n }\n get mAndBelow() {\n return this.mediaQueryListeners.mAndBelow.isMatched;\n }\n get mExact() {\n return this.mediaQueryListeners.mExact.isMatched;\n }\n get mAndAbove() {\n return this.mediaQueryListeners.mAndAbove.isMatched;\n }\n get lAndBelow() {\n return this.mediaQueryListeners.lAndBelow.isMatched;\n }\n get lExact() {\n return this.mediaQueryListeners.lExact.isMatched;\n }\n get lAndAbove() {\n return this.mediaQueryListeners.lAndAbove.isMatched;\n }\n get xlAndBelow() {\n return this.mediaQueryListeners.xlAndBelow.isMatched;\n }\n get xlExact() {\n return this.mediaQueryListeners.xlExact.isMatched;\n }\n get xlAndAbove() {\n return this.mediaQueryListeners.xlAndAbove.isMatched;\n }\n get xxl() {\n return this.mediaQueryListeners.xxl.isMatched;\n }\n get portrait() {\n return this.mediaQueryListeners.portrait.isMatched;\n }\n get landscape() {\n return this.mediaQueryListeners.landscape.isMatched;\n }\n get lowHeight() {\n return this.mediaQueryListeners.lowHeight.isMatched;\n }\n\n get hover() {\n return this.mediaQueryListeners.hover.isMatched;\n }\n get hoverNone() {\n return this.mediaQueryListeners.hoverNone.isMatched;\n }\n\n get anyHover() {\n return this.mediaQueryListeners.anyHover.isMatched;\n }\n get anyHoverNone() {\n return this.mediaQueryListeners.anyHoverNone.isMatched;\n }\n\n get pointer() {\n return this.mediaQueryListeners.pointer.isMatched;\n }\n get pointerFine() {\n return this.mediaQueryListeners.pointerFine.isMatched;\n }\n get pointerCoarse() {\n return this.mediaQueryListeners.pointerCoarse.isMatched;\n }\n get pointerNone() {\n return this.mediaQueryListeners.pointerNone.isMatched;\n }\n\n get anyPointer() {\n return this.mediaQueryListeners.anyPointer.isMatched;\n }\n get anyPointerFine() {\n return this.mediaQueryListeners.anyPointerFine.isMatched;\n }\n get anyPointerCoarse() {\n return this.mediaQueryListeners.anyPointerCoarse.isMatched;\n }\n get anyPointerNone() {\n return this.mediaQueryListeners.anyPointerNone.isMatched;\n }\n}\n","import {IToolsService} from \"./tools.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport { v4 as uuidv4 } from 'uuid';\n\nexport class ToolsService extends ServiceBase implements IToolsService{\n getGuid(): string {\n return uuidv4();\n }\n\n isGuid(testedValue: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(testedValue);\n }\n\n getHash(value: object | string): number {\n let hash = 0;\n \n const strValue = JSON.stringify(value);\n if (strValue.length === 0)\n return hash;\n\n for (let i = 0; i < strValue.length; i++) {\n let char = strValue.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n\n return hash;\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {IUserGameOrientation, IUserGameOrientationService} from \"./user-game-orientation.service.interface\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {Check} from \"@sparkware/app-utils\";\n\nconst GAME_GROUP_COOKIE = \"GameGroup\";\n\nexport class UserGameOrientationService extends ServiceBase implements IUserGameOrientationService {\n\n @observable.ref\n public gameGroup: IUserGameOrientation = null;\n\n constructor(services: IServiceFactoryExtended){\n super(services);\n\n makeObservable(this);\n\n this._updateUserGameOrientation();\n\n this.reaction( () => this.services.user.isAuthorized,\n (isAuthorized) => isAuthorized && this._updateUserGameOrientation()\n )\n }\n\n @action.bound\n private _setUserOrientation(orientation:IUserGameOrientation) {\n this.gameGroup = orientation;\n }\n\n private async _updateUserGameOrientation(): Promise {\n const userGameOrientationEnableConfig = this.services.configuration.servicesConfigs.User.enableUserGameOrientation;\n const enabled = Check.isNullOrUndefined(userGameOrientationEnableConfig) ? false : userGameOrientationEnableConfig;\n if(!enabled) {\n return;\n }\n\n const gameGroupCookie = this.services.cookies.getCookie(GAME_GROUP_COOKIE);\n if (gameGroupCookie){\n this._setUserOrientation(JSON.parse(gameGroupCookie));\n }\n\n if(this.services.user.isAuthorized) {\n let gameOrientation: IUserGameOrientation = await this.services.api.userController.getUserGameOrientation();\n if (gameOrientation?.groupId) {\n this._setUserOrientation(gameOrientation);\n this._setGameOrientationCookie(gameOrientation);\n }\n }\n }\n\n private _setGameOrientationCookie(orientation:IUserGameOrientation){\n let expirationDate:Date = new Date();\n expirationDate.setDate(expirationDate.getDate() + 1);\n this.services.cookies.createCookie(GAME_GROUP_COOKIE,JSON.stringify(orientation), expirationDate);\n }\n}","import {IServiceFactoryExtended} from '../service-factory-extended.interface';\n\nexport class ApiControllerBase {\n constructor(private _services: IServiceFactoryExtended) {\n }\n\n protected _getRoutePrefix() {\n return '';\n }\n\n private _buildApiRoute(route: string) {\n let url = `${this._getRoutePrefix()}${route}`;\n if(url.startsWith('/')) {\n return url;\n }\n return '/' + url;\n }\n\n protected _isUSRegulation() {\n return this._services.regulation.isUSRegulation();\n }\n\n\n protected _httpPost(route: string, requestData?: unknown): Promise {\n return this._services.sdk.httpPost(this._buildApiRoute(route), requestData);\n }\n\n protected _httpGet(route: string, requestData?: unknown): Promise {\n return this._services.sdk.httpGet(this._buildApiRoute(route), requestData);\n }\n}","import {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {ApiControllerBase} from './api-controller-base';\n\nexport type BonusManagerController_GetEligiblePromotionCodesResponse = Array;\n\nexport class BonusManagerController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/bonusManager/'\n\t}\n\tgetEligiblePromotionCodes(): Promise {\n\t\treturn this._httpPost('getEligiblePromotionCodes');\n\t}\n\n}\n\nexport type FeatureToggleManagementController_SetFeatureCounterRequest = {\n\tFeatureID: number;\n};\n\nexport type FeatureToggleManagementController_GetFeaturesDataForCIDResponse = Array<{\n\tFeatureID: number;\n\tDisplayCount: number;\n}>;\n\nexport class FeatureToggleManagementController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/featureToggleManagement/'\n\t}\n\tsetFeatureCounter(request: FeatureToggleManagementController_SetFeatureCounterRequest): Promise {\n\t\treturn this._httpPost('setFeatureCounter', request);\n\t}\n\n\tgetFeaturesDataForCID(): Promise {\n\t\treturn this._httpPost('getFeaturesData');\n\t}\n\n}\n\nexport type GamblingSessionController_StartGamblingSessionRequest = {\n\tcorrelationId: string;\n\tlossLimitAmount: number;\n\tsessionDurationLimitInSeconds: number;\n\treminderIntervalInSeconds: number;\n\trestrictionPeriodInSeconds: number;\n};\n\nexport type GamblingSessionController_StartGamblingSessionResponse = {\n\tgamblingSessionId: string;\n\terrorCode: number;\n\tsessionRestrictionExpirationDate?: number;\n};\n\nexport type GamblingSessionController_CreateGamblingSessionResponse = {\n\tgamblingSessionId: string;\n\terrorCode: number;\n};\n\nexport class GamblingSessionController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/gamblingSession/'\n\t}\n\tstartGamblingSession(clientRequest: GamblingSessionController_StartGamblingSessionRequest): Promise {\n\t\treturn this._httpPost('start', clientRequest);\n\t}\n\n\tcreateGamblingSession(): Promise {\n\t\treturn this._httpPost('create');\n\t}\n\n}\n\nexport type ABTestingController_GetTestsForAnonymousPlayerRequest = {\n\tanonymousPlayerId: string;\n\tbrandId: number;\n\tsubBrandId: number;\n\tcountryCode: string;\n\tisMobile: boolean;\n};\n\nexport type ABTestingController_GetTestsForAnonymousPlayerResponse = {\n\tFeatures: Record;\n\t}>;\n\tAnonymousPlayerId: string;\n};\n\nexport class ABTestingController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/abTesting/'\n\t}\n\tgetTestsForAnonymousPlayer(request: ABTestingController_GetTestsForAnonymousPlayerRequest): Promise {\n\t\treturn this._httpPost('getTestsForAnonymousPlayer', request);\n\t}\n\n}\n\nexport type InsightController_GetLiveCasinoGameRecommendationsForPlayerRequest = {\n\tengineType: number;\n};\n\nexport type InsightController_GetLiveCasinoGameRecommendationsForPlayerResponse = {\n\tEngine: string;\n\tGameTypes: Array;\n\tErrorCode: number;\n\tErrorDescription: string;\n};\n\nexport type InsightController_GetCasinoRecommendedDynamicListsForPlayerRequest = {\n\tlistsIDs: Array;\n};\n\nexport type InsightController_GetCasinoRecommendedDynamicListsForPlayerResponse = Record;\n\nexport class InsightController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/insight/'\n\t}\n\tgetLiveCasinoGameRecommendationsForPlayer(request: InsightController_GetLiveCasinoGameRecommendationsForPlayerRequest): Promise {\n\t\treturn this._httpPost('getLiveCasinoGameRecommendationsForPlayer', request);\n\t}\n\n\tgetCasinoRecommendedDynamicListsForPlayer(req: InsightController_GetCasinoRecommendedDynamicListsForPlayerRequest): Promise {\n\t\treturn this._httpPost('getCasinoRecommendedDynamicLists', req);\n\t}\n\n}\n\nexport type LocationController_DetectUserIpRequest = {\n\tPreviousIpAddress?: string;\n\tPreviousIpAddresses: Array;\n};\n\nexport type LocationController_DetectUserIpResponse = {\n\tCurrentIpAddress: string;\n};\n\nexport type LocationController_DetectUserIpV2Request = {\n\tPreviousIpAddresses: string;\n};\n\nexport type LocationController_DetectUserIpV2Response = {\n\tEncryptedIpAddress: string;\n\tChangeDetected: boolean;\n\tPreviousIP: string;\n\tCurrentIP: string;\n};\n\nexport class LocationController extends ApiControllerBase {\n\tgetCountryByIP(): Promise {\n\t\treturn this._httpPost('cgpapi/location/GetCountryByIP');\n\t}\n\n\tgetCountryByIPOld(): Promise {\n\t\treturn this._httpPost('api/GetCountryByIP');\n\t}\n\n\tdetectUserIp(request: LocationController_DetectUserIpRequest): Promise {\n\t\treturn this._httpPost('cgpapi/location/ipDetection', request);\n\t}\n\n\tdetectUserIpV2(request: LocationController_DetectUserIpV2Request): Promise {\n\t\treturn this._httpPost('cgpapi/location/v2/ipDetection', request);\n\t}\n\n}\n\nexport type NetPositionController_InitializeNetPositionForGameTypeRequest = {\n\tGameType: number;\n};\n\nexport type NetPositionController_InitializeNetPositionForGameTypeResponse = {\n\tcode: number;\n\tmessage: string;\n\tresponse_time: number;\n\tErrorCode: number;\n\tErrorDescription: string;\n};\n\nexport class NetPositionController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/netPosition/'\n\t}\n\tinitializeNetPositionForGameType(request: NetPositionController_InitializeNetPositionForGameTypeRequest): Promise {\n\t\treturn this._httpPost('initialize', request);\n\t}\n\n}\n\nexport type OMGController_GetAwaitingMessagesResponse = {\n\tMessagesDetails: string;\n\tMessagesJSON: any;\n};\n\nexport class OMGController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/omg/'\n\t}\n\tgetAwaitingMessages(): Promise {\n\t\treturn this._httpPost('GetAwaitingMessages');\n\t}\n\n}\n\nexport type OpenSessionsController_GetOpenSessionsRequest = {\n\trealGameTypes?: Array;\n\tfreePlayGameTypes?: Array;\n\topenSessionsKind: number;\n};\n\nexport type OpenSessionsController_GetOpenSessionsResponse = {\n\tsessionDetails: Array<{\n\t\tCredit: number;\n\t\tGameTypeID: number;\n\t\tSessionID: string;\n\t\tFreePlayID?: string;\n\t\tTotalBets?: number;\n\t\tTotalWins?: number;\n\t\tUpdatedGameSessionLimit?: number;\n\t\tIntervalReminderInMinutes?: number;\n\t\tRequestedTimeLimitInMinutes?: number;\n\t\tGameStartDate?: string;\n\t\tRestrictionPeriodInMinutes?: number;\n\t\tRegulationAdditionalData: any;\n\t}>;\n};\n\nexport class OpenSessionsController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/openSessions/'\n\t}\n\tgetOpenSessions(request: OpenSessionsController_GetOpenSessionsRequest): Promise {\n\t\treturn this._httpPost('getOpenSessions', request);\n\t}\n\n}\n\nexport type RestrictionRulerController_GetRestrictionActionsRequest = {\n\tRequestedAction: string;\n};\n\nexport type RestrictionRulerController_GetRestrictionActionsResponse = {\n\tactions: Array<{\n\t\ttype: string;\n\t\tactionData: any;\n\t\torderId: number;\n\t}>;\n\tErrorCode: number;\n\tErrorDescription: string;\n};\n\nexport type RestrictionRulerController_NotifyRestrictionActionPerformedRequest = {\n\trestrictionRuleActionType: string;\n\tactionData: string;\n};\n\nexport class RestrictionRulerController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/restrictionRuler/'\n\t}\n\tgetRestrictionActions(request: RestrictionRulerController_GetRestrictionActionsRequest): Promise {\n\t\treturn this._httpPost('getRestrictionActions', request);\n\t}\n\n\tnotifyRestrictionActionPerformed(clientRequest: RestrictionRulerController_NotifyRestrictionActionPerformedRequest): Promise {\n\t\treturn this._httpPost('notifyRestrictionActionPerformed', clientRequest);\n\t}\n\n}\n\nexport type ThirdPartyFreePlayController_GetAllVouchersResponse = {\n\tFreePlayBonusList: Array<{\n\t\tCompanyID: number;\n\t\tCurrencyCode: string;\n\t\tCurrentWinningAmount: number;\n\t\tCreationDate?: string;\n\t\tExpirationDate: string;\n\t\tFreePlayID: string;\n\t\tFreePlayTypeID: number;\n\t\tGameTypesIDs: Array;\n\t\tAwardedFreePlayAmount: number;\n\t\tBonusStatus: number;\n\t\tFreeSpinsInfo?: {\n\t\t\tBetPerSpin: number;\n\t\t\tNumberOfAwardedFreeSpins: number;\n\t\t\tNumberOfFreeSpinsLeft: number;\n\t\t};\n\t\tVoucherInfo?: {\n\t\t\tRemainingFreePlayAmount: number;\n\t\t};\n\t\tNumberOfAwardedFreeSpins: number;\n\t\tNumberOfFreeSpinsLeft: number;\n\t\tBetPerSpin: number;\n\t}>;\n};\n\nexport class ThirdPartyFreePlayController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/freeplay/3rdparty/'\n\t}\n\tgetAllVouchers(): Promise {\n\t\treturn this._httpPost('GetAllVouchers');\n\t}\n\n}\n\nexport type UserEligibilityController_DepositWidgetEligibilityRequest = {\n\tLoginCountry: string;\n\tStateID?: number;\n};\n\nexport type UserEligibilityController_DepositWidgetEligibilityResponse = {\n\tisEligible: boolean;\n\tineligibleReason: string;\n\terrorID: number;\n\terrorDescription: string;\n\thasErrors: boolean;\n};\n\nexport type UserEligibilityController_CashoutWidgetEligibilityRequest = {\n\tLoginCountry: string;\n\tStateID?: number;\n};\n\nexport type UserEligibilityController_CashoutWidgetEligibilityResponse = {\n\tisEligible: boolean;\n\tineligibleReason: string;\n\terrorID: number;\n\terrorDescription: string;\n\thasErrors: boolean;\n};\n\nexport type UserEligibilityController_TransactionHistoryWidgetEligibilityRequest = {\n\tLoginCountry: string;\n\tStateID?: number;\n};\n\nexport type UserEligibilityController_TransactionHistoryWidgetEligibilityResponse = {\n\tisEligible: boolean;\n\tineligibleReason: string;\n\terrorID: number;\n\terrorDescription: string;\n\thasErrors: boolean;\n};\n\nexport class UserEligibilityController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/userEligibility/'\n\t}\n\tdepositWidgetEligibility(request: UserEligibilityController_DepositWidgetEligibilityRequest): Promise {\n\t\treturn this._httpPost('depositWidget', request);\n\t}\n\n\tcashoutWidgetEligibility(request: UserEligibilityController_CashoutWidgetEligibilityRequest): Promise {\n\t\treturn this._httpPost('cashoutWidget', request);\n\t}\n\n\ttransactionHistoryWidgetEligibility(request: UserEligibilityController_TransactionHistoryWidgetEligibilityRequest): Promise {\n\t\treturn this._httpPost('transactionHistoryWidget', request);\n\t}\n\n}\n\nexport type GameController_GetGameTokenRequest = {\n\tgameTypeId: number;\n\tregulationId: number;\n\tisMobile: boolean;\n\tisHybridEmbedded: boolean;\n\tcurrentRoute: string;\n\tcurrencyCode: string;\n\tlanguageCode: string;\n\trefreshToken: string;\n\tproductPackage: number;\n\tGrsData?: string;\n\tWrapperState?: string;\n\tisSupportHTML5?: boolean;\n\tisSupportFlash?: boolean;\n\tGameState?: string;\n\tAdditionalState?: string;\n\tPreloaderState?: string;\n\tGameTechnology?: string;\n\tGrsEnvironment?: string;\n\trealityCheckIntervalInMinutes?: number;\n\tsessionTimerInSeconds?: number;\n\tgameRoundId?: string;\n\tgameRoundDate?: string;\n\treconnectionGameSessionId?: string;\n\trequestedGameLimitAmount?: number;\n\trequestedTimeLimitInMinutes?: number;\n\trestrictionPeriodInMinutes?: number;\n\tintervalReminderInMinutes?: number;\n\tFakeClientIP?: string;\n\tuseEvolutionNewIntegration?: boolean;\n\tuseAdapter?: boolean;\n\tvendorEnvironment?: string;\n\tisFreePlay?: boolean;\n\tusePariplayAdapterIntegration?: boolean;\n\tusePlayNGoNewAdapterIntegration?: boolean;\n};\n\nexport type GameController_GetGameTokenResponse = {\n\tToken: string;\n\tUserHasPendingActions: boolean;\n\tRestrictions: Array<{\n\t\tExtensionData: {\n\t\t};\n\t\tActionId: number;\n\t\tRestrictedEntities: Array<{\n\t\t\tExtensionData: {\n\t\t\t};\n\t\t\tEntityTypeId: number;\n\t\t\tReasonId: number;\n\t\t\tRestrictedValues: Array;\n\t\t\tSecondsToExpire: number;\n\t\t}>;\n\t}>;\n\tNightLimitExpirationDate?: string;\n\tLugasActiveOnAnotherOperator: boolean;\n\tLugasCooldown: boolean;\n};\n\nexport type GameController_OpenRealGameRequest = {\n\tgameTypeId: number;\n\tregulationId: number;\n\tisMobile: boolean;\n\tisHybridEmbedded: boolean;\n\tcurrentRoute: string;\n\tcurrencyCode: string;\n\tlanguageCode: string;\n\trefreshToken: string;\n\tproductPackage: number;\n\tGrsData?: string;\n\tWrapperState?: string;\n\tisSupportHTML5?: boolean;\n\tisSupportFlash?: boolean;\n\tGameState?: string;\n\tAdditionalState?: string;\n\tPreloaderState?: string;\n\tGameTechnology?: string;\n\tGrsEnvironment?: string;\n\trealityCheckIntervalInMinutes?: number;\n\tsessionTimerInSeconds?: number;\n\tgameRoundId?: string;\n\tgameRoundDate?: string;\n\treconnectionGameSessionId?: string;\n\trequestedGameLimitAmount?: number;\n\trequestedTimeLimitInMinutes?: number;\n\trestrictionPeriodInMinutes?: number;\n\tintervalReminderInMinutes?: number;\n\tFakeClientIP?: string;\n\tuseEvolutionNewIntegration?: boolean;\n\tuseAdapter?: boolean;\n\tvendorEnvironment?: string;\n\tisFreePlay?: boolean;\n\tusePariplayAdapterIntegration?: boolean;\n\tusePlayNGoNewAdapterIntegration?: boolean;\n};\n\nexport type GameController_OpenAnonymousGameRequest = {\n\tgameTypeId: number;\n\tregulationId: number;\n\tisMobile: boolean;\n\tisHybridEmbedded: boolean;\n\tcurrentRoute: string;\n\tcurrencyCode: string;\n\tlanguageCode: string;\n\trefreshToken: string;\n\tproductPackage: number;\n\tGrsData?: string;\n\tWrapperState?: string;\n\tisSupportHTML5?: boolean;\n\tisSupportFlash?: boolean;\n\tGameState?: string;\n\tAdditionalState?: string;\n\tPreloaderState?: string;\n\tGameTechnology?: string;\n\tGrsEnvironment?: string;\n\trealityCheckIntervalInMinutes?: number;\n\tsessionTimerInSeconds?: number;\n\tgameRoundId?: string;\n\tgameRoundDate?: string;\n\treconnectionGameSessionId?: string;\n\trequestedGameLimitAmount?: number;\n\trequestedTimeLimitInMinutes?: number;\n\trestrictionPeriodInMinutes?: number;\n\tintervalReminderInMinutes?: number;\n\tFakeClientIP?: string;\n\tuseEvolutionNewIntegration?: boolean;\n\tuseAdapter?: boolean;\n\tvendorEnvironment?: string;\n\tisFreePlay?: boolean;\n\tusePariplayAdapterIntegration?: boolean;\n\tusePlayNGoNewAdapterIntegration?: boolean;\n};\n\nexport type GameController_OpenGameHistoryRequest = {\n\tgameTypeId: number;\n\tregulationId: number;\n\tisMobile: boolean;\n\tisHybridEmbedded: boolean;\n\tcurrentRoute: string;\n\tcurrencyCode: string;\n\tlanguageCode: string;\n\trefreshToken: string;\n\tproductPackage: number;\n\tGrsData?: string;\n\tWrapperState?: string;\n\tisSupportHTML5?: boolean;\n\tisSupportFlash?: boolean;\n\tGameState?: string;\n\tAdditionalState?: string;\n\tPreloaderState?: string;\n\tGameTechnology?: string;\n\tGrsEnvironment?: string;\n\trealityCheckIntervalInMinutes?: number;\n\tsessionTimerInSeconds?: number;\n\tgameRoundId?: string;\n\tgameRoundDate?: string;\n\treconnectionGameSessionId?: string;\n\trequestedGameLimitAmount?: number;\n\trequestedTimeLimitInMinutes?: number;\n\trestrictionPeriodInMinutes?: number;\n\tintervalReminderInMinutes?: number;\n\tFakeClientIP?: string;\n\tuseEvolutionNewIntegration?: boolean;\n\tuseAdapter?: boolean;\n\tvendorEnvironment?: string;\n\tisFreePlay?: boolean;\n\tusePariplayAdapterIntegration?: boolean;\n\tusePlayNGoNewAdapterIntegration?: boolean;\n};\n\nexport type GameController_GetGameSessionDataRequest = {\n\tgameTypeId: number;\n\tuseFreePlayUtilities?: boolean;\n};\n\nexport type GameController_GetGameSessionDataResponse = {\n\tLimitPercentageReminder: boolean;\n\tOriginalGameLimit: number;\n\tRequestedTimeLimit: number;\n\tSessionStartDate: string;\n\tTotalBets: number;\n\tTotalWins: number;\n\tUpdatedGameSessionLimit: number;\n\tRegulationData: any;\n\tPlayerBalance: number;\n};\n\nexport class GameController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/game/'\n\t}\n\tgetGameToken(openGameParams: GameController_GetGameTokenRequest): Promise {\n\t\treturn this._httpPost('GetGameToken', openGameParams);\n\t}\n\n\topenRealGame(openGameParams: GameController_OpenRealGameRequest): Promise {\n\t\treturn this._httpPost('OpenRealGame', openGameParams);\n\t}\n\n\topenAnonymousGame(openGameParams: GameController_OpenAnonymousGameRequest): Promise {\n\t\treturn this._httpPost('OpenAnonymousGame', openGameParams);\n\t}\n\n\topenGameHistory(openGameParams: GameController_OpenGameHistoryRequest): Promise {\n\t\treturn this._httpPost('OpenGameHistory', openGameParams);\n\t}\n\n\tgetGameSessionData(request: GameController_GetGameSessionDataRequest): Promise {\n\t\treturn this._httpPost('GetGameSessionData', request);\n\t}\n\n}\n\nexport type HistoryController_GetHistoryRequest = {\n\tpageNumber: number;\n\tpageSize?: number;\n\tfromLastDays: number;\n\trequestKey?: string;\n\tminDate?: string;\n\tmaxDate?: string;\n};\n\nexport type HistoryController_GetHistoryResponse = {\n\tGameHistoryData: Array<{\n\t\tAdditionalData: any;\n\t\tAmountCurrencyISOCode: string;\n\t\tAvailableMoneyPerOffering: number;\n\t\tAllowedPlatformType: string;\n\t\tBetAmount: number;\n\t\tDate: string;\n\t\tTimeSincePlay: string;\n\t\tDateInTimeZone?: string;\n\t\tFreePlayCurrentAmount?: number;\n\t\tFreePlayWinningAmount?: number;\n\t\tGameId: string;\n\t\tGameTypeId: number;\n\t\tOriginalWinningsAmount?: number;\n\t\tProductPackageID: number;\n\t\tProfitAmount: number;\n\t\tSubBrandId?: number;\n\t\tVatBetFee: number;\n\t\tVendorName: string;\n\t\tVendorId: number;\n\t\tFreePlayReachedMaxWinCap?: boolean;\n\t\tCompanyName: string;\n\t\tGameGroupId: number;\n\t\tIsSupportDetailedHistory: boolean;\n\t\tIsBigWin: boolean;\n\t}>;\n\tPagingData: Array<{\n\t\tRequestKey: string;\n\t\tPageNumber: number;\n\t\tMinDate: string;\n\t\tMaxDate: string;\n\t}>;\n};\n\nexport type HistoryController_GetMigratedHistoryRequest = {\n\tlimit?: number;\n\toffset: number;\n\tfromLastDays: number;\n};\n\nexport type HistoryController_GetMigratedHistoryResponse = {\n\tGameHistoryData: Array<{\n\t\tCurrency: string;\n\t\tAvailableMoneyPerOffering: number;\n\t\tAllowedPlatformType: string;\n\t\tBetAmount: number;\n\t\tDate: string;\n\t\tTimeSincePlay: string;\n\t\tGameId: string;\n\t\tGameTypeId: string;\n\t\tGameName: string;\n\t\tProductPackageID: number;\n\t\tProfitAmount: number;\n\t\tSubBrandId?: number;\n\t\tGameGroupId: number;\n\t}>;\n\tPagingData: {\n\t\tPageNumber: number;\n\t\tPageSize: number;\n\t};\n};\n\nexport type HistoryController_GetTippingHistoryRequest = {\n\tfromLastDays: number;\n\tminDate?: string;\n\tmaxDate?: string;\n};\n\nexport type HistoryController_GetTippingHistoryResponse = {\n\tTipHistory: Array<{\n\t\tGameTypeID: number;\n\t\tTipID: number;\n\t\tTipDateTime: string;\n\t\tTipAmount: number;\n\t\tAvailableBalanceAfterAction: number;\n\t\tCurrencyCode: string;\n\t}>;\n\tMinDate: string;\n\tMaxDate: string;\n};\n\nexport type HistoryController_GetGameSessionHistoryRequest = {\n\tpageNumber: number;\n\tpageSize?: number;\n\tfromLastDays: number;\n\trequestKey?: string;\n\tminDate?: string;\n\tmaxDate?: string;\n};\n\nexport type HistoryController_GetGameSessionHistoryResponse = {\n\tGameHistoryData: Array<{\n\t\tCurrencyCodeISO3: string;\n\t\tGameGroupId?: number;\n\t\tGameSessionId: string;\n\t\tGameTypeId?: number;\n\t\tSessionEndDateTime: string;\n\t\tSessionBalance: number;\n\t\tTotalBets: number;\n\t\tTotalWins: number;\n\t\tVendorName: string;\n\t\tVendorId: number;\n\t\tCompanyName: string;\n\t}>;\n\tPagingData: Array<{\n\t\tRequestKey: string;\n\t\tPageNumber: number;\n\t\tMinDate: string;\n\t\tMaxDate: string;\n\t}>;\n};\n\nexport class HistoryController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/history/'\n\t}\n\tgetHistory(req: HistoryController_GetHistoryRequest): Promise {\n\t\treturn this._httpPost('getGammingHistory', req);\n\t}\n\n\tgetMigratedHistory(req: HistoryController_GetMigratedHistoryRequest): Promise {\n\t\treturn this._httpPost('getMigratedGammingHistory', req);\n\t}\n\n\tgetTippingHistory(req: HistoryController_GetTippingHistoryRequest): Promise {\n\t\treturn this._httpPost('getTippingHistory', req);\n\t}\n\n\tgetGameSessionHistory(req: HistoryController_GetGameSessionHistoryRequest): Promise {\n\t\treturn this._httpPost('getSessionHistory', req);\n\t}\n\n}\n\nexport type UserController_GetRealityCheckDataResponse = {\n\tWagerAmount?: number;\n\tTotalNetLoss?: number;\n\tErrorDescription: string;\n};\n\nexport type UserController_UpdateRealityCheckReminderRequest = {\n\trealityCheckIntevalMin: number;\n};\n\nexport type UserController_ValidateGeoLocationRequest = {\n\tgeoLocationEncryptedResponse: string;\n\tisPeriodicFlow: boolean;\n\terrorCode?: string;\n\terrorMsg?: string;\n\tfailedLocationReason?: number;\n};\n\nexport type UserController_ValidateGeoLocationResponse = {\n\tNextIntervalInSeconds?: number;\n};\n\nexport type UserController_InitGeoRetryResponse = {\n\tGeoComplyLicense: string;\n\tGeoComplyWebLicense: string;\n\tLocationTransactionToken: string;\n\tExtensionData: {\n\t};\n\tErrorCode: number;\n\tErrorDescription: string;\n};\n\nexport type UserController_GetUserGameOrientationResponse = {\n\tgroupId?: number;\n\tgroupName: string;\n};\n\nexport type UserController_SelfExclusionPanicRequest = {\n\ttimezoneOffset: number;\n\tproductPackage: number;\n};\n\nexport type UserController_SelfExclusionPanicResponse = {\n\terrorID: number;\n\terrorDescription: string;\n\thasErrors: boolean;\n};\n\nexport type UserController_GetPlayerLimitsResponse = {\n\tdisplayableLimits: Array<{\n\t\tlimitName: string;\n\t\tlimitPeriods: Array<{\n\t\t\tvalue: number;\n\t\t\ttypeId: number;\n\t\t\tunit: string;\n\t\t\tcurrency: string;\n\t\t}>;\n\t}>;\n\tErrorCode: number;\n\tErrorDescription: string;\n};\n\nexport type UserController_GetPendingActionsRequest = {\n\tpackageId?: number;\n\teventTypeId?: number;\n\tplayModeId?: number;\n};\n\nexport type UserController_GetPendingActionsResponse = {\n\tPendingActions: Array<{\n\t\tId: number;\n\t\tPlayModeId: number;\n\t\tPriority?: number;\n\t\tReasonId: number;\n\t\tEventTypeId: number;\n\t\tEventTypeName: string;\n\t}>;\n};\n\nexport type UserController_GetLastBetActivityRequest = {\n\tcorrelationId: string;\n};\n\nexport type UserController_GetLastBetActivityResponse = {\n\tLastBetActivity?: number;\n};\n\nexport class UserController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/user/'\n\t}\n\tgetRealityCheckData(): Promise {\n\t\treturn this._httpPost('realityCheckData');\n\t}\n\n\tupdateRealityCheckReminder(request: UserController_UpdateRealityCheckReminderRequest): Promise {\n\t\treturn this._httpPost('updateRealityCheckData', request);\n\t}\n\n\tvalidateGeoLocation(request: UserController_ValidateGeoLocationRequest): Promise {\n\t\treturn this._httpPost('validateGeoLocation', request);\n\t}\n\n\tinitGeoRetry(): Promise {\n\t\treturn this._httpPost('initGeoRetry');\n\t}\n\n\tgetUserGameOrientation(): Promise {\n\t\treturn this._httpPost('getUserGameOrientation');\n\t}\n\n\tselfExclusionPanic(request: UserController_SelfExclusionPanicRequest): Promise {\n\t\treturn this._httpPost('selfExclusionPanic', request);\n\t}\n\n\tgetPlayerLimits(): Promise {\n\t\treturn this._httpPost('getPlayerLimits');\n\t}\n\n\tgetPendingActions(request: UserController_GetPendingActionsRequest): Promise {\n\t\treturn this._httpPost('getPendingActions', request);\n\t}\n\n\tgetLastBetActivity(request: UserController_GetLastBetActivityRequest): Promise {\n\t\treturn this._httpPost('getLastBetActivity', request);\n\t}\n\n}\n\nexport class ApiService extends ServiceBase {\n\tconstructor(services: IServiceFactoryExtended) {\n\t\tsuper(services);\n\t\tthis.bonusManagerController = new BonusManagerController(services);\n\t\tthis.featureToggleManagementController = new FeatureToggleManagementController(services);\n\t\tthis.gamblingSessionController = new GamblingSessionController(services);\n\t\tthis.aBTestingController = new ABTestingController(services);\n\t\tthis.insightController = new InsightController(services);\n\t\tthis.locationController = new LocationController(services);\n\t\tthis.netPositionController = new NetPositionController(services);\n\t\tthis.oMGController = new OMGController(services);\n\t\tthis.openSessionsController = new OpenSessionsController(services);\n\t\tthis.restrictionRulerController = new RestrictionRulerController(services);\n\t\tthis.thirdPartyFreePlayController = new ThirdPartyFreePlayController(services);\n\t\tthis.userEligibilityController = new UserEligibilityController(services);\n\t\tthis.gameController = new GameController(services);\n\t\tthis.historyController = new HistoryController(services);\n\t\tthis.userController = new UserController(services);\n\t}\n\treadonly bonusManagerController: BonusManagerController;\n\treadonly featureToggleManagementController: FeatureToggleManagementController;\n\treadonly gamblingSessionController: GamblingSessionController;\n\treadonly aBTestingController: ABTestingController;\n\treadonly insightController: InsightController;\n\treadonly locationController: LocationController;\n\treadonly netPositionController: NetPositionController;\n\treadonly oMGController: OMGController;\n\treadonly openSessionsController: OpenSessionsController;\n\treadonly restrictionRulerController: RestrictionRulerController;\n\treadonly thirdPartyFreePlayController: ThirdPartyFreePlayController;\n\treadonly userEligibilityController: UserEligibilityController;\n\treadonly gameController: GameController;\n\treadonly historyController: HistoryController;\n\treadonly userController: UserController;\n}\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\n\nconst TsrWithDropdownDefaultBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n font-size: 1.25rem;\n ${({theme}) => theme.font.presets.body};\n color: ${({theme}) => theme.colors.textMiddleDark};\n\n`;\n\nconst PcBox = styled(TsrWithDropdownDefaultBox)`\n width: 25vw;\n`;\n\nconst MobileBox = styled(TsrWithDropdownDefaultBox)`\n width: 82vw;\n @media ${({theme}) => `${theme.mediaQuery.landscape}`} {\n width: 56vw;\n }\n`;\n\nexport const TsrWithDropdownBox = styledByDevice(PcBox, MobileBox);","import styled from \"styled-components\";\n\nexport const TsrWithDropdownOptionSelectorBox = styled.div`\n max-width: 289px;\n margin: 0.5rem auto 0;\n\n @media ${({theme}) => `${theme.mediaQuery.lAndBelow} and ${theme.mediaQuery.landscape}`} {\n margin-bottom: 2rem;\n }\n`;","import styled from \"styled-components\";\nimport {DialogTextBox, dialogHighlightedTextMixin} from \"../../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const TsrWithDropdownMainTextDefaultBox = styled(DialogTextBox)`\n display: flex;\n\n > span:nth-of-type(2) {\n ${dialogHighlightedTextMixin}\n margin-left: 5px;\n }\n\n @media ${({theme}) => `${theme.mediaQuery.lAndBelow} and ${theme.mediaQuery.portrait}`} {\n flex-direction: column;\n\n > span:nth-of-type(2) {\n margin: 1rem 0 0 0;\n }\n }\n`;\n","import styled from \"styled-components\";\nimport {TsrWithDropdownMainTextDefaultBox} from \"./tsr-with-dropdown-main-text.default.box\";\n\nexport const TsrWithDropdownMainTextCasino777Box = styled(TsrWithDropdownMainTextDefaultBox)`\n > span:nth-of-type(2) {\n color: ${props => props.theme.colors.brandPrimary};\n }\n`","import {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {TsrWithDropdownMainTextDefaultBox} from \"./tsr-with-dropdown-main-text.default.box\";\nimport {TsrWithDropdownMainTextCasino777Box} from \"./tsr-with-dropdown-main-text.casino777.box\";\n\nexport const TsrWithDropdownMainTextBox = styledByTheme(TsrWithDropdownMainTextDefaultBox).forCasino777(TsrWithDropdownMainTextCasino777Box).apply();\n","import styled from \"styled-components\";\n\nexport const TsrWithDropdownSelectorContainerBox = styled.div`\n margin-top: 1.5rem;\n width: 100%;\n`;","import React from \"react\";\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {GeoModalWrapperBox} from '../boxes/geo-modal-wrapper.box';\nimport {IModalDialogHandler} from '../../../services/dialog/dialog.service.interface';\nimport {CyClass} from '../../../../common/cy-classes';\nimport { ModalDialogActionsComponent } from \"../../modal-dialog/modal-dialog-actions.component\";\nimport { DialogTextBox, DialogHighlightedTextBox } from \"../../modal-dialog/boxes/text/dialog-text.box\";\n\ninterface IGeoPermissionsPopupComponentProps {\n onOkPressed: () => any;\n dialogHandler: IModalDialogHandler;\n headerText1?: string;\n headerText2?: string;\n}\n\nexport class GeoPermissionsPopupComponent extends OrbitComponent {\n\n private _onOkPressed = () => {\n this.services.analytics.sendOrbitUserFlowEvent('Client_Message', 'GeoPermissionsPopupComponent', 'APPROVE');\n this.props.onOkPressed();\n this._closeDialogBox();\n };\n\n private _closeDialogBox = () => {\n this.props.dialogHandler && this.props.dialogHandler.close();\n };\n\n render() {\n\n const {headerText1,headerText2} = this.props;\n\n return (\n \n {headerText1 && {headerText1}}\n {headerText2 && {headerText2}}\n \n \n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const TsrWithBalanceBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n font-size: 1.5rem;\n ${({theme}) => theme.font.presets.body};\n\n p:nth-child(odd) {\n color: ${({theme}) => theme.colors.brandSecondary}\n }\n\n svg {\n margin: 1rem 0;\n }\n\n width: 25vw;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 82vw;\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow + \" and \" + theme.mediaQuery.landscape} {\n width: 56vw;\n }\n`;\n","import {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {\n ITimeSpentReminderWithBalanceComponentProps\n} from \"../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/time-spent-reminder-options\";\nimport {TimeSpentReminderComponentBaseProps} from \"../with-dropdown/time-spent-reminder-with-dropdown.component\";\nimport React, {ReactNode} from \"react\";\nimport {TsrWithBalanceBox} from \"./boxes/tsr-with-balance.box\";\nimport { DialogTextBox, DialogHighlightedTextBox } from \"../../modal-dialog/boxes/text/dialog-text.box\";\nimport { ModalDialogActionsComponent } from \"../../modal-dialog/modal-dialog-actions.component\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {observer} from \"mobx-react\";\n\nexport type TimeSpentReminderWithBalanceProps = ITimeSpentReminderWithBalanceComponentProps & TimeSpentReminderComponentBaseProps;\n\n\n@observer\nexport class TimeSpentReminderWithBalanceComponent extends OrbitComponent {\n\n private _executeContinueButtonAction = async () => {\n\n this.props.dialogHandler.close();\n\n const gameRunner = await this.services.gameRunner\n let analyticsAction = 'continue_in_lobby';\n\n if(gameRunner.currentRunningGame) {\n analyticsAction = 'continue_in_game';\n await gameRunner.currentRunningGame.gameCommunicationChannel.resumeGamePlay();\n }\n\n\n this.services.analytics.sendAnalytics('reality_check_message', analyticsAction);\n };\n\n private _executeCloseGameButtonAction = async () => {\n this.services.analytics.sendAnalytics('reality_check_message', 'close_game');\n\n await (await this.services.gameRunner).closeCurrentGame({\n shouldSuggestNextGame: false\n });\n\n\n this.props.dialogHandler.close();\n };\n\n private _getFormattedSessionBalance = (): string => {\n let balanceAbsoluteValue = Math.abs(this.props.totalNetLoss);\n return this.services.currency.formatMoney(balanceAbsoluteValue, true);\n };\n\n private _getFormattedPlayingTime = (): string => {\n const playingTimeWithoutUnits = this.props.playingTime.toHoursAndMinutesString();\n //Temporary hack to also display 'h' and 'm', should probably modify TimeSpan class to support this\n return `${playingTimeWithoutUnits.substring(0, 2)}h${playingTimeWithoutUnits.substring(2)}m`;\n };\n\n private _getSessionBalanceText = (): string => {\n const translationKey = this.props.totalNetLoss < 0 ? \"TSR_WINNINGS_TEXT\" : \"TSR_LOSSES_TEXT\";\n return this.services.translation.translate(translationKey);\n };\n\n private _renderWageredAmount = (): ReactNode => {\n if (Check.isNullOrUndefined(this.props.amountWagered)) {\n return null;\n }\n\n return (\n <>\n {this.services.translation.translate(\"TSR_WAGERED_AMOUNT\")}\n \n {this.services.currency.formatMoney(this.props.amountWagered, true)}\n \n \n );\n }\n\n private _renderSubtitle = (): ReactNode => {\n if (Check.isNullOrUndefined(this.props.subtitle)) {\n return null;\n }\n\n return (\n \n {this.services.translation.translate(this.props.subtitle)}\n \n )\n }\n\n private _renderTotalSessionBalance = (): ReactNode => {\n return (\n <>\n \n {this._getSessionBalanceText()}\n \n \n {this._getFormattedSessionBalance()}\n \n \n );\n }\n\n render() {\n return (\n \n {this._renderSubtitle()}\n {this.services.translation.translate(\"TSR_SESSION_TIME_TEXT\")}\n {this._getFormattedPlayingTime()}\n {this._renderTotalSessionBalance()}\n {this._renderWageredAmount()}\n \n \n );\n }\n}\n\n","import styled from 'styled-components';\n\nexport const IdleRecommendationToasterBox = styled.div`\n padding-left: 15px;\n`;","import styled from 'styled-components';\nimport { CssRule } from '../../../themes/architecture/css-helpers/css-rule';\n\nexport const IdleRecommendationHeaderBox = styled.div`\n padding-bottom: 10px;\n letter-spacing: 0.8px;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n ${CssRule.For.iPhoneVer5.build()} {\n font-size: 1rem;\n }\n }\n`;","import styled from 'styled-components';\n\nexport const IdleRecommendationHeaderTitleWrapperBox = styled.div`\n ${({theme}) => theme.font.presets.body};\n text-align: center;\n`;\n","import styled from 'styled-components';\n\nexport const IdleRecommendationGameDetailsBox = styled.div`\n letter-spacing: 0.5px;\n`;\n","import styled from 'styled-components';\nimport {styledByTheme} from '../../../themes/architecture/styled-by-theme';\n\nconst IdleRecommendationToasterBackgroundDefaultBox = styled.div`\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 78%;\n z-index: -1;\n background-image: url(${({theme}) => '\"' + theme.images.idleRecommendationToasterBg + '\"'});\n &::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: radial-gradient(rgba(2,0,36,0) 30%, rgb(35, 35, 35) 75%);\n // background: radial-gradient(circle, rgba(0,0,0,0) 30%, rgb(35, 35, 35) 100%);\n }\n`;\n\nconst IdleRecommendationToasterBackgroundMrGreenBox = styled(IdleRecommendationToasterBackgroundDefaultBox)`\n background-image: none;\n &::before {\n background: radial-gradient(rgba(2,0,36,0) 30%, rgb(255, 255, 255) 75%);\n }\n`\n\nexport const IdleRecommendationToasterBackgroundBox = styledByTheme(IdleRecommendationToasterBackgroundDefaultBox)\n .forMrGreen(IdleRecommendationToasterBackgroundMrGreenBox)\n .apply();","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const StandardToastTitleBox = styledBox('StandardToastTitleBox');\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const StandardToastMessageBox = styledBox('StandardToastMessageBox');\n","import { OrbitComponent } from '../base-components/orbit-component/orbit-component';\nimport { GameItemComponent } from '../game-item/game-item.component';\nimport { IdleRecommendationsComponentProps } from '../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/idle-recommendations.component-props';\nimport { IdleRecommendationToasterBox } from './boxes/idle-recommendation-toaster.box';\nimport { IdleRecommendationHeaderBox } from './boxes/idle-recommendation-header.box';\nimport { IdleRecommendationHeaderTitleWrapperBox } from './boxes/idle-recommendation-header-title-wrapper.box';\nimport { IdleRecommendationGameDetailsBox } from './boxes/idle-recommendation-game-details.box';\nimport { IdleRecommendationToasterBackgroundBox } from './boxes/idle-recommendation-toaster-background.box';\nimport { StandardToastTitleBox } from '../toaster/toasts-content/boxes/standard-toast-title/standard-toast-title.box';\nimport { StandardToastMessageBox } from '../toaster/toasts-content/boxes/standard-toast-message/standard-toast-message.box';\n\nexport class IdleRecommendationComponent extends OrbitComponent {\n render() {\n return \n \n \n {this.services.translation.translate('IDLE_RECOMMENDATIONS_TITLE')}\n {this.services.translation.translate('IDLE_RECOMMENDATIONS_SECOND_TITLE')}\n \n \n \n \n\n \n \n ;\n }\n}\n","import styled from \"styled-components\";\n\nexport const TempAccountPopupBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n ${({theme}) => theme.font.presets.body};\n\n svg {\n margin: 1rem 0;\n }\n \n padding: 0 2rem;\n\n width: 35vw;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: auto;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const TempAccountDaysLeftNumberBox = styled.span`\n font-weight: 900;\n`;","import styled from \"styled-components\";\n\nexport const TempAccountDaysLeftTextBox = styled.div`\n color: ${props => props.theme.colors.brandPrimary};\n text-align: center;\n font-weight: 600;\n font-size: 2.5rem;\n`;","import {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {\n ITempAccountPopupProps\n} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/temp-account-popup-params\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {DialogTextBox} from \"../modal-dialog/boxes/text/dialog-text.box\";\nimport {TempAccountPopupBox} from \"./boxes/temp-account-popup.box\";\nimport {TempAccountDaysLeftNumberBox} from \"./boxes/temp-account-days-left-number.box\";\nimport {ModalDialogActionsComponent} from \"../modal-dialog/modal-dialog-actions.component\";\nimport {TempAccountDaysLeftTextBox} from \"./boxes/temp-account-days-left-text.box\";\nimport {TEMP_ACCOUNT_STATUS} from \"../../../common/const/temp_account_status\";\nimport {GNWP_SOURCES} from \"../../services/gnwp/gnwp-consts\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface TempAccountPopupComponentPropsWithServices extends ITempAccountPopupProps, ComponentServicesPick<'gnwp'> {\n\n}\n\nclass ComponentBody extends OrbitComponent {\n\n componentDidMount() {\n super.componentDidMount();\n this.services.analytics.getLogger({\n eventName: 'TEMP_ACCOUNT_MESSAGE_SHOWN',\n }).info();\n }\n\n private _renderDaysLeft = (): React.ReactNode => {\n if (Check.isNullOrUndefined(this.props.daysLeft)) {\n return null;\n }\n\n const daysLeft = this.props.daysLeft < 0 ? 0 : this.props.daysLeft;\n const text = this.services.translation.translate('temp_account_days_left');\n\n return \n {daysLeft} {text}\n ;\n }\n\n private _buttonCallBack = () => {\n if (this.props.status === TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED) {\n\n if (this.props.gnwp.getTempAccountGnwpSource() === GNWP_SOURCES.DOCUMENT_UPLOAD) {\n this.services.externalLinks.then(externalLinks => externalLinks.openUploadDocumentFromMyAccount());\n } else {\n this.services.cashier.openUploadDocumentsFromCashier();\n }\n\n this.services.analytics.sendAnalytics('temp_account_message', 'upload_docs');\n\n } else if (this.props.status === TEMP_ACCOUNT_STATUS.PENDING_VERIFICATION) {\n this.services.analytics.sendAnalytics('temp_account_message', 'close_main_btn');\n }\n\n this.props.dialogHandler.close();\n }\n\n private _getButtonText = (): string => {\n if (this.props.status === TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED) {\n return this.services.translation.translate(\"temp_account_upload_btn\");\n }\n\n return this.services.translation.translate(\"OK\");\n }\n\n render(){\n return (\n \n {this._renderDaysLeft()}\n {this.props.bodyText}\n \n {this.props.footerText ? {this.props.footerText} : null}\n \n );\n }\n}\n\nexport const TempAccountPopupComponent = withServices(ComponentBody, ['gnwp']);","import styled from \"styled-components\";\n\nconst InitBiometricFooterSectionDefaultBox = styled.div`\n font-size: 1.25rem;\n color: ${({theme}) => theme.colors.textMiddleDark};\n`;\n\nexport const InitBiometricFooterSectionBox = InitBiometricFooterSectionDefaultBox;","import styled from \"styled-components\";\n\nexport const InitBiometricDialogDefaultBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n ${({theme}) => theme.font.presets.body}\n \n padding-top: 3rem;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 0;\n }\n`;\n\nexport const InitBiometricDialogBox = InitBiometricDialogDefaultBox;","import styled from \"styled-components\";\n\nconst InitBiometricSectionDefaultBox = styled.div`\n margin-bottom: 1rem;\n margin-top: 5rem;\n font-size: 1.6rem;\n color: ${({theme}) => theme.colors.textLight};\n \n > :nth-child(2n+1) {\n font-size: 1.4rem;\n color: ${({theme}) => theme.colors.textMiddleDark};\n }\n`;\n\nexport const InitBiometricSectionBox = InitBiometricSectionDefaultBox;","import styled from \"styled-components\";\n\nconst HelpOptionDefaultBox = styled.div`\n font-size: 1.25rem;\n color: ${({theme}) => theme.colors.textMiddleDark};\n cursor: pointer;\n`;\n\nexport const HelpOptionBox = HelpOptionDefaultBox;","import React, {useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {IInitBiometricDialogOptions} from \"../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/init-biometric.component-props\";\nimport {ModalDialogActionsComponent} from \"../../modal-dialog/modal-dialog-actions.component\";\nimport {InitBiometricFooterSectionBox} from \"./boxes/init-biometric-footer-section.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {InitBiometricDialogBox} from \"./boxes/init-biometric-dialog.box\";\nimport {InitBiometricSectionBox} from \"./boxes/init-biometric-info-section.box\";\nimport {HelpOptionBox} from \"./boxes/help-option.box\";\n\nexport const InitBiometricDialogComponent: React.FC = observer((props) => {\n const services = useServices();\n const [isHelpOptionVisible, setHelpOptionVisible] = useState(false);\n\n \n const _toggleHelpOptionVisible = () => {\n setHelpOptionVisible(!isHelpOptionVisible);\n }\n\n const _buttonCallBack = async () => {\n try {\n await services.hybrid.getTouchIDFeaturer().getTokenFromSrv();\n services.analytics.sendOrbitUserFlowEvent('Client_TouchID', 'Activation');\n } catch (err) {\n services.logger.error('Failed to init touch ID feature', err);\n }\n\n props.dialogHandler.close();\n }\n\n const _getButtonText = (): string => {\n return services.translation.translate('TOUCH_ID_INIT_SCREEN_ENABLE_BUTTON');\n }\n\n const _renderHelpText = () => {\n if (!isHelpOptionVisible) {\n return null;\n }\n\n return (\n \n
    \n \n );\n };\n\n\n\n\n\n\n return (\n \n \n
    \n {services.translation.translate('TOUCH_ID_CAPTION')}\n
    \n
    \n \n \n
    \n {services.translation.translate('TOUCH_ID_SUB_CAPTION')}\n
    \n
    \n _toggleHelpOptionVisible()}>\n {services.translation.translate(\"TERMS_AND_CONDITIONS\")}\n \n {_renderHelpText()}\n
    \n );\n\n})","import styled from \"styled-components\";\n\nexport const LoginToastDefaultBox = styled.div`\n display:flex;\n`\n\nexport const LoginToastBox = LoginToastDefaultBox;","import styled from \"styled-components\";\n\nexport const LoginToastResponsibleGamingLinkDefaultBox = styled.a`\n color: ${props => props.theme.colors.brandPrimary};\n text-decoration-line: underline;\n`\n\nexport const LoginToastResponsibleGamingLinkBox = LoginToastResponsibleGamingLinkDefaultBox;","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const StandardToastImageBox = styledBox('StandardToastImageBox');","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {LoginToastBox} from \"./boxes/login-toast.box\";\nimport {FlexContainerBox, FlexFixedSizeItemBox, FlexGrowItemBox} from \"../../themes/architecture/css-helpers/flex\";\nimport {StandardToastTitleBox} from \"../toaster/toasts-content/boxes/standard-toast-title/standard-toast-title.box\";\nimport {StandardToastMessageBox} from \"../toaster/toasts-content/boxes/standard-toast-message/standard-toast-message.box\";\nimport {ILoginToastProps} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/login-toast.component-props\";\nimport {LoginToastResponsibleGamingLinkBox} from \"./boxes/login-toast-message/login-toast-responsible-gaming-link.box\";\nimport {StandardToastImageBox} from \"../toaster/toasts-content/boxes/standard-toast-image/standard-toast-image.box\";\n\ninterface ILoginToastComponentProps {\n contentProps: ILoginToastProps;\n}\nexport const LoginToastComponent: React.FC = observer((props) => {\n const services = useServices();\n\n const DefaultIcon = services.theme.currentTheme.icons.infoIcon;\n const renderImage = () => {\n return ;\n }\n\n return (\n \n \n \n {renderImage()}\n \n \n \n \n {props.contentProps.title}\n \n \n {props.contentProps.contentText}\n \n services.linksNavigation.openResponsibleGaming()}>\n {services.translation.translate('RESPONSIBLE_GAMBLING')}\n \n \n \n )\n})","import React, {ReactElement} from 'react';\nimport {ServiceBase} from '../ServiceBase';\nimport {\n IGermanyResponsibleGamingButtonOptions,\n IOrbitComponentInSdk,\n IOrbitDialogInSdk\n} from '../../../common/interfaces/orbit-component-to-sdk-adapter/orbit-component-to-sdk-adapter.service.interface';\nimport {\n ITimeSpentReminderWithBalanceComponentProps,\n ITimeSpentReminderOptions\n} from '../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/time-spent-reminder-options';\nimport {\n ResponsibleGamingButtonsGermanyComponent\n} from \"../../components/responsible-gambling/responsible-gaming-buttons/regulations/germany/responsible-gaming-buttons-germany.component\";\nimport {action, observable, makeObservable} from 'mobx';\nimport {IOrbitComponentsInsideSdkProvider, IComponentRenderedInsideSdk} from './orbit-components-inside-sdk-provider.interface';\nimport {TimeSpentReminderWithDropdownComponent} from \"../../components/time-spent-reminder/with-dropdown/time-spent-reminder-with-dropdown.component\";\nimport {\n DialogButtonClickHandleResultEnum,\n ShowModalOptions\n} from \"../dialog/dialog.service.interface\";\nimport {GeoPermissionsPopupComponent} from \"../../components/geo/geo-permission-popup/geo-permission-popup.component\";\nimport {IStatePopupDisplayParams} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/state-popup-display-params\";\nimport {IGeoPermissionPopupOptions} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/geo-permission-popup.component-props\";\nimport {TimeSpentReminderWithBalanceComponent} from \"../../components/time-spent-reminder/with-balance/time-spent-reminder-with-balance.component\";\nimport {IdleRecommendationsComponentProps} from '../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/idle-recommendations.component-props';\nimport {IdleRecommendationComponent} from '../../components/idle-recommendation/idle-recommendation.component';\nimport {\n PRIORITY_LEVEL,\n PRIORITY_LEVEL_ZINDEX_MAPPER\n} from \"../../../sdk/src/services/overlay_manager/overlay_manager_levels\";\nimport {\n IIntrusiveMessagePopupDisplayParams\n} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/intrusive-message-popup-display-params\";\nimport {DISPLAY_MESSAGE_IDS, DISPLAY_MESSAGE_NAMES} from \"../../../common/const/casinofied-analytics-consts\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {TempAccountPopupComponent} from \"../../components/temp-account-popup/temp-account-popup.component\";\nimport {\n ITempAccountShowPopupOptions\n} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/temp-account-popup-params\";\nimport {InitBiometricDialogComponent} from '../../components/biometric-dialog/init-biometric-dialog/init-biometric-dialog.component';\nimport {LoginToastComponent} from '../../components/login-toast/login-toast.component';\nimport {ILoginToastDef} from '../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/login-toast.component-props';\n\nexport class OrbitComponentToSdkAdapterService extends ServiceBase implements IOrbitComponentsInsideSdkProvider {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n }\n\n renderGermanyResponsibleGamingButtons(element: HTMLElement, options?: IGermanyResponsibleGamingButtonOptions): IOrbitComponentInSdk {\n return this._renderComponent(element,\n );\n }\n\n showLocationPopup(props: IStatePopupDisplayParams): Promise {\n return this.services.stateOfResidenceIdentifier.displayStateSelectorPopup(props);\n }\n\n showGeoPermissionPopup(props: IGeoPermissionPopupOptions) {\n return this.services.dialog.showModal(dialogHandler =>\n , {\n title: this.services.translation.translate(\"GEO_PERMISSIONS_POPUP_TITLE\"),\n icon: this.services.theme.currentTheme.icons.locationIcon,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n forceZOrder: PRIORITY_LEVEL_ZINDEX_MAPPER[PRIORITY_LEVEL.TOUCH_ID] - 1,\n onClosed: props.onMessageClosed,\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: true,\n }\n );\n }\n\n private _getTimeSpentReminderDialogOptions(headerClass?: string): ShowModalOptions {\n return {\n title: this.services.translation.translate(\"TSR_TITLE\"),\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n onClosed: null,\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: true,\n headerClass: headerClass,\n showPopupAboveSecondWebViewHybrid: true,\n icon: this.services.theme.currentTheme.icons.timeSpentReminderClockIcon\n };\n }\n\n showTempAccountPopup(options: ITempAccountShowPopupOptions): IOrbitDialogInSdk {\n return this.services.dialog.showModal(dialogHandler => , {\n onClosedByXButton: () => this.services.analytics.sendAnalytics('temp_account_message', 'close'),\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n shouldBeClosedOnlyByUser: true,\n title: this.services.translation.translate('temp_account_title'),\n icon: this.services.theme.currentTheme.icons.tempAccountPopupIcon\n });\n }\n\n showTimeSpentReminderWithDropdown(options: ITimeSpentReminderOptions): IOrbitDialogInSdk {\n\n const dialogOptions = this._getTimeSpentReminderDialogOptions('cy-uk-malta-reality-check-title');\n\n return this.services.dialog.showModal(dialogHandler => \n , dialogOptions);\n }\n\n showTimeSpentReminderWithBalance(options: ITimeSpentReminderWithBalanceComponentProps): IOrbitDialogInSdk {\n\n const dialogOptions = this._getTimeSpentReminderDialogOptions();\n\n return this.services.dialog.showModal(dialogHandler => \n , dialogOptions);\n }\n\n\n showIntrusiveMessagePopup(params: IIntrusiveMessagePopupDisplayParams): IOrbitDialogInSdk {\n\n const businessCorrelationId = this.services.tools.getGuid();\n\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.nightLimitWarning,\n displayMessageName: DISPLAY_MESSAGE_NAMES.DISRUPTIVE_WARNING_MESSAGE_NAME,\n correlationID: params.correlationId\n });\n\n const WarningIcon = this.services.theme.currentTheme.icons.warningSignIcon;\n return this.services.dialog.showSimpleTextModal({\n buttons: [\n {\n buttonPreset: \"primary\",\n text: params.buttonText,\n onClick: async () => {\n this.services.casinofiedAnalytics.messageActionTaken({\n displayMessageName: DISPLAY_MESSAGE_NAMES.DISRUPTIVE_WARNING_MESSAGE_NAME,\n actionType: 'Confirmation',\n correlationID: params.correlationId,\n businessCorrelationID: businessCorrelationId\n });\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ],\n hideCloseButton: true,\n text: params.text,\n title: params.title.toLowerCase(),\n icon: ,\n disableFullscreenMobile: true,\n showPopupAboveSecondWebViewHybrid: true\n })\n }\n\n showDefaultKickPopup(popupTextKey: string): IOrbitDialogInSdk {\n const WarningIcon = this.services.theme.currentTheme.icons.warningSignIcon;\n return this.services.dialog.showSimpleTextModal({\n buttons: [\n {\n buttonPreset: \"primary\",\n text: this.services.translation.translate('OK'),\n onClick: async () => {\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ],\n text: this.services.translation.translate(popupTextKey),\n title: this.services.translation.translate('generic_notification_popup_title').toLowerCase(),\n icon: ,\n disableFullscreenMobile: true,\n showPopupAboveSecondWebViewHybrid: true\n });\n }\n\n showDisconnectPopup(): IOrbitDialogInSdk {\n if (this.services.miniOrbit.isEnabled) {\n return; //We don't show the disconnected popup on our side for miniOrbits\n }\n\n const WarningIcon = this.services.theme.currentTheme.icons.warningSignIcon;\n return this.services.dialog.showSimpleTextModal({\n buttons: [\n {\n buttonPreset: \"primary\",\n text: this.services.translation.translate('OK'),\n onClick: async () => {\n this.services.analytics.sendOrbitUserFlowEvent('InactivityTimeoutPopUp', 'OK', 'PostDisconnect');\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ],\n text: this.services.translation.translate('MDP_INACTIVITY_DISCONNECTED_TEXT'),\n title: this.services.translation.translate('generic_notification_popup_title').toLowerCase(),\n icon: ,\n disableFullscreenMobile: true,\n showPopupAboveSecondWebViewHybrid: true,\n onClosedByXButton: async () => {\n this.services.analytics.sendOrbitUserFlowEvent('InactivityTimeoutPopUp', 'Close', 'PostDisconnect');\n }\n });\n }\n\n renderIdleRecommendations(element: HTMLElement, props: IdleRecommendationsComponentProps): IOrbitComponentInSdk {\n return this._renderComponent(element,\n \n );\n }\n\n @observable.ref\n currentRenderedComponents: IComponentRenderedInsideSdk[] = [];\n\n @action.bound\n private _setCurrentRenderedComponents(currentRenderedComponents: IComponentRenderedInsideSdk[]) {\n this.currentRenderedComponents = currentRenderedComponents;\n }\n\n private _unmountComponent(element: HTMLElement) {\n const index = this.currentRenderedComponents.findIndex(item => item.element === element);\n if (index >= 0) {\n this._setCurrentRenderedComponents([...this.currentRenderedComponents.splice(index, 1)])\n }\n }\n\n private _renderComponent(element: HTMLElement, component: ReactElement): IOrbitComponentInSdk {\n\n this._setCurrentRenderedComponents([\n ...this.currentRenderedComponents,\n {\n component: component,\n element: element\n }\n ]);\n\n return {\n unmount: () => {\n this._unmountComponent(element)\n }\n }\n }\n\n showAboutDialog(): Promise {\n return this.services.regulation.current.components.showAboutDialog()\n }\n\n showInitBiometricDialog(): IOrbitDialogInSdk {\n return this.services.dialog.showModal(dialogHandler => , {\n title: this.services.translation.translate('TOUCH_ID_AUTO_SCREEN'),\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n shouldBeClosedOnlyByUser: true,\n mobileCenterHeader: true,\n onClosed: () => this.services.sdk.eventsTrigger.onInitScreenShow(),\n });\n }\n\n showLoginMessageToast(toastConfig: ILoginToastDef): void {\n this.services.toaster.showCustomToast({\n id: toastConfig.id || \"login_message_toast\",\n toastOptions: toastConfig.toastOptions,\n onToastClosed: toastConfig.onToastClosed,\n renderContent: (handler) => {return }\n })\n }\n\n}","import {ServiceBase} from '../../ServiceBase';\nimport {IServiceFactoryExtended} from '../../service-factory-extended.interface';\nimport {IMessageBrokerService} from './message-broker.service.interface';\nimport {ILogger, IMessageBroker, MessageBroker} from '@sparkware/uc-sdk-core';\nimport {STANDARD_TOPIC_HEADER} from './message-broker.consts';\nimport { ILoggerService } from '../../logger/logger.service.interface';\n\nexport class MessageBrokerLogger implements ILogger{\n constructor(private _logger: ILoggerService) {\n }\n\n debug(message: string, ...optionalParams: any[]): void {\n this._logger.debug(message, optionalParams);\n }\n\n warn(message: string, ...optionalParams: any[]): void {\n this._logger.warning(message, optionalParams);\n }\n\n error(message: string, ...optionalParams: any[]): void {\n this._logger.error(message, optionalParams);\n }\n\n info(message: string, ...optionalParams: any[]): void {\n this._logger.info(message, optionalParams);\n }\n\n table(message: any, ...optionalParams: any[]):void {\n this._logger.info(message, optionalParams);\n }\n\n log(message: any, ...optionalParams: any[]): void {\n this._logger.info(message, optionalParams);\n }\n}\n\nexport class MessageBrokerService extends ServiceBase implements IMessageBrokerService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this.channels = new MessageBroker(new MessageBrokerLogger(services.logger));\n this.reaction(() => this.services.user.isAuthorized ,\n (isAuthorized) => {\n if(isAuthorized) {\n this.channels.identity.topics.loginSuccess.publish(STANDARD_TOPIC_HEADER, {} as any);\n } else {\n this.channels.identity.topics.logoutSuccess.publish(STANDARD_TOPIC_HEADER, {} as any);\n }\n });\n }\n\n readonly channels: IMessageBroker;\n}","import {IActionHandler} from \"./action-handler.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nexport abstract class ActionHandlerBase implements IActionHandler {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n\n abstract handle(payload: TPayload): Promise;\n}","import {\n AppIdentifiers, IOpenBankingActionPayload,\n IOpenBankingSpecificParams,\n ProductPackageToID\n} from \"@sparkware/uc-sdk-core\";\nimport {\n getCasinofiedCommonAppContextParams,\n getCasinofiedDeviceInfo,\n getCasinofiedGeoInfoParams\n} from \"../../casinofied-helper-functions\";\nimport {ActionHandlerBase} from \"../action-handler-base\";\n\n\nexport class OpenBankingActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenBankingActionPayload): Promise {\n const openBakingSpecificParams: IOpenBankingSpecificParams = (payload.launchInfo.appSpecificParameters || {}) as IOpenBankingSpecificParams;\n if(openBakingSpecificParams.url) {\n this.services.casinofiedAnalytics.openAppRequest({\n correlationID: payload.correlationID,\n launchInfo: payload.launchInfo,\n appID: AppIdentifiers.OpenBanking,\n });\n\n const geoInfo = await getCasinofiedGeoInfoParams(this.services);\n this.services.casinofiedAnalytics.appInitRequest({\n correlationID: payload.correlationID,\n applicationContext: {\n launchInfo: payload.launchInfo,\n appID: AppIdentifiers.OpenBanking,\n productPackageToID: ProductPackageToID.PAYMENTS_DEPOSIT,\n ...getCasinofiedCommonAppContextParams(this.services)\n\n },\n deviceInfo: getCasinofiedDeviceInfo(this.services),\n geoInfo: geoInfo,\n userInfo: {\n userMode: 'authenticated',\n regulationTypeID: this.services.regulation.getRegulationCode(),\n token: ''\n },\n messageBrokerChannels: this.services.messageBroker.channels\n });\n\n await this.services.linksNavigation.openUrl({\n url: openBakingSpecificParams.url,\n openMode: \"newTab\"\n });\n\n } else {\n this.services.logger.error(`OPEN_BANKING action didn't received the URL from ${payload.launchInfo?.sourceAppID}`);\n }\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n AppIdentifiers,\n IPerformActionPayloadBase,\n ProductPackageToID\n} from \"@sparkware/uc-sdk-core\";\nimport {\n getCasinofiedCommonAppContextParams,\n getCasinofiedDeviceInfo,\n getCasinofiedGeoInfoParams\n} from \"../../casinofied-helper-functions\";\n\nexport class UploadDocumentsFromCashierActionHandler extends ActionHandlerBase {\n async handle(payload: IPerformActionPayloadBase): Promise {\n this.services.casinofiedAnalytics.openAppRequest({\n correlationID: payload.correlationID,\n launchInfo: payload.launchInfo,\n appID: AppIdentifiers.UploadDocuments,\n });\n\n const geoInfo = await getCasinofiedGeoInfoParams(this.services);\n\n this.services.casinofiedAnalytics.appInitRequest({\n correlationID: payload.correlationID,\n applicationContext: {\n launchInfo: payload.launchInfo,\n appID: AppIdentifiers.UploadDocuments,\n productPackageToID: this.services.device.os.isMobileOS ? ProductPackageToID.FULL_CASHIER_MOBILE : ProductPackageToID.FULL_CASHIER_PC, //TODO - this product package should be clarified when we will use the old cashier or the verify id standalone\n ...getCasinofiedCommonAppContextParams(this.services),\n },\n deviceInfo: getCasinofiedDeviceInfo(this.services),\n geoInfo: geoInfo,\n userInfo: {\n userMode: 'authenticated',\n regulationTypeID: this.services.regulation.getRegulationCode(),\n token: ''\n },\n messageBrokerChannels: this.services.messageBroker.channels\n });\n\n return this.services.cashier.openUploadDocumentsFromCashier();\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IDepositActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenDepositActionHandler extends ActionHandlerBase {\n async handle(payload: IDepositActionPayload): Promise {\n await this.services.cashier.openDeposit({\n channel: payload.launchInfo?.channel,\n launchInfo: payload.launchInfo\n });\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IWithdrawActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenWithdrawActionHandler extends ActionHandlerBase {\n async handle(payload: IWithdrawActionPayload): Promise {\n await this.services.cashier.openWithdraw({\n channel: payload.launchInfo?.channel,\n launchInfo: payload.launchInfo\n });\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenLinkActionData, IOpenLinkActionPayload} from \"@sparkware/uc-sdk-core\";\nimport {NavigationLinkOpenMode} from \"../../../configurations/config-data-sections/navigation-link.configuration\";\n\nexport class OpenLinkActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenLinkActionPayload): Promise {\n const actionData = payload.actionData as IOpenLinkActionData;\n if(!actionData?.url) {\n this.services.logger.error('No url provided for openLink action');\n return;\n }\n\n let openMode: NavigationLinkOpenMode = 'newTab';\n if(!actionData.openExternally) {\n openMode = 'redirect';\n }\n\n await this.services.linksNavigation.openUrl({\n url: actionData.url?.trim(),\n openMode: openMode\n });\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {AppIdentifiers, IOpenChatActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenChatActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenChatActionPayload): Promise {\n await this.services.messageBroker.channels.navigation.topics.openApp.publish({\n publisher: payload.launchInfo.sourceAppID.toString()\n }, {\n appID: AppIdentifiers.CRChat,\n launchInfo: payload.launchInfo,\n correlationID: payload.correlationID\n });\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n AppIdentifiers,\n IOpenEmailActionPayload,\n ProductPackageToID,\n IOpenEmailActionData, IOpenOnlineHelpActionData, IPerformActionPayloadBase\n} from \"@sparkware/uc-sdk-core\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IFormSubmitParams} from \"../../../dom/dom.service.interface\";\nimport {\n getCasinofiedCommonAppContextParams,\n getCasinofiedDeviceInfo,\n getCasinofiedGeoInfoParams\n} from \"../../casinofied-helper-functions\";\n\nexport abstract class OpenLinkWithFormPostActionHandler extends ActionHandlerBase {\n\n protected abstract _getAppIdentifier(): AppIdentifiers;\n protected abstract _getProductPackageId(): ProductPackageToID;\n\n async handle(payload: TPayload): Promise {\n\n this._sendAnalytics(payload);\n\n if (!this.services.user.isAuthorized || this.services.device.hybrid.isHybrid) {\n return this._performFormPost(payload);\n }\n\n return this.services.user.getPlatformToken().then(platformToken => {\n return this._performFormPost(payload, platformToken.token);\n });\n }\n\n private _shouldOpenInSameWindow(): boolean {\n return !this.services.device.hybrid.isHybrid && this.services.device.isMobile;\n }\n\n protected abstract _getSpecificActionData(payload: TPayload): IOpenEmailActionData | IOpenOnlineHelpActionData;\n\n private _performFormPost(payload: TPayload, token?: string): Promise {\n\n const actionData = this._getSpecificActionData(payload);\n\n const formPostExtraParams = {\n relatedAccountCid: actionData.relatedAccountCid?.toString(),\n registrationCategory: actionData.registrationCategory?.toString(),\n correlationId: actionData.correlationId\n };\n\n if (!Check.isNullOrUndefined(token)) {\n Object.defineProperty(formPostExtraParams, \"t\", {\n value: token,\n enumerable: true\n });\n }\n\n const formSubmitParams: IFormSubmitParams = {\n url: actionData.url,\n method: \"post\",\n extraParams: formPostExtraParams\n };\n\n if (this._shouldOpenInSameWindow()) {\n formSubmitParams.target = '_self';\n }\n\n this.services.dom.submitForm(formSubmitParams);\n\n return Promise.resolve();\n }\n\n\n\n private async _sendAnalytics(payload: TPayload): Promise {\n const appId = this._getAppIdentifier()\n const productPackageToID = this._getProductPackageId();\n\n this.services.casinofiedAnalytics.openAppRequest({\n correlationID: payload.correlationID,\n launchInfo: payload.launchInfo,\n appID: appId,\n });\n\n const geoInfo = await getCasinofiedGeoInfoParams(this.services);\n this.services.casinofiedAnalytics.appInitRequest({\n correlationID: payload.correlationID,\n applicationContext: {\n launchInfo: payload.launchInfo,\n appID: appId,\n productPackageToID: productPackageToID,\n ...getCasinofiedCommonAppContextParams(this.services)\n },\n deviceInfo: getCasinofiedDeviceInfo(this.services),\n geoInfo: geoInfo,\n userInfo: {\n userMode: this.services.user.isAuthorized ? 'authenticated' : 'anonymous',\n regulationTypeID: this.services.regulation.getRegulationCode(),\n token: ''\n },\n messageBrokerChannels: this.services.messageBroker.channels\n });\n }\n}\n\nexport class OpenEmailActionHandler extends OpenLinkWithFormPostActionHandler {\n protected _getAppIdentifier(): AppIdentifiers {\n return AppIdentifiers.OpenEmail;\n }\n\n\n protected _getProductPackageId(): ProductPackageToID {\n return ProductPackageToID.OPEN_EMAIL\n }\n\n protected _getSpecificActionData(payload: IOpenEmailActionPayload): IOpenEmailActionData {\n return payload.actionData;\n }\n}\n","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n AppIdentifiers,\n ControlCenterDeeplink,\n ControlCenterOpenSource,\n IOpenControlCenterFullActionPayload\n} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenControlCenterFullActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenControlCenterFullActionPayload): Promise {\n if(!await this.services.user.ensureUserIsLoggedIn('OpenControlCenterFullActionHandler')) {\n throw new Error('User canceled the login');\n }\n\n (await this.services.userMenu).closeMenu();\n\n this.services.messageBroker.channels.navigation.topics.openApp.publish({\n publisher: payload.launchInfo.sourceAppID.toString()\n }, {\n appID: AppIdentifiers.ControlCenterFull,\n launchInfo: {\n ...payload.launchInfo,\n appSpecificParameters: {\n source: ControlCenterOpenSource.Lobby,\n deeplink: ControlCenterDeeplink.Main,\n ...payload.launchInfo?.appSpecificParameters\n }\n },\n correlationID: payload.correlationID\n });\n }\n}\n","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n ClientPageType,\n IOpenClientPageActionPayload\n} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenClientPageActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenClientPageActionPayload): Promise {\n switch(payload.actionData.clientPageType) {\n case ClientPageType.rgPolicy:\n await this.services.linksNavigation.openResponsibleGaming();\n break;\n case ClientPageType.onlineHelp:\n // TODO: Implement\n throw new Error(`Client page ${payload.actionData.clientPageType} is not supported yet`);\n default:\n throw new Error(`Client page ${payload.actionData.clientPageType} is not supported`);\n }\n }\n}\n","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {ILogoutActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class LogoutActionHandler extends ActionHandlerBase {\n async handle(payload: ILogoutActionPayload): Promise {\n return this.services.user.logout();\n }\n}\n","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {AppIdentifiers, IOpenHelpCenterActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenHelpCenterActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenHelpCenterActionPayload): Promise {\n await this.services.messageBroker.channels.navigation.topics.openApp.publish({\n publisher: payload.launchInfo?.sourceAppID.toString()\n }, {\n appID: AppIdentifiers.CRHelpCenter,\n launchInfo: payload.launchInfo,\n correlationID: payload.correlationID\n });\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {ILoginActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class LoginActionHandler extends ActionHandlerBase {\n async handle(payload: ILoginActionPayload): Promise {\n if(!await this.services.user.ensureUserIsLoggedIn('LoginActionHandler')) {\n throw new Error('User canceled the login');\n }\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IRegistrationActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class RegistrationActionHandler extends ActionHandlerBase {\n async handle(payload: IRegistrationActionPayload): Promise {\n await (await this.services.externalLinks).openMembership({\n channel: payload.launchInfo?.channel,\n businessCorrelationID: payload.launchInfo?.businessCorrelationID,\n promoCode: payload.actionData?.promoCode,\n marketingParams: {\n wtc: payload.actionData?.wtc,\n dl: payload.actionData?.dl\n }\n })\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {ITransactionHistoryActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class TransactionHistoryActionHandler extends ActionHandlerBase {\n async handle(payload: ITransactionHistoryActionPayload): Promise {\n await this.services.cashier.openTransactionHistory({\n channel: payload.launchInfo?.channel,\n launchInfo: payload.launchInfo\n })\n }\n\n}","import {NullableUndefinedNumber, NullableUndefinedString} from \"../common/types/nullable-types\";\nimport {Check} from \"@sparkware/app-utils\";\n\n/**\n * A helper class to get a property value from an object using a case-insensitive match by property name\n * CI = Case-Insensitive\n */\nexport class CIPropRead {\n static getProperty(propertyName: string, propertyOwner: any): any {\n if(!propertyOwner) {\n return null;\n }\n propertyName = propertyName.toLowerCase();\n for(let propName of Object.keys(propertyOwner)) {\n if(propName.toLowerCase() === propertyName) {\n return propertyOwner[propName];\n }\n }\n\n return null;\n }\n\n static getShallowLowercasedObject(propertyName: string, propertyOwner: any): any {\n const value = CIPropRead.getProperty(propertyName, propertyOwner);\n if(Check.isObject(value)) {\n return Object.keys(value).reduce((accumulator, key) => {\n accumulator[key.toLowerCase()] = value[key];\n return accumulator;\n }, {});\n }\n\n return value;\n }\n\n static getNumericProperty(propertyName: string, propertyOwner: any): NullableUndefinedNumber {\n const value = parseInt(CIPropRead.getProperty(propertyName, propertyOwner));\n if(Check.isNumber(value)) {\n return value;\n }\n\n return null;\n }\n\n static getStringProperty(propertyName: string, propertyOwner: any): NullableUndefinedString {\n const value = CIPropRead.getProperty(propertyName, propertyOwner)?.toString();\n if(Check.isString(value)) {\n return value;\n }\n return null;\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenCashierActionPayload} from \"@sparkware/uc-sdk-core\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\n\nexport class OpenCashierActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenCashierActionPayload): Promise {\n await this.services.cashier.openCashier({\n sessionType: CIPropRead.getNumericProperty('sessionType', payload.launchInfo?.appSpecificParameters)\n || CIPropRead.getNumericProperty('TabId', payload.launchInfo?.appSpecificParameters),\n channel: payload.launchInfo?.channel,\n PromCode: CIPropRead.getStringProperty('PromoCode', payload.launchInfo?.appSpecificParameters)\n });\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenChallengesActionPayload} from \"@sparkware/uc-sdk-core\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenChallengesActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenChallengesActionPayload): Promise {\n await (await this.services.externalLinks).openMyAccount({\n tabId: MyAccountTab.LCChallenges\n });\n }\n\n}","import {INavigateClientPageActionPayload} from \"@sparkware/uc-sdk-core\";\nimport {ActionHandlerBase} from \"../action-handler-base\";\n\nexport class NavigateClientPageActionHandler extends ActionHandlerBase {\n async handle(payload: INavigateClientPageActionPayload): Promise {\n await this.services.location.push(payload.actionData.url)\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenMyAccountActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenMyAccountActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenMyAccountActionPayload): Promise {\n await (await this.services.externalLinks).openMyAccount({\n tabId: payload.actionData?.tabId\n });\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenRichActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenRichActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenRichActionPayload): Promise {\n await (await this.services.externalLinks).openRichPage({\n campaignId: payload.actionData?.CampaignId?.toString()\n });\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenControlCenterMiniActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenControlCenterMiniActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenControlCenterMiniActionPayload): Promise {\n if(await this.services.user.ensureUserIsLoggedIn('OpenControlCenterMiniActionHandler')) {\n (await this.services.userMenu).openMenu();\n }\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {ActionID, AreaType, IDeepLink, IOpenCasinoGameActionPayload} from \"@sparkware/uc-sdk-core\";\nimport { OrbitAIFeatureAnalyticsCategory } from \"../../../analytics/analytics.service.interface\";\n\nexport class OpenCasinoGameActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenCasinoGameActionPayload): Promise {\n\n const gameType = payload.actionData.gameType;\n\n if(payload.actionData.isReal) {\n await this.services.user.ensureUserIsLoggedIn('OpenCasinoGameActionHandler');\n }\n\n await this.services.games.getGamesMapUpdatePromise();\n\n const gameInfo = await this.services.games.getGameInfo(gameType);\n\n if(!gameInfo) {\n this.services.logger.error(`Game type ${gameType} was not found!`);\n\n if (this._shouldOpenGameInWebApp(gameType)) {\n\n const unifiedDeepLink: IDeepLink = {\n area: AreaType.button,\n actions: [\n {\n actionID: ActionID.openCasinoGame,\n actionData: payload.actionData\n }\n ]\n };\n\n // open webApp deeplink with this game\n this.services.sdk.openHybridLink(`/#deeplink=${encodeURIComponent(JSON.stringify(unifiedDeepLink))}`);\n return;\n }\n\n this.services.analytics.sendOrbitAIFeatureEvent(OrbitAIFeatureAnalyticsCategory.CorrelatedGamePopUp, 'Game_Unavailable', gameType.toString());\n await this._suggestCorrelatedGame(gameType);\n return;\n }\n\n await gameInfo.open({\n isRealMode: payload.actionData.isReal\n });\n }\n\n\n private _shouldOpenGameInWebApp(gameType: number) {\n return this.services.device.hybrid.isEmbedded &&\n !this.services.sdk.isHybridEmbeddedGame(gameType) &&\n !this.services.regulation.shouldPreventOpenGameOnMobileWeb();\n }\n\n private async _suggestCorrelatedGame(gameType: number) {\n let suggestedGameType: number;\n const correlatedGames = await this.services.games.getCorrelatedGames(gameType, 10) || [];\n\n if(correlatedGames?.length > 0) {\n const gamesInfoArray = await this.services.games.getGamesInfoArray(correlatedGames) || [];\n\n if (gamesInfoArray?.length > 0) {\n suggestedGameType = gamesInfoArray[0].gameType;\n }\n }\n\n if (!suggestedGameType) {\n this.services.logger.error(`No correlated in layout games are found for game type ${gameType}, getCorrelatedGames: ${correlatedGames.join(';')}!`);\n\n const suggestedAIGameTypes = this.services.aiEngine.aiRecommendedGames?.gameTypes || [];\n\n if (suggestedAIGameTypes.length === 0) {\n this.services.logger.debug(`No correlated in ai suggested games are found for game type ${gameType}`);\n return;\n }\n const randomGameIndex = Math.floor(Math.random() * Math.min(10, suggestedAIGameTypes.length));\n suggestedGameType = suggestedAIGameTypes[randomGameIndex];\n\n //Check if the chosen GameType is allowed in the game layout\n if (!(await this.services.games.getGameInfo(suggestedGameType))) {\n return;\n }\n }\n\n const gamePopup = await this.services.gamePopup;\n\n await gamePopup.showSuggestedGame(suggestedGameType, this.services.translation.translate(\"GAME_POPUP_GAME_UNAVAILABLE\"), this.services.translation.translate(\"GAME_POPUP_MAY_LIKE\"));\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenForgotPasswordActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenForgotYourPasswordActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenForgotPasswordActionPayload): Promise {\n await (await this.services.externalLinks).openForgotPassword();\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {AreaType, CasinoFreeToPlayGameStage, IOpenCasinoFreeToPlayActionPayload} from \"@sparkware/uc-sdk-core\";\nimport {ISendElasticEventOptions} from \"../../../analytics/analytics.service.interface\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\n\nexport class OpenCasinoFreeToPlayActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenCasinoFreeToPlayActionPayload): Promise {\n if(!await this.services.user.ensureUserIsLoggedIn('OpenCasinoFreeToPlayActionHandler')) {\n throw new Error('User is not logged in');\n }\n\n await this.services.freeToPlay.waitForEligibility();\n\n if (!this.services.freeToPlay.isPromotionEligible) {\n throw new Error('Free to play is not enabled or user is not eligible!');\n }\n\n const gameStage = payload.launchInfo?.appSpecificParameters?.gameStage ?? CasinoFreeToPlayGameStage.MiniArena;\n\n this._sendAnalytics(gameStage);\n\n await this.services.freeToPlay.showPromotion({\n channel: {\n area: AreaType.externalClick,\n source: CHANNEL_SOURCE.casinoClient,\n element: CHANNEL_ELEMENTS.deepLink,\n ...payload.launchInfo?.channel\n },\n appSpecificParameters: {\n gameStage: gameStage\n }\n });\n }\n\n private _sendAnalytics(gameStage: CasinoFreeToPlayGameStage) {\n try {\n let options: ISendElasticEventOptions = {\n action: \"CLICK\",\n category: \"Deep_link\",\n eventType: \"bonus_widget\",\n value: gameStage.toString(),\n appID: \"F2P\",\n customData: {\n location: this.services.location.isHomePage ? 'homepage' : this.services.location.currentUri.pathName.toString(),\n segmentation: this.services.user.playerRMSStatus\n }\n };\n this.services.analytics.sendElasticInfoEvent(options, true);\n }\n catch (err){\n console.log(\"F2P Deep_link analytics report failed with error: \"+ err);\n }\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n AppIdentifiers,\n IOpenOnlineHelpActionPayload,\n ProductPackageToID,\n} from \"@sparkware/uc-sdk-core\";\nimport {\n getCasinofiedCommonAppContextParams,\n getCasinofiedDeviceInfo,\n getCasinofiedGeoInfoParams\n} from \"../../casinofied-helper-functions\";\n\n\nexport class OpenOnlineHelpActionHandler extends ActionHandlerBase {\n async handle(payload: IOpenOnlineHelpActionPayload): Promise {\n\n try {\n this._sendAnalytics(payload);\n } catch (e) {\n this.services.logger.error(\"Failed to send open online action handler analytics\");\n }\n\n const relatedAccountCid = payload.actionData.relatedAccountCid?.toString();\n const registrationCategory = payload.actionData.registrationCategory?.toString();\n const correlationId = payload.actionData.correlationId;\n const url = `${payload.actionData.url?.trim()}?relatedAccountCid=${relatedAccountCid}®istrationCategory=${registrationCategory}&correlationId=${correlationId}`;\n\n return this.services.linksNavigation.openUrl({\n url: url,\n openMode: 'newTab'\n });\n }\n\n private async _sendAnalytics(payload: IOpenOnlineHelpActionPayload): Promise {\n const appId = this._getAppIdentifier()\n const productPackageToID = this._getProductPackageId();\n\n this.services.casinofiedAnalytics.openAppRequest({\n correlationID: payload.correlationID,\n launchInfo: payload.launchInfo,\n appID: appId,\n });\n\n const geoInfo = await getCasinofiedGeoInfoParams(this.services);\n this.services.casinofiedAnalytics.appInitRequest({\n correlationID: payload.correlationID,\n applicationContext: {\n launchInfo: payload.launchInfo,\n appID: appId,\n productPackageToID: productPackageToID,\n ...getCasinofiedCommonAppContextParams(this.services)\n },\n deviceInfo: getCasinofiedDeviceInfo(this.services),\n geoInfo: geoInfo,\n userInfo: {\n userMode: this.services.user.isAuthorized ? 'authenticated' : 'anonymous',\n regulationTypeID: this.services.regulation.getRegulationCode(),\n token: ''\n },\n messageBrokerChannels: this.services.messageBroker.channels\n });\n }\n\n\n protected _getAppIdentifier(): AppIdentifiers {\n return AppIdentifiers.OpenOnlineHelp;\n }\n\n protected _getProductPackageId(): ProductPackageToID {\n return ProductPackageToID.OPEN_ONLINE_HELP\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n AdditionalActionName,\n AuthenticationServiceType,\n IAutoLoginActionPayLoad,\n ProductPackageToID\n} from \"@sparkware/uc-sdk-core\";\n\nexport class AutologinActionHandler extends ActionHandlerBase {\n async handle(payload: IAutoLoginActionPayLoad): Promise {\n\n if(payload.actionData.authenticationServiceType === AuthenticationServiceType.Registration) {\n this.services.sdk.eventsTrigger.registrationCompleted({\n UserInfo: payload.actionData.securityCode,\n SourceProductPackage: ProductPackageToID.REGISTRATION.toString()\n });\n await this.services.user.waitForAutoLogin();\n } else {\n await this.services.user.runAutoLogin({\n brandId: this.services.sdk.getBrandID(),\n token: payload.actionData.securityCode,\n sourceProductPackage: this.services.sdk.getProductPackageId(),\n sourceSubBrand: this.services.sdk.getSubBrandID()\n });\n }\n\n switch (payload.actionData.additionalAction.name) {\n case AdditionalActionName.openCashier:\n await this.services.cashier.openDeposit({\n channel: payload.launchInfo?.channel,\n launchInfo: payload.launchInfo,\n PromCode: payload.actionData.additionalAction.properties?.promoCode\n });\n break;\n case AdditionalActionName.openIdentityVerification:\n await (await this.services.externalLinks).openUploadDocumentFromMyAccount();\n break;\n }\n }\n}","import {ServiceBase} from '../../ServiceBase';\nimport {IServiceFactoryExtended} from '../../service-factory-extended.interface';\nimport {OpenBankingActionHandler} from \"./handlers/open-banking.action-handler\";\nimport {UploadDocumentsFromCashierActionHandler} from \"./handlers/upload-documents-from-cashier.action-handler\";\nimport {OpenDepositActionHandler} from \"./handlers/open-deposit.action-handler\";\nimport {OpenWithdrawActionHandler} from \"./handlers/open-withdraw.action-handler\";\nimport {OpenLinkActionHandler} from \"./handlers/open-link.action-handler\";\nimport {OpenChatActionHandler} from \"./handlers/open-chat.action-handler\";\nimport {OpenEmailActionHandler} from \"./handlers/open-link-with-form-post.action-handler\";\nimport {OpenControlCenterFullActionHandler} from \"./handlers/open-control-center-full.action-handler\";\nimport {OpenClientPageActionHandler} from \"./handlers/open-client-page.action-handler\";\nimport {LogoutActionHandler} from \"./handlers/logout.action-handler\";\nimport {OpenHelpCenterActionHandler} from \"./handlers/open-help-center.action-handler\";\nimport {LoginActionHandler} from \"./handlers/login.action-handler\";\nimport {RegistrationActionHandler} from \"./handlers/registration.action-handler\";\nimport {TransactionHistoryActionHandler} from \"./handlers/transaction-history.action-handler\";\nimport {OpenCashierActionHandler} from \"./handlers/open-cashier.action-handler\";\nimport {OpenChallengesActionHandler} from \"./handlers/open-challenges.action-handler\";\nimport {NavigateClientPageActionHandler} from \"./handlers/navigate-client-page.action-handler\";\nimport {OpenMyAccountActionHandler} from \"./handlers/open-my-account.action-handler\";\nimport {OpenRichActionHandler} from \"./handlers/open-rich.action-handler\";\nimport {OpenControlCenterMiniActionHandler} from \"./handlers/open-control-center-mini.action-handler\";\nimport {OpenCasinoGameActionHandler} from \"./handlers/open-casino-game.action-handler\";\nimport {OpenForgotYourPasswordActionHandler} from \"./handlers/open-forgot-your-password.action-handler\";\nimport {OpenCasinoFreeToPlayActionHandler} from \"./handlers/open-casino-free-to-play.action-handler\";\nimport {OpenOnlineHelpActionHandler} from \"./handlers/open-online-help.action-handler\";\nimport {AutologinActionHandler} from \"./handlers/autologin.action-handler\";\n\nexport class CasinofiedActionHandlerService extends ServiceBase {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n const actions = services.messageBroker.channels.performAction.topics;\n\n actions.login.registerResolver(payload => {\n return new LoginActionHandler(this.services).handle(payload);\n });\n\n actions.register.registerResolver(payload => {\n return new RegistrationActionHandler(this.services).handle(payload);\n })\n\n actions.openBanking.registerResolver(payload => {\n return new OpenBankingActionHandler(this.services).handle(payload);\n });\n\n actions.uploadDocumentsFromCashier.registerResolver((payload) => {\n return new UploadDocumentsFromCashierActionHandler(this.services).handle(payload);\n });\n\n actions.deposit.registerResolver((payload) => {\n return new OpenDepositActionHandler(this.services).handle(payload);\n });\n\n actions.withdraw.registerResolver((payload) => {\n return new OpenWithdrawActionHandler(this.services).handle(payload);\n });\n\n actions.transactionHistory.registerResolver(payload => {\n return new TransactionHistoryActionHandler(this.services).handle(payload);\n });\n\n actions.openCashier.registerResolver(payload => {\n return new OpenCashierActionHandler(this.services).handle(payload);\n });\n\n actions.openMyAccount.registerResolver(payload => {\n return new OpenMyAccountActionHandler(this.services).handle(payload);\n });\n\n actions.openChallenges.registerResolver(payload => {\n return new OpenChallengesActionHandler(this.services).handle(payload);\n });\n\n actions.navigateClientPage.registerResolver(payload => {\n return new NavigateClientPageActionHandler(this.services).handle(payload);\n });\n\n actions.openLink.registerResolver(payload => {\n return new OpenLinkActionHandler(this.services).handle(payload);\n });\n\n actions.openChat.registerResolver(payload => {\n return new OpenChatActionHandler(this.services).handle(payload);\n });\n\n actions.openEmail.registerResolver(payload => {\n return new OpenEmailActionHandler(this.services).handle(payload);\n });\n\n actions.openOnlineHelp.registerResolver(payload => {\n return new OpenOnlineHelpActionHandler(this.services).handle(payload);\n });\n\n actions.openControlCenterFull.registerResolver(payload => {\n return new OpenControlCenterFullActionHandler(this.services).handle(payload);\n });\n\n actions.openControlCenterMini.registerResolver(payload => {\n return new OpenControlCenterMiniActionHandler(this.services).handle(payload);\n });\n\n actions.openClientPage.registerResolver(payload => {\n return new OpenClientPageActionHandler(this.services).handle(payload);\n });\n\n actions.logout.registerResolver(payload => {\n return new LogoutActionHandler(this.services).handle(payload);\n });\n\n actions.openHelp.registerResolver(payload => {\n return new OpenHelpCenterActionHandler(this.services).handle(payload);\n });\n\n actions.openRich.registerResolver(payload => {\n return new OpenRichActionHandler(this.services).handle(payload);\n });\n\n actions.openCasinoGame.registerResolver(payload => {\n return new OpenCasinoGameActionHandler(this.services).handle(payload);\n });\n\n actions.openForgotPassword.registerResolver(payload => {\n return new OpenForgotYourPasswordActionHandler(this.services).handle(payload);\n });\n\n actions.openCasinoFreeToPlay.registerResolver(payload => {\n return new OpenCasinoFreeToPlayActionHandler(this.services).handle(payload);\n });\n\n actions.autoLogin.registerResolver(payload => {\n return new AutologinActionHandler(this.services).handle(payload);\n });\n }\n}\n","import React from 'react';\nimport {ServiceBase} from '../ServiceBase';\nimport {\n IFloatingBubbleContent,\n IFloatingBubbleHandler,\n IFloatingBubblesService\n} from './floating-bubbles.service.interface';\nimport { action, observable, runInAction, makeObservable } from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {Check} from '@sparkware/app-utils';\n\nexport class FloatingBubblesService extends ServiceBase implements IFloatingBubblesService {\n @observable.ref\n bubbles: IFloatingBubbleContent[] = [];\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n }\n\n @action.bound\n addBubble(content: IFloatingBubbleContent): IFloatingBubbleHandler {\n content = new BubbleContentDecorator(content, this.services);\n this.bubbles = [...this.bubbles, content];\n return {\n remove: () => {\n const bubbleToRemoveIndex = this.bubbles.findIndex(b => b.id === content.id);\n if(bubbleToRemoveIndex >= 0) {\n runInAction(() => {\n this.bubbles.splice(bubbleToRemoveIndex, 1);\n this.bubbles = [...this.bubbles];\n });\n }\n }\n\n };\n }\n}\n\n\nclass BubbleContentDecorator implements IFloatingBubbleContent {\n constructor(private readonly _originalBubble: IFloatingBubbleContent, private readonly _services: IServiceFactoryExtended) {\n this._id = this._services.tools.getGuid();\n }\n\n\n private readonly _id: string;\n\n get id(): string {\n return this._originalBubble.id || this._id;\n }\n\n get isVisible(): boolean {\n if(Check.isNullOrUndefined(this._originalBubble.isVisible)) {\n return true;\n }\n return this._originalBubble.isVisible;\n }\n\n render(): React.ReactNode {\n return this._originalBubble.render();\n }\n\n}","import styled from \"styled-components\";\n\nexport const SourceOfFundsBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n padding: 0 5rem;\n text-align: center;\n ${({theme}) => theme.font.presets.body};\n font-size: 1.5rem;\n color: ${({theme}) => theme.colors.textLight};\n max-width: 60rem;\n`;","import React from \"react\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {SourceOfFundsBox} from \"./boxes/source-of-funds.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport { DialogTextBox } from \"../modal-dialog/boxes/text/dialog-text.box\";\nimport { ModalDialogActionsComponent } from \"../modal-dialog/modal-dialog-actions.component\";\n\ninterface SourceOfFundsPopupComponentProps{\n messageRow1:string;\n messageRow2:string;\n openChatLabel:string;\n dialogHandler: IModalDialogHandler;\n}\n\nexport class SourceOfFundsPopupComponent extends OrbitComponent{\n\n _closeDialog = () => {\n this.props.dialogHandler.close();\n }\n\n render(){\n return (\n \n {this.props.messageRow1}\n {this.props.messageRow2}\n \n \n )\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {\n IRestrictionRulerService,\n LOGIN_ACTION,\n SHOW_MESSAGE_ACTION_TYPE,\n SOF_MESSAGE_ID\n} from \"./restriction-ruler.service.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {\n RestrictionRulerController_GetRestrictionActionsResponse,\n RestrictionRulerController_NotifyRestrictionActionPerformedRequest\n} from \"../api/api.service\";\nimport {SourceOfFundsPopupComponent} from \"../../components/source-of-funds/source-of-funds-popup.component\";\nimport React from \"react\";\nimport {AppIdentifiers, AreaType, ChatOpenMode} from '@sparkware/uc-sdk-core';\nimport {DISPLAY_MESSAGE_IDS} from \"../../../common/const/casinofied-analytics-consts\";\n\n\nexport class RestrictionRulerService extends ServiceBase implements IRestrictionRulerService{\n constructor(services: IServiceFactoryExtended) {\n super(services);\n if(!this.services.miniOrbit.isEnabled) {\n this.reaction( () => this.services.user.isAuthorized,\n (isAuthorized) => {\n const currentRegulationCode = this.services.regulation.getRegulationCode();\n const enableSOF = this.services.configuration.servicesConfigs.RestrictionRuler.enableSOF;\n if (isAuthorized && !this.services.sdk.isLoginFromRegistration && enableSOF && enableSOF[currentRegulationCode]){\n this._executeRestrictionRulerActions()\n }\n\n },\n {fireImmediately: true}\n )\n }\n\n }\n\n private async _executeRestrictionRulerActions() {\n try {\n let restrictionRulerResponse: RestrictionRulerController_GetRestrictionActionsResponse = await this.services.api.restrictionRulerController.getRestrictionActions(\n {\n RequestedAction: LOGIN_ACTION\n });\n\n this._showSourceOfFundsMessage(restrictionRulerResponse);\n\n } catch (error) {\n this.services.logger.error('Restriction Ruler Service Get Restriction Actions: ', error);\n }\n\n }\n private async _notifyRestrictionActionPerformed(businessCorrelationID: string, actionType: string, actionData: any) {\n\n let request: RestrictionRulerController_NotifyRestrictionActionPerformedRequest = {\n restrictionRuleActionType: actionType,\n actionData: JSON.stringify(actionData || {})\n\n };\n await this.services.api.restrictionRulerController.notifyRestrictionActionPerformed(request);\n await (await this.services.appLauncher).openChat({\n businessCorrelationID: businessCorrelationID,\n appSpecificParameters: {\n openMode: ChatOpenMode.SOF\n },\n channel: {\n area: AreaType.Message,\n source: AppIdentifiers.CasinoClient,\n element: 'sof_required'\n }\n });\n }\n\n private _showSourceOfFundsMessage(restrictionRulerResponse: RestrictionRulerController_GetRestrictionActionsResponse){\n\n let showMessageActions = (restrictionRulerResponse.actions ?? []).filter(action => action.type === SHOW_MESSAGE_ACTION_TYPE && action.actionData?.messageId === SOF_MESSAGE_ID);\n if (showMessageActions.length === 0) {\n return;\n }\n const businessCorrelationID = this.services.tools.getGuid();\n const action = showMessageActions[0];\n\n\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationID,\n displayMessageID: DISPLAY_MESSAGE_IDS.sofRequired //TODO - what should be the value for displayMessageID ?\n });\n\n\n this.services.dialog.showModal(dialogHandler =>\n ,\n {\n icon: this.services.theme.currentTheme.icons.sourceOfFundsIcon,\n isHighPriority: true,\n hideCloseButton: true,\n title: this.services.translation.translate('SOURCE_OF_FUNDS_TITLE'),\n mobileCenterHeader: true,\n forceCentralization: true,\n disableFullscreenMobile: true,\n forceTransparentBackground: true,\n onClosed: () => this._notifyRestrictionActionPerformed(businessCorrelationID, action.type, action.actionData)\n }\n )\n }\n}\n","export interface IRestrictionRulerService {\n\n}\n\nexport const LOGIN_ACTION = 'LOGIN';\nexport const SHOW_MESSAGE_ACTION_TYPE = 'SHOW_MESSAGE';\nexport const SOF_MESSAGE_ID = 'SOF';\n","import {\n AppIdentifiers,\n IAppClosedTopicPayload,\n IDivHostedAppInitParameters,\n IOpenAppData,\n IAppLaunchInfo\n} from '@sparkware/uc-sdk-core';\nimport {ServiceBase} from '../../ServiceBase';\nimport {IElasticEventData, IStructuredLogger} from '../../../../common/interfaces/structured-logging-service-interface';\nimport {IServiceFactoryExtended} from '../../service-factory-extended.interface';\nimport {getCasinofiedDeviceInfo} from \"../casinofied-helper-functions\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {\n IActionHandlerEventParams,\n IAnalyticsDisplayMessage, ICasinofiedAnalyticsService,\n IMessageActionTakenEventParams\n} from \"../../../../common/interfaces/casinofied-analytics-proxy.interface\";\n\nexport interface IAppInitResultReportingDetails {\n errorCode?: number;\n errorDescription?: string;\n loadingTime?: number;\n}\n\nexport class CasinofiedAnalyticsService extends ServiceBase implements ICasinofiedAnalyticsService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n services.sdk.events.onBeforeOAuthStateChanged(() => {\n if (services.user.isAuthorized) { //user is about to logout\n this._sessionClosed();\n }\n\n });\n\n this.reaction(() => services.user.isAuthorized, (isAuthorized) => {\n this._sequentialNumber = 0;\n if (isAuthorized) {\n this._authenticationResult();\n }\n });\n\n this.services.window.subscribeTo.focusLost(() => this._userMinimizedClient());\n this.services.window.subscribeTo.focusGained(() => this._userResumedClient());\n this.services.window.subscribeTo.unload(() => this._userClosedClient());\n this.services.sdk.events.onLoginSessionResumed(() => this._loginSessionResumed());\n }\n\n private get _sequentialNumber(): number {\n const value = this.services.localStorage.getItem('analytics_sequential_number');\n if (Check.isNullOrUndefined(value)) {\n return 0;\n }\n return parseInt(value);\n\n }\n\n private set _sequentialNumber(value: number) {\n this.services.localStorage.setItem('analytics_sequential_number', value);\n }\n\n\n private _createLogger(eventName: string, eventData?: IElasticEventData): IStructuredLogger {\n return this.services.analytics.getLogger(eventData)\n .setEventType(eventName, 'Log', 'Analytics')\n .setAppID(AppIdentifiers.CasinoClient)\n .setSequentialNumber(this._sequentialNumber);\n }\n\n private _createMessageId(): string {\n this._sequentialNumber++;\n const cid = this.services.user.cid;\n const playerSessionId = this.services.user.userData.sessionId;\n return `${cid}_${playerSessionId}_${AppIdentifiers.CasinoClient}_${this._sequentialNumber}`;\n }\n\n async openAppRequest(openAppData: IOpenAppData): Promise {\n try {\n const eventName = 'uc_open_app_request';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n targetAppID: openAppData.appID,\n subBrandID: this.services.sdk.getSubBrandID(),\n sequentialCorrelationID: await this._extractSequentialCorrelationID(openAppData.launchInfo),\n launchInfo: {\n channel: openAppData.launchInfo?.channel,\n sourceAppID: openAppData.launchInfo?.sourceAppID,\n sourceAppVersion: openAppData.launchInfo?.sourceAppVersion,\n trigger: openAppData.launchInfo?.trigger\n }\n }\n });\n logger.setCorrelationId(openAppData.launchInfo?.businessCorrelationID)\n .setBusinessCorrelationID(openAppData.launchInfo?.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.openAppRequest failed`, err);\n }\n\n }\n\n async appInitRequest(appInitParams: IDivHostedAppInitParameters): Promise {\n try {\n const eventName = 'uc_app_init_request';\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n targetAppID: appInitParams.applicationContext.appID,\n subBrandID: appInitParams.applicationContext.subBrandID,\n currencyCode: appInitParams.applicationContext.currencyCode,\n language: appInitParams.applicationContext.languageCode,\n sequentialCorrelationID: await this._extractSequentialCorrelationID(appInitParams.applicationContext.launchInfo),\n productPackageFromID: appInitParams.applicationContext.productPackageFromID,\n productPackageToID: appInitParams.applicationContext.productPackageToID,\n launchInfo: {\n channel: appInitParams.applicationContext.launchInfo.channel,\n sourceAppID: appInitParams.applicationContext.launchInfo.sourceAppID,\n sourceAppVersion: appInitParams.applicationContext.launchInfo.sourceAppVersion,\n trigger: appInitParams.applicationContext.launchInfo.trigger,\n appSpecificParameters: appInitParams.applicationContext.launchInfo.appSpecificParameters,\n openingMode: appInitParams.applicationContext.launchInfo.openingMode,\n },\n userInfo: {\n userMode: appInitParams.userInfo.userMode,\n regulationTypeID: appInitParams.userInfo.regulationTypeID,\n isVip: appInitParams.userInfo.isVIP,\n isFTD: appInitParams.userInfo.isFTD,\n isPromotionPermitted: appInitParams.userInfo.isPromotionPermitted,\n RMS: appInitParams.userInfo.RMS,\n },\n timeZoneUTCOffset: appInitParams.geoInfo.timeZoneUTCOffset,\n deviceInfo: {\n deviceTypeID: appInitParams.deviceInfo.deviceType,\n os: appInitParams.deviceInfo.OS,\n isHybrid: appInitParams.deviceInfo.isHybrid,\n isNative: appInitParams.deviceInfo.isNative,\n browserType: appInitParams.deviceInfo.browserType,\n resolution: this._getResolution()\n //proxyType\n }\n }\n });\n\n logger.setCorrelationId(appInitParams.applicationContext.launchInfo.businessCorrelationID)\n .setBusinessCorrelationID(appInitParams.applicationContext.launchInfo.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.appInitRequest failed`, err);\n }\n }\n\n async appInitResult(appInitParams: IDivHostedAppInitParameters, appInitResultReportingDetails?: IAppInitResultReportingDetails): Promise {\n appInitResultReportingDetails = {\n errorCode: 0,\n errorDescription: '',\n ...appInitResultReportingDetails\n }\n const getLaunchInfo = () => {\n try {\n return {\n channel: appInitParams.applicationContext.launchInfo.channel,\n sourceAppID: appInitParams.applicationContext.launchInfo.sourceAppID,\n sourceAppVersion: appInitParams.applicationContext.launchInfo.sourceAppVersion,\n trigger: appInitParams.applicationContext.launchInfo.trigger,\n appSpecificParameters: appInitParams.applicationContext.launchInfo.appSpecificParameters,\n openingMode: appInitParams.applicationContext.launchInfo.openingMode,\n };\n } catch (err) {\n return null;\n }\n }\n\n try {\n const eventName = 'uc_app_init_result';\n const logger = this._createLogger(eventName, {\n [eventName]: Object.assign({\n messageID: this._createMessageId(),\n subBrandID: appInitParams.applicationContext.subBrandID,\n sequentialCorrelationID: await this._extractSequentialCorrelationID(appInitParams.applicationContext.launchInfo),\n isOk: appInitResultReportingDetails.errorCode === 0,\n errorCode: appInitResultReportingDetails.errorCode,\n errorDescription: appInitResultReportingDetails.errorDescription,\n targetAppID: appInitParams.applicationContext.appID,\n launchInfo: getLaunchInfo()\n }, Check.isNullOrUndefined(appInitResultReportingDetails.loadingTime) ? {} : {loadingTime: appInitResultReportingDetails.loadingTime})//add duration if it exists\n });\n\n logger.setCorrelationId(appInitParams.applicationContext.launchInfo?.businessCorrelationID)\n .setBusinessCorrelationID(appInitParams.applicationContext.launchInfo?.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.appInitResult failed`, err);\n }\n\n }\n\n private async _extractSequentialCorrelationID(launchInfo: IAppLaunchInfo): Promise {\n if (!launchInfo?.businessCorrelationID) {\n return 1;\n } else {\n return (await this.services.appLauncher).getSequentialCorrelationIdHandler(launchInfo.businessCorrelationID)?.getCurrentValue() ?? 1\n }\n }\n\n appClosed(appClosedParams: IAppClosedTopicPayload) {\n try {\n\n\n const eventName = 'uc_app_closed';\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n sequentialCorrelationID: 1,\n targetAppID: appClosedParams.appID,\n appCloseReason: appClosedParams.closeReason, //TODO - what values should be here for closeReason\n channel: appClosedParams.launchInfo?.channel\n }\n });\n\n logger.setCorrelationId(appClosedParams.launchInfo?.businessCorrelationID)\n .setBusinessCorrelationID(appClosedParams.launchInfo?.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.appClosed failed`, err);\n }\n }\n\n appDisposed(appID: string, businessCorrelationID: string, target: string): void {\n try {\n const eventName = 'uc_app_disposed';\n const logger = this._createLogger(eventName, {\n [eventName]: {\n subBrandID: this.services.sdk.getSubBrandID(),\n targetAppID: appID\n }\n });\n\n logger.setCorrelationId(businessCorrelationID)\n .setBusinessCorrelationID(businessCorrelationID)\n .info(target);\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.appDisposed failed`, err);\n }\n }\n\n messageDisplay(params: IAnalyticsDisplayMessage): void {\n try {\n const eventName = 'uc_app_message_displayed';\n const extraDataEventName = 'extraData';\n\n const eventData = {\n [eventName]: {\n targetAppID: AppIdentifiers.CasinoClient,\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n displayMessageID: params.displayMessageID,\n sequentialCorrelationID: 1,\n displayMessageName: params.displayMessageName\n }\n }\n\n if (params.extraData) {\n eventData[extraDataEventName] = {\n totalStakes: params.extraData.totalStakes,\n netPosition: params.extraData.netPosition,\n totalWins: params.extraData.totalWins,\n totalLosses: params.extraData.totalLosses,\n bankrollCurr: params.extraData.bankrollCurr,\n amountBankroll: params.extraData.amountBankroll\n }\n }\n\n const logger = this._createLogger(eventName, eventData);\n\n logger.setCorrelationId(params.correlationID || params.businessCorrelationID)\n .setBusinessCorrelationID(params.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.messageDisplay failed`, err);\n }\n }\n\n private _getResolution() {\n return window.screen.width * window.devicePixelRatio + \"x\" + window.screen.height * window.devicePixelRatio;\n }\n\n private _authenticationResult(): void {\n try {\n const eventName = 'uc_authentication_result';\n const deviceInfo = getCasinofiedDeviceInfo(this.services);\n const logger = this._createLogger(eventName, {\n [eventName]: {\n isOk: true,\n errorCode: 0,\n errorDescription: \"\",\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n deviceInfo: {\n deviceTypeID: deviceInfo.deviceType,\n os: deviceInfo.OS,\n isHybrid: deviceInfo.isHybrid,\n isNative: deviceInfo.isNative,\n browserType: deviceInfo.browserType,\n resolution: this._getResolution()\n }\n }\n });\n\n logger.info();\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService._authenticationResult failed`, err);\n }\n }\n\n private _sessionClosed(): void {\n try {\n const eventName = 'uc_session_closed';\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n closingReasonID: 1\n }\n });\n\n logger.info();\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService._sessionClosed failed`, err);\n }\n }\n\n actionHandler(params: IActionHandlerEventParams): void {\n try {\n const eventName = 'uc_action_handler_result';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n sequentialCorrelationID: 1,\n actionName: params.actionName,\n actionHandlerStep: params.actionHandlerStep,\n actionResult: params.actionResult\n }\n });\n\n logger.setCorrelationId(params.businessCorrelationID)\n .setBusinessCorrelationID(params.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.actionHandler failed`, err);\n }\n\n }\n\n messageActionTaken(params: IMessageActionTakenEventParams) {\n try {\n const eventName = 'uc_app_message_action_taken';\n\n const eventData: any = {\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n actionType: params.actionType,\n displayMessageName: params.displayMessageName,\n extraData: params.extraData\n }\n\n if(params.extraData) {\n eventData.extraData = params.extraData;\n }\n\n\n const logger: IElasticEventData = this._createLogger(eventName, {\n [eventName]: eventData\n });\n\n if (params.sendLogLevelOnly) {\n logger.setEventType(eventName, 'Log');\n }\n\n logger.setCorrelationId(params.correlationID || params.businessCorrelationID)\n .setBusinessCorrelationID(params.businessCorrelationID)\n .info();\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.messageActionTaken failed`, err);\n }\n }\n\n reportDuration(loadSubject: string, duration: number, appId: string): void {\n try {\n const eventName = 'uc_app_duration_report';\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n loadSubject: loadSubject,\n loadingTime: duration,\n targetAppID: appId\n }\n });\n logger.info();\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.reportDuration failed`, err);\n }\n }\n\n private _userClosedClient() {\n try {\n if (!this.services.user.isAuthorized) {\n return;\n }\n const eventName = 'clientStateChanged';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n subBrandID: this.services.sdk.getSubBrandID(),\n messageID: this._createMessageId(),\n clientStateID: 3,\n clientStateName: \"Closed\"\n }\n });\n\n logger.info();\n logger.info(\"nts-deposit-logs\");\n\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.userClosedClient failed`, err);\n }\n }\n\n private _userMinimizedClient() {\n try {\n if (!this.services.user.isAuthorized) {\n return;\n }\n const eventName = 'clientStateChanged';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n subBrandID: this.services.sdk.getSubBrandID(),\n messageID: this._createMessageId(),\n clientStateID: 2,\n clientStateName: \"Background\"\n }\n });\n\n logger.info();\n logger.info(\"nts-deposit-logs\");\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.userMinimizedClient failed`, err);\n }\n }\n\n private _userResumedClient() {\n try {\n if (!this.services.user.isAuthorized) {\n return;\n }\n const eventName = 'clientStateChanged';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n subBrandID: this.services.sdk.getSubBrandID(),\n messageID: this._createMessageId(),\n clientStateID: 1,\n clientStateName: \"Foreground\"\n }\n });\n\n logger.info();\n logger.info(\"nts-deposit-logs\");\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.userResumedClient failed`, err);\n }\n }\n\n private _loginSessionResumed() {\n try {\n if (!this.services.user.isAuthorized) {\n return;\n }\n const eventName = 'clientStateChanged';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n subBrandID: this.services.sdk.getSubBrandID(),\n messageID: this._createMessageId(),\n clientStateID: 4,\n clientStateName: \"SessionResumed\"\n }\n });\n\n logger.info();\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService._loginSessionResumed failed`, err);\n }\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {IAbTestingAiSortGamesListsService, } from \"./ab-testing-ai-sort-games-lists.service.interface\";\n\n/*\n * Token structure for this feature:\n *\n * \"AbTestingAiSortGamesLists\": {\n * \"Properties\": {\n * \"arenas\": [\"homePage\", \"slots\"]\n * }\n * }\n *\n */\n\nexport class AbTestingAiSortGamesListsService extends ServiceBase implements IAbTestingAiSortGamesListsService {\n\n public arenaHasAiSorting(arenaName: string): boolean {\n return this.services.abTestingFeatureDataProvider.aiSortGamesLists.arenas.indexOf(arenaName) !== -1;\n }\n}\n","import { Check } from '@sparkware/app-utils';\nimport {CashierSessionType} from \"@sparkware/uc-sdk-core\";\n\nexport function isDepositSessionType(sessionType: number | string | null | undefined): boolean {\n if(Check.isNullOrUndefined(sessionType)) {\n return true;\n }\n\n sessionType = sessionType.toString();\n return sessionType === CashierSessionType.QuickDeposit.toString()\n || sessionType === CashierSessionType.FullCashier.toString()\n || sessionType === CashierSessionType.Deposit.toString();\n}\n\nexport function isCashoutSessionType(sessionType: number | string | null | undefined): boolean {\n // cashout should be open only when session type is defined and only if is withdrawal\n if(Check.isNullOrUndefined(sessionType)) {\n return false;\n }\n\n sessionType = sessionType.toString();\n return sessionType === CashierSessionType.Withdraw.toString();\n}","import {ICashierExternalLinkHandler} from \"./cashier.external-link-handler.interface\";\nimport {OpenCashierOptions} from \"../../../../../common/interfaces/cashier.service.interface\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nexport enum CASHIER_POST_ACTIONS {\n OPEN_CONTROL_CENTER = '101'\n}\n\nexport class CashierExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements ICashierExternalLinkHandler {\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.CASHIER;\n }\n\n private get _isOnHybrid(): boolean {\n return this.services.device.hybrid.inCasino || this.services.device.hybrid.isEmbedded;\n }\n\n private get _isOnMacSafari(): boolean {\n return this.services.device.os.isMacOS && this.services.device.browser.isSafari && !this.services.device.isProbablyIOSDevice;\n }\n\n private get _isMobileOS(): boolean {\n return this.services.device.os.isMobileOS || this.services.device.isProbablyIOSDevice;\n }\n\n async openCashier(options?: OpenCashierOptions): Promise {\n if(!await this.services.user.ensureUserIsLoggedIn('Cashier')) {\n return;\n }\n\n const url = await this._getGnwpUrl(options);\n\n if(this._isOnHybrid) {\n this.services.hybrid.openExternalLink(url);\n } else if(this._isOnMacSafari) {\n this._openInNewTab(url);\n } else if(this._isMobileOS) {\n await this._redirect(url);\n } else {\n await this._showExternalLinkDialog(url);\n }\n }\n\n protected async _getGnwpUrl(options?: OpenCashierOptions): Promise {\n return await (await this.services.gnwp).getCashierUrl({\n target: this._isMobileOS ? 1 : 2, //1 - redirect, 2 = iframe\n sessionType: options?.sessionType,\n promCode: options?.PromCode\n });\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1017,\n maxHeight: 686,\n zIndex: ExternalLinksZIndexes.Cashier,\n hideCloseButton: false,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n iframeExtraCssClass: CyClass('cy-cashier-external-link-container')\n };\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise {\n\n if(CIPropRead.getStringProperty('state', this._parseMessageData(message.data))?.toLowerCase() === 'backtogame') {\n this._closeExternalLinkDialog();\n return;\n }\n\n const actionId = this._extractActionId(message);\n\n switch (actionId) {\n case CASHIER_POST_ACTIONS.OPEN_CONTROL_CENTER:\n this._openControlCenter(message);\n break;\n default:\n this.services.logger.debug('CashierExternalLinkHandler: Unknown actionId', actionId);\n break;\n }\n\n }\n\n private async _openControlCenter(message):Promise {\n this._closeExternalLinkDialog();\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: this._extractChannel(message),\n appSpecificParameters: this._extractAppSpecificParameters(message)\n });\n }\n\n\n}","import {\n ICashierService,\n OpenCashierOptions,\n OpenDepositOptions,\n OpenTransactionHistoryOptions,\n OpenWithdrawOptions\n} from \"../../../common/interfaces/cashier.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {AppIdentifiers, CashierSessionType, ProductPackageToID} from \"@sparkware/uc-sdk-core\";\nimport {isCashoutSessionType, isDepositSessionType} from \"../../../common/utils/cashier-util\";\nimport {IActionHandlerEventParams} from \"../../../common/interfaces/casinofied-analytics-proxy.interface\";\nimport {\n UserEligibilityController_CashoutWidgetEligibilityRequest,\n UserEligibilityController_CashoutWidgetEligibilityResponse,\n UserEligibilityController_DepositWidgetEligibilityRequest,\n UserEligibilityController_DepositWidgetEligibilityResponse,\n UserEligibilityController_TransactionHistoryWidgetEligibilityRequest,\n UserEligibilityController_TransactionHistoryWidgetEligibilityResponse\n} from \"../api/api.service\";\nimport {IWidgetABEligibility} from \"../ab-testing/ab-testing-feature-data-provider.service.interface\";\nimport {IGeoLocationInfo} from \"../../../common/interfaces/geo-location-info.interface\";\nimport {\n PendingActionResultEnum\n} from \"../external-links/handlers/pending-action/pending-action.external-link-handler.interface\";\nimport {DialogButtonClickHandleResultEnum} from \"../dialog/dialog.service.interface\";\n\n\ninterface IEligibilityCheckResult {\n blockedByPendingAction: boolean;\n isEligible: boolean;\n businessCorrelationID: string;\n abCheckActionHandlerEventData?: IActionHandlerEventParams;\n eligibilityActionHandlerEventData?: IActionHandlerEventParams;\n}\n\ntype UnifiedCashierWidgetEligibilityResponse =\n UserEligibilityController_TransactionHistoryWidgetEligibilityResponse |\n UserEligibilityController_DepositWidgetEligibilityResponse |\n UserEligibilityController_CashoutWidgetEligibilityResponse;\n\ntype UnifiedCashierWidgetEligibilityRequest =\n UserEligibilityController_TransactionHistoryWidgetEligibilityRequest |\n UserEligibilityController_DepositWidgetEligibilityRequest |\n UserEligibilityController_CashoutWidgetEligibilityRequest;\n\ntype INTSEligibilityCallback = (request: UnifiedCashierWidgetEligibilityRequest) => Promise;\n\nexport class CashierService extends ServiceBase implements ICashierService {\n\n getProductPackage(): ProductPackageToID {\n if (this.services.device.os.isMobileOS) {\n return ProductPackageToID.FULL_CASHIER_MOBILE;\n } else {\n return ProductPackageToID.FULL_CASHIER_PC;\n }\n }\n\n private _reportEligibilityEvents(eligibilityResult: IEligibilityCheckResult): void {\n if (eligibilityResult.abCheckActionHandlerEventData) {\n this.services.casinofiedAnalytics.actionHandler(eligibilityResult.abCheckActionHandlerEventData);\n }\n\n if (eligibilityResult.eligibilityActionHandlerEventData) {\n this.services.casinofiedAnalytics.actionHandler(eligibilityResult.eligibilityActionHandlerEventData);\n }\n }\n\n\n async isEligibleForDepositWidget(): Promise {\n const eligibility = await this._getDepositWidgetEligibility();\n return eligibility.isEligible;\n }\n\n async isCashierInRedirectMode(): Promise {\n return this.services.device.os.isMobileOS && !(await this.isEligibleForDepositWidget());\n }\n\n private async _evaluateNTSEligibility(appName: AppIdentifiers, ntsEligibilityCallback: INTSEligibilityCallback): Promise {\n try {\n let geoInfo: IGeoLocationInfo;\n try {\n geoInfo = await this.services.sdk.getGeoLocationInfo();\n }\n catch (geoError) {\n this.services.logger.error(`Failed to get geo info for ${appName} Widget Eligibility`, geoError);\n }\n return await ntsEligibilityCallback({\n LoginCountry: this.services.sdk.getCountryIso3(),\n StateID: geoInfo?.stateId\n });\n } catch (err) {\n this.services.logger.error(`Failed to call ${appName} Widget Eligibility`, err);\n return {\n isEligible: false,\n ineligibleReason: \"error\",\n errorDescription: `Failed to query NTS ${appName} eligibility`,\n errorID: 1,\n hasErrors: true\n }\n }\n }\n\n private async _getWidgetEligibility(appName: AppIdentifiers,\n analyticsActionName: string,\n checkPendingActions: () => Promise,\n getAbEligibility: () => (IWidgetABEligibility | null),\n ntsEligibilityCallback: INTSEligibilityCallback): Promise {\n\n\n if (this.services.miniOrbit.isEnabled) {\n // In mini orbit, cashier is handled directly by the app.\n // For example, in poker, cashier is opened directly by the poker app\n return {\n isEligible: false,\n businessCorrelationID: \"\",\n blockedByPendingAction: false\n };\n }\n\n const widgetConfigs = this.services.configuration.servicesConfigs.AppLauncher.apps[appName];\n\n if(this.services.configuration.servicesConfigs.PendingActions.enableExplicitCheck\n && (widgetConfigs.force || widgetConfigs.enabled)) {\n const pendingActionResult = await checkPendingActions();\n if(pendingActionResult !== PendingActionResultEnum.ContinueCurrentFlow) {\n return {\n isEligible: false,\n blockedByPendingAction: true,\n businessCorrelationID: \"\"\n }\n }\n }\n\n\n const businessCorrelationID = this.services.tools.getGuid();\n\n if (widgetConfigs.force) {\n return {\n isEligible: true,\n businessCorrelationID: businessCorrelationID,\n blockedByPendingAction: false\n };\n }\n\n if (!widgetConfigs.enabled) {\n return {\n isEligible: false,\n businessCorrelationID: \"\",\n blockedByPendingAction: false\n };\n }\n\n const disableCashierWidgetsABTesting = Boolean(this.services.configuration.servicesConfigs.AbTesting.disableCashierWidgetsABTesting);\n\n let abCheckActionHandlerEventData: IActionHandlerEventParams | null = null;\n let abEligibility: IWidgetABEligibility | null;\n\n if(!disableCashierWidgetsABTesting) {\n abEligibility = getAbEligibility();\n if(abEligibility) {\n abCheckActionHandlerEventData = {\n businessCorrelationID: businessCorrelationID,\n actionName: analyticsActionName,\n actionHandlerStep: 'ab_test_step',\n actionResult: {\n featureName: abEligibility.featureName,\n testGroup: abEligibility.testGroup,\n testID: abEligibility.testId\n }\n };\n }\n }\n\n\n let ntsEligibility = await this._evaluateNTSEligibility(appName, ntsEligibilityCallback);\n const eligibilityActionHandlerEventData: IActionHandlerEventParams = {\n businessCorrelationID: businessCorrelationID,\n actionName: analyticsActionName,\n actionHandlerStep: 'eligibility_check_step',\n actionResult: {\n isEligible: ntsEligibility.isEligible,\n ineligibleReason: ntsEligibility.ineligibleReason,\n errorCode: ntsEligibility.errorID,\n errorMessage: ntsEligibility.errorDescription,\n hasError: Boolean(ntsEligibility.errorID)\n }\n };\n\n return {\n isEligible: (abEligibility?.isEligible || disableCashierWidgetsABTesting) && ntsEligibility.isEligible,\n businessCorrelationID: businessCorrelationID,\n abCheckActionHandlerEventData: abCheckActionHandlerEventData,\n eligibilityActionHandlerEventData: eligibilityActionHandlerEventData,\n blockedByPendingAction: false\n };\n }\n\n private async _getDepositWidgetEligibility(): Promise {\n //On mini orbit, we want Sport/Poker to open Deposit widget, so Eligibility checks are performed by them.\n if (this.services.miniOrbit.isEnabled) {\n return Promise.resolve(\n {\n isEligible: true,\n businessCorrelationID: this.services.tools.getGuid(),\n blockedByPendingAction: false\n }\n );\n }\n\n return this._getWidgetEligibility(\n AppIdentifiers.UnifiedCashier,\n 'deposit',\n async () => await (await this.services.externalLinks).openDepositPendingAction(),\n () => this.services.abTestingFeatureDataProvider.depositWidget,\n (params: UnifiedCashierWidgetEligibilityRequest) => this.services.api.userEligibilityController.depositWidgetEligibility(params)\n );\n }\n\n private async _getCashOutWidgetEligibility(): Promise {\n return this._getWidgetEligibility(\n AppIdentifiers.UnifiedCashout,\n 'withdraw',\n () => Promise.resolve(PendingActionResultEnum.ContinueCurrentFlow),\n () => this.services.abTestingFeatureDataProvider.cashoutWidget,\n (params: UnifiedCashierWidgetEligibilityRequest) => this.services.api.userEligibilityController.cashoutWidgetEligibility(params)\n );\n }\n\n private async _getTransactionHistoryWidgetEligibility(): Promise {\n return this._getWidgetEligibility(\n AppIdentifiers.TransactionHistory,\n 'transaction_history',\n async () => await (await this.services.externalLinks).openTransactionHistoryPendingAction(),\n () => this.services.abTestingFeatureDataProvider.transactionHistoryWidget,\n (params: UnifiedCashierWidgetEligibilityRequest) => this.services.api.userEligibilityController.transactionHistoryWidgetEligibility(params)\n );\n }\n\n\n async openDeposit(options: OpenDepositOptions): Promise {\n\n if(!await this.services.user.ensureUserIsLoggedIn('CashierService.openDeposit')) {\n return;\n }\n\n const depositEligibility = await this._getDepositWidgetEligibility();\n\n if(depositEligibility.blockedByPendingAction) {\n return;\n }\n\n this._reportEligibilityEvents(depositEligibility);\n\n if (depositEligibility.isEligible) {\n await (await this.services.appLauncher).openDepositWidget({\n businessCorrelationID: depositEligibility.businessCorrelationID || this.services.tools.getGuid(),\n channel: options.channel,\n appSpecificParameters: {\n promoCode: options?.PromCode\n },\n ...options.launchInfo\n });\n } else {\n await this.openOldCashier({\n sessionType: CashierSessionType.QuickDeposit,\n ...options\n });\n }\n }\n\n async openWithdraw(options: OpenWithdrawOptions): Promise {\n if(!await this.services.user.ensureUserIsLoggedIn('CashierService.openWithdraw')) {\n return;\n }\n\n const cashOutWidgetEligibility = await this._getCashOutWidgetEligibility();\n\n if(cashOutWidgetEligibility.blockedByPendingAction) {\n return;\n }\n\n this._reportEligibilityEvents(cashOutWidgetEligibility);\n\n if(this.services.configuration.servicesConfigs.AppLauncher.apps.PAYMENTS_CASHOUT.redirectToVerificationModuleForNonEligible) {\n\n if(cashOutWidgetEligibility.eligibilityActionHandlerEventData?.actionResult?.hasError) {\n this.services.dialog.showSimpleTextModal({\n text: this.services.regulation.getGeneralErrorMessage(),\n showEmptyTitle: true,\n buttons: [\n {\n text: this.services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n return;\n }\n\n if(!cashOutWidgetEligibility.isEligible) {\n await (await this.services.externalLinks).openUploadDocumentFromMyAccount();\n return;\n }\n }\n\n if (cashOutWidgetEligibility.isEligible) {\n await (await this.services.appLauncher).openCashoutWidget({\n businessCorrelationID: cashOutWidgetEligibility.businessCorrelationID || this.services.tools.getGuid(),\n channel: options.channel,\n sequentialCorrelationID: 1,\n ...options.launchInfo\n });\n } else {\n await this.openOldCashier({\n sessionType: CashierSessionType.CashOutDepositHistory,\n ...options\n });\n }\n }\n\n async openTransactionHistory(options: OpenTransactionHistoryOptions): Promise {\n if(!await this.services.user.ensureUserIsLoggedIn('CashierService.openTransactionHistory')) {\n return;\n }\n\n const transactionHistoryWidgetEligibility = await this._getTransactionHistoryWidgetEligibility();\n\n if(transactionHistoryWidgetEligibility.blockedByPendingAction) {\n return;\n }\n\n this._reportEligibilityEvents(transactionHistoryWidgetEligibility);\n\n if (transactionHistoryWidgetEligibility.isEligible) {\n await (await this.services.appLauncher).openTransactionHistoryWidget({\n businessCorrelationID: transactionHistoryWidgetEligibility.businessCorrelationID || this.services.tools.getGuid(),\n channel: options.channel,\n ...options.launchInfo\n });\n } else {\n await this.openOldCashier({\n sessionType: CashierSessionType.TransactionHistory,\n ...options\n });\n }\n }\n\n async openCashier(options: OpenCashierOptions = {}): Promise {\n if(!await this.services.user.ensureUserIsLoggedIn('CashierService.openCashier')) {\n return;\n }\n\n if (isDepositSessionType(options.sessionType)) {\n const depositEligibility = await this._getDepositWidgetEligibility();\n if(depositEligibility.blockedByPendingAction) {\n return;\n }\n\n this._reportEligibilityEvents(depositEligibility);\n if (depositEligibility.isEligible) {\n await (await this.services.appLauncher).openDepositWidget({\n businessCorrelationID: depositEligibility.businessCorrelationID || this.services.tools.getGuid(),\n channel: options.channel,\n appSpecificParameters: {\n promoCode: options?.PromCode || \"\"\n }\n });\n return;\n }\n } else if (isCashoutSessionType(options.sessionType)) {\n const cashOutEligibility = await this._getCashOutWidgetEligibility();\n if(cashOutEligibility.blockedByPendingAction) {\n return;\n }\n\n this._reportEligibilityEvents(cashOutEligibility);\n if (cashOutEligibility.isEligible) {\n await (await this.services.appLauncher).openCashoutWidget({\n businessCorrelationID: cashOutEligibility.businessCorrelationID || this.services.tools.getGuid(),\n channel: options.channel,\n });\n return;\n }\n }\n\n await this._openCashierExternalLink(options);\n }\n\n async openOldCashier(options: OpenCashierOptions = {}): Promise {\n if(!await this.services.user.ensureUserIsLoggedIn('CashierService.openOldCashier')) {\n return;\n }\n await this._openCashierExternalLink(options);\n }\n\n private async _openCashierExternalLink(options: OpenCashierOptions = {}): Promise {\n await (await this.services.externalLinks).openCashier(options);\n }\n\n async openUploadDocumentsFromCashier(): Promise {\n return this._openCashierExternalLink({\n sessionType: CashierSessionType.VerifyId\n });\n }\n\n}","import {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {DisposableObject} from \"../../../../utils/disposable-object\";\n\nexport abstract class ExternalLinkHandlerBase extends DisposableObject {\n constructor(protected readonly services: IServiceFactoryExtended) {\n super()\n }\n\n\n protected _openInNewTab(url: string): void {\n if(this.services.device.hybrid.isHybrid) {\n this.services.hybrid.openExternalLink(url);\n } else {\n this.services.window.openInNewTab(url);\n }\n }\n}","import styled from \"styled-components\";\n\n\nexport const ExternalLinkIframeContainerBox = styled.div<{maxWidth: number; maxHeight: number; isMobileOS: boolean}>`\n position: relative;\n max-width: ${props => props.maxWidth + 'px'};\n max-height: ${props => props.maxHeight + 'px'};\n\n width: ${props => props.isMobileOS ? 'calc(100vw - env(safe-area-inset-left) - env(safe-area-inset-right))' : 'calc(100vw - 30px)'};\n height: ${props => props.isMobileOS ? '100%' : 'calc(100vh - 30px)'};\n box-sizing: border-box;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n max-width: unset;\n max-height: unset;\n overflow-y: auto;\n }\n`\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ExternalLinkCloseButtonWrapperBox = styledBox('ExternalLinkCloseButtonWrapperBox');","import styled from \"styled-components\";\n\nexport const ExternalLinkIframeBox = styled.iframe`\n width: 100%;\n height: 100%;\n`","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport Device from \"../../../sdk/src/utils/device/device\";\nimport classNames from \"classnames\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ExternalLinkIframeBox} from \"./boxes/external-link-iframe.box\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\n\ninterface ExternalLinkIframeComponentProps {\n id: string;\n httpVerb: 'GET' | 'POST';\n scrolling?: \"auto\" | 'no';\n url: string;\n onIframeCreated: (element: HTMLIFrameElement) => void;\n className?: string;\n}\n\nexport const ExternalLinkIframeComponent: React.FC = observer((props) => {\n const services = useServices();\n \n const captureIframeElementRef = (element: HTMLIFrameElement) => {\n if(props.httpVerb === 'POST') {\n services.dom.performFormPostForUrl(props.url, {\n target: props.id\n });\n }\n\n props.onIframeCreated(element);\n }\n\n return (\n \n );\n});","import React from 'react';\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ExternalLinkIframeContainerBox} from \"./boxes/external-link-iframe-container.box\";\nimport {ExternalLinkCloseButtonWrapperBox} from \"./boxes/external-link-close-button-wrapper.box\";\nimport {ExternalLinkIframeComponent} from \"./external-link-iframe.component\";\n\n\ninterface ExternalLinkIframeInModalDialogComponentProps {\n url: string;\n dialogHandler: IModalDialogHandler;\n maxWidth: () => number;\n maxHeight: () => number;\n onIframeCreated: (element: HTMLIFrameElement) => void;\n hideCloseButton: boolean;\n id: string;\n scrolling?: \"auto\" | 'no';\n iframeClassName?: string;\n httpVerb: 'GET' | 'POST';\n}\n\n\n@observer\nexport class ExternalLinkIframeInModalDialogComponent extends OrbitComponent {\n private _onCloseClick = () => {\n this.props.dialogHandler.close();\n }\n\n private _renderCloseButton = () => {\n if (this.services.device.os.isMobileOS || this.props.hideCloseButton) {\n return null;\n }\n\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n\n return (\n \n \n \n );\n }\n\n render() {\n return (\n \n\n {this._renderCloseButton()}\n\n \n \n );\n }\n}","import React from 'react';\nimport {ExternalLinkIframeInModalDialogComponent} from \"../../../components/external-links/external-link-iframe-in-modal-dialog.component\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IModalDialogHandler} from \"../../dialog/dialog.service.interface\";\nimport { observable, runInAction, makeObservable } from \"mobx\";\nimport {NullableNumber} from \"../../../../common/types/nullable-types\";\nimport {ExternalLinksZIndexes} from \"../external-links-z-indexes\";\nimport {ExternalLinkIframeComponent} from \"../../../components/external-links/external-link-iframe.component\";\n\nexport interface ExternalLinkIframeRendererOptions {\n maxWidth: number;\n maxHeight: number;\n zIndex: number;\n shouldBeClosedOnlyByUser?: boolean;\n onClosed: () => Promise;\n hideCloseButton: boolean;\n analyticsAction: string;\n httpVerb: 'GET' | 'POST';\n createAsHidden?: boolean;\n iframeScrolling?: \"auto\" | \"no\";\n iframeExtraCssClass?: string;\n}\n\nexport class ExternalLinkIframeRenderer {\n constructor(private readonly services: IServiceFactoryExtended,\n private readonly _options: ExternalLinkIframeRendererOptions) {\n makeObservable(this);\n\n this._id = services.tools.getGuid();\n }\n dispose(): void {\n this._dialogHandler?.close();\n }\n\n display(): void {\n this._dialogHandler?.display();\n }\n\n @observable.ref\n private _customMaxWidth: NullableNumber = null;\n @observable.ref\n private _customMaxHeight: NullableNumber = null;\n setMaxSize(maxWidth: number, maxHeight: number): void {\n runInAction(() => {\n this._customMaxWidth = maxWidth;\n this._customMaxHeight = maxHeight;\n });\n }\n\n getMaxWidth = (): number => {\n return this._customMaxWidth ?? this._options.maxWidth;\n }\n getMaxHeight = (): number => {\n return this._customMaxHeight ?? this._options.maxHeight;\n }\n\n\n private readonly _id: string;\n\n private _dialogHandler: IModalDialogHandler | null = null;\n @observable.ref\n iframeElementRef: HTMLIFrameElement | null = null;\n\n\n private _onIframeCreated = (iframeElement: HTMLIFrameElement | null) => {\n runInAction(() => {\n this.iframeElementRef = iframeElement;\n });\n };\n\n showInModalDialog(url: string): Promise {\n return new Promise((resolve) => {\n\n this.services.dialog.showModal((dialogHandler) => {\n this._dialogHandler = dialogHandler;\n return (\n \n )\n }, {\n disableFullscreenMobile: false,\n hideCloseButton: true,\n noDefaultContentPadding: true,\n isHighPriority: true,\n hideBorders: this.services.mediaQuery.lAndBelow,\n forceZOrder: this._options.zIndex,\n shouldBeClosedOnlyByUser: this._options.shouldBeClosedOnlyByUser,\n overflow: 'unset',\n createAsHidden: this._options.createAsHidden,\n forceFullscreenTablet: true,\n onClosedByXButton: () => {\n this.services.analytics.sendTechnicalEvent(this._options.analyticsAction, 'CloseBtnClicked');\n },\n onClosed: () => {\n this._options.onClosed().then(() => resolve());\n }\n });\n });\n }\n\n renderAsReactElement(url: string): React.ReactElement {\n return (\n \n );\n }\n\n\n updateZIndex(zIndex: ExternalLinksZIndexes): void {\n this._dialogHandler.zIndex = zIndex;\n }\n\n\n}","import {ExternalLinkHandlerBase} from \"./external-link-handler-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {\n ExternalLinkIframeRenderer,\n ExternalLinkIframeRendererOptions\n} from \"../renderers/external-link-iframe.renderer\";\nimport {GNWP_SOURCES} from \"../../gnwp/gnwp-consts\";\nimport {\n NullableUndefinedNumber,\n NullableUndefinedString, UndefinedNumber,\n UndefinedString\n} from \"../../../../common/types/nullable-types\";\nimport {\n AreaType,\n ControlCenterDeeplink,\n ControlCenterOpenSource,\n IChannel,\n IControlCenterFullSpecificParams\n} from \"@sparkware/uc-sdk-core\";\nimport {isCashoutSessionType, isDepositSessionType} from \"../../../../common/utils/cashier-util\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\nimport {OpenCashierOptions, OpenDepositOptions} from \"../../../../common/interfaces/cashier.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {CIPropRead} from \"../../../../utils/case-insensitive-property-reader\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\n\nexport type ExternalLinkInIframeRendererParams = Omit;\n\nexport abstract class ExternalLinkInIframeHandlerBase extends ExternalLinkHandlerBase {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this.addSdkEventSubscription(this.services.sdk.events.onPostMessage(this._handlePostMessage));\n }\n\n protected abstract _onPostMessageReceived(message: MessageEvent): Promise;\n protected abstract _getGnwpSource(): GNWP_SOURCES;\n\n protected _parseMessageData(message: MessageEvent): any {\n if(Check.isString(message.data)) {\n try {\n return JSON.parse(message.data);\n } catch (err) {\n this.services.logger.error(`Failed to parse external link post message data: ${message.data}`, err);\n }\n\n }\n\n return message.data;\n }\n\n protected _extractActionId(message: MessageEvent): NullableUndefinedString {\n return CIPropRead.getStringProperty('actionId', this._parseMessageData(message));\n }\n\n protected _extractUrl(message: MessageEvent): NullableUndefinedString {\n return CIPropRead.getStringProperty('url', this._parseMessageData(message));\n }\n\n protected _extractGameId(message: MessageEvent): NullableUndefinedNumber {\n return CIPropRead.getNumericProperty('gameId', this._parseMessageData(message));\n }\n\n protected _extractPromoCode(message: MessageEvent): NullableUndefinedString {\n return CIPropRead.getStringProperty(\"PromCode\", this._parseMessageData(message))\n || CIPropRead.getStringProperty(\"promoCode\", this._parseMessageData(message));\n }\n\n protected _extractCashierTabId(message: MessageEvent): UndefinedNumber {\n return CIPropRead.getNumericProperty(\"TabId\", this._parseMessageData(message)) ?? undefined;\n }\n\n protected _extractMyAccountTabId(message: MessageEvent): MyAccountTab | undefined {\n return CIPropRead.getNumericProperty(\"TabId\", this._parseMessageData(message)) ?? undefined;\n }\n\n\n private _handlePostMessage = async (message: MessageEvent) => {\n if(message.source !== this._renderer?.iframeElementRef?.contentWindow) {\n return;\n }\n\n this._sendAnalytics(message);\n await this._onPostMessageReceived(message);\n }\n\n protected _sendAnalytics(message: MessageEvent): void {\n const action = `ExternalLink ${this._getGnwpSource()}`;\n if(message.data) {\n this.services.analytics.sendTechnicalEvent(action, `PostMessage: ${JSON.stringify(message.data)}`);\n } else {\n this.services.analytics.sendTechnicalEvent(action);\n }\n }\n\n protected _renderer: ExternalLinkIframeRenderer | null = null;\n protected _getRenderer(paramsOverride?: Partial): ExternalLinkIframeRenderer {\n if(!this._renderer) {\n this._renderer = new ExternalLinkIframeRenderer(this.services, {\n ...this._getIframeRendererParams(),\n ...paramsOverride,\n onClosed: this._onExternalLinkClosed\n });\n }\n\n return this._renderer;\n }\n\n protected abstract _getIframeRendererParams(): ExternalLinkInIframeRendererParams;\n\n protected _onExternalLinkClosed = async () => {\n this.services.sdk.eventsTrigger.externalLinkClosed({\n gnwpSource: this._getGnwpSource()\n });\n this.dispose();\n }\n\n protected _closeExternalLinkDialog = () => {\n this._renderer?.dispose();\n this._renderer = null;\n }\n\n protected async _showExternalLinkDialog(url: string, paramsOverride?: Partial): Promise {\n this.services.sdk.eventsTrigger.closeAllSecondWebViews();\n await this._getRenderer(paramsOverride).showInModalDialog(url);\n }\n\n protected _renderExternalLinkIframe(url: string, paramsOverride?: Partial) {\n return this._getRenderer(paramsOverride).renderAsReactElement(url);\n }\n\n protected async _redirect(url: string): Promise {\n if(this._getIframeRendererParams().httpVerb === 'POST') {\n this.services.dom.performFormPostForUrl(url, {\n target: '_self'\n });\n } else {\n await this.services.location.redirect(url);\n }\n }\n\n protected _openInNewTab(url: string): void {\n if(this._getIframeRendererParams().httpVerb === 'POST') {\n this.services.dom.performFormPostForUrl(url, {\n target: '_blank'\n });\n } else {\n super._openInNewTab(url);\n }\n }\n\n protected async _openQuickDeposit(options: {promCode: UndefinedString; channel: IChannel}): Promise {\n this._closeExternalLinkDialog();\n const openDepositOptions: OpenDepositOptions = {\n channel: options.channel\n };\n\n if(options.promCode) {\n openDepositOptions.PromCode = options.promCode\n }\n\n await this.services.cashier.openDeposit(openDepositOptions);\n }\n\n protected async _openCashier(options: {\n tabId: UndefinedNumber;\n promCode: NullableUndefinedString;\n channel: {\n area: AreaType;\n element?: string;\n source: string;\n }\n }): Promise {\n\n this._closeExternalLinkDialog();\n\n let channelElement = options.channel.element;\n\n if(!channelElement) {\n if (isDepositSessionType(options.tabId)) {\n channelElement = CHANNEL_ELEMENTS.depositButton;\n } else if (isCashoutSessionType(options.tabId)) {\n channelElement = CHANNEL_ELEMENTS.withdrawButton;\n }\n }\n\n const params: OpenCashierOptions = {\n channel: {\n source: options.channel.source,\n element: channelElement,\n area: options.channel.area\n }\n }\n\n if(options.promCode) {\n params.PromCode = options.promCode;\n }\n\n if(options.tabId) {\n params.sessionType = options.tabId;\n }\n\n await this.services.cashier.openCashier(params);\n }\n\n protected async _redirectToURL(message:MessageEvent):Promise{\n if('redirectclient' === this._getParsedData('message', message)?.toLowerCase()) {\n const url = this._getParsedData('url', message);\n if(url) {\n if(this.services.device.hybrid.isHybrid)\n {\n this.services.hybrid.openExternalLink(url);\n }\n else\n {\n await this.services.location.redirect(url)\n }\n }\n }\n }\n\n private _getParsedData(propName:string, message: MessageEvent):string{\n return CIPropRead.getStringProperty(propName, this._parseMessageData(message));\n }\n\n protected _extractChannel(message: MessageEvent): IChannel {\n const parsedChannelData = CIPropRead.getShallowLowercasedObject('channel', this._parseMessageData(message)) || {};\n const {area = AreaType.FullCashier, element = CHANNEL_ELEMENTS.cashierAction, source = CHANNEL_SOURCE.cashier} = parsedChannelData;\n return {\n area:area,\n element: element,\n source: source\n };\n }\n\n protected _extractAppSpecificParameters(message: MessageEvent): IControlCenterFullSpecificParams {\n const parsedAppSpecificParamsData = CIPropRead.getShallowLowercasedObject('appSpecificParameters', this._parseMessageData(message)) || {};\n const {deeplink = ControlCenterDeeplink.Main, source = ControlCenterOpenSource.Cashier} = parsedAppSpecificParamsData;\n return {\n deeplink: deeplink,\n source: source\n };\n }\n}","import {\n IOpenRegistrationOptions,\n IRegistrationExternalLinkHandler, REGISTRATION_DATA_KEY\n} from \"./registration.external-link-handler.interface\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {NullableUndefinedString} from \"../../../../../common/types/nullable-types\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport Store from \"../../../../../sdk/src/utils/store\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {IRegistrationGnwpRequest} from \"../../../gnwp/gnwp.service.interface\";\n\n\n\nconst MEMBERSHIP_POST_ACTIONS = {\n PLAY: '1',\n DEPOSIT: '2',\n BACK: '3',\n CASHIER_UPLOAD_DOCUMENTS: '7',\n REGISTRATION_COMPLETED: '8',\n OPEN_BANK_ID: '64',\n DOWNLOAD_APP: '68',\n STORE_REGISTRATION_COOKIES_DATA: '69',\n SHOW_LOGIN: '73',\n MY_ACCOUNT_UPLOAD_DOCUMENTS: '75',\n REDIRECT_CLIENT: '77',\n CONTROL_CENTER: '101'\n};\n\nexport class RegistrationExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IRegistrationExternalLinkHandler {\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.MEMBERSHIP;\n }\n\n\n async openRegistration(options?: IOpenRegistrationOptions): Promise {\n if (this.services.user.isAuthorized) {\n throw new Error('openRegistration should not be called for authorized user');\n }\n\n\n if (await this._shouldOpenRegistrationWidget()) {\n await this._openRegistrationWidget(options)\n } else {\n await this._openRegistrationFromExternalLink(options);\n }\n }\n\n private async _shouldOpenRegistrationWidget(): Promise {\n const registrationWidgetConfigs = this.services.configuration.servicesConfigs.AppLauncher.apps.FUNNEL_REGISTRATION;\n const isAppLauncherRegistrationEnabled = registrationWidgetConfigs.enabled;\n const isRegistrationWidgetABEnabled = await this.services.abTestingFeatureDataProvider.isRegistrationWidgetEnabled();\n return registrationWidgetConfigs.force || (isAppLauncherRegistrationEnabled && isRegistrationWidgetABEnabled);\n }\n\n private async _openRegistrationWidget(options?: IOpenRegistrationOptions): Promise {\n await (await this.services.appLauncher).openRegistrationWidget(options);\n }\n\n private async _openRegistrationFromExternalLink(options?: IOpenRegistrationOptions): Promise {\n const url = await this._getGnwpUrl(options);\n await this._showExternalLinkDialog(url);\n }\n\n protected async _getGnwpUrl(options: IOpenRegistrationOptions): Promise {\n let marketingData = (await this.services.marketing).getMarketingData(options.marketingParams);\n const gnwpRequest: IRegistrationGnwpRequest = {\n marketingData: marketingData,\n };\n\n if(options.promoCode) {\n gnwpRequest.promoCode = options.promoCode;\n }\n\n gnwpRequest.enableNativeAppDownload = this.services.regulation.shouldEnforceHybridAppForMobileWeb();\n\n return await (await this.services.gnwp).getRegistrationUrl(gnwpRequest);\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1008,\n maxHeight: 730,\n zIndex: ExternalLinksZIndexes.Membership,\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: this._shouldHideCloseButton,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n iframeExtraCssClass: CyClass('cy-registration-external-link-container')\n };\n }\n\n protected get _shouldHideCloseButton(): boolean {\n return false;\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise {\n const actionId = this._extractActionId(message);\n if (!actionId) {\n return;\n }\n\n switch (actionId) {\n case MEMBERSHIP_POST_ACTIONS.PLAY:\n case MEMBERSHIP_POST_ACTIONS.BACK:\n this._closeExternalLinkDialog();\n break;\n case MEMBERSHIP_POST_ACTIONS.DEPOSIT:\n await this._openCashier({\n tabId: undefined,\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.registration,\n area: AreaType.StraightToCashier,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n break;\n case MEMBERSHIP_POST_ACTIONS.CASHIER_UPLOAD_DOCUMENTS:\n await this._openUploadDocumentsFromCashier();\n break;\n case MEMBERSHIP_POST_ACTIONS.SHOW_LOGIN:\n await this._openLoginForm();\n break;\n case MEMBERSHIP_POST_ACTIONS.REGISTRATION_COMPLETED:\n const messageData = this._parseMessageData(message);\n await this._onRegistrationCompleted({\n UserInfo: CIPropRead.getStringProperty('UserInfo', messageData),\n SourceProductPackage: CIPropRead.getStringProperty('SourceProductPackage', messageData)\n });\n break;\n case MEMBERSHIP_POST_ACTIONS.STORE_REGISTRATION_COOKIES_DATA:\n const registrationCookiesData = CIPropRead.getProperty('StoreRegistrationCookiesData', this._parseMessageData(message));\n if (registrationCookiesData) {\n await this._storeRegistrationCookie(registrationCookiesData);\n }\n break;\n case MEMBERSHIP_POST_ACTIONS.MY_ACCOUNT_UPLOAD_DOCUMENTS:\n await this._openUploadDocumentsFromMyAccount();\n break;\n case MEMBERSHIP_POST_ACTIONS.OPEN_BANK_ID:\n const url = CIPropRead.getStringProperty('AppUrl', this._parseMessageData(message));\n if (url) {\n await this._openBankId(url);\n } else {\n this.services.logger.error('Registration try to open bank ID with empty URL');\n }\n break;\n case MEMBERSHIP_POST_ACTIONS.DOWNLOAD_APP:\n await this._openDownloadAppPage();\n break;\n case MEMBERSHIP_POST_ACTIONS.REDIRECT_CLIENT:\n await this._redirectToURL(message)\n break;\n case MEMBERSHIP_POST_ACTIONS.CONTROL_CENTER:\n this._openControlCenter();\n break;\n default:\n this.services.logger.debug(`Received unknown actionId ${actionId} from Registration`);\n }\n }\n\n protected async _openLoginForm(): Promise {\n this._closeExternalLinkDialog();\n await this.services.user.openLogin();\n }\n\n protected async _onRegistrationCompleted(params: {UserInfo: string, SourceProductPackage: string}): Promise {\n this.services.sdk.eventsTrigger.registrationCompleted(params);\n }\n\n protected async _openUploadDocumentsFromCashier(): Promise {\n this._closeExternalLinkDialog();\n await this.services.cashier.openUploadDocumentsFromCashier();\n }\n\n protected async _openUploadDocumentsFromMyAccount(): Promise {\n this._closeExternalLinkDialog();\n await (await this.services.externalLinks).openUploadDocumentFromMyAccount();\n }\n\n protected async _openBankId(url: NullableUndefinedString): Promise {\n (await this.services.externalLinks).openBankId(url)\n }\n\n protected async _openDownloadAppPage(): Promise {\n await this.services.location.redirect(this.services.sdk.getDownloadAppLink());\n }\n\n protected async _storeRegistrationCookie(registrationCookiesData: any): Promise {\n Store.set(REGISTRATION_DATA_KEY, JSON.stringify(registrationCookiesData));\n }\n\n protected async _openControlCenter(): Promise {\n await (await this.services.appLauncher).openControlCenterFull({\n channel: {\n source: CHANNEL_SOURCE.uk_acocunt_miration,\n area: AreaType.UserArea,\n },\n businessCorrelationID: this.services.tools.getGuid()\n })\n }\n}","import {\n IMyAccountExternalLinkHandler,\n IOpenMyAccountOptions\n} from \"./my-account.external-link-handler.interface\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {NullableUndefinedNumber, NullableUndefinedString} from \"../../../../../common/types/nullable-types\";\nimport {OpenRichPageOptions} from \"../../external-links.service.interface\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nconst MY_ACCOUNT_POST_ACTIONS = {\n GAME: '1',\n CASHIER: '6',\n QUICK_DEPOSIT: '7',\n CASINO: '22',\n SPORT: '24',\n EXTERNAL_URL: '27',\n CLOSE: 'CloseMe',\n RICH: '56',\n INTERNAL_URL: '32'\n}\n\n\nexport class MyAccountExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IMyAccountExternalLinkHandler {\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.MY_ACCOUNT;\n }\n\n async openMyAccount(options?: IOpenMyAccountOptions): Promise {\n\n if(!await this.services.user.ensureUserIsLoggedIn('MyAccountExternalLinkHandler')) {\n return;\n }\n\n if(options?.tabId === MyAccountTab.UploadDocuments) {\n await (await this.services.externalLinks).openUploadDocumentFromMyAccount();\n return;\n }\n\n const url = await this._getGnwpUrl(options);\n await this._showExternalLinkDialog(url);\n\n }\n\n\n protected async _getGnwpUrl(options?: IOpenMyAccountOptions): Promise {\n return await (await this.services.gnwp).getMyAccountUrl({\n tabId: options?.tabId,\n });\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 940,\n maxHeight: 658,\n zIndex: ExternalLinksZIndexes.MyAccount,\n hideCloseButton: false,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n iframeExtraCssClass: CyClass('cy-my-account-external-link-container')\n };\n }\n\n protected async _onPostMessageReceived(message:MessageEvent): Promise {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n switch (actionId) {\n case MY_ACCOUNT_POST_ACTIONS.QUICK_DEPOSIT:\n await this._openQuickDeposit({\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.myAccount,\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n break;\n case MY_ACCOUNT_POST_ACTIONS.CASHIER:\n await this._openCashier({\n tabId: this._extractCashierTabId(message),\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.myAccount,\n area: AreaType.Header\n }\n });\n break;\n case MY_ACCOUNT_POST_ACTIONS.GAME:\n await this._openGame( {\n gameType: this._extractGameId(message),\n originDeepLinkID: CIPropRead.getNumericProperty('originDeepLinkID',\n CIPropRead.getProperty('origininformation', this._parseMessageData(message)))\n });\n break;\n case MY_ACCOUNT_POST_ACTIONS.RICH:\n await this._openRichPage({\n campaignId: CIPropRead.getStringProperty('campaignID', this._parseMessageData(message))\n });\n break;\n case MY_ACCOUNT_POST_ACTIONS.SPORT:\n await this._openSport();\n break;\n case MY_ACCOUNT_POST_ACTIONS.CASINO:\n case MY_ACCOUNT_POST_ACTIONS.CLOSE:\n this._closeExternalLinkDialog();\n break;\n case MY_ACCOUNT_POST_ACTIONS.INTERNAL_URL:\n const internalUrl = this._extractUrl(message);\n if(internalUrl) {\n await this._openInternalUrl(internalUrl)\n } else {\n this.services.logger.error('My Account redirect to internal url failed because no URL provided');\n }\n\n break;\n case MY_ACCOUNT_POST_ACTIONS.EXTERNAL_URL:\n const externalUrl = this._extractUrl(message)\n if(externalUrl) {\n await this._openExternalUrl(externalUrl);\n } else {\n this.services.logger.error('My Account redirect to external url failed because no URL provided');\n }\n break;\n default:\n this.services.logger.debug(`Received unknown actionId ${actionId} from My account`);\n\n }\n }\n\n protected async _openGame(options: {gameType: NullableUndefinedNumber, originDeepLinkID: NullableUndefinedNumber}): Promise {\n this._closeExternalLinkDialog();\n if(!options.gameType) {\n this.services.logger.debug('My account sent open game event with undefined game type');\n return;\n }\n\n const gameInfo = await this.services.games.getGameInfo(options.gameType);\n\n if(!gameInfo) {\n this.services.logger.debug(`Can't open game ${options.gameType} from My Account because is not in the layout`);\n return;\n }\n\n await gameInfo.open({\n isRealMode: true,\n referrerId: options.originDeepLinkID,\n });\n }\n\n protected async _openRichPage(options: OpenRichPageOptions): Promise {\n this._closeExternalLinkDialog();\n await (await this.services.externalLinks).openRichPage(options);\n }\n\n protected async _openSport(): Promise {\n this._closeExternalLinkDialog();\n await this.services.linksNavigation.openSport();\n }\n\n protected async _openInternalUrl(internalUrl: NullableUndefinedString): Promise {\n this._closeExternalLinkDialog();\n if(internalUrl) {\n await this.services.linksNavigation.openUrl({\n url: internalUrl,\n openMode: \"clientSideNavigation\"\n });\n } else {\n this.services.logger.error('My account asked to open internal url but no url was provided in the post message');\n }\n }\n\n protected async _openExternalUrl(externalUrl: NullableUndefinedString): Promise {\n this._closeExternalLinkDialog();\n if(externalUrl) {\n await this.services.linksNavigation.openUrl({\n url: externalUrl,\n openMode: \"newTab\"\n });\n } else {\n this.services.logger.error('My account asked to open external url but no url was provided in the post message');\n }\n\n }\n\n}\n","export enum PlatformEventTypeEnum {\n Deposit = 1,\n Play = 21,\n OpenApp = 63\n \n /*\n Fund Transfer = 2,\n Registration = 3,\n Compensation = 4,\n GroupCompensation = 5,\n Grant Following Bonus = 6,\n Followed Delayed Bonus = 7,\n Login = 8,\n UpdateAccountStatus = 9,\n GrantBonus = 10,\n CancelBonus = 11,\n CancelDeposit = 12,\n Cashout = 13,\n CancelCashout = 14,\n UpdateAddress = 15,\n CheckAccountStatus = 16,\n SessionDetails = 17,\n CloseTournaments = 18,\n EnterGame = 19,\n LeaveGame = 20,\n\n Purchase = 26,\n Invite A Friend = 55,\n Brag = 56,\n Share = 57,\n Got = 58,\n Played total X times = 59,\n Played game X times = 60,\n Player input - Mouse click = 61,\n */\n}","import {IOmgExternalLinkHandler} from \"./omg.external-link-handler.interface\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {IOpenMyAccountOptions} from \"../my-account/my-account.external-link-handler.interface\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType, ControlCenterOpenSource} from \"@sparkware/uc-sdk-core\";\nimport {\n NullableUndefinedNumber,\n NullableUndefinedString\n} from \"../../../../../common/types/nullable-types\";\nimport {IOpenOmgOptions} from \"../../external-links.service.interface\";\nimport {IOmgHandlerHook} from \"./omg-handler.hook.interface\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nconst OMG_POST_ACTIONS = {\n SHOW_ME: 'ShowMe',\n CLOSE_ME: 'CloseMe',\n OPEN_REAL_GAME: '1',\n CASHIER: '6',\n QUICK_DEPOSIT: '7',\n MY_ACCOUNT: '21',\n SPORT: '24',\n EXTERNAL_LINK: '27',\n INTERNAL_URL: '32',\n OPEN_DEMO_GAME: '36',\n RICH: '56',\n CONTROL_CENTER: '101'\n}\n\nexport class OmgExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IOmgExternalLinkHandler, IOmgHandlerHook {\n\n async openOmg(options: IOpenOmgOptions): Promise {\n if(!this.services.user.isAuthorized) {\n this.services.logger.error(`Attempt to open OMG messages for unauthorized user`);\n return;\n }\n\n\n const url = await this._getGnwpUrl(options);\n await this._showExternalLinkDialog(url, {\n zIndex: options.zIndex\n });\n }\n\n protected async _getGnwpUrl(options: IOpenOmgOptions): Promise {\n return await (await this.services.gnwp).getOmgUrl({\n openedWithinGame: options.openedWithinGame,\n messages: options.messages\n });\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.OMG;\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1024,\n maxHeight: 768,\n httpVerb: 'POST',\n zIndex: ExternalLinksZIndexes.OmgBehindTheGame,\n hideCloseButton: true,\n analyticsAction: this._getGnwpSource(),\n createAsHidden: true,\n iframeScrolling: this.services.device.os.isMobileOS ? \"no\" : \"auto\",\n iframeExtraCssClass: CyClass('cy-omg-external-link-container')\n };\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n\n switch (actionId) {\n case OMG_POST_ACTIONS.SHOW_ME:\n const showMeMessageData = this._parseMessageData(message);\n const width = CIPropRead.getNumericProperty(\"Width\", showMeMessageData);\n const height = CIPropRead.getNumericProperty(\"Height\", showMeMessageData);\n this._onShowMe(width, height);\n this.services.sdk.eventsTrigger.omgDisplayed(this);\n break;\n case OMG_POST_ACTIONS.CLOSE_ME:\n this._closeExternalLinkDialog();\n break;\n case OMG_POST_ACTIONS.MY_ACCOUNT:\n await this._openMyAccount({\n tabId: this._extractMyAccountTabId(message)\n })\n break;\n case OMG_POST_ACTIONS.CASHIER:\n await this._openCashier({\n tabId: this._extractCashierTabId(message),\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.omg,\n area: AreaType.OMG,\n element: OMG_POST_ACTIONS.CASHIER\n }\n });\n break;\n case OMG_POST_ACTIONS.QUICK_DEPOSIT:\n await this._openQuickDeposit({\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.omg,\n area: AreaType.OMG,\n element: OMG_POST_ACTIONS.CASHIER\n }\n });\n break;\n case OMG_POST_ACTIONS.OPEN_REAL_GAME:\n await this._openRealGame(CIPropRead.getNumericProperty('GameId', this._parseMessageData(message)) ?? undefined)\n break;\n case OMG_POST_ACTIONS.OPEN_DEMO_GAME:\n await this._openDemoGame(CIPropRead.getNumericProperty('GameId', this._parseMessageData(message)) ?? undefined)\n break;\n case OMG_POST_ACTIONS.SPORT:\n await this._openSport();\n break;\n case OMG_POST_ACTIONS.EXTERNAL_LINK:\n await this._openExternalUrl(this._extractUrl(message));\n break;\n case OMG_POST_ACTIONS.INTERNAL_URL:\n await this._openInternalUrl(this._extractUrl(message));\n break;\n\n case OMG_POST_ACTIONS.RICH:\n await this._openRichPage(CIPropRead.getStringProperty('campaignID', this._parseMessageData(message)));\n break;\n\n case OMG_POST_ACTIONS.CONTROL_CENTER:\n await this._openControlCenter();\n break;\n\n default:\n this.services.logger.debug(`Received unknown actionId ${actionId} from OMG`);\n }\n }\n\n\n protected _onShowMe(width: NullableUndefinedNumber, height: NullableUndefinedNumber): void {\n width = width ?? 0;\n height = height ?? 0;\n\n if(width > 0 && height > 0) {\n this._renderer?.setMaxSize(width, height);\n }\n this._renderer?.display();\n }\n\n protected async _openMyAccount(options?: IOpenMyAccountOptions): Promise {\n this._closeExternalLinkDialog();\n await (await this.services.externalLinks).openMyAccount(options);\n }\n\n private async _openGame(gameType: NullableUndefinedNumber, isReal: boolean): Promise {\n this._closeExternalLinkDialog();\n if(!gameType) {\n this.services.logger.error(`OMG open real game sent undefined game type`);\n return;\n }\n\n const gameInfo = await this.services.games.getGameInfo(gameType);\n\n if(!gameInfo) {\n this.services.logger.error(`OMG try to open ${isReal ? 'real' : 'demo'} game ${gameType} but this game is not in the layout`);\n return;\n }\n\n await gameInfo.open({\n isRealMode: isReal\n });\n }\n\n protected async _openRealGame(gameType: NullableUndefinedNumber): Promise {\n await this._openGame(gameType, true);\n }\n\n protected async _openDemoGame(gameType: NullableUndefinedNumber): Promise {\n await this._openGame(gameType, false);\n }\n\n protected async _openSport(): Promise {\n this._closeExternalLinkDialog();\n await this.services.linksNavigation.openSport();\n }\n\n protected async _openExternalUrl(externalUrl: NullableUndefinedString): Promise {\n this._closeExternalLinkDialog();\n if(externalUrl) {\n await this.services.linksNavigation.openUrl({\n url: externalUrl,\n openMode: \"newTab\"\n });\n } else {\n this.services.logger.error('OMG asked to open external URL but no url was provided in the post message');\n }\n\n }\n\n protected async _openInternalUrl(internalUrl: NullableUndefinedString): Promise {\n this._closeExternalLinkDialog();\n if(internalUrl) {\n await this.services.linksNavigation.openUrl({\n url: internalUrl,\n openMode: \"clientSideNavigation\"\n });\n } else {\n this.services.logger.error('OMG asked to open internal url but no url was provided in the post message');\n }\n }\n\n protected async _openRichPage(campaignId: NullableUndefinedString): Promise {\n this._closeExternalLinkDialog();\n\n if(!campaignId) {\n this.services.logger.error(`OMG attempt to open RICH page with an empty campaignId`);\n return;\n }\n\n await (await this.services.externalLinks).openRichPage({\n campaignId: campaignId\n });\n }\n\n protected async _openControlCenter(): Promise {\n this._closeExternalLinkDialog();\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: AreaType.OMG,\n element: CHANNEL_ELEMENTS.omgAction,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n source: ControlCenterOpenSource.OMG\n }\n });\n }\n\n\n bringToFront(): void {\n this._renderer?.updateZIndex(ExternalLinksZIndexes.Omg);\n }\n\n}","import {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\n\nexport abstract class ForgotCredentialsExternalLinkHandlerBase extends ExternalLinkInIframeHandlerBase {\n protected async _onPostMessageReceived(message: MessageEvent): Promise {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n\n switch (actionId) {\n case '3':\n if('close' === CIPropRead.getStringProperty('message', this._parseMessageData(message))?.toString()?.toLowerCase()) {\n this._closeExternalLinkDialog();\n }\n break;\n case '73':\n await this._openLoginForm();\n break;\n case '77':\n await this._redirectToURL(message);\n break;\n }\n }\n\n protected async _openLoginForm(): Promise {\n this._closeExternalLinkDialog();\n await this.services.user.openLogin();\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1008,\n maxHeight: 702,\n zIndex: ExternalLinksZIndexes.MyAccount,\n hideCloseButton: false,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource()\n };\n }\n}","import {IForgotUserNameExternalLinkHandler} from \"./forgot-user-name.external-link-handler.interface\";\nimport {ForgotCredentialsExternalLinkHandlerBase} from \"../forgot-credentials-external-link-handler-base\";\nimport {GNWP_SOURCES} from \"../../../../gnwp/gnwp-consts\";\nimport {ExternalLinkInIframeRendererParams} from \"../../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\nexport class ForgotUserNameExternalLinkHandler extends ForgotCredentialsExternalLinkHandlerBase implements IForgotUserNameExternalLinkHandler {\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.FORGOT_USERNAME;\n }\n\n async openForgotUserName(): Promise {\n const url = await this._getGnwpUrl();\n await this._showExternalLinkDialog(url);\n }\n\n protected async _getGnwpUrl(): Promise {\n return await (await this.services.gnwp).getForgotUserNameUrl();\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n ...super._getIframeRendererParams(),\n iframeExtraCssClass: CyClass('cy-forgot-username-external-link-container')\n };\n }\n\n}","import {ForgotCredentialsExternalLinkHandlerBase} from \"../forgot-credentials-external-link-handler-base\";\nimport {IForgotPasswordExternalLinkHandler} from \"./forgot-password.external-link-handler.interface\";\nimport {GNWP_SOURCES} from \"../../../../gnwp/gnwp-consts\";\nimport {ExternalLinkInIframeRendererParams} from \"../../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\nexport class ForgotPasswordExternalLinkHandler extends ForgotCredentialsExternalLinkHandlerBase implements IForgotPasswordExternalLinkHandler {\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.FORGOT_PASSWORD;\n }\n\n async openForgotPassword(): Promise {\n const url = await this._getGnwpUrl();\n await this._showExternalLinkDialog(url);\n }\n\n protected async _getGnwpUrl(): Promise {\n return await (await this.services.gnwp).getForgotPasswordUrl();\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n ...super._getIframeRendererParams(),\n iframeExtraCssClass: CyClass('cy-forgot-password-external-link-container')\n };\n }\n}","import {IPendingLoginExternalLinkHandler} from \"./pending-login.external-link-handler.interface\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {IOpenPendingLoginOptions} from \"../../external-links.service.interface\";\nimport {NullableUndefinedNumber, NullableUndefinedString} from \"../../../../../common/types/nullable-types\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {\n AreaType,\n ControlCenterDeeplink,\n ControlCenterOpenSource,\n IChannel,\n IControlCenterFullSpecificParams\n} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\n\ninterface ITokenAndOriginInformation {\n token: NullableUndefinedString;\n sourceProductPackage: NullableUndefinedNumber\n}\n\nexport class PendingLoginExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IPendingLoginExternalLinkHandler {\n\n async openPendingLogin(options: IOpenPendingLoginOptions): Promise {\n const url = await this._getGnwpUrl(options);\n await this._showExternalLinkDialog(url);\n }\n\n protected async _getGnwpUrl(options: IOpenPendingLoginOptions): Promise {\n return await (await this.services.gnwp).getPendingLoginUrl({\n token: options.token\n });\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.PENDING_LOGIN;\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1014,\n maxHeight: 702,\n zIndex: ExternalLinksZIndexes.PendingAction,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n hideCloseButton: false,\n iframeExtraCssClass: CyClass('cy-pending-login-external-link-container')\n };\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n\n const runAutologin = async () => {\n try {\n if (!this.services.user.isAuthorized) {\n let options = this._extractTokenAndOriginInformation(message);\n if(options.token) {\n await this.services.user.runAutoLogin(options);\n }\n }\n } catch(e) {\n this.services.logger.error(\"Failed to autologin on pending login action with action ID 7\", e);\n }\n }\n\n switch (actionId.toLowerCase()) {\n case 'pending':\n await this._closePendingLogin(this._extractTokenAndOriginInformation(message));\n break;\n case '73':\n await this._openLoginForm();\n break;\n case '75':\n await this._openUploadDocuments(this._extractTokenAndOriginInformation(message));\n break;\n case '101': // ControlCenter\n await runAutologin();\n const channel = this._extractChannel(message);\n const appSpecificParameters = this._extractAppSpecificParameters(message);\n await this._openControlCenter({channel: channel, appSpecificParameters: appSpecificParameters});\n break;\n case '7':\n this._closeExternalLinkDialog();\n\n await runAutologin();\n\n await this._openQuickDeposit({\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.pendingAction,\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n break;\n }\n }\n\n protected _extractTokenAndOriginInformation(message: MessageEvent): ITokenAndOriginInformation {\n const messageData = this._parseMessageData(message);\n const token = CIPropRead.getStringProperty('Token', messageData);\n if(!token) {\n return {\n token: null,\n sourceProductPackage: null\n };\n }\n\n const originInformation = CIPropRead.getProperty('originInformation', messageData);\n const sourceProductPackage = CIPropRead.getNumericProperty('originProductPackageID', originInformation);\n\n return {\n token: token,\n sourceProductPackage: sourceProductPackage\n };\n\n }\n\n protected async _openLoginForm(): Promise {\n this._closeExternalLinkDialog();\n await this.services.user.openLogin();\n }\n\n protected async _closePendingLogin(options: ITokenAndOriginInformation): Promise {\n this._closeExternalLinkDialog();\n if(options.token) {\n await this.services.user.runAutoLogin(options);\n }\n }\n\n protected async _openUploadDocuments(options: ITokenAndOriginInformation): Promise {\n this._closeExternalLinkDialog();\n\n if(options.token) {\n await this.services.user.runAutoLogin({\n token: options.token,\n sourceProductPackage: options.sourceProductPackage\n });\n await (await this.services.externalLinks).openUploadDocumentFromMyAccount();\n } else {\n this.services.logger.error(`Received open upload documents event from pending login but they didn't provide a token`)\n }\n }\n\n //todo duplicate code with pending-action.external-link-handler.ts -need to be shared\n protected async _openControlCenter(options: {channel: IChannel; appSpecificParameters: Partial;}): Promise {\n this._closeExternalLinkDialog();\n await (await this.services.appLauncher).openControlCenterFull({\n channel: {\n source: CHANNEL_SOURCE.pendingAction,\n area: AreaType.button,\n ...options.channel\n },\n businessCorrelationID: this.services.tools.getGuid(),\n appSpecificParameters: {\n source: ControlCenterOpenSource.Lobby,\n isIncreaseLimitsDisabled: true,\n deeplink: ControlCenterDeeplink.Main,\n ...options.appSpecificParameters\n }\n })\n }\n\n}","import {IMyAccountUploadDocumentsExternalLinkHandler} from \"./my-account-upload-documents.external-link-handler.interface\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\n\nexport class MyAccountUploadDocumentsExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IMyAccountUploadDocumentsExternalLinkHandler {\n\n async openUploadDocumentsFromMyAccount(): Promise {\n if(!await this.services.user.ensureUserIsLoggedIn('Upload documents')) {\n return;\n }\n\n const url = await this._getGnwpUrl();\n await this._showExternalLinkDialog(url);\n }\n\n protected async _getGnwpUrl(): Promise {\n return (await this.services.gnwp).getUploadDocumentsUrl();\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.DOCUMENT_UPLOAD;\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 940,\n maxHeight: 658,\n zIndex: ExternalLinksZIndexes.MyAccount,\n hideCloseButton: this._hideCloseButton,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n iframeExtraCssClass: CyClass('cy-upload-documents-external-link-container')\n };\n }\n\n protected get _hideCloseButton(): boolean {\n return false;\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n\n switch (actionId) {\n case 'CloseMe':\n this._closeExternalLinkDialog();\n break;\n case '6':\n await this._openCashier({\n tabId: this._extractCashierTabId(message),\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.uploadDocuments,\n area: AreaType.Header\n }\n });\n break;\n case '7':\n await this._openQuickDeposit({\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.uploadDocuments,\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n break;\n }\n }\n\n\n\n}","import {IGameLimitsExternalLinkHandler} from \"./game-limits.external-link-handler.interface\";\nimport {ControlCenterDeeplink} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {ExternalLinkHandlerBase} from \"../external-link-handler-base\";\nimport {IOpenGameLimitsOptions} from \"../../external-links.service.interface\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\n\nexport class GameLimitsExternalLinkHandler extends ExternalLinkHandlerBase implements IGameLimitsExternalLinkHandler{\n async openGameLimits(options:IOpenGameLimitsOptions): Promise {\n if(this.services.abTestingFeatureDataProvider.isControlCenterEnabled) {\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: options.channelArea,\n element: options.channelElement,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n deeplink: ControlCenterDeeplink.Main,\n source: options.source\n }\n });\n }else\n {\n await (await this.services.externalLinks).openMyAccount({\n tabId: MyAccountTab.ResponsibleGaming\n });\n }\n\n }\n}","import {ExternalLinkHandlerBase} from \"../external-link-handler-base\";\nimport {IContactUsExternalLinkHandler} from \"./contact-us.external-link-handler.interface\";\n\nexport class ContactUsExternalLinkHandler extends ExternalLinkHandlerBase implements IContactUsExternalLinkHandler {\n async openContactUs(): Promise {\n const url = await this._getGnwpUrl();\n this._openInNewTab(url);\n }\n\n protected async _getGnwpUrl(): Promise {\n return await (await this.services.gnwp).getContactUsUrl();\n }\n}","import {IRichExternalLinkHandler} from \"./rich.external-link-handler.interface\";\nimport React from \"react\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {OpenRichPageOptions} from \"../../external-links.service.interface\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nconst RICH_POST_ACTIONS = {\n OPEN_REAL_GAME: '1',\n OPEN_ANONYMOUS_GAME: '36',\n CASHIER: '6',\n SPORT: '24',\n EXTERNAL_URL: '27',\n REMOVE_DAILY_DEAL_INDICATION: '64',\n};\n\n\nexport class RichExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IRichExternalLinkHandler {\n\n async openRichPage(options: OpenRichPageOptions): Promise {\n if(!options.campaignId) {\n throw new Error('Rich campaignId parameter was not provided');\n }\n\n const url = this.services.configuration.servicesConfigs.Integration.rich?.richPageUrl;\n if(!url) {\n throw new Error('Rich page url was not configured');\n }\n\n await this.services.location.push(url.replace('{campaignid}', options.campaignId));\n }\n\n async renderRichPageContent(): Promise {\n const url = await this._getGnwpUrl();\n return this._renderExternalLinkIframe(url);\n }\n protected async _getGnwpUrl(): Promise {\n const campaignId = parseInt(this.services.location.currentUri.queryParams.getParamValue('campaignid'));\n return await (await this.services.gnwp).getRichPageUrl({\n marketingCampaignId: campaignId\n });\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.RICH;\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1008,\n maxHeight: 702,\n zIndex: ExternalLinksZIndexes.MyAccount,\n hideCloseButton: false,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n iframeExtraCssClass: CyClass('cy-rich-external-link-container')\n };\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n\n switch (actionId) {\n case RICH_POST_ACTIONS.EXTERNAL_URL:\n await this._redirectToExternalUrl(CIPropRead.getStringProperty('Url', this._parseMessageData(message)));\n break;\n case RICH_POST_ACTIONS.CASHIER:\n await this._openCashier({\n tabId: this._extractCashierTabId(message),\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.rich,\n area: AreaType.button\n }\n });\n break;\n case RICH_POST_ACTIONS.OPEN_REAL_GAME:\n await this._openRealGame(CIPropRead.getNumericProperty('GameId', this._parseMessageData(message)));\n break;\n case RICH_POST_ACTIONS.OPEN_ANONYMOUS_GAME:\n await this._openDemoGame(CIPropRead.getNumericProperty('GameId', this._parseMessageData(message)));\n break;\n case RICH_POST_ACTIONS.SPORT:\n await this._openSport();\n break;\n case RICH_POST_ACTIONS.REMOVE_DAILY_DEAL_INDICATION:\n (await this.services.dailyDeal).removeDailyDealIndicator();\n break;\n\n }\n }\n\n protected async _redirectToExternalUrl(url: string) {\n await this.services.location.redirect(url)\n }\n\n protected async _openRealGame(gameType: number): Promise {\n const gameInfo = await this.services.games.getGameInfo(gameType);\n if(!gameInfo) {\n this.services.logger.error(`RICH page is trying to open game ${gameType} in real mode but this game is not in the layout`);\n return;\n }\n\n await gameInfo.open({\n isRealMode: true\n });\n }\n\n protected async _openDemoGame(gameType: number): Promise {\n const gameInfo = await this.services.games.getGameInfo(gameType);\n if(!gameInfo) {\n this.services.logger.error(`RICH page is trying to open game ${gameType} in demo mode but this game is not in the layout`);\n return;\n }\n\n await gameInfo.open({\n isRealMode: false\n });\n }\n\n protected async _openSport(): Promise {\n await this.services.linksNavigation.openSport();\n }\n}","import {ExternalLinkHandlerBase} from \"../external-link-handler-base\";\nimport {IHelpExternalLinkHandler} from \"./help.external-link-handler.interface\";\n\nexport class HelpExternalLinkHandler extends ExternalLinkHandlerBase implements IHelpExternalLinkHandler {\n async openHelpPage(): Promise {\n await this.services.linksNavigation.navigateLink({\n linkId: \"helpLink\"\n });\n }\n}","import {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {\n IPendingActionExternalLinkHandler, PendingActionData, PendingActionReasonEnum,\n PendingActionResultEnum\n} from \"./pending-action.external-link-handler.interface\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {\n AreaType,\n ControlCenterDeeplink,\n ControlCenterOpenSource,\n IChannel,\n IControlCenterFullSpecificParams\n} from \"@sparkware/uc-sdk-core\";\nimport {Nullable, NullableUndefinedString} from \"../../../../../common/types/nullable-types\";\nimport {UserController_GetPendingActionsRequest} from \"../../../api/api.service\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\n\nconst PENDING_ACTION_POST_MESSAGE = {\n ControlCenter: '101',\n Pending: 'pending'\n};\n\n\nexport abstract class PendingActionExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IPendingActionExternalLinkHandler {\n\n private _pendingActionResult: PendingActionResultEnum = PendingActionResultEnum.BlockCurrentFlow;\n private _currentPendingAction: Nullable = null;\n\n protected abstract _createPendingActionsRequest(): UserController_GetPendingActionsRequest;\n protected abstract _getGnwpUrl(pendingActionData: PendingActionData, options?: TOptions): Promise;\n\n async openPendingAction(options?: TOptions): Promise {\n return await this._executePendingActions(options);\n }\n\n protected async _getUserPendingActions(request: UserController_GetPendingActionsRequest): Promise {\n if(!this.services.user.isAuthorized) {\n return [];\n }\n\n try {\n const response = await this.services.api.userController.getPendingActions(request);\n //sort pending actions ascending by priority\n return response.PendingActions.sort((pa1, pa2) => {\n const priority1 = pa1.Priority ?? 99999999;\n const priority2 = pa2.Priority ?? 99999999;\n return priority1 - priority2;\n });\n } catch (err) {\n this.services.logger.error(`Failed to get user pending actions for ${this.services.user.cid}`, err);\n return [];\n }\n\n }\n\n protected async _executePendingActions(options?: TOptions, previousPendingAction?: PendingActionData): Promise {\n\n const pendingActions = await this._getUserPendingActions(this._createPendingActionsRequest());\n\n if(pendingActions.length === 0) {\n return PendingActionResultEnum.ContinueCurrentFlow;\n }\n\n if(pendingActions.some(pa => pa.Id === previousPendingAction?.Id)) {\n //it means that the pending action that we just show is still present, so we return BlockCurrentFlow to avoid entering an infinite loop\n return PendingActionResultEnum.BlockCurrentFlow;\n }\n\n await this._showPendingAction(pendingActions[0], options);\n\n if(this._pendingActionResult !== PendingActionResultEnum.ContinueCurrentFlow) {\n return this._pendingActionResult;\n }\n\n return this._executePendingActions(options, pendingActions[0]);\n }\n\n protected _getPendingActionIframeRendererSpecificParams(pendingActionData: PendingActionData): ExternalLinkInIframeRendererParams {\n let specificParams: Partial = {};\n if(pendingActionData.ReasonId === PendingActionReasonEnum.GamingCautionInteraction) {\n specificParams.hideCloseButton = true;\n specificParams.maxWidth = 700;\n specificParams.maxHeight = 500;\n }\n\n return {\n ...this._getIframeRendererParams(),\n ...specificParams\n };\n }\n\n protected async _showPendingAction(pendingActionData: PendingActionData, options?: TOptions): Promise {\n this._pendingActionResult = PendingActionResultEnum.BlockCurrentFlow;\n this._currentPendingAction = pendingActionData;\n const url = await this._getGnwpUrl(pendingActionData, options);\n await this._showExternalLinkDialog(url, this._getPendingActionIframeRendererSpecificParams(pendingActionData));\n }\n\n protected get _hideCloseButton(): boolean {\n return false;\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1014,\n maxHeight: 702,\n zIndex: ExternalLinksZIndexes.PendingAction,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n hideCloseButton: this._hideCloseButton\n };\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise {\n const actionId = this._extractActionId(message);\n\n if(!actionId) {\n return;\n }\n\n const msgData = this._parseMessageData(message);\n\n switch (actionId.toLowerCase()) {\n case PENDING_ACTION_POST_MESSAGE.ControlCenter:\n const channel = CIPropRead.getProperty('Channel', msgData);\n const appSpecificParameters = CIPropRead.getProperty('AppSpecificParameters', msgData);\n\n await this._openControlCenter({channel: channel, appSpecificParameters: appSpecificParameters});\n break;\n case PENDING_ACTION_POST_MESSAGE.Pending:\n await this._onPending(CIPropRead.getStringProperty('Token', msgData));\n break;\n }\n }\n\n protected async _openControlCenter(options: {channel: IChannel; appSpecificParameters: Partial;}): Promise {\n this._closeExternalLinkDialog();\n await (await this.services.appLauncher).openControlCenterFull({\n channel: {\n source: CHANNEL_SOURCE.pendingAction,\n area: AreaType.button,\n ...options.channel\n },\n businessCorrelationID: this.services.tools.getGuid(),\n appSpecificParameters: {\n source: ControlCenterOpenSource.Lobby,\n isIncreaseLimitsDisabled: true,\n deeplink: ControlCenterDeeplink.Main,\n ...options.appSpecificParameters\n }\n })\n }\n\n protected async _onPending(token: NullableUndefinedString): Promise {\n if(token) {\n //if we have a token it means that the pending action was resolved, so we can continue the current flow\n this._pendingActionResult = PendingActionResultEnum.ContinueCurrentFlow;\n }\n this._closeExternalLinkDialog();\n\n }\n\n\n}","import {PendingActionExternalLinkHandler} from \"../pending-action.external-link-handler\";\nimport {GNWP_SOURCES} from \"../../../../gnwp/gnwp-consts\";\nimport {UserController_GetPendingActionsRequest} from \"../../../../api/api.service\";\nimport {ProductPackageToID} from \"@sparkware/uc-sdk-core\";\nimport {PlatformEventTypeEnum} from \"../../../../../../common/enums/platform-event-type.enum\";\nimport {PendingActionData} from \"../pending-action.external-link-handler.interface\";\nimport {ExternalLinkInIframeRendererParams} from \"../../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\n\nexport class DepositPendingActionExternalLinkHandler extends PendingActionExternalLinkHandler {\n protected _createPendingActionsRequest(): UserController_GetPendingActionsRequest {\n return {\n packageId: ProductPackageToID.PAYMENTS_DEPOSIT,\n eventTypeId: PlatformEventTypeEnum.OpenApp,\n playModeId: 2 //real\n }\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.PENDING_APP;\n }\n\n protected async _getGnwpUrl(pendingActionData: PendingActionData): Promise {\n return await (await this.services.gnwp).getPendingAppUrl({\n pendingActionTargetProductPackageId: ProductPackageToID.PAYMENTS_DEPOSIT,\n eventTypeId: pendingActionData.EventTypeId,\n eventTypeName: pendingActionData.EventTypeName\n });\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n ...super._getIframeRendererParams(),\n iframeExtraCssClass: CyClass('cy-deposit-pending-action-external-link-container')\n };\n }\n\n}","import {INavigateLinkOptions} from \"../links-navigation.service.interface\";\n\nexport enum RegulationNavigationHookContinuationMode {\n Continue,\n Block\n}\n\nexport interface IRegulationLinkNavigationHookResult {\n continuationMode: RegulationNavigationHookContinuationMode;\n options?: INavigateLinkOptions\n}\n\nexport interface IRegulationLinkNavigationHook {\n navigateLink(options: INavigateLinkOptions): Promise;\n}","import {PendingActionExternalLinkHandler} from \"../pending-action.external-link-handler\";\nimport {GNWP_SOURCES} from \"../../../../gnwp/gnwp-consts\";\nimport {UserController_GetPendingActionsRequest} from \"../../../../api/api.service\";\nimport {ProductPackageToID} from \"@sparkware/uc-sdk-core\";\nimport {PlatformEventTypeEnum} from \"../../../../../../common/enums/platform-event-type.enum\";\nimport {PendingActionData} from \"../pending-action.external-link-handler.interface\";\nimport {ExternalLinkInIframeRendererParams} from \"../../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\nexport class TransactionHistoryPendingActionExternalLinkHandler extends PendingActionExternalLinkHandler {\n protected _createPendingActionsRequest(): UserController_GetPendingActionsRequest {\n return {\n packageId: ProductPackageToID.PAYMENTS_PLAYER_TRANSACTIONS_HISTORY,\n eventTypeId: PlatformEventTypeEnum.OpenApp,\n playModeId: 2 //real\n }\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.PENDING_APP;\n }\n\n protected async _getGnwpUrl(pendingActionData: PendingActionData): Promise {\n return await (await this.services.gnwp).getPendingAppUrl({\n pendingActionTargetProductPackageId: ProductPackageToID.PAYMENTS_PLAYER_TRANSACTIONS_HISTORY,\n eventTypeId: pendingActionData.EventTypeId,\n eventTypeName: pendingActionData.EventTypeName\n });\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n ...super._getIframeRendererParams(),\n iframeExtraCssClass: CyClass('cy-transaction-history-pending-action-external-link-container')\n };\n }\n}","import {PendingActionExternalLinkHandler} from \"../pending-action.external-link-handler\";\nimport {UserController_GetPendingActionsRequest} from \"../../../../api/api.service\";\nimport {GNWP_SOURCES} from \"../../../../gnwp/gnwp-consts\";\nimport {\n PendingActionData,\n PendingActionResultEnum\n} from \"../pending-action.external-link-handler.interface\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {PlatformEventTypeEnum} from \"../../../../../../common/enums/platform-event-type.enum\";\nimport {IOpenRealGamePlayPendingActionOptions} from \"./real-game-play-pending-action.external-link-handler.interface\";\nimport {ExternalLinkInIframeRendererParams} from \"../../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\n\n\n\nexport class RealGamePlayPendingActionExternalLinkHandler extends PendingActionExternalLinkHandler {\n\n async openPendingAction(options?: IOpenRealGamePlayPendingActionOptions): Promise {\n if(options?.token) { //if we have a token it means we are on the old flow when we indirectly get a pending action as a response from platform getToken\n const url = await (await this.services.gnwp).getPendingPlayUrl({\n token: options?.token\n });\n await this._showExternalLinkDialog(url);\n } else {\n return super.openPendingAction(options);\n }\n\n }\n\n protected _createPendingActionsRequest(): UserController_GetPendingActionsRequest {\n return {\n eventTypeId: PlatformEventTypeEnum.Play,\n playModeId: 2 //1 = Demo, 2 = Real\n }\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.PENDING_PLAY;\n }\n\n protected async _getGnwpUrl(pendingActionData: PendingActionData, options?: IOpenRealGamePlayPendingActionOptions): Promise {\n return await (await this.services.gnwp).getPendingPlayUrl({\n token: options?.token\n });\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise {\n const actionId = this._extractActionId(message);\n\n if(!actionId) {\n return;\n }\n\n switch (actionId.toLowerCase()) {\n case '7':\n await this._openQuickDeposit({\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.pendingPlay,\n area: AreaType.PendingAction,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n break;\n default:\n await super._onPostMessageReceived(message);\n break;\n }\n\n return super._onPostMessageReceived(message);\n }\n\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n ...super._getIframeRendererParams(),\n iframeExtraCssClass: CyClass('cy-pending-play-external-link-container')\n };\n }\n}","import {IExternalLinksHandlersFactory} from \"./external-links-handlers-factory.interface\";\nimport {IRegistrationExternalLinkHandler} from \"../handlers/registration/registration.external-link-handler.interface\";\nimport {RegistrationExternalLinkHandler} from \"../handlers/registration/registration.external-link-handler\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMyAccountExternalLinkHandler} from \"../handlers/my-account/my-account.external-link-handler.interface\";\nimport {MyAccountExternalLinkHandler} from \"../handlers/my-account/my-account.external-link-handler\";\nimport {ICashierExternalLinkHandler} from \"../handlers/cashier/cashier.external-link-handler.interface\";\nimport {CashierExternalLinkHandler} from \"../handlers/cashier/cashier.external-link-handler\";\nimport {IOmgExternalLinkHandler} from \"../handlers/omg/omg.external-link-handler.interface\";\nimport {OmgExternalLinkHandler} from \"../handlers/omg/omg.external-link-handler\";\nimport {\n IForgotUserNameExternalLinkHandler\n} from \"../handlers/forgot-credentials/forgot-user-name/forgot-user-name.external-link-handler.interface\";\nimport {\n ForgotUserNameExternalLinkHandler\n} from \"../handlers/forgot-credentials/forgot-user-name/forgot-user-name.external-link-handler\";\nimport {\n IForgotPasswordExternalLinkHandler\n} from \"../handlers/forgot-credentials/forgot-password/forgot-password.external-link-handler.interface\";\nimport {\n ForgotPasswordExternalLinkHandler\n} from \"../handlers/forgot-credentials/forgot-password/forgot-password.external-link-handler\";\nimport {\n IPendingLoginExternalLinkHandler\n} from \"../handlers/pending-login/pending-login.external-link-handler.interface\";\nimport {PendingLoginExternalLinkHandler} from \"../handlers/pending-login/pending-login.external-link-handler\";\nimport {\n IMyAccountUploadDocumentsExternalLinkHandler\n} from \"../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport {MyAccountUploadDocumentsExternalLinkHandler} from \"../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler\";\nimport {IGameLimitsExternalLinkHandler} from \"../handlers/game-limits/game-limits.external-link-handler.interface\";\nimport {GameLimitsExternalLinkHandler} from \"../handlers/game-limits/game-limits.external-link-handler\";\nimport {IContactUsExternalLinkHandler} from \"../handlers/contact-us/contact-us.external-link-handler.interface\";\nimport {ContactUsExternalLinkHandler} from \"../handlers/contact-us/contact-us.external-link-handler\";\nimport {IRichExternalLinkHandler} from \"../handlers/rich/rich.external-link-handler.interface\";\nimport {RichExternalLinkHandler} from \"../handlers/rich/rich.external-link-handler\";\nimport {IHelpExternalLinkHandler} from \"../handlers/help/help.external-link-handler.interface\";\nimport {HelpExternalLinkHandler} from \"../handlers/help/help.external-link-handler\";\nimport {\n IPendingActionExternalLinkHandler\n} from \"../handlers/pending-action/pending-action.external-link-handler.interface\";\nimport {\n DepositPendingActionExternalLinkHandler\n} from \"../handlers/pending-action/deposit/deposit-pending-action.external-link-handler\";\nimport {\n TransactionHistoryPendingActionExternalLinkHandler\n} from \"../handlers/pending-action/transaction-history/transaction-history-pending-action.external-link-handler\";\nimport {\n RealGamePlayPendingActionExternalLinkHandler\n} from \"../handlers/pending-action/real-game-play/real-game-play-pending-action.external-link-handler\";\nimport {\n IOpenRealGamePlayPendingActionOptions\n} from \"../handlers/pending-action/real-game-play/real-game-play-pending-action.external-link-handler.interface\";\n\n\nexport class ExternalLinksHandlersFactory implements IExternalLinksHandlersFactory {\n constructor(protected readonly services: IServiceFactoryExtended) {\n\n }\n get registration(): IRegistrationExternalLinkHandler {\n return new RegistrationExternalLinkHandler(this.services);\n }\n\n get myAccount(): IMyAccountExternalLinkHandler {\n return new MyAccountExternalLinkHandler(this.services);\n }\n\n get cashier(): ICashierExternalLinkHandler {\n return new CashierExternalLinkHandler(this.services);\n }\n\n get omg(): IOmgExternalLinkHandler {\n return new OmgExternalLinkHandler(this.services);\n }\n\n get forgotUserName(): IForgotUserNameExternalLinkHandler {\n return new ForgotUserNameExternalLinkHandler(this.services);\n }\n\n get forgotPassword(): IForgotPasswordExternalLinkHandler {\n return new ForgotPasswordExternalLinkHandler(this.services);\n }\n\n get pendingLogin(): IPendingLoginExternalLinkHandler {\n return new PendingLoginExternalLinkHandler(this.services);\n }\n\n get realGamePlayPendingAction(): IPendingActionExternalLinkHandler {\n return new RealGamePlayPendingActionExternalLinkHandler(this.services);\n }\n\n get depositPendingAction(): IPendingActionExternalLinkHandler {\n return new DepositPendingActionExternalLinkHandler(this.services);\n }\n\n get transactionHistoryPendingAction(): IPendingActionExternalLinkHandler {\n return new TransactionHistoryPendingActionExternalLinkHandler(this.services);\n }\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new MyAccountUploadDocumentsExternalLinkHandler(this.services);\n }\n get gameLimits(): IGameLimitsExternalLinkHandler {\n return new GameLimitsExternalLinkHandler(this.services);\n }\n\n get contactUs(): IContactUsExternalLinkHandler {\n return new ContactUsExternalLinkHandler(this.services);\n }\n\n get rich(): IRichExternalLinkHandler {\n return new RichExternalLinkHandler(this.services);\n }\n\n get help(): IHelpExternalLinkHandler {\n return new HelpExternalLinkHandler(this.services);\n }\n}","import {\n GameModeEnum,\n IGameContextViewModel\n} from \"../../../services/game-runner/interfaces/game-context/game-context-view-model.interface\";\nimport {IServiceFactory} from \"../../../services/service-factory.interface\";\nimport {UndefinedString} from \"../../../../common/types/nullable-types\";\n\nexport class HeaderWelcomeButtonsAnalyticsSender {\n constructor(private readonly action: string,\n private readonly services: IServiceFactory,\n private readonly gameContext: IGameContextViewModel | undefined) {\n }\n\n sendAnalytics() {\n let category = 'Client_LoginButtons';\n let label: UndefinedString = undefined;\n if(this.gameContext) {\n category = this.gameContext.gameMode === GameModeEnum.Demo ? 'Client_GameFrame_Anonymous' : 'Client_GameFrame_Real';\n label = this.gameContext.gameInfo.gameType + '_' + this.gameContext.gameInfo.title.replace(/ /g, '');\n }\n\n this.services.analytics.sendAnalytics(category, this.action, label);\n }\n}","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {getButtonSizeVariant} from \"../../welcome-buttons/header-welcome-buttons-helpers\";\nimport {HeaderWelcomeButtonsAnalyticsSender} from \"../../welcome-buttons/header-welcome-buttons-analytics-sender\";\nimport {HeaderWelcomeLoginButtonComponentProps} from \"./header-login-button.component.props\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface HeaderLoginButtonComponentWithServiceProps extends HeaderWelcomeLoginButtonComponentProps, ComponentServicesPick<'header'> {\n}\n\n\n@observer\nexport class ComponentBody extends OrbitComponent {\n\n private _onClick = async () => {\n if(this.services.regulation.shouldEnforceHybridAppForMobileWeb()) {\n new HeaderWelcomeButtonsAnalyticsSender('DownloadApp', this.services, this.props.gameContext).sendAnalytics();\n this.services.specificDialogs.enforceHybridAppModal();\n } else {\n new HeaderWelcomeButtonsAnalyticsSender('login', this.services, this.props.gameContext).sendAnalytics();\n await this.services.user.openLogin({\n dl: \"19519\"\n });\n }\n }\n\n\n render() {\n\n return (\n \n { this.services.translation.translate(\"Login\") }\n \n )\n }\n}\nexport const HeaderLoginButtonComponent = withServices(ComponentBody, [\"header\"]);","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {getButtonSizeVariant} from \"../../welcome-buttons/header-welcome-buttons-helpers\";\nimport {HeaderWelcomeButtonsAnalyticsSender} from \"../../welcome-buttons/header-welcome-buttons-analytics-sender\";\nimport {HeaderWelcomeRegisterButtonComponentProps} from \"./header-register-button.component.props\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\n\ninterface HeaderRegisterButtonComponentWithServicesProps extends HeaderWelcomeRegisterButtonComponentProps, ComponentServicesPick<'cmsSegmentation' | 'header'> {\n\n}\n\n@observer\nclass ComponentBody extends OrbitComponent {\n private _onClick = async () => {\n new HeaderWelcomeButtonsAnalyticsSender('Register', this.services, this.props.gameContext).sendAnalytics();\n await (await this.services.externalLinks).openMembership( {\n channel: {\n area: AreaType.Header,\n source: CHANNEL_SOURCE.casinoClient,\n element: CHANNEL_ELEMENTS.registerButton\n },\n marketingParams: {dl: \"19518\"}\n });\n }\n\n render() {\n if(this.props.cmsSegmentation.isCisOrCip || !this.services.configuration.data.generalSettings.showRegisterButton) {\n return null;\n }\n return (\n \n { this.props.text ?? this.services.translation.translate(\"SIGN_UP\") }\n \n );\n }\n}\n\nexport const HeaderRegisterButtonComponent = withServices(ComponentBody, ['cmsSegmentation', 'header']);","import styled from \"styled-components\";\n\nconst AboutDefaultBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n ${({theme}) => theme.font.presets.body};\n padding-top: 3rem;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 0;\n }\n`;\n\nexport const AboutBox = AboutDefaultBox;","import styled from \"styled-components\";\n\nconst AboutInfoSectionDefaultBox = styled.div`\n margin-bottom: 1rem;\n \n font-size: 1.6rem;\n color: ${({theme}) => theme.colors.textLight};\n \n > :nth-child(2n+1) {\n font-size: 1.4rem;\n color: ${({theme}) => theme.colors.textMiddleDark};\n }\n`;\n\nexport const AboutInfoSectionBox = AboutInfoSectionDefaultBox;","import styled from \"styled-components\";\n\nconst AboutFooterSectionDefaultBox = styled.div`\n font-size: 1.25rem;\n color: ${({theme}) => theme.colors.brandPrimary};\n text-decoration: underline;\n cursor: pointer;\n`;\n\nexport const AboutFooterSectionBox = AboutFooterSectionDefaultBox;","import {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {AboutBox} from \"./boxes/about.box\";\nimport {AboutInfoSectionBox} from \"./boxes/about-info-section.box\";\nimport {AboutFooterSectionBox} from \"./boxes/about-footer-section.box\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport { CHANNEL_SOURCE } from \"../../../common/const/casinofied-analytics-consts\";\nimport { CyClass } from \"../../../common/cy-classes\";\n\nexport interface AboutComponentProps {\n fiscalCode?: string;\n openSessionsBalance?: number;\n}\n\ninterface AboutComponentInternalProps extends AboutComponentProps {\n dialogHandler: IModalDialogHandler;\n clientVersion: string;\n}\n\nexport class AboutComponent extends OrbitComponent {\n\n componentDidMount() {\n super.componentDidMount();\n this.services.analytics.sendOrbitUserFlowEvent(\"Client_About\", \"Open\");\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this.services.analytics.sendOrbitUserFlowEvent(\"Client_About\", \"Close\");\n }\n\n private _handleHelpTextClick = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Client_About\", \"Help\");\n this.props.dialogHandler.close();\n await (await this.services.appLauncher).openHelpCenter({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n source: CHANNEL_SOURCE.about_popup,\n area: AreaType.button,\n }\n });\n }\n\n private _renderHelpText = () => {\n if (this.services.miniOrbit.isEnabled) {\n return null;\n }\n\n return (\n \n {this.services.translation.translate(\"ABOUT_HELP_SUPPORT\")}\n \n );\n };\n\n private _renderAboutInfoSection(sectionTitleKey: string, value: string, valueClass?: string) {\n if (!Check.isEmpty(value)) {\n return (\n \n
    {this.services.translation.translate(sectionTitleKey)}
    \n
    {value}
    \n
    \n );\n }\n return null;\n }\n\n render() {\n const openSessionBalance = Check.isNullOrUndefined(this.props.openSessionsBalance) ? undefined : this.services.currency.formatMoney(this.props.openSessionsBalance);\n return (\n \n {this._renderAboutInfoSection(\"ABOUT_SUPPORT_ID_TITLE\", this.services.user.cid)}\n {this._renderAboutInfoSection(\"ABOUT_FISCAL_CODE_TITLE\", this.props.fiscalCode)}\n {this._renderAboutInfoSection(\"ABOUT_OPEN_SESSION_TITLE\", openSessionBalance, CyClass(\"cy-about-session-balance-amount\"))}\n {this._renderAboutInfoSection(\"ABOUT_CLIENT_VERSION_TITLE\", this.props.clientVersion)}\n {this._renderHelpText()}\n \n );\n }\n}","import styled from \"styled-components\";\n\nexport const LastLoginLabelDefaultBox = styled.div`\n font-size: 1.2rem;\n font-weight: 500;\n padding-bottom: 0.5rem;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n display: inline-block;\n padding-right: 0.5rem;\n font-size: 1rem;\n padding-bottom: 0rem;\n }\n`;\n\nexport const LastLoginLabelBox = LastLoginLabelDefaultBox;","import styled from \"styled-components\";\n\nexport const LastLoginValueDefaultBox = styled.div`\n font-size: 1rem;\n font-weight: 500;\n white-space: nowrap;\n`;\n\nexport const LastLoginValueBox = LastLoginValueDefaultBox;","import {Check} from \"@sparkware/app-utils\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {LastLoginLabelBox} from \"./boxes/last-login-label.box\";\nimport {LastLoginValueBox} from \"./boxes/last-login-value.box\";\n \nexport const LastLoginComponent: React.FC = observer(() => {\n const services = useServices();\n if (Check.isNull(services.user.lastLogin)) {\n return null\n }\n\n return (\n
    \n \n {services.translation.translate('LAST_LOGIN_TITLE')}\n \n \n {services.user.lastLogin}\n \n
    \n )\n})","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemBetIntervalBox = styledBox('LiveCasinoGridItemBetIntervalBox');\n","import styled from 'styled-components';\n\nexport const LiveCasinoGridItemBetIntervalMinWrapperBox = styled.span`\n padding-inline-end: 4px;\n`;\n","import React from 'react';\nimport { observer } from \"mobx-react\";\nimport { useServices } from \"../../../../../react-hooks/use-services.hook\";\nimport { LiveCasinoGridItemBetIntervalBox } from \"../boxes/bet-interval/live-casino-grid-item-bet-interval.box\";\nimport { LiveCasinoGridItemBetIntervalMinWrapperBox } from \"../boxes/bet-interval/live-casino-grid-item-bet-interval-min-wrapper.box\";\nimport { Check } from \"@sparkware/app-utils\";\nimport {LiveCasinoMinMaxBetComponentProps} from \"./live-casino-min-max-bet.component.props\";\n\nexport const LiveCasinoMinMaxBet: React.FC = observer((props) => {\n const services = useServices();\n\n const tableInfo = props.liveTable;\n let minBet: number;\n let maxBet: number;\n\n if (Check.isEmpty(tableInfo) || (tableInfo.MinBet === undefined || tableInfo.MaxBet === undefined)) {\n minBet = props.gameInfo.minBet;\n maxBet = props.gameInfo.maxBet;\n } else {\n minBet = tableInfo.MinBet;\n maxBet = tableInfo.MaxBet;\n }\n\n if (!minBet || !maxBet) {\n services.logger.info(`format$$$ invalid input for gameType => ${props.gameInfo.gameType} ${minBet}-${maxBet}`);\n return;\n }\n\n const renderMinBet = (minBet: number) => {\n return (\n <>\n {props.isHideMaxBet && \n {services.translation.translate('MIN_BET')}\n }\n {services.currency.formatMoney(minBet, true)}\n \n );\n };\n\n\n return (\n \n \n {\n (services.device.isMobile || props.isHideMaxBet) ?\n renderMinBet(minBet) :\n services.currency.formatMinMaxBet(minBet, maxBet)\n }\n \n \n );\n});","import React from 'react';\nimport { IRegulationComponents } from \"./regulation-components.interface\";\nimport {\n HeaderWelcomeLoginButtonComponentProps\n} from \"../../components/header/buttons/login-button/header-login-button.component.props\";\nimport {\n HeaderWelcomeRegisterButtonComponentProps\n} from \"../../components/header/buttons/register-button/header-register-button.component.props\";\nimport {\n HeaderLoginButtonComponent\n} from \"../../components/header/buttons/login-button/header-login-button.component\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport {\n HeaderRegisterButtonComponent\n} from \"../../components/header/buttons/register-button/header-register-button.component\";\nimport { AboutComponent, AboutComponentProps } from \"../../components/about-component/about.component\";\nimport { MinimumGamblingAgeComponent } from \"../../components/responsible-gambling/minimum-gambling-age/minimum-gambling-age.component\";\nimport { LastLoginComponent } from '../../components/clock-and-last-login-box/last-login/last-login.component';\nimport { LiveCasinoMinMaxBet } from '../../components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/live-casino-min-max-bet.component';\nimport {\n LiveCasinoMinMaxBetComponentProps\n} from \"../../components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/live-casino-min-max-bet.component.props\";\n\nexport class RegulationComponentsCommon implements IRegulationComponents {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n\n renderHeaderLoginButton(props: HeaderWelcomeLoginButtonComponentProps): React.ReactElement {\n return (\n \n );\n }\n\n renderHeaderRegisterButton(props: HeaderWelcomeRegisterButtonComponentProps): React.ReactElement {\n return (\n \n );\n }\n\n renderHeaderRegulationIcons() {\n return null;\n }\n\n renderHeaderMinimumGamblingAge() {\n return ();\n }\n\n renderLastLoginComponent() {\n return ();\n }\n\n renderLiveCasinoMinMaxBet(props: LiveCasinoMinMaxBetComponentProps) {\n return (\n \n );\n }\n\n protected _getAboutDialogProps(): Promise {\n return Promise.resolve({});\n }\n\n showAboutDialog(): Promise {\n return this._getAboutDialogProps().then(props => {\n return new Promise(resolve => {\n this.services.dialog.showModal(dialogHandler => , {\n title: this.services.translation.translate(\"ABOUT_TITLE\"),\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n onClosed: () => resolve()\n });\n })\n })\n\n\n }\n\n}","import {IRegulationMenuItemFactory} from \"./regulation-menu-item-factory.interface\";\nimport {MenuItemKey} from \"../../configurations/config-data-sections/generated-config-const\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemRenderer} from \"../renderer/menu-item.renderer.interface\";\nimport {IMenuItemConfigReader} from \"../menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IMenuItemActionFactoryService} from \"../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\nexport class RegulationMenuItemFactoryBase implements IRegulationMenuItemFactory {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n\n getSideMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n getCrossBrandsAboveSearchItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n getBottomNavBarMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n getUsefulLinksMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n getUserMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n getAppHeaderMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n}","import {\n IRegulationLinkNavigationHook,\n IRegulationLinkNavigationHookResult,\n RegulationNavigationHookContinuationMode\n} from \"./regulation-link-navigation-hook.interface\";\nimport {INavigateLinkOptions} from \"../links-navigation.service.interface\";\n\nexport class RegulationNavigationHookBase implements IRegulationLinkNavigationHook {\n async navigateLink(options: INavigateLinkOptions): Promise {\n return {\n continuationMode: RegulationNavigationHookContinuationMode.Continue\n };\n }\n\n}","import {IModalDialogHandler} from \"../dialog/dialog.service.interface\";\n\nexport interface IConfirmLugasCoolingOffLogoutDialogOptions {\n onAccept: () => Promise;\n onReject: () => Promise;\n}\n\nexport enum DialogResult {\n Accepted,\n Rejected\n}\n\nexport interface ISpecificDialogsService {\n enforceHybridAppModal(analyticsOnClick?: {\n category: string;\n action?: string;\n label?: string;\n value?: any;\n omitStructuredLogger?: boolean;}\n ): IModalDialogHandler;\n showLugasCooldownPopup(): IModalDialogHandler;\n showLugasActivePopup(): IModalDialogHandler;\n showConfirmLugasCoolingOffLogout(options: IConfirmLugasCoolingOffLogoutDialogOptions): Promise;\n showLoginPopup(confirmClicked: ()=> void): Promise;\n showModifyBiometricDialog(): IModalDialogHandler;\n showLogoutGamblingSessionSummary(): Promise;\n}\n","import {IGameRealityCheckInterval, IRegulation} from \"./regulation.service.interface\";\nimport {ILegacyRegulation} from \"./legacy-regulation.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {REGULATION_NAMES} from \"../../../sdk/src/services/regulation/regulation_const\";\nimport {NullableString} from \"../../../common/types/nullable-types\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {ExternalLinksHandlersFactory} from \"../external-links/handlers-factory/external-links-handlers-factory\";\nimport {IRegulationComponents} from \"./regulation-components.interface\";\nimport {RegulationComponentsCommon} from \"./regulation-components-common\";\nimport {IRegulationMenuItemFactory} from \"../menu-items-common/regulations-specific/regulation-menu-item-factory.interface\";\nimport {RegulationMenuItemFactoryBase} from \"../menu-items-common/regulations-specific/regulation-menu-item-factory-base\";\nimport {\n IRegulationLinkNavigationHook\n} from \"../links-navigation/regulation-hooks/regulation-link-navigation-hook.interface\";\nimport {RegulationNavigationHookBase} from \"../links-navigation/regulation-hooks/regulation-navigation-hook-base\";\nimport { GameChildishIconMode } from \"../../../common/enums/game-childish-icon-mode.enum\";\n\nexport class LegacyRegulationWrapper implements IRegulation {\n constructor(protected readonly legacyRegulation: ILegacyRegulation,\n public readonly regulationType: number,\n protected services: IServiceFactoryExtended) {\n }\n get name(): string {\n return REGULATION_NAMES[this.regulationType];\n }\n\n get responsibleGamingAge(): number {\n return this.services.sdk.getSkin().getMinimumAge();\n }\n\n getRealityCheckIntervalExpectedByTheGame(): IGameRealityCheckInterval {\n return this.legacyRegulation.getRealityCheckIntervalExpectedByTheGame();\n }\n\n getAgeResponsibleGamingLabel(): NullableString {\n return this.legacyRegulation.getAgeResponsibleGamingLabel();\n }\n\n async disableRealityCheck(): Promise {\n await this.legacyRegulation.updateRealityCheckInterval(0);\n }\n\n showNightLimitMessage(nightLimitExpirationDate: Date) {\n this.legacyRegulation.showNightLimitMessage(nightLimitExpirationDate);\n }\n\n get postLoginActionsArePassed(): boolean {\n return this.legacyRegulation.postLoginActionsArePassed();\n }\n\n logoutUser(): Promise {\n return this.services.user.logout();\n }\n\n get externalLinks(): IExternalLinksHandlersFactory {\n return new ExternalLinksHandlersFactory(this.services);\n }\n\n get components(): IRegulationComponents {\n return new RegulationComponentsCommon(this.services);\n }\n\n get menuItems(): IRegulationMenuItemFactory {\n return new RegulationMenuItemFactoryBase(this.services);\n }\n\n get linksNavigationHook(): IRegulationLinkNavigationHook {\n return new RegulationNavigationHookBase();\n }\n\n get gameIconAnimationsAllowed(): boolean {\n return this.legacyRegulation.gameIconAnimationsAllowed();\n }\n\n getChildishIconMode(): GameChildishIconMode {\n return this.legacyRegulation.getChildishIconMode();\n }\n\n get isGamblingSessionEnabled(): boolean {\n return false;\n }\n\n formatLastLoginFromUnixTimeStampInSeconds(lastLoginUnixTimeStampInSeconds: number): NullableString {\n return null;\n }\n\n openInactivitySettings(): void {\n\n }\n\n async showRealityCheckMessage(): Promise {\n\n }\n}","import React from 'react';\nimport {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {ResponsibleGamingButtonsGermanyComponent} from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/germany/responsible-gaming-buttons-germany.component\";\nimport {GermanyResponsibleGamingButtonPlacement} from \"../../../../../common/const/responsible-gaming\";\n\nexport class GermanyRegulationComponents extends RegulationComponentsCommon {\n renderHeaderRegulationIcons() {\n return (\n \n );\n }\n}","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogBox = styled.div`\n display: grid;\n width: 100%;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n color: ${props => props.theme.colors.textMiddleDark};\n font-size: 1.4rem;\n`","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogHeaderBox = styled.div`\n grid-column: 1 / -1;\n display: flex;\n align-items: center;\n justify-content: center;\n align-content: center;\n text-align: center;\n`","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogFooterBox = styled.div`\n grid-column: 1 / -1;\n display: flex;\n align-items: center;\n justify-content: center;\n align-content: center;\n text-align: center;\n`","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogFieldLabelBox = styled.div`\n ${props => props.theme.font.presets.bold}\n @media ${({theme}) => theme.mediaQuery.sAndBelow } {\n font-size: 1.2rem;\n }\n`","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogFieldValueBox = styled.div`\n color: ${props => props.theme.colors.textContrast};\n align-self: flex-end;\n justify-self: flex-end;\n ${props => props.theme.font.presets.bold}\n`","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogButtonsBox = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 20px;\n grid-column: 1/-1;\n`","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {GermanyRealityCheckDialogBox} from \"./boxes/germany.reality-check-dialog.box\";\nimport {GermanyRealityCheckDialogHeaderBox} from \"./boxes/germany.reality-check-dialog-header.box\";\nimport {GermanyRealityCheckDialogFooterBox} from \"./boxes/germany.reality-check-dialog-footer.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {GermanyRealityCheckDialogFieldLabelBox} from \"./boxes/germany.reality-check-dialog-field-label.box\";\nimport {GermanyRealityCheckDialogFieldValueBox} from \"./boxes/germany.reality-check-dialog-field-value.box\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport {GermanyRealityCheckDialogButtonsBox} from \"./boxes/germany.reality-check-dialog-buttons.box\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {DISPLAY_MESSAGE_NAMES} from \"../../../../common/const/casinofied-analytics-consts\";\n\n\ninterface GermanyRealityCheckDialogComponentProps extends ComponentServicesPick<'gameRunner'>{\n dialogHandler: IModalDialogHandler;\n businessCorrelationId: string;\n totalNetLoss: number;\n}\n\n\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n\n const isGameRunning = Boolean(props.gameRunner.currentRunningGame);\n\n const sendAnalytics = (action: string) => {\n services.analytics.sendAnalytics('reality_check_message', action);\n }\n\n const sendMessageActionTaken = () => {\n services.casinofiedAnalytics.messageActionTaken({\n businessCorrelationID: props.businessCorrelationId,\n displayMessageName: DISPLAY_MESSAGE_NAMES.REALITY_CHECK_GERMANY_MESSAGE_NAME,\n actionType: \"Confirmation\"\n });\n }\n\n const onCloseGame = async () => {\n\n sendAnalytics('close_game');\n\n sendMessageActionTaken();\n\n await props.gameRunner.currentRunningGame?.closeGame({\n shouldSuggestNextGame: false\n });\n\n props.dialogHandler.close();\n }\n\n const onContinue = async () => {\n if(isGameRunning) {\n sendAnalytics('continue_in_game')\n } else {\n sendAnalytics('continue_in_lobby')\n }\n\n sendMessageActionTaken();\n\n props.dialogHandler.close();\n }\n\n\n const renderContinueButton = () => {\n return (\n \n )\n }\n\n const renderButtons = () => {\n if(isGameRunning) {\n return (\n <>\n \n\n {renderContinueButton()}\n\n \n )\n }\n\n return renderContinueButton()\n\n\n }\n\n const formatSessionTime = () => {\n const sessionTime = services.sessionTimer.currentSessionTimer;\n return sessionTime.hours.toString().padStart(2, '0') + 'h:' + sessionTime.minutes.toString().padStart(2, '0') + 'm';\n }\n\n return (\n \n \n {services.translation.translate('REALITY_CHECK_DIALOG_HEADER_TEXT')}\n \n\n \n {services.translation.translate('REALITY_CHECK_DIALOG_SESSION_TIMER_LABEL')}\n \n\n \n {formatSessionTime()}\n \n\n \n {\n props.totalNetLoss >= 0\n ? services.translation.translate('REALITY_CHECK_DIALOG_SESSION_LOSSES_LABEL')\n : services.translation.translate('REALITY_CHECK_DIALOG_SESSION_WINNINGS_LABEL')\n }\n \n\n \n {services.currency.formatMoney(Math.abs(props.totalNetLoss))}\n \n\n \n {services.translation.translate('REALITY_CHECK_DIALOG_THANK_YOU_MESSAGE')}\n \n\n \n {renderButtons()}\n \n \n )\n})\n\nexport const GermanyRealityCheckDialogComponent = withServices(ComponentBody, ['gameRunner']);","import {LegacyRegulationWrapper} from '../legacy-regulation-wrapper'\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {GermanyRegulationComponents} from \"./components/germany.regulation-components\";\nimport {\n GermanyRealityCheckDialogComponent\n} from \"../../../components/reality-check/germany/germany.reality-check-dialog.component\";\nimport {DISPLAY_MESSAGE_IDS, DISPLAY_MESSAGE_NAMES} from \"../../../../common/const/casinofied-analytics-consts\";\n\nexport class GermanyRegulation extends LegacyRegulationWrapper {\n\n async logoutUser(): Promise {\n await this.services.specificDialogs.showConfirmLugasCoolingOffLogout({\n onAccept: async () => super.logoutUser(),\n onReject: async () => {},\n });\n }\n\n get components(): IRegulationComponents {\n return new GermanyRegulationComponents(this.services);\n }\n\n async showRealityCheckMessage(): Promise {\n const gameRunner = await this.services.gameRunner;\n if (!gameRunner.shouldShowRealityCheckMessage) {\n return;\n }\n\n const businessCorrelationId = this.services.tools.getGuid();\n\n let totalNetLoss = 0;\n\n try {\n totalNetLoss = (await this.services.api.userController.getRealityCheckData()).TotalNetLoss;\n } catch (err) {\n this.services.logger.error('Failed to get germany reality check data', err);\n }\n\n return new Promise(resolve => {\n\n this.services.casinofiedAnalytics.messageDisplay({\n displayMessageID: DISPLAY_MESSAGE_IDS.realityCheckGermany,\n displayMessageName: DISPLAY_MESSAGE_NAMES.REALITY_CHECK_GERMANY_MESSAGE_NAME,\n businessCorrelationID: businessCorrelationId\n });\n\n\n this.services.sdk.eventsTrigger.realityCheckOpen();\n\n this.services.dialog.showModal((dialogHandler) => (\n ), {\n title: this.services.translation.translate('REALITY_CHECK_DIALOG_TITLE'),\n hideCloseButton: true,\n showPopupAboveSecondWebViewHybrid: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n isHighPriority: true,\n onClosed: () => {\n this.services.sdk.eventsTrigger.realityCheckClosed();\n resolve();\n }\n })\n })\n }\n}","import {RegistrationExternalLinkHandler} from \"../../registration.external-link-handler\";\nimport {IOpenRegistrationOptions} from \"../../registration.external-link-handler.interface\";\n\nexport class MichiganRegistrationExternalLinkHandler extends RegistrationExternalLinkHandler {\n async openRegistration(options?: IOpenRegistrationOptions): Promise {\n try {\n await this.services.stateOfResidenceIdentifier.displayStateSelectorPopup();\n } catch (err) {\n this.services.logger.debug('State selector popup canceled', err);\n return;\n }\n\n return await super.openRegistration(options);\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/registration.external-link-handler.interface\";\nimport {\n MichiganRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/regulations/michigan/michigan.registration.external-link-handler\";\n\nexport class MichiganExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n get registration(): IRegistrationExternalLinkHandler {\n return new MichiganRegistrationExternalLinkHandler(this.services);\n }\n}","import styled from \"styled-components\";\n\nexport const SessionTimerLabelDefaultBox = styled.div`\n padding-bottom: 0.5rem;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n display: inline-block;\n padding-right: 0.5rem;\n padding-bottom: 0;\n }\n`;\n\nexport const SessionTimerLabelBox = SessionTimerLabelDefaultBox;","import styled from \"styled-components\";\n\nexport const SessionTimerValueDefaultBox = styled.div`\n white-space: nowrap;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n display: inline-block;\n }\n`;\n\nexport const SessionTimerValueBox = SessionTimerValueDefaultBox;","import styled from \"styled-components\";\n\nexport const SessionTimerBox = styled.div`\n font-size: 1.2rem;\n font-weight: 500;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 1rem;\n }\n`","import React from 'react';\nimport {reaction} from \"mobx\";\nimport {observer} from \"mobx-react\";\nimport {useEffect, useState} from \"react\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {SessionTimerLabelBox} from \"./boxes/session-timer-label.box\";\nimport {SessionTimerValueBox} from \"./boxes/session-timer-value.box\";\nimport {SessionTimerBox} from \"./boxes/session-timer.box\";\n\nexport const SessionTimerComponent: React.FC<{className?: string}> = observer((props) => {\n const services = useServices();\n const [sessionTimer, setSessionTimer] = useState(services.sessionTimer.currentSessionTimer);\n\n if (!sessionTimer) {\n return null;\n }\n\n const hours = Math.floor(sessionTimer.totalHours);\n const minutes = Math.floor(sessionTimer.minutes);\n\n useEffect(() => {\n const reactionDispose = reaction(() => services.sessionTimer.currentSessionTimer,\n (currentSessionTimer) => {\n if (sessionTimer?.totalMinutes !== currentSessionTimer?.totalMinutes) {\n setSessionTimer(currentSessionTimer);\n }\n });\n\n return () => {\n reactionDispose();\n }\n }, [services.sessionTimer.currentSessionTimer, sessionTimer?.totalMinutes]);\n\n return (\n \n {!services.device.os.isMobileOS &&\n \n {services.translation.translate('SESSION_TIMER_TITLE')}:\n \n\n }\n \n {`${hours.toString().padStart(2, '0')} : ${minutes.toString().padStart(2, '0')}`}\n \n \n )\n})","import styled from \"styled-components\";\n\nexport const LastLoginAndSessionTimerBox = styled.div`\n display: flex;\n gap: 10px;\n\n @media ${({ theme }) => theme.mediaQuery.mAndBelow} {\n align-items: center;\n height: 100%;\n }\n\n @media ${({ theme }) => theme.mediaQuery.lAndAbove} {\n flex-direction: column;\n }\n`;\n\nexport const LastLoginAndSessionTimerDefaultBox = LastLoginAndSessionTimerBox;","import styled from \"styled-components\";\n\nexport const LastLoginContainerBox = styled.div`\n @media ${({ theme }) => theme.mediaQuery.mAndBelow} {\n padding-inline-end: 10px;\n border-inline-end: 1px solid ${props => props.theme.colors.textMiddleDark};\n }\n\n @media ${({ theme }) => theme.mediaQuery.lAndAbove} {\n padding-block-end: 10px;\n border-block-end: 1px solid ${props => props.theme.colors.textMiddleDark};\n }\n`;\n\nexport const LastLoginContainerDefaultBox = LastLoginContainerBox;","import { observer } from \"mobx-react\";\nimport { LastLoginComponent } from \"../last-login/last-login.component\"\nimport { SessionTimerComponent } from \"../session-timer/session-timer.component\"\nimport { LastLoginAndSessionTimerBox } from \"./boxes/last-login-and-session-timer.box\"\nimport { LastLoginContainerBox } from \"./boxes/last-login-container.box\";\n\nexport const LastLoginAndSessionTimerComponent: React.FC = observer(() => {\n return (\n \n \n \n \n \n \n )\n});","import { TimeSpan } from \"@sparkware/app-utils\";\nimport { observer } from \"mobx-react\";\nimport React, { useState, useEffect } from 'react';\nimport { namedSetTimeout } from \"../../../../common/utils/time-functions\";\nimport { DEFAULT_SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL } from \"../../../services/regulation/regulation-const\";\nimport { LastLoginComponent } from \"../last-login/last-login.component\";\nimport { SessionTimerComponent } from \"../session-timer/session-timer.component\";\nimport { LastLoginAndSessionTimerComponent } from \"../last-login-and-session-timer/last-login-and-session-timer.component\";\n\ninterface LastLoginSessionTimerSwitcherComponentProps {\n switchToSessionTimerInterval?: TimeSpan;\n showLastLoginForever?: boolean\n}\nexport const LastLoginSessionTimerSwitcherComponent: React.FC = observer((props) => {\n const [renderSessionTimer, setRenderSessionTimer] = useState(false);\n\n useEffect(() => {\n const timerId = namedSetTimeout('SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL', () => {\n setRenderSessionTimer(true);\n }, props.switchToSessionTimerInterval || TimeSpan.fromMinutes(DEFAULT_SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL));\n\n return () => {\n clearTimeout(timerId);\n };\n }, [props.switchToSessionTimerInterval]);\n\n if (props.showLastLoginForever && renderSessionTimer) {\n return ()\n } else if (renderSessionTimer) {\n return \n } else {\n return \n }\n})","export const DEFAULT_SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL = 1;","import React from 'react';\nimport {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {\n HeaderWelcomeRegisterButtonComponentProps\n} from \"../../../../components/header/buttons/register-button/header-register-button.component.props\";\nimport {MinimumGamblingAgeComponent} from \"../../../../components/responsible-gambling/minimum-gambling-age/minimum-gambling-age.component\";\nimport { LastLoginSessionTimerSwitcherComponent } from '../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component';\n\nexport class MichiganRegulationComponents extends RegulationComponentsCommon {\n\n\n renderHeaderRegisterButton(props: HeaderWelcomeRegisterButtonComponentProps): React.ReactElement {\n const specificProps: Partial = {};\n if(this.services.regulation.shouldEnforceHybridAppForMobileWeb()) {\n specificProps.text = this.services.translation.translate(\"JOIN_NOW\");\n }\n return super.renderHeaderRegisterButton({\n ...props,\n ...specificProps\n });\n }\n\n renderHeaderMinimumGamblingAge() {\n return();\n }\n\n renderLastLoginComponent() {\n return ()\n }\n}","import {\n GenericSideMenuItemComponent\n} from \"../../../../../components/side-menu-rework/side-menu-items/generic-side-menu-item.component\";\nimport styled from \"styled-components\";\n\n\nexport const MichiganSportSideMenuItemComponent = styled(GenericSideMenuItemComponent)`\n border: 2px solid rgba(112, 115, 114, 0.5) !important;\n border-radius: 10px;\n margin: 0;\n overflow: hidden;\n`;","import React from 'react';\nimport {MenuItemRendererBase} from \"../../../menu-items-common/renderer/menu-item-renderer-base\";\nimport {\n IMenuItemConfigReader\n} from \"../../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IRenderMenuItemOptions} from \"../../../menu-items-common/renderer/menu-item.renderer.interface\";\nimport {MichiganSportSideMenuItemComponent} from \"./components/michigan.sport-side-menu-item.component\";\nimport {\n IMenuItemActionFactoryService\n} from \"../../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\nexport class MichiganSportSideMenuItemRenderer extends MenuItemRendererBase {\n constructor( configReader: IMenuItemConfigReader,\n services: IServiceFactoryExtended,\n menuItemActionFactory: IMenuItemActionFactoryService) {\n super('sportCrossBrandMenuItem', configReader, services, menuItemActionFactory);\n }\n\n protected _createReactElement(options?: IRenderMenuItemOptions): React.ReactElement {\n return ();\n }\n}","import {\n RegulationMenuItemFactoryBase\n} from \"../../menu-items-common/regulations-specific/regulation-menu-item-factory-base\";\nimport {MenuItemKey} from \"../../configurations/config-data-sections/generated-config-const\";\nimport {IMenuItemRenderer} from \"../../menu-items-common/renderer/menu-item.renderer.interface\";\nimport {MichiganSportSideMenuItemRenderer} from \"./side-menu/michigan.sport-side-menu-item.renderer\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IMenuItemActionFactoryService} from \"../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\nexport class MichiganMenuItemFactory extends RegulationMenuItemFactoryBase {\n getSideMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n switch (key) {\n case \"sportCrossBrandMenuItem\":\n return new MichiganSportSideMenuItemRenderer(configReader, this.services, menuItemActionFactory);\n default:\n return super.getSideMenuItem(key, configReader, menuItemActionFactory);\n }\n\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {\n MichiganExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/michigan/michigan.external-links-handlers-factory\";\nimport {MichiganRegulationComponents} from \"./components/michigan.regulation-components\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {\n IRegulationMenuItemFactory\n} from \"../../menu-items-common/regulations-specific/regulation-menu-item-factory.interface\";\nimport {MichiganMenuItemFactory} from \"../../menu-item-regulation-specific/michigan/michigan.menu-item-factory\";\n\nexport class MichiganRegulation extends LegacyRegulationWrapper {\n get externalLinks(): IExternalLinksHandlersFactory {\n return new MichiganExternalLinksHandlersFactory(this.services);\n }\n\n get components(): IRegulationComponents {\n return new MichiganRegulationComponents(this.services);\n }\n\n get menuItems(): IRegulationMenuItemFactory {\n return new MichiganMenuItemFactory(this.services);\n }\n}\n","import React from 'react';\nimport {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {\n HeaderWelcomeLoginButtonComponentProps\n} from \"../../../../components/header/buttons/login-button/header-login-button.component.props\";\nimport {ButtonPreset} from \"../../../../basic-ui-components/button/base/button-props.interface\";\nimport {\n HeaderWelcomeRegisterButtonComponentProps\n} from \"../../../../components/header/buttons/register-button/header-register-button.component.props\";\nimport {OntarioResponsibleGamingButtonsComponent} from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/ontario/ontario.responsible-gaming-buttons.component\";\nimport { LastLoginSessionTimerSwitcherComponent } from '../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component';\n\nexport class OntarioRegulationComponents extends RegulationComponentsCommon {\n renderHeaderLoginButton(props: HeaderWelcomeLoginButtonComponentProps): React.ReactElement {\n const buttonPreset: ButtonPreset = this.services.regulation.shouldEnforceHybridAppForMobileWeb()\n ? \"special\"\n : \"secondary\";\n return super.renderHeaderLoginButton({\n ...props,\n preset: buttonPreset\n });\n }\n\n renderHeaderRegisterButton(props: HeaderWelcomeRegisterButtonComponentProps): React.ReactElement {\n const buttonPreset: ButtonPreset = this.services.regulation.shouldEnforceHybridAppForMobileWeb()\n ? \"secondary\"\n : \"special\";\n return super.renderHeaderRegisterButton({\n ...props,\n preset: buttonPreset\n });\n }\n\n renderHeaderRegulationIcons() {\n return (\n \n );\n }\n\n renderLastLoginComponent() {\n return ()\n }\n}","import {RegistrationExternalLinkHandler} from \"../../registration.external-link-handler\";\nimport {IOpenRegistrationOptions} from \"../../registration.external-link-handler.interface\";\n\nexport class OntarioRegistrationExternalLinkHandler extends RegistrationExternalLinkHandler {\n protected get _shouldHideCloseButton(): boolean {\n return true;\n }\n\n async openRegistration(options?: IOpenRegistrationOptions): Promise {\n try {\n await this.services.stateOfResidenceIdentifier.displayStateSelectorPopup();\n } catch (err) {\n this.services.logger.debug('State selector popup canceled', err);\n return;\n }\n\n return super.openRegistration(options);\n }\n}","import {MyAccountUploadDocumentsExternalLinkHandler} from \"../../my-account-upload-documents.external-link-handler\";\n\nexport class OntarioMyAccountUploadDocumentsExternalLinkHandler extends MyAccountUploadDocumentsExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/registration.external-link-handler.interface\";\nimport {\n OntarioRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/regulations/ontario/ontario.registration.external-link-handler\";\nimport {\n IMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport {\n OntarioMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/regulations/ontario/ontario.my-account-upload-documents.external-link-handler\";\n\nexport class OntarioExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n get registration(): IRegistrationExternalLinkHandler {\n return new OntarioRegistrationExternalLinkHandler(this.services);\n }\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new OntarioMyAccountUploadDocumentsExternalLinkHandler(this.services);\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {OntarioRegulationComponents} from \"./components/ontario.regulation-components\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {\n OntarioExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/ontario/ontario.external-links-handlers-factory\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\n\nexport class OntarioRegulation extends LegacyRegulationWrapper {\n get components(): IRegulationComponents {\n return new OntarioRegulationComponents(this.services);\n }\n\n get externalLinks(): IExternalLinksHandlersFactory {\n return new OntarioExternalLinksHandlersFactory(this.services);\n }\n}","import {RegistrationExternalLinkHandler} from \"../../registration.external-link-handler\";\n\nexport class NetherlandsRegistrationExternalLinkHandler extends RegistrationExternalLinkHandler {\n protected get _shouldHideCloseButton(): boolean {\n return true;\n }\n}","import {MyAccountUploadDocumentsExternalLinkHandler} from \"../../my-account-upload-documents.external-link-handler\";\n\nexport class NetherlandsMyAccountUploadDocumentsExternalLinkHandler extends MyAccountUploadDocumentsExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import {RealGamePlayPendingActionExternalLinkHandler} from \"../real-game-play-pending-action.external-link-handler\";\n\nexport class NetherlandsRealGamePlayPendingActionExternalLinkHandler extends RealGamePlayPendingActionExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/registration.external-link-handler.interface\";\nimport {\n NetherlandsRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/regulations/netherlands/netherlands.registration.external-link-handler\";\nimport {\n IMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport {\n NetherlandsMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/regulations/netherlands/netherlands.my-account-upload-documents.external-link-handler\";\nimport {\n IPendingActionExternalLinkHandler\n} from \"../../../handlers/pending-action/pending-action.external-link-handler.interface\";\nimport {\n NetherlandsRealGamePlayPendingActionExternalLinkHandler\n} from \"../../../handlers/pending-action/real-game-play/netherlands/netherlands.real-game-play-pending-action.external-link-handler\";\nimport {\n IOpenRealGamePlayPendingActionOptions\n} from \"../../../handlers/pending-action/real-game-play/real-game-play-pending-action.external-link-handler.interface\";\n\nexport class NetherlandsExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n get registration(): IRegistrationExternalLinkHandler {\n return new NetherlandsRegistrationExternalLinkHandler(this.services);\n }\n\n get realGamePlayPendingAction(): IPendingActionExternalLinkHandler {\n return new NetherlandsRealGamePlayPendingActionExternalLinkHandler(this.services);\n }\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new NetherlandsMyAccountUploadDocumentsExternalLinkHandler(this.services)\n }\n}","import {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {NetherlandsMinimumGamblingAgeComponent} from \"../../../../components/responsible-gambling/minimum-gambling-age/regulations/netherlands/netherlands.minimum-gambling-age.component\";\nimport {NetherlandsSelfTestButtonComponent} from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/netherlands/self-test-button/netherlands.self-test-button.component\";\nimport { LastLoginSessionTimerSwitcherComponent } from '../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component';\n\nexport class NetherlandsRegulationComponents extends RegulationComponentsCommon {\n renderHeaderMinimumGamblingAge() {\n return();\n }\n\n renderHeaderRegulationIcons() {\n return (\n \n );\n }\n\n renderLastLoginComponent() {\n return ()\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport { IExternalLinksHandlersFactory } from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {\n NetherlandsExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/netherlands/netherlands.external-links-handlers-factory\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {NetherlandsRegulationComponents} from \"./components/netherlands.regulation-components\";\n\nexport class NetherlandsRegulation extends LegacyRegulationWrapper {\n get externalLinks(): IExternalLinksHandlersFactory {\n return new NetherlandsExternalLinksHandlersFactory(this.services);\n }\n\n get components(): IRegulationComponents {\n return new NetherlandsRegulationComponents(this.services);\n }\n}","import {RegistrationExternalLinkHandler} from \"../../registration.external-link-handler\";\n\nexport class NewJerseyRegistrationExternalLinkHandler extends RegistrationExternalLinkHandler {\n protected get _shouldHideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/registration.external-link-handler.interface\";\nimport {\n NewJerseyRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/regulations/new-jersey/new-jersey.registration.external-link-handler\";\n\nexport class NewJerseyExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n get registration(): IRegistrationExternalLinkHandler {\n return new NewJerseyRegistrationExternalLinkHandler(this.services);\n }\n}","import styled from \"styled-components\";\n\nexport const USSafeToPlayButtonBox = styled.div`\n background-image: url(\"${props => props.theme.images.regulationSpecific.us.safeToPlayButton.toString()}\");\n height: 25px;\n width:37px;\n background-size: contain;\n background-repeat: no-repeat;\n margin-right: 10px;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n height: 20px;\n width:30px;\n }\n`","import styled from \"styled-components\";\n\nexport const USSafeToPlayContainerBox = styled.div`\n display: flex;\n align-items: center;\n cursor: pointer;\n`","import styled from \"styled-components\";\n\nexport const USSafeToPlayLabelBox = styled.span`\n font-size: 12px;\n margin-right: 8px;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 11px;\n }\n`","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\nimport {USSafeToPlayButtonBox} from \"../boxes/us.safe-to-play.box\";\nimport {USSafeToPlayContainerBox} from \"../boxes/us.safe-to-play-container.box\";\nimport {USSafeToPlayLabelBox} from \"../boxes/us.safe-to-play-label.box\";\n\nexport const USSafeToPlayComponent = observer(\n class USFlagComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_nj_flag_icon');\n await this.services.linksNavigation.openSafeToPlay();\n }\n render() {\n return (\n \n \n {this.services.translation.translate('NJ_JERSEY_COUNTRY_NAME')}\n \n \n \n );\n }\n }\n);","import styled from \"styled-components\";\n\n\nexport const USResponsibleGamingButtonsBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`","import styled from \"styled-components\";\n\nexport const USResponsibleGamingBox = styled.div`\n background-image: url(\"${props => props.theme.images.regulationSpecific.us.responsibleGamblingIcon.toString()}\");\n height: 30px;\n width:90px;\n background-size: contain;\n background-repeat: no-repeat;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n height: 25px;\n width:70px;\n }\n`","import React from \"react\";\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\nimport {USResponsibleGamingBox} from \"../boxes/us.responsible-gaming.box\";\n\nexport const USResponsibleGamingComponent = observer(\n class USResponsibleGamingComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_nj_resp_game_icon');\n await this.services.linksNavigation.openResponsibleGaming();\n }\n render() {\n return (\n \n );\n }\n }\n);","import {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {USSafeToPlayComponent} from \"./safe-to-play/us.safe-to-play.component\";\nimport {USResponsibleGamingButtonsBox} from \"./boxes/us.responsible-gaming-buttons.box\";\nimport {USResponsibleGamingComponent} from \"./responsible-gaming/us.responsible-gaming.component\";\n\nexport const USResponsibleGamingButtonsComponent = observer(class DenmarkResponsibleGamingButtonsComponent extends OrbitComponent {\n render() {\n const usFlag = this.services.configuration.data.header.responsibleIcons.usFlag;\n return (\n \n {usFlag && usFlag.display && }\n \n \n );\n }\n});","import { RegulationComponentsCommon } from \"../../regulation-components-common\";\nimport { USResponsibleGamingButtonsComponent } from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/us/us.responsible-gaming-buttons.component\";\nimport { TimeSpan } from \"@sparkware/app-utils\";\nimport { LastLoginSessionTimerSwitcherComponent } from \"../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component\";\n\nexport class NewJerseyRegulationComponents extends RegulationComponentsCommon {\n renderHeaderRegulationIcons() {\n return (\n \n );\n }\n\n renderLastLoginComponent() {\n return ()\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {\n NewJerseyExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/new-jersey/new-jersey.external-links-handlers-factory\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {NewJerseyRegulationComponents} from \"./components/new-jersey.regulation-components\";\nimport {DialogButtonClickHandleResultEnum} from \"../../dialog/dialog.service.interface\";\nimport {NullableString} from \"../../../../common/types/nullable-types\";\n\nexport class NewJerseyRegulation extends LegacyRegulationWrapper {\n get externalLinks(): IExternalLinksHandlersFactory {\n return new NewJerseyExternalLinksHandlersFactory(this.services);\n }\n\n get components(): IRegulationComponents {\n return new NewJerseyRegulationComponents(this.services);\n }\n async logoutUser(): Promise{\n await super.logoutUser();\n this.services.dialog.showSimpleTextModal({\n title: this.services.translation.translate('NJ_LOGOUT_MESSAGE_TITLE'),\n text: this.services.translation.translate('NJ_LOGOUT_MESSAGE_TEXT'),\n shouldBeClosedOnlyByUser: true,\n buttons: [\n {\n text: this.services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async ()=> {\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ]\n })\n }\n\n formatLastLoginFromUnixTimeStampInSeconds(lastLoginUnixTimeStampInSeconds: number): NullableString {\n const date = new Date(lastLoginUnixTimeStampInSeconds * 1000);\n\n const options: Intl.DateTimeFormatOptions = {\n timeZone: 'America/New_York',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: true\n };\n\n return new Intl.DateTimeFormat('en-US', options).format(date);\n\n }\n}","import {RegistrationExternalLinkHandler} from \"../../registration.external-link-handler\";\n\nexport class UkRegistrationExternalLinkHandler extends RegistrationExternalLinkHandler {\n protected get _shouldHideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/registration.external-link-handler.interface\";\nimport {\n UkRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/regulations/uk/uk.registration.external-link-handler\";\n\nexport class UkExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n get registration(): IRegistrationExternalLinkHandler {\n return new UkRegistrationExternalLinkHandler(this.services);\n }\n}","import { RegulationComponentsCommon } from \"../../regulation-components-common\";\nimport {\n LiveCasinoMinMaxBetComponentProps\n} from \"../../../../components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/live-casino-min-max-bet.component.props\";\n\nexport class UKRegulationComponents extends RegulationComponentsCommon {\n renderLiveCasinoMinMaxBet(props: LiveCasinoMinMaxBetComponentProps): React.ReactElement {\n // if slot game - turn on isHideMaxBet flag\n const isLiveSlot = this.services.liveTableFeeds.getIsLiveSlotGroup(props.gameInfo.subGroupName);\n return super.renderLiveCasinoMinMaxBet({\n ...props,\n isHideMaxBet: isLiveSlot\n });\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {\n UkExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/uk/uk.external-links-handlers-factory\";\nimport { UKRegulationComponents } from \"./components/uk.regulation-components\";\nimport { IRegulationComponents } from \"../regulation-components.interface\";\n\nexport class UkRegulation extends LegacyRegulationWrapper {\n get components(): IRegulationComponents {\n return new UKRegulationComponents(this.services);\n }\n \n get externalLinks(): IExternalLinksHandlersFactory {\n return new UkExternalLinksHandlersFactory(this.services);\n }\n}","import {MyAccountUploadDocumentsExternalLinkHandler} from \"../../my-account-upload-documents.external-link-handler\";\n\nexport class ItalyMyAccountUploadDocumentsExternalLinkHandler extends MyAccountUploadDocumentsExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport {\n ItalyMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/regulations/italy/italy.my-account-upload-documents.external-link-handler\";\n\nexport class ItalyExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new ItalyMyAccountUploadDocumentsExternalLinkHandler(this.services)\n }\n}","import {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {AboutComponentProps} from \"../../../../components/about-component/about.component\";\n\nexport class ItalyRegulationComponents extends RegulationComponentsCommon {\n protected async _getAboutDialogProps(): Promise {\n const props = await super._getAboutDialogProps();\n return {\n ...props,\n fiscalCode: this.services.user.userData.taxId\n };\n }\n}","import React from 'react';\nimport {MenuItemRendererBase} from \"../../../menu-items-common/renderer/menu-item-renderer-base\";\n\nimport {IRenderMenuItemOptions} from \"../../../menu-items-common/renderer/menu-item.renderer.interface\";\nimport {\n IMenuItemConfigReader\n} from \"../../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {\n IMenuItemActionFactoryService\n} from \"../../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\n/**\n * This class is for demonstrating how to override menu items per regulation. It should be removed when we will have a real case\n */\nexport class ItalyTestMenuItemRenderer extends MenuItemRendererBase {\n constructor( configReader: IMenuItemConfigReader,\n services: IServiceFactoryExtended,\n menuItemActionFactory: IMenuItemActionFactoryService) {\n super('testRegulationSpecificMenuItem', configReader, services, menuItemActionFactory);\n }\n\n\n protected _createReactElement(options?: IRenderMenuItemOptions): React.ReactElement {\n return (\n
    this.execute()}>\n {this.text}\n
    \n )\n }\n\n}","import {RegulationMenuItemFactoryBase} from \"../../menu-items-common/regulations-specific/regulation-menu-item-factory-base\";\nimport {MenuItemKey} from \"../../configurations/config-data-sections/generated-config-const\";\nimport {IMenuItemRenderer} from \"../../menu-items-common/renderer/menu-item.renderer.interface\";\nimport {ItalyTestMenuItemRenderer} from \"./side-menu/italy.test-menu-item.renderer\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IMenuItemActionFactoryService} from \"../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\n/**\n * This class is for demonstrating how to override menu items per regulation. It should be removed when we will have a real case\n */\nexport class ItalyMenuItemFactory extends RegulationMenuItemFactoryBase {\n getSideMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n switch (key) {\n case \"testRegulationSpecificMenuItem\":\n return new ItalyTestMenuItemRenderer(configReader, this.services, menuItemActionFactory);\n default:\n return super.getSideMenuItem(key, configReader, menuItemActionFactory);\n }\n\n }\n}","import styled from \"styled-components\";\n\nexport const InactivityTimeoutSettingsBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 20px;\n min-height: 150px;\n font-size: 14px;\n ${props => props.theme.font.presets.bold};\n`","import styled from \"styled-components\";\nimport {Select} from \"../../../basic-ui-components/form/select.component\";\n\nexport const DropDownBox = styled(Select)`\n font-size: 14px;\n`","import React, {ChangeEvent, useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {InactivityTimeoutSettingsBox} from \"./boxes/inactivity-timeout-settings.box\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {DropDownBox} from \"./boxes/drop-down.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ModalDialogActionsComponent} from \"../modal-dialog/modal-dialog-actions.component\";\n\n\ninterface InactivityTimeoutSettingsComponentProps {\n dialogHandler: IModalDialogHandler;\n analyticsCategory: string;\n}\n\n//inactivity_timeout_settings_title\n\nexport const InactivityTimeoutSettingsComponent: React.FC = observer((props) => {\n const services = useServices();\n\n const currentSettings = services.user.getInactivityTimeoutSettings();\n\n const [currentSelectedValue, setCurrentSelectedValue] = useState(currentSettings.possibleSessionTimeoutValues.find(v => v.totalMinutes === currentSettings.currentSessionTimeout.totalMinutes) ?? currentSettings.possibleSessionTimeoutValues[0]\n ?? services.user.getDefaultAccessTokenLifeTime());\n\n\n const sendAnalytics = (action: string, label?: string) => {\n services.analytics.sendAnalytics(props.analyticsCategory, action, label);\n }\n\n const renderOption = (timeSpan: TimeSpan) => {\n\n return (\n \n )\n }\n\n\n const onChange = (event: ChangeEvent) => {\n setCurrentSelectedValue(TimeSpan.fromMinutes(parseInt(event.target.value)));\n }\n\n const onClick = () => {\n services.user.setInactivityTimeout(currentSelectedValue);\n if(currentSelectedValue.totalMinutes !== currentSettings.currentSessionTimeout.totalMinutes) {\n sendAnalytics('changed', currentSelectedValue.totalMinutes.toString());\n }\n props.dialogHandler.close();\n\n }\n\n\n return (\n \n
    {services.translation.translate('INACTIVITY_TIMEOUT_SETTINGS_LABEL')}
    \n \n {currentSettings.possibleSessionTimeoutValues.map(renderOption)}\n \n\n \n\n
    \n );\n});","import React from 'react';\nimport {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {\n ItalyExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/italy/italy.external-links-handlers-factory\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {ItalyRegulationComponents} from \"./components/italy.regulation-components\";\nimport {\n IRegulationMenuItemFactory\n} from \"../../menu-items-common/regulations-specific/regulation-menu-item-factory.interface\";\nimport {ItalyMenuItemFactory} from \"../../menu-item-regulation-specific/italy/italy.menu-item-factory\";\nimport {\n InactivityTimeoutSettingsComponent\n} from \"../../../components/inactivity-timeout-settings/inactivity-timeout-settings.component\";\n\nexport class ItalyRegulation extends LegacyRegulationWrapper {\n get externalLinks(): IExternalLinksHandlersFactory {\n return new ItalyExternalLinksHandlersFactory(this.services);\n }\n\n get components(): IRegulationComponents {\n return new ItalyRegulationComponents(this.services);\n }\n\n get menuItems(): IRegulationMenuItemFactory {\n return new ItalyMenuItemFactory(this.services);\n }\n\n openInactivitySettings(): void {\n const analyticsCategory = 'italy_inactivity_window';\n\n this.services.analytics.sendAnalytics(analyticsCategory, 'open');\n\n this.services.dialog.showModal((dialogHandler) => {\n return (\n \n );\n }, {\n title: this.services.translation.translate('INACTIVITY_TIMEOUT_SETTINGS_TITLE'),\n mobileCenterHeader: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n onClosedByXButton: () => {\n this.services.analytics.sendAnalytics(analyticsCategory, 'closed');\n }\n })\n }\n}","import {MyAccountUploadDocumentsExternalLinkHandler} from \"../../my-account-upload-documents.external-link-handler\";\n\nexport class RomaniaMyAccountUploadDocumentsExternalLinkHandler extends MyAccountUploadDocumentsExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport {\n RomaniaMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/regulations/romania/romania.my-account-upload-documents.external-link-handler\";\n\nexport class RomaniaExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new RomaniaMyAccountUploadDocumentsExternalLinkHandler(this.services)\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {\n RomaniaExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/romania/romania.external-links-handlers-factory\";\n\nexport class RomaniaRegulation extends LegacyRegulationWrapper {\n get externalLinks(): IExternalLinksHandlersFactory {\n return new RomaniaExternalLinksHandlersFactory(this.services);\n }\n}","import {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {AboutComponentProps} from \"../../../../components/about-component/about.component\";\n\nexport class PortugalRegulationComponents extends RegulationComponentsCommon {\n protected async _getAboutDialogProps(): Promise {\n const props = await super._getAboutDialogProps();\n const sessionBalance = await this.services.user.getOpenSessionsRealMoneyBalance();\n return {\n ...props,\n openSessionsBalance: sessionBalance\n };\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {PortugalRegulationComponents} from \"./components/portugal.regulation-components\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\n\nexport class PortugalRegulation extends LegacyRegulationWrapper {\n get components(): IRegulationComponents {\n return new PortugalRegulationComponents(this.services);\n }\n}","import React from \"react\";\nimport {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {AboutComponentProps} from \"../../../../components/about-component/about.component\";\nimport {SwedenMinimumGamblingAgeComponent} from \"../../../../components/responsible-gambling/minimum-gambling-age/regulations/sweden/sweden.minimum-gambling-age.component\";\nimport {SwedenResponsibleGamingButtonsComponent} from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/sweden.responsible-gaming-buttons.component\";\nimport { LastLoginSessionTimerSwitcherComponent } from \"../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component\";\n\nexport class SwedenRegulationComponents extends RegulationComponentsCommon {\n protected async _getAboutDialogProps(): Promise {\n const props = await super._getAboutDialogProps();\n const sessionBalance = await this.services.user.getOpenSessionsRealMoneyBalance();\n return {\n ...props,\n openSessionsBalance: sessionBalance\n };\n }\n\n renderHeaderMinimumGamblingAge() {\n return ();\n }\n\n renderHeaderRegulationIcons() {\n return (\n \n );\n }\n\n renderLastLoginComponent() {\n return ()\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport { IRegulationComponents } from \"../regulation-components.interface\";\nimport {SwedenRegulationComponents} from \"./components/sweden.regulation-components\";\n\nexport class SwedenRegulation extends LegacyRegulationWrapper {\n get components(): IRegulationComponents {\n return new SwedenRegulationComponents(this.services);\n }\n}","import {MyAccountUploadDocumentsExternalLinkHandler} from \"../../my-account-upload-documents.external-link-handler\";\n\nexport class DenmarkMyAccountUploadDocumentsExternalLinkHandler extends MyAccountUploadDocumentsExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import { IMyAccountUploadDocumentsExternalLinkHandler } from \"../../../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport { DenmarkMyAccountUploadDocumentsExternalLinkHandler } from \"../../../handlers/my-account-upload-documents/regulations/denmark/denmark.my-account-upload-documents.external-link-handler\";\nimport { ExternalLinksHandlersFactory } from \"../../external-links-handlers-factory\";\n\nexport class DenmarkExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new DenmarkMyAccountUploadDocumentsExternalLinkHandler(this.services);\n }\n}","import React from \"react\";\nimport {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {DenmarkResponsibleGamingButtonsComponent} from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/denmark.responsible-gaming-buttons.component\";\nimport { LastLoginSessionTimerSwitcherComponent } from \"../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component\";\n\nexport class DenmarkRegulationComponents extends RegulationComponentsCommon {\n renderHeaderRegulationIcons() {\n return (\n \n );\n }\n\n renderLastLoginComponent() {\n return ()\n }\n}","import { IExternalLinksHandlersFactory } from '../../external-links/handlers-factory/external-links-handlers-factory.interface';\nimport { DenmarkExternalLinksHandlersFactory } from '../../external-links/handlers-factory/regulations/denmark/denmark.external-links-handlers-factory';\nimport {LegacyRegulationWrapper} from '../legacy-regulation-wrapper'\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {DenmarkRegulationComponents} from \"./components/denmark.regulation-components\";\n\nexport class DenmarkRegulation extends LegacyRegulationWrapper {\n\n get components(): IRegulationComponents {\n return new DenmarkRegulationComponents(this.services);\n }\n\n get externalLinks(): IExternalLinksHandlersFactory {\n return new DenmarkExternalLinksHandlersFactory(this.services);\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {DialogResult} from \"../../specific-dialogs/specific-dialogs.service.interface\";\n\nexport class SpainRegulation extends LegacyRegulationWrapper {\n async logoutUser(): Promise {\n const dialogResult = await this.services.specificDialogs.showLogoutGamblingSessionSummary();\n if(dialogResult === DialogResult.Accepted) {\n await super.logoutUser();\n }\n }\n\n get isGamblingSessionEnabled(): boolean {\n return true;\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {CGPEventSubscription} from \"../sdk/cgp-sdk.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {GNWP_SOURCES} from \"../gnwp/gnwp-consts\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nenum LIMIT_NAMES {\n DEPOSIT_LIMIT = \"DepositLimit\",\n PLAYTIME_LIMIT = \"PlayTimeLimit\",\n BANKROLL_LIMIT = \"BankrollLimit\"\n}\n\ninterface ILimitPeriod {\n unit?: string;\n value?: number;\n typeId?: number;\n currency?: string;\n}\n\nexport class LimitsToasterService extends ServiceBase {\n\n private _limitsData: {\n [k in LIMIT_NAMES]: ILimitPeriod[];\n } = {\n DepositLimit: [],\n PlayTimeLimit: [],\n BankrollLimit: []\n };\n\n private _subscriptions: CGPEventSubscription[] = [];\n\n private _activeLimitToasters: number = 0;\n private _toasterDisplayDurationSec: number = 3;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this.reaction(() => this.services.user.isAuthorized, async () => {\n await this._getPlayerLimits();\n this._showLimitsToaster();\n\n }, {\n fireImmediately: true\n });\n\n this.services.sdk.events.onExternalLinkClosed (async (link: string) => {\n if (link === GNWP_SOURCES.MY_ACCOUNT) {\n await this._getPlayerLimits();\n }\n });\n\n this.services.sdk.events.onLiveGameSwitched(() => {\n this._showLimitsToaster();\n });\n }\n\n private _subscribe() {\n if (this._subscriptions.length === 0) {\n this._subscriptions.push(this.services.sdk.events.onGameClose(this._showLimitsToaster));\n this._subscriptions.push(this.services.sdk.events.onBeforeOAuthStateChanged(this._handleUserLogout));\n }\n }\n\n private _unsubscribe() {\n\n this._subscriptions.forEach(subscription => {\n subscription.off();\n });\n\n this._subscriptions = [];\n }\n\n private _getPlayerLimits = async () => {\n\n await this.services.user.waitForAutoLogin();\n\n if (!this.services.user.isAuthorized) {\n return;\n }\n\n if (!this.services.regulation.shouldShowPlayerLimitsToaster()) {\n return;\n }\n\n try {\n const limitsDataRaw = await this.services.api.userController.getPlayerLimits();\n\n const depositLimitRaw = limitsDataRaw.displayableLimits.find(limit => limit.limitName === LIMIT_NAMES.DEPOSIT_LIMIT);\n this._limitsData.DepositLimit = (depositLimitRaw && depositLimitRaw.limitPeriods) || [];\n\n const playTimeLimitRaw = limitsDataRaw.displayableLimits.find(limit => limit.limitName === LIMIT_NAMES.PLAYTIME_LIMIT);\n this._limitsData.PlayTimeLimit = (playTimeLimitRaw && playTimeLimitRaw.limitPeriods) || [];\n\n const bankrollLimitRaw = limitsDataRaw.displayableLimits.find(limit => limit.limitName === LIMIT_NAMES.BANKROLL_LIMIT);\n this._limitsData.BankrollLimit = (bankrollLimitRaw && bankrollLimitRaw.limitPeriods) || [];\n\n this._subscribe();\n\n } catch(error) {\n this.services.logger.error(\"LimitsToasterService: Failed to get the player limits.\", error);\n }\n }\n\n private _handleUserLogout = () => {\n if (this.services.user.isAuthorized) {\n this._showLimitsToaster();\n this._unsubscribe();\n }\n }\n\n private _getIntervalLabelFromType(typeId: number): string {\n switch (typeId) {\n case 1:\n return this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_DAILY_LABEL\");\n case 2:\n return this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_WEEKLY_LABEL\");\n case 3:\n return this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_MONTHLY_LABEL\");\n default:\n return \"\";\n }\n }\n\n private _getFormatedTimeUnit(value: number, unit: string): string {\n\n if (unit === \"min\") {\n // value is always in minutes and in increments of 60 minutes\n return `${value / 60} ${this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_HOUR_LABEL\")}`;\n }\n\n return `${value} ${this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_HOUR_LABEL\")}`;\n }\n\n private _getFormatedDepositLimitForType(typeId: number): string {\n\n let formatedString = \"\";\n const period = this._limitsData.DepositLimit.find(period => period.typeId === typeId);\n\n if (period) {\n formatedString = `${this._getIntervalLabelFromType(typeId)}: ${this.services.currency.formatMoney(period.value, true)}`;\n }\n\n return formatedString;\n }\n\n private _getFormatedPlayTimeLimitForType(typeId: number): string {\n\n let formatedString = \"\";\n const period = this._limitsData.PlayTimeLimit.find(period => period.typeId === typeId);\n\n if (period) {\n formatedString = `${this._getIntervalLabelFromType(typeId)}: ${this._getFormatedTimeUnit(period.value, period.unit)}`;\n }\n\n return formatedString;\n }\n\n private _getFormatedWithSeparators(limits: string[]): string {\n\n let text = \"\";\n\n limits = limits.filter(limit => limit !== \"\");\n\n limits.forEach((limit, i) => {\n\n text += limit;\n\n if (limits[i + 1]) {\n text += \" / \";\n }\n });\n\n return text;\n }\n\n private _displayDepositLimits() {\n\n if (this._limitsData.DepositLimit.length === 0) {\n return null;\n }\n\n return `${this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_DEPOSIT_LABEL\")} - ${this._getFormatedWithSeparators([this._getFormatedDepositLimitForType(1), this._getFormatedDepositLimitForType(2), this._getFormatedDepositLimitForType(3)])}`;\n }\n\n private _displayPlayTimeLimits() {\n\n if (this._limitsData.PlayTimeLimit.length === 0) {\n return null;\n }\n\n return `${this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_PLAY_TIME_LABEL\")} - ${this._getFormatedWithSeparators([this._getFormatedPlayTimeLimitForType(1), this._getFormatedPlayTimeLimitForType(2), this._getFormatedPlayTimeLimitForType(3)])}`;\n }\n\n private _displayBankrollLimits() {\n\n if (this._limitsData.BankrollLimit.length === 0) {\n return null;\n }\n\n return `${this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_BANKROLL_LABEL\")} - ${this.services.currency.formatMoney(this._limitsData.BankrollLimit[0].value, true)}`;\n }\n\n private _getFormatedLimitsText() {\n const texts = [];\n const depositLimit = this._displayDepositLimits();\n if (depositLimit) {\n texts.push(depositLimit);\n }\n const playTimeLimit = this._displayPlayTimeLimits();\n if (playTimeLimit) {\n texts.push(playTimeLimit);\n }\n const bankrollLimit = this._displayBankrollLimits();\n if (bankrollLimit) {\n texts.push(bankrollLimit);\n }\n return texts;\n }\n\n private _showLimitsToaster = () => {\n\n const hasData = this._limitsData.DepositLimit.length > 0 || this._limitsData.PlayTimeLimit.length > 0 || this._limitsData.BankrollLimit.length > 0;\n\n if (!this.services.regulation.shouldShowPlayerLimitsToaster() || this._activeLimitToasters > 0 || !hasData) {\n return;\n }\n\n // using timeout because there's an issue with the toaster, it won't show if it\n // is displayed while the layout is still loading eg: user logs out or on autologin\n setTimeout(() => {\n this.services.toaster.showStandardToast({\n toastOptions: {\n timeout: TimeSpan.fromSeconds(this._toasterDisplayDurationSec)\n },\n contentProps: {\n title: this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_TITLE\"),\n message: this._getFormatedLimitsText(),\n },\n onToastClosed: () => {\n this._activeLimitToasters--;\n }\n });\n }, 1000);\n this._activeLimitToasters++;\n }\n\n dispose() {\n super.dispose();\n this._unsubscribe();\n }\n}\n","import {TimeSpan} from '@sparkware/app-utils';\nimport {ServiceBase} from '../ServiceBase';\nimport {IRegulation, IRegulationService} from './regulation.service.interface';\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {LegacyRegulationWrapper} from \"./legacy-regulation-wrapper\";\nimport {NullableString} from \"../../../common/types/nullable-types\";\nimport {CGP_ERROR_CODES} from \"../../../sdk/src/exceptions/cgp_error_codes\";\nimport { observable, makeObservable } from \"mobx\";\nimport {REGULATION_CODE_TYPES} from '../../../sdk/src/services/regulation/regulation_const';\nimport {GermanyRegulation} from './germany/germany.regulation'\nimport {MichiganRegulation} from \"./michigan/michigan.regulation\";\nimport {OntarioRegulation} from \"./ontario/ontario.regulation\";\nimport {NetherlandsRegulation} from \"./netherland/netherlands.regulation\";\nimport {NewJerseyRegulation} from \"./new-jersey/new-jersey.regulation\";\nimport {UkRegulation} from \"./uk/uk.regulation\";\nimport {ItalyRegulation} from \"./italy/italy.regulation\";\nimport {RomaniaRegulation} from \"./romania/romania.regulation\";\nimport {PortugalRegulation} from \"./portugal/portugal.regulation\";\nimport {SwedenRegulation} from \"./sweden/sweden.regulation\";\nimport {DenmarkRegulation} from \"./denmark/denmark.regulation\";\nimport {SpainRegulation} from \"./spain/spain.regulation\";\nimport {IRegulationProxyService} from \"./regulation-proxy.service.interface\";\n\n\nexport class RegulationService extends ServiceBase implements IRegulationService, IRegulationProxyService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this.reaction(() => this.services.user.isAuthorized,\n () => {\n this.current = this._createRegulation();\n }, {\n fireImmediately: true\n });\n }\n getRegulationCode(): number {\n return this.services.sdk.getRegulationService().getRegulationCode();\n }\n\n isUSRegulation(): boolean {\n return this.services.sdk.getRegulationService().isUSRegulation();\n }\n\n get forceDemoButton(): boolean {\n return this.services.sdk.getRegulationService().forceDemoButton();\n }\n\n getSessionCooldownConfig(): {featureEnabled: boolean; cooldownTime: TimeSpan} {\n\n const sessionCooldownConfig = this.services.sdk.getRegulationService().getSessionCooldownConfig();\n\n return {\n ...sessionCooldownConfig,\n cooldownTime: TimeSpan.parse(sessionCooldownConfig.cooldownTime)\n };\n }\n\n @observable.ref\n current: IRegulation;\n\n\n shouldShowPlayerLimitsToaster(): boolean {\n return this.services.sdk.getRegulationService().shouldShowPlayerLimitsToaster();\n }\n\n shouldEnforceHybridAppForMobileWeb(): boolean {\n return this.services.device.isMobileWebApp && this.services.configuration.servicesConfigs.Skin.enforceHybridAppForMobileWeb;\n }\n\n shouldPreventOpenGameOnMobileWeb(): boolean {\n return this.services.configuration.servicesConfigs.Skin.preventOpenGameOnMobileWeb;\n }\n\n\n getErrorMessage(errorCode: number): NullableString {\n return this.services.sdk.getRegulationService().getErrorMessage(errorCode);\n }\n\n getGeneralErrorMessage(): string {\n return this.getErrorMessage(CGP_ERROR_CODES.GENERAL_ERROR);\n }\n\n logoutUser(): Promise{\n return this.current.logoutUser();\n }\n\n isLoginPopupEnabled(): boolean {\n return this.services.sdk.getRegulationService().isLoginPopupEnabled();\n }\n\n private _createRegulation(): IRegulation {\n const regulationCode = this.getRegulationCode();\n const legacyRegulation = this.services.sdk.currentRegulation;\n switch (regulationCode) {\n case REGULATION_CODE_TYPES.GERMANY:\n return new GermanyRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.MICHIGAN:\n return new MichiganRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.CANADA_ONTARIO:\n return new OntarioRegulation(legacyRegulation, regulationCode, this.services)\n case REGULATION_CODE_TYPES.NETHERLANDS:\n return new NetherlandsRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.NJ:\n return new NewJerseyRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.UK:\n return new UkRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.ITALY:\n return new ItalyRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.ROMANIA:\n return new RomaniaRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.PORTUGAL:\n return new PortugalRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.SWEDEN:\n return new SwedenRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.DK:\n return new DenmarkRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.SPAIN:\n return new SpainRegulation(legacyRegulation, regulationCode, this.services);\n default:\n return new LegacyRegulationWrapper(legacyRegulation, regulationCode, this.services);\n }\n }\n\n showRealityCheckMessage(): Promise {\n return this.current.showRealityCheckMessage();\n }\n}\n","import {\n action,\n IReactionDisposer,\n observable,\n reaction,\n runInAction,\n makeObservable,\n} from \"mobx\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IPlayerBurnoutService} from \"./player-burnout.service.interface\";\nimport {CGPEventSubscription} from \"../sdk/cgp-sdk.interface\";\n// import { IMessageDataJson } from \"../../../common/interfaces/firebase-messages-handler\";\nimport {IOmgHandlerHook} from \"../external-links/handlers/omg/omg-handler.hook.interface\";\nimport {GameModeEnum} from \"../game-runner/interfaces/game-context/game-context-view-model.interface\";\n\nexport class PlayerBurnoutService extends ServiceBase implements IPlayerBurnoutService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n\n makeObservable(this);\n\n this.reaction(() => this.services.user.isAuthorized,\n this._onAuthStateChange,\n { fireImmediately: true }\n );\n }\n\n @observable.ref\n public renderAnimation = false;\n\n @observable\n private _currentlyDisplayedOmg: IOmgHandlerHook[] = [];\n\n private _burnoutMessageEventSubscription: CGPEventSubscription | null = null;\n private _omgDisplayedEventSubscription: CGPEventSubscription | null = null;\n private _currentRunningGameReaction: IReactionDisposer | null = null;\n\n\n private _onAuthStateChange = (isAuthorized: boolean) => {\n if (isAuthorized) {\n this._subscribe();\n } else {\n this._unsubscribe();\n // Actually I want to remove the floating button if any exists\n this.setRenderAnimation(false);\n }\n }\n\n private get _isRealMoneyPrize(): boolean {\n return this.services.configuration.servicesConfigs.PlayerBurnout.isRealMoneyPrize;\n }\n\n private _subscribe() {\n this._burnoutMessageEventSubscription = this.services.sdk.events.onBurnoutMessageReceived(this._onBurnoutMessageReceivedEvent);\n this.services.gameRunner.then(gameRunner => {\n this._currentRunningGameReaction = reaction(() => gameRunner.currentRunningGame,\n (currentRunningGame) => {\n this._clearCurrentDisplayOmg();\n if(currentRunningGame) {\n if(currentRunningGame.gameMode === GameModeEnum.Real && !this._isRealMoneyPrize) {\n this._omgDisplayedEventSubscription = this.services.sdk.events.onOmgDisplayed(this._onOmgDisplayedEvent);\n }\n } else {\n this.setRenderAnimation(false);\n this._omgDisplayedEventSubscription?.off();\n this._omgDisplayedEventSubscription = null;\n }\n });\n })\n\n }\n\n private _unsubscribe() {\n this._clearCurrentDisplayOmg();\n\n this._burnoutMessageEventSubscription?.off();\n this._omgDisplayedEventSubscription?.off();\n\n this._burnoutMessageEventSubscription = null;\n this._omgDisplayedEventSubscription = null;\n\n if(this._currentRunningGameReaction) {\n this._currentRunningGameReaction();\n this._currentRunningGameReaction = null;\n }\n }\n\n @action.bound\n private _onOmgDisplayedEvent = (omgHook: IOmgHandlerHook) => {\n this._currentlyDisplayedOmg[0] = omgHook;\n\n };\n\n private _clearCurrentDisplayOmg(): void {\n runInAction(() => {\n this._currentlyDisplayedOmg = [];\n });\n }\n\n private _onBurnoutMessageReceivedEvent = (/* dataJson: IMessageDataJson */) => {\n // At any moment we can have only one animation/gift button on the screen.\n // So if a burnout message is received and I need to show the animation but there is another gift button already on the screen\n // then I need to remove the previous one and then reshow the animation\n // Product management is assuring me this will not happen but I need to be sure\n if (this.renderAnimation === true) {\n this.setRenderAnimation(false);\n setTimeout(() => {\n this.setRenderAnimation(true);\n }, 200);\n } else {\n this.setRenderAnimation(true);\n }\n };\n\n public onSafeUnmountNotice() {\n this.setRenderAnimation(false);\n }\n\n @action.bound\n private setRenderAnimation(val: boolean) {\n this.renderAnimation = val;\n }\n\n public showOmg = () => {\n if(this._currentlyDisplayedOmg.length > 0) {\n this._currentlyDisplayedOmg[0].bringToFront();\n this._clearCurrentDisplayOmg();\n }\n }\n\n public checkIfOmgDisplayed = () => {\n return this._currentlyDisplayedOmg.length > 0;\n }\n\n public getBurnoutAnimationZIndex() {\n return this.services.sdk.getBurnoutAnimationZIndex();\n }\n}\n","import React from 'react';\nimport { CmsBannerId } from \"../../../cms/cms-banners/cm-banner-id/cms-banner-id\";\nimport { OfferConfiguration } from \"../../../configurations/config-data-sections/link-to-offer.configuration\";\nimport { IServiceFactory } from \"../../../service-factory.interface\";\nimport {IOffer} from \"../../player-offerings.service.interface\";\n\n\nexport abstract class OfferBase implements IOffer {\n\n constructor(protected services: IServiceFactory, protected offerConfig: OfferConfiguration) {\n }\n\n abstract render(): React.ReactNode;\n\n abstract shouldUseLinkToOfferAnimation(): boolean;\n\n isHighPriorityOffer(): boolean {\n return false;\n }\n \n async shouldBeVisible(): Promise {\n return Boolean(this.offerConfig?.display);\n }\n\n get bannerId(): CmsBannerId {\n return new CmsBannerId(this.offerConfig.componentID, this.offerConfig.templateID, null);\n }\n\n private _offerShown: boolean = false;\n\n private _getSessionStageKey() {\n return `offer_${this.id}_shown`;\n }\n\n get offerShown() {\n try {\n //TODO: change this code when sessionStorage service is added\n const isShown = window.sessionStorage.getItem(this._getSessionStageKey());\n return isShown === \"true\";\n }\n catch (err) {\n this.services.logger.error(`get offerShown error`, err);\n return this._offerShown;\n }\n }\n\n set offerShown(offerShown: boolean) {\n try {\n this._offerShown = offerShown;\n //TODO: change this code when sessionStorage service is added\n window.sessionStorage.setItem(this._getSessionStageKey(), offerShown? \"true\" : \"false\");\n }\n catch (err) {\n this.services.logger.error(`set offerShown error`, err);\n }\n }\n\n abstract readonly id: string;\n abstract readonly analyticsCategory: string;\n}\n","import React from 'react';\nimport { OfferConfiguration } from '../../../configurations/config-data-sections/link-to-offer.configuration';\nimport { OfferBase } from \"./offer-base\";\n\nexport class WelcomeOffer extends OfferBase {\n id = \"welcomeBonus\";\n analyticsCategory = \"Conversion\";\n\n updateConfig(offerConfig: OfferConfiguration) {\n this.offerConfig = offerConfig;\n }\n\n async shouldBeVisible(): Promise {\n const cStatus = (await this.services.cmsSegmentation).isCstatus; // can be null\n return !this.services.user.isAuthorized && (cStatus === false) && !this.services.miniOrbit.isEnabled && await super.shouldBeVisible();\n }\n \n shouldUseLinkToOfferAnimation(): boolean {\n return true;\n }\n\n render(): React.ReactNode {\n let IconComponent = this.services.theme.currentTheme.icons.linkToOfferIcon;\n return (\n \n );\n }\n}\n","import styled from \"styled-components\";\n\nconst WOFShellBox = styled.div`\n position: relative;\n background: url(${({theme}) => theme.images.wheelOfFortune.shell.toString()}) no-repeat center;\n background-size: cover;\n \n padding: 8px;\n height: 50px;\n width: 50px;\n`;\n\nexport default WOFShellBox;","import styled, {keyframes, css} from \"styled-components\";\n\ninterface WOFColorsBoxProps {\n showSpin: boolean;\n}\n\nconst rotateBackward = keyframes`\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(-180deg);\n }\n`;\n\nconst rotateStarting = keyframes`\n from {\n transform: rotate(-180deg);\n }\n\n to {\n transform: rotate(0deg);\n }\n`;\n\nconst rotateFullRotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst rotateFinish = keyframes`\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(2880deg);\n }\n`;\n\n\nconst WOFColorsBox = styled.div`\n position: relative;\n top: 5px;\n background: url(${({theme}) => theme.images.wheelOfFortune.colors.toString()}) no-repeat center;\n background-size: cover;\n\n animation-delay: 5s, 7s, 7.25s, 7.25s, 8.45s;\n animation-duration: 2s, 0.25s, 0.25s, 7s;\n animation-iteration-count: 1, 1, 4, 1, 1;\n animation-timing-function: ease, ease-in, linear, cubic-bezier(0, 0, 0.35, 1.16);\n animation-fill-mode: forwards, forwards, forwards, forwards, forwards;\n\n ${({showSpin}) => showSpin && css`\n animation-name: ${rotateBackward}, ${rotateStarting}, ${rotateFullRotation}, ${rotateFinish};\n `}\n \n\n z-index: -1;\n height: 100%;\n width: 100%;\n`;\n\nexport default WOFColorsBox;","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../themes/architecture/styled-by-device\";\n\nconst MobileBox = styled.div`\n position: relative;\n z-index: 10;\n top:-5px;\n transform: scale(1.5);\n`;\n\nconst PcBox = styled(MobileBox)`\n transform: scale(1.7);\n`;\n\nconst WOFWrapperBox = styledByDevice(PcBox, MobileBox);\n\nexport default WOFWrapperBox;","import React from \"react\";\nimport {observer} from \"mobx-react\"\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport WOFShellBox from './boxes/wheel-of-fortune-shell.box';\nimport WOFColorsBox from \"./boxes/wheel-of-fortune-colors.box\";\nimport WOFWrapperBox from \"./boxes/wheel-of-fortune-wrapper.box\";\nimport { CyClass } from \"../../../common/cy-classes\";\n\nexport const WheelOfFortuneComponent = observer(class WheelOfFortuneComponent extends OrbitComponent {\n render() {\n const showSpin = this.services.playerOfferings.enableWheelOfFortuneAnimation;\n return (\n \n \n \n \n \n )\n }\n});\n","import React from 'react';\nimport { WheelOfFortuneComponent } from '../../../../components/wheel-of-fortune/wheel-of-fortune.component';\nimport { OfferBase } from \"./offer-base\";\n\nexport class WheelOfFortuneOffer extends OfferBase {\n id = \"wheelOfFortune\";\n analyticsCategory = \"CRM\";\n\n async shouldBeVisible(): Promise {\n return this.services.playerOfferings.hasWheelOfFortunePromotion && !this.services.miniOrbit.isEnabled && await super.shouldBeVisible() && !this.offerShown;\n }\n\n shouldUseLinkToOfferAnimation(): boolean {\n return false;\n }\n \n render() {\n return \n }\n}\n","import styled from \"styled-components\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.div`\n width: 450px;\n`;\n\nexport const PcBox = styled(DefaultBox)`\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n width: 390px;\n }\n`;\n\nexport const MobileBox = styled(DefaultBox)`\n width: 100%;\n ${CssRule.For.mobile.tablet.build()} & {\n width: 450px;\n }\n`;\n\nexport const LinkToOfferBannerDefaultBox = styledByDevice(PcBox, MobileBox);","import {LinkToOfferBannerDefaultBox} from \"./link-to-offer-banner.default.box\";\n\nexport const LinkToOfferBannerBox = LinkToOfferBannerDefaultBox;\n","import React from 'react';\nimport { OfferBase } from \"./offer-base\";\n\nexport class RegistrationOffer extends OfferBase {\n id = \"RegistrationOffer\";\n analyticsCategory = \"NotUsed\";\n\n async shouldBeVisible(): Promise {\n const cStatus = (await this.services.cmsSegmentation).isCstatus; // can be null\n return this.services.playerOfferings.isRegistrationOfferEnabled &&\n !this.services.miniOrbit.isEnabled &&\n (cStatus === false) &&\n this.services.device.isMobile &&\n this.services.mediaQuery.portrait &&\n await super.shouldBeVisible();\n }\n \n shouldUseLinkToOfferAnimation(): boolean {\n return false;\n }\n\n isHighPriorityOffer(): boolean {\n return true;\n }\n\n render(): React.ReactNode {\n return null;\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {IOffer, IPlayerOfferingsService, IShowOfferOptions} from \"./player-offerings.service.interface\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {BalanceType} from \"../../../common/const/wallet_balance_type\";\nimport { OfferConfiguration } from \"../configurations/config-data-sections/link-to-offer.configuration\";\nimport { WelcomeOffer } from \"./player-offerings/offers/welcome-offer\";\nimport { WheelOfFortuneOffer } from \"./player-offerings/offers/wheel-of-fortune-offer\";\nimport React from \"react\";\nimport { IModalDialogHandler } from \"../dialog/dialog.service.interface\";\nimport { LinkToOfferBannerBox } from \"../../components/link-to-offer/boxes/link-to-offer-banner/link-to-offer-banner.box\";\nimport { CmsBannerComponent } from \"../../components/cms-banner/cms-banner.component\";\nimport { namedSetTimeout } from \"../../../common/utils/time-functions\";\nimport { RegistrationOffer } from \"./player-offerings/offers/registration-offer\";\nimport { OnGameCloseParams, OnGameOpenParams } from \"../sdk/sdk-events\";\nimport { removeSpecialCharacters } from \"../../../utils/string-helpers\";\nimport { OrbitMarketingEventAnalyticsCategory, OrbitMarketingEventAnalyticsLabel } from \"../analytics/analytics.service.interface\";\n\nconst ANIMATE_WHEEL_BALANCE_THRESHOLD = 500; // 500 = 5.00(Dollars/Euros/GBPs)\n\n\n\n\nexport class PlayerOfferingsService extends ServiceBase implements IPlayerOfferingsService {\n\n @observable.ref\n enableWheelOfFortuneAnimation: boolean = false;\n\n @observable.ref\n private _hasWheelOfFortunePromotion: boolean = false;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._subscribe();\n }\n\n get isWheelOfFortuneEnabled() {\n const isEnabledFromConfig = this.services.configuration.servicesConfigs.PlayerOfferings.isWheelOfFortuneEnabled;\n const hasWheelOfFortuneConfigSection = !Check.isNullOrUndefined(this.services.configuration.data.wheelOfFortune);\n return isEnabledFromConfig && hasWheelOfFortuneConfigSection;\n }\n\n get isRegistrationOfferEnabled(): boolean {\n const isEnabledFromConfig = this.services.configuration.servicesConfigs.PlayerOfferings.isRegistrationOfferEnabled;\n const hasRegistrationOfferConfigSection = !Check.isNullOrUndefined(this.services.configuration.data.registrationOffer);\n return isEnabledFromConfig && hasRegistrationOfferConfigSection;\n }\n\n @action.bound\n private _setWOFEnableAnimation(enableAnimation: boolean) {\n this.enableWheelOfFortuneAnimation = enableAnimation;\n }\n\n\n @action.bound\n private _setHasWheelOfFortunePromotion(hasWheelOfFortunePromotion: boolean) {\n this._hasWheelOfFortunePromotion = hasWheelOfFortunePromotion;\n }\n\n private _subscribe() {\n this.reaction(() => ({\n isAuthorized: this.services.user.isAuthorized,\n userBalance: this.services.walletProxy.plainNumberBankroll[BalanceType.BOTH]\n }),\n ({isAuthorized, userBalance}) => {\n if (this.isWheelOfFortuneEnabled) {\n if (isAuthorized && Check.isNumber(userBalance) && userBalance < ANIMATE_WHEEL_BALANCE_THRESHOLD) {\n this._setWOFEnableAnimation(true);\n } else if(!isAuthorized){\n this._setWOFEnableAnimation(false);\n }\n }\n },\n {fireImmediately: true}\n );\n\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (!isAuthorized) {\n this._hasWheelOfFortunePromotion = false;\n this._resetShownFlagForAllOffers();\n } else {\n this._updateWheelOfFortuneAvailability();\n }\n }, { fireImmediately: true }\n );\n\n this.services.cmsSegmentation.then(cmsSegmentation => {\n this.reaction(\n () => { return {\n segments: cmsSegmentation.segments,\n }},\n async () => {\n await this._updateOfferToShow();\n }, { fireImmediately: true }\n );\n })\n\n this.reaction(\n () => { return {\n isAuthorized: this.services.user.isAuthorized,\n hasWheelOfFortunePromotion: this.hasWheelOfFortunePromotion,\n welcomeOfferConfig: this._welcomeOfferConfig,\n currentPopup: this.currentPopup\n }},\n async () => {\n await this._updateOfferToShow();\n }, { fireImmediately: true }\n );\n\n this.services.sdk.events.onPromotionsChanged(data => {\n if (this.services.user.isAuthorized &&\n this.services.user.cid.toString() === data.Cid.toString() &&\n Check.isBoolean(data.IsPromotionDisplayedInClient)) {\n //this data.IsPromotionDisplayedInClient info seems to be wrong\n //this._setHasWheelOfFortunePromotion(data.IsPromotionDisplayedInClient);\n //so use API instead\n this._updateWheelOfFortuneAvailability();\n }\n });\n\n if (this.isRegistrationOfferEnabled) {\n this.services.gameRunner.then(gameRunner => {\n gameRunner.lastPlayedGame.listenForLastOpenDemoGame();\n })\n\n this.services.sdk.events.onGameClose((data: OnGameCloseParams) => {\n if (!data.isReal && !this.hasOpenedPopup && !this._preventShowingRegistrationPopupThisDemoSession) {\n this._showRegistrationPopup();\n }\n });\n\n this.services.sdk.events.onGameOpen((data: OnGameOpenParams) => {\n if (!data.isReal) {\n this.closeCurrentPopup();\n this._preventShowingRegistrationPopupThisDemoSession = false;\n this._initPopupTimer();\n }\n });\n }\n\n this.reaction(\n () => { return {\n currentOffer: this.currentLinkToOffer,\n currentRoute: this.services.routing.currentRoute\n }},\n async (data) => {\n if(data.currentOffer) {\n const shouldBeVisible = await data.currentOffer.shouldBeVisible();\n if (shouldBeVisible && data.currentRoute.isOrbitRoute && data.currentRoute.data?.arenaType) {\n this.services.analytics.sendOrbitMarketingEvent(data.currentOffer.analyticsCategory, 'View_Floating_Button', data.currentRoute.data.arenaType);\n }\n }\n\n },\n { fireImmediately: true }\n );\n }\n\n @observable.ref\n currentLinkToOffer: IOffer | null = null;\n\n @action.bound\n private _setCurrentLinkOffer(offer: IOffer): void {\n this.currentLinkToOffer = offer;\n }\n\n\n @observable.ref\n _welcomeOfferConfig: OfferConfiguration | null = null;\n\n @action.bound\n setWelcomeOfferConfig(config: OfferConfiguration | null): void {\n this._welcomeOfferConfig = config;\n }\n\n private _allOffers: IOffer[] = [];\n private _getAllOffers(): IOffer[] {\n if (this._allOffers.length > 0) {\n //find welcome offer to update the config\n const welcomeOffer = this._allOffers.find(offer => offer instanceof WelcomeOffer) as WelcomeOffer;\n if (welcomeOffer) {\n welcomeOffer.updateConfig(this._welcomeOfferConfig);\n } else {\n //make sure the welcome offer is in the list\n if (this._welcomeOfferConfig) {\n this._allOffers.push(new WelcomeOffer(this.services, this._welcomeOfferConfig));\n }\n }\n return this._allOffers;\n }\n\n // order of this insertions matter!\n if (this.isWheelOfFortuneEnabled && this.services.configuration.data.wheelOfFortune) {\n this._allOffers.push(new WheelOfFortuneOffer(this.services, this.services.configuration.data.wheelOfFortune));\n }\n if (this._welcomeOfferConfig) {\n this._allOffers.push(new WelcomeOffer(this.services, this._welcomeOfferConfig));\n }\n\n return this._allOffers;\n }\n\n private _resetShownFlagForAllOffers() {\n return this._allOffers.forEach(offer => { offer.offerShown = false; });\n }\n\n async _updateOfferToShow() {\n\n //offer to show is first visible one\n\n const offers = this._getAllOffers();\n let selectedOffer: IOffer = null;\n for (const offer of offers) {\n if (await offer.shouldBeVisible()) {\n try {\n // make sure we have banner content\n const cmsBanners = await this.services.cmsBanners;\n const hasBannerContent = await cmsBanners.loadBanner(offer.bannerId);\n if (hasBannerContent) {\n selectedOffer = offer;\n break;\n }\n } catch {\n //we just continue to next available offer if we failed to load CMS banner\n }\n\n }\n }\n\n this._setCurrentLinkOffer(selectedOffer);\n }\n\n private async _fetchUserHasWheelOfFortune() {\n try {\n const promoCodes = await this.services.api.bonusManagerController.getEligiblePromotionCodes();\n return Check.isArray(promoCodes) && promoCodes.length >= 1;\n }\n catch (err) {\n // we might receive an error like LimitReached (122), which anyway means that we don't have any promotion codes\n return false;\n }\n }\n\n private _updateWheelOfFortuneAvailability() {\n if (this.isWheelOfFortuneEnabled) {\n this._fetchUserHasWheelOfFortune().then(hasWheelOfFortune => {\n //make sure user is still authenticated when we set this response\n if (this.services.user.isAuthorized) {\n this._setHasWheelOfFortunePromotion(hasWheelOfFortune);\n }\n });\n }\n }\n\n get hasWheelOfFortunePromotion(): boolean {\n return this._hasWheelOfFortunePromotion;\n }\n\n private _shownOffer: IOffer = null;\n\n showOfferPopup(offer: IOffer, options: IShowOfferOptions): void {\n this.closeCurrentPopup();\n this._shownOffer = offer;\n this._shownOffer.offerShown = true;\n\n const dialogHandler = this.services.dialog.showModal(() => {\n return this._renderBanner(offer);\n }, {\n title: ' ',\n onClosed: () => {\n this.closeCurrentPopup();\n options?.onPopupClosed && options?.onPopupClosed();\n },\n hideCloseButton: true,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n hideDialogHeader: true,\n applyMaxHeight: true,\n isHighPriority: options.isHighPriority ?? false,\n noDefaultContentPadding: true,\n showOpenAndCloseAnimation: true\n });\n\n this._setCurrentPopup(dialogHandler);\n }\n\n private _renderBanner(offer: IOffer) {\n return (\n \n \n \n );\n }\n\n @observable.ref\n currentPopup: IModalDialogHandler | null = null;\n\n @action.bound\n private _setCurrentPopup(currentPopup: IModalDialogHandler): void {\n this.currentPopup = currentPopup;\n }\n\n get hasOpenedPopup(): boolean {\n return !Check.isNullOrUndefined(this.currentPopup);\n }\n\n get isHighPriorityOffer(): boolean {\n return this._shownOffer?.isHighPriorityOffer() ?? false;\n }\n\n private _registrationPopupTimerId = 0;\n private _preventShowingRegistrationPopupThisDemoSession: boolean = false;\n\n private _initPopupTimer() {\n this._registrationPopupTimerId = namedSetTimeout('REGISTRATION_POPUP_TIMER', async () => {\n await this._showRegistrationPopup();\n this._preventShowingRegistrationPopupThisDemoSession = true;\n }, 60 * 1000);\n }\n\n private async _showRegistrationPopup() {\n const offer = new RegistrationOffer(this.services, this.services.configuration.data.registrationOffer);\n\n const cmsBanners = await this.services.cmsBanners;\n const hasBannerContent = await cmsBanners.loadBanner(offer.bannerId);\n if (!hasBannerContent) {\n this.services.logger.error(`Could not show registration offer, CMS content not available!`, {...this.services.configuration.data.registrationOffer});\n return;\n }\n\n if (!await offer.shouldBeVisible()) {\n return;\n }\n\n this.services.analytics.sendOrbitMarketingEvent(OrbitMarketingEventAnalyticsCategory.Conversion, 'Show', OrbitMarketingEventAnalyticsLabel.DemoRegPopup);\n\n const options: IShowOfferOptions = {\n onPopupClosed: () => {\n this.services.gameRunner.then(gameRunner => {\n const gameTitle = removeSpecialCharacters(gameRunner.lastPlayedGame.lastOpenDemoGame?.title ?? '');\n this.services.analytics.sendOrbitMarketingEvent(OrbitMarketingEventAnalyticsCategory.Conversion, `${gameTitle}_Close`, OrbitMarketingEventAnalyticsLabel.DemoRegPopup);\n })\n\n },\n isHighPriority: true\n };\n this.showOfferPopup(offer, options);\n }\n\n closeCurrentPopup() {\n if (this._registrationPopupTimerId) {\n clearTimeout(this._registrationPopupTimerId);\n this._registrationPopupTimerId = 0;\n }\n\n if (this.currentPopup) {\n this.currentPopup.close();\n this._setCurrentPopup(null);\n this._shownOffer = null;\n }\n };\n}\n","import { IPixiAppCreateOptions, IPixiAppCreationResult } from \"./pixi-app.service.interface\";\n\n/**\n * PixiSpine must load after pixi.js / pixi.js-legacy but before \"new PIXI.Application\"\n * Because PixiSpine alter/mutates the internal structure of PIXI\n */\nasync function loadPixi() {\n const PIXI = await import(\"pixi.js-legacy\");\n // const PIXI = await import(\"pixi.js\");\n // const PixiSpine = await import(\"pixi-spine\");\n const PixiSpine = await import(\"@pixi-spine/all-3.8\");\n return {PIXI, PixiSpine};\n}\n\nexport async function createPixiApplication(options: IPixiAppCreateOptions): Promise {\n const {PIXI, PixiSpine} = await loadPixi();\n let app = new PIXI.Application({\n backgroundAlpha: 0,\n width: options.width,\n height: options.height,\n antialias: true,\n forceCanvas: !!options.force2DCanvasContext\n });\n\n const dispose = () => {\n try {\n app.view.removeEventListener(\"webglcontextlost\", contextLostHandler, false);\n app.stop();\n app.destroy(true, true);\n app = undefined;\n } catch (err) {\n console.error('Failed to dispose pixi application', err);\n }\n\n };\n\n const contextLostHandler = (_e: WebGLContextEvent) => {\n if (options.onContextLost) {\n options.onContextLost();\n }\n if (options.selfDestroyOnContextLost) {\n dispose();\n }\n };\n\n app.view.addEventListener(\"webglcontextlost\", contextLostHandler, false);\n\n return {app, canvas: app.view, dispose, PixiSpine};\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {IPixiAppService, IPixiAppCreateOptions, IPixiAppCreationResult, Application, Loader, Dict, LoaderResource} from \"./pixi-app.service.interface\";\nimport {createPixiApplication} from \"./pixi-app-creator\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\n/**\n * This service will manage pixi applications.\n *\n */\nexport class PixiAppService extends ServiceBase implements IPixiAppService {\n private _pixiAppCreatorWithWebGlManager: (options: IPixiAppCreateOptions) => Promise;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this._pixiAppCreatorWithWebGlManager = this.services.webGlContextManager.makeCreator(createPixiApplication);\n }\n public createPixiApp(options: IPixiAppCreateOptions) {\n if (options.force2DCanvasContext) {\n return createPixiApplication(options);\n }\n return this._pixiAppCreatorWithWebGlManager(options);\n }\n\n public loadResources(pixiApp: Application, resourcesUrls: {name: string, jsonUrl: string}[]) {\n return new Promise<{loader: Loader; resources: Dict;}>((res, rej) => {\n resourcesUrls.forEach(({name, jsonUrl}) => {\n pixiApp.loader.add(name, jsonUrl);\n });\n pixiApp.loader.load(async (loader, resources) => {\n /* This happens for example if we use \"@pixi-spine/runtime-3.8\" library instead of \"pixi-spine\" or \"@pixi-spine/all-3.8\" */\n /* Also it happens if the json is not well formatted according to specs (RFC-8259, ECMA-404) (https://www.json.org/json-en.html , https://en.wikipedia.org/wiki/JSON).\n For example, all members have to be quoted, or else is not a JSON but an object. Ex: NOT OK: {key: \"value\"} / OK: {\"key\": \"value\"}\n I like to use this validator+formatter: https://elmah.io/tools/json-formatter/ */\n /* Otherwise, this shouldn't happen normally, but since the member is optional in typings, better safe than sorry */\n resourcesUrls.forEach(({name, jsonUrl}) => {\n if (!resources[name].spineData) {\n rej(\"Error occured. Could not load the animation:\"+jsonUrl);\n }\n });\n res({loader, resources});\n });\n });\n }\n}\n","import {IFreePlayVoucherViewModel} from \"./vouchers/free-play-voucher-view-model.interface\";\n\nexport enum FreePlayStatus {\n Created = 1,\n Active = 5,\n Canceled = 9,\n Expired = 10,\n Finished = 16\n}\n\nexport interface IFreePlayService {\n readonly userVouchersSortedByCreationDate: IFreePlayVoucherViewModel[];\n readonly userVouchersSortedByExpirationDate: IFreePlayVoucherViewModel[];\n readonly hasVouchers: boolean;\n findVoucherById(id: string): IFreePlayVoucherViewModel | null\n getGameVouchersSortedByCreationDate(gameType: number): IFreePlayVoucherViewModel[];\n refreshVouchers(): Promise;\n registerActionToExecuteWhenFreePlayIsAvailable(action: () => Promise): void;\n}","import { IFreePlayVouchersProvider } from \"../free-play-vouchers.provider.interface\";\nimport { IFreePlayVoucherModel } from \"../../vouchers/free-play-voucher.model.interface\";\nimport { observable, runInAction, makeObservable } from \"mobx\";\nimport { IServiceFactoryExtended } from \"../../../service-factory-extended.interface\";\nimport { VouchersProviderBase } from \"../vouchers-provider-base\";\nimport { GNWP_SOURCES } from \"../../../gnwp/gnwp-consts\";\nimport { Check } from \"@sparkware/app-utils\";\nimport { ThirdPartyFreePlayController_GetAllVouchersResponse } from \"../../../api/api.service\";\nimport { IFreePlayVoucherData } from \"../../../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport { FP_VOUCHER_TYPES } from \"../../../../../common/const/free_play_consts\";\nimport { FreePlayStatus } from \"../../free-play.service.interface\";\nimport { NullableUndefinedDate, NullableUndefinedString } from \"../../../../../common/types/nullable-types\";\n\nenum THIRD_PARTY_BONUS_TYPE {\n FreePlay = 1,\n Voucher = 2\n}\n\ntype BackendBonusData = ThirdPartyFreePlayController_GetAllVouchersResponse['FreePlayBonusList'][number];\n\nexport class ThirdPartyVouchersProvider extends VouchersProviderBase implements IFreePlayVouchersProvider {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this.refreshVouchers();\n\n this.addSdkEventSubscription(this.services.sdk.events.onGameClose(async () => {\n await this.refreshVouchers();\n }));\n\n this.addSdkEventSubscription(this.services.sdk.events.onExternalLinkClosed(async (source) => {\n if (source === GNWP_SOURCES.CASHIER || source === GNWP_SOURCES.MY_ACCOUNT || source === GNWP_SOURCES.OMG) {\n await this.refreshVouchers();\n }\n }));\n\n this.addSdkEventSubscription(this.services.sdk.events.onDepositWidgetClosed(async () => {\n await this.refreshVouchers();\n }));\n\n this.addSdkEventSubscription(this.services.sdk.events.onFreeToPlayWidgetClosed(async () => {\n await this.refreshVouchers();\n }));\n }\n\n @observable\n vouchers: IFreePlayVoucherModel[] = [];\n\n private _setVouchers(newVouchers: IFreePlayVoucherModel[]): void {\n runInAction(() => {\n this.vouchers = newVouchers;\n });\n }\n\n dispose() {\n super.dispose();\n\n this.vouchers.forEach(voucher => voucher.dispose());\n this.vouchers = [];\n }\n\n async refreshVouchers(): Promise {\n const response = await this.services.api.thirdPartyFreePlayController.getAllVouchers();\n if (Check.isEmpty(response.FreePlayBonusList)) {\n this._setVouchers([]);\n return;\n }\n\n const voucherModels: IFreePlayVoucherModel[] = [];\n\n for (let bonusDataFromBackend of response.FreePlayBonusList) {\n if (bonusDataFromBackend.BonusStatus === FreePlayStatus.Active) {\n const clientVoucherData = await this._convertBackendBonusDataToClientVoucherData(bonusDataFromBackend);\n if (clientVoucherData) {\n const voucherModel = this._createVoucherModel(clientVoucherData);\n if (voucherModel) {\n voucherModels.push(voucherModel);\n }\n }\n }\n\n }\n\n this._setVouchers(voucherModels);\n\n }\n\n private async _convertBackendBonusDataToClientVoucherData(bonusDataFromBackend: BackendBonusData): Promise {\n if (Check.isEmpty(bonusDataFromBackend.CurrencyCode)) {\n this.services.logger.error(`Third party voucher with ID ${bonusDataFromBackend.FreePlayID} is missing currency code`);\n return null;\n }\n\n if (bonusDataFromBackend.CurrencyCode !== this.services.currency.currencyIso3) {\n this.services.logger.error(`Third party voucher with ID ${bonusDataFromBackend.FreePlayID} has currency code ${bonusDataFromBackend.CurrencyCode} which is different from user currency code ${this.services.currency.currencyIso3}`);\n return null;\n }\n\n switch (bonusDataFromBackend.FreePlayTypeID) {\n case THIRD_PARTY_BONUS_TYPE.FreePlay:\n return this._convertFreePlay(bonusDataFromBackend);\n case THIRD_PARTY_BONUS_TYPE.Voucher:\n return this._convertVoucher(bonusDataFromBackend);\n default:\n this.services.logger.error(`Unknown third party free play type ${bonusDataFromBackend.FreePlayTypeID}`);\n return null;\n }\n }\n\n private async _getGamesMaxBets(gameTypes: number[]): Promise {\n const gamesInfo = await this.services.games.getGamesInfoArray(gameTypes);\n\n return gamesInfo.filter(gInfo => !Check.isNullOrUndefined(gInfo?.maxBet))\n .map(gInfo => gInfo.maxBet);\n }\n\n\n private _parseVoucherCreationDate(creationDate: NullableUndefinedString): NullableUndefinedDate {\n if (creationDate) {\n return new Date(creationDate);\n } else {\n return null;\n }\n }\n\n private async _convertFreePlay(bonusDataFromBackend: BackendBonusData): Promise {\n if (!bonusDataFromBackend.FreeSpinsInfo) {\n this.services.logger.error(`Missing FreeSpinsInfo for third party voucher with ID ${bonusDataFromBackend.FreePlayID}`);\n return null;\n }\n\n let spinBetAmount = bonusDataFromBackend.FreeSpinsInfo.BetPerSpin;\n if (!spinBetAmount) {\n const maxBets = await this._getGamesMaxBets(bonusDataFromBackend.GameTypesIDs);\n if (maxBets.length === 0) {\n spinBetAmount = 0;\n } else {\n spinBetAmount = Math.max(...maxBets);\n }\n }\n return {\n ID: bonusDataFromBackend.FreePlayID,\n CurrentBalance: bonusDataFromBackend.FreeSpinsInfo.NumberOfFreeSpinsLeft * spinBetAmount,\n Winnings: bonusDataFromBackend.CurrentWinningAmount,\n FreePlayTypeId: FP_VOUCHER_TYPES.FreeSpin,\n OriginAmount: bonusDataFromBackend.FreeSpinsInfo.NumberOfAwardedFreeSpins * spinBetAmount,\n CreationDate: this._parseVoucherCreationDate(bonusDataFromBackend.CreationDate),\n ExpirationDate: new Date(bonusDataFromBackend.ExpirationDate),\n SpinBetAmount: spinBetAmount,\n GameTypeIDList: bonusDataFromBackend.GameTypesIDs,\n CompanyID: bonusDataFromBackend.CompanyID\n };\n }\n\n private async _convertVoucher(bonusDataFromBackend: BackendBonusData): Promise {\n if (!bonusDataFromBackend.VoucherInfo) {\n this.services.logger.error(`Missing VoucherInfo for third party voucher with ID ${bonusDataFromBackend.FreePlayID}`);\n return null;\n }\n\n return {\n ID: bonusDataFromBackend.FreePlayID,\n CurrentBalance: bonusDataFromBackend.VoucherInfo.RemainingFreePlayAmount,\n Winnings: bonusDataFromBackend.CurrentWinningAmount,\n FreePlayTypeId: FP_VOUCHER_TYPES.FreePlay,\n OriginAmount: bonusDataFromBackend.AwardedFreePlayAmount,\n CreationDate: this._parseVoucherCreationDate(bonusDataFromBackend.CreationDate),\n ExpirationDate: new Date(bonusDataFromBackend.ExpirationDate),\n SpinBetAmount: 0,\n GameTypeIDList: bonusDataFromBackend.GameTypesIDs,\n CompanyID: bonusDataFromBackend.CompanyID\n };\n\n }\n}","import { IGameAnimatedIconsManagerService, IGameAnimatedIconRegistrationResult } from \"./game-animated-icons-manager.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { shuffle } from \"../../../utils/array-helper\";\nimport {\n AnimatedIconBaseService,\n AnimatedIconObservableTarget,\n AnimatedIconUnloadReason, IAnimatedIconRequestOptions\n} from \"../pixi-app/animated-icon-base-service.service\";\nimport {SetTimeoutType} from \"../../../common/types/set-timeout-type\";\nimport {AnimationStatus} from \"../pixi-app/pixi-spine-animation\";\n\nconst MAX_ANIMATED_ICONS = 2;\n\n/**\n * This service will manage game animated icons loaded with pixi-spine.\n *\n */\nexport class GameAnimatedIconsManagerService extends AnimatedIconBaseService implements IGameAnimatedIconsManagerService {\n private intersectionObserver: IntersectionObserver | null = null;\n private observedTargets = new Map();\n private isGameOpened: boolean = false;\n private animatedIconsAllowed: boolean = true;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this.intersectionObserver = new IntersectionObserver(this.intersectionCallback, {\n threshold: 0.7\n });\n /**\n * When the game opens, the content is not visible so stop all animations\n */\n services.sdk.events.onGameOpen(() => {\n this.isGameOpened = true;\n this.observedTargets.forEach((observedTarget) => {\n if (observedTarget.animationDisposer) {\n observedTarget.animationDisposer(AnimatedIconUnloadReason.GAME_OPEN);\n }\n });\n });\n /**\n * When the game opens, the content is visible so load animations\n */\n services.sdk.events.onGameClose(() => {\n this.isGameOpened = false;\n this.selectAndLoadAnimations();\n });\n\n this.reaction(() => this.services.user.isAuthorized, () => {\n this.animatedIconsAllowed = this.services.regulation.current.gameIconAnimationsAllowed;\n if (this.animatedIconsAllowed) {\n this.selectAndLoadAnimations();\n }\n }, {\n fireImmediately: true\n });\n }\n\n private intersectionCallback = (entries: IntersectionObserverEntry[], observer: IntersectionObserver) => {\n entries.forEach((entry) => {\n if (!this.observedTargets.has(entry.target)) {\n // should throw error ?\n return;\n }\n const observedTarget = this.observedTargets.get(entry.target);\n if (entry.isIntersecting) {\n // mark the observedTarget as eligible for receiving animation\n observedTarget.inViewport = true;\n } else {\n // unmark the observedTarget as eligible targets\n observedTarget.inViewport = false;\n // destroy the animation if it exists\n if (observedTarget.animationDisposer) {\n observedTarget.animationDisposer(AnimatedIconUnloadReason.VIEWPORT_EXIT);\n }\n }\n });\n this.selectAndLoadAnimations();\n };\n\n /**\n * Method to register the game animated icon so it can be managed by this.\n */\n public register(options: IAnimatedIconRequestOptions): IGameAnimatedIconRegistrationResult {\n this.observedTargets.set(options.wrapper, options);\n this.intersectionObserver.observe(options.wrapper);\n\n return {\n unregister: () => {\n if (this.observedTargets.has(options.wrapper)) {\n const observedTarget = this.observedTargets.get(options.wrapper)\n this.observedTargets.delete(options.wrapper);\n this.intersectionObserver.unobserve(options.wrapper);\n if (observedTarget.animationDisposer) {\n observedTarget.animationDisposer(AnimatedIconUnloadReason.REQUESTED);\n }\n }\n }\n };\n }\n private debounceTimeout: SetTimeoutType;\n private selectionRunning: boolean = false;\n private selectionRunAgainNeeded: boolean = false;\n private selectAndLoadAnimations = () => {\n if (!this.animatedIconsAllowed) {\n return;\n }\n // we cannot run the selection twice in paralel, it has to be sequential\n if (this.selectionRunning) {\n this.selectionRunAgainNeeded = true;\n return;\n }\n // avoid choking the CPU with too many subsequent tasks, debounce\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n this.debounceTimeout = setTimeout(async () => {\n this.selectionRunning = true;\n\n // When a game is opened, we don't load any animation\n if (!this.isGameOpened) {\n let alreadyRunningAnimationCount = 0;\n let eligibleTargets: AnimatedIconObservableTarget[] = [];\n // count already running animations and count eligible targets\n this.observedTargets.forEach((observedTarget) => {\n if (observedTarget.animation && (observedTarget.animation.status === AnimationStatus.Running || observedTarget.animation.status === AnimationStatus.Loading)) {\n alreadyRunningAnimationCount++;\n } else if (observedTarget.inViewport) {\n eligibleTargets.push(observedTarget);\n }\n });\n\n // if we are not already running the maximum allowed animations we take as much as we can from the eligibles targets\n if (alreadyRunningAnimationCount > MAX_ANIMATED_ICONS) {\n this.services.logger.error(\"There are more animated icons running (\"+alreadyRunningAnimationCount+\") than MAX_ANIMATED_ICONS (\"+MAX_ANIMATED_ICONS+\")\");\n } else if (alreadyRunningAnimationCount < MAX_ANIMATED_ICONS) {\n let remainingSlots = MAX_ANIMATED_ICONS - alreadyRunningAnimationCount;\n shuffle(eligibleTargets);\n for (let i=0; i(creatorFn: (options: TOptions) => Promise): (options: TOptions) => Promise {\n return async (options: TOptions) => {\n /* The most restrictive browsers (Chrome, Safari and Opera on mobile devices) allow a maximum of 8 webgl context instances\n The limit here is 7 because one webgl context is reserved for the game iframe */\n if (this._activeContexts >= 7) {\n return Promise.reject(\"Too many WebGL contexts\");\n }\n this._activeContexts++;\n try {\n const result: TResult = await creatorFn(options);\n const onContextLost = () => {\n this._activeContexts--;\n }\n result.canvas.addEventListener(\"webglcontextlost\", onContextLost);\n return {\n ...result,\n dispose: () => {\n result.canvas.removeEventListener(\"webglcontextlost\", onContextLost);\n /* In PC, pixi will create an WebGL 2 context but on mobile (at least on Chrome) it will create a WebGL 1 context */\n /* We need to check if the context was lost because we can call dispose on a canvas that already lost it's context\n and the activeContext count was already decremented. So destroying the canvas and animation objects so should not\n decrement it again */\n const webGl2Context = result.canvas.getContext(\"webgl2\");\n const webGl1Context = result.canvas.getContext(\"webgl\");\n const isWebGlContextLost = webGl2Context ? webGl2Context.isContextLost() : ( webGl1Context ? webGl1Context.isContextLost() : true);\n if (!isWebGlContextLost) {\n this._activeContexts--;\n }\n result.dispose()\n }\n };\n } catch (e) {\n this._activeContexts--;\n throw e;\n }\n };\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {ITooltipsProvider} from \"./tooltips-provider.interface\";\nimport {IOverlayConsumer} from \"../overlay/overlay-consumer.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {makeObservable, observable} from \"mobx\";\nimport {ITooltipModel} from \"./tooltip-base/tooltip-model.interface\";\n\nexport abstract class TooltipBaseService extends ServiceBase implements ITooltipsProvider, IOverlayConsumer {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n makeObservable(this);\n services.overlay.registerConsumer(this);\n }\n\n @observable\n protected _toolTips: ITooltipModel[] = [];\n get toolTips(): ITooltipModel[] {\n return this._toolTips;\n }\n\n onOverlayClicked() {\n //nothing to do here\n }\n\n getOverlayZIndex(): number | undefined {\n const toolTips = this._toolTips.filter(t => {\n //we use separate variables to make sure that this method depends on all the observable involved in the condition\n const showOverlay = t.showOverlay;\n const shouldDisplay = t.shouldDisplay();\n return showOverlay && shouldDisplay;\n });\n\n if(toolTips.length === 0) {\n return undefined;\n }\n\n return Math.max(...toolTips.map(t => t.zIndex)) - 1;\n }\n\n get needsOverlay(): boolean {\n const toolTips = this._toolTips.filter(t => {\n //we use separate variables to make sure that this method depends on all the observable involved in the condition\n const showOverlay = t.showOverlay;\n const shouldDisplay = t.shouldDisplay();\n return showOverlay && shouldDisplay;\n });\n return toolTips.length > 0;\n }\n\n}","import {beforeWrite, ModifierArguments} from \"@popperjs/core\";\nimport {Options} from \"@popperjs/core/lib/modifiers/computeStyles\";\n\n\nexport const stickOnTopTooltipModifier = {\n name: 'stickOnTop',\n enabled: true,\n phase: 'beforeWrite',\n requiresIfExists: ['offset'],\n fn(data: ModifierArguments) {\n const {styles, modifiersData} = data.state;\n\n //This custom modifier was created in order to fix a wrong tooltip position - when placement is TOP\n styles.popper = {\n top: Math.round(modifiersData.popperOffsets.y) + 'px',\n left: Math.round(modifiersData.popperOffsets.x) + 'px'\n };\n }\n};\n\nexport const stickToBottomTooltipModifier = {\n name: \"stickToBottom\",\n enabled: true,\n phase: beforeWrite,\n fn: function(data: ModifierArguments) {\n const popperWidth = data.state.rects.popper.width;\n const popperHeight = data.state.rects.popper.height;\n const {styles, elements} = data.state;\n\n data.options.adaptive = false;\n\n data.state.strategy = \"fixed\";\n data.state.placement = \"bottom\";\n\n styles.popper = {\n top: (window.innerHeight - popperHeight - 10) + \"px\",\n left: (document.documentElement.clientWidth - popperWidth) / 2 + 'px'\n };\n\n styles.arrow = {\n bottom: '-7px',\n left: (popperWidth - elements.arrow.clientWidth) / 2 + 'px',\n top: 'auto'\n };\n }\n};\n\nexport const offsetTooltipModifier = {\n name: 'offset',\n options: {\n offset: [10, 17]\n },\n};\n\nexport const flipTooltipModifier = {\n name: \"flip\",\n options: {\n padding: 5\n }\n};\n\nexport const preventOverflowTooltipModifier = {\n name: \"preventOverflow\",\n options: {\n padding: 5\n }\n};\n","import {ITooltipModel} from \"./tooltip-model.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {makeObservable, observable, runInAction} from \"mobx\";\nimport {DomEventSubscription} from \"../../../../utils/event-listener-registration\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {createPopper} from \"@popperjs/core\";\nimport {flipTooltipModifier, offsetTooltipModifier, preventOverflowTooltipModifier} from \"./tooltip-modifiers\";\nimport React from \"react\";\nimport {namedSetTimeout} from \"../../../../common/utils/time-functions\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {ITooltipOptions, ITooltipStyling} from \"./tooltip-options.interface\";\n\nexport abstract class TooltipBaseModel implements ITooltipModel {\n constructor(protected readonly services: IServiceFactoryExtended,\n protected readonly options: TOptions) {\n\n makeObservable(this);\n\n this.id = uuidv4();\n }\n\n private _onDocumentClickHandler = (event: any) => {\n if(this.options.closeOnClickOutside && this.tooltipContainer && !this.tooltipContainer.contains(event.target)) {\n this.closeTooltip();\n }\n }\n\n readonly id: string;\n\n private _domEventSubscription: DomEventSubscription[] = [];\n\n private _autoCloseTimeout: any = null;\n protected _popperInstance: any = null;\n\n protected abstract _getElementToAttach(): HTMLElement | null;\n\n\n @observable.ref\n tooltipContainer: HTMLElement | null;\n\n shouldDisplay(): boolean {\n return true;\n }\n\n\n onToolTipRendered(tooltipContainer: HTMLElement): void {\n\n runInAction(() => {\n this.tooltipContainer = tooltipContainer;\n });\n\n if(this.options.onTooltipRendered) {\n this.options.onTooltipRendered();\n }\n\n if(!Check.isNullOrUndefined(this.options.timeout)) {\n this._autoCloseTimeout = namedSetTimeout('TOOLTIP_CLOSE_TIMER', () => this.closeTooltip(), this.options.timeout.totalMilliseconds);\n }\n\n if(this.options.closeOnClickOutside) {\n this._domEventSubscription.push(this.services.dom.subscribeTo.click(this._onDocumentClickHandler));\n }\n }\n\n\n get zIndex(): number {\n if(Check.isNullOrUndefined(this.options.zIndex)) {\n return 203;\n }\n\n if(this.options.showOverlay) {\n return this.options.zIndex + 1;\n }\n\n return this.options.zIndex;\n }\n\n get animated(): boolean {\n if(Check.isNullOrUndefined(this.options.animated)) {\n return true;\n }\n\n return this.options.animated;\n }\n\n get hasGlow(): boolean {\n if(Check.isNullOrUndefined(this.options.hasGlow)) {\n return true;\n }\n\n return this.options.hasGlow;\n }\n\n get shouldShowCloseButton(): boolean {\n return Boolean(this.options.showCloseButton);\n }\n\n get invertCloseButtonColors(): boolean {\n return Boolean(this.options.invertCloseButtonColors);\n }\n\n\n get styling(): ITooltipStyling | undefined {\n return this.options.styling;\n }\n\n get showOverlay(): boolean {\n return Boolean(this.options.showOverlay);\n }\n\n private _createTooltipPopper(elementToAttach: HTMLElement) {\n\n return createPopper(elementToAttach, this.tooltipContainer, {\n placement: this.options.placement || 'auto',\n strategy: this.options.strategy || \"fixed\",\n modifiers: [\n preventOverflowTooltipModifier,\n flipTooltipModifier,\n offsetTooltipModifier,\n ...(this.options.modifiers || [])\n ]\n });\n }\n\n render(): string | React.ReactElement | null {\n if(!this.tooltipContainer) {\n return null;\n }\n\n let elementToAttach = this._getElementToAttach();\n if(!elementToAttach) {\n elementToAttach = this.services.dom.body;\n }\n\n if(this._popperInstance) {\n this._destroyPopperInstance();\n }\n\n this._popperInstance = this._createTooltipPopper(elementToAttach);\n\n return this.options.renderContent();\n\n }\n\n private _destroyPopperInstance(): void {\n if(this._popperInstance) {\n this._popperInstance.destroy();\n this._popperInstance = null;\n }\n }\n\n private _unsubscribeFromDomEvents(): void {\n this._domEventSubscription.forEach(ev => ev.dispose());\n this._domEventSubscription = [];\n }\n\n private _clearAutoCloseTimeout(): void {\n if(this._autoCloseTimeout) {\n clearTimeout(this._autoCloseTimeout);\n this._autoCloseTimeout = null;\n }\n }\n\n private _dispose(): void {\n this._clearAutoCloseTimeout();\n\n this._destroyPopperInstance();\n\n this._unsubscribeFromDomEvents();\n\n runInAction(() => {\n this.tooltipContainer = null;\n });\n }\n\n closeTooltip(): void {\n this._dispose();\n \n if(this.options.onTooltipClosed) {\n this.options.onTooltipClosed();\n }\n }\n\n}","import {TooltipBaseModel} from \"../tooltip-base/tooltip-base.model\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IRegularTooltipsContainer} from \"./regular-tooltips-container.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IRegularTooltipOptions} from \"./regular-tooltip-options.interface\";\nimport {makeObservable} from \"mobx\";\n\n\nexport class RegularTooltipModel extends TooltipBaseModel {\n\n constructor(tooltipsContainer: IRegularTooltipsContainer,\n services: IServiceFactoryExtended,\n options: IRegularTooltipOptions) {\n super(services, options);\n\n makeObservable(this);\n this.tooltipsContainer = tooltipsContainer;\n\n }\n\n readonly tooltipsContainer: IRegularTooltipsContainer;\n\n protected _getElementToAttach(): HTMLElement | null {\n if(Check.isString(this.options.attachTo)) {\n return this.services.dom.querySelector(this.options.attachTo) as HTMLElement;\n }\n\n return this.options.attachTo;\n }\n\n closeTooltip(): void {\n super.closeTooltip();\n this.tooltipsContainer.removeTooltip(this);\n }\n}\n\n\n\n","import {action, makeObservable, runInAction} from \"mobx\";\nimport {ITooltipViewModel} from \"../tooltip-base/tooltip-view-model.interface\";\nimport {ITooltipModel} from \"../tooltip-base/tooltip-model.interface\";\nimport {IRegularTooltipsContainer} from \"./regular-tooltips-container.interface\";\nimport {TooltipBaseService} from \"../tooltip-base.service\";\nimport {RegularTooltipModel} from \"./regular-tooltip.model\";\nimport {IRegularTooltipsService} from \"./regular-tooltips.service.interface\";\nimport {IRegularTooltipOptions} from \"./regular-tooltip-options.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nexport class RegularTooltipsService extends TooltipBaseService implements IRegularTooltipsService, IRegularTooltipsContainer {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n makeObservable(this);\n }\n\n removeTooltip(tooltip: ITooltipModel): void {\n const index = this.toolTips.findIndex(t => t.id === tooltip.id);\n if(index >= 0) {\n runInAction(() => {\n this.toolTips.splice(index, 1);\n });\n }\n }\n\n protected _setDefaultTooltipOptions(options: IRegularTooltipOptions): IRegularTooltipOptions {\n options = {\n showOverlay: true,\n showCloseButton: false,\n closeOnClickOutside: true,\n animated: true,\n ...options};\n\n return options;\n }\n\n @action.bound\n showTooltip(options: IRegularTooltipOptions): ITooltipViewModel {\n options = this._setDefaultTooltipOptions(options);\n const tooltipModel = new RegularTooltipModel(this, this.services, options);\n this.toolTips.push(tooltipModel);\n return tooltipModel;\n\n }\n}\n","import {action, observable, runInAction, makeObservable} from \"mobx\";\nimport {\n HistoryController_GetGameSessionHistoryRequest,\n HistoryController_GetHistoryRequest,\n} from \"../../../api/api.service\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IHistoryPaginatorViewModel} from \"./history-paginator-view-model.interface\";\nimport {IHistoryPageInfo, IHistoryServerResponseBase} from \"./history-server-response-base.interface\";\nimport {NextHistoryPageRequest} from \"../../gaming-history.service.interfce\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {IHistoryRecordViewModel} from \"../record/history-record-view-model.interface\";\nimport {GamesMap} from \"../../../games/games.service.interface\";\nimport {IRegulatedCompanyModel} from \"../../../companies/regulated-company-model.interface\";\nimport {Nullable} from \"../../../../../common/types/nullable-types\";\n\nexport abstract class HistoryPaginatorBaseModel,\n TRecordModel extends IHistoryRecordViewModel> implements IHistoryPaginatorViewModel {\n constructor(protected readonly services: IServiceFactoryExtended, private readonly pageSize: number) {\n makeObservable(this);\n this._migratedHistoryPaginator = this._createMigratedHistoryPaginator();\n }\n\n protected abstract _getNextPage(request: NextHistoryPageRequest): Promise;\n protected abstract _getGameTypeFromRecord(recordData: THistoryRecordData): number;\n protected abstract _getRoundIdFromRecord(recordData: THistoryRecordData): string;\n protected abstract _createRecordModel(gameInfo: GameInfo, company: IRegulatedCompanyModel, recordData: THistoryRecordData): TRecordModel;\n protected abstract _createMigratedHistoryPaginator(): IHistoryPaginatorViewModel;\n\n private readonly _migratedHistoryPaginator: Nullable;\n\n get daysIntervals(): number[] {\n return [30, 60, 90];\n }\n\n private _numberOfHistoryDays: number = 30;\n @action.bound\n setNumberOfHistoryDays(numberOfDays: number): void {\n if (numberOfDays === this._numberOfHistoryDays) {\n return;\n }\n this._migratedHistoryPaginator.setNumberOfHistoryDays(numberOfDays)\n this._numberOfHistoryDays = numberOfDays;\n this._resetPaging();\n this.loadNextPage();\n }\n\n @action.bound\n private _resetPaging(): void {\n this._records = [];\n this._pages = null;\n this._nextPageIndex = 0;\n }\n\n @observable.ref\n private _pages: IHistoryPageInfo[] | null = null;\n\n\n @observable.ref\n private _nextPageIndex = 0;\n\n\n get hasMoreSelfRecords(): boolean {\n if (!this._pages) {\n return true;\n }\n return this._nextPageIndex < this._pages.length;\n }\n\n get hasMoreRecords(): boolean {\n return this.hasMoreSelfRecords || this._migratedHistoryPaginator.hasMoreRecords\n }\n\n @observable.ref\n private _isLoading: boolean = false;\n get isLoading(): boolean {\n return this._isLoading || this._migratedHistoryPaginator.isLoading;\n }\n\n @action.bound\n private _setIsLoading(value: boolean): void {\n this._isLoading = value;\n }\n\n @observable.ref\n _records: IHistoryRecordViewModel[] = [];\n get records(): IHistoryRecordViewModel[] {\n return [\n ...this._records,\n ...this._migratedHistoryPaginator.records\n ]\n }\n\n private _createNextPageRequest(): HistoryController_GetHistoryRequest & HistoryController_GetGameSessionHistoryRequest {\n if (this._nextPageIndex === 0) {\n return {\n fromLastDays: this._numberOfHistoryDays,\n pageSize: this.pageSize,\n pageNumber: 1\n };\n }\n\n const nextPage = this._pages[this._nextPageIndex];\n return {\n fromLastDays: this._numberOfHistoryDays,\n pageNumber: this._nextPageIndex + 1,\n pageSize: this.pageSize,\n requestKey: nextPage.RequestKey,\n minDate: nextPage.MinDate,\n maxDate: nextPage.MaxDate\n };\n\n\n }\n\n\n\n private async _getGamesInfo(serverResponse: TServerResponse): Promise {\n const result: GamesMap = {};\n const notInLayoutGames: number[] = [];\n\n serverResponse.GameHistoryData.forEach(record => {\n const gameType = this._getGameTypeFromRecord(record);\n const gameInfo = this.services.games.gamesMap[gameType];\n if (gameInfo) {\n result[gameInfo.gameType] = gameInfo;\n } else {\n notInLayoutGames.push(gameType);\n }\n });\n\n if (notInLayoutGames.length > 0) {\n const gamesMap = await this.services.games.getGamesInfoForHistory(notInLayoutGames);\n Object.keys(gamesMap).forEach(gameType => {\n result[gameType] = gamesMap[gameType];\n });\n }\n\n return result;\n }\n\n\n\n async loadNextPage(): Promise {\n\n if (this.isLoading) {\n return;\n }\n\n /*\n if (!this.hasMoreSelfRecords) {\n if (this._migrationPaginator.hasMoreRecords) {\n await this._migrationPaginator.loadNextPage();\n return;\n }\n return;\n }\n */\n\n this._setIsLoading(true);\n\n try {\n const request = this._createNextPageRequest()\n const serverResponse = await this._getNextPage(request);\n const gamesMap = await this._getGamesInfo(serverResponse);\n\n const newRecords: TRecordModel[] = [];\n\n for (let recordData of serverResponse.GameHistoryData) {\n const gameType = this._getGameTypeFromRecord(recordData);\n const gameInfo = gamesMap[gameType];\n if (gameInfo) {\n const company = await (await this.services.companies).getRegulatedCompany(gameInfo.companyName);\n newRecords.push(this._createRecordModel(gameInfo, company, recordData));\n } else {\n this.services.logger.error(`Could not get game info for game type ${this._getRoundIdFromRecord(recordData)} in history!`);\n }\n }\n\n\n runInAction(() => {\n if (this._nextPageIndex === 0) {\n this._pages = serverResponse.PagingData;\n }\n this._records = [\n ...this.records,\n ...newRecords\n ];\n\n this._nextPageIndex++;\n });\n\n if(!this.hasMoreSelfRecords) {\n await this._migratedHistoryPaginator.loadNextPage();\n }\n\n } finally {\n this._setIsLoading(false);\n }\n }\n}","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {\n IHistoryRecordAmountViewModel, IHistoryRecordIdViewModel,\n IHistoryRecordViewModel\n} from \"./history-record-view-model.interface\";\nimport {IRegulatedCompanyModel} from \"../../../companies/regulated-company-model.interface\";\n\nexport abstract class HistoryRecordBaseModel implements IHistoryRecordViewModel {\n constructor(protected readonly services: IServiceFactoryExtended,\n protected readonly gameInfo: GameInfo,\n protected readonly company: IRegulatedCompanyModel,\n protected readonly recordData: TRawRecordData) {\n\n }\n\n abstract get date(): string;\n abstract get ids(): IHistoryRecordIdViewModel[];\n abstract get bigWinMessage(): string | null;\n abstract get amounts(): IHistoryRecordAmountViewModel[];\n abstract get freePlayMessage(): string | null;\n abstract get detailsHistoryNotAllowedOnCurrentPlatformMessage(): string | null;\n abstract openDetailHistory(): Promise;\n\n protected abstract _isDetailHistorySupported(): boolean;\n\n get gameName(): string {\n return this.gameInfo.title;\n }\n\n get gameImage(): string {\n return this.gameInfo.gameImageInHistoryPage;\n }\n\n get getGameImagePlaceHolderUrl(): string {\n return this.gameInfo.getGameImagePlaceHolderUrl(this.services.theme.shouldUseSquareIcons);\n }\n\n protected _formatValue(value: number): string {\n return this.services.currency.formatMoney(value);\n }\n\n protected get translation() {\n return this.services.translation;\n }\n\n get supportsDetailHistory(): boolean {\n return this._isDetailHistorySupported();\n }\n\n get canPlayGame(): boolean {\n return Boolean(this.services.games.gamesMap[this.gameInfo.gameType]);\n }\n\n async playGame(): Promise {\n if(!this.canPlayGame) {\n return;\n }\n await this.gameInfo.open({\n isRealMode: true,\n showIntermediatePage: false,\n });\n\n this.services.analytics.sendOrbitUserFlowEvent('Client_GamingHistory', 'open_game', this.gameInfo.title, this.gameInfo.gameType);\n\n }\n}","import {HistoryRecordBaseModel} from \"./history-record-base.model\";\nimport {GamingHistoryRecordRawData} from \"../../gaming-history.service.interfce\";\nimport {IHistoryRecordAmountViewModel, IHistoryRecordIdViewModel} from \"./history-record-view-model.interface\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {GameModeEnum} from \"../../../game-runner/interfaces/game-context/game-context-view-model.interface\";\n\nexport class UserGamingHistoryRecordModel extends HistoryRecordBaseModel {\n get date(): string {\n if(this.recordData.DateInTimeZone) {\n return this.services.time.formatHistoryRecordDateTime(this.recordData.DateInTimeZone, true);\n } else {\n return this.services.time.formatHistoryRecordDateTime(this.recordData.Date, false);\n }\n }\n\n get ids(): IHistoryRecordIdViewModel[] {\n if(this._gameSessionID && this._participationTicketID) {\n return [\n {\n text: this.translation.translate('GAME_SESSION_ID', {sessionID: this._gameSessionID}),\n cyClass: CyClass('cy-gaming-history-session-id')\n },\n {\n text: this.translation.translate('GAME_PARTICIPATION_ID', {participationID: this._participationTicketID}),\n cyClass: CyClass('cy-gaming-history-participation-id')\n }\n ]\n }\n return [\n {\n text: this.recordData.GameId,\n cyClass: CyClass('cy-gaming-history-round-id')\n }\n ];\n }\n\n protected _isDetailHistorySupported(): boolean {\n return this.recordData.IsSupportDetailedHistory\n && this._isDetailHistoryAllowedOnCurrentPlatform()\n && this.company.supportsHistoryMoreDetails(this.recordData);\n }\n\n get bigWinMessage(): string | null {\n if(!this.recordData.IsBigWin) {\n return null;\n }\n\n return this.translation.translate('GAMING_HISTORY_BIG_WIN_TAX_INDICATION')\n }\n\n private get _isFreePlayRound(): boolean {\n return !Check.isNullOrUndefined(this.recordData.FreePlayCurrentAmount)\n || !Check.isNullOrUndefined(this.recordData.FreePlayWinningAmount);\n }\n\n private _getRealMoneyAmounts(): IHistoryRecordAmountViewModel[] {\n return [\n {\n description: this.translation.translate('GAMING_HISTORY_BET'),\n value: this._formatValue(this.recordData.BetAmount),\n cyClass: CyClass('cy-gaming-history-bet-value')\n },\n {\n description: Check.isNullOrUndefined(this.recordData.OriginalWinningsAmount)\n ? this.translation.translate('GAMING_HISTORY_WINNINGS')\n : this.translation.translate('GAMING_HISTORY_WINNINGS_BONUS_CAP'),\n value: this._formatValue(this.recordData.ProfitAmount),\n cyClass: CyClass('cy-gaming-history-winning-value')\n },\n {\n description: this.translation.translate('GAMING_HISTORY_BANKROLL'),\n value: this._formatValue(this.recordData.AvailableMoneyPerOffering),\n cyClass: CyClass('cy-gaming-history-bankroll-value')\n }\n ];\n }\n\n private _getFreePlayAmounts(): IHistoryRecordAmountViewModel[] {\n const amounts = [\n {\n description: this.translation.translate('GAMING_HISTORY_FREE_PLAY_BET'),\n value: this._formatValue(this.recordData.BetAmount),\n cyClass: CyClass('cy-gaming-history-bet-value')\n },\n {\n description: this.translation.translate('GAMING_HISTORY_FREE_PLAY_WINNINGS'),\n value: this._formatValue(this.recordData.ProfitAmount),\n cyClass: CyClass('cy-gaming-history-winning-value')\n },\n {\n description: this.translation.translate('GAMING_HISTORY_FREE_PLAY_REWARD_WINNINGS'),\n value: this._formatValue(this.recordData.FreePlayWinningAmount),\n cyClass: CyClass('cy-gaming-history-free-play-winning')\n }\n ];\n\n if(!Check.isNullOrUndefined(this.recordData.FreePlayCurrentAmount)) {\n amounts.push({\n description: this.translation.translate('GAMING_HISTORY_FREE_PLAY_REWARD_BANKROLL'),\n value: this._formatValue(this.recordData.FreePlayCurrentAmount),\n cyClass: CyClass('cy-gaming-history-free-play-current-amount')\n });\n }\n\n return amounts;\n }\n\n get amounts(): IHistoryRecordAmountViewModel[] {\n if(this._isFreePlayRound) {\n return this._getFreePlayAmounts();\n } else {\n return this._getRealMoneyAmounts();\n }\n }\n\n get freePlayMessage(): string | null {\n if(this._isFreePlayRound) {\n return this.translation.translate('GAMING_HISTORY_FREE_PLAY_INDICATION')\n }\n\n return null;\n }\n\n private get _gameSessionID(): string | null {\n return this.recordData.AdditionalData?.AAMSGameSessionID || null\n }\n\n private get _participationTicketID(): string | null {\n return this.recordData.AdditionalData?.AAMSParticipationTicketID || null\n }\n\n private _isDetailHistoryAllowedOnCurrentPlatform(): boolean {\n switch (this.recordData.AllowedPlatformType?.toLowerCase()) {\n case 'all':\n return true;\n case 'mobile':\n return this.services.device.os.isMobileOS;\n case 'pc':\n return !this.services.device.os.isMobileOS;\n default:\n return false;\n }\n }\n\n get detailsHistoryNotAllowedOnCurrentPlatformMessage(): string | null {\n if(this._isDetailHistoryAllowedOnCurrentPlatform()) {\n return null;\n }\n\n if(this.services.device.os.isMobileOS) {\n return this.translation.translate('GAMING_HISTORY_MORE_DETAILS_NOT_AVAILABLE_MOBILE');\n } else {\n return this.translation.translate('GAMING_HISTORY_MORE_DETAILS_NOT_AVAILABLE_PC');\n }\n }\n\n async openDetailHistory(): Promise {\n if(!this.supportsDetailHistory) {\n return;\n }\n\n await (await this.services.gameRunner).openGame({\n gameMode: GameModeEnum.History,\n gameInfo: this.gameInfo,\n historyGameParams: {\n gameRoundId: this.recordData.GameId,\n gameRoundDate: this.recordData.Date,\n gameRoundDateInTimeZone: this.recordData.DateInTimeZone\n }\n });\n }\n}","import {MigratedGamingHistoryRecordRawData} from \"../../gaming-history.service.interfce\";\nimport {IHistoryRecordAmountViewModel, IHistoryRecordIdViewModel, IHistoryRecordViewModel} from \"./history-record-view-model.interface\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\nexport class MigratedGamingHistoryRecordModel implements IHistoryRecordViewModel {\n constructor(protected readonly services: IServiceFactoryExtended,\n protected readonly recordData: MigratedGamingHistoryRecordRawData) {\n\n }\n\n get date(): string {\n //return this.recordData.TimeSincePlay.toString() // this.services.time.formatHistoryRecordDateTime(this.recordData.TimeSincePlay, false);\n return this.services.time.formatHistoryRecordDateTime(this.recordData.Date, false);\n }\n\n get ids(): IHistoryRecordIdViewModel[] {\n return [\n {\n text: this.recordData.GameId,\n cyClass: CyClass('cy-migrated-gaming-history-round-id')\n }\n ];\n }\n\n \n get bigWinMessage(): string | null {\n return null;\n }\n\n private _getRealMoneyAmounts(): IHistoryRecordAmountViewModel[] {\n return [\n {\n description: this.translation.translate('GAMING_HISTORY_BET'),\n value: this._formatValue(this.recordData.BetAmount),\n cyClass: CyClass('cy-gaming-history-bet-value')\n },\n {\n description: this.translation.translate('GAMING_HISTORY_WINNINGS'),\n value: this._formatValue(this.recordData.ProfitAmount),\n cyClass: CyClass('cy-gaming-history-winning-value')\n },\n {\n description: this.translation.translate('GAMING_HISTORY_BANKROLL'),\n value: this._formatValue(this.recordData.AvailableMoneyPerOffering),\n cyClass: CyClass('cy-gaming-history-bankroll-value')\n }\n ];\n }\n\n get amounts(): IHistoryRecordAmountViewModel[] {\n return this._getRealMoneyAmounts();\n }\n \n get freePlayMessage(): string | null {\n return null;\n }\n\n get detailsHistoryNotAllowedOnCurrentPlatformMessage(): string | null {\n return null;\n }\n\n get gameName(): string {\n return this.recordData.GameName;\n }\n\n get gameImage(): string {\n return \"\";\n }\n\n get getGameImagePlaceHolderUrl(): string {\n if (this.services.theme.shouldUseSquareIcons) {\n return this.services.theme.currentTheme.images.gameIconPlaceHolderSq.toString();\n }\n return this.services.theme.currentTheme.images.gameIconPlaceHolder.toString();\n }\n\n get supportsDetailHistory(): boolean {\n return false;\n }\n\n async openDetailHistory(): Promise {\n \n }\n\n private _formatValue(value: number): string {\n return this.services.currency.formatMoney(value);\n }\n\n private get translation() {\n return this.services.translation;\n }\n}","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IHistoryPaginatorViewModel} from \"./history-paginator-view-model.interface\";\nimport {action, observable, makeObservable, runInAction} from \"mobx\";\nimport {IHistoryRecordViewModel} from \"../record/history-record-view-model.interface\";\nimport {HistoryController_GetMigratedHistoryRequest} from \"../../../api/api.service\";\nimport {MigratedGamingHistoryRecordRawData} from \"../../gaming-history.service.interfce\";\nimport {MigratedGamingHistoryRecordModel} from \"../record/migrated-gaming-history-record.model\";\n\nexport class MigratedGamingHistoryPaginatorModel implements IHistoryPaginatorViewModel {\n\n constructor(protected readonly services: IServiceFactoryExtended) {\n makeObservable(this);\n }\n\n get daysIntervals(): number[] {\n return [30, 60, 90];\n }\n\n private _numberOfHistoryDays: number = 30;\n @action.bound\n setNumberOfHistoryDays(numberOfDays: number): void {\n this._numberOfHistoryDays = numberOfDays;\n this.records = []\n this._hasMoreRecords = true;\n this.isLoading = false\n }\n\n @observable.ref\n isLoading: boolean = false;\n\n @action.bound\n private _setIsLoading(value: boolean): void {\n this.isLoading = value;\n }\n\n @observable.ref\n private _hasMoreRecords: boolean = true;\n get hasMoreRecords(): boolean {\n return this._hasMoreRecords;\n }\n\n @observable.ref\n records: IHistoryRecordViewModel[] = [];\n\n async loadNextPage(): Promise {\n if (this.isLoading) {\n return;\n }\n\n this._setIsLoading(true);\n\n const newRecords: IHistoryRecordViewModel[] = [];\n\n try {\n const serverResponse = await this.services.api.historyController.getMigratedHistory(this._createMigratedRequest());\n\n for (let recordData of serverResponse.GameHistoryData) {\n newRecords.push(this._createRecordModel(recordData));\n }\n\n runInAction(() => {\n this.records = [\n ...this.records,\n ...newRecords\n ];\n });\n } catch (err) {\n this.services.logger.error(`Failed to retrieve migrated history`, err);\n } finally {\n runInAction(() =>\n this._hasMoreRecords = false\n )\n this._setIsLoading(false);\n }\n }\n\n private _createMigratedRequest(): HistoryController_GetMigratedHistoryRequest {\n return {\n offset: 1,\n limit: 1,\n fromLastDays: this._numberOfHistoryDays,\n };\n }\n\n protected _createRecordModel(recordData: MigratedGamingHistoryRecordRawData): IHistoryRecordViewModel {\n return new MigratedGamingHistoryRecordModel(this.services, recordData);\n }\n}","import {IHistoryRecordViewModel} from \"../record/history-record-view-model.interface\";\nimport {IHistoryPaginatorViewModel} from \"./history-paginator-view-model.interface\";\n\nexport class VoidGamingHistoryPaginatorModel implements IHistoryPaginatorViewModel {\n\n get daysIntervals(): number[] \n {\n return [];\n }\n\n setNumberOfHistoryDays(numberOfDays: number): void {}\n get isLoading(): boolean {\n return false;\n }\n get hasMoreRecords(): boolean {\n return false;\n }\n get records(): IHistoryRecordViewModel[] {\n return []\n }\n async loadNextPage(): Promise {\n }\n}","import {HistoryPaginatorBaseModel} from \"./history-paginator-base.model\";\nimport {HistoryController_GetHistoryResponse} from \"../../../api/api.service\";\nimport {GamingHistoryRecordRawData, NextHistoryPageRequest} from \"../../gaming-history.service.interfce\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {UserGamingHistoryRecordModel} from \"../record/user-gaming-history-record.model\";\nimport {IRegulatedCompanyModel} from \"../../../companies/regulated-company-model.interface\";\nimport {IHistoryPaginatorViewModel} from \"./history-paginator-view-model.interface\";\nimport {MigratedGamingHistoryPaginatorModel} from \"./migrated-gaming-history-paginator.model\";\nimport {VoidGamingHistoryPaginatorModel} from \"./void-gaming-history-paginator.model\";\n\nexport class UserGamingHistoryPaginatorModel extends HistoryPaginatorBaseModel {\n\n\n\n protected async _getNextPage(request: NextHistoryPageRequest): Promise {\n return await this.services.api.historyController.getHistory(request);\n }\n protected _getGameTypeFromRecord(record: GamingHistoryRecordRawData): number {\n return record.GameTypeId;\n }\n protected _createRecordModel(gameInfo: GameInfo, company: IRegulatedCompanyModel, recordData: GamingHistoryRecordRawData): UserGamingHistoryRecordModel {\n return new UserGamingHistoryRecordModel(this.services, gameInfo, company, recordData)\n }\n\n protected _getRoundIdFromRecord(recordData: GamingHistoryRecordRawData): string {\n return recordData.GameId;\n }\n\n protected _createMigratedHistoryPaginator(): IHistoryPaginatorViewModel {\n if (this.services.configuration.servicesConfigs.MigratedHistory.enableGamingHistoryMigration) {\n return new MigratedGamingHistoryPaginatorModel(this.services);\n }\n return new VoidGamingHistoryPaginatorModel();\n }\n}","import {HistoryRecordBaseModel} from \"./history-record-base.model\";\nimport {SessionHistoryRecordRawData} from \"../../gaming-history.service.interfce\";\nimport {\n IHistoryRecordAmountViewModel,\n IHistoryRecordIdViewModel\n} from \"./history-record-view-model.interface\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nexport class SessionGamingHistoryRecordModel extends HistoryRecordBaseModel {\n get amounts(): IHistoryRecordAmountViewModel[] {\n return [\n {\n description: this.translation.translate('HISTORY_GAME_SESSION_TOTAL_BETS'),\n value: this._formatValue(this.recordData.TotalBets),\n cyClass: CyClass('cy-gaming-history-bet-value')\n },\n {\n description: this.translation.translate('HISTORY_GAME_SESSION_TOTAL_WINNINGS'),\n value: this._formatValue(this.recordData.TotalWins),\n cyClass: CyClass('cy-gaming-history-winning-value')\n },\n {\n description: this.translation.translate('HISTORY_GAME_SESSION_BALANCE'),\n value: this._formatValue(this.recordData.SessionBalance),\n cyClass: CyClass('cy-gaming-history-bankroll-value')\n }\n ];\n }\n\n get bigWinMessage(): string | null {\n return null;\n }\n\n get date(): string {\n return this.services.time.formatHistoryRecordDateTime(this.recordData.SessionEndDateTime, false);\n }\n\n get freePlayMessage(): string | null {\n return null;\n }\n\n get ids(): IHistoryRecordIdViewModel[] {\n return [\n {\n text: this.recordData.GameSessionId,\n cyClass: CyClass('cy-gaming-history-session-id')\n }\n ];\n }\n\n protected _isDetailHistorySupported(): boolean {\n return false;\n }\n\n get detailsHistoryNotAllowedOnCurrentPlatformMessage(): string | null {\n return null;\n }\n\n async openDetailHistory(): Promise {\n // for session history details history is not allowed so nothing to do there\n }\n}","import {HistoryPaginatorBaseModel} from \"./history-paginator-base.model\";\nimport {NextHistoryPageRequest, SessionHistoryRecordRawData} from \"../../gaming-history.service.interfce\";\nimport {\n HistoryController_GetGameSessionHistoryResponse\n} from \"../../../api/api.service\";\nimport {SessionGamingHistoryRecordModel} from \"../record/session-gaming-history-record.model\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {IRegulatedCompanyModel} from \"../../../companies/regulated-company-model.interface\";\nimport {IHistoryPaginatorViewModel} from \"./history-paginator-view-model.interface\";\nimport {VoidGamingHistoryPaginatorModel} from \"./void-gaming-history-paginator.model\";\n\n\nexport class SessionGamingHistoryPaginatorModel extends HistoryPaginatorBaseModel {\n protected _createRecordModel(gameInfo: GameInfo, company: IRegulatedCompanyModel, recordData: SessionHistoryRecordRawData): SessionGamingHistoryRecordModel {\n return new SessionGamingHistoryRecordModel(this.services, gameInfo, company, recordData);\n }\n\n protected _getGameTypeFromRecord(recordData: SessionHistoryRecordRawData): number {\n return recordData.GameTypeId;\n }\n\n\n protected async _getNextPage(request: NextHistoryPageRequest): Promise {\n return await this.services.api.historyController.getGameSessionHistory(request);\n }\n\n protected _getRoundIdFromRecord(recordData: SessionHistoryRecordRawData): string {\n return recordData.GameSessionId;\n }\n\n protected _createMigratedHistoryPaginator(): IHistoryPaginatorViewModel {\n return new VoidGamingHistoryPaginatorModel();\n }\n}","import {\n IGamingHistoryService\n} from \"./gaming-history.service.interfce\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IHistoryPaginatorViewModel} from \"./models/paginator/history-paginator-view-model.interface\";\nimport {UserGamingHistoryPaginatorModel} from \"./models/paginator/user-gaming-history-paginator.model\";\nimport {GamingHistoryType} from \"./gaming-history-type\";\nimport {SessionGamingHistoryPaginatorModel} from \"./models/paginator/session-gaming-history-paginator.model\";\n\nexport class GamingHistoryService extends ServiceBase implements IGamingHistoryService {\n\n getGamingHistory(historyType: GamingHistoryType, maxPageSize: number = 50): IHistoryPaginatorViewModel {\n switch (historyType) {\n case GamingHistoryType.SessionHistory:\n return new SessionGamingHistoryPaginatorModel(this.services, maxPageSize);\n default:\n return new UserGamingHistoryPaginatorModel(this.services, maxPageSize);\n }\n }\n}\n\n","import { IServiceFactoryExtended } from '../service-factory-extended.interface';\nimport { ServiceBase } from '../ServiceBase';\nimport { IBecauseYouPlayedService } from './because-you-played.service.interface';\nimport { observable, action, makeObservable } from 'mobx';\nimport {GameInfo} from '../games/game-info';\nimport {Check} from \"@sparkware/app-utils\";\nimport {NullableUndefinedNumber} from \"../../../common/types/nullable-types\";\nimport {ALL_ARENAS} from '../arenas/arena-consts';\n\nconst BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY = \"because_you_played_last_played_real_game\";\n\ninterface ILastPlayedGames {\n lastPlayedGame?: number; //last played game in general\n lastPlayedGameByArena: Record; // key is arena name, value last played gameType on that arena\n}\n\n\nexport class BecauseYouPlayedService extends ServiceBase implements IBecauseYouPlayedService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._lastPlayedGames = this._getLastPlayedGamesFromLocalStorage();\n if(!this._lastPlayedGames.lastPlayedGameByArena) {\n this._lastPlayedGames.lastPlayedGameByArena = this._createDefaultPlayedGameByArenaObject();\n }\n\n this.services.gameRunner.then(gameRunner => {\n this.reaction(() => { return {\n lastPlayedRealGame: gameRunner.lastPlayedGame.lastPlayedRealGame,\n } },\n async (data) => {\n if (this.services.user.isAuthorized) {\n if (data.lastPlayedRealGame) {\n this._setLastPlayedGame(data.lastPlayedRealGame);\n await this._updateCurrentBecauseYouPlayedGames();\n }\n }\n }\n );\n })\n\n\n\n this.reaction(() => this.services.routing.currentRoute, \n async () => {\n await this._updateCurrentBecauseYouPlayedGames();\n }, {\n fireImmediately: true\n }\n );\n }\n\n _createDefaultPlayedGameByArenaObject(): Record {\n return ALL_ARENAS.reduce((accumulator, currentValue) => {\n accumulator[currentValue] = 0;\n return accumulator;\n }, {});\n }\n\n private _getLastPlayedGamesFromLocalStorage(): ILastPlayedGames {\n const lastPlayedGameType = parseInt(this.services.localStorage.getItem(BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY));\n if(Check.isNumber(lastPlayedGameType)) {\n //This is for backward compatibility. Initially in local storage under the key BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY there was only a game type\n return {\n lastPlayedGame: lastPlayedGameType,\n lastPlayedGameByArena: this._createDefaultPlayedGameByArenaObject()\n };\n } else {\n return this.services.localStorage.getJson(BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY) || this._createEmptyLastPlayedGamesList();\n }\n }\n\n private _lastPlayedGames: ILastPlayedGames;\n\n private _setLastPlayedGame(gameInfo: GameInfo): void {\n Object.keys(this._lastPlayedGames.lastPlayedGameByArena).forEach(arenaName => {\n const arena = this.services.arenas.getArena(arenaName);\n if (0 < arena.filterGamesByArenaType([gameInfo]).length) {\n this._lastPlayedGames.lastPlayedGameByArena[arenaName] = gameInfo.gameType;\n }\n });\n\n const currentArena = this.services.arenas.getCurrentArena();\n this._lastPlayedGames.lastPlayedGameByArena[currentArena.arenaName] = gameInfo.gameType;\n this._lastPlayedGames.lastPlayedGame = gameInfo.gameType;\n\n\n this.services.localStorage.setJson(BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY, this._lastPlayedGames);\n }\n\n private _createEmptyLastPlayedGamesList(): ILastPlayedGames {\n return {\n lastPlayedGameByArena: this._createDefaultPlayedGameByArenaObject()\n };\n }\n\n @observable.ref\n currentBecauseYouPlayedGames: GameInfo[] = [];\n\n @action.bound\n private _setCurrentBecauseYouPlayedGames(gamesInfo: GameInfo[]): void {\n this.currentBecauseYouPlayedGames = gamesInfo;\n }\n\n private _getLastPlayedGameTypeForArena(arenaName: string): NullableUndefinedNumber {\n let lastGamePlayedGameTypeForArena = this._lastPlayedGames.lastPlayedGameByArena[arenaName];\n\n if(lastGamePlayedGameTypeForArena) {\n return lastGamePlayedGameTypeForArena;\n }\n\n return this._lastPlayedGames.lastPlayedGame;\n }\n\n private async _updateCurrentBecauseYouPlayedGames(): Promise {\n const currentArena = this.services.arenas.getCurrentArena();\n\n let lastGamePlayedForCurrentArena = this._getLastPlayedGameTypeForArena(currentArena.arenaName);\n\n //reset data first since we are currently changed the route, some data can be seen from previous route\n this._setCurrentBecauseYouPlayedGames([]);\n\n if(!lastGamePlayedForCurrentArena) {\n return;\n }\n\n const correlatedGames = await this.services.games.getCorrelatedGames(lastGamePlayedForCurrentArena, 50);\n let gamesInfo = (await this.services.games.getGamesInfoArray([lastGamePlayedForCurrentArena, ...correlatedGames])) || [];\n gamesInfo = currentArena.filterGamesByArenaType(gamesInfo);\n\n if (gamesInfo.length > 1 && gamesInfo.find(g => g.gameType === lastGamePlayedForCurrentArena)) {\n this._setCurrentBecauseYouPlayedGames(gamesInfo);\n }\n }\n}\n","import {Check} from \"@sparkware/app-utils\";\n\nexport class VersionNumber {\n constructor(public readonly major: number, public readonly minor: number, public readonly revision: number) {\n }\n\n static tryParse(version: string): VersionNumber | null {\n if(!version) {\n return null;\n }\n\n const parts = version.split('.');\n if(parts.length !== 3) {\n return null;\n }\n\n const major = parseInt(parts[0]);\n if(!Check.isNumber(major)) {\n return null;\n }\n\n const minor = parseInt(parts[1]);\n if(!Check.isNumber(minor)) {\n return null;\n }\n\n const revision = parseInt(parts[2]);\n if(!Check.isNumber(revision)) {\n return null;\n }\n\n return new VersionNumber(major, minor, revision);\n }\n\n toString(): string {\n return `${this.major}.${this.minor}.${this.revision}`;\n }\n\n static parse(version: string): VersionNumber {\n const v = VersionNumber.tryParse(version);\n if(v) {\n return v;\n }\n\n throw new Error(`Invalid version number ${version}`)\n }\n\n equals(otherVersion: VersionNumber): boolean {\n if(!otherVersion) {\n return false;\n }\n\n return this.major === otherVersion.major && this.minor === otherVersion.minor && this.revision === otherVersion.revision;\n }\n\n isSmallerThan(otherVersion: VersionNumber): boolean {\n if(!otherVersion) {\n return false;\n }\n\n if(this.major < otherVersion.major) {\n return true;\n } else if(this.major > otherVersion.major) {\n return false;\n }\n\n if(this.minor < otherVersion.minor) {\n return true;\n } else if(this.minor > otherVersion.minor) {\n return false;\n }\n\n if(this.revision < otherVersion.revision) {\n return true;\n } else {\n return false;\n }\n }\n\n isGreaterThan(otherVersion: VersionNumber): boolean {\n return !this.isSmallerThan(otherVersion);\n }\n\n\n}","import {\n IExecuteWaitForHybridGameStepOptions,\n IHybridTouchIdFeature,\n IMarketingObject, IOrbitHybridService,\n NyxHybridParams\n} from \"./hybrid.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {Nullable, NullableUndefinedString} from \"../../../common/types/nullable-types\";\nimport {VersionNumber} from \"../../../utils/version-number\";\nimport {Check} from \"@sparkware/app-utils\";\n\n\nexport class HybridService extends ServiceBase implements IOrbitHybridService {\n prepareGameUrl(gameType: number, gameUrl: string, pathname: string = ''): string {\n return this.services.sdk.hybrid.prepareGameUrl(gameType, gameUrl, pathname);\n }\n\n getCompiledGameVersion(gameType: number): NullableUndefinedString {\n return this.services.sdk.hybrid.getCompiledGameVersion(gameType);\n }\n\n async executeWaitForHybridGameStep(options: IExecuteWaitForHybridGameStepOptions): Promise {\n await this.services.sdk.hybrid.executeWaitForHybridGameStep(options);\n }\n\n navigateToOnDemandStandalone(gameType: number, companyName: string, url: string): boolean {\n return this.services.sdk.hybrid.navigateToOnDemandStandalone(gameType, companyName, url);\n }\n isNativeSupportSecondWebView(): boolean {\n return this.services.sdk.hybrid.isNativeSupportSecondWebView();\n }\n\n isOnDemandHtmlGame(gameType: number): boolean {\n return this.services.sdk.hybrid.isOnDemandHtmlGame(gameType);\n }\n\n isOnDemandStandalone(gameType: number, companyName: string): boolean {\n return this.services.sdk.hybrid.isOnDemandStandalone(gameType, companyName);\n }\n\n getOnDemandOrigin(): string {\n return this.services.sdk.hybrid.getOnDemandOrigin();\n }\n\n isSchemeSupported() : boolean {\n return this.services.sdk.hybrid.isSchemeSupported()\n }\n\n isLocalGameLauncherSupported() : boolean {\n return this.services.sdk.hybrid.isLocalGameLauncherSupported()\n }\n\n setGamescheme(gameschcme: string){\n this.services.sdk.hybrid.setGamescheme(gameschcme);\n }\n\n showAlert(message: string): void {\n this.services.sdk.eventsTrigger.showHybridAlert(message);\n }\n\n openExternalLink(url: string): void {\n this.services.sdk.hybrid.openExternalLink(url);\n }\n\n isNyxIframeSupported(): boolean {\n return this.services.sdk.hybrid.isNyxIframeSupported();\n }\n\n getNyxLocalHostUrl(params: NyxHybridParams, gameType:string): Promise {\n return this.services.sdk.hybrid.getNyxLocalHostUrl(params, gameType);\n }\n\n closeSecondWebView(): void {\n return this.services.sdk.hybrid.closeSecondWebView();\n }\n\n getInfoForDisplay(): Promise {\n return this.services.sdk.hybrid.getInfoForDisplay();\n }\n\n openMail(body: string): void {\n this.services.sdk.hybrid.openMail(body);\n }\n\n getTouchIDFeaturer(): IHybridTouchIdFeature {\n return this.services.sdk.hybrid.getTouchIDFeaturer();\n }\n\n isDeviceTouchEnable(): Promise {\n return this.services.sdk.hybrid.isDeviceTouchEnable();\n }\n\n isOpenSettingSupported(): Promise {\n return this.services.sdk.hybrid.isOpenSettingSupported();\n }\n openTouchIdSettings(): Promise {\n return this.services.sdk.hybrid.openTouchIdSettings();\n }\n\n isDebugMode(): boolean {\n return this.services.sdk.hybrid.isDebugMode();\n }\n\n clearToken(): void {\n return this.services.sdk.hybrid.clearToken();\n }\n\n async displayWebView(timeout: number): Promise {\n await this.services.sdk.hybrid.displayWebView(timeout);\n }\n\n getAppMareketingData(): IMarketingObject {\n return this.services.sdk.hybrid.getAppMareketingData();\n }\n async getLexisNexisSession(marketingData: any): Promise {\n return await this.services.sdk.hybrid.getLexisNexisSession(marketingData);\n }\n\n getAFInstall(): string {\n return this.services.sdk.hybrid.getAFInstall();\n }\n\n getAppVersion(): Nullable {\n\n let versionString = this.services.sdk.hybrid.getVersion()?.toString();\n if(Check.isEmpty(versionString)) {\n return null;\n }\n\n versionString = versionString.split('-')[0];\n\n return VersionNumber.tryParse(versionString);\n }\n}","import { Check } from '@sparkware/app-utils';\nimport { IServiceFactoryExtended } from '../../../service-factory-extended.interface';\nimport { observable, action, makeObservable } from 'mobx';\nimport { IVideoPlayer, ILogType, IBufferingTime, IBitrateStats, IFramesDropStats } from '../video-player.interface';\nimport { OrbitMarketingEventAnalyticsLabel } from \"../../../analytics/analytics.service.interface\";\n\nconst DROP_FRAMES_THRESHOLD: number = 0.2;\n\nexport class StaticVideoPlayer implements IVideoPlayer {\n\n private _gameType: number;\n private _videoReference: HTMLVideoElement;\n private _streamSource: string;\n\n private _playerType: string;\n\n private _bufferingStartTime: number;\n private _firstLoadTimeLogged: boolean = false;\n private _isFirstTimePlay: boolean = true;\n private _bufferingTimeValues: number[] = [];\n private _hadPlayStarted: boolean = false;\n private _isVisible: boolean = false;\n\n @observable.ref\n hasError: boolean = false;\n\n @action.bound\n _setHasError(value:boolean): void {\n this.hasError = value;\n }\n\n @observable.ref\n isLoading: boolean = false;\n @action.bound\n _setIsLoading(value:boolean): void {\n this.isLoading = value;\n }\n\n watchTimeLimitReached: boolean = false;\n\n @observable.ref\n autoplayAllowed: boolean = true;\n\n @action.bound\n _setAutoplayAllowed(value:boolean): void {\n this.autoplayAllowed = value;\n }\n\n constructor(playerType:string, gameType:number, videoReference: HTMLVideoElement, streamSource:string, posterImage: string | null,\n private readonly _services: IServiceFactoryExtended, private readonly _dontAutoSwipe?: boolean) {\n makeObservable(this);\n\n this._playerType = playerType;\n this._videoReference = videoReference;\n this._streamSource = streamSource;\n\n this._gameType = gameType;\n\n window.addEventListener('offline', this._onGoingOffline);\n // this._videoReference.addEventListener('waiting', this._onWaiting);\n this._videoReference.addEventListener('playing', this._onPlaying);\n this._videoReference.addEventListener('canplay', this._onCanPlay);\n this._videoReference.addEventListener('error', this._onError);\n this._videoReference.addEventListener('ended', this._onEnded);\n if (posterImage) {\n this._videoReference.poster = posterImage;\n }\n\n //this._videoReference.loop = true;\n }\n\n private _onEnded = () => {\n if (this._dontAutoSwipe) {\n return;\n }\n this._services.staticVideoPlaying.getSwiperHandler()?.moveNext({\n moveOnVideoFinished: true\n });\n };\n\n get videoReference(): HTMLVideoElement {\n return this._videoReference;\n }\n\n get streamSource(): string {\n return this._streamSource;\n }\n\n // get posterImageLoadPromise(): Promise | null {\n // return this._posterImageLoadPromise;\n // }\n\n play() {\n\n if (Check.isEmpty(this.videoReference.src) || this.videoReference.src !== this.streamSource) {\n this.videoReference.src = this.streamSource;\n }\n\n this._isVisible = true;\n this._bufferingStartTime = performance.now();\n this._videoReference.play()\n .then(() => {\n this._setAutoplayAllowed(true);\n })\n .catch(error => {\n if (error.name === 'NotAllowedError') {\n // error triggered when autoplay of video is not allowed\n this._onAutoplayError();\n } else {\n this._onError(error);\n }\n });\n if (this._isFirstTimePlay) {\n this._isFirstTimePlay = false;\n this._log('info', 'play');\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'IN_VIEW', OrbitMarketingEventAnalyticsLabel.VideoPlayback, this._gameType.toString());\n }\n }\n\n pause() {\n this._isVisible = false;\n\n // we can pause the video only if had ever started playing. A pause before first time play will cause in an error\n // play() request was interrupted by a call to pause()\n if (this._hadPlayStarted) {\n this._videoReference.pause();\n }\n\n this._logAverageBufferingTimeOnPause();\n }\n\n load() {\n this._videoReference.load();\n }\n\n handleError(error: any) {\n this._onError(error);\n }\n\n destroy() {\n window.removeEventListener('offline', this._onGoingOffline);\n this._videoReference.removeEventListener('waiting', this._onWaiting);\n this._videoReference.removeEventListener('playing', this._onPlaying);\n this._videoReference.removeEventListener('canplay', this._onCanPlay);\n this._videoReference.removeEventListener('error', this._onError);\n }\n\n logUIAction(type: ILogType, action: string) {\n this._log(type, action);\n }\n\n protected _onWaiting = () => {\n // Occurs when playback stops because the next frame of a video resource is not available.\n // Example: video had played everything that was loaded and cannot play further until the next sequence is loaded\n if (this.autoplayAllowed) {\n // For some reason, the waiting event is dispatched after catching the 'NotAllowedError'\n // The following code related to loading should execute only when we have a real waiting to load,\n // so only when the playback can start\n this._bufferingStartTime = performance.now();\n this._setIsLoading(true);\n }\n }\n\n protected _onPlaying = () => {\n // Occurs when the video playback is first started or when the playback resumes.\n this._hadPlayStarted = true;\n this._logFirstLoadTimeUntilPlay();\n this._setIsLoading(false);\n\n if (!this._isVisible) {\n this.pause();\n }\n }\n\n private _getGACategory = (): string => {\n return this._services.staticVideoPlaying.gaCategory;\n }\n\n private _onCanPlay = () => {\n // Occurs when the video playback resumes.\n // Example: if video was previously paused due to a waiting event, this will let us know that the next sequence is loaded\n // and the video will play further on\n // NOTE: usually the 'playing' event is triggered in the same conditions, but on iOS devices is not so we cannot base on 'playing' event\n // Example: on iOS devices, even if the video is playing, if you press unmute for the first time, a waiting event will be triggered, without\n // having also a 'playing' event trigger. Related bug: #1755199\n this._bufferingTimeValues.push(performance.now() - this._bufferingStartTime);\n this._setIsLoading(false);\n }\n\n private _onError = (err: ErrorEvent) => {\n this._setHasError(true);\n console.error('Live stream error', err);\n this._log('error', 'VideoStreamError');\n }\n\n private _onAutoplayError = () => {\n this._setAutoplayAllowed(false);\n this._setIsLoading(false);\n this._log('info', 'AutoplayNotAllowed');;\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'AUTOPLAY', OrbitMarketingEventAnalyticsLabel.Error, this._gameType.toString());\n }\n\n private _onGoingOffline = () => {\n this._setHasError(true);\n }\n\n private _getBufferAverageTime(): number {\n return this._bufferingTimeValues.reduce((prevValue, currentValue) => {\n return prevValue + currentValue\n }, 0);\n }\n\n private _logAverageBufferingTimeOnPause() {\n const totalBufferTime = this._getBufferAverageTime();\n const customData: IBufferingTime = {\n time: totalBufferTime / this._bufferingTimeValues.length\n };\n\n this._log('info', 'AvgBufferingTime', customData);\n }\n\n private _logAverageBufferingTimeOnEnd() {\n const totalBufferTime = this._getBufferAverageTime();\n const customData: IBufferingTime = {\n time: totalBufferTime / this._bufferingTimeValues.length,\n occurrence: this._bufferingTimeValues.length\n };\n\n this._log('info', 'AvgBufferingData', customData);\n }\n\n private _logFirstLoadTimeUntilPlay() {\n if (!this._firstLoadTimeLogged) {\n const firstLoadTime = performance.now() - this._bufferingStartTime;\n const loadTime: IBufferingTime = {\n time: firstLoadTime\n }\n this._firstLoadTimeLogged = true;\n this._log('info', 'FirstLoad', loadTime);\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'PLAY', OrbitMarketingEventAnalyticsLabel.VideoPlayback, this._gameType.toString());\n }\n }\n\n protected _checkDroppedFPS(droppedFrames: number, decodedFrames: number) {\n if (!this._videoReference.paused) {\n // when video is paused, we do not care about video frames\n // since on paused no frame is rendered\n\n const droppedFramesRatio = droppedFrames/decodedFrames;\n if (droppedFramesRatio > DROP_FRAMES_THRESHOLD) {\n // when dropped frames ratio is greater than the threshold we control\n // we want to log it to Elastic\n\n const framesDropData: IFramesDropStats = {\n droppedFrames: droppedFrames,\n totalFrames: decodedFrames\n }\n this._log('info', 'FpsDrop', framesDropData);\n }\n }\n }\n\n protected _log(type: ILogType, action: string, customData: IBufferingTime | IBitrateStats | IFramesDropStats = null) {\n let structuredLoger = this._services.sdk.structuredLoggingService\n .getLogger()\n .addCategory(this._getGACategory())\n .addAction(action)\n .addLabel(this._playerType)\n .addValue(this._gameType.toString());\n\n if (!Check.isNullOrUndefined(customData)) {\n structuredLoger.addCustomData(customData);\n }\n\n switch (type) {\n case 'error':\n structuredLoger.error();\n break;\n case 'info':\n default:\n structuredLoger.info();\n break;\n }\n }\n}\n","import {VideoPlayingServiceBase} from \"./video-playing-service-base\";\nimport {GameInfo} from \"../games/game-info\";\nimport {IVideoPlayer} from \"./video-players/video-player.interface\";\nimport {StaticVideoPlayer} from \"./video-players/static-video-player/static-video-player\";\n\nexport class StaticVideoPlayingService extends VideoPlayingServiceBase {\n\n public gaCategory = \"VIDEO-LIST\";\n\n protected _checkIfSupported() {\n return true;\n }\n\n getVideoPlayer(gameInfo: GameInfo, videoReference: HTMLVideoElement, dontAutoSwipe?: boolean): IVideoPlayer {\n\n const gameType = gameInfo.gameType;\n\n const streamSource = gameInfo.videoURL;\n const posterImage = gameInfo.videoThumbnailUrl;\n\n // Maybe add check like in live stream player: if ! player.supported, return null.\n return new StaticVideoPlayer('StaticVideoPlayer', gameType, videoReference, streamSource, posterImage, this.services, dontAutoSwipe);\n\n }\n}\n","\nimport {StorageServiceBase} from \"./storage-service-base\";\nimport {ILoggerService} from \"../logger/logger.service.interface\";\n\nexport class SessionStorageService extends StorageServiceBase {\n constructor(logger: ILoggerService) {\n super(sessionStorage, logger);\n }\n}","import {ICookiesService} from \"./cookies.service.interface\";\n\nexport class CookiesService implements ICookiesService {\n constructor() {\n const now = new Date();\n now.setFullYear(now.getFullYear() + 1);\n const expirationDate = now.toUTCString();\n document.cookie = 'lastproduct=casino;expires=' + expirationDate + ';path=/';\n }\n\n createCookie(name: string, value: string, expiration_date?:Date): void {\n let expirationDate;\n if (expiration_date) {\n expirationDate = expiration_date.toUTCString()\n } else {\n let now = new Date();\n now.setFullYear(now.getFullYear() + 1);\n expirationDate = now.toUTCString();\n }\n document.cookie = name + '=' + value + ';expires=' + expirationDate+ ';path=/';\n }\n\n createDomainCookie(name: string, value: string): void {\n let now = new Date();\n now.setFullYear(now.getFullYear() + 1);\n document.cookie = name + '=' + value + ';domain=.888casino.com;expires=' + now.toUTCString() + ';path=/';\n }\n\n getCookie(name: string) {\n let match = document.cookie.match(new RegExp(name + '=([^;]+)'));\n if (match) {\n return match[1];\n }\n }\n\n removeCookie(name: string): void {\n document.cookie = name + \"=;expires=Thu, 01 Jan 1970 00:00:00 UTC;domain=.888casino.com;\";\n }\n}","import {IFreePlayGameViewModel} from \"./free-play-game-view-model.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {IFreePlayVoucherModel} from \"../vouchers/free-play-voucher.model.interface\";\n\nexport class FreePlayGameModel implements IFreePlayGameViewModel {\n constructor(private readonly voucher: IFreePlayVoucherModel,\n public readonly gameInfo: GameInfo) {\n }\n\n async play(): Promise {\n\n await this.gameInfo.open({\n isRealMode: true,\n freePlayParams: {\n freePlayId: this.voucher.id,\n freePlayType: this.voucher.freePlayType\n }\n });\n\n }\n\n}","import {IFreePlayVoucherModel} from \"./free-play-voucher.model.interface\";\nimport {\n IFreePlayVoucherData,\n IFreePlayVoucherDelta\n} from \"../../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport { computed, observable, runInAction, makeObservable } from \"mobx\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {FreePlayGameModel} from \"../free-play-game/free-play-game.model\";\nimport {NullableNumber, NullableString, NullableUndefinedDate} from \"../../../../common/types/nullable-types\";\nimport {FP_VOUCHER_TYPES} from \"../../../../common/const/free_play_consts\";\n\nexport abstract class VoucherBaseModel implements IFreePlayVoucherModel {\n constructor(voucherData: IFreePlayVoucherData,\n protected readonly services: IServiceFactoryExtended) {\n makeObservable(this);\n\n this._voucherData = voucherData;\n }\n\n abstract get voucherName(): string;\n abstract get voucherInGameTitle(): string;\n abstract get voucherDescription(): string;\n abstract get backgroundImageUrl(): string;\n abstract get iconUrl(): string;\n protected abstract _formatVoucherAmount(amount: number): string;\n\n\n @observable.ref\n protected _voucherData: IFreePlayVoucherData;\n\n dispose() {\n }\n\n get id(): string {\n return this._voucherData.ID;\n }\n\n get freePlayType(): FP_VOUCHER_TYPES {\n return this._voucherData.FreePlayTypeId;\n }\n\n get isThirdPartyVoucher(): boolean {\n return Boolean(this._voucherData.CompanyID);\n }\n\n @computed\n get freePlayGames(): FreePlayGameModel[] {\n\n\n const gamesDictionary = this._voucherData.GameTypeIDList\n .map(gameType => this.services.games.gamesMap[gameType])\n .filter(gameInfo => Boolean(gameInfo))\n .filter(gameInfo => {\n return this._voucherData.CurrentBalance > 0\n && (Check.isNullOrUndefined(gameInfo.minBet) || gameInfo.minBet <= this._voucherData.CurrentBalance);\n }).toDictionary(game => game.gameType);\n\n\n\n const sortedGamesTypes = this.services.aiEngine.sortGames(Object.keys(gamesDictionary)\n .map(gt => parseInt(gt)));\n\n return sortedGamesTypes.map(gameType => new FreePlayGameModel(this, gamesDictionary[gameType]));\n }\n\n hasGame(gameType: number): boolean {\n return Boolean(this.freePlayGames.find(g => g.gameInfo.gameType === gameType));\n }\n\n get creationDate(): NullableUndefinedDate {\n return this._voucherData.CreationDate;\n }\n get expirationDate(): Date {\n return this._voucherData.ExpirationDate;\n }\n\n private get isExpired(): boolean {\n return this._voucherData.ExpirationDate.getTime() < this.services.time.now();\n }\n\n get isValid(): boolean {\n return !this.isExpired && this.freePlayGames.length > 0;\n }\n\n updateVoucherData(newVoucherData: IFreePlayVoucherDelta): void {\n if(newVoucherData.ID !== this.id) {\n throw new Error('New voucher ID and existing voucher ID does not match');\n }\n runInAction(() => {\n this._voucherData = {\n ...this._voucherData,\n ...newVoucherData\n }\n });\n }\n\n get originalAmount(): NullableNumber {\n return this._voucherData.OriginAmount ?? null;\n }\n\n get currentBalance(): number {\n return this._voucherData.CurrentBalance ?? 0;\n }\n\n get formattedOriginalAmount(): NullableString {\n if(Check.isNullOrUndefined(this._voucherData.OriginAmount)) {\n return null;\n }\n\n return this._formatVoucherAmount(this._voucherData.OriginAmount);\n }\n\n get formattedCurrentBalance(): string {\n return this._formatVoucherAmount(this._voucherData.CurrentBalance);\n }\n\n get timeToExpiration(): TimeSpan {\n\n /*\n \"FREE_PLAY_EXPIRES_IN_TIME\": \"Expires in {expiration}\",\n \"FREE_PLAY_EXPIRES_IN_EXPIRED\": \"Expired\",\n \"FREE_PLAY_EXPIRES_IN_DAY\": \"Expires in {expiration} days\",\n */\n\n return TimeSpan.fromMilliseconds(this._voucherData.ExpirationDate.getTime() - this.services.time.now());\n }\n\n get isCloseToExpiration(): boolean {\n return this.timeToExpiration.totalDays <= 1;\n }\n\n get expirationMessage(): string {\n if(this.isExpired) {\n return this.services.translation.translate('FREE_PLAY_EXPIRES_IN_EXPIRED');\n }\n\n const timeToExpirationRoundedToSeconds = TimeSpan.fromSeconds(Math.floor(this.timeToExpiration.totalSeconds));\n\n if(this.isCloseToExpiration) {\n return this.services.translation.translate('FREE_PLAY_EXPIRES_IN_TIME', {expiration:timeToExpirationRoundedToSeconds.toString({useTotalHours: true})});\n }\n\n return this.services.translation.translate('FREE_PLAY_EXPIRES_IN_DAY', {expiration: Math.floor(timeToExpirationRoundedToSeconds.totalDays).toString()});\n }\n}","import {VoucherBaseModel} from \"../voucher-base.model\";\n\nexport class FreePlayVoucherModel extends VoucherBaseModel {\n get voucherName(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_NAME_FPV');\n }\n\n get voucherDescription(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_DESC_FPV');\n }\n\n get voucherInGameTitle(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_TITLE_FPV');\n }\n\n protected _formatVoucherAmount(amount: number): string {\n return this.services.currency.formatMoney(amount, true);\n }\n\n get backgroundImageUrl(): string {\n return this.services.theme.currentTheme.images.freePlay.backgroundTypeFP.toString();\n }\n\n get iconUrl(): string {\n return this.services.theme.currentTheme.images.freePlay.typeFP.toString();\n }\n\n}","import {VoucherBaseModel} from \"../voucher-base.model\";\n\nexport class JackpotFreePlayVoucherModel extends VoucherBaseModel {\n\n get voucherName(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_NAME_JPFPV');\n }\n\n\n get voucherDescription(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_DESC_JPFPV');\n }\n\n get voucherInGameTitle(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_TITLE_JPFPV');\n }\n\n protected _formatVoucherAmount(amount: number): string {\n return this.services.currency.formatMoney(amount, true);\n }\n\n get backgroundImageUrl(): string {\n return this.services.theme.currentTheme.images.freePlay.backgroundTypeJFP.toString();\n }\n\n get iconUrl(): string {\n return this.services.theme.currentTheme.images.freePlay.typeJFP.toString();\n }\n\n}","import {VoucherBaseModel} from \"../voucher-base.model\";\n\nexport class FreeSpinsVoucherModel extends VoucherBaseModel {\n get voucherName(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_NAME_FSV');\n }\n\n\n get voucherDescription(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_DESC_FSV');\n }\n\n get voucherInGameTitle(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_TITLE_FSV');\n }\n\n protected _formatVoucherAmount(amount: number): string {\n return (amount / this._voucherData.SpinBetAmount).toString();\n }\n\n get backgroundImageUrl(): string {\n return this.services.theme.currentTheme.images.freePlay.backgroundTypeFS.toString();\n }\n\n get iconUrl(): string {\n return this.services.theme.currentTheme.images.freePlay.typeFS.toString();\n }\n}","import {VoucherBaseModel} from \"../voucher-base.model\";\n\nexport class JackpotFreeSpinsVoucherModel extends VoucherBaseModel {\n\n get voucherName(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_NAME_JPFSV');\n }\n\n\n get voucherDescription(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_DESC_JPFSV');\n }\n\n get voucherInGameTitle(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_TITLE_JPFSV');\n }\n\n protected _formatVoucherAmount(amount: number): string {\n return (amount / this._voucherData.SpinBetAmount).toString();\n }\n\n get backgroundImageUrl(): string {\n return this.services.theme.currentTheme.images.freePlay.backgroundTypeJFS.toString();\n }\n\n get iconUrl(): string {\n return this.services.theme.currentTheme.images.freePlay.typeJFS.toString();\n }\n\n}","import {IFreePlayVoucherData} from \"../../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport {IFreePlayVoucherModel} from \"../vouchers/free-play-voucher.model.interface\";\nimport {FP_VOUCHER_TYPES} from \"../../../../common/const/free_play_consts\";\nimport {FreePlayVoucherModel} from \"../vouchers/free-play/free-play-voucher.model\";\nimport {JackpotFreePlayVoucherModel} from \"../vouchers/jackpot-free-play/jackpot-free-play-voucher.model\";\nimport {FreeSpinsVoucherModel} from \"../vouchers/free-spins/free-spins-voucher.model\";\nimport {JackpotFreeSpinsVoucherModel} from \"../vouchers/jackpot-free-spins/jackpot-free-spins-voucher.model\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {DisposableObject} from \"../../../../utils/disposable-object\";\n\nexport class VouchersProviderBase extends DisposableObject {\n constructor(protected readonly services: IServiceFactoryExtended) {\n super();\n }\n\n protected _createVoucherModel(voucherData: IFreePlayVoucherData): IFreePlayVoucherModel | null {\n switch (voucherData.FreePlayTypeId) {\n case FP_VOUCHER_TYPES.FreePlay:\n return new FreePlayVoucherModel(voucherData, this.services);\n case FP_VOUCHER_TYPES.FreeJackpotPlay:\n return new JackpotFreePlayVoucherModel(voucherData, this.services);\n case FP_VOUCHER_TYPES.FreeSpin:\n return new FreeSpinsVoucherModel(voucherData, this.services);\n case FP_VOUCHER_TYPES.FreeJackpotSpin:\n return new JackpotFreeSpinsVoucherModel(voucherData, this.services);\n default:\n this.services.logger.error(`Invalid voucher type ${voucherData.FreePlayTypeId}`);\n return null;\n }\n }\n}","import {IFreePlayVouchersProvider} from \"../free-play-vouchers.provider.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport { observable, runInAction, makeObservable } from \"mobx\";\nimport {\n IFreePlayVoucherData,\n IFreePlayVoucherDelta\n} from \"../../../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport {IFreePlayVoucherModel} from \"../../vouchers/free-play-voucher.model.interface\";\nimport {VouchersProviderBase} from \"../vouchers-provider-base\";\n\nexport class Tripe8FreePlayVouchersProvider extends VouchersProviderBase implements IFreePlayVouchersProvider {\n constructor(services: IServiceFactoryExtended) {\n super(services)\n\n makeObservable(this);\n\n this.addSdkEventSubscription(this.services.sdk.events.onFreePlayBatchAdded(this._onFreePlayBatchAddedHandler));\n this.addSdkEventSubscription(this.services.sdk.events.onFreePlayBatchUpdated(this._onFreePlayBatchUpdatedHandler));\n this.addSdkEventSubscription(this.services.sdk.events.onFreePlayBatchRemoved(this._onFreePlayBatchRemovedHandler));\n }\n dispose() {\n super.dispose();\n\n this.vouchers.forEach(voucher => voucher.dispose());\n this.vouchers = [];\n }\n\n @observable\n vouchers: IFreePlayVoucherModel[] = [];\n\n private _findVoucher(voucherId: string): IFreePlayVoucherModel | null {\n return this.vouchers.find(v => v.id === voucherId.toString()) || null;\n }\n\n private _onFreePlayBatchAddedHandler = (vouchers: IFreePlayVoucherData[]) => {\n runInAction(() => {\n vouchers.forEach(voucherData => {\n const existingVoucher = this._findVoucher(voucherData.ID);\n if(existingVoucher) {\n existingVoucher.updateVoucherData(voucherData);\n } else {\n const voucherModel = this._createVoucherModel(voucherData);\n if(voucherModel) {\n this.vouchers.push(voucherModel);\n }\n }\n });\n });\n }\n\n private _onFreePlayBatchUpdatedHandler = (vouchers: IFreePlayVoucherDelta[]) => {\n runInAction(() => {\n vouchers.forEach(voucherData => {\n const existingVoucher = this._findVoucher(voucherData.ID);\n if(existingVoucher) {\n existingVoucher.updateVoucherData(voucherData);\n } else {\n this.services.logger.warning(`Received voucher update event for a voucher that is not in the list! voucher ID = ${voucherData.ID}`);\n }\n });\n });\n }\n\n private _onFreePlayBatchRemovedHandler = (voucherIds: string[]) => {\n runInAction(() => {\n voucherIds.forEach(id => {\n const index = this.vouchers.findIndex(v => v.id === id);\n if(index >= 0) {\n this.vouchers[index].dispose();\n this.vouchers.splice(index, 1);\n }\n });\n });\n }\n\n async refreshVouchers(): Promise {\n //No need to refresh vouchers for 888. They are coming through firebase\n }\n}","export enum ReasonIsNotEligible\n{\n Ok = 0,\n NoPromotionsFound = 101,\n NoSegmentationFound = 102,\n PromotionRestricted = 103,\n FTD0 = 104,\n NotDepositedInLast30Days = 105,\n SpinAlreadyUsedToday = 106\n}\n\nexport interface CheckEligibilityResponse {\n isEligible: boolean;\n nextEligibleDate: string;\n reasonIsNotEligible: ReasonIsNotEligible;\n isLastEligibleDay: boolean;\n nextEligibilitySeconds: number;\n segmentationId: number;\n}\n\nexport interface ICrmSdkLib {\n initCrm(params: {userToken: string}): Promise;\n onConnectedToFirebase(params: {fbToken: string}): Promise;\n onDisconnectedFromFirebase(): void;\n checkEligibility(): Promise;\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {IFreePlayService} from \"./free-play.service.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IFreePlayVouchersProvider} from \"./providers/free-play-vouchers.provider.interface\";\nimport {action, observable, makeObservable, computed} from \"mobx\";\nimport {IFreePlayVoucherModel} from \"./vouchers/free-play-voucher.model.interface\";\nimport {Tripe8FreePlayVouchersProvider} from \"./providers/888/888-free-play-vouchers.provider\";\nimport {ThirdPartyVouchersProvider} from \"./providers/3rdparty/third-party-vouchers.provider\";\n\nexport class FreePlayService extends ServiceBase implements IFreePlayService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this.reaction(() => this.hasVouchers,\n async (hasVouchers) => {\n\n if(hasVouchers) {\n for(let action of this._actionsToExecuteWhenFreePlayIsAvailable) {\n await action();\n }\n\n this._actionsToExecuteWhenFreePlayIsAvailable = [];\n }\n });\n\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if(isAuthorized) {\n this._setVoucherProviders([\n new Tripe8FreePlayVouchersProvider(this.services),\n new ThirdPartyVouchersProvider(this.services)\n ]);\n } else {\n this._setVoucherProviders([]);\n }\n }, {\n fireImmediately: true\n });\n }\n\n private _actionsToExecuteWhenFreePlayIsAvailable: Array<() => Promise> = [];\n\n registerActionToExecuteWhenFreePlayIsAvailable(action: () => Promise): void {\n this._actionsToExecuteWhenFreePlayIsAvailable.push(action);\n }\n\n \n @observable.ref\n private _vouchersProviders: IFreePlayVouchersProvider[] = [];\n\n\n @action.bound\n private _setVoucherProviders(newProviders: IFreePlayVouchersProvider[]): void {\n this._vouchersProviders.forEach(vp => vp.dispose());\n this._vouchersProviders = newProviders;\n }\n\n get hasVouchers(): boolean {\n return this.userActiveVouchers.length > 0;\n }\n\n @computed\n get userVouchers(): IFreePlayVoucherModel[] {\n let allVouchers: IFreePlayVoucherModel[] = [];\n\n this._vouchersProviders.forEach(provider => {\n allVouchers = [\n ...allVouchers,\n ...provider.vouchers\n ];\n });\n\n return allVouchers;\n }\n\n //This is on purpose not market as computed, because isValid is based on isExpired and we want isExpired to be reevaluated on each call\n get userActiveVouchers(): IFreePlayVoucherModel[] {\n return this.userVouchers.filter(v => v.isValid);\n }\n\n get userVouchersSortedByCreationDate(): IFreePlayVoucherModel[] {\n\n return [...this.userActiveVouchers]\n .sort((v1, v2) => {\n let diff = (v1.creationDate?.getTime() ?? 0) - (v2.creationDate?.getTime() ?? 0);\n if(diff !== 0) {\n return diff;\n }\n return v1.expirationDate.getTime() - v2.expirationDate.getTime();\n });\n }\n\n get userVouchersSortedByExpirationDate(): IFreePlayVoucherModel[] {\n return [...this.userActiveVouchers]\n .sort((v1, v2) => v1.expirationDate.getTime() - v2.expirationDate.getTime());\n }\n\n findVoucherById(id: string): IFreePlayVoucherModel | null {\n return this.userActiveVouchers.find(v => v.id === id) || null;\n }\n\n getGameVouchersSortedByCreationDate(gameType: number): IFreePlayVoucherModel[] {\n return this.userVouchersSortedByCreationDate.filter(voucher => voucher.hasGame(gameType));\n }\n\n async refreshVouchers(): Promise {\n await Promise.all(this._vouchersProviders.map(p => p.refreshVouchers()))\n }\n\n}","import {IRestrictionsService} from \"./restrictions.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IGameRestriction} from \"./game-restriction.interface\";\nimport {GameInfo} from \"../games/game-info\";\n\nexport class RestrictionsService extends ServiceBase implements IRestrictionsService {\n getGenericRestrictionMessage(): string {\n return this.services.translation.translate('100200');\n }\n\n getGameRestriction(gameInfo: GameInfo): IGameRestriction {\n return this.services.sdk.getGameRestriction(gameInfo.gameType, gameInfo.gameGroupId, gameInfo.vendorId);\n }\n}","import {IFreeToPlayService, IFreeToPlayShowOptions} from \"./free-to-play.service.interface\";\nimport {AnimatedIconBaseService, AnimatedIconObservableTarget} from \"../pixi-app/animated-icon-base-service.service\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { observable, action, makeObservable } from \"mobx\";\n\nexport class FreeToPlayService extends AnimatedIconBaseService implements IFreeToPlayService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n\n makeObservable(this);\n\n this.reaction(\n () => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (isAuthorized) {\n if (this._isEnabled() ) {\n this._checkEligibilityPromise = this._checkEligibility();\n }\n } else {\n this._checkEligibilityPromise = Promise.resolve();\n this._setIsPromotionEligible(false);\n }\n }, {\n fireImmediately: true\n }\n );\n }\n\n private _checkEligibilityPromise: Promise = Promise.resolve();\n\n private async _checkEligibility() {\n let shouldShowPromotion = false;\n if (this.services.user.isAuthorized) {\n try {\n shouldShowPromotion = !(await this.services.crm.isPromotionRestricted());\n }\n catch (err) {\n this.services.logger.error('isPromotionRestricted failed', err);\n }\n }\n\n this._setIsPromotionEligible(shouldShowPromotion);\n }\n\n waitForEligibility(): Promise {\n return this._checkEligibilityPromise;\n }\n\n @observable.ref\n private _isPromotionEligible: boolean = false;\n\n @action.bound\n private _setIsPromotionEligible(isEligible: boolean) {\n this._isPromotionEligible = isEligible;\n }\n\n\n get isPromotionEligible(): boolean {\n return this._isPromotionEligible;\n }\n\n get shouldShowIcon(): boolean {\n return this._shouldShowIcon();\n }\n\n @observable.ref\n private _isPromotionOpened: boolean = false;\n\n get isPromotionOpened(): boolean {\n return this._isPromotionOpened;\n }\n\n @action.bound\n setIsPromotionOpened(isOpened: boolean) {\n this._isPromotionOpened = isOpened;\n }\n\n loadFreeToPlayAnimation(options: AnimatedIconObservableTarget) {\n this.loadAnimatedIcon(options, \"freeToPlayAnimatedIcon\");\n }\n\n private _isEnabled(): boolean {\n return this.services.configuration.servicesConfigs.AppLauncher.apps.CASINO_BONUS_GAME_WIDGET.enabled;\n }\n\n private _shouldShowIcon(): boolean {\n return this.services.configuration.servicesConfigs.AppLauncher.apps.CASINO_BONUS_GAME_WIDGET.shouldShowIcon;\n }\n\n async showPromotion(options: IFreeToPlayShowOptions): Promise {\n options.appSpecificParameters = options.appSpecificParameters || {};\n\n Object.assign(options.appSpecificParameters, {\n publicationID: this.services.configuration.cmsPublicationId,\n //TODO - get dynamic when needed\n templateID: \"392012\",\n domain: (await this.services.cmsApi).apiOrigin\n });\n\n await (await this.services.appLauncher).openFreeToPlayBonusGames({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: options.channel,\n appSpecificParameters: options.appSpecificParameters\n });\n }\n}\n","import {IScriptLoaderService} from \"./script-loader.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {LoadScriptOptions} from \"../../../common/interfaces/load-script-options\";\n\nexport class ScriptLoaderService extends ServiceBase implements IScriptLoaderService {\n async loadScript(options: LoadScriptOptions): Promise {\n await this.services.sdk.scriptLoader.loadScript(options);\n }\n\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {ISessionTimerService} from \"./session-timer.service.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {observable, runInAction, makeObservable} from \"mobx\";\n\nexport class SessionTimerService extends ServiceBase implements ISessionTimerService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n services.sdk.events.onSessionTimerUpdate(this._onSessionTimerUpdate);\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (!isAuthorized) {\n this.currentSessionTimer = null;\n }\n });\n }\n\n private _onSessionTimerUpdate = (eventData: {sessionTime: TimeSpan}) => {\n runInAction(() => {\n this.currentSessionTimer = eventData.sessionTime;\n });\n }\n\n @observable.ref\n currentSessionTimer: TimeSpan | null = null;\n\n}","import { ServiceBase } from \"../ServiceBase\";\nimport { ICrmService } from \"./crm.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport {ICrmSdkLib, ReasonIsNotEligible, CheckEligibilityResponse} from \"../../../common/interfaces/crm-sdk-lib.interface\";\n\nexport class CrmService extends ServiceBase implements ICrmService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n this._initService();\n }\n\n\n private _initService() {\n if (!this.isEnabled) {\n return;\n }\n\n this.services.sdk.events.onFirebaseGotNewToken((eventData) => {\n this._connect(eventData.token);\n });\n\n this.reaction(() => this.services.user.isAuthorized, (isAuth) => {\n if (isAuth) {\n this._initCrm();\n } else {\n this._disconnect();\n }\n }, {\n fireImmediately: true\n });\n }\n \n get isEnabled(): boolean {\n return this.services.configuration.servicesConfigs.CrmSdk.enabled && \n !!this.services.configuration.servicesConfigs.CrmSdk.libUrl;\n }\n\n private _sdkLib: null | ICrmSdkLib = null;\n private _initCrmPromise: Promise | null = null;\n\n private async _loadLib() {\n if (!this._sdkLib) {\n await this.services.scriptLoader.loadScript({\n url: this.services.configuration.servicesConfigs.CrmSdk.libUrl\n })\n this._sdkLib = this.services.window.getGlobalProperty('platformCrmSdk');\n }\n }\n\n private async _initCrm() {\n //prevent calling sdkLib.initCrm twice in this session\n if (this._initCrmPromise) {\n return this._initCrmPromise;\n }\n\n const executeInitCrm = async () => {\n try {\n const platformToken = await this.services.sdk.getPlatformToken();\n if (!platformToken?.token) {\n throw new Error(\"Cannot retrieve platform token!\");\n }\n\n await this._loadLib();\n const res = await this._sdkLib.initCrm({\n userToken: platformToken.token\n });\n this.services.logger.info('crmSdk.initCrm() succeeded', res);\n } catch (err) {\n this.services.logger.error('crmSdk.initCrm() failed', err);\n throw err;\n }\n }\n\n this._initCrmPromise = executeInitCrm();\n \n this._initCrmPromise.catch(() => {\n // try again next time if something failed\n this._initCrmPromise = null;\n });\n return this._initCrmPromise;\n };\n\n private async _connect(fbToken: string) {\n try {\n await this._initCrm();\n await this._sdkLib.onConnectedToFirebase({\n fbToken: fbToken\n });\n this.services.logger.info('crmSdk.onConnectedToFirebase() succeeded');\n } catch (err) {\n this.services.logger.error('crmSdk.onConnectedToFirebase() failed', err);\n throw err;\n }\n }\n\n private async _disconnect() {\n this._initCrmPromise = null;\n if (this._sdkLib) {\n try {\n await this._sdkLib.onDisconnectedFromFirebase();\n this.services.logger.info('crmSdk.onDisconnectedFromFirebase() succeeded');\n } catch (err) {\n this.services.logger.error('crmSdk.onDisconnectedFromFirebase() failed', err);\n throw err;\n }\n }\n }\n\n async _getEligibility(): Promise {\n try {\n await this._initCrm();\n const eligibility = await this._sdkLib.checkEligibility();\n this.services.logger.info('crmSdk.checkEligibility() response', eligibility);\n return eligibility;\n } catch(err) {\n this.services.logger.error('crmSdk.checkEligibility() failed', err);\n throw err;\n }\n }\n\n async isPromotionRestricted(): Promise {\n if (!this.services.user.isAuthorized){\n this.services.logger.warning('Promotion safe check - must be a logged in user - failed')\n return false\n }\n\n const eligibility = await this._getEligibility();\n const doNotShowPromotionReasons = [ReasonIsNotEligible.PromotionRestricted, /*ReasonIsNotEligible.NoSegmentationFound*/];\n // In case user is fully eligible - meaning he did not play today and deposited in last 30 days and not vip\n // they return isEligible = true\n // This condition says if he's fully eligible or he is not fully eligible but reason is different than promotion permitted\n const shouldShowPromotion = eligibility.isEligible || !doNotShowPromotionReasons.includes(eligibility.reasonIsNotEligible);\n return !shouldShowPromotion;\n }\n}\n","export enum GamblingSessionStatus {\n Inactive = 0,\n Active = 1,\n Expired = 2,\n Restricted = 3\n}\n\nexport interface IGamblingSessionUpdateData {\n readonly gamblingSessionId: string;\n readonly sessionStatus: GamblingSessionStatus;\n readonly sessionActivationTime?: number;\n readonly sessionTotalBets: number;\n readonly sessionTotalWins: number;\n readonly updateCounter?: number;\n readonly restrictionExpirationDate?: number;\n}\n\nexport interface IGamblingSessionUpdateEvent {\n id: string;\n data: IGamblingSessionUpdateData;\n}\n\n","import styled from 'styled-components';\n\nexport const LugasActiveDialogBoxLine = styled.div`\n margin:30px 5px 5px;\n border-bottom: 2px solid ${({theme}) => theme.colors.boxBorderLighter};\n`;","\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport { DialogTextBox, DialogDimmedTextBox } from \"../modal-dialog/boxes/text/dialog-text.box\";\nimport {ModalDialogActionsComponent} from \"../modal-dialog/modal-dialog-actions.component\";\nimport { LugasActiveDialogBoxLine } from \"./boxes/line-box\";\n\ninterface ILugasActivePopupComponentProps {\n dialogHandler: IModalDialogHandler;\n}\n\n export class LugasActivePopupComponent extends OrbitComponent {\n\n private _onOkPressed = () => {\n this.props.dialogHandler && this.props.dialogHandler.close();\n };\n\n render() {\n return (\n
    \n {this.services.translation.translate(\"LUGAS_ACTIVE_TEXT_1\")}\n \n {this.services.translation.translate(\"LUGAS_ACTIVE_TEXT_2\")}\n \n
    \n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const LoginPopupBox = styled.div`\n @media ${({theme}) => theme.mediaQuery.lAndAbove } {\n min-width: 400px;\n }\n \n min-width: 300px;\n\n`;","import styled from \"styled-components\";\nimport {DialogTextBox} from \"../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const LoginPopupDialogText = styled(DialogTextBox)`\n margin: 0;\n`;","import React from \"react\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {DialogBoldTextBox, DialogTextBox} from \"../modal-dialog/boxes/text/dialog-text.box\";\nimport {ModalDialogActionsComponent} from \"../modal-dialog/modal-dialog-actions.component\";\nimport {LoginPopupBox} from \"./boxes/login-popup.box\";\nimport {LoginPopupDialogText} from \"./boxes/login-popup-dialog-text.box\";\nimport {ILoginPopupData} from \"../../services/login-popup/login-popup.service.interface\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface ILoginPopupComponentProps extends ComponentServicesPick<'loginPopup'>{\n dialogHandler: IModalDialogHandler;\n onApprove: ()=> void\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const _onOkPressed = () => {\n props.onApprove && props.onApprove();\n props.dialogHandler && props.dialogHandler.close();\n };\n\n const data: ILoginPopupData = props.loginPopup.getLoginPopupData();\n let totalStakesText: string;\n let netPositionText: string;\n\n // No available data\n if(!data || data.BankrollCurr === 'NA') {\n totalStakesText = services.translation.translate(\"LOGIN_POPUP_NO_AVAILABLE_DATA\");\n netPositionText = services.translation.translate(\"LOGIN_POPUP_NO_AVAILABLE_DATA\");\n } else {\n totalStakesText = services.currency.formatMoney(data.TotalStakes);\n netPositionText = services.currency.formatMoney(data.NetPosition);\n }\n\n return (\n \n {services.translation.translate(\"LOGIN_POPUP_TOP_TEXT\")}\n {services.translation.translate(\"LOGIN_POPUP_TOTAL_BETS_TEXT\")}\n {totalStakesText}\n {services.translation.translate(\"LOGIN_POPUP_NET_POSITION_TEXT\")}\n {netPositionText}\n\n \n \n );\n \n})\n\nexport const LoginPopupComponent = withServices(ComponentBody, ['loginPopup']);","import styled from 'styled-components';\n\nexport const ToggleSwitchCheckboxBox = styled.input.attrs({type: 'checkbox'})`\n visibility: hidden;\n position: absolute;\n top: 0;\n left: 0;\n`;","import styled from 'styled-components';\n\nexport const ToggleSwitchSliderBox = styled.span<{checked: boolean}>`\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${props => (props.checked ? props.theme.colors.brandPrimary : '#ccc')};\n transition: background-color 0.4s;\n border-radius: 34px;\n\n &:before {\n position: absolute;\n content: '';\n height: 16px;\n width: 16px;\n left: 2px;\n bottom: 2px;\n background-color: white;\n transition: transform 0.4s;\n border-radius: 50%;\n transform: ${props => (props.checked ? 'translateX(20px)' : 'translateX(0)')};\n }\n`;","import styled from 'styled-components';\n\n\nexport const ToggleSwitchBox = styled.label`\n display: inline-block;\n position: relative;\n width: 40px;\n height: 20px;\n margin: 0px 10px;\n`;","import React from \"react\";\nimport {OrbitComponent} from \"../../../components/base-components/orbit-component/orbit-component\";\nimport {ToggleSwitchCheckboxBox} from \"./boxes/checkbox/toggle-switch-checkbox.box\";\nimport {ToggleSwitchSliderBox} from \"./boxes/slider/toggle-switch-slider.box\";\nimport {ToggleSwitchBox} from \"./boxes/toggle-switch.box\";\n\nexport interface ToggleSwitchComponentProps {\n onToggle: (checked: boolean) => void;\n checked: boolean;\n className?: string;\n}\nexport class ToggleSwitchComponent extends OrbitComponent {\n\n render() {\n return (\n this.props.onToggle(e.target.checked)}/>\n \n )\n }\n}","import styled from \"styled-components\";\n\nexport const ModifyBiometricDialogBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n ${({theme}) => theme.font.presets.body};\n\n svg {\n margin: 1rem 0;\n }\n \n padding: 0 2rem;\n\n width: 35vw;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: auto;\n }\n`;\n","import styled from \"styled-components\";\n\nconst ModifyBiometricSectionDefaultBox = styled.div`\n margin-bottom: 1rem;\n \n font-size: 1.6rem;\n color: ${({theme}) => theme.colors.textLight};\n \n > :nth-child(2n+1) {\n font-size: 1.4rem;\n color: ${({theme}) => theme.colors.textMiddleDark};\n }\n`;\n\nexport const ModifyBiometricSectionBox = ModifyBiometricSectionDefaultBox;","import styled from \"styled-components\";\n\nexport const ModifyBiometricToogleSectionBox = styled.div`\n display:flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n text-align: center;\n background-color: ${props => props.theme.colors.backgroundDark};\n width: 80%;\n padding: 10px;\n margin: 10px 0px;\n border-radius: 10px;\n`;\n","import React, {useEffect, useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {ToggleSwitchComponent} from \"../../../basic-ui-components/form/toggle-switch/toggle-switch.component\";\nimport {ModifyBiometricDialogBox} from \"./boxes/modify-biometric-dialog.box\";\nimport {ModifyBiometricSectionBox} from \"./boxes/modify-biometric-info-section/modify-biometric-info-section.box\";\nimport {ModifyBiometricToogleSectionBox} from \"./boxes/modify-biometric-toggle-section/modify-biometric-toggle-section.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\n\nexport interface IModifyBiometricDialogOptions {\n dialogHandler: IModalDialogHandler;\n}\nexport const ModifyBiometricDialogComponent: React.FC = observer((props) => {\n const services = useServices();\n const [isFeatureOn, setIsFeatureOn] = useState(false);\n\n useEffect(() => {\n const _updateTouchEnable = async () => {\n try {\n const isEnabled = await services.hybrid.isDeviceTouchEnable();\n\n if (isEnabled) {\n const isFeatureOn = await services.hybrid.getTouchIDFeaturer().getTokenAndCheckEnable();\n setIsFeatureOn(isFeatureOn);\n }\n } catch (err) {\n services.logger.error('Failed to modify touch ID feature', err);\n }\n }\n _updateTouchEnable();\n }, [services.analytics, services.hybrid, services.logger]);\n\n const _buttonCallBack = async (selectToggle: boolean) => {\n let strToggle = 'Menu toggle on';\n try {\n if (selectToggle) {\n await services.hybrid.isDeviceTouchEnable();\n const isDeviceTouchEnabled = services.hybrid.getTouchIDFeaturer().getModel().isDeviceTouchEnable();\n if (isDeviceTouchEnabled) {\n await services.hybrid.getTouchIDFeaturer().getTokenFromSrv();\n setIsFeatureOn(selectToggle)\n }\n else {\n const isOpenSettingSupported = await services.hybrid.isOpenSettingSupported();\n if (isOpenSettingSupported) {\n await services.hybrid.openTouchIdSettings();\n }\n else {\n services.logger.warning('The OS settings cannot be opened.');\n props.dialogHandler.close();\n }\n }\n\n } else {\n setIsFeatureOn(false);\n services.hybrid.clearToken();\n strToggle = 'Menu toggle off';\n }\n } catch (err) {\n services.logger.error('Failed to modify touch ID feature', err);\n props.dialogHandler.close();\n }\n\n services.analytics.sendOrbitUserFlowEvent ('Client_TouchID', strToggle);\n }\n\n return (\n \n \n {services.translation.translate('TOUCH_ID_CAPTION')}\n \n \n
    {services.translation.translate('TOUCH_ID_AUTO_SCREEN')}
    \n _buttonCallBack(e)} className={CyClass('cy-biometric-login-toggle')} />\n
    \n
    \n );\n});","import {\n DialogResult,\n IConfirmLugasCoolingOffLogoutDialogOptions,\n ISpecificDialogsService\n} from \"./specific-dialogs.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {DialogButtonClickHandleResultEnum, IModalDialogHandler} from \"../dialog/dialog.service.interface\";\nimport {LugasActivePopupComponent} from \"../../components/lugas/lugas-active-popup.component\";\nimport {\n PRIORITY_LEVEL,\n PRIORITY_LEVEL_ZINDEX_MAPPER\n} from \"../../../sdk/src/services/overlay_manager/overlay_manager_levels\";\nimport React from \"react\";\nimport {\n ACTION_TAKEN_NAMES,\n DISPLAY_MESSAGE_IDS,\n DISPLAY_MESSAGE_NAMES\n} from \"../../../common/const/casinofied-analytics-consts\";\nimport {InfoIcon} from \"../../themes/defaults/icons/info.icon\";\nimport {LoginPopupComponent} from \"../../components/login-popup/login-popup.component\";\nimport {ILoginPopupData} from \"../login-popup/login-popup.service.interface\";\nimport {\n ModifyBiometricDialogComponent\n} from \"../../components/biometric-dialog/modify-biometric-dialog/modify-biometric-dialog.component\";\nimport {\n GamblingSessionStatus\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/gambling-session_handler_interfaces\";\nimport {GamblingSessionLogoutDialog} from \"../../components/gambling-session/logout/gambling-session-logout-dialog.component\";\nimport {GamblingSessionData} from \"../gambling-session/gambling-session.service.interface\";\n\nexport class SpecificDialogsService extends ServiceBase implements ISpecificDialogsService {\n enforceHybridAppModal(analyticsOnClick?: {\n category: string;\n action?: string;\n label?: string;\n value?: any;\n omitStructuredLogger?: boolean;\n }\n ) {\n let DownloadAppIcon = this.services.theme.currentTheme.icons.sideMenuDownloadApp;\n return this.services.dialog.showSimpleTextModal({\n title: this.services.translation.translate('ENFORCE_HYBRID_APP_TITLE'),\n text: this.services.translation.translate('ENFORCE_HYBRID_APP_TEXT'),\n iconSvg: DownloadAppIcon,\n buttons: [\n {\n text: this.services.translation.translate('ENFORCE_HYBRID_APP_CONTINUE_BUTTON'),\n buttonPreset: 'primary',\n onClick: async () => {\n if (analyticsOnClick) {\n const {category, action, label, value, omitStructuredLogger} = analyticsOnClick;\n this.services.analytics.sendAnalytics(category, action, label, value, omitStructuredLogger);\n }\n await (await this.services.externalLinks).openDownloadApp();\n return DialogButtonClickHandleResultEnum.KeepDialogOpen;\n }\n }\n ]\n });\n }\n\n showLugasCooldownPopup(): IModalDialogHandler {\n const businessCorrelationId = this.services.tools.getGuid();\n const reportConfirmClicked = () => {\n this.services.casinofiedAnalytics.messageActionTaken({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n actionType: ACTION_TAKEN_NAMES.CONFIRM_ACTION,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_COOLDOWN_MESSAGE_NAME\n })\n }\n const ret = this.services.dialog.showSimpleTextModal({\n buttons: [\n {\n buttonPreset: \"primary\",\n text: this.services.translation.translate('LUGAS_OK_BTN'),\n onClick: async () => {\n reportConfirmClicked();\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ],\n text: this.services.translation.translate('LUGAS_COOLDOWN_TEXT'),\n title: this.services.translation.translate('LUGAS_COOLDOWN_TITLE'),\n iconSvg: this.services.theme.currentTheme.icons.warningSignIcon,\n disableFullscreenMobile: true,\n showPopupAboveSecondWebViewHybrid: true,\n onClosedByXButton: reportConfirmClicked,\n })\n\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.lugasCooldown,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_COOLDOWN_MESSAGE_NAME\n })\n\n return ret;\n }\n\n showLugasActivePopup(): IModalDialogHandler {\n const businessCorrelationId = this.services.tools.getGuid();\n const reportConfirmClicked = () => {\n this.services.casinofiedAnalytics.messageActionTaken({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n actionType: ACTION_TAKEN_NAMES.CONFIRM_ACTION,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_ACTIVE_MESSAGE_NAME\n })\n }\n const ret = this.services.dialog.showModal(dialogHandler =>\n ,\n {\n title: this.services.translation.translate('LUGAS_ACTIVE_TITLE'),\n icon: this.services.theme.currentTheme.icons.warningSignIcon,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n forceZOrder: PRIORITY_LEVEL_ZINDEX_MAPPER[PRIORITY_LEVEL.TOUCH_ID] - 1,\n shouldBeClosedOnlyByUser: true,\n onClosed: reportConfirmClicked\n }\n );\n\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.lugasActiveOnAnotherOperator,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_ACTIVE_MESSAGE_NAME\n })\n\n return ret;\n }\n\n async showConfirmLugasCoolingOffLogout(options: IConfirmLugasCoolingOffLogoutDialogOptions): Promise {\n const translation = this.services.translation;\n return new Promise((resolve, reject) => {\n const businessCorrelationId = this.services.tools.getGuid();\n const reportClick = (action) => {\n this.services.casinofiedAnalytics.messageActionTaken({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n actionType: action,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_LOGOUT_MESSAGE_NAME\n })\n }\n this.services.dialog.showSimpleTextModal({\n title: translation.translate('LUGAS_COOLING_OFF_LOGOUT_TITLE_LOGOUT'),\n text: translation.translate('LUGAS_COOLING_OFF_LOGOUT_MESSAGE'),\n icon: (),\n hideCloseButton: false,\n buttons: [\n {\n text: this.services.translation.translate('CANCEL'),\n buttonPreset: 'primary',\n onClick: async () => {\n try {\n await options.onReject();\n reportClick(ACTION_TAKEN_NAMES.CANCEL_ACTION);\n resolve(DialogResult.Rejected);\n } catch (err) {\n reject(err);\n }\n\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n },\n {\n text: translation.translate('LOGOUT'),\n buttonPreset: 'info',\n onClick: async () => {\n try {\n await options.onAccept();\n reportClick(ACTION_TAKEN_NAMES.CONFIRM_ACTION);\n resolve(DialogResult.Accepted);\n } catch (err) {\n reject(err);\n }\n\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ]\n })\n\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.lugasLogout,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_LOGOUT_MESSAGE_NAME\n })\n\n })\n }\n\n async showLoginPopup(confirmClicked: () => void): Promise {\n const businessCorrelationId = this.services.tools.getGuid();\n const reportConfirmClicked = () => {\n confirmClicked && confirmClicked();\n\n this.services.casinofiedAnalytics.messageActionTaken({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n actionType: ACTION_TAKEN_NAMES.CONFIRM_ACTION,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LOGIN_MESSAGE\n })\n }\n\n const ret = this.services.dialog.showModal(dialogHandler =>\n ,\n {\n title: this.services.translation.translate(\"LOGIN_POPUP_TITLE\"),\n icon: this.services.theme.currentTheme.icons.warningSignIcon,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n forceZOrder: PRIORITY_LEVEL_ZINDEX_MAPPER[PRIORITY_LEVEL.TOUCH_ID] - 1,\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: true\n }\n );\n\n const data: ILoginPopupData = (await this.services.loginPopup).getLoginPopupData();\n const amountBankroll = this.services.walletProxy.totalBankroll;\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.loginMessage,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LOGIN_MESSAGE,\n extraData: {\n totalStakes: data.TotalStakes,\n netPosition: data.NetPosition,\n totalWins: data.TotalWins,\n totalLosses: data.TotalLosses,\n bankrollCurr: data.BankrollCurr,\n amountBankroll: amountBankroll\n }\n })\n\n return ret;\n }\n\n showModifyBiometricDialog(): IModalDialogHandler {\n return this.services.dialog.showModal(dialogHandler => , {\n title: this.services.translation.translate('TOUCH_ID_AUTO_SCREEN'),\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n shouldBeClosedOnlyByUser: true,\n mobileCenterHeader: true,\n onClosedByXButton: () => this.services.sdk.eventsTrigger.closeModifyBimetricDialog(),\n });\n }\n\n async showLogoutGamblingSessionSummary(): Promise {\n if(!this.services.gamblingSession.isEnabled || !this.services.gamblingSession.isInitialized) {\n //If the gambling session is not enabled then no point to show the popup.\n //Also if the gambling session was not initialized (meaning we didn't get the initial firebase message from platform) also we don't show the popup\n return Promise.resolve(DialogResult.Accepted);\n }\n\n const gamblingSessionData = await this.services.gamblingSession.getGamblingSessionState();\n\n if(gamblingSessionData.sessionStatus !== GamblingSessionStatus.Active) {\n return DialogResult.Accepted;\n }\n\n return await this._showGamblingSessionSummaryPopup(gamblingSessionData);\n\n }\n\n private _showGamblingSessionSummaryPopup(data: GamblingSessionData): Promise {\n // const currencyService = this.services.currency;\n const analytics = this.services.gamblingSession.analytics;\n\n analytics.reportLogoutMessageShown();\n\n return new Promise(resolve => {\n\n this.services.dialog.showModal((dialogHandler) => (\n {\n analytics.reportLogoutMessageActionTaken('Logout');\n dialogHandler.close();\n resolve(DialogResult.Accepted);\n\n }}\n onCancel={() => {\n analytics.reportLogoutMessageActionTaken('Cancel');\n dialogHandler.close();\n resolve(DialogResult.Rejected);\n }}\n />\n ), {\n title: this.services.translation.translate(\"GAMBLING_SESSION_LOGOUT_DIALOG_TITLE\"),\n noDefaultContentPadding: true,\n isHighPriority: true,\n mobileCenterHeader: true,\n onClosedByXButton: () => {\n analytics.reportLogoutMessageActionTaken('Cancel');\n resolve(DialogResult.Rejected);\n }\n });\n\n })\n }\n}","import {ITippingHistoryRecordViewModel, ITippingHistoryViewModel, ITippingHistoryRecordAmountViewModel} from \"./tipping-history-view-model.interface\";\nimport { observable, action, makeObservable } from \"mobx\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {GamesMap} from \"../../games/games.service.interface\";\nimport {HistoryController_GetTippingHistoryRequest, HistoryController_GetTippingHistoryResponse} from \"../../api/api.service\";\nimport {CyClass} from \"../../../../common/cy-classes\";\n\nexport class TippingHistoryBaseModel implements ITippingHistoryViewModel {\n constructor(protected readonly services: IServiceFactoryExtended) {\n makeObservable(this);\n }\n\n get daysIntervals(): number[] {\n return [30, 60, 90];\n }\n\n private _numberOfHistoryDays: number = 30;\n\n @observable.ref\n isLoading: boolean = false;\n\n @action.bound\n private _setIsLoading(value: boolean): void {\n this.isLoading = value;\n }\n\n @observable.ref\n records: ITippingHistoryRecordViewModel[] = [];\n\n @action.bound\n private _setRecords(value: ITippingHistoryRecordViewModel[]): void {\n this.records = value;\n }\n\n reset() {\n this._setIsLoading(false);\n this._setRecords([]);\n }\n\n @action.bound\n setNumberOfHistoryDays(numberOfDays: number): void {\n if(numberOfDays === this._numberOfHistoryDays) {\n return;\n }\n this._numberOfHistoryDays = numberOfDays;\n this.reset();\n this.loadAllRecords();\n }\n\n private async _getGamesInfo(serverResponse: HistoryController_GetTippingHistoryResponse): Promise {\n const result: GamesMap = {};\n const notInLayoutGames: number[] = [];\n\n serverResponse.TipHistory.forEach(record => {\n const gameType = record.GameTypeID;\n const gameInfo = this.services.games.gamesMap[gameType];\n if(gameInfo) {\n result[gameInfo.gameType] = gameInfo;\n } else {\n notInLayoutGames.push(gameType);\n }\n });\n\n if(notInLayoutGames.length > 0) {\n const gamesMap = await this.services.games.getGamesInfoForHistory(notInLayoutGames);\n Object.keys(gamesMap).forEach(gameType => {\n result[gameType] = gamesMap[gameType];\n });\n }\n\n return result;\n }\n\n private _getAmounts(recordData: HistoryController_GetTippingHistoryResponse['TipHistory'][0]): ITippingHistoryRecordAmountViewModel[] {\n return [\n {\n description: this.services.translation.translate('TIPPING_HISTORY_AMOUNT'),\n value: this.services.currency.formatMoney(recordData.TipAmount),\n cyClass: CyClass('cy-tipping-history-tip-value')\n },\n {\n description: this.services.translation.translate('CASH_BALANCE'),\n value: this.services.currency.formatMoney(recordData.AvailableBalanceAfterAction),\n cyClass: CyClass('cy-tipping-history-bankroll-value')\n }\n ];\n }\n\n\n async loadAllRecords(): Promise {\n if(this.isLoading) {\n return;\n }\n\n this._setIsLoading(true);\n\n try {\n const request: HistoryController_GetTippingHistoryRequest = {\n fromLastDays: this._numberOfHistoryDays,\n };\n \n const serverResponse = await this.services.api.historyController.getTippingHistory(request);\n const gamesMap = await this._getGamesInfo(serverResponse);\n const newRecords: ITippingHistoryRecordViewModel[] = [];\n\n\n for(let recordData of serverResponse.TipHistory) {\n const gameType = recordData.GameTypeID;\n const gameInfo = gamesMap[gameType];\n\n if (gameInfo) {\n newRecords.push({\n tipId: recordData.TipID?.toString(),\n gameTypeId: recordData.GameTypeID,\n gameName: gameInfo.title,\n gameImage: gameInfo.getGameImage({squareIcon: this.services.theme.shouldUseSquareIcons}),\n imagePlaceHolderUrl: gameInfo.getGameImagePlaceHolderUrl(this.services.theme.shouldUseSquareIcons),\n tipDate: new Date(recordData.TipDateTime),\n amounts: this._getAmounts(recordData)\n });\n } else {\n this.services.logger.error(`Could not get game info for game type ${gameType} in tipping history!`);\n }\n }\n\n this._setRecords(newRecords);\n } finally {\n this._setIsLoading(false);\n }\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {ITippingHistoryService} from \"./tipping-history.service.interface\";\nimport {ITippingHistoryViewModel} from \"./models/tipping-history-view-model.interface\";\nimport {TippingHistoryBaseModel} from \"./models/tipping-history-view-model\";\n\nexport class TippingHistoryService extends ServiceBase implements ITippingHistoryService {\n getTippingHistory(): ITippingHistoryViewModel {\n return new TippingHistoryBaseModel(this.services);\n }\n}\n","import {\n ILoyaltyIndicatorOptions,\n ILoyaltyIndicatorViewModel,\n ILoyaltyInitInfo,\n ILoyaltyStyle\n} from \"./loyalty-indicator-view-model.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {CGPEventSubscription} from \"../../sdk/cgp-sdk.interface\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\n\nexport class LoyaltyIndicatorModel implements ILoyaltyIndicatorViewModel {\n constructor(private readonly services: IServiceFactoryExtended, private readonly options: ILoyaltyIndicatorOptions) {\n const LoyaltyIndicatorConstructor = this.services.window.getGlobalProperty('rlpfweb').LoyaltyIndication;\n\n const loyaltyInitInfo: ILoyaltyInitInfo = this._createLoyaltyInfo();\n\n this._loyaltyRef = new LoyaltyIndicatorConstructor(loyaltyInitInfo);\n\n this._loyaltyRef.addEventListener('onloyaltydetailsclick', this._clickHandler);\n\n this.subscription = this.services.sdk.events.onFirebaseGotNewToken(({token}) => this.options.firebaseToken !== token)\n\n }\n\n private _createLoyaltyInfo(): ILoyaltyInitInfo {\n return {\n UserInfo: this.options.platformToken,\n FirebaseToken: this.options.firebaseToken,\n CID: this.services.user.cid,\n LanguageCode: this.services.language.currentLanguage,\n ClientContext: {\n BrandId: this.services.sdk.getBrandID(),\n ClientPlatform: this.services.sdk.getSkin().getClientPlatform(),\n ClientVersion: this.services.sdk.getSkin().getVersion(),\n ProductPackage: this.services.sdk.getProductPackageId(),\n SubBrandId: this.services.sdk.getBrandID(),\n },\n Logger: this.services.window.console,\n Style: this._createLoyaltyStyle()\n }\n }\n\n private _createLoyaltyStyle(): ILoyaltyStyle {\n\n let loyaltyStyleParams: ILoyaltyStyle = {\n BackgroundColor:\"transparent\",\n ShowBoxShadow: false,\n ShowUnderline:false,\n FontSize: 16,\n ArrowSize: 9,\n //Font: this.services.theme.currentTheme.font.family.body,\n ProgressBarHeight: 4,\n ArrowColor: \"#7b7b7b\",\n LOLArrowContainerRigh:\"5px\", \n\n }\n if (this.services.mediaQuery.lAndBelow) {\n let mobileParams: ILoyaltyStyle = {\n ...loyaltyStyleParams,\n LOLArrowContainerLeft:\"10px\",\n }\n return mobileParams; \n }\n else {\n let pcloyaltyStyle: ILoyaltyStyle = {\n ...loyaltyStyleParams,\n FontSize: 12,\n ArrowSize: 8,\n LOLContentPaddingLeft: 0,\n LOLArrowContainerRigh: \"-3px\",\n TextColor: \"#717171\",\n ProgressBarBackgroundColor: this.services.theme.currentTheme.colors.backgroundMiddleDark,\n ProgressBarBorderRadius: 8,\n LOLArrowTop: \"-3px\",\n }\n return pcloyaltyStyle\n }\n }\n\n private _clickHandler = async () => {\n await (await this.services.externalLinks).openMyAccount({\n tabId: MyAccountTab.LCChallenges\n });\n }\n\n private _loyaltyRef;\n private subscription: CGPEventSubscription;\n\n dispose(): void {\n this.subscription?.off();\n //this._loyaltyRef?.removeEventListener('onloyaltydetailsclick', this._clickHandler) //TO DO Verify with debugger if removeEventListener exist\n this._loyaltyRef?.Terminate();\n }\n\n} ","import {ServiceBase} from \"../ServiceBase\";\nimport {ILoyaltyService} from \"./loyalty-indicator.service.interface\"\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {ILoyaltyIndicatorViewModel} from \"./models/loyalty-indicator-view-model.interface\";\nimport {LoyaltyIndicatorModel} from \"./models/loyalty-indicator.model\";\nimport {Nullable} from \"../../../common/types/nullable-types\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class LoyaltyService extends ServiceBase implements ILoyaltyService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (!isAuthorized) {\n if (this._loadLoyaltyPromise) {\n this._loadLoyaltyPromise.then(model => {\n model.dispose();\n });\n this._loadLoyaltyPromise = null;\n }\n }\n }\n )\n }\n\n private _loadLoyaltyPromise: Nullable> = null;\n async init(): Promise {\n if (this._loadLoyaltyPromise) {\n return;\n }\n\n this._loadLoyaltyPromise = this._loadLoyalty();\n \n // clear cache promise\n this._loadLoyaltyPromise.catch((err) => {\n this._loadLoyaltyPromise = null;\n throw err;\n });\n\n }\n\n private async _loadLoyalty() {\n await this._loadLoyaltyScript();\n const fireBaseToken = await this._getFirebaseToken();\n const platformToken = await this.services.user.getPlatformToken();\n\n return new LoyaltyIndicatorModel(this.services, {\n platformToken: platformToken.token,\n firebaseToken: fireBaseToken,\n });\n }\n\n private _loadLoyaltyScriptPromise: Nullable> = null;\n private _loadLoyaltyScript(): Promise {\n if (!this._loadLoyaltyScriptPromise) {\n if(Check.isEmpty(this.services.configuration.servicesConfigs.Loyalty.scriptLink)){\n return Promise.resolve();\n }\n this._loadLoyaltyScriptPromise = this.services.scriptLoader.loadScript({\n url: this.services.configuration.servicesConfigs.Loyalty.scriptLink\n });\n }\n\n return this._loadLoyaltyScriptPromise;\n }\n\n private async _getFirebaseToken(): Promise {\n const fireBaseToken = this.services.sdk.getFirebaseToken();\n if (fireBaseToken) {\n return Promise.resolve(fireBaseToken);\n }\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n subscription.off();\n reject('onFirebaseGotNewToken timeout');\n }, 10000);\n\n const subscription = this.services.sdk.events.onFirebaseGotNewToken(({token}) => {\n subscription.off();\n clearTimeout(timeout);\n resolve(token);\n })\n })\n }\n}","import styled from \"styled-components\";\n\nexport const StatePopupWrapperBox = styled.div`\n max-width: 560px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-content: center;\n align-items: center;\n\n width: 25vw;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 82vw;\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow + \" and \" + theme.mediaQuery.landscape} {\n width: 56vw;\n }\n`;\n","import React from \"react\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {StatePopupWrapperBox} from \"./boxes/state-popup-wrapper.box\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport { ModalDialogActionsComponent } from \"../modal-dialog/modal-dialog-actions.component\";\nimport { DialogTextBox } from \"../modal-dialog/boxes/text/dialog-text.box\";\n\nexport interface IStatePopupComponentProps {\n onStateSelect: (stateID?: string) => any;\n onStateNotInListClick?: () => any;\n dialogHandler: IModalDialogHandler;\n}\n\nexport class StatePopupComponent extends OrbitComponent {\n\n private _onStateConfirmation = () => {\n this.props.onStateSelect();\n this._closeDialogBox();\n };\n\n private _onStateNotInListClick = () => {\n this.props.onStateNotInListClick();\n this._closeDialogBox();\n };\n\n private _closeDialogBox = () => {\n this.props.dialogHandler && this.props.dialogHandler.close();\n };\n\n private _getStateName = (): string => {\n return this.services.configuration.data.statePopup.stateName || '';\n }\n\n render() {\n\n return (\n \n {this.services.translation.translate(\"STATE_POPUP_HEADER\", {THE_STATE: this._getStateName()})}\n \n \n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const StatePopupErrorMessageBox = styled.div`\n color: ${({theme}) => theme.colors.danger};\n margin: 0.5rem auto 0;\n font-size: 1.6rem;\n font-weight: 700;\n`;\n","import styled from \"styled-components\";\n\nexport const StatePopupSelectWrapperBox = styled.div`\n width: 100%;\n max-width: 289px;\n margin: 0.5rem auto 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n","import React from \"react\";\nimport {StatePopupWrapperBox} from \"./boxes/state-popup-wrapper.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport { ModalDialogActionsComponent } from \"../modal-dialog/modal-dialog-actions.component\";\nimport { DialogTextBox } from \"../modal-dialog/boxes/text/dialog-text.box\";\nimport {OrbitComponentWithState} from \"../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {IStatePopupComponentProps} from \"./state-popup.component\";\nimport {StatePopupErrorMessageBox} from \"./boxes/state-popup-error-message.box\";\nimport {StatePopupSelectWrapperBox} from \"./boxes/state-popup-select-wrapper.box\";\nimport {Select} from \"../../basic-ui-components/form/select.component\";\n\ninterface IStatePopupWithDropdownComponentState {\n currentStateID: string;\n shouldShowError: boolean;\n}\n\nexport class StatePopupWithDropdownComponent extends OrbitComponentWithState {\n\n constructor(props) {\n super(props);\n this.state = {\n currentStateID: this._defaultOption,\n shouldShowError: false\n };\n }\n\n componentDidMount() {\n super.componentDidMount();\n this.setState({\n currentStateID: this.services.stateOfResidenceIdentifier.getUserSelectedState() || this._defaultOption\n });\n }\n\n private readonly _defaultOption = \"DEFAULT_OPTION\";\n\n private _onStateConfirmation = () => {\n if (this.state.currentStateID === this._defaultOption) {\n this.setState({\n shouldShowError: true\n });\n return;\n }\n\n this.props.onStateSelect(this.state.currentStateID);\n this._closeDialogBox();\n };\n\n private _onStateNotInListClick = () => {\n this.props.onStateNotInListClick();\n };\n\n private _closeDialogBox = () => {\n this.props.dialogHandler && this.props.dialogHandler.close();\n };\n\n private _updateSelection = (selection: string): void => {\n return this.setState({\n currentStateID: selection,\n shouldShowError: selection === this._defaultOption\n });\n };\n\n private _renderStateSelector() {\n if (!this.services.stateOfResidenceIdentifier.isOneSiteEnabled()) {\n return null;\n }\n\n return (\n \n );\n }\n\n private _renderOptions = (): JSX.Element[] => {\n const defaultOption = ;\n\n const stateOptions = this.services.stateOfResidenceIdentifier.getSupportedStates().map(sr =>\n \n );\n\n return [defaultOption, ...stateOptions];\n }\n\n private _renderErrorMessage = () => {\n if (!this.state.shouldShowError) {\n return null;\n }\n\n return \n {this.services.translation.translate(\"STATE_POPUP_NO_STATE_SELECTED\")}\n ;\n }\n\n render() {\n\n return (\n \n {this.services.translation.translate(\"CHOOSE_CONFIRM_STATE\")}\n \n {this._renderStateSelector()}\n {this._renderErrorMessage()}\n \n \n \n );\n }\n}\n//text: this.services.translation.translate(\"STATE_POPUP_OUTSIDE_TEXT\", {THE_STATE: stateName})","export const CGP_STATE_POPUP_LOCAL_STORAGE_KEY = 'cgp_state-popup';","import {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IStatePopupComponentProps, StatePopupComponent} from \"../../components/state-popup/state-popup.component\";\nimport React from \"react\";\nimport {StatePopupWithDropdownComponent} from \"../../components/state-popup/state-popup-with-dropdown.component\";\nimport {CGP_STATE_POPUP_LOCAL_STORAGE_KEY} from \"./state-popup-strategies-consts\";\n\nexport interface StatePopupStrategy {\n shouldDisplayStatePopup(forceDisplay?: boolean): boolean;\n onStateConfirmation(stateID?: string): void;\n onOtherStateClick(): void;\n getComponent(): React.ComponentType;\n getPopupTitle(): string;\n}\n\nexport class RegularStatePopupStrategy implements StatePopupStrategy {\n private _popupDisplayedLocalStorageKey = CGP_STATE_POPUP_LOCAL_STORAGE_KEY;\n\n constructor(private services: IServiceFactoryExtended) {\n }\n\n onOtherStateClick(): void {\n this.services.analytics.sendOrbitUserFlowEvent('Client_Message', 'Confirm_Location_Click', 'OUTSIDE_ONTARIO_LINK');\n this.services.location.push(this.services.sdk.getWrongLocationDetectionPath());\n }\n\n onStateConfirmation(stateID?: string): void {\n this.services.analytics.sendOrbitUserFlowEvent('Client_Message', 'Confirm_Location_Click', 'APPROVE');\n this.services.localStorage.setItem(this._popupDisplayedLocalStorageKey, true);\n }\n\n shouldDisplayStatePopup(forceDisplay?: boolean): boolean {\n return forceDisplay || Boolean(!this.services.localStorage.getItem(this._popupDisplayedLocalStorageKey));\n }\n\n getComponent(): React.ComponentType {\n return StatePopupComponent;\n }\n\n getPopupTitle(): string {\n return this.services.translation.translate(\"STATE_POPUP_TITLE\");\n }\n}\n\nexport class OneSiteStatePopupStrategy implements StatePopupStrategy {\n constructor(private services: IServiceFactoryExtended, private _shouldShowLoginFormSessionStorageKey: string) {\n }\n\n onOtherStateClick(): void {\n this.services.analytics.sendOrbitUserFlowEvent('Client_Message', 'Confirm_Location_Click', 'OTHER_STATE_CLICK');\n this.services.location.redirect(this.services.sdk.getWrongLocationDetectionPath());\n }\n\n onStateConfirmation(stateID?: string): void {\n //Product will probably want different reporting for one site one app flow\n this.services.analytics.sendOrbitUserFlowEvent('Client_Message', 'Confirm_Location_Click', 'APPROVE');\n if (stateID) {\n this.services.stateOfResidenceIdentifier.saveStateInCookie(stateID);\n this.services.sessionStorage.setItem(this._shouldShowLoginFormSessionStorageKey, true);\n this.services.window.reload();\n }\n }\n\n shouldDisplayStatePopup(forceDisplay?: boolean): boolean {\n return forceDisplay || !Boolean(this.services.stateOfResidenceIdentifier.getStateFromCookie());\n }\n\n getComponent(): React.ComponentType {\n return StatePopupWithDropdownComponent;\n }\n\n getPopupTitle(): string {\n //Product will probably want a different title for the one site flow popup.\n return this.services.translation.translate(\"STATE_POPUP_TITLE\");\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {IStateOfResidenceIdentifier} from \"./state-of-residence-identifier.interface\";\nimport React from \"react\";\nimport IStateOfResidence from \"../../../common/interfaces/state-of-residence.interface\";\nimport {\n IStatePopupDisplayParams\n} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/state-popup-display-params\";\nimport {OneSiteStatePopupStrategy, RegularStatePopupStrategy, StatePopupStrategy} from \"./state-popup-strategies\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {STATE_OF_RESIDENCE_COOKIE_KEY} from \"../../../common/const/state-of-residence-cookie_const\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nexport class StateOfResidenceIdentifierService extends ServiceBase implements IStateOfResidenceIdentifier {\n\n private _statePopupStrategy: StatePopupStrategy = null;\n private _shouldShowLoginFormSessionStorageKey: string = \"shouldShowLoginFormOnInit\";\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n if (this.services.location.currentUri.queryParams.hasParam(this._cookieKey)){\n this._onReceivedUserStateQueryParam(this.services.location.currentUri.queryParams.getParamValue(this._cookieKey));\n }\n\n /* We need this because, otherwise, we have a circular dependency between services:\n This service wants to open the login form, but then the login form checks whether it should\n display the state popup beforehand, that check is also done here in this service.\n */\n setTimeout(this._displayLoginForm, 0);\n }\n\n private _onReceivedUserStateQueryParam = (userSelectedState: string) => {\n this.saveStateInCookie(userSelectedState);\n const urlWithoutUserState = this.services.location.currentUri.removeSearchParam(this._cookieKey).toString();\n this.services.location.replace(urlWithoutUserState).catch((err) => {\n this.services.logger.error('Remove userSelectedState query param from URL failed!', err);\n });\n }\n\n private _displayLoginForm = async () => {\n if (this.services.sessionStorage.getItem(this._shouldShowLoginFormSessionStorageKey)) {\n this.services.sessionStorage.removeItem(this._shouldShowLoginFormSessionStorageKey);\n await this.services.user.waitForAutoLogin();\n if (!this.services.user.isAuthorized) {\n await this.services.user.openLogin();\n }\n }\n }\n\n get statePopupStrategy(): StatePopupStrategy {\n if (!Check.isNullOrUndefined(this._statePopupStrategy)) {\n return this._statePopupStrategy;\n }\n\n if (this.isOneSiteEnabled()){\n this._statePopupStrategy = new OneSiteStatePopupStrategy(this.services, this._shouldShowLoginFormSessionStorageKey);\n } else {\n this._statePopupStrategy = new RegularStatePopupStrategy(this.services);\n }\n\n return this._statePopupStrategy;\n }\n\n async displayStateSelectorPopup(props: IStatePopupDisplayParams = {}): Promise {\n\n (await this.services.sideMenu).closeMobileMenu();\n\n return new Promise((resolve, reject) => {\n if (!this.statePopupStrategy.shouldDisplayStatePopup(props.forceDisplay)) {\n return resolve();\n }\n\n const StatePopup = this.statePopupStrategy.getComponent();\n\n this.services.dialog.showModal(dialogHandler =>\n {\n this.statePopupStrategy.onStateConfirmation(stateID);\n return resolve();\n }}\n onStateNotInListClick={()=> {\n this.statePopupStrategy.onOtherStateClick();\n reject();\n }}\n />, {\n title: this.statePopupStrategy.getPopupTitle(),\n icon: this.services.theme.currentTheme.icons.locationIcon,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n onClosed: () => {\n this.services.sdk.eventsTrigger.locationPopupClosed();\n return reject();\n },\n shouldBeClosedOnlyByUser: true\n });\n });\n }\n\n private _cookieKey = STATE_OF_RESIDENCE_COOKIE_KEY;\n\n saveStateInCookie(stateID: string): void {\n this.removeStateCookie();\n this.services.cookies.createCookie(this._cookieKey, stateID);\n }\n\n removeStateCookie(): void {\n if (this.services.cookies.getCookie(this._cookieKey)) {\n this.services.cookies.createCookie(this._cookieKey, '');\n }\n }\n\n //The active state can come either from the cookie(chosen by user in the dropdown)\n //Or from the server, in case site infra detects it by IP.\n getUserSelectedState(): string {\n return this.getStateFromCookie() || this.services.configuration.userSelectedState || \"\";\n }\n\n getStateFromCookie(): string {\n return this.services.cookies.getCookie(this._cookieKey) || \"\";\n }\n\n getSupportedStates(): IStateOfResidence[] {\n return this.services.sdk.getSupportedStates();\n }\n\n isOneSiteEnabled(): boolean {\n return this.services.configuration.data?.oneSite?.isEnabled && this.getSupportedStates().length > 0;\n }\n\n shouldDisplayStateSelectorButton(): boolean {\n return this.isOneSiteEnabled() && !this.services.user.isAuthorized;\n }\n\n appendUserSelectedStateToLink(sourceLink: string): string {\n const userSelectedState = this.getStateFromCookie();\n if (this.isOneSiteEnabled() && !Check.isEmpty(userSelectedState)){\n const url = new URL(sourceLink);\n url.searchParams.append(STATE_OF_RESIDENCE_COOKIE_KEY, userSelectedState);\n return url.href;\n }\n return sourceLink;\n }\n}\n\n","import {IOnboardingStep} from \"../onboarding-tour.service.interface\";\n\nexport class OnboardingWelcomeStep implements IOnboardingStep {\n mainText = \"ONBOARDING_WELCOME_STEP_MAIN_TEXT\";\n secondaryText = \"ONBOARDING_WELCOME_STEP_SECONDARY_TEXT\";\n get targets() {\n return [];\n }\n}\n","export interface PointDefinition {\n readonly x: number;\n readonly y: number;\n}\n\nexport interface SegmentDefinition {\n readonly A: PointDefinition;\n readonly B: PointDefinition;\n}\n\nexport class Segment implements SegmentDefinition {\n constructor(public readonly A: PointDefinition, public readonly B: PointDefinition) {}\n\n private _quadLength: number;\n get quadLength() {\n if (!this._quadLength) {\n this._quadLength = GeometryHelper.quadraticDistanceBetweenPoints(this.A, this.B);\n }\n return this._quadLength;\n }\n\n private _length: number;\n get length() {\n if (!this._length) {\n this._length = Math.sqrt(this._quadLength);\n }\n return this._length;\n }\n\n private _slope: number;\n get slope() {\n if (!this._slope) {\n this._slope = GeometryHelper.slope(this.A, this.B);\n }\n return this._slope;\n }\n\n private _slopePerpendicular: number;\n get slopePerpendicular() {\n if (!this._slopePerpendicular) {\n this._slopePerpendicular = GeometryHelper.slopePerpendicular(this.A, this.B);\n }\n return this._slopePerpendicular;\n }\n\n private _centerPoint: PointDefinition;\n get centerPoint(): PointDefinition {\n if (!this._centerPoint) {\n this._centerPoint = GeometryHelper.getPointInSegment(this.A, this.B, 0.5);\n // this._centerPoint = {\n // x: (this.A.x + this.B.x)/2,\n // y: (this.A.y + this.B.y)/2\n // };\n }\n return this._centerPoint;\n }\n}\n\nexport interface CircleDefinition {\n readonly center: PointDefinition;\n readonly radius: number;\n}\nexport class Circle implements CircleDefinition {\n constructor(public readonly center: PointDefinition, public readonly radius: number) {}\n translate(dx: number, dy: number) {\n let centerPoint = {\n x: this.center.x + dx,\n y: this.center.y + dy\n };\n return new Circle(centerPoint, this.radius);\n }\n scale(ratio: number, freeTerm: number = 0) {\n let newRadius: number = this.radius * ratio + freeTerm;\n return new Circle(this.center, Math.max(0, newRadius));\n }\n scaleWith(amount: number) {\n return this.scale(1, amount);\n }\n scaleBy(amount: number) {\n return this.scale(amount);\n }\n}\n\nexport class GeometryHelper {\n static slope(A: PointDefinition, B: PointDefinition) {\n if (A.x === B.x) {\n // the line is vertical, the slope is infinite\n return Infinity;\n }\n if (A.y === B.y) {\n // the line is horizontal, the slope is 0.\n // I'm returning 0 because the formula might return -0 and while this may be valid JS is not valid math\n return 0;\n }\n return (B.y - A.y)/(B.x - A.x);\n }\n static slopePerpendicular(A: PointDefinition, B: PointDefinition) {\n if (A.y === B.y) {\n // the line is horizontal, the slope is 0, so the perpendicular line will have the slope Infinity\n return Infinity;\n }\n if (A.x === B.x) {\n // the line is vertical, the slope is infinite, so the perpendicular line will have the slope 0\n // I'm returning 0 because the formula might return -0 and while this may be valid JS is not valid math\n return 0;\n }\n return (A.x - B.x)/(B.y - A.y);\n }\n\n /**\n * normalize == true means that we force the radians to be between [0, 2*Math.PI)\n * If you don't want normalization call the function with the second parameter \"false\"\n *\n * Observations:\n * For normalization between [0, 2*Math.PI) use Math.floor at the factor computation\n * For normalization between [-Math.PI, Math.PI) use Math.round at the factor computation\n */\n static degreesToRadians(degrees: number, normalize: boolean = true) {\n if (normalize) {\n let factor = Math.floor(degrees / 360);\n degrees = degrees - factor * 360;\n }\n return degrees * (Math.PI / 180);\n }\n\n /**\n * normalize == true means that we force the radians to be between [0, 360)\n * If you don't want normalization call the function with the second parameter \"false\"\n *\n * Observation.\n * For normalization between [0, 360) use Math.floor at the factor computation\n * For normalization between [-180, 180) use Math.round at the factor computation\n */\n static radiansToDegrees(radians: number, normalize: boolean = true) {\n let degrees = radians * (180 / Math.PI);\n if (!normalize) {\n return degrees;\n }\n let factor = Math.floor(degrees / 360);\n return degrees - factor * 360;\n }\n\n /**\n *\n */\n static slopeToAngle(slope: number, resultInDegrees: boolean = true) {\n let radians = Math.atan(slope);\n return resultInDegrees ? GeometryHelper.radiansToDegrees(radians) : radians;\n }\n\n static quadraticDistanceBetweenPoints(A: PointDefinition, B: PointDefinition) {\n return Math.pow(A.x - B.x, 2) + Math.pow(A.y - B.y, 2);\n }\n\n static distanceBetweenPoints(A: PointDefinition, B: PointDefinition) {\n return Math.sqrt(GeometryHelper.quadraticDistanceBetweenPoints(A, B));\n }\n\n /**\n * In a segment OA of lenght d, get the point D that is between O and A, at a distance of d1 from O and d - d1 from A\n */\n static getIntermediateCoordinate(x1: number, x2: number, ratio: number): number {\n return x1 + ((x2 - x1)*ratio);\n }\n /**\n * In a segment OA of lenght d, get the point D that is between O and A, at a distance of d1 from O and d - d1 from A\n */\n static getPointInSegment(O: PointDefinition, A: PointDefinition, ratio: number): PointDefinition {\n let x = GeometryHelper.getIntermediateCoordinate(O.x, A.x, ratio);\n let y = GeometryHelper.getIntermediateCoordinate(O.y, A.y, ratio);\n return {x, y};\n }\n\n static getCenterOfDOMRect(r: DOMRect): PointDefinition {\n // same as getIntermediateCoordinate or getPointInSegment with ratio 0.5 (1/2) but it does 2 mathematic operations instead of 4\n // the equivalent is getIntermediateCoordinate(r.left, r.left + r.width, 0.5)\n // probably an unnecessary optimization but anyway\n return {\n x: r.left + r.width/2,\n y: r.top + r.height/2\n };\n }\n\n /**\n * In romanian is \"cercul circumscris dreptunghiului\" I hope google translate did a good job here\n */\n static getCircleCircumscribedToTheRectangle(r: DOMRect): Circle {\n let center = GeometryHelper.getCenterOfDOMRect(r);\n return new Circle(center, GeometryHelper.distanceBetweenPoints(center, {x: r.left, y: r.top}));\n }\n}\n\nif (!window[\"GeometryHelper\"]) {\n window[\"GeometryHelper\"] = GeometryHelper;\n}\n","import {CySelector} from \"../../../../common/cy-classes\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {GeometryHelper} from \"../geometry.helper\";\nimport {IOnboardingStep} from \"../onboarding-tour.service.interface\";\n\nexport class OnboardingMainMenuStep implements IOnboardingStep {\n constructor(private _services: IServiceFactoryExtended) {}\n mainText = \"ONBOARDING_MENU_STEP_MAIN_TEXT\";\n secondaryText = \"ONBOARDING_MENU_STEP_SECONDARY_TEXT\";\n get targets() {\n if (this._services.mediaQuery.lAndBelow) {\n let targetElement = document.querySelector(CySelector(\"cy-burger-button\"));\n if (!targetElement) {\n return [];\n }\n let rectangle = targetElement.getBoundingClientRect();\n let _target = GeometryHelper.getCircleCircumscribedToTheRectangle(rectangle);\n _target = _target.scaleWith(20);\n return [_target];\n } else {\n let allMenuItems = document.querySelectorAll(CySelector(\"cy-menu-item\"));\n if (allMenuItems.length === 0) {\n return [];\n }\n if (allMenuItems.length <= 2) {\n return [GeometryHelper.getCircleCircumscribedToTheRectangle(allMenuItems[allMenuItems.length - 1].getBoundingClientRect())];\n }\n let secondMenuItem = allMenuItems[1];\n let lastMenuItem = allMenuItems[allMenuItems.length - 1];\n if (this._services.mediaQuery.xlAndBelow || this._services.mediaQuery.lowHeight) {\n if (allMenuItems[2]) {\n secondMenuItem = allMenuItems[2];\n }\n }\n return [\n GeometryHelper.getCircleCircumscribedToTheRectangle(lastMenuItem.getBoundingClientRect()),\n GeometryHelper.getCircleCircumscribedToTheRectangle(secondMenuItem.getBoundingClientRect())\n ]\n }\n }\n}","import {CySelector} from \"../../../../common/cy-classes\";\nimport {remToPx} from \"../../../../utils/rem-to-px\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {GeometryHelper} from \"../geometry.helper\";\nimport {IOnboardingStep} from \"../onboarding-tour.service.interface\";\n\nexport class OnboardingUserMenuStep implements IOnboardingStep {\n constructor(private _services: IServiceFactoryExtended) {}\n mainText = \"ONBOARDING_USER_AREA_MAIN_TEXT\";\n secondaryText = \"ONBOARDING_USER_AREA_SECONDARY_TEXT\";\n get targets() {\n if (!this._services.user.isAuthorized) {\n return [];\n }\n let targetSelector = this._services.mediaQuery.lAndBelow ? CySelector(\"cy-welcome-component\") : CySelector(\"cy-profile-picture\");\n let targetElement = document.querySelector(targetSelector);\n if (!targetElement) {\n return [];\n }\n let rectangle = targetElement.getBoundingClientRect();\n let _target = GeometryHelper.getCircleCircumscribedToTheRectangle(rectangle);\n if (this._services.mediaQuery.xlAndAbove && this._services.user.isAuthorized) {\n let translateYAmount = remToPx(6); // translate 6rem, but I need the value in px\n _target = _target.scale(1.5).translate(0, translateYAmount);\n }\n return [_target];\n }\n}\n","export enum FeatureId {\n \"OnboardingTour\"= 1\n}","export function remToPx(rem: number = 1) {\n return rem * parseFloat(getComputedStyle(document.documentElement).fontSize);\n}\n","import {observable, action, makeObservable} from \"mobx\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport { DomEventSubscription } from '../../../utils/event-listener-registration';\nimport {IOnboardingStep, IOnboardingTourService} from \"./onboarding-tour.service.interface\";\nimport {OnboardingWelcomeStep} from \"./steps/welcome.step\";\nimport {OnboardingMainMenuStep} from \"./steps/main-menu.step\";\nimport {OnboardingUserMenuStep} from \"./steps/user-menu.step\";\nimport {FeatureId} from \"../features-toggle-management/FeatureId\";\n\nexport class OnboardingTourService extends ServiceBase implements IOnboardingTourService {\n private _onScrollSubscription: DomEventSubscription | null = null;\n private _enabledAccordingToRegistrationTime: boolean;\n private _enabledAccordingToAB: boolean;\n\n readonly enabled: boolean = false;\n readonly steps: IOnboardingStep[];\n @observable.ref\n isOpened = false;\n @observable.ref\n stepIndex = 0;\n @observable.ref\n isThereRunningApps = true;\n\n\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n makeObservable(this);\n this.enabled = this.services.configuration.data.onboardingTour?.enabled;\n this._enabledAccordingToAB = this.services.configuration.data.onboardingTour?.enabledAccordingToAB;\n this._enabledAccordingToRegistrationTime = this.services.configuration.data.onboardingTour?.enabledAccordingToRegistrationTime;\n\n if (this.enabled) {\n this.services.appLauncher.then(appLauncher => {\n this.reaction(() => appLauncher.isThereRunningApps, (isThereRunningApps) => {\n this.isThereRunningApps = isThereRunningApps;\n }, {\n fireImmediately: true\n });\n })\n let configSteps = this.services.configuration.data.onboardingTour?.stepIds || [];\n try {\n this.steps = configSteps.map((configStepKey) => this.getStepInstance(configStepKey));\n } catch (e) {\n // bad step configuration. revert enabled flag to false\n this.enabled = false;\n this.services.logger.error(e);\n }\n if (this.steps.length === 0) {\n this.enabled = false;\n }\n }\n\n if (this.enabled) {\n this.reaction(\n () => this.services.user.isAuthorized,\n (authorized) => this._onOauthChange(authorized),\n {\n fireImmediately: true\n }\n );\n }\n\n }\n private _onOauthChange = async(authorized: boolean) => {\n this._removeScrollSubscription();\n const shouldShowFeature = await this.services.featuresToggleManagement.shouldShowFeature(FeatureId.OnboardingTour);\n if (authorized &&\n this.enabled &&\n shouldShowFeature &&\n this.isEnabledAccordingToAB &&\n this.isEnabledAccordingToRegistrationTime) {\n // set a scroll event listener because the onboarding should be shown as soon as the user start's scrolling\n this._onScrollSubscription = this.services.window.subscribeTo.scroll(this._onWindowScroll);\n }\n };\n\n get isEnabledAccordingToAB() {\n return !this._enabledAccordingToAB || this.services.abTestingFeatureDataProvider.onboardingTourEnabled;\n }\n\n get isEnabledAccordingToRegistrationTime() {\n return !this._enabledAccordingToRegistrationTime || this.services.user.daysSinceRegistration < 30;\n }\n\n private _removeScrollSubscription = () => {\n // remove scroll event listener\n if (this._onScrollSubscription) {\n this._onScrollSubscription.dispose();\n this._onScrollSubscription = null;\n }\n };\n private _onWindowScroll = () => {\n // Check if this.services.routing.currentRoute?.data?.arenaType because we show onboarding only for home page and arenas\n if (this.services.routing.currentRoute?.data?.arenaType && this.services.window.scrollY > 200) {\n this.open();\n }\n };\n\n @action\n open() {\n if (!this.enabled) {\n return;\n }\n // Set that onboarding was shown\n this.services.featuresToggleManagement.updateFeatureCounter(FeatureId.OnboardingTour);\n\n // Remove scroll subscription\n this._removeScrollSubscription();\n // reset step index is for testing purposes\n this.stepIndex = 0;\n this.isOpened = true;\n }\n @action\n close() {\n this.isOpened = false;\n }\n\n @action\n nextStep() {\n this.stepIndex = Math.min(this.stepIndex + 1, this.steps.length - 1);\n return this.stepIndex;\n }\n\n private getStepInstance(configStepKey: string) {\n switch (configStepKey) {\n case \"welcomeStep\":\n return new OnboardingWelcomeStep();\n case \"mainMenuStep\":\n return new OnboardingMainMenuStep(this.services);\n case \"userMenuStep\":\n return new OnboardingUserMenuStep(this.services);\n default:\n throw new Error(`No step for this key ${configStepKey}`);\n }\n }\n\n // This code is very similar to the display getter from on-boarding-tooltip.model.ts difference is that one counts all overlay consumers except himself.\n // That's why this display will return true after on-boarding-tooltip.model.ts.\n // But because those two cases are particular and specific I choose not to extract this method in a more generic one.\n get allClearToDisplayOnboarding(): boolean {\n const orbitOverlayConsumersCount = this.services.overlay.countCurrentConsumers(consumer => {\n return consumer.needsOverlay;\n });\n const sdkHasOpenOverlays = this.services.sdk.hasOpenOverlays;\n const areRunningApps = this.isThereRunningApps;\n const hasDialogs = this.services.dialog.countDialogs({includeHidden: true}) > 0;\n\n //The reason we put the values in those variables is to make sure that this display getter depends on all these observables.\n return !(sdkHasOpenOverlays\n || areRunningApps\n || hasDialogs\n || orbitOverlayConsumersCount > 0);\n }\n}\n","import {INyxService} from \"./nyx.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\n\nexport class NyxService extends ServiceBase implements INyxService {\n get useNewIntegration(): boolean {\n if(this.services.device.hybrid.isEmbedded) {\n return this.services.hybrid.isNyxIframeSupported() && this.services.configuration.servicesConfigs.NYX.useNewIntegration;\n } else {\n return this.services.configuration.servicesConfigs.NYX.useNewIntegration;\n }\n }\n}","import {TooltipBaseModel} from \"../tooltip-base/tooltip-base.model\";\nimport {action, makeObservable, observable, reaction, runInAction} from \"mobx\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IOnBoardingTooltipsContainer} from \"./on-boarding-tooltips-container.interface\";\nimport {IOnBoardingTooltipOptions} from \"./on-boarding-tooltip-options.interface\";\nimport {Check} from \"@sparkware/app-utils\";\n\n\nexport abstract class OnBoardingTooltipModel extends TooltipBaseModel {\n constructor(protected readonly onBoardingTooltipSContainer: IOnBoardingTooltipsContainer,\n services: IServiceFactoryExtended,\n options: IOnBoardingTooltipOptions) {\n super(services, options);\n makeObservable(this);\n this._loadPersistedValuesFromLocalStorage();\n\n reaction(() => this.services.user.isAuthorized, (isAuthorized) => {\n if(!isAuthorized) {\n this.sessionDisplayCount = 0;\n }\n }, {\n fireImmediately: true\n });\n\n this.services.appLauncher.then(appLauncher => {\n reaction(() => appLauncher.isThereRunningApps, (isThereRunningApps) => {\n this._isThereRunningApps = isThereRunningApps;\n }, {\n fireImmediately: true\n })\n });\n\n this.services.gameRunner.then(gameRunner => {\n reaction(() => gameRunner.currentRunningGame, (currentRunningGame) => {\n this._isGameRunning = Boolean(currentRunningGame);\n }, {\n fireImmediately: true\n })\n });\n }\n\n @observable.ref\n private _isThereRunningApps = true;\n\n @observable.ref\n private _isGameRunning = true;\n\n protected abstract _getElementToAttach(): HTMLElement | null;\n \n shouldDisplay(): boolean {\n const orbitOverlayConsumersCount = this.services.overlay.countCurrentConsumers(consumer => {\n if(consumer === this.onBoardingTooltipSContainer) {\n return false;\n }\n\n return consumer.needsOverlay;\n });\n\n const isOnBoardingTooltipsEnabled = this.onBoardingTooltipSContainer.isOnBoardingEnabled;\n const isAuthorized = this.services.user.isAuthorized;\n const sdkHasOpenOverlays = this.services.sdk.hasOpenOverlays;\n const areRunningApps = this._isThereRunningApps;\n const areOpenDialogs = this.services.dialog.hasOpenDialogs;\n const isOrbitRoute = this.services.routing.isOrbitRoute(this.services.location.currentUri.pathName);\n const currentRoutePreventsNotifications = Boolean(this.services.routing.currentRoute.data?.preventNotifications);\n const isGameRunning = this._isGameRunning;\n const hasOpenToasters = this.services.toaster.hasOpenToasters;\n const isOnboardingTourOpen = this.services.onboardingTour.isOpened;\n\n //The reason we put the values in those variables is to make sure that this method depends on all these observables.\n\n return isOnBoardingTooltipsEnabled\n && isAuthorized\n && isOrbitRoute\n && orbitOverlayConsumersCount === 0\n && !sdkHasOpenOverlays\n && !areRunningApps\n && !areOpenDialogs\n && !currentRoutePreventsNotifications\n && !this._hasReachedMaximumDisplayCount\n && !this._wasDisplayedOnCurrentSession\n && !isGameRunning\n && !hasOpenToasters\n && !isOnboardingTourOpen;\n }\n\n\n closeTooltip(): void {\n super.closeTooltip();\n this.totalDisplayCount++;\n this.sessionDisplayCount++;\n }\n\n onToolTipRendered(tooltipContainer: HTMLElement): void {\n super.onToolTipRendered(tooltipContainer);\n }\n\n @action\n private _loadPersistedValuesFromLocalStorage(): void {\n let storageValue = this.services.localStorage.getItem(this._totalDisplayCountLocalStorageKey);\n if(storageValue) {\n this._totalDisplayCount = parseInt(storageValue);\n }\n\n storageValue = this.services.localStorage.getItem(this._sessionDisplayCountLocalStorageKey);\n if(storageValue) {\n this._sessionDisplayCount = parseInt(storageValue);\n }\n }\n\n private get _totalDisplayCountLocalStorageKey(): string {\n return `${this.options.localStorageKey}.totalDisplayCount`;\n }\n\n private get _sessionDisplayCountLocalStorageKey(): string {\n return `${this.options.localStorageKey}.sessionDisplayCount`;\n }\n\n @observable.ref\n private _totalDisplayCount: number = 0;\n get totalDisplayCount(): number {\n if(Check.isNullOrUndefined(this.options.maximumDisplayCount)) {\n return 0;\n }\n\n return this._totalDisplayCount;\n\n }\n set totalDisplayCount(value: number) {\n if(!Check.isNullOrUndefined(this.options.maximumDisplayCount)) {\n runInAction(() => this._totalDisplayCount = value);\n this.services.localStorage.setItem(this._totalDisplayCountLocalStorageKey, value);\n }\n }\n\n @observable.ref\n private _sessionDisplayCount: number = 0;\n\n get sessionDisplayCount(): number {\n return this._sessionDisplayCount;\n }\n\n set sessionDisplayCount(value: number) {\n runInAction(() => this._sessionDisplayCount = value);\n this.services.localStorage.setItem(this._sessionDisplayCountLocalStorageKey, value);\n }\n\n\n protected get _hasReachedMaximumDisplayCount(): boolean {\n if(Check.isNullOrUndefined(this.options.maximumDisplayCount)) {\n return false;\n }\n return this.totalDisplayCount >= this.options.maximumDisplayCount;\n }\n\n protected get _wasDisplayedOnCurrentSession(): boolean {\n return this.sessionDisplayCount >= 1;\n }\n\n\n}","import styled, {css} from \"styled-components\";\n\nexport const IconTitleTextTooltipContainerBox = styled.div<{showCursor: boolean}>`\n display: flex;\n align-content: center;\n align-items: center;\n ${props => props.showCursor ? css`cursor: pointer` : ''}\n `;","import styled from \"styled-components\";\nimport {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\n\nconst IconTitleTextTooltipTextContainerDefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n\n ${({theme}) => theme.font.presets.bold};\n font-size: 12px;\n `;\n\nconst IconTitleTextTooltipTextContainerMrGreenBox = styled(IconTitleTextTooltipTextContainerDefaultBox)`\n color: ${({theme}) => theme.colors.brandSecondaryContrast};\n font-weight: 400;\n `;\n\nexport const IconTitleTextTooltipTextContainerBox = styledByTheme(IconTitleTextTooltipTextContainerDefaultBox)\n .forMrGreen(IconTitleTextTooltipTextContainerMrGreenBox)\n .apply();","import styled from \"styled-components\";\n\nexport const IconTitleTextTooltipTitleDefaultBox = styled.div`\n color: ${props => props.theme.colors.brandPrimary};\n ${({theme}) => theme.font.presets.bold};\n font-size: 12px;\n`;","import styled from \"styled-components\";\nimport {IconTitleTextTooltipTitleDefaultBox} from \"./title.default.box\";\n\nexport const IconTitleTextTooltipTitleMrGreenBox = styled(IconTitleTextTooltipTitleDefaultBox)`\n color: ${props => props.theme.colors.brandPrimaryDark};\n`;","import {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\nimport {IconTitleTextTooltipTitleDefaultBox} from \"./title.default.box\";\nimport {IconTitleTextTooltipTitleMrGreenBox} from \"./title.mrgreen.box\";\n\nexport const IconTitleTextTooltipTitleBox = styledByTheme(IconTitleTextTooltipTitleDefaultBox)\n .forMrGreen(IconTitleTextTooltipTitleMrGreenBox)\n .apply();","import styled from \"styled-components\";\n\nexport const IconTitleTextTooltipIconBox = styled.img`\n height: 30px;\n width: 30px;\n `;\n ","import styled from \"styled-components\";\n\nexport const SeparatorDefaultBox = styled.div`\n height: 38px;\n width: 2.5px;\n margin: 0 9px;\n background-repeat: no-repeat;\n background: ${props => `radial-gradient(closest-side at 50% 50%,${props.theme.colors.brandPrimary} 0%,${props.theme.colors.brandPrimary}70 85%,${props.theme.colors.brandPrimary}00 100%)`};\n `;\n","import styled from \"styled-components\";\nimport { SeparatorDefaultBox } from \"./separator.default.box\";\n\nexport const Separator777Box = styled(SeparatorDefaultBox)`\n width: 2px;\n`;\n","import styled from \"styled-components\";\nimport { SeparatorDefaultBox } from \"./separator.default.box\";\n\nexport const SeparatorMrGreenBox = styled(SeparatorDefaultBox)`\n background: ${props => props.theme.colors.brandSecondaryLight};\n width: 1px;\n`;\n","import { styledByTheme } from \"../../../../../../themes/architecture/styled-by-theme\";\nimport { Separator777Box } from \"./separator.777.box\";\nimport { SeparatorDefaultBox } from \"./separator.default.box\";\nimport {SeparatorMrGreenBox} from \"./seperator.mrgreen.box\";\n\nexport const SeparatorBox = styledByTheme(SeparatorDefaultBox)\n .forCasino777(Separator777Box)\n .forMrGreen(SeparatorMrGreenBox)\n .apply();\n\n\n","import styled from \"styled-components\";\n\nexport const IconContainerDefaultBox = styled.div``","import styled from \"styled-components\";\nimport {IconContainerDefaultBox} from \"./icon-container.default.box\";\n\nexport const IconContainerMrgreenBox = styled(IconContainerDefaultBox)`\n color: ${props => props.theme.colors.brandPrimaryDark};\n`","import {styledByTheme} from \"../../../../../../themes/architecture/styled-by-theme\";\nimport {IconContainerDefaultBox} from \"./icon-container.default.box\";\nimport {IconContainerMrgreenBox} from \"./icon-container.mrgreen.box\";\n\nexport const IconContainerBox = styledByTheme(IconContainerDefaultBox).forMrGreen(IconContainerMrgreenBox).apply();","import React, {ReactNode} from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {IconTitleTextTooltipContainerBox} from \"./boxes/container.box\";\nimport {IconTitleTextTooltipTextContainerBox} from \"./boxes/text-container.box\";\nimport {IconTitleTextTooltipTitleBox} from \"./boxes/title.box\";\nimport {IconTitleTextTooltipIconBox} from \"./boxes/icon.box\";\nimport { Check } from \"@sparkware/app-utils\";\nimport { SeparatorBox } from \"./boxes/separator/separator.box\";\nimport {observer} from \"mobx-react\";\nimport {IconContainerBox} from \"./boxes/icon-container/icon-container.box\";\n\ninterface IconHeaderTextTooltipProps {\n icon: string | ReactNode;\n title?: string;\n text: string | ReactNode;\n onClick?: () => any;\n className?: string;\n}\n\n@observer\nexport class IconTitleTextTooltip extends OrbitComponent {\n render() {\n const icon = Check.isString(this.props.icon) ? \n :\n this.props.icon;\n\n return (\n \n \n {icon}\n \n \n \n {this.props.title && {this.props.title}}\n {this.props.text}\n \n \n );\n }\n}\n","import {OnBoardingTooltipModel} from \"../on-boarding-tooltip.model\";\n\nimport {IOnBoardingTooltipsContainer} from \"../on-boarding-tooltips-container.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {IconTitleTextTooltip} from \"../../../../components/tooltip/tooltips/icon-title-text/icon-title-text.tooltip\";\nimport React from \"react\";\nimport {\n TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE,\n TOOLTIP_TARGET_FREE_PLAY_INDICATOR,\n TOOLTIP_TARGET_GIFT_MINI_ORBIT_INDICATOR\n} from \"../on-boarding-tooltip-target-selectors\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {makeObservable} from \"mobx\";\n\nexport class FreePlayOnBoardingTooltipModel extends OnBoardingTooltipModel {\n\n constructor(tooltipsContainer: IOnBoardingTooltipsContainer,\n services: IServiceFactoryExtended) {\n\n super(tooltipsContainer, services, {\n renderContent: () => (),\n timeout: TimeSpan.fromSeconds(7),\n localStorageKey: 'free_play_on_boarding_tooltip',\n maximumDisplayCount: 5,\n showOverlay: true,\n showCloseButton: false,\n closeOnClickOutside: true,\n animated: true,\n });\n makeObservable(this);\n }\n\n shouldDisplay(): boolean {\n //we use separate variables to make sure that this method depends on all the observable involved in the condition\n const hasVouchers = this.services.freePlay.hasVouchers;\n const commonConditions = super.shouldDisplay();\n\n return hasVouchers && commonConditions;\n\n }\n\n protected _getElementToAttach(): HTMLElement| null {\n const mobileElement = this.services.dom.querySelector(`.${TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE}`) as HTMLElement;\n\n if(mobileElement) {\n return mobileElement;\n }\n\n const pcElement = this.services.dom.querySelector(`.${TOOLTIP_TARGET_FREE_PLAY_INDICATOR}`) as HTMLElement;\n\n if(pcElement) {\n return pcElement;\n }\n\n // mini-orbit\n return this.services.dom.querySelector(`.${TOOLTIP_TARGET_GIFT_MINI_ORBIT_INDICATOR}`) as HTMLElement;\n }\n\n onToolTipRendered(tooltipContainer: HTMLElement) {\n super.onToolTipRendered(tooltipContainer);\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Show\", \"FP_Bubble\");\n }\n\n\n private _onTooltipClicked = async () => {\n this.closeTooltip();\n if (this.services.miniOrbit.isEnabled) {\n this.services.miniOrbit.openFreePlays()\n } else {\n (await this.services.userMenu).openRewards();\n }\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Click\", \"FP_Bubble\");\n }\n}","import { styledBox } from \"../../../../../themes/architecture/styled-box\";\n\nexport const IconContainerBox = styledBox('IconContainerBox');","import styled from \"styled-components\";\n\nexport const IOSAddToHomeShareIconBox = styled.img`\n width: 10px;\n height: 15px;\n margin: 0 5px;\n `;\n","import styled from \"styled-components\";\nimport { IconTitleTextTooltipTextContainerBox } from \"../../icon-title-text/boxes/text-container.box\";\n\nexport const MessageBodyContainerBox = styled(IconTitleTextTooltipTextContainerBox)`\n ${({theme}) => theme.font.presets.regular};\n `;\n\n export const MessageBodyBoldContainerBox = styled.span`\n ${({theme}) => theme.font.presets.bold};\n `;\n","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {IconTitleTextTooltip} from \"../icon-title-text/icon-title-text.tooltip\";\nimport { IconContainerBox } from \"./boxes/icon-container.box\";\nimport {IOSAddToHomeShareIconBox} from \"./boxes/ios-add-to-home-share-icon.box\";\nimport { MessageBodyContainerBox, MessageBodyBoldContainerBox } from \"./boxes/message-body-container.box\";\n\nexport interface IosAddToHomeScreenComponentProps {\n brandName: string;\n\n onClicked();\n}\n\nexport class IosAddToHomeScreenComponent extends OrbitComponent {\n\n render() {\n const translationService = this.services.translation;\n\n const logoIcon = this.services.theme.currentTheme.images.appIcon.toString();\n const iosShareIcon = this.services.theme.currentTheme.images.iosShare.toString();\n\n const body = \n {translationService.translate(\"PWA_QUICK_LAUNCH\", {BRAND: this.props.brandName})}\n
    \n {translationService.translate(\"PWA_TAP\")}\n \n \n {translationService.translate(\"PWA_ADD_TO_HOME_SCREEN\")}\n \n
    \n
    ;\n\n const icon = ;\n\n return \n }\n}\n","import {OnBoardingTooltipModel} from \"../on-boarding-tooltip.model\";\nimport {IOnBoardingTooltipsContainer} from \"../on-boarding-tooltips-container.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport React from \"react\";\nimport {stickToBottomTooltipModifier} from \"../../tooltip-base/tooltip-modifiers\";\nimport {\n IosAddToHomeScreenComponent\n} from \"../../../../components/tooltip/tooltips/ios-add-to-home/ios-add-to-home.component\";\nimport {makeObservable, observable, reaction} from \"mobx\";\nimport {OrbitUserFlowAnalyticsCategory} from \"../../../analytics/analytics.service.interface\";\n\nexport class IosPwaOnBoardingTooltipModel extends OnBoardingTooltipModel {\n constructor(tooltipsContainer: IOnBoardingTooltipsContainer,\n services: IServiceFactoryExtended) {\n\n super(tooltipsContainer, services, {\n renderContent: () => (),\n localStorageKey: 'ios-pwa_on_boarding_tooltip',\n maximumDisplayCount: 2,\n styling: {\n textColor: \"black\",\n backgroundColor: \"white\",\n borderColor: \"transparent\"\n },\n modifiers: [stickToBottomTooltipModifier],\n placement: \"bottom\",\n showCloseButton: true,\n invertCloseButtonColors: true,\n closeOnClickOutside: true,\n showOverlay: false,\n hasGlow: false,\n\n });\n\n makeObservable(this);\n\n this.services.gameRunner.then(gameRunner => {\n reaction(() => gameRunner.currentRunningGame,\n (currentRunningGame) => {\n if(currentRunningGame) {\n this._openGameCount++;\n }\n });\n });\n\n\n reaction(() => this.services.user.isAuthorized ,\n () => {\n this._openGameCount = 0;\n });\n }\n\n\n @observable.ref\n private _openGameCount: number = 0;\n\n protected _getElementToAttach(): HTMLElement | null {\n return this.services.dom.body;\n }\n\n shouldDisplay(): boolean {\n const commonConditions = super.shouldDisplay();\n const isDeviceEligible = this._isDeviceEligible;\n return this._openGameCount > 0\n && isDeviceEligible\n && commonConditions;\n }\n\n private get _isDeviceEligible(): boolean {\n const device = this.services.device;\n\n // we must show tooltip on iPhone Safari and not standalone which means shortcut app opened browser\n if (!device.model.isIphone)\n return false;\n if (!device.browser.isSafari)\n return false;\n if (device.isStandalone)\n return false;\n\n const extraProps = this.services.configuration.startupConfiguration.sdk.config.ExtraProperties;\n if (!extraProps.pwaEnabled)\n return false;\n if (device.hybrid.isHybrid)\n return false;\n\n if (this.services.miniOrbit.isEnabled)\n return false;\n\n return true;\n }\n\n private _onToolTipClick = () => {\n this.closeTooltip();\n }\n\n closeTooltip() {\n super.closeTooltip();\n this.services.analytics.sendOrbitUserFlowEvent(OrbitUserFlowAnalyticsCategory.PWA, 'Banner_Prompt', 'Closed');\n }\n\n onToolTipRendered(tooltipContainer: HTMLElement) {\n super.onToolTipRendered(tooltipContainer);\n this.services.analytics.sendOrbitUserFlowEvent(OrbitUserFlowAnalyticsCategory.PWA, 'Banner_Prompt', 'SHOW');\n\n }\n}","import {OnBoardingTooltipModel} from \"../on-boarding-tooltip.model\";\nimport {IOnBoardingTooltipsContainer} from \"../on-boarding-tooltips-container.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IconTitleTextTooltip} from \"../../../../components/tooltip/tooltips/icon-title-text/icon-title-text.tooltip\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {makeObservable} from \"mobx\";\nimport React from \"react\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {\n TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON,\n TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE\n} from \"../on-boarding-tooltip-target-selectors\";\n\nexport class ControlCenterOnBoardingTooltipModel extends OnBoardingTooltipModel {\n constructor(tooltipsContainer: IOnBoardingTooltipsContainer,\n services: IServiceFactoryExtended) {\n\n super(tooltipsContainer, services, {\n renderContent: () => {\n const Icon = services.theme.currentTheme.icons.controlCenterIcon\n return (}\n title={services.translation.translate(\"SAFE_ZONE\")}\n text={services.translation.translate(\"CONTROL_CENTER_ONBOARDING_TOOLTIP_TEXT\")}\n onClick={this._onTooltipClicked}\n className={CyClass('cy-control-center-on-boarding-tooltip')}/>);\n },\n timeout: TimeSpan.fromSeconds(7),\n localStorageKey: 'control_center_on_boarding_tooltip',\n maximumDisplayCount: 2,\n showOverlay: true,\n showCloseButton: false,\n closeOnClickOutside: true,\n animated: true,\n });\n\n makeObservable(this);\n }\n\n shouldDisplay(): boolean {\n const commonConditions = super.shouldDisplay();\n const isControlCenterEnabled = this.services.controlCenter.isEnabled;\n const isMiniOrbit = this.services.miniOrbit.isEnabled;\n const isControlCenterOnBoardingTooltipEnabled = this.services.configuration.servicesConfigs.OnBoardingTooltips.enabledForControlCenter;\n return commonConditions && isControlCenterEnabled && !isMiniOrbit && isControlCenterOnBoardingTooltipEnabled;\n }\n\n protected _getElementToAttach(): HTMLElement | null {\n const element = this.services.dom.querySelector(`.${TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE}`) as HTMLElement;\n\n if(element) {\n return element;\n }\n\n return this.services.dom.querySelector(`.${TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON}`) as HTMLElement;\n\n }\n\n onToolTipRendered(tooltipContainer: HTMLElement) {\n super.onToolTipRendered(tooltipContainer);\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Show\", \"CC_Bubble\");\n }\n\n private _onTooltipClicked = async () => {\n this.closeTooltip();\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Click\", \"CC_Bubble\");\n if(this.services.mediaQuery.lAndBelow) {\n (await this.services.userMenu).openMenu();\n } else {\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.controlCenterTooltip,\n source: CHANNEL_SOURCE.casinoClient\n }\n });\n }\n }\n}","import {OnBoardingTooltipModel} from \"../on-boarding-tooltip.model\";\nimport {IOnBoardingTooltipsContainer} from \"../on-boarding-tooltips-container.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IconTitleTextTooltip} from \"../../../../components/tooltip/tooltips/icon-title-text/icon-title-text.tooltip\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {makeObservable, observable, reaction, runInAction} from \"mobx\";\nimport {TOOLTIP_TARGET_BOTTOM_NAV_BAR_INDICATOR} from \"../on-boarding-tooltip-target-selectors\";\nimport {DomEventSubscription} from \"../../../../../utils/event-listener-registration\";\nimport {MenuItemKey} from \"../../../configurations/config-data-sections/generated-config-const\";\nimport {stickOnTopTooltipModifier} from \"../../tooltip-base/tooltip-modifiers\";\n\nexport class VideoSlidesExplorerOnBoardingTooltipModel extends OnBoardingTooltipModel {\n private _onScrollSubscription: DomEventSubscription | null = null;\n\n constructor(tooltipsContainer: IOnBoardingTooltipsContainer,\n services: IServiceFactoryExtended) {\n\n super(tooltipsContainer, services, {\n renderContent: () => {\n const Icon = services.theme.currentTheme.icons.exploreOutlinedIcon;\n return (}\n title={services.translation.translate(\"ONBOARDING_BOTTOM_NAV_BAR_EXPLORE_MAIN_TEXT\")} \n text={services.translation.translate(\"ONBOARDING_BOTTOM_NAV_BAR_EXPLORE_SECONDARY_TEXT\")} \n onClick={this._onTooltipClicked}\n className={CyClass('cy-video-slides-onboarding-explorer')} />);\n },\n placement: \"top\",\n modifiers: [stickOnTopTooltipModifier],\n timeout: TimeSpan.fromSeconds(7),\n localStorageKey: 'video_slides_onboarding_explorer_tooltip',\n maximumDisplayCount: 1, \n hasGlow: true,\n showOverlay: true,\n showCloseButton: false,\n closeOnClickOutside: true,\n animated: true,\n });\n\n makeObservable(this);\n\n reaction(() => this.services.user.isAuthorized, (isAuthorized) => {\n if (isAuthorized && !this._onScrollSubscription) {\n // set a scroll event listener because the onboarding should be shown after user start's scrolling, once authenticated\n this._onScrollSubscription = this.services.window.subscribeTo.scroll(this._onWindowScroll);\n }\n }, {\n fireImmediately: true\n });\n\n\n }\n\n @observable.ref\n scrollDetected: boolean = false;\n\n private _onWindowScroll = () => {\n // Check if this.services.routing.currentRoute?.data?.arenaType because we show onboarding only for home page and arenas\n if (this.services.routing.currentRoute?.isOrbitRoute && this.services.window.scrollY > 200) {\n runInAction(() => {\n this.scrollDetected = true;\n });\n }\n };\n\n private _removeScrollSubscription = () => {\n // remove scroll event listener\n if (this._onScrollSubscription) {\n this._onScrollSubscription.dispose();\n this._onScrollSubscription = null;\n }\n };\n\n shouldDisplay(): boolean {\n const commonConditions = super.shouldDisplay();\n const videoSlidesShouldBeDisaplayed = this.services.videoSlides.shouldBeDisplayed;\n\n return commonConditions && videoSlidesShouldBeDisaplayed && this.scrollDetected;\n }\n\n protected _getElementToAttach(): HTMLElement | null {\n const EXPLORE_MENU_ITEM: MenuItemKey = 'videoSlideExploreMenuItem';\n return this.services.dom.querySelector(`.${TOOLTIP_TARGET_BOTTOM_NAV_BAR_INDICATOR}.${EXPLORE_MENU_ITEM}`) as HTMLElement; \n }\n\n onToolTipRendered(tooltipContainer: HTMLElement): void {\n super.onToolTipRendered(tooltipContainer);\n\n this._removeScrollSubscription();\n\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Show\", \"TT_Bubble\");\n }\n\n private _onTooltipClicked = async () => {\n this.closeTooltip();\n\n this._getElementToAttach().click();\n\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Click\", \"TT_Bubble\"); \n }\n}","import {TooltipBaseService} from \"../tooltip-base.service\";\nimport {IOnBoardingTooltipsService} from \"./on-boarding-tooltips.service.interface\";\nimport {IOnBoardingTooltipsContainer} from \"./on-boarding-tooltips-container.interface\";\nimport {ITooltipModel} from \"../tooltip-base/tooltip-model.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {FreePlayOnBoardingTooltipModel} from \"./free-play/free-play.on-boarding-tooltip.model\";\nimport {makeObservable, observable, runInAction} from \"mobx\";\nimport {IosPwaOnBoardingTooltipModel} from \"./pwa/ios-pwa.on-boarding-tooltip.model\";\nimport {ControlCenterOnBoardingTooltipModel} from \"./control-center/control-center.on-boarding-tooltip.model\";\nimport {SetTimeoutType} from \"../../../../common/types/set-timeout-type\";\nimport {VideoSlidesExplorerOnBoardingTooltipModel} from \"./video-slides-explorer/video-slides-explorer.on-boarding-tooltip.model\";\n\nexport class OnBoardingTooltipsService extends TooltipBaseService implements IOnBoardingTooltipsService, IOnBoardingTooltipsContainer {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n makeObservable(this);\n this._migrateOldStorageKeys();\n\n runInAction(() => {\n this._toolTips.push(new ControlCenterOnBoardingTooltipModel(this, services));\n this._toolTips.push(new FreePlayOnBoardingTooltipModel(this, services));\n this._toolTips.push(new VideoSlidesExplorerOnBoardingTooltipModel(this, services));\n this._toolTips.push(new IosPwaOnBoardingTooltipModel(this, services));\n });\n\n let enableOnBoardingTooltipsTimer: SetTimeoutType;\n this.reaction(() => this.services.user.isAuthorized, (isAuthorized) => {\n if(isAuthorized) {\n //We use this timeout to give the chance to toasters to appear before.\n //For example on Sweden after login we show a toaster, but because we load the iziToast library async this will make\n //the toaster to appear after on boarding tooltips, but we want to give precedence to the toaster over the tooltip.\n // We don't use iziToast enymore, would that still be relevant??\n enableOnBoardingTooltipsTimer = setTimeout(() => {\n runInAction(() => {\n this.isOnBoardingEnabled = true;\n });\n }, 3000);\n } else {\n clearTimeout(enableOnBoardingTooltipsTimer);\n runInAction(() => {\n this.isOnBoardingEnabled = false;\n });\n }\n }, {\n fireImmediately: true\n })\n\n\n }\n\n @observable.ref\n isOnBoardingEnabled: boolean = false;\n\n get toolTips(): ITooltipModel[] {\n //we use filter and not find because we want this getter to depend on all observables in the _toolTips array\n const visibleTooltips = this._toolTips.filter(tt => tt.shouldDisplay());\n if(visibleTooltips.length > 0) {\n return [visibleTooltips[0]];\n }\n return [];\n }\n\n private _migrateOldStorageKeys(): void {\n let storedValue = this.services.localStorage.getItem('orbit_free_play_tooltip_is_displayed_in_session');\n if(storedValue) {\n this.services.localStorage.setItem('free_play_on_boarding_tooltip.sessionDisplayCount', storedValue === 'true' ? 1 : 0);\n this.services.localStorage.removeItem('orbit_free_play_tooltip_is_displayed_in_session');\n }\n\n storedValue = this.services.localStorage.getItem('orbit_free_play_tooltip_displayed_number');\n if(storedValue) {\n this.services.localStorage.setItem('free_play_on_boarding_tooltip.totalDisplayCount', storedValue);\n this.services.localStorage.removeItem('orbit_free_play_tooltip_displayed_number');\n }\n\n storedValue = this.services.localStorage.getItem('orbit-pwa-ios-shown-install-tooltip-count');\n if(storedValue) {\n this.services.localStorage.setItem('ios-pwa_on_boarding_tooltip.totalDisplayCount', storedValue);\n this.services.localStorage.removeItem('orbit-pwa-ios-shown-install-tooltip-count');\n }\n\n }\n}","import {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport IPlayerMigration from \"../../../common/interfaces/player-migration.interface\";\nimport MIGRATION from \"../../../common/const/migration_consts\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport type ClientVisitAnalyticsParams = {\n migrationToken?: string;\n businessCorrelationId?: string;\n}\n\nexport class PlayerMigrationService extends ServiceBase implements IPlayerMigration {\n\n private _businessCorrIdQueryParamName: string = MIGRATION.BUSINESS_CORRELATION_ID_QUERY_PARAM;\n private _businessCorrelationId: string;\n\n public get businessCorrelationId(): string {\n if (!this._businessCorrelationId) {\n this._businessCorrelationId = this.services.tools.getGuid();\n }\n return this._businessCorrelationId;\n }\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n if (this.services.location.currentUri.queryParams.hasParam(this._businessCorrIdQueryParamName)){\n this._onReceivedBusinessCorrIdQueryParam(this.services.location.currentUri.queryParams.getParamValue(this._businessCorrIdQueryParamName));\n }\n\n //on hybrid, the sendAnalytics method is called directly from migration_hybrid_feature.js\n if (this.isMigrationEnabledFromConfig && !this.services.device.hybrid.isHybrid) {\n this.sendClientVisitAnalytics();\n }\n }\n\n private _onReceivedBusinessCorrIdQueryParam = (businessCorrelationId: string) => {\n\n if (!this.services.tools.isGuid(businessCorrelationId)) {\n //There are scenarios when the id we receive in the url is not a valid guid, if this is the case we ignore it and create a new one.\n businessCorrelationId = this.services.tools.getGuid();\n }\n\n this._businessCorrelationId = businessCorrelationId;\n }\n\n public sendClientVisitAnalytics(params?: ClientVisitAnalyticsParams): void {\n const data = {\n \"MIGRATION_EVENT\": {\n \"EventCategory\": \"Visitor\",\n \"EventAction\": \"Enter\",\n \"EventActionData\": {\n \"System\": this.services.device.hybrid.isHybrid ? \"888 app\" : \"888 web\",\n \"Source\": (!Check.isEmpty(params?.migrationToken) || this.hasClientBeenLoadedWithMigrationToken()) ? \"MRG_Redirect\" : \"Visitor\",\n \"Orientation\": \"Casino\",\n \"TokenIncluded\": (!Check.isEmpty(params?.migrationToken) || this.hasClientBeenLoadedWithMigrationToken()),\n \"MigrationCompletionIndication\": this.isPlayerMigrated\n }\n }\n };\n\n const logger = this.services.analytics.getLogger(data);\n\n logger.setBusinessCorrelationID(params?.businessCorrelationId || this.businessCorrelationId);\n logger.setEventType('MIGRATION_EVENT', 'Log', 'Analytics');\n logger.info();\n }\n\n public get isPlayerMigrated(): boolean {\n return this.services.cookies.getCookie(MIGRATION.PLAYER_MIGRATED_COOKIE) === \"true\";\n }\n\n private hasClientBeenLoadedWithMigrationToken(): boolean {\n return this.services.sessionStorage.getItem(MIGRATION.LOADED_WITH_MIGRATION_TOKEN_SESSION_STORAGE_KEY)?.toLowerCase() === \"true\";\n }\n\n public get isMigrationEnabledFromConfig(): boolean {\n return this.services.configuration.servicesConfigs.PlayerMigration.enabledForBrand[this.services.sdk.getBrandID()];\n }\n}\n","import {ToastHandler} from \"./toast-handler\";\n\nexport class ToastQueue {\n private _queue: ToastHandler[] = [];\n\n addToQueue(handler: ToastHandler) {\n // Behavior 1: Add to queue only if the ID doesn't exists\n let existingToast = this._queue.find((t) => t.toastId === handler.toastId);\n if (!existingToast) {\n this._queue.push(handler);\n }\n // OR\n // Behavior 2: Remove the existing one if exists and add the new one AT THE END OF THE LIST (update)\n // let existingToastIndex = this._queue.findIndex((t) => t.toastId === handler.toastId);\n // if (existingToastIndex !== -1) {\n // this._queue.splice(existingToastIndex, 1);\n // }\n // this._queue.push(handler);\n // OR\n // Behavior 3: Remove the existing one if exists and add the new one AT THE ORIGINAL POSITION (update)\n // let existingToastIndex = this._queue.findIndex((t) => t.toastId === handler.toastId);\n // if (existingToastIndex !== -1) {\n // this._queue.splice(existingToastIndex, 1, handler);\n // }\n // OR\n // Behavior 4: Just add to queue, no checking\n // this._queue.push(handler);\n }\n\n processQueue = () => {\n while (this._queue.length > 0) {\n const toastHandler = this._queue.shift();\n toastHandler.show();\n }\n }\n\n clearQueue() {\n this._queue = [];\n }\n}","export enum TOAST_TYPES {\n\tTIMED = 'timed_toaster',\n\tACKNOWLEDGE = 'acknowledge_toaster',\n\tACTION = 'action_toaster'\n};\n\nexport interface IUCCToasterParams {\n\tType?: TOAST_TYPES;\n\tMessageID: string | number;\n\tGameTypeID?: string | number;\n\tTitle: string;\n\tSubTitle: string;\n\tDurationInSec: number;\n\tMobileImage: string;\n\tPCImage: string;\n\tIconImagePath: string;\n\tcustomUIConfig: string;\n\tResponseTopicPath: string;\n\tMetaDataParams: string | null;\n\tanalyticsData: {\n\t\tcategory: string;\n\t\taction: string;\n\t\tlabel?: string;\n\t};\n\tLangIso3: string;\n\tclose: boolean;\n\tbuttonText: string;\n\tcallback: () => void;\n\tlayout: number;\n}\n\nexport interface IFirebaseToasterService {}\n","import styled from \"styled-components\";\n\nexport const StandardToastImageBox = styled.div`\n color: ${({theme}) => theme.colors.brandPrimary};\n max-width: 10rem;\n max-height: 10rem;\n margin-right: 4px;\n`;\n","import React from 'react';\nimport {Check} from \"@sparkware/app-utils\";\nimport {PropsWithChildren, useCallback, useEffect} from \"react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {onToastButtonClickedAnalytics, onToastOpenedAnalytics} from \"../../../services/toaster/toast-helpers/toast-analytics.helper\";\nimport {IToastHandler} from \"../../../services/toaster/toaster.service.interface\";\nimport {FlexContainerBox, FlexFixedSizeItemBox, FlexGrowItemBox} from \"../../../themes/architecture/css-helpers/flex\";\nimport {StandardToastImageDefaultBox} from \"./boxes/standard-toast-image/standard-toast-image.default.box\";\nimport {StandardToastMessageBox} from \"./boxes/standard-toast-message/standard-toast-message.box\";\nimport {StandardToastTitleBox} from \"./boxes/standard-toast-title/standard-toast-title.box\";\nimport { StandardToastImageBox } from './boxes/standard-toast-image.box';\nimport {IStandardToastContentProps} from \"./standard-toast.component.props\";\nimport {DEFAULT_TOAST_IMAGE} from \"../../../services/toaster/taoster-service-consts\";\n\n\n\ninterface IStandardToastContentInternalProps {\n handler: IToastHandler;\n}\n\nexport const StandardToastContent: React.FC> = (props) => {\n const services = useServices();\n const {button, handler} = props;\n const onClick = useCallback(() => {\n onToastButtonClickedAnalytics(services, handler.toastId);\n button.onClick(handler.close);\n }, [services, button, handler]);\n\n const DefaultIcon = services.theme.currentTheme.icons.infoIcon;\n const renderImage = () => {\n if (!props.image) {\n return null;\n }\n if (props.image === DEFAULT_TOAST_IMAGE) {\n return ;\n } else {\n return \"\"; \n }\n }\n\n // I put the analytics inside an useEffect because I want to make sure it is run once, at mount, not every rerender\n // handler shouldn't change so it shouldn't rerun at component update\n useEffect(() => {\n onToastOpenedAnalytics(services, handler.toastId);\n }, [handler, services]);\n\n return
    \n \n \n {renderImage()}\n \n \n {props.title}\n { Check.isArray(props.message) ?\n props.message.map(m => {m}) :\n {props.message} }\n { button ? : null }\n \n \n
    ;\n}\n","import {IServiceFactory} from \"../../service-factory.interface\";\nimport {OrbitMarketingEventAnalyticsCategory} from \"../../analytics/analytics.service.interface\";\n\nexport function onToastButtonClickedAnalytics(services: IServiceFactory, toastId: string | number) {\n const cid = services.user.cid || 'annonymous';\n services.analytics.sendOrbitMarketingEvent(OrbitMarketingEventAnalyticsCategory.Communications, toastId + '_CTA_Click', cid + '_' + Date.now().toString());\n}\n\nexport function onToastOpenedAnalytics(services: IServiceFactory, toastId: string | number) {\n const cid = services.user.cid || 'annonymous';\n services.analytics.sendOrbitMarketingEvent(OrbitMarketingEventAnalyticsCategory.Communications, toastId + '_Show', cid + '_' + Date.now().toString());\n}","export const DEFAULT_TOAST_IMAGE = \"DEFAULT_TOAST_IMAGE\";","import {Id, toast, ToastOptions} from \"react-toastify\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {addToastClassName} from \"./toast-helpers/toast-classnames.helper\";\nimport {IToastHandler, IToastDefinition, ToastCloseReason} from \"./toaster.service.interface\";\nimport {IReactionDisposer, when} from \"mobx\";\n\nexport class ToastHandler implements IToastHandler {\n public readonly toastId: Id;\n /**\n * reason can be:\n * ToastCloseReason.CloseButton if the toast was closed by the X button\n * undefined if was autoclosed by itself\n * or anything passed to handler.close (including undefined)\n */\n private closeReason: ToastCloseReason | string | undefined = undefined;\n constructor(private readonly services: IServiceFactoryExtended, private readonly options: IToastDefinition) {\n this.toastId = options.id ? options.id : this.services.tools.getGuid();\n }\n\n private _displayReactionDisposer: IReactionDisposer | null = null;\n show(): void {\n if(this.options.displayCondition) {\n this._displayReactionDisposer = when(() => this.options.displayCondition(),\n () => {\n this._displayReactionDisposer = null;\n this._displayToast();\n });\n } else {\n this._displayToast();\n }\n }\n\n private _displayToast(): void {\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n let autoClose: number | false = false;\n if (this.options.toastOptions?.timeout && this.options.toastOptions.timeout.totalMilliseconds > 0) {\n autoClose = this.options.toastOptions.timeout.totalMilliseconds;\n }\n const toastOptions: ToastOptions = {\n // if autoClose is undefined it defaults to 5000ms, so instead of using autoClose I use timeout and if is missing (undefined) or null or 0 it defaults to false\n autoClose,\n hideProgressBar: this.options.toastOptions?.hideProgressBar,\n // If I don't use addToastClassName than this class name will override the one I set in ToastContainerDefaultBox\n className: addToastClassName(this.options.toastOptions?.className),\n // I need to pass a custom close Button that mimics the default one because react-toastify does not provide me with a mechanism to tell why the\n // toast was closed, so I need to patch this\n // If we'll ever use react-toastify theming add classes like Toastify__close-button--light to this\n closeButton: (this.options.toastOptions?.closeButton === false) ? false : () => ,\n toastId: this.toastId,\n data: this\n };\n toast(this.options.renderContent(this), toastOptions);\n }\n\n private _destroyReactions(): void {\n if(this._hideReactionDisposer) {\n this._hideReactionDisposer();\n this._hideReactionDisposer = null;\n }\n\n if(this._displayReactionDisposer) {\n this._displayReactionDisposer();\n this._displayReactionDisposer = null;\n }\n }\n\n close = (closeReason?: ToastCloseReason | string) => {\n if (closeReason) {\n this.closeReason = closeReason;\n }\n this._destroyReactions();\n toast.dismiss(this.toastId);\n }\n\n private _hideReactionDisposer: IReactionDisposer | null = null;\n onToastShown() {\n if (this.options.onToastShown) {\n this.options.onToastShown();\n }\n\n if(this.options.displayCondition) {\n this._hideReactionDisposer = when(() => !this.options.displayCondition(),\n () => {\n this._hideReactionDisposer = null;\n this.close();\n });\n }\n\n }\n onToastClosed() {\n this._destroyReactions();\n\n if (this.options.onToastClosed) {\n this.options.onToastClosed(this.closeReason);\n }\n }\n}","import { toast, ToastItem } from \"react-toastify\";\nimport { ServiceBase } from \"../ServiceBase\";\nimport { IToasterService, IToastDefinition, IStandardToastDefinition } from \"./toaster.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { action, makeObservable, observable, runInAction } from \"mobx\";\nimport { ToastQueue } from \"./toasts-queue\";\nimport { StandardToastContent } from \"../../components/toaster/toasts-content/standard-toast.component\";\nimport { ToastHandler } from \"./toast-handler\";\n\nexport class ToasterService extends ServiceBase implements IToasterService {\n private _toastQueue: ToastQueue = new ToastQueue();\n\n private _pendingToasts: ToastHandler[] = [];\n\n /** use observable instead of observable.ref because the ref remains the same, instead i push and splice data from this array */\n @observable\n private _activeToasts: ToastHandler[] = [];\n\n private get _allToasts(): ToastHandler[] {\n return [\n ...this._pendingToasts,\n ...this._activeToasts\n ];\n }\n\n @observable.ref\n private isAppVisible = true;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n // I want to clear the queue of toasts when the authorized state is changed but not on initial load so no fireImmediately\n this.reaction(() => this.services.user.isAuthorized, () => {\n this._toastQueue.clearQueue();\n });\n\n this.reaction(() => this.services.user.isAuthorized, (isAuthorized) => {\n if (isAuthorized) {\n // this call will have an actual efect only at app init, otherwise the queue is cleared at authorized state change\n this._toastQueue.processQueue();\n } else {\n this.removeAllToasts();\n }\n }, {\n fireImmediately: true\n });\n\n\n\n this.services.sdk.events.onAppPaused(() => {\n this._setIsAppVisible(false);\n });\n this.services.sdk.events.onAppResumed(() => {\n this._setIsAppVisible(true);\n this._toastQueue.processQueue();\n });\n\n toast.onChange((payload: ToastItem) => {\n switch (payload.status) {\n case \"added\":\n // new toast added\n runInAction(() => {\n const pendingToastIndex = this._pendingToasts.findIndex(t => t.toastId === payload.data.toastId);\n if (pendingToastIndex >= 0) {\n this._pendingToasts.splice(pendingToastIndex, 1);\n }\n this._activeToasts.push(payload.data);\n });\n payload.data.onToastShown();\n break;\n case \"updated\":\n // toast updated\n break;\n case \"removed\":\n // toast has been removed\n runInAction(() => {\n const idx = this._activeToasts.findIndex((handler) => handler.toastId === payload.data.toastId);\n if (idx >= 0) {\n this._activeToasts.splice(idx, 1);\n }\n });\n payload.data.onToastClosed();\n break;\n }\n });\n makeObservable(this);\n }\n\n get hasOpenToasters(): boolean {\n return this._activeToasts.length > 0;\n }\n\n @action\n private _setIsAppVisible(isAppVisible: boolean): void {\n this.isAppVisible = isAppVisible;\n }\n\n showAckStandardToast(def: IStandardToastDefinition) {\n return this.showStandardToast({\n ...def,\n contentProps: {\n ...def.contentProps,\n button: def.contentProps.button ? def.contentProps.button : {\n text: this.services.translation.translate('OK'),\n onClick: (closeToast) => {\n closeToast();\n }\n }\n }\n });\n }\n\n showStandardToast(def: IStandardToastDefinition) {\n const { contentProps, ...partiaToastDef } = def;\n return this.showCustomToast({\n ...partiaToastDef,\n renderContent: (handler) => \n });\n }\n\n\n showCustomToast(options: IToastDefinition) {\n\n if (this._allToasts.find(t => t.toastId === options.id)) {\n return;\n }\n\n const toast = new ToastHandler(this.services, options);\n this._pendingToasts.push(toast);\n\n if (options.toastOptions?.timeout && options.toastOptions?.timeout.totalMilliseconds > 0 && !this.isAppVisible) {\n this._toastQueue.addToQueue(toast);\n // this.logger.debug('TOASTER :: SAVED TO LOCAL STORAGE ', toasterParams);\n return;\n }\n toast.show();\n return toast;\n }\n\n\n removeAllToasts() {\n toast.dismiss();\n this._pendingToasts.forEach(t => t.onToastClosed());\n this._pendingToasts = [];\n }\n}","import {FeatureId} from \"./FeatureId\";\n\nexport const FeaturesMaxDisplayCountMap: Record = {\n [FeatureId.OnboardingTour] : 1\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {FeaturesMaxDisplayCountMap} from \"./FeaturesMaxDisplayCountMap\";\nimport {\n FeatureToggleManagementData,\n IFeaturesToggleManagementService\n} from \"./features-toggle-management.service.interface\";\nimport {FeatureId} from \"./FeatureId\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {FeatureToggleManagementController_SetFeatureCounterRequest} from \"../api/api.service\";\n\nexport class FeaturesToggleManagementService extends ServiceBase implements IFeaturesToggleManagementService {\n private _featuresDisplayCount : Partial> = {};\n private _serverCallPromise = Promise.resolve();\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this.reaction(() => this.services.user.isAuthorized,\n () => {\n if(this.services.user.isAuthorized) {\n this._serverCallPromise = this._readFeatureToggleDataFromServer();\n } else {\n this._resetData();\n }\n }, {\n fireImmediately: true\n });\n }\n\n public async shouldShowFeature(featureID: number): Promise {\n if(!this.services.user.isAuthorized) {\n // this service not support anonymous users. it's only checks if for specific cid it not shown max times\n return false;\n }\n\n // We still not got answer from the server\n if(Check.isEmpty(this._featuresDisplayCount)) {\n if(!this._serverCallPromise) {\n this._serverCallPromise = this._readFeatureToggleDataFromServer();\n }\n\n try{\n await this._serverCallPromise;\n } catch(err){\n this.services.logger.warning('Fail to read FeatureToggleDataFromServer. err:' + err);\n return false;\n }\n }\n\n return (this._featuresDisplayCount[featureID] ?? 0) < this._getMaxDisplays(featureID)\n }\n\n public async updateFeatureCounter(featureID: number): Promise {\n let displayCount = (this._featuresDisplayCount[featureID] ?? 0) + 1;\n\n const request: FeatureToggleManagementController_SetFeatureCounterRequest = {\n FeatureID: featureID\n };\n\n this._featuresDisplayCount[featureID] = displayCount;\n await this.services.api.featureToggleManagementController.setFeatureCounter(request);\n }\n\n private _getMaxDisplays(featureID: FeatureId) {\n if(FeaturesMaxDisplayCountMap[featureID]) {\n return FeaturesMaxDisplayCountMap[featureID];\n }\n\n // Default is 1.\n return 1;\n }\n\n private async _readFeatureToggleDataFromServer(): Promise {\n try {\n const featuresData = await this.services.api.featureToggleManagementController.getFeaturesDataForCID();\n if (featuresData) {\n this._convertFeatureToggleManagementDataArrayToRecord(featuresData);\n }\n } catch(err){\n this.services.logger.error(\"Fail to read feature toggle data from token.\", err);\n }\n }\n\n private _convertFeatureToggleManagementDataArrayToRecord(featuresToggleData: FeatureToggleManagementData[]) {\n this._featuresDisplayCount = featuresToggleData.reduce((record, obj) => {\n record[obj.FeatureID] = obj.DisplayCount;\n return record;\n }, {});\n }\n\n private _resetData() {\n this._serverCallPromise = Promise.resolve();\n this._featuresDisplayCount = {};\n }\n}\n","import {\n NavigationLinkAdvancedConfiguration, NavigationLinkAdvancedCrossBackMode,\n NavigationLinkAdvancedOpenMode, NavigationLinkBasicOpenMode,\n NavigationLinkBuilderStrategy,\n} from \"../configurations/config-data-sections/navigation-link.configuration\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {isAbsolutUrl} from \"../../../utils/url-utils\";\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {LinkNavigationId} from \"../configurations/config-data-sections/generated-config-const\";\nimport {UriPath} from \"../location/uri-path/uri-path\";\n\nexport class LinkConfigurationParser {\n constructor(public readonly linkId: LinkNavigationId,\n private readonly services: IServiceFactoryExtended) {\n const config = services.configuration.data.links[linkId];\n if(!config) {\n throw new Error(`Missing configuration for ${linkId} link`);\n }\n\n if(Check.isString(config)) {\n this.linkConfiguration = {\n url: config\n };\n } else {\n this.linkConfiguration = config;\n }\n\n }\n\n private readonly linkConfiguration: NavigationLinkAdvancedConfiguration;\n\n get url(): string {\n return this.linkConfiguration.url ?? \"\";\n }\n\n private _getMiniOrbitDefaultOpenMode(): NavigationLinkBasicOpenMode {\n if(this.urlBuilderStrategy === \"useGNWP\") {\n return \"newTab\";\n }\n\n if(isAbsolutUrl(this.url)) {\n const urlBuilder = new URL(this.url);\n if(urlBuilder.origin.toLowerCase() === this.services.window.origin.toLowerCase()) {\n return \"redirect\";\n } else {\n return \"newTab\";\n }\n } else {\n if(this.services.routing.isOrbitRoute(new UriPath(this.url))) {\n return \"clientSideNavigation\";\n } else {\n return \"redirect\";\n }\n }\n }\n\n get openMode(): NavigationLinkAdvancedOpenMode {\n if(!this.linkConfiguration.openMode) {\n if(this.urlBuilderStrategy === \"useGNWP\" || isAbsolutUrl(this.url)) {\n return {\n pc: \"newTab\",\n mobile: \"newTab\",\n hybrid: \"newTab\",\n miniOrbit: this._getMiniOrbitDefaultOpenMode()\n }\n } else {\n return {\n pc: \"clientSideNavigation\",\n mobile: \"clientSideNavigation\",\n hybrid: \"clientSideNavigation\",\n miniOrbit: this._getMiniOrbitDefaultOpenMode()\n }\n }\n\n }\n\n if(Check.isString(this.linkConfiguration.openMode)) {\n return {\n pc: this.linkConfiguration.openMode,\n mobile: this.linkConfiguration.openMode,\n hybrid: this.linkConfiguration.openMode,\n miniOrbit: this._getMiniOrbitDefaultOpenMode()\n }\n }\n\n return {\n pc: this.linkConfiguration.openMode.pc ?? \"newTab\",\n mobile: this.linkConfiguration.openMode.mobile ?? \"newTab\",\n hybrid: this.linkConfiguration.openMode.hybrid ?? \"newTab\",\n miniOrbit: this.linkConfiguration.openMode.miniOrbit ?? this._getMiniOrbitDefaultOpenMode()\n }\n }\n\n get crossBackMode(): NavigationLinkAdvancedCrossBackMode {\n if(!this.linkConfiguration.crossBackMode) {\n if(isAbsolutUrl(this.url)) {\n return {\n pc: \"redirect\",\n mobile: \"redirect\",\n hybrid: \"redirect\"\n }\n } else {\n return {\n pc: \"clientSideNavigation\",\n mobile: \"clientSideNavigation\",\n hybrid: \"clientSideNavigation\",\n }\n }\n\n }\n\n if(Check.isString(this.linkConfiguration.crossBackMode)) {\n return {\n pc: this.linkConfiguration.crossBackMode,\n mobile: this.linkConfiguration.crossBackMode,\n hybrid: this.linkConfiguration.crossBackMode,\n }\n }\n\n return {\n pc: this.linkConfiguration.crossBackMode.pc ?? \"redirect\",\n mobile: this.linkConfiguration.crossBackMode.mobile ?? \"redirect\",\n hybrid: this.linkConfiguration.crossBackMode.hybrid ?? \"redirect\",\n\n }\n }\n\n\n get urlBuilderStrategy(): NavigationLinkBuilderStrategy {\n if(this.linkConfiguration.urlBuilderStrategy) {\n return this.linkConfiguration.urlBuilderStrategy;\n }\n\n if(this.services.user.isAuthorized) {\n if(this._supportsGnwp) {\n return \"useGNWP\";\n } else {\n return \"useUrl\";\n }\n }\n\n return \"useUrl\";\n }\n\n get shouldAppendSCutToUrl(): boolean {\n if(Check.isNullOrUndefined(this.linkConfiguration.shouldAppendSCutToUrl)) {\n return isAbsolutUrl(this.url);\n }\n\n return this.linkConfiguration.shouldAppendSCutToUrl;\n }\n\n private get _supportsGnwp(): boolean {\n switch (this.linkId) {\n case \"pokerLink\":\n case \"sportLink\":\n case \"chatLink\":\n case \"helpLink\":\n return true;\n default:\n return false;\n }\n }\n\n async getGnwpUrl(marketingParams: MarketingParams): Promise {\n const gnwp = await this.services.gnwp;\n switch (this.linkId) {\n case \"pokerLink\":\n return await gnwp.getPokerUrl({\n marketingParams: marketingParams\n });\n case \"sportLink\":\n return await gnwp.getSportUrl({\n marketingParams: marketingParams\n });\n case \"chatLink\":\n return await gnwp.getLiveChatUrl({\n marketingParams: marketingParams\n });\n case \"helpLink\":\n return await gnwp.getHelpPageUrl();\n default:\n throw new Error(`Link ${this.linkId} does not support GNWP`);\n }\n }\n\n get isCrossBackToPokerOrSport(): boolean {\n return (this.linkId === \"pokerLink\" && this.services.crossBrands.isCrossFromPoker)\n || (this.linkId === \"sportLink\" && this.services.crossBrands.isCrossFromSport);\n }\n}","import {ILinksNavigationService, INavigateLinkOptions, IOpenUrlOptions} from \"./links-navigation.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {NavigationLinkBasicOpenMode} from \"../configurations/config-data-sections/navigation-link.configuration\";\nimport {LinkConfigurationParser} from \"./link-configuration-parser\";\nimport {isAbsolutUrl} from \"../../../utils/url-utils\";\nimport {LinkNavigationId} from \"../configurations/config-data-sections/generated-config-const\";\nimport {RegulationNavigationHookContinuationMode} from \"./regulation-hooks/regulation-link-navigation-hook.interface\";\n\n\nexport class LinksNavigationService extends ServiceBase implements ILinksNavigationService {\n\n getLinkUrl(linkId: LinkNavigationId): string {\n return new LinkConfigurationParser(linkId, this.services).url;\n }\n\n private _openBlankWindow(openMode: NavigationLinkBasicOpenMode): Window | null {\n if(openMode === \"newTab\" && !this.services.device.hybrid.isHybrid && !this.services.miniOrbit.isEnabled) {\n // We do this because we try to avoid browser popup blockers.\n try {\n return this.services.window.createBlankWindow();\n } catch (err) {\n this.services.logger.error('Failed to create blank window', err);\n return null;\n }\n\n }\n return null;\n }\n\n async navigateLink(options: INavigateLinkOptions): Promise {\n const hookResponse = await this.services.regulation.current.linksNavigationHook.navigateLink(options);\n if(hookResponse.continuationMode !== RegulationNavigationHookContinuationMode.Continue) {\n return;\n }\n\n options = hookResponse.options ?? options;\n\n const config = new LinkConfigurationParser(options.linkId, this.services);\n\n const openMode = this._getLinkOpenMode(config);\n\n let blankBrowserTab = this._openBlankWindow(openMode);\n\n let link = await this._buildLink(config, options);\n\n if(options.linkHash) {\n let linkHash = options.linkHash;\n if(!linkHash.startsWith('#')) {\n linkHash = '#' + linkHash;\n }\n link = link + linkHash;\n }\n\n await this._navigateToUrl(link, openMode, blankBrowserTab);\n }\n\n\n async openUrl(options: IOpenUrlOptions): Promise {\n\n let openMode: NavigationLinkBasicOpenMode;\n if(options.openMode) {\n openMode = options.openMode\n } else {\n if(isAbsolutUrl(options.url)) {\n openMode = \"newTab\";\n } else {\n openMode = \"clientSideNavigation\";\n }\n }\n\n await this._navigateToUrl(options.url, openMode, this._openBlankWindow(openMode));\n }\n\n private _openInNewTabForMiniOrbit(url: string): void {\n this.services.miniOrbit.openUrl(url);\n }\n\n private _openInNewTabForHybrid(url: string): void {\n this.services.hybrid.openExternalLink(url);\n }\n\n private _openInNewTabForWebApp(url: string, blankBrowserTab: Window | null) {\n if(!isAbsolutUrl(url)) {\n const urlBuilder = new URL(this.services.window.origin);\n urlBuilder.pathname = url;\n url = urlBuilder.href;\n }\n\n if (blankBrowserTab) {\n blankBrowserTab.location = url;\n } else {\n this.services.window.openInNewTab(url);\n }\n }\n\n private async _redirectForMiniOrbit(url: string): Promise {\n this.services.sdk.eventsTrigger.closeNyxSecondWebView();\n await this.services.location.redirect(url);\n }\n\n private async _redirectForHybrid(url: string): Promise {\n this.services.sdk.eventsTrigger.closeNyxSecondWebView();\n await this.services.location.redirect(url);\n }\n\n private async _navigateToUrl(url: string, openMode: NavigationLinkBasicOpenMode, blankBrowserTab: Window | null): Promise {\n switch (openMode) {\n case \"clientSideNavigation\":\n await this.services.location.push(url.toLowerCase());\n break;\n case \"newTab\":\n if(this.services.miniOrbit.isEnabled) {\n this._openInNewTabForMiniOrbit(url);\n } else if(this.services.device.hybrid.isHybrid) {\n this._openInNewTabForHybrid(url);\n } else {\n this._openInNewTabForWebApp(url, blankBrowserTab);\n }\n break;\n case \"redirect\":\n if(this.services.miniOrbit.isEnabled) {\n await this._redirectForMiniOrbit(url);\n } else if(this.services.device.hybrid.isHybrid) {\n await this._redirectForHybrid(url);\n } else {\n await this.services.location.redirect(url);\n }\n break;\n case \"secondWebView\":\n this.services.sdk.eventsTrigger.openUrlInSecondWebView(url);\n break;\n default:\n throw new Error(`Unsupported external brand open mode ${openMode}`)\n\n }\n }\n\n protected async _buildDirectLink(config: LinkConfigurationParser): Promise {\n\n let directLink = config.url;\n\n if(this._getLinkOpenMode(config) !== \"clientSideNavigation\") {\n\n if(!isAbsolutUrl(directLink)) {\n const urlBuilder = new URL(this.services.window.origin);\n urlBuilder.pathname = directLink;\n directLink = urlBuilder.href;\n }\n\n if(config.shouldAppendSCutToUrl) {\n directLink = (await this.services.marketing).appendSCutToUrl(directLink);\n }\n\n directLink = this.services.stateOfResidenceIdentifier.appendUserSelectedStateToLink(directLink);\n }\n\n return directLink;\n }\n\n protected async _buildLink(config: LinkConfigurationParser, options: INavigateLinkOptions): Promise {\n\n if(this._isCrossBackToPokerOrSport(config)) {\n const {token} = await this.services.user.getPlatformToken();\n return `${this.services.crossBrands.crossBackSpecificNavigation.callbackUrl!}?UserInfo=${token}`;\n }\n\n if(config.urlBuilderStrategy === \"useUrl\") {\n return await this._buildDirectLink(config);\n } else {\n return await config.getGnwpUrl(options.marketingParams);\n }\n }\n\n private _isCrossBackToPokerOrSport(config: LinkConfigurationParser): boolean {\n if(!this.services.user.isAuthorized) {\n return false;\n }\n\n return config.isCrossBackToPokerOrSport;\n }\n\n private _getCrossBackMode(config: LinkConfigurationParser): NavigationLinkBasicOpenMode {\n if(this.services.device.hybrid.isHybrid) {\n return config.crossBackMode.hybrid;\n }\n\n if(this.services.device.os.isMobileOS) {\n return config.crossBackMode.mobile;\n }\n\n return config.crossBackMode.pc;\n }\n\n protected _getLinkOpenMode(config: LinkConfigurationParser): NavigationLinkBasicOpenMode {\n\n\n if(this._isCrossBackToPokerOrSport(config)) {\n return this._getCrossBackMode(config);\n }\n\n if(this.services.miniOrbit.isEnabled) {\n return config.openMode.miniOrbit;\n }\n\n if(this.services.device.hybrid.isHybrid) {\n return config.openMode.hybrid;\n }\n\n if(this.services.device.os.isMobileOS) {\n return config.openMode.mobile;\n }\n\n return config.openMode.pc;\n }\n\n\n async openPoker(): Promise {\n await this.navigateLink({\n linkId: \"pokerLink\"\n });\n }\n\n async openSport(): Promise {\n await this.navigateLink({\n linkId: \"sportLink\"\n });\n }\n\n async openResponsibleGaming(): Promise {\n await this.navigateLink({\n linkId: \"responsibleGamingLink\"\n });\n }\n\n async openSecondaryResponsibleGaming(): Promise {\n await this.navigateLink({\n linkId: \"secondaryResponsibleGamingLink\"\n });\n }\n\n async openGamingHistoryPage(): Promise {\n await this.navigateLink({\n linkId: \"gamingHistoryLink\"\n });\n }\n\n async openSelfExclusion(): Promise {\n await this.navigateLink({\n linkId: \"selfExclusionLink\"\n });\n }\n\n async openSelfTest(): Promise {\n await this.navigateLink({\n linkId: \"selfTestLink\"\n });\n }\n\n async openSafeToPlay(): Promise {\n await this.navigateLink({\n linkId: \"safeToPlayLink\"\n });\n }\n\n async openGamblingCommissionLink(): Promise {\n await this.navigateLink({\n linkId: \"gamblingCommissionLink\"\n });\n }\n}","\nexport function safeJsonStringify(jsonObject) {\n try {\n return JSON.stringify(jsonObject);\n } catch(err) {\n return \"\";\n }\n}\n\nexport function safeJsonParse(jsonStr: string, defaultWhenException?: any): any {\n try {\n return JSON.parse(jsonStr);\n } catch(err) {\n return defaultWhenException || \"\";\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {CGPEventSubscription} from \"../sdk/cgp-sdk.interface\";\nimport {IFirebaseToasterService, IUCCToasterParams, TOAST_TYPES} from \"./firebase-toaster.service.interface\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {safeJsonParse} from \"../../../utils/json-helper\";\nimport {GameInfo} from \"../games/game-info\";\nimport {GameModeEnum} from \"../game-runner/interfaces/game-context/game-context-view-model.interface\";\nimport {IStandardToastDefinition} from \"./toaster.service.interface\";\n\nexport class FirebaseToasterService extends ServiceBase implements IFirebaseToasterService {\n private _receivedToasterEvent: CGPEventSubscription;\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this.reaction(() => this.services.user.isAuthorized, (isAuthorized) => {\n if(isAuthorized) {\n this._receivedToasterEvent = this.services.sdk.events.onReceivedToaster(this.onToastMessageReceived);\n } else {\n this._receivedToasterEvent?.off();\n }\n }, {\n fireImmediately: true\n });\n\n // makeObservable(this);\n }\n\n /**\n * Translates the parameters received through firebase to what the wrapper uses ( shorter property names mostly )\n * @param params (Array) -> Message parameters received from firebase\n */\n private onToastMessageReceived = async (params: IUCCToasterParams[]) => {\n // this was added for qa as an alternative to firebase ( in case of firebase received messages, this condition is redundant )\n if (!this.services.user.isAuthorized) {\n this.services.logger.debug('TOASTER [onToastMessageReceived] :: NOT LOGGED IN, QUITTING');\n return;\n }\n\n for (let i = 0; i < params.length; i++) {\n // translate firebase message params to toast data\n const config = params[i];\n\n // let's see if the toast is about a game\n const metaData = Check.isNullOrUndefined(config.MetaDataParams) ? {} : safeJsonParse(config.MetaDataParams, {});\n const gameTypeIDRaw = metaData.GameTypeID || config.GameTypeID;\n let gameInfo: GameInfo | undefined = undefined;\n if (!Check.isNullOrUndefined(gameTypeIDRaw)) {\n const GameTypeIDInt = parseInt(gameTypeIDRaw);\n if (isNaN(GameTypeIDInt) ) {\n throw new Error(\"We got a game type id but it could not be converted to string\");\n }\n gameInfo = await this.services.games.getGameInfo(GameTypeIDInt);\n }\n\n const timeout: number = config.DurationInSec || 0;\n\n // we build the toast data. some of the data is for the content, some for analytics\n const toastData: IStandardToastDefinition = {\n id: config.MessageID,\n // type: config.Type,\n // IToastOptions\n toastOptions: {\n timeout: TimeSpan.fromSeconds(timeout)\n },\n // IStandardToastContentProps\n contentProps: {\n title: config.Title,\n message: config.SubTitle,\n button: undefined,\n image: (this.services.mediaQuery.mAndBelow ? config.MobileImage : config.PCImage) || config.IconImagePath,\n },\n onToastShown: () => {\n if (!Check.isEmpty(config.analyticsData)) {\n this.services.analytics.sendAnalytics(config.analyticsData?.category, config.analyticsData?.action, config.analyticsData?.label);\n }\n }\n // showImageByDefault: config.ShowDefaultImage,\n\n // TODO: This data seems unused. Verify this\n // customUIConfig: config.customUIConfig,\n // responseTopicPath: config.ResponseTopicPath,\n // close: config.close,\n // layout: config.layout,\n };\n\n\n if (gameInfo) {\n // toastData.type = TOAST_TYPES.ACTION;\n toastData.contentProps.button = {\n text: config.buttonText || this.services.translation.translate(\"PLAY\"),\n onClick: (closeToast) => {\n if(gameInfo) {\n this.services.gameRunner.then(gameRunner => {\n gameRunner.openGame({gameInfo, gameMode: GameModeEnum.Real});\n })\n\n }\n closeToast();\n }\n };\n } else if (config.buttonText && config.callback) {\n toastData.contentProps.button = {\n text: config.buttonText,\n onClick: (closeToast) => {\n config.callback();\n closeToast();\n },\n };\n } else if (config.Type === TOAST_TYPES.ACKNOWLEDGE || (!config.Type && !timeout)) {\n // we show by default an OK button if Type is Ackowledge or if Type and timeout are not set\n toastData.contentProps.button = {\n text: this.services.translation.translate(\"OK\"),\n onClick: (closeToast) => {\n closeToast();\n },\n };\n }\n\n this.services.toaster.showStandardToast(toastData);\n }\n }\n\n}","export enum VideoTypeEnum {\n VideoStream,\n LiveStream\n}","import {IVideoResolution} from \"../../video/models/video-player.view-model.interface\";\n\nexport type SlideType = 'LiveStream' | 'VideoStream' | 'Promotion';\n\nexport enum VideoSlidesAnalyticsEventEnum {\n\n /**\n * Reported when the slide becomes active (becomes the current slide)\n */\n SlideActivated = 'SlideActivated',\n\n /**\n * Reported when the slide becomes inactive active.\n */\n SlideDeactivated = 'SlideDeactivated',\n\n /**\n * Send when the video started playing\n */\n PlayVideoStarted = \"PlayVideoStarted\",\n\n /**\n * Reported when the user click on the play game button from a video slide.\n */\n PlayGame = \"PlayGame\",\n\n /**\n * Reported when the user bookmark a game using the bookmark button.\n */\n BookGame = \"BookGame\",\n\n /**\n * Reported when a bookmark for a game is removed\n */\n RemoveBookedGame = \"RemoveBookedGame\",\n\n /**\n * Reported when the user mutes the video sound\n */\n Mute = \"Mute\",\n\n /**\n * Reported when the user unmutes the video sound\n */\n Unmute = \"Unmute\",\n\n /**\n * Reported when the user click on the retry play button and this attempt was successful.\n */\n RetryPlayVideoSuccess = \"RetryPlayVideoSuccess\",\n\n /**\n * Reported when an attempt to retry a failed video also fails.\n */\n RetryPlayVideoError = 'RetryPlayVideoError',\n\n /**\n * Reported when the video is paused due to the application browser tab becomes inactive.\n */\n PauseVideoOnAppSleep = \"PauseVideoOnAppSleep\",\n\n /**\n * Triggered when resuming a video play was successful. Resume play happens for example when the user comes back on a previously inactive browser tab.\n */\n ResumePlayVideoSuccess = \"ResumePlayVideoSuccess\",\n\n /**\n * Reported when there is an error while resuming a video play that was paused previously because of the browser tab becoming inactive.\n */\n ResumePlayVideoError = 'ResumePlayVideoError',\n\n /**\n * Reported when there was an error playing a video\n */\n PlayVideoError = 'PlayVideoError',\n\n /**\n * Reported when there was an error in the preload stage of the video.\n */\n PreloadVideoError = 'PreloadVideoError',\n\n /**\n * Reported when there was an error loading the video poster\n */\n VideoPosterLoadError = 'VideoPosterLoadError',\n\n /**\n * Reported when there are more than 15 dropped video frames.\n */\n DroppedVideoFrames = 'DroppedVideoFrames',\n\n /**\n * Reported when the watch time reach 2 minutes for a live stream video.\n */\n VideoWatchTimeLimitReached = 'VideoWatchTimeLimitReached',\n\n /**\n * Reported when the video resolution changed.\n */\n VideoResolutionChanged = 'VideoResolutionChanged',\n\n /**\n * Reported when the video player does buffering but only if the buffering time is more than 1 second.\n */\n Buffering = \"Buffering\",\n\n\n}\n\nexport interface IVideoSlidesAnalyticsData {\n eventName: VideoSlidesAnalyticsEventEnum;\n\n /**\n * Can be 'LiveStream' | 'VideoStream' | 'Promotion'\n */\n slideType: SlideType;\n\n /**\n * The ID of the game that is shown in the current slide\n */\n gameType: number;\n\n /**\n * The name of the game that is shown in the current slide\n */\n gameName: string;\n\n /**\n * The video total duration time.\n */\n videoDuration?: number;\n\n /**\n * How long the user watched this video on this session. If for example the user watches 10 seconds and swipe to the next video then 10 seconds will be reported.\n * But if then swipe back and watch another 5 seconds and swipe again to the next slide then 15 seconds will be reported.\n */\n videoWatchTime: number;\n\n /**\n * How much time the user spend on the current slide from the moment the slide was activated until the slide was deactivated.\n * Reported only with the SlideDeactivated event.\n */\n slideActiveTime?: number;\n\n /**\n * It is true when the videoWatchTime reach 2 minutes for a live stream video.\n */\n watchTimeLimitReached: boolean;\n\n /**\n * The error name for the events that reports errors\n */\n errorName: string;\n\n /**\n * The error message for the events that reports errors\n */\n errorMessage: string;\n\n /**\n * True if video sound is muted\n */\n isMuted: boolean;\n\n /**\n * True if video is in the playing mode\n */\n isPlaying: boolean;\n\n /**\n * The number of dropped frames. It is reported only if droppedFrames > 15\n */\n droppedFrames?: number;\n\n /**\n * The video resolution before the resolution change occurred. It is reported only with the VideoResolutionChanged event\n */\n previousResolution?: IVideoResolution;\n\n /**\n * Current video resolution.\n */\n currentResolution: IVideoResolution;\n\n /**\n * Current filter ID selected by the user in the video-slides page\n */\n currentFilter: string;\n\n /**\n * The total number of slides for the current applied filter\n */\n slidesCount: number;\n\n /**\n * The index position of the slide. This value can be between 0 and slidesCount - 1\n */\n realSlideIndex: number;\n\n /**\n * The video slides swiper is a circular (infinite) swiper. This means that the swiping down never ends.\n * This value can be higher than slidesCount - 1 and when it is higher it means that the user swiped at least once through all the available slides.\n */\n virtualSlideIndex: number;\n\n /**\n * The direction of the swipe.\n * -1 => Go to previous\n * 1 => Go to next slide\n */\n swipeDirection: number;\n\n /**\n * Reported when the video player does buffering.\n * It is reported along with the Buffering event only if the buffering time is higher than 1 second.\n */\n bufferingTime: number;\n}","import { makeObservable, observable, runInAction} from \"mobx\";\nimport { IJackpotHandler } from \"../jackpots/jackpot-handler/jackpot-handler.interface\";\nimport { IJackpotData } from \"../jackpots/jackpots.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { ServiceBase } from \"../ServiceBase\";\nimport { ITitanJackpotService } from \"./titan-jackpot.service.interface\";\n\nexport class TitanJackpotService extends ServiceBase implements ITitanJackpotService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n \n makeObservable(this);\n }\n\n @observable.ref\n jackpotHandler: IJackpotHandler;\n\n\n public updateJackpotHandler(jackpotId: string): void {\n this.services.jackpots.then(jackpots => {\n runInAction(() => {\n this.jackpotHandler = jackpots.currentJackpotsById[jackpotId];\n\n const jackpotData = (this.jackpotHandler?.jackpotData || {}) as IJackpotData;\n\n this.jackpotHandler.forceGradual(jackpotData);\n })\n })\n\n } \n}","import {removeSpecialCharacters} from \"../../../../utils/string-helpers\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nexport class GameThemeDefinition {\n constructor(public readonly id: number,\n private readonly _translationKey: string,\n private readonly services: IServiceFactoryExtended) {\n this.name = this.services.translation.translate(_translationKey);\n }\n\n public readonly name: string;\n\n isMatch(regEx: RegExp): boolean {\n return Boolean(removeSpecialCharacters(this.name).match(regEx) || removeSpecialCharacters(this._translationKey).match(regEx));\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {GameThemeDefinition} from \"./game-theme-definition/game-theme-definition\";\nimport {GameThemeId} from \"./game-theme-id.enum\";\nimport {IGamesThemeService} from \"./games-theme.service.interface\";\n\nexport class GamesThemeService extends ServiceBase implements IGamesThemeService {\n\n private _allThemes: GameThemeDefinition[] = [\n new GameThemeDefinition(GameThemeId.Adventure, \"Adventure\", this.services),\n new GameThemeDefinition(GameThemeId.AncientCivilization, \"Ancient Civilization\", this.services),\n new GameThemeDefinition(GameThemeId.Wildlife, \"Wildlife\", this.services),\n new GameThemeDefinition(GameThemeId.ClassicStyle, \"Classic Style\", this.services),\n new GameThemeDefinition(GameThemeId.Asian, \"Asian\", this.services),\n new GameThemeDefinition(GameThemeId.TableGames, \"Table Games\", this.services),\n new GameThemeDefinition(GameThemeId.MoviesAndMusic, \"Movies and Music\", this.services),\n new GameThemeDefinition(GameThemeId.Fruit, \"Fruit and Candy\", this.services),\n new GameThemeDefinition(GameThemeId.MoneyAndLeisure, \"Money and Leisure\", this.services),\n new GameThemeDefinition(GameThemeId.ComicsAndCartoons, \"Comics and Cartoons\", this.services),\n new GameThemeDefinition(GameThemeId.Irish, \"Irish\", this.services),\n new GameThemeDefinition(GameThemeId.Arcade, \"Arcade\", this.services),\n new GameThemeDefinition(GameThemeId.DiamondsAndGems, \"Diamonds and Gems\", this.services),\n new GameThemeDefinition(GameThemeId.FantasyAndFolklore, \"Fantasy and Folklore\", this.services),\n new GameThemeDefinition(GameThemeId.Seasonal, \"Seasonal\", this.services),\n new GameThemeDefinition(GameThemeId.Egyptian, \"Egyptian\", this.services),\n new GameThemeDefinition(GameThemeId.FarmAndPets, \"Farm and Pets\", this.services),\n new GameThemeDefinition(GameThemeId.Sports, \"Sports\", this.services),\n new GameThemeDefinition(GameThemeId.LiveCasino, \"Live Casino\", this.services),\n new GameThemeDefinition(GameThemeId.Arabic, \"Arabic\", this.services),\n new GameThemeDefinition(GameThemeId.GreekMythology, \"Greek Mythology\", this.services),\n new GameThemeDefinition(GameThemeId.NA, \"N/A\", this.services),\n new GameThemeDefinition(GameThemeId.SpaceAndSciFi, \"Space and Sci-fi\", this.services),\n new GameThemeDefinition(GameThemeId.ScratchCards, \"Scratch Cards\", this.services),\n new GameThemeDefinition(GameThemeId.Fish, \"Fish\", this.services),\n new GameThemeDefinition(GameThemeId.Mexican, \"Mexican\", this.services),\n new GameThemeDefinition(GameThemeId.Xmas, \"Xmas\", this.services),\n new GameThemeDefinition(GameThemeId.Bingo, \"Bingo\", this.services),\n new GameThemeDefinition(GameThemeId.ClassicStyleModernized, \"Classic Style Modernized\", this.services),\n new GameThemeDefinition(GameThemeId.AztecIncaMayan, \"Aztec Inca Mayan\", this.services),\n new GameThemeDefinition(GameThemeId.Crime, \"Crime\", this.services),\n new GameThemeDefinition(GameThemeId.WildWest, \"Wild West\", this.services),\n new GameThemeDefinition(GameThemeId.CandyAndSweets, \"Candy And Sweets\", this.services),\n new GameThemeDefinition(GameThemeId.GoldMining, \"Gold Mining\", this.services),\n new GameThemeDefinition(GameThemeId.VikingsAndNordicMythology, \"Vikings And Nordic Mythology\", this.services),\n ]\n\n findThemes(regEx: RegExp): number[] {\n const foundThemes: number[] = [];\n\n this._allThemes.forEach(theme => {\n if (theme.isMatch(regEx)) {\n foundThemes.push(theme.id)\n }\n })\n\n return foundThemes;\n }\n\n getGameThemeDefinition(gameThemeId: number): GameThemeDefinition {\n return this._allThemes.find(gameThemeDefinition => gameThemeDefinition.id === gameThemeId);\n }\n}","import {removeSpecialCharacters} from \"../../../../utils/string-helpers\";\n\nexport class GameVendorDefinition {\n constructor(public readonly id: number,\n public readonly name: string,\n public readonly tags?: string[]) {\n }\n\n isMatch(regEx: RegExp): boolean {\n return this._nameIsMatch(regEx) || this._anyTagIsMatch(regEx);\n }\n\n private _nameIsMatch(regEx: RegExp): boolean {\n return Boolean(removeSpecialCharacters(this.name).match(regEx));\n }\n\n private _anyTagIsMatch(regEx: RegExp): boolean {\n return this.tags?.reduce((prevResult, currentTag) => {\n if (Boolean(removeSpecialCharacters(currentTag).match(regEx))) {\n return true;\n }\n return prevResult;\n }, false);\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {GameVendorDefinition} from \"./game-vendor-definition.ts/game-vendor-definition\";\nimport {GameVendorId} from \"./game-vendor-id.enum\";\nimport {IGamesVendorService} from \"./games-vendor.service.interface\";\n\nexport class GamesVendorService extends ServiceBase implements IGamesVendorService {\n\n private _allVendors: GameVendorDefinition[] = [\n new GameVendorDefinition(GameVendorId.V_888, \"888\"),\n new GameVendorDefinition(GameVendorId.V_AGS, \"AGS\"),\n new GameVendorDefinition(GameVendorId.V_Amatic, \"Amatic\"),\n new GameVendorDefinition(GameVendorId.V_Authentic, \"Authentic\"),\n new GameVendorDefinition(GameVendorId.V_Ainsworth, \"Ainsworth\"),\n new GameVendorDefinition(GameVendorId.V_Blueprint, \"Blueprint\"),\n new GameVendorDefinition(GameVendorId.V_Darwin, \"Darwin\"),\n new GameVendorDefinition(GameVendorId.V_EGT, \"Amusnet\", [\"EGT\"]),\n new GameVendorDefinition(GameVendorId.V_Elk, \"Elk\"),\n new GameVendorDefinition(GameVendorId.V_Evolution, \"Evolution\"),\n new GameVendorDefinition(GameVendorId.V_Eyecon, \"Eyecon\"),\n new GameVendorDefinition(GameVendorId.V_GamesGlobal, \"Games Global\"),\n new GameVendorDefinition(GameVendorId.V_GamingRealms, \"Gaming Realms\"),\n new GameVendorDefinition(GameVendorId.V_Gamomat, \"Gamomat\"),\n new GameVendorDefinition(GameVendorId.V_Greentube, \"Greentube\"),\n new GameVendorDefinition(GameVendorId.V_H5, \"H5\"),\n new GameVendorDefinition(GameVendorId.V_Habanero, \"Habanero\"),\n new GameVendorDefinition(GameVendorId.V_IGT, \"IGT\"),\n new GameVendorDefinition(GameVendorId.V_Inspired, \"Inspired\"),\n new GameVendorDefinition(GameVendorId.V_iSoftBet, \"iSoftBet\"),\n new GameVendorDefinition(GameVendorId.V_LightningBox, \"Lightning Box\"),\n new GameVendorDefinition(GameVendorId.V_LNW, \"LNW\"),\n new GameVendorDefinition(GameVendorId.V_LNW2, \"LNW2\"),\n new GameVendorDefinition(GameVendorId.V_Merkur, \"Merkur\"),\n new GameVendorDefinition(GameVendorId.V_MGA, \"MGA\"),\n new GameVendorDefinition(GameVendorId.V_Netent, \"Netent\"),\n new GameVendorDefinition(GameVendorId.V_NetEnt, \"NetEnt\"),\n new GameVendorDefinition(GameVendorId.V_NextGenBigTime, \"Next_Gen Big Time\"),\n new GameVendorDefinition(GameVendorId.V_NextGenChanceInteractive, \"NextGen_Chance Interactive\"),\n new GameVendorDefinition(GameVendorId.V_NoLimitCity, \"No Limit City\"),\n new GameVendorDefinition(GameVendorId.V_PlayNGo, \"Play N Go\"),\n new GameVendorDefinition(GameVendorId.V_PlayTech, \"PlayTech\"),\n new GameVendorDefinition(GameVendorId.V_Pragmatic, \"Pragmatic\"),\n new GameVendorDefinition(GameVendorId.V_Quickspin, \"Quickspin\"),\n new GameVendorDefinition(GameVendorId.V_RedRake, \"Red Rake\"),\n new GameVendorDefinition(GameVendorId.V_RedTiger, \"Red Tiger\"),\n new GameVendorDefinition(GameVendorId.V_RubyPlay, \"Ruby Play\"),\n new GameVendorDefinition(GameVendorId.V_Sigma, \"Sigma\"),\n new GameVendorDefinition(GameVendorId.V_Skywind, \"Skywind\"),\n new GameVendorDefinition(GameVendorId.V_Spribe, \"Spribe\"),\n new GameVendorDefinition(GameVendorId.V_Thunderkick, \"Thunderkick\"),\n new GameVendorDefinition(GameVendorId.V_Wizard, \"Wizard\"),\n new GameVendorDefinition(GameVendorId.V_WMG, \"WMG\"),\n new GameVendorDefinition(GameVendorId.V_Yggdrasil, \"Yggdrasil\"),\n new GameVendorDefinition(GameVendorId.V_Everi, \"Everi\"),\n new GameVendorDefinition(GameVendorId.V_PushGaming, \"Push Gaming\"),\n new GameVendorDefinition(GameVendorId.V_GoldenRace, \"GoldenRace\"),\n new GameVendorDefinition(GameVendorId.V_CTXM, \"CTXM\"),\n new GameVendorDefinition(GameVendorId.V_vsGaming, \"vsGaming\"),\n new GameVendorDefinition(GameVendorId.V_Electracade, \"Electracade\"),\n new GameVendorDefinition(GameVendorId.V_Rival, \"Rival\"),\n new GameVendorDefinition(GameVendorId.V_Dynamite, \"Dynamite\"),\n new GameVendorDefinition(GameVendorId.V_Ashgaming, \"Ashgaming\"),\n new GameVendorDefinition(GameVendorId.V_Crypto, \"Crypto\"),\n new GameVendorDefinition(GameVendorId.V_BlueSq, \"BlueSq\"),\n new GameVendorDefinition(GameVendorId.V_Bellfruit, \"Bellfruit\"),\n new GameVendorDefinition(GameVendorId.V_Sportech, \"Sportech\"),\n new GameVendorDefinition(GameVendorId.V_WagerWorks, \"Wager Works\"),\n new GameVendorDefinition(GameVendorId.V_Betlow, \"Betlow\"),\n new GameVendorDefinition(GameVendorId.V_Fremantle, \"Fremantle\"),\n new GameVendorDefinition(GameVendorId.V_Gamesq, \"Gamesq\"),\n new GameVendorDefinition(GameVendorId.V_DSL, \"DSL\"),\n new GameVendorDefinition(GameVendorId.V_Ponsbic, \"Ponsbic\"),\n new GameVendorDefinition(GameVendorId.V_Endemol, \"Endemol\"),\n new GameVendorDefinition(GameVendorId.V_Mazooma, \"Mazooma\"),\n new GameVendorDefinition(GameVendorId.V_Genesis, \"Genesis\"),\n new GameVendorDefinition(GameVendorId.V_RevolverGaming, \"Revolver Gaming\"),\n new GameVendorDefinition(GameVendorId.V_Kambi, \"Kambi\"),\n new GameVendorDefinition(GameVendorId.V_Ingenuity, \"Ingenuity\"),\n new GameVendorDefinition(GameVendorId.V_UniversalStudios, \"Universal Studios\"),\n new GameVendorDefinition(GameVendorId.V_BallyWulff, \"Bally Wulff\"),\n new GameVendorDefinition(GameVendorId.V_Skilzz, \"Skilzz\"),\n new GameVendorDefinition(GameVendorId.V_NorthernLight, \"Northern Light\"),\n new GameVendorDefinition(GameVendorId.V_Gamevy, \"Gamevy\"),\n new GameVendorDefinition(GameVendorId.V_Playson, \"Playson\"),\n new GameVendorDefinition(GameVendorId.V_Spectate, \"Spectate\"),\n new GameVendorDefinition(GameVendorId.V_PGSoft, \"PGSoft\"),\n new GameVendorDefinition(GameVendorId.V_RFranco, \"RFranco\"),\n new GameVendorDefinition(GameVendorId.V_4theplayer, \"4theplayer\"),\n new GameVendorDefinition(GameVendorId.V_Realistic, \"Realistic\"),\n new GameVendorDefinition(GameVendorId.V_Oryx, \"Oryx\"),\n new GameVendorDefinition(GameVendorId.V_ReelPlay, \"Reel Play\"),\n new GameVendorDefinition(GameVendorId.V_Hacksaw, \"Hacksaw\"),\n new GameVendorDefinition(GameVendorId.V_1x2, \"1x2\"),\n new GameVendorDefinition(GameVendorId.V_Leap, \"Leap\"),\n new GameVendorDefinition(GameVendorId.V_Core, \"Core\"),\n new GameVendorDefinition(GameVendorId.V_ReelNRG, \"ReelNRG\"),\n new GameVendorDefinition(GameVendorId.V_IronDog, \"IronDog\"),\n new GameVendorDefinition(GameVendorId.V_Endorphina, \"Endorphina\"),\n new GameVendorDefinition(GameVendorId.V_Betsoft, \"Betsoft\"),\n new GameVendorDefinition(GameVendorId.V_Playzido, \"Playzido\"),\n new GameVendorDefinition(GameVendorId.V_PlayzidoOthers, \"Playzido Others\"),\n new GameVendorDefinition(GameVendorId.V_TomHorn, \"Tom Horn\"),\n new GameVendorDefinition(GameVendorId.V_NeoGames, \"Neo Games\"),\n new GameVendorDefinition(GameVendorId.V_BFGames, \"BFGames\"),\n new GameVendorDefinition(GameVendorId.V_Kalamba, \"Kalamba\"),\n new GameVendorDefinition(GameVendorId.V_GiveMe, \"Give Me\"),\n new GameVendorDefinition(GameVendorId.V_GoldenHero, \"Golden Hero\"),\n new GameVendorDefinition(GameVendorId.V_2by2, \"2by2\"),\n new GameVendorDefinition(GameVendorId.V_PlankGaming, \"Plank Gaming\"),\n new GameVendorDefinition(GameVendorId.V_BulletproofGames, \"Bulletproof Games\"),\n new GameVendorDefinition(GameVendorId.V_Wazdan, \"Wazdan\"),\n new GameVendorDefinition(GameVendorId.V_PlayzidoReelplay, \"Playzido Reelplay\"),\n new GameVendorDefinition(GameVendorId.V_Gong, \"Gong\"),\n new GameVendorDefinition(GameVendorId.V_DWG, \"DWG\"),\n new GameVendorDefinition(GameVendorId.V_TripleCherry, \"Triple Cherry\"),\n new GameVendorDefinition(GameVendorId.V_Spearhead, \"Spearhead\"),\n new GameVendorDefinition(GameVendorId.V_Spinomenal, \"Spinomenal\"),\n new GameVendorDefinition(GameVendorId.V_CIRSA, \"CIRSA\"),\n new GameVendorDefinition(GameVendorId.V_Funfair, \"Funfair\"),\n new GameVendorDefinition(GameVendorId.V_GreenJade, \"GreenJade\"),\n new GameVendorDefinition(GameVendorId.V_NazionaleElectronica, \"Nazionale Electronica\"),\n new GameVendorDefinition(GameVendorId.V_Booming, \"Booming\"),\n new GameVendorDefinition(GameVendorId.V_Betixon, \"Betixon\"),\n new GameVendorDefinition(GameVendorId.V_NetGaming, \"Net Gaming\"),\n new GameVendorDefinition(GameVendorId.V_BGaming, \"BGaming\"),\n new GameVendorDefinition(GameVendorId.V_BlueHorn, \"Blue Horn\"),\n new GameVendorDefinition(GameVendorId.V_SpinPlay, \"Spin Play\"),\n new GameVendorDefinition(GameVendorId.V_Arcadia, \"Arcadia\"),\n new GameVendorDefinition(GameVendorId.V_Stakelogic, \"Stakelogic\"),\n new GameVendorDefinition(GameVendorId.V_Live5, \"Live5\"),\n new GameVendorDefinition(GameVendorId.V_Swintt, \"Swintt\"),\n new GameVendorDefinition(GameVendorId.V_Edict, \"Edict\"),\n new GameVendorDefinition(GameVendorId.V_GameArt, \"Game Art\"),\n new GameVendorDefinition(GameVendorId.V_LadyLuck, \"Lady Luck\"),\n new GameVendorDefinition(GameVendorId.V_SmartSoft, \"SmartSoft\"),\n new GameVendorDefinition(GameVendorId.V_Spinberry, \"Spinberry\"),\n new GameVendorDefinition(GameVendorId.V_TopSpin, \"Top Spin\"),\n new GameVendorDefinition(GameVendorId.V_eZugi, \"eZugi\"),\n new GameVendorDefinition(GameVendorId.V_IndigoMagic, \"Indigo Magic\"),\n new GameVendorDefinition(GameVendorId.V_AtomicLabs, \"Atomic Labs\"),\n new GameVendorDefinition(GameVendorId.V_Bluberi, \"Bluberi\"),\n new GameVendorDefinition(GameVendorId.V_RAW, \"RAW\"),\n new GameVendorDefinition(GameVendorId.V_Reevo, \"Reevo\"),\n new GameVendorDefinition(GameVendorId.V_WhiteHat, \"White Hat\"),\n new GameVendorDefinition(GameVendorId.V_EGTDigital, \"EGT Digital\")\n ];\n\n findVendors(regEx: RegExp): number[] {\n const foundVendors: number[] = [];\n\n this._allVendors.forEach(theme => {\n if (theme.isMatch(regEx)) {\n foundVendors.push(theme.id)\n }\n })\n\n return foundVendors;\n }\n getVendor(gameVendorId: number): GameVendorDefinition {\n return this._allVendors.find(gameThemeDefinition => gameThemeDefinition.id === gameVendorId);\n }\n}","import {IPlayerMessagesService} from \"./player-messages.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {delay} from \"../../../utils/delay\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport class PlayerMessagesService extends ServiceBase implements IPlayerMessagesService {\n\n waitForPlayerMessagesReady(): Promise {\n if(this.services.sdk.isPlayerMessagesConnected) {\n return Promise.resolve();\n }\n\n return new Promise(resolve => {\n const subscription = this.services.sdk.events.onPlayerMessagesConnected(async () => {\n subscription?.off();\n await delay(TimeSpan.fromSeconds(1));\n resolve();\n })\n });\n }\n\n}","import {observable, makeObservable} from \"mobx\";\nimport {IVideoSlidesFilter as IVideoSlidesFilterConfig} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport {IServiceFactory} from \"../../../service-factory.interface\";\nimport {IVideoSlidesFilterViewModel} from \"./video-slides-filter-view-model.interface\";\n\nexport class VideoSlidesFilterModel implements IVideoSlidesFilterViewModel {\n constructor(protected readonly services: IServiceFactory, protected readonly videoSlidesFilterConfig: IVideoSlidesFilterConfig) {\n makeObservable(this);\n this.icon = this.videoSlidesFilterConfig.icon;\n }\n\n get id(): string {\n return this.videoSlidesFilterConfig.id;\n }\n\n get title(): string {\n return this.videoSlidesFilterConfig.translationKey\n }\n icon?: string;\n\n @observable.ref\n protected _on: boolean = false;\n get on(): boolean {\n return this.services.gamesFilter.isFilterApplied(this.videoSlidesFilterConfig.id);\n }\n\n get shouldBeDisplayed(): boolean {\n let isValidFilterForCurrentArena = this.services.gamesFilter.isValidFilter(this.videoSlidesFilterConfig.id);\n //let hasGamesForCurrentFilter = this.services.gamesFilter.getNumberOfGamesBeforeUserApply([this.videoSlidesFilterConfig.id]) > 0\n return isValidFilterForCurrentArena;\n }\n\n async applyFilter(): Promise {\n await this.services.gamesFilter.applyFilters([this.videoSlidesFilterConfig.id]);\n }\n\n}","import {VideoSlidesFilterModel} from \"./video-slides-filter.model\";\n\nexport class ForYouVideoSlidesFilter extends VideoSlidesFilterModel {\n get on(): boolean {\n return this.services.gamesFilter.currentAppliedFiltersIds.length < 1;\n }\n\n get shouldBeDisplayed(): boolean {\n return true;\n }\n\n async applyFilter(): Promise {\n await this.services.gamesFilter.clearFilters();\n }\n}","import {IVideoSlidesRuleConfig} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {ISlideRuleModel} from \"./slide-rule-model.interface\";\n\nexport abstract class SlideRuleBaseModel implements ISlideRuleModel {\n constructor(private readonly ruleConfig: IVideoSlidesRuleConfig,\n private readonly games: GameInfo[],\n protected readonly services: IServiceFactoryExtended) {\n }\n\n protected abstract createVideoSlideRenderer(gameInfo: GameInfo): ISlideRenderer;\n\n private _currentIndex = 0;\n\n appendToChunk(currentChunkContent: ISlideRenderer[]): ISlideRenderer[] {\n\n const slice = this.games.slice(this._currentIndex, this._currentIndex + this.ruleConfig.slidesChunkSize)\n .map(gameInfo => this.createVideoSlideRenderer(gameInfo))\n\n this._currentIndex += this.ruleConfig.slidesChunkSize;\n\n return [\n ...currentChunkContent,\n ...slice\n ];\n }\n\n}","import {IVideoAnalyticsReporter} from \"../../video/models/analytics/video-analytics-reporter.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IVideoPlayerViewModel, IVideoResolution} from \"../../video/models/video-player.view-model.interface\";\nimport {VideoTypeEnum} from \"../../video/models/video-type.enum\";\nimport {\n IVideoSlidesAnalyticsData,\n SlideType,\n VideoSlidesAnalyticsEventEnum\n} from \"./video-slides-analytics-data.interface\";\nimport {IStructuredLogger} from \"../../../../common/interfaces/structured-logging-service-interface\";\nimport {IVideoSwiperSlideController} from \"../models/video-swiper-slide-controller.interface\";\nimport {SwipeDirectionEnum} from \"../../../components/spark-swiper/models/spark-swiper-slide-controller.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport class VideoSlidesAnalyticsReporter implements IVideoAnalyticsReporter {\n constructor(private readonly gameInfo: GameInfo,\n private readonly videoType: VideoTypeEnum,\n private readonly videoSlideController: IVideoSwiperSlideController,\n private readonly services: IServiceFactoryExtended) {\n }\n\n private get slideType(): SlideType {\n if(this.videoType === VideoTypeEnum.VideoStream) {\n return 'VideoStream';\n } else {\n return 'LiveStream';\n }\n }\n\n private get videoPlayer(): IVideoPlayerViewModel {\n return this.videoSlideController.videoPlayer;\n }\n\n private _roundTime(seconds: number): number {\n return Math.round(seconds * 100) / 100;\n }\n\n private _createLogger(eventData: Partial): IStructuredLogger {\n\n const videoPlayer = this.videoPlayer;\n\n eventData = {\n slideType: this.slideType,\n gameType: this.gameInfo.gameType,\n gameName: this.gameInfo.title,\n videoWatchTime: this._roundTime(videoPlayer.watchTime.totalSeconds),\n isMuted: videoPlayer.isMuted,\n isPlaying: videoPlayer.isPlaying,\n currentResolution: videoPlayer.resolution,\n watchTimeLimitReached: videoPlayer.watchTimeLimitReached,\n virtualSlideIndex: this.videoSlideController.itemIndex,\n realSlideIndex: this.videoSlideController.realIndex,\n slidesCount: this.services.videoSlides.swiperController.getItemsCount(),\n currentFilter: this.services.videoSlides.currentAppliedFilter.id,\n ...eventData\n };\n\n if(this.videoType !== VideoTypeEnum.LiveStream) {\n eventData.videoDuration = this._roundTime(videoPlayer.videoDurationInSeconds);\n }\n\n return this.services.analytics.getLogger({\n videoSlides: {\n ...eventData\n }\n }).setCorrelationId(this.services.tools.getGuid())\n .setEventType('videoSlides', 'Log', 'Analytics');\n }\n\n reportPlayStarted(): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.PlayVideoStarted\n }).info();\n }\n\n reportRetryPlaySuccess() {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.RetryPlayVideoSuccess\n }).info();\n }\n\n reportResumePlaySuccess() {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.ResumePlayVideoSuccess\n }).info();\n }\n\n reportPauseOnAppSleep() {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.PauseVideoOnAppSleep\n }).info();\n }\n\n private _reportError(eventName: VideoSlidesAnalyticsEventEnum, error: any): void {\n this._createLogger({\n eventName: eventName,\n errorName: error.name ?? \"\",\n errorMessage: error.message ?? \"\"\n }).info();\n }\n\n reportPreloadError(error: any): void {\n this._reportError(VideoSlidesAnalyticsEventEnum.PreloadVideoError, error);\n }\n\n reportPlayError(error: any): void {\n this._reportError(VideoSlidesAnalyticsEventEnum.PlayVideoError, error);\n }\n\n reportRetryPlayError(error: any): void {\n this._reportError(VideoSlidesAnalyticsEventEnum.RetryPlayVideoError, error);\n }\n\n reportResumePlayError(error: any): void {\n this._reportError(VideoSlidesAnalyticsEventEnum.ResumePlayVideoError, error);\n }\n\n reportPosterLoadFailure(error: any): void {\n this._reportError(VideoSlidesAnalyticsEventEnum.VideoPosterLoadError, error);\n }\n\n reportDroppedFrames(droppedVideoFrames: number): void {\n if(droppedVideoFrames < 15 ) {\n return;\n }\n\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.DroppedVideoFrames,\n droppedFrames: droppedVideoFrames\n }).info();\n }\n\n reportWatchTimeLimitReached(): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.VideoWatchTimeLimitReached,\n }).info();\n }\n\n reportSlideActivated(swipeDirection: SwipeDirectionEnum): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.SlideActivated,\n swipeDirection: swipeDirection\n }).info();\n }\n\n\n reportSlideDeactivated(params: {swipeDirection: SwipeDirectionEnum; slideActiveTime: TimeSpan}): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.SlideDeactivated,\n swipeDirection: params.swipeDirection,\n slideActiveTime: this._roundTime(params.slideActiveTime.totalSeconds)\n }).info();\n }\n\n reportVideoResolutionChanged(previousResolution: IVideoResolution, currentResolution: IVideoResolution): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.VideoResolutionChanged,\n previousResolution: previousResolution,\n currentResolution: currentResolution\n }).info();\n }\n\n reportBufferingTime(bufferingTime: TimeSpan): void {\n if(bufferingTime.totalSeconds > 1) {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.Buffering,\n bufferingTime: bufferingTime.totalSeconds\n }).info();\n }\n }\n\n reportPlayGame(): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.PlayGame\n }).info();\n }\n\n reportBookedGame(): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.BookGame\n }).info();\n }\n\n reportRemoveBookedGame(): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.RemoveBookedGame\n }).info();\n }\n\n reportMute() {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.Mute\n }).info();\n }\n\n reportUnmute() {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.Unmute\n }).info();\n }\n}","import React from \"react\";\n\nexport enum SwipeDirectionEnum {\n Backward = -1,\n Initial = 0,\n Forward = 1\n}\n\nexport interface ISparkSwiperSlideController {\n readonly key: string;\n readonly itemIndex: number;\n readonly itemIndexOffset: number;\n readonly isActiveSlide: boolean;\n renderSlideContent(): React.ReactElement;\n onBeforeDeactivate(swipeDirection: SwipeDirectionEnum): void;\n onAfterActivated(swipeDirection: SwipeDirectionEnum): void;\n\n}","import React from 'react';\nimport {IAfterActivateSlideRendererContext, IBeforeDeactivateSlideRendererContext,\n ISlideRenderer\n} from \"../video-slides.service.interface\";\nimport {IVideoSwiperSlideController} from \"../models/video-swiper-slide-controller.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {VideoSlidesAnalyticsReporter} from \"../analytics/video-slides-analytics-reporter\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {VideoTypeEnum} from \"../../video/models/video-type.enum\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\n\nexport abstract class VideoSlideBaseRenderer implements ISlideRenderer {\n\n constructor(protected readonly gameInfo: GameInfo, protected readonly videoType: VideoTypeEnum, protected readonly services: IServiceFactoryExtended) {\n\n }\n\n protected abstract _renderVideoSlide(context: IVideoSwiperSlideController, uniqueKey: string): React.ReactElement;\n\n private _analyticsReporter: VideoSlidesAnalyticsReporter | null = null;\n\n\n render(context: IVideoSwiperSlideController): React.ReactElement {\n this._analyticsReporter = new VideoSlidesAnalyticsReporter(this.gameInfo, this.videoType, context, this.services);\n context.videoPlayer.attachAnalyticsReporter(this._analyticsReporter);\n return this._renderVideoSlide(context, `${this.gameInfo.gameType}_${context.itemIndex}`);\n }\n\n private _slideActivationTime: number = Date.now();\n onAfterActivated(context: IAfterActivateSlideRendererContext): void {\n this._slideActivationTime = Date.now();\n this._analyticsReporter?.reportSlideActivated(context.swipeDirection);\n }\n\n onBeforeDeactivate(context: IBeforeDeactivateSlideRendererContext): void {\n this._analyticsReporter?.reportSlideDeactivated({\n swipeDirection: context.swipeDirection,\n slideActiveTime: TimeSpan.fromMilliseconds( Date.now() - this._slideActivationTime)\n });\n }\n\n protected _playGame = async () => {\n\n this._analyticsReporter?.reportPlayGame();\n\n await this.gameInfo.open({\n isRealMode: true\n });\n }\n\n protected _onBookGame = () => {\n this._analyticsReporter?.reportBookedGame();\n }\n\n protected _onRemoveBookedGame = () => {\n this._analyticsReporter?.reportRemoveBookedGame();\n }\n}","import styled from \"styled-components\";\n\nexport const LiveStreamSlidePlayerContainer = styled.div`\n position: relative;\n`;","import styled from \"styled-components\";\n\nexport const VideoPlayerBox = styled.div`\n position: relative;\n width: 100%; \n height: 100%;\n`","import styled from \"styled-components\";\n\nexport const VideoElementContainerBox = styled.div`\n width: 100%;\n height: 100%;\n`\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {VideoPlayButtonBox} from \"./boxes/video-play-button.box\";\nimport {IVideoPlayerViewModel} from \"../../../services/video/models/video-player.view-model.interface\";\nimport {NullableUndefinedString} from \"../../../../common/types/nullable-types\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\ninterface VideoPlayButtonComponentProps {\n videoPlayer: IVideoPlayerViewModel;\n src: string;\n poster: NullableUndefinedString;\n watchTimeLimit: TimeSpan | undefined;\n}\nexport const VideoPlayButtonComponent: React.FC = observer((props) => {\n const onClickHandler = async () => {\n await props.videoPlayer.play(props.src, {\n poster: props.poster,\n watchTimeLimit: props.watchTimeLimit\n });\n }\n\n if(!props.videoPlayer.isPaused || props.videoPlayer.watchTimeLimitReached) {\n return null;\n }\n\n return (\n \n )\n});\n\n","import styled from \"styled-components\";\n\nexport const VideoErrorTitleBox = styled.span`\n margin: 2rem 0.5rem;\n font-size: 1.6em;\n font-weight: 600;\n text-align: center;\n`;","import styled from \"styled-components\";\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\n\nexport const VideoErrorContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: 1.4em;\n position: fixed;\n height: 100%;\n width: 100%;\n right: 0;\n left: 0;\n top: 0;\n bottom: 0;\n background: ${({theme}) => hexToRgba(theme.colors.background.toString(), 0.7)};\n`;","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {VideoErrorTitleBox} from \"./boxes/video-error-title.box\";\nimport {VideoErrorContainerBox} from \"./boxes/video-error-container.box\";\nimport {IVideoPlayerViewModel} from \"../../../services/video/models/video-player.view-model.interface\";\n\ninterface VideoErrorComponentProps {\n videoPlayer: IVideoPlayerViewModel;\n}\n\nexport const VideoErrorComponent: React.FC = observer((props) => {\n const services = useServices();\n\n if(!props.videoPlayer.hasError || props.videoPlayer.watchTimeLimitReached) {\n return null;\n }\n\n let RetryArrowIcon = services.theme.currentTheme.icons.retryArrowIcon;\n\n const onClickHandler = async () => {\n await props.videoPlayer.retryPlay();\n }\n\n return (\n \n \n \n {services.translation.translate(\"VIDEO_SLIDES_ERROR_MAIN_TEXT\")}\n \n \n )\n});","import styled from \"styled-components\";\n\nexport const VideoWatchTimeLimitReachedBox = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n ${({theme}) => theme.font.presets.regular};\n color: ${({theme}) => theme.colors.textLight};\n background: rgba(0,0,0,0.5);\n`","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {IVideoPlayerViewModel} from \"../../../services/video/models/video-player.view-model.interface\";\nimport {VideoWatchTimeLimitReachedBox} from \"./boxes/video-watch-time-limit-reached.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\n\ninterface VideoWatchTimeLimitReachedComponentProps {\n videoPlayer: IVideoPlayerViewModel;\n}\nexport const VideoWatchTimeLimitReachedComponent: React.FC = observer((props) => {\n const services = useServices();\n\n if(!props.videoPlayer.watchTimeLimitReached) {\n return null;\n }\n\n return (\n \n {services.translation.translate('LIVE_STREAM_WATCH_TIME_REACHED')}\n \n )\n})","import {IVideoPlayerViewModel} from \"../../services/video/models/video-player.view-model.interface\";\nimport React, {useEffect, useRef} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {VideoPlayerBox} from \"./boxes/video-player.box\";\nimport {VideoElementContainerBox} from \"./boxes/video-element-container.box\";\nimport {VideoPlayButtonComponent} from \"./play-button/video-play-button.component\";\nimport {VideoErrorComponent} from \"./error/video-error.component\";\nimport {VideoTypeEnum} from \"../../services/video/models/video-type.enum\";\nimport {NullableUndefinedString} from \"../../../common/types/nullable-types\";\nimport {VideoWatchTimeLimitReachedComponent} from \"./watch-limit/video-watch-time-limit-reached.component\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\n\ninterface VideoPlayerComponentProps {\n videoPlayer: IVideoPlayerViewModel;\n src: string;\n isActive: boolean;\n videoType: VideoTypeEnum;\n poster: NullableUndefinedString;\n}\nexport const VideoPlayerComponent: React.FC = observer((props) => {\n\n const videoElementContainerRef = useRef(null);\n const {videoPlayer, src, isActive, videoType, poster} = props;\n\n const watchTimeLimit = videoType === VideoTypeEnum.LiveStream ? TimeSpan.fromMinutes(2) : undefined\n\n useEffect(() => {\n videoPlayer.attach(videoElementContainerRef.current);\n\n return () => {\n videoPlayer.detach();\n }\n\n }, [videoPlayer]);\n\n useEffect(() => {\n let pauseTimerRef: any = null;\n if(isActive) {\n videoPlayer.play(src, {\n poster: poster,\n watchTimeLimit: watchTimeLimit\n });\n } else {\n videoPlayer.preload(src, {\n poster: poster\n }).then(() => {\n pauseTimerRef = setTimeout(async () => {\n if(!isActive) {\n await videoPlayer.pause();\n }\n }, videoType === VideoTypeEnum.LiveStream ? 2000 : 5000);\n });\n }\n\n return () => {\n if(pauseTimerRef) {\n clearTimeout(pauseTimerRef);\n pauseTimerRef = null;\n }\n }\n\n }, [videoPlayer, src, isActive, poster, videoType, watchTimeLimit]);\n\n return (\n \n \n \n \n \n \n );\n})","import styled, {keyframes} from \"styled-components\";\n\nconst VideoSlidePlayerSkeletonAnimation = keyframes`\n 0% {\n background-color: #474747;\n }\n 100% {\n background-color: #333333;\n } \n`;\n\nexport const VideoSlidePlayerSkeletonBox = styled.div`\n height: 33%;\n \n animation: ${VideoSlidePlayerSkeletonAnimation} 1.5s linear infinite;\n`;","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {GameInfo} from '../../../../../../services/games/game-info';\nimport {FlexGrowItemBox} from '../../../../../../themes/architecture/css-helpers/flex';\nimport {LiveStreamSlidePlayerContainer} from '../../../live-stream/player/boxes/live-stream-slide-player-container.box';\nimport {IVideoPlayerViewModel} from \"../../../../../../services/video/models/video-player.view-model.interface\";\nimport {VideoPlayerComponent} from \"../../../../../video-player/video-player.component\";\nimport {VideoSlidePlayerSkeletonBox} from \"../../../../parts/skeleton/video-slide-player-skeleton.box\";\nimport {VideoTypeEnum} from \"../../../../../../services/video/models/video-type.enum\";\n\n\ninterface VideoStreamSlidePlayerComponentProps {\n gameInfo: GameInfo;\n videoPlayer: IVideoPlayerViewModel;\n isActive: boolean;\n}\n\nexport const VideoStreamSlidePlayerComponent: React.FC = observer((props) => {\n\n const showSkeleton = props.videoPlayer.isLoading && !props.videoPlayer.isPosterLoaded && !props.videoPlayer.hasError;\n\n return ( \n <>\n \n {showSkeleton && }\n \n \n \n \n \n )\n});\n","import styled from \"styled-components\";\n\nexport const VideoSlideLayoutBox = styled.div`\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n`;\n","import styled from \"styled-components\";\n\nexport const ThinProgressBarContainerBox = styled.div<{isVisible: boolean}>`\n width: 100%;\n height: 4px;\n overflow: hidden;\n position: relative;\n visibility: ${props => props.isVisible ? 'visible' : 'hidden'};\n`;\n\n","import styled from \"styled-components\";\n\nexport const ThinProgressBarBox = styled.div`\n @keyframes loadingAnimation {\n 0% {\n left: -100%;\n }\n 100% {\n left: 100%;\n }\n }\n \n width: 100%;\n height: 40%;\n\n background-image: linear-gradient(90deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(255, 255, 255, 0.8) 20%,\n rgba(255, 255, 255, 1) 50%,\n rgba(255, 255, 255, 0.8) 80%,\n rgba(255, 255, 255, 0) 100%);\n \n position: absolute;\n animation: loadingAnimation 0.8s linear infinite;\n border-radius: 50px;\n`;\n\n\n","import {observer} from 'mobx-react';\nimport React from 'react';\nimport {ThinProgressBarContainerBox} from './boxes/thin-progress-bar-container.box';\nimport {ThinProgressBarBox} from \"./boxes/thin-progress-bar.box\";\n\ninterface ThinProgressBarComponentProps {\n show: boolean;\n}\n\nexport const ThinProgressBarComponent: React.FC = observer((props) => {\n\n return (\n \n \n \n );\n});\n\n","import styled from \"styled-components\";\n\nexport const VideoSlideLayoutProgressIndicatorBox = styled.div`\n width: 100%;\n padding-bottom: 4px;\n`","import styled from \"styled-components\";\n\nexport const VideoSlideLayoutChildrenContainerBox = styled.div`\n width: 100%;\n flex-grow: 1;\n`","import React, {PropsWithChildren} from 'react';\nimport {observer} from \"mobx-react\";\nimport {VideoSlideLayoutBox} from './boxes/video-slide-layout.box';\nimport {ThinProgressBarComponent} from \"../../progress-bar/thin/thin-progress-bar.component\";\nimport {VideoSlideLayoutProgressIndicatorBox} from \"./boxes/video-slide-layout-progress-indicator.box\";\nimport {VideoSlideLayoutChildrenContainerBox} from \"./boxes/video-slide-layout-children-container.box\";\n\ninterface VideoSlideLayoutComponentProps extends PropsWithChildren {\n showProgressIndicator: boolean;\n}\n\nexport const VideoSlideLayoutComponent: React.FC = observer((props) => {\n return (\n \n \n {props.children}\n \n\n \n \n \n\n \n )\n})","import React, {PropsWithChildren} from 'react';\nimport {observer} from \"mobx-react\";\nimport {FlexContainerBox} from '../../../../themes/architecture/css-helpers/flex';\n\nexport const VideoSlideContentLayoutComponent: React.FC = observer((props) => {\n\n return (\n \n {props.children}\n \n )\n})","import styled from \"styled-components\";\nimport {CssRule} from \"../../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const VideoSlideFooterLayoutBox = styled.div`\n display: flex;\n flex-direction: row;\n position: absolute;\n bottom: 0;\n align-items: start;\n width: 100%;\n padding: 0px 0px 21px 15px;\n align-items: stretch;\n\n\n ${CssRule.For.mobile.embededHybrid.build()} & {\n bottom: 1rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VideoSlideGameTitleLayoutBox = styled.div`\n text-overflow: ellipsis;\n font-size: 1.6rem;\n color: ${({theme}) => theme.colors.textLight.toString()};\n line-height: 1.1;\n text-shadow: 0px 0px 4px rgba(0, 0, 0, 0.5);\n @media ${({theme}) => theme.mediaQuery.xlAndAbove } {\n font-size: 1.3rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const SaveGameButtonContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n span {\n margin-top: 0.5rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const SaveGameButtonTitleBox = styled.span`\n line-height: 1;\n text-shadow: 0px 0px 4px rgba(0, 0, 0, 0.5);\n`\n\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {SaveGameButtonContainerBox} from \"./save-game-button-container.box\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\nimport {SaveGameButtonTitleBox} from './boxes/save-game-button-title.box';\nimport {SvgSizeUnit} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface SaveGameButtonComponentWithServicesProps extends ComponentServicesPick<'games' | 'notifications' | 'theme'> {\n gameType: number;\n onBookGame: () => void;\n onRemoveBookedGame: () => void;\n}\n\nconst ComponentBody :React.FC = observer((props) => {\n\n const [isSaved, setIsSaved] = React.useState(props.games.savedGameTypes.indexOf(props.gameType) >= 0);\n\n const toggleSaveGame = (): void => {\n if (isSaved) {\n props.games.removeSavedGame(props.gameType);\n props.onRemoveBookedGame();\n } else {\n props.games.saveGame(props.gameType);\n props.notifications.showGameSavedNotification();\n props.onBookGame();\n }\n\n setIsSaved((wasSaved) => !wasSaved);\n };\n\n const SavedGamesIcon = props.theme.currentTheme.icons.saveGameIcon;\n\n const getCyClass = () => `cy-save-game-button-${isSaved ? 'filled' : 'empty'}`;\n\n return (\n \n \n \n {props.games.generateTimesSavedCounterForGame(props.gameType) + Number(isSaved)}\n \n \n );\n});\n\nexport const SaveGameButtonComponent = withServices(ComponentBody, [\"games\", 'notifications', \"theme\"]);\n\n","import styled from \"styled-components\";\n\n\nexport const VideoSlidesSoundIconBox = styled.div`\n color: ${props => props.theme.colors.buttonLight};\n display: flex;\n justify-content: center;\n width: 40px;\n margin-bottom: 12px;\n\n &:focus {\n outline: none;\n }\n \n svg:focus {\n outline: none;\n }\n`;","import {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport React from \"react\";\nimport {\n VideoSlidesSoundIconBox\n} from \"./boxes/video-slides-sound-icon.box\";\n\nimport {SvgSizeUnit} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport const VideoSlidesSoundButtonComponent: React.FC<{}> = observer(() => {\n const services = useServices();\n const sound = services.user.preferences.sound;\n\n const SoundOnIcon = services.theme.currentTheme.icons.soundOnIcon;\n const SoundOffIcon = services.theme.currentTheme.icons.soundOffIcon;\n\n const handleClick = () => {\n sound.toggle();\n };\n\n return (\n \n {sound.isMuted ? : }\n \n )\n});\n","import styled from \"styled-components\";\n\nexport const VideoSlideFooterLeftContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`","import styled from \"styled-components\";\n\nexport const VideoSlideFooterRightContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n width: 40px;\n justify-content: flex-end;\n align-items: center;\n -webkit-tap-highlight-color: transparent;\n`;","import React, {PropsWithChildren} from 'react';\nimport {observer} from \"mobx-react\";\nimport {VideoSlideFooterLayoutBox} from './boxes/video-slide-footer-layout.box';\nimport {GameInfo} from '../../../../services/games/game-info';\nimport {useServices} from '../../../../react-hooks/use-services.hook';\nimport {VideoSlideGameTitleLayoutBox} from './boxes/game-title/video-slide-footer-game-title-layout.box';\nimport {Button} from '../../../../basic-ui-components/button/base/button.component';\nimport {SaveGameButtonComponent} from \"../../parts/save-game-button/save-game-button.component\";\nimport {\n VideoSlidesSoundButtonComponent\n} from \"../../parts/sound-button/video-slides-sound-button.component\";\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {VideoSlideFooterLeftContainerBox} from './boxes/left/video-slide-footer-left-container.box';\nimport {VideoSlideFooterRightContainerBox} from './boxes/right/video-slide-footer-right-container.box';\n\n\ninterface StandardVideoSlideFooterProps extends PropsWithChildren {\n gameInfo: GameInfo;\n secondaryText: React.ReactElement;\n onPlayGameClick: () => void;\n onBookGame: () => void;\n onRemoveBookedGame: () => void;\n}\n\nexport const VideoSlideFooterLayoutComponent: React.FC = observer((props) => {\n const services = useServices();\n const tableInfo = services.liveTableFeeds.getTableInfo(props.gameInfo.gameType);\n const _renderGameTitle = () => {\n\n let title = props.gameInfo?.title || \"\\xa0\";\n\n if (tableInfo?.Name?.length > 0) {\n title = tableInfo.Name;\n }\n\n return (\n \n {title}\n \n );\n }\n\n\n return (\n \n \n {_renderGameTitle()}\n {props.secondaryText}\n
    \n \n {services.translation.translate(\"PLAY_NOW\")}\n \n
    \n
    \n \n \n \n \n
    \n )\n})","import {VideoSlidesStreamBettingRangeDefaultBox} from \"./video-slides-stream-betting-range-default.box\";\n\nexport const VideoSlidesStreamBettingRangeBox = VideoSlidesStreamBettingRangeDefaultBox;\n","import styled from \"styled-components\";\n\n\nexport const VideoSlidesStreamBettingRangeDefaultBox = styled.div`\n font-size: 1.2rem;\n color: ${({theme}) => theme.colors.brandPrimary.toString()};\n line-height: 1;\n font-size: 1.3rem;\n`;\n","import {VideoSlideStreamFooterDefaultBox} from \"./video-slides-stream-footer-default.box\";\n\nexport const VideoSlideStreamFooterBox = VideoSlideStreamFooterDefaultBox;","import styled from \"styled-components\";\n\nexport const VideoSlideStreamFooterDefaultBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-top: 12px;\n`;","import {VideoSlidesStreamJackpotContainerDefaultBox} from \"./video-slides-stream-jackpot-container-default.box\"\n\nexport const VideoSlidesStreamJackpotContainerBox = VideoSlidesStreamJackpotContainerDefaultBox;","import styled from \"styled-components\";\n\nexport const VideoSlidesStreamJackpotContainerDefaultBox = styled.div`\n display: flex;\n flex-direction: row;\n font-size: 1.2rem;\n margin-top: 5px;\n`;","import {VideoSlidesStreamJackpotValueDefaultBox} from \"./video-slides-stream-jackpot-value-default.box\";\n\nexport const VideoSlidesStreamJackpotValueBox = VideoSlidesStreamJackpotValueDefaultBox;","import styled from \"styled-components\";\n\nexport const VideoSlidesStreamJackpotValueDefaultBox = styled.span`\n color: ${({theme}) => theme.colors.brandPrimary.toString()};\n margin-left: 0.5rem;\n`;","import {Check} from \"@sparkware/app-utils\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport {TableSeatsComponent} from \"../../../arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/table-seats.component\";\nimport {GameJackpotComponent} from \"../../../game-jackpot/game-jackpot.component\";\nimport {VideoSlidesStreamBettingRangeBox} from \"./boxes/betting-range/video-slides-stream-betting-range.box\";\nimport {VideoSlideStreamFooterBox} from \"./boxes/footer-container/video-slides-stream-footer.box\";\nimport {VideoSlidesStreamJackpotContainerBox} from \"./boxes/jackpot/video-slides-stream-jackpot-container.box\";\nimport {VideoSlidesStreamJackpotValueBox} from \"./boxes/jackpot/video-slides-stream-jackpot-value.box\";\n\nexport type VideoSlideStreamFooterType = \"jackpot\" | \"bets\";\n\ninterface VideoSlideStreamFooterTypeProps {\n gameInfo: GameInfo;\n type: VideoSlideStreamFooterType;\n}\nexport const VideoSlideStreamFooterComponent: React.FC = observer((props) => {\n const services = useServices();\n const tableInfo = services.liveTableFeeds.getTableInfo(props.gameInfo.gameType);\n const _renderSecondaryText = () => {\n switch (props.type) {\n case \"bets\":\n return _renderMinMaxBet();\n case \"jackpot\":\n return _renderJackpot();\n default:\n return null;\n }\n }\n\n\n const _renderMinMaxBet = () => {\n let minBet: number;\n let maxBet: number;\n\n if (Check.isNullOrUndefined(tableInfo?.MinBet) || Check.isNullOrUndefined(tableInfo?.MaxBet)) {\n minBet = props.gameInfo.minBet;\n maxBet = props.gameInfo.maxBet;\n } else {\n minBet = tableInfo.MinBet;\n maxBet = tableInfo.MaxBet;\n }\n\n return (\n \n {services.currency.formatMinMaxBet(minBet, maxBet)}\n \n );\n }\n\n const renderTableSeats = () => {\n if (!props.gameInfo.isLiveCasino) {\n return null;\n }\n\n\n return ()\n }\n\n const _renderJackpot = () => {\n if (!props.gameInfo.hasJackpot) {\n return null;\n }\n\n return (\n \n \n {services.translation.translate(\"JACKPOT\")}\n \n \n \n {renderTableSeats()}\n \n \n );\n }\n\n return (\n \n {_renderSecondaryText()}\n \n \n )\n})\n\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {GameInfo} from '../../../../services/games/game-info';\nimport {VideoStreamSlidePlayerComponent} from './parts/player/video-stream-slide-player.component';\nimport {VideoSlideLayoutComponent} from '../../layout/video-slide-layout.component';\nimport {VideoSlideContentLayoutComponent} from '../../layout/content/video-slide-content-layout.component';\nimport {VideoSlideFooterLayoutComponent} from '../../layout/footer/video-slide-footer-layout.component';\nimport {IVideoPlayerViewModel} from \"../../../../services/video/models/video-player.view-model.interface\";\nimport {VideoSlideStreamFooterComponent} from '../../parts/video-slides-stream-footer/video-slides-stream-footer.component';\n\n\ninterface VideoStreamSlideComponentProps {\n gameInfo: GameInfo;\n videoPlayer: IVideoPlayerViewModel;\n isActive: boolean;\n onPlayGameClick: () => void;\n onBookGame: () => void;\n onRemoveBookedGame: () => void;\n}\n\nexport const VideoStreamSlideComponent: React.FC = observer((props) => {\n return (\n \n \n \n \n }\n />\n \n )\n})\n","import React from 'react';\nimport {VideoSlideBaseRenderer} from './video-slide-base.renderer';\nimport {IVideoSwiperSlideController} from \"../models/video-swiper-slide-controller.interface\";\nimport {\n VideoStreamSlideComponent\n} from \"../../../components/video-slides/slides-types/video-stream/video-stream-slide.component\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {VideoTypeEnum} from \"../../video/models/video-type.enum\";\n\nexport class VideoStreamGameSlideRenderer extends VideoSlideBaseRenderer {\n\n constructor(gameInfo: GameInfo, services: IServiceFactoryExtended) {\n super(gameInfo, VideoTypeEnum.VideoStream, services)\n }\n\n protected _renderVideoSlide(context: IVideoSwiperSlideController, uniqueKey: string): React.ReactElement {\n return (\n \n );\n }\n}\n","import {SlideRuleBaseModel} from \"./slide-rule-base.model\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\nimport {VideoStreamGameSlideRenderer} from \"../../video-slides-renderers/video-stream-game-slide.renderer\";\n\nexport class VideoStreamSlideRuleModel extends SlideRuleBaseModel {\n protected createVideoSlideRenderer(gameInfo: GameInfo): ISlideRenderer {\n return new VideoStreamGameSlideRenderer(gameInfo, this.services);\n }\n}","import styled from \"styled-components\";\n\nexport const LiveStreamSlideStatusBadgeBox = styled.div`\n display: inline-flex;\n padding: 4px 12px;\n align-items: center;\n gap: 6px;\n border-radius: 32px;\n background: rgba(255, 255, 255, 0.40);\n\n backdrop-filter: blur(2.5px);\n`;","import styled from \"styled-components\";\n\nexport const LiveStreamSlideStatusDetailsBox = styled.div`\n font-family: 888;\n font-size: 12px;\n font-style: normal;\n font-weight: 600;\n line-height: 22px;\n`;","import styled, {keyframes} from \"styled-components\";\n\nconst LiveStreamSlideStatusIconAnimation = keyframes`\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n } \n`;\n\nexport const LiveStreamSlideStatusIconBox = styled.div`\n animation: ${LiveStreamSlideStatusIconAnimation} 2s ease infinite;\n`;\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {useServices} from '../../../../../react-hooks/use-services.hook';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {FlexGrowItemBox} from '../../../../../themes/architecture/css-helpers/flex';\nimport {\n VideoOverlayItemBox\n} from '../../../../live-streaming-tile/video-common-components/video-overlay-item/video-overlay-item.box';\nimport {LiveStreamSlideStatusBadgeBox} from './boxes/status-badge/live-stream-slide-status-badge.box';\nimport {LiveStreamSlideStatusDetailsBox} from './boxes/status-details/live-stream-slide-status-details.box';\nimport {LiveStreamSlidePlayerContainer} from './boxes/live-stream-slide-player-container.box';\nimport {IVideoPlayerViewModel} from \"../../../../../services/video/models/video-player.view-model.interface\";\nimport {VideoPlayerComponent} from \"../../../../video-player/video-player.component\";\nimport {VideoSlidePlayerSkeletonBox} from \"../../../parts/skeleton/video-slide-player-skeleton.box\";\nimport {VideoTypeEnum} from \"../../../../../services/video/models/video-type.enum\";\nimport {LiveStreamSlideStatusIconBox} from './boxes/status-icon/live-stream-slide-status-icon.box';\n\ninterface LiveStreamSlidePlayerProps {\n gameInfo: GameInfo;\n videoPlayer: IVideoPlayerViewModel;\n isActive: boolean;\n}\nexport const LiveStreamSlidePlayerComponent: React.FC = observer((props) => {\n const services = useServices();\n\n\n\n const _renderTopLeft = () => {\n const _padding = \"1rem\";\n const RedRecordCircle = services.theme.currentTheme.icons.redRecordCircle;\n\n return (\n \n \n \n \n \n {services.translation.translate(\"VIDEO_SLIDES_LIVE_STREAMING\")}\n \n \n );\n }\n\n const showSkeleton = props.videoPlayer.isLoading && !props.videoPlayer.hasError;\n\n return (\n <>\n \n {showSkeleton && }\n \n \n {_renderTopLeft()}\n \n \n \n )\n});\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {GameInfo} from '../../../../services/games/game-info';\nimport {LiveStreamSlidePlayerComponent} from './player/live-stream-slide-player.component';\nimport {VideoSlideLayoutComponent} from '../../layout/video-slide-layout.component';\nimport {VideoSlideContentLayoutComponent} from '../../layout/content/video-slide-content-layout.component';\nimport {VideoSlideFooterLayoutComponent} from '../../layout/footer/video-slide-footer-layout.component';\nimport {IVideoPlayerViewModel} from \"../../../../services/video/models/video-player.view-model.interface\";\nimport {VideoSlideStreamFooterComponent} from '../../parts/video-slides-stream-footer/video-slides-stream-footer.component';\n\n\ninterface LiveStreamSlideComponentProps {\n gameInfo: GameInfo;\n videoPlayer: IVideoPlayerViewModel;\n isActive: boolean;\n onPlayGameClick: () => void;\n onBookGame: () => void;\n onRemoveBookedGame: () => void;\n}\nexport const LiveStreamSlideComponent: React.FC = observer((props) => {\n\n return (\n \n \n \n \n }\n />\n \n )\n}) ","import React from 'react';\nimport {VideoSlideBaseRenderer} from './video-slide-base.renderer';\nimport {IVideoSwiperSlideController} from \"../models/video-swiper-slide-controller.interface\";\nimport {\n LiveStreamSlideComponent\n} from '../../../components/video-slides/slides-types/live-stream/live-stream-slide.component';\nimport {GameInfo} from \"../../games/game-info\";\nimport {VideoTypeEnum} from \"../../video/models/video-type.enum\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\n\nexport class LiveStreamGameSlideRenderer extends VideoSlideBaseRenderer {\n\n constructor(gameInfo: GameInfo, services: IServiceFactoryExtended) {\n super(gameInfo, VideoTypeEnum.LiveStream, services)\n }\n\n protected _renderVideoSlide(context: IVideoSwiperSlideController, uniqueKey: string): React.ReactElement {\n return (\n \n );\n }\n}\n","import {SlideRuleBaseModel} from \"./slide-rule-base.model\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\nimport {LiveStreamGameSlideRenderer} from \"../../video-slides-renderers/live-stream-game-slide.renderer\";\n\nexport class LiveStreamVideoSlideRuleModel extends SlideRuleBaseModel {\n protected createVideoSlideRenderer(gameInfo: GameInfo): ISlideRenderer {\n return new LiveStreamGameSlideRenderer(gameInfo, this.services);\n }\n}","import styled from \"styled-components\";\n\nexport const PromotionSlideBox = styled.div`\n display:grid;\n grid-template-rows:1fr auto 1fr;\n height:100%;\n`\n\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport { PromotionSlideBox } from './boxes/promotion-slide.box';\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {\n CasinoArenaPromotionalBannerConfiguration\n} from \"../../../../services/configurations/config-data-sections/arenas.configuration\";\nimport {BannerComponent} from \"../../../banner/banner.component\";\n\ninterface PromotionSlideComponentProps {\n\n}\nlet componentIndex = 0;\nexport const PromotionSlideComponent: React.FC = observer(() => {\n const services = useServices();\n const currentComponentIndex = componentIndex++;\n let bannerConfig:CasinoArenaPromotionalBannerConfiguration = services.configuration.data.arenas.videoSlidesArena.promotionalBanner;\n return \n
    \n
    \n
    \n})","import React from 'react';\nimport {\n PromotionSlideComponent\n} from \"../../../components/video-slides/slides-types/promotion/promotion-slide.component\";\nimport {IAfterActivateSlideRendererContext, IBeforeDeactivateSlideRendererContext,\n ISlideRenderer\n} from \"../video-slides.service.interface\";\n\nexport class PromotionSlideRenderer implements ISlideRenderer {\n constructor(private readonly _uniqueKey: string) {\n\n }\n\n onBeforeDeactivate(context: IBeforeDeactivateSlideRendererContext): void {\n\n }\n onAfterActivated(context: IAfterActivateSlideRendererContext): void {\n \n }\n\n get uniqueKey(): string {\n return this._uniqueKey;\n }\n\n isLoading = false;\n\n render(): React.ReactElement {\n return \n }\n\n}","import {ISlideRuleModel} from \"./slide-rule-model.interface\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\nimport {IServiceFactory} from \"../../../service-factory.interface\";\nimport {PromotionSlideRenderer} from \"../../video-slides-renderers/promotion-slide.renderer\";\n\nexport class BannerSlideRuleModel implements ISlideRuleModel {\n\n constructor(private readonly services: IServiceFactory) {\n }\n\n appendToChunk(currentChunkContent: ISlideRenderer[]): ISlideRenderer[] {\n if(currentChunkContent.length > 0) {\n return [\n ...currentChunkContent,\n new PromotionSlideRenderer(this.services.tools.getGuid())\n ];\n }\n\n return currentChunkContent;\n\n }\n\n}","import {IVideoSlidesRuleConfig} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ISlideRuleModel} from \"./slide-rule-model.interface\";\nimport {VideoStreamSlideRuleModel} from \"./video-stream-slide-rule.model\";\nimport {LiveStreamVideoSlideRuleModel} from \"./live-stream-video-slide-rule.model\";\nimport {BannerSlideRuleModel} from \"./banner-slide-rule.model\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\n\nexport class SlidesRulesHandler {\n constructor(private readonly services: IServiceFactoryExtended,\n slidesRulesConfig: IVideoSlidesRuleConfig[],\n gamesWithVideoStream: GameInfo[],\n gamesWithLiveStream: GameInfo[]) {\n\n slidesRulesConfig.forEach(ruleConfig => {\n switch (ruleConfig.category) {\n case \"videoStream\":\n this._rules.push(new VideoStreamSlideRuleModel(ruleConfig, gamesWithVideoStream, services));\n break;\n case \"liveStream\":\n this._rules.push(new LiveStreamVideoSlideRuleModel(ruleConfig, gamesWithLiveStream, services));\n break;\n case \"banner\":\n this._rules.push(new BannerSlideRuleModel(services));\n break;\n default:\n this.services.logger.error(`Can't handle slide rule category ${ruleConfig.category}`);\n\n }\n })\n }\n\n private readonly _rules: ISlideRuleModel[] = [];\n\n createRenderers(): ISlideRenderer[] {\n let result: ISlideRenderer[] = [];\n let shouldContinue = true;\n\n do {\n\n let currentChunk: ISlideRenderer[] = [];\n\n this._rules.forEach(rule => {\n currentChunk = rule.appendToChunk(currentChunk);\n });\n\n result = [ ...result,\n ...currentChunk\n ]\n\n shouldContinue = currentChunk.length > 0;\n\n } while (shouldContinue);\n\n return result;\n }\n\n}","import {SparkSwiperSlideController} from \"../../../../components/spark-swiper/models/spark-swiper-slide-controller\";\nimport {IVideoPlayerViewModel} from \"../../../video/models/video-player.view-model.interface\";\nimport React from \"react\";\nimport {IVideoSwiperSlideController} from \"../video-swiper-slide-controller.interface\";\nimport {ISparkSwiperController} from \"../../../../components/spark-swiper/models/spark-swiper-controller.interface\";\nimport {VideoSlidesService} from \"../../video-slides.service\";\nimport {SwipeDirectionEnum} from \"../../../../components/spark-swiper/models/spark-swiper-slide-controller.interface\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\n\nexport class VideoSlidesSwiperSlideController extends SparkSwiperSlideController implements IVideoSwiperSlideController {\n\n constructor(id: string,\n controller: ISparkSwiperController,\n private readonly videoSlides: VideoSlidesService) {\n super(id, controller);\n this.videoPlayer = videoSlides.createVideoPlayer();\n }\n\n public readonly videoPlayer: IVideoPlayerViewModel\n\n get realIndex(): number {\n return this.itemIndex % this.videoSlides.slidesRenderers.length;\n }\n\n private _executeForRenderer(action: (renderer: ISlideRenderer) => T): T | null {\n const renderer = this.videoSlides.slidesRenderers[this.realIndex];\n if(renderer) {\n return action(renderer);\n } else {\n //we can reach here if we have a bug in the spark swiper, but if this happens we don't want to crash the whole app because of this.\n this.videoSlides.logger.error(`Invalid video slides renderer index ${this.realIndex} | renderersCount = ${this.videoSlides.slidesRenderers.length}`);\n return null;\n }\n }\n\n renderSlideContent(): React.ReactElement {\n return this._executeForRenderer(renderer => renderer.render(this));\n }\n\n onBeforeDeactivate(swipeDirection: SwipeDirectionEnum) {\n this._executeForRenderer(renderer => renderer.onBeforeDeactivate({\n swipeDirection: swipeDirection\n }))\n }\n\n onAfterActivated(swipeDirection: SwipeDirectionEnum) {\n this._executeForRenderer(renderer => renderer.onAfterActivated({\n swipeDirection: swipeDirection\n }));\n }\n\n}","import React from \"react\";\nimport {ISparkSwiperSlideController, SwipeDirectionEnum} from \"./spark-swiper-slide-controller.interface\";\n\nimport {computed, makeObservable} from \"mobx\";\nimport {ISparkSwiperController} from \"./spark-swiper-controller.interface\";\n\n\n\nexport abstract class SparkSwiperSlideController implements ISparkSwiperSlideController {\n constructor(private readonly id: string,\n protected readonly controller: ISparkSwiperController) {\n makeObservable(this);\n\n }\n\n abstract renderSlideContent(): React.ReactElement;\n abstract onBeforeDeactivate(swipeDirection: SwipeDirectionEnum): void;\n abstract onAfterActivated(swipeDirection: SwipeDirectionEnum): void;\n\n\n get key(): string {\n return `slide-ctrl-${this.id}`;\n }\n\n\n get isActiveSlide(): boolean {\n return this.itemIndexOffset === 0;\n }\n\n\n @computed\n get itemIndex(): number {\n const selfPosition = this.controller.findSlidePosition(this);\n const currentSlideIndex = this.controller.getCurrentItemIndex();\n let middleSlideControllerPosition = this.controller.middleSlidePosition;\n if(currentSlideIndex > this.controller.maxItemIndex - middleSlideControllerPosition) {\n // it means that we are closed to the end of the list and the middle slide controller is not actually in the middle and basically the middle slide controller moves at the beginning of the list\n middleSlideControllerPosition += middleSlideControllerPosition - (this.controller.maxItemIndex - currentSlideIndex);\n }\n // when selfPosition > currentSlideIndex + (selfPosition - middleSlideControllerPosition)\n // it means that we are at the beginning of the slides list (currentSlideIndex is 0 or 1 assuming we have 2 slides before and 2 slides after the active one)\n return Math.max(selfPosition, currentSlideIndex + (selfPosition - middleSlideControllerPosition));\n }\n\n @computed\n get itemIndexOffset(): number {\n return this.itemIndex - this.controller.getCurrentItemIndex();\n }\n}\n\n","import {computed, makeObservable, observable, runInAction} from \"mobx\";\nimport {ISparkSwiperController, ISparkSwiperControllerOptions} from \"./spark-swiper-controller.interface\";\nimport {ISparkSwiperSlideController, SwipeDirectionEnum} from \"./spark-swiper-slide-controller.interface\";\nimport {ISparkSwiperDataFeeder} from \"./spark-swiper-data-feeder.interface\";\n\n\nexport class SparkSwiperController implements ISparkSwiperController {\n constructor(private readonly dataFeeder: ISparkSwiperDataFeeder, options?: Partial) {\n this._options = {\n middleSlideControllerPosition: 2,\n ...options\n };\n makeObservable(this);\n }\n\n private readonly _options: ISparkSwiperControllerOptions;\n\n getCurrentItemIndex(): number {\n return this.dataFeeder.getCurrentItemIndex();\n }\n\n private setCurrentItemIndex(index: number): void {\n this.dataFeeder.setCurrentItemIndex(index);\n }\n\n getItemsCount(): number {\n return this.dataFeeder.getItemsCount();\n }\n\n get maxItemIndex(): number {\n return this.dataFeeder.getMaxItemIndex();\n }\n\n\n get middleSlidePosition(): number {\n return Math.min(this._options.middleSlideControllerPosition, Math.floor(this.getItemsCount()/2));\n }\n\n\n findSlidePosition(slideController: ISparkSwiperSlideController): number {\n return this.slides.findIndex(s => s === slideController);\n }\n\n private _generateSlidesControllers(): ISparkSwiperSlideController[] {\n const maxSlides = this._options.middleSlideControllerPosition * 2;\n const result: ISparkSwiperSlideController[] = [];\n for(let i = 0; i <= maxSlides; i++) {\n result.push(this.dataFeeder.createSlideController(i.toString(), this));\n }\n\n return result;\n }\n\n\n\n @observable.ref\n private _slidesControllers: ISparkSwiperSlideController[] | null = null;\n\n\n @computed\n get slides(): ISparkSwiperSlideController[] {\n\n const itemsCount = this.getItemsCount();\n\n if(itemsCount === 0) {\n return [];\n }\n\n if(!this._slidesControllers) {\n this._slidesControllers = this._generateSlidesControllers();\n }\n\n if(itemsCount < this._slidesControllers.length) {\n return this._slidesControllers.slice(0, itemsCount)\n }\n\n return this._slidesControllers;\n }\n\n private get activeSlideController(): ISparkSwiperSlideController {\n return this.slides.find(s => s.isActiveSlide);\n }\n\n moveNext(): void {\n if(this.getCurrentItemIndex() < this.maxItemIndex) {\n\n this.activeSlideController.onBeforeDeactivate(SwipeDirectionEnum.Forward);\n\n runInAction(() => {\n this.setCurrentItemIndex(this.getCurrentItemIndex() + 1);\n if(this.getCurrentItemIndex() > this.middleSlidePosition && this.getCurrentItemIndex() <= this.maxItemIndex - this.middleSlidePosition) {\n this._rotateSlideController(0, this.slides.length - 1);\n }\n\n this.activeSlideController.onAfterActivated(SwipeDirectionEnum.Forward);\n\n });\n }\n }\n\n movePrevious(): void {\n if(this.getCurrentItemIndex() > 0) {\n this.activeSlideController.onBeforeDeactivate(SwipeDirectionEnum.Backward);\n runInAction(() => {\n this.setCurrentItemIndex(this.getCurrentItemIndex() - 1);\n if(this.getCurrentItemIndex() >= this.middleSlidePosition && this.getCurrentItemIndex() < this.maxItemIndex - this.middleSlidePosition) {\n this._rotateSlideController(this.slides.length - 1, 0);\n }\n this.activeSlideController.onAfterActivated(SwipeDirectionEnum.Backward);\n });\n }\n }\n\n private _rotateSlideController(from: number, to: number) {\n\n //console.error(`move from ${from} to ${to}`);\n const cloned = [...this._slidesControllers];\n const moved = this.slides[from];\n cloned.splice(from, 1);\n cloned.splice(to, 0, moved);\n this._slidesControllers = cloned;\n\n }\n}","import {GameStepsExecutionResultEnum} from \"../game-runner/interfaces/game-step/game-run-step.interface\";\nimport {\n GamblingSessionStatus,\n IGamblingSessionUpdateData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/gambling-session_handler_interfaces\";\nimport {IGamblingSessionAnalytics} from \"./gambling-session-analytics.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {GameInfo} from \"../games/game-info\";\n\n\nexport enum GamblingSessionManagerErrorCodes {\n OK = 0,\n GeneralError = 1,\n GamblingSessionAlreadyExist = 71,\n UserInRestrictionPeriod = 72\n\n}\n\nexport class GamblingSessionData {\n constructor(private readonly data: IGamblingSessionUpdateData) {\n }\n\n get gamblingSessionId(): string {\n return this.data.gamblingSessionId;\n }\n get sessionStatus(): GamblingSessionStatus {\n return this.data.sessionStatus;\n }\n\n get sessionActivationTime(): Date | null {\n const sessionActivationTime = this.data.sessionActivationTime ?? 0;\n if(sessionActivationTime > 0) {\n return new Date(sessionActivationTime * 1000); // sessionActivationTime comes in epoch time\n }\n\n return null;\n }\n get sessionDuration(): TimeSpan | null {\n const startDate = this.sessionActivationTime;\n if(startDate) {\n return TimeSpan.fromMilliseconds(Date.now() - startDate.getTime());\n }\n\n return null;\n }\n get sessionTotalBets(): number {\n return this.data.sessionTotalBets;\n }\n get sessionTotalWins(): number {\n return this.data.sessionTotalWins;\n }\n\n get restrictionExpirationDate(): Date | null {\n if(this.data.restrictionExpirationDate) {\n return new Date(this.data.restrictionExpirationDate * 1000); // restrictionExpirationDate comes in epoch time\n }\n\n return null;\n }\n\n //readonly updateCounter?: number;\n}\n\nexport interface IGamblingSessionService {\n readonly isEnabled: boolean;\n readonly isInitialized: boolean;\n getGamblingSessionState(): Promise;\n startGamblingSession(gameInfo: GameInfo, isFreePlay: boolean): Promise;\n readonly analytics: IGamblingSessionAnalytics;\n}\n\n","import {ISparkSwiperDataFeeder} from \"../../../../components/spark-swiper/models/spark-swiper-data-feeder.interface\";\nimport {VideoSlidesService} from \"../../video-slides.service\";\nimport {makeObservable, observable, reaction, runInAction} from \"mobx\";\nimport {ISparkSwiperController} from \"../../../../components/spark-swiper/models/spark-swiper-controller.interface\";\nimport {\n ISparkSwiperSlideController\n} from \"../../../../components/spark-swiper/models/spark-swiper-slide-controller.interface\";\nimport {VideoSlidesSwiperSlideController} from \"./video-slides-swiper-slide.controller\";\nimport {Lazy} from \"../../../../../utils/lazy\";\nimport {SparkSwiperController} from \"../../../../components/spark-swiper/models/spark-swiper-controller\";\n\nexport class VideoSlidesSwiper implements ISparkSwiperDataFeeder {\n constructor(private videoSlides: VideoSlidesService) {\n\n makeObservable(this);\n\n reaction(() => [this.videoSlides.currentAppliedFilter, this.videoSlides.slidesRenderers],\n () => {\n \n if(this.videoSlides.slidesRenderers.length === 0) {\n this._currentSlideIndex = 0;\n } else {\n this._currentSlideIndex = this._getCurrentIndexFromLocalStorage() % this.videoSlides.slidesRenderers.length;\n }\n\n\n }, {\n fireImmediately: true\n })\n }\n\n private _getCurrentIndexFromLocalStorage(): number {\n\n const currentFilter = this.videoSlides.currentAppliedFilter;\n if (!currentFilter) {\n return 0;\n }\n\n const storageData = this.videoSlides.getStorageData();\n\n const now = Date.now();\n\n if(!storageData.lastIndexPerFilterUpdateTime || now > storageData.lastIndexPerFilterUpdateTime + 24 * 3600 * 1000) {\n // if more than 24 hours passed since last visit we reset the index\n storageData.lastIndexPerFilter = {}\n storageData.lastIndexPerFilterUpdateTime = now;\n this.videoSlides.setStorageData(storageData);\n return 0;\n }\n\n return this.videoSlides.getStorageData().lastIndexPerFilter[currentFilter.id] ?? 0;\n }\n\n\n @observable.ref\n private _currentSlideIndex: number = 0;\n\n getCurrentItemIndex(): number {\n return this._currentSlideIndex;\n }\n\n setCurrentItemIndex(value: number) {\n runInAction(() => {\n this._currentSlideIndex = value;\n });\n\n const filter = this.videoSlides.currentAppliedFilter;\n if (filter) {\n const storageData = this.videoSlides.getStorageData()\n storageData.lastIndexPerFilter[filter.id] = value;\n storageData.lastIndexPerFilterUpdateTime = Date.now()\n this.videoSlides.setStorageData(storageData);\n }\n\n }\n\n getMaxItemIndex(): number {\n return Number.MAX_SAFE_INTEGER;\n //return this.getItemsCount() - 1; // if you want the swiper not to be circular anymore uncomment this line and comment the one above\n }\n\n\n getItemsCount(): number {\n return this.videoSlides.slidesRenderers.length;\n }\n\n createSlideController(id: string, swiperController: ISparkSwiperController): ISparkSwiperSlideController {\n return new VideoSlidesSwiperSlideController(id,\n swiperController,\n this.videoSlides);\n }\n\n private _swiperController = new Lazy(() => new SparkSwiperController(this))\n get swiperController(): ISparkSwiperController {\n return this._swiperController.value;\n }\n}","import {computed, makeObservable, observable} from \"mobx\";\nimport {GameInfo} from \"../games/game-info\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {ISlideRenderer, IVideoSlidesService, IVideoSlideStoredData} from \"./video-slides.service.interface\";\nimport {ApiListType, ArenaConfiguration, IVideoSlidesFilter} from \"../configurations/config-data-sections/arenas.configuration\";\nimport {VIDEO_SLIDES_ARENA} from \"../arenas/arena-consts\";\nimport {VideoSlidesFilterModel} from \"./models/video-slides-filter-editor/video-slides-filter.model\";\nimport {ForYouVideoSlidesFilter} from \"./models/video-slides-filter-editor/for-you-video-slides-filter\";\nimport {SlidesRulesHandler} from \"./models/rules/slides-rules-handler\";\nimport {Nullable} from \"../../../common/types/nullable-types\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {ISparkSwiperController} from \"../../components/spark-swiper/models/spark-swiper-controller.interface\";\nimport {VideoSlidesSwiper} from \"./models/swiper/video-slides-swiper\";\nimport {LocalStorageKeys} from \"../storage/local-storage-keys\";\nimport {IVideoPlayerViewModel} from \"../video/models/video-player.view-model.interface\";\nimport {ILoggerService} from \"../logger/logger.service.interface\";\n\n\nexport class VideoSlidesService extends ServiceBase implements IVideoSlidesService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this._videoSlidesFilters = this._createVideoSlidesFilters();\n this._loadGameTypes();\n\n makeObservable(this);\n\n this._swiper = new VideoSlidesSwiper(this);\n }\n\n private _isAiSortingEnabled(): boolean {\n return this.services.configuration.servicesConfigs.VideoSlides?.useAiSorting;\n }\n\n private readonly _swiper: VideoSlidesSwiper;\n\n private _isVideoSlidesEnabled(): boolean {\n const videoSlidesConfigs = this.services.configuration.servicesConfigs.VideoSlides;\n return (\n videoSlidesConfigs.force ||\n (this.services.abTestingFeatureDataProvider.isVideoSlidesAbEnabled && videoSlidesConfigs.enabled)\n );\n }\n\n private _isStrictlyMobileDevice(): boolean {\n return this.services.device.model.deviceType === \"mobile\";\n }\n\n get shouldBeDisplayed(): boolean {\n return (\n !this.services.miniOrbit.isEnabled &&\n this._isStrictlyMobileDevice() &&\n this.services.user.isAuthorized &&\n this._isVideoSlidesEnabled());\n }\n\n @observable.ref\n private _gamesIdsWithStaticVideos: number[] = [];\n\n @observable.ref\n private _gamesIdsWithLiveStreamVideos: number[] = [];\n\n\n private get config(): ArenaConfiguration {\n return this.services.configuration.data.arenas[VIDEO_SLIDES_ARENA];\n }\n\n\n private _getGamesInfo(gameTypes: number[], condition: (gameInfo: GameInfo) => boolean): GameInfo[] {\n const gamesMap = this.services.games.gamesMap;\n return gameTypes.reduce((accumulator, currentGameType) => {\n const gameInfo = gamesMap[currentGameType];\n if (gameInfo && condition(gameInfo)) {\n accumulator.push(gameInfo);\n }\n return accumulator;\n }, []);\n }\n\n\n @computed\n private get gamesWithStaticVideos(): GameInfo[] {\n let gameTypes = this._gamesIdsWithStaticVideos;\n if (this._isAiSortingEnabled()) {\n gameTypes = this.services.aiEngine.sortGames(gameTypes);\n }\n return this._getGamesInfo(gameTypes, gameInfo => Boolean(gameInfo.videoSlideUrl));\n }\n\n @computed\n private get gamesWithLiveStreamVideos(): GameInfo[] {\n let gameTypes = this._gamesIdsWithLiveStreamVideos;\n if (this._isAiSortingEnabled()) {\n gameTypes = this.services.aiEngine.sortGames(gameTypes);\n }\n return this._getGamesInfo(gameTypes, gameInfo => Boolean(gameInfo.videoURL));\n }\n\n @computed\n get allGamesInArena(): GameInfo[] {\n return [\n ...this.gamesWithStaticVideos,\n ...this.gamesWithLiveStreamVideos\n ];\n }\n\n\n private _filterGamesInfo(gamesInfo: GameInfo[]): GameInfo[] {\n const filteredGamesMap = this.services.gamesFilter.filteredGamesMap;\n return gamesInfo.filter(gInfo => Boolean(filteredGamesMap[gInfo.gameType]));\n }\n\n\n @computed\n get slidesRenderers(): ISlideRenderer[] {\n const gamesWithStaticVideos = this._filterGamesInfo(this.gamesWithStaticVideos);\n const gamesWithLiveStreamVideos = this._filterGamesInfo(this.gamesWithLiveStreamVideos);\n const rulesHandler = new SlidesRulesHandler(this.services, this.config.slidesRules, gamesWithStaticVideos, gamesWithLiveStreamVideos);\n return rulesHandler.createRenderers();\n }\n\n\n private readonly _videoSlidesFilters: VideoSlidesFilterModel[] = [];\n get videoSlidesFilters(): VideoSlidesFilterModel[] {\n return this._videoSlidesFilters;\n }\n\n @computed\n get currentAppliedFilter(): VideoSlidesFilterModel {\n return this.videoSlidesFilters.find(f => f.on);\n }\n\n private _createVideoSlidesFilters(): VideoSlidesFilterModel[] {\n const filters: IVideoSlidesFilter[] = this.config?.filters ?? [];\n return [\n new ForYouVideoSlidesFilter(this.services, {id: \"forYou\", category: \"forYou\", translationKey: \"For You\", icon: \"exploreOutlinedIcon\"}),\n ...filters.map((filter) => new VideoSlidesFilterModel(this.services, filter))\n ];\n }\n\n private _loadGameTypes(): void {\n this.config.swiperGamesList?.forEach(swiperList => {\n switch (swiperList.apiListType) {\n case ApiListType.STATIC_VIDEO:\n break;\n case ApiListType.LIVE_CASINO_VIDEO:\n this._gamesIdsWithLiveStreamVideos = swiperList.gamesId;\n break;\n default:\n //this will be changed to a dedicated new API List type\n this._gamesIdsWithStaticVideos = swiperList.gamesId;\n break;\n }\n });\n }\n\n firstGameForFilter(filterId: string): Nullable {\n let foundGame: Nullable = null;\n this.allGamesInArena.some(currentGame => {\n const filterListForCurrentGame = this.services.gamesFilter.getFiltersForGame(currentGame.gameType);\n let shouldStopSearching = false;\n if (!Check.isNullOrUndefined(filterListForCurrentGame)) {\n shouldStopSearching = filterListForCurrentGame.some(filterForCurrentGame => {\n if (filterForCurrentGame === filterId) {\n foundGame = currentGame;\n return true;\n }\n return false;\n });\n\n }\n return shouldStopSearching;\n })\n\n return foundGame;\n }\n\n navigateToFilter(filterId?: string): void {\n if (Check.isNullOrUndefined(filterId)) {\n this.services.location.push(`/video-slides`);\n } else {\n this.services.location.push(`/video-slides#filters=${filterId}`);\n }\n }\n\n get onBoardingWasShown(): boolean {\n return this.getStorageData().onBoardingShown;\n }\n\n set onBoardingWasShown(value: boolean){\n\n this.setStorageData({\n onBoardingShown: value\n });\n }\n\n get swiperController(): ISparkSwiperController {\n return this._swiper.swiperController;\n }\n\n private _storageData: IVideoSlideStoredData | null = null;\n getStorageData(): IVideoSlideStoredData {\n if(!this._storageData) {\n this._storageData = {\n lastIndexPerFilter: {},\n onBoardingShown: false,\n ...this.services.localStorage.getJson(LocalStorageKeys.videoSlides)\n };\n }\n return this._storageData;\n\n }\n setStorageData(data: Partial) {\n this._storageData = {\n ...this.getStorageData(),\n ...data\n };\n this.services.localStorage.setJson(LocalStorageKeys.videoSlides, this._storageData);\n }\n\n createVideoPlayer(): IVideoPlayerViewModel {\n return this.services.video.createVideoStreamingPlayer();\n }\n\n get logger(): ILoggerService {\n return this.services.logger;\n }\n}\n\n\n\n","import {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {DISPLAY_MESSAGE_IDS, getDisplayMessageName} from \"../../../common/const/casinofied-analytics-consts\";\nimport {\n IGamblingSessionActionData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/messages_handler_interfaces\";\nimport {IGamblingSessionAnalytics} from \"./gambling-session-analytics.interface\";\nimport {IGamblingSessionLimitsSetup} from \"./gambling-session-limits-setup.interface\";\nimport {IAnalyticsMessageExtraData} from \"../../../common/interfaces/casinofied-analytics-proxy.interface\";\n\nexport class GamblingSessionAnalytics implements IGamblingSessionAnalytics {\n constructor(private readonly services: IServiceFactoryExtended) {\n\n }\n\n private get userBankroll(): number {\n return this.services.walletProxy.totalBankroll;\n }\n\n\n private get userBankrollCurrency(): string {\n return this.services.currency.currencyIso3;\n }\n\n reportSetLimitPopupShown(correlationId: string): void {\n this.services.casinofiedAnalytics.messageDisplay({\n displayMessageID: DISPLAY_MESSAGE_IDS.SDSetLimitPopUp,\n displayMessageName: \"SDSetLimitPopUp\",\n businessCorrelationID: correlationId,\n correlationID: correlationId\n })\n }\n\n reportConfirmSetLimitPopup(correlationId: string, limits: IGamblingSessionLimitsSetup, errorCode: number, gamblingSessionId: string): void {\n this.services.casinofiedAnalytics.messageActionTaken({\n displayMessageName: getDisplayMessageName(DISPLAY_MESSAGE_IDS.SDSetLimitPopUp),\n actionType: \"Set\",\n businessCorrelationID: correlationId,\n correlationID: correlationId,\n extraData: {\n sessionRequestedNetLossAmountLimit: limits.lossLimitAmount,\n sessionRequestedTimeLimitInSeconds: limits.sessionDurationLimit.totalSeconds,\n sessionRequestedTimeReminderInSeconds: limits.reminderInterval.totalSeconds,\n sessionRequestedRestrictionInSeconds: limits.restrictionPeriod.totalSeconds,\n gamblingSessionId: gamblingSessionId,\n errorCode: errorCode\n }\n });\n }\n\n reportCancelSetLimitPopup(correlationId: string): void {\n this.services.casinofiedAnalytics.messageActionTaken({\n displayMessageName: getDisplayMessageName(DISPLAY_MESSAGE_IDS.SDSetLimitPopUp),\n actionType: \"Cancel\",\n businessCorrelationID: correlationId,\n correlationID: correlationId\n });\n }\n\n private _reportPopupShown(messageId: number, data: IGamblingSessionActionData) {\n this.services.casinofiedAnalytics.messageDisplay({\n displayMessageID: messageId,\n displayMessageName: getDisplayMessageName(messageId),\n businessCorrelationID: data.correlationID,\n correlationID: data.correlationID,\n extraData: {\n bankrollCurr: this.userBankrollCurrency,\n amountBankroll: this.userBankroll,\n messageTypeSource: data.messageType,\n sessionDurationInSeconds: data.sessionDurationInSeconds,\n totalStakes: data.sessionTotalBets,\n totalWins: data.sessionTotalWins,\n gamblingSessionId: data.gamblingSessionId\n }\n });\n }\n\n reportNetLossAdvancedWarningShown(data: IGamblingSessionActionData): void {\n this._reportPopupShown(\n DISPLAY_MESSAGE_IDS.SDNetLossAdvanceWarning,\n data\n )\n }\n\n reportTimeLimitAdvancedWarningShown(data: IGamblingSessionActionData): void {\n this._reportPopupShown(\n DISPLAY_MESSAGE_IDS.SDTimeLimitAdvanceWarning,\n data\n )\n }\n\n reportNetLossLimitReachedShown(data: IGamblingSessionActionData): void {\n this._reportPopupShown(\n DISPLAY_MESSAGE_IDS.SDNetLossLimitsReached,\n data\n )\n }\n\n reportTimeLimitReachedShown(data: IGamblingSessionActionData): void {\n this._reportPopupShown(\n DISPLAY_MESSAGE_IDS.SDTimeLimitsReached,\n data\n )\n }\n\n reportRealityCheckShow(data: IGamblingSessionActionData): void {\n this._reportPopupShown(\n DISPLAY_MESSAGE_IDS.SDRealityCheck ,\n data\n )\n }\n\n reportMessageConfirmed(messageId: number, data: IGamblingSessionActionData) {\n this.services.casinofiedAnalytics.messageActionTaken({\n displayMessageName: getDisplayMessageName(messageId),\n actionType: 'Confirm',\n businessCorrelationID: data.correlationID,\n correlationID: data.correlationID,\n extraData: {\n messageTypeSource: data.messageType,\n gamblingSessionId: data.gamblingSessionId\n }\n });\n }\n\n private async _getAnalyticsExtraData(): Promise> {\n const sessionData = await this.services.gamblingSession.getGamblingSessionState();\n return {\n amountBankroll: this.userBankroll,\n bankrollCurr: this.userBankrollCurrency,\n totalStakes: sessionData.sessionTotalBets,\n totalWins: sessionData.sessionTotalWins,\n netPosition: sessionData.sessionTotalBets - sessionData.sessionTotalWins\n }\n }\n\n async reportLogoutMessageShown(): Promise {\n const correlationId = this.services.tools.getGuid();\n const extraData = await this._getAnalyticsExtraData();\n this.services.casinofiedAnalytics.messageDisplay({\n displayMessageID: DISPLAY_MESSAGE_IDS.SDResult,\n displayMessageName: getDisplayMessageName(DISPLAY_MESSAGE_IDS.SDResult),\n businessCorrelationID: correlationId,\n correlationID: correlationId,\n extraData: extraData\n })\n }\n\n async reportLogoutMessageActionTaken(actionType: 'Cancel' | 'Logout'): Promise {\n const correlationId = this.services.tools.getGuid();\n const extraData = await this._getAnalyticsExtraData();\n this.services.casinofiedAnalytics.messageActionTaken({\n displayMessageName: getDisplayMessageName(DISPLAY_MESSAGE_IDS.SDResult),\n actionType: actionType,\n businessCorrelationID: correlationId,\n correlationID: correlationId,\n extraData: extraData\n });\n }\n\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {\n GamblingSessionData,\n GamblingSessionManagerErrorCodes,\n IGamblingSessionService\n} from \"./gambling-session.service.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nimport {makeObservable, observable, runInAction} from \"mobx\";\nimport {GameStepsExecutionResultEnum} from \"../game-runner/interfaces/game-step/game-run-step.interface\";\nimport {GamblingSessionSetupComponent} from \"../../components/gambling-session/setup/gambling-session-setup.component\";\nimport {DialogButtonClickHandleResultEnum, IModalDialogHandler} from \"../dialog/dialog.service.interface\";\n\nimport {\n GamblingSessionStatus,\n IGamblingSessionUpdateData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/gambling-session_handler_interfaces\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {CGPEventSubscription} from \"../sdk/cgp-sdk.interface\";\nimport {Nullable, NullableString} from \"../../../common/types/nullable-types\";\nimport {\n GamblingSessionActionType,\n IGamblingSessionActionData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/messages_handler_interfaces\";\nimport {\n GamblingSessionLimitReachedComponent,\n LimitType\n} from \"../../components/gambling-session/limit-reached/gambling-session-limit-reached.component\";\nimport {IToastHandler} from \"../toaster/toaster.service.interface\";\nimport {GamblingSessionAnalytics} from \"./gambling-session-analytics\";\nimport {IGamblingSessionLimitsSetup} from \"./gambling-session-limits-setup.interface\";\nimport {DISPLAY_MESSAGE_IDS} from \"../../../common/const/casinofied-analytics-consts\";\nimport {GameInfo} from \"../games/game-info\";\n\n\nexport class GamblingSessionService extends ServiceBase implements IGamblingSessionService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this._gamblingSessionStatePromise = this._createInitialGamblingSessionStatePromise();\n this.analytics = new GamblingSessionAnalytics(services);\n\n makeObservable(this);\n\n if (this.isEnabled) {\n this.services.sdk.events.onGamblingSessionAction(this._onGamblingSessionActionHandler);\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (!isAuthorized) {\n\n this._onGamblingSessionUpdateSubscription?.off();\n if (this._initialPromiseResolver) {\n //resolve the current promise in case it was hanging around\n this._initialPromiseResolver(new GamblingSessionData(this._createDefaultGamblingSessionData()));\n this._initialPromiseResolver = null;\n }\n\n this._advancedWarningLossLimitToast?.close();\n this._advancedWarningLossLimitToast = null;\n this._advancedWarningTimeLimitToast?.close();\n this._advancedWarningTimeLimitToast = null;\n this._intervalReminderDialog?.close();\n this._intervalReminderDialog = null;\n\n //when the user logs out we reinitialize the promise so if he login again to start all over fresh\n this._gamblingSessionStatePromise = this._createInitialGamblingSessionStatePromise();\n\n }\n });\n }\n\n }\n\n readonly analytics: GamblingSessionAnalytics;\n\n @observable.ref\n private _gamblingSessionStatePromise: Promise;\n private _onGamblingSessionUpdateSubscription: Nullable = null;\n\n //we use this to resolve the promise in case of logout so it will not hang forever;\n private _initialPromiseResolver: Nullable<((value: GamblingSessionData | PromiseLike) => void)> = null;\n\n\n private _advancedWarningLossLimitToast: IToastHandler | null = null;\n private _advancedWarningTimeLimitToast: IToastHandler | null = null;\n private _intervalReminderDialog: IModalDialogHandler | null = null;\n\n get isEnabled(): boolean {\n return this.services.regulation.current.isGamblingSessionEnabled;\n }\n\n get isInitialized(): boolean {\n //if _initialPromiseResolver is null it means that the initial gambling session promise was resolved, so we got the initial firebase message event;\n return !Boolean(this._initialPromiseResolver);\n }\n\n\n\n private _createInitialGamblingSessionStatePromise(): Promise {\n if(!this.isEnabled) {\n return Promise.resolve(new GamblingSessionData(this._createDefaultGamblingSessionData()));\n }\n\n //we initialize this promise even if the user is not logged in to make sure that when he actually login we don't miss the onGamblingSessionUpdate event\n return new Promise(resolve => {\n this._initialPromiseResolver = resolve;\n //here we are listening for the first onGamblingSessionUpdate event\n this._onGamblingSessionUpdateSubscription = this.services.sdk.events.onGamblingSessionUpdate(sessionData => {\n //once we get it we resolve the current promise\n resolve(new GamblingSessionData(sessionData));\n\n //unsubscribe from the firebase gambling session update event\n this._onGamblingSessionUpdateSubscription.off();\n\n //we set _gamblingSessionStatePromiseCleaner to null because now our promise is resolved so no need to clean it when the user logout\n this._initialPromiseResolver = null;\n\n runInAction(() => {\n this._gamblingSessionStatePromise = Promise.resolve(new GamblingSessionData(sessionData));\n });\n\n //Then we start listening for subsequent onGamblingSessionUpdate events to update total bets/wins in the game regulation strip\n //or showing this info in different popups\n this._onGamblingSessionUpdateSubscription = this.services.sdk.events.onGamblingSessionUpdate(sessionData => {\n runInAction(() => {\n this._gamblingSessionStatePromise = Promise.resolve(new GamblingSessionData(sessionData));\n });\n });\n });\n })\n }\n\n\n private _createDefaultGamblingSessionData(): IGamblingSessionUpdateData {\n return {\n sessionStatus: GamblingSessionStatus.Inactive,\n sessionTotalBets: 0,\n sessionTotalWins: 0,\n gamblingSessionId: \"\",\n updateCounter: -1\n };\n }\n\n private _onGamblingSessionActionHandler = (data: IGamblingSessionActionData) => {\n switch (data.messageType) {\n case GamblingSessionActionType.AdvancedWarningNetLossLimit:\n\n this._advancedWarningLossLimitToast?.close();\n\n this.analytics.reportNetLossAdvancedWarningShown(data);\n\n this._advancedWarningLossLimitToast = this.services.toaster.showAckStandardToast({\n contentProps: {\n title: this.services.translation.translate(\"ATTENTION\"),\n message: this.services.translation.translate(\"GAMBLING_SESSION_ADVANCED_WARN_LOSS_LIMIT_TOAST\"),\n button: {\n text: this.services.translation.translate(\"OK\"),\n onClick: closeToast => closeToast()\n }\n },\n onToastClosed: () => {\n this._advancedWarningLossLimitToast = null;\n this.analytics.reportMessageConfirmed(DISPLAY_MESSAGE_IDS.SDNetLossAdvanceWarning, data);\n }\n });\n break;\n case GamblingSessionActionType.AdvancedWarningTimeLimit:\n this._advancedWarningTimeLimitToast?.close();\n\n this.analytics.reportTimeLimitAdvancedWarningShown(data);\n\n this._advancedWarningTimeLimitToast = this.services.toaster.showAckStandardToast({\n contentProps: {\n title: this.services.translation.translate(\"ATTENTION\"),\n message: this.services.translation.translate(\"GAMBLING_SESSION_ADVANCED_WARN_TIME_LIMIT_TOAST\"),\n button: {\n text: this.services.translation.translate(\"OK\"),\n onClick: closeToast => closeToast()\n }\n },\n onToastClosed: () => {\n this._advancedWarningTimeLimitToast = null;\n this.analytics.reportMessageConfirmed(DISPLAY_MESSAGE_IDS.SDTimeLimitAdvanceWarning, data);\n }\n });\n break;\n case GamblingSessionActionType.TimeLimitReached:\n this.analytics.reportTimeLimitReachedShown(data);\n this.services.dialog.showModal(dialogHandler => (\n ),\n {\n title: this.services.translation.translate(\"GAMBLING_SESSION_TIME_LIMIT_REACHED_TITLE\"),\n noDefaultContentPadding: true,\n isHighPriority: true,\n onClosed: () => {\n this.analytics.reportMessageConfirmed(DISPLAY_MESSAGE_IDS.SDTimeLimitsReached, data);\n }\n });\n break;\n case GamblingSessionActionType.LossLimitReached:\n this.analytics.reportNetLossLimitReachedShown(data);\n this.services.dialog.showModal(dialogHandler => (\n ),\n {\n title: this.services.translation.translate(\"GAMBLING_SESSION_LOSS_LIMIT_REACHED_TITLE\"),\n noDefaultContentPadding: true,\n isHighPriority: true,\n onClosed: () => {\n this.analytics.reportMessageConfirmed(DISPLAY_MESSAGE_IDS.SDNetLossLimitsReached, data);\n }\n });\n break;\n case GamblingSessionActionType.TimeReminder:\n this._intervalReminderDialog?.close();\n this.analytics.reportRealityCheckShow(data);\n this._intervalReminderDialog = this.services.dialog.showModal(dialogHandler => (\n \n ), {\n title: this.services.translation.translate(\"GAMBLING_SESSION_INTERVAL_REMINDER_TITLE\"),\n noDefaultContentPadding: true,\n isHighPriority: true,\n onClosed: () => {\n this.analytics.reportMessageConfirmed(DISPLAY_MESSAGE_IDS.SDRealityCheck, data);\n }\n });\n break;\n }\n }\n\n private _formatDate(date: Date): string {\n return this.services.time.formatHistoryRecordDateTime(date, false);\n }\n\n private _formatUTCDate(date: Date): string {\n return this.services.time.formatHistoryRecordDateTime(new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000), false);\n }\n\n getGamblingSessionState(): Promise {\n if(this.isInitialized) {\n return this._gamblingSessionStatePromise;\n }\n\n return new Promise((resolve, reject) => {\n let hasTimedOut = false;\n const timeoutRef = setTimeout(() => {\n hasTimedOut = true;\n reject('Firebase gambling session update timed out');\n }, TimeSpan.parse(this.services.configuration.servicesConfigs.GamblingSession.firebaseTimeout).totalMilliseconds);\n\n this._gamblingSessionStatePromise.then(currentState => {\n if(!hasTimedOut) {\n clearTimeout(timeoutRef);\n resolve(currentState);\n }\n }).catch(err => {\n if(!hasTimedOut) {\n clearTimeout(timeoutRef);\n reject(err);\n }\n });\n });\n }\n\n private _showGamblingSessionRestrictedMessage(restrictionExpirationDate: Date): void {\n this.services.dialog.showSimpleTextModal({\n title: this.services.translation.translate('generic_notification_popup_title'),\n text: this.services.translation.translate('GAMBLING_SESSION_SELF_RESTRICTION_MESSAGE', {restrictionExpirationDate: this._formatDate(restrictionExpirationDate)}),\n buttons: [\n {\n text: this.services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n }\n\n async startGamblingSession(gameInfo: GameInfo, isFreePlay: boolean): Promise {\n\n const currentState = await this.getGamblingSessionState();\n if(isFreePlay) {\n if(currentState.sessionStatus === GamblingSessionStatus.Expired\n || (currentState.sessionStatus === GamblingSessionStatus.Restricted && currentState.restrictionExpirationDate.getTime() < Date.now())){\n const response = await this.services.api.gamblingSessionController.createGamblingSession();\n switch (response.errorCode) {\n case GamblingSessionManagerErrorCodes.OK:\n case GamblingSessionManagerErrorCodes.GamblingSessionAlreadyExist:\n return GameStepsExecutionResultEnum.Continue;\n default:\n this._showGeneralErrorMessage();\n return GameStepsExecutionResultEnum.Cancel;\n\n }\n } else if(currentState.sessionStatus === GamblingSessionStatus.Restricted && currentState.restrictionExpirationDate.getTime() > Date.now()) {\n //Theoretically we should never reach here because the game will be stopped by the RestrictionsGameStep and the message will be shown there.\n this._showGamblingSessionRestrictedMessage(currentState.restrictionExpirationDate);\n return GameStepsExecutionResultEnum.Cancel;\n }\n\n return GameStepsExecutionResultEnum.Continue;\n }\n\n if(currentState.sessionStatus === GamblingSessionStatus.Active) {\n return GameStepsExecutionResultEnum.Continue;\n } else if(currentState.sessionStatus === GamblingSessionStatus.Restricted && currentState.restrictionExpirationDate.getTime() > Date.now()) {\n //Theoretically we should never reach here because the game will be stopped by the RestrictionsGameStep and the message will be shown there.\n this._showGamblingSessionRestrictedMessage(currentState.restrictionExpirationDate);\n return GameStepsExecutionResultEnum.Cancel;\n } else {\n const correlationId = this.services.tools.getGuid();\n return await this._showGamblingSessionSetupDialog(await this._getLastBetActivity(correlationId), correlationId);\n }\n }\n\n private async _getLastBetActivity(correlationId: string): Promise {\n try {\n const response = await this.services.api.userController.getLastBetActivity({\n correlationId: correlationId\n });\n\n if(response.LastBetActivity) {\n return this._formatDate(new Date(response.LastBetActivity));\n }\n\n return null;\n } catch (err) {\n this.services.logger.error('Failed to get last bet activity', err);\n return null;\n }\n\n }\n\n private _showGeneralErrorMessage(): void {\n this.services.dialog.showSimpleTextModal({\n text: this.services.regulation.getGeneralErrorMessage(),\n showEmptyTitle: true,\n buttons: [\n {\n text: this.services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n }\n\n private _showGamblingSessionSetupDialog(lastBetActivity: NullableString, correlationId: string): Promise {\n\n this.analytics.reportSetLimitPopupShown(correlationId);\n\n return new Promise((resolve, reject) => {\n\n const onSetLimits = async (limits: IGamblingSessionLimitsSetup) => {\n try {\n const response = await this.services.api.gamblingSessionController.startGamblingSession({\n correlationId: correlationId,\n lossLimitAmount: limits.lossLimitAmount,\n sessionDurationLimitInSeconds: limits.sessionDurationLimit.totalSeconds,\n reminderIntervalInSeconds: limits.reminderInterval.totalSeconds,\n restrictionPeriodInSeconds: limits.restrictionPeriod?.totalSeconds ?? 0,\n });\n\n this.analytics.reportConfirmSetLimitPopup(correlationId, limits, response.errorCode, response.gamblingSessionId);\n\n switch (response.errorCode) {\n case GamblingSessionManagerErrorCodes.OK:\n resolve(GameStepsExecutionResultEnum.Continue);\n break;\n case GamblingSessionManagerErrorCodes.GamblingSessionAlreadyExist:\n this.services.dialog.showSimpleTextModal({\n title: this.services.translation.translate('generic_notification_popup_title'),\n text: this.services.translation.translate('GAMBLING_SESSION_LIMITS_ALREADY_SET'),\n onClosed: () => resolve(GameStepsExecutionResultEnum.Continue),\n hideCloseButton: true,\n buttons: [\n {\n text: this.services.translation.translate('OK'),\n buttonPreset: \"primary\",\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n break;\n default:\n this._showGeneralErrorMessage();\n resolve(GameStepsExecutionResultEnum.Cancel);\n break;\n }\n } catch (err) {\n this.services.logger.error('Failed to start gambling session', err);\n reject(err);\n }\n }\n\n this.services.dialog.showModal(dialog => (), {\n title: this.services.translation.translate('GAMBLING_SESSION_SETUP_TITLE'),\n noDefaultContentPadding: true,\n isHighPriority: true,\n mobileCenterHeader: true,\n onClosedByXButton: () => {\n this.analytics.reportCancelSetLimitPopup(correlationId);\n resolve(GameStepsExecutionResultEnum.Cancel)\n }\n });\n });\n }\n\n}","import {Check} from \"@sparkware/app-utils\";\nimport {ILazy} from \"./lazy.interface\";\n\nexport class LazyAsync implements ILazy {\n constructor(private _valueFactory: () => Promise) {\n }\n\n readonly isLazy = true;\n\n private _promisedValue: Promise = undefined;\n private _resolvedValue: T = undefined;\n private _initializing = false;\n private _initValue(): void {\n if(this._initializing) {\n throw new Error('Lazy circular dependency detected: ' + this._valueFactory)\n }\n if(Check.isUndefined(this._promisedValue)) {\n this._initializing = true;\n try {\n this._promisedValue = this._valueFactory().then(instance => {\n this._resolvedValue = instance;\n return this._resolvedValue;\n });\n }\n finally {\n this._initializing = false;\n }\n\n }\n }\n\n get value(): Promise {\n this._initValue();\n return this._promisedValue;\n }\n\n tryGetResolvedValue(): T | Promise {\n if(this._resolvedValue) {\n return this._resolvedValue;\n }\n return this.value;\n }\n\n forceInit(): void {\n this._initValue();\n }\n}\n","export class ServicesGroupLoader {\n async loadGroup1() {\n return await import(/*webpackChunkName: \"services-group1\" */'./services.group1');\n }\n\n async loadGroup2() {\n return await import(/*webpackChunkName: \"services-group2\" */'./services.group2');\n }\n\n async loadGroup3() {\n return await import(/*webpackChunkName: \"services-group3\" */'./services.group3');\n }\n\n async loadGroup4() {\n return await import(/*webpackChunkName: \"services-group4\" */'./services.group4');\n }\n\n async loadGroup5() {\n return await import(/*webpackChunkName: \"services-group5\" */'./services.group5');\n }\n}","import styled from 'styled-components';\n\nexport const SnackbarNotificationComponentBox = styled.div<{bottomOffset?: number}>`\n background-color: ${props => props.theme.colors.snackbarNotificationBg || props.theme.colors.brandPrimaryContrast};\n color: ${props => props.theme.colors.textContrast};\n \n z-index: 100;\n position: fixed;\n bottom: ${props => props.bottomOffset + 'px'};\n left: 50%;\n transform: translate(-50%, -50%);\n \n font-size: 1.4rem;\n \n border-radius: 4px;\n padding: 12px 18px;\n \n display: flex;\n width: min(95%, 700px);\n ${({theme}) => theme.font.presets.regular};\n \n \n & span:first-of-type {\n flex-grow: 1;\n }\n \n & span:last-of-type {\n cursor: pointer;\n ${({theme}) => theme.font.presets.body};\n\n }\n\n animation: fadeInAnimation ease 0.5s;\n animation-fill-mode: forwards; \n \n @keyframes fadeInAnimation {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n`;","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {ThemeProvider} from \"styled-components\";\nimport {SnackbarNotificationComponentBox} from \"./snackbar-notification.component.box\";\nimport {SnackbarNotificationParams} from \"../../services/notifications/notifications.service\";\nimport {HYBRID_EMBEDDED_NAV_MENU} from \"../bottom-navigation-bar/bottom-navigation-bar-consts\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\nexport interface SnackbarNotificationComponentWithServicesProps extends ComponentServicesPick<'dom' | 'theme'>, SnackbarNotificationParams {\n\n}\n\nconst ComponentBody :React.FC = observer((props) => {\n\n const getBottomOffset = (): number => {\n const bottomMenu = props.dom.querySelector(`.${HYBRID_EMBEDDED_NAV_MENU}`);\n return bottomMenu ? bottomMenu?.getBoundingClientRect().height : 80;\n }\n\n return (\n \n \n \n {props.text}\n \n \n {props.ctaText}\n \n \n \n );\n});\n\nexport const SnackbarNotificationComponent = withServices(ComponentBody, [\"dom\", \"theme\"]);","import React from 'react';\nimport {ServiceBase} from \"../ServiceBase\";\nimport {INotificationsService} from \"./notifications.service.interface\";\nimport {action, makeObservable, observable} from \"mobx\";\nimport {\n SnackbarNotificationComponent\n} from \"../../components/notifications/snackbar-notification.component\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nexport interface SnackbarNotificationParams {\n text: string;\n ctaText: string;\n onCtaClick: () => void;\n}\n\nexport interface DisplaySnackBarOptions extends SnackbarNotificationParams {\n displayTimeMs: number;\n}\n\ntype ActiveNotification = {\n id: number;\n value: React.ReactNode;\n}\n\nexport class NotificationsService extends ServiceBase implements INotificationsService {\n\n private static readonly SAVE_GAME_NOTIFICATION_DISPLAY_TIME_MS: number = 3000;\n\n constructor(services:IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n }\n\n @observable.ref\n private _currentNotifications: ActiveNotification[] = [];\n\n @action.bound\n private _setCurrentNotifications(newNotifications: ActiveNotification[]): void {\n this._currentNotifications = newNotifications;\n }\n\n public get currentNotificationsComponents(): React.ReactNode[] {\n return this._currentNotifications.map(dialog => dialog.value);\n }\n\n public showGameSavedNotification(): void {\n this.showNotification({\n text: this.services.translation.translate(\"GAME_SAVED_NOTIFICATION_TEXT\"),\n ctaText: this.services.translation.translate(\"GAME_SAVED_NOTIFICATION_CTA\"),\n displayTimeMs: NotificationsService.SAVE_GAME_NOTIFICATION_DISPLAY_TIME_MS,\n onCtaClick: () => this.services.games.showAllSavedGamesDrawer()\n });\n }\n\n private showNotification(newNotificationOptions: DisplaySnackBarOptions) {\n const id: number = Date.now();\n setTimeout(() => this.removeNotification(id), newNotificationOptions.displayTimeMs);\n this._setCurrentNotifications([\n ...this._currentNotifications,\n {\n id: id,\n value: \n }\n ]);\n }\n\n private removeNotification(id: number): void {\n this._setCurrentNotifications(this._currentNotifications.filter(cn => cn.id !== id));\n }\n}\n","\nimport Hls from 'hls.js';\nimport {VideoHlsBasePlayer} from './video-player-hls-base';\n\nexport class VideoOnDemandHlsPlayer extends VideoHlsBasePlayer {\n load() {\n if (this._hlsInstance) {\n this._hlsInstance.startLoad();\n } else {\n this._hlsInstance = this._createHlsInstance();\n this._hlsInstance.attachMedia(this.videoReference);\n }\n }\n\n play() {\n if (this._hlsInstance) {\n this._hlsInstance.startLoad();\n super.play();\n } else {\n this._hlsInstance = this._createHlsInstance();\n this._hlsInstance.on(Hls.Events.MANIFEST_PARSED, this._onManifestParsed);\n this._hlsInstance.attachMedia(this.videoReference);\n }\n }\n\n pause() {\n super.pause();\n this._hlsInstance?.stopLoad();\n }\n\n onWatchTimeLimitReached() {\n\n }\n\n private _createHlsInstance(): Hls {\n const hlsInstance = new Hls(this.HLS_CONFIG);\n\n hlsInstance.on(Hls.Events.ERROR, this._onHlsError);\n hlsInstance.on(Hls.Events.MEDIA_ATTACHED, this._onMediaAttached);\n hlsInstance.on(Hls.Events.LEVEL_UPDATED, this._onLevelUpdated);\n hlsInstance.on(Hls.Events.FPS_DROP, this._onFpsDrop);\n hlsInstance.on(Hls.Events.FRAG_LOADED, this._onBandwidthEstimate)\n hlsInstance.bandwidthEstimate = this.services.videoOnDemandPlaying.bandwidthEstimate;\n return hlsInstance;\n }\n}\n","import {LiveStreamNativePlayer} from './video-live-stream-player-native';\n\nexport class VideoOnDemandNativePlayer extends LiveStreamNativePlayer {\n load() {\n super.play();\n super.pause();\n this.rewind();\n }\n\n onWatchTimeLimitReached() {\n\n }\n\n private rewind() {\n this.videoReference.currentTime = 0;\n }\n}\n","import {VideoPlayingServiceBase} from \"./video-playing-service-base\";\nimport {GameInfo} from \"../games/game-info\";\nimport {IVideoPlayer} from \"./video-players/video-player.interface\";\nimport {VideoOnDemandHlsPlayer} from \"./video-players/live-stream-players/hls/video-on-demand-player-hls\";\nimport {VideoOnDemandNativePlayer} from \"./video-players/live-stream-players/native/video-on-demand-player-native\";\n\nexport const VIDEO_ON_DEMAND_WATCH_TIME_LIMIT: number = 1200000;\n\nexport class VideoOnDemandPlayingService extends VideoPlayingServiceBase {\n\n public gaCategory = \"VIDEO-ON-DEMAND\";\n\n protected _checkIfSupported() {\n const videoEl = document.createElement('video');\n try {\n if (VideoOnDemandNativePlayer.isSupported(videoEl)) {\n return true;\n }\n\n return VideoOnDemandHlsPlayer.isSupported();\n } finally {\n try {\n videoEl.src = \"\";\n videoEl.load();\n videoEl.remove();\n } catch (err) {\n this.services.logger.error('VideoOnDemandPlayingService - Failed to release temp video element', err);\n }\n }\n\n }\n\n getVideoPlayer(gameInfo: GameInfo, videoReference: HTMLVideoElement, dontAutoSwipe?: boolean): IVideoPlayer {\n\n const gameType = gameInfo.gameType;\n const streamSource = gameInfo.videoSlideUrl;\n\n if(gameInfo.slideCover){\n videoReference.poster = gameInfo.slideCover;\n }\n\n //Still under discussion whether VOD should have or not watch time limit.\n const watchTimeLimit = VIDEO_ON_DEMAND_WATCH_TIME_LIMIT;\n\n // We need to check also if not android because Evo live stream games not working on android real device because they use WAF and they don't get referer in android native.\n if (!this.services.device.os.isAndroid && VideoOnDemandNativePlayer.isSupported(videoReference)) {\n return new VideoOnDemandNativePlayer(this.services, gameType, videoReference, streamSource, watchTimeLimit);\n }\n \n if (VideoOnDemandHlsPlayer.isSupported()) {\n return new VideoOnDemandHlsPlayer(this.services, gameType, videoReference, streamSource, watchTimeLimit);\n }\n\n return null;\n }\n}\n","import {MenuItemsConfiguration} from \"../configurations/config-data-sections/menu-items.configuration\";\nimport {MenuItemConfigReaderBase} from \"../menu-items-common/menu-item-config-reader/menu-item-config-reader-base\";\nimport {\n MenuItemAnalyticsCategoryAndLabel\n} from \"../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {OrbitUserFlowAnalyticsCategory, OrbitUserFlowAnalyticsLabel} from \"../analytics/analytics.service.interface\";\n\n\nexport class CrossBrandsMenuItemConfigReader extends MenuItemConfigReaderBase {\n\n protected _getMenuItemsConfigOverrides(): MenuItemsConfiguration | undefined {\n return this.services.configuration.data.header.menuItemsOverride;\n }\n\n protected _getAnalyticsCategoryAndLabel(): MenuItemAnalyticsCategoryAndLabel {\n return {\n category: OrbitUserFlowAnalyticsCategory.Navigation,\n label: OrbitUserFlowAnalyticsLabel.AppHeader\n };\n }\n}\n\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const AppHeaderCrossBrandItemBox = styledBox('AppHeaderCrossBrandItemBox');","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const AppHeaderCrossBrandTextBox = styledBox('AppHeaderCrossBrandTextBox');","import {Check} from \"@sparkware/app-utils\";\nimport {PropsWithChildren} from \"react\";\nimport {MenuItemComponentProps} from \"../../../../../services/menu-items-common/menu-item-component-props.interface\";\nimport {IMenuItemRenderer} from \"../../../../../services/menu-items-common/renderer/menu-item.renderer.interface\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {AppHeaderCrossBrandItemBox} from \"../boxes/app-header-cross-brand-item/app-header-cross-brand-item.box\";\nimport {AppHeaderCrossBrandTextBox} from \"../boxes/app-header-cross-brand-text/app-header-cross-brand-text.box\";\n\ninterface GenericCrossBrandsMenuLinkComponentProps extends MenuItemComponentProps {\n className?: string;\n}\n\nexport class GenericCrossBrandsMenuItemComponent extends OrbitComponent> {\n private _onBrandClick = () => {\n\n const isAuth = this.services.user.isAuthorized;\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", \"Cross_\" + (isAuth ? \"Casino_\" : \"\") + this.props.menuItem.text);\n \n this.props.menuItem.execute();\n };\n\n \n private _renderIcon = () => {\n const brandConfig: IMenuItemRenderer = this.props.menuItem;\n\n if (Check.isEmpty(brandConfig?.icon)) {\n return null;\n }\n\n const Icon = this.services.theme.currentTheme.icons[brandConfig.icon];\n\n if (Check.isNullOrUndefined(Icon)) {\n return null;\n }\n\n return ;\n };\n\n\n render() {\n const {key, text} = this.props.menuItem;\n return this._onBrandClick()}\n >\n {this._renderIcon()}\n \n {text}\n \n ;\n }\n}\n","import React from 'react';\nimport {GenericCrossBrandsMenuItemComponent} from \"../../../components/header/top-header-left/cross-brand/cross-brands-items/generic-cross-brands-menu-item.component\";\nimport {MenuItemRendererBase} from \"../../menu-items-common/renderer/menu-item-renderer-base\";\nimport {IRenderMenuItemOptions} from \"../../menu-items-common/renderer/menu-item.renderer.interface\";\n\nexport class GenericCrossBrandsMenuItemRenderer extends MenuItemRendererBase {\n protected _createReactElement(options?: IRenderMenuItemOptions): React.ReactElement {\n return ();\n }\n}","import { action, observable, makeObservable } from 'mobx';\nimport { ResizeObserver } from '@juggle/resize-observer';\n\nimport {ServiceBase} from '../ServiceBase';\nimport {IHeaderService} from './header.service.interface';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport { DomEventSubscription } from '../../../utils/event-listener-registration';\nimport {IMenuItemRenderer} from '../menu-items-common/renderer/menu-item.renderer.interface';\nimport {CrossBrandsMenuItemConfigReader} from '../cross-brands/cross-brands-item-config-reader';\nimport {GenericCrossBrandsMenuItemRenderer} from './menu-items/generic-cross-brands-menu-item.renderer';\nimport {MenuItemKey} from '../configurations/config-data-sections/generated-config-const';\nimport {IMenuItemActionFactoryService} from \"../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\nexport class HeaderService extends ServiceBase implements IHeaderService {\n private _headerResizeObserver: ResizeObserver | null = null;\n private _onScrollSubscription: DomEventSubscription | null = null;\n private _headerElement: HTMLElement | null = null;\n private _headerRegulationDataElement: HTMLElement | null = null;\n\n @observable.ref\n _headerHeight: number = 0;\n @observable.ref\n headerRegulationHeight: number = 0;\n\n @observable.ref\n public skeleton: boolean = true;\n @action.bound\n public deactivateSkeleton(): void {\n this.skeleton = false;\n }\n\n private readonly menuItemConfigReader: CrossBrandsMenuItemConfigReader;\n \n constructor(services: IServiceFactoryExtended, private readonly menuItemActionFactory: IMenuItemActionFactoryService) {\n super(services);\n makeObservable(this);\n this._headerResizeObserver = new ResizeObserver(this._onHeaderResize);\n this._onScrollSubscription = this.services.window.subscribeTo.scroll(this._onWindowScroll);\n\n this.menuItemConfigReader = new CrossBrandsMenuItemConfigReader(services);\n }\n\n get headerHeight(): number {\n return this._headerHeight + this.headerRegulationHeight;\n }\n\n @action\n private computeHeaderHeight() {\n this._headerHeight = this._headerElement?.offsetHeight || 0;\n }\n\n @action\n private computeRegulationHeaderHeight() {\n this.headerRegulationHeight = this._headerRegulationDataElement?.offsetHeight || 0;\n }\n\n private _onHeaderResize = () => {\n this.computeHeaderHeight();\n this.computeRegulationHeaderHeight();\n };\n\n private _onWindowScroll = () => {\n this.computeHeaderHeight();\n this.computeRegulationHeaderHeight();\n };\n\n @action\n setHeaderElement(headerElement: HTMLElement): void {\n if(this._headerElement) {\n this._headerResizeObserver.unobserve(this._headerElement);\n }\n this._headerElement = headerElement;\n this.computeHeaderHeight();\n if (headerElement){\n this._headerResizeObserver.observe(headerElement);\n }\n }\n\n @action\n setHeaderRegulationDataElement(headerRegulationDataElement: HTMLElement): void {\n if(this._headerRegulationDataElement) {\n this._headerResizeObserver.unobserve(this._headerRegulationDataElement);\n }\n this._headerRegulationDataElement = headerRegulationDataElement;\n this.computeRegulationHeaderHeight();\n if (headerRegulationDataElement){\n this._headerResizeObserver.observe(headerRegulationDataElement);\n }\n }\n\n getHeaderRegulationDataElement(): HTMLElement | null {\n return this._headerRegulationDataElement;\n }\n\n private menuItemKeyIsCrossBrand(k: MenuItemKey): k is \"sportCrossBrandMenuItem\" | \"pokerCrossBrandMenuItem\" {\n return k === \"sportCrossBrandMenuItem\" || k === \"pokerCrossBrandMenuItem\";\n }\n getCrossBrandsMenuItems(): IMenuItemRenderer[] {\n return this.services.configuration.data.header.cross_brand.filter(k => {\n return this.menuItemKeyIsCrossBrand(k);\n }).map(crossBrandKey => {\n return this.getCrossBrandItemRenderer(crossBrandKey);\n }).filter(menuItem => {\n return menuItem.display;\n });\n }\n private getCrossBrandItemRenderer(crossBrandKey: MenuItemKey) {\n let menuItemRenderer = this.services.regulation.current.menuItems.getAppHeaderMenuItem(crossBrandKey, this.menuItemConfigReader, this.menuItemActionFactory);\n if(menuItemRenderer) {\n return menuItemRenderer;\n }\n return new GenericCrossBrandsMenuItemRenderer(crossBrandKey, this.menuItemConfigReader, this.services, this.menuItemActionFactory);\n }\n\n dispose(): void {\n this._headerResizeObserver.disconnect();\n this._headerResizeObserver = null;\n this._onScrollSubscription.dispose();\n this._onScrollSubscription = null;\n }\n}\n","import {MenuItemActionBase} from \"./menu-item-action-base\";\nimport {UriPath} from \"../location/uri-path/uri-path\";\nimport {IMenuItemExecuteOptions} from \"./menu-item-action.interface\";\nimport {LinkNavigationId} from \"../configurations/config-data-sections/generated-config-const\";\n\nexport class LinkNavigationAction extends MenuItemActionBase {\n protected async _onClick(options?: IMenuItemExecuteOptions): Promise {\n if(!this.config.linkId) {\n throw new Error(`Missing linkId for ${this.key} menu item`);\n }\n\n const promotionsLinks: LinkNavigationId[] = ['promotionsLink', 'promotionsCIPLink', 'promotionsCISLink'];\n\n try {\n if(this.services.user.isAuthorized && promotionsLinks.includes(this.config.linkId)) {\n this.services.sdk.promptPushNotificationPermissionRequest();\n }\n }\n catch (e) {\n this.services.analytics.sendElasticInfoEvent({\n eventType: \"error\",\n category: \"navigation\",\n action: \"push notification permission request failed\",\n value:e.toString()\n })\n }\n finally {\n await this.services.linksNavigation.navigateLink({\n linkId: this.config.linkId,\n linkHash: options?.linkHash,\n marketingParams: {\n dl: this.config.dl\n }\n });\n }\n }\n\n get isMatchToCurrentUrl(): boolean {\n let link = this.getLinkUrl();\n try {\n if (!link)\n return false;\n\n if (link.slice(-1) === '/') // NB: link may be \"/slots/\" comparing to \"/slots\", so trim trailing \"/\" from the link before comparing.\n link = link.slice(0, -1);\n\n const currentPath = this.services.location.currentUri.pathName;\n const candidate = new UriPath(link);\n\n if (currentPath.isEmpty)\n return candidate.isEmpty; // We're on the homepage, so a link to homepage is active\n if (candidate.isEmpty)\n return false; // We're *not* on the homepage, so a link to homepage is *definitely not* active\n\n const linkRoot = candidate.toArray()[1].toLowerCase();\n const pathRoot = currentPath.toArray()[1].toLowerCase();\n\n if (linkRoot !== pathRoot)\n return false; // cannot be the same link if they don't start in the same root\n\n return currentPath.toString().toLowerCase().indexOf(link.toLowerCase()) > -1;\n } catch(e) {\n this.services.logger.error(`Failed to compare link '${link}' to current route!`, e);\n return false;\n }\n }\n\n\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {IMenuItemActionFactoryService} from \"./menu-item-action-factory.service.interface\";\nimport {CustomMenuItemActionConstructorDefinition, IMenuItemAction} from \"./menu-item-action.interface\";\nimport {MenuItemKey} from \"../configurations/config-data-sections/generated-config-const\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {LinkNavigationAction} from \"./link-navigation.action\";\nimport {\n MenuItemDefaultConfigReader\n} from \"../menu-items-common/menu-item-config-reader/menu-item-default-config-reader\";\n\nexport class MenuItemActionFactoryService extends ServiceBase implements IMenuItemActionFactoryService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n let actionsModules = require.context('./custom-actions', true, /.+\\.action\\.(ts|tsx)$/);\n this._customActionsModules = actionsModules.keys()\n .map(actionsModules)\n .map((module: any) => {\n const ActionConstructor: CustomMenuItemActionConstructorDefinition = module.default;\n const actionInstance = new ActionConstructor(new MenuItemDefaultConfigReader(this.services), this.services)\n return {\n actionKey: actionInstance.key,\n actionConstructor: ActionConstructor\n };\n }).toDictionary(item => item.actionKey, item => item.actionConstructor);\n }\n\n private readonly _customActionsModules: Record;\n\n getMenuItemAction(key: MenuItemKey, configReader?: IMenuItemConfigReader): IMenuItemAction {\n\n configReader = configReader ?? new MenuItemDefaultConfigReader(this.services);\n\n const CustomActionConstructor = this._customActionsModules[key];\n if(CustomActionConstructor) {\n return new CustomActionConstructor(configReader, this.services);\n }\n\n return new LinkNavigationAction(key, configReader, this.services);\n }\n}","export class VideoElementContainer {\n constructor(private _videoElement: HTMLVideoElement) {\n }\n\n private _containerElement: HTMLElement | null = null;\n\n get isAttached(): boolean {\n return Boolean(this._containerElement);\n }\n\n attach(containerElement: HTMLElement): void {\n if(!containerElement) {\n throw new Error('containerElement for video cannot be null or undefined');\n }\n\n if(this._containerElement) {\n this.detach();\n }\n\n this._containerElement = containerElement;\n\n this._containerElement.appendChild(this._videoElement);\n\n }\n\n public detach(): void {\n if(this._containerElement) {\n this._containerElement.removeChild(this._videoElement);\n this._containerElement = null;\n }\n }\n\n destroy(): void {\n this.detach();\n this._videoElement = null;\n }\n}","import {action, makeObservable, observable} from \"mobx\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport class VideoWatchTimeHandler {\n constructor() {\n this._watchStartTime = 0\n this._watchTimeMilliseconds = 0;\n makeObservable(this);\n }\n\n private _watchStartTime: number = 0;\n\n @observable.ref\n private _watchTimeMilliseconds: number;\n\n get watchTime(): TimeSpan {\n return TimeSpan.fromMilliseconds(this._watchTimeMilliseconds);\n }\n\n @action.bound\n updateWatchTime(): void {\n if (this._watchStartTime) {\n const currentTime = Date.now();\n this._watchTimeMilliseconds += (currentTime - this._watchStartTime);\n this._watchStartTime = currentTime;\n }\n }\n\n onPlayStarted(): void {\n this._watchStartTime = Date.now();\n }\n\n onPlayStopped(): void {\n this.updateWatchTime();\n this._watchStartTime = 0;\n }\n\n}","import {IVideoResolution} from \"../video-player.view-model.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport interface IVideoAnalyticsReporter {\n\n reportPlayStarted(): void;\n reportRetryPlaySuccess(): void;\n reportResumePlaySuccess(): void;\n reportPreloadError(error: any): void;\n reportPauseOnAppSleep(): void;\n reportPlayError(error: any): void;\n reportRetryPlayError(error: any): void;\n reportResumePlayError(error: any): void;\n reportDroppedFrames(droppedVideoFrames: number): void;\n reportWatchTimeLimitReached(): void;\n reportPosterLoadFailure(error: any): void;\n reportVideoResolutionChanged(previousResolution: IVideoResolution, currentResolution: IVideoResolution): void;\n reportBufferingTime(bufferingTime: TimeSpan): void;\n reportMute(): void;\n reportUnmute(): void;\n}\n\nexport function isVideoFatalError(error: any): boolean {\n if(!error) {\n return false;\n }\n\n switch (error.name) {\n case 'NotAllowedError':\n //If we get NotAllowedError it means that we can't autoplay the video. but it doesn't mean is a fatal error. The user can still play the video by click on play button\n return false;\n case 'AbortError':\n return !(error.message && error.message.indexOf('The play() request was interrupted') >= 0); //usually these are not fatal errors.\n\n default:\n return true;\n }\n}","import {makeObservable, observable, runInAction} from \"mobx\";\nimport {VideoWatchTimeHandler} from \"./video-watch-time-handler\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {isVideoFatalError, IVideoAnalyticsReporter} from \"./analytics/video-analytics-reporter.interface\";\nimport {IVideoResolution} from \"./video-player.view-model.interface\";\n\n\nexport class VideoEventsController {\n constructor(private readonly videoElement: HTMLVideoElement,\n private readonly getAnalyticsReporter: () => IVideoAnalyticsReporter) {\n\n this.videoElement.addEventListener('playing', this._onPlaying);\n this.videoElement.addEventListener('canplay', this._onCanPlay);\n this.videoElement.addEventListener('stalled', this._onStalled);\n this.videoElement.addEventListener('waiting', this._onWaiting);\n this.videoElement.addEventListener('error', this._onError);\n this.videoElement.addEventListener('emptied', this._onEmptied);\n this.videoElement.addEventListener('pause', this._onPause);\n this.videoElement.addEventListener('timeupdate', this._onTimeUpdate);\n this.videoElement.addEventListener('ended', this._onEnded);\n this.videoElement.addEventListener('resize', this._onResize);\n window.addEventListener('offline', this._onGoingOffline);\n\n\n this._watchTimeHandler = new VideoWatchTimeHandler();\n\n makeObservable(this);\n }\n\n destroy(): void {\n this.videoElement.removeEventListener('playing', this._onPlaying);\n this.videoElement.removeEventListener('canplay', this._onCanPlay);\n this.videoElement.removeEventListener('stalled', this._onStalled);\n this.videoElement.removeEventListener('waiting', this._onWaiting);\n this.videoElement.removeEventListener('error', this._onError);\n this.videoElement.removeEventListener('emptied', this._onEmptied);\n this.videoElement.removeEventListener('pause', this._onPause);\n this.videoElement.removeEventListener('timeupdate', this._onTimeUpdate);\n this.videoElement.removeEventListener('ended', this._onEnded);\n this.videoElement.removeEventListener('resize', this._onResize);\n window.removeEventListener('offline', this._onGoingOffline);\n\n }\n\n private get analyticsReporter(): IVideoAnalyticsReporter {\n return this.getAnalyticsReporter();\n }\n\n private _bufferingStartTime: number | null = null;\n\n @observable.ref\n private _watchTimeHandler: VideoWatchTimeHandler;\n\n get watchTime(): TimeSpan {\n return this._watchTimeHandler.watchTime;\n }\n\n resetWatchTime(): void {\n runInAction(() => {\n this._watchTimeHandler = new VideoWatchTimeHandler();\n })\n }\n\n @observable.ref\n private _isLoading: boolean = true;\n get isLoading(): boolean {\n return this._isLoading;\n }\n\n\n @observable.ref\n private _isBuffering: boolean = false;\n get isBuffering(): boolean {\n return this._isBuffering;\n }\n\n @observable.ref\n private _hasError: boolean = false;\n get hasError(): boolean {\n return this._hasError || this._isOffline;\n }\n\n @observable.ref\n private _isOffline: boolean = false;\n\n\n @observable.ref\n private _isPlaying: boolean = false;\n get isPlaying(): boolean {\n return this._isPlaying;\n }\n\n @observable.ref\n private _isPaused: boolean = false;\n get isPaused(): boolean {\n return this._isPaused;\n }\n\n private _onEmptied = () => {\n runInAction(() => {\n this._previousResolution = null;\n this._isLoading = true;\n this._hasError = false;\n this._onBufferingStopped();\n this._isPlaying = false;\n this._isPaused = false;\n this.resetWatchTime();\n this._lastReportedDroppedFrames = 0;\n });\n }\n\n private _onPlaying = () => {\n runInAction(() => {\n this._hasError = false;\n this._isLoading = false;\n this._onBufferingStopped();\n this._isPlaying = true;\n this._isPaused = false;\n this._isOffline = false;\n this._watchTimeHandler.onPlayStarted();\n })\n }\n\n private _onBufferingStarted(): void {\n runInAction(() => {\n this._isBuffering = true;\n if(Check.isNullOrUndefined(this._bufferingStartTime)) {\n this._bufferingStartTime = Date.now();\n }\n })\n }\n\n private _onBufferingStopped(): void {\n if(this._isBuffering && !Check.isNullOrUndefined(this._bufferingStartTime)) {\n this.analyticsReporter.reportBufferingTime(TimeSpan.fromMilliseconds(Date.now() - this._bufferingStartTime));\n }\n\n runInAction(() => {\n this._isBuffering = false;\n this._bufferingStartTime = null;\n })\n }\n\n private _onStalled = () => {\n runInAction(() => {\n this._hasError = false;\n this._isLoading = false;\n this._onBufferingStarted();\n this._isPlaying = false;\n this._isPaused = false;\n this._watchTimeHandler.onPlayStopped();\n })\n }\n\n private _onWaiting = () => {\n runInAction(() => {\n this._hasError = false;\n //this._isLoading - on purpose not set.\n this._onBufferingStarted();\n this._isPlaying = false;\n this._isPaused = false;\n this._watchTimeHandler.onPlayStopped();\n })\n }\n\n private _onCanPlay = () => {\n runInAction(() => {\n this._hasError = false;\n this._isPaused = false;\n })\n }\n\n\n\n\n private _onError = (event: Event) => {\n\n const error = (event as any).target?.error;\n if(Check.isNullOrUndefined(error)) {\n // some time we get the error event when we pause the video while the video is loading.\n // In this case the error is null, and we will ignore this case.\n return;\n }\n\n let hasError: boolean = isVideoFatalError(error);\n\n runInAction(() => {\n\n this._hasError = hasError;\n this._isLoading = false;\n this._onBufferingStopped();\n this._isPlaying = false;\n this._isPaused = false;\n this._watchTimeHandler.onPlayStopped();\n });\n\n if(hasError) {\n this.analyticsReporter.reportPlayError(error);\n }\n }\n\n private _onPause = () => {\n runInAction(() => {\n this._hasError = false;\n this._isLoading = false;\n this._isBuffering = false;\n this._isPlaying = false;\n this._isPaused = true;\n this._watchTimeHandler.onPlayStopped();\n });\n }\n\n private _lastReportedDroppedFrames: number = 0;\n private _onTimeUpdate = () => {\n if(this._isPlaying) {\n this._watchTimeHandler.updateWatchTime();\n }\n\n const playbackQuality = this.videoElement.getVideoPlaybackQuality();\n\n if(playbackQuality.droppedVideoFrames > 0 && this._lastReportedDroppedFrames !== playbackQuality.droppedVideoFrames) {\n this._lastReportedDroppedFrames = playbackQuality.droppedVideoFrames;\n this.analyticsReporter.reportDroppedFrames(playbackQuality.droppedVideoFrames);\n }\n }\n\n private _onEnded = () => {\n this._watchTimeHandler.updateWatchTime();\n }\n\n private _previousResolution: IVideoResolution | null = null;\n private _onResize = () => {\n const newResolution: IVideoResolution = {\n width: this.videoElement.videoWidth,\n height: this.videoElement.videoHeight\n };\n\n if(this._previousResolution && (this._previousResolution.width !== newResolution.width || this._previousResolution.height !== newResolution.height)) {\n this.analyticsReporter.reportVideoResolutionChanged(this._previousResolution, newResolution);\n }\n\n this._previousResolution = newResolution;\n }\n\n private _onGoingOffline = () => {\n runInAction(() => {\n this._isOffline = true;\n })\n }\n\n\n}","import {IVideoAnalyticsReporter} from \"./video-analytics-reporter.interface\";\nimport {IVideoResolution} from \"../video-player.view-model.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport class VideoConsoleAnalyticsReporter implements IVideoAnalyticsReporter {\n\n reportPlayStarted(): void {\n console.log(`video: Play started`);\n }\n\n reportRetryPlaySuccess() {\n console.log(`video: Retry play success`);\n }\n\n reportResumePlaySuccess() {\n console.log(`video: Resume play success`);\n }\n\n reportPauseOnAppSleep() {\n console.log(`video: Pause on app sleep`);\n }\n\n reportPreloadError(error: any) {\n console.error(`video: Preload error: Name = ${error.name} | Message = ${error.message}`, error);\n }\n\n reportPlayError(error: any): void {\n console.error(`video: Play error: Name = ${error.name} | Message = ${error.message}`, error);\n }\n\n reportRetryPlayError(error:any) {\n console.error(`video: retry play error`, error);\n }\n\n reportResumePlayError(error: any): void {\n console.error(`video: resume play error`, error);\n }\n\n reportDroppedFrames(droppedVideoFrames: number): void {\n if(droppedVideoFrames > 15) {\n console.log(`video: dropped frames: ${droppedVideoFrames}`);\n }\n }\n\n reportWatchTimeLimitReached(): void {\n console.log(`video: watch time limit reached`);\n }\n\n reportPosterLoadFailure(error: any): void {\n console.log('video: poster load failure:', error);\n }\n\n reportVideoResolutionChanged(previousResolution: IVideoResolution, currentResolution: IVideoResolution): void {\n console.log(`video: resolution changed: ${previousResolution.width} x ${previousResolution.height} => ${currentResolution.width} x ${currentResolution.height}`);\n }\n\n reportBufferingTime(bufferingTime: TimeSpan): void {\n if(bufferingTime.totalSeconds > 1) {\n console.log('video: buffering time:', bufferingTime.totalSeconds);\n }\n }\n\n reportMute() {\n console.log('video: muted');\n }\n\n reportUnmute() {\n console.log('video: unmuted');\n }\n}","import {\n IVideoPlayerViewModel,\n IVideoPlayOptions,\n IVideoPreloadOptions,\n IVideoResolution\n} from \"./video-player.view-model.interface\";\nimport {VideoElementContainer} from \"./video-element-container\";\nimport {IVideoPlayerStrategy} from \"./video-player.strategy.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport React, {CSSProperties} from \"react\";\nimport {CGPEventSubscription} from \"../../sdk/cgp-sdk.interface\";\nimport {IReactionDisposer, makeObservable, observable, reaction, runInAction} from \"mobx\";\nimport {VideoEventsController} from \"./video-events-controller\";\nimport {NullableUndefinedString} from \"../../../../common/types/nullable-types\";\nimport {imagePreload} from \"../../../../common/utils/image-preload\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {VideoConsoleAnalyticsReporter} from \"./analytics/video-console-analytics-reporter\";\nimport {isVideoFatalError, IVideoAnalyticsReporter} from \"./analytics/video-analytics-reporter.interface\";\n\nexport abstract class VideoPlayerBaseModel implements IVideoPlayerViewModel {\n\n constructor(protected readonly services: IServiceFactoryExtended) {\n this._videoElement = this._createVideoElement();\n this._videoElementContainer = new VideoElementContainer(this._videoElement);\n this._analyticsReporter = VideoPlayerBaseModel.DefaultAnalyticsReporter;\n this._eventsController = new VideoEventsController(this._videoElement, () => this._analyticsReporter);\n\n this._sdkEventsSubscriptions.push(this.services.sdk.events.onAppPaused(this._onAppPaused));\n this._reactions.push(reaction(() => services.video.isSoundMuted, (isMuted) => {\n if (isMuted) {\n this.mute();\n } else {\n this.unmute();\n }\n }));\n\n this._reactions.push(reaction(\n () => this.watchTimeLimitReached,\n async (watchLimitReached) => {\n if (watchLimitReached) {\n await this.pause();\n this._analyticsReporter.reportWatchTimeLimitReached();\n }\n }));\n\n makeObservable(this);\n\n }\n\n private static DefaultAnalyticsReporter: IVideoAnalyticsReporter = new VideoConsoleAnalyticsReporter();\n\n private _videoElement: HTMLVideoElement;\n private _sdkEventsSubscriptions: CGPEventSubscription[] = [];\n private _reactions: IReactionDisposer[] = [];\n private _videoElementContainer: VideoElementContainer;\n private _src: string = \"\";\n private _analyticsReporter: IVideoAnalyticsReporter;\n\n @observable.ref\n private _watchTimeLimit: TimeSpan | undefined = undefined;\n\n\n\n protected abstract _createPlayerStrategy(): IVideoPlayerStrategy;\n\n\n protected get videoElement(): HTMLVideoElement {\n return this._videoElement;\n }\n\n private _eventsController: VideoEventsController;\n\n attachAnalyticsReporter(reporter: IVideoAnalyticsReporter): void {\n this._analyticsReporter = reporter;\n }\n\n protected _createVideoElement(): HTMLVideoElement {\n const videoElement = document.createElement('video');\n videoElement.playsInline = true;\n videoElement.muted = this.services.video.isSoundMuted;\n videoElement.autoplay = false;\n videoElement.loop = true;\n videoElement.preload = \"auto\";\n videoElement.style.width = '100%';\n videoElement.style.height = '100%';\n return videoElement;\n }\n\n private _playStrategy: IVideoPlayerStrategy | null = null;\n protected get playStrategy(): IVideoPlayerStrategy {\n\n if(!this._videoElementContainer.isAttached) {\n throw new Error('Cannot create play strategy before the player is attached to the DOM. Call the attach method first');\n }\n\n if(!this._playStrategy) {\n this._playStrategy = this._createPlayerStrategy();\n }\n\n return this._playStrategy;\n }\n\n get resolution(): IVideoResolution {\n return {\n width: this.videoElement.videoWidth,\n height: this.videoElement.videoHeight\n };\n }\n\n @observable.ref\n private _isPosterLoaded: boolean = false;\n get isPosterLoaded(): boolean {\n return this._isPosterLoaded;\n }\n\n private set isPosterLoaded(value: boolean) {\n runInAction(() => {\n this._isPosterLoaded = value;\n })\n\n }\n\n get isLoading(): boolean {\n return this._eventsController.isLoading;\n }\n\n get isBuffering(): boolean {\n return this._eventsController.isBuffering;\n }\n\n get hasError(): boolean {\n return this._eventsController.hasError;\n }\n\n get isPlaying(): boolean {\n return this._eventsController.isPlaying;\n }\n get isPaused(): boolean {\n return this._eventsController.isPaused;\n }\n \n get isMuted(): boolean {\n return this.videoElement.muted;\n }\n\n private _onAppPaused = () => {\n if(this._videoElementContainer.isAttached && this.playStrategy.isPlaying) {\n this.playStrategy.pause();\n this._analyticsReporter.reportPauseOnAppSleep();\n const appResumeSubscription = this.services.sdk.events.onAppResumed(async () => {\n appResumeSubscription.off();\n const subscriptionIndex = this._sdkEventsSubscriptions.findIndex(s => s === appResumeSubscription);\n if(subscriptionIndex >= 0) {\n this._sdkEventsSubscriptions.splice(subscriptionIndex, 1);\n }\n\n await this.resume();\n });\n\n this._sdkEventsSubscriptions.push(appResumeSubscription);\n }\n }\n\n\n attach(containerElement: HTMLElement, videoElementStyles?: CSSProperties): void {\n if(videoElementStyles) {\n this.applyVideoElementStyles(videoElementStyles);\n }\n this._videoElementContainer.attach(containerElement);\n }\n\n detach(): void {\n this._videoElementContainer.detach();\n }\n\n applyVideoElementStyles(styles: React.CSSProperties) {\n Object.keys(styles).forEach(styleProp => {\n this._videoElement.style[styleProp] = styles[styleProp];\n });\n }\n\n\n destroy(): void {\n this._videoElementContainer.destroy();\n this._eventsController.destroy();\n\n this._sdkEventsSubscriptions.forEach(sdkEvent => {\n sdkEvent.off();\n });\n this._sdkEventsSubscriptions = [];\n\n this._reactions.forEach(r => r());\n this._reactions = [];\n\n this._playStrategy?.destroy();\n this._playStrategy = null;\n\n this._videoElement.src = \"\";\n this._videoElement.load();\n this._videoElement = null;\n }\n\n setPoster(poster: NullableUndefinedString): void {\n if(poster) {\n if(poster !== this._videoElement.poster) {\n this._videoElement.poster = \"\";\n this.isPosterLoaded = false;\n imagePreload(poster)\n .then(() => {\n this._videoElement.poster = poster;\n this.isPosterLoaded = true;\n })\n .catch((err) => {\n this._analyticsReporter.reportPosterLoadFailure(err);\n });\n }\n } else {\n this._videoElement.poster = \"\";\n this.isPosterLoaded = false;\n }\n }\n\n private _resetWatchTime(src: string): void {\n if(this._src !== src) {\n this._eventsController.resetWatchTime();\n this._src = src;\n }\n }\n\n get watchTime(): TimeSpan {\n return this._eventsController.watchTime;\n }\n\n get videoDurationInSeconds(): number {\n return this.videoElement.duration\n }\n\n get watchTimeLimitReached(): boolean {\n if(this._watchTimeLimit) {\n return this.watchTime.totalMilliseconds >= this._watchTimeLimit.totalMilliseconds;\n } else {\n return false;\n }\n }\n\n async preload(src: string, options: IVideoPreloadOptions): Promise {\n try {\n\n this._resetWatchTime(src);\n\n if(this.watchTimeLimitReached) {\n return;\n }\n\n if(!this._videoElement.muted) {\n this._videoElement.muted = true;\n }\n\n this.setPoster(options.poster);\n\n await this.playStrategy.preload(src);\n } catch (err){\n if(isVideoFatalError(err)) {\n this._analyticsReporter.reportPreloadError(err);\n throw err;\n }\n }\n\n }\n\n async play(src: string, options: IVideoPlayOptions): Promise {\n try {\n\n this._resetWatchTime(src);\n\n runInAction(() => {\n this._watchTimeLimit = options.watchTimeLimit\n });\n\n if(this.watchTimeLimitReached) {\n return;\n }\n\n this.setPoster(options.poster);\n\n await this.playStrategy.play(src);\n\n if (this._videoElement.muted && !this.services.video.isSoundMuted) {\n this._videoElement.muted = false;\n }\n\n this._analyticsReporter.reportPlayStarted();\n\n } catch (err) {\n if(isVideoFatalError(err)) {\n this._analyticsReporter.reportPlayError(err);\n throw err;\n }\n }\n }\n\n\n async retryPlay(): Promise {\n try {\n await this.playStrategy.retryPlay();\n\n if(this._videoElement.muted && !this.services.video.isSoundMuted) {\n this._videoElement.muted = false;\n }\n\n this._analyticsReporter.reportRetryPlaySuccess();\n } catch (err) {\n this._analyticsReporter.reportRetryPlayError(err);\n throw err;\n }\n\n }\n\n async pause(): Promise {\n this.playStrategy.pause();\n }\n\n async resume(): Promise {\n try {\n await this.playStrategy.resume();\n this._analyticsReporter.reportResumePlaySuccess();\n } catch (err) {\n this._analyticsReporter.reportResumePlayError(err);\n throw err;\n }\n }\n\n\n mute(): void {\n this.videoElement.muted = true;\n this._analyticsReporter.reportMute();\n }\n\n unmute() {\n this.videoElement.muted = false;\n this._analyticsReporter.reportUnmute();\n }\n}\n\n","import {\n IVideoPlayerStrategy\n} from \"../../video-player.strategy.interface\";\n\nexport class NativeVideoStreamingStrategy implements IVideoPlayerStrategy {\n\n constructor(private videoElement: HTMLVideoElement) {\n }\n\n get isPlaying(): boolean {\n return !this.videoElement.paused;\n }\n\n private _updateSrc(src: string): boolean {\n if(this.videoElement.src !== src) {\n this.videoElement.src = src;\n return true;\n } else {\n return false;\n }\n }\n\n async preload(src: string): Promise {\n if(this._updateSrc(src)) {\n this.videoElement.load();\n }\n }\n\n async play(src: string): Promise {\n this._updateSrc(src);\n await this.videoElement.play();\n }\n\n async retryPlay(): Promise {\n const src = this.videoElement.src;\n this.videoElement.src = \"\";\n this.videoElement.load();\n await this.play(src);\n }\n\n pause(): void {\n if(this.isPlaying) {\n this.videoElement.pause();\n }\n }\n\n async resume(): Promise {\n if(this.videoElement.src && !this.isPlaying) {\n await this.videoElement.play();\n }\n }\n\n destroy(): void {\n this.videoElement = null;\n }\n\n}","import {\n IVideoPlayerStrategy\n} from \"../../video-player.strategy.interface\";\nimport Hls, {ErrorData, Events} from \"hls.js\";\nimport {NullableString} from \"../../../../../../common/types/nullable-types\";\n\n\nexport class HlsVideoStreamingStrategy implements IVideoPlayerStrategy {\n\n\n constructor(private videoElement: HTMLVideoElement) {\n this._hlsInstance = new Hls({\n ...Hls.DefaultConfig,\n capLevelOnFPSDrop: true\n });\n\n this._hlsInstance.attachMedia(this.videoElement);\n\n }\n\n private _hlsInstance: Hls;\n private _src: NullableString = null;\n\n get isPlaying(): boolean {\n return !this.videoElement.paused;\n }\n\n private _loadVideoManifest(src: string): Promise {\n return new Promise((resolve, reject) => {\n let eventsSubscriptions: Array<() => void> = [];\n\n const clearEvents = () => {\n eventsSubscriptions.forEach(unsubscribe => unsubscribe());\n eventsSubscriptions = [];\n }\n const parseManifestHandler = () => {\n clearEvents();\n resolve();\n }\n\n const onHslError = (event: Events.ERROR, data: ErrorData) => {\n clearEvents();\n reject(data)\n };\n\n this._hlsInstance.on(Hls.Events.MANIFEST_PARSED, parseManifestHandler);\n eventsSubscriptions.push(() => this._hlsInstance.off(Hls.Events.MANIFEST_PARSED, parseManifestHandler));\n\n this._hlsInstance.on(Hls.Events.ERROR, onHslError);\n eventsSubscriptions.push(() => this._hlsInstance.off(Hls.Events.ERROR, onHslError));\n\n this._hlsInstance.loadSource(src);\n })\n }\n\n async preload(src: string): Promise {\n if(this._src !== src) {\n this._src = src;\n await this._loadVideoManifest(this._src);\n } else {\n this._hlsInstance.startLoad();\n }\n }\n\n async play(src: string): Promise {\n await this.preload(src);\n await this.videoElement.play();\n }\n\n async retryPlay(): Promise {\n const src = this._src;\n this._src = \"\";\n await this.play(src);\n }\n\n pause() {\n if(this.isPlaying) {\n this.videoElement.pause();\n }\n\n this._hlsInstance.stopLoad();\n }\n\n async resume(): Promise {\n if(this._src && !this.isPlaying) {\n await this.play(this._src)\n }\n }\n\n destroy() {\n this._hlsInstance.detachMedia();\n this._hlsInstance.destroy();\n this._hlsInstance = null;\n this.videoElement = null;\n }\n\n}","import {VideoPlayerBaseModel} from \"../video-player-base.model\";\nimport {IVideoPlayerStrategy} from \"../video-player.strategy.interface\";\nimport {NativeVideoStreamingStrategy} from \"./strategies/native-video-streaming.strategy\";\nimport {HlsVideoStreamingStrategy} from \"./strategies/hls-video-streaming.strategy\";\n\n\n\nexport class VideoStreamingPlayerModel extends VideoPlayerBaseModel {\n protected _createPlayerStrategy(): IVideoPlayerStrategy {\n if(!this.services.device.os.isAndroid && this.services.video.isNativeStreamingSupported(this.videoElement)) {\n return new NativeVideoStreamingStrategy(this.videoElement);\n }\n\n return new HlsVideoStreamingStrategy(this.videoElement);\n }\n\n}","import {IVideoService} from \"./video.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IVideoPlayerViewModel} from \"./models/video-player.view-model.interface\";\nimport {VideoStreamingPlayerModel} from \"./models/video-streaming/video-streaming-player.model\";\nimport Hls from \"hls.js\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nconst VIDEO_STREAM_MIME_TYPE = 'application/vnd.apple.mpegurl';\n\nexport class VideoService extends ServiceBase implements IVideoService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n const videoElement = document.createElement('video');\n this.isStreamingSupported = this.isNativeStreamingSupported(videoElement) || Hls.isSupported();\n }\n\n\n get isSoundMuted(): boolean {\n return this.services.user.preferences.sound.isMuted;\n }\n\n toggleSound(): void {\n this.services.user.preferences.sound.toggle();\n }\n\n\n isNativeStreamingSupported(videoElement: HTMLVideoElement): boolean {\n const validCanPlayValue = ['probably', 'maybe'];\n const canPlayResultValue = videoElement.canPlayType(VIDEO_STREAM_MIME_TYPE);\n\n return validCanPlayValue.includes(canPlayResultValue);\n }\n\n readonly isStreamingSupported: boolean;\n\n\n createVideoStreamingPlayer(): IVideoPlayerViewModel {\n return new VideoStreamingPlayerModel(this.services);\n }\n\n\n}","import { Check, TimeSpan } from \"@sparkware/app-utils\";\nimport { ServiceBase } from \"../ServiceBase\";\nimport { IIdleRecommendationsService, IIdleRecommendationsServiceParams, IIdleRecomToastDef } from \"./idle-recommendations.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { GameInfo } from \"../games/game-info\";\nimport { IdleRecommendationComponent } from \"../../components/idle-recommendation/idle-recommendation.component\";\nimport { makeObservable, observable } from \"mobx\";\n\n\nconst MAX_APPEARANCES_PER_SESSION: number = 3;\nconst ACTIVITY_DETECTION_INTERVAL: TimeSpan = TimeSpan.fromSeconds(1);\nconst IDLE_DETECTION_INTERVAL: TimeSpan = TimeSpan.fromMinutes(1);\nconst IDLE_RECOMMENDATIONS_LOCAL_STORAGE_KEY: string = 'idleRecommendationsData';\nconst DISPLAY_INTERVAL: TimeSpan = TimeSpan.fromSeconds(0);\n\n\nexport class IdleRecommendationsService extends ServiceBase implements IIdleRecommendationsService {\n static CLASS = 'IdleRecommendationsService';\n\n private _idleDetectionInterval: TimeSpan;\n private _numberOfAppearancesInSession: number;\n private _maxAppearancesAllowedPerSession: number;\n private _idleDetectionSubscription: ReturnType;\n private _userActivityDetector: any;\n private _isIdleRecToasterDisplayed: boolean;\n private _displayInterval: TimeSpan;\n private _recommendedGameType: string | null = null;\n private _toasterDisposer: (() => void) | null = null;\n\n @observable.ref\n private _isThereRunningApps = true;\n\n constructor(services: IServiceFactoryExtended, params?: IIdleRecommendationsServiceParams) {\n super(services);\n\n makeObservable(this);\n\n this.toggleFeatureOn(params);\n\n this.services.appLauncher.then(appLauncher => {\n this.reaction(() => appLauncher.isThereRunningApps, (isThereRunningApps) => {\n this._isThereRunningApps = isThereRunningApps;\n }, { fireImmediately: true })\n });\n }\n\n\n public showToast(toastConfig: IIdleRecomToastDef) {\n return this.services.toaster.showCustomToast({\n id: toastConfig.id || \"idle_recommendation_toast\",\n toastOptions: toastConfig.toastOptions,\n renderContent: (handler) => {\n return \n },\n onToastShown: toastConfig.onToastShown,\n onToastClosed: toastConfig.onToastClosed,\n displayCondition: () => !this._isThereRunningApps\n });\n }\n\n toggleFeatureOn(params) {\n this._idleDetectionInterval = params?.idleDetectionInterval ? TimeSpan.parse(params.idleDetectionInterval) : IDLE_DETECTION_INTERVAL;\n this._maxAppearancesAllowedPerSession = params?.maxAppearancesPerSession ? params.maxAppearancesPerSession : MAX_APPEARANCES_PER_SESSION;\n this._numberOfAppearancesInSession = this._getNoOfAppearancesInSessionFromLocalStorage();\n this._displayInterval = params?.displayInterval ? TimeSpan.parse(params.displayInterval) : DISPLAY_INTERVAL;\n this._subscribe();\n this._stopIdleDetection(); // Just to be on the safe side\n this._startIdleDetection();\n }\n\n private _subscribe() {\n this.services.appLauncher.then(appLauncher => {\n if (appLauncher.isThereRunningApps) {\n this._startIdleDetection();\n }\n });\n\n this.services.sdk.events.onBeforeOAuthStateChanged(this._resetAppearancesInSession.bind(this));\n this.services.sdk.events.onBeforeOAuthStateChanged(this._startIdleDetection.bind(this));\n this.services.sdk.events.onGameClose(this._resetIdleDetectionTimer.bind(this));\n this.services.sdk.events.onGameOpen(this._closeToasterWhenOpeningAnotherGame.bind(this));\n }\n\n private _startIdleDetection() {\n if (this.services.user.isAuthorized) {\n this._startUserIdleDetection();\n this._startUserActivityDetection();\n } else {\n this._stopIdleDetection();\n }\n }\n\n private _disposeIdleDetectionTimer() {\n if (this._idleDetectionSubscription) {\n clearInterval(this._idleDetectionSubscription)\n }\n }\n\n private _resetIdleDetectionTimer() {\n this._disposeIdleDetectionTimer();\n this._startUserIdleDetection();\n }\n\n private _startUserIdleDetection() {\n this._idleDetectionSubscription = setInterval(() => {\n this._showIdleRecommendationToaster();\n }, this._idleDetectionInterval.totalMilliseconds);\n }\n\n private _stopIdleDetection() {\n this._disposeIdleDetectionTimer();\n if (this._userActivityDetector) this._userActivityDetector.dispose();\n this._isIdleRecToasterDisplayed = false;\n }\n\n private _closeToasterWhenOpeningAnotherGame() {\n if (this._isIdleRecToasterDisplayed && this._toasterDisposer) {\n this._onCloseAnalytics = this._openedAnotherGameWhileIdleIsActiveAnalytics;\n this._toasterDisposer();\n this._toasterDisposer = null;\n }\n }\n\n private _startUserActivityDetection() {\n this._userActivityDetector = this.services.sdk.createUserActivityDetactor({\n userActivityDetectionInterval: ACTIVITY_DETECTION_INTERVAL,\n onUserActivityCallback: this._resetIdleDetectionTimer.bind(this),\n })\n }\n\n // We have two different types of close analytics: one for clicking the idle rec's X btn and one for launching a game (NOT the one in idle) while the idle is active.\n private _defaultOnCloseAnalytics = () => {\n this._sendAnalytics({ action: 'click_close_button', label: this._recommendedGameType });\n };\n\n private _openedAnotherGameWhileIdleIsActiveAnalytics = () => {\n this._sendAnalytics({ action: 'launched_other_game', label: this._recommendedGameType });\n };\n\n private _openedRecommendedGameAnalytics = () => {\n this._sendAnalytics({ action: 'click_play', label: this._recommendedGameType });\n };\n\n private _onCloseAnalytics = this._defaultOnCloseAnalytics;\n\n private _onOpened() {\n this._isIdleRecToasterDisplayed = true;\n }\n\n private _onClosed() {\n this._isIdleRecToasterDisplayed = false;\n this._resetIdleDetectionTimer();\n this._onCloseAnalytics();\n }\n\n private async _showIdleRecommendationToaster() {\n if (\n this._isIdleRecToasterDisplayed ||\n Boolean((await this.services.gameRunner)?.currentRunningGame) ||\n this.services.overlay.isOpen\n ) {\n return;\n }\n\n if (this._numberOfAppearancesInSession >= this._maxAppearancesAllowedPerSession) {\n this.services.logger.debug(`IdleRecommendations toaster not displayed - max appearances per session - ${this._maxAppearancesAllowedPerSession} reached`);\n return;\n }\n\n this._getRecentlyPlayedGame()\n .then(recentlyPlayedGame => this._getRecommendedGameBasedOnCorrelation(recentlyPlayedGame))\n .then(recomGameType => {\n this._recommendedGameType = recomGameType;\n return this._getRecommendedGameInfo(recomGameType);\n })\n .then(recomGameTypeInfo => this._showToaster(recomGameTypeInfo));\n }\n\n private async _showToaster(gameInfo: GameInfo): Promise {\n this._onCloseAnalytics = this._defaultOnCloseAnalytics;\n\n const toasterHandler = this.showToast({\n toastOptions: {\n timeout: TimeSpan.fromSeconds(this._displayInterval.totalSeconds),\n hideProgressBar: true,\n },\n contentProps: {\n gameType: gameInfo.gameType,\n onPlayRecommendedGameHandler: () => {\n if (this._isIdleRecToasterDisplayed && this._toasterDisposer) {\n this._onCloseAnalytics = this._openedRecommendedGameAnalytics;\n this._toasterDisposer();\n this._toasterDisposer = null;\n }\n gameInfo.open({ isRealMode: true });\n }\n },\n onToastShown: () => {\n this._onOpened();\n this._increaseAppearancesInSession();\n this._sendAnalytics({ action: 'view', label: this._recommendedGameType, value: 1 + this._numberOfAppearancesInSession });\n },\n onToastClosed: () => {\n this._onClosed();\n }\n });\n this._toasterDisposer = toasterHandler?.close;\n }\n\n private async _getRecentlyPlayedGame(): Promise {\n const recentlyGamesPlayed = this.services.games.recentlyPlayedGames.gameTypes\n if (recentlyGamesPlayed.length === 0) {\n const aiGameTypesArray = this.services.aiNewEngine.aiNewRecommendedGames?.gameTypes\n\n if (Check.isArray(aiGameTypesArray) && aiGameTypesArray.length > 0) {\n return aiGameTypesArray[Math.floor(Math.random() * aiGameTypesArray.length)];\n } else {\n this.services.logger.debug(`IdleRecommendations toaster - not displayed because we didnt get any ai list game`);\n return Promise.reject(false);\n }\n } else {\n return recentlyGamesPlayed[0];\n }\n }\n\n private async _getRecommendedGameBasedOnCorrelation(recentlyGamePlayed: number): Promise {\n const correlatedGames = await this.services.games.getCorrelatedGames(recentlyGamePlayed, 6);\n if (Check.isArray(correlatedGames) && correlatedGames.length === 0) {\n this.services.logger.debug(`IdleRecommendations toaster - not displayed because we didnt get correlated games for gameType ${recentlyGamePlayed}`);\n return Promise.reject(false);\n }\n return correlatedGames[Math.floor(Math.random() * correlatedGames.length)];\n }\n\n private async _getRecommendedGameInfo(gameType: number): Promise {\n const gameDataInfo = await this.services.games.getGameInfo(gameType);\n if (!gameDataInfo) {\n this.services.logger.debug(`IdleRecommendations toaster - not displayed because we didnt get game infos for gameType: ' ${gameType}`);\n return Promise.reject(false);\n }\n return gameDataInfo;\n }\n\n private _setIdleRecommendationDataInLocalStorage(): void {\n this.services.localStorage.setItem(IDLE_RECOMMENDATIONS_LOCAL_STORAGE_KEY, JSON.stringify({ noOfAppearancesInSession: this._numberOfAppearancesInSession || 0 }))\n }\n\n private _getNoOfAppearancesInSessionFromLocalStorage(): number {\n let { noOfAppearancesInSession } = this.services.localStorage.getJson(IDLE_RECOMMENDATIONS_LOCAL_STORAGE_KEY) || 0\n if (!Check.isNumber(noOfAppearancesInSession)) {\n noOfAppearancesInSession = 0\n }\n\n return noOfAppearancesInSession\n }\n\n private _resetAppearancesInSession(): void {\n this._numberOfAppearancesInSession = 0;\n this._setIdleRecommendationDataInLocalStorage();\n }\n\n private _increaseAppearancesInSession(): void {\n this._numberOfAppearancesInSession++;\n this._setIdleRecommendationDataInLocalStorage();\n }\n\n private _sendAnalytics(analyticsData): void {\n this.services.analytics.sendOrbitAIFeatureEvent(\n 'idleRecommendations', // Category\n analyticsData?.action,\n analyticsData?.label,\n analyticsData?.value\n );\n }\n}","import { IQAEnvironmentPopUpBlockerService } from './qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.service.interface';\nimport { QAEnvironmentPopUpBlockerService } from './qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.service';\nimport { LiveStreamPlayingService } from './video-live-stream/live-stream-playing.service';\nimport { IVideoPlayingService } from './video-live-stream/video-playing.service.interface';\nimport {ITranslationService} from './translation/translation.service.interface';\nimport {TranslationService} from './translation/translation.service';\nimport {IGamesService} from './games/games.service.interface';\nimport {ILoggerService} from './logger/logger.service.interface';\nimport {ICurrencyService} from './currency/currency.service.interface';\nimport {CurrencyService} from './currency/currency.service';\nimport {IAnalyticsService} from './analytics/analytics.service.interface';\nimport {AnalyticsService} from './analytics/analytics.service';\nimport {ILobbyGameInfoPreviewService} from './lobby-game-info-preview/lobby-game-info-preview.service.interface';\nimport {GamesService} from './games/games.service';\nimport {IConfigurationService} from './configurations/configuration.service.interface';\nimport {ConfigurationsService} from './configurations/configurations.service';\nimport {Lazy} from '../../utils/lazy';\nimport {IUserService} from './user/user.service.interface';\nimport {UserService} from './user/user.service';\nimport {ISegmentationAggregatorService} from './segmentation-aggregator/segmentation-aggregator.service.interface';\nimport {SegmentationAggregatorService} from './segmentation-aggregator/segmentation-aggregator.service';\nimport {ILauncherService} from './launcher/launcher.service.interface';\nimport {IClientDeviceService} from './client-device/client-device.service.interface';\nimport {IDeviceService} from './device/device.service.interface';\nimport {DeviceService} from './device/device.service';\nimport {IWindowService} from './window/window.service.interface';\nimport {IAiEngineService} from './ai-engine/ai-engine.service.interface';\nimport {AiEngineService} from './ai-engine/ai-engine.service';\nimport {IHttpService} from './http/http.service.interface';\nimport {IDeepLinkService} from './deep-link/deep-link.service.interface';\nimport {ISdkService} from './sdk/sdk.service.interface';\nimport {SdkService} from './sdk/sdk.service';\nimport {IServiceFactoryExtended} from './service-factory-extended.interface';\nimport {IGamesFilterService} from './games-filter/games-filter.service.interface';\nimport {GamesFilterService} from './games-filter/games-filter.service';\nimport {IUserMenuService} from \"./user-menu/user-menu.service.interface\";\nimport {IArenasService} from './arenas/arenas.service.interface';\nimport {ArenasService} from './arenas/arenas.service';\nimport {IDomService} from './dom/dom.service.interface';\nimport {ISiteMapService} from './sitemap/sitemap.service.interface';\nimport {IMarketingService} from './marketing/marketing.service.interface';\nimport {ILanguageData, ILanguageService} from './language/language.service.interface';\nimport {LanguageService} from './language/language.service';\nimport {ISideMenuService} from './side-menu/side-menu.service.interface';\nimport {IGameSearchService} from './game-search/game-search.service.interface';\nimport {IExternalLinksService} from './external-links/external-links.service.interface';\nimport {ICmsApiService} from './cms/cms-api/cms-api.service.interface';\nimport {ICmsBannersService} from './cms/cms-banners/cms-banners.service.interface';\nimport {IStorageService} from './storage/storage.service.interface';\nimport {ICmsPagesService} from './cms/cms-pages/cms-pages.service.interface';\nimport {ICmsSegmentationService} from './cms/cms-segmentation/cms-segmentation.service.interface';\nimport {IDeepLinkActionsFactoryService} from './deep-link/deep-link-action-factory/deep-link-actions-factory.service.inteface';\nimport {IDeepLinkParserService} from './deep-link/legacy/deep-link-parsers/deep-link-parser.service.interface';\nimport {IStickyHandlerFactoryService} from \"./sticky-handler-factory/sticky-handler-factory.service.interface\";\nimport {StickyHandlerFactoryService} from \"./sticky-handler-factory/sticky-handler-factory.service\";\nimport {IGamePreviewFeaturesSelectorService} from './game-preview-features-selector/game-preview-features-selector.service.interface';\nimport {GameRouteHandlerService} from './game-route-handler/game-route-handler.service';\nimport {LauncherService} from './launcher/launcher.service';\nimport {SpinnerService} from './spinner/spinner.service';\nimport {CrossBrandsService} from './cross-brands/cross-brands.service';\nimport {ILocationService} from './location/location.service.interface';\nimport {LocationService} from './location/location.service';\nimport {IRoutingConfigurationService} from './routing-configuration/routing-configuration.service.interface';\nimport {RoutingConfigurationService} from './routing-configuration/routing-configuration.service';\nimport {IRoutingService} from './routing/routing.service.interface';\nimport {RoutingService} from './routing/routing.service';\nimport {IOverlayService} from './overlay/overlay.service.interface';\nimport {OverlayService} from './overlay/overlay.service';\nimport {ApplicationStartupConfigurations} from '../app-bootstrap/config-interfaces/application-startup.configurations';\nimport {SplashService} from './splash/splash.service';\nimport {ISplashService} from './splash/splash-service.interface';\nimport {ITimeService} from './time/time.service.interface';\nimport {TimeService} from './time/time.service';\nimport {IAiNewGamesEngineService} from \"./ai-new-games-engine/ai-new-games.service.interface\";\nimport {AiNewGamesEngineService} from \"./ai-new-games-engine/ai-new-games.service\";\nimport {IThemeService} from './theme/theme.service.interface';\nimport {ThemeService} from './theme/theme.service';\nimport {MiniOrbitService} from './mini-orbit/mini-orbit.service';\nimport {IMiniOrbitService} from \"./mini-orbit/mini-orbit.service.interface\";\nimport {DialogButtonClickHandleResultEnum, IDialogService} from './dialog/dialog.service.interface';\nimport {DialogService} from './dialog/dialog.service';\nimport {IHeaderService} from './header/header.service.interface';\nimport { IProgressiveWebAppService } from './progressive-web-app/progressive-web-app.service.interface';\nimport { IPWAManifestService } from './manifest/pwa-manifest.service.interface';\nimport { PWAManifestService } from './manifest/pwa-manifest.service';\nimport {IMiniOrbitCommunicationAdapterFactoryService} from './mini-orbit/adapter-factory/mini-orbit-communication-adapter-factory.service.interface';\nimport {MiniOrbitCommunicationAdapterFactoryService} from './mini-orbit/adapter-factory/mini-orbit-communication-adapter-factory.service';\n\nimport { ILiveTableFeedsService } from './live-table-feeds-service/live-table-feeds.service.interface';\nimport { LiveTableFeedsService } from './live-table-feeds-service/live-table-feeds.service';\nimport {IDrawerService} from './drawer/drawer.service.interface';\nimport { IDailyDealService } from './daily-deal/daily-deal.service.interface';\nimport { IJackpotsService } from './jackpots/jackpots.service.interface';\nimport { IAbTestingFeatureDataProviderService } from './ab-testing/ab-testing-feature-data-provider.service.interface';\nimport { AbTestingFeatureDataProviderService } from './ab-testing/ab-testing-feature-data-provider.service';\nimport {IControlCenterService} from \"./control-center/control-center.service.interface\";\nimport {ControlCenterService} from \"./control-center/control-center.service\";\nimport { IWalletProxyService } from './wallet-proxy/wallet-proxy.service.interface';\nimport { WalletProxyService } from './wallet-proxy/wallet-proxy.service';\nimport { SdkHooksProvider } from '../app-bootstrap/sdk-initializer/sdk-hooks-provider';\nimport {IGamePopupService} from \"./game-popup/game-popup.service.interface\";\nimport {IHomepageService} from \"./homepage/homepage.service.interface\";\nimport {HomepageService} from \"./homepage/homepage.service\";\nimport {IAnalyticsDataLayerService} from \"./analytics/analytics-data-layer.service.interface\";\nimport {SessionCooldownService} from \"./session-cooldown/session-cooldown.service\";\nimport {ISessionCooldownService} from \"./session-cooldown/session-cooldown.service.interface\";\nimport { IMediaQueryService } from './media-query/media-queries.interface';\nimport { MediaQueryService } from './media-query/media-query.service';\n\nimport {IToolsService} from \"./tools/tools.service.interface\";\nimport {ToolsService} from \"./tools/tools.service\";\nimport {IVerticalGamesListService} from \"./vertical-games-list/vertical-games-list.service.interface\";\nimport {IUserGameOrientationService} from \"./user-game-orientation/user-game-orientation.service.interface\";\nimport {UserGameOrientationService} from \"./user-game-orientation/user-game-orientation.service\";\nimport {ApiService} from './api/api.service';\n\nimport {OrbitComponentToSdkAdapterService} from './orbit-component-to-sdk-adapter/orbit-component-to-sdk-adapter.service';\nimport {IOrbitComponentsInsideSdkProvider} from './orbit-component-to-sdk-adapter/orbit-components-inside-sdk-provider.interface';\nimport { IOmgService } from './omg-proxy/omg.service.interface';\nimport {IMessageBrokerService} from './casinofied/message-broker/message-broker.service.interface';\nimport {MessageBrokerService} from './casinofied/message-broker/message-broker.service';\nimport {ICasinofiedAppLauncherService} from './casinofied/app-launcher/casinofied-app-launcher.service.interface';\nimport {CasinofiedActionHandlerService} from './casinofied/action-handler/casinofied-action-handler.service';\nimport {IFloatingBubblesService} from './floating-bubbles/floating-bubbles.service.interface';\nimport {FloatingBubblesService} from './floating-bubbles/floating-bubbles.service';\nimport {IRestrictionRulerService} from \"./restriction-ruler/restriction-ruler.service.interface\";\nimport {RestrictionRulerService} from \"./restriction-ruler/restriction-ruler.service\";\nimport { IRedTigerService } from './red-tiger/red-tiger.service.interface';\nimport {CasinofiedAnalyticsService} from './casinofied/analytics-publisher/casinofied-analytics.service';\nimport {IAbTestingAiSortGamesListsService} from \"./ab-testing-ai-sort/ab-testing-ai-sort-games-lists.service.interface\";\nimport {AbTestingAiSortGamesListsService} from \"./ab-testing-ai-sort/ab-testing-ai-sort-games-lists.service\";\nimport {ICashierService} from \"../../common/interfaces/cashier.service.interface\";\nimport {CashierService} from \"./cashier/cashier.service\";\nimport { IRegulationService } from './regulation/regulation.service.interface';\nimport { RegulationService } from './regulation/regulation.service';\nimport {LimitsToasterService} from './limits-toaster/limits-toaster.service';\nimport { PlayerBurnoutService } from './burnout/player-burnout.service';\nimport { IPlayerBurnoutService } from './burnout/player-burnout.service.interface';\nimport { IPlayerOfferingsService } from './player-offerings/player-offerings.service.interface';\nimport { PlayerOfferingsService } from './player-offerings/player-offerings.service';\nimport { PixiAppService } from './pixi-app/pixi-app.service';\nimport { IPixiAppService } from './pixi-app/pixi-app.service.interface';\nimport { IGameAnimatedIconsManagerService } from './game-animated-icons-manager/game-animated-icons-manager.service.interface';\nimport { GameAnimatedIconsManagerService } from './game-animated-icons-manager/game-animated-icons-manager.service';\nimport { IWebGLContextManagerService } from './webgl-context-manager/webgl-context-manager.service.interface';\nimport { WebGLContextManagerService } from './webgl-context-manager/webgl-context-manager.service';\nimport {IExitPopupService} from \"./exit-popup/exit-popup.service.interface\";\nimport {RegularTooltipsService} from \"./tooltip/regular-tooltip/regular-tooltips.service\";\nimport {IRegularTooltipsService} from \"./tooltip/regular-tooltip/regular-tooltips.service.interface\";\nimport {GamingHistoryService} from \"./gaming-history/gaming-history.service\";\nimport {IGamingHistoryService} from \"./gaming-history/gaming-history.service.interfce\";\nimport {ICompaniesService} from \"./companies/companies.service.interface\";\nimport { IBecauseYouPlayedService } from './because-you-played/because-you-played.service.interface';\nimport { BecauseYouPlayedService } from './because-you-played/because-you-played.service';\nimport {IGameRunnerService} from \"./game-runner/game-runner.service.interface\";\nimport {IOrbitHybridService} from \"./hybrid/hybrid.service.interface\";\nimport {HybridService} from \"./hybrid/hybrid.service\";\nimport {StaticVideoPlayingService} from \"./video-live-stream/static-video-playing.service\";\nimport {SessionStorageService} from \"./storage/session-storage.service\";\nimport {ICookiesService} from \"./storage/cookies.service.interface\";\nimport {CookiesService} from \"./storage/cookies.service\";\nimport {IFreePlayService} from \"./free-play/free-play.service.interface\";\nimport {FreePlayService} from \"./free-play/free-play.service\";\nimport {IRestrictionsService} from \"./restrictions/restrictions.service.interface\";\nimport {RestrictionsService} from \"./restrictions/restrictions.service\";\nimport {IFreeToPlayService} from \"./free-to-play/free-to-play.service.interface\";\nimport {FreeToPlayService} from \"./free-to-play/free-to-play.service\";\nimport {IThemeDefinition} from \"./theme/theme-definition.interface\";\nimport {IGnwpService} from \"./gnwp/gnwp.service.interface\";\nimport {IScriptLoaderService} from \"./scrip-loader/script-loader.service.interface\";\nimport {ScriptLoaderService} from \"./scrip-loader/script-loader.service\";\nimport {IAdminBannerService} from \"./admin-banner/admin-banner-service.interface\";\nimport {ISessionTimerService} from \"./session-timer/session-timer.service.interface\";\nimport {SessionTimerService} from \"./session-timer/session-timer.service\";\nimport {ICasinofiedAnalyticsService} from \"../../common/interfaces/casinofied-analytics-proxy.interface\";\nimport {IGeoLocationService} from \"./geo-location/geo-location.service.interface\";\nimport { ICrmService } from './crm/crm.service.interface';\nimport { CrmService } from './crm/crm.service';\nimport {ISpecificDialogsService} from './specific-dialogs/specific-dialogs.service.interface';\nimport {SpecificDialogsService} from './specific-dialogs/specific-dialogs.service';\nimport {ITippingHistoryService} from './tipping-history/tipping-history.service.interface';\nimport {TippingHistoryService} from './tipping-history/tipping-history.service';\nimport {LoyaltyService} from './loyalty-indicator/loyalty-indicator.service';\nimport {ILoyaltyService} from './loyalty-indicator/loyalty-indicator.service.interface';\nimport {StateOfResidenceIdentifierService} from \"./state-of-residence-identifier/state-of-residence-identifier.service\";\nimport {IStateOfResidenceIdentifier} from \"./state-of-residence-identifier/state-of-residence-identifier.interface\";\nimport {ILoginPopupService} from \"./login-popup/login-popup.service.interface\";\nimport {IOnboardingTourService} from './onboarding-tour/onboarding-tour.service.interface';\nimport {OnboardingTourService} from './onboarding-tour/onboarding-tour.service';\nimport {INyxService} from \"./nyx/nyx.service.interface\";\nimport {NyxService} from \"./nyx/nyx.service\";\nimport {IOnBoardingTooltipsService} from \"./tooltip/on-boarding-tooltip/on-boarding-tooltips.service.interface\";\nimport {OnBoardingTooltipsService} from \"./tooltip/on-boarding-tooltip/on-boarding-tooltips.service\";\nimport {PlayerMigrationService} from \"./player-migration/player-migration.service\";\nimport IPlayerMigration from \"../../common/interfaces/player-migration.interface\";\nimport {IToasterService} from \"./toaster/toaster.service.interface\";\nimport {ToasterService} from \"./toaster/toaster.service\";\nimport {IFeaturesToggleManagementService} from \"./features-toggle-management/features-toggle-management.service.interface\";\nimport {FeaturesToggleManagementService} from \"./features-toggle-management/features-toggle-management.service\";\nimport {ICrossBrandsService} from \"./cross-brands/cross-brands.service.interface\";\nimport {ILinksNavigationService} from \"./links-navigation/links-navigation.service.interface\";\nimport {LinksNavigationService} from \"./links-navigation/links-navigation.service\";\nimport {IMenuItemActionFactoryService} from \"./menu-item-action-factory/menu-item-action-factory.service.interface\";\nimport {\n IBottomNavigationBarService\n} from \"./bottom-navigation-bar/bottom-navigation-bar.service.interface\";\nimport {IGameRouteHandlerService} from \"./game-route-handler/game-route-handler.service.interface\";\nimport {FirebaseToasterService} from \"./toaster/firebase-toaster.service\";\nimport {ISpinnerService} from \"../../common/interfaces/spinner.service.interface\";\nimport { ITitanJackpotService } from './titan-jackpot/titan-jackpot.service.interface';\nimport { TitanJackpotService } from './titan-jackpot/titan-jackpot.service';\nimport {GamesThemeService} from './game-theme/games-theme.service';\nimport {IGamesThemeService} from './game-theme/games-theme.service.interface';\nimport {GamesVendorService} from './game-vendor/games-vendor.service';\nimport {IGamesVendorService} from './game-vendor/games-vendor.service.interface';\nimport {PlayerMessagesService} from \"./player-messages/player-messages.service\";\nimport {IPlayerMessagesService} from \"./player-messages/player-messages.service.interface\";\nimport {VideoSlidesService} from './video-slides/video-slides.service';\nimport {IVideoSlidesService} from './video-slides/video-slides.service.interface';\nimport {IWebVitalsService} from \"./web-vitals/web-vitals.service.interface\";\nimport {IGamblingSessionService} from \"./gambling-session/gambling-session.service.interface\";\nimport {GamblingSessionService} from \"./gambling-session/gambling-session.service\";\nimport {LazyAsync} from \"../../utils/lazy-async\";\nimport {ILazy} from \"../../utils/lazy.interface\";\nimport {IServiceProvider} from \"./service-factory.interface\";\nimport {ServicesGroupLoader} from \"../services-groups/services-group-loader\";\nimport {IThemeBoxes} from \"./theme/theme-boxes.interface\";\nimport {INotificationsService} from \"./notifications/notifications.service.interface\";\nimport {NotificationsService} from \"./notifications/notifications.service\";\nimport {VideoOnDemandPlayingService} from './video-live-stream/video-on-demand-playing.service';\nimport {VersionNumber} from \"../../utils/version-number\";\nimport {Nullable, NullableString} from \"../../common/types/nullable-types\";\nimport {HeaderService} from './header/header.service';\nimport {MenuItemActionFactoryService} from './menu-item-action-factory/menu-item-action-factory.service';\nimport {IGamesOpenSessionService} from \"./games-open-sessions/games-open-session.service.interface\";\nimport {IVideoService} from \"./video/video.service.interface\";\nimport {VideoService} from \"./video/video.service\";\nimport { IIdleRecommendationsService } from './idle-recommendations/idle-recommendations.service.interface';\nimport { IdleRecommendationsService } from './idle-recommendations/idle-recommendations.service';\n\n\n\n\nexport class ServiceFactory implements IServiceFactoryExtended, IServiceProvider {\n readonly splash: ISplashService;\n readonly logger: ILoggerService;\n readonly localStorage: IStorageService;\n readonly window: IWindowService;\n readonly dom: IDomService;\n readonly http: IHttpService;\n readonly sdkHooksProvider: SdkHooksProvider;\n readonly _groupsLoader: ServicesGroupLoader;\n constructor(sdkHooksProvider: SdkHooksProvider,\n logger: ILoggerService,\n localStorage: IStorageService,\n windowService: IWindowService,\n domService: IDomService,\n httpService: IHttpService,\n themeDefinition: IThemeDefinition,\n themeDefaultBoxes: IThemeBoxes,\n private _appStartupConfigs: ApplicationStartupConfigurations,\n private _languageData: ILanguageData) {\n\n this._groupsLoader = new ServicesGroupLoader();\n sdkHooksProvider.services = this;\n\n this.logger = logger;\n this.splash = new SplashService(() => {\n this.hybrid.displayWebView(200);\n });\n\n this.localStorage = localStorage;\n this.window = windowService;\n this.dom = domService;\n this.http = httpService;\n this._themeDefinition = themeDefinition;\n this._themeDefaultBoxes = themeDefaultBoxes;\n\n this._sdk.forceInit();\n this._configuration.forceInit();\n this._featuresToggleManagement.forceInit();\n this._userService.forceInit();\n this._spinner.forceInit();\n this._location.forceInit();\n this._routing.forceInit();\n this._segmentation.forceInit();\n\n this._deepLink.forceInit();\n\n this._cmsPages.forceInit();\n this._marketing.forceInit();\n\n this._siteMap.forceInit();\n this._games.forceInit();\n\n this._gamesFilter.forceInit();\n\n this._gameRouteHandler.forceInit();\n\n this._aiEngine.forceInit();\n this._aiNewEngine.forceInit();\n\n //this._lobbyGameInfoPreview.forceInit();\n\n this._crossBrands.forceInit();\n this._userMenu.forceInit();\n //this._externalLinks.forceInit();\n this._theme.forceInit();\n this._miniOrbit.forceInit();\n this._pwaManifest.forceInit();\n this._progressiveWebApp.forceInit();\n //this._drawerService.forceInit();\n this._controlCenter.forceInit();\n this._gamePopup.forceInit();\n this._homepageService.forceInit();\n this._jackpots.forceInit();\n this._sessionCooldown.forceInit();\n this._userGameOrientationService.forceInit();\n\n this._appLauncher.forceInit();\n this._actionHandler.forceInit();\n this._restrictionRuler.forceInit();\n this._casinofiedAnalytics.forceInit();\n this._limitsToaster.forceInit();\n this._exitPopup.forceInit();\n\n this._sideMenu.forceInit();\n this._regularToolTip.forceInit();\n this._gameSearch.forceInit();\n this._gameRunner.forceInit();\n this._freePlay.forceInit();\n this._adminBanner.forceInit();\n this._sessionTimer.forceInit();\n\n this._crm.forceInit();\n\n this._stateOfResidenceIdentifier.forceInit();\n this._walletProxy.forceInit();\n this._loginPopup.forceInit();\n this._omg.forceInit();\n this._dailyDeal.forceInit();\n this._onboardingTour.forceInit();\n this._onBoardingTooltip.forceInit();\n\n this._playerMigration.forceInit();\n this._toaster.forceInit();\n this._firebaseToaster.forceInit();\n this._cookies.forceInit();\n if(this.configuration.servicesConfigs.GeoLocation.enable) {\n this._geoLocation.forceInit();\n }\n\n this._gamblingSession.forceInit();\n\n this.sdk.fireOrbitInitComplete();\n\n this._idleRecommendations.forceInit();\n\n setTimeout(() => this._forceUpgradeHybridOnIos());\n }\n\n //TODO - this should be removed when we are sure that there are no more users with older version\n private _forceUpgradeHybridOnIos(): void {\n\n if(!(this.device.os.isIOS && this.device.hybrid.isHybrid)) {\n return;\n }\n\n if(this.miniOrbit.isEnabled) {\n return;\n }\n\n const currentHybridVersion = this.hybrid.getAppVersion();\n if(!currentHybridVersion) {\n return;\n }\n\n let expectedHybridVersion: Nullable = null;\n let appStoreUrl: NullableString = null;\n\n if(this.sdk.getBrandID() === 81) { //888 sweden\n expectedHybridVersion = new VersionNumber(2, 8, 3971451701);\n appStoreUrl = 'https://apps.apple.com/se/app/888-casino-spela-online/id1436816261';\n } else if(this.sdk.getBrandID() === 92) { //MrGreen sweden\n expectedHybridVersion = new VersionNumber(2, 8, 3971451702);\n appStoreUrl = 'https://apps.apple.com/se/app/mr-green-casino-blackjack/id1664477817';\n }\n\n if(!expectedHybridVersion) {\n return;\n }\n\n if(currentHybridVersion.isSmallerThan(expectedHybridVersion)) {\n this.analytics.sendTechnicalEvent('UpgradeIosVersion', 'popupShow', currentHybridVersion.toString())\n this.dialog.showSimpleTextModal({\n title: 'Vi har uppgraderat vår app',\n text: 'Klicka nedan för att hämta den senaste versionen och logga in',\n hideCloseButton: true,\n disableFullscreenMobile: false,\n buttons: [\n {\n text: 'Uppdatera app',\n buttonPreset: this.sdk.getBrandID() === 92 ? 'special' : 'primary',\n onClick: async () => {\n this.analytics.sendTechnicalEvent('UpgradeIosVersion', 'buttonClick', currentHybridVersion.toString())\n this.hybrid.openExternalLink(appStoreUrl);\n return DialogButtonClickHandleResultEnum.KeepDialogOpen;\n }\n }\n ]\n })\n }\n\n }\n\n getServiceByName(name: string): unknown | Promise {\n let serviceInstance: unknown = this[`_${name}`];\n if(!serviceInstance) {\n serviceInstance = this[name];\n }\n\n if(serviceInstance) {\n if((serviceInstance as ILazy).isLazy) {\n return (serviceInstance as ILazy).tryGetResolvedValue();\n } else {\n return serviceInstance;\n }\n }\n\n throw new Error(`tryGetResolvedAsyncService called with an invalid service name: ${name}`);\n\n }\n\n private _externalLinks = new LazyAsync(async () => {\n const {ExternalLinksService} = await import(/* webpackChunkName: \"service-external-links\" */ './external-links/external-links.service');\n return new ExternalLinksService(this);\n });\n public get externalLinks(): Promise {\n return this._externalLinks.value;\n }\n\n private _userMenu = new LazyAsync(async () => {\n const {UserMenuService} = await import(/*webpackChunkName: \"service-user-menu\"*/ \"./user-menu/user-menu.service\");\n return new UserMenuService(this, this.menuItemActionFactory);\n });\n public get userMenu(): Promise {\n return this._userMenu.value;\n }\n\n private _crossBrands = new Lazy(() => new CrossBrandsService(this));\n public get crossBrands(): ICrossBrandsService {\n return this._crossBrands.value;\n }\n\n private _verticalGamesList = new LazyAsync(async () => {\n const {VerticalGamesListService} = await import(/*webpackChunkName: \"service-vertical-games-list\" */ './vertical-games-list/vertical-games-list.service');\n return new VerticalGamesListService(this);\n });\n public get verticalGamesList(): Promise {\n return this._verticalGamesList.value;\n }\n\n private _lobbyGameInfoPreview = new LazyAsync(async () => {\n const {LobbyGameInfoPreviewService} = await this._groupsLoader.loadGroup5();\n return new LobbyGameInfoPreviewService(this);\n });\n public get lobbyGameInfoPreview(): Promise {\n return this._lobbyGameInfoPreview.value;\n }\n\n private _gamePreviewFeaturesSelector = new LazyAsync(async () => {\n const {GamePreviewFeaturesSelectorService} = await this._groupsLoader.loadGroup5();\n return new GamePreviewFeaturesSelectorService(this);\n });\n get gamePreviewFeaturesSelector(): Promise {\n return this._gamePreviewFeaturesSelector.value;\n }\n\n private _aiEngine = new Lazy(() => new AiEngineService(this));\n public get aiEngine(): IAiEngineService {\n return this._aiEngine.value;\n }\n\n private _aiNewEngine = new Lazy(() => new AiNewGamesEngineService(this));\n public get aiNewEngine(): IAiNewGamesEngineService {\n return this._aiNewEngine.value;\n }\n\n private _deepLink = new LazyAsync(async () => {\n const {DeepLinkService} = await this._groupsLoader.loadGroup3();\n return new DeepLinkService(this);\n });\n public get deepLink(): Promise {\n return this._deepLink.value;\n }\n\n private _gameRouteHandler = new Lazy(() => new GameRouteHandlerService(this));\n public get gameRouteHandler(): IGameRouteHandlerService {\n return this._gameRouteHandler.value;\n }\n\n private _gamesFilter = new Lazy(() => new GamesFilterService(this));\n public get gamesFilter(): IGamesFilterService {\n return this._gamesFilter.value;\n }\n\n private _becauseYouPlayed = new Lazy(() => new BecauseYouPlayedService(this));\n public get becauseYouPlayed(): IBecauseYouPlayedService {\n return this._becauseYouPlayed.value;\n }\n\n private _games = new Lazy(() => new GamesService(this));\n public get games(): IGamesService {\n return this._games.value;\n }\n\n private _siteMap = new LazyAsync(async () => {\n const {SiteMapService} = await this._groupsLoader.loadGroup4();\n return new SiteMapService(this);\n });\n public get siteMap(): Promise {\n return this._siteMap.value;\n }\n\n private _marketing = new LazyAsync(async () => {\n const {MarketingService} = await this._groupsLoader.loadGroup4();\n return new MarketingService(this);\n });\n public get marketing(): Promise {\n return this._marketing.value;\n }\n\n private _cmsPages = new LazyAsync(async () => {\n const {CmsPagesService} = await this._groupsLoader.loadGroup1();\n return new CmsPagesService(this);\n });\n public get cmsPages(): Promise {\n return this._cmsPages.value;\n }\n\n private _configuration = new Lazy(() => new ConfigurationsService(this, this._appStartupConfigs));\n public get configuration(): IConfigurationService {\n return this._configuration.value;\n }\n\n private _spinner = new Lazy(() => new SpinnerService(this));\n public get spinner(): ISpinnerService {\n return this._spinner.value;\n }\n\n private _webVitals = new LazyAsync(async () => {\n const {WebVitalsService} = await import(/* webpackChunkName: \"service-web-vitals\" */ './web-vitals/web-vitals.service');\n return new WebVitalsService(this);\n });\n public get webVitals(): Promise {\n return this._webVitals.value;\n }\n\n private _location = new Lazy(() => new LocationService(window, this.localStorage, (action: string, label?: string, value?: any) => this.analytics.sendTechnicalEvent(action, label, value)));\n public get location(): ILocationService {\n return this._location.value;\n }\n\n private _routing = new Lazy(() => new RoutingService(this));\n public get routing(): IRoutingService {\n return this._routing.value;\n }\n\n private _regulation = new Lazy(() => new RegulationService(this));\n public get regulation(): IRegulationService {\n return this._regulation.value;\n }\n\n private _segmentation = new Lazy(() => new SegmentationAggregatorService(this));\n public get segmentation(): ISegmentationAggregatorService {\n return this._segmentation.value;\n }\n\n private _liveTableFeeds = new Lazy(() => new LiveTableFeedsService(this));\n public get liveTableFeeds(): ILiveTableFeedsService {\n return this._liveTableFeeds.value;\n }\n\n private _translation = new Lazy(() => new TranslationService(this));\n public get translation(): ITranslationService {\n return this._translation.value;\n }\n\n private _currencyService = new Lazy(() => new CurrencyService(this));\n\n public get currency(): ICurrencyService {\n return this._currencyService.value;\n }\n\n private _analyticsService = new Lazy(() => new AnalyticsService(this));\n\n public get analytics(): IAnalyticsService {\n return this._analyticsService.value;\n }\n\n private _analyticsDataLayerService = new LazyAsync(async () => {\n const {AnalyticsDataLayerService} = await import(/*webpackChunkName: \"service-analytics-data-layer\" */ './analytics/analytics-data-layer.service');\n return new AnalyticsDataLayerService(this);\n });\n\n public get analyticsDataLayer(): Promise {\n return this._analyticsDataLayerService.value;\n }\n\n private _userService = new Lazy(() => new UserService(this));\n\n get user(): IUserService {\n return this._userService.value;\n }\n\n\n private _homepageService = new Lazy(() => new HomepageService(this));\n\n get homepage(): IHomepageService {\n return this._homepageService.value;\n }\n\n private _userGameOrientationService = new Lazy(() => new UserGameOrientationService(this));\n\n get userGameOrientation(): IUserGameOrientationService {\n return this._userGameOrientationService.value;\n }\n\n private _cmsApi = new LazyAsync(async () => {\n const {CmsApiService} = await this._groupsLoader.loadGroup1();\n return new CmsApiService(this);\n });\n get cmsApi(): Promise {\n return this._cmsApi.value;\n }\n\n private _cmsBanners = new LazyAsync(async () => {\n const {CmsBannersService} = await this._groupsLoader.loadGroup1();\n return new CmsBannersService(this);\n });\n get cmsBanners(): Promise {\n return this._cmsBanners.value;\n }\n\n private _launcher = new Lazy(() => new LauncherService(this));\n get launcher(): ILauncherService {\n return this._launcher.value;\n }\n\n private _clientDevice = new LazyAsync(async () => {\n const {ClientDeviceService} = await import(/*webpackChunkName: \"service-client-device\" */ './client-device/client-device.service');\n return new ClientDeviceService(this);\n });\n get clientDevice(): Promise {\n return this._clientDevice.value;\n }\n\n private _device = new Lazy(() => new DeviceService(this));\n get device(): IDeviceService {\n return this._device.value;\n }\n\n private _deepLinkParser = new LazyAsync(async () => {\n const {DeepLinkParserService} = await this._groupsLoader.loadGroup3();\n return new DeepLinkParserService(this);\n });\n get deepLinkParser(): Promise {\n return this._deepLinkParser.value;\n }\n\n private _deepLinkActionsFactory = new LazyAsync(async () => {\n const {DeepLinkActionsFactoryService} = await this._groupsLoader.loadGroup3();\n return new DeepLinkActionsFactoryService(this);\n });\n get deepLinkActionsFactory(): Promise {\n return this._deepLinkActionsFactory.value;\n }\n\n private _sdk: Lazy = new Lazy(() => new SdkService(this));\n get sdk(): ISdkService {\n return this._sdk.value;\n }\n\n private _arenas = new Lazy(() => new ArenasService(this));\n get arenas(): IArenasService {\n return this._arenas.value;\n }\n\n private _language = new Lazy(() => new LanguageService(this._languageData, this));\n get language(): ILanguageService {\n return this._language.value;\n }\n\n private _sideMenu = new LazyAsync(async () => {\n const {SideMenuService} = await import(/* webpackChunkName: \"service-side-menu\" */ './side-menu/side-menu.service');\n\n return new SideMenuService(this, this.menuItemActionFactory);\n });\n get sideMenu(): Promise {\n return this._sideMenu.value;\n }\n\n private _gameSearch = new LazyAsync(async () => {\n const {GameSearchService} = await import(/* webpackChunkName: \"service-game-search\" */ './game-search/game-search.service')\n return new GameSearchService(this, this.menuItemActionFactory);\n });\n get gameSearch(): Promise {\n return this._gameSearch.value;\n }\n\n private _gamePopup = new LazyAsync(async () => {\n const {GamePopupService} = await import(/* webpackChunkName: \"service-game-popup\"*/ './game-popup/game-popup.service');\n return new GamePopupService(this);\n });\n get gamePopup(): Promise {\n return this._gamePopup.value;\n }\n\n\n private _cmsSegmentation = new LazyAsync(async () => {\n const {CmsSegmentationService} = await this._groupsLoader.loadGroup1();\n return new CmsSegmentationService(this);\n });\n get cmsSegmentation(): Promise {\n return this._cmsSegmentation.value;\n }\n\n private _stickyHandlerFactory = new Lazy(() => new StickyHandlerFactoryService(this));\n get stickyHandlerFactory(): IStickyHandlerFactoryService {\n return this._stickyHandlerFactory.value;\n }\n\n private _exitPopup = new LazyAsync(async () => {\n const {ExitPopupService} = await this._groupsLoader.loadGroup2();\n return new ExitPopupService(this);\n });\n get exitPopup(): Promise {\n return this._exitPopup.value;\n }\n\n private _routingConfiguration = new Lazy(() => new RoutingConfigurationService(this));\n get routingConfiguration(): IRoutingConfigurationService {\n return this._routingConfiguration.value;\n }\n\n private _overlay = new Lazy(() => new OverlayService(this));\n get overlay(): IOverlayService {\n return this._overlay.value;\n }\n\n private _time = new Lazy(() => new TimeService(this));\n get time(): ITimeService {\n return this._time.value;\n }\n\n private _abTestingFeatureDataProvider = new Lazy(() => new AbTestingFeatureDataProviderService(this));\n get abTestingFeatureDataProvider(): IAbTestingFeatureDataProviderService {\n return this._abTestingFeatureDataProvider.value;\n }\n\n private _abTestingAiSort = new Lazy(() => new AbTestingAiSortGamesListsService(this));\n\n get abTestingAiSortGamesLists(): IAbTestingAiSortGamesListsService {\n return this._abTestingAiSort.value;\n }\n\n\n private readonly _themeDefinition: IThemeDefinition ;\n private readonly _themeDefaultBoxes: IThemeBoxes;\n private _theme = new Lazy(() => new ThemeService(this, this._themeDefinition, this._themeDefaultBoxes));\n get theme(): IThemeService {\n return this._theme.value;\n }\n\n private _miniOrbit = new Lazy(() => new MiniOrbitService(this));\n public get miniOrbit(): IMiniOrbitService {\n return this._miniOrbit.value;\n }\n\n private _notifications = new Lazy(() => new NotificationsService(this));\n public get notifications(): INotificationsService {\n return this._notifications.value;\n }\n\n private _dialog = new Lazy(() => new DialogService(this));\n public get dialog(): IDialogService {\n return this._dialog.value;\n }\n\n private _header = new Lazy(() => new HeaderService(this, this.menuItemActionFactory));\n public get header(): IHeaderService {\n return this._header.value;\n }\n\n private _pwaManifest = new Lazy(() => new PWAManifestService(this));\n public get manifest(): IPWAManifestService {\n return this._pwaManifest.value;\n }\n\n private _progressiveWebApp = new LazyAsync(async () => {\n const {ProgressiveWebAppService} = await import(/* webpackChunkName: \"service-progressive-web-app\" */ './progressive-web-app/progressive-web-app.service');\n return new ProgressiveWebAppService(this);\n });\n public get progressiveWebApp(): Promise {\n return this._progressiveWebApp.value;\n }\n\n private _miniOrbitCommunicationAdapterFactory = new Lazy(() => new MiniOrbitCommunicationAdapterFactoryService(this));\n public get miniOrbitCommunicationAdapterFactory(): IMiniOrbitCommunicationAdapterFactoryService {\n return this._miniOrbitCommunicationAdapterFactory.value;\n }\n\n\n //import {DrawerService} from './drawer/drawer.service';\n\n private _drawer = new LazyAsync(async () => {\n const {DrawerService} = await import(/* webpackChunkName: \"service-drawer\" */ './drawer/drawer.service');\n return new DrawerService(this)\n });\n\n public get drawer(): Promise {\n return this._drawer.value;\n }\n\n private _dailyDeal = new LazyAsync(async () => {\n const {DailyDealService} = await import(/* webpackChunkName: \"service-daily-deal\" */ './daily-deal/daily-deal.service')\n return new DailyDealService(this);\n });\n public get dailyDeal(): Promise {\n return this._dailyDeal.value;\n }\n\n private _omg = new LazyAsync(async () => {\n const {OmgService} = await import(/* webpackChunkName: \"service-omg\" */ './omg-proxy/omg.service');\n return new OmgService(this);\n });\n public get omg(): Promise {\n return this._omg.value;\n }\n\n private _jackpots = new LazyAsync(async () => {\n const {JackpotsService} = await import(/* webpackChunkName: \"service-jackpots\" */ './jackpots/jackpots.service');\n return new JackpotsService(this);\n });\n public get jackpots(): Promise {\n return this._jackpots.value;\n }\n\n\n private _walletProxy = new Lazy(() => new WalletProxyService(this));\n public get walletProxy(): IWalletProxyService {\n return this._walletProxy.value;\n }\n\n private _controlCenter = new Lazy(() => new ControlCenterService(this));\n public get controlCenter(): IControlCenterService {\n return this._controlCenter.value;\n }\n\n private _tools = new Lazy(() => new ToolsService(this));\n public get tools(): IToolsService {\n return this._tools.value;\n }\n\n private _sessionCooldown = new Lazy(() => new SessionCooldownService(this));\n public get sessionCooldown(): ISessionCooldownService {\n return this._sessionCooldown.value;\n }\n\n private _mediaQuery = new Lazy(() => new MediaQueryService(this));\n public get mediaQuery(): IMediaQueryService {\n return this._mediaQuery.value;\n }\n\n private _api = new Lazy(() => new ApiService(this));\n public get api(): ApiService {\n return this._api.value;\n }\n\n private _orbitComponentToSdkAdapter = new Lazy(() => new OrbitComponentToSdkAdapterService(this));\n\n public get orbitComponentInsideSdkProvider(): IOrbitComponentsInsideSdkProvider {\n return this._orbitComponentToSdkAdapter.value;\n }\n\n private _messageBroker = new Lazy(() => new MessageBrokerService(this));\n public get messageBroker(): IMessageBrokerService {\n return this._messageBroker.value;\n }\n\n private _appLauncher = new LazyAsync(async () => {\n const {CasinofiedAppLauncherService} = await import(/* webpackChunkName: \"service-casinofied-app-launcher\"*/ './casinofied/app-launcher/casinofied-app-launcher.service');\n return new CasinofiedAppLauncherService(this);\n\n });\n public get appLauncher(): Promise {\n return this._appLauncher.value;\n }\n\n // No need to expose this service as public member. It is not consumed by any other service or component\n private _actionHandler = new Lazy(() => new CasinofiedActionHandlerService(this));\n\n private _floatingBubbles = new Lazy(() => new FloatingBubblesService(this));\n public get floatingBubbles(): IFloatingBubblesService {\n return this._floatingBubbles.value;\n }\n\n private _restrictionRuler = new Lazy(() => new RestrictionRulerService(this));\n public get restrictionRuler(): IRestrictionRulerService {\n return this._restrictionRuler.value;\n }\n\n private _redTiger = new LazyAsync(async () => {\n const { RedTigerService } = await import(/*webpackChunkName: \"service-red-tiger\"*/ './red-tiger/red-tiger.service');\n return new RedTigerService(this);\n });\n public get redTiger(): Promise {\n return this._redTiger.value;\n }\n\n private _casinofiedAnalytics = new Lazy(() => new CasinofiedAnalyticsService(this));\n public get casinofiedAnalytics(): ICasinofiedAnalyticsService {\n return this._casinofiedAnalytics.value;\n }\n\n private _liveStreamPlaying = new Lazy(() => new LiveStreamPlayingService(this));\n public get liveStreamPlaying(): IVideoPlayingService {\n return this._liveStreamPlaying.value;\n }\n\n private _staticVideoPlaying = new Lazy(() => new StaticVideoPlayingService(this));\n public get staticVideoPlaying(): IVideoPlayingService {\n return this._staticVideoPlaying.value;\n }\n\n private _videoOnDemandPlaying = new Lazy(() => new VideoOnDemandPlayingService(this));\n public get videoOnDemandPlaying(): IVideoPlayingService {\n return this._videoOnDemandPlaying.value;\n }\n\n private _cashier: Lazy = new Lazy(() => new CashierService(this));\n get cashier(): ICashierService {\n return this._cashier.value;\n }\n\n private _playerOfferings: Lazy = new Lazy(() => new PlayerOfferingsService(this));\n get playerOfferings(): IPlayerOfferingsService {\n return this._playerOfferings.value;\n }\n\n private _qaEnvironmentPopUpBlockerService = new Lazy(() => new QAEnvironmentPopUpBlockerService(this));\n public get qaEnvironmentPopUpBlockerService(): IQAEnvironmentPopUpBlockerService {\n return this._qaEnvironmentPopUpBlockerService.value;\n }\n\n private _limitsToaster = new Lazy(() => new LimitsToasterService(this));\n public get limitsToaster(): LimitsToasterService {\n return this._limitsToaster.value;\n }\n\n private _burnoutService = new Lazy(() => new PlayerBurnoutService(this));\n public get burnoutService(): IPlayerBurnoutService {\n return this._burnoutService.value;\n }\n\n private _pixiAppService = new Lazy(() => new PixiAppService(this));\n public get pixiApp(): IPixiAppService {\n return this._pixiAppService.value;\n }\n\n private _gameAnimatedIconsManagerService = new Lazy(() => new GameAnimatedIconsManagerService(this));\n public get gameAnimatedIconsManager(): IGameAnimatedIconsManagerService {\n return this._gameAnimatedIconsManagerService.value;\n }\n\n private _webGlContextManagerService = new Lazy(() => new WebGLContextManagerService(this));\n public get webGlContextManager(): IWebGLContextManagerService {\n return this._webGlContextManagerService.value;\n }\n\n private _regularToolTip = new Lazy(() => new RegularTooltipsService(this));\n public get regularTooltips(): IRegularTooltipsService {\n return this._regularToolTip.value;\n }\n\n private _onBoardingTooltip = new Lazy(() => new OnBoardingTooltipsService(this));\n public get onBoardingTooltips(): IOnBoardingTooltipsService {\n return this._onBoardingTooltip.value;\n }\n\n\n\n private _gamingHistory = new Lazy(() => new GamingHistoryService(this));\n public get gamingHistory(): IGamingHistoryService {\n return this._gamingHistory.value;\n }\n\n private _tippingHistory = new Lazy(() => new TippingHistoryService(this));\n public get tippingHistory(): ITippingHistoryService {\n return this._tippingHistory.value;\n }\n\n private _companies = new LazyAsync(async () => {\n const {CompaniesService} = await import(/* webpackChunkName: \"service-companies\"*/ './companies/companies.service');\n return new CompaniesService(this)\n });\n public get companies(): Promise {\n return this._companies.value;\n }\n\n private _freeToPlayService = new Lazy(() => new FreeToPlayService(this));\n public get freeToPlay(): IFreeToPlayService {\n return this._freeToPlayService.value;\n }\n\n private _gameRunner = new LazyAsync(async () => {\n const {GameRunnerService} = await import(/* webpackChunkName: \"service-game-runner\" */ './game-runner/game-runner.service');\n return new GameRunnerService(this);\n });\n public get gameRunner(): Promise {\n return this._gameRunner.value;\n }\n\n private _hybrid = new Lazy(() => new HybridService(this));\n public get hybrid(): IOrbitHybridService {\n return this._hybrid.value;\n }\n\n private _sessionStorage = new Lazy(() => new SessionStorageService(this.logger));\n public get sessionStorage(): IStorageService {\n return this._sessionStorage.value;\n }\n\n private _cookies = new Lazy(() => new CookiesService());\n public get cookies(): ICookiesService {\n return this._cookies.value;\n }\n\n private _freePlay = new Lazy(() => new FreePlayService(this));\n public get freePlay(): IFreePlayService {\n return this._freePlay.value;\n }\n\n private _restrictions = new Lazy(() => new RestrictionsService(this));\n public get restrictions(): IRestrictionsService {\n return this._restrictions.value;\n }\n\n private _gnwp = new LazyAsync(async () => {\n const {GnwpService} = await import(/*webpackChunkName: \"service-gnwp\" */ './gnwp/gnwp.service');\n return new GnwpService(this);\n });\n public get gnwp(): Promise {\n return this._gnwp.value;\n }\n\n private _scriptLoader = new Lazy(() => new ScriptLoaderService(this));\n public get scriptLoader(): IScriptLoaderService {\n return this._scriptLoader.value;\n }\n\n private _adminBanner = new LazyAsync(async () => {\n const {AdminBannerService} = await import(/*webpackChunkName: \"service-adm-banner\" */ './admin-banner/admin-banner.service');\n return new AdminBannerService(this);\n });\n get adminBanner(): Promise {\n return this._adminBanner.value;\n }\n\n private _sessionTimer = new Lazy(() => new SessionTimerService(this));\n get sessionTimer(): ISessionTimerService {\n return this._sessionTimer.value;\n }\n\n private _geoLocation = new LazyAsync(async () => {\n const {GeoLocationService} = await import(/*webpackChunkName: \"service-geolocation\" */ './geo-location/geo-location.service');\n return new GeoLocationService(this)\n });\n get geoLocation(): Promise {\n return this._geoLocation.value;\n }\n\n private _crm = new Lazy(() => new CrmService(this));\n get crm(): ICrmService {\n return this._crm.value;\n }\n\n private _specificDialogs = new Lazy(() => new SpecificDialogsService(this));\n get specificDialogs(): ISpecificDialogsService {\n return this._specificDialogs.value\n }\n\n private _stateOfResidenceIdentifier = new Lazy(() => new StateOfResidenceIdentifierService(this));\n get stateOfResidenceIdentifier(): IStateOfResidenceIdentifier {\n return this._stateOfResidenceIdentifier.value;\n }\n\n private _loyaltyIndicator = new Lazy(() => new LoyaltyService(this));\n get loyaltyIndicator(): ILoyaltyService {\n return this._loyaltyIndicator.value\n }\n\n private _loginPopup = new LazyAsync(async () => {\n const {LoginPopupService} = await this._groupsLoader.loadGroup2();\n return new LoginPopupService(this);\n });\n get loginPopup(): Promise {\n return this._loginPopup.value;\n }\n\n private _onboardingTour = new Lazy(() => new OnboardingTourService(this));\n get onboardingTour(): IOnboardingTourService {\n return this._onboardingTour.value;\n }\n\n private _nyx = new Lazy(() => new NyxService(this));\n get nyx(): INyxService {\n return this._nyx.value;\n }\n\n private _playerMigration = new Lazy(() => new PlayerMigrationService(this));\n get playerMigration(): IPlayerMigration {\n return this._playerMigration.value;\n }\n\n private _toaster = new Lazy(() => new ToasterService(this));\n get toaster(): IToasterService {\n return this._toaster.value;\n }\n\n private _idleRecommendations = new Lazy(() => new IdleRecommendationsService(this));\n get idleRecommendations(): IIdleRecommendationsService {\n return this._idleRecommendations.value;\n }\n\n private _featuresToggleManagement = new Lazy(() => new FeaturesToggleManagementService(this));\n get featuresToggleManagement(): IFeaturesToggleManagementService {\n return this._featuresToggleManagement.value;\n }\n\n private _linksNavigation = new Lazy(() => new LinksNavigationService(this));\n get linksNavigation(): ILinksNavigationService {\n return this._linksNavigation.value;\n }\n\n private _menuItemActionFactory = new Lazy(() => new MenuItemActionFactoryService(this));\n get menuItemActionFactory(): IMenuItemActionFactoryService {\n return this._menuItemActionFactory.value;\n }\n\n private _bottomNavigationBar = new LazyAsync(async () => {\n const {BottomNavigationBarService} = await import(/*webpackChunkName: \"service-bottom-nav-bar\"*/ \"./bottom-navigation-bar/bottom-navigation-bar.service\");\n return new BottomNavigationBarService(this, this.menuItemActionFactory);\n });\n get bottomNavigationBar(): Promise {\n return this._bottomNavigationBar.value;\n }\n\n private _titanJackpot = new Lazy(() => new TitanJackpotService(this))\n get titanJackpot(): ITitanJackpotService {\n return this._titanJackpot.value;\n }\n\n private _firebaseToaster = new Lazy(() => new FirebaseToasterService(this));\n\n private _gamesTheme = new Lazy(() => new GamesThemeService(this))\n get gamesTheme(): IGamesThemeService {\n return this._gamesTheme.value;\n }\n\n private _gamesVendor = new Lazy(() => new GamesVendorService(this))\n get gamesVendor(): IGamesVendorService {\n return this._gamesVendor.value;\n }\n\n private _playerMessages = new Lazy(() => new PlayerMessagesService(this))\n get playerMessages(): IPlayerMessagesService {\n return this._playerMessages.value;\n }\n private _videoSlides = new Lazy(() => new VideoSlidesService(this))\n get videoSlides(): IVideoSlidesService {\n return this._videoSlides.value;\n }\n\n\n private _gamblingSession = new Lazy(() => new GamblingSessionService(this))\n get gamblingSession(): IGamblingSessionService {\n return this._gamblingSession.value;\n }\n\n private _openSessions = new LazyAsync(async () => {\n const {GamesOpenSessionService} = await import(/*webpackChunkName: \"service-open-sessions\" */ \"./games-open-sessions/games-open-session.service\");\n return new GamesOpenSessionService(this);\n });\n\n get openSessions(): Promise {\n return this._openSessions.value;\n }\n\n private _video = new Lazy(() => new VideoService(this))\n get video(): IVideoService {\n return this._video.value;\n }\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n\nexport const LogoContainerBox = styledBox('LogoContainerBox');\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LogoImageBox = styledBox('LogoImageBox');","import React from \"react\";\nimport {Link} from \"../../raw-components/link/link\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {LogoContainerBox} from \"./boxes/logo-container/logo-container.box\";\nimport {LogoImageBox} from \"./boxes/logo-image/default-logo-icon/logo-image.box\";\n\nexport interface LogoBoxProps {\n isNavigation?: boolean,\n withAnalytics?: boolean,\n onClick?: React.MouseEventHandler\n}\n\nexport const LogoBox = observer(class LogoBox extends OrbitComponent {\n\n private _handleClick(e: React.MouseEvent) {\n\n if(this.props.withAnalytics) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", \"Logo\");\n }\n\n if(this.props.onClick) {\n this.props.onClick(e);\n }\n\n this.services.location.goHome();\n }\n\n private _getLogoImageURL() {\n return this.services.configuration.data.generalSettings.logoURL;\n }\n\n private _getLogoAlt(): string {\n let configOverride = this.services.configuration.data.generalSettings.logoAltOverride;\n return configOverride ? configOverride : `${this.services.theme.themeName.forClient} logo`;\n }\n\n\n render(): React.ReactNode {\n return (\n \n this._handleClick(e)}>\n \n \n \n );\n }\n});\n\n\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ProfilePictureBox = styledBox(\"ProfilePictureBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ProfileUserNameBox = styledBox(\"ProfileUserNameBox\");\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ProfilePictureImageBox = styledBox(\"ProfilePictureImageBox\");\n","import React from 'react';\nimport {OrbitComponentWithState} from \"../../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {Link} from \"../../raw-components/link/link\";\nimport {UserInfo} from '../../user-info/user-info.component';\nimport {observer} from \"mobx-react\";\nimport {CyClass} from '../../../../common/cy-classes';\nimport {ProfilePictureBox} from \"./boxes/profile-picture.box\";\nimport {ProfileUserNameBox} from \"./boxes/profile-user-name.box\";\nimport {ProfilePictureImageBox} from './boxes/profile-picture-image.box';\n\nexport interface ProfilePictureProps {\n marketingDl: string,\n}\n\nexport interface ProfilePictureState {\n avatarState: string,\n}\n\nconst avatarState = {\n regular: 'regular',\n hover: 'hover',\n pressed: 'pressed',\n};\n\nexport const ProfilePicture = observer(\n class ProfilePicture extends OrbitComponentWithState {\n state = {\n avatarState: 'regular',\n };\n\n render() {\n return (\n \n \n this._updateAvatarState(avatarState.hover)}\n onMouseLeave={() => this._updateAvatarState(avatarState.regular)}\n onMouseDown={() => this._updateAvatarState(avatarState.pressed)}\n onMouseUp={() => this._updateAvatarState(avatarState.regular)}\n />\n \n {this._renderUserName()}\n \n )\n }\n\n private _getAvatarUrl() {\n const config = this.services.configuration.data.generalSettings.avatarUrl;\n return config.sideMenu[this.state.avatarState] || config.sideMenu[avatarState.regular]\n }\n\n private _updateAvatarState(newState: string) {\n this.setState({avatarState: newState || avatarState.regular});\n }\n\n private _renderUserName() {\n if (!this.services.user.isAuthorized)\n return null;\n\n return \n \n ;\n }\n\n private _openUserMenu = async () => {\n if (!this.services.user.isAuthorized) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", 'Avatar_Login');\n await this.services.user.openLogin( {dl: this.props.marketingDl});\n return;\n }\n\n const userMenu = await this.services.userMenu;\n\n if (!userMenu.isOpen) {\n userMenu.openMenu();\n return;\n }\n\n if (userMenu.isRewardsInfo) {\n userMenu.closeMenu();\n userMenu.openMenu();\n } else {\n userMenu.closeMenu();\n }\n }\n }\n);\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ProfileMessagesDividerBox = styledBox(\"ProfileMessagesDividerBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ProfileButtonsBox = styledBox(\"ProfileButtonsBox\");\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ProfileCashierButtonBox = styledBox(\"ProfileCashierButtonBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const ProfileCashierAddButtonBox = styledBox(\"ProfileCashierAddButtonBox\")\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ProfileWrapperBox = styledBox(\"ProfileWrapperBox\");\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {ProfilePicture} from \"./profile-picture/profile-picture.component\";\nimport {Button} from '../../basic-ui-components/button/base/button.component';\nimport {OmgIndicator} from \"../profile-box-messages-indicator/indicators/omg-indicator.component\";\nimport {FreePlayIndicatorComponent} from \"../profile-box-messages-indicator/indicators/freeplay-indicator.component\";\nimport {ProfileMessagesDividerBox} from \"./boxes/profile-messages-divider.box\";\nimport { BalanceValue } from '../balance-box/balance-value.component';\nimport {ProfileButtonsBox} from \"./boxes/profile-buttons.box\";\nimport {ProfileCashierButtonBox} from \"./boxes/profile-cashier-button/profile-cashier-button.box\";\nimport {ProfileCashierAddButtonBox} from \"./boxes/profile-cashier-button/profile-cashier-add-button/profile-cashier-add-button.box\";\nimport {ProfileWrapperBox} from \"./boxes/profile-wrapper.box\";\nimport {ProfileMessagesBox} from \"./boxes/profile-box-messages/profile-messages.box\"\nimport classNames from 'classnames';\nimport {CyClass} from '../../../common/cy-classes';\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\n\nconst MARKETING_DL = '19520';\n\nexport const ProfileBox = observer(class ProfileBox extends OrbitComponent<{}> {\n\n render() {\n\n return (\n \n \n \n {this._renderLogin()}\n {this._renderCashier()}\n \n {this._renderProfileBoxMessages()}\n \n );\n }\n\n private _renderProfileBoxMessages() {\n return (\n \n \n \n \n \n );\n }\n\n private _renderLogin() {\n\n if(this.services.user.isAuthorized) return null;\n\n return (\n
    \n {this.services.translation.translate(\"Login\")}\n
    \n );\n }\n\n private _renderCashier() {\n if (!this.services.user.isAuthorized) {\n return null;\n }\n\n const AddIcon = this.services.theme.currentTheme.icons.addIcon;\n return (\n \n \n \n \n \n \n );\n }\n\n private _openLogin = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", 'CTA_Login');\n await this.services.user.openLogin( {dl: MARKETING_DL});\n }\n\n private _openCashier = async () => {\n (await this.services.userMenu).closeMenu();\n\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", 'Open_Cashier');\n await this.services.cashier.openDeposit({\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.NavigationMenu,\n element: CHANNEL_ELEMENTS.plusButton\n }\n });\n\n }\n});\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {Link} from \"../../raw-components/link/link\";\nimport {Image} from \"../../raw-components/image/image\";\n\nexport const StoreButton = observer(class StoreButton extends OrbitComponent<{}> {\n render(): React.ReactNode {\n return (\n
    \n this._sendAnalytics()}>\n \n \n
    \n );\n }\n\n private _sendAnalytics() {\n if(this.services.device.os.isIOS) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"App\", \"Open_AppStore\");\n } else {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"App\", \"Open_GooglePlay\");\n }\n }\n\n private _getImageSource(): string {\n const config = this.services.configuration.data.sideMenu.store_button;\n if(config.imgSrc.includes('{lang}')) {\n return config.imgSrc.replace('{lang}', this.services.language.currentLanguage)\n }\n\n return config.imgSrcFallback;\n }\n});\n","import styled from \"styled-components\";\n\nexport const MenuLinksGroupsContainerBox = styled.section`\n display: flex;\n flex-direction: column;\n`;\n","import styled from \"styled-components\";\n\nexport const SideMenuContainerBox = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n`;\n","import styled from \"styled-components\";\nimport {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\n\nexport const MobileMenuItemContainerDefaultBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n align-content: center;\n margin: 0rem 1.2rem;\n background-color: ${({theme}) => theme.colors.background};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 0rem 1.6rem;\n }\n \n \n position: relative;\n margin-top: 1px;\n &:before {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n left: 0;\n width: 100%;\n\n box-sizing: content-box;\n height: 1px;\n background-color: ${({theme}) => theme.colors.backgroundDark};\n box-shadow: 0px 0.35px 0px 0px ${({theme}) => theme.colors.boxBorderContrast};\n margin-bottom: 1px;\n }\n\n &:first-child {\n margin-top: 0;\n &::before {\n display: none;\n }\n }\n\n`\n\nexport const MobileMenuItemContainerCasino777Box = styled(MobileMenuItemContainerDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 0 1rem;\n padding: 0 1rem;\n }\n &:before {\n display: none;\n }\n`;\n\nexport const MobileMenuItemContainerMrGreenBox = styled(MobileMenuItemContainerDefaultBox)`\n background-color: transparent;\n &:before {\n display: none;\n }\n`;\n\nexport const MobileMenuItemContainerBox = styledByTheme(MobileMenuItemContainerDefaultBox)\n .forCasino777(MobileMenuItemContainerCasino777Box)\n .forMrGreen(MobileMenuItemContainerMrGreenBox)\n .apply();","import styled from \"styled-components\";\nimport {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\n\nconst MobileMenuItemLinkDefaultBox = styled.div`\n display: flex;\n align-items: center;\n flex-grow: 1;\n padding: 1.5rem 0;\n ${({theme}) => theme.font.presets.regular}\n\n font-size: 1.5rem;\n font-weight: 400;\n line-height: 1;\n color: ${props => props.theme.colors.textLight};\n background-color: ${props => props.theme.colors.background};\n`;\n\nconst MobileMenuItemLinkCasino777Box = styled(MobileMenuItemLinkDefaultBox)`\n color: ${props => props.theme.colors.text};\n ${({theme}) => theme.font.presets.body}\n`;\n\nconst MobileMenuItemLinkCasinoMrGreenBox = styled(MobileMenuItemLinkDefaultBox)`\n background-color: transparent;\n`;\n\nexport const MobileMenuItemLinkBox = styledByTheme(MobileMenuItemLinkDefaultBox)\n .forCasino777(MobileMenuItemLinkCasino777Box)\n .forMrGreen(MobileMenuItemLinkCasinoMrGreenBox)\n .apply();\n","import React from \"react\";\nimport {MobileMenuItemContainerBox} from \"../boxes/mobile-menu-item-container.box\";\nimport {MobileMenuItemLinkBox} from \"../boxes/mobile-menu-item-link.box\";\nimport {AppIdentifiers, AreaType} from \"@sparkware/uc-sdk-core\";\nimport { GenericSideMenuItemIconBox } from \"../../side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-icon.box\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface MobileHelpCenterMenuItemComponentProps extends ComponentServicesPick<'sideMenu'> {\n \n}\n\nexport const ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const _mobileHelpButtonHandler = async () => {\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\",'Header', 'Help');\n if(services.configuration.servicesConfigs.AppLauncher.apps.CR_HELP_CENTER.enabled) {\n await props.sideMenu.closeMobileMenu();\n } else {\n (await services.userMenu).closeMenu();\n }\n\n await (await services.appLauncher).openHelpCenter({\n businessCorrelationID: services.tools.getGuid(),\n channel: {\n area: AreaType.HamburgerMenu,\n element: AppIdentifiers.CRHelpCenter,\n source: AppIdentifiers.CasinoClient\n }\n });\n }\n\n const _renderText = () => {\n if (services.configuration.servicesConfigs.AppLauncher.apps.CR_HELP_CENTER.enabled) {\n return services.translation.translate(\"HELP_CENTER\")\n } else {\n return services.translation.translate(\"HELP\")\n }\n }\n\n const HelpIcon = services.theme.currentTheme.icons.helpCenterIcon;\n return (\n \n \n \n \n \n {_renderText()}\n \n \n );\n});\n\nexport const MobileHelpCenterMenuItemComponent = withServices(ComponentBody, ['sideMenu']);","import styled from \"styled-components\";\n\nexport const MobileLangSwitcherMenuItemSelectedLangBox = styled.span`\n display: block;\n margin: 0 0 0 auto;\n ${({theme}) => theme.font.presets.regular};\n font-weight: 300;\n font-size: 1.6rem;\n line-height: 1;\n text-transform: uppercase;\n color: ${props => props.theme.colors.textActive};\n\n`","import styled from \"styled-components\";\nimport {MobileMenuItemContainerBox} from \"../../boxes/mobile-menu-item-container.box\";\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const MobileLangSwitcherContainerBox = styled(MobileMenuItemContainerBox)`\n &::after {\n content: \"\";\n background-image: url(\"${props => props.theme.images.spriteSheet.toString()}\");\n background-position: -780px -654px;\n background-repeat: no-repeat;\n width: 1.5rem;\n height: 1.5rem;\n margin: 0 1rem;\n ${CssRule.For.RTL.build()} & {\n transform: scaleX(-1);\n }\n }\n \n \n`","import styled from \"styled-components\";\nimport {MobileMenuItemLinkBox} from \"./mobile-menu-item-link.box\";\n\nexport const MobileLanguageMenuItemBox = styled(MobileMenuItemLinkBox)`\n padding-left: 4.4rem;\n`","import classNames from \"classnames\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport React from \"react\";\nimport {MobileLangSwitcherMenuItemSelectedLangBox} from \"./boxes/mobile-lang-switcher-menu-item-selected-lang.box\";\nimport {MobileLangSwitcherContainerBox} from \"./boxes/mobile-lang-switcher-container.box\";\nimport {MobileLanguageMenuItemBox} from \"../boxes/mobile-language-menu-item.box\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface MobileLangSwitcherMenuItemComponentProps extends ComponentServicesPick<'sideMenu'> {\n\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n return (\n props.sideMenu.openMobileLanguageSwitcher()}>\n \n {services.translation.translate(\"LANGUAGES\")}\n \n \n {services.language.currentLanguage}\n \n \n );\n})\n\nexport const MobileLangSwitcherMenuItemComponent = withServices(ComponentBody, ['sideMenu']);","import styled from \"styled-components\";\nimport {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\n\nconst SideMenuHorizontalLineDefaultBox = styled.div`\n width: 100%;\n height: 2px;\n margin-top: 2rem;\n margin-bottom: 3.8rem;\n padding: 0 1rem;\n background-color: ${props => props.theme.colors.horizontalLineBackgroundColor};\n background-image: ${props => props.theme.colors.horizontalLineBackgroundImage};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow } {\n margin-bottom: 3rem;\n }\n \n`\n\n\nconst SideMenuHorizontalLineMrGreenBox = styled(SideMenuHorizontalLineDefaultBox)`\n margin-top: 0;\n`\n\nexport const SideMenuHorizontalLineBox = styledByTheme(SideMenuHorizontalLineDefaultBox)\n .forMrGreen(SideMenuHorizontalLineMrGreenBox)\n .apply();","import styled from \"styled-components\";\n\nexport const MobileMenuItemsContainerBox = styled.div`\n`;\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {Button} from '../../../../basic-ui-components/button/base/button.component';\n\nexport const StateSelectorButtonComponent = observer(class StateSelectorButtonComponent extends OrbitComponent {\n\n handleClick(){\n //this.services.analytics.sendAnalytics(\"Navigation\", \"Header\", \"State Selector\");\n this.services.stateOfResidenceIdentifier.displayStateSelectorPopup({\n forceDisplay: true\n });\n }\n\n render() {\n let icon;\n let currentState = this.services.stateOfResidenceIdentifier.getUserSelectedState();\n if (currentState) {\n icon = \n } else {\n icon = ;\n }\n\n return (\n \n {icon}\n \n );\n }\n});\n","import {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {MobileMenuItemContainerBox} from \"../boxes/mobile-menu-item-container.box\";\nimport {MobileMenuItemLinkBox} from \"../boxes/mobile-menu-item-link.box\";\nimport { GenericSideMenuItemIconBox } from \"../../side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-icon.box\";\nimport {\n StateSelectorButtonComponent\n} from \"../../header/top-header-right/state-selector-button/state-selector-button.component\";\n\nexport class MobileStateSelectorMenuItemComponent extends OrbitComponent {\n\n private _openStateSelectorPopup = () => {\n this.services.stateOfResidenceIdentifier.displayStateSelectorPopup({\n forceDisplay: true\n });\n }\n\n render() {\n const LocationIcon = this.services.theme.currentTheme.icons.locationIcon;\n return (\n \n \n \n \n \n {this.services.translation.translate(\"STATE_SELECTOR_MENU_ITEM\")}\n \n \n \n );\n }\n}","import styled from \"styled-components\";\n\nexport const RelatedSitesWrapperBox = styled.div<{headerHeight?: number;}>`\n height: ${({headerHeight}) => headerHeight ? (headerHeight + \"px\") : \"auto\"};\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n border-bottom: 1px solid ${({theme}) => theme.colors.boxBorder};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n height: auto;\n display: block;\n border-bottom: none;\n margin: 1rem 0;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const RelatedSiteLinkBox = styled.div`\n padding: 0 1rem;\n color: ${({theme}) => theme.colors.text};\n &:hover {\n color: ${({theme}) => theme.colors.textHover};\n }\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding: 1rem 1.9rem;\n color: ${({theme}) => theme.colors.textLight};\n text-decoration: none;\n border-radius: 5px;\n font-size: 1.5rem;\n line-height: 1.5rem;\n ${({theme}) => theme.font.presets.regular};\n }\n`;\n\nexport const RelatedSiteLink = styled.a`\n display: flex;\n align-items: center;\n color: ${({theme}) => theme.colors.text};\n &:hover {\n color: ${({theme}) => theme.colors.textHover};\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n color: ${({theme}) => theme.colors.textLight};\n }\n`;\n","import React from 'react';\nimport {IHeaderRelatedSite} from \"../../../../services/configurations/config-data-sections/header.configuration\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {RelatedSiteLink, RelatedSiteLinkBox} from \"./boxes/related-site-link.box\";\nimport {Link} from \"../../../raw-components/link/link\";\n\ninterface RelatedSiteComponentProps {\n config: IHeaderRelatedSite;\n}\nexport const RelatedSiteComponent: React.FC = observer((props) => {\n const services = useServices();\n const url = services.linksNavigation.getLinkUrl(props.config.linkId)\n const Icon = services.theme.currentTheme.icons.openExternal;\n return (\n \n {\n await services.linksNavigation.navigateLink({\n linkId: props.config.linkId\n });\n }}\n >\n {services.mediaQuery.lAndBelow ? : null}\n {props.config.text}\n \n \n );\n});","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {RelatedSitesWrapperBox} from \"./boxes/related-sites-wrapper.box\";\nimport {RelatedSiteComponent} from \"./related-site.component\";\n\ninterface RelatedSiteComponentProps {\n headerHeight?: number;\n}\n\nexport const RelatedSitesComponent: React.FC = observer((props) => {\n const services = useServices();\n let relatedSites = services.configuration.data.header.related_sites;\n if (Check.isEmpty(relatedSites)) {\n return null;\n }\n\n return (\n \n {relatedSites.map((relatedSiteConfig) => )}\n \n );\n});","import styled from \"styled-components\";\n\nexport const CrossBrandsItemsAboveSearchBox = styled.div<{totalItems: number}>`\n display: grid;\n grid-template-columns: repeat(${({totalItems}) => totalItems}, 1fr);\n grid-column-gap: 1.5rem;\n column-gap: 1.5rem;\n margin: 1rem 0 0;\n`;","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {CrossBrandsItemsAboveSearchBox} from \"./boxes/cross-brands-items-above-search.box\";\nimport {CyClass} from '../../../../common/cy-classes';\nimport {MenuItemKey} from \"../../../services/configurations/config-data-sections/generated-config-const\";\nimport classNames from \"classnames\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\nexport interface SideMenuItemsAboveSearchProps extends ComponentServicesPick<'sideMenu'>{\n menuItemKeys: MenuItemKey[];\n className?: string;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent {\n \n private menuItemKeyIsCrossBrand(k: MenuItemKey): k is \"sportCrossBrandMenuItem\" | \"pokerCrossBrandMenuItem\" {\n return k === \"sportCrossBrandMenuItem\" || k === \"pokerCrossBrandMenuItem\";\n }\n\n render() {\n const menuItems = this.props.menuItemKeys.filter(k => {\n return this.menuItemKeyIsCrossBrand(k);\n }).map(key => this.props.sideMenu.getCrossBrandAboveSearchItemRenderer(key))\n .filter(menuItem => menuItem.display);\n\n if (menuItems.length === 0) {\n return null;\n }\n\n return (\n \n {\n menuItems.map(menuItem => (\n \n {menuItem.renderMenuItem()}\n )\n )\n }\n \n )\n }\n}\n\nexport const CrossBrandsItemsAboveSearch = withServices(ComponentBody, ['sideMenu'])","import React from \"react\";\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from \"mobx-react\";\nimport {SideMenuItemsListBox} from \"../side-menu-rework/side-menu-items/boxes/side-menu-items-list.box\";\nimport {SideMenuLinksGroup} from \"../side-menu-rework/side-menu-links-group/side-menu-links-group.component\";\nimport {GameSearchComponent} from \"../game-search/game-search.component\";\nimport {StoreButton} from \"./store-button/store-button.component\";\nimport {InsideOrbitMenuContainerComponent} from \"../inside-orbit-menu-container/inside-orbit-menu-container.component\";\nimport {isInsideAutomation} from '../../../utils/automation-helpers';\nimport {MenuLinksGroupsContainerBox} from \"./boxes/menu-links-groups-container.box\";\nimport {SideMenuContainerBox} from \"./boxes/side-menu-container.box\";\nimport {CyClass} from '../../../common/cy-classes';\nimport {MobileHelpCenterMenuItemComponent} from \"./mobile-help-menu-item/mobile-help-center-menu-item.component\";\nimport {\n MobileLangSwitcherMenuItemComponent\n} from \"./mobile-lang-switcher-menu-item/mobile-lang-switcher-menu-item.component\";\nimport {SideMenuHorizontalLineBox} from \"./horizontal-ruler/side-menu-horizontal-line.box\";\nimport {MobileMenuItemsContainerBox} from \"./boxes/mobile-menu-items-container.box\";\nimport {\n MobileStateSelectorMenuItemComponent\n} from \"./mobile-state-selector-menu-item/mobile-state-selector-menu-item.component\";\nimport {RelatedSitesComponent} from \"../main-nav/boxes/related-sites/related-sites.component\";\nimport {MenuItemKey} from \"../../services/configurations/config-data-sections/generated-config-const\";\nimport {CrossBrandsItemsAboveSearch} from \"../side-menu-rework/side-menu-above-search-group/cross-brands-items-above-search.component\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface SideMenuProps extends ComponentServicesPick<'gameSearch'> {\n\n}\n\nconst ComponentBody = observer(class extends OrbitComponent {\n\n render() {\n const linkBlocks = this.services.configuration.data.sideMenu.menuLinksBlockOrder;\n const aboveSearchItems = this.services.configuration.data.sideMenu.crossBrandAboveSearch;\n\n return (\n \n { !Check.isEmpty(aboveSearchItems) ? \n \n : null }\n {this.services.device.isMobile ? : null}\n\n \n {linkBlocks.map(keys => this._renderSideMenuSection(...keys))}\n\n {this._renderMobileMenuElements()}\n \n \n );\n }\n\n /* Renders the QA button container for mobile only.Can't put it in header on mobile since it overlaps with 888logo on portrait mode */\n private _renderInsideOrbitMenuContainerMobile(): React.ReactNode {\n if (!this.services.device.isMobile) {\n return null;\n }\n if (isInsideAutomation()) {\n return null;\n }\n return \n\n }\n\n private _renderSideMenuSection(...keys: MenuItemKey[]): React.ReactNode {\n\n if (this.services.device.isMobile && this.props.gameSearch.isSearchBoxOpened) {\n return null;\n }\n\n return \n }\n\n private _renderMobileMenuElements(): React.ReactNode {\n if (!this.services.device.isMobile || this.props.gameSearch.isSearchBoxOpened) {\n return null;\n }\n\n return (\n \n {this._renderBottomMenuSection()}\n {this._renderRelatedSitesLinks()}\n {this._renderInsideOrbitMenuContainerMobile()}\n {this._renderStoreButton()}\n \n );\n }\n\n private _renderMobileStateSelector = () => {\n if (!this.services.stateOfResidenceIdentifier.shouldDisplayStateSelectorButton()) {\n return null;\n }\n return ;\n }\n\n private _renderBottomMenuSection(): React.ReactNode {\n // Section which contains: language switcher, help menu, state selector.\n const shouldDisplayHelpLink = this.services.configuration.data.sideMenu?.helpLinkMobile?.display;\n const shouldDisplayLanguageSwitcher = !this.services.language.languageSwitcher.isEmpty;\n const shouldDisplayStateSelector = this.services.stateOfResidenceIdentifier.isOneSiteEnabled();\n\n if (!shouldDisplayHelpLink && !shouldDisplayLanguageSwitcher && !shouldDisplayStateSelector) {\n return null;\n }\n\n return (\n \n {this._renderMobileHelp()}\n {this._renderMobileLangSwitcher()}\n {this._renderMobileStateSelector()}\n \n )\n }\n\n\n private _renderMobileHelp(): React.ReactElement {\n if (this.services.configuration.data.sideMenu.helpLinkMobile?.display) {\n return (\n \n );\n }\n return null;\n }\n\n private _renderMobileLangSwitcher(): React.ReactNode {\n if (this.services.language.languageSwitcher.isEmpty) {\n return null;\n }\n return (\n \n );\n }\n\n private _renderRelatedSitesLinks() {\n if (this.services.mediaQuery.lAndAbove) {\n return null;\n }\n\n return (\n \n );\n }\n\n private _renderStoreButton(): React.ReactNode {\n if (!this.services.configuration.data.sideMenu.store_button.display) {\n return null;\n }\n\n return (\n \n \n \n \n );\n }\n});\n\nexport const SideMenu = withServices(ComponentBody, ['gameSearch']);","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const LanguageSwitcherDropdownBox = styledBox(\"LanguageSwitcherDropdownBox\");\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.ul`\n width: 100%;\n margin: 0;\n padding: 0;\n list-style-type: none;\n`;\n\nconst PcBox = styled(DefaultBox)`\n display: flex;\n flex-wrap: wrap;\n`;\n\nconst MobileBox = styled(DefaultBox)`\n margin: 1rem 0;\n padding: 0.5rem 0;\n border-radius: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n`;\n\nexport const LanguageSwitcherListDefaultBox = styledByDevice(PcBox, MobileBox);\n\n","import {LanguageSwitcherListDefaultBox} from \"./language-switcher-section-list.default.box\";\n\nexport const LanguageSwitcherListBox = LanguageSwitcherListDefaultBox;\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.h4`\n margin: 0;\n font-size: 1.4rem;\n color: ${props => props.theme.colors.textLight};\n`;\n\nconst PcBox = styled(DefaultBox)`\n padding: 0.5rem 0;\n ${({theme}) => theme.font.presets.bold};\n`;\nconst MobileBox = styled(DefaultBox)`\n padding: 0;\n ${({theme}) => theme.font.presets.medium};\n`;\n\nexport const LanguageSwitcherTitleDefaultBox = styledByDevice(PcBox, MobileBox);\n","import {LanguageSwitcherTitleDefaultBox} from \"./language-switcher-section-title.default.box\";\n\nexport const LanguageSwitcherTitleBox = LanguageSwitcherTitleDefaultBox;\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.li`\n input[type=radio] {\n display: none;\n }\n`;\n\nconst PcBox = styled(DefaultBox)`\n width: 50%;\n margin: 0.2rem 0;\n`;\n\nconst MobileBox = styled(DefaultBox)`\n margin: 0 1rem;\n border-top: 1px solid ${props => props.theme.colors.boxBorderLight};\n border-bottom: 1px solid ${props => props.theme.colors.boxBorderDark};\n\n &:first-child {\n border-top: none;\n }\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\n\nexport const LanguageSwitcherListItemDefaultBox = styledByDevice(PcBox, MobileBox);\n","import {LanguageSwitcherListItemDefaultBox} from \"./language-switcher-section-list-item.default.box\";\n\nexport const LanguageSwitcherListItemBox = LanguageSwitcherListItemDefaultBox;\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LanguageSwitcherItemLabelBox = styledBox(\"LanguageSwitcherItemLabelBox\");\n","import styled, {css} from \"styled-components\";\nimport {styledByDevice} from \"../../../../../../../themes/architecture/styled-by-device\";\n\nexport interface LanguageSwitcherItemCheckboxProps {\n isChecked: boolean;\n}\n\nconst DefaultBox = styled.div``;\n\nconst PcBox = styled(DefaultBox)`\n display: none;\n`;\n\nconst MobileBox = styled(DefaultBox)`\n width: 25px;\n height: 25px;\n margin: 0 1rem 0 0;\n background-color: ${props => props.theme.colors.background};\n border-radius: 50%;\n\n ${props => props.isChecked && css`\n background-image: url(${props => props.theme.images.spriteSheet.toString()});\n background-position: -394px -521px;\n `}\n`;\n\nexport const LanguageSwitcherItemCheckboxDefaultBox = styledByDevice(PcBox, MobileBox);\n","import {LanguageSwitcherItemCheckboxDefaultBox} from \"./language-switcher-item-checkbox.default.box\";\n\nexport const LanguageSwitcherItemCheckboxBox = LanguageSwitcherItemCheckboxDefaultBox;\n","import React from 'react';\nimport {Link} from '../../raw-components/link/link';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {ILanguageSwitcherItem} from '../../../services/language/language-switcher/language-switcher-item.interface';\nimport {LanguageSwitcherSection} from '../../../services/language/language-switcher/language-switcher-section';\nimport {LanguageSwitcherListBox} from \"./boxes/section-list/language-switcher-section-list.box\";\nimport {LanguageSwitcherTitleBox} from \"./boxes/section-title/language-switcher-section-title.box\";\nimport {LanguageSwitcherListItemBox} from \"./boxes/section-list/section-list-item/language-switcher-section-list-item.box\";\nimport {LanguageSwitcherItemLabelBox} from \"./boxes/section-list/section-list-item/section-list-item-label/language-switcher-item-label.box\";\nimport {LanguageSwitcherItemCheckboxBox} from \"./boxes/section-list/section-list-item/section-list-item-checkbox/language-switcher-item-checkbox.box\";\n\nexport interface LanguageMenuComponentProps {\n section: LanguageSwitcherSection;\n}\n\nexport const LanguageSwitcherSectionComponent = observer(\n class LanguageSwitcherSectionComponent extends OrbitComponent {\n\n private _selectItem = (item: ILanguageSwitcherItem) => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Lang_Switcher\", item.title);\n\n item.makeCurrent();\n };\n\n private _renderOneItem(item: ILanguageSwitcherItem) {\n\n let htmlId = item.title.toLowerCase() + '-lang';\n return (\n this._selectItem(item)} className=\"cy-language-switcher-list\">\n \n \n \n {item.url ? {item.title}\n : {item.title}}\n \n \n );\n }\n\n render() {\n\n if(this.props.section.items.length === 0) {\n return null;\n }\n\n return (\n <>\n {this.props.section.title}\n \n {this.props.section.items.map(item => this._renderOneItem(item))}\n \n \n );\n }\n }\n);\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {LanguageSwitcherSection} from '../../services/language/language-switcher/language-switcher-section';\nimport {LanguageSwitcherDropdownBox} from \"./boxes/language-switcher-dropdown.box\";\nimport {LanguageSwitcherSectionComponent} from './language-switcher-section/language-switcher-section.component';\nimport {CyClass} from '../../../common/cy-classes';\nimport {DividerBox} from '../../basic-ui-components/layout/divider/divider.box';\n\nexport interface ILanguageSwitcherDropdownProps {\n isOpen: boolean;\n}\n\nexport const LanguageSwitcherDropdownComponent = observer(\n class LanguageSwitcherDropdownComponent extends OrbitComponent {\n\n private _renderSection(section: LanguageSwitcherSection) {\n\n if(section.items.length === 0) {\n return null;\n }\n\n return ;\n }\n\n render() {\n\n let languageSwitcher = this.services.language.languageSwitcher;\n\n if (languageSwitcher.isEmpty) {\n return null;\n }\n\n return (\n \n {this._renderSection(languageSwitcher.languagesSection)}\n {(this.services.mediaQuery.lAndAbove && languageSwitcher.languagesSection.items.length && languageSwitcher.countriesSection.items.length) ?\n \n : null}\n {this._renderSection(languageSwitcher.countriesSection)}\n \n );\n }\n }\n);\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const MainNavCanvasBox = styledBox(\"MainNavCanvasBox\");","import styled from \"styled-components\";\nimport {CssRule} from \"../../../themes/architecture/css-helpers/css-rule\";\nimport {DRAGGING, OPEN_MENU} from \"../../../themes/css-global-classes\";\n\nexport interface MainNavBoxProps {\n zIndex: number;\n}\n\nexport const MainNavBox = styled.div`\n position: sticky;\n top: 0;\n display: flex;\n flex-direction: column;\n height: 100vh;\n margin: 0 auto 0 0;\n transition: transform 0.2s ease-in-out;\n z-index: ${props => props.zIndex};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow } {\n height: 100%;\n position: fixed;\n top: 0;\n bottom: 0;\n transform: translateX(-100%);\n ${CssRule.For.RTL.build()} & {\n transform: translateX(100%);\n }\n\n &.${OPEN_MENU} {\n transform: translateX(0);\n /* We need to duplicate din rule for selector specificity */\n ${CssRule.For.RTL.build()} & {\n transform: translateX(0);\n }\n overflow: hidden;\n\n\n @media ${({theme}) => theme.mediaQuery.landscape} {\n padding-left: env(safe-area-inset-left);\n padding-right: env(safe-area-inset-right);\n }\n }\n\n\n &.${DRAGGING} {\n transition: none;\n }\n\n\n /*\n .cgp-landscape.cgp-ios & {\n &.open-menu {\n padding-left: env(safe-area-inset-left);\n }\n }\n\n .cgp-landscape.cgp-ios.cgp-rtl & {\n &.open-menu {\n padding-right: env(safe-area-inset-right);\n }\n }\n */\n}\n`","import styled from \"styled-components\";\n\nexport const MainNavContentWrapperBox = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n color: ${props => props.theme.colors.text};\n`","import styled from \"styled-components\";\n\nexport const MainNavMenuBox = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 0 1.5rem;\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n\n &::-webkit-scrollbar {\n width: 5px;\n }\n\n &::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n }\n\n &::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.5);\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.8);\n }\n`","import React, {useEffect, useRef} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {LogoBox} from \"../user-menu/logo-box/logo-box.component\";\nimport {ProfileBox} from \"../profile-box/profile-box.component\";\nimport {SideMenu} from \"../side-menu/side-menu.component\";\nimport {ClockAndLastLoginBoxComponent} from \"../clock-and-last-login-box/clock-and-last-login-box.component\";\nimport {LanguageSwitcherDropdownComponent} from \"../language-switcher-dropdown/language-switcher-dropdown.component\";\nimport {CyClass} from '../../../common/cy-classes';\nimport {DRAGGING, OPEN_MENU} from \"../../themes/css-global-classes\";\nimport {MobileMenuHeaderBox} from \"./boxes/mobile/mobile-menu-header.box\";\nimport {MobileBackBox} from \"./boxes/mobile/back/mobile-back.box\";\nimport {MobileBackLabelBox} from \"./boxes/mobile/back/mobile-back-label.box\";\nimport { FlexGrowItemBox } from \"../../themes/architecture/css-helpers/flex\";\nimport {MainNavCanvasBox} from \"./boxes/main-nav-canvas/main-nav-canvas.box\";\nimport {MainNavBox} from \"./boxes/main-nav.box\";\nimport {MainNavContentWrapperBox} from \"./boxes/main-nav-content-wrapper.box\";\nimport {MainNavMenuBox} from \"./boxes/main-nav-menu.box\";\nimport classNames from \"classnames\";\nimport {RelatedSitesComponent} from \"./boxes/related-sites/related-sites.component\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {reaction} from \"mobx\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface MainNavProps extends ComponentServicesPick<'sideMenu' | 'gameSearch' | 'header'> {\n \n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const mainNavRef = useRef();\n const dragProperties = useRef({isDragging:false, initialPointerX:0, initialNavMenuTransform: 0});\n\n useEffect(() => {\n const r = reaction(() => props.gameSearch.isSearchBoxOpened,\n (isSearchBoxOpened) => {\n if (isSearchBoxOpened && mainNavRef.current) {\n mainNavRef.current.scrollTop = 0;\n }\n })\n return () => r();\n }, [props.gameSearch]);\n\n const _renderRelatedSitesLinks = () => {\n if (services.mediaQuery.lAndBelow) {\n return null;\n }\n\n return (\n \n );\n }\n\n const _onLogoClick = async () => {\n (await services.userMenu).closeMenu();\n };\n\n const _renderLogo = () => {\n if (!services.device.isMobile) {\n return (\n \n );\n }\n }\n\n const _renderProfileBox = () => {\n if (!services.device.isMobile) {\n return ;\n }\n }\n\n const _hideMobileMenu = () => {\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", 'Close_Burger');\n props.gameSearch.closeSearchResult();\n props.sideMenu.closeMobileMenu();\n }\n \n const _renderMobileMenuHeader = () => {\n const BackIcon = services.theme.currentTheme.icons.backIcon;\n let backButtonHandler = () => _hideMobileMenu();\n let backButtonUseLabel = false;\n let backButtonCyClass = \"cy-close-mobile-menu-icon\";\n if (props.gameSearch.isSearchBoxOpened) {\n backButtonHandler = () => props.gameSearch.closeSearchResult();\n backButtonUseLabel = true;\n backButtonCyClass = \"cy-close-mobile-search-icon\";\n }\n if (props.sideMenu.isMobileLanguageSwitcher) {\n backButtonHandler = () => props.sideMenu.closeMobileLanguageSwitcher();\n backButtonUseLabel = true;\n backButtonCyClass = CyClass('cy-lang-switcher-back');\n }\n\n if (services.mediaQuery.lAndBelow) {\n return (\n \n \n \n \n { backButtonUseLabel ?\n {services.translation.translate(\"BACK\")}\n : null }\n \n \n \n _hideMobileMenu()}/>\n \n \n \n );\n }\n\n return null;\n }\n\n const _onDrag = (e: React.TouchEvent) => {\n\n const isMobile = services.device.isMobile;\n\n if(isMobile && mainNavRef?.current) {\n const isRTL = services.language.isRTLLanguage;\n const pointerX = e.touches[0].clientX;\n\n if (!dragProperties.current.isDragging) {\n dragProperties.current.isDragging = true;\n dragProperties.current.initialNavMenuTransform = services.window.getElementHorizontalTranslationAmount(mainNavRef.current);\n dragProperties.current.initialPointerX = pointerX;\n\n //Prevent main nav from animate, we want it to move along with pointer without animation\n mainNavRef.current.classList.add(DRAGGING);\n }\n\n //min/max (depending on RTL direction) to prevent from dragging to the opposite direction\n const pointerXDelta = Math.abs(Math[(isRTL ? 'max' : 'min')](pointerX, dragProperties.current.initialPointerX) - dragProperties.current.initialPointerX) * (isRTL ? -1 : 1);\n\n mainNavRef.current.style.transform = `translateX(${dragProperties.current.initialNavMenuTransform - pointerXDelta}px)`;\n }\n }\n\n const _onStopDragging = () => {\n if(dragProperties.current.isDragging) {\n const isRTL = services.language.isRTLLanguage;\n\n const windowSize = isRTL ? services.window.innerWidth : 0;\n\n //Close after 1/4 of menu is outside viewport\n const minMainNavXToAutoClose = Math.round(mainNavRef.current.clientWidth * (1/4));\n const currentMainNavXPosition = Math.abs(windowSize - mainNavRef.current.getBoundingClientRect()[isRTL ? 'right' : 'left']);\n\n //Let the main nav animate again\n mainNavRef.current.classList.remove(DRAGGING);\n dragProperties.current.isDragging = false;\n\n // The main nav is in position where it should auto close\n if (currentMainNavXPosition > minMainNavXToAutoClose) {\n props.sideMenu.closeMobileMenu();\n }\n\n //Remove dragging X position to let it open or close by logic\n mainNavRef.current.style.removeProperty(\"transform\");\n }\n }\n\n\n const cssClasses = classNames(\"cy-main-nav\", {\n [OPEN_MENU]: props.sideMenu.isMobileMenuOpen\n });\n\n return (\n \n \n {_renderMobileMenuHeader()}\n\n \n {_renderRelatedSitesLinks()}\n {_renderLogo()}\n \n {_renderProfileBox()}\n \n \n {services.mediaQuery.lAndBelow ? null : }\n \n \n \n \n );\n \n})\n\nexport const MainNav = withServices(ComponentBody, ['sideMenu', 'gameSearch', 'header']);","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {Button} from '../../../../basic-ui-components/button/base/button.component';\nimport {AppIdentifiers, AreaType} from \"@sparkware/uc-sdk-core\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\n\nexport const HelpButtonComponent: React.FC = observer(() => {\n const services = useServices();\n\n const handleClick = async () => {\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\", \"Header\", \"Help\");\n await (await services.appLauncher).openHelpCenter({\n businessCorrelationID: services.tools.getGuid(),\n channel: {\n area: AreaType.PCHeader,\n element: AppIdentifiers.CRHelpCenter,\n source: AppIdentifiers.CasinoClient\n }\n });\n }\n\n return (\n \n );\n});\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const AppHeaderCrossBrandListBox = styledBox('AppHeaderCrossBrandListBox');\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {AppHeaderCrossBrandListBox} from \"./boxes/app-header-cross-brand-list/app-header-cross-brand-list.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {IMenuItemRenderer} from '../../../../services/menu-items-common/renderer/menu-item.renderer.interface';\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface AppHeaderCrossBrandsComponentProps extends ComponentServicesPick<'header'> {\n\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const _renderCrossBrandLinks = (sites: IMenuItemRenderer[]) => {\n return (\n \n {sites.map(menuItem => \n {menuItem.renderMenuItem()}\n )}\n \n );\n }\n\n let crossBrandsMenuItems = props.header.getCrossBrandsMenuItems();\n if (crossBrandsMenuItems.length === 0) {\n return null;\n }\n return (\n \n {_renderCrossBrandLinks(crossBrandsMenuItems)}\n \n );\n\n})\nexport const AppHeaderCrossBrandsComponent = withServices(ComponentBody, ['header']);","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const BurgerMenuContainerBox = styledBox('BurgerMenuContainerBox');\n","import React from 'react';\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {BurgerMenuContainerBox} from \"./boxes/container/burger-menu-container.box\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface MobileBurgerMenuComponentProps extends ComponentServicesPick<'sideMenu'>{\n \n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n const _clickHandler = () => {\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", \"Open_Burger\");\n props.sideMenu.openMobileMenu();\n };\n\n const _getIcon = () => {\n if (services.abTestingFeatureDataProvider.mobileHeaderSearchButtonEnabled) {\n return services.theme.currentTheme.icons.mobileMenuNoSearchIcon;\n }\n return services.theme.currentTheme.icons.mobileMenuIcon;\n }\n\n const MobileMenuIcon = _getIcon();\n return (\n \n \n \n );\n\n})\n\nexport const MobileBurgerMenuComponent = withServices(ComponentBody, ['sideMenu']);\n","import styled from \"styled-components\";\n\nexport const HeaderLanguageSwitcherBox = styled.div`\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponentWithState} from '../../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport {LanguageSwitcherDropdownComponent} from '../../../language-switcher-dropdown/language-switcher-dropdown.component';\nimport {HeaderLanguageSwitcherBox} from '../../boxes/language-switcher/header-language-switcher.box';\nimport { Button } from '../../../../basic-ui-components/button/base/button.component';\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {SetTimeoutType} from \"../../../../../common/types/set-timeout-type\";\n\nexport interface LanguageSwitcherComponentProps {}\n\nexport interface LanguageSwitcherComponentState {\n readonly isOpen: boolean\n}\n\nexport const HeaderLanguageSwitcherComponent = observer(\n class HeaderLanguageSwitcherComponent extends OrbitComponentWithState {\n private _timer: SetTimeoutType;\n\n constructor(props: LanguageSwitcherComponentProps) {\n super(props);\n\n this.state = {\n isOpen: false\n }\n }\n\n private _toggleDropdown = () => {\n this._clearCollapseTimeout();\n this.setState({...this.state, isOpen: !this.state.isOpen});\n };\n\n private _colapseDropdown = () => {\n this.setState({...this.state, isOpen: false});\n };\n\n private _startCollapseTimeout = () => {\n this._timer = setTimeout(this._colapseDropdown, 300);\n };\n\n private _clearCollapseTimeout = () => {\n clearTimeout(this._timer);\n };\n\n render() {\n\n if(this.services.device.isMobile || this.services.language.languageSwitcher.isEmpty) {\n return null;\n }\n\n return (\n this._clearCollapseTimeout()}\n onMouseLeave={() => this._startCollapseTimeout()}\n >\n this._toggleDropdown()}\n margin=\"0 0.4rem\"\n className={CyClass(\"cy-language-switcher-button\")}\n />\n \n \n );\n }\n }\n);\n\n\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const DepositHeaderButtonBox = styledBox('DepositHeaderButtonBox');\n","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {DepositHeaderButtonBox} from './boxes/deposit-header-button.box';\nimport {AreaType} from '@sparkware/uc-sdk-core';\nimport {CHANNEL_SOURCE, CHANNEL_ELEMENTS} from '../../../../../common/const/casinofied-analytics-consts';\nimport {Image} from '../../../raw-components/image/image';\n\nexport class DepositHeaderButtonComponent extends OrbitComponent {\n private onClick = () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Header\", \"Click\", \"DepositButton\");\n\n this.services.cashier.openDeposit({\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.UserArea,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n };\n render() {\n return \n \n ;\n }\n}","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const NavbarSeparatorBox = styledBox('NavbarSeparatorBox');\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const HeaderNavbarContainerBox = styledBox('HeaderNavbarContainerBox');","import {HeaderNavbarLeftContainerDefaultBox} from \"./header-navbar-left-container.default.box\";\n\nexport const HeaderNavbarLeftContainerBox = HeaderNavbarLeftContainerDefaultBox;\n","import styled from \"styled-components\";\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const HeaderNavbarLeftContainerDefaultBox = styled.div`\n display: flex;\n margin: 0 auto 0 0;\n align-items: center;\n ${CssRule.For.RTL.build()} & {\n margin: 0 0 0 auto;\n }\n`;\n","import {HeaderNavbarRightContainerDefaultBox} from \"./header-navbar-right-container.default.box\";\n\nexport const HeaderNavbarRightContainerBox = HeaderNavbarRightContainerDefaultBox;\n","import styled from \"styled-components\";\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const HeaderNavbarRightContainerDefaultBox = styled.div`\n display: flex;\n margin: 0 0 0 auto;\n align-items: center;\n ${CssRule.For.RTL.build()} & {\n margin: 0 auto 0 0;\n }\n`;\n","import React, {Fragment} from 'react';\nimport {LogoBox} from \"../user-menu/logo-box/logo-box.component\";\nimport {observer} from 'mobx-react';\nimport {Button} from '../../basic-ui-components/button/base/button.component';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {GameSearchComponent} from '../game-search/game-search.component';\nimport {HeaderConfiguration} from '../../services/configurations/config-data-sections/header.configuration';\nimport {HelpButtonComponent} from './top-header-right/help-button/help-button.component';\nimport {AppHeaderCrossBrandsComponent} from './top-header-left/cross-brand/app-header-cross-brands.component';\nimport {RegulatoryDataComponent} from \"./top-header-left/regulatory-data/regulatory-data.component\";\nimport {MobileBurgerMenuComponent} from './top-header-left/mobile-burger-menu/mobile-burger-menu.component';\nimport {HeaderWelcomeButtonsComponent} from './welcome-buttons/header-welcome-buttons.component';\nimport {HeaderLanguageSwitcherComponent} from './top-header-right/language-switcher/header-language-switcher.component';\nimport {InsideOrbitMenuContainerComponent} from \"../inside-orbit-menu-container/inside-orbit-menu-container.component\";\nimport {DepositHeaderButtonComponent} from \"./top-header-right/deposit/deposit-header-button.component\";\nimport {NavbarSeparatorBox} from \"./boxes/navbar-separator/navbar-separator.box\";\nimport {HeaderNavbarContainerBox} from \"./boxes/header-navbar-container/header-navbar-container.box\";\nimport {HeaderNavbarLeftContainerBox} from \"./boxes/navbar-left-container/header-navbar-left-container.box\";\nimport {HeaderNavbarRightContainerBox} from \"./boxes/navbar-right-container/header-navbar-right-container.box\";\nimport {Image} from \"../raw-components/image/image\";\nimport {StateSelectorButtonComponent} from \"./top-header-right/state-selector-button/state-selector-button.component\";\nimport {AreaType, ControlCenterOpenSource} from '@sparkware/uc-sdk-core';\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from '../../../common/const/casinofied-analytics-consts';\nimport {SearchIcon} from \"../../themes/defaults/icons/search.icon\";\nimport {\n TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON\n} from \"../../services/tooltip/on-boarding-tooltip/on-boarding-tooltip-target-selectors\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface HeaderComponentProps extends ComponentServicesPick<'header'> {\n\n}\n\n@observer\nexport class ComponentBody extends OrbitComponent {\n\n private get _headerConfig(): HeaderConfiguration {\n return this.services.configuration.data.header;\n }\n\n private _captureHeaderRef = (element: HTMLElement | null) => {\n this.props.header.setHeaderElement(element || null);\n };\n\n private _renderInsideOrbitMenuContainerPC() {\n return ;\n }\n\n private _renderDesktopSearchInput() {\n\n if (this._headerConfig?.header_buttons?.search?.display !== true) {\n return null;\n }\n\n return ;\n }\n\n private _renderDesktopControlCenterButton() {\n\n if (!this.services.controlCenter.isEnabled) {\n return null;\n }\n\n return (\n {\n (await this.services.userMenu).closeMenu();\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.controlCenterHeaderButton,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n source: ControlCenterOpenSource.Lobby\n }\n });\n }}\n margin=\"0 0.4rem\"\n tooltip={this.services.translation.translate('SAFE_GAMBLING_TOOLTIP')}\n className={TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON}\n />\n );\n }\n\n private _renderDesktopHelpButton() {\n if (this._headerConfig?.header_buttons?.help?.display !== true) {\n return null;\n }\n\n return ;\n }\n\n private _renderDesktopStateSelectorButton() {\n\n if (!this.services.stateOfResidenceIdentifier.shouldDisplayStateSelectorButton()) {\n return null;\n }\n\n return ;\n }\n\n private _renderDesktopLanguageSwitcher() {\n if (this._headerConfig?.header_buttons?.languages?.display !== true || this.services.language.languageSwitcher.isEmpty) {\n return null;\n }\n\n return ;\n }\n\n private _handleSearchClick = async () => {\n this.services.analytics.sendOrbitUserFlowEvent('Navigation', 'NavBar', 'Search_Open');\n await (await this.services.gameSearch).openSearchResult();\n }\n\n private _renderMobileSearchButton() {\n if (!this.services.abTestingFeatureDataProvider.mobileHeaderSearchButtonEnabled) {\n return null;\n }\n\n return <>\n \n
    \n \n
    \n \n }\n\n private _renderMobileNavbar() {\n // Do not wrap these 3 components (or a combination of 2) into a wrapper. This will break sticky positioning\n // RegulatoryDataComponent and HeaderNavbarContainerBox have sticky positioning while CrossBrandsComponent if it gets rendered has not\n // CrossBrandsComponent is used here only for MrGreen\n return (\n <>\n \n \n \n \n \n \n \n {this._renderMobileSearchButton()}\n \n \n {this._renderDeposit()}\n \n \n \n \n );\n }\n\n private _renderSecondLogo() {\n if (!this._headerConfig?.secondaryLogoUrl) {\n return null;\n }\n\n return (\n \n );\n }\n\n private _renderRelevantComponent(componentIDs: string[]) {\n let elements: Array<{component: React.ReactElement | null; componentID: string}> = [];\n if (!componentIDs) {\n return null;\n }\n\n for (let index = 0; index < componentIDs.length; index++) {\n const currentComponentID = componentIDs[index];\n switch (currentComponentID) {\n case \"app-language-switcher\":\n elements.push({\n component: this._renderDesktopLanguageSwitcher(),\n componentID: currentComponentID\n });\n break;\n case \"app-help-button\":\n elements.push({\n component: this._renderDesktopHelpButton(),\n componentID: currentComponentID\n });\n break;\n case \"app-safezone\":\n elements.push({\n component: this._renderDesktopControlCenterButton(),\n componentID: currentComponentID\n });\n break;\n case \"state-selection-button\":\n elements.push({\n component: this._renderDesktopStateSelectorButton(),\n componentID: currentComponentID\n });\n break;\n case \"app-responsible-icons\":\n elements.push({\n component: this._renderResponsibleIcons(),\n componentID: currentComponentID\n });\n break;\n case \"app-secondLogo\":\n elements.push({\n component: this._renderSecondLogo(),\n componentID: currentComponentID\n });\n break;\n case \"search-box-form\":\n elements.push({\n component: this._renderDesktopSearchInput(),\n componentID: currentComponentID\n });\n break;\n case \"state-cross-brand\":\n elements.push({\n component: this._renderCrossBrand(),\n componentID: currentComponentID\n });\n break;\n }\n }\n\n elements = elements.filter(function (el) {\n return el.component != null;\n });\n\n if (elements.length === 0) {\n return null;\n }\n\n return (\n elements.map((element, index) => {\n return (\n \n {element.component}\n {index !== (elements.length - 1) && }\n \n )\n })\n );\n }\n\n private _renderResponsibleIcons() {\n if (!this._headerConfig?.responsibleIcons?.display === true) {\n return null;\n }\n return ;\n }\n\n private _renderDesktopLeftNavbar() {\n return (\n \n {this._renderRelevantComponent(this._headerConfig?.top_header_left)}\n \n );\n }\n\n private _renderCrossBrand() {\n return ;\n }\n\n private _renderDeposit() {\n if (!this.services.user.isAuthorized) {\n return null;\n }\n\n if (!this.services.mediaQuery.sAndBelow) {\n return null;\n }\n\n let depositHeaderButtonEnabledFromConfig = this._headerConfig?.header_buttons?.deposit === true;\n\n if (depositHeaderButtonEnabledFromConfig) {\n return ;\n }\n\n return null;\n }\n\n private _renderDesktopRightNavbar() {\n return (\n \n {this._renderInsideOrbitMenuContainerPC()}\n {this._renderRelevantComponent(this._headerConfig?.top_header_right)}\n\n \n \n );\n }\n\n render() {\n setTimeout(() => {\n this.props.header.deactivateSkeleton();\n }, 1500);\n\n if (this.services.device.isMobile) {\n return this._renderMobileNavbar();\n }\n\n return (\n \n {this._renderDesktopLeftNavbar()}\n {this._renderDesktopRightNavbar()}\n \n\n );\n }\n}\n\n\nexport const HeaderComponent = withServices(ComponentBody, ['header'], {renderSkeleton: () => null})","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const OverlayComponentBox = styledBox(\"OverlayComponentBox\");\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {OverlayComponentBox} from \"./boxes/overlay.component.box\";\nimport {CyClass} from '../../../common/cy-classes';\n\nexport const OverlayComponent = observer(class OverlayComponent extends OrbitComponent {\n\n private _onClickHandler = () => {\n this.services.overlay.closeOverlay();\n };\n\n render() {\n return ;\n }\n});\n","import styled from 'styled-components';\n\ninterface ISpinnerLogoDefaultBoxProps {\n isRTL?: boolean;\n}\n\nexport const SpinnerLogoDefaultBox = styled.div`\n position: absolute;\n top: 50px;\n left: 50px;\n bottom: 0;\n right: 0;\n z-index: 5;\n background-image: url(\"${props => props.theme.images.spriteSheet.toString()}\");\n width: 80px;\n height: 80px;\n background-position: -823px -352px;\n`;","import styled from \"styled-components\";\nimport {SpinnerLogoDefaultBox} from \"./spinner-logo.default.box\";\n\nexport const SpinnerLogoCasino777Box = styled(SpinnerLogoDefaultBox)`\n top: 0;\n left: 0;\n width: 250px;\n height: 215px;\n animation: LoadingAnimation 1s steps(3) infinite;\n background-position: -1103px -452px;\n\n @keyframes LoadingAnimation {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(${({isRTL}) => isRTL ? '-72%' : '72%'});\n }\n }\n`;\n","import styled from \"styled-components\";\nimport {SpinnerLogoDefaultBox} from \"./spinner-logo.default.box\";\n\nexport const SpinnerLogoCIPBox = styled(SpinnerLogoDefaultBox)`\n background-position: -915px -352px;\n`;\n","import styled from \"styled-components\";\nimport {SpinnerLogoDefaultBox} from \"./spinner-logo.default.box\";\n\nexport const SpinnerLogoWSOPBox = styled(SpinnerLogoDefaultBox)`\n top: 45px;\n left: 45px;\n width: 90px;\n height: 90px;\n background-position: -823px -348px;\n`;\n","import styled from \"styled-components\";\nimport {SpinnerLogoDefaultBox} from \"./spinner-logo.default.box\";\n\nexport const SpinnerLogoCISBox = styled(SpinnerLogoDefaultBox)`\n background-position: -915px -352px;\n`;\n","import {SpinnerLogoDefaultBox} from './spinner-logo.default.box';\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {SpinnerLogoCasino777Box} from \"./spinner-logo.casino777.box\";\nimport {SpinnerLogoCIPBox} from \"./spinner-logo.cip.box\";\nimport {SpinnerLogoWSOPBox} from \"./spinner-logo.wsop.box\";\nimport {SpinnerLogoCISBox} from \"./spinner-logo.cis.box\";\n\n//TODO: change accordingly when we have the spritesheet with 888sport spinner logo\nexport const SpinnerLogoBox = styledByTheme(SpinnerLogoDefaultBox)\n .forCasino777(SpinnerLogoCasino777Box)\n .forCip(SpinnerLogoCIPBox)\n .forWsopCip(SpinnerLogoWSOPBox)\n .forWsop(SpinnerLogoWSOPBox)\n .forCis(SpinnerLogoCISBox)\n .apply();","import {SpinnerSubtextDefaultBox} from \"./spinner-subtext.default.box\";\n\nexport const SpinnerSubtextBox = SpinnerSubtextDefaultBox;","import styled from \"styled-components\";\n\nexport const SpinnerSubtextDefaultBox = styled.div`\n font-size: 2rem;\n position: relative;\n top: 200px;\n text-align: center;\n`;","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {SpinnerBox} from './boxes/spinner/spinner.box';\nimport {SpinnerBrandBox} from './boxes/spinner-brand/spinner-brand.box';\nimport {SpinnerBackgroundBox} from './boxes/spinner-background/spinner-background.box';\nimport {SpinnerLogoBox} from './boxes/spinner-logo/spinner-logo.box';\nimport {CyClass} from '../../../common/cy-classes';\nimport {SpinnerSubtextBox} from \"./boxes/spinner-subtext/spinner-subtext.box\";\n\nexport const SpinnerComponent = observer(class SpinnerComponent extends OrbitComponent<{}> {\n\n private _renderSubText(): React.ReactNode {\n if (this.services.spinner.isTheMigrationSpinnerActive) {\n return (\n {this.services.translation.translate('LOGGING_IN')}\n );\n }\n return null;\n }\n\n render() {\n\n if (!this.services.spinner.isSpinning) {\n return null;\n }\n\n return (\n \n \n \n \n {this._renderSubText()}\n \n \n );\n }\n});\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const BreadcrumbsBox = styledBox('BreadcrumbsBox');\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {BreadcrumbsBox} from \"./boxes/breadcrumbs.box\";\n\ninterface BreadcrumbsComponentProps extends ComponentServicesPick<'siteMap' | 'cmsPages'>{\n \n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const services = useServices();\n if(!services.configuration.data.generalSettings.showBreadcrumbs\n || services.device.hybrid.isEmbedded\n || services.location.isHomePage\n || props.cmsPages.currentPage) {\n return null;\n }\n\n return (\n \n {props.siteMap.breadcrumbs.map((bcrumb, index) => bcrumb.render(index + 1))}\n \n );\n});\n\nexport const BreadcrumbsComponent = withServices(ComponentBody, ['siteMap', 'cmsPages']);\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {CmsBannerComponent} from '../cms-banner/cms-banner.component';\nimport {BreadcrumbsComponent} from \"../breadcrumbs/breadcrumbs.component\";\n\n\n\nexport const AppFooterComponent = observer(class AppFooterComponent extends OrbitComponent<{}> {\n render() {\n const footerConfiguration = this.services.configuration.data && this.services.configuration.data.footer;\n\n if(!footerConfiguration) {\n return null;\n }\n\n return (\n <>\n \n \n \n );\n }\n});\n","import styled from \"styled-components\";\n\nexport interface RouterOutletBoxProps {\n minHeight: string;\n}\n\nexport const RouterOutletDefaultBox = styled.div`\n background-color: ${props => props.theme.colors.background};\n min-height: ${props => props.minHeight};\n \n`","import styled from \"styled-components\";\nimport {RouterOutletDefaultBox} from \"./router-outlet.default.box\";\n\nexport const RouterOutletCasino777Box = styled(RouterOutletDefaultBox)`\n background: ${props => `linear-gradient(${props.theme.colors.brandPrimaryDark}, ${props.theme.colors.brandSecondary}, ${props.theme.colors.brandPrimaryDark})`};\n`","import styled from \"styled-components\";\nimport {RouterOutletDefaultBox} from \"./router-outlet.default.box\";\nimport {baseColors} from \"../../../themes/definitions/casino888/base-colors\";\n\nexport const RouterOutletCasino888Box = styled(RouterOutletDefaultBox)`\n background-color: ${baseColors.gray013};\n background-image: linear-gradient(180deg, #1A1A1A 74.08%, #282828 100%);\n background-attachment: fixed;\n`","import styled from \"styled-components\";\nimport {RouterOutletDefaultBox} from \"./router-outlet.default.box\";\nimport {baseColors} from \"../../../themes/definitions/harrahs/base-colors\";\n\nexport const RouterOutletHarrahsBox = styled(RouterOutletDefaultBox)`\n\n background-color: radial-gradient(ellipse at center, ${baseColors.base02Dark} 0%, ${baseColors.black} 100%);\n`","import styled from \"styled-components\";\nimport {RouterOutletDefaultBox} from \"./router-outlet.default.box\";\n\nexport const RouterOutletSIBox = styled(RouterOutletDefaultBox)`\n background-image: url(\"${props => props.theme.images.texture.toString()}\");\n`","import {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\nimport {RouterOutletDefaultBox} from \"./router-outlet.default.box\";\nimport {RouterOutletCasino777Box} from \"./router-outlet.casino777.box\";\nimport {RouterOutletCasino888Box} from \"./router-outlet.casino888.box\";\nimport {RouterOutletHarrahsBox} from \"./router-outlet.harrahs.box\";\nimport {RouterOutletSIBox} from \"./router-outlet.si.box\";\n\n\nexport const RouterOutletBox = styledByTheme(RouterOutletDefaultBox)\n .forCasino888(RouterOutletCasino888Box)\n .forCasino777(RouterOutletCasino777Box)\n .forHarrahs(RouterOutletHarrahsBox)\n .forSI(RouterOutletSIBox)\n .apply();","import {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport React from \"react\";\nimport {ThemeProvider} from \"styled-components\";\nimport {RouterOutletBox} from \"./boxes/router-outlet.box\";\n\nexport const RouterOutletComponent = observer(class RouterOutletComponent extends OrbitComponent<{}> {\n render() {\n if(this.services.miniOrbit.isEnabled) { // Bug 1865301: CGP - CIP8 - iOS - The page cannot be scrolled vertically (Merged PR 34037: Improve CLS)\n return this.services.routing.currentRoute?.render() || null;\n }\n\n return (\n \n \n {this.services.routing.currentRoute?.render() || null}\n \n\n \n )\n\n }\n});\n","import styled from 'styled-components';\n\nexport const FloatingBubblesContainerBox = styled.div`\n position: fixed;\n bottom: 30%;\n right: 16px;\n z-index: 10;\n \n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n right: 0px;\n }\n`;\n","import styled from 'styled-components';\n\nexport interface IFloatingBubbleBoxProps {\n isVisible: boolean;\n}\n\nexport const FloatingBubbleBox = styled.div`\n display: ${props => props.isVisible ? 'block' : 'none'};\n`;\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {FloatingBubblesContainerBox} from './boxes/floating-bubbles-container.box';\nimport {FloatingBubbleBox} from './boxes/floating-bubble.box';\nimport {observer} from 'mobx-react';\n\nexport const FloatingBubblesComponent = observer(class FloatingBubblesComponent extends OrbitComponent {\n render() {\n const bubbles = this.services.floatingBubbles.bubbles;\n if(bubbles.length === 0) {\n return null;\n }\n\n return (\n {bubbles.map(bubble => )}\n )\n }\n});","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const MainWrapperBox = styledBox('MainWrapperBox');","import styled from \"styled-components\";\nimport {PointDefinition} from \"../../../../services/onboarding-tour/geometry.helper\";\n\nexport function radialGradientModel(radius: number, positionCoordinates: PointDefinition, opacity: number = 0) {\n return `radial-gradient(circle at ${positionCoordinates.x}px ${positionCoordinates.y}px, rgba(0, 0, 0, ${opacity}) ${radius}px, rgba(0, 0, 0, 1) ${radius}px)`;\n}\n\nexport interface IMaskCutoutProps {\n positionCoordinates: {\n x: number;\n y: number;\n };\n radius: number;\n opacity: number;\n zIndex: number;\n}\n\nexport const MaskCutoutBox = styled.div`\n z-index: ${({zIndex}) => zIndex};\n position: fixed;\n top: 0;\n height: 100%;\n width: 100%;\n right: 0;\n mask-image: ${(props) => radialGradientModel(props.radius, props.positionCoordinates, props.opacity)};\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const MaskFabricBox = styledBox(\"MaskFabricBox\");\n","import {PointDefinition, GeometryHelper, Segment} from \"./geometry.helper\";\n\n/**\n * You won't find this anywhere on the internet. The rotate function given to gradientTransform can get 3 parameters\n * First is the angle in degrees. Second and third define the point of rotation.\n * Values are 0 0 for top left, 0 1 for left bottom, 1 1 for right bottom, 1 0 for top right.\n * Default is 0 0. The center is 0.5 0.5.\n * Example, to rotate a gradient with 35 degrees around the center: gradientTransform=\"rotate(35 0.5 0.5)\"\n *\n * Otherwise you can define an already rotated gradient like on answer in this stackoverflow\n * but i think this only works for squares\n * https://stackoverflow.com/questions/9025678/how-to-get-a-rotated-linear-gradient-svg-for-use-as-a-background-image\n *\n * Other resources: https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Gradients\n */\nexport function gradientTransformRotateProp(startingPoint: PointDefinition, targetPoint: PointDefinition) {\n return `rotate(${gradientRotationAngle(startingPoint, targetPoint)} 0.5 0.5)`;\n}\nfunction gradientRotationAngle(startingPoint: PointDefinition, targetPoint: PointDefinition) {\n let angle = GeometryHelper.slopeToAngle(GeometryHelper.slope(startingPoint, targetPoint));\n if (startingPoint.x > targetPoint.x || (startingPoint.x === targetPoint.x && startingPoint.y > targetPoint.y)) {\n angle += 180;\n }\n return angle;\n}\nexport function computeSpotlightSVGPath(startingPoint: PointDefinition, targetPoint: PointDefinition, spotlightRadius: number) {\n let extendedSpotlightRadius = spotlightRadius + 6;\n // if the distance between the starting point and the target point is smaller than the spotlight diameter (spotlightradius x 2)\n // then we don't bother with the calculus, we just make a circle.\n // We keep this path as a default in case something breaks at computation.\n // This is how you draw a circle as a path\n // https://www.smashingmagazine.com/2019/03/svg-circle-decomposition-paths/\n // https://codepen.io/jakob-e/pen/bgBegJ\n let dPathProp = `M ${targetPoint.x - extendedSpotlightRadius} ${targetPoint.y} a ${extendedSpotlightRadius} ${extendedSpotlightRadius} 0 0 0 ${extendedSpotlightRadius * 2} 0 a ${extendedSpotlightRadius} ${extendedSpotlightRadius} 0 0 0 -${extendedSpotlightRadius * 2} 0 Z`;\n\n if (GeometryHelper.distanceBetweenPoints(startingPoint, targetPoint) > extendedSpotlightRadius * 1.2) {\n try {\n let OA = new Segment(startingPoint, targetPoint);\n // we need to determine the coordinates of point D, intersection of T1T2 and OA\n // square length of segment OD\n let quadExtendedSpotlightRadius = Math.pow(extendedSpotlightRadius, 2);\n // oa_od_ratio id the length of segment OD divided to the length of the segment OA\n let oa_od_ratio = quadExtendedSpotlightRadius / OA.quadLength;\n // using oa_od_ratio we get the distance from the axis OA (more specific the distance from D) where the tangents line touches the circle\n let dt_length = Math.sqrt(quadExtendedSpotlightRadius*(1 - oa_od_ratio));\n // also, using the same oa_od_ratio we compute the coordinates of point D\n let D = GeometryHelper.getPointInSegment(targetPoint, startingPoint, oa_od_ratio);\n // using the slope perpendicular to the axis of the spotlight, given a point on that axis (D) get the 2 points that are at a given distance\n let [T1, T2] = getThePointsAtGivenDistanceFromAReferencePointInTheDirectionOfASlope(D, dt_length, OA.slopePerpendicular);\n [T1, T2] = orderPoints(T1, T2, startingPoint, D);\n // the final shape should be: starting from the startingPoint draw a line to T1, then a arc of a circle to T2 (radius is spotlight)\n // then close the shape with a line back to the startingPoint\n dPathProp = `M ${startingPoint.x} ${startingPoint.y} L ${T1.x} ${T1.y} A ${extendedSpotlightRadius} ${extendedSpotlightRadius} 0 1 0 ${T2.x} ${T2.y} Z`;\n } catch (e) {\n throw e;\n }\n }\n // IMPORTANT: The syntax for an arc path is \"A rx ry x-axis-rotation large-arc-flag sweep-flag x y\"\n // or \"a rx ry x-axis-rotation large-arc-flag sweep-flag dx dy\" as explained here\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths#arcs\n // apparently the inner circle must have an opposite sweep-flag for the fill property to work correctly.\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule\n // fillRule=\"evenodd\" changes the behavior but for good measure I take the direction drawing into account\n dPathProp += ` M ${targetPoint.x - spotlightRadius} ${targetPoint.y} a ${spotlightRadius} ${spotlightRadius} 0 0 1 ${spotlightRadius * 2} 0 a ${spotlightRadius} ${spotlightRadius} 0 0 1 -${spotlightRadius * 2} 0 Z`\n\n return dPathProp;\n}\n\nfunction getThePointsAtGivenDistanceFromAReferencePointInTheDirectionOfASlope(reference: PointDefinition, distance: number, slope: number) {\n let C: PointDefinition = {x: 0, y: 0}, D: PointDefinition = {x: 0, y: 0};\n if (slope === Infinity) {\n C = {\n x: reference.x,\n y: reference.y - distance\n };\n D = {\n x: reference.x,\n y: reference.y + distance\n };\n return [C, D];\n }\n\n let temp1 = Math.sqrt(Math.pow(distance, 2)/(Math.pow(slope, 2) + 1));\n let Cx = reference.x - temp1;\n C = {\n x: Cx,\n y: (Cx - reference.x)*slope + reference.y\n };\n let Dx = reference.x + temp1;\n D = {\n x: Dx,\n y: (Dx - reference.x)*slope + reference.y\n };\n return [C, D];\n}\n\n/**\n * The points C and D where calculated and are at the same distance from the line OA.\n * One point is on a side of the line OA and the other on the other side.\n * We need to know which one is on the left of OA considering the direction of the OA line is from O towards A\n * The function returns [C, D] if C is on the left and D is on the right and [D, C] otherwise\n */\nfunction orderPoints(Cc: PointDefinition, Dd: PointDefinition, O: PointDefinition, A: PointDefinition) {\n let C = {x: Cc.x, y: Cc.y};\n let D = {x: Dd.x, y: Dd.y};\n if (A.x > O.x) {\n if (A.y > O.y) {\n // first point has x < A.x and y > A.y\n // the second point has x > A.x and y < A.y\n if (C.x < A.x && C.y > A.y && D.x > A.x && D.y < A.y) {\n return [C, D];\n }\n if (D.x < A.x && D.y > A.y && C.x > A.x && C.y < A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (1). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n } else if (A.y < O.y) {\n // first point has x > A.x and y > A.y\n // the second point has x < A.x and y < A.y\n if (C.x > A.x && C.y > A.y && D.x < A.x && D.y < A.y) {\n return [C, D];\n }\n if (D.x > A.x && D.y > A.y && C.x < A.x && C.y < A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (2). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n } else if (A.y === O.y) {\n // first point has y > A.y\n // the second point has y < A.y\n if (C.y > A.y && D.y < A.y) {\n return [C, D];\n }\n if (D.y > A.y && C.y < A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (7). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n }\n } else if (A.x < O.x) {\n if (A.y > O.y) {\n // first point has x < A.x and y < A.y\n // the second point has x > A.x and y > A.y\n if (C.x < A.x && C.y < A.y && D.x > A.x && D.y > A.y) {\n return [C, D];\n }\n if (D.x < A.x && D.y < A.y && C.x > A.x && C.y > A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (4). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n } else if (A.y < O.y) {\n // first point has x > A.x and y < A.y\n // the second point has x < A.x and y > A.y\n if (C.x > A.x && C.y < A.y && D.x < A.x && D.y > A.y) {\n return [C, D];\n }\n if (D.x > A.x && D.y < A.y && C.x < A.x && C.y > A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (3). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n } else if (A.y === O.y) {\n // first point has y < A.y\n // the second point has y > A.y\n if (C.y < A.y && D.y > A.y) {\n return [C, D];\n }\n if (D.y < A.y && C.y > A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (8). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n }\n } else if (A.x === O.x) {\n if (A.y > O.y) {\n // first point has x < A.x\n // the second point has x > A.x\n if (C.x < A.x && D.x > A.x) {\n return [C, D];\n }\n if (D.x < A.x && C.x > A.x) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (5). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n } else if (A.y < O.y) {\n // first point has x > A.x\n // the second point has x < A.x\n if (C.x > A.x && D.x < A.x) {\n return [C, D];\n }\n if (D.x > A.x && C.x < A.x) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (6). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n }\n }\n}\n","import styled from \"styled-components\";\n\nexport const SpotlightRaySvgBox = styled.svg<{zIndex: number;}>`\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: ${({zIndex}) => zIndex};\n pointer-events: none;\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const GradientStopSvgBox = styledBox(\"GradientStopSvgBox\");","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {MaskCutoutBox, radialGradientModel} from \"./boxes/mask-cutout.box\";\nimport {MaskFabricBox} from \"./boxes/mask-fabric/mask-fabric.box\";\nimport {observer} from \"mobx-react\";\nimport {observable, runInAction, action, makeObservable} from \"mobx\";\nimport {PointDefinition, GeometryHelper, Circle, CircleDefinition} from \"../../../services/onboarding-tour/geometry.helper\";\nimport {computeSpotlightSVGPath, gradientTransformRotateProp} from \"../../../services/onboarding-tour/onboarding-spotlight.helper\";\nimport {SpotlightRaySvgBox} from \"./boxes/spotlight-svg.box\";\nimport {GradientStopSvgBox} from \"./boxes/gradient-stop-svg/gradient-stop-svg.box\";\n\nexport type ISpotlightTarget = CircleDefinition;\n\ninterface ISpotlightAnimationTarget extends ISpotlightTarget {\n opacity: number;\n}\n\ninterface IOnboardingSpotlightComponentProps {\n zIndex: number;\n originPoint: PointDefinition;\n target: ISpotlightTarget | undefined;\n show: boolean;\n}\n\n@observer\nexport class OnboardingSpotlightComponent extends OrbitComponent {\n private maskElement: HTMLElement | null = null;\n private svgPathElement: SVGPathElement | null = null;\n private svgGradientElement: SVGLinearGradientElement | null = null;\n\n /**\n * Current target means where the spotlight is oriented in the present, and the target from props where it should be heading.\n * The animation takes place in between currentTarget and props.target and at the end, currentTarget get the value of props.target\n * If both are the same, no animation is currently running\n */\n @observable\n private currentTarget: ISpotlightTarget | undefined = undefined;\n @observable\n private scrollDisabled = false;\n\n // spotlightHome is for the first time the spotlight appears and for when it disappears\n // it defines the target from where it appears and where it disappear to\n // todo: use memoization\n private spotlightHome(P: PointDefinition): ISpotlightAnimationTarget {\n return {\n center: {\n x: P.x,\n y: P.y - 5\n },\n radius: 3,\n opacity: 0\n }\n };\n\n private animationPromise: Promise = Promise.resolve();\n\n constructor(props: IOnboardingSpotlightComponentProps) {\n super(props);\n makeObservable(this);\n }\n\n @action\n setCurrentTarget(t: ISpotlightTarget | undefined) {\n if (!t) {\n this.currentTarget = undefined;\n } else {\n let tt: ISpotlightTarget = new Circle({x: t.center.x, y: t.center.y}, t.radius);\n this.currentTarget = tt;\n }\n }\n\n componentDidMount() {\n this.services.dom.disableScrolling();\n runInAction(() => {\n this.scrollDisabled = true;\n });\n }\n\n componentDidUpdate(prevProps: Readonly, prevState: Readonly<{}>, snapshot?: any): void {\n if (prevProps.target !== this.props.target) {\n this.scheduleAnimation(this.props.target);\n }\n }\n\n componentWillUnmount() {\n this.services.dom.enableScrolling();\n }\n\n captureMaskElement = (e: HTMLElement | null) => {\n this.maskElement = e;\n };\n captureSvgPathElement = (e: SVGPathElement | null) => {\n this.svgPathElement = e;\n };\n captureSvgGradientElement = (e: SVGLinearGradientElement | null) => {\n this.svgGradientElement = e;\n };\n\n render() {\n if (!this.scrollDisabled) {\n return null;\n }\n let currentTarget = !this.currentTarget ? this.spotlightHome(this.props.originPoint) : { ...this.currentTarget, opacity: 1};\n let zIndex = this.props.zIndex;\n\n return (<>\n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n\n private scheduleAnimation = (t: ISpotlightTarget) => {\n this.animationPromise = this.animationPromise.then(() => {\n return this.animateToPoint(t);\n })\n }\n\n private animateToPoint(target: ISpotlightTarget | undefined) {\n if (!this.maskElement || !this.svgPathElement) {\n throw Error(\"No elements to animate\");\n }\n let currentTarget = !this.currentTarget ? this.spotlightHome(this.props.originPoint) : { ...this.currentTarget, opacity: 1};\n let nextTarget = target ? {...target, opacity: 1} : this.spotlightHome(this.props.originPoint);\n let animationPromise = animateFromAToB((ratio) => {\n let intermediatePoint = GeometryHelper.getPointInSegment(currentTarget.center, nextTarget.center, ratio);\n let intermediateOpacity = GeometryHelper.getIntermediateCoordinate(currentTarget.opacity, nextTarget.opacity, ratio);\n let intermediateRadius = GeometryHelper.getIntermediateCoordinate(currentTarget.radius, nextTarget.radius, ratio);\n return {\n center: intermediatePoint,\n radius: intermediateRadius,\n opacity: intermediateOpacity\n };\n }, (intermediate) => {\n this.maskElement.style.webkitMaskImage = radialGradientModel(intermediate.radius, intermediate.center, 1 - intermediate.opacity);\n this.maskElement.style.maskImage = radialGradientModel(intermediate.radius, intermediate.center, 1- intermediate.opacity);\n\n this.svgGradientElement.setAttribute(\"gradientTransform\", gradientTransformRotateProp(this.props.originPoint, intermediate.center));\n\n this.svgPathElement.setAttribute(\"d\", computeSpotlightSVGPath(this.props.originPoint, intermediate.center, intermediate.radius));\n this.svgPathElement.style.opacity = intermediate.opacity.toString();\n }).catch(() => {\n // the animation is a \"best-effort\". if it fails due to failing of intermediate point computations we ignore it ...\n return;\n }).finally(() => {\n // and set the target. That will rerender the component with the target\n this.setCurrentTarget(target);\n });\n return animationPromise;\n }\n\n}\n\n/**\n *\n * @param intermediateDataComputer a function given a ratio (number between 0 and 1) that will modify the parameters that need to be animated\n * @param duration number. A number representing miliseconds to know how much time has passed since the last repaint of the screen\n */\nfunction animateFromAToB(intermediateDataComputer: (ratio: number) => ISpotlightAnimationTarget, effectsCallback: (p: ISpotlightAnimationTarget) => void, duration: number = 300) {\n return new Promise((resolve, reject) => {\n let animationDone = false;\n let startTimestamp: number | undefined;\n let previousTimestamp: number| undefined;\n let tween = (timestamp: number) => {\n if (startTimestamp === undefined) {\n startTimestamp = timestamp;\n }\n const elapsed = timestamp - startTimestamp;\n if (previousTimestamp !== timestamp) {\n const ratio = Math.min(elapsed / duration, 1);\n\n try {\n let intermediatePoint = intermediateDataComputer(ratio);\n effectsCallback(intermediatePoint);\n } catch (e) {\n startTimestamp = undefined;\n previousTimestamp = undefined;\n reject();\n }\n\n if (ratio === 1) {\n animationDone = true;\n }\n }\n previousTimestamp = timestamp;\n if (!animationDone) {\n window.requestAnimationFrame(tween);\n } else {\n startTimestamp = undefined;\n previousTimestamp = undefined;\n resolve();\n }\n }\n\n window.requestAnimationFrame(tween);\n });\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const OnboardingDialogLogoBox = styledBox(\"OnboardingDialogLogoBox\");\n","import styled from \"styled-components\";\n\nexport const OnboardingDialogMainTextBox = styled.div`\n font-size: 2.6rem;\n line-height: 3rem;\n ${({theme}) => theme.font.presets.bold}\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n font-size: 2rem;\n line-height: 1.3;\n }\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const OnboardingDialogSecondaryTextBox = styledBox(\"OnboardingDialogSecondaryTextBox\")\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const OnboardingDialogNextBox = styledBox(\"OnboardingDialogNextBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const OnboardingDialogStepIndicatorBox = styledBox(\"OnboardingDialogStepIndicatorBox\");\n","import styled from \"styled-components\";\n\nexport const OnboardingDialogContentBox = styled.div`\n min-height: 15.4rem;\n max-height: 20%;\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n min-height: 12.8rem;\n }\n`;","import styled from \"styled-components\";\n\nexport const OnboardingDialogCloseBox = styled.div`\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n cursor: pointer;\n`;","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const OnboardingDialogBox = styledBox(\"OnboardingDialogBox\");\n","import {PropsWithChildren} from \"react\";\nimport {GeometryHelper, PointDefinition} from \"../../../services/onboarding-tour/geometry.helper\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {OnboardingDialogLogoBox} from \"./boxes/onboarding-dialog-log/onboarding-dialog-logo.box\";\nimport {OnboardingDialogMainTextBox} from \"./boxes/onboarding-dialog-main-text.box\";\nimport {OnboardingDialogSecondaryTextBox} from \"./boxes/onboarding-dialog-secondary-text.box\";\nimport {FlexContainerBox, FlexGrowItemBox} from \"../../../themes/architecture/css-helpers/flex\";\nimport {OnboardingDialogNextBox} from \"./boxes/onboarding-dialog-next/onboarding-dialog-next.box\";\nimport {OnboardingDialogStepIndicatorBox} from \"./boxes/onboarding-dialog-step-indicator/onboarding-dialog-step-indicator.box\";\nimport {OnboardingDialogContentBox} from \"./boxes/onboarding-dialog-content.box\";\nimport {IOnboardingStep} from \"../../../services/onboarding-tour/onboarding-tour.service.interface\";\nimport {Image} from \"../../raw-components/image/image\";\nimport {DomEventSubscription} from \"../../../../utils/event-listener-registration\";\nimport {OnboardingDialogCloseBox} from \"./boxes/onboarding-dialog-close.box\";\nimport {imagePreload} from \"../../../../common/utils/image-preload\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {OnboardingDialogBox} from \"./boxes/onboarding-dialog/onboarding-dialog.box\";\n\ninterface IOnboardingDialogComponentProps {\n step: IOnboardingStep;\n stepIndex: number;\n stepsTotal: number;\n zIndex: number;\n closing?: boolean;\n show: boolean;\n onLogoCoordinatesUpdate(centerCoordinates: PointDefinition | undefined): void;\n onNext(): void;\n onDone(): void;\n onClose(): void;\n}\n\nexport class OnboardingDialogComponent extends OrbitComponent> {\n private logoRef: HTMLElement | null = null;\n private resizeSubscription: DomEventSubscription | null = null;\n componentDidMount() {\n this.resizeSubscription = this.services.window.subscribeTo.resize(this.onLogoCoordinatesUpdate);\n this.services.analytics.sendOrbitUserFlowEvent(\"Onboarding\", \"Show\", (this.props.stepIndex + 1).toString());\n }\n\n componentDidUpdate(prevProps: IOnboardingDialogComponentProps) {\n if (this.props.stepIndex !== prevProps.stepIndex) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Onboarding\", \"Show\", (this.props.stepIndex + 1).toString());\n }\n if (this.props.stepIndex + 1 === this.props.stepsTotal) {\n imagePreload(this.services.theme.currentTheme.images.onboarding.logoClosing.toString());\n }\n }\n\n componentWillUnmount(): void {\n this.resizeSubscription.dispose();\n }\n\n render() {\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n const imgAssets = this.services.theme.currentTheme.images.onboarding;\n\n const logoUrlString = this.props.closing ? imgAssets.logoClosing.toString() : imgAssets.logo.toString();\n return \n \n \n \n \n \n \n \n {this.services.translation.translate(this.props.step.mainText)}\n {this.services.translation.translate(this.props.step.secondaryText)}\n \n \n {Array(this.props.stepsTotal).fill(this.props.stepIndex).map((sIdx, idx) => )}\n \n {\n this.props.stepIndex === this.props.stepsTotal - 1 ?\n {this.services.translation.translate(\"DONE\")} :\n {this.services.translation.translate(\"NEXT\")}\n }\n \n {this.props.children}\n ;\n }\n\n private onLogoRefCapture = (el: HTMLDivElement | null) => {\n this.logoRef = el;\n this.onLogoCoordinatesUpdate();\n };\n private onLogoCoordinatesUpdate = () => {\n if (this.logoRef) {\n // compute the center of the div coordinates\n let r = this.logoRef.getBoundingClientRect();\n let c = GeometryHelper.getCenterOfDOMRect(r);\n this.props.onLogoCoordinatesUpdate(c);\n } else {\n this.props.onLogoCoordinatesUpdate(undefined)\n }\n };\n private onClose = () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Onboarding\", \"Click_Close\", (this.props.stepIndex + 1).toString());\n this.props.onClose();\n }\n private onDone = () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Onboarding\", \"Click_Done\", (this.props.stepIndex + 1).toString());\n this.props.onDone()\n }\n}","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport {action, makeObservable, observable} from \"mobx\";\nimport { ThemeProvider } from \"styled-components\";\nimport { OrbitComponent } from \"../base-components/orbit-component/orbit-component\";\nimport {ISpotlightTarget, OnboardingSpotlightComponent} from \"../onboarding-tour/spotlight/onboarding-spotlight.component\";\nimport {OnboardingDialogComponent} from \"../onboarding-tour/dialog/onboarding-dialog.component\";\nimport {PointDefinition} from \"../../services/onboarding-tour/geometry.helper\";\n\n@observer\nexport class OnboardingTour extends OrbitComponent {\n private targetTimeout = null;\n @observable.ref\n private target: ISpotlightTarget | undefined = undefined;\n @observable.ref\n private spotlightOriginPoint: PointDefinition;\n /**\n * When `closing` is set to true it means the routine of closing the onboarding (animation of closing the spotlight, fade out animation, unmount) is in progress.\n */\n @observable.ref\n private closing = false;\n /**\n * `show` is needed because the fade in/out animations. At closing of the onboarding, we need to fade out (show=false) and after that we can unmount (services.onboardingTour.isOpened=false)\n */\n @observable.ref\n private show = true;\n\n constructor(props) {\n super(props);\n makeObservable(this);\n }\n\n @action\n private closeOnboarding = () => {\n // closing is set to true that means the mr green avatar picture is changed\n this.closing = true;\n // and the spotlight closes (the target is set to undefined)\n this.setTarget(undefined);\n setTimeout(() => {\n // after 400 ms fade out the dialog and overlay\n this.show = false;\n }, 400);\n setTimeout(() => {\n // after 800 ms we can unmount the onboarding (the fade out animation takes 300 ms)\n this.services.onboardingTour.close();\n this.closing = false;\n }, 800);\n }\n\n @action\n private setSpotlightOriginPoint(o: PointDefinition | undefined) {\n this.spotlightOriginPoint = o || {\n x: Math.round(window.innerWidth / 2),\n y: Math.round(window.innerHeight * (2/3))\n };\n }\n private onLogoCoordinatesUpdate = (c: PointDefinition | undefined) => {\n this.setSpotlightOriginPoint(c);\n };\n\n @action\n private nextStep = () => {\n // before calling services.onboardingTour.nextStep() i want to cleanup any target spotlight timeouts\n if (this.targetTimeout) {\n clearTimeout(this.targetTimeout);\n this.targetTimeout = null;\n }\n this.services.analytics.sendOrbitUserFlowEvent(\"Onboarding\", \"Click_Next\", (this.services.onboardingTour.stepIndex + 1).toString());\n // call next step and get the index\n let newStepIndex = this.services.onboardingTour.nextStep();\n // get the new step\n let step = this.services.onboardingTour.steps[newStepIndex];\n this.setTargetAndScheduleNextOfTheSameStep(step.targets, 0);\n };\n\n private setTargetAndScheduleNextOfTheSameStep(allTargets: ISpotlightTarget[], index: number) {\n if (allTargets.length > index && allTargets[index]) {\n this.setTarget(allTargets[index]);\n }\n if (allTargets.length > index + 1) {\n this.targetTimeout = setTimeout(() => {\n this.setTargetAndScheduleNextOfTheSameStep(allTargets, index+1);\n }, 400);\n }\n }\n\n @action\n private setTarget(t: ISpotlightTarget | undefined) {\n this.target = t;\n }\n\n render() {\n if (!this.services.onboardingTour.isOpened) {\n return null;\n }\n if (!this.services.onboardingTour.allClearToDisplayOnboarding) {\n return null;\n }\n let stepIndex = this.services.onboardingTour.stepIndex;\n let step = this.services.onboardingTour.steps[stepIndex];\n return (\n \n \n );\n }\n}","import React from 'react';\nimport {MainNav} from '../main-nav/main-nav.component';\nimport {observer} from \"mobx-react\";\nimport {UserMenu} from '../user-menu/user-menu.component';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {HeaderComponent} from '../header/header.component';\nimport {RightDrawerComponent} from '../drawer/drawer.component';\nimport {OverlayComponent} from '../overlay/overlay.component';\nimport {SpinnerComponent} from '../spinner/spinner.component';\nimport {AppFooterComponent} from '../app-footer/app-footer.component';\nimport {MainScreenComponent} from '../../basic-components/main-screen/main-screen.component';\nimport {RouterOutletComponent} from '../router-outlet/router-outlet.component';\nimport {BottomNavigationBarComponent} from '../bottom-navigation-bar/bottom-navigation-bar.component';\nimport {CyClass} from '../../../common/cy-classes';\nimport {FloatingBubblesComponent} from '../floating-bubbles/floating-bubbles.component';\nimport {MainWrapperBox} from \"./boxes/main-wrapper.box\";\nimport { OrbitSuspense } from '../base-components/orbit-suspense/orbit-suspense';\nimport { QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE } from '../../services/qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.service.constants';\nimport {OnboardingTour} from '../onboarding-tour/onboarding-tour.component';\n\nconst QAEnvironmentPopUpBlocker = React.lazy(\n () => import(\"../qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.component\").then(({QAEnvironmentPopUpBlocker}) => ({default: QAEnvironmentPopUpBlocker}))\n );\n\nexport const ContainerComponent = observer(class ContainerComponent extends OrbitComponent<{}> {\n\n componentDidMount() {\n try {\n this._showQAEnvironmentPopUpBlocker();\n } catch (error) {\n console.error(error);\n }\n }\n\n private _showQAEnvironmentPopUpBlocker() {\n if (this.services.configuration.servicesConfigs.QAEnvironmentPopUp.enabled) {\n const qaEnvironmentPopUpBlockerCookie = this.services.cookies.getCookie(QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE);\n const queryParams = new URLSearchParams(this.services.window.location.search);\n\n if (!qaEnvironmentPopUpBlockerCookie && queryParams.get(\"shouldIgnoreQApopup\" ) !== 'true') {\n this.services.dialog.showModal((dialogHandler) =>\n \n \n ,\n {\n title: 'QA Environment',\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: true,\n isHighPriority: true\n })\n }\n }\n }\n\n private _renderRightDrawer() {\n // The key=\"right-drawer\" is very important here because this will prevent react from completely destroy this drawer DOM element when the app is rerendered\n // We need his behavior for apps that supports minimization like the proactive chat.\n // When the user resize the window and apps goes from PC to Mobile view then the entire app is rerender and if we don't put the key attribute the drawer div is removed and another one is created so we loose the chat minimization state.\n return \n }\n\n private _renderFullOrbitMobileLayout() {\n return (\n <>\n \n \n \n\n \n \n\n \n \n \n \n\n \n \n \n \n\n {this._renderRightDrawer()}\n \n \n );\n }\n\n private _renderFullOrbitPcLayout() {\n return (<>\n \n \n \n\n \n \n \n \n \n \n \n \n \n {this._renderRightDrawer()}\n \n \n );\n }\n\n\n private _renderFullOrbit() {\n\n if (this.services.device.isMobile) {\n return this._renderFullOrbitMobileLayout();\n } else {\n return this._renderFullOrbitPcLayout();\n }\n }\n\n private _renderMiniOrbit() {\n return (\n <>\n \n \n \n \n \n );\n }\n\n render() {\n if(this.services.miniOrbit.isEnabled) {\n return this._renderMiniOrbit();\n } else {\n return this._renderFullOrbit();\n }\n }\n});\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\n\nexport const ModalDialogsContainerComponent = observer(class ModalDialogsContainerComponent extends OrbitComponent {\n render() {\n const currentDialogs = this.services.dialog.currentDialogs.map(dialogComponent => ReactDOM.createPortal(dialogComponent, this.services.dom.body));\n if(currentDialogs.length === 0) {\n return null;\n }\n return (<>\n {currentDialogs}\n );\n }\n});","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\n\nexport const OrbitComponentsRenderedInsideSdkContainer = observer(class OrbitComponentsRenderedInsideSdkContainer extends OrbitComponent {\n render() {\n const componentsPortals = this.services.orbitComponentInsideSdkProvider.currentRenderedComponents.map(item => ReactDOM.createPortal(item.component, item.element))\n if(componentsPortals.length === 0) {\n return null;\n }\n\n return (<>\n {componentsPortals}\n );\n }\n});","import { observer } from \"mobx-react\";\nimport React from \"react\";\nimport { OrbitComponent } from \"../base-components/orbit-component/orbit-component\";\nimport { BurnoutAnimationWrapper } from \"./burnout-animation/burnout-animation-wrapper.component\";\n\nexport const PlayerBurnoutLayerComponent = observer(class PlayerBurnoutLayerComponent extends OrbitComponent {\n render() {\n if (!this.services.burnoutService.renderAnimation) {\n return null;\n }\n return ;\n }\n});\n","import styled from \"styled-components\";\n\nexport interface ITooltipArrowBoxProps {\n borderColor?: string;\n}\n\nexport const TooltipArrowDefaultBox = styled.div`\n &, &:before {\n position: absolute;\n width: 12px;\n height: 12px;\n background: inherit;\n }\n\n visibility: hidden;\n \n &:before {\n visibility: visible;\n content: ''; \n transform: rotate(45deg);\n border-top: 1px solid ${({borderColor, theme}) => borderColor ? borderColor : theme.colors.boxBorderContrast};\n border-left: 1px solid ${({borderColor, theme}) => borderColor ? borderColor : theme.colors.boxBorderContrast};\n }\n`;","import styled from \"styled-components\";\nimport {TooltipArrowDefaultBox} from \"./tooltip-arrow.default\";\n\nexport const TooltipArrow777Box = styled(TooltipArrowDefaultBox)`\n &:before {\n border-top: 1px solid ${({borderColor}) => borderColor ? borderColor : 'gray'};\n border-left: 1px solid ${({borderColor}) => borderColor ? borderColor : 'gray'};\n } \n`;","import styled from \"styled-components\";\nimport {TooltipArrowDefaultBox} from \"./tooltip-arrow.default\";\n\nexport const TooltipArrowMrGreenBox = styled(TooltipArrowDefaultBox)`\n &:before {\n border-top: 1px solid ${({borderColor, theme}) => borderColor ? borderColor : theme.colors.brandPrimaryContrast};\n border-left: 1px solid ${({borderColor, theme}) => borderColor ? borderColor : theme.colors.brandPrimaryContrast};\n } \n`;","import {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {TooltipArrowDefaultBox} from \"./tooltip-arrow.default\";\nimport {TooltipArrow777Box} from \"./tooltip-arrow.777\";\nimport {TooltipArrowMrGreenBox} from \"./tooltip-arrow.mrgreen.box\";\n\nexport const TooltipArrowBox = styledByTheme(TooltipArrowDefaultBox)\n .forCasino777(TooltipArrow777Box)\n .forMrGreen(TooltipArrowMrGreenBox)\n .apply();","import styled, { css } from \"styled-components\";\n\nexport const TooltipCloseButtonBox = styled.div<{invertColors?: boolean}>`\n\n position: absolute;\n right: 10px;\n top: 10px;\n\n width: 10px;\n height: 10px;\n \n cursor: pointer;\n \n background-image: url(\"${props => props.theme.images.closeModalDialog.toString()}\");\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center; \n\n &:hover {\n opacity: 0.5;\n }\n\n \n ${({invertColors}) => invertColors? css`filter: invert(100%);` : ''}\n `;","import styled, {css} from \"styled-components\";\n\nexport interface ITooltipContainerBoxStylingProps {\n backgroundColor?: string;\n textColor?: string;\n borderColor?: string;\n hasGlow?: boolean;\n}\n\ninterface ITooltipContainerBoxProps extends ITooltipContainerBoxStylingProps {\n active: boolean;\n zIndex: number;\n animated: boolean;\n}\n\nfunction activate(isActive: boolean, isAnimated: boolean) {\n if(!isActive) {\n return css`display: none;`\n }\n\n if(isAnimated) {\n return css`animation: TooltipAppearAnimation 1s ease-in;`\n }\n\n return css`display: flex;`\n}\n\nexport const TooltipContainerDefaultBox = styled.div`\n @keyframes TooltipAppearAnimation {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n \n display: flex;\n ${props => activate(props.active, props.animated)}\n \n min-width: 330px;\n min-height: 80px;\n \n align-items: center;\n\n z-index: ${props =>props.zIndex};\n \n background: ${({backgroundColor, theme}) => backgroundColor ? backgroundColor : theme.colors.background};\n color: ${({textColor, theme}) => textColor ? textColor : theme.colors.textLight};\n \n border-color: ${({borderColor, theme}) => borderColor ? borderColor : theme.colors.boxBorderContrast};\n border-width: 1px;\n border-style: solid;\n border-radius: 15px;\n\n ${({hasGlow}) => hasGlow ? css`box-shadow: 0 0 12px 1px ${props => props.theme.colors.brandPrimary};` : null}\n \n padding: 5px;\n \n //Arrow spacing configuration\n &[data-popper-placement^='top'] > #tool-tip-container-arrow {\n bottom: -7px;\n &:before { transform: rotate(225deg) };\n }\n \n &[data-popper-placement^='bottom'] > #tool-tip-container-arrow {\n top: -7px;\n &:before { transform: rotate(45deg) };\n }\n \n &[data-popper-placement^='left'] > #tool-tip-container-arrow {\n right: -7px; \n &:before { transform: rotate(135deg) }; //180 - 45\n }\n \n &[data-popper-placement^='right'] > #tool-tip-container-arrow {\n left: -7px; \n &:before { transform: rotate(315deg) }; //360 - 45\n }\n`;","import {TooltipContainerDefaultBox} from \"./tooltip-container.default\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\n\nexport const TooltipContainerBox = styledByTheme(TooltipContainerDefaultBox)\n .apply();","import styled, { css } from \"styled-components\";\n\nexport const TooltipGlowDefaultBox = styled.div<{bottom?: boolean}>`\n position: absolute;\n\n ${({bottom}) => bottom ? css`\n bottom: 0;\n right: 20px;\n background-position-y: 8px;\n ` : css`\n top: 0;\n left: 20px;\n background-position-y: -8px;\n `}\n\n width: 90px;\n height: 16px;\n\n background-image: ${props => `radial-gradient(closest-side at 50% 50%,${props.theme.colors.brandPrimary}C0 0%, ${props.theme.colors.brandPrimary}60 50%, ${props.theme.colors.brandPrimary}00 100%)`};\n background-repeat: no-repeat;\n`;\n","import styled from \"styled-components\";\nimport { TooltipGlowDefaultBox } from \"./tooltip-glow.default\";\n\n\nexport const TooltipGlow777Box = styled(TooltipGlowDefaultBox)`\n display: none;\n`;\n","import styled from \"styled-components\";\nimport { TooltipGlowDefaultBox } from \"./tooltip-glow.default\";\n\n\nexport const TooltipGlowMrGreenBox = styled(TooltipGlowDefaultBox)`\n display: none;\n`;\n","import {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport { TooltipGlow777Box } from \"./tooltip-glow.777\";\nimport { TooltipGlowDefaultBox } from \"./tooltip-glow.default\";\nimport {TooltipGlowMrGreenBox} from \"./tooltip-glow.mrgreen.box\";\n\nexport const TooltipGlowBox = styledByTheme(TooltipGlowDefaultBox)\n .forCasino777(TooltipGlow777Box)\n .forMrGreen(TooltipGlowMrGreenBox)\n .forMrGreenCip(TooltipGlowMrGreenBox)\n .forMrGreenCis(TooltipGlowMrGreenBox)\n .apply();","import styled from \"styled-components\";\n\nexport const TooltipContentBox = styled.div`\n padding: 10px;\n max-height: 640px;\n overflow-y: auto;\n `;","import React from 'react';\nimport {observer} from 'mobx-react';\nimport ReactDOM from \"react-dom\";\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {TooltipArrowBox} from \"./boxes/tooltip-arrow/tooltip-arrow.box\";\nimport {TooltipCloseButtonBox} from \"./boxes/tooltip-close-button.box\";\nimport {TooltipContainerBox} from \"./boxes/tooltip-container/tooltip-container.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport { TooltipGlowBox } from './boxes/tooltip-glow/tooltip-glow.box';\nimport { TooltipContentBox } from './boxes/tooltip-content.box';\nimport {ITooltipViewModel} from \"../../services/tooltip/tooltip-base/tooltip-view-model.interface\";\nimport {ITooltipsProvider} from \"../../services/tooltip/tooltips-provider.interface\";\nimport {ThemeProvider} from 'styled-components';\n\ninterface ToolTipComponentProps {\n toolTip: ITooltipViewModel;\n}\n\nexport const ToolTipComponent = observer(class ToolTipComponent extends OrbitComponent {\n\n private _captureElementRef = (element: HTMLDivElement) => {\n if(element) {\n this.props.toolTip.onToolTipRendered(element);\n }\n }\n\n render() {\n const currentTooltip = this.props.toolTip;\n if(!currentTooltip.shouldDisplay()) {\n return null;\n }\n\n const content = currentTooltip?.render();\n const hasGlow = Boolean(currentTooltip?.hasGlow);\n\n return ReactDOM.createPortal(\n \n \n\n {hasGlow && }\n\n {currentTooltip?.shouldShowCloseButton && currentTooltip.closeTooltip()} invertColors={currentTooltip.invertCloseButtonColors}/>}\n\n \n {content}\n \n\n \n\n {hasGlow && }\n\n \n \n , this.services.dom.body);\n }\n});\n\ninterface ToolTipContainerComponentProps {\n toolTipsProvider: () => ITooltipsProvider;\n}\n\n@observer\nexport class ToolTipContainerComponent extends OrbitComponent {\n \n render() {\n const toolTips = this.props.toolTipsProvider().toolTips;\n return (\n <>\n {toolTips.map(t => )}\n \n )\n }\n}","import styled from \"styled-components\";\n\nexport const GameLoadingIndicatorRootBox = styled.div<{isHidden: boolean; zIndex: number}>`\n position: fixed;\n display: ${props => props.isHidden ? 'none' : 'flex'};\n flex-direction: column;\n justify-content: center;\n align-content: center;\n align-items: center;\n z-index: ${props => props.zIndex};\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${props => props.theme.colors.backgroundDark};\n color: ${props => props.theme.colors.textLight};\n`","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {GameLoadingIndicatorRootBox} from \"./boxes/game-loading-indicator-root.box\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface GameLoadingIndicatorComponentProps extends ComponentServicesPick<'gameRunner'> {\n\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n const loadingIndicator = props.gameRunner.gameLoadingIndicator;\n\n if(!loadingIndicator) {\n return null;\n }\n\n return (\n \n {loadingIndicator.render()}\n \n );\n})\n\nexport const GameLoadingIndicatorComponent = withServices(ComponentBody, ['gameRunner']);","import {observer} from \"mobx-react\";\nimport {GameLoadingIndicatorComponent} from \"../game-window/loading-indicators/game-loading-indicator.component\";\nimport React from \"react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface CurrentGameContainerComponentProps extends ComponentServicesPick<'gameRunner'> {\n\n}\n\nconst ComponentBody: React.FC = observer((props) => {\n if(props.gameRunner.gameLoadingIndicator) {\n return ();\n }\n\n const currentRunningGame = props.gameRunner.currentRunningGame;\n if(!currentRunningGame) {\n return null;\n }\n\n return currentRunningGame.renderGame();\n})\n\nexport const CurrentGameContainerComponent = withServices(ComponentBody, ['gameRunner']);","import styled from 'styled-components';\n\n/**\n * This component overrides default react-toastify's css variables\n * https://fkhadra.github.io/react-toastify/how-to-style#override-css-variables\n * React toastify comes with 3 predefined themes, light, dark and colored (which is actually a blank theme)\n * All of theme can be customized using these variables and if we need more we'll use other techniques from this page: https://fkhadra.github.io/react-toastify/how-to-style\n * Variables that are set with their default value (as they come from react-toastify) ARE COMMENTED\n */\nexport const ToasterStyleWrapper = styled.div`\n // use html & instead of :root\n html & {\n /* general toast styles */\n --toastify-toast-width: 388px;\n /* --toastify-toast-background: #fff; */\n /* --toastify-toast-min-height: 64px; */\n /* --toastify-toast-max-height: 800px; */\n --toastify-font-family: ${({theme}) => theme.font.presets.regular};\n /* --toastify-z-index: 9999; */\n\n /* Colors used by the toaster */\n /* these seem to be the backgrounds */\n --toastify-color-light: ${({theme}) => theme.colors.backgroundDark}; /* <-- TODO: this should be a light color and the light theme should be used for 777 for the rest the dark theme */\n --toastify-color-dark: ${({theme}) => theme.colors.backgroundDark};\n /* this seems to be text colors and they are set sometimes as icon colors and progress bar colors */\n /* --toastify-color-info: #3498db; */\n /* --toastify-color-success: #07bc0c; */\n /* --toastify-color-warning: #f1c40f; */\n /* --toastify-color-error: #e74c3c; */\n /* I don't know where this is used */\n /* --toastify-color-transparent: rgba(255, 255, 255, 0.7); */\n\n /* colors used for icons */\n /* --toastify-icon-color-info: var(--toastify-color-info); */\n /* --toastify-icon-color-success: var(--toastify-color-success); */\n /* --toastify-icon-color-warning: var(--toastify-color-warning); */\n /* --toastify-icon-color-error: var(--toastify-color-error); */\n\n /* text colors for light and dark themes */\n --toastify-text-color-light: ${({theme}) => theme.colors.textLight};\n --toastify-text-color-dark: ${({theme}) => theme.colors.textLight};\n\n /* Used only for colored theme */\n /* --toastify-text-color-info: #fff; */\n /* --toastify-text-color-success: #fff; */\n /* --toastify-text-color-warning: #fff; */\n /* --toastify-text-color-error: #fff; */\n\n /* --toastify-spinner-color: #616161; */\n /* --toastify-spinner-color-empty-area: #e0e0e0; */\n\n /* Used when no type (info, success, warning, error) is provided */\n --toastify-color-progress-light: ${({theme}) => theme.colors.brandPrimary};\n /* Used when no type (info, success, warning, error) is provided */\n --toastify-color-progress-dark: ${({theme}) => theme.colors.brandPrimary};\n /* Used when type (info, success, warning, error) IS provided */\n /* --toastify-color-progress-info: var(--toastify-color-info); */\n /* --toastify-color-progress-success: var(--toastify-color-success); */\n /* --toastify-color-progress-warning: var(--toastify-color-warning); */\n /* --toastify-color-progress-error: var(--toastify-color-error); */\n\n /* used to control the opacity of the progress trail */\n --toastify-color-progress-bgo: 1;\n }\n`;","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ToastContainerBox = styledBox(\"ToastContainerBox\");","import {ThemeProvider} from \"styled-components\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {ToasterStyleWrapper} from './boxes/toaster-styles-wrapper.box';\nimport {ToastContainerBox} from './boxes/toast-container/toast-container.box';\nimport 'react-toastify/dist/ReactToastify.css';\n\nexport class ToasterComponent extends OrbitComponent {\n render() {\n return (\n \n , {theme: \"dark\"});\n * default is \"light\" */\n // theme=\"light\"\n />\n \n );\n }\n}\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport ReactDOM from \"react-dom\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\nexport interface SnackbarNotificationContainerComponentProps extends ComponentServicesPick<'notifications' | 'dom'> {\n\n}\n\nconst ComponentBody :React.FC = observer((props) => {\n\n if(props.notifications.currentNotificationsComponents.length === 0) {\n return null;\n }\n\n return (\n <>\n {props.notifications.currentNotificationsComponents.map(notification => ReactDOM.createPortal(notification, props.dom.body))}\n \n );\n});\n\nexport const SnackbarNotificationContainerComponent = withServices(ComponentBody, [\"notifications\", \"dom\"]);","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport {ServiceFactory} from '../../services/service-factory';\nimport {ContainerComponent} from '../container/container.component';\nimport {observer} from 'mobx-react';\nimport {ModalDialogsContainerComponent} from '../modal-dialog/modal-dialogs-container.component';\nimport {OrbitComponentsRenderedInsideSdkContainer} from '../sdk/orbit-components-rendered-inside-sdk-container';\nimport {OrbitContextProvider} from '../../orbit-context';\nimport {StyleSheetManager, ThemeProvider} from 'styled-components';\nimport RtlPlugin from 'stylis-plugin-rtl';\nimport { PlayerBurnoutLayerComponent } from '../burnout/player-burnout-layer.component';\nimport {ToolTipContainerComponent} from \"../tooltip/tooltip-container.component\";\n\nimport {CurrentGameContainerComponent} from \"../current-game-container/current-game-container.component\"; // Pagination module\nimport {ToasterComponent} from '../toaster/toaster.component';\nimport {SnackbarNotificationContainerComponent} from \"../notifications/snackbar-notification-container.component\";\n\nexport interface AppComponentProps {\n services: ServiceFactory,\n}\n\nexport const AppComponent = observer(class AppComponent extends React.Component {\n\n componentDidMount() {\n this.props.services.splash.removeSplash();\n let splashTime = this.props.services.splash.splashTime;\n this.props.services.analytics.sendTechnicalEvent('splash-time-splash_main',\n this.props.services.location.currentUri.pathName.toString(),\n splashTime);\n this.props.services.logger.info(`Splash time: ${splashTime} seconds`);\n this.props.services.webVitals.then(webVitals => webVitals.init());\n }\n\n\n render() {\n return (\n \n \n \n {this.props.services.theme.renderGlobalStyles()}\n { this.props.services.routing.currentRoute?.data?.standalone ?\n this.props.services.arenas.getCurrentArena().renderArena() :\n \n }\n \n \n \n this.props.services.regularTooltips}/>\n this.props.services.onBoardingTooltips}/>\n \n \n \n \n \n \n )\n }\n});\n\n\nexport function renderApp(services: ServiceFactory): void {\n const root = ReactDOM.createRoot(\n document.getElementById('orbit-container') as HTMLElement\n );\n\n root.render(\n \n );\n}\n","import {IStorageService} from './storage.service.interface';\nimport {ILoggerService} from '../logger/logger.service.interface';\n\nexport class InMemoryLocalStorageService implements IStorageService {\n\n constructor(private _logger: ILoggerService) {\n\n }\n\n _localStorageData = {};\n _cookies = {};\n\n\n setItem(key:string, value:any): void {\n this._localStorageData[key] = value;\n }\n\n getItem(key: string): any {\n return this._localStorageData[key];\n }\n\n removeItem(key: string): void {\n delete this._localStorageData[key];\n }\n\n setJson(key: string, value: object): void {\n this._localStorageData[key] = JSON.stringify(value);\n }\n\n getJson(key: string): any {\n var value = this.getItem(key);\n if(!value) {\n return value;\n }\n\n return JSON.parse(value);\n }\n\n createCookie(name: string, value: string): void {\n this._cookies[name] = value;\n }\n\n createDomainCookie(name: string, value: string): void {\n this._cookies[name] = value;\n }\n\n\n getCookie(name: string) {\n return this._cookies[name];\n }\n\n removeCookie(name: string): void {\n try {\n if(this._cookies[name]) {\n delete this._cookies[name];\n }\n } catch (err) {\n this._logger.error('InMemoryLocalStorageService.removeCookie failed', err);\n }\n }\n}\n","import {LauncherOverridesReader} from '../launcher-overrides-reader/launcher-overrides-reader';\nimport {ILoggerService} from '../../services/logger/logger.service.interface';\nimport {isInsideAutomation} from '../../../utils/automation-helpers';\nimport {IB2CConfiguration} from '../../services/configurations/config-data-sections/b2c.configuration';\nimport {Undefined} from '../../../common/types/nullable-types';\n\nexport class B2CFrameworkLoader {\n constructor(private _launcherOverridesReader: LauncherOverridesReader, private readonly b2cConfig: Undefined, private _languageIso2: string, private _logger: ILoggerService) {\n let overrides = this._launcherOverridesReader.getOverrides();\n this._cmsSource = overrides && overrides.orbit && overrides.orbit.cmsSource;\n if (this._cmsSource && !this._cmsSource.endsWith('/')) {\n this._cmsSource += '/'\n }\n }\n\n private readonly _cmsSource: string;\n\n private _buildFilePath(fileName: string): string {\n return `https://storage.googleapis.com/cw-prod/${fileName}`;\n }\n\n private _createTagId(url: string): string {\n const urlParts = url?.split('/');\n if (urlParts.length > 0) {\n const fileName = urlParts[urlParts.length - 1]\n return `b2c_file_${fileName}`;\n }\n return '';\n }\n\n //Important Note - this function also responsible load the b2c scripts/CSS in the AOD app\n async loadB2CFramework(): Promise {\n\n try {\n if (isInsideAutomation()) {\n return;\n }\n\n\n if (!this._cmsSource) {\n return;\n }\n\n if (this.b2cConfig?.jsFiles) {\n const customJsFiles: string[] = this.b2cConfig?.jsFiles || [];\n const customCssFiles: string[] = this.b2cConfig?.cssFiles || [];\n\n if (customJsFiles.length > 0 || customCssFiles.length > 0) {\n customJsFiles.forEach(jsFile => {\n this._loadScriptTag(this._createTagId(jsFile), jsFile);\n });\n customCssFiles.forEach(cssFile => {\n this._loadStyleTag(this._createTagId(cssFile), cssFile);\n });\n }\n\n } else {\n this._loadStyleTag('b2c_main_css', this._buildFilePath('main.css'));\n this._loadScriptTag('b2c_jquery-lib.js', this._buildFilePath('jquery-lib.js'));\n this._loadScriptTag('b2c_main_js', this._buildFilePath('lib.js'));\n this._loadScriptTag('b2c_lib_js', this._buildFilePath('main.js'));\n }\n\n } catch (err) {\n this._logger.error('Failed to load B2C framework', err);\n }\n }\n\n private _loadScriptTag(id: string, url: string): Promise {\n return new Promise((resolve, reject) => {\n var scriptTag = document.createElement('script');\n scriptTag.id = id;\n scriptTag.src = url;\n scriptTag.onload = () => {\n resolve();\n };\n scriptTag.onerror = (err) => {\n this._logger.error(`Failed to load B2C script from ${url}`, err);\n reject(err);\n };\n document.head.appendChild(scriptTag);\n });\n\n\n };\n\n private _loadStyleTag(id: string, url: string): void {\n var styleTag = document.createElement('link');\n styleTag.id = id;\n styleTag['href'] = url;\n styleTag['rel'] = 'stylesheet';\n styleTag['type'] = 'text/css';\n styleTag.onerror = (err) => {\n this._logger.error(`Failed to load B2C stylesheet from ${url}`, err);\n };\n\n document.head.appendChild(styleTag);\n }\n}\n","import {IWindowService} from '../services/window/window.service.interface';\nimport {Uri} from '../services/location/uri/uri';\nimport {Check} from '@sparkware/app-utils';\nimport {Asset, AssetLocationInfo} from './architecture/asset';\nimport {IStorageService} from \"../services/storage/storage.service.interface\";\nimport {ORBIT_LOCATION_OVERRIDE_BASE} from \"../services/location/location.service\";\nimport {isMiniOrbitBasePath} from '../services/mini-orbit/mini-orbit-consts';\nimport { Assets } from './assets';\nimport {IThemeDefinition} from \"../services/theme/theme-definition.interface\";\n\nfunction resolveAssets(assetsContainer: object, assetLocationInfo: AssetLocationInfo) {\n Object.keys(assetsContainer).forEach(key => {\n let value = assetsContainer[key];\n if(value instanceof Asset) {\n // replaces the Asset instance with a string so\n // If we don't do this then functions like overrideJson will not produce the expected result.\n assetsContainer[key] = value.resolveLocation(assetLocationInfo);\n } else if(Check.isObject(value)) {\n resolveAssets(value, assetLocationInfo);\n }\n });\n}\n\nfunction getThemeName(themeName: string, windowService: IWindowService, storageService: IStorageService): string {\n\n let baseUri = new Uri(new URL(windowService.location.href)).pathName.getBase().toString();\n if(isMiniOrbitBasePath(baseUri)) {\n return (themeName + baseUri).toLowerCase();\n } else {\n baseUri = storageService.getItem(ORBIT_LOCATION_OVERRIDE_BASE);\n if(isMiniOrbitBasePath(baseUri)) {\n return (themeName + baseUri).toLowerCase();\n }\n }\n\n return themeName;\n}\n\nexport async function selectTheme(options: {\n themeName: string;\n serverPath: string;\n skinFullName: string;\n configurationPath: string;\n window: IWindowService;\n storage: IStorageService;\n }): Promise {\n\n const themeName = getThemeName(options.themeName, options.window, options.storage) ;\n\n const themeDefinitionModule = await import(/* webpackChunkName: \"theme-definition\" */ `./definitions/${themeName}/theme.definition`)\n\n const themeDefinition: IThemeDefinition = themeDefinitionModule.default;\n\n const assetLocationInfo: AssetLocationInfo = {\n skinFullName: options.skinFullName,\n serverPath: options.serverPath.endsWith('/') ? options.serverPath : options.serverPath + '/',\n configurationPath: options.configurationPath.endsWith('/') ? options.configurationPath : options.configurationPath + '/',\n };\n\n resolveAssets(Assets, assetLocationInfo);\n\n return themeDefinition;\n}\n\n\n","import { IContentAdapterCasinoGamesInfoResponse } from \"@sparkware/uc-sdk-core\";\nimport {GameRawData} from \"./services/sdk/gme-raw-data.type\";\n\nexport const B2C_APP_ID: string = \"B2C\";\n\n\nexport interface IUserInfo {\n readonly isAuthorized: boolean;\n}\n\nexport interface ISiteInfo {\n readonly brandId: number;\n readonly subBrandId: number;\n}\n\nexport interface IClientInfo {\n readonly fullVersion: string;\n}\n\n\nexport interface IOrbitApi {\n readonly version: string;\n readonly userInfo: IUserInfo;\n readonly siteInfo: ISiteInfo;\n readonly clientInfo: IClientInfo;\n\n deepLink(deepLinkObject: any, navigate?: any): any;\n\n bannerAdminDeepLink(action: string, id: string): any;\n\n getMarketingData(marketingParams): any;\n\n sendAnalytics(cat?, action?, label?, value?): void;\n\n showPwaPrompt(): any;\n\n isPwaInstallable(): any;\n\n subscribeOnAuthChange(callback: () => void): void;\n\n getGamesInfo(gameTypes: number[]): Promise;\n\n getGamesWithoutBonus(): Promise;\n\n getRefreshToken(): string;\n}\n","import {\n ContentAdapterEvents,\n IContentAdapter, IContentAdapterCasinoGameInfo,\n IContentAdapterCasinoGamesInfoResponse, IContentAdapterClientInfo, IContentAdapterElasticEventData,\n IContentAdapterEvents, IContentAdapterUserInfo, IDeepLink\n} from \"@sparkware/uc-sdk-core\";\nimport {IServiceFactoryExtended} from \"./services/service-factory-extended.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {B2C_APP_ID} from \"./orbit-api.interface\";\nimport {UndefinedString} from \"../common/types/nullable-types\";\n\nexport const CONTENT_ADAPTER_OBJECT_NAME = 'contentAdapter';\n\nexport class B2CAdapter implements IContentAdapter {\n constructor(private readonly _services: IServiceFactoryExtended) {\n this.events = new ContentAdapterEvents(_services.messageBroker.channels)\n }\n\n readonly events: IContentAdapterEvents;\n\n async getCasinoGames(gameTypes: number[]): Promise {\n gameTypes = gameTypes || [];\n\n let foundGames = {};\n let missingGames = [];\n if (gameTypes.length === 0) {\n return {\n foundGames,\n missingGames,\n };\n }\n\n let gamesMap = this._services.games.gamesMap;\n if (Check.isEmpty(gamesMap)) {\n gamesMap = await this._services.games.getGamesInfoMap(gameTypes);\n }\n\n gameTypes.forEach(gameType => {\n const gameInfo = gamesMap[gameType];\n if (gameInfo) {\n foundGames[gameType] = {\n gameType: gameInfo.gameType,\n title: gameInfo.title,\n gameGroup: gameInfo.gameGroup,\n gameImage: gameInfo.getGameImage(),\n gameImageAlt: gameInfo.getImageSeoAlt()\n };\n } else {\n missingGames.push(gameType);\n }\n });\n\n return {\n foundGames,\n missingGames\n };\n }\n\n async getCasinoGamesWithoutBonus(): Promise> {\n const gamesTypes = this._services.configuration.usedGameTypesBySite;\n\n if(gamesTypes?.length > 0){\n const gamesInfo = await this._services.sdk.getGamesInfo(gamesTypes);\n\n return Object.keys(gamesInfo)\n .filter(gameType => gamesInfo[gameType].allowWithdrawOnlyFromReal === true)\n .reduce((acc, gameType) => {\n acc[gameType] = gamesInfo[gameType];\n return acc;\n }, {});\n }\n\n return {};\n }\n\n async getClientInfo(): Promise {\n return {\n brandId: this._services.sdk.getBrandID(),\n subBrandId: this._services.sdk.getSubBrandID(),\n languageIso2: this._services.language.currentLanguageIso2,\n productPackageId: this._services.sdk.getProductPackageId(),\n systemId: this._services.sdk.getSkin().getPlatformSystemID(),\n features: {},\n cms: {\n footerComponentId: parseInt(this._services.configuration.data.footer.componentID),\n },\n device: {\n isHybrid: this._services.device.hybrid.isHybrid,\n isIOS: this._services.device.os.isIOS,\n isMobile: this._services.device.os.isMobileOS\n },\n environment: this._services.configuration.startupConfiguration.sdk.config.ExtraProperties.env\n };\n }\n\n \n\n async getUserInfo(): Promise {\n const userService = this._services.user;\n const isAuthorized = userService.isAuthorized;\n\n let abTestGroup: UndefinedString = undefined;\n if(this._services.sdk.getCmsUserSignature().message) {\n try {\n abTestGroup = JSON.parse(this._services.sdk.getCmsUserSignature().message).B2CABTest;\n } catch (err) {\n this._services.logger.error('Failed to get B2C A/B test group name', err);\n }\n\n }\n\n if(isAuthorized) {\n return {\n isAuthorized: isAuthorized,\n abTestGroup: abTestGroup,\n userData: {\n isPromotionPermitted: userService.userData.IsPromotionPermitted,\n\n }\n }\n }\n\n return {\n isAuthorized: false,\n abTestGroup: abTestGroup\n };\n }\n\n\n async openDeepLink(deepLink: IDeepLink): Promise {\n const deepLinkService = await this._services.deepLink;\n await deepLinkService.executeDeepLink(deepLink);\n }\n\n sendElasticInfoEvent(data: IContentAdapterElasticEventData): boolean {\n let {eventType, category, action, label, value, customData, sendToDWH, appId} = data;\n appId = appId ?? B2C_APP_ID;\n sendToDWH = sendToDWH ?? true;\n\n if (!Check.isString(eventType) ||\n (!Check.isNullOrUndefined(category) && !Check.isString(category)) ||\n (!Check.isNullOrUndefined(action) && !Check.isString(action)) ||\n (!Check.isNullOrUndefined(label) && !Check.isString(label))) {\n return false;\n }\n\n const MAX_FIELD_SIZE = 100;\n eventType = (eventType?.length > MAX_FIELD_SIZE) ? eventType.slice(0, MAX_FIELD_SIZE) : eventType;\n category = (category?.length > MAX_FIELD_SIZE) ? category.slice(0, MAX_FIELD_SIZE) : category;\n action = (action?.length > MAX_FIELD_SIZE) ? action.slice(0, MAX_FIELD_SIZE) : action;\n label = (label?.length > MAX_FIELD_SIZE) ? label.slice(0, MAX_FIELD_SIZE) : label;\n\n if (Check.isNullOrUndefined(customData)) {\n this._services.analytics.sendElasticInfoEvent({ eventType, category, action, label, value, customData, appID: appId }, sendToDWH);\n return true;\n }\n\n if (Check.isString(customData)) {\n customData = (customData.length > MAX_FIELD_SIZE) ? customData.slice(0, MAX_FIELD_SIZE) : customData;\n this._services.analytics.sendElasticInfoEvent({ eventType, category, action, label, value, customData: appId ? { [appId + \"_data\"]: customData } : customData, appID: appId, }, sendToDWH);\n return true;\n } else if (Check.isObject(customData)) {\n const MAX_FIELDS_COUNT = 10;\n let fieldsCount: number = 0;\n for (const prop in customData) {\n if (!Check.isString(customData[prop])) {\n return false; //only allowing string values in the customData fields - dismissing the event otherwise\n }\n if (customData[prop].length > MAX_FIELD_SIZE) {\n customData[prop] = customData[prop].slice(0, MAX_FIELD_SIZE);//truncate string to max 100 chars\n }\n fieldsCount++;\n }\n if (fieldsCount > MAX_FIELDS_COUNT) {\n return false; //too many custom fields, event dismissed\n }\n this._services.analytics.sendElasticInfoEvent({ eventType, category, action, label, value, customData: appId ? { [appId + \"_data\"]: customData } : customData, appID: appId}, sendToDWH);\n return true;\n }\n\n return false;\n }\n\n async isPwaInstallable(): Promise {\n return (await this._services.progressiveWebApp).isPWAInstallable;\n }\n\n async showPwaPrompt(): Promise {\n await (await this._services.progressiveWebApp).prompt();\n }\n}","import { ORBIT_VERSION } from '../orbit-version';\nimport { Check } from '@sparkware/app-utils';\nimport {\n B2C_APP_ID,\n IClientInfo,\n IOrbitApi,\n ISiteInfo,\n IUserInfo\n} from './orbit-api.interface';\nimport { IServiceFactoryExtended } from './services/service-factory-extended.interface';\nimport { IContentAdapter, IContentAdapterCasinoGamesInfoResponse } from \"@sparkware/uc-sdk-core\";\nimport { CONTENT_ADAPTER_OBJECT_NAME } from \"./b2c-adapter\";\nimport { MarketingParams } from \"../common/interfaces/marketing-params.interface\";\nexport class OrbitApi implements IOrbitApi {\n constructor(private _services: IServiceFactoryExtended) {\n }\n\n get version() {\n\n return ORBIT_VERSION;\n }\n\n private get _b2cContentAdapter(): IContentAdapter {\n return window[CONTENT_ADAPTER_OBJECT_NAME] as IContentAdapter;\n }\n\n get userInfo(): IUserInfo {\n return {\n isAuthorized: this._services.user.isAuthorized\n };\n }\n get siteInfo(): ISiteInfo {\n return {\n brandId: this._services.sdk.getBrandID(),\n subBrandId: this._services.sdk.getSubBrandID()\n }\n }\n\n get clientInfo(): IClientInfo {\n return {\n fullVersion: this._services.sdk.getSkin().getVersion()\n }\n }\n\n /**\n * Will return an array of gameTypes which has allowWithdrawOnlyFromReal === true\n */\n async getGamesWithoutBonus() {\n return await this._b2cContentAdapter.getCasinoGamesWithoutBonus();\n }\n\n async deepLink(deepLinkObject: any, navigate?: any): Promise {\n const deepLinkService = await this._services.deepLink;\n await deepLinkService.executeDeepLink(deepLinkObject, navigate);\n }\n\n bannerAdminDeepLink(action: string, id: string): any {\n const deepLinkObject = {\n action: action,\n id: id\n };\n\n return this.deepLink(deepLinkObject);\n }\n\n async getMarketingData(marketingParams: MarketingParams): Promise {\n if (Check.isString(marketingParams)) {\n try {\n marketingParams = JSON.parse(marketingParams);\n } catch (err) {\n this._services.logger.error(`Failed to parse marketing params: ${marketingParams}`, err);\n }\n }\n\n return (await this._services.marketing).getMarketingData(marketingParams);\n }\n\n sendAnalytics(category?: string, action?: string, label?: string, value?: string) {\n this._services.analytics.sendAnalytics(category, action, label, value);\n }\n\n sendElasticInfoEvent(eventType: string, category: string, action: string, label: string, value?: string, customData: Object = null, sendToDWH: boolean = true, appID: string = B2C_APP_ID): boolean {\n return this._b2cContentAdapter.sendElasticInfoEvent({\n eventType: eventType,\n category: category,\n action: action,\n label: label,\n value: value,\n customData: customData,\n sendToDWH: sendToDWH,\n appId: appID\n });\n }\n\n showPwaPrompt() {\n return this._b2cContentAdapter.showPwaPrompt();\n }\n\n isPwaInstallable() {\n return this._b2cContentAdapter.isPwaInstallable();\n }\n\n subscribeOnAuthChange(callback: (isAuthorized) => void) {\n this._services.sdk.events.onOAuthStateChanged(() => {\n const isAuthorized = this._services.user.isAuthorized\n callback && callback(isAuthorized)\n })\n }\n\n async getGamesInfo(gameTypes: number[]): Promise {\n return await this._b2cContentAdapter.getCasinoGames(gameTypes);\n }\n\n getRefreshToken(): string {\n return this._services.sdk.getRefreshToken();\n }\n\n}\n","import {configure} from 'mobx'\nimport {\n ApplicationStartupConfigurationsReader\n} from './app-react/app-bootstrap/application-startup-configurations-reader/application-startup-configurations-reader';\nimport {SdkHooksProvider} from './app-react/app-bootstrap/sdk-initializer/sdk-hooks-provider';\nimport {SdkInitializer} from './app-react/app-bootstrap/sdk-initializer/sdk-initializer';\nimport {ServiceFactory} from './app-react/services/service-factory';\nimport {renderApp} from './app-react/components/app/app.component';\nimport {LauncherOverridesReader} from './app-react/app-bootstrap/launcher-overrides-reader/launcher-overrides-reader';\nimport {InMemoryLocalStorageService} from './app-react/services/storage/in-memory-local-storage.service';\nimport {LocalStorageService} from './app-react/services/storage/local-storage.service';\nimport {IStorageService} from './app-react/services/storage/storage.service.interface';\nimport {ILoggerService} from './app-react/services/logger/logger.service.interface';\nimport {ConsoleLoggerService} from './app-react/services/logger/console-logger.service';\nimport {WindowService} from './app-react/services/window/window.service';\nimport {HttpService} from './app-react/services/http/http.service';\nimport {DomService} from './app-react/services/dom/dom.service';\nimport engLang from './settings/languages/eng';\n\nimport {B2CFrameworkLoader} from './app-react/app-bootstrap/b2c-framework-loader/b2c-framework-loader';\nimport {DEFAULT_CONFIGS} from './settings/configs/default-config';\nimport {selectTheme} from './app-react/themes/select-theme';\nimport {ILanguageData} from './app-react/services/language/language.service.interface';\nimport {ALL_CONFIGS_KEY} from \"./app-consts\";\nimport {OrbitApi} from \"./app-react/orbit-api\";\nimport {B2CAdapter, CONTENT_ADAPTER_OBJECT_NAME} from \"./app-react/b2c-adapter\";\n\n\nconfigure({\n enforceActions: 'observed'\n});\n\n\nlet createStorage = function(logger: ILoggerService): IStorageService {\n try {\n let lsData = '__orbit_check_local_storage__';\n localStorage.setItem(lsData, lsData);\n localStorage.removeItem(lsData);\n return new LocalStorageService(logger);\n }\n catch (e) {\n logger.error('localStorage is not available!');\n return new InMemoryLocalStorageService(logger);\n }\n\n};\n\n\nasync function getLanguageData(languageIso3: string, logger: ILoggerService): Promise {\n try {\n let languageDataModule = await import(/*webpackChunkName: \"language\" */`./settings/languages/${languageIso3.toLowerCase()}`);\n return languageDataModule.default;\n } catch (err) {\n logger.error(`Failed to load language ${languageIso3}`, err);\n return engLang;\n }\n\n}\n\nexport async function startApplication(): Promise {\n let windowService = new WindowService();\n let domService = new DomService();\n let httpService = new HttpService();\n let loggerService = new ConsoleLoggerService(windowService.getGlobalProperty(ALL_CONFIGS_KEY)?.sdk?.debug);\n let storageService = createStorage(loggerService);\n\n let sdkHooksProvider = new SdkHooksProvider();\n let launcherOverridesReader = new LauncherOverridesReader(storageService, loggerService);\n\n let configurationsReader = new ApplicationStartupConfigurationsReader(DEFAULT_CONFIGS,\n windowService,\n launcherOverridesReader,\n httpService,\n loggerService);\n\n\n let appConfigs = await configurationsReader.readApplicationConfigurations();\n\n const languageData = await getLanguageData(appConfigs.b2c.language.iso3, loggerService);\n\n let themeDefinition = await selectTheme({\n themeName: process.env.REACT_APP_THEME_NAME || appConfigs.orbit.config.theme.name,\n skinFullName: appConfigs.skinFullName,\n serverPath: appConfigs.orbitServer,\n configurationPath: appConfigs.configurationPath,\n window: windowService,\n storage: storageService\n });\n\n const {ThemeDefaultBoxes} = await import(/*webpackChunkName: \"theme-default-boxes\" */ \"./app-react/services/theme/theme-default-boxes\");\n\n\n await new B2CFrameworkLoader(launcherOverridesReader, appConfigs.orbit.config.b2c, appConfigs.b2c.language.iso2, loggerService).loadB2CFramework();\n\n await new SdkInitializer(appConfigs, sdkHooksProvider, launcherOverridesReader, windowService, themeDefinition, loggerService).init();\n\n const services = new ServiceFactory(sdkHooksProvider, loggerService, storageService, windowService, domService, httpService, themeDefinition, ThemeDefaultBoxes, appConfigs, languageData);\n\n window['orbit'] = new OrbitApi(services);\n window[CONTENT_ADAPTER_OBJECT_NAME] = new B2CAdapter(services);\n\n window['getMarketingData'] = function (dl, promo) {\n return window['orbit'].getMarketingData(dl, promo);\n };\n\n renderApp(services);\n}\n","/**\n * System event symbols, used internally for identifying events uniquely.\n */\nconst SYSTEM_EVENTS = {\n ON_INIT_COMPLETE : 'ON_INIT_COMPLETE',\n ON_ORBIT_INIT_COMPLETE : 'ON_ORBIT_INIT_COMPLETE',\n RUN_AUTOLOGIN : 'RUN_AUTOLOGIN',\n RUN_AUTOLOGIN_TOUCH_ID : 'RUN_AUTOLOGIN_TOUCH_ID',\n MESSAGE_OPEN : 'MESSAGE_OPEN',\n MESSAGE_CLOSE : 'MESSAGE_CLOSE',\n ON_BEFORE_OAUTH_STATE_CHANGE : 'ON_BEFORE_OAUTH_STATE_CHANGE',\n OAUTH_STATE_CHANGE : 'OAUTH_STATE_CHANGE',\n AUTOLOGIN_SUCCESS : 'AUTOLOGIN_SUCCESS',\n AUTOLOGIN_FAILED : 'AUTOLOGIN_FAILED',\n SUCCESSFULLY_LOGIN_RESPONSE : 'SUCCESSFULLY_LOGIN_RESPONSE',\n ON_RUN_AUTOLOGIN : 'ON_RUN_AUTOLOGIN',\n FAIL_LOGIN_RESPONSE : 'FAIL_LOGIN_RESPONSE',\n CLOSE_GAME : 'CLOSE_GAME',\n LOGIN_FORM_OPEN : 'LOGIN_FORM_OPEN',\n LOGIN_FORM_CLOSE : 'LOGIN_FORM_CLOSE',\n GET_NEW_TOUCH_TOKEN : 'GET_NEW_TOUCH_TOKEN',\n SCREEN_CHANGE_STATE : 'SCREEN_CHANGE_STATE',\n POST_MESSAGE_ARRIVE : 'POST_MESSAGE_ARRIVE',\n HYBRID_POST_MESSAGE_ARRIVE : 'HYBRID_POST_MESSAGE_ARRIVE',\n EXTEND_USER_TIME_TO_LIVE : 'EXTEND_USER_TIME_TO_LIVE',\n SCREEN_RESIZE_CHANGED : 'SCREEN_RESIZE_CHANGED',\n GAME_OPEN : 'GAME_OPEN',\n FULL_SCREEN_CHANGE : 'FULL_SCREEN_CHANGE',\n OPEN_OVERLAY : 'OPEN_OVERLAY',\n CLOSE_OVERLAY : 'CLOSE_OVERLAY',\n CLOSE_ALL_OVERLAY : 'CLOSE_ALL_OVERLAY',\n EXTERNAL_LINK_OPEN : 'EXTERNAL_LINK_OPEN',\n EXTERNAL_LINK_CLOSED : 'EXTERNAL_LINK_CLOSED',\n EXTERNAL_LINK_OPENED : 'EXTERNAL_LINK_OPENED',\n APP_RESUMED : 'APP_RESUMED',\n APP_PAUSED : 'APP_PAUSED',\n LOGIN_SESSION_RESUMED : \"LOGIN_SESSION_RESUMED\",//triggered on page refresh, autologin (continue other's client session), open app or resume app with successful refresh token\n ANALYTIC_TRIGGER_ACTIVATED : 'ANALYTIC_TRIGGER_ACTIVATED',\n ANALYTIC_DATA_LAYER_UPDATE : 'ANALYTIC_DATA_LAYER_UPDATE',\n ANALYTICS_EXPERIMENT_ACTIVATED: 'ANALYTICS_EXPERIMENT_ACTIVATED',\n ANALYTICS_OPTIMIZE_TRIGGER : 'ANALYTICS_OPTIMIZE_TRIGGER',\n INCOMING_MARKETING_DATA : 'INCOMING_MARKETING_DATA',\n INCOMING_MARKETING_FLOW : 'INCOMING_MARKETING_FLOW',\n PLAYER_ACTION: 'PLAYER_ACTION',\n\n BALANCE_UPDATED: 'BALANCE_UPDATED',\n CURRENCY_UPDATED: 'CURRENCY_UPDATED',\n RECENTLY_PLAYED_GAMES_UPDATED: 'RECENTLY_PLAYED_GAMES_UPDATED',\n LIVE_FEEDS_TOTAL_JACKPOTS_UPDATED: 'LIVE_FEEDS_TOTAL_JACKPOTS_UPDATED',\n LIVE_FEEDS_JACKPOT_AMOUNTS_BY_GAME_UPDATED: 'LIVE_FEEDS_JACKPOT_AMOUNTS_BY_GAME_UPDATED',\n LIVE_FEEDS_JACKPOTS_BY_ID_UPDATED: 'LIVE_FEEDS_JACKPOTS_BY_ID_UPDATED',\n OAUTH_REMOVE_FROM_LOCAL_STORAGE: 'SYSTEM_EVENTS.OAUTH_REMOVE_FROM_LOCAL_STORAGE',\n LOCAL_STORAGE_CHANGED: 'LOCAL_STORAGE_CHANGED',\n ELEMENT_CREATED: 'ELEMENT_CREATED',\n BEGIN_LOGIN_AFTER_REGISTRATION: 'BEGIN_LOGIN_AFTER_REGISTRATION',\n LOGIN_COMPLETED_AFTER_REGISTERATION: 'LOGIN_COMPLETED_AFTER_REGISTERATION',\n LOGIN_FAILED_AFTER_REGISTRATION: 'LOGIN_FAILED_AFTER_REGISTRATION',\n REGISTRATION_COMPLETED: 'REGISTRATION_COMPLETED',\n HYBRID_ALERT: 'HYBRID_ALERT',\n HYBRID_OPEN_MAIL: 'HYBRID_OPEN_MAIL',\n HYBRID_UPDATE_INFO_KEY : 'HYBRID_UPDATE_INFO_KEY',\n NYX_GAME_REVEALED: 'NYX_GAME_REVEALED',\n FIREBASE_GOT_NEW_TOKEN: 'FIREBASE_GOT_NEW_TOKEN',\n TOUCH_ID_GET_TOKEN_FROM_SRV: 'TOUCH_ID_GET_TOKEN_FROM_SRV',\n TOUCH_ID_INIT_SCREEN_SHOW: 'TOUCH_ID_INIT_SCREEN_SHOW',\n TOUCH_ID_TRY_AGAIN_SKIP: 'TOUCH_ID_TRY_AGAIN_SKIP',\n TOUCH_ID_CHECK_TOKEN_ENABLE: 'TOUCH_ID_CHECK_TOKEN_ENABLE',\n TOUCH_ID_TOKEN_ENABLE_RES: 'TOUCH_ID_TOKEN_ENABLE_RES',\n TOUCH_ID_CLEAR_TOKEN: 'TOUCH_ID_CLEAR_TOKEN',\n TOUCH_ID_NATIVE_CANCEL: 'TOUCH_ID_NATIVE_CANCEL',\n TOUCH_ID_LOGIN_ERROR: 'TOUCH_ID_LOGIN_ERROR',\n TOUCH_ID_AUTO_LOGIN: 'TOUCH_ID_AUTO_LOGIN',\n TOUCH_ID_STATE_CHANGED: 'TOUCH_ID_STATE_CHANGED',\n WEB_VIEW_NAVIGATE_GAME: 'WEB_VIEW_NAVIGATE_GAME',\n WEB_VIEW_NAVIGATE_DEPOSIT_WIDGET: 'WEB_VIEW_NAVIGATE_DEPOSIT_WIDGET',\n WEB_VIEW_NAVIGATE_MIT_ID: 'WEB_VIEW_NAVIGATE_MIT_ID',\n WEB_VIEW_NAVIGATE_CASHIER: 'WEB_VIEW_NAVIGATE_CASHIER',\n SECOND_WEB_VIEW_OLD_CALL: 'SECOND_WEB_VIEW_OLD_CALL',\n SECOND_WEB_VIEW_CLOSE: 'SECOND_WEB_VIEW_CLOSE',\n SECOND_WEB_VIEW_OPEN: 'SECOND_WEB_VIEW_OPEN',\n SECOND_WEB_VIEW_CLOSE_ALL: 'SECOND_WEB_VIEW_CLOSE_ALL',\n SECOND_WEB_VIEW_CLOSE_NYX: 'SECOND_WEB_VIEW_CLOSE_NYX',\n OVERLAY_OPEN_AWAIT: 'OVERLAY_OPEN_AWAIT',\n OVERLAY_CLOSE_EXPIRED: 'OVERLAY_CLOSE_EXPIRED',\n FABRIC_ADD_EVENT : 'FABRIC_ADD_EVENT',\n ADD_TAG_OPEN_APP_VER : 'ADD_TAG_OPEN_APP_VER',\n ADD_TAG : 'ADD_TAG',\n REM_TAG : 'REM_TAG',\n DEEPLINK_RECEIVED: 'DEEPLINK_RECEIVED',\n ROUTE_CHANGED: 'ROUTE_CHANGED',\n RESTRICTIONS_CHANGED: 'RESTRICTIONS_CHANGED',\n SESSION_TIMER_UPDATE: 'SESSION_TIMER_UPDATE',\n WINDOW_FOCUS_GAIN: 'WINDOW_FOCUS_GAINED',\n WINDOW_FOCUS_LOSS: 'WINDOW_FOCUS_LOST',\n GEO_HYBRID_UPDATE_ENABLE : 'GEO_HYBRID_UPDATE_ENABLE',\n GEO_HYBRID_GT_CB : 'GEO_HYBRID_GT_CB',\n GEO_HYBRID_GET_LOCATION : 'GEO_HYBRID_GET_LOCATION',\n GEO_HYBRID_GET_LOCATION_RES : 'GEO_HYBRID_GET_LOCATION_RES',\n GEO_RESTRICTIONS_UPDATE: 'GEO_RESTRICTIONS_UPDATE',\n GEO_PERIODIC_UPDATE: 'GEO_PERIODIC_UPDATE',\n SESSION_EVENT_KICK: 'SESSION_EVENT_KICK',\n SESSION_EVENT_WALLET: 'SESSION_EVENT_WALLET',\n SESSION_EVENT_OMG_RECEIVED: 'SESSION_EVENT_OMG_RECEIVED',\n SESSION_EVENT_FREE_PLAY_REMOVED: 'SESSION_EVENT_FREE_PLAY_REMOVED',\n SESSION_EVENT_FREE_PLAY_BATCH_ADDED: 'SESSION_EVENT_FREE_PLAY_BATCH_ADDED',\n SESSION_EVENT_FREE_PLAY_BATCH_UPDATED: 'SESSION_EVENT_FREE_PLAY_BATCH_UPDATED',\n SESSION_EVENT_FREE_PLAY_BATCH_REMOVED: 'SESSION_EVENT_FREE_PLAY_BATCH_REMOVED',\n\tSESSION_EVENT_NET_POSITION_UPDATE: 'SESSION_EVENT_NET_POSITION_UPDATE',\n SESSION_EVENT_RECEIVED_TOASTER: 'SESSION_EVENT_RECEIVED_TOASTER',\n SESSION_EVENT_UPDATERESTRICTION_RECEIVED: 'SESSION_EVENT_UPDATERESTRICTION_RECEIVED',\n SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED: 'SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED',\n SECOND_WEB_VIEW_NAVIGATE_SPORT: 'SECOND_WEB_VIEW_NAVIGATE_SPORT',\n TIME_UPDATED_FROM_SERVER: 'TIME_UPDATED_FROM_SERVER',\n ON_BROWSER_PAGE_HIDE: 'ON_BROWSER_PAGE_HIDE',\n\tTOKEN_LIFETIME_EXPIRED: 'TOKEN_LIFETIME_EXPIRED',\n\tLIVE_TABLES_UPDATE: 'LIVE_TABLES_UPDATE',\n LOADING_INDICATOR_EMBEDDED_UPDATE: 'LOADING_INDICATOR_EMBEDDED_UPDATE',\n LOADING_INDICATOR_EMBEDDED_UPDATE_V2: 'LOADING_INDICATOR_EMBEDDED_UPDATE_V2',\n LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X: 'LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X',\n GAMES_QUESTIONNAIRE_COMPLETED: 'GAMES_QUESTIONNAIRE_COMPLETED',\n GAME_SEQUENCE_FINISH: 'GAME_SEQUENCE_FINISH',\n GAME_POPUP_SHOW: 'GAME_POPUP_SHOW',\n USER_APPROVE_GAME_POPUP: 'USER_APPROVE_GAME_POPUP',\n BONUS_ABUSE_PARKING_MONEY : 'BONUS_ABUSE_PARKING_MONEY',\n SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW : 'SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW',\n CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW : 'CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW',\n DEPOSIT_WIDGET_CLOSED : 'DEPOSIT_WIDGET_CLOSED',\n FREE_TO_PLAY_WIDGET_CLOSED : 'FREE_TO_PLAY_WIDGET_CLOSED',\n LOCATION_POPUP_OPEN : 'LOCATION_POPUP_OPEN',\n LOCATION_POPUP_CLOSED : 'LOCATION_POPUP_CLOSED',\n PLAYER_MESSAGES_STRATEGY_READY: 'PLAYER_MESSAGES_STRATEGY_READY',\n CHANGE_OVERLAY_PRIORITY: 'CHANGE_OVERLAY_PRIORITY',\n OMG_DISPLAYED: 'OMG_DISPLAYED',\n LIVE_GAME_SWITCHED: 'LIVE_GAME_SWITCHED',\n PROMOTIONS_CHANGED: 'PROMOTIONS_CHANGED',\n ODR_CLEAR_ALL_GAMES: 'ODR_CLEAR_ALL_GAMES',\n SERIAL_UPDATE: 'SERIAL_UPDATE',\n APPS_FLAYER_READY : 'APPS_FLAYER_READY',\n DEEP_LINK_READY: 'DEEP_LINK_READY',\n GAMBLING_SESSION_UPDATE: 'GAMBLING_SESSION_UPDATE',\n GAMBLING_SESSION_ACTION: 'GAMBLING_SESSION_ACTION',\n};\n\n/**\n * Client event symbols, used internally for identifying events uniquely.\n */\nconst CLIENT_EVENTS = {\n MENU_CLICKED: 'MENU_CLICKED',\n LOGIN_BUTTON_CLICKED: 'LOGIN_BUTTON_CLICKED',\n REALITY_CHECK_OPENED: 'REALITY_CHECK_OPENED',\n REALITY_CHECK_CLOSED: 'REALITY_CHECK_CLOSED'\n};\n\nconst USER_EVENTS = {\n ON_CLICK: 'click',\n ON_DOUBLE_CLICK: 'dblclick',\n ON_SUBMIT: 'submit',\n ON_MOUSE_MOVE: 'mousemove',\n ON_MOUSE_DOWN: 'mousedown',\n ON_KEY_PRESS: 'keypress',\n ON_DOM_MOUSE_SCROLL: 'DOMMouseScroll',\n ON_MOUSE_WHEEL: 'mousewheel',\n ON_TOUCH_START: 'touchstart',\n ON_TOUCH_MOVE: 'touchmove',\n ON_TOUCH_END: 'touchend',\n ON_MSPOINTER_MOVE: 'MSPointerMove',\n ON_RESIZE: 'resize',\n ON_FOCUS: 'focus',\n ON_CHANGE: 'change',\n ON_BLUR: 'blur'\n};\n\nconst USER_ACTIVITY_EVENTS_ALL = [\n SYSTEM_EVENTS.MESSAGE_CLOSE,\n SYSTEM_EVENTS.FULL_SCREEN_CHANGE,\n SYSTEM_EVENTS.CLOSE_OVERLAY,\n SYSTEM_EVENTS.CLOSE_ALL_OVERLAY,\n SYSTEM_EVENTS.APP_RESUMED,\n SYSTEM_EVENTS.PLAYER_ACTION,\n SYSTEM_EVENTS.BALANCE_UPDATED,\n\tSYSTEM_EVENTS.EXTEND_USER_TIME_TO_LIVE,\n SYSTEM_EVENTS.GAME_OPEN,\n SYSTEM_EVENTS.CLOSE_GAME\n];\n\n/**\n * we need this because app resume in hybrid poker nj happen every few minutes because they save the screen open.\n * so the user will ever have inactivity kick.\n * @type {[string,string,string,string,string,string,string,string,string,string]}\n */\nconst USER_ACTIVITY_EVENTS_FOR_HYBRID = [\n SYSTEM_EVENTS.MESSAGE_CLOSE,\n SYSTEM_EVENTS.FULL_SCREEN_CHANGE,\n SYSTEM_EVENTS.CLOSE_OVERLAY,\n SYSTEM_EVENTS.CLOSE_ALL_OVERLAY,\n SYSTEM_EVENTS.PLAYER_ACTION,\n SYSTEM_EVENTS.BALANCE_UPDATED,\n SYSTEM_EVENTS.EXTEND_USER_TIME_TO_LIVE,\n SYSTEM_EVENTS.GAME_OPEN,\n SYSTEM_EVENTS.CLOSE_GAME,\n SYSTEM_EVENTS.POST_MESSAGE_ARRIVE\n];\n\nexport {SYSTEM_EVENTS, CLIENT_EVENTS, USER_EVENTS, USER_ACTIVITY_EVENTS_ALL, USER_ACTIVITY_EVENTS_FOR_HYBRID};","export const CGP_ERROR_CODES = {\n GENERAL_ERROR_SUPPORT: 100000,\n RESTRICTED_COUNTRY: 100105,\n INVALID_CREDENTIALS: 110,\n LOGIN_RESTRICTION: 100115,\n INVALID_REFRESH_TOKEN: 100120,\n CAPTCHA_REQUIRED: 170,\n TOUCH_ID_CHANGE_PASS: 100300,\n TOUCH_ID_EXPIRE: 100305,\n GENERAL_ERROR: 900000,\n OPENING_GAME_ERROR: 100205,\n UNSUPPORTED_ANONYMOUS: 100210,\n TIME_LIMIT_REACHED_DAILY: 100155,\n TIME_LIMIT_REACHED_WEEKLY: 100180,\n TIME_LIMIT_REACHED_MONTHLY: 100181,\n\n TOKEN_NOT_VALID: 20,\n PENDING_ACTION_REQUIRED: 50,\n INVALID_GRANT: 'invalid_grant'\n};\n\n\nexport function isRefreshTokenError(errorCode: string): boolean {\n errorCode = errorCode?.toString();\n return errorCode === CGP_ERROR_CODES.INVALID_REFRESH_TOKEN.toString() || errorCode === CGP_ERROR_CODES.INVALID_GRANT;\n}\n","import GenericRestrictionValue from \"../restrictions/values/generic_restriction_value\";\n\nexport const PLATFORM_TYPES = {\n\tALL: 'All',\n\tMOBILE: 'Mobile',\n\tPC: 'PC',\n\tNONE: 'None',\n};\n\nexport type RegulationApprovalValues = [boolean, boolean] | boolean;\nexport type RegulationApprovalsType = boolean | Record | undefined;\n\nexport enum VOLATILITY_LIMITS {\n Low = 40.45142,\n Medium = 44.16644\n}\n\nexport enum GAME_VOLATILITY {\n\tNone = -1,\n Low = 0,\n Medium = 1,\n High = 2\n};\n\nexport interface ILocalizedGameInfo {\n\tgameType: number;\n\texternalGameCode: string;\n\texternalGameSubType: string;\n\ttitle: string;\n\thasJackpot: boolean;\n\tvendorId: number;\n\tvendorName: string;\n\tcompanyId?: number;\n\tcompanyName: string;\n\tgameGroup: string;\n\tsubGroupName: string;\n\tgameGroupId: number;\n\tisAnonymousSupported: boolean;\n\tforceDemoButton: boolean;\n\tnumberOfLines?: number;\n\thasFreeSpins: boolean;\n\tallowedPlatformType: string;\n\thasSideBets: boolean;\n\tisMultiHand: boolean;\n\tmaxBetPerSpot?: number;\n\tnumberOfDecks?: number;\n\thasBonusGames: boolean;\n\tminBet: any;\n\tmaxBet: any;\n\tapprovals: RegulationApprovalsType;\n\trestriction?: GenericRestrictionValue;\n\tisCurrentPlatformAllowed?: boolean;\n\tisEliteLounge: boolean;\n\tallowWithdrawOnlyFromReal: boolean;\n\tmaxBetPerBrand?: number;\n\treadonly showSwitchGameMode?: boolean;\n\treadonly gameThemes: number[];\n\treadonly volatility: GAME_VOLATILITY;\n readonly isChildish?: boolean;\n readonly hasNonChildishIcon?: boolean;\n readonly hasLessNonChildishIcon?: boolean;\n}\n\nexport type GAMES_INFO = { [key: number]: ILocalizedGameInfo };\n\nexport default interface IGamesInformationService {\n\tgetGamesInfoWithoutAnyFiltering(gameTypes: number[]): Promise;\n\tgetGamesInfo(gameTypes: number[], overrideUnfilteredGames?: boolean): Promise;\n\tisGameAllowedAndExistsInHybrid(gameInfo: ILocalizedGameInfo): boolean;\n\tgetAllGameTypes(): Promise;\n\tgetGamesSubTypesMappings(gameSubTypes?: string[]): { [key: string]: number };\n\tgetAllGamesInfo(): Promise;\n\tgetDiagnosticMessages(): string;\n\tisVideoSlotOrVideoPokerOrScratchCardsGameGroup(gameGroupId: number): boolean;\n\tisVideoSlotOrSlotsGameGroup(gameGroupId: number): boolean;\n\tisRouletteOrBlackjackOrBaccarat(gameGroupId: number): boolean;\n isLiveGamesGroup(gameGroupId: number): boolean;\n\treadonly themes: {[key: number]: string};\n\treadonly vendors: {[key: number]: string};\n\treadonly companies: {[key: number]: string};\n}\n","const TOKEN_PROPERTIES = {\n OAUTH_STORAGE_KEY: 'oAuth2',\n OAUTH_EXPIRE_KEY_IN_STORAGE: 'oAuth2.expireIn',\n OAUTH_LAST_REFRESH_TOKEN_TIMESTAMP: 'oAuth2.lastLoginTimeStamp',\n OAUTH_LAST_USER_DATA: 'oAuth2.userData',\n OAUTH_LAST_SESSION_DATA: 'oAuth2.lastSession',\n OAUTH_HAS_REMEMBER_ME: 'oAuth2.hasRememberMe',\n OAUTH_LAST_TIME_ACTIVITY: 'oAuth2.lastTimeActivity',\n OAUTH_CUSTOM_SESSION_TIMEOUT: 'oAuth2.customSessionTimeout',\n OAUTH_ACCESS_TOKEN: 'oAuth2.access_token',\n OAUTH_TOKEN_FIELDS_OVERRIDES: 'oAuth2.tokenFieldsOverrides',\n};\nconst GRANT_TYPES = {\n PASSWORD: 'password',\n REFRESH_TOKEN: 'refresh_token',\n AUTOLOGIN: 'autologin'\n};\nconst OAUTH2_CSS = {\n AUTHORIZED_USER_CLASS: 'cgp-authorized-user'\n};\n\nconst HTTP = {\n OK: 200\n};\nconst OAUTH_TOKEN_ERRORS = {\n INVALID_GRANT: 'invalid_grant'\n};\nconst LOGIN_TYPE = {\n NEW_LOGIN: 1,\n AUTOLOGIN: 3\n};\n\nconst ID_VERIFICATION_STATUS = {\n AGE_VERIFIED: 1,\n ADDRESS_VERIFIDED: 1\n};\n\nconst LOGOUT_REASONS = {\n EXPLICIT_LOGOUT: 1,\n USER_IDLE: 2,\n AUTOLOGIN_FAILED: 3,\n REFRESH_TOKEN_FAILED: 4,\n ACCESS_TOKEN_REMOVED: 5,\n USER_KICKED: 6,\n CLIENT_SIDE_LOGOUT: 7,\n\n};\n\nexport { TOKEN_PROPERTIES, HTTP, GRANT_TYPES, OAUTH2_CSS, OAUTH_TOKEN_ERRORS, LOGIN_TYPE, ID_VERIFICATION_STATUS, LOGOUT_REASONS };\n\n\n","const PRIORITY_LEVEL = {\n BASE: 'base',\n POP_UP: 'popup',\n OPEN_SESSION: 'open-session',\n FP: 'fp',\n OMG_BEHIND: 'omg-behind',\n GAME_FRAME: 'game-frame',\n NEXT_GAME: 'next-game',\n GAME_LOADING_INDICATOR: 'game-loading-indicator',\n GAME_FRAME_LOADER: 'game-frame-loader',\n GAME_FRAME_FP: 'game-frame-fp',\n MINI_CASHIER: 'mini-cashier',\n CASHIER: 'cashier',\n LOGIN: 'login',\n EXTERNAL_LINK: 'external-link',\n INTERNAL_OVER_EXTERNAL_LINK: 'internal-over-external-link',\n OMG: 'omg',\n GEO_FREEZE_WINDOW: 'geo-freeze-window',\n TEMP_ACCOUNT: 'temp-account',\n MEMBERSHIP: 'membership',\n MESSAGE: 'message',\n SECONDARY_MESSAGE: 'secondary-message',\n TOUCH_ID: 'touch-id',\n TOUCH_ID_POPUP: 'touch-id-popup',\n LOCK: 'lock',\n SPAIN_SUMMARY_MESSAGE: 'spain-summary-message',\n GAMES_QUESTIONNAIRE: 'games-questionnaire'\n // MEMBERSHIP: 'membership'\n};\n\n\nconst PRIORITY_LEVEL_ZINDEX_MAPPER = {\n [PRIORITY_LEVEL.BASE]: 8000,\n [PRIORITY_LEVEL.POP_UP]: 8010,\n [PRIORITY_LEVEL.OPEN_SESSION]: 8020,\n [PRIORITY_LEVEL.FP]: 8030,\n [PRIORITY_LEVEL.OMG_BEHIND]: 8035,\n [PRIORITY_LEVEL.GAME_LOADING_INDICATOR]: 8037,\n [PRIORITY_LEVEL.NEXT_GAME]: 8038,\n [PRIORITY_LEVEL.GAME_FRAME]: 8040,\n [PRIORITY_LEVEL.GAME_FRAME_FP]: 8041,\n [PRIORITY_LEVEL.GAME_FRAME_LOADER]: 8042,\n [PRIORITY_LEVEL.MINI_CASHIER]: 8045,\n [PRIORITY_LEVEL.LOGIN]: 8050,\n [PRIORITY_LEVEL.SPAIN_SUMMARY_MESSAGE]: 8055,\n [PRIORITY_LEVEL.EXTERNAL_LINK]: 8060,\n [PRIORITY_LEVEL.INTERNAL_OVER_EXTERNAL_LINK]: 8061,\n [PRIORITY_LEVEL.OMG]: 8070,\n [PRIORITY_LEVEL.CASHIER]: 8072,\n [PRIORITY_LEVEL.GAMES_QUESTIONNAIRE]: 8073,\n [PRIORITY_LEVEL.GEO_FREEZE_WINDOW]: 8074,\n [PRIORITY_LEVEL.TEMP_ACCOUNT]: 8075,\n [PRIORITY_LEVEL.MEMBERSHIP]: 8078,\n [PRIORITY_LEVEL.MESSAGE]: 8080,\n [PRIORITY_LEVEL.SECONDARY_MESSAGE]: 8082,\n [PRIORITY_LEVEL.TOUCH_ID]: 8090,\n [PRIORITY_LEVEL.TOUCH_ID_POPUP]: 9002,\n}\n\nconst WRAPPER_DEFAULT_INDEX = 7999;\n\nexport { PRIORITY_LEVEL, PRIORITY_LEVEL_ZINDEX_MAPPER, WRAPPER_DEFAULT_INDEX };\n","import {IMessageData, MESSAGE_ANIMATION_TYPE, MESSAGE_DISPLAY_MODE, PLATFORM_MESSAGE_TYPE} from \"../firebase_const\";\n\nexport enum MESSAGE_TYPE {\n ADDED= \"added\",\n REMOVED=\"removed\",\n}\n\nexport type OpenWithinGameType = '0' | '1';\n\nexport interface IOMGParsedData{\n MessageDataJson: string;\n Messages: string;\n OmgType: string;\n OpenedWithinGame: OpenWithinGameType;\n}\n\nexport interface IReceivedMessage {\n data: TMessage;\n id: string;\n type: MESSAGE_TYPE;\n}\n\nexport interface IMessageDataJson {\n DisplayMode: MESSAGE_DISPLAY_MODE;\n AnimationType: MESSAGE_ANIMATION_TYPE;\n}\n\nexport enum GamblingSessionActionType {\n LossLimitReached = 0,\n TimeLimitReached = 1,\n TimeReminder = 2,\n AdvancedWarningNetLossLimit = 3,\n AdvancedWarningTimeLimit = 4\n}\n\nexport interface IGamblingSessionActionEvent {\n PlatformMessagesType: PLATFORM_MESSAGE_TYPE;\n MessageDataJson: string;\n\n}\n\nexport interface IGamblingSessionActionDataReceivedFromPlatform {\n MessageType: GamblingSessionActionType;\n SessionTotalWins: number;\n SessionTotalBets: number;\n SessionDurationInSeconds: number;\n MessageTimeStamp: string;\n SessionId: string;\n CorrelationID: string;\n}\n\nexport interface IGamblingSessionActionData {\n messageType: GamblingSessionActionType;\n sessionTotalWins: number;\n sessionTotalBets: number;\n sessionDurationInSeconds: number;\n messageTimeStamp: string;\n gamblingSessionId: string;\n correlationID: string;\n}\n\nexport interface IGamblingSessionActionMessage extends IReceivedMessage {\n\n}\n\n","\nconst REGULATION_CODE_TYPES = {\n COM: 0,\n ITALY: 1,\n SPAIN: 2,\n NEVADA: 3,\n GIB: 4,\n NJ: 7,\n DK: 8,\n ROMANIA: 9,\n GERMANY: 12,\n PORTUGAL: 14,\n SWEDEN: 15,\n MALTA: 16,\n SH: 18,\n MICHIGAN: 19,\n CANADA_ONTARIO: 21,\n NETHERLANDS: 22,\n UK: 255\n};\n\n\nconst REGULATION_NAMES = {\n [REGULATION_CODE_TYPES.ITALY]: 'Italy',\n [REGULATION_CODE_TYPES.SPAIN]: 'Spain',\n [REGULATION_CODE_TYPES.NEVADA]: 'Nevada',\n [REGULATION_CODE_TYPES.GIB]: 'Gibraltar',\n [REGULATION_CODE_TYPES.NJ]: 'NewJersey',\n [REGULATION_CODE_TYPES.DK]: 'Denmark',\n [REGULATION_CODE_TYPES.PORTUGAL]: 'Portugal',\n [REGULATION_CODE_TYPES.SWEDEN]: 'Sweden',\n [REGULATION_CODE_TYPES.UK]: 'UK',\n [REGULATION_CODE_TYPES.MALTA]: 'Malta',\n [REGULATION_CODE_TYPES.ROMANIA]: 'Romania',\n [REGULATION_CODE_TYPES.GERMANY]: 'Germany',\n [REGULATION_CODE_TYPES.CANADA_ONTARIO]: 'Ontario',\n [REGULATION_CODE_TYPES.NETHERLANDS]: 'Netherlands',\n [REGULATION_CODE_TYPES.MICHIGAN]: 'Michigan'\n};\n\n\nconst REGULATION_SUFFIX = {\n [REGULATION_CODE_TYPES.COM]: 'com',\n [REGULATION_CODE_TYPES.ITALY]: 'it',\n [REGULATION_CODE_TYPES.SPAIN]: 'es',\n [REGULATION_CODE_TYPES.NEVADA]: 'nev',\n [REGULATION_CODE_TYPES.GIB]: 'gib',\n [REGULATION_CODE_TYPES.NJ]: 'nj',\n [REGULATION_CODE_TYPES.DK]: 'dk',\n [REGULATION_CODE_TYPES.PORTUGAL]: 'pt',\n [REGULATION_CODE_TYPES.SWEDEN]: 'sw',\n [REGULATION_CODE_TYPES.UK]: 'uk',\n [REGULATION_CODE_TYPES.MALTA]: 'mt',\n [REGULATION_CODE_TYPES.ROMANIA]: 'ro',\n [REGULATION_CODE_TYPES.CANADA_ONTARIO]: 'ont',\n [REGULATION_CODE_TYPES.NETHERLANDS]: 'nl',\n [REGULATION_CODE_TYPES.MICHIGAN]: 'mi'\n};\n\nconst REGULATION_STATUS_ID_MAP = {\n APPROVED_FOR_REGULATION: 0,\n PENDING_VERIFICATION : 1,\n PENDING_DOCUMENTS: 2\n};\n\nconst BRANDS = {\n COM : 0,\n NJ888 : 73,\n SPAIN: 58,\n CANADA: 87,\n MICHIGAN: 91,\n MRGREEN_SE: 92,\n MRGREEN_GER: 93,\n MRGREEN_DK: 94,\n};\n\n\nexport {REGULATION_CODE_TYPES, REGULATION_NAMES, REGULATION_SUFFIX, BRANDS, REGULATION_STATUS_ID_MAP};\n","/**\n * Created by andreyna on 7/25/2016.\n */\n\n/*\n * DateFormatter based on DateFormat of Steven Levithan \n * Date Format 1.2.3\n * (c) 2007-2009 Steven Levithan \n * MIT license\n *\n * Accepts a date, a mask, or a date and a mask.\n * Returns a formatted version of the given date.\n * The date defaults to the current date/time.\n * The mask defaults to dateFormat.masks.default.\n *\n * Url: http://blog.stevenlevithan.com/archives/date-time-format\n */\n\nclass DateFormatter {\n\n private _token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|[LloSZ]|\"[^\"]*\"|'[^']*'/g;\n\n private _timezone = /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g;\n\n private _timezoneClip = /[^-+\\dA-Z]/g;\n\n // Some common format strings\n private _masks = {\n \"default\": \"ddd mmm dd yyyy HH:MM:ss\",\n shortDate: \"m/d/yy\",\n mediumDate: \"mmm d, yyyy\",\n longDate: \"mmmm d, yyyy\",\n fullDate: \"dddd, mmmm d, yyyy\",\n shortTime: \"h:MM TT\",\n mediumTime: \"h:MM:ss TT\",\n longTime: \"h:MM:ss TT Z\",\n isoDate: \"yyyy-mm-dd\",\n isoTime: \"HH:MM:ss\",\n isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\",\n shortTime12: \"h:MM TT\",\n shortTime24: \"HH:MM\"\n }\n\n // Internationalization strings\n private _i18n = {\n dayNames: [\n \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\",\n \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"\n ],\n monthNames: [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n ]\n }\n\n\n /*\n * Samples:\n * format(\"longTime\");\n * format(\"UTC:h:MM:ss TT Z\");\n * format(now, \"dddd, mmmm dS, yyyy, h:MM:ss TT\")\n * format(\"Jun 9 2007\", \"fullDate\");\n *\n * Default formats:\n * -------------------------------------------------------------------------\n * Name\tMask Example\n * -------------------------------------------------------------------------\n * default \tddd mmm dd yyyy HH:MM:ss\tSat Jun 09 2007 17:46:21\n * shortDate \tm/d/yy\t6/9/07\n * mediumDate \tmmm d, yyyy\tJun 9, 2007\n * longDate \tmmmm d, yyyy\tJune 9, 2007\n * fullDate \tdddd, mmmm d, yyyy\tSaturday, June 9, 2007\n * shortTime\t h:MM TT\t5:46 PM\n * mediumTime\t h:MM:ss TT\t5:46:21 PM\n * longTime\t h:MM:ss TT Z\t5:46:21 PM EST\n * isoDate\t yyyy-mm-dd\t2007-06-09\n * isoTime\t HH:MM:ss\t17:46:21\n * isoDateTime\t yyyy-mm-dd'T'HH:MM:ss\t2007-06-09T17:46:21\n * isoUtcDateTime\tUTC:yyyy-mm-dd'T'HH:MM:ss'Z'\t2007-06-09T22:46:21Z\n * -------------------------------------------------------------------------\n *\n * -------------------------------------------------------------------------\n * Masks:\n * -------------------------------------------------------------------------\n * Mask\t Description\n * -------------------------------------------------------------------------\n * d\t\t\tDay of the month as digits; no leading zero for single-digit days.\n * dd\t\t\tDay of the month as digits; leading zero for single-digit days.\n * ddd\t\t\tDay of the week as a three-letter abbreviation.\n * dddd\t\t\tDay of the week as its full name.\n * m\t\t\tMonth as digits; no leading zero for single-digit months.\n * mm\t\t\tMonth as digits; leading zero for single-digit months.\n * mmm\t\t\tMonth as a three-letter abbreviation.\n * mmmm\t\t\tMonth as its full name.\n * yy\t\t\tYear as last two digits; leading zero for years less than 10.\n * yyyy\t\t\tYear represented by four digits.\n * h\t\t\tHours; no leading zero for single-digit hours (12-hour clock).\n * hh\t\t\tHours; leading zero for single-digit hours (12-hour clock).\n * H\t\t\tHours; no leading zero for single-digit hours (24-hour clock).\n * HH\t\t\tHours; leading zero for single-digit hours (24-hour clock).\n * M\t\t\tMinutes; no leading zero for single-digit minutes. Uppercase M unlike CF timeFormat's m to avoid conflict with months.\n * MM\t\t\tMinutes; leading zero for single-digit minutes. Uppercase MM unlike CF timeFormat's mm to avoid conflict with months.\n * s\t\t\tSeconds; no leading zero for single-digit seconds.\n * ss\t\t\tSeconds; leading zero for single-digit seconds.\n * l or L\t\tMilliseconds. l gives 3 digits. L gives 2 digits.\n * t\t\t\tLowercase, single-character time marker string: a or p.\n * tt\t\t\tLowercase, two-character time marker string: am or pm.\n * T\t\t\tUppercase, single-character time marker string: A or P. Uppercase T unlike CF's t to allow for user-specified casing.\n * TT\t\t\tUppercase, two-character time marker string: AM or PM. Uppercase TT unlike CF's tt to allow for user-specified casing.\n * Z\t\t\tUS timezone abbreviation, e.g. EST or MDT. With non-US timezones or in the Opera browser, the GMT/UTC offset is returned, e.g. GMT-0500.\n * o\t\t\tGMT/UTC timezone offset, e.g. -0500 or +0230.\n * S\t\t\tThe date's ordinal suffix (st, nd, rd, or th). Works well with d.\n * '…' or \"…\"\tLiteral character sequence. Surrounding quotes are removed.\n * UTC\t\t\tMust be the first four characters of the mask. Converts the date from local time to UTC/GMT/Zulu time before applying the mask. The \"UTC:\" prefix is removed.\n */\n format(date: any, mask?: string, utc?: boolean): string {\n // You can't provide utc if you skip other args (use the \"UTC:\" mask prefix)\n if (arguments.length === 1 && Object.prototype.toString.call(date) === \"[object String]\" && !/\\d/.test(date)) {\n mask = date;\n date = undefined;\n }\n\n // Passing date through Date applies Date.parse, if necessary\n date = date ? new Date(date) : new Date();\n if (isNaN(date)) {\n throw SyntaxError(\"invalid date\");\n }\n\n mask = String(this._masks[mask] || mask || this._masks[\"default\"]);\n\n // Allow setting the utc argument via the mask\n if (mask.slice(0, 4) === \"UTC:\") {\n mask = mask.slice(4);\n utc = true;\n }\n\n let _ = utc ? \"getUTC\" : \"get\",\n d = date[_ + \"Date\"](),\n D = date[_ + \"Day\"](),\n m = date[_ + \"Month\"](),\n y = date[_ + \"FullYear\"](),\n H = date[_ + \"Hours\"](),\n M = date[_ + \"Minutes\"](),\n s = date[_ + \"Seconds\"](),\n L = date[_ + \"Milliseconds\"](),\n o = utc ? 0 : date.getTimezoneOffset(),\n flags = {\n d: d,\n dd: this._pad(d),\n ddd: this._i18n.dayNames[D],\n dddd: this._i18n.dayNames[D + 7],\n m: m + 1,\n mm: this._pad(m + 1),\n mmm: this._i18n.monthNames[m],\n mmmm: this._i18n.monthNames[m + 12],\n yy: String(y).slice(2),\n yyyy: y,\n h: H % 12 || 12,\n hh: this._pad(H % 12 || 12),\n H: H,\n HH: this._pad(H),\n M: M,\n MM: this._pad(M),\n s: s,\n ss: this._pad(s),\n l: this._pad(L, 3),\n L: this._pad(L > 99 ? Math.round(L / 10) : L),\n t: H < 12 ? \"a\" : \"p\",\n tt: H < 12 ? \"am\" : \"pm\",\n T: H < 12 ? \"A\" : \"P\",\n TT: H < 12 ? \"AM\" : \"PM\",\n Z: utc ? \"UTC\" : (String(date).match(this._timezone) || [\"\"]).pop().replace(this._timezoneClip, \"\"),\n o: (o > 0 ? \"-\" : \"+\") + this._pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),\n S: [\"th\", \"st\", \"nd\", \"rd\"][d % 10 > 3 ? 0 : ((d % 100 - d % 10) !== 10 ? 1 : 0) * d % 10]\n };\n\n return mask.replace(this._token, ($0) => {\n return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);\n });\n }\n\n private _pad(val: number, len: number = 2): string {\n let valAsString = String(val);\n while (valAsString.length < len) {\n valAsString = \"0\" + valAsString;\n }\n return valAsString;\n }\n\n formatCurrentDateToUtc(): string {\n return this.format(new Date(), 'UTC:yyyy-mm-dd\\'T\\'HH:MM:ss\\'Z\\'');\n }\n\n formatUtc(date: Date): string {\n return this.format(date, 'UTC:yyyy-mm-dd\\'T\\'HH:MM:ss\\'Z\\'');\n }\n}\n\nexport default new DateFormatter();","export interface SystemEventSubscription {\n off(): void;\n}\n\n/**\n * Event based module, publish / subscribe with hierarchical events and notifications.\n *\n * Usage:\n * Event.on('test_one_event', function() {\n * console.log('test 1 event fired');\n * console.log(arguments);\n * });\n *\n * Event.once('test_two_event', function() {\n * console.log('test 2 event fired, once.');\n * console.log(arguments);\n * });\n *\n * var three = Event.on('test_three_event', function() {\n * console.log('test 3 event fired');\n * });\n *\n * Event.fire('test_one_event', {eventID: 1}); // fires ok\n * Event.fire('test_two_event', {eventID: 2}); // fires ok\n * Event.fire('test_two_event', {eventID: 3}); // didnt trigger the event since it was unsubscribed (subscribed once only)\n * three.off(); // will remove the test_three_event\n * Event.fire('test_three_event', {eventID: 4}); // didnt trigger, was remove line above.\n *\n *\n */\nclass Event {\n /**\n * @constructor\n */\n constructor() {\n this._subscriptions = {};\n }\n\n private _subscriptions: any;\n\n /**\n * Attach a callback to an EventName\n */\n on(name: string | string[], callback: Function, context?: any): SystemEventSubscription {\n\n if(!(name)) {\n throw new Error('The name argument for Event.on is required');\n }\n\n if(!callback) {\n throw new Error('The callback argument name for Event.on is required');\n }\n\n context = context || this;\n\n // allows to subscribe multiple events for the same callback as single events. Clears the syntax on the other end.\n if (Array.isArray(name)) {\n let cleanFunctions: SystemEventSubscription[] = [];\n for (let eventIdx = 0, len = name.length, eventName; eventIdx < len; eventIdx++) {\n eventName = name[eventIdx];\n cleanFunctions.push(this.on(eventName, callback, context));\n }\n\n // Quit after done.\n return {\n off: () => cleanFunctions.forEach(subscription => subscription.off())\n };\n }\n\n if ('undefined' === typeof this._subscriptions[name]) {\n this._subscriptions[name] = [];\n }\n\n this._subscriptions[name].push({\n callback: callback,\n context: context\n });\n\n // return back a clean remove function with the params encapsulated\n return ((eName, eCallback, eContext): SystemEventSubscription => {\n return {\n off: () => {\n this.off(eName, eCallback, eContext);\n }\n };\n })(name, callback, context);\n }\n\n\n /**\n * Attach a callback to an name, but once only. Will disapear after first execution.\n *\n */\n once(name: string | string[], callback: Function, context?: any): SystemEventSubscription {\n context = context || this;\n var self = this,\n onceCallback: any = function() {\n self.off(name, onceCallback, context);\n callback.apply(this, arguments);\n };\n\n // preserve the original callback to allow subscribe once method to be removed later if needed.\n onceCallback._originalCallback = callback;\n\n return this.on(name, onceCallback, context);\n }\n\n\n /**\n * Notify subscriptions by calling their name\n */\n fire(name: string, params: any = {}) {\n let subscriptions = this.getAllSubscriptions();\n //clone the subscriptions array\n let events = [].concat(subscriptions[name] || []);\n\n events.forEach(event => {\n try {\n event.callback.call(event.context, params);\n } catch (ex) {\n console.error(ex);\n }\n });\n }\n\n\n /**\n * Remove a specific name callback from the stack.\n *\n * Used mostly internally.. but not only. A diffrent \".off\" is binded when you \".on\" and a referance to this \".off\"\n * is set.\n */\n off(name: string | string[], callback: Function, context: any): void {\n if (Array.isArray(name)) {\n name.forEach(eventName => this.off(eventName, callback, context));\n return;\n }\n context = context || this;\n\n let events = this._subscriptions[name],\n matchCallback = cb => {\n return cb === callback || cb._originalCallback === callback;\n };\n if (events === undefined) {\n return;\n }\n\n for (let eventIdx = events.length - 1; 0 <= eventIdx; eventIdx--) {\n let event = events[eventIdx];\n\n // TODO: make this code typesafe so that we can use '==='\n // eslint-disable-next-line\n if (matchCallback(event.callback) && event.context == context) {\n events.splice(eventIdx, 1);\n }\n }\n\n // if no callbacks left remove the event name from the tree completly.\n if (0 === events.length) {\n delete this._subscriptions[name];\n }\n }\n\n\n /**\n * Removes all the subscriptions by reseting the queue.\n *\n *\n * @returns {Object} this - an instance of the current running Event object.\n * @public\n */\n removeAllSubscriptions(): void {\n this._subscriptions = [];\n }\n\n\n /**\n * Get all the active subscriptions tree\n */\n getAllSubscriptions(): any {\n return this._subscriptions;\n }\n\n\n /**\n * Detach events that the object subscribe to.\n */\n detachEvents(events: any[]): void {\n // Remove reference events.\n if (!events) {\n return;\n }\n\n events.forEach((event) => {\n if (Array.isArray(event)) {\n event.forEach((cleanFn) => {\n cleanFn.off();\n });\n } else {\n event.off();\n }\n });\n }\n}\n\nexport default new Event();","export const DEFAULT_CONFIGS = {\n \"seo\": {\n \"categories\": {\n \"images\": {\n \"alt\": \"SEO_IMAGE_CATEGORIES_ALT\",\n \"title\": \"SEO_IMAGE_CATEGORIES_TITLE\"\n }\n },\n \"games\": {\n \"images\": {\n \"alt\": \"SEO_IMAGE_GAME_TITLE\"\n }\n }\n },\n \"header\": {\n \"menuItemsOverride\": {\n \"pokerCrossBrandMenuItem\": {\n \"display\": true,\n \"text\": \"poker\",\n \"menuItemIcon\": \"appHeaderPokerIcon\",\n \"menuItemIconAltText\": \"CROSS_POKER_ICON_ALT_TEXT\",\n },\n \"sportCrossBrandMenuItem\": {\n \"display\": true,\n \"text\": \"sport\",\n \"menuItemIcon\": \"appHeaderSportIcon\",\n },\n \"casinoCrossBrandMenuItem\": {\n \"display\": true\n }\n },\n \"header_buttons\": {\n \"languages\": {\n \"display\": false\n },\n \"help\": {\n \"display\": true\n },\n \"search\": {\n \"display\": true\n }\n },\n \"top_header_right\": [\n \"state-cross-brand\",\n \"app-safezone\",\n \"state-selection-button\",\n \"app-help-button\",\n \"app-language-switcher\"\n ],\n \"top_header_left\": [\n \"search-box-form\",\n \"app-responsible-icons\"\n ],\n \"cross_brand\": {\n \"defaultValue\": [],\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"pc\"\n }\n ],\n \"value\": [\"pokerCrossBrandMenuItem\", \"sportCrossBrandMenuItem\"]\n }\n ]\n }\n },\n \"adminBanner\": {\n \"enabled\": false\n },\n \"onboardingTour\": {\n \"enabled\": true,\n \"enabledAccordingToRegistrationTime\": true,\n \"enabledAccordingToAB\": false,\n \"stepIds\": [\n \"welcomeStep\",\n \"mainMenuStep\",\n \"userMenuStep\"\n ]\n },\n \"SDK\": {\n \"debug\": false,\n \"Analytics\": {\n \"GTMContainerID\": \"GTM-PQ2ZJ7J\",\n \"UATrackingID\": \"UA-66227773-1\",\n \"awaitForDataLayer\": \"true\"\n }\n },\n \"generalSettings\": {\n \"showRegisterButton\": true,\n \"gamesPreviewConfig\": {\n \"enabledOnPC\": false,\n \"shouldDisplayJackpot\": true\n }\n },\n \"miniOrbit\": {\n \"/cip\": {\n \"arenasHeaderButtons\": [\n {\n \"title\": \"LOBBY\",\n \"link\": \"/cip\",\n \"icon\": \"{assetsPath}/images/mini_orbit/cip/arenas_header_buttons/my_casino_icon.png\"\n },\n {\n \"title\": \"SLOTS\",\n \"link\": \"/cip/slots\",\n \"icon\": \"{assetsPath}/images/mini_orbit/cip/arenas_header_buttons/slots_icon.png\"\n },\n {\n \"title\": \"JACKPOTS\",\n \"link\": \"/cip/jackpots\",\n \"icon\": \"{assetsPath}/images/mini_orbit/cip/arenas_header_buttons/jackpots_icon.png\"\n },\n {\n \"title\": \"LIVE_CASINO\",\n \"link\": \"/cip/live-casino\",\n \"icon\": \"{assetsPath}/images/mini_orbit/cip/arenas_header_buttons/live_icon.png\"\n },\n {\n \"title\": \"CASINO_GAMES\",\n \"link\": \"/cip/casino-games\",\n \"icon\": \"{assetsPath}/images/mini_orbit/cip/arenas_header_buttons/casino_games_icon.png\"\n }\n ]\n },\n \"/cis\": {\n \"arenasHeaderButtons\": [\n {\n \"title\": \"LOBBY\",\n \"link\": \"/cis\",\n \"icon\": \"{assetsPath}/images/mini_orbit/cis/arenas_header_buttons/my_casino_icon.png\"\n },\n {\n \"title\": \"SLOTS\",\n \"link\": \"/cis/slots\",\n \"icon\": \"{assetsPath}/images/mini_orbit/cis/arenas_header_buttons/slots_icon.png\"\n },\n {\n \"title\": \"CASINO_GAMES\",\n \"link\": \"/cis/casino-games\",\n \"icon\": \"{assetsPath}/images/mini_orbit/cis/arenas_header_buttons/casino_games_icon.png\"\n },\n {\n \"title\": \"LIVE_CASINO\",\n \"link\": \"/cis/live-casino\",\n \"icon\": \"{assetsPath}/images/mini_orbit/cis/arenas_header_buttons/live_icon.png\"\n },\n {\n \"title\": \"JACKPOTS\",\n \"link\": \"/cis/jackpots\",\n \"icon\": \"{assetsPath}/images/mini_orbit/cis/arenas_header_buttons/jackpots_icon.png\"\n }\n ]\n }\n },\n \"theme\": {\n \"name\": \"casino888\"\n },\n \"arenas\": {\n \"slots\": {\n \"promotionalBanner\": {\n \"displayListPlace\": 4\n },\n \"advancedFilters\": {\n \"categories\": [\n {\n \"id\": \"volatility\",\n \"excludedFilters\": []\n },\n {\n \"id\": \"features\"\n },\n {\n \"id\": \"hasJackpot\"\n },\n {\n \"id\": \"themes\"\n },\n {\n \"id\": \"vendors\"\n }\n ]\n }\n },\n \"casinoGames\": {\n \"advancedFilters\": {\n \"categories\": [\n {\n \"id\": \"gameGroups\"\n },\n {\n \"id\": \"features\"\n },\n {\n \"id\": \"hasJackpot\"\n },\n {\n \"id\": \"vendors\"\n }\n ]\n }\n },\n \"videoSlidesArena\": {\n \"advancedFilters\": {\n \"categories\": [\n {\n \"id\": \"gameGroups\"\n },\n {\n \"id\": \"features\"\n },\n {\n \"id\": \"hasJackpot\"\n },\n {\n \"id\": \"vendors\"\n },\n {\n \"id\": \"themes\"\n }\n ]\n },\n \"slidesRules\": [\n {\n \"category\": \"videoStream\",\n \"slidesChunkSize\": 5\n },\n {\n \"category\": \"liveStream\",\n \"slidesChunkSize\": 2\n }/*,//temporarily remove - 0 still renders the banner for some reason\n {\n \"category\": \"banner\",\n \"slidesChunkSize\": 0\n },*/\n ],\n \"filters\": [\n {\n \"translationKey\": \"FREE_SPINS\",\n \"category\": \"features\",\n \"id\": \"freeSpins\",\n },\n {\n \"translationKey\": \"Fish\",\n \"category\": \"themes\",\n \"id\": \"theme_fish\",\n },\n {\n \"translationKey\": \"JACKPOT\",\n \"category\": \"hasJackpot\",\n \"id\": \"has-jackpot\",\n },\n {\n \"translationKey\": \"888 Exclusive\",\n \"category\": \"vendor\",\n \"id\": \"vendor_888\",\n },\n {\n \"translationKey\": \"Pragmatic\",\n \"category\": \"vendors\",\n \"id\": \"vendor_pragmatic\",\n },\n {\n \"translationKey\": \"Games Global\",\n \"category\": \"vendors\",\n \"id\": \"vendor_gamesglobal\",\n },\n {\n \"translationKey\": \"Blueprint\",\n \"category\": \"vendors\",\n \"id\": \"vendor_blueprint\",\n },\n {\n \"translationKey\": \"Greek Mythology\",\n \"category\": \"vendors\",\n \"id\": \"theme_greek_mythology\",\n }\n ],\n \"promotionalBanner\": {//values set just for testing\n \"componentID\": \"531497\",\n \"templateID\": \"392012\",\n \"bannerAdminPlaceholderId\": \"4B0F5741-8EF5-466A-A75C-DE98D678FF74\",\n }\n },\n \"exclusive888Games\": {\n \"advancedFilters\": {\n \"categories\": [\n {\n \"id\": \"volatility\"\n },\n {\n \"id\": \"gameGroups\"\n },\n {\n \"id\": \"features\"\n },\n {\n \"id\": \"hasJackpot\"\n },\n {\n \"id\": \"themes\"\n }\n ]\n }\n },\n \"newLiveCasinoAB\": {\n \"advancedFilters\": {\n \"categories\": [\n {\n \"id\": \"vendors\"\n },\n {\n \"id\": \"hasJackpot\"\n }\n ]\n }\n }\n },\n \"links\": {\n //Orbit links\n \"homeLink\": \"/\",\n \"jackpotsLink\": \"/jackpots/\",\n \"slotsLink\": \"/slots/\",\n \"progressiveVideoSlotsLink\": \"/progressive-video-slots/\",\n \"newGamesLink\": \"/new-games/\",\n \"exclusive888arenaLink\": \"/888-exclusive-games/\",\n \"casinoGamesLink\": \"/casino-games/\",\n \"liveCasinoLink\": \"/live-casino/\",\n \"scratchCardsLink\": \"/scratch-cards/\",\n \"rouletteLink\": \"/roulette/\",\n \"blackjackLink\": \"/blackjack/\",\n \"videoPokerLink\": \"/video-poker/\",\n \"virtualSportsLink\": \"/virtual-sports/\",\n \"instantWinGamesLink\": \"/instant-win-games/\",\n \"gamingHistoryLink\": \"/gaming-history/\",\n \"gamingSessionHistoryLink\": \"/session-history/\",\n \"tippingHistoryLink\": \"/tipping-history/\",\n \"openBetsLink\": \"/open-bets\",\n \"videoSlideExploreLink\": \"/video-slides/\",\n\n //B2C links\n \"promotionsLink\": \"/promotions/\",\n \"promotionsCISLink\": \"\",\n \"promotionsCIPLink\": \"\",\n \"vipClubLink\": \"/vipcasinoclub/\",\n \"vipLink\": \"/vip/\",\n \"gettingStartedLink\": \"/getting-started/\",\n \"bankingLink\": \"/banking/\",\n \"blogLink\": \"\",\n\n //Brands links\n \"casinoLink\": \"\",\n \"pokerLink\": \"\",\n \"sportLink\": \"\",\n \"888clubLink\": \"\",\n \"888SiteLink\": \"\",\n \"sicomLink\": \"\",\n \"sitixLink\": \"\",\n \"sishopLink\": \"\",\n\n //Responsible gaming links\n \"responsibleGamingLink\": {\n \"url\": \"\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n \"secondaryResponsibleGamingLink\": {\n \"url\": \"\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n \"gameCareLink\": {\n \"url\": \"https://www.gamcare.org.uk/\",\n \"shouldAppendSCutToUrl\": false\n },\n \"beGambleAwareLink\": {\n \"url\": \"https://www.begambleaware.org/\",\n \"shouldAppendSCutToUrl\": false\n },\n \"safeToPlayLink\": {\n \"url\": \"/safe-to-play/\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n \"selfExclusionLink\": {\n \"url\": \"\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n \"selfTestLink\": {\n \"url\": \"\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n\n //Mobile app links\n \"downloadAppLink\": \"\",\n \"mobileAppsLink\": \"\",\n\n //other links\n \"chatLink\": {\n \"urlBuilderStrategy\": \"useGNWP\"\n },\n \"helpLink\": {\n \"urlBuilderStrategy\": \"useGNWP\"\n },\n \"gamblingCommissionLink\": {\n \"url\": \"https://www.gamblingcommission.gov.uk/public-register/business/detail/39028\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n },\n \"menuItems\": {\n \"signUpMenuItem\": {\n \"text\": \"SIGN_UP\",\n \"dl\": \"19518\"\n },\n \"loyaltyIndicatorMenuItem\": {\n \"display\": false\n },\n \"myClubMenuItem\": {\n \"text\": \"MY_CLUB\",\n \"menuItemIcon\": \"sideMenuClub888\"\n },\n \"888clubMenuItem\": {\n \"text\": \"888CLUB\",\n \"linkId\": \"888clubLink\",\n \"menuItemIcon\": \"sideMenuClub888\"\n },\n \"homeMenuItem\": {\n \"text\": \"HOME\",\n \"linkId\": \"homeLink\",\n \"menuItemIcon\": \"sideMenuHome\"\n },\n \"jackpotsMenuItem\": {\n \"text\": \"INFO_TITLE_ARENA_JACKPOTS\",\n \"linkId\": \"jackpotsLink\",\n \"menuItemIcon\": \"sideMenuJackpots\"\n },\n \"slotsMenuItem\": {\n \"text\": \"SLOTS\",\n \"linkId\": \"slotsLink\",\n \"menuItemIcon\": \"sideMenuSlots\"\n },\n \"newGamesMenuItem\": {\n \"text\": \"INFO_TITLE_ARENA_NEW_GAMES\",\n \"linkId\": \"newGamesLink\",\n \"menuItemIcon\": \"sideMenuNewGames\"\n },\n \"exclusive888arenaMenuItem\": {\n \"text\": \"EXCLUSIVE\",\n \"linkId\": \"exclusive888arenaLink\",\n \"menuItemIcon\": \"sideMenuExclusive888\"\n },\n \"casinoMenuItem\": {\n \"text\": \"CASINO_GAMES\",\n \"linkId\": \"casinoGamesLink\",\n \"menuItemIcon\": \"sideMenuCasinoGames\"\n },\n \"liveCasinoMenuItem\": {\n \"text\": \"LIVE_CASINO\",\n \"linkId\": \"liveCasinoLink\",\n \"menuItemIcon\": \"sideMenuLiveCasino\"\n },\n \"scratchCardsMenuItem\": {\n \"text\": \"SCRATCHCARDS\",\n \"linkId\": \"scratchCardsLink\",\n \"menuItemIcon\": \"sideMenuScratchCards\"\n },\n \"rouletteMenuItem\": {\n \"text\": \"ROULETTE\",\n \"linkId\": \"rouletteLink\",\n \"menuItemIcon\": \"sideMenuRoulette\"\n },\n \"blackjackMenuItem\": {\n \"text\": \"BLACKJACK\",\n \"linkId\": \"blackjackLink\",\n \"menuItemIcon\": \"sideMenuBlackjack\"\n },\n \"videoPokerMenuItem\": {\n \"text\": \"VIDEO_POKER\",\n \"linkId\": \"videoPokerLink\",\n \"menuItemIcon\": \"sideMenuVideoPoker\"\n },\n \"vipMenuItem\": {\n \"text\": \"VIP\",\n \"linkId\": \"vipLink\",\n \"menuItemIcon\": \"sideMenuVip\"\n },\n \"vipClubMenuItem\": {\n \"text\": \"VIP_CLUB\",\n \"linkId\": \"vipClubLink\",\n \"menuItemIcon\": \"sideMenuVip\"\n },\n \"gettingStartedMenuItem\": {\n \"text\": \"GETTING_STARTED\",\n \"linkId\": \"gettingStartedLink\",\n \"menuItemIcon\": \"sideMenuGettingStarted\"\n },\n \"bankingMenuItem\": {\n \"text\": \"BANKING\",\n \"linkId\": \"bankingLink\",\n \"menuItemIcon\": \"sideMenuBanking\"\n },\n \"depositMenuItem\": {\n \"text\": \"DEPOSIT_SIDE_MENU\",\n \"menuItemIcon\": \"sideMenuDeposit\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"IsAuthorized\",\n \"operator\": \"equal\",\n \"value\": true\n },\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"promotionsMenuItem\": {\n \"text\": \"PROMOTIONS\",\n \"linkId\": \"promotionsLink\",\n \"menuItemIcon\": \"sideMenuPromotions\"\n },\n \"promotionsCIPMenuItem\": {\n \"text\": \"PROMOTIONS\",\n \"linkId\": \"promotionsCIPLink\",\n \"menuItemIcon\": \"sideMenuPromotions\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"_IsCIP\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"promotionsCISMenuItem\": {\n \"text\": \"PROMOTIONS\",\n \"linkId\": \"promotionsCISLink\",\n \"menuItemIcon\": \"sideMenuPromotions\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"_IsCIS\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"historyMenuItem\": {\n \"text\": \"HISTORY\",\n \"menuItemIcon\": \"historyIcon\"\n },\n \"gamingHistoryMenuItem\": {\n \"text\": \"GAMING_HISTORY\",\n \"linkId\": \"gamingHistoryLink\",\n \"menuItemIcon\": \"gamingHistoryIcon\"\n },\n \"gamingSessionHistoryMenuItem\": {\n \"text\": \"MENU_ITEM_GAMING_SESSION_HISTORY\",\n \"linkId\": \"gamingSessionHistoryLink\",\n \"menuItemIcon\": \"gamingHistoryIcon\"\n },\n \"casinoCrossBrandMenuItem\": {\n \"text\": \"casino\",\n \"linkId\": \"casinoLink\",\n \"menuItemIcon\": \"appHeaderCasinoIcon\",\n \"display\": false\n },\n \"pokerCrossBrandMenuItem\": {\n \"text\": \"888POKER\",\n \"linkId\": \"pokerLink\",\n \"menuItemIcon\": \"sideMenuPokerChip\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"sportCrossBrandMenuItem\": {\n \"text\": \"888SPORT\",\n \"linkId\": \"sportLink\",\n \"menuItemIcon\": \"sideMenuSportFootball\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"blogMenuItem\": {\n \"text\": \"BLOG\",\n \"linkId\": \"blogLink\",\n \"menuItemIcon\": \"sideMenuBlog\"\n },\n \"chatMenuItem\": {\n \"text\": \"LIVE_CHAT\",\n \"linkId\": \"chatLink\",\n \"menuItemIcon\": \"sideMenuLiveChat\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"_IsChatEligible\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"installPWAMenuItem\": {\n \"text\": \"PWA_ADD_TO_HOME_SCREEN\",\n \"menuItemIcon\": \"sideMenuDownloadApp\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"isPWAInstallable\",\n \"operator\": \"equal\",\n \"value\": true\n },\n {\n \"id\": \"operationSystem\",\n \"operator\": \"equal\",\n \"value\": \"android\"\n },\n {\n \"id\": \"_IsUkOrIrl\",\n \"operator\": \"equal\",\n \"value\": \"false\"\n },\n {\n \"id\": \"_IsAppBannerUKorIRL\",\n \"operator\": \"equal\",\n \"value\": \"false\"\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"downloadAppMenuItem\": {\n \"text\": \"DOWNLOAD_APP\",\n \"linkId\": \"downloadAppLink\",\n \"menuItemIcon\": \"sideMenuDownloadApp\"\n },\n \"mobileAppsMenuItem\": {\n \"text\": \"DOWNLOAD_APP\",\n \"linkId\": \"mobileAppsLink\",\n \"menuItemIcon\": \"mobileAppsIcon\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n },\n {\n \"id\": \"isHybrid\",\n \"operator\": \"equal\",\n \"value\": false\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"transactionHistoryMenuItem\": {\n \"text\": \"TRANSACTION_HISTORY\",\n \"menuItemIcon\": \"transactionHistoryIcon\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"cashierUploadDocumentsMenuItem\": {\n \"text\": \"UPLOAD_DOCUMENTS\",\n \"menuItemIcon\": \"uploadDocumentsIcon\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"tippingHistoryMenuItem\": {\n \"text\": \"TIPPING_HISTORY\",\n \"menuItemIcon\": \"tippingHistoryIcon\",\n \"linkId\": \"tippingHistoryLink\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"helpCenterMenuItem\": {\n \"text\": \"HELP_CENTER\",\n \"menuItemIcon\": \"helpCenterIcon\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n },\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"gameCareMenuItem\": {\n \"text\": \"\",\n \"imageOnlyRendering\": true,\n \"linkId\": \"gameCareLink\",\n \"menuItemIconSource\": \"themeImages\",\n \"menuItemIcon\": \"responsibleGambling.gameCareLogo\",\n \"menuItemIconAltText\": \"GameCare\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"beGambleAwareMenuItem\": {\n \"text\": \"\",\n \"imageOnlyRendering\": true,\n \"linkId\": \"beGambleAwareLink\",\n \"menuItemIconSource\": \"themeImages\",\n \"menuItemIcon\": \"responsibleGambling.beGambleAwareLogo\",\n \"menuItemIconAltText\": \"BeGambleAware.org\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"controlCenterMenuItem\": {\n \"text\": \"SAFE_ZONE\",\n \"menuItemIconSource\": \"themeIcons\",\n \"menuItemIcon\": \"controlCenterIcon\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n },\n {\n \"id\": \"regulationID\",\n \"operator\": \"equal\",\n \"value\": 255\n },\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"equal\",\n \"value\": false\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"timeSpentReminderMenuItem\": {\n \"text\": \"TSR_MENU_LINK_LABEL\",\n \"menuItemIcon\": \"timerIcon\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"compPointsMenuItem\": {\n \"text\": \"COMP_POINTS\",\n \"menuItemIcon\": \"compPointsIcon\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"_IsCIP\",\n \"operator\": \"=\",\n \"value\": true\n },\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"reverseWithdrawalMenuItem\": {\n \"text\": \"REVERSE_WITHDRAWAL\",\n \"menuItemIcon\": \"reverseWithdrawalIcon\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"touchIdMenuItem\": {\n \"text\": \"MENU_ITEM_TOUCH_ID\",\n \"menuItemIcon\": \"biometricLoginIcon\"\n },\n \"inactivityTimeoutSettingsMenuItem\": {\n \"text\": \"MENU_ITEM_INACTIVITY_TIMEOUT_SETTINGS\",\n \"menuItemIcon\": \"timerIcon\"\n },\n \"aboutDialogMenuItem\": {\n \"text\": \"MENU_ITEM_ABOUT\",\n \"menuItemIcon\": \"aboutIcon\"\n },\n \"hybridInfoMenuItem\": {\n \"text\": \"MENU_ITEM_HYBRID_INFO\"\n },\n \"pushNotificationsPermissionsRequest\": {\n \"text\": \"\",\n \"display\": false,\n },\n \"testRegulationSpecificMenuItem\": { //this menu item is here for demo purposes\n \"text\": \"Temp test\",\n \"display\": false\n },\n \"logoutMenuItem\": {\n \"text\": \"LOGOUT\"\n },\n \"openBetsMenuItem\": {\n \"text\": \"OPEN_BETS\",\n \"menuItemIcon\": \"openBetsIcon\",\n \"linkId\": \"openBetsLink\",\n \"display\": true\n },\n \"videoSlideExploreMenuItem\": {\n \"text\": \"EXPLORE\",\n \"menuItemIcon\": \"exploreOutlinedIcon\",\n \"linkId\": \"videoSlideExploreLink\",\n \"display\": false\n }\n\n },\n \"bottomNavigationBar\": {\n \"menuItemsOrder\": [\n \"homeMenuItem\",\n \"liveCasinoMenuItem\",\n \"videoSlideExploreMenuItem\",\n \"slotsMenuItem\",\n \"casinoMenuItem\",\n \"depositMenuItem\"\n ]\n },\n \"drawer\": {\n \"userMenuItems\": [],\n \"saveGamesWidget\": {\n \"display\": false\n }\n }\n};","export default {\n \"iso3\": \"eng\",\n \"iso2\": \"en\",\n \"text\": {\n \"100200\": \"We're sorry, this game seems to be restricted in your area.\",\n \"GAME_SAVED_NOTIFICATION_TEXT\": \"Saved to profile!\",\n \"GAME_SAVED_NOTIFICATION_CTA\": \"See Items\",\n \"MY_SAVED_GAMES\": \"My Saved Games\",\n \"ALL\": \"ALL\",\n \"CURRENT_LANGUAGE\": \"English\",\n \"CIP8_TITLE\": \"888CASINO GAMES\",\n \"Login\": \"LOG IN\",\n \"WITHDRAW\": \"WITHDRAW\",\n \"CASHIER\": \"Cashier\",\n \"Search\": \"Search your game...\",\n \"REWARDS\": \"Rewards\",\n \"HOME\": \"Home\",\n \"888_COM\": \"888.com\",\n \"888_POKER\": \"poker\",\n \"888_CASINO\": \"casino\",\n \"888_BINGO\": \"bingo\",\n \"888_SPORT\": \"sport\",\n \"SIGN_UP\": \"SIGN UP\",\n \"DEPOSIT_SIDE_MENU\": \"Deposit\",\n \"MY_ACCOUNT\": \"My Account\",\n \"BALANCE\": \"Current Balance\",\n \"MINI_ORBIT_BALANCE\": \"Balance:\",\n \"LOGOUT\": \"Log out\",\n \"GREETING_MORNING\": \"Good Morning\",\n \"GREETING_AFTERNOON\": \"Good Afternoon\",\n \"GREETING_EVENING\": \"Good Evening\",\n \"GREETING_NIGHT\": \"Good Night\",\n \"GREETING_DEFAULT\": \"Hello\",\n \"MRS_TITLE\": \"Mrs.\",\n \"MR_TITLE\": \"Mr.\",\n \"SLOTS\": \"Slots\",\n \"LOBBY\": \"Lobby\",\n \"SLOTS_JACKPOTS\": \"Slots & Jackpots\",\n \"CARD_TABLE_GAMES\": \"Card & Table Games\",\n \"ALL_SDM_GAMES\": \"All SDM Games\",\n \"CASINO_GAMES\": \"Casino Games\",\n \"LIVE_CASINO\": \"Live Casino\",\n \"888_EXCLUSIVE_GAMES\": \"888 Exclusive Games\",\n \"PROMOTIONS\": \"Promotions\",\n \"888SPORT\": \"Sport\",\n \"VIP_CLUB\": \"VIP Club\",\n \"PWA_INSTALL\": \"Install App\",\n \"PWA_ADD_TO_HOME_SCREEN\": \"Add to Home Screen\",\n \"PWA_TAP\": \"Tap\",\n \"PWA_QUICK_LAUNCH\": \"Quick launch {BRAND}\",\n \"GETTING_STARTED\": \"Getting Started\",\n \"BANKING\": \"Banking\",\n \"VIP\": \"VIP\",\n \"BLOG\": \"Blog\",\n \"TODAY_WINNERS\": \"Today’s Winners\",\n \"SUPPORT_ID_MESSAGE\": \"Support ID\",\n \"DEPOSIT\": \"DEPOSIT\",\n \"CHOOSE_LANG\": \"Choose your language:\",\n \"CHOOSE_COUNTRY\": \"Choose your country:\",\n \"SIGN_IN_PLAY\": \"SIGN IN & PLAY\",\n \"NEW\": \"New\",\n \"JACKPOT\": \"Jackpot\",\n \"BRAND_EXCLUSIVE_FILTER\": \"{brandName} Exclusive\",\n \"EXCLUSIVE\": \"888 Exclusive\",\n \"SI_EXCLUSIVE\": \"SI Exclusive\",\n \"1-25_LINES\": \"1-25 lines\",\n \"25_PLUS_LINES\": \"25+ lines\",\n \"INFO_TITLE_ARENA_888_EXCLUSIVE_GAMES\": \"Exclusive Games\",\n \"INFO_TEXT_ARENA_888_EXCLUSIVE_GAMES\": \"888casino is home to an exclusive selection of online casino games. Play the hottest online slots from Section8, and enjoy fantastic casino games like online Roulette, online Blackjack and Video Poker. Our exclusive casino games also include Baccarat, Keno, and instant win games. Let’s get ready for some casino fun!\",\n \"INFO_TITLE_ARENA_SLOTS\": \"Online Slots\",\n \"INFO_TITLE_ARENA_VIDEO_SLOTS\": \"Video Slots\",\n \"INFO_TEXT_ARENA_SLOTS\": \"Choose from over 1000 of the best quality slot games, anywhere online. Enjoy a wide variety of features such as Bonus Games, Expanding Wilds, Free Spins and Huge Jackpots. Hunt for treasure in ancient Egypt, uncover the Leprechaun’s coveted pot o’ gold or spin for big wins on classic fruit machines. Whatever tickles your fancy, we’ve got it!\",\n \"INFO_TITLE_ARENA_CASINO\": \"Casino Games\",\n \"INFO_TEXT_ARENA_CASINO\": \"The cards are shuffled, the wheel is spinning and your seat is waiting. Play only the very best card and table games online. Choose from a variety of Roulette games including European, American, Low, High and Super Stakes. Prefer Blackjack? Play multiple hands at the same time. From Texas Hold’em to Caribbean, be sure to find your poker preference!\",\n \"INFO_TITLE_ARENA_ROULETTE\": \"Roulette Online\",\n \"INFO_TEXT_ARENA_ROULETTE\": \"Try to hit your lucky numbers at one of 888casino’s premier online roulette tables. Choose from our wide variety of top roulette game styles including European, American and French. Whether you’re a High Roller or prefer low stakes, there’s a roulette game for you. There’s nothing like the thrill of waiting for that ball to land when you play roulette!\",\n \"INFO_TITLE_ARENA_NEW_GAMES\": \"New Games\",\n \"INFO_TEXT_ARENA_NEW_GAMES\": \" \",\n \"INFO_TITLE_ARENA_BLACKJACK\": \"Online Blackjack\",\n \"INFO_TEXT_ARENA_BLACKJACK\": \"The cards are shuffled and your seat is waiting for some of the best online blackjack games you’ll find! Play blackjack at 888casino on your own terms with Super Stakes, Side Bets and more. One hand of blackjack not enough for you? Play our Multihand Blackjack game for three chances to hit 21, at the same time!\",\n \"INFO_TITLE_ARENA_VIDEO_POKER\": \"Video Poker Online\",\n \"INFO_TEXT_ARENA_VIDEO_POKER\": \"If you think you’re a real poker pro then you’ve come to the right casino! Go for that elusive Royal Flush in our various types of video poker games. If you’re into 5-card draw or prefer the ever-popular Texas Hold’em then you’re sure to find your new favourite online video poker game at 888casino.\",\n \"INFO_TITLE_ARENA_SCRATCH_CARDS\": \"Scratch Cards Online\",\n \"INFO_TEXT_ARENA_SCRATCH_CARDS\": \"There’s nothing like a quick win on one of 888casino’s exciting scratch card games. Ideal for some strategy-free fun, pick an online scratch card in the theme of your choice. Reveal your Irish riches or discover pharaoh’s fortune, it’s up to you. Simply choose the amount you want to bet and see if you’re a scratch card winner!\",\n \"INFO_TITLE_ARENA_JACKPOTS\": \"Jackpots\",\n \"INFO_TEXT_ARENA_JACKPOTS\": \"Jackpot games are bubbling over with unbelievably huge cash prizes. Play with our slots games and you’re in lots of joy and fun. These include daily jackpots, progressive jackpots, and pooled jackpots, you are one click away from the absolute perfect play; enjoy jackpot slots games like Millionaire Genie, Mermaid’s Millions, or Noche De Los Muertos. Click it to pick it. Spin it to try your luck to win it. The fun starts NOW!\",\n \"INFO_TITLE_ARENA_ALL_GAMES\": \"All Games\",\n \"VIRTUAL_SPORTS\": \"Virtual Sports\",\n \"INFO_TITLE_ARENA_VIRTUAL_SPORTS\": \"Virtual Sports\",\n \"INFO_TEXT_ARENA_VIRTUAL_SPORTS\": \"Virtual Sports brings you a wide variety of computer-generated sports games that you’ll be able to bet on. So, whether football's your thing, or darts, or anything else, you can be sure to find what you're looking for. Enter the world of virtual betting today.\",\n \"PROMO_ELIGIBLE_GAMES\": \"Promo Eligible Games\",\n \"NETENT_SLOTS\": \"NETENT SLOTS\",\n \"BONUS\": \"Bonus\",\n \"FREE_SPINS\": \"Free Spins\",\n \"CLEAR_ALL\": \"Clear All\",\n \"FILTER\": \"Filter\",\n \"APPLY\": \"Apply\",\n \"ROULETTE\": \"Roulette\",\n \"ELITE_LOUNGE\": \"Elite Lounge\",\n \"BLACKJACK\": \"Blackjack\",\n \"PROGRESSIVE_SLOTS\": \"Progressive Slots\",\n \"BACCARAT\": \"Baccarat\",\n \"POKER\": \"Poker\",\n \"KENO\": \"Keno\",\n \"CRAPS\": \"Craps\",\n \"HIGH_LIMIT\": \"High Limit\",\n \"LANGUAGES\": \"Languages\",\n \"HELP\": \"Help\",\n \"LIVE_CHAT\": \"Live Chat\",\n \"DEMO\": \"Demo\",\n \"PLAY\": \"Play\",\n \"NOT_NOW\": \"Not now\",\n \"MAYBE_LATER\": \"Maybe later\",\n \"NO_THANKS\": \"No, thanks\",\n \"LETS_PLAY\": \"Let's Play!\",\n \"GOT_IT\": \"GOT IT!\",\n \"LIMITS\": \"Limits\",\n \"LIVE\": \"Live\",\n \"SEE_ALL\": \"See All\",\n \"WINNING_IN_THE_LAST_30_DAYS\": \"Winning in the last 30 days\",\n \"TOTAL_JACKPOTS\": \"Total Jackpots\",\n \"TOP_GAMES\": \"TOP SLOT GAMES\",\n \"TOP_PROGRESSIVES\": \"TOP PROGRESSIVES\",\n \"LIVE_CASINO_TABLES\": \"SELECTED LIVE TABLES\",\n \"TOP_CASINO_GAMES\": \"TOP CASINO GAMES\",\n \"JACKPOTS\": \"JACKPOTS\",\n \"RECENTLY_PLAYED\": \"Recently Played\",\n \"BECAUSE_YOU_PLAYED\": \"Because You Played {gameName}\",\n \"MINIMUM_BET\": \"Min Bet\",\n \"MAXIMUM_BET\": \"Max Bet\",\n \"PAYLINES\": \"Paylines\",\n \"BONUS_GAME\": \"Bonus game\",\n \"MAX_PER_SPOT\": \"Max Per Spot\",\n \"MULTIPLAYER\": \"Multiplayer\",\n \"DECKS\": \"Decks\",\n \"SIDE_BETS\": \"Side Bets\",\n \"ABOUT\": \"About\",\n \"GAME_JACKPOT\": \"Game Jackpot\",\n \"SLOT_GAMES\": \"Slot Games\",\n \"CARD_AND_TABLE_GAMES\": \"Card & Table Games\",\n \"JACKPOT_GAMES\": \"Jackpot Games\",\n \"JACKPOT_CENTRAL\": \"Jackpot Central\",\n \"OTHER\": \"Other\",\n \"POKER_GAMES\": \"Poker Games\",\n \"YOUR_SEARCH_DID_NOT_MATCH_ANY_GAMES\": \"Your search did not match any games\",\n \"PREMIER_ONLINE_LIVE_CASINO\": \"Premier live casino\",\n \"All_SLOTS\": \"All Slots\",\n \"All_CARD_AND_TABLE_GAMES\": \"All Card & Table Games\",\n \"USEFUL_LINKS\": \"Useful links\",\n \"PRIVACY_POLICY\": \"Privacy Policy\",\n \"USER_AGREEMENT\": \"User Agreement\",\n \"RESPONSIBLE_GAMBLING\": \"Responsible Gambling\",\n \"SAFE_ZONE\": \"Control Center\",\n \"CONTACT\": \"Contact Us\",\n \"COMP_POINTS\": \"Comp Points\",\n \"HISTORY\": \"History\",\n \"GAMING_HISTORY\": \"Gaming History\",\n \"TIPPING_HISTORY\": \"Tipping History\",\n \"TIPPING_HISTORY_AMOUNT\": \"Tip Amount\",\n \"CASHIER_HISTORY\": \"Cashier History\",\n \"GAMING_SESSION_HISTORY\": \"Session History\",\n \"MY_CHALLENGES\": \"My Challenges\",\n \"SCRATCHCARDS\": \"Scratch cards\",\n \"QUICK_LINKS_TITLE\": \"QUICK LINKS\",\n \"NO_SEARCH_RESULTS\": \"No Search Results Found...\",\n \"SEARCH_YOUR_GAME\": \"Find Games, Themes, Studios\",\n \"SEARCH_RESULTS_TITLE\": \"TOP SEARCH RESULTS\",\n \"SUGGESTED_GAMES\": \"SUGGESTED GAMES\",\n \"SUGGESTED_CATEGORIES\": \"SUGGESTED CATEGORIES\",\n \"BACK\": \"Back\",\n \"HIT_THE_JACKPOT\": \"Hit The Jackpot\",\n \"OUR_JACKPOTS\": \"OUR JACKPOTS\",\n \"MY_CLUB\": \"My Club\",\n \"LOW_ROLLERS\": \"Low Rollers\",\n \"CASH_BALANCE\": \"Cash\",\n \"BONUS_BALANCE\": \"Bonus\",\n \"YOU_MAY_LIKE\": \"YOU MAY LIKE\",\n \"TOP_PICKS_FOR\": \"TOP PICKS FOR {USERNAME}\",\n \"888CLUB\": \"888club\",\n \"888POKER\": \"Poker\",\n \"BACK_TO_888POKER\": \"Back to 888poker\",\n \"BACK_TO_888SPORT\": \"Back to 888sport\",\n \"VIDEO_POKER_GAMES\": \"Video Poker Games\",\n \"VIDEO_POKER\": \"Video Poker\",\n \"SEO_IMAGE_CATEGORIES_TITLE\": \"Best {categoryName} experience at 888casino\",\n \"SEO_IMAGE_CATEGORIES_ALT\": \"online casino - {categoryName}\",\n \"SEO_IMAGE_GAME_TITLE\": \"{gameName} {categoryName}\",\n \"TOP_NETENT_SLOTS\": \"TOP NETENT SLOTS\",\n \"PLAY_50_FREESPINS\": \"PLAY 50 FREESPINS\",\n \"HOLIDAY_GAMES\": \"HOLIDAY GAMES\",\n \"ORIGINALS\": \"888 Originals\",\n \"RELATED_GAMES\": \"BECAUSE YOU PICKED: {gameName}\",\n \"DAILY_JACKPOT_GAMES\": \"Daily Jackpot Games\",\n \"TOP_EXCLUSIVE_SLOTS\": \"Top Exclusive Slots\",\n \"TOP_10_IN_YOUR_COUNTRY\": \"Top 10 in your country\",\n \"NEW_GAMES_LIST_TITLE\": \"New Online Casino Games\",\n \"NEW_GAMES\": \"New Games\",\n \"DAILY_JACKPOT\": \"Daily Jackpot\",\n \"PROGRESSIVE_JACKPOT\": \"Progressive Jackpot\",\n \"777_JUKEBOX\": \"777 Jukebox\",\n \"RETRO_SLOTS\": \"Retro Slots\",\n \"SELECTED_LIVE_CASINO_TABLES\": \"Selected Live Casino Tables\",\n \"BLACKJACK_GAMES\": \"Blackjack Games\",\n \"ROULETTE_GAMES\": \"Roulette Games\",\n \"DROP_THE_JACKPOT\": \"Drop The Jackpot\",\n \"777_LIVE\": \"777 Live\",\n \"ROULETTE_&_BLACKJACK\": \"Roulette & Blackjack\",\n \"SCRATCH_CARDS\": \"Scratch Cards\",\n \"CLASSIC_SLOTS\": \"Classic Slots\",\n \"777_FAVORITES\": \"777 Favorites\",\n \"FEATURED\": \"Featured\",\n \"LOW_VOLATILITY\": \"Low Volatility\",\n \"HIGH_VOLATILITY\": \"High Volatility\",\n \"IN_HOUSE_SLOTS\": \"In House Slots\",\n \"MORE_GAMES\": \"More Games\",\n \"ALL_JACKPOTS\": \"All Jackpots\",\n \"ONLINE_JACKPOTS\": \"Online Jackpots\",\n \"All_GAMES\": \"All Games\",\n \"POPULAR_GAMES_TITLE\": \"Popular Games\",\n \"MORE\": \"More\",\n \"HOMEPAGE-SPOOKY_SPINS\": \"Spooky Spins\",\n \"THE_DAILY_JACKPOT\": \"888 Daily Jackpot\",\n \"HIGH_NOON_JACKPOT\": \"High Noon Jackpot\",\n \"TWILIGHT_JACKPOT\": \"Twilight Jackpot\",\n \"POWER8_JACKPOT\": \"POWER 8 JACKPOT\",\n \"RED_TIGER_DAILY_JACKPOT\": \"Red Tiger's Daily Jackpot\",\n \"RED_TIGER_HOURLY_JACKPOT\": \"Red Tiger Hourly Jackpot\",\n \"PROGRESSIVE_JACKPOTS\": \"Progressive Jackpots\",\n \"INSTANT_GAMES\": \"Instant Win Games\",\n \"INSTANT_WIN_GAMES_ARENA\": \"Instant Win Games\",\n \"ALL_INSTANT_WIN_GAMES\": \"All Instant Win Games\",\n \"INFO_TITLE_ARENA_INSTANT_WIN_GAMES\": \"Instant Win Games\",\n \"INFO_TEXT_ARENA_INSTANT_WIN_GAMES\": \"Instant Win Games are so much FUN! Get ready to scratch & match with the best scratch cards under the sun. We’ve got many games for you to enjoy like Volcano Eruption, Panda Mania, and Merlin’s Millions. Short on time? No worries, try our Keno and Bingo games, or sizzling-hot new games like Chicken Extreme, 7-UP, and Epic Gems. It’s a party and you’re invited. Instant Win Games are really easy to play. No skills needed – just play & win!\",\n \"MEGAWAYS_TITLE\": \"Megaways™\",\n \"TRENDING_SLOTS\": \"TRENDING SLOTS\",\n \"EXCLUSIVE_LIVE_TABLES\": \"EXCLUSIVE LIVE TABLES\",\n \"BLACKJACK_AND_ROULETTE_GAMES\": \"BLACKJACK & ROULETTE GAMES\",\n \"ALL_888_EXCLUSIVE_GAMES\": \"ALL 888 EXCLUSIVE GAMES\",\n \"LIVE_ARENA_TABLE_IS_CLOSED_MESSAGE\": \"Table Opens at\",\n \"LIVE_CASINO_TABLE_FULL_PC\": \"Table Full\",\n \"LIVE_CASINO_TABLE_FULL_MOBILE\": \"Full\",\n \"GAME_SHOWS\": \"Game Shows\",\n \"TOP_EVO_GAMES\": \"Top Games\",\n \"FOR_YOU_GAMES\": \"For You\",\n \"AB_TEST_AI_LIST_TITLE_D1_V1\": \"Top Rated Games for {USERNAME}\",\n \"AB_TEST_AI_LIST_TITLE_D1_V2\": \"Recommended games for {USERNAME}\",\n \"AB_TEST_AI_LIST_TITLE_D3_V1\": \"Selected Games for {USERNAME}\",\n \"AB_TEST_AI_LIST_TITLE_D3_V2\": \"Chosen Games for {USERNAME}\",\n \"AB_TEST_AI_LIST_TITLE_D3_V3\": \"Exclusive games for {USERNAME}\",\n \"AB_TEST_AI_LIST_TITLE_D3_V4\": \"Recommended games for you\",\n \"LETS_PLAY_MONOPOLY\": \"Let's play Monopoly\",\n \"TOP_TRENDING_SLOTS\": \"Top Trending Slots\",\n \"TOP_PAYING_SLOTS\": \"Top Paying Slots\",\n \"RECENTLY_ADDED\": \"Recently Added\",\n \"TOP_SLOTS\": \"Top Slots\",\n \"REAL_MONEY_GAME\": \"This game can be played with cash balance only.\",\n \"CANT_CONNECT_ERROR_TITLE\": \"Can't connect\",\n \"CANT_CONNECT_ERROR_MESSAGE\": \"Sorry, something went wrong on our end.\",\n \"RETRY\": \"Retry\",\n \"TRANSACTION_HISTORY\": \"Transaction History\",\n \"UPLOAD_DOCUMENTS\": \"Upload Documents\",\n \"BRAND_NEW\": \"Brand New\",\n \"HOTTEST_NEW_GAMES\": \"Hottest new games\",\n \"SINCE_LAST_MONTH\": \"Since Last Month\",\n \"FROM_LAST_MONTH\": \"From Last Month\",\n \"SAFE_GAMBLING_TOOLTIP\": \"Safer Gambling Tools & Information\",\n \"PLAYER_LIMITS_TOASTER_TITLE\": \"Your Limits\",\n \"PLAYER_LIMITS_TOASTER_DAILY_LABEL\": \"Daily\",\n \"PLAYER_LIMITS_TOASTER_WEEKLY_LABEL\": \"Weekly\",\n \"PLAYER_LIMITS_TOASTER_MONTHLY_LABEL\": \"Monthly\",\n \"PLAYER_LIMITS_TOASTER_DEPOSIT_LABEL\": \"Deposit\",\n \"PLAYER_LIMITS_TOASTER_PLAY_TIME_LABEL\": \"Play Time\",\n \"PLAYER_LIMITS_TOASTER_BANKROLL_LABEL\": \"Bankroll\",\n \"PLAYER_LIMITS_TOASTER_HOUR_LABEL\": \"hour\",\n \"GAME_POPUP_TITLE\": \"Welcome back\",\n \"GAME_POPUP_SUB_TITLE\": \"Suggested game\",\n \"GAME_POPUP_DESCRIPTION\": \"Your 888slots activity:\",\n \"GAME_POPUP_GAME_UNAVAILABLE\": \"Sorry, this game is unavailable\",\n \"GAME_POPUP_MAY_LIKE\": \"You may also like\",\n \"PARTY_JACKPOT_WELCOME_POPUP_TITLE\": \"HOORAY! You’re about to play a {partyJackpotName} game!\",\n \"PARTY_JACKPOT_WELCOME_POPUP_TITLE_ALL_LIVE_CASINO\": \"LUCKY YOU!\",\n \"PARTY_JACKPOT_WELCOME_POPUP_SUB_TITLE_ALL_LIVE_CASINO\": \"All Live Casino games are part of our HOT NEW jackpot!\",\n \"PARTY_JACKPOT_WELCOME_POPUP_DESCRIPTION\": \"The Jackpot can be won on any cash balance bet.\\nAll Party Jackpot prizes are bonuses, which are instantly credited to your account.\",\n \"PARTY_JACKPOT_WELCOME_POPUP_DESCRIPTION_REAL\": \"Any real money bet on a Party Jackpot game could win a cash prize!\\nThe Party Jackpot will pay daily!\",\n \"PARTY_JACKPOT_WELCOME_POPUP_DESCRIPTION_REAL_HOURLY\": \"Any real money bet on a Party Jackpot game could win a cash prize!\\nThe Party Jackpot will pay hourly between {startHour} to {endHour}\",\n \"PARTY_JACKPOT_WELCOME_POPUP_DESCRIPTION_REAL_HOURLY_ALL_LIVE_CASINO\": \"Real money bets on any Live Casino game could win the jackpot!\\nThe Live Casino Jackpot must pay every hour, {startHour} - {endHour}, and is fully funded by us.\",\n \"PARTY_JACKPOT_WELCOME_POPUP_BOTTOM_NOTE\": \"Bonus: wager 30x (varies by game type), 90 day expiry, wins capped at $500, valid for selected games\",\n \"PARTY_JACKPOT_WELCOME_POPUP_BOTTOM_NOTE_REAL\": \"Funded players only\",\n \"PARTY_JACKPOT_WELCOME_POPUP_TERMS_AND_CONDITIONS_APPLY\": \"T&C Apply.\",\n \"PARTY_JACKPOT_WIN_TOASTER_TITLE\": \"The {jackpotName} just dropped at {winAmount}!\",\n \"PARTY_JACKPOT_WIN_TOASTER_SUBTITLE\": \"Didn’t win? No worries!\\n This jackpot drops every hour, {startHour}-{endHour}.\",\n \"PARTY_JACKPOT_WIN_POPUP_YOU_WON\": \"YOU WON THE {jackpotName}\",\n \"PARTY_JACKPOT_WIN_POPUP_AWESOME\": \"AWESOME!\",\n \"PARTY_JACKPOT_OUT_OF_CASH_TOASTER_TITLE\": \"Top up to play the Live Casino Jackpot\",\n \"PARTY_JACKPOT_OUT_OF_CASH_TOASTER_SUBTITLE\": \"The Live Casino Jackpot can only be won with real money\",\n \"JACKPOT-WIDGET-MUST-PAY\": \"Must Pay within:\",\n \"JACKPOT-WIDGET-DROPS-SOON\": \"DROPS SOON!\",\n \"JACKPOT-WIDGET-STARTS-SOON\": \"STARTS SOON\",\n \"JACKPOT-WIDGET-NEXT-JACKPOT\": \"Launching Next Jackpot\",\n \"JACKPOT-WIDGET-LAST-WIN\": \"Last win\",\n \"IN-GAME-WIDGET-STARTS-SOON\": \"Starts Soon\",\n \"FREEPLAY_INDICATOR\": \"FreePlay\",\n \"OMG_INDICATOR\": \"Notifications\",\n \"USER_LIKE_YOU\": \"TOP {topNumber} IN {countryName}\",\n \"YOUR_COUNTRY\": \"Your country\",\n \"SOURCE_OF_FUNDS_TITLE\": \"Important Info Needed\",\n \"SOURCE_OF_FUNDS_MESSAGE1\": \"Hi, welcome back!\",\n \"SOURCE_OF_FUNDS_MESSAGE2\": \"We just need some info from you. It won't take long at all!\",\n \"SOURCE_OF_FUNDS_OPEN_CHAT_BTN\": \"LET'S CHAT\",\n \"CLOSE\": \"Close\",\n \"LIVE_STREAM_WATCH_TIME_REACHED\": \"Ready to dive in and play?\",\n \"LIVE_STREAM_VIDEO_LOADING\": \"Loading…\",\n \"PLAY_NOW\": \"PLAY NOW\",\n \"CASINO\": \"CASINO\",\n \"UK_TSR_CONTINUE_OPT\": \"Continue\",\n \"UK_TSR_REVIEW_REMINDERS_OPT\": \"Review reminders\",\n \"UK_TSR_LOGOUT_OPT\": \"Logout\",\n \"UK_TSR_RESUME_GAME_OPT\": \"Resume Game\",\n \"UK_TSR_STOP_REMINDERS_OPT\": \"Stop all game time reminders\",\n \"UK_TSR_HISTORY_OPT\": \"View History\",\n \"UK_TSR_CLOSE_GAME_OPT\": \"Close Game\",\n \"TSR_SUBTEXT\": \"What would you like to do?\",\n \"PAYMENTS_REDIRECT_FOCUS_TITLE\": \"Deposit in process\",\n \"PAYMENTS_REDIRECT_FOCUS_TEXT\": \"Your {mftName} screen is still open\",\n \"PAYMENTS_REDIRECT_FOCUS_CTA\": \"Continue\",\n \"VOLATILE_SLOTS\": \"Volatile Slots\",\n \"VOLATILE_GAMES\": \"Volatile Games\",\n \"HIGH_VOLATILITY_SLOTS\": \"High Volatility Slots\",\n \"LOW_VOLATILITY_SLOTS\": \"Low Volatility Slots\",\n \"STATE_POPUP_TITLE\": \"Verify Your Location\",\n \"STATE_POPUP_HEADER\": \"Please confirm that you're located in {THE_STATE}\",\n \"STATE_POPUP_OUTSIDE_TEXT\": \"I'm located outside of {THE_STATE}\",\n \"STATE_POPUP_CONFIRM\": \"Confirm\",\n \"BURNOUT_MESSAGE_LINE_1\": \"SURPRISE!\",\n \"BURNOUT_MESSAGE_LINE_2\": \"YOU GOT A BONUS!\",\n \"CONGRATS\": \"Congrats!\",\n \"YOUR_FP_ARE_WAITING\": \"Your FreePlay are waiting for you here\",\n \"EXIT_POPUP_TITLE\": \"We thought you’d like\",\n \"DONT_SHOW_AGAIN_TEXT\": \"Don't show again\",\n \"DAILY_DEAL_WIDGET_STRIP\": \"I GIORNALIERI\",\n \"GAMING_HISTORY_NO_RECORDS\": \"We were unable to locate any history records of your games\",\n \"GAMING_HISTORY_LAST_PAGE\": \"No more history records found.\",\n \"GAMING_HISTORY_BET\": \"Bet\",\n \"GAMING_HISTORY_WINNINGS\": \"Winnings\",\n \"GAMING_HISTORY_WINNINGS_BONUS_CAP\": \"Winnings*\",\n \"GAMING_HISTORY_BANKROLL\": \"Bankroll\",\n \"GAMING_HISTORY_MORE_DETAILS\": \"More Details\",\n \"GAMING_HISTORY_MORE_DETAILS_NOT_AVAILABLE_PC\": \"Available only on Mobile devices\",\n \"GAMING_HISTORY_MORE_DETAILS_NOT_AVAILABLE_MOBILE\": \"Available only on PC\",\n \"GAMING_HISTORY_FREE_PLAY_BET\": \"Bet*\",\n \"GAMING_HISTORY_FREE_PLAY_WINNINGS\": \"Winnings*\",\n \"GAMING_HISTORY_FREE_PLAY_REWARD_WINNINGS\": \"Reward winnings\",\n \"GAMING_HISTORY_FREE_PLAY_REWARD_BANKROLL\": \"Reward bankroll\",\n \"GAMING_HISTORY_FREE_PLAY_INDICATION\": \"*Played with rewards\",\n \"GAMING_HISTORY_FREE_PLAY_MAX_CUP_INDICATION\": \"*Maximum win\",\n \"GAMING_HISTORY_BIG_WIN_TAX_INDICATION\": \"Pending IRS form W-2G completion\",\n \"GAMING_HISTORY_DAYS_INTERVAL\": \"Last {numberOfDays} Days\",\n \"GAME_PARTICIPATION_ID\": \"Participation ID: {participationID}\",\n \"GAME_SESSION_ID\": \"Session ID: {sessionID}\",\n \"HISTORY_GAME_SESSION_TOTAL_BETS\": \"Total bets\",\n \"HISTORY_GAME_SESSION_TOTAL_WINNINGS\": \"Total wins\",\n \"HISTORY_GAME_SESSION_BALANCE\": \"Session Balance\",\n \"FILTER_GROUP_VENDOR_TYPE\": \"Vendor Name\",\n \"GAME_WINDOW_VENDOR_SESSION_ID\": \"Session ID: {sessionID}\",\n \"GAME_WINDOW_MODE_REAL_LABEL\": \"Real Money\",\n \"GAME_WINDOW_MODE_DEMO_LABEL\": \"Demo\",\n \"FREE_PLAY_VOUCHER_NAME_FPV\": \"FreePlay\",\n \"FREE_PLAY_VOUCHER_NAME_FSV\": \"Free Spins\",\n \"FREE_PLAY_VOUCHER_NAME_JPFPV\": \"Jackpot FreePlay\",\n \"FREE_PLAY_VOUCHER_NAME_JPFSV\": \"Jackpot Spins\",\n \"FREE_PLAY_VOUCHER_BALANCE_PREFIX\": \"Remaining:\",\n \"FREE_PLAY_VOUCHER_TITLE_FPV\": \"FreePlay Reward\",\n \"FREE_PLAY_VOUCHER_TITLE_FSV\": \"Free Spins Reward\",\n \"FREE_PLAY_VOUCHER_TITLE_JPFPV\": \"Jackpot FreePlay Reward\",\n \"FREE_PLAY_VOUCHER_TITLE_JPFSV\": \"Jackpot Spins Reward\",\n \"FREE_PLAY_VOUCHER_DESC_FPV\": \"Free play money to use on selected games in whichever way you wish!\",\n \"FREE_PLAY_VOUCHER_DESC_FSV\": \"Free Spins with pre-defined values to use on selected games!\",\n \"FREE_PLAY_VOUCHER_DESC_JPFPV\": \"Jackpot-only FreePlay money to use on selected games in whichever way you wish!\",\n \"FREE_PLAY_VOUCHER_DESC_JPFSV\": \"Jackpot-only Free Spins with pre-defined values to use on selected games!\",\n \"FREE_PLAY_VOUCHER_REWARD_AMOUNT\": \"{amount} {fp_voucher_name}\",\n \"FREE_PLAY_VOUCHER_REWARD_BALANCE\": \"{fp_voucher_remaining_prefix} {balance}\",\n \"FREE_PLAY_EXPIRES_IN_TIME\": \"Expires in {expiration}\",\n \"FREE_PLAY_EXPIRES_IN_EXPIRED\": \"Expired\",\n \"FREE_PLAY_EXPIRES_IN_DAY\": \"Expires in {expiration} days\",\n \"FREE_PLAY_MESSAGE_VOUCHER_TITLE_GOOD_LUCK\": \"Good Luck!\",\n \"FREE_PLAY_MESSAGE_LIST_TITLE\": \"You have rewards waiting for you. Good Luck!\",\n \"FREE_PLAY_MESSAGE_SELECTED_GAME_TITLE\": \"This game can also be played with the following rewards:\",\n \"FREE_PLAY_MESSAGE_GAMES_LIST_TITLE\": \"You can use this reward in the game(s) below.\",\n \"FREE_PLAY_MESSAGE_NO_VOUCHERS\": \"You have no rewards available\",\n \"FREE_PLAY_MESSAGE_BACK_TO_VOUCHERS\": \"Back\",\n \"FREE_PLAY_SHOW_MORE\": \"Show More\",\n \"FREE_PLAY_SHOW_LESS\": \"Show Less\",\n \"FREE_PLAY_USE_NOW_BUTTON\": \"Use Now\",\n \"FREE_PLAY_USE_LATER_BUTTON\": \"Use Later\",\n \"FREE_PLAY_SUGGESTION_DIALOG_TITLE\": \"You have rewards in this game!\",\n \"IDLE_RECOMMENDATIONS_TITLE\": \"Looking for your next game?\",\n \"IDLE_RECOMMENDATIONS_SECOND_TITLE\": \"What about\",\n \"BONUS_ABUSE_PREVENTION_TITLE\": \"Disconnected Game\",\n \"BONUS_ABUSE_PREVENTION_MESSAGE\": \"It looks like there's a game that was disconnected... Please complete {gameName} before you can start playing {newGameName}.\",\n \"BONUS_ABUSE_PREVENTION_NOT_NOW_BTN\": \"Not Now\",\n \"BONUS_ABUSE_PREVENTION_COMPLETE_BTN\": \"Complete Game\",\n \"OPEN_GAME_FROM_CHALLENGES\": \"Challenges can’t be completed using rewards.\",\n \"CANCEL\": \"Cancel\",\n \"YES\": \"Yes\",\n \"NO\": \"No\",\n \"ONE_GAME_PER_SESSION_DIALOG_TITLE\": \"Open Game\",\n \"ONE_GAME_PER_SESSION_DIALOG_MESSAGE\": \"It looks like there's a game that's still open....\\nWould you like to close {oldGameName} and start playing {newGameName}?\",\n \"GAMES_OF_THE_WEEK\": \"Games Of The Week\",\n \"THE_FISH_MARKET\": \"The Fish Market\",\n \"LETS_PLAY_POKER\": \"Lets Play Poker!\",\n \"HYBRID_EMBEDDED_GAME_LOADING_SLOW_CONNECTION_TOASTER_TITLE\": \"Slow connection\",\n \"HYBRID_EMBEDDED_GAME_LOADING_SLOW_CONNECTION_TOASTER_SUBTITLE\": \"We've detected a slow network connection. Opening the game may take a little longer than expected.\",\n \"HYBRID_EMBEDDED_GAME_LOADING_SPINNER_LABEL\": \"Connecting...\",\n \"HYBRID_EMBEDDED_GAME_LOADING_PACKAGES_PROGRESS\": \"Preparing game {packagesStatus}\",\n \"HELP_CENTER\": \"Help Centre\",\n \"GEO_PERMISSIONS_POPUP_TITLE\": \"Location Check\",\n \"GEO_PERMISSIONS_POPUP_TOP_TEXT\": \"Allow location verification\",\n \"GEO_PERMISSIONS_POPUP_MIDDLE_TEXT\": \"We need your location to verify that playing is allowed in your province\",\n \"GEO_PERMISSIONS_BUTTON\": \"OK\",\n \"ABOUT_HELP_SUPPORT\": \"For any support queries, please visit our online help\",\n \"ABOUT_TITLE\": \"Your Account Details\",\n \"ABOUT_FISCAL_CODE_TITLE\": \"Fiscal Code\",\n \"ABOUT_SUPPORT_ID_TITLE\": \"ID for support\",\n \"ABOUT_CLIENT_VERSION_TITLE\": \"Client Version\",\n \"ABOUT_OPEN_SESSION_TITLE\": \"Open session balance\",\n \"GEO_PLUGIN_INSTALLATION_MSG_TITLE\": \"Location check\",\n \"GEO_PLUGIN_INSTALLATION_MSG_HEADER_1\": \"Verify Your Location.\",\n \"GEO_PLUGIN_INSTALLATION_MSG_HEADER_2\": \"This site is dedicated for players in USA permitted states.\",\n \"GEO_PLUGIN_INSTALLATION_MSG_HEADER_3\": \"To verify your location and start playing, please install the\",\n \"GEO_PLUGIN_INSTALLATION_MSG_HEADER_4\": \"GeoComply plugin:\",\n \"GEO_PLUGIN_INSTALLATION_MSG_BODY_1\": \"Click the Download Plugin button below\",\n \"GEO_PLUGIN_INSTALLATION_MSG_BODY_2\": \"Open the file from the download bar\",\n \"GEO_PLUGIN_INSTALLATION_MSG_BODY_3\": \"Click Run to install the file\",\n \"GEO_PLUGIN_INSTALLATION_MSG_FOOTER\": \"Need to redownload the plugin?\",\n \"GEO_PLUGIN_DOWNLOAD_BUTTON\": \"DOWNLOAD\",\n \"GEO_FREEZE_POPUP_TOP_TEXT\": \"We're confirming your location.\",\n \"GEO_FREEZE_POPUP_MIDDLE_TEXT\": \"It should only take a few seconds. This window will close automatically after confirmation.\",\n \"GEO_DIALOG_STANDARD_TITLE\": \"Location Verification\",\n \"GEO_GAME_RESTRICTION_TOP_TEXT\": \"Verify your location\",\n \"GEO_GAME_RESTRICTION_MIDDLE_TEXT\": \"That action requires location verification. To verify your location, please log out and retry. If the problem persists, please contact us.\",\n \"GEO_RETRY_GAME_RESTRICTION_MIDDLE_TEXT\": \"That action requires location verification. To verify your location please retry. If the problem persists, please contact us.\",\n \"ENFORCE_HYBRID_APP_TITLE\": \"Download the app\",\n \"ENFORCE_HYBRID_APP_TEXT\": \"To log in from your mobile device please download the app.\",\n \"ENFORCE_HYBRID_APP_CONTINUE_BUTTON\": \"GET THE APP\",\n \"ONE_HOUR\": \"1 hour\",\n \"X_HOURS\": \"{x} hours\",\n \"ONE_MINUTE\": \"1 minute\",\n \"X_MINUTES\": \"{x} minutes\",\n \"ONE_DAY\": \"1 day\",\n \"X_DAYS\": \"{x} days\",\n \"ONE_WEEK\": \"1 week\",\n \"ONE_MONTH\": \"1 month\",\n \"SELECT\": \"Please select\",\n \"DONT_WANT_TO_BE_BLOCKED\": \"I don't want to be blocked\",\n \"GAMBLING_SESSION_SETUP_TITLE\": \"Start your session\",\n \"GAMBLING_SESSION_MESSAGE\": \"Note: The session applies to all Casino games and Poker Cash games only\",\n \"GAMBLING_SESSION_WARN_MESSAGE\": \"LIMITS ARE RESET ONCE REACHED OR UPON RE-LOGIN\",\n \"GAMBLING_SESSION_START\": \"Start Session\",\n \"GAMBLING_SESSION_LAST_BET\": \"Last bet: {lastBetDate}\",\n \"GAMBLING_SESSION_TIME_LIMIT_REQUIRED_ERROR\": \"Session Time Limit not set\",\n \"GAMBLING_SESSION_LOSS_LIMIT_REQUIRED_ERROR\": \"Session Loss Limit not set\",\n \"GAMBLING_SESSION_LIMIT_REGULATORY_TEXT\": \"We support and promote {responsibleGamblingLink} and make available the tools to support sustainable play. Excessive gambling can have a negative effect on your life, leading to addiction, financial difficulties and breakdown of relationships.\",\n \"GAMBLING_SESSION_LIMIT_RESPONSIBLE_GAMING_LINK\": \"safer gambling\",\n \"GAMBLING_SESSION_REMINDER_INTERVAL_DROP_DOWN_LABEL\": \"Session Reminders\",\n \"GAMBLING_SESSION_LOSS_LIMIT_VALUE\": \"{percent}% of bankroll ({loss})\",\n \"GAMBLING_SESSION_LOSS_LIMIT_DROP_DOWN_LABEL\": \"Session Loss limit\",\n \"GAMBLING_SESSION_LIMIT_RESTRICTION_PERIOD_VALUE\": \"Be blocked for {time}\",\n \"GAMBLING_SESSION_LIMIT_RESTRICTION_BLOCK_CONFIRMATION_TEXT\": \"You have chosen to be blocked for {time}. This means that once your game session ends, you will not be able to play again for the time period you have selected.\",\n \"GAMBLING_SESSION_LIMIT_RESTRICTION_BLOCK_CONFIRMATION_QUESTION\": \"Are you sure?\",\n \"GAMBLING_SESSION_RESTRICTION_PERIOD_DROP_DOWN_LABEL\": \"When my session ends\",\n \"GAMBLING_SESSION_LIMIT_TIME_LOSS_CONFIRMATION_TEXT\": \"Note that you have set your maximum playing time at {time}.\",\n \"GAMBLING_SESSION_LIMIT_TIME_LOSS_CONFIRMATION_QUESTION\": \"Do you want to continue?\",\n \"GAMBLING_SESSION_TIME_LIMIT_DROP_DOWN_LABEL\": \"Session Time Limit\",\n \"GAMBLING_SESSION_TIME_LIMIT_REACHED_TITLE\": \"Time limit reached\",\n \"GAMBLING_SESSION_LOSS_LIMIT_REACHED_TITLE\": \"Loss limit reached\",\n \"GAMBLING_SESSION_INTERVAL_REMINDER_TITLE\": \"Game Time Reminders\",\n \"GAMBLING_SESSION_TIME_LIMIT_REACHED_TEXT\": \"At {gamblingSessionLimitTimestamp} you have reached your time limit in this session\",\n \"GAMBLING_SESSION_LOSS_LIMIT_REACHED_TEXT\": \"At {gamblingSessionLimitTimestamp} you have reached your loss limit in this session\",\n \"GAMBLING_SESSION_INTERVAL_REMINDER_TEXT\": \"At {gamblingSessionLimitTimestamp} you have reached your Game Time Reminders in this session.\",\n \"GAMBLING_SESSION_DATA_DURATION\": \"Session Duration:\",\n \"GAMBLING_SESSION_DATA_WIN_LOSS_SUMMARY\": \"Win / Loss Summary:\",\n \"GAMBLING_SESSION_DATA_TOTAL_BETS\": \"Total bets:\",\n \"GAMBLING_SESSION_ADVANCED_WARN_LOSS_LIMIT_TOAST\": \"Your Loss Limit is about to be reached\",\n \"GAMBLING_SESSION_ADVANCED_WARN_TIME_LIMIT_TOAST\": \"Your Time Limit is about to be reached\",\n \"GAMBLING_SESSION_LOGOUT_DIALOG_TITLE\": \"Logout. Session summary\",\n \"GAMBLING_SESSION_SELF_RESTRICTION_MESSAGE\": \"You have imposed a restriction on yourself to play additional casino games until {restrictionExpirationDate}.\",\n \"GAMBLING_SESSION_LIMITS_ALREADY_SET\": \"Session limits already set\",\n \"ATTENTION\": \"Attention!\",\n \"TOTAL_BANKROLL\": \"Full Bankroll:\",\n \"GAME_SESSION_BALANCE\": \"Session balance:\",\n \"TOTAL_WINS\": \"Total win amounts:\",\n \"TOTAL_BETS\": \"Total bet amounts:\",\n \"GAME_SESSION_SUMMARY_DIALOG_TITLE\": \"Session has ended\",\n \"GAME_SESSION_SUMMARY_DIALOG_MESSAGE\": \"Your session for {game_name} has ended\\n\\nTotal bets {total_bets_amount}\\n\\nTotal wins {total_wins_amount}\",\n \"OK\": \"OK\",\n \"NJ_LOGOUT_MESSAGE_TITLE\": \"Logout\",\n \"NJ_LOGOUT_MESSAGE_TEXT\": \"If you or someone you know has a gambling problem and wants help,\\ncall 1-800-Gambler.\",\n \"INSUFFICIENT_FUNDS_TITLE\": \"Insufficient balance\",\n \"INSUFFICIENT_FUNDS_MESSAGE\": \"Your current balance is not sufficient for this game. To continue playing, you must first make a deposit to the cashier.\",\n \"OPEN_CASHIER\": \"Open Cashier\",\n \"GAME_LIMIT_REAL_MONEY_WARNING_MESSAGE\": \"This game can be played with cash balance only.\",\n \"SUGGEST_REAL_MODE_DIALOG_TITLE\": \"Demo Game\",\n \"SUGGEST_REAL_MODE_DIALOG_TEXT\": \"Please note that {game_name} will be opened in demo mode.

    To play in real money mode, please register or log in.\",\n \"PLAY_DEMO\": \"Play Demo\",\n \"GAME_NET_POSITION_LABEL\": \"Game Balance\",\n \"GAME_DURATION_LABEL\": \"Game Duration\",\n \"GAME_LIMIT_TITLE\": \"Choose the money in the game\",\n \"REGULATORY_LIMIT_LABEL\": \"Regulatory limit\",\n \"OTHER_LIMIT_LABEL\": \"Other\",\n \"GAME_LIMIT_VALUE_ERROR\": \"Invalid amount. Please try again\",\n \"GAME_LIMIT_REGULATION_ERROR\": \"The maximum amount is {regulationLimit}. Please try again.\",\n \"GAME_LIMIT_MIN_BET_ERROR\": \"Amount below table minimum. Please try again\",\n \"AGE_ACKNOWLEDGE_POPUP_TITLE\": \"Acknowledgement\",\n \"AGE_ACKNOWLEDGE_POPUP_MESSAGE\": \"Persons under the age of 21 are not permitted to engage in interactive gaming.\\nPlease confirm that you are over 21 years old\",\n \"AGE_ACKNOWLEDGE_POPUP_CONFIRM_BUTTON\": \"Confirm\",\n \"AGE_ACKNOWLEDGE_POPUP_DECLINE_BUTTON\": \"Decline\",\n \"STATE_POPUP_DEFAULT_OPTION\": \"Select...\",\n \"STATE_POPUP_NO_STATE_SELECTED\": \"You must choose a state!\",\n \"CHOOSE_CONFIRM_STATE\": \"Please confirm that you're located in\",\n \"STATE_POPUP_OTHER_STATE\": \"I don't see my state\",\n \"STATE_SELECTOR_MENU_ITEM\": \"State Selector\",\n \"LUGAS_COOLING_OFF_LOGOUT_MESSAGE\": \"By logging out you will not be able to play any game for 5:00 mins.\",\n \"LUGAS_ACTIVE_TITLE\": \"Notification\",\n \"LUGAS_ACTIVE_TEXT_1\": \"It looks like you're currently playing on a different site. Per local regulations, please log out to continue here.\",\n \"LUGAS_ACTIVE_TEXT_2\": \"888 receives this information from the German system used to enforce regulations.\",\n \"LUGAS_COOLDOWN_TITLE\": \"Please wait\",\n \"LUGAS_COOLDOWN_TEXT\": \"According to Germany regulation there’s a five minute cool down period after logging out from another operator.\",\n \"LUGAS_OK_BTN\": \"OK\",\n \"LIVE_ROULETTE\": \"Live Roulette\",\n \"LIVE_BLACKJACK\": \"Live Blackjack\",\n \"LIVE_BACCARAT\": \"Live Baccarat\",\n \"LIVE_POKER\": \"Live Poker\",\n \"LIVE_GAME_SHOWS\": \"Live Game Shows\",\n \"LIVE_ELITE_LOUNGE\": \"Live Elite Lounge\",\n \"JOIN_NOW\": \"JOIN NOW\",\n \"Adventure\": \"Adventure\",\n \"Ancient Civilization\": \"Ancient Civilization\",\n \"Arabic\": \"Arabic\",\n \"Asian\": \"Asian\",\n \"Classic Style\": \"Classic Style\",\n \"Comics and Cartoons\": \"Comics and Cartoons\",\n \"Diamonds and Gems\": \"Diamonds and Gems\",\n \"Egyptian\": \"Egyptian\",\n \"Fantasy and Folklore\": \"Fantasy and Folklore\",\n \"Farm and Pets\": \"Farm and Pets\",\n \"Fish\": \"Fish\",\n \"Fruit and Candy\": \"Fruit and Candy\",\n \"Greek Mythology\": \"Greek Mythology\",\n \"Irish\": \"Irish\",\n \"Money and Leisure\": \"Money and Leisure\",\n \"Movies and Music\": \"Movies and Music\",\n \"Seasonal\": \"Seasonal\",\n \"Space and Sci-fi\": \"Space and Sci-fi\",\n \"Wildlife\": \"Wildlife\",\n \"GAME_STUDIOS\": \"Game studios\",\n \"THEMES\": \"Themes\",\n \"GAME_FEATURES\": \"Features\",\n \"GAME_CATEGORIES\": \"Categories\",\n \"FILTER_BY\": \"Filter by\",\n \"NO_JACKPOT\": \"No Jackpot\",\n \"HIGH_STAKES\": \"High Stakes\",\n \"LOW_STAKES\": \"Low Stakes\",\n \"MULTIHAND\": \"Multihand\",\n \"MEDIUM_VOLATILITY\": \"Medium Volatility\",\n \"VOLATILITY\": \"Volatility\",\n \"ONBOARDING_WELCOME_STEP_MAIN_TEXT\": \"More games. Bigger jackpots. Personalized experience.\",\n \"ONBOARDING_WELCOME_STEP_SECONDARY_TEXT\": \"Ready to explore your new home?\",\n \"ONBOARDING_MENU_STEP_MAIN_TEXT\": \"This magic menu will take you straight to ALL the fun\",\n \"ONBOARDING_MENU_STEP_SECONDARY_TEXT\": \"Jackpots, slots, LIVE tables & promotions\",\n \"ONBOARDING_USER_AREA_MAIN_TEXT\": \"Control Your Account In One Place\",\n \"ONBOARDING_USER_AREA_SECONDARY_TEXT\": \"Account ID, transaction history, bonus overview & more\",\n \"NEXT\": \"Next\",\n \"DONE\": \"Done\",\n \"SPEED_GAMES\": \"Speed Games\",\n \"generic_notification_popup_title\": \"Notification\",\n \"MDP_INACTIVITY_DISCONNECTED_TEXT\": \"You have been disconnected due to inactivity.\",\n \"RICH_USER_NOT_LOGGED_IN\": \"To view your challenges please log in\",\n \"CONTROL_CENTER_ONBOARDING_TOOLTIP_TEXT\": \"Set your limits, see your activity stats, and more in the Control Center!\",\n \"temp_account_title\": \"Account Verification\",\n \"temp_account_days_left\": \"Days Left\",\n \"temp_account_upload_btn\": \"UPLOAD DOCUMENTS\",\n \"MENU_ITEM_ABOUT\": \"About\",\n \"MENU_ITEM_GAMING_SESSION_HISTORY\": \"Session History\",\n \"MENU_ITEM_TOUCH_ID\": \"Biometric Login\",\n \"MENU_ITEM_INACTIVITY_TIMEOUT_SETTINGS\": \"Settings\",\n \"MENU_ITEM_HYBRID_INFO\": \"Info\",\n \"MENU_ITEM_CASHIER_VERIFY_ID\": \"Identity Verification\",\n \"NJ_JERSEY_COUNTRY_NAME\": \"NEW JERSEY\",\n \"FEATURED_GAMES\": \"Featured Games\",\n \"LIVE_BACCARAT_BONANZA\": \"Live Baccarat Bonanza\",\n \"TOP_HOLLYWOOD_SLOTS\": \"Top Hollywood slots\",\n \"THE_WILD_WEST\": \"The Wild West\",\n \"TREASURES_OF_EGYPT\": \"Treasures Of Egypt\",\n \"GRID_SLOTS\": \"Grid Slots\",\n \"SECRETS_OF_THE_GREEK_MYTHOLOGY\": \"Secrets of the Greek mythology\",\n \"DIAMONDS_ARE_FOREVER\": \"Diamonds Are forever\",\n \"LUCK_OF_THE_IRISH\": \"Luck of the Irish\",\n \"LIVE_CASINO_PAGE\": \"Live Casino page\",\n \"NEW_LIVE_CASINO_GAMES\": \"New Live Casino Games\",\n \"TOP_LIVE_TABLE_GAMES\": \"Top Live Table Games\",\n \"ARCADE_GAMES\": \"Arcade Games\",\n \"8_HOURS_JACKPOT\": \"8 hours jackpot\",\n \"VEGAS_SLOTS\": \"Vegas Slots\",\n \"MUSIC_TO_MY_EARS\": \"Music to my ears\",\n \"GENIES_JACKPOT\": \"Genie's Jackpot\",\n \"BIG_PLAYTECH_JACKPOTS\": \"Big Playtech Jackpots\",\n \"kick_reason_general\": \"You’ve been logged out.\",\n \"kick_reason_20\": \"You’ve been logged out because you signed in from another location.\",\n \"kick_reason_21\": \"We have detected that you are \\nattempting to login from outside the state of New Jersey. This conduct is in violation of New Jersey state law N.J.S.A 5:12-95.23a. You should immediately cease and desist from attempting to login from outside of New Jersey. We have retained your user information and future attempts could result in an enforcement action.\",\n \"kick_reason_23\": \"We are unable to confirm you are \\nlocated in the State of New Jersey which is a legal requirement for online wagering. Please check your Wi-Fi card is enabled, please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_24\": \"We have detected that you are \\naccessing the internet through a proxy, VPN, or other service which has the ability to misrepresent the geographic location of a device. While your use of this service may be inadvertent, we are not able to confirm your location legal requirement for online wagering. Please contact customer support. so we can help you resolve this problem.\",\n \"kick_reason_25\": \"We have detected that you are \\nattempting to login from outside the state of New Jersey. This conduct is in violation of New Jersey state law N.J.S.A 5:12-95.23a. You should immediately cease and desist from attempting to login from outside of New Jersey. We have retained your user information and future attempts could result in an enforcement action.\",\n \"kick_reason_26\": \"We are unable to confirm you are \\nlocated in the State of New Jersey which is a legal requirement for online wagering. This appears to be a technical problem. Please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_27\": \"To bet we must verify that you are located in {stateName}. Please {downloadPluginLink} and install this plugin that will allow us to verify your location based on your Wi-Fi connection.\",\n \"kick_reason_28\": \"To bet on real money we must \\nupdate the plugin that enables us to verify your location. Click {installPlugin} to install.\",\n \"kick_reason_29\": \"We are unable to confirm you are located in the State of New Jersey which is a legal requirement for online wagering. This appears to be a technical problem. Please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_30\": \"You have reached your daily game time limit. Once the time limit expires, you will be able to enjoy our games again.\",\n \"kick_reason_31\": \"We are unable to confirm you are located in the State of New Jersey which is a legal requirement for online wagering. This appears to be a technical problem. Please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_32\": \"We are unable to confirm you are located in the State of New Jersey which is a legal requirement for online wagering. This appears to be a technical problem. Please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_33\": \"Unfortunately the network you are currently connected to does not allow us to verify that you are in New Jersey. Please connect to a different network and try again.\",\n \"kick_reason_34\": \"We are unable to confirm you are located in the State of New Jersey which is a legal requirement for online wagering. This appears to be a technical problem. Please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_35\": \"According to the New Jersey state regulation we are required to determine your exact location. Please enable your device location services.\",\n \"kick_reason_36\": \"Your device is running software \\nwhich may be utilized to bypass geolocation checks which are required by New Jersey law. While your use of this software may be inadvertent, we are not able to confirm your location legal requirement for online wagering. Please contact customer support. so we can help you resolve this problem.\",\n \"kick_reason_50\": \"The game you are trying to open is currently not available.\",\n \"kick_reason_51\": \"According to legal requirements you are required to perform some actions on your account. Please login again to complete them.\",\n \"kick_reason_live_casino\": \"We couldn't verify your location. You can finish a game round but not perform an additional bet or game action.\",\n \"TOUCH_ID_SUB_CAPTION\": \"This feature will be enabled on your next login\",\n \"TOUCH_ID_CAPTION\": \"You can log in faster using the Touch/Face ID features on your device.\",\n \"TERMS_AND_CONDITIONS\": \"Terms And Conditions\",\n \"TOUCH_ID_INIT_SCREEN_ENABLE_BUTTON\": \"ENABLE NOW\",\n \"TOUCH_ID_AUTO_SCREEN\": \"LOGIN WITH TOUCH/FACE ID\",\n \"TOUCH_ID_INFO\": \"
  1. Enabling Touch/Face ID feature on this device will allow anyone whose fingerprint is saved on this device to gain full access to your 888 account. You should not proceed to set up this feature if any fingerprint in addition to your own are stored on this device.
  2. By using Touch/Face ID to access your 888 account, you agree that you are solely responsible for all transactions on your account, regardless if such transactions are made by a third party or any person with a fingerprint saved on this device.
  3. In addition, you agree that the operator of the application and its affiliates (together the \\\"888 Group\\\") shall not be liable to you for any consequences arising from using Touch/Face ID to access your 888 account. The 888 Group shall not be held responsible for any loss, liability, damage, expenses or costs incurred through the use of this feature.
  4. For each 888 application which you have on your device, only one of your accounts can be configured to login with Touch/Face ID at any point in time.
  5. You will be required to login using your password when Touch/Face ID authentication fails or expires.
  6. 888 Group does not store your fingerprint on its servers and does not handle or support Touch/Face ID technology.
  7. \",\n \"TABLE_GAMES\": \"Table Games\",\n \"ARCADE\": \"Arcade\",\n \"SPORTS\": \"Sports\",\n \"MEXICAN\": \"Mexican\",\n \"BINGO\": \"Bingo\",\n \"CLASSIC_STYLE_MODERNIZED\": \"Classic Style Modernized\",\n \"AZTEC_INCA_MAYAN\": \"Aztec Inca Mayan\",\n \"CRIME\": \"Crime\",\n \"WILD_WEST\": \"Wild West\",\n \"CANDY_AND_SWEETS\": \"Candy And Sweets\",\n \"GOLD_MINING\": \"Gold Mining\",\n \"VIKINGS_AND_NORDIC_MYTHOLOGY\": \"Vikings And Nordic Mythology\",\n \"XMAS\": \"Xmas\",\n \"JACKPOT_WIDGET_TITLE\": \"\",\n \"LAST_LOGIN_TITLE\": \"Last login:\",\n \"SESSION_TIMER_TITLE\": \"Session time\",\n \"LIVE_SLOTS\": \"Live Slots\",\n \"THE_BOOK_SHELF\": \"The Book Shelf\",\n \"LUCKYTAP_GAMES\": \"LuckyTap Games\",\n \"TSR_WAGERED_AMOUNT\": \"Your wagered amount\",\n \"TSR_SUBTITLE_MALTA\": \"Stay in control of your game!\",\n \"TSR_WINNINGS_TEXT\": \"Your total winnings\",\n \"TSR_LOSSES_TEXT\": \"Your total losses\",\n \"TSR_CLOSE_GAME\": \"Close game\",\n \"TSR_TITLE\": \"Time Spent Reminder\",\n \"TSR_MENU_LINK_LABEL\": \"Time Spent Reminder\",\n \"TSR_CONFIRM\": \"OK\",\n \"TSR_SESSION_TIME_TEXT\": \"You have been logged in for:\",\n \"EXIT\": \"Exit\",\n \"EXIT_GAME_POPUP_TITLE\": \"exit game\",\n \"EXIT_GAME_POPUP_TEXT\": \"Are you sure you want to exit game?\",\n \"CROSS_POKER_ICON_ALT_TEXT\": \"Online Poker\",\n \"OPEN_SESSION_STATUS_LABEL\": \"Status\",\n \"OPEN_SESSION_STATUS_PENDING\": \"Pending\",\n \"OPEN_BETS\": \"Open Bets\",\n \"MIN_BET\": \"Min\",\n \"CONTINUE_GAME\": \"Continue Game\",\n \"OPEN_BETS_NO_RECORDS\": \"We were unable to locate any history records of your open games\",\n \"VIDEO_SLIDES_FILTER_PREVIEW_TITLE\": \"Explore our categories\",\n \"VIDEO_SLIDES_LIVE_STREAMING\": \"LIVE Streaming\",\n \"VIDEO_SLIDES_ONBOARDING_MAIN_TEXT\": \"Swipe\",\n \"VIDEO_SLIDES_ONBOARDING_SECONDARY_TEXT\": \"To see more games\",\n \"VIDEO_SLIDES_ERROR_MAIN_TEXT\": \"Error loading the video. Tap to retry\",\n \"EXPLORE\": \"Explore\",\n \"ONBOARDING_BOTTOM_NAV_BAR_EXPLORE_MAIN_TEXT\": \"Casino like never before!\",\n \"ONBOARDING_BOTTOM_NAV_BAR_EXPLORE_SECONDARY_TEXT\": \"GO EXPLORE\",\n \"INACTIVITY_TIMEOUT_SETTINGS_TITLE\": \"Inactivity Timeout Settings\",\n \"INACTIVITY_TIMEOUT_SETTINGS_MINUTES\": \"{minutes} MIN.\",\n \"INACTIVITY_TIMEOUT_SETTINGS_LABEL\": \"Set the amount of idle time before you are logged out\",\n \"REALITY_CHECK_DIALOG_SESSION_TIMER_LABEL\": \"You have been logged in for:\",\n \"REALITY_CHECK_DIALOG_SESSION_WINNINGS_LABEL\": \"Your total winnings are:\",\n \"REALITY_CHECK_DIALOG_SESSION_LOSSES_LABEL\": \"Your total losses:\",\n \"REALITY_CHECK_DIALOG_TITLE\": \"Reminder\",\n \"REALITY_CHECK_DIALOG_CONTINUE_BUTTON\": \"Continue\",\n \"CLOSE_GAME\": \"Close Game\",\n \"UK_LICENSE_STATUS\": \"Licensed status\",\n \"UK_LICENSE_TEXT\": `Copyright 2024, the 888 Group. All rights reserved.\n 888 Holdings plc is listed on the London Stock Exchange.\n Virtual Global Digital Services Limited and VDSL (International) Limited are licensed and regulated to offer online gaming services under the laws of Gibraltar (Remote Gaming License Numbers 112 and 113) and make no representation as to legality of such services in other jurisdictions.\n In the event that you have registered from Canada, our services are provided by VDSL (International) Limited.\n Our services in the UK are operated by 888 UK Limited, a company incorporated in Gibraltar. 888 UK Limited is licensed and regulated in Great Britain by the #UK-LICENSE-PAGE-LINK# under the account number 39028.\n Our services in European Single Market member states (except for states in which our services are provided under a local license) are operated by Virtual Digital Services Limited, a company incorporated in Malta which is part of the European Union.\n Virtual Digital Services Limited operates under the auspices of a gaming license provided under the laws of Malta - MGA/CRP/543/2018 issued on the 11/10/2019.\n Our betting products are operated in Ireland by 888 (Ireland) Limited, a company incorporated in Malta, which is licensed and regulated by Ireland's Revenue Commissioners.\n The address of our Gibraltar based companies is: 601-701 Europort, Gibraltar.\n The address of our Malta based companies is: Level 7, Tagliaferro Business Centre, 14, High Street, Sliema SLM 1549, Malta\n Gambling can be addictive, please play responsibly. For more information on support tools, please visit our #UK-LICENSE-PAGE-LINK#`,\n \"UK_LICENSE_GC_PAGE_LINK\": \"Gambling Commission\",\n \"UK_LICENSE_RG_PAGE_LINK\": \"Responsible Gambling Page\",\n }\n}","import {TimeSpan} from \"@sparkware/app-utils\";\nimport {namedSetTimeout} from \"../common/utils/time-functions\";\n\nexport function delay(interval: TimeSpan): Promise {\n return new Promise((resolve) => {\n namedSetTimeout('DELAY_TIMER', () => resolve(), interval);\n });\n}","import {IReactionDisposer, IReactionOptions, IReactionPublic, reaction as mobxReaction} from \"mobx\";\nimport {\n IGameEventSubscription\n} from \"../app-react/services/game-runner/interfaces/game-communication/game-communication-channel.interface\";\nimport {CGPEventSubscription} from \"../app-react/services/sdk/cgp-sdk.interface\";\nimport {TimeIntervalName} from \"../common/utils/time-interval-names\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {namedSetInterval, namedSetTimeout} from \"../common/utils/time-functions\";\nimport {\n TimerSubscriptionRef\n} from \"../app-react/services/companies/game-session-behaviors/common/game-session-behavior-base\";\nimport {DomEventSubscription} from \"./event-listener-registration\";\n\nexport class DisposableObject {\n private _reactions: IReactionDisposer[] = [];\n addReaction(expression: (r: IReactionPublic) => T, effect: (arg: T, prev: FireImmediately extends true ? T | undefined : T, r: IReactionPublic) => void, opts?: IReactionOptions): void {\n this._reactions.push(mobxReaction(expression, effect, opts));\n }\n\n private _gameEventsSubscription: IGameEventSubscription[] = [];\n protected addGameEventSubscription(subscription: IGameEventSubscription): IGameEventSubscription {\n this._gameEventsSubscription.push(subscription);\n\n return {\n unsubscribe: () => {\n const index = this._gameEventsSubscription.findIndex(s => s === subscription);\n if(index >= 0) {\n this._gameEventsSubscription[index].unsubscribe();\n this._gameEventsSubscription.splice(index, 1);\n }\n }\n }\n }\n\n private _sdkEventsSubscriptions: CGPEventSubscription[] = [];\n protected addSdkEventSubscription(subscription: CGPEventSubscription): void {\n this._sdkEventsSubscriptions.push(subscription);\n }\n\n private _intervals: number[] = [];\n protected addInterval(handler: () => void, interval: TimeSpan | number = 0, name?: TimeIntervalName): TimerSubscriptionRef {\n const ref = name ? namedSetInterval(name, handler, interval) : window.setInterval(handler, Check.isNumber(interval) ? interval : interval.totalMilliseconds);\n this._intervals.push(ref);\n return {\n clear: () => {\n clearInterval(ref);\n const index = this._intervals.findIndex(i => i === ref);\n if(index >= 0) {\n this._intervals.splice(index, 1);\n }\n }\n }\n }\n\n private _timeouts: number[] = [];\n protected addTimeout(handler: () => void, interval: TimeSpan | number = 0, name?: TimeIntervalName): TimerSubscriptionRef {\n const ref = name ? namedSetTimeout(name, handler, interval) : window.setTimeout(handler, Check.isNumber(interval) ? interval : interval.totalMilliseconds);\n this._timeouts.push(ref);\n return {\n clear: () => {\n clearTimeout(ref);\n const index = this._timeouts.findIndex(t => t === ref);\n if(index >= 0) {\n this._timeouts.splice(index, 1);\n }\n }\n }\n }\n\n private _domEventsSubscriptions: DomEventSubscription[] = [];\n protected addDomEventSubscription(subscription: DomEventSubscription): DomEventSubscription {\n this._domEventsSubscriptions.push(subscription);\n return subscription;\n }\n\n dispose(): void {\n this._reactions.forEach(r => r());\n this._reactions = [];\n this._gameEventsSubscription.forEach(s => s.unsubscribe());\n this._gameEventsSubscription = [];\n this._intervals.forEach(i => clearInterval(i));\n this._intervals = [];\n this._timeouts.forEach(t => clearTimeout(t));\n this._timeouts = [];\n this._sdkEventsSubscriptions.forEach(s => s.off());\n this._sdkEventsSubscriptions = [];\n this._domEventsSubscriptions.forEach(s => s.dispose());\n this._domEventsSubscriptions = [];\n\n }\n}","var map = {\n\t\"./about-dialog.action.ts\": 32819,\n\t\"./cashier-upload-documents.action.ts\": 84538,\n\t\"./chat.action.ts\": 36872,\n\t\"./com-points.action.ts\": 20342,\n\t\"./control-center.action.ts\": 51045,\n\t\"./deposit.action.ts\": 35067,\n\t\"./help-center.action.ts\": 80651,\n\t\"./hybrid-info.action.ts\": 92947,\n\t\"./inactivity-timeout-settings.action.ts\": 57281,\n\t\"./install-pwa.action.ts\": 34384,\n\t\"./loyalty-indicator.action.ts\": 68976,\n\t\"./my-club.action.ts\": 69920,\n\t\"./push-notifications-permissions-request.action.ts\": 21926,\n\t\"./reverse-withdrawal.action.ts\": 46877,\n\t\"./sign-up.action.ts\": 29227,\n\t\"./test-regulation-specific.action.ts\": 80948,\n\t\"./time-spent-reminder.action.ts\": 99410,\n\t\"./touch-id.action.ts\": 53324,\n\t\"./transaction-history.action.ts\": 69330\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 242;","var map = {\n\t\"./casino777/theme.definition\": [\n\t\t23449,\n\t\t5577,\n\t\t4869,\n\t\t1176,\n\t\t3790,\n\t\t7422,\n\t\t7625,\n\t\t1038\n\t],\n\t\"./casino888/cip/theme.definition\": [\n\t\t72167,\n\t\t5577,\n\t\t4241,\n\t\t917\n\t],\n\t\"./casino888/cis/theme.definition\": [\n\t\t97370,\n\t\t5577,\n\t\t4241,\n\t\t6746\n\t],\n\t\"./casino888/theme.definition\": [\n\t\t68097,\n\t\t5577,\n\t\t1341,\n\t\t609\n\t],\n\t\"./harrahs/theme.definition\": [\n\t\t67031,\n\t\t5577,\n\t\t2450,\n\t\t8662\n\t],\n\t\"./mrgreen/cip/theme.definition\": [\n\t\t46407,\n\t\t5577,\n\t\t4869,\n\t\t720,\n\t\t4635,\n\t\t6335,\n\t\t1648\n\t],\n\t\"./mrgreen/cis/theme.definition\": [\n\t\t82535,\n\t\t5577,\n\t\t4869,\n\t\t720,\n\t\t4635,\n\t\t6335,\n\t\t399\n\t],\n\t\"./mrgreen/theme.definition\": [\n\t\t72352,\n\t\t5577,\n\t\t4869,\n\t\t1176,\n\t\t720,\n\t\t3790,\n\t\t7645,\n\t\t4635,\n\t\t7422,\n\t\t6119,\n\t\t3509\n\t],\n\t\"./si/cis/theme.definition\": [\n\t\t13526,\n\t\t5577,\n\t\t4869,\n\t\t1176,\n\t\t720,\n\t\t7645,\n\t\t1835,\n\t\t6406,\n\t\t6923\n\t],\n\t\"./si/theme.definition\": [\n\t\t14649,\n\t\t5577,\n\t\t4869,\n\t\t1176,\n\t\t3790,\n\t\t7645,\n\t\t1835,\n\t\t9430,\n\t\t7591\n\t],\n\t\"./wsop/cip/theme.definition\": [\n\t\t27944,\n\t\t5577,\n\t\t2430\n\t],\n\t\"./wsop/theme.definition\": [\n\t\t88581,\n\t\t5577,\n\t\t2450,\n\t\t1341,\n\t\t441\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 66839;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./777/overrides/com/config\": [\n\t\t83893,\n\t\t3893\n\t],\n\t\"./777/overrides/com/config.ts\": [\n\t\t83893,\n\t\t3893\n\t],\n\t\"./777/overrides/uk/config\": [\n\t\t82675,\n\t\t2675\n\t],\n\t\"./777/overrides/uk/config.ts\": [\n\t\t82675,\n\t\t2675\n\t],\n\t\"./888casino/overrides/ca/config\": [\n\t\t21071,\n\t\t1071\n\t],\n\t\"./888casino/overrides/ca/config.ts\": [\n\t\t21071,\n\t\t1071\n\t],\n\t\"./888casino/overrides/ca/languages/eng\": [\n\t\t69847,\n\t\t9847\n\t],\n\t\"./888casino/overrides/ca/languages/eng.ts\": [\n\t\t69847,\n\t\t9847\n\t],\n\t\"./888casino/overrides/com/config\": [\n\t\t75744,\n\t\t5744\n\t],\n\t\"./888casino/overrides/com/config.ts\": [\n\t\t75744,\n\t\t5744\n\t],\n\t\"./888casino/overrides/dk/config\": [\n\t\t35498,\n\t\t5498\n\t],\n\t\"./888casino/overrides/dk/config.ts\": [\n\t\t35498,\n\t\t5498\n\t],\n\t\"./888casino/overrides/es/config\": [\n\t\t38102,\n\t\t8102\n\t],\n\t\"./888casino/overrides/es/config.ts\": [\n\t\t38102,\n\t\t8102\n\t],\n\t\"./888casino/overrides/es/languages/spa\": [\n\t\t63824,\n\t\t3824\n\t],\n\t\"./888casino/overrides/es/languages/spa.ts\": [\n\t\t63824,\n\t\t3824\n\t],\n\t\"./888casino/overrides/ger/config\": [\n\t\t78723,\n\t\t8723\n\t],\n\t\"./888casino/overrides/ger/config.ts\": [\n\t\t78723,\n\t\t8723\n\t],\n\t\"./888casino/overrides/ger/languages/ger\": [\n\t\t93102,\n\t\t3102\n\t],\n\t\"./888casino/overrides/ger/languages/ger.ts\": [\n\t\t93102,\n\t\t3102\n\t],\n\t\"./888casino/overrides/it/config\": [\n\t\t114,\n\t\t114\n\t],\n\t\"./888casino/overrides/it/config.ts\": [\n\t\t114,\n\t\t114\n\t],\n\t\"./888casino/overrides/nj/config\": [\n\t\t16656,\n\t\t6656\n\t],\n\t\"./888casino/overrides/nj/config.ts\": [\n\t\t16656,\n\t\t6656\n\t],\n\t\"./888casino/overrides/nj/languages/eng\": [\n\t\t94081,\n\t\t4081\n\t],\n\t\"./888casino/overrides/nj/languages/eng.ts\": [\n\t\t94081,\n\t\t4081\n\t],\n\t\"./888casino/overrides/nl/config\": [\n\t\t49780,\n\t\t9780\n\t],\n\t\"./888casino/overrides/nl/config.ts\": [\n\t\t49780,\n\t\t9780\n\t],\n\t\"./888casino/overrides/pt/config\": [\n\t\t84396,\n\t\t4396\n\t],\n\t\"./888casino/overrides/pt/config.ts\": [\n\t\t84396,\n\t\t4396\n\t],\n\t\"./888casino/overrides/pt/languages/por\": [\n\t\t3291,\n\t\t3291\n\t],\n\t\"./888casino/overrides/pt/languages/por.ts\": [\n\t\t3291,\n\t\t3291\n\t],\n\t\"./888casino/overrides/ro/config\": [\n\t\t63187,\n\t\t3187\n\t],\n\t\"./888casino/overrides/ro/config.ts\": [\n\t\t63187,\n\t\t3187\n\t],\n\t\"./888casino/overrides/se/config\": [\n\t\t88776,\n\t\t8776\n\t],\n\t\"./888casino/overrides/se/config.ts\": [\n\t\t88776,\n\t\t8776\n\t],\n\t\"./888casino/overrides/uk/config\": [\n\t\t19033,\n\t\t9033\n\t],\n\t\"./888casino/overrides/uk/config.ts\": [\n\t\t19033,\n\t\t9033\n\t],\n\t\"./default-config\": [\n\t\t16547\n\t],\n\t\"./default-config.ts\": [\n\t\t16547\n\t],\n\t\"./harrahs/overrides/nj/config\": [\n\t\t13050,\n\t\t3050\n\t],\n\t\"./harrahs/overrides/nj/config.ts\": [\n\t\t13050,\n\t\t3050\n\t],\n\t\"./harrahs/overrides/nj/languages/eng\": [\n\t\t92438,\n\t\t2438\n\t],\n\t\"./harrahs/overrides/nj/languages/eng.ts\": [\n\t\t92438,\n\t\t2438\n\t],\n\t\"./mrgreen/overrides/com/config\": [\n\t\t7092,\n\t\t7092\n\t],\n\t\"./mrgreen/overrides/com/config.ts\": [\n\t\t7092,\n\t\t7092\n\t],\n\t\"./mrgreen/overrides/com/languages/eng\": [\n\t\t41265,\n\t\t1265\n\t],\n\t\"./mrgreen/overrides/com/languages/eng.ts\": [\n\t\t41265,\n\t\t1265\n\t],\n\t\"./mrgreen/overrides/com/languages/fre\": [\n\t\t49631,\n\t\t9631\n\t],\n\t\"./mrgreen/overrides/com/languages/fre.ts\": [\n\t\t49631,\n\t\t9631\n\t],\n\t\"./mrgreen/overrides/com/languages/ger\": [\n\t\t38226,\n\t\t8226\n\t],\n\t\"./mrgreen/overrides/com/languages/ger.ts\": [\n\t\t38226,\n\t\t8226\n\t],\n\t\"./mrgreen/overrides/com/languages/spa\": [\n\t\t45204,\n\t\t5204\n\t],\n\t\"./mrgreen/overrides/com/languages/spa.ts\": [\n\t\t45204,\n\t\t5204\n\t],\n\t\"./mrgreen/overrides/dk/config\": [\n\t\t77305,\n\t\t7305\n\t],\n\t\"./mrgreen/overrides/dk/config.ts\": [\n\t\t77305,\n\t\t7305\n\t],\n\t\"./mrgreen/overrides/dk/languages/dan\": [\n\t\t77538,\n\t\t7538\n\t],\n\t\"./mrgreen/overrides/dk/languages/dan.ts\": [\n\t\t77538,\n\t\t7538\n\t],\n\t\"./mrgreen/overrides/ger/config\": [\n\t\t19049,\n\t\t9049\n\t],\n\t\"./mrgreen/overrides/ger/config.ts\": [\n\t\t19049,\n\t\t9049\n\t],\n\t\"./mrgreen/overrides/ger/languages/ger\": [\n\t\t33590,\n\t\t3590\n\t],\n\t\"./mrgreen/overrides/ger/languages/ger.ts\": [\n\t\t33590,\n\t\t3590\n\t],\n\t\"./mrgreen/overrides/se/config\": [\n\t\t50400,\n\t\t400\n\t],\n\t\"./mrgreen/overrides/se/config.ts\": [\n\t\t50400,\n\t\t400\n\t],\n\t\"./mrgreen/overrides/se/languages/swe\": [\n\t\t80220,\n\t\t220\n\t],\n\t\"./mrgreen/overrides/se/languages/swe.ts\": [\n\t\t80220,\n\t\t220\n\t],\n\t\"./si/overrides/mi/config\": [\n\t\t38119,\n\t\t8119\n\t],\n\t\"./si/overrides/mi/config.ts\": [\n\t\t38119,\n\t\t8119\n\t],\n\t\"./si/overrides/mi/languages/eng\": [\n\t\t20791,\n\t\t791\n\t],\n\t\"./si/overrides/mi/languages/eng.ts\": [\n\t\t20791,\n\t\t791\n\t],\n\t\"./wsop/overrides/nj/config\": [\n\t\t26669,\n\t\t6669\n\t],\n\t\"./wsop/overrides/nj/config.ts\": [\n\t\t26669,\n\t\t6669\n\t],\n\t\"./wsop/overrides/nj/languages/eng\": [\n\t\t45012,\n\t\t5012\n\t],\n\t\"./wsop/overrides/nj/languages/eng.ts\": [\n\t\t45012,\n\t\t5012\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 71217;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./777/overrides/com/config\": [\n\t\t83893,\n\t\t3893\n\t],\n\t\"./777/overrides/uk/config\": [\n\t\t82675,\n\t\t2675\n\t],\n\t\"./888casino/overrides/ca/config\": [\n\t\t21071,\n\t\t1071\n\t],\n\t\"./888casino/overrides/com/config\": [\n\t\t75744,\n\t\t5744\n\t],\n\t\"./888casino/overrides/dk/config\": [\n\t\t35498,\n\t\t5498\n\t],\n\t\"./888casino/overrides/es/config\": [\n\t\t38102,\n\t\t8102\n\t],\n\t\"./888casino/overrides/ger/config\": [\n\t\t78723,\n\t\t8723\n\t],\n\t\"./888casino/overrides/it/config\": [\n\t\t114,\n\t\t114\n\t],\n\t\"./888casino/overrides/nj/config\": [\n\t\t16656,\n\t\t6656\n\t],\n\t\"./888casino/overrides/nl/config\": [\n\t\t49780,\n\t\t9780\n\t],\n\t\"./888casino/overrides/pt/config\": [\n\t\t84396,\n\t\t4396\n\t],\n\t\"./888casino/overrides/ro/config\": [\n\t\t63187,\n\t\t3187\n\t],\n\t\"./888casino/overrides/se/config\": [\n\t\t88776,\n\t\t8776\n\t],\n\t\"./888casino/overrides/uk/config\": [\n\t\t19033,\n\t\t9033\n\t],\n\t\"./harrahs/overrides/nj/config\": [\n\t\t13050,\n\t\t3050\n\t],\n\t\"./mrgreen/overrides/com/config\": [\n\t\t7092,\n\t\t7092\n\t],\n\t\"./mrgreen/overrides/dk/config\": [\n\t\t77305,\n\t\t7305\n\t],\n\t\"./mrgreen/overrides/ger/config\": [\n\t\t19049,\n\t\t9049\n\t],\n\t\"./mrgreen/overrides/se/config\": [\n\t\t50400,\n\t\t400\n\t],\n\t\"./si/overrides/mi/config\": [\n\t\t38119,\n\t\t8119\n\t],\n\t\"./wsop/overrides/nj/config\": [\n\t\t26669,\n\t\t6669\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 31880;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./ara\": [\n\t\t86553,\n\t\t8855\n\t],\n\t\"./ara.ts\": [\n\t\t86553,\n\t\t8855\n\t],\n\t\"./chi\": [\n\t\t10444,\n\t\t9531\n\t],\n\t\"./chi.ts\": [\n\t\t10444,\n\t\t9531\n\t],\n\t\"./dan\": [\n\t\t5948,\n\t\t2965\n\t],\n\t\"./dan.ts\": [\n\t\t5948,\n\t\t2965\n\t],\n\t\"./dut\": [\n\t\t83112,\n\t\t4461\n\t],\n\t\"./dut.ts\": [\n\t\t83112,\n\t\t4461\n\t],\n\t\"./eng\": [\n\t\t54575\n\t],\n\t\"./eng.ts\": [\n\t\t54575\n\t],\n\t\"./fin\": [\n\t\t47263,\n\t\t6921\n\t],\n\t\"./fin.ts\": [\n\t\t47263,\n\t\t6921\n\t],\n\t\"./fre\": [\n\t\t65758,\n\t\t2919\n\t],\n\t\"./fre.ts\": [\n\t\t65758,\n\t\t2919\n\t],\n\t\"./ger\": [\n\t\t72057,\n\t\t4945\n\t],\n\t\"./ger.ts\": [\n\t\t72057,\n\t\t4945\n\t],\n\t\"./gre\": [\n\t\t25156,\n\t\t2949\n\t],\n\t\"./gre.ts\": [\n\t\t25156,\n\t\t2949\n\t],\n\t\"./ita\": [\n\t\t50902,\n\t\t7858\n\t],\n\t\"./ita.ts\": [\n\t\t50902,\n\t\t7858\n\t],\n\t\"./jpn\": [\n\t\t39968,\n\t\t586\n\t],\n\t\"./jpn.ts\": [\n\t\t39968,\n\t\t586\n\t],\n\t\"./nor\": [\n\t\t10932,\n\t\t6497\n\t],\n\t\"./nor.ts\": [\n\t\t10932,\n\t\t6497\n\t],\n\t\"./por\": [\n\t\t38142,\n\t\t4801\n\t],\n\t\"./por.ts\": [\n\t\t38142,\n\t\t4801\n\t],\n\t\"./rum\": [\n\t\t52836,\n\t\t896\n\t],\n\t\"./rum.ts\": [\n\t\t52836,\n\t\t896\n\t],\n\t\"./rus\": [\n\t\t77819,\n\t\t2701\n\t],\n\t\"./rus.ts\": [\n\t\t77819,\n\t\t2701\n\t],\n\t\"./spa\": [\n\t\t32622,\n\t\t2345\n\t],\n\t\"./spa.ts\": [\n\t\t32622,\n\t\t2345\n\t],\n\t\"./swe\": [\n\t\t93394,\n\t\t3379\n\t],\n\t\"./swe.ts\": [\n\t\t93394,\n\t\t3379\n\t],\n\t\"./tha\": [\n\t\t72395,\n\t\t3526\n\t],\n\t\"./tha.ts\": [\n\t\t72395,\n\t\t3526\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 57914;\nmodule.exports = webpackAsyncContext;"],"names":["BlankHorizontalSeparatorBox","styled","flexFixedSizeItem","props","PC_HORIZONTAL_SPACE_BETWEEN_ITEMS","multiplier","theme","mediaQuery","lAndBelow","MOBILE_HORIZONTAL_SPACE_BETWEEN_ITEMS","GameIconWrapperBox","xs","GameIconBox","Image","images","singleGame","defaultBackgroundImage","toString","LobbyGridBox","styledBox","LobbyWrapperBox","MainScreenComponent","observer","className","MAIN_SCREEN","CyClass","this","children","OrbitComponent","hoverColor","hex","hoverAdjustAmount","color","Color","distanceFrom","darken","hexa","lighten","e","console","log","activeColor","activeAdjustAmount","computeColorSet","colorSet","defaultDisabled","Check","hover","undefined","active","hoverBgGradient","normal","bgGradient","gradient","clrs","split","length","i","hexHoverClr","substring","join","hoverGradient","defaultHover","bg","border","activeBgGradient","hexActiveClr","activeGradient","defaultActive","disabled","ColorSetWanted","ButtonBox","rounded","layout","radius","margin","css","font","presets","ultra","noRemUnits","hasIcon","hasLabel","height","iconSize","strokeWidth","lateralPadding","fullWidth","width","labelOverflow","text","elevated","shadow","textGradient","Hover","Active","hoverSet","setKey","ButtonLabelBox","ButtonIconWrapperBox","reverseOnRTL","CssRule","ButtonLabelPaddingBox","ButtonSkeletonBox","iconOnly","ButtonIcon","IconComponent","options","sizeUnit","SvgSizeUnit","size","Button","withTheme","preset","icon","stroke","sizeVariant","tooltip","onClick","onMouseEnter","onMouseLeave","otherProps","presetValues","baseUIComponents","button","themePresetDefaults","defaults","colors","disabledColorSet","iconPlacement","placement","strokeValues","sizeVariantValues","iconSizeValue","fontSize","skeleton","title","Component","flexShrink","flexBasis","style","SelectWrapperBox","textLight","SelectBox","regular","backgroundMiddleDark","hasError","danger","boxBorderLighter","boxBorderContrast","SelectBoxArrow","Select","passThroughProps","selectWidth","ArrowIcon","services","currentTheme","icons","rightArrowIcon","Svg","flipOnRTL","SvgIcon","Rem","defaultSize","Px","Percent","ratio","sizeIsHeight","viewBox","display","version","xmlns","fill","React","DividerBox","SpacerBox","XCloseButtonBox","closeModalDialog","SwiperWindowComponent","arena","renderList","windowPosition","useIsInViewPort","ref","opt","useState","isIntersecting","setIntersecting","useEffect","intersectionObserverInit","threshold","intersectionThreshold","root","document","getElementById","intersectionRoot","IntersectionObserver","entry","intersectionRatio","intersectionObserverHandler","current","observe","disconnect","err","error","ArenaGamesListsComponent","useServices","listsCount","setListsCount","hasMoreLists","setHasMoreLists","intersectionSpyRef","useRef","isIntersectionSpyInViewport","arenas","getArena","arenaName","reactionDispose","reaction","user","isAuthorized","getBoundingClientRect","top","window","innerHeight","nextBatch","getNextBatchSize","loadNextBatch","range","Array","from","x","map","listWindowPosition","LiveCasinoGridItemBox","fluidWidth","mAndAbove","xlAndAbove","sAndBelow","LiveCasinoGridItemInfoItemBox","LiveCasinoGridItemInfobarIconBox","LiveCasinoGridItemThumbnailImageBox","filterBlur","ITEM_WRAPPER_BOX","RED","GREEN","LiveCasinoGridItemInfobarDefaultBox","hexToRgba","components","newLiveCasino","gridItem","infobarBackground","backgroundContrast","LiveCasinoGridItemInfobarCasino777Box","background","LiveCasinoGridItemInfobarMrGreenBox","horizontalLineBackgroundColor","LiveCasinoGridItemInfobarBox","styledByTheme","forCasino777","forMrGreen","apply","LiveCasinoGridItemClosedMessageBox","LiveCasinoGridItemThumbnailOverlayBox","LiveCasinoGridItemThumbnailBox","LiveCasinoGridItemWrapperBox","LiveCasinoGridItemTitleBox","LiveCasinoGridItemBetBehindButtonBox","LiveCasinoGridItemJackpotBox","LiveCasinoGridItemOpenAtBox","ComponentBody","_openGame","gameInfo","openGameParams","isRealMode","pageName","seoCategory","gameIndex","listTitle","open","tableInfo","liveTable","isMobilePhone","device","isMobile","isTablet","Dealer","alt","src","liveArena","dealerIcon","jpValue","jackpots","getGameJackpot","gameType","currency","formatMoney","tableIsFull","Seats","SeatsTaken","BetBehind","IsOpen","_renderDealerName","_renderSeatsCount","_renderRouletteDraws","_renderJackpot","_renderBetBehindButton","translation","translate","OperationHoursStartTime","gameTitle","gameImage","TableImage","gameArenaIcon","imageRandom","Math","random","Name","addQueryParam","lazy","liveCasinoMinMaxBetProps","_renderGameThumbnailImage","regulation","renderLiveCasinoMinMaxBet","_renderGameInfobar","_renderGameIsClosed","classNames","captureGameElementRef","_renderGameThumbnail","_renderGameTitle","_renderGameItem","logger","LiveCasinoArenaGridItem","withServices","LiveCasinoGridBox","LiveCasinoGridItemSkeletonBox","LiveCasinoGridItemSkeletonTitleBox","wrapperBorder","backgroundLight","LiveCasinoGridItemSkeletonWrapperBox","LiveCasinoArenaGrid","observable","action","_gameElementRef","_gridElementRef","_numberOfGames","_captureGameElementRef","gameElement","_computeNumberOfGamesInARow","_captureGridElementRef","gridElement","makeObservable","liveTableFeeds","currentArenaTabConfiguration","cmsBannerPositionFromConfig","_numberOfGamesPerRow","promotionalBannerConfig","displayRowPlace","_cmsBannerPosition","round","Number","_setCMSBannerPosition","promotionalBanner","liveTabConfigs","headerConfiguration","banners","templateID","componentID","bannerAdminPlaceholderId","showPlaceholder","fallbackComponent","skeletons","push","tableId","key","gridConfiguration","shouldRenderPromoBanner","games","gamesMap","getTableInfo","_renderPromotionalBanner","gameIds","getLiveGames","_renderGridSkeleton","_renderGridItem","os","isPC","fireImmediately","_renderGames","LiveCasinoGridItemDrawsBox","LiveCasinoGridItemDrawBox","ROULETTE_NUMBERS_MAP","red","green","RouletteDrawsComponent","drawValue","includes","RouletteLast5Numbers","drawColor","_getDrawColor","TableSeatsComponent","Players","_isTableFull","_getTableIsFullTranslationKey","_getPlayersCountFormated","fullSeatIcon","seatIcon","isLiveStreamOverlay","_getTableIsFullText","_getSeatsIconSource","LiveCasinoArenaNavbarButtonWrapperBox","LiveCasinoFilterButtonsBox","LiveCasinoNavbarBox","stickyHandler","dispose","_onFilterClicked","tabId","setCurrentArenaTab","FilterButtonComponent","mainContentTheme","isSticky","stickOffset","header","headerHeight","flex","configs","tabConfig","gamesId","labelTranslationKey","filter","seoPage","isActiveTab","toLowerCase","LiveCasinoArenaNavbar","ButtonWrapperBox","BalanceValue","balance","bankroll","walletProxy","balanceType","numberIndex","search","symbolIndex","slice","min","WrapperComponent","defaultProps","BalanceType","moneyColor","AdminBannerBox","bannerSegmentation","setBannerSegmentation","adminBanner","getSegmentationsForAdminBanner","then","segmentation","JSON","stringify","bannerConfig","getConfigForAdminBanner","config","AdminBannerComponent","adminBannerEnabled","minHeight","BannerComponent","OrbitSuspense","Suspense","fallback","RoutedComponent","HYBRID_EMBEDDED_NAV_MENU","AnimationDismissType","FLOATING_BUTTON_DURATION_IN_SECONDS","NATIVE_ANIMATION_FRAME_WIDTH","BurnoutAnimationContainer","viewportHeight","zIndex","animationEnded","dismissType","FadeOut","BurnoutAnimationBox","burnoutAnimation","lastFrame","FloatingButton","lAndAbove","CongratulationsTextBox","brandSecondary","animationWidth","show","DisposableBurnoutAnimationDependencies","handler","timeout","DisposableObject","ExitAnimationDurationByDismissType","BurnoutAnimation","lastFrameCache","pixiBurnoutAnimation","disposableDependencies","_animationElement","_animationWidth","_viewportHeight","_onPauseHandler","captureAnimationDivElement","el","createAnimation","paused","startAnimation","prevProps","status","AnimationStatus","start","attachToDOM","PixiSpineAnimation","force2DCanvasContext","name","jsonUrl","pixiJson","render","currentAnimationTrackEntry","spineAnimations","imagePreload","response","imageObj","pause","timeScale","spineAnimation","state","addListener","setAnimation","addAnimation","listener","event","stringValue","setShowCongratsText","complete","setDismissType","getExitAnimation","markAnimationEnding","addTimeout","onExitAnimationEnd","_dismissType","position","_hasAnimationEnded","v","_showCongratsText","BurnoutFab","onMount","removeButton","BurnoutFabContainer","BurnoutFabInner","disappearAnimation","keyframes","pulseAnimation","shadowAppear","brandPrimary","BurnoutAnimationWrapper","checkOmg","_onMountFAB","analytics","sendElasticInfoEvent","eventType","category","_renderFAB","_showButton","onClickFAB","_removeButtonAnimation","burnoutService","getBurnoutAnimationZIndex","_animationEnded","recheckOmg","retryOnFail","onSafeUnmountNotice","showOmg","runInAction","FAB_DISAPPEAR_DURATION_IN_SECONDS","ClockLastLoginBox","LastLoginBox","ClockAndLastLoginBoxComponent","configuration","data","ClockAndLastLoginBox","format","time","getTimeFormat","_renderLastLoginComponent","lastLoginDisplay","renderLastLoginComponent","ClockComponentBox","ClockComponent","dateTimeFormat","getDateTimeFormat","getFormattedTime","useCallback","currentDate","getCurrentServerDate","getCurrentDate","currentDateInRegulationTimeZone","convertToRegulationTimeZone","date","isUTC","dateTime","setDateTime","updateTime","subscription","onServerTimeUpdated","off","interval","namedSetInterval","clearInterval","Box","box","BannerContainerBox","LOBBY_PAGE","NEW_LIVE_AB_CASINO_PAGE","bannerId","CmsBannerId","cmsBanners","loadBanner","bannerDefinition","bannersMap","EmptyBannerDefinition","CmsBannerComponent","renderSkeleton","EmptyBannerContainerBox","EmptyBannerComponent","hybrid","isEmbedded","FreePlayContainerBox","VouchersSwiperBox","VoucherSwiperArrowContainerBox","isPrev","freePlay","swiperArrowPrev","swiperArrowNext","SwiperComponent","VouchersSwiperComponent","prevElement","nextElement","userVouchersSortedByExpirationDate","dir","language","isRTLLanguage","slidesPerView","centeredSlides","pagination","clickable","navigation","nextEl","prevEl","modules","Pagination","Navigation","onBeforeInit","swiper","params","onActiveIndexChange","onCurrentVoucherIndexChanged","activeIndex","_vouchers","isActive","voucher","id","VoucherGamesListBox","VouchersSwiperTitleBox","VouchersSwiperBackgroundBox","backgroundVouchersSlider","VouchersGamesListTitleBox","FreePlayContainerComponent","_renderVoucherGames","currentVoucher","currentVoucherIndex","freePlayGames","voucherGame","freePlayType","onClickHandler","play","marginBottom","_onCurrentVoucherChangedHandler","voucherIndex","VoucherCardBox","showCursor","xlExact","xxl","lowHeight","VoucherCardSideBox","VoucherCardFaceBox","backSideShown","VoucherCardFaceContentBox","VoucherCardSideFooterBox","VoucherCardFaceFooterBox","VoucherCardFaceIconContainerBox","VoucherCardFaceDetailsBox","VoucherCardFaceOriginalAmountBox","VoucherCardFaceVoucherNameBox","bold","VoucherCardFaceCurrentAmountContainerBox","VoucherCardFaceIconBox","iconUrl","VoucherCardFaceCurrentAmountBox","VoucherCardSideToggleButtonBox","VoucherCardSideFooterContentBox","VoucherCardFaceHeaderBox","isCloseToExpiration","VoucherCardFaceHeaderComponent","_expirationTimer","expirationMessage","setInterval","setState","OrbitComponentWithState","VoucherCardFaceComponent","formattedOriginalAmount","formattedCurrentBalance","InfoIcon","infoIcon","backgroundImageUrl","_renderOriginalAmount","voucherName","_renderCurrentAmount","onToggleSide","VoucherCardBackBox","VoucherCardBackHeaderBox","VoucherCardBackContentBox","VoucherCardBackFooterBox","VoucherCardBackComponent","CloseIcon","closeIcon","voucherDescription","VoucherCardComponent","_onToggleSide","showBackSide","_onCardSideClickHandler","Boolean","FreeToPlayAnimatedIconBox","isBottomNavBarEnabled","FreeToPlayClickBox","iconRequestOptions","f2p","freeToPlay","timings","delay","iconObservableTarget","_openBonusWheel","_sendAnalytics","showPromotion","channel","area","AreaType","source","CHANNEL_SOURCE","element","CHANNEL_ELEMENTS","wrapper","animationDisposer","AnimatedIconUnloadReason","requestOptions","loadFreeToPlayAnimation","isPromotionEligible","shouldShowIcon","isPromotionOpened","bottomNavigationBar","isBottomNavigationEnabled","_captureElementRefForIcon","bind","appID","customData","location","isHomePage","currentUri","pathName","playerRMSStatus","FreeToPlayAnimatedIconComponent","GamblingSessionMessageBaseBox","LimitType","GamblingSessionLimitReachedComponent","mainTextKey","limitType","Loss","Time","gamblingSessionLimitTimestamp","sessionLimitTimestamp","sessionDuration","totalWins","totalBets","dialogHandler","close","GamblingSessionLogoutDialog","primaryAction","onLogout","secondaryAction","onCancel","buttonsOnSeparateLines","GamblingSessionLimitSummaryBox","GamblingSessionInfoWrapperBox","GamblingSessionInfoTextBox","dialogTextMixin","GamblingSessionInfoValueBox","dialogHighlightedTextMixin","GamblingSessionInfoComponent","toHoursAndMinutesString","GamblingSessionLimitsBox","sAndAbove","DropDownsGroupBox","LossLimitDropDownComponent","_onItemSelectedHandler","value","onItemSelected","cancel","totalBankroll","translateLossLimit","percent","lossAmount","loss","parseCommaSeparatedNumbers","servicesConfigs","Regulation","Spain","LossLimitPercentages","p","floor","lossLimit","label","items","_getLossLimits","nullItemText","errorMessage","TranslationsHelper","TimeLimitDropDownComponent","Promise","resolve","acceptSelection","_parseMaxDurations","dialog","showSimpleTextModal","hideCloseButton","_translateTimeSpan","TimeSpan","buttons","buttonPreset","sendAnalytics","DialogButtonClickHandleResultEnum","timeSpan","totalMinutes","_translations","minutes","hours","totalHours","isMobileOS","MaxDurationsInMinutesForMobile","MaxDurationsInMinutesForPC","totalSeconds","_getDropDownItems","IntervalReminderDropDownComponent","IntervalReminderInMinutes","val","_getReminderIntervals","RestrictionPeriodsDropDownComponent","totalDays","week","month","days","overrideValueOnCancel","RestrictionPeriodsInMinutes","FooterBox","DropDownsSeparatorBox","GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK","RegulatoryTextBox","textMiddleDark","GamblingSessionMessageBox","GamblingSessionWarnMessageBox","buttonWarning","GamblingSessionSetupComponent","_onAfterValidationEnabled","_performValidation","intervalReminder","selectedLimits","reminderInterval","onSetLimits","lossLimitAmount","sessionDurationLimit","restrictionPeriod","_onContinue","isValidationEnabled","_onTimeLimitSelected","_onGameLimitSelected","_onIntervalReminderSelected","_onRestrictionPeriodSelected","_captureRegulatoryTextElement","linkElement","querySelector","addEventListener","linksNavigation","openResponsibleGaming","lossLimitsErrorMessage","timeLimitsErrorMessage","errorMessages","responsibleGamingLinkText","responsibleGamblingLink","dangerouslySetInnerHTML","__html","_getRegulatoryText","lastBetActivity","lastBetDate","DropDownContainerBox","ErrorMessageBox","visible","DropDownLabelBox","DropDownComponent","_onChange","eventData","target","parseInt","selectionResult","selectedOption","_renderErrorMessage","splice","onChange","item","GameItemImgWrapperBox","fixedWidth","GameItemContainerBox","hide","GameItemFpThumbBox","useSquareIcons","FP_VOUCHER_TYPES","typeFS","typeFP","typeJFS","typeJFP","freePlayBgImage","GameItemDelimiterBox","verticalLineGlow","GameItemDetailsWrapperBox","GameItemTitleBox","GameItemJackpotBox","GameItemButtonsAreaBox","GameItemComponent","playBtnText","shouldUseSquareIcons","GameJackpotBox","GameJackpotValueBox","jackpotValue","GameJackpotComponent","JACKPOT_WIDGET","RED_TIGER_JACKPOT","SearchTitleBox","NumberOfResultsBox","SearchBoxTitleComponent","_renderNumberOfResults","numberOfResults","SearchGamesListBox","SearchNoGamesFoundBox","SearchGameItemBox","SearchMatchBox","searchText","removeSpecialCharacters","gameSearch","currentSearchText","gameName","nameOfTheGame","index","indexOf","beforeHighlightText","highlightText","numberOfSpecialCharacters","afterHighlightText","HighlightSearchListItemComponent","SearchTextWrapperBox","SearchGameImageBox","_onClickHandler","closeSearchResult","userMenu","closeMenu","sideMenu","closeMobileMenu","searchSuggestion","executeAction","useLazyLoading","SearchGameItemComponent","SuggestedGamesComponent","suggestedCategory","_renderGame","MoreGamesBox","shouldDisplay","hasMoreItems","loadedGamesCount","searchResult","gamesToRender","suggestedGame","onLoadMore","_renderFoundGames","suggestedGames","FoundGamesComponent","SearchResultItemBox","SlotsSearchLinkBox","LiveSearchLinkBox","CardAndTableSearchLinkBox","RegularSearchLinkBox","sendOrbitUserFlowEvent","OrbitUserFlowAnalyticsCategory","type","iconStyle","GAMES_CATEGORIES","_renderSearchLinkBox","linkIconClass","SearchResultItemComponent","SearchLinksListBox","boxBorderLight","SuggestedLinksComponent","_renderSuggestedCategory","_renderSuggestedCategories","SearchFormResultsBox","SearchFormResultsWrapperBox","SuggestedVideoSlidesFilterListPreviewTitleBox","SuggestedVideoSlidesFilterItemPreviewBox","SuggestedVideoSlidesFilterItemPreviewPlayerBox","SuggestedVideoSlidesFilterItemPreviewFooterBox","SuggestedVideoSlidesFilterItemPreviewFooterTextBox","SuggestedVideoSlidesFilterItemPreviewComponent","filterCount","videoSlidesFilterPreviewSuggestion","muted","onError","onLoading","onWatchTimeLimitReached","isInCenterStage","inViewport","videoPlayingService","videoOnDemandPlaying","loop","SuggestedVideoSlidesFilterListPreviewHeaderBox","SuggestedVideoSlidesFilterListPreviewBox","SuggestedVideoSlidesFilterListPreviewContentBox","SuggestedVideoSlidesFilterListPreviewComponent","ExploreOutlinedIcon","exploreOutlinedIcon","marginRight","loadedGames","setLoadedGames","r","isSearchBoxOpened","_onLoadMore","OrbitUserFlowAnalyticsLabel","moreItems","isHybridAndroid","isHybrid","isIOS","portrait","searchResultComponentRef","isSearchInProgress","miniOrbit","isEnabled","suggestedCategories","videoSlides","shouldBeDisplayed","suggestedVideoSlidesFilterListPreview","SearchResultComponent","SearchClearIconBox","SearchInputMobileBox","SearchInputAreaBox","_timeoutRef","clearTimeout","openSearchResult","onChangeHandler","setTimeout","searchInputRef","blur","autoComplete","placeholder","SearchInputArea","SearchIconBox","_showResetSearchIcon","SearchIcon","searchIcon","focus","SearchInputMobileComponent","SearchInputPCComponent","GameSearchBox","_onUpdate","scrollTo","removeEventListener","searchComponentRef","GameSearchComponent","SearchInputFormBox","GeoModalWrapperBox","landscape","HEADER_Z_INDEX","RegulatoryDataBox","DefaultBox","PcBox","xlAndBelow","MobileBox","GamblingWarningBox","styledByDevice","GamblingWarningComponent","gamblingMessageConfig","gambling_message","href","preventDefaultOnClick","Mobilebox","ResponsibleGamingIconsBox","ResponsibleIconsComponent","ageButtonConfig","renderHeaderMinimumGamblingAge","renderHeaderRegulationIcons","responsibleIconsConfig","responsibleIcons","_renderAgeButton","ageButton","_renderResponsibleIcons","RegulatoryDataComponent","_captureHeaderUpperRef","attachToHeaderService","setHeaderRegulationDataElement","isCis","_headerConfig","_renderMobileLastLogin","_getRegulatoryContent","MobileContainerBox","UserIconBox","welcomePostLoginMobile","UserBankrollBox","FreePlayDotIndicatorBox","HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent","_onClick","openMenu","_renderFreePlayIndicator","hasVouchers","TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE","getButtonSizeVariant","getButtonsSeparator","B","AnonymousButtonsContainerBox","HeaderWelcomeButtonsForAnonymousUserComponent","separator","renderHeaderRegisterButton","gameContext","renderHeaderLoginButton","PCContainerBox","HeaderCashierButtonComponent","_onCashierClick","cashier","openCashier","sessionType","CashierSessionType","HeaderWelcomeButtonsForAuthorizedUserPcViewComponent","HeaderWelcomeButtonsForAuthorizedUserComponent","HeaderWelcomeButtonsBox","HeaderWelcomeButtonsComponent","InsideOrbitMenuContainerComponent","isInsideAutomation","textAlign","INSIDE_ORBIT_MENU_CONTAINER","JackpotWidgetAspectRatioBox","JACKPOT_WIDGET_LAYOUT","handlePaddingTop","JackpotWidgetBgBox","shouldRenderSkeleton","jackpotWidget","byType","jackpotType","handleBackgroundImage","JackpotWidgetBox","JackpotWidgetLogoBox","JackpotWidgetAmountBox","JackpotWidgetFooterBox","JackpotWidgetClockLabelBox","JackpotWidgetClockBox","updateClockInterval","clockInit","jackpotData","mustHitTime","clearClockInterval","updateClock","serverDate","mustHitDate","remainingTimeMilis","getTime","remainingTimeTimeSp","max","clockValue","useTotalHours","warning","widgetWidth","themeType","getThemeType","isDaily","JackpotType","JackpotWidgetClockComponent","JackpotWidgetAmountLabelBox","JackpotWidgetCollectingLabelBox","JackpotWidgetCollectingAmountBox","animationProps","ShineLeftPosition","ShineRightPosition","BorderShineWidth","JackpotWidgetBorderShine","bottom","rtl","startPos","endPos","borderShineKeyframes","RadialShineWidth","JackpotWidgetRadialShine","radialShineKeyframes","JackpotWidgetAmountContainer","handleTitleBoxFontSize","mAndBelow","LANDSCAPE","LANDSCAPE_WIDE","PORTRAIT","JackpotTitleDefaultBox","JackpotTitleMrGreenBox","brandSecondaryLight","forMrGreenCip","forMrGreenCis","_onWidgetClick","routing","currentRoute","arenaType","widgetConfig","listInfo","getGamesListByJackpotId","jackpotId","sendOrbitMarketingEvent","_isWidgetClickable","aspectRatioBox","resizeObserverInstance","disposer","_captureJackpotWidgetAspectRatioBoxRef","refEl","ResizeObserver","setWidgetWidth","oldRefEl","unobserve","readyState","imagesReady","JackpotInternalId","jackpotHandler","currentJackpotsById","_isJackpotHandlerReady","all","logo","_setImagesReady","jackpotState","translationKey","JACKPOT_STATE","isMobileTablet","PORTRAIT_TALL","lastWinAmount","jackpotAmount","String","_shouldRenderSkeleton","startGradual","WrapperBox","_getJackpotWidgetLayout","isDailyJPWidget","isClickable","_getAmountDisplayed","_getCountDownTimerTranslationKey","entries","elementRectangle","JackpotWidgetComponent","JackpotWidgetClockLabelSkeletonBox","JackpotWidgetFooterElementSkeletonBox","JackpotWidgetCollectingLabelSkeletonBox","JackpotWidgetFooterSkeletonBox","JackpotWidgetAmountSkeletonBox","GamblingSessionDialog","LaboratoryShowcasePageWrapperBox","GeoLocationBrowserApiTestComponent","navigator","geolocation","getCurrentPosition","latitude","coords","longitude","code","message","TextareaBox","backgroundDark","Label","ShowcaseConfigurationBox","ShowcaseContentContainerBox","BASE_CONTENT","showProgressBar","showDefaultImage","showDefaultButton","BASE_BUTTON","closeToast","ToasterShowcase","toasterOpt","setToasterOpt","onChangeInput","ev","checked","field","resize","rows","htmlFor","customizeToasterOptions","contentProps","image","toastOptions","toaster","showStandardToast","removeAllToasts","BurnoutAnimationScenario","GamblingSessionSetupDialogShowcase","Setup","dialogType","setDialogType","limits","alert","IntervalReminder","LimitReached","Logout","showModal","isHighPriority","mobileCenterHeader","noDefaultContentPadding","ONBOARDING_TOUR_ALREADY_SHOWN","OnboardingTourShowcase","openOnboarding","onboardingTour","localStorage","getItem","removeItem","reload","enabled","AvailableSizes","BurnoutAnimationShowcase","_scenario","GotOMG","NotYetOMG","scenario","marginBlockEnd","toggleRenderAnimation","_renderAnimation","togglePauseAnimation","_paused","PixiSpineShowcase","_forceCanvas","_runAnimationASAP","_animationIndex","_animationList","spineJsonUrl","animatedIconsPOC","millionaireGenieMegawaysSpineV1","millionaireGenieMegawaysSpineV2","millionaireGenieMegawaysSpineV3","millionaireGenieMegawaysSpineV4","_pixiAppDestroyers","addPixiAnimation","def","_pixiAppRootEl","iconPixiAnimation","animationSchedule","loaderResources","burnoutAnimationResource","availableAnimations","spineData","animations","a","runAnimation","removePixiAnimation","appDestroyer","shift","pop","capturePixiAppRootEl","defaultChecked","animationDef","BgBox","ThemeSwitcher","tools","getGuid","guid","setTheme","alignItems","th","TextInputBox","ButtonWrapper","ButtonsShowcase","_iconComponent","settingsIcon","withIcon","component","addIcon","backIcon","iconComponent","iconSizeVariant","buttonLabel","ThemedBox","fontPreset","body","TypographyColorAndPresetShowcase","textColor","boxBorder","step","parseFloat","ShowcaseDropdownComponent","optionsTemplate","concat","values","toUpperCase","fieldName","caption","defaultValue","currentValue","selectedIndex","onChanged","showTextAreaBox","onValueChanged","showBooleanDropDownBox","PopoupsShowcase","_dialogHandler","_popupOptions","_contentText","_onUpdateFieldNameValue","_onUpdateContentValue","popupBody","flexDirection","justifyContent","padding","whiteSpace","overflow","onClosed","IconsShowcase","inputSize","Rem2","Rem4","Rem6","Rem12","Default","flexWrap","Object","keys","ThemeDefaultIcons","specialProps","animated","TheIcon","getIconSizeProps","MQBox","mq","MediaQueryShowcase","Value","paddingRight","userAgent","clientDevice","detected","clientHintsAvailable","model","architecture","platform","platformVersion","bitness","mobile","brands","brand","uaFullVersion","Device","renderUserAgentString","renderClientHints","renderDeviceDetectionData","ClientHintsShowcase","ShowcaseWrapperBox","ShowcaseLabelBox","ShowcaseCollapseIndicatorBox","ShowcaseContentWrapperBox","LaboratoryShowcaseContainerComponent","showcase","isOpen","setIsOpen","showcaseDisabled","renderer","SimpleMessageDialogShowcase","WarningIcon","warningSignIcon","showEmptyTitle","disableFullscreenMobile","SHOWCASES","LaboratoryShowcase","VideoBox","VideoContainerBox","VideoComponent","videoPlayerRef","videoElementRef","reactionsRef","isAppVisible","createVideoPlayer","getVideoPlayer","isLastGameType","videoPlayer","videoElement","destroy","poster","load","loadVideo","playVideo","pauseVideo","retryPlay","reactions","isLoading","watchTimeLimitReached","forEach","isVideoOnDemand","handlePlayVideoClick","logUIAction","gaCategory","videoIsLoading","videoWatchTimeLimitReached","displayVideo","playsInline","autoplayAllowed","renderPlayerControls","SectionTitleBox","CellValueBoolBox","checkMark","CellValueTextBox","CellTitleBox","GameFeatureCellComponent","_renderNoInfo","PreviewFeatureType","_renderCheckbox","_renderDescription","_renderValue","TableContainerBox","GameFeaturesTableComponent","cells","reduce","acc","curr","cell","features","chunks","splitArrayToChunks","cellSpacing","chunk","_renderGameInfoTableRow","GameDescriptionTextBox","GameAboutComponent","aboutText","GameJackpotPreviewBox","JackpotAmountPreviewBox","GameJackpotPreviewComponent","GamePreviewInfoContainerBox","hasJackpot","generalSettings","shouldRenderJackpotPreview","gamesPreviewConfig","shouldDisplayJackpot","gameTitleComponent","gamePreviewFeaturesSelector","getPreviewFeatures","_renderJackpotPreview","GamePreviewInfoContainerComponent","StripeImageBox","GameStripeImageComponent","imageSrc","stripImage","stripeImageFallback","fallbackSrc","TrailerBox","GameTrailerComponent","autoPlay","TrailerOrStripeImageComponent","hasVideoTrailer","LobbyHeaderTitleContainerBox","LIVE_CASINO_PAGE_WRAPPER","LobbyHeaderTitleBox","LobbyHeaderDefaultBox","STICKY","GAMING_HISTORY_PAGE","SESSION_HISTORY_PAGE","GAMES_OPEN_SESSIONS_PAGE","LobbyHeaderSiBox","baseColors","LobbyHeaderMrGreenBox","LobbyHeaderWsopBox","LobbyHeaderBox","forSI","forWsop","LobbyHeaderLineBox","LobbyHeaderButtonsContainerBox","LobbyHeaderButtonsBox","handleSearchClick","lobbyHeaderClasses","updateElement","renderingOptions","gamesFilter","renderFiltersIndicator","FilterIndicatorRenderingLocation","reactElement","_renderFiltersIndicatorNextToTheTitle","showSearchIcon","renderMobileFiltersIndicator","_renderFiltersIndicatorUnderTheTitle","LobbyHeaderComponent","Player","default","DotLottiePlayer","LoyaltyBarWrapperComponent","loyaltyIndicator","init","DialogCloseButtonBox","modalDialog","closeButtonSize","DialogTextBox","DialogBoldTextBox","DialogHighlightedTextBox","DialogDimmedTextBox","textContrast","DialogTitleBox","APPLY_BORDERS","APPLY_ANIMATION","MOBILE_CENTERED_HEADER","FORCE_TRANSPARENT_BACKGROUND","FORCE_TRANSPARENT_CONTENT_BACKGROUND","DISABLE_FULLSCREEN_MOBILE","FORCE_CENTRALIZATION","APPLY_MAX_HEIGHT","FORCE_FULLSCREEN_TABLET","APPLY_MODAL_CLOSING_ANIMATION","ButtonsWrapperDefaultBox","flexColumnContainerMixin","flexRowReverseContainerMixin","flexGrowItem","ButtonSpacerDefaultBox","LinkActionBox","LinkWrapperDefaultBox","ModalDialogActionsComponent","useWarningPreset","linkAction","DialogHeaderBox","HeaderButtonsContainerBox","DialogHeaderComponent","onCloseButtonClick","renderExtraButtons","_renderExtraButtons","_renderCloseButton","_renderTitle","_renderButtons","_renderContent","AspectRatioBox","expectedWidth","expectedHeight","AspectRatioContentBox","useBGColorDuringLoadAnimation","AspectRatioContainerComponent","Link","preventDefault","openUrl","result","buildFullUri","itemProp","customProps","anchorRef","_getAnchorProps","enableTap","_renderAnchor","elementRef","MinimumGamblingAgeIconDefaultBox","isWide","isShownInHeader","MinimumGamblingAgeDefaultBox","disableClick","hoverNone","MinimumGamblingAgeBox","MinimumGamblingAgeIconSiBox","MinimumGamblingAgeIconBox","MinimumGamblingAgeComponent","iconType","age","responsibleGamingAge","_getIconType","regulationSpecific","denmark","age18PlusWide","responsibleGambling","age21PlusFlat","age18PlusFlat","age18PlusCapsule","age21PlusRound","age18PlusRound","url","_getIcon","IconBox","iconBox","NetherlandsMinimumGamblingAgeLabelBox","NetherlandsMinimumGamblingAgeComponent","SwedenMinimumGamblingAgeIconBox","SwedenMinimumGamblingAgeComponent","DenmarkResponsibleGamingButtonsBox","DenmarkResponsibleGamingButtonBaseBox","imageUrl","DenmarkSafeToPlayButtonBox","DenmarkSafeToPlayButtonComponent","_clickHandler","openSafeToPlay","safeToPlayButton","DenmarkSelfExclusionButtonBox","DenmarkSelfExclusionButtonComponent","openSelfExclusion","selfExclusionButton","DenmarkSelfTestButtonBox","DenmarkSelfTestButtonComponent","openSelfTest","selfTestButton","DenmarkSecondaryResponsibleGamingButtonBox","DenmarkSecondaryResponsibleGamingButtonComponent","openSecondaryResponsibleGaming","responsibleGamingButton","DenmarkResponsibleGamingButtonsComponent","hideSelfExclusionLinks","_renderSecondaryResponsibleGamblingIcon","_renderSelfExclusionButtons","PanicButtonSVGIconClassName","PanicButtonBox","ACTIVE","IN_DETAILED_HISTORY","PanicButtonTooltipBox","textDark","PanicButtonPopupBox","PanicButtonPopupTimeBox","PanicButtonPopupOkBox","PanicButtonPopupComponent","_closeDialog","now","Date","getHours","getMinutes","textMessage1","textMessage2","_getTime","textMessage3","TooltipClickHereBox","PanicButtonTooltipCloseBox","PanicButtonMobileOverlayBox","ResponsibleGamingButtonsGermanyComponent","isTooltipVisible","panicRestrictUser","_openPopup","catch","shouldBeClosedOnlyByUser","stopPropagation","_closeToolTip","_getTooltipBox","_restrictUser","PanicButtonIcon","panicButtonRegulationIcon","_onMouseEnterPanicBtn","_onMouseLeavePanicBtn","onClickPanicBtn","GermanyResponsibleGamingButtonPlacement","_renderTooltipClickHere","_renderCloseBtn","_renderMobileOverlay","NetherlandsSelfTestButtonBox","NetherlandsSelfTestButtonComponent","d","OntarioResponsibleGamingButtonsBox","OntarioSafeToPlayButtonBox","ontario","OntarioSafeToPlayButtonComponent","OntarioResponsibleGamingButtonsComponent","SwedenResponsibleGamingButtonsBox","SwedenResponsibleGamingButtonSBGIconClassName","SwedenResponsibleGamingButtonBaseBox","useIconsOnly","SwedenSelfExclusionButtonBox","SwedenSelfExclusionButtonComponent","SelfExclusionIcon","selfExclusionRegulationIcon","SelfExclusionSymbolIcon","selfExclusionRegulationSymbolIcon","SwedenGamingLimitsButtonBox","SwedenGamingLimitsButtonComponent","externalLinks","openGameLimits","channelArea","channelElement","ControlCenterOpenSource","GamingLimitIcon","gamingLimitRegulationIcon","GamingLimitSymbolIcon","gamingLimitRegulationSymbolIcon","SwedenSelfTestButtonBox","SwedenSelfTestButtonComponent","SelfTestIcon","selfTestRegulationIcon","SelfTestSymbolIcon","selfTestRegulationSymbolIcon","SwedenResponsibleGamingButtonsComponent","spaceMultiplier","GenericSideMenuItemIconCommonBox","GenericSideMenuItemIconDefaultBox","textActive","GenericSideMenuItemIconCasino777Box","backgroundActive","GenericSideMenuItemIconHarrahsBox","GenericSideMenuItemIconWsopBox","logoBackground","GenericSideMenuItemIconSIBox","GenericSideMenuItemIconMrGreenBox","GenericSideMenuItemIconBox","forHarrahs","GenericSideMenuItemLabelBox","GenericSideMenuItemDefaultBox","textHover","GenericSideMenuItemCasino777Box","GenericSideMenuItemHarrahsBox","GenericSideMenuItemWsopBox","GenericSideMenuItemBox","SideMenuItemsListDefaultBox","SideMenuItemsListHarrahsWsopBox","SideMenuItemsListMrGreenBox","SideMenuItemsListBox","GenericSideMenuImageBox","GenericSideMenuItemPreIconDefaultBox","GenericSideMenuItemPreIconSIBox","GenericSideMenuItemPreIconBox","GenericSideMenuItemComponent","menuItem","execute","_renderIcon","iconSource","Icon","iconAltText","imageURI","get","_renderMenuItemContent","imageOnlyRendering","isMatchToCurrentUrl","withArrow","forwardIcon","getLinkUrl","decodeURI","encodeURI","SideMenuItemContainerDefaultBox","SideMenuItemContainerCasino777Box","SideMenuItemContainerMrGreenBox","SideMenuItemContainerSiBox","SideMenuItemContainerBox","SideMenuItemContainerComponent","menuItems","menuItemKeys","getMenuItem","listStyleType","renderMenuItem","SideMenuLinksGroup","GameImageBox","GameImageDefaultBox","commonGameImageCssMixin","GAME_BOX_JACKPOT_TEMPLATE","squareIcon","GameImageAnimatedBox","GameImageAnimatedComponent","animatedImageWrapper","pixiAnimationRegistration","_captureAnimatedImageElementRef","unregister","loadPixiAnimatedIcon","gameAnimatedIconsManager","register","animationJsonUrl","animationTiming","onAnimationLoad","onAnimationWillUnload","GameImageComponent","_loadAnimatedIconTimeout","onSettled","loadingAnimation","disableAnimation","attemptLoadAnimatedIcon","getGameImage","_shouldUseSquareIcons","animatedIcon","getAnimatedImageTimings","hideStaticImage","onAnimationIconStateChange","seoAlt","getImageSeoAlt","imgUrl","useLazyLoad","getGameImageExpectedSizes","SINGLE_GAME_IMAGE","getGameImagePlaceHolderUrl","onLoadStart","onLoad","GAME_BOX","TWO_LINES_TITLE","MULTIPLE_LINES_TITLE","ENABLE_HOVER_ANIMATION","SWIPER_MODE","GAME_IMAGE_CONTAINER","GRID_GAMES_LIST","StandardToastImageDefaultBox","TopBannerDefaultBox","NEW_LIVE_CASINO_PAGE","TIPPING_HISTORY_PAGE","TopBanner777Box","TopBannerSIBox","TopBannerMrGreenBox","TopBannerCasino888Box","TopBannerBox","forCasino888","TopBannerImageBox","PCBox","TopBannerLogoImageDefaultBox","TopBannerLogoImageBox","medium","TopBannerTitleDefaultBox","TopBannerTitleCasino777Box","TopBannerTitleBox","TopBannerLiveLogoDefaultBox","TopBannerLiveLogoCasino777Box","TopBannerLiveLogoBox","AnimatedTopImageWrapper","AnimatedTopImageScrollHandler","LottieTopImageWrapper","LottieAnimatedTopImageComponent","styles","useMemo","autoplay","PixiAnimatedTopImageComponent","_reactionDisposer","_bannerPixiAnimation","_startAnimation","_stopAnimation","defautSkinConfiguration","scale","pixiApp","slotsAnimatedBannerResource","setSkinByName","setSlotsToSetupPose","screen","y","set","_createAnimation","AnimatedTopImageComponent","imageAnimationConfig","engine","TopImageComponent","srcLogo","casinoLiveLogoMobile","casinoLiveLogoPC","isFilterOn","topImageRef","animatedBanner","altText","fetchPriority","_renderLogoAndTitle","UsefulLinksListBox","LinksGroupWrapperBox","linksGroupWrapperBox","usefulLinksMenuItems","list","linksGroupWrapperClassName","onBeforeClick","onItemClick","showSeparator","UsefulLinksListComponent","UserMenuSeparatorBox","UserMenuSectionBox","VideoPlayButtonBox","spriteSheet","useContext","OrbitContext","createServicesToInjectMap","accumulator","serviceName","serviceInstance","servicesToInject","srv","resolvedServiceInstance","servicesNamesToInject","componentProps","serviceProvider","servicesNames","getServiceByName","getServicesToInject","setServicesToInject","unresolvedServices","servicesMap","instance","getUnresolvedServices","resolveServicesToInject","resolvedServices","ServiceBase","_serviceFactory","_reactions","thisProto","getPrototypeOf","constructor","CLASS","expression","effect","opts","mobxReaction","sdk","getAbTestingDataForFeature","_getClassName","OrbitMarketingEventAnalyticsCategory","OrbitMarketingEventAnalyticsLabel","OrbitAIFeatureAnalyticsCategory","NEW_LIVE_CASINO_ARENA_NAME","NEW_LIVE_CASINO_AB_ARENA_NAME","CIP_ALL_GAMES_ARENA_NAME","SLOTS_ARENA_NAME","CASINO_GAMES_ARENA_NAME","JACKPOTS_ARENA_NAME","EXCLUSIVE_ARENA_NAME","SCRATCH_CARDS_ARENA_NAME","VIDEO_POKER_ARENA_NAME","INSTANT_WIN_GAMES_ARENA_NAME","BLACKJACK_ARENA_NAME","VIRTUAL_SPORT_ARENA_NAME","ROULETTE_ARENA_NAME","PROGRESSIVE_SLOTS_ARENA_NAME","NEW_GAMES_ARENA_NAME","HOME_PAGE_ARENA","VIDEO_SLIDES_ARENA","ALL_ARENAS","of","getCasinofiedDeviceInfo","hybridTestData","getAppMareketingData","deviceType","getCasinofiedDeviceType","OS","isNative","browserType","appsFlyerId","AppsFlyerID","deviceId","DeviceID","appId","AppID","afInstall","getAFInstall","firebaseAppId","FirebaseAppID","firebaseAppInstanceId","FirebaseAppInstanceID","getCasinofiedCommonUserInfo","userInfo","userMode","regulationTypeID","getRegulationCode","isFTD","userData","isVIP","isVip","isPromotionPermitted","IsPromotionPermitted","RMS","userFirstName","firstName","userLastName","lastName","cid","getCasinofiedGeoInfoParams","getGeoLocationInfo","geoLocationInfo","country","getCountryIso3","timeZoneUTCOffset","getTimezoneOffset","loginIp","loginIP","ISP","isp","proxyType","stateID","stateId","stateName","getCasinofiedCommonAppContextParams","productPackageFromID","getProductPackageId","brandID","getBrandID","subBrandID","getSubBrandID","languageCode","currentLanguage","locale","getSkin","getCulture","currencyCode","currencyIso3","gaClientID","getGoogleClientID","clientThemeName","themeName","forWidgets","DeviceType","STANDARD_TOPIC_HEADER","publisher","AppIdentifiers","_componentID","_templateID","_fallbackFileName","componentId","templateId","_areEqual","val1","val2","CONTROL_CENTER_CONTAINERS_ID","CONTROL_CENTER_BI_EVENTS","MINI_OPEN","MINI_READY","MINI_CLOSE_INTERNAL","MINI_CLOSE_EXTERNAL","FULL_OPEN","FULL_READY","FULL_CLOSE_EXTERNAL","CATEGORY_MINI","CATEGORY_FULL","ExternalLinksZIndexes","PendingActionResultEnum","PendingActionTypeEnum","PendingActionReasonEnum","PendingActionIdEnum","REGISTRATION_DATA_KEY","GameModeEnum","GameStepsExecutionResultEnum","GameVendorId","GamesOpenSessionsKind","GameInfoButtonBox","TitleComponent","infoPageUrl","setInfoPageUrl","getInfoPageURL","_openGameInfo","_closeInfoMobile","intermediatePageGameInfoButton","ContainerBox","PlayButtonsBox","GameIconAndPlayButtonsComponent","_openRealGame","_openDemoGame","allowDemoButtonInIntermediatePage","gameImageInsideIntermediatePage","_renderDemoButton","IntermediatePageBox","StripeImageAndButtonsBox","GradientBox","WarningImageBox","WarningTextBox","WarningMessageBox","RealMoneyOnlyWarningComponent","onlyRealMoneyGameWarning","OpenGameIntermediatePageComponent","allowWithdrawOnlyFromReal","_renderOnlyRealMoneyWarning","showIntermediatePage","isCalledFromIntermediatePage","gameInfoComparerByTitle","game1","game2","GameInfo","_rawGameData","_aboutText","defineProperty","allowSwitchGameMode","configurable","numberOfLines","_hasCustomFilter","filterName","filtersList","findIndex","hasBonusGames","numberOfDecks","isMultiHand","hasFreeSpins","subGroupName","isEliteLounge","isChildish","hasSideBets","maxBetPerSpot","ClassicSlots","isAllowedCategory","isCardOrTableGame","isLiveCasino","gameGroup","_isAuthorized","forceDemoButton","_isMobile","isAnonymousSupported","demoSettings","demoCTAAnonymous","pc","demoCTAAuthorized","infoPageURL","siteMap","isUrlInSiteMap","debug","videoURL","gameGroupId","isVideoSlot","isScratchCards","gameCategory","companyName","vendorId","vendorName","hybrid_icon","animated_square","getAnimatedJsonUrl","_getResolvedGameImagePath","animated_round","gameChildishMode","GameChildishIconMode","getChildishIconMode","_getDefaultGameImage","hybrid_less_non_childish_icon","_shouldUseLessNonChildishIcon","hybrid_non_childish_icon","less_non_childish_icon","non_childish_icon","_getImageForChildishGame","pngImagePath","endsWith","replace","animatedImageTimings","badge","video_thumbnail","slideCover","slide_cover","slideVideo","hls_manifest","gamesSettings","gameBadgePath","minBet","maxBet","maxBetPerBrand","useSquareIcon","gameIconPlaceHolderSq","gameIconPlaceHolder","seoValue","seo","categoryName","imagePath","resolveGameImagePath","strip_mobile","strip_pc","previewDefaultImage","gamesPreviewDefaultImages","gameCategoryWithUnderScores","multiplayer","volatility","GAME_VOLATILITY","intermediatePageAuthorized","intermediatePageAnonymous","isDemoModeSupported","_showIntermediatePage","_shouldRedirectToMembership","_openMembership","closeGame","_sendOpenGameAnalytics","gameController","marketingParams","eventsTrigger","updateMarketingParams","gameRunner","openGame","gameMode","freePlayParams","skipFreePlaySuggestion","referrerId","shouldSuggestNextGame","cmsSegmentation","isCstatus","shouldShowIntermediatePage","openMembership","dl","_replaceUnderscore","words","match","arena_icon","restriction","restrictions","getGameRestriction","GAME_GROUP","isBlackJack","isRoulette","isBaccarat","isVideoPoker","externalGameCode","gameThemes","isCrashGame","computed","GamingHistoryType","GNWP_SOURCES","MediaType","MediaOrientation","MediaPointer","breakpoints","MediaQueryBuilder","_rules","_mediaType","m","w","h","o","t","precision","rules","unshift","xsMax","sMax","mMax","lMax","xlMax","mediaQueries","For","maxWidth","build","sExact","minWidth","mExact","lExact","orientation","Portrait","Landscape","maxHeight","anyHover","anyHoverNone","pointer","pointerFine","Fine","pointerCoarse","Coarse","pointerNone","None","anyPointer","anyPointerFine","anyPointerCoarse","anyPointerNone","AboutDialogAction","configReader","orbitComponentInsideSdkProvider","showAboutDialog","MenuItemActionBase","CashierUploadDocumentsAction","openUploadDocumentsFromCashier","ChatAction","appLauncher","openChat","businessCorrelationID","appSpecificParameters","openMode","ChatOpenMode","ComPointsAction","openMyAccount","MyAccountTab","ControlCenterAction","openControlCenterFull","DepositAction","openDeposit","HelpCenterAction","openContactUs","HybridInfoAction","getInfoForDisplay","hybridInfo","openMail","InactivityTimeoutSettingsAction","openInactivitySettings","InstallPwaAction","progressiveWebApp","prompt","LoyaltyIndicatorAction","MyClubAction","PushNotificationsPermissionsRequestAction","promptPushNotificationPermissionRequest","ReverseWithdrawalAction","openOldCashier","SignUpAction","TestRegulationSpecificAction","TimeSpentReminderAction","deeplink","ControlCenterDeeplink","TouchIdAction","specificDialogs","showModifyBiometricDialog","TransactionHistoryAction","openTransactionHistory","_config","closeSecondWebView","drawer","right","closeDrawer","getMenuItemConfig","linkId","MenuItemConfigReaderBase","menuItemConfig","Error","menuItemsOverrides","_getMenuItemsConfigOverrides","menuItemConfigOverride","Proxy","prop","categoryAndLabel","_getAnalyticsCategoryAndLabel","overridePropValue","MenuItemDefaultConfigReader","MenuItemRendererBase","menuItemActionFactory","_lastRenderOptions","menuItemAction","getMenuItemAction","_createReactElement","_shouldDisplay","menuItemIconSource","menuItemIcon","menuItemIconAltText","AnimatedIconBaseService","resourceName","animation","onContextLost","CONTEXT_LOST","reason","pixiAppCreateOptions","resourcesUrls","canvasCss","pixiAppDisposer","_spineAnimations","_loaderResources","disposeActions","_signalAborted","_status","Idle","initPromise","Loading","Running","Disposed","_disposeInternal","disposeAction","resource","autoUpdate","_initialize","Aborted","createPixiApp","app","disposePixiApp","PixiSpine","canvas","loadResources","Failed","resources","getOwnPropertyNames","styleKey","resUrl","Spine","stage","addChild","renderDisposer","view","appendChild","LocalStorageKeys","StandardThemeCustomizer","homepage","headerArenasStyleIsSmallTiles","CypressToastClassNames","ToastClassNames","toastClassNames","addToastClassName","ToastCloseReason","TOOLTIP_TARGET_FREE_PLAY_INDICATOR","TOOLTIP_TARGET_GIFT_MINI_ORBIT_INDICATOR","TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON","TOOLTIP_TARGET_BOTTOM_NAV_BAR_INDICATOR","Asset","_relativePath","_brandsOverrides","_locationInfo","locationInfo","skinFullName","configurationPath","serverPath","ByThemeRegistry","_default","_registry","getRegistryItem","forClient","override","ThemeName","negateNextRule","rule","formatRule","EMBEDDED_HYBRID","MINI_ORBIT","flexRowContainerMixin","flexAlignItemsMixin","flexCenterAlignItemsMixin","flexAdaptiveSizeItem","FlexFixedSizeItemBox","FlexGrowItemBox","FlexShrinkItemBox","FlexContainerBox","direction","grayColors","black","gray013","gray023","gray033","gray043","gray053","gray063","gray073","gray083","gray093","gray103","gray113","gray123","gray133","gray143","gray153","gray163","gray173","gray183","gray193","gray203","gray213","gray223","gray233","gray243","gray253","white","transparent","HeaderArenasStyle","boxName","themeBoxes","boxes","forwardedRef","ComponentDefinition","StyledByTheme","defaultComponent","Casino888","ClientThemeName","Casino888Cip","Casino888Cis","Casino777","Harrahs","Wsop","WsopCip","SI","SICis","MrGreen","MrGreenCis","MrGreenCip","Assets","fallbackCMSComponent","default_cgp_shell_css","defaultFooter_html","harrahsFooter_html","wsopFooter_html","fonts","_888_Black_eot","_888_Black_otf","_888_Black_svg","_888_Black_ttf","_888_Black_woff","_888_Black_woff2","_888_Bold_eot","_888_Bold_otf","_888_Bold_svg","_888_Bold_ttf","_888_Bold_woff","_888_DemiBold_eot","_888_DemiBold_otf","_888_DemiBold_svg","_888_DemiBold_ttf","_888_DemiBold_woff","_888_DemiBold_woff2","_888_Light_eot","_888_Light_otf","_888_Light_svg","_888_Light_ttf","_888_Light_woff","_888_Light_woff2","_888_Medium_eot","_888_Medium_otf","_888_Medium_svg","_888_Medium_ttf","_888_Medium_woff","_888_Medium_woff2","_888_Regular_eot","_888_Regular_otf","_888_Regular_svg","_888_Regular_ttf","_888_Regular_woff","_888_Regular_woff2","_888_SemiCondensedBold_eot","_888_SemiCondensedBold_otf","_888_SemiCondensedBold_svg","_888_SemiCondensedBold_ttf","_888_SemiCondensedBold_woff","_888_SemiCondensedBold_woff2","_888_SemiCondensedDemiBold_eot","_888_SemiCondensedDemiBold_otf","_888_SemiCondensedDemiBold_svg","_888_SemiCondensedDemiBold_ttf","_888_SemiCondensedDemiBold_woff","_888_SemiCondensedDemiBold_woff2","_888_Thin_eot","_888_Thin_otf","_888_Thin_svg","_888_Thin_ttf","_888_Thin_woff","_888_Thin_woff2","_888_Ultra_eot","_888_Ultra_otf","_888_Ultra_svg","_888_Ultra_ttf","_888_Ultra_woff","_888_Ultra_woff2","Bello_Script_eot","Bello_Script_svg","Bello_Script_ttf","Bello_Script_woff","Bello_Script_woff2","digital_7_mono_ttf","Futura_PT_Bold_eot","Futura_PT_Bold_otf","Futura_PT_Bold_svg","Futura_PT_Bold_ttf","Futura_PT_Bold_woff","Futura_PT_Bold_woff2","Futura_PT_Book_eot","Futura_PT_Book_otf","Futura_PT_Book_svg","Futura_PT_Book_ttf","Futura_PT_Book_woff","Futura_PT_Book_woff2","Futura_PT_Demi_eot","Futura_PT_Demi_otf","Futura_PT_Demi_svg","Futura_PT_Demi_ttf","Futura_PT_Demi_woff","Futura_PT_Demi_woff2","Futura_PT_Heavy_eot","Futura_PT_Heavy_otf","Futura_PT_Heavy_svg","Futura_PT_Heavy_ttf","Futura_PT_Heavy_woff","Futura_PT_Heavy_woff2","Futura_PT_Medium_eot","Futura_PT_Medium_otf","Futura_PT_Medium_svg","Futura_PT_Medium_ttf","Futura_PT_Medium_woff","Futura_PT_Medium_woff2","Industry_Black_eot","Industry_Black_ttf","Industry_Black_woff","Industry_BlackItalic_eot","Industry_BlackItalic_ttf","Industry_BlackItalic_woff","Industry_Bold_eot","Industry_Bold_ttf","Industry_Bold_woff","Industry_BoldItalic_eot","Industry_BoldItalic_ttf","Industry_BoldItalic_woff","Industry_Book_eot","Industry_Book_ttf","Industry_Book_woff","Industry_BookItalic_eot","Industry_BookItalic_ttf","Industry_BookItalic_woff","Industry_Demi_eot","Industry_Demi_ttf","Industry_Demi_woff","Industry_DemiItalic_eot","Industry_DemiItalic_ttf","Industry_DemiItalic_woff","Industry_Light_eot","Industry_Light_ttf","Industry_Light_woff","Industry_LightItalic_eot","Industry_LightItalic_ttf","Industry_LightItalic_woff","Industry_Medium_eot","Industry_Medium_ttf","Industry_Medium_woff","Industry_MediumItalic_eot","Industry_MediumItalic_ttf","Industry_MediumItalic_woff","Lobster_Regular_eot","Lobster_Regular_otf","Lobster_Regular_svg","Lobster_Regular_ttf","Lobster_Regular_woff","Lobster_Regular_woff2","Montserrat_VariableFont_ttf","oleo_script_reg_ext_woff2","oleo_script_reg_eot","oleo_script_reg_svg","oleo_script_reg_ttf","oleo_script_reg_woff","oleo_script_reg_woff2","OleoScript_Bold_ttf","Poppins_Regular_ttf","Poppins_SemiBold_ttf","RobotoCondensed_Bold_ttf","SolanoGothicMVB_Bd_ttf","TradeGothicLTStd_Bd2_otf","game_icon_placeholder_png","about","eng_about_json","preview_default_images","default_game_strip_card_and_table_mobile_png","default_game_strip_card_and_table_png","default_game_strip_live_mobile_png","default_game_strip_live_png","default_game_strip_slots_mobile_png","default_game_strip_slots_png","_3px_tile_png","_777logo_png","_777logo_svg","_888casinologo_dark_png","_888casinologo_mobile_svg","_888casinologo_pc_svg","_888casinologo_png","arena_shaddow_png","blackSquare_png","brilliant_png","broken_link_icon_png","casino_live_logo_mobile_png","casino_live_logo_png","check_png","checkbox_checked_png","checkbox_empty_png","close_modal_dialog_hover_png","close_modal_dialog_png","deposit_header_icon_svg","div_lang_png","empty_image_sq_gif","empty_image_gif","exclusives_list_icon_png","full_screen_off_png","full_screen_on_png","game_default_background_png","germany_panic_icon_png","harrahslogo_svg","hccasinologo_png","hccasinologo_svg","history_bg_title_png","home_content_banner_png","home_page_top_banner_png","horizontal_line_glow_mobile_png","horizontal_line_glow_png","idle_recomm_toaster_bg_png","info_img_png","infoBTN_png","ios_share_svg","jackpot_widget_title_crown_png","jackpots_bg_png","lamp_png","lang_reg_icon_png","lang_selected_icon_png","letter_design_png","letter_info_png","letter_play_png","live_arena_banner_png","live_chat_png","live_content_banner_png","live_tables_top_border_png","mrgreenlogo_png","mrgreenlogo_svg","notification_off_png","only_real_money_game_warning_png","party_jackpot_logo_png","pay_icon_png","placeholder_game_icon_sq_png","placeholder_game_icon_png","right_arrow_png","selected_filter_sign_svg","shaddow_bg_png","si_logo_mobile_png","si_logo_mobile_svg","si_logo_pc_png","si_logo_pc_svg","si_island_resort_png","si_island_resort_svg","si_sports_book_png","side_menu_header_decoration_png","splash_page_logo_0_0_png","splash_page_logo_0_111_png","splash_page_logo_1_53_png","splash_page_logo_31_46_png","splash_page_logo_58_82_png","splash_page_logo_68_98_png","splash_page_logo_69_100_png","splash_page_logo_70_102_png","splash_page_logo_71_104_png","splash_page_logo_72_105_png","splash_page_logo_73_107_png","splash_page_logo_75_113_png","splash_page_logo_76_119_png","splash_page_logo_79_125_png","splash_page_logo_8_78_png","splash_page_logo_81_129_png","splash_page_logo_84_137_png","splash_page_logo_87_141_png","splash_page_logo_88_144_png","splash_page_logo_91_151_png","splash_page_logo_92_152_png","splash_page_logo_93_154_png","splash_page_logo_cip8_0_0_png","splash_page_logo_cip8_1_53_png","splash_page_logo_cip8_31_46_png","splash_page_logo_cip8_58_82_png","splash_page_logo_cip8_71_104_png","splash_page_logo_cip8_73_107_png","splash_page_logo_cip8_75_113_png","splash_page_logo_cip8_76_119_png","splash_page_logo_cip8_79_125_png","splash_page_logo_cip8_8_78_png","splash_page_logo_cip8_81_129_png","splash_page_logo_cip8_84_137_png","splash_page_logo_cip8_87_142_png","splash_page_logo_cip8_88_145_png","splash_page_logo_cip8_png","splash_page_logo_cis_0_0_png","splash_page_logo_cis_1_53_png","splash_page_logo_cis_31_46_png","splash_page_logo_cis_58_82_png","splash_page_logo_cis_71_104_png","splash_page_logo_cis_73_107_png","splash_page_logo_cis_75_113_png","splash_page_logo_cis_76_119_png","splash_page_logo_cis_79_125_png","splash_page_logo_cis_8_78_png","splash_page_logo_cis_81_129_png","splash_page_logo_cis_84_137_png","splash_page_logo_cis_87_142_png","splash_page_logo_cis_88_145_png","splash_page_logo_cis_91_151_png","splash_page_logo_cis_png","SpriteSheetPC1920_png","swiper_layout_bottom_shaddow_png","texture_png","top_banner_placeholder_gif","user_menu_box_icon_png","user_png","vertical_line_glow_png","wsoplogo_svg","www_splash_page_logo_1_111_png","animated_banners","blackjack_arena_banner_mobile_lottie","blackjack_arena_banner_pc_lottie","casinogames_arena_banner_mobile_lottie","casinogames_arena_banner_pc_lottie","exclusive_arena_banner_mobile_lottie","exclusive_arena_banner_pc_lottie","jackpot_arena_banner_mobile_lottie","jackpot_arena_banner_pc_lottie","livecasino_arena_banner_mobile_lottie","livecasino_arena_banner_pc_lottie","newgames_arena_banner_mobile_lottie","newgames_arena_banner_pc_lottie","roulette_arena_banner_mobile_lottie","roulette_arena_banner_pc_lottie","scratchcards_arena_banner_mobile_lottie","scratchcards_arena_banner_pc_lottie","slots_arena_banner_mobile_lottie","slots_arena_banner_pc_lottie","videopoker_arena_banner_mobile_lottie","videopoker_arena_banner_pc_lottie","animated_icons_poc","millionaire_genie_megaways","genie_megaways_v1_atlas","genie_megaways_v1_json","genie_megaways_v1_png","genie_megaways_v2_atlas","genie_megaways_v2_json","genie_megaways_v2_png","genie_megaways_v3_atlas","genie_megaways_v3_json","genie_megaways_v3_png","genie_megaways_v4_atlas","genie_megaways_v4_json","genie_megaways_v4_png","arena_link_to_offer","Close_BTN_green_svg","Gift_BTN_green_svg","CasinoGames","online_blackjack_png","online_casino_games_png","online_jackpot_png","online_roulette_png","online_slots_png","HomePage","_888exclusive_arena_info_png","_888exclusive_arena_png","_888exclusive_header_arena_icon_png","blackjack_arena_info_png","blackjack_arena_png","blackjack_header_arena_icon_png","cards_arena_info_png","cards_arena_png","casino_games_arena_png","casino_games_header_arena_icon_png","casinogames_header_arena_icon_png","daily_jackpots_arena_icon_png","daily_jackpots_header_arena_icon_png","default_arena_png","default_header_arena_icon_png","exclusive_header_arena_icon_png","game_show_header_arena_icon_png","InstantWin_game_info_png","jackpots_header_arena_icon_png","live_arena_elite_lounge_png","live_arena_png","live_casino_header_arena_icon_png","live_game_shows_arena_png","livecasino_header_arena_icon_png","livegameshows_header_arena_icon_png","new_games_arena_info_png","new_games_arena_png","newgames_header_arena_icon_png","progressive_slots_arena_icon_png","progressive_slots_arena_info_png","progressive_slots_header_arena_icon_png","promotions_header_arena_icon_png","roulette_arena_info_png","roulette_arena_png","roulette_header_arena_icon_png","scrach_cards_header_arena_icon_png","scratch_cards_arena_icon_png","scratch_cards_arena_info_png","scratch_cards_arena_png","scratchcards_header_arena_icon_png","si_exclusive_arena_png","slots_arena_info_png","slots_header_arena_icon_png","slots_jackpots_arena_png","video_poker_arena_info_png","video_poker_arena_png","video_poker_header_arena_icon_png","videopoker_header_arena_icon_png","visual_sport_arena_info_png","LiveArenas","default_live_arena_png","live_arena_baccarat_png","live_arena_bj_png","live_arena_dream_catcher_png","live_arena_poker_png","live_arena_roulette_png","avatars","diamond_vip","my_account_diamond_vip_png","post_login_diamond_vip_avatar_hover_png","post_login_diamond_vip_avatar_hover_svg","post_login_diamond_vip_avatar_pressed_png","post_login_diamond_vip_avatar_pressed_svg","post_login_diamond_vip_avatar_regular_png","post_login_diamond_vip_avatar_regular_svg","post_login_diamond_vip_avatar_selected_pressed_png","pre_login_diamond_vip_avatar_hover_png","pre_login_diamond_vip_avatar_hover_svg","pre_login_diamond_vip_avatar_pressed_png","pre_login_diamond_vip_avatar_pressed_svg","pre_login_diamond_vip_avatar_regular_png","pre_login_diamond_vip_avatar_regular_svg","gold_vip","my_account_gold_vip_png","post_login_gold_vip_avatar_hover_png","post_login_gold_vip_avatar_hover_svg","post_login_gold_vip_avatar_pressed_png","post_login_gold_vip_avatar_pressed_svg","post_login_gold_vip_avatar_regular_png","post_login_gold_vip_avatar_regular_svg","post_login_gold_vip_avatar_selected_pressed_png","pre_login_gold_vip_avatar_hover_png","pre_login_gold_vip_avatar_hover_svg","pre_login_gold_vip_avatar_pressed_png","pre_login_gold_vip_avatar_pressed_svg","pre_login_gold_vip_avatar_regular_png","pre_login_gold_vip_avatar_regular_svg","platinum_vip","my_account_vip_platinum_png","post_login_vip_platinum_avatar_hover_png","post_login_vip_platinum_avatar_hover_svg","post_login_vip_platinum_avatar_pressed_png","post_login_vip_platinum_avatar_pressed_svg","post_login_vip_platinum_avatar_regular_png","post_login_vip_platinum_avatar_regular_svg","post_login_vip_platinum_avatar_selected_pressed_png","pre_login_vip_platinum_avatar_hover_png","pre_login_vip_platinum_avatar_hover_svg","pre_login_vip_platinum_avatar_pressed_png","pre_login_vip_platinum_avatar_pressed_svg","pre_login_vip_platinum_avatar_regular_png","pre_login_vip_platinum_avatar_regular_svg","reg","post_login_hover_png","post_login_hover_svg","post_login_pressed_png","post_login_pressed_svg","post_login_reg_png","post_login_reg_svg","pre_login_hover_png","pre_login_hover_svg","pre_login_pressed_png","pre_login_pressed_svg","pre_login_reg_png","pre_login_reg_svg","reg_vip","My_account_VIP_REG_icon_png","my_account_vip_reg_png","post_login_reg_vip_avatar_hover_png","post_login_reg_vip_avatar_hover_svg","post_login_reg_vip_avatar_icon_selected_pressed_png","post_login_reg_vip_avatar_pressed_png","post_login_reg_vip_avatar_pressed_svg","post_login_reg_vip_avatar_regular_png","post_login_reg_vip_avatar_regular_svg","post_login_reg_vip_avatar_selected_pressed_png","pre_login_reg_vip_avatar_hover_png","pre_login_reg_vip_avatar_hover_svg","pre_login_reg_vip_avatar_icon_hover_png","pre_login_reg_vip_avatar_icon_hover_svg","pre_login_reg_vip_avatar_icon_pressed_png","pre_login_reg_vip_avatar_icon_pressed_svg","pre_login_reg_vip_avatar_icon_regular_png","pre_login_reg_vip_avatar_icon_regular_svg","pre_login_reg_vip_avatar_pressed_png","pre_login_reg_vip_avatar_pressed_svg","pre_login_reg_vip_avatar_regular_png","pre_login_reg_vip_avatar_regular_svg","badges","dropsAndWins_png","exclusive_png","hot_png","new_badge_png","vip_badge_png","_777InstantWin_arena_banner_mobile_png","_777InstantWin_arena_banner_pc_png","_777InstantWin_arena_banner_tablet_png","_888exclusive_arena_banner_mobile_png","_888exclusive_arena_banner_pc_png","_888exclusive_arena_banner_tablet_png","_888exclusive_arena_preview_image_png","all_casino_games_arena_banner_mobile_png","all_casino_games_arena_banner_pc_png","all_casino_games_arena_banner_tablet_png","blackjack_arena_banner_mobile_png","blackjack_arena_banner_pc_png","blackjack_arena_banner_tablet_png","cards_arena_banner_mobile_png","cards_arena_banner_pc_png","cards_arena_banner_tablet_png","casino_games_arena_banner_mobile_png","casino_games_arena_banner_pc_png","casino_games_arena_banner_tablet_png","evo_lobby_banner_mobile_png","evo_lobby_banner_pc_png","evo_lobby_banner_tablet_png","exclusive_arena_banner_mobile_png","exclusive_arena_banner_pc_png","exclusive_arena_banner_tablet_png","InstantWin_arena_banner_mobile_png","InstantWin_arena_banner_pc_png","InstantWin_arena_banner_tablet_png","jackpot_arena_banner_mobile_png","jackpot_arena_banner_pc_png","jackpot_arena_banner_tablet_png","live_arena_banner_mobile_png","live_arena_banner_pc_png","live_arena_banner_tablet_png","live_casino_arena_banner_mobile_png","live_casino_arena_banner_pc_png","new_evo_lobby_banner_mobile_png","new_evo_lobby_banner_pc_png","new_evo_lobby_banner_tablet_png","new_games_arena_banner_mobile_png","new_games_arena_banner_pc_png","new_games_arena_banner_tablet_png","progressive_slots_arena_banner_mobile_png","progressive_slots_arena_banner_pc_png","progressive_slots_arena_banner_tablet_png","promotions_arena_banner_mobile_png","promotions_arena_banner_pc_png","roulette_arena_banner_mobile_png","roulette_arena_banner_pc_png","roulette_arena_banner_tablet_png","scrach_card_arena_banner_mobile_png","scrach_card_arena_banner_pc_png","scratch_card_arena_banner_mobile_png","scratch_card_arena_banner_pc_png","scratch_card_arena_banner_tablet_png","si_exclusive_arena_banner_mobile_png","si_exclusive_arena_banner_pc_png","si_exclusive_arena_banner_tablet_png","slots_arena_banner_mobile_png","slots_arena_banner_pc_png","slots_arena_banner_tablet_png","video_poker_arena_banner_mobile_png","video_poker_arena_banner_pc_png","video_poker_arena_banner_tablet_png","virtual_sports_arena_banner_mobile_png","virtual_sports_arena_banner_pc_png","virtual_sports_arena_banner_tablet_png","browser_icons","chrome_icon_PNG","microsoft_edge_png","mozilla_firefox_png","burnout","burnout_animation_last_frame_png","burnout_animation_atlas","burnout_animation_json","burnout_animation_png","daily_deal","daily_deal_chest_glow_png","daily_deal_chest_halo_png","daily_deal_chest_text_strip_svg","daily_deal_chest_png","freeToPlay_atlas","freeToPlay_json","freeToPlay_png","free_play","fp_left_arrow_png","fp_right_arrow_png","fp_step_msg_bg_png","fp_vouchers_bg_png","freeplay_bg_type_fp_png","freeplay_bg_type_fs_png","freeplay_bg_type_jfp_png","freeplay_bg_type_jfs_png","freeplay_type_fp_png","freeplay_type_fs_png","freeplay_type_jfp_png","freeplay_type_jfs_png","game_frame","demo_left_corner_png","demo_right_corner_png","freeplay_indicator_selected_png","freeplay_indicator_png","freeplay_left_corner_png","freeplay_right_corner_png","real_left_corner_png","real_right_corner_png","regulation_strip_clock_png","games_icons_background","BGcardandtable_png","BGGameBlack_png","BGGameBlackSquare_png","BGicon_png","BGredTiger_png","history","history_calendar_png","history_details_left_corner_png","jackpot_widget","crown_png","age_of_gods","background_png","logo_png","daily","high_noon","hourly_captain8","background_landscape_png","info_dialog","mobile_landscape_png","mobile_png","pc_png","jackpot_king","live_party","in_game_widget_background_png","millionaire_genie","party","toaster_icon_png","winning_png","titan","twilight","vegas_millions","live_arena","active_indicator_bg_png","dealer_icon_png","seat_icon_dark_png","seat_icon_png","live_arena_widget","capsule_end_png","capsule_mid_png","capsule_start_png","separator_png","logos","vip_diamond_logo_mobile_png","vip_diamond_logo_mobile_svg","vip_diamond_logo_pc_dark_png","vip_diamond_logo_pc_png","vip_diamond_logo_pc_svg","vip_diamond_logo_png","vip_diamond_logo_svg","vip_gold_logo_mobile_png","vip_gold_logo_mobile_svg","vip_gold_logo_pc_dark_png","vip_gold_logo_pc_png","vip_gold_logo_pc_svg","vip_gold_logo_png","vip_gold_logo_svg","vip_platinum_logo_mobile_png","vip_platinum_logo_mobile_svg","vip_platinum_logo_pc_dark_png","vip_platinum_logo_pc_png","vip_platinum_logo_pc_svg","vip_platinum_logo_png","vip_platinum_logo_svg","vip_regular_logo_mobile_png","vip_regular_logo_mobile_svg","vip_regular_logo_pc_dark_png","vip_regular_logo_pc_png","vip_regular_logo_pc_svg","vip_regular_logo_png","vip_regular_logo_svg","mini_orbit","cip","exclusives_list_icon_cip_png","x_close_png","arenas_header_buttons","casino_games_icon_png","jackpots_icon_png","live_icon_png","my_casino_icon_png","new_games_icon_png","progressive_slots_icon_png","selected_png","slots_icon_png","unselected_png","video_poker_icon_png","header_icons","gift_png","moreMenu_png","search_png","gift_svg","cis","onboarding","onboarding_logo_closing_png","onboarding_logo_png","regulation_specific","_18plus_wide_png","responsible_gaming_svg","safe_to_play_png","self_exclusion_png","self_test_png","safe_to_play_icon_svg","sweeden","sw_resp_game_limit_symbol_png","sw_resp_game_limit_png","sw_resp_game_panic_symbol_png","sw_resp_game_panic_png","sw_resp_game_self_test_symbol_png","sw_resp_game_self_test_png","us","nj_rg_icon_svg","nj_us_flag_svg","responsible_gambling","age_18plus_capsule_svg","age_18plus_flat_svg","age_18plus_round_svg","age_21plus_flat_svg","age_21plus_round_svg","begambleaeare_logo_png","gamecare_logo_png","safeZoneIcon_svg","sdk_icons","_18_plus_png","_21_plus_png","Close_hover_png","Close_png","fprightarrow_png","fpvoucherback_png","fpVoucherBG_png","fpvoucherfreeplay_png","fpvoucherfreespin_png","fpvoucherinfoclose_png","fpvoucherinfoopen_png","fpvoucherjackpotfreeplay_png","fpvoucherjackpotfreespin_png","freeplayVoucherBG_png","freeSpinsVoucherBG_png","full_screen_png","game_frame_freeplay_mode_left_png","game_frame_freeplay_mode_right_png","game_frame_practicel_mode_left_png","game_frame_practicel_mode_right_png","game_frame_real_mode_left_png","game_frame_real_mode_right_png","game_frame_bg_fp_left_png","game_frame_bg_fp_right_png","game_frame_fp_indicator_png","general_notification_png","hat_png","icons_down_arrow_png","jackpotplayFreePlayVoucherBG_png","jackpotplayFreeSpinVoucherBG_png","jackpotplayVoucherBG_png","leftarrow_png","password_png","post_login_mobile_svg","rightarrow_png","toaster_information_message_png","touchFinger_png","username_png","store","store_button_android_eng_png","store_button_android_fin_png","store_button_android_fre_png","store_button_android_ger_png","store_button_android_nor_png","store_button_android_por_png","store_button_android_rus_png","store_button_android_spa_png","store_button_android_swe_png","store_button_ios_eng_svg","store_button_ios_fin_svg","store_button_ios_fre_svg","store_button_ios_ger_svg","store_button_ios_nor_svg","store_button_ios_por_svg","store_button_ios_rus_svg","store_button_ios_spa_svg","store_button_ios_swe_svg","wheel_of_fortune","colors_svg","shell_svg","lottie_json","explore_swipe_gesture_lottie","geo_location_checking_json","geo_location_ok_json","loading_bar_json","save_game_bookmark_lottie","titan_jackpot_json","videos","harmonium_mp4","MobileMenuIcon","fillRule","clipRule","AddIcon","points","BackIcon","ForwardIcon","transform","ControlCenterIcon","HelpIcon","TextTag","TwoCharsIcon","trim","substr","textAnchor","EarthGlobeIcon","TopGamesIcon","backdropOpacity","fillOpacity","strokeMiterlimit","strokeLinejoin","clipPath","RouletteIcon","strokeLinecap","BlackjackIcon","EliteLoungeIcon","PokerIcon","BaccaratIcon","GameShowsIcon","NewGamesIcon","LinkToOfferIcon","LinkToOfferCloseIcon","SourceOfFundsIcon","ArrowsUpDownIcon","MegaphoneIcon","ChipIcon","SettingsIcon","MuteIcon","x2","y2","x1","y1","UnmuteIcon","ViewersIcon","cx","cy","BrokenLinkIcon","TimeReminderIcon","TripleEightExclusiveIcon","PaymentsRedirectIcon","opacity","LeftArrowIcon","RightArrowIcon","pinAnimation","PinGroup","MaskPinPath","CirclesGroup","smallCircleAnimation","SmallCirclePath","LocationIcon","mask","BlogIcon","HomeIcon","PromotionsIcon","SlotsIcon","JackpotsIcon","LiveCasinoIcon","CasinoGamesIcon","VipIcon","TripleEightCasinoIcon","GettingStartedIcon","BankingIcon","LiveChatIcon","DownloadAppIcon","Club888Icon","PokerCircleIcon","SportCircleIcon","VideoPokerIcon","DepositIcon","FreePlayIcon","NotificationIcon","HelpCenterIcon","WarningSignIcon","USAMapIcon","ScratchCardsIcon","MobileMenuNoSearchIcon","SpeedGamesIcon","FilterIcon","TempAccountPopupIcon","MobileAppsIcon","AppHeaderSportIcon","AppHeaderPokerIcon","AppHeaderLogo888Icon","SelfExclusionRegulationIcon","rx","SelfExclusionRegulationSymbolIcon","GamingLimitRegulationIcon","GamingLimitRegulationSymbolIcon","SelfTestRegulationIcon","gradientUnits","stopColor","offset","SelfTestRegulationSymbolIcon","MinimumGamblingAgeRegulationIcon","PanicButtonRegulationIcon","HistoryIcon","TransactionHistoryIcon","SecurityIcon","CompPointsIcon","TimerIcon","BiometricLoginIcon","AboutIcon","GamingHistoryIcon","UploadDocumentsIcon","TippingHistoryIcon","ReverseWithdrawalIcon","OpenExternalIcon","WalletIcon","RegisterUserIcon","SaveGameIcon","shouldFill","maskUnits","PokerChipIcon","SportFootballIcon","RedRecordCircleIcon","LeaveIcon","SoundOnIcon","filterUnits","in","stdDeviation","in2","operator","mode","SoundOffIcon","RetryArrowIcon","ExploreFilledIcon","k2","k3","mobileAppsIcon","mobileMenuNoSearchIcon","mobileMenuIcon","controlCenterIcon","appHeaderPokerIcon","appHeaderSportIcon","appHeaderCasinoIcon","AppHeaderCasinoIcon","appHeaderLogo888Icon","helpIcon","twoCharsIcon","earthGlobeIcon","topGamesIcon","rouletteIcon","blackjackIcon","eliteLoungeIcon","pokerIcon","baccaratIcon","gameShowsIcon","newGamesIcon","linkToOfferIcon","linkToOfferCloseIcon","sourceOfFundsIcon","arrowsUpDownIcon","megaphoneIcon","chipIcon","muteIcon","redRecordCircle","unmuteIcon","viewersIcon","brokenLinkIcon","timeSpentReminderClockIcon","tripleEightExclusiveIcon","paymentsRedirectIcon","leftArrowIcon","locationIcon","sideMenuHome","sideMenuBlog","sideMenuPromotions","sideMenuSlots","sideMenuJackpots","sideMenuLiveCasino","sideMenuVip","sideMenuNewGames","SideMenuNewGamesIcon","sideMenuCasinoGames","sideMenuExclusive888","sideMenuScratchCards","sideMenuBlackjack","SideMenuBlackjackIcon","sideMenuRoulette","SideMenuRouletteIcon","sideMenuGettingStarted","sideMenuBanking","sideMenuLiveChat","sideMenuDownloadApp","sideMenuClub888","sideMenuPokerCircle","sideMenuSportCircle","sideMenuVideoPoker","sideMenuDeposit","sideMenuPokerChip","sideMenuSportFootball","notificationIcon","freeplayIcon","helpCenterIcon","usaMapIcon","speedGames","filterIcon","tempAccountPopupIcon","minimumGamblingAgeRegulationIcon","historyIcon","openBetsIcon","transactionHistoryIcon","securityIcon","compPointsIcon","timerIcon","biometricLoginIcon","aboutIcon","gamingHistoryIcon","uploadDocumentsIcon","tippingHistoryIcon","reverseWithdrawalIcon","openExternal","wallet","registerUser","saveGameIcon","leaveIcon","soundOnIcon","soundOffIcon","retryArrowIcon","exploreFilledIcon","base01","base01Contrast","base01Dark","base01Light","base02","base02Contrast","base02Dark","base02Light","base03","base03Contrast","base03Dark","base03Light","base04","base04Contrast","base04Dark","base04Light","base05","base05Contrast","base05Dark","base05Light","gold","yellow","warmWhite","c","test","FEATURE_GAME_RECOMMENDATIONS","FEATURE_ROUTE_OVERWRITE","FEATURE_DEPOSIT_WIDGET","FEATURE_CASHOUT_WIDGET","FEATURE_TRANSACTION_HISTORY_WIDGET","FEATURE_NAME_CONTROL_CENTER_TOGGLE","FEATURE_NAME_LIST_ON_TOP","FEATURE_NAME_SEARCH_GAME_SUGGESTED_BY_AI","FEATURE_NAME_PLAYERS_LIKE_YOU_GAMES_LIST_TYPE_ID","FEATURE_NAME_VIDEO_LIVE_STREAM","FEATURE_NAME_STATIC_VIDEO_LIST","FEATURE_NAME_AI_SORT_GAME_LIST","FEATURE_NAME_MOBILE_HEADER_SEARCH_BUTTON","FEATURE_NAME_ONBOARDING_TOUR","FEATURE_NAME_REGISTRATION_WIDGET","FEATURE_NAME_WEBAPP_BOTTOM_NAVIGATION","FEATURE_NAME_IN_GAME_NAV_BAR","FEATURE_NAME_VIDEO_SLIDES","LIST_TYPE_ID","casinoClient","partyJackpotToaster","omg","myAccount","uploadDocuments","registration","pendingPlay","pendingAction","geoLocationRetry","geoLocation","rich","about_popup","uk_acocunt_miration","depositButton","withdrawButton","uploadDocumentsButton","transactionHistoryButton","retryButton","plusButton","urlParam","deepLink","floatingIcon","controlCenterHeaderButton","controlCenterTooltip","controlCenterUsefulLink","gamesLimitsLobbyButton","gamesLimitsGameButton","omgAction","cashierAction","registerButton","DISPLAY_MESSAGE_IDS","sofRequired","retryCloseDrawerMessage","psRedirectFocusDialog","timeSpentReminder","nightLimitWarning","nightLimitKick","lugasCooldown","lugasActiveOnAnotherOperator","lugasLogout","loginMessage","realityCheckGermany","SDNetLossAdvanceWarning","SDTimeLimitAdvanceWarning","SDNetLossLimitsReached","SDTimeLimitsReached","SDRealityCheck","SDResult","SDSetLimitPopUp","getDisplayMessageName","messageId","DISPLAY_MESSAGE_NAMES","DISRUPTIVE_WARNING_MESSAGE_NAME","DISRUPTIVE_KICKOFF_MESSAGE_NAME","LUGAS_COOLDOWN_MESSAGE_NAME","LUGAS_ACTIVE_MESSAGE_NAME","LUGAS_LOGOUT_MESSAGE_NAME","REALITY_CHECK_GERMANY_MESSAGE_NAME","LOGIN_MESSAGE","ACTION_TAKEN_NAMES","CONFIRM_ACTION","CANCEL_ACTION","PLAYER_MIGRATED_COOKIE","LOADED_WITH_MIGRATION_TOKEN_SESSION_STORAGE_KEY","MIGRATION_SOURCE_QUERY_PARAM","MIGRATION_SOURCE_QUERY_PARAM_VALUE","MIGRATION_TOKEN_QUERY_PARAM","BUSINESS_CORRELATION_ID_QUERY_PARAM","UK_SCV_PLAYER_MIGRATED_COOKIE","STATE_OF_RESIDENCE_COOKIE_KEY","TEMP_ACCOUNT_STATUS","APPROVED","DOCUMENTS_NOT_RECEIVED","PENDING_VERIFICATION","CySelector","TSR_TYPE","hexToDec","decToHex","n","clamp","rgbToHsl","g","b","cmin","cmax","delta","l","hue","saturation","abs","toFixed","lightness","hslToRgb","s","blue","gre","blu","opa","sqrt","pow","amount","hslData","rgbData","adjustColorLightness","adjustColorSaturation","adjustTransparency","opa255","timeoutRef","res","rej","onload","backgroundUrl","onerror","totalMilliseconds","overrideJson","require","ApplicationStartupConfigurationsReader","_defaultOrbitConfigurations","_window","_launcherOverridesReader","_http","_logger","_launcherOverrides","_b2cConfigurations","_skinFullName","getOverrides","_getB2CConfigurations","_getCasinoConfigurations","casinoConfigurations","skin","skinOverride","_getConfigPath","orbitServer","ExtraProperties","paths","server","orbit","admin","adminConfig","b2c","userSelectedState","useCountryAsState","mockApplicationStartupConfigs","getGlobalProperty","ALL_CONFIGS_KEY","lang","iso3","_loadOrbitConfigFile","_tryLoadOrbitLanguageOverrideFile","_applyOrbitConfigsOverrides","_applySdkConfigOverrides","configModule","languageIso3","langOverrideModule","Language","iso2","orbitLang","SDKTexts","b2cConfigs","languageIso3Override","languageIso2Override","publicationIdOverride","publicationID","publicationId","segmentsOverrides","webData","segments","_applyB2COverrides","SdkHooksProvider","isAbsolutUrl","redirect","_isMiniOrbit","MINI_CIP_BASE_ROUTE","MINI_CIS_BASE_ROUTE","basePath","Uri","URL","getBase","mapperData","usedGameTypesBySite","getHeaderRegulationDataElement","imageFilePath","casinofiedAnalytics","spinner","playerMigration","marketing","PropertiesEvaluator","_propertiesEvaluators","context","propEvaluator","propertyName","evaluate","enumerable","rootObject","propName","createPropertyEvaluator","StatementsEvaluator","_statementsEvaluators","_defaultValue","len","evaluators","evaluatedValue","_applyValueTransformation","parsePropertyValue","ObjectEvaluator","_object","_evaluatedValue","properties","obj","configEvaluator","ArrayEvaluator","_itemsEvaluators","createPropertyContext","SimpleValueEvaluator","_value","applyValueTransformation","getCurrentPropertyPath","StatementEvaluator","_statementDefinition","definition","createSegmentationRule","createLogicalOperator","condition","BaseLogicalOperator","OrLogicalOperator","AndLogicalOperator","SegmentationRule","_ruleDefinition","innerRules","createComparisonOperator","segmentValue","getSegmentValue","compare","BaseComparisonOperator","EqualOperator","value1","value2","_isBooleanAsString","NotEqualOperator","PropertyLevelContext","_originalContext","_currentPropertyName","operatorName","logicalOperatorName","ruleDefinition","statementDefinition","createStatementEvaluator","propertyPath","propertyOwner","getLauncherGames","PropertyEvaluator","_propertyName","_valueEvaluator","propertyContext","createStatementsDefinition","subLists","statementsDefinition","statements","sublist","Segment","Games","segment","_createStatementsRule","GamesIdPropertyEvaluator","_owner","_adminConfig","gamesAdminRefKey","owner","listsv2","gameTypes","launcherGames","IsFalsyOperator","GreaterThanOperator","LessThanOperator","AnyOfOperator","List_Type","ConfigurationEvaluationContext","dataProvider","_hasStatementsOrDefaultValue","_createStatementsEvaluators","statementsDefinitions","assetPath","propertyValue","gamesTags","_mergeGamesFromLauncher","existingGamesTags","SdkInitializer","_applicationConfiguration","_sdkHooksProvider","_windowService","_theme","_waitForMapperCGP","getGameTypesMappingForSdk","_waitForHeaderRegulationDataElement","headerRegulationDataElement","waitForElement","module","API","Logger","logLevel","sdkApi","sdkConfigOverrides","getSdkConfigOverrides","initialize","Country","getCountryServiceOverrides","Skin","getSkinServiceOverrides","Game","getGameServiceOverrides","Integration","getIntegrationServiceOverrides","Themes","getThemesServiceOverrides","Http2","getHttp2ServiceOverrides","JackpotToasters","getJackpotToastersServiceOverrides","OrbitComponentRender","getOrbitComponentRenderOverrides","CashierProxy","getCashierProxyOverrides","GameRunnerProxy","getGameRunnerProxyOverrides","CasinofiedAnalyticsProxy","getCasinofiedAnalyticsProxyOverrides","ExternalLinksProxy","getExternalLinksProxyOverrides","ToasterProxy","getToasterProxyOverrides","PlayerMigrationProxy","getPlayerMigrationProxyOverrides","LinksNavigationProxy","getLinksNavigationProxyOverrides","SpinnerProxy","getSpinnerServiceProxyOverrides","getOrbitRegulationProxy","getRegulationServiceProxy","_evaluateSdkConfigsInsideOrbit","toasterImage","shellTheme","generic","crown","SDK","sdkConfigsInsideOrbit","env","configEvaluationDataProvider","segmentName","fromRoot","gameDefaultIcon","backgroundDefault","gameDefaultBackground","launcherOverrides","gameTypeMapper","_gameTypeMapper","proxyLink","redirectProxy","openInNewWindowHook","isMiniCipFunc","isMiniCip","isMiniCisFunc","isMiniCis","_getHeaderRegulationDataElement","CMSSource","cmsSource","getOrbitMarketingData","getMarketingService","getMarketingData","sdkTheme","api","origin","getOrbitComponentToSdkAdapter","getCashierService","getGameRunnerService","getCasinofiedAnalyticsService","getSpinnerService","getPlayerMigrationService","externalLinksService","getExternalLinksProxyService","toasterService","getToasterProxyService","getLinksNavigationService","QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE","md5","QAEnvironmentPopUpBlockerService","password","QAEnvironmentPopUp","validationKey","_setCookie","expirationDate","setMonth","getMonth","cookies","createCookie","VideoPlayingServiceBase","_swiperHandler","_init","events","onAppPaused","_setIsAppVisible","onAppResumed","onGameOpen","preferences","sound","setIsMuted","isSupported","currentRegulationCode","disableForRegulationPreLogin","LiveVideoStream","bandwidthEstimate","_checkIfSupported","structuredLoggingService","getLogger","addCategory","addAction","info","_setIsSupported","PAUSABLE_TIMER_STATES","EMPTY","PAUSED","COUNTING","PausableTimer","callback","_timerId","_remainingTime","_startTime","_callback","_state","resume","timeElapsed","_clearTimer","VideoLiveStreamBasePlayer","playerType","videoReference","streamSource","watchTimeLimit","_services","_gameType","_videoReference","_streamSource","_playerType","_pausableTimer","_bufferingStartTime","_firstLoadTimeLogged","_isFirstTimePlay","_bufferingTimeValues","_hadPlayStarted","_isVisible","_watchTimeLimitMs","_getGACategory","liveStreamPlaying","_onWaiting","performance","_setIsLoading","_onPlaying","_logFirstLoadTimeUntilPlay","_onCanPlay","_onError","_setHasError","_log","_onAutoplayError","_setAutoplayAllowed","_onGoingOffline","_logAverageBufferingTimeOnPause","_setWatchTimeLimitReached","_logAverageBufferingTimeOnEnd","prevValue","_getBufferAverageTime","occurrence","loadTime","droppedFrames","decodedFrames","framesDropData","totalFrames","structuredLoger","addLabel","addValue","addCustomData","TICK_REPEATS_FOR_FPS_CHECK","LiveStreamNativePlayer","_tickInterval","_previousTime","_isVideoPlaybackQualityAvailable","_lastPeriodDroppedFrames","_lastPeriodDecodedFrames","_tickCount","_onTick","currentTime","_checkFPSInterval","getVideoPlaybackQuality","_setInterval","_clearInterval","videoPlaybackQuality","_checkFPS","droppedVideoFrames","totalVideoFrames","webkitDroppedFrameCount","webkitDecodedFrameCount","currentDropped","currentDecoded","_checkDroppedFPS","videoEl","canPlayResultValue","canPlayType","VideoHlsBasePlayer","_hlsInstance","_isManifestParsed","_bitrateStats","MAX_VALUE","MIN_VALUE","HLS_CONFIG","Hls","capLevelOnFPSDrop","_onHlsError","fatal","handleError","_onMediaAttached","loadSource","_onManifestParsed","_onLevelUpdated","updatedBitrate","levels","level","bitrate","_onFpsDrop","_onBandwidthEstimate","setBandwidthEstimate","stopLoad","LiveStreamHlsPlayer","startLoad","_createHlsInstance","hlsInstance","on","attachMedia","LiveStreamPlayingService","createElement","remove","dontAutoSwipe","isAndroid","TextTranslation","translationService","_parameters","TranslationService","translatedTexts","parameters","translatedPhrase","langData","_resolveBraces","str","objectKeys","objectKey","resolveConfigurationValue","CURRENCY_SYMBOLS","CAD","NOK","USD","EUR","GBP","DKK","SEK","RON","BRL","CurrencyService","withDecimal","getCurrencyIso3","AnalyticsService","omitStructuredLogger","sendToDWH","setAppID","setEventType","SAVED_GAMES_LOCAL_STORAGE_KEY","GamesService","serviceFactory","_gamesAboutTexts","_updateGamesMapPromise","_MAX_SAVED_GAMES","_DAILY_INCREMENT_SAVED_COUNTER","_INFERIOR_THRESHOLD_BASE_COUNTER","_SUPERIOR_THRESHOLD_BASE_COUNTER","_START_DATE","_updateGamesMap","onRecentlyPlayedGamesUpdated","_updateRecentlyPlayedGames","_initializeSavedGames","newSavedGames","savedGameTypes","localStorageSavedGames","getJson","_setInMemorySavedGames","recentlyPlayedGames","isInitialized","getUtils","arraysAreEqual","sdkGamesInfo","_getGamesAboutTexts","aboutTexts","usedGameTypesBySiteMap","gt","sdkInfo","gameTagInfo","rawGameData","assign","gamesAboutTextConfigPath","gamesAboutTextPath","gamesAboutTextUrl","http","aboutTextsJson","statusCode","_getGamesInfoMap","_setGamesMap","getGamesInfo","_buildGamesMap","inCacheGames","getGamesInfoForHistory","getGamesInfoMap","numberOfGames","getCorrelatedGames","setJson","hash","getHash","daysSinceStart","savedGamesSwiperConfig","verticalGamesList","getAdminArenaLists","adminArenaConfigData","arenaKey","listType","adminLists","lists","currentList","Metadata","SubLists","ApiListType","ConfigurationsService","startupConfigs","startupConfiguration","_createConfigData","launcher","getTestedGames","originalConfigData","homePage","gamesLists","Swipers","swiperGamesList","allGamesGrid","Grids","injectAdminArenas","_getConfigEvaluationContextServices","_defineCustomConfigProperty","isNaN","configData","evaluator","gameTypesMap","_getUsedGamesByHomePage","_getUsedGamesByArenas","_getUsedGameTypesByNewLiveGamesArena","gamesList","gamesIds","arenaConfig","swiperConfig","gamesGridConfig","liveCasinoArenaConfig","gameTypeConfig","gameId","popularTablesConfig","popularTables","tableConfig","tableGamesIds","fullPath","objectValue","fullPathArray","fileName","imageFileName","imagesBasePath","gamesImages","path","homePageGamesLists","newGameArenaConfig","find","listConfig","isSelfUpdatedByNewest","_getCurrentArenaLists","listId","homePageHeaderArenas","headerArenasOrder","arenaHeader","homepageHeader","arenaNames","orderedArenas","getConfigs","SoundUserPreferences","isMuted","UserPreferences","UserService","_updateUserData","onOAuthStateChanged","logoutReason","_userData","setItem","statusGroupId","playerStatus","_updateSegments","IsAuthorized","IsVIP","GenderId","DaysSinceRegistration","daysSinceRegistration","RegistrationCountry","registrationCountry","activeChallengeCount","userName","joinDate","lastLogin","queryParams","getParamValue","seconds","formatLastLoginFromUnixTimeStampInSeconds","lastLoginFromQueryParam","_getLastLoginFromQueryParams","lastLoginDateInTimeZone","formatLastLogin","timeSinceRegistration","Infinity","playerRMStatus","getCountryName","getAutoLoginToken","token","getPlatformToken","getFirebaseToken","openLoginForm","getAccountData","IsDocUploadRequired","logout","isInAutologin","_isInAutoLogin","waitForAutologin","_removeAutoLoginTokenFromUrl","initiator","waitForAutoLogin","openLogin","paramToBeRemoved","hasParam","MIGRATION","urlWithoutToken","removeSearchParam","autoLoginParams","runAutoLogin","userController","selfExclusionPanic","timezoneOffset","productPackage","tokenInfo","openSessionsController","getOpenSessions","openSessionsKind","openSessions","sessionDetails","sum","Credit","getInactivityTimeoutSettings","setInactivityTimeout","OAuth2","defaultAccessTokenLifeTime","SegmentationAggregatorService","_subscribeReactions","userSegments","cmsSegments","deviceSegments","mediaQueryChange","lastMediaChange","isMiniOrbit","isPWAInstallable","videoSlidesEnabled","_getExtraSegments","extraSegments","_setAllSegments","_getMediaQuerySegments","allSegments","_allSegments","segmentsLastUpdate","tempRecords","mediaQueryName","countryCode","regulationID","langCode","DeviceService","browser","feature","isProgressiveWebApp","isStandalone","_updateDeviceType","dom","subscribeTo","devicechanged","_sdkDevice","isEmbeddedHybrid","operationSystem","tool","SEO_CATEGORIES","NO_AI_GAMES_RECOMMENDATIONS","AiEngineService","_isLoadTrendingRecommendedGamesForPlayerInProgress","_onOauthChange","onGamesQuestionnaireCompleted","_updateAiRecommendedGames","_loadTrendingRecommendedGamesForPlayer","_trendingGamesRecommendations","gamesByBets","gamesByActiveUsers","tempGameTypesMap","aiRecommendedGames","trendingRecommendedGamesForPlayer","_allAiRecommendedGameTypes","_initalizeTrendingRecommendations","getAIRecommendations","filterOutRecentlyPlayedGames","aiRecommendationsData","_setAiRecommendedGames","maxGames","_setAllAiRecommendedGameTypes","_sendAIRecommendationAnalytics","analyticsObject","listIDs","insightController","getCasinoRecommendedDynamicListsForPlayer","listsIDs","allAiRecommendedGameTypes","gamesMapOverride","ignoreNumberOfGames","fixedGameTypes","aiGameTypes","originalIndexes","sort","gt1","gt2","index1","index2","getTrendingRecommendedGamesForPlayer","trendingRecommendedGames","_setTrendingRecommendedGamesForPlayer","listTypeId","trendingRecommendedGamesForPlayerByBets","trendingRecommendedGamesForPlayerByActiveUsers","gamesTypesArray","aiGamesByScore","_getGamesTypesByListTypeID","first","second","firstGamePlace","secondGamePlace","CGP_EVENTS_NAMES","SdkEvents","CGP","onEvent","eventName","SYSTEM_EVENTS","CLIENT_EVENTS","SdkEventsTrigger","Event","gametype","isReal","isGamePlayed","showNextGameSuggestion","gnwpSource","omgHook","geoParams","SdkService","_events","_updateLocalStorageAccordingToCookie","_displayHybrid","hasNavigationHistory","routeChanged","displayHybrid","isLoginFromRegistration","getRegulationDateAndTimeFormat","rawUserData","getUserData","rawAccountData","accountData","FirstName","LastName","DWHGameGroupOrientation","StatusGroupId","genderID","TimeSinceRegistration","PlayerRMStatus","sessionId","getSessionId","JoinDate","FTDSubBrand","taxId","TaxId","LastLogin","LastLoginDateInTimeZone","mobileNumber","MobileNumber","isSdkReady","getAIList","numberOfRecentlyPlayedGameToFilterOut","aiGameTypesArray","aiEngine","listTypeIds","getAINewGamesList","dateFormattedToRegulation","formatToRegulationOffset","getAbTestingData","featureName","waitForAnonymousAbTestingData","ex","getUserSegments","format$$$","shouldDefaultToLocalStorageData","getAnonymousPlayerAbTestingDataForFeature","openGameOptions","showRegister","navbar","login","getGamesThemes","getGamesVendors","getGamesCompanies","getRegulationService","isHybridEmbeddedGame","openHybridLink","autologinCookie","getCookie","setAutoLoginToken","removeCookie","getGRSEnvironments","countPlayerChallenges","menuActionExecute","startLiveTableFeeds","startEvolutionLiveFeeds","stopLiveTableFeeds","stopEvolutionLiveFeeds","getDailyDealCampaigns","getJackpotsById","getJackpotsByGameType","plainNumber","getBankroll","getProductPackage","getPlatformSystemID","getClientPlatform","getVersion","getBrandName","getMinimumAge","getSerialData","marketingData","getDefaultHybridSerial","onOrbitInitComplete","getEnvironment","pushDataToDataLayer","getSupportedStates","getWrongLocationDetectionPath","requestData","httpPost","httpGet","loadScript","getRefreshToken","OMG","GAME_FRAME","fireDepositWidgetClosed","fireFreeToPlayWidgetClosed","getToken","getDownloadAppLink","isDepositWidgetSupportedByHybrid","content","openPopUpOnSecondWebView","closePopUpOnSecondWebView","currentRegulation","getCurrentBrowserTabId","hasOpenOverlays","setOrbitActiveOverlayExists","gnwp","scriptLoader","startAutoRetryGeoProcess","tokenProperty","extractTokenProperty","updateTokenProperty","isLoginPopupEnabled","getTempAccountGnwpSource","isPlayerMessagesConnected","utc","createUserActivityDetactor","NoGamesFilterStrategy","isFilteringAvailable","filterIDS","filterId","filtersIds","GAMES_FILTERS_STORAGE_KEY","GamesFiltersStorage","_savedFilters","filterIds","FILTERS_HASH_NAME","GamesFilterService","_gamesFilterStorage","_currentFilteringStrategy","_setCurrentStrategy","getCurrentArena","isCurrentUrlHashWithFilters","getSavedFiltersForCurrentArena","currentAppliedFiltersIds","saveFiltersForCurrentArena","savedFilters","applyFilters","clearAllSavedFilters","currentArena","getGamesFilteringStrategy","startsWith","filteredGamesMap","urlHash","clearFilters","getUrlWithoutHash","isValidFilter","showFiltersEditor","getNumberOfGamesBeforeUserApply","getFiltersForGame","getFiltersDefinitions","GameBadgeDefaultBox","GameBadgeCasino777Box","GameBadgeBox","GameBadgeComponent","badgeUrl","GameImageContainerComponent","_handleImageDoneLoading","gameItemImageRef","allowTap","onOpenRealGame","isCasinoGameIcon","playRealGameButton","GameTitleDefaultBox","GameTitleCasino777Box","GameTitleCipBox","GameTitleSIBox","GameTitleMrGreenBox","light","GameTitleBox","forCip","forWsopCip","forSICis","MinMaxBetAmountDefaultBox","common","dangerLight","BasePcBox","BaseMobileBox","MinMaxBetAmountCasino777Box","MinMaxBetAmountSIBox","MinMaxBetAmountMrGreenBox","MinMaxBetAmountCisBox","MinMaxBetAmountBox","forCis","InfoPageButtonComponent","onOpenInfoPage","GameButtonsBox","PlayDemoButtonComponent","onOpenAnonymousGame","GameDetailsContainerDefaultBox","squareGameIcon","horizontalLineGlowPC","horizontalLineGlowMobile","GameDetailsContainerCasino777Box","GameDetailsContainerBox","JackpotAmountDefaultBox","JackpotAmountCasino777Box","JackpotAmountSiBox","small","JackpotAmountMrgreenBox","JackpotAmountBox","GameInfoContainerBox","AmountContainerBox","TwoRowsGameTitleContainerBox","GameDetailsContainerComponent","hasInfoPage","setHasInfoPage","titleRef","_allowHoverDetails","disableGameInfoHover","allowHoverDetails","allowDemoButtonInSingleGame","titleElement","titleHeight","offsetHeight","maxElSize","getComputedStyle","getPropertyValue","classList","add","_renderAmount","formattedMinBaxBets","formatMinMaxBet","allowMinMaxBet","_renderMinBaxBet","_hasDetails","hasDetails","hasTwoLinesTitle","HOME_PAGE","GameDefaultBox","GameCasino777Box","GameCisBox","GameBox","PlayRealButtonDefaultBox","PlayRealButtonCasino777Box","PlayRealButtonCasino888Box","rgba","PlayRealButtonBox","isSquareIcon","emptyImage","cardAndTablesSquareBackgroundImage","cardAndTablesBackgroundImage","defaultSquareBackgroundImage","getPlaceholderBackground","ORBIT_TAP","GameImageContainerDefaultBox","VIDEO_ITEM_TYPE","GameImageContainerCasino777Box","GameImageContainerBox","GameNumberBadgeDefaultBox","secondary","GameNumberBadgeMrGreenBox","GameNumberBadgeWsopBox","GameNumberBadgeBox","SingleGameRegularTemplateComponent","stateActiveTimeout","showNumberBadge","_renderGameNumberBadge","_renderPlayRealGameButton","CssClassNameBuilder","_classes","classes","SingleGameJackpotTemplateComponent","LiveGameContainerBox","SingleGameLiveTemplateComponent","VideoTileBox","boxBorderDark","VideoOverlayItemBox","capsule","VideoSoundButtonBox","VideoSoundButtonComponent","toggle","_handleClick","VideoTileOverlayComponent","_padding","videoPlaying","bottomLeftComponent","left","bottomRightComponent","_renderTopRight","_renderBottomLeft","_renderBottomRight","VideoTileOverlayBox","VideoTileStaticImageOverlayBox","VideoTileSkeletonContainerBox","SkeletonAnimatedButton","borderRadius","SkeletonAnimatedRectangle","VideoTileFooterBox","VideoTileSkeletonbox","DummyTextBox","DummyTextBoxAbsolute","DummyTextBoxRelative","SingleGameSkeletonComponent","_getPlaceholderImageUrl","templateType","JACKPOTS_ITEM","_renderJackpotGameSkeleton","LIVE_STREAMING_ITEM","STATIC_VIDEO_ITEM","_renderVideoSkeleton","_renderRegularGameSkeleton","VideoRetryScreenTileBox","VideoRetryScreenIconBox","VideoRetryScreenTitleBox","VideoRetryScreenTextBox","VideoRetryScreenComponent","_retryAndSetError","retryFn","setHasError","VideoThumbnailImageComponent","_getImageSource","videoThumbnailUrl","VideoTileBettingRangeBox","VideoTileGameTitleBox","VideoTileFooterSectionBox","VideoListJackpotValueBox","VideoListJackpotContainerBox","VideoTileFooterComponent","_tableInfo","MinBet","MaxBet","_renderMinMaxBet","_renderSecondaryText","onClickPlay","VideoTileComponent","_posterImageLoadPromise","_retryFn","onPosterImageLoaded","setPosterImageLoaded","_onPlayClickHandler","_hasError","_posterImageLoaded","_isVideoLoading","firstTimeLoadingDone","_isFirstTimeLoading","_isWatchTimeLimitReached","statusText","setIsVideoLoading","setIsWatchTimeLimitReached","_renderVideoThumbnailImage","_renderPlayerOverlay","_renderTileOverlayComponent","_renderRetryScreen","videoItemType","STATIC","_renderPlayer","_renderFooter","_renderSkeleton","_renderStaticImageOverlay","VideoItemContainerBox","stepBackStyle","SingleGameVideoTemplate","_inSwiperIntersectionObserver","_viewportIntersectionObserver","_videoContainerElement","_captureVideoContainerRef","_inSwiperIntersectionObserverCallback","setIsInCenterStage","_viewportIntersectionObserverCallback","setInViewport","_getVideoPlayingService","LIVE_STREAM","staticVideoPlaying","_inViewport","_isInCenterStage","onBringInCentralView","intersectionObserverOptions","rootMargin","_triggerOnBringInCentralView","_createViewportIntersectionObserver","intersectionTarget","_createSwiperIntersectionObserver","_destroySwiperIntersectionObserver","_destroyViewportIntersectionObserver","isLastGametype","animatedIconState","openInRealMode","listPosition","AdminListID","AIListTypeID","aiEngineName","skipIntermediatePage","openRealGame","openAnonymousGame","openInfoPage","_allowPreview","lobbyGameInfoPreview","allowGamePreview","builder","append","isInsideSwiper","toCssClass","gameCategoryClassName","_buildComponentClasses","LIVE_CASINO_ITEM","setGamePreview","clearGamePreview","SingleGameComponent","GamePlaceHolderBox","BaseGameImageBox","SingleGamePlaceholderComponent","SwiperWrapperBox","SwiperGamesListBox","SwiperBox","OrbitSwiperComponent","_swiperGameListElementRef","_swiperWrapperElementRef","viewModel","swipeLogicHandler","setElement","isVisible","renderListHeader","isTouchDevice","isTouch","renderSpecialWidgets","showGameTitleOnMultipleLines","onGameBringInCentralView","_renderOneGame","lastGameType","numSkeletons","numberOfGamesSkeletons","_renderGamesSkeletons","placeHolders","numberOfPlaceholders","_renderPlaceholders","renderListNavigation","renderListFooter","RecentlyPlayedComponent","GamesListBaseModel","_isAISorted","getAiEngine","maxGamesToShowInList","_shouldBeDisplayed","_applyGameTypesTransformations","_getGameTypes","_reduceGameTypes","_sortGameTypes","_distinctGameTypes","aiSortingOptions","_numberOfGamesToBeIgnoredInAISorting","sortingGametypesMapOverride","sortGames","Set","_forceRoundIcons","_useSquareIcons","_renderList","ListTitleIconBox","JackpotWidgetWrapperBox","RedTigerWidgetBox","RedTigerWidgetHitAreaDefaultBox","RedTigerWidgetHitAreaCasino777Box","RedTigerWidgetHitAreaBox","RedTigerWidgetFrameContainerDefaultBox","RedTigerWidgetFrameContainerBox","redTiger","redirectToWidgetActionLink","actionLink","_logMissingProps","frameBorder","scrolling","getWidgetUrl","RedTigerWidgetComponent","ListTitleTextBox","ListTitleBox","GameListTitleComponent","cssClasses","SwiperButtonsBox","SwiperButtonBox","ExploreButtonBox","brandPrimaryContrast","OrbitSwiperButtons","onSwiperButtonPrevClick","movePrevious","onSwiperButtonNextClick","moveNext","seeAllClickHandler","analyticsAction","seeAllButtonUrl","allowNext","allowPrevious","hasExploreButton","_shouldReplaceSeeAllWithExplore","_renderMoveNextAndPreviousButtons","_renderSeeAllButton","SwipeLogicHandler","_gamesListViewModel","_resizeObserver","_isRTLLanguage","_isSwiperOnTheMove","_mobileScrollingTimeout","_onMobileSwipe","_unsubscribe","_element","_setScrollWidth","scrollWidth","_currentTranslateAmount","getElementHorizontalTranslationAmount","_subscribe","resetScrollPosition","_maximumTranslationAmount","getElementWidth","_scrollWidth","_width","computeIncrement","currentTranslateAmount","increment","translateAmount","_slide","absoluteCurrentTranslationAmount","ANIMATION_FRAME_STOPS","TitanJackpotAnimationComponent","lottieRef","animationCounter","getTitanJackpotIndex","jackpotIds","handleEnterFrame","currentFrame","titanJackpot","updateJackpotHandler","getCurrentJackpotId","PlayerEvents","frame","lottieAnimation","TitanJackpotAmountBox","TitanJackpotAmountComponent","getJackpotWidgetLayout","isJackpotHandlerReady","every","jkpId","TitanJackpotWidgetComponent","SwiperListBaseModel","listConfiguration","_swipeLogicHandler","apiListType","getTranslation","_getTitleTranslationParams","shouldInjectUsernameInTitle","ignoreNumberOfGamesInAISorting","seeAllConfig","seeAll","useAISortedList","_getNumberOfGamesSkeletons","_reduceGameTypesForJackpotsItemTemplateInHomePage","forceListInLayout","redTigerWidget","forceRoundIcons","titanJackpotWidget","_renderJackpotWidget","_renderRedTigerWidget","_renderTitanJackpotWidget","_renderHeaderIconAndText","_getTitleCssClasses","_renderSwiperButtons","_seeAllUrl","titleIconClassName","_isJackpotWidgetHost","_isRedTigerJackpotWidgetHost","_renderHeaderIcon","_renderHeaderText","EXCLUSIVES_LIST_ICON","ApiListBaseModel","allowedGameGroups","RecentlyPlayedListModel","_applyGameGroupFiltering","listKey","TopPicksComponent","TopPicksListModel","AiNewGamesListComponent","NewGamesListModel","aiNewEngine","aiNewRecommendedGames","PlayersLikeYouComponent","PlayersLikeYouListModel","_computeGameTypes","abTestingFeatureDataProvider","playersLikeYouGamesListTypeId","topCount","topNumber","countryName","StaticSwiperListModel","GamesGridBatchComponent","isResolved","_intersectionObserver","_intersectionObserverCallback","_destroyIntersectionObserver","_captureThresholdElement","_createIntersectionObserver","listTitleTranslationKey","nextBatchGameTypes","propsForNextBatch","batchIndex","batchIndexOffset","currentBatchGameTypes","_renderNextBatch","_renderCurrentBatch","GamesGridBox","NoGamesFoundMessageBox","GamesGridContainerBox","CGP_GAME_OPEN","GamesGridComponent","_renderNoGames","GamesGridListModel","gridConfig","_shouldSquareIconsBeUsed","lastPlayedGame","correlatedGamesForLastPlayedRealGame","correlatedGames","BecauseYouPlayedComponent","BecauseYouPlayedPlayedListModel","listenForLastPlayedRealGame","lastPlayedGames","becauseYouPlayed","currentBecauseYouPlayedGames","gInfo","LiveStreamingListTitleBox","LiveStreamingTitleIconBox","LiveStreamSwipeLogicHandler","_touchStartX","_swipeDirection","_touchDragThreshold","_swipeTransitionCss","_handleTouchStart","changedTouches","clientX","_handleTouchEnd","_handleTransitionEnd","firstElementChild","transition","_setIsNavigationAllowed","_currentGameIndex","allowed","moveOnVideoFinished","_reportSwipeToAnalytics","prepend","lastElementChild","requestAnimationFrame","swipeToLeft","isAutoSwipe","nextGame","swipeFromGameId","swipeFromGameIndex","swipeToGameId","LiveStreamingNavigationCommonBox","VideoListNavigationPrevButtonDefaultBox","VideoListNavigationNextButtonDefaultBox","VideoCutCommonBox","VideoListLeftCutDefaultBox","VideoListRightCutDefaultBox","VideoListNavigationPrevButtonBox","VideoListNavigationNextButtonBox","VideoListLeftCutBox","VideoListRightCutBox","VideoListComponent","_onGameBringInCentralView","setCurrentGameIndex","_getLastGameType","DefaultVideoListModel","_offsetStorageKey","storedValue","baseArray","_gameTypesOffsets","_getGameTypesOffsetFromLocalStorage","newOffset","gTypes","lastGame","PrevIcon","NextIcon","dx","dy","GAME_ORIENTATION_IDS","LiveStreamingVideoListModel","_isLiveStreamDisabled","isVideoLiveStreamEnabled","isDisabledPrelogin","_cycleGamesAndIncrementOffset","hasVideoURL","tablesData","gType","openTablesIds","StaticVideoListModel","_isStaticVideoListDisabled","isStaticVideoListEnabled","setSwiperHandler","ListFactory","RECENTLY_PLAYED","TOP_PICKS","NEW_GAMES","PLAYERS_LIKE_YOU","LIVE_CASINO_VIDEO","STATIC_VIDEO","BECAUSE_YOU_PLAYED","PromotionalBannerModel","_bannerConfig","numberOfListsInCurrentArena","bannerMinHeight","_getBannerMinHeightInPixels","VideoSlidesFilterItemPreviewFooterBox","VideoSlidesFilterItemPreviewFooterTextBox","VideoSlidesFilterItemPreviewBox","VideoSlidesFilterItemPreviewPlayerBox","VideoSlidesFilterItemPreviewComponent","filtersMap","firstGameForFilter","navigateToFilter","VideoSlidesFilterListPreviewBox","VideoSlidesFilterListPreviewHeaderBox","VideoSlidesFilterListPreviewTitleBox","VideoSlidesFilterListPreviewContentBox","VideoSlidesFilterListPreviewComponent","navigateLink","filterIdList","VideoSlidesFilterPreviewModel","_videoSlidesFilterConfig","_shouldRenderVideoSlidesFilter","hasHeaderButton","SwiperExtraContentModel","videoSlidesFilterConfig","_promotionalBanner","_videoSlidesFilter","ArenaBaseModel","_postLoginListsSortOrderStorage","_swiperExtraContentHandler","_listFactory","_getPromotionalBannerConfig","_getVideoSlidesFilterConfig","_updateAIEngineSwipersSortOrder","allLists","Filters","useAdvancedFilters","_aiEngineListsSortOrder","_isUsingExternalAIForSwipersSorting","_getSwipersConfigurations","sw","_setAiEngineListsSortOrder","swipers","listsIdsToPutOnTop","_getSwiperIdToPutOnTop","reverse","listIndex","originalSwipers","scores","notForcedInLayoutSortedSwipers","forceInLayout","s1","s2","sortedSwipersConfigs","gameList","mappedGameList","_createAllLists","_sendGameListsAnalytics","_getGridsConfigurations","_appendGrids","_limitTheNumberOfSwipers","_saveSwipersPostLoginSortOrder","_sortSwipersByPostLoginOrder","_movePreferredSwiperOnTop","_sortSwipersByAI","_createSwipers","maxSwipersToShow","maxNumberOfSwipers","_renderListAndBanner","renderExtraContent","currentListPosition","saveSortOrder","sortLists","_createSwiper","_createGrid","createGrid","createSwiper","isBottomNavbarEnabled","DailyDealContainerBox","glowRotateAnimation","DailyDealChestGlowBox","dailyDeal","glow","chestScaleAnimation","DailyDealChestBox","DailyDealTextStripBox","textStrip","DailyDealChestHaloBox","halo","_onDailyDealClick","visitDailyDeal","dailyDealCampaignId","chest","DailyDealComponent","LayoutWrapperBox","HomepageHeaderArenaMenuItemDefaultBox","HomepageHeaderArenaMenuItemMrGreenBox","HomepageHeaderArenaMenuItemBox","HomepageHeaderArenaMenuItemIconDefaultBox","HomepageHeaderArenaMenuItemIconBox","HomepageHeaderArenaMenuItemNameDefaultBox","HomepageHeaderArenaMenuItemNameBox","HomepageHeaderArenaTileDefaultBox","useSmallHeaderArenas","totalItemsCount","headerArenaTileDropShadow","HomepageHeaderArenaTileSIBox","HomepageHeaderArenaTileCasino777Box","HomepageHeaderArenaTileCasino888Box","HomepageHeaderArenaTileWsopBox","HomepageHeaderArenaTileBox","HomepageHeaderArenaNameDefaultBox","HomepageHeaderArenaNameSIBox","brandSecondaryContrast","HomepageHeaderArenaNameBox","HomepageHeaderArenaBadgeDefaultBox","headerArenasStyleIsMenu","indicatorBadge","backgroundInGridLayout","HomepageHeaderArenaBadgeSIBox","HomepageHeaderArenaBadgeMrGreenBox","HomepageHeaderArenaBadgeBox","HomePageHeaderArenasContainerDefaultBox","headerArenasStyle","HomePageHeaderArenasContainerCasino888Box","HomePageHeaderArenasContainerMrGreenBox","HomePageHeaderArenasContainerCasino777Box","HomePageHeaderArenasContainerWsopBox","HomePageHeaderArenasContainerBox","HomepageHeaderArenaLinkBox","HomepageHeaderArenaSkeletonDefaultBox","tilesSize","HomepageHeaderArenaSkeletonSIBox","HomepageHeaderArenaSkeletonCasino888Box","HomepageHeaderArenaSkeletonBox","HomePageHeaderArenaRatioImageWrapperDefaultBox","HomePageHeaderArenaRatioImageWrapperCasino888Box","HomePageHeaderArenaRatioImageWrapperBox","HomePageHeaderArenaTileComponent","aspectRatioSizes","headerArenasStyleIsBigTiles","_handleDoneLoading","HomePageHeaderArenasComponent","menuButtonIconMap","Map","_handleArenaAction","jsonAction","parse","_handleArenaRedirect","link","iconKey","has","dynamic","seoConfig","categories","newGamesIndication","newAddedGames","_getButtonIcon","_handleArenaClick","homePageArenaDefaultPlaceHolder","_getSeo","headerArenas","_renderOneHeaderArena","HomepageTopBannerBackgroundBox","homepageTopBannerPlaceholder","HomepageTopBannerDividerBox","LinkToOfferBoxBase","isHybridEmbedded","hasCircle","linkToOfferIconKeyframes","LinkToOfferIconBox","shouldAnimate","LinkToOfferDialogCloseBox","_onCloseDialog","playerOfferings","hasOpenedPopup","closeCurrentPopup","setWelcomeOfferConfig","linkToOfferConfig","welcomeBonus","CloseIconComponent","isHighPriorityOffer","getMaxCGPOverlayZIndex","currentOffer","currentLinkToOffer","_onLinkToOfferClicked","shouldUseLinkToOfferAnimation","offer","analyticsCategory","onPopupClosed","showOfferPopup","LinkToOfferComponent","HomePageComponent","topBannerProps","getTopBannerProps","useAdminBanner","seoSection","linkToOffer","MOVE_TOP","_renderTopBanner","_renderHomePageArenaHeaders","_renderSeoBanner","_renderLinkToOffer","ApplyGameFilterResult","OrGameFiltersEvaluator","_evaluators","NotApplicable","applyFilter","IncludeGame","OR","AndGameFiltersEvaluator","ExcludeGame","AND","GameThemeId","FilterCategoryDefinitionBase","availableFilters","_loadAvailableFilters","appliedSubFilters","subFilters","appliedSubFilter","subFilter","sf","appliedFilters","filterEvaluators","appliedSubFiltersForCurrentFilter","_getAppliedSubFiltersForFilter","GameFilterDefinitionBase","HighVolatilityFilterDefinition","hasHighVolatility","LowVolatilityFilterDefinition","hasLowVolatility","MediumVolatilityFilterDefinition","hasMediumVolatility","VolatilityFiltersCategoryDefinition","GameFeatureFilterDefinitionBase","_shouldIncludeGame","OneToTwentyFiveFilterDefinition","TwentyFivePlusFilterDefinition","NewGameFilterDefinition","isNewGame","LowStakeFilterDefinition","hasLowStakes","HighStakeFilterDefinition","hasHighStakes","BonusGameFilterDefinition","FreeSpinsFilterDefinition","HasSideBetsFilterDefinition","IsMultiHandFilterDefinition","GameFeaturesFiltersCategoryDefinition","HasDailyJackpotFilterDefinition","hasDailyJackpot","HasTwilightJackpotFilterDefinition","hasTwilightJackpot","HasCaptain8JackpotFilterDefinition","hasCaptain8tJackpot","HasRedTigerJackpotFilterDefinition","hasRedTigerJackpot","HasJackpotFilterDefinition","HasNoJackpotFilterDefinition","HasJackpotFiltersCategoryDefinition","VendorFilterDefinition","vendors","_text","some","vendor","GameVendorFiltersCategoryDefinition","filters","advancedFilters","preferredVendorFilters","gamesVendor","getVendor","brandName","exclusiveFilterBrandName","preferredVendorsFiltersIds","getAllPreferredVendorsFilters","allPreferredVendorsFiltersMap","toDictionary","f","_getPreferredVendorFiltersForCurrentSkin","preferredVendorsIds","selectMany","otherVendorsIds","allVendorsIds","GameGroupFilterDefinitionBase","gameGroupsIdsToFilterFor","BaccaratFilterDefinition","BlackjackFilterDefinition","CrapsFilterDefinition","KenoFilterDefinition","LiveEliteLungeFilterDefinition","LiveEliteLoungeOrExclusiveFilterDefinition","isExclusiveGame","LiveGameFilterDefinitionBase","subgroupName","textToSearchInSubgroupName","LiveGameShowsFilterDefinition","PokerFilterDefinition","RouletteFilterDefinition","ScratchcardsFilterDefinition","SlotsFilterDefinition","OtherGameGroupFilterDefinition","gameTypesFilterDefinitions","categoriesInCurrentArena","LiveBaccaratFilterDefinition","LiveBlackjackFilterDefinition","LivePokerFilterDefinition","LiveRouletteFilterDefinition","GameGroupFiltersCategoryDefinition","GameThemeFilterDefinition","_gameThemeDefinition","linkedThemeIds","_themeIds","themeIds","themeId","GameThemeFiltersCategoryDefinition","preferredThemeFilters","gamesTheme","getGameThemeDefinition","Adventure","AncientCivilization","Wildlife","ClassicStyle","ClassicStyleModernized","Asian","Arabic","ComicsAndCartoons","DiamondsAndGems","Egyptian","FantasyAndFolklore","Fish","Fruit","GreekMythology","Irish","MoneyAndLeisure","MoviesAndMusic","Seasonal","SpaceAndSciFi","Crime","_getPreferredThemeFilters","themesDictionary","FilterCategoryDefinitionFactory","_allCategories","createGameFeaturesCategoryDefinition","createVendorsCategoryDefinition","createGameGroupCategoryDefinition","categoryDefinitionId","GamesFilterStrategyBase","_factory","_isInFilterAnalyticsReporting","_filtersCategories","addReaction","_filterGames","_reportApplyFiltersByDeepLink","currentFilters","_createFiltersCategories","filtersCategories","isApplied","_createEvaluator","game","filterResult","allCategories","getAllCategoryDefinitions","categoryDefinition","filterDefinition","subF","FilterCategoriesListContainerBox","FilterCategoryBox","FilterCategoryContentBox","FilterItemBox","FilterInputBox","FilterItemTitleBox","SubFiltersBox","FilterItemContainerBox","FilterCategoryItemComponent","_onFilterToggle","toggleFilter","filterCategoryId","inputType","readOnly","isChecked","gamesCount","_renderSubFilters","FilterCategoryContentComponent","visibleFilters","filterToRender","isMultiSelect","_renderFilters","FilterTitleContainerBox","FilterTitleBox","FilterPreviewBox","FilterCategoryHeaderComponent","onCategoryToggle","activeFiltersTexts","getVisibleAppliedFilters","FilterCategoryComponent","FilterCategoriesListComponent","openFilterCategory","_onCategoryToggle","openFilterCategoryState","filtersEditor","visibleCategories","AdvancedGamesFilterBox","AdvancedGamesFilterFooterBox","AdvancedGamesFilterHeaderBox","AdvancedGamesFilterButtonBox","AdvancedGamesFilterButtonSIBox","AdvancedGamesFilterButtonStyleBox","FilterByBox","FilterCategoriesListBox","AdvancedGamesFilterComponent","_onApply","back","_onCancel","closeFilters","_onClearAll","openFilters","numberOfGamesIfUserApply","numberOfSelectedFilters","getAppliedFiltersIds","cursor","AdvancedGamesFilterDrawerRenderer","isMinimized","minOverlayZIndex","supportsCloseIntent","isBlurBackground","ArenaGameFilterEditor","arenaGameFilter","categoryEditor","_subFilters","_on","_setOn","_resetOtherFiltersInTheCategory","isAdhocFilter","ArenaGameSubFilterEditor","parent","ArenaGameFiltersCategoryEditor","arenaGameFilterCategory","_filters","_getAllAppliedFilters","AdvancedFiltersAnalytics","filterEventData","actionData","_sendEvent","_getLocation","filterID","AdvancedStrategyFiltersEditor","strategy","analyticsReporter","_categories","reportOpenFilters","beginFilterAnalyticsReporting","_executeWithAnalyticsReporting","reportApplyFiltersByButton","getApplyFilterReportingParameters","reportRemoveFilter","reportCloseFilters","reportClearFilters","FiltersMobileButtonBox","FiltersMobileButtonComponent","shouldHideFiltersButtonMobile","IndicatorContainerBox","alignAppliedFiltersToCenter","AppliedFilterIndicatorBox","AppliedFiltersBox","RemoveFilterButtonBox","AppliedFilterNameBox","AppliedFilterContainerBox","AppliedFiltersIndicatorForAdvancedFilteringComponent","_onRemoveFilter","removeFilter","_getAppliedFilters","_renderOneAppliedFilter","showFiltersButton","_renderAppliedFilters","ArenaGameFiltersCategoryBase","selectedFiltersIDs","_appliedFilters","_appliedSubFilters","arenaFilter","ArenaGameFilterBase","isFilterApplied","DynamicArenaGameFilter","allArenaGamesForFiltering","f1","f2","DynamicArenaGameFiltersCategory","hasItsOwnFiltersOrder","_getAvailableFilters","_createArenaGameFilter","uniqueGameTypes","AdvancedGamesFilterStrategy","_analyticsReporter","filterCategoryDef","createCategoryDefinition","_createArenaGameFiltersCategory","appliedFiltersInCategory","allAppliedFiltersAndSubFilters","filteredGamesCount","reportApplyFiltersByDeepLink","_createFiltersEditor","gamesToShowIfUserApply","_filterGamesBeforeApplyClicked","currentArenaGames","HomePageArenaModel","postLoginListsSortOrderStorage","routeDefinition","resetNewAddedGames","gameGroupOrientation","userGameOrientation","groupId","LIVE_CASINO","listOnTop","displayPlace","videoSlideFilterConfig","videoSlidesFilter","gamesInfo","ArenaPictureBox","ArenaTitleBox","ArenaDescriptionTextBox","lobbyInfoKeyframes","LobbyGameInfoBox","ArenaInfoPreviewComponent","arenaPictureLoading","arenaInfo","previewImage","description","PcGamePreviewTitleComponent","pinCurrentGamePreview","unPinCurrentGamePreview","GameInfoPreviewComponent","enableGamePreview","disableGamePreview","enabledOnPC","currentPreviewedGame","PcGameInfoPreviewComponent","SeoBreadcrumbsContainerBox","SeoBreadCrumbsComponent","ARENA_TYPES","CasinoArenaComponent","_stickyHandler","stickyHandlerFactory","createStickyHandler","getArenaConfig","sideBarInfo","infoSideBar","infoTitle","infoText","infoImage","topImage","animatedTopImage","arenaFiltersRenderingOptions","filtersConfigurationToMap","filtersConfiguration","SUB_GAME_GROUP","FilterLinkIconBox","FilterLinkBox","FilterLinkComponent","_onFilterClick","CommonStyles","FiltersGamesListDefaultBox","FiltersGamesListBox","FilterLinkListComponent","_toggleHandler","onToggle","_renderOneFilter","FiltersGamesMobilePopupBox","FiltersMobileButtonsDefaultBox","FiltersMobileButtonsBox","FiltersGamesListMobileComponent","_closePopup","_applyFilters","checkedFiltersIds","_clearFilters","_onToggleFilter","_renderPopupButtons","SimpleStrategyFiltersEditor","_sortFilters","filtersConfigurations","filtersConfigurationMap","OtherFilterDefinition","allOthersCategories","currentArenaCategories","isGameIncludedInThisCategory","OtherFiltersCategoryDefinition","otherAvailableCategories","StaticArenaGameFilter","StaticArenaGameFiltersCategory","_createFiltersForCurrentArena","currentArenaFiltersConfigurations","FiltersGameListPcDefaultBox","FiltersGameListPcBox","FiltersGamesListPcComponent","_toggleFilter","AdhocArenaGameFilter","CompanyFilterDefinitions","_companyName","removeSpaces","AdhocArenaGamesFiltersCategory","_createDynamicFilters","appliedFilterId","dynamicFilterDefinition","_createDynamicFilterById","parts","SimpleGamesFilterStrategy","_vendorCategory","Lazy","_groupCategory","_featuresCategory","_othersCategory","_adhocCategory","applyMaxHeight","CasinoLobbyArenaModel","displayListPlace","videoSlidesFilterPreview","advancedFilterIdList","isCasinoGame","VoidArenaModel","POST_LOGIN_LISTS_ORDER_KEY","ListsSortOrderStorage","_listsSavedOrder","_createEmptyListsOrder","listsOrder","_getSavedListsOrder","arenaListsOrder","listsOrderMap","l1","l2","LiveCasinoFilterButtonLabelBox","LiveCasinoArenaNavbarButtonBox","LiveCasinoArenaNavbarButton","buttonIconMap","currentTranslationKey","_getLabelTranslationKey","onFilterClicked","NewLiveCasinoArenaComponent","_topImageRef","isNavbarVisible","liveArenaTabsConfiguration","NewLiveCasinoArenaModel","NewLiveCasinoArenaAbModel","aiSortingGamesMap","BottomNavigationBarContainerDefaultBox","shouldElevate","BottomNavigationBarContainerBox","BottomNavigationBarMenuItemsListDefaultBox","BottomNavigationBarMenuItemsListBox","getMenuItems","_renderMenuItem","BottomNavigationBarMenuItemsListComponent","BottomNavigationBarMenuItemsContainerDefaultBox","BottomNavigationBarMenuItemsContainerBox","isInVideoSlidesArena","isSpinning","BottomNavigationBarComponent","VideoSlidesArenaBox","VideoSlidesArenaHeaderBox","VideoSlidesArenaFiltersIndicatorBox","VideoSlideFilterButtonBox","videoSlidesFilterButtonOutline","VideoSlideFilterButtonIconBox","VideoSlidesHeaderFilterButtonComponent","filterButtonRef","videoSlidesFilterEditor","scrollIntoView","behavior","block","inline","renderIcon","textTranslationKey","VideoSlidesArenaFiltersIndicator","videoSlidesFilters","filterConfig","VideoSlideRegulatoryDataBox","VideoSlidesUserMenuButtonBox","VideoSlidesArenaRegulatoryDataBox","LicenseStatusBox","LicenseTextLinkBox","VideoSlidesLicensePopupContentComponent","reactElements","elArrIndex","part","replaceWithReactElement","openGamblingCommissionLink","VideoSlidesHeaderArena","_showLicenseStatusDialog","videoSlidesArenaHeaderConfiguration","videoSlidesArena","licenseStatus","renderLicenseStatus","renderHeaderWelcomeButtonsForAuthorizedUserMobile","SparkSwiperBox","SparkSwiperSlideBox","SparkSwiperSlideComponent","swiperController","slideController","touchMoveDelta","animationStarted","deltaSign","sign","computeTranslate","indexOffset","percentage","itemIndex","isActiveSlide","maxItemIndex","itemIndexOffset","onTransitionEnd","renderSlideContent","SparkSwiperComponent","swiperElementRef","touchStartY","setTouchMoveDelta","setAnimationStarted","onTransitionEndHandler","onTouchMoveHandler","deltaY","touches","clientY","passive","onTouchStart","onTouchEnd","slides","VideoSlidesOnboardingOverlayBox","SwipingUserTipBox","VideoSlidesTipTextBox","VideoSlidesOnboardingComponent","touchEndY","dismiss","onBoardingWasShown","onDismiss","swipeGesture","VideoSlidesArenaSwiperBox","VideoSlidesArenaSwiperComponent","showOnBoarding","setShowOnBoarding","VideoSlidesArena","goHome","WelcomeUserBox","WelcomeGreetingBox","WelcomeUser","IndicatorBox","IndicatorIconBox","IndicatorBadgeBox","IndicatorTextBox","IndicatorIconWrapperBox","ProfileBoxMessagesIndicator","indicatorIsActive","indicatorActive","displayLayout","numberOfMessagesIsDefinedAndGreaterThanZero","numberOfAwaitingMessages","hasAwaitingMessages","openOmgAwaitingMessages","OmgIndicator","FreePlayIndicatorComponent","openRewards","LoyaltyBar","showLoyaltyConfig","showLoyalty","noVerticalPadding","noHorizontalPadding","UserInfo","shownData","selectedUserInfo","useSpanWrapper","UserInfoLabelBox","UserMenuNameBox","UserMenuSupportIdBox","UserDetails","welcomeMessage","showUserTitle","showFirstName","showLastName","avatarUrl","_renderUserInfo","infoType","launchMyAccount","translator","userGenderTitle","genderTitle","_renderUserTitle","UsefulLinks","BonusAndCashBalanceBox","BalanceInnerBox","BalanceLabelInnerBox","BalanceValueBonusAndCashBox","BonusAndCashBalance","BalanceButtonsGroupBox","UserBalanceButtons","launchDeposit","openWithdraw","launchWithdraw","UserMenuBalanceLabelBox","BalanceValuePrimaryBox","UserBalance","userMenuItems","UserMenuItemsContainerComponent","MiniControlCenterBox","iApplication","appLoadingInProgress","cancelLoadingApp","closeControlCenterReason","controlCenterBoxClickHandler","ControlCenterCloseSource","controlCenter","loadControlCenterMini","disposeApplication","openControlCenterMini","finally","MiniControlCenterComponent","UserMenuScrollWrapperBox","ProfileMessagesBox","UserMenuFakeIOSPaddingBox","LogOutLinkBox","UserMenuLogout","doLogout","UserMenuAppVersionBox","clientVersion","UserMenuFooter","SaveGamesWidgetBox","SaveGamesWidgetGamesContainerBox","SaveGamesWidgetGamesTitleBox","SaveGamesWidgetHeaderBox","SaveGamesWidgetHeaderComponent","showAllSavedGamesDrawer","SavedGamesIcon","SaveGamesWidgetComponent","saveGamesWidget","gi","_onGameClick","UserMenuMobile","UserMenuClosePCButtonBox","UserMenuCloseIconBox","UserMenuHeaderBox","UserMenuPc","_renderUserMenuHeader","MobileMenuHeaderBox","MobileBackBox","MobileBackLabelBox","UserMenuRootBox","UserMenuWrapperDefaultBox","UserMenuWrapperBox","UserMenuHolderDefaultBox","UserMenuHolderBox","holderRef","_closeMenu","scrollTop","_renderMobileBackButton","USER_MENU_OPEN","_renderMenuContents","isRewardsInfo","UserMenu","DrawerBodyBox","DRAWER_WIDTH","DrawerContentBox","SpinnerBox","isMigrationSpinner","SpinnerBrandBox","spinnerAnimationKeyframes","SpinnerBackgroundDefaultBox","SpinnerBackgroundCasino777Box","SpinnerBackgroundCIPBox","SpinnerBackgroundCISBox","SpinnerBackgroundMrGreenBox","SpinnerBackgroundBox","DrawerSpinnerComponent","rightDrawer","renderContent","lastVisibleDrawerItemIndex","getLastVisibleDrawerItemIndex","isSpinnerVisible","currentContent","ReactDOM","getOverlayZIndex","hasBlurBackground","renderDrawer","RightDrawerComponent","VideoSlidesArenaModel","allGamesInArena","ArenasService","_arenas","_loadArenas","_createArena","arenasConfigs","arenasWithoutFilterButton","LanguageSwitcherItem","_executeOnClickJs","openSelf","_createCookie","sendFunnelParameters","appendSCutToUrl","createDomainCookie","onClickJs","Function","func","LanguageSwitcherSection","_title","_fallbackTitleKey","_items","SelectedLanguageSwitcherItem","LanguageService","_defaultLanguageData","_lastUrlWithoutTheFragmentQueriedForLanguageSwitcher","_loadLanguageData","_isLanguageSwitcherEnabled","_setLanguageSwitcher","languageSwitcher","uri","_updateLanguageSwitcher","isEmpty","getElementsByTagName","contains","textOverrides","_getDefaultTexts","_setTranslatedTexts","langSwitcherConfig","languagesSection","_extractLangSwitcherSection","languages","languageSettings","countriesSection","countries","countrySettings","_extractLanguageSwitcherFromConfig","itemsConfig","sectionConfig","fallbackTitleKey","cfg","_getLanguageSwitcherConfigForHybridEmbedded","cmsApi","getLanguageSwitcherConfiguration","langSwitcher","_getLanguageSwitcherConfigForTestEnvironments","themeCustomizer","getLanguageSwitcherConfigForTestEnvironments","StickyHandler","_onScrollSubscription","_onHeaderHeightReactionDisposer","_scrollTopMinValue","_elementRef","onWindowScroll","_setIsSticky","topElementPosition","scrollY","scroll","_isSticky","StickyHandlerFactoryService","GameRouteHandlerService","_onGameOpenSubscription","_onGameCloseSubscription","_currentUriAndGamesMapReaction","_shouldSkipNextCloseGameRedirect","_previousUri","_isOpenGameFromUrlInProgress","_subscribeToGameEvents","_subscribeToUriAndGamesMapChanges","isFirstSubscription","_isOpenGameUri","_tryOpenGameFromUrl","currentRunningGame","_onGameOpen","onGameClose","_onGameClose","eventParams","_unsubscribeFromUriAndGamesMapChanges","_getOpenGameFragment","urlToGoBack","lastAttemptToOpenGameFromUrl","currentFragment","fragmentParts","getGameInfo","_setLastAttemptToOpenGameFromUrl","_unsubscribeFromGameEvents","openGamingHistoryPage","LauncherOverridesReader","_storage","cgp_client","LAUNCHER_DATA_STORAGE_KEY","clientData","orbitSpecificOverrides","_getLauncherOverrides","_getOrbitSpecificConfigOverrides","LauncherService","launcherOverridesReader","addedGameTypesFromSdm","SpinnerService","_activeSpinner","startTime","activeSpinnerType","spinnerType","stopSpinner","performanceNow","CrossBrandsService","specificNavigationInfo","_extractSpecificNavigationFromCurrentUrl","onTokenLifetimeExpired","_onTokenLifetimeExpired","crossBrandNavigationInfo","crossBackSpecificNavigation","callbackMethod","callbackUrl","isCrossFromOtherBrand","isCIP","isCIS","specificNavigationParamValue","specificNavigationXml","_","xmlElement","textContent","MiniOrbitPageComponent","MiniOrbitHomePageComponent","MiniOrbitArenaHostComponent","GamingHistoryComponent","GamesOpenSessionsPageComponent","RichPageComponent","MINI_ORBIT_ROUTING_DEFINITION","exact","cssSelectors","SLOTS_PAGE","NEW_GAMES_PAGE","VIDEO_POKER_PAGE","PROGRESSIVE_VIDEO_SLOTS_PAGE","CASINO_GAMES_PAGE","JACKPOTS_PAGE","historyType","redirectHomeIfUnauthorized","showMoreDetails","CHALLENGE_PAGE","ArenaHostComponent","CmsPageComponent","GamingHistoryPageComponent","TippingHistoryPageComponent","RoutingConfigurationService","fallbackRoute","routes","ROULETTE_PAGE","VIRTUAL_SPORTS_PAGE","BLACKJACK_PAGE","INSTANT_WIN_GAMES_PAGE","showMoreDetailsLink","preventNotifications","SCRATCH_CARDS_PAGE","EXCLUSIVE_888_GAMES_PAGE","standalone","OrbitRoute","RouteBase","RoutingService","_currentPathName","_updateCurrentRoute","featureData","abChangeRoute","routeChangeData","Properties","routeschange","_doRedirect","equals","routingConfiguration","getRoutingConfiguration","tryMatchPath","_removeCurrentRouteCssSelectors","_overrideArenaType","routeParams","_addCurrentRouteCssSelectors","FallbackRoute","fallbackRouteRender","routesToArenaTypesMapping","arenasRoutingOverride","_getCurrentRouteCssSelectors","selector","_cleanUpOldAbTestData","currentPathName","OverlayService","disableScrolling","enableScrolling","consumer","_overlayConsumers","unsubscribe","zIndexes","needsOverlay","predicate","count","onOverlayClicked","TimeService","_formatToRegulationOffset","_lastLoginFormattedText","isUtc","DateFormatter","_getRegulationDateTimeFormat","dateAndTimeFormat","getDateTimeHistoryFormat","dateTimeHistory","callBack","AiNewGamesEngineService","_isAINewRecommendedGamesUpdateInProgress","_aiNewRecommendedGamesData","_updateAiNewRecommendedGames","getAINewRecommendations","_setAiNewRecommendedGames","_sendAINewRecommendationAnalytics","ThemeService","themeDefinition","defaultBoxes","_boxes","_setCurrentTheme","SDK_CSS_OVERRIDE","_currentThemeDefinition","popupsTheme","toastersTheme","useSquareIconsForGames","createThemeCustomizer","globalStyles","VoidCommunicationAdapter","openUrlInExternalBrowser","reject","MiniOrbitFreePlayDetails","MiniOrbitService","_communicationAdapter","_onKickUserCount","_currentMiniOrbitConfig","openFreePlays","_extractCurrentMiniOrbitConfig","splash","onSplashRemoved","onSiteLoaded","_reportAutologinResult","enableBasePathOverride","miniOrbitCommunicationAdapterFactory","createAdapter","LOGOUT_REASONS","onUserKicked","onAutologinSuccess","onAutologinFailed","currentLocationBasePath","miniOrbitConfigSection","basePaths","miniOrbitConfig","miniOrbitArenas","currentMiniOrbitConfig","arenasHeaderButtons","UriPath","openControlCenter","DialogConsumerContentBox","DialogOverlayDefaultBox","isHidden","transparentBackgroundOpacity","DialogOverlayMrGreenBox","DialogOverlayBox","MODAL_DIALOG_ANIMATION_DURATION","showDialogKeyframes","closeDialogKeyFrames","showDialogAnimation","closeDialogAnimation","applyBorders","modalDialogBorder","DialogOverlayContentBox","DialogIconWrapperBox","ModalDialogComponent","_onCloseButtonClickHandler","overlayClasses","MODAL_DIALOG","dialogOptions","forceTransparentBackground","forceCentralization","showOpenAndCloseAnimation","forceFullscreenTablet","additionalHeaderClass","headerClass","headerClasses","contentClasses","hideBorders","forceTransparentContentBackground","shouldApplyClosingAnimation","dialogHeaderComponent","hideDialogHeader","renderExtraHeaderButtons","DialogIcon","isProbablyIOSDevice","useAutoHeight","noPadding","SimpleMessageDialogBox","SimpleMessageDialogSingleLineContentBox","SimpleMessageDialogButtonsContainerBox","SimpleMessageDialogButtonBox","buttonWidthProportionOnPC","SimpleMessageButtonComponent","buttonOptions","numberOfButtons","SimpleMessageDialogIconContainerBox","SimpleMessageDialogMultiLineContentBox","SimpleMessageDialogComponent","line","_renderText","DialogService","_onDialogCloseHook","closedHandler","_setCurrentOpenModalDialogs","_currentOpenModalDialogs","gameCommunicationChannel","resumeGamePlay","_setCloseAllDialogsHook","lastTimeDeepLinkWasExecuted","closeAllDialogs","hasOpenDialogs","_disableScroll","_enableScroll","newDialogs","dialogComponent","CGP_OVERLAY_OPEN","forceZOrder","getCGPMaxOverlayZIndex","includeHidden","modalZIndex","_getNextZIndex","ModalDialogHandler","executeDialogShow","showPopupAboveSecondWebViewHybrid","gameFrameZIndex","executeAnimationCompleteAction","stopAutoplay","iconSvg","onClosedByXButton","_onCloseHook","_options","_isClosed","_applyCallbackAndCloseDialog","isClosedWithXButton","debugInfo","createAsHidden","_zIndex","onDisplay","onHide","namedSetTimeout","PWAManifestService","_orbitExtraProperties","pwaEnabled","pwaResources","_isPwaEnabled","_setManifestHrefInHead","_initIOS","manifestUrl","_addManifestIOSIconsInHead","_loadManifestJSON","manifestJson","iconInfo","_addLinkTagToHead","rel","linkDOM","sizes","head","linkTag","POKER_COMMUNCATION_OBJECT_NAME","PokerCommunicationAdapter","_pokerCommunicationObject","adapter","_pokerSupportsSoftLogin","kickUser","performUCAction","performUCActionData","actionID","ActionID","launchInfo","correlationID","SPORT_COMMUNCATION_OBJECT_NAME","SportCommunicationAdapter","_showCasinoNavbar","_sportCommunicationObject","showCasinoNavbar","openExternalLink","isThereRunningApps","sendTechnicalEvent","cleanUp","onUserKickedSuccessCallback","onUserKickedErrorCallback","MiniOrbitCommunicationAdapterFactoryService","LiveTableTabConfiguration","keyResolver","args","_memoize","ARENA_IDS","ARENA_WITHOUT_FILTER","LiveTableFeedsService","_liveTableUpdateSubscription","_isNavbarVisible","_getLiveCasinoGameRecommendationsForPlayer","memoize","getLiveCasinoGameRecommendationsForPlayer","engineType","_previousOpenTablesIds","_onLiveFeedsUpdate","_tablesData","_manipulateFeedData","_stop","updateAiRecommendedLiveGames","liveArenaConfig","headerConfig","grid","currentAppliedFilter","_getCurrentAppliedFilter","tab","_liveCasinoRecommendedGames","currentOpenTablesIds","tableData","arraysEqual","_setLiveCasinoRecommendedGames","GameTypes","Engine","_start","onLiveTableFeedsUpdate","_convertTimeToLocalTimeZone","rouletteLastNumbers","rouletteLast5NumbersConverted","_updateOpenTimeToLocal","_verifyRouletteLastNumbers","evoLiveFeedResponseTime","computeSplashTimeInSeconds","timeUTC","toLocalTime","filteredGameIds","gameID","liveGames","numberOfSortingExemptGames","_shouldSortGames","sortingOptions","maxGamesToShow","moveGamesThatOpenSoonToTheEnd","abTestingAiSortGamesLists","arenaHasAiSorting","timeToOpen","gamesID","closeGamesArr","currentGame","_isGameOpenSoon","subGameGroup","LIVE_SLOT","abTestingFeatureIsValid","featureObject","featureProperties","AbTestingFeatureDataProviderService","_playersLikeYouGamesListTypeId","_setIsVideoLiveStreamEnabled","_setIsStaticVideoListEnabled","_setMobileHeaderSearchButtonEnabled","_setIsWebappBottomNavigationAbEnabled","_setIsVideoSlidesAbEnabled","_setDataFromAnonymousAbTesting","mobileHeaderSearchBtnFeatureData","_getFeature","mobileHeaderSearchButtonEnabled","featuretoggle","widgetFeatureName","FeatureName","testGroup","GroupName","testId","TestId","isEligible","_getWidgetFeatureEnabled","_features","aiSortGamesListsFeatureData","_hasFeature","abTestingSearchGameSuggestionByAI","aitype","abTestingPlayersLikeYouGamesListTypeIdAIData","listid","abTestingListOnTopData","splidedList","abTestingControlCenterData","enablesafezone","enabledForRegulation","SafezoneLoader","safezone","isWebappBottomNavigationAbEnabled","isVideoSlidesAbEnabled","ControlCenterService","isControlCenterEnabled","WalletProxyService","subscribe","fetchAllData","plainNumberBankroll","bType","onBalanceUpdated","loginPopup","showLoginGamePopupOnAuthStateChange","bankrollType","_getData","setBankroll","NaN","UK_TSR_OPTIONS","USER_GROUP_TO_HEADER_ARENAS_MAPPING","SLOTS","JACKPOTS","EXCLUSIVE888","GAME_SHOWS","BLACKJACK","CASINO_GAMES","ROULETTE","LIVE_BLACKJACK","LIVE_ROULETTE","CASINO_SKILL","VIDEO_POKER","CASINO_SOFT","SCRATCH_CARDS","CASINO_MIXT","HomepageService","_setHeaderArenas","getHomePageHeaderArenas","group","_orderHeaderArenas","_updateNewAddedGames","_setNewAddedGames","_newAddedGames","newGamesCount","arenasNames","headerOrderedAreans","getHomePageHeaderArenasByUserOrientation","_sendUserOrientationArenasAnalytics","sendOrbitAIFeatureEvent","groupName","selfUpdatedByNewestGamesList","getSelfUpdatedByNewestGamesList","getGamesInfoArray","seenGames","_getNewAddedGamesFromLocalStorage","newGames","_resetNewAddedGames","_setNewAddedGamesFromLocalStorage","_getNewAddedGamesLocalStorageKey","topBanner","miniTopBannerComponentID","bannerAdminIDFromConfig","preferredStyle","useMiniTopBanner","topBannerConfig","getHomePageTopBannerHeight","_getMiniBannerComponentID","SessionCooldownPopupBox","SessionCooldownPopupTextBox","SessionCooldownPopupTimerBox","SessionCooldownPopupTimerRemainingBox","SessionCooldownPopupComponent","remainingTime","getRemainingTime","prependZero","padStart","COOL_DOWN_EXPIRATION_DATE_STORAGE_KEY","SessionCooldownService","_sessionCoolDownConfig","getSessionCooldownConfig","_realityCheckOpenedEventHandler","_realityCheckClosedEventHandler","_countDownTimerRef","featureEnabled","_onUserLogin","_onUserLogout","storedExpirationDate","coolDownExpirationDate","isInCoolDown","_showCoolDownDialog","onRealityCheckClosed","cooldownTime","onRealityCheckOpened","_closeCoolDownDialog","_updateRemainingTime","_preventCoolDownByPass","_startCountDownTimer","_stopCountDownTimer","getElementsByClassName","MediaQueryListener","media","onChangeConstructorParam","mediaQueryList","matchMedia","onChangeEventListener","onchange","removeListener","mQueryEventData","dataWillChange","isMatched","matches","MediaQueryService","mediaQueryListeners","mediaType","updateLastMediaChange","ToolsService","uuidv4","testedValue","strValue","charCodeAt","GAME_GROUP_COOKIE","UserGameOrientationService","_updateUserGameOrientation","userGameOrientationEnableConfig","User","enableUserGameOrientation","gameGroupCookie","_setUserOrientation","getUserGameOrientation","gameOrientation","_setGameOrientationCookie","setDate","getDate","ApiControllerBase","route","_getRoutePrefix","isUSRegulation","_buildApiRoute","BonusManagerController","_httpPost","FeatureToggleManagementController","request","GamblingSessionController","clientRequest","ABTestingController","InsightController","req","LocationController","NetPositionController","OMGController","OpenSessionsController","RestrictionRulerController","ThirdPartyFreePlayController","UserEligibilityController","GameController","HistoryController","UserController","ApiService","bonusManagerController","featureToggleManagementController","gamblingSessionController","aBTestingController","locationController","netPositionController","oMGController","restrictionRulerController","thirdPartyFreePlayController","userEligibilityController","historyController","TsrWithDropdownDefaultBox","TsrWithDropdownBox","TsrWithDropdownOptionSelectorBox","TsrWithDropdownMainTextDefaultBox","TsrWithDropdownMainTextCasino777Box","TsrWithDropdownMainTextBox","TsrWithDropdownSelectorContainerBox","ELASTIC_CATEGORY","TRACKING_UK_TSR_OPTION_NAMES","UK_TSR_RESUME_GAME_OPT","UK_TSR_CONTINUE_OPT","UK_TSR_STOP_REMINDERS_OPT","UK_TSR_REVIEW_REMINDERS_OPT","UK_TSR_HISTORY_OPT","UK_TSR_CLOSE_GAME_OPT","UK_TSR_LOGOUT_OPT","TSR_OPTIONS_BY_TYPE","TimeSpentReminderWithDropdownComponent","_businessCorrelationId","_renderLoggedInText","playingTimeWithoutUnits","playingTime","_renderSelectorContainer","_renderSelect","_executeAction","_updateSelection","timerType","tsrOption","selection","_actionAlreadyTriggered","closeCurrentGame","_sendActionDataTracking","_closeDialogBox","gameRouteHandler","redirectToHistory","_onReviewReminders","_onStopFurtherReminders","onStopReminders","_sendActionDataToElastic","messageActionTaken","actionType","CGPEventCategory","CGPEventAction","setTarget","messageDisplay","displayMessageID","displayMessageName","GeoPermissionsPopupComponent","_onOkPressed","onOkPressed","headerText1","headerText2","TsrWithBalanceBox","TimeSpentReminderWithBalanceComponent","_executeContinueButtonAction","_executeCloseGameButtonAction","_getFormattedSessionBalance","balanceAbsoluteValue","totalNetLoss","_getFormattedPlayingTime","_getSessionBalanceText","_renderWageredAmount","amountWagered","_renderSubtitle","subtitle","_renderTotalSessionBalance","isInGame","IdleRecommendationToasterBox","IdleRecommendationHeaderBox","IdleRecommendationHeaderTitleWrapperBox","IdleRecommendationGameDetailsBox","IdleRecommendationToasterBackgroundDefaultBox","idleRecommendationToasterBg","IdleRecommendationToasterBackgroundMrGreenBox","IdleRecommendationToasterBackgroundBox","StandardToastTitleBox","StandardToastMessageBox","IdleRecommendationComponent","onPlayRecommendedGameHandler","TempAccountPopupBox","TempAccountDaysLeftNumberBox","TempAccountDaysLeftTextBox","_renderDaysLeft","daysLeft","_buttonCallBack","openUploadDocumentFromMyAccount","_getButtonText","bodyText","footerText","TempAccountPopupComponent","InitBiometricFooterSectionBox","InitBiometricDialogBox","InitBiometricSectionBox","HelpOptionBox","InitBiometricDialogComponent","isHelpOptionVisible","setHelpOptionVisible","getTouchIDFeaturer","getTokenFromSrv","LoginToastBox","LoginToastResponsibleGamingLinkBox","StandardToastImageBox","LoginToastComponent","DefaultIcon","contentText","OrbitComponentToSdkAdapterService","_renderComponent","stateOfResidenceIdentifier","displayStateSelectorPopup","PRIORITY_LEVEL_ZINDEX_MAPPER","PRIORITY_LEVEL","onMessageClosed","_getTimeSpentReminderDialogOptions","businessCorrelationId","correlationId","buttonText","popupTextKey","currentRenderedComponents","_setCurrentRenderedComponents","unmount","_unmountComponent","onInitScreenShow","toastConfig","showCustomToast","onToastClosed","MessageBrokerLogger","optionalParams","MessageBrokerService","channels","MessageBroker","identity","topics","loginSuccess","publish","logoutSuccess","ActionHandlerBase","OpenBankingActionHandler","payload","openBakingSpecificParams","openAppRequest","geoInfo","appInitRequest","applicationContext","productPackageToID","ProductPackageToID","deviceInfo","messageBrokerChannels","messageBroker","sourceAppID","UploadDocumentsFromCashierActionHandler","OpenDepositActionHandler","OpenWithdrawActionHandler","OpenLinkActionHandler","openExternally","OpenChatActionHandler","openApp","OpenLinkWithFormPostActionHandler","_performFormPost","platformToken","_getSpecificActionData","formPostExtraParams","relatedAccountCid","registrationCategory","formSubmitParams","method","extraParams","_shouldOpenInSameWindow","submitForm","_getAppIdentifier","_getProductPackageId","OpenEmailActionHandler","OpenControlCenterFullActionHandler","ensureUserIsLoggedIn","OpenClientPageActionHandler","clientPageType","ClientPageType","LogoutActionHandler","OpenHelpCenterActionHandler","LoginActionHandler","RegistrationActionHandler","promoCode","wtc","TransactionHistoryActionHandler","CIPropRead","getProperty","OpenCashierActionHandler","getNumericProperty","PromCode","getStringProperty","OpenChallengesActionHandler","NavigateClientPageActionHandler","OpenMyAccountActionHandler","OpenRichActionHandler","openRichPage","campaignId","CampaignId","OpenControlCenterMiniActionHandler","OpenCasinoGameActionHandler","getGamesMapUpdatePromise","_shouldOpenGameInWebApp","unifiedDeepLink","actions","encodeURIComponent","_suggestCorrelatedGame","shouldPreventOpenGameOnMobileWeb","gamesInfoArray","suggestedGameType","suggestedAIGameTypes","randomGameIndex","gamePopup","showSuggestedGame","OpenForgotYourPasswordActionHandler","openForgotPassword","OpenCasinoFreeToPlayActionHandler","waitForEligibility","gameStage","CasinoFreeToPlayGameStage","OpenOnlineHelpActionHandler","AutologinActionHandler","authenticationServiceType","AuthenticationServiceType","registrationCompleted","securityCode","SourceProductPackage","brandId","sourceProductPackage","sourceSubBrand","additionalAction","AdditionalActionName","CasinofiedActionHandlerService","performAction","registerResolver","handle","openBanking","uploadDocumentsFromCashier","deposit","withdraw","transactionHistory","openChallenges","navigateClientPage","openLink","openEmail","openOnlineHelp","openClientPage","openHelp","openRich","openCasinoGame","openCasinoFreeToPlay","autoLogin","FloatingBubblesService","BubbleContentDecorator","bubbles","bubbleToRemoveIndex","_originalBubble","_id","SourceOfFundsBox","SourceOfFundsPopupComponent","messageRow1","messageRow2","openChatLabel","RestrictionRulerService","enableSOF","RestrictionRuler","_executeRestrictionRulerActions","getRestrictionActions","RequestedAction","restrictionRulerResponse","_showSourceOfFundsMessage","restrictionRuleActionType","notifyRestrictionActionPerformed","showMessageActions","_notifyRestrictionActionPerformed","CasinofiedAnalyticsService","onBeforeOAuthStateChanged","_sessionClosed","_sequentialNumber","_authenticationResult","focusLost","_userMinimizedClient","focusGained","_userResumedClient","unload","_userClosedClient","onLoginSessionResumed","_loginSessionResumed","setSequentialNumber","playerSessionId","openAppData","_createMessageId","_extractSequentialCorrelationID","sourceAppVersion","trigger","messageID","targetAppID","sequentialCorrelationID","_createLogger","setCorrelationId","setBusinessCorrelationID","appInitParams","openingMode","deviceTypeID","resolution","_getResolution","appInitResultReportingDetails","errorCode","errorDescription","getLaunchInfo","isOk","loadingTime","getSequentialCorrelationIdHandler","getCurrentValue","appClosedParams","appCloseReason","closeReason","extraData","totalStakes","netPosition","totalLosses","bankrollCurr","amountBankroll","devicePixelRatio","closingReasonID","actionName","actionHandlerStep","actionResult","sendLogLevelOnly","loadSubject","duration","clientStateID","clientStateName","AbTestingAiSortGamesListsService","aiSortGamesLists","isDepositSessionType","isCashoutSessionType","CASHIER_POST_ACTIONS","CashierService","eligibilityResult","abCheckActionHandlerEventData","actionHandler","eligibilityActionHandlerEventData","_getDepositWidgetEligibility","eligibility","isEligibleForDepositWidget","appName","ntsEligibilityCallback","LoginCountry","StateID","ineligibleReason","errorID","hasErrors","analyticsActionName","checkPendingActions","getAbEligibility","blockedByPendingAction","widgetConfigs","AppLauncher","apps","PendingActions","enableExplicitCheck","force","disableCashierWidgetsABTesting","AbTesting","abEligibility","testID","_evaluateNTSEligibility","ntsEligibility","_getWidgetEligibility","openDepositPendingAction","depositWidget","depositWidgetEligibility","cashoutWidget","cashoutWidgetEligibility","openTransactionHistoryPendingAction","transactionHistoryWidget","transactionHistoryWidgetEligibility","depositEligibility","_reportEligibilityEvents","openDepositWidget","_getCashOutWidgetEligibility","cashOutWidgetEligibility","PAYMENTS_CASHOUT","redirectToVerificationModuleForNonEligible","getGeneralErrorMessage","openCashoutWidget","_getTransactionHistoryWidgetEligibility","openTransactionHistoryWidget","cashOutEligibility","_openCashierExternalLink","ExternalLinkHandlerBase","openInNewTab","ExternalLinkIframeContainerBox","ExternalLinkCloseButtonWrapperBox","ExternalLinkIframeBox","ExternalLinkIframeComponent","httpVerb","performFormPostForUrl","onIframeCreated","allow","allowFullScreen","ExternalLinkIframeInModalDialogComponent","_onCloseClick","iframeClassName","ExternalLinkIframeRenderer","getMaxWidth","_customMaxWidth","getMaxHeight","_customMaxHeight","_onIframeCreated","iframeElement","iframeElementRef","iframeScrolling","iframeExtraCssClass","ExternalLinkInIframeHandlerBase","_handlePostMessage","_renderer","contentWindow","_onPostMessageReceived","_onExternalLinkClosed","externalLinkClosed","_getGnwpSource","_closeExternalLinkDialog","addSdkEventSubscription","onPostMessage","_parseMessageData","paramsOverride","_getIframeRendererParams","closeAllSecondWebViews","_getRenderer","showInModalDialog","renderAsReactElement","openDepositOptions","promCode","_getParsedData","parsedChannelData","getShallowLowercasedObject","parsedAppSpecificParamsData","MEMBERSHIP_POST_ACTIONS","RegistrationExternalLinkHandler","_shouldOpenRegistrationWidget","_openRegistrationWidget","_openRegistrationFromExternalLink","registrationWidgetConfigs","FUNNEL_REGISTRATION","isAppLauncherRegistrationEnabled","isRegistrationWidgetEnabled","isRegistrationWidgetABEnabled","openRegistrationWidget","_getGnwpUrl","_showExternalLinkDialog","gnwpRequest","enableNativeAppDownload","shouldEnforceHybridAppForMobileWeb","getRegistrationUrl","_shouldHideCloseButton","actionId","_extractActionId","_openCashier","_extractPromoCode","_openUploadDocumentsFromCashier","_openLoginForm","messageData","_onRegistrationCompleted","registrationCookiesData","_storeRegistrationCookie","_openUploadDocumentsFromMyAccount","_openBankId","_openDownloadAppPage","_redirectToURL","_openControlCenter","openBankId","Store","MY_ACCOUNT_POST_ACTIONS","MyAccountExternalLinkHandler","getMyAccountUrl","_openQuickDeposit","_extractCashierTabId","_extractGameId","originDeepLinkID","_openRichPage","_openSport","internalUrl","_extractUrl","_openInternalUrl","externalUrl","_openExternalUrl","openSport","PlatformEventTypeEnum","CashierExternalLinkHandler","inCasino","isMacOS","isSafari","_isOnHybrid","_isOnMacSafari","_openInNewTab","_isMobileOS","_redirect","getCashierUrl","OPEN_CONTROL_CENTER","_extractChannel","_extractAppSpecificParameters","OMG_POST_ACTIONS","OmgExternalLinkHandler","getOmgUrl","openedWithinGame","messages","showMeMessageData","_onShowMe","omgDisplayed","_openMyAccount","_extractMyAccountTabId","setMaxSize","updateZIndex","ForgotCredentialsExternalLinkHandlerBase","ForgotUserNameExternalLinkHandler","getForgotUserNameUrl","ForgotPasswordExternalLinkHandler","getForgotPasswordUrl","PendingLoginExternalLinkHandler","getPendingLoginUrl","runAutologin","_extractTokenAndOriginInformation","_closePendingLogin","_openUploadDocuments","originInformation","isIncreaseLimitsDisabled","MyAccountUploadDocumentsExternalLinkHandler","getUploadDocumentsUrl","_hideCloseButton","GameLimitsExternalLinkHandler","ContactUsExternalLinkHandler","getContactUsUrl","RICH_POST_ACTIONS","RichExternalLinkHandler","richPageUrl","_renderExternalLinkIframe","getRichPageUrl","marketingCampaignId","_redirectToExternalUrl","removeDailyDealIndicator","HelpExternalLinkHandler","PENDING_ACTION_POST_MESSAGE","PendingActionExternalLinkHandler","_pendingActionResult","_currentPendingAction","_executePendingActions","getPendingActions","pa1","pa2","Priority","previousPendingAction","_getUserPendingActions","_createPendingActionsRequest","pendingActions","pa","Id","_showPendingAction","pendingActionData","specificParams","ReasonId","_getPendingActionIframeRendererSpecificParams","msgData","_onPending","RegulationNavigationHookContinuationMode","DepositPendingActionExternalLinkHandler","packageId","eventTypeId","OpenApp","playModeId","getPendingAppUrl","pendingActionTargetProductPackageId","EventTypeId","eventTypeName","EventTypeName","TransactionHistoryPendingActionExternalLinkHandler","RealGamePlayPendingActionExternalLinkHandler","getPendingPlayUrl","Play","ExternalLinksHandlersFactory","HeaderWelcomeButtonsAnalyticsSender","enforceHybridAppModal","HeaderLoginButtonComponent","isCisOrCip","showRegisterButton","HeaderRegisterButtonComponent","AboutBox","AboutInfoSectionBox","AboutFooterSectionBox","AboutComponent","_handleHelpTextClick","openHelpCenter","_renderHelpText","sectionTitleKey","valueClass","openSessionBalance","openSessionsBalance","_renderAboutInfoSection","fiscalCode","LastLoginLabelBox","LastLoginValueBox","LastLoginComponent","LiveCasinoGridItemBetIntervalBox","LiveCasinoGridItemBetIntervalMinWrapperBox","LiveCasinoMinMaxBet","isHideMaxBet","renderMinBet","RegulationComponentsCommon","_getAboutDialogProps","RegulationMenuItemFactoryBase","DialogResult","RegulationNavigationHookBase","continuationMode","Continue","LegacyRegulationWrapper","legacyRegulation","regulationType","REGULATION_NAMES","getRealityCheckIntervalExpectedByTheGame","getAgeResponsibleGamingLabel","updateRealityCheckInterval","nightLimitExpirationDate","showNightLimitMessage","postLoginActionsArePassed","gameIconAnimationsAllowed","lastLoginUnixTimeStampInSeconds","GermanyRegulationComponents","GermanyRealityCheckDialogBox","GermanyRealityCheckDialogHeaderBox","GermanyRealityCheckDialogFooterBox","GermanyRealityCheckDialogFieldLabelBox","GermanyRealityCheckDialogFieldValueBox","GermanyRealityCheckDialogButtonsBox","isGameRunning","sendMessageActionTaken","onCloseGame","onContinue","renderContinueButton","sessionTime","sessionTimer","currentSessionTimer","formatSessionTime","GermanyRealityCheckDialogComponent","GermanyRegulation","showConfirmLugasCoolingOffLogout","onAccept","onReject","shouldShowRealityCheckMessage","getRealityCheckData","TotalNetLoss","realityCheckOpen","realityCheckClosed","MichiganRegistrationExternalLinkHandler","MichiganExternalLinksHandlersFactory","SessionTimerLabelBox","SessionTimerValueBox","SessionTimerBox","SessionTimerComponent","setSessionTimer","LastLoginAndSessionTimerBox","LastLoginContainerBox","LastLoginAndSessionTimerComponent","LastLoginSessionTimerSwitcherComponent","renderSessionTimer","setRenderSessionTimer","timerId","switchToSessionTimerInterval","showLastLoginForever","MichiganRegulationComponents","specificProps","MichiganSportSideMenuItemComponent","MichiganSportSideMenuItemRenderer","MichiganMenuItemFactory","MichiganRegulation","OntarioRegulationComponents","OntarioRegistrationExternalLinkHandler","OntarioMyAccountUploadDocumentsExternalLinkHandler","OntarioExternalLinksHandlersFactory","OntarioRegulation","NetherlandsRegistrationExternalLinkHandler","NetherlandsMyAccountUploadDocumentsExternalLinkHandler","NetherlandsRealGamePlayPendingActionExternalLinkHandler","NetherlandsExternalLinksHandlersFactory","NetherlandsRegulationComponents","NetherlandsRegulation","NewJerseyRegistrationExternalLinkHandler","NewJerseyExternalLinksHandlersFactory","USSafeToPlayButtonBox","USSafeToPlayContainerBox","USSafeToPlayLabelBox","USSafeToPlayComponent","USResponsibleGamingButtonsBox","USResponsibleGamingBox","responsibleGamblingIcon","USResponsibleGamingComponent","USResponsibleGamingButtonsComponent","usFlag","NewJerseyRegulationComponents","NewJerseyRegulation","Intl","DateTimeFormat","timeZone","year","day","hour","minute","hour12","UkRegistrationExternalLinkHandler","UkExternalLinksHandlersFactory","UKRegulationComponents","isLiveSlot","getIsLiveSlotGroup","UkRegulation","ItalyMyAccountUploadDocumentsExternalLinkHandler","ItalyExternalLinksHandlersFactory","ItalyRegulationComponents","ItalyTestMenuItemRenderer","backgroundColor","ItalyMenuItemFactory","InactivityTimeoutSettingsBox","DropDownBox","InactivityTimeoutSettingsComponent","currentSettings","possibleSessionTimeoutValues","currentSessionTimeout","getDefaultAccessTokenLifeTime","currentSelectedValue","setCurrentSelectedValue","ItalyRegulation","RomaniaMyAccountUploadDocumentsExternalLinkHandler","RomaniaExternalLinksHandlersFactory","RomaniaRegulation","PortugalRegulationComponents","getOpenSessionsRealMoneyBalance","sessionBalance","PortugalRegulation","SwedenRegulationComponents","SwedenRegulation","DenmarkMyAccountUploadDocumentsExternalLinkHandler","DenmarkExternalLinksHandlersFactory","DenmarkRegulationComponents","DenmarkRegulation","LIMIT_NAMES","SpainRegulation","showLogoutGamblingSessionSummary","Accepted","RegulationService","_createRegulation","sessionCooldownConfig","shouldShowPlayerLimitsToaster","isMobileWebApp","enforceHybridAppForMobileWeb","preventOpenGameOnMobileWeb","getErrorMessage","CGP_ERROR_CODES","logoutUser","regulationCode","REGULATION_CODE_TYPES","showRealityCheckMessage","LimitsToasterService","_limitsData","DepositLimit","PlayTimeLimit","BankrollLimit","_subscriptions","_activeLimitToasters","_toasterDisplayDurationSec","_getPlayerLimits","getPlayerLimits","limitsDataRaw","depositLimitRaw","displayableLimits","limit","limitName","DEPOSIT_LIMIT","limitPeriods","playTimeLimitRaw","PLAYTIME_LIMIT","bankrollLimitRaw","BANKROLL_LIMIT","_handleUserLogout","_showLimitsToaster","hasData","_getFormatedLimitsText","onExternalLinkClosed","onLiveGameSwitched","typeId","unit","formatedString","period","_getIntervalLabelFromType","_getFormatedTimeUnit","_getFormatedWithSeparators","_getFormatedDepositLimitForType","_getFormatedPlayTimeLimitForType","texts","depositLimit","_displayDepositLimits","playTimeLimit","_displayPlayTimeLimits","bankrollLimit","_displayBankrollLimits","PlayerBurnoutService","_burnoutMessageEventSubscription","_omgDisplayedEventSubscription","_currentRunningGameReaction","_onAuthStateChange","setRenderAnimation","_onBurnoutMessageReceivedEvent","renderAnimation","_currentlyDisplayedOmg","bringToFront","_clearCurrentDisplayOmg","checkIfOmgDisplayed","PlayerBurnout","isRealMoneyPrize","onBurnoutMessageReceived","_isRealMoneyPrize","onOmgDisplayed","_onOmgDisplayedEvent","OfferBase","offerConfig","_offerShown","sessionStorage","_getSessionStageKey","offerShown","WelcomeOffer","cStatus","wheelOfFortune","shell","rotateBackward","rotateStarting","rotateFullRotation","rotateFinish","showSpin","WheelOfFortuneComponent","enableWheelOfFortuneAnimation","WheelOfFortuneOffer","hasWheelOfFortunePromotion","LinkToOfferBannerBox","RegistrationOffer","isRegistrationOfferEnabled","PlayerOfferingsService","_allOffers","_shownOffer","_registrationPopupTimerId","_preventShowingRegistrationPopupThisDemoSession","isEnabledFromConfig","PlayerOfferings","isWheelOfFortuneEnabled","hasWheelOfFortuneConfigSection","hasRegistrationOfferConfigSection","registrationOffer","enableAnimation","_hasWheelOfFortunePromotion","userBalance","_setWOFEnableAnimation","_updateWheelOfFortuneAvailability","_resetShownFlagForAllOffers","_updateOfferToShow","welcomeOfferConfig","_welcomeOfferConfig","currentPopup","onPromotionsChanged","Cid","IsPromotionDisplayedInClient","listenForLastOpenDemoGame","_showRegistrationPopup","_initPopupTimer","shouldBeVisible","isOrbitRoute","welcomeOffer","updateConfig","offers","_getAllOffers","selectedOffer","_setCurrentLinkOffer","getEligiblePromotionCodes","promoCodes","_fetchUserHasWheelOfFortune","hasWheelOfFortune","_setHasWheelOfFortunePromotion","_renderBanner","_setCurrentPopup","lastOpenDemoGame","loadPixi","PIXI","createPixiApplication","Application","backgroundAlpha","antialias","forceCanvas","contextLostHandler","stop","_e","selfDestroyOnContextLost","FreePlayStatus","THIRD_PARTY_BONUS_TYPE","PixiAppService","_pixiAppCreatorWithWebGlManager","webGlContextManager","makeCreator","loader","MAX_ANIMATED_ICONS","GameAnimatedIconsManagerService","intersectionObserver","observedTargets","isGameOpened","animatedIconsAllowed","intersectionCallback","observedTarget","selectAndLoadAnimations","debounceTimeout","selectionRunning","selectionRunAgainNeeded","alreadyRunningAnimationCount","eligibleTargets","remainingSlots","shuffle","loadAnimatedIcon","delete","WebGLContextManagerService","_activeContexts","creatorFn","webGl2Context","getContext","webGl1Context","isContextLost","TooltipBaseService","overlay","registerConsumer","_toolTips","toolTips","showOverlay","stickOnTopTooltipModifier","phase","requiresIfExists","fn","modifiersData","popper","popperOffsets","stickToBottomTooltipModifier","beforeWrite","popperWidth","rects","popperHeight","elements","adaptive","documentElement","clientWidth","arrow","offsetTooltipModifier","flipTooltipModifier","preventOverflowTooltipModifier","TooltipBaseModel","_onDocumentClickHandler","closeOnClickOutside","tooltipContainer","closeTooltip","_domEventSubscription","_autoCloseTimeout","_popperInstance","onTooltipRendered","click","hasGlow","showCloseButton","invertCloseButtonColors","styling","elementToAttach","createPopper","modifiers","_getElementToAttach","_destroyPopperInstance","_createTooltipPopper","_clearAutoCloseTimeout","_unsubscribeFromDomEvents","_dispose","onTooltipClosed","RegularTooltipModel","tooltipsContainer","attachTo","removeTooltip","RegularTooltipsService","_setDefaultTooltipOptions","tooltipModel","HistoryPaginatorBaseModel","pageSize","_migratedHistoryPaginator","_numberOfHistoryDays","_createMigratedHistoryPaginator","numberOfDays","setNumberOfHistoryDays","_resetPaging","loadNextPage","_records","_pages","_nextPageIndex","hasMoreSelfRecords","hasMoreRecords","_isLoading","records","fromLastDays","pageNumber","nextPage","requestKey","RequestKey","minDate","MinDate","maxDate","MaxDate","serverResponse","notInLayoutGames","GameHistoryData","record","_getGameTypeFromRecord","_createNextPageRequest","_getNextPage","_getGamesInfo","newRecords","recordData","companies","getRegulatedCompany","company","_createRecordModel","_getRoundIdFromRecord","PagingData","HistoryRecordBaseModel","gameImageInHistoryPage","_isDetailHistorySupported","canPlayGame","UserGamingHistoryRecordModel","DateInTimeZone","formatHistoryRecordDateTime","_gameSessionID","_participationTicketID","sessionID","cyClass","participationID","GameId","IsSupportDetailedHistory","_isDetailHistoryAllowedOnCurrentPlatform","supportsHistoryMoreDetails","IsBigWin","FreePlayCurrentAmount","FreePlayWinningAmount","_formatValue","BetAmount","OriginalWinningsAmount","ProfitAmount","AvailableMoneyPerOffering","amounts","_isFreePlayRound","_getFreePlayAmounts","_getRealMoneyAmounts","AdditionalData","AAMSGameSessionID","AAMSParticipationTicketID","AllowedPlatformType","supportsDetailHistory","historyGameParams","gameRoundId","gameRoundDate","gameRoundDateInTimeZone","MigratedGamingHistoryRecordModel","GameName","MigratedGamingHistoryPaginatorModel","_hasMoreRecords","getMigratedHistory","_createMigratedRequest","VoidGamingHistoryPaginatorModel","UserGamingHistoryPaginatorModel","getHistory","GameTypeId","MigratedHistory","enableGamingHistoryMigration","SessionGamingHistoryRecordModel","TotalBets","TotalWins","SessionBalance","SessionEndDateTime","GameSessionId","SessionGamingHistoryPaginatorModel","getGameSessionHistory","GamingHistoryService","maxPageSize","BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY","BecauseYouPlayedService","_lastPlayedGames","_getLastPlayedGamesFromLocalStorage","lastPlayedGameByArena","_createDefaultPlayedGameByArenaObject","lastPlayedRealGame","_setLastPlayedGame","_updateCurrentBecauseYouPlayedGames","lastPlayedGameType","_createEmptyLastPlayedGamesList","filterGamesByArenaType","lastGamePlayedGameTypeForArena","lastGamePlayedForCurrentArena","_getLastPlayedGameTypeForArena","_setCurrentBecauseYouPlayedGames","VersionNumber","major","minor","revision","otherVersion","isSmallerThan","tryParse","HybridService","gameUrl","pathname","prepareGameUrl","getCompiledGameVersion","executeWaitForHybridGameStep","navigateToOnDemandStandalone","isNativeSupportSecondWebView","isOnDemandHtmlGame","isOnDemandStandalone","getOnDemandOrigin","isSchemeSupported","isLocalGameLauncherSupported","gameschcme","setGamescheme","showHybridAlert","isNyxIframeSupported","getNyxLocalHostUrl","isDeviceTouchEnable","isOpenSettingSupported","openTouchIdSettings","isDebugMode","clearToken","displayWebView","getLexisNexisSession","versionString","StaticVideoPlayer","posterImage","_dontAutoSwipe","_onEnded","getSwiperHandler","StaticVideoPlayingService","SessionStorageService","StorageServiceBase","CookiesService","setFullYear","getFullYear","toUTCString","cookie","expiration_date","RegExp","FreePlayGameModel","freePlayId","VoucherBaseModel","voucherData","_voucherData","ID","FreePlayTypeId","CompanyID","gamesDictionary","GameTypeIDList","CurrentBalance","CreationDate","ExpirationDate","isExpired","newVoucherData","OriginAmount","_formatVoucherAmount","timeToExpiration","timeToExpirationRoundedToSeconds","expiration","FreePlayVoucherModel","backgroundTypeFP","JackpotFreePlayVoucherModel","backgroundTypeJFP","FreeSpinsVoucherModel","SpinBetAmount","backgroundTypeFS","JackpotFreeSpinsVoucherModel","backgroundTypeJFS","VouchersProviderBase","Tripe8FreePlayVouchersProvider","_onFreePlayBatchAddedHandler","vouchers","existingVoucher","_findVoucher","updateVoucherData","voucherModel","_createVoucherModel","_onFreePlayBatchUpdatedHandler","_onFreePlayBatchRemovedHandler","voucherIds","onFreePlayBatchAdded","onFreePlayBatchUpdated","onFreePlayBatchRemoved","voucherId","ReasonIsNotEligible","ThirdPartyVouchersProvider","refreshVouchers","onDepositWidgetClosed","onFreeToPlayWidgetClosed","newVouchers","getAllVouchers","FreePlayBonusList","_setVouchers","voucherModels","bonusDataFromBackend","BonusStatus","_convertBackendBonusDataToClientVoucherData","clientVoucherData","CurrencyCode","FreePlayID","FreePlayTypeID","FreePlay","Voucher","_convertFreePlay","_convertVoucher","creationDate","FreeSpinsInfo","spinBetAmount","BetPerSpin","_getGamesMaxBets","GameTypesIDs","maxBets","NumberOfFreeSpinsLeft","Winnings","CurrentWinningAmount","NumberOfAwardedFreeSpins","_parseVoucherCreationDate","VoucherInfo","RemainingFreePlayAmount","AwardedFreePlayAmount","FreePlayService","_actionsToExecuteWhenFreePlayIsAvailable","_setVoucherProviders","newProviders","_vouchersProviders","vp","userActiveVouchers","allVouchers","provider","userVouchers","isValid","v1","v2","diff","userVouchersSortedByCreationDate","hasGame","RestrictionsService","FreeToPlayService","_checkEligibilityPromise","_isEnabled","_checkEligibility","_setIsPromotionEligible","shouldShowPromotion","crm","isPromotionRestricted","_isPromotionEligible","_shouldShowIcon","_isPromotionOpened","isOpened","CASINO_BONUS_GAME_WIDGET","cmsPublicationId","apiOrigin","domain","openFreeToPlayBonusGames","ScriptLoaderService","SessionTimerService","_onSessionTimerUpdate","onSessionTimerUpdate","GamblingSessionStatus","CrmService","_sdkLib","_initCrmPromise","_initService","onFirebaseGotNewToken","_connect","isAuth","_initCrm","_disconnect","CrmSdk","libUrl","executeInitCrm","_loadLib","initCrm","userToken","fbToken","onConnectedToFirebase","onDisconnectedFromFirebase","checkEligibility","_getEligibility","doNotShowPromotionReasons","PromotionRestricted","reasonIsNotEligible","LugasActiveDialogBoxLine","LugasActivePopupComponent","LoginPopupBox","LoginPopupDialogText","totalStakesText","netPositionText","getLoginPopupData","BankrollCurr","TotalStakes","NetPosition","onApprove","LoginPopupComponent","ToggleSwitchCheckboxBox","ToggleSwitchSliderBox","ToggleSwitchBox","ToggleSwitchComponent","ModifyBiometricDialogBox","ModifyBiometricSectionBox","ModifyBiometricToogleSectionBox","ModifyBiometricDialogComponent","isFeatureOn","setIsFeatureOn","_updateTouchEnable","getTokenAndCheckEnable","selectToggle","strToggle","getModel","SpecificDialogsService","analyticsOnClick","openDownloadApp","reportConfirmClicked","ret","reportClick","Rejected","confirmClicked","TotalLosses","closeModifyBimetricDialog","gamblingSession","getGamblingSessionState","gamblingSessionData","sessionStatus","_showGamblingSessionSummaryPopup","reportLogoutMessageShown","sessionTotalBets","sessionTotalWins","reportLogoutMessageActionTaken","TippingHistoryBaseModel","_setRecords","reset","loadAllRecords","TipHistory","GameTypeID","TipAmount","AvailableBalanceAfterAction","getTippingHistory","tipId","TipID","gameTypeId","imagePlaceHolderUrl","tipDate","TipDateTime","_getAmounts","TippingHistoryService","LoyaltyIndicatorModel","_loyaltyRef","LoyaltyIndicatorConstructor","LoyaltyIndication","loyaltyInitInfo","_createLoyaltyInfo","firebaseToken","FirebaseToken","CID","LanguageCode","ClientContext","BrandId","ClientPlatform","ClientVersion","ProductPackage","SubBrandId","Style","_createLoyaltyStyle","loyaltyStyleParams","BackgroundColor","ShowBoxShadow","ShowUnderline","FontSize","ArrowSize","ProgressBarHeight","ArrowColor","LOLArrowContainerRigh","LOLArrowContainerLeft","LOLContentPaddingLeft","TextColor","ProgressBarBackgroundColor","ProgressBarBorderRadius","LOLArrowTop","Terminate","LoyaltyService","_loadLoyaltyPromise","_loadLoyaltyScriptPromise","_loadLoyalty","_loadLoyaltyScript","_getFirebaseToken","fireBaseToken","Loyalty","scriptLink","StatePopupWrapperBox","StatePopupComponent","_onStateConfirmation","onStateSelect","_onStateNotInListClick","onStateNotInListClick","_getStateName","statePopup","THE_STATE","StatePopupErrorMessageBox","StatePopupSelectWrapperBox","StatePopupWithDropdownComponent","_defaultOption","currentStateID","shouldShowError","_renderOptions","defaultOption","hidden","stateOptions","sr","getUserSelectedState","isOneSiteEnabled","_renderStateSelector","CGP_STATE_POPUP_LOCAL_STORAGE_KEY","RegularStatePopupStrategy","_popupDisplayedLocalStorageKey","forceDisplay","OneSiteStatePopupStrategy","_shouldShowLoginFormSessionStorageKey","saveStateInCookie","getStateFromCookie","StateOfResidenceIdentifierService","_statePopupStrategy","_onReceivedUserStateQueryParam","urlWithoutUserState","_cookieKey","_displayLoginForm","statePopupStrategy","shouldDisplayStatePopup","StatePopup","getComponent","onStateConfirmation","onOtherStateClick","getPopupTitle","locationPopupClosed","removeStateCookie","oneSite","sourceLink","searchParams","OnboardingWelcomeStep","mainText","secondaryText","A","_quadLength","_length","_slope","_slopePerpendicular","_centerPoint","GeometryHelper","quadraticDistanceBetweenPoints","slope","slopePerpendicular","getPointInSegment","Circle","center","freeTerm","newRadius","degrees","PI","radians","normalize","resultInDegrees","atan","radiansToDegrees","O","getIntermediateCoordinate","getCenterOfDOMRect","distanceBetweenPoints","OnboardingMainMenuStep","targetElement","rectangle","_target","getCircleCircumscribedToTheRectangle","scaleWith","allMenuItems","querySelectorAll","secondMenuItem","lastMenuItem","FeatureId","OnboardingUserMenuStep","targetSelector","translateYAmount","remToPx","OnboardingTourService","_enabledAccordingToRegistrationTime","_enabledAccordingToAB","steps","authorized","_removeScrollSubscription","featuresToggleManagement","shouldShowFeature","OnboardingTour","isEnabledAccordingToAB","isEnabledAccordingToRegistrationTime","_onWindowScroll","enabledAccordingToAB","enabledAccordingToRegistrationTime","configSteps","stepIds","configStepKey","getStepInstance","onboardingTourEnabled","updateFeatureCounter","stepIndex","orbitOverlayConsumersCount","countCurrentConsumers","sdkHasOpenOverlays","areRunningApps","hasDialogs","countDialogs","NyxService","NYX","useNewIntegration","OnBoardingTooltipModel","onBoardingTooltipSContainer","_loadPersistedValuesFromLocalStorage","sessionDisplayCount","_isThereRunningApps","_isGameRunning","isOnBoardingTooltipsEnabled","isOnBoardingEnabled","areOpenDialogs","currentRoutePreventsNotifications","hasOpenToasters","isOnboardingTourOpen","_hasReachedMaximumDisplayCount","_wasDisplayedOnCurrentSession","totalDisplayCount","storageValue","_totalDisplayCountLocalStorageKey","_totalDisplayCount","_sessionDisplayCountLocalStorageKey","_sessionDisplayCount","localStorageKey","maximumDisplayCount","IconTitleTextTooltipContainerBox","IconTitleTextTooltipTextContainerDefaultBox","IconTitleTextTooltipTextContainerMrGreenBox","IconTitleTextTooltipTextContainerBox","IconTitleTextTooltipTitleDefaultBox","IconTitleTextTooltipTitleMrGreenBox","brandPrimaryDark","IconTitleTextTooltipTitleBox","IconTitleTextTooltipIconBox","SeparatorDefaultBox","Separator777Box","SeparatorMrGreenBox","SeparatorBox","IconContainerDefaultBox","IconContainerMrgreenBox","IconContainerBox","IconTitleTextTooltip","FreePlayOnBoardingTooltipModel","giftIcon","_onTooltipClicked","commonConditions","mobileElement","pcElement","IOSAddToHomeShareIconBox","MessageBodyContainerBox","MessageBodyBoldContainerBox","IosAddToHomeScreenComponent","logoIcon","appIcon","iosShareIcon","iosShare","BRAND","onClicked","IosPwaOnBoardingTooltipModel","_onToolTipClick","borderColor","_openGameCount","isDeviceEligible","_isDeviceEligible","isIphone","ControlCenterOnBoardingTooltipModel","isControlCenterOnBoardingTooltipEnabled","OnBoardingTooltips","enabledForControlCenter","VideoSlidesExplorerOnBoardingTooltipModel","scrollDetected","videoSlidesShouldBeDisaplayed","OnBoardingTooltipsService","enableOnBoardingTooltipsTimer","_migrateOldStorageKeys","visibleTooltips","tt","PlayerMigrationService","_businessCorrIdQueryParamName","_onReceivedBusinessCorrIdQueryParam","isGuid","isMigrationEnabledFromConfig","sendClientVisitAnalytics","migrationToken","hasClientBeenLoadedWithMigrationToken","isPlayerMigrated","PlayerMigration","enabledForBrand","ToastQueue","_queue","processQueue","toastId","TOAST_TYPES","StandardToastContent","onToastButtonClickedAnalytics","onToastOpenedAnalytics","ToastHandler","_displayReactionDisposer","_destroyReactions","toast","_hideReactionDisposer","displayCondition","when","_displayToast","autoClose","hideProgressBar","closeButton","onToastShown","ToasterService","_toastQueue","_pendingToasts","clearQueue","pendingToastIndex","_activeToasts","idx","partiaToastDef","_allToasts","addToQueue","FeaturesMaxDisplayCountMap","FeaturesToggleManagementService","_featuresDisplayCount","_serverCallPromise","_readFeatureToggleDataFromServer","_resetData","featureID","_getMaxDisplays","displayCount","FeatureID","setFeatureCounter","getFeaturesDataForCID","featuresData","_convertFeatureToggleManagementDataArrayToRecord","featuresToggleData","DisplayCount","LinkConfigurationParser","linkConfiguration","links","urlBuilderStrategy","_getMiniOrbitDefaultOpenMode","crossBackMode","_supportsGnwp","shouldAppendSCutToUrl","getPokerUrl","getSportUrl","getLiveChatUrl","getHelpPageUrl","crossBrands","isCrossFromPoker","isCrossFromSport","LinksNavigationService","createBlankWindow","linksNavigationHook","hookResponse","_getLinkOpenMode","blankBrowserTab","_openBlankWindow","_buildLink","linkHash","_navigateToUrl","urlBuilder","closeNyxSecondWebView","_openInNewTabForMiniOrbit","_openInNewTabForHybrid","_openInNewTabForWebApp","_redirectForMiniOrbit","_redirectForHybrid","openUrlInSecondWebView","directLink","appendUserSelectedStateToLink","_isCrossBackToPokerOrSport","_buildDirectLink","getGnwpUrl","isCrossBackToPokerOrSport","_getCrossBackMode","safeJsonParse","jsonStr","defaultWhenException","VideoTypeEnum","VideoSlidesAnalyticsEventEnum","FirebaseToasterService","_receivedToasterEvent","onToastMessageReceived","metaData","MetaDataParams","gameTypeIDRaw","GameTypeIDInt","DurationInSec","toastData","MessageID","Title","SubTitle","MobileImage","PCImage","IconImagePath","analyticsData","Type","ACKNOWLEDGE","onReceivedToaster","TitanJackpotService","forceGradual","GameThemeDefinition","_translationKey","regEx","GamesThemeService","_allThemes","TableGames","Arcade","FarmAndPets","Sports","LiveCasino","NA","ScratchCards","Mexican","Xmas","Bingo","AztecIncaMayan","WildWest","CandyAndSweets","GoldMining","VikingsAndNordicMythology","foundThemes","isMatch","gameThemeId","gameThemeDefinition","GameVendorDefinition","tags","_nameIsMatch","_anyTagIsMatch","prevResult","currentTag","GamesVendorService","_allVendors","foundVendors","gameVendorId","PlayerMessagesService","onPlayerMessagesConnected","VideoSlidesFilterModel","ForYouVideoSlidesFilter","SlideRuleBaseModel","ruleConfig","_currentIndex","currentChunkContent","slidesChunkSize","createVideoSlideRenderer","SwipeDirectionEnum","VideoSlidesAnalyticsReporter","videoType","videoSlideController","VideoStream","slideType","videoWatchTime","_roundTime","watchTime","isPlaying","currentResolution","virtualSlideIndex","realSlideIndex","realIndex","slidesCount","getItemsCount","currentFilter","LiveStream","videoDuration","videoDurationInSeconds","PlayVideoStarted","RetryPlayVideoSuccess","ResumePlayVideoSuccess","PauseVideoOnAppSleep","errorName","_reportError","PreloadVideoError","PlayVideoError","RetryPlayVideoError","ResumePlayVideoError","VideoPosterLoadError","DroppedVideoFrames","VideoWatchTimeLimitReached","swipeDirection","SlideActivated","SlideDeactivated","slideActiveTime","previousResolution","VideoResolutionChanged","bufferingTime","Buffering","PlayGame","BookGame","RemoveBookedGame","Mute","Unmute","VideoSlideBaseRenderer","_slideActivationTime","_playGame","reportPlayGame","_onBookGame","reportBookedGame","_onRemoveBookedGame","reportRemoveBookedGame","attachAnalyticsReporter","_renderVideoSlide","reportSlideActivated","reportSlideDeactivated","LiveStreamSlidePlayerContainer","VideoPlayerBox","VideoElementContainerBox","VideoPlayButtonComponent","isPaused","VideoErrorTitleBox","VideoErrorContainerBox","VideoErrorComponent","VideoWatchTimeLimitReachedBox","VideoWatchTimeLimitReachedComponent","VideoPlayerComponent","videoElementContainerRef","attach","detach","pauseTimerRef","preload","VideoSlidePlayerSkeletonAnimation","VideoSlidePlayerSkeletonBox","VideoStreamSlidePlayerComponent","showSkeleton","isPosterLoaded","videoSlideUrl","VideoSlideLayoutBox","ThinProgressBarContainerBox","ThinProgressBarBox","ThinProgressBarComponent","VideoSlideLayoutProgressIndicatorBox","VideoSlideLayoutChildrenContainerBox","VideoSlideLayoutComponent","showProgressIndicator","VideoSlideContentLayoutComponent","VideoSlideFooterLayoutBox","VideoSlideGameTitleLayoutBox","SaveGameButtonContainerBox","SaveGameButtonTitleBox","isSaved","setIsSaved","removeSavedGame","onRemoveBookedGame","saveGame","notifications","showGameSavedNotification","onBookGame","wasSaved","generateTimesSavedCounterForGame","SaveGameButtonComponent","VideoSlidesSoundIconBox","buttonLight","VideoSlidesSoundButtonComponent","VideoSlideFooterLeftContainerBox","VideoSlideFooterRightContainerBox","VideoSlideFooterLayoutComponent","onPlayGameClick","VideoSlidesStreamBettingRangeBox","VideoSlideStreamFooterBox","VideoSlidesStreamJackpotContainerBox","VideoSlidesStreamJackpotValueBox","VideoSlideStreamFooterComponent","VideoStreamSlideComponent","isBuffering","VideoStreamGameSlideRenderer","uniqueKey","VideoStreamSlideRuleModel","LiveStreamSlideStatusBadgeBox","LiveStreamSlideStatusDetailsBox","LiveStreamSlideStatusIconAnimation","LiveStreamSlideStatusIconBox","LiveStreamSlidePlayerComponent","RedRecordCircle","_renderTopLeft","LiveStreamSlideComponent","LiveStreamGameSlideRenderer","LiveStreamVideoSlideRuleModel","PromotionSlideBox","componentIndex","PromotionSlideComponent","currentComponentIndex","gridRowStart","gridRowEnd","PromotionSlideRenderer","_uniqueKey","BannerSlideRuleModel","SlidesRulesHandler","slidesRulesConfig","gamesWithVideoStream","gamesWithLiveStream","shouldContinue","currentChunk","appendToChunk","VideoSlidesSwiperSlideController","controller","slidesRenderers","_executeForRenderer","onBeforeDeactivate","onAfterActivated","selfPosition","findSlidePosition","currentSlideIndex","getCurrentItemIndex","middleSlideControllerPosition","middleSlidePosition","GamblingSessionManagerErrorCodes","SparkSwiperController","dataFeeder","setCurrentItemIndex","getMaxItemIndex","maxSlides","createSlideController","itemsCount","_slidesControllers","_generateSlidesControllers","activeSlideController","Forward","_rotateSlideController","Backward","to","cloned","moved","VideoSlidesSwiper","_swiperController","_currentSlideIndex","_getCurrentIndexFromLocalStorage","storageData","getStorageData","lastIndexPerFilterUpdateTime","lastIndexPerFilter","setStorageData","MAX_SAFE_INTEGER","VideoSlidesService","_swiper","_videoSlidesFilters","_storageData","_createVideoSlidesFilters","_loadGameTypes","VideoSlides","useAiSorting","videoSlidesConfigs","_isStrictlyMobileDevice","_isVideoSlidesEnabled","currentGameType","_gamesIdsWithStaticVideos","_isAiSortingEnabled","_gamesIdsWithLiveStreamVideos","gamesWithStaticVideos","gamesWithLiveStreamVideos","_filterGamesInfo","slidesRules","createRenderers","swiperList","foundGame","filterListForCurrentGame","shouldStopSearching","filterForCurrentGame","onBoardingShown","video","createVideoStreamingPlayer","GamblingSessionData","gamblingSessionId","sessionActivationTime","startDate","restrictionExpirationDate","GamblingSessionAnalytics","sessionRequestedNetLossAmountLimit","sessionRequestedTimeLimitInSeconds","sessionRequestedTimeReminderInSeconds","sessionRequestedRestrictionInSeconds","userBankrollCurrency","userBankroll","messageTypeSource","messageType","sessionDurationInSeconds","_reportPopupShown","sessionData","_getAnalyticsExtraData","GamblingSessionService","_onGamblingSessionUpdateSubscription","_initialPromiseResolver","_advancedWarningLossLimitToast","_advancedWarningTimeLimitToast","_intervalReminderDialog","_onGamblingSessionActionHandler","GamblingSessionActionType","reportNetLossAdvancedWarningShown","showAckStandardToast","reportMessageConfirmed","reportTimeLimitAdvancedWarningShown","reportTimeLimitReachedShown","_formatUTCDate","messageTimeStamp","reportNetLossLimitReachedShown","reportRealityCheckShow","_gamblingSessionStatePromise","_createInitialGamblingSessionStatePromise","onGamblingSessionAction","_createDefaultGamblingSessionData","isGamblingSessionEnabled","onGamblingSessionUpdate","Inactive","updateCounter","hasTimedOut","GamblingSession","firebaseTimeout","currentState","_formatDate","isFreePlay","Expired","Restricted","createGamblingSession","OK","GamblingSessionAlreadyExist","_showGeneralErrorMessage","_showGamblingSessionRestrictedMessage","_getLastBetActivity","_showGamblingSessionSetupDialog","getLastBetActivity","LastBetActivity","reportSetLimitPopupShown","startGamblingSession","sessionDurationLimitInSeconds","reminderIntervalInSeconds","restrictionPeriodInSeconds","reportConfirmSetLimitPopup","reportCancelSetLimitPopup","LazyAsync","_valueFactory","isLazy","_promisedValue","_resolvedValue","_initializing","_initValue","ServicesGroupLoader","SnackbarNotificationComponentBox","snackbarNotificationBg","bottomOffset","bottomMenu","getBottomOffset","onCtaClick","ctaText","SnackbarNotificationComponent","NotificationsService","newNotifications","_currentNotifications","showNotification","displayTimeMs","SAVE_GAME_NOTIFICATION_DISPLAY_TIME_MS","newNotificationOptions","removeNotification","_setCurrentNotifications","cn","VideoOnDemandHlsPlayer","VideoOnDemandNativePlayer","rewind","VideoOnDemandPlayingService","CrossBrandsMenuItemConfigReader","menuItemsOverride","AppHeaderCrossBrandItemBox","AppHeaderCrossBrandTextBox","GenericCrossBrandsMenuItemComponent","_onBrandClick","brandConfig","menuItemKey","GenericCrossBrandsMenuItemRenderer","HeaderService","_headerResizeObserver","_headerElement","_headerRegulationDataElement","menuItemConfigReader","_onHeaderResize","computeHeaderHeight","computeRegulationHeaderHeight","_headerHeight","headerRegulationHeight","headerElement","k","cross_brand","menuItemKeyIsCrossBrand","crossBrandKey","getCrossBrandItemRenderer","menuItemRenderer","getAppHeaderMenuItem","LinkNavigationAction","promotionsLinks","currentPath","candidate","toArray","MenuItemActionFactoryService","_customActionsModules","actionsModules","ActionConstructor","actionKey","actionConstructor","CustomActionConstructor","VideoElementContainer","_videoElement","_containerElement","containerElement","removeChild","VideoWatchTimeHandler","_watchStartTime","_watchTimeMilliseconds","updateWatchTime","isVideoFatalError","VideoEventsController","getAnalyticsReporter","_onEmptied","_previousResolution","_onBufferingStopped","_isPlaying","_isPaused","resetWatchTime","_lastReportedDroppedFrames","_isOffline","_watchTimeHandler","onPlayStarted","_onStalled","_onBufferingStarted","onPlayStopped","reportPlayError","_onPause","_isBuffering","_onTimeUpdate","playbackQuality","reportDroppedFrames","_onResize","newResolution","videoWidth","videoHeight","reportVideoResolutionChanged","reportBufferingTime","VideoConsoleAnalyticsReporter","VideoPlayerBaseModel","_sdkEventsSubscriptions","_videoElementContainer","_src","_eventsController","_playStrategy","_onAppPaused","isAttached","playStrategy","reportPauseOnAppSleep","appResumeSubscription","subscriptionIndex","_createVideoElement","DefaultAnalyticsReporter","isSoundMuted","mute","unmute","watchLimitReached","reportWatchTimeLimitReached","reporter","_createPlayerStrategy","_isPosterLoaded","videoElementStyles","applyVideoElementStyles","styleProp","sdkEvent","reportPosterLoadFailure","_watchTimeLimit","_resetWatchTime","setPoster","reportPreloadError","reportPlayStarted","reportRetryPlaySuccess","reportRetryPlayError","reportResumePlaySuccess","reportResumePlayError","reportMute","reportUnmute","NativeVideoStreamingStrategy","_updateSrc","HlsVideoStreamingStrategy","eventsSubscriptions","clearEvents","parseManifestHandler","onHslError","_loadVideoManifest","detachMedia","VideoStreamingPlayerModel","isNativeStreamingSupported","VideoService","isStreamingSupported","ACTIVITY_DETECTION_INTERVAL","IDLE_DETECTION_INTERVAL","IDLE_RECOMMENDATIONS_LOCAL_STORAGE_KEY","DISPLAY_INTERVAL","IdleRecommendationsService","_idleDetectionInterval","_numberOfAppearancesInSession","_maxAppearancesAllowedPerSession","_idleDetectionSubscription","_userActivityDetector","_isIdleRecToasterDisplayed","_displayInterval","_recommendedGameType","_toasterDisposer","_defaultOnCloseAnalytics","_openedAnotherGameWhileIdleIsActiveAnalytics","_openedRecommendedGameAnalytics","_onCloseAnalytics","toggleFeatureOn","idleDetectionInterval","maxAppearancesPerSession","_getNoOfAppearancesInSessionFromLocalStorage","displayInterval","_stopIdleDetection","_startIdleDetection","_resetAppearancesInSession","_resetIdleDetectionTimer","_closeToasterWhenOpeningAnotherGame","_startUserIdleDetection","_startUserActivityDetection","_disposeIdleDetectionTimer","_showIdleRecommendationToaster","userActivityDetectionInterval","onUserActivityCallback","_getRecentlyPlayedGame","recentlyPlayedGame","_getRecommendedGameBasedOnCorrelation","recomGameType","_getRecommendedGameInfo","recomGameTypeInfo","_showToaster","toasterHandler","showToast","_onOpened","_increaseAppearancesInSession","_onClosed","recentlyGamesPlayed","recentlyGamePlayed","gameDataInfo","noOfAppearancesInSession","_setIdleRecommendationDataInLocalStorage","ServiceFactory","sdkHooksProvider","windowService","domService","httpService","themeDefaultBoxes","_appStartupConfigs","_languageData","_groupsLoader","_externalLinks","ExternalLinksService","_userMenu","UserMenuService","_crossBrands","_verticalGamesList","VerticalGamesListService","_lobbyGameInfoPreview","loadGroup5","LobbyGameInfoPreviewService","_gamePreviewFeaturesSelector","GamePreviewFeaturesSelectorService","_aiEngine","_aiNewEngine","_deepLink","loadGroup3","DeepLinkService","_gameRouteHandler","_gamesFilter","_becauseYouPlayed","_games","_siteMap","loadGroup4","SiteMapService","_marketing","MarketingService","_cmsPages","loadGroup1","CmsPagesService","_configuration","_spinner","_webVitals","WebVitalsService","_location","LocationService","_routing","_regulation","_segmentation","_liveTableFeeds","_translation","_currencyService","_analyticsService","_analyticsDataLayerService","AnalyticsDataLayerService","_userService","_homepageService","_userGameOrientationService","_cmsApi","CmsApiService","_cmsBanners","CmsBannersService","_launcher","_clientDevice","ClientDeviceService","_device","_deepLinkParser","DeepLinkParserService","_deepLinkActionsFactory","DeepLinkActionsFactoryService","_sdk","_language","_sideMenu","SideMenuService","_gameSearch","GameSearchService","_gamePopup","GamePopupService","_cmsSegmentation","CmsSegmentationService","_stickyHandlerFactory","_exitPopup","loadGroup2","ExitPopupService","_routingConfiguration","_overlay","_time","_abTestingFeatureDataProvider","_abTestingAiSort","_themeDefinition","_themeDefaultBoxes","_miniOrbit","_notifications","_dialog","_header","_pwaManifest","_progressiveWebApp","ProgressiveWebAppService","_miniOrbitCommunicationAdapterFactory","_drawer","DrawerService","_dailyDeal","DailyDealService","_omg","OmgService","_jackpots","JackpotsService","_walletProxy","_controlCenter","_tools","_sessionCooldown","_mediaQuery","_api","_orbitComponentToSdkAdapter","_messageBroker","_appLauncher","CasinofiedAppLauncherService","_actionHandler","_floatingBubbles","_restrictionRuler","_redTiger","RedTigerService","_casinofiedAnalytics","_liveStreamPlaying","_staticVideoPlaying","_videoOnDemandPlaying","_cashier","_playerOfferings","_qaEnvironmentPopUpBlockerService","_limitsToaster","_burnoutService","_pixiAppService","_gameAnimatedIconsManagerService","_webGlContextManagerService","_regularToolTip","_onBoardingTooltip","_gamingHistory","_tippingHistory","_companies","CompaniesService","_freeToPlayService","_gameRunner","GameRunnerService","_hybrid","_sessionStorage","_cookies","_freePlay","_restrictions","_gnwp","GnwpService","_scriptLoader","_adminBanner","AdminBannerService","_sessionTimer","_geoLocation","GeoLocationService","_crm","_specificDialogs","_stateOfResidenceIdentifier","_loyaltyIndicator","_loginPopup","LoginPopupService","_onboardingTour","_nyx","_playerMigration","_toaster","_idleRecommendations","_featuresToggleManagement","_linksNavigation","_menuItemActionFactory","_bottomNavigationBar","BottomNavigationBarService","_titanJackpot","_firebaseToaster","_gamesTheme","_gamesVendor","_playerMessages","_videoSlides","_gamblingSession","_openSessions","GamesOpenSessionService","_video","SplashService","forceInit","GeoLocation","enable","fireOrbitInitComplete","_forceUpgradeHybridOnIos","currentHybridVersion","getAppVersion","expectedHybridVersion","appStoreUrl","tryGetResolvedValue","LogoContainerBox","LogoImageBox","LogoBox","withAnalytics","logoURL","configOverride","logoAltOverride","_getLogoImageURL","_getLogoAlt","ProfilePictureBox","ProfileUserNameBox","ProfilePictureImageBox","avatarState","ProfilePicture","_openUserMenu","marketingDl","_getAvatarUrl","_updateAvatarState","onMouseDown","onMouseUp","_renderUserName","newState","ProfileMessagesDividerBox","ProfileButtonsBox","ProfileCashierButtonBox","ProfileCashierAddButtonBox","ProfileWrapperBox","MARKETING_DL","ProfileBox","_openLogin","_renderLogin","_renderCashier","_renderProfileBoxMessages","StoreButton","store_button","appLink","imgSrc","imgSrcFallback","MenuLinksGroupsContainerBox","SideMenuContainerBox","MobileMenuItemContainerDefaultBox","MobileMenuItemContainerCasino777Box","MobileMenuItemContainerMrGreenBox","MobileMenuItemContainerBox","MobileMenuItemLinkDefaultBox","MobileMenuItemLinkCasino777Box","MobileMenuItemLinkCasinoMrGreenBox","MobileMenuItemLinkBox","_mobileHelpButtonHandler","CR_HELP_CENTER","MobileHelpCenterMenuItemComponent","MobileLangSwitcherMenuItemSelectedLangBox","MobileLangSwitcherContainerBox","MobileLanguageMenuItemBox","openMobileLanguageSwitcher","MobileLangSwitcherMenuItemComponent","SideMenuHorizontalLineDefaultBox","horizontalLineBackgroundImage","SideMenuHorizontalLineMrGreenBox","SideMenuHorizontalLineBox","MobileMenuItemsContainerBox","StateSelectorButtonComponent","handleClick","MobileStateSelectorMenuItemComponent","_openStateSelectorPopup","RelatedSitesWrapperBox","RelatedSiteLinkBox","RelatedSiteLink","RelatedSiteComponent","RelatedSitesComponent","relatedSites","related_sites","relatedSiteConfig","CrossBrandsItemsAboveSearchBox","totalItems","getCrossBrandAboveSearchItemRenderer","CrossBrandsItemsAboveSearch","_renderMobileStateSelector","shouldDisplayStateSelectorButton","linkBlocks","menuLinksBlockOrder","aboveSearchItems","crossBrandAboveSearch","_renderSideMenuSection","_renderMobileMenuElements","_renderBottomMenuSection","_renderRelatedSitesLinks","_renderInsideOrbitMenuContainerMobile","_renderStoreButton","shouldDisplayHelpLink","helpLinkMobile","shouldDisplayLanguageSwitcher","shouldDisplayStateSelector","_renderMobileHelp","_renderMobileLangSwitcher","SideMenu","LanguageSwitcherDropdownBox","LanguageSwitcherListBox","LanguageSwitcherTitleBox","LanguageSwitcherListItemBox","LanguageSwitcherItemLabelBox","LanguageSwitcherItemCheckboxBox","LanguageSwitcherSectionComponent","_selectItem","makeCurrent","htmlId","isSelected","isCurrent","section","_renderOneItem","LanguageSwitcherDropdownComponent","_renderSection","marginTop","MainNavCanvasBox","MainNavBox","OPEN_MENU","DRAGGING","MainNavContentWrapperBox","MainNavMenuBox","mainNavRef","dragProperties","isDragging","initialPointerX","initialNavMenuTransform","_onLogoClick","_hideMobileMenu","isMobileMenuOpen","onTouchMove","isRTL","pointerX","pointerXDelta","windowSize","innerWidth","minMainNavXToAutoClose","currentMainNavXPosition","removeProperty","backButtonHandler","backButtonUseLabel","backButtonCyClass","isMobileLanguageSwitcher","closeMobileLanguageSwitcher","_renderMobileMenuHeader","isNavigation","_renderLogo","_renderProfileBox","MainNav","HelpButtonComponent","AppHeaderCrossBrandListBox","sites","crossBrandsMenuItems","getCrossBrandsMenuItems","AppHeaderCrossBrandsComponent","BurgerMenuContainerBox","openMobileMenu","MobileBurgerMenuComponent","HeaderLanguageSwitcherBox","HeaderLanguageSwitcherComponent","_timer","_toggleDropdown","_clearCollapseTimeout","_colapseDropdown","_startCollapseTimeout","DepositHeaderButtonBox","DepositHeaderButtonComponent","depositHeaderIcon","NavbarSeparatorBox","HeaderNavbarContainerBox","HeaderNavbarLeftContainerBox","HeaderNavbarRightContainerBox","_captureHeaderRef","setHeaderElement","_handleSearchClick","header_buttons","help","stickyOffset","useSafeAreaTop","_renderMobileSearchButton","_renderDeposit","secondaryLogoUrl","componentIDs","currentComponentID","_renderDesktopLanguageSwitcher","_renderDesktopHelpButton","_renderDesktopControlCenterButton","_renderDesktopStateSelectorButton","_renderSecondLogo","_renderDesktopSearchInput","_renderCrossBrand","Fragment","_renderRelevantComponent","top_header_left","_renderInsideOrbitMenuContainerPC","top_header_right","deactivateSkeleton","_renderMobileNavbar","_renderDesktopLeftNavbar","_renderDesktopRightNavbar","HeaderComponent","OverlayComponentBox","OverlayComponent","closeOverlay","SpinnerLogoDefaultBox","SpinnerLogoCasino777Box","SpinnerLogoCIPBox","SpinnerLogoWSOPBox","SpinnerLogoCISBox","SpinnerLogoBox","SpinnerSubtextBox","SpinnerComponent","isTheMigrationSpinnerActive","_renderSubText","BreadcrumbsBox","showBreadcrumbs","cmsPages","currentPage","itemScope","itemType","breadcrumbs","bcrumb","BreadcrumbsComponent","AppFooterComponent","footerConfiguration","footer","RouterOutletDefaultBox","RouterOutletCasino777Box","RouterOutletCasino888Box","RouterOutletHarrahsBox","RouterOutletSIBox","texture","RouterOutletBox","RouterOutletComponent","FloatingBubblesContainerBox","FloatingBubbleBox","FloatingBubblesComponent","floatingBubbles","bubble","MainWrapperBox","radialGradientModel","positionCoordinates","MaskCutoutBox","MaskFabricBox","gradientTransformRotateProp","startingPoint","targetPoint","angle","slopeToAngle","gradientRotationAngle","computeSpotlightSVGPath","spotlightRadius","extendedSpotlightRadius","dPathProp","OA","quadExtendedSpotlightRadius","oa_od_ratio","quadLength","dt_length","D","reference","distance","C","temp1","Cx","Dx","getThePointsAtGivenDistanceFromAReferencePointInTheDirectionOfASlope","T1","T2","Cc","Dd","orderPoints","SpotlightRaySvgBox","GradientStopSvgBox","OnboardingSpotlightComponent","maskElement","svgPathElement","svgGradientElement","animationPromise","captureMaskElement","captureSvgPathElement","captureSvgGradientElement","scheduleAnimation","animateToPoint","P","currentTarget","scrollDisabled","prevState","snapshot","spotlightHome","originPoint","gradientTransform","stopOpacity","nextTarget","intermediateDataComputer","effectsCallback","startTimestamp","previousTimestamp","animationDone","tween","timestamp","elapsed","intermediatePoint","animateFromAToB","intermediateOpacity","intermediate","webkitMaskImage","maskImage","setAttribute","setCurrentTarget","OnboardingDialogLogoBox","OnboardingDialogMainTextBox","OnboardingDialogSecondaryTextBox","OnboardingDialogNextBox","OnboardingDialogStepIndicatorBox","OnboardingDialogContentBox","OnboardingDialogCloseBox","OnboardingDialogBox","OnboardingDialogComponent","logoRef","resizeSubscription","onLogoRefCapture","onLogoCoordinatesUpdate","onClose","onDone","stepsTotal","logoClosing","imgAssets","logoUrlString","closing","sIdx","activeStep","onNext","targetTimeout","setSpotlightOriginPoint","spotlightOriginPoint","allTargets","setTargetAndScheduleNextOfTheSameStep","allClearToDisplayOnboarding","nextStep","closeOnboarding","newStepIndex","targets","QAEnvironmentPopUpBlocker","ContainerComponent","_showQAEnvironmentPopUpBlocker","qaEnvironmentPopUpBlockerCookie","URLSearchParams","_renderRightDrawer","_renderFullOrbitMobileLayout","_renderFullOrbitPcLayout","_renderMiniOrbit","_renderFullOrbit","ModalDialogsContainerComponent","currentDialogs","OrbitComponentsRenderedInsideSdkContainer","componentsPortals","PlayerBurnoutLayerComponent","TooltipArrowDefaultBox","TooltipArrow777Box","TooltipArrowMrGreenBox","TooltipArrowBox","TooltipCloseButtonBox","invertColors","TooltipContainerDefaultBox","isAnimated","TooltipContainerBox","TooltipGlowDefaultBox","TooltipGlow777Box","TooltipGlowMrGreenBox","TooltipGlowBox","TooltipContentBox","ToolTipComponent","_captureElementRef","toolTip","onToolTipRendered","currentTooltip","shouldShowCloseButton","ToolTipContainerComponent","toolTipsProvider","GameLoadingIndicatorRootBox","loadingIndicator","gameLoadingIndicator","GameLoadingIndicatorComponent","renderGame","CurrentGameContainerComponent","ToasterStyleWrapper","ToastContainerBox","ToasterComponent","closeOnClick","newestOnTop","pauseOnFocusLoss","draggable","pauseOnHover","currentNotificationsComponents","notification","SnackbarNotificationContainerComponent","AppComponent","removeSplash","splashTime","webVitals","disableCSSOMInjection","stylisPlugins","RtlPlugin","renderGlobalStyles","renderArena","regularTooltips","onBoardingTooltips","renderApp","InMemoryLocalStorageService","_localStorageData","B2CFrameworkLoader","b2cConfig","_languageIso2","_cmsSource","overrides","urlParts","jsFiles","customJsFiles","customCssFiles","cssFiles","jsFile","_loadScriptTag","_createTagId","cssFile","_loadStyleTag","_buildFilePath","scriptTag","styleTag","resolveAssets","assetsContainer","assetLocationInfo","resolveLocation","getThemeName","storageService","baseUri","isMiniOrbitBasePath","ORBIT_LOCATION_OVERRIDE_BASE","selectTheme","storage","themeDefinitionModule","B2C_APP_ID","CONTENT_ADAPTER_OBJECT_NAME","B2CAdapter","ContentAdapterEvents","foundGames","missingGames","gameImageAlt","gamesTypes","subBrandId","languageIso2","currentLanguageIso2","productPackageId","systemId","cms","footerComponentId","environment","userService","abTestGroup","getCmsUserSignature","B2CABTest","deepLinkService","executeDeepLink","MAX_FIELD_SIZE","fieldsCount","OrbitApi","ORBIT_VERSION","fullVersion","_b2cContentAdapter","getCasinoGamesWithoutBonus","deepLinkObject","navigate","showPwaPrompt","isPwaInstallable","getCasinoGames","configure","enforceActions","createStorage","lsData","LocalStorageService","getLanguageData","languageDataModule","engLang","startApplication","WindowService","DomService","HttpService","loggerService","ConsoleLoggerService","configurationsReader","DEFAULT_CONFIGS","readApplicationConfigurations","appConfigs","languageData","process","REACT_APP_THEME_NAME","ThemeDefaultBoxes","loadB2CFramework","promo","ON_INIT_COMPLETE","ON_ORBIT_INIT_COMPLETE","RUN_AUTOLOGIN","RUN_AUTOLOGIN_TOUCH_ID","MESSAGE_OPEN","MESSAGE_CLOSE","ON_BEFORE_OAUTH_STATE_CHANGE","OAUTH_STATE_CHANGE","AUTOLOGIN_SUCCESS","AUTOLOGIN_FAILED","SUCCESSFULLY_LOGIN_RESPONSE","ON_RUN_AUTOLOGIN","FAIL_LOGIN_RESPONSE","CLOSE_GAME","LOGIN_FORM_OPEN","LOGIN_FORM_CLOSE","GET_NEW_TOUCH_TOKEN","SCREEN_CHANGE_STATE","POST_MESSAGE_ARRIVE","HYBRID_POST_MESSAGE_ARRIVE","EXTEND_USER_TIME_TO_LIVE","SCREEN_RESIZE_CHANGED","GAME_OPEN","FULL_SCREEN_CHANGE","OPEN_OVERLAY","CLOSE_OVERLAY","CLOSE_ALL_OVERLAY","EXTERNAL_LINK_OPEN","EXTERNAL_LINK_CLOSED","EXTERNAL_LINK_OPENED","APP_RESUMED","APP_PAUSED","LOGIN_SESSION_RESUMED","ANALYTIC_TRIGGER_ACTIVATED","ANALYTIC_DATA_LAYER_UPDATE","ANALYTICS_EXPERIMENT_ACTIVATED","ANALYTICS_OPTIMIZE_TRIGGER","INCOMING_MARKETING_DATA","INCOMING_MARKETING_FLOW","PLAYER_ACTION","BALANCE_UPDATED","CURRENCY_UPDATED","RECENTLY_PLAYED_GAMES_UPDATED","LIVE_FEEDS_TOTAL_JACKPOTS_UPDATED","LIVE_FEEDS_JACKPOT_AMOUNTS_BY_GAME_UPDATED","LIVE_FEEDS_JACKPOTS_BY_ID_UPDATED","OAUTH_REMOVE_FROM_LOCAL_STORAGE","LOCAL_STORAGE_CHANGED","ELEMENT_CREATED","BEGIN_LOGIN_AFTER_REGISTRATION","LOGIN_COMPLETED_AFTER_REGISTERATION","LOGIN_FAILED_AFTER_REGISTRATION","REGISTRATION_COMPLETED","HYBRID_ALERT","HYBRID_OPEN_MAIL","HYBRID_UPDATE_INFO_KEY","NYX_GAME_REVEALED","FIREBASE_GOT_NEW_TOKEN","TOUCH_ID_GET_TOKEN_FROM_SRV","TOUCH_ID_INIT_SCREEN_SHOW","TOUCH_ID_TRY_AGAIN_SKIP","TOUCH_ID_CHECK_TOKEN_ENABLE","TOUCH_ID_TOKEN_ENABLE_RES","TOUCH_ID_CLEAR_TOKEN","TOUCH_ID_NATIVE_CANCEL","TOUCH_ID_LOGIN_ERROR","TOUCH_ID_AUTO_LOGIN","TOUCH_ID_STATE_CHANGED","WEB_VIEW_NAVIGATE_GAME","WEB_VIEW_NAVIGATE_DEPOSIT_WIDGET","WEB_VIEW_NAVIGATE_MIT_ID","WEB_VIEW_NAVIGATE_CASHIER","SECOND_WEB_VIEW_OLD_CALL","SECOND_WEB_VIEW_CLOSE","SECOND_WEB_VIEW_OPEN","SECOND_WEB_VIEW_CLOSE_ALL","SECOND_WEB_VIEW_CLOSE_NYX","OVERLAY_OPEN_AWAIT","OVERLAY_CLOSE_EXPIRED","FABRIC_ADD_EVENT","ADD_TAG_OPEN_APP_VER","ADD_TAG","REM_TAG","DEEPLINK_RECEIVED","ROUTE_CHANGED","RESTRICTIONS_CHANGED","SESSION_TIMER_UPDATE","WINDOW_FOCUS_GAIN","WINDOW_FOCUS_LOSS","GEO_HYBRID_UPDATE_ENABLE","GEO_HYBRID_GT_CB","GEO_HYBRID_GET_LOCATION","GEO_HYBRID_GET_LOCATION_RES","GEO_RESTRICTIONS_UPDATE","GEO_PERIODIC_UPDATE","SESSION_EVENT_KICK","SESSION_EVENT_WALLET","SESSION_EVENT_OMG_RECEIVED","SESSION_EVENT_FREE_PLAY_REMOVED","SESSION_EVENT_FREE_PLAY_BATCH_ADDED","SESSION_EVENT_FREE_PLAY_BATCH_UPDATED","SESSION_EVENT_FREE_PLAY_BATCH_REMOVED","SESSION_EVENT_NET_POSITION_UPDATE","SESSION_EVENT_RECEIVED_TOASTER","SESSION_EVENT_UPDATERESTRICTION_RECEIVED","SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED","SECOND_WEB_VIEW_NAVIGATE_SPORT","TIME_UPDATED_FROM_SERVER","ON_BROWSER_PAGE_HIDE","TOKEN_LIFETIME_EXPIRED","LIVE_TABLES_UPDATE","LOADING_INDICATOR_EMBEDDED_UPDATE","LOADING_INDICATOR_EMBEDDED_UPDATE_V2","LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X","GAMES_QUESTIONNAIRE_COMPLETED","GAME_SEQUENCE_FINISH","GAME_POPUP_SHOW","USER_APPROVE_GAME_POPUP","BONUS_ABUSE_PARKING_MONEY","SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW","CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW","DEPOSIT_WIDGET_CLOSED","FREE_TO_PLAY_WIDGET_CLOSED","LOCATION_POPUP_OPEN","LOCATION_POPUP_CLOSED","PLAYER_MESSAGES_STRATEGY_READY","CHANGE_OVERLAY_PRIORITY","OMG_DISPLAYED","LIVE_GAME_SWITCHED","PROMOTIONS_CHANGED","ODR_CLEAR_ALL_GAMES","SERIAL_UPDATE","APPS_FLAYER_READY","DEEP_LINK_READY","GAMBLING_SESSION_UPDATE","GAMBLING_SESSION_ACTION","MENU_CLICKED","LOGIN_BUTTON_CLICKED","REALITY_CHECK_OPENED","REALITY_CHECK_CLOSED","USER_EVENTS","ON_CLICK","ON_DOUBLE_CLICK","ON_SUBMIT","ON_MOUSE_MOVE","ON_MOUSE_DOWN","ON_KEY_PRESS","ON_DOM_MOUSE_SCROLL","ON_MOUSE_WHEEL","ON_TOUCH_START","ON_TOUCH_MOVE","ON_TOUCH_END","ON_MSPOINTER_MOVE","ON_RESIZE","ON_FOCUS","ON_CHANGE","ON_BLUR","USER_ACTIVITY_EVENTS_ALL","USER_ACTIVITY_EVENTS_FOR_HYBRID","GENERAL_ERROR_SUPPORT","RESTRICTED_COUNTRY","INVALID_CREDENTIALS","LOGIN_RESTRICTION","INVALID_REFRESH_TOKEN","CAPTCHA_REQUIRED","TOUCH_ID_CHANGE_PASS","TOUCH_ID_EXPIRE","GENERAL_ERROR","OPENING_GAME_ERROR","UNSUPPORTED_ANONYMOUS","TIME_LIMIT_REACHED_DAILY","TIME_LIMIT_REACHED_WEEKLY","TIME_LIMIT_REACHED_MONTHLY","TOKEN_NOT_VALID","PENDING_ACTION_REQUIRED","INVALID_GRANT","isRefreshTokenError","VOLATILITY_LIMITS","PLATFORM_TYPES","ALL","MOBILE","PC","NONE","TOKEN_PROPERTIES","OAUTH_STORAGE_KEY","OAUTH_EXPIRE_KEY_IN_STORAGE","OAUTH_LAST_REFRESH_TOKEN_TIMESTAMP","OAUTH_LAST_USER_DATA","OAUTH_LAST_SESSION_DATA","OAUTH_HAS_REMEMBER_ME","OAUTH_LAST_TIME_ACTIVITY","OAUTH_CUSTOM_SESSION_TIMEOUT","OAUTH_ACCESS_TOKEN","OAUTH_TOKEN_FIELDS_OVERRIDES","GRANT_TYPES","PASSWORD","REFRESH_TOKEN","AUTOLOGIN","OAUTH2_CSS","AUTHORIZED_USER_CLASS","LOGIN_TYPE","NEW_LOGIN","ID_VERIFICATION_STATUS","AGE_VERIFIED","ADDRESS_VERIFIDED","EXPLICIT_LOGOUT","USER_IDLE","REFRESH_TOKEN_FAILED","ACCESS_TOKEN_REMOVED","USER_KICKED","CLIENT_SIDE_LOGOUT","BASE","POP_UP","OPEN_SESSION","FP","OMG_BEHIND","NEXT_GAME","GAME_LOADING_INDICATOR","GAME_FRAME_LOADER","GAME_FRAME_FP","MINI_CASHIER","CASHIER","LOGIN","EXTERNAL_LINK","INTERNAL_OVER_EXTERNAL_LINK","GEO_FREEZE_WINDOW","TEMP_ACCOUNT","MEMBERSHIP","MESSAGE","SECONDARY_MESSAGE","TOUCH_ID","TOUCH_ID_POPUP","LOCK","SPAIN_SUMMARY_MESSAGE","GAMES_QUESTIONNAIRE","WRAPPER_DEFAULT_INDEX","MESSAGE_TYPE","COM","ITALY","SPAIN","NEVADA","GIB","NJ","DK","ROMANIA","GERMANY","PORTUGAL","SWEDEN","MALTA","SH","MICHIGAN","CANADA_ONTARIO","NETHERLANDS","UK","REGULATION_SUFFIX","REGULATION_STATUS_ID_MAP","APPROVED_FOR_REGULATION","PENDING_DOCUMENTS","BRANDS","NJ888","CANADA","MRGREEN_SE","MRGREEN_GER","MRGREEN_DK","_token","_timezone","_timezoneClip","_masks","shortDate","mediumDate","longDate","fullDate","shortTime","mediumTime","longTime","isoDate","isoTime","isoDateTime","isoUtcDateTime","shortTime12","shortTime24","_i18n","dayNames","monthNames","arguments","prototype","call","SyntaxError","H","M","L","flags","dd","_pad","ddd","dddd","mm","mmm","mmmm","yy","yyyy","hh","HH","MM","ss","T","TT","Z","S","$0","valAsString","eName","eCallback","eContext","isArray","cleanFunctions","eventIdx","self","onceCallback","_originalCallback","subscriptions","getAllSubscriptions","cb","cleanFn","_gameEventsSubscription","_intervals","_timeouts","_domEventsSubscriptions","clear","webpackContext","webpackContextResolve","__webpack_require__","exports","webpackAsyncContext","ids"],"sourceRoot":""}