{"version":3,"file":"entryApp.023340aa768457a244b4.1724.js","mappings":"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","sources":["webpack:///./locale|lazy|/^\\.\\/.*\\/messages$/|groupOptions: {}|namespace object","webpack:///./src/helpers/utils.ts","webpack:///./src/config.ts","webpack:///./src/resources/utils/basic-resources.ts","webpack:///./src/resources/resources.ts","webpack:///./src/helpers/enums.ts","webpack:///./src/hooks/use-server-error-aggregator.ts","webpack:///./src/helpers/constants.ts","webpack:///./src/helpers/lokalisation.ts","webpack:///./src/hooks/use-exit-app.ts","webpack:///./src/components/modals/modal-container.tsx","webpack:///./src/components/modals/modal-layout.tsx","webpack:///./src/components/modals/internal-error/assets/Error.svg","webpack:///./src/components/modals/internal-error/internal-error.tsx","webpack:///./src/components/app-error/app-error.tsx","webpack:///./assets/audio/allStarSpin.mp3","webpack:///./assets/audio/click.mp3","webpack:///./src/components/audio/provider/audio-effects-provider.tsx","webpack:///./assets/audio/correctSound.mp3","webpack:///./assets/audio/correctAnswerScreen.mp3","webpack:///./assets/audio/inCorrectSound.mp3","webpack:///./assets/audio/collectCoins.mp3","webpack:///./assets/audio/correct1Star.mp3","webpack:///./assets/audio/correct2Star.mp3","webpack:///./assets/audio/correct3Star.mp3","webpack:///./assets/audio/scoreResults1Star.mp3","webpack:///./assets/audio/scoreResults2Star.mp3","webpack:///./assets/audio/scoreResults3Star.mp3","webpack:///./assets/audio/beforeCollectingCoins.mp3","webpack:///./assets/audio/selfAssesmentEmojis_1.mp3","webpack:///./assets/audio/selfAssesmentEmojis_2.mp3","webpack:///./assets/audio/selfAssesmentEmojis_3.mp3","webpack:///./assets/audio/selfAssesmentEmojis_4.mp3","webpack:///./assets/audio/selfAssesmentEmojis_5.mp3","webpack:///./assets/audio/congratulations.mp3","webpack:///./assets/audio/transitionScreens.mp3","webpack:///./assets/audio/UPT_Completion.mp3","webpack:///./assets/audio/AYR_Completion.mp3","webpack:///./src/containers/build-number/build-number.tsx","webpack:///./assets/images/activity-guide.svg","webpack:///./assets/images/close-icon.svg","webpack:///./assets/images/Star-grey.svg","webpack:///./assets/images/Star.svg","webpack:///./assets/images/summary-mountain.svg","webpack:///./src/components/app-image/app-image-types.ts","webpack:///./assets/images/concept-refresh.svg","webpack:///./assets/images/progress-path.svg","webpack:///./assets/images/pin-icon.svg","webpack:///./assets/images/logo_mathletics.svg","webpack:///./assets/images/mountain.svg","webpack:///./assets/images/swipe-icon.svg","webpack:///./assets/images/icon_tick.svg","webpack:///./assets/images/whale_mountain.png","webpack:///./assets/images/kraken_mountain.png","webpack:///./assets/images/Guide.png","webpack:///./assets/images/modal-cancel-icon.svg","webpack:///./assets/images/cross.svg","webpack:///./assets/images/tick.svg","webpack:///./assets/images/audioIcon.svg","webpack:///./assets/images/Fluency-L.png","webpack:///./assets/images/Fluency-R.png","webpack:///./assets/images/Reasoning-L.png","webpack:///./assets/images/Reasoning-R.png","webpack:///./assets/images/Problem-Solving_L.png","webpack:///./assets/images/Problem-Solving_R.png","webpack:///./assets/images/CloudBumpy.png","webpack:///./assets/images/CloudSoftNarrow.png","webpack:///./assets/images/SUMMIT-FG.svg","webpack:///./assets/images/info-icon.svg","webpack:///./assets/images/keypad.svg","webpack:///./assets/images/worked-solution.svg","webpack:///./assets/images/Move.svg","webpack:///./assets/images/chevron-right.svg","webpack:///./assets/images/fluency-fail-fluffy.png","webpack:///./assets/images/fluency-fail-mountain.png","webpack:///./assets/images/fluency-fail-ocean.png","webpack:///./assets/images/session-timeout.svg","webpack:///./src/components/app-image/app-image.tsx","webpack:///./src/hooks/use-with-mobile.ts","webpack:///./src/components/modals/fluency-fail-modal/fluency-fail-modal.hooks.ts","webpack:///./src/components/modals/fluency-fail-modal/fluency-fail-modal.styled.ts","webpack:///./src/components/modals/fluency-fail-modal/fluency-fail-modal-bkgd.tsx","webpack:///./src/containers/question-container/sub-components/temp-poc/temp-spinner.styled.ts","webpack:///./src/components/modals/fluency-fail-modal/fluency-fail-modal.constants.ts","webpack:///./src/components/modals/fluency-fail-modal/fluency-fail-modal-content.tsx","webpack:///./src/containers/fluency-fail/fluency-fail.hooks.ts","webpack:///./src/components/modals/fluency-fail-modal/fluency-fail-modal.tsx","webpack:///./src/containers/fluency-fail/fluency-fail.tsx","webpack:///./src/components/modals/no-internet-modal/no-internet-image.tsx","webpack:///./src/components/modals/no-internet-modal/no-internet-modal.tsx","webpack:///./src/containers/internet-connectivity/internet-connectivity.tsx","webpack:///./src/containers/question-container/sub-components/activity-keypad/activity-keypad.tsx","webpack:///./src/containers/question-container/sub-components/activity-keypad/keypad-provider.tsx","webpack:///./src/components/modals/session-timeout-modal/session-timeout-modal.constants.ts","webpack:///./src/components/modals/session-timeout-modal/session-timeout-modal.tsx","webpack:///./src/containers/session-timeout/session-timeout.tsx","webpack:///./src/i18n/utils/locale-utils.ts","webpack:///./src/i18n/hooks/use-activate-i18n.ts","webpack:///./src/i18n/i18n-provider.tsx","webpack:///./src/containers/question-container/store/question-action-types.ts","webpack:///./src/containers/question-container/store/question-actions.ts","webpack:///./src/hooks/use-google-analytics.ts","webpack:///./src/resources/intercept-3p-rescources-error.ts","webpack:///./src/containers/question-container/sub-components/temp-poc/temp-spinner.tsx","webpack:///./src/styles/theme/components/button.ts","webpack:///./src/styles/theme/components/close-button.ts","webpack:///./src/styles/theme/components/progress.ts","webpack:///./src/styles/theme/components/tooltip.ts","webpack:///./src/styles/theme/flex-mixins.ts","webpack:///./src/styles/theme/mixins.ts","webpack:///./src/styles/theme/variables.ts","webpack:///./src/styles/theme/app-theme.ts","webpack:///./src/styles/theme/typography.ts","webpack:///./src/styles/theme/components/container.ts","webpack:///./src/styles/theme/components/modal.ts","webpack:///./src/styles/theme/components/popover.ts","webpack:///./src/routes/app-initialisation/app-initialisation.styled.ts","webpack:///./src/routes/routes.ts","webpack:///./src/routes/app-initialisation/hooks/use-app-initialization.ts","webpack:///./src/routes/app-initialisation/app-initialsation.tsx","webpack:///./src/components/modals/exit-without-completing/exit-without-completing.tsx","webpack:///./assets/images/zoom-in.svg","webpack:///./assets/images/keycap.png","webpack:///./src/components/modals/zoom-out/zoom-out.styled.ts","webpack:///./assets/images/command.svg","webpack:///./src/components/modals/zoom-out/zoom-out.tsx","webpack:///./src/containers/zoom-out/zoom-out.tsx","webpack:///./src/components/header/header.styled.ts","webpack:///./src/components/header/header.tsx","webpack:///./src/routes/milestone-transition/sub-components/summary/utils/util.ts","webpack:///./src/routes/question-console/hooks/use-milestone-progress.ts","webpack:///./src/containers/question-container/question-container.styled.ts","webpack:///./src/containers/question-container/hooks/use-progress-activity.ts","webpack:///./src/containers/question-container/sub-components/attempt-status/utils/attempt-status-util.ts","webpack:///./src/containers/question-container/sub-components/progress-milestone/progress-milestone.styled.ts","webpack:///./src/containers/question-container/sub-components/progress-milestone/progress-milestone.tsx","webpack:///./src/containers/question-container/anims/anims.ts","webpack:///./src/containers/question-container/sub-components/progress-step/progress-step.styled.ts","webpack:///./src/containers/question-container/sub-components/progress-step/progress-step.tsx","webpack:///./src/containers/question-container/sub-components/progress-activity/progress-activity.styled.ts","webpack:///./src/containers/question-container/sub-components/progress-activity/progress-activity.tsx","webpack:///./src/components/audio/hooks/use-question-activity-audio.ts","webpack:///./src/components/corrupted-data/corrupted-data.tsx","webpack:///./src/components/correct-answer/correct-answer-content.tsx","webpack:///./src/components/correct-answer/correct-answer.styled.ts","webpack:///./src/components/correct-answer/correct-answer.tsx","webpack:///./src/components/hint/hint-content.tsx","webpack:///./src/components/worked-solution/worked-solution.styled.ts","webpack:///./src/components/worked-solution/worked-solution.tsx","webpack:///./src/components/question-attempt-pill/question-attempt-pill.tsx","webpack:///./src/components/unit-test-question-attempts/unit-test-question-attempt-pill.tsx","webpack:///./src/components/unit-test-question-attempts/unit-test-question-attempts.tsx","webpack:///./src/components/question-attempts/question-attempts.tsx","webpack:///./src/routes/milestone-transition/sub-components/intro-screen/intro-screen.types.ts","webpack:///./src/containers/question-container/sub-components/attempt-status/attempt-status.styled.ts","webpack:///./src/containers/question-container/sub-components/attempt-status/attempt-status.tsx","webpack:///./src/containers/question-container/sub-components/question-footer/question-footer.styled.ts","webpack:///./src/containers/question-container/sub-components/question-footer/question-footer.tsx","webpack:///./src/containers/question-container/sub-components/question-footer/question-footer.hooks.ts","webpack:///./src/containers/question-container/sub-components/question-activity/question-activity.styled.ts","webpack:///./src/containers/question-container/sub-components/question-activity/question-activity.tsx","webpack:///./src/containers/question-container/question-container.tsx","webpack:///./src/containers/question-container/question-container.util.ts","webpack:///./src/hooks/use-route-checker.ts","webpack:///./src/routes/diagnostics/assets/UPT_Background.svg","webpack:///./src/routes/diagnostics/assets/AYR_Background.svg","webpack:///./src/routes/diagnostics/diagnostics.tsx","webpack:///./src/routes/diagnostics/diagnostics.hooks.ts","webpack:///./src/hooks/use-lottie-anim.tsx","webpack:///./src/routes/milestone-transition/milestone-transition.styled.ts","webpack:///./src/routes/milestone-transition/sub-components/guide/guide.styled.ts","webpack:///./src/routes/milestone-transition/sub-components/guide/guide.tsx","webpack:///./src/routes/milestone-transition/sub-components/collect-coins/collect-coins.styled.ts","webpack:///./src/routes/milestone-transition/sub-components/collect-coins/m_coin_outlined.svg","webpack:///./src/routes/milestone-transition/sub-components/collect-coins/collect-coins.tsx","webpack:///./src/routes/milestone-transition/sub-components/diagnostics-intro/diagnostics-intro.tsx","webpack:///./src/routes/milestone-transition/sub-components/diagnostics-summary/diagnostics-summary.tsx","webpack:///./src/routes/milestone-transition/sub-components/exceeded-attempts-finish-screen/exceeded-attempts-finish-screen.tsx","webpack:///./src/routes/milestone-transition/sub-components/feedback-screen/feedback-item.tsx","webpack:///./src/routes/milestone-transition/sub-components/feedback-screen/assets/Face with Sweat.svg","webpack:///./src/routes/milestone-transition/sub-components/feedback-screen/assets/Grimacing Face.svg","webpack:///./src/routes/milestone-transition/sub-components/feedback-screen/assets/Smiling Face with Smiling Eyes.svg","webpack:///./src/routes/milestone-transition/sub-components/feedback-screen/assets/Grinning Face.svg","webpack:///./src/routes/milestone-transition/sub-components/feedback-screen/assets/Smiling Face with Sunglasses.svg","webpack:///./src/routes/milestone-transition/sub-components/feedback-screen/feedback-screen.tsx","webpack:///./src/routes/milestone-transition/sub-components/intro-screen/intro-screen.styled.ts","webpack:///./src/routes/milestone-transition/sub-components/intro-screen/concept-refresh-slide.tsx","webpack:///./assets/images/concept-refresh-btn.png","webpack:///./src/routes/milestone-transition/sub-components/intro-screen/utils/intro-screen.utils.tsx","webpack:///./src/routes/milestone-transition/sub-components/intro-screen/intro-screen.tsx","webpack:///./src/routes/milestone-transition/sub-components/mid-milestone-screen/mid-milestone-screen.tsx","webpack:///./assets/images/summary-tick.svg","webpack:///./src/routes/milestone-transition/sub-components/summary/hooks/use-get-animation-details.ts","webpack:///./assets/images/silver-bar.png","webpack:///./src/routes/milestone-transition/sub-components/summary/sub-components/progress-bar/progress-bar.styled.ts","webpack:///./src/routes/milestone-transition/sub-components/summary/sub-components/progress-bar/progress-bar.tsx","webpack:///./src/routes/milestone-transition/sub-components/summary/sub-components/star-rating/progress-star-anim.tsx","webpack:///./src/hooks/use-window-size.ts","webpack:///./src/routes/milestone-transition/sub-components/summary/sub-components/star-rating/progress-star.tsx","webpack:///./assets/images/Star-half.svg","webpack:///./src/routes/milestone-transition/sub-components/summary/sub-components/star-rating/progress-star-rating.tsx","webpack:///./src/routes/milestone-transition/sub-components/summary/sub-components/star-rating/progress-stars.tsx","webpack:///./src/routes/milestone-transition/sub-components/summary/summary.styled.ts","webpack:///./src/routes/milestone-transition/sub-components/summary/sub-components/star-rating/star-rating.tsx","webpack:///./src/routes/milestone-transition/sub-components/summary/sub-components/star-rating/star-tooltip.tsx","webpack:///./src/routes/milestone-transition/sub-components/summary/sub-components/star-rating/star-rating-container.tsx","webpack:///./src/routes/milestone-transition/sub-components/summary/sub-components/progress-bar-and-star-container.tsx","webpack:///./src/routes/milestone-transition/sub-components/summary/summary.utils.ts","webpack:///./src/routes/milestone-transition/sub-components/summary/summary.tsx","webpack:///./src/routes/milestone-transition/sub-components/unit-test-summary/result/result.tsx","webpack:///./src/routes/milestone-transition/sub-components/unit-test-summary/result/assets/Correct.svg","webpack:///./src/routes/milestone-transition/sub-components/unit-test-summary/result/assets/InCorrect.svg","webpack:///./src/routes/milestone-transition/sub-components/unit-test-summary/unit-test-summary.tsx","webpack:///./src/routes/milestone-transition/sub-components/unit-tests-intro/unit-tests-intro.tsx","webpack:///./src/routes/milestone-transition/sub-components/milestone-message/milestone-message.styled.ts","webpack:///./src/routes/milestone-transition/sub-components/milestone-message/milestone-message.tsx","webpack:///./src/routes/milestone-transition/sub-components/message-box/message-box.styled.ts","webpack:///./src/routes/milestone-transition/sub-components/message-box/message-box.tsx","webpack:///./src/routes/milestone-transition/sub-components/transition-bg/transition-bg.styled.ts","webpack:///./src/routes/milestone-transition/sub-components/transition-bg/transition-bg.tsx","webpack:///./src/routes/milestone-transition/milestone-transition.tsx","webpack:///./src/routes/milestone-transition/hook/use-confetti.tsx","webpack:///./src/routes/preview/preview.types.ts","webpack:///./src/routes/preview/test/mock-data.ts","webpack:///./src/routes/preview/preview.styled.ts","webpack:///./src/routes/preview/nav-buttons.tsx","webpack:///./src/routes/preview/question-header.tsx","webpack:///./src/routes/preview/preview.tsx","webpack:///./src/routes/preview/preview.hooks.ts","webpack:///./src/routes/question-console/question-console.styled.ts","webpack:///./src/routes/question-console/question-console.tsx","webpack:///./src/routes/single-variant/diagnostics.tsx","webpack:///./src/routes/single-variant/question-set.tsx","webpack:///./src/routes/single-variant/single-variant.constants.ts","webpack:///./src/routes/single-variant/single-variant.tsx","webpack:///./src/routes/single-variant/single-variant.hooks.ts","webpack:///./src/routes/app-routes.tsx","webpack:///./src/styles/fonts.ts","webpack:///./src/styles/normalize.ts","webpack:///./src/styles/reset.ts","webpack:///./src/styles/global-styles.tsx","webpack:///./src/styles/app.ts","webpack:///./src/styles/app-theme-provider.tsx","webpack:///./src/containers/question-container/store/question-reducer.ts","webpack:///./src/app/store/root-reducer.ts","webpack:///./src/app/store/app-redux-provider.tsx","webpack:///./src/app/app-providers.tsx","webpack:///./src/app/entry-app.utils.ts","webpack:///./src/app/entry-app.tsx"],"sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(() => {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = () => ([]);\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 3115;\nmodule.exports = webpackEmptyAsyncContext;","import queryString from 'querystring';\n\nimport { Content } from '@3plearning/question-components-library';\n\nimport { Progress } from '../containers/question-container/sub-components/question-activity/question-activity.types';\nimport { ConceptRefreshContent } from '../routes/milestone-transition/sub-components/intro-screen/intro-screen.types';\n\nexport const getQueryParam = (param: string) => {\n const params = new URLSearchParams(window.location.search);\n\n return params.get(param);\n};\n\nexport const getQueryParamValues = (params: string[], queryString = window.location.search) => {\n const urlParams = new URLSearchParams(queryString);\n\n return params.reduce((acc, item) => {\n const value = urlParams.get(item);\n\n if (value) {\n acc[item] = value;\n }\n\n return acc;\n }, {} as Record);\n};\n\nexport function getQueryParams (query: string) {\n const params = query.replace('?', '');\n\n return queryString.parse(params) as Record;\n}\n\n/**\n * Use this for strict typing a defined value for an undefined & null check.\n * For example when values from the C Sharp JSON serializer\n * default to null despite swagger docs, this can all assert the type that it is defined.\n */\nexport function isDefined (value: TValue | undefined | null): value is TValue {\n return value !== undefined && value !== null;\n}\n\n// Not truly random, please don't use for anything that needs any security\nexport function getRandomNumBetween (min: number, max: number) {\n return Math.random() * (max - min) + min;\n}\n\n// Not truly random, please don't use for anything that needs any security\nexport function getRandomStringOfLength (length: number): string {\n let result = '';\n\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n const charactersLength = characters.length;\n\n for (let i = 0; i < length; i += 1) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n}\n\n/**\n * Determine if the current runtime is the Jest test runner,\n * this env is specified in the jest docs here.\n *\n * @see https://jestjs.io/docs/environment-variables\n * @see https://stackoverflow.com/a/52231746\n */\nexport function isInJest (): boolean {\n return window?.process?.env?.JEST_WORKER_ID !== undefined;\n}\n\nexport function getRandomArrayElement (array: Array = []): T {\n return array[Math.floor(Math.random() * (array.length))];\n}\n\nexport const transformSchema = (content?: Content | ConceptRefreshContent | {\n content: []\n segments: { type: 'text' | 'latex'\n value: string\n}[] }[]) =>\n content?.map(block => ({\n ...block,\n content: (block as { content: []; segments: { type: 'text' | 'latex'; value: string; text: string }[] }).segments?.map(\n segment => ({\n ...segment,\n [segment.type === 'latex' ? 'attrs' : 'text']: segment.type === 'latex' ? { value: segment.value } : segment.value\n })\n ) || block.content\n }));\n\nexport const getPoints = (progress?: Progress) => progress?.points?.reduce(\n (totalPoints, section) => totalPoints + section.stars.reduce(\n (sectionTotal, questionResult) => {\n if (questionResult > 0) {\n return sectionTotal + section.pointsPerQuestion;\n }\n\n return sectionTotal;\n }, 0),\n 0);\n\nexport const getTotalNumStars = (progress?: Progress) => progress?.points?.reduce(\n (totalPoints, section) => totalPoints + section.stars.reduce(\n (sectionTotal, questionResult) => {\n return sectionTotal + questionResult;\n }, 0),\n 0);\n\nexport const returnToStudentPortal = () => {\n try {\n const searchParams = new URLSearchParams(document.location.search);\n const studentPortalUrl = searchParams.get('backUrl');\n\n if (studentPortalUrl) {\n window.location.href = studentPortalUrl;\n } else {\n window.close();\n }\n } catch (error) {\n console.log(error);\n }\n};\n","/* istanbul ignore file */\nconst isDevelopment = process.env.NODE_ENV !== 'production';\nconst isProduction = process.env.NODE_ENV === 'production';\n\n/**\n * This file is the central place for any immutable configuration settings,\n * it should be standalone and not have any cyclic dependencies.\n */\nexport const APP_CONFIG = {\n // The application name, to be used when asking the configuration system for settings.\n appName: 'Questicon',\n isDevelopment,\n isProduction,\n // TODO link to best practices for lingui workflow this was raised by Harry in #frontend-guild.\n //\n // Generally at development time you can implement application features and work from a local json file,\n // and use the `npm run lingui:update` tooling. However we need to make sure we are not out of sync with\n // production data on CDN. Use this flag to force loading from CDN.\n shouldLoadLocaleFromCDN: true\n};\n","/* istanbul ignore file */\nimport { APP_CONFIG } from '../../config';\nimport { Credentials } from '../../types/common.types';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires,import/no-commonjs\nconst environment = require('@3plearning/resource');\n\nexport class BasicResources {\n static initialise (envName: string, credentials: Credentials) {\n const env = environment(envName, APP_CONFIG.appName);\n\n if (credentials.authToken) {\n env.authToken = credentials.authToken;\n env.jwtToken = credentials.JWT;\n } else if (credentials.username && credentials.password) {\n env.username = credentials.username;\n env.password = credentials.password;\n } else {\n // The caller should have provided a valid set of credentials, so\n // hopefully this will never happen.\n console.error(\n 'BasicResources.initialise() - to execute, we need either an authToken or' +\n ' a username/password pair. The credentials object that was provided does not' +\n ' contain either. So, expect things to fail badly :-(.'\n );\n }\n\n return env;\n }\n}\n","import { Credentials } from '../types/common.types';\nimport { BasicResources } from './utils/basic-resources';\n\n// The Resources class provides a set of static fields, one for each resource\n// needed by the application. Users should generally call its initialise() method, to set\n// up the environment and create all of the resources the application will use.\n\n// In some (hopefully, rare) situations, it may be required that the environment is provided\n// from a parent application. In these situations, call createResources(parentEnv) directly,\n// and pass it the Resources.env object that is the environment required.\nexport class Resources {\n /* istanbul ignore file */\n // createResources() should create a static field for each resource:\n //\n // const env = parentEnv || Resources.env;\n //\n // Resources.colours = env.resource('Colours')\n // .baseUrl('@AvatarAdminBaseUrl')\n // .service('colours');\n //\n //\n // Application code can then access those resources like so:\n //\n // const allColours = Resource.colours.get().send();\n\n // from original react-boilerplate\n /* eslint-disable @typescript-eslint/no-explicit-any */\n static env: any;\n static getToken?: any;\n static getConfigurationItem?: any;\n static getQuestionsDetails?: any;\n static getStrandUow?: any;\n static getQuestionSetPreview?: any;\n static getQuestion?: any;\n static saveQuestion?: any;\n static sendFeedback?: any;\n static collectCoins?: any;\n static exitQuestionSet?: any;\n static getReadAloudLocale?: any;\n static postReadAloudLocale?: any;\n static questionVariantsFromContentApi?: any;\n static testSympy?: any;\n static featureToggles?: any;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n // from original react-boilerplate\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static createResources (parentEnv?: any) {\n if (parentEnv) {\n Resources.env = parentEnv;\n }\n\n const AUTHENTICATION_URL = window._env_.AUTHENTICATION_GATEWAY_ENDPOINT;\n const QUESTICON_GATEWAY_URL = window._env_.QUESTICON_GATEWAY;\n\n Resources.sendFeedback = Resources.env\n .resource('studentFeedback')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/studentFeedback');\n\n Resources.getQuestionsDetails = Resources.env\n .resource('getQuestionsDetails')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/questDetails');\n\n Resources.getStrandUow = Resources.env\n .resource('getStrandUow')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/title/course/{courseId}/uow/{uowId}');\n\n Resources.getQuestionSetPreview = Resources.env\n .resource('getQuestionSetPreview')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/question-preview/{questionSetId}');\n\n Resources.getQuestion = Resources.env\n .resource('getQuestion')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/Question');\n\n Resources.saveQuestion = Resources.env\n .resource('saveQuestion')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/QuestionResult');\n\n Resources.collectCoins = Resources.env\n .resource('collectCoins')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/CollectCoins');\n\n Resources.questionVariantsFromContentApi = Resources.env\n .resource('questionVariantsFromContentApi')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/Test/questionVariantsFromContentApi/{variantId}');\n\n Resources.testSympy = Resources.env\n .resource('testSympy')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/Test/testSympy');\n\n Resources.featureToggles = Resources.env\n .resource('featureToggles')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/Test/featureToggles');\n\n Resources.getToken = Resources.env.resource('sessions')\n .baseUrl(AUTHENTICATION_URL)\n .service('/sessions');\n\n Resources.exitQuestionSet = Resources.env\n .resource('exitQuestionSet')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/ExitTest');\n\n Resources.getReadAloudLocale = Resources.env\n .resource('getReadAloudLocale')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/QuestUserSettings');\n\n Resources.postReadAloudLocale = Resources.env\n .resource('postReadAloudLocale')\n .baseUrl(QUESTICON_GATEWAY_URL)\n .service('/QuestUserSettings');\n\n Resources.getConfigurationItem = async (key: string) => {\n try {\n return await Resources.env.getConfigurationItem(key);\n } catch (error) {\n console.error('Retrieving configuration failed. Please check you actually have a config key called \"' +\n key + '\" in app named \"' + Resources.env.application + '\" in Config for environment \"' + Resources.env.name + '\".');\n }\n };\n }\n\n // Initialise the environment and resources, based on the provided\n // environment name. We return the environment so the caller has\n // access to everything, in particular the authToken if one was\n // passed in the query parameters.\n\n static initialise (envName: string, credentials: Credentials) {\n Resources.env = BasicResources.initialise(envName, credentials);\n\n Resources.createResources();\n\n return Resources.env;\n }\n}\n","// eslint-disable-next-line @typescript-eslint/naming-convention\nexport enum PROGRESS_STATE {\n fluency,\n reasoning,\n problemSolving\n}\n\nexport enum MilestoneState {\n notStarted,\n inProgress,\n completed\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport enum STUDENT_STATES {\n intro = 'intro',\n fluencyIntro = 'fluencyIntro',\n progress = 'progress',\n question = 'question',\n resume = 'resume',\n summary = 'summary'\n}\n\nexport enum TransitionScreen {\n startScreen,\n resumeScreen,\n startFluency,\n startReasoning,\n startProblemSolving,\n summaryScreen,\n finishScreen,\n exceededAttemptsFinishScreen,\n feedbackScreen,\n diagnosticsStartScreen,\n diagnosticsSummaryScreen,\n unitTestIntroScreen,\n unitTestSummaryScreen\n}\n\nexport enum QuestionSetType {\n questiconActivity,\n diagnostics,\n unitTest\n}\n\nexport enum QuestionProgressState {\n notCurrent = 'notCurrent',\n nextUnanswered = 'nextUnanswered',\n resetUnanswered = 'resetUnanswered',\n correctAnswered = 'correctAnswered',\n incorrectAnswered = 'incorrectAnswered'\n}\n\nexport enum ExitType {\n normalProgress,\n normalExit,\n fluencyExit\n}\n\nexport enum ServerErrorType {\n other,\n timeout\n}\n","import { useSelector } from 'react-redux';\n\nimport { AppState } from '../app/store/store.types';\nimport { ServerErrorType } from '../helpers/enums';\n\nexport const useServerErrorAggregator = () => {\n let errorType = -1;\n\n const { serverErrorIntercepted } = useSelector(state => state.activityState);\n\n switch (serverErrorIntercepted?.status) {\n case 401: {\n errorType = ServerErrorType.timeout;\n break;\n }\n default: {\n if (serverErrorIntercepted?.status as number > 399 && serverErrorIntercepted?.status as number < 600) {\n errorType = ServerErrorType.other;\n }\n break;\n }\n }\n\n return { errorType };\n};\n","export const MAX_ATTEMPTS = 3;\n\nexport const SCORE_GROUPS = {\n four: 4,\n six: 6,\n eight: 8,\n nine: 9,\n ten: 10\n};\n\n/**\n * Student cannot earn points after this numer of attempts.\n *\n * For example, if MAX_QUESTION_SET_ATTEMPT is 5, student can only earn points in the first 5 attempts.\n * After 5 attempts, they can still work on the question set but no longer earn any point.\n *\n * @constant\n * @type {number}\n */\nexport const MAX_QUESTION_SET_ATTEMPT = 5;\n\nexport const featureFlags = [\n];\n","import {\n plural, t\n} from '@lingui/macro';\n\nimport { SCORE_GROUPS } from './constants';\n\nexport const lokalisation = () => {\n const messageBoxTxt = {\n totalPoints: t`Message - Total Points`,\n questions: t`Message - Questions`,\n fluencyDescription: t`Message - Fluency Description`,\n fluencyHeader: t`Message - Fluency Header`,\n fluencyHeaderForExceedingMaximumAttempts: t({\n id: 'Message - Fluency Header For Exceeding Maximum Attempts',\n message: \"Let's dive back in\"\n }),\n noPointsEarnTxt: t({\n id: 'Message - No Point Earn',\n message: \"You've earned all the points you can for this set.\"\n })\n };\n const diagnosticIntroTxt = { noPointsEarn: t`Diagnostics Intro - You’ve earned all the points you can for this set.` };\n const transToScreenTxt = {\n problemSolvingHeader1: t`Trans To Problem Solving - Header1`,\n problemSolvingHeader2: t`Trans To Problem Solving - Header2`,\n problemSolvingDescription: t`Trans To Problem Solving - Description`,\n nextStage: t`Trans - Next Stage`,\n nextStageStart: t`Trans - Next Stage Start`,\n reasoningHeader1: t`Trans To Reasoning - Header1`,\n reasoningHeader2: t`Trans To Reasoning - Header2`,\n reasoningDescription: t`Trans To Reasoning - Description`\n };\n const progressTxt = [\n t`Progress Label - Fluency`,\n t`Progress Label - Reasoning`,\n t`Progress Label - Problem Solving`\n ];\n const buttonTxt = {\n hint: t`Button - Hint`,\n next: t`Button - Next`,\n exit: t`Button - Exit`,\n check: t`Button - Check`,\n begin: t`Button - Begin`,\n resume: t`Button - Resume`,\n start: t`Button - Start`,\n startQuestions: t`Button - Start Questions`,\n ready: t`Button - Let's do it`,\n tryAgain: t`Button - Try again`,\n tryAnother: t`Try another`,\n workedSolution: t`Button - Worked solution`,\n collect: t`Collect`,\n finish: t`Finish`,\n startAgain: t`Start again`,\n gotIt: t`Got it`,\n home: t`Home`,\n signIn: t`Sign In`\n };\n const introTxt = {\n conceptRefresh: t`Intro Label - Concept refresh`,\n hi: t`Intro Label - Hi`,\n goal: t`Intro Label - today we are practicing`,\n intention: t`Intro Label - Learning intentions`,\n success: t`Intro Label - Here's what success on this challenge means`,\n questionSubHeading: t`Intro Label - Question Sub Heading`,\n diagnosticGoal: (maximumAttemptExceeded: boolean) => {\n return maximumAttemptExceeded ?\n t`let’s dive back in!`\n : t`try these 10 questions to see if you remember the skills you need for this unit.`;\n }\n };\n const labelTxt = {\n coins: t`Coins`,\n points: t`Points`,\n collectCoinsHeading: t`Woohoo, let's collect some coins!`,\n correct: t`Validation label - Correct`,\n correctAnswerHeader: t`Correct Answer Header Label - Here's the correct answer`,\n readAloud: t`Read aloud`,\n summit: t`Progress Label - Summit`,\n attempt: (value: number) => t({\n id: 'Attempt {value}',\n /* eslint-disable @typescript-eslint/naming-convention */\n message: plural(value, {\n 1: '1st attempt',\n 2: '2nd attempt',\n 3: '3rd attempt',\n other: '#th attempt'\n })\n /* eslint-enable @typescript-eslint/naming-convention */\n })\n };\n const praiseStatement = (score: number, name?: string) => {\n if (score <= SCORE_GROUPS.four) {\n return [\n t({\n id: 'Praise Statement 4 0',\n message: `Nice try! Keep working on it, ${name}`\n })\n ];\n } else if (score <= SCORE_GROUPS.six) {\n return [\n t({\n id: 'Praise Statement 6 0',\n message: `Good work, ${name}!`\n }),\n t({\n id: 'Praise Statement 6 1',\n message: `Nice work, ${name}!`\n })\n ];\n } else if (score <= SCORE_GROUPS.eight) {\n return [\n t({\n id: 'Praise Statement 8 0',\n message: `Well done, ${name}!`\n }),\n t({\n id: 'Praise Statement 8 1',\n message: `Great job, ${name}!`\n })\n ];\n } else if (score === SCORE_GROUPS.nine) {\n return [\n t({\n id: 'Praise Statement 9 0',\n message: `Terrific work, ${name}!`\n }),\n t({\n id: 'Praise Statement 9 1',\n message: `Excellent work, ${name}!`\n })\n ];\n } else if (score === SCORE_GROUPS.ten) {\n return [\n t({\n id: 'Praise Statement 10 0',\n message: `You rock, ${name}!`\n }),\n t({\n id: 'Praise Statement 10 1',\n message: `Superb work, ${name}!`\n }),\n t({\n id: 'Praise Statement 10 2',\n message: `Perfect score, ${name}!`\n }),\n t({\n id: 'Praise Statement 10 3',\n message: `Super result, ${name}!`\n }),\n t({\n id: 'Praise Statement 10 4',\n message: `Outstanding result, ${name}!`\n })\n ];\n }\n\n return [];\n };\n const praiseFeedback2 = (score: number) => {\n if (score === SCORE_GROUPS.ten) {\n return t({\n id: 'Praise Feedback 2nd 10',\n message: `You scored 100% across ${progressTxt[0]}, ${progressTxt[1]}, and ${progressTxt[2]}.`\n });\n }\n\n return '';\n };\n const praiseFeedback3 = (score: number) => {\n if (score <= SCORE_GROUPS.four) {\n return t({\n id: 'Praise Feedback 3rd 4',\n message: 'Watch the refresher video and then try again.'\n });\n } else if (score === SCORE_GROUPS.ten) {\n return t({\n id: 'Praise Feedback 3rd 10',\n message: 'You have achieved all the success criteria!'\n });\n }\n\n return '';\n };\n const summaryTxt = {\n praiseStatement,\n score: t`Summary Label - Score`,\n overallRating: t`Summary Label - Overall rating`,\n starRatings: t`Summary Label - Star ratings are based on the overall stars earned.`,\n stars: t`Summary Label - Stars`,\n praiseFeedback2,\n praiseFeedback3,\n feedbackByStrength: [\n t`Summary Label - Focus`,\n t`Summary Label - Good`,\n t`Summary Label - Strong`\n ]\n };\n const exceededAttemptsFinishScreenTxt = {\n title: t({\n id: 'ExceededAttemptsFinishScreen - title',\n message: 'You’ve earned all the points you can for this set.'\n }),\n description: t({\n id: 'ExceededAttemptsFinishScreen - description',\n message: 'Your highest score will always be retained.'\n })\n };\n /* istanbul ignore next */\n const diagnosticsPraises = (score: number) => {\n switch (score) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n return t({\n id: 'Diagnostics Praise Statement 1 - 4',\n message: 'Nice try'\n });\n case 5:\n case 6:\n return t({\n id: 'Diagnostics Praise Statement 5 - 6',\n message: 'Good work'\n });\n case 7:\n case 8:\n return t({\n id: 'Diagnostics Praise Statement 7 - 8',\n message: 'Well done'\n });\n case 9:\n return t({\n id: 'Diagnostics Praise Statement 9',\n message: 'Terrific work'\n });\n case 10:\n return t({\n id: 'Diagnostics Praise Statement 10',\n message: 'Super result'\n });\n default:\n break;\n }\n };\n const scoreStatement = (totalCorrect: number, totalQuestions: number) => t({\n id: 'Diagnostics Summary - Score Statement',\n message: `${totalCorrect} out of ${totalQuestions}`\n });\n const diagnosticsSummaryTxt = {\n diagnosticsPraises,\n youScored: t`Diagnostics Summary - You scored`,\n scoreStatement,\n prompt: t`Diagnostics Summary - Prompt`,\n scoreRetention: t`Diagnostics Summary - Score Retention`,\n scoreRetentionAfterMaximumAttempt: t`Diagnostics Summary - Score Retention After Maximum Attempt`,\n noPointsEarn: t`Diagnostics Summary - You’ve earned all the points you can for this set.`\n };\n const errorTxt = { errorMessage: t`Uh-oh! Something doesn't add up.` };\n const noInternetTxt = {\n header: t`No internet connection`,\n content1: t`Connection lost,`,\n content2: t`we’re trying to reconnect you.`\n };\n const sessionTimeoutTxt = {\n header: t`Have you finished?`,\n content1: t`Your Mathletics account has been inactive.`,\n content2: t`For security reasons, we have signed you out. If you would like to sign in again, just click below.`\n };\n const workedSolutionTxt = {\n solution: (num: number) => t`Solution ${num}`,\n signPosts: {\n think: t`Signpost - Think`,\n plan: t`Signpost - Plan`,\n do: t`Signpost - Do`,\n answer: t`Signpost - Answer`\n }\n };\n const feedbackTxt = {\n heading: t`How well do you understand`,\n feedback: {\n /* eslint-disable @typescript-eslint/naming-convention */\n 'I’m so lost': t`I’m so lost`,\n 'Not great': t`Not great`,\n 'I’m starting to get it': t`I’m starting to get it`,\n 'I’m good': t`I’m good`,\n 'I could teach it!': t`I could teach it!`\n /* eslint-enable @typescript-eslint/naming-convention */\n }\n };\n const qtcRendererTxt = { corruptedData: t`Corrupted data!` };\n const exitWithoutCompleting = {\n para1: t`Ready to exit?`,\n para2: t`We’ll save your progress and you can complete the rest of this question set later.`,\n yes: t`Yes`,\n no: t`No`\n };\n const fluencyFailTxt = {\n para1a: t`Take a breath and dive back in. You need to get at least 2 answers correct in this`,\n para1b: t`section before moving on.`,\n para2: t`Watch the concept refresh video and try again.`\n };\n const questionComponentsLibraryTxt = {\n video: t`Video`,\n rotateMsgLabel: t`Rotate your screen to view the question more easily`,\n rotateImageAltLabel: t`Rotate device to landscape`\n };\n const previewTxt = { question: t`question` };\n const zoomOut = {\n heading: t`Does everything look too big?`,\n content: [\n t`Press`,\n t`Ctrl/Command`,\n t`and`,\n t`-`,\n t`to`,\n t`zoom out`,\n t`until the page fits your screen.`\n ]\n };\n const unitPracticeTest= {\n score: t`You scored`,\n accuracy: t`Accuracy`,\n improveScoreTitle: t`Do you want to improve your score?`,\n improveScoreText: t`If you do, your best score will always be retained.`,\n questionSummary: t`Question Summary`,\n retainScoreHeading: t`You have earned all the points you can for this set`,\n retainScoreText: t`Your highest score will always be retained.`\n };\n\n return {\n progressTxt,\n buttonTxt,\n errorTxt,\n introTxt,\n feedbackTxt,\n transToScreenTxt,\n labelTxt,\n summaryTxt,\n exceededAttemptsFinishScreenTxt,\n diagnosticsSummaryTxt,\n messageBoxTxt,\n diagnosticIntroTxt,\n noInternetTxt,\n workedSolutionTxt,\n qtcRendererTxt,\n exitWithoutCompleting,\n fluencyFailTxt,\n questionComponentsLibraryTxt,\n previewTxt,\n zoomOut,\n unitPracticeTest,\n sessionTimeoutTxt\n };\n};\n","import { useState } from 'react';\n\nimport { ExitType } from '../helpers/enums';\nimport { getQueryParam } from '../helpers/utils';\nimport { Resources } from '../resources/resources';\n\nexport const useExitApp = () => {\n const [exiting, setExiting] = useState(false);\n const redirect = () => {\n const backUrl = getQueryParam('backUrl');\n\n setExiting(true);\n\n if (backUrl) {\n window.location.href = backUrl;\n } else if (document.referrer == '') {\n location.reload();\n } else {\n window.close();\n }\n };\n const exitApp = async (questionSetType?: number, exitType?: number) => {\n const questionSetId = getQueryParam('questionSetId') || '';\n const assignmentId = getQueryParam('assignmentId');\n\n try {\n setExiting(true);\n const response = await Resources.exitQuestionSet?.post().withBody({\n questionSetId,\n assignmentId: assignmentId != null ? parseInt(assignmentId) : 0,\n questionSetTypeId: questionSetType,\n progressType: exitType ?? ExitType.normalExit\n }).send();\n\n if (response.status > 399) {\n setExiting(false);\n }\n } catch (error) {\n setExiting(false);\n console.log(error);\n }\n\n redirect();\n };\n\n return {\n exiting,\n exitApp,\n redirect\n };\n};\n","import {\n ModalBody, ModalContent, type ModalContentProps\n} from '@chakra-ui/react';\nimport React, { PropsWithChildren } from 'react';\n\ntype Props =\n & PropsWithChildren\n & ModalContentProps;\n\nexport function ModalContentContainer ({\n children, ...restProps\n}: Props) {\n return (\n \n \n {children}\n \n \n );\n}\n","import {\n Modal, ModalOverlay, type ModalProps\n} from '@chakra-ui/react';\nimport React, { PropsWithChildren } from 'react';\n\nimport { ModalContentContainer } from './modal-container';\n\ntype Props =\n & PropsWithChildren\n // Make properties optional on base type\n & Omit\n & {\n onClose: ModalProps['onClose']\n isOpen: boolean\n};\n\nexport function ModalLayout ({\n children, ...restProps\n}: Props) {\n return (\n \n \n\n \n {children}\n \n \n );\n}\n","export default \"https://cdn.questicon.mathletics.com/assets/images/Error-e05041220e326c3236596d44780e22e8.svg\";","import {\n Button,\n Flex,\n VStack,\n Text,\n Image\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { lokalisation } from '../../../helpers/lokalisation';\nimport { useExitApp } from '../../../hooks/use-exit-app';\nimport { ModalLayout } from '../modal-layout';\nimport InternalErrorImage from './assets/Error.svg';\nimport { InternalErrorModalProps } from './internal-error.types';\n\nconst InternalErrorModal = ({\n isOpen, onClose\n}: InternalErrorModalProps) => {\n const { redirect } = useExitApp();\n const onExit = () => {\n redirect();\n };\n const {\n buttonTxt, errorTxt\n } = lokalisation();\n\n return (\n \n \n \n {'Error\n \n\n \n \n \n {errorTxt.errorMessage}\n \n \n \n {buttonTxt.home}\n \n \n \n \n );\n};\n\nexport default InternalErrorModal;\n","import { useDisclosure } from '@chakra-ui/react';\nimport React, { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../app/store/store.types';\nimport { ServerErrorType } from '../../helpers/enums';\nimport { useServerErrorAggregator } from '../../hooks/use-server-error-aggregator';\nimport InternalErrorModal from '../modals/internal-error/internal-error';\n\nexport const AppError = () => {\n const { errorType } = useServerErrorAggregator();\n const activityState = useSelector(state => state.activityState);\n const { isOffline } = activityState;\n const {\n isOpen, onClose, onOpen\n } = useDisclosure();\n const chakraModalProps = {\n isOpen,\n onClose\n };\n\n useEffect(() => {\n if (errorType === ServerErrorType.other && !isOffline) {\n onOpen();\n } else {\n onClose();\n }\n if (isOffline) {\n onClose();\n }\n }, [onOpen, onClose, errorType, isOffline]);\n\n return ;\n};\n","export default \"https://cdn.questicon.mathletics.com/assets/audio/allStarSpin-6a7f9d24918733f644e3c00b0b43787b.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/click-3dc69016df32b81c636def29b021ec48.mp3\";","/* istanbul ignore file */\nimport {\n Howl, Howler\n} from 'howler';\nimport React, {\n type PropsWithChildren, createContext, useContext, useMemo\n} from 'react';\n\nimport allStarsSpinFile from '../../../../assets/audio/allStarSpin.mp3';\nimport completionAYR from '../../../../assets/audio/AYR_Completion.mp3';\nimport beforeCollectingCoinsFile from '../../../../assets/audio/beforeCollectingCoins.mp3';\nimport clickFile from '../../../../assets/audio/click.mp3';\nimport collectCoinsFile from '../../../../assets/audio/collectCoins.mp3';\nimport congratulationsFile from '../../../../assets/audio/congratulations.mp3';\nimport correct1StarFile from '../../../../assets/audio/correct1Star.mp3';\nimport correct2StarFile from '../../../../assets/audio/correct2Star.mp3';\nimport correct3StarFile from '../../../../assets/audio/correct3Star.mp3';\nimport correctAnswerScreenFile from '../../../../assets/audio/correctAnswerScreen.mp3';\nimport correctSoundFile from '../../../../assets/audio/correctSound.mp3';\nimport inCorrectSoundFile from '../../../../assets/audio/inCorrectSound.mp3';\nimport scoreResults1StarFile from '../../../../assets/audio/scoreResults1Star.mp3';\nimport scoreResults2StarFile from '../../../../assets/audio/scoreResults2Star.mp3';\nimport scoreResults3StarFile from '../../../../assets/audio/scoreResults3Star.mp3';\nimport selfAssesmentEmojisFile_1 from '../../../../assets/audio/selfAssesmentEmojis_1.mp3';\nimport selfAssesmentEmojisFile_2 from '../../../../assets/audio/selfAssesmentEmojis_2.mp3';\nimport selfAssesmentEmojisFile_3 from '../../../../assets/audio/selfAssesmentEmojis_3.mp3';\nimport selfAssesmentEmojisFile_4 from '../../../../assets/audio/selfAssesmentEmojis_4.mp3';\nimport selfAssesmentEmojisFile_5 from '../../../../assets/audio/selfAssesmentEmojis_5.mp3';\nimport transitionScreenLoad from '../../../../assets/audio/transitionScreens.mp3';\nimport completionUPT from '../../../../assets/audio/UPT_Completion.mp3';\n\ntype AudioEffectsContextValue = {\n playCongratulations: (num: number) => void\n playClick: () => void\n correctAnswerScreen: Howl\n beforeCollectingCoins: Howl\n playCorrectStarsAudio: (num: number) => void\n inCorrectSound: Howl\n correctSound: Howl\n playAllStarsSpin: (num: number) => void\n playClickWithCollectCoins: () => void\n playTransitionScreenLoad: () => void\n playSelfAssesmentEmojisAudio: (feedbackType: number) => void\n playCompletionUPT: () => void\n playCompletionAYR: () => void\n};\nconst Context = createContext(null as never);\n\nexport function AudioEffectsProvider ({ children }: PropsWithChildren) {\n //Change global volume.\n Howler.volume(0.5);\n const allStarsSpin = useMemo(() => new Howl({\n src: [allStarsSpinFile],\n preload: true,\n html5: true\n }), []);\n const allStarsSpinClick = useMemo(() => new Howl({\n src: [clickFile],\n onend: () => allStarsSpin.play(),\n preload: true,\n html5: true\n }), [allStarsSpin]);\n const correctSound = useMemo(() => new Howl({\n src: [correctSoundFile],\n preload: true,\n html5: true\n }), []);\n const correctAnswerScreen = useMemo(() => new Howl({\n src: [correctAnswerScreenFile],\n preload: true,\n html5: true\n }), []);\n const inCorrectSound = useMemo(() => new Howl({\n src: [inCorrectSoundFile],\n preload: true,\n html5: true\n }), []);\n const collectCoins = useMemo(() => new Howl({\n src: [collectCoinsFile],\n preload: true,\n html5: true\n }), []);\n const collectCoinsClick = useMemo(() => new Howl({\n src: [clickFile],\n onend: () => collectCoins.play(),\n preload: true,\n html5: true\n }), [collectCoins]);\n const correct1Star = useMemo(() => new Howl({\n src: [correct1StarFile],\n preload: true,\n html5: true\n }), []);\n const correct2Star = useMemo(() => new Howl({\n src: [correct2StarFile],\n preload: true,\n html5: true\n }), []);\n const correct3Star = useMemo(() => new Howl({\n src: [correct3StarFile],\n preload: true,\n html5: true\n }), []);\n const scoreResults1Star = useMemo(() => new Howl({\n src: [scoreResults1StarFile],\n preload: true,\n html5: true\n }), []);\n const scoreResults2Star = useMemo(() => new Howl({\n src: [scoreResults2StarFile],\n preload: true,\n html5: true\n }), []);\n const scoreResults3Star = useMemo(() => new Howl({\n src: [scoreResults3StarFile],\n preload: true,\n html5: true\n }), []);\n const click = useMemo(() => new Howl({\n src: [clickFile],\n preload: true,\n html5: true\n }), []);\n const beforeCollectingCoins= useMemo(() => new Howl({\n src: [beforeCollectingCoinsFile],\n preload: true,\n html5: true\n }), []);\n const playCorrectStarsAudio = (num: number) => {\n const correctAudios: Howl[] = [correct1Star, correct2Star, correct3Star];\n const audio: Howl = correctAudios[num - 1];\n\n audio.play();\n };\n const playCorrectScoreResultsAudio = (num: number) => {\n const correctAudios: Howl[] = [scoreResults1Star, scoreResults2Star, scoreResults3Star];\n const audio: Howl = correctAudios[num - 1];\n\n setTimeout(() => {\n audio.play();\n }, 400);\n };\n const selfAssesmentEmojis1 = useMemo(() => new Howl({\n src: [selfAssesmentEmojisFile_1],\n preload: true,\n html5: true\n }), []);\n const selfAssesmentEmojis2 = useMemo(() => new Howl({\n src: [selfAssesmentEmojisFile_2],\n preload: true,\n html5: true\n }), []);\n const selfAssesmentEmojis3 = useMemo(() => new Howl({\n src: [selfAssesmentEmojisFile_3],\n preload: true,\n html5: true\n }), []);\n const selfAssesmentEmojis4 = useMemo(() => new Howl({\n src: [selfAssesmentEmojisFile_4],\n preload: true,\n html5: true\n }), []);\n const selfAssesmentEmojis5 = useMemo(() => new Howl({\n src: [selfAssesmentEmojisFile_5],\n preload: true,\n html5: true\n }), []);\n const playSelfAssesmentEmojisAudio = (feedbackType: number) => {\n const selfAssesmentEmojisAudios: Howl[] = [\n selfAssesmentEmojis1,\n selfAssesmentEmojis2,\n selfAssesmentEmojis3,\n selfAssesmentEmojis4,\n selfAssesmentEmojis5\n ];\n const audio: Howl = selfAssesmentEmojisAudios[feedbackType];\n\n audio.play();\n };\n const playClickWithCollectCoins = () => {\n collectCoinsClick.play();\n };\n const congratulations = useMemo(() => new Howl({\n src: [congratulationsFile],\n preload: true,\n html5: true\n }), []);\n const playClick = () => {\n click.play();\n };\n const playCongratulations = (num: number) => {\n congratulations.on('end', () => playCorrectScoreResultsAudio(num));\n congratulations.play();\n };\n const playAllStarsSpin = (num: number) => {\n if(num > 0) {\n allStarsSpinClick.play();\n }\n };\n const transitionScreen = useMemo(() => new Howl({\n src: [transitionScreenLoad],\n preload: true,\n html5: true\n }), []);\n const playTransitionScreenLoad = () => {\n transitionScreen.play();\n };\n const completionUPTPage = useMemo(() => new Howl({\n src: [completionUPT],\n preload: true,\n html5: true\n }), []);\n const playCompletionUPT = () => {\n completionUPTPage.play();\n };\n const completionAYRPage = useMemo(() => new Howl({\n src: [completionAYR],\n preload: true,\n html5: true\n }), []);\n const playCompletionAYR = () => {\n completionAYRPage.play();\n };\n const value: AudioEffectsContextValue = {\n correctAnswerScreen,\n beforeCollectingCoins,\n playClick,\n playCorrectStarsAudio,\n correctSound,\n inCorrectSound,\n playCongratulations,\n playAllStarsSpin,\n playClickWithCollectCoins,\n playTransitionScreenLoad,\n playSelfAssesmentEmojisAudio,\n playCompletionUPT,\n playCompletionAYR\n };\n\n return (\n \n {children}\n \n );\n}\n\nexport function useAudioEffectsContext () {\n return useContext(Context);\n}\n\n","export default \"https://cdn.questicon.mathletics.com/assets/audio/correctSound-02867099226e1fbdf6651f9b12b38630.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/correctAnswerScreen-809aca559021c72b6b7c27d6140c95eb.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/inCorrectSound-e29598bb6d8feaff48ec3b5f5bed64b7.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/collectCoins-a1c5e82cc8c9d8f371cf8a158935ad00.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/correct1Star-9d1417c1584aece0d5dfcd9649d14372.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/correct2Star-db19ce5a2c80681812676df89df72a7d.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/correct3Star-c7186a751cae36aaf5b86fd8832768a1.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/scoreResults1Star-e2d844c88dec7dd6fa1cdc5e4105caec.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/scoreResults2Star-cbd85d1a7925f67774ebb85df22d3568.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/scoreResults3Star-ab9e4ad937ee6fadaab535be8c8a5682.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/beforeCollectingCoins-8f4234742989b4756da0330598c44e49.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/selfAssesmentEmojis_1-71a2e5fb41535aa6eba592723f281216.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/selfAssesmentEmojis_2-adffd1bdf145d6b8020ccd277cae15eb.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/selfAssesmentEmojis_3-549b011be7f6b4b1ef3319a3fe44f7c5.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/selfAssesmentEmojis_4-f7c0d6ffe35dac1c20de7b4af15242ec.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/selfAssesmentEmojis_5-9ecc1f1b8bf596efde464ef94c024280.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/congratulations-b83d0bd62fb3c5e3c9821497ddefd329.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/transitionScreens-f2760bea79c2b5efe6978e2da7ff3d38.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/UPT_Completion-4c8580e6943a7a79957b9d551457ce3f.mp3\";","export default \"https://cdn.questicon.mathletics.com/assets/audio/AYR_Completion-a7ba0f4f21725145a11ff86cb296dd44.mp3\";","import { Box } from '@chakra-ui/react';\nimport React, { useState } from 'react';\n\nimport packageJson from '../../../package.json';\n\nexport const BuildNumber = () => {\n const [showMore, setShowMore] = useState(false);\n\n return (\n setShowMore(!showMore)}\n >\n {window._env_.BUILD_NUMBER === '' ? 'local' : window._env_.BUILD_NUMBER}\n {\n showMore && (\n <>\n {' | '}\n {packageJson.dependencies['@3plearning/question-components-library']}\n \n )\n }\n \n );\n};\n","export default \"https://cdn.questicon.mathletics.com/assets/images/activity-guide-270ff654c740c43c29234825b7cc7b2e.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/close-icon-25cfef420129801d3984981ea4d56823.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Star-grey-ec4f0859d0f34adb253b0a769c682975.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Star-5c1ea9c9606fc6d94347ed074366ee18.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/summary-mountain-9f86a890d40f06447eba78ddd81f2281.svg\";","import activityGuideSrc from '../../../assets/images/activity-guide.svg';\nimport audioIconSrc from '../../../assets/images/audioIcon.svg';\nimport chevronRight from '../../../assets/images/chevron-right.svg';\nimport closeIcon from '../../../assets/images/close-icon.svg';\nimport cloudBumpySrc from '../../../assets/images/CloudBumpy.png';\nimport cloudNarrowSrc from '../../../assets/images/CloudSoftNarrow.png';\nimport conceptRefreshIcon from '../../../assets/images/concept-refresh.svg';\nimport attemptCrossSrc from '../../../assets/images/cross.svg';\nimport fluencyFailFluffy from '../../../assets/images/fluency-fail-fluffy.png';\nimport fluencyFailMountain from '../../../assets/images/fluency-fail-mountain.png';\nimport fluencyFailOcean from '../../../assets/images/fluency-fail-ocean.png';\nimport leftFluencySrc from '../../../assets/images/Fluency-L.png';\nimport rightFluencySrc from '../../../assets/images/Fluency-R.png';\nimport guideSrc from '../../../assets/images/Guide.png';\nimport tickSrc from '../../../assets/images/icon_tick.svg';\nimport infoIconSrc from '../../../assets/images/info-icon.svg';\nimport keypadIcon from '../../../assets/images/keypad.svg';\nimport rightFgMountainSrc from '../../../assets/images/kraken_mountain.png';\nimport mathLogoSrc from '../../../assets/images/logo_mathletics.svg';\nimport modalCancelIconSrc from '../../../assets/images/modal-cancel-icon.svg';\nimport progressMountainSrc from '../../../assets/images/mountain.svg';\nimport dragIcon from '../../../assets/images/Move.svg';\nimport pinIconSrc from '../../../assets/images/pin-icon.svg';\nimport leftProblemSolvingSrc from '../../../assets/images/Problem-Solving_L.png';\nimport rightProblemSolvingSrc from '../../../assets/images/Problem-Solving_R.png';\nimport progressPathSrc from '../../../assets/images/progress-path.svg';\nimport leftReasoningSrc from '../../../assets/images/Reasoning-L.png';\nimport rightReasoningSrc from '../../../assets/images/Reasoning-R.png';\nimport sessionTimeout from '../../../assets/images/session-timeout.svg';\nimport starGreySrc from '../../../assets/images/Star-grey.svg';\nimport starSrc from '../../../assets/images/Star.svg';\nimport SummaryMountain from '../../../assets/images/summary-mountain.svg';\nimport summitMountainSrc from '../../../assets/images/SUMMIT-FG.svg';\nimport swipeIconSrc from '../../../assets/images/swipe-icon.svg';\nimport attemptTickSrc from '../../../assets/images/tick.svg';\nimport leftMountainSrc from '../../../assets/images/whale_mountain.png';\nimport workedSolutionIcon from '../../../assets/images/worked-solution.svg';\n\nexport type AppImageTypes = keyof typeof AppImages;\n\nexport const AppImages = {\n activityGuide: activityGuideSrc,\n conceptRefreshIcon,\n progressPath: progressPathSrc,\n pinIcon: pinIconSrc,\n mathLogo: mathLogoSrc,\n progressMountain: progressMountainSrc,\n swipeIcon: swipeIconSrc,\n star: starSrc,\n starGrey: starGreySrc,\n tick: tickSrc,\n leftMountain: leftMountainSrc,\n rightFgMountain: rightFgMountainSrc,\n guide: guideSrc,\n modalCancelIcon: modalCancelIconSrc,\n attemptCross: attemptCrossSrc,\n attemptTick: attemptTickSrc,\n audioIcon: audioIconSrc,\n leftFluency: leftFluencySrc,\n rightFluency: rightFluencySrc,\n leftReasoning: leftReasoningSrc,\n rightReasoning: rightReasoningSrc,\n leftProblemSolving: leftProblemSolvingSrc,\n rightProblemSolving: rightProblemSolvingSrc,\n cloudBumpy: cloudBumpySrc,\n cloudNarrow: cloudNarrowSrc,\n summitMountain: summitMountainSrc,\n infoIcon: infoIconSrc,\n keypadIcon,\n workedSolutionIcon,\n closeIcon,\n dragIcon,\n SummaryMountain,\n chevronRight,\n fluencyFailFluffy,\n fluencyFailMountain,\n fluencyFailOcean,\n sessionTimeout\n};\n","export default \"https://cdn.questicon.mathletics.com/assets/images/concept-refresh-7676aa865677d27cf3398fcf2274debf.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/progress-path-214e44e549bffed5aa1c7d26928e28c2.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/pin-icon-fb9fdd08dab29f354849600916a02eaa.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/logo_mathletics-5b8ddfbac70e2004f0140295b9baf881.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/mountain-19122c4f955fd76ed97397a6c800b839.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/swipe-icon-72bba4682f7888c181823aa7cb5fa85a.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/icon_tick-ecf92c5ba92b11ac0a0283aae0e31053.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/whale_mountain-3c2c3a04eed34fd47a5468b75934fbd5.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/kraken_mountain-5bb71aa228e088b7f36b9e2bf7f696f6.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Guide-74114953406a07a8364ebcbce83e4b23.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/modal-cancel-icon-cdff47cc14b20d6f7cd3a17b5afe0263.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/cross-8cf2697c6581d2904a7761ed8a7e52f5.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/tick-91107868480cfd3fe0fe0647e20caea2.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/audioIcon-8b35f4721bfa257c7b459106447fc360.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Fluency-L-ed7a5f81156616686433110b57bb50da.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Fluency-R-9d0be9640041bf28a4b5fcb18a660aa9.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Reasoning-L-2f1eac1b8f0e7904241fdaf80772dbee.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Reasoning-R-243a4292a392b9681ffffd063d34c694.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Problem-Solving_L-1cf711844d0558dc05630c19d492acf9.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Problem-Solving_R-024ee0b33dd74bee40f854fbb1a98044.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/CloudBumpy-7a5b0530cd073ed313e57f62d29f87d4.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/CloudSoftNarrow-77000267f80761b1eb8ce425f269596d.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/SUMMIT-FG-7e3ccce0deb834dcee78d96977fbbdec.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/info-icon-410174a013f90a154c45672aa52f64c3.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/keypad-5da137d6b31ba3cd35dc08909ed7309d.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/worked-solution-76d4f2c4146e03c06d20eeccc353daf3.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Move-fb2662766da14007a32ce0ee782e692f.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/chevron-right-25b392abe78cbee91475c97023f68469.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/fluency-fail-fluffy-09d168625313f2a7697777aeaecfc6e7.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/fluency-fail-mountain-0d9a72792bc10f75788636afec86fc52.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/fluency-fail-ocean-6ecb5b8576e6f9862e2bef4aff1c6685.png\";","export default \"https://cdn.questicon.mathletics.com/assets/images/session-timeout-0c9bba14aa3c0caf11c700415da20c4f.svg\";","/* istanbul ignore file */\n// https://github.com/gilbarbara/react-inlinesvg/issues/145\n\nimport React from 'react';\nimport InlineSVG, { Props as InlineSVGProps } from 'react-inlinesvg';\n\nimport { AppImages } from './app-image-types';\n\nexport type AppIconTypeObject = typeof AppImages;\n\nexport type AppIconTypeKeys = keyof AppIconTypeObject;\n\ntype AppImageBaseProps = {\n iconType: AppIconTypeKeys\n ['aria-label']?: string\n};\n\ntype SVGProps =\n & { imageType: 'svg' }\n & AppImageBaseProps;\n\ntype ImgProps =\n & { imageType: 'img' }\n & AppImageBaseProps;\n\nexport type AppImageProps =\n | ImgProps & Omit, HTMLImageElement>, 'src'>\n | SVGProps & Omit;\n\nconst AppImage = ({\n iconType, imageType, ...restProps\n}: AppImageProps) => {\n const src = AppImages?.[iconType];\n\n if (!src) {\n console.error('Unknown icon', iconType);\n\n return null;\n } else if (imageType === 'svg') {\n return (\n \n );\n } else {\n return (\n \n );\n }\n};\n\nexport default AppImage;\n","import {\n useMediaQuery,\n useTheme\n} from '@chakra-ui/react';\nimport {\n isMobile,\n isTablet\n} from 'react-device-detect';\nimport useWindowOrientation from 'use-window-orientation';\n\nexport const useWithMobile = () => {\n const theme = useTheme();\n const [breakMobile] = useMediaQuery(`(max-width: ${theme.breakpoints.md})`);\n const { landscape } = useWindowOrientation();\n\n return {\n isMobile,\n breakMobile,\n landscape,\n isTablet\n };\n};\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport {\n useState, useEffect\n} from 'react';\n\nimport { useWithMobile } from '../../../hooks/use-with-mobile';\n\n/*\n https://usehooks.com/useWindowSize/\n*/\nexport function useWindowSize (): ({ viewWidth: number; viewHeight: number }) {\n const [windowSize, setWindowSize] = useState({\n viewWidth: 0,\n viewHeight: 0\n });\n\n useEffect(() => {\n function handleResize () {\n setWindowSize({\n viewWidth: window.innerWidth,\n viewHeight: window.innerHeight\n });\n }\n\n window.addEventListener('resize', handleResize);\n\n handleResize();\n\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return windowSize;\n}\n\nexport const useModalResponsiveStyles = () => {\n const {\n isMobile,\n isTablet,\n landscape\n } = useWithMobile();\n const contentResponsiveStyles = () => {\n let styles = null;\n\n if (isMobile && !isTablet) {\n if (landscape) {\n styles = {\n fontSize: '20px',\n width: '54%'\n };\n } else {\n styles = {\n fontSize: '18px',\n marginTop: '80px',\n width: '100%'\n };\n }\n }\n\n return styles;\n };\n const bkgdResponsiveStyles = () => {\n let styles = null;\n\n if ((isMobile || (landscape && isMobile)) && !isTablet) {\n styles = { display: 'none' };\n }\n\n return styles;\n };\n const fluffyResponsiveStyles = () => {\n let styles = null;\n\n if (isMobile && !isTablet) {\n if (landscape) {\n styles = {\n top: '32px',\n left: '13px',\n width: 'unset',\n maxWidth: '33%'\n };\n } else {\n styles = {\n top: '-62px',\n left: '-100px',\n width: 'unset',\n transform: 'scale(0.5)'\n };\n }\n }\n\n return styles;\n };\n const modalResponsiveStyles = () => {\n let styles = null;\n\n if (isMobile && !landscape && !isTablet) {\n styles = { width: '500px !important' };\n }\n\n return styles;\n };\n const buttonResponsiveStyles = () => {\n let styles = null;\n\n if ((isMobile || (landscape && isMobile)) && !isTablet) {\n styles = { fontSize: '16px' };\n }\n\n return styles;\n };\n\n return {\n modalResponsiveStyles,\n fluffyResponsiveStyles,\n contentResponsiveStyles,\n bkgdResponsiveStyles,\n buttonResponsiveStyles\n };\n};\n","import styled from '@emotion/styled';\n\nexport const Bkgd = styled.div`\n width: 100%;\n position: absolute;\n left: 0;\n bottom: 0;\n z-index: 0; \n .mountain {\n position: relative;\n z-index: 100;\n }\n .ocean {\n position: absolute;\n z-index: 10;\n bottom: 0;\n }\n`;\n","import { Box } from '@chakra-ui/react';\nimport React from 'react';\n\nimport AppImage from '../../../components/app-image/app-image';\nimport { useModalResponsiveStyles } from './fluency-fail-modal.hooks';\nimport { Bkgd } from './fluency-fail-modal.styled';\n\nexport const FluencyFailModalBkgd = () => {\n const { bkgdResponsiveStyles } = useModalResponsiveStyles();\n\n return (\n \n \n \n \n );\n};\n","import styled from '@emotion/styled';\n\nexport const TempSpinnerWrapper = styled.div`\n position: fixed;\n width: 100vw;\n height: 100%;\n z-index: 100;\n display: flex;\n justify-content: center;\n align-items: center;\n\n .lds-ellipsis {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n }\n .lds-ellipsis div {\n position: absolute;\n top: 33px;\n width: 13px;\n height: 13px;\n border-radius: 50%;\n background: #fff;\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n }\n .lds-ellipsis div:nth-of-type(1) {\n left: 8px;\n animation: lds-ellipsis1 0.6s infinite;\n }\n .lds-ellipsis div:nth-of-type(2) {\n left: 8px;\n animation: lds-ellipsis2 0.6s infinite;\n }\n .lds-ellipsis div:nth-of-type(3) {\n left: 32px;\n animation: lds-ellipsis2 0.6s infinite;\n }\n .lds-ellipsis div:nth-of-type(4) {\n left: 56px;\n animation: lds-ellipsis3 0.6s infinite;\n }\n @keyframes lds-ellipsis1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n }\n @keyframes lds-ellipsis3 {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n }\n @keyframes lds-ellipsis2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n }\n`;\n\n","export const btnStyle = {\n px: {\n tabletLandscape: '32px',\n md: '16px'\n },\n py: {\n tabletLandscape: '8px',\n md: '10px'\n },\n w: {\n tabletLandscape: '220px',\n md: '200px',\n base: '156px'\n },\n h: {\n tabletLandscape: '62px',\n base: '40px'\n },\n fontSize: {\n tabletLandscape: '20px',\n base: '16px'\n },\n fontWeight: '500'\n};\n","import {\n Box,\n HStack,\n Button,\n useTheme,\n Text\n} from '@chakra-ui/react';\nimport React, { FC } from 'react';\n\nimport { useRestartApp } from '../../../containers/fluency-fail/fluency-fail.hooks';\nimport { TempSpinnerWrapper } from '../../../containers/question-container/sub-components/temp-poc/temp-spinner.styled';\nimport { ExitType } from '../../../helpers/enums';\nimport { lokalisation } from '../../../helpers/lokalisation';\nimport { useExitApp } from '../../../hooks/use-exit-app';\nimport { useWithMobile } from '../../../hooks/use-with-mobile';\nimport { useAudioEffectsContext } from '../../audio/provider/audio-effects-provider';\nimport { btnStyle } from './fluency-fail-modal.constants';\nimport { useModalResponsiveStyles } from './fluency-fail-modal.hooks';\nimport { FluencyFailModalContentProps } from './fluency-fail-modal.types';\n\nexport const FluencyFailModalContent: FC = ({ questionSetType }) => {\n const {\n fluencyFailTxt,\n progressTxt,\n buttonTxt\n } = lokalisation();\n const {\n isMobile,\n landscape,\n isTablet\n } = useWithMobile();\n const theme = useTheme();\n const {\n contentResponsiveStyles,\n buttonResponsiveStyles\n } = useModalResponsiveStyles();\n const { playClick } = useAudioEffectsContext();\n const {\n exitApp,\n exiting\n } = useExitApp();\n const {\n restartApp,\n restarting\n } = useRestartApp();\n const handleExit = async () => {\n playClick();\n exitApp(questionSetType, ExitType.fluencyExit);\n };\n const handleStartAgain = () => {\n playClick();\n restartApp(questionSetType);\n };\n const isMobileLandscape = (isMobile && landscape) && !isTablet;\n\n return (\n \n \n \n \n \n {`${fluencyFailTxt.para1a} `}\n \n {progressTxt[0]}\n \n {` ${fluencyFailTxt.para1b}`}\n \n \n {fluencyFailTxt.para2}\n \n \n handleExit()}\n isDisabled={exiting || restarting}\n {...btnStyle}\n {...buttonResponsiveStyles()}\n >\n {exiting || buttonTxt.exit}\n {exiting && (\n \n \n
\n
\n
\n
\n
\n \n )}\n \n handleStartAgain()}\n isDisabled={exiting || restarting}\n {...btnStyle}\n {...buttonResponsiveStyles()}\n >\n {restarting || buttonTxt.startAgain}\n {restarting && (\n \n \n
\n
\n
\n
\n
\n \n )}\n \n \n \n \n \n );\n};\n","import { useState } from 'react';\n\nimport { ExitType } from '../../helpers/enums';\nimport { getQueryParam } from '../../helpers/utils';\nimport { Resources } from '../../resources/resources';\n\nexport const useRestartApp = () => {\n const [restarting, setRestarting] = useState(false);\n const restartApp = async (questionSetType?: number) => {\n const questionSetId = getQueryParam('questionSetId') || '';\n const assignmentId = getQueryParam('assignmentId');\n\n try {\n setRestarting(true);\n\n const response = await Resources.exitQuestionSet?.post().withBody({\n questionSetId,\n assignmentId: assignmentId != null ? parseInt(assignmentId) : 0,\n questionSetTypeId: questionSetType,\n progressType: ExitType.fluencyExit\n }).send();\n\n if (response.status > 399) {\n setRestarting(false);\n }\n } catch (error) {\n setRestarting(false);\n console.log(error);\n }\n\n window.location.reload();\n };\n\n return {\n restarting,\n restartApp\n };\n};\n","import {\n Modal,\n ModalOverlay,\n ModalContent,\n ModalBody,\n useTheme,\n Box\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport AppImage from '../../../components/app-image/app-image';\nimport { useWithMobile } from '../../../hooks/use-with-mobile';\nimport { FluencyFailModalBkgd } from './fluency-fail-modal-bkgd';\nimport { FluencyFailModalContent } from './fluency-fail-modal-content';\nimport { useModalResponsiveStyles } from './fluency-fail-modal.hooks';\nimport { FluencyFailModalProps } from './fluency-fail-modal.types';\n\nconst FluencyFailModal = ({\n questionSetType,\n isOpen,\n onClose\n}: FluencyFailModalProps) => {\n const theme = useTheme();\n const {\n fluffyResponsiveStyles,\n modalResponsiveStyles\n } = useModalResponsiveStyles();\n const {\n landscape,\n isMobile,\n isTablet\n } = useWithMobile();\n const isMobileLandscape = (isMobile && landscape) && !isTablet;\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default FluencyFailModal;\n","import { useDisclosure } from '@chakra-ui/react';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../app/store/store.types';\nimport { default as Modal } from '../../components/modals/fluency-fail-modal/fluency-fail-modal';\n\nconst FluencyFail = () => {\n const activityState = useSelector(state => state.activityState);\n const {\n progress, questionSetType\n } = activityState;\n const { ...chakraModalProps } = useDisclosure();\n\n return (\n \n );\n};\n\nexport default FluencyFail;\n","/* eslint-disable max-len */\nimport React from 'react';\n\nexport const NoInternetImage = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \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 \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 \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 \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 \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 \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 \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\nexport default NoInternetImage;\n","import { LoaderDots } from '@3plearning/chakra-mathletics-theme';\nimport {\n useDisclosure,\n Flex,\n VStack,\n Text\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { lokalisation } from '../../../helpers/lokalisation';\nimport { ModalLayout } from '../modal-layout';\nimport { NoInternetImage } from './no-internet-image';\nimport { ModalErrorProps } from './no-internet-modal.types';\n\nconst NoInternetModal = ({ isOpen }: ModalErrorProps) => {\n const { onClose } = useDisclosure();\n const { noInternetTxt } = lokalisation();\n\n return (\n <>\n \n \n \n \n \n\n \n \n \n {noInternetTxt.content1}\n
\n {noInternetTxt.content2}\n \n \n \n \n \n
\n \n );\n};\n\nexport default NoInternetModal;\n","import React from 'react';\nimport { useIsOnline } from 'react-use-is-online';\n\nimport NoInternetModal from '../../components/modals/no-internet-modal/no-internet-modal';\n\nconst InternetConnectivity = () => {\n // Changed the old custom image detection to a more reliable hooks\n const { isOnline } = useIsOnline();\n\n return (\n \n );\n};\n\nexport default InternetConnectivity;\n","import { ThemeProps } from '@3plearning/question-components-library';\nimport {\n Box, Hide, IconButton, Show, useTheme\n} from '@chakra-ui/react';\nimport React, {\n MouseEventHandler, TouchEventHandler, useEffect, useRef, useState,\n MouseEvent as ReactMouseEvent, TouchEvent as ReactTouchEvent, useCallback, useContext\n} from 'react';\n\nimport AppImage from '../../../../components/app-image/app-image';\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport {\n KeypadContextType, Position\n} from './activity-keypad.types';\nimport { KeypadContext } from './keypad-provider';\n\nexport const ActivityKeypad = () => {\n const {\n isKeypadBtnDisabled,\n setIsKeypadBtnDisabled,\n showKeypad,\n setShowKeypad,\n setShowKeypadBtn,\n keypadRef,\n questionBodyElement\n } = useContext(KeypadContext) as KeypadContextType;\n const keypadSpacing = 8;\n const keypadContainerRef = useRef(null);\n const [isDragging, setIsDragging] = useState(false);\n const [translatedPosition, setTranslatedPosition] = useState({\n left: 0,\n top: 0\n });\n const [referencePosition, setReferencePosition] = useState({\n left: 0,\n top: 0\n });\n const { playClick } = useAudioEffectsContext();\n const onCloseKeypad = () => {\n playClick();\n setShowKeypad(false);\n };\n const handleMouseDown: MouseEventHandler & TouchEventHandler = (event) => {\n const node = keypadContainerRef.current as HTMLElement;\n const {\n clientX, clientY\n } = (event as ReactTouchEvent).changedTouches ? (event as ReactTouchEvent).changedTouches[0] : (event as ReactMouseEvent);\n\n setReferencePosition({\n left: clientX - node?.offsetLeft,\n top: clientY - node?.offsetTop\n });\n setIsDragging(true);\n event.stopPropagation();\n event.preventDefault();\n };\n const theme: ThemeProps = useTheme();\n const positionKeypad = useCallback(() => {\n const isTabletPortrait = parseInt(theme.breakpoints.lg, 10) > window.innerWidth;\n const isMobile = parseInt(theme.breakpoints.md, 10) > window.innerWidth ||\n (parseInt(theme.breakpoints.md, 10) > window.innerHeight && window.innerWidth < parseInt(theme.breakpoints.lg, 10));\n\n if (translatedPosition.left === 0 && translatedPosition.top === 0) {\n // timeout is needed to allow the keypad to render before positioning, and allow questionBody to finish sliding up on mobile\n setTimeout(() => {\n const questionBodyPosition = questionBodyElement?.getBoundingClientRect();\n\n if (\n questionBodyPosition &&\n !(questionBodyPosition.left === 0 && questionBodyPosition.top === 0) &&\n keypadContainerRef.current\n ) {\n let initialLeft = questionBodyPosition.left + questionBodyPosition.width + keypadSpacing;\n let initialTop = questionBodyPosition.top + keypadSpacing;\n\n if (isTabletPortrait) {\n initialTop = questionBodyPosition.bottom - keypadSpacing - keypadContainerRef.current.clientHeight;\n }\n\n if (isMobile) {\n initialTop = window.innerHeight - keypadContainerRef.current.clientHeight;\n }\n\n if (initialLeft + keypadContainerRef.current.clientWidth > window.innerWidth) {\n initialLeft = window.innerWidth - keypadContainerRef.current.clientWidth;\n }\n\n keypadContainerRef.current.style.left = `${initialLeft}px`;\n keypadContainerRef.current.style.top = `${initialTop}px`;\n }\n }, isTabletPortrait ? 400 : 200);\n } else {\n if (keypadContainerRef.current) {\n const keypadHandle = keypadContainerRef.current.querySelector('.keypad-handle') as HTMLElement;\n const keypadHandleWidth = keypadHandle.clientWidth;\n const keypadHandleHeight = keypadHandle.clientHeight;\n\n let updatedLeft = translatedPosition.left;\n let updatedTop = translatedPosition.top;\n\n if (isTabletPortrait) {\n const allowedHiddenArea = keypadHandleHeight / 2;\n\n if (updatedLeft < 0) {\n updatedLeft = 0;\n } else if (updatedLeft + keypadHandleWidth > window.innerWidth) {\n updatedLeft = window.innerWidth - keypadHandleWidth;\n }\n\n if (updatedTop + allowedHiddenArea < 0) {\n updatedTop = -allowedHiddenArea;\n } else if (updatedTop + allowedHiddenArea > window.innerHeight) {\n updatedTop = window.innerHeight - allowedHiddenArea;\n }\n } else {\n const allowedHiddenArea = keypadHandleWidth / 2;\n\n if (updatedLeft + allowedHiddenArea < 0) {\n updatedLeft = -allowedHiddenArea;\n } else if (updatedLeft + allowedHiddenArea > window.innerWidth) {\n updatedLeft = window.innerWidth - allowedHiddenArea;\n }\n\n if (updatedTop < 0) {\n updatedTop = 0;\n } else if (updatedTop + keypadHandleHeight > window.innerHeight) {\n updatedTop = window.innerHeight - keypadHandleHeight;\n }\n }\n\n keypadContainerRef.current.style.left = `${updatedLeft}px`;\n keypadContainerRef.current.style.top = `${updatedTop}px`;\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [translatedPosition, isKeypadBtnDisabled, questionBodyElement, showKeypad]);\n\n useEffect(() => {\n const onWindowResize: ResizeObserverCallback = (entries) => {\n if (entries) {\n positionKeypad();\n }\n };\n const resizeObserver = new ResizeObserver(onWindowResize);\n const application = document.querySelector('.application');\n\n if (application) {\n resizeObserver.observe(application);\n }\n\n positionKeypad();\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [positionKeypad]);\n\n useEffect(() => {\n const toggleKeypadButtonDisableState = (mutationList: MutationRecord[]) => {\n for(const mutation of mutationList) {\n if (mutation.type === 'childList') {\n if (mutation.removedNodes.length) {\n setIsKeypadBtnDisabled(true);\n } else if (mutation.addedNodes.length) {\n setIsKeypadBtnDisabled(false);\n }\n }\n }\n };\n const observer = new MutationObserver(toggleKeypadButtonDisableState);\n\n if (keypadRef.current) {\n observer.observe(keypadRef.current, { childList: true });\n }\n\n return () => {\n observer.disconnect();\n };\n }, [keypadRef, setIsKeypadBtnDisabled]);\n\n useEffect(() => {\n const toggleKeypadButton = (mutationList: MutationRecord[]) => {\n for(const mutation of mutationList) {\n if (mutation) {\n setShowKeypadBtn(Boolean(questionBodyElement && questionBodyElement.querySelector('.math-inputbox')));\n positionKeypad();\n }\n }\n };\n const observer = new MutationObserver(toggleKeypadButton);\n\n if (questionBodyElement) {\n observer.observe(questionBodyElement, {\n subtree: true,\n childList: true\n });\n }\n\n return () => {\n observer.disconnect();\n };\n }, [questionBodyElement, setShowKeypadBtn, positionKeypad]);\n\n useEffect(() => {\n const handleMouseMove = (event: MouseEvent | TouchEvent) => {\n if (isDragging) {\n const {\n clientX, clientY\n } = (event as TouchEvent).changedTouches ? (event as TouchEvent).changedTouches[0] : (event as MouseEvent);\n\n if (clientX !== 0) {\n setTranslatedPosition({\n left: clientX - referencePosition.left,\n top: clientY - referencePosition.top\n });\n }\n }\n };\n const handleMouseUp: EventListener = () => {\n setIsDragging(false);\n document.removeEventListener('mouseup', handleMouseUp);\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('touchend', handleMouseUp);\n document.removeEventListener('touchcancel', handleMouseUp);\n document.removeEventListener('touchmove', handleMouseMove);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n document.addEventListener('touchend', handleMouseUp);\n document.addEventListener('touchcancel', handleMouseUp);\n document.addEventListener('touchmove', handleMouseMove);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.removeEventListener('touchend', handleMouseUp);\n document.removeEventListener('touchcancel', handleMouseUp);\n document.removeEventListener('touchmove', handleMouseMove);\n };\n }, [isDragging, referencePosition]);\n\n const keypadHiddenPostion = {\n left: -900,\n top: -900\n };\n\n return (\n event.preventDefault()}\n zIndex={'999'}\n flexDirection={{\n base: 'row',\n lg: 'column'\n }}\n backgroundColor={'white'}\n borderRadius={'20px'}\n filter={'drop-shadow(0px 12px 16px rgba(0, 25, 55, 0.16))'}\n border={'3px solid'}\n borderColor={'neutral.100'}\n ref={keypadContainerRef}\n data-testid={'keypad-container'}\n {...keypadHiddenPostion}\n >\n \n }\n tabIndex={-1}\n />\n \n }\n onClick={onCloseKeypad}\n onTouchStart={onCloseKeypad}\n tabIndex={-1}\n />\n \n \n \n \n \n }\n onClick={onCloseKeypad}\n onTouchStart={onCloseKeypad}\n tabIndex={-1}\n />\n \n \n \n );\n};\n","import React, {\n createContext, PropsWithChildren, useRef, useState\n} from 'react';\n\nimport { ActivityKeypad } from './activity-keypad';\nimport { KeypadContextType } from './activity-keypad.types';\n\nexport const KeypadContext = createContext(null);\n\nexport const KeypadProvider = ({ children }: PropsWithChildren) => {\n const [isKeypadBtnDisabled, setIsKeypadBtnDisabled] = useState(true);\n const [showKeypadBtn, setShowKeypadBtn] = useState(false);\n const [showKeypad, setShowKeypad] = useState(true);\n const keypadRef = useRef(null);\n const [questionBodyElement, setQuestionBodyElement] = useState(null);\n const questionBodyRef: KeypadContextType['questionBodyRef'] = (node) => {\n setQuestionBodyElement(node);\n };\n const keypadContextValue = {\n isKeypadBtnDisabled,\n setIsKeypadBtnDisabled,\n showKeypad,\n setShowKeypad,\n showKeypadBtn,\n setShowKeypadBtn,\n keypadRef,\n questionBodyRef,\n questionBodyElement\n };\n\n return (\n \n \n {children}\n \n );\n};\n","export const para = {\n fontSize: {\n base: '16px',\n break680: '20px'\n },\n letterSpacing: '-0.2px',\n lineHeight: '28px',\n color: 'neutral.600',\n textAlign: 'start',\n fontWeight: '400'\n};\n","import {\n useDisclosure,\n Flex,\n VStack,\n Text,\n TextProps,\n Button\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport AppImage from '../../../components/app-image/app-image';\nimport { lokalisation } from '../../../helpers/lokalisation';\nimport { ModalLayout } from '../modal-layout';\nimport { para } from './session-timeout-modal.constants';\nimport { ModalErrorProps } from './session-timeout-modal.types';\n\nconst SessionTimeoutModal = ({ isOpen }: ModalErrorProps) => {\n const { onClose } = useDisclosure();\n const {\n sessionTimeoutTxt,\n buttonTxt\n } = lokalisation();\n const signInHandler = () => {\n window.open(`${window._env_.MATHLETICS_LOGIN}`, '_self');\n };\n\n return (\n <>\n \n \n \n \n \n\n \n \n \n {sessionTimeoutTxt.header}\n \n \n {sessionTimeoutTxt.content1}\n \n \n {sessionTimeoutTxt.content2}\n \n \n \n {buttonTxt.signIn}\n \n \n \n \n \n );\n};\n\nexport default SessionTimeoutModal;\n","import React from 'react';\n\nimport SessionTimeoutModal from '../../components/modals/session-timeout-modal/session-timeout-modal';\nimport { ServerErrorType } from '../../helpers/enums';\nimport { useServerErrorAggregator } from '../../hooks/use-server-error-aggregator';\n\nconst SessionTimeout = () => {\n const { errorType } = useServerErrorAggregator();\n\n return (\n \n );\n};\n\nexport default SessionTimeout;\n","import {\n i18n, Messages\n} from '@lingui/core';\nimport {\n Content,\n FunctionArg,\n Octothorpe,\n parse,\n PlainArg,\n Select\n} from '@messageformat/parser';\nimport { en } from 'make-plural/plurals';\n\nimport { APP_CONFIG } from '../../config';\n\nexport const DEFAULT_LOCALE = 'en-AU';\n\nexport const PSEUDO_LOCALE = 'en-PL';\n\nexport const DEFAULT_LOCALE_DATA = {\n [DEFAULT_LOCALE]: { plurals: en },\n [PSEUDO_LOCALE]: { plurals: en }\n};\n\ntype LoadI18NOptions = {\n locale?: string\n shouldLoadLocaleFromCDN?: boolean\n};\n\n/**\n * Handle loading of the localisation json data manually or from CDN or locally for development.\n * In the APP_CONFIG this can be based on whether this is a production build.\n */\nconst loadLocalLingui = async (locale: string) => {\n console.debug('loadI18n() loading from local bundle !!');\n\n const catalog = await import(`../../../locale/${locale}/messages`);\n\n dynamicActivate({\n locale,\n messages: catalog.messages\n });\n};\n\nexport async function loadI18n ({\n locale = DEFAULT_LOCALE, shouldLoadLocaleFromCDN = APP_CONFIG.shouldLoadLocaleFromCDN\n}: LoadI18NOptions) {\n if (shouldLoadLocaleFromCDN) {\n console.debug('loadI18n() loading from cdn', locale, shouldLoadLocaleFromCDN);\n\n try {\n const baseUrl:string = window._env_.LOCALISATION_CDN_BASE_URL;\n\n if (typeof baseUrl !== 'string' || baseUrl.length === 0) {\n // if we are in production and this doesn't work there is no bundled fallback.\n console.error('loadI18n()', locale, shouldLoadLocaleFromCDN);\n\n throw new Error('loadI18n() unable to fetch LocalisationCdnBaseUrl from configuration');\n }\n console.debug('loadI18n() LocalisationCdnBaseUrl', baseUrl);\n\n await loadMessageCatalog({\n locale,\n baseUrl\n });\n } catch {\n await loadLocalLingui(locale);\n }\n } else {\n await loadLocalLingui(locale);\n }\n}\n\ntype ActivateOptions = {\n locale: string\n messages: Messages\n};\n\n/**\n * This is based off the official recommendation in lingui to dynamically load locale data\n * and the existing code snippet in 3p projects in the function loadCatalog.\n *\n * @see https://lingui.js.org/guides/dynamic-loading-catalogs.html\n */\nexport function dynamicActivate ({\n locale, messages\n}: ActivateOptions) {\n i18n.load(locale, messages);\n i18n.loadLocaleData(DEFAULT_LOCALE_DATA);\n i18n.activate(locale);\n}\n\ntype LoadLocaleDataOptions = {\n locale: string\n baseUrl: string\n};\n\nasync function loadMessageCatalog (options: LoadLocaleDataOptions) {\n try {\n await activateRemoteLocaleData(options).catch((error: unknown) => tryLoadFallbackLocale(options, error));\n } catch (error) {\n await tryLoadFallbackLocale(options, error);\n }\n}\n\nfunction tryLoadFallbackLocale (options: LoadLocaleDataOptions, sourceError: unknown) {\n const failureMessage = `tryLoadFallbackLocale() - received an error loading ${options.locale} no possible replacement.`;\n\n if (options.locale !== DEFAULT_LOCALE) {\n try {\n console.debug('tryLoadFallbackLocale() loading fallback due to error', sourceError);\n\n return activateRemoteLocaleData({\n ...options,\n locale: DEFAULT_LOCALE\n }).catch((error: unknown) => {\n console.error(failureMessage, error);\n\n throw new Error(failureMessage);\n });\n } catch (error) {\n const message = `tryLoadFallbackLocale() - the fallback to ${DEFAULT_LOCALE} failed with error...`;\n\n console.error(message, error);\n throw new Error(message);\n }\n } else {\n throw new Error(failureMessage);\n }\n}\n\nconst isString = (s: unknown) => {\n return typeof s === 'string';\n};\n\ntype Token = Content | PlainArg | FunctionArg | Select | Octothorpe;\n\nfunction processTokens (tokens: Token[]) {\n if (!tokens.filter((token) => {\n return !isString(token);\n }).length) {\n return tokens.join('');\n }\n\n return tokens.map((token) => {\n if (token.type === 'content') {\n return token.value;\n } else if (token.type === 'octothorpe') {\n return '#';\n } else if (token.type === 'argument') {\n return [token.arg];\n } else if (token.type === 'function') {\n const param = token.param;\n\n return [token.arg, token.key, Array.isArray(param) ? param[0] : param].filter(Boolean);\n }\n\n const formatProps: Record = {};\n\n token.cases.forEach((item) => {\n const parsedToken = processTokens(item.tokens);\n\n formatProps[item.key.replace('=', '')] = Array.isArray(parsedToken) && parsedToken.length === 1 ? parsedToken[0] : parsedToken;\n });\n\n return [token.arg, token.type, { ...formatProps }];\n });\n}\n\nexport function compile (message: string) {\n try {\n const parsedToken = processTokens(parse(message));\n\n return Array.isArray(parsedToken) && parsedToken.length === 1 && typeof parsedToken[0] === 'string' ? parsedToken[0] : parsedToken;\n } catch (e) {\n console.error('Message cannot be parsed due to syntax errors: '.concat(message));\n\n return message;\n }\n}\n\n/**\n * Load a message catalog from the CDN with the given baseUrl and locale.\n *\n * The baseUrl is typically given through a 3p config eg key \"LocalisationCdnBaseUrl\".\n * The data is provided through integration between app.lokalise & webhooks with bitbucket html-locales.\n *\n * @see https://app.lokalise.com/projects\n * @see https://bitbucket.org/mathletics/html-locales\n */\nasync function activateRemoteLocaleData ({\n baseUrl, locale\n}: LoadLocaleDataOptions): Promise {\n // TODO replace with 3p-resource?\n const response = await fetch(`${baseUrl}/${locale}.json`);\n const messages: Messages = await response.json();\n\n console.debug('loadCatalog() - translations =', JSON.stringify(messages, null, 2));\n\n const compiledMessages: Messages = {};\n\n Object.keys(messages).forEach((message) => {\n const translatedMessage = messages[message];\n\n if (typeof translatedMessage === 'string') {\n const compiledMessage = compile(translatedMessage);\n\n compiledMessages[message] = compiledMessage as Messages[number];\n }\n });\n\n dynamicActivate({\n locale,\n messages: compiledMessages\n });\n\n return messages;\n}\n\n/**\n * Get the current locale based on the URL search params eg &locale=en-AU\n * or fallback to the DEFAULT_LOCALE.\n */\nexport function getURLLocale (): string {\n return new URLSearchParams(window?.location?.search).get('locale') || DEFAULT_LOCALE;\n}\n","import {\n useEffect, useState\n} from 'react';\n\nimport {\n loadI18n, getURLLocale\n} from '../utils/locale-utils';\n\ntype Options = {\n locale?: string\n baseUrl?: string\n};\n\n/**\n * This hook will load the required data once for the before the application is ready to\n * render for the first time.\n */\nexport function useActivateI18n (options?: Options) {\n const locale = options?.locale || getURLLocale();\n const [isLoading, setIsLoading] = useState(true);\n const [isError, setIsError] = useState(false);\n\n // Load the required i18n data dynamically either from CDN or a local bundle\n useEffect(() => {\n loadI18n({\n ...options,\n locale\n }).then(() => {\n setIsLoading(false);\n }).catch((error: unknown) => {\n console.error('useActivateI18n unable to load i18n json data or fallback', error);\n setIsError(true);\n });\n }, [locale, options]);\n\n return {\n isLoading,\n isError\n };\n}\n","import { i18n } from '@lingui/core';\nimport { I18nProvider as LinguiI18nProvider } from '@lingui/react';\nimport React, { PropsWithChildren } from 'react';\n\nimport { useActivateI18n } from './hooks/use-activate-i18n';\n\nexport function I18nProvider ({ children }: PropsWithChildren) {\n const {\n isLoading, isError\n } = useActivateI18n();\n\n if (isLoading || isError) {\n // TODO put a custom design in here\n // return

Unable to load locale data

;\n return <>;\n }\n\n return (\n \n {children}\n \n );\n}\n","/* eslint-disable import/order */\n/* eslint-disable padding-line-between-statements */\nimport {\n QuestionProgressState, STUDENT_STATES\n} from '../../../helpers/enums';\nimport {\n Action, ActionWithoutPayload\n} from '../../../types/common.types';\n\nexport const GET_QUESTIONS_DETAILS_REQUESTED = 'GET_QUESTIONS_DETAILS_REQUESTED';\nexport const GET_QUESTIONS_DETAILS_SUCCESS = 'GET_QUESTIONS_DETAILS_SUCCESS';\nexport const GET_QUESTIONS_DETAILS_FAILURE = 'GET_QUESTIONS_DETAILS_FAILURE';\n\nexport const GET_STRAND_UOW_REQUESTED = 'GET_STRAND_UOW_REQUESTED';\nexport const GET_STRAND_UOW_SUCCESS = 'GET_STRAND_UOW_SUCCESS';\nexport const GET_STRAND_UOW_FAILURE = 'GET_STRAND_UOW_FAILURE';\n\nexport const GET_QUESTION_REQUESTED = 'GET_QUESTION_REQUESTED';\nexport const GET_QUESTION_SUCCESS = 'GET_QUESTION_SUCCESS';\nexport const GET_QUESTION_FAILURE = 'GET_QUESTION_FAILURE';\n\nexport const SAVE_QUESTION_REQUESTED = 'SAVE_QUESTION_REQUESTED';\nexport const SAVE_QUESTION_SUCCESS = 'SAVE_QUESTION_SUCCESS';\nexport const SAVE_QUESTION_FAILURE = 'SAVE_QUESTION_FAILURE';\n\nexport const LOAD_NEXT_QUESTION = 'LOAD_NEXT_QUESTION';\n\nexport const RESET_ACTIVITY = 'RESET_ACTIVITY';\n\nexport const SET_STUDENT_STATE = 'SET_STUDENT_STATE';\n\nexport const SET_MILESTONE_COMPLETE = 'SET_MILESTONE_COMPLETE';\n\nexport const DISMISS_ERROR = 'DISMISS_ERROR';\n\nexport const IS_OFFLINE = 'IS_OFFLINE';\n\nexport const IS_WORKED_SOLUTION_ACTIVATED = 'IS_WORKED_SOLUTION_ACTIVATED';\n\nexport const SET_READ_ALOUD_ENABLED = 'SET_READ_ALOUD_ENABLED';\n\nexport const SET_READ_ALOUD_LOCALE = 'SET_READ_ALOUD_LOCALE';\nexport const SET_PLAY_CORRECT_STARS = 'SET_PLAY_CORRECT_STARS';\nexport const SET_QUESTION_PROGRESS_STATE = 'SET_QUESTION_PROGRESS_STATE';\n\nexport const SET_SERVER_ERROR_INTERCEPTED = 'SET_SERVER_ERROR_INTERCEPTED';\n\nexport type QuestionActions =\n | GetQuestionsDetailsRequestAction\n | GetQuestionsDetailsFailureAction\n | GetQuestionsDetailsSuccessAction\n | GetStrandUowRequestAction\n | GetStrandUowFailureAction\n | GetStrandUowSuccessAction\n | GetQuestionRequestAction\n | GetQuestionFailureAction\n | GetQuestionSuccessAction\n | SaveQuestionFailureAction\n | SaveQuestionSuccessAction\n | SaveQuestionRequestAction\n | LoadNextQuestionAction\n | ResetActivityAction\n | SetStudentStateAction\n | SetMilestoneCompleteAction\n | DismissErrorAction\n | IsOfflineAction\n | IsWorkedSolutionActivatedAction\n | SetReadAloudEnabledAction\n | SetReadAloudLocaleAction\n | SetPlayCorrectStarsAction\n | SetQuestionProgressStateAction\n | SetServerErrorIntercepted\n ;\n\nimport {\n QuestionSave,\n QuestionSuccess,\n QuestionsDetails,\n StrandUowSuccess\n} from '../sub-components/question-activity/question-activity.types';\n/*\n * GET QUESTIONS TOTALS\n * */\n\nexport type GetQuestionsDetailsSuccessAction = Action;\n\nexport type GetQuestionsDetailsRequestAction = {\n type: typeof GET_QUESTIONS_DETAILS_REQUESTED\n} & ActionWithoutPayload;\n\nexport type GetQuestionsDetailsFailureAction = {\n type: typeof GET_QUESTIONS_DETAILS_FAILURE\n} & ActionWithoutPayload;\n\nexport type QuestDetailsRequest = {\n questionSetId: string\n courseId: string\n uowId: string\n assignmentId?: string\n assignmentType?: string\n classId?: string\n};\n\n/*\n * GET STRAND UOW\n * */\n\nexport type GetStrandUowSuccessAction = Action;\n\nexport type GetStrandUowRequestAction = {\n type: typeof GET_STRAND_UOW_REQUESTED\n} & ActionWithoutPayload;\n\nexport type GetStrandUowFailureAction = {\n type: typeof GET_STRAND_UOW_FAILURE\n} & ActionWithoutPayload;\n\n/*\n * GET QUESTION\n * */\n\nexport type GetQuestionSuccessAction = Action;\n\nexport type GetQuestionRequestAction = {\n type: typeof GET_QUESTION_REQUESTED\n} & ActionWithoutPayload;\n\nexport type GetQuestionFailureAction = {\n type: typeof GET_QUESTION_FAILURE\n} & ActionWithoutPayload;\n\nexport type IsOfflineAction = {\n type: typeof IS_OFFLINE\n isOffline: boolean\n};\n\nexport type SetReadAloudEnabledAction = {\n type: typeof SET_READ_ALOUD_ENABLED\n readAloudEnabled: boolean\n};\n\nexport type SetReadAloudLocaleAction = {\n type: typeof SET_READ_ALOUD_LOCALE\n readAloudLocale: string\n};\n\n/*\n * SAVE QUESTION\n * */\n\nexport type SaveQuestionFailureAction = {\n type: typeof SAVE_QUESTION_FAILURE\n} & ActionWithoutPayload;\n\nexport type SaveQuestionSuccessAction = Action;\n\nexport type SaveQuestionRequestAction = {\n type: typeof SAVE_QUESTION_REQUESTED\n} & ActionWithoutPayload;\n\n/*\n * LOAD QUESTION\n * */\nexport type LoadNextQuestionAction = {\n type: typeof LOAD_NEXT_QUESTION\n} & ActionWithoutPayload;\n\nexport type ResetActivityAction = {\n type: typeof RESET_ACTIVITY\n} & ActionWithoutPayload;\n\nexport type SetStudentStateAction = {\n type: typeof SET_STUDENT_STATE\n studentState: STUDENT_STATES\n};\n\nexport type SetMilestoneCompleteAction = {\n type: typeof SET_MILESTONE_COMPLETE\n milestoneComplete: boolean\n};\n\nexport type DismissErrorAction = {\n type: typeof DISMISS_ERROR\n} & ActionWithoutPayload;\n\n/*\n * WORKED SOLUTION\n * */\n\nexport type IsWorkedSolutionActivatedAction = ({\n type: typeof IS_WORKED_SOLUTION_ACTIVATED\n workedSolution: boolean\n});\n\n/*\n* PLAY CORRECT STARS\n* */\nexport type SetPlayCorrectStarsAction = {\n type: typeof SET_PLAY_CORRECT_STARS\n} & ActionWithoutPayload;\n\nexport type SetQuestionProgressStateAction = {\n type: typeof SET_QUESTION_PROGRESS_STATE\n questionProgressState: QuestionProgressState\n};\n\n/*\n* SERVER ERROR INTERCEPTED\n* */\nexport type SetServerErrorIntercepted = {\n type: typeof SET_SERVER_ERROR_INTERCEPTED\n payload: Record | undefined\n};\n","import { Dispatch } from 'redux';\n\nimport { SaveQuestionRequest } from '../../../../api/types/__generated__/data-contracts';\nimport {\n QuestionProgressState, STUDENT_STATES\n} from '../../../helpers/enums';\nimport { Resources } from '../../../resources/resources';\nimport {\n GET_QUESTION_FAILURE,\n GET_QUESTION_REQUESTED,\n GET_QUESTION_SUCCESS,\n GetQuestionFailureAction,\n GetQuestionRequestAction,\n GetQuestionSuccessAction,\n GET_QUESTIONS_DETAILS_FAILURE,\n GET_QUESTIONS_DETAILS_REQUESTED,\n GET_QUESTIONS_DETAILS_SUCCESS,\n GET_STRAND_UOW_FAILURE,\n GET_STRAND_UOW_REQUESTED,\n GET_STRAND_UOW_SUCCESS,\n GetQuestionsDetailsFailureAction,\n GetQuestionsDetailsRequestAction,\n GetQuestionsDetailsSuccessAction,\n LOAD_NEXT_QUESTION,\n LoadNextQuestionAction,\n RESET_ACTIVITY,\n ResetActivityAction,\n SAVE_QUESTION_FAILURE,\n SAVE_QUESTION_REQUESTED,\n SAVE_QUESTION_SUCCESS,\n SaveQuestionFailureAction,\n SaveQuestionRequestAction,\n SaveQuestionSuccessAction,\n SET_STUDENT_STATE,\n SetStudentStateAction,\n SET_MILESTONE_COMPLETE,\n SetMilestoneCompleteAction,\n DismissErrorAction,\n DISMISS_ERROR,\n IS_OFFLINE,\n IsOfflineAction,\n IsWorkedSolutionActivatedAction,\n IS_WORKED_SOLUTION_ACTIVATED,\n SetReadAloudEnabledAction,\n SET_READ_ALOUD_ENABLED,\n SetReadAloudLocaleAction,\n SET_READ_ALOUD_LOCALE,\n GetStrandUowFailureAction,\n GetStrandUowSuccessAction,\n GetStrandUowRequestAction,\n QuestDetailsRequest,\n SET_PLAY_CORRECT_STARS,\n SetPlayCorrectStarsAction,\n SET_QUESTION_PROGRESS_STATE,\n SetQuestionProgressStateAction,\n SET_SERVER_ERROR_INTERCEPTED,\n SetServerErrorIntercepted\n} from './question-action-types';\n\n/*\n * GET QUESTIONS TOTALS\n * */\n\nexport const getQuestionsDetailsFailure = (): GetQuestionsDetailsFailureAction =>\n ({ type: GET_QUESTIONS_DETAILS_FAILURE });\n\nexport const getQuestionsDetailsSuccess = (\n payload: GetQuestionsDetailsSuccessAction['payload']\n): GetQuestionsDetailsSuccessAction => ({\n type: GET_QUESTIONS_DETAILS_SUCCESS,\n payload\n});\n\nexport const getQuestionsDetailsRequest = (): GetQuestionsDetailsRequestAction =>\n ({ type: GET_QUESTIONS_DETAILS_REQUESTED });\n\nexport const getQuestionsDetails = ({\n questionSetId,\n courseId,\n uowId,\n assignmentId,\n classId\n}: QuestDetailsRequest) => async (dispatch: Dispatch) => {\n dispatch(getQuestionsDetailsRequest());\n\n const questDetailsRequest = {\n questionSetId,\n courseId,\n uowId,\n assignmentId: assignmentId || 0,\n // questionDetails is used for self assignment only, so we can hardcode assignmentType to 1 (voluntary)\n assignmentType: '1',\n classId\n };\n\n try {\n const response = await Resources.getQuestionsDetails.post().withBody({ ...questDetailsRequest }).send();\n\n if (response.data && response.data.questName) {\n dispatch(getQuestionsDetailsSuccess({ response: response.data }));\n } else {\n dispatch(getQuestionsDetailsFailure());\n }\n } catch (e) {\n dispatch(getQuestionsDetailsFailure());\n }\n};\n\n/*\n * GET STRAND UOW\n * */\n\nexport const getStrandUowFailure = (): GetStrandUowFailureAction =>\n ({ type: GET_STRAND_UOW_FAILURE });\n\nexport const getStrandUowSuccess = (\n payload: GetStrandUowSuccessAction['payload']\n): GetStrandUowSuccessAction => ({\n type: GET_STRAND_UOW_SUCCESS,\n payload\n});\n\nexport const getStrandUowRequest = (): GetStrandUowRequestAction =>\n ({ type: GET_STRAND_UOW_REQUESTED });\n\nexport const getStrandUow = (courseId: string, uowId: string) => async (dispatch: Dispatch) => {\n dispatch(getStrandUowRequest());\n\n try {\n const response = await Resources.getStrandUow.get({\n courseId,\n uowId\n }).send();\n\n if (response.data) {\n dispatch(getStrandUowSuccess({ response: response.data }));\n } else {\n dispatch(getStrandUowFailure());\n }\n } catch (e) {\n dispatch(getStrandUowFailure());\n }\n};\n\n/*\n * GET QUESTION\n * */\n\nexport const getQuestionFailure = (): GetQuestionFailureAction => ({ type: GET_QUESTION_FAILURE });\n\nexport const getQuestionSuccess = (\n payload: GetQuestionSuccessAction['payload']\n): GetQuestionSuccessAction => ({\n type: GET_QUESTION_SUCCESS,\n payload\n});\n\nexport const getQuestionRequest = (): GetQuestionRequestAction => ({ type: GET_QUESTION_REQUESTED });\n\nexport const getQuestion = (questionSetId: string, assignmentId?: number) => async (dispatch: Dispatch) => {\n dispatch(getQuestionRequest());\n\n try {\n const response = await Resources.getQuestion.post().withBody({\n questionSetId,\n assignmentId\n }).send();\n\n if (response.data) {\n dispatch(getQuestionSuccess({ response: response.data }));\n } else {\n dispatch(getQuestionFailure());\n }\n } catch (e) {\n dispatch(getQuestionFailure());\n }\n};\n\nexport const setIsOffline = (isOffline: boolean): IsOfflineAction => ({\n type: IS_OFFLINE,\n isOffline\n});\n\nexport const setReadAloudEnabled = (readAloudEnabled: boolean): SetReadAloudEnabledAction => ({\n type: SET_READ_ALOUD_ENABLED,\n readAloudEnabled\n});\n\nexport const setReadAloudValue = (readAloudLocale: string): SetReadAloudLocaleAction => ({\n type: SET_READ_ALOUD_LOCALE,\n readAloudLocale\n});\n\n/*\n * SAVE QUESTION\n * */\nexport const saveQuestionFailure = (): SaveQuestionFailureAction => ({ type: SAVE_QUESTION_FAILURE });\n\nexport const saveQuestionSuccess = (\n payload: SaveQuestionSuccessAction['payload']\n): SaveQuestionSuccessAction => ({\n type: SAVE_QUESTION_SUCCESS,\n payload\n});\n\nexport const saveQuestionRequest = (): SaveQuestionRequestAction => ({ type: SAVE_QUESTION_REQUESTED });\n\nexport const saveQuestion = (saveData: SaveQuestionRequest) => async (dispatch: Dispatch) => {\n dispatch(saveQuestionRequest());\n\n try {\n const response = await Resources.saveQuestion.post().withBody({ ...saveData as object }).send();\n\n if (response.data) {\n dispatch(saveQuestionSuccess({ response: response.data }));\n } else {\n dispatch(saveQuestionFailure());\n }\n\n return response.data;\n } catch (e) {\n dispatch(saveQuestionFailure());\n }\n};\n\n/*\n * LOAD QUESTION\n * */\n\nexport const loadNextQuestion = (): LoadNextQuestionAction => ({ type: LOAD_NEXT_QUESTION });\n\n/*\n * ACTIVITY\n * */\n\nexport const resetActivity = (): ResetActivityAction => ({ type: RESET_ACTIVITY });\n\nexport const setStudentState = (studentState: STUDENT_STATES): SetStudentStateAction => ({\n type: SET_STUDENT_STATE,\n studentState\n});\n\nexport const setMilestoneComplete = (milestoneComplete: boolean): SetMilestoneCompleteAction => ({\n type: SET_MILESTONE_COMPLETE,\n milestoneComplete\n});\n\nexport const dismissError = (): DismissErrorAction => ({ type: DISMISS_ERROR });\n\n/*\n * WORKED SOLUTION\n * */\n\nexport const activateWorkedSolution = (workedSolution: boolean): IsWorkedSolutionActivatedAction => ({\n type: IS_WORKED_SOLUTION_ACTIVATED,\n workedSolution\n});\n\n/*\n * READ ALOUD\n * */\n\nexport const loadReadAloudLocale = (defaultReadAloudLocale: string, isRetry = false) => async (dispatch: Dispatch) => {\n try {\n const response = await Resources.getReadAloudLocale.get().send();\n\n if (response.data){\n dispatch(setReadAloudEnabled(response.data.isReadAloudEnabled));\n if (response.data.readAloudLocale) {\n dispatch(setReadAloudValue(response.data.readAloudLocale));\n } else {\n dispatch(setReadAloudValue(defaultReadAloudLocale));\n }\n }\n } catch (e) {\n if (!isRetry) {\n loadReadAloudLocale(defaultReadAloudLocale, true);\n }\n }\n};\n\nexport const setReadAloudLocale = (readAloudLocale: string, isReadAloudEnabled: boolean, isRetry = false) => async (dispatch: Dispatch) => {\n dispatch(setReadAloudEnabled(isReadAloudEnabled));\n dispatch(setReadAloudValue(readAloudLocale));\n\n try {\n await Resources.postReadAloudLocale.post().withBody({\n isReadAloudEnabled,\n readAloudLocale\n }).raw().send();\n } catch (e) {\n if (!isRetry) {\n setReadAloudLocale(readAloudLocale, isReadAloudEnabled, true);\n }\n }\n};\n/*\n* SET PLAY CORRECT STARS\n* */\n\nexport const setPlayCorrectStars = (): SetPlayCorrectStarsAction => ({ type: SET_PLAY_CORRECT_STARS });\n\nexport const setQuestionProgress = (questionProgressState: QuestionProgressState) : SetQuestionProgressStateAction => ({\n type: SET_QUESTION_PROGRESS_STATE,\n questionProgressState\n});\n\nexport const setServerErrorIntercepted = (payload: Record | undefined): SetServerErrorIntercepted => ({\n type: SET_SERVER_ERROR_INTERCEPTED,\n payload\n});\n","import {\n useEffect,\n useState\n} from 'react';\nimport {\n initialize,\n pageview\n} from 'react-ga';\n\nconst useGoogleAnalytics = () => {\n const [initialized, setInitialized] = useState(false);\n\n useEffect(() => {\n if (!window.location.href.includes('localhost') && window._env_.GTM_ID) {\n initialize(window._env_.GTM_ID);\n setInitialized(true);\n }\n }, []);\n\n useEffect(() => {\n if (initialized) {\n pageview(window.location.href);\n }\n }, [initialized]);\n\n return initialized;\n};\n\nexport default useGoogleAnalytics;\n","import { Dispatch } from 'redux';\n\nimport { setServerErrorIntercepted } from '../containers/question-container/store/question-actions';\nimport { Resources } from './resources';\n\nclass Intercept3pResourcesError {\n static addResourceResponseErrorInterceptor (dispatch: Dispatch) {\n const interceptor = Intercept3pResourcesError.handleErrors.bind(this, dispatch);\n\n Resources.env?.addResponseInterceptor(interceptor);\n }\n\n static handleErrors (dispatch: Dispatch, result: Record) {\n const {\n status,\n code,\n message\n } = result;\n\n try {\n if (status > 399 && status < 600) {\n dispatch(setServerErrorIntercepted({\n status,\n code,\n message\n }));\n }\n } catch (e) {\n dispatch(setServerErrorIntercepted({\n status: -1,\n code: 'unknownError',\n message: 'unknown error'\n }));\n }\n\n return result;\n }\n}\n\nexport default Intercept3pResourcesError;\n","/* istanbul ignore file */\nimport React from 'react';\n\nimport { TempSpinnerWrapper } from './temp-spinner.styled';\nimport { TempSpinnerProps } from './temp-spinner.types';\n\nconst TempSpinner = ({ isLoading }: TempSpinnerProps) => (\n <>\n {isLoading && (\n \n \n
\n
\n
\n
\n
\n \n )}\n \n);\n\nexport default TempSpinner;\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { ButtonProps } from '@chakra-ui/react';\nimport { StyleFunctionProps } from '@chakra-ui/theme-tools';\n\nexport const Button = {\n baseStyle: ({ theme }: StyleFunctionProps) => ({\n boxSizing: 'border-box',\n _focus: { boxShadow: `0 0 0 3px ${theme.colors.primary['500']};` }\n }),\n variants: {\n outline: (props: StyleFunctionProps) => {\n const {\n colorScheme,\n theme\n } = props;\n const defaults = {\n _disabled: {\n opacity: 1,\n borderColor: theme.app.neutral100,\n color: theme.app.fontGrey01,\n svg: { 'path, rect': { fill: 'neutral.600' } }\n },\n _hover: { bg: theme.app.primary50 }\n };\n\n let overrides: ButtonProps = {};\n\n if (colorScheme === 'footer-white') {\n overrides = {\n _active: {\n bg: theme.app.primary100,\n borderColor: theme.app.blue06\n },\n fontWeight: 'medium',\n borderColor: theme.app.primary300,\n color: theme.app.blue02,\n bg: theme.app.whiteAlpha800\n };\n }\n\n return {\n ...defaults,\n ...overrides\n };\n },\n solid: (props: StyleFunctionProps) => {\n const {\n colorScheme,\n theme\n } = props;\n\n let overrides: ButtonProps = {};\n\n if (colorScheme === 'primary') {\n overrides = {\n _active: { bg: 'linear-gradient(98.39deg, #0063A7 0%, #01437D 100%)' },\n _hover: { bg: 'linear-gradient(102.49deg, #007ACC 0%, #014B8B 100%)' },\n bg: 'linear-gradient(103.65deg, #00ABE8 -2.03%, #007ACC 43.7%, #0063A7 105.46%)'\n };\n } else if (colorScheme === 'correct') {\n overrides = {\n _hover: { bg: 'linear-gradient(134.98deg, #148235 0%, #024C1F 100%)' },\n bg: 'linear-gradient(135.76deg, #29B539 0%, #148235 76.36%, #0D6830 159.36%)'\n };\n } else if (colorScheme === 'incorrect') {\n overrides = {\n _hover: { bg: 'linear-gradient(137.41deg, #DC501F 0%, #AE2F07 104.34%)' },\n bg: 'linear-gradient(134.14deg, #FA7E46 0%, #CC461B 101.55%)'\n };\n } else {\n overrides = {\n bg: theme.app.whiteAlpha800,\n border: `1px solid ${theme.app.whiteAlpha800}`\n };\n }\n const disabledOverrides = {\n bg: theme.app.neutral100,\n color: theme.app.fontGrey01,\n opacity: 1\n };\n\n overrides = {\n ...overrides,\n _disabled: disabledOverrides,\n _hover: {\n ...overrides._hover,\n _disabled: disabledOverrides\n }\n };\n\n return {\n _disabled: disabledOverrides,\n fontWeight: 'normal',\n ...overrides\n };\n }\n }\n};\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { StyleFunctionProps } from '@chakra-ui/theme-tools';\n\nimport { Button } from './button';\n\nexport const CloseButton = {\n baseStyle: (props: StyleFunctionProps) => ({\n ...Button.baseStyle(props),\n borderRadius: '100%',\n backgroundColor: 'white'\n }),\n variants: {\n ...Button.variants,\n outline: (props: StyleFunctionProps) => {\n const {\n blue, neutral600, primary600\n } = props.theme.app;\n\n return ({\n ...Button.variants.outline(props),\n border: `1px solid ${blue}`,\n color: neutral600,\n _active: {\n bg: primary600,\n color: 'white'\n }\n });\n }\n }\n};\n","import { progressAnatomy as parts } from '@chakra-ui/anatomy';\nimport { ProgressProps } from '@chakra-ui/react';\nimport {\n PartsStyleFunction, SystemStyleFunction\n} from '@chakra-ui/theme-tools';\n\nconst baseStyleFilledTrack: SystemStyleFunction = (props) => {\n const overrides: ProgressProps = {};\n\n if (props.colorScheme === 'green') {\n overrides.bg = props.theme.app.green02;\n } else if (props.colorScheme === 'gold') {\n overrides.bg = 'linear-gradient(132.84deg, #FEDF01 0%, #EAA400 100%)';\n }\n\n return overrides;\n};\nconst baseStyle: PartsStyleFunction = (props) => ({\n filledTrack: baseStyleFilledTrack(props),\n track: {\n bg: 'transparent',\n border: '1px solid #D1E8EF',\n borderRadius: '32px'\n }\n});\n\nexport const Progress = { baseStyle };\n","import {\n cssVar, SystemStyleFunction\n} from '@chakra-ui/theme-tools';\n\nconst $bg = cssVar('tooltip-bg');\nconst baseStyle: SystemStyleFunction = ({ theme }) => ({\n [$bg.variable]: 'white',\n color: theme.app.fontGrey01,\n borderRadius: 'md',\n px: 0,\n py: 0,\n maxWidth: 'unset',\n boxShadow: `0 5px 20px 0 ${theme.app.grey06}`\n});\n\nexport const Tooltip = { baseStyle };\n","import { css } from '@emotion/react';\n\nexport type FlexMixins = typeof flex;\n\nexport const flex = {\n flexRowVerticalCentered: css`\n display: flex;\n flex-direction: row;\n align-items: center;\n `,\n flexRowSpaced: css`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n `,\n flexRowVerticalCenteredSpaced: css`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n `,\n flexColumnCentered: css`\n display: flex;\n flex-flow: column;\n align-items: center;\n `,\n flexColumn: css`\n display: flex;\n flex-flow: column;\n align-items: start;\n `,\n flexColumnSpaced: css`\n display: flex;\n flex-flow: column;\n justify-content: space-between;\n `,\n flexAlignEnd: css`\n display: flex;\n flex-direction: row;\n align-items: flex-end;\n `,\n flexRowReverse: css`\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n `,\n flexChildCentered: css`\n display: flex; //default is row layout\n justify-content: center; //main axis (vertical)\n align-items: center; //cross axis (horizontal)\n `\n};\n","import { css } from '@emotion/react';\n\nexport type Mixins = typeof mixins;\n\nexport const mixins = {\n border: (colour = 'red') => css`\n border: ${colour} solid 1px;\n `\n};\n","// existing app sass variables\n// This was generated from existing scss https://sass-export.plentycode.com:\n\nexport type ThemeVariables = typeof app;\n\nexport const app = {\n appBgColour: '#0BB3F4',\n questionConsoleBgColour: '#3c2491',\n font: '#525352',\n fontGrey01: '#5C6C7F',\n fontPrimary: '#0063A7',\n fontLight: '#278bcb',\n white01: '#f3f3f3',\n white02: '#d8d8d8',\n white03: '#E3E9F7',\n whiteAlpha30: '#FFFFFF4D',\n whiteAlpha800: '#FFFFFFCC',\n blue: '#00ABE8',\n darkBlue: '#0071c0',\n primary50: '#EEF8FE',\n primary100: '#D0F1FD',\n primary200: '#BCEAFD',\n primary300: '#99DDF6',\n primary600: '#007ACC',\n primary700: '#0063A7',\n primary900: '#00336F',\n error600: '#E22837',\n error300: '#F6BFC3',\n error700: '#C51B29',\n neutral50: '#F4F8FA',\n neutral100: '#EDF1F4',\n neutral200: '#DBE0E6',\n neutral300: '#CBD3DC',\n neutral600: '#5C6C7F',\n neutral900: '#001937',\n grey01: '#bcbcbc',\n grey02: '#ADB9C7',\n grey03: '#DBE0E6',\n grey04: '#33475F',\n grey05: '#808C9B',\n grey06: '#C4C4C4',\n blue01: '#0DB5F6',\n blue02: '#007ACC',\n blue03: '#001937',\n blue04: '#73D7FC',\n blue05: '#01AEEE',\n blue06: '#4DC4EF',\n red01: '#f63e6b',\n red02: '#CC461B',\n red03: '#EB6973',\n red04: '#C51B29',\n red05: '#FCB290',\n red06: '#FCEAEB',\n red07: '#BA3409',\n orange01: '#FA7E46',\n orange02: '#AB5C00',\n orange03: '#5F0008',\n green01: '#29B539',\n green02: '#58D25B',\n green03: '#EAF8EB',\n green04: '#148235',\n green05: '#003C18',\n green50: '#F6FEF4',\n green200: '#BCEDBD',\n green300: '#9BE49D',\n green600: '#1D9B37',\n yellow01: '#FFCF00',\n yellow02: '#FFFAEE',\n\n break680: '680px',\n phoneLandscape: '620px',\n breakTabletPortrait: '768px',\n breakTabletPortraitPhone: '767px',\n breakTabletLandscape: '1024px',\n breakPoint: '950px',\n transitionBreakPoint: '850px',\n transitionBreakPointLarge: '1350px',\n lg: '992px',\n xl: '1200px',\n break1270: '1270px',\n headerHeight: '90px',\n headerHeightMobile: '100px',\n footerHeight: '72px',\n questionHeaderHeight: '46px',\n questionHeaderHeightCollapsed: '64px',\n questionBodyPadding: '24px',\n questionBodyPaddingMobile: '20px',\n questionNumberWidth: '32px',\n maxContentWidth: 'min(100% - 24px, 1270px)',\n minContentWidth: '960px',\n questionPanelMaxWidth: '910px',\n questionPanelMinWidth: '672px',\n progressPanelWidth: '266px',\n progressPanelHeight: '558px',\n progressPanelLeftMargin: '32px',\n rightBkWidth: '1368px',\n borderRadius: '40px',\n\n guideWidth: '183px',\n guideHeight: '232px',\n guideWidthAndSpacer: '209px',\n\n guideWidthLandscape: '152px',\n guideHeightLandscape: '192px',\n guideWidthLandscapeAndSpacer: '182px',\n\n guideWidthPortrait: '164px',\n guideHeightPortrait: '120px',\n\n guideWidthPortraitPhone: '104px',\n guideHeightPortraitPhone: '76px',\n\n messageBoxWidth: '648px',\n messageBoxWidthLandscape: '552px',\n messageBoxWidthPortrait: '720px',\n\n messageBoxSummaryWidth: '1016px',\n\n stickyHintContainerHeight: '51px',\n testsStageMaxWidth: '967px',\n questionContainerMargin: '32px'\n};\n","/**\n * A basic theme for the application.\n *\n * @see https://emotion.sh/docs/theming\n */\nimport {\n defaultTheme, ThemeProps as qclThemeProps\n} from '@3plearning/question-components-library';\nimport { mergeThemeOverride } from '@chakra-ui/react';\n\nimport {\n Button, CloseButton, Container, Modal, Progress, Tooltip, Popover\n} from './components';\nimport {\n flex, FlexMixins\n} from './flex-mixins';\nimport {\n mixins, Mixins\n} from './mixins';\nimport {\n typography, Typography\n} from './typography';\nimport {\n app, ThemeVariables\n} from './variables';\n\nexport const APP_THEME = {\n typography,\n app,\n flex,\n mixins\n};\n\nexport const appTheme = mergeThemeOverride(\n defaultTheme,\n APP_THEME,\n {\n breakpoints: {\n tabletLandscape: app.breakTabletLandscape,\n breakPoint: app.breakPoint,\n phonePortrait: app.breakTabletPortraitPhone,\n break680: app.break680,\n phoneLandscape: app.phoneLandscape,\n break1270: app.break1270\n },\n components: {\n Button,\n CloseButton,\n Container,\n Modal,\n Progress,\n Tooltip,\n Popover\n }\n }\n);\n\nexport type AppThemeType =\n qclThemeProps\n & { app: ThemeVariables }\n & { flex: FlexMixins }\n & { mixins: Mixins }\n & { typography: Typography };\n\nexport type ThemeProps = { theme: AppThemeType };\n\n// Alias for use in @emotion/styled to pick an app theme var\nexport const pickThemeVar = (\n key: keyof ThemeProps['theme']['app']\n) => (props: ThemeProps) => {\n return props.theme.app[key];\n};\n\nexport const pickThemeFlex = (\n key: keyof ThemeProps['theme']['flex']\n) => (props: ThemeProps) => {\n return props.theme.flex[key];\n};\n\n","export type Typography = typeof typography;\n\nexport const typography = {\n fontFamily: 'sofia-pro, sans-serif',\n fontWeightRegular: 400,\n fontWeightBold: 700\n};\n","export const Container = { baseStyle: { boxSizing: 'border-box' } };\n","/* eslint-disable @typescript-eslint/naming-convention */\nexport const Modal = {\n sizes: {\n full: {\n dialog: {\n 'maxW': 'none',\n 'minH': 'auto',\n '@supports(min-height: -webkit-fill-available)': { minH: 'auto' }\n }\n }\n },\n variants: {\n 'concept-refresh': {\n dialog: {\n boxShadow: 'unset',\n marginTop: '80px',\n width: 'calc(100% - 60px)',\n height: 'calc(100% - 160px)',\n backgroundColor: 'transparent'\n },\n body: { padding: '0 60px' }\n },\n 'modal-alert': {\n dialogContainer: { zIndex: 'toast' },\n overlay: { zIndex: 'popover' }\n }\n }\n};\n","import { StyleFunctionProps } from '@chakra-ui/theme-tools';\n\nexport const Popover = {\n variants: {\n hint: (props: StyleFunctionProps) => {\n const {\n theme: {\n app: {\n headerHeight,\n headerHeightMobile,\n footerHeight\n }\n }\n } = props;\n const defaults = {\n content: {\n top: '-102px',\n maxH: `calc(100vh - (2 * ${headerHeight}))`,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _focus: { outline: 'none' }\n },\n body: {\n overflow: 'auto',\n padding: '20px 24px 0px 24px',\n marginBottom: '24px'\n }\n };\n const overrides = {\n popper: {\n boxShadow: '0px 4px 16px 2px rgba(0, 25, 55, 0.32)',\n display: 'flex',\n inset: {\n base: `${headerHeightMobile} 16px auto auto !important`,\n md: `${headerHeight} 24px auto auto !important`\n },\n position: 'fixed !important',\n top: {\n base: `${headerHeightMobile} !important`,\n md: `${headerHeight} !important`\n },\n right: {\n base: '16px !important',\n md: '24px !important'\n },\n left: 'auto !important',\n transform: 'none !important',\n minW: 'auto !important',\n maxW: '484px',\n w: {\n base: 'calc(100% - 32px)',\n md: 'calc(100% - 48px)'\n },\n maxH: {\n base: `calc(100% - ${headerHeightMobile} - ${footerHeight})`,\n lg: `calc(100% - ${headerHeight} - ${footerHeight} - 24px)`\n },\n overflow: 'hidden',\n borderRadius: '20px'\n },\n content: { w: '100%' },\n body: {\n fontSize: '18px',\n padding: '16px 16px 8px 16px',\n marginBottom: '8px',\n overflow: 'auto'\n }\n };\n\n if (props.size === 'lg') {\n return defaults;\n }\n\n return overrides;\n }\n }\n};\n","import styled from '@emotion/styled';\n\nimport { pickThemeFlex } from '../../styles/theme/app-theme';\n\nexport const AppInitialisationStyled = styled.div`\n ${pickThemeFlex('flexChildCentered')};\n \n width: 100%;\n height: 100%;\n`;\n","/**\n * The main application route paths,\n * centralised here for use all over the application.\n */\nexport const ROUTES = {\n appInitialisation: '/',\n questionConsole: '/question',\n milestoneTransition: '/progress',\n diagnostics: '/diagnostics',\n singleVariant: '/single-variant',\n preview: '/preview'\n};\n","import {\n useEffect, useState\n} from 'react';\nimport {\n useDispatch, useSelector\n} from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { AppState } from '../../../app/store/store.types';\nimport {\n getQuestion,\n getQuestionsDetails,\n getStrandUow,\n setMilestoneComplete,\n setQuestionProgress\n} from '../../../containers/question-container/store/question-actions';\nimport {\n QuestionProgressState, QuestionSetType, TransitionScreen\n} from '../../../helpers/enums';\nimport {\n getQueryParamValues, isDefined\n} from '../../../helpers/utils';\nimport { ROUTES } from '../../routes';\n\nexport const useAppInitialization = () => {\n const history = useHistory();\n const dispatch = useDispatch();\n const activityState = useSelector(state => state.activityState);\n const {\n questName, isLoading, isError, progress, milestoneComplete, questionSetType\n } = activityState;\n const [transitionScreen, setTransitionScreen] = useState();\n const [dataInitialised, setDataInitialised] = useState(false);\n\n /*\n * GET INITIAL DATA TO DECIDE ON ROUTE\n */\n useEffect(() => {\n if (isLoading || isError) {\n return;\n }\n\n const queryParams = getQueryParamValues(['questionSetId', 'courseId', 'uowId', 'assignmentId', 'classId']);\n const {\n questionSetId, courseId = '', uowId = '', assignmentId, classId\n } = queryParams;\n\n if (courseId && uowId) {\n dispatch(getStrandUow(courseId, uowId));\n }\n\n if (questionSetId && !isDefined(questName)) {\n dispatch(getQuestionsDetails({\n questionSetId,\n courseId,\n uowId,\n assignmentId,\n classId\n }));\n } else if (questionSetId && isDefined(questName) && !isDefined(progress)) {\n dispatch(getQuestion(questionSetId, assignmentId != null ? parseInt(assignmentId) : 0));\n }\n }, [dispatch, isError, isLoading, progress, questName]);\n /*\n * DATA INITIALISED\n */\n useEffect(() => {\n if(isDefined(progress) && !dataInitialised) {\n setDataInitialised(true);\n }\n }, [dataInitialised, progress]);\n /*\n * CURRENT MILESTONE\n */\n useEffect(() => {\n const {\n stepsCompleted, attempt, isQuestCompleted\n } = progress || {};\n\n if (dataInitialised) {\n if (!isDefined(milestoneComplete)) {\n if (questionSetType !== QuestionSetType.questiconActivity) {\n if (isQuestCompleted) {\n setTransitionScreen(TransitionScreen.diagnosticsSummaryScreen);\n dispatch(setMilestoneComplete(true));\n } else {\n if (questionSetType === QuestionSetType.diagnostics && stepsCompleted === 0) {\n setTransitionScreen(TransitionScreen.diagnosticsStartScreen);\n } else if (questionSetType === QuestionSetType.unitTest && stepsCompleted === 0) {\n setTransitionScreen(TransitionScreen.unitTestIntroScreen);\n }\n dispatch(setMilestoneComplete(false));\n }\n } else if (attempt === 1) {\n switch (stepsCompleted) {\n case 0:\n setTransitionScreen(TransitionScreen.startScreen);\n dispatch(setMilestoneComplete(false));\n break;\n case 5:\n setTransitionScreen(TransitionScreen.startReasoning);\n dispatch(setMilestoneComplete(true));\n break;\n case 8:\n setTransitionScreen(TransitionScreen.startProblemSolving);\n dispatch(setMilestoneComplete(true));\n break;\n case 10:\n setTransitionScreen(TransitionScreen.summaryScreen);\n dispatch(setMilestoneComplete(true));\n break;\n default:\n setTransitionScreen(undefined);\n dispatch(setMilestoneComplete(false));\n dispatch(setQuestionProgress(QuestionProgressState.resetUnanswered));\n }\n } else if (isQuestCompleted){\n setTransitionScreen(TransitionScreen.summaryScreen);\n dispatch(setMilestoneComplete(true));\n } else {\n setTransitionScreen(undefined);\n dispatch(setMilestoneComplete(false));\n dispatch(setQuestionProgress(QuestionProgressState.resetUnanswered));\n }\n }\n }\n }, [dataInitialised, dispatch, milestoneComplete, progress, questionSetType]);\n /*\n * SHOW INITIAL SCREEN TYPE\n */\n useEffect(() => {\n if (isDefined(history) && isDefined(milestoneComplete)) {\n if (isDefined(transitionScreen)) {\n history.replace(`${ROUTES.milestoneTransition}/${transitionScreen}`);\n } else if (dataInitialised && questionSetType === QuestionSetType.questiconActivity) {\n history.replace(ROUTES.questionConsole);\n } else if (dataInitialised &&\n (questionSetType === QuestionSetType.diagnostics ||\n questionSetType === QuestionSetType.unitTest)) {\n history.replace(ROUTES.diagnostics);\n }\n }\n }, [history, milestoneComplete, dataInitialised, transitionScreen, questionSetType]);\n\n return {\n isLoading,\n isError\n };\n};\n","import React from 'react';\n\nimport TempSpinner from '../../../src/containers/question-container/sub-components/temp-poc/temp-spinner';\nimport { AppInitialisationStyled } from './app-initialisation.styled';\nimport { useAppInitialization } from './hooks/use-app-initialization';\n\nexport const AppInitialisation = () => {\n const {\n isLoading, isError\n } = useAppInitialization();\n\n if (isError) {\n console.log('isError');\n }\n\n if (isLoading) {\n return (\n \n \n \n );\n }\n\n return
;\n};\n","import {\n Modal,\n ModalOverlay,\n ModalHeader,\n ModalContent,\n ModalBody,\n Button,\n ModalFooter,\n useTheme,\n HStack,\n Box\n} from '@chakra-ui/react';\nimport React, { useRef } from 'react';\n\nimport { TempSpinnerWrapper } from '../../../containers/question-container/sub-components/temp-poc/temp-spinner.styled';\nimport { lokalisation } from '../../../helpers/lokalisation';\nimport { useExitApp } from '../../../hooks/use-exit-app';\nimport { useAudioEffectsContext } from '../../audio/provider/audio-effects-provider';\nimport { ModalExitWithoutCompletingProps } from './exit-without-completing.types';\n\nconst ExitWithoutCompletingModal = ({\n isOpen,\n onClose\n}: ModalExitWithoutCompletingProps) => {\n const { exitWithoutCompleting } = lokalisation();\n const theme = useTheme();\n const { playClick } = useAudioEffectsContext();\n const handleOnClose = () => {\n playClick();\n onClose();\n };\n const {\n exiting,\n redirect\n } = useExitApp();\n const handleExit = async () => {\n playClick();\n if (!exiting) {\n redirect();\n }\n };\n const initialRef = useRef(null);\n\n return (\n \n \n \n \n \n \n {exitWithoutCompleting.para1}\n
\n {exitWithoutCompleting.para2}\n \n \n \n \n \n {exitWithoutCompleting.no}\n \n handleExit()}\n px={{\n tabletLandscape: '32px',\n md: '16px'\n }}\n py={{\n tabletLandscape: '8px',\n md: '10px'\n }}\n w={{\n tabletLandscape: '220px',\n md: '200px',\n base: '40%'\n }}\n minW={{\n tabletLandscape: '220px',\n md: '200px',\n base: '134px'\n }}\n h={{\n tabletLandscape: '48px',\n md: '40px',\n base: '40px'\n }}\n fontSize={'20px'}\n fontWeight={'500'}\n >\n {exiting || exitWithoutCompleting.yes}\n {exiting && (\n \n \n
\n
\n
\n
\n
\n \n )}\n \n \n \n \n \n );\n};\n\nexport default ExitWithoutCompletingModal;\n","export default \"https://cdn.questicon.mathletics.com/assets/images/zoom-in-a3e8eb992fb94ce32d088cc84f787cb6.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/keycap-d7c6f72af7bcff7916489075b4b52f1d.png\";","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport commandIcon from '../../../../assets/images/command.svg';\n\nexport const KeycapWrapper = styled.div`\n display: inline-block;\n position: relative;\n color: ${({ theme: { app: { white03 } } }) => white03};\n margin: 0 8px;\n`;\n\nexport const Ctrl = styled.div`\n position: absolute;\n top: 4px;\n left: 10px;\n font-size: 13px;\n\n &:before {\n content: 'Ctrl';\n }\n`;\n\nexport const Command = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n\n &:before, &:after {\n position: absolute;\n }\n\n &:before {\n content: url(${commandIcon});\n top: 7px;\n left: 15px;\n }\n\n &:after {\n content: 'command';\n top: 21px;\n left: 8px;\n font-size: 6px;\n font-weight: 400;\n letter-spacing: -0.036px;\n }\n`;\n\nexport const HyphenUnderscore = styled.div<{ os: string }>(props => {\n const {\n os, theme: { app: { white03 } }\n } = props;\n\n return css`\n position: absolute;\n top: 0;\n left: 0;\n\n &:before, &:after {\n position: absolute;\n content: '';\n border: 1px solid ${white03};\n }\n // underscore\n &:before {\n top: 9px;\n left: ${os === 'mac' ? '15px' : '12px'};\n width: 13px;\n }\n // hyphen\n &:after {\n top: 24px;\n left: ${os === 'mac' ? '18px' : '12px'};\n width: 7px;\n }\n `;\n});\n","export default \"https://cdn.questicon.mathletics.com/assets/images/command-fac83732018bd5d45153722ebbbc92b4.svg\";","import {\n Modal,\n ModalOverlay,\n ModalContent,\n ModalBody,\n Button,\n ModalFooter,\n useTheme,\n Box,\n Image,\n Flex,\n Circle\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport keycap from '../../../../assets/images/keycap.png';\nimport { lokalisation } from '../../../helpers/lokalisation';\nimport { useAudioEffectsContext } from '../../audio/provider/audio-effects-provider';\nimport {\n Command,\n Ctrl,\n HyphenUnderscore, KeycapWrapper\n} from './zoom-out.styled';\nimport { ZoomOutModalProps } from './zoom-out.types';\n\nexport const ZoomOutModal = ({\n isOpen,\n onClose\n}: ZoomOutModalProps) => {\n const {\n buttonTxt, zoomOut\n } = lokalisation();\n const theme = useTheme();\n const { playClick } = useAudioEffectsContext();\n const handleOnClose = () => {\n playClick();\n onClose();\n };\n const os = window.navigator?.userAgent?.includes('Mac') ? 'mac' : 'other';\n\n return (\n \n \n \n \n \n {zoomOut.heading}\n \n \n {zoomOut.content.map((content, index) => {\n switch (index) {\n case 1:\n return (\n \n {content}\n {os === 'mac' ? : }\n \n );\n case 3:\n return (\n \n {content}\n \n \n );\n case 5:\n return  {content} ;\n default:\n return {content};\n }\n })}\n \n \n \n \n handleOnClose()}\n py={'6px'}\n w={'100%'}\n fontSize={'16px'}\n fontWeight={'500'}\n zIndex={1}\n >\n {buttonTxt.gotIt}\n \n \n \n \n \n );\n};\n","import {\n Button, Image, useDisclosure\n} from '@chakra-ui/react';\nimport { deviceType } from 'detect-it';\nimport React, {\n useEffect, useState\n} from 'react';\nimport { useSelector } from 'react-redux';\n\nimport zoomIn from '../../../assets/images/zoom-in.svg';\nimport { AppState } from '../../app/store/store.types';\nimport { useAudioEffectsContext } from '../../components/audio/provider/audio-effects-provider';\nimport { ZoomOutModal } from '../../components/modals/zoom-out/zoom-out';\n\nconst SHOW_MODAL_DELAY = 3000;\nconst SHOW_MODAL_LIMIT = 2;\nconst MIN_WIDTH = 1400;\nconst SESSION_MODAL_SHOWN_KEY = 'zoomOutSessionModalShown';\nconst MODAL_SHOWN_COUNT_KEY = 'zoomOutModalShownCount';\n\nexport const ZoomOut = () => {\n const activityState = useSelector(state => state.activityState);\n const { progress } = activityState;\n const { ...chakraModalProps } = useDisclosure();\n const { playClick } = useAudioEffectsContext();\n const isIntroOrFirstQuestion = progress?.stepsCompleted === 0 && progress.attempt === 1;\n const isCorrectDevice = deviceType === 'mouseOnly';\n const hasShownSessionModal = Boolean(sessionStorage.getItem(SESSION_MODAL_SHOWN_KEY));\n const modalShownCount = Number(localStorage.getItem(MODAL_SHOWN_COUNT_KEY) ?? 0);\n const exceededModalShownCount = modalShownCount >= SHOW_MODAL_LIMIT;\n const shouldZoomOut = () => {\n let result = false;\n\n if (!isCorrectDevice || innerWidth > MIN_WIDTH) {\n return result;\n }\n // inner/outerWidth is the same in FF for most zoom levels\n if (navigator.userAgent.includes('Firefox')) {\n if (devicePixelRatio > 1) {\n const HiDPIsBelow100P = [\n // retina\n 1.33, 1.58, 1.82,\n // windows scale\n // 125% scale at 90% zoom\n 1.13\n // 150% scale at 90% zoom = 125% scale at 110% zoom = 1.3636363636363635\n // 150% scale at 80% zoom = 100% scale at 120% zoom = 1.2\n ];\n\n if (devicePixelRatio < 2 && !HiDPIsBelow100P.includes(Math.round(devicePixelRatio * 100) / 100)) {\n result = true;\n } else if (devicePixelRatio >= 2) {\n result = true;\n }\n }\n // dpr for safari unchanged on zoom\n } else if (navigator.userAgent.includes('Safari')) {\n if (outerWidth >= innerWidth && devicePixelRatio > 1) {\n result = true;\n } else if (outerWidth > innerWidth && devicePixelRatio === 1) {\n result = true;\n }\n } else if (outerWidth >= innerWidth && devicePixelRatio > 1) {\n result = true;\n }\n\n return result;\n };\n const getShowButtonState = () => {\n return shouldZoomOut() && exceededModalShownCount && !hasShownSessionModal;\n };\n const [showButton, setShowButton] = useState(getShowButtonState);\n const onClose = () => {\n chakraModalProps.onClose();\n setShowButton(getShowButtonState());\n };\n const showModal = () => {\n chakraModalProps.onOpen();\n setShowButton(false);\n };\n\n useEffect(() => {\n let timeoutID: ReturnType;\n\n const handleZoomChange = () => {\n setShowButton(getShowButtonState());\n };\n\n if (isIntroOrFirstQuestion\n && !exceededModalShownCount\n && !hasShownSessionModal\n && shouldZoomOut()\n ) {\n timeoutID = setTimeout(() => {\n showModal();\n sessionStorage.setItem(SESSION_MODAL_SHOWN_KEY, 'true');\n localStorage.setItem(MODAL_SHOWN_COUNT_KEY, (modalShownCount + 1).toString());\n }, SHOW_MODAL_DELAY);\n }\n addEventListener('resize', handleZoomChange);\n\n return () => {\n removeEventListener('resize', handleZoomChange);\n clearTimeout(timeoutID);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n {showButton && isIntroOrFirstQuestion &&\n {\n playClick();\n showModal();\n }}\n tabIndex={-1}\n >\n \n \n }\n \n \n );\n};\n","import { Button } from '@chakra-ui/react';\nimport styled from '@emotion/styled';\n\nimport { pickThemeVar } from '../../styles/theme/app-theme';\nimport AppImage from '../app-image/app-image';\n\nexport const HeaderStyled = styled.div`\n min-height: ${pickThemeVar('headerHeight')};\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 96%;\n margin: 0 2%;\n z-index: 100;\n padding-top: 20px;\n padding-bottom: 10px;\n box-sizing: border-box;\n\n .header-btn-wrapper {\n order: 3;\n padding-left: 2%;\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n min-height: ${pickThemeVar('headerHeightMobile')};\n flex-wrap: wrap;\n justify-content: space-between;\n\n .header-btn-wrapper {\n order: 2;\n }\n }\n`;\n\nexport const HeaderTextWrapper = styled.div`\n order: 2;\n min-width: 0;\n padding-top: 0;\n flex-basis: 100%;\n\n .header-title {\n width: fit-content;\n max-width: 100%;\n font-weight: 700;\n\n span {\n white-space: break-spaces;\n overflow: hidden;\n }\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n padding-top: 10px;\n order: 3;\n max-widtH: 100%;\n\n .header-title {\n span {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n }\n }\n`;\n\nexport const LogoTitleWrapper = styled.div`\n display: flex;\n align-items: center;\n max-width: 100%;\n height: 32px;\n order: 1;\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n order: 1;\n flex-direction: column;\n align-items: flex-start;\n height: unset;\n }\n`;\n\nexport const LogoStyled = styled(AppImage)`\n width: 135px;\n height: 48px;\n margin-right: 48px;\n flex-shrink: 0;\n \n /**\n LANDSCAPE\n */\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n width: 112px;\n height: 40px;\n margin-right: 10px;\n }\n /**\n IPHONE\n */\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n width: 92px;\n height: 32px;\n margin-right: 10px;\n }\n`;\n\nexport const ProgressBtnStyled = styled(Button)`\n .chakra-button__icon {\n margin: unset;\n }\n\n svg {\n path {\n &[fill=\"#4DC4EF\"] {\n fill: ${pickThemeVar('blue02')};\n }\n &[fill=\"white\"] {\n fill: transparent;\n }\n }\n }\n\n @media (min-width: ${pickThemeVar('breakPoint')}) {\n display: none;\n }\n`;\n","import { ReadAloud } from '@3plearning/question-components-library';\nimport {\n Box, Button, ButtonGroup, Flex, Text, useDisclosure, useTheme\n} from '@chakra-ui/react';\nimport React, {\n useEffect, useRef\n} from 'react';\nimport {\n useDispatch, useSelector\n} from 'react-redux';\nimport { useParams } from 'react-router-dom';\n\nimport { AppState } from '../../app/store/store.types';\nimport ExitWithoutCompletingModal from '../../components/modals/exit-without-completing/exit-without-completing';\nimport {\n setReadAloudLocale, setStudentState\n} from '../../containers/question-container/store/question-actions';\nimport { ZoomOut } from '../../containers/zoom-out/zoom-out';\nimport {\n QuestionSetType, STUDENT_STATES\n} from '../../helpers/enums';\nimport { lokalisation } from '../../helpers/lokalisation';\nimport { getQueryParam } from '../../helpers/utils';\nimport { MilestoneTransitionType } from '../../routes/routes.types';\nimport AppImage from '../app-image/app-image';\nimport { useAudioEffectsContext } from '../audio/provider/audio-effects-provider';\nimport {\n LogoStyled, HeaderStyled, ProgressBtnStyled, LogoTitleWrapper, HeaderTextWrapper\n\n} from './header.styled';\n\ninterface HeaderProps {\n showReadAloudBtn?: boolean\n showExitBtn?: boolean\n showZoomOutBtn?: boolean\n}\n\nexport const Header = ({\n showReadAloudBtn = false, showExitBtn = false, showZoomOutBtn = false\n}: HeaderProps) => {\n const dispatch = useDispatch();\n const {\n buttonTxt: { exit },\n labelTxt: { readAloud }\n } = lokalisation();\n const theme = useTheme();\n const activityState = useSelector(state => state.activityState);\n const {\n strandName,\n studentState,\n unitOfWork,\n questionSetType,\n readAloudLocale,\n readAloudEnabled,\n activity,\n isWorkedSolutionActivated,\n updatedProgress\n } = activityState;\n const { type } = useParams();\n const isShowProgressBtnVisible = questionSetType === QuestionSetType.questiconActivity && studentState === 'question' && !type;\n const { ...chakraModalProps } = useDisclosure();\n const showProgress = () => {\n dispatch(setStudentState(STUDENT_STATES.resume));\n };\n const { playClick } = useAudioEffectsContext();\n const defaultReadAloudLocale = getQueryParam('locale') || 'en-AU';\n const headerRef = useRef(null);\n\n useEffect(() => {\n setTimeout(() => {\n if (headerRef.current) {\n headerRef.current.scrollIntoView(true);\n }\n });\n // scroll to top of page for mobile on isWorkedSolutionActivated change to hide height transition from user\n }, [activity, type, isWorkedSolutionActivated]);\n\n return (\n \n \n \n \n \n
\n {(questionSetType !== QuestionSetType.questiconActivity) ? \n {strandName}\n {strandName && unitOfWork && |}\n {unitOfWork &&\n \n {unitOfWork}\n }\n : \n {strandName}\n {(strandName) && <> | }\n {unitOfWork && unitOfWork}\n \n }\n
\n
\n \n \n {showZoomOutBtn && }\n {isShowProgressBtnVisible &&\n {\n playClick();\n showProgress();\n }}\n leftIcon={}\n tabIndex={-1}\n />}\n {showReadAloudBtn &&\n {\n dispatch(setReadAloudLocale(readAloudLocale ?? defaultReadAloudLocale, true));\n }}\n onToggleEnableState={(readAloudEnabled) => {\n dispatch(setReadAloudLocale(readAloudLocale ?? defaultReadAloudLocale, !readAloudEnabled));\n }}\n popoverLabel={readAloud}\n selectedLocale={readAloudLocale}\n disabled={!readAloudEnabled}\n data-testid={'header-read-aloud-button'}\n />\n }\n {showExitBtn &&\n {\n playClick();\n chakraModalProps.onOpen();\n }}\n tabIndex={-1}\n >\n {exit}\n \n }\n \n \n \n
\n );\n};\n","import { Progress } from '../../../../../containers/question-container/sub-components/question-activity/question-activity.types';\nimport { TotalStats } from '../summary.types';\n\nexport const ratings = [\n {\n from: 0,\n to: 7,\n numRatingStars: 0.5,\n numRatingStarAnims: 1\n },\n {\n from: 8,\n to: 12,\n numRatingStars: 1,\n numRatingStarAnims: 1\n },\n {\n from: 13,\n to: 17,\n numRatingStars: 1.5,\n numRatingStarAnims: 2\n },\n {\n from: 18,\n to: 22,\n numRatingStars: 2,\n numRatingStarAnims: 2\n },\n {\n from: 23,\n to: 27,\n numRatingStars: 2.5,\n numRatingStarAnims: 3\n },\n {\n from: 28,\n to: 30,\n numRatingStars: 3,\n numRatingStarAnims: 3\n }\n];\n\ntype GetStarTypeProps = {\n totalStars: number\n index: number\n};\n\nexport const getStarRatingNum = (totalStars: number) => {\n const rating = ratings.find(({\n from, to\n }) => totalStars >= from && totalStars <= to);\n const numRatingStars = rating?.numRatingStars;\n const numRatingStarAnims = rating?.numRatingStarAnims;\n\n return {\n numRatingStars,\n numRatingStarAnims\n };\n};\n\nexport const getStarType = ({\n totalStars, index\n}: GetStarTypeProps) => {\n const { numRatingStars } = getStarRatingNum(totalStars);\n\n if (!numRatingStars) {\n return undefined;\n }\n switch (index) {\n case 0: {\n if (numRatingStars === 0.5) {\n return 'Half';\n }\n\n return 'Full';\n }\n case 1: {\n if (numRatingStars === 1.5) {\n return 'Half';\n } else if (numRatingStars > 1.5) {\n return 'Full';\n }\n\n return undefined;\n }\n case 2: {\n if (numRatingStars === 2.5) {\n return 'Half';\n } else if (numRatingStars > 2.5) {\n return 'Full';\n }\n\n return undefined;\n }\n }\n};\n\ntype GetFinalTotals = {\n progress: Progress | undefined\n};\n\nexport const getFinalTotals = ({ progress }: GetFinalTotals) => {\n const highestCorrectByStrength = [\n [2, 3, 5],\n [1, 2, 3],\n [0, 1, 2]\n ];\n const initTotal: TotalStats = {\n correct: 0,\n stars: 0\n };\n /*\n * Build an array of milestone data as an array of type TotalStats\n */\n const sectionTotals = progress?.points?.map(({\n pointsPerQuestion, stars: s\n }, section) => {\n const sectionTotal = s.reduce((total, startValue) => ({\n correct: total.correct + +Boolean(startValue),\n stars: total.stars + startValue,\n points: [\n ...((total.points) || []),\n {\n pointsEarned: startValue !== 0 ? pointsPerQuestion : 0,\n isCorrect: startValue !== 0\n }]\n }), initTotal);\n\n return ({\n ...sectionTotal,\n questions: s.length,\n strength: highestCorrectByStrength[section].findIndex((c) => sectionTotal.correct <= c)\n });\n }) || [];\n /*\n * Build a single TotalStats object, finalTotal, by reducing the above array of type TotalStats\n */\n const finalTotal = sectionTotals.reduce((total, sectionTotal) => ({\n correct: total.correct + sectionTotal.correct,\n stars: total.stars + sectionTotal.stars,\n questions: (total.questions || 0) + (sectionTotal?.questions || 0)\n }), initTotal);\n\n return {\n finalTotal,\n sectionTotals\n };\n};\n","import {\n useEffect, useState, useMemo, useCallback\n} from 'react';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { AppState } from '../../../app/store/store.types';\nimport {\n QuestionSetType, STUDENT_STATES, TransitionScreen\n} from '../../../helpers/enums';\nimport { isDefined } from '../../../helpers/utils';\nimport { ROUTES } from '../../routes';\n\nexport const FIRST_MILESTONE = 5;\n\nexport const SECOND_MILESTONE = 8;\n\nexport const useMilestoneProgress = () => {\n const history = useHistory();\n const activityState = useSelector(state => state.activityState);\n const {\n numQuestionSteps, questionSetType, studentState,\n progress, updatedProgress, questionsCount\n } = activityState;\n const [allQuestionsComplete, setAllQuestionsComplete] = useState(false);\n const [questionNumber, setQuestionNumber] = useState(0);\n const isMilestoneComplete = useMemo(() => {\n const updatedStepsCompleted = updatedProgress?.stepsCompleted;\n const updatedAttempt = updatedProgress?.attempt;\n\n if (updatedStepsCompleted && updatedAttempt\n && updatedAttempt === 1\n && [FIRST_MILESTONE, SECOND_MILESTONE].includes(updatedStepsCompleted)\n && questionSetType === QuestionSetType.questiconActivity\n ) {\n return true;\n }\n\n return false;\n }, [updatedProgress?.stepsCompleted, updatedProgress?.attempt, questionSetType]);\n const isQuestComplete = studentState === STUDENT_STATES.summary;\n const navigateToTransitionScreen = (): void => {\n const transitionScreenEnum = updatedProgress?.stepsCompleted === FIRST_MILESTONE ?\n TransitionScreen.startReasoning : TransitionScreen.startProblemSolving;\n\n history.replace(`${ROUTES.milestoneTransition}/${transitionScreenEnum}`);\n };\n const navigateToSummaryScreen = useCallback((): void => {\n let summaryTransitionScreenEnum;\n\n if (questionSetType === QuestionSetType.questiconActivity) {\n summaryTransitionScreenEnum = TransitionScreen.summaryScreen;\n } else if(questionSetType === QuestionSetType.diagnostics) {\n summaryTransitionScreenEnum = TransitionScreen.diagnosticsSummaryScreen;\n } else if(questionSetType === QuestionSetType.unitTest) {\n summaryTransitionScreenEnum = TransitionScreen.unitTestSummaryScreen;\n }\n\n history.replace(`${ROUTES.milestoneTransition}/${summaryTransitionScreenEnum}`);\n }, [history, questionSetType]);\n\n useEffect(() => {\n isQuestComplete && navigateToSummaryScreen();\n }, [isQuestComplete, navigateToSummaryScreen]);\n /*\n * QUESTION NUMBER\n */\n useEffect(() => {\n const { stepsCompleted } = progress || {};\n\n let questionTotal = numQuestionSteps;\n\n if (questionSetType === QuestionSetType.unitTest) {\n questionTotal = questionsCount;\n }\n\n if (isDefined(stepsCompleted) && isDefined(questionTotal)) {\n setQuestionNumber(stepsCompleted < questionTotal ? stepsCompleted + 1 : questionTotal);\n }\n }, [progress, numQuestionSteps, questionSetType, questionsCount]);\n /*\n * ALL QUESTIONS COMPLETE\n */\n useEffect(() => {\n const { stepsCompleted } = progress || {};\n\n if (isDefined(stepsCompleted) && isDefined(numQuestionSteps)) {\n setAllQuestionsComplete(stepsCompleted === numQuestionSteps);\n }\n }, [progress, numQuestionSteps]);\n\n return {\n questionNumber,\n allQuestionsComplete,\n isMilestoneComplete,\n navigateToTransitionScreen\n };\n};\n","import styled from '@emotion/styled';\n\nimport {\n pickThemeFlex, pickThemeVar\n} from '../../styles/theme/app-theme';\n\nexport const QuestionContainerStyled = styled.div`\n position: relative;\n margin: 0 32px;\n max-height: 100%;\n min-height: min(100%, ${pickThemeVar('progressPanelHeight')});\n width: calc(100% - (2 * ${pickThemeVar('questionContainerMargin')}));\n display: flex;\n flex-direction: row-reverse;\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n margin: 0 24px 0 24px;\n width: calc(100% - 48px);\n }\n\n @media (max-width: ${pickThemeVar('breakPoint')}) {\n position: absolute;\n top: 0;\n left: 0;\n ${pickThemeFlex('flexColumnCentered')};\n width: 100%;\n height: 100%;\n margin: unset;\n }\n`;\n","import {\n useEffect, useState\n} from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../../app/store/store.types';\nimport { MAX_ATTEMPTS } from '../../../helpers/constants';\nimport {\n QuestionSetType, STUDENT_STATES\n} from '../../../helpers/enums';\nimport { isDefined } from '../../../helpers/utils';\nimport { Progress } from '../sub-components/question-activity/question-activity.types';\n\nexport const useProgressActivity = () => {\n const activityState = useSelector(state => state.activityState);\n const {\n progress,\n updatedProgress,\n validation,\n studentState,\n questionSetType,\n questName,\n playCorrectStars\n } = activityState;\n /*\n * PROGRESS ATTEMPT NUM, QUESTION ANSWERED, IS CORRECT\n */\n const progressAttempt = progress?.attempt || 0;\n const [questionAnswered, setQuestionAnswered] = useState(false);\n const [questionCorrect, setQuestionCorrect] = useState(false);\n const [showProgress, setShowProgress] = useState(false);\n const [progressData, setProgressData] = useState();\n\n /*\n * DETERMINE PROGRESS DATA SOURCE\n */\n useEffect(() => {\n if (isDefined(progressAttempt)) {\n let useUpdatedData;\n\n const maxAttempts = questionSetType === QuestionSetType.questiconActivity ? MAX_ATTEMPTS : 1;\n\n if (isDefined(validation)) {\n setQuestionAnswered(true);\n setQuestionCorrect(validation.isCorrect);\n useUpdatedData = progressAttempt === maxAttempts || validation.isCorrect;\n } else {\n setQuestionAnswered(false);\n useUpdatedData = false;\n }\n\n setProgressData(useUpdatedData ? updatedProgress : progress);\n }\n }, [progress, progressAttempt, updatedProgress, validation, questionSetType]);\n\n /*\n * SHOW PROGRESS IN QUESTION STATE\n */\n useEffect(() => {\n if (isDefined(studentState)) {\n setShowProgress(studentState === STUDENT_STATES.question);\n }\n }, [studentState]);\n\n return {\n questionAnswered,\n questionCorrect,\n progressData,\n showProgress,\n progressAttempt,\n questName,\n playCorrectStars,\n questionSetType,\n questionsCount: activityState.questionsCount\n };\n};\n","import { isDefined } from '../../../../../helpers/utils';\nimport { ThemeProps } from '../../../../../styles/theme/app-theme';\nimport { QuestionProgressStyleProps } from '../../../question-container.types';\nimport { Progress } from '../../question-activity/question-activity.types';\n\nexport const attemptStatusUtil = () => {\n /*\n * DETERMINE STAR STYLE\n */\n const getStarStyle = ({\n questionProgress, attemptNum\n }: QuestionProgressStyleProps) => {\n const { progressAttempt } = questionProgress;\n\n let greyStar = false;\n\n if(isDefined(attemptNum)) {\n if (attemptNum < progressAttempt) {\n greyStar = true;\n }\n }\n\n return { greyStar };\n };\n /*\n * DETERMINE SURROUNDING CAPSULE STYLE\n */\n const getCapsuleStyle = ({\n questionProgress, theme\n }: QuestionProgressStyleProps & ThemeProps) => {\n const {\n questionAnswered,\n questionCorrect,\n progressAttempt\n } = questionProgress;\n const { app } = theme;\n\n let borderColour = app.neutral200;\n let capsuleWidth, leftPos;\n\n if (isDefined(progressAttempt)){\n switch (progressAttempt) {\n case 1:\n capsuleWidth ='84px';\n leftPos = '0';\n break;\n case 2:\n capsuleWidth ='56px';\n leftPos = '28px';\n break;\n case 3:\n capsuleWidth ='28px';\n leftPos = '56px';\n break;\n }\n\n if (questionAnswered) {\n if (questionCorrect) {\n borderColour = app.green01;\n } else {\n borderColour = app.red02;\n }\n }\n }\n\n return {\n capsuleWidth,\n borderColour,\n leftPos\n };\n };\n\n return {\n getStarStyle,\n getCapsuleStyle\n };\n};\n\nexport const getStarsArray = (progress: Progress) => {\n let stepArray:number[] = [];\n\n const {\n points, stepsCompleted\n } = progress;\n\n if (isDefined(points) && isDefined(stepsCompleted)) {\n stepArray = points.map((section) => section.stars).flat();\n }\n\n return stepArray;\n};\n","/* istanbul ignore file */\nimport { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport {\n MilestoneState, PROGRESS_STATE\n} from '../../../../helpers/enums';\nimport {\n pickThemeFlex, ThemeProps, APP_THEME, pickThemeVar\n} from '../../../../styles/theme/app-theme';\nimport { flex } from '../../../../styles/theme/flex-mixins';\nimport { app } from '../../../../styles/theme/variables';\nimport { ProgressMilestoneProps } from './progress-milestone';\n\nconst {\n fluency, reasoning, problemSolving\n} = PROGRESS_STATE;\nconst pinIconPosition = (posProps: ProgressMilestoneProps) => {\n let leftPos: number | string = 0;\n let topPos: number | string = 0;\n\n switch (posProps.progressType) {\n case fluency:\n leftPos = 39;\n topPos = 506;\n break;\n case reasoning:\n leftPos = 124;\n topPos = 293;\n break;\n case problemSolving:\n leftPos = 71;\n topPos = 126;\n break;\n }\n leftPos = `${leftPos}px`;\n topPos = `${topPos}px`;\n\n return css`\n left: ${leftPos};\n top: ${topPos};\n `;\n};\nconst rowDirection = (props: ProgressMilestoneProps & ThemeProps) => {\n const { progressType } = props;\n\n let direction, left;\n\n if (progressType === fluency) {\n direction = flex.flexRowVerticalCentered;\n left = '2px';\n } else {\n direction = flex.flexRowReverse;\n left = '-2px';\n }\n\n return css `\n ${direction};\n \n .pin-holder {\n left: ${left};\n }\n `;\n};\nconst isActiveType = (props: ProgressMilestoneProps) => {\n const { milestoneState } = props;\n\n let bgColour = 'white', displayPin = 'flex', colour = APP_THEME.app.blue02, border, borderColor;\n\n switch (milestoneState) {\n case MilestoneState.notStarted:\n bgColour = 'rgba(0, 0, 0, 0.4)';\n displayPin = 'none';\n colour = 'white';\n break;\n case MilestoneState.inProgress:\n border = '2px solid';\n borderColor = app.blue;\n break;\n case MilestoneState.completed:\n border = '2px solid';\n borderColor = 'rgba(255, 255, 255, 0.63)';\n break;\n }\n\n return css `\n background-color: ${bgColour};\n border: ${border};\n border-color: ${borderColor};\n \n .pin-holder .pin-icon {\n display: ${displayPin};\n };\n\n .label {\n color: ${colour};\n }\n `;\n};\n\nexport const ProgressMilestoneStyled = styled.div`\n ${rowDirection};\n ${isActiveType};\n ${pinIconPosition};\n position: absolute;\n height: 24px;\n border-radius: ${props => props.milestoneState === MilestoneState.notStarted ? '14px' : '16px'};\n backdrop-filter: blur(8px);\n white-space: nowrap;\n padding: 2px;\n z-index: 1;\n\n .pin-holder {\n ${pickThemeFlex('flexColumnCentered')};\n position: relative;\n\n .pinIcon {\n position: absolute;\n bottom: 6px;\n }\n \n .tick {\n position: absolute;\n top: 2px;\n width: 11px;\n \n path {\n fill: ${pickThemeVar('darkBlue')}\n }\n }\n }\n \n .label {\n margin: 0 10px;\n position: relative;\n bottom: 1px;\n }\n\n`;\n\nconst completedMilestoneDot = (props: ProgressMilestoneProps) => {\n let border = 'none', borderColor, boxShadow = '0 2px 8px rgba(0, 51, 111, 0.241668)';\n\n const { milestoneState } = props;\n\n if (milestoneState === MilestoneState.completed) {\n border = '1px solid';\n boxShadow = 'none';\n borderColor = app.darkBlue;\n }\n\n return css`\n box-shadow: ${boxShadow};\n border: ${border};\n border-color: ${borderColor};\n `;\n};\n\nexport const WhiteDot = styled.div`\n ${completedMilestoneDot};\n background: white;\n border-radius: 10px;\n width: 18px;\n height: 18px;\n`;\n\n","import React, {\n useEffect, useState\n} from 'react';\n\nimport AppImage from '../../../../components/app-image/app-image';\nimport { AppImageTypes } from '../../../../components/app-image/app-image-types';\nimport {\n PROGRESS_STATE, MilestoneState\n} from '../../../../helpers/enums';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { isDefined } from '../../../../helpers/utils';\nimport {\n ProgressMilestoneStyled, WhiteDot\n} from './progress-milestone.styled';\n\nexport type ProgressMilestoneProps = {\n progressType?: PROGRESS_STATE\n milestoneState?: number\n};\n\nexport type ProgressMileStonePropsWithState = {\n stepsAnswered: number\n} & ProgressMilestoneProps;\n\nexport const ProgressMilestone = ({\n stepsAnswered, progressType = PROGRESS_STATE.fluency\n}: ProgressMileStonePropsWithState) => {\n const {\n fluency, reasoning, problemSolving\n } = PROGRESS_STATE;\n const [milestoneState, setMilestoneState] = useState(MilestoneState.notStarted);\n const [iconType, setIconType] = useState();\n const [label, setLabel] = useState();\n const { progressTxt } = lokalisation();\n\n useEffect(() => {\n if (isDefined(stepsAnswered)) {\n switch(progressType) {\n case fluency: {\n if (stepsAnswered >= 5) {\n setMilestoneState(MilestoneState.completed);\n setIconType('tick');\n } else {\n setMilestoneState(MilestoneState.inProgress);\n setIconType('pinIcon');\n }\n // @ts-ignore\n setLabel(progressTxt[0]);\n }\n break;\n case reasoning: {\n if (stepsAnswered >= 8) {\n setMilestoneState(MilestoneState.completed);\n setIconType('tick');\n } else if (stepsAnswered >= 5) {\n setMilestoneState(MilestoneState.inProgress);\n setIconType('pinIcon');\n } else {\n setMilestoneState(MilestoneState.notStarted);\n }\n // @ts-ignore\n setLabel(progressTxt[1]);\n }\n break;\n case problemSolving: {\n if (stepsAnswered === 10) {\n setMilestoneState(MilestoneState.completed);\n setIconType('tick');\n } else if (stepsAnswered >= 8) {\n setMilestoneState(MilestoneState.inProgress);\n setIconType('pinIcon');\n } else {\n setMilestoneState(MilestoneState.notStarted);\n }\n // @ts-ignore\n setLabel(progressTxt[2]);\n }\n break;\n }\n }\n }, [stepsAnswered, fluency, problemSolving, progressTxt, progressType, reasoning]);\n\n return (\n \n
\n
\n {iconType && }\n \n
\n
\n\n
{label}
\n \n );\n};\n","/* istanbul ignore file */\nimport { gsap } from 'gsap';\n\nimport { RefType } from '../question-container.types';\n\nconst getListRefTargets = (list: RefType[]) => list.map(item => item.current);\n\n/*\n* CANNONS TWEEN\n* */\n\nexport const showStars = (stars: RefType[], starListRef: RefType) => {\n const starsRefs = getListRefTargets(stars);\n const list = starListRef.current;\n\n gsap.timeline()\n .set(list, { transformOrigin: '50% 50%' })\n .fromTo(starsRefs,\n {\n y: 10,\n opacity: 0\n },\n {\n duration: 0.5,\n opacity: 1,\n y: 0,\n ease: 'back.out(2)',\n stagger: 0.3\n })\n .to(list,\n {\n rotation: '360',\n duration: 2,\n ease: 'back.out(2)'\n });\n};\n\ntype AnimateScore = {\n bar: HTMLDivElement\n barGold: HTMLDivElement\n score: number\n scoreNumTxt: HTMLDivElement\n callback: () => void\n};\n\nexport const animateScore = ({\n bar,\n barGold,\n scoreNumTxt,\n score,\n callback\n}: AnimateScore) => {\n const scorePercent = `${score}%`;\n const target = { val: 0 };\n const showBarGold = score >= 80;\n\n scoreNumTxt.innerHTML = '0';\n gsap.timeline()\n .add('start')\n .fromTo(bar, {\n duration: 1,\n width: '0px',\n ease: 'power1.in',\n delay: 1\n }, {\n duration: 2,\n width: `${scorePercent}`,\n stagger: 1,\n onComplete: () => {\n callback();\n }\n }, 'start')\n .to(target, {\n duration: 2,\n val: score,\n onUpdate: function () {\n scoreNumTxt.textContent = Math.round(target.val).toString();\n }\n }, 'start')\n .to(barGold, {\n opacity: showBarGold ? 1 : 0,\n duration: 1\n });\n};\n","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { MilestoneState } from '../../../../helpers/enums';\nimport {\n pickThemeFlex, ThemeProps\n} from '../../../../styles/theme/app-theme';\nimport {\n ProgressActivityProps,\n ProgressStepProps, ProgressStepStyledProps, RefType\n} from '../../question-container.types';\n\nconst bgStepStyle = (props: ProgressStepStyledProps & ProgressActivityProps & ThemeProps) => {\n let bgColour, border, borderColour, color, fontSize, diameter;\n\n const {\n questionNumber, questionNumIndex, theme: { app }\n } = props;\n\n switch (props.stepState) {\n case MilestoneState.notStarted:\n borderColour = 'white';\n color = 'white';\n bgColour = 'rgba(0, 25, 55, 0.5)';\n border = 'solid 1px';\n diameter = '22px';\n fontSize = '14px';\n break;\n case MilestoneState.inProgress:\n borderColour = 'white';\n color = 'white';\n if (questionNumber === questionNumIndex + 1) {\n bgColour = app.blue02;\n border = 'solid 2px';\n fontSize = '18px';\n diameter = '28px';\n } else {\n bgColour = 'rgba(0, 25, 55, 0.5)';\n border = 'solid 1px';\n diameter = '22px';\n fontSize = '14px';\n }\n break;\n case MilestoneState.completed:\n bgColour = 'white';\n border = 'solid 1.5px';\n borderColour = props.numStars === 0 ? app.red03 : app.green02;\n color = props.numStars === 0 ? app.red04 : app.green04;\n diameter = '26px';\n fontSize = '15px';\n break;\n }\n\n return css`\n background: ${bgColour};\n border: ${border};\n border-color: ${borderColour};\n color: ${color};\n font-size: ${fontSize};\n width: ${diameter};\n height: ${diameter};\n `;\n};\nconst stepPosition = (props: ProgressStepProps & ProgressStepStyledProps) => {\n const { questionNumIndex } = props;\n\n let leftPos: number | string = 0;\n let topPos: number | string = 0;\n\n switch (questionNumIndex + 1) {\n case 1:\n leftPos = 215;\n topPos = 462;\n break;\n case 2:\n leftPos = 120;\n topPos = 431;\n break;\n case 3:\n leftPos = 25;\n topPos = 393;\n break;\n case 4:\n leftPos = 62;\n topPos = 348;\n break;\n case 5:\n leftPos = 185;\n topPos = 336;\n break;\n case 6:\n leftPos = 41;\n topPos = 263;\n break;\n case 7:\n leftPos = 186;\n topPos = 213;\n break;\n case 8:\n leftPos = 94;\n topPos = 179;\n break;\n case 9:\n leftPos = 99;\n topPos = 62;\n break;\n case 10:\n leftPos = 155;\n topPos = 19;\n break;\n }\n leftPos = `${leftPos}px`;\n topPos = `${topPos}px`;\n\n return css`\n position: absolute;\n left: ${leftPos};\n top: ${topPos};\n `;\n};\nconst bgDiscProps = (props: ProgressStepStyledProps) => {\n let width = '0', height = '0', background = 'rgba(0, 0, 0, 0.24)';\n\n const { stepState } = props;\n const {\n notStarted, completed, inProgress\n } = MilestoneState;\n\n switch (stepState) {\n case notStarted:\n width = '24px';\n height = '24px';\n break;\n case inProgress:\n width = '34px';\n height = '34px';\n background = 'rgba(255, 255, 255, 0.24)';\n break;\n case completed:\n width = '44px';\n height = '44px';\n break;\n }\n\n return {\n width,\n height,\n background\n };\n};\n\ntype StarPosType = {\n numStars: number\n nthType: number\n};\nconst starPos = ({\n nthType, numStars\n}: StarPosType) => {\n let top = '0px', left = '0px';\n\n switch (numStars) {\n case 1:\n top = '-10px';\n left = '10px';\n break;\n case 2:\n switch (nthType) {\n case 1:\n top = '-9px';\n left = '0px';\n break;\n case 2:\n top = '-9px';\n left = '22px';\n break;\n }\n break;\n case 3:\n switch (nthType) {\n case 1:\n top = '-4px';\n left = '-7px';\n break;\n case 2:\n top = '-10px';\n left = '10px';\n break;\n case 3:\n top = '-4px';\n left = '28px';\n break;\n }\n break;\n }\n\n return {\n top,\n left\n };\n};\n\nexport const ProgressStepStyled = styled.div`\n width: 44px;\n height: 44px;\n\n ${stepPosition};\n\n .step-content {\n ${pickThemeFlex('flexChildCentered')};\n position: relative;\n width: 100%;\n height: 100%;\n\n .bg-disc {\n ${pickThemeFlex('flexChildCentered')};\n ${bgDiscProps};\n border-radius: 50%;\n\n .label {\n ${pickThemeFlex('flexChildCentered')};\n ${bgStepStyle};\n z-index: 1;\n border-radius: 50%;\n\n > span {\n position: relative;\n bottom: ${props => props.stepState === MilestoneState.inProgress ? '2px' : '1px'};\n }\n }\n }\n\n .star-list {\n position: absolute;\n width: 44px;\n height: 44px;\n }\n }\n`;\n\ntype StarHolderProps = {\n key: number\n ref: RefType\n isCurrentStep: boolean\n numStars: number\n} ;\n\nexport const StarHolderStyled = styled.div(props => {\n const {\n numStars, isCurrentStep\n } = props;\n\n return css`\n position: absolute;\n width: 22px;\n height: 19px;\n z-index: 1;\n opacity: ${isCurrentStep ? 0 : 1};\n\n .star {\n width: 22px;\n height: 19px;\n filter: drop-shadow(2px 2px 2px #525352);\n }\n\n :nth-of-type(1) {\n ${starPos({\n numStars,\n nthType: 1\n })}\n }\n\n :nth-of-type(2) {\n ${starPos({\n numStars,\n nthType: 2\n })}\n }\n\n :nth-of-type(3) {\n ${starPos({\n numStars,\n nthType: 3\n })}\n }\n `;\n});\n","import React, {\n useEffect, useMemo, useRef, useState\n} from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../../../app/store/store.types';\nimport AppImage from '../../../../components/app-image/app-image';\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport {\n MilestoneState, QuestionProgressState\n} from '../../../../helpers/enums';\nimport { isDefined } from '../../../../helpers/utils';\nimport { showStars } from '../../anims/anims';\nimport {\n ProgressStepPropsWithState, RefType\n} from '../../question-container.types';\nimport {\n ProgressStepStyled, StarHolderStyled\n} from './progress-step.styled';\n\nexport const ProgressStep = ({\n stepsAnswered, questionNumIndex, numStars, questionNumber\n}: ProgressStepPropsWithState) => {\n const [starShapes, setStarShapes] = useState([]);\n const starListRef = useRef(null);\n const firstStarRef = useRef(null);\n const secondStarRef = useRef(null);\n const thirdStarRef = useRef(null);\n /*\n * STARS REFS\n */\n const starsRefs: RefType[] = useMemo(() => ([firstStarRef, secondStarRef, thirdStarRef]), []);\n const activityState = useSelector(state => state.activityState);\n const {\n progress, playCorrectStars, questionProgressState\n } = activityState;\n const { playCorrectStarsAudio } = useAudioEffectsContext();\n\n let currentQuestionNum: number | undefined;\n\n if(progress){\n const { stepsCompleted } = progress;\n\n currentQuestionNum = stepsCompleted;\n }\n const isCurrentStep = questionNumber === questionNumIndex + 1;\n\n useEffect(() => {\n if (starShapes && starShapes.length > 0) {\n if (firstStarRef.current && starListRef.current) {\n const starsRefsList = [];\n\n for (let i = 0; i < starShapes.length; i++) {\n starsRefsList.push(starsRefs[i]);\n }\n\n if(questionProgressState === QuestionProgressState.resetUnanswered\n || questionProgressState === QuestionProgressState.nextUnanswered) {\n showStars(starsRefsList, starListRef);\n } else if (playCorrectStars && isCurrentStep) {\n showStars(starsRefsList, starListRef);\n playCorrectStarsAudio(starShapes.length);\n }\n }\n }\n }, [currentQuestionNum, isCurrentStep, questionNumIndex, playCorrectStars, playCorrectStarsAudio, questionNumber,\n questionProgressState, starShapes, starsRefs]);\n\n /*\n * STEP STATE\n */\n const calculateStepState = () => {\n if (isDefined(stepsAnswered)) {\n if (questionNumIndex + 1 <= stepsAnswered) {\n return MilestoneState.completed;\n }\n if (questionNumIndex === stepsAnswered) {\n return MilestoneState.inProgress;\n }\n }\n\n return MilestoneState.notStarted;\n };\n const stepState = calculateStepState();\n\n /*\n * STARS\n */\n useEffect(() => {\n if (stepState !== MilestoneState.notStarted) {\n const starList = [];\n\n for (let i = 0; i < numStars; i++) {\n starList.push(\n \n \n \n );\n }\n setStarShapes(starList);\n }\n }, [isCurrentStep, questionNumIndex, numStars, starsRefs, stepState]);\n\n return (\n \n
\n
\n
{questionNumIndex + 1}
\n
\n {stepState !== MilestoneState.notStarted &&\n
\n {starShapes}\n
\n }\n
\n \n );\n};\n","import styled from '@emotion/styled';\n\nimport {\n pickThemeFlex, pickThemeVar\n} from '../../../../styles/theme/app-theme';\n\nexport const ProgressActivityStyled = styled.div`\n width: ${pickThemeVar('progressPanelWidth')};\n margin-left: ${pickThemeVar('progressPanelLeftMargin')};\n display: ${(props: { showProgress: boolean }) => props.showProgress ? '' : 'none'};\n\n .progress-content {\n position: relative;\n\n .progress-activity-frame {\n width: ${pickThemeVar('progressPanelWidth')};\n height: ${pickThemeVar('progressPanelHeight')};\n background: linear-gradient(124.19deg, rgba(121, 161, 250, 0.0001) 3.22%, rgba(255, 255, 255, 0.0001) 22.08%);\n mix-blend-mode: normal;\n box-shadow: inset 0 1px 64px 1px #FFFFFF;\n border-radius: 40px;\n }\n\n .progress-path { // contains svg app image of dashed path\n position: absolute;\n top: 46px;\n left: 40px;\n width: 205px;\n height: 484px;\n }\n\n\n .summit {\n ${pickThemeFlex('flexChildCentered')};\n\n position: absolute;\n bottom: 416px;\n left: 14px;\n width: 238px;\n z-index: 0;\n\n .summit-line {\n width: 100%;\n border-bottom: solid 1px white;\n }\n\n .summit-label {\n position: absolute;\n bottom: 9px;\n left: 0;\n font-size: 12px;\n color: white;\n text-shadow: 0px 2px 8px rgba(0, 25, 55, 0.72);\n }\n }\n }\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n margin-left: 24px;\n }\n\n @media (max-width: ${pickThemeVar('breakPoint')}) {\n position: relative;\n width: 100%;\n transition: all 0.5s;\n margin-left: 0;\n ${pickThemeFlex('flexColumnCentered')};\n\n .progress-content {\n .progress-activity-frame {\n position: relative;\n width: 335px;\n height: 558px;\n }\n }\n }\n`;\n\n","import React, {\n useMemo, useState, useEffect\n} from 'react';\n\nimport AppImage from '../../../../components/app-image/app-image';\nimport { PROGRESS_STATE } from '../../../../helpers/enums';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { isDefined } from '../../../../helpers/utils';\nimport { useProgressActivity } from '../../hooks/use-progress-activity';\nimport { ProgressActivityProps } from '../../question-container.types';\nimport { getStarsArray } from '../attempt-status/utils/attempt-status-util';\nimport { ProgressMilestone } from '../progress-milestone/progress-milestone';\nimport { ProgressStep } from '../progress-step/progress-step';\nimport { ProgressActivityStyled } from './progress-activity.styled';\n\nexport const ProgressActivity = ({ questionNumber }:ProgressActivityProps) => {\n const { labelTxt } = lokalisation();\n const [stepsAnswered, setStepsAnswered] = useState();\n const [questionStars, setQuestionStars] = useState();\n /*\n * USE PROGRESS ACTIVITY HOOK\n */\n const {\n progressData, showProgress\n } = useProgressActivity();\n /*\n * PROGRESS STEPS\n */\n const progressSteps = useMemo(() => {\n if (isDefined(stepsAnswered) && isDefined(questionStars)) {\n return questionStars.map((stars, index) => {\n return (\n \n );\n });\n }\n\n return null;\n }, [questionNumber, questionStars, stepsAnswered]);\n\n /*\n * SET NUM ANSWERS AND NUM STARS ARRAY\n */\n\n useEffect(() => {\n if (isDefined(progressData)) {\n const { stepsCompleted } = progressData;\n\n setStepsAnswered(stepsCompleted);\n setQuestionStars(getStarsArray(progressData));\n }\n }, [progressData]);\n\n return(\n \n
\n
\n \n
\n
{labelTxt.summit}
\n
\n
\n {Object.keys(PROGRESS_STATE).filter(key => isNaN(Number(key))).map(\n (state, value) => (\n \n )\n )}\n {progressSteps}\n
\n \n );\n};\n","/* istanbul ignore file */\nimport {\n useEffect, useState\n} from 'react';\nimport {\n useDispatch, useSelector\n} from 'react-redux';\n\nimport { AppState } from '../../../app/store/store.types';\nimport { setPlayCorrectStars } from '../../../containers/question-container/store/question-actions';\nimport { QuestionProgressState } from '../../../helpers/enums';\nimport { isDefined } from '../../../helpers/utils';\nimport { useAudioEffectsContext } from '../provider/audio-effects-provider';\n\ntype Props = {\n showCorrectAnswer?: boolean\n};\n\nexport const useQuestionActivityAudio = ({ showCorrectAnswer }: Props) => {\n const activityState = useSelector(state => state.activityState);\n const [correctAudioCompleted, setCorrectAudioCompleted] = useState(false);\n const [incorrectAudioCompleted, setIncorrectAudioCompleted] = useState(false);\n const [showCorrectAnswerScreen, setShowCorrectAnswerScreen] = useState(false);\n const {\n inCorrectSound, correctAnswerScreen, correctSound\n } = useAudioEffectsContext();\n const {\n validation, progress, questionProgressState\n } = activityState;\n const dispatch = useDispatch();\n\n useEffect(() => {\n if (questionProgressState === QuestionProgressState.correctAnswered) {\n correctSound.on('end', () => {\n setCorrectAudioCompleted(true);\n });\n correctSound.play();\n } else if (questionProgressState === QuestionProgressState.incorrectAnswered) {\n inCorrectSound.on('end', () => {\n setIncorrectAudioCompleted(true);\n });\n inCorrectSound.play();\n } else if (!isDefined(validation)) {\n setCorrectAudioCompleted(false);\n setIncorrectAudioCompleted(false);\n }\n }, [correctSound, inCorrectSound, questionProgressState, validation]);\n\n useEffect(() => {\n if (incorrectAudioCompleted && showCorrectAnswer) {\n setShowCorrectAnswerScreen(true);\n correctAnswerScreen.play();\n } else {\n setShowCorrectAnswerScreen(false);\n }\n }, [correctAnswerScreen, incorrectAudioCompleted, showCorrectAnswer]);\n\n useEffect(() => {\n if (correctAudioCompleted && progress) {\n dispatch(setPlayCorrectStars());\n setCorrectAudioCompleted(false);\n }\n }, [correctAudioCompleted, dispatch, progress]);\n\n return { showCorrectAnswerScreen };\n};\n","import { Box } from '@chakra-ui/react';\nimport React from 'react';\n\nimport { lokalisation } from '../../helpers/lokalisation';\n\nconst CorruptedData = () => {\n const { qtcRendererTxt: { corruptedData } } = lokalisation();\n\n return (\n \n {corruptedData}\n \n );\n};\n\nexport default CorruptedData;\n","import {\n Content, QtcRenderer, validationType\n} from '@3plearning/question-components-library';\nimport { ErrorBoundary } from '@sentry/react';\nimport React from 'react';\n\nimport { lokalisation } from '../../helpers/lokalisation';\nimport CorruptedData from '../corrupted-data/corrupted-data';\nimport { CorrectAnswerProps } from './correct-answer.types';\n\nexport const CorrectAnswerContent: React.FC = ({\n question, validation\n}) => {\n const { questionComponentsLibraryTxt } = lokalisation();\n const correctAnswerValidation = validation && {\n ...validation,\n validAnswer: { ...(validation?.primaryAnswer ?? validation?.validAnswer) }\n };\n\n return (\n }>\n void 0}\n question={question as Content}\n showCorrectAnswer={true}\n validation={correctAnswerValidation as validationType}\n translations={questionComponentsLibraryTxt}\n />\n \n );\n};\n","import styled from '@emotion/styled';\n\nimport { pickThemeVar } from '../../styles/theme/app-theme';\nimport AppImage from '../app-image/app-image';\n\nconst correctAnswerGuideSize = '48px';\nconst guideDimensions = `\n width: ${correctAnswerGuideSize};\n height: ${correctAnswerGuideSize};\n`;\nconst wrapperPadding = '8px';\n\nexport const CorrectAnswerWrapper = styled.div`\n border: 1px solid ${pickThemeVar('green200')};\n border-radius: 50%;\n padding: 0;\n margin-top: 32px;\n position: relative;\n overflow: hidden;\n width: 0;\n height: 0;\n animation: grow 0.7s forwards;\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n font-size: 18px;\n margin-left: -${pickThemeVar('questionBodyPaddingMobile')};\n margin-right: -${pickThemeVar('questionBodyPaddingMobile')};\n }\n\n @keyframes grow {\n 43% {\n ${guideDimensions}\n border-radius: 50%;\n }\n 44% {\n border-radius: 20px;\n }\n 50% {\n padding: ${wrapperPadding};\n width: 200px;\n height: 100px;\n }\n 99% {\n width: 90%;\n }\n 100% {\n width: auto;\n height: auto;\n padding: ${wrapperPadding};\n border-radius: 20px;\n }\n }\n`;\n\nexport const CorrectAnswerBody = styled.div`\n opacity: 0;\n animation: appear 0.4s forwards 0.3s;\n\n @keyframes appear {\n 50% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n\nexport const CorrectAnswerGuide = styled(AppImage)`\n position: absolute;\n transform: translate(0, 0);\n z-index: 1;\n width: 0;\n height: 0;\n top: 0;\n left: 0;\n animation: guide-grow 0.7s forwards;\n\n @keyframes guide-grow {\n 43% {\n ${guideDimensions}\n transform: translate(${wrapperPadding}, ${wrapperPadding});\n }\n 100% {\n ${guideDimensions}\n transform: translate(${wrapperPadding}, ${wrapperPadding});\n }\n }\n`;\n\nexport const CorrectAnswerHeader = styled.h2(props => {\n const {\n theme: {\n app: {\n green04,\n green50,\n questionBodyPadding,\n questionNumberWidth\n }\n }\n } = props;\n\n return `\n height: ${correctAnswerGuideSize};\n line-height: ${correctAnswerGuideSize};\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n border-radius: 20px;\n border-bottom-right-radius: 0;\n font-size: 20px;\n background-color: ${green50};\n color: ${green04};\n padding-inline-start: calc(${questionBodyPadding} + ${questionNumberWidth});\n padding-inline-end: 10px;\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')(props)}) {\n font-size: 18px;\n }\n `;\n});\n\nexport const CorrectAnswerContentWrapper = styled.div`\n padding: 24px 16px 18px;\n max-width: 100%;\n overflow: auto;\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n padding-bottom: 16px;\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n padding: 20px 12px 12px;\n }\n`;\n","import React from 'react';\n\nimport { lokalisation } from '../../helpers/lokalisation';\nimport { CorrectAnswerContent } from './correct-answer-content';\nimport {\n CorrectAnswerBody,\n CorrectAnswerContentWrapper,\n CorrectAnswerGuide,\n CorrectAnswerHeader,\n CorrectAnswerWrapper\n} from './correct-answer.styled';\nimport { CorrectAnswerProps } from './correct-answer.types';\n\nexport const CorrectAnswer: React.FC = ({\n question, validation\n}) => {\n const { labelTxt: { correctAnswerHeader } } = lokalisation();\n\n return (\n \n \n \n {correctAnswerHeader}\n \n \n \n \n \n );\n};\n","import { QtcRenderer } from '@3plearning/question-components-library';\nimport { ErrorBoundary } from '@sentry/react';\nimport React from 'react';\n\nimport CorruptedData from '../corrupted-data/corrupted-data';\nimport { HintContentProps } from './hint-content.types';\n\nexport const HintContent: React.FC = ({\n content,\n readAloudConfig\n}) => (\n }>\n void 0}\n showCorrectAnswer={true}\n readAloudConfig={{\n ...readAloudConfig,\n readAll: true\n }}\n />\n \n);\n","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { pickThemeVar } from '../../styles/theme/app-theme';\n\nconst workedSolutionGuideSize = '64px';\n\nexport const WorkedSolutionWrapper = styled.div`\n box-shadow: 0px 4px 16px rgba(0, 25, 55, 0.16), 0px -2px 8px -8px rgba(11, 55, 83, 0.88) inset;\n margin-top: 400px;\n position: relative;\n animation: up 0.7s forwards;\n height: calc(100% + ${pickThemeVar('questionBodyPadding')});\n background-color: white;\n z-index: 100;\n\n @media (max-width: ${pickThemeVar('breakPoint')}) {\n height: calc(100% + ${pickThemeVar('questionBodyPaddingMobile')});\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n font-size: 18px;\n margin-left: -${pickThemeVar('questionBodyPaddingMobile')};\n margin-right: -${pickThemeVar('questionBodyPaddingMobile')};\n }\n\n @keyframes up {\n 0% {\n margin-top: 400px;\n }\n 100% {\n margin-top: 0;\n }\n }\n`;\n\nexport const WorkedSolutionBody = styled.div`\n opacity: 0;\n animation: appear 0.4s forwards 0.3s;\n height: 100%;\n padding: 6px;\n padding-bottom: 0;\n box-sizing: border-box;\n\n @keyframes appear {\n 50% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n\nexport const LeftItem = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const WorkedSolutionHeader = styled.div(props => {\n const {\n theme: {\n app: {\n primary50,\n primary700\n }\n }\n } = props;\n\n return css`\n height: ${workedSolutionGuideSize};\n line-height: ${workedSolutionGuideSize};\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n border-radius: 13px 13px 0 0;\n font-size: 20px;\n background-color: ${primary50};\n color: ${primary700};\n padding: 0 10px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')(props)}) {\n font-size: 18px;\n }\n `;\n});\n\nexport const WorkedSolutionContent = styled.div<{ signPosts: Record }>`\n overflow: auto;\n height: calc(100% - ${workedSolutionGuideSize});\n padding-top: 12px;\n box-sizing: border-box;\n\n .qtc-wrapper {\n ${({ signPosts }) => Object.keys(signPosts).map((signPostKey) => `\n ${`\n `/* eslint-disable-next-line max-len */}\n *[data-type=\"worked-solution-${signPostKey}\"]:not([data-type=\"worked-solution-${signPostKey}\"]+[data-type=\"worked-solution-${signPostKey}\"]) {\n &::before {\n content: '${signPosts[signPostKey]}';\n }\n }\n `).join('')}\n }\n`;\n","import { QtcRenderer } from '@3plearning/question-components-library';\nimport {\n Tabs,\n TabList,\n Tab,\n TabPanels,\n TabPanel,\n Text,\n Box,\n useMediaQuery\n} from '@chakra-ui/react';\nimport { ErrorBoundary } from '@sentry/react';\nimport React, { FC } from 'react';\n\nimport AppImage from '../../components/app-image/app-image';\nimport { MultiDocs } from '../../containers/question-container/sub-components/question-activity/question-activity.types';\nimport { lokalisation } from '../../helpers/lokalisation';\nimport { app } from '../../styles/theme/variables';\nimport { useAudioEffectsContext } from '../audio/provider/audio-effects-provider';\nimport CorruptedData from '../corrupted-data/corrupted-data';\nimport {\n WorkedSolutionBody,\n WorkedSolutionContent,\n WorkedSolutionHeader,\n WorkedSolutionWrapper,\n LeftItem\n} from './worked-solution.styled';\nimport { WorkedSolutionProps } from './worked-solution.types';\n\nconst WorkedSolution: FC = ({ multiDocs = [] }) => {\n const [breakMobile] = useMediaQuery(`(max-width: ${app.breakTabletPortrait})`);\n const {\n buttonTxt: { workedSolution },\n workedSolutionTxt: {\n solution,\n signPosts\n },\n questionComponentsLibraryTxt\n } = lokalisation();\n const { playClick } = useAudioEffectsContext();\n const renderTabList = () => {\n if (multiDocs.length > 1 && !breakMobile) {\n return (\n \n {\n multiDocs.map((doc, ind) => (\n \n {solution(ind + 1)}\n \n ))\n }\n \n );\n } else {\n return null;\n }\n };\n const renderQtcRenderer = (doc: MultiDocs[number], ind: number) => {\n return (\n null}\n showCorrectAnswer={true}\n translations={questionComponentsLibraryTxt}\n />\n );\n };\n const renderTabPanels = () => {\n if (multiDocs.length > 0 && !breakMobile) {\n return (\n \n {\n multiDocs.map((doc, ind) => (\n \n {renderQtcRenderer(doc, ind)}\n \n ))\n }\n \n );\n } else if (multiDocs.length === 1 && breakMobile) {\n return multiDocs.map((doc, ind) => (\n \n {renderQtcRenderer(doc, ind)}\n \n ));\n } else if (multiDocs.length > 1 && breakMobile) {\n return multiDocs.map((doc, ind) => (\n \n \n {solution(ind + 1)}\n \n {renderQtcRenderer(doc, ind)}\n \n ));\n }\n };\n\n return (\n \n \n \n \n \n {workedSolution}\n \n \n \n {\n multiDocs && (\n \n \n {renderTabList()}\n \n }\n >\n {renderTabPanels()}\n \n \n )\n }\n \n \n \n );\n};\n\nexport default WorkedSolution;\n","import {\n Box, Flex, useToken\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { QuestionAttemptPillProps } from './question-attempt-pill.types';\n\nexport const QuestionAttemptPill: React.FC = ({\n status,\n isCurrentQuestion\n}) => {\n const [neutral400, green500] = useToken('colors', ['neutral.400', 'green.500']);\n const getOutlineColors = (attemptStatus: QuestionAttemptPillProps['status']) => {\n if (isCurrentQuestion) {\n return {\n borderColor: 'primary.500',\n borderWidth: '2px'\n };\n }\n\n switch (attemptStatus) {\n case 'Correct':\n return {\n borderColor: `${green500}66`,\n borderWidth: '1px'\n };\n case 'Incorrect':\n return {\n borderColor: `${neutral400}66`,\n borderWidth: '1px'\n };\n case 'Unattempted':\n return {\n borderColor: 'transparent',\n borderWidth: '1px'\n };\n }\n };\n const getFillColors = (attemptStatus: QuestionAttemptPillProps['status']) => {\n if (isCurrentQuestion && attemptStatus === 'Unattempted') {\n return {\n bg: 'linear-gradient(103.65deg, #00ABE8 -2.03%, #007ACC 43.7%, #0063A7 105.46%)',\n border: 'none'\n };\n }\n\n switch (attemptStatus) {\n case 'Correct':\n return {\n bgColor: 'green.400',\n border: 'none'\n };\n case 'Incorrect':\n return {\n bgColor: 'neutral.500',\n border: 'none'\n };\n case 'Unattempted':\n return {\n bgColor: 'transparent',\n border: '1px',\n borderColor: 'neutral.300',\n borderStyle: 'solid'\n };\n }\n };\n\n return (\n \n \n \n );\n};\n","import { Circle } from '@chakra-ui/react';\nimport React from 'react';\n\nimport { UnitTestQuestionAttemptsPillProps } from './unit-test-question-attempts.types';\n\nexport const UnitTestQuestionAttemptPill: React.FC = ({ status }) => {\n const getOutlineColors = (attemptStatus: UnitTestQuestionAttemptsPillProps['status']) => {\n switch (attemptStatus) {\n case 'Attempted':\n return {\n borderColor: 'neutral.300',\n borderWidth: '1px',\n boxSizing: {\n base: 'border-box',\n md: 'content-box'\n }\n };\n case 'Prompted':\n return {\n borderColor: 'primary.500',\n borderWidth: '2px',\n mr: {\n base: '-2px',\n md: 0\n }\n };\n case 'Unattempted':\n return {\n borderColor: {\n base: 'neutral.300',\n md: 'transparent'\n },\n borderWidth: '1px',\n boxSizing: {\n base: 'border-box',\n md: 'content-box'\n }\n };\n }\n };\n const getFillColors = (attemptStatus: UnitTestQuestionAttemptsPillProps['status']) => {\n switch (attemptStatus) {\n case 'Attempted':\n return {\n bgColor: 'neutral.500',\n border: 'none'\n };\n case 'Prompted':\n return {\n bg: 'linear-gradient(103deg, #00ABE8 4%, #007ACC 45%, #0063A7 100%)',\n border: 'none'\n };\n case 'Unattempted':\n return {\n bgColor: {\n base: 'white',\n md: 'transparent'\n },\n borderWidth: {\n base: 0,\n md: '1px'\n },\n borderColor: 'neutral.300',\n borderStyle: 'solid'\n };\n }\n };\n\n return (\n \n \n \n );\n};\n","import {\n Flex, Divider\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { useProgressActivity } from '../../containers/question-container/hooks/use-progress-activity';\nimport { UnitTestQuestionAttemptPill } from './unit-test-question-attempt-pill';\nimport { UnitTestQuestionAttemptsPillProps } from './unit-test-question-attempts.types';\n\nexport const UnitTestQuestionAttempts = () => {\n const {\n progressData,\n questionsCount\n } = useProgressActivity();\n const stepsCompleted = progressData?.stepsCompleted || 0;\n\n return (\n \n {Array(questionsCount).fill(0)?.map((attempt, index) => {\n const attemptNum = index + 1;\n\n let validationStatus: UnitTestQuestionAttemptsPillProps['status'] = 'Prompted';\n\n if (index < stepsCompleted) {\n validationStatus = 'Attempted';\n } else if (index > stepsCompleted) {\n validationStatus = 'Unattempted';\n }\n\n return (\n \n \n {attemptNum < (questionsCount || 0) && }\n \n );\n })}\n \n );\n};\n","import {\n Flex, Divider\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { QuestionSetType } from '../../../src/helpers/enums';\nimport { useProgressActivity } from '../../containers/question-container/hooks/use-progress-activity';\nimport { QuestionAttemptPill } from '../question-attempt-pill/question-attempt-pill';\nimport { UnitTestQuestionAttempts } from '../unit-test-question-attempts/unit-test-question-attempts';\n\nexport const QuestionAttempts = () => {\n const {\n progressData,\n questionCorrect,\n questionAnswered,\n questionSetType\n } = useProgressActivity();\n\n if (questionSetType === QuestionSetType.unitTest) {\n return ;\n }\n const allPoints = progressData?.points?.reduce(\n (finalPoints, section) => [...finalPoints, ...section.stars], [] as number[]\n );\n\n return (\n \n {allPoints?.map((point, index) => {\n const attemptNum = index + 1;\n const isCorrect = point > 0;\n const isCurrentQuestion = progressData?.stepsCompleted === (questionAnswered ? attemptNum : index);\n const currentAttemptStatus = questionCorrect ? 'Correct' : 'Incorrect';\n const attemptStatus = isCorrect ? 'Correct' : 'Incorrect';\n const validationStatus = isCurrentQuestion ? currentAttemptStatus : attemptStatus;\n\n return (\n \n (progressData?.stepsCompleted || 0) ? 'Unattempted' : validationStatus}\n />\n {attemptNum < (allPoints?.length || 0) && }\n \n );\n })}\n \n );\n};\n","import { TextSegment } from '@3plearning/question-components-library';\n\nexport type SlideWrapperProps = {\n isPrev: boolean\n};\n\ntype VideoSegment = {\n type: 'videoSrc'\n text: string\n};\n\ntype ConceptRefreshSegment = TextSegment | VideoSegment;\n\ntype ConceptRefreshBlock = {\n content: ConceptRefreshSegment[]\n type?: string\n};\n\nexport type ConceptRefreshContent = ConceptRefreshBlock[];\n\nexport type ConceptRefreshSlideProps = {\n conceptRefresh?: ConceptRefreshContent\n};\n\nexport enum ContentType {\n conceptRefresh = 'concept_refresh',\n workedSolution = 'worked_solution'\n }\n","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport {\n pickThemeFlex, pickThemeVar, ThemeProps\n} from '../../../../styles/theme/app-theme';\nimport { QuestionProgressStyleProps } from '../../question-container.types';\nimport { attemptStatusUtil } from './utils/attempt-status-util';\n\nconst attemptCapsuleStyle = (props: QuestionProgressStyleProps & ThemeProps) => {\n const { getCapsuleStyle } = attemptStatusUtil();\n const questionProgress = props;\n const {\n borderColour, capsuleWidth, leftPos\n } = getCapsuleStyle(questionProgress);\n\n return css `\n border-color: ${borderColour};\n width: ${capsuleWidth};\n left: ${leftPos};\n `;\n};\n\nexport const AttemptsStatusStyled = styled.div`\n ${pickThemeFlex('flexColumnCentered')};\n position: relative;\n \n .attempt-state {\n ${pickThemeFlex('flexChildCentered')}\n font-size: 14px;\n height: 18px;\n line-height: 28px;\n margin-bottom: 2px;\n color: ${pickThemeVar('neutral600')};\n }\n \n .attempt-capsule {\n ${pickThemeFlex('flexChildCentered')};\n position: absolute;\n top: 20px;\n height: 28px;\n box-sizing: border-box;\n border-radius: 16px;\n border: solid 1px;\n\n ${attemptCapsuleStyle};\n }\n \n .attempt-stars {\n ${pickThemeFlex('flexRowVerticalCentered')};\n height: 28px;\n display: flex;\n align-items: center;\n }\n\n @media (max-width: calc(${pickThemeVar('breakTabletLandscape')})) {\n transform: scale(0.8333);\n }\n`;\n\nconst starStyle = (props: QuestionProgressStyleProps & ThemeProps) => {\n const { getStarStyle } = attemptStatusUtil();\n const questionProgress = props;\n const { greyStar } = getStarStyle(questionProgress);\n\n let greyStarStyle ;\n\n if (greyStar) {\n greyStarStyle = css`\n border: 1px solid ${props.theme.app.grey03};\n \n .star {\n width: 14px;\n opacity: 0.6;\n \n path {\n fill: ${props.theme.app.grey02} !important;\n }\n }\n `;\n } else {\n greyStarStyle = css `\n \n .star {\n width: 20px;\n }\n `;\n }\n\n return greyStarStyle;\n};\n\nexport const AttemptStarStyled = styled.div`\n ${pickThemeFlex('flexChildCentered')};\n height: 22px;\n width: 22px;\n box-sizing: border-box;\n margin-left: 3px;\n margin-right: 3px;\n border-radius: 50%;\n border: 1px solid white;\n \n ${starStyle};\n \n .icon {\n position: absolute;\n top: 0;\n \n &.correct {\n top: 6px;\n }\n\n &.incorrect {\n top: 7px;\n }\n \n &.answer {\n top: 6px;\n width: 8px;\n height: 8px;\n box-sizing: border-box;\n border-radius: 50%;\n border: solid 1px ${pickThemeVar('blue05')};\n opacity: 0.3;\n }\n }\n`;\n\n","import React from 'react';\n\nimport AppImage from '../../../../components/app-image/app-image';\nimport { MAX_ATTEMPTS } from '../../../../helpers/constants';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { useProgressActivity } from '../../hooks/use-progress-activity';\nimport { QuestionProgressProps } from '../../question-container.types';\nimport {\n AttemptsStatusStyled, AttemptStarStyled\n} from './attempt-status.styled';\n\nexport const AttemptStatus = () => {\n const { labelTxt: { attempt } } = lokalisation();\n /*\n * USE PROGRESS ACTIVITY HOOK\n */\n const questionProgress: QuestionProgressProps = useProgressActivity();\n const {\n progressAttempt, questionAnswered, questionCorrect\n } = questionProgress;\n const getIcon = (attemptNum: number) => {\n if(attemptNum === progressAttempt) {\n return (questionCorrect ?\n
\n \n
:\n
\n \n
\n );\n } else if(attemptNum > progressAttempt) {\n return
;\n }\n };\n\n return (\n \n
{!questionAnswered && attempt(progressAttempt)}
\n
\n
\n {Array(MAX_ATTEMPTS).fill('').map((value, index) => {\n const attemptNum = index + 1;\n\n return (\n \n {questionAnswered && getIcon(attemptNum)}\n \n \n );}\n )}\n
\n \n );\n};\n","import {\n Button, Circle\n} from '@chakra-ui/react';\nimport { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport {\n pickThemeFlex, pickThemeVar\n} from '../../../../styles/theme/app-theme';\n\nexport const QuestionFooterContainer = styled.div`\n ${pickThemeFlex('flexRowVerticalCenteredSpaced')};\n \n height: ${pickThemeVar('footerHeight')};\n box-shadow: 0px 0px 4.92526px 0.820876px rgba(11, 55, 83, 0.08);\n flex-shrink: 0;\n \n .left-footer {\n ${pickThemeFlex('flexRowVerticalCentered')};\n margin-left: 24px;\n }\n\n .right-footer {\n ${pickThemeFlex('flexRowVerticalCentered')};\n margin: 0 24px 0 0;\n flex: 1;\n justify-content: flex-end;\n margin-left: 10px;\n }\n\n .worked-solution-pulse {\n animation: pulsing 1.25s infinite cubic-bezier(0.66, 0, 0, 1);\n transition: all 300ms ease-in-out;\n }\n\n\n @keyframes pulsing {\n 0% {\n box-shadow: 0 0 0 0px rgba(153, 221, 246, 1);\n }\n 100% {\n box-shadow: 0 0 0 30px rgba(153, 221, 246, 0);\n }\n }\n\n @media (max-width: ${pickThemeVar('breakPoint')}) {\n .left-footer {\n margin-left: 16px;\n }\n\n .right-footer {\n margin-right: 16px;\n }\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n height: ${pickThemeVar('footerHeight')};\n\n .right-footer {\n justify-content: flex-end;\n flex: 1;\n }\n }\n`;\n\nexport const IconSupportButton = styled(Button)`\n width: 40px;\n height: 40px;\n font-size: 16px;\n border-radius: 100%;\n padding: 0; \n\n // this is to offset the svg inside the button\n // so that it appears to be in the center\n > svg {\n margin-top: 2px;\n }\n\n ${(props) => props.isDisabled ? css`svg {\n path {\n fill: ${pickThemeVar('neutral300')(props)};\n }\n }` : ''}\n`;\n\nexport const SupportButton = styled(Button)`\n width: 173px;\n height: 40px;\n font-size: 16px;\n\n ${(props) => props.isDisabled ? css`svg {\n path {\n fill: ${pickThemeVar('neutral300')(props)};\n }\n }` : ''}\n \n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n width: 145px;\n height: 32px;\n font-size: 14px;\n }\n`;\n\nexport const SubmitButton = styled(Button)`\n max-width: 210px;\n width: 100%;\n height: 48px;\n border: none;\n margin-left: 20px;\n font-size: 20px;\n\n\n @media (max-width: ${pickThemeVar('breakPoint')}) {\n margin-left: 10px;\n }\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n max-width: 160px;\n height: 40px;\n font-size: 16px;\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n margin-left: 0;\n max-width: 130px;\n }\n`;\n\nexport const CloseIcon = styled(Circle)(props => {\n const {\n primary600, breakTabletPortrait, breakTabletLandscape\n } = props.theme.app;\n\n return css`\n width: 24px;\n height: 24px;\n background-color: ${primary600};\n position: relative;\n\n @media (min-width: ${breakTabletPortrait}) and (max-width: ${breakTabletLandscape}) {\n width: 20px;\n height: 20px;\n }\n\n svg {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.78);\n\n path {\n stroke: white;\n }\n }\n `;\n});\n","import {\n dispatchStopReadAloudEvent, ModalClickviewVideo\n} from '@3plearning/question-components-library';\nimport {\n useDisclosure, Hide, Show, Box\n} from '@chakra-ui/react';\nimport React, {\n useState,\n useEffect,\n useRef\n} from 'react';\nimport {\n useDispatch,\n useSelector\n} from 'react-redux';\n\nimport { AppState } from '../../../../app/store/store.types';\nimport AppImage from '../../../../components/app-image/app-image';\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport { QuestionAttempts } from '../../../../components/question-attempts/question-attempts';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { isDefined } from '../../../../helpers/utils';\nimport { useWithMobile } from '../../../../hooks/use-with-mobile';\nimport { ContentType } from '../../../../routes/milestone-transition/sub-components/intro-screen/intro-screen.types';\nimport { activateWorkedSolution } from '../../store/question-actions';\nimport { AttemptStatus } from '../attempt-status/attempt-status';\nimport { useFooterResponsiveStyles } from './question-footer.hooks';\nimport {\n QuestionFooterContainer, IconSupportButton, SupportButton, SubmitButton, CloseIcon\n} from './question-footer.styled';\nimport { QuestionFooterProps } from './question-footer.types';\n\nconst QuestionFooter = ({\n conceptRefreshUrl,\n footerBtnLabel,\n checkButtonDisabled,\n showNextQuestion,\n validateAnswer,\n validation,\n workedSolution,\n footerBtnColorScheme,\n isDiagnostic = false,\n isWorkedSolutionActivated = false\n}: QuestionFooterProps) => {\n const {\n landscape,\n isMobile,\n isTablet\n } = useWithMobile();\n const activityState = useSelector(state => state.activityState);\n const { studentState } = activityState;\n const { footerResponsiveStyles } = useFooterResponsiveStyles();\n const checkBtnRef = useRef(null);\n const { playClick } = useAudioEffectsContext();\n const { introTxt } = lokalisation();\n const dispatch = useDispatch();\n const [workedSolutionState, setWorkedSolutionState] = useState({\n buttonDisabled: true,\n buttonPulse: ''\n });\n const workedSolutionHandler = () => {\n playClick();\n setWorkedSolutionState({\n buttonDisabled: false,\n buttonPulse: ''\n });\n dispatch(activateWorkedSolution(!isWorkedSolutionActivated));\n dispatchStopReadAloudEvent();\n window.dataLayer.push({ event: 'worked_solution' });\n };\n const { ...chakraModalProps } = useDisclosure();\n const conceptRefreshHandler = () => {\n playClick();\n chakraModalProps.onOpen();\n dispatchStopReadAloudEvent();\n window.dataLayer.push({ event: 'concept_refresh' });\n };\n\n useEffect(() => {\n if (!validation) {\n setWorkedSolutionState({\n buttonDisabled: true,\n buttonPulse: ''\n });\n }\n else if (validation?.isCorrect) {\n setWorkedSolutionState({\n buttonDisabled: false,\n buttonPulse: ''\n });\n } else if (!validation?.isCorrect) {\n setWorkedSolutionState({\n buttonDisabled: false,\n buttonPulse: 'worked-solution-pulse'\n });\n }\n }, [validation]);\n\n // this useEffect needs to be separate\n useEffect(() => {\n if(isDefined(validation)) {\n checkBtnRef.current?.focus();\n }\n }, [validation]);\n\n const onCloseModalHandler = () => {\n playClick();\n chakraModalProps.onClose();\n };\n\n return (\n \n
\n {isDiagnostic ? : <>\n \n }\n variant={'outline'}\n colorScheme={'footer-white'}\n isDisabled={!conceptRefreshUrl}\n data-testid={'concept-refresh-button'}\n onClick={conceptRefreshHandler}\n tabIndex={-1}\n >\n {introTxt.conceptRefresh}\n \n \n : \n }\n variant={'outline'}\n colorScheme={'footer-white'}\n isDisabled={workedSolutionState.buttonDisabled}\n className={workedSolutionState.buttonPulse}\n data-testid={'worked-solution-button'}\n ml={5}\n onClick={workedSolutionHandler}\n isActive={isWorkedSolutionActivated}\n tabIndex={-1}\n >\n {workedSolution}\n \n \n \n \n \n \n \n {isWorkedSolutionActivated\n ? \n : \n }\n \n \n }\n
\n
\n {!isDiagnostic && }\n \n {footerBtnLabel}\n \n
\n {!isDiagnostic && conceptRefreshUrl &&\n }\n \n );\n};\n\nexport default QuestionFooter;\n","import {\n useMediaQuery,\n useTheme\n} from '@chakra-ui/react';\n\nimport { useWithMobile } from '../../../../hooks/use-with-mobile';\n\nexport const useFooterResponsiveStyles = () => {\n const {\n landscape,\n isMobile,\n isTablet\n } = useWithMobile();\n const theme = useTheme();\n const [breakMobile] = useMediaQuery(`(max-width: ${theme.breakpoints.md})`);\n const footerResponsiveStyles = () => {\n let styles = null;\n\n if ((isMobile || (landscape && isMobile)) && !isTablet) {\n styles = {\n bottom: 0,\n width: `calc(100% - ${landscape && !breakMobile ? '48px' : '32px'})`,\n backgroundColor: 'white',\n zIndex: 100\n };\n }\n\n return styles;\n };\n\n return { footerResponsiveStyles };\n};\n","import { CloseButton } from '@chakra-ui/react';\nimport { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport AppImage from '../../../../components/app-image/app-image';\nimport { useWithMobile } from '../../../../hooks/use-with-mobile';\nimport {\n pickThemeFlex, pickThemeVar\n} from '../../../../styles/theme/app-theme';\nimport {\n QuestionActivityStyledProps, ValidationStyledProps\n} from './question-activity.types';\n\nexport const QuestionActivityStyled = styled.div(props => {\n const {\n landscape,\n isMobile,\n isTablet\n } = useWithMobile();\n const {\n showQuestion,\n isWorkedSolutionActivated,\n theme: {\n app: {\n headerHeight,\n questionHeaderHeight,\n green04,\n progressPanelWidth,\n progressPanelHeight,\n progressPanelLeftMargin,\n stickyHintContainerHeight,\n questionBodyPadding\n }\n },\n isDiagnostic,\n isGuideImageRemoved\n } = props;\n\n return css`\n flex-grow: 1;\n min-height: 100%;\n border-radius: ${pickThemeVar('borderRadius')(props)};\n transition: width 0.5s;\n color: ${pickThemeVar('neutral900')(props)};\n display: flex;\n flex-direction: column;\n position: relative;\n width: calc(100vw - ${progressPanelWidth} - ${progressPanelLeftMargin});\n ${isDiagnostic ? '' : `max-width: calc(100% - ${progressPanelWidth} - ${progressPanelLeftMargin});`}\n\n .question-header {\n width: 100%;\n flex-shrink: 0;\n\n .question-header-title {\n background: rgba(255,255,255,0.5);\n backdrop-filter: blur(111px);\n width: 100%;\n min-height: ${pickThemeVar('questionHeaderHeight')(props)};\n border-top-left-radius: ${ isGuideImageRemoved ? '20px' : '35px'};\n border-top-right-radius: 20px;\n flex-shrink: 0;\n padding-left: ${showQuestion && !isGuideImageRemoved && '84px'};\n box-sizing: border-box;\n text-align: center;\n\n ${pickThemeFlex('flexChildCentered')(props)}\n\n .quest-name {\n color: ${pickThemeVar('fontPrimary')(props)};\n margin: ${isGuideImageRemoved ? '11px 0px' : '11px 24px 11px 0px'};\n }\n\n .show-question-button {\n width: 100%;\n margin: 12px 24px;\n }\n }\n\n .question-header-hint {\n width: 100%;\n display: ${isWorkedSolutionActivated ? 'none' : 'flex'};\n justify-content: flex-end;\n background-color: white;\n }\n }\n\n .question-holder {\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n background-color: white;\n box-shadow: 0px 3.28351px 6.56701px 0.820876px rgba(0, 25, 55, 0.08);\n border-radius: 0px 0px 20px 20px;\n flex-grow: 1;\n /* height must be passed down to WorkedSolutionWrapper for ios 14 for it to be scrollable */\n height: 100%;\n ${!((isMobile || (landscape && isMobile)) && !isTablet) && `\n min-height: calc(100% - ${headerHeight} - ${questionHeaderHeight});\n `}\n\n @media (min-height: 876px) {\n ${!((isMobile || (landscape && isMobile)) && !isTablet) && `\n min-height: calc(${progressPanelHeight} - ${questionHeaderHeight} - ${stickyHintContainerHeight});\n `}\n }\n }\n\n ${isDiagnostic ? '' : `\n @media (max-width: ${pickThemeVar('breakTabletLandscape')(props)}) {\n max-width: calc(100% - ${progressPanelWidth} - 24px);\n }\n `}\n \n \n @media (max-width: ${pickThemeVar('breakPoint')(props)}) {\n position: ${showQuestion ? 'absolute' : 'fixed'};\n transition: top 0.5s;\n z-index: 1;\n top: ${showQuestion ? 0 : `calc(100% - ${pickThemeVar('questionHeaderHeightCollapsed')(props)})`};\n ${!((isMobile || (landscape && isMobile)) && !isTablet) && `\n height: 100%;\n `}\n width: calc(100% - 2 * ${questionBodyPadding});\n max-width: unset;\n\n .question-header-title {\n background: ${!showQuestion && 'white'};\n width: ${showQuestion && 'auto'};\n\n .quest-name {\n display: ${!showQuestion && 'none'};\n }\n }\n\n .question-holder {\n /* make question look uniform during hide animation */\n margin-top: 0;\n }\n\n .activity-guide {\n display: ${!showQuestion && 'none'};\n }\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')(props)}) {\n width: calc(100% - 32px);\n\n .question-header-title {\n .quest-name {\n font-size: 13px;\n margin: 8px 16px 8px 0px;\n }\n }\n }\n\n ${props.isValidated && props.isCorrect && showQuestion ? `\n &::after {\n position: absolute;\n top: 0;\n height: 80px;\n background-color: white;\n content: '${props.correctLabel}';\n color: white;\n font-size: 24px;\n display: block;\n overflow: hidden;\n width: 0;\n transform: translateX(0);\n line-height: 80px;\n border-radius: 40px;\n padding: 0 25px 0 61px;\n text-align: center;\n box-shadow: 0px 3px 15px rgb(0 0 0 / 10%), 0px 4px 6px rgb(0 0 0 / 5%);\n animation: slide 0.8s forwards ease-out;\n \n\n @keyframes slide {\n 100% {\n color: ${green04};\n transform: translateX(40px);\n width: 217px;\n border-radius: 15px;\n }\n }\n\n @media (max-width: ${pickThemeVar('breakPoint')(props)}) {\n @keyframes slide {\n 100% {\n color: ${green04};\n transform: translateX(40px);\n width: 197px;\n border-radius: 15px;\n }\n }\n }\n }\n ` : ''}\n `;\n});\n\nexport const QuestionBody = styled.div<{ isWorkedSolutionActivated: boolean }>(props => {\n const {\n landscape,\n isMobile,\n isTablet\n } = useWithMobile();\n const {\n isWorkedSolutionActivated, theme: {\n app: {\n breakPoint, questionBodyPadding, questionBodyPaddingMobile\n }\n }\n } = props;\n\n return css`\n flex-grow: 1;\n padding: ${questionBodyPadding};\n padding-top: 0px;\n overflow-y: ${isWorkedSolutionActivated ? 'hidden' : 'auto'};\n overflow-x: hidden;\n position: relative;\n left: -20px;\n padding-left: calc(20px + ${questionBodyPadding});\n margin-right: -20px;\n /* height must be passed down to WorkedSolutionWrapper for ios 14 for it to be scrollable */\n ${!((isMobile || (landscape && isMobile)) && !isTablet) && `\n height: 100%;\n `}\n\n :focus {\n outline: none;\n }\n\n @media (max-width: ${breakPoint}) {\n padding: ${questionBodyPaddingMobile};\n padding-top: 0px;\n left: -16px;\n margin-right: -16px;\n padding-left: calc(16px + ${questionBodyPaddingMobile});\n }\n `;\n});\n\nexport const QuestionContent = styled.div<{ isWorkedSolutionActivated: boolean }>(props => {\n const {\n isWorkedSolutionActivated, theme: {\n app: {\n stickyHintContainerHeight, breakPoint\n }\n }\n } = props;\n const {\n landscape,\n isMobile,\n isTablet\n } = useWithMobile();\n\n return css`\n flex-grow: 1;\n ${((isMobile || (landscape && isMobile)) && !isTablet) && `\n margin-bottom: 72px;\n `}\n ${isWorkedSolutionActivated && css`\n position: absolute;\n padding-top: ${stickyHintContainerHeight};\n // keep validation colour in background visible and pad content\n padding-right: 68px;\n box-sizing: border-box;\n width: 100%;\n\n @media (max-width: ${breakPoint}) {\n padding-right: 56px;\n }\n `}\n `;\n});\n\nexport const ActivityGuide = styled(AppImage)`\n position: absolute;\n top: 0;\n left: 0;\n z-index: 200;\n transform: translate(-2px, -2px);\n`;\n\nexport const WorkedSolutionCloseButton = styled(CloseButton)`\n position: absolute;\n top: 0;\n right: ${pickThemeVar('questionBodyPadding')};\n transform: translate(50%, -50%);\n z-index: 101;\n animation: fade-in 1s forwards;\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n right: 0;\n }\n\n @keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n","import {\n QtcRenderer, Hint, Content\n} from '@3plearning/question-components-library';\nimport {\n Button, Text, VStack, HStack\n} from '@chakra-ui/react';\nimport { ErrorBoundary } from '@sentry/react';\nimport React, {\n useState, useEffect, ReactEventHandler, useContext\n} from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport AppImage from '../../../../components/app-image/app-image';\nimport { useQuestionActivityAudio } from '../../../../components/audio/hooks/use-question-activity-audio';\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport { CorrectAnswer } from '../../../../components/correct-answer/correct-answer';\nimport CorruptedData from '../../../../components/corrupted-data/corrupted-data';\nimport { HintContent } from '../../../../components/hint/hint-content';\nimport WorkedSolution from '../../../../components/worked-solution/worked-solution';\nimport { MAX_ATTEMPTS } from '../../../../helpers/constants';\nimport {\n QuestionSetType, STUDENT_STATES, QuestionProgressState\n} from '../../../../helpers/enums';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport {\n transformSchema, getQueryParam\n} from '../../../../helpers/utils';\nimport { Resources } from '../../../../resources/resources';\nimport { useProgressActivity } from '../../hooks/use-progress-activity';\nimport { QuestionProgressProps } from '../../question-container.types';\nimport { activateWorkedSolution } from '../../store/question-actions';\nimport { KeypadContextType } from '../activity-keypad/activity-keypad.types';\nimport { KeypadContext } from '../activity-keypad/keypad-provider';\nimport QuestionFooter from '../question-footer/question-footer';\nimport {\n ActivityGuide,\n QuestionActivityStyled,\n QuestionBody,\n QuestionContent,\n WorkedSolutionCloseButton\n} from './question-activity.styled';\nimport { QuestionActivityProps } from './question-activity.types';\n\nexport const QuestionActivity = ({\n activityState,\n isReadyToValidate,\n showNextQuestion,\n onUpdate,\n validateAnswer,\n onProgress,\n questionNumber,\n allQuestionsComplete,\n scrollableContainer\n}: QuestionActivityProps) => {\n const dispatch = useDispatch();\n const {\n buttonTxt: {\n hint: hintBtnLabel, next, check, tryAnother, workedSolution, resume\n },\n labelTxt: { correct },\n questionComponentsLibraryTxt\n } = lokalisation();\n const {\n activity: questionData,\n validation,\n questionSaveInProgress,\n studentState,\n questName,\n conceptRefresh,\n isWorkedSolutionActivated,\n questionSetType,\n keyboardPreset,\n readAloudEnabled,\n readAloudLocale,\n questionProgressState\n } = activityState;\n const conceptRefreshContent = transformSchema(conceptRefresh);\n const conceptRefreshUrl = conceptRefreshContent && [...conceptRefreshContent[0].content]?.pop()?.text || '';\n const {\n hint,\n question,\n questionVariantId\n } = questionData || {};\n /*\n * PROGRESS ACTIVITY HOOK\n */\n const questionProgress: QuestionProgressProps = useProgressActivity();\n const {\n progressAttempt, questionAnswered, questionCorrect\n } = questionProgress;\n const checkButtonDisabled = questionSaveInProgress || !isReadyToValidate;\n const [footerBtnLabel, setFooterBtnLabel] = useState();\n const [footerBtnColorScheme, setFooterBtnColorScheme] = useState('primary');\n const {\n keypadRef, questionBodyRef, questionBodyElement, showKeypad, setShowKeypad, showKeypadBtn, isKeypadBtnDisabled\n } = useContext(KeypadContext) as KeypadContextType;\n const isDiagnostic = questionSetType !== QuestionSetType.questiconActivity;\n const isGuideImageRemoved = questionSetType === QuestionSetType.unitTest;\n const { playClick } = useAudioEffectsContext();\n const showCorrectAnswer = questionAnswered && !questionCorrect && !isWorkedSolutionActivated\n && questionProgressState !== QuestionProgressState.nextUnanswered;\n const { showCorrectAnswerScreen } = useQuestionActivityAudio({ showCorrectAnswer });\n const keypadPresetFromQueryParams = getQueryParam('keypadPreset');\n\n useEffect(() => {\n let label;\n let colorScheme = 'primary';\n\n const maxAttempts = isDiagnostic ? 1 : MAX_ATTEMPTS;\n\n if (questionAnswered) {\n if (questionCorrect || progressAttempt === maxAttempts) {\n label = next;\n if (questionCorrect) {\n colorScheme = 'correct';\n }\n } else {\n label = tryAnother;\n colorScheme = 'incorrect';\n }\n } else {\n label = check;\n }\n if (allQuestionsComplete || questionSetType === QuestionSetType.unitTest) {\n label = next;\n }\n setFooterBtnColorScheme(colorScheme);\n setFooterBtnLabel(label);\n }, [allQuestionsComplete, progressAttempt, check, next, questionAnswered, questionCorrect, tryAnother, isDiagnostic, questionSetType]);\n\n useEffect(() => {\n if (isWorkedSolutionActivated && questionBodyElement) {\n questionBodyElement.scrollTo(0, 0);\n }\n }, [questionBodyElement, isWorkedSolutionActivated]);\n\n const assetsBasePath = window._env_.ASSETS_CDN_BASE_PATH;\n const showQuestion = studentState === STUDENT_STATES.question;\n const toggleKeypad: ReactEventHandler = (event) => {\n event.preventDefault();\n setShowKeypad(!showKeypad);\n };\n const readAloudConfig = {\n enabled: readAloudEnabled && !isWorkedSolutionActivated,\n gatewayUrl: window._env_.READ_ALOUD_GATEWAY_BASE_URL,\n token: Resources.env?.authToken,\n locale: readAloudLocale\n };\n const hintProps = {\n tracking: () => {\n window.dataLayer.push({ event: 'hint' });\n },\n content: ,\n hintBtnLabel\n };\n\n return (\n <>\n \n {questionSetType !== QuestionSetType.unitTest &&\n }\n \n
\n \n {questName}\n \n {studentState === STUDENT_STATES.resume && \n {resume}\n }\n
\n
\n \n {\n showKeypadBtn && (\n playClick()}\n isDisabled={isKeypadBtnDisabled}\n isActive={showKeypad && !isKeypadBtnDisabled}\n tabIndex={-1}\n >\n \n \n )\n }\n {!isDiagnostic && {hintProps.content}}\n \n
\n
\n
\n {isWorkedSolutionActivated &&\n {\n playClick();\n dispatch(activateWorkedSolution(false));\n }}\n />\n }\n \n \n {keypadRef.current && questionVariantId && assetsBasePath !== null && assetsBasePath !== '' ?\n }\n onError={() => {\n onUpdate({\n isReady: true,\n answer: {}\n });\n }}\n >\n \n : null}\n {\n showCorrectAnswerScreen &&\n \n }\n \n {isWorkedSolutionActivated && }\n \n \n
\n \n \n );\n};\n","import {\n answerRecord, answerType, dispatchStopReadAloudEvent\n} from '@3plearning/question-components-library';\nimport { useBreakpointValue } from '@chakra-ui/react';\nimport React, {\n useEffect, useState\n} from 'react';\nimport {\n useDispatch, useSelector\n} from 'react-redux';\n\nimport {\n SaveQuestionRequest, SaveQuestionResponse\n} from '../../../api/types/__generated__/data-contracts';\nimport { AppState } from '../../app/store/store.types';\nimport { useAudioEffectsContext } from '../../components/audio/provider/audio-effects-provider';\nimport {\n QuestionSetType, STUDENT_STATES\n} from '../../helpers/enums';\nimport { getQueryParam } from '../../helpers/utils';\nimport {\n getFinalTotals, getStarRatingNum\n} from '../../routes/milestone-transition/sub-components/summary/utils/util';\nimport { useMilestoneProgress } from '../../routes/question-console/hooks/use-milestone-progress';\nimport { QuestionContainerStyled } from './question-container.styled';\nimport { QuestionContainerProps } from './question-container.types';\nimport { getNextStudentState } from './question-container.util';\nimport {\n activateWorkedSolution,\n loadNextQuestion, resetActivity, saveQuestion, setStudentState\n} from './store/question-actions';\nimport { ProgressActivity } from './sub-components/progress-activity/progress-activity';\nimport { QuestionActivity } from './sub-components/question-activity/question-activity';\n\nexport const QuestionContainer = ({\n answerValidationHandler, scrollableContainer\n}: QuestionContainerProps) => {\n const dispatch = useDispatch();\n const activityState = useSelector(state => state.activityState);\n const {\n studentState, activity, updatedProgress, questionSetType, progress\n } = activityState;\n /*\n * CHECK COMPLETION AND QUESTION NUMBER\n */\n const {\n allQuestionsComplete, questionNumber,\n isMilestoneComplete, navigateToTransitionScreen\n } = useMilestoneProgress();\n const [userResponse, setUserResponse] = useState(null);\n const breakPoint = useBreakpointValue({ breakPoint: 'breakPoint' });\n const {\n playClick, playCongratulations, playCompletionAYR, playCompletionUPT\n } = useAudioEffectsContext();\n const questionProgress = updatedProgress || progress;\n const handleProgress = () => {\n const nextStudentState = getNextStudentState(studentState);\n\n if (nextStudentState === STUDENT_STATES.summary) {\n const { finalTotal: { stars: totalStars } } = getFinalTotals({ progress: questionProgress });\n const { numRatingStarAnims } = getStarRatingNum(totalStars);\n\n if(questionSetType !== QuestionSetType.diagnostics && questionSetType !== QuestionSetType.unitTest) {\n numRatingStarAnims && playCongratulations(numRatingStarAnims);\n } else if(questionSetType === QuestionSetType.unitTest) {\n numRatingStarAnims && playCompletionUPT();\n } else if(questionSetType === QuestionSetType.diagnostics) {\n numRatingStarAnims && playCompletionAYR();\n }\n }\n if (studentState !== nextStudentState) {\n dispatch(setStudentState(nextStudentState));\n }\n };\n const onUpdate = (userResponse: answerType) => {\n setUserResponse(userResponse);\n };\n const showNextQuestion = async (isPlayClickSkipped = {}) => {\n if (!(typeof isPlayClickSkipped === 'boolean' && isPlayClickSkipped)) {\n playClick();\n }\n dispatchStopReadAloudEvent();\n setUserResponse(() => null);\n await dispatch(resetActivity());\n if (updatedProgress?.isQuestCompleted && studentState !== STUDENT_STATES.summary) {\n handleProgress();\n } else {\n dispatch(loadNextQuestion());\n dispatch(activateWorkedSolution(false));\n isMilestoneComplete && navigateToTransitionScreen();\n }\n };\n const validateAnswer = async () => {\n const questionSetId = getQueryParam('questionSetId');\n const assignmentId = getQueryParam('assignmentId');\n\n playClick();\n\n if (answerValidationHandler) {\n answerValidationHandler(userResponse?.answer as answerRecord);\n } else if (\n questionSetId &&\n activity &&\n activity.contentId &&\n activity.questionVariantId) {\n const {\n contentId, questionVariantId\n } = activity;\n const saveData: SaveQuestionRequest = {\n questionSetId,\n assignmentId: assignmentId != null ? parseInt(assignmentId) : 0,\n studentAnswer: userResponse?.answer,\n contentId,\n questionVariantId\n };\n const response = await dispatch(saveQuestion(saveData));\n\n if (questionSetType === QuestionSetType.unitTest) {\n if((response as SaveQuestionResponse).progress?.isQuestCompleted) {\n handleProgress();\n } else {\n showNextQuestion(true);\n }\n }\n }\n };\n\n useEffect(() => {\n if (breakPoint === 'breakPoint' && studentState === STUDENT_STATES.resume) {\n handleProgress();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [breakPoint, studentState]);\n\n const handleActivityProgress = () => {\n playClick();\n handleProgress();\n };\n\n return (\n \n {questionSetType === QuestionSetType.questiconActivity &&\n \n }\n \n \n );\n};\n","import { STUDENT_STATES } from '../../helpers/enums';\n\nexport const getNextStudentState = (studentState: STUDENT_STATES) => {\n switch (studentState) {\n case STUDENT_STATES.intro:\n return STUDENT_STATES.fluencyIntro;\n\n case STUDENT_STATES.resume:\n case STUDENT_STATES.progress:\n case STUDENT_STATES.fluencyIntro:\n return STUDENT_STATES.question;\n\n case STUDENT_STATES.question:\n return STUDENT_STATES.summary;\n\n default:\n return STUDENT_STATES.progress;\n }\n};\n","import { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { AppState } from '../app/store/store.types';\nimport { isDefined } from '../helpers/utils';\nimport { ROUTES } from '../routes/routes';\n\nexport const useRouteChecker = (): { questionSetType: AppState['activityState']['questionSetType'] } => {\n const history = useHistory();\n const activityState = useSelector(state => state.activityState);\n const {\n questName, progress, questionSetType\n } = activityState;\n\n useEffect(() => {\n if (!isDefined(questName) && !isDefined(progress)) {\n history.replace(ROUTES.appInitialisation);\n }\n }, [history, progress, questName]);\n\n return { questionSetType };\n};\n","export default \"https://cdn.questicon.mathletics.com/assets/images/UPT_Background-06399ac8c97fadd29106c20042377d53.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/AYR_Background-793f8c815d39087fc53cdff7777fd5b8.svg\";","import {\n Box, Flex, useTheme\n} from '@chakra-ui/react';\nimport React, { useRef } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { QuestionSetType } from '../../../src/helpers/enums';\nimport { AppThemeType } from '../../../src/styles/theme/app-theme';\nimport { AppState } from '../../app/store/store.types';\nimport { Header } from '../../components/header/header';\nimport { QuestionContainer } from '../../containers/question-container/question-container';\nimport { useRouteChecker } from '../../hooks/use-route-checker';\nimport unitTestBackgroundImg from '../diagnostics/assets/UPT_Background.svg';\nimport backgroundImg from './assets/AYR_Background.svg';\nimport { useDiagnosticsResponsiveStyles } from './diagnostics.hooks';\n\nexport const Diagnostics = () => {\n useRouteChecker();\n\n const { diagnosticsResponsiveStyles } = useDiagnosticsResponsiveStyles();\n const activityState = useSelector(state => state.activityState);\n const theme: AppThemeType = useTheme();\n const scrollableContainer = useRef(null);\n\n return (\n \n \n \n
\n \n \n \n \n \n \n );\n};\n","/* eslint-disable */\nimport { useWithMobile } from '../../hooks/use-with-mobile';\n\nexport const useDiagnosticsResponsiveStyles = () => {\n const {\n landscape,\n isMobile,\n isTablet\n } = useWithMobile();\n const diagnosticsResponsiveStyles = () => {\n let styles = null;\n\n if ((isMobile || (landscape && isMobile)) && !isTablet) {\n styles = {\n overflow: 'auto'\n };\n }\n\n return styles;\n };\n\n return { diagnosticsResponsiveStyles };\n};\n","import { useLottie } from 'lottie-react';\n\ntype Props = {\n loop?: boolean\n animationData: unknown\n onComplete?: () => void\n};\n\nexport const useLottieAnim = ({\n loop=false,\n animationData,\n onComplete,\n ...restProps\n}: Props) => {\n const options = {\n loop,\n animationData,\n onComplete,\n ...restProps\n };\n const {\n View, animationItem\n } = useLottie(options);\n\n return {\n View,\n animationItem\n };\n};\n","import styled from '@emotion/styled';\n\nimport {\n pickThemeFlex, pickThemeVar\n} from '../../styles/theme/app-theme';\n\nexport const MilestoneTransitionStyled = styled.div`\n ${pickThemeFlex('flexColumnCentered')};\n\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n\n /**\n PHONE LANDSCAPE\n PHONE PORTRAIT\n */\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) and (orientation:landscape), \n (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n height: auto;\n min-height: 100%;\n }\n\n .transition-content {\n z-index: 1;\n margin-top: 30px;\n width: 100%;\n max-height: calc(100% - ${pickThemeVar('headerHeight')} - 30px);\n position: relative;\n\n /* ipad air 4 to ipad 8th */\n @media only screen\n and (-webkit-min-device-pixel-ratio: 2)\n and (orientation: landscape)\n and (min-width: 1010px)\n and (max-width: 1180px)\n {\n height: 100%;\n }\n /**\n LANDSCAPE\n */\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n margin-top: 16px;\n max-height: calc(100% - ${pickThemeVar('headerHeight')} - 16px);\n }\n \n /**\n PORTRAIT\n */\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n ${pickThemeFlex('flexColumn')};\n margin-top: 15px;\n max-height: calc(100% - ${pickThemeVar('headerHeight')} - 21px);\n }\n\n /**\n PHONE LANDSCAPE\n */\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) and (orientation:landscape) {\n ${pickThemeFlex('flexColumn')};\n margin-top: 21px;\n max-height: none;\n }\n }\n`;\n\nexport const ConfettiHolderStyled = styled.div`\n ${pickThemeFlex('flexChildCentered')};\n \n position: fixed;\n z-index: -1;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n`;\n","import styled from '@emotion/styled';\n\nimport { pickThemeVar } from '../../../../styles/theme/app-theme';\n\nexport const GuideStyled = styled.div`\n z-index: 0;\n background: linear-gradient(180deg, #0BB4F6 0%, #8EE0FE 100%);\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n \n img {\n max-width: 98%;\n }\n\n /** PORTRAIT */\n @media (max-width: ${pickThemeVar('breakPoint')}) {\n background: linear-gradient(0deg, #0BB4F6 0%, #8EE0FE 195.83%);\n }\n\n /** LESS THAN PORTRAIT */\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n background: linear-gradient(360deg, #0BB4F6 0%, #8EE0FE 191.44%);\n }\n`;\n","import React from 'react';\n\nimport AppImage from '../../../../components/app-image/app-image';\nimport { GuideStyled } from './guide.styled';\n\nexport const Guide = () => {\n return (\n \n \n \n );\n};\n","import styled from '@emotion/styled';\n\nexport const PointsContainer = styled.div`\n display: flex;\n position: absolute;\n bottom: 0;\n opacity: 0;\n width: 100%;\n justify-content: center;\n animation: slideIn 1s ease-in-out 0.5s forwards;\n\n @keyframes slideIn {\n from {\n bottom: 0;\n opacity: 0;\n }\n to {\n bottom: 20px;\n opacity: 1;\n }\n }\n`;\n\nexport const CoinTotalContainer = styled.div`\n .increment {\n box-shadow: 0 0 0 0 rgba(217, 152, 0, 0.7);\n animation: glow 2s cubic-bezier(0.66, 0, 0, 1);\n \n @keyframes glow {\n to {\n box-shadow: 0 0 0 8px rgba(217, 152, 0, 0);\n }\n }\n }\n`;\n","export default \"https://cdn.questicon.mathletics.com/assets/images/m_coin_outlined-695082cbc8327322dfc89ea66168d045.svg\";","import {\n Box, Center, Fade, Flex, Image, SlideFade, Text\n} from '@chakra-ui/react';\nimport Lottie, { LottieRef } from 'lottie-react';\nimport React, {\n RefObject, useEffect\n} from 'react';\n\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport coinAnimation from './Coin.json';\nimport {\n CoinTotalContainer, PointsContainer\n} from './collect-coins.styled';\nimport mCoin from './m_coin_outlined.svg';\nimport wingsAnimation from './Wings.json';\n\nexport const CollectCoins: React.FC<{\n coins: number\n points: number\n coinAnimationRef: LottieRef\n coinsTotalRef: RefObject\n coinsTotalDisplayRef: RefObject\n pointsTotalRef: RefObject\n wingsAnimationRef: LottieRef\n onComplete: () => void\n}> = ({\n coins,\n points,\n coinAnimationRef,\n coinsTotalRef,\n coinsTotalDisplayRef,\n pointsTotalRef,\n wingsAnimationRef,\n onComplete\n}) => {\n const {\n labelTxt: {\n collectCoinsHeading,\n ...labelTxt\n }\n } = lokalisation();\n const { beforeCollectingCoins } = useAudioEffectsContext();\n\n useEffect(() => {\n beforeCollectingCoins.play();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n \n \n \n {collectCoinsHeading}\n \n \n
\n \n \n \n \n
{coins}
\n
\n \n \n
\n
\n \n div': {\n width: {\n base: '200px',\n phoneLandscape: '300px'\n }\n }\n }}\n >\n {\n // @ts-ignore\n if (frame.totalTime === 36 && frame.currentTime === 35) {\n onComplete();\n }\n }}\n />\n
\n div': { flexGrow: 1 }\n }}\n >\n \n
\n \n \n \n \n \n {points}\n \n {labelTxt.points}\n \n =\n \n \n
{points}
\n \n \n {labelTxt.coins}\n \n \n
\n \n \n \n \n );\n};\n","import {\n Box, Divider, Text\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { DiagnosticIntroProps } from './diagnostics-intro.types';\n\nexport const DiagnosticsIntro: React.FC = ({\n firstName,\n activityName,\n maximumAttemptExceeded\n}) => {\n const {\n introTxt,\n messageBoxTxt: {\n questions,\n totalPoints\n },\n diagnosticIntroTxt\n } = lokalisation();\n\n return (\n \n \n \n {introTxt.hi} {firstName}, {introTxt.diagnosticGoal(maximumAttemptExceeded)}\n \n {activityName}\n \n
\n
\n
10
\n
{questions}
\n
\n
\n \n
\n
\n
{maximumAttemptExceeded ? 0 : 100}
\n
{totalPoints}
\n
\n
\n
\n {maximumAttemptExceeded &&\n {diagnosticIntroTxt.noPointsEarn}\n }\n
\n
\n );\n};\n","import {\n Container, Box, Text, Flex, Button\n} from '@chakra-ui/react';\nimport React, {\n useEffect,\n useRef\n} from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport { TransitionScreen } from '../../../../helpers/enums';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { returnToStudentPortal } from '../../../../helpers/utils';\nimport { ROUTES } from '../../../routes';\nimport { DiagnosticsSummaryProps } from './diagnostics-summary.types';\n\nexport const DiagnosticsSummary = ({\n studentName,\n totalCorrect,\n totalQuestions,\n maximumAttemptExceeded\n}: DiagnosticsSummaryProps) => {\n const {\n diagnosticsSummaryTxt: {\n scoreStatement, diagnosticsPraises, youScored, scoreRetention, scoreRetentionAfterMaximumAttempt, prompt, noPointsEarn\n },\n buttonTxt: {\n next, finish\n }\n } = lokalisation();\n const history = useHistory();\n const diagnosticFinishBtnRef = useRef(null);\n const { playClick } = useAudioEffectsContext();\n\n useEffect(() => {\n diagnosticFinishBtnRef.current?.focus({ preventScroll: true });\n }, []);\n\n function handleDiagnosticsFinish () {\n playClick();\n if (maximumAttemptExceeded || totalCorrect === 0) {\n returnToStudentPortal();\n } else {\n history.replace(`${ROUTES.milestoneTransition}/${TransitionScreen.finishScreen}`);\n }\n }\n\n return (\n \n \n \n {maximumAttemptExceeded ?\n <>{noPointsEarn}\n : <>{diagnosticsPraises(totalCorrect)}, {studentName}!}\n \n {youScored}\n {scoreStatement(totalCorrect, totalQuestions)}\n {!maximumAttemptExceeded && totalCorrect < 9 &&\n <>\n {prompt}\n {scoreRetention}\n \n }\n\n {(maximumAttemptExceeded || totalCorrect >= 9) &&\n {scoreRetentionAfterMaximumAttempt}\n }\n \n \n \n {(maximumAttemptExceeded || totalCorrect === 0) ? finish : next}\n \n \n \n );\n};\n","import { Box } from '@chakra-ui/react';\nimport React from 'react';\n\nimport { lokalisation } from '../../../../helpers/lokalisation';\n\nexport const ExceededAttemptsFinishScreen: React.FC = () => {\n const { exceededAttemptsFinishScreenTxt } = lokalisation();\n\n return (\n \n \n
{exceededAttemptsFinishScreenTxt.title}
\n {exceededAttemptsFinishScreenTxt.description}
\n
\n \n );};\n","import {\n Box,\n Flex, Image, RadioProps, Text, useRadio, useToken\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport FaceWithSweat from './assets/Face with Sweat.svg';\nimport GrimacingFace from './assets/Grimacing Face.svg';\nimport GrinningFace from './assets/Grinning Face.svg';\nimport SmilingFaceWithSmilingEyes from './assets/Smiling Face with Smiling Eyes.svg';\nimport SmilingFaceWithSunglasses from './assets/Smiling Face with Sunglasses.svg';\n\nexport const FeedbackItem: React.FC = ({\n feedbackType, ...radioProps\n}) => {\n const {\n state, getInputProps, getCheckboxProps, htmlProps, getLabelProps\n } = useRadio(radioProps);\n const [primary400] = useToken('colors', ['primary.400']);\n const feedbackEmojis = [FaceWithSweat, GrimacingFace, SmilingFaceWithSmilingEyes, GrinningFace, SmilingFaceWithSunglasses];\n\n return (\n \n \n \n \n \n \n \n {radioProps.children}\n \n \n \n );\n};\n","export default \"https://cdn.questicon.mathletics.com/assets/images/Face with Sweat-2e79e95642af25d192cf67d333942461.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Grimacing Face-66d48edcbfd98abcda53fee3c7f2ac61.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Smiling Face with Smiling Eyes-9227c8b9d7e7f4924ca0a544bdd3a8bd.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Grinning Face-d5bbeba07d2ec5696ab67eedc302d135.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/Smiling Face with Sunglasses-2da8dd760382e95d5d02422d953af0de.svg\";","import {\n Box, Stack, Text, useRadioGroup\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { FeedbackItem } from './feedback-item';\n\nexport const FeedbackScreen: React.FC<{\n handleChange: (value: string) => void\n questionsetTitle?: string\n}> = ({\n handleChange,\n questionsetTitle\n}) => {\n const { playSelfAssesmentEmojisAudio } = useAudioEffectsContext();\n const {\n feedbackTxt: {\n heading,\n feedback\n }\n } = lokalisation();\n const {\n getRadioProps, getRootProps\n } = useRadioGroup({\n onChange: (nextValue) => {\n playSelfAssesmentEmojisAudio(Number(nextValue));\n handleChange(nextValue);\n }\n });\n\n return (\n \n \n \n {heading}\n {questionsetTitle}?\n \n \n {Object.keys(feedback).map((feedbackItem, index) => (\n \n {feedback[feedbackItem as keyof typeof feedback]}\n \n ))}\n \n \n \n );\n};\n","import styled from '@emotion/styled';\n\nimport {\n pickThemeFlex, pickThemeVar\n} from '../../../../styles/theme/app-theme';\n\nexport const IntroScreenStyled = styled.div`\n width: 100%;\n background-color: white;\n`;\n\nexport const HeaderTitle = styled.div`\n font-size: 30px;\n line-height: 140%;\n color: ${({ theme: { colors: { neutral } } }) => neutral['900']};\n letter-spacing: -0.8px;\n margin: 32px 32px 0 40px;\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n font-size: 24px;\n margin: 32px 32px 0 32px;\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n margin: 32px 20px 0 20px;\n }\n`;\n\nexport const QuestionSetTitle = styled.div`\n font-size: 44px;\n line-height: 57px;\n letter-spacing: -1.2px;\n margin: 24px 24px 0 40px;\n color: ${pickThemeVar('blue02')};\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n font-size: 36px;\n line-height: 47px;\n letter-spacing: -1.15px;\n margin: 24px 24px 0 32px;\n color: ${pickThemeVar('blue02')}\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n font-size: 34px;\n line-height: 44px;\n margin: 24px 20px 0 20px;\n color: ${pickThemeVar('blue02')}\n }\n`;\n\nexport const ExampleHeading = styled.div`\n font-size: 30px;\n line-height: 42px;\n margin: 24px 24px 0 40px;\n letter-spacing: -0.8px;\n color: ${({ theme: { colors: { neutral } } }) => neutral['900']};\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n font-size: 24px;\n line-height: 34px;\n margin: 24px 24px 0 32px;\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n margin: 24px 20px 0 20px;\n }\n`;\n\nexport const ExampleQuestionWrapper = styled.div`\n font-weight: 400;\n letter-spacing: -1px;\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n letter-spacing: -0.8px;\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n font-weight: 700;\n letter-spacing: -0.8px;\n }\n`;\n\nexport const Section = styled.div`\n ${pickThemeFlex('flexRowSpaced')};\n background: linear-gradient(90deg, rgba(211, 241, 254, 1) 60%, rgba(197, 231, 191, 1) 100%);\n margin-top: 40px;\n padding: 40px 40px 0 40px;\n\n .column {\n width: calc(50% - 20px);\n }\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n margin-top: 32px;\n padding: 30px 32px 0 32px;\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n ${pickThemeFlex('flexColumn')};\n padding: 32px 20px 0 20px;\n \n .column {\n width: 100%;\n\n :last-of-type {\n margin-bottom: 30px;\n }\n }\n }\n`;\n\nexport const Content = styled.div`\n ${pickThemeFlex('flexColumn')};\n\n .copy {\n font-size: 16px;\n line-height: 130%;\n margin-bottom: 30px;\n color: ${({ theme: { colors: { neutral } } }) => neutral['700']};\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n font-size: 14px;\n margin-bottom: 24px;\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n line-height: 140%;\n }\n }\n`;\n\nexport const Heading = styled.div`\n font-size: 20px;\n line-height: 28px;\n margin-bottom: 12px;\n color: ${({ theme: { colors: { neutral } } }) => neutral['900']};\n letter-spacing: -0.002em;\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n font-size: 18px;\n line-height: 21.6px;\n margin-bottom: 12px;\n letter-spacing: -0.004em;\n }\n`;\n\nexport const ConceptRefreshImageBtn = styled.input`\n width: 100%;\n height: auto;\n margin-bottom: 25px;\n border-radius: 8px;\n`;\n","import { ModalClickviewVideo } from '@3plearning/question-components-library';\nimport { useDisclosure } from '@chakra-ui/react';\nimport React from 'react';\n\nimport conceptRefreshBtnSrc from '../../../../../assets/images/concept-refresh-btn.png';\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport {\n ConceptRefreshImageBtn,\n Content, Heading\n} from './intro-screen.styled';\nimport {\n ConceptRefreshSlideProps,\n ContentType\n} from './intro-screen.types';\n\nconst ConceptRefreshSlide = ({ conceptRefresh }: ConceptRefreshSlideProps) => {\n const { ...chakraModalProps } = useDisclosure();\n const { introTxt } = lokalisation();\n const url = conceptRefresh && [...conceptRefresh[0].content]?.pop()?.text || '';\n const { playClick } = useAudioEffectsContext();\n\n return (\n \n \n {introTxt.conceptRefresh}\n \n {\n window.dataLayer.push({ event: 'concept_refresh' });\n playClick();\n chakraModalProps.onOpen();\n }}\n data-testid={'concept-refresh-btn'}\n />\n \n \n );\n};\n\nexport default ConceptRefreshSlide;\n","export default \"https://cdn.questicon.mathletics.com/assets/images/concept-refresh-btn-b9cbbabd1a92d2106ce699d663738aba.png\";","import {\n Content,\n ContentSegment,\n Segment\n} from '@3plearning/question-components-library';\nimport React from 'react';\n\nexport const generateBlock = (blocks: Content = [], assetsBasePath?: string, blockKey?: string) => (\n
\n {blocks?.map(({ content }, blockIndex: number) => (\n
\n {content && assetsBasePath && }\n
\n ))}\n
\n);\n","import { Flex } from '@chakra-ui/react';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../../../app/store/store.types';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { transformSchema } from '../../../../helpers/utils';\nimport ConceptRefreshSlide from './concept-refresh-slide';\nimport {\n IntroScreenStyled,\n Section,\n HeaderTitle,\n QuestionSetTitle,\n ExampleHeading,\n ExampleQuestionWrapper,\n Content,\n Heading\n} from './intro-screen.styled';\nimport { generateBlock } from './utils/intro-screen.utils';\n\nexport const IntroScreen = () => {\n /*\n * ACTIVITY STATE\n */\n const activityState = useSelector(state => state.activityState);\n const {\n studentName, questName, learningIntention, successCriteria, questionExample, conceptRefresh\n } = activityState;\n const { firstName } = studentName || {};\n const { introTxt } = lokalisation();\n const assetsBasePath = window._env_.ASSETS_CDN_BASE_PATH;\n\n return (\n <>{assetsBasePath && \n \n {introTxt.hi} {(firstName)}, {introTxt.goal}\n \n \n {questName}\n \n \n {introTxt.questionSubHeading}\n \n {generateBlock(transformSchema(questionExample) as [], assetsBasePath)}\n \n \n
\n
\n {learningIntention &&\n \n {introTxt.intention}\n
{generateBlock(transformSchema(learningIntention) as [], assetsBasePath)}
\n
\n }\n \n {introTxt.success}\n
{generateBlock(transformSchema(successCriteria) as [], assetsBasePath)}
\n
\n
\n \n \n \n
\n
}\n );\n};\n\n","import {\n Divider, Text\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { isDefined } from '../../../../helpers/utils';\n\ninterface MidMilestoneScreenProps {\n hasMilestoneSummary?: boolean\n header?: string\n header2?: string\n milestoneDescription?: string\n milestoneHeader?: string\n nextStageLabel?: string\n noPointsEarnTxt?: string\n numMilestoneQuestions?: number\n questionsTxt?: string\n questName?: string\n totalMilestonePoints?: number\n totalPointsTxt?: string\n}\n\nexport const MidMilestoneScreen = ({\n hasMilestoneSummary,\n header,\n header2,\n milestoneDescription,\n milestoneHeader,\n nextStageLabel,\n noPointsEarnTxt,\n numMilestoneQuestions,\n questionsTxt,\n questName,\n totalMilestonePoints,\n totalPointsTxt\n}: MidMilestoneScreenProps) => (\n <>\n
\n
{questName}
\n
\n
\n
\n {(isDefined(header)) &&\n
{header}
\n }\n
{header2}
\n {nextStageLabel &&
{nextStageLabel}
}\n
{milestoneHeader}
\n
{milestoneDescription}
\n {hasMilestoneSummary &&\n
\n
\n
\n
{numMilestoneQuestions}
\n
{questionsTxt}
\n
\n
\n \n
\n
\n
{totalMilestonePoints}
\n
{totalPointsTxt}
\n
\n
\n
\n }\n {noPointsEarnTxt &&\n {noPointsEarnTxt}\n }\n
\n
\n \n);\n","export default \"https://cdn.questicon.mathletics.com/assets/images/summary-tick-0f95320fd2a0823344ce46dc9475aba3.svg\";","import {\n useEffect, useRef, useState\n} from 'react';\n\nimport GoldBrick from '../../../../../../assets/lottie/GoldBar.json';\nimport GoldBarStars from '../../../../../../assets/lottie/GoldBarStars.json';\nimport { animateScore } from '../../../../../containers/question-container/anims/anims';\nimport { lokalisation } from '../../../../../helpers/lokalisation';\nimport { useLottieAnim } from '../../../../../hooks/use-lottie-anim';\n\ntype Options = {\n totalCorrect: number\n totalQuestions: number\n playStarAnimation?: boolean\n};\n\nexport function useGetAnimationDetails ({\n totalCorrect, totalQuestions\n}: Options) {\n const [playStarsAnim, setPlayStarsAnim] = useState(false);\n const barRef = useRef(null);\n const barGoldRef = useRef(null);\n const totalCorrectRef = useRef(null);\n const percentValue = totalCorrect / totalQuestions;\n const scoreNum = Math.round(100 * percentValue);\n const showGold = scoreNum >= 80;\n const { summaryTxt: { score } } = lokalisation();\n const { View: goldBarStars } = useLottieAnim({ animationData: GoldBarStars });\n const { View: goldBrick } = useLottieAnim({ animationData: GoldBrick });\n\n useEffect(() => {\n if (\n barRef && barRef.current &&\n barGoldRef && barGoldRef.current &&\n totalCorrectRef && totalCorrectRef.current) {\n const callback = () => {\n setPlayStarsAnim(true);\n };\n\n animateScore({\n bar: barRef.current,\n barGold: barGoldRef.current,\n score: scoreNum,\n scoreNumTxt: totalCorrectRef.current,\n callback\n });\n }\n }, [scoreNum]);\n\n return {\n score,\n showGold,\n barRef,\n barGoldRef,\n goldBarStars,\n goldBrick,\n totalCorrectRef,\n scoreNum,\n playStarsAnim\n };\n}\n","export default \"https://cdn.questicon.mathletics.com/assets/images/silver-bar-3bfbbcca68c297e211a3d9c5edccc76a.png\";","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { app } from '../../../../../../styles/theme/variables';\nimport { ProgressBarAndStarContainerProps } from '../progress-bar-and-star-container';\n\nexport type StarRatingType = 'Full' | 'Half' | undefined;\n\ntype ProgressBarProps = {\n isSummaryPage: boolean\n};\n\nexport const ProgressInnerBarStyled = styled.div>(props => {\n const {\n totalCorrect, totalQuestions\n } = props;\n const percentValue = totalCorrect / totalQuestions;\n\n return css`\n height: 100%;\n position: relative;\n\n .inner-bar {\n width: calc(100% * ${percentValue});\n height: 100%;\n border-radius: 32px;\n background: linear-gradient(270deg, #F8CD01 -18.89%, #58D25B 56.29%);\n }\n\n .inner-bar-gold {\n opacity: 0;\n width: calc(100% * ${percentValue});\n height: 100%;\n border-radius: 32px;\n position: absolute;\n top: 0;\n left: 0;\n background: linear-gradient(133deg, #FEDF01 0%, #EAA400 100%);\n }\n\n .gold-bar-stars {\n position: absolute;\n transform: translateY(-62.5%);\n left: 0;\n }\n `;\n});\n\nexport const ProgressTextStyled = styled.div(props => {\n const { isSummaryPage } = props;\n\n return css`\n display: flex;\n flex-direction: row;\n align-items: baseline;\n position: relative;\n bottom: 3px;\n width: ${isSummaryPage ? '85px' : 'auto'};\n\n .progress-text {\n font-size: 32px;\n line-height: 30px;\n color: ${app.neutral900};\n min-width: auto;\n\n @media (min-width: ${app.breakTabletLandscape}) {\n font-size: 44px;\n }\n }\n\n .progress-text-percent {\n font-size: 16px;\n\n @media (min-width: ${app.breakTabletLandscape}) {\n font-size: 24px;\n }\n }\n `;\n});\n\nexport const ProgressHeading = styled.div`\n margin-bottom: 16px;\n height: 25px;\n \n .label {\n color: ${app.neutral900};\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: normal;\n letter-spacing: 1px;\n text-transform: uppercase;\n }\n\n .info {\n color: ${app.neutral900};\n font-size: 16px;\n font-style: normal;\n font-weight: 700;\n line-height: normal;\n margin-left: 10px;\n }\n`;\n\nexport const ProgressImageStyled = styled.div(props => {\n const { isSummaryPage } = props;\n\n return css`\n flex-shrink: 0;\n\n .grey-bar {\n margin: 0 10px\n }\n\n .gold-bar {\n width: ${isSummaryPage ? '80px' : '54px'};\n }\n `\n ;\n});\n","import {\n Box, Flex, HStack, Image, Text, useTheme, VStack\n} from '@chakra-ui/react';\nimport React, {\n ReactElement, RefObject\n} from 'react';\n\nimport SilverBar from '../../../../../../../assets/images/silver-bar.png';\nimport { lokalisation } from '../../../../../../helpers/lokalisation';\nimport {\n ProgressHeading, ProgressImageStyled, ProgressInnerBarStyled, ProgressTextStyled\n} from './progress-bar.styled';\n\ntype ProgressBarProps = {\n score: string\n totalCorrect: number\n totalQuestions: number\n showGold: boolean\n barRef: RefObject\n barGoldRef: RefObject\n goldBarStars: ReactElement\n goldBrick: ReactElement\n totalCorrectRef: RefObject\n scoreNum: number\n isSummaryPage: boolean\n};\n\nexport function ProgressBar ({\n score,\n totalCorrect,\n totalQuestions,\n showGold,\n barRef,\n barGoldRef,\n goldBarStars,\n goldBrick,\n totalCorrectRef,\n scoreNum,\n isSummaryPage\n}: ProgressBarProps) {\n const theme = useTheme();\n const { neutral900 } = theme?.app;\n const { unitPracticeTest } = lokalisation();\n\n return (\n \n {isSummaryPage && \n \n
\n { score }\n
\n
{`${totalCorrect}/${totalQuestions}`}
\n
\n
}\n \n {!isSummaryPage &&\n \n \n {unitPracticeTest.accuracy}\n \n \n }\n \n \n \n
\n
\n {showGold &&\n
{goldBarStars}
\n }\n \n \n \n {showGold &&\n {goldBrick}
\n }\n {!showGold &&\n \n \n
\n }\n \n \n \n {scoreNum}\n
\n \n %\n
\n \n \n \n \n );\n}\n","/* istanbul ignore file */\n/*\n* There are 2 lottie animation types - half star and full star.\n* There are up to 3 gold Rating Stars to display depending on the number of total stars earned,\n* after answering the total number of questions. They increment by half a star form half to 3 stars. Even a zero score\n* will earn half a star.\n*\n* Refer to the summary > util > utils.ts for the hard coded values.\n*\n* There is a Grey Rating Star at each of the 3 positions.\n* The 2 lottie animation files are positioned together starting at position 1 above the grey Rating Star.\n* They both begin with opacity = 0 so the grey Rating Star underneath is visible. Only one of the animations will\n* appear and then play at any one position.\n*\n* At each position only one of these 2 animations may run as a starburst animation.\n* On completion of the animation currently being played, the animations are moved to the next position if required. The\n* showStarType function is also triggered so a static svg appears beneath the completed position by affecting\n* the styling of the relevant ProgressStar component.\n*\n* After the last animation completes, the lottie animations are destroyed.\n* */\nimport {\n Circle, HStack\n} from '@chakra-ui/react';\nimport { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { useLottie } from 'lottie-react';\nimport React, {\n useCallback,\n useEffect, useState\n} from 'react';\n\nimport FullStar from '../../../../../../../assets/lottie/StarBurstFull.json';\nimport HalfStar from '../../../../../../../assets/lottie/StarBurstHalf.json';\nimport { useWindowSize } from '../../../../../../hooks/use-window-size';\nimport { app } from '../../../../../../styles/theme/variables';\nimport {\n getStarRatingNum, getStarType\n} from '../../utils/util';\nimport { StarRatingType } from '../progress-bar/progress-bar.styled';\nimport {\n AnimProps, ProgressStarAnimProps\n} from './star-rating.types';\n\nconst ProgressStarAnimStyled = styled.div((props) => {\n const {\n type, showStarType\n } = props;\n const opacity = type && showStarType && type === showStarType ? 1 : 0;\n\n return css`\n opacity: ${opacity};\n position: absolute;\n\n svg {\n width: 210px !important;\n height: unset !important;\n }\n\n @media (min-width: ${app.break1270}) {\n svg {\n width: 285px !important;\n }\n }\n `;\n});\n\nexport const ProgressStarAnim = ({\n totalStars, setPlayStarNum\n}: ProgressStarAnimProps) => {\n const [leftPos, setLeftPos] = useState();\n const [showStarType, setShowStarType] = useState(undefined);\n const [animCycleNum, setAnimCycleNum] = useState(1);\n const {\n numRatingStars, numRatingStarAnims\n } = getStarRatingNum(totalStars);\n const completeCycleCallback = () => {\n setAnimCycleNum(animCycleNum => animCycleNum + 1);\n };\n const baseOptions = {\n loop: false,\n autoplay: false\n };\n const fullStarOptions = {\n // workaround for lottie-react bug https://github.com/airbnb/lottie-web/issues/1702#issuecomment-508553873\n animationData: JSON.parse(JSON.stringify(FullStar)),\n onComplete: completeCycleCallback,\n ...baseOptions\n };\n const halfStarOptions = {\n animationData: JSON.parse(JSON.stringify(HalfStar)),\n onComplete: completeCycleCallback,\n ...baseOptions\n };\n const fullStarLottie = useLottie(fullStarOptions);\n const halfStarLottie = useLottie(halfStarOptions);\n const { viewWidth } = useWindowSize();\n const isXLWindow = viewWidth > parseInt(app.break1270);\n const isMDWindow = viewWidth > parseInt(app.breakTabletPortrait);\n const isBreak680window = viewWidth > parseInt(app.break680);\n const setNextPos = useCallback((starNum: number) => {\n let pos = starNum === 2 ? '87px' : '175px';\n\n if (starNum === 2) {\n if (isXLWindow) {\n pos = '115px';\n } else if (isMDWindow) {\n pos = '108px';\n } else if (isBreak680window) {\n pos = '126px';\n }\n } else {\n if (isXLWindow) {\n pos = '205px';\n } else if (isMDWindow) {\n pos = '186px';\n } else if (isBreak680window) {\n pos = '214px';\n }\n }\n\n setLeftPos(pos);\n setPlayStarNum(starNum);\n }, [isMDWindow, isXLWindow, setPlayStarNum, isBreak680window]);\n\n /* BEGIN CYCLE */\n useEffect(() => {\n if (numRatingStars) {\n let pos;\n\n if (isXLWindow) {\n pos = '25px';\n } else if (isMDWindow) {\n pos = '30px';\n } else if (isBreak680window) {\n pos = '38px';\n } else {\n pos = '0px';\n }\n\n if (viewWidth) {\n setLeftPos(pos);\n }\n\n const type = numRatingStars > 0.5 ? 'Full' : 'Half';\n const animType = type === 'Half' ? halfStarLottie : fullStarLottie;\n\n setShowStarType(type);\n setPlayStarNum(1);\n\n animType.goToAndPlay(1, true);\n }\n }, [isMDWindow, isXLWindow, isBreak680window, numRatingStars, setPlayStarNum, halfStarLottie, fullStarLottie, viewWidth]);\n const playNextAnim = useCallback((pos: number) => {\n const starType = getStarType({\n totalStars,\n index: pos - 1\n });\n const animType = starType === 'Half' ? halfStarLottie : fullStarLottie;\n\n setShowStarType(starType);\n setNextPos(pos);\n animType.goToAndPlay(1, true);\n }, [fullStarLottie, halfStarLottie, setNextPos, totalStars]);\n\n useEffect(() => {\n if (numRatingStarAnims &&\n numRatingStars &&\n halfStarLottie &&\n fullStarLottie\n ) {\n if (animCycleNum === 2 || animCycleNum == 3) {\n const numCyclesLeft = numRatingStarAnims - animCycleNum + 1;\n\n if (numCyclesLeft) {\n playNextAnim(animCycleNum);\n }\n }\n }\n }, [animCycleNum, fullStarLottie, halfStarLottie, numRatingStarAnims, numRatingStars, playNextAnim]);\n\n useEffect(() => {\n if (numRatingStarAnims && animCycleNum > numRatingStarAnims) {\n halfStarLottie.destroy();\n fullStarLottie.destroy();\n }\n }, [animCycleNum, numRatingStarAnims, halfStarLottie, fullStarLottie]);\n\n useEffect(() => {\n return () => {\n halfStarLottie.destroy();\n fullStarLottie.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n {leftPos && \n {fullStarLottie.View}\n \n {halfStarLottie.View}\n \n }\n \n );\n}\n;\n/*\n* http://localhost:6006/?path=/story/routes-resultspage--progress-anim-90\n* */\n","/* istanbul ignore file */\nimport {\n useState, useEffect\n} from 'react';\n\n/*\n https://usehooks.com/useWindowSize/\n */\nexport function useWindowSize () {\n // Initialize state with 0 width/height so server and client renders match\n // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/\n const [windowSize, setWindowSize] = useState({\n viewWidth: 0,\n viewHeight: 0\n });\n\n useEffect(() => {\n // Handler to call on window resize\n function handleResize () {\n // Set window width/height to state\n setWindowSize({\n viewWidth: window.innerWidth,\n viewHeight: window.innerHeight\n });\n }\n\n // Add event listener\n window.addEventListener('resize', handleResize);\n\n // Call handler right away so state gets updated with initial window size\n handleResize();\n\n // Remove event listener on cleanup\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n // Empty dependency array ensures that effect is only run on mount\n\n return windowSize;\n}\n\n","import {\n Circle, Image\n} from '@chakra-ui/react';\nimport React, {\n useEffect, useState\n} from 'react';\n\nimport starGrey from '../../../../../../../assets/images/Star-grey.svg';\nimport starHalfGold from '../../../../../../../assets/images/Star-half.svg';\nimport starGold from '../../../../../../../assets/images/Star.svg';\nimport { starStyle } from './progress-star-rating';\nimport { ProgressStarProps } from './star-rating.types';\n\nexport const ProgressStar = ({\n num, playStarNum, starType\n}: ProgressStarProps) => {\n const [showAnim, setShowAnim] = useState(false);\n\n useEffect(() => {\n if (num === playStarNum) {\n setShowAnim(true);\n }\n }, [num, playStarNum]);\n\n return (\n \n \n {starType &&\n \n }\n \n );\n};\n","export default \"https://cdn.questicon.mathletics.com/assets/images/Star-half-4ea4fb2fcb28b48e926dfafbed68e025.svg\";","import {\n Box, HStack, SystemStyleObject\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { MAX_ATTEMPTS } from '../../../../../../helpers/constants';\nimport { getStarType } from '../../utils/util';\nimport { ProgressStar } from './progress-star';\nimport { ProgressStarRatingProps } from './star-rating.types';\n\nexport const starStyle: SystemStyleObject = {\n width: {\n base: '48px',\n break1270: '64px'\n },\n h: {\n base: '48px',\n break1270: '64px'\n }\n};\n\nexport const ProgressStarRating = ({\n totalStars, playStarNum\n}: ProgressStarRatingProps) => {\n const result = [];\n const wholeStars = MAX_ATTEMPTS - 1;\n\n for (let i = 0; i <= wholeStars; ++i) {\n const num = i + 1;\n const starType = getStarType({\n totalStars,\n index: i\n });\n\n result.push(\n \n \n \n );\n }\n\n return (\n \n {result}\n \n );\n};\n","import { Flex } from '@chakra-ui/react';\nimport React, {\n FC, useState\n} from 'react';\n\nimport { ProgressStarAnim } from './progress-star-anim';\nimport { ProgressStarRating } from './progress-star-rating';\nimport { ProgressStarsProps } from './star-rating.types';\n\nexport const ProgressStars: FC = ({\n totalStars, playStarsAnim\n}) => {\n const [playStarNum, setPlayStarNum] = useState(0);\n\n return (\n \n \n\n {playStarsAnim &&\n \n }\n \n );\n};\n","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { ThemeProps } from '../../../../styles/theme/app-theme';\n\nexport const InfoWrapper = styled.span(({ theme }: ThemeProps) => {\n return css`\n .info-icon {\n :hover {\n cursor: pointer;\n\n path {\n fill: ${theme.app.blue02};\n }\n }\n }\n `;\n});\n","import {\n Circle, Image\n} from '@chakra-ui/react';\nimport React, {} from 'react';\n\nimport star from '../../../../../../../assets/images/Star.svg';\nimport { getStarType } from '../../utils/util';\nimport { Props } from './star-rating.types';\n\nexport const StarRating = ({ rating }: Props) => {\n const {\n from, numRatingStarAnims\n } = rating;\n const result = [];\n\n for (let i = 0; i <= numRatingStarAnims; ++i) {\n const starType = getStarType({\n totalStars: from,\n index: i\n });\n\n if (starType) {\n result.push(\n \n {(starType === 'Full') &&\n \n }\n {(starType === 'Half') &&\n \n }\n \n );\n }\n }\n\n return (\n <>\n {result}\n \n );\n};\n","import {\n Flex, HStack, SimpleGrid, Text, Tooltip, useOutsideClick, useTheme, Image\n} from '@chakra-ui/react';\nimport React, {\n useRef, useState\n} from 'react';\n\nimport closeIcon from '../../../../../../../assets/images/close-icon.svg';\nimport AppImage from '../../../../../../components/app-image/app-image';\nimport { useAudioEffectsContext } from '../../../../../../components/audio/provider/audio-effects-provider';\nimport { lokalisation } from '../../../../../../helpers/lokalisation';\nimport { InfoWrapper } from '../../summary.styled';\nimport { ratings } from '../../utils/util';\nimport { StarRating } from './star-rating';\n\nexport const StarTooltip = () => {\n const theme = useTheme();\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n const { playClick } = useAudioEffectsContext();\n const handleTooltip = () => {\n playClick();\n setIsTooltipOpen(!isTooltipOpen);\n };\n const tooltipRef = useRef(null);\n\n useOutsideClick({\n ref: tooltipRef,\n handler: () => {\n setIsTooltipOpen(false);\n }\n });\n const { summaryTxt: { starRatings } } = lokalisation();\n const StarRatings = (\n \n \n \n {starRatings}\n \n \n {ratings.map((rating, index) => {\n return (\n \n \n \n \n {rating.from}-{rating.to}\n \n );\n }\n )}\n \n \n \n \n );\n\n return (\n \n \n \n \n \n\n );\n};\n","import {\n Box, Flex, HStack\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { MAX_ATTEMPTS } from '../../../../../../helpers/constants';\nimport { lokalisation } from '../../../../../../helpers/lokalisation';\nimport { ProgressHeading } from '../progress-bar/progress-bar.styled';\nimport { ProgressStars } from './progress-stars';\nimport { StarRatingContainerProps } from './star-rating.types';\nimport { StarTooltip } from './star-tooltip';\n\nexport function StarRatingContainer ({\n totalQuestions,\n totalStars,\n playStarsAnim\n}: StarRatingContainerProps) {\n const totalMaxStars = totalQuestions * MAX_ATTEMPTS;\n const {\n summaryTxt: {\n stars, overallRating\n }\n } = lokalisation();\n\n return (\n \n \n \n \n \n
\n {overallRating}\n
\n
{`${totalStars}/${totalMaxStars}`}
\n
{stars}
\n
\n \n \n
\n
\n \n \n );\n}\n","import { Flex } from '@chakra-ui/react';\nimport React, { FC } from 'react';\n\nimport { useGetAnimationDetails } from '../hooks/use-get-animation-details';\nimport { ProgressBar } from './progress-bar/progress-bar';\nimport { StarRatingContainer } from './star-rating/star-rating-container';\n\nexport type ProgressBarAndStarContainerProps = {\n totalCorrect: number\n totalQuestions: number\n totalStars: number\n playStarAnimation?: boolean\n};\n\nexport const ProgressBarAndStarContainer: FC = ({\n totalCorrect, totalQuestions, totalStars\n}) => {\n const {\n score,\n showGold,\n barRef,\n barGoldRef,\n goldBarStars,\n goldBrick,\n totalCorrectRef,\n scoreNum,\n playStarsAnim\n } = useGetAnimationDetails({\n totalCorrect,\n totalQuestions\n });\n\n return (\n \n \n \n \n );\n};\n\n","import { FeedbackProps } from './summary.types';\n\nexport const feedbackByScore = (feedbacks?: FeedbackProps[], score?: number) => {\n if (!feedbacks || (!score && score != 0)) { return; }\n let index = 0;\n\n const praises = feedbacks.length ? feedbacks : [{\n id: '-1',\n percentage: -1,\n feedback: ''\n }];\n\n praises.sort((a: FeedbackProps, b: FeedbackProps) => b.percentage - a.percentage);\n\n praises.forEach((feedback: FeedbackProps, ind: number) => {\n if (score <= feedback.percentage) {\n index = ind;\n }\n });\n\n return [praises[index].feedback];\n};\n","import { ContentSegment } from '@3plearning/question-components-library';\nimport {\n Button,\n Image,\n Container,\n Flex,\n HStack,\n Text,\n useTheme,\n UnorderedList,\n ListItem,\n Circle,\n Divider,\n VStack,\n useMediaQuery,\n Stack,\n StackDirection\n} from '@chakra-ui/react';\nimport React, {\n useEffect, useRef, useState\n} from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport SummaryMountain from '../../../../../assets/images/summary-mountain.svg';\nimport SummaryTick from '../../../../../assets/images/summary-tick.svg';\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport { MAX_QUESTION_SET_ATTEMPT } from '../../../../helpers/constants';\nimport {\n PROGRESS_STATE, TransitionScreen\n} from '../../../../helpers/enums';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { getRandomArrayElement } from '../../../../helpers/utils';\nimport { ROUTES } from '../../../routes';\nimport { ProgressBarAndStarContainer } from './sub-components/progress-bar-and-star-container';\nimport {\n FeedbackProps,\n SummaryProps\n} from './summary.types';\nimport { feedbackByScore } from './summary.utils';\nimport { getFinalTotals } from './utils/util';\n\nexport const Summary = (props: SummaryProps) => {\n const {\n progress, studentName, questName, praiseFeedback\n } = props;\n const summaryNextBtnRef = useRef(null);\n const history = useHistory();\n const theme = useTheme();\n const {\n red06,\n yellow02,\n green03,\n red07,\n orange02,\n green04,\n fontGrey01,\n blue02,\n blue06,\n green02,\n orange01\n } = theme?.app;\n const [isLargerThan600] = useMediaQuery('(min-width: 600px)');\n const stackDirection: StackDirection = isLargerThan600 ? 'row' : 'column';\n const assetsBasePath = window._env_.ASSETS_CDN_BASE_PATH;\n const {\n buttonTxt, progressTxt, summaryTxt\n } = lokalisation();\n const {\n praiseStatement, praiseFeedback2, praiseFeedback3, feedbackByStrength\n } = summaryTxt;\n const { playClick } = useAudioEffectsContext();\n /*\n * Build a single TotalStats object, finalTotal\n */\n const {\n finalTotal: {\n correct: totalCorrect,\n stars: totalStars,\n questions: totalQuestions = 0\n }, sectionTotals\n } = getFinalTotals({ progress });\n const bgByStrength = [\n red06,\n yellow02,\n green03\n ];\n const emojiByStrength = [\n '👀',\n '🙌',\n '💪'\n ];\n const colorByStrength = [\n red07,\n orange02,\n green04\n ];\n const feedbacks = [\n feedbackByScore(praiseFeedback as FeedbackProps[] | undefined, totalCorrect * 10),\n [praiseFeedback2(totalCorrect)],\n [praiseFeedback3(totalCorrect)]\n ];\n const [selectedStatement, setSelectedStatement] = useState('');\n\n useEffect(() => {\n // prevent changing praise statement on rerender\n setSelectedStatement(getRandomArrayElement(praiseStatement(totalCorrect, studentName)));\n summaryNextBtnRef.current?.focus({ preventScroll: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // completedAttempts is incremented from BE after final question is completed. Show summary for completedAttempts: 1 - 5\n const exceededMaximumAttempts = (progress?.completedAttempts ?? 0) > MAX_QUESTION_SET_ATTEMPT;\n const handleNext = () => {\n playClick();\n if (exceededMaximumAttempts) {\n history.replace(`${ROUTES.milestoneTransition}/${TransitionScreen.exceededAttemptsFinishScreen}`);\n } else {\n history.replace(`${ROUTES.milestoneTransition}/${TransitionScreen.finishScreen}`);\n }\n };\n\n return (\n \n\n \n \n \n {selectedStatement} 🎉\n \n\n \n\n \n \n {questName}\n \n \n {feedbacks.filter((feedback) => feedback?.some(Boolean)).map((feedback, i) => (\n \n \n \n ))}\n \n \n {Object.keys(PROGRESS_STATE).filter(key => isNaN(Number(key))).map(\n (state, value) => {\n const strength = sectionTotals[value]?.strength;\n const isFluency = value === PROGRESS_STATE.fluency;\n const isProblemSolving = value === PROGRESS_STATE.problemSolving;\n\n return (\n \n \n {emojiByStrength[strength]}\n \n {feedbackByStrength[strength]}\n \n \n \n \n \n \n \n \n {progressTxt[value]}\n \n \n {sectionTotals[value]?.points?.map((pointsObj, i) => (\n \n {!exceededMaximumAttempts &&\n \n {pointsObj.pointsEarned}\n \n }\n \n ))}\n {isProblemSolving &&\n }\n \n \n {stackDirection === 'row' &&\n }\n \n );\n }\n )}\n {stackDirection === 'column' &&\n \n }\n \n \n \n \n {buttonTxt.next}\n \n \n \n );\n};\n","import {\n Flex, Box, Center, Image, useTheme\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport CorrectAnswer from './assets/Correct.svg';\nimport InCorrectAnswer from './assets/InCorrect.svg';\n\ntype Props = {\n answer: number\n questionNumber: number\n};\n\nexport function Result ({\n answer, questionNumber\n}: Props) {\n const theme = useTheme();\n const {\n green02,\n green05,\n orange01,\n orange03\n }= theme?.app;\n\n return (\n \n \n {questionNumber}\n \n \n \n \n \n );\n}\n\n","export default \"https://cdn.questicon.mathletics.com/assets/images/Correct-7dc62e04fae16a9c152a2a7d21dcfeab.svg\";","export default \"https://cdn.questicon.mathletics.com/assets/images/InCorrect-9c88bd8dc68c05c705fa7f070bf03fe7.svg\";","import {\n Container,\n Flex,\n Button,\n VStack,\n Divider,\n useTheme,\n Text,\n StackDirection,\n useMediaQuery,\n Stack\n} from '@chakra-ui/react';\nimport React, {\n useEffect, useRef\n} from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport { Progress as ProgressType }\n from '../../../../containers/question-container/sub-components/question-activity/question-activity.types';\nimport { MAX_QUESTION_SET_ATTEMPT } from '../../../../helpers/constants';\nimport { TransitionScreen } from '../../../../helpers/enums';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { returnToStudentPortal } from '../../../../helpers/utils';\nimport { ROUTES } from '../../../routes';\nimport { useGetAnimationDetails } from '../summary/hooks/use-get-animation-details';\nimport { ProgressBar } from '../summary/sub-components/progress-bar/progress-bar';\nimport { Result } from './result/result';\n\ntype UnitTestSummaryProps = {\n uowTitle: string\n questName: string\n totalCorrect: number\n totalQuestions: number\n progress?: ProgressType\n};\n\nexport const UnitTestSummary = ({\n uowTitle,\n questName,\n totalCorrect,\n totalQuestions,\n progress\n}: UnitTestSummaryProps) => {\n const history = useHistory();\n const theme = useTheme();\n const {\n primary600,\n neutral600,\n neutral900\n } = theme?.app;\n const [isLargerThan600] = useMediaQuery('(min-width: 665px)');\n const stackDirection: StackDirection = isLargerThan600 ? 'row' : 'column';\n const {\n score,\n showGold,\n barRef,\n barGoldRef,\n goldBarStars,\n goldBrick,\n totalCorrectRef,\n scoreNum\n } = useGetAnimationDetails({\n totalCorrect,\n totalQuestions\n });\n const {\n buttonTxt, unitPracticeTest\n } = lokalisation();\n // completedAttempts is incremented from BE after final question is completed. Show summary for completedAttempts: 1 - 5\n const maxAttemptsReach = (progress?.completedAttempts ?? 0) > MAX_QUESTION_SET_ATTEMPT;\n const isMaxScoreReached = scoreNum === 100;\n const { playClick } = useAudioEffectsContext();\n const finishBtnRef = useRef(null);\n\n useEffect(() => {\n finishBtnRef.current?.focus({ preventScroll: true });\n }, []);\n\n function handleFinish () {\n playClick();\n if (maxAttemptsReach || totalCorrect === 0) {\n returnToStudentPortal();\n } else {\n history.replace(`${ROUTES.milestoneTransition}/${TransitionScreen.finishScreen}`);\n }\n }\n\n return (\n \n \n \n \n {uowTitle}\n \n {questName}\n \n \n \n \n \n {unitPracticeTest.score}\n \n \n {totalCorrect} out of {totalQuestions}\n \n \n \n \n \n \n \n {(!isMaxScoreReached || (isMaxScoreReached && maxAttemptsReach)) && \n {maxAttemptsReach ? unitPracticeTest.retainScoreHeading : unitPracticeTest.improveScoreTitle}\n }\n \n {(maxAttemptsReach || isMaxScoreReached) ? unitPracticeTest.retainScoreText : unitPracticeTest.improveScoreText}\n \n \n \n \n {unitPracticeTest.questionSummary}\n \n\n \n {progress?.points && progress?.points[0].stars.map(((item, index) => {\n return (\n \n );\n })\n )}\n \n \n \n \n \n {(maxAttemptsReach || totalCorrect === 0) ? buttonTxt.finish : buttonTxt.next}\n \n \n \n );\n};\n","import {\n Box, Divider, Text\n} from '@chakra-ui/react';\nimport React from 'react';\n\nimport { useProgressActivity } from '../../../../containers/question-container/hooks/use-progress-activity';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport { UnitTestIntroProps } from './unit-tests-intro.types';\n\nexport const UnitTestsIntro: React.FC = ({\n uowTitle,\n activityName,\n maximumAttemptExceeded\n}) => {\n const {\n messageBoxTxt: {\n questions,\n totalPoints,\n fluencyHeaderForExceedingMaximumAttempts\n },\n diagnosticIntroTxt\n } = lokalisation();\n const { questionsCount = 0 } = useProgressActivity();\n const pointsPerQuestion = 20;\n\n return (\n \n \n \n {maximumAttemptExceeded ? <>{fluencyHeaderForExceedingMaximumAttempts}! : {uowTitle}}\n \n {activityName}\n \n
\n
\n
{questionsCount}
\n
{questions}
\n
\n
\n \n
\n
\n
\n {maximumAttemptExceeded ? 0 : questionsCount * pointsPerQuestion}\n
\n
{totalPoints}
\n
\n
\n
\n {maximumAttemptExceeded &&\n {diagnosticIntroTxt.noPointsEarn}\n }\n
\n
\n );\n};\n","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { TransitionScreen } from '../../../../helpers/enums';\nimport {\n pickThemeFlex, pickThemeVar\n} from '../../../../styles/theme/app-theme';\nimport { MessageBoxProps } from '../message-box/message-box';\n\nconst checkScreenStyles = (props:MessageBoxProps & { shouldShowStripedBorder: boolean }) => {\n const {\n startScreen, summaryScreen, diagnosticsSummaryScreen\n } = TransitionScreen;\n\n switch (props.type) {\n case startScreen:\n return css `\n border-radius: 0 35px 30px 30px;\n position: relative;\n `;\n case summaryScreen:\n return css `\n border-radius: 0 20px 20px;\n border-width: 4px;\n border-style: solid; \n background: linear-gradient(145deg, #FBE294 0%, #FBE294 25%, #58D25B 25%, #58D25B 50%, #4DC4EF 50%, #4DC4EF 100%) border-box;\n `;\n case diagnosticsSummaryScreen:\n return css `\n border-radius: 0 20px 20px;\n border-width: 0;\n border-style: solid; \n ${props.shouldShowStripedBorder &&\n `border-width: 4px;\n background: linear-gradient(145deg, #FBE294 0%, #FBE294 25%, #58D25B 25%, #58D25B 50%, #4DC4EF 50%, #4DC4EF 100%) border-box;`}\n `;\n case TransitionScreen.finishScreen:\n case TransitionScreen.feedbackScreen:\n case TransitionScreen.diagnosticsStartScreen:\n return css `\n border-radius: 0 20px 20px;\n position: relative;\n `;\n default:\n return css `border-radius: 20px;`;\n }\n};\n\nexport const MilestoneMessageStyled = styled.div`\n ${checkScreenStyles};\n width: 100%;\n max-height: 100%;\n z-index: 10;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n /* intro and transition screens, summary screen content */\n & > div:nth-last-of-type(2), & > div:only-of-type > div:first-of-type {\n flex-grow: 1;\n overflow-y: auto;\n }\n\n /* summary screen container */\n & > div:only-of-type {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n \n .header-tab {\n ${pickThemeFlex('flexChildCentered')};\n\n height: 45px;\n flex-shrink: 0;\n border-radius: 20px 20px 0 0;\n color: ${pickThemeVar('fontPrimary')};\n padding: 0 32px;\n background: rgba(255, 255, 255, 0.5);\n backdrop-filter: blur(113.799px);\n\n .uow-topic {\n font-size: 16px;\n }\n }\n\n .message-content {\n ${pickThemeFlex('flexColumnSpaced')};\n ${({ type }) => type !== TransitionScreen.finishScreen ? 'padding: 32px 40px;' : 'position: relative;'}\n background-color: white;\n\n .message-body {\n height: 100%;\n ${({ type }) => type === TransitionScreen.finishScreen ? `\n width: 100%;\n ` : ''}\n\n .header {\n font-size: 30px;\n color: ${({ theme: { colors: { neutral } } }) => neutral['900']};\n line-height: 42px;\n letter-spacing: -0.8px;\n ${({ type }) => type === TransitionScreen.finishScreen ? `\n margin-top: 32px;\n margin-left: 40px;\n ` : ''}\n }\n\n .next-stage {\n color: ${pickThemeVar('blue02')};\n font-size: 20px;\n margin-top: 24px;\n }\n\n .milestone-header {\n color: ${pickThemeVar('blue02')};\n font-size: 40px;\n line-height: 52px;\n letter-spacing: -1px;\n margin-top: 8px;\n }\n\n .milestone-description {\n margin-top: 20px;\n color: ${pickThemeVar('fontGrey01')};\n line-height: 28px;\n font-size: 20px;\n }\n }\n .milestone-summary {\n display: inline-flex;\n box-shadow: 0px 0px 4.63216px 0.772026px rgba(11, 55, 83, 0.08);\n border-radius: 16px;\n margin: 32px 0;\n ${({ maximumAttemptExceeded }) => maximumAttemptExceeded && 'margin-bottom: 16px;'}\n height: 110px;\n\n .num-stack {\n ${pickThemeFlex('flexChildCentered')};\n margin: 0 30px;\n width: 108px;\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n margin: 0 24px;\n width: 84px;\n }\n \n &_content {\n ${pickThemeFlex('flexColumnCentered')};\n .num-label {\n font-size: 36px;\n color: ${pickThemeVar('blue02')}\n }\n .num-description {\n font-size: 16px;\n margin-top: 10px;\n color: ${pickThemeVar('fontGrey01')};\n }\n }\n }\n }\n }\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n .message-content {\n ${({ type }) => type !== TransitionScreen.finishScreen ? 'padding: 32px;' : ''}\n\n .message-body {\n .header {\n font-size: 24px;\n line-height: 33.6px;\n letter-spacing: -0.4px;\n ${({ type }) => type === TransitionScreen.finishScreen ? `\n margin-left: 32px;\n ` : ''}\n }\n .next-stage, .milestone-description {\n font-size: 18px;\n }\n .milestone-header {\n font-size: 36px;\n line-height: 46.8px;\n letter-spacing: -1.15px;\n }\n }\n .milestone-summary {\n height: 102px;\n margin: 24px 0 0;\n ${({ maximumAttemptExceeded }) => maximumAttemptExceeded && 'margin-bottom: 16px;'}\n\n .num-stack {\n &_content {\n .num-label {\n font-size: 32px;\n }\n .num-description {\n }\n }\n }\n }\n }\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n .header-tab {\n padding: 0 20px;\n }\n .message-content {\n ${({ type }) => type !== TransitionScreen.finishScreen ? 'padding: 32px 20px;' : ''}\n\n .message-body {\n .header {\n letter-spacing: -0.94px;\n ${({ type }) => type === TransitionScreen.finishScreen ? `\n margin-left: 20px;\n ` : ''}\n }\n .milestone-header {\n font-size: 32px;\n line-height: 41.6px;\n }\n }\n }\n }\n`;\n\nexport const Footer = styled.div`\n ${pickThemeFlex('flexRowReverse')};\n height: 72px;\n flex-shrink: 0;\n background-color: white;\n box-shadow: 0px 0px 4.92526px 0.820876px rgba(11, 55, 83, 0.08);\n z-index: 9;\n\n .btn {\n width: 210px;\n font-size: 20px;\n line-height: 28px;\n padding: 8px 32px;\n align-items: flex-start;\n min-height: 48px;\n margin-right: 24px;\n }\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n height: 64px;\n\n .btn {\n width: 160px;\n min-height: 40px;\n margin-right: 24px;\n font-size: 16px;\n line-height: 24px;\n }\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n .btn {\n width: 100%;\n margin: 0 24px;\n }\n }\n`;\n","import { Button } from '@chakra-ui/react';\nimport { LottieRef } from 'lottie-react';\nimport React, {\n useEffect, useRef, useState\n} from 'react';\nimport {\n useDispatch, useSelector\n} from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { AppState } from '../../../../app/store/store.types';\nimport { useAudioEffectsContext } from '../../../../components/audio/provider/audio-effects-provider';\nimport {\n setQuestionProgress, setStudentState\n} from '../../../../containers/question-container/store/question-actions';\nimport { MAX_QUESTION_SET_ATTEMPT } from '../../../../helpers/constants';\nimport {\n QuestionProgressState, STUDENT_STATES, TransitionScreen, QuestionSetType\n} from '../../../../helpers/enums';\nimport { lokalisation } from '../../../../helpers/lokalisation';\nimport {\n getPoints, getQueryParam, getTotalNumStars, isDefined\n} from '../../../../helpers/utils';\nimport { useExitApp } from '../../../../hooks/use-exit-app';\nimport { Resources } from '../../../../resources/resources';\nimport { ROUTES } from '../../../routes';\nimport { CollectCoins } from '../collect-coins/collect-coins';\nimport { DiagnosticsIntro } from '../diagnostics-intro/diagnostics-intro';\nimport { DiagnosticsSummary } from '../diagnostics-summary/diagnostics-summary';\nimport { ExceededAttemptsFinishScreen } from '../exceeded-attempts-finish-screen/exceeded-attempts-finish-screen';\nimport { FeedbackScreen } from '../feedback-screen/feedback-screen';\nimport { IntroScreen } from '../intro-screen/intro-screen';\nimport { MessageBoxProps } from '../message-box/message-box';\nimport { MidMilestoneScreen } from '../mid-milestone-screen/mid-milestone-screen';\nimport { Summary } from '../summary/summary';\nimport { UnitTestSummary } from '../unit-test-summary/unit-test-summary';\nimport { UnitTestsIntro } from '../unit-tests-intro/unit-tests-intro';\nimport {\n MilestoneMessageStyled, Footer\n} from './milestone-message.styled';\n\nexport const MilestoneMessage = ({ type }: MessageBoxProps) => {\n const { redirect } = useExitApp();\n const history = useHistory();\n const dispatch = useDispatch();\n const coinAnimationRef: LottieRef = useRef(null);\n const wingsAnimationRef: LottieRef = useRef(null);\n const coinsTotalRef = useRef(null);\n const coinsTotalDisplayRef = useRef(null);\n const pointsTotalRef = useRef(null);\n const milestoneFooterBtnRef = useRef(null);\n const totalMilestonePoints = useRef(undefined);\n const {\n transToScreenTxt, progressTxt, buttonTxt, messageBoxTxt\n } = lokalisation();\n const {\n problemSolvingHeader1, problemSolvingHeader2, problemSolvingDescription, nextStage,\n nextStageStart, reasoningHeader1, reasoningHeader2, reasoningDescription\n } = transToScreenTxt;\n const {\n totalPoints, fluencyDescription, fluencyHeader, fluencyHeaderForExceedingMaximumAttempts, questions, noPointsEarnTxt\n } = messageBoxTxt;\n /*\n * ACTIVITY STATE\n */\n const activityState = useSelector(state => state.activityState);\n const {\n studentName, questName, progress, praiseFeedback, updatedProgress, unitOfWork, questionSetType\n } = activityState;\n const { firstName } = studentName || {};\n /*\n * ENUMS\n */\n const {\n startScreen,\n startFluency,\n startReasoning,\n startProblemSolving,\n summaryScreen,\n finishScreen,\n exceededAttemptsFinishScreen,\n feedbackScreen,\n diagnosticsStartScreen,\n diagnosticsSummaryScreen,\n unitTestIntroScreen,\n unitTestSummaryScreen\n } = TransitionScreen;\n /*\n * STATE\n */\n const [feedback, setFeedback] = useState();\n const [header, setHeader] = useState();\n const [header2, setHeader2] = useState();\n const [milestoneHeader, setMilestoneHeader] = useState();\n const [milestoneDescription, setMilestoneDescription] = useState();\n const [buttonLabel, setButtonLabel] = useState();\n const [nextStageLabel, setNextStageLabel] = useState();\n const [hasMilestoneSummary, setHasMilestoneSummary] = useState(false);\n const [numMilestoneQuestions, setNumMilestoneQuestions] = useState();\n const questionProgress = updatedProgress || progress;\n const totalCorrect = questionProgress?.points?.reduce((total, section) => total + section.stars.filter(Boolean).length, 0) || 0;\n const totalQuestions = questionProgress?.points?.reduce((total, section) => total + section.stars.length, 0) || 10;\n const maximumAttemptExceeded = (questionProgress?.completedAttempts ?? 0) >= MAX_QUESTION_SET_ATTEMPT;\n const {\n playClick, playAllStarsSpin, playClickWithCollectCoins\n } = useAudioEffectsContext();\n\n /*\n * LABELS\n */\n useEffect(() => {\n switch (type) {\n case startScreen:\n setButtonLabel(buttonTxt.next);\n break;\n case startFluency: {\n totalMilestonePoints.current = getNextStageTotalPoints('Fluency');\n\n setButtonLabel(buttonTxt.start);\n setNextStageLabel(nextStageStart);\n setMilestoneDescription(fluencyDescription);\n setMilestoneHeader(progressTxt[0]);\n setHasMilestoneSummary(true);\n setHeader(maximumAttemptExceeded ? fluencyHeaderForExceedingMaximumAttempts : fluencyHeader);\n setNumMilestoneQuestions(5);\n break;\n }\n case startReasoning: {\n totalMilestonePoints.current = getNextStageTotalPoints('Reasoning');\n\n setHeader(`${reasoningHeader1} ${firstName}!`);\n setHeader2(reasoningHeader2);\n setNextStageLabel(nextStage);\n setMilestoneDescription(reasoningDescription);\n setMilestoneHeader(progressTxt[1]);\n setHasMilestoneSummary(true);\n setNumMilestoneQuestions(3);\n setButtonLabel(buttonTxt.ready);\n break;\n }\n case startProblemSolving: {\n totalMilestonePoints.current = getNextStageTotalPoints('ProblemSolving');\n\n setHeader(`${problemSolvingHeader1} ${firstName}!`);\n setHeader2(problemSolvingHeader2);\n setNextStageLabel(nextStage);\n setMilestoneHeader(progressTxt[2]);\n setMilestoneDescription(problemSolvingDescription);\n setHasMilestoneSummary(true);\n setNumMilestoneQuestions(2);\n setButtonLabel(buttonTxt.ready);\n break;\n }\n case finishScreen: {\n setButtonLabel(buttonTxt.collect);\n break;\n }\n case exceededAttemptsFinishScreen: {\n setButtonLabel(buttonTxt.next);\n break;\n }\n case feedbackScreen: {\n setButtonLabel(buttonTxt.finish);\n if (milestoneFooterBtnRef.current && !feedback) {\n milestoneFooterBtnRef.current.disabled = true;\n }\n break;\n }\n case unitTestIntroScreen:\n case diagnosticsStartScreen: {\n setButtonLabel(buttonTxt.start);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [buttonTxt.ready, buttonTxt.next, buttonTxt.start, buttonTxt.finish, buttonTxt.collect, startReasoning, startProblemSolving,\n firstName, problemSolvingDescription, problemSolvingHeader1, problemSolvingHeader2, progressTxt, questName, reasoningHeader1,\n reasoningHeader2, startFluency, startScreen, studentName, type, nextStage, reasoningDescription]);\n\n useEffect(() => {\n type !== feedbackScreen ? milestoneFooterBtnRef.current?.focus({ preventScroll: true }) : milestoneFooterBtnRef.current?.blur();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [type]);\n\n function animateValue (obj: HTMLElement, start: number, end: number, duration: number) {\n let startTimestamp: number | null = null;\n\n const step = (timestamp: number) => {\n if (!startTimestamp) startTimestamp = timestamp;\n const progress = Math.min((timestamp - startTimestamp) / duration, 1);\n\n obj.innerHTML = Math.floor(progress * (end - start) + start).toString();\n if (progress < 1) {\n window.requestAnimationFrame(step);\n }\n };\n\n window.requestAnimationFrame(step);\n }\n\n const nextView = async () => {\n const coins = (updatedProgress || progress)?.totalCoinsCount || 0;\n const points = getPoints(updatedProgress || progress) || 0;\n const totalStars = getTotalNumStars(updatedProgress || progress) || 0;\n\n switch (type) {\n case startScreen:\n dispatch(setStudentState(STUDENT_STATES.fluencyIntro));\n history.replace(`${ROUTES.milestoneTransition}/${TransitionScreen.startFluency}`);\n playClick();\n break;\n case startFluency:\n dispatch(setStudentState(STUDENT_STATES.question));\n dispatch(setQuestionProgress(QuestionProgressState.nextUnanswered));\n history.replace(ROUTES.questionConsole);\n playClick();\n break;\n case startReasoning:\n case startProblemSolving:\n dispatch(setQuestionProgress(QuestionProgressState.nextUnanswered));\n history.replace(ROUTES.questionConsole);\n playAllStarsSpin(totalStars);\n break;\n case finishScreen:\n if (\n coinAnimationRef.current &&\n wingsAnimationRef.current &&\n milestoneFooterBtnRef.current &&\n coinsTotalDisplayRef.current &&\n pointsTotalRef.current\n ) {\n milestoneFooterBtnRef.current.disabled = true;\n coinAnimationRef.current.playSegments([140, 176], true);\n wingsAnimationRef.current.playSegments([140, 176], true);\n coinsTotalRef.current?.classList.add('increment');\n animateValue(coinsTotalDisplayRef.current, coins, (coins + points), 1000);\n animateValue(pointsTotalRef.current, points, 0, 1000);\n playClickWithCollectCoins();\n }\n break;\n case exceededAttemptsFinishScreen:\n history.replace(`${ROUTES.milestoneTransition}/${TransitionScreen.feedbackScreen}`);\n playClick();\n break;\n case feedbackScreen: {\n playClick();\n if (isDefined(feedback)) {\n const questionSetId = getQueryParam('questionSetId') || '';\n const locale = getQueryParam('locale') || 'en-AU';\n const assignmentId = questionProgress?.assignmentId;\n\n await Resources.sendFeedback.post().withBody({\n questionSetId,\n assignmentId,\n studentFeedback: parseInt(feedback, 10),\n systemInfo: JSON.stringify({\n locale,\n userAgent: window.navigator.userAgent,\n resolution: `${window.screen.width} X ${window.screen.height}`\n })\n }).raw().send();\n }\n redirect();\n break;\n }\n case unitTestIntroScreen:\n case diagnosticsStartScreen: {\n playClick();\n dispatch(setStudentState(STUDENT_STATES.question));\n history.replace(ROUTES.diagnostics);\n }\n }\n };\n const onAnimationComplete = async () => {\n if (questionSetType === QuestionSetType.questiconActivity) {\n if (milestoneFooterBtnRef.current) {\n milestoneFooterBtnRef.current.disabled = false;\n }\n history.replace(`${ROUTES.milestoneTransition}/${TransitionScreen.feedbackScreen}`);\n } else {\n redirect();\n }\n };\n const handleFeedbackChange = (feedback: string) => {\n setFeedback(feedback);\n if (milestoneFooterBtnRef.current) {\n milestoneFooterBtnRef.current.disabled = false;\n }\n };\n\n function getNextStageTotalPoints (sectionName: 'Fluency' | 'Reasoning' | 'ProblemSolving'): number | undefined {\n const sectionPointInfo = progress?.points?.find(point => point.sectionName === sectionName);\n\n if (!sectionPointInfo) return;\n\n const pointsPerQuestion = sectionPointInfo.pointsPerQuestion;\n const numberOfQuestions = sectionPointInfo.stars.length;\n\n return pointsPerQuestion * numberOfQuestions;\n }\n\n return (\n \n {type === startScreen &&\n \n }\n {type === diagnosticsStartScreen &&\n \n }\n {type === unitTestIntroScreen &&\n \n }\n {\n type === finishScreen && \n }\n {type === TransitionScreen.exceededAttemptsFinishScreen && }\n {type === feedbackScreen && }\n {(type === startFluency || type === startReasoning || type === startProblemSolving) &&\n \n }\n {type === summaryScreen &&\n }\n\n {/* completedAttempts is incremented from BE after final question is completed. Show summary for completedAttempts: 1 - 5 */}\n {type === diagnosticsSummaryScreen &&\n MAX_QUESTION_SET_ATTEMPT}\n />}\n\n {type === unitTestSummaryScreen &&\n }\n\n {(type !== summaryScreen && type !== diagnosticsSummaryScreen && type !== unitTestSummaryScreen) &&\n
\n \n {buttonLabel}\n \n
\n }\n \n );\n};\n","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { TransitionScreen } from '../../../../helpers/enums';\nimport { MessageBoxProps } from './message-box';\n\nexport const MessageBoxStyled = styled.div((props) => {\n const {\n type, theme, hasGuide\n } = props;\n const isSummaryOrStartScreen = TransitionScreen.summaryScreen === type || TransitionScreen.startScreen === type;\n const isSummaryScreen = type === TransitionScreen.summaryScreen;\n const isUnitTestSummaryScreen = type === TransitionScreen.unitTestSummaryScreen;\n const {\n breakTabletLandscape,\n breakTabletPortraitPhone,\n guideWidthLandscape,\n guideHeightLandscape,\n guideWidthPortrait,\n guideHeightPortrait,\n guideWidthPortraitPhone,\n guideHeightPortraitPhone\n } = theme.app;\n\n return css`\n ${theme.flex.flexColumnCentered};\n width: 100%;\n height: 100%;\n\n .message-box-content {\n ${theme.flex.flexRowSpaced};\n height: 100%;\n ${isSummaryOrStartScreen && css`\n width: 95%;\n max-width: calc(${theme.app.messageBoxWidth} + ${theme.app.guideWidthAndSpacer});\n `}\n ${isSummaryScreen && css`\n max-width: calc(${theme.app.messageBoxSummaryWidth} + ${theme.app.guideWidthAndSpacer});\n `}\n ${isUnitTestSummaryScreen && css`\n max-width: ${theme.app.lg};\n `}\n /**\n LANDSCAPE\n */\n @media (max-width: ${theme.app.breakTabletLandscape}) {\n ${!isSummaryScreen && css`width: calc(${theme.app.messageBoxWidthLandscape} + ${theme.app.guideWidthLandscapeAndSpacer})`};\n ${!hasGuide && css`width: auto;`}\n ${isUnitTestSummaryScreen && css`width: calc(100% - 40px);`}\n }\n\n /**\n PORTRAIT\n */\n @media (max-width: ${theme.app.breakPoint}) {\n ${theme.flex.flexColumnCentered};\n width: 100%;\n }\n\n /**\n LESS THAN PORTRAIT\n */\n @media (max-width: ${theme.app.breakTabletPortraitPhone}) {\n ${theme.flex.flexColumnCentered};\n width: 100%;\n }\n \n .guide-holder-holder {\n /**\n PORTRAIT\n */\n @media (max-width: ${theme.app.breakPoint}) {\n width: calc(100% - 40px); \n }\n\n /**\n LESS THAN PORTRAIT\n */\n @media (max-width: ${breakTabletPortraitPhone}) {\n width: calc(100% - 32px);\n }\n }\n\n .guide-holder {\n z-index: 0;\n border: 2px solid #ffffff66;\n border-radius: 40px 0 40px 40px;\n overflow: hidden;\n width: ${theme.app['guideWidth']};\n height: ${theme.app['guideHeight']};\n\n /**\n LANDSCAPE\n */\n @media (max-width: ${breakTabletLandscape}) {\n width: ${guideWidthLandscape};\n height: ${guideHeightLandscape};\n ${isUnitTestSummaryScreen && css`\n width: ${theme.app.lg});\n `}\n }\n \n /**\n PORTRAIT\n */\n @media (max-width: ${theme.app.breakPoint}) {\n border-radius: 20px 20px 20px 0;\n border-width: 1px;\n width: ${guideWidthPortrait};\n height: ${guideHeightPortrait};\n margin-bottom: 16px;\n }\n \n /**\n LESS THAN PORTRAIT\n */\n @media (max-width: ${breakTabletPortraitPhone}) {\n width: ${guideWidthPortraitPhone};\n height: ${guideHeightPortraitPhone};\n margin-bottom: 8px;\n margin-top: -15px;\n }\n }\n\n .message-holder {\n ${hasGuide ? 'margin-left: 24px;' : ''}\n width: ${isUnitTestSummaryScreen ? theme.app.lg : theme.app.messageBoxWidth};\n overflow: hidden;\n ${isSummaryOrStartScreen && css`\n max-width: ${theme.app.messageBoxSummaryWidth};\n width: 100%;\n `}\n\n /**\n LANDSCAPE\n */\n @media (max-width: ${theme.app.breakTabletLandscape}) {\n width: ${!isSummaryOrStartScreen && !isUnitTestSummaryScreen && theme.app.messageBoxWidthLandscape};\n ${isUnitTestSummaryScreen && css`width: 100%;`}\n }\n\n /**\n PORTRAIT\n */\n @media (max-width: ${theme.app.breakPoint}) {\n width: calc(100% - 40px);\n margin-left: 0;\n }\n\n /**\n LESS THAN PORTRAIT\n */\n @media (max-width: ${theme.app.breakTabletPortraitPhone}) {\n width: calc(100% - 32px);\n overflow: visible;\n }\n }\n }\n `;\n});\n","import React from 'react';\n\nimport {\n QuestionSetType, TransitionScreen\n} from '../../../../helpers/enums';\nimport { Guide } from '../guide/guide';\nimport { MilestoneMessage } from '../milestone-message/milestone-message';\nimport { MessageBoxStyled } from './message-box.styled';\n\nexport type MessageBoxProps = {\n type: TransitionScreen\n questionSetType?: QuestionSetType\n hasGuide?: boolean\n};\n\nexport const MessageBox = ({\n type, questionSetType\n}: MessageBoxProps) => {\n const isUPT = type === TransitionScreen.unitTestIntroScreen ||\n type === TransitionScreen.unitTestSummaryScreen ||\n questionSetType === QuestionSetType.unitTest;\n\n return (\n \n
\n {!isUPT &&
\n
\n \n
\n
}\n
\n \n
\n
\n
\n );\n};\n\nexport default MessageBox;\n","import { useToken } from '@chakra-ui/react';\nimport { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { TransitionScreen } from '../../../../helpers/enums';\nimport {\n pickThemeFlex, pickThemeVar\n} from '../../../../styles/theme/app-theme';\nimport { TransitionBgProps } from './transition-bg';\n\nconst styleLeftBottom = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startScreen:\n return css`\n bottom: 150px;\n width: 440px;\n height: 406px;\n `;\n case TransitionScreen.startFluency:\n return css`\n img {\n width: 367px;\n height: 772px;\n }\n `;\n case TransitionScreen.startReasoning:\n return css`\n bottom: -166px;\n\n img {\n width: 952px;\n height: 852px;\n }\n `;\n }\n};\nconst tabletLandscapeStyleLeftBottom = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startScreen:\n return css`\n left: -60px;\n bottom: 50px;\n width: 272px;\n height: 250px;\n `;\n case TransitionScreen.startFluency:\n return css`\n img {\n width: 319px;\n height: 483px;\n }\n `;\n case TransitionScreen.startReasoning:\n return css`\n z-index: 0;\n bottom: 0;\n\n img {\n width: 658px;\n height: 402px;\n }\n `;\n }\n};\nconst styleRightBottom = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startFluency:\n return css`\n img {\n width: 1399px;\n height: 673px;\n }\n `;\n case TransitionScreen.summaryScreen:\n return css`\n img {\n height: 95vh;\n object-fit: cover;\n object-position: right;\n }\n `;\n }\n};\nconst responsiveStyleRightBottom = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startFluency:\n return css`\n img {\n width: 871px;\n height: 419px;\n }\n `;\n }\n};\nconst styleRightMountain = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startScreen:\n return css`\n\n width: 1173px;\n height: 964px;\n bottom: 43px;\n right: -303px;\n\n img {\n position: absolute;\n bottom: 0;\n right: 0;\n width: 1173px;\n height: 964px;\n }\n `;\n case TransitionScreen.startFluency:\n return css`\n bottom: -148px;\n left: calc(100vw * 0.51);\n width: 2276px;\n height: 2393px;\n\n img {\n position: relative;\n left: -726px;\n width: 2276px;\n height: 2393px;\n }\n `;\n }\n};\nconst tabletLandscapeStyleRightMountain = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startScreen:\n return css`\n bottom: 43px;\n right: -406px;\n\n img {\n width: 960px;\n height: 789px;\n }\n `;\n case TransitionScreen.startFluency:\n return css`\n bottom: -92px;\n left: calc(100vw * 0.57);\n width: 1428px;\n height: 1501px;\n\n img {\n position: relative;\n left: -495px;\n width: 1428px;\n height: 1501px;\n }\n `;\n }\n};\nconst tablePortraitPhoneStyleRightMountain = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startFluency:\n return css`\n bottom: -92px;\n left: calc(100vw * 0.47);\n width: 1428px;\n height: 1501px;\n\n img {\n position: relative;\n left: -479px;\n width: 1428px;\n height: 1501px;\n }\n `;\n }\n};\n\nexport const BgWrap = styled.span`\n overflow: hidden;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n`;\n\nexport const TransitionBgStyled = styled.div`\n width: 100%;\n height: 100%;\n\n ${props => (\n props.type === TransitionScreen.feedbackScreen ||\n props.type === TransitionScreen.finishScreen ||\n props.type === TransitionScreen.exceededAttemptsFinishScreen) ? 'filter: grayscale(20%) blur(50px);' : ''};\n\n ${pickThemeFlex('flexChildCentered')};\n\n ${props => props.bgSrc && css`\n background-image: url(${props.bgSrc});\n background-repeat: no-repeat;\n background-size: cover;\n\n ${props.type === TransitionScreen.unitTestIntroScreen ? `\n @media (max-width: ${props.theme.breakpoints.lg}) {\n background-position: center;\n }\n ` : ''};\n `}\n\n .left-bottom-bg {\n position: absolute;\n left: 0;\n bottom: 0;\n z-index: 1;\n\n ${styleLeftBottom};\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n ${tabletLandscapeStyleLeftBottom};\n }\n }\n\n .right-mountain {\n position: absolute;\n bottom: 0;\n right: 0;\n\n ${styleRightMountain};\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n ${tabletLandscapeStyleRightMountain};\n }\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')}) {\n ${tablePortraitPhoneStyleRightMountain};\n }\n }\n\n .right-bottom-bg {\n position: absolute;\n right: 0;\n bottom: 0;\n\n ${props => (\n props.type === TransitionScreen.feedbackScreen ||\n props.type === TransitionScreen.finishScreen ||\n props.type === TransitionScreen.exceededAttemptsFinishScreen) ? 'transform: translate(50px, 50px);' : ''};\n\n ${styleRightBottom};\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n ${responsiveStyleRightBottom};\n }\n }\n`;\n\nconst seaGradientHeight = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startScreen:\n case TransitionScreen.startFluency:\n return css`\n height: 319px;\n background: linear-gradient(180deg, #87F8EF 0.37%, #35F1DE 20.75%, #00E7D4 40.24%, #00CBDA 63.31%, #0297BE 100%);\n `;\n case TransitionScreen.startProblemSolving:\n return css`\n height: 229px;\n background: linear-gradient(180deg, #87F8EF 0%, #1EEDDA 24.95%, #01CDDA 51.34%, #01ADE1 73.96%, #018AE9 100%);\n `;\n case TransitionScreen.finishScreen:\n case TransitionScreen.exceededAttemptsFinishScreen:\n case TransitionScreen.summaryScreen:\n return css`\n height: 92px;\n background: linear-gradient(180deg, #87F8EF 0%, #1EEDDA 48.91%, #01CDDA 100%);\n `;\n default:\n return css`\n height: 417px;\n background: linear-gradient(180deg, #87F8EF 0%, #1EEDDA 24.95%, #01CDDA 51.34%, #01ADE1 73.96%, #018AE9 100%);\n `;\n }\n};\nconst responsiveSeaGradientHeight = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startScreen:\n case TransitionScreen.startFluency:\n return css`\n height: 161px;\n `;\n case TransitionScreen.startProblemSolving:\n return css`\n height: 229px;\n `;\n case TransitionScreen.finishScreen:\n case TransitionScreen.exceededAttemptsFinishScreen:\n case TransitionScreen.summaryScreen:\n return css`\n height: 64px;\n `;\n default:\n return css`\n height: 417px;\n `;\n }\n};\n\nexport const SeaGradient = styled.div`\n position: absolute;\n left: 0;\n bottom: 0;\n width: 100%;\n\n ${seaGradientHeight};\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n ${responsiveSeaGradientHeight};\n }\n`;\n\nconst skyGradientHeight = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startScreen:\n case TransitionScreen.startFluency:\n return css`\n height: calc(100% - 319px);\n background: linear-gradient(180deg, #0BB3F4 0%, #4CC9F9 53.12%, #B4ECFF 91.75%, #D3F4FF 100%);\n `;\n case TransitionScreen.startProblemSolving:\n return css`\n height: calc(100% - 229px);\n background: linear-gradient(180deg, #0BB3F4 0%, #13B7F6 18.17%, #4CC9F9 53.41%, #B4ECFF 77.67%, #D3F4FF 100%);\n `;\n case TransitionScreen.finishScreen:\n case TransitionScreen.exceededAttemptsFinishScreen:\n case TransitionScreen.summaryScreen:\n return css`\n height: calc(100% - 92px);\n background: linear-gradient(180deg, #0BB3F4 0%, #13B7F6 22.66%, #4CC9F9 42.54%, #B4ECFF 80.12%, #EFFBFF 100%);\n `;\n default:\n return css`\n height: calc(100% - 417px);\n background: linear-gradient(180deg, #0BB3F4 0%, #13B7F6 18.17%, #4CC9F9 53.41%, #B4ECFF 77.67%, #D3F4FF 100%);\n `;\n }\n};\nconst responsiveSkyGradientHeight = (props: TransitionBgProps) => {\n switch (props.type) {\n case TransitionScreen.startScreen:\n case TransitionScreen.startFluency:\n return css`\n height: calc(100% - 161px);\n `;\n\n case TransitionScreen.startProblemSolving:\n return css`\n height: calc(100% - 229px);\n `;\n case TransitionScreen.finishScreen:\n case TransitionScreen.exceededAttemptsFinishScreen:\n case TransitionScreen.summaryScreen:\n return css`\n height: calc(100% - 64px);\n `;\n default:\n return css`\n height: calc(100% - 417px);\n `;\n }\n};\n\nexport const SkyGradient = styled.div`\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n ${skyGradientHeight};\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')}) {\n ${responsiveSkyGradientHeight};\n }\n`;\n\nexport const Clouds = styled.div`\n position: absolute;\n left: calc(50% - 900px);\n bottom: 319px;\n width: 1800px;\n height: 1200px;\n\n display: ${props => props.type === TransitionScreen.summaryScreen ? 'none' : 'block'};\n\n .bumpy1 {\n position: absolute;\n bottom: 160px;\n left: 200px;\n width: 472px;\n height: 42px;\n }\n\n .bumpy2 {\n position: absolute;\n bottom: 400px;\n left: 45px;\n width: 329px;\n height: 30px;\n }\n\n .bumpy3 {\n position: absolute;\n bottom: 400px;\n left: 1280px;\n width: 329px;\n height: 30px;\n }\n\n .narrow1 {\n position: absolute;\n bottom: 576px;\n left: 620px;\n width: 467px;\n height: 38px;\n }\n\n .narrow2 {\n position: absolute;\n bottom: 266px;\n left: 200px;\n width: 467px;\n height: 38px;\n }\n\n .narrow3 {\n position: absolute;\n bottom: 246px;\n left: 1600px;\n width: 467px;\n height: 38px;\n }\n`;\n\nexport const Dots = styled.div(props => {\n const [primary400, yellow300, green400] = useToken('colors', ['primary.400', 'yellow.300', 'green.400']);\n\n switch (props.type) {\n case TransitionScreen.finishScreen:\n case TransitionScreen.exceededAttemptsFinishScreen:\n case TransitionScreen.feedbackScreen:\n case TransitionScreen.summaryScreen:\n return css `\n .top-yellow {\n position: absolute;\n top: -80px;\n left: 280px;\n width: 290px;\n height: 290px;\n border-radius: 50%;\n background-color: ${yellow300};\n mix-blend-mode: normal;\n opacity: 0.7;\n }\n\n .middle-green {\n position: absolute;\n top: 410px;\n left: 340px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background-color: ${green400};\n mix-blend-mode: normal;\n opacity: 0.7;\n }\n\n .small-green-1 {\n position: absolute;\n bottom: 290px;\n left: 340px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background-color: ${green400};\n mix-blend-mode: normal;\n opacity: 0.7;\n }\n\n .small-green-2 {\n position: absolute;\n top: 360px;\n right: 290px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background-color: ${green400};\n mix-blend-mode: normal;\n opacity: 0.7;\n }\n\n .small-blue {\n position: absolute;\n top: 370px;\n left: 410px;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background-color: #47C9FA;\n mix-blend-mode: normal;\n opacity: 0.7;\n }\n\n .bottom-blue {\n position: absolute;\n bottom: -400px;\n left: -280px;\n width: 600px;\n height: 600px;\n border-radius: 50%;\n background-color: ${primary400};\n mix-blend-mode: normal;\n }\n\n .middle-yellow {\n position: absolute;\n bottom: 300px;\n right: 310px;\n width: 135px;\n height: 135px;\n border-radius: 50%;\n background-color: ${yellow300};\n mix-blend-mode: normal;\n opacity: 0.8;\n }\n\n .big-green {\n position: absolute;\n bottom: 100px;\n right: 240px;\n width: 290px;\n height: 290px;\n border-radius: 50%;\n background-color: ${green400};\n mix-blend-mode: normal;\n opacity: 0.7;\n }\n\n .bottom-yellow {\n position: absolute;\n bottom: -260px;\n right: -300px;\n width: 465px;\n height: 465px;\n border-radius: 50%;\n background-color: ${yellow300};\n mix-blend-mode: normal;\n opacity: 0.8;\n }\n \n @media (max-width: ${pickThemeVar('breakTabletLandscape')(props)}) {\n .top-yellow {\n position: absolute;\n top: -67px;\n left: 224px;\n width: 232px;\n height: 232px;\n border-radius: 50%;\n }\n .bottom-blue {\n bottom: -290px;\n left: -250px;\n width: 477px;\n height: 477px;\n }\n }\n\n ${props.type === TransitionScreen.summaryScreen ?\n '.small-green-1,.small-green-2, .bottom-yellow, .big-green, .small-blue, .middle-yellow {display: none;}' :\n '.middle-green {display: none;}'};\n\n @media (max-width: ${pickThemeVar('breakTabletPortraitPhone')(props)}) {\n .middle-green,\n .small-green-1,\n .small-green-2,\n .bottom-yellow,\n .big-green,\n .small-blue,\n .middle-yellow {\n display: none;\n }\n\n ${(props.type === TransitionScreen.finishScreen ||\n props.type === TransitionScreen.exceededAttemptsFinishScreen ||\n props.type === TransitionScreen.feedbackScreen) ? '.top-yellow { left: -40px;}' : '.top-yellow, .bottom-blue {display: none;}'};\n }\n `;\n default:\n return css`\n display: none;\n `;\n }\n});\n","import React, {\n useState, useEffect\n} from 'react';\n\nimport AppImage from '../../../../components/app-image/app-image';\nimport { AppImageTypes } from '../../../../components/app-image/app-image-types';\nimport {\n QuestionSetType, TransitionScreen\n} from '../../../../helpers/enums';\nimport diagnosticBackgroundImg from '../../../diagnostics/assets/AYR_Background.svg';\nimport unitTestBackgroundImg from '../../../diagnostics/assets/UPT_Background.svg';\nimport {\n TransitionBgStyled, SeaGradient, SkyGradient, Clouds, Dots, BgWrap\n} from './transition-bg.styled';\n\nexport type TransitionBgProps = {\n type: TransitionScreen\n quesetionSetType?: QuestionSetType\n bgSrc?: string\n};\n\nexport const TransitionBg = ({\n type, quesetionSetType\n}: TransitionBgProps) => {\n const [leftBgSrc, setLeftBgSrc] = useState();\n const [rightBgSrc, setRightBgSrc] = useState();\n const [rightMountainSrc, setRightMountainSrc] = useState();\n const [hasClouds, setHasClouds] = useState(true);\n const transitionBgProps: TransitionBgProps = { type: isTestTransitionScreen(type) ? 0 : type };\n\n useEffect(() => {\n switch (type) {\n case TransitionScreen.startScreen:\n setLeftBgSrc('leftMountain');\n setRightMountainSrc('progressMountain');\n break;\n case TransitionScreen.startFluency:\n setLeftBgSrc('leftFluency');\n setRightBgSrc('rightFluency');\n setRightMountainSrc('progressMountain');\n break;\n case TransitionScreen.startReasoning:\n setLeftBgSrc('leftReasoning');\n setRightBgSrc('rightReasoning');\n break;\n case TransitionScreen.startProblemSolving:\n setLeftBgSrc('leftProblemSolving');\n setRightBgSrc('rightProblemSolving');\n break;\n case TransitionScreen.summaryScreen:\n setHasClouds(false);\n setRightBgSrc('summitMountain');\n break;\n }\n }, [type]);\n\n function isTestTransitionScreen (type: number): boolean {\n const {\n diagnosticsStartScreen,\n diagnosticsSummaryScreen,\n unitTestIntroScreen,\n unitTestSummaryScreen\n } = TransitionScreen;\n\n return [\n diagnosticsStartScreen,\n diagnosticsSummaryScreen,\n unitTestIntroScreen,\n unitTestSummaryScreen\n ].includes(type) || quesetionSetType === QuestionSetType.diagnostics || quesetionSetType === QuestionSetType.unitTest;\n }\n\n if (isTestTransitionScreen(type)) {\n transitionBgProps.bgSrc = (\n type === TransitionScreen.unitTestIntroScreen ||\n type === TransitionScreen.unitTestSummaryScreen ||\n quesetionSetType === QuestionSetType.unitTest\n ) ? unitTestBackgroundImg : diagnosticBackgroundImg;\n }\n\n return (\n \n \n {!isTestTransitionScreen(type) && <>\n \n \n }\n {hasClouds &&\n \n \n \n \n \n \n \n \n }\n {rightMountainSrc &&\n
\n \n
\n }\n {leftBgSrc &&\n
\n \n
\n }\n {rightBgSrc &&\n
\n \n
\n }\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n \n \n );\n};\n","import React, { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\n\nimport Confetti from '../../../assets/lottie/Confetti Burst.json';\nimport { AppState } from '../../app/store/store.types';\nimport { useAudioEffectsContext } from '../../components/audio/provider/audio-effects-provider';\nimport { Header } from '../../components/header/header';\nimport { TransitionScreen } from '../../helpers/enums';\nimport { useLottieAnim } from '../../hooks/use-lottie-anim';\nimport { useRouteChecker } from '../../hooks/use-route-checker';\nimport { MilestoneTransitionType } from '../routes.types';\nimport { useConfetti } from './hook/use-confetti';\nimport {\n MilestoneTransitionStyled, ConfettiHolderStyled\n} from './milestone-transition.styled';\nimport { MessageBox } from './sub-components/message-box/message-box';\nimport { TransitionBg } from './sub-components/transition-bg/transition-bg';\n\nexport const MilestoneTransition = () => {\n const { questionSetType } = useRouteChecker();\n const { type = '' } = useParams();\n const screenType = parseInt(type);\n const showConfetti = useConfetti();\n const isSummaryScreen = screenType === TransitionScreen.summaryScreen;\n const isTransitionScreens = screenType === TransitionScreen.startFluency ||\n screenType === TransitionScreen.startReasoning ||\n screenType === TransitionScreen.startProblemSolving;\n const { View: ConfettiBurst } = useLottieAnim({ animationData: Confetti });\n const { playTransitionScreenLoad } = useAudioEffectsContext();\n const activityState = useSelector(state => state.activityState);\n const { progress } = activityState;\n const isFluencyFailModalInActive = progress?.isFluencyStepPassed !== undefined && progress?.isFluencyStepPassed === true;\n\n useEffect(() => {\n if (isTransitionScreens && isFluencyFailModalInActive) {\n playTransitionScreenLoad();\n }\n }, [isFluencyFailModalInActive, isTransitionScreens, playTransitionScreenLoad]);\n\n return (\n \n \n \n
\n {showConfetti &&\n \n {isSummaryScreen && ConfettiBurst}\n \n }\n \n
\n
\n );\n};\n","/*\n * ACTIVITY STATE\n */\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../../app/store/store.types';\nimport { getFinalTotals } from '../sub-components/summary/utils/util';\n\nexport const useConfetti = () => {\n const activityState = useSelector(state => state.activityState);\n const { progress } = activityState;\n const {\n finalTotal: {\n correct, questions\n }\n } = getFinalTotals({ progress });\n const score = (questions && correct / questions) || 0;\n\n return score * 100 >= 50;\n};\n","import { Content } from '@3plearning/question-components-library';\n\nexport type QuestionSetProps = {\n questName: string\n keypadPreset: number\n questions: Content[]\n};\n\nexport type NavButtonsProps = {\n navigate: (type: number) => void\n};\n\nexport type QuestionHeaderProps = {\n questionNumber: number\n totalQuestions: number\n navigate: (type: number) => void\n};\n\nexport enum Nav {\n forward,\n backward\n}\n","export const questionSetMock = {\n questName: 'Fractions and Wholes',\n keypadPreset: 0,\n questions: [\n [\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'How many fifths make a whole?'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: true\n },\n content: [\n {\n type: 'image',\n attrs: {\n src: 'https://cdn-conquest.mathletics.com/image/QS-2598_1a-QS-2598_1b.svg',\n id: '721010104',\n alt: 0,\n customWidth: 450,\n customHeight: 91,\n width: 450,\n height: 91,\n viewport: {\n width: '1',\n height: '1'\n },\n bynderData: [\n {\n id: '1175553638',\n width: 800,\n height: 161,\n isDefaultSize: true\n },\n {\n id: '721010104',\n width: 450,\n height: 91,\n isDefaultSize: false\n }\n ]\n }\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'response-section',\n ignoreForReading: false\n },\n content: [\n {\n type: 'inputbox',\n attrs: {\n id: 802279677,\n unmarked: false,\n maxlength: null,\n tabIndex: null\n }\n },\n {\n type: 'text',\n text: ' fifths make a whole.'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n attrs: { subType: 'question-description' },\n content: [\n {\n text: 'Look at the fraction wall. ',\n type: 'text'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: { subType: 'question-description' },\n content: [\n {\n type: 'image',\n attrs: {\n id: '1715216048',\n alt: 0,\n src: 'https://cdn-conquest.mathletics.com/image/QS-2599_1a-QS-2599_2a-QS-2599_3a.svg',\n width: 450,\n height: 315,\n viewport: {\n width: '1',\n height: '1'\n },\n bynderData: [\n {\n id: '1687509915',\n width: 800,\n height: 560,\n isDefaultSize: true\n },\n {\n id: '1715216048',\n width: 450,\n height: 315,\n isDefaultSize: false\n }\n ],\n customWidth: 450,\n customHeight: 315\n }\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: { subType: 'question-description' },\n content: [\n {\n text: 'How many thirds make a whole?',\n type: 'text'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: { subType: 'response-section' },\n content: [\n {\n text: ' ',\n type: 'text'\n },\n {\n type: 'inputbox',\n attrs: {\n id: 1281912876,\n unmarked: false\n }\n },\n {\n text: ' thirds make a whole. This is the fraction ',\n type: 'text'\n },\n {\n type: 'numerator-denominator-input',\n attrs: {\n id: 1679201148,\n isMixed: false,\n unmarked: false,\n numerator: '',\n denominator: '3',\n wholeNumber: ''\n }\n },\n {\n text: ' .',\n type: 'text'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'Eight pieces make a whole.'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: true\n },\n content: [\n {\n type: 'image',\n attrs: {\n src: 'https://cdn-conquest.mathletics.com/image/QS-2600_1a.svg',\n id: '324229066',\n alt: 0,\n customWidth: 450,\n customHeight: 90,\n width: 450,\n height: 90,\n viewport: {\n width: '1',\n height: '1'\n },\n bynderData: [\n {\n id: '875742328',\n width: 800,\n height: 160,\n isDefaultSize: true\n },\n {\n id: '324229066',\n width: 450,\n height: 90,\n isDefaultSize: false\n }\n ]\n }\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'response-section',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'The whole written as a fraction is '\n },\n {\n type: 'numerator-denominator-input',\n attrs: {\n id: 768784889,\n unmarked: false,\n isMixed: false,\n wholeNumber: '',\n numerator: '',\n denominator: '',\n numeratorMaxlength: null,\n denominatorMaxlength: null,\n wholeMaxlength: null,\n tabIndex: null\n }\n },\n {\n type: 'text',\n text: '.'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'Look at the fraction wall.'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: true\n },\n content: [\n {\n type: 'image',\n attrs: {\n src: 'https://cdn-conquest.mathletics.com/image/QS-2601_1a-QS-2601_2a-QS-2601_3a.png',\n id: '1467360136',\n alt: 0,\n customWidth: 450,\n customHeight: 315,\n width: 450,\n height: 315,\n viewport: {\n width: '1',\n height: '1'\n },\n bynderData: [\n {\n id: '1465513201',\n width: 800,\n height: 561,\n isDefaultSize: true\n },\n {\n id: '1467360136',\n width: 450,\n height: 315,\n isDefaultSize: false\n }\n ]\n }\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'Complete the sentence.'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'response-section',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'One quarter and '\n },\n {\n type: 'inputbox',\n attrs: {\n id: 1806406895,\n unmarked: false,\n maxlength: null,\n tabIndex: null\n }\n },\n {\n type: 'text',\n text: ' more quarters make a whole. '\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'Look at the fraction wall.'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: true\n },\n content: [\n {\n type: 'image',\n attrs: {\n src: 'https://cdn-conquest.mathletics.com/image/QS-2602_1a-QS-2602_2a-QS-2602_3a.svg',\n id: '1467966586',\n alt: 0,\n customWidth: 450,\n customHeight: 315,\n width: 450,\n height: 315,\n viewport: {\n width: '1',\n height: '1'\n },\n bynderData: [\n {\n id: '1459654882',\n width: 800,\n height: 560,\n isDefaultSize: true\n },\n {\n id: '1467966586',\n width: 450,\n height: 315,\n isDefaultSize: false\n }\n ]\n }\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'response-section',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'Three '\n },\n {\n type: 'dropdown',\n attrs: {\n id: 1059599393,\n randomise: false,\n placeholder: ''\n },\n content: [\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '1059599053'\n },\n content: [\n {\n type: 'text',\n text: 'quarters'\n }\n ]\n },\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '1086381436'\n },\n content: [\n {\n type: 'text',\n text: 'fifths'\n }\n ]\n },\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '1090075941'\n },\n content: [\n {\n type: 'text',\n text: 'eighths'\n }\n ]\n },\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '1091922320'\n },\n content: [\n {\n type: 'text',\n text: 'tenths'\n }\n ]\n }\n ]\n },\n {\n type: 'text',\n text: ' combined with seven '\n },\n {\n type: 'dropdown',\n attrs: {\n id: 1146410220,\n randomise: false,\n placeholder: ''\n },\n content: [\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '1146410132'\n },\n content: [\n {\n type: 'text',\n text: 'quarters'\n }\n ]\n },\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '1170422490'\n },\n content: [\n {\n type: 'text',\n text: 'fifths'\n }\n ]\n },\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '1172268984'\n },\n content: [\n {\n type: 'text',\n text: 'eighths'\n }\n ]\n },\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '1175039352'\n },\n content: [\n {\n type: 'text',\n text: 'tenths'\n }\n ]\n }\n ]\n },\n {\n type: 'text',\n text: ' make a whole.'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'This is two quarters of a set.'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: true\n },\n content: [\n {\n type: 'image',\n attrs: {\n src: 'https://cdn-conquest.mathletics.com/image/QS-2603_1a-QS-2603_1b.svg',\n id: '1696186579',\n alt: 0,\n customWidth: 300,\n customHeight: 189,\n width: 300,\n height: 189,\n viewport: {\n width: '1',\n height: '1'\n },\n bynderData: [\n {\n id: '1914675772',\n width: 800,\n height: 504,\n isDefaultSize: true\n },\n {\n id: '1696186579',\n width: 300,\n height: 189,\n isDefaultSize: false\n }\n ]\n }\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'response-section',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'The whole set has '\n },\n {\n type: 'inputbox',\n attrs: {\n id: 788389940,\n unmarked: false,\n maxlength: null,\n tabIndex: null\n }\n },\n {\n type: 'text',\n text: ' triangles.'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'This is '\n },\n {\n type: 'latex',\n attrs: { value: '\\\\frac{1}{4}' }\n },\n {\n type: 'text',\n text: ' of the dots in an array. '\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: true\n },\n content: [\n {\n type: 'image',\n attrs: {\n src: 'https://cdn-conquest.mathletics.com/image/QS-2604_1a.svg',\n id: '544220425',\n alt: 0,\n customWidth: 300,\n customHeight: 53,\n width: 300,\n height: 53,\n viewport: {\n width: '1',\n height: '1'\n },\n bynderData: [\n {\n id: '1268607190',\n width: 800,\n height: 140,\n isDefaultSize: true\n },\n {\n id: '544220425',\n width: 300,\n height: 53,\n isDefaultSize: false\n }\n ]\n }\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'How many dots are there in the whole array?'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'response-section',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'There are '\n },\n {\n type: 'inputbox',\n attrs: {\n id: 349361964,\n unmarked: false,\n maxlength: null,\n tabIndex: null\n }\n },\n {\n type: 'text',\n text: ' dots in the whole array.'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n // eslint-disable-next-line max-len\n text: 'Maio has some chickens. Seven of the chickens laid eggs today. This is one fifth of the total number of chickens. How many chickens does she have? '\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'response-section',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'Maio has '\n },\n {\n type: 'inputbox',\n attrs: {\n id: 1805470232,\n unmarked: false,\n maxlength: null,\n tabIndex: null\n }\n },\n {\n type: 'text',\n text: ' chickens.'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n attrs: { subType: 'question-description' },\n content: [\n {\n type: 'text',\n text: 'An eighth of the seats in a cinema are in the reserved section. There are '\n },\n {\n type: 'latex',\n attrs: { value: '20' }\n },\n {\n type: 'text',\n text: ' seats in the reserved section.  '\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: { subType: 'question-description' },\n content: [\n {\n type: 'text',\n text: 'How many total seats are in the cinema? '\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: { subType: 'response-section' },\n content: [\n {\n type: 'text',\n text: 'There are '\n },\n {\n type: 'input-box',\n attrs: {\n id: 1439126289,\n unmarked: false\n }\n },\n {\n type: 'text',\n text: ' total seats in the cinema. '\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'Look at the fraction wall.'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'question-description',\n ignoreForReading: true\n },\n content: [\n {\n type: 'image',\n attrs: {\n src: 'https://cdn-conquest.mathletics.com/image/QS-2607_1a-QS-2607_2a-QS-2607_3a.svg',\n id: '961400827',\n alt: 0,\n customWidth: 450,\n customHeight: 315,\n width: 450,\n height: 315,\n viewport: {\n width: '1',\n height: '1'\n },\n bynderData: [\n {\n id: '1417425061',\n width: 800,\n height: 560,\n isDefaultSize: true\n },\n {\n id: '961400827',\n width: 450,\n height: 315,\n isDefaultSize: false\n }\n ]\n }\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n subType: 'response-section',\n ignoreForReading: false\n },\n content: [\n {\n type: 'text',\n text: 'One half and two '\n },\n {\n type: 'dropdown',\n attrs: {\n id: 556727698,\n randomise: true,\n placeholder: ''\n },\n content: [\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '556727444'\n },\n content: [\n {\n type: 'text',\n text: 'halves'\n }\n ]\n },\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '584433485'\n },\n content: [\n {\n type: 'text',\n text: 'thirds'\n }\n ]\n },\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '587203212'\n },\n content: [\n {\n type: 'text',\n text: 'quarters'\n }\n ]\n },\n {\n type: 'multipleChoiceOption',\n attrs: {\n isMultiAnswer: false,\n parentType: 'dropdown',\n value: '607521311'\n },\n content: [\n {\n type: 'text',\n text: 'eighths'\n }\n ]\n }\n ]\n },\n {\n type: 'text',\n text: ' make a whole.'\n }\n ]\n }\n ]\n ]\n};\n\nexport const loadingData = [\n [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Loading...'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Loading...'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Loading...'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Loading...'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Loading...'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Loading...'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Loading...'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Loading...'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Loading...'\n }\n ]\n }\n ],\n [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Loading...'\n }\n ]\n }\n ]\n];\n","import styled from '@emotion/styled';\n\nconst questionHeaderHeight = 68;\n\nexport const PreviewCtnr = styled.div`\n width: 100%;\n height: 100%;\n`;\n\nexport const StageCtnr = styled.div`\n height: 100%;\n margin-left: 1px;\n background-color: white;\n overflow: hidden;\n`;\n\nexport const NavCtnr = styled.div`\n height: ${questionHeaderHeight}px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n\n .question {\n text-transform: uppercase;\n color: #5C6C7F;\n font-size: 14px;\n margin-right: 12px;\n }\n\n .question-num {\n font-weight: bold;\n color: #001937\n }\n\n .btn {\n border: #99DDF6 solid 1px;\n background-color: white;\n border-radius: 8px;\n width: 56px;\n height: 44px;\n box-shadow: 0px 1px 2px 0px #0019370F;\n margin-right: 32px;\n\n &.back {\n transform: scaleX(-1);\n margin-right: 4px;\n }\n }\n`;\n\nexport const QuestionCtnr = styled.div`\n height: calc(100% - ${questionHeaderHeight}px);\n overflow: auto;\n padding: 0 32px;\n`;\n","import {\n Box,\n IconButton\n} from '@chakra-ui/react';\nimport React, { FC } from 'react';\n\nimport AppImage from '../../components/app-image/app-image';\nimport {\n Nav,\n NavButtonsProps\n} from './preview.types';\n\nexport const NavButtons: FC = ({ navigate }) => {\n return (\n \n }\n onClick={() => navigate(Nav.backward)}\n className={'btn back'}\n />\n }\n onClick={() => navigate(Nav.forward)}\n className={'btn'}\n />\n \n );\n};\n","import {\n Box,\n Text\n} from '@chakra-ui/react';\nimport React, { FC } from 'react';\n\nimport { lokalisation } from '../../helpers/lokalisation';\nimport { NavButtons } from './nav-buttons';\nimport { NavCtnr } from './preview.styled';\nimport { QuestionHeaderProps } from './preview.types';\n\nexport const QuestionHeader: FC = ({\n navigate,\n totalQuestions,\n questionNumber\n}) => {\n const { previewTxt } = lokalisation();\n\n return (\n \n \n {previewTxt.question} {questionNumber + 1}/{totalQuestions}\n \n \n \n );\n};\n","import {\n Content,\n QtcRenderer\n} from '@3plearning/question-components-library';\nimport { Global } from '@emotion/react';\nimport React, { useEffect } from 'react';\n\nimport { getQueryParam } from '../../helpers/utils';\nimport {\n useNav,\n useQuestionSet\n} from './preview.hooks';\nimport {\n PreviewCtnr,\n QuestionCtnr,\n StageCtnr\n} from './preview.styled';\nimport { QuestionHeader } from './question-header';\n\nexport const Preview = () => {\n const questionSetId = getQueryParam('questionSetId') || '';\n const {\n questionSet,\n getQuestionSet\n } = useQuestionSet();\n const { questions } = questionSet;\n const {\n questionNumber,\n navigate\n } = useNav(questions.length);\n\n useEffect(() => {\n getQuestionSet(questionSetId);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n \n \n \n \n \n null}\n question={questions[questionNumber] as Content}\n questionNumber={questionNumber + 1}\n />\n \n \n \n \n );\n};\n","import { Content } from '@3plearning/question-components-library';\nimport { useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { getQuestionFailure } from '../../containers/question-container/store/question-actions';\nimport { Resources } from '../../resources/resources';\nimport {\n Nav,\n QuestionSetProps\n} from './preview.types';\nimport { loadingData } from './test/mock-data';\n\nexport const useQuestionSet = () => {\n const dispatch = useDispatch();\n const [questionSet, setQuestionSet] = useState({\n questName: '',\n keypadPreset: 0,\n questions: loadingData as Content[]\n });\n const getQuestionSet = async (questionSetId: string) => {\n try {\n const response = await Resources.getQuestionSetPreview.get({ questionSetId }).send();\n\n if (response.data) {\n setQuestionSet(response.data);\n } else {\n dispatch(getQuestionFailure());\n }\n } catch (e) {\n dispatch(getQuestionFailure());\n }\n };\n\n return {\n questionSet,\n getQuestionSet\n };\n};\n\nexport const useNav = (totalQuestions: number) => {\n const [questionNumber, setQuestionNum] = useState(0);\n const navigate = (type: number) => {\n if (questionNumber === totalQuestions - 1 && type === Nav.forward) {\n setQuestionNum(0);\n } else if (questionNumber === 0 && type === Nav.backward) {\n setQuestionNum(totalQuestions - 1);\n } else if (type === Nav.forward) {\n setQuestionNum(questionNumber + 1);\n } else if (type === Nav.backward) {\n setQuestionNum(questionNumber - 1);\n }\n };\n\n return {\n questionNumber,\n navigate\n };\n};\n","import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\n\nimport { useWithMobile } from '../../hooks/use-with-mobile';\nimport {\n pickThemeVar, pickThemeFlex\n} from '../../styles/theme/app-theme';\nimport { QuestionConsoleStyledProps } from './question-console.types';\n\nexport const QuestionConsoleStyled = styled.div(props => {\n const {\n landscape,\n isMobile,\n isTablet\n } = useWithMobile();\n const {\n showQuestion,\n minHeight,\n theme: {\n app: {\n headerHeight,\n progressPanelHeight,\n questionHeaderHeightCollapsed\n }\n }\n } = props;\n\n let breakPointMinHeight;\n\n if (showQuestion) {\n if (minHeight && ((isMobile || (landscape && isMobile)) && !isTablet)) {\n breakPointMinHeight = `${minHeight}px`;\n } else {\n breakPointMinHeight = 'unset';\n }\n } else {\n breakPointMinHeight = `calc(${headerHeight} + ${progressPanelHeight} + ${questionHeaderHeightCollapsed})`;\n }\n\n return css`\n background: linear-gradient(180deg, #0BB3F4 0%, #13B7F6 18.17%, #4CC9F9 53.41%, #B4ECFF 77.67%, #D3F4FF 100%)\n 0 0/100% 573px no-repeat,\n linear-gradient(180deg, #87F8EF 0%, #1EEDDA 24.95%, #01CDDA 51.34%, #01ADE1 73.96%, #018AE9 100%) 0 573px/100% 400px no-repeat,\n linear-gradient(180deg, #018AE9 0%, #018AE9 100%) 0 973px/100% 100px repeat;\n\n width: 100%;\n ${!((isMobile || (landscape && isMobile)) && !isTablet) && `\n height: 100%;\n ${showQuestion ? `min-height: calc(${headerHeight} + ${progressPanelHeight});` : ''}\n overflow: hidden;\n `}\n position: relative;\n display: flex;\n flex-direction: column;\n\n .content {\n max-width: ${pickThemeVar('maxContentWidth')(props)};\n min-width: ${pickThemeVar('minContentWidth')(props)};\n position: relative;\n margin: 0 auto;\n flex-grow: 1;\n max-height: calc(100% - ${pickThemeVar('headerHeight')(props)});\n display: flex;\n flex-direction: column;\n \n .left-mountain {\n position: absolute;\n left: -381px;\n top: 250px;\n height: 406px;\n width: 440px;\n }\n\n .right-mountain {\n position: absolute;\n right: -336px;\n top: 525px;\n height: 153px;\n }\n \n .message-screen {\n ${pickThemeFlex('flexColumnCentered')(props)};\n \n position: absolute;\n top: 0;\n height: 100%;\n margin: 0 32px 32px 32px;\n width: calc(100% - 64px);\n }\n\n @media (max-width: ${pickThemeVar('breakTabletLandscape')(props)}) {\n max-width: 100%;\n }\n \n }\n\n @media (max-width: ${pickThemeVar('breakPoint')(props)}) {\n min-height: ${breakPointMinHeight};\n\n .content {\n width: 100%;\n height: calc(100% - 100px);\n margin:0 auto;\n max-width: unset;\n min-width: unset;\n ${pickThemeFlex('flexColumnCentered')(props)};\n\n .message-screen {\n width: 100%;\n }\n }\n }\n `;\n});\n\nexport const ProgressMountainStyled = styled.div`\n position: absolute;\n top: -70px;\n right: -163px;\n\n .progress-mountain {\n width: 654px;\n height: 716px;\n max-width: none;\n }\n\n @media (max-width: ${pickThemeVar('breakPoint')}) {\n position: relative;\n right: unset;\n\n .progress-mountain {\n position: relative;\n right: 35px;\n }\n\n .right-mountain {\n position: relative;\n left: 36px;\n }\n }\n`;\n","import React, {\n useEffect, useState\n} from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../app/store/store.types';\nimport AppImage from '../../components/app-image/app-image';\nimport { Header } from '../../components/header/header';\nimport { QuestionContainer } from '../../containers/question-container/question-container';\nimport { STUDENT_STATES } from '../../helpers/enums';\nimport { useRouteChecker } from '../../hooks/use-route-checker';\nimport {\n ProgressMountainStyled, QuestionConsoleStyled\n} from './question-console.styled';\n\nexport const QuestionConsole = () => {\n useRouteChecker();\n const activityState = useSelector(state => state.activityState);\n const {\n studentState, questionSetType, validation, isWorkedSolutionActivated\n } = activityState;\n const [minHeight, setMinHeight] = useState(0);\n\n useEffect(() => {\n // wait for animation to finish before detecting height\n setTimeout(() => {\n if (isWorkedSolutionActivated) {\n const workedSolution = document.getElementsByClassName('worked-solution-wrapper')[0] as HTMLElement;\n\n setMinHeight(workedSolution?.offsetHeight + 217);\n } else {\n const questionContent = document.getElementsByClassName('question-content')[0] as HTMLElement;\n\n setMinHeight(questionContent?.offsetHeight + 280);\n }\n }, 1700);\n }, [isWorkedSolutionActivated, validation]);\n\n return (\n \n
\n
\n \n \n \n \n \n \n
\n \n );\n};\n","import {\n Box, Flex, useTheme\n} from '@chakra-ui/react';\nimport React, { useRef } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { QuestionSetType } from '../../../src/helpers/enums';\nimport { AppThemeType } from '../../../src/styles/theme/app-theme';\nimport { AppState } from '../../app/store/store.types';\nimport { Header } from '../../components/header/header';\nimport { QuestionContainer } from '../../containers/question-container/question-container';\nimport { AnswerValidationHandlerProps } from '../../containers/question-container/question-container.types';\nimport backgroundImg from '../diagnostics/assets/AYR_Background.svg';\nimport unitTestBackgroundImg from '../diagnostics/assets/UPT_Background.svg';\nimport { DiagnosticsProps } from './single-variant.types';\n\nexport const Diagnostics = ({ validateSingleVariant }: DiagnosticsProps) => {\n const activityState = useSelector(state => state.activityState);\n const theme: AppThemeType = useTheme();\n const scrollableContainer = useRef(null);\n\n return (\n \n \n \n
\n \n \n \n \n \n \n );\n};\n","import React, {\n useEffect, useState\n} from 'react';\n\nimport AppImage from '../../components/app-image/app-image';\nimport { Header } from '../../components/header/header';\nimport { QuestionContainer } from '../../containers/question-container/question-container';\nimport { AnswerValidationHandlerProps } from '../../containers/question-container/question-container.types';\nimport { STUDENT_STATES } from '../../helpers/enums';\nimport {\n ProgressMountainStyled, QuestionConsoleStyled\n} from '../question-console/question-console.styled';\nimport { QuestionSetProps } from './single-variant.types';\n\nexport const QuestionSet = ({\n studentState,\n validation,\n isWorkedSolutionActivated,\n validateSingleVariant\n}: QuestionSetProps) => {\n const [minHeight, setMinHeight] = useState(0);\n\n useEffect(() => {\n // wait for animation to finish before detecting height\n setTimeout(() => {\n if (isWorkedSolutionActivated) {\n const workedSolution = document.getElementsByClassName('worked-solution-wrapper')[0] as HTMLElement;\n\n setMinHeight(workedSolution?.offsetHeight + 217);\n } else {\n const questionContent = document.getElementsByClassName('question-content')[0] as HTMLElement;\n\n setMinHeight(questionContent?.offsetHeight + 280);\n }\n }, 1700);\n }, [isWorkedSolutionActivated, validation]);\n\n return (\n \n
\n
\n \n \n \n \n \n \n
\n \n );\n};\n","export const progress = {\n attempt: 1,\n stepsCompleted: 1,\n isQuestCompleted: false,\n points: [\n {\n sectionName: 'Fluency',\n pointsPerQuestion: 12,\n stars: [\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n },\n {\n sectionName: 'Reasoning',\n pointsPerQuestion: 20,\n stars: [\n 0,\n 0,\n 0\n ]\n },\n {\n sectionName: 'ProblemSolving',\n pointsPerQuestion: 40,\n stars: [\n 0,\n 0\n ]\n }\n ],\n completedAttempts: 1,\n totalCoinsCount: 0,\n isCoinsCollected: false\n};\n\nexport const template = {\n response: {\n nextQuestion: {\n questionVariantId: '',\n question: [],\n hint: []\n },\n progress\n }\n};\n\nexport const questionItem = {\n id: '',\n answerContent: [],\n workedSolution: [],\n questionContent: { content: [] },\n hintContent: { content: [] }\n};\n","import React, { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from '../../app/store/store.types';\nimport { QuestionSetType } from '../../helpers/enums';\nimport { getQueryParam } from '../../helpers/utils';\nimport { Diagnostics } from './diagnostics';\nimport { QuestionSet } from './question-set';\nimport { useSingleVariant } from './single-variant.hooks';\n\nexport const SingleVariant = () => {\n const variantId = getQueryParam('variantId');\n const questionSetType = getQueryParam('questionSetType');\n const {\n studentState,\n validation,\n isWorkedSolutionActivated\n } = useSelector(state => state.activityState);\n const {\n getSingleVariant,\n validateSingleVariant\n } = useSingleVariant();\n\n useEffect(() => {\n getSingleVariant(variantId as string, questionSetType as string);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const questionSetTypeToggle = () => {\n switch(Number(questionSetType)) {\n case QuestionSetType.questiconActivity: return (\n \n );\n case QuestionSetType.unitTest:\n case QuestionSetType.diagnostics: return (\n \n );\n default: return (\n \n );\n }\n };\n\n return (\n <>\n {\n questionSetTypeToggle()\n }\n \n );\n};\n","import { answerRecord } from '@3plearning/question-components-library';\nimport { useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport {\n getQuestionSuccess, getQuestionFailure, saveQuestionSuccess, getQuestionsDetailsSuccess\n} from '../../containers/question-container/store/question-actions';\nimport { Resources } from '../../resources/resources';\nimport {\n progress,\n template,\n questionItem\n} from './single-variant.constants';\n\nexport const useSingleVariant = () => {\n const dispatch = useDispatch();\n const [variantDetails, setVariantDetails] = useState({\n id: '',\n questionItem\n });\n const getSingleVariant = async (variantId: string, questionSetType: string | undefined) => {\n if (questionSetType) {\n dispatch(getQuestionsDetailsSuccess({ response: { questionSetType: Number(questionSetType) } }));\n }\n try {\n const response = await Resources.questionVariantsFromContentApi.get({ variantId }).send();\n\n if (response.data) {\n template.response.nextQuestion.questionVariantId = response.data.id;\n template.response.nextQuestion.question = response.data.questionItem.questionContent.content;\n template.response.nextQuestion.hint = response.data.questionItem.hintContent\n ? response.data.questionItem.hintContent.content\n : [];\n dispatch(getQuestionSuccess(template));\n setVariantDetails(response.data);\n } else {\n dispatch(getQuestionFailure());\n }\n } catch (e) {\n dispatch(getQuestionFailure());\n }\n };\n const validateSingleVariant = async (studentAnswers: answerRecord) => {\n const workedSolution = () => {\n if (!variantDetails?.questionItem.workedSolution) {\n return [];\n } else if (variantDetails?.questionItem.workedSolution.length) {\n return variantDetails?.questionItem.workedSolution;\n }\n };\n\n try {\n const response = await Resources.testSympy.post().withBody({\n studentAnswers,\n validAnswers: {\n questionVariantId: variantDetails?.id,\n answers: variantDetails?.questionItem.answerContent,\n workedSolution: workedSolution()\n }\n }).send();\n\n if (response.data) {\n dispatch(saveQuestionSuccess({\n response: {\n validation: response.data,\n nextQuestion: {\n questionVariantId: variantDetails.id,\n question: variantDetails.questionItem.questionContent.content,\n hint: variantDetails.questionItem.hintContent\n ? variantDetails.questionItem.hintContent.content\n : []\n },\n progress\n }\n }));\n } else {\n dispatch(getQuestionFailure());\n }\n } catch (e) {\n dispatch(getQuestionFailure());\n }\n };\n\n return {\n getSingleVariant,\n validateSingleVariant\n };\n};\n","import React, {\n PropsWithChildren, useEffect\n} from 'react';\nimport { event } from 'react-ga';\nimport { useDispatch } from 'react-redux';\nimport {\n BrowserRouter, Route, Switch\n} from 'react-router-dom';\n\nimport { useAudioEffectsContext } from '../components/audio/provider/audio-effects-provider';\nimport { loadReadAloudLocale } from '../containers/question-container/store/question-actions';\nimport { getQueryParam } from '../helpers/utils';\nimport useGoogleAnalytics from '../hooks/use-google-analytics';\nimport Intercept3pResourcesError from '../resources/intercept-3p-rescources-error';\nimport { AppInitialisation } from './app-initialisation/app-initialsation';\nimport { Diagnostics } from './diagnostics/diagnostics';\nimport { MilestoneTransition } from './milestone-transition/milestone-transition';\nimport { Preview } from './preview/preview';\nimport { QuestionConsole } from './question-console/question-console';\nimport { ROUTES } from './routes';\nimport { SingleVariant } from './single-variant/single-variant';\n\n// When executing on demo, QA or production, the host app will inject a property\n// called _env_ into the global window variable. This will provide the\n// base name of the app. Most of the time that will be an empty string, but in\n// case it is not, we will extract it and pass it to the router, below.\nconst BASE_NAME = window?._env_?.appConfig?.BaseName || '';\n\nexport function AppRoutes ({ children }: PropsWithChildren) {\n const dispatch = useDispatch();\n const { playClick } = useAudioEffectsContext();\n const gtmInitialised = useGoogleAnalytics();\n\n useEffect(() => {\n if (gtmInitialised) {\n event({\n category: 'Questicon system new',\n action: 'Questicon Categories',\n label: 'Questicon Categories loaded'\n });\n }\n Intercept3pResourcesError.addResourceResponseErrorInterceptor(dispatch);\n // eslint-disable-next-line\n },[]);\n\n useEffect(() => {\n const defaultReadAloudLocale = getQueryParam('locale') || 'en-AU';\n\n // This should be in the header but
is a child of each Route so it renders multiple times throughout the app\n dispatch(loadReadAloudLocale(defaultReadAloudLocale as string));\n }, [dispatch]);\n\n useEffect(() => {\n window.addEventListener('playClick', playClick);\n\n return () => {\n window.removeEventListener('playClick', playClick);\n };\n }, [playClick]);\n\n return (\n \n \n \n \n \n \n \n \n \n\n {children}\n \n );\n}\n","/* eslint-disable*/\n\nimport { css } from '@emotion/react';\n\n/*\n Font taken from Google fonts:\n https://use.typekit.net/bcv1gms.css\n*/\nexport const fonts = css`\n /* devanagari */\n\n /* Sofia Pro Bold aliases */\n @font-face {\n font-family:\"sofia-pro\";\n src:url(\"https://use.typekit.net/af/09d302/00000000000000007735a14e/30/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n7&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/09d302/00000000000000007735a14e/30/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n7&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/09d302/00000000000000007735a14e/30/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n7&v=3\") format(\"opentype\");\n font-display:auto;font-style:normal;font-weight:700;\n }\n @font-face {\n font-family: 'SofiaPro-Bold';\n src:url(\"https://use.typekit.net/af/09d302/00000000000000007735a14e/30/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n7&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/09d302/00000000000000007735a14e/30/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n7&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/09d302/00000000000000007735a14e/30/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n7&v=3\") format(\"opentype\");\n font-display:auto;font-style:normal;font-weight:700;\n }\n\n /* Sofia Pro Italic Bold aliases */\n @font-face {\n font-family:\"sofia-pro\";\n src:url(\"https://use.typekit.net/af/e30e66/00000000000000007735a151/30/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=i7&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/e30e66/00000000000000007735a151/30/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=i7&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/e30e66/00000000000000007735a151/30/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=i7&v=3\") format(\"opentype\");\n font-display:auto;font-style:italic;font-weight:700;\n }\n\n /* Sofia Pro Regular aliases */\n @font-face {\n font-family:\"sofia-pro\";\n src:url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"opentype\");\n font-display:auto;font-style:normal;font-weight:400;\n }\n @font-face {\n font-family: 'Sofia-Pro';\n src:url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"opentype\");\n font-display:auto;font-style:normal;font-weight:400;\n }\n @font-face {\n font-family: 'SofiaProRegular';\n src:url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"opentype\");\n font-display:auto;font-style:normal;font-weight:400;\n }\n @font-face {\n font-family: 'Sofia Pro';\n src:url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/5e6988/00000000000000007735a163/30/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3\") format(\"opentype\");\n font-display:auto;font-style:normal;font-weight:400;\n }\n\n /* Sofia Pro Italic Regular aliases */\n @font-face {\n font-family:\"sofia-pro\";\n src:url(\"https://use.typekit.net/af/37de2f/00000000000000007735a165/30/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=i4&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/37de2f/00000000000000007735a165/30/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=i4&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/37de2f/00000000000000007735a165/30/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=i4&v=3\") format(\"opentype\");\n font-display:auto;font-style:italic;font-weight:400;\n }\n @font-face {\n font-family: 'Sofia Pro';\n src:url(\"https://use.typekit.net/af/37de2f/00000000000000007735a165/30/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=i4&v=3\") format(\"woff2\"),url(\"https://use.typekit.net/af/37de2f/00000000000000007735a165/30/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=i4&v=3\") format(\"woff\"),url(\"https://use.typekit.net/af/37de2f/00000000000000007735a165/30/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=i4&v=3\") format(\"opentype\");\n font-display:auto;font-style:italic;font-weight:400;\n }\n\n @font-face {\n font-family: 'KaTeX_SansSerif-Regular';\n src: url('../assets/sansserifpartial/assets/fonts/KaTeX_SansSerif-Regular.woff2') format('woff2');\n font-display: auto;\n font-style: normal;\n font-weight: 400;\n }\n\n @font-face {\n font-family: 'KaTeX_SansSerif-Italic';\n src: url('../assets/sansserifpartial/assets/fonts/KaTeX_SansSerif-Italic.woff2') format('woff2');\n font-display: auto;\n font-style: italic;\n font-weight: 400;\n }\n\n @font-face {\n font-family: 'KaTeX_SansSerif-Bold';\n src: url('../assets/sansserifpartial/assets/fonts/KaTeX_SansSerif-Bold.woff2') format('woff2');\n font-display: auto;\n font-style: normal;\n font-weight: 700;\n }\n\n @font-face {\n font-family:\"KaTeX_Main_Original\";\n src:url(\"../assets/sansserifpartial/assets/fonts/KaTeX_Main_Original-Regular.woff2\") format(\"woff2\");\n font-display:auto;font-style:normal;font-weight:normal;\n }\n\n @font-face {\n font-family:\"KaTeX_Main_Original\";\n src:url(\"../assets/sansserifpartial/assets/fonts/KaTeX_Main_Original-Italic.woff2\") format(\"woff2\");\n font-display:auto;font-style:italic;font-weight:normal;\n }\n\n @font-face {\n font-family:\"KaTeX_Main_Original\";\n src:url(\"../assets/sansserifpartial/assets/fonts/KaTeX_Main_Original-Bold.woff2\") format(\"woff2\");\n font-display:auto;font-style:normal;font-weight:bold;\n }\n\n @font-face {\n font-family:\"KaTeX_Main_Original\";\n src:url(\"../assets/sansserifpartial/assets/fonts/KaTeX_Main_Original-BoldItalic.woff2\") format(\"woff2\");\n font-display:auto;font-style:italic;font-weight:bold;\n }\n`;\n","import { css } from '@emotion/react';\n\n/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n// https://github.com/necolas/normalize.css\nexport const normalize = css`\n /* Document\n ========================================================================== */\n\n /**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n html {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n }\n\n /* Sections\n ========================================================================== */\n\n /**\n * Remove the margin in all browsers.\n */\n\n body {\n margin: 0;\n }\n\n /**\n * Render the \\`main\\` element consistently in IE.\n */\n\n main {\n display: block;\n }\n\n /**\n * Correct the font size and margin on \\`h1\\` elements within \\`section\\` and\n * \\`article\\` contexts in Chrome, Firefox, and Safari.\n */\n\n h1 {\n font-size: 2em;\n margin: 0.67em 0;\n }\n\n /* Grouping content\n ========================================================================== */\n\n /**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\n hr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n }\n\n /**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd \\`em\\` font sizing in all browsers.\n */\n\n pre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n }\n\n /* Text-level semantics\n ========================================================================== */\n\n /**\n * Remove the gray background on active links in IE 10.\n */\n\n a {\n background-color: transparent;\n }\n\n /**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\n abbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n }\n\n /**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\n b,\n strong {\n font-weight: bolder;\n }\n\n /**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd \\`em\\` font sizing in all browsers.\n */\n\n code,\n kbd,\n samp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n }\n\n /**\n * Add the correct font size in all browsers.\n */\n\n small {\n font-size: 80%;\n }\n\n /**\n * Prevent \\`sub\\` and \\`sup\\` elements from affecting the line height in\n * all browsers.\n */\n\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n\n sub {\n bottom: -0.25em;\n }\n\n sup {\n top: -0.5em;\n }\n\n /* Embedded content\n ========================================================================== */\n\n /**\n * Remove the border on images inside links in IE 10.\n */\n\n img {\n border-style: none;\n }\n\n /* Forms\n ========================================================================== */\n\n /**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\n button,\n input,\n optgroup,\n select,\n textarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n }\n\n /**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\n button,\n input { /* 1 */\n overflow: visible;\n }\n\n /**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\n button,\n select { /* 1 */\n text-transform: none;\n }\n\n /**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n -webkit-appearance: button;\n }\n\n /**\n * Remove the inner border and padding in Firefox.\n */\n\n button::-moz-focus-inner,\n [type=\"button\"]::-moz-focus-inner,\n [type=\"reset\"]::-moz-focus-inner,\n [type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n }\n\n /**\n * Restore the focus styles unset by the previous rule.\n */\n\n button:-moz-focusring,\n [type=\"button\"]:-moz-focusring,\n [type=\"reset\"]:-moz-focusring,\n [type=\"submit\"]:-moz-focusring {\n border-style: none;\n }\n\n /**\n * Correct the padding in Firefox.\n */\n\n fieldset {\n padding: 0.35em 0.75em 0.625em;\n }\n\n /**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from \\`fieldset\\` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * \\`fieldset\\` elements in all browsers.\n */\n\n legend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n }\n\n /**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\n progress {\n vertical-align: baseline;\n }\n\n /**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\n textarea {\n overflow: auto;\n }\n\n /**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n [type=\"checkbox\"],\n [type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n }\n\n /**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n [type=\"number\"]::-webkit-inner-spin-button,\n [type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n }\n\n /**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n [type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n }\n\n /**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n [type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n /**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to \\`inherit\\` in Safari.\n */\n\n ::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n }\n\n /* Interactive\n ========================================================================== */\n\n /*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\n details {\n display: block;\n }\n\n /*\n * Add the correct display in all browsers.\n */\n\n summary {\n display: list-item;\n }\n\n /* Misc\n ========================================================================== */\n\n /**\n * Add the correct display in IE 10+.\n */\n\n template {\n display: none;\n }\n\n /**\n * Add the correct display in IE 10.\n */\n\n [hidden] {\n display: none;\n }\n`;\n","import { css } from '@emotion/react';\n\n/*\n http://meyerweb.com/eric/tools/css/reset/\n v5.0.1 | 20191019\n License: none (public domain)\n*/\nexport const reset = css`\n html, body, div, span, applet, object, iframe,\n h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n a, abbr, acronym, address, big, cite, code,\n del, dfn, em, img, ins, kbd, q, s, samp,\n small, strike, strong, sub, sup, tt, var,\n b, u, i, center,\n dl, dt, dd, menu, ol, ul, li,\n fieldset, form, label, legend,\n table, caption, tbody, tfoot, thead, tr, th, td,\n article, aside, canvas, details, embed,\n figure, figcaption, footer, header, hgroup,\n main, menu, nav, output, ruby, section, summary,\n time, mark, audio, video {\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 100%;\n font: inherit;\n vertical-align: baseline;\n }\n\n /* HTML5 display-role reset for older browsers */\n\n article, aside, details, figcaption, figure,\n footer, header, hgroup, main, menu, nav, section {\n display: block;\n }\n\n /* HTML5 hidden-attribute fix for newer browsers */\n\n *[hidden] {\n display: none;\n }\n\n body {\n line-height: 1;\n }\n\n menu, ol, ul {\n list-style: none;\n }\n\n blockquote, q {\n quotes: none;\n }\n\n blockquote:before, blockquote:after,\n q:before, q:after {\n content: '';\n content: none;\n }\n\n table {\n border-collapse: collapse;\n border-spacing: 0;\n }\n`;\n","import {\n Global, useTheme\n} from '@emotion/react';\nimport React from 'react';\n\nimport { baseAppStyle } from './app';\nimport { fonts } from './fonts';\nimport { normalize } from './normalize';\nimport { reset } from './reset';\n\nexport const GlobalStyles = () => {\n const theme = useTheme();\n\n return (\n <>\n \n baseAppStyle(theme)} />\n \n );\n};\n","import { css } from '@emotion/react';\n\nimport { AppThemeType } from './theme/app-theme';\n\nexport const baseAppStyle = (theme: AppThemeType) => css`\n html, body {\n font-family: ${theme.typography.fontFamily};\n }\n\n body {\n margin: 0;\n background-color: ${theme.app.appBgColour};\n overflow: hidden;\n }\n\n .application {\n position: fixed;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n\n *, *::before, ::after {\n border-color: transparent;\n box-sizing: content-box;\n }\n\n .ML__keyboard.is-visible {\n width: auto;\n \n .MLK__backdrop {\n background-color: transparent;\n position: static;\n display: inline;\n }\n\n .MLK__plate {\n position: static;\n container-type: unset;\n background-color: white;\n border: 0;\n border-radius: 20px;\n \n .MLK__layer {\n .MLK__toolbar {\n display: none;\n }\n .MLK__rows {\n padding-top: 16px;\n padding-bottom: 20px;\n margin-bottom: 0;\n\n @media (max-width: ${theme.breakpoints.lg}) {\n padding-bottom: 0;\n }\n \n .MLK__row {\n height: 52px;\n gap: 0;\n\n & > div {\n width: 52px;\n height: 46px;\n cursor: pointer;\n background-color: white;\n border-radius: 12px;\n color: ${theme.app.primary900};\n border: 1px solid ${theme.app.primary300};\n font-size: 22px;\n\n &:not(:last-child) {\n margin-right: 8px;\n }\n\n &:hover, &:active, &:focus {\n border-color: ${theme.colors.primary['500']};\n }\n\n &:active {\n background-color: ${theme.colors.primary['50']};\n }\n\n &.operator {\n background-color: ${theme.app.neutral100};\n border: 0;\n font-size: 32px;\n\n &:hover, &:active, &:focus {\n border: 1px solid ${theme.colors.primary['500']};\n }\n\n &:active {\n background-color: ${theme.colors.primary['100']};\n }\n }\n\n &.separator {\n border: 0;\n }\n\n &.action.font-glyph {\n font-size: 26px;\n font-weight: normal;\n }\n }\n }\n }\n }\n }\n }\n\n .question-set-type-0, .single-variant-preview-tests-container {\n .rotate-device-modal-content {\n margin-top: 175px;\n }\n }\n\n .single-variant-preview-container {\n .rotate-device-modal-content {\n margin-top: 165px;\n }\n }\n\n .root-container.question-set-type-0,\n .root-container.single-variant-preview-container {\n &[data-rotate-modal-active=\"true\"] {\n & > :first-of-type {\n z-index: 0;\n }\n }\n }\n }\n\n /*::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n background-color: white;\n }\n\n ::-webkit-scrollbar-track {\n background-color: ${theme.app.white01};\n }\n\n ::-webkit-scrollbar-thumb {\n background: lightgray;\n border-radius: 10px;\n }\n\n ::-webkit-scrollbar-thumb:hover {\n background: darkgrey;\n }*/\n\n // build version number, display after trooper build after deploy to demo|qa|live\n .version-number {\n position: fixed;\n right: 0;\n bottom: 0;\n z-index: 10;\n color: #aaa; // static color - no change required\n font-size: 9px;\n }\n\n .ML__keyboard.is-visible {\n width: 0;\n right: 0;\n left: auto;\n\n .MLK__backdrop {\n background-color: white;\n border-radius: 20px;\n }\n\n .MLK__toolbar {\n display: none;\n }\n\n .MLK__rows {\n padding-top: 32px;\n padding-bottom: 20px;\n\n .MLK__row {\n height: 52px;\n\n & > div {\n width: 52px;\n height: 46px;\n background-color: white;\n border-radius: 12px;\n color: ${theme.app.primary900};\n border: 1px solid ${theme.app.primary300};\n font-size: 22px;\n cursor: pointer;\n\n &.operator {\n background-color: ${theme.app.neutral100};\n border: 0;\n font-size: 32px;\n }\n\n &.action.font-glyph {\n font-size: 26px;\n font-weight: normal;\n }\n }\n }\n }\n }\n`;\n","import { ChakraProvider } from '@chakra-ui/react';\nimport React from 'react';\n\nimport { GlobalStyles } from './global-styles';\nimport {\n appTheme, AppThemeType\n} from './theme/app-theme';\n\ntype Props = React.PropsWithChildren<{\n theme?: AppThemeType\n}>;\n\n/**\n * A basic provider to give emotion components a theme property through React Context.\n *\n * For Typescript support see the declaration override for AppTheme in `types/theme.d.ts`.\n *\n * @see https://emotion.sh/docs/theming\n */\nexport const AppThemeProvider = ({\n children, theme = appTheme\n}: Props) => {\n return (\n \n \n {children}\n \n );\n};\n","import {\n Content,\n RadioSegment,\n DropdownSegment,\n CheckboxGroupSegment\n} from '@3plearning/question-components-library';\n\nimport {\n QuestionProgressState, QuestionSetType, STUDENT_STATES\n} from '../../../helpers/enums';\nimport { isDefined } from '../../../helpers/utils';\nimport {\n ActivityState, Activity, Progress\n} from '../sub-components/question-activity/question-activity.types';\nimport {\n GET_QUESTION_FAILURE,\n GET_QUESTION_REQUESTED,\n GET_QUESTION_SUCCESS,\n GET_QUESTIONS_DETAILS_FAILURE,\n GET_QUESTIONS_DETAILS_REQUESTED,\n GET_QUESTIONS_DETAILS_SUCCESS,\n GET_STRAND_UOW_FAILURE,\n GET_STRAND_UOW_REQUESTED,\n GET_STRAND_UOW_SUCCESS,\n LOAD_NEXT_QUESTION,\n QuestionActions,\n RESET_ACTIVITY,\n SAVE_QUESTION_FAILURE,\n SAVE_QUESTION_REQUESTED,\n SAVE_QUESTION_SUCCESS,\n SET_STUDENT_STATE,\n SET_MILESTONE_COMPLETE,\n DISMISS_ERROR,\n IS_OFFLINE,\n IS_WORKED_SOLUTION_ACTIVATED,\n SET_READ_ALOUD_ENABLED,\n SET_READ_ALOUD_LOCALE,\n SET_PLAY_CORRECT_STARS,\n SET_QUESTION_PROGRESS_STATE,\n SET_SERVER_ERROR_INTERCEPTED\n} from './question-action-types';\n\nexport const INITIAL_QUESTION_STATE: ActivityState = {\n questName: undefined,\n strandName: undefined,\n unitOfWork: undefined,\n keyboardPreset: undefined,\n learningIntention: undefined,\n successCriteria: undefined,\n numQuestionSteps: 0,\n milestoneComplete: undefined,\n progress: undefined,\n activity: undefined,\n nextQuestion: undefined,\n updatedProgress: undefined,\n validation: undefined,\n questionSaveInProgress: false,\n isError: false,\n serverErrorIntercepted: undefined,\n isLoading: false,\n isOffline: false,\n isSuccess: false,\n studentState: STUDENT_STATES.progress,\n studentName: undefined,\n questionExample: undefined,\n conceptRefresh: undefined,\n questionSetType: undefined,\n praiseFeedback: undefined,\n isWorkedSolutionActivated: false,\n readAloudEnabled: true,\n readAloudLocale: 'en-AU',\n playCorrectStars: undefined,\n questionProgressState: QuestionProgressState.notCurrent,\n questionsCount: 0\n};\n\nexport const activityReducer = (state: ActivityState = INITIAL_QUESTION_STATE, action: QuestionActions): ActivityState => {\n switch (action.type) {\n case GET_QUESTIONS_DETAILS_REQUESTED:\n return {\n ...state,\n isLoading: true\n };\n case GET_QUESTIONS_DETAILS_SUCCESS: {\n const {\n questName, learningIntention, successCriteria, studentName,\n questionExample, conceptRefresh, praiseFeedback, questionSetType, keyboardPreset\n } = action.payload.response;\n\n return {\n ...state,\n questName,\n learningIntention,\n successCriteria,\n isLoading: false,\n studentName,\n questionExample,\n conceptRefresh,\n praiseFeedback,\n keyboardPreset,\n questionSetType,\n questionsCount: questionSetType === QuestionSetType.unitTest ? 20 : 0\n };\n }\n case GET_QUESTIONS_DETAILS_FAILURE:\n return {\n ...state,\n isError: true,\n isLoading: false\n };\n case GET_STRAND_UOW_REQUESTED:\n return {\n ...state,\n isLoading: true\n };\n case GET_STRAND_UOW_SUCCESS: {\n const {\n strand,\n uow\n } = action.payload.response;\n\n return {\n ...state,\n strandName: strand,\n unitOfWork: uow\n };\n }\n case GET_STRAND_UOW_FAILURE:\n return {\n ...state,\n isError: false,\n isLoading: false\n };\n case GET_QUESTION_REQUESTED:\n return {\n ...state,\n isLoading: true\n };\n case GET_QUESTION_SUCCESS: {\n const {\n nextQuestion, progress\n } = action.payload.response;\n const nextQuestionWithRandomisedLists = randomiseQuestionLists(nextQuestion?.question);\n\n if (isDefined(nextQuestion)) {\n nextQuestion.question = nextQuestionWithRandomisedLists;\n }\n\n let studentState = state.studentState;\n let numQuestionSteps = 0;\n\n if (progress) {\n studentState = getStudentState(progress);\n const flatTotals: number[][] = progress.points?.map((section) => section.stars.flat()) || [];\n\n numQuestionSteps = flatTotals.flat().length;\n }\n\n return {\n ...state,\n progress: { ...progress },\n activity: {\n ...nextQuestion,\n contentId: nextQuestion?.contentId || nextQuestion?.questionVariantId,\n questionVariantId: nextQuestion?.questionVariantId || nextQuestion?.contentId\n },\n isSuccess: true,\n studentState,\n isLoading: false,\n numQuestionSteps\n };\n }\n case GET_QUESTION_FAILURE:\n return {\n ...state,\n isError: true,\n isLoading: false\n };\n case SAVE_QUESTION_REQUESTED: {\n return {\n ...state,\n questionSaveInProgress: true,\n isLoading: true\n };\n }\n case SAVE_QUESTION_SUCCESS: {\n const {\n nextQuestion, progress, validation\n } = action.payload.response;\n const nextQuestionWithRandomisedLists = randomiseQuestionLists(nextQuestion?.question);\n\n if (isDefined(nextQuestion)) {\n nextQuestion.question = nextQuestionWithRandomisedLists;\n }\n\n let questionProgressState;\n\n if(isDefined(validation)) {\n questionProgressState = validation.isCorrect ?\n QuestionProgressState.correctAnswered : QuestionProgressState.incorrectAnswered;\n } else {\n questionProgressState = QuestionProgressState.notCurrent;\n }\n\n return {\n ...state,\n updatedProgress: { ...progress },\n nextQuestion: {\n ...nextQuestion,\n contentId: nextQuestion?.contentId || nextQuestion?.questionVariantId,\n questionVariantId: nextQuestion?.questionVariantId || nextQuestion?.contentId\n },\n ...(validation && {\n validation: {\n ...validation,\n workedSolution: validation.workedSolution?.filter((solution) => solution)\n }\n }),\n questionSaveInProgress: false,\n isLoading: false,\n milestoneComplete: false,\n questionProgressState\n };\n }\n case SAVE_QUESTION_FAILURE: {\n return {\n ...state,\n questionSaveInProgress: false,\n isError: true,\n isLoading: false\n };\n }\n case LOAD_NEXT_QUESTION: {\n const nextQuestion = state.nextQuestion;\n const updatedProgress = state.updatedProgress;\n\n return {\n ...state,\n activity: { ...nextQuestion },\n nextQuestion: undefined,\n progress: { ...updatedProgress },\n updatedProgress: undefined,\n validation: undefined,\n milestoneComplete: false,\n questionProgressState: QuestionProgressState.nextUnanswered\n };\n }\n case RESET_ACTIVITY: {\n const activity: Activity | undefined = state.activity;\n\n return {\n ...state,\n activity: {\n ...activity,\n contentId: undefined,\n questionVariantId: undefined\n },\n milestoneComplete: false,\n playCorrectStars: undefined\n };\n }\n case SET_STUDENT_STATE:\n return {\n ...state,\n studentState: action.studentState\n };\n case SET_MILESTONE_COMPLETE:\n return {\n ...state,\n milestoneComplete: action.milestoneComplete\n };\n case DISMISS_ERROR:\n return {\n ...state,\n isError: false\n };\n case IS_OFFLINE:\n return {\n ...state,\n isOffline: action.isOffline\n };\n case SET_READ_ALOUD_ENABLED:\n return {\n ...state,\n readAloudEnabled: action.readAloudEnabled\n };\n case SET_READ_ALOUD_LOCALE:\n return {\n ...state,\n readAloudLocale: action.readAloudLocale\n };\n case IS_WORKED_SOLUTION_ACTIVATED:\n return {\n ...state,\n isWorkedSolutionActivated: action.workedSolution\n };\n case SET_PLAY_CORRECT_STARS:\n return {\n ...state,\n playCorrectStars: true\n };\n case SET_QUESTION_PROGRESS_STATE:\n return {\n ...state,\n questionProgressState: action.questionProgressState\n };\n case SET_SERVER_ERROR_INTERCEPTED: {\n return {\n ...state,\n serverErrorIntercepted: action.payload\n };\n }\n }\n\n return state;\n};\n\nfunction getStudentState (progress: Progress) {\n const{\n intro, question, summary\n } = STUDENT_STATES;\n const {\n attempt, stepsCompleted, isQuestCompleted\n } = progress;\n\n if (isQuestCompleted) {\n return summary;\n } else if (attempt === 1 && stepsCompleted === 0) {\n return intro;\n } else {\n return question;\n }\n}\n\n/* istanbul ignore next */\nfunction randomiseQuestionLists (question: Content | undefined) {\n if (!question) return;\n\n const copiedQuestion = question.slice();\n\n copiedQuestion.forEach(questionContent => {\n if (\n (\n questionContent.type === 'radioGroup'\n || questionContent.type === 'check-box-group'\n || questionContent.type === 'dropdown'\n )\n && ((questionContent.attrs as (RadioSegment | DropdownSegment | CheckboxGroupSegment)['attrs']).randomise)\n ) {\n shuffleArray(questionContent.content as Content);\n (questionContent.attrs as (RadioSegment | DropdownSegment | CheckboxGroupSegment)['attrs']).randomise = false;\n }\n\n if (Array.isArray(questionContent.content)) {\n randomiseQuestionLists(questionContent.content as Content);\n }\n });\n\n return copiedQuestion;\n}\n\nfunction shuffleArray (array: Content) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n\n [array[i], array[j]] = [array[j], array[i]];\n }\n}\n","import { combineReducers } from 'redux';\n\nimport { activityReducer } from '../../containers/question-container/store/question-reducer';\nimport {\n AppActions, AppState\n} from './store.types';\n\n/**\n * The rootReducer is the top level reducer of the application, the name is a convention\n * used throughout the Redux docs.\n *\n * All other reducers need to be composed into this as its the one that's used in createStore api.\n * eg through some method like \"combineReducers\" or \"reduce-reducers\".\n *\n * @see https://redux.js.org/usage/structuring-reducers/structuring-reducers\n * @see https://redux.js.org/usage/structuring-reducers/using-combinereducers\n * @see https://redux.js.org/usage/structuring-reducers/beyond-combinereducers#sharing-data-between-slice-reducers\n */\nexport const rootReducer = combineReducers({ activityState: activityReducer });\n","import React, {\n PropsWithChildren, useMemo\n} from 'react';\nimport { Provider } from 'react-redux';\nimport {\n applyMiddleware, compose, createStore\n} from 'redux';\nimport thunk from 'redux-thunk';\n\nimport { APP_CONFIG } from '../../config';\nimport { rootReducer } from './root-reducer';\n\n/**\n * The main Redux Context Provider for the application.\n */\nexport function AppReduxProvider ({ children }: PropsWithChildren) {\n // We only want to create the store once and keep it memoized\n const store = useMemo(configureStore, []);\n\n return (\n \n {children}\n \n );\n}\n\n/**\n * Standard helper to create a new Redux store.\n *\n * @see https://redux.js.org/usage/configuring-your-store#the-solution-configurestore\n */\nfunction configureStore () {\n const composeEnhancers: unknown =\n typeof window === 'object' &&\n // @ts-ignore\n window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?\n // @ts-ignore\n window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n name: APP_CONFIG.appName,\n trace: process.env.NODE_ENV === 'development'\n }) : compose;\n\n let enhancer;\n\n if (typeof composeEnhancers === 'function') {\n enhancer = composeEnhancers(\n applyMiddleware(\n // Add context here for dependency injection to thunks, eg history.push\n // @see https://github.com/reduxjs/redux-thunk#injecting-a-custom-argument\n thunk.withExtraArgument({})\n )\n );\n }\n\n return createStore(\n rootReducer,\n enhancer\n );\n}\n","import React, { PropsWithChildren } from 'react';\n\nimport { AppError } from '../components/app-error/app-error';\nimport { AudioEffectsProvider } from '../components/audio/provider/audio-effects-provider';\nimport { BuildNumber } from '../containers/build-number/build-number';\nimport FluencyFail from '../containers/fluency-fail/fluency-fail';\nimport InternetConnectivity from '../containers/internet-connectivity/internet-connectivity';\nimport { KeypadProvider } from '../containers/question-container/sub-components/activity-keypad/keypad-provider';\nimport SessionTimeout from '../containers/session-timeout/session-timeout';\nimport { I18nProvider } from '../i18n/i18n-provider';\nimport { AppRoutes } from '../routes/app-routes';\nimport { AppThemeProvider } from '../styles/app-theme-provider';\nimport { GlobalStyles } from '../styles/global-styles';\nimport { AppReduxProvider } from './store/app-redux-provider';\n\nexport function AppProviders ({ children }: PropsWithChildren) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n {children}\n \n \n \n \n \n \n \n );\n}\n","import axios from 'axios';\n\nimport { featureFlags } from '../helpers/constants';\nimport { Resources } from '../resources/resources';\nimport { Credentials } from '../types/common.types';\nimport EntryApp from './entry-app';\n\nexport const getFeatureToggles = async () => {\n const response = await Resources.featureToggles.post().withBody(featureFlags).send();\n\n if (response.data) {\n window.questiconFeatureToggles = response.data;\n } else {\n throw new Error('Server error');\n }\n};\n\nexport const resourceSetting = async (credentials: Credentials, envName:string, config: Record) => {\n Resources.initialise(envName, credentials);\n Resources.env.setConfiguration(config);\n try {\n await getFeatureToggles();\n } catch (e) {\n console.log(e);\n }\n EntryApp.renderElement();\n};\n\nexport const getToken = async (credentials: Credentials, envName:string, config: Record) => {\n try {\n // No choice but to use axios because 3P Resources hasn't even been initialised yet\n // but this is only for Development environment,\n // down the road, we need to remove of 3P resources because\n // we no longer use Config Manager\n const response = await axios({\n method: 'post',\n url: `${window._env_.AUTHENTICATION_GATEWAY_ENDPOINT}/sessions`,\n data: {\n userName: credentials.username,\n password: credentials.password,\n productId: 0\n }\n });\n\n if (response.data) {\n credentials = {\n ...credentials,\n authToken: response.data.token,\n username: undefined,\n password: undefined\n };\n resourceSetting(credentials, envName, config);\n } else {\n console.log('development env - auth error');\n }\n } catch(e) {\n console.log(`development env - auth error - ${e}`);\n }\n};\n","// TODO remove inlined regenerator-runtime requirement from 3p-resource.\n// the new `.browserslistrc` allows us to handle this automatically with `babel-preset-env`\n// this is not actually required by our supported browsers.\nimport 'regenerator-runtime/runtime.js';\nimport ConserveParameters from '@3plearning/routing-conserve-parameters';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\n\n/* eslint-disable etc/no-commented-out-code */\nimport { getQueryParams } from '../helpers/utils';\nimport { Resources } from '../resources/resources';\nimport { Credentials } from '../types/common.types';\nimport { AppProviders } from './app-providers';\nimport {\n getToken,\n resourceSetting\n} from './entry-app.utils';\n\n// eslint-disable-next-line jest/require-hook\nConserveParameters([\n 'username',\n 'password',\n 'userToken',\n 'env',\n 'questionSetId',\n 'locale',\n 'authToken',\n 'uow',\n 'variantId',\n 'courseId',\n 'uowId',\n 'questionSetType',\n 'assignmentId',\n 'classId',\n 'backUrl',\n 'keypadPreset'\n]);\n\nexport default class EntryApp extends React.Component {\n static element: string;\n\n options?: Record;\n\n constructor (element: string, dynamicOptions?: Record) {\n super({});\n EntryApp.element = element;\n EntryApp.configure();\n this.options = dynamicOptions;\n }\n\n static render () {\n return ;\n }\n\n static renderElement () {\n const rootNode = window.document.querySelector(this.element);\n\n if (rootNode) {\n const root = createRoot(rootNode);\n\n root.render(this.render());\n }\n }\n\n static configure () {\n const params = getQueryParams(location.search);\n\n EntryApp.configureForRemoteHost(params);\n }\n\n static configureForDeveloperMachine (params: { env?: string } & Credentials) {\n let envName = params.env;\n\n if (!envName) {\n console.log(\n 'this.configureForDeveloperMachine()' +\n ' - you did not provide an \"env\" query parameter, so I am assuming you want to talk to live.');\n\n envName = 'live';\n }\n\n const credentials = this.getCredentials(params);\n\n if (envName === 'local' || this.weHaveUsableCredentials(credentials)) {\n Resources.initialise(envName, credentials);\n }\n }\n\n static async configureForRemoteHost (params: Record) {\n const config = window._env_;\n const envName = config.env || 'live';\n const credentials = this.getCredentials(params);\n\n if (params.username && params.password) {\n await getToken(credentials, envName, config);\n } else if (this.weHaveUsableCredentials(credentials)) {\n resourceSetting(credentials, envName, config);\n }\n }\n\n static getCredentials (params: Credentials) {\n const credentials: Credentials = {\n authToken: undefined,\n JWT: undefined,\n username: undefined,\n password: undefined\n };\n const items: (keyof Credentials)[] = ['authToken', 'JWT', 'username', 'password'];\n\n Object.keys(params).forEach((key) => {\n const value = params[key as keyof Credentials];\n\n for (const item of items) {\n if (key.toLowerCase() === item.toLowerCase()) {\n credentials[item] = value;\n }\n }\n });\n\n return credentials;\n }\n\n static weHaveUsableCredentials (credentials: Credentials) {\n let usableCredentials = false;\n\n if (credentials.authToken) {\n usableCredentials = true;\n } else if (credentials.username && credentials.password) {\n usableCredentials = true;\n }\n\n if (!usableCredentials) {\n console.error(\n 'EntryApp.configureForDeveloperMachine() - to execute, we need either an authToken or a username/' +\n 'password pair. After combining data from window._env_ and the query parameters, I still do' +\n ' not have what I need. The app will probably not function correctly if it requires any 3P resources.');\n }\n\n return usableCredentials;\n }\n}\n\nexport const app = new EntryApp('.application');\n\n// @ts-ignore\nwindow.EntryApp = EntryApp;\n"],"names":["webpackEmptyAsyncContext","req","Promise","resolve","then","e","Error","code","keys","id","module","exports","getQueryParam","param","URLSearchParams","window","location","search","get","isDefined","value","transformSchema","content","map","block","segments","segment","type","getPoints","progress","points","reduce","totalPoints","section","stars","sectionTotal","questionResult","pointsPerQuestion","returnToStudentPortal","studentPortalUrl","document","href","close","error","console","log","APP_CONFIG","environment","require","Resources","parentEnv","env","AUTHENTICATION_URL","_env_","AUTHENTICATION_GATEWAY_ENDPOINT","QUESTICON_GATEWAY_URL","QUESTICON_GATEWAY","sendFeedback","resource","baseUrl","service","getQuestionsDetails","getStrandUow","getQuestionSetPreview","getQuestion","saveQuestion","collectCoins","questionVariantsFromContentApi","testSympy","featureToggles","getToken","exitQuestionSet","getReadAloudLocale","postReadAloudLocale","getConfigurationItem","async","key","application","name","envName","credentials","authToken","jwtToken","JWT","username","password","initialise","createResources","PROGRESS_STATE","MilestoneState","STUDENT_STATES","TransitionScreen","QuestionSetType","QuestionProgressState","ExitType","ServerErrorType","useServerErrorAggregator","errorType","serverErrorIntercepted","useSelector","state","activityState","status","timeout","other","SCORE_GROUPS","featureFlags","lokalisation","messageBoxTxt","questions","fluencyDescription","fluencyHeader","fluencyHeaderForExceedingMaximumAttempts","noPointsEarnTxt","diagnosticIntroTxt","noPointsEarn","transToScreenTxt","problemSolvingHeader1","problemSolvingHeader2","problemSolvingDescription","nextStage","nextStageStart","reasoningHeader1","reasoningHeader2","reasoningDescription","progressTxt","buttonTxt","hint","next","exit","check","begin","resume","start","startQuestions","ready","tryAgain","tryAnother","workedSolution","collect","finish","startAgain","gotIt","home","signIn","introTxt","conceptRefresh","hi","goal","intention","success","questionSubHeading","diagnosticGoal","maximumAttemptExceeded","labelTxt","coins","collectCoinsHeading","correct","correctAnswerHeader","readAloud","summit","attempt","summaryTxt","praiseStatement","score","overallRating","starRatings","praiseFeedback2","praiseFeedback3","feedbackByStrength","exceededAttemptsFinishScreenTxt","title","description","diagnosticsSummaryTxt","diagnosticsPraises","youScored","scoreStatement","totalCorrect","totalQuestions","prompt","scoreRetention","scoreRetentionAfterMaximumAttempt","errorTxt","errorMessage","noInternetTxt","header","content1","content2","sessionTimeoutTxt","workedSolutionTxt","solution","num","signPosts","think","plan","do","answer","feedbackTxt","heading","feedback","qtcRendererTxt","corruptedData","exitWithoutCompleting","para1","para2","yes","no","fluencyFailTxt","para1a","para1b","questionComponentsLibraryTxt","video","rotateMsgLabel","rotateImageAltLabel","previewTxt","question","zoomOut","unitPracticeTest","accuracy","improveScoreTitle","improveScoreText","questionSummary","retainScoreHeading","retainScoreText","useExitApp","exiting","setExiting","useState","redirect","backUrl","referrer","reload","exitApp","questionSetType","exitType","questionSetId","assignmentId","post","withBody","parseInt","questionSetTypeId","progressType","normalExit","send","ModalContentContainer","children","restProps","mx","overflow","boxShadow","outline","base","breakTabletPortraitPhone","w","motionProps","initial","opacity","top","animate","transition","ease","duration","p","ModalLayout","closeOnOverlayClick","variant","bg","h","maxW","break1270","borderRadius","my","isOpen","onClose","flexDirection","break680","align","justify","alignSelf","alt","src","spacing","justifyContent","minHeight","pr","lg","py","pb","fontWeight","fontSize","lineHeight","letterSpacing","color","textAlign","minW","colorScheme","onClick","AppError","isOffline","onOpen","useDisclosure","chakraModalProps","useEffect","Context","createContext","AudioEffectsProvider","Howler","allStarsSpin","useMemo","Howl","preload","html5","allStarsSpinClick","clickFile","onend","play","correctSound","correctAnswerScreen","inCorrectSound","collectCoinsClick","correct1Star","correct2Star","correct3Star","scoreResults1Star","scoreResults2Star","scoreResults3Star","click","beforeCollectingCoins","selfAssesmentEmojis1","selfAssesmentEmojis2","selfAssesmentEmojis3","selfAssesmentEmojis4","selfAssesmentEmojis5","congratulations","transitionScreen","completionUPTPage","completionAYRPage","playClick","playCorrectStarsAudio","playCongratulations","on","audio","setTimeout","playCorrectScoreResultsAudio","playAllStarsSpin","playClickWithCollectCoins","playTransitionScreenLoad","playSelfAssesmentEmojisAudio","feedbackType","playCompletionUPT","playCompletionAYR","Provider","useAudioEffectsContext","useContext","BuildNumber","showMore","setShowMore","position","zIndex","left","bottom","padding","BUILD_NUMBER","packageJson","AppImages","activityGuide","conceptRefreshIcon","progressPath","pinIcon","mathLogo","progressMountain","swipeIcon","star","starSrc","starGrey","starGreySrc","tick","leftMountain","rightFgMountain","guide","modalCancelIcon","attemptCross","attemptTick","audioIcon","leftFluency","rightFluency","leftReasoning","rightReasoning","leftProblemSolving","rightProblemSolving","cloudBumpy","cloudNarrow","summitMountain","infoIcon","keypadIcon","workedSolutionIcon","closeIcon","dragIcon","SummaryMountain","chevronRight","fluencyFailFluffy","fluencyFailMountain","fluencyFailOcean","sessionTimeout","iconType","imageType","role","uniquifyIDs","useWithMobile","theme","useTheme","breakMobile","useMediaQuery","breakpoints","md","landscape","useWindowOrientation","isMobile","isTablet","useModalResponsiveStyles","modalResponsiveStyles","styles","width","fluffyResponsiveStyles","maxWidth","transform","contentResponsiveStyles","marginTop","bkgdResponsiveStyles","display","buttonResponsiveStyles","Bkgd","FluencyFailModalBkgd","as","className","TempSpinnerWrapper","btnStyle","px","tabletLandscape","FluencyFailModalContent","restartApp","restarting","setRestarting","fluencyExit","useRestartApp","isMobileLandscape","m","backgroundColor","mb","app","blue02","borderColor","primary300","handleExit","isDisabled","size","border","whiteAlpha30","mt","isFluencyStepPassed","undefined","NoInternetImage","height","viewBox","fill","xmlns","clipPath","cx","cy","rx","ry","d","r","gradientUnits","gradientTransform","stopOpacity","offset","x1","y1","x2","y2","stopColor","totalDots","isOnline","useIsOnline","ActivityKeypad","isKeypadBtnDisabled","setIsKeypadBtnDisabled","showKeypad","setShowKeypad","setShowKeypadBtn","keypadRef","questionBodyElement","KeypadContext","keypadContainerRef","useRef","isDragging","setIsDragging","translatedPosition","setTranslatedPosition","referencePosition","setReferencePosition","onCloseKeypad","handleMouseDown","event","node","current","clientX","clientY","changedTouches","offsetLeft","offsetTop","stopPropagation","preventDefault","positionKeypad","useCallback","isTabletPortrait","innerWidth","innerHeight","questionBodyPosition","getBoundingClientRect","initialLeft","initialTop","clientHeight","clientWidth","style","keypadHandle","querySelector","keypadHandleWidth","keypadHandleHeight","updatedLeft","updatedTop","allowedHiddenArea","resizeObserver","ResizeObserver","entries","observe","disconnect","observer","MutationObserver","mutationList","mutation","removedNodes","length","addedNodes","childList","Boolean","subtree","handleMouseMove","handleMouseUp","removeEventListener","addEventListener","boxSizing","onMouseDown","filter","ref","pt","onTouchStart","cursor","icon","tabIndex","above","pl","KeypadProvider","showKeypadBtn","setQuestionBodyElement","keypadContextValue","questionBodyRef","para","marginBottom","open","MATHLETICS_LOGIN","DEFAULT_LOCALE","DEFAULT_LOCALE_DATA","plurals","en","loadLocalLingui","debug","dynamicActivate","locale","messages","loadI18n","shouldLoadLocaleFromCDN","LOCALISATION_CDN_BASE_URL","options","activateRemoteLocaleData","catch","tryLoadFallbackLocale","loadMessageCatalog","i18n","sourceError","failureMessage","message","processTokens","tokens","token","arg","Array","isArray","formatProps","cases","forEach","item","parsedToken","replace","join","compile","parse","concat","response","fetch","json","JSON","stringify","compiledMessages","Object","translatedMessage","compiledMessage","useActivateI18n","getURLLocale","isLoading","setIsLoading","isError","setIsError","I18nProvider","GET_QUESTIONS_DETAILS_REQUESTED","GET_QUESTIONS_DETAILS_SUCCESS","GET_QUESTIONS_DETAILS_FAILURE","GET_STRAND_UOW_REQUESTED","GET_STRAND_UOW_SUCCESS","GET_STRAND_UOW_FAILURE","GET_QUESTION_REQUESTED","GET_QUESTION_SUCCESS","GET_QUESTION_FAILURE","SAVE_QUESTION_REQUESTED","SAVE_QUESTION_SUCCESS","SAVE_QUESTION_FAILURE","LOAD_NEXT_QUESTION","RESET_ACTIVITY","SET_STUDENT_STATE","SET_MILESTONE_COMPLETE","IS_WORKED_SOLUTION_ACTIVATED","SET_READ_ALOUD_ENABLED","SET_READ_ALOUD_LOCALE","SET_PLAY_CORRECT_STARS","SET_QUESTION_PROGRESS_STATE","SET_SERVER_ERROR_INTERCEPTED","getQuestionsDetailsFailure","getQuestionsDetailsSuccess","payload","courseId","uowId","classId","dispatch","questDetailsRequest","assignmentType","data","questName","getStrandUowFailure","getQuestionFailure","getQuestionSuccess","setReadAloudEnabled","readAloudEnabled","setReadAloudValue","readAloudLocale","saveQuestionFailure","saveQuestionSuccess","saveData","setStudentState","studentState","setMilestoneComplete","milestoneComplete","activateWorkedSolution","loadReadAloudLocale","defaultReadAloudLocale","isRetry","isReadAloudEnabled","setReadAloudLocale","raw","setQuestionProgress","questionProgressState","setServerErrorIntercepted","initialized","setInitialized","includes","GTM_ID","initialize","pageview","Intercept3pResourcesError","interceptor","handleErrors","bind","this","addResponseInterceptor","result","Button","baseStyle","_focus","colors","primary","variants","props","defaults","_disabled","neutral100","fontGrey01","svg","_hover","primary50","overrides","_active","primary100","blue06","whiteAlpha800","solid","disabledOverrides","CloseButton","blue","neutral600","primary600","baseStyleFilledTrack","green02","Progress","filledTrack","track","$bg","cssVar","Tooltip","variable","grey06","flex","flexRowVerticalCentered","flexRowSpaced","flexRowVerticalCenteredSpaced","flexColumnCentered","flexColumn","flexColumnSpaced","flexAlignEnd","flexRowReverse","flexChildCentered","appBgColour","questionConsoleBgColour","font","fontPrimary","fontLight","white01","white02","white03","darkBlue","primary200","primary700","primary900","error600","error300","error700","neutral50","neutral200","neutral300","neutral900","grey01","grey02","grey03","grey04","grey05","blue01","blue03","blue04","blue05","red01","red02","red03","red04","red05","red06","red07","orange01","orange02","orange03","green01","green03","green04","green05","green50","green200","green300","green600","yellow01","yellow02","phoneLandscape","breakTabletPortrait","breakTabletLandscape","breakPoint","transitionBreakPoint","transitionBreakPointLarge","xl","headerHeight","headerHeightMobile","footerHeight","questionHeaderHeight","questionHeaderHeightCollapsed","questionBodyPadding","questionBodyPaddingMobile","questionNumberWidth","maxContentWidth","minContentWidth","questionPanelMaxWidth","questionPanelMinWidth","progressPanelWidth","progressPanelHeight","progressPanelLeftMargin","rightBkWidth","guideWidth","guideHeight","guideWidthAndSpacer","guideWidthLandscape","guideHeightLandscape","guideWidthLandscapeAndSpacer","guideWidthPortrait","guideHeightPortrait","guideWidthPortraitPhone","guideHeightPortraitPhone","messageBoxWidth","messageBoxWidthLandscape","messageBoxWidthPortrait","messageBoxSummaryWidth","stickyHintContainerHeight","testsStageMaxWidth","questionContainerMargin","APP_THEME","typography","fontFamily","fontWeightRegular","fontWeightBold","mixins","colour","css","appTheme","mergeThemeOverride","defaultTheme","phonePortrait","components","Container","Modal","sizes","full","dialog","minH","body","dialogContainer","overlay","Popover","maxH","popper","inset","right","pickThemeVar","pickThemeFlex","AppInitialisationStyled","ROUTES","useAppInitialization","history","useHistory","useDispatch","setTransitionScreen","dataInitialised","setDataInitialised","queryParams","params","queryString","urlParams","acc","getQueryParamValues","stepsCompleted","isQuestCompleted","questiconActivity","diagnosticsSummaryScreen","diagnostics","diagnosticsStartScreen","unitTest","unitTestIntroScreen","startScreen","startReasoning","startProblemSolving","summaryScreen","resetUnanswered","AppInitialisation","initialRef","initialFocusRef","sm","whiteSpace","transitionDuration","KeycapWrapper","Ctrl","Command","HyphenUnderscore","os","ZoomOutModal","navigator","userAgent","pos","alignItems","wrap","index","keycap","teal","yellow","SESSION_MODAL_SHOWN_KEY","MODAL_SHOWN_COUNT_KEY","ZoomOut","isIntroOrFirstQuestion","isCorrectDevice","deviceType","hasShownSessionModal","sessionStorage","getItem","modalShownCount","Number","localStorage","exceededModalShownCount","shouldZoomOut","devicePixelRatio","HiDPIsBelow100P","Math","round","outerWidth","getShowButtonState","showButton","setShowButton","showModal","timeoutID","handleZoomChange","setItem","toString","clearTimeout","HeaderStyled","HeaderTextWrapper","LogoTitleWrapper","LogoStyled","AppImage","ProgressBtnStyled","Header","showReadAloudBtn","showExitBtn","showZoomOutBtn","strandName","unitOfWork","activity","isWorkedSolutionActivated","updatedProgress","useParams","isShowProgressBtnVisible","headerRef","scrollIntoView","flexWrap","bgColor","backdropFilter","leftIcon","onLocaleChange","onToggleEnableState","popoverLabel","selectedLocale","disabled","ratings","from","to","numRatingStars","numRatingStarAnims","getStarRatingNum","totalStars","rating","find","getStarType","getFinalTotals","highestCorrectByStrength","initTotal","sectionTotals","s","total","startValue","pointsEarned","isCorrect","strength","findIndex","c","finalTotal","FIRST_MILESTONE","SECOND_MILESTONE","QuestionContainerStyled","useProgressActivity","validation","playCorrectStars","progressAttempt","questionAnswered","setQuestionAnswered","questionCorrect","setQuestionCorrect","showProgress","setShowProgress","progressData","setProgressData","useUpdatedData","maxAttempts","questionsCount","attemptStatusUtil","getStarStyle","questionProgress","attemptNum","greyStar","getCapsuleStyle","capsuleWidth","leftPos","borderColour","fluency","reasoning","problemSolving","ProgressMilestoneStyled","direction","milestoneState","bgColour","displayPin","notStarted","inProgress","completed","posProps","topPos","WhiteDot","ProgressMilestone","stepsAnswered","setMilestoneState","setIconType","label","setLabel","showStars","starListRef","starsRefs","list","getListRefTargets","gsap","set","transformOrigin","fromTo","y","stagger","rotation","starPos","nthType","numStars","ProgressStepStyled","questionNumIndex","background","stepState","diameter","questionNumber","StarHolderStyled","isCurrentStep","ProgressStep","starShapes","setStarShapes","firstStarRef","secondStarRef","thirdStarRef","currentQuestionNum","starsRefsList","i","push","nextUnanswered","calculateStepState","starList","ProgressActivityStyled","ProgressActivity","setStepsAnswered","questionStars","setQuestionStars","progressSteps","stepArray","flat","getStarsArray","isNaN","useQuestionActivityAudio","showCorrectAnswer","correctAudioCompleted","setCorrectAudioCompleted","incorrectAudioCompleted","setIncorrectAudioCompleted","showCorrectAnswerScreen","setShowCorrectAnswerScreen","correctAnswered","incorrectAnswered","CorrectAnswerContent","correctAnswerValidation","validAnswer","primaryAnswer","fallback","callback","translations","guideDimensions","wrapperPadding","CorrectAnswerWrapper","CorrectAnswerBody","CorrectAnswerGuide","CorrectAnswerHeader","CorrectAnswerContentWrapper","CorrectAnswer","HintContent","readAloudConfig","readAll","workedSolutionGuideSize","WorkedSolutionWrapper","WorkedSolutionBody","LeftItem","WorkedSolutionHeader","WorkedSolutionContent","signPostKey","multiDocs","renderQtcRenderer","doc","ind","paddingLeft","margin","_selected","QuestionAttemptPill","isCurrentQuestion","neutral400","green500","useToken","attemptStatus","borderWidth","getOutlineColors","borderStyle","getFillColors","UnitTestQuestionAttemptPill","mr","UnitTestQuestionAttempts","validationStatus","ml","QuestionAttempts","allPoints","finalPoints","point","ContentType","AttemptsStatusStyled","AttemptStarStyled","greyStarStyle","AttemptStatus","getIcon","QuestionFooterContainer","IconSupportButton","SupportButton","SubmitButton","CloseIcon","Circle","conceptRefreshUrl","footerBtnLabel","checkButtonDisabled","showNextQuestion","validateAnswer","footerBtnColorScheme","isDiagnostic","footerResponsiveStyles","useFooterResponsiveStyles","checkBtnRef","workedSolutionState","setWorkedSolutionState","buttonDisabled","buttonPulse","workedSolutionHandler","dispatchStopReadAloudEvent","dataLayer","conceptRefreshHandler","focus","below","isActive","url","contentType","QuestionActivityStyled","showQuestion","isGuideImageRemoved","isValidated","correctLabel","QuestionBody","QuestionContent","ActivityGuide","WorkedSolutionCloseButton","QuestionActivity","isReadyToValidate","onUpdate","onProgress","allQuestionsComplete","scrollableContainer","hintBtnLabel","questionData","questionSaveInProgress","keyboardPreset","conceptRefreshContent","pop","text","questionVariantId","setFooterBtnLabel","setFooterBtnColorScheme","keypadPresetFromQueryParams","scrollTo","assetsBasePath","ASSETS_CDN_BASE_PATH","enabled","gatewayUrl","READ_ALOUD_GATEWAY_BASE_URL","hintProps","tracking","onError","isReady","keypadContainer","keypadPreset","QuestionContainer","answerValidationHandler","isMilestoneComplete","navigateToTransitionScreen","numQuestionSteps","setAllQuestionsComplete","setQuestionNumber","updatedStepsCompleted","updatedAttempt","isQuestComplete","summary","navigateToSummaryScreen","summaryTransitionScreenEnum","unitTestSummaryScreen","questionTotal","transitionScreenEnum","useMilestoneProgress","userResponse","setUserResponse","useBreakpointValue","handleProgress","nextStudentState","intro","fluencyIntro","getNextStudentState","isPlayClickSkipped","contentId","studentAnswer","useRouteChecker","Diagnostics","diagnosticsResponsiveStyles","useDiagnosticsResponsiveStyles","bgImage","backgroundImg","unitTestBackgroundImg","bgRepeat","bgSize","bgPosition","flexGrow","useLottieAnim","loop","animationData","onComplete","View","animationItem","useLottie","MilestoneTransitionStyled","ConfettiHolderStyled","GuideStyled","Guide","PointsContainer","CoinTotalContainer","CollectCoins","coinAnimationRef","coinsTotalRef","coinsTotalDisplayRef","pointsTotalRef","wingsAnimationRef","in","enter","offsetY","mCoin","__css","lottieRef","coinAnimation","initialSegment","onEnterFrame","frame","totalTime","currentTime","wingsAnimation","delay","flexDir","DiagnosticsIntro","firstName","activityName","orientation","DiagnosticsSummary","studentName","diagnosticFinishBtnRef","preventScroll","finishScreen","ExceededAttemptsFinishScreen","FeedbackItem","radioProps","getInputProps","getCheckboxProps","htmlProps","getLabelProps","useRadio","primary400","feedbackEmojis","isChecked","hidden","rounded","flexShrink","FeedbackScreen","handleChange","questionsetTitle","getRadioProps","getRootProps","useRadioGroup","onChange","nextValue","feedbackItem","IntroScreenStyled","HeaderTitle","neutral","QuestionSetTitle","ExampleHeading","ExampleQuestionWrapper","Section","Content","Heading","ConceptRefreshImageBtn","generateBlock","blocks","blockKey","blockIndex","IntroScreen","learningIntention","successCriteria","questionExample","MidMilestoneScreen","hasMilestoneSummary","header2","milestoneDescription","milestoneHeader","nextStageLabel","numMilestoneQuestions","questionsTxt","totalMilestonePoints","totalPointsTxt","useGetAnimationDetails","playStarsAnim","setPlayStarsAnim","barRef","barGoldRef","totalCorrectRef","percentValue","scoreNum","showGold","goldBarStars","GoldBarStars","goldBrick","GoldBrick","bar","barGold","scoreNumTxt","scorePercent","target","val","showBarGold","innerHTML","add","textContent","animateScore","ProgressInnerBarStyled","ProgressTextStyled","isSummaryPage","ProgressHeading","ProgressImageStyled","ProgressBar","textTransform","ProgressStarAnimStyled","showStarType","ProgressStarAnim","setPlayStarNum","setLeftPos","setShowStarType","animCycleNum","setAnimCycleNum","completeCycleCallback","baseOptions","autoplay","fullStarOptions","FullStar","halfStarOptions","HalfStar","fullStarLottie","halfStarLottie","viewWidth","windowSize","setWindowSize","viewHeight","handleResize","useWindowSize","isXLWindow","isMDWindow","isBreak680window","setNextPos","starNum","animType","goToAndPlay","playNextAnim","starType","destroy","ProgressStar","playStarNum","showAnim","setShowAnim","sx","starStyle","starGold","ProgressStarRating","MAX_ATTEMPTS","ProgressStars","InfoWrapper","StarRating","fit","StarTooltip","isTooltipOpen","setIsTooltipOpen","tooltipRef","useOutsideClick","handler","StarRatings","templateColumns","templateRows","autoFlow","spacingX","spacingY","pointerEvents","hasArrow","placement","arrowSize","arrowPadding","arrowShadowColor","StarRatingContainer","totalMaxStars","ProgressBarAndStarContainer","feedbackByScore","feedbacks","praises","percentage","sort","a","b","Summary","praiseFeedback","summaryNextBtnRef","isLargerThan600","stackDirection","bgByStrength","emojiByStrength","colorByStrength","selectedStatement","setSelectedStatement","array","floor","random","getRandomArrayElement","exceededMaximumAttempts","completedAttempts","some","isFluency","isProblemSolving","borderLeftRadius","borderRightRadius","casing","pointsObj","objectFit","objectPosition","exceededAttemptsFinishScreen","Result","UnitTestSummary","uowTitle","maxAttemptsReach","isMaxScoreReached","finishBtnRef","UnitTestsIntro","MilestoneMessageStyled","shouldShowStripedBorder","feedbackScreen","Footer","MilestoneMessage","milestoneFooterBtnRef","startFluency","setFeedback","setHeader","setHeader2","setMilestoneHeader","setMilestoneDescription","buttonLabel","setButtonLabel","setNextStageLabel","setHasMilestoneSummary","setNumMilestoneQuestions","animateValue","obj","end","startTimestamp","step","timestamp","min","requestAnimationFrame","getNextStageTotalPoints","blur","sectionName","sectionPointInfo","totalCoinsCount","getTotalNumStars","playSegments","classList","studentFeedback","systemInfo","resolution","screen","MessageBoxStyled","hasGuide","isSummaryOrStartScreen","isSummaryScreen","isUnitTestSummaryScreen","MessageBox","isUPT","BgWrap","TransitionBgStyled","bgSrc","SeaGradient","SkyGradient","Clouds","Dots","yellow300","green400","TransitionBg","quesetionSetType","leftBgSrc","setLeftBgSrc","rightBgSrc","setRightBgSrc","rightMountainSrc","setRightMountainSrc","hasClouds","setHasClouds","transitionBgProps","isTestTransitionScreen","diagnosticBackgroundImg","MilestoneTransition","screenType","showConfetti","useConfetti","isTransitionScreens","ConfettiBurst","Confetti","isFluencyFailModalInActive","Nav","loadingData","PreviewCtnr","StageCtnr","NavCtnr","QuestionCtnr","NavButtons","navigate","backward","forward","QuestionHeader","Preview","questionSet","getQuestionSet","setQuestionSet","useQuestionSet","setQuestionNum","useNav","QuestionConsoleStyled","breakPointMinHeight","ProgressMountainStyled","QuestionConsole","setMinHeight","getElementsByClassName","offsetHeight","questionContent","validateSingleVariant","QuestionSet","isCoinsCollected","template","nextQuestion","questionItem","answerContent","hintContent","SingleVariant","variantId","getSingleVariant","variantDetails","setVariantDetails","studentAnswers","validAnswers","answers","useSingleVariant","questionSetTypeToggle","BASE_NAME","appConfig","BaseName","AppRoutes","gtmInitialised","useGoogleAnalytics","category","action","basename","exact","path","component","fonts","normalize","reset","GlobalStyles","baseAppStyle","AppThemeProvider","INITIAL_QUESTION_STATE","isSuccess","notCurrent","randomiseQuestionLists","copiedQuestion","slice","attrs","randomise","j","shuffleArray","rootReducer","combineReducers","strand","uow","nextQuestionWithRandomisedLists","getStudentState","AppReduxProvider","store","configureStore","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","trace","process","compose","enhancer","applyMiddleware","thunk","createStore","AppProviders","resourceSetting","config","setConfiguration","questiconFeatureToggles","getFeatureToggles","EntryApp","renderElement","ConserveParameters","React","constructor","element","dynamicOptions","super","configure","rootNode","createRoot","render","query","getQueryParams","configureForRemoteHost","getCredentials","weHaveUsableCredentials","axios","method","userName","productId","items","toLowerCase","usableCredentials"],"sourceRoot":""}