{"version":3,"file":"main-bde52cb3-bundle.js?1738747637004","mappings":"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","sources":["webpack://klubble.app.client/./assets/icons/account/logout.svg","webpack://klubble.app.client/./assets/icons/expression/eureka.svg","webpack://klubble.app.client/./assets/icons/expression/haha.svg","webpack://klubble.app.client/./assets/icons/expression/hmm.svg","webpack://klubble.app.client/./assets/icons/expression/loveit.svg","webpack://klubble.app.client/./assets/icons/expression/stuck.svg","webpack://klubble.app.client/./assets/icons/expression/welldone.svg","webpack://klubble.app.client/./assets/icons/expression/yeah.svg","webpack://klubble.app.client/./assets/icons/icon_account.svg","webpack://klubble.app.client/./assets/icons/icon_add.svg","webpack://klubble.app.client/./assets/icons/icon_badge_completed.svg","webpack://klubble.app.client/./assets/icons/icon_badge_hints.svg","webpack://klubble.app.client/./assets/icons/icon_badge_social.svg","webpack://klubble.app.client/./assets/icons/icon_badge_streak.svg","webpack://klubble.app.client/./assets/icons/icon_badge_time.svg","webpack://klubble.app.client/./assets/icons/icon_bell.svg","webpack://klubble.app.client/./assets/icons/icon_calendar.svg","webpack://klubble.app.client/./assets/icons/icon_check_bold.svg","webpack://klubble.app.client/./assets/icons/icon_checkmark.svg","webpack://klubble.app.client/./assets/icons/icon_chevron_back.svg","webpack://klubble.app.client/./assets/icons/icon_chevron_down.svg","webpack://klubble.app.client/./assets/icons/icon_chevron_next.svg","webpack://klubble.app.client/./assets/icons/icon_clear.svg","webpack://klubble.app.client/./assets/icons/icon_close-white.svg","webpack://klubble.app.client/./assets/icons/icon_close.svg","webpack://klubble.app.client/./assets/icons/icon_copy.svg","webpack://klubble.app.client/./assets/icons/icon_daily_dose.svg","webpack://klubble.app.client/./assets/icons/icon_dropdown_down.svg","webpack://klubble.app.client/./assets/icons/icon_eye.svg","webpack://klubble.app.client/./assets/icons/icon_gift.svg","webpack://klubble.app.client/./assets/icons/icon_hamburger.svg","webpack://klubble.app.client/./assets/icons/icon_heart_empty.svg","webpack://klubble.app.client/./assets/icons/icon_heart_full.svg","webpack://klubble.app.client/./assets/icons/icon_home.svg","webpack://klubble.app.client/./assets/icons/icon_info.svg","webpack://klubble.app.client/./assets/icons/icon_lightbulb.svg","webpack://klubble.app.client/./assets/icons/icon_link.svg","webpack://klubble.app.client/./assets/icons/icon_lock.svg","webpack://klubble.app.client/./assets/icons/icon_pause.svg","webpack://klubble.app.client/./assets/icons/icon_play.svg","webpack://klubble.app.client/./assets/icons/icon_present.svg","webpack://klubble.app.client/./assets/icons/icon_puzzle.svg","webpack://klubble.app.client/./assets/icons/icon_puzzle_packs.svg","webpack://klubble.app.client/./assets/icons/icon_puzzle_piece.svg","webpack://klubble.app.client/./assets/icons/icon_radio_off.svg","webpack://klubble.app.client/./assets/icons/icon_radio_on.svg","webpack://klubble.app.client/./assets/icons/icon_rotate_device.svg","webpack://klubble.app.client/./assets/icons/icon_share.svg","webpack://klubble.app.client/./assets/icons/icon_thumbs_down.svg","webpack://klubble.app.client/./assets/icons/icon_thumbs_up.svg","webpack://klubble.app.client/./assets/icons/icon_trophy.svg","webpack://klubble.app.client/./assets/icons/platforms/icon_facebook_messenger.svg","webpack://klubble.app.client/./assets/icons/platforms/icon_mail.svg","webpack://klubble.app.client/./assets/icons/platforms/icon_telegram.svg","webpack://klubble.app.client/./assets/icons/platforms/icon_whatsapp.svg","webpack://klubble.app.client/./assets/icons/platforms/icon_x.svg","webpack://klubble.app.client/./assets/images/misc/checkmark.svg","webpack://klubble.app.client/./assets/images/misc/error.svg","webpack://klubble.app.client/./assets/images/misc/pending.svg","webpack://klubble.app.client/./assets/images/squircles/filled-186x186px.svg","webpack://klubble.app.client/./assets/images/squircles/filled-202x202px.svg","webpack://klubble.app.client/./assets/images/squircles/filled-214x214.svg","webpack://klubble.app.client/./assets/images/squircles/filled-30x30.svg","webpack://klubble.app.client/./assets/images/squircles/filled-336x336px.svg","webpack://klubble.app.client/./assets/images/squircles/filled-40x40px.svg","webpack://klubble.app.client/./assets/images/squircles/filled-550x550px.svg","webpack://klubble.app.client/./assets/images/squircles/filled-99x99px.svg","webpack://klubble.app.client/./assets/images/squircles/filled-clipped-262x262.svg","webpack://klubble.app.client/./assets/images/squircles/filled-clipped-312x309.svg","webpack://klubble.app.client/./assets/images/squircles/light-198x198px.svg","webpack://klubble.app.client/./assets/images/squircles/light-353x353px.svg","webpack://klubble.app.client/./assets/images/squircles/light-610x610px.svg","webpack://klubble.app.client/./assets/images/squircles/outline-113x113px.svg","webpack://klubble.app.client/./assets/images/squircles/outline-122x122px.svg","webpack://klubble.app.client/./assets/images/squircles/outline-143x143px.svg","webpack://klubble.app.client/./assets/images/squircles/outline-87x86.svg","webpack://klubble.app.client/./assets/images/squircles/outline-clipped-83x83.svg","webpack://klubble.app.client/../../../packages/common_packages/assets/images/misc/chevron_left.svg","webpack://klubble.app.client/./actions/configActions.ts","webpack://klubble.app.client/./actions/puzzleDataActions.ts","webpack://klubble.app.client/./api/puzzleData.ts","webpack://klubble.app.client/./actions/puzzleFilterActions.ts","webpack://klubble.app.client/./actions/settingActions.ts","webpack://klubble.app.client/./actions/uiActions.ts","webpack://klubble.app.client/./actions/userActions.ts","webpack://klubble.app.client/./api/authentication.ts","webpack://klubble.app.client/./api/common.ts","webpack://klubble.app.client/./api/gameEvents.ts","webpack://klubble.app.client/./api/getQRGameForLocation.ts","webpack://klubble.app.client/./api/translation.ts","webpack://klubble.app.client/./constants/appDisplayModes.tsx","webpack://klubble.app.client/./constants/locale.ts","webpack://klubble.app.client/./constants/paths.ts","webpack://klubble.app.client/./constants/puzzleFilters1.ts","webpack://klubble.app.client/./constants/puzzleFilters2.ts","webpack://klubble.app.client/./constants/puzzleFormat.ts","webpack://klubble.app.client/./constants/puzzleMainType.ts","webpack://klubble.app.client/./constants/translationGroups.ts","webpack://klubble.app.client/./contexts/PWAInstallContext.ts","webpack://klubble.app.client/./contexts/TranslationContext.ts","webpack://klubble.app.client/./enums/Button.ts","webpack://klubble.app.client/./enums/DailyDoseEnum.ts","webpack://klubble.app.client/./enums/Role.ts","webpack://klubble.app.client/./enums/SubscriptionType.ts","webpack://klubble.app.client/./enums/puzzleData.ts","webpack://klubble.app.client/./hooks/useAbilities.ts","webpack://klubble.app.client/./hooks/useActiveSubscription.ts","webpack://klubble.app.client/./hooks/useAsyncError.ts","webpack://klubble.app.client/./hooks/useBroadcastChannel.ts","webpack://klubble.app.client/./hooks/useCheckUsernameAvailable.ts","webpack://klubble.app.client/./hooks/useDebounce.ts","webpack://klubble.app.client/./hooks/useConfig.ts","webpack://klubble.app.client/./hooks/useCountryOptions.ts","webpack://klubble.app.client/./hooks/useCurrencyFormatters.ts","webpack://klubble.app.client/./hooks/useDateFormatters.ts","webpack://klubble.app.client/./hooks/useLogin.ts","webpack://klubble.app.client/./hooks/usePriceModels.ts","webpack://klubble.app.client/./hooks/usePuzzlePackTypeFavorite.ts","webpack://klubble.app.client/./hooks/usePuzzleSelectedLevel.ts","webpack://klubble.app.client/./hooks/usePuzzleType.ts","webpack://klubble.app.client/./hooks/usePuzzleTypeFavorite.ts","webpack://klubble.app.client/./hooks/usePuzzleTypeImageUrls.ts","webpack://klubble.app.client/./hooks/useShareDialog.ts","webpack://klubble.app.client/./hooks/useTrackCheckout.ts","webpack://klubble.app.client/./hooks/useWindowPosition.ts","webpack://klubble.app.client/./pages/account/components/home/AccountHomeComponent.tsx","webpack://klubble.app.client/./pages/account/components/AccountRoutesComponent.tsx","webpack://klubble.app.client/./pages/account/components/AccountLogOutComponent.tsx","webpack://klubble.app.client/./index.tsx","webpack://klubble.app.client/./interfaces/IPuzzleCalendar.ts","webpack://klubble.app.client/./pages/account/components/common/AccountHeaderComponent.tsx","webpack://klubble.app.client/./pages/account/components/common/AccountProfileComponent.tsx","webpack://klubble.app.client/./pages/account/components/faq/AccountFAQComponent.tsx","webpack://klubble.app.client/./pages/account/components/information/AccountInformationContentComponent.tsx","webpack://klubble.app.client/./assets/icons/account/personal_details.svg","webpack://klubble.app.client/./assets/icons/account/account_details.svg","webpack://klubble.app.client/./assets/icons/account/game_settings.svg","webpack://klubble.app.client/./assets/icons/account/information.svg","webpack://klubble.app.client/./assets/icons/account/notification_settings.svg","webpack://klubble.app.client/./assets/icons/account/faq.svg","webpack://klubble.app.client/./assets/icons/icon_warning.svg","webpack://klubble.app.client/./pages/account/components/information/AccountInformationComponent.tsx","webpack://klubble.app.client/./pages/account/components/personal-details/AccountPersonalDetailsComponent.tsx","webpack://klubble.app.client/./assets/icons/invoice/icon_receipt.svg","webpack://klubble.app.client/./pages/account/components/account-details/invoices/Invoice.ts","webpack://klubble.app.client/./pages/account/components/account-details/invoices/AccountDetailsInvoicesEntryComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/invoices/AccountDetailsInvoicesComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/invoices/AccountDetailsInvoiceComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/invoices/AccountDetailsInvoiceRoutesComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/subscription/AccountDetailsReenableSubscriptionButtonComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/subscription/AccountDetailsSubscriptionFieldComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/subscription/AccountDetailsSubscriptionInfoComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/subscription/SubscriptionUpgradeCardComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/pages.ts","webpack://klubble.app.client/./pages/account/components/account-details/subscription/AccountDetailsSubscriptionComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/payment/AccountDetailsPaymentComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/AccountDetailsSubscriptionListItemComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/AccountDetailsHomeComponent.tsx","webpack://klubble.app.client/./pages/account/components/account-details/AccountDetailsRoutesComponent.tsx","webpack://klubble.app.client/./pages/account/components/game-settings/GameSettingsComponent.tsx","webpack://klubble.app.client/./pages/account/pages.ts","webpack://klubble.app.client/./pages/account/components/notification-settings/AccountNotificationsSettingsComponent.tsx","webpack://klubble.app.client/../../../packages/blockpuzzle/resources/assets/js/actions/blockActions.ts","webpack://klubble.app.client/../../../packages/camping/resources/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/camping/resources/assets/js/constants/campingCellValues.ts","webpack://klubble.app.client/../../../packages/camping/resources/assets/js/utilities/campingValues.ts","webpack://klubble.app.client/../../../packages/common_crossword_packages/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/common_crossword_packages/assets/js/actions/selectionActionTypes.ts","webpack://klubble.app.client/../../../packages/common_crossword_packages/assets/js/actions/selectionActions.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/store/middleware/initialKeyboardHiddenMiddleware.ts","webpack://klubble.app.client/../../../packages/common_crossword_packages/assets/js/actions/selectionUtilities.ts","webpack://klubble.app.client/../../../packages/common_crossword_packages/assets/js/constants/translation.ts","webpack://klubble.app.client/../../../packages/common_crossword_packages/assets/js/selectors/selectionSelectors.ts","webpack://klubble.app.client/../../../packages/filippine/resources/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/honeycomb/resources/assets/js/reducers/cellsReducer.ts","webpack://klubble.app.client/../../../packages/honeycomb/resources/assets/js/reducers/selectionReducer.ts","webpack://klubble.app.client/../../../packages/honeycomb/resources/assets/js/components/hex/utils.ts","webpack://klubble.app.client/../../../packages/honeycomb/resources/assets/js/components/store/utils.ts","webpack://klubble.app.client/../../../packages/honeycomb/resources/assets/js/actions/selectionActions.ts","webpack://klubble.app.client/../../../packages/honeycomb/resources/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/blockpuzzle/resources/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/memory/resources/assets/js/actions/memoryCardActions.ts","webpack://klubble.app.client/../../../packages/memory/resources/assets/js/actions/types.ts","webpack://klubble.app.client/../../../packages/finddifferences/resources/assets/js/actions/differenceActions.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/actionServices/cellActionServices.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/cellActionTypes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/gameActionTypes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/gameActions.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/gameInfoActions.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/settingsActionTypes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/settingsActions.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/timerActionTypes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/timerActions.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/uiActionTypes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/actions/uiActions.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/api/assets.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/api/gameData.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/api/gameDataApi.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/api/portalDataApi.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/api/puzzleImageURLs.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/components/ButtonComponent.tsx","webpack://klubble.app.client/../../../packages/common_packages/assets/js/contexts/ClientContext.tsx","webpack://klubble.app.client/../../../packages/common_packages/assets/js/components/ClientContextComponent.tsx","webpack://klubble.app.client/../../../packages/common_packages/assets/js/components/higher_order_components/ComposeWithSettingsConfiguration.tsx","webpack://klubble.app.client/../../../packages/common_packages/assets/js/components/ui/pill/PillComponent.tsx","webpack://klubble.app.client/../../../packages/common_packages/assets/js/components/ui/progress-bar/ProgressBarComponent.tsx","webpack://klubble.app.client/../../../packages/common_packages/assets/js/config/idAttributes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/constants/breakpoints.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/constants/delays.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/constants/directions.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/constants/forceModes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/constants/gridToasts.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/constants/statuses.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/constants/zoomTriggers.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/contexts/PlayerContext.tsx","webpack://klubble.app.client/../../../packages/common_packages/assets/js/hooks/useId.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/hooks/usePrevious.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/hooks/useWindowDimensions.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/reducers/uiReducer.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/store/utilities/persistency.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/types/drawerTypes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/types/gameDataTypes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/types/gameStatusTypes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/types/gridToastTypes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/types/toastTypes.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/applePencilHelper.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/array.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/customScroll.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/deepCloneObject.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/devices.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/fullscreen.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/gameNameTransformer.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/gamesFolder.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/getIdentifiers.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/getParameterByName.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/getQueryParam.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/languageUsesIJ.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/persistencyStorage.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/components/puzzle_state/stateParser.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/persistency_storage/localStorageKeys.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/persistency_storage/managePersistencyStorageSpace.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/persistency_storage/setupStorage.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/utilities/timer/formatTimeFromSeconds.tsx","webpack://klubble.app.client/../../../packages/common_sudoku_packages/assets/js/actions/cellActionTypes.ts","webpack://klubble.app.client/../../../packages/common_sudoku_packages/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/common_sudoku_packages/assets/js/actions/selectionActionTypes.ts","webpack://klubble.app.client/../../../packages/common_sudoku_packages/assets/js/actions/selectionActions.ts","webpack://klubble.app.client/../../../packages/fitword/resources/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/fitword/resources/assets/js/actions/types.ts","webpack://klubble.app.client/../../../packages/fitword/resources/assets/js/containers/utilities/CluesContainerUtility.ts","webpack://klubble.app.client/../../../packages/fitword/resources/assets/js/selectors/selectionSelectors.ts","webpack://klubble.app.client/../../../packages/fleetcommander/resources/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/fleetcommander/resources/assets/js/constants/fleetcommanderCellValues.ts","webpack://klubble.app.client/../../../packages/fleetcommander/resources/assets/js/utilities/getNextFleetcommanderValue.ts","webpack://klubble.app.client/../../../packages/hashi/resources/assets/js/actions/gameActions.ts","webpack://klubble.app.client/../../../packages/nonogram/resources/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/nonogram/resources/assets/js/actions/types.ts","webpack://klubble.app.client/../../../packages/rebus/resources/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/wordguess/resources/assets/js/actions/cellActions.ts","webpack://klubble.app.client/../../../packages/wordguess/resources/assets/js/constants/animationDelay.ts","webpack://klubble.app.client/../../../packages/wordguess/resources/assets/js/global_events/input.ts","webpack://klubble.app.client/../../../packages/common_packages/assets/js/api/isValidWordApi.ts","webpack://klubble.app.client/../../../packages/wordsearch/resources/assets/js/actions/clueActions.ts","webpack://klubble.app.client/../../../packages/wordsearch/resources/assets/js/actions/smartHintActions.ts","webpack://klubble.app.client/../../../packages/wordsearch/resources/assets/js/utilities/smartHint.ts","webpack://klubble.app.client/../../../packages/wordwheel/resources/assets/js/actions/inputActionTypes.ts","webpack://klubble.app.client/../../../packages/wordwheel/resources/assets/js/utilities/getInputLength.ts","webpack://klubble.app.client/../../../packages/wordwheel/resources/assets/js/selectors/words.ts","webpack://klubble.app.client/../../../packages/wordwheel/resources/assets/js/actions/inputActions.ts","webpack://klubble.app.client/../../../packages/wordwheel/resources/assets/js/utilities/getInputWord.ts"],"sourcesContent":["var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLogout(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 26 26\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.3 12.6c0 .4.2.7.7.7.3 0 .7-.3.7-.7V7c0-.4-.3-.7-.7-.7-.4 0-.7.3-.7.7v5.6zm4.1-3.1c.2-.3.7-.3.9 0 1.4 1.4 1.9 3.2 1.9 4.5s-.5 3-1.9 4.4c-1.3 1.4-3.1 1.9-4.3 1.9-1.3 0-3-.5-4.4-1.9-1.3-1.4-1.8-3.2-1.8-4.5s.5-3 1.8-4.4c.2-.3.8-.3 1 0s.2.7 0 1c-1.1 1.1-1.4 2.4-1.4 3.4s.3 2.4 1.4 3.5 2.4 1.4 3.4 1.4c.9 0 2.3-.4 3.4-1.4 1.1-1.1 1.4-2.4 1.4-3.4s-.3-2.4-1.4-3.5c-.2-.3-.2-.8 0-1z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n}\nexport default SvgLogout;","var _path, _path2, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgEureka(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 18l-2-2M8 8L6 6\",\n stroke: \"#040512\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 3v4M12 17v4M3 12h4M17 12h4\",\n stroke: \"#D2C45B\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 18l2-2M16 8l2-2\",\n stroke: \"#040512\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nexport default SvgEureka;","var _path, _path2, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgHaha(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 20a8 8 0 100-16 8 8 0 000 16z\",\n stroke: \"#99C\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.6 9.6a1 1 0 011-1h.008a1 1 0 110 2H9.6a1 1 0 01-1-1zM13.4 9.6a1 1 0 011-1h.008a1 1 0 110 2H14.4a1 1 0 01-1-1z\",\n fill: \"#040512\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9 13h6.5M9 13c0 4 6 4 6.5 0\",\n stroke: \"#000\",\n strokeWidth: 1.2,\n strokeLinecap: \"round\"\n })));\n}\nexport default SvgHaha;","var _path, _path2, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgHmm(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 20a8 8 0 100-16 8 8 0 000 16z\",\n stroke: \"#0099CD\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.6 10a1 1 0 011-1h.008a1 1 0 110 2H9.6a1 1 0 01-1-1zM13.4 10a1 1 0 011-1h.008a1 1 0 110 2H14.4a1 1 0 01-1-1z\",\n fill: \"#040512\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.2 14.2H8.8\",\n stroke: \"#040512\",\n strokeWidth: 1.3,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nexport default SvgHmm;","var _path, _path2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLoveit(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.998 9.06a3.415 3.415 0 00-1.11-.784 3.258 3.258 0 00-2.619 0 3.414 3.414 0 00-1.11.785l-.66.698-.658-.698A3.329 3.329 0 007.42 8c-.907 0-1.777.38-2.419 1.06A3.73 3.73 0 004 11.62c0 .96.36 1.882 1.002 2.56l.66.698L10.5 20l4.838-5.12.66-.698c.317-.337.57-.736.742-1.175a3.804 3.804 0 000-2.771 3.641 3.641 0 00-.742-1.175z\",\n stroke: \"#040512\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.537 3.442a1.585 1.585 0 00-.512-.327 1.643 1.643 0 00-1.209 0 1.586 1.586 0 00-.512.327l-.304.29-.304-.29A1.617 1.617 0 0017.579 3c-.419 0-.82.16-1.117.442A1.476 1.476 0 0016 4.509c0 .4.166.784.462 1.067l.305.29L19 8l2.233-2.134.304-.29c.147-.14.263-.307.343-.49a1.452 1.452 0 00-.343-1.644z\",\n stroke: \"#F3A1C2\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nexport default SvgLoveit;","var _path, _path2, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgStuck(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 20a8 8 0 100-16 8 8 0 000 16z\",\n stroke: \"#D74141\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.2 15.2S14 13.6 12 13.6s-3.2 1.6-3.2 1.6\",\n stroke: \"#040512\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.6 9.6a1 1 0 011-1h.008a1 1 0 110 2H9.6a1 1 0 01-1-1zM13.4 9.6a1 1 0 011-1h.008a1 1 0 110 2H14.4a1 1 0 01-1-1z\",\n fill: \"#040512\"\n })));\n}\nexport default SvgStuck;","var _path, _path2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgWelldone(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.088 13.547l3.24-6.822a2.54 2.54 0 011.73.661c.458.425.717 1.002.719 1.605l-.708 3.163 5.323-.146c.236-.003.47.042.686.132.216.089.408.22.563.386.155.165.27.36.336.57.067.211.083.433.048.65l-1.107 6.818a1.49 1.49 0 01-.554.928c-.298.237-.68.366-1.072.363l-9.185.022m-.02-8.33l.02 8.33m-.02-8.33l-2.442.006a1.693 1.693 0 00-1.15.446c-.305.285-.476.67-.475 1.072l.012 5.3c.001.402.174.787.48 1.07.306.284.72.442 1.153.441l2.442-.005\",\n stroke: \"#040512\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.175 4.093L11.965 2M16.83 3.097L14.949 5.4M16.78 7.858l2.093-.21\",\n stroke: \"#E4884F\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nexport default SvgWelldone;","var _path, _path2, _path3, _path4, _path5, _path6;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgYeah(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.992 3.5l-1.866.625a2.416 2.416 0 00-1.632 2.6 1.217 1.217 0 01-1.208 1.358h-.316c-.717 0-1.333.5-1.466 1.2l-.175.884\",\n stroke: \"#5FA378\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 5h.008m13.984 3.5H20m-5.838-5h.008M19 17h.008\",\n stroke: \"#040512\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.327 12.167l-.683-.275a1.222 1.222 0 00-1.649.925 1.208 1.208 0 01-1.19 1.016h-.642\",\n stroke: \"#5FA378\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.617 8.5L2 21.5l13-4.605\",\n stroke: \"#040512\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5 12l6 6.5M4 16.5l3 3\",\n stroke: \"#040512\",\n strokeWidth: 1.5\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.166 3l.275.683a1.223 1.223 0 01-.925 1.65c-.583.084-1.016.6-1.016 1.192v.642\",\n stroke: \"#5FA378\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nexport default SvgYeah;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconAccount(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 20C4.482 20 0 15.523 0 10S4.482 0 10 0c5.53 0 10 4.477 10 10s-4.47 10-10 10zm0-18c-4.422 0-8 3.582-8 8 0 2.145.843 4.094 2.217 5.53a5.053 5.053 0 012.35-2.897A4.987 4.987 0 015 9.001C5 6.238 7.241 4 10 4s5 2.238 5 5c0 1.43-.602 2.721-1.566 3.633a5.007 5.007 0 012.35 2.897A7.976 7.976 0 0018 10c0-4.418-3.578-8-8-8zm4 14.93A2.996 2.996 0 0011 14H9a3.004 3.004 0 00-3 2.93A7.972 7.972 0 0010 18c1.458 0 2.82-.389 4-1.07zM10 12c1.663 0 3-1.343 3-3a2.997 2.997 0 00-3-3C8.35 6 7 7.343 7 9s1.35 3 3 3z\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconAccount;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconAdd(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 18 18\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.2 1.114C10.2.5 9.72 0 9.12 0c-.72 0-1.2.499-1.2 1.114v6.692H1.08C.48 7.806 0 8.305 0 8.92c0 .617.48 1.116 1.08 1.116h6.84v6.85C7.92 17.5 8.4 18 9.12 18c.6 0 1.08-.499 1.08-1.114v-6.85h6.6c.6 0 1.2-.499 1.2-1.116 0-.615-.6-1.114-1.2-1.114h-6.6V1.114z\",\n fill: \"#000\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconAdd;","var _defs, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconBadgeCompleted(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 40 40\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n x: \"-16.7%\",\n y: \"-16.7%\",\n width: \"133.3%\",\n height: \"133.3%\",\n filterUnits: \"objectBoundingBox\",\n id: \"icon_badge_completed_svg__a\"\n }, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 2,\n \"in\": \"SourceAlpha\",\n result: \"shadowOffsetOuter1\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\",\n \"in\": \"shadowOffsetOuter1\",\n result: \"shadowMatrixOuter1\"\n }), /*#__PURE__*/React.createElement(\"feMerge\", null, /*#__PURE__*/React.createElement(\"feMergeNode\", {\n \"in\": \"shadowMatrixOuter1\"\n }), /*#__PURE__*/React.createElement(\"feMergeNode\", {\n \"in\": \"SourceGraphic\"\n }))))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n width: 40,\n height: 40,\n rx: 4,\n fill: \"#E4884F\"\n }), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(8 8)\",\n fill: \"#FFF\",\n filter: \"url(#icon_badge_completed_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.976 5.5C5.976 3.567 7.542 2 9.47 2c2.048 0 3.614 1.567 3.614 3.5V6h2.892c1.205 0 2.048.896 2.048 2v2C20.193 10 22 11.792 22 14s-1.807 4-3.976 4v2c0 1.105-.843 2-2.048 2H4.048C2.964 22 2 21.105 2 20v-2.959c0-.574.482-1.04 1.084-1.04h1.687c.843 0 1.446-.673 1.446-1.5 0-.83-.603-1.5-1.446-1.5H3.084C2.482 13 2 12.533 2 11.958V8c0-1.104.964-2 2.048-2h1.928v-.5zM9.47 4c-.723 0-1.446.672-1.446 1.5V6.96C8.024 7.535 7.542 8 6.94 8H4.048v3h.723a3.498 3.498 0 013.494 3.5c0 1.933-1.566 3.5-3.494 3.5h-.723v2h11.928v-2.96c0-.575.482-1.04 1.084-1.04h.964c1.084 0 2.048-.896 2.048-2s-.964-2-2.048-2h-.964c-.602 0-1.084-.466-1.084-1.04V8H12.12c-.602 0-1.084-.465-1.084-1.039V5.5c0-.828-.723-1.5-1.566-1.5z\"\n })))));\n}\nexport default SvgIconBadgeCompleted;","var _defs, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconBadgeHints(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 40 40\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n x: \"-16.7%\",\n y: \"-16.7%\",\n width: \"133.3%\",\n height: \"133.3%\",\n filterUnits: \"objectBoundingBox\",\n id: \"icon_badge_hints_svg__a\"\n }, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 2,\n \"in\": \"SourceAlpha\",\n result: \"shadowOffsetOuter1\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\",\n \"in\": \"shadowOffsetOuter1\",\n result: \"shadowMatrixOuter1\"\n }), /*#__PURE__*/React.createElement(\"feMerge\", null, /*#__PURE__*/React.createElement(\"feMergeNode\", {\n \"in\": \"shadowMatrixOuter1\"\n }), /*#__PURE__*/React.createElement(\"feMergeNode\", {\n \"in\": \"SourceGraphic\"\n }))))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#5FA378\",\n width: 40,\n height: 40,\n rx: 6\n }), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(8 8)\",\n fill: \"#FFF\",\n filter: \"url(#icon_badge_hints_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.123 20v-1.566V18H9.565v2h4.558zm1.32-6.639c-.48.832-.72 1.723-.96 2.639h-1.44v-3.265l1.08-2.301c.24-.494.12-1.097-.36-1.338-.48-.24-1.08-.024-1.32.47l-.479.988-.84-1.132c-.24-.458-.84-.555-1.32-.23-.479.326-.479.94-.239 1.398l1.56 2.23V16h-1.8c-.12-.855-.48-1.687-.84-2.47l-.96-2.024C5.847 8.072 8.246 4 11.965 4c3.839 0 6.358 4.29 4.438 7.735l-.96 1.626zM11.964 2C6.806 2 3.447 7.639 5.727 12.41l1.08 2.012c.599 1.205.839 2.53.839 3.867v1.783c0 1.073.84 1.928 1.919 1.928h4.798c.96 0 1.68-.807 1.68-1.795v-1.771c0-1.434.48-2.844 1.079-4.085l.96-1.626C20.72 7.94 17.362 2 11.964 2z\"\n })))));\n}\nexport default SvgIconBadgeHints;","var _defs, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconBadgeSocial(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 40 40\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n x: \"-16.7%\",\n y: \"-16.7%\",\n width: \"133.3%\",\n height: \"133.3%\",\n filterUnits: \"objectBoundingBox\",\n id: \"icon_badge_social_svg__a\"\n }, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 2,\n \"in\": \"SourceAlpha\",\n result: \"shadowOffsetOuter1\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\",\n \"in\": \"shadowOffsetOuter1\",\n result: \"shadowMatrixOuter1\"\n }), /*#__PURE__*/React.createElement(\"feMerge\", null, /*#__PURE__*/React.createElement(\"feMergeNode\", {\n \"in\": \"shadowMatrixOuter1\"\n }), /*#__PURE__*/React.createElement(\"feMergeNode\", {\n \"in\": \"SourceGraphic\"\n }))))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#F3A1C2\",\n width: 40,\n height: 40,\n rx: 6\n }), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(8 8)\",\n fill: \"#FFF\",\n filter: \"url(#icon_badge_social_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.29 16.971c-1.182.203-2.41-.684-2.41-2.045v-.609A6.084 6.084 0 012 8.345v-.127C2 4.784 4.771 2 8.193 2h4.614C16.23 2 19 4.784 19 8.218c0 .715-.12 1.402-.337 2.043A4.915 4.915 0 0122 14.91a4.915 4.915 0 01-4.12 4.846v.81c0 1.192-1.386 1.862-2.326 1.126l-2.41-1.88a4.427 4.427 0 01-3.855-2.842zm8.385-4.915a6.15 6.15 0 01-4.844 2.378l-1.783 1.445a2.427 2.427 0 002.386 1.95h.048c.229 0 .47.08.65.227l1.748 1.357v-.507c0-.595.481-1.077 1.072-1.077h.12A2.924 2.924 0 0020 14.911a2.915 2.915 0 00-2.325-2.855zm-5.23.37a.888.888 0 00-.565.202l-2.904 2.346c-.036.032-.096.004-.096-.048V13.24a.955.955 0 00-.049-.263.787.787 0 00-.192-.311.804.804 0 00-.579-.241c-2.24 0-4.06-1.827-4.06-4.08v-.128A4.202 4.202 0 018.193 4.01h4.614A4.202 4.202 0 0117 8.218a4.202 4.202 0 01-4.193 4.208h-.361z\"\n })))));\n}\nexport default SvgIconBadgeSocial;","var _defs, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconBadgeStreak(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 40 40\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n x: \"-16.7%\",\n y: \"-16.7%\",\n width: \"133.3%\",\n height: \"133.3%\",\n filterUnits: \"objectBoundingBox\",\n id: \"icon_badge_streak_svg__a\"\n }, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 2,\n \"in\": \"SourceAlpha\",\n result: \"shadowOffsetOuter1\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\",\n \"in\": \"shadowOffsetOuter1\",\n result: \"shadowMatrixOuter1\"\n }), /*#__PURE__*/React.createElement(\"feMerge\", null, /*#__PURE__*/React.createElement(\"feMergeNode\", {\n \"in\": \"shadowMatrixOuter1\"\n }), /*#__PURE__*/React.createElement(\"feMergeNode\", {\n \"in\": \"SourceGraphic\"\n }))))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#99C\",\n width: 40,\n height: 40,\n rx: 6\n }), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(8 8)\",\n fill: \"#FFF\",\n filter: \"url(#icon_badge_streak_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.075 11.74c.462-.006.925-.438.925-.966V6.948c0-.255-.116-.496-.231-.675-.232-.177-.463-.275-.694-.273l-3.818.036c-.462.005-.925.438-.925.966 0 .529.463.952.925.948l1.504-.014-6.362 6.284-3.124-2.732c-.347-.328-.925-.304-1.272.056l-4.743 4.83a1.008 1.008 0 000 1.351.861.861 0 001.273-.012l4.164-4.19 3.123 2.729c.347.325.926.303 1.273-.052l7.056-6.948-.116 1.54c0 .529.463.952 1.042.948z\"\n })))));\n}\nexport default SvgIconBadgeStreak;","var _defs, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconBadgeTime(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 40 40\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n x: \"-16.7%\",\n y: \"-16.7%\",\n width: \"133.3%\",\n height: \"133.3%\",\n filterUnits: \"objectBoundingBox\",\n id: \"icon_badge_time_svg__a\"\n }, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 2,\n \"in\": \"SourceAlpha\",\n result: \"shadowOffsetOuter1\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\",\n \"in\": \"shadowOffsetOuter1\",\n result: \"shadowMatrixOuter1\"\n }), /*#__PURE__*/React.createElement(\"feMerge\", null, /*#__PURE__*/React.createElement(\"feMergeNode\", {\n \"in\": \"shadowMatrixOuter1\"\n }), /*#__PURE__*/React.createElement(\"feMergeNode\", {\n \"in\": \"SourceGraphic\"\n }))))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"#D74141\",\n width: 40,\n height: 40,\n rx: 6\n }), /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(8 8)\",\n fill: \"#FFF\",\n filter: \"url(#icon_badge_time_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.205 4.412c-.57 0-1.027-.429-1.027-.956 0-.528.456-.956 1.027-.956h3.993c.456 0 .913.428.913.956 0 .527-.457.956-.913.956h-1.141V6.282a7.634 7.634 0 013.651 1.531l.342-.37c.343-.374 1.027-.374 1.37 0 .342.374.342.978 0 1.351l-.343.371c.799 1.087 1.37 2.408 1.483 3.848h1.027c.457 0 .913.429.913.956 0 .529-.456.956-.913.956H18.56c-.57 3.716-3.65 6.575-7.53 6.575-4.221 0-7.53-3.423-7.53-7.646 0-3.94 2.966-7.183 6.732-7.601V4.412H9.205zm7.53 9.442c0 3.167-2.51 5.734-5.705 5.734-3.08 0-5.704-2.567-5.704-5.734 0-3.168 2.624-5.736 5.704-5.736 3.195 0 5.705 2.568 5.705 5.736zM8.52 11.266a.844.844 0 011.255 0l1.94 1.912c.342.373.342.978 0 1.352-.343.373-.913.373-1.37 0L8.52 12.617c-.456-.373-.456-.977 0-1.35z\"\n })))));\n}\nexport default SvgIconBadgeTime;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconBell(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 16 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.964 0C6.88 0 6.037.892 6.037 2v.337C3.629 3.17 1.943 5.386 1.943 8V11.602l-1.565 2.23c-.482.602-.482 1.409-.12 2.084.36.662.963 1.084 1.685 1.084h3.01c0 1.663 1.445 3 3.01 3a2.987 2.987 0 003.01-3h3.01c.723 0 1.446-.422 1.807-1.084.361-.675.24-1.482-.24-2.085l-1.566-2.229V8c0-2.614-1.686-4.831-3.974-5.663V2c0-1.108-.963-2-2.046-2zm1.083 15H1.943l1.565-2 .12-.217c.242-.35.362-.759.362-1.18V8c0-2.205 1.806-4 3.974-4 2.287 0 3.973 1.795 3.973 4V11.602c0 .422.24.832.482 1.181l.12.217 1.445 2H9.047zm-1.083 3C7.482 18 7 17.554 7 17h2.047c0 .554-.481 1-1.083 1z\",\n fill: \"#fff\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconBell;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconCalendar(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.04 2c-.6 0-.96.448-.96 1v1H6C4.44 4 3 5.343 3 7v12c0 1.657 1.44 3 3 3h12c1.68 0 3-1.343 3-3V7c0-1.657-1.32-3-3-3h-.96V3c0-.552-.48-1-1.08-1-.48 0-.96.448-.96 1v1H9V3c0-.552-.36-1-.96-1zm7.92 4H6c-.48 0-.96.448-.96 1v1h13.92V7c0-.552-.36-1-.96-1h-2.04zM5.04 19v-9h13.92v9c0 .552-.36 1-.96 1H6c-.48 0-.96-.448-.96-1zm2.04-6c0-.552.36-1 .96-1h2.04c.48 0 .96.448.96 1v2c0 .552-.48 1-.96 1H8.04c-.6 0-.96-.448-.96-1v-2z\",\n fill: \"#000\"\n })));\n}\nexport default SvgIconCalendar;","var _path, _path2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconCheckBold(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.352 6.351L6.368 19.335l2.663 2.663L22.015 9.015 19.352 6.35z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.743 12.384L2.08 15.047l6.951 6.951 2.663-2.663-6.95-6.951z\"\n })));\n}\nexport default SvgIconCheckBold;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconCheckmark(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 20\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.6 2.3c.5.4.5 1 .1 1.4l-9.9 10c0 .2-.3.3-.6.3-.2 0-.5-.1-.7-.4l-4.2-5c-.4-.4-.3-1 0-1.4.5-.4 1.1-.3 1.4.1l3.5 4.2 9-9.2c.5-.4 1.1-.4 1.4 0z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n fill: \"#fff\"\n })));\n}\nexport default SvgIconCheckmark;","var _path, _path2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconChevronBack(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 8 14\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M5.955.288a1.004 1.004 0 011.411.003l.084.095a.995.995 0 01-.08 1.316L2.394 6.676l4.975 4.975c.352.352.384.924.08 1.317l-.083.094a.995.995 0 01-1.411.003L.292 7.402a.985.985 0 01-.287-.656.989.989 0 01.287-.795L5.955.288z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.955.288a1.004 1.004 0 011.411.003l.084.095a.995.995 0 01-.08 1.316L2.395 6.676l4.975 4.975c.352.352.384.924.08 1.317l-.083.094a.995.995 0 01-1.411.003L.293 7.402a.99.99 0 01-.287-.656.989.989 0 01.287-.795L5.955.288z\"\n })));\n}\nexport default SvgIconChevronBack;","var _defs, _use;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconChevronDown(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 14 9\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.955 5.288a1.004 1.004 0 011.41.003l.085.095a.994.994 0 01-.08 1.316l-4.976 4.974 4.975 4.975c.352.353.384.924.08 1.317l-.083.094a.995.995 0 01-1.411.004l-5.663-5.664a.99.99 0 01-.287-.656.989.989 0 01.287-.795z\",\n id: \"icon_chevron_down_svg__a\"\n }))), _use || (_use = /*#__PURE__*/React.createElement(\"use\", {\n fill: \"var(--secondary-color)\",\n transform: \"scale(1 -1) rotate(90 17.509 1)\",\n xlinkHref: \"#icon_chevron_down_svg__a\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconChevronDown;","var _defs, _use;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconChevronNext(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 8 14\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.955 5.288a1.004 1.004 0 011.41.003l.085.095a.994.994 0 01-.08 1.316l-4.976 4.974 4.975 4.975c.352.353.384.924.08 1.317l-.083.094a.995.995 0 01-1.411.004l-5.663-5.664a.99.99 0 01-.287-.656.989.989 0 01.287-.795z\",\n id: \"icon_chevron_next_svg__a\"\n }))), _use || (_use = /*#__PURE__*/React.createElement(\"use\", {\n transform: \"matrix(-1 0 0 1 15.66 -5)\",\n xlinkHref: \"#icon_chevron_next_svg__a\"\n })));\n}\nexport default SvgIconChevronNext;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconClear(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 22C6.578 22 2 17.522 2 12 2 6.476 6.578 2 12 2c5.542 0 10 4.477 10 10 0 5.522-4.458 10-10 10zm3.735-13.708c.361.39.361 1.024 0 1.415l-2.29 2.292 2.29 2.293a1.058 1.058 0 010 1.414c-.361.39-.964.39-1.446 0L12 13.414l-2.29 2.292a.896.896 0 01-1.324 0c-.482-.39-.482-1.022 0-1.414l2.289-2.293-2.29-2.292c-.481-.39-.481-1.024 0-1.415a.896.896 0 011.326 0L12 10.585l2.29-2.293c.481-.39 1.084-.39 1.445 0z\",\n fill: \"#fff\"\n })));\n}\nexport default SvgIconClear;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconCloseWhite(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 18 18\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.73 1.707a1.059 1.059 0 000-1.414c-.483-.39-1.085-.39-1.446 0L8.94 7.585 1.716.293C1.234-.097.632-.097.27.293a1.059 1.059 0 000 1.414L7.615 9 .271 16.293a1.057 1.057 0 000 1.413c.361.392.963.392 1.445 0l7.224-7.292 7.344 7.292c.361.392.963.392 1.445 0a1.057 1.057 0 000-1.413L10.385 9l7.344-7.293z\",\n fill: \"#fff\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconCloseWhite;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconClose(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 18 18\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.73 1.707a1.059 1.059 0 000-1.414c-.483-.39-1.085-.39-1.446 0L8.94 7.585 1.716.293C1.234-.097.632-.097.27.293a1.059 1.059 0 000 1.414L7.615 9 .271 16.293a1.057 1.057 0 000 1.413c.361.392.963.392 1.445 0l7.224-7.292 7.344 7.292c.361.392.963.392 1.445 0a1.057 1.057 0 000-1.413L10.385 9l7.344-7.293z\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconClose;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconCopy(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 8v8c0 2.21 1.807 4 3.976 4h7.952c2.289 0 4.096-1.79 4.096-4C18.193 16 20 14.21 20 12V4.001C20 1.791 18.193 0 16.024 0H7.952C5.783 0 3.976 1.791 3.976 4.001c-2.169 0-3.976 1.79-3.976 4zm6.024-3.999h5.904c2.289 0 4.096 1.79 4.096 4v6c1.084 0 1.928-.896 1.928-2V4c0-1.105-.844-2-1.928-2H7.952c-1.085 0-1.928.895-1.928 2zm-2.048 14c-1.084 0-2.048-.896-2.048-2V8c0-1.105.964-2 2.048-2h7.952c1.205 0 2.048.895 2.048 2v8c0 1.104-.843 2-2.048 2H3.976z\",\n fill: \"#000\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconCopy;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconDailyDose(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.976 0c-1.084 0-1.928.895-1.928 2v3H8.072c-1.205 0-2.048.896-2.048 2v3H2.048C.964 10 0 10.897 0 12v6c0 1.105.964 2 2.048 2h16.024C19.157 20 20 19.105 20 18V2c0-1.105-.843-2-1.928-2h-4.096zm-1.928 18V7H8.072v11h3.976zm1.928 0h4.096V2h-4.096v16zm-7.952-6v6H2.048v-6h3.976z\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconDailyDose;","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconDropdownDown(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 0C4.478 0 0 4.477 0 10c0 5.522 4.477 10 10 10s10-4.478 10-10c0-5.523-4.477-10-10-10zm0 2a8 8 0 010 15.999 8 8 0 110-16z\",\n fill: \"#FFF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.708 9.707a1 1 0 00-1.415-1.415l-2.292 2.293-2.294-2.293a1 1 0 10-1.413 1.415l3 3a1 1 0 001.413 0l3-3z\",\n fill: \"#fff\"\n }))));\n}\nexport default SvgIconDropdownDown;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconEye(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.266 11.578c0 .157-.121.302-.242.422.121.12.242.253.242.41.362.518.846 1.204 1.45 1.891C7.046 15.663 9.1 17 12 17s4.834-1.337 6.163-2.699c.725-.687 1.209-1.373 1.45-1.891.121-.157.242-.29.242-.41s-.12-.265-.242-.422c-.241-.518-.725-1.205-1.45-1.891C16.833 8.325 14.9 7 12 7 9.1 7 7.045 8.325 5.716 9.687c-.604.686-1.088 1.373-1.45 1.891zm17.643.82c0-.012 0-.012-.846-.398l.846.386a.891.891 0 000-.784l-.846.398.846-.398v-.024-.072c0-.048-.12-.12-.12-.217-.121-.18-.242-.446-.484-.747-.362-.614-.846-1.422-1.692-2.24C18.043 6.661 15.505 5 12 5 8.375 5 5.958 6.663 4.387 8.301c-.846.82-1.45 1.627-1.813 2.241-.12.301-.242.566-.363.747-.12.097-.12.169-.12.217V11.602l.846.398-.846-.398a.891.891 0 000 .784L2.937 12c-.846.386-.846.386-.846.398V12.482c0 .06 0 .132.12.229.121.18.242.434.363.747.363.602.967 1.422 1.813 2.229C5.957 17.325 8.375 19 12 19c3.505 0 6.042-1.675 7.613-3.313.846-.807 1.33-1.627 1.692-2.23.242-.312.363-.565.484-.746 0-.097.12-.169.12-.23V12.399zM12 14c-1.088 0-2.054-.904-2.054-2 0-1.108.966-2 2.054-2 1.088 0 1.934.892 1.934 2 0 1.096-.846 2-1.934 2zm-3.988-2c0-2.217 1.813-4 3.988-4a4.007 4.007 0 013.988 4c0 2.205-1.813 4-3.988 4s-3.988-1.795-3.988-4z\",\n fill: \"#7F7F7F\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconEye;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconGift(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 18 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.564.15c-.483-.286-1.087-.15-1.45.304L8.94 3.653 6.886.454C6.523 0 5.919-.136 5.436.15c-.483.286-.604.885-.362 1.34l1.691 2.487H1.933C.846 3.976 0 4.873 0 5.979v2.002c0 .743.362 1.39.966 1.735v7.279A2.998 2.998 0 003.986 20h10.027a2.998 2.998 0 003.02-3.005V9.716c.605-.346.967-.992.967-1.735V5.98c0-1.106-.846-2.003-1.933-2.003h-4.832l1.691-2.487c.242-.454.121-1.054-.362-1.34zM1.933 7.98h6.04V5.98h-6.04v2.002zm8.094-2.002v2.002h6.04V5.98h-6.04zM7.973 9.985H3.02v7.01c0 .553.363 1.001.967 1.001h3.986V9.985zm2.054 8.011V9.985h4.953v7.01c0 .553-.363 1.001-.967 1.001h-3.986z\",\n fill: \"none\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconGift;","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconHamburger(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 23 22\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 19.556h4a1 1 0 011 1v.22a1 1 0 01-1 1H2a1 1 0 01-1-1v-.22a1 1 0 011-1zm0-6h8a1 1 0 011 1v.22a1 1 0 01-1 1H2a1 1 0 01-1-1v-.22a1 1 0 011-1zm-1-3.89c0-.613.5-1.11 1.119-1.11h13.318c.618 0 1.119.493 1.119 1.11 0 .614-.5 1.112-1.12 1.112H2.12A1.112 1.112 0 011 9.667zm0-6c0-.613.494-1.11 1.104-1.11h17.792c.61 0 1.104.493 1.104 1.11 0 .614-.494 1.112-1.104 1.112H2.104C1.494 4.778 1 4.285 1 3.667z\"\n }), /*#__PURE__*/React.createElement(\"g\", {\n strokeLinecap: \"round\",\n strokeWidth: 2\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 13v8M22 18l-3 3M16 18l3 3\"\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 17.556h4a1 1 0 011 1v.22a1 1 0 01-1 1H1a1 1 0 01-1-1v-.22a1 1 0 011-1zm0-6h8a1 1 0 011 1v.22a1 1 0 01-1 1H1a1 1 0 01-1-1v-.22a1 1 0 011-1zm-1-3.89c0-.613.5-1.11 1.119-1.11h13.318c.618 0 1.119.493 1.119 1.11 0 .614-.5 1.112-1.12 1.112H1.12A1.112 1.112 0 010 7.667zm0-6C0 1.054.494.557 1.104.557h17.792c.61 0 1.104.493 1.104 1.11 0 .614-.494 1.112-1.104 1.112H1.104C.494 2.778 0 2.285 0 1.667z\",\n fill: \"#FFF\",\n fillRule: \"nonzero\"\n }), /*#__PURE__*/React.createElement(\"g\", {\n stroke: \"#000\",\n strokeLinecap: \"round\",\n strokeWidth: 2\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 11v8M21 16l-3 3M15 16l3 3\"\n }))))));\n}\nexport default SvgIconHamburger;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconHeartEmpty(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 17\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.92 16.716L10.002 15l1.083 1.7c-.722.394-1.443.4-2.165.016zM8.438 3.007C7.717 2.482 6.754 2 5.551 2c-2.526 0-3.97 1.857-3.489 4.406.842 4.365 7.94 8.594 7.94 8.594L8.92 16.716v-.019c0-.01 0-.024-.12-.044 0-.036-.12-.089-.241-.156-.12-.135-.481-.332-.842-.579A26.141 26.141 0 015.07 13.86c-.963-.855-2.045-1.891-3.008-3.046C1.22 9.675.378 8.305.137 6.787c-.36-1.733 0-3.46.963-4.787C2.183.664 3.867 0 5.55 0 7.476 0 8.92.859 9.882 1.545c0 .027.12.054.12.082 0-.028 0-.055.12-.082C11.086.859 12.53 0 14.335 0c3.97 0 6.256 3.654 5.534 6.868-.361 1.473-1.203 2.814-2.046 3.94-.962 1.143-1.924 2.174-3.007 3.028a26.598 26.598 0 01-2.647 2.063c-.24.248-.602.445-.842.58 0 .068-.12.121-.24.159v.062L10.001 15s6.858-4.264 7.82-8.594C18.424 4.322 16.86 2 14.334 2c-1.083 0-2.046.482-2.888 1.007-.842.627-1.444 1.315-1.444 1.315s-.601-.688-1.564-1.315z\"\n })));\n}\nexport default SvgIconHeartEmpty;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconHeartFull(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 17\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.92 16.716L10.002 15l1.083 1.7c-.722.394-1.443.4-2.165.016zm0 0v-.019c0-.01 0-.024-.12-.044 0-.036-.12-.089-.241-.156-.12-.135-.481-.332-.842-.579A26.141 26.141 0 015.07 13.86c-.963-.855-2.045-1.891-3.008-3.046C1.22 9.675.378 8.305.137 6.787c-.36-1.733 0-3.46.963-4.787C2.183.664 3.867 0 5.55 0 7.476 0 8.92.859 9.882 1.545c0 .027.12.054.12.082 0-.028 0-.055.12-.082C11.086.859 12.53 0 14.335 0c3.97 0 6.256 3.654 5.534 6.868-.361 1.473-1.203 2.814-2.046 3.94-.962 1.143-1.924 2.174-3.007 3.028a26.598 26.598 0 01-2.647 2.063c-.24.248-.602.445-.842.58 0 .068-.12.121-.24.159v.06c0 .002 0 .002-1.084-1.698L8.92 16.716z\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconHeartFull;","var _path, _path2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconHome(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 28\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.268 1.207a1.2 1.2 0 011.473 0l10.8 8.4a1.2 1.2 0 01.464.947v13.2a3.6 3.6 0 01-3.6 3.6h-16.8a3.6 3.6 0 01-3.6-3.6v-13.2c0-.37.17-.72.463-.947l10.8-8.4zm-8.863 9.934v12.613a1.2 1.2 0 001.2 1.2h16.8a1.2 1.2 0 001.2-1.2V11.141l-9.6-7.466-9.6 7.466z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M7.205 14.154a1.2 1.2 0 011.2-1.2h7.2a1.2 1.2 0 011.2 1.2v12a1.2 1.2 0 01-2.4 0v-10.8h-4.8v10.8a1.2 1.2 0 01-2.4 0v-12z\"\n })));\n}\nexport default SvgIconHome;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconInfo(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 20C4.458 20 0 15.522 0 10 0 4.476 4.458 0 10 0s10 4.477 10 10c0 5.522-4.458 10-10 10zm0-18c-4.458 0-8.072 3.582-8.072 8S5.542 17.998 10 17.998c4.458 0 7.952-3.58 7.952-8 0-4.417-3.494-8-7.952-8zm0 6.75c.723 0 1.205.56 1.205 1.25v4c0 .69-.482 1.25-1.205 1.25-.723 0-1.325-.56-1.325-1.25v-4c0-.69.602-1.25 1.325-1.25zM10 5c-.723 0-1.325.56-1.325 1.25S9.277 7.5 10 7.5s1.205-.56 1.205-1.25S10.723 5 10 5z\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconInfo;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconLightbulb(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 14 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.123 18v-1.566V16H4.565v2h4.558zm1.32-6.639c-.48.832-.72 1.723-.96 2.639h-1.44v-3.265l1.08-2.301c.24-.494.12-1.097-.36-1.338-.48-.24-1.08-.024-1.32.47l-.479.988-.84-1.132c-.24-.458-.84-.555-1.32-.23-.479.326-.479.94-.239 1.398l1.56 2.23V14h-1.8c-.12-.855-.48-1.687-.84-2.47l-.96-2.024C.847 6.072 3.246 2 6.965 2c3.839 0 6.358 4.29 4.438 7.735l-.96 1.626zM6.964 0C1.806 0-1.553 5.639.727 10.41l1.08 2.012c.599 1.205.839 2.53.839 3.867v1.783c0 1.073.84 1.928 1.919 1.928h4.798c.96 0 1.68-.807 1.68-1.795v-1.771c0-1.434.48-2.844 1.079-4.085l.96-1.626C15.72 5.94 12.362 0 6.964 0z\",\n fill: \"#000\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconLightbulb;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconLink(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 640 512\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M579.8 267.7c56.5-56.5 56.5-148 0-204.5-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6 31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0l112.3-112.3zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5 50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5l112.2-112.3c31.5-31.5 82.5-31.5 114 0 27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z\"\n })));\n}\nexport default SvgIconLink;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconLock(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.153 10.264H6.847c-.813 0-1.472.659-1.472 1.472v5.153c0 .813.66 1.472 1.472 1.472h10.306c.813 0 1.472-.659 1.472-1.472v-5.153c0-.813-.66-1.472-1.472-1.472zM8.32 10.264V7.319a3.68 3.68 0 117.361 0v2.945\",\n stroke: \"#fff\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n}\nexport default SvgIconLock;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconPause(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 12 14\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.75.333c.92 0 1.667.747 1.667 1.667v10a1.667 1.667 0 01-3.334 0V2c0-.92.747-1.667 1.667-1.667zm-7.5 0c.92 0 1.667.747 1.667 1.667v10a1.667 1.667 0 11-3.334 0V2c0-.92.747-1.667 1.667-1.667z\"\n })));\n}\nexport default SvgIconPause;","var _defs, _use;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconPlay(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n width: \"1em\",\n viewBox: \"0 0 18 19\",\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"1em\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.886 5.469c1.077-1.957 3.143-1.96 4.221 0l6.47 11.75c1.07 1.943.021 3.781-2.158 3.781H5.583c-2.181 0-3.23-1.834-2.16-3.78L9.886 5.469z\",\n id: \"icon_play_svg__a\"\n }))), _use || (_use = /*#__PURE__*/React.createElement(\"use\", {\n transform: \"rotate(90 12 9.5)\",\n xlinkHref: \"#icon_play_svg__a\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconPlay;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconPresent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.97 1.791c-.403-.238-.906-.124-1.208.254L9.95 4.711 8.238 2.045c-.302-.378-.805-.492-1.208-.254a.835.835 0 00-.302 1.116l1.41 2.073H4.11c-.906 0-1.611.748-1.611 1.67v1.668c0 .618.302 1.157.805 1.446V15.829a2.498 2.498 0 002.517 2.504h8.356a2.498 2.498 0 002.517-2.504V9.764c.503-.289.805-.828.805-1.446V6.649c0-.921-.705-1.67-1.61-1.67h-4.028l1.41-2.072a.835.835 0 00-.302-1.116zM4.11 8.318H9.145V6.649H4.111v1.669zm6.746-1.669v1.669H15.889V6.649h-5.033zM9.144 9.987H5.017V15.83c0 .461.302.835.805.835h3.322V9.987zm1.712 6.677V9.987h4.127V15.83c0 .461-.302.835-.805.835h-3.322z\",\n fill: \"#7F7F7F\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconPresent;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconPuzzle(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.976 3.5C3.976 1.567 5.542 0 7.47 0c2.048 0 3.614 1.567 3.614 3.5V4h2.892c1.205 0 2.048.896 2.048 2v2C18.193 8 20 9.792 20 12s-1.807 4-3.976 4v2c0 1.105-.843 2-2.048 2H2.048C.964 20 0 19.105 0 18v-2.959c0-.574.482-1.04 1.084-1.04h1.687c.843 0 1.446-.673 1.446-1.5 0-.83-.603-1.5-1.446-1.5H1.084C.482 11 0 10.533 0 9.958V6c0-1.104.964-2 2.048-2h1.928v-.5zM7.47 2c-.723 0-1.446.672-1.446 1.5V4.96C6.024 5.535 5.542 6 4.94 6H2.048v3h.723a3.498 3.498 0 013.494 3.5c0 1.933-1.566 3.5-3.494 3.5h-.723v2h11.928v-2.96c0-.575.482-1.04 1.084-1.04h.964c1.084 0 2.048-.896 2.048-2s-.964-2-2.048-2h-.964c-.602 0-1.084-.466-1.084-1.04V6H10.12c-.602 0-1.084-.465-1.084-1.039V3.5c0-.828-.723-1.5-1.566-1.5z\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconPuzzle;","var _path, _g, _path2, _path3, _path4, _path5, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconPuzzlePacks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#icon_puzzle_packs_svg__clip0_1_7223)\"\n }, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"icon_puzzle_packs_svg__a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 2,\n y: -2,\n width: 19,\n height: 16\n }, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.628.566l16.918-1.655 1.392 12.491-16.917 1.655L2.628.567z\",\n fill: \"#D9D9D9\"\n }))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#icon_puzzle_packs_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M18.917 5.772c.629.478.713 1.357.188 1.962l-5.582 6.437c-.524.606-1.46.709-2.088.23l-1.69-1.286c-.466-.354-.564-.866-.532-1.242.033-.374.195-.745.444-1.033.205-.236.19-.621-.114-.852-.304-.231-.71-.166-.914.07-.25.288-.603.512-.987.618-.387.107-.942.122-1.407-.232L4.543 9.156c-.629-.478-.713-1.357-.188-1.962l1.124-1.296c-.997-.858-1.147-2.335-.244-3.377.904-1.042 2.477-1.207 3.578-.469L9.938.757c.524-.605 1.46-.708 2.088-.23l1.691 1.287c.465.354.564.865.532 1.242a1.842 1.842 0 01-.444 1.032c-.204.236-.19.621.114.852.304.232.71.166.914-.07.25-.288.603-.512.987-.618.387-.107.941-.121 1.407.233l1.691 1.287zm-1.653 1.173L16.23 6.16c-.956.961-2.526 1.051-3.583.247-1.058-.805-1.286-2.263-.478-3.336l-1.032-.786-1.035 1.193c-.383.442-.922.557-1.327.538a1.942 1.942 0 01-1.097-.4l-.009-.007c-.303-.231-.71-.165-.914.07-.204.236-.19.622.114.853l.009.007c.31.228.542.56.643.923.102.368.093.885-.29 1.327L6.196 7.983l1.034.786c.955-.961 2.526-1.051 3.584-.246 1.057.805 1.285 2.263.476 3.336l1.032.785 4.942-5.699z\",\n fill: \"#7F7F7F\"\n }))), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.413 14.285c.532 0 .963.431.963.963v4.86l6.898 1.896 7.407-1.908v-4.848a.962.962 0 111.925 0v5.22c0 .66-.446 1.235-1.085 1.4l-7.89 2.032c-.244.063-.5.06-.743-.006l-7.375-2.026a1.445 1.445 0 01-1.062-1.393v-5.227c0-.532.43-.963.962-.963z\",\n fill: \"#7F7F7F\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.988 9.778c.531 0 .962.431.962.963v3.19l8.322 1.936 8.845-1.944V11.15a.963.963 0 011.925 0v3.158c0 .679-.472 1.266-1.135 1.412l-9.327 2.05c-.21.047-.428.045-.638-.003L2.143 15.72a1.445 1.445 0 01-1.118-1.407V10.74c0-.532.431-.963.963-.963z\",\n fill: \"#7F7F7F\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.05 10.79a.963.963 0 011.156-.72l9.066 2.109 9.014-1.982a1.445 1.445 0 011.755 1.411v1.181a.963.963 0 01-1.925 0v-.584l-8.537 1.877c-.21.046-.428.045-.637-.004L1.77 11.946a.962.962 0 01-.72-1.156z\",\n fill: \"#7F7F7F\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.507 9.755a.962.962 0 01-.658 1.191l-1.595.46a.963.963 0 11-.533-1.85l1.595-.46a.963.963 0 011.191.659zM22.01 11.119a1.026 1.026 0 01-1.284.549l-2.103-.766a.903.903 0 01-.536-1.212 1.026 1.026 0 011.285-.55l2.102.767a.903.903 0 01.536 1.212zM11.534 12.248c.531 0 .962.43.962.962v9.037a.962.962 0 11-1.925 0V13.21c0-.532.431-.962.963-.962z\",\n fill: \"#7F7F7F\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"icon_puzzle_packs_svg__clip0_1_7223\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M0 0h24v24H0z\"\n })))));\n}\nexport default SvgIconPuzzlePacks;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconPuzzlePiece(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n className: \"icon_puzzle_piece_svg__container\",\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 66 45\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"icon_puzzle_piece_svg__background\",\n d: \"M54.36 30.96c0-1.09 1.219-1.806 2.291-1.614a7.114 7.114 0 100-14.005c-1.072.192-2.29-.524-2.29-1.613V2.415c0-.782-.634-1.415-1.416-1.415H41.632c-1.09 0-1.806 1.219-1.613 2.291a7.114 7.114 0 11-14.005 0C26.206 2.219 25.49 1 24.4 1H13.09c-.782 0-1.415.633-1.415 1.415v11.313c0 1.09-1.22 1.806-2.293 1.614a7.114 7.114 0 100 14.004c1.073-.193 2.293.523 2.293 1.613V42.27c0 .782.633 1.415 1.415 1.415h11.31c1.09 0 1.805-1.22 1.613-2.292a7.114 7.114 0 1114.004 0c-.193 1.073.523 2.292 1.613 2.292h11.316c.782 0 1.415-.633 1.415-1.415V30.96z\"\n })));\n}\nexport default SvgIconPuzzlePiece;","var _defs, _use;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconRadioOff(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm0-2a8 8 0 100-16 8 8 0 000 16z\",\n id: \"icon_radio_off_svg__a\"\n }))), _use || (_use = /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#BFBFBF\",\n xlinkHref: \"#icon_radio_off_svg__a\",\n transform: \"translate(-2 -2)\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconRadioOff;","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconRadioOn(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 17a7 7 0 110-14 7 7 0 010 14z\",\n fill: \"#FFF\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 0c5.523 0 10 4.477 10 10s-4.477 10-10 10S0 15.523 0 10 4.477 0 10 0zm4.707 6.793a1 1 0 00-1.414 0L8.5 11.6 6.207 9.293a1 1 0 10-1.414 1.414l3 3a1 1 0 001.414 0l5.5-5.5a1 1 0 000-1.414z\",\n fill: \"var(--secondary-color)\"\n }))));\n}\nexport default SvgIconRadioOn;","var _style, _path, _path2, _path3, _circle, _circle2, _circle3, _circle4, _path4, _path5, _path6, _path7, _path8, _path9;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconRotateDevice(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"icon_rotate_device_svg__Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n x: 0,\n y: 0,\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 270.2 215.6\",\n xmlSpace: \"preserve\"\n }, props), _style || (_style = /*#__PURE__*/React.createElement(\"style\", null, \".icon_rotate_device_svg__st1{fill:#9c9c9c}.icon_rotate_device_svg__st3{fill:#e9e9e9}.icon_rotate_device_svg__st7{fill:none;stroke:#000;stroke-width:5;stroke-linecap:round}\")), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3 201v-94c0-6.1 4.9-11 11-11h187c6.1 0 11 4.9 11 11v94c0 6.1-4.9 11-11 11H14c-6.1 0-11-4.9-11-11z\",\n fill: \"#e9e9e9\",\n stroke: \"#9c9c9c\",\n strokeWidth: 6\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"icon_rotate_device_svg__st1\",\n d: \"M0 184v-59h9c1.7 0 3 1.3 3 3v53c0 1.7-1.3 3-3 3H0z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M193 178.5v-49c0-1.4 1.1-2.5 2.5-2.5s2.5 1.1 2.5 2.5v49c0 1.4-1.1 2.5-2.5 2.5s-2.5-1.1-2.5-2.5z\",\n fill: \"#747474\"\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n className: \"icon_rotate_device_svg__st1\",\n cx: 70.5,\n cy: 172.5,\n r: 8.5\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n className: \"icon_rotate_device_svg__st1\",\n cx: 70.5,\n cy: 135.5,\n r: 8.5\n })), _circle3 || (_circle3 = /*#__PURE__*/React.createElement(\"circle\", {\n className: \"icon_rotate_device_svg__st3\",\n cx: 65.5,\n cy: 132.5,\n r: 3.5\n })), _circle4 || (_circle4 = /*#__PURE__*/React.createElement(\"circle\", {\n className: \"icon_rotate_device_svg__st3\",\n cx: 65.5,\n cy: 170.5,\n r: 3.5\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M120 184c-17.5-9.5-23.5-46 0-60\",\n fill: \"none\",\n stroke: \"#9c9c9c\",\n strokeWidth: 7,\n strokeLinecap: \"round\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M162.5 3h94c6.1 0 11 4.9 11 11v187c0 6.1-4.9 11-11 11h-94c-6.1 0-11-4.9-11-11V14c0-6.1 4.9-11 11-11z\",\n fill: \"#fff\",\n stroke: \"#000\",\n strokeWidth: 6\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M179.5 0h59v9c0 1.7-1.3 3-3 3h-53c-1.7 0-3-1.3-3-3V0zM185 193h49c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5h-49c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M179.5 104.5c9.5 17.5 46 23.5 60 0\",\n fill: \"none\",\n stroke: \"#000\",\n strokeWidth: 7,\n strokeLinecap: \"round\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"icon_rotate_device_svg__st7\",\n d: \"M180 66c3.2-5.7 15.3-7.6 20 0M220 66c3.2-5.7 15.3-7.6 20 0\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n d: \"M75 24h66v66H75z\"\n })));\n}\nexport default SvgIconRotateDevice;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconShare(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n fill: \"#7F7F7F\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.024 8a3.707 3.707 0 01-2.169-.668l-5.542 2.682 5.301 2.777c.723-.497 1.567-.79 2.41-.79C18.193 12 20 13.79 20 16 20 18.21 18.193 20 16.024 20s-3.976-1.79-3.976-4c0-.574.12-1.121.362-1.615l-4.82-2.49C6.867 13.15 5.542 14 3.976 14 1.807 14 0 12.21 0 10s1.807-4 3.976-4c1.566 0 2.891.863 3.614 2.13l4.82-2.357A4.299 4.299 0 0112.048 4c0-2.209 1.807-4 3.976-4S20 1.791 20 4c0 2.21-1.807 4-3.976 4zm0-6c-1.084 0-2.048.896-2.048 2 0 1.105.964 2 2.048 2s2.048-.895 2.048-2c0-1.104-.964-2-2.048-2zM3.976 8c-1.084 0-1.928.896-1.928 2s.844 2 1.928 2c1.205 0 2.048-.896 2.048-2s-.843-2-2.048-2zm10 8c0-1.104.964-2 2.048-2s2.048.896 2.048 2c0 1.105-.964 2-2.048 2s-2.048-.895-2.048-2z\"\n })));\n}\nexport default SvgIconShare;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconThumbsDown(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M313.4 479.1c26-5.2 42.9-30.5 37.7-56.5l-2.3-11.4c-5.3-26.7-15.1-52.1-28.8-75.2h144c26.5 0 48-21.5 48-48 0-18.5-10.5-34.6-25.9-42.6C497 236.6 504 223.1 504 208c0-23.4-16.8-42.9-38.9-47.1 4.4-7.3 6.9-15.8 6.9-24.9 0-21.3-13.9-39.4-33.1-45.6.7-3.3 1.1-6.8 1.1-10.4 0-26.5-21.5-48-48-48h-97.5c-19 0-37.5 5.6-53.3 16.1l-38.5 25.7C176 91.6 160 121.6 160 153.7V264.9c0 29.2 13.3 56.7 36 75l7.4 5.9c26.5 21.2 44.6 51 51.2 84.2l2.3 11.4c5.2 26 30.5 42.9 56.5 37.7zM32 384h64c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32z\"\n })));\n}\nexport default SvgIconThumbsDown;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconThumbsUp(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M313.4 32.9c26 5.2 42.9 30.5 37.7 56.5l-2.3 11.4c-5.3 26.7-15.1 52.1-28.8 75.2h144c26.5 0 48 21.5 48 48 0 18.5-10.5 34.6-25.9 42.6C497 275.4 504 288.9 504 304c0 23.4-16.8 42.9-38.9 47.1 4.4 7.3 6.9 15.8 6.9 24.9 0 21.3-13.9 39.4-33.1 45.6.7 3.3 1.1 6.8 1.1 10.4 0 26.5-21.5 48-48 48h-97.5c-19 0-37.5-5.6-53.3-16.1l-38.5-25.7C176 420.4 160 390.4 160 358.3V247.1c0-29.2 13.3-56.7 36-75l7.4-5.9c26.5-21.2 44.6-51 51.2-84.2l2.3-11.4c5.2-26 30.5-42.9 56.5-37.7zM32 192h64c17.7 0 32 14.3 32 32v224c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V224c0-17.7 14.3-32 32-32z\"\n })));\n}\nexport default SvgIconThumbsUp;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconTrophy(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.976 0c-.603 0-.964.448-.964 1v1H.964C.36 2 0 2.448 0 3v3c0 2.097 1.566 3.817 3.614 3.986.964 2.084 3.013 3.605 5.302 3.943V18H6.988c-.602 0-.964.447-.964 1 0 .552.362 1 .964 1h6.024c.482 0 .964-.448.964-1 0-.553-.482-1-.964-1h-2.048v-4.07c2.41-.34 4.337-1.86 5.301-3.944C18.313 9.817 20 8.097 20 6V3c0-.552-.482-1-1.084-1h-1.928V1c0-.552-.482-1-.964-1H3.976zM1.928 4h1.084v3.755C2.41 7.415 1.928 6.756 1.928 6V4zM14.94 3V2h-10v5c0 2.76 2.289 5 5.06 5 2.771 0 4.94-2.24 4.94-5V3zm2.048 1h.964v2c0 .756-.362 1.415-1.085 1.755.121-.248.121-.5.121-.755V4zM10 4c-1.084 0-2.048.895-2.048 2 0 1.104.964 2 2.048 2s1.928-.896 1.928-2c0-1.105-.844-2-1.928-2z\",\n fill: \"#000\",\n fillRule: \"evenodd\"\n })));\n}\nexport default SvgIconTrophy;","var _path, _path2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconFacebookMessenger(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 48 48\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#448AFF\",\n d: \"M24 4C13.5 4 5 12.1 5 22c0 5.2 2.3 9.8 6 13.1V44l7.8-4.7c1.6.4 3.4.7 5.2.7 10.5 0 19-8.1 19-18S34.5 4 24 4z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M12 28l10-11 5 5 9-5-10 11-5-5z\"\n })));\n}\nexport default SvgIconFacebookMessenger;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconMail(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 20 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M2.998 0A3.003 3.003 0 000 3v10c0 1.657 1.349 3 2.998 3h14.004A3.003 3.003 0 0020 13V3c0-1.657-1.349-3-2.998-3H2.998zm-.903 2.582A.997.997 0 012.998 2h14.004c.397 0 .746.238.903.582l-7.297 5.674a.983.983 0 01-1.216 0L2.095 2.582zM2 5.045v5.82l3.612-3.01L2 5.045zm.084 8.354a1 1 0 00.915.601h14.004a1 1 0 00.915-.601l-5.142-4.288-.939.723a2.982 2.982 0 01-3.672 0l-.94-.723-5.14 4.288zm15.918-2.534v-5.82l-3.612 2.81L18 10.865z\",\n fill: \"#000\"\n })));\n}\nexport default SvgIconMail;","var _path, _path2, _path3, _path4;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconTelegram(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 48 48\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#29b6f6\",\n d: \"M24 4a20 20 0 100 40 20 20 0 100-40z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M33.95 15l-3.746 19.126s-.161.874-1.245.874c-.576 0-.873-.274-.873-.274l-8.114-6.733-3.97-2.001-5.095-1.355S10 24.375 10 23.625c0-.625.933-.923.933-.923l21.316-8.468c-.001-.001.651-.235 1.126-.234.292 0 .625.125.625.5 0 .25-.05.5-.05.5z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b0bec5\",\n d: \"M23 30.505l-3.426 3.374s-.149.115-.348.12a.494.494 0 01-.219-.043l.964-5.965L23 30.505z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#cfd8dc\",\n d: \"M29.897 18.196a.5.5 0 00-.701-.093L16 26s2.106 5.892 2.427 6.912c.322 1.021.58 1.045.58 1.045l.964-5.965 9.832-9.096a.499.499 0 00.094-.7z\"\n })));\n}\nexport default SvgIconTelegram;","var _style, _path, _path2, _path3, _path4, _path5;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconWhatsapp(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"icon_whatsapp_svg__Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n x: 0,\n y: 0,\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 48 48\",\n xmlSpace: \"preserve\"\n }, props), _style || (_style = /*#__PURE__*/React.createElement(\"style\", null, \".icon_whatsapp_svg__st0{fill:#fff}\")), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"icon_whatsapp_svg__st0\",\n d: \"M3 45.2l3-10.8C4.1 31.2 3.2 27.6 3.2 24 3.2 12.5 12.5 3.1 24 3.1c5.6 0 10.8 2.2 14.8 6.1 3.9 3.9 6.1 9.2 6.1 14.8 0 11.5-9.4 20.9-20.9 20.9-3.5 0-6.9-.9-10-2.5L3 45.2z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"icon_whatsapp_svg__st0\",\n d: \"M3 45.8c-.1 0-.3-.1-.4-.2-.1-.1-.2-.3-.1-.5l2.9-10.6C3.6 31.3 2.6 27.6 2.6 24 2.6 12.2 12.2 2.6 24 2.6c5.7 0 11.1 2.2 15.2 6.3 4 4 6.3 9.4 6.3 15.1 0 11.8-9.6 21.4-21.4 21.4-3.5 0-7-.9-10.1-2.5L3.1 45.7l-.1.1z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24 3.1c5.6 0 10.8 2.2 14.8 6.1 3.9 3.9 6.1 9.2 6.1 14.8 0 11.5-9.4 20.9-20.9 20.9-3.5 0-6.9-.9-10-2.5L3 45.2l3-10.8C4.1 31.2 3.2 27.6 3.2 24 3.2 12.5 12.5 3.1 24 3.1M24 2C11.9 2 2 11.9 2 24c0 3.7.9 7.3 2.7 10.6L1.9 44.9c-.1.4 0 .8.3 1.1.2.2.5.3.8.3h.3l10.6-2.8C17 45.1 20.5 46 24 46c12.1 0 22-9.9 22-22 0-5.9-2.3-11.4-6.4-15.5C35.4 4.3 29.9 2 24 2z\",\n fill: \"#cfd8dc\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M36.3 11.7C33 8.4 28.7 6.6 24 6.6 14.5 6.6 6.7 14.4 6.7 24c0 3.3.9 6.5 2.7 9.2l.4.7L8 40.2l6.6-1.7.6.4c2.7 1.6 5.7 2.4 8.8 2.4 9.6 0 17.3-7.8 17.3-17.3.1-4.7-1.7-9-5-12.3z\",\n fill: \"#40c351\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.8 15.2c-.4-.9-.8-.9-1.2-.9h-1c-.3 0-.9.1-1.4.7-.5.5-1.8 1.8-1.8 4.3s1.9 5 2.1 5.4c.3.3 3.6 5.8 8.9 7.9 4.4 1.7 5.3 1.4 6.3 1.3 1-.1 3.1-1.3 3.5-2.5s.4-2.3.3-2.5c-.1-.2-.5-.3-1-.6s-3.1-1.5-3.6-1.7c-.5-.2-.8-.3-1.2.3-.3.5-1.3 1.7-1.7 2-.3.3-.6.4-1.1.1-.5-.3-2.2-.8-4.2-2.6-1.5-1.4-2.6-3.1-2.9-3.6-.3-.5 0-.8.2-1.1.2-.2.5-.6.8-.9.3-.3.3-.5.5-.9.2-.3.1-.7 0-.9 0-.1-1-2.7-1.5-3.8z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n fill: \"#fff\"\n })));\n}\nexport default SvgIconWhatsapp;","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconX(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 1190 1190\",\n width: \"1em\",\n height: \"1em\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(-238.973 -16.202)\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 834.28,\n cy: 610.6,\n r: 481.33,\n stroke: \"#fff\",\n strokeMiterlimit: 10\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M537.78 331.731l230.07 307.62-231.52 250.11h52.11l202.7-218.98 163.77 218.98h177.32l-243.02-324.92 215.5-232.81h-52.11l-186.67 201.67-150.83-201.67H537.78zm76.63 38.38h81.46l359.72 480.97h-81.46l-359.72-480.97z\",\n fill: \"#fff\"\n }))));\n}\nexport default SvgIconX;","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgCheckmark(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 292 292\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(8 8)\",\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n stroke: \"#4C8661\",\n strokeWidth: 8,\n fill: \"#5FA378\",\n cx: 138,\n cy: 138,\n r: 142\n }), /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#FFF\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M92.656 192.415L207.561 77.51l23.57 23.57-114.905 114.905z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.708 154.466l23.57-23.57 61.518 61.519-23.57 23.57z\"\n })))));\n}\nexport default SvgCheckmark;","var _rect, _rect2, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgError(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 276 276\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 5,\n y: 5,\n width: 266,\n height: 266,\n rx: 133,\n fill: \"#D74141\"\n })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 5,\n y: 5,\n width: 266,\n height: 266,\n rx: 133,\n stroke: \"#CB2222\",\n strokeWidth: 10\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M90.135 72.952c-4.408-4.408-11.415-4.542-15.711-.246-5.155 5.154-5.02 12.162-.613 16.57l47.908 47.908-48.97 48.97c-4.296 4.296-4.161 11.304.246 15.712 4.417 4.416 11.424 4.551 15.72.255l48.971-48.971 49.038 49.038c4.408 4.408 11.415 4.543 16.57-.612 4.296-4.296 4.161-11.304-.247-15.711l-49.038-49.038 47.253-47.253c4.296-4.295 5.02-12.162.604-16.579-4.408-4.407-12.275-3.683-16.571.613l-47.252 47.252-47.908-47.908z\",\n fill: \"#fff\"\n })));\n}\nexport default SvgError;","var _rect, _rect2, _g, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgPending(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 276 276\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 5,\n y: 5,\n width: 266,\n height: 266,\n rx: 133,\n fill: \"#E4884F\"\n })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 5,\n y: 5,\n width: 266,\n height: 266,\n rx: 133,\n stroke: \"#CE6827\",\n strokeWidth: 10\n })), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#pending_svg__clip0_3127_1329)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M88 78.188C88 74.757 90.787 72 94.25 72h87.5c3.464 0 6.25 2.759 6.25 6.188 0 3.428-2.786 6.187-6.25 6.187h-2.083v4.898a39.004 39.004 0 01-11.589 27.715L146.828 138l21.224 21.012a38.923 38.923 0 0111.615 27.715v4.898h2.083c3.464 0 6.25 2.759 6.25 6.187 0 3.429-2.786 6.188-6.25 6.188h-87.5c-3.463 0-6.25-2.759-6.25-6.188 0-3.428 2.787-6.187 6.25-6.187h2.083v-4.898a39.004 39.004 0 0111.589-27.715L129.172 138l-21.25-21.012a39.004 39.004 0 01-11.589-27.715v-4.898H94.25c-3.463 0-6.25-2.759-6.25-6.188zm28.776 89.589A27.274 27.274 0 00113.99 171h48.02a27.274 27.274 0 00-2.786-3.223L138 146.74l-21.224 21.012v.025zM162.01 105a26.59 26.59 0 005.157-15.727v-4.898h-58.334v4.898A26.532 26.532 0 00113.99 105h48.02z\",\n fill: \"#fff\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"pending_svg__clip0_3127_1329\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n transform: \"translate(88 72)\",\n d: \"M0 0h100v132H0z\"\n })))));\n}\nexport default SvgPending;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFilled186X186Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 240.8 236.7\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.2 9.3l87.4 90.9c11.5 11.9 10.9 30.8-1.2 42.1l-92.5 86c-12.1 11.3-31.3 10.7-42.8-1.2l-87.4-91C-2.8 124.2-2.2 105.3 9.9 94l92.5-86c12.2-11.2 31.3-10.6 42.8 1.3z\",\n fill: \"#e2001a\"\n })));\n}\nexport default SvgFilled186X186Px;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFilled202X202Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 202 202\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M125.4 10l68.8 71.6c11.5 11.9 10.9 30.8-1.2 42.1l-72.8 67.7c-12.1 11.3-31.3 10.7-42.8-1.2L8.6 118.5c-11.5-11.9-10.9-30.8 1.2-42L82.6 8.8C94.8-2.5 113.9-1.9 125.4 10z\",\n fill: \"#e2001a\"\n })));\n}\nexport default SvgFilled202X202Px;","var _rect;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFilled214X214(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 290 290\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 3.534,\n y: 0.1,\n width: 214.229,\n height: 214.229,\n rx: 22.908,\n transform: \"scale(1 -1) rotate(-46.625 -164.744 -58.657)\"\n })));\n}\nexport default SvgFilled214X214;","var _rect;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFilled30X30(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 40 39\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 20.49,\n y: -2,\n width: 30,\n height: 30,\n rx: 5,\n transform: \"rotate(46.625 20.49 -2)\"\n })));\n}\nexport default SvgFilled30X30;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFilled336X336Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 336 336\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M194.2 12L328 151.3c11.5 11.9 10.9 30.8-1.2 42.1L185.1 325c-12.1 11.3-31.3 10.7-42.8-1.2L8.5 184.5c-11.5-12-10.9-30.8 1.2-42.1L151.4 10.8C163.5-.5 182.7 0 194.2 12z\",\n fill: \"#e2001a\"\n })));\n}\nexport default SvgFilled336X336Px;","var _rect;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFilled40X40Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 40 40\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 20.49,\n y: -2,\n width: 30,\n height: 30,\n rx: 5,\n transform: \"rotate(46.625 20.49 -2)\",\n fill: \"#E2001A\"\n })));\n}\nexport default SvgFilled40X40Px;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFilled550X550Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 758.2 745.7\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M411 9.3l338.9 352.8c11.5 11.9 10.9 30.8-1.2 42.1L390 737.5c-12.1 11.3-31.3 10.7-42.8-1.2L8.3 383.5c-11.5-11.9-10.9-30.8 1.2-42.1L368.2 8.1C380.4-3.2 399.5-2.6 411 9.3z\",\n fill: \"#e2001a\"\n })));\n}\nexport default SvgFilled550X550Px;","var _rect;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFilled99X99Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 99 99\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 51.17,\n y: -6,\n width: 78,\n height: 78,\n rx: 15,\n transform: \"rotate(46.625 51.17 -6)\",\n fill: \"#E2001A\"\n })));\n}\nexport default SvgFilled99X99Px;","var _rect;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFilledClipped262X262(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 80 352\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: -90.781,\n y: -9.798,\n width: 262.793,\n height: 262.793,\n rx: 24.857,\n transform: \"rotate(46.625 -90.781 -9.798)\"\n })));\n}\nexport default SvgFilledClipped262X262;","var _rect;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFilledClipped312X309(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 350 415\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 148.248,\n y: -12.442,\n width: 312.118,\n height: 309.394,\n rx: 31.746,\n transform: \"rotate(46.625 148.248 -12.442)\"\n })));\n}\nexport default SvgFilledClipped312X309;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLight198X198Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 198 198\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M115.7 6.6l76.5 81c7.5 8 7.2 20.5-.8 28.1l-81 76.5c-8 7.5-20.5 7.2-28.1-.8l-76.5-81c-7.5-8-7.2-20.5.8-28.1l81-76.5c8-7.5 20.6-7.1 28.1.8z\",\n fill: \"#f0f4f9\"\n })));\n}\nexport default SvgLight198X198Px;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLight353X353Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 353 353\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M198.7 6.3L345 161.2c9.4 10 9 25.7-1 35.1L189.1 342.6c-10 9.4-25.7 9-35.1-1L7.6 186.7c-9.4-10-9-25.7 1-35.1L163.5 5.3c10-9.5 25.7-9 35.2 1z\",\n fill: \"#f0f4f9\"\n })));\n}\nexport default SvgLight353X353Px;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLight610X610Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 610 610\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M342.7 18.8l256 266.4c15.3 15.9 14.6 41-1.6 56.1l-271 251.8c-16.2 15-41.7 14.3-57-1.6l-256-266.4c-15.3-15.9-14.6-41 1.6-56.1l271-251.8c16.2-15 41.7-14.3 57 1.6z\",\n fill: \"#f0f4f9\"\n })));\n}\nexport default SvgLight610X610Px;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgOutline113X113Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 113 113\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.3 4l45 47.6c3.4 3.6 3.3 9.3-.4 12.7l-47.6 45c-3.6 3.4-9.3 3.3-12.7-.4l-45-47.6C.2 57.7.3 52 4 48.6l47.6-45C55.2.2 60.9.3 64.3 4z\",\n fill: \"none\",\n stroke: \"#e5e5e5\",\n strokeWidth: 2\n })));\n}\nexport default SvgOutline113X113Px;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgOutline122X122Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 122 122\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M76.3 7.2L115.8 49c7.2 7.6 6.9 19.7-.8 26.9l-41.8 39.5c-7.6 7.2-19.7 6.9-26.9-.8L6.9 72.8C-.3 65.2 0 53.2 7.7 46L49.5 6.5c7.6-7.2 19.6-6.9 26.8.7z\",\n fill: \"none\",\n stroke: \"#e5e5e5\",\n strokeWidth: 2\n })));\n}\nexport default SvgOutline122X122Px;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgOutline143X143Px(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 143 143\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M86.7 7.5l49.5 52.4c7.2 7.6 6.9 19.7-.8 26.9L83 136.2c-7.6 7.2-19.7 6.9-26.9-.8L6.7 83c-7.2-7.6-6.9-19.7.8-26.9L59.8 6.7c7.7-7.2 19.7-6.9 26.9.8z\",\n fill: \"none\",\n stroke: \"#e5e5e5\",\n strokeWidth: 2\n })));\n}\nexport default SvgOutline143X143Px;","var _rect;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgOutline87X86(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 115 115\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 58.909,\n y: -3.88,\n width: 87.173,\n height: 86.387,\n rx: 14.5,\n transform: \"rotate(46.625 58.909 -3.88)\",\n stroke: \"#E5E5E5\"\n })));\n}\nexport default SvgOutline87X86;","var _rect;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgOutlineClipped83X83(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 47 113\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 58.116,\n y: -2.586,\n width: 83.513,\n height: 83.513,\n rx: 9,\n transform: \"rotate(46.625 58.116 -2.586)\",\n stroke: \"#E5E5E5\"\n })));\n}\nexport default SvgOutlineClipped83X83;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgChevronLeft(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 8 14\",\n width: \"1em\",\n height: \"1em\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.3.6c.4-.4 1-.4 1.4 0l.1.1c.3.4.3 1-.1 1.3l-5 5 5 5c.4.4.4.9.1 1.3l-.1.1c-.4.4-1 .4-1.4 0L.6 7.7l-.3-.6c0-.3.1-.6.3-.8L6.3.6z\"\n })));\n}\nexport default SvgChevronLeft;","import { Dispatch } from 'redux'\nimport { ConfigState } from 'client/reducers/configReducer'\nimport { klubbleAPI } from 'client/api/common'\nimport { rethrowError } from 'client/utilities/error'\nimport {\n ConfigAction,\n} from './types'\n\nexport const SET_CONFIG = 'SET_CONFIG'\n\nexport const fetchConfig = (abortController: AbortController) => async (dispatch: Dispatch) => {\n try {\n const res = await klubbleAPI.get('/getconfig', {\n signal: abortController.signal,\n })\n const {\n isLightTrialEnabled,\n isFreeTrialMode,\n freeTrialDays,\n lightTrialDays,\n isExtendedTrialMode,\n extendedTrialDays,\n activePaymentPlatform,\n entity,\n } = res.data\n\n dispatch({\n type: SET_CONFIG,\n payload: {\n isLightTrialEnabled,\n isFreeTrialMode,\n freeTrialDays,\n lightTrialDays,\n isExtendedTrialMode,\n extendedTrialDays,\n activePaymentPlatform,\n entity,\n },\n })\n } catch (e) {\n rethrowError(e, 'Error getting config')\n }\n}\n","import { type Dispatch } from 'redux'\nimport { isAxiosError } from 'axios'\nimport * as Sentry from '@sentry/browser'\nimport { type PuzzleType } from 'client/types/PuzzleType'\nimport { type IPuzzleCalendar } from 'client/interfaces/IPuzzleCalendar'\nimport { type DailyDoseDay } from 'client/types/DailyDoseDay'\nimport { type PuzzleSettings } from 'client/types/PuzzleSettings'\nimport { type DailyDoseType } from 'client/types/DailyDose'\nimport { type FinishedPuzzle } from 'client/types/FinishedPuzzle'\nimport * as uiActions from 'common_packages/assets/js/actions/uiActions'\nimport { drawerTypes } from 'common_packages/assets/js/types/drawerTypes'\nimport { type TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { rethrowError } from 'client/utilities/error'\nimport { toastTypes } from 'common_packages/assets/js/types/toastTypes'\nimport { type StoreState } from 'client/store'\nimport { type ContinuePlayingPuzzleType } from '../types/ContinuePlayingPuzzleType'\nimport { type FeaturedPuzzleType } from '../types/FeaturedPuzzleType'\nimport { type ApiResult, klubbleAPI } from '../api/common'\nimport { puzzleSortingEnum } from '../enums/puzzleData'\nimport { saveSettings, saveSettingsBatch } from '../api/puzzleData'\nimport {\n PuzzleDataAction,\n PuzzlePacksData,\n SetFavoritePuzzlePackTypePayload,\n SetSelectedLevelPuzzlePackTypePayload,\n} from './types'\n\n/* Puzzle types */\nexport const SET_PUZZLE_TYPES = 'SET_PUZZLE_TYPES'\nexport const LOADING_CONTINUE_PLAYING_PUZZLE_TYPES = 'LOADING_CONTINUE_PLAYING_PUZZLE_TYPES'\nexport const SET_CONTINUE_PLAYING_PUZZLE_TYPES = 'SET_CONTINUE_PLAYING_PUZZLE_TYPES'\nexport const LOADING_FEATURED_PUZZLES = 'LOADING_FEATURED_PUZZLES'\nexport const SET_FEATURED_PUZZLES = 'SET_FEATURED_PUZZLES'\n\n/* Puzzle packs */\nexport const SET_PUZZLE_PACKS = 'SET_PUZZLE_PACKS'\nexport const SET_FAVORITE_PUZZLE_PACK_TYPE = 'SET_FAVORITE_PUZZLE_PACK_TYPE'\nexport const SET_SELECTED_LEVEL_PUZZLE_PACK_TYPE = 'SET_SELECTED_LEVEL_PUZZLE_PACK_TYPE'\n\n/* Puzzle calendar */\nexport const SET_PUZZLE_CALENDAR = 'SET_PUZZLE_CALENDAR'\nexport const SET_PUZZLE_SORTING = 'SET_PUZZLE_SORTING'\nexport const SAVE_PUZZLE_SETTINGS = 'SAVE_PUZZLE_SETTINGS'\nexport const SAVE_PUZZLE_SETTINGS_BATCH = 'SAVE_PUZZLE_SETTINGS_BATCH'\n\n/* Puzzle events */\nexport const SET_FINISHED_PUZZLE = 'SET_FINISHED_PUZZLE'\n\n/* Daily doses */\nexport const SET_DAILY_DOSES = 'SET_DAILY_DOSES'\nexport const SET_DAILY_DOSE_TYPES = 'SET_DAILY_DOSE_TYPES'\nexport const SET_DAILY_DOSE_SELECTED_DATE = 'SET_DAILY_DOSE_SELECTED_DATE'\n\nconst GENERAL_API_ERROR_MESSAGE = 'User most likely not authenticated, resulting in API returning 4xx.'\n/* eslint no-console: [\"error\", { allow: [\"error\"] }] */\n\nexport const getPuzzleTypes = () => async (dispatch: TDispatch) => {\n try {\n const res = await klubbleAPI.get('Puzzle/getpuzzletypes')\n if (res?.status === 200) {\n const puzzleTypes = res.data\n dispatch({\n type: SET_PUZZLE_TYPES,\n payload: puzzleTypes,\n })\n } else {\n throw new Error(`Response returned with status ${res?.status}`)\n }\n } catch (e) {\n rethrowError(e, GENERAL_API_ERROR_MESSAGE)\n }\n}\n\nexport const getPuzzlePacks = (abortController: AbortController) => async (dispatch: Dispatch) => {\n try {\n const res = await klubbleAPI.get>('Puzzle/packs', {\n signal: abortController.signal,\n })\n if (res?.status === 200) {\n const puzzlePacksData = res.data.data\n dispatch({\n type: SET_PUZZLE_PACKS,\n payload: puzzlePacksData,\n })\n } else {\n throw new Error(`Response returned with status ${res?.status}`)\n }\n } catch (e) {\n rethrowError(e, GENERAL_API_ERROR_MESSAGE)\n }\n}\n\nexport const getFeaturedPuzzleTypes = () => async (dispatch: Dispatch) => {\n dispatch({\n type: LOADING_FEATURED_PUZZLES,\n payload: true,\n })\n\n try {\n const res = await klubbleAPI.get('Puzzle/getfeatured')\n if (res?.status === 200) {\n const featuredPuzzleTypes = res.data\n dispatch({\n type: SET_FEATURED_PUZZLES,\n payload: featuredPuzzleTypes,\n })\n } else {\n throw new Error(`Response returned with status ${res?.status}`)\n }\n } catch (e) {\n rethrowError(e, GENERAL_API_ERROR_MESSAGE)\n } finally {\n dispatch({\n type: LOADING_FEATURED_PUZZLES,\n payload: false,\n })\n }\n}\n\nexport const getContinuePlayingPuzzleTypes = () => async (dispatch: Dispatch) => {\n dispatch({\n type: LOADING_CONTINUE_PLAYING_PUZZLE_TYPES,\n payload: true,\n })\n\n try {\n const res = await klubbleAPI.get('Puzzle/getcontinueplaying')\n if (res?.status === 200) {\n const continuePlayingPuzzleTypes = res.data\n dispatch({\n type: SET_CONTINUE_PLAYING_PUZZLE_TYPES,\n payload: continuePlayingPuzzleTypes,\n })\n } else {\n throw new Error(`Response returned with status ${res?.status}`)\n }\n } catch (e) {\n rethrowError(e, GENERAL_API_ERROR_MESSAGE)\n } finally {\n dispatch({\n type: LOADING_CONTINUE_PLAYING_PUZZLE_TYPES,\n payload: false,\n })\n }\n}\n\nexport const getPuzzleCalendar = (puzzleTypeId: number) => async (dispatch: Dispatch) => {\n try {\n const res = await klubbleAPI.post('Puzzle/getpuzzlecalendar', JSON.stringify({\n puzzleTypeId,\n }), {\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n if (res?.status === 200) {\n const currentPuzzleCalendar = res.data\n dispatch({\n type: SET_PUZZLE_CALENDAR,\n payload: currentPuzzleCalendar,\n })\n } else {\n throw new Error(`Response returned with status ${res?.status}`)\n }\n } catch (e) {\n rethrowError(e, GENERAL_API_ERROR_MESSAGE)\n }\n}\n\nexport const getDailyDoses = () => async (dispatch: Dispatch) => {\n try {\n const res = await klubbleAPI.get>('Puzzle/dailydosesyear')\n if (res?.data?.success) {\n const dailyDoses = res.data.data?.days.sort((a, b) => Date.parse(a.date) - Date.parse(b.date))\n dispatch({\n type: SET_DAILY_DOSES,\n payload: dailyDoses,\n })\n } else {\n throw new Error('Response not returned successfully')\n }\n } catch (e) {\n rethrowError(e, GENERAL_API_ERROR_MESSAGE)\n }\n}\n\nexport const getDailyDoseTypes = () => async (dispatch: Dispatch) => {\n try {\n const res = await klubbleAPI.get>('Puzzle/dailydosetypes')\n if (res?.data?.success) {\n const dailyDoseTypes = res.data.data\n dispatch({\n type: SET_DAILY_DOSE_TYPES,\n payload: dailyDoseTypes,\n })\n } else {\n throw new Error('Response not returned successfully')\n }\n } catch (e) {\n rethrowError(e, GENERAL_API_ERROR_MESSAGE)\n }\n}\n\nexport const setFinishedPuzzle = (finishedPuzzle: FinishedPuzzle) => (dispatch: Dispatch) => {\n dispatch({\n type: SET_FINISHED_PUZZLE,\n payload: finishedPuzzle,\n })\n}\n\nexport const setPuzzleSorting = (sort: puzzleSortingEnum) => (dispatch: Dispatch) => {\n dispatch({\n type: SET_PUZZLE_SORTING,\n payload: sort,\n })\n}\n\nexport const savePuzzleSettings = (settings: PuzzleSettings) => (dispatch: TDispatch, getState: () => StoreState) => {\n const original = getState().puzzleData.puzzleTypes.find((pT) => pT.puzzleTypeId === settings.puzzleTypeId)\n dispatch({\n type: SAVE_PUZZLE_SETTINGS,\n payload: settings,\n })\n\n return saveSettings(settings)\n .catch((e) => {\n dispatch({\n type: SAVE_PUZZLE_SETTINGS,\n payload: original,\n })\n\n dispatch(uiActions.addToast({\n message: e.message,\n type: toastTypes.ERROR,\n }))\n Sentry.captureException(e)\n })\n}\n\nexport const savePuzzleSettingsBatch = (settings: PuzzleSettings[]) => (dispatch: TDispatch, getState: () => StoreState) => {\n const original = getState().puzzleData.puzzleTypes\n dispatch({\n type: SAVE_PUZZLE_SETTINGS_BATCH,\n payload: settings,\n })\n\n return saveSettingsBatch(settings)\n .catch((e) => {\n dispatch({\n type: SAVE_PUZZLE_SETTINGS_BATCH,\n payload: original,\n })\n dispatch(uiActions.addToast({\n message: e.message,\n type: toastTypes.ERROR,\n }))\n Sentry.captureException(e)\n })\n}\n\nexport const setFavoritePuzzlePackType = (payload: SetFavoritePuzzlePackTypePayload) => async (dispatch: TDispatch) => {\n try {\n // optimistic update\n dispatch({\n type: SET_FAVORITE_PUZZLE_PACK_TYPE,\n payload,\n })\n const url = `/Puzzle/puzzlepacktypes/${payload.puzzlePackTypeId}/favorite/${payload.isFavorite}`\n const res = await klubbleAPI.post(url)\n if (!res.data.success) {\n throw new Error(`${url} did not return succesfully`)\n }\n } catch (e) {\n // revert optimistic update\n dispatch({\n type: SET_FAVORITE_PUZZLE_PACK_TYPE,\n payload: {\n puzzlePackTypeId: payload.puzzlePackTypeId,\n isFavorite: !payload.isFavorite,\n },\n })\n if (isAxiosError(e) && e.response.status === 403) {\n dispatch(uiActions.setDrawer({\n drawer: drawerTypes.NEED_TO_REGISTER,\n forceModal: true,\n }))\n } else {\n dispatch(uiActions.addToast({\n message: e.message,\n type: toastTypes.ERROR,\n }))\n Sentry.captureException(e)\n }\n }\n}\n\nexport const setSelectedLevelPuzzlePackType = (payload: SetSelectedLevelPuzzlePackTypePayload) => async (dispatch: TDispatch) => {\n try {\n const url = `/Puzzle/puzzlepacktypes/${payload.puzzlePackTypeId}/level/${payload.selectedLevel}`\n const res = await klubbleAPI.post(url)\n if (!res.data.success) {\n throw new Error(`${url} did not return succesfully`)\n }\n dispatch({\n type: SET_SELECTED_LEVEL_PUZZLE_PACK_TYPE,\n payload,\n })\n } catch (e) {\n dispatch(uiActions.addToast({\n message: e.message,\n type: toastTypes.ERROR,\n }))\n Sentry.captureException(e)\n }\n}\n\nexport const setDailyDoseSelectedDate = (date: string) => (dispatch: Dispatch) => {\n dispatch({\n type: SET_DAILY_DOSE_SELECTED_DATE,\n payload: date,\n })\n}\n","import { PuzzleSettings } from 'client/types/PuzzleSettings'\nimport { klubbleAPI } from './common'\n\nexport const saveSettings = async (settings: PuzzleSettings) => {\n const res = await klubbleAPI.post('/Puzzle/savesettings', settings)\n if (!res.data.success) {\n throw new Error('Error saving puzzle settings')\n }\n}\n\nexport const saveSettingsBatch = async (settings: PuzzleSettings[]) => {\n const res = await klubbleAPI.post('/Puzzle/savesettings/batch', settings)\n if (!res.data.success) {\n throw new Error('Error saving puzzle settings')\n }\n}\n","import { PuzzleTypeFilterState, PuzzlePackTypeFilterState } from 'client/reducers/puzzleFilterReducer'\nimport { Dispatch } from 'redux'\nimport { PuzzleFilterAction } from './types'\n\nexport const SET_PUZZLE_FILTER = 'SET_PUZZLE_FILTER'\nexport const PRESET_PUZZLE_FILTERS = 'PRESET_PUZZLE_FILTERS'\nexport const SET_PUZZLE_PACK_TYPE_FILTER = 'SET_PUZZLE_PACK_TYPE_FILTER'\nexport const PRESET_PUZZLE_PACK_TYPE_FILTERS = 'PRESET_PUZZLE_PACK_TYPE_FILTERS'\n\nexport const setPuzzleFilter = (filter: PuzzleTypeFilterState) => (dispatch: Dispatch) => {\n dispatch({\n type: SET_PUZZLE_FILTER,\n payload: filter,\n })\n}\n\nexport const presetPuzzleFilters = (filter: PuzzleTypeFilterState) => (dispatch: Dispatch) => {\n dispatch({\n type: PRESET_PUZZLE_FILTERS,\n payload: filter,\n })\n}\n\nexport const setPuzzlePackTypeFilter = (filter: PuzzlePackTypeFilterState) => (dispatch: Dispatch) => {\n dispatch({\n type: SET_PUZZLE_PACK_TYPE_FILTER,\n payload: filter,\n })\n}\n\nexport const presetPuzzlePackTypeFilters = (filter: PuzzlePackTypeFilterState) => (dispatch: Dispatch) => {\n dispatch({\n type: PRESET_PUZZLE_PACK_TYPE_FILTERS,\n payload: filter,\n })\n}\n","import { type Dispatch } from 'redux'\nimport {\n type SetLanguagePayload,\n type SettingsAction,\n type SetSettingsPayload,\n} from './types'\n\nexport const SET_LANGUAGE = 'SET_LANGUAGE'\nexport const SET_SETTINGS = 'SET_SETTINGS'\n\nexport const setLanguage = (payload: SetLanguagePayload) => (dispatch: Dispatch) => {\n dispatch({\n type: SET_LANGUAGE,\n payload,\n })\n}\n\nexport const setSettings = (payload: SetSettingsPayload) => (dispatch: Dispatch) => {\n dispatch({\n type: SET_SETTINGS,\n payload,\n })\n}\n","import { setDrawer } from 'common_packages/assets/js/actions/uiActions'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { drawerTypes } from 'common_packages/assets/js/types/drawerTypes'\nimport { AnyAction } from 'redux'\n\nexport const showSubscribeDrawer = () => (dispatch: TDispatch) => {\n dispatch(setDrawer({\n drawer: drawerTypes.SUBSCRIBE,\n forceModal: true,\n hideHeader: true,\n size: 'large',\n }))\n}\n","import { UserData } from 'client/reducers/userReducer'\nimport { Dispatch } from 'redux'\nimport * as auth from 'client/api/authentication'\nimport { ApiResult, klubbleAPI } from 'client/api/common'\nimport { Role } from 'client/enums/Role'\nimport * as Sentry from '@sentry/browser'\nimport { SettingsAction, UserAction } from './types'\nimport * as settingActions from './settingActions'\n\nexport const SET_USER = 'SET_USER'\nexport const SET_USER_NAME = 'SET_USER_NAME'\nexport const SET_FIRST_NAME = 'SET_FIRST_NAME'\nexport const CLEAR_USER = 'CLEAR_USER'\nexport const SET_OPT_IN_STATUSSES = 'SET_OPT_IN_STATUSSES'\nexport const SET_ROLES = 'SET_ROLES'\n\nexport const setUser = (user?: UserData) => async (dispatch: Dispatch) => {\n let userData\n\n // if a userData is supplied then use that to set the user, otherwise first fetch the userData\n if (user) {\n userData = user\n } else {\n try {\n const { data } = await klubbleAPI.get('Auth/getuser')\n userData = data\n } catch (e) {\n Sentry.captureMessage('log out after error getUser', { extra: { statusCode: e.response?.status } })\n auth.logout()\n }\n }\n\n if (!userData) return\n\n dispatch({\n type: SET_USER,\n payload: userData,\n })\n const settings = JSON.parse(userData.settingsJson) || {\n showTimer: true,\n skipCompletedLetters: true,\n }\n dispatch({\n type: settingActions.SET_SETTINGS,\n payload: settings,\n })\n}\n\nexport const setOptInStatusses = (subscribeNewsletter: boolean, subscribeWeeklyStatistics: boolean, acceptTerms: string) => async (dispatch: Dispatch) => {\n klubbleAPI.post('Auth/setOptInStatusses', JSON.stringify({ subscribeNewsletter, subscribeWeeklyStatistics, acceptTerms }), {\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n\n dispatch({\n type: SET_OPT_IN_STATUSSES,\n payload: { subscribeNewsletter, subscribeWeeklyStatistics },\n })\n}\n\nexport const setUserName = (name: string) => async (dispatch: Dispatch) => {\n dispatch({\n type: SET_USER_NAME,\n payload: name,\n })\n}\n\nexport const saveFirstName = (firstName: string) => async (dispatch: Dispatch) => {\n const { data: response } = await klubbleAPI.post>('Auth/savefirstname', {\n firstName,\n })\n if (response.data) {\n dispatch({\n type: SET_FIRST_NAME,\n payload: firstName,\n })\n }\n}\n\nexport const clearUser = () => async (dispatch: Dispatch) => {\n dispatch({\n type: CLEAR_USER,\n })\n}\n\nexport const setRoles = (payload: Role[]) => async (dispatch: Dispatch) => {\n dispatch({\n type: SET_ROLES,\n payload,\n })\n}\n\nexport const clearRoles = () => async (dispatch: Dispatch) => {\n dispatch({\n type: SET_ROLES,\n payload: [],\n })\n}\n","import axios from 'axios'\nimport { setItemSafely } from 'common_packages/assets/js/utilities/persistencyStorage'\nimport * as Sentry from '@sentry/browser'\nimport { TranslationContextProps } from 'client/contexts/TranslationContext'\nimport translationGroups from 'client/constants/translationGroups'\nimport { addToast } from 'common_packages/assets/js/actions/uiActions'\nimport { toastTypes } from 'common_packages/assets/js/types/toastTypes'\nimport { BrowserAuthError, createStandardPublicClientApplication } from '@azure/msal-browser'\nimport { SSOSettings } from 'client/hooks/useConfig'\nimport { store } from '../store'\nimport { API_URL, klubbleAPI, ApiResult } from './common'\nimport { IAuthToken } from '../interfaces/IAuthToken'\nimport {\n clearUser,\n setUser,\n setRoles,\n clearRoles,\n} from '../actions/userActions'\n\nconst CONFIG = {\n headers: {\n 'Content-Type': 'application/json',\n },\n}\n\nlet AUTH_TOKEN: IAuthToken = null\n\nexport const getCurrentToken = (): IAuthToken => {\n if (AUTH_TOKEN) {\n return AUTH_TOKEN\n }\n\n const authTokenAsString = localStorage.getItem('authToken')\n return authTokenAsString ? JSON.parse(authTokenAsString) : null\n}\n\nexport const setToken = (token: IAuthToken): void => {\n AUTH_TOKEN = token\n setRoles(token?.roles ?? [])(store.dispatch)\n klubbleAPI.defaults.headers.common.Authorization = `Bearer ${token.jwtToken}`\n setItemSafely('authToken', JSON.stringify(token))\n}\n\nfunction clearToken(): void {\n AUTH_TOKEN = null\n clearRoles()(store.dispatch)\n localStorage.removeItem('authToken')\n delete klubbleAPI.defaults.headers.common.Authorization\n}\n\nexport const refreshToken = async (): Promise => {\n const currentToken = getCurrentToken()\n try {\n const res = await axios.post>(`${API_URL}Auth/refresh`, currentToken, {\n ...CONFIG,\n })\n\n if (!res.data?.success) {\n Sentry.captureMessage('refreshing with refreshToken success = false', { extra: { token: !!currentToken, message: res.data?.message, userId: store.getState().user?.data?.id } })\n throw new Error('refreshing with refreshToken success = false')\n }\n\n const newToken = res.data.data\n setToken(newToken)\n await setUser()(store.dispatch)\n return newToken\n } catch (err) {\n Sentry.captureMessage('refreshing with refreshToken error and logging out', {\n extra: {\n token: !!currentToken, err, userId: store.getState().user?.data?.id,\n },\n })\n logout()\n throw err\n }\n}\n\nexport const login = async (translation: TranslationContextProps, email?: string, password?: string): Promise> => {\n try {\n let res\n if (email && password) {\n const payload = JSON.stringify({ email, password })\n res = await klubbleAPI.post>('Auth/authenticate', payload, CONFIG)\n } else {\n res = await klubbleAPI.get>('Auth/loginguest')\n }\n\n if (res.data.success) {\n const authToken = res.data.data\n setToken(authToken)\n await setUser()(store.dispatch)\n } else {\n addToast({\n message: translation.getTranslation(translationGroups.form, res.data.message),\n type: toastTypes.ERROR,\n })(store.dispatch)\n }\n return res.data\n } catch {\n addToast({\n message: translation.getTranslation(translationGroups.api, 'something-went-wrong'),\n type: toastTypes.ERROR,\n })(store.dispatch)\n return null\n }\n}\n\nexport const loginQRHost = async (guid: string): Promise => {\n const res = await klubbleAPI.get(`Auth/loginqrhost?guid=${guid}`)\n\n if (!res.data.success) {\n throw new Error(`${res.config.url} did not return succesfully`)\n }\n const authToken = res.data.data\n setToken(authToken)\n\n await setUser()(store.dispatch)\n}\n\nexport const logout = (skipSSORedirect?: boolean, errorMessage?: string): void => {\n if (process.env.KLUBBLE_LOGIN_SSO_ENABLED === 'true' && !skipSSORedirect) {\n const redirectUrl = new URL(`${window.location.origin}/logoutSSO`)\n if (errorMessage) {\n redirectUrl.searchParams.append('error', errorMessage)\n }\n const baseUrl = process.env.KLUBBLE_API_BASE_PATH.length > 0 ? process.env.KLUBBLE_API_BASE_PATH : window.location.origin\n const signoutUrl = new URL(`${baseUrl}/account/signout`)\n signoutUrl.searchParams.append('redirect_after_logout', redirectUrl.toString())\n window.location.href = signoutUrl.toString()\n } else {\n clearToken()\n clearUser()(store.dispatch)\n // remove possibly existing ls keys related to the payment\n localStorage.removeItem('payment-period-id')\n localStorage.removeItem('puzzle-pack-id')\n localStorage.removeItem('adyen-checkout__session')\n }\n}\n\nexport const checkHasActiveSSOSession = async (settings: SSOSettings): Promise => {\n const instanceName = settings.instance.replace('https://', '')\n const msal = await createStandardPublicClientApplication({\n auth: {\n clientId: settings.clientId,\n authority: `${settings.instance}/${settings.domain}/${settings.signUpSignInPolicy}`,\n knownAuthorities: [instanceName],\n redirectUri: `${window.location.origin}/blank.html`,\n },\n cache: {\n cacheLocation: 'sessionStorage',\n },\n })\n\n try {\n await msal.ssoSilent({})\n const account = msal.getAccount({ environment: instanceName })\n const isValidAccount = account?.idTokenClaims?.exp > (Date.now() / 1000)\n return isValidAccount\n } catch (err) {\n if (instanceName.includes('test') || instanceName.includes('feature')) {\n // eslint-disable-next-line no-console\n console.error('error while validating SSO session', err)\n }\n\n if (err instanceof BrowserAuthError && err.errorCode === 'monitor_window_timeout') {\n // we cannot determine either way if the session is still active, so swallow the error\n // eslint-disable-next-line no-console\n console.warn('BrowserAuthError: monitor_window_timeout')\n } else {\n return false\n }\n }\n}\n","import axios from 'axios'\nimport { getCurrentToken, refreshToken } from './authentication'\nimport { store } from '../store'\nimport { clearUser } from '../actions/userActions'\nimport { type IAuthToken } from '../interfaces/IAuthToken'\n\nlet isRefreshing = false\nlet isReloading = false\nlet refreshSubscribers: ((token: IAuthToken) => void)[] = []\n\nexport const API_URL = `${process.env.KLUBBLE_API_BASE_PATH}/api/`\n\nconst subscribeTokenRefresh = (callback: (token: IAuthToken) => void) => {\n refreshSubscribers.push(callback)\n}\n\nconst onRefreshed = (token: IAuthToken) => {\n refreshSubscribers.forEach((callback) => callback(token))\n refreshSubscribers = []\n}\n\nconst createKlubbleAPI = () => {\n const axiosInstance = axios.create({ baseURL: API_URL })\n axiosInstance.defaults.headers.common['client-version'] = process.env.KLUBBLE_VERSION\n\n const authToken = getCurrentToken()\n if (authToken) {\n axiosInstance.defaults.headers.common.Authorization = `Bearer ${authToken.jwtToken}`\n }\n\n axiosInstance.interceptors.response.use(\n (response) => {\n const serverVersion = response.headers['server-version']\n if (process.env.KLUBBLE_RELOAD_ON_VERSION_MISMATCH === 'true' && !isReloading && serverVersion && serverVersion !== process.env.KLUBBLE_VERSION) {\n // eslint-disable-next-line no-console\n console.log(`Forwarding because server version is ${serverVersion} and client ${process.env.KLUBBLE_VERSION}...`)\n\n // hard refresh because we deteced a difference between versions\n const searchParams = new URLSearchParams(window.location.search)\n searchParams.set('version', serverVersion)\n isReloading = true\n window.location.search = searchParams.toString()\n }\n return response\n },\n (error) => {\n const originalRequest = error.config\n const currentToken = getCurrentToken()\n\n if (!originalRequest.retry && currentToken && (error.response?.status === 401 || error.response?.status === 403)) {\n const retryOrigReq = new Promise((resolve, reject) => {\n subscribeTokenRefresh((token) => {\n if (token) {\n originalRequest.retry = true\n originalRequest.headers.Authorization = `Bearer ${token.jwtToken}`\n resolve(axiosInstance.request(originalRequest))\n } else {\n reject(error)\n }\n })\n })\n\n if (!isRefreshing) {\n isRefreshing = true\n refreshToken().then((newToken) => {\n onRefreshed(newToken)\n }).catch(() => {\n refreshSubscribers = []\n }).finally(() => {\n isRefreshing = false\n })\n }\n\n return retryOrigReq\n }\n\n if (!currentToken) {\n clearUser()(store.dispatch)\n }\n\n return Promise.reject(error)\n },\n )\n\n return axiosInstance\n}\n\nexport const klubbleAPI = createKlubbleAPI()\n\nexport interface ApiResult {\n success: boolean\n message: string\n data: T\n}\n\nexport type ApiFormResult = ApiResult & {\n errors: { [key in keyof TFormInputs]: string }\n}\n","import { PuzzleInfoResponse } from 'client/player/js/actions/gameInfoActions'\nimport { FinishedPuzzle } from 'client/types/FinishedPuzzle'\nimport { ApiResult, klubbleAPI } from './common'\n/*\n * gameEvents.ts defines endpoints for sending game status events\n * to the backend like:\n * 'puzzle started', 'timer resumed', 'puzzle solved'\n *\n * */\n\nexport const startPuzzle = async (klubblePuzzleId: number, isOpenForGameRoom = false): Promise => {\n const res = await klubbleAPI.post('/Puzzle/startPuzzle', {\n klubblePuzzleId,\n isOpenForGameRoom,\n })\n\n if (!res.data.success) {\n throw new Error(res.data.message)\n }\n\n return res.data\n}\n\nexport const finishPuzzle = async (klubblePuzzleId: number, totaltime: number): Promise => {\n const { data: response } = await klubbleAPI.post>('/Puzzle/finishpuzzle', { klubblePuzzleId, totaltime })\n\n if (!response.success) {\n throw new Error(response.message)\n }\n\n return response.data\n}\n","import { klubbleAPI, ApiResult } from 'client/api/common'\nimport { EntitySettings } from 'client/hooks/useConfig'\n\ntype QrGameResponse = ApiResult<{\n startPuzzleResponse: {\n externalPuzzleId: string\n klubblePuzzleId: number\n puzzleTypeNameKey: string\n puzzleTypeId: string\n }\n shareLink: {\n shareLinkShortUrl: string\n shareLink: string\n }\n}>\n\nconst getQRGameForLocation = async (locationGuid: string, puzzlesClientId: EntitySettings['puzzlesClientId']) => {\n const { data: response } = await klubbleAPI.post(`Puzzle/getCurrentGameForLocation?locationGuid=${locationGuid}`, {\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.success) {\n throw new Error(response.message)\n } else {\n const {\n externalPuzzleId, klubblePuzzleId, puzzleTypeNameKey, puzzleTypeId,\n } = response.data.startPuzzleResponse\n const {\n shareLink,\n } = response.data.shareLink\n\n const playerParams = {\n gametype: puzzleTypeNameKey,\n puzzleid: externalPuzzleId,\n customerid: puzzlesClientId,\n klubblePuzzleId: `${klubblePuzzleId}`,\n puzzleTypeId,\n }\n\n return { shareLink, playerParams }\n }\n}\n\nexport default getQRGameForLocation\n","import * as Sentry from '@sentry/browser'\nimport { type LanguageCode } from 'common_packages/assets/js/types/locale'\nimport { klubbleAPI } from './common'\n\nexport const getAll = async (language: LanguageCode, abortController: AbortController) => {\n try {\n const res = await klubbleAPI.get(`languagetext/getalltexts?lang=${language}`, { signal: abortController?.signal })\n if (res.status === 200) {\n return res.data\n }\n } catch (e) {\n Sentry.captureMessage('error getting all texts', { extra: { statusCode: e.response?.status } })\n }\n return {}\n}\n","export enum AppDisplayModes {\n browserTab = 'BROWSER_TAB',\n standaloneAndroid = 'STANDALONE_ANDROID',\n standaloneIOS = 'STANDALONE_IOS',\n}\n\nexport default AppDisplayModes\n","const DEFAULT_LOCALE = 'nl-NL'\nexport default DEFAULT_LOCALE\n","export const extendedTrial = 'extended-trial'\n","import { LOGIC, WORDS } from './puzzleMainType'\n\nexport const all = 'all'\nexport type PuzzleFilter1 = typeof LOGIC | typeof WORDS | typeof all\n","import { PuzzleFormat } from './puzzleFormat'\n\nexport const RECENT = 'recent'\nexport const FAVORITE = 'favorite'\nexport const PLAY_TOGETHER = 'playTogether'\n\nexport type PuzzleFilter2 = typeof FAVORITE | PuzzleFormat | string | typeof RECENT | typeof PLAY_TOGETHER\n","export const CLASSIC = 'Classic'\nexport const MINI = 'Mini'\n\nexport type PuzzleFormat = typeof CLASSIC | typeof MINI\n","export const LOGIC = 'Logic'\nexport const WORDS = 'Words'\n\nexport type PuzzleMainType = typeof LOGIC | typeof WORDS\n","export enum translationGroups {\n accountPage = 'page-account',\n achievements = 'achievements',\n addFriend = 'add-friend',\n addHomescreenInfo = 'add-homescreen-info',\n api = 'api',\n assist = 'assist',\n brainpoints = 'brainpoints',\n breadcrumbs = 'breadcrumbs',\n calendarPage = 'page-calendar',\n clueBar = 'clue-bar',\n common = 'common',\n dailyDosePage = 'daily-dose-page',\n dictionary = 'dictionary',\n difficulty = 'difficulty',\n drawer = 'drawer',\n endscreenPage = 'page-endscreen',\n error = 'error',\n expression = 'expression',\n footer = 'footer',\n form = 'form',\n friendStatus = 'friend-status',\n fullscreen = 'fullscreen',\n gameroomMessages = 'gameroom-messages',\n gridToast = 'grid-toast',\n homePage = 'page-home',\n invite = 'invite',\n invoice = 'invoice',\n startGame = 'start-game',\n landingPage = 'page-landing',\n loginPage = 'page-login',\n months = 'months',\n mistakes = 'mistakes',\n navigation = 'navigation',\n onboarding = 'onboarding',\n pageTitle = 'page-title',\n paymentCompletePage = 'payment-complete-page',\n paymentInputPage = 'payment-input-page',\n puzzle = 'puzzle',\n puzzlePlayer = 'puzzle-player',\n puzzlePack = 'puzzle-pack',\n puzzleInstructions = 'puzzle-instructions',\n puzzlePage = 'page-puzzles',\n puzzlePackTypesPage = 'page-puzzle-pack-types',\n puzzlePackTypePage = 'page-puzzle-pack-type',\n puzzleTags = 'puzzle-tags',\n qrGame = 'qr-game',\n rotateScreen = 'rotate-screen',\n searchBar = 'search-bar',\n sharePuzzle = 'share-puzzle',\n shareResult = 'share-result',\n startLightTrial = 'start-light-trial',\n statsPage = 'page-stats',\n subscriptions = 'subscriptions',\n usp = 'usp',\n weekDays = 'week-days'\n}\n\nexport default translationGroups\n","import { createContext } from 'react'\n\nconst PWAInstallContext = createContext(null)\nexport default PWAInstallContext\n","import { createContext } from 'react'\n\nexport type TranslationContextProps = {\n translationsSet: boolean\n getTranslation: (group: string, name: string | number, data?: { [key: string]: string | number }) => string\n getRawTranslation: (group: string, name: string | number, data?: { [key: string]: string | number }) => string\n}\n\nconst TranslationContext = createContext(null)\n\nexport default TranslationContext\n","export enum Button {\n default = 'default',\n active= 'active',\n playing = 'playing',\n played = 'played',\n spelled = 'spelled',\n}\n","export enum DailyDoseEnum {\n DAILY_DOSE = 'DAILY_DOSE',\n DOUBLE_DOSE = 'DOUBLE_DOSE',\n MEGA_DOSE = 'MEGA_DOSE',\n ULTRA_DOSE = 'ULTRA_DOSE',\n EPIC_DOSE = 'EPIC_DOSE',\n}\n","export enum Role {\n anonymous = 'ANONYMOUS',\n free = 'FREE',\n identified = 'IDENTIFIED',\n light = 'LIGHT',\n premium = 'PREMIUM',\n puzzlePackOwner = 'PUZZLEPACKOWNER',\n qrHost = 'QRHOST'\n}\n","export enum SubscriptionType {\n light = 'LIGHT',\n lightTrial = 'LIGHTTRIAL',\n extendedTrial = 'EXTENDEDTRIAL',\n premium = 'PREMIUM'\n}\n","export enum puzzleSortingEnum {\n alphabetical = 'alphabetical',\n popularity = 'popularity'\n}\n","import { Role } from 'client/enums/Role'\nimport { StoreState } from 'client/store'\nimport { useMemo } from 'react'\nimport { useSelector } from 'react-redux'\n\ninterface Abilities {\n canInvite: boolean\n canUseDailyDose: boolean\n canSeeAccount: boolean\n canSeeRecentPuzzles: boolean\n canSeePrivateFooterLinks: boolean\n canPlayDailyPuzzles: boolean\n canGiftPuzzle: boolean\n canGiveFeedback: boolean\n canSeeMenu: boolean\n canSeePuzzlePlayerBreadcrumbs: boolean\n canSeeCollapsedDailyDoseEndscreen: boolean\n canFavoritePuzzles: boolean\n canPlayPremiumOnlyPuzzles: boolean\n hasSubscription: boolean\n hasLightSubscriptionOnly: boolean\n hasPremiumSubscription: boolean\n isAnonymous: boolean\n isIdentified: boolean\n isPuzzlePackOwner: boolean\n isQRHost: boolean\n}\n\nconst useAbilities = (): Abilities => {\n const roles = useSelector((state) => state.user?.roles)\n return useMemo(() => getAbilities(roles || []), [roles])\n}\n\nexport default useAbilities\n\nexport const getAbilities = (roles: Role[]): Abilities => ({\n canInvite: roles.includes(Role.light) || roles.includes(Role.premium),\n canUseDailyDose: !!roles.length && !roles.includes(Role.anonymous),\n canSeeAccount: !!roles.length && !roles.includes(Role.anonymous),\n canSeeRecentPuzzles: !!roles.length && !roles.includes(Role.anonymous),\n canSeePrivateFooterLinks: roles.includes(Role.light) || roles.includes(Role.premium) || roles.includes(Role.puzzlePackOwner),\n canPlayDailyPuzzles: roles.includes(Role.light) || roles.includes(Role.premium),\n canGiftPuzzle: roles.includes(Role.light) || roles.includes(Role.premium),\n canGiveFeedback: roles.includes(Role.light) || roles.includes(Role.premium),\n canSeeMenu: !!roles.length && !roles.includes(Role.anonymous),\n canSeePuzzlePlayerBreadcrumbs: !!roles.length && !roles.includes(Role.anonymous),\n canSeeCollapsedDailyDoseEndscreen: roles.includes(Role.anonymous),\n canFavoritePuzzles: roles.includes(Role.light) || roles.includes(Role.premium) || roles.includes(Role.puzzlePackOwner),\n canPlayPremiumOnlyPuzzles: roles.includes(Role.premium),\n hasSubscription: roles.includes(Role.light) || roles.includes(Role.premium),\n hasLightSubscriptionOnly: roles.includes(Role.light) && !roles.includes(Role.premium),\n hasPremiumSubscription: roles.includes(Role.premium),\n isAnonymous: roles.includes(Role.anonymous),\n isIdentified: roles.includes(Role.identified),\n isPuzzlePackOwner: roles.includes(Role.puzzlePackOwner),\n isQRHost: roles.includes(Role.qrHost),\n})\n","import { StoreState } from 'client/store'\nimport { getActiveSubscription } from 'client/utilities/getActiveSubscription'\nimport { Subscription } from 'client/reducers/userReducer'\nimport { useSelector } from 'react-redux'\n\nconst useActiveSubscription = (): Subscription => {\n const subscriptions = useSelector((state) => state.user?.data?.subscriptions) ?? []\n return getActiveSubscription(subscriptions)\n}\n\nexport default useActiveSubscription\n","import { prependWithMessage, shouldSwallowException } from 'client/utilities/error'\nimport { useCallback, useState } from 'react'\n\n// Use this to throw new Errors from within an async function, as the Errorboundary doesnt pick up on errors thrown from within async fucntions\nexport const useAsyncError = () => {\n const [error, setError] = useState()\n if (error) {\n if (!shouldSwallowException(error)) {\n throw error\n }\n }\n\n const throwError = useCallback((e: Error | string, message?: string) => {\n if (message != null) {\n if (e instanceof Error) {\n prependWithMessage(e, message)\n } else {\n throwError(new Error(e), message)\n return\n }\n\n setError(e)\n }\n }, [])\n\n return throwError\n}\n","import { useEffect, useRef } from 'react'\nimport 'broadcastchannel-polyfill'\n\n// Use a BroadcastChannel to dispatch messages to multiple browser tabs\nexport const useBroadcastChannel = (channel: string) => {\n const bc = useRef(new BroadcastChannel(channel))\n\n useEffect(() => {\n const instance = bc.current\n return () => {\n instance.close()\n }\n }, [channel])\n\n return bc.current\n}\n","import { useState, useEffect } from 'react'\nimport { klubbleAPI } from '../api/common'\nimport useDebounce from './useDebounce'\nimport { useAsyncError } from './useAsyncError'\n\ntype Props = {\n username: string\n userId?: string\n usernameStored?: string\n}\n\nconst useCheckUsernameAvailable = ({ username, userId, usernameStored }: Props) => {\n const [usernameAvailable, setUsernameAvailable] = useState(true)\n const debouncedUsername = useDebounce({ value: username })\n const throwError = useAsyncError()\n\n useEffect(() => {\n let cancelRequest = false\n async function checkUsernameAvailable() {\n let params = `username=${debouncedUsername}`\n if (userId) {\n params += `&userid=${userId}`\n }\n try {\n const res = await klubbleAPI.get(\n `auth/isusernameavailable?${params}`,\n )\n if (!cancelRequest) {\n setUsernameAvailable(res?.data)\n }\n } catch (e) {\n throwError(e, 'Error getting username')\n }\n }\n\n if (debouncedUsername?.length && debouncedUsername !== usernameStored) {\n checkUsernameAvailable()\n } else {\n setUsernameAvailable(true)\n }\n return () => {\n cancelRequest = true\n }\n }, [debouncedUsername, usernameStored, userId, throwError])\n\n return usernameAvailable\n}\n\nuseCheckUsernameAvailable.defaultProps = {\n userId: null,\n usernameStored: '',\n}\n\nexport default useCheckUsernameAvailable\n","import { useState, useEffect } from 'react'\n\ntype Props = {\n value: string\n delay?: number\n}\n\n// todo: replace with packages/common_packages/assets/js/hooks/useDebouncedState.ts\nconst useDebounce = ({ value, delay = 200 }: Props): any => {\n const [debouncedValue, setDebouncedValue] = useState(value)\n useEffect(\n () => {\n const handler = setTimeout(() => {\n setDebouncedValue(value)\n }, delay)\n\n return () => {\n clearTimeout(handler)\n }\n },\n [value, delay],\n )\n\n return debouncedValue\n}\n\nexport default useDebounce\n","import { useSelector } from 'react-redux'\nimport { type StoreState } from 'client/store'\nimport { type ConfigState } from 'client/reducers/configReducer'\nimport { type LanguageCode } from 'common_packages/assets/js/types/locale'\n\nconst LIGHT_TRIAL_SUFFIX = '-lighttrial'\n\nexport type EntitySettings = {\n id: number\n name: 'klubble_nl' | 'klubble_se' | 'klubble_fr'\n publicUrl: string\n platformUrl: string\n locale: string // [ISO 639-1]-[ISO 3166-1], eg \"sv-SE\"\n language: LanguageCode // ISO 639-1\n currency: CurrencySettings\n sso: SSOSettings\n defaultCountry: CountrySettings\n tags: Tag[]\n puzzlesClientId: 'klubblenl' | 'klubblese' | 'klubblefr'\n}\n\nexport type Tag = {\n id: number\n tagLangKey: string\n}\n\nexport type CurrencySettings = {\n id: number\n currencyCode: string\n name: string\n}\n\nexport type CountrySettings = {\n id: number\n code: string\n vatPercentage: string\n name: string\n}\n\nexport type SSOSettings = {\n signUpSignInPolicy: string\n domain: string\n clientId: string\n instance: string\n}\n\nexport type Config = {\n isLightTrialEnabled: boolean\n lightTrialSuffix: string\n lightTrialDays: number\n lightTrialDaysText: string\n extendedTrialDays: number\n extendedTrialDaysText: string\n entity: EntitySettings\n}\n\n/**\n * This hook returns the configuration settings currently set in the admin\n */\nconst useConfig = (): Config => {\n const config = useSelector((store) => store.config)\n\n if (!config || !config.entity) {\n return {\n isLightTrialEnabled: false,\n lightTrialDays: undefined,\n lightTrialDaysText: '',\n lightTrialSuffix: '',\n extendedTrialDays: undefined,\n extendedTrialDaysText: undefined,\n entity: undefined,\n }\n }\n\n return {\n isLightTrialEnabled: config.isFreeTrialMode,\n lightTrialDays: config.freeTrialDays,\n lightTrialDaysText: `${config.freeTrialDays ?? ''}`,\n lightTrialSuffix: config.isFreeTrialMode ? LIGHT_TRIAL_SUFFIX : '',\n extendedTrialDays: config.extendedTrialDays,\n extendedTrialDaysText: `${config.extendedTrialDays ?? ''}`,\n entity: config.entity,\n }\n}\nexport default useConfig\n","import { useContext, useMemo } from 'react'\nimport translationGroups from 'client/constants/translationGroups'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport countryCodes from 'assets/countries/codes.json'\n\nconst useCountryOptions = () => {\n const { getRawTranslation } = useContext(TranslationContext)\n\n return useMemo(() => {\n // Create a map with a translation for each country\n const translationMap = countryCodes.reduce((acc, value) => {\n acc.set(value, getRawTranslation(translationGroups.form, `country-option-${value}`))\n return acc\n }, new Map())\n\n // Sort the options based on their translation\n const optionsSorted = Array.from(translationMap.keys())\n optionsSorted.sort((keyA, keyB) => {\n if (translationMap.get(keyA) < translationMap.get(keyB)) {\n return -1\n }\n if (translationMap.get(keyA) > translationMap.get(keyB)) {\n return 1\n }\n return 0\n })\n\n return {\n translationMap,\n optionsSorted,\n }\n }, [getRawTranslation])\n}\n\nexport default useCountryOptions\n","import DEFAULT_LOCALE from 'client/constants/locale'\nimport { useCallback } from 'react'\nimport useConfig from './useConfig'\n\nexport const useCurrencyFormatters = () => {\n const config = useConfig()\n const locale = config?.entity?.locale ?? DEFAULT_LOCALE\n\n const formatCurrency = useCallback((amount = 0, currencyCode = config?.entity?.currency.currencyCode) => {\n if (!currencyCode) {\n return amount\n }\n return new Intl.NumberFormat(locale, { style: 'currency', currency: currencyCode }).format(amount)\n }, [config?.entity?.currency.currencyCode, locale])\n\n return {\n formatCurrency,\n }\n}\n","import DEFAULT_LOCALE from 'client/constants/locale'\nimport { useCallback } from 'react'\nimport useConfig from './useConfig'\nimport { useAsyncError } from './useAsyncError'\n\nexport const useDateFormatters = () => {\n const config = useConfig()\n const locale = config?.entity?.locale ?? DEFAULT_LOCALE\n const throwError = useAsyncError()\n\n const formatDate = useCallback((date: Date, options: Intl.DateTimeFormatOptions = {}) => {\n try {\n return new Intl.DateTimeFormat(locale, options).format(date)\n } catch (e) {\n throwError(e, 'Error trying to format an invalid date')\n return '' // satisfy the linter\n }\n }, [locale, throwError])\n\n return {\n formatDate,\n }\n}\n","import {\n useCallback, useContext, useEffect, useState,\n} from 'react'\nimport { useDispatch } from 'react-redux'\nimport translationGroups from 'client/constants/translationGroups'\nimport { addToast } from 'common_packages/assets/js/actions/uiActions'\nimport { toastTypes } from 'common_packages/assets/js/types/toastTypes'\nimport { klubbleAPI, ApiResult } from 'client/api/common'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport { setToken, logout } from 'client/api/authentication'\nimport { setUser } from '../actions/userActions'\nimport { IAuthToken } from '../interfaces/IAuthToken'\n\nexport const useLogin = () => {\n const translation = useContext(TranslationContext)\n const [errorToast, setErrorToast] = useState({ group: '', name: '' })\n const dispatch = useDispatch()\n\n // Make sure to only show the toast if the translations are available\n useEffect(() => {\n if (translation.translationsSet && errorToast.group && errorToast.name) {\n dispatch(addToast({\n message: translation.getTranslation(errorToast.group, errorToast.name),\n type: toastTypes.ERROR,\n }))\n }\n }, [dispatch, errorToast, translation])\n\n const login = useCallback(async (email?: string, password?: string, sso?: boolean): Promise> => {\n try {\n let res\n if (email && password) {\n const payload = JSON.stringify({ email, password })\n res = await klubbleAPI.post>('Auth/authenticate', payload, {\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n } else if (sso && process.env.KLUBBLE_LOGIN_SSO_ENABLED === 'true') {\n res = await klubbleAPI.get>('Auth/loginSSO', { withCredentials: true })\n } else {\n res = await klubbleAPI.get>('Auth/loginguest')\n }\n if (res.data.success) {\n const authToken = res.data.data\n setToken(authToken)\n await setUser()(dispatch)\n } else if (sso && process.env.KLUBBLE_LOGIN_SSO_ENABLED === 'true') {\n logout(false, res.data.message)\n } else {\n setErrorToast({ group: translationGroups.form, name: res.data.message })\n }\n return res.data\n } catch (error) {\n if (error.message === 'sso-login-failed') {\n setErrorToast({ group: translationGroups.api, name: 'sso-invalid-user-entity' })\n } else {\n setErrorToast({ group: translationGroups.api, name: 'something-went-wrong' })\n }\n return null\n }\n }, [dispatch])\n return login\n}\n","import {\n useCallback, useEffect, useRef, useState,\n} from 'react'\nimport { klubbleAPI } from 'client/api/common'\nimport { SubscriptionType } from 'client/enums/SubscriptionType'\nimport { PaymentPeriod } from 'client/pages/payment_input/PaymentStepsComponent'\nimport { useAsyncError } from './useAsyncError'\n\nexport type Currency = 'EUR' | 'SEK'\n\nexport type PriceModelState = {\n paymentPeriodId: PaymentPeriod\n amount: number,\n currency: Currency,\n discountPercentage: number\n}\n\nexport const usePriceModels = () => {\n const abortController = useRef(null)\n\n const [priceModels, setPriceModels] = useState([])\n const throwError = useAsyncError()\n\n useEffect(() => {\n return () => {\n abortController.current?.abort()\n }\n }, [])\n\n const getAllPriceModels = useCallback(async () => {\n if (!priceModels.length) {\n try {\n abortController.current = new AbortController()\n const { data } = await klubbleAPI.get('Auth/getavailablepricemodels', { signal: abortController.current.signal })\n setPriceModels(data)\n return data\n } catch (e) {\n throwError(e, 'Error getting available price models')\n }\n }\n return priceModels\n }, [priceModels, throwError])\n\n const getPriceModel = useCallback(async (subscriptionType: SubscriptionType, paymentPeriodId: PaymentPeriod) => {\n if (subscriptionType !== SubscriptionType.premium) {\n return {}\n }\n\n let priceModel\n\n if (!priceModels?.length) {\n const data = await getAllPriceModels()\n priceModel = data.find((p) => p.paymentPeriodId === paymentPeriodId)\n } else {\n priceModel = priceModels.find((p) => p.paymentPeriodId === paymentPeriodId)\n }\n\n return {\n amount: priceModel?.amount,\n currency: priceModel?.currency,\n discountPercentage: priceModel?.discountPercentage,\n }\n }, [getAllPriceModels, priceModels])\n\n return {\n getAllPriceModels,\n getPriceModel,\n }\n}\n","import { useMemo } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport * as puzzleDataActions from 'klubble/app/client/actions/puzzleDataActions'\nimport { type StoreState } from 'client/store'\nimport { type PuzzlePackType } from 'client/types/PuzzlePackType'\n\nconst usePuzzlePackTypeFavorite = (puzzlePackTypeId: number) => {\n const puzzlePackTypes = useSelector((state) => state.puzzleData?.puzzlePackTypes)\n const puzzlePackType = useMemo(() => puzzlePackTypes?.find((ppt) => ppt.id === puzzlePackTypeId), [puzzlePackTypeId, puzzlePackTypes])\n const isFavorite = puzzlePackType?.isFavorite ?? false\n const dispatch = useDispatch()\n\n const toggleIsFavorite = () => {\n dispatch(puzzleDataActions.setFavoritePuzzlePackType({ puzzlePackTypeId, isFavorite: !isFavorite }))\n }\n\n return { isFavorite, toggleIsFavorite }\n}\n\nexport default usePuzzlePackTypeFavorite\n","import { Level } from 'client/interfaces/IPuzzleCalendar'\nimport { useMemo } from 'react'\nimport usePuzzleType from './usePuzzleType'\n\n/**\n * Returns the selected level ('basic', 'medium', etc) of the puzzle type.\n * @param puzzleTypeId\n * @returns\n */\nconst usePuzzleSelectedLevel = (puzzleTypeId: number): Level | '' => {\n const puzzleType = usePuzzleType(puzzleTypeId)\n\n const selectedLevel = useMemo(() => {\n if (!puzzleType) {\n return ''\n }\n const { selectedLevel: level, levels = [] } = puzzleType\n if (level && levels.includes(level)) {\n return level\n }\n return levels[0] || ''\n }, [puzzleType])\n return selectedLevel\n}\n\nexport default usePuzzleSelectedLevel\n","import { StoreState } from 'client/store'\nimport { PuzzleType } from 'client/types/PuzzleType'\nimport { useMemo } from 'react'\nimport { useSelector } from 'react-redux'\n\nconst usePuzzleType = (puzzleTypeId: number): PuzzleType | undefined => {\n const puzzleTypes = useSelector((state) => state.puzzleData?.puzzleTypes)\n return useMemo(() => puzzleTypes?.find((pT) => pT.puzzleTypeId === puzzleTypeId), [puzzleTypeId, puzzleTypes])\n}\n\nexport default usePuzzleType\n","import { useDispatch } from 'react-redux'\nimport * as puzzleDataActions from 'klubble/app/client/actions/puzzleDataActions'\nimport usePuzzleType from './usePuzzleType'\n\nconst usePuzzleTypeFavorite = (puzzleTypeId: number, miniPuzzleTypeId?: number) => {\n const puzzleType = usePuzzleType(puzzleTypeId)\n const isFavorite = puzzleType?.isFavorite ?? false\n const dispatch = useDispatch()\n\n const toggleIsFavorite = (usePreviousFavorite?: boolean) => {\n // Use the previous favorite state when this function gets stored inside a state and doesn't get the updated isFavorite value\n const setFavorite = usePreviousFavorite ? isFavorite : !isFavorite\n const saveActions = [\n dispatch(puzzleDataActions.savePuzzleSettings({\n puzzleTypeId,\n isFavorite: setFavorite,\n })),\n ]\n if (miniPuzzleTypeId) {\n saveActions.push(dispatch(puzzleDataActions.savePuzzleSettings({\n puzzleTypeId: miniPuzzleTypeId,\n isFavorite: setFavorite,\n })))\n }\n return Promise.all(saveActions)\n }\n\n return { isFavorite, toggleIsFavorite }\n}\n\nexport default usePuzzleTypeFavorite\n","import { useCallback } from 'react'\nimport { isDesktop } from 'react-device-detect'\nimport useConfig from './useConfig'\n\nexport const usePuzzleTypeImageUrls = () => {\n const config = useConfig()\n const entityImagesPath = `/entity/${config?.entity?.name ?? 'klubble_nl'}/images`\n\n const getBackgroundUrl = useCallback((puzzleNameLangKey: string) => {\n let filename = puzzleNameLangKey\n switch (puzzleNameLangKey) {\n case 'kdoku-mini': {\n if (isDesktop) {\n filename = puzzleNameLangKey.slice(0, puzzleNameLangKey.indexOf('-'))\n }\n break\n }\n default: break\n }\n return `${entityImagesPath}/pzl-typ-backgrounds/${filename}.png`\n }, [entityImagesPath])\n\n const getIconUrl = useCallback((puzzleNameLangKey: string) => {\n return `${entityImagesPath}/pzl-typ-icn/${puzzleNameLangKey}.png`\n }, [entityImagesPath])\n\n return {\n getBackgroundUrl,\n getIconUrl,\n }\n}\n","import { useDispatch, useSelector } from 'react-redux'\nimport {\n useCallback,\n useContext,\n useMemo,\n} from 'react'\nimport { type UserData } from 'client/reducers/userReducer'\nimport { type StoreState } from 'client/store'\nimport getQueryParam, { queryParams } from 'common_packages/assets/js/utilities/getQueryParam'\nimport * as timerActions from 'common_packages/assets/js/actions/timerActions'\nimport * as uiActions from 'common_packages/assets/js/actions/uiActions'\nimport { type ApiResult, klubbleAPI } from 'client/api/common'\nimport { type DrawerType, drawerTypes } from 'common_packages/assets/js/types/drawerTypes'\nimport { isMobile } from 'common_packages/assets/js/utilities/devices'\nimport { formatTimeFromSeconds } from 'common_packages/assets/js/utilities/timer/formatTimeFromSeconds'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport translationGroups from 'client/constants/translationGroups'\nimport { type FinishedPuzzle } from 'client/types/FinishedPuzzle'\nimport { toastTypes } from 'common_packages/assets/js/types/toastTypes'\nimport { MINI } from 'client/constants/puzzleFormat'\n\ntype ShareLinkResponse = ApiResult<{ shareLink: string }>\n\nconst useShareDialog = () => {\n const dispatch = useDispatch()\n const { getRawTranslation } = useContext(TranslationContext)\n const { userName } = useSelector((state) => state.user?.data) || {}\n const klubblePuzzleId = getQueryParam(queryParams.KLUBBLE_PUZZLE_ID)\n\n const {\n nameLangKey, date: dateString, format, time, scoringBadges, shareTemplateTranslationKey, tries, visual,\n } = useSelector((state) => state.puzzleData?.finishedPuzzle) || {}\n\n const puzzleName = useMemo(() => {\n return `${getRawTranslation(translationGroups.puzzle, nameLangKey)}${format === MINI ? ` ${getRawTranslation(translationGroups.puzzleTags, 'mini')}` : ''}`\n }, [format, getRawTranslation, nameLangKey])\n\n const dateFormatted = useMemo(() => {\n const date = new Date(dateString)\n return `${date.getDate()}/${date.getMonth() + 1}/${date?.getFullYear()}`\n }, [dateString])\n\n const shareResultText = useMemo(() => {\n const points = String(scoringBadges?.find((b) => b.scoreType === 'total').score)\n\n const shareText = getRawTranslation(translationGroups.shareResult, shareTemplateTranslationKey, {\n puzzle: puzzleName,\n date: dateFormatted,\n time: formatTimeFromSeconds(time),\n points,\n tries,\n visual,\n })\n\n return shareText\n }, [scoringBadges, getRawTranslation, shareTemplateTranslationKey, puzzleName, dateFormatted, time, tries, visual])\n\n const openShareDialog = useCallback(async (shareType: 'gift' | 'share-result' | 'mp-invite', title, text = '') => {\n try {\n const payload = JSON.stringify({\n shareType,\n userNameInvitee: userName,\n klubblePuzzleId,\n })\n const { data: response } = await klubbleAPI.post('puzzle/getsharelink', payload, {\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n\n if (!response.success) {\n throw new Error(response.message)\n }\n\n let { shareLink } = response.data\n\n if (process.env.KLUBBLE_REPLACE_SHARE_LINK === 'true') {\n // when running locally, use current location (ie: 'localhost')\n\n const regex = /^https:\\/\\/(app|jeux|play)\\.(test|feature|uat)\\.(klubble\\.com|sportcerebral\\.com|denksport\\.com|tankesport\\.se)/\n shareLink = shareLink\n .replace(regex, window.location.origin)\n }\n\n // Not all browsers support the `share` api\n if (navigator.share && isMobile) {\n navigator.share({\n title,\n text: text.replace('{link}', shareLink),\n }).catch(() => {\n // eslint-disable-next-line no-console\n console.warn('User cancelled share API.')\n }).finally(() => {\n if (shareType === 'mp-invite') {\n dispatch(timerActions.resumeTimer())\n }\n })\n } else {\n // fallback\n let fallbackDrawer: DrawerType\n\n if (shareType === 'gift') {\n fallbackDrawer = drawerTypes.GIFT_PUZZLE\n } else if (shareType === 'share-result') {\n fallbackDrawer = drawerTypes.SHARE_RESULT\n } else if (shareType === 'mp-invite') {\n fallbackDrawer = drawerTypes.INVITE_PUZZLE\n }\n\n dispatch(uiActions.setDrawer({ drawer: fallbackDrawer, drawerData: shareLink }))\n }\n } catch {\n dispatch(uiActions.addToast({\n message: getRawTranslation(translationGroups.sharePuzzle, 'something-went-wrong'),\n type: toastTypes.ERROR,\n }))\n }\n }, [dispatch, userName, getRawTranslation, klubblePuzzleId])\n\n return { openShareDialog, shareResultText }\n}\n\nexport default useShareDialog\n","import { useCallback } from 'react'\nimport { CheckoutType, PaymentPeriod } from 'client/pages/payment_input/PaymentStepsComponent'\nimport { usePuzzlePacks } from 'client/pages/puzzle_packs/hooks/usePuzzlePacks'\nimport { SubscriptionType } from 'client/enums/SubscriptionType'\nimport { usePriceModels } from './usePriceModels'\nimport useConfig from './useConfig'\n\ntype CheckoutEventType = 'begin_checkout' | 'purchase'\n\ntype CheckoutEventSubscriptionType = {\n event: CheckoutEventType,\n checkoutType: Extract,\n paymentPeriodId: PaymentPeriod,\n sessionId: string,\n}\n\ntype CheckoutEventPuzzlePackType = {\n event: CheckoutEventType,\n checkoutType: Extract,\n puzzlePackId: number,\n sessionId: string,\n}\n\ntype CheckoutEvent = CheckoutEventSubscriptionType | CheckoutEventPuzzlePackType\n\ntype CheckoutItemType = {\n item_name: string | CheckoutType,\n price: number,\n quantity: number,\n item_category: string,\n item_category_2: string,\n item_variant: string,\n transaction_id?: string,\n}\n\nexport const useTrackCheckout = () => {\n const { getPriceModel } = usePriceModels()\n const { getPuzzlePackById, getPuzzlePackTypeById } = usePuzzlePacks()\n const config = useConfig()\n\n const trackCheckoutEvent = useCallback(async (checkoutEvent: CheckoutEvent) => {\n let amount: number\n let currency: string\n let item: CheckoutItemType\n\n const { event, checkoutType, sessionId } = checkoutEvent\n\n if (checkoutType === 'puzzle-pack') {\n const puzzlePack = getPuzzlePackById(checkoutEvent.puzzlePackId)\n amount = puzzlePack?.price\n currency = config.entity?.currency?.currencyCode\n item = {\n item_name: puzzlePack?.displayName,\n price: amount,\n quantity: 1,\n item_category: 'puzzle-pack',\n item_category_2: getPuzzlePackTypeById(puzzlePack?.puzzlePackTypeId)?.name,\n item_variant: '',\n }\n } else {\n ({ amount, currency } = await getPriceModel(SubscriptionType.premium, checkoutEvent.paymentPeriodId))\n item = {\n item_name: checkoutType,\n price: amount,\n quantity: 1,\n item_category: 'subscription',\n item_category_2: '',\n item_variant: checkoutEvent.paymentPeriodId ? 'yearly' : 'monthly',\n }\n }\n\n if (event === 'purchase') {\n item = { ...item, transaction_id: sessionId }\n }\n\n if (!amount) {\n return Promise.resolve()\n }\n\n window.dataLayer.push({\n event,\n currency,\n value: amount,\n ecommerce: { items: [item] },\n })\n\n return Promise.resolve()\n }, [getPriceModel, getPuzzlePackById, getPuzzlePackTypeById, config])\n\n return {\n trackCheckoutEvent,\n }\n}\n","import { useLayoutEffect, useState } from 'react'\n\nconst useWindowPosition = () => {\n const [scrollPosition, setPosition] = useState(0)\n useLayoutEffect(() => {\n let timeoutId = null\n function updatePosition() {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => setPosition(window.pageYOffset), 10)\n }\n window.addEventListener('scroll', updatePosition)\n\n return () => window.removeEventListener('scroll', updatePosition)\n }, [])\n return scrollPosition\n}\n\nexport default useWindowPosition\n","import React, { useContext } from 'react'\nimport { Link, useHistory } from 'react-router-dom'\nimport translationGroups from 'client/constants/translationGroups'\nimport RoundedButtonComponent from 'client/pages/common/components/buttons/RoundedButtonComponent'\nimport * as auth from 'client/api/authentication'\nimport TranslationContext from '../../../../contexts/TranslationContext'\nimport { accountPages } from '../../pages'\nimport AccountHeaderComponent from '../common/AccountHeaderComponent'\n\nconst AccountHomeComponent = () => {\n const { getTranslation } = useContext(TranslationContext)\n const { push } = useHistory()\n\n const handleLogout = (): void => {\n auth.logout()\n // when SSO is enabled the SSO provider handles this redirect\n if (process.env.KLUBBLE_LOGIN_SSO_ENABLED !== 'true') {\n push('/login')\n }\n }\n\n return (\n
\n \n
\n
\n {accountPages.map((page) => (\n \n \n
\n {getTranslation(translationGroups.navigation, page.key)}\n
\n
\n {getTranslation(translationGroups.accountPage, `${page.key}-description`)}\n
\n \n ))}\n
\n \n
\n
\n )\n}\n\nexport default AccountHomeComponent\n","import React, { useContext } from 'react'\nimport { withRouter } from 'react-router'\nimport { Switch, Route } from 'react-router-dom'\n\nimport useAbilities from 'client/hooks/useAbilities'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport translationGroups from 'client/constants/translationGroups'\nimport AccountHomeComponent from './home/AccountHomeComponent'\nimport AccountHeaderComponent from './common/AccountHeaderComponent'\nimport { accountPages } from '../pages'\n\n// Router for account pages\nconst AccountRoutesComponent = () => {\n const { canSeeAccount } = useAbilities()\n const { getTranslation } = useContext(TranslationContext)\n\n if (!canSeeAccount) {\n return (\n null\n )\n }\n return (\n
\n \n \n {accountPages.map((page) => (\n \n { !page.noHeader && (\n \n )}\n \n \n ))}\n \n
\n\n )\n}\n\nexport default withRouter(AccountRoutesComponent)\n","import React, { useEffect, useState, useContext } from 'react'\nimport { Redirect } from 'react-router'\nimport * as auth from 'client/api/authentication'\nimport translationGroups from 'client/constants/translationGroups'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport getParameterByName from 'common_packages/assets/js/utilities/getParameterByName'\n\nconst AccountLogOutComponent = () => {\n const [logoutInProgress, setLogoutInProgress] = useState(true)\n const { getTranslation } = useContext(TranslationContext)\n\n useEffect(() => {\n auth.logout(true)\n setLogoutInProgress(false)\n }, [])\n\n if (logoutInProgress) {\n return (\n
\n
\n

{getTranslation(translationGroups.loginPage, 'sso-logout-in-progress')}

\n
\n
\n )\n }\n\n return (\n \n )\n}\n\nexport default AccountLogOutComponent\n","/* other imports */\nimport React, { Suspense } from 'react'\nimport * as Sentry from '@sentry/react'\nimport { browserTracingIntegration } from '@sentry/react'\nimport { Provider } from 'react-redux'\nimport { PersistGate } from 'redux-persist/integration/react'\nimport {\n BrowserRouter as Router, Redirect, Switch, Route,\n} from 'react-router-dom'\nimport * as ReactDOM from 'react-dom'\n\n/* component imports */\nimport ToastsContainer from 'pages/common/containers/toasts/ToastsContainer'\nimport ManagePersistencyStorageSpaceComponent from 'pages/common/components/utility/ManagePersistencyStorageSpaceComponent'\nimport PlayerComponent from 'pages/player/components/PlayerComponent'\nimport PuzzlesContainer from 'pages/puzzles/containers/PuzzlesContainer'\nimport LayoutComponent from 'pages/common/components/LayoutComponent'\nimport DrawerContainer from 'pages/common/containers/DrawerContainer'\nimport PrivateRouteContainer from 'pages/common/containers/PrivateRouteContainer'\nimport PublicRouteComponent from 'pages/common/components/PublicRouteComponent'\n\nimport LoginComponent from 'pages/login/components/LoginComponent'\nimport OverlayContainer from 'pages/common/containers/OverlayContainer'\nimport UserDataContainer from 'pages/common/containers/UserDataContainer'\nimport ScrollTopComponent from 'pages/common/components/utility/ScrollTopComponent'\nimport UIManagerContainer from 'pages/common/containers/UIManagerContainer'\nimport StartGameByGuidComponent from 'pages/common/components/StartGameByGuidComponent'\nimport TranslationContextComponent from 'pages/common/components/context_providers/TranslationContextComponent'\nimport DailyDoseContainer from 'pages/daily_dose/containers/DailyDoseContainer'\nimport OnboardingPuzzlesComponent from 'pages/onboarding/components/OnboardingPuzzlesComponent'\nimport PaymentStepsComponent from 'client/pages/payment_input/PaymentStepsComponent'\nimport PaymentCompletePageComponent from 'pages/payment_complete/PaymentCompletePageComponent'\nimport HomeContainer from 'pages/home/containers/HomeContainer'\nimport PaymentRedirectComponent from './pages/payment_complete/PaymentRedirectComponent'\nimport LandingComponent from './pages/landing/components/LandingComponent'\nimport DataLayerTrackingComponent from './pages/common/components/tracking/DataLayerTrackingComponent'\nimport ErrorPageNotFoundComponent from './pages/common/pages/ErrorPageNotFoundComponent'\nimport DrawerContentJoinNowComponent from './pages/common/components/drawer/endscreen/DrawerContentJoinNowComponent'\nimport StartQRHostGameComponent from './pages/common/components/StartQRHostGameComponent'\nimport AccountRoutesComponent from './pages/account/components/AccountRoutesComponent'\nimport { extendedTrial } from './constants/paths'\nimport PuzzlePackTypesComponent from './pages/puzzle_packs/components/PuzzlePackTypesComponent'\nimport PuzzlePackTypeComponent from './pages/puzzle_packs/components/PuzzlePackTypeComponent'\nimport CommonApiResourcesComponent from './pages/common/components/resources/CommonApiResourcesComponent'\nimport ErrorExceptionComponent from './pages/common/pages/ErrorExceptionComponent'\nimport AccountFAQComponent from './pages/account/components/faq/AccountFAQComponent'\nimport AccountInformationContentComponent from './pages/account/components/information/AccountInformationContentComponent'\nimport ThemeProviderComponent from './pages/common/components/theme/ThemeProviderComponent'\nimport LoadingComponent from './pages/common/loading/LoadingComponent'\nimport StatsComponent from './pages/stats/StatsComponent'\nimport AccountLogOutComponent from './pages/account/components/AccountLogOutComponent'\nimport CalendarComponent from './pages/calendar/components/CalendarComponent'\nimport PaymentPageSuccessComponent from './pages/payment_complete/PaymentPageSuccessComponent'\nimport PaymentPageErrorComponent from './pages/payment_complete/PaymentPageErrorComponent'\nimport PaymentPagePendingComponent from './pages/payment_complete/PaymentPagePendingComponent'\nimport PWAEventsProvider from './pages/common/components/pwa/PWAEventsProvider'\n\n/* import styling */\nimport './assets/styles/main.scss'\nimport 'slick-carousel/slick/slick.css'\nimport 'slick-carousel/slick/slick-theme.css'\n\n/* redux imports */\nimport { store, persistor } from './store'\nimport LandingSSOLoginComponent from './pages/landing/components/LandingSSOLoginComponent'\n\ndeclare global {\n interface NodeModule {\n hot: {\n accept(dependencies: string[], callback: (updatedDependencies: string[]) => void): void;\n accept(dependency: string, callback: () => void): void;\n accept(errHandler?: (err: any) => void): void;\n }\n }\n}\n\nif (process.env.BUILD_ENV !== 'development') {\n const environment = process.env.BUILD_ENV\n\n // eslint-disable-next-line no-console\n console.log(`[🧩] Loaded Klubble version ${process.env.KLUBBLE_VERSION}`)\n\n Sentry.init({\n dsn: 'https://48a28138085e458d96af08c84fc40987@o552804.ingest.sentry.io/5686758',\n integrations: [browserTracingIntegration()],\n release: `${process.env.KLUBBLE_VERSION}`,\n environment,\n ignoreErrors: ['AxiosError', 'NetworkError'],\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 1.0,\n })\n}\nReactDOM.render(\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 \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 {/* backwards compatibility */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {process.env.KLUBBLE_LOGIN_SSO_ENABLED === 'true' && (\n \n \n \n )}\n {process.env.KLUBBLE_LOGIN_SSO_ENABLED === 'true' && (\n \n \n \n \n \n )}\n {/* redirect possibly historic existing links in emails to /account/resetpassword to SSO flow */}\n {\n window.location.replace(`${process.env.KLUBBLE_API_BASE_PATH}/account/resetpassword`)\n return null\n }}\n />\n {/* Register logic is handled inside the PublicRouteComponent */}\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 {/* used for adyen redirect */}\n \n \n \n \n \n {/* used for twikey redirect */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* Preview used in the klubble admin */}\n \n \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
,\n document.getElementById('root'),\n)\n\n// A bug (DD-4245) where chrome uses the OSK height to calculate the window.innerHeight causes our\n// navbar to be placed below the viewport. Setting \"interactive-widget=resizes-content\" in the viewport meta\n// fixes it, but we need to remove it after the page has loaded to prevent the navbar from appearing above the OSK.\nconst viewportMeta = document.head.querySelector('meta[name=\"viewport\"]')\n\nif (viewportMeta) {\n let viewportContent = viewportMeta.getAttribute('content')\n\n if (viewportContent) {\n setTimeout(() => {\n // Remove \"interactive-widget=resizes-content\" to set the viewport meta tag back to default behavior\n viewportContent = viewportContent.replace(/,?\\s*interactive-widget=resizes-content/, '')\n\n viewportMeta.setAttribute('content', viewportContent)\n }, 500)\n }\n}\n\nif (module.hot) {\n module.hot.accept()\n}\n","export const levels = ['basic', 'medium', 'hard', 'very hard', 'extreme', 'ultimate'] as const\nexport type Level = typeof levels[number]\n\nexport type DaysPerLevel = {\n [key in Level]: CalendarDay\n}\n\nexport interface CalendarDay {\n hasPuzzle: boolean,\n dayDate?: string,\n dayNum: number,\n dayDelta: number,\n isPlayed: boolean,\n isStarted: boolean,\n klubblePuzzleId: number,\n externalPuzzleId: string,\n nextAchievement: string,\n level: Level,\n playAllowed: boolean,\n comment?: string,\n}\n\nexport interface IPuzzleCalendar {\n puzzleTypeId?: number,\n daysPerLevel?: DaysPerLevel,\n iconUrl?: string,\n nameLangKey?: string,\n}\n","import React from 'react'\nimport { StoreState } from 'client/store'\nimport { UserData } from 'client/reducers/userReducer'\nimport BreadcrumbsComponent from 'client/pages/common/components/breadcrumbs/BreadcrumbsComponent'\nimport { useSelector } from 'react-redux'\nimport { HeroBackgroundMobileComponent } from 'client/pages/common/components/page_header/HeroBackgroundMobileComponent'\nimport { PageHeaderBackgroundDesktopComponent } from 'client/pages/common/components/page_header/PageHeaderBackgroundDesktopComponent'\nimport HeaderTitleBarComponent from '../../../common/components/HeaderTitleBarComponent'\nimport AccountProfileComponent from './AccountProfileComponent'\n\ntype Props = {\n title?: string,\n subLevel?: boolean\n hideBreadcrumbs?: boolean\n}\n\nconst AccountHeaderComponent = ({ title = '', subLevel = false, hideBreadcrumbs = false }: Props) => {\n const { userName } = useSelector((state) => state.user?.data)\n\n return (\n <>\n
\n \n \n \n \n
\n { !hideBreadcrumbs && }\n \n )\n}\n\nexport default AccountHeaderComponent\n","import React from 'react'\nimport AvatarComponent from 'pages/common/components/AvatarComponent'\n\ntype Props = {\n username: string\n subLevel?: boolean\n}\n\nconst AccountProfileComponent = ({ username, subLevel }: Props) => (\n
\n \n
{username}
\n {/* {badgeTitle} */}\n
\n)\n\nexport default AccountProfileComponent\n","import React, { useContext } from 'react'\nimport raw from 'rehype-raw'\nimport sanitize from 'rehype-sanitize'\nimport ReactMarkdown from 'react-markdown'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport translationGroups from 'client/constants/translationGroups'\n\nconst AccountFAQComponent = () => {\n const { getTranslation, getRawTranslation } = useContext(TranslationContext)\n return (\n
\n

\n {getTranslation(translationGroups.accountPage, 'faq-title')}\n

\n
\n {getRawTranslation(translationGroups.accountPage, 'faq-body')}\n
\n
\n )\n}\n\nexport default AccountFAQComponent\n","import React, { useContext } from 'react'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport translationGroups from 'client/constants/translationGroups'\n\ntype Props = {\n page: string,\n}\n\nconst AccountInformationContentComponent = ({ page }: Props) => {\n const { getTranslation } = useContext(TranslationContext)\n return (\n
\n
\n

\n {getTranslation(translationGroups.accountPage, `${page}-title`)}\n

\n
\n { getTranslation(translationGroups.accountPage, `${page}-body`)}\n
\n
\n
\n )\n}\n\nexport default AccountInformationContentComponent\n","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgPersonalDetails(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 26 26\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13 16.3c-.7 0-1.2 0-1.6.1-1.8.3-3.4 2.1-3.4 4.1 0 .5-.4.8-.8.8s-.8-.4-.8-.8c0-2.2 1.4-4.3 3.3-5.2-1.5-1.1-2.5-2.8-2.5-4.8 0-3.2 2.6-5.8 5.8-5.8s5.8 2.6 5.8 5.8c0 2-1 3.7-2.5 4.8 1.9 1 3.3 3.1 3.3 5.2 0 .5-.4.8-.8.8-.5 0-.8-.4-.8-.8 0-1.9-1.5-3.8-3.4-4.1-.4 0-.9-.1-1.6-.1zm0-1.6c-2.3 0-4.2-1.9-4.2-4.2s1.9-4.2 4.2-4.2 4.2 1.9 4.2 4.2-1.9 4.2-4.2 4.2z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n}\nexport default SvgPersonalDetails;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgAccountDetails(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 26 26\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.3 19.3H7.7c-1.4 0-2.5-1.1-2.5-2.5v-6.5c0-1.4 1.1-2.5 2.5-2.5h11.5c1.4 0 2.5 1.1 2.5 2.5v6.6c-.1 1.3-1.1 2.4-2.4 2.4zM6.9 11v-.8c0-.5.4-.8.8-.8h11.5c.5 0 .8.4.8.8v.8H6.9zm0 1.7h13.2v4.1c0 .5-.4.8-.8.8H7.7c-.4 0-.8-.4-.8-.8v-4.1zm.8 2.5c0-.5.4-.8.8-.8h3.3c.5 0 .8.4.8.8 0 .5-.4.8-.8.8H8.5c-.4 0-.8-.4-.8-.8z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n}\nexport default SvgAccountDetails;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgGameSettings(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 26 26\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.5 10.5c-.4 1.4-1.7 2.5-3.2 2.5-1.6 0-2.9-1.1-3.2-2.5H5.5c-.5 0-.8-.4-.8-.8 0-.5.3-.8.8-.8h7.6c.3-1.4 1.6-2.5 3.2-2.5 1.5 0 2.8 1.1 3.2 2.5h.9c.5 0 .9.4.9.8 0 .5-.4.8-.9.8h-.9zm-1.6-.8c0-1-.7-1.7-1.6-1.7-.9 0-1.7.7-1.7 1.7 0 .9.8 1.7 1.7 1.7.9-.1 1.6-.8 1.6-1.7zM9.6 13c-1.5 0-2.8 1.1-3.2 2.5h-.9c-.5 0-.8.4-.8.8 0 .5.3.8.8.8h.9c.4 1.4 1.7 2.5 3.2 2.5 1.6 0 2.9-1.1 3.3-2.5h7.5c.5 0 .9-.4.9-.8 0-.5-.4-.8-.9-.8h-7.5c-.4-1.4-1.7-2.5-3.3-2.5zm0 5c-.9 0-1.6-.7-1.6-1.7 0-.9.7-1.7 1.6-1.7 1 0 1.7.7 1.7 1.7S10.6 18 9.6 18z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n}\nexport default SvgGameSettings;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgInformation(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 26 26\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13 21.3c-4.6 0-8.3-3.7-8.3-8.3S8.4 4.7 13 4.7s8.3 3.7 8.3 8.3-3.7 8.3-8.3 8.3zm0-15a6.7 6.7 0 000 13.4c3.7 0 6.6-3 6.6-6.7S16.7 6.3 13 6.3zm0 5.7c.6 0 1 .5 1 1v3.3c0 .6-.4 1-1 1s-1.1-.5-1.1-1V13c0-.6.5-1 1.1-1zm0-3.2c-.6 0-1.1.5-1.1 1 0 .6.5 1 1.1 1s1-.5 1-1-.4-1-1-1z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n}\nexport default SvgInformation;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgNotificationSettings(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 26 26\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.2 4.4c-1 0-1.8.8-1.8 1.8v.3c-2.2.8-3.7 2.8-3.7 5.2V15l-1.4 2.1c-.4.6-.4 1.3-.1 1.9s.9 1 1.5 1h2.7c0 1.5 1.3 2.8 2.7 2.8 1.5 0 2.7-1.2 2.7-2.8h2.7c.7 0 1.3-.4 1.6-1s.2-1.4-.2-1.9L18.5 15v-3.3c0-2.4-1.5-4.4-3.6-5.2v-.3c.2-.9-.7-1.8-1.7-1.8zm1 13.9H7.7l1.4-1.8.1-.2c.2-.3.3-.7.3-1.1v-3.3c0-2 1.6-3.7 3.6-3.7 2.1 0 3.6 1.7 3.6 3.7v3.3c0 .4.2.8.4 1.1l.1.2 1.3 1.8H14.2zm-1 2.7c-.4 0-.9-.4-.9-.9h1.9c0 .5-.4.9-1 .9z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n}\nexport default SvgNotificationSettings;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgFaq(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 26 26\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.8 19.7v-1.3-.4H11V19.6l3.8.1zm1.1-5.6c-.4.7-.6 1.4-.8 2.2h-1.2v-2.7l.9-1.9c.2-.4.1-.9-.3-1.1s-.9 0-1.1.4l-.4.8-.7-.9c-.2-.4-.7-.5-1.1-.2s-.4.8-.2 1.2l1.3 1.9v2.7h-1.5c-.1-.7-.4-1.4-.7-2.1l-.8-1.7c-1.4-2.9.6-6.3 3.7-6.3 3.2 0 5.3 3.6 3.7 6.4l-.8 1.3zM13 4.7c-4.3 0-7.1 4.7-5.2 8.7l.9 1.7c.5 1 .7 2.1.7 3.2v1.5c0 .9.7 1.6 1.6 1.6h4c.8 0 1.4-.7 1.4-1.5v-1.5c0-1.2.4-2.4.9-3.4l.8-1.4c2.2-4-.6-8.9-5.1-8.9z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n}\nexport default SvgFaq;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconWarning(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M21.697 17.65L14.711 3.664c-1.205-2.217-4.337-2.217-5.42 0L2.303 17.65c-.963 2 .482 4.349 2.65 4.349h13.973c2.288 0 3.734-2.35 2.77-4.35zm-10.6-13.096c.362-.735 1.446-.735 1.807 0l6.986 14c.362.663-.24 1.446-.963 1.446H4.954a.973.973 0 01-.843-1.446l6.986-14zm.843 2.265c-.602 0-1.204.567-1.084 1.241l.12 5.627c.121.518.483.928.964.928.482 0 .964-.41.964-.928l.24-5.627c0-.674-.48-1.24-1.204-1.24zm-1.325 10.76c0-.772.603-1.398 1.325-1.398.723 0 1.325.626 1.325 1.397s-.602 1.41-1.325 1.41c-.722 0-1.325-.639-1.325-1.41z\",\n fill: \"#000\"\n })));\n}\nexport default SvgIconWarning;","import React, { useContext } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Link, Route, Switch } from 'react-router-dom'\nimport IconLightBulb from 'assets/icons/icon_lightbulb.svg'\nimport IconChevronNext from 'assets/icons/icon_chevron_next.svg'\nimport * as uiActions from 'common_packages/assets/js/actions/uiActions'\nimport { isMobile } from 'common_packages/assets/js/utilities/devices'\nimport { drawerTypes } from 'common_packages/assets/js/types/drawerTypes'\nimport { isIOS, isSafari } from 'react-device-detect'\nimport { getDisplayModeApp } from 'client/utilities/getDisplayModeApp'\nimport { useDateFormatters } from 'client/hooks/useDateFormatters'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport PWAInstallContext from 'client/contexts/PWAInstallContext'\nimport translationGroups from 'client/constants/translationGroups'\nimport AppDisplayModes from 'client/constants/appDisplayModes'\nimport IconInstallApp from 'client/assets/icons/icon_copy.svg'\nimport IconWarning from 'client/assets/icons/icon_warning.svg'\nimport AccountInformationContent from './AccountInformationContentComponent'\n\nconst pages = ['terms-and-conditions', 'about', 'privacy']\nconst AccountInformationComponent = () => {\n const { getTranslation } = useContext(TranslationContext)\n const deferredPrompt = useContext(PWAInstallContext)\n const dispatch = useDispatch()\n const displayModeApp = getDisplayModeApp()\n const { formatDate } = useDateFormatters()\n\n const addToHomeScreen = () => {\n if (deferredPrompt) {\n deferredPrompt.prompt()\n } else {\n dispatch(uiActions.setDrawer({ drawer: drawerTypes.ADD_TO_HOMESCREEN_INFO, drawerData: { skipIntro: true }, hideHeader: true }))\n }\n }\n\n const reportBug = () => {\n dispatch(uiActions.setDrawer({ drawer: drawerTypes.REPORT_BUG }))\n }\n\n return (\n
\n \n {pages.map((page) => (\n \n \n \n ))}\n \n
\n

\n {getTranslation(translationGroups.accountPage, 'information-section-general')}\n

\n
\n {pages.map((item) => (\n \n \n {getTranslation(translationGroups.accountPage, `information-${item}`)}\n \n \n \n \n \n ))}\n \n \n {getTranslation(translationGroups.accountPage, 'information-faq')}\n \n \n \n \n \n
\n
\n { /* eslint-disable-next-line jsx-a11y/anchor-is-valid */ }\n \n \n
\n {getTranslation(translationGroups.accountPage, 'feedback')}\n
\n
\n
\n {!(isIOS && !isSafari) && isMobile && displayModeApp === AppDisplayModes.browserTab && (\n
\n
\n \n
\n {getTranslation(translationGroups.accountPage, 'install-app')}\n
\n
\n
\n )}\n
\n
\n \n
\n {getTranslation(translationGroups.accountPage, 'report-a-bug')}\n
\n
\n
\n
\n
    \n
  • \n {getTranslation(translationGroups.accountPage, 'version')}\n {` ${process.env.KLUBBLE_VERSION}` }\n
  • \n
  • \n {formatDate(new Date(+process.env.BUILD_DATE))}\n
  • \n
\n
\n
\n
\n
\n
\n )\n}\nexport default AccountInformationComponent\n","import React, { useContext, useEffect, useMemo } from 'react'\n\nimport * as yup from 'yup'\nimport { SubmitErrorHandler, SubmitHandler, useForm } from 'react-hook-form'\nimport { yupResolver } from '@hookform/resolvers/yup'\nimport SubmitButtonComponent from 'pages/common/components/form/SubmitButtonComponent'\nimport { toastTypes } from 'common_packages/assets/js/types/toastTypes'\n\nimport { useDispatch, useSelector } from 'react-redux'\nimport { StoreState } from 'client/store'\nimport { UserData } from 'client/reducers/userReducer'\nimport { setUser } from 'client/actions/userActions'\nimport { addToast } from 'common_packages/assets/js/actions/uiActions'\nimport {\n alphanumeric,\n MAX_FIRST_NAME_LENGTH,\n MAX_LAST_NAME_LENGTH,\n MAX_MIDDLE_NAME_LENGTH,\n MAX_USERNAME_LENGTH,\n} from 'client/utilities/userInput'\nimport translationGroups from 'client/constants/translationGroups'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport { ApiFormResult, klubbleAPI } from 'client/api/common'\nimport { processValidationErrors } from 'client/utilities/form'\nimport useCountryOptions from 'client/hooks/useCountryOptions'\nimport useCheckUsernameAvailable from '../../../../hooks/useCheckUsernameAvailable'\nimport InputComponent from '../../../common/components/form/InputComponent'\nimport SelectComponent from '../../../common/components/form/SelectComponent'\nimport AccountProfileComponent from '../common/AccountProfileComponent'\nimport useTwikeySanitizer from '../../../../utilities/useTwikeySanitizer'\n\ntype Inputs = {\n firstName: string\n middleName: string\n lastName: string\n email: string\n username: string\n birthDateDay: string\n birthDateMonth: string\n birthDateYear: string\n password: string\n country: string\n language: string\n settingsJson: string\n server: string\n}\n\nconst AccountPersonalDetailsComponent = () => {\n const { getTranslation, getRawTranslation } = useContext(TranslationContext)\n const storedValues = useSelector((state) => state.user?.data)\n const dispatch = useDispatch()\n\n const schema = yup.object().shape({\n firstName: yup.string()\n .matches(alphanumeric, {\n message: getRawTranslation(translationGroups.error, 'invalid-input'),\n })\n .nullable()\n .max(MAX_FIRST_NAME_LENGTH, getRawTranslation(translationGroups.form, 'error-max-chars-used').replace('{charsLimit}', MAX_FIRST_NAME_LENGTH.toString())),\n middleName: yup.string()\n .matches(alphanumeric, {\n message: getRawTranslation(translationGroups.error, 'invalid-input'),\n })\n .nullable()\n .max(MAX_MIDDLE_NAME_LENGTH, getRawTranslation(translationGroups.form, 'error-max-chars-used').replace('{charsLimit}', MAX_MIDDLE_NAME_LENGTH.toString())),\n lastName: yup.string()\n .matches(alphanumeric, {\n message: getRawTranslation(translationGroups.error, 'invalid-input'),\n })\n .nullable()\n .max(MAX_LAST_NAME_LENGTH, getRawTranslation(translationGroups.form, 'error-max-chars-used').replace('{charsLimit}', MAX_LAST_NAME_LENGTH.toString())),\n email: yup.string(),\n username: yup.string()\n .required(getRawTranslation(translationGroups.error, 'required-field'))\n .max(MAX_USERNAME_LENGTH, getRawTranslation(translationGroups.form, 'error-max-chars-used').replace('{charsLimit}', MAX_USERNAME_LENGTH.toString())),\n birthDateDay: yup.string().when(['birthDateMonth', 'birthDateYear'], {\n is: (birthDateMonth, birthDateYear) => !!birthDateMonth || !!birthDateYear,\n then: (s) => s.required(getRawTranslation(translationGroups.error, 'required-field')),\n }),\n birthDateMonth: yup.string().when(['birthDateDay', 'birthDateYear'], {\n is: (birthDateDay, birthDateYear) => !!birthDateDay || !!birthDateYear,\n then: (s) => s.required(getRawTranslation(translationGroups.error, 'required-field')),\n }),\n birthDateYear: yup.string().when(['birthDateDay', 'birthDateMonth'], {\n is: (birthDateDay, birthDateMonth) => !!birthDateDay || !!birthDateMonth,\n then: (s) => s.required(getRawTranslation(translationGroups.error, 'required-field')),\n }),\n country: yup.string().nullable(),\n language: yup.string(),\n }, [['birthDateDay', 'birthDateMonth'], ['birthDateMonth', 'birthDateYear'], ['birthDateDay', 'birthDateYear']])\n\n const form = useForm({\n resolver: yupResolver(schema),\n defaultValues: getDefaults(storedValues),\n })\n\n const {\n handleSubmit, watch, reset, setError,\n } = form\n const {\n username: usernameEntered,\n birthDateMonth,\n birthDateYear,\n } = watch()\n useTwikeySanitizer(form, ['firstName', 'middleName', 'lastName', 'country'])\n\n const usernameAvailable = useCheckUsernameAvailable({\n username: usernameEntered,\n usernameStored: storedValues?.userName,\n })\n\n const birthDateAmountDays = useMemo(() => {\n if ([4, 6, 9, 11].includes(Number(birthDateMonth))) { return 30 }\n if (Number(birthDateMonth) === 2 && Number(birthDateYear) % 4 === 0) { return 29 }\n if (Number(birthDateMonth) === 2) { return 28 }\n return 31\n }, [birthDateMonth, birthDateYear])\n\n const birthDateDayOptions = useMemo(() => Array.from({ length: birthDateAmountDays }, (_, i) => (\n { val: padZero(i + 1), displayVal: (i + 1).toString() }\n )), [birthDateAmountDays])\n\n const birthDateMonthOptions = useMemo(() => Array.from({ length: 12 }, (_, i) => padZero(i + 1)), [])\n\n const birthDateYearOptions = useMemo(() => Array.from({ length: new Date().getFullYear() - 1899 }, (_, i) => (\n { val: (i + 1900).toString(), displayVal: (i + 1900).toString() }\n )).reverse(), [])\n\n useEffect(() => {\n dispatch(setUser())\n }, [dispatch])\n\n useEffect(() => {\n // This reset takes place to adjust the isSubmitted after successfully submitting the form.\n // This is needed to change the state of the submit button.\n reset(getDefaults(storedValues), { keepIsSubmitted: true })\n }, [reset, storedValues])\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const onInvalid: SubmitErrorHandler = async () => {\n }\n\n const onValid: SubmitHandler = async (data: Inputs) => {\n if (usernameAvailable) {\n try {\n let birthDate = null\n if (data.birthDateDay && data.birthDateMonth && data.birthDateYear) {\n birthDate = `${data.birthDateYear}-${data.birthDateMonth}-${data.birthDateDay}T00:00:00.000Z`\n }\n\n const {\n firstName,\n middleName,\n lastName,\n username,\n email,\n country,\n settingsJson,\n language,\n } = data\n const payload = {\n firstName,\n middleName,\n lastName,\n userName: username,\n email,\n country,\n birthDate,\n settingsJson,\n language,\n }\n\n const { data: response } = await klubbleAPI.post>('Auth/saveuser', JSON.stringify(payload), {\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n if (response.success === true) {\n dispatch(setUser({ ...storedValues, ...payload }))\n dispatch(addToast({\n message: getRawTranslation(translationGroups.form, 'edit-personal-details-success'),\n type: toastTypes.SUCCESS,\n }))\n } else {\n processValidationErrors(response, setError, getRawTranslation)\n dispatch(addToast({\n message: getRawTranslation(translationGroups.form, response.message),\n type: toastTypes.ERROR,\n }))\n }\n } catch (err) {\n dispatch(addToast({\n message: getRawTranslation(translationGroups.form, 'edit-personal-details-error'),\n type: toastTypes.ERROR,\n }))\n }\n }\n }\n\n const openPasswordChanger = () => {\n window.location.href = `${process.env.KLUBBLE_API_BASE_PATH}/account/changepassword?redirect_uri=${window.location.origin}`\n }\n\n const countryOptions = useCountryOptions()\n\n return (\n
\n \n
\n
\n \n name=\"firstName\"\n label={getTranslation(translationGroups.form, 'first-name-label')}\n type=\"text\"\n showValidatorError\n form={form}\n />\n \n name=\"middleName\"\n label={getTranslation(translationGroups.form, 'middle-name-label')}\n type=\"text\"\n showValidatorError\n form={form}\n />\n
\n \n name=\"lastName\"\n label={getTranslation(translationGroups.form, 'last-name-label')}\n type=\"text\"\n showValidatorError\n form={form}\n />\n \n name=\"email\"\n label={getTranslation(translationGroups.form, 'email-label')}\n type=\"text\"\n disabled\n form={form}\n />\n \n name=\"username\"\n label={getTranslation(translationGroups.onboarding, `username${!usernameAvailable ? '-unavailable' : ''}`)}\n customError={!usernameAvailable}\n type=\"text\"\n showValidatorError\n form={form}\n />\n
\n {getTranslation(translationGroups.form, 'date-of-birth-label')}\n
\n
\n \n name=\"birthDateDay\"\n label={getTranslation(translationGroups.form, 'date-of-birth-day-label')}\n form={form}\n options={birthDateDayOptions}\n />\n \n name=\"birthDateMonth\"\n label={getTranslation(translationGroups.form, 'date-of-birth-month-label')}\n form={form}\n options={birthDateMonthOptions}\n style={{ flexBasis: '40%', flexGrow: '0' }}\n />\n \n name=\"birthDateYear\"\n label={getTranslation(translationGroups.form, 'date-of-birth-year-label')}\n form={form}\n options={birthDateYearOptions}\n />\n
\n \n name=\"password\"\n label={getTranslation(translationGroups.form, 'password-current-label')}\n type=\"password\"\n validatePassword={false}\n readOnly\n form={form}\n />\n
\n \n {getTranslation(translationGroups.accountPage, 'change-password-activate')}\n \n
\n countryOptions.translationMap.get(item)}\n />\n {/* */}\n \n label={getRawTranslation(translationGroups.accountPage, 'update-profile-button')}\n successMessage={getRawTranslation(translationGroups.accountPage, 'update-profile-succeeded')}\n form={form}\n disableWhileNotDirty\n />\n \n
\n )\n}\nexport default AccountPersonalDetailsComponent\n\nconst getDefaults = (storedValues: UserData): Partial => {\n const {\n year,\n month,\n day,\n } = splitDate(storedValues.birthDate)\n\n return {\n ...storedValues,\n birthDateDay: day === null ? '' : padZero(day),\n birthDateMonth: month === null ? '' : padZero(month),\n birthDateYear: year === null ? '' : `${year}`,\n username: storedValues?.userName,\n password: '*'.repeat(15),\n language: 'nl',\n }\n}\n\nconst splitDate = (asString: string) => {\n if (!asString) {\n return {\n year: null,\n month: null,\n day: null,\n }\n }\n const asDate = new Date(asString)\n return {\n year: asDate.getFullYear(),\n month: asDate.getMonth() + 1,\n day: asDate.getDate(),\n }\n}\n\nconst padZero = (input: number) => (input < 10 ? `0${input}` : input.toString())\n","var _g, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgIconReceipt(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#icon_receipt_svg__filter0_d)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.999 4.5c0-.276.229-.499.506-.499h9.5c.542 0 1 .447 1 1v10h-3.613c-.578 0-1.048.47-1.048 1.049v.602A3.344 3.344 0 016.997 20a3.003 3.003 0 01-2.998-3V4.5zM2 14V4.5C2 3.12 3.12 2 4.505 2h9.5a3.003 3.003 0 012.998 3.001v10h3.938c.59 0 1.059.47 1.059 1.049 0 3.3-2.733 5.95-5.996 5.95H6.997a4.989 4.989 0 01-4.985-4.885H2V14zm14.004 6h-4.829a5.351 5.351 0 001.156-3H19.881c-.434 1.716-2.023 3-3.877 3zm-9.007-9c-.542 0-1 .448-1 1s.458 1 1 1h5.01c.541 0 .998-.448.998-1s-.457-1-.999-1h-5.01zm-1-3c0-.552.458-1 1-1h5.01c.541 0 .998.448.998 1 0 .553-.457 1-.999 1h-5.01c-.54 0-.998-.447-.998-1z\",\n fill: \"#fff\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"icon_receipt_svg__filter0_d\",\n x: 0,\n y: 0,\n width: 24,\n height: 26,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n \"in\": \"SourceAlpha\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 2\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"effect1_dropShadow\",\n result: \"shape\"\n })))));\n}\nexport default SvgIconReceipt;","import { type PillType } from 'common_packages/assets/js/components/ui/pill/PillComponent'\n\nexport type Invoice = {\n amount: number\n amountDue: number\n amountPaid: number\n amountVat: number\n bankAccountLast4Digits: string\n currencyCode: string\n date: string\n invoiceNumber: string\n invoicePeriod: number\n isPaid: boolean\n paymentMethod: string\n puzzlePackId?: number\n puzzlePackName?: string\n regardingPeriodEnd: string\n regardingPeriodStart: string\n status: 'PAID' | 'OPEN' | 'PENDING' | 'ERROR' | 'TOBESENT' | 'TECHNICALERROR'\n subscriptionName?: string\n subscriptionTypeName?: string\n vatPercentage: number\n}\n\nexport const getStatus = (invoice: Invoice): PillType => {\n switch (invoice.status) {\n case 'PAID': return 'success'\n case 'ERROR': return 'danger'\n case 'OPEN':\n default:\n return 'warning'\n }\n}\n","import React, { useContext } from 'react'\nimport IconReceipt from 'assets/icons/invoice/icon_receipt.svg'\nimport PillComponent from 'common_packages/assets/js/components/ui/pill/PillComponent'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport translationGroups from 'client/constants/translationGroups'\nimport { Link } from 'react-router-dom'\nimport { useCurrencyFormatters } from 'client/hooks/useCurrencyFormatters'\nimport { useDateFormatters } from 'client/hooks/useDateFormatters'\nimport { getStatus, Invoice } from './Invoice'\n\nconst AccountDetailsInvoicesEntryComponent = (invoice: Invoice) => {\n const {\n date,\n invoiceNumber,\n amount,\n status,\n } = invoice\n const { getTranslation } = useContext(TranslationContext)\n const { formatCurrency } = useCurrencyFormatters()\n const { formatDate } = useDateFormatters()\n\n return (\n
  • \n \n
    \n \n
    \n
    \n
    \n {formatDate(new Date(date))}\n
    \n
    \n {formatCurrency(amount)}\n \n •\n \n {invoiceNumber}\n
    \n
    \n
    \n \n {getTranslation(translationGroups.accountPage, `invoice-status-${status}`)}\n \n
    \n \n
  • \n )\n}\nexport default AccountDetailsInvoicesEntryComponent\n","import React, {\n useContext, useEffect, useRef, useState,\n} from 'react'\nimport { useDispatch } from 'react-redux'\nimport { klubbleAPI } from 'client/api/common'\nimport { translationGroups } from 'client/constants/translationGroups'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport { addToast } from 'common_packages/assets/js/actions/uiActions'\nimport { toastTypes } from 'common_packages/assets/js/types/toastTypes'\nimport AccountDetailsInvoicesEntryComponent from './AccountDetailsInvoicesEntryComponent'\nimport { Invoice } from './Invoice'\nimport AccountHeaderComponent from '../../common/AccountHeaderComponent'\n\ntype GroupedByYear = {year: number, entries: Invoice[]}[]\n\n// Invoice list\nconst AccountDetailsInvoicesComponent = () => {\n const { getTranslation, getRawTranslation, translationsSet } = useContext(TranslationContext)\n const [isLoading, setIsLoading] = useState(true)\n const [groupedByYear, setGroupedByYear] = useState()\n const dispatch = useDispatch()\n\n const requestSent = useRef(false)\n\n useEffect(() => {\n const fetch = async () => {\n try {\n requestSent.current = true\n const res = await klubbleAPI.get('Invoice/listinvoices')\n const grouped = res.data.reduce((acc: GroupedByYear, value: Invoice) => {\n const date = new Date(value.date)\n const year = date.getFullYear()\n const group = acc.find((g) => g.year === year)\n if (!group) {\n acc.push({ year, entries: [value] })\n } else {\n group.entries.push(value)\n }\n return acc\n }, [])\n setGroupedByYear(grouped)\n } catch (e) {\n dispatch(addToast({\n message: getRawTranslation(translationGroups.api, 'something-went-wrong'),\n type: toastTypes.ERROR,\n }))\n } finally {\n setIsLoading(false)\n }\n }\n if (translationsSet) {\n // Wait until we have translations, in case we have to show error\n fetch()\n }\n }, [dispatch, getRawTranslation, translationsSet])\n\n return (\n <>\n \n {!isLoading && (\n
    \n
    \n {groupedByYear?.length ? (\n groupedByYear.map((group) => (\n
    \n

    \n {group.year}\n

    \n
      \n {group.entries.map((entry) => (\n \n ))}\n
    \n
    \n )))\n : (\n
    \n

    \n {getTranslation(translationGroups.accountPage, 'account-details-invoices-no-invoices-title')}\n

    \n {getTranslation(translationGroups.accountPage, 'account-details-invoices-no-invoices-text')}\n
    \n )}\n
    \n
    \n )}\n \n )\n}\nexport default AccountDetailsInvoicesComponent\n","import React, {\n useContext,\n useEffect,\n useState,\n useMemo,\n useCallback,\n} from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { klubbleAPI } from 'client/api/common'\nimport { translationGroups } from 'client/constants/translationGroups'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport { addToast } from 'common_packages/assets/js/actions/uiActions'\nimport { toastTypes } from 'common_packages/assets/js/types/toastTypes'\nimport { useDispatch } from 'react-redux'\nimport { getParamsFromQueryString } from 'client/utilities/getParamsFromQueryString'\nimport PillComponent from 'common_packages/assets/js/components/ui/pill/PillComponent'\nimport { useCurrencyFormatters } from 'client/hooks/useCurrencyFormatters'\nimport { useDateFormatters } from 'client/hooks/useDateFormatters'\nimport { getStatus, Invoice } from './Invoice'\nimport AccountHeaderComponent from '../../common/AccountHeaderComponent'\n\nconst AccountDetailsInvoiceComponent = () => {\n const { getTranslation, getRawTranslation, translationsSet } = useContext(TranslationContext)\n const [isLoading, setIsLoading] = useState(true)\n const [invoice, setInvoice] = useState()\n const dispatch = useDispatch()\n const { id } = getParamsFromQueryString()\n const history = useHistory()\n const { formatCurrency } = useCurrencyFormatters()\n const { formatDate } = useDateFormatters()\n\n useEffect(() => {\n const fetch = async () => {\n try {\n const res = await klubbleAPI.get(`Invoice/getInvoice?InvoiceNumber=${id}`)\n setInvoice(res.data)\n } catch (e) {\n dispatch(addToast({\n message: getRawTranslation(translationGroups.accountPage, 'account-details-invoices-error'),\n type: toastTypes.ERROR,\n }))\n } finally {\n setIsLoading(false)\n }\n }\n if (translationsSet) {\n // Wait until we have translations, in case we have to show error\n fetch()\n }\n }, [dispatch, getRawTranslation, getTranslation, translationsSet, id])\n\n const details = useMemo(() => {\n if (!invoice) {\n return null\n }\n return [{ key: 'date', val: formatDate(new Date(invoice?.date), { day: 'numeric', month: 'long', year: 'numeric' }) },\n { key: 'invoice-number', val: invoice.invoiceNumber },\n { key: 'payment-method', val: getTranslation(translationGroups.invoice, invoice.paymentMethod) },\n { key: 'supplier' },\n { key: 'address' },\n { key: 'vat-number' },\n { key: 'product', val: invoice.puzzlePackName ? invoice.puzzlePackName : getTranslation(translationGroups.subscriptions, invoice.subscriptionName) },\n { key: 'vat-amount', val: formatCurrency(invoice.amountVat, invoice.currencyCode) },\n { key: 'total', val: formatCurrency(invoice.amount, invoice.currencyCode) }]\n }, [invoice, getTranslation, formatDate, formatCurrency])\n\n const onClickTermsConditions = useCallback((e) => {\n e.preventDefault()\n history.push('/account/information/terms-and-conditions')\n }, [history])\n\n const onClickAccount = useCallback((e) => {\n e.preventDefault()\n history.push('/account/account-details')\n }, [history])\n\n const renderTextWithLink = useCallback((text: string, linkTranslationKey: string, linkOnClick: (e: Event) => void) => {\n const split = text.split('{link}')\n if (split.length !== 2) return text\n\n return (\n \n {split[0]}\n \n {getRawTranslation(translationGroups.form, linkTranslationKey)}\n \n {split[1]}\n \n )\n }, [getRawTranslation])\n\n return (\n <>\n detail.key === 'date').val}\n subLevel\n />\n {!isLoading && (\n
    \n
    \n {details?.length ? (\n <>\n
      \n {details.map((detail) => (\n
    • \n
      \n {getTranslation(translationGroups.invoice, `${detail.key}-label`)}\n {detail.key === 'vat-amount' && ` (${invoice.vatPercentage}%)`}\n
      {detail.val || getTranslation(translationGroups.invoice, `${detail.key}-text`)}
      \n
      \n {detail.key === 'total' && (\n \n {getTranslation(translationGroups.accountPage, `invoice-status-${invoice?.status}`)}\n \n )}\n
    • \n ))}\n
    \n {invoice.subscriptionName && (\n <>\n
    \n {renderTextWithLink(getRawTranslation(translationGroups.accountPage, 'invoice-footer-text'), 'your-account', onClickAccount)}\n
    \n
    \n {renderTextWithLink(getRawTranslation(translationGroups.accountPage, 'invoice-terms-conditions'), 'terms-conditions', onClickTermsConditions)}\n
    \n \n )}\n \n ) : (\n
    \n

    \n {getTranslation(translationGroups.accountPage, 'account-details-invoice-no-invoice-title')}\n

    \n {getTranslation(translationGroups.accountPage, 'account-details-invoice-no-invoice-text')}\n
    \n )}\n
    \n
    \n )}\n \n )\n}\nexport default AccountDetailsInvoiceComponent\n","import React from 'react'\nimport { Route, Switch, withRouter } from 'react-router-dom'\nimport AccountDetailsInvoicesComponent from './AccountDetailsInvoicesComponent'\nimport AccountDetailsInvoiceComponent from './AccountDetailsInvoiceComponent'\n\nconst AccountDetailsInvoiceRoutesComponent = () => (\n
    \n \n \n \n \n \n \n \n \n
    \n)\nexport default withRouter(AccountDetailsInvoiceRoutesComponent)\n","import React, { useContext, useEffect, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { translationGroups } from 'client/constants/translationGroups'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport { ApiResult, klubbleAPI } from 'client/api/common'\nimport { refreshToken } from 'client/api/authentication'\nimport { addToast } from 'common_packages/assets/js/actions/uiActions'\nimport { toastTypes } from 'common_packages/assets/js/types/toastTypes'\nimport RoundedButtonComponent from 'client/pages/common/components/buttons/RoundedButtonComponent'\n\nconst AccountDetailsReenableSubscriptionButtonComponent = () => {\n const { getTranslation, getRawTranslation } = useContext(TranslationContext)\n const dispatch = useDispatch()\n\n const handleReenable = async () => {\n try {\n // Send request to backend\n const { data: response } = await klubbleAPI.post>('Auth/reenablepremiumsubscription', null, {\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n if (response.data) {\n // Fetch new subscription data\n refreshToken()\n dispatch(addToast({\n message: getRawTranslation(translationGroups.accountPage, 'cancelsubscription-reenabled'),\n type: toastTypes.SUCCESS,\n }))\n } else {\n dispatch(addToast({\n message: getRawTranslation(translationGroups.accountPage, `error-reenable-${response.message}`),\n type: toastTypes.ERROR,\n }))\n }\n } catch {\n dispatch(addToast({\n message: getTranslation(translationGroups.accountPage, 'error-reenable'),\n type: toastTypes.ERROR,\n }))\n }\n }\n\n const [showButton, setShowButton] = useState(false)\n useEffect(() => {\n klubbleAPI.post>('Auth/canreenablepremiumsubscription')\n .then((response) => { setShowButton(!!response?.data?.data) })\n }, [])\n\n if (!showButton) return null\n return (\n \n )\n}\nexport default AccountDetailsReenableSubscriptionButtonComponent\n","import React from 'react'\n\ntype Props = {\n name: string\n label: string\n value: string\n readOnly: boolean\n}\n\nconst AccountDetailsSubscriptionFieldComponent = ({\n name, label, value, readOnly,\n}: Props) => (\n
    \n \n \n
    \n)\n\nexport default AccountDetailsSubscriptionFieldComponent\n","import React, { useContext } from 'react'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport translationGroups from 'client/constants/translationGroups'\nimport { drawerTypes } from 'common_packages/assets/js/types/drawerTypes'\nimport * as uiActions from 'common_packages/assets/js/actions/uiActions'\nimport { SubscriptionType } from 'client/enums/SubscriptionType'\nimport useConfig from 'client/hooks/useConfig'\nimport { useCurrencyFormatters } from 'client/hooks/useCurrencyFormatters'\nimport { useDateFormatters } from 'client/hooks/useDateFormatters'\nimport RoundedButtonComponent from 'client/pages/common/components/buttons/RoundedButtonComponent'\nimport { Subscription } from 'client/reducers/userReducer'\nimport { useDispatch } from 'react-redux'\nimport AccountDetailsReenableSubscriptionButtonComponent from './AccountDetailsReenableSubscriptionButtonComponent'\nimport AccountDetailsSubscriptionFieldComponent from './AccountDetailsSubscriptionFieldComponent'\n\ntype Props = {\n subscription: Subscription\n}\n\nconst AccountDetailsSubscriptionInfoComponent = ({ subscription }: Props) => {\n const { getTranslation, getRawTranslation } = useContext(TranslationContext)\n const { willAutoRenew, canReEnable, isFree } = subscription\n const { lightTrialDaysText, extendedTrialDaysText } = useConfig()\n const { formatCurrency } = useCurrencyFormatters()\n const { formatDate } = useDateFormatters()\n const dispatch = useDispatch()\n\n const paymentTypeLabels = {\n 0: 'monthly',\n 1: 'yearly',\n }\n const paymentType = isFree\n ? getTranslation(translationGroups.accountPage, 'payment-type-none')\n : getTranslation(translationGroups.paymentInputPage, `${paymentTypeLabels[subscription.paymentPeriodId]}-label`)\n\n const paymentOrEndSubscriptionLabel = willAutoRenew ? 'next-payment' : 'end'\n\n const freeDays = subscription.subscriptionTypeName === SubscriptionType.extendedTrial ? extendedTrialDaysText : lightTrialDaysText\n\n // In the case that somehow the paidUntilDate is missing from the subscription.\n const paidUntilDateValue = subscription.paidUntilDate ? formatDate(new Date(subscription.paidUntilDate)) : '-'\n\n const handleCancel = () => {\n dispatch(uiActions.setDrawer({\n drawer: drawerTypes.CANCEL_SUBSCRIPTION,\n forceModal: true,\n hideHeader: true,\n }))\n }\n\n return (\n
    \n \n \n \n \n \n {willAutoRenew && (\n
    \n \n
    \n )}\n {canReEnable && (\n <>\n
    \n {getRawTranslation(translationGroups.accountPage, 'subscription-terminates-on').replace('{0}', formatDate(new Date(subscription.terminationDate)))}\n
    \n \n \n )}\n
    \n )\n}\n\nexport default AccountDetailsSubscriptionInfoComponent\n","import React, { useContext, useMemo } from 'react'\nimport translationGroups from 'client/constants/translationGroups'\nimport { SubscriptionType } from 'client/enums/SubscriptionType'\nimport TranslationContext from 'client/contexts/TranslationContext'\n\ntype Props = {\n children: React.ReactNode\n}\n\nconst SubscriptionUpgradeCardComponent = ({ children }: Props) => {\n const { getTranslation, getRawTranslation } = useContext(TranslationContext)\n\n const listItems = useMemo(() => {\n const list = getRawTranslation(translationGroups.common, `subscription-type-usp-${SubscriptionType.premium}`)\n .split('\\n') ?? []\n return list.map((item) => (\n
  • \n •\n {item}\n
  • \n ))\n }, [getRawTranslation])\n\n return (\n
    \n
    \n

    \n {getTranslation(translationGroups.subscriptions, 'klubble-upgrade-title')}\n

    \n
    \n {getTranslation(translationGroups.subscriptions, 'klubble-upgrade-paragraph')}\n
    \n
      \n {listItems}\n
    \n {children}\n
    \n
    \n )\n}\n\nexport default SubscriptionUpgradeCardComponent\n","// all pages under 'account-details'\n\nimport AccountDetailsInvoiceRoutesComponent from './invoices/AccountDetailsInvoiceRoutesComponent';\nimport AccountDetailsPaymentComponent from './payment/AccountDetailsPaymentComponent';\nimport AccountDetailsSubscriptionComponent from './subscription/AccountDetailsSubscriptionComponent';\n\nexport const accountDetailsPages = [{\n key: 'subscription',\n component: AccountDetailsSubscriptionComponent,\n}, {\n key: 'payment',\n component: AccountDetailsPaymentComponent,\n}, {\n key: 'invoices',\n component: AccountDetailsInvoiceRoutesComponent,\n}]\n","import React, { useContext, useEffect } from 'react'\nimport { useHistory } from 'react-router'\nimport { useDispatch } from 'react-redux'\nimport { translationGroups } from 'client/constants/translationGroups'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport useActiveSubscription from 'client/hooks/useActiveSubscription'\nimport RoundedButtonComponent from 'client/pages/common/components/buttons/RoundedButtonComponent'\nimport { SubscriptionType } from 'client/enums/SubscriptionType'\nimport { isMobile } from 'common_packages/assets/js/utilities/devices'\nimport { setUser } from 'client/actions/userActions'\nimport AccountHeaderComponent from '../../common/AccountHeaderComponent'\nimport AccountDetailsSubscriptionInfoComponent from './AccountDetailsSubscriptionInfoComponent'\nimport SubscriptionUpgradeCardComponent from './SubscriptionUpgradeCardComponent'\n\nconst AccountDetailsSubscriptionComponent = () => {\n const { getTranslation } = useContext(TranslationContext)\n const dispatch = useDispatch()\n const history = useHistory()\n\n useEffect(() => {\n dispatch(setUser())\n }, [dispatch])\n\n const handleUpgrade = () => {\n history.push({\n pathname: '/upgrade',\n })\n }\n\n const subscription = useActiveSubscription()\n\n const showUpgradeCard = !subscription\n || subscription.subscriptionTypeName === SubscriptionType.light\n || subscription.subscriptionTypeName === SubscriptionType.lightTrial\n || subscription.subscriptionTypeName === SubscriptionType.extendedTrial\n\n return (\n <>\n \n
    \n {!isMobile && (\n

    \n {getTranslation(translationGroups.accountPage, 'account-details-subscription')}\n

    \n )}\n
    \n { subscription && (\n \n )}\n {showUpgradeCard && (\n \n \n \n )}\n
    \n
    \n \n )\n}\nexport default AccountDetailsSubscriptionComponent\n","import { translationGroups } from 'client/constants/translationGroups'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport useActiveSubscription from 'client/hooks/useActiveSubscription'\nimport React, { useContext, useMemo } from 'react'\nimport AccountHeaderComponent from '../../common/AccountHeaderComponent'\n\nconst AccountDetailsPaymentComponent = () => {\n const { getTranslation } = useContext(TranslationContext)\n\n const subscription = useActiveSubscription()\n\n const bankAccount = useMemo(() => {\n if (!subscription?.bankAccountLastDigits) return null\n return `**** **** **** **${insert(subscription.bankAccountLastDigits, 2, ' ')}`\n }, [subscription?.bankAccountLastDigits])\n\n return (\n <>\n \n
    \n
    \n {bankAccount ? (\n <>\n

    \n {getTranslation(translationGroups.accountPage, 'account-details-payment-automatic-deposit')}\n

    \n
    \n
    \n {getTranslation(translationGroups.accountPage, 'account-details-payment-bank-account')}\n
    \n
    \n {bankAccount}\n
    \n
    \n \n )\n : (\n
    \n

    \n {getTranslation(translationGroups.accountPage, 'account-details-payment-no-bank-account-title')}\n

    \n {getTranslation(translationGroups.accountPage, 'account-details-payment-no-bank-account-text')}\n
    \n )}\n
    \n
    \n \n )\n}\nexport default AccountDetailsPaymentComponent\n\nfunction insert(str, index, value) {\n return str.substr(0, index) + value + str.substr(index)\n}\n","import translationGroups from 'client/constants/translationGroups'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport { SubscriptionType } from 'client/enums/SubscriptionType'\nimport useActiveSubscription from 'client/hooks/useActiveSubscription'\nimport useConfig from 'client/hooks/useConfig'\nimport * as React from 'react'\nimport { useContext } from 'react'\nimport { Link } from 'react-router-dom'\n\nconst AccountDetailsSubscriptionListItemComponent = () => {\n const subscription = useActiveSubscription()\n const { getTranslation, getRawTranslation } = useContext(TranslationContext)\n const { lightTrialDaysText, extendedTrialDaysText } = useConfig()\n const freeDays = subscription?.subscriptionTypeName === SubscriptionType.extendedTrial ? extendedTrialDaysText : lightTrialDaysText\n\n return (\n \n \n {getTranslation(translationGroups.accountPage, 'details-subscription')}\n \n \n {getRawTranslation(translationGroups.common, `subscription-type-${(subscription?.subscriptionTypeName ?? 'none')}`).replace(/{days}/g, freeDays)}\n \n \n )\n}\n\nexport default AccountDetailsSubscriptionListItemComponent\n","import React, { useContext } from 'react'\nimport { Link } from 'react-router-dom'\nimport IconChevronNext from 'assets/icons/icon_chevron_next.svg'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport translationGroups from 'client/constants/translationGroups'\nimport AccountHeaderComponent from '../common/AccountHeaderComponent'\nimport AccountDetailsSubscriptionListItemComponent from './AccountDetailsSubscriptionListItemComponent'\n\nconst AccountDetailsHomeComponent = () => {\n const { getTranslation } = useContext(TranslationContext)\n\n return (\n
    \n \n
    \n

    \n {getTranslation(translationGroups.accountPage, 'details-section-subscription')}\n

    \n
    \n \n \n \n {getTranslation(translationGroups.accountPage, 'details-payment')}\n \n \n \n \n \n \n \n {getTranslation(translationGroups.accountPage, 'details-invoices')}\n \n \n \n \n \n
    \n
    \n
    \n )\n}\nexport default AccountDetailsHomeComponent\n","import React from 'react'\nimport { Route, Switch, withRouter } from 'react-router-dom'\nimport { accountDetailsPages } from './pages'\nimport AccountDetailsHomeComponent from './AccountDetailsHomeComponent'\n\nconst AccountDetailsRoutesComponent = () => (\n
    \n \n \n {accountDetailsPages.map((page) => (\n \n ))}\n \n
    \n)\nexport default withRouter(AccountDetailsRoutesComponent)\n","import React, { useContext } from 'react'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport translationGroups from 'client/constants/translationGroups'\nimport ToggleComponent from 'client/pages/common/components/toggles/ToggleComponent'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { StoreState } from 'client/store'\nimport { SettingsStoreState } from 'client/reducers/settingsReducer'\nimport { UserData } from 'client/reducers/userReducer'\nimport { klubbleAPI } from 'client/api/common'\nimport * as settingActions from 'client/actions/settingActions'\nimport { addToast } from 'common_packages/assets/js/actions/uiActions'\nimport { toastTypes } from 'common_packages/assets/js/types/toastTypes'\n\ntype Field = 'showTimer' | 'skipCompletedLetters' | 'skipCelebration'\n\nconst GameSettingsComponent = () => {\n const { getTranslation } = useContext(TranslationContext)\n const dispatch = useDispatch()\n const {\n showTimer,\n skipCompletedLetters,\n skipCelebration,\n } = useSelector((store) => store.settings)\n const userData = useSelector((state) => state.user?.data)\n\n const handleToggle = async (field: Field, value: boolean) => {\n const settings = {\n showTimer,\n skipCompletedLetters,\n skipCelebration,\n [field]: value,\n }\n const settingsJson = JSON.stringify(settings)\n\n const data = {\n ...userData,\n settingsJson,\n }\n try {\n const res = await klubbleAPI.post('Auth/saveuser', JSON.stringify(data), {\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n if (!res.data.success) {\n throw new Error(`${res.config.url} did not return succesfully`)\n }\n dispatch({\n type: settingActions.SET_SETTINGS,\n payload: settings,\n })\n } catch (e) {\n dispatch(addToast({\n message: getTranslation(translationGroups.form, 'edit-personal-details-error'),\n type: toastTypes.ERROR,\n }))\n }\n }\n\n return (\n
    \n

    \n {getTranslation(translationGroups.accountPage, 'game-settings-general')}\n

    \n
    \n
    \n
    \n {getTranslation(translationGroups.accountPage, 'game-settings-label-show-timer')}\n
    \n handleToggle('showTimer', value)} />\n
    \n
    \n
    \n {getTranslation(translationGroups.accountPage, 'game-settings-label-skip-completed-letter')}\n
    \n handleToggle('skipCompletedLetters', value)} />\n
    \n
    \n
    \n {getTranslation(translationGroups.accountPage, 'game-settings-label-skip-celebration')}\n
    \n {getTranslation(translationGroups.accountPage, 'game-settings-label-subtext-skip-celebration')}\n
    \n
    \n handleToggle('skipCelebration', value)} />\n
    \n
    \n
    \n )\n}\n\nexport default GameSettingsComponent\n","import IconPersonalDetails from 'assets/icons/account/personal_details.svg'\nimport IconAccountDetails from 'assets/icons/account/account_details.svg'\nimport IconGameSettings from 'assets/icons/account/game_settings.svg'\nimport IconInformation from 'assets/icons/account/information.svg'\nimport IconNotificationSettings from 'assets/icons/account/notification_settings.svg'\nimport IconAccountFAQ from 'assets/icons/account/faq.svg'\nimport AccountInformationComponent from 'client/pages/account/components/information/AccountInformationComponent'\nimport NotificationsSettingsComponent from 'client/pages/account/components/notification-settings/AccountNotificationsSettingsComponent'\nimport SettingsPersonalDetailsComponent from 'pages/account/components/personal-details/AccountPersonalDetailsComponent'\nimport AccountFAQComponent from 'pages/account/components/faq/AccountFAQComponent'\nimport AccountDetailsRoutesComponent from './components/account-details/AccountDetailsRoutesComponent'\nimport GameSettingsComponent from './components/game-settings/GameSettingsComponent'\n\nexport const accountPages = [{\n key: 'personal-details',\n component: SettingsPersonalDetailsComponent,\n icon: IconPersonalDetails,\n}, {\n key: 'account-details',\n component: AccountDetailsRoutesComponent,\n icon: IconAccountDetails,\n noHeader: true, // will be handled by AccountDetailsRoutesComponent\n}, {\n key: 'notification-settings',\n component: NotificationsSettingsComponent,\n icon: IconNotificationSettings,\n}, {\n key: 'game-settings',\n component: GameSettingsComponent,\n icon: IconGameSettings,\n}, {\n key: 'information',\n component: AccountInformationComponent,\n icon: IconInformation,\n}, {\n key: 'faq',\n component: AccountFAQComponent,\n icon: IconAccountFAQ,\n}]\n","import React, { useContext } from 'react'\nimport TranslationContext from 'client/contexts/TranslationContext'\nimport translationGroups from 'client/constants/translationGroups'\nimport ToggleComponent from 'client/pages/common/components/toggles/ToggleComponent'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { StoreState } from 'client/store'\nimport { setOptInStatusses } from 'client/actions/userActions'\nimport { addToast } from 'common_packages/assets/js/actions/uiActions'\nimport { toastTypes } from 'common_packages/assets/js/types/toastTypes'\n\nconst AccountNotificationsSettingsComponent = () => {\n const { getTranslation, getRawTranslation } = useContext(TranslationContext)\n const dispatch = useDispatch()\n const hasNewsletterOptIn = useSelector((store) => store.user.data.hasNewsletterOptIn)\n const hasWeeklyStatisticsOptIn = useSelector((store) => store.user.data.hasWeeklyStatisticsOptIn)\n\n const handleNewsletterOptInToggle = (value: boolean) => {\n dispatch(setOptInStatusses(value, hasWeeklyStatisticsOptIn, getRawTranslation(translationGroups.accountPage, 'notifications-newsletter-accept-terms')))\n\n const message = getRawTranslation(translationGroups.accountPage, `notifications-newsletter-accept-terms-toast-${value ? 'on' : 'off'}`)\n .replace('{date}', new Date().toLocaleDateString())\n\n dispatch(addToast({ message, type: toastTypes.SUCCESS }))\n }\n const handleWeeklyStatisticsOptInToggle = (value: boolean) => {\n dispatch(setOptInStatusses(hasNewsletterOptIn, value, getRawTranslation(translationGroups.accountPage, 'notifications-newsletter-accept-terms')))\n\n const message = getRawTranslation(translationGroups.accountPage, `notifications-weekly-statistics-accept-terms-toast-${value ? 'on' : 'off'}`)\n .replace('{date}', new Date().toLocaleDateString())\n\n dispatch(addToast({ message, type: toastTypes.SUCCESS }))\n }\n\n return (\n
    \n

    \n {getTranslation(translationGroups.accountPage, 'notifications-section-email')}\n

    \n
    \n
    \n
    \n {getTranslation(translationGroups.accountPage, 'notifications-label-newsletter')}\n
    \n \n
    \n
    \n
    \n {getTranslation(translationGroups.accountPage, 'notifications-newsletter-accept-terms')}\n
    \n
    \n
    \n
    \n {getTranslation(translationGroups.accountPage, 'notifications-label-weekly-statistics')}\n
    \n \n
    \n
    \n
    \n )\n}\n\nexport default AccountNotificationsSettingsComponent\n","import { Dispatch } from 'redux'\nimport cellStatuses from 'common_packages/assets/js/constants/statuses'\nimport { REVEAL_GAME_STATUS_DELAY } from 'common_packages/assets/js/constants/delays'\nimport {\n DropBlockPayload,\n RevealRegionPayload,\n CheckRegionPayload,\n ClearRegionPayload,\n BlockpuzzleBlockAction,\n} from './types'\nimport { BlockpuzzleStoreState } from '../reducers'\n\nexport const DROP_BLOCK = 'DROP_BLOCK'\nexport const SET_REGION_USED = 'SET_REGION_USED'\nexport const REVEAL_REGION = 'REVEAL_REGION'\nexport const CHECK_REGION = 'CHECK_REGION'\nexport const CLEAR_REGION = 'CLEAR_REGION'\n\nconst dropBlockAction = (payload: DropBlockPayload): BlockpuzzleBlockAction => ({\n type: DROP_BLOCK,\n payload,\n})\n\nconst revealRegionAction = (payload: RevealRegionPayload): BlockpuzzleBlockAction => ({\n type: REVEAL_REGION,\n payload,\n})\n\nconst checkRegionAction = (payload: CheckRegionPayload): BlockpuzzleBlockAction => ({\n type: CHECK_REGION,\n payload,\n})\n\nconst clearRegionAction = (payload: ClearRegionPayload): BlockpuzzleBlockAction => ({\n type: CLEAR_REGION,\n payload,\n})\n\n// Drops a block on a region\nexport const dropBlock = (payload: DropBlockPayload) => (dispatch: Dispatch) => {\n dispatch(dropBlockAction(payload))\n}\n\n// Clears a region. Used when a block is released outside of the grid\nexport const removeBlock = (payload: ClearRegionPayload) => (dispatch: Dispatch) => {\n dispatch(clearRegionAction(payload))\n}\n\nexport const revealSelection = () => (dispatch: Dispatch, getState: () => BlockpuzzleStoreState) => {\n const selectedRegionIndex = getState().selection.selectedCellIndex\n\n if (selectedRegionIndex !== null) {\n dispatch(revealRegionAction({\n regionIndex: selectedRegionIndex,\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n }))\n }\n}\n\nexport const checkSelection = () => (dispatch: Dispatch, getState: () => BlockpuzzleStoreState) => {\n const { blocks, selection } = getState()\n const blockAtRegion = blocks.blocksData.find((b) => (b.placedRegionIndex === selection.selectedCellIndex))\n const regionIsRevealed = blockAtRegion?.status === cellStatuses.REVEALED\n if (blockAtRegion && !regionIsRevealed) {\n dispatch(checkRegionAction({ regionIndex: selection.selectedCellIndex }))\n }\n}\n\nexport const clearSelection = () => (dispatch: Dispatch, getState: () => BlockpuzzleStoreState) => {\n const { blocks, selection } = getState()\n const blockAtRegion = blocks.blocksData.find((b) => (b.placedRegionIndex === selection.selectedCellIndex))\n const regionIsRevealed = blockAtRegion?.status === cellStatuses.REVEALED\n if (blockAtRegion && !regionIsRevealed) {\n dispatch(clearRegionAction({ regionIndex: selection.selectedCellIndex }))\n }\n}\n","import * as cellActionTypes from 'common_sudoku_packages/assets/js/actions/cellActionTypes'\nimport cellStatuses from 'common_packages/assets/js/constants/statuses'\nimport * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { CampingStoreState } from '../reducers'\nimport { CampingAction, CampingCellAction, GuessPayload } from './types'\nimport { getNextCampingValue } from '../utilities/campingValues'\n\nconst guessAction = (payload: GuessPayload): CampingCellAction => ({\n type: cellActionTypes.GUESS,\n payload,\n})\n\nexport const guess = (cellIndex: number, rightClick: boolean) => (dispatch: TDispatch, getState: () => CampingStoreState) => {\n const cellData = getState()?.cells.cellData\n /**\n * Get the value from the cell that the user clicked to get the next camping value.\n * When found change the payload value property to the next camping value.\n */\n const cell = cellData[cellIndex]\n\n if (cell.status === cellStatuses.INITIAL) {\n return\n }\n\n const nextValue = getNextCampingValue(cell, rightClick)\n\n const payload: GuessPayload = {\n cellIndices: [cellIndex],\n values: [nextValue],\n delaySetGameStatus: 1000,\n }\n\n dispatch(guessAction(payload))\n dispatch(resetCorrectStatuses())\n}\n\nexport const { resetCorrectStatuses } = commonCellActions\nexport const { revealPuzzle } = commonCellActions\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\n","export enum CampingCellValues {\n EMPTY = '',\n GRASS = 'GRASS',\n TENT = 'TENT',\n TREE = 'TREE'\n}\n","import { CampingCellValues } from '../constants/campingCellValues'\nimport { CampingCell } from '../reducers/cellsReducer'\n\nexport function getNextCampingValue(cell: CampingCell, rightClick = false) {\n /**\n * Cycle through the values\n */\n const values = Object.values(CampingCellValues)\n const currentValue = cell.value ? cell.value : CampingCellValues.EMPTY\n const direction = rightClick ? -1 : 1\n\n let nextIndex = values.indexOf(currentValue) + direction\n if (nextIndex > (values.length - 1) || values[nextIndex] === CampingCellValues.TREE) {\n nextIndex = 0\n } else if (nextIndex < 0) {\n nextIndex = values.length - 2\n }\n return values[nextIndex]\n}\n\n/**\n * This method sets the camping cell value after multi-select.\n * - if the first cell is grass make the remainder empty\n * - if the first cell is empty make the remainder grass\n * - tents and trees stay untouched\n */\nexport function getCampingCellAfterMultiselect(\n cell: CampingCell,\n firstCell: CampingCell,\n selectedCellIndices: number[],\n index: number,\n) {\n if (\n cell.value !== CampingCellValues.TENT\n && cell.solution !== CampingCellValues.TREE\n ) {\n if (\n firstCell.value === CampingCellValues.EMPTY\n && selectedCellIndices.includes(index)\n ) {\n return {\n ...cell,\n value: CampingCellValues.GRASS,\n }\n }\n if (\n firstCell.value === CampingCellValues.GRASS\n && selectedCellIndices.includes(index)\n ) {\n return {\n ...cell,\n value: CampingCellValues.EMPTY,\n }\n }\n }\n return cell\n}\n","import { Dispatch } from 'redux'\nimport * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport * as cellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport cellStatuses, { CellStatusType } from 'common_packages/assets/js/constants/statuses'\nimport { type TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { REVEAL_GAME_STATUS_DELAY } from 'common_packages/assets/js/constants/delays'\nimport { getSelectedClueCells } from './selectionUtilities'\nimport {\n CrosswordCellAction,\n GuessCellPayload,\n ClearCellPayload,\n ClearCellsPayload,\n RevealCellPayload,\n PrevGuessPayload,\n CheckCluePayload,\n CheckCellPayload,\n ClearCluePayload,\n RevealCluePayload,\n GuessWordPayload,\n FillCodebarPayload,\n RevealCodebarPayload,\n SwapValuesPayload,\n} from './types'\nimport { CommonCrosswordStoreState } from '../reducers'\n\nconst guessAction = (payload: GuessCellPayload): CrosswordCellAction => ({\n type: cellActionTypes.GUESS,\n payload,\n})\n\nexport const guessWordAction = (payload: GuessWordPayload): CrosswordCellAction => ({\n type: cellActionTypes.GUESS_WORD,\n payload,\n})\n\nconst previousGuessAction = (payload: PrevGuessPayload): CrosswordCellAction => ({\n type: cellActionTypes.PREV_GUESS,\n payload,\n})\n\nconst clearCellAction = (payload: ClearCellPayload): CrosswordCellAction => ({\n type: cellActionTypes.CLEAR_CELL,\n payload,\n})\n\nconst clearCellsAction = (payload: ClearCellsPayload): CrosswordCellAction => ({\n type: cellActionTypes.CLEAR_CELLS,\n payload,\n})\n\nconst clearClueAction = (payload: ClearCluePayload): CrosswordCellAction => ({\n type: cellActionTypes.CLEAR_CLUE,\n payload,\n})\n\nconst revealCellAction = (payload: RevealCellPayload): CrosswordCellAction => ({\n type: cellActionTypes.REVEAL_CELL,\n payload,\n})\n\nconst revealClueAction = (payload: RevealCluePayload): CrosswordCellAction => ({\n type: cellActionTypes.REVEAL_CLUE,\n payload,\n})\n\nconst checkCellAction = (payload: CheckCellPayload): CrosswordCellAction => ({\n type: cellActionTypes.CHECK_CELL,\n payload,\n})\n\nconst checkClueAction = (payload: CheckCluePayload): CrosswordCellAction => ({\n type: cellActionTypes.CHECK_CLUE,\n payload,\n})\n\nconst fillCodebarAction = (payload: FillCodebarPayload): CrosswordCellAction => ({\n type: cellActionTypes.FILL_CODEBAR,\n payload,\n})\n\nconst revealCodeBarAction = (payload: RevealCodebarPayload): CrosswordCellAction => ({\n type: cellActionTypes.REVEAL_CODEBAR,\n payload,\n})\n\nconst swapValuesAction = (payload: SwapValuesPayload): CrosswordCellAction => ({\n type: cellActionTypes.SWAP_VALUES,\n payload,\n})\n\nexport const guess = (payload: GuessCellPayload) => (dispatch: TDispatch) => {\n dispatch(guessAction(payload))\n dispatch(resetCorrectStatuses())\n}\n\nexport const guessWord = (word: string[]) => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const cellIndices = getSelectedClueCells(state)\n dispatch(guessWordAction({ word, cellIndices, skipAddGuessToServer: false }))\n}\n\nexport const clearCell = (payload: ClearCellPayload, cellStatus: CellStatusType) => (dispatch: TDispatch) => {\n if (cellStatus !== cellStatuses.REVEALED && cellStatus !== cellStatuses.INITIAL) {\n dispatch(clearCellAction(payload))\n }\n}\n\nexport const clearCells = (payload: ClearCellsPayload) => (dispatch: Dispatch) => dispatch(clearCellsAction(payload))\n\nexport const clearSelectedCell = () => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const { selectedCellIndex } = state.selection\n const selectedCellStatus = state.cells.cellData[selectedCellIndex].status\n\n dispatch(clearCell({ cellIndex: selectedCellIndex }, selectedCellStatus))\n}\n\nexport const clearClue = (payload: ClearCluePayload) => (dispatch: Dispatch) => (\n dispatch(clearClueAction(payload))\n)\n\nexport const clearSelectedClue = () => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const clueCells = getSelectedClueCells(state)\n\n dispatch(clearClue({ clueCells }))\n}\n\nexport const revealCell = (payload: RevealCellPayload, cellStatus: CellStatusType) => (dispatch: Dispatch) => {\n if (cellStatus !== cellStatuses.REVEALED) {\n dispatch(revealCellAction(payload))\n }\n}\n\nexport const revealSelectedCell = () => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const { selectedCellIndex } = state.selection\n const selectedCellStatus = state.cells.cellData[selectedCellIndex].status\n\n dispatch(revealCell({\n cellIndex: selectedCellIndex,\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n }, selectedCellStatus))\n}\n\nexport const revealClue = (clueCells: number[], shouldAnimateDirectly = false) => (dispatch: Dispatch) => (\n dispatch(revealClueAction({\n clueCells,\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n shouldAnimateDirectly,\n }))\n)\n\nexport const revealSelectedClue = () => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const clueCells = getSelectedClueCells(state)\n\n dispatch(revealClue(clueCells))\n}\n\nexport const checkCell = (payload: CheckCellPayload) => (dispatch: Dispatch) => {\n dispatch(checkCellAction(payload))\n}\n\nexport const checkSelectedCell = () => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const { selectedCellIndex } = state.selection\n const selectedCellStatus = state.cells.cellData[selectedCellIndex].status as CellStatusType\n\n if (selectedCellStatus !== cellStatuses.REVEALED) {\n dispatch(checkCell({ cellIndex: selectedCellIndex }))\n }\n}\n\nexport const checkClue = (payload: CheckCluePayload) => (dispatch: Dispatch) => (\n dispatch(checkClueAction(payload))\n)\n\nexport const checkSelectedClue = () => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const selectedClueCells = getSelectedClueCells(state)\n dispatch(checkClue({ clueCells: selectedClueCells }))\n}\n\nexport const fillCodebar = (payload: FillCodebarPayload, cellIndex: number) => (dispatch: Dispatch, getState: () => CommonCrosswordStoreState) => {\n /* A REVEALED or INITIAL cell wont get removed. */\n if (!(getState().cells.cellData.find((cell, index) => (index === cellIndex)\n && (cell.status === cellStatuses.REVEALED || cell.status === cellStatuses.INITIAL)))) {\n dispatch(fillCodebarAction(payload))\n }\n}\n\nexport const revealCodeBar = (payload: RevealCodebarPayload) => (dispatch: Dispatch) => {\n if (payload.cellIndex != null) {\n dispatch(revealCodeBarAction(payload))\n }\n}\n\nexport const swapValues = (payload: SwapValuesPayload) => (dispatch: Dispatch) => {\n dispatch(swapValuesAction(payload))\n}\n\nexport const setPreviousGuess = (payload: PrevGuessPayload) => (dispatch: Dispatch) => (\n dispatch(previousGuessAction(payload))\n)\n\nexport const { revealPuzzle } = commonCellActions\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\nexport const { resetCorrectStatuses } = commonCellActions\n","export const SELECT_CLUE = 'SELECT_CLUE'\nexport const SELECT_CELL = 'SELECT_CELL'\nexport const SWITCH_DIRECTION = 'SWITCH_DIRECTION'\nexport const SELECT_CATEGORY = 'SELECT_CATEGORY'\nexport const REMOVE_CATEGORY = 'REMOVE_CATEGORY'\n","import { type Dispatch } from 'redux'\nimport { isMobile } from 'react-device-detect'\nimport directions, { DirectionType } from 'common_packages/assets/js/constants/directions'\nimport * as settingsActions from 'common_packages/assets/js/actions/settingsActions'\nimport { hasInitialKeyboardHidden } from 'common_packages/assets/js/store/middleware/initialKeyboardHiddenMiddleware'\nimport { getClueIndices, getUniqueOrFirstClueIndex } from 'common_crossword_packages/assets/js/actions/selectionUtilities'\nimport { type TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport * as cellActions from './cellActions'\nimport * as selectionActionTypes from './selectionActionTypes'\nimport {\n CommonCrosswordAction,\n CommonCrosswordSelectionAction,\n SelectCategoryPayload,\n SelectCellPayload,\n SelectCluePayload,\n SwitchDirectionPayload,\n} from './types'\n\ntype ClueIndex = {\n index?: number\n keyIndex?: number\n}\n\nconst selectCellAction = (payload: SelectCellPayload): CommonCrosswordSelectionAction => ({\n type: selectionActionTypes.SELECT_CELL,\n payload,\n})\n\nconst selectClueAction = (payload: SelectCluePayload): CommonCrosswordSelectionAction => ({\n type: selectionActionTypes.SELECT_CLUE,\n payload,\n})\n\nconst switchDirectionAction = (payload: SwitchDirectionPayload): CommonCrosswordSelectionAction => ({\n type: selectionActionTypes.SWITCH_DIRECTION,\n payload,\n})\n\nconst removeCategorySelectionAction = (): CommonCrosswordSelectionAction => ({\n type: selectionActionTypes.REMOVE_CATEGORY,\n})\n\nconst selectCategoryAction = (payload: SelectCategoryPayload): CommonCrosswordSelectionAction => ({\n type: selectionActionTypes.SELECT_CATEGORY,\n payload,\n})\n\nexport const selectCategory = (category: string) => (dispatch: Dispatch) => {\n dispatch(selectCategoryAction({ category }))\n}\n\nexport const removeCategorySelection = () => (dispatch: Dispatch) => {\n dispatch(removeCategorySelectionAction())\n}\n\nexport const selectClue = (payload) => (dispatch: TDispatch) => {\n if (Object.keys(payload.clues ?? {}).length === 0) { return }\n\n const horizontalClueIndices = getClueIndices(payload.clues.horizontalClueCells, payload.selectedCellIndex)\n const verticalClueIndices = getClueIndices(payload.clues.verticalClueCells, payload.selectedCellIndex)\n\n let verticalClueIndex\n let horizontalClueIndex\n if (payload.selectedCellIndex === payload.selection?.selectedCellIndex) {\n // if prev direction was vertical\n ({ horizontalClueIndex, verticalClueIndex } = getClueIndexForDirection({\n horizontalClueIndices,\n verticalClueIndices,\n selection: payload.selection,\n }))\n\n const switchForDirection = shouldSwitchDirectionWhenSelected(horizontalClueIndex, verticalClueIndex, horizontalClueIndices, verticalClueIndices, payload.direction)\n if (switchForDirection) {\n dispatch(switchDirection({ direction: payload.direction }))\n }\n } else {\n ({\n horizontalClueIndex,\n verticalClueIndex,\n } = getDefaultClueindexForDirection(horizontalClueIndices, verticalClueIndices, payload.selection?.selectedClueIndex))\n\n const switchForDirection = shouldSwitchDirectionWhenMoving(payload.direction, horizontalClueIndex, verticalClueIndex)\n if (switchForDirection) {\n dispatch(switchDirection({ direction: payload.direction }))\n }\n }\n if (payload.solution) {\n dispatch(selectClueAction({ selectedClueIndex: [horizontalClueIndex?.index, verticalClueIndex?.index] }))\n dispatch(cellActions.resetCorrectStatuses())\n }\n}\n\n// Checks if it's possible to switch direction at the current cell.\nfunction shouldSwitchDirectionWhenSelected(horizontalClueIndex: ClueIndex, verticalClueIndex: ClueIndex, horizontalClueIndexes: ClueIndex[], verticalClueIndexes: ClueIndex[], direction: DirectionType) {\n if (direction === directions.HORIZONTAL) {\n return verticalClueIndex && ((horizontalClueIndexes.length > 1 && horizontalClueIndex.keyIndex === 0) || horizontalClueIndexes.length === 1)\n }\n if (direction === directions.VERTICAL) {\n return horizontalClueIndex && ((verticalClueIndexes.length > 1 && verticalClueIndex.keyIndex === 0) || verticalClueIndexes.length === 1)\n }\n return false\n}\n\n// Checks if the current direction is possible with the current selected clue.\nfunction shouldSwitchDirectionWhenMoving(direction, horizontalClueIndex, verticalClueIndex) {\n if (!horizontalClueIndex && !verticalClueIndex) {\n return false\n }\n return (direction === directions.HORIZONTAL\n && (horizontalClueIndex?.index == null))\n || (direction === directions.VERTICAL\n && (verticalClueIndex?.index == null))\n}\n\nfunction getClueIndexForDirection({\n horizontalClueIndices,\n verticalClueIndices,\n selection,\n}) {\n let {\n horizontalClueIndex,\n verticalClueIndex,\n } = getDefaultClueindexForDirection(horizontalClueIndices, verticalClueIndices)\n if (directions.VERTICAL === selection?.direction) {\n verticalClueIndex = getUniqueOrFirstClueIndex(verticalClueIndices, selection.selectedClueIndex[1])\n }\n if (directions.HORIZONTAL === selection?.direction) {\n horizontalClueIndex = getUniqueOrFirstClueIndex(horizontalClueIndices, selection.selectedClueIndex[0])\n }\n\n return {\n horizontalClueIndex,\n verticalClueIndex,\n }\n}\n\nfunction getDefaultClueindexForDirection(horizontalClueIndexes, verticalClueIndexes, currentSelectedClueIndex = null) {\n const verticalClueIndex = selectPreviousClueIndex(verticalClueIndexes, currentSelectedClueIndex, directions.VERTICAL)\n const horizontalClueIndex = selectPreviousClueIndex(horizontalClueIndexes, currentSelectedClueIndex, directions.HORIZONTAL)\n return {\n verticalClueIndex,\n horizontalClueIndex,\n }\n}\n\nfunction selectPreviousClueIndex(indexes, currentSelectedClueIndex, direction) {\n if (currentSelectedClueIndex?.length === 2) {\n const indexOfDirection = directions.getIndexOfDirection(direction)\n const clueIndex = indexes.find((item) => currentSelectedClueIndex[indexOfDirection] === item?.index)\n if (clueIndex) {\n return clueIndex\n }\n }\n return indexes[0]\n}\n\nexport const selectCell = (payload) => (dispatch: TDispatch) => {\n // Cannot select cells without solution (i.e. clue cells)\n if (payload.solution) {\n dispatch(selectCellAction(payload))\n dispatch(cellActions.resetCorrectStatuses())\n }\n}\n\nexport const deselectCells = () => (dispatch: TDispatch) => {\n dispatch({\n type: selectionActionTypes.SELECT_CELL,\n payload: {\n selectedCellIndex: null,\n },\n })\n}\n\nexport const switchDirection = (payload: SwitchDirectionPayload) => (dispatch: TDispatch) => {\n dispatch(cellActions.resetCorrectStatuses())\n const newPayload: SwitchDirectionPayload = { direction: directions.getOpposite(payload.direction) }\n return dispatch(switchDirectionAction(newPayload))\n}\n\nexport const setDirection = (payload: SwitchDirectionPayload) => (dispatch: TDispatch) => {\n dispatch(switchDirectionAction(payload))\n}\n\nexport const handleCellSelection = ({\n cellIndex,\n isSelected,\n direction,\n solution,\n clues,\n selection,\n}: any): any => (dispatch, getState) => {\n const {\n gameType, showKeyboard, hardwareKeyboardDetected, clientSettings,\n } = getState().settings\n /* When clientsetting hideKeyboardToggle !== true, for Arrowword-plus and Codebreaker-plus puzzles, we want to toggle the keyboard on when\n * clicking on an input cell and off when clicking on a clue cell. Only on mobile devices, on forceMobile we always\n * show the keyboard but give the option to exit mobile mode.\n */\n if ((hasInitialKeyboardHidden(gameType)) && !clientSettings?.hideKeyboardToggle && !hardwareKeyboardDetected && isMobile) {\n if (!!solution.length !== showKeyboard) {\n dispatch(settingsActions.toggleKeyboard())\n }\n }\n\n if (!isSelected) {\n dispatch(selectCell({\n selectedCellIndex: cellIndex,\n solution,\n }))\n }\n\n dispatch(selectClue({\n selectedCellIndex: cellIndex,\n direction,\n clues,\n solution,\n selection,\n }))\n}\n","import { type CommonCrosswordAction } from 'common_crossword_packages/assets/js/actions/types'\nimport { type Dispatch } from 'redux'\nimport merge from 'lodash/merge'\nimport { INIT_GAME_DATA } from 'common_packages/assets/js/actions/gameActionTypes'\nimport { isMobileDevice } from 'common_packages/assets/js/utilities/devices'\nimport { games, type GameType } from 'common_packages/assets/js/types/gameDataTypes'\nimport { CommonMiddlewareAPI } from './types'\n\nexport const hasInitialKeyboardHidden = (gameType: GameType) => {\n const gameTypesWithInitialKeyboardHidden: GameType[] = [\n games.ARROWWORD_PLUS,\n games.CODEBREAKER_PLUS,\n ]\n return gameTypesWithInitialKeyboardHidden.includes(gameType)\n}\n/* When clientsetting hideKeyboardToggle !== true we want to start with the\n* keyboard hidden.\n*/\nconst initialKeyboardHiddenMiddleware = (storeApi: CommonMiddlewareAPI) => (next: Dispatch) => (action: CommonCrosswordAction) => {\n if (action.type === INIT_GAME_DATA) {\n const { hideKeyboardToggle } = storeApi.getState().settings.clientSettings\n\n if (!hideKeyboardToggle && isMobileDevice && hasInitialKeyboardHidden(action.payload.gameType)) {\n return next(merge(action, {\n payload: {\n extraProps: {\n showKeyboard: false,\n },\n },\n }))\n }\n }\n\n return next(action)\n}\n\nexport default initialKeyboardHiddenMiddleware\n","import directions from 'common_packages/assets/js/constants/directions'\nimport { games } from 'common_packages/assets/js/types/gameDataTypes'\nimport { CluesReducerState } from '../reducers/cluesReducer'\n\nexport const getSelectedClueCells = ({ selection, clues, settings }): number[] => {\n const { direction, selectedClueIndex, selectedCellIndex } = selection\n const { gameType } = settings\n\n if (gameType.includes(games.CONTINUOUS)) {\n return getContinuousClueCells(selectedCellIndex, clues, direction) ?? []\n }\n return getCommonCrossWordClueCells(selectedClueIndex, clues, direction) ?? []\n}\n\nfunction getCommonCrossWordClueCells(selectedClueIndex, clues, direction) {\n return (direction === directions.HORIZONTAL\n ? clues.horizontalClueCells[selectedClueIndex[0]]\n : clues.verticalClueCells[selectedClueIndex[1]])\n}\n\nfunction getContinuousClueCells(selectedCellIndex, clues, direction) {\n const clueWordCells = direction === directions.HORIZONTAL ? clues.horizontalClueWordCells : clues.verticalClueWordCells\n return clueWordCells.find((word) => word.includes(selectedCellIndex))\n}\n\nexport const hasClueForDirection = ({\n selectedCellIndex,\n clues,\n direction,\n}: {\n selectedCellIndex: number,\n clues: CluesReducerState,\n direction: string,\n}) => {\n const horizontalIndices = getClueIndices(clues.horizontalClueCells, selectedCellIndex)\n const verticalIndices = getClueIndices(clues.verticalClueCells, selectedCellIndex)\n\n return (direction === directions.HORIZONTAL && horizontalIndices.length > 0)\n || (direction === directions.VERTICAL && verticalIndices.length > 0)\n}\n\n/*\n Helper methods of selectClue\n */\nexport function isBent(clueCellsIndices: number[]) {\n type Item = {\n diff: number,\n val: number\n }\n const risingNumbers = clueCellsIndices.reduce((acc: Item[], item: number) => {\n const lastItem = acc.length > 0 ? acc[acc.length - 1] : null\n if (lastItem) {\n const diff = Math.abs(item - lastItem.val)\n acc.push({ val: item, diff })\n } else {\n acc.push({ val: item, diff: 0 })\n }\n return acc\n }, []).filter((n: Item) => n.diff > 0)\n return risingNumbers.some((number) => number.diff !== risingNumbers[0]?.diff)\n}\n\nexport function getUniqueOrFirstClueIndex(clues, currentClueIndexForDirection) {\n const indexOfClue = clues.findIndex((c) => c.index === currentClueIndexForDirection)\n const cluesWithIndexes = clues.map((clue, index) => ({ ...clue, keyIndex: index }))\n let clueIndex\n\n if (cluesWithIndexes.length === 1) {\n clueIndex = cluesWithIndexes[0]\n } else if (cluesWithIndexes.length > 1) {\n clueIndex = cluesWithIndexes.find((clue) => clue.index !== currentClueIndexForDirection && indexOfClue < clue.keyIndex)\n }\n\n if (!clueIndex) {\n clueIndex = cluesWithIndexes[0]\n }\n return clueIndex\n}\n\nexport function getClueIndices(cluecells: number[][], selectedCellIndex: number) {\n const newClueCells = cluecells?.reduce<{ index: number; isBent: boolean }[]>((accumulator, cells, index) => {\n if (cells?.includes(selectedCellIndex)) {\n accumulator.push({ index, isBent: isBent(cells) })\n }\n return accumulator\n }, [])\n const sortedNewClueCellsIndices = newClueCells?.sort((a, b) => a.isBent - b.isBent).map(({ index }) => ({ index }))\n return sortedNewClueCellsIndices\n}\n","export const KEY_SEE_IMAGE = 'translate.see-image'\n","import directions, { DirectionType } from 'common_packages/assets/js/constants/directions'\n\nconst isCellIndexWithinSelectedClueIndexes = (cellIndex, clueCells, selectedClue): any => {\n let withinSelectedClueIndexes = false\n if (selectedClue > -1) {\n withinSelectedClueIndexes = clueCells[selectedClue]?.includes(cellIndex)\n }\n\n return withinSelectedClueIndexes\n}\n\nexport function isInSelectedClue(\n direction: DirectionType,\n cellIndex: number,\n horizontalClueCells: number[][],\n verticalClueCells: number[][],\n selectedClueIndex: number[],\n activeResultWord?: boolean,\n) {\n let withinClue: boolean\n\n if (activeResultWord) {\n withinClue = false\n } else if (direction === directions.HORIZONTAL) {\n withinClue = isCellIndexWithinSelectedClueIndexes(cellIndex, horizontalClueCells, selectedClueIndex[0])\n } else if (direction === directions.VERTICAL) {\n withinClue = isCellIndexWithinSelectedClueIndexes(cellIndex, verticalClueCells, selectedClueIndex[1])\n } else {\n withinClue = false\n }\n\n return withinClue\n}\n\nexport function getCellsOfSelectedClue(\n direction,\n clues,\n selectedClueIndex,\n): Array {\n let clueCells\n const { horizontalClueCells, verticalClueCells } = clues\n\n if (selectedClueIndex.findIndex((item) => item !== -1 && item !== undefined) === -1) {\n clueCells = null\n } else if (direction === directions.HORIZONTAL && horizontalClueCells?.length > 0) {\n clueCells = horizontalClueCells[selectedClueIndex[0]]\n } else if (direction === directions.VERTICAL && verticalClueCells?.length > 0) {\n clueCells = verticalClueCells[selectedClueIndex[1]]\n }\n\n return clueCells\n}\n\nexport const getClueCellOfSelectedClue = (\n direction,\n cells,\n selectedClueIndex,\n) => {\n let selectedClueIndexForDirection\n if (direction === directions.HORIZONTAL) {\n selectedClueIndexForDirection = selectedClueIndex[0]\n } else if (direction === directions.VERTICAL) {\n selectedClueIndexForDirection = selectedClueIndex[1]\n }\n\n if (selectedClueIndexForDirection === -1 || selectedClueIndexForDirection === undefined) return null\n\n const clueCell = cells.cellData.findIndex((cell) => (\n cell.clues?.find((clue) => clue.clueIndex === selectedClueIndexForDirection\n && clue.direction === direction)\n ))\n\n return clueCell === -1 ? null : clueCell\n}\n\nexport const getMemoizedLabelFromClueCells = getLabelFromClueCells()\n\nfunction getLabelFromClueCells() {\n let cache = {}\n let cacheKey = ''\n\n return function getLabelForIndex({\n labelCacheKey,\n cellIndex,\n horizontalClues,\n verticalClues,\n horizontalClueCells,\n verticalClueCells,\n }) {\n if (labelCacheKey === cacheKey && cache[cellIndex] != null) {\n return cache[cellIndex]\n }\n if (labelCacheKey !== cacheKey) {\n cacheKey = labelCacheKey\n cache = {}\n }\n\n const labels = {\n vertical: '',\n horizontal: '',\n }\n\n const firstIndexHorizontalClueCells = horizontalClueCells.map((cell) => cell[0])\n const firstIndexVerticalClueCells = verticalClueCells.map((cell) => cell[0])\n\n const horizontalLabelIndex = firstIndexHorizontalClueCells.indexOf(cellIndex)\n const verticalLabelIndex = firstIndexVerticalClueCells.indexOf(cellIndex)\n\n if (horizontalLabelIndex > -1) {\n labels.horizontal = horizontalClues[horizontalLabelIndex]?.label\n }\n\n if (verticalLabelIndex > -1) {\n labels.vertical = verticalClues[verticalLabelIndex]?.label\n }\n\n const label = labels.horizontal || labels.vertical\n cache[cellIndex] = label\n\n return label\n }\n}\n\nexport const getSelectedClue = (selection, clues, cells) => {\n let selectedClue = ''\n let selectedClueCells = []\n\n if (selection.direction === directions.HORIZONTAL && selection.selectedClueIndex[0] > -1) {\n selectedClue = clues.horizontalClues[selection.selectedClueIndex[0]]?.text\n selectedClueCells = clues.horizontalClueCells[selection.selectedClueIndex[0]]\n } else if (selection.direction === directions.VERTICAL && selection.selectedClueIndex[1] > -1) {\n selectedClue = clues.verticalClues[selection.selectedClueIndex[1]]?.text\n selectedClueCells = clues.verticalClueCells[selection.selectedClueIndex[1]]\n }\n\n /* Don't show selected clue if exposing clue */\n const solution = selectedClueCells?.map((index) => cells.cellData[index].solution)\n .join('')\n\n return selectedClue && selectedClue === solution.toLowerCase() || selection.activeResultWord ? '' : selectedClue\n}\n","// Codebreaker uses these cellActions too, since it uses the same action logic as filippine with the code bar.\nimport * as commonCrosswordActions from 'common_crossword_packages/assets/js/actions/cellActions'\nimport * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport { getSelectedClueCells } from 'common_crossword_packages/assets/js/actions/selectionUtilities'\nimport { REVEAL_GAME_STATUS_DELAY } from 'common_packages/assets/js/constants/delays'\nimport { CommonCrosswordStoreState } from 'common_crossword_packages/assets/js/reducers'\nimport { CrosswordCellAction } from 'common_crossword_packages/assets/js/actions/types'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\n\nexport const guessWord = (word) => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const { cellData } = state.cells\n const selectedClueCells = getSelectedClueCells(state)\n\n dispatch(commonCrosswordActions.guessWord(word))\n selectedClueCells.forEach((cellIndex, index) => {\n const { codeNumber } = cellData[cellIndex]\n dispatch(commonCrosswordActions.fillCodebar({\n codeNumber,\n value: word[index],\n }, cellIndex))\n })\n}\n\nexport const clearSelectedCell = () => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const { cellData } = state.cells\n const { selectedCellIndex } = state.selection\n const selectedCellStatus = state.cells.cellData[selectedCellIndex].status\n\n dispatch(commonCrosswordActions.clearCell({ cellIndex: selectedCellIndex }, selectedCellStatus))\n const { codeNumber } = cellData[selectedCellIndex]\n dispatch(commonCrosswordActions.fillCodebar({\n codeNumber,\n value: '',\n }, selectedCellIndex))\n}\n\nexport const clearSelectedClue = () => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const { cellData } = state.cells\n\n const selectedClueCells = getSelectedClueCells(state)\n\n dispatch(commonCrosswordActions.clearClue({ clueCells: selectedClueCells }))\n selectedClueCells.forEach((cellIndex) => {\n const { codeNumber } = cellData[cellIndex]\n dispatch(commonCrosswordActions.fillCodebar({\n codeNumber,\n value: '',\n }, cellIndex))\n })\n}\n\nexport const revealCell = (payload) => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const { cellData } = state.cells\n\n dispatch(commonCrosswordActions.revealCell(payload, payload.cellStatus))\n dispatch(commonCrosswordActions.revealCodeBar({\n ...payload,\n codeNumber: cellData[payload.cellIndex].codeNumber,\n value: cellData[payload.cellIndex].solution,\n }))\n}\n\nexport const revealSelectedCell = () => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const { selectedCellIndex } = state.selection\n const selectedCellStatus = state.cells.cellData[selectedCellIndex].status\n\n dispatch(revealCell({\n cellIndex: selectedCellIndex,\n cellStatus: selectedCellStatus,\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n\n }))\n}\n\nexport const revealSelectedClue = () => (dispatch: TDispatch, getState: () => CommonCrosswordStoreState) => {\n const state = getState()\n const { cellData } = state.cells\n\n const selectedClueCells = getSelectedClueCells(state)\n\n // Animates the clue directly instead of cell by cell, since we already get an animation for the reveal codebar.\n dispatch(commonCrosswordActions.revealClue(selectedClueCells, true))\n selectedClueCells.forEach((cellIndex) => {\n dispatch(commonCrosswordActions.revealCodeBar({\n cellIndex,\n codeNumber: cellData[cellIndex].codeNumber,\n value: cellData[cellIndex].solution,\n }))\n })\n}\n\nexport const { checkSelectedCell } = commonCrosswordActions\nexport const { checkSelectedClue } = commonCrosswordActions\nexport const { revealPuzzle } = commonCellActions\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\n","import { type Reducer } from 'redux'\nimport { REHYDRATE } from 'redux-persist'\nimport { type PuzzleMeta } from 'common_crossword_packages/assets/js/api/transformers/utilities'\nimport * as gameActionTypes from 'common_packages/assets/js/actions/gameActionTypes'\nimport * as cellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport * as selectionActionTypes from 'common_crossword_packages/assets/js/actions/selectionActionTypes'\nimport cellStatuses, { type CellStatusType } from 'common_packages/assets/js/constants/statuses'\nimport { HoneycombAction } from '../actions/types'\nimport { canWriteCell } from '../components/store/utils'\n\nexport type HoneycombCell = {\n x: number\n y: number\n value: string\n solution: string\n cellType: CellType\n status: CellStatusType,\n}\n\nexport enum CellType { Fillable, ClueCell }\n\nexport type HexOrientation = 'PointyTop' | 'FlatTop'\n\nexport type HoneycombCellsStoreState = PuzzleMeta & {\n cellData: HoneycombCell[]\n hexOrientation: HexOrientation\n previousGuess?: { // this is the 'last move made'\n value: string,\n cellIndex: number,\n backspace?: boolean\n }\n puzzleCells: number[]\n}\n\nexport const initialCellsState: HoneycombCellsStoreState = {\n rows: 0,\n columns: 0,\n cellData: [],\n hexOrientation: 'PointyTop',\n puzzleCells: [],\n}\n\n// eslint-disable-next-line default-param-last\nconst cellsReducer: Reducer = (state = initialCellsState, action: HoneycombAction) => {\n switch (action.type) {\n case REHYDRATE: {\n if (!action.payload) {\n return state\n }\n\n return {\n ...action.payload.cells,\n cellData: action.payload.cells.cellData?.map((cell) => {\n return { ...cell, delayForAnimation: undefined }\n }) ?? [],\n }\n }\n\n case gameActionTypes.INIT_GAME_DATA: {\n return action.payload.cells\n }\n\n case cellActionTypes.GUESS: {\n const { cellIndex, value } = action.payload\n const cellData = state.cellData.map((c, i) => {\n if (i === cellIndex && canWriteCell(c)) {\n return {\n ...c,\n status: cellStatuses.UNKNOWN,\n value,\n delayForAnimation: undefined,\n }\n }\n if (c.status === cellStatuses.CORRECT) {\n return {\n ...c,\n status: cellStatuses.UNKNOWN,\n delayForAnimation: undefined,\n }\n }\n return c\n })\n return {\n ...state,\n cellData,\n previousGuess: {\n value,\n cellIndex,\n },\n }\n }\n\n case selectionActionTypes.SELECT_CELL:\n case selectionActionTypes.SELECT_CLUE: {\n const cellData = state.cellData.map((cell) => {\n if (cell.status === cellStatuses.CORRECT) {\n return {\n ...cell,\n status: cellStatuses.UNKNOWN,\n delayForAnimation: undefined,\n }\n }\n return cell\n })\n return {\n ...state,\n cellData,\n previousGuess: {\n value: '',\n cellIndex: -1,\n backspace: action.type === selectionActionTypes.SELECT_CELL && action.payload.backspace,\n },\n }\n }\n\n // Checks the cell indicated by `payload.cellIndex`. Sets `status` property depending on whether the correct solution was provided\n case cellActionTypes.CHECK_CELL: {\n return {\n ...state,\n cellData: state.cellData.map((cell, index) => {\n if (index === action.payload.cellIndex && cell.value !== '' && canWriteCell(cell)) {\n return {\n ...cell,\n status: (cell.value === cell.solution ? cellStatuses.CORRECT : cellStatuses.INCORRECT),\n delayForAnimation: 0,\n }\n }\n return cell\n }),\n }\n }\n\n // Checks all cells in the list of `payload.clueCells`. Sets `status` property depending on whether the correct solution was provided\n case cellActionTypes.CHECK_CLUE: {\n const cellData = state.cellData.map((cell, index) => {\n const indexInClue = action.payload.clueCells.indexOf(index)\n if (indexInClue === -1\n || cell.value === ''\n || !canWriteCell(cell)) {\n return cell\n }\n return {\n ...cell,\n status: (cell.value === cell.solution ? cellStatuses.CORRECT : cellStatuses.INCORRECT),\n delayForAnimation: (3 - (Math.abs(indexInClue - 3))) / 3, // Don't give away direction ;)\n }\n })\n\n return {\n ...state,\n cellData,\n }\n }\n\n case cellActionTypes.CHECK_PUZZLE: {\n let correctPuzzle = true\n // first pass, find incorrects\n let cellData = state.cellData.map((cell) => {\n if (!canWriteCell(cell) || !cell.value) {\n return cell\n }\n\n if (cell.value !== cell.solution) {\n correctPuzzle = false\n return {\n ...cell,\n status: cellStatuses.INCORRECT,\n delayForAnimation: undefined,\n }\n }\n return cell\n })\n\n // Second pass, mark all cells as correct\n if (correctPuzzle) {\n cellData = state.cellData.map((cell) => {\n if (canWriteCell(cell) && cell.value !== '') {\n return {\n ...cell,\n status: cellStatuses.CORRECT,\n delayForAnimation: undefined,\n }\n }\n return cell\n })\n }\n\n return {\n ...state,\n cellData,\n }\n }\n\n // Reveals the cell indicated by `payload.cellIndex`\n case cellActionTypes.REVEAL_CELL: {\n return {\n ...state,\n cellData: state.cellData.map((cell, index) => {\n if (index === action.payload.cellIndex && cell.status !== cellStatuses.INITIAL) {\n return {\n ...cell,\n value: cell.solution,\n status: cellStatuses.REVEALED,\n delayForAnimation: 0,\n }\n }\n return cell\n }),\n }\n }\n\n // Reveals all cells in the list of `payload.clueCells`.\n case cellActionTypes.REVEAL_CLUE: {\n const cellData = state.cellData.map((cell, index) => {\n const indexInClue = action.payload.clueCells.indexOf(index)\n if (indexInClue === -1 || cell.status === cellStatuses.INITIAL) {\n return cell\n }\n return {\n ...cell,\n value: cell.solution,\n status: cellStatuses.REVEALED,\n delayForAnimation: indexInClue / (action.payload.clueCells.length - 1),\n }\n })\n return {\n ...state,\n cellData,\n }\n }\n\n // Reveals all cells in the puzzle\n case cellActionTypes.REVEAL_PUZZLE: {\n const cellData = state.cellData.map((cell) => {\n if (cell.solution === '' || !canWriteCell(cell)) {\n return cell\n }\n return {\n ...cell,\n value: cell.solution,\n status: cellStatuses.REVEALED,\n delayForAnimation: undefined,\n }\n })\n\n return {\n ...state,\n cellData,\n }\n }\n\n case cellActionTypes.CLEAR_CELL: {\n const cellData = state.cellData.map((c, i) => {\n if (i === action.payload.cellIndex) {\n return {\n ...c,\n status: cellStatuses.UNKNOWN,\n value: '',\n delayForAnimation: undefined,\n }\n }\n return c\n })\n return {\n ...state,\n cellData,\n previousGuess: {\n value: '',\n cellIndex: -1,\n },\n }\n }\n\n // Clears all cells in the list of `payload.clueCells`.\n case cellActionTypes.CLEAR_CLUE: {\n const cellData = state.cellData.map((cell, index) => {\n if (!action.payload.clueCells.includes(index)\n || cell.value === ''\n || cell.status === cellStatuses.INITIAL\n || cell.status === cellStatuses.REVEALED) {\n return cell\n }\n return {\n ...cell,\n value: '',\n status: cellStatuses.UNKNOWN,\n delayForAnimation: undefined,\n }\n })\n\n return {\n ...state,\n cellData,\n }\n }\n\n case gameActionTypes.RESET_PUZZLE: {\n const cellData = state.cellData.map((c) => {\n if (canWriteCell(c) || c.status === cellStatuses.REVEALED) {\n return {\n ...c,\n status: cellStatuses.UNKNOWN,\n value: '',\n delayForAnimation: undefined,\n }\n }\n return c\n })\n return {\n ...state,\n cellData,\n }\n }\n\n case cellActionTypes.ERASE_MISTAKES: {\n const cellData = state.cellData.map((cell) => {\n if (cell.value !== cell.solution && canWriteCell(cell)) {\n return {\n ...cell,\n value: '',\n status: cellStatuses.UNKNOWN,\n delayForAnimation: undefined,\n }\n }\n return cell\n })\n return {\n ...state,\n cellData,\n }\n }\n\n default:\n return state\n }\n}\n\nexport default cellsReducer\n","import { type Reducer } from 'redux'\nimport * as gameActionTypes from 'common_packages/assets/js/actions/gameActionTypes'\nimport * as cellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport * as commonSelectionActionTypes from 'common_packages/assets/js/actions/selectionActionTypes'\nimport * as selectionActionTypes from 'common_crossword_packages/assets/js/actions/selectionActionTypes'\nimport cellStatuses from 'common_packages/assets/js/constants/statuses'\nimport { type HoneycombAction, SWITCH_ROTATION } from '../actions/types'\n\nexport enum Rotation { CW, CCW }\n\nexport type HoneycombSelectionStoreState = {\n selectedCellIndex: number\n rotation: Rotation // current rotation (determines which cell to go to after filling in a cell)\n\n // a cell can be associated with multiple clues, repeated clicking on a cell cycles through these clues\n // clueCycle keeps track of this\n clueCycle: number\n firstSelection: number\n activeResultWord: boolean\n}\n\nconst initialSelectionState: HoneycombSelectionStoreState = {\n selectedCellIndex: null,\n rotation: Rotation.CW,\n clueCycle: 0,\n firstSelection: null,\n activeResultWord: false,\n}\n\n// eslint-disable-next-line default-param-last\nconst selectionReducer: Reducer = (state = initialSelectionState, action: HoneycombAction) => {\n switch (action.type) {\n case gameActionTypes.PRELOAD_STATE: {\n return action.payload.selection\n }\n\n case gameActionTypes.INIT_GAME_DATA: {\n const selectedCellIndex = action.payload.cells.cellData.findIndex((c) => c.status !== cellStatuses.INITIAL)\n return {\n ...state,\n selectedCellIndex,\n firstSelection: selectedCellIndex, // store initial selection such that we can restore it on puzzle reset\n }\n }\n\n case selectionActionTypes.SELECT_CELL: {\n return {\n ...state,\n clueCycle: action.payload.clueCycle,\n selectedCellIndex: action.payload.cellIndex,\n }\n }\n\n case cellActionTypes.GUESS: {\n if (action.payload.nextCellIndexToSelect !== undefined) {\n return {\n ...state,\n selectedCellIndex: action.payload.nextCellIndexToSelect,\n clueCycle: action.payload.nextClueCycle,\n }\n }\n return state\n }\n\n case selectionActionTypes.SELECT_CLUE: {\n // To select a clue we need both cellIndex and clueCycle\n return {\n ...state,\n clueCycle: action.payload.clueCycle,\n selectedCellIndex: action.payload.cellIndex,\n }\n }\n\n case SWITCH_ROTATION: {\n return {\n ...state,\n rotation: 1 - state.rotation,\n }\n }\n\n case gameActionTypes.RESET_PUZZLE: {\n const { firstSelection } = state\n return {\n ...initialSelectionState,\n selectedCellIndex: firstSelection,\n firstSelection,\n }\n }\n\n case commonSelectionActionTypes.SET_RESULT_WORD_ACTIVE: {\n return {\n ...state,\n activeResultWord: true,\n }\n }\n\n case commonSelectionActionTypes.UNSET_RESULT_WORD_ACTIVE: {\n return {\n ...state,\n activeResultWord: false,\n }\n }\n default:\n return state\n }\n}\n\nexport default selectionReducer\n","import { HexOrientation } from '../../reducers/cellsReducer'\n\nexport const EQUILATERALTRIANGLE_ANGLE = 60 // each angle in a equilateral triangle\nexport const HEXAGON_RATIO = 0.8660254 // ratio between width and height\n\nexport enum Azimuth {\n East,\n SouthEast,\n South,\n SouthWest,\n West,\n NorthWest,\n North,\n NorthEast,\n}\n\nexport const CELL_NEIGHBOR_OFFSETS = {\n PointyTop: [\n [ // PointyTop even row\n { x: 1, y: 0 },\n { x: 1, y: 1 },\n { x: 0, y: 1 },\n { x: -1, y: 0 },\n { x: 0, y: -1 },\n { x: 1, y: -1 },\n ],\n [ // PointyTop odd row\n { x: 1, y: 0 },\n { x: 0, y: 1 },\n { x: -1, y: 1 },\n { x: -1, y: 0 },\n { x: -1, y: -1 },\n { x: 0, y: -1 },\n ],\n ],\n FlatTop: [\n [ // FlatTop even column\n { x: 1, y: 0 },\n { x: 1, y: 1 },\n { x: 0, y: 1 },\n { x: -1, y: 1 },\n { x: -1, y: -1 },\n { x: 0, y: -1 },\n ],\n [ // FlatTop odd column\n { x: 1, y: 0 },\n { x: 0, y: 1 },\n { x: -1, y: 0 },\n { x: -1, y: -1 },\n { x: 0, y: -1 },\n { x: 1, y: -1 },\n ],\n ],\n}\n\nexport const toRadians = (degs: number) => Math.PI * degs / 180\n\ntype Coords = { x: number, y: number }\n\n// Hexagon Height = X * Hexagon Width. Returns X.\nexport const getHexagonRatio = (hexOrientation) => (hexOrientation === 'PointyTop' ? 1 / HEXAGON_RATIO : HEXAGON_RATIO)\n\nexport const getHexHeight = (width: number, hexOrientation: HexOrientation) => width * getHexagonRatio(hexOrientation)\n\n// Returns the direction an arrow is pointing in when going `from` a hex, `to` a hex, given the correct `hexOrientation`\n// Note that PointyTop has the following directions: East, SouthEast, SouthWest, West, NorthWest, NorthEast\n// FlatTop has the following directions: SouthEast, South, SouthWest, NorthWest, North, NorthEast\nexport const getHexDirection = (from: Coords, to: Coords, hexOrientation: HexOrientation) => {\n if (hexOrientation === 'PointyTop') {\n if (from.x === to.x) {\n if (to.y < from.y) {\n return (from.y % 2 === 0) ? Azimuth.NorthWest : Azimuth.NorthEast\n }\n if (to.y > from.y) {\n return (from.y % 2 === 0) ? Azimuth.SouthWest : Azimuth.SouthEast\n }\n } else if (to.x < from.x) {\n if (from.y % 2 === 0) {\n return Azimuth.West\n }\n if (to.y < from.y) {\n return Azimuth.NorthWest\n }\n if (to.y > from.y) {\n return Azimuth.SouthWest\n }\n return Azimuth.West\n } else if (to.x > from.x) {\n if (to.y === from.y) {\n return Azimuth.East\n }\n if (to.y < from.y) {\n return (from.y % 2 === 0) ? Azimuth.NorthEast : Azimuth.NorthWest\n }\n if (to.y > from.y) {\n return (from.y % 2 === 0) ? Azimuth.SouthEast : Azimuth.SouthWest\n }\n }\n }\n if (to.x === from.x) {\n if (to.y < from.y) {\n return Azimuth.North\n }\n if (to.y > from.y) {\n return Azimuth.South\n }\n } else if (to.x < from.x) {\n if (to.y < from.y) {\n return Azimuth.NorthWest\n }\n return Azimuth.SouthWest\n } else if (to.x > from.x) {\n if (to.y < from.y) {\n return Azimuth.NorthEast\n }\n return Azimuth.SouthEast\n }\n throw new Error(`Could not determine direction from ${from} to ${to}`)\n}\n","import cellStatuses from 'common_packages/assets/js/constants/statuses'\nimport { CellType, HoneycombCell, HoneycombCellsStoreState } from '../../reducers/cellsReducer'\nimport { HoneycombCluesStoreState } from '../../reducers/cluesReducer'\nimport { HoneycombSelectionStoreState, Rotation } from '../../reducers/selectionReducer'\nimport { CELL_NEIGHBOR_OFFSETS } from '../hex/utils'\n\nexport const createSelectionTail = (cells: HoneycombCellsStoreState, clues: HoneycombCluesStoreState, selection: HoneycombSelectionStoreState) => {\n const selectedClueCell = getSelectedClueCell(cells, clues, selection)\n if (!selectedClueCell) return []\n\n const cellIndices = getNeighboringCellIndices(cells, selectedClueCell, selection.rotation)\n\n const tail = createTail(selection.selectedCellIndex, cellIndices)\n return tail\n}\n\n// Returns all clues that have `cellIndex` in them\nexport const getCluesWithCellIndex = (clues: HoneycombCluesStoreState, cellIndex: number) => {\n return clues.clues.filter((c) => c.cellIndices.includes(cellIndex))\n}\n\n// Returns the currently selected clue\nexport const getSelectedClue = (clues: HoneycombCluesStoreState, selection: HoneycombSelectionStoreState) => {\n const allCluesWithSelectedCellIndex = getCluesWithCellIndex(clues, selection.selectedCellIndex)\n return allCluesWithSelectedCellIndex[selection.clueCycle % allCluesWithSelectedCellIndex.length]\n}\n\n// Returns the currently selected clue cell\nexport const getSelectedClueCell = (cells: HoneycombCellsStoreState, clues: HoneycombCluesStoreState, selection: HoneycombSelectionStoreState) => {\n const selectedClue = getSelectedClue(clues, selection)\n const { cellData } = cells\n return cellData.find((c) => c.value === selectedClue.number)\n}\n\n// Determines clueCycle for a new selection. Attempts to keep the same clue selected if possible\n// if the current selected cell is selected again, will cycle to the next clue\nexport const determineClueCycle = (nextSelectedCellIndex: number, selection: HoneycombSelectionStoreState, clues: HoneycombCluesStoreState) => {\n // attempt to keep the same clue selected\n const selectedClue = getSelectedClue(clues, selection)\n const cluesWithNextCellIndex = getCluesWithCellIndex(clues, nextSelectedCellIndex)\n let clueCycle = Math.max(cluesWithNextCellIndex.indexOf(selectedClue), 0)\n if (selection.selectedCellIndex === nextSelectedCellIndex) {\n // clicked on the cell that was already selected: cycle to the next clue\n clueCycle += 1\n }\n return clueCycle\n}\n\n// Returns true if the user can change the value of this cell\nexport const canWriteCell = (cell: HoneycombCell) => (\n cell.cellType === CellType.Fillable && cell.status !== cellStatuses.INITIAL && cell.status !== cellStatuses.REVEALED\n)\n\n// Returns a value that indicates whether selected cell is the last one of the current clue\nexport const getIsInLastCell = (cells: HoneycombCellsStoreState, clues: HoneycombCluesStoreState, selection: HoneycombSelectionStoreState) => {\n const selectedClue = getSelectedClue(clues, selection)\n const selectedClueCell = getSelectedClueCell(cells, clues, selection)\n const neighboring = getNeighboringCellIndices(cells, selectedClueCell, selection.rotation)\n const neighboringTail = createTail(selectedClue.cellIndices[0], neighboring)\n\n return selection.selectedCellIndex === neighboringTail[neighboringTail.length - 1]\n}\n\n// Returns all the cellIndices of the cells *around* @param aroundCell. Typically `aroundCell` will be a clue cell\n// The order is determined by param @rotation\nexport const getNeighboringCellIndices = (cells: HoneycombCellsStoreState, aroundCell: HoneycombCell, rotation: Rotation) => {\n const { cellData } = cells\n const oddOrEven = (cells.hexOrientation === 'PointyTop' ? aroundCell.y : aroundCell.x) % 2 // 0 if even, 1 if odd\n let neighborOffsets = CELL_NEIGHBOR_OFFSETS[cells.hexOrientation][oddOrEven]\n if (rotation === Rotation.CCW) {\n neighborOffsets = [...neighborOffsets].reverse()\n }\n const cellIndices = neighborOffsets.map((o) => (\n cellData.findIndex((c) => c.x === aroundCell.x + o.x && c.y === aroundCell.y + o.y)\n ))\n return cellIndices\n}\n\nexport const createCluesTail = (clues: HoneycombCluesStoreState, selection: HoneycombSelectionStoreState) => {\n const selectedClue = getSelectedClue(clues, selection)\n if (!selectedClue) return []\n\n const tail = createTail(selectedClue, clues.clues)\n return tail\n}\n\n// Returns an array with the items in @param all, but then\n// sorted such that the first item is the item defined by @param start\n// and the other items will wrap around. Example\n// createTail('b', ['a', 'b', 'c', 'd']) yields ['b', 'c', 'd', 'a']\nexport const createTail = (start: T, all: T[]) => {\n if (!all.includes(start)) {\n return []\n }\n const index = all.indexOf(start)\n return [...all.slice(index), ...all.slice(0, index)]\n}\n","import { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport * as selectionActionTypes from 'common_crossword_packages/assets/js/actions/selectionActionTypes'\nimport {\n HoneycombSelectCellPayload,\n HoneycombSelectCluePayload,\n HoneycombSelectionAction,\n SWITCH_ROTATION,\n} from './types'\nimport { HoneycombSelectionStoreState } from '../reducers/selectionReducer'\nimport { determineClueCycle } from '../components/store/utils'\nimport { HoneycombCluesStoreState } from '../reducers/cluesReducer'\n\nconst selectCellAction = (payload: HoneycombSelectCellPayload): HoneycombSelectionAction => ({\n type: selectionActionTypes.SELECT_CELL,\n payload,\n})\n\nconst selectClueAction = (payload: HoneycombSelectCluePayload): HoneycombSelectionAction => ({\n type: selectionActionTypes.SELECT_CLUE,\n payload,\n})\n\nconst switchRotationAction = (): HoneycombSelectionAction => ({\n type: SWITCH_ROTATION,\n})\n\nexport const selectCell = (cellIndex: number, selection: HoneycombSelectionStoreState, clues: HoneycombCluesStoreState, backspace = false) => (dispatch: TDispatch) => {\n const clueCycle = determineClueCycle(cellIndex, selection, clues)\n dispatch(selectCellAction({ cellIndex, clueCycle, backspace }))\n}\n\nexport const selectClue = (cellIndex: number, clueCycle: number) => (dispatch: TDispatch) => {\n dispatch(selectClueAction({ cellIndex, clueCycle }))\n}\n\nexport const switchRotation = () => (dispatch: TDispatch) => {\n dispatch(switchRotationAction())\n}\n\nexport const resultWordCellSelection = (payload) => (dispatch: TDispatch) => {\n const { cellIndex, selection, clues } = payload\n const clueCycle = determineClueCycle(cellIndex, selection, clues)\n\n dispatch(selectCellAction({ cellIndex, clueCycle }))\n}\n","import { Store } from 'redux'\nimport * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport * as commonCrosswordActions from 'common_crossword_packages/assets/js/actions/cellActions'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport * as cellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport cellStatuses from 'common_packages/assets/js/constants/statuses'\nimport { ClearCellPayload } from 'common_crossword_packages/assets/js/actions/types'\nimport { clearClue } from 'common_crossword_packages/assets/js/actions/cellActions'\nimport { languageUsesIJ } from 'common_packages/assets/js/utilities/languageUsesIJ'\nimport { IJ_CHECK_DELAY } from 'common_packages/assets/js/constants/delays'\nimport {\n HoneycombGuessPayload,\n HoneycombCellAction,\n} from './types'\nimport { HoneycombStoreState } from '../reducers'\nimport {\n canWriteCell,\n createCluesTail,\n createSelectionTail,\n createTail,\n determineClueCycle,\n getCluesWithCellIndex,\n getIsInLastCell,\n getNeighboringCellIndices,\n getSelectedClue,\n} from '../components/store/utils'\nimport { selectCell } from './selectionActions'\n\nconst guessAction = (payload: HoneycombGuessPayload): HoneycombCellAction => ({\n type: cellActionTypes.GUESS,\n payload,\n})\n\nconst clearCellAction = (payload: ClearCellPayload): HoneycombCellAction => ({\n type: cellActionTypes.CLEAR_CELL,\n payload,\n})\n\nexport const guess = (value: string, store: Store) => (dispatch: TDispatch) => {\n const state = store.getState()\n if (state.selection.selectedCellIndex === null && state.cells.cellData[state.selection.selectedCellIndex].status === cellStatuses.INITIAL) {\n return\n }\n\n // handle IJ digraph\n if (languageUsesIJ(state.settings.language)) {\n if (value === 'J' && state.cells.previousGuess?.value === 'I') {\n const payload: HoneycombGuessPayload = {\n value: 'IJ',\n cellIndex: state.cells.previousGuess.cellIndex,\n }\n dispatch(guessAction(payload))\n return\n }\n }\n\n const {\n nextCellIndexToSelect,\n nextClueCycle,\n } = getNextCellIndexToSelectAndClueCycle(state)\n\n const payload: HoneycombGuessPayload = {\n value,\n nextCellIndexToSelect,\n nextClueCycle,\n cellIndex: state.selection.selectedCellIndex,\n }\n if (languageUsesIJ(state.settings.language) && value === 'I' && state.cells.cellData[state.selection.selectedCellIndex].solution === 'IJ') {\n // if user intended to input IJ digraph, delay checking gamestatus to give her time to complete the action\n payload.delaySetGameStatus = IJ_CHECK_DELAY\n\n // If the whole grid is filled and the last guess a user makes is inputting an 'I' in a cell whose solution is 'IJ'\n // keep the selection at this cell, such that she can input a 'J' to make 'IJ'\n if (state.cells.cellData.every((c, i) => c.value || i === state.selection.selectedCellIndex)) {\n payload.nextCellIndexToSelect = undefined\n }\n }\n dispatch(guessAction(payload))\n}\n\nexport const checkSelectedClue = () => (dispatch: TDispatch, getState: () => HoneycombStoreState) => {\n const state = getState()\n const selectedClue = getSelectedClue(state.clues, state.selection)\n const clueCells = selectedClue.cellIndices\n\n dispatch(checkClue({ clueCells }))\n}\n\nexport const revealSelectedClue = () => (dispatch: TDispatch, getState: () => HoneycombStoreState) => {\n const state = getState()\n const selectedClue = getSelectedClue(state.clues, state.selection)\n const clueCells = selectedClue.cellIndices\n\n dispatch(revealClue(clueCells))\n}\n\nexport const clearCell = (store: Store, backspace = false) => (dispatch: TDispatch) => {\n const state = store.getState()\n const cellIndex = state.selection.selectedCellIndex\n if (cellIndex === undefined) return\n\n const cell = state.cells.cellData[cellIndex]\n const { value } = cell\n const currentCellIsEmpty = value === ''\n\n if (!currentCellIsEmpty && canWriteCell(cell)) {\n const payload: ClearCellPayload = {\n cellIndex,\n }\n dispatch(clearCellAction(payload))\n }\n if (currentCellIsEmpty || state.cells.previousGuess.backspace) {\n // if we have previously pressed backspace, continue going back one step\n const nextCellIndexToSelect = getNextCellIndexToSelectAfterClear(state)\n\n dispatch(selectCell(nextCellIndexToSelect, state.selection, state.clues, backspace))\n }\n}\n\nexport const clearSelectedClue = () => (dispatch: TDispatch, getState: () => HoneycombStoreState) => {\n const state = getState()\n const selectedClue = getSelectedClue(state.clues, state.selection)\n const clueCells = selectedClue.cellIndices\n\n dispatch(clearClue({ clueCells }))\n}\n\nexport const { checkSelectedCell } = commonCrosswordActions\nexport const { revealSelectedCell } = commonCrosswordActions\nexport const { clearSelectedCell } = commonCrosswordActions\nexport const { revealClue } = commonCrosswordActions\nexport const { revealPuzzle } = commonCellActions\nexport const { checkCell } = commonCrosswordActions\nexport const { checkClue } = commonCrosswordActions\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\nexport const { resetCorrectStatuses } = commonCellActions\n\n// Returns the next cellIndex to select and cluecycle after performing a guess\nconst getNextCellIndexToSelectAndClueCycle = (state: HoneycombStoreState) => {\n if (state.selection.activeResultWord) {\n // We're dealing with a result word, take the next cell in the resultword serie\n const resultWordIndex = state.cells.puzzleCells.indexOf(state.selection.selectedCellIndex) + 1\n if (resultWordIndex <= state.cells.puzzleCells.length - 1) {\n const nextCellIndexToSelect = state.cells.puzzleCells[resultWordIndex]\n const nextClueCycle = determineClueCycle(nextCellIndexToSelect, state.selection, state.clues)\n return {\n nextCellIndexToSelect,\n nextClueCycle,\n }\n }\n // We're at the last cell, stay there\n const nextCellIndexToSelect = state.cells.puzzleCells[state.cells.puzzleCells.indexOf(state.selection.selectedCellIndex)]\n const nextClueCycle = determineClueCycle(nextCellIndexToSelect, state.selection, state.clues)\n return {\n nextCellIndexToSelect,\n nextClueCycle,\n }\n }\n\n // Cell indices of current clue\n const currentClueSelectionTail = createSelectionTail(state.cells, state.clues, state.selection)\n const { disableMoveToNextClue } = state.settings.clientSettings\n\n if (!disableMoveToNextClue) {\n const currentValue = state.cells.cellData[state.selection.selectedCellIndex].value\n const isInLastCell = getIsInLastCell(state.cells, state.clues, state.selection)\n const allOtherCellsAreFilled = currentClueSelectionTail.slice(1).every((i) => (state.cells.cellData[i]).value !== '')\n\n if (allOtherCellsAreFilled && (isInLastCell || currentValue === '')) {\n // Search for the first empty cell in the subsequent clues\n const { cellIndex, clueCycle } = findNextEmptyCellIndexAndClueCycle(state)\n\n if (cellIndex === state.selection.selectedCellIndex && !isInLastCell) {\n // We're still supposed to be on the same selected cell, which means no empty cell could be found,\n // but it's not the last cell in the clue. this means the rest of the puzzle is full.\n // In this case, just advance to the next cell in the current clue\n return {\n nextCellIndexToSelect: currentClueSelectionTail[1],\n nextClueCycle: clueCycle,\n }\n }\n\n return {\n nextCellIndexToSelect: cellIndex,\n nextClueCycle: clueCycle,\n }\n }\n }\n\n // We never switch to another clue, find the first writable cell in the selection tail\n let findIndex = 1\n while (findIndex < currentClueSelectionTail.length) {\n if (canWriteCell(state.cells.cellData[currentClueSelectionTail[findIndex]])) {\n break\n }\n findIndex += 1\n }\n\n const nextCellIndexToSelect = currentClueSelectionTail[findIndex]\n const nextClueCycle = determineClueCycle(nextCellIndexToSelect, state.selection, state.clues)\n return {\n nextCellIndexToSelect,\n nextClueCycle,\n }\n}\n\n// Search across all cells for the next writable and empty cell\n// Use the defined clue order to do so, starting from the currently selected clue\nconst findNextEmptyCellIndexAndClueCycle = (state: HoneycombStoreState) => {\n const clueTail = createCluesTail(state.clues, state.selection)\n\n for (let i = 1; i < clueTail.length; i += 1) {\n const clue = clueTail[i]\n\n // Attempt to find a cell around this clue that's empty and writeable\n const clueCell = state.cells.cellData.find((c) => c.value === clue.number)\n const neighbors = getNeighboringCellIndices(state.cells, clueCell, state.selection.rotation)\n const neighborsTail = createTail(clue.cellIndices[0], neighbors)\n\n const cellIndex = neighborsTail.find((clueCellIndex) => {\n const cell = state.cells.cellData[clueCellIndex]\n return cell.value === '' && canWriteCell(cell) && clueCellIndex !== state.selection.selectedCellIndex\n })\n if (cellIndex !== undefined) {\n const cluesWithNextCellIndex = getCluesWithCellIndex(state.clues, cellIndex)\n const clueCycle = Math.max(cluesWithNextCellIndex.indexOf(clue), 0)\n\n return {\n cellIndex,\n clueCycle,\n }\n }\n }\n\n // We tried our best but we couldnt find anything available to select, keep the selection as is\n return {\n cellIndex: state.selection.selectedCellIndex,\n clueCycle: state.selection.clueCycle,\n }\n}\n\n// Returns the next cellIndex to select after performing a clear cell\nconst getNextCellIndexToSelectAfterClear = (state: HoneycombStoreState) => {\n if (state.selection.activeResultWord) {\n // We're dealing with a result word, take the previous cell in the resultword serie\n const resultWordIndex = state.cells.puzzleCells.indexOf(state.selection.selectedCellIndex) - 1\n if (resultWordIndex >= 0) {\n return state.cells.puzzleCells[resultWordIndex]\n }\n // We're at the first cell, stay there\n return state.cells.puzzleCells[0]\n }\n\n const tail = createSelectionTail(state.cells, state.clues, state.selection)\n return tail[tail.length - 1]\n}\n","import * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\n\nexport const { revealPuzzle } = commonCellActions\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\n","import { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { REVEAL_PUZZLE } from 'common_packages/assets/js/actions/cellActionTypes'\nimport {\n GUESS_CARD,\n FLIP_CARDS,\n REVEAL_CARDS,\n MemoryCardsAction,\n MemoryGuessPayload,\n FlipCardsPayload,\n RevealCardsPayload,\n RANDOMIZE_CARDS,\n} from './types'\nimport { MemoryStoreState } from '../reducers'\nimport { ANIMATION_CARD_FLIP_DELAY, ANIMATION_CELEBRATE_DELAY } from '../constants/animationDelay'\n\nconst guessAction = (payload: MemoryGuessPayload): MemoryCardsAction => ({\n type: GUESS_CARD,\n payload: {\n ...payload,\n delaySetGameStatus: ANIMATION_CARD_FLIP_DELAY + ANIMATION_CELEBRATE_DELAY + 200, // Play flip and celebrate animation and a little easing\n },\n})\n\nconst flipCardsAction = (payload: FlipCardsPayload): MemoryCardsAction => ({\n type: FLIP_CARDS,\n payload,\n})\n\nconst revealMemoryCardsAction = (payload: RevealCardsPayload): MemoryCardsAction => ({\n type: REVEAL_CARDS,\n payload,\n})\n\nexport const randomizeMemoryCardsAction = (): MemoryCardsAction => ({\n type: RANDOMIZE_CARDS,\n})\n\nexport const guessCard = (guessCardPayload: MemoryGuessPayload) => (dispatch: TDispatch) => {\n dispatch(guessAction(guessCardPayload))\n}\n\nexport const flipCards = (cardIndices: number[]) => (dispatch: TDispatch) => {\n dispatch(flipCardsAction({ cardIndices }))\n}\n\nexport const revealMemoryCards = () => (dispatch: TDispatch, getState: () => MemoryStoreState) => {\n const { memoryCards, memorySelection } = getState()\n const { memoryCardsData } = memoryCards\n const { lastSelectedCards } = memorySelection\n const cardsToBeRevealedIndex: number[] = []\n let findPairNumber: number\n let cardIndex = lastSelectedCards.at(-1)\n\n if (cardIndex != null) {\n findPairNumber = memoryCardsData[cardIndex].pairNumber\n } else {\n const unRevealCard = memoryCardsData.find((cardData) => !cardData.isCardVisible)\n cardIndex = memoryCardsData.findIndex((cardData) => !cardData.isCardVisible)\n findPairNumber = unRevealCard.pairNumber\n }\n cardsToBeRevealedIndex.push(cardIndex)\n\n // If there are multiple cardIndices in lastSelectedCards than that would mean that the memory sets consist of more than 2 cards.\n // With this it would be possible to select two (or more) different cards without having made a (in)correct guess of the set.\n // Pressing the \"reveal cards\" button would then only reveal the cards that are part of the last selected card set.\n // Cards from another set will be turned face down again.\n if (lastSelectedCards.length > 1) {\n const wrongCards = lastSelectedCards.filter((lastSelectedCard) => !cardsToBeRevealedIndex.includes(lastSelectedCard))\n dispatch(flipCardsAction({ cardIndices: wrongCards }))\n }\n\n memoryCardsData.forEach((cardData, index) => {\n if (cardData.pairNumber === findPairNumber && index !== cardIndex) {\n cardsToBeRevealedIndex.push(index)\n }\n })\n\n dispatch(revealMemoryCardsAction({ cardIndices: cardsToBeRevealedIndex }))\n}\n\nexport const revealPuzzle = (): MemoryCardsAction => ({\n type: REVEAL_PUZZLE,\n})\n","import { REVEAL_PUZZLE } from 'common_packages/assets/js/actions/cellActionTypes'\nimport * as gameActionTypes from 'common_packages/assets/js/actions/gameActionTypes'\nimport { type InitGameDataPayload } from 'common_packages/assets/js/actions/settingsActions'\nimport { type MemoryCardStatusType } from '../constants/statuses'\nimport { type MemoryCardsStoreState } from '../reducers/memoryCardsReducer'\n\nexport const GUESS_CARD = 'GUESS_CARD'\nexport const FLIP_CARDS = 'FLIP_CARDS'\nexport const REVEAL_CARDS = 'REVEAL_CARDS'\nexport const RANDOMIZE_CARDS = 'RANDOMIZE_CARDS'\n\nexport type MemoryCard = {\n value: string\n status: MemoryCardStatusType\n isCardVisible: boolean // True if the image is visible\n pairNumber: number // The cards that are a pair together will receive the same number\n}\n\nexport type MemoryCardsData = Array\n\nexport type InitMemoryGameDataPayload = InitGameDataPayload & {\n memoryCards: MemoryCardsStoreState\n}\n\nexport type MemoryGuessPayload = {\n cardIndex: number\n cardsData: {\n cardIndex: number\n cardStatus: MemoryCardStatusType\n }[]\n delaySetGameStatus?: number // optional delay for the gameStatusMiddleware\n}\n\nexport type FlipCardsPayload = {\n cardIndices: number[]\n}\n\nexport type RevealCardsPayload = {\n cardIndices: number[]\n}\n\nexport type MemoryCardsAction = {\n type: typeof GUESS_CARD\n payload: MemoryGuessPayload\n} | {\n type: typeof FLIP_CARDS\n payload: FlipCardsPayload\n} | {\n type: typeof REVEAL_CARDS\n payload: RevealCardsPayload\n} | {\n type: typeof REVEAL_PUZZLE\n} | {\n type: typeof RANDOMIZE_CARDS\n}\n\nexport type MemoryGameAction = {\n type: typeof gameActionTypes.INIT_GAME_DATA\n payload: InitMemoryGameDataPayload\n} | {\n type: typeof gameActionTypes.RESET_PUZZLE\n}\n\nexport type MemoryActions = MemoryCardsAction | MemoryGameAction\n","import { REVEAL_PUZZLE } from 'common_packages/assets/js/actions/cellActionTypes'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { DifferenceAction } from './types'\n\nexport const FIND_DIFFERENCE = 'FIND_DIFFERENCE'\nexport const REVEAL_DIFFERENCE = 'REVEAL_DIFFERENCE'\nexport const MOVE_TO_DIFFERENCE = 'MOVE_TO_DIFFERENCE'\n\nexport const SET_GAME_STATUS_DELAY = 1500\n\nexport const findDifference = (differenceIndex: number): DifferenceAction => ({\n type: FIND_DIFFERENCE,\n payload: {\n differenceIndex,\n delaySetGameStatus: SET_GAME_STATUS_DELAY, // play the pop in animation and zoom out\n },\n})\n\nexport const revealPuzzle = (): DifferenceAction => ({\n type: REVEAL_PUZZLE,\n payload: {},\n})\n\nexport const revealDifference = (): DifferenceAction => ({\n type: REVEAL_DIFFERENCE,\n payload: {\n delaySetGameStatus: SET_GAME_STATUS_DELAY, // play the pop in animation and zoom out\n },\n})\n\nconst moveToDifferenceAction = (): DifferenceAction => ({\n type: MOVE_TO_DIFFERENCE,\n})\n\nexport const moveToDifference = () => (dispatch: TDispatch) => {\n dispatch(moveToDifferenceAction())\n\n const MOVE_GRID_TIME = 400 + 600 // 400 For the move animation on the grid itself and 600 for easing\n\n setTimeout(() => {\n dispatch(revealDifference())\n }, MOVE_GRID_TIME)\n}\n","/* eslint-disable no-console */\nimport * as commonCrosswordCellActions from 'common_crossword_packages/assets/js/actions/cellActions'\nimport * as filippineCellActions from 'filippine/resources/assets/js/actions/cellActions'\nimport * as fitwordCellActions from 'fitword/resources/assets/js/actions/cellActions'\nimport * as commonSudokuActions from 'common_sudoku_packages/assets/js/actions/cellActions'\nimport * as rebusActions from 'rebus/resources/assets/js/actions/cellActions'\nimport * as wordwheelActions from 'wordwheel/resources/assets/js/actions/inputActions'\nimport * as wordguessActions from 'wordguess/resources/assets/js/actions/cellActions'\nimport * as wordsearchActions from 'wordsearch/resources/assets/js/actions/clueActions'\nimport * as hashiGameActions from 'hashi/resources/assets/js/actions/gameActions'\nimport * as fleetcommanderCellActions from 'fleetcommander/resources/assets/js/actions/cellActions'\nimport * as honeycombCellActions from 'honeycomb/resources/assets/js/actions/cellActions'\nimport * as blockpuzzleCellActions from 'blockpuzzle/resources/assets/js/actions/cellActions'\nimport * as blockpuzzleBlockActions from 'blockpuzzle/resources/assets/js/actions/blockActions'\nimport * as campingCellActions from 'camping/resources/assets/js/actions/cellActions'\nimport * as memoryCardActions from 'memory/resources/assets/js/actions/memoryCardActions'\nimport * as finddifferencesActions from 'finddifferences/resources/assets/js/actions/differenceActions'\nimport * as nonogramCellActions from 'nonogram/resources/assets/js/actions/cellActions'\nimport { games } from '../../types/gameDataTypes'\n\nexport const executeCellAction = (action, payload = null) => (dispatch, getState) => {\n const state = getState()\n const { gameType } = state.settings\n let cellActions\n switch (gameType) {\n case games.ARROWWORD:\n case games.ARROWWORD_MINI:\n case games.ARROWWORD_PLUS:\n case games.ARROWWORD_PLUS_MINI:\n case games.ARROWWORD_PLUS_SCRAMBLED:\n case games.ARROWWORD_PLUS_SCRAMBLED_MINI:\n cellActions = commonCrosswordCellActions\n break\n case games.BINERO:\n case games.BINERO_MINI:\n cellActions = commonSudokuActions\n break\n case games.BLOCKPUZZLE:\n case games.BLOCKPUZZLE_MINI:\n cellActions = {\n ...blockpuzzleCellActions,\n ...blockpuzzleBlockActions,\n }\n\n break\n case games.CONTINUOUS:\n case games.CONTINUOUS_MINI:\n case games.CROSSWORD:\n case games.CROSSWORD_MINI:\n case games.CRYPTOGRAM:\n case games.CRYPTOGRAM_MINI:\n case games.CROSSWORD_FRENCH:\n case games.CROSSWORD_FRENCH_MINI:\n cellActions = commonCrosswordCellActions\n break\n // Codebreaker uses the cellActions of filippine since it uses the same action logic with the code bar.\n case games.CODEBREAKER:\n case games.CODEBREAKER_PLUS:\n case games.FILIPPINE:\n case games.FILIPPINE_MINI:\n case games.FILIPPINE_CRYPTO:\n cellActions = filippineCellActions\n break\n case games.FITWORD:\n case games.FITWORD_MINI:\n cellActions = fitwordCellActions\n break\n case games.HASHI:\n case games.HASHI_MINI:\n cellActions = hashiGameActions\n break\n case games.IKURA:\n case games.IKURA_MINI:\n cellActions = commonSudokuActions\n break\n case games.MEMORY:\n cellActions = memoryCardActions\n break\n case games.NONOGRAM:\n case games.NONOGRAM_MINI:\n cellActions = nonogramCellActions\n break\n case games.REBUS:\n cellActions = rebusActions\n break\n case games.WORDGUESS:\n cellActions = wordguessActions\n break\n case games.WORDWHEEL:\n cellActions = wordwheelActions\n break\n case games.WORDSEARCH:\n case games.WORDSEARCH_MINI:\n cellActions = wordsearchActions\n break\n case games.CAMPING:\n case games.CAMPING_MINI:\n cellActions = campingCellActions\n break\n case games.SUDOKU:\n case games.SUDOKU_CHAOS:\n case games.SUDOKU_CHAOS_MINI:\n case games.SUDOKU_HYPER:\n case games.SUDOKU_KILLER:\n case games.SUDOKU_KILLER_MINI:\n case games.SUDOKU_X:\n case games.KAKURO:\n case games.KAKURO_MINI:\n case games.KDOKU:\n case games.KDOKU_MINI:\n case games.TECTONIC:\n case games.TECTONIC_MINI:\n cellActions = commonSudokuActions\n break\n case games.FINDDIFFERENCES:\n cellActions = finddifferencesActions\n break\n case games.FLEETCOMMANDER:\n case games.FLEETCOMMANDER_MINI:\n cellActions = fleetcommanderCellActions\n break\n case games.HONEYCOMB:\n case games.HONEYCOMB_MINI:\n cellActions = honeycombCellActions\n break\n default:\n console.error('Game type not defined in cellActions:', gameType)\n break\n }\n\n if (cellActions && cellActions[action]) {\n dispatch(cellActions[action](payload))\n } else if (cellActions) {\n console.error(`Action dispatcher ${action} not specified for ${gameType}`)\n }\n}\n","export const GUESS = 'GUESS'\nexport const GUESS_WORD = 'GUESS_WORD'\nexport const ADD_NOTE = 'ADD_NOTE'\nexport const CLEAR_CELL = 'CLEAR_CELL'\nexport const CLEAR_CELLS = 'CLEAR_CELLS'\nexport const CLEAR_NOTE = 'CLEAR_NOTE'\nexport const CLEAR_CLUE = 'CLEAR_CLUE'\nexport const REVEAL_CELL = 'REVEAL_CELL'\nexport const REVEAL_CELLS = 'REVEAL_CELLS'\nexport const REVEAL_CLUE = 'REVEAL_CLUE'\nexport const REVEAL_WORD = 'REVEAL_WORD'\nexport const REVEAL_PUZZLE = 'REVEAL_PUZZLE'\nexport const CHECK_CELL = 'CHECK_CELL'\nexport const CHECK_CLUE = 'CHECK_CLUE'\nexport const CHECK_PUZZLE = 'CHECK_PUZZLE'\nexport const CHECK_WORD = 'CHECK_WORD'\nexport const ERASE_MISTAKES = 'ERASE_MISTAKES'\nexport const FILL_CODEBAR = 'FILL_CODEBAR'\nexport const REVEAL_CODEBAR = 'REVEAL_CODEBAR'\nexport const SWAP_VALUES = 'SWAP_VALUES'\nexport const RESET_CORRECT_STATUSES = 'RESET_CORRECT_STATUSES'\nexport const PREV_GUESS = 'PREV_GUESS'\nexport const GAMEROOM_GUESSES = 'GAMEROOM_GUESSES'\nexport const AUTO_COMPLETE = 'AUTO_COMPLETE'\n","import { Dispatch } from 'redux'\nimport * as cellActionTypes from './cellActionTypes'\nimport { CommonCellAction } from './types'\nimport { REVEAL_GAME_STATUS_DELAY } from '../constants/delays'\n\nconst checkPuzzleAction = (): CommonCellAction => ({\n type: cellActionTypes.CHECK_PUZZLE,\n})\n\nconst revealPuzzleAction = (): CommonCellAction => ({\n type: cellActionTypes.REVEAL_PUZZLE,\n payload: {\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n },\n})\n\nconst resetCorrectStatusesAction = (): CommonCellAction => ({\n type: cellActionTypes.RESET_CORRECT_STATUSES,\n})\n\nconst eraseMistakesAction = (): CommonCellAction => ({\n type: cellActionTypes.ERASE_MISTAKES,\n})\n\nexport const checkPuzzle = () => (dispatch: Dispatch) => {\n dispatch(checkPuzzleAction())\n}\n\nexport const revealPuzzle = () => (dispatch: Dispatch) => (\n dispatch(revealPuzzleAction())\n)\n\nexport const resetCorrectStatuses = () => (dispatch: Dispatch) => (\n dispatch(resetCorrectStatusesAction())\n)\n\nexport const eraseMistakes = () => (dispatch: Dispatch) => {\n dispatch(eraseMistakesAction())\n}\n","export const RESET_PUZZLE = 'RESET_PUZZLE'\nexport const INIT_GAME_DATA = 'INIT_GAME_DATA'\nexport const SET_GAME_STATUS = 'SET_GAME_STATUS'\nexport const SET_IS_INITIAL = 'SET_IS_INITIAL'\nexport const SAVE_REVEALED_CELLS = 'SAVE_REVEALED_CELLS'\nexport const PRELOAD_STATE = 'PRELOAD_STATE'\nexport const SAVE_COMPLETED_SETS = 'SAVE_COMPLETED_SETS'\n","import { type Dispatch } from 'redux'\nimport { REHYDRATE } from 'redux-persist'\nimport { gameStatusType } from '../types/gameStatusTypes'\nimport * as gameActionTypes from './gameActionTypes'\n\nexport type GameAction = {\n type: typeof gameActionTypes.SET_GAME_STATUS,\n payload: {\n status: gameStatusType,\n isGameRoomGuesses: boolean,\n isFirstFetch: boolean\n },\n} | {\n type: typeof gameActionTypes.SET_IS_INITIAL,\n payload: {\n isInitial: boolean\n },\n} | {\n type: typeof gameActionTypes.RESET_PUZZLE,\n payload: {\n ignoreTimerReset: boolean\n }\n} | {\n type: typeof gameActionTypes.SAVE_REVEALED_CELLS,\n payload: number\n} | {\n type: typeof gameActionTypes.SAVE_COMPLETED_SETS,\n payload: number[]\n} | {\n type: typeof gameActionTypes.PRELOAD_STATE,\n payload: any // Payload is the whole redux state in this case.\n} | {\n type: typeof REHYDRATE,\n payload: any // Payload is the whole redux state in this case.\n}\n\nexport const setGameStatus = (status: gameStatusType, isGameRoomGuesses = false, isFirstFetch = false): GameAction => ({\n type: gameActionTypes.SET_GAME_STATUS,\n payload: {\n status,\n isGameRoomGuesses,\n isFirstFetch,\n },\n})\n\nexport const setIsInitial = (isInitial: boolean): GameAction => ({\n type: gameActionTypes.SET_IS_INITIAL,\n payload: {\n isInitial,\n },\n})\n\nexport const resetPuzzle = (ignoreTimerReset = false): GameAction => ({\n type: gameActionTypes.RESET_PUZZLE,\n payload: { ignoreTimerReset },\n})\n\nexport const saveRevealedCells = (payload: number) => (dispatch: Dispatch): void => {\n dispatch({\n type: gameActionTypes.SAVE_REVEALED_CELLS,\n payload,\n })\n}\n\nexport const setCompletedSets = (payload: Array) => (dispatch: Dispatch): void => {\n dispatch({\n type: gameActionTypes.SAVE_COMPLETED_SETS,\n payload,\n })\n}\n\nexport const preloadState = (payload: any) => (dispatch: Dispatch): void => {\n dispatch({\n type: gameActionTypes.PRELOAD_STATE,\n payload,\n })\n}\n","import { type Dispatch } from 'redux'\nimport * as commonGameDataAction from '../api/gameDataApi'\nimport * as gameInfoActionTypes from './gameInfoActionTypes'\nimport { type CommonPuzzleStoreState } from '../store/types'\nimport { type GameInfoState } from '../reducers/gameInfoReducer'\n\nexport type GameInfoAction = {\n type: typeof gameInfoActionTypes.SET_PUZZLE_INFO,\n payload: GameInfoState\n}\n\nexport const NEVER = 'never'\n\nexport const determineExpiryDate = (date: Date, dayToStoreOffset: number) => {\n if (dayToStoreOffset === 0) {\n return NEVER\n }\n if (date.getTime() === 0) {\n // We have been provided the epoch.. it means no date is set. Use todays date instead\n // eslint-disable-next-line no-param-reassign\n date = new Date()\n }\n date.setDate(date.getDate() + dayToStoreOffset)\n return date.toISOString()\n}\n\nexport const setPuzzleInfo = (puzzleId: string, customerId: string) => async (dispatch: Dispatch, getState: () => CommonPuzzleStoreState) => {\n const puzzleInfo = await commonGameDataAction.getPuzzleInfo(customerId, puzzleId)\n const { data } = puzzleInfo\n\n if (data?.date && data.level) {\n const { dayToStoreOffset } = getState()?.settings?.clientSettings ?? { dayToStoreOffset: 0 }\n const date = new Date(data.date)\n\n const expiryDate = determineExpiryDate(date, dayToStoreOffset)\n dispatch({\n type: gameInfoActionTypes.SET_PUZZLE_INFO,\n payload: {\n ...data,\n expiryDate,\n puzzleId,\n },\n })\n }\n}\n","export const TOGGLE_KEYBOARD = 'TOGGLE_KEYBOARD'\nexport const SET_ZOOM_TRIGGER = 'SET_ZOOM_TRIGGER'\nexport const UNSET_ZOOM_TRIGGER = 'UNSET_ZOOM_TRIGGER'\nexport const SET_ZOOM_IS_AT_MAX_ZOOM_SCALE = 'SET_ZOOM_IS_AT_MAX_ZOOM_SCALE'\nexport const SET_ZOOM_IS_AT_MIN_ZOOM_SCALE = 'SET_ZOOM_IS_AT_MIN_ZOOM_SCALE'\nexport const TOGGLE_NOTE_INPUTMODE = 'TOGGLE_NOTE_INPUTMODE'\nexport const UPDATE_SETTINGS = 'UPDATE_SETTINGS'\nexport const SET_HARDWARE_KEYBOARD_DETECTED = 'SET_HARDWARE_KEYBOARD_DETECTED'\nexport const TOGGLE_NUMBERS_FIRST_MODE = 'TOGGLE_NUMBERS_FIRST_MODE'\n","import { Dispatch } from 'redux'\nimport zoomTriggers, { type ZoomTriggerType } from '../constants/zoomTriggers'\nimport { CommonSettingsStoreState, type ClientSettingsState } from '../reducers/settingsReducer'\nimport * as settingsActionTypes from './settingsActionTypes'\nimport * as gameActionTypes from './gameActionTypes'\nimport { type GameType } from '../types/gameDataTypes'\n\nexport type InitGameDataPayload = {\n gameType: GameType\n customerId: string\n puzzleId: string\n puzzleVariation: string\n extraProps?: Partial\n}\n\nexport type SettingsAction = {\n type: typeof gameActionTypes.INIT_GAME_DATA,\n payload: InitGameDataPayload\n} | {\n type: typeof settingsActionTypes.TOGGLE_KEYBOARD,\n} | {\n type: typeof settingsActionTypes.SET_ZOOM_TRIGGER,\n payload: {\n value: ZoomTriggerType\n },\n} | {\n type: typeof settingsActionTypes.UNSET_ZOOM_TRIGGER,\n} | {\n type: typeof settingsActionTypes.SET_ZOOM_IS_AT_MAX_ZOOM_SCALE | typeof settingsActionTypes.SET_ZOOM_IS_AT_MIN_ZOOM_SCALE,\n payload: {\n value: boolean\n }\n} | {\n type: typeof settingsActionTypes.TOGGLE_NOTE_INPUTMODE | typeof settingsActionTypes.TOGGLE_NUMBERS_FIRST_MODE,\n} | {\n type: typeof settingsActionTypes.UPDATE_SETTINGS,\n payload: {\n clientSettings: ClientSettingsState,\n customerId: string\n }\n} | {\n type: typeof settingsActionTypes.SET_HARDWARE_KEYBOARD_DETECTED,\n payload: {\n detected: boolean\n }\n}\n\nconst toggleKeyboardAction = (): SettingsAction => ({\n type: settingsActionTypes.TOGGLE_KEYBOARD,\n})\n\nconst setHardwareKeyboardDetectedAction = (detected: boolean): SettingsAction => ({\n type: settingsActionTypes.SET_HARDWARE_KEYBOARD_DETECTED,\n payload: { detected },\n})\n\nconst setZoomTriggerAction = (value: ZoomTriggerType): SettingsAction => ({\n type: settingsActionTypes.SET_ZOOM_TRIGGER,\n payload: {\n value,\n },\n})\n\nconst unsetZoomTriggerAction = (): SettingsAction => ({\n type: settingsActionTypes.UNSET_ZOOM_TRIGGER,\n})\n\nconst toggleNoteInputModeAction = (): SettingsAction => ({\n type: settingsActionTypes.TOGGLE_NOTE_INPUTMODE,\n})\n\nconst setZoomIsAtMaxZoomScaleAction = (value: boolean): SettingsAction => ({\n type: settingsActionTypes.SET_ZOOM_IS_AT_MAX_ZOOM_SCALE,\n payload: {\n value,\n },\n})\n\nconst setZoomIsAtMinZoomScaleAction = (value: boolean): SettingsAction => ({\n type: settingsActionTypes.SET_ZOOM_IS_AT_MIN_ZOOM_SCALE,\n payload: {\n value,\n },\n})\n\nconst updateSettingsAction = (clientSettings: ClientSettingsState, customerId: string): SettingsAction => ({\n type: settingsActionTypes.UPDATE_SETTINGS,\n payload: {\n clientSettings,\n customerId,\n },\n})\n\nexport const toggleKeyboard = () => (dispatch: Dispatch) => dispatch(toggleKeyboardAction())\n\nexport const setHardwareKeyboardDetected = (detected: boolean) => (dispatch: Dispatch) => dispatch(setHardwareKeyboardDetectedAction(detected))\n\nexport const zoom = () => (dispatch: Dispatch) => dispatch(setZoomTriggerAction(zoomTriggers.ZOOM))\n\nexport const zoomIn = () => (dispatch: Dispatch) => dispatch(setZoomTriggerAction(zoomTriggers.ZOOM_IN))\n\nexport const zoomOut = () => (dispatch: Dispatch) => dispatch(setZoomTriggerAction(zoomTriggers.ZOOM_OUT))\n\nexport const resetZoom = () => (dispatch: Dispatch) => dispatch(setZoomTriggerAction(zoomTriggers.ZOOM_RESET))\n\nexport const unsetZoomTrigger = () => (dispatch: Dispatch) => dispatch(unsetZoomTriggerAction())\n\nexport const setZoomIsAtMaxZoomScale = (value: boolean) => (dispatch: Dispatch) => dispatch(setZoomIsAtMaxZoomScaleAction(value))\n\nexport const setZoomIsAtMinZoomScale = (value: boolean) => (dispatch: Dispatch) => dispatch(setZoomIsAtMinZoomScaleAction(value))\n\nexport const toggleNoteInputmode = () => (dispatch: Dispatch) => dispatch(toggleNoteInputModeAction())\n\nexport const updateSettings = (clientSettings: ClientSettingsState, customerId: string) => (dispatch: Dispatch) => dispatch(updateSettingsAction(clientSettings, customerId))\n\nexport const toggleNumbersFirstMode = () => (dispatch: Dispatch) => dispatch({\n type: settingsActionTypes.TOGGLE_NUMBERS_FIRST_MODE,\n})\n","export const START_TIMER = 'START_TIMER'\nexport const INCREMENT_TIMER = 'INCREMENT_TIMER'\nexport const SET_TIMER = 'SET_TIMER'\nexport const PAUSE_TIMER = 'PAUSE_TIMER'\nexport const RESUME_TIMER = 'RESUME_TIMER'\nexport const SET_TIME_STAMP_FROM_START = 'SET_TIME_STAMP_FROM_START'\n","import { TDispatch } from '../types/TDispatch'\nimport * as timerActionTypes from './timerActionTypes'\n\nexport type TimerAction = {\n type: typeof timerActionTypes.START_TIMER\n} | {\n type: typeof timerActionTypes.INCREMENT_TIMER\n} | {\n type: typeof timerActionTypes.SET_TIMER,\n payload: {\n counter: number\n }\n} | {\n type: typeof timerActionTypes.PAUSE_TIMER\n} | {\n type: typeof timerActionTypes.RESUME_TIMER\n} | {\n type: typeof timerActionTypes.SET_TIME_STAMP_FROM_START\n payload: {\n timeStampFromStart: number\n }\n}\n\nconst startTimerAction = (): TimerAction => ({\n type: timerActionTypes.START_TIMER,\n})\n\nconst incrementTimerAction = (): TimerAction => ({\n type: timerActionTypes.INCREMENT_TIMER,\n})\n\nconst setTimerAction = (counter: number): TimerAction => ({\n type: timerActionTypes.SET_TIMER,\n payload: {\n counter,\n },\n})\n\nconst pauseTimerAction = (): TimerAction => ({\n type: timerActionTypes.PAUSE_TIMER,\n})\n\nconst resumeTimerAction = (): TimerAction => ({\n type: timerActionTypes.RESUME_TIMER,\n})\n\nconst setTimeStampFromStart = (): TimerAction => ({\n type: timerActionTypes.SET_TIME_STAMP_FROM_START,\n payload: {\n timeStampFromStart: new Date().getTime(),\n },\n})\n\nexport const startTimer = () => (dispatch: TDispatch) => {\n dispatch(startTimerAction())\n dispatch(setTimeStampFromStart())\n}\n\nexport const incrementTimer = () => (dispatch: TDispatch) => {\n dispatch(incrementTimerAction())\n}\nexport const setTimer = (counter: number) => (dispatch: TDispatch) => {\n dispatch(setTimerAction(counter))\n}\n\nexport const resumeTimer = () => (dispatch: TDispatch) => {\n dispatch(resumeTimerAction())\n}\n\nexport const pauseTimer = () => (dispatch: TDispatch) => {\n dispatch(pauseTimerAction())\n}\n","/**\n * Common\n */\nexport const SET_DRAWER = 'SET_DRAWER'\nexport const CLOSE_DRAWER = 'CLOSE_DRAWER'\nexport const ADD_TOAST = 'ADD_TOAST'\nexport const REMOVE_TOAST = 'REMOVE_TOAST'\nexport const SET_GRID_TOAST = 'SET_GRID_TOAST'\nexport const SET_MODAL = 'SET_MODAL'\nexport const CLOSE_MODAL = 'CLOSE_MODAL'\nexport const SHOW_NAV = 'SHOW_NAV'\nexport const SHOW_ENDSCREEN = 'SHOW_ENDSCREEN'\nexport const SHOW_RESET_MODAL = 'SHOW_RESET_MODAL'\nexport const HIDE_RESET_MODAL = 'HIDE_RESET_MODAL'\nexport const SHOW_ONSCREEN_KEYBOARD_SHOW_MODAL = 'SHOW_ONSCREEN_KEYBOARD_SHOW_MODAL'\nexport const HIDE_ONSCREEN_KEYBOARD_SHOW_MODAL = 'HIDE_ONSCREEN_KEYBOARD_SHOW_MODAL'\nexport const SHOW_ONSCREEN_KEYBOARD_HIDE_MODAL = 'SHOW_ONSCREEN_KEYBOARD_HIDE_MODAL'\nexport const HIDE_ONSCREEN_KEYBOARD_HIDE_MODAL = 'HIDE_ONSCREEN_KEYBOARD_HIDE_MODAL'\nexport const SHOW_CLEARALL_MODAL = 'SHOW_CLEARALL_MODAL'\nexport const HIDE_CLEARALL_MODAL = 'HIDE_CLEARALL_MODAL'\nexport const SHOW_INFO_MODAL = 'SHOW_INFO_MODAL'\nexport const HIDE_INFO_MODAL = 'HIDE_INFO_MODAL'\nexport const SHOW_THEME_SETTINGS_MODAL = 'SHOW_DARK_MODE_SETTINGS_MODAL'\nexport const HIDE_THEME_SETTINGS_MODAL = 'HIDE_DARK_MODE_SETTINGS_MODAL'\nexport const SHOW_TIMER_SETTINGS_MODAL = 'SHOW_TIMER_SETTINGS_MODAL'\nexport const HIDE_TIMER_SETTINGS_MODAL = 'HIDE_TIMER_SETTINGS_MODAL'\nexport const SHOW_REVEAL_PUZZLE_MODAL = 'SHOW_REVEAL_PUZZLE_MODAL'\nexport const HIDE_REVEAL_PUZZLE_MODAL = 'HIDE_REVEAL_PUZZLE_MODAL'\nexport const SHOW_GENERIC_EXCEPTION_MODAL = 'SHOW_GENERIC_EXCEPTION_MODAL'\nexport const SHOW_LS_ERROR_MODAL = 'SHOW_LS_ERROR_MODAL'\nexport const HIDE_LS_ERROR_MODAL = 'HIDE_LS_ERROR_MODAL'\nexport const SHOW_HIGH_SCORES_MODAL = 'SHOW_HIGH_SCORES_MODAL'\nexport const HIDE_HIGH_SCORES_MODAL = 'HIDE_HIGH_SCORES_MODAL'\nexport const SHOW_SHARE_PUZZLE_MODAL = 'SHOW_SHARE_PUZZLE_MODAL'\nexport const HIDE_SHARE_PUZZLE_MODAL = 'HIDE_SHARE_PUZZLE_MODAL'\nexport const SHOW_SHARE_PUZZLE_ERROR_MODAL = 'SHOW_SHARE_PUZZLE_ERROR_MODAL'\nexport const HIDE_SHARE_PUZZLE_ERROR_MODAL = 'HIDE_SHARE_PUZZLE_ERROR_MODAL'\nexport const SET_ACTIVE_DROPDOWN = 'SET_ACTIVE_DROPDOWN'\nexport const SET_IMPORT_EXPORT_MODAL_VISIBLE = 'SET_IMPORT_EXPORT_MODAL_VISIBLE'\n","import { type DrawerSize } from 'common_packages/assets/js/types/drawerSize'\nimport { type Toast } from 'common_packages/assets/js/types/Toast'\nimport { type GridToasts } from 'common_packages/assets/js/constants/gridToasts'\nimport { type AnyAction } from '@reduxjs/toolkit'\nimport { type DrawerType } from '../types/drawerTypes'\nimport { type TDispatch } from '../types/TDispatch'\nimport * as uiActionTypes from './uiActionTypes'\nimport { GridToastType } from '../types/gridToastTypes'\n\ntype SetDrawerPayload = {\n drawer: DrawerType\n drawerData? // todo: type this, using discriminated union\n forceModal?: boolean\n fullscreenOnMobile?: boolean\n modalAutoGrow?: boolean\n hideHeader?: boolean\n hideClose?: boolean\n bleedToEdge?: boolean\n className?: string\n size?: DrawerSize\n transparentOverlay?: boolean\n onClose?: () => void\n}\n\nexport const setDrawer = (payload: SetDrawerPayload) => (dispatch) => dispatch({\n type: uiActionTypes.SET_DRAWER,\n payload: {\n drawer: payload.drawer,\n drawerData: payload.drawerData || null,\n forceModal: payload.forceModal,\n fullscreenOnMobile: payload.fullscreenOnMobile,\n modalAutoGrow: payload.modalAutoGrow,\n hideHeader: payload.hideHeader,\n hideClose: payload.hideClose,\n bleedToEdge: payload.bleedToEdge,\n className: payload.className,\n size: payload.size,\n transparentOverlay: payload.transparentOverlay,\n onClose: payload.onClose,\n },\n})\n\nexport const closeDrawer = () => (dispatch: TDispatch) => {\n return dispatch({\n type: uiActionTypes.CLOSE_DRAWER,\n })\n}\n\nexport const addToast = (payload: Omit) => (dispatch) => dispatch({\n type: uiActionTypes.ADD_TOAST,\n payload: {\n ...payload,\n id: new Date().getTime(),\n },\n})\n\nexport const setGridToast = (payload: { toast: GridToasts, toastType?: GridToastType, toastData?: unknown }) => (dispatch) => dispatch({\n type: uiActionTypes.SET_GRID_TOAST,\n payload,\n})\n\nexport const showGenericExceptionModal = () => ({\n type: uiActionTypes.SHOW_GENERIC_EXCEPTION_MODAL,\n})\n\nexport const showLsErrorModal = () => ({\n type: uiActionTypes.SHOW_LS_ERROR_MODAL,\n})\n\nexport const hideLsErrorModal = () => ({\n type: uiActionTypes.HIDE_LS_ERROR_MODAL,\n})\n\nexport const removeToast = (id: number) => (dispatch) => dispatch({\n type: uiActionTypes.REMOVE_TOAST,\n payload: { id },\n})\n\nexport const setModal = (payload) => (dispatch) => dispatch({\n type: uiActionTypes.SET_MODAL,\n payload: {\n modal: payload.modal,\n },\n})\n\nexport const closeModal = () => (dispatch) => dispatch({\n type: uiActionTypes.CLOSE_MODAL,\n})\n\nexport const setShowNav = (payload) => (dispatch) => dispatch({\n type: uiActionTypes.SHOW_NAV,\n payload: {\n showNav: payload,\n },\n})\n\nexport const setShowEndscreen = (payload) => (dispatch) => dispatch({\n type: uiActionTypes.SHOW_ENDSCREEN,\n payload: {\n showEndscreen: payload,\n },\n})\n\nconst showResetAction = () => ({\n type: uiActionTypes.SHOW_RESET_MODAL,\n})\n\nconst hideResetAction = () => ({\n type: uiActionTypes.HIDE_RESET_MODAL,\n})\n\nconst showOnscreenKeyboardShowAction = () => ({\n type: uiActionTypes.SHOW_ONSCREEN_KEYBOARD_SHOW_MODAL,\n})\n\nconst hideOnscreenKeyboardShowAction = () => ({\n type: uiActionTypes.HIDE_ONSCREEN_KEYBOARD_SHOW_MODAL,\n})\n\nconst showOnscreenKeyboardHideAction = () => ({\n type: uiActionTypes.SHOW_ONSCREEN_KEYBOARD_HIDE_MODAL,\n})\n\nconst hideOnscreenKeyboardHideAction = () => ({\n type: uiActionTypes.HIDE_ONSCREEN_KEYBOARD_HIDE_MODAL,\n})\n\nconst showClearAllAction = () => ({\n type: uiActionTypes.SHOW_CLEARALL_MODAL,\n})\n\nconst hideClearAllAction = () => ({\n type: uiActionTypes.HIDE_CLEARALL_MODAL,\n})\n\nconst showInfoAction = () => ({\n type: uiActionTypes.SHOW_INFO_MODAL,\n})\n\nconst hideInfoAction = () => ({\n type: uiActionTypes.HIDE_INFO_MODAL,\n})\n\nconst showThemeSettingsModalAction = () => ({\n type: uiActionTypes.SHOW_THEME_SETTINGS_MODAL,\n})\n\nconst hideThemeSettingsModalAction = () => ({\n type: uiActionTypes.HIDE_THEME_SETTINGS_MODAL,\n})\n\nconst showTimerSettingsModalAction = () => ({\n type: uiActionTypes.SHOW_TIMER_SETTINGS_MODAL,\n})\n\nconst hideTimerSettingsModalAction = () => ({\n type: uiActionTypes.HIDE_TIMER_SETTINGS_MODAL,\n})\n\nconst showRevealPuzzleModalAction = () => ({\n type: uiActionTypes.SHOW_REVEAL_PUZZLE_MODAL,\n})\n\nconst hideRevealPuzzleModalAction = () => ({\n type: uiActionTypes.HIDE_REVEAL_PUZZLE_MODAL,\n})\n\nconst showHighScores = () => ({\n type: uiActionTypes.SHOW_HIGH_SCORES_MODAL,\n})\n\nconst hideHighScores = () => ({\n type: uiActionTypes.HIDE_HIGH_SCORES_MODAL,\n})\n\nconst showSharePuzzle = (shareText: string) => ({\n type: uiActionTypes.SHOW_SHARE_PUZZLE_MODAL,\n payload: {\n shareText,\n },\n})\n\nconst hideSharePuzzle = () => ({\n type: uiActionTypes.HIDE_SHARE_PUZZLE_MODAL,\n})\n\nconst showSharePuzzleError = () => ({\n type: uiActionTypes.SHOW_SHARE_PUZZLE_ERROR_MODAL,\n})\n\nconst hideSharePuzzleError = () => ({\n type: uiActionTypes.HIDE_SHARE_PUZZLE_ERROR_MODAL,\n})\n\nconst setActiveDropdownAction = (activeDropdown: string) => ({\n type: uiActionTypes.SET_ACTIVE_DROPDOWN,\n payload: { activeDropdown },\n})\n\nconst setImportExportModalVisibleAction = (visible: boolean) => ({\n type: uiActionTypes.SET_IMPORT_EXPORT_MODAL_VISIBLE,\n payload: { visible },\n})\n\nexport const showResetModal = () => (dispatch) => dispatch(showResetAction())\n\nexport const hideResetModal = () => (dispatch) => dispatch(hideResetAction())\n\nexport const showOnscreenKeyboardShowModal = () => (dispatch) => dispatch(showOnscreenKeyboardShowAction())\n\nexport const hideOnscreenKeyboardShowModal = () => (dispatch) => dispatch(hideOnscreenKeyboardShowAction())\n\nexport const showOnscreenKeyboardHideModal = () => (dispatch) => dispatch(showOnscreenKeyboardHideAction())\n\nexport const hideOnscreenKeyboardHideModal = () => (dispatch) => dispatch(hideOnscreenKeyboardHideAction())\n\nexport const showClearAllModal = () => (dispatch) => dispatch(showClearAllAction())\n\nexport const hideClearAllModal = () => (dispatch) => dispatch(hideClearAllAction())\n\nexport const showInfoModal = () => (dispatch) => dispatch(showInfoAction())\n\nexport const showThemeSettingsModal = () => (dispatch) => dispatch(showThemeSettingsModalAction())\n\nexport const hideThemeSettingsModal = () => (dispatch) => dispatch(hideThemeSettingsModalAction())\n\nexport const showTimerSettingsModal = () => (dispatch) => dispatch(showTimerSettingsModalAction())\n\nexport const hideTimerSettingsModal = () => (dispatch) => dispatch(hideTimerSettingsModalAction())\n\nexport const showRevealPuzzleModal = () => (dispatch) => dispatch(showRevealPuzzleModalAction())\n\nexport const hideRevealPuzzleModal = () => (dispatch) => dispatch(hideRevealPuzzleModalAction())\n\nexport const hideInfoModal = () => (dispatch) => dispatch(hideInfoAction())\n\nexport const showHighScoresModal = () => (dispatch) => dispatch(showHighScores())\n\nexport const hideHighScoresModal = () => (dispatch) => dispatch(hideHighScores())\n\nexport const showSharePuzzleModal = (payload: string) => (dispatch) => dispatch(showSharePuzzle(payload))\n\nexport const hideSharePuzzleModal = () => (dispatch) => dispatch(hideSharePuzzle())\n\nexport const showSharePuzzleErrorModal = () => (dispatch) => dispatch(showSharePuzzleError())\n\nexport const hideSharePuzzleErrorModal = () => (dispatch) => dispatch(hideSharePuzzleError())\n\nexport const setActiveDropdown = (activeDropdown: string) => (dispatch) => dispatch(setActiveDropdownAction(activeDropdown))\n\nexport const setImportExportModalVisible = (value: boolean) => (dispatch) => dispatch(setImportExportModalVisibleAction(value))\n","import getIdentifiers from 'common_packages/assets/js/utilities/getIdentifiers'\n\nexport const ASSET_PATH = determineAssetPath()\n\nfunction determineAssetPath() {\n const asIdentifier = getIdentifiers().assetPath\n\n // Determined by querystring or as data-attribute in div#puzzle-portal\n if (asIdentifier) {\n return asIdentifier\n }\n\n // Fallback, the origin of the current script\n const scriptUrl = (document.currentScript as HTMLScriptElement).src\n const scriptOrigin = new URL(scriptUrl).origin\n\n // But only if running on keesing.com\n if (scriptOrigin && scriptOrigin.match(/keesing\\.com/)) {\n return scriptOrigin\n }\n\n // Ultimate fallback\n return 'https://web.keesing.com'\n}\n","import * as xmlJs from 'xml-js'\nimport { GameType } from 'common_packages/assets/js/types/gameDataTypes'\nimport * as gameDataEndpoint from 'common_packages/assets/js/api/gameDataApi'\nimport { AnyAction, Dispatch } from 'redux'\n\n// TODO: perhaps gameType could be removed later.\nexport type TransformXML = (xmlData: xmlJs.ElementCompact, gameType: GameType) => T\n\nexport const loadGameData = async (\n gameType: GameType,\n puzzleId: string,\n customerId: string,\n transformXML: TransformXML,\n dispatch?: Dispatch,\n) => {\n const xmlData = await gameDataEndpoint.getXmlDataForGameType(puzzleId, customerId, dispatch)\n\n return transformXML(xmlData, gameType)\n}\n","import axios, { type AxiosResponse } from 'axios'\nimport { type AnyAction, type Dispatch } from 'redux'\nimport xmlJs from 'xml-js'\nimport { ASSET_PATH } from 'common_packages/assets/js/api/assets'\nimport { showGenericExceptionModal } from 'common_packages/assets/js/actions/uiActions'\nimport getIdentifiers from '../utilities/getIdentifiers'\n\nconst axiosRequestXML = (customerId: string, puzzleId: string) => {\n const url = new URL(`${ASSET_PATH}/content/getxml`)\n url.searchParams.append('clientid', customerId)\n url.searchParams.append('puzzleid', puzzleId)\n\n return axios.get(url.href, { headers: { 'Access-Control-Allow-Origin': '*' } })\n}\n\n/* Fetch game data from server in xml format */\nconst fetchGameData = async (puzzleId, customerId = 'default'): Promise => {\n let response\n try {\n response = await axiosRequestXML(customerId, puzzleId)\n\n if (!response.data.includes('puzzle')) {\n response = axiosRequestXML(customerId, puzzleId)\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error.message)\n }\n\n return response\n}\n\nexport async function getXmlDataForGameType(puzzleId?: string, customerId?: string, dispatch?: Dispatch) {\n const identifiers = getIdentifiers()\n const response = await fetchGameData(puzzleId ?? identifiers.puzzleId, customerId ?? identifiers.customerId)\n if (response?.status === 200 && response.data.includes('puzzle')) {\n return xmlJs.xml2js(response.data, { compact: true })\n }\n if (dispatch) {\n dispatch(showGenericExceptionModal())\n }\n throw new Error(`${response.config.url || 'The response url'} had an invalid data format.`)\n}\n\nconst fetchPuzzleInfo = (customerId: string, puzzleId: string, abortController?: AbortController) => {\n const url = new URL(`${ASSET_PATH}/content/getpuzzleinfo`)\n url.searchParams.append('clientid', customerId)\n url.searchParams.append('puzzleid', puzzleId)\n url.searchParams.append('epochtime', new Date().getTime().toString())\n\n return axios.get(url.href, { signal: abortController?.signal })\n}\n\nexport const getPuzzleInfo = async (customerId: string, puzzleId: string, abortController?: AbortController) => {\n let response\n try {\n response = await fetchPuzzleInfo(customerId, puzzleId, abortController)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error.message)\n }\n\n return response\n}\n","import axios from 'axios'\nimport getIdentifiers from 'common_packages/assets/js/utilities/getIdentifiers'\nimport { ASSET_PATH } from './assets'\n\nconst cache = new Map()\n\nexport const fetchPortal = async (abortController?: AbortController) => {\n const { customerId, portalId } = getIdentifiers()\n try {\n const url = new URL(`${ASSET_PATH}/content/getportal/${portalId ?? customerId}`)\n if (cache.has(url.href)) {\n return cache.get(url.href)\n }\n const response = await axios.get(url.href, { signal: abortController?.signal })\n cache.set(url.href, response.data)\n\n return {\n ...response.data,\n customerId,\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('error in fetchPortal', e)\n throw e\n }\n}\n\nexport const fetchClientSettings = async (abortController?: AbortController) => {\n const { customerId, portalId } = getIdentifiers()\n try {\n const url = new URL(`${ASSET_PATH}/content/getsettings/${portalId ?? customerId}`)\n if (cache.has(url.href)) {\n return cache.get(url.href)\n }\n const response = await axios.get(url.href, { signal: abortController?.signal })\n cache.set(url.href, response.data)\n\n return {\n ...response.data,\n customerId,\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('error in fetchClientSettings', e)\n throw e\n }\n}\n","import { ASSET_PATH } from './assets'\n\nexport const getPuzzleImageURL = (customerId: string, puzzleId: string) => {\n const url = new URL(`${ASSET_PATH}/content/getimage`)\n url.searchParams.append('clientid', customerId)\n url.searchParams.append('puzzleid', puzzleId)\n\n return url.href\n}\n\nexport const getPuzzleSecondImageURL = (customerId: string, puzzleId: string) => {\n const url = new URL(`${ASSET_PATH}/content/getsecondimage`)\n url.searchParams.append('clientid', customerId)\n url.searchParams.append('puzzleid', puzzleId)\n\n return url.href\n}\n","import React, {\n type ComponentProps,\n type PropsWithChildren,\n useRef,\n useCallback,\n useState,\n useEffect,\n useMemo,\n} from 'react'\nimport useFitText from 'use-fit-text'\nimport applePencilHelper from 'common_packages/assets/js/utilities/applePencilHelper'\nimport { isIOS15OrAboveSafari } from 'common_packages/assets/js/utilities/devices'\n\nexport type Props = ComponentProps<'button'> & {\n scaleDownToFit?: boolean\n minScale?: number\n inverted?: boolean\n}\n\nconst ButtonComponent = ({\n children,\n scaleDownToFit,\n inverted,\n ...props\n}: Props) => {\n const ref = useRef() as React.MutableRefObject\n\n const lastTime = useRef(new Date().getTime())\n\n /* On iOS 15 we saw that even with the preventDefault in the touch handler, the onClick was also triggered by a\n * (slightly longer pressed) touch event. That's why we debounce the onClick with 100ms to prevent the click\n * executing twice. Lodash debounce wouldn't work with a leading edge because of rerenders, so we do this manually.\n */\n const {\n onClick, className: classNameFromProps, ...rest\n } = props\n\n const debouncedOnClick = useCallback((e) => {\n const now = new Date().getTime()\n const diff = now - lastTime.current\n lastTime.current = now\n\n /* Following up on the comment above; The debouncedOnClick callback does not account for buttons appearing behind other buttons.\n * The touchend event is faster than the onclick event. It triggers the onClick function for a button, but after that the onClick event still persists.\n * This can result in having that onclick event trigger the onClick function for another button.\n *\n * So for example the 'open' button for the assist component. For some devices the 'close' button appears on the same spot as the 'open' button.\n * Then the issue occurs that the 'open' button is triggered by the touchend event. It shows the assist component and renders the 'close' button.\n * Because the 'close' button it is a new buttonComponent instance, the `diff` is > 100ms.\n * So right after the assist component is opened the 'close' button is triggered by the onClick event.\n *\n * Because of this we only allow the event of type 'touchend' to trigger the onClick function.\n */\n if ((diff > 100 && e.type === 'touchend') || process.env.PLAYWRIGHT_ENV === 'true') {\n onClick(e)\n }\n }, [onClick])\n\n /* Since there is a small possibility that two regular (fast) clicks differ <100ms in time, we restrict this\n debounce fix to iOS 15 safari. */\n const clickHandler = isIOS15OrAboveSafari ? debouncedOnClick : onClick\n\n const className = [\n ...(inverted && classNameFromProps ? [`${classNameFromProps}--inverted`] : []),\n classNameFromProps,\n ].join(' ')\n\n return (\n applePencilHelper.handleTouchEnd(e, clickHandler)}\n onClick={clickHandler}\n {...rest}\n >\n {scaleDownToFit ? (\n // the key is important, it causes the component to re-render when children\n // changes, which means the useFitText needs to be reinitialized\n \n {children}\n \n ) : children}\n \n )\n}\n\nexport default ButtonComponent\n\ntype PropsContent = PropsWithChildren<{\n classNamePrefix?: string\n}>\n\nconst ResizableContent = ({ children, classNamePrefix }: PropsContent) => {\n const [opacity, setOpacity] = useState(0) // content is hidden while the resize magic takes place\n const [maxFontSize, setBaseFontSizeText] = useState()\n\n const onFinish = useCallback((_) => {\n setOpacity(1)\n }, [])\n\n const { fontSize, ref } = useFitText({ logLevel: 'info', maxFontSize, onFinish })\n\n useEffect(() => {\n const size = parseFloat(getComputedStyle(ref.current).getPropertyValue('font-size') ?? '16px')\n const asPercent = size / 16 * 100\n setBaseFontSizeText(asPercent)\n }, [ref])\n\n const style = useMemo(() => ({\n fontSize,\n height: '100%',\n opacity,\n }), [fontSize, opacity])\n\n return (\n \n {children}\n \n )\n}\n","import React from 'react'\nimport { ClientSettingsState } from 'common_packages/assets/js/reducers/settingsReducer'\nimport { TranslateFunction } from 'react-localize-redux'\nimport { PuzzleOptions } from '../types/puzzleOptions'\nimport { CategoryType } from '../types/categoryTypes'\nimport { DisplayOptions } from '../types/displayOptions'\n\nexport type Puzzle = {\n audience: 'registered' | 'premium'\n puzzleID: string\n puzzleType: string\n category: CategoryType\n order: number\n level: number\n title: string\n subtitle: string\n newPuzzle: boolean\n date: string\n puzzleState: string\n url: string\n showDisabled: boolean\n variation: string\n options: PuzzleOptions\n imageUrl?: string\n showPreviewImage?: boolean\n displayOptions: DisplayOptions\n}\n\nexport type PlayersContent = {\n featuredContent: Puzzle[]\n highlightedContent?: Puzzle[]\n puzzles: Puzzle[],\n adventContent: Puzzle[],\n archiveContent: {\n puzzleType: string,\n puzzles: Puzzle[],\n level?: number\n }[],\n}\n\nexport type ClientConfiguration = PlayersContent & {\n customerId: string,\n clientSettings: ClientSettingsState,\n puzzleVariation:string,\n puzzles: Puzzle[]\n}\n\nexport type ClientContextProps = {\n customerId: string\n isPortal: boolean\n translate?: TranslateFunction\n clientSettings?: ClientSettingsState\n players?: PlayersContent\n}\n\nexport const ClientContext = React.createContext({\n customerId: null,\n isPortal: null,\n translate: null,\n})\n","import React, { PropsWithChildren, useMemo } from 'react'\nimport { ClientContext } from '../contexts/ClientContext'\nimport ComposeWithSettingsConfigurationComponent from './higher_order_components/ComposeWithSettingsConfiguration'\nimport { ClientSettingsState } from '../reducers/settingsReducer'\n\ntype Props = PropsWithChildren<{\n isPortal: boolean\n configuration: ClientSettingsState & { customerId: string }\n}>\nconst ClientContextComponent = ({ isPortal, configuration, children }: Props) => {\n const value = useMemo(() => {\n if (!configuration) return null\n return {\n customerId: configuration.customerId,\n /* Client settings for the whole platform: language and region settings, customerId, customizable elements */\n clientSettings: configuration,\n isPortal,\n }\n }, [configuration, isPortal])\n\n if (!value) {\n return null\n }\n\n return (\n \n {children}\n \n )\n}\n\nexport default ComposeWithSettingsConfigurationComponent(ClientContextComponent)\n","import React from 'react'\nimport { fetchClientSettings } from 'common_packages/assets/js/api/portalDataApi'\nimport { type ClientSettingsState } from 'common_packages/assets/js/reducers/settingsReducer'\n\ntype State = {\n configuration: ClientSettingsState\n}\n\nexport default function ComposeWithSettingsConfigurationComponent(Component) {\n return class ConfigurationToPropsComponentHoc extends React.Component {\n private configAbortController: AbortController\n\n constructor(props) {\n super(props)\n this.state = {\n configuration: null,\n }\n }\n\n componentDidMount() {\n this.configAbortController = new AbortController()\n\n if (this.state.configuration === null) {\n fetchClientSettings(this.configAbortController).then((res) => {\n this.setState({ configuration: res })\n })\n }\n }\n\n componentWillUnmount() {\n if (this.configAbortController) {\n this.configAbortController.abort()\n }\n }\n\n render() {\n return \n }\n }\n}\n","import React, { ComponentProps } from 'react'\n\nexport type PillType = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'new'\ntype Props = {\n type?: PillType\n}\n\nconst PillComponent = ({ type = 'primary', children, ...restProps }: Props & ComponentProps<'span'>) => {\n const className = `pill pill--type-${type} ${restProps.className ?? ''}`\n return (\n \n {children}\n \n )\n}\nexport default PillComponent\n","import React, { ComponentProps } from 'react'\n\ntype Props = {\n percentage: number,\n}\n\nconst ProgressBarComponent = (props: Props & ComponentProps<'div'>) => {\n const { percentage, ...restProps } = props\n\n return (\n
    \n
    \n
    \n )\n}\n\nexport default ProgressBarComponent\n","export const puzzlePortal = 'puzzle-portal'\nexport const puzzlePlayer = 'puzzle-player'\nexport const puzzleContainer = 'puzzle-container'\nexport const fullscreenArea = 'fullscreen-area'\nexport const videoAdContainer = 'video-ad-container'\nexport const videoAd = 'video-ad'\n","const breakpoints = {\n SMALL: 576,\n MEDIUM: 768,\n LARGE: 992,\n EXTRA_LARGE: 1200,\n}\n\nexport default breakpoints\n","// amount of ms to delay changing the gamestatus after a reveal\nexport const REVEAL_GAME_STATUS_DELAY = process.env.KLUBBLE_ENV === 'true' ? 2500 : undefined\n\n// amount of ms to wait before allowing the handleGameStatusMiddleware to check status\n// to allow the user to make the combined 'IJ' digram\nexport const IJ_CHECK_DELAY = 3000\n","const directions = Object.freeze({\n HORIZONTAL: 'HORIZONTAL' as DirectionType,\n VERTICAL: 'VERTICAL' as DirectionType,\n getIndexOfDirection: (direction: DirectionType) => (direction === 'HORIZONTAL' ? 0 : 1),\n getOpposite: (direction: DirectionType) => (direction === 'HORIZONTAL' ? 'VERTICAL' : 'HORIZONTAL'),\n})\n\nexport default directions\nexport type DirectionType = 'HORIZONTAL' | 'VERTICAL'\n","/*\n* This constant is used for client that want to force\n* an experience other than their user agent dictates.\n* For example within an app's webview, by setting ?forcemode=mobile in url.\n* */\nconst forceModes = Object.freeze({\n mobile: 'mobile',\n tablet: 'tablet',\n})\n\nexport default forceModes\nexport type ForceMode = keyof typeof forceModes\n","import { type NestedKeyOf } from '../utilities/typescript'\n\nconst all = {\n wordwheel: {\n submitted: 'wordwheel.submitted',\n notFound: 'wordwheel.notFound',\n maxWordLength: 'wordwheel.maxWordLength',\n foundLongestWord: 'wordwheel.foundLongestWord',\n revealedWord: 'wordwheel.revealedWord',\n centerLetterNotUsed: 'wordwheel.centerLetterNotUsed',\n lettersNotUsed: 'wordwheel.lettersNotUsed',\n inputLessThanFour: 'wordwheel.inputLessThanFour',\n },\n fitword: {\n wordAlreadyUsed: 'fitword.wordAlreadyUsed',\n wordDoesNotFit: 'fitword.wordDoesNotFit',\n },\n wordguess: {\n wordDoesNotExist: 'wordguess.wordDoesNotExist',\n wordIncomplete: 'wordguess.wordIncomplete',\n },\n blockpuzzle: {\n placingBlockConflicts: 'blockpuzzle.placingBlockConflicts',\n dropBlockOnInitial: 'blockpuzzle.dropBlockOnInitial',\n pickupBlockConflict: 'blockpuzzle.pickupBlockConflict',\n },\n rebus: {\n wordIncomplete: 'rebus.wordIncomplete',\n incorrectCells: 'rebus.incorrectCells',\n },\n}\n\nexport type GridToasts = NestedKeyOf\nexport const gridToasts = all as { [key in keyof typeof all]: Record }\n","const cellStatuses = {\n UNKNOWN: 'UNKNOWN',\n INITIAL: 'INITIAL',\n REVEALED: 'REVEALED',\n CORRECT: 'CORRECT',\n INCORRECT: 'INCORRECT',\n SEMICORRECT: 'SEMICORRECT',\n NOTE: 'NOTE',\n} as const\n\nexport default cellStatuses\nexport type CellStatusType = keyof typeof cellStatuses\n","const zoomTriggers = {\n ZOOM: 'ZOOM',\n ZOOM_IN: 'ZOOM_IN',\n ZOOM_OUT: 'ZOOM_OUT',\n ZOOM_RESET: 'ZOOM_RESET',\n} as const\n\nexport default zoomTriggers\nexport type ZoomTriggerType = keyof typeof zoomTriggers\n","import React from 'react'\nimport { Store } from 'redux'\nimport { GameType } from 'common_packages/assets/js/types/gameDataTypes'\nimport { Puzzle } from 'common_packages/assets/js/contexts/ClientContext'\n\nexport interface PlayerContextI {\n gameType: GameType\n standalone?: boolean\n openPlayer?: (puzzle: Puzzle) => void\n closePlayer?: () => void\n renderBackLink?: () => void\n language?: string\n puzzleId?: string\n puzzleVariation?: string\n playerRef?: React.RefObject\n processFinishPuzzle?: (store: Store) => void // used in klubble\n isInViewPuzzleMode?: boolean // Used in Klubble endscreen when viewing the puzzle in a drawer.\n}\n\nexport const PlayerContext = React.createContext({\n gameType: null, // todo: why store this in context as we can access it from getIdentifiers?\n standalone: null,\n openPlayer: null,\n closePlayer: null,\n renderBackLink: null,\n playerRef: null,\n language: null,\n puzzleId: null, // todo: why store this in context as we can access it from getIdentifiers?\n puzzleVariation: null,\n processFinishPuzzle: null,\n isInViewPuzzleMode: false,\n})\n","import { useRef } from 'react'\n\n// polyfill for react 18s useId\n\nlet uniqueId = 0\n// eslint-disable-next-line no-plusplus\nconst getUniqueId = () => uniqueId++\n\nexport function useId() {\n const idRef = useRef()\n if (idRef.current === undefined) {\n idRef.current = getUniqueId()\n }\n return `${idRef.current}`\n}\n","import { useRef, useEffect } from 'react'\nimport type { MutableRefObject } from 'react'\n\n/**\n * a type-safe version of the `usePrevious` hook described here:\n * @see {@link https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state}\n */\nexport default function usePrevious(\n value: T,\n): MutableRefObject['current'] {\n const ref = useRef()\n useEffect(() => {\n ref.current = value\n }, [value])\n return ref.current\n}\n","import { useState, useEffect } from 'react'\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window\n return {\n width,\n height,\n }\n}\n\nconst useWindowDimensions = () => {\n const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions())\n\n useEffect(() => {\n let timeoutId = null\n\n function handleResize() {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => setWindowDimensions(getWindowDimensions()), 150)\n }\n\n window.addEventListener('resize', handleResize)\n\n return () => window.removeEventListener('resize', handleResize)\n }, [])\n\n return windowDimensions\n}\n\nexport default useWindowDimensions\n","import { AnyAction, Reducer } from 'redux'\nimport { Toast } from 'common_packages/assets/js/types/Toast'\nimport { type DrawerType } from 'common_packages/assets/js/types/drawerTypes'\nimport { type DrawerSize } from 'common_packages/assets/js/types/drawerSize'\nimport { GridToasts } from 'common_packages/assets/js/constants/gridToasts'\nimport * as uiActionTypes from '../actions/uiActionTypes'\nimport { type GridToastType, gridToastTypes } from '../types/gridToastTypes'\n\nexport type UIState = {\n // todo: perhaps we can create some structure here, ie. nest\n // all drawer related props in a `drawer` object etc\n drawer: DrawerType\n drawerData: any\n drawerForceModal?: boolean\n drawerFullscreenOnMobile?: boolean\n drawerModalAutoGrow?: boolean\n drawerHideHeader?: boolean\n drawerHideClose?: boolean\n drawerBleedToEdge?: boolean\n drawerClassName?: string\n drawerSize?: DrawerSize\n drawerOnClose?: () => void\n transparentOverlay?: boolean\n toasts: Toast[]\n gridToast?: GridToasts\n gridToastType?: GridToastType\n gridToastData?: { [key: string]: string | number }\n modal?: string\n showNav: boolean\n showEndscreen: boolean\n showInfoModal: boolean\n showThemeSettingsModal: boolean\n showRevealPuzzleModal: boolean\n showResetModal: boolean\n showClearAllModal: boolean\n showOnscreenKeyboardShowModal: boolean\n showOnscreenKeyboardHideModal: boolean\n showHighScoresModal: boolean\n showImportExportPuzzleStateModal: boolean\n showLsErrorModal: boolean\n showSharePuzzleModal: boolean\n sharePuzzleText: string\n showSharePuzzleErrorModal: boolean\n showTimerSettingsModal: boolean\n showGenericExceptionModal: boolean\n activeDropdown: string\n}\n\nconst initialState: UIState = {\n drawer: null,\n drawerData: null,\n drawerForceModal: false,\n drawerModalAutoGrow: false,\n drawerHideHeader: false,\n drawerHideClose: false,\n drawerClassName: '',\n transparentOverlay: false,\n toasts: [],\n modal: null,\n showNav: true,\n showEndscreen: false,\n showImportExportPuzzleStateModal: false,\n showInfoModal: false,\n showThemeSettingsModal: false,\n showRevealPuzzleModal: false,\n showResetModal: false,\n showClearAllModal: false,\n showOnscreenKeyboardShowModal: false,\n showOnscreenKeyboardHideModal: false,\n showHighScoresModal: false,\n showLsErrorModal: false,\n showSharePuzzleModal: false,\n sharePuzzleText: '',\n showSharePuzzleErrorModal: false,\n showTimerSettingsModal: false,\n showGenericExceptionModal: false,\n activeDropdown: '',\n}\n\n// eslint-disable-next-line default-param-last\nconst uiReducer: Reducer = (state = initialState, action): UIState => {\n switch (action.type) {\n case uiActionTypes.SET_DRAWER: {\n const {\n drawer,\n drawerData,\n forceModal,\n fullscreenOnMobile,\n modalAutoGrow,\n hideHeader,\n hideClose,\n bleedToEdge,\n className,\n size,\n onClose,\n transparentOverlay,\n } = action.payload\n return {\n ...state,\n drawer,\n drawerData,\n drawerForceModal: forceModal,\n drawerFullscreenOnMobile: fullscreenOnMobile,\n drawerModalAutoGrow: modalAutoGrow,\n drawerHideHeader: hideHeader,\n drawerHideClose: hideClose,\n drawerBleedToEdge: bleedToEdge,\n drawerClassName: className,\n drawerSize: size,\n drawerOnClose: onClose,\n transparentOverlay,\n }\n }\n\n case uiActionTypes.CLOSE_DRAWER: {\n return {\n ...state,\n drawer: null,\n drawerData: null,\n }\n }\n\n case uiActionTypes.ADD_TOAST: {\n return {\n ...state,\n toasts: [...state.toasts, action.payload],\n }\n }\n\n case uiActionTypes.REMOVE_TOAST: {\n return {\n ...state,\n toasts: state.toasts.filter((toast) => toast.id !== action.payload.id),\n }\n }\n\n case uiActionTypes.SET_GRID_TOAST: {\n return {\n ...state,\n gridToast: action.payload.toast,\n gridToastType: action.payload.toastType || gridToastTypes.ERROR,\n gridToastData: action.payload.toastData,\n }\n }\n\n case uiActionTypes.SET_MODAL: {\n return {\n ...state,\n modal: action.payload.modal,\n }\n }\n\n case uiActionTypes.CLOSE_MODAL: {\n return {\n ...state,\n modal: null,\n }\n }\n\n case uiActionTypes.SHOW_NAV: {\n return {\n ...state,\n showNav: action.payload.showNav,\n }\n }\n\n case uiActionTypes.SHOW_ENDSCREEN: {\n return {\n ...state,\n showEndscreen: action.payload.showEndscreen,\n }\n }\n\n case uiActionTypes.SHOW_RESET_MODAL:\n return {\n ...state,\n showResetModal: true,\n }\n\n case uiActionTypes.HIDE_RESET_MODAL:\n return {\n ...state,\n showResetModal: false,\n }\n\n case uiActionTypes.SHOW_ONSCREEN_KEYBOARD_SHOW_MODAL:\n return {\n ...state,\n showOnscreenKeyboardShowModal: true,\n }\n\n case uiActionTypes.HIDE_ONSCREEN_KEYBOARD_SHOW_MODAL:\n return {\n ...state,\n showOnscreenKeyboardShowModal: false,\n }\n\n case uiActionTypes.SHOW_ONSCREEN_KEYBOARD_HIDE_MODAL:\n return {\n ...state,\n showOnscreenKeyboardHideModal: true,\n }\n\n case uiActionTypes.HIDE_ONSCREEN_KEYBOARD_HIDE_MODAL:\n return {\n ...state,\n showOnscreenKeyboardHideModal: false,\n }\n\n case uiActionTypes.SHOW_CLEARALL_MODAL:\n return {\n ...state,\n showClearAllModal: true,\n }\n\n case uiActionTypes.HIDE_CLEARALL_MODAL:\n return {\n ...state,\n showClearAllModal: false,\n }\n\n case uiActionTypes.SHOW_INFO_MODAL:\n return {\n ...state,\n showInfoModal: true,\n }\n\n case uiActionTypes.HIDE_INFO_MODAL:\n return {\n ...state,\n showInfoModal: false,\n }\n\n case uiActionTypes.SHOW_THEME_SETTINGS_MODAL:\n return {\n ...state,\n showThemeSettingsModal: true,\n }\n\n case uiActionTypes.HIDE_THEME_SETTINGS_MODAL:\n return {\n ...state,\n showThemeSettingsModal: false,\n }\n\n case uiActionTypes.SHOW_TIMER_SETTINGS_MODAL:\n return {\n ...state,\n showTimerSettingsModal: true,\n }\n\n case uiActionTypes.HIDE_TIMER_SETTINGS_MODAL:\n return {\n ...state,\n showTimerSettingsModal: false,\n }\n\n case uiActionTypes.SHOW_REVEAL_PUZZLE_MODAL:\n return {\n ...state,\n showRevealPuzzleModal: true,\n }\n\n case uiActionTypes.HIDE_REVEAL_PUZZLE_MODAL:\n return {\n ...state,\n showRevealPuzzleModal: false,\n }\n\n case uiActionTypes.SHOW_LS_ERROR_MODAL:\n return {\n ...state,\n showLsErrorModal: true,\n }\n\n case uiActionTypes.HIDE_LS_ERROR_MODAL:\n return {\n ...state,\n showLsErrorModal: false,\n }\n\n case uiActionTypes.SHOW_HIGH_SCORES_MODAL:\n return {\n ...state,\n showHighScoresModal: true,\n }\n\n case uiActionTypes.HIDE_HIGH_SCORES_MODAL:\n return {\n ...state,\n showHighScoresModal: false,\n }\n\n case uiActionTypes.SHOW_SHARE_PUZZLE_MODAL:\n return {\n ...state,\n showSharePuzzleModal: true,\n sharePuzzleText: action.payload.shareText,\n }\n\n case uiActionTypes.HIDE_SHARE_PUZZLE_MODAL:\n return {\n ...state,\n showSharePuzzleModal: false,\n }\n\n case uiActionTypes.SHOW_SHARE_PUZZLE_ERROR_MODAL:\n return {\n ...state,\n showSharePuzzleErrorModal: true,\n }\n\n case uiActionTypes.HIDE_SHARE_PUZZLE_ERROR_MODAL:\n return {\n ...state,\n showSharePuzzleErrorModal: false,\n }\n\n case uiActionTypes.SHOW_GENERIC_EXCEPTION_MODAL:\n return {\n ...state,\n showGenericExceptionModal: true,\n }\n\n case uiActionTypes.SET_ACTIVE_DROPDOWN:\n return {\n ...state,\n activeDropdown: action.payload.activeDropdown,\n }\n\n case uiActionTypes.SET_IMPORT_EXPORT_MODAL_VISIBLE:\n return {\n ...state,\n activeDropdown: '',\n showImportExportPuzzleStateModal: action.payload.visible,\n }\n\n default:\n return state\n }\n}\n\nexport default uiReducer\n","import { createTransform, type PersistConfig } from 'redux-persist'\nimport defaultStorage from 'redux-persist/lib/storage'\nimport { type Store } from 'redux'\nimport { type CommonSettingsStoreState, type ClientSettingsState } from '../../reducers/settingsReducer'\nimport { type GameType } from '../../types/gameDataTypes'\nimport { isUsingIndexedDb, setupStorage } from '../../utilities/persistency_storage/setupStorage'\n\nexport const persistPrefix = 'persist:'\n\nexport const getPersistKey = (gameType: GameType, puzzleId: string, language: string) => {\n return `${gameType},${puzzleId},${language}`\n}\n\nexport const getPersistConfig = async (key: string, clientSettings: ClientSettingsState): Promise> => {\n let storage = defaultStorage\n if (isUsingIndexedDb(clientSettings)) {\n storage = await setupStorage()\n }\n\n return {\n key,\n storage,\n blacklist: ['undo', 'ui'],\n keyPrefix: persistPrefix,\n transforms: [settingsTransform],\n serialize: true,\n // An issue \"redux-persist: rehydrate for \"(key)\" called after timeout can occur\n // setting timeout to null seems to fix it.\n // https://github.com/rt2zz/redux-persist/issues/786\n timeout: null,\n }\n}\n\n// Dont serialize the 'clientSettings' slice of the settings\nconst settingsTransform = createTransform(\n (state: CommonSettingsStoreState): CommonSettingsStoreState => ({ ...state, clientSettings: null }),\n (state: CommonSettingsStoreState): CommonSettingsStoreState => ({ ...state, clientSettings: null }),\n { whitelist: ['settings'] },\n)\n\n/**\n * Request browser permission to use persisted storage. This way the user\n * can explicitly remove indexeddb instances. See more\n * https://developer.mozilla.org/en-US/docs/Web/API/StorageManager/persist\n */\nexport const requestPersistStorage = () => {\n if (navigator?.storage?.persist) {\n navigator.storage.persist()\n .then((persistent) => {\n if (persistent) {\n // eslint-disable-next-line no-console\n console.log('Storage will not be cleared except by explicit user action')\n } else {\n // eslint-disable-next-line no-console\n console.warn('Storage may be cleared by the UA under storage pressure.')\n }\n })\n }\n}\n","export const drawerTypes = Object.freeze({\n ADD_TO_HOMESCREEN_INFO: 'ADD_TO_HOMESCREEN_INFO',\n CANCEL_SUBSCRIPTION: 'CANCEL_SUBSCRIPTION',\n CANNOT_START_PUZZLE: 'CANNOT_START_PUZZLE',\n EXPRESS: 'EXPRESS',\n FEATURE_IN_DEVELOPMENT: 'FEATURE_IN_DEVELOPMENT',\n GAME_INSTRUCTIONS: 'GAME_INSTRUCTIONS',\n GENERIC_CONFIRM: 'GENERIC_CONFIRM',\n GENERIC_ERROR: 'GENERIC_ERROR',\n GIFT_PUZZLE: 'GIFT_PUZZLE',\n INVITE_PUZZLE: 'INVITE_PUZZLE',\n JOIN_NOW: 'JOIN_NOW',\n NEED_TO_REGISTER: 'NEED_TO_REGISTER',\n NOTIFICATIONS: 'NOTIFICATIONS',\n ONBOARD_MODAL: 'ONBOARD_MODAL', // Provide username and optionally opt-in for newsletter\n ONSCREEN_KEYBOARD_HIDE: 'ONSCREEN_KEYBOARD_HIDE',\n ONSCREEN_KEYBOARD_SHOW: 'ONSCREEN_KEYBOARD_SHOW',\n PLAYER_LIST: 'PLAYER_LIST',\n PUZZLE_CALENDAR_LEVEL: 'PUZZLE_CALENDAR_LEVEL',\n PUZZLE_FINISHED_WITHOUT_CONTRIBUTION: 'PUZZLE_FINISHED_WITHOUT_CONTRIBUTION',\n PUZZLE_ONBOARDING_LEVEL: 'PUZZLE_ONBOARDING_LEVEL',\n PUZZLE_PACK_CONTENT: 'PUZZLE_PACK_CONTENT',\n PUZZLE_PACK_INFO: 'PUZZLE_PACK_INFO',\n PUZZLE_PACK_TYPE_LEVEL: 'PUZZLE_PACK_TYPE_LEVEL',\n PUZZLES_SORTING: 'PUZZLES_SORTING',\n REPORT_BUG: 'REPORT_BUG',\n SET_FIRST_NAME: 'SET_FIRST_NAME',\n SHARE_RESULT: 'SHARE_RESULT',\n SMART_HINT_LOGIC: 'SMART_HINT_LOGIC',\n SMART_HINT_WORDSEARCH: 'SMART_HINT_WORDSEARCH',\n SMART_HINTS_DICTIONARY: 'SMART_HINTS_DICTIONARY',\n SUBSCRIBE: 'SUBSCRIBE',\n TERMS_AND_CONDITIONS: 'TERMS_AND_CONDITIONS',\n UPGRADE_SUBSCRIPTION_PREMIUM_ONLY: 'UPGRADE_SUBSCRIPTION_PREMIUM_ONLY',\n UPGRADE_SUBSCRIPTION: 'UPGRADE_SUBSCRIPTION',\n VIEW_PUZZLE: 'VIEW_PUZZLE',\n})\n\nexport type DrawerType = keyof typeof drawerTypes\n","export const games = {\n ARROWWORD: 'ARROWWORD',\n ARROWWORD_MINI: 'ARROWWORD_MINI',\n ARROWWORD_PLUS: 'ARROWWORD_PLUS',\n ARROWWORD_PLUS_MINI: 'ARROWWORD_PLUS_MINI',\n ARROWWORD_PLUS_SCRAMBLED: 'ARROWWORD_PLUS_SCRAMBLED',\n ARROWWORD_PLUS_SCRAMBLED_MINI: 'ARROWWORD_PLUS_SCRAMBLED_MINI',\n BINERO: 'BINERO',\n BINERO_MINI: 'BINERO_MINI',\n BLOCKPUZZLE: 'BLOCKPUZZLE',\n BLOCKPUZZLE_MINI: 'BLOCKPUZZLE_MINI',\n CAMPING: 'CAMPING',\n CAMPING_MINI: 'CAMPING_MINI',\n CG_1010ARABIANNIGHTS: 'CG_1010ARABIANNIGHTS',\n CG_1010CLASSIC: 'CG_1010CLASSIC',\n CG_BUBBLEACADEMY: 'CG_BUBBLEACADEMY',\n CG_BUBBLES: 'CG_BUBBLES',\n CG_CLASSICSOLITAIRE: 'CG_CLASSICSOLITAIRE',\n CG_COOKIECONNECT: 'CG_COOKIECONNECT',\n CG_DAILYMAHJONG: 'CG_DAILYMAHJONG',\n CG_FLUFFYCUDDLIES: 'CG_FLUFFYCUDDLIES',\n CG_GUESSTHEDRAWING: 'CG_GUESSTHEDRAWING',\n CG_JEWELACADEMY: 'CG_JEWELACADEMY',\n CG_JEWELSOFARABIA: 'CG_JEWELSOFARABIA',\n CG_JUNGLEJEWELS: 'CG_JUNGLEJEWELS',\n CG_MYTHICALJEWELS: 'CG_MYTHICALJEWELS',\n CG_SNAKE: 'CG_SNAKE',\n CG_WOODBLOCKS: 'CG_WOODBLOCKS',\n CG_ZODIACMAHJONG: 'CG_ZODIACMAHJONG',\n CODEBREAKER: 'CODEBREAKER',\n CODEBREAKER_MINI: 'CODEBREAKER_MINI',\n CODEBREAKER_PLUS: 'CODEBREAKER_PLUS',\n CONTINUOUS: 'CONTINUOUS',\n CONTINUOUS_MINI: 'CONTINUOUS_MINI',\n CROSSWORD: 'CROSSWORD',\n CROSSWORD_5X5: 'CROSSWORD_5X5',\n CROSSWORD_FRENCH: 'CROSSWORD_FRENCH',\n CROSSWORD_FRENCH_MINI: 'CROSSWORD_FRENCH_MINI',\n CROSSWORD_MINI: 'CROSSWORD_MINI',\n CRYPTO: 'CRYPTO',\n CRYPTOGRAM: 'CRYPTOGRAM',\n CRYPTOGRAM_MINI: 'CRYPTOGRAM_MINI',\n FILIPPINE: 'FILIPPINE',\n FILIPPINE_CRYPTO: 'FILIPPINE_CRYPTO',\n FILIPPINE_MINI: 'FILIPPINE_MINI',\n FINDDIFFERENCES: 'FINDDIFFERENCES',\n FITWORD: 'FITWORD',\n FITWORD_MINI: 'FITWORD_MINI',\n FLEETCOMMANDER: 'FLEETCOMMANDER',\n FLEETCOMMANDER_MINI: 'FLEETCOMMANDER_MINI',\n HASHI: 'HASHI',\n HASHI_MINI: 'HASHI_MINI',\n HONEYCOMB: 'HONEYCOMB',\n HONEYCOMB_MINI: 'HONEYCOMB_MINI',\n IKURA: 'IKURA',\n IKURA_MINI: 'IKURA_MINI',\n KAKURO: 'KAKURO',\n KAKURO_MINI: 'KAKURO_MINI',\n KDOKU: 'KDOKU',\n KDOKU_MINI: 'KDOKU_MINI',\n MEMORY: 'MEMORY',\n NONOGRAM: 'NONOGRAM',\n NONOGRAM_MINI: 'NONOGRAM_MINI',\n REBUS: 'REBUS',\n SUDOKU: 'SUDOKU',\n SUDOKU_CHAOS: 'SUDOKU_CHAOS',\n SUDOKU_CHAOS_MINI: 'SUDOKU_CHAOS_MINI',\n SUDOKU_HYPER: 'SUDOKU_HYPER',\n SUDOKU_KILLER: 'SUDOKU_KILLER',\n SUDOKU_KILLER_MINI: 'SUDOKU_KILLER_MINI',\n SUDOKU_X: 'SUDOKU_X',\n TECTONIC: 'TECTONIC',\n TECTONIC_MINI: 'TECTONIC_MINI',\n WORDGUESS: 'WORDGUESS',\n WORDSEARCH: 'WORDSEARCH',\n WORDSEARCH_MINI: 'WORDSEARCH_MINI',\n WORDWHEEL: 'WORDWHEEL',\n} as const\n\nexport type GameType = keyof typeof games\n\nexport const puzzleTypeToGameType = (puzzleType: string): GameType => {\n return games[puzzleType.toUpperCase()]\n}\n","export enum gameStatus {\n /** puzzle has not been started (ie user has not clicked 'start' on StartModal) */\n NONE = 'NONE',\n /** puzzle is being played */\n IS_PLAYING = 'IS_PLAYING',\n /** puzzle has all cells filled, but is *not* correct */\n IS_FILLED = 'IS_FILLED',\n /** puzzle is solved correctly */\n IS_SOLVED = 'IS_SOLVED',\n /** this can only happen in wordguess currently, user has used up all their chances to find the word */\n IS_LOST = 'IS_LOST',\n /** is used in some puzzles to show an animation after solving the puzzle */\n SHOW_RESULT = 'SHOW_RESULT',\n}\n\n// todo: Capitalise!\nexport type gameStatusType = keyof typeof gameStatus\n","export const gridToastTypes = {\n SUCCESS: 'success',\n REVEAL: 'reveal',\n ERROR: 'error',\n} as const\n\nexport type GridToastType = typeof gridToastTypes[keyof typeof gridToastTypes]\n","export enum toastTypes {\n SUCCESS = 'success',\n INFO = 'info',\n ERROR = 'error'\n}\n","/*\n * This helper for apple pencil is needed in the player, where the touchmove event prevents default in fullscreen mode.\n * The event listener that prevents the default is set on the player, to prevent scrolling out of fullscreen mode.\n * However, it also prevents the default of triggering a click event afterwards in the case of apple pencil.\n * Other ways of preventing scrolling (including css options) or ways to trigger the click event anyway are ruled out.\n * So, this helper uses the touchStart, touchMove and touchEnd events to trigger the clickHandler that is passed along.\n */\n\nconst applePencilHelper = () => {\n let touchStarted = false\n let moved = 0\n let x = null\n let y = null\n\n const handleTouchStart = (event) => {\n if (event.cancelable) event.preventDefault()\n\n touchStarted = true\n x = event.touches[0].clientX\n y = event.touches[0].clientY\n }\n\n const handleTouchMove = (event) => {\n if (event.cancelable) event.preventDefault()\n\n const newX = event.touches[0].clientX\n const newY = event.touches[0].clientY\n\n moved += Math.abs(newX - x) + Math.abs(newY - y)\n\n x = newX\n y = newY\n }\n\n const handleTouchEnd = (event, onClickHandler) => {\n if (event.cancelable) event.preventDefault()\n\n if (touchStarted && moved < 30) {\n onClickHandler?.(event)\n }\n\n touchStarted = false\n moved = 0\n }\n\n return {\n touchStarted,\n moved,\n handleTouchStart,\n handleTouchMove,\n handleTouchEnd,\n }\n}\n\nexport default applePencilHelper()\n","// Returns true if both arrays overlap completely\nexport const arraysEqual = (a: Array, b: Array) => (a && b && a.length === b.length && a.every((item) => b.includes(item)) && b.every((item) => a.includes(item)))\n","/*\n * Imitate scrolling with touch. Only for iOS, to prevent going out of fullscreen with native scroll.\n * With the native scroll, if we can't scroll downwards (anymore) in a scrollable div the ancestor div(s) take over,\n * and by scrolling the player div, we leave fullscreen mode unintentionally.\n */\n\nimport React from 'react'\nimport { isIOS } from 'react-device-detect'\n\nconst directions = Object.freeze({\n x: 'x',\n y: 'y',\n})\n\nconst customScroll = (direction: (typeof directions)[keyof typeof directions]) => {\n let z = null // x or y\n let time = null\n const lastDiffs = [0, 0, 0, 0]\n const lastTimeDiffs = [0, 0, 0, 0]\n let averageDiff = 0\n let timeAfterTouchEnd = 0\n let interval = null\n // we only apply custom scroll when the touchmove event is defaultPrevented\n let defaultPrevented = true\n\n const handleTouchStart = (e) => {\n clearInterval(interval)\n z = direction === directions.x ? e.touches[0].clientX : e.touches[0].clientY\n time = performance.now()\n }\n\n const handleTouchMove = (e, ref: React.RefObject) => {\n if (!e.defaultPrevented) {\n defaultPrevented = false\n return\n }\n defaultPrevented = true\n const newZ = direction === directions.x ? e.touches[0].clientX : e.touches[0].clientY\n const lastDiff = newZ - z\n\n if (direction === directions.x) {\n // eslint-disable-next-line no-param-reassign\n ref.current.scrollLeft -= lastDiff\n } else {\n // eslint-disable-next-line no-param-reassign\n ref.current.scrollTop -= lastDiff\n }\n\n // Hold last four differences in position and time.\n lastDiffs.shift()\n lastDiffs.push(lastDiff)\n z = newZ\n\n lastTimeDiffs.shift()\n lastTimeDiffs.push(performance.now() - time)\n time = performance.now()\n }\n\n const handleTouchEnd = (ref: React.RefObject) => {\n if (!defaultPrevented) {\n return\n }\n\n timeAfterTouchEnd = 0\n\n // Get average movement and time difference from last four touchMove events.\n averageDiff = lastDiffs.reduce((p, c) => p + c, 0) / 4\n const averageTimeDiff = lastTimeDiffs.reduce((p, c) => p + c, 0) / 4\n\n // If time difference > 20ms we stopped swiping and the scrolling should stop.\n if (performance.now() - time < 20) {\n interval = setInterval(() => {\n if (!ref.current) {\n clearInterval(interval)\n return\n }\n\n if (direction === directions.x) {\n // eslint-disable-next-line no-param-reassign\n ref.current.scrollLeft -= averageDiff\n } else {\n // eslint-disable-next-line no-param-reassign\n ref.current.scrollTop -= averageDiff\n }\n\n /* First 200ms, scroll with the same speed as before letting go of finger.\n * Afterwards, slow down until movement per time interval is less than 0.5px.\n */\n if (timeAfterTouchEnd < 200) {\n timeAfterTouchEnd += averageTimeDiff\n } else if (Math.abs(averageDiff) >= 0.5) {\n averageDiff *= 1 - 0.008 * averageTimeDiff\n } else {\n clearInterval(interval)\n }\n }, averageTimeDiff)\n }\n }\n return isIOS ? {\n handleTouchStart,\n handleTouchMove,\n handleTouchEnd,\n } : {\n handleTouchStart: () => null,\n handleTouchMove: () => null,\n handleTouchEnd: () => null,\n }\n}\n\nexport const customHorizontalScroll = customScroll(directions.x)\n\nexport const customVerticalScroll = customScroll(directions.y)\n","/**\n * Deep clone any object\n * @param obj Any type of object you want to deep clone.\n * @returns Deep clone of obj (same type as obj)\n */\nexport const deepCloneObject = (obj: T): T => {\n // Use structuredClone() if available\n if (typeof structuredClone === 'function') {\n return structuredClone(obj)\n }\n // Compatible for older browsers\n return JSON.parse(JSON.stringify(obj))\n}\n","import {\n browserVersion,\n isMobile as rddIsMobile,\n isMobileSafari,\n isSafari,\n osVersion,\n isSamsungBrowser as rddIsSamsungBrowser,\n} from 'react-device-detect'\nimport getIdentifiers from 'common_packages/assets/js/utilities/getIdentifiers'\n\n// At the time of writing, samsung browser is not detected always by react-device-detect@2.2.3\n// so this is (hopefully) a temporary fix (https://github.com/duskload/react-device-detect/issues/225)\nexport const isSamsungBrowser = rddIsSamsungBrowser || navigator.userAgent.includes('SamsungBrowser')\n\n// isMobile Keesing Puzzle Platform utility to detect if is safari in desktop mode...\n// react-device-detect extension\n\nexport const isMobile = rddIsMobile || (isSafari && 'ontouchstart' in document.documentElement) || getIdentifiers()?.forcemode === 'mobile' || isSamsungBrowser\n\n// iOS 15.7 seems to break 'isMobileSafari' and 'browserVersion' from 'react-device-detect'.\n// As a fallback we now check if the user is on mobile and safari and check the OS version,\n// because the Safari version is always the same as the iOS version (if iOS = 15.7 then Safari is at least 15.x)\nexport const isIOS15OrAboveSafari = (isMobileSafari || (isMobile && isSafari))\n && (parseInt(browserVersion, 10) >= 15 || parseInt(osVersion, 10) >= 15)\n\n// Hacks for working around ios18 safari issues...\nexport const isIOS18Safari = isMobileSafari && +browserVersion >= 18\n\n// Detect mobiles and mobiles/tablets that use desktop site version in safari or the samsung browser.\nexport const isMobileDevice = rddIsMobile || isSamsungBrowser || (isSafari && 'ontouchstart' in document.documentElement)\n","/*\n * Fullscreen functionality.\n *\n * On android we use the native fullscreen API, on iphone we set the fullscreen area to fit the screen manually.\n * The fullscreen class that is set on the fullscreen area is used in both android and iphone to set specific styles inside of the fullscreen area.\n *\n * On Klubble we utilise a swipe to begin functionality, for which we add an extra 20rem to the height of the puzzle player. (parent of fullscreen area)\n * This also makes sure the address bar stays small, which gives more room for the player. On b2b, the address bar might be small because the user had\n * to scroll down anyway before starting, but this depends on the client. Setting the height of the parent of the fullscreen-area to 100vh makes sure we don't enlarge\n * the minimized address bar straight away on b2b, after going fullscreen.\n *\n * For safari on ios 15 we make an exception since the address bar only stays small (after swiping in the grid for example) if the complete page is less than 100vh.\n * In Klubble we set the height on the player to 100vh - 1px through DimensionsProviderComponent with the class ios15-or-above-safari.\n * In b2b we set this height on the html and body of the client through the keesing-fullscreen class in this file.\n * We remove this and other classes on b2b when resizing or exiting fullscreen, and also when pressing back in the action bar if clientsetting\n * exitFullscreenOnBackButton is true, or at least when unmounting the action bar.\n */\n\nimport { isIOS, isSafari, isTablet } from 'react-device-detect'\nimport { isIOS15OrAboveSafari, isMobile, isMobileDevice } from './devices'\nimport { isIframe, isIOSWebview } from './embedMethods'\nimport * as idAttributes from '../config/idAttributes'\nimport forceModes from '../constants/forceModes'\n\ntype RequestFullscreen = typeof document.documentElement.requestFullscreen\n\ndeclare global {\n interface Document {\n mozCancelFullScreen?: RequestFullscreen\n msExitFullscreen?: RequestFullscreen\n webkitExitFullscreen?: RequestFullscreen\n mozFullScreenElement?: Element;\n msFullscreenElement?: Element;\n webkitFullscreenElement?: Element;\n }\n\n interface HTMLElement {\n mozFullScreenElement?: Element;\n msFullscreenElement?: Element;\n webkitFullscreenElement?: Element;\n webkitRequestFullscreen: RequestFullscreen;\n mozRequestFullScreen: RequestFullscreen;\n msRequestFullscreen: RequestFullscreen;\n }\n}\n\nlet lastTouchEndTime = 0\nconst lastTouchTreshold = 1000\n\nif (isIOS15OrAboveSafari) {\n // lastTouchEndTime is needed in the resizeHandler for iOS15+ (see comment there)\n window.addEventListener('touchend', () => {\n lastTouchEndTime = Date.now()\n })\n}\n\nconst preventDefault = (e) => {\n e.preventDefault()\n}\n\n/*\n * The pseudoFullScreen function makes sure we can't exit \"pseudo fullscreen\" (i.e. fixed 100% width/height on iphone without an API)\n * by a simple touchmove. It also closes the fullscreen mode when we detect a resize event. For example by clicking the minimized address bar\n * the user can still exit fullscreen mode and pause the game.\n * Setting the resizeEventListener after timeoutMS is needed because the address bar might still be animating towards a small version of its self\n * when this pseudoFullScreen function is called (and while it is animating it is spawning resize events). The same can happen if the puzzle player is\n * positioned very low on a long page. The size of the page changes when the user enters fullscreen and resize events will be triggered.\n */\nconst pseudoFullScreen = (elem: HTMLElement, pauseTimer: () => void) => {\n elem.addEventListener('touchmove', preventDefault)\n const timeoutMS = 1000\n\n setTimeout(() => {\n window.addEventListener('resize', function handler() {\n /* If on iOS15+ Safari the resizeEvent occurs within a second (lastTouchThreshold) of\n the last touchEnd (up) event, we assume that the user has chosen to have the addressbar\n on top in safari. If this is the case, a swipe down in the player will always\n lead to the player going out of pseudo fullscreen. We cannot fix this. Hashi and Wordsearch\n puzzles become unplayable due to this, since every swipe (for a bridge for example) will lead\n to the orange fullscreen field appearing. That's why we do not show the orange fullscreen field\n in this case (after initially starting the puzzle) and remove the fullscreen-safari styling (padding-bottom).\n */\n if (isIOS15OrAboveSafari && Date.now() - lastTouchEndTime < lastTouchTreshold) {\n elem.classList.remove('fullscreen-safari')\n elem.classList.remove('fullscreen-safari-small')\n } else {\n pauseTimer()\n closeFullscreen(elem)\n }\n this.removeEventListener('resize', handler)\n })\n }, timeoutMS)\n}\n\n/**\n * Sometimes the browser doesn't handle the notch of android devices correctly.\n * The fullscreen api uses the whole screen while the viewport doesn't use the pixels from the top where the notch is.\n * Because of this the puzzle player content is pushed down (DD-3065).\n * Calculating these missing pixels and adding them as bottom padding fixes this.\n */\nconst handleNotchPadding = (elem: HTMLElement) => {\n const handler = () => {\n // Let other queued tasks finish first (including entering fullscreen). To get the correct inner- and outerHeight values.\n setTimeout(() => {\n const notchHeight = window.innerHeight - window.outerHeight\n if (notchHeight > 0) {\n elem.classList.add('notch-padding')\n elem.style.setProperty('--notch-padding', `${notchHeight}px`)\n } else if (!elem || elem.classList.contains('notch-padding') || !elem.classList.contains('fullscreen')) {\n elem.classList.remove('notch-padding')\n elem.style.setProperty('--notch-padding', null)\n window.removeEventListener('resize', handler)\n }\n }, 0)\n }\n\n window.addEventListener('resize', handler)\n}\n\nexport function openFullscreen(elem: HTMLElement, pauseTimer: () => void) {\n /* This class is used for styling/showing elements inside the fullscreen area for all combinations klubble/b2b + iphone/android.\n * Also the fullscreen class is given the same fullscreen css properties as the native fullscreen api. (fixed 100% width/height position)\n */\n elem.classList.add('fullscreen')\n\n if (process.env.KLUBBLE_ENV !== 'true') {\n addFullscreenParentClass()\n addFullscreenActiveClass()\n addIOS15FullscreenClass()\n }\n\n // Check for the notch bug on android devices.\n if (!isIOS && (isMobileDevice || isTablet)) {\n handleNotchPadding(elem)\n }\n\n if (isMobile && isSafari) {\n if (window.screen.height < 800) {\n elem.classList.add('fullscreen-safari-small')\n } else {\n elem.classList.add('fullscreen-safari')\n }\n\n pseudoFullScreen(elem, pauseTimer)\n } else if ((isTablet || isMobile) && isIOS) { /* Ignore the native fullscreen api for iPad and iPhone */\n pseudoFullScreen(elem, pauseTimer)\n } else if (elem.requestFullscreen) {\n elem.requestFullscreen().catch((err) => {\n console.warn(`Error attempting to enable fullscreen mode: ${err.message} (${err.name})`)\n })\n } else if (elem.mozRequestFullScreen) { /* Firefox */\n elem.mozRequestFullScreen()\n } else if (elem.webkitRequestFullscreen) { /* Chrome, Safari and Opera */\n elem.webkitRequestFullscreen()\n } else if (elem.msRequestFullscreen) { /* IE/Edge */\n elem.msRequestFullscreen()\n } else { /* No fullscreen available (Apple) */\n pseudoFullScreen(elem, pauseTimer)\n }\n\n window.addEventListener('fullscreenchange', function handler() {\n if (!document.fullscreenElement) {\n pauseTimer()\n this.removeEventListener('fullscreenchange', handler)\n if (process.env.KLUBBLE_ENV === 'true') {\n closeFullscreen(elem)\n } else if (window.localStorage.forceModeUserChoice === forceModes.mobile) {\n /* If the user has chosen forceMobile, he/she is on a larger device. On B2B, when exiting fullscreen,\n * call closeFullscreen so that fullscreen classes are removed and onscreen keyboard is no longer visible and page is scrollable */\n closeFullscreen(elem)\n }\n }\n })\n}\n\nexport function closeFullscreen(elem, keepFullscreenClass = false) {\n if (document.fullscreenElement) {\n document.exitFullscreen()\n } else if (document.mozFullScreenElement) { /* Firefox */\n document.mozCancelFullScreen()\n } else if (document.webkitFullscreenElement) { /* Chrome, Safari and Opera */\n document.webkitExitFullscreen()\n } else if (document.msFullscreenElement) { /* IE/Edge */\n document.msExitFullscreen()\n } else {\n elem.removeEventListener('touchmove', preventDefault)\n }\n\n if (!keepFullscreenClass) {\n elem.classList.remove('fullscreen')\n elem.classList.remove('fullscreen-safari')\n elem.classList.remove('fullscreen-safari-small')\n }\n\n if (process.env.KLUBBLE_ENV !== 'true') {\n removeFullscreenParentClass()\n removeFullscreenActiveClass()\n removeIOS15FullscreenClass()\n }\n}\n\n/*\n * When we go fullscreen the fullscreen area becomes fixed on the screen, which means its height isn't included in its parent's anymore.\n * On Klubble we already have a height of 100vh + 20rem on the parent, but on b2b the height of the parent might become too small, causing\n * the player to go out of fullscreen on iphone (address bar is not minimized anymore). That's why we set a height of 100vh on the parent\n * using the class fullscreen-parent.\n */\nfunction addFullscreenParentClass() {\n const puzzlePlayerElement = document.getElementById(idAttributes.puzzlePlayer)\n\n if (puzzlePlayerElement) {\n puzzlePlayerElement.classList.add('fullscreen-parent')\n }\n}\n\nfunction removeFullscreenParentClass() {\n const puzzlePlayerElement = document.getElementById(idAttributes.puzzlePlayer)\n\n if (puzzlePlayerElement) {\n puzzlePlayerElement.classList.remove('fullscreen-parent')\n }\n}\n\n/* Add fullscreen-active class to the portal, that can be used by the b2b client to check if we're in fullscreen mode.\n * Used by slm to prevent header overlapping our player in fullscreen mode.\n */\nfunction addFullscreenActiveClass() {\n const puzzlePortalElement = document.getElementById(idAttributes.puzzlePortal)\n\n if (puzzlePortalElement) {\n puzzlePortalElement.classList.add('fullscreen-active')\n }\n}\n\nfunction removeFullscreenActiveClass() {\n const puzzlePortalElement = document.getElementById(idAttributes.puzzlePortal)\n\n if (puzzlePortalElement) {\n puzzlePortalElement.classList.remove('fullscreen-active')\n }\n}\n\n/* We adjust the height of the html and body when going fullscreen on iOS15 safari, to prevent going out of fullscreen\n * by swiping. This html and body belongs to the client, so this won't work when the portal is loaded in an iframe for\n * example. When exiting fullscreen we immediately remove the class again.\n *\n * For Klubble we add a class ios15-or-above-safari in DimensionsProviderComponent to adjust the height of the player in fullscreen and non-fullscreen,\n * since we don't need the extra space before going fullscreen to minimize the address bar.\n */\nfunction addIOS15FullscreenClass() {\n if (isIOS15OrAboveSafari && !(isIframe() || isIOSWebview())) {\n document.documentElement.classList.add('keesing-fullscreen')\n }\n}\n\nfunction removeIOS15FullscreenClass() {\n if (isIOS15OrAboveSafari && !(isIframe() || isIOSWebview())) {\n document.documentElement.classList.remove('keesing-fullscreen')\n }\n}\n","import { type GameType } from '../types/gameDataTypes'\n\nconst transformGameNameForTranslation = (gameType: GameType) => {\n let gameName = gameType?.toLowerCase()\n if (gameType && gameName.indexOf('_') > -1) {\n gameName = gameName.replace(/_/g, '-')\n }\n\n return gameName\n}\n\nexport const transformGameNameForURL = (gameName) => {\n let transformedGameName = gameName.toLowerCase().replace(/ /g, '-')\n // Remove accents/diacritics from game type.\n transformedGameName = transformedGameName.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '')\n // Remove any character in Unicode category \"So\" (Symbol, Other), particularly ® and ™\n transformedGameName = transformedGameName.replace(/\\p{So}/gu, '')\n\n return transformedGameName\n}\n\nexport default transformGameNameForTranslation\n","import { games, GameType } from 'common_packages/assets/js/types/gameDataTypes'\n\nconst gamesFolderNames = {\n [games.ARROWWORD]: 'arrowword',\n [games.ARROWWORD_MINI]: 'arrowword',\n [games.ARROWWORD_PLUS]: 'arrowword_plus',\n [games.ARROWWORD_PLUS_MINI]: 'arrowword_plus',\n [games.ARROWWORD_PLUS_SCRAMBLED]: 'arrowword_plus_scrambled',\n [games.ARROWWORD_PLUS_SCRAMBLED_MINI]: 'arrowword_plus_scrambled',\n [games.BINERO]: 'binero',\n [games.BINERO_MINI]: 'binero',\n [games.BLOCKPUZZLE]: 'blockpuzzle',\n [games.BLOCKPUZZLE_MINI]: 'blockpuzzle',\n [games.CAMPING]: 'camping',\n [games.CAMPING_MINI]: 'camping',\n [games.CG_1010ARABIANNIGHTS]: 'coolgames/cg_1010arabiannights',\n [games.CG_1010CLASSIC]: 'coolgames/cg_1010classic',\n [games.CG_BUBBLEACADEMY]: 'coolgames/cg_bubbleacademy',\n [games.CG_BUBBLES]: 'coolgames/cg_bubbles',\n [games.CG_CLASSICSOLITAIRE]: 'coolgames/cg_classicsolitaire',\n [games.CG_COOKIECONNECT]: 'coolgames/cg_cookieconnect',\n [games.CG_DAILYMAHJONG]: 'coolgames/cg_dailymahjong',\n [games.CG_FLUFFYCUDDLIES]: 'coolgames/cg_fluffycuddlies',\n [games.CG_GUESSTHEDRAWING]: 'coolgames/cg_guessthedrawing',\n [games.CG_JEWELACADEMY]: 'coolgames/cg_jewelacademy',\n [games.CG_JEWELSOFARABIA]: 'coolgames/cg_jewelsofarabia',\n [games.CG_JUNGLEJEWELS]: 'coolgames/cg_junglejewels',\n [games.CG_MYTHICALJEWELS]: 'coolgames/cg_mythicaljewels',\n [games.CG_SNAKE]: 'coolgames/cg_snake',\n [games.CG_WOODBLOCKS]: 'coolgames/cg_woodblocks',\n [games.CG_ZODIACMAHJONG]: 'coolgames/cg_zodiacmahjong',\n [games.CODEBREAKER]: 'codebreaker',\n [games.CODEBREAKER_MINI]: 'codebreaker',\n [games.CODEBREAKER_PLUS]: 'codebreaker_plus',\n [games.CONTINUOUS]: 'continuous',\n [games.CONTINUOUS_MINI]: 'continuous',\n [games.CROSSWORD]: 'crossword',\n [games.CROSSWORD_MINI]: 'crossword',\n [games.CROSSWORD_FRENCH]: 'frenchcrossword',\n [games.CROSSWORD_FRENCH_MINI]: 'frenchcrossword',\n [games.CRYPTOGRAM]: 'crypto',\n [games.CRYPTOGRAM_MINI]: 'crypto',\n [games.FILIPPINE]: 'filippine',\n [games.FILIPPINE_CRYPTO]: 'filippine',\n [games.FILIPPINE_MINI]: 'filippine',\n [games.FINDDIFFERENCES]: 'finddifferences',\n [games.FITWORD]: 'fitword',\n [games.FITWORD_MINI]: 'fitword',\n [games.FLEETCOMMANDER]: 'fleetcommander',\n [games.FLEETCOMMANDER_MINI]: 'fleetcommander',\n [games.HASHI]: 'hashi',\n [games.HASHI_MINI]: 'hashi',\n [games.HONEYCOMB]: 'honeycomb',\n [games.HONEYCOMB_MINI]: 'honeycomb',\n [games.IKURA]: 'ikura',\n [games.IKURA_MINI]: 'ikura',\n [games.KAKURO]: 'kakuro',\n [games.KAKURO_MINI]: 'kakuro',\n [games.KDOKU]: 'kdoku',\n [games.KDOKU_MINI]: 'kdoku',\n [games.MEMORY]: 'memory',\n [games.NONOGRAM]: 'nonogram',\n [games.NONOGRAM_MINI]: 'nonogram',\n [games.REBUS]: 'rebus',\n [games.SUDOKU]: 'sudoku',\n [games.SUDOKU_CHAOS]: 'sudoku_chaos',\n [games.SUDOKU_CHAOS_MINI]: 'sudoku_chaos',\n [games.SUDOKU_HYPER]: 'sudoku_hyper',\n [games.SUDOKU_KILLER]: 'sudoku_killer',\n [games.SUDOKU_KILLER_MINI]: 'sudoku_killer',\n [games.SUDOKU_X]: 'sudoku_x',\n [games.TECTONIC]: 'tectonic',\n [games.TECTONIC_MINI]: 'tectonic',\n [games.WORDGUESS]: 'wordguess',\n [games.WORDSEARCH]: 'wordsearch',\n [games.WORDSEARCH_MINI]: 'wordsearch',\n [games.WORDWHEEL]: 'wordwheel',\n}\n\nexport function getGamesFolder(gameType: GameType) {\n return gamesFolderNames[gameType]\n}\n","import { ForceMode } from 'common_packages/assets/js/constants/forceModes'\nimport getParameterByName from './getParameterByName'\nimport { puzzlePortal } from '../config/idAttributes'\n\n/**\n * getIdentifiers gives the puzzle loader query params or data attributes for:\n puzzleid\n customerid\n gametype\n publicpath\n playerpath\n puzzlevariation\n */\n\nexport type DebugOption = 'importExport' // import and export of puzzle state\n\ntype Identifiers = Partial<{\n customerId: string\n portalId: string\n forcemode: ForceMode\n gameType: string\n assetPath: string\n playerPath: string\n publicPath: string\n puzzleId: string\n puzzleVariation: string\n statsCustomerId: string // Optional override for customerId in the stats API\n debug: DebugOption[]\n}>\n\nconst getIdentifiers = (): Identifiers => {\n const puzzlePortalElement = document.getElementById(puzzlePortal)\n const dataset: DOMStringMap = (puzzlePortalElement) ? puzzlePortalElement.dataset : {}\n\n // querystring receives precedence\n const identifiers: Identifiers = {\n puzzleId: getParameterByName('puzzleid') ?? dataset.puzzleid,\n customerId: getParameterByName('customerid') ?? dataset.customerid,\n portalId: getParameterByName('portalid') ?? dataset.portalid,\n gameType: getParameterByName('gametype') ?? dataset.gametype,\n assetPath: getParameterByName('assetpath') ?? dataset.assetpath,\n publicPath: getParameterByName('publicpath') ?? dataset.publicpath,\n playerPath: getParameterByName('playerpath') ?? dataset.playerpath,\n puzzleVariation: getParameterByName('puzzlevariation') ?? dataset.puzzlevariation,\n statsCustomerId: getParameterByName('statscustomerid') ?? dataset.statscustomerid,\n forcemode: (getParameterByName('forcemode') ?? dataset.forcemode) as ForceMode,\n debug: parseList(getParameterByName('debug') ?? dataset.debug),\n }\n\n if (!identifiers.forcemode) {\n /* If forcemode is not set by the url, check to see if forceModeUserChoice was set in the localstorage by user choice (by DrawerContentShowOnscreenKeyboard).\n This way, the player will show (forced) as mobile. */\n const { forceModeUserChoice } = window.localStorage\n if (forceModeUserChoice) {\n identifiers.forcemode = forceModeUserChoice\n }\n }\n\n if (identifiers.puzzleId?.includes('_today') || identifiers.puzzleId?.includes('_yesterday') || identifiers.puzzleId?.endsWith('_puzzle')) {\n identifiers.puzzleId = `${identifiers.puzzleId}_`\n }\n return identifiers\n}\n\nexport const hasDebugOption = (option: DebugOption) => {\n return getIdentifiers().debug.includes(option)\n}\n\nconst parseList = (input: string) => {\n if (!input) return []\n return input.split('|') as Array\n}\n\nexport default getIdentifiers\n","export default function getParameterByName(name: string) {\n return new URLSearchParams(window.location.search).get(name)\n}\n","export const queryParams = Object.freeze({\n KLUBBLE_PUZZLE_ID: 'klubblePuzzleId',\n})\n\nexport type queryParamsType = typeof queryParams[keyof typeof queryParams]\n\nexport default function getQueryParam(paramName: queryParamsType): number {\n const rx = new RegExp(`[?&]${paramName}=([^&]+).*$`)\n const match = window.location.search.match(rx)\n const queryParamValue = match ? Number(match[1]) : null\n return queryParamValue\n}\n","import { type LanguageCode } from '../types/locale'\n\nexport const languageUsesIJ = (language: LanguageCode): boolean => ['nl', 'be'].includes(language?.toLowerCase())\n\nexport const combineIJ = (word: string): string[] => {\n return word.split('').reduce((arr, currentLetter) => {\n if (arr.slice(-1)[0]?.toUpperCase() === 'I' && currentLetter.toUpperCase() === 'J') {\n arr.pop()\n arr.push('IJ')\n } else {\n arr.push(currentLetter)\n }\n return arr\n }, [])\n}\n","import { setupStorage } from 'common_packages/assets/js/utilities/persistency_storage/setupStorage'\nimport uniqueid from 'uniqid'\nimport { ArchiveCategoryType, ArchivePuzzleCollection } from 'portal/resources/assets/js/hooks/useArchiveData'\nimport { managePersistencyStorageSpace } from './persistency_storage/managePersistencyStorageSpace'\nimport * as localStorageKeys from './persistency_storage/localStorageKeys'\nimport { parsePuzzleState, stringifyPuzzleState } from '../components/puzzle_state/stateParser'\nimport { GameType } from '../types/gameDataTypes'\nimport { CommonPuzzleStoreState } from '../store/types'\nimport { ClientSettingsState } from '../reducers/settingsReducer'\nimport { GameInfoState } from '../reducers/gameInfoReducer'\nimport { NEVER } from '../actions/gameInfoActions'\nimport { getPersistKey, persistPrefix } from '../store/utilities/persistency'\n\n/*\n* Here are methods for retrieving persistent data that are not handled with redux-persist\n* */\n\nexport const setItemSafely = (key: string, value: any) => {\n try {\n window.localStorage.setItem(key, value)\n } catch (e) {\n managePersistencyStorageSpace(key)\n window.localStorage.setItem(key, value)\n }\n}\n\n/*\n* USER MANAGEMENT\n* */\nexport const generateUniqueUserId = (force = false) => {\n let userId = window.localStorage.getItem(localStorageKeys.uniqueUserId)\n if (!userId || force) {\n userId = uniqueid()\n setItemSafely(localStorageKeys.uniqueUserId, userId)\n }\n return userId\n}\n\n/** Returns the 'keesing-unique-userid'. If not set, will generate one */\nexport const getUniqueUserId = () => {\n let userId = window.localStorage.getItem(localStorageKeys.uniqueUserId)\n if (!userId) {\n userId = generateUniqueUserId()\n }\n\n return userId\n}\n\n/*\n* AUTHENTICATION\n* */\n/** @obsolete */\nexport const userLoggedIn = () => {\n const key = window.localStorage.getItem(localStorageKeys.loggedIn)\n return key === 'true'\n}\n\n/*\n* Get puzzle state without past and with added timer counter, to save to backup in localStorage or b2b server.\n* We remove/add it here because we might not have time to dispatch an action, in case of app unload.\n* */\nexport const getPuzzleStateModified = (gameType: GameType, puzzleId: string, language: string, counter: number, storeState?: CommonPuzzleStoreState) => {\n const puzzleState: CommonPuzzleStoreState = storeState || parsePuzzleState(getPuzzleState(gameType, puzzleId, language))\n\n if (puzzleState.timer?.counter !== undefined) {\n puzzleState.timer.counter = counter\n }\n\n return stringifyPuzzleState(puzzleState)\n}\n\nexport const getPuzzleState = (gameType: GameType, puzzleId: string, language: string) => {\n const persistKey = getPersistKey(gameType, puzzleId, language)\n return window.localStorage.getItem(persistPrefix + persistKey)\n}\n\n/*\n For android, we need a backup of the localstorage,\n because multiple instances of the store\n can overwrite it.\n\n We also remove the history from the state, to save space in the localStorage.\n*/\n\nexport function setLocalStorageBackup(gameType: GameType, puzzleId: string, language: string, counter: number) {\n const puzzleState = getPuzzleStateModified(gameType, puzzleId, language, counter)\n\n setItemSafely(`${persistPrefix + getPersistKey(gameType, puzzleId, language)}--backup`, puzzleState)\n}\n\nexport function overwriteLocalStorePersistencyStore(persistKey: string) {\n const value = localStorage.getItem(`${persistKey}--backup`)\n /* If there is a backup local storage value for the current persist key */\n if (value) {\n /* Then reset the persistKey storage with it. */\n setItemSafely(persistKey, value)\n }\n}\n\nexport const setServerStateValid = (puzzleId, value) => {\n let serverStateValidObj = JSON.parse(window.localStorage.getItem(localStorageKeys.serverStateValid))\n\n // By checking for type object we also overwrite old boolean values with an empty object.\n if (!serverStateValidObj || typeof serverStateValidObj !== 'object') {\n serverStateValidObj = {}\n }\n\n serverStateValidObj[puzzleId] = value\n\n setItemSafely(localStorageKeys.serverStateValid, JSON.stringify(serverStateValidObj))\n}\n\nexport const isServerStateValid = (puzzleId) => {\n const serverStateValidObj = JSON.parse(window.localStorage.getItem(localStorageKeys.serverStateValid))\n\n return serverStateValidObj?.[puzzleId]\n}\n\n/**\n* This method sets the last 80 storage object keys.\n* When there's not enough space for adding new persistency storage,\n* the managePersistencyStorageSpace function will first try to remove\n* all but these 80 records. Else it will remove all persistency storage objects.\n* */\nexport function setLastCreatedStorages(key) {\n const storages = JSON.parse(getLastCreatedStorages()) || []\n\n if (!storages?.includes(key)) {\n let lastStorages = [...storages, key]\n\n if (lastStorages.length > 80) {\n lastStorages = lastStorages.slice(lastStorages.length - 80)\n }\n setItemSafely(localStorageKeys.lastCreatedStorages, JSON.stringify(lastStorages))\n }\n}\n\nexport function removeFromLastCreatedStorages(key) {\n const storages = JSON.parse(getLastCreatedStorages()) || []\n const lastCreatedStorages = storages.filter((storage) => storage !== key)\n setItemSafely(localStorageKeys.lastCreatedStorages, JSON.stringify(lastCreatedStorages))\n}\n\n/**\n * This function removes \"amount\" keys from lastCreatedStorages (the bookkeeping of puzzle states in our local\n * storage), from the beginning of the array, such that we can easily remove these oldest puzzle states afterwards, in\n * managePersistencyStorageSpace.\n */\nexport function trimLastCreatedStorages(amount: number, persistConfigKey: string) {\n let storages = JSON.parse(getLastCreatedStorages()) || []\n /**\n * Look if the persistConfigKey of the current puzzle is already in\n * the lastCreatedStorages queue. If so, move it to the end of the lastCreatedStorages queue\n * so the managePersistencyStorageSpace function will not remove the data belonging to\n * the persistConfigKey of the current puzzle.\n */\n if (storages.includes(persistConfigKey)) {\n storages = [...storages.filter((key) => !key.includes(persistConfigKey)), persistConfigKey]\n }\n const trimmedStorages = storages.slice(amount)\n setItemSafely(localStorageKeys.lastCreatedStorages, JSON.stringify(trimmedStorages))\n}\n\nexport function getLastCreatedStorages() {\n return window.localStorage.getItem(localStorageKeys.lastCreatedStorages)\n}\n\n/**\n * This method removes persisted puzzles from localstorage older than clientsettings.dayToStoreOffset days\n * The removed keys represent old puzzles that are not part of the archive anymore.\n */\nexport function removeOldStoragesFromLocalStorage() {\n Object.entries(localStorage)\n .filter(([key]) => key.includes(persistPrefix))\n .filter(([_, value]) => isPersistedPuzzleMarkedForCleanup(value))\n .forEach(([value]) => {\n localStorage.removeItem(value)\n })\n}\n\n/**\n * This method removes a persisted key.\n * From both localstorage and indexedDB.\n * Lastly, it is removed from LastCreatedStorages.\n */\nexport async function removePersistKey(key) {\n window.localStorage.removeItem(key)\n window.localStorage.removeItem(`${key}--backup`)\n const storage = await setupStorage()\n await storage.removeItem(key)\n removeFromLastCreatedStorages(key)\n}\n\n/** Returns a value indicating whether the puzzle should be removed from persistent storage\n */\nexport function isPersistedPuzzleMarkedForCleanup(persistedData: string, clientSettings?: ClientSettingsState, customerId?: string): boolean {\n try {\n const puzzleStore = JSON.parse(persistedData)\n if (!puzzleStore.gameInfo) return false\n const gameInfo: GameInfoState = JSON.parse(puzzleStore.gameInfo)\n if (gameInfo) {\n if (gameInfo.expiryDate === NEVER) {\n return false\n }\n let expiryDate = new Date(gameInfo.expiryDate)\n // backwards compatibility, where we didnt store expiryDate\n // suggest to remove this code somewhere mid-2024\n if (Number.isNaN(expiryDate.getTime())) {\n if (gameInfo.date === '') {\n return false\n }\n const date = new Date(gameInfo.date)\n const settings = JSON.parse(persistedData)?.settings ?? null\n let offset = JSON.parse(settings)?.clientSettings?.dayToStoreOffset ?? 0\n if (customerId && JSON.parse(settings)?.customerId === customerId) {\n offset = clientSettings?.dayToStoreOffset\n }\n if (offset === 0) {\n return false\n }\n\n expiryDate = new Date(date.getTime() + (1000 * 3600 * 24) * offset)\n }\n return new Date() > expiryDate\n }\n } catch (e) {\n console.error(`error parsing indexeddb value\\n${e}`)\n }\n return false\n}\n\n/**\n * This method tries to remove empty persistency storages, that are corrupted. This corruptive behaviour was shown several times on ios devices.\n */\nexport function removeEmptyStorages() {\n Object.entries(localStorage)\n .filter(([key, _]) => key.includes(persistPrefix))\n .forEach(([key, value]) => {\n if (value === '{}' || value === '') {\n localStorage.removeItem(key)\n }\n })\n}\n\n/*\n* ARCHIVE\n* */\n\n// 'NONE' in the types below means: user selected value of 'NONE' / user activity unselected.\n// This is different from undefined or null, which would indicate the user has not yet selected.\nexport type SelectedGameType = GameType | 'NONE'\nexport type SelectedDifficultyLevel = number | 'NONE'\n\ntype CategorySelection = {\n category: ArchiveCategoryType\n gameType?: SelectedGameType\n level?: SelectedDifficultyLevel\n active?: boolean\n}\n\n// Previously we were only keeping track of the current selected category/gametype/level in 3 seperate localstorage keys\n// Since we want to keep track of the selected gametype/level per category (even if that category is not selected), we had to change the data model\n// Now, there's one localstorage key 'keesing-archive-selection' which holds the selected gametype/level per category.\n// This function converts the old localstorage model to the new.\nexport const convertArchiveLocalStorageToNewModel = () => {\n if (!window.localStorage.getItem(localStorageKeys.archiveSelection)) {\n const category = window.localStorage.getItem(localStorageKeys.selectedCategory)\n const gameType = window.localStorage.getItem(localStorageKeys.selectedGameType)\n const level = parseInt(window.localStorage.getItem(localStorageKeys.selectedDifficulty), 10)\n if (category && gameType && level) {\n const archiveSelection = [{\n category, gameType, level, active: true,\n }]\n setItemSafely(localStorageKeys.archiveSelection, JSON.stringify(archiveSelection))\n window.localStorage.removeItem(localStorageKeys.selectedCategory)\n window.localStorage.removeItem(localStorageKeys.selectedGameType)\n window.localStorage.removeItem(localStorageKeys.selectedDifficulty)\n }\n }\n}\nexport const saveSelectedCategory = (category: ArchiveCategoryType, defaultPuzzleCollection?: ArchivePuzzleCollection) => {\n const archiveSelection = getArchiveSelection()\n if (!archiveSelection.some((o) => o.category === category)) {\n archiveSelection.push({ category, gameType: defaultPuzzleCollection?.puzzleType.toUpperCase() as GameType, level: defaultPuzzleCollection?.level })\n }\n const updatedArchiveSelection = archiveSelection.map((s) => {\n return { ...s, active: s.category === category }\n })\n setItemSafely(localStorageKeys.archiveSelection, JSON.stringify(updatedArchiveSelection))\n}\n\nexport const saveSelectedGameType = (gameType: SelectedGameType) => {\n const archiveSelection = getArchiveSelection()\n const selectedCategory = getSelectedCategory()\n const updatedArchiveSelection = archiveSelection.map((s) => {\n return { ...s, gameType: s.category === selectedCategory ? gameType?.toUpperCase() || 'NONE' : s.gameType }\n })\n setItemSafely(localStorageKeys.archiveSelection, JSON.stringify(updatedArchiveSelection))\n}\n\nexport const saveSelectedDifficulty = (level: SelectedDifficultyLevel) => {\n const archiveSelection = getArchiveSelection()\n const selectedCategory = getSelectedCategory()\n const updatedArchiveSelection = archiveSelection.map((s) => {\n return { ...s, level: s.category === selectedCategory ? level || 'NONE' : s.level }\n })\n setItemSafely(localStorageKeys.archiveSelection, JSON.stringify(updatedArchiveSelection))\n}\n\nexport const getSelectedCategory = () => getSelectedArchiveItem('category') as ArchiveCategoryType\nexport const getSelectedGameType = () => getSelectedArchiveItem('gameType') as SelectedGameType\nexport const getSelectedDifficulty = () => getSelectedArchiveItem('level') as SelectedDifficultyLevel\n\nexport const getSelectionForCategory = (category: ArchiveCategoryType): CategorySelection => {\n const archiveSelection = getArchiveSelection()\n return archiveSelection.find((s) => s.category === category)\n}\n\nconst getArchiveSelection = (): CategorySelection[] => {\n return JSON.parse(window.localStorage.getItem((localStorageKeys.archiveSelection)) || '[]')\n}\n\nexport const getSelectedArchiveItem = (prop: 'category' | 'gameType' | 'level'): (ArchiveCategoryType | SelectedGameType | SelectedDifficultyLevel) => {\n const archiveSelection = getArchiveSelection()\n return archiveSelection?.find((s) => s.active === true)?.[prop]\n}\n\nexport const resetArchiveSelection = () => {\n setItemSafely(localStorageKeys.archiveSelection, '[]')\n}\n","export const parsePuzzleState = (state): T => {\n if (state) {\n const firstParse = JSON.parse(state)\n const secondParse = {}\n Object.keys(firstParse).forEach((key) => {\n secondParse[key] = JSON.parse(firstParse[key])\n })\n return secondParse as T\n }\n return {} as T\n}\n\nexport const stringifyPuzzleState = (state) => {\n if (state) {\n const stateWithStringifiedProperties = {}\n Object.keys(state).forEach((key) => {\n stateWithStringifiedProperties[key] = JSON.stringify(state[key])\n })\n return JSON.stringify(stateWithStringifiedProperties)\n }\n return ''\n}\n","/**\n * B2b\n * */\n\nexport const uniqueUserId = 'keesing-unique-userid'\nexport const displayName = 'keesing-displayname'\nexport const showTimerSetting = 'keesing-show-timer-setting'\nexport const coolgamesPrefix = 'keesing-coolgames_'\nexport const profileUserId = 'keesing-profile-userid'\nexport const profileAvatar = 'keesing-profile-avatar'\nexport const profileHash = 'keesing-profile-hash'\nexport const profileNewItems = 'keesing-profile-new-items'\nexport const playEntriesOutbox = 'keesing-playentries-outbox-'\nexport const adventDatesRevealed = 'keesing-advent-dates-revealed'\n\n/** @deprecated */\nexport const loggedIn = 'keesing-user-loggedin'\n\nexport const serverStateValid = 'keesing-server-state-valid'\nexport const selectedCategory = 'keesing-selected-category'\nexport const selectedGameType = 'keesing-selected-gametype'\nexport const selectedDifficulty = 'keesing-selected-difficulty'\nexport const archiveSelection = 'keesing-archive-selection'\n/**\n * Player\n */\nexport const lastCreatedStorages = 'keesing-last-created-storages'\nexport const gamesPlayedToday = 'keesing-games-played-today'\n\n/**\n *Klubble\n */\nexport const klubbleApp = 'persist-klubble-app'\nexport const authToken = 'authToken'\nexport const seenGameInfoHint = 'seen-game-info-hint'\nexport const klubbleThemeEntity = 'klubble-theme-entity'\n","import {\n getLastCreatedStorages,\n setLastCreatedStorages,\n trimLastCreatedStorages,\n removeOldStoragesFromLocalStorage,\n removeEmptyStorages,\n} from 'common_packages/assets/js/utilities/persistencyStorage'\nimport * as lsKeys from 'common_packages/assets/js/utilities/persistency_storage/localStorageKeys'\nimport { persistPrefix } from '../../store/utilities/persistency'\n\n/**\n This method removes persistency storage if there might\n not be enough available for the current game.\n This method returns a boolean showLsErrorModal for showing the user a message\n that the app may have problems saving to the localstorage.\n */\nexport function managePersistencyStorageSpace(persistConfigKey = null): boolean {\n /**\n * Remove empty and possibly corrupted storages\n */\n removeEmptyStorages()\n /**\n * Remove persistency storage thats older than daysToStoreOffset days\n */\n removeOldStoragesFromLocalStorage()\n\n const numberOfTimes = 500000\n /**\n * The bigstring equals 500kb;\n */\n const bigString = 'a'.repeat(numberOfTimes)\n\n let showLsErrorModal = false\n let enoughSpace = false\n const ls = localStorage\n let timesTried = 0\n while (!enoughSpace) {\n try {\n const lastStorages = JSON.parse(getLastCreatedStorages())\n const localStorageKeys = Object.keys(ls)\n const persistKeys = localStorageKeys\n .filter((key) => key.includes(persistPrefix))\n\n /**\n * Remove the keys that are not in the list lastStorages, the max size of this list is kept to 80\n * */\n const persistKeysToRemove = persistKeys\n .filter((key) => !key.includes(lsKeys.klubbleApp))\n .filter((key) => !lastStorages?.some((lastStorageKey) => key.includes(lastStorageKey)))\n\n persistKeysToRemove.forEach((key) => {\n ls.removeItem(key)\n })\n\n /**\n Try to set a big localstorage item,\n to check if there's gonna be enough space to store the puzzle to be played\n */\n ls.setItem('test', bigString)\n /**\n * In safari 14.1x and some others a big string as test cannot be written to the localstorage\n * without being noticed. This results in empty persist keys being added to the local storage.\n * Because of this, we throw an Error manually.\n */\n if (!ls.getItem('test')) {\n throw new Error('Test could not be created.')\n }\n ls.removeItem('test')\n enoughSpace = true\n } catch (e2) {\n trimLastCreatedStorages(1, persistConfigKey)\n\n timesTried += 1\n /**\n * To prevent an infinite loop, show modal and leave loop.\n */\n if (timesTried > 10) {\n enoughSpace = true\n showLsErrorModal = true\n }\n }\n }\n // Remove legacy way of storing puzzle game status\n localStorage.removeItem('keesing-game-statuses')\n if (persistConfigKey) {\n setLastCreatedStorages(persistConfigKey)\n }\n return showLsErrorModal\n}\n","import { WebStorage } from 'redux-persist/es/types'\nimport Dexie, { PromiseExtended } from 'dexie'\nimport { isPersistedPuzzleMarkedForCleanup, removeFromLastCreatedStorages } from 'common_packages/assets/js/utilities/persistencyStorage'\nimport localStorage from 'redux-persist/es/storage'\nimport defaultStorage from 'redux-persist/lib/storage'\nimport { ClientSettingsState } from '../../reducers/settingsReducer'\nimport { klubbleApp } from './localStorageKeys'\nimport { persistPrefix } from '../../store/utilities/persistency'\n\n/**\n * This method returns a Storage for redux persist for client side puzzle data\n * that adheres to WebStorage.\n */\nexport function setupStorage(clientSettings?: ClientSettingsState, customerId?: string): PromiseExtended {\n const db = new PersistDatabase()\n\n return db\n .open()\n .then(() => {\n db.persiststorages\n .filter((item) => {\n if (isPersistedPuzzleMarkedForCleanup(item.value, clientSettings, customerId)) {\n removeFromLastCreatedStorages(item.name)\n return true\n }\n return false\n })\n .delete()\n\n /**\n * Create a storage api that adheres to WebStorage.\n */\n const webStorage = {\n setItem(name: string, val: string): Promise {\n return db.persiststorages.put({ name, value: val })\n },\n getItem(name: string): Promise {\n return new Promise((resolve, reject) => {\n db.persiststorages.get({\n name,\n }).then((res) => {\n if (res?.value) {\n resolve(res.value)\n } else {\n reject()\n }\n })\n })\n },\n removeItem(name: string): Promise {\n return db.persiststorages.delete(name)\n },\n }\n /**\n * Copy persisted puzzle storages from local storage to dexie and remove from localStorage\n */\n Object.keys(window.localStorage)\n .filter((key) => key.includes(persistPrefix) && !key.includes(klubbleApp) && key !== `${persistPrefix}ui`)\n .forEach((key) => {\n webStorage.setItem(key, window.localStorage.getItem(key))\n .then(() => {\n localStorage.removeItem(key)\n })\n })\n return webStorage\n }).catch((e) => {\n console.error(e)\n return defaultStorage\n })\n}\n\n// Returns true if we can use IndexedDB\nexport const isUsingIndexedDb = (clientSettings: ClientSettingsState) => {\n return clientSettings.useIndexedDb && window.indexedDB !== undefined\n}\n\ninterface IPersistStorage {\n name: string,\n value: string\n}\n\n/**\n * Subclass from Dexie for adding types to the stores. This method is recommended by dexie documentation.\n */\nexport class PersistDatabase extends Dexie {\n persiststorages!: Dexie.Table\n\n constructor() {\n /**\n * Initialize database with name PersistDatabase, and put an index on name and value.\n */\n super('PersistDatabase')\n this.version(1).stores({\n persiststorages: 'name,value',\n })\n }\n}\n","export const formatTimeFromSeconds = (timeInSeconds: number) => {\n const hours = Math.floor(timeInSeconds / 3600)\n const minutes = Math.floor((timeInSeconds - (hours * 3600)) / 60) % 60\n const seconds = timeInSeconds % 60\n let secondsZero = ''\n let minutesZero = ''\n let hoursZero = ''\n if (seconds < 10) {\n secondsZero = '0'\n }\n if (minutes < 10) {\n minutesZero = '0'\n }\n if (hours < 10) {\n hoursZero = '0'\n }\n let hourDigits = ''\n if (hours > 0) {\n hourDigits = `${hoursZero}${hours}:`\n }\n return `${hourDigits}${minutesZero}${minutes}:${secondsZero}${seconds}`\n}\n","export const GUESS = 'GUESS'\nexport const CLEAR_CELL = 'CLEAR_CELL'\nexport const CLEAR_CELLS = 'CLEAR_CELLS'\nexport const REVEAL_CELL = 'REVEAL_CELL'\nexport const REVEAL_CELLS = 'REVEAL_CELLS'\nexport const CHECK_CELL = 'CHECK_CELL'\nexport const CHECK_CELLS = 'CHECK_CELLS'\nexport const SET_NOTES = 'SET_NOTES'\nexport const ERASE_MISTAKES = 'ERASE_MISTAKES'\n","import { Dispatch } from 'redux'\nimport cellStatuses, { CellStatusType } from 'common_packages/assets/js/constants/statuses'\nimport * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport { games } from 'common_packages/assets/js/types/gameDataTypes'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { REVEAL_GAME_STATUS_DELAY } from 'common_packages/assets/js/constants/delays'\nimport * as cellActionTypes from './cellActionTypes'\nimport {\n CheckCellPayload,\n CheckCellsPayload,\n ClearCellPayload,\n ClearCellsPayload,\n GuessPayload,\n NotesPayload,\n RevealCellPayload,\n RevealCellsPayload,\n SudokuCellAction,\n} from './types'\nimport { CommonSudokuStoreState } from '../reducers'\n\nconst guessAction = (payload: GuessPayload): SudokuCellAction => ({\n type: cellActionTypes.GUESS,\n payload,\n})\n\nconst setNotesAction = (payload: NotesPayload): SudokuCellAction => ({\n type: cellActionTypes.SET_NOTES,\n payload,\n})\n\nconst clearCellAction = (payload: ClearCellPayload): SudokuCellAction => ({\n type: cellActionTypes.CLEAR_CELL,\n payload,\n})\n\nconst clearCellsAction = (payload: ClearCellsPayload): SudokuCellAction => ({\n type: cellActionTypes.CLEAR_CELLS,\n payload,\n})\n\nconst revealCellAction = (payload: RevealCellPayload): SudokuCellAction => ({\n type: cellActionTypes.REVEAL_CELL,\n payload,\n})\n\nconst revealCellsAction = (payload: RevealCellsPayload): SudokuCellAction => ({\n type: cellActionTypes.REVEAL_CELLS,\n payload,\n})\n\nconst checkCellAction = (payload: CheckCellPayload): SudokuCellAction => ({\n type: cellActionTypes.CHECK_CELL,\n payload,\n})\n\nconst checkCellsAction = (payload: CheckCellsPayload): SudokuCellAction => ({\n type: cellActionTypes.CHECK_CELLS,\n payload,\n})\n\nexport const guess = (payload: GuessPayload) => (dispatch: TDispatch, getState: () => CommonSudokuStoreState) => {\n const newPayload = payload\n const gameType: string = getState()?.settings.gameType\n\n if (gameType.includes(games.BINERO)) {\n // Binero has a 1 second delay before we check the puzzle\n // state in handleGameStatusMiddleware because the user can cycle to another value before the puzzle ends\n newPayload.delaySetGameStatus = 1000\n }\n\n dispatch(guessAction(newPayload))\n dispatch(resetCorrectStatuses())\n}\n\nexport const clearCell = (payload: ClearCellPayload, cellStatus: CellStatusType) => (dispatch: Dispatch) => {\n if (cellStatus !== cellStatuses.INITIAL) {\n dispatch(clearCellAction(payload))\n }\n}\n\nexport const clearCells = (payload: ClearCellsPayload) => (dispatch: Dispatch) => dispatch(clearCellsAction(payload))\n\nexport const clearSelection = () => (dispatch: TDispatch, getState: () => CommonSudokuStoreState) => {\n const state = getState()\n const { selectedCellIndex, selectedCellIndices } = state.selection\n // In Klubble, we do not clear the 'notes' when clearing a cell\n const clearNotes = process.env.KLUBBLE_ENV !== 'true'\n\n if (selectedCellIndices.length > 1) {\n dispatch(clearCells({\n cellIndices: selectedCellIndices,\n clearNotes,\n }))\n } else if (selectedCellIndex !== null && selectedCellIndex !== undefined) {\n dispatch(clearCells({\n cellIndices: [selectedCellIndex],\n clearNotes,\n }))\n }\n}\n\nexport const revealCell = (payload: RevealCellPayload, cellStatus: CellStatusType) => (dispatch: Dispatch) => {\n if (cellStatus !== cellStatuses.INITIAL) {\n dispatch(revealCellAction(payload))\n }\n}\n\nexport const revealCells = (payload: RevealCellsPayload) => (dispatch: Dispatch) => {\n dispatch(revealCellsAction(payload))\n}\n\nexport const revealSelection = () => (dispatch: TDispatch, getState: () => CommonSudokuStoreState) => {\n const state = getState()\n const { selectedCellIndex, selectedCellIndices } = state.selection\n\n if (selectedCellIndices.length > 1) {\n dispatch(revealCells({\n cellIndices: selectedCellIndices,\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n }))\n } else if (selectedCellIndex !== null && selectedCellIndex !== undefined) {\n dispatch(revealCell({\n cellIndex: selectedCellIndex,\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n }, state.cells.cellData[selectedCellIndex].status))\n }\n}\n\nexport const checkCell = (payload: CheckCellPayload, cellStatus: CellStatusType) => (dispatch) => {\n if (cellStatus !== cellStatuses.INITIAL) {\n dispatch(checkCellAction(payload))\n }\n}\n\nexport const checkCells = (payload: CheckCellsPayload) => (dispatch: Dispatch) => dispatch(checkCellsAction(payload))\n\nexport const checkSelection = () => (dispatch: TDispatch, getState: () => CommonSudokuStoreState) => {\n const state = getState()\n const { selectedCellIndex, selectedCellIndices } = state.selection\n\n if (selectedCellIndices.length > 1) {\n dispatch(checkCells({ cellIndices: selectedCellIndices }))\n } else if (selectedCellIndex !== null && selectedCellIndex !== undefined) {\n dispatch(checkCell({ cellIndex: selectedCellIndex }, state.cells.cellData[selectedCellIndex].status))\n }\n}\n\nexport const setNotes = (payload: NotesPayload) => (dispatch: TDispatch) => {\n dispatch(setNotesAction(payload))\n dispatch(resetCorrectStatuses())\n}\n\nexport const { revealPuzzle } = commonCellActions\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\nexport const { resetCorrectStatuses } = commonCellActions\n","export const SELECT_CELL = 'SELECT_CELL'\nexport const SELECT_CELLS = 'SELECT_CELLS'\nexport const DESELECT_CELL = 'DESELECT_CELL'\nexport const SELECT_KEYBOARD_KEY = 'SELECT_KEYBOARD_KEY'\n","import * as cellActions from './cellActions'\nimport * as selectionActionTypes from './selectionActionTypes'\nimport { SelectCellPayload, SelectCellsPayload, SelectKeyboardKeyPayload } from './types'\n\nconst selectCellAction = (payload: SelectCellPayload) => ({\n type: selectionActionTypes.SELECT_CELL,\n payload,\n})\n\nconst multiSelectCellAction = (payload: SelectCellsPayload) => ({\n type: selectionActionTypes.SELECT_CELLS,\n payload,\n})\n\nconst selectKeyboardKeyAction = (payload: SelectKeyboardKeyPayload) => ({\n type: selectionActionTypes.SELECT_KEYBOARD_KEY,\n payload,\n})\n\nexport const selectCell = (payload: SelectCellPayload) => (dispatch) => {\n dispatch(cellActions.resetCorrectStatuses())\n dispatch(selectCellAction(payload))\n}\n\nexport const multiSelectCell = (payload: SelectCellsPayload) => (dispatch) => {\n dispatch(cellActions.resetCorrectStatuses())\n dispatch(multiSelectCellAction(payload))\n}\n\nexport const deselectCell = () => (dispatch) => dispatch({\n type: selectionActionTypes.DESELECT_CELL,\n})\n\nexport const selectKeyboardKey = (payload: SelectKeyboardKeyPayload) => (dispatch) => {\n dispatch(cellActions.resetCorrectStatuses())\n dispatch(selectKeyboardKeyAction(payload))\n}\n","import * as cellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport * as commonCrosswordActions from 'common_crossword_packages/assets/js/actions/cellActions'\nimport { gameStatus } from 'common_packages/assets/js/types/gameStatusTypes'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { CrosswordCellAction } from 'common_crossword_packages/assets/js/actions/types'\nimport { guessWordAction } from 'common_crossword_packages/assets/js/actions/cellActions'\nimport { REVEAL_GAME_STATUS_DELAY } from 'common_packages/assets/js/constants/delays'\nimport { getSelectedClueCells } from '../selectors/selectionSelectors'\nimport {\n findInGridAndRemove,\n findWordInGrid,\n getCrossingCellIndices,\n isInGridComposer,\n removeCellsWithFilledCrossingRule,\n} from '../containers/utilities/CluesContainerUtility'\nimport {\n CheckWordPayload,\n FitwordCellAction,\n HighlightCellsPayload,\n RevealWordPayload,\n CLEAR_HIGHLIGHT_CELLS,\n HIGHLIGHT_CELLS,\n} from './types'\nimport { FitwordStoreState } from '../reducers'\nimport { FitwordCluesStoreState } from '../reducers/cluesReducer'\n\nconst revealWordAction = (payload: RevealWordPayload): FitwordCellAction => ({\n type: cellActionTypes.REVEAL_WORD,\n payload,\n})\n\nconst checkWordAction = (payload: CheckWordPayload): FitwordCellAction => ({\n type: cellActionTypes.CHECK_WORD,\n payload,\n})\n\nexport const { clearCell } = commonCrosswordActions\nexport const { clearSelectedCell } = commonCrosswordActions\n\nexport const clearSelectedClue = () => (dispatch: TDispatch, getState: () => FitwordStoreState) => {\n const state = getState()\n const { cellData, columns } = state.cells\n const {\n selectedClueIndex,\n } = state.selection\n const { clues } = state\n\n const clueCells = getSelectedClueCells(clues, selectedClueIndex)\n const cellsToRemove = removeCellsWithFilledCrossingRule(clueCells, cellData, clues, columns)\n dispatch(commonCrosswordActions.clearClue({ clueCells: cellsToRemove }))\n}\n\nexport const revealWord = (cellIndices: number[]) => (dispatch: TDispatch) => {\n dispatch(revealWordAction({\n cellIndices,\n skipAddGuessToServer: false,\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n }))\n}\n\nexport const checkWord = (payload: CheckWordPayload) => (dispatch: TDispatch) => {\n dispatch(checkWordAction(payload))\n}\n\nexport const { revealSelectedCell } = commonCrosswordActions\n\nexport const revealSelectedClue = () => (dispatch: TDispatch, getState: () => FitwordStoreState) => {\n const state = getState()\n const { cellData, columns } = state.cells\n const { selectedClueIndex, direction } = state.selection\n const { clues, cells, selection } = state\n\n const cellIndices: number[] = findWordInGrid(selectedClueIndex, cellData)\n\n cellIndices.forEach((cellIndex) => {\n if (cellData[cellIndex].value !== '' && cellData[cellIndex].value !== cellData[cellIndex].solution) {\n const crossingCells = getCrossingCellIndices(cellIndex, cellData, direction, columns)\n\n const cellsToRemove = removeCellsWithFilledCrossingRule(crossingCells, cellData, clues, columns)\n dispatch(commonCrosswordActions.clearClue({ clueCells: cellsToRemove }))\n }\n })\n\n // Get the clues with the 'isInGrid' property.\n const cluesComposer: FitwordCluesStoreState = isInGridComposer({ selection, cells, clues })\n // Get the clues object with the words that are the same word length as the revealed word.\n const clueCategory = cluesComposer.find((clueTypes) => clueTypes.header === cellIndices.length.toString())\n const clue = clueCategory.words.find((word) => word.cells.every((cell, i) => cell.cellIndex === cellIndices[i]))\n const cluesArray = Object.keys(clues).map((k) => clues[k])\n if (clue.isInGrid) {\n findInGridAndRemove(cluesArray, clue, cellData, columns, dispatch)\n }\n\n dispatch(revealWord(cellIndices))\n}\n\nexport const checkSelectedClue = () => (dispatch: TDispatch, getState: () => FitwordStoreState) => {\n const state = getState()\n const { cellData } = state.cells\n const { selectedClueIndex } = state.selection\n\n const cellIndices = findWordInGrid(selectedClueIndex, cellData)\n dispatch(checkWord({ cellIndices }))\n}\n\nconst highlightCellsAction = (payload: HighlightCellsPayload): FitwordCellAction => ({\n type: HIGHLIGHT_CELLS,\n payload,\n})\n\nconst clearHighlightCellsAction = (): FitwordCellAction => ({\n type: CLEAR_HIGHLIGHT_CELLS,\n})\n\nexport const highlightCells = (cellIndices: number[]) => (dispatch: TDispatch) => {\n dispatch(highlightCellsAction({ cellIndices }))\n}\n\nexport const clearHighlightCells = () => (dispatch: TDispatch) => {\n dispatch(clearHighlightCellsAction())\n}\n\nexport const handleClueSelection = (cellIndices: number[], word: string[]) => (dispatch: TDispatch) => {\n dispatch(guessWordAction({ word, cellIndices, skipAddGuessToServer: false }))\n}\n\nexport const removeFromCluesSelection = (cellIndices: number[]) => (dispatch: TDispatch, getState: () => FitwordStoreState) => {\n if (getState().gameStatus?.status !== gameStatus.IS_SOLVED) {\n const word = new Array(cellIndices.length).fill('')\n dispatch(guessWordAction({ word, cellIndices, skipAddGuessToServer: false }))\n }\n}\n\nexport const { resetCorrectStatuses } = commonCrosswordActions\nexport const { checkSelectedCell } = commonCrosswordActions\nexport const { revealPuzzle } = commonCellActions\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\n","import { REHYDRATE } from 'redux-persist'\nimport {\n CheckCellPayload,\n ClearCellPayload,\n ClearCluePayload,\n GuessWordPayload,\n} from 'common_crossword_packages/assets/js/actions/types'\nimport * as cellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport * as gameActionTypes from 'common_packages/assets/js/actions/gameActionTypes'\nimport { type CommonCellAction } from 'common_packages/assets/js/actions/types'\nimport { type FitwordGuess } from 'client/player/puzzles/fitword/js/middlewares/gameroomMiddleware'\nimport { type InitGameDataPayload } from 'common_packages/assets/js/actions/settingsActions'\nimport { type FitwordStoreState } from '../reducers'\nimport { type FitwordCellsStoreState } from '../reducers/cellsReducer'\n\nexport const HIGHLIGHT_CELLS = 'HIGHLIGHT_CELLS'\nexport const CLEAR_HIGHLIGHT_CELLS = 'CLEAR_HIGHLIGHT_CELLS'\n\n// Common game stuff\nexport type FitwordInitGameDataPayload = InitGameDataPayload & {\n initialCellData: FitwordCellsStoreState\n}\n\nexport type FitwordPreloadStatePayload = {\n cells: FitwordCellsStoreState\n}\n\nexport type FitwordGameAction = {\n type: typeof gameActionTypes.INIT_GAME_DATA\n payload: FitwordInitGameDataPayload\n} | {\n type: typeof gameActionTypes.PRELOAD_STATE\n payload: FitwordPreloadStatePayload\n} | {\n type: typeof gameActionTypes.RESET_PUZZLE\n}\n\nexport type RevealWordPayload = {\n cellIndices: number[]\n skipAddGuessToServer: boolean\n delaySetGameStatus?: number // optional delay for the gameStatusMiddleware\n}\n\nexport type RevealCellPayload = {\n cellIndex: number\n skipAddGuessToServer: boolean\n}\n\nexport type CheckWordPayload = {\n cellIndices: number[]\n}\n\nexport type HighlightCellsPayload = {\n cellIndices: number[]\n}\n\nexport type FitwordCellAction = CommonCellAction | {\n type: typeof cellActionTypes.CLEAR_CELL\n payload: ClearCellPayload\n} | {\n type: typeof cellActionTypes.GUESS_WORD\n payload: GuessWordPayload\n} | {\n type: typeof cellActionTypes.CLEAR_CLUE,\n payload: ClearCluePayload\n} | {\n type: typeof cellActionTypes.REVEAL_CELL,\n payload: RevealCellPayload\n} | {\n type: typeof cellActionTypes.REVEAL_WORD,\n payload: RevealWordPayload\n} | {\n type: typeof cellActionTypes.CHECK_CELL,\n payload: CheckCellPayload\n} | {\n type: typeof cellActionTypes.CHECK_WORD,\n payload: CheckWordPayload\n} | {\n type: typeof HIGHLIGHT_CELLS,\n payload: HighlightCellsPayload\n} | {\n type: typeof CLEAR_HIGHLIGHT_CELLS,\n} | {\n type: typeof REHYDRATE,\n payload: FitwordStoreState\n}\n\nexport type FitwordAction = FitwordCellAction | FitwordGameAction\n","import directions, { DirectionType } from 'common_packages/assets/js/constants/directions'\nimport { CellData } from 'fitword/resources/assets/js/reducers/cellsReducer'\nimport cellStatuses from 'common_packages/assets/js/constants/statuses'\nimport { ClueWord } from 'common_crossword_packages/assets/js/reducers/cluesReducer'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { deepCloneObject } from 'common_packages/assets/js/utilities/deepCloneObject'\nimport * as cellActions from '../../actions/cellActions'\nimport { FitwordCellAction } from '../../actions/types'\nimport { FitwordCluesStoreState } from '../../reducers/cluesReducer'\n\nconst getCellIndicesPerWord = ({ words }) => words.reduce((result, word) => {\n const wordIndices = word.cells.map((cell) => cell.cellIndex)\n result.push({ word, indices: wordIndices })\n return result\n}, [])\n\nconst isInGrid = ({ word, cellIndicesPerWord, cellData }) => cellIndicesPerWord.some((cellIndicesWord) => {\n const { indices } = cellIndicesWord\n const filledWord = indices.map((index) => cellData[index].value).join('')\n\n return filledWord === sanitizeClue(word.word.clue)\n})\n\nexport const findIndicesInGrid = ({ clue, clues, cells }) => {\n const wordlength = clue.cells.length\n const cluesWithSameLength = clues.filter((clueItem) => parseInt(clueItem.header, 10) === wordlength)\n let found: number[] = []\n cluesWithSameLength[0].words.some((clueword) => {\n const indices = clueword.cells.map((clueItem) => clueItem.cellIndex)\n const filledWord = indices.map((index) => cells[index].value).join('')\n if (filledWord === sanitizeClue(clue.clue)) {\n found = indices\n }\n })\n\n return found\n}\n\nexport const findWordInGrid = (clueIndex, cells) => cells.reduce((wordIndexes, cell) => {\n if (cell.clueInfo && cell.clueInfo.find((cellInfoItem) => cellInfoItem.clueIndex === clueIndex)) {\n wordIndexes.push(cell.cellIndex)\n }\n return wordIndexes\n}, [])\n\nexport const isInGridComposer = ({ selection, cells, clues }) => {\n let selectedWordLength\n if (selection.selectedWordLength) {\n ({ selectedWordLength } = selection)\n }\n\n const { cellData } = cells\n\n const newClues = deepCloneObject(clues)\n let gridClues = newClues\n\n if (selection && selectedWordLength && cellData && clues) {\n const composedClues = Object.values(newClues).reduce((resultClues: any, cluesWithSameLength: any) => {\n const cellIndicesPerWord = getCellIndicesPerWord({ words: cluesWithSameLength.words })\n if (cellIndicesPerWord.length > 0) {\n const result = cellIndicesPerWord.map((word) => {\n // check if in grid\n const newWord = word.word\n newWord.isInGrid = isInGrid({ word, cellIndicesPerWord, cellData }) || word.giveaway\n return newWord\n })\n resultClues.push({ ...cluesWithSameLength, words: result })\n }\n return resultClues\n }, [])\n gridClues = composedClues\n }\n\n return gridClues\n}\n\n/**\n * Check all the cells that have to be removed for crossing cells. Check if those neighbors contain\n * correct clues, if that's the case then the cell that originally was supposed to be removed needs to stay\n * to keep the neighboring clue intact.\n * @param cellsToRemove The cells from the clue that has to be removed.\n * @param cells\n * @param clues\n * @param columns\n * @returns The cells that can be removed.\n */\nexport const removeCellsWithFilledCrossingRule = (cellsToRemove: number[], cells: CellData, clues: FitwordCluesStoreState, columns: number) => {\n const result = cellsToRemove.reduce((resultItems, cellItem) => {\n const direction = Math.abs(cellsToRemove[0] - cellsToRemove[1]) < columns ? directions.HORIZONTAL : directions.VERTICAL\n if (!neighboringWordsCorrect(cellItem, cells, direction, columns, Object.values(clues))) {\n resultItems.push(cellItem)\n }\n return resultItems\n }, [])\n\n return result\n}\n\nexport const findInGridAndRemove = (clues, clue, cells, columns, dispatch) => {\n const foundInGrid = findIndicesInGrid({ clue, clues, cells })\n if (foundInGrid) {\n const removeCells = removeCellsWithFilledCrossingRule(foundInGrid, cells, clues, columns)\n\n if (removeCells?.length > 0) {\n dispatch(cellActions.removeFromCluesSelection(removeCells))\n }\n }\n}\n\nexport const findInGridAndHighlight = (clues: FitwordCluesStoreState, clue: ClueWord, cells: CellData, dispatch: TDispatch) => {\n const cellIndices = findIndicesInGrid({ clue, clues, cells })\n dispatch(cellActions.highlightCells(cellIndices))\n}\n\nexport const matchIJForDutch = (clueChars) => clueChars.reduce((clueArray, character, index) => {\n const lastIndex = clueArray.length - 1\n if (index > 0 && clueArray[lastIndex] === 'I' && character === 'J') {\n clueArray[lastIndex] = 'IJ'\n } else {\n clueArray.push(character)\n }\n return clueArray\n}, [])\n\nexport const ijForDutchWithAnsi = ({ wordcells, cells }) => {\n const solution = wordcells\n .map((wordCell) => cells[wordCell.cellIndex])\n .map((cell) => cell.solution)\n\n const result = solution.map((character) => {\n if (character === 'IJ') {\n return '\\u0132'\n }\n return character\n })\n\n return result.join('')\n}\n\nexport const getCellIndices = ({ clues, selectedClueIndex }): number[] => {\n let result: any = []\n const clueWithSelectedClueIndex: any = clues\n .map((clue: any) => clue.words)\n .flat()\n .find((word: any) => word.clueIndex === selectedClueIndex)\n\n if (clueWithSelectedClueIndex.cells) {\n result = clueWithSelectedClueIndex.cells.map((cell) => cell.cellIndex)\n }\n return result\n}\n\nexport function getIndicesWithoutCompletelyFilledWords(cellsPerWord, cells) {\n return cellsPerWord.reduce((res, word) => {\n const cellIndices = word.map((cell) => cell.cellIndex)\n const someEmpty = cellIndices.some((index) => cells[index].value === '')\n if (someEmpty) {\n res.push(cellIndices)\n }\n return res\n }, [])\n}\n\nexport function getAllCellsForCategoryFilled(cellsPerWord, cells) {\n return cellsPerWord.reduce((res, word) => {\n const cellIndices = word.map((w) => w.cellIndex)\n const someEmpty = cellIndices.some((i) => cells[i].value !== '')\n if (someEmpty) {\n res.push(cellIndices)\n }\n return res\n }, [])\n}\n\nexport function getLowestIdWord(cellsPerWord, cells) {\n const cellsIdOrdered = []\n .concat(...cellsPerWord)\n .sort((a, b) => a.cellIndex - b.cellIndex)\n .map((c) => c.cellIndex)\n let result = cells\n .filter((cell) => cellsIdOrdered.includes(cell.cellIndex))\n .find((emptycell) => emptycell.value === '')\n if (!result) {\n result = -1\n } else {\n result = result.cellIndex\n }\n return result\n}\n\nexport const fitsInGrid = (\n cellIndices: number[],\n clueChars: string[],\n cells: CellData,\n selectedDirection: DirectionType,\n columns: number,\n clues: FitwordCluesStoreState,\n) => (\n cellIndices.every((cellIndex, i) => {\n const neighborsWithCorrectClue = neighboringWordsCorrect(cellIndex, cells, selectedDirection, columns, clues)\n const sameCharacter = cells[cellIndex].value === clueChars[i]\n const isCellEmpty = !cells[cellIndex].value\n // Return false if a crossing neighbor is correctly filled OR has a different value than the character that needs to be placed there OR the cell isn't empty.\n if (!(!neighborsWithCorrectClue || sameCharacter || isCellEmpty)) return false\n\n const cellValueChangeable = cells[cellIndex].status !== cellStatuses.INITIAL && cells[cellIndex].status !== cellStatuses.REVEALED\n // Return false if the status of the cell is INITIAL/REVEALED OR has a different value than the character that needs to be placed there OR the cell isn't empty.\n if (!(cellValueChangeable || sameCharacter || isCellEmpty)) return false\n\n // The word can be placed in the grid.\n return true\n })\n)\n\n/*\n * Crossing neighbors are the neighboring cells of a cell that cross the word with regard to the selected direction.\n * We return those crossing neighbors that have a solution, e.g. not black cells in crossword.\n */\nexport const getCrossingNeighbors = (\n cellIndex: number,\n cells: CellData,\n selectedDirection: DirectionType,\n columns: number,\n) => {\n const crossingNeighbors = []\n\n if (selectedDirection === directions.HORIZONTAL) {\n if (cellIndex - columns >= 0 && cells[cellIndex - columns].solution !== '') {\n crossingNeighbors.push(cellIndex - columns)\n }\n if (cellIndex + columns < cells.length && cells[cellIndex + columns].solution !== '') {\n crossingNeighbors.push(cellIndex + columns)\n }\n } else {\n if (cellIndex % columns !== 0 && cells[cellIndex - 1].solution !== '') {\n crossingNeighbors.push(cellIndex - 1)\n }\n if (cellIndex % columns !== columns - 1 && cells[cellIndex + 1].solution !== '') {\n crossingNeighbors.push(cellIndex + 1)\n }\n }\n\n return crossingNeighbors\n}\n\n/**\n * Get the neighbors of a given cellIndex. Check those neighbors if they are filled in with a correct clue.\n * Which would mean that they contain a correct word.\n */\nconst neighboringWordsCorrect = (\n cellIndex: number,\n cells: CellData,\n selectedDirection: DirectionType,\n columns: number,\n clues: FitwordCluesStoreState,\n) => {\n const neighborIndices = getCrossingCellIndices(cellIndex, cells, selectedDirection, columns)\n if (neighborIndices.length < 2) return false // There are no neighbors.\n\n // Add the current cell index and fix the order.\n neighborIndices.push(cellIndex)\n neighborIndices.sort((a, b) => a - b)\n\n // If the neighboring cell is correct, return true\n const correctWord = neighborIndices.every((neighborIndex) => cells[neighborIndex].value === cells[neighborIndex].solution)\n if (correctWord) return true\n\n // Get the value of the neighborIndices and convert it to a string\n const neighborWord = neighborIndices.map((neighborIndex) => cells[neighborIndex].value).join('')\n // See if this 'word' is the same as a clueWord. Return 'true' or 'false' based on that answer.\n const clueCategory = clues.find((clueTypes) => clueTypes.header === neighborIndices.length.toString())\n return clueCategory.words.some((clueWord) => sanitizeClue(clueWord.clue) === neighborWord)\n}\n\n/*\n * Get all cell indices of a word that crosses the current selected cell with regard to the selected direction.\n * Doesn't include the current cell itself.\n */\nexport const getCrossingCellIndices = (\n cellIndex: number,\n cells: CellData,\n selectedDirection: DirectionType,\n columns: number,\n) => {\n const crossingCellIndices: number[] = []\n const indicesToTraverse = getCrossingNeighbors(cellIndex, cells, selectedDirection, columns)\n\n while (indicesToTraverse.length !== 0) {\n const poppedIndex = indicesToTraverse.pop()\n\n if (cells[poppedIndex].solution !== '') {\n crossingCellIndices.push(poppedIndex)\n const neighbors = getCrossingNeighbors(poppedIndex, cells, selectedDirection, columns)\n indicesToTraverse.push(...neighbors.filter((index) => !crossingCellIndices.includes(index) && index !== cellIndex))\n }\n }\n\n return crossingCellIndices\n}\n\n// Remove spaces and special chars (like '-', '.', '/', ',') in a clue.\nexport const sanitizeClue = (clue: string) => (clue.replace(/[ ,\\-,./']/g, ''))\n\n// Splits the clue list up into to two equally distributed lists\nexport const chunkClues = (clues: FitwordCluesStoreState): [FitwordCluesStoreState, FitwordCluesStoreState] => {\n if (clues.length === 2) {\n return [\n [clues[0]],\n [clues[1]],\n ]\n }\n const numberOfClues = clues.reduce((acc, clue) => acc + clue.words.length, 0)\n const cluesHeight = [numberOfClues + 2 * clues.length - 1, 0]\n const splitIndex = clues.findIndex((clue) => {\n cluesHeight[0] -= clue.words.length + 2\n cluesHeight[1] += clue.words.length + 2\n const difference = cluesHeight[0] - cluesHeight[1]\n\n return difference < 0\n }) + 1\n\n return [clues.slice(0, splitIndex), clues.slice(splitIndex)]\n}\n","import { FitwordCluesStoreState } from '../reducers/cluesReducer'\n\nexport function getSelectedClueCells(\n clues: FitwordCluesStoreState,\n selectedClueIndex: number,\n) {\n let clueCells: number[]\n\n if (selectedClueIndex != null) {\n const cluesArray: FitwordCluesStoreState = Object.values(clues)\n const wordsFromClues = cluesArray.map((word) => word.words).flat()\n const wordsWithIndex = wordsFromClues.find((clue) => clue.clueIndex === selectedClueIndex)\n clueCells = wordsWithIndex.cells.map((c) => c.cellIndex)\n }\n\n return clueCells\n}\n","import * as cellActionTypes from 'common_sudoku_packages/assets/js/actions/cellActionTypes'\nimport cellStatuses from 'common_packages/assets/js/constants/statuses'\nimport * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { FleetcommanderAction, FleetcommanderCellAction, GuessPayload } from './types'\nimport { getNextFleetcommanderValue } from '../utilities/getNextFleetcommanderValue'\nimport { FleetcommanderStoreState } from '../reducers'\n\nconst guessAction = (payload: GuessPayload): FleetcommanderCellAction => ({\n type: cellActionTypes.GUESS,\n payload,\n})\n\nexport const guess = (cellIndex: number, reverse: boolean) => (dispatch: TDispatch, getState: () => FleetcommanderStoreState) => {\n const { cellData } = getState().cells\n const cell = cellData[cellIndex]\n if (cell.status === cellStatuses.INITIAL) {\n return\n }\n\n dispatch(guessAction({\n cellIndices: [cellIndex],\n values: [getNextFleetcommanderValue(cell, reverse)],\n delaySetGameStatus: 1000,\n }))\n dispatch(resetCorrectStatuses())\n}\n\nexport const { resetCorrectStatuses } = commonCellActions\nexport const { revealPuzzle } = commonCellActions\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\n","export enum FleetcommanderCellValues {\n EMPTY = '',\n WATER = 'WATER',\n\n SHIP_SINGLE = 'SHIP_SINGLE',\n SHIP_HORIZONTAL = 'SHIP_HORIZONTAL',\n SHIP_VERTICAL = 'SHIP_VERTICAL',\n SHIP_UNKNOWN = 'SHIP_UNKNOWN',\n SHIP_END_UP = 'SHIP_END_UP',\n SHIP_END_DOWN = 'SHIP_END_DOWN',\n SHIP_END_LEFT = 'SHIP_END_LEFT',\n SHIP_END_RIGHT = 'SHIP_END_RIGHT',\n}\n\nexport const isShip = (cellValue: FleetcommanderCellValues) => {\n return cellValue === FleetcommanderCellValues.SHIP_HORIZONTAL\n || cellValue === FleetcommanderCellValues.SHIP_VERTICAL\n || cellValue === FleetcommanderCellValues.SHIP_SINGLE\n || cellValue === FleetcommanderCellValues.SHIP_UNKNOWN\n || cellValue === FleetcommanderCellValues.SHIP_END_UP\n || cellValue === FleetcommanderCellValues.SHIP_END_RIGHT\n || cellValue === FleetcommanderCellValues.SHIP_END_DOWN\n || cellValue === FleetcommanderCellValues.SHIP_END_LEFT\n}\n","import { FleetcommanderCellValues, isShip } from '../constants/fleetcommanderCellValues'\nimport { FleetcommanderCell } from '../reducers/cellsReducer'\n\nexport const getNextFleetcommanderValue = (cell: FleetcommanderCell, rightClick = false) => {\n /**\n * Cycle through the FleetcommanderCellValues when clicking on a cell\n */\n const values = [FleetcommanderCellValues.EMPTY, FleetcommanderCellValues.WATER, FleetcommanderCellValues.SHIP_UNKNOWN]\n let currentValue = cell.value || FleetcommanderCellValues.EMPTY\n\n const direction = rightClick ? -1 : 1\n\n // if the currentValue is a ship segment(but not \"SHIP_UNKNOWN\"), treat it as a \"SHIP_UNKNOWN\" piece.\n if (isShip(currentValue)) {\n currentValue = FleetcommanderCellValues.SHIP_UNKNOWN\n }\n\n const nextIndex = (values.length + (values.indexOf(currentValue) + direction)) % values.length\n return values[nextIndex]\n}\n\n/**\n\n */\nexport const getFleetcommanderCellValueMultiselect = (\n cell: FleetcommanderCell,\n firstCell: FleetcommanderCell,\n) => {\n if (isShip(firstCell.value) || firstCell.value !== cell.value) return undefined\n if (isShip(cell.value)) {\n return cell.value\n }\n if (firstCell.value === FleetcommanderCellValues.EMPTY) {\n return FleetcommanderCellValues.WATER\n }\n return FleetcommanderCellValues.EMPTY\n}\n","import * as gameActionTypes from 'common_packages/assets/js/actions/gameActionTypes'\nimport * as cellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport { type GameType } from 'common_packages/assets/js/types/gameDataTypes'\nimport { type Dispatch } from 'redux'\nimport * as gameData from 'common_packages/assets/js/api/gameData'\nimport { type TransformXML } from 'common_packages/assets/js/api/gameData'\nimport { HashiStoreState } from '../reducers'\nimport {\n Bridge,\n HashiAction,\n HashiCellData,\n HashiGameAction,\n} from './types'\nimport { GameDataHashi } from '../api/transformHashiXML'\n\nconst initGameDataAction = (\n gameType: GameType,\n puzzleId: string,\n customerId: string,\n puzzleVariation: string,\n cells: HashiCellData,\n solutionBridges: Bridge[],\n): HashiGameAction => ({\n type: gameActionTypes.INIT_GAME_DATA,\n payload: {\n cells,\n solutionBridges,\n customerId,\n puzzleId,\n gameType,\n puzzleVariation,\n },\n})\n\nexport const initGameData = (\n gameType: GameType,\n puzzleId: string,\n customerId: string,\n transformXML: TransformXML,\n puzzleVariation: string,\n) => async (dispatch: Dispatch) => {\n const {\n cells,\n solutionBridges,\n } = await gameData.loadGameData(gameType, puzzleId, customerId, transformXML, dispatch).catch(() => {\n return {\n cells: {\n rows: null,\n columns: null,\n cellData: null,\n },\n solutionBridges: null,\n }\n })\n\n dispatch(initGameDataAction(\n gameType,\n puzzleId,\n customerId,\n puzzleVariation,\n cells,\n solutionBridges,\n ))\n}\n\nexport const revealPuzzle = () => (dispatch: Dispatch, getState: () => HashiStoreState) => {\n const bridges = getState().solutionBridges\n dispatch({\n type: cellActionTypes.REVEAL_PUZZLE,\n payload: bridges,\n })\n}\n\n// TODO: are these needed for hashi?\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\n","import { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport * as cellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport { RevealCellPayload } from 'common_sudoku_packages/assets/js/actions/types'\nimport {\n GUESS, NonogramCellAction, NonogramGuessPayload,\n NonogramSelectEdgeCellPayload,\n SELECT_EDGE_CELL,\n} from './types'\nimport { NonogramStoreState } from '../reducers'\n\nconst guessAction = (payload: NonogramGuessPayload): NonogramCellAction => ({\n type: GUESS,\n payload,\n})\n\nconst revealCellAction = (payload: RevealCellPayload): NonogramCellAction => ({\n type: cellActionTypes.REVEAL_CELL,\n payload,\n})\n\nconst selectEdgeCellAction = (payload: NonogramSelectEdgeCellPayload): NonogramCellAction => ({\n type: SELECT_EDGE_CELL,\n payload,\n})\n\nexport const guess = (payload: NonogramGuessPayload) => (dispatch: TDispatch) => {\n dispatch(guessAction(payload))\n}\n\nexport const revealCell = () => (dispatch: TDispatch, getState: () => NonogramStoreState) => {\n const cellState = getState().cells\n let toBeRevealedCellIndex = cellState.cellData.findIndex((cell) => cell.solution && cell.value !== 'FILLED')\n\n if (toBeRevealedCellIndex === -1) {\n toBeRevealedCellIndex = cellState.cellData.findIndex((cell) => cell.solution && cell.status !== 'REVEALED')\n }\n dispatch(revealCellAction({ cellIndex: toBeRevealedCellIndex }))\n}\n\nexport const selectEdgeCell = (payload: NonogramSelectEdgeCellPayload) => (dispatch: TDispatch) => {\n dispatch(selectEdgeCellAction(payload))\n}\n\nexport const { revealPuzzle } = commonCellActions\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\n","import { REHYDRATE } from 'redux-persist'\nimport {\n type CommonCellAction, type UndoableAction,\n} from 'common_packages/assets/js/actions/types'\nimport * as gameActionTypes from 'common_packages/assets/js/actions/gameActionTypes'\nimport * as selectionActionTypes from 'common_sudoku_packages/assets/js/actions/selectionActionTypes'\nimport * as undoActionTypes from 'common_packages/assets/js/actions/undoActions'\nimport * as cellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport { type gameStatusType } from 'common_packages/assets/js/types/gameStatusTypes'\nimport { CHECK_CELLS } from 'common_sudoku_packages/assets/js/actions/cellActionTypes'\nimport { type NonogramGuess } from 'client/player/puzzles/nonogram/js/middlewares/gameroomMiddleware'\nimport { type CheckCellsPayload, type RevealCellPayload, type RevealCellsPayload } from 'common_sudoku_packages/assets/js/actions/types'\nimport { type InitGameDataPayload } from 'common_packages/assets/js/actions/settingsActions'\nimport { type NonogramCellValueType, NonogramCellsStoreState } from '../reducers/cellsReducer'\nimport { type EdgeCellsStoreState } from '../reducers/edgeCellsReducer'\nimport { type NonogramInputModeTypes } from '../reducers/selectionReducer'\nimport { type NonogramStoreState } from '../reducers'\n\nexport const SET_INPUT_MODE = 'SELECT_INPUT_MODE'\nexport const GUESS = 'GUESS'\nexport const UNDO_GUESS = 'UNDO_GUESS'\nexport const CHANGE_UNDO = 'CHANGE_UNDO'\nexport const SELECT_EDGE_CELL = 'SELECT_EDGE_CELL'\n\nexport type InitNonogramGameDataPayload = InitGameDataPayload & {\n cells: NonogramCellsStoreState\n edgeCells: EdgeCellsStoreState\n}\n\nexport type NonogramSetInputModePayload = {\n inputMode: NonogramInputModeTypes\n}\n\nexport type NonogramGuessPayload = {\n selectedCellIndices: number[]\n inputMode: NonogramInputModeTypes\n}\n\nexport type NonogramSelectCellsPayload = {\n selectedCellIndex: number\n selectedCellIndices: number[]\n}\n\nexport type NonogramSelectEdgeCellPayload = {\n cellIndex: number\n}\n\nexport type NonogramUndoGuessPayload = {\n cellIndices: number[]\n values: NonogramCellValueType[]\n}\n\nexport type NonogramChangeUndoPayload = {\n revealedCellsIndices: number[]\n}\n\nexport type NonogramCellAction = {\n type: typeof GUESS\n payload: NonogramGuessPayload\n} & UndoableAction | {\n type: typeof UNDO_GUESS\n payload: NonogramUndoGuessPayload\n} | {\n type: typeof cellActionTypes.REVEAL_CELL\n payload: RevealCellPayload\n} | {\n type: typeof CHECK_CELLS\n payload: CheckCellsPayload\n} | {\n type: typeof cellActionTypes.REVEAL_CELLS\n payload: RevealCellsPayload\n} | {\n type: typeof SELECT_EDGE_CELL\n payload: NonogramSelectEdgeCellPayload\n} | {\n type: typeof REHYDRATE\n payload: NonogramStoreState\n}\n\nexport type NonogramGameAction = CommonCellAction | {\n type: typeof gameActionTypes.INIT_GAME_DATA\n payload: InitNonogramGameDataPayload\n} | {\n type: typeof gameActionTypes.RESET_PUZZLE\n} | {\n type: typeof gameActionTypes.SET_GAME_STATUS\n payload: { status: gameStatusType }\n} | {\n type: typeof undoActionTypes.UNDO\n}\n\nexport type NonogramSelectionAction = {\n type: typeof SET_INPUT_MODE\n payload: NonogramSetInputModePayload\n} | {\n type: typeof selectionActionTypes.SELECT_CELLS\n payload: NonogramSelectCellsPayload\n}\n\nexport type NonogramUndoAction = {\n type: typeof CHANGE_UNDO\n payload: NonogramChangeUndoPayload\n}\n\nexport type NonogramAction = NonogramGameAction | NonogramCellAction | NonogramSelectionAction | NonogramUndoAction\n","import * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport * as commonCrosswordActions from 'common_crossword_packages/assets/js/actions/cellActions'\nimport { REVEAL_PUZZLE } from 'common_packages/assets/js/actions/cellActionTypes'\nimport { REVEAL_GAME_STATUS_DELAY } from 'common_packages/assets/js/constants/delays'\nimport { CellAction } from './types'\n\nexport const SUBMIT_ANSWER = 'SUBMIT_ANSWER'\n\nexport const submitAnswer = (): CellAction => ({\n type: SUBMIT_ANSWER,\n})\n\nexport const revealPuzzle = (): CellAction => ({\n type: REVEAL_PUZZLE,\n payload: {\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n },\n})\n\nexport const { checkSelectedCell } = commonCrosswordActions\nexport const { revealSelectedCell } = commonCrosswordActions\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\n","import { deselectCells } from 'common_crossword_packages/assets/js/actions/selectionActions'\nimport cellStatuses from 'common_packages/assets/js/constants/statuses'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport * as commonCellActions from 'common_packages/assets/js/actions/cellActions'\nimport * as commonCrosswordActions from 'common_crossword_packages/assets/js/actions/cellActions'\nimport { REVEAL_PUZZLE } from 'common_packages/assets/js/actions/cellActionTypes'\nimport {\n SubmitAnswerPayload, AddEmptyRowPayload, CellAction,\n} from './types'\nimport { WordguessStoreState } from '../reducers'\nimport { ANIMATION_DELAY } from '../constants/animationDelay'\nimport { isPositionPreviouslyRevealed } from '../global_events/input'\n\nexport const SUBMIT_ANSWER = 'SUBMIT_ANSWER'\nexport const ADD_EMPTY_ROW = 'ADD_EMPTY_ROW'\nexport const INCREASE_ACTIVE_ROW = 'INCREASE_ACTIVE_ROW'\nexport const LOCK_ACTIVE_ROW = 'LOCK_ACTIVE_ROW'\nexport const UNLOCK_ACTIVE_ROW = 'UNLOCK_ACTIVE_ROW'\n\nexport const submitAnswer = (payload: SubmitAnswerPayload): CellAction => ({\n type: SUBMIT_ANSWER,\n payload,\n})\n\nexport const addEmptyRow = (payload: AddEmptyRowPayload): CellAction => ({\n type: ADD_EMPTY_ROW,\n payload,\n})\n\nexport const increaseActiveRow = (): CellAction => ({\n type: INCREASE_ACTIVE_ROW,\n})\n\nexport const lockActiveRow = (): CellAction => ({\n type: LOCK_ACTIVE_ROW,\n})\n\nexport const unlockActiveRow = (): CellAction => ({\n type: UNLOCK_ACTIVE_ROW,\n})\n\nconst revealPuzzleAction = (): CellAction => ({\n type: REVEAL_PUZZLE,\n})\n\nexport const { revealSelectedCell } = commonCrosswordActions\n\nexport const revealPuzzle = () => (dispatch: TDispatch, getState: () => WordguessStoreState) => {\n const { cells } = getState()\n const { rows, columns, cellData } = cells\n const startIndexActiveRow = (rows - 1) * columns\n let cumulativeDelay = 0\n const wordCells = cellData.slice(startIndexActiveRow, startIndexActiveRow + columns).map((cell, index) => {\n const delayForAnimation = cumulativeDelay * ANIMATION_DELAY\n if (cell.status !== cellStatuses.REVEALED) {\n cumulativeDelay += 1\n }\n\n return {\n ...cell,\n value: cell.solution,\n locked: true,\n status: cell.value === cell.solution && !isPositionPreviouslyRevealed(cells, index, true) ? cellStatuses.CORRECT : cellStatuses.REVEALED,\n delayForAnimation,\n }\n })\n\n dispatch(deselectCells())\n dispatch(revealPuzzleAction())\n dispatch(submitAnswer({\n cellIndices: Array.from({ length: columns }, (v, k) => k + startIndexActiveRow),\n wordWithChecks: wordCells,\n delaySetGameStatus: ANIMATION_DELAY * cells.columns,\n }))\n}\n\nexport const { checkPuzzle } = commonCellActions\nexport const { eraseMistakes } = commonCellActions\n","export const ANIMATION_DELAY = 200\n","import { type SyntheticEvent } from 'react'\nimport {\n clearCell,\n setPreviousGuess,\n} from 'common_crossword_packages/assets/js/actions/cellActions'\nimport { gridToasts } from 'common_packages/assets/js/constants/gridToasts'\nimport cellStatuses, { CellStatusType } from 'common_packages/assets/js/constants/statuses'\nimport isValidWord from 'common_packages/assets/js/api/isValidWordApi'\nimport { setGridToast } from 'common_packages/assets/js/actions/uiActions'\nimport { type CommonCrosswordSelectionState } from 'common_crossword_packages/assets/js/reducers/selectionReducer'\nimport { deselectCells, selectCell } from 'common_crossword_packages/assets/js/actions/selectionActions'\nimport { CommonSettingsStoreState } from 'common_packages/assets/js/reducers/settingsReducer'\nimport { type TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport {\n increaseActiveRow,\n lockActiveRow, unlockActiveRow, submitAnswer, addEmptyRow,\n} from '../actions/cellActions'\nimport { type CellsStoreState } from '../reducers/cellsReducer'\nimport { ANIMATION_DELAY } from '../constants/animationDelay'\nimport { type WordguessAction } from '../actions/types'\n\nexport type OnKeyDownState = {\n cells?: CellsStoreState\n event?: SyntheticEvent\n selection?: CommonCrosswordSelectionState\n selectedCellIndex?: number\n nextSelectedCell?: number,\n settings: CommonSettingsStoreState\n dispatch?: TDispatch\n}\nlet enterKeyTimeout\n\nexport const isPositionPreviouslyRevealed = (cells: CellsStoreState, posIndex: number, includeCurrentRow = false) => {\n const { rows, columns, cellData } = cells\n const validRows = includeCurrentRow ? rows : rows - 1\n const maxIndex = validRows * columns\n const isPreviouslyRevealed = cellData.some(\n (c, i) => i < maxIndex\n && i % columns === posIndex\n && c.status === cellStatuses.REVEALED,\n )\n\n return isPreviouslyRevealed\n}\n\nexport const handleEnterKey = async (cells: CellsStoreState, settings: CommonSettingsStoreState, dispatch: TDispatch, event?: SyntheticEvent) => {\n if (event?.isTrusted) {\n event.preventDefault()\n }\n\n const enterKeyElement = document.getElementsByClassName('enter-bar__enter-button')[0]\n if (enterKeyElement) {\n clearTimeout(enterKeyTimeout)\n enterKeyElement.classList.add('enter-bar__enter-button--active')\n enterKeyTimeout = setTimeout(() => { enterKeyElement.classList.remove('enter-bar__enter-button--active') }, 100)\n }\n const startIndexActiveRow = (cells.rows - 1) * cells.columns\n const wordCells = cells.cellData.slice(startIndexActiveRow, startIndexActiveRow + cells.columns).map((cell) => ({ ...cell }))\n\n // check if enter is pressed while this word is locked\n if (wordCells.every((cell) => cell.locked === true)) {\n return\n }\n const wordIsFilled = wordCells.every((cell) => cell.value !== '')\n if (!wordIsFilled) {\n dispatch(setGridToast({ toast: gridToasts.wordguess.wordIncomplete }))\n return\n }\n\n dispatch(lockActiveRow())\n const language = settings.language || settings.clientSettings?.language\n const wordIsValid = await isValidWord(language, wordCells.map(({ value }) => value).join(''))\n dispatch(unlockActiveRow())\n\n if (!wordIsValid) {\n dispatch(setGridToast({ toast: gridToasts.wordguess.wordDoesNotExist }))\n return\n }\n\n const newEmptyRow = cells.cellData.slice(cells.cellData.length - cells.columns, cells.cellData.length).map((cell) => ({ ...cell, value: '' }))\n\n let cumulativeDelay = 0\n // first pass, set the correct ones\n wordCells.forEach((cell, index) => {\n const currentCell = cell\n currentCell.delayForAnimation = cumulativeDelay * ANIMATION_DELAY\n currentCell.locked = true\n if (cell.status !== cellStatuses.REVEALED) {\n cumulativeDelay += 1\n }\n\n // determine the cell status, while keeping track of previously revealed cells\n if (cell.status === cellStatuses.REVEALED) {\n return\n }\n if (cell.value === cell.solution) {\n currentCell.status = isPositionPreviouslyRevealed(cells, index, true) ? cellStatuses.REVEALED : cellStatuses.CORRECT\n return\n }\n currentCell.status = cellStatuses.INCORRECT\n })\n\n const remainingLetters = wordCells\n .filter((cell) => cell.status !== cellStatuses.CORRECT && cell.status !== cellStatuses.REVEALED)\n .map((cell) => cell.solution)\n\n // second pass, set the semi correct ones\n wordCells.forEach((cell, i) => {\n if (cell.status === cellStatuses.INCORRECT) {\n const foundIndex = remainingLetters.findIndex((letter) => letter === cell.value)\n if (foundIndex > -1) {\n remainingLetters.splice(foundIndex, 1)\n wordCells[i].status = cellStatuses.SEMICORRECT as CellStatusType\n }\n }\n })\n const puzzleSolved = wordCells.every((c) => c.status === cellStatuses.CORRECT || c.status === cellStatuses.REVEALED)\n const delaySetGameStatus = ANIMATION_DELAY * cells.columns\n\n dispatch(submitAnswer({\n cellIndices: Array.from({ length: cells.columns }, (v, k) => k + startIndexActiveRow), wordWithChecks: wordCells, delaySetGameStatus,\n }))\n\n if (!puzzleSolved) {\n if (cells.playMode === 'INFINITE_ATTEMPTS') {\n dispatch(lockActiveRow())\n dispatch(addEmptyRow({\n cellIndices: Array.from({ length: cells.columns }, (v, k) => k + cells.cellData.length), newEmptyRow,\n }))\n } else if (cells.rows < cells.attempts) {\n dispatch(lockActiveRow())\n dispatch(increaseActiveRow())\n } else {\n // playMode is 'FIXED_ATTEMPTS' (B2B) and there are no attempts left, gameStatusMiddleware will show now show a appropriate modal\n // and hide selection\n dispatch(deselectCells())\n }\n } else {\n dispatch(deselectCells())\n }\n}\n\nexport function handleBackspaceDeleteKey(onKeyDownParams: OnKeyDownState, eventType: 'backspace' | 'delete') {\n const {\n event,\n selection,\n cells,\n dispatch,\n } = onKeyDownParams\n\n if (event.isTrusted) {\n event.preventDefault()\n }\n\n if (selection.selectedCellIndex !== -1 && selection.selectedCellIndex != null) {\n const currentCellIsEmpty = cells.cellData[selection.selectedCellIndex].value === ''\n /* Remove current cell value */\n\n if (!currentCellIsEmpty) {\n dispatch(clearCell({\n cellIndex: selection.selectedCellIndex,\n }, cells.cellData[selection.selectedCellIndex].status))\n\n dispatch(setPreviousGuess({ value: '', cellIndex: -1, backspace: true }))\n }\n /*\n * Select new cell after clearing cell ed\n * */\n if (eventType === 'backspace' && (currentCellIsEmpty || cells.previousGuess?.backspace)) {\n selectCellInGrid({ ...onKeyDownParams, selectedCellIndex: Math.max(selection.selectedCellIndex - 1, 0) })\n }\n }\n}\n\nexport function handleArrowKeys({\n event,\n nextSelectedCell,\n cells,\n dispatch,\n}: OnKeyDownState) {\n event.preventDefault()\n /* Select cell */\n if (nextSelectedCell === null) {\n const firstFillableCellIndex = cells.cellData.findIndex((cell) => cell.solution !== '')\n selectCellInGrid({\n dispatch,\n selectedCellIndex: firstFillableCellIndex,\n cells,\n })\n dispatch(setPreviousGuess({ value: '', cellIndex: -1 }))\n } else {\n selectCellInGrid({\n dispatch,\n selectedCellIndex: nextSelectedCell,\n cells,\n })\n dispatch(setPreviousGuess({ value: '', cellIndex: -1 }))\n }\n}\n\nexport function selectCellInGrid({\n dispatch, selectedCellIndex, cells,\n}: OnKeyDownState) {\n if (cells.cellData[selectedCellIndex] && !cells.cellData[selectedCellIndex].locked) {\n dispatch(selectCell({\n selectedCellIndex,\n solution: cells.cellData[selectedCellIndex].solution,\n }))\n }\n}\n","import axios from 'axios'\nimport { type LanguageCode } from 'common_packages/assets/js/types/locale'\nimport { ASSET_PATH } from './assets'\n\nconst isValidWord = async (language: LanguageCode, word: string): Promise => {\n try {\n const url = new URL(`${ASSET_PATH}/content/isvalidword`)\n url.searchParams.append('languagecode', language)\n url.searchParams.append('word', word)\n\n const response = await axios.post(url.href)\n return response.data === true\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('error in isValidWord ', e)\n }\n return false\n}\n\nexport default isValidWord\n","import { Dispatch } from 'redux'\nimport * as commonCellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport { type MatchCluePayload, WordsearchAction } from './types'\n\nexport const MATCH_CLUE = 'MATCH_CLUE'\nexport const RESET_PUZZLE = 'RESET_PUZZLE'\n\nconst matchClueAction = (payload: MatchCluePayload): WordsearchAction => ({\n type: MATCH_CLUE,\n payload,\n})\n\nexport const matchClue = (payload: MatchCluePayload) => (dispatch: Dispatch) => {\n dispatch(matchClueAction(payload))\n}\n\nexport const revealPuzzle = () => (dispatch: Dispatch) => {\n dispatch({\n type: commonCellActionTypes.REVEAL_PUZZLE,\n payload: {},\n })\n}\n","import { type Dispatch } from 'redux'\nimport { type SmartHintAction, type SmartHintPayload } from './types'\n\nexport const ACTIVATE_SMART_HINT = 'ACTIVATE_SMART_HINT'\nexport const MOVE_TO_SMART_HINT = 'MOVE_TO_SMART_HINT'\n\nconst activateSmartHintAction = (payload: SmartHintPayload): SmartHintAction => ({\n type: ACTIVATE_SMART_HINT,\n payload,\n})\n\nconst moveToSmartHintAction = (): SmartHintAction => ({\n type: MOVE_TO_SMART_HINT,\n})\n\nexport const activateSmartHint = (clueIndex: number) => (dispatch: Dispatch) => {\n dispatch(activateSmartHintAction({ clueIndex }))\n}\n\nexport const moveToSmartHint = (clueIndex: number) => (dispatch: Dispatch) => {\n dispatch(moveToSmartHintAction())\n\n const MOVE_GRID_TIME = 400 + 600 // 400 For the move animation on the grid itself and 600 for easing\n\n setTimeout(() => {\n dispatch(activateSmartHintAction({ clueIndex }))\n }, MOVE_GRID_TIME)\n}\n","import { puzzleContainer } from 'common_packages/assets/js/config/idAttributes'\nimport { type SolvedClue } from '../reducers/cluesReducer'\n\n/** Returns the index of the first unfound clue */\nexport const determineSmartHintClueIndex = (clueCells: number[][], solvedClues: SolvedClue[]) => {\n if (solvedClues.length < 1) {\n return 0\n }\n // Get the list of the indices (for the clueCells) of the found clues.\n const foundCluesIndices = solvedClues.map((solvedClue) => solvedClue.clueIndex)\n // Get the first clue in the list that hasn't been found yet.\n return clueCells.findIndex((_clueCell, index) => !foundCluesIndices.includes(index))\n}\n\nexport const isSmartHintCellIndexInView = (cellIndex: number) => {\n const puzzleElement = document.getElementById(puzzleContainer)?.getBoundingClientRect()\n const cellTextElement = document.querySelectorAll('.grid-cell__text')[cellIndex]?.getBoundingClientRect()\n\n return cellTextElement.top > puzzleElement.top\n && cellTextElement.bottom < puzzleElement.bottom\n && cellTextElement.right < puzzleElement.right\n && cellTextElement.left > puzzleElement.left\n}\n","export const INPUT_LETTER = 'INPUT_LETTER'\nexport const DELETE_LETTER = 'DELETE_LETTER'\nexport const CLEAR_INPUT = 'CLEAR_INPUT'\nexport const MATCH_INPUT = 'MATCH_INPUT'\n","export const getInputLength = (input: string, shouldCheckIJ: boolean) => {\n const ijOccurrences = shouldCheckIJ ? input.match(/ij/gi)?.length || 0 : 0\n return input.length - ijOccurrences\n}\n","import { getInputLength } from '../utilities/getInputLength'\n\nexport function getLongestWordLength(words) {\n const hasIJ = words.some((word) => word.hasIJ)\n return Math.max(...(words.map((word) => getInputLength(word.content, hasIJ))))\n}\n\nexport function getWordsToMatch(words) {\n return words.map((word) => word.content?.toLowerCase())\n}\n","import { Dispatch } from 'redux'\nimport * as cellActionTypes from 'common_packages/assets/js/actions/cellActionTypes'\nimport { setGridToast } from 'common_packages/assets/js/actions/uiActions'\nimport { gridToasts } from 'common_packages/assets/js/constants/gridToasts'\nimport { TDispatch } from 'common_packages/assets/js/types/TDispatch'\nimport { gridToastTypes } from 'common_packages/assets/js/types/gridToastTypes'\nimport { REVEAL_GAME_STATUS_DELAY } from 'common_packages/assets/js/constants/delays'\nimport { WordwheelStoreState } from '../reducers'\nimport { InputAction } from './types'\nimport * as inputActionTypes from './inputActionTypes'\nimport { WordsStoreState } from '../reducers/wordsReducer'\nimport { getLongestWordLength, getWordsToMatch } from '../selectors/words'\nimport { getInputWord } from '../utilities/getInputWord'\nimport { getInputLength } from '../utilities/getInputLength'\n\nexport const inputLetterAction = (char: string, cellIndex?: string) => (dispatch: TDispatch, getState: () => WordwheelStoreState) => {\n const { words, input, cells } = getState()\n if (inputLengthIsValid(getInputWord(input.input), words)) {\n // if no cellIndex was supplied (because input was from keyboard), then find the first available cell in the wheel for this character\n const wheelCellIndex = cellIndex || cells.find((cell) => cell.content.toLowerCase() === char.toLowerCase() && !cell.used)?.index\n if (!wheelCellIndex) {\n dispatch(setGridToast({ toast: gridToasts.wordwheel.lettersNotUsed }))\n } else if (!cells.find((cell) => cell.index === wheelCellIndex)?.used) {\n dispatch({ type: inputActionTypes.INPUT_LETTER, payload: { char, wheelCellIndex } })\n }\n } else {\n dispatch(setGridToast({ toast: gridToasts.wordwheel.maxWordLength }))\n }\n}\n\nconst inputLengthIsValid = (input: string, words: WordsStoreState) => {\n const maxWordLength = words.reduce((acc, word) => {\n if (acc < +word.length) {\n return +word.length\n }\n return acc\n }, 0)\n return maxWordLength > getInputLength(input, words.some((w) => w.hasIJ))\n}\n\nexport const deleteLetterAction = () => (dispatch: Dispatch, getState: () => WordwheelStoreState) => {\n const { input } = getState()\n const { wheelCellIndex } = input.input[input.input.length - 1] ?? {}\n dispatch({ type: inputActionTypes.DELETE_LETTER, payload: { wheelCellIndex } })\n}\n\nexport const clearInputAction = () => (dispatch: Dispatch) => {\n dispatch({ type: inputActionTypes.CLEAR_INPUT })\n}\n\nexport const matchInputAction = () => async (dispatch: TDispatch, getState: () => WordwheelStoreState): Promise => {\n const { input } = getState().input\n const { matches, cells, words } = getState()\n const longestWordLength = getLongestWordLength(words)\n\n const wordsToMatch = getWordsToMatch(words)\n const matchWords = matches.map((match) => match.word)\n const inputToLowerCase = getInputWord(input).toLowerCase()\n const inputLength = getInputLength(inputToLowerCase, words.some((w) => w.hasIJ))\n\n /**\n * Input is valid\n */\n if (wordsToMatch.includes(inputToLowerCase)) {\n if (!matchWords.includes(inputToLowerCase)) {\n dispatch({ type: inputActionTypes.MATCH_INPUT, payload: inputToLowerCase })\n if (longestWordLength === inputLength) {\n dispatch(setGridToast({ toast: gridToasts.wordwheel.foundLongestWord, toastType: gridToastTypes.SUCCESS, toastData: { size: longestWordLength } }))\n }\n } else {\n dispatch(setGridToast({ toast: gridToasts.wordwheel.submitted }))\n }\n /**\n * Input is not valid\n */\n } else if (inputToLowerCase && !wordsToMatch.includes(inputToLowerCase)) {\n const minimumInputLength = 4\n const centerLetter = cells.find((cell) => cell.index === '1')?.content.toLowerCase()\n // If less letters are used then the minimumInputLength, show explanation, less-than-4-words\n if (inputLength < minimumInputLength) {\n dispatch(setGridToast({ toast: gridToasts.wordwheel.inputLessThanFour }))\n // If the center letter, of the wordwheel, is not used, show explanation center-letter-not-used\n } else if (!inputToLowerCase.includes(centerLetter)) {\n dispatch(setGridToast({ toast: gridToasts.wordwheel.centerLetterNotUsed }))\n // Else show not found\n } else {\n dispatch(setGridToast({ toast: gridToasts.wordwheel.notFound }))\n }\n }\n // Always clear input after submit\n dispatch(clearInputAction())\n}\n\nconst revealWord = () => async (dispatch: TDispatch, getState: () => WordwheelStoreState): Promise => {\n const { words, matches } = getState()\n\n const sortedWords = [...words]\n .sort((a, b) => Number(a.length) - Number(b.length) || Number(a.index) - Number(b.index))\n .map((word) => word.content.toLowerCase())\n\n const matchedWords = matches\n .map((match) => match.word.toLowerCase())\n\n const revealedWord = sortedWords\n .filter((word) => !matchedWords.includes(word))?.[0]\n\n if (revealedWord) {\n dispatch(clearInputAction())\n dispatch(setGridToast({\n toast: gridToasts.wordwheel.revealedWord,\n toastType: gridToastTypes.REVEAL,\n toastData: { word: revealedWord },\n }))\n dispatch({\n type: cellActionTypes.REVEAL_WORD,\n payload: {\n word: revealedWord,\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n },\n })\n }\n}\n\nexport const revealSelectedClue = revealWord\n\nexport const revealPuzzle = () => async (dispatch: Dispatch, getState: () => WordwheelStoreState): Promise => {\n const allWords = getWordsToMatch(getState().words)\n\n dispatch({\n type: cellActionTypes.REVEAL_PUZZLE,\n payload: {\n allWords,\n delaySetGameStatus: REVEAL_GAME_STATUS_DELAY,\n },\n })\n}\n","import { WordwheelInputType } from '../actions/types'\n\nexport const getInputWord = (input: WordwheelInputType[]) => {\n return input.map((item) => item.char).join('')\n}\n"],"names":["_path","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","props","xmlns","width","height","viewBox","d","fillRule","clipRule","_path2","_path3","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","_path4","_path5","_path6","_defs","_g","x","y","filterUnits","id","dy","result","values","rx","transform","filter","_use","xmlnsXlink","xlinkHref","clipPath","style","maskType","maskUnits","mask","className","_style","_circle","_circle2","_circle3","_circle4","_path7","_path8","_path9","xmlSpace","cx","cy","r","strokeMiterlimit","_rect","_rect2","SET_CONFIG","fetchConfig","abortController","dispatch","res","get","signal","isLightTrialEnabled","isFreeTrialMode","freeTrialDays","lightTrialDays","isExtendedTrialMode","extendedTrialDays","activePaymentPlatform","entity","data","type","payload","e","SET_PUZZLE_TYPES","LOADING_CONTINUE_PLAYING_PUZZLE_TYPES","SET_CONTINUE_PLAYING_PUZZLE_TYPES","LOADING_FEATURED_PUZZLES","SET_FEATURED_PUZZLES","SET_PUZZLE_PACKS","SET_FAVORITE_PUZZLE_PACK_TYPE","SET_SELECTED_LEVEL_PUZZLE_PACK_TYPE","SET_PUZZLE_CALENDAR","SET_PUZZLE_SORTING","SAVE_PUZZLE_SETTINGS","SAVE_PUZZLE_SETTINGS_BATCH","SET_FINISHED_PUZZLE","SET_DAILY_DOSES","SET_DAILY_DOSE_TYPES","SET_DAILY_DOSE_SELECTED_DATE","GENERAL_API_ERROR_MESSAGE","getPuzzleTypes","status","Error","puzzleTypes","getPuzzlePacks","puzzlePacksData","getFeaturedPuzzleTypes","featuredPuzzleTypes","getContinuePlayingPuzzleTypes","continuePlayingPuzzleTypes","getPuzzleCalendar","puzzleTypeId","post","JSON","stringify","headers","currentPuzzleCalendar","getDailyDoses","success","dailyDoses","days","sort","a","b","Date","parse","date","getDailyDoseTypes","dailyDoseTypes","setFinishedPuzzle","finishedPuzzle","setPuzzleSorting","savePuzzleSettings","settings","getState","original","puzzleData","find","pT","saveSettings","catch","uiActions","message","toastTypes","ERROR","savePuzzleSettingsBatch","saveSettingsBatch","setFavoritePuzzlePackType","url","puzzlePackTypeId","isFavorite","response","drawer","drawerTypes","NEED_TO_REGISTER","forceModal","setSelectedLevelPuzzlePackType","selectedLevel","setDailyDoseSelectedDate","SET_PUZZLE_FILTER","PRESET_PUZZLE_FILTERS","SET_PUZZLE_PACK_TYPE_FILTER","PRESET_PUZZLE_PACK_TYPE_FILTERS","setPuzzleFilter","presetPuzzleFilters","setPuzzlePackTypeFilter","SET_LANGUAGE","SET_SETTINGS","showSubscribeDrawer","SUBSCRIBE","hideHeader","size","SET_USER","SET_USER_NAME","SET_FIRST_NAME","CLEAR_USER","SET_OPT_IN_STATUSSES","SET_ROLES","setUser","user","userData","extra","statusCode","settingsJson","showTimer","skipCompletedLetters","setOptInStatusses","subscribeNewsletter","subscribeWeeklyStatistics","acceptTerms","saveFirstName","firstName","clearUser","setRoles","clearRoles","CONFIG","AUTH_TOKEN","getCurrentToken","authTokenAsString","localStorage","getItem","setToken","token","roles","defaults","common","Authorization","jwtToken","refreshToken","currentToken","userId","newToken","err","logout","loginQRHost","guid","config","authToken","skipSSORedirect","errorMessage","removeItem","redirectUrl","URL","window","location","origin","searchParams","append","baseUrl","signoutUrl","toString","href","checkHasActiveSSOSession","instanceName","instance","replace","msal","auth","clientId","authority","domain","signUpSignInPolicy","knownAuthorities","redirectUri","cache","cacheLocation","ssoSilent","account","getAccount","environment","idTokenClaims","exp","now","includes","console","error","errorCode","warn","isRefreshing","isReloading","refreshSubscribers","API_URL","klubbleAPI","axiosInstance","create","baseURL","interceptors","use","serverVersion","log","URLSearchParams","search","set","originalRequest","retry","retryOrigReq","Promise","resolve","reject","callback","request","push","then","forEach","finally","createKlubbleAPI","startPuzzle","klubblePuzzleId","isOpenForGameRoom","finishPuzzle","totaltime","locationGuid","puzzlesClientId","externalPuzzleId","puzzleTypeNameKey","startPuzzleResponse","shareLink","playerParams","gametype","puzzleid","customerid","getAll","language","AppDisplayModes","extendedTrial","all","RECENT","FAVORITE","PLAY_TOGETHER","CLASSIC","MINI","LOGIC","WORDS","translationGroups","createContext","Button","DailyDoseEnum","Role","SubscriptionType","puzzleSortingEnum","state","useMemo","getAbilities","canInvite","light","premium","canUseDailyDose","anonymous","canSeeAccount","canSeeRecentPuzzles","canSeePrivateFooterLinks","puzzlePackOwner","canPlayDailyPuzzles","canGiftPuzzle","canGiveFeedback","canSeeMenu","canSeePuzzlePlayerBreadcrumbs","canSeeCollapsedDailyDoseEndscreen","canFavoritePuzzles","canPlayPremiumOnlyPuzzles","hasSubscription","hasLightSubscriptionOnly","hasPremiumSubscription","isAnonymous","isIdentified","identified","isPuzzlePackOwner","isQRHost","qrHost","subscriptions","_a","g","useAsyncError","setError","useState","throwError","useCallback","useBroadcastChannel","channel","bc","useRef","BroadcastChannel","useEffect","current","close","useCheckUsernameAvailable","username","usernameStored","usernameAvailable","setUsernameAvailable","debouncedUsername","value","delay","debouncedValue","setDebouncedValue","handler","setTimeout","clearTimeout","cancelRequest","params","checkUsernameAvailable","defaultProps","store","lightTrialDaysText","lightTrialSuffix","extendedTrialDaysText","getRawTranslation","useContext","TranslationContext","translationMap","reduce","acc","form","Map","optionsSorted","Array","from","keys","keyA","keyB","useCurrencyFormatters","locale","formatCurrency","amount","currencyCode","currency","Intl","NumberFormat","format","useDateFormatters","formatDate","options","DateTimeFormat","useLogin","translation","errorToast","setErrorToast","group","name","translationsSet","getTranslation","email","password","sso","withCredentials","api","usePriceModels","priceModels","setPriceModels","abort","getAllPriceModels","AbortController","getPriceModel","subscriptionType","paymentPeriodId","priceModel","p","discountPercentage","puzzlePackTypes","puzzlePackType","ppt","toggleIsFavorite","puzzleType","level","levels","miniPuzzleTypeId","usePreviousFavorite","setFavorite","saveActions","usePuzzleTypeImageUrls","entityImagesPath","getBackgroundUrl","puzzleNameLangKey","filename","slice","indexOf","getIconUrl","userName","KLUBBLE_PUZZLE_ID","nameLangKey","dateString","time","scoringBadges","shareTemplateTranslationKey","tries","visual","puzzleName","puzzle","puzzleTags","dateFormatted","getDate","getMonth","getFullYear","shareResultText","points","String","scoreType","score","shareResult","openShareDialog","shareType","title","text","userNameInvitee","navigator","share","fallbackDrawer","GIFT_PUZZLE","SHARE_RESULT","INVITE_PUZZLE","drawerData","sharePuzzle","useTrackCheckout","getPuzzlePackById","getPuzzlePackTypeById","trackCheckoutEvent","checkoutEvent","item","event","checkoutType","sessionId","puzzlePack","puzzlePackId","price","item_name","displayName","quantity","item_category","item_category_2","item_variant","transaction_id","dataLayer","ecommerce","items","scrollPosition","setPosition","useLayoutEffect","timeoutId","updatePosition","pageYOffset","addEventListener","removeEventListener","AccountHeaderComponent","accountPage","hideBreadcrumbs","map","page","to","icon","navigation","RoundedButtonComponent","onClickHandler","inverted","useAbilities","path","component","exact","noHeader","subLevel","logoutInProgress","setLogoutInProgress","loginPage","pathname","getParameterByName","dsn","integrations","browserTracingIntegration","release","ignoreErrors","tracesSampleRate","loading","persistor","TranslationContextComponent","fallback","ErrorExceptionComponent","Suspense","LoadingComponent","ManagePersistencyStorageSpaceComponent","CommonApiResourcesComponent","ThemeProviderComponent","OverlayContainer","DrawerContainer","ToastsContainer","ScrollTopComponent","UIManagerContainer","PWAEventsProvider","DataLayerTrackingComponent","UserDataContainer","PrivateRouteContainer","showLandingWhenUnAuthenticatedOrAnon","LayoutComponent","HomeContainer","PuzzlesContainer","PublicRouteComponent","themeColor","PuzzlePackTypesComponent","PuzzlePackTypeComponent","CalendarComponent","anonymousAllowed","hideMobileNavigation","hideDesktopNavigation","hideFooter","PlayerComponent","DailyDoseContainer","StatsComponent","skipSEO","StartGameByGuidComponent","gameMode","LandingComponent","LoginComponent","LandingSSOLoginComponent","PaymentStepsComponent","ignoreCanStartTrial","PaymentPageSuccessComponent","PaymentPageErrorComponent","PaymentPagePendingComponent","PaymentRedirectComponent","skipSubscriptionCheck","PaymentCompletePageComponent","OnboardingPuzzlesComponent","StartQRHostGameComponent","AccountFAQComponent","AccountInformationContentComponent","DrawerContentJoinNowComponent","inviterName","ErrorPageNotFoundComponent","document","getElementById","viewportMeta","head","querySelector","viewportContent","getAttribute","setAttribute","showBackButton","rehypePlugins","pages","getDefaults","storedValues","year","month","day","splitDate","birthDate","birthDateDay","padZero","birthDateMonth","birthDateYear","repeat","asString","asDate","input","colorInterpolationFilters","floodOpacity","in2","getStatus","invoice","invoiceNumber","PillComponent","isLoading","setIsLoading","groupedByYear","setGroupedByYear","requestSent","grouped","entries","entry","setInvoice","getParamsFromQueryString","history","details","val","paymentMethod","puzzlePackName","subscriptionName","amountVat","onClickTermsConditions","preventDefault","onClickAccount","renderTextWithLink","linkTranslationKey","linkOnClick","split","onClick","detail","vatPercentage","showButton","setShowButton","SUCCESS","label","readOnly","disabled","htmlFor","subscription","willAutoRenew","canReEnable","isFree","useConfig","paymentType","paymentInputPage","paymentOrEndSubscriptionLabel","freeDays","subscriptionTypeName","paidUntilDateValue","paidUntilDate","terminationDate","CANCEL_SUBSCRIPTION","children","listItems","accountDetailsPages","useActiveSubscription","showUpgradeCard","lightTrial","bankAccount","bankAccountLastDigits","str","substr","accountPages","schema","shape","matches","nullable","max","middleName","lastName","required","when","is","s","country","resolver","yup","defaultValues","handleSubmit","watch","reset","usernameEntered","useTwikeySanitizer","birthDateAmountDays","Number","birthDateDayOptions","_","displayVal","birthDateMonthOptions","birthDateYearOptions","reverse","keepIsSubmitted","countryOptions","useCountryOptions","AccountProfileComponent","onSubmit","InputComponent","showValidatorError","onboarding","customError","SelectComponent","flexBasis","flexGrow","validatePassword","role","noEmptyOption","translateItem","_name","SubmitButtonComponent","successMessage","disableWhileNotDirty","hasNewsletterOptIn","hasWeeklyStatisticsOptIn","ToggleComponent","handleToggle","toLocaleDateString","skipCelebration","field","settingActions","deferredPrompt","PWAInstallContext","displayModeApp","getDisplayModeApp","browserTab","prompt","ADD_TO_HOMESCREEN_INFO","skipIntro","REPORT_BUG","DROP_BLOCK","SET_REGION_USED","REVEAL_REGION","CHECK_REGION","CLEAR_REGION","clearRegionAction","dropBlock","dropBlockAction","removeBlock","revealSelection","selectedRegionIndex","selection","selectedCellIndex","regionIndex","delaySetGameStatus","checkSelection","blocks","blockAtRegion","blocksData","placedRegionIndex","regionIsRevealed","c","REVEALED","clearSelection","guess","cellIndex","rightClick","cell","cells","cellData","INITIAL","nextValue","cellIndices","resetCorrectStatuses","revealPuzzle","checkPuzzle","eraseMistakes","CampingCellValues","getNextCampingValue","currentValue","EMPTY","direction","nextIndex","TREE","getCampingCellAfterMultiselect","firstCell","selectedCellIndices","index","TENT","solution","GRASS","guessWordAction","guessAction","guessWord","word","skipAddGuessToServer","clearCell","cellStatus","clearCellAction","clearCells","clearCellsAction","clearSelectedCell","selectedCellStatus","clearClue","clearClueAction","clearSelectedClue","clueCells","revealCell","revealCellAction","revealSelectedCell","revealClue","shouldAnimateDirectly","revealSelectedClue","checkCell","checkCellAction","checkSelectedCell","checkClue","checkClueAction","checkSelectedClue","selectedClueCells","fillCodebar","fillCodebarAction","revealCodeBar","revealCodeBarAction","swapValues","swapValuesAction","setPreviousGuess","previousGuessAction","SELECT_CLUE","SELECT_CELL","SWITCH_DIRECTION","SELECT_CATEGORY","REMOVE_CATEGORY","switchDirectionAction","selectionActionTypes","selectCategory","category","removeCategorySelection","selectClue","clues","horizontalClueIndices","horizontalClueCells","verticalClueIndices","verticalClueCells","verticalClueIndex","horizontalClueIndex","getDefaultClueindexForDirection","directions","VERTICAL","selectedClueIndex","HORIZONTAL","getClueIndexForDirection","switchForDirection","horizontalClueIndexes","verticalClueIndexes","keyIndex","shouldSwitchDirectionWhenSelected","switchDirection","shouldSwitchDirectionWhenMoving","selectClueAction","cellActions","currentSelectedClueIndex","selectPreviousClueIndex","indexes","indexOfDirection","getIndexOfDirection","clueIndex","selectCell","selectCellAction","deselectCells","newPayload","getOpposite","setDirection","handleCellSelection","isSelected","gameType","showKeyboard","hardwareKeyboardDetected","clientSettings","ARROWWORD_PLUS","CODEBREAKER_PLUS","hasInitialKeyboardHidden","hideKeyboardToggle","settingsActions","getSelectedClueCells","CONTINUOUS","horizontalClueWordCells","verticalClueWordCells","getContinuousClueCells","getCommonCrossWordClueCells","hasClueForDirection","horizontalIndices","getClueIndices","verticalIndices","isBent","clueCellsIndices","risingNumbers","lastItem","diff","Math","abs","n","some","number","getUniqueOrFirstClueIndex","currentClueIndexForDirection","indexOfClue","findIndex","cluesWithIndexes","clue","cluecells","newClueCells","accumulator","KEY_SEE_IMAGE","isCellIndexWithinSelectedClueIndexes","selectedClue","withinSelectedClueIndexes","isInSelectedClue","activeResultWord","withinClue","getCellsOfSelectedClue","getClueCellOfSelectedClue","selectedClueIndexForDirection","clueCell","getMemoizedLabelFromClueCells","cacheKey","labelCacheKey","horizontalClues","verticalClues","labels","vertical","horizontal","firstIndexHorizontalClueCells","firstIndexVerticalClueCells","horizontalLabelIndex","verticalLabelIndex","getLabelFromClueCells","getSelectedClue","join","toLowerCase","codeNumber","CellType","Rotation","CELL_NEIGHBOR_OFFSETS","PointyTop","FlatTop","createSelectionTail","selectedClueCell","getSelectedClueCell","getNeighboringCellIndices","rotation","createTail","getCluesWithCellIndex","allCluesWithSelectedCellIndex","clueCycle","nextSelectedCellIndex","cluesWithNextCellIndex","cellType","Fillable","aroundCell","oddOrEven","hexOrientation","neighborOffsets","CCW","o","start","languageUsesIJ","previousGuess","nextCellIndexToSelect","nextClueCycle","getNextCellIndexToSelectAndClueCycle","every","backspace","currentCellIsEmpty","getNextCellIndexToSelectAfterClear","resultWordIndex","puzzleCells","currentClueSelectionTail","disableMoveToNextClue","isInLastCell","neighboring","neighboringTail","getIsInLastCell","findNextEmptyCellIndexAndClueCycle","clueTail","createCluesTail","neighbors","clueCellIndex","tail","flipCardsAction","randomizeMemoryCardsAction","guessCard","guessCardPayload","ANIMATION_CARD_FLIP_DELAY","flipCards","cardIndices","revealMemoryCards","memoryCards","memorySelection","memoryCardsData","lastSelectedCards","cardsToBeRevealedIndex","findPairNumber","cardIndex","at","pairNumber","unRevealCard","cardData","isCardVisible","wrongCards","lastSelectedCard","FIND_DIFFERENCE","REVEAL_DIFFERENCE","MOVE_TO_DIFFERENCE","SET_GAME_STATUS_DELAY","findDifference","differenceIndex","revealDifference","moveToDifference","executeCellAction","action","ARROWWORD","ARROWWORD_MINI","ARROWWORD_PLUS_MINI","ARROWWORD_PLUS_SCRAMBLED","ARROWWORD_PLUS_SCRAMBLED_MINI","BINERO","BINERO_MINI","BLOCKPUZZLE","BLOCKPUZZLE_MINI","CONTINUOUS_MINI","CROSSWORD","CROSSWORD_MINI","CRYPTOGRAM","CRYPTOGRAM_MINI","CROSSWORD_FRENCH","CROSSWORD_FRENCH_MINI","CODEBREAKER","FILIPPINE","FILIPPINE_MINI","FILIPPINE_CRYPTO","FITWORD","FITWORD_MINI","HASHI","HASHI_MINI","IKURA","IKURA_MINI","MEMORY","NONOGRAM","NONOGRAM_MINI","REBUS","WORDGUESS","WORDWHEEL","WORDSEARCH","WORDSEARCH_MINI","CAMPING","CAMPING_MINI","SUDOKU","SUDOKU_CHAOS","SUDOKU_CHAOS_MINI","SUDOKU_HYPER","SUDOKU_KILLER","SUDOKU_KILLER_MINI","SUDOKU_X","KAKURO","KAKURO_MINI","KDOKU","KDOKU_MINI","TECTONIC","TECTONIC_MINI","FINDDIFFERENCES","FLEETCOMMANDER","FLEETCOMMANDER_MINI","HONEYCOMB","HONEYCOMB_MINI","GUESS","GUESS_WORD","CLEAR_CELL","CLEAR_CELLS","CLEAR_CLUE","REVEAL_CELL","REVEAL_CELLS","REVEAL_CLUE","REVEAL_WORD","REVEAL_PUZZLE","CHECK_CELL","CHECK_CLUE","CHECK_PUZZLE","CHECK_WORD","ERASE_MISTAKES","FILL_CODEBAR","REVEAL_CODEBAR","SWAP_VALUES","RESET_CORRECT_STATUSES","PREV_GUESS","GAMEROOM_GUESSES","AUTO_COMPLETE","RESET_PUZZLE","INIT_GAME_DATA","SET_GAME_STATUS","SET_IS_INITIAL","SAVE_REVEALED_CELLS","PRELOAD_STATE","SAVE_COMPLETED_SETS","setGameStatus","isGameRoomGuesses","isFirstFetch","setIsInitial","isInitial","resetPuzzle","ignoreTimerReset","saveRevealedCells","setCompletedSets","NEVER","determineExpiryDate","dayToStoreOffset","getTime","setDate","toISOString","TOGGLE_KEYBOARD","SET_ZOOM_TRIGGER","UNSET_ZOOM_TRIGGER","SET_ZOOM_IS_AT_MAX_ZOOM_SCALE","SET_ZOOM_IS_AT_MIN_ZOOM_SCALE","TOGGLE_NOTE_INPUTMODE","UPDATE_SETTINGS","SET_HARDWARE_KEYBOARD_DETECTED","TOGGLE_NUMBERS_FIRST_MODE","setZoomTriggerAction","toggleKeyboard","setHardwareKeyboardDetected","detected","setHardwareKeyboardDetectedAction","zoom","ZOOM","resetZoom","ZOOM_RESET","unsetZoomTrigger","setZoomIsAtMaxZoomScale","setZoomIsAtMaxZoomScaleAction","setZoomIsAtMinZoomScale","setZoomIsAtMinZoomScaleAction","toggleNoteInputmode","updateSettings","customerId","updateSettingsAction","toggleNumbersFirstMode","START_TIMER","INCREMENT_TIMER","SET_TIMER","PAUSE_TIMER","RESUME_TIMER","SET_TIME_STAMP_FROM_START","startTimer","timeStampFromStart","incrementTimer","setTimer","counter","setTimerAction","resumeTimer","pauseTimer","SET_DRAWER","CLOSE_DRAWER","ADD_TOAST","REMOVE_TOAST","SET_GRID_TOAST","SET_MODAL","CLOSE_MODAL","SHOW_NAV","SHOW_ENDSCREEN","SHOW_RESET_MODAL","HIDE_RESET_MODAL","SHOW_ONSCREEN_KEYBOARD_SHOW_MODAL","HIDE_ONSCREEN_KEYBOARD_SHOW_MODAL","SHOW_ONSCREEN_KEYBOARD_HIDE_MODAL","HIDE_ONSCREEN_KEYBOARD_HIDE_MODAL","SHOW_CLEARALL_MODAL","HIDE_CLEARALL_MODAL","SHOW_INFO_MODAL","HIDE_INFO_MODAL","SHOW_THEME_SETTINGS_MODAL","HIDE_THEME_SETTINGS_MODAL","SHOW_TIMER_SETTINGS_MODAL","HIDE_TIMER_SETTINGS_MODAL","SHOW_REVEAL_PUZZLE_MODAL","HIDE_REVEAL_PUZZLE_MODAL","SHOW_GENERIC_EXCEPTION_MODAL","SHOW_LS_ERROR_MODAL","HIDE_LS_ERROR_MODAL","SHOW_HIGH_SCORES_MODAL","HIDE_HIGH_SCORES_MODAL","SHOW_SHARE_PUZZLE_MODAL","HIDE_SHARE_PUZZLE_MODAL","SHOW_SHARE_PUZZLE_ERROR_MODAL","HIDE_SHARE_PUZZLE_ERROR_MODAL","SET_ACTIVE_DROPDOWN","SET_IMPORT_EXPORT_MODAL_VISIBLE","setDrawer","fullscreenOnMobile","modalAutoGrow","hideClose","bleedToEdge","transparentOverlay","onClose","closeDrawer","addToast","setGridToast","showGenericExceptionModal","showLsErrorModal","hideLsErrorModal","removeToast","setModal","modal","setShowNav","showNav","setShowEndscreen","showEndscreen","ASSET_PATH","asIdentifier","assetPath","scriptUrl","currentScript","src","scriptOrigin","match","determineAssetPath","loadGameData","puzzleId","transformXML","xmlData","axiosRequestXML","fetchGameData","getXmlDataForGameType","identifiers","compact","fetchClientSettings","portalId","has","getPuzzleImageURL","scaleDownToFit","ref","lastTime","classNameFromProps","rest","debouncedOnClick","clickHandler","onTouchStart","handleTouchStart","onTouchMove","handleTouchMove","onTouchEnd","handleTouchEnd","ResizableContent","classNamePrefix","opacity","setOpacity","maxFontSize","setBaseFontSizeText","onFinish","fontSize","logLevel","parseFloat","getComputedStyle","getPropertyValue","ClientContext","isPortal","translate","Component","configuration","Provider","constructor","super","componentDidMount","configAbortController","setState","componentWillUnmount","render","restProps","percentage","puzzlePortal","puzzlePlayer","puzzleContainer","fullscreenArea","SMALL","MEDIUM","LARGE","EXTRA_LARGE","REVEAL_GAME_STATUS_DELAY","IJ_CHECK_DELAY","freeze","mobile","tablet","gridToasts","wordwheel","submitted","notFound","maxWordLength","foundLongestWord","revealedWord","centerLetterNotUsed","lettersNotUsed","inputLessThanFour","fitword","wordAlreadyUsed","wordDoesNotFit","wordguess","wordDoesNotExist","wordIncomplete","blockpuzzle","placingBlockConflicts","dropBlockOnInitial","pickupBlockConflict","rebus","incorrectCells","UNKNOWN","CORRECT","INCORRECT","SEMICORRECT","NOTE","ZOOM_IN","ZOOM_OUT","PlayerContext","standalone","openPlayer","closePlayer","renderBackLink","playerRef","puzzleVariation","processFinishPuzzle","isInViewPuzzleMode","uniqueId","getUniqueId","useId","idRef","usePrevious","getWindowDimensions","innerWidth","innerHeight","windowDimensions","setWindowDimensions","handleResize","initialState","drawerForceModal","drawerModalAutoGrow","drawerHideHeader","drawerHideClose","drawerClassName","toasts","showImportExportPuzzleStateModal","showInfoModal","showThemeSettingsModal","showRevealPuzzleModal","showResetModal","showClearAllModal","showOnscreenKeyboardShowModal","showOnscreenKeyboardHideModal","showHighScoresModal","showSharePuzzleModal","sharePuzzleText","showSharePuzzleErrorModal","showTimerSettingsModal","activeDropdown","drawerFullscreenOnMobile","drawerBleedToEdge","drawerSize","drawerOnClose","toast","gridToast","gridToastType","toastType","gridToastData","toastData","shareText","visible","persistPrefix","getPersistKey","getPersistConfig","storage","blacklist","keyPrefix","transforms","settingsTransform","serialize","timeout","whitelist","requestPersistStorage","persist","persistent","CANNOT_START_PUZZLE","EXPRESS","FEATURE_IN_DEVELOPMENT","GAME_INSTRUCTIONS","GENERIC_CONFIRM","GENERIC_ERROR","JOIN_NOW","NOTIFICATIONS","ONBOARD_MODAL","ONSCREEN_KEYBOARD_HIDE","ONSCREEN_KEYBOARD_SHOW","PLAYER_LIST","PUZZLE_CALENDAR_LEVEL","PUZZLE_FINISHED_WITHOUT_CONTRIBUTION","PUZZLE_ONBOARDING_LEVEL","PUZZLE_PACK_CONTENT","PUZZLE_PACK_INFO","PUZZLE_PACK_TYPE_LEVEL","PUZZLES_SORTING","SMART_HINT_LOGIC","SMART_HINT_WORDSEARCH","SMART_HINTS_DICTIONARY","TERMS_AND_CONDITIONS","UPGRADE_SUBSCRIPTION_PREMIUM_ONLY","UPGRADE_SUBSCRIPTION","VIEW_PUZZLE","games","CG_1010ARABIANNIGHTS","CG_1010CLASSIC","CG_BUBBLEACADEMY","CG_BUBBLES","CG_CLASSICSOLITAIRE","CG_COOKIECONNECT","CG_DAILYMAHJONG","CG_FLUFFYCUDDLIES","CG_GUESSTHEDRAWING","CG_JEWELACADEMY","CG_JEWELSOFARABIA","CG_JUNGLEJEWELS","CG_MYTHICALJEWELS","CG_SNAKE","CG_WOODBLOCKS","CG_ZODIACMAHJONG","CODEBREAKER_MINI","CROSSWORD_5X5","CRYPTO","gameStatus","gridToastTypes","REVEAL","touchStarted","moved","cancelable","touches","clientX","clientY","newX","newY","arraysEqual","customScroll","z","lastDiffs","lastTimeDiffs","averageDiff","timeAfterTouchEnd","interval","defaultPrevented","clearInterval","performance","newZ","lastDiff","scrollLeft","scrollTop","shift","averageTimeDiff","setInterval","customHorizontalScroll","customVerticalScroll","deepCloneObject","obj","structuredClone","isSamsungBrowser","userAgent","isMobile","documentElement","forcemode","isIOS15OrAboveSafari","parseInt","isMobileDevice","lastTouchEndTime","pseudoFullScreen","elem","classList","remove","closeFullscreen","handleNotchPadding","notchHeight","outerHeight","add","setProperty","contains","openFullscreen","screen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","fullscreenElement","keepFullscreenClass","exitFullscreen","mozFullScreenElement","mozCancelFullScreen","webkitFullscreenElement","webkitExitFullscreen","msFullscreenElement","msExitFullscreen","gameName","gamesFolderNames","getGamesFolder","parseList","puzzlePortalElement","dataset","portalid","assetpath","publicPath","publicpath","playerPath","playerpath","puzzlevariation","statsCustomerId","statscustomerid","debug","forceModeUserChoice","endsWith","queryParams","getQueryParam","paramName","RegExp","combineIJ","arr","currentLetter","toUpperCase","pop","setItemSafely","setItem","managePersistencyStorageSpace","generateUniqueUserId","force","getUniqueUserId","userLoggedIn","getPuzzleStateModified","storeState","puzzleState","firstParse","secondParse","parsePuzzleState","getPuzzleState","timer","stateWithStringifiedProperties","stringifyPuzzleState","persistKey","setLocalStorageBackup","overwriteLocalStorePersistencyStore","setLastCreatedStorages","storages","getLastCreatedStorages","lastStorages","removeFromLastCreatedStorages","lastCreatedStorages","trimLastCreatedStorages","persistConfigKey","trimmedStorages","removeOldStoragesFromLocalStorage","isPersistedPuzzleMarkedForCleanup","removePersistKey","setupStorage","persistedData","puzzleStore","gameInfo","expiryDate","isNaN","offset","removeEmptyStorages","resetArchiveSelection","uniqueUserId","profileUserId","profileAvatar","profileHash","profileNewItems","playEntriesOutbox","loggedIn","archiveSelection","klubbleApp","seenGameInfoHint","bigString","enoughSpace","ls","timesTried","lastStorageKey","e2","db","PersistDatabase","open","persiststorages","delete","webStorage","put","isUsingIndexedDb","useIndexedDb","indexedDB","version","stores","formatTimeFromSeconds","timeInSeconds","hours","floor","minutes","seconds","secondsZero","minutesZero","hoursZero","hourDigits","CHECK_CELLS","SET_NOTES","clearNotes","revealCells","revealCellsAction","checkCells","checkCellsAction","setNotes","setNotesAction","SELECT_CELLS","DESELECT_CELL","SELECT_KEYBOARD_KEY","multiSelectCell","multiSelectCellAction","deselectCell","selectKeyboardKey","selectKeyboardKeyAction","columns","cellsToRemove","revealWord","checkWord","checkWordAction","crossingCells","clueTypes","header","words","cluesArray","k","isInGrid","highlightCells","clearHighlightCells","handleClueSelection","removeFromCluesSelection","IS_SOLVED","HIGHLIGHT_CELLS","CLEAR_HIGHLIGHT_CELLS","findIndicesInGrid","wordlength","cluesWithSameLength","clueItem","found","clueword","indices","sanitizeClue","findWordInGrid","wordIndexes","clueInfo","cellInfoItem","isInGridComposer","selectedWordLength","newClues","gridClues","composedClues","resultClues","cellIndicesPerWord","wordIndices","getCellIndicesPerWord","newWord","cellIndicesWord","giveaway","removeCellsWithFilledCrossingRule","resultItems","cellItem","neighboringWordsCorrect","findInGridAndRemove","foundInGrid","removeCells","findInGridAndHighlight","matchIJForDutch","clueChars","clueArray","character","lastIndex","ijForDutchWithAnsi","wordcells","wordCell","getCellIndices","clueWithSelectedClueIndex","flat","getIndicesWithoutCompletelyFilledWords","cellsPerWord","getAllCellsForCategoryFilled","w","getLowestIdWord","cellsIdOrdered","concat","emptycell","fitsInGrid","selectedDirection","neighborsWithCorrectClue","sameCharacter","isCellEmpty","getCrossingNeighbors","crossingNeighbors","neighborIndices","getCrossingCellIndices","neighborIndex","neighborWord","clueWord","crossingCellIndices","indicesToTraverse","poppedIndex","chunkClues","cluesHeight","splitIndex","FleetcommanderCellValues","isShip","cellValue","getNextFleetcommanderValue","WATER","SHIP_UNKNOWN","getFleetcommanderCellValueMultiselect","initGameData","solutionBridges","rows","initGameDataAction","bridges","cellState","toBeRevealedCellIndex","selectEdgeCell","selectEdgeCellAction","SET_INPUT_MODE","UNDO_GUESS","CHANGE_UNDO","SELECT_EDGE_CELL","SUBMIT_ANSWER","submitAnswer","ADD_EMPTY_ROW","INCREASE_ACTIVE_ROW","LOCK_ACTIVE_ROW","UNLOCK_ACTIVE_ROW","addEmptyRow","increaseActiveRow","lockActiveRow","unlockActiveRow","startIndexActiveRow","cumulativeDelay","wordCells","delayForAnimation","locked","v","wordWithChecks","ANIMATION_DELAY","enterKeyTimeout","isPositionPreviouslyRevealed","posIndex","includeCurrentRow","maxIndex","handleEnterKey","isTrusted","enterKeyElement","getElementsByClassName","wordIsValid","axios","newEmptyRow","currentCell","remainingLetters","foundIndex","letter","splice","puzzleSolved","playMode","attempts","handleBackspaceDeleteKey","onKeyDownParams","eventType","selectCellInGrid","handleArrowKeys","nextSelectedCell","MATCH_CLUE","matchClue","matchClueAction","ACTIVATE_SMART_HINT","MOVE_TO_SMART_HINT","activateSmartHint","determineSmartHintClueIndex","solvedClues","foundCluesIndices","solvedClue","_clueCell","INPUT_LETTER","DELETE_LETTER","CLEAR_INPUT","MATCH_INPUT","getInputLength","shouldCheckIJ","ijOccurrences","getWordsToMatch","content","inputLetterAction","char","inputLengthIsValid","getInputWord","wheelCellIndex","used","inputActionTypes","hasIJ","deleteLetterAction","clearInputAction","matchInputAction","longestWordLength","getLongestWordLength","wordsToMatch","matchWords","inputToLowerCase","inputLength","minimumInputLength","centerLetter","sortedWords","matchedWords","cellActionTypes","allWords"],"sourceRoot":""}