@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worksheet-question.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-question/worksheet-question.tsx"],"sourcesContent":["import {\n memo,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type FC,\n} from 'react';\n\nimport { IMAGES } from '../../../../assets/images/images';\nimport CueCanvas from '../../../cue-canvas/cue-canvas';\nimport Pointer from '../../../pointer-sync/pointer';\nimport FlexView from '../../../ui/layout/flex-view';\nimport EVENTS from '../../constants/events';\nimport { LEARNOSITY_KEYBOARD_HEIGHT, QUESTIONS_GAP } from '../constants';\nimport {\n getPaperColorByQuestion,\n isConceptIntroWidget,\n scrollToQuestion,\n} from '../worksheet-helpers';\nimport QuestionHeader from './header/header';\nimport LearnosityQuestion from './learnosity-question';\nimport QuestionBackdrop from './question-backdrop/question-backdrop';\nimport SubjectiveQuestionReview from './subjective-review';\nimport AdvancedPracticeIntro from './system-intros/advanced-practice-intro';\nimport BasicPracticeIntro from './system-intros/basic-practice-intro';\nimport ExitTicketIntro from './system-intros/exit-ticket-intro';\nimport RegularPracticeIntro from './system-intros/regular-practice-intro';\nimport * as Styled from './worksheet-question-styled';\nimport type { IWorksheetQuestionProps } from './worksheet-question-types';\nimport { useWorksheetStore } from '../hooks/use-worksheet-store';\n\nconst WorksheetQuestion: FC<IWorksheetQuestionProps> = memo(function WorksheetQuestion({\n question,\n response,\n nextQuestionId,\n isActive,\n isHidden,\n canRender,\n appended,\n intersectionObserver,\n}) {\n const {\n behavior,\n layout,\n userType,\n responses,\n maxQuestionWidth,\n actionbarHeight,\n worksheetCompleted,\n learnosity,\n onPublishStrokes,\n onReceiveStrokes,\n initialStrokesData,\n onPublishMouseMove,\n onSubscribeMouseMove,\n canResolveDoubt,\n onResolveDoubt,\n userId,\n studentId,\n subjectiveProps,\n loggerRef,\n isScribblingEnabled,\n } = useWorksheetStore(store => ({\n behavior: store.behavior,\n layout: store.layout,\n userType: store.userType,\n responses: store.responses,\n maxQuestionWidth: store.maxQuestionWidth,\n actionbarHeight: store.actionbarHeight,\n worksheetCompleted: store.worksheetCompleted,\n learnosity: store.learnosity,\n onPublishStrokes: store.onPublishStrokes,\n onReceiveStrokes: store.onReceiveStrokes,\n initialStrokesData: store.initialStrokesData,\n onPublishMouseMove: store.onPublishMouseMove,\n onSubscribeMouseMove: store.onSubscribeMouseMove,\n canResolveDoubt: store.canResolveDoubt,\n onResolveDoubt: store.onResolveDoubt,\n userId: store.userId,\n studentId: store.studentId,\n subjectiveProps: store.subjectiveProps,\n loggerRef: store.loggerRef,\n isScribblingEnabled: store.scribblingEnabled,\n }));\n const { background = 'paper' } = layout;\n const paperColor = useMemo(\n () => (background === 'paper' ? getPaperColorByQuestion(question) : undefined),\n [background, question],\n );\n const [questionHeight, setQuestionHeight] = useState<number | undefined>();\n const [canvasHeight, setCanvasHeight] = useState<number | undefined>();\n const {\n validation,\n review,\n maximumAttempts,\n canExceedAttempts,\n teacherValidationEnabled,\n solutionHidden,\n } = behavior;\n const { minQuestionHeight, topOffset, questionsScrollable, renderQuestionHeader, imageHue } =\n layout;\n const {\n type: questionType,\n response_id: responseId,\n stimulus_review,\n item_type,\n instructor_stimulus,\n metadata: { hints: hintsAvailable, solution, widget_reference },\n item_reference,\n question_number,\n item_number,\n item_display_number,\n } = question;\n const isLessonOverview = item_type === 'overview';\n const isConceptIntro = isConceptIntroWidget(instructor_stimulus);\n const isSystemIntro = instructor_stimulus === 'SystemIntro';\n const isIntro = isConceptIntro || isSystemIntro;\n const responseEdited = response?.responseEdited;\n const wrapperClasses = useMemo(() => {\n const classes = [];\n\n if (responseEdited && userType === 'TEACHER') {\n classes.push('attempting');\n }\n\n if (!appended) {\n classes.push('hidden');\n }\n\n if (questionType === 'hotspot') {\n classes.push('correct-answers-hidden');\n }\n\n if (appended && teacherValidationEnabled && questionType === 'clozetext') {\n if (!isConceptIntro || userType === 'STUDENT') {\n classes.push('response-hidden');\n } else {\n classes.push('response-code-hidden');\n }\n }\n\n if (isLessonOverview) {\n classes.push('lesson-overview');\n }\n\n if (isConceptIntro) {\n classes.push('concept-intro');\n }\n\n if (isSystemIntro) {\n classes.push('system-intro');\n }\n\n return classes.join(' ');\n }, [\n appended,\n isConceptIntro,\n isLessonOverview,\n isSystemIntro,\n questionType,\n responseEdited,\n teacherValidationEnabled,\n userType,\n ]);\n const overflowDetectedRef = useRef<Record<string, boolean>>({});\n const hintsUsed = response?.hintsUsed ?? 0;\n const questionRef = useRef<HTMLDivElement>(null);\n const pointerContainerRef = useRef<HTMLDivElement>(null);\n const hints = useMemo(() => hintsAvailable?.slice(0, hintsUsed), [hintsAvailable, hintsUsed]);\n const validateResponse = useMemo(() => {\n if (userType === 'TEACHER') return true;\n\n if (worksheetCompleted) return true;\n\n if (!response) return false;\n\n if (!response.response) return false;\n\n if (response.responseEdited) return false;\n\n return validation;\n }, [response, userType, validation, worksheetCompleted]);\n\n const showCorrectAnswers = useMemo(() => {\n if (userType === 'TEACHER') return true;\n\n if (review) {\n const { attemptsHistory } = response ?? {};\n const maximumAttemptsReached = (attemptsHistory?.length ?? 0) >= maximumAttempts;\n\n return maximumAttemptsReached && !canExceedAttempts;\n }\n\n return false;\n }, [canExceedAttempts, maximumAttempts, response, review, userType]);\n\n const showSolution = useMemo(\n () => solution && worksheetCompleted && !solutionHidden,\n [solutionHidden, solution, worksheetCompleted],\n );\n\n const [dropZoneDimensions, setDropZoneDimensions] = useState({\n width: 0,\n height: 0,\n });\n\n const onUpdateHeight = useCallback((height: number) => {\n setCanvasHeight(height);\n }, []);\n\n useEffect(() => {\n if (questionRef.current) {\n intersectionObserver.observe(questionRef.current);\n }\n }, [intersectionObserver]);\n\n useEffect(() => {\n if (\n appended &&\n (question.type === 'clozeassociation' ||\n question.type === 'association' ||\n question.type === 'clozeformula')\n ) {\n const draggableElements = document.querySelectorAll(\n `.widget-${question.response_id} .lrn_draggable`,\n );\n\n let minWidth = 0;\n let minHeight = 0;\n\n draggableElements.forEach(draggableElement => {\n minWidth = Math.max(minWidth, draggableElement.clientWidth + 33);\n minHeight = Math.max(minHeight, draggableElement.clientHeight + 1);\n });\n\n setDropZoneDimensions({\n width: question.type !== 'association' ? minWidth : 0,\n height: minHeight,\n });\n }\n }, [appended, question.response_id, question.type]);\n\n useEffect(() => {\n if (appended && validateResponse) {\n const learnosityQuestion = learnosity.question(responseId);\n\n if (learnosityQuestion) {\n learnosityQuestion.validate({\n showCorrectAnswers,\n });\n }\n }\n }, [appended, learnosity, responseId, review, showCorrectAnswers, userType, validateResponse]);\n\n useEffect(() => {\n const $questionEl = pointerContainerRef.current;\n\n if (\n appended &&\n $questionEl &&\n loggerRef.current &&\n overflowDetectedRef.current[responseId] === undefined &&\n !isConceptIntro &&\n !isSystemIntro\n ) {\n const parentWidth = $questionEl.clientWidth;\n const nestedElements = $questionEl.querySelectorAll('*');\n\n for (let i = 0; i < nestedElements.length; i++) {\n const element = nestedElements[i];\n\n if (element?.closest('.resize-sensor')) {\n continue;\n }\n\n const elementWidth = element?.clientWidth ?? 0;\n\n if (elementWidth > parentWidth) {\n overflowDetectedRef.current[responseId] = true;\n loggerRef.current(EVENTS.WORKSHEET_V3_GREATER_WIDTH_ELEMENT, {\n item_reference,\n widget_reference,\n question_type: questionType,\n question_number,\n responseId,\n item_number,\n item_display_number,\n });\n break;\n }\n }\n\n overflowDetectedRef.current[responseId] = false;\n }\n }, [\n appended,\n isConceptIntro,\n isSystemIntro,\n item_display_number,\n item_number,\n item_reference,\n loggerRef,\n questionType,\n question_number,\n responseId,\n widget_reference,\n ]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n const $questionEl = questionRef.current;\n\n const getExtraSpaceNeedForFloatingKeyboard = (questionEl: HTMLDivElement) => {\n const $responseWrapper = questionEl.querySelector('.lrn_response_wrapper');\n\n if (isIntro || !$responseWrapper) {\n return 0;\n }\n\n const questionBottom = questionEl.getBoundingClientRect().bottom;\n const responseWrapperBottom = $responseWrapper.getBoundingClientRect().bottom;\n const spaceFromResponseToBottom = Math.abs(questionBottom - responseWrapperBottom);\n\n if (spaceFromResponseToBottom < LEARNOSITY_KEYBOARD_HEIGHT) {\n return LEARNOSITY_KEYBOARD_HEIGHT - spaceFromResponseToBottom;\n }\n\n return 0;\n };\n\n if (appended && $questionEl) {\n setQuestionHeight(qHeight => {\n const hasFloatingKeyboard = question.ui_style?.type === 'floating-keyboard';\n const v3CodeHidden = teacherValidationEnabled && questionType === 'clozetext';\n const hasKeyboard = hasFloatingKeyboard && !v3CodeHidden;\n const height = $questionEl.clientHeight;\n\n if (height === 0) {\n return qHeight;\n }\n\n // If the question has a floating keyboard, we need to add the height of the keyboard to the question height\n if (!qHeight) {\n return Math.ceil(\n height + (hasKeyboard ? getExtraSpaceNeedForFloatingKeyboard($questionEl) : 0),\n );\n }\n\n const newQuestionHeight = Math.ceil(\n height + (hasKeyboard ? getExtraSpaceNeedForFloatingKeyboard($questionEl) : 0),\n );\n\n if (Math.abs(newQuestionHeight - qHeight) > 4) {\n return newQuestionHeight;\n }\n\n return qHeight;\n });\n }\n\n learnosity.renderMath('mathjax');\n });\n\n useLayoutEffect(() => {\n if (!questionsScrollable && !isHidden) {\n scrollToQuestion(responseId);\n }\n }, [isHidden, questionsScrollable, responseId, topOffset]);\n\n return (\n <Styled.QuestionContainerWrapper\n data-response-id={responseId}\n className={`widget-${responseId}`}\n ref={questionRef}\n $topOffset={topOffset}\n $flexDirection={stimulus_review ? 'row' : 'column'}\n $alignItems={stimulus_review ? 'flex-start' : 'center'}\n $hidden={isHidden}\n $marginBottom={QUESTIONS_GAP}\n >\n {stimulus_review && (\n <Styled.StimulusReview\n dangerouslySetInnerHTML={{\n __html: stimulus_review,\n }}\n />\n )}\n <Styled.QuestionContainer\n ref={pointerContainerRef}\n $width={stimulus_review ? '50%' : `${maxQuestionWidth}px`}\n $minHeight={\n questionHeight ? Math.max(questionHeight - 72, canvasHeight ?? 0) : minQuestionHeight\n }\n $isActive={isActive}\n $paperColor={paperColor}\n $opacity={isActive ? 1 : 0.2}\n $imageHue={imageHue}\n >\n {isActive && !!onPublishMouseMove && !!onSubscribeMouseMove && !!behavior.canvasEnabled && (\n <Pointer\n containerRef={pointerContainerRef}\n onPublish={onPublishMouseMove}\n onSubscribe={onSubscribeMouseMove}\n responseId={responseId}\n />\n )}\n <Styled.QuestionWrapper\n className={wrapperClasses}\n $dropzoneMinWidth={dropZoneDimensions.width}\n $dropzoneMinHeight={dropZoneDimensions.height}\n >\n {renderQuestionHeader && !(isLessonOverview || isConceptIntro || isSystemIntro) && (\n <QuestionHeader\n question={question}\n response={response}\n behavior={behavior}\n paperColor={paperColor}\n actionbarHeight={actionbarHeight}\n canResolveDoubt={canResolveDoubt}\n onResolveDoubt={onResolveDoubt}\n worksheetCompleted={worksheetCompleted}\n />\n )}\n {isLessonOverview && <Styled.LessonOverviewBanner src={IMAGES.LESSON_OVERVIEW_BANNER} />}\n {isConceptIntro && paperColor && <QuestionBackdrop paperColor={paperColor} />}\n {isSystemIntro ? (\n <>\n {item_type === 'practice-basic' && <BasicPracticeIntro />}\n {item_type === 'practice-regular' && <RegularPracticeIntro />}\n {item_type === 'exit-ticket' && <ExitTicketIntro />}\n {item_type?.startsWith('advanced-') && <AdvancedPracticeIntro />}\n </>\n ) : undefined}\n <LearnosityQuestion\n appended={appended}\n question={question}\n response={response?.response}\n canRender={canRender || isActive}\n learnosity={learnosity}\n canForceAppend={userType === 'TEACHER'}\n isConceptIntro={isConceptIntro}\n simState={response?.simState}\n imageHue={imageHue}\n isPuzzle={maximumAttempts === -2}\n />\n\n {!isIntro &&\n !!behavior.canvasEnabled &&\n onPublishStrokes &&\n onReceiveStrokes &&\n questionHeight !== undefined && (\n <Styled.CueCanvasWrapper $canScribble={isScribblingEnabled}>\n <CueCanvas\n canRender={canRender}\n canScribble={isScribblingEnabled && isActive}\n appended={appended}\n canvasId={responseId}\n width={maxQuestionWidth}\n height={Math.max(questionHeight, canvasHeight ?? 0)}\n onUpdateHeight={onUpdateHeight}\n onPublish={onPublishStrokes}\n onSubscribe={onReceiveStrokes}\n userId={userId}\n initialData={initialStrokesData?.[responseId]}\n userType={userType}\n />\n </Styled.CueCanvasWrapper>\n )}\n {!isIntro && hints && hints.length > 0 && (\n <FlexView\n $background=\"BLUE_1\"\n $gutterX={1}\n $gapX={0.5}\n $borderRadiusX={0}\n $borderColor=\"BLUE_2\"\n >\n {hints.map((hint, index) => (\n <Styled.Hint\n key={hint}\n dangerouslySetInnerHTML={{\n __html: `<span style=\"color: #DA5107; font-weight: 600;\">Hint${\n (hintsAvailable?.length ?? 0) > 1 ? ` ${index + 1}` : ''\n }:</span> ${hint}`,\n }}\n />\n ))}\n </FlexView>\n )}\n {showSolution && (\n <FlexView\n $background=\"YELLOW_1\"\n $gutterX={1}\n $gapX={0.875}\n $borderRadiusX={0}\n $borderColor=\"YELLOW_2\"\n >\n <Styled.Solution\n dangerouslySetInnerHTML={{\n __html: `<div style=\"color: #DA5107; font-weight: 600;\">Solution:</div>${solution}`,\n }}\n />\n </FlexView>\n )}\n {!!subjectiveProps && (\n <SubjectiveQuestionReview\n responses={responses}\n response={response}\n nextQuestionId={nextQuestionId}\n responseId={responseId}\n studentId={studentId}\n {...subjectiveProps}\n />\n )}\n </Styled.QuestionWrapper>\n </Styled.QuestionContainer>\n </Styled.QuestionContainerWrapper>\n );\n});\n\nexport default WorksheetQuestion;\n"],"names":["WorksheetQuestion","memo","question","response","nextQuestionId","isActive","isHidden","canRender","appended","intersectionObserver","behavior","layout","userType","responses","maxQuestionWidth","actionbarHeight","worksheetCompleted","learnosity","onPublishStrokes","onReceiveStrokes","initialStrokesData","onPublishMouseMove","onSubscribeMouseMove","canResolveDoubt","onResolveDoubt","userId","studentId","subjectiveProps","loggerRef","isScribblingEnabled","useWorksheetStore","store","background","paperColor","useMemo","getPaperColorByQuestion","questionHeight","setQuestionHeight","useState","canvasHeight","setCanvasHeight","validation","review","maximumAttempts","canExceedAttempts","teacherValidationEnabled","solutionHidden","minQuestionHeight","topOffset","questionsScrollable","renderQuestionHeader","imageHue","questionType","responseId","stimulus_review","item_type","instructor_stimulus","hintsAvailable","solution","widget_reference","item_reference","question_number","item_number","item_display_number","isLessonOverview","isConceptIntro","isConceptIntroWidget","isSystemIntro","isIntro","responseEdited","wrapperClasses","classes","overflowDetectedRef","useRef","hintsUsed","questionRef","pointerContainerRef","hints","validateResponse","showCorrectAnswers","attemptsHistory","showSolution","dropZoneDimensions","setDropZoneDimensions","onUpdateHeight","useCallback","height","useEffect","draggableElements","minWidth","minHeight","draggableElement","learnosityQuestion","$questionEl","parentWidth","nestedElements","i","element","EVENTS","getExtraSpaceNeedForFloatingKeyboard","questionEl","$responseWrapper","questionBottom","responseWrapperBottom","spaceFromResponseToBottom","LEARNOSITY_KEYBOARD_HEIGHT","qHeight","hasKeyboard","_a","newQuestionHeight","useLayoutEffect","scrollToQuestion","jsxs","Styled.QuestionContainerWrapper","QUESTIONS_GAP","jsx","Styled.StimulusReview","Styled.QuestionContainer","Pointer","Styled.QuestionWrapper","QuestionHeader","Styled.LessonOverviewBanner","IMAGES","QuestionBackdrop","Fragment","BasicPracticeIntro","RegularPracticeIntro","ExitTicketIntro","AdvancedPracticeIntro","LearnosityQuestion","Styled.CueCanvasWrapper","CueCanvas","FlexView","hint","index","Styled.Hint","Styled.Solution","SubjectiveQuestionReview"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worksheet-question.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-question/worksheet-question.tsx"],"sourcesContent":["import {\n memo,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type FC,\n} from 'react';\n\nimport { IMAGES } from '../../../../assets/images/images';\nimport CueCanvas from '../../../cue-canvas/cue-canvas';\nimport Pointer from '../../../pointer-sync/pointer';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Text from '../../../ui/text/text';\nimport EVENTS from '../../constants/events';\nimport { LEARNOSITY_KEYBOARD_HEIGHT, QUESTIONS_GAP } from '../constants';\nimport { useWorksheetStore } from '../hooks/use-worksheet-store';\nimport {\n getPaperColorByQuestion,\n isConceptIntroWidget,\n scrollToQuestion,\n} from '../worksheet-helpers';\nimport QuestionHeader from './header/header';\nimport LearnosityQuestion from './learnosity-question';\nimport QuestionBackdrop from './question-backdrop/question-backdrop';\nimport SubjectiveQuestionReview from './subjective-review';\nimport AdvancedPracticeIntro from './system-intros/advanced-practice-intro';\nimport BasicPracticeIntro from './system-intros/basic-practice-intro';\nimport ExitTicketIntro from './system-intros/exit-ticket-intro';\nimport RegularPracticeIntro from './system-intros/regular-practice-intro';\nimport * as Styled from './worksheet-question-styled';\nimport type { IWorksheetQuestionProps } from './worksheet-question-types';\n\nconst WorksheetQuestion: FC<IWorksheetQuestionProps> = memo(function WorksheetQuestion({\n question,\n response,\n nextQuestionId,\n isActive,\n isHidden,\n canRender,\n appended,\n intersectionObserver,\n}) {\n const {\n behavior,\n layout,\n userType,\n responses,\n maxQuestionWidth,\n actionbarHeight,\n worksheetCompleted,\n learnosity,\n onPublishStrokes,\n onReceiveStrokes,\n initialStrokesData,\n onPublishMouseMove,\n onSubscribeMouseMove,\n canResolveDoubt,\n onResolveDoubt,\n userId,\n studentId,\n subjectiveProps,\n loggerRef,\n isScribblingEnabled,\n inClass,\n setDiscussionQuestionOffset,\n } = useWorksheetStore(store => ({\n behavior: store.behavior,\n layout: store.layout,\n userType: store.userType,\n responses: store.responses,\n maxQuestionWidth: store.maxQuestionWidth,\n actionbarHeight: store.actionbarHeight,\n worksheetCompleted: store.worksheetCompleted,\n learnosity: store.learnosity,\n onPublishStrokes: store.onPublishStrokes,\n onReceiveStrokes: store.onReceiveStrokes,\n initialStrokesData: store.initialStrokesData,\n onPublishMouseMove: store.onPublishMouseMove,\n onSubscribeMouseMove: store.onSubscribeMouseMove,\n canResolveDoubt: store.canResolveDoubt,\n onResolveDoubt: store.onResolveDoubt,\n userId: store.userId,\n studentId: store.studentId,\n subjectiveProps: store.subjectiveProps,\n loggerRef: store.loggerRef,\n isScribblingEnabled: store.scribblingEnabled,\n inClass: store.inClass,\n setDiscussionQuestionOffset: store.setDiscussionQuestionOffset,\n }));\n const { background = 'paper' } = layout;\n const paperColor = useMemo(\n () => (background === 'paper' ? getPaperColorByQuestion(question) : undefined),\n [background, question],\n );\n const [questionHeight, setQuestionHeight] = useState<number | undefined>();\n const [canvasHeight, setCanvasHeight] = useState<number | undefined>();\n const {\n validation,\n review,\n maximumAttempts,\n canExceedAttempts,\n teacherValidationEnabled,\n teacherDiscussionEnabled,\n } = behavior;\n const { minQuestionHeight, topOffset, questionsScrollable, renderQuestionHeader, imageHue } =\n layout;\n const {\n type: questionType,\n response_id: responseId,\n stimulus_review,\n item_type,\n instructor_stimulus,\n concept_intro_stimulus,\n metadata: { hints: hintsAvailable, widget_reference, acknowledgements },\n item_reference,\n question_number,\n item_number,\n item_display_number,\n } = question;\n const isLessonOverview = item_type === 'overview';\n const isConceptIntro = isConceptIntroWidget(instructor_stimulus);\n const isSystemIntro = instructor_stimulus === 'SystemIntro';\n const isIntro = isConceptIntro || isSystemIntro;\n const responseEdited = response?.responseEdited;\n const showDiscussionQuestion =\n teacherDiscussionEnabled &&\n !!inClass &&\n !!acknowledgements &&\n response?.responseEdited !== true &&\n response?.score &&\n response.score?.score === response.score?.max_score;\n const discussionQuestionOffset = response?.discussionQuestionOffset;\n const wrapperClasses = useMemo(() => {\n const classes = [];\n\n if (responseEdited && userType === 'TEACHER') {\n classes.push('attempting');\n }\n\n if (!appended) {\n classes.push('hidden');\n }\n\n if (questionType === 'hotspot') {\n classes.push('correct-answers-hidden');\n }\n\n if (appended && teacherValidationEnabled && questionType === 'clozetext') {\n if (!isConceptIntro || userType === 'STUDENT') {\n classes.push('response-hidden');\n } else {\n classes.push('response-code-hidden');\n }\n }\n\n if (isLessonOverview) {\n classes.push('lesson-overview');\n }\n\n if (isConceptIntro) {\n classes.push('concept-intro');\n }\n\n if (isSystemIntro) {\n classes.push('system-intro');\n }\n\n return classes.join(' ');\n }, [\n appended,\n isConceptIntro,\n isLessonOverview,\n isSystemIntro,\n questionType,\n responseEdited,\n teacherValidationEnabled,\n userType,\n ]);\n const overflowDetectedRef = useRef<Record<string, boolean>>({});\n const hintsUsed = response?.hintsUsed ?? 0;\n const questionRef = useRef<HTMLDivElement>(null);\n const questionContentRef = useRef<HTMLDivElement>(null);\n const pointerContainerRef = useRef<HTMLDivElement>(null);\n const hints = useMemo(() => hintsAvailable?.slice(0, hintsUsed), [hintsAvailable, hintsUsed]);\n const validateResponse = useMemo(() => {\n if (userType === 'TEACHER') return true;\n\n if (worksheetCompleted) return true;\n\n if (!response) return false;\n\n if (!response.response) return false;\n\n if (response.responseEdited) return false;\n\n return validation;\n }, [response, userType, validation, worksheetCompleted]);\n\n const showCorrectAnswers = useMemo(() => {\n if (userType === 'TEACHER') return true;\n\n if (review) {\n const { attemptsHistory } = response ?? {};\n const maximumAttemptsReached = (attemptsHistory?.length ?? 0) >= maximumAttempts;\n\n return maximumAttemptsReached && !canExceedAttempts;\n }\n\n return false;\n }, [canExceedAttempts, maximumAttempts, response, review, userType]);\n\n const [dropZoneDimensions, setDropZoneDimensions] = useState({\n width: 0,\n height: 0,\n });\n\n const onUpdateHeight = useCallback((height: number) => {\n setCanvasHeight(height);\n }, []);\n\n useEffect(() => {\n if (questionRef.current) {\n intersectionObserver.observe(questionRef.current);\n }\n }, [intersectionObserver]);\n\n useEffect(() => {\n if (\n appended &&\n (question.type === 'clozeassociation' ||\n question.type === 'association' ||\n question.type === 'clozeformula')\n ) {\n const draggableElements = document.querySelectorAll(\n `.widget-${question.response_id} .lrn_draggable`,\n );\n\n let minWidth = 0;\n let minHeight = 0;\n\n draggableElements.forEach(draggableElement => {\n minWidth = Math.max(minWidth, draggableElement.clientWidth + 33);\n minHeight = Math.max(minHeight, draggableElement.clientHeight + 1);\n });\n\n setDropZoneDimensions({\n width: question.type !== 'association' ? minWidth : 0,\n height: minHeight,\n });\n }\n }, [appended, question.response_id, question.type]);\n\n useEffect(() => {\n if (appended && validateResponse) {\n const learnosityQuestion = learnosity.question(responseId);\n\n if (learnosityQuestion) {\n learnosityQuestion.validate({\n showCorrectAnswers,\n });\n }\n }\n }, [appended, learnosity, responseId, review, showCorrectAnswers, userType, validateResponse]);\n\n useEffect(() => {\n const $questionEl = pointerContainerRef.current;\n\n if (\n appended &&\n $questionEl &&\n loggerRef.current &&\n overflowDetectedRef.current[responseId] === undefined &&\n !isConceptIntro &&\n !isSystemIntro\n ) {\n const parentWidth = $questionEl.clientWidth;\n const nestedElements = $questionEl.querySelectorAll('*');\n\n for (let i = 0; i < nestedElements.length; i++) {\n const element = nestedElements[i];\n\n if (element?.closest('.resize-sensor')) {\n continue;\n }\n\n const elementWidth = element?.clientWidth ?? 0;\n\n if (elementWidth > parentWidth) {\n overflowDetectedRef.current[responseId] = true;\n loggerRef.current(EVENTS.WORKSHEET_V3_GREATER_WIDTH_ELEMENT, {\n item_reference,\n widget_reference,\n question_type: questionType,\n question_number,\n responseId,\n item_number,\n item_display_number,\n });\n break;\n }\n }\n\n overflowDetectedRef.current[responseId] = false;\n }\n }, [\n appended,\n isConceptIntro,\n isSystemIntro,\n item_display_number,\n item_number,\n item_reference,\n loggerRef,\n questionType,\n question_number,\n responseId,\n widget_reference,\n ]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n const $questionEl = questionRef.current;\n\n const getExtraSpaceNeedForFloatingKeyboard = (questionEl: HTMLDivElement) => {\n const $responseWrapper = questionEl.querySelector('.lrn_response_wrapper');\n\n if (isIntro || !$responseWrapper) {\n return 0;\n }\n\n const questionBottom = questionEl.getBoundingClientRect().bottom;\n const responseWrapperBottom = $responseWrapper.getBoundingClientRect().bottom;\n const spaceFromResponseToBottom = Math.abs(questionBottom - responseWrapperBottom);\n\n if (spaceFromResponseToBottom < LEARNOSITY_KEYBOARD_HEIGHT) {\n return LEARNOSITY_KEYBOARD_HEIGHT - spaceFromResponseToBottom;\n }\n\n return 0;\n };\n\n if (appended && $questionEl) {\n setQuestionHeight(qHeight => {\n const hasFloatingKeyboard = question.ui_style?.type === 'floating-keyboard';\n const v3CodeHidden = teacherValidationEnabled && questionType === 'clozetext';\n const hasKeyboard = hasFloatingKeyboard && !v3CodeHidden;\n const height = $questionEl.clientHeight;\n\n if (height === 0) {\n return qHeight;\n }\n\n // If the question has a floating keyboard, we need to add the height of the keyboard to the question height\n if (!qHeight) {\n return Math.ceil(\n height + (hasKeyboard ? getExtraSpaceNeedForFloatingKeyboard($questionEl) : 0),\n );\n }\n\n const newQuestionHeight = Math.ceil(\n height + (hasKeyboard ? getExtraSpaceNeedForFloatingKeyboard($questionEl) : 0),\n );\n\n if (Math.abs(newQuestionHeight - qHeight) > 4) {\n return newQuestionHeight;\n }\n\n return qHeight;\n });\n }\n\n learnosity.renderMath('mathjax');\n });\n\n useEffect(() => {\n if (\n userType === 'STUDENT' &&\n showDiscussionQuestion &&\n questionContentRef.current &&\n pointerContainerRef.current &&\n !discussionQuestionOffset &&\n questionHeight\n ) {\n const parentRect = pointerContainerRef.current.getBoundingClientRect();\n const childRect = questionContentRef.current.getBoundingClientRect();\n\n setDiscussionQuestionOffset(\n responseId,\n questionHeight - (childRect.y - parentRect.y + childRect.height),\n );\n }\n }, [\n questionHeight,\n showDiscussionQuestion,\n question,\n userType,\n discussionQuestionOffset,\n responseId,\n setDiscussionQuestionOffset,\n ]);\n\n useLayoutEffect(() => {\n if (!questionsScrollable && !isHidden) {\n scrollToQuestion(responseId);\n }\n }, [isHidden, questionsScrollable, responseId, topOffset]);\n\n return (\n <Styled.QuestionContainerWrapper\n data-response-id={responseId}\n className={`widget-${responseId}`}\n ref={questionRef}\n $topOffset={topOffset}\n $flexDirection={stimulus_review ? 'row' : 'column'}\n $alignItems={stimulus_review ? 'flex-start' : 'center'}\n $hidden={isHidden}\n $marginBottom={QUESTIONS_GAP}\n >\n {stimulus_review && (\n <Styled.StimulusReview\n dangerouslySetInnerHTML={{\n __html: stimulus_review,\n }}\n />\n )}\n <Styled.QuestionContainer\n ref={pointerContainerRef}\n $width={stimulus_review ? '50%' : `${maxQuestionWidth}px`}\n $minHeight={\n questionHeight ? Math.max(questionHeight, canvasHeight ?? 0) : minQuestionHeight\n }\n $isActive={isActive}\n $paperColor={paperColor}\n $opacity={isActive ? 1 : 0.2}\n $imageHue={imageHue}\n >\n {isActive && !!onPublishMouseMove && !!onSubscribeMouseMove && !!behavior.canvasEnabled && (\n <Pointer\n containerRef={pointerContainerRef}\n onPublish={onPublishMouseMove}\n onSubscribe={onSubscribeMouseMove}\n responseId={responseId}\n />\n )}\n <Styled.QuestionWrapper\n className={wrapperClasses}\n $dropzoneMinWidth={dropZoneDimensions.width}\n $dropzoneMinHeight={dropZoneDimensions.height}\n >\n {concept_intro_stimulus && (\n <FlexView\n style={{\n borderRadius: '8px 8px 0 0',\n }}\n $gutterX={2.5}\n $gapX={1.5}\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $background=\"BLUE_3\"\n >\n <Text\n $renderAs=\"ab2-bold\"\n dangerouslySetInnerHTML={{\n __html: concept_intro_stimulus,\n }}\n />\n </FlexView>\n )}\n {renderQuestionHeader && !(isLessonOverview || isConceptIntro || isSystemIntro) && (\n <QuestionHeader\n question={question}\n response={response}\n behavior={behavior}\n paperColor={paperColor}\n actionbarHeight={actionbarHeight}\n canResolveDoubt={canResolveDoubt}\n onResolveDoubt={onResolveDoubt}\n worksheetCompleted={worksheetCompleted}\n />\n )}\n {isLessonOverview && <Styled.LessonOverviewBanner src={IMAGES.LESSON_OVERVIEW_BANNER} />}\n {isConceptIntro && paperColor && <QuestionBackdrop paperColor={paperColor} />}\n {isSystemIntro ? (\n <>\n {(item_type === 'practice' || item_type === 'practice-basic') && (\n <BasicPracticeIntro />\n )}\n {item_type === 'practice-regular' && <RegularPracticeIntro />}\n {item_type === 'exit-ticket' && <ExitTicketIntro />}\n {item_type?.startsWith('advanced-') && <AdvancedPracticeIntro />}\n </>\n ) : undefined}\n <FlexView\n ref={questionContentRef}\n style={{\n padding: '15px 15px 55px 15px',\n }}\n >\n <LearnosityQuestion\n appended={appended}\n question={question}\n response={response?.response}\n canRender={canRender || isActive}\n learnosity={learnosity}\n canForceAppend={userType === 'TEACHER'}\n isConceptIntro={isConceptIntro}\n simState={response?.simState}\n imageHue={imageHue}\n isPuzzle={maximumAttempts === -2}\n />\n {!isIntro && hints && hints.length > 0 && (\n <FlexView\n $background=\"BLUE_1\"\n $gutterX={1}\n $gapX={0.5}\n $borderRadiusX={0}\n $borderColor=\"BLUE_2\"\n >\n {hints.map((hint, index) => (\n <Styled.Hint\n key={hint}\n dangerouslySetInnerHTML={{\n __html: `<span style=\"color: #DA5107; font-weight: 600;\">Hint${\n (hintsAvailable?.length ?? 0) > 1 ? ` ${index + 1}` : ''\n }:</span> ${hint}`,\n }}\n />\n ))}\n </FlexView>\n )}\n {!!subjectiveProps && (\n <SubjectiveQuestionReview\n responses={responses}\n response={response}\n nextQuestionId={nextQuestionId}\n responseId={responseId}\n studentId={studentId}\n {...subjectiveProps}\n />\n )}\n </FlexView>\n {showDiscussionQuestion &&\n question.metadata.acknowledgements &&\n discussionQuestionOffset && (\n <FlexView\n $background=\"BLUE_3\"\n $gapX={1.5}\n $gutterX={1}\n style={{\n marginTop: discussionQuestionOffset ?? 0,\n paddingBottom: 55,\n flexGrow: 2,\n borderRadius: '0 0 8px 8px',\n }}\n >\n <Text $renderAs=\"ac3-black\" $marginBottomX={1}>\n Discuss with Tutor\n </Text>\n <Styled.Hint\n dangerouslySetInnerHTML={{\n __html: question.metadata.acknowledgements,\n }}\n />\n </FlexView>\n )}\n\n {!isIntro &&\n !!behavior.canvasEnabled &&\n onPublishStrokes &&\n onReceiveStrokes &&\n questionHeight !== undefined && (\n <Styled.CueCanvasWrapper $canScribble={isScribblingEnabled}>\n <CueCanvas\n canRender={canRender}\n canScribble={isScribblingEnabled && isActive}\n appended={appended}\n canvasId={responseId}\n width={maxQuestionWidth}\n height={Math.max(questionHeight, canvasHeight ?? 0)}\n onUpdateHeight={onUpdateHeight}\n onPublish={onPublishStrokes}\n onSubscribe={onReceiveStrokes}\n userId={userId}\n initialData={initialStrokesData?.[responseId]}\n userType={userType}\n />\n </Styled.CueCanvasWrapper>\n )}\n </Styled.QuestionWrapper>\n </Styled.QuestionContainer>\n </Styled.QuestionContainerWrapper>\n );\n});\n\nexport default WorksheetQuestion;\n"],"names":["WorksheetQuestion","memo","question","response","nextQuestionId","isActive","isHidden","canRender","appended","intersectionObserver","behavior","layout","userType","responses","maxQuestionWidth","actionbarHeight","worksheetCompleted","learnosity","onPublishStrokes","onReceiveStrokes","initialStrokesData","onPublishMouseMove","onSubscribeMouseMove","canResolveDoubt","onResolveDoubt","userId","studentId","subjectiveProps","loggerRef","isScribblingEnabled","inClass","setDiscussionQuestionOffset","useWorksheetStore","store","background","paperColor","useMemo","getPaperColorByQuestion","questionHeight","setQuestionHeight","useState","canvasHeight","setCanvasHeight","validation","review","maximumAttempts","canExceedAttempts","teacherValidationEnabled","teacherDiscussionEnabled","minQuestionHeight","topOffset","questionsScrollable","renderQuestionHeader","imageHue","questionType","responseId","stimulus_review","item_type","instructor_stimulus","concept_intro_stimulus","hintsAvailable","widget_reference","acknowledgements","item_reference","question_number","item_number","item_display_number","isLessonOverview","isConceptIntro","isConceptIntroWidget","isSystemIntro","isIntro","responseEdited","showDiscussionQuestion","_a","_b","discussionQuestionOffset","wrapperClasses","classes","overflowDetectedRef","useRef","hintsUsed","questionRef","questionContentRef","pointerContainerRef","hints","validateResponse","showCorrectAnswers","attemptsHistory","dropZoneDimensions","setDropZoneDimensions","onUpdateHeight","useCallback","height","useEffect","draggableElements","minWidth","minHeight","draggableElement","learnosityQuestion","$questionEl","parentWidth","nestedElements","i","element","EVENTS","getExtraSpaceNeedForFloatingKeyboard","questionEl","$responseWrapper","questionBottom","responseWrapperBottom","spaceFromResponseToBottom","LEARNOSITY_KEYBOARD_HEIGHT","qHeight","hasKeyboard","newQuestionHeight","parentRect","childRect","useLayoutEffect","scrollToQuestion","jsxs","Styled.QuestionContainerWrapper","QUESTIONS_GAP","jsx","Styled.StimulusReview","Styled.QuestionContainer","Pointer","Styled.QuestionWrapper","FlexView","Text","QuestionHeader","Styled.LessonOverviewBanner","IMAGES","QuestionBackdrop","Fragment","BasicPracticeIntro","RegularPracticeIntro","ExitTicketIntro","AdvancedPracticeIntro","LearnosityQuestion","hint","index","Styled.Hint","SubjectiveQuestionReview","Styled.CueCanvasWrapper","CueCanvas"],"mappings":";;;;;;;;;;;;;;;;;;;;AAmCM,MAAAA,KAAiDC,GAAK,SAA2B;AAAA,EACrF,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,sBAAAC;AACF,GAAG;;AACK,QAAA;AAAA,IACJ,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,QAAAC;AAAA,IACA,WAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,6BAAAC;AAAA,EAAA,IACEC,GAAkB,CAAUC,OAAA;AAAA,IAC9B,UAAUA,EAAM;AAAA,IAChB,QAAQA,EAAM;AAAA,IACd,UAAUA,EAAM;AAAA,IAChB,WAAWA,EAAM;AAAA,IACjB,kBAAkBA,EAAM;AAAA,IACxB,iBAAiBA,EAAM;AAAA,IACvB,oBAAoBA,EAAM;AAAA,IAC1B,YAAYA,EAAM;AAAA,IAClB,kBAAkBA,EAAM;AAAA,IACxB,kBAAkBA,EAAM;AAAA,IACxB,oBAAoBA,EAAM;AAAA,IAC1B,oBAAoBA,EAAM;AAAA,IAC1B,sBAAsBA,EAAM;AAAA,IAC5B,iBAAiBA,EAAM;AAAA,IACvB,gBAAgBA,EAAM;AAAA,IACtB,QAAQA,EAAM;AAAA,IACd,WAAWA,EAAM;AAAA,IACjB,iBAAiBA,EAAM;AAAA,IACvB,WAAWA,EAAM;AAAA,IACjB,qBAAqBA,EAAM;AAAA,IAC3B,SAASA,EAAM;AAAA,IACf,6BAA6BA,EAAM;AAAA,EACnC,EAAA,GACI,EAAE,YAAAC,KAAa,QAAY,IAAAvB,GAC3BwB,IAAaC;AAAA,IACjB,MAAOF,OAAe,UAAUG,GAAwBnC,CAAQ,IAAI;AAAA,IACpE,CAACgC,IAAYhC,CAAQ;AAAA,EAAA,GAEjB,CAACoC,GAAgBC,EAAiB,IAAIC,EAA6B,GACnE,CAACC,IAAcC,EAAe,IAAIF,EAA6B,GAC/D;AAAA,IACJ,YAAAG;AAAA,IACA,QAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,0BAAAC;AAAA,EACE,IAAAtC,GACE,EAAE,mBAAAuC,IAAmB,WAAAC,IAAW,qBAAAC,IAAqB,sBAAAC,IAAsB,UAAAC,GAC/E,IAAA1C,GACI;AAAA,IACJ,MAAM2C;AAAA,IACN,aAAaC;AAAA,IACb,iBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,wBAAAC;AAAA,IACA,UAAU,EAAE,OAAOC,GAAgB,kBAAAC,IAAkB,kBAAAC,GAAiB;AAAA,IACtE,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,qBAAAC;AAAA,EACE,IAAAhE,GACEiE,IAAmBV,MAAc,YACjCW,IAAiBC,GAAqBX,EAAmB,GACzDY,IAAgBZ,OAAwB,eACxCa,IAAUH,KAAkBE,GAC5BE,KAAiBrE,KAAA,gBAAAA,EAAU,gBAC3BsE,IACJzB,MACA,CAAC,CAAClB,MACF,CAAC,CAACgC,OACF3D,KAAA,gBAAAA,EAAU,oBAAmB,OAC7BA,KAAA,gBAAAA,EAAU,YACVuE,KAAAvE,EAAS,UAAT,gBAAAuE,GAAgB,aAAUC,KAAAxE,EAAS,UAAT,gBAAAwE,GAAgB,YACtCC,IAA2BzE,KAAA,gBAAAA,EAAU,0BACrC0E,KAAiBzC,EAAQ,MAAM;AACnC,UAAM0C,IAAU,CAAA;AAEZ,WAAAN,MAAkB5D,MAAa,aACjCkE,EAAQ,KAAK,YAAY,GAGtBtE,KACHsE,EAAQ,KAAK,QAAQ,GAGnBxB,MAAiB,aACnBwB,EAAQ,KAAK,wBAAwB,GAGnCtE,KAAYuC,KAA4BO,MAAiB,gBACvD,CAACc,KAAkBxD,MAAa,YAClCkE,EAAQ,KAAK,iBAAiB,IAE9BA,EAAQ,KAAK,sBAAsB,IAInCX,KACFW,EAAQ,KAAK,iBAAiB,GAG5BV,KACFU,EAAQ,KAAK,eAAe,GAG1BR,KACFQ,EAAQ,KAAK,cAAc,GAGtBA,EAAQ,KAAK,GAAG;AAAA,EAAA,GACtB;AAAA,IACDtE;AAAA,IACA4D;AAAA,IACAD;AAAA,IACAG;AAAA,IACAhB;AAAA,IACAkB;AAAA,IACAzB;AAAA,IACAnC;AAAA,EAAA,CACD,GACKmE,IAAsBC,EAAgC,CAAA,CAAE,GACxDC,MAAY9E,KAAA,gBAAAA,EAAU,cAAa,GACnC+E,IAAcF,EAAuB,IAAI,GACzCG,IAAqBH,EAAuB,IAAI,GAChDI,IAAsBJ,EAAuB,IAAI,GACjDK,IAAQjD,EAAQ,MAAMwB,KAAA,gBAAAA,EAAgB,MAAM,GAAGqB,KAAY,CAACrB,GAAgBqB,EAAS,CAAC,GACtFK,KAAmBlD,EAAQ,MAC3BxB,MAAa,aAEbI,IAA2B,KAE3B,CAACb,KAED,CAACA,EAAS,YAEVA,EAAS,iBAAuB,KAE7BwC,IACN,CAACxC,GAAUS,GAAU+B,IAAY3B,CAAkB,CAAC,GAEjDuE,KAAqBnD,EAAQ,MAAM;AACnC,QAAAxB,MAAa,UAAkB,QAAA;AAEnC,QAAIgC,GAAQ;AACV,YAAM,EAAE,iBAAA4C,EAAA,IAAoBrF,KAAY;AAGxC,eAFgCqF,KAAA,gBAAAA,EAAiB,WAAU,MAAM3C,KAEhC,CAACC;AAAA,IACpC;AAEO,WAAA;AAAA,EAAA,GACN,CAACA,IAAmBD,GAAiB1C,GAAUyC,GAAQhC,CAAQ,CAAC,GAE7D,CAAC6E,IAAoBC,EAAqB,IAAIlD,EAAS;AAAA,IAC3D,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA,CACT,GAEKmD,KAAiBC,GAAY,CAACC,MAAmB;AACrD,IAAAnD,GAAgBmD,CAAM;AAAA,EACxB,GAAG,CAAE,CAAA;AAEL,SAAAC,EAAU,MAAM;AACd,IAAIZ,EAAY,WACOzE,EAAA,QAAQyE,EAAY,OAAO;AAAA,EAClD,GACC,CAACzE,CAAoB,CAAC,GAEzBqF,EAAU,MAAM;AAEZ,QAAAtF,MACCN,EAAS,SAAS,sBACjBA,EAAS,SAAS,iBAClBA,EAAS,SAAS,iBACpB;AACA,YAAM6F,IAAoB,SAAS;AAAA,QACjC,WAAW7F,EAAS,WAAW;AAAA,MAAA;AAGjC,UAAI8F,IAAW,GACXC,IAAY;AAEhB,MAAAF,EAAkB,QAAQ,CAAoBG,MAAA;AAC5C,QAAAF,IAAW,KAAK,IAAIA,GAAUE,EAAiB,cAAc,EAAE,GAC/DD,IAAY,KAAK,IAAIA,GAAWC,EAAiB,eAAe,CAAC;AAAA,MAAA,CAClE,GAEqBR,GAAA;AAAA,QACpB,OAAOxF,EAAS,SAAS,gBAAgB8F,IAAW;AAAA,QACpD,QAAQC;AAAA,MAAA,CACT;AAAA,IACH;AAAA,EAAA,GACC,CAACzF,GAAUN,EAAS,aAAaA,EAAS,IAAI,CAAC,GAElD4F,EAAU,MAAM;AACd,QAAItF,KAAY8E,IAAkB;AAC1B,YAAAa,IAAqBlF,EAAW,SAASsC,CAAU;AAEzD,MAAI4C,KACFA,EAAmB,SAAS;AAAA,QAC1B,oBAAAZ;AAAA,MAAA,CACD;AAAA,IAEL;AAAA,EAAA,GACC,CAAC/E,GAAUS,GAAYsC,GAAYX,GAAQ2C,IAAoB3E,GAAU0E,EAAgB,CAAC,GAE7FQ,EAAU,MAAM;AACd,UAAMM,IAAchB,EAAoB;AAExC,QACE5E,KACA4F,KACAxE,EAAU,WACVmD,EAAoB,QAAQxB,CAAU,MAAM,UAC5C,CAACa,KACD,CAACE,GACD;AACA,YAAM+B,IAAcD,EAAY,aAC1BE,IAAiBF,EAAY,iBAAiB,GAAG;AAEvD,eAASG,IAAI,GAAGA,IAAID,EAAe,QAAQC,KAAK;AACxC,cAAAC,IAAUF,EAAeC,CAAC;AAE5B,YAAAC,KAAA,QAAAA,EAAS,QAAQ;AACnB;AAKF,cAFqBA,KAAA,gBAAAA,EAAS,gBAAe,KAE1BH,GAAa;AACV,UAAAtB,EAAA,QAAQxB,CAAU,IAAI,IAChC3B,EAAA,QAAQ6E,GAAO,oCAAoC;AAAA,YAC3D,gBAAA1C;AAAA,YACA,kBAAAF;AAAA,YACA,eAAeP;AAAA,YACf,iBAAAU;AAAA,YACA,YAAAT;AAAA,YACA,aAAAU;AAAA,YACA,qBAAAC;AAAA,UAAA,CACD;AACD;AAAA,QACF;AAAA,MACF;AAEoB,MAAAa,EAAA,QAAQxB,CAAU,IAAI;AAAA,IAC5C;AAAA,EAAA,GACC;AAAA,IACD/C;AAAA,IACA4D;AAAA,IACAE;AAAA,IACAJ;AAAA,IACAD;AAAA,IACAF;AAAA,IACAnC;AAAA,IACA0B;AAAA,IACAU;AAAA,IACAT;AAAA,IACAM;AAAA,EAAA,CACD,GAGDiC,EAAU,MAAM;AACd,UAAMM,IAAclB,EAAY,SAE1BwB,IAAuC,CAACC,MAA+B;AACrE,YAAAC,IAAmBD,EAAW,cAAc,uBAAuB;AAErE,UAAApC,KAAW,CAACqC;AACP,eAAA;AAGH,YAAAC,IAAiBF,EAAW,sBAAA,EAAwB,QACpDG,IAAwBF,EAAiB,sBAAA,EAAwB,QACjEG,IAA4B,KAAK,IAAIF,IAAiBC,CAAqB;AAEjF,aAAIC,IAA4BC,KACvBA,KAA6BD,IAG/B;AAAA,IAAA;AAGT,IAAIvG,KAAY4F,KACd7D,GAAkB,CAAW0E,MAAA;;AAGrB,YAAAC,MAFsBxC,KAAAxE,EAAS,aAAT,gBAAAwE,GAAmB,UAAS,uBAEb,EADtB3B,KAA4BO,MAAiB,cAE5DuC,IAASO,EAAY;AAE3B,UAAIP,MAAW;AACN,eAAAoB;AAIT,UAAI,CAACA;AACH,eAAO,KAAK;AAAA,UACVpB,KAAUqB,IAAcR,EAAqCN,CAAW,IAAI;AAAA,QAAA;AAIhF,YAAMe,KAAoB,KAAK;AAAA,QAC7BtB,KAAUqB,IAAcR,EAAqCN,CAAW,IAAI;AAAA,MAAA;AAG9E,aAAI,KAAK,IAAIe,KAAoBF,CAAO,IAAI,IACnCE,KAGFF;AAAA,IAAA,CACR,GAGHhG,EAAW,WAAW,SAAS;AAAA,EAAA,CAChC,GAED6E,EAAU,MAAM;AAEZ,QAAAlF,MAAa,aACb6D,KACAU,EAAmB,WACnBC,EAAoB,WACpB,CAACR,KACDtC,GACA;AACM,YAAA8E,IAAahC,EAAoB,QAAQ,sBAAsB,GAC/DiC,IAAYlC,EAAmB,QAAQ,sBAAsB;AAEnE,MAAApD;AAAA,QACEwB;AAAA,QACAjB,KAAkB+E,EAAU,IAAID,EAAW,IAAIC,EAAU;AAAA,MAAA;AAAA,IAE7D;AAAA,EAAA,GACC;AAAA,IACD/E;AAAA,IACAmC;AAAA,IACAvE;AAAA,IACAU;AAAA,IACAgE;AAAA,IACArB;AAAA,IACAxB;AAAA,EAAA,CACD,GAEDuF,GAAgB,MAAM;AAChB,IAAA,CAACnE,MAAuB,CAAC7C,KAC3BiH,GAAiBhE,CAAU;AAAA,KAE5B,CAACjD,GAAU6C,IAAqBI,GAAYL,EAAS,CAAC,GAGvD,gBAAAsE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,oBAAkBlE;AAAA,MAClB,WAAW,UAAUA,CAAU;AAAA,MAC/B,KAAK2B;AAAA,MACL,YAAYhC;AAAA,MACZ,gBAAgBM,IAAkB,QAAQ;AAAA,MAC1C,aAAaA,IAAkB,eAAe;AAAA,MAC9C,SAASlD;AAAA,MACT,eAAeoH;AAAA,MAEd,UAAA;AAAA,QACClE,KAAA,gBAAAmE;AAAA,UAACC;AAAAA,UAAA;AAAA,YACC,yBAAyB;AAAA,cACvB,QAAQpE;AAAA,YACV;AAAA,UAAA;AAAA,QACF;AAAA,QAEF,gBAAAgE;AAAA,UAACK;AAAAA,UAAA;AAAA,YACC,KAAKzC;AAAA,YACL,QAAQ5B,IAAkB,QAAQ,GAAG1C,CAAgB;AAAA,YACrD,YACEwB,IAAiB,KAAK,IAAIA,GAAgBG,MAAgB,CAAC,IAAIQ;AAAA,YAEjE,WAAW5C;AAAA,YACX,aAAa8B;AAAA,YACb,UAAU9B,IAAW,IAAI;AAAA,YACzB,WAAWgD;AAAA,YAEV,UAAA;AAAA,cAAYhD,KAAA,CAAC,CAACgB,KAAsB,CAAC,CAACC,KAAwB,CAAC,CAACZ,EAAS,iBACxE,gBAAAiH;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,cAAc1C;AAAA,kBACd,WAAW/D;AAAA,kBACX,aAAaC;AAAA,kBACb,YAAAiC;AAAA,gBAAA;AAAA,cACF;AAAA,cAEF,gBAAAiE;AAAA,gBAACO;AAAAA,gBAAA;AAAA,kBACC,WAAWlD;AAAA,kBACX,mBAAmBY,GAAmB;AAAA,kBACtC,oBAAoBA,GAAmB;AAAA,kBAEtC,UAAA;AAAA,oBACC9B,MAAA,gBAAAgE;AAAA,sBAACK;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,cAAc;AAAA,wBAChB;AAAA,wBACA,UAAU;AAAA,wBACV,OAAO;AAAA,wBACP,iBAAgB;AAAA,wBAChB,aAAY;AAAA,wBACZ,aAAY;AAAA,wBAEZ,UAAA,gBAAAL;AAAA,0BAACM;AAAA,0BAAA;AAAA,4BACC,WAAU;AAAA,4BACV,yBAAyB;AAAA,8BACvB,QAAQtE;AAAA,4BACV;AAAA,0BAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,oBACF;AAAA,oBAEDP,MAAwB,EAAEe,KAAoBC,KAAkBE,MAC/D,gBAAAqD;AAAA,sBAACO;AAAA,sBAAA;AAAA,wBACC,UAAAhI;AAAA,wBACA,UAAAC;AAAA,wBACA,UAAAO;AAAA,wBACA,YAAAyB;AAAA,wBACA,iBAAApB;AAAA,wBACA,iBAAAQ;AAAA,wBACA,gBAAAC;AAAA,wBACA,oBAAAR;AAAA,sBAAA;AAAA,oBACF;AAAA,oBAEDmD,KAAqB,gBAAAwD,EAAAQ,IAAA,EAA4B,KAAKC,GAAO,wBAAwB;AAAA,oBACrFhE,KAAkBjC,KAAe,gBAAAwF,EAAAU,IAAA,EAAiB,YAAAlG,EAAwB,CAAA;AAAA,oBAC1EmC,IAEK,gBAAAkD,EAAAc,IAAA,EAAA,UAAA;AAAA,uBAAA7E,MAAc,cAAcA,MAAc,qBAC1C,gBAAAkE,EAACY,IAAmB,EAAA;AAAA,sBAErB9E,MAAc,sBAAsB,gBAAAkE,EAACa,IAAqB,CAAA,CAAA;AAAA,sBAC1D/E,MAAc,iBAAiB,gBAAAkE,EAACc,IAAgB,CAAA,CAAA;AAAA,uBAChDhF,KAAA,gBAAAA,EAAW,WAAW,mCAAiBiF,IAAsB,CAAA,CAAA;AAAA,oBAAA,EAChE,CAAA,IACE;AAAA,oBACJ,gBAAAlB;AAAA,sBAACQ;AAAA,sBAAA;AAAA,wBACC,KAAK7C;AAAA,wBACL,OAAO;AAAA,0BACL,SAAS;AAAA,wBACX;AAAA,wBAEA,UAAA;AAAA,0BAAA,gBAAAwC;AAAA,4BAACgB;AAAA,4BAAA;AAAA,8BACC,UAAAnI;AAAA,8BACA,UAAAN;AAAA,8BACA,UAAUC,KAAA,gBAAAA,EAAU;AAAA,8BACpB,WAAWI,KAAaF;AAAA,8BACxB,YAAAY;AAAA,8BACA,gBAAgBL,MAAa;AAAA,8BAC7B,gBAAAwD;AAAA,8BACA,UAAUjE,KAAA,gBAAAA,EAAU;AAAA,8BACpB,UAAAkD;AAAA,8BACA,UAAUR,MAAoB;AAAA,4BAAA;AAAA,0BAChC;AAAA,0BACC,CAAC0B,KAAWc,KAASA,EAAM,SAAS,KACnC,gBAAAsC;AAAA,4BAACK;AAAA,4BAAA;AAAA,8BACC,aAAY;AAAA,8BACZ,UAAU;AAAA,8BACV,OAAO;AAAA,8BACP,gBAAgB;AAAA,8BAChB,cAAa;AAAA,8BAEZ,UAAM3C,EAAA,IAAI,CAACuD,GAAMC,MAChB,gBAAAlB;AAAA,gCAACmB;AAAAA,gCAAA;AAAA,kCAEC,yBAAyB;AAAA,oCACvB,QAAQ,yDACLlF,KAAA,gBAAAA,EAAgB,WAAU,KAAK,IAAI,IAAIiF,IAAQ,CAAC,KAAK,EACxD,iBAAiBD,CAAI;AAAA,kCACvB;AAAA,gCAAA;AAAA,gCALKA;AAAA,8BAAA,CAOR;AAAA,4BAAA;AAAA,0BACH;AAAA,0BAED,CAAC,CAACjH,MACD,gBAAAgG;AAAA,4BAACoB;AAAA,4BAAA;AAAA,8BACC,WAAAlI;AAAA,8BACA,UAAAV;AAAA,8BACA,gBAAAC;AAAA,8BACA,YAAAmD;AAAA,8BACA,WAAA7B;AAAA,8BACC,GAAGC;AAAA,4BAAA;AAAA,0BACN;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAEJ;AAAA,oBACC8C,KACCvE,EAAS,SAAS,oBAClB0E,KACE,gBAAA4C;AAAA,sBAACQ;AAAA,sBAAA;AAAA,wBACC,aAAY;AAAA,wBACZ,OAAO;AAAA,wBACP,UAAU;AAAA,wBACV,OAAO;AAAA,0BACL,WAAWpD,KAA4B;AAAA,0BACvC,eAAe;AAAA,0BACf,UAAU;AAAA,0BACV,cAAc;AAAA,wBAChB;AAAA,wBAEA,UAAA;AAAA,0BAAA,gBAAA+C,EAACM,IAAK,EAAA,WAAU,aAAY,gBAAgB,GAAG,UAE/C,sBAAA;AAAA,0BACA,gBAAAN;AAAA,4BAACmB;AAAAA,4BAAA;AAAA,8BACC,yBAAyB;AAAA,gCACvB,QAAQ5I,EAAS,SAAS;AAAA,8BAC5B;AAAA,4BAAA;AAAA,0BACF;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACF;AAAA,oBAGH,CAACqE,KACA,CAAC,CAAC7D,EAAS,iBACXQ,KACAC,KACAmB,MAAmB,UAChB,gBAAAqF,EAAAqB,IAAA,EAAwB,cAAcnH,IACrC,UAAA,gBAAA8F;AAAA,sBAACsB;AAAA,sBAAA;AAAA,wBACC,WAAA1I;AAAA,wBACA,aAAasB,MAAuBxB;AAAA,wBACpC,UAAAG;AAAA,wBACA,UAAU+C;AAAA,wBACV,OAAOzC;AAAA,wBACP,QAAQ,KAAK,IAAIwB,GAAgBG,MAAgB,CAAC;AAAA,wBAClD,gBAAAkD;AAAA,wBACA,WAAWzE;AAAA,wBACX,aAAaC;AAAA,wBACb,QAAAM;AAAA,wBACA,aAAaL,KAAA,gBAAAA,EAAqBmC;AAAA,wBAClC,UAAA3C;AAAA,sBAAA;AAAA,oBAAA,GAEJ;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAEN;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useCallback as l } from "react";
|
|
2
|
+
import { useWorksheetStore as n } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
const a = () => {
|
|
4
|
+
const { activeQuestionId: e, onAllowRetry: t } = n((o) => ({
|
|
5
|
+
activeQuestionId: o.activeQuestionId,
|
|
6
|
+
onAllowRetry: o.onAllowRetry
|
|
7
|
+
}));
|
|
8
|
+
return l(() => {
|
|
9
|
+
t == null || t(e);
|
|
10
|
+
}, [t, e]);
|
|
11
|
+
};
|
|
12
|
+
export {
|
|
13
|
+
a as default
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=use-handle-allow-retry-button-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-allow-retry-button-click.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-allow-retry-button-click.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\n\nconst useHandleAllowRetryButtonClick = () => {\n const { activeQuestionId, onAllowRetry } = useWorksheetStore(store => ({\n activeQuestionId: store.activeQuestionId,\n onAllowRetry: store.onAllowRetry,\n }));\n\n const handleAllowRetryButtonClick = useCallback(() => {\n onAllowRetry?.(activeQuestionId);\n }, [onAllowRetry, activeQuestionId]);\n\n return handleAllowRetryButtonClick;\n};\n\nexport default useHandleAllowRetryButtonClick;\n"],"names":["useHandleAllowRetryButtonClick","activeQuestionId","onAllowRetry","useWorksheetStore","store","useCallback"],"mappings":";;AAIA,MAAMA,IAAiC,MAAM;AAC3C,QAAM,EAAE,kBAAAC,GAAkB,cAAAC,EAAa,IAAIC,EAAkB,CAAUC,OAAA;AAAA,IACrE,kBAAkBA,EAAM;AAAA,IACxB,cAAcA,EAAM;AAAA,EACpB,EAAA;AAMK,SAJ6BC,EAAY,MAAM;AACpD,IAAAH,KAAA,QAAAA,EAAeD;AAAA,EAAgB,GAC9B,CAACC,GAAcD,CAAgB,CAAC;AAGrC;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useCallback as i } from "react";
|
|
2
|
+
import { useWorksheetStore as u } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
const l = () => {
|
|
4
|
+
const { questions: n, questionIndex: t, changeQuestion: o } = u((e) => ({
|
|
5
|
+
questions: e.questions,
|
|
6
|
+
questionIndex: e.activeQuestionIndex,
|
|
7
|
+
changeQuestion: e.changeQuestion
|
|
8
|
+
}));
|
|
9
|
+
return i(() => {
|
|
10
|
+
var s;
|
|
11
|
+
const e = (s = n[t - 1]) == null ? void 0 : s.response_id;
|
|
12
|
+
e && o(e);
|
|
13
|
+
}, [o, t, n]);
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
l as default
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=use-handle-back-button-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-back-button-click.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-back-button-click.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\n\nconst useHandleBackButtonClick = () => {\n const { questions, questionIndex, changeQuestion } = useWorksheetStore(store => ({\n questions: store.questions,\n questionIndex: store.activeQuestionIndex,\n changeQuestion: store.changeQuestion,\n }));\n\n const handleBackButtonClick = useCallback(() => {\n const questionId = questions[questionIndex - 1]?.response_id;\n\n if (questionId) {\n changeQuestion(questionId);\n }\n }, [changeQuestion, questionIndex, questions]);\n\n return handleBackButtonClick;\n};\n\nexport default useHandleBackButtonClick;\n"],"names":["useHandleBackButtonClick","questions","questionIndex","changeQuestion","useWorksheetStore","store","useCallback","questionId","_a"],"mappings":";;AAIA,MAAMA,IAA2B,MAAM;AACrC,QAAM,EAAE,WAAAC,GAAW,eAAAC,GAAe,gBAAAC,EAAe,IAAIC,EAAkB,CAAUC,OAAA;AAAA,IAC/E,WAAWA,EAAM;AAAA,IACjB,eAAeA,EAAM;AAAA,IACrB,gBAAgBA,EAAM;AAAA,EACtB,EAAA;AAUK,SARuBC,EAAY,MAAM;;AAC9C,UAAMC,KAAaC,IAAAP,EAAUC,IAAgB,CAAC,MAA3B,gBAAAM,EAA8B;AAEjD,IAAID,KACFJ,EAAeI,CAAU;AAAA,EAE1B,GAAA,CAACJ,GAAgBD,GAAeD,CAAS,CAAC;AAG/C;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useCallback as s } from "react";
|
|
2
|
+
import { useWorksheetStore as i } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
const l = ({ handleValidate: e }) => {
|
|
4
|
+
const { learnosity: o, activeQuestionId: n } = i((t) => ({
|
|
5
|
+
learnosity: t.learnosity,
|
|
6
|
+
activeQuestionId: t.activeQuestionId
|
|
7
|
+
}));
|
|
8
|
+
return s(() => {
|
|
9
|
+
const t = o.question(n);
|
|
10
|
+
t && (t.disable(), t.validate(
|
|
11
|
+
{
|
|
12
|
+
feedbackAttempts: !0
|
|
13
|
+
},
|
|
14
|
+
e
|
|
15
|
+
));
|
|
16
|
+
}, [e, o, n]);
|
|
17
|
+
};
|
|
18
|
+
export {
|
|
19
|
+
l as default
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=use-handle-check-button-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-check-button-click.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-check-button-click.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\n\ninterface IUseHandleCheckButtonClick {\n (options: { handleValidate: () => void }): () => void;\n}\n\nconst useHandleCheckButtonClick: IUseHandleCheckButtonClick = ({ handleValidate }) => {\n const { learnosity, activeQuestionId } = useWorksheetStore(store => ({\n learnosity: store.learnosity,\n activeQuestionId: store.activeQuestionId,\n }));\n\n const handleCheckButtonClick = useCallback(() => {\n const questionInstance = learnosity.question(activeQuestionId);\n\n if (questionInstance) {\n questionInstance.disable();\n questionInstance.validate(\n {\n feedbackAttempts: true,\n },\n handleValidate,\n );\n }\n }, [handleValidate, learnosity, activeQuestionId]);\n\n return handleCheckButtonClick;\n};\n\nexport default useHandleCheckButtonClick;\n"],"names":["useHandleCheckButtonClick","handleValidate","learnosity","activeQuestionId","useWorksheetStore","store","useCallback","questionInstance"],"mappings":";;AAQA,MAAMA,IAAwD,CAAC,EAAE,gBAAAC,QAAqB;AACpF,QAAM,EAAE,YAAAC,GAAY,kBAAAC,EAAiB,IAAIC,EAAkB,CAAUC,OAAA;AAAA,IACnE,YAAYA,EAAM;AAAA,IAClB,kBAAkBA,EAAM;AAAA,EACxB,EAAA;AAgBK,SAdwBC,EAAY,MAAM;AACzC,UAAAC,IAAmBL,EAAW,SAASC,CAAgB;AAE7D,IAAII,MACFA,EAAiB,QAAQ,GACRA,EAAA;AAAA,MACf;AAAA,QACE,kBAAkB;AAAA,MACpB;AAAA,MACAN;AAAA,IAAA;AAAA,EAGH,GAAA,CAACA,GAAgBC,GAAYC,CAAgB,CAAC;AAGnD;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useCallback as i } from "react";
|
|
2
|
+
import { useWorksheetStore as a } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
const r = () => {
|
|
4
|
+
const { questions: n, questionIndex: t, changeQuestion: o, showSummary: s } = a((e) => ({
|
|
5
|
+
questions: e.questions,
|
|
6
|
+
questionIndex: e.activeQuestionIndex,
|
|
7
|
+
changeQuestion: e.changeQuestion,
|
|
8
|
+
showSummary: e.showSummary
|
|
9
|
+
}));
|
|
10
|
+
return i(() => {
|
|
11
|
+
var u;
|
|
12
|
+
const e = (u = n[t + 1]) == null ? void 0 : u.response_id;
|
|
13
|
+
e ? o(e) : s();
|
|
14
|
+
}, [o, t, n, s]);
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
r as default
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=use-handle-next-button-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-next-button-click.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-next-button-click.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\n\nconst useHandleNextButtonClick = () => {\n const { questions, questionIndex, changeQuestion, showSummary } = useWorksheetStore(store => ({\n questions: store.questions,\n questionIndex: store.activeQuestionIndex,\n changeQuestion: store.changeQuestion,\n showSummary: store.showSummary,\n }));\n\n const handleNextButtonClick = useCallback(() => {\n const nextQuestionId = questions[questionIndex + 1]?.response_id;\n\n if (nextQuestionId) {\n changeQuestion(nextQuestionId);\n } else {\n showSummary();\n }\n }, [changeQuestion, questionIndex, questions, showSummary]);\n\n return handleNextButtonClick;\n};\n\nexport default useHandleNextButtonClick;\n"],"names":["useHandleNextButtonClick","questions","questionIndex","changeQuestion","showSummary","useWorksheetStore","store","useCallback","nextQuestionId","_a"],"mappings":";;AAIA,MAAMA,IAA2B,MAAM;AACrC,QAAM,EAAE,WAAAC,GAAW,eAAAC,GAAe,gBAAAC,GAAgB,aAAAC,MAAgBC,EAAkB,CAAUC,OAAA;AAAA,IAC5F,WAAWA,EAAM;AAAA,IACjB,eAAeA,EAAM;AAAA,IACrB,gBAAgBA,EAAM;AAAA,IACtB,aAAaA,EAAM;AAAA,EACnB,EAAA;AAYK,SAVuBC,EAAY,MAAM;;AAC9C,UAAMC,KAAiBC,IAAAR,EAAUC,IAAgB,CAAC,MAA3B,gBAAAO,EAA8B;AAErD,IAAID,IACFL,EAAeK,CAAc,IAEjBJ;KAEb,CAACD,GAAgBD,GAAeD,GAAWG,CAAW,CAAC;AAG5D;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useCallback as d } from "react";
|
|
2
|
+
import { useWorksheetStore as c } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
import { getQuestionMetadata as r } from "../../worksheet-helpers.js";
|
|
4
|
+
const B = () => {
|
|
5
|
+
const { questions: n, activeQuestionId: t, setResponses: o, setBlocker: i, onResponseChange: s } = c((e) => ({
|
|
6
|
+
questions: e.questions,
|
|
7
|
+
activeQuestionId: e.activeQuestionId,
|
|
8
|
+
setResponses: e.setResponses,
|
|
9
|
+
setBlocker: e.setBlocker,
|
|
10
|
+
onResponseChange: e.onResponseChange
|
|
11
|
+
}));
|
|
12
|
+
return d(() => {
|
|
13
|
+
o((e) => {
|
|
14
|
+
const u = {
|
|
15
|
+
...r(n, t),
|
|
16
|
+
...e[t],
|
|
17
|
+
submittedByStudent: !0
|
|
18
|
+
};
|
|
19
|
+
return s == null || s({
|
|
20
|
+
responseId: t,
|
|
21
|
+
response: u,
|
|
22
|
+
question: n.find((a) => a.response_id === t),
|
|
23
|
+
isNewAttempt: !1
|
|
24
|
+
}), {
|
|
25
|
+
...e,
|
|
26
|
+
[t]: u
|
|
27
|
+
};
|
|
28
|
+
}), i("exit-ticket-student-submission");
|
|
29
|
+
}, [s, n, t, i, o]);
|
|
30
|
+
};
|
|
31
|
+
export {
|
|
32
|
+
B as default
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=use-handle-ready-button-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-ready-button-click.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-ready-button-click.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\nimport { getQuestionMetadata } from '../../worksheet-helpers';\nimport type { IWorksheetResponse } from '../../worksheet-types';\n\nconst useHandleReadyButtonClick = () => {\n const { questions, activeQuestionId, setResponses, setBlocker, onResponseChange } =\n useWorksheetStore(store => ({\n questions: store.questions,\n activeQuestionId: store.activeQuestionId,\n setResponses: store.setResponses,\n setBlocker: store.setBlocker,\n onResponseChange: store.onResponseChange,\n }));\n\n const handleReadyButtonClick = useCallback(() => {\n setResponses((prevResponses: Record<string, IWorksheetResponse>) => {\n const newResponse: IWorksheetResponse = {\n ...getQuestionMetadata(questions, activeQuestionId),\n ...prevResponses[activeQuestionId],\n submittedByStudent: true,\n };\n\n onResponseChange?.({\n responseId: activeQuestionId,\n response: newResponse,\n question: questions.find(q => q.response_id === activeQuestionId)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [activeQuestionId]: newResponse,\n };\n });\n setBlocker('exit-ticket-student-submission');\n }, [onResponseChange, questions, activeQuestionId, setBlocker, setResponses]);\n\n return handleReadyButtonClick;\n};\n\nexport default useHandleReadyButtonClick;\n"],"names":["useHandleReadyButtonClick","questions","activeQuestionId","setResponses","setBlocker","onResponseChange","useWorksheetStore","store","useCallback","prevResponses","newResponse","getQuestionMetadata","q"],"mappings":";;;AAMA,MAAMA,IAA4B,MAAM;AAChC,QAAA,EAAE,WAAAC,GAAW,kBAAAC,GAAkB,cAAAC,GAAc,YAAAC,GAAY,kBAAAC,EAAiB,IAC9EC,EAAkB,CAAUC,OAAA;AAAA,IAC1B,WAAWA,EAAM;AAAA,IACjB,kBAAkBA,EAAM;AAAA,IACxB,cAAcA,EAAM;AAAA,IACpB,YAAYA,EAAM;AAAA,IAClB,kBAAkBA,EAAM;AAAA,EACxB,EAAA;AAyBG,SAvBwBC,EAAY,MAAM;AAC/C,IAAAL,EAAa,CAACM,MAAsD;AAClE,YAAMC,IAAkC;AAAA,QACtC,GAAGC,EAAoBV,GAAWC,CAAgB;AAAA,QAClD,GAAGO,EAAcP,CAAgB;AAAA,QACjC,oBAAoB;AAAA,MAAA;AAGH,aAAAG,KAAA,QAAAA,EAAA;AAAA,QACjB,YAAYH;AAAA,QACZ,UAAUQ;AAAA,QACV,UAAUT,EAAU,KAAK,CAAKW,MAAAA,EAAE,gBAAgBV,CAAgB;AAAA,QAChE,cAAc;AAAA,MAAA,IAGT;AAAA,QACL,GAAGO;AAAA,QACH,CAACP,CAAgB,GAAGQ;AAAA,MAAA;AAAA,IACtB,CACD,GACDN,EAAW,gCAAgC;AAAA,EAAA,GAC1C,CAACC,GAAkBJ,GAAWC,GAAkBE,GAAYD,CAAY,CAAC;AAG9E;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { useCallback as p } from "react";
|
|
2
|
+
import { useErrorBoundary as d } from "react-error-boundary";
|
|
3
|
+
import { useWorksheetStore as l } from "../../hooks/use-worksheet-store.js";
|
|
4
|
+
import { checkIsClozeFormulaResponseInvalid as h, isOkayTypeQuestion as m } from "../../worksheet-helpers.js";
|
|
5
|
+
const k = ({ getTimeSpentOnQuestion: a }) => {
|
|
6
|
+
const { learnosity: r, activeQuestionId: o, updateResponse: u } = l((s) => ({
|
|
7
|
+
learnosity: s.learnosity,
|
|
8
|
+
activeQuestionId: s.activeQuestionId,
|
|
9
|
+
updateResponse: s.updateResponse
|
|
10
|
+
})), { showBoundary: c } = d();
|
|
11
|
+
return p(
|
|
12
|
+
(s) => {
|
|
13
|
+
const n = r.question(o);
|
|
14
|
+
if (n) {
|
|
15
|
+
const i = n.getQuestion(), e = n.getResponse();
|
|
16
|
+
(i.type === "clozeformula" && e && (e == null ? void 0 : e.value) ? h(e) : !1) && c(new Error("CLOZE_FORMULA_RESPONSE_EXCEEDS_MAX_LENGTH")), n.getScore((t) => {
|
|
17
|
+
u({
|
|
18
|
+
responseId: o,
|
|
19
|
+
response: e,
|
|
20
|
+
score: m(i) || !t ? {
|
|
21
|
+
max_score: 0,
|
|
22
|
+
score: 0,
|
|
23
|
+
unscored: !t
|
|
24
|
+
// score will be null for unscored questions
|
|
25
|
+
} : { ...t, score: t.score ?? 0 },
|
|
26
|
+
answerChecked: s,
|
|
27
|
+
timeSpent: a(o)
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
[a, r, o, c, u]
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
export {
|
|
36
|
+
k as default
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=use-handle-response-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-response-change.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-response-change.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useErrorBoundary } from 'react-error-boundary';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\nimport { checkIsClozeFormulaResponseInvalid, isOkayTypeQuestion } from '../../worksheet-helpers';\nimport type { ILearnosityQuestionScore } from '../../worksheet-types';\n\ninterface IUseHandleResponseChange {\n (options: {\n getTimeSpentOnQuestion: (responseId: string) => number;\n }): (answerChecked?: boolean) => void;\n}\n\nconst useHandleResponseChange: IUseHandleResponseChange = ({ getTimeSpentOnQuestion }) => {\n const { learnosity, activeQuestionId, updateResponse } = useWorksheetStore(store => ({\n learnosity: store.learnosity,\n activeQuestionId: store.activeQuestionId,\n updateResponse: store.updateResponse,\n }));\n\n const { showBoundary } = useErrorBoundary();\n\n const handleResponseChange = useCallback(\n (answerChecked?: boolean) => {\n const questionInstance = learnosity.question(activeQuestionId);\n\n if (questionInstance) {\n const lquestion = questionInstance.getQuestion();\n const questionResponse = questionInstance.getResponse();\n const shouldCheckAbuse =\n lquestion.type === 'clozeformula' && questionResponse && questionResponse?.value;\n const isInputExceedingMaxLength = shouldCheckAbuse\n ? checkIsClozeFormulaResponseInvalid(questionResponse)\n : false;\n\n if (isInputExceedingMaxLength) {\n showBoundary(new Error('CLOZE_FORMULA_RESPONSE_EXCEEDS_MAX_LENGTH'));\n }\n\n questionInstance.getScore((score: ILearnosityQuestionScore | null) => {\n updateResponse({\n responseId: activeQuestionId,\n response: questionResponse,\n score:\n isOkayTypeQuestion(lquestion) || !score\n ? {\n max_score: 0,\n score: 0,\n unscored: !score, // score will be null for unscored questions\n }\n : { ...score, score: score.score ?? 0 },\n answerChecked,\n timeSpent: getTimeSpentOnQuestion(activeQuestionId),\n });\n });\n }\n },\n [getTimeSpentOnQuestion, learnosity, activeQuestionId, showBoundary, updateResponse],\n );\n\n return handleResponseChange;\n};\n\nexport default useHandleResponseChange;\n"],"names":["useHandleResponseChange","getTimeSpentOnQuestion","learnosity","activeQuestionId","updateResponse","useWorksheetStore","store","showBoundary","useErrorBoundary","useCallback","answerChecked","questionInstance","lquestion","questionResponse","checkIsClozeFormulaResponseInvalid","score","isOkayTypeQuestion"],"mappings":";;;;AAaA,MAAMA,IAAoD,CAAC,EAAE,wBAAAC,QAA6B;AACxF,QAAM,EAAE,YAAAC,GAAY,kBAAAC,GAAkB,gBAAAC,EAAe,IAAIC,EAAkB,CAAUC,OAAA;AAAA,IACnF,YAAYA,EAAM;AAAA,IAClB,kBAAkBA,EAAM;AAAA,IACxB,gBAAgBA,EAAM;AAAA,EACtB,EAAA,GAEI,EAAE,cAAAC,MAAiBC;AAwClB,SAtCsBC;AAAA,IAC3B,CAACC,MAA4B;AACrB,YAAAC,IAAmBT,EAAW,SAASC,CAAgB;AAE7D,UAAIQ,GAAkB;AACd,cAAAC,IAAYD,EAAiB,eAC7BE,IAAmBF,EAAiB;AAO1C,SALEC,EAAU,SAAS,kBAAkBC,MAAoBA,KAAA,gBAAAA,EAAkB,SAEzEC,EAAmCD,CAAgB,IACnD,OAGWN,EAAA,IAAI,MAAM,2CAA2C,CAAC,GAGpDI,EAAA,SAAS,CAACI,MAA2C;AACrD,UAAAX,EAAA;AAAA,YACb,YAAYD;AAAA,YACZ,UAAUU;AAAA,YACV,OACEG,EAAmBJ,CAAS,KAAK,CAACG,IAC9B;AAAA,cACE,WAAW;AAAA,cACX,OAAO;AAAA,cACP,UAAU,CAACA;AAAA;AAAA,YAAA,IAEb,EAAE,GAAGA,GAAO,OAAOA,EAAM,SAAS,EAAE;AAAA,YAC1C,eAAAL;AAAA,YACA,WAAWT,EAAuBE,CAAgB;AAAA,UAAA,CACnD;AAAA,QAAA,CACF;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAACF,GAAwBC,GAAYC,GAAkBI,GAAcH,CAAc;AAAA,EAAA;AAIvF;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { useCallback as i } from "react";
|
|
2
|
+
import { useWorksheetStore as s } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
const u = ({ handleResponseChange: e }) => {
|
|
4
|
+
const { learnosity: o, activeQuestionId: n } = s((t) => ({
|
|
5
|
+
learnosity: t.learnosity,
|
|
6
|
+
activeQuestionId: t.activeQuestionId
|
|
7
|
+
}));
|
|
8
|
+
return i(() => {
|
|
9
|
+
const t = o.question(n);
|
|
10
|
+
t && (t.enable(), t.resetValidationUI(), e());
|
|
11
|
+
}, [e, o, n]);
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
u as default
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=use-handle-retry-button-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-retry-button-click.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-retry-button-click.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\n\ninterface IUseHandleRetryButtonClick {\n (options: { handleResponseChange: () => void }): () => void;\n}\n\nconst useHandleRetryButtonClick: IUseHandleRetryButtonClick = ({ handleResponseChange }) => {\n const { learnosity, activeQuestionId } = useWorksheetStore(store => ({\n learnosity: store.learnosity,\n activeQuestionId: store.activeQuestionId,\n }));\n\n const handleRetryButtonClick = useCallback(() => {\n const questionInstance = learnosity.question(activeQuestionId);\n\n if (questionInstance) {\n questionInstance.enable();\n questionInstance.resetValidationUI();\n handleResponseChange();\n }\n }, [handleResponseChange, learnosity, activeQuestionId]);\n\n return handleRetryButtonClick;\n};\n\nexport default useHandleRetryButtonClick;\n"],"names":["useHandleRetryButtonClick","handleResponseChange","learnosity","activeQuestionId","useWorksheetStore","store","useCallback","questionInstance"],"mappings":";;AAQA,MAAMA,IAAwD,CAAC,EAAE,sBAAAC,QAA2B;AAC1F,QAAM,EAAE,YAAAC,GAAY,kBAAAC,EAAiB,IAAIC,EAAkB,CAAUC,OAAA;AAAA,IACnE,YAAYA,EAAM;AAAA,IAClB,kBAAkBA,EAAM;AAAA,EACxB,EAAA;AAYK,SAVwBC,EAAY,MAAM;AACzC,UAAAC,IAAmBL,EAAW,SAASC,CAAgB;AAE7D,IAAII,MACFA,EAAiB,OAAO,GACxBA,EAAiB,kBAAkB,GACdN;EAEtB,GAAA,CAACA,GAAsBC,GAAYC,CAAgB,CAAC;AAGzD;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useCallback as p } from "react";
|
|
2
|
+
import { useWorksheetStore as r } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
import { getQuestionMetadata as c } from "../../worksheet-helpers.js";
|
|
4
|
+
const f = ({ setSkipped: o }) => {
|
|
5
|
+
const { questions: n, activeQuestionId: s, setResponses: i, onResponseChange: t } = r(
|
|
6
|
+
(e) => ({
|
|
7
|
+
questions: e.questions,
|
|
8
|
+
activeQuestionId: e.activeQuestionId,
|
|
9
|
+
setResponses: e.setResponses,
|
|
10
|
+
onResponseChange: e.onResponseChange
|
|
11
|
+
})
|
|
12
|
+
);
|
|
13
|
+
return p(() => {
|
|
14
|
+
i((e) => {
|
|
15
|
+
const u = {
|
|
16
|
+
...c(n, s),
|
|
17
|
+
...e[s],
|
|
18
|
+
skipped: !0
|
|
19
|
+
};
|
|
20
|
+
return t == null || t({
|
|
21
|
+
responseId: s,
|
|
22
|
+
response: u,
|
|
23
|
+
question: n.find((a) => a.response_id === s),
|
|
24
|
+
isNewAttempt: !1
|
|
25
|
+
}), {
|
|
26
|
+
...e,
|
|
27
|
+
[s]: u
|
|
28
|
+
};
|
|
29
|
+
}), o(!0);
|
|
30
|
+
}, [t, n, s, i, o]);
|
|
31
|
+
};
|
|
32
|
+
export {
|
|
33
|
+
f as default
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=use-handle-skip-button-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-skip-button-click.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-skip-button-click.ts"],"sourcesContent":["import { useCallback, type Dispatch, type SetStateAction } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\nimport { getQuestionMetadata } from '../../worksheet-helpers';\nimport type { IWorksheetResponse } from '../../worksheet-types';\n\ninterface IUseHandleSkipButtonClick {\n (options: { setSkipped: Dispatch<SetStateAction<boolean>> }): () => void;\n}\n\nconst useHandleSkipButtonClick: IUseHandleSkipButtonClick = ({ setSkipped }) => {\n const { questions, activeQuestionId, setResponses, onResponseChange } = useWorksheetStore(\n store => ({\n questions: store.questions,\n activeQuestionId: store.activeQuestionId,\n setResponses: store.setResponses,\n onResponseChange: store.onResponseChange,\n }),\n );\n\n const handleSkipButtonClick = useCallback(() => {\n setResponses((prevResponses: Record<string, IWorksheetResponse>) => {\n const newResponse = {\n ...getQuestionMetadata(questions, activeQuestionId),\n ...prevResponses[activeQuestionId],\n skipped: true,\n };\n\n onResponseChange?.({\n responseId: activeQuestionId,\n response: newResponse,\n question: questions.find(q => q.response_id === activeQuestionId)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [activeQuestionId]: newResponse,\n };\n });\n setSkipped(true);\n }, [onResponseChange, questions, activeQuestionId, setResponses, setSkipped]);\n\n return handleSkipButtonClick;\n};\n\nexport default useHandleSkipButtonClick;\n"],"names":["useHandleSkipButtonClick","setSkipped","questions","activeQuestionId","setResponses","onResponseChange","useWorksheetStore","store","useCallback","prevResponses","newResponse","getQuestionMetadata","q"],"mappings":";;;AAUA,MAAMA,IAAsD,CAAC,EAAE,YAAAC,QAAiB;AAC9E,QAAM,EAAE,WAAAC,GAAW,kBAAAC,GAAkB,cAAAC,GAAc,kBAAAC,EAAqB,IAAAC;AAAA,IACtE,CAAUC,OAAA;AAAA,MACR,WAAWA,EAAM;AAAA,MACjB,kBAAkBA,EAAM;AAAA,MACxB,cAAcA,EAAM;AAAA,MACpB,kBAAkBA,EAAM;AAAA,IAAA;AAAA,EAC1B;AA0BK,SAvBuBC,EAAY,MAAM;AAC9C,IAAAJ,EAAa,CAACK,MAAsD;AAClE,YAAMC,IAAc;AAAA,QAClB,GAAGC,EAAoBT,GAAWC,CAAgB;AAAA,QAClD,GAAGM,EAAcN,CAAgB;AAAA,QACjC,SAAS;AAAA,MAAA;AAGQ,aAAAE,KAAA,QAAAA,EAAA;AAAA,QACjB,YAAYF;AAAA,QACZ,UAAUO;AAAA,QACV,UAAUR,EAAU,KAAK,CAAKU,MAAAA,EAAE,gBAAgBT,CAAgB;AAAA,QAChE,cAAc;AAAA,MAAA,IAGT;AAAA,QACL,GAAGM;AAAA,QACH,CAACN,CAAgB,GAAGO;AAAA,MAAA;AAAA,IACtB,CACD,GACDT,EAAW,EAAI;AAAA,EAAA,GACd,CAACI,GAAkBH,GAAWC,GAAkBC,GAAcH,CAAU,CAAC;AAG9E;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useCallback as o } from "react";
|
|
2
|
+
import { useWorksheetStore as i } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
const s = () => {
|
|
4
|
+
const t = i((e) => e.setBlocker);
|
|
5
|
+
return o(() => {
|
|
6
|
+
t("optional-items-skip");
|
|
7
|
+
}, [t]);
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
s as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=use-handle-skip-section-button-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-skip-section-button-click.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-skip-section-button-click.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\n\nconst useHandleSkipSectionButtonClick = () => {\n const setBlocker = useWorksheetStore(store => store.setBlocker);\n\n const handleSkipSectionButtonClick = useCallback(() => {\n setBlocker('optional-items-skip');\n }, [setBlocker]);\n\n return handleSkipSectionButtonClick;\n};\n\nexport default useHandleSkipSectionButtonClick;\n"],"names":["useHandleSkipSectionButtonClick","setBlocker","useWorksheetStore","store","useCallback"],"mappings":";;AAIA,MAAMA,IAAkC,MAAM;AAC5C,QAAMC,IAAaC,EAAkB,CAASC,MAAAA,EAAM,UAAU;AAMvD,SAJ8BC,EAAY,MAAM;AACrD,IAAAH,EAAW,qBAAqB;AAAA,EAAA,GAC/B,CAACA,CAAU,CAAC;AAGjB;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useCallback as l } from "react";
|
|
2
|
+
import { useWorksheetStore as d } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
import { getQuestionMetadata as p } from "../../worksheet-helpers.js";
|
|
4
|
+
import m from "./use-handle-next-button-click.js";
|
|
5
|
+
import f from "./use-validate-question.js";
|
|
6
|
+
const B = () => {
|
|
7
|
+
const { activeQuestion: i, questions: n, activeQuestionId: t, setResponses: u, onResponseChange: s } = d((e) => ({
|
|
8
|
+
activeQuestion: e.questions[e.activeQuestionIndex],
|
|
9
|
+
questions: e.questions,
|
|
10
|
+
activeQuestionId: e.activeQuestionId,
|
|
11
|
+
setResponses: e.setResponses,
|
|
12
|
+
onResponseChange: e.onResponseChange
|
|
13
|
+
})), a = f(), r = m();
|
|
14
|
+
return l(() => {
|
|
15
|
+
i.is_non_question ? (u((e) => {
|
|
16
|
+
const o = {
|
|
17
|
+
...p(n, t),
|
|
18
|
+
...e[t],
|
|
19
|
+
responseGiven: !0
|
|
20
|
+
};
|
|
21
|
+
return s == null || s({
|
|
22
|
+
responseId: t,
|
|
23
|
+
response: o,
|
|
24
|
+
question: n.find((c) => c.response_id === t),
|
|
25
|
+
isNewAttempt: !1
|
|
26
|
+
}), {
|
|
27
|
+
...e,
|
|
28
|
+
[t]: o
|
|
29
|
+
};
|
|
30
|
+
}), r()) : a(t);
|
|
31
|
+
}, [
|
|
32
|
+
r,
|
|
33
|
+
s,
|
|
34
|
+
i.is_non_question,
|
|
35
|
+
n,
|
|
36
|
+
t,
|
|
37
|
+
u,
|
|
38
|
+
a
|
|
39
|
+
]);
|
|
40
|
+
};
|
|
41
|
+
export {
|
|
42
|
+
B as default
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=use-handle-start-button-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-start-button-click.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-start-button-click.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\nimport { getQuestionMetadata } from '../../worksheet-helpers';\nimport type { IWorksheetResponse } from '../../worksheet-types';\nimport useHandleNextButtonClick from './use-handle-next-button-click';\nimport useValidateQuestion from './use-validate-question';\n\nconst useHandleStartButtonClick = () => {\n const { activeQuestion, questions, activeQuestionId, setResponses, onResponseChange } =\n useWorksheetStore(store => {\n const question = store.questions[store.activeQuestionIndex]!;\n\n return {\n activeQuestion: question,\n questions: store.questions,\n activeQuestionId: store.activeQuestionId,\n setResponses: store.setResponses,\n onResponseChange: store.onResponseChange,\n };\n });\n const validateQuestion = useValidateQuestion();\n const handleNextButtonClick = useHandleNextButtonClick();\n\n const handleStartButtonClick = useCallback(() => {\n if (activeQuestion.is_non_question) {\n setResponses((prevResponses: Record<string, IWorksheetResponse>) => {\n const newResponse: IWorksheetResponse = {\n ...getQuestionMetadata(questions, activeQuestionId),\n ...prevResponses[activeQuestionId],\n responseGiven: true,\n };\n\n onResponseChange?.({\n responseId: activeQuestionId,\n response: newResponse,\n question: questions.find(q => q.response_id === activeQuestionId)!,\n isNewAttempt: false,\n });\n\n return {\n ...prevResponses,\n [activeQuestionId]: newResponse,\n };\n });\n handleNextButtonClick();\n } else {\n validateQuestion(activeQuestionId);\n }\n }, [\n handleNextButtonClick,\n onResponseChange,\n activeQuestion.is_non_question,\n questions,\n activeQuestionId,\n setResponses,\n validateQuestion,\n ]);\n\n return handleStartButtonClick;\n};\n\nexport default useHandleStartButtonClick;\n"],"names":["useHandleStartButtonClick","activeQuestion","questions","activeQuestionId","setResponses","onResponseChange","useWorksheetStore","store","validateQuestion","useValidateQuestion","handleNextButtonClick","useHandleNextButtonClick","useCallback","prevResponses","newResponse","getQuestionMetadata","q"],"mappings":";;;;;AAQA,MAAMA,IAA4B,MAAM;AAChC,QAAA,EAAE,gBAAAC,GAAgB,WAAAC,GAAW,kBAAAC,GAAkB,cAAAC,GAAc,kBAAAC,EAAiB,IAClFC,EAAkB,CAASC,OAGlB;AAAA,IACL,gBAHeA,EAAM,UAAUA,EAAM,mBAAmB;AAAA,IAIxD,WAAWA,EAAM;AAAA,IACjB,kBAAkBA,EAAM;AAAA,IACxB,cAAcA,EAAM;AAAA,IACpB,kBAAkBA,EAAM;AAAA,EAAA,EAE3B,GACGC,IAAmBC,KACnBC,IAAwBC;AAqCvB,SAnCwBC,EAAY,MAAM;AAC/C,IAAIX,EAAe,mBACjBG,EAAa,CAACS,MAAsD;AAClE,YAAMC,IAAkC;AAAA,QACtC,GAAGC,EAAoBb,GAAWC,CAAgB;AAAA,QAClD,GAAGU,EAAcV,CAAgB;AAAA,QACjC,eAAe;AAAA,MAAA;AAGE,aAAAE,KAAA,QAAAA,EAAA;AAAA,QACjB,YAAYF;AAAA,QACZ,UAAUW;AAAA,QACV,UAAUZ,EAAU,KAAK,CAAKc,MAAAA,EAAE,gBAAgBb,CAAgB;AAAA,QAChE,cAAc;AAAA,MAAA,IAGT;AAAA,QACL,GAAGU;AAAA,QACH,CAACV,CAAgB,GAAGW;AAAA,MAAA;AAAA,IACtB,CACD,GACqBJ,OAEtBF,EAAiBL,CAAgB;AAAA,EACnC,GACC;AAAA,IACDO;AAAA,IACAL;AAAA,IACAJ,EAAe;AAAA,IACfC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAI;AAAA,EAAA,CACD;AAGH;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useCallback as c } from "react";
|
|
2
|
+
import { useWorksheetStore as p } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
import { getQuestionMetadata as f } from "../../worksheet-helpers.js";
|
|
4
|
+
const h = () => {
|
|
5
|
+
const { questions: o, inClass: r, setResponses: a, onBulkResponsesChange: t, onSubmit: n } = p(
|
|
6
|
+
(e) => ({
|
|
7
|
+
questions: e.questions,
|
|
8
|
+
setResponses: e.setResponses,
|
|
9
|
+
onBulkResponsesChange: e.onBulkResponsesChange,
|
|
10
|
+
inClass: e.inClass,
|
|
11
|
+
onSubmit: e.onSubmit
|
|
12
|
+
})
|
|
13
|
+
);
|
|
14
|
+
return c(() => {
|
|
15
|
+
a((e) => {
|
|
16
|
+
const u = o.reduce(
|
|
17
|
+
(m, i) => {
|
|
18
|
+
if (i.item_type === "exit-ticket") {
|
|
19
|
+
const s = e[i.response_id], d = (s == null ? void 0 : s.response) ?? {
|
|
20
|
+
type: "empty",
|
|
21
|
+
value: null,
|
|
22
|
+
apiVersion: "0.0.0",
|
|
23
|
+
revision: 1
|
|
24
|
+
}, l = (s == null ? void 0 : s.score) ?? { score: 0, max_score: 1 };
|
|
25
|
+
m[i.response_id] = {
|
|
26
|
+
...f(i),
|
|
27
|
+
...s,
|
|
28
|
+
response: d,
|
|
29
|
+
score: l,
|
|
30
|
+
responseEdited: !1,
|
|
31
|
+
attemptsHistory: [
|
|
32
|
+
{
|
|
33
|
+
response: d,
|
|
34
|
+
score: l
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
submittedByStudent: !0
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return m;
|
|
41
|
+
},
|
|
42
|
+
{ ...e }
|
|
43
|
+
);
|
|
44
|
+
return t == null || t(u), r || n == null || n(u, o), u;
|
|
45
|
+
});
|
|
46
|
+
}, [r, t, n, o, a]);
|
|
47
|
+
};
|
|
48
|
+
export {
|
|
49
|
+
h as default
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=use-handle-submit-quiz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-submit-quiz.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-submit-quiz.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\nimport { getQuestionMetadata } from '../../worksheet-helpers';\nimport type { IWorksheetResponse } from '../../worksheet-types';\n\ninterface IUseHandleSubmitQuiz {\n (): () => void;\n}\n\nconst useHandleSubmitQuiz: IUseHandleSubmitQuiz = () => {\n const { questions, inClass, setResponses, onBulkResponsesChange, onSubmit } = useWorksheetStore(\n store => ({\n questions: store.questions,\n setResponses: store.setResponses,\n onBulkResponsesChange: store.onBulkResponsesChange,\n inClass: store.inClass,\n onSubmit: store.onSubmit,\n }),\n );\n\n const handleSubmitQuiz = useCallback(() => {\n setResponses((prevResponses: Record<string, IWorksheetResponse>) => {\n const updatedResponses = questions.reduce(\n (acc, question) => {\n if (question.item_type === 'exit-ticket') {\n const prevResponse = prevResponses[question.response_id];\n const response = prevResponse?.response ?? {\n type: 'empty',\n value: null,\n apiVersion: '0.0.0',\n revision: 1,\n };\n const score = prevResponse?.score ?? { score: 0, max_score: 1 };\n\n acc[question.response_id] = {\n ...getQuestionMetadata(question),\n ...prevResponse,\n response,\n score,\n responseEdited: false,\n attemptsHistory: [\n {\n response,\n score,\n },\n ],\n submittedByStudent: true,\n };\n }\n\n return acc;\n },\n { ...prevResponses },\n );\n\n onBulkResponsesChange?.(updatedResponses);\n\n if (!inClass) {\n onSubmit?.(updatedResponses, questions);\n }\n\n return updatedResponses;\n });\n }, [inClass, onBulkResponsesChange, onSubmit, questions, setResponses]);\n\n return handleSubmitQuiz;\n};\n\nexport default useHandleSubmitQuiz;\n"],"names":["useHandleSubmitQuiz","questions","inClass","setResponses","onBulkResponsesChange","onSubmit","useWorksheetStore","store","useCallback","prevResponses","updatedResponses","acc","question","prevResponse","response","score","getQuestionMetadata"],"mappings":";;;AAUA,MAAMA,IAA4C,MAAM;AACtD,QAAM,EAAE,WAAAC,GAAW,SAAAC,GAAS,cAAAC,GAAc,uBAAAC,GAAuB,UAAAC,MAAaC;AAAA,IAC5E,CAAUC,OAAA;AAAA,MACR,WAAWA,EAAM;AAAA,MACjB,cAAcA,EAAM;AAAA,MACpB,uBAAuBA,EAAM;AAAA,MAC7B,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,IAAA;AAAA,EAClB;AAgDK,SA7CkBC,EAAY,MAAM;AACzC,IAAAL,EAAa,CAACM,MAAsD;AAClE,YAAMC,IAAmBT,EAAU;AAAA,QACjC,CAACU,GAAKC,MAAa;AACb,cAAAA,EAAS,cAAc,eAAe;AAClC,kBAAAC,IAAeJ,EAAcG,EAAS,WAAW,GACjDE,KAAWD,KAAA,gBAAAA,EAAc,aAAY;AAAA,cACzC,MAAM;AAAA,cACN,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,UAAU;AAAA,YAAA,GAENE,KAAQF,KAAA,gBAAAA,EAAc,UAAS,EAAE,OAAO,GAAG,WAAW;AAExD,YAAAF,EAAAC,EAAS,WAAW,IAAI;AAAA,cAC1B,GAAGI,EAAoBJ,CAAQ;AAAA,cAC/B,GAAGC;AAAA,cACH,UAAAC;AAAA,cACA,OAAAC;AAAA,cACA,gBAAgB;AAAA,cAChB,iBAAiB;AAAA,gBACf;AAAA,kBACE,UAAAD;AAAA,kBACA,OAAAC;AAAA,gBACF;AAAA,cACF;AAAA,cACA,oBAAoB;AAAA,YAAA;AAAA,UAExB;AAEO,iBAAAJ;AAAA,QACT;AAAA,QACA,EAAE,GAAGF,EAAc;AAAA,MAAA;AAGrB,aAAAL,KAAA,QAAAA,EAAwBM,IAEnBR,KACHG,KAAA,QAAAA,EAAWK,GAAkBT,IAGxBS;AAAA,IAAA,CACR;AAAA,EAAA,GACA,CAACR,GAASE,GAAuBC,GAAUJ,GAAWE,CAAY,CAAC;AAGxE;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useCallback as s } from "react";
|
|
2
|
+
import { useWorksheetStore as u } from "../../hooks/use-worksheet-store.js";
|
|
3
|
+
import { EWorksheetActivity as l } from "../../../../../types/models/worksheet.js";
|
|
4
|
+
const y = () => {
|
|
5
|
+
const { activeQuestion: n, activeQuestionId: i, activityType: o, setBlocker: c, onTeacherValidation: e } = u((t) => ({
|
|
6
|
+
activeQuestion: t.questions[t.activeQuestionIndex],
|
|
7
|
+
activeQuestionId: t.activeQuestionId,
|
|
8
|
+
activityType: t.activityType,
|
|
9
|
+
setBlocker: t.setBlocker,
|
|
10
|
+
onTeacherValidation: t.onTeacherValidation
|
|
11
|
+
})), a = n.item_type === "exit-ticket";
|
|
12
|
+
return s(() => {
|
|
13
|
+
a && o === l.LESSON_V3 ? c("exit-ticket-review") : e == null || e(i);
|
|
14
|
+
}, [a, o, c, e, i]);
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
y as default
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=use-handle-validate-button-click.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-handle-validate-button-click.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-validate-button-click.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useWorksheetStore } from '../../hooks/use-worksheet-store';\nimport { EWorksheetActivity } from '../../../../../types/models/worksheet';\n\nconst useHandleValidateButtonClick = () => {\n const { activeQuestion, activeQuestionId, activityType, setBlocker, onTeacherValidation } =\n useWorksheetStore(store => {\n const question = store.questions[store.activeQuestionIndex]!;\n\n return {\n activeQuestion: question,\n activeQuestionId: store.activeQuestionId,\n activityType: store.activityType,\n setBlocker: store.setBlocker,\n onTeacherValidation: store.onTeacherValidation,\n };\n });\n\n const isExitTicket = activeQuestion.item_type === 'exit-ticket';\n\n const handleValidateButtonClick = useCallback(() => {\n if (isExitTicket && activityType === EWorksheetActivity.LESSON_V3) {\n setBlocker('exit-ticket-review');\n } else {\n onTeacherValidation?.(activeQuestionId);\n }\n }, [isExitTicket, activityType, setBlocker, onTeacherValidation, activeQuestionId]);\n\n return handleValidateButtonClick;\n};\n\nexport default useHandleValidateButtonClick;\n"],"names":["useHandleValidateButtonClick","activeQuestion","activeQuestionId","activityType","setBlocker","onTeacherValidation","useWorksheetStore","store","isExitTicket","useCallback","EWorksheetActivity"],"mappings":";;;AAKA,MAAMA,IAA+B,MAAM;AACnC,QAAA,EAAE,gBAAAC,GAAgB,kBAAAC,GAAkB,cAAAC,GAAc,YAAAC,GAAY,qBAAAC,EAAoB,IACtFC,EAAkB,CAASC,OAGlB;AAAA,IACL,gBAHeA,EAAM,UAAUA,EAAM,mBAAmB;AAAA,IAIxD,kBAAkBA,EAAM;AAAA,IACxB,cAAcA,EAAM;AAAA,IACpB,YAAYA,EAAM;AAAA,IAClB,qBAAqBA,EAAM;AAAA,EAAA,EAE9B,GAEGC,IAAeP,EAAe,cAAc;AAU3C,SAR2BQ,EAAY,MAAM;AAC9C,IAAAD,KAAgBL,MAAiBO,EAAmB,YACtDN,EAAW,oBAAoB,IAE/BC,KAAA,QAAAA,EAAsBH;AAAA,EACxB,GACC,CAACM,GAAcL,GAAcC,GAAYC,GAAqBH,CAAgB,CAAC;AAGpF;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useCallback as u } from "react";
|
|
2
|
+
import c from "../../../../hooks/use-audio-player.js";
|
|
3
|
+
import { SYSTEM_VALIDATION_AUDIO_LIST as l } from "../../constants.js";
|
|
4
|
+
import { useWorksheetStore as d } from "../../hooks/use-worksheet-store.js";
|
|
5
|
+
import { isOkayTypeQuestion as m } from "../../worksheet-helpers.js";
|
|
6
|
+
const A = () => {
|
|
7
|
+
const { learnosity: t, activeQuestionId: e, validation: a } = d((o) => ({
|
|
8
|
+
learnosity: o.learnosity,
|
|
9
|
+
activeQuestionId: o.activeQuestionId,
|
|
10
|
+
validation: o.behavior.validation
|
|
11
|
+
})), i = c(l);
|
|
12
|
+
return u(() => {
|
|
13
|
+
const o = t.question(e);
|
|
14
|
+
o && a && !m(o.getQuestion()) && o.getScore((r) => {
|
|
15
|
+
const { max_score: n, score: s } = r || {};
|
|
16
|
+
n && i(n === s ? "CORRECT" : "INCORRECT");
|
|
17
|
+
});
|
|
18
|
+
}, [t, i, e, a]);
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
A as default
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=use-play-validation-audio.js.map
|