@clickview/lite 0.64.0-rc.0 → 0.64.0-rc.2
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/bundles.json +1 -1
- package/dist/css/{7153-lite-0cc5db0db7.chunk.css → 2962-lite-2002c62a24.chunk.css} +0 -1
- package/dist/css/{1857-lite-324255d395.chunk.css → 6173-lite-911f35513f.chunk.css} +0 -1
- package/dist/css/{2083-lite-6cb1775e12.chunk.css → 7324-lite-238bd550b7.chunk.css} +0 -1
- package/dist/css/{9013-lite-620f218839.chunk.css → 9013-lite-3c31b606c5.chunk.css} +2 -2
- package/dist/languages/en.json +1 -1
- package/dist/scripts/1216-899540dc73-lite.chunk.js +2 -0
- package/dist/scripts/1216-899540dc73-lite.chunk.js.map +1 -0
- package/dist/scripts/1820-b572681b3a-lite.chunk.js +2 -0
- package/dist/scripts/1820-b572681b3a-lite.chunk.js.map +1 -0
- package/dist/scripts/{2056-84f388df20-lite.chunk.js → 2056-a9e8d17a46-lite.chunk.js} +3 -3
- package/dist/scripts/2056-a9e8d17a46-lite.chunk.js.map +1 -0
- package/dist/scripts/229-ac9f12e165-lite.chunk.js +2 -0
- package/dist/scripts/229-ac9f12e165-lite.chunk.js.map +1 -0
- package/dist/scripts/{2564-65e3fc9619-lite.chunk.js → 2564-f5628d4e56-lite.chunk.js} +3 -3
- package/dist/scripts/{2564-65e3fc9619-lite.chunk.js.map → 2564-f5628d4e56-lite.chunk.js.map} +1 -1
- package/dist/scripts/2712-a851ddc3c3-lite.chunk.js +2 -0
- package/dist/scripts/2712-a851ddc3c3-lite.chunk.js.map +1 -0
- package/dist/scripts/{2788-eca70707c6-lite.chunk.js → 2788-c8ae3be73f-lite.chunk.js} +1 -1
- package/dist/scripts/2788-c8ae3be73f-lite.chunk.js.map +1 -0
- package/dist/scripts/{7153-0ed8513e59-lite.chunk.js → 2962-7f2e4412f0-lite.chunk.js} +2 -2
- package/dist/scripts/{7153-0ed8513e59-lite.chunk.js.map → 2962-7f2e4412f0-lite.chunk.js.map} +1 -1
- package/dist/scripts/2988-b602b64344-lite.chunk.js +2 -0
- package/dist/scripts/2988-b602b64344-lite.chunk.js.map +1 -0
- package/dist/scripts/3180-c1f065183d-lite.chunk.js +2 -0
- package/dist/scripts/3180-c1f065183d-lite.chunk.js.map +1 -0
- package/dist/scripts/3549-111225ff0e-lite.chunk.js +2 -0
- package/dist/scripts/3549-111225ff0e-lite.chunk.js.map +1 -0
- package/dist/scripts/4591-f78fa6c784-lite.chunk.js +2 -0
- package/dist/scripts/4591-f78fa6c784-lite.chunk.js.map +1 -0
- package/dist/scripts/4667-5101904582-lite.chunk.js +2 -0
- package/dist/scripts/4667-5101904582-lite.chunk.js.map +1 -0
- package/dist/scripts/{5056-6057435479-lite.chunk.js → 5056-65c739468f-lite.chunk.js} +1 -1
- package/dist/scripts/5056-65c739468f-lite.chunk.js.map +1 -0
- package/dist/scripts/5157-e38b666fce-lite.chunk.js +2 -0
- package/dist/scripts/5157-e38b666fce-lite.chunk.js.map +1 -0
- package/dist/scripts/5201-98ee21febb-lite.chunk.js +2 -0
- package/dist/scripts/5201-98ee21febb-lite.chunk.js.map +1 -0
- package/dist/scripts/5595-79068997ce-lite.chunk.js +2 -0
- package/dist/scripts/5595-79068997ce-lite.chunk.js.map +1 -0
- package/dist/scripts/5770-f88f6d9c00-lite.chunk.js +2 -0
- package/dist/scripts/5770-f88f6d9c00-lite.chunk.js.map +1 -0
- package/dist/scripts/5896-60133bfdad-lite.chunk.js +3 -0
- package/dist/scripts/5896-60133bfdad-lite.chunk.js.map +1 -0
- package/dist/scripts/6173-7f9939c29e-lite.chunk.js +3 -0
- package/dist/scripts/6173-7f9939c29e-lite.chunk.js.map +1 -0
- package/dist/scripts/6181-9d7668c9e4-lite.chunk.js +3 -0
- package/dist/scripts/6181-9d7668c9e4-lite.chunk.js.map +1 -0
- package/dist/scripts/6455-37039eb687-lite.chunk.js +2 -0
- package/dist/scripts/6455-37039eb687-lite.chunk.js.map +1 -0
- package/dist/scripts/6623-84b33c6856-lite.chunk.js +3 -0
- package/dist/scripts/6623-84b33c6856-lite.chunk.js.map +1 -0
- package/dist/scripts/6919-0f2cef64e5-lite.chunk.js +2 -0
- package/dist/scripts/6919-0f2cef64e5-lite.chunk.js.map +1 -0
- package/dist/scripts/7267-1f5006c9c5-lite.chunk.js +2 -0
- package/dist/scripts/7267-1f5006c9c5-lite.chunk.js.map +1 -0
- package/dist/scripts/{2083-7daacf0112-lite.chunk.js → 7324-ee20e73ac1-lite.chunk.js} +2 -2
- package/dist/scripts/{2083-7daacf0112-lite.chunk.js.map → 7324-ee20e73ac1-lite.chunk.js.map} +1 -1
- package/dist/scripts/7434-fef3ea4e89-lite.chunk.js +2 -0
- package/dist/scripts/7434-fef3ea4e89-lite.chunk.js.map +1 -0
- package/dist/scripts/7443-4866d0c9ab-lite.chunk.js +3 -0
- package/dist/scripts/7443-4866d0c9ab-lite.chunk.js.map +1 -0
- package/dist/scripts/8416-7d71a55a14-lite.chunk.js +2 -0
- package/dist/scripts/8416-7d71a55a14-lite.chunk.js.map +1 -0
- package/dist/scripts/8465-01b0f72699-lite.chunk.js +2 -0
- package/dist/scripts/8465-01b0f72699-lite.chunk.js.map +1 -0
- package/dist/scripts/8722-a9eac1941c-lite.chunk.js +2 -0
- package/dist/scripts/8722-a9eac1941c-lite.chunk.js.map +1 -0
- package/dist/scripts/9013-6fcc58f028-lite.chunk.js +2 -0
- package/dist/scripts/9013-6fcc58f028-lite.chunk.js.map +1 -0
- package/dist/scripts/9264-998d93d1c2-lite.chunk.js +2 -0
- package/dist/scripts/9264-998d93d1c2-lite.chunk.js.map +1 -0
- package/dist/scripts/9894-0fba5cf702-lite.chunk.js +3 -0
- package/dist/scripts/9894-0fba5cf702-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-2e839958ca.min.js +3 -0
- package/dist/scripts/bundle-2e839958ca.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1755-462bcd99e9-lite.chunk.js +0 -2
- package/dist/scripts/1755-462bcd99e9-lite.chunk.js.map +0 -1
- package/dist/scripts/180-6c4779f6ab-lite.chunk.js +0 -2
- package/dist/scripts/180-6c4779f6ab-lite.chunk.js.map +0 -1
- package/dist/scripts/1820-3b5d0a340d-lite.chunk.js +0 -2
- package/dist/scripts/1820-3b5d0a340d-lite.chunk.js.map +0 -1
- package/dist/scripts/1857-d3af9d98eb-lite.chunk.js +0 -3
- package/dist/scripts/1857-d3af9d98eb-lite.chunk.js.map +0 -1
- package/dist/scripts/2056-84f388df20-lite.chunk.js.map +0 -1
- package/dist/scripts/229-900e650427-lite.chunk.js +0 -2
- package/dist/scripts/229-900e650427-lite.chunk.js.map +0 -1
- package/dist/scripts/2788-eca70707c6-lite.chunk.js.map +0 -1
- package/dist/scripts/3180-22edf4c9fc-lite.chunk.js +0 -2
- package/dist/scripts/3180-22edf4c9fc-lite.chunk.js.map +0 -1
- package/dist/scripts/3549-30d3b1cd05-lite.chunk.js +0 -2
- package/dist/scripts/3549-30d3b1cd05-lite.chunk.js.map +0 -1
- package/dist/scripts/3776-0027340c98-lite.chunk.js +0 -2
- package/dist/scripts/3776-0027340c98-lite.chunk.js.map +0 -1
- package/dist/scripts/4591-3e8dddd0e9-lite.chunk.js +0 -2
- package/dist/scripts/4591-3e8dddd0e9-lite.chunk.js.map +0 -1
- package/dist/scripts/4667-f3882f2379-lite.chunk.js +0 -2
- package/dist/scripts/4667-f3882f2379-lite.chunk.js.map +0 -1
- package/dist/scripts/5056-6057435479-lite.chunk.js.map +0 -1
- package/dist/scripts/5157-ad13101a6e-lite.chunk.js +0 -2
- package/dist/scripts/5157-ad13101a6e-lite.chunk.js.map +0 -1
- package/dist/scripts/5201-7d3867d027-lite.chunk.js +0 -2
- package/dist/scripts/5201-7d3867d027-lite.chunk.js.map +0 -1
- package/dist/scripts/5595-10e586779d-lite.chunk.js +0 -2
- package/dist/scripts/5595-10e586779d-lite.chunk.js.map +0 -1
- package/dist/scripts/5896-5d2f32c59e-lite.chunk.js +0 -3
- package/dist/scripts/5896-5d2f32c59e-lite.chunk.js.map +0 -1
- package/dist/scripts/6181-50a39979ec-lite.chunk.js +0 -3
- package/dist/scripts/6181-50a39979ec-lite.chunk.js.map +0 -1
- package/dist/scripts/6455-2f45be17cf-lite.chunk.js +0 -2
- package/dist/scripts/6455-2f45be17cf-lite.chunk.js.map +0 -1
- package/dist/scripts/6623-ebbffb59b3-lite.chunk.js +0 -3
- package/dist/scripts/6623-ebbffb59b3-lite.chunk.js.map +0 -1
- package/dist/scripts/6919-cb2de57c2e-lite.chunk.js +0 -2
- package/dist/scripts/6919-cb2de57c2e-lite.chunk.js.map +0 -1
- package/dist/scripts/7267-c2d30dd339-lite.chunk.js +0 -2
- package/dist/scripts/7267-c2d30dd339-lite.chunk.js.map +0 -1
- package/dist/scripts/7434-c34ca23a21-lite.chunk.js +0 -2
- package/dist/scripts/7434-c34ca23a21-lite.chunk.js.map +0 -1
- package/dist/scripts/7443-7c72de0cb9-lite.chunk.js +0 -3
- package/dist/scripts/7443-7c72de0cb9-lite.chunk.js.map +0 -1
- package/dist/scripts/8022-0656cce655-lite.chunk.js +0 -2
- package/dist/scripts/8022-0656cce655-lite.chunk.js.map +0 -1
- package/dist/scripts/8722-69c1c7a24f-lite.chunk.js +0 -2
- package/dist/scripts/8722-69c1c7a24f-lite.chunk.js.map +0 -1
- package/dist/scripts/9013-adc5d3517a-lite.chunk.js +0 -2
- package/dist/scripts/9013-adc5d3517a-lite.chunk.js.map +0 -1
- package/dist/scripts/9155-87c9030ce9-lite.chunk.js +0 -2
- package/dist/scripts/9155-87c9030ce9-lite.chunk.js.map +0 -1
- package/dist/scripts/9264-750b3d6ea0-lite.chunk.js +0 -2
- package/dist/scripts/9264-750b3d6ea0-lite.chunk.js.map +0 -1
- package/dist/scripts/9894-bc34edcd67-lite.chunk.js +0 -3
- package/dist/scripts/9894-bc34edcd67-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-3d3d127d98.min.js +0 -3
- package/dist/scripts/bundle-3d3d127d98.min.js.map +0 -1
- package/dist/css/{6455-lite-fe0bc6d95f.chunk.css → 6455-lite-c07987d46c.chunk.css} +1 -1
- /package/dist/css/{9155-lite-447d345417.chunk.css → 8465-lite-447d345417.chunk.css} +0 -0
- /package/dist/scripts/{1857-d3af9d98eb-lite.chunk.js.LICENSE.txt → 2056-a9e8d17a46-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2056-84f388df20-lite.chunk.js.LICENSE.txt → 2564-f5628d4e56-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2564-65e3fc9619-lite.chunk.js.LICENSE.txt → 5896-60133bfdad-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5896-5d2f32c59e-lite.chunk.js.LICENSE.txt → 6173-7f9939c29e-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6181-50a39979ec-lite.chunk.js.LICENSE.txt → 6181-9d7668c9e4-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6623-ebbffb59b3-lite.chunk.js.LICENSE.txt → 6623-84b33c6856-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7443-7c72de0cb9-lite.chunk.js.LICENSE.txt → 7443-4866d0c9ab-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9894-bc34edcd67-lite.chunk.js.LICENSE.txt → 9894-0fba5cf702-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-3d3d127d98.min.js.LICENSE.txt → bundle-2e839958ca.min.js.LICENSE.txt} +0 -0
package/dist/scripts/{7153-0ed8513e59-lite.chunk.js.map → 2962-7f2e4412f0-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/7153-0ed8513e59-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/backbone/utils/ScrollHelper.ts","file:///app/packages/libs/shared/src/apps/analytics/components/pending-indicator/PendingIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/StudentTableUtils.ts","file:///app/packages/libs/shared/src/components/confirmation-popup/ConfirmationPopup.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/interaction-response-list.scss","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/question-table-answers.scss","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTableUtils.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTable.tsx","file:///app/packages/projects/lite/src/apps/insights/views/interactive/questions/partial-loading/partial-interactive-insights-questions.scss","file:///app/packages/projects/lite/src/apps/insights/views/interactive/questions/partial-loading/PartialInteractiveInsightsQuestions.tsx","file:///app/packages/projects/lite/src/apps/insights/views/interactive/questions/InteractiveInsightsQuestionsView.tsx"],"sourcesContent":["import { Radio } from 'backbone';\n\nimport { CommonChannels } from '../constants/CommonChannels';\n\nexport const ScrollHelper = {\n // Will prevent scrolling to the top of the page when applinks are triggered\n preventScrollTop(): void {\n Radio.channel(CommonChannels.SHELL).trigger('prevent:scroll:top');\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'interactives.pendingIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(props: PendingIndicatorProps): string {\n let className = 'd-flex align-items-center h-100';\n\n className += props.showLabel ? ' justify-content-between' : ' justify-content-center';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface PendingIndicatorProps {\n title?: string;\n className?: string;\n showLabel?: boolean;\n tooltipClassName?: string;\n}\n\nexport function PendingIndicator(props: PendingIndicatorProps): JSX.Element {\n const Indicator = () => (\n <div className={getClassName(props)}>\n {!!props.showLabel &&\n <em>{getPhrase('pending')}</em>\n }\n <PercentageIndicator />\n </div>\n );\n\n if (!props.title)\n return <Indicator />;\n\n return (\n <Tooltip title={props.title} spanHack spanHackClassName={props.tooltipClassName || 'h-100 w-100 d-flex align-items-center'}>\n <Indicator />\n </Tooltip>\n );\n}","import { SortingRule } from 'react-table';\n\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\n\nexport type SortStudentsBy = 'score_desc' | 'score_asc';\n\nexport function getSortStudents(sortBy: SortStudentsBy, id: string): SortingRule<any>[] {\n switch (sortBy) {\n case 'score_desc': return [{ id, desc: true }];\n case 'score_asc': return [{ id, desc: false }];\n default: return [];\n }\n}\n\nexport type FilterStudentsBy = 'not_completed' | 'marking_required' | 'helping_hand';\n\nexport function shouldFilterStudent(filter: FilterStudentsBy, summary: ResultsSummary): boolean {\n if (filter === 'marking_required' && !summary.awaitingMarking)\n return true;\n\n if (filter === 'helping_hand' && summary.percentCorrect >= ScoreThresholdInsights.HIGH)\n return true;\n\n if (filter === 'not_completed' && !summary.unanswered)\n return true;\n \n return false;\n}\n\n","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.confirmationPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ConfirmationPopupProps {\n title: string;\n onClickConfirm: () => void;\n confirmButtonText?: string;\n cancelButtonText?: string;\n confirmButtonVariant?: ButtonProps['variant'];\n cancelButtonVariant?: ButtonProps['variant'];\n disabledConfirmButton?: boolean;\n}\n\nConfirmationPopup.defaultProps = {\n confirmButtonVariant: 'primary',\n cancelButtonVariant: 'link'\n};\n\ntype PropTypes = React.PropsWithChildren<ConfirmationPopupProps & PopupViewProps>;\n\nexport function ConfirmationPopup(props: PropTypes): React.ReactElement {\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n return (\n <Popup title={props.title} closePopup={props.closePopup}>\n <>\n {props.children}\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.closePopup}\n variant={props.cancelButtonVariant}\n text={props.cancelButtonText || getPhrase('cancel')}\n />\n <PopupButtons.Submit\n onClick={() => { setShowButtonSpinner(true); props.onClickConfirm(); }}\n text={props.confirmButtonText || getPhrase('confirm')}\n variant={props.confirmButtonVariant}\n showSpinner={showButtonSpinner}\n disabled={props.disabledConfirmButton}\n />\n </PopupButtons>\n </>\n </Popup>\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.interactionResponseList';\n\nexport type InteractionResponseFilterType = 'marking_required' | 'correct' | 'incorrect' | 'skipped';\n\ninterface InteractionResponseListFiltersEmptyStatesProps {\n filter: InteractionResponseFilterType;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n}\n\nexport function InteractionResponseListFiltersEmptyStates(props: InteractionResponseListFiltersEmptyStatesProps) {\n function getFilterEmptyStateImageUrl() {\n switch (props.filter) {\n case 'correct': return props.correctImageUrl;\n case 'incorrect': return props.incorrectImageUrl;\n case 'marking_required': return props.markingRequiredImageUrl;\n case 'skipped': return props.skippedImageUrl;\n }\n }\n\n function getFilterEmptyStatePhrase() {\n switch (props.filter) {\n case 'correct': return 'correctEmptyState';\n case 'incorrect': return 'incorrectEmptyState';\n case 'marking_required': return 'markingRequiredEmptyState';\n case 'skipped': return 'skippedEmptyState';\n }\n }\n\n return (\n <>\n <EmptyState className='m-4'>\n <EmptyState.Image src={getFilterEmptyStateImageUrl()} className='w-25 h-auto' />\n <EmptyState.Info>\n <Text namespace={namespace} phrase={getFilterEmptyStatePhrase()} />\n </EmptyState.Info>\n </EmptyState>\n </>\n );\n}\n\ninterface InteractionResponseListFiltersProps {\n filter: InteractionResponseFilterType;\n toggleFilter: (filter: InteractionResponseFilterType) => void\n}\n\nexport function InteractionResponseListFilters(props: InteractionResponseListFiltersProps) {\n function isFilterSelected(filterButton: InteractionResponseFilterType) {\n return filterButton === props.filter;\n }\n\n function getFilterClassName(filterButton: InteractionResponseFilterType) {\n return `rounded-pill bg-light ${isFilterSelected(filterButton) ? 'bg-dark text-white' : ''}`;\n }\n\n return (\n\n <div className='d-flex gap-2 m-3'>\n <button className={getFilterClassName('marking_required')} onClick={() => props.toggleFilter('marking_required')}>\n <Text namespace={namespace} phrase='markingRequired' />\n </button>\n <button className={getFilterClassName('correct')} onClick={() => props.toggleFilter('correct')}>\n <Text namespace={namespace} phrase='correct' />\n </button>\n <button className={getFilterClassName('incorrect')} onClick={() => props.toggleFilter('incorrect')}>\n <Text namespace={namespace} phrase='incorrect' />\n </button>\n <button className={getFilterClassName('skipped')} onClick={() => props.toggleFilter('skipped')}>\n <Text namespace={namespace} phrase='skipped' />\n </button>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.interactionResponseListHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractionResponseListHeaderProps {\n interaction: Interaction;\n}\n\nexport function InteractionResponseListHeader(props: InteractionResponseListHeaderProps): JSX.Element {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n return (\n <div className='rounded bg-white'>\n <div className='p-2 position-relative'>\n <div className='d-flex'>\n <InteractionLabel\n interaction={props.interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {!!suggestedResponse &&\n <div className='mt-2'>\n <strong>{getPhrase('suggestedResponse')}</strong>\n <p className='m-0'>{suggestedResponse}</p>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.submitMarkedAnswers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubmitMarkedAnswersProps {\n submit: () => void;\n disabled: boolean\n}\n\nexport function SubmitMarkedAnswers(props: SubmitMarkedAnswersProps): JSX.Element {\n return (\n <div className='d-flex justify-content-end'>\n <button\n className='btn btn-outline-dark'\n onClick={props.submit}\n disabled={props.disabled}\n >\n {getPhrase('submitAnswers')}\n </button>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"awaitingMarking\":\"PPNkp\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { InteractionResponseFilterType, InteractionResponseListFilters, InteractionResponseListFiltersEmptyStates } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters';\nimport { InteractionResponseListHeader } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader';\nimport { SubmitMarkedAnswers } from 'libs/shared/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractiveResultSet, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport styles from './interaction-response-list.scss';\n\nconst namespace = 'shared.interactionResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getResponsesToMark(\n interaction: Interaction,\n studentResults: StudentResults[]\n): HashObject {\n const responsesToMark = studentResults.filter(s => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n interaction,\n getStudentResult(s)\n );\n return correctness === InteractionCorrectness.AwaitingMarking;\n });\n\n return responsesToMark.reduce((acc, s) => ({\n ...acc,\n [s.user?.id || s.publicUser?.profileId]: true\n }), {});\n}\n\ninterface InteractionResponseListProps {\n interaction: Interaction\n results: InteractiveResultSet;\n markedAnswers: MarkedAnswerHash;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n imageCdnUrl: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n emptyStateImageUrl: string;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n}\n\nexport function InteractionResponseList(props: InteractionResponseListProps): JSX.Element {\n const [ filter, setFilter ] = React.useState<InteractionResponseFilterType>();\n\n const responsesToMark = getResponsesToMark(props.interaction, props.results.students);\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n if (!props.results.students?.length)\n return (\n <div className='d-flex flex-column h-100'>\n <EmptyState className='bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center'>\n <EmptyState.Image src={props.emptyStateImageUrl} size='small' />\n <EmptyState.Heading>\n {getPhrase('emptyStateHeading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateDescription')}\n </EmptyState.Info>\n </EmptyState>\n </div>\n );\n\n\n function toggleFilter(selectedFilter: InteractionResponseFilterType) {\n setFilter(filter === selectedFilter ? null : selectedFilter);\n }\n\n function filterStudentResults() {\n return props.results.students.filter(s => {\n const result = getStudentResult(s);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n const filterMap = {\n correct: InteractionCorrectness.Correct,\n incorrect: InteractionCorrectness.Incorrect,\n marking_required: InteractionCorrectness.AwaitingMarking,\n skipped: InteractionCorrectness.UnAnswered\n };\n\n return !filter || (filter in filterMap && correctness === filterMap[filter]);\n });\n }\n\n const filteredStudentResults = filterStudentResults();\n\n return (\n <>\n {props.reportsStyling && <InteractionResponseListHeader interaction={props.interaction} />}\n <div className={props.reportsStyling\n ? 'd-flex justify-content-end'\n : 'd-flex align-items-center justify-content-between border-bottom border-light px-3 py-2'\n }>\n {!props.reportsStyling && <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='studentAnswers' /></p>}\n {!!Object.keys(responsesToMark).length &&\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n }\n </div>\n <>\n {!props.reportsStyling && <InteractionResponseListFilters filter={filter} toggleFilter={toggleFilter} />}\n\n {!props.reportsStyling && !filteredStudentResults.length && filter && (\n <InteractionResponseListFiltersEmptyStates\n filter={filter}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n />\n )}\n \n {filteredStudentResults && (\n <ul className='list-unstyled mb-0'>\n {filteredStudentResults.map((s, idx) => {\n const anonymisedUserName = anonymiseUserName(s.user || s.publicUser, props.anonymiseUsers);\n const markingRequired = responsesToMark[s.user?.id || s.publicUser?.profileId];\n\n let className = props.reportsStyling ? 'bg-white p-2' : 'bg-white px-3 pt-3 pb-2';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking}`;\n\n return (\n <li key={idx}>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n )}\n {props.reportsStyling && !!responsesToMark.length &&\n <div className='mt-2'>\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n </div>\n }\n </>\n </>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\nexport function QuestionTableMissingWord(props: QuestionTableAnswersProps) {\n const replacePlaceholders = (str: string) => {\n if (!str) return '';\n\n return str.split(/({\\d+})/).map((part, index) => {\n const match = part.match(/{(\\d+)}/);\n\n if (match) {\n const key = match[1];\n\n const replacement = props.interaction.actionableItems.find(answer => +answer.order === +key);\n\n\n if (replacement) {\n return <span className='bg-white border border-gray-300 rounded p-1 lh-lg' key={index}>{replacement.name}</span>;\n }\n }\n\n return part;\n });\n };\n\n return (\n <div>\n <p className='mb-0'>{replacePlaceholders(props.interaction.data.sentence)}</p>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"fXno_\",\"answerImage\":\"pDAuW\",\"answerWidth\":\"YHK27\"};","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { MultipleChoiceInteractionAnswers } from 'libs/shared/components/interaction-answers/multiple-choice/MultipleChoiceInteractionAnswers';\n\nimport styles from './question-table-answers.scss';\n\nexport function QuestionTableMultipleChoice(props: QuestionTableAnswersProps) {\n const hasImages = !!ArrayHelper.first(props.interaction?.actionableItems).data?.imageUrl;\n\n if (!hasImages) {\n return (\n <ul className={`${styles.answerWidth} list-unstyled row g-2`}>\n {props.interaction.actionableItems.map(option => {\n return (\n <li key={option.id} className='col-12'>\n <div className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border py-1 px-2 m-0`}>\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </div>\n </li>\n );\n })}\n </ul>\n );\n }\n\n return (\n <div className={styles.answerWidth}>\n <MultipleChoiceInteractionAnswers\n interaction={props.interaction}\n size='sm'\n showFeedback={false}\n showCorrectnessIcons\n isDisplayOnly\n />\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './question-table-answers.scss';\n\nconst namespace = 'shared.questionTable';\n\nexport function QuestionTableShortAnswer(props: QuestionTableAnswersProps) {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n if (!suggestedResponse) return <></>;\n\n return (\n <div className={`${styles.answerWidth} bg-light-blue rounded p-2 mb-2`}>\n <div className='d-flex justify-content-between'>\n <p className='fw-semibold mb-2'>\n <Text namespace={namespace} phrase='suggestedResponse' />\n </p>\n </div>\n\n <p className='mb-0'>{suggestedResponse}</p>\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\n\nexport function QuestionTableTrueOrFalse(props: QuestionTableAnswersProps) {\n return (\n <ul className='list-unstyled d-flex gap-2'>\n {props.interaction.actionableItems.map(option => {\n return (\n <li\n key={option.id}\n className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border px-2 py-1 mb-2 w-50`}\n >\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </li>\n );\n })}\n </ul>\n );\n}","import React from 'react';\n\nimport { QuestionTableMissingWord } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord';\nimport { QuestionTableMultipleChoice } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice';\nimport { QuestionTableShortAnswer } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer';\nimport { QuestionTableTrueOrFalse } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse';\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { Interaction, InteractionTypeId } from 'libs/shared/interfaces';\n\nexport interface QuestionTableAnswersProps {\n interaction: Interaction;\n indexToLetter?: (index: number) => string;\n}\n\nexport function QuestionTableAnswers(props: QuestionTableAnswersProps) {\n function getQuestionTableAnswerComponent(): JSX.Element {\n switch (props.interaction.typeId) {\n case InteractionTypeId.MultipleChoice:\n return <QuestionTableMultipleChoice interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.TrueOrFalse:\n return <QuestionTableTrueOrFalse interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.ShortAnswer:\n return <QuestionTableShortAnswer interaction={props.interaction} />;\n case InteractionTypeId.MissingWord:\n return <QuestionTableMissingWord interaction={props.interaction} />;\n default: return null;\n }\n }\n\n const QuestionTableAnswerComponent = getQuestionTableAnswerComponent();\n\n if (!QuestionTableAnswerComponent) return <></>;\n\n return (\n <div className='w-100 mt-3'>\n {QuestionTableAnswerComponent}\n </div>\n );\n}","import React from 'react';\nimport { Column, ColumnInstance, Row, SortingRule } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { QuestionTableAnswers } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction sortScore(\n rowA: Row<InteractionWithResultsSummary>,\n rowB: Row<InteractionWithResultsSummary>,\n columnId: string\n): 1 | -1 {\n const cellA = rowA.cells.find(cell => cell.column.id === columnId).value;\n const cellB = rowB.cells.find(cell => cell.column.id === columnId).value;\n\n if (cellA.awaitingMarking)\n return -1;\n\n if (cellB.awaitingMarking)\n return 1;\n\n return cellA.percentCorrect >= cellB.percentCorrect\n ? 1\n : -1;\n}\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`d-flex ${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<InteractionWithResultsSummary>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={props.column.isSorted && 'fw-bold'}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport function getColumns(\n showAnswersInTable: boolean\n): Column<InteractionWithResultsSummary>[] {\n return [\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='#' />,\n accessor: 'questionNumber',\n id: 'index',\n Cell: ({ row: { original: { questionNumber } } }) => {\n return <CellWrapper>{questionNumber + 1}.</CellWrapper>;\n },\n width: 15,\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='question' />,\n accessor: 'data', // This isn't used but it's needed for the typings on row,\n Cell: ({ row: { original: interaction }, initialState: { selectedRowIds } }) => {\n const selectedRow = selectedRowIds?.[interaction?.id];\n\n return (\n <CellWrapper className='flex-column'>\n <div className={`${!selectedRow ? 'clamp-1' : ''} pe-2`}>\n <InteractionLabel interaction={interaction} containerClassName='d-flex' />\n </div>\n\n {showAnswersInTable && selectedRow && (\n <QuestionTableAnswers interaction={interaction} />\n )}\n </CellWrapper>\n );\n },\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='score' />,\n accessor: 'resultsSummary',\n id: 'correctlyAnswered',\n Cell: ({ value: { percentCorrect, awaitingMarking } }) => {\n if (awaitingMarking) {\n return (\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n tooltipClassName='d-block'\n showLabel\n />\n );\n }\n\n return (\n <PercentageIndicator\n percentage={percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n />\n );\n },\n width: 60,\n sortDescFirst: true,\n sortType: sortScore\n }\n ];\n}\n\n/**\n * Returns memoized table data. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetTableData(\n interactive: Interactive,\n results: InteractiveResultSet,\n refreshData: boolean,\n sortBy?: SortingRule<InteractionWithResultsSummary>\n): InteractionWithResultsSummary[] {\n return React.useMemo(() => {\n const flattenedInteractions = getInteractions(interactive);\n const questionNumbers: HashObject = flattenedInteractions.reduce((acc, interaction, index) => ({\n ...acc, [interaction.id]: index\n }), {});\n\n const interactions = flattenedInteractions.map(i => ({\n ...i,\n questionNumber: questionNumbers[i.id],\n resultsSummary: getInteractionResultsSummary(i, results)\n }));\n\n if (sortBy?.id === 'correctlyAnswered') {\n const sorted = ArrayHelper.sortBy(interactions, interaction => {\n if (interaction.resultsSummary.awaitingMarking)\n return -1;\n\n return interaction.resultsSummary.percentCorrect;\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n return interactions;\n }, [ refreshData, sortBy ]);\n}\n\nexport function indexToLetter(index: number) {\n return String.fromCharCode(index + 'A'.charCodeAt(0));\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface QuestionSummary {\n id?: string;\n count: number;\n isCorrect: boolean;\n label?: string | number;\n}\n\nexport function multipleChoiceSummary(\n interaction: Interaction,\n studentResults: InteractiveResultSet\n): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map((item, i) => {\n return {\n id: item.id,\n label: interaction.typeId === InteractionTypeId.MultipleChoice ? indexToLetter(i) : item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary)\n questionSummary.count++;\n });\n });\n\n return questionsSummary;\n}\n\nexport function missingWordSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map(item => {\n return {\n id: item.id,\n label: item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n questionsSummary.push({\n label: getPhrase('incorrect'),\n count: 0,\n isCorrect: false\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary && answer.status === InteractiveAnswerStatus.Correct) {\n questionSummary.count++;\n } else {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n\n incorrectSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}\n\nexport function markedSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = [\n {\n label: getPhrase('correct'),\n isCorrect: true,\n count: 0\n },\n {\n label: getPhrase('incorrect'),\n isCorrect: false,\n count: 0\n }\n ];\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n if (answer.status === InteractiveAnswerStatus.Correct) {\n const correctSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('correct') });\n correctSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.Incorrect) {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n incorrectSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.PendingReview) {\n let pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n\n if (!pendingSummary) {\n questionsSummary.push({\n label: getPhrase('pending'),\n count: 0,\n isCorrect: false\n });\n pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n }\n\n pendingSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { markedSummary, missingWordSummary, multipleChoiceSummary, QuestionSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface QuestionResultsSummaryProps {\n interaction: Interaction;\n results: InteractiveResultSet;\n}\n\nexport function QuestionResultsSummary(props: QuestionResultsSummaryProps) {\n const questionSummary = getQuestionSummary();\n const maxResponseCount = getMaxResponseCount();\n\n function getQuestionSummary(): QuestionSummary[] {\n if (!props.interaction || !props.results) return;\n\n let summaryMethod: (\n interaction: Interaction,\n results: InteractiveResultSet,\n interactionTypeId?: InteractionTypeId\n ) => QuestionSummary[];\n\n switch (props.interaction.typeId) {\n case InteractionTypeId.ShortAnswer:\n case InteractionTypeId.Illustration:\n summaryMethod = markedSummary;\n break;\n case InteractionTypeId.MissingWord:\n summaryMethod = missingWordSummary;\n break;\n case InteractionTypeId.MultipleChoice:\n case InteractionTypeId.TrueOrFalse:\n summaryMethod = multipleChoiceSummary;\n break;\n }\n\n return summaryMethod(props.interaction, props.results);\n }\n\n function getMaxResponseCount() {\n return questionSummary?.reduce((acc, summary) => summary.count > acc ? summary.count : acc, 0);\n }\n\n function getBarClassName(summary: QuestionSummary) {\n const className = 'border rounded me-2';\n\n if (!summary.count)\n return `${className} border-light bg-light px-1`;\n\n if (summary.label === getPhrase('pending'))\n return `${className} border-blue bg-light-blue`;\n\n if (summary.isCorrect)\n return `${className} border-green bg-light-green`;\n\n return `${className} border-red bg-light-red`;\n }\n\n return (\n <div className='border border-light rounded p-3 mb-3'>\n <div className='d-flex align-items-center gap-2 mb-3'>\n <div className='rounded-circle bg-light-teal text-teal'>\n <SvgContainer svgName={cvSvgLibrary.Lightbulb} size={SvgContainerSize.Large} />\n </div>\n <h2 className='h6 mb-0'>\n <span><Text namespace={namespace} phrase='questionSummary' /></span>\n </h2>\n </div>\n <div className='d-flex gap-2'>\n <div className='max-w-25'>\n {questionSummary?.map(summary => {\n return (\n <p key={summary.label} className='text-truncate mb-2'>{summary.label}</p>\n );\n })}\n </div>\n <div className='flex-grow-1'>\n {questionSummary?.map((summary, i) => {\n return (\n <div key={i} className='d-flex mb-2'>\n <div\n className={getBarClassName(summary)}\n style={{ width: `${(summary.count / maxResponseCount) * 100}%`, height: 20 }}>\n </div>\n <span>{summary.count}</span>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'shared.selectedInteractionEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SelectedInteractionEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function SelectedInteractionEmptyState(props: SelectedInteractionEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='rounded h-100 bg-white justify-content-center py-4'>\n <EmptyState.Image\n src={props.emptyStateUrl}\n size='small'\n />\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateText')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\nimport { Row, SortingRule } from 'react-table';\n\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InteractionResponseList } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList';\nimport { QuestionResultsSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary';\nimport { SelectedInteractionEmptyState } from 'libs/shared/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionById } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { getSortStudents, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interactive, InteractiveResultSet, StudentAnswer } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nimport { getColumns, useGetTableData } from './QuestionTableUtils';\n\ninterface QuestionTableProps {\n interactive: Interactive;\n results: InteractiveResultSet;\n markedAnswers: { [id: string]: StudentAnswer };\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n editSuggestedResponse?: () => void;\n imageCdnUrl: string;\n selectQuestionImageUrl: string;\n anonymiseUsers: boolean;\n sortBy?: SortStudentsBy;\n emptyStateImageUrl: string;\n markingRequiredImageUrl?: string;\n correctImageUrl?: string;\n incorrectImageUrl?: string;\n skippedImageUrl?: string;\n\n /**\n * As the table data is memoized, it must be prompted to recalculate.\n * Toggle `refreshTable` to do so.\n */\n refreshTable: boolean;\n selectedInteractionId?: string;\n showAnswersInTable?: boolean;\n theme: TableTheme;\n reportsStyling?: boolean;\n}\n\nexport function QuestionTable(props: QuestionTableProps): JSX.Element {\n const [ sortBy, setSortBy ] = React.useState<SortingRule<InteractionWithResultsSummary>[]>(\n getSortStudents(props.sortBy, 'correctlyAnswered')\n );\n const data = useGetTableData(props.interactive, props.results, props.refreshTable, ArrayHelper.first(sortBy));\n\n const selectedInteraction = props.selectedInteractionId &&\n getInteractionById(props.interactive, props.selectedInteractionId);\n\n function onSelectRow({ original: interaction }: Row<InteractionWithResultsSummary>): void {\n ScrollHelper.preventScrollTop();\n\n AppRouteHelper.updateParams(\n { interactionId: interaction.id },\n { merge: true }\n );\n }\n\n return (\n <div className='row'>\n <div className='col-6 flex-grow-1'>\n <Table\n key={props.selectedInteractionId}\n columns={getColumns(props.showAnswersInTable)}\n data={data}\n theme={props.theme}\n onSelectRow={onSelectRow}\n initialSelectedRowIds={selectedInteraction ? [selectedInteraction.id] : null}\n getRowId={(row: InteractionWithResultsSummary) => row.id}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n />\n </div>\n <div className='col-6 d-flex flex-column'>\n {!props.reportsStyling && props.selectedInteractionId && !!props.results.students?.length && (\n <QuestionResultsSummary\n interaction={selectedInteraction}\n results={props.results}\n />\n )}\n\n <div className='border border-light rounded flex-grow-1'>\n {!!selectedInteraction &&\n <InteractionResponseList\n interaction={selectedInteraction}\n results={props.results}\n markedAnswers={props.markedAnswers}\n addMarkedAnswers={props.addMarkedAnswers}\n submitMarkedAnswers={props.submitMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymiseUsers={props.anonymiseUsers}\n emptyStateImageUrl={props.emptyStateImageUrl}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n reportsStyling={props.reportsStyling}\n />\n }\n {!selectedInteraction && <SelectedInteractionEmptyState emptyStateUrl={props.selectQuestionImageUrl} />}\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"bk68v\"};","import React from 'react';\n\nimport styles from './partial-interactive-insights-questions.scss';\n\nexport function PartialInteractiveInsightsQuestions() {\n return (\n <div>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { QuestionTable } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTable';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ConfirmationPopup } from 'libs/shared/components/confirmation-popup/ConfirmationPopup';\nimport { TableTheme } from 'libs/shared/components/table/Table';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { getInsightsInteractiveTabs } from 'apps/insights/utils/InsightsAppLinkUtils';\nimport { InsightsHeaderView } from 'apps/insights/views/header/InsightsHeaderView';\nimport { PartialInteractiveInsightsQuestions } from 'apps/insights/views/interactive/questions/partial-loading/PartialInteractiveInsightsQuestions';\n\nconst namespace = 'shared.interactiveInsightsQuestions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n\nconst theme: TableTheme = {\n table: 'bg-white rounded border border-light h-100 pb-2',\n header: 'border-bottom px-3 py-2 mb-2',\n headerCell: 'd-flex align-items-center',\n cell: '',\n row: `px-3 py-2 bg-light-blue-hover`,\n selectedRow: 'bg-gray-100',\n sortIndicator: 'ms-2'\n};\n\ninterface InteractiveInsightsQuestionsViewProps {\n interactiveId: string;\n interactionId: string;\n sortBy: SortStudentsBy;\n}\n\nexport function InteractiveInsightsQuestionsView(props: InteractiveInsightsQuestionsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const [ showMarkConfirmationPopup, setShowMarkConfirmationPopup ] = React.useState(false);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = useFetchInteractiveResults(props.interactiveId, {\n ...getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams),\n ...getAudienceParams(audienceAppLinkParams)\n }, true);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n interactive.data?.id,\n interactiveMetadata.data?.id,\n () => setShowMarkConfirmationPopup(false)\n );\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n useHandleObjectError([ interactive, interactiveMetadata, results ]);\n\n const dataLoaded = interactive.data && interactiveMetadata.data && results.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n return (\n <div className='px-3'>\n <InsightsHeaderView\n audienceAppLinkParams={audienceAppLinkParams}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsInteractiveTabs(props.interactiveId, 'questions', params)}\n video={interactiveMetadata.data}\n />\n\n {!dataLoaded && <PartialInteractiveInsightsQuestions />}\n\n {dataLoaded &&\n <QuestionTable\n interactive={interactive.data}\n results={results.data}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={() => setShowMarkConfirmationPopup(true)}\n imageCdnUrl={config.data.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n refreshTable={results.isFetching || interactive.isFetching}\n emptyStateImageUrl={ImageUrls.Insights.NO_RESPONSES}\n selectQuestionImageUrl={ImageUrls.Insights.NO_DATA}\n anonymiseUsers={anonymiseUsers}\n sortBy={props.sortBy}\n showAnswersInTable\n theme={theme}\n correctImageUrl={ImageUrls.Insights.JIGSAW}\n incorrectImageUrl={ImageUrls.Insights.RED_JIGSAW}\n skippedImageUrl={ImageUrls.Insights.SKIPPED}\n markingRequiredImageUrl={ImageUrls.Insights.CLIPBOARD}\n />\n }\n\n {showMarkConfirmationPopup &&\n <ConfirmationPopup\n title={getPhrase('markPopupTitle', { smartCount: Object.keys(markedAnswers).length ?? 0 })}\n closePopup={() => setShowMarkConfirmationPopup(false)}\n confirmButtonText={getPhrase('submit')}\n confirmButtonVariant='dark'\n onClickConfirm={submitMarkedAnswers}\n >\n <p>{getPhrase('markPopupBody')}</p>\n </ConfirmationPopup>\n }\n </div>\n );\n}"],"names":["ScrollHelper","preventScrollTop","Radio","trigger","getPhrase","getClassName","props","className","showLabel","PendingIndicator","Indicator","title","spanHack","spanHackClassName","tooltipClassName","getSortStudents","sortBy","id","desc","shouldFilterStudent","filter","summary","awaitingMarking","percentCorrect","unanswered","ConfirmationPopup","showButtonSpinner","setShowButtonSpinner","closePopup","children","onClick","variant","cancelButtonVariant","text","cancelButtonText","onClickConfirm","confirmButtonText","confirmButtonVariant","showSpinner","disabled","disabledConfirmButton","defaultProps","namespace","InteractionResponseListFiltersEmptyStates","EmptyState","src","correctImageUrl","incorrectImageUrl","markingRequiredImageUrl","skippedImageUrl","getFilterEmptyStateImageUrl","Text","phrase","getFilterEmptyStatePhrase","InteractionResponseListFilters","getFilterClassName","filterButton","isFilterSelected","toggleFilter","LanguageService","InteractionResponseListHeader","suggestedResponse","interaction","data","InteractionLabel","iconClassName","SubmitMarkedAnswers","submit","InteractionResponseList","setFilter","responsesToMark","results","students","s","InteractiveCorrectnessHelper","InteractionCorrectness","reduce","acc","user","publicUser","profileId","numMarkedAnswers","Object","keys","markedAnswers","length","emptyStateImageUrl","size","filteredStudentResults","result","correctness","filterMap","correct","incorrect","marking_required","skipped","reportsStyling","submitMarkedAnswers","selectedFilter","map","idx","anonymisedUserName","anonymiseUsers","markingRequired","key","InteractionResponse","studentResults","markedStatus","markInteraction","addMarkedAnswers","imageCdnUrl","showStudentDetails","showFeedback","responseComponentClass","InteractionResponseItem","QuestionTableMissingWord","str","sentence","split","part","index","match","replacement","actionableItems","find","answer","order","name","QuestionTableMultipleChoice","ArrayHelper","imageUrl","MultipleChoiceInteractionAnswers","showCorrectnessIcons","isDisplayOnly","option","isCorrect","indexToLetter","QuestionTableShortAnswer","QuestionTableTrueOrFalse","QuestionTableAnswers","QuestionTableAnswerComponent","typeId","getQuestionTableAnswerComponent","sortScore","rowA","rowB","columnId","cellA","cells","cell","column","value","cellB","CellWrapper","HeaderCell","isSorted","phraseKey","String","fromCharCode","charCodeAt","multipleChoiceSummary","questionsSummary","item","i","label","count","forEach","student","latestAttempts","attempts","response","answers","questionSummary","missingWordSummary","push","status","InteractiveAnswerStatus","markedSummary","pendingSummary","QuestionResultsSummary","summaryMethod","getQuestionSummary","maxResponseCount","getBarClassName","SvgContainer","svgName","S","style","width","height","SelectedInteractionEmptyState","emptyStateUrl","QuestionTable","showAnswersInTable","setSortBy","interactive","refreshData","flattenedInteractions","questionNumbers","interactions","questionNumber","resultsSummary","sorted","reverse","useGetTableData","refreshTable","selectedInteraction","selectedInteractionId","Table","columns","Header","accessor","Cell","row","original","disableSortBy","selectedRowIds","initialState","selectedRow","containerClassName","PercentageIndicator","percentage","layout","sortDescFirst","sortType","theme","onSelectRow","AppRouteHelper","interactionId","merge","initialSelectedRowIds","getRowId","enableSort","manualSort","onSort","initialSortBy","selectQuestionImageUrl","PartialInteractiveInsightsQuestions","table","header","headerCell","sortIndicator","InteractiveInsightsQuestionsView","SharedViewModelKeys","useLockContentWidth","showMarkConfirmationPopup","setShowMarkConfirmationPopup","config","ConfigRequests","interactiveMetadata","InteractiveRequests","interactiveId","audienceAppLinkParams","dateRangeAppLinkParams","useSetPageMetadata","video","dataLoaded","params","InsightsHeaderView","tabs","isFetching","ImageUrls","smartCount"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/2962-7f2e4412f0-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/backbone/utils/ScrollHelper.ts","file:///app/packages/libs/shared/src/apps/analytics/components/pending-indicator/PendingIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/StudentTableUtils.ts","file:///app/packages/libs/shared/src/components/confirmation-popup/ConfirmationPopup.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/interaction-response-list.scss","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/question-table-answers.scss","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTableUtils.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTable.tsx","file:///app/packages/projects/lite/src/apps/insights/views/interactive/questions/partial-loading/partial-interactive-insights-questions.scss","file:///app/packages/projects/lite/src/apps/insights/views/interactive/questions/partial-loading/PartialInteractiveInsightsQuestions.tsx","file:///app/packages/projects/lite/src/apps/insights/views/interactive/questions/InteractiveInsightsQuestionsView.tsx"],"sourcesContent":["import { Radio } from 'backbone';\n\nimport { CommonChannels } from '../constants/CommonChannels';\n\nexport const ScrollHelper = {\n // Will prevent scrolling to the top of the page when applinks are triggered\n preventScrollTop(): void {\n Radio.channel(CommonChannels.SHELL).trigger('prevent:scroll:top');\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'interactives.pendingIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(props: PendingIndicatorProps): string {\n let className = 'd-flex align-items-center h-100';\n\n className += props.showLabel ? ' justify-content-between' : ' justify-content-center';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface PendingIndicatorProps {\n title?: string;\n className?: string;\n showLabel?: boolean;\n tooltipClassName?: string;\n}\n\nexport function PendingIndicator(props: PendingIndicatorProps): JSX.Element {\n const Indicator = () => (\n <div className={getClassName(props)}>\n {!!props.showLabel &&\n <em>{getPhrase('pending')}</em>\n }\n <PercentageIndicator />\n </div>\n );\n\n if (!props.title)\n return <Indicator />;\n\n return (\n <Tooltip title={props.title} spanHack spanHackClassName={props.tooltipClassName || 'h-100 w-100 d-flex align-items-center'}>\n <Indicator />\n </Tooltip>\n );\n}","import { SortingRule } from 'react-table';\n\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\n\nexport type SortStudentsBy = 'score_desc' | 'score_asc';\n\nexport function getSortStudents(sortBy: SortStudentsBy, id: string): SortingRule<any>[] {\n switch (sortBy) {\n case 'score_desc': return [{ id, desc: true }];\n case 'score_asc': return [{ id, desc: false }];\n default: return [];\n }\n}\n\nexport type FilterStudentsBy = 'not_completed' | 'marking_required' | 'helping_hand';\n\nexport function shouldFilterStudent(filter: FilterStudentsBy, summary: ResultsSummary): boolean {\n if (filter === 'marking_required' && !summary.awaitingMarking)\n return true;\n\n if (filter === 'helping_hand' && summary.percentCorrect >= ScoreThresholdInsights.HIGH)\n return true;\n\n if (filter === 'not_completed' && !summary.unanswered)\n return true;\n \n return false;\n}\n\n","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.confirmationPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ConfirmationPopupProps {\n title: string;\n onClickConfirm: () => void;\n confirmButtonText?: string;\n cancelButtonText?: string;\n confirmButtonVariant?: ButtonProps['variant'];\n cancelButtonVariant?: ButtonProps['variant'];\n disabledConfirmButton?: boolean;\n}\n\nConfirmationPopup.defaultProps = {\n confirmButtonVariant: 'primary',\n cancelButtonVariant: 'link'\n};\n\ntype PropTypes = React.PropsWithChildren<ConfirmationPopupProps & PopupViewProps>;\n\nexport function ConfirmationPopup(props: PropTypes): React.ReactElement {\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n return (\n <Popup title={props.title} closePopup={props.closePopup}>\n <>\n {props.children}\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.closePopup}\n variant={props.cancelButtonVariant}\n text={props.cancelButtonText || getPhrase('cancel')}\n />\n <PopupButtons.Submit\n onClick={() => { setShowButtonSpinner(true); props.onClickConfirm(); }}\n text={props.confirmButtonText || getPhrase('confirm')}\n variant={props.confirmButtonVariant}\n showSpinner={showButtonSpinner}\n disabled={props.disabledConfirmButton}\n />\n </PopupButtons>\n </>\n </Popup>\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.interactionResponseList';\n\nexport type InteractionResponseFilterType = 'marking_required' | 'correct' | 'incorrect' | 'skipped';\n\ninterface InteractionResponseListFiltersEmptyStatesProps {\n filter: InteractionResponseFilterType;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n}\n\nexport function InteractionResponseListFiltersEmptyStates(props: InteractionResponseListFiltersEmptyStatesProps) {\n function getFilterEmptyStateImageUrl() {\n switch (props.filter) {\n case 'correct': return props.correctImageUrl;\n case 'incorrect': return props.incorrectImageUrl;\n case 'marking_required': return props.markingRequiredImageUrl;\n case 'skipped': return props.skippedImageUrl;\n }\n }\n\n function getFilterEmptyStatePhrase() {\n switch (props.filter) {\n case 'correct': return 'correctEmptyState';\n case 'incorrect': return 'incorrectEmptyState';\n case 'marking_required': return 'markingRequiredEmptyState';\n case 'skipped': return 'skippedEmptyState';\n }\n }\n\n return (\n <>\n <EmptyState className='m-4'>\n <EmptyState.Image src={getFilterEmptyStateImageUrl()} className='w-25 h-auto' />\n <EmptyState.Info>\n <Text namespace={namespace} phrase={getFilterEmptyStatePhrase()} />\n </EmptyState.Info>\n </EmptyState>\n </>\n );\n}\n\ninterface InteractionResponseListFiltersProps {\n filter: InteractionResponseFilterType;\n toggleFilter: (filter: InteractionResponseFilterType) => void\n}\n\nexport function InteractionResponseListFilters(props: InteractionResponseListFiltersProps) {\n function isFilterSelected(filterButton: InteractionResponseFilterType) {\n return filterButton === props.filter;\n }\n\n function getFilterClassName(filterButton: InteractionResponseFilterType) {\n return `rounded-pill bg-light ${isFilterSelected(filterButton) ? 'bg-dark text-white' : ''}`;\n }\n\n return (\n\n <div className='d-flex gap-2 m-3'>\n <button className={getFilterClassName('marking_required')} onClick={() => props.toggleFilter('marking_required')}>\n <Text namespace={namespace} phrase='markingRequired' />\n </button>\n <button className={getFilterClassName('correct')} onClick={() => props.toggleFilter('correct')}>\n <Text namespace={namespace} phrase='correct' />\n </button>\n <button className={getFilterClassName('incorrect')} onClick={() => props.toggleFilter('incorrect')}>\n <Text namespace={namespace} phrase='incorrect' />\n </button>\n <button className={getFilterClassName('skipped')} onClick={() => props.toggleFilter('skipped')}>\n <Text namespace={namespace} phrase='skipped' />\n </button>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.interactionResponseListHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractionResponseListHeaderProps {\n interaction: Interaction;\n}\n\nexport function InteractionResponseListHeader(props: InteractionResponseListHeaderProps): JSX.Element {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n return (\n <div className='rounded bg-white'>\n <div className='p-2 position-relative'>\n <div className='d-flex'>\n <InteractionLabel\n interaction={props.interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {!!suggestedResponse &&\n <div className='mt-2'>\n <strong>{getPhrase('suggestedResponse')}</strong>\n <p className='m-0'>{suggestedResponse}</p>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.submitMarkedAnswers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubmitMarkedAnswersProps {\n submit: () => void;\n disabled: boolean\n}\n\nexport function SubmitMarkedAnswers(props: SubmitMarkedAnswersProps): JSX.Element {\n return (\n <div className='d-flex justify-content-end'>\n <button\n className='btn btn-outline-dark'\n onClick={props.submit}\n disabled={props.disabled}\n >\n {getPhrase('submitAnswers')}\n </button>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"awaitingMarking\":\"PPNkp\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { InteractionResponseFilterType, InteractionResponseListFilters, InteractionResponseListFiltersEmptyStates } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters';\nimport { InteractionResponseListHeader } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader';\nimport { SubmitMarkedAnswers } from 'libs/shared/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractiveResultSet, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport styles from './interaction-response-list.scss';\n\nconst namespace = 'shared.interactionResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getResponsesToMark(\n interaction: Interaction,\n studentResults: StudentResults[]\n): HashObject {\n const responsesToMark = studentResults.filter(s => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n interaction,\n getStudentResult(s)\n );\n return correctness === InteractionCorrectness.AwaitingMarking;\n });\n\n return responsesToMark.reduce((acc, s) => ({\n ...acc,\n [s.user?.id || s.publicUser?.profileId]: true\n }), {});\n}\n\ninterface InteractionResponseListProps {\n interaction: Interaction\n results: InteractiveResultSet;\n markedAnswers: MarkedAnswerHash;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n imageCdnUrl: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n emptyStateImageUrl: string;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n}\n\nexport function InteractionResponseList(props: InteractionResponseListProps): JSX.Element {\n const [ filter, setFilter ] = React.useState<InteractionResponseFilterType>();\n\n const responsesToMark = getResponsesToMark(props.interaction, props.results.students);\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n if (!props.results.students?.length)\n return (\n <div className='d-flex flex-column h-100'>\n <EmptyState className='bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center'>\n <EmptyState.Image src={props.emptyStateImageUrl} size='small' />\n <EmptyState.Heading>\n {getPhrase('emptyStateHeading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateDescription')}\n </EmptyState.Info>\n </EmptyState>\n </div>\n );\n\n\n function toggleFilter(selectedFilter: InteractionResponseFilterType) {\n setFilter(filter === selectedFilter ? null : selectedFilter);\n }\n\n function filterStudentResults() {\n return props.results.students.filter(s => {\n const result = getStudentResult(s);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n const filterMap = {\n correct: InteractionCorrectness.Correct,\n incorrect: InteractionCorrectness.Incorrect,\n marking_required: InteractionCorrectness.AwaitingMarking,\n skipped: InteractionCorrectness.UnAnswered\n };\n\n return !filter || (filter in filterMap && correctness === filterMap[filter]);\n });\n }\n\n const filteredStudentResults = filterStudentResults();\n\n return (\n <>\n {props.reportsStyling && <InteractionResponseListHeader interaction={props.interaction} />}\n <div className={props.reportsStyling\n ? 'd-flex justify-content-end'\n : 'd-flex align-items-center justify-content-between border-bottom border-light px-3 py-2'\n }>\n {!props.reportsStyling && <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='studentAnswers' /></p>}\n {!!Object.keys(responsesToMark).length &&\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n }\n </div>\n <>\n {!props.reportsStyling && <InteractionResponseListFilters filter={filter} toggleFilter={toggleFilter} />}\n\n {!props.reportsStyling && !filteredStudentResults.length && filter && (\n <InteractionResponseListFiltersEmptyStates\n filter={filter}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n />\n )}\n \n {filteredStudentResults && (\n <ul className='list-unstyled mb-0'>\n {filteredStudentResults.map((s, idx) => {\n const anonymisedUserName = anonymiseUserName(s.user || s.publicUser, props.anonymiseUsers);\n const markingRequired = responsesToMark[s.user?.id || s.publicUser?.profileId];\n\n let className = props.reportsStyling ? 'bg-white p-2' : 'bg-white px-3 pt-3 pb-2';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking}`;\n\n return (\n <li key={idx}>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n )}\n {props.reportsStyling && !!responsesToMark.length &&\n <div className='mt-2'>\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n </div>\n }\n </>\n </>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\nexport function QuestionTableMissingWord(props: QuestionTableAnswersProps) {\n const replacePlaceholders = (str: string) => {\n if (!str) return '';\n\n return str.split(/({\\d+})/).map((part, index) => {\n const match = part.match(/{(\\d+)}/);\n\n if (match) {\n const key = match[1];\n\n const replacement = props.interaction.actionableItems.find(answer => +answer.order === +key);\n\n\n if (replacement) {\n return <span className='bg-white border border-gray-300 rounded p-1 lh-lg' key={index}>{replacement.name}</span>;\n }\n }\n\n return part;\n });\n };\n\n return (\n <div>\n <p className='mb-0'>{replacePlaceholders(props.interaction.data.sentence)}</p>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"fXno_\",\"answerImage\":\"pDAuW\",\"answerWidth\":\"YHK27\"};","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { MultipleChoiceInteractionAnswers } from 'libs/shared/components/interaction-answers/multiple-choice/MultipleChoiceInteractionAnswers';\n\nimport styles from './question-table-answers.scss';\n\nexport function QuestionTableMultipleChoice(props: QuestionTableAnswersProps) {\n const hasImages = !!ArrayHelper.first(props.interaction?.actionableItems).data?.imageUrl;\n\n if (!hasImages) {\n return (\n <ul className={`${styles.answerWidth} list-unstyled row g-2`}>\n {props.interaction.actionableItems.map(option => {\n return (\n <li key={option.id} className='col-12'>\n <div className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border py-1 px-2 m-0`}>\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </div>\n </li>\n );\n })}\n </ul>\n );\n }\n\n return (\n <div className={styles.answerWidth}>\n <MultipleChoiceInteractionAnswers\n interaction={props.interaction}\n size='sm'\n showFeedback={false}\n showCorrectnessIcons\n isDisplayOnly\n />\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './question-table-answers.scss';\n\nconst namespace = 'shared.questionTable';\n\nexport function QuestionTableShortAnswer(props: QuestionTableAnswersProps) {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n if (!suggestedResponse) return <></>;\n\n return (\n <div className={`${styles.answerWidth} bg-light-blue rounded p-2 mb-2`}>\n <div className='d-flex justify-content-between'>\n <p className='fw-semibold mb-2'>\n <Text namespace={namespace} phrase='suggestedResponse' />\n </p>\n </div>\n\n <p className='mb-0'>{suggestedResponse}</p>\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\n\nexport function QuestionTableTrueOrFalse(props: QuestionTableAnswersProps) {\n return (\n <ul className='list-unstyled d-flex gap-2'>\n {props.interaction.actionableItems.map(option => {\n return (\n <li\n key={option.id}\n className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border px-2 py-1 mb-2 w-50`}\n >\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </li>\n );\n })}\n </ul>\n );\n}","import React from 'react';\n\nimport { QuestionTableMissingWord } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord';\nimport { QuestionTableMultipleChoice } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice';\nimport { QuestionTableShortAnswer } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer';\nimport { QuestionTableTrueOrFalse } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse';\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { Interaction, InteractionTypeId } from 'libs/shared/interfaces';\n\nexport interface QuestionTableAnswersProps {\n interaction: Interaction;\n indexToLetter?: (index: number) => string;\n}\n\nexport function QuestionTableAnswers(props: QuestionTableAnswersProps) {\n function getQuestionTableAnswerComponent(): JSX.Element {\n switch (props.interaction.typeId) {\n case InteractionTypeId.MultipleChoice:\n return <QuestionTableMultipleChoice interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.TrueOrFalse:\n return <QuestionTableTrueOrFalse interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.ShortAnswer:\n return <QuestionTableShortAnswer interaction={props.interaction} />;\n case InteractionTypeId.MissingWord:\n return <QuestionTableMissingWord interaction={props.interaction} />;\n default: return null;\n }\n }\n\n const QuestionTableAnswerComponent = getQuestionTableAnswerComponent();\n\n if (!QuestionTableAnswerComponent) return <></>;\n\n return (\n <div className='w-100 mt-3'>\n {QuestionTableAnswerComponent}\n </div>\n );\n}","import React from 'react';\nimport { Column, ColumnInstance, Row, SortingRule } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { QuestionTableAnswers } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction sortScore(\n rowA: Row<InteractionWithResultsSummary>,\n rowB: Row<InteractionWithResultsSummary>,\n columnId: string\n): 1 | -1 {\n const cellA = rowA.cells.find(cell => cell.column.id === columnId).value;\n const cellB = rowB.cells.find(cell => cell.column.id === columnId).value;\n\n if (cellA.awaitingMarking)\n return -1;\n\n if (cellB.awaitingMarking)\n return 1;\n\n return cellA.percentCorrect >= cellB.percentCorrect\n ? 1\n : -1;\n}\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`d-flex ${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<InteractionWithResultsSummary>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={props.column.isSorted && 'fw-bold'}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport function getColumns(\n showAnswersInTable: boolean\n): Column<InteractionWithResultsSummary>[] {\n return [\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='#' />,\n accessor: 'questionNumber',\n id: 'index',\n Cell: ({ row: { original: { questionNumber } } }) => {\n return <CellWrapper>{questionNumber + 1}.</CellWrapper>;\n },\n width: 15,\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='question' />,\n accessor: 'data', // This isn't used but it's needed for the typings on row,\n Cell: ({ row: { original: interaction }, initialState: { selectedRowIds } }) => {\n const selectedRow = selectedRowIds?.[interaction?.id];\n\n return (\n <CellWrapper className='flex-column'>\n <div className={`${!selectedRow ? 'clamp-1' : ''} pe-2`}>\n <InteractionLabel interaction={interaction} containerClassName='d-flex' />\n </div>\n\n {showAnswersInTable && selectedRow && (\n <QuestionTableAnswers interaction={interaction} />\n )}\n </CellWrapper>\n );\n },\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='score' />,\n accessor: 'resultsSummary',\n id: 'correctlyAnswered',\n Cell: ({ value: { percentCorrect, awaitingMarking } }) => {\n if (awaitingMarking) {\n return (\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n tooltipClassName='d-block'\n showLabel\n />\n );\n }\n\n return (\n <PercentageIndicator\n percentage={percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n />\n );\n },\n width: 60,\n sortDescFirst: true,\n sortType: sortScore\n }\n ];\n}\n\n/**\n * Returns memoized table data. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetTableData(\n interactive: Interactive,\n results: InteractiveResultSet,\n refreshData: boolean,\n sortBy?: SortingRule<InteractionWithResultsSummary>\n): InteractionWithResultsSummary[] {\n return React.useMemo(() => {\n const flattenedInteractions = getInteractions(interactive);\n const questionNumbers: HashObject = flattenedInteractions.reduce((acc, interaction, index) => ({\n ...acc, [interaction.id]: index\n }), {});\n\n const interactions = flattenedInteractions.map(i => ({\n ...i,\n questionNumber: questionNumbers[i.id],\n resultsSummary: getInteractionResultsSummary(i, results)\n }));\n\n if (sortBy?.id === 'correctlyAnswered') {\n const sorted = ArrayHelper.sortBy(interactions, interaction => {\n if (interaction.resultsSummary.awaitingMarking)\n return -1;\n\n return interaction.resultsSummary.percentCorrect;\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n return interactions;\n }, [ refreshData, sortBy ]);\n}\n\nexport function indexToLetter(index: number) {\n return String.fromCharCode(index + 'A'.charCodeAt(0));\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface QuestionSummary {\n id?: string;\n count: number;\n isCorrect: boolean;\n label?: string | number;\n}\n\nexport function multipleChoiceSummary(\n interaction: Interaction,\n studentResults: InteractiveResultSet\n): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map((item, i) => {\n return {\n id: item.id,\n label: interaction.typeId === InteractionTypeId.MultipleChoice ? indexToLetter(i) : item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary)\n questionSummary.count++;\n });\n });\n\n return questionsSummary;\n}\n\nexport function missingWordSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map(item => {\n return {\n id: item.id,\n label: item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n questionsSummary.push({\n label: getPhrase('incorrect'),\n count: 0,\n isCorrect: false\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary && answer.status === InteractiveAnswerStatus.Correct) {\n questionSummary.count++;\n } else {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n\n incorrectSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}\n\nexport function markedSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = [\n {\n label: getPhrase('correct'),\n isCorrect: true,\n count: 0\n },\n {\n label: getPhrase('incorrect'),\n isCorrect: false,\n count: 0\n }\n ];\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n if (answer.status === InteractiveAnswerStatus.Correct) {\n const correctSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('correct') });\n correctSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.Incorrect) {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n incorrectSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.PendingReview) {\n let pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n\n if (!pendingSummary) {\n questionsSummary.push({\n label: getPhrase('pending'),\n count: 0,\n isCorrect: false\n });\n pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n }\n\n pendingSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { markedSummary, missingWordSummary, multipleChoiceSummary, QuestionSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface QuestionResultsSummaryProps {\n interaction: Interaction;\n results: InteractiveResultSet;\n}\n\nexport function QuestionResultsSummary(props: QuestionResultsSummaryProps) {\n const questionSummary = getQuestionSummary();\n const maxResponseCount = getMaxResponseCount();\n\n function getQuestionSummary(): QuestionSummary[] {\n if (!props.interaction || !props.results) return;\n\n let summaryMethod: (\n interaction: Interaction,\n results: InteractiveResultSet,\n interactionTypeId?: InteractionTypeId\n ) => QuestionSummary[];\n\n switch (props.interaction.typeId) {\n case InteractionTypeId.ShortAnswer:\n case InteractionTypeId.Illustration:\n summaryMethod = markedSummary;\n break;\n case InteractionTypeId.MissingWord:\n summaryMethod = missingWordSummary;\n break;\n case InteractionTypeId.MultipleChoice:\n case InteractionTypeId.TrueOrFalse:\n summaryMethod = multipleChoiceSummary;\n break;\n }\n\n return summaryMethod(props.interaction, props.results);\n }\n\n function getMaxResponseCount() {\n return questionSummary?.reduce((acc, summary) => summary.count > acc ? summary.count : acc, 0);\n }\n\n function getBarClassName(summary: QuestionSummary) {\n const className = 'border rounded me-2';\n\n if (!summary.count)\n return `${className} border-light bg-light px-1`;\n\n if (summary.label === getPhrase('pending'))\n return `${className} border-blue bg-light-blue`;\n\n if (summary.isCorrect)\n return `${className} border-green bg-light-green`;\n\n return `${className} border-red bg-light-red`;\n }\n\n return (\n <div className='border border-light rounded p-3 mb-3'>\n <div className='d-flex align-items-center gap-2 mb-3'>\n <div className='rounded-circle bg-light-teal text-teal'>\n <SvgContainer svgName={cvSvgLibrary.Lightbulb} size={SvgContainerSize.Large} />\n </div>\n <h2 className='h6 mb-0'>\n <span><Text namespace={namespace} phrase='questionSummary' /></span>\n </h2>\n </div>\n <div className='d-flex gap-2'>\n <div className='max-w-25'>\n {questionSummary?.map(summary => {\n return (\n <p key={summary.label} className='text-truncate mb-2'>{summary.label}</p>\n );\n })}\n </div>\n <div className='flex-grow-1'>\n {questionSummary?.map((summary, i) => {\n return (\n <div key={i} className='d-flex mb-2'>\n <div\n className={getBarClassName(summary)}\n style={{ width: `${(summary.count / maxResponseCount) * 100}%`, height: 20 }}>\n </div>\n <span>{summary.count}</span>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'shared.selectedInteractionEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SelectedInteractionEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function SelectedInteractionEmptyState(props: SelectedInteractionEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='rounded h-100 bg-white justify-content-center py-4'>\n <EmptyState.Image\n src={props.emptyStateUrl}\n size='small'\n />\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateText')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\nimport { Row, SortingRule } from 'react-table';\n\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InteractionResponseList } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList';\nimport { QuestionResultsSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary';\nimport { SelectedInteractionEmptyState } from 'libs/shared/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionById } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { getSortStudents, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interactive, InteractiveResultSet, StudentAnswer } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nimport { getColumns, useGetTableData } from './QuestionTableUtils';\n\ninterface QuestionTableProps {\n interactive: Interactive;\n results: InteractiveResultSet;\n markedAnswers: { [id: string]: StudentAnswer };\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n editSuggestedResponse?: () => void;\n imageCdnUrl: string;\n selectQuestionImageUrl: string;\n anonymiseUsers: boolean;\n sortBy?: SortStudentsBy;\n emptyStateImageUrl: string;\n markingRequiredImageUrl?: string;\n correctImageUrl?: string;\n incorrectImageUrl?: string;\n skippedImageUrl?: string;\n\n /**\n * As the table data is memoized, it must be prompted to recalculate.\n * Toggle `refreshTable` to do so.\n */\n refreshTable: boolean;\n selectedInteractionId?: string;\n showAnswersInTable?: boolean;\n theme: TableTheme;\n reportsStyling?: boolean;\n}\n\nexport function QuestionTable(props: QuestionTableProps): JSX.Element {\n const [ sortBy, setSortBy ] = React.useState<SortingRule<InteractionWithResultsSummary>[]>(\n getSortStudents(props.sortBy, 'correctlyAnswered')\n );\n const data = useGetTableData(props.interactive, props.results, props.refreshTable, ArrayHelper.first(sortBy));\n\n const selectedInteraction = props.selectedInteractionId &&\n getInteractionById(props.interactive, props.selectedInteractionId);\n\n function onSelectRow({ original: interaction }: Row<InteractionWithResultsSummary>): void {\n ScrollHelper.preventScrollTop();\n\n AppRouteHelper.updateParams(\n { interactionId: interaction.id },\n { merge: true }\n );\n }\n\n return (\n <div className='row'>\n <div className='col-6 flex-grow-1'>\n <Table\n key={props.selectedInteractionId}\n columns={getColumns(props.showAnswersInTable)}\n data={data}\n theme={props.theme}\n onSelectRow={onSelectRow}\n initialSelectedRowIds={selectedInteraction ? [selectedInteraction.id] : null}\n getRowId={(row: InteractionWithResultsSummary) => row.id}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n />\n </div>\n <div className='col-6 d-flex flex-column'>\n {!props.reportsStyling && props.selectedInteractionId && !!props.results.students?.length && (\n <QuestionResultsSummary\n interaction={selectedInteraction}\n results={props.results}\n />\n )}\n\n <div className='border border-light rounded flex-grow-1'>\n {!!selectedInteraction &&\n <InteractionResponseList\n interaction={selectedInteraction}\n results={props.results}\n markedAnswers={props.markedAnswers}\n addMarkedAnswers={props.addMarkedAnswers}\n submitMarkedAnswers={props.submitMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymiseUsers={props.anonymiseUsers}\n emptyStateImageUrl={props.emptyStateImageUrl}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n reportsStyling={props.reportsStyling}\n />\n }\n {!selectedInteraction && <SelectedInteractionEmptyState emptyStateUrl={props.selectQuestionImageUrl} />}\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"bk68v\"};","import React from 'react';\n\nimport styles from './partial-interactive-insights-questions.scss';\n\nexport function PartialInteractiveInsightsQuestions() {\n return (\n <div>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { QuestionTable } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTable';\nimport { useFetchInteractiveResults } from 'libs/shared/apps/analytics/hooks/UseFetchInteractiveResults';\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ConfirmationPopup } from 'libs/shared/components/confirmation-popup/ConfirmationPopup';\nimport { TableTheme } from 'libs/shared/components/table/Table';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { getInsightsInteractiveTabs } from 'apps/insights/utils/InsightsAppLinkUtils';\nimport { InsightsHeaderView } from 'apps/insights/views/header/InsightsHeaderView';\nimport { PartialInteractiveInsightsQuestions } from 'apps/insights/views/interactive/questions/partial-loading/PartialInteractiveInsightsQuestions';\n\nconst namespace = 'shared.interactiveInsightsQuestions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n\nconst theme: TableTheme = {\n table: 'bg-white rounded border border-light h-100 pb-2',\n header: 'border-bottom px-3 py-2 mb-2',\n headerCell: 'd-flex align-items-center',\n cell: '',\n row: `px-3 py-2 bg-light-blue-hover`,\n selectedRow: 'bg-gray-100',\n sortIndicator: 'ms-2'\n};\n\ninterface InteractiveInsightsQuestionsViewProps {\n interactiveId: string;\n interactionId: string;\n sortBy: SortStudentsBy;\n}\n\nexport function InteractiveInsightsQuestionsView(props: InteractiveInsightsQuestionsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const [ showMarkConfirmationPopup, setShowMarkConfirmationPopup ] = React.useState(false);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(props.interactiveId)\n );\n\n const interactive = Flight.useBasicFetch<Interactive>(interactiveMetadata.data?.interactiveId &&\n InteractiveRequests.interactive(interactiveMetadata.data.interactiveId));\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const results = useFetchInteractiveResults(props.interactiveId, {\n ...getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams),\n ...getAudienceParams(audienceAppLinkParams)\n }, true);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n interactive.data?.id,\n interactiveMetadata.data?.id,\n () => setShowMarkConfirmationPopup(false)\n );\n\n useSetPageMetadata({ title: interactiveMetadata.data ? getPhrase('pageTitle', { video: interactiveMetadata.data?.name }) : null });\n useHandleObjectError([ interactive, interactiveMetadata, results ]);\n\n const dataLoaded = interactive.data && interactiveMetadata.data && results.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n return (\n <div className='px-3'>\n <InsightsHeaderView\n audienceAppLinkParams={audienceAppLinkParams}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsInteractiveTabs(props.interactiveId, 'questions', params)}\n video={interactiveMetadata.data}\n />\n\n {!dataLoaded && <PartialInteractiveInsightsQuestions />}\n\n {dataLoaded &&\n <QuestionTable\n interactive={interactive.data}\n results={results.data}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={() => setShowMarkConfirmationPopup(true)}\n imageCdnUrl={config.data.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n refreshTable={results.isFetching || interactive.isFetching}\n emptyStateImageUrl={ImageUrls.Insights.NO_RESPONSES}\n selectQuestionImageUrl={ImageUrls.Insights.NO_DATA}\n anonymiseUsers={anonymiseUsers}\n sortBy={props.sortBy}\n showAnswersInTable\n theme={theme}\n correctImageUrl={ImageUrls.Insights.JIGSAW}\n incorrectImageUrl={ImageUrls.Insights.RED_JIGSAW}\n skippedImageUrl={ImageUrls.Insights.SKIPPED}\n markingRequiredImageUrl={ImageUrls.Insights.CLIPBOARD}\n />\n }\n\n {showMarkConfirmationPopup &&\n <ConfirmationPopup\n title={getPhrase('markPopupTitle', { smartCount: Object.keys(markedAnswers).length ?? 0 })}\n closePopup={() => setShowMarkConfirmationPopup(false)}\n confirmButtonText={getPhrase('submit')}\n confirmButtonVariant='dark'\n onClickConfirm={submitMarkedAnswers}\n >\n <p>{getPhrase('markPopupBody')}</p>\n </ConfirmationPopup>\n }\n </div>\n );\n}"],"names":["ScrollHelper","preventScrollTop","Radio","trigger","getPhrase","getClassName","props","className","showLabel","PendingIndicator","Indicator","title","spanHack","spanHackClassName","tooltipClassName","getSortStudents","sortBy","id","desc","shouldFilterStudent","filter","summary","awaitingMarking","percentCorrect","unanswered","ConfirmationPopup","showButtonSpinner","setShowButtonSpinner","closePopup","children","onClick","variant","cancelButtonVariant","text","cancelButtonText","onClickConfirm","confirmButtonText","confirmButtonVariant","showSpinner","disabled","disabledConfirmButton","defaultProps","namespace","InteractionResponseListFiltersEmptyStates","EmptyState","src","correctImageUrl","incorrectImageUrl","markingRequiredImageUrl","skippedImageUrl","getFilterEmptyStateImageUrl","Text","phrase","getFilterEmptyStatePhrase","InteractionResponseListFilters","getFilterClassName","filterButton","isFilterSelected","toggleFilter","LanguageService","InteractionResponseListHeader","suggestedResponse","interaction","data","InteractionLabel","iconClassName","SubmitMarkedAnswers","submit","InteractionResponseList","setFilter","responsesToMark","results","students","s","InteractiveCorrectnessHelper","InteractionCorrectness","reduce","acc","user","publicUser","profileId","numMarkedAnswers","Object","keys","markedAnswers","length","emptyStateImageUrl","size","filteredStudentResults","result","correctness","filterMap","correct","incorrect","marking_required","skipped","reportsStyling","submitMarkedAnswers","selectedFilter","map","idx","anonymisedUserName","anonymiseUsers","markingRequired","key","InteractionResponse","studentResults","markedStatus","markInteraction","addMarkedAnswers","imageCdnUrl","showStudentDetails","showFeedback","responseComponentClass","InteractionResponseItem","QuestionTableMissingWord","str","sentence","split","part","index","match","replacement","actionableItems","find","answer","order","name","QuestionTableMultipleChoice","ArrayHelper","imageUrl","MultipleChoiceInteractionAnswers","showCorrectnessIcons","isDisplayOnly","option","isCorrect","indexToLetter","QuestionTableShortAnswer","QuestionTableTrueOrFalse","QuestionTableAnswers","QuestionTableAnswerComponent","typeId","getQuestionTableAnswerComponent","sortScore","rowA","rowB","columnId","cellA","cells","cell","column","value","cellB","CellWrapper","HeaderCell","isSorted","phraseKey","String","fromCharCode","charCodeAt","multipleChoiceSummary","questionsSummary","item","i","label","count","forEach","student","latestAttempts","attempts","response","answers","questionSummary","missingWordSummary","push","status","InteractiveAnswerStatus","markedSummary","pendingSummary","QuestionResultsSummary","summaryMethod","getQuestionSummary","maxResponseCount","getBarClassName","SvgContainer","svgName","S","style","width","height","SelectedInteractionEmptyState","emptyStateUrl","QuestionTable","showAnswersInTable","setSortBy","interactive","refreshData","flattenedInteractions","questionNumbers","interactions","questionNumber","resultsSummary","sorted","reverse","useGetTableData","refreshTable","selectedInteraction","selectedInteractionId","Table","columns","Header","accessor","Cell","row","original","disableSortBy","selectedRowIds","initialState","selectedRow","containerClassName","PercentageIndicator","percentage","layout","sortDescFirst","sortType","theme","onSelectRow","AppRouteHelper","interactionId","merge","initialSelectedRowIds","getRowId","enableSort","manualSort","onSort","initialSortBy","selectQuestionImageUrl","PartialInteractiveInsightsQuestions","table","header","headerCell","sortIndicator","InteractiveInsightsQuestionsView","SharedViewModelKeys","useLockContentWidth","showMarkConfirmationPopup","setShowMarkConfirmationPopup","config","ConfigRequests","interactiveMetadata","InteractiveRequests","interactiveId","audienceAppLinkParams","dateRangeAppLinkParams","useSetPageMetadata","video","dataLoaded","params","InsightsHeaderView","tabs","isFetching","ImageUrls","smartCount"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2988],{22988:(e,t,n)=>{n.d(t,{_W:()=>ut});var a=n(32735),r=n(2715),o=n(96256);function l(e){return(0,o.Z)(1,arguments),(0,r.default)(e,{weekStartsOn:1})}var i=n(77866);function s(e){return(0,o.Z)(1,arguments),(0,i.default)(e,{weekStartsOn:1})}var d=n(93177),u=n(907);var c=6048e5;function f(e){(0,o.Z)(1,arguments);var t=(0,u.default)(e),n=l(t).getTime()-function(e){(0,o.Z)(1,arguments);var t=function(e){(0,o.Z)(1,arguments);var t=(0,u.default)(e),n=t.getFullYear(),a=new Date(0);a.setFullYear(n+1,0,4),a.setHours(0,0,0,0);var r=l(a),i=new Date(0);i.setFullYear(n,0,4),i.setHours(0,0,0,0);var s=l(i);return t.getTime()>=r.getTime()?n+1:t.getTime()>=s.getTime()?n:n-1}(e),n=new Date(0);return n.setFullYear(t,0,4),n.setHours(0,0,0,0),l(n)}(t).getTime();return Math.round(n/c)+1}var v=n(74843),p=n(81486);function h(e,t){return(0,o.Z)(1,arguments),(0,v.default)(function(e){(0,o.Z)(1,arguments);var t=(0,u.default)(e),n=t.getMonth();return t.setFullYear(t.getFullYear(),n+1,0),t.setHours(0,0,0,0),t}(e),(0,p.default)(e),t)+1}var m=n(73180),y=n(91475),b=n(84602),x=n(82757),_=n(99624),w=n(76904),g=n(5439),j=n(257),k=n(21174),M=n(9377),N=n(11113),D=n(85544),C=n(79526),P=n(96637),O=n(88773),S=n(66818),L=n(72872),W=n(61900),E=n(30537),I=n(44583),F=n(98658),B=n(21024),T=n(86428),Y=function(){return Y=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},Y.apply(this,arguments)};function R(e,t,n){if(n||2===arguments.length)for(var a,r=0,o=t.length;r<o;r++)!a&&r in t||(a||(a=Array.prototype.slice.call(t,0,r)),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}"function"==typeof SuppressedError&&SuppressedError;var A,H={exports:{}},Z={};H.exports=function(){if(A)return Z;A=1;var e=a,t=Symbol.for("react.element"),n=Symbol.for("react.fragment"),r=Object.prototype.hasOwnProperty,o=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function i(e,n,a){var i,s={},d=null,u=null;for(i in void 0!==a&&(d=""+a),void 0!==n.key&&(d=""+n.key),void 0!==n.ref&&(u=n.ref),n)r.call(n,i)&&!l.hasOwnProperty(i)&&(s[i]=n[i]);if(e&&e.defaultProps)for(i in n=e.defaultProps)void 0===s[i]&&(s[i]=n[i]);return{$$typeof:t,type:e,key:d,ref:u,props:s,_owner:o.current}}return Z.Fragment=n,Z.jsx=i,Z.jsxs=i,Z}();var K=H.exports;function U(e){return"multiple"===e.mode}function z(e){return"range"===e.mode}function G(e){return"single"===e.mode}var $={root:"rdp",multiple_months:"rdp-multiple_months",with_weeknumber:"rdp-with_weeknumber",vhidden:"rdp-vhidden",button_reset:"rdp-button_reset",button:"rdp-button",caption:"rdp-caption",caption_start:"rdp-caption_start",caption_end:"rdp-caption_end",caption_between:"rdp-caption_between",caption_label:"rdp-caption_label",caption_dropdowns:"rdp-caption_dropdowns",dropdown:"rdp-dropdown",dropdown_month:"rdp-dropdown_month",dropdown_year:"rdp-dropdown_year",dropdown_icon:"rdp-dropdown_icon",months:"rdp-months",month:"rdp-month",table:"rdp-table",tbody:"rdp-tbody",tfoot:"rdp-tfoot",head:"rdp-head",head_row:"rdp-head_row",head_cell:"rdp-head_cell",nav:"rdp-nav",nav_button:"rdp-nav_button",nav_button_previous:"rdp-nav_button_previous",nav_button_next:"rdp-nav_button_next",nav_icon:"rdp-nav_icon",row:"rdp-row",weeknumber:"rdp-weeknumber",cell:"rdp-cell",day:"rdp-day",day_today:"rdp-day_today",day_outside:"rdp-day_outside",day_selected:"rdp-day_selected",day_disabled:"rdp-day_disabled",day_hidden:"rdp-day_hidden",day_range_start:"rdp-day_range_start",day_range_end:"rdp-day_range_end",day_range_middle:"rdp-day_range_middle"},q=Object.freeze({__proto__:null,formatCaption:function(e,t){return(0,m.default)(e,"LLLL y",t)},formatDay:function(e,t){return(0,m.default)(e,"d",t)},formatMonthCaption:function(e,t){return(0,m.default)(e,"LLLL",t)},formatWeekNumber:function(e){return"".concat(e)},formatWeekdayName:function(e,t){return(0,m.default)(e,"cccccc",t)},formatYearCaption:function(e,t){return(0,m.default)(e,"yyyy",t)}}),J=Object.freeze({__proto__:null,labelDay:function(e,t,n){return(0,m.default)(e,"do MMMM (EEEE)",n)},labelMonthDropdown:function(){return"Month: "},labelNext:function(){return"Go to next month"},labelPrevious:function(){return"Go to previous month"},labelWeekNumber:function(e){return"Week n. ".concat(e)},labelWeekday:function(e,t){return(0,m.default)(e,"cccc",t)},labelYearDropdown:function(){return"Year: "}});var Q=(0,a.createContext)(void 0);function V(e){var t,n,a,r,o,l=e.initialProps,i=(n=$,a=T.Z,r=new Date,{captionLayout:"buttons",classNames:n,formatters:q,labels:J,locale:a,modifiersClassNames:{},modifiers:{},numberOfMonths:1,styles:{},today:r,mode:"default"}),s=function(e){var t=e.fromYear,n=e.toYear,a=e.fromMonth,r=e.toMonth,o=e.fromDate,l=e.toDate;return a?o=(0,p.default)(a):t&&(o=new Date(t,0,1)),r?l=(0,y.default)(r):n&&(l=new Date(n,11,31)),{fromDate:o?(0,b.default)(o):void 0,toDate:l?(0,b.default)(l):void 0}}(l),d=s.fromDate,u=s.toDate,c=null!==(t=l.captionLayout)&&void 0!==t?t:i.captionLayout;"buttons"===c||d&&u||(c="buttons"),(G(l)||U(l)||z(l))&&(o=l.onSelect);var f=Y(Y(Y({},i),l),{captionLayout:c,classNames:Y(Y({},i.classNames),l.classNames),components:Y({},l.components),formatters:Y(Y({},i.formatters),l.formatters),fromDate:d,labels:Y(Y({},i.labels),l.labels),mode:l.mode||i.mode,modifiers:Y(Y({},i.modifiers),l.modifiers),modifiersClassNames:Y(Y({},i.modifiersClassNames),l.modifiersClassNames),onSelect:o,styles:Y(Y({},i.styles),l.styles),toDate:u});return K.jsx(Q.Provider,{value:f,children:e.children})}function X(){var e=(0,a.useContext)(Q);if(!e)throw new Error("useDayPicker must be used within a DayPickerProvider.");return e}function ee(e){var t=X(),n=t.locale,a=t.classNames,r=t.styles,o=t.formatters.formatCaption;return K.jsx("div",{className:a.caption_label,style:r.caption_label,"aria-live":"polite",role:"presentation",id:e.id,children:o(e.displayMonth,{locale:n})})}function te(e){return K.jsx("svg",Y({width:"8px",height:"8px",viewBox:"0 0 120 120","data-testid":"iconDropdown"},e,{children:K.jsx("path",{d:"M4.22182541,48.2218254 C8.44222828,44.0014225 15.2388494,43.9273804 19.5496459,47.9996989 L19.7781746,48.2218254 L60,88.443 L100.221825,48.2218254 C104.442228,44.0014225 111.238849,43.9273804 115.549646,47.9996989 L115.778175,48.2218254 C119.998577,52.4422283 120.07262,59.2388494 116.000301,63.5496459 L115.778175,63.7781746 L67.7781746,111.778175 C63.5577717,115.998577 56.7611506,116.07262 52.4503541,112.000301 L52.2218254,111.778175 L4.22182541,63.7781746 C-0.0739418023,59.4824074 -0.0739418023,52.5175926 4.22182541,48.2218254 Z",fill:"currentColor",fillRule:"nonzero"})}))}function ne(e){var t,n,a=e.onChange,r=e.value,o=e.children,l=e.caption,i=e.className,s=e.style,d=X(),u=null!==(n=null===(t=d.components)||void 0===t?void 0:t.IconDropdown)&&void 0!==n?n:te;return K.jsxs("div",{className:i,style:s,children:[K.jsx("span",{className:d.classNames.vhidden,children:e["aria-label"]}),K.jsx("select",{name:e.name,"aria-label":e["aria-label"],className:d.classNames.dropdown,style:d.styles.dropdown,value:r,onChange:a,children:o}),K.jsxs("div",{className:d.classNames.caption_label,style:d.styles.caption_label,"aria-hidden":"true",children:[l,K.jsx(u,{className:d.classNames.dropdown_icon,style:d.styles.dropdown_icon})]})]})}function ae(e){var t,n=X(),a=n.fromDate,r=n.toDate,o=n.styles,l=n.locale,i=n.formatters.formatMonthCaption,s=n.classNames,d=n.components,u=n.labels.labelMonthDropdown;if(!a)return K.jsx(K.Fragment,{});if(!r)return K.jsx(K.Fragment,{});var c=[];if((0,x.default)(a,r))for(var f=(0,p.default)(a),v=a.getMonth();v<=r.getMonth();v++)c.push((0,_.default)(f,v));else for(f=(0,p.default)(new Date),v=0;v<=11;v++)c.push((0,_.default)(f,v));var h=null!==(t=null==d?void 0:d.Dropdown)&&void 0!==t?t:ne;return K.jsx(h,{name:"months","aria-label":u(),className:s.dropdown_month,style:o.dropdown_month,onChange:function(t){var n=Number(t.target.value),a=(0,_.default)((0,p.default)(e.displayMonth),n);e.onChange(a)},value:e.displayMonth.getMonth(),caption:i(e.displayMonth,{locale:l}),children:c.map((function(e){return K.jsx("option",{value:e.getMonth(),children:i(e,{locale:l})},e.getMonth())}))})}function re(e){var t,n=e.displayMonth,a=X(),r=a.fromDate,o=a.toDate,l=a.locale,i=a.styles,s=a.classNames,d=a.components,u=a.formatters.formatYearCaption,c=a.labels.labelYearDropdown,f=[];if(!r)return K.jsx(K.Fragment,{});if(!o)return K.jsx(K.Fragment,{});for(var v=r.getFullYear(),h=o.getFullYear(),m=v;m<=h;m++)f.push((0,w.default)((0,g.default)(new Date),m));var y=null!==(t=null==d?void 0:d.Dropdown)&&void 0!==t?t:ne;return K.jsx(y,{name:"years","aria-label":c(),className:s.dropdown_year,style:i.dropdown_year,onChange:function(t){var a=(0,w.default)((0,p.default)(n),Number(t.target.value));e.onChange(a)},value:n.getFullYear(),caption:u(n,{locale:l}),children:f.map((function(e){return K.jsx("option",{value:e.getFullYear(),children:u(e,{locale:l})},e.getFullYear())}))})}var oe=(0,a.createContext)(void 0);function le(e){var t=X(),n=function(){var e=X(),t=function(e){var t=e.month,n=e.defaultMonth,a=e.today,r=t||n||a||new Date,o=e.toDate,l=e.fromDate,i=e.numberOfMonths,s=void 0===i?1:i;if(o&&(0,j.default)(o,r)<0){var d=-1*(s-1);r=(0,k.default)(o,d)}return l&&(0,j.default)(r,l)<0&&(r=l),(0,p.default)(r)}(e),n=function(e,t){var n=(0,a.useState)(e),r=n[0];return[void 0===t?r:t,n[1]]}(t,e.month),r=n[0],o=n[1];return[r,function(t){var n;if(!e.disableNavigation){var a=(0,p.default)(t);o(a),null===(n=e.onMonthChange)||void 0===n||n.call(e,a)}}]}(),r=n[0],o=n[1],l=function(e,t){for(var n=t.reverseMonths,a=t.numberOfMonths,r=(0,p.default)(e),o=(0,p.default)((0,k.default)(r,a)),l=(0,j.default)(o,r),i=[],s=0;s<l;s++){var d=(0,k.default)(r,s);i.push(d)}return n&&(i=i.reverse()),i}(r,t),i=function(e,t){if(!t.disableNavigation){var n=t.toDate,a=t.pagedNavigation,r=t.numberOfMonths,o=void 0===r?1:r,l=a?o:1,i=(0,p.default)(e);if(!n)return(0,k.default)(i,l);if(!((0,j.default)(n,e)<o))return(0,k.default)(i,l)}}(r,t),s=function(e,t){if(!t.disableNavigation){var n=t.fromDate,a=t.pagedNavigation,r=t.numberOfMonths,o=a?void 0===r?1:r:1,l=(0,p.default)(e);if(!n)return(0,k.default)(l,-o);if(!((0,j.default)(l,n)<=0))return(0,k.default)(l,-o)}}(r,t),d=function(e){return l.some((function(t){return(0,M.default)(e,t)}))},u={currentMonth:r,displayMonths:l,goToMonth:o,goToDate:function(e,n){d(e)||(n&&(0,N.default)(e,n)?o((0,k.default)(e,1+-1*t.numberOfMonths)):o(e))},previousMonth:s,nextMonth:i,isDateDisplayed:d};return K.jsx(oe.Provider,{value:u,children:e.children})}function ie(){var e=(0,a.useContext)(oe);if(!e)throw new Error("useNavigation must be used within a NavigationProvider");return e}function se(e){var t,n=X(),a=n.classNames,r=n.styles,o=n.components,l=ie().goToMonth,i=function(t){l((0,k.default)(t,e.displayIndex?-e.displayIndex:0))},s=null!==(t=null==o?void 0:o.CaptionLabel)&&void 0!==t?t:ee,d=K.jsx(s,{id:e.id,displayMonth:e.displayMonth});return K.jsxs("div",{className:a.caption_dropdowns,style:r.caption_dropdowns,children:[K.jsx("div",{className:a.vhidden,children:d}),K.jsx(ae,{onChange:i,displayMonth:e.displayMonth}),K.jsx(re,{onChange:i,displayMonth:e.displayMonth})]})}function de(e){return K.jsx("svg",Y({width:"16px",height:"16px",viewBox:"0 0 120 120"},e,{children:K.jsx("path",{d:"M69.490332,3.34314575 C72.6145263,0.218951416 77.6798462,0.218951416 80.8040405,3.34314575 C83.8617626,6.40086786 83.9268205,11.3179931 80.9992143,14.4548388 L80.8040405,14.6568542 L35.461,60 L80.8040405,105.343146 C83.8617626,108.400868 83.9268205,113.317993 80.9992143,116.454839 L80.8040405,116.656854 C77.7463184,119.714576 72.8291931,119.779634 69.6923475,116.852028 L69.490332,116.656854 L18.490332,65.6568542 C15.4326099,62.5991321 15.367552,57.6820069 18.2951583,54.5451612 L18.490332,54.3431458 L69.490332,3.34314575 Z",fill:"currentColor",fillRule:"nonzero"})}))}function ue(e){return K.jsx("svg",Y({width:"16px",height:"16px",viewBox:"0 0 120 120"},e,{children:K.jsx("path",{d:"M49.8040405,3.34314575 C46.6798462,0.218951416 41.6145263,0.218951416 38.490332,3.34314575 C35.4326099,6.40086786 35.367552,11.3179931 38.2951583,14.4548388 L38.490332,14.6568542 L83.8333725,60 L38.490332,105.343146 C35.4326099,108.400868 35.367552,113.317993 38.2951583,116.454839 L38.490332,116.656854 C41.5480541,119.714576 46.4651794,119.779634 49.602025,116.852028 L49.8040405,116.656854 L100.804041,65.6568542 C103.861763,62.5991321 103.926821,57.6820069 100.999214,54.5451612 L100.804041,54.3431458 L49.8040405,3.34314575 Z",fill:"currentColor"})}))}var ce=(0,a.forwardRef)((function(e,t){var n=X(),a=n.classNames,r=n.styles,o=[a.button_reset,a.button];e.className&&o.push(e.className);var l=o.join(" "),i=Y(Y({},r.button_reset),r.button);return e.style&&Object.assign(i,e.style),K.jsx("button",Y({},e,{ref:t,type:"button",className:l,style:i}))}));function fe(e){var t,n,a=X(),r=a.dir,o=a.locale,l=a.classNames,i=a.styles,s=a.labels,d=s.labelPrevious,u=s.labelNext,c=a.components;if(!e.nextMonth&&!e.previousMonth)return K.jsx(K.Fragment,{});var f=d(e.previousMonth,{locale:o}),v=[l.nav_button,l.nav_button_previous].join(" "),p=u(e.nextMonth,{locale:o}),h=[l.nav_button,l.nav_button_next].join(" "),m=null!==(t=null==c?void 0:c.IconRight)&&void 0!==t?t:ue,y=null!==(n=null==c?void 0:c.IconLeft)&&void 0!==n?n:de;return K.jsxs("div",{className:l.nav,style:i.nav,children:[!e.hidePrevious&&K.jsx(ce,{name:"previous-month","aria-label":f,className:v,style:i.nav_button_previous,disabled:!e.previousMonth,onClick:e.onPreviousClick,children:"rtl"===r?K.jsx(m,{className:l.nav_icon,style:i.nav_icon}):K.jsx(y,{className:l.nav_icon,style:i.nav_icon})}),!e.hideNext&&K.jsx(ce,{name:"next-month","aria-label":p,className:h,style:i.nav_button_next,disabled:!e.nextMonth,onClick:e.onNextClick,children:"rtl"===r?K.jsx(y,{className:l.nav_icon,style:i.nav_icon}):K.jsx(m,{className:l.nav_icon,style:i.nav_icon})})]})}function ve(e){var t=X().numberOfMonths,n=ie(),a=n.previousMonth,r=n.nextMonth,o=n.goToMonth,l=n.displayMonths,i=l.findIndex((function(t){return(0,M.default)(e.displayMonth,t)})),s=0===i,d=i===l.length-1,u=t>1&&(s||!d),c=t>1&&(d||!s);return K.jsx(fe,{displayMonth:e.displayMonth,hideNext:u,hidePrevious:c,nextMonth:r,previousMonth:a,onPreviousClick:function(){a&&o(a)},onNextClick:function(){r&&o(r)}})}function pe(e){var t,n,a=X(),r=a.classNames,o=a.disableNavigation,l=a.styles,i=a.captionLayout,s=a.components,d=null!==(t=null==s?void 0:s.CaptionLabel)&&void 0!==t?t:ee;return n=o?K.jsx(d,{id:e.id,displayMonth:e.displayMonth}):"dropdown"===i?K.jsx(se,{displayMonth:e.displayMonth,id:e.id}):"dropdown-buttons"===i?K.jsxs(K.Fragment,{children:[K.jsx(se,{displayMonth:e.displayMonth,displayIndex:e.displayIndex,id:e.id}),K.jsx(ve,{displayMonth:e.displayMonth,displayIndex:e.displayIndex,id:e.id})]}):K.jsxs(K.Fragment,{children:[K.jsx(d,{id:e.id,displayMonth:e.displayMonth,displayIndex:e.displayIndex}),K.jsx(ve,{displayMonth:e.displayMonth,id:e.id})]}),K.jsx("div",{className:r.caption,style:l.caption,children:n})}function he(e){var t=X(),n=t.footer,a=t.styles,r=t.classNames.tfoot;return n?K.jsx("tfoot",{className:r,style:a.tfoot,children:K.jsx("tr",{children:K.jsx("td",{colSpan:8,children:n})})}):K.jsx(K.Fragment,{})}function me(){var e=X(),t=e.classNames,n=e.styles,a=e.showWeekNumber,o=e.locale,i=e.weekStartsOn,s=e.ISOWeek,d=e.formatters.formatWeekdayName,u=e.labels.labelWeekday,c=function(e,t,n){for(var a=n?l(new Date):(0,r.default)(new Date,{locale:e,weekStartsOn:t}),o=[],i=0;i<7;i++){var s=(0,D.default)(a,i);o.push(s)}return o}(o,i,s);return K.jsxs("tr",{style:n.head_row,className:t.head_row,children:[a&&K.jsx("td",{style:n.head_cell,className:t.head_cell}),c.map((function(e,a){return K.jsx("th",{scope:"col",className:t.head_cell,style:n.head_cell,"aria-label":u(e,{locale:o}),children:d(e,{locale:o})},a)}))]})}function ye(){var e,t=X(),n=t.classNames,a=t.styles,r=t.components,o=null!==(e=null==r?void 0:r.HeadRow)&&void 0!==e?e:me;return K.jsx("thead",{style:a.head,className:n.head,children:K.jsx(o,{})})}function be(e){var t=X(),n=t.locale,a=t.formatters.formatDay;return K.jsx(K.Fragment,{children:a(e.date,{locale:n})})}var xe=(0,a.createContext)(void 0);function _e(e){if(!U(e.initialProps)){return K.jsx(xe.Provider,{value:{selected:void 0,modifiers:{disabled:[]}},children:e.children})}return K.jsx(we,{initialProps:e.initialProps,children:e.children})}function we(e){var t=e.initialProps,n=e.children,a=t.selected,r=t.min,o=t.max,l={disabled:[]};a&&l.disabled.push((function(e){var t=o&&a.length>o-1,n=a.some((function(t){return(0,C.default)(t,e)}));return Boolean(t&&!n)}));var i={selected:a,onDayClick:function(e,n,l){var i,s;if(!(null===(i=t.onDayClick)||void 0===i||i.call(t,e,n,l),Boolean(n.selected&&r&&(null==a?void 0:a.length)===r)||Boolean(!n.selected&&o&&(null==a?void 0:a.length)===o))){var d=a?R([],a,!0):[];if(n.selected){var u=d.findIndex((function(t){return(0,C.default)(e,t)}));d.splice(u,1)}else d.push(e);null===(s=t.onSelect)||void 0===s||s.call(t,d,e,n,l)}},modifiers:l};return K.jsx(xe.Provider,{value:i,children:n})}function ge(){var e=(0,a.useContext)(xe);if(!e)throw new Error("useSelectMultiple must be used within a SelectMultipleProvider");return e}var je,ke=(0,a.createContext)(void 0);function Me(e){if(!z(e.initialProps)){return K.jsx(ke.Provider,{value:{selected:void 0,modifiers:{range_start:[],range_end:[],range_middle:[],disabled:[]}},children:e.children})}return K.jsx(Ne,{initialProps:e.initialProps,children:e.children})}function Ne(e){var t=e.initialProps,n=e.children,a=t.selected,r=a||{},o=r.from,l=r.to,i=t.min,s=t.max,d={range_start:[],range_end:[],range_middle:[],disabled:[]};if(o?(d.range_start=[o],l?(d.range_end=[l],(0,C.default)(o,l)||(d.range_middle=[{after:o,before:l}])):d.range_end=[o]):l&&(d.range_start=[l],d.range_end=[l]),i&&(o&&!l&&d.disabled.push({after:(0,O.default)(o,i-1),before:(0,D.default)(o,i-1)}),o&&l&&d.disabled.push({after:o,before:(0,D.default)(o,i-1)}),!o&&l&&d.disabled.push({after:(0,O.default)(l,i-1),before:(0,D.default)(l,i-1)})),s){if(o&&!l&&(d.disabled.push({before:(0,D.default)(o,1-s)}),d.disabled.push({after:(0,D.default)(o,s-1)})),o&&l){var u=s-((0,S.default)(l,o)+1);d.disabled.push({before:(0,O.default)(o,u)}),d.disabled.push({after:(0,D.default)(l,u)})}!o&&l&&(d.disabled.push({before:(0,D.default)(l,1-s)}),d.disabled.push({after:(0,D.default)(l,s-1)}))}return K.jsx(ke.Provider,{value:{selected:a,onDayClick:function(e,n,r){var o,l;null===(o=t.onDayClick)||void 0===o||o.call(t,e,n,r);var i=function(e,t){var n=t||{},a=n.from,r=n.to;if(a&&r){if((0,C.default)(r,e)&&(0,C.default)(a,e))return;if((0,C.default)(r,e))return{from:r,to:void 0};if((0,C.default)(a,e))return;return(0,P.default)(a,e)?{from:e,to:r}:{from:a,to:e}}return r?(0,P.default)(e,r)?{from:r,to:e}:{from:e,to:r}:a?(0,N.default)(e,a)?{from:e,to:a}:{from:a,to:e}:{from:e,to:void 0}}(e,a);null===(l=t.onSelect)||void 0===l||l.call(t,i,e,n,r)},modifiers:d},children:n})}function De(){var e=(0,a.useContext)(ke);if(!e)throw new Error("useSelectRange must be used within a SelectRangeProvider");return e}function Ce(e){return Array.isArray(e)?R([],e,!0):void 0!==e?[e]:[]}!function(e){e.Outside="outside",e.Disabled="disabled",e.Selected="selected",e.Hidden="hidden",e.Today="today",e.RangeStart="range_start",e.RangeEnd="range_end",e.RangeMiddle="range_middle"}(je||(je={}));var Pe=je.Selected,Oe=je.Disabled,Se=je.Hidden,Le=je.Today,We=je.RangeEnd,Ee=je.RangeMiddle,Ie=je.RangeStart,Fe=je.Outside,Be=(0,a.createContext)(void 0);function Te(e){var t=X(),n=function(e,t,n){var a,r=((a={})[Pe]=Ce(e.selected),a[Oe]=Ce(e.disabled),a[Se]=Ce(e.hidden),a[Le]=[e.today],a[We]=[],a[Ee]=[],a[Ie]=[],a[Fe]=[],a);return e.fromDate&&r[Oe].push({before:e.fromDate}),e.toDate&&r[Oe].push({after:e.toDate}),U(e)?r[Oe]=r[Oe].concat(t.modifiers[Oe]):z(e)&&(r[Oe]=r[Oe].concat(n.modifiers[Oe]),r[Ie]=n.modifiers[Ie],r[Ee]=n.modifiers[Ee],r[We]=n.modifiers[We]),r}(t,ge(),De()),a=function(e){var t={};return Object.entries(e).forEach((function(e){var n=e[0],a=e[1];t[n]=Ce(a)})),t}(t.modifiers),r=Y(Y({},n),a);return K.jsx(Be.Provider,{value:r,children:e.children})}function Ye(){var e=(0,a.useContext)(Be);if(!e)throw new Error("useModifiers must be used within a ModifiersProvider");return e}function Re(e,t,n){var a=Object.keys(t).reduce((function(n,a){var r=t[a];return function(e,t){return t.some((function(t){if("boolean"==typeof t)return t;if(n=t,(0,L.default)(n))return(0,C.default)(e,t);var n,a,r,o,l,i;if(function(e){return Array.isArray(e)&&e.every(L.default)}(t))return t.includes(e);if(function(e){return Boolean(e&&"object"==typeof e&&"from"in e)}(t))return a=e,l=(r=t).from,i=r.to,l&&i?((0,S.default)(i,l)<0&&(l=(o=[i,l])[0],i=o[1]),(0,S.default)(a,l)>=0&&(0,S.default)(i,a)>=0):i?(0,C.default)(i,a):!!l&&(0,C.default)(l,a);if(function(e){return Boolean(e&&"object"==typeof e&&"dayOfWeek"in e)}(t))return t.dayOfWeek.includes(e.getDay());if(function(e){return Boolean(e&&"object"==typeof e&&"before"in e&&"after"in e)}(t)){var s=(0,S.default)(t.before,e)>0,d=(0,S.default)(t.after,e)<0;return(0,P.default)(t.before,t.after)?d&&s:s||d}return function(e){return Boolean(e&&"object"==typeof e&&"after"in e)}(t)?(0,S.default)(e,t.after)>0:function(e){return Boolean(e&&"object"==typeof e&&"before"in e)}(t)?(0,S.default)(t.before,e)>0:"function"==typeof t&&t(e)}))}(e,r)&&n.push(a),n}),[]),r={};return a.forEach((function(e){return r[e]=!0})),n&&!(0,M.default)(e,n)&&(r.outside=!0),r}var Ae=365;function He(e,t){var n=t.moveBy,a=t.direction,o=t.context,d=t.modifiers,u=t.retry,c=void 0===u?{count:0,lastFocused:e}:u,f=o.weekStartsOn,v=o.fromDate,p=o.toDate,h=o.locale,m={day:D.default,week:W.default,month:k.default,year:E.default,startOfWeek:function(e){return o.ISOWeek?l(e):(0,r.default)(e,{locale:h,weekStartsOn:f})},endOfWeek:function(e){return o.ISOWeek?s(e):(0,i.default)(e,{locale:h,weekStartsOn:f})}}[n](e,"after"===a?1:-1);"before"===a&&v?m=(0,I.default)([v,m]):"after"===a&&p&&(m=(0,F.default)([p,m]));var y=!0;if(d){var b=Re(m,d);y=!b.disabled&&!b.hidden}return y?m:c.count>Ae?c.lastFocused:He(m,{moveBy:n,direction:a,context:o,modifiers:d,retry:Y(Y({},c),{count:c.count+1})})}var Ze=(0,a.createContext)(void 0);function Ke(e){var t=ie(),n=Ye(),r=(0,a.useState)(),o=r[0],l=r[1],i=(0,a.useState)(),s=i[0],d=i[1],u=function(e,t){for(var n,a,r=(0,p.default)(e[0]),o=(0,y.default)(e[e.length-1]),l=r;l<=o;){var i=Re(l,t);if(i.disabled||i.hidden)l=(0,D.default)(l,1);else{if(i.selected)return l;i.today&&!a&&(a=l),n||(n=l),l=(0,D.default)(l,1)}}return a||n}(t.displayMonths,n),c=(null!=o?o:s&&t.isDateDisplayed(s))?s:u,f=function(e){l(e)},v=X(),h=function(e,a){if(o){var r=He(o,{moveBy:e,direction:a,context:v,modifiers:n});(0,C.default)(o,r)||(t.goToDate(r,o),f(r))}},m={focusedDay:o,focusTarget:c,blur:function(){d(o),l(void 0)},focus:f,focusDayAfter:function(){return h("day","after")},focusDayBefore:function(){return h("day","before")},focusWeekAfter:function(){return h("week","after")},focusWeekBefore:function(){return h("week","before")},focusMonthBefore:function(){return h("month","before")},focusMonthAfter:function(){return h("month","after")},focusYearBefore:function(){return h("year","before")},focusYearAfter:function(){return h("year","after")},focusStartOfWeek:function(){return h("startOfWeek","before")},focusEndOfWeek:function(){return h("endOfWeek","after")}};return K.jsx(Ze.Provider,{value:m,children:e.children})}function Ue(){var e=(0,a.useContext)(Ze);if(!e)throw new Error("useFocusContext must be used within a FocusProvider");return e}var ze=(0,a.createContext)(void 0);function Ge(e){if(!G(e.initialProps)){return K.jsx(ze.Provider,{value:{selected:void 0},children:e.children})}return K.jsx($e,{initialProps:e.initialProps,children:e.children})}function $e(e){var t=e.initialProps,n=e.children,a={selected:t.selected,onDayClick:function(e,n,a){var r,o,l;null===(r=t.onDayClick)||void 0===r||r.call(t,e,n,a),!n.selected||t.required?null===(l=t.onSelect)||void 0===l||l.call(t,e,e,n,a):null===(o=t.onSelect)||void 0===o||o.call(t,void 0,e,n,a)}};return K.jsx(ze.Provider,{value:a,children:n})}function qe(){var e=(0,a.useContext)(ze);if(!e)throw new Error("useSelectSingle must be used within a SelectSingleProvider");return e}function Je(e,t,n){var r,o,l,i=X(),s=Ue(),d=function(e,t){return Re(e,Ye(),t)}(e,t),u=function(e,t){var n=X(),a=qe(),r=ge(),o=De(),l=Ue(),i=l.focusDayAfter,s=l.focusDayBefore,d=l.focusWeekAfter,u=l.focusWeekBefore,c=l.blur,f=l.focus,v=l.focusMonthBefore,p=l.focusMonthAfter,h=l.focusYearBefore,m=l.focusYearAfter,y=l.focusStartOfWeek,b=l.focusEndOfWeek,x={onClick:function(l){var i,s,d,u;G(n)?null===(i=a.onDayClick)||void 0===i||i.call(a,e,t,l):U(n)?null===(s=r.onDayClick)||void 0===s||s.call(r,e,t,l):z(n)?null===(d=o.onDayClick)||void 0===d||d.call(o,e,t,l):null===(u=n.onDayClick)||void 0===u||u.call(n,e,t,l)},onFocus:function(a){var r;f(e),null===(r=n.onDayFocus)||void 0===r||r.call(n,e,t,a)},onBlur:function(a){var r;c(),null===(r=n.onDayBlur)||void 0===r||r.call(n,e,t,a)},onKeyDown:function(a){var r;switch(a.key){case"ArrowLeft":a.preventDefault(),a.stopPropagation(),"rtl"===n.dir?i():s();break;case"ArrowRight":a.preventDefault(),a.stopPropagation(),"rtl"===n.dir?s():i();break;case"ArrowDown":a.preventDefault(),a.stopPropagation(),d();break;case"ArrowUp":a.preventDefault(),a.stopPropagation(),u();break;case"PageUp":a.preventDefault(),a.stopPropagation(),a.shiftKey?h():v();break;case"PageDown":a.preventDefault(),a.stopPropagation(),a.shiftKey?m():p();break;case"Home":a.preventDefault(),a.stopPropagation(),y();break;case"End":a.preventDefault(),a.stopPropagation(),b()}null===(r=n.onDayKeyDown)||void 0===r||r.call(n,e,t,a)},onKeyUp:function(a){var r;null===(r=n.onDayKeyUp)||void 0===r||r.call(n,e,t,a)},onMouseEnter:function(a){var r;null===(r=n.onDayMouseEnter)||void 0===r||r.call(n,e,t,a)},onMouseLeave:function(a){var r;null===(r=n.onDayMouseLeave)||void 0===r||r.call(n,e,t,a)},onPointerEnter:function(a){var r;null===(r=n.onDayPointerEnter)||void 0===r||r.call(n,e,t,a)},onPointerLeave:function(a){var r;null===(r=n.onDayPointerLeave)||void 0===r||r.call(n,e,t,a)},onTouchCancel:function(a){var r;null===(r=n.onDayTouchCancel)||void 0===r||r.call(n,e,t,a)},onTouchEnd:function(a){var r;null===(r=n.onDayTouchEnd)||void 0===r||r.call(n,e,t,a)},onTouchMove:function(a){var r;null===(r=n.onDayTouchMove)||void 0===r||r.call(n,e,t,a)},onTouchStart:function(a){var r;null===(r=n.onDayTouchStart)||void 0===r||r.call(n,e,t,a)}};return x}(e,d),c=function(){var e=X(),t=qe(),n=ge(),a=De();return G(e)?t.selected:U(e)?n.selected:z(e)?a.selected:void 0}(),f=Boolean(i.onDayClick||"default"!==i.mode);(0,a.useEffect)((function(){var t;d.outside||s.focusedDay&&f&&(0,C.default)(s.focusedDay,e)&&(null===(t=n.current)||void 0===t||t.focus())}),[s.focusedDay,e,n,f,d.outside]);var v=function(e,t){var n=[e.classNames.day];return Object.keys(t).forEach((function(t){var a=e.modifiersClassNames[t];if(a)n.push(a);else if(function(e){return Object.values(je).includes(e)}(t)){var r=e.classNames["day_".concat(t)];r&&n.push(r)}})),n}(i,d).join(" "),p=function(e,t){var n=Y({},e.styles.day);return Object.keys(t).forEach((function(t){var a;n=Y(Y({},n),null===(a=e.modifiersStyles)||void 0===a?void 0:a[t])})),n}(i,d),h=Boolean(d.outside&&!i.showOutsideDays||d.hidden),m=null!==(l=null===(o=i.components)||void 0===o?void 0:o.DayContent)&&void 0!==l?l:be,y={style:p,className:v,children:K.jsx(m,{date:e,displayMonth:t,activeModifiers:d}),role:"gridcell"},b=s.focusTarget&&(0,C.default)(s.focusTarget,e)&&!d.outside,x=s.focusedDay&&(0,C.default)(s.focusedDay,e),_=Y(Y(Y({},y),((r={disabled:d.disabled,role:"gridcell"})["aria-selected"]=d.selected,r.tabIndex=x||b?0:-1,r)),u);return{isButton:f,isHidden:h,activeModifiers:d,selectedDays:c,buttonProps:_,divProps:y}}function Qe(e){var t=(0,a.useRef)(null),n=Je(e.date,e.displayMonth,t);return n.isHidden?K.jsx("div",{role:"gridcell"}):n.isButton?K.jsx(ce,Y({name:"day",ref:t},n.buttonProps)):K.jsx("div",Y({},n.divProps))}function Ve(e){var t=e.number,n=e.dates,a=X(),r=a.onWeekNumberClick,o=a.styles,l=a.classNames,i=a.locale,s=a.labels.labelWeekNumber,d=(0,a.formatters.formatWeekNumber)(Number(t),{locale:i});if(!r)return K.jsx("span",{className:l.weeknumber,style:o.weeknumber,children:d});var u=s(Number(t),{locale:i});return K.jsx(ce,{name:"week-number","aria-label":u,className:l.weeknumber,style:o.weeknumber,onClick:function(e){r(t,n,e)},children:d})}function Xe(e){var t,n,a,r=X(),l=r.styles,i=r.classNames,s=r.showWeekNumber,u=r.components,c=null!==(t=null==u?void 0:u.Day)&&void 0!==t?t:Qe,f=null!==(n=null==u?void 0:u.WeekNumber)&&void 0!==n?n:Ve;return s&&(a=K.jsx("td",{className:i.cell,style:l.cell,children:K.jsx(f,{number:e.weekNumber,dates:e.dates})})),K.jsxs("tr",{className:i.row,style:l.row,children:[a,e.dates.map((function(t){return K.jsx("td",{className:i.cell,style:l.cell,role:"presentation",children:K.jsx(c,{displayMonth:e.displayMonth,date:t})},function(e){return(0,o.Z)(1,arguments),Math.floor((0,d.default)(e)/1e3)}(t))}))]})}function et(e,t,n){for(var a=(null==n?void 0:n.ISOWeek)?s(t):(0,i.default)(t,n),o=(null==n?void 0:n.ISOWeek)?l(e):(0,r.default)(e,n),d=(0,S.default)(a,o),u=[],c=0;c<=d;c++)u.push((0,D.default)(o,c));return u.reduce((function(e,t){var a=(null==n?void 0:n.ISOWeek)?f(t):(0,B.default)(t,n),r=e.find((function(e){return e.weekNumber===a}));return r?(r.dates.push(t),e):(e.push({weekNumber:a,dates:[t]}),e)}),[])}function tt(e){var t,n,a,r=X(),o=r.locale,l=r.classNames,i=r.styles,s=r.hideHead,d=r.fixedWeeks,u=r.components,c=r.weekStartsOn,f=r.firstWeekContainsDate,v=r.ISOWeek,m=function(e,t){var n=et((0,p.default)(e),(0,y.default)(e),t);if(null==t?void 0:t.useFixedWeeks){var a=h(e,t);if(a<6){var r=n[n.length-1],o=r.dates[r.dates.length-1],l=(0,W.default)(o,6-a),i=et((0,W.default)(o,1),l,t);n.push.apply(n,i)}}return n}(e.displayMonth,{useFixedWeeks:Boolean(d),ISOWeek:v,locale:o,weekStartsOn:c,firstWeekContainsDate:f}),b=null!==(t=null==u?void 0:u.Head)&&void 0!==t?t:ye,x=null!==(n=null==u?void 0:u.Row)&&void 0!==n?n:Xe,_=null!==(a=null==u?void 0:u.Footer)&&void 0!==a?a:he;return K.jsxs("table",{id:e.id,className:l.table,style:i.table,role:"grid","aria-labelledby":e["aria-labelledby"],children:[!s&&K.jsx(b,{}),K.jsx("tbody",{className:l.tbody,style:i.tbody,children:m.map((function(t){return K.jsx(x,{displayMonth:e.displayMonth,dates:t.dates,weekNumber:t.weekNumber},t.weekNumber)}))}),K.jsx(_,{displayMonth:e.displayMonth})]})}var nt="undefined"!=typeof window&&window.document&&window.document.createElement?a.useLayoutEffect:a.useEffect,at=!1,rt=0;function ot(){return"react-day-picker-".concat(++rt)}function lt(e){var t,n,r=X(),o=r.dir,l=r.classNames,i=r.styles,s=r.components,d=ie().displayMonths,u=function(e){var t,n=null!=e?e:at?ot():null,r=(0,a.useState)(n),o=r[0],l=r[1];return nt((function(){null===o&&l(ot())}),[]),(0,a.useEffect)((function(){!1===at&&(at=!0)}),[]),null!==(t=null!=e?e:o)&&void 0!==t?t:void 0}(r.id?"".concat(r.id,"-").concat(e.displayIndex):void 0),c=r.id?"".concat(r.id,"-grid-").concat(e.displayIndex):void 0,f=[l.month],v=i.month,p=0===e.displayIndex,h=e.displayIndex===d.length-1,m=!p&&!h;"rtl"===o&&(h=(t=[p,h])[0],p=t[1]),p&&(f.push(l.caption_start),v=Y(Y({},v),i.caption_start)),h&&(f.push(l.caption_end),v=Y(Y({},v),i.caption_end)),m&&(f.push(l.caption_between),v=Y(Y({},v),i.caption_between));var y=null!==(n=null==s?void 0:s.Caption)&&void 0!==n?n:pe;return K.jsxs("div",{className:f.join(" "),style:v,children:[K.jsx(y,{id:u,displayMonth:e.displayMonth,displayIndex:e.displayIndex}),K.jsx(tt,{id:c,"aria-labelledby":u,displayMonth:e.displayMonth})]},e.displayIndex)}function it(e){var t=X(),n=t.classNames,a=t.styles;return K.jsx("div",{className:n.months,style:a.months,children:e.children})}function st(e){var t,n,r=e.initialProps,o=X(),l=Ue(),i=ie(),s=(0,a.useState)(!1),d=s[0],u=s[1];(0,a.useEffect)((function(){o.initialFocus&&l.focusTarget&&(d||(l.focus(l.focusTarget),u(!0)))}),[o.initialFocus,d,l.focus,l.focusTarget,l]);var c=[o.classNames.root,o.className];o.numberOfMonths>1&&c.push(o.classNames.multiple_months),o.showWeekNumber&&c.push(o.classNames.with_weeknumber);var f=Y(Y({},o.styles.root),o.style),v=Object.keys(r).filter((function(e){return e.startsWith("data-")})).reduce((function(e,t){var n;return Y(Y({},e),((n={})[t]=r[t],n))}),{}),p=null!==(n=null===(t=r.components)||void 0===t?void 0:t.Months)&&void 0!==n?n:it;return K.jsx("div",Y({className:c.join(" "),style:f,dir:o.dir,id:o.id,nonce:r.nonce,title:r.title,lang:r.lang},v,{children:K.jsx(p,{children:i.displayMonths.map((function(e,t){return K.jsx(lt,{displayIndex:t,displayMonth:e},t)}))})}))}function dt(e){var t=e.children,n=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n}(e,["children"]);return K.jsx(V,{initialProps:n,children:K.jsx(le,{children:K.jsx(Ge,{initialProps:n,children:K.jsx(_e,{initialProps:n,children:K.jsx(Me,{initialProps:n,children:K.jsx(Te,{children:K.jsx(Ke,{children:t})})})})})})})}function ut(e){return K.jsx(dt,Y({},e,{children:K.jsx(st,{initialProps:e})}))}}}]);
|
|
2
|
+
//# sourceMappingURL=2988-b602b64344-lite.chunk.js.map
|