@cuemath/leap 3.5.46 → 3.5.47-gg10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/line-icons/icons/bulb.js +10 -10
- package/dist/assets/line-icons/icons/bulb.js.map +1 -1
- package/dist/assets/line-icons/icons/chevron-up.js +28 -0
- package/dist/assets/line-icons/icons/chevron-up.js.map +1 -0
- package/dist/assets/line-icons/icons/close.js +28 -0
- package/dist/assets/line-icons/icons/close.js.map +1 -0
- package/dist/assets/line-icons/icons/cursor2.js +24 -0
- package/dist/assets/line-icons/icons/cursor2.js.map +1 -0
- package/dist/assets/line-icons/icons/hand.js.map +1 -1
- package/dist/assets/line-icons/icons/hints.js +25 -0
- package/dist/assets/line-icons/icons/hints.js.map +1 -0
- package/dist/assets/line-icons/icons/question-feedback.js +30 -0
- package/dist/assets/line-icons/icons/question-feedback.js.map +1 -0
- package/dist/assets/line-icons/icons/scribble.js +13 -36
- package/dist/assets/line-icons/icons/scribble.js.map +1 -1
- package/dist/assets/line-icons/icons/sticker.js +9 -9
- package/dist/assets/line-icons/icons/sticker.js.map +1 -1
- package/dist/assets/line-icons/icons/teaching-tools.js +40 -0
- package/dist/assets/line-icons/icons/teaching-tools.js.map +1 -0
- package/dist/assets/line-icons/icons/tval-question.js +32 -0
- package/dist/assets/line-icons/icons/tval-question.js.map +1 -0
- package/dist/features/circle-games/hooks/use-circle-sounds/constants.js +4 -7
- package/dist/features/circle-games/hooks/use-circle-sounds/constants.js.map +1 -1
- package/dist/features/circle-games/hooks/use-circle-sounds/helper.js +19 -0
- package/dist/features/circle-games/hooks/use-circle-sounds/helper.js.map +1 -0
- package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js +110 -51
- package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js.map +1 -1
- package/dist/features/cue-canvas/sidebar/puzzles/api/get-puzzles.js.map +1 -1
- package/dist/features/hooks/use-audio-player.js +54 -0
- package/dist/features/hooks/use-audio-player.js.map +1 -0
- package/dist/features/journey/hooks/use-home-page-journey/home-page-homeworks-mock.js +6 -6
- package/dist/features/journey/hooks/use-home-page-journey/home-page-homeworks-mock.js.map +1 -1
- package/dist/features/journey/hooks/use-home-page-journey/recent-chapters-mock.js +2 -2
- package/dist/features/journey/hooks/use-home-page-journey/recent-chapters-mock.js.map +1 -1
- package/dist/features/journey/mocks/chapter-page-journey-mock-data.js +64 -29
- package/dist/features/journey/mocks/chapter-page-journey-mock-data.js.map +1 -1
- package/dist/features/milestone/milestone-tests/tests-creation/test-stages/test-preview/test-preview.js +9 -9
- package/dist/features/milestone/milestone-tests/tests-creation/test-stages/test-preview/test-preview.js.map +1 -1
- package/dist/features/puzzles/app/puzzle-app-view.js +40 -40
- package/dist/features/puzzles/app/puzzle-app-view.js.map +1 -1
- package/dist/features/ui/tabs/tabs.js +15 -15
- package/dist/features/ui/tabs/tabs.js.map +1 -1
- package/dist/features/worksheet/learnosity-preloader/learnosity-preloader.js +0 -1
- package/dist/features/worksheet/learnosity-preloader/learnosity-preloader.js.map +1 -1
- package/dist/features/worksheet/worksheet/constants.js +12 -13
- package/dist/features/worksheet/worksheet/constants.js.map +1 -1
- package/dist/features/worksheet/worksheet/hooks/use-create-imperative-handle.js +120 -101
- package/dist/features/worksheet/worksheet/hooks/use-create-imperative-handle.js.map +1 -1
- package/dist/features/worksheet/worksheet/hooks/use-worksheet-store.js +1 -1
- package/dist/features/worksheet/worksheet/hooks/use-worksheet-store.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-action-bar/worksheet-action-bar.js +40 -109
- package/dist/features/worksheet/worksheet/worksheet-action-bar/worksheet-action-bar.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-behavior-helper.js +49 -46
- package/dist/features/worksheet/worksheet/worksheet-behavior-helper.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-calculator/worksheet-calculator.js +4 -4
- package/dist/features/worksheet/worksheet/worksheet-calculator/worksheet-calculator.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-helpers.js +127 -274
- package/dist/features/worksheet/worksheet/worksheet-helpers.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-navigation/worksheet-navigation.js +25 -25
- package/dist/features/worksheet/worksheet/worksheet-navigation/worksheet-navigation.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-provider.js +1 -1
- package/dist/features/worksheet/worksheet/worksheet-provider.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-question/subjective-styled.js +17 -22
- package/dist/features/worksheet/worksheet/worksheet-question/subjective-styled.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question-styled.js +25 -29
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question-styled.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question.js +319 -259
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-allow-retry-button-click.js +15 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-allow-retry-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-back-button-click.js +18 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-back-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-check-button-click.js +21 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-check-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-next-button-click.js +19 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-next-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-ready-button-click.js +34 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-ready-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-response-change.js +38 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-response-change.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-retry-button-click.js +16 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-retry-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-skip-button-click.js +35 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-skip-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-skip-section-button-click.js +12 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-skip-section-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-start-button-click.js +44 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-start-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-submit-quiz.js +51 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-submit-quiz.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-validate-button-click.js +19 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-validate-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-play-validation-audio.js +23 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-play-validation-audio.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-validate-question.js +36 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-validate-question.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller-lesson-v3.js +184 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller-lesson-v3.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller-lesson-v3_1.js +258 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller-lesson-v3_1.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller.js +180 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller-lesson-v3.js +77 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller-lesson-v3.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller-lesson-v3_1.js +103 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller-lesson-v3_1.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller.js +21 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller-view.js +22 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller-view.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller.js +20 -345
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/questions-toolbar/questions-toolbar-styled.js +49 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/questions-toolbar/questions-toolbar-styled.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/questions-toolbar/questions-toolbar.js +184 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/questions-toolbar/questions-toolbar.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/scribble-switch.js +65 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/scribble-switch.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/worksheet-questions-styled.js +9 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/worksheet-questions-styled.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/worksheet-questions-tools.js +38 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/worksheet-questions-tools.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-sidebar/navigator.js +33 -20
- package/dist/features/worksheet/worksheet/worksheet-sidebar/navigator.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-computed-properties.js +73 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-computed-properties.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-derived-blocker.js +20 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-derived-blocker.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-last-attemptable-question-index.js +69 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-last-attemptable-question-index.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-last-unlocked-question-index.js +18 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-last-unlocked-question-index.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-merged-response-state.js +19 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-merged-response-state.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-questions-from-items.js +138 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-questions-from-items.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-renderable-questions.js +9 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-renderable-questions.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/worksheet-store.js +230 -0
- package/dist/features/worksheet/worksheet/worksheet-store/worksheet-store.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-styled.js +29 -83
- package/dist/features/worksheet/worksheet/worksheet-styled.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-summary-controller/worksheet-summary-controller.js +45 -24
- package/dist/features/worksheet/worksheet/worksheet-summary-controller/worksheet-summary-controller.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-teaching-tools/worksheet-teaching-tools-styled.js +19 -0
- package/dist/features/worksheet/worksheet/worksheet-teaching-tools/worksheet-teaching-tools-styled.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-teaching-tools/worksheet-teaching-tools.js +66 -0
- package/dist/features/worksheet/worksheet/worksheet-teaching-tools/worksheet-teaching-tools.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-types.js +3 -2
- package/dist/features/worksheet/worksheet/worksheet-types.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-view.js +89 -100
- package/dist/features/worksheet/worksheet/worksheet-view.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet.js +126 -117
- package/dist/features/worksheet/worksheet/worksheet.js.map +1 -1
- package/dist/features/worksheet/worksheet-preview/dynamic-worksheet-preview/dynamic-worksheet-preview.js +29 -29
- package/dist/features/worksheet/worksheet-preview/dynamic-worksheet-preview/dynamic-worksheet-preview.js.map +1 -1
- package/dist/features/worksheet/worksheet-preview/hooks/use-worksheet-layout.js +16 -16
- package/dist/features/worksheet/worksheet-preview/hooks/use-worksheet-layout.js.map +1 -1
- package/dist/features/worksheet/worksheet-preview/worksheet-preview-view.js +24 -24
- package/dist/features/worksheet/worksheet-preview/worksheet-preview-view.js.map +1 -1
- package/dist/index.d.ts +67 -28
- package/dist/index.js +760 -745
- package/dist/index.js.map +1 -1
- package/dist/types/models/worksheet.js +2 -1
- package/dist/types/models/worksheet.js.map +1 -1
- package/package.json +2 -2
- package/dist/features/hooks/use-audio-player/use-audio-player.js +0 -164
- package/dist/features/hooks/use-audio-player/use-audio-player.js.map +0 -1
- package/dist/features/worksheet/worksheet/question-tips.js +0 -100
- package/dist/features/worksheet/worksheet/question-tips.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/scribble-switch.js +0 -53
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/scribble-switch.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/use-handler-callbacks.js +0 -195
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/use-handler-callbacks.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-sidebar/question-guide.js +0 -112
- package/dist/features/worksheet/worksheet/worksheet-sidebar/question-guide.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-sidebar/sidebar.js +0 -61
- package/dist/features/worksheet/worksheet/worksheet-sidebar/sidebar.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-sidebar/worksheet-sidebar-styled.js +0 -91
- package/dist/features/worksheet/worksheet/worksheet-sidebar/worksheet-sidebar-styled.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-store.js +0 -289
- package/dist/features/worksheet/worksheet/worksheet-store.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worksheet-store.js","sources":["../../../../src/features/worksheet/worksheet/worksheet-store.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { createStore } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\n\nimport {\n getInitialQuestionId,\n getInitialResponses,\n getLastAttemptableQuestionIndex,\n getLastUnlockedQuestionIndex,\n getQuestionMetadata,\n getQuestionsFromItems,\n getWorksheetDimensions,\n scrollToQuestion,\n} from './worksheet-helpers';\nimport type {\n IWorksheetQuestion,\n IWorksheetResponse,\n IWorksheetStore,\n IWorksheetStoreState,\n TWorksheetStoreProps,\n} from './worksheet-types';\n\ninterface IGetDerivedBlocker {\n (options: {\n currentBlocker?: IWorksheetStore['blocker'];\n teacherValidationEnabled: IWorksheetStore['behavior']['teacherValidationEnabled'];\n userType: IWorksheetStore['userType'];\n lastUnlockedQuestion: IWorksheetQuestion;\n lastUnlockedQuestionResponse?: IWorksheetResponse;\n }): IWorksheetStore['blocker'] | undefined;\n}\n\nconst getDerivedBlocker: IGetDerivedBlocker = ({\n teacherValidationEnabled,\n userType,\n lastUnlockedQuestion,\n lastUnlockedQuestionResponse,\n}) => {\n if (teacherValidationEnabled) {\n const { item_type, instructor_stimulus, is_optional } = lastUnlockedQuestion;\n\n if (userType === 'TEACHER') {\n if (item_type === 'exit-ticket' && instructor_stimulus !== 'SystemIntro') {\n if (\n lastUnlockedQuestionResponse?.submittedByStudent &&\n !lastUnlockedQuestionResponse?.validatedByTeacher\n ) {\n return 'exit-ticket-review-available';\n }\n\n if (!lastUnlockedQuestionResponse?.validatedByTeacher) {\n return 'exit-ticket-teacher-intervention';\n }\n\n return undefined;\n }\n\n if (is_optional) {\n if (!lastUnlockedQuestionResponse?.assignStatus) {\n return 'optional-items-assignment';\n }\n\n return undefined;\n }\n }\n }\n\n return undefined;\n};\n\ninterface IGetRenderableQuestions {\n (\n options: Pick<IWorksheetStore, 'questions' | 'lastUnlockedQuestionIndex' | 'userType'>,\n ): IWorksheetStore['questions'];\n}\nconst getRenderableQuestions: IGetRenderableQuestions = ({\n userType,\n questions,\n lastUnlockedQuestionIndex,\n}) => {\n return questions.filter((_, index) => {\n const isUnlocked = userType === 'TEACHER' ? true : index <= lastUnlockedQuestionIndex;\n\n if (!isUnlocked) return false;\n\n return true;\n });\n};\n\ninterface IGetComputedProperties {\n (props: TWorksheetStoreProps, store?: IWorksheetStore): IWorksheetStoreState;\n}\nconst getComputedProperties: IGetComputedProperties = (props, store) => {\n const {\n learnosityItems,\n learnosityResponses,\n updatedResponses,\n layout,\n behavior,\n userType,\n initialResponseId,\n initialItemIndex,\n } = props;\n const { navigationMode, teacherValidationEnabled, initialQuestion } = behavior;\n const questions =\n store?.questions ??\n getQuestionsFromItems(learnosityItems, {\n sectioned:\n teacherValidationEnabled && navigationMode !== 'ADAPTIVE' && navigationMode !== 'CURRENT',\n adaptive: navigationMode === 'ADAPTIVE',\n });\n const responses =\n updatedResponses ?? store?.responses ?? learnosityResponses ?? getInitialResponses(questions);\n const lastUnlockedQuestionIndex = getLastUnlockedQuestionIndex({\n questions,\n responses,\n behavior,\n userType,\n });\n const initialQuestionId =\n store?.initialQuestionId ??\n getInitialQuestionId({\n questions,\n initialQuestion,\n lastUnlockedQuestionIndex,\n lastAttemptableQuestionIndex: getLastAttemptableQuestionIndex({\n questions,\n responses,\n behavior,\n userType,\n }),\n initialResponseId,\n initialItemIndex,\n });\n\n const activeQuestionId = store?.activeQuestionId ?? initialQuestionId;\n const activeQuestionIndex = questions.findIndex(\n question => question.response_id === activeQuestionId,\n );\n\n if (!store && questions[activeQuestionIndex] && props.onActiveQuestionChange) {\n props.onActiveQuestionChange(questions[activeQuestionIndex]);\n }\n\n return {\n questions,\n renderableQuestions: getRenderableQuestions({\n questions,\n userType,\n lastUnlockedQuestionIndex,\n }),\n responses,\n lastUnlockedQuestionIndex,\n initialQuestionId,\n activeQuestionId,\n activeQuestionIndex,\n summaryVisible: store ? store.summaryVisible : false,\n calculatorVisible: store ? store.calculatorVisible : false,\n scribblingEnabled: store ? store.scribblingEnabled : false,\n blocker: getDerivedBlocker({\n currentBlocker: store?.blocker,\n teacherValidationEnabled: behavior.teacherValidationEnabled,\n userType,\n lastUnlockedQuestion: questions[lastUnlockedQuestionIndex]!,\n lastUnlockedQuestionResponse:\n responses[questions[lastUnlockedQuestionIndex]?.response_id ?? ''],\n }),\n ...getWorksheetDimensions(learnosityItems, layout),\n };\n};\n\ninterface IGetMergedResponseState {\n (\n state: IWorksheetStore,\n responseId: string,\n newResponse: Partial<IWorksheetResponse>,\n ): IWorksheetStore;\n}\nconst getMergedResponseState: IGetMergedResponseState = (state, responseId, newResponse) => {\n const questionMeta = getQuestionMetadata(state.questions, responseId);\n\n if (!questionMeta) return state;\n\n return {\n ...state,\n responses: {\n ...state.responses,\n [responseId]: {\n ...questionMeta,\n ...state.responses[responseId],\n ...newResponse,\n },\n },\n };\n};\n\n// Store creator function with strict typing\nexport const createWorksheetStore = (initProps: TWorksheetStoreProps) => {\n // Register store instance for memory leak monitoring\n\n // Track active timeouts to enable cleanup\n const activeTimeouts = new Set<NodeJS.Timeout>();\n\n const createManagedTimeout = (callback: () => void, delay: number): NodeJS.Timeout => {\n const timeoutId = setTimeout(() => {\n activeTimeouts.delete(timeoutId);\n callback();\n }, delay);\n\n activeTimeouts.add(timeoutId);\n\n return timeoutId;\n };\n\n const clearAllTimeouts = () => {\n activeTimeouts.forEach(timeoutId => clearTimeout(timeoutId));\n activeTimeouts.clear();\n };\n\n return createStore<IWorksheetStore>()(\n subscribeWithSelector(set => {\n return {\n // Initialize with exact props passed in\n ...initProps,\n ...getComputedProperties(initProps),\n\n // Actions\n mergeWorksheetProps: (data: TWorksheetStoreProps) => {\n set(state => ({\n ...state,\n ...data,\n ...getComputedProperties(data, state),\n }));\n },\n\n setResponses: responses => {\n set(state => {\n const newState = {\n ...state,\n responses: typeof responses === 'function' ? responses(state.responses) : responses,\n };\n const { questions, responses: newResponses, behavior, userType } = newState;\n const lastUnlockedQuestionIndex = getLastUnlockedQuestionIndex({\n questions,\n responses: newResponses,\n behavior,\n userType,\n });\n\n return {\n ...newState,\n lastUnlockedQuestionIndex,\n renderableQuestions: getRenderableQuestions({\n questions,\n lastUnlockedQuestionIndex,\n userType,\n }),\n blocker: getDerivedBlocker({\n currentBlocker: state?.blocker,\n teacherValidationEnabled: behavior.teacherValidationEnabled,\n userType,\n lastUnlockedQuestion: questions[lastUnlockedQuestionIndex]!,\n lastUnlockedQuestionResponse:\n newResponses[questions[lastUnlockedQuestionIndex]?.response_id ?? ''],\n }),\n };\n });\n },\n\n updateResponse: ({ responseId, response, score, answerChecked, timeSpent }) => {\n set(state => {\n const isNewAttempt = !!answerChecked;\n const prevResponse = state.responses[responseId];\n\n const newState = getMergedResponseState(state, responseId, {\n response,\n score,\n responseEdited: !isNewAttempt,\n attemptsHistory: isNewAttempt\n ? [...(prevResponse?.attemptsHistory ?? []), { response, score }]\n : prevResponse?.attemptsHistory,\n skipped: !response,\n timeSpent,\n });\n const { questions, responses, behavior, userType } = newState;\n const lastUnlockedQuestionIndex = getLastUnlockedQuestionIndex({\n questions,\n responses,\n behavior,\n userType,\n });\n const newResponse = responses[responseId];\n\n if (newResponse && state.onResponseChange) {\n state.onResponseChange({\n responseId,\n response: newResponse,\n question: questions.find(q => q.response_id === responseId)!,\n isNewAttempt,\n });\n }\n\n return {\n ...newState,\n lastUnlockedQuestionIndex,\n renderableQuestions: getRenderableQuestions({\n questions,\n userType,\n lastUnlockedQuestionIndex,\n }),\n blocker: getDerivedBlocker({\n currentBlocker: state?.blocker,\n teacherValidationEnabled: behavior.teacherValidationEnabled,\n userType,\n lastUnlockedQuestion: questions[lastUnlockedQuestionIndex]!,\n lastUnlockedQuestionResponse:\n responses[questions[lastUnlockedQuestionIndex]?.response_id ?? ''],\n }),\n };\n });\n },\n\n updateMediaState: (responseId, mediaType, mediaState) => {\n const key = mediaType === 'SIMULATION' ? 'simState' : undefined;\n\n if (!key) return;\n\n set(state => {\n if (state.onResponseChange) {\n const newState = getMergedResponseState(state, responseId, { [key]: mediaState });\n const response = newState?.responses[responseId];\n\n if (response) {\n state.onResponseChange({\n responseId,\n response,\n isNewAttempt: false,\n question: state.questions.find(q => q.response_id === responseId)!,\n });\n }\n\n return newState;\n }\n\n if (state.onMediaStateChange) {\n state.onMediaStateChange(\n state.questions.find(q => q.response_id === responseId)!,\n mediaType,\n mediaState,\n );\n }\n\n return state;\n });\n },\n\n showSummary: () => {\n set(state => ({\n ...state,\n summaryVisible: true,\n }));\n },\n\n hideSummary: () => {\n set(state => ({\n ...state,\n summaryVisible: false,\n }));\n },\n\n toggleSummary: () => {\n set(state => ({\n ...state,\n summaryVisible: !state.summaryVisible,\n }));\n },\n\n showCalculator: () => {\n set(state => ({\n ...state,\n calculatorVisible: true,\n }));\n },\n\n hideCalculator: () => {\n set(state => ({\n ...state,\n calculatorVisible: false,\n }));\n },\n\n toggleScribble: () => {\n set(state => ({\n ...state,\n scribblingEnabled: !state.scribblingEnabled,\n }));\n },\n\n setBlocker: blocker => {\n set(state => ({\n ...state,\n blocker,\n }));\n },\n\n removeBlocker: () => {\n set(state => {\n if (state.blocker) {\n const lastUnlockedQuestionId =\n state.questions[state.lastUnlockedQuestionIndex]?.response_id;\n\n if (lastUnlockedQuestionId) {\n createManagedTimeout(() => {\n scrollToQuestion(lastUnlockedQuestionId);\n }, 50);\n }\n }\n\n return {\n ...state,\n blocker: undefined,\n };\n });\n },\n\n markForReview: (responseId: string, markedForReview: boolean) => {\n set(state => getMergedResponseState(state, responseId, { markedForReview }));\n },\n\n changeQuestion: (questionId, shouldScroll = true, scrollDelay = 0) => {\n set(state => {\n const newState = {\n ...state,\n summaryVisible: false,\n };\n\n if (shouldScroll && state.layout.questionsScrollable) {\n if (scrollDelay > 0) {\n createManagedTimeout(() => {\n scrollToQuestion(questionId);\n }, scrollDelay);\n } else {\n requestAnimationFrame(() => scrollToQuestion(questionId));\n }\n } else if (state.activeQuestionId !== questionId) {\n newState.activeQuestionId = questionId;\n newState.activeQuestionIndex = newState.questions.findIndex(\n question => question.response_id === questionId,\n );\n\n newState.onActiveQuestionChange?.(newState.questions[newState.activeQuestionIndex]!);\n }\n\n return newState;\n });\n },\n\n destroy: () => {\n clearAllTimeouts();\n },\n };\n }),\n );\n};\n\n// Create context with store type\nexport const WorksheetContext = createContext<ReturnType<typeof createWorksheetStore> | null>(null);\n"],"names":["getDerivedBlocker","teacherValidationEnabled","userType","lastUnlockedQuestion","lastUnlockedQuestionResponse","item_type","instructor_stimulus","is_optional","getRenderableQuestions","questions","lastUnlockedQuestionIndex","_","index","getComputedProperties","props","store","learnosityItems","learnosityResponses","updatedResponses","layout","behavior","initialResponseId","initialItemIndex","navigationMode","initialQuestion","getQuestionsFromItems","responses","getInitialResponses","getLastUnlockedQuestionIndex","initialQuestionId","getInitialQuestionId","getLastAttemptableQuestionIndex","activeQuestionId","activeQuestionIndex","question","_a","getWorksheetDimensions","getMergedResponseState","state","responseId","newResponse","questionMeta","getQuestionMetadata","createWorksheetStore","initProps","activeTimeouts","createManagedTimeout","callback","delay","timeoutId","clearAllTimeouts","createStore","subscribeWithSelector","set","data","newState","newResponses","response","score","answerChecked","timeSpent","isNewAttempt","prevResponse","q","mediaType","mediaState","key","blocker","lastUnlockedQuestionId","scrollToQuestion","markedForReview","questionId","shouldScroll","scrollDelay","WorksheetContext","createContext"],"mappings":"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"}
|