{"version":3,"sources":["../src/components/Quiz/Quiz.tsx"],"sourcesContent":["import { BookOpenIcon } from '@phosphor-icons/react/dist/csr/BookOpen';\nimport { CaretLeftIcon } from '@phosphor-icons/react/dist/csr/CaretLeft';\nimport { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';\nimport { SquaresFourIcon } from '@phosphor-icons/react/dist/csr/SquaresFour';\nimport { HeaderAlternative } from '../Alternative/Alternative';\nimport Button from '../Button/Button';\nimport IconButton from '../IconButton/IconButton';\nimport {\n  forwardRef,\n  ReactNode,\n  useEffect,\n  useState,\n  ComponentType,\n} from 'react';\nimport { useQuizStore, QUESTION_TYPE, QUIZ_TYPE } from './useQuizStore';\nimport { QuizVariant } from './Quiz.types';\nimport { AlertDialog } from '../AlertDialog/AlertDialog';\nimport Modal from '../Modal/Modal';\n\nimport Select, {\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '../Select/Select';\nimport { cn } from '../../utils/utils';\nimport {\n  QuizAlternative,\n  QuizConnectDots,\n  QuizDissertative,\n  QuizFill,\n  QuizImageQuestion,\n  QuizMultipleChoice,\n  QuizTrueOrFalse,\n} from './QuizContent';\nimport { CardStatus } from '../Card/Card';\nimport Text from '../Text/Text';\nimport HtmlMathRenderer from '../HtmlMathRenderer/HtmlMathRenderer';\nimport { formatExamInfo } from './Quiz.utils';\n\n// Função para obter configuração do tipo de quiz\nexport const getQuizTypeConfig = (type: QUIZ_TYPE) => {\n  // Configuração centralizada para cada tipo de quiz\n  const QUIZ_TYPE_CONFIG = {\n    [QUIZ_TYPE.SIMULADO]: {\n      label: 'Simulado',\n      article: 'o',\n      preposition: 'do',\n    },\n    [QUIZ_TYPE.QUESTIONARIO]: {\n      label: 'Questionário',\n      article: 'o',\n      preposition: 'do',\n    },\n    [QUIZ_TYPE.ATIVIDADE]: {\n      label: 'Atividade',\n      article: 'a',\n      preposition: 'da',\n    },\n    [QUIZ_TYPE.AULA_RECOMENDADA]: {\n      label: 'Aula recomendada',\n      article: 'a',\n      preposition: 'da',\n    },\n  } as const;\n\n  const config = QUIZ_TYPE_CONFIG[type];\n  return config || QUIZ_TYPE_CONFIG[QUIZ_TYPE.SIMULADO]; // fallback para simulado\n};\n\n// Função para obter o label do tipo\nexport const getTypeLabel = (type: QUIZ_TYPE) => {\n  return getQuizTypeConfig(type).label;\n};\n\n// Função para obter o artigo (o/a)\nexport const getQuizArticle = (type: QUIZ_TYPE) => {\n  return getQuizTypeConfig(type).article;\n};\n\n// Função para obter a preposição (do/da)\nexport const getQuizPreposition = (type: QUIZ_TYPE) => {\n  return getQuizTypeConfig(type).preposition;\n};\n\n// Função para gerar título de conclusão\nexport const getCompletionTitle = (type: QUIZ_TYPE) => {\n  const config = getQuizTypeConfig(type);\n  return `Você concluiu ${config.article} ${config.label.toLowerCase()}!`;\n};\n\n// Função para gerar o rótulo do botão de retorno no modal de conclusão\nexport const getGoBackButtonLabel = (type: QUIZ_TYPE): string => {\n  if (type === QUIZ_TYPE.SIMULADO) return 'Ir para simulados';\n  if (type === QUIZ_TYPE.QUESTIONARIO) return 'Ir para aulas';\n  if (type === QUIZ_TYPE.ATIVIDADE) return 'Ir para atividades';\n  if (type === QUIZ_TYPE.AULA_RECOMENDADA) return 'Ir para aulas recomendadas';\n  return 'Ir para simulados';\n};\n\n// Função para gerar texto de confirmação de saída\nexport const getExitConfirmationText = (type: QUIZ_TYPE) => {\n  const config = getQuizTypeConfig(type);\n  // QUESTIONARIO não tem rascunho: ao sair, as respostas são perdidas.\n  // Demais tipos (SIMULADO, ATIVIDADE, AULA_RECOMENDADA e fallback) salvam o\n  // progresso, então o aluno pode continuar depois de onde parou.\n  if (type === QUIZ_TYPE.QUESTIONARIO) {\n    return `Se você sair ${config.preposition} ${config.label.toLowerCase()} agora, todas as respostas serão perdidas.`;\n  }\n  return `Se você sair ${config.preposition} ${config.label.toLowerCase()} agora, poderá continuar de onde parou depois.`;\n};\n\n// Função para gerar texto de confirmação de finalização\nexport const getFinishConfirmationText = (type: QUIZ_TYPE) => {\n  const config = getQuizTypeConfig(type);\n  return `Tem certeza que deseja finalizar ${config.article} ${config.label.toLowerCase()}?`;\n};\n\nconst Quiz = forwardRef<\n  HTMLDivElement,\n  { children: ReactNode; className?: string; variant?: 'result' | 'default' }\n>(({ children, className, variant = QuizVariant.DEFAULT, ...props }, ref) => {\n  const { setVariant } = useQuizStore();\n\n  useEffect(() => {\n    setVariant(variant as QuizVariant);\n  }, [variant, setVariant]);\n\n  return (\n    <div ref={ref} className={cn('flex flex-col', className)} {...props}>\n      {children}\n    </div>\n  );\n});\n\nconst QuizTitle = forwardRef<\n  HTMLDivElement,\n  { className?: string; onBack?: () => void }\n>(({ className, onBack, ...props }, ref) => {\n  const {\n    quiz,\n    currentQuestionIndex,\n    getTotalQuestions,\n    getQuizTitle,\n    isStarted,\n  } = useQuizStore();\n\n  const [showExitConfirmation, setShowExitConfirmation] = useState(false);\n\n  const totalQuestions = getTotalQuestions();\n  const quizTitle = getQuizTitle();\n\n  const handleBackClick = () => {\n    if (isStarted) {\n      setShowExitConfirmation(true);\n    } else {\n      actionOnBack();\n    }\n  };\n\n  const handleConfirmExit = () => {\n    setShowExitConfirmation(false);\n    actionOnBack();\n  };\n\n  const actionOnBack = () => {\n    if (onBack) {\n      onBack();\n    } else {\n      globalThis.history.back();\n    }\n  };\n\n  const handleCancelExit = () => {\n    setShowExitConfirmation(false);\n  };\n\n  return (\n    <>\n      <div\n        ref={ref}\n        className={cn(\n          'flex flex-row justify-between items-center relative p-2',\n          className\n        )}\n        {...props}\n      >\n        <IconButton\n          icon={<CaretLeftIcon size={24} />}\n          size=\"md\"\n          aria-label=\"Voltar\"\n          onClick={handleBackClick}\n        />\n        <span className=\"flex flex-col gap-2 text-center\">\n          <p className=\"text-text-950 font-bold text-md\">{quizTitle}</p>\n          <p className=\"text-text-600 text-xs\">\n            {totalQuestions > 0\n              ? `${currentQuestionIndex + 1} de ${totalQuestions}`\n              : '0 de 0'}\n          </p>\n        </span>\n      </div>\n\n      <AlertDialog\n        isOpen={showExitConfirmation}\n        onChangeOpen={setShowExitConfirmation}\n        title=\"Deseja sair?\"\n        description={getExitConfirmationText(quiz?.type || QUIZ_TYPE.SIMULADO)}\n        cancelButtonLabel=\"Voltar e revisar\"\n        submitButtonLabel=\"Sair Mesmo Assim\"\n        onSubmit={handleConfirmExit}\n        onCancel={handleCancelExit}\n      />\n    </>\n  );\n});\n\nconst QuizHeader = () => {\n  const { getCurrentQuestion, getQuestionIndex, quiz } = useQuizStore();\n  const currentQuestion = getCurrentQuestion();\n  let currentId =\n    currentQuestion && 'questionId' in currentQuestion\n      ? (currentQuestion.questionId as string)\n      : currentQuestion?.id;\n  const questionIndex = getQuestionIndex(currentId!);\n\n  const questionNumber = currentQuestion\n    ? `Questão ${questionIndex.toString().padStart(2, '0')}`\n    : 'Questão';\n\n  // Only show exam info (banca/year) for SIMULADO type\n  const shouldShowExamInfo = quiz?.type === QUIZ_TYPE.SIMULADO;\n  const examInfo = shouldShowExamInfo\n    ? formatExamInfo(currentQuestion?.examBoard, currentQuestion?.examYear)\n    : '';\n\n  const title = examInfo ? `${questionNumber} ${examInfo}` : questionNumber;\n\n  return (\n    <HeaderAlternative\n      title={title}\n      subTitle={currentQuestion?.knowledgeMatrix?.[0]?.topic?.name ?? ''}\n      content={currentQuestion?.statement ?? ''}\n    />\n  );\n};\n\nconst QuizContent = ({ paddingBottom }: { paddingBottom?: string }) => {\n  const { getCurrentQuestion } = useQuizStore();\n  const currentQuestion = getCurrentQuestion();\n  const questionComponents: Record<\n    string,\n    ComponentType<QuizVariantInterface>\n  > = {\n    [QUESTION_TYPE.ALTERNATIVA]: QuizAlternative,\n    [QUESTION_TYPE.MULTIPLA_ESCOLHA]: QuizMultipleChoice,\n    [QUESTION_TYPE.DISSERTATIVA]: QuizDissertative,\n    [QUESTION_TYPE.VERDADEIRO_FALSO]: QuizTrueOrFalse,\n    [QUESTION_TYPE.RELACIONAR]: QuizConnectDots,\n    [QUESTION_TYPE.PREENCHER_LACUNAS]: QuizFill,\n    [QUESTION_TYPE.IMAGEM]: QuizImageQuestion,\n  };\n\n  const QuestionComponent = currentQuestion\n    ? questionComponents[currentQuestion.questionType]\n    : null;\n\n  return QuestionComponent ? (\n    <QuestionComponent paddingBottom={paddingBottom} />\n  ) : (\n    <Text size=\"md\" weight=\"medium\" className=\"text-text-950 text-md\">\n      Tipo de questão não suportado\n    </Text>\n  );\n};\n\ninterface QuizVariantInterface {\n  paddingBottom?: string;\n}\n\nconst QuizQuestionList = ({\n  filterType = 'all',\n  onQuestionClick,\n}: {\n  filterType?: string;\n  onQuestionClick?: () => void;\n} = {}) => {\n  const {\n    getQuestionsGroupedBySubject,\n    goToQuestion,\n    getQuestionStatusFromUserAnswers,\n    getQuestionIndex,\n    quiz,\n  } = useQuizStore();\n\n  // Only show exam info (banca/year) for SIMULADO type\n  const shouldShowExamInfo = quiz?.type === QUIZ_TYPE.SIMULADO;\n\n  const groupedQuestions = getQuestionsGroupedBySubject();\n  const getQuestionStatus = (questionId: string) => {\n    return getQuestionStatusFromUserAnswers(questionId);\n  };\n  const filteredGroupedQuestions = Object.entries(groupedQuestions).reduce(\n    (acc, [subjectId, questions]) => {\n      const filteredQuestions = questions.filter((question) => {\n        const status = getQuestionStatus(question.id);\n        switch (filterType) {\n          case 'answered':\n            return status === 'answered';\n          case 'unanswered':\n            return status === 'unanswered' || status === 'skipped';\n          default:\n            return true;\n        }\n      });\n\n      if (filteredQuestions.length > 0) {\n        acc[subjectId] = filteredQuestions;\n      }\n\n      return acc;\n    },\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    {} as { [key: string]: any[] }\n  );\n\n  const getStatusLabel = (status: string) => {\n    switch (status) {\n      case 'answered':\n        return 'Respondida';\n      case 'skipped':\n        return 'Em branco';\n      default:\n        return 'Em branco';\n    }\n  };\n  return (\n    <div className=\"space-y-6 px-4 h-full\">\n      {Object.entries(filteredGroupedQuestions).length == 0 && (\n        <div className=\"flex items-center justify-center text-gray-500 py-8 h-full\">\n          <p className=\"text-lg\">Nenhum resultado</p>\n        </div>\n      )}\n      {Object.entries(filteredGroupedQuestions).map(\n        ([subjectId, questions]) => (\n          <section key={subjectId} className=\"flex flex-col gap-2\">\n            <span className=\"pt-6 pb-4 flex flex-row gap-2\">\n              <div className=\"bg-primary-500 p-1 rounded-sm flex items-center justify-center\">\n                <BookOpenIcon size={17} className=\"text-white\" />\n              </div>\n              <p className=\"text-text-800 font-bold text-lg\">\n                {questions?.[0]?.knowledgeMatrix?.[0]?.subject?.name ??\n                  'Sem matéria'}\n              </p>\n            </span>\n\n            <ul className=\"flex flex-col gap-2\">\n              {questions.map((question) => {\n                const status = getQuestionStatus(question.id);\n                const questionNumber = getQuestionIndex(question.id);\n                const examInfo = shouldShowExamInfo\n                  ? formatExamInfo(question.examBoard, question.examYear)\n                  : '';\n                const questionTitle = `Questão ${questionNumber.toString().padStart(2, '0')}`;\n                const header = examInfo\n                  ? `${questionTitle} ${examInfo}`\n                  : questionTitle;\n                return (\n                  <CardStatus\n                    key={question.id}\n                    header={header}\n                    label={getStatusLabel(status)}\n                    onClick={() => {\n                      goToQuestion(questionNumber - 1);\n                      onQuestionClick?.();\n                    }}\n                  />\n                );\n              })}\n            </ul>\n          </section>\n        )\n      )}\n    </div>\n  );\n};\n\n/**\n * Shared layout for the quiz result modals (generic result, all-correct and\n * all-incorrect questionnaire variants): a centered image, a title and a\n * footer with action buttons.\n */\nconst QuizResultModal = ({\n  isOpen,\n  onClose,\n  image,\n  showImagePlaceholder = true,\n  title,\n  description,\n  footer,\n}: {\n  isOpen: boolean;\n  onClose: () => void;\n  image?: ReactNode;\n  showImagePlaceholder?: boolean;\n  title: ReactNode;\n  description: ReactNode;\n  footer: ReactNode;\n}) => (\n  <Modal\n    isOpen={isOpen}\n    onClose={onClose}\n    title=\"\"\n    closeOnEscape={false}\n    hideCloseButton\n    size={'md'}\n  >\n    <div className=\"flex flex-col w-full h-full items-center justify-center gap-4\">\n      {image ? (\n        <div className=\"w-[282px] h-auto\">{image}</div>\n      ) : (\n        showImagePlaceholder && (\n          <div className=\"w-[282px] h-[200px] bg-gray-100 rounded-md flex items-center justify-center\">\n            <Text as=\"span\" size=\"sm\" color=\"text-gray-500\">\n              Imagem de resultado\n            </Text>\n          </div>\n        )\n      )}\n      <div className=\"flex flex-col gap-2 text-center\">\n        <Text as=\"h2\" size=\"lg\" weight=\"bold\">\n          {title}\n        </Text>\n        {description}\n      </div>\n      {footer}\n    </div>\n  </Modal>\n);\n\nconst QuizFooter = forwardRef<\n  HTMLDivElement,\n  {\n    className?: string;\n    onGoToSimulated?: () => void;\n    onDetailResult?: () => void;\n    handleFinishSimulated?: () => void;\n    onGoToNextModule?: () => void;\n    onRepeat?: () => void;\n    onTryLater?: () => void;\n    resultImageComponent?: ReactNode;\n    resultIncorrectImageComponent?: ReactNode;\n  }\n>(\n  (\n    {\n      className,\n      onGoToSimulated,\n      onDetailResult,\n      handleFinishSimulated,\n      onGoToNextModule,\n      onRepeat,\n      onTryLater,\n      resultImageComponent,\n      resultIncorrectImageComponent,\n      ...props\n    },\n    ref\n  ) => {\n    const {\n      quiz,\n      currentQuestionIndex,\n      getTotalQuestions,\n      goToNextQuestion,\n      goToPreviousQuestion,\n      getUnansweredQuestionsFromUserAnswers,\n      getCurrentAnswer,\n      skipQuestion,\n      skipCurrentQuestionIfUnanswered,\n      getCurrentQuestion,\n      getQuestionStatusFromUserAnswers,\n      variant,\n      getQuestionResultStatistics,\n    } = useQuizStore();\n\n    const totalQuestions = getTotalQuestions();\n    const isFirstQuestion = currentQuestionIndex === 0;\n    const isLastQuestion = currentQuestionIndex === totalQuestions - 1;\n    const currentAnswer = getCurrentAnswer();\n    const currentQuestion = getCurrentQuestion();\n    const isCurrentQuestionSkipped = currentQuestion\n      ? getQuestionStatusFromUserAnswers(currentQuestion.id) === 'skipped'\n      : false;\n    // Sistema unificado de controle de modais\n    const [activeModal, setActiveModal] = useState<string | null>(null);\n    const [filterType, setFilterType] = useState<string>('all');\n\n    // Funções para controlar modais\n    const openModal = (modalName: string) => setActiveModal(modalName);\n    const closeModal = () => setActiveModal(null);\n    const isModalOpen = (modalName: string) => activeModal === modalName;\n    const unansweredQuestions = getUnansweredQuestionsFromUserAnswers();\n    const allQuestions = getTotalQuestions();\n    const stats = getQuestionResultStatistics();\n    const correctAnswers = stats?.correctAnswers;\n    const quizType = quiz?.type || QUIZ_TYPE.SIMULADO;\n    const quizTypeLabel = getTypeLabel(quizType);\n    // Real subtopic name, used to label the questionnaire completion modals.\n    // The backend always populates the question knowledge matrix, so this is\n    // available as soon as the quiz is loaded.\n    const moduleName =\n      quiz?.questions?.[0]?.knowledgeMatrix?.[0]?.subtopic?.name;\n\n    // Submits the answers and opens the correct result modal. Statistics must\n    // be read AFTER handleFinishSimulated, which is what populates\n    // questionsResult in the store (the render-time values are still empty).\n    const submitAndOpenResultModal = async () => {\n      if (handleFinishSimulated) {\n        await Promise.resolve(handleFinishSimulated());\n      }\n\n      const latestStats = getQuestionResultStatistics();\n      const latestCorrect = latestStats?.correctAnswers;\n      const latestTotal = latestStats?.totalAnswered;\n\n      if (\n        quizType === QUIZ_TYPE.QUESTIONARIO &&\n        typeof latestCorrect === 'number' &&\n        typeof latestTotal === 'number' &&\n        latestCorrect === latestTotal\n      ) {\n        openModal('modalQuestionnaireAllCorrect');\n        return;\n      }\n\n      if (\n        quizType === QUIZ_TYPE.QUESTIONARIO &&\n        typeof latestCorrect === 'number' &&\n        latestCorrect === 0\n      ) {\n        openModal('modalQuestionnaireAllIncorrect');\n        return;\n      }\n\n      openModal('modalResult');\n    };\n\n    const handleFinishQuiz = async () => {\n      // Marca a questão atual como pulada se não foi respondida\n      skipCurrentQuestionIfUnanswered();\n\n      if (unansweredQuestions.length > 0) {\n        openModal('alertDialog');\n        return;\n      }\n\n      try {\n        await submitAndOpenResultModal();\n      } catch (err) {\n        console.error('handleFinishSimulated failed:', err);\n      }\n    };\n\n    const handleAlertSubmit = async () => {\n      try {\n        await submitAndOpenResultModal();\n      } catch (err) {\n        console.error('handleFinishSimulated failed:', err);\n        closeModal();\n      }\n    };\n\n    return (\n      <>\n        <footer\n          ref={ref}\n          className={cn(\n            'w-full px-2 bg-background lg:max-w-[1000px] not-lg:max-w-[calc(100vw-32px)] border-t border-border-50 fixed bottom-0 min-h-[80px] flex flex-row justify-between items-center',\n            className\n          )}\n          {...props}\n        >\n          {variant === 'default' ? (\n            <>\n              <div className=\"flex flex-row items-center gap-1\">\n                <IconButton\n                  icon={<SquaresFourIcon size={24} className=\"text-text-950\" />}\n                  size=\"md\"\n                  onClick={() => openModal('modalNavigate')}\n                />\n\n                {isFirstQuestion ? (\n                  <Button\n                    variant=\"outline\"\n                    size=\"small\"\n                    onClick={() => {\n                      skipQuestion();\n                      goToNextQuestion();\n                    }}\n                  >\n                    Pular\n                  </Button>\n                ) : (\n                  <Button\n                    size=\"medium\"\n                    variant=\"link\"\n                    action=\"primary\"\n                    iconLeft={<CaretLeftIcon size={18} />}\n                    onClick={() => {\n                      goToPreviousQuestion();\n                    }}\n                  >\n                    Voltar\n                  </Button>\n                )}\n              </div>\n\n              {!isFirstQuestion && !isLastQuestion && (\n                <Button\n                  size=\"small\"\n                  variant=\"outline\"\n                  action=\"primary\"\n                  onClick={() => {\n                    skipQuestion();\n                    goToNextQuestion();\n                  }}\n                >\n                  Pular\n                </Button>\n              )}\n\n              {isLastQuestion ? (\n                <Button\n                  size=\"medium\"\n                  variant=\"solid\"\n                  action=\"primary\"\n                  onClick={handleFinishQuiz}\n                >\n                  Finalizar\n                </Button>\n              ) : (\n                <Button\n                  size=\"medium\"\n                  variant=\"link\"\n                  action=\"primary\"\n                  iconRight={<CaretRightIcon size={18} />}\n                  disabled={!currentAnswer && !isCurrentQuestionSkipped}\n                  onClick={() => {\n                    goToNextQuestion();\n                  }}\n                >\n                  Avançar\n                </Button>\n              )}\n            </>\n          ) : (\n            currentQuestion?.solutionExplanation && (\n              <div className=\"flex flex-row items-center justify-center w-full\">\n                <Button\n                  variant=\"link\"\n                  action=\"primary\"\n                  size=\"medium\"\n                  onClick={() => openModal('modalResolution')}\n                >\n                  Ver resolução\n                </Button>\n              </div>\n            )\n          )}\n        </footer>\n\n        <AlertDialog\n          isOpen={isModalOpen('alertDialog')}\n          onChangeOpen={(open) =>\n            open ? openModal('alertDialog') : closeModal()\n          }\n          title={`Finalizar ${quizTypeLabel.toLowerCase()}?`}\n          description={\n            unansweredQuestions.length > 0\n              ? `Você deixou as questões ${unansweredQuestions.join(', ')} sem resposta. Finalizar agora pode impactar seu desempenho.`\n              : getFinishConfirmationText(quizType)\n          }\n          cancelButtonLabel=\"Voltar e revisar\"\n          submitButtonLabel=\"Finalizar Mesmo Assim\"\n          onSubmit={handleAlertSubmit}\n        />\n\n        <QuizResultModal\n          isOpen={isModalOpen('modalResult')}\n          onClose={closeModal}\n          image={resultImageComponent}\n          title={getCompletionTitle(quizType)}\n          description={\n            <Text as=\"p\" size=\"sm\" color=\"text-text-500\">\n              Você acertou {correctAnswers ?? '--'} de {allQuestions} questões.\n            </Text>\n          }\n          footer={\n            <div className=\"px-6 flex flex-row items-center gap-2 w-full\">\n              <Button\n                variant=\"outline\"\n                className=\"w-full\"\n                size=\"small\"\n                onClick={onGoToSimulated}\n              >\n                {getGoBackButtonLabel(quizType)}\n              </Button>\n\n              <Button className=\"w-full\" onClick={onDetailResult}>\n                Detalhar resultado\n              </Button>\n            </div>\n          }\n        />\n\n        <Modal\n          isOpen={isModalOpen('modalNavigate')}\n          onClose={closeModal}\n          title=\"Questões\"\n          size={'lg'}\n        >\n          <div className=\"flex flex-col w-full not-lg:h-[calc(100vh-200px)] lg:max-h-[687px] lg:h-[687px]\">\n            <div className=\"flex flex-row justify-between items-center py-6 pt-6 pb-4 border-b border-border-200 flex-shrink-0\">\n              <p className=\"text-text-950 font-bold text-lg\">Filtrar por</p>\n              <span className=\"max-w-[266px]\">\n                <Select value={filterType} onValueChange={setFilterType}>\n                  <SelectTrigger\n                    variant=\"rounded\"\n                    className=\"max-w-[266px] min-w-[160px]\"\n                  >\n                    <SelectValue placeholder=\"Selecione uma opção\" />\n                  </SelectTrigger>\n                  <SelectContent>\n                    <SelectItem value=\"all\">Todas</SelectItem>\n                    <SelectItem value=\"unanswered\">Em branco</SelectItem>\n                    <SelectItem value=\"answered\">Respondidas</SelectItem>\n                  </SelectContent>\n                </Select>\n              </span>\n            </div>\n\n            <div className=\"flex flex-col gap-2 flex-1 min-h-0 overflow-y-auto\">\n              <QuizQuestionList\n                filterType={filterType}\n                onQuestionClick={closeModal}\n              />\n            </div>\n          </div>\n        </Modal>\n\n        <Modal\n          isOpen={isModalOpen('modalResolution')}\n          onClose={closeModal}\n          title=\"Resolução\"\n          size={'lg'}\n        >\n          <HtmlMathRenderer\n            content={currentQuestion?.solutionExplanation || ''}\n            className=\"text-text-950 text-base\"\n          />\n        </Modal>\n\n        <QuizResultModal\n          isOpen={isModalOpen('modalQuestionnaireAllCorrect')}\n          onClose={closeModal}\n          image={resultImageComponent}\n          title=\"🎉 Parabéns!\"\n          description={\n            <Text as=\"p\" size=\"sm\" color=\"text-text-500\">\n              {moduleName\n                ? `Você concluiu o módulo ${moduleName}.`\n                : 'Você concluiu o questionário!'}\n            </Text>\n          }\n          footer={\n            <div className=\"px-6 flex flex-row items-center gap-2 w-full\">\n              <Button className=\"w-full\" onClick={onGoToNextModule}>\n                {getGoBackButtonLabel(quizType)}\n              </Button>\n            </div>\n          }\n        />\n\n        <QuizResultModal\n          isOpen={isModalOpen('modalQuestionnaireAllIncorrect')}\n          onClose={closeModal}\n          image={resultIncorrectImageComponent}\n          showImagePlaceholder={false}\n          title=\"😕 Não foi dessa vez...\"\n          description={\n            <>\n              <Text as=\"p\" size=\"sm\" color=\"text-text-500\">\n                Você tirou 0 no questionário, mas não se preocupe! Isso é apenas\n                uma oportunidade de aprendizado.\n              </Text>\n\n              <Text as=\"p\" size=\"sm\" color=\"text-text-500\">\n                Que tal tentar novamente para melhorar sua nota? Estamos aqui\n                para te ajudar a entender o conteúdo e evoluir.\n              </Text>\n\n              {quiz?.canRetry && (\n                <Text as=\"p\" size=\"sm\" color=\"text-text-500\">\n                  Clique em Repetir Questionário e mostre do que você é capaz!\n                  💪\n                </Text>\n              )}\n            </>\n          }\n          footer={\n            <div className=\"flex flex-row justify-center items-center gap-2 w-full\">\n              {quiz?.canRetry && (\n                <Button\n                  type=\"button\"\n                  variant=\"link\"\n                  size=\"small\"\n                  className=\"w-auto\"\n                  onClick={() => {\n                    closeModal();\n                    openModal('alertDialogTryLater');\n                  }}\n                >\n                  Tentar depois\n                </Button>\n              )}\n\n              <Button\n                variant=\"outline\"\n                size=\"small\"\n                className=\"w-auto\"\n                onClick={onDetailResult}\n              >\n                Detalhar resultado\n              </Button>\n\n              {quiz?.canRetry ? (\n                <Button className=\"w-auto\" size=\"small\" onClick={onRepeat}>\n                  Repetir questionário\n                </Button>\n              ) : (\n                <Button\n                  className=\"w-auto\"\n                  size=\"small\"\n                  onClick={onGoToSimulated}\n                >\n                  {getGoBackButtonLabel(quizType)}\n                </Button>\n              )}\n            </div>\n          }\n        />\n\n        <AlertDialog\n          isOpen={isModalOpen('alertDialogTryLater')}\n          onChangeOpen={(open) =>\n            open ? openModal('alertDialogTryLater') : closeModal()\n          }\n          title=\"Tentar depois?\"\n          description={\n            'Você optou por refazer o questionário mais tarde.\\n\\nLembre-se: enquanto não refazer o questionário, sua nota permanecerá 0 no sistema.'\n          }\n          cancelButtonLabel=\"Repetir questionário\"\n          submitButtonLabel=\"Tentar depois\"\n          onSubmit={() => {\n            onTryLater?.();\n            closeModal();\n          }}\n          onCancel={() => {\n            onRepeat?.();\n            closeModal();\n          }}\n        />\n      </>\n    );\n  }\n);\n\nexport {\n  QuizTitle,\n  Quiz,\n  QuizHeader,\n  QuizContent,\n  QuizFooter,\n  QuizQuestionList,\n};\n"],"mappings":"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","names":[]}