{"version":3,"sources":["../../src/components/Quiz/Quiz.tsx","../../src/components/Badge/Badge.tsx","../../src/utils/utils.ts","../../src/components/Alternative/Alternative.tsx","../../src/components/Radio/Radio.tsx","../../src/components/Text/Text.tsx","../../src/components/Button/Button.tsx","../../src/components/IconButton/IconButton.tsx","../../src/components/Quiz/useQuizStore.ts","../../src/components/AlertDialog/AlertDialog.tsx","../../src/components/Modal/Modal.tsx","../../src/components/Select/Select.tsx","../../src/components/Card/Card.tsx","../../src/components/ProgressBar/ProgressBar.tsx","../../src/components/ProgressCircle/ProgressCircle.tsx","../../src/components/MultipleChoice/MultipleChoice.tsx","../../src/components/CheckBox/CheckboxList.tsx","../../src/components/CheckBox/CheckBox.tsx"],"sourcesContent":["import {\n  CaretLeft,\n  CaretRight,\n  Clock,\n  SquaresFour,\n  BookOpen,\n  Book,\n} from 'phosphor-react';\nimport Badge from '../Badge/Badge';\nimport {\n  AlternativesList,\n  HeaderAlternative,\n} from '../Alternative/Alternative';\nimport Button from '../Button/Button';\nimport IconButton from '../IconButton/IconButton';\nimport {\n  forwardRef,\n  ReactNode,\n  useEffect,\n  useMemo,\n  useState,\n  useCallback,\n  useRef,\n} from 'react';\nimport {\n  Question,\n  useQuizStore,\n  QUESTION_DIFFICULTY,\n  QUESTION_TYPE,\n} from './useQuizStore';\nimport { AlertDialog } from '../AlertDialog/AlertDialog';\nimport Modal from '../Modal/Modal';\nimport SimulatedResult from '@/assets/img/simulated-result.png';\nimport Select, {\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from '../Select/Select';\nimport { CardResults, CardStatus } from '../Card/Card';\nimport ProgressCircle from '../ProgressCircle/ProgressCircle';\nimport ProgressBar from '../ProgressBar/ProgressBar';\nimport { cn } from '../../utils/utils';\nimport { MultipleChoiceList } from '../MultipleChoice/MultipleChoice';\n\nconst Quiz = forwardRef<\n  HTMLDivElement,\n  { children: ReactNode; className?: string }\n>(({ children, className, ...props }, ref) => {\n  return (\n    <div\n      ref={ref}\n      className={cn(\n        'w-full max-w-[1000px] flex flex-col mx-auto h-full relative not-lg:px-6',\n        className\n      )}\n      {...props}\n    >\n      {children}\n    </div>\n  );\n});\n\nconst QuizHeaderResult = forwardRef<HTMLDivElement, { className?: string }>(\n  ({ className, ...props }, ref) => {\n    const { getCurrentQuestion, getCurrentAnswer, getAllCurrentAnswer } =\n      useQuizStore();\n    const currentQuestion = getCurrentQuestion();\n    const userAnswer = getCurrentAnswer();\n    const [isCorrect, setIsCorrect] = useState(false);\n\n    useEffect(() => {\n      if (currentQuestion?.type === QUESTION_TYPE.MULTIPLA_CHOICE) {\n        const allCurrentAnswers = getAllCurrentAnswer();\n        const isCorrectOption = currentQuestion.options.filter(\n          (op) => op.isCorrect\n        );\n\n        if (allCurrentAnswers?.length !== isCorrectOption.length) {\n          setIsCorrect(false);\n          return;\n        }\n\n        setIsCorrect(true);\n\n        allCurrentAnswers.forEach((answer) => {\n          const findInCorrectOptions = isCorrectOption.find(\n            (op) => op.id === answer.optionId\n          );\n          if (!findInCorrectOptions) {\n            setIsCorrect(false);\n          }\n        });\n      } else {\n        setIsCorrect(\n          currentQuestion?.options.find((op) => op.id === userAnswer)\n            ?.isCorrect || false\n        );\n      }\n    }, [currentQuestion, getAllCurrentAnswer]);\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          'flex flex-row items-center gap-10 p-3.5 rounded-xl mb-4',\n          isCorrect ? 'bg-success-background' : 'bg-error-background',\n          className\n        )}\n        {...props}\n      >\n        <p className=\"text-text-950 font-bold text-lg\">Resultado</p>\n        <p className=\"text-text-700 text-md\">\n          {isCorrect ? '🎉 Parabéns!!' : 'Não foi dessa vez...'}\n        </p>\n      </div>\n    );\n  }\n);\n\nconst QuizTitle = forwardRef<HTMLDivElement, { className?: string }>(\n  ({ className, ...props }, ref) => {\n    const {\n      currentQuestionIndex,\n      getTotalQuestions,\n      getQuizTitle,\n      timeElapsed,\n      formatTime,\n      isStarted,\n    } = useQuizStore();\n\n    const totalQuestions = getTotalQuestions();\n    const quizTitle = getQuizTitle();\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          'flex flex-row justify-center items-center relative p-2',\n          className\n        )}\n        {...props}\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\n        <span className=\"absolute right-2\">\n          <Badge variant=\"outlined\" action=\"info\" iconLeft={<Clock />}>\n            {isStarted ? formatTime(timeElapsed) : '00:00'}\n          </Badge>\n        </span>\n      </div>\n    );\n  }\n);\n\nconst QuizHeader = () => {\n  const { getCurrentQuestion } = useQuizStore();\n  const currentQuestion = getCurrentQuestion();\n\n  return (\n    <HeaderAlternative\n      title={currentQuestion ? `Questão ${currentQuestion.id}` : 'Questão'}\n      subTitle={currentQuestion?.knowledgeMatrix?.[0]?.topicId ?? ''}\n      content={currentQuestion?.questionText ?? ''}\n    />\n  );\n};\n\nconst QuizContent = forwardRef<\n  HTMLDivElement,\n  {\n    type?: 'Alternativas' | 'Dissertativa';\n    variant?: 'result' | 'default';\n    className?: string;\n  }\n>(({ type = 'Alternativas', className, variant, ...props }, ref) => {\n  const { getCurrentQuestion } = useQuizStore();\n  const currentQuestion = getCurrentQuestion();\n\n  return (\n    <>\n      <div className=\"px-4 pb-2 pt-6\">\n        <p className=\"font-bold text-lg text-text-950\">{type}</p>\n      </div>\n\n      <div\n        ref={ref}\n        className={cn(\n          'rounded-t-xl px-4 pt-4 pb-[80px] h-full flex flex-col gap-4 mb-auto',\n          className\n        )}\n        {...props}\n      >\n        {currentQuestion && (\n          <>\n            {currentQuestion.type === QUESTION_TYPE.ALTERNATIVA && (\n              <QuizAlternative variant={variant} />\n            )}\n            {currentQuestion.type === QUESTION_TYPE.MULTIPLA_CHOICE && (\n              <QuizMultipleChoice variant={variant} />\n            )}\n            {currentQuestion.type === QUESTION_TYPE.DISSERTATIVA && (\n              <div>Componente de dissertativa</div>\n            )}\n          </>\n        )}\n      </div>\n    </>\n  );\n});\n\nenum Status {\n  CORRECT = 'correct',\n  INCORRECT = 'incorrect',\n  NEUTRAL = 'neutral',\n}\n\ninterface QuizAlternativeInterface {\n  variant?: 'result' | 'default';\n}\n\nconst QuizAlternative = ({ variant = 'default' }: QuizAlternativeInterface) => {\n  const { getCurrentQuestion, selectAnswer, getCurrentAnswer } = useQuizStore();\n  const currentQuestion = getCurrentQuestion();\n  const currentAnswer = getCurrentAnswer();\n  const alternatives = currentQuestion?.options?.map((option) => {\n    let status: Status = Status.NEUTRAL;\n\n    if (variant === 'result') {\n      const isCorrectOption = currentQuestion.options.find(\n        (op) => op.isCorrect\n      );\n      if (isCorrectOption?.id === option.id) {\n        status = Status.CORRECT;\n      } else if (\n        currentAnswer === option.id &&\n        option.id !== isCorrectOption?.id\n      ) {\n        status = Status.INCORRECT;\n      }\n    }\n\n    return {\n      label: option.option,\n      value: option.id,\n      status: status,\n    };\n  });\n\n  if (!alternatives)\n    return (\n      <div>\n        <p>Não há Alternativas</p>\n      </div>\n    );\n\n  return (\n    <div className=\"space-y-4\">\n      <AlternativesList\n        mode={variant === 'default' ? 'interactive' : 'readonly'}\n        key={`question-${currentQuestion?.id || '1'}`}\n        name={`question-${currentQuestion?.id || '1'}`}\n        layout=\"compact\"\n        alternatives={alternatives}\n        value={currentAnswer}\n        selectedValue={currentAnswer}\n        onValueChange={(value) => {\n          if (currentQuestion) {\n            selectAnswer(currentQuestion.id, value);\n          }\n        }}\n      />\n    </div>\n  );\n};\n\ninterface QuizMultipleChoiceInterface {\n  variant?: 'result' | 'default';\n}\n\nconst QuizMultipleChoice = ({\n  variant = 'default',\n}: QuizMultipleChoiceInterface) => {\n  const { getCurrentQuestion, selectMultipleAnswer, getAllCurrentAnswer } =\n    useQuizStore();\n  const currentQuestion = getCurrentQuestion();\n  const allCurrentAnswers = getAllCurrentAnswer();\n\n  // Use ref to track previous values and prevent unnecessary updates\n  const prevSelectedValuesRef = useRef<string[]>([]);\n  const prevQuestionIdRef = useRef<string>('');\n\n  // Memoize the answer IDs to prevent unnecessary re-renders\n  const allCurrentAnswerIds = useMemo(() => {\n    return allCurrentAnswers?.map((answer) => answer.optionId) || [];\n  }, [allCurrentAnswers]);\n\n  // Memoize the selected values to prevent infinite loops\n  const selectedValues = useMemo(() => {\n    return allCurrentAnswerIds?.filter((id): id is string => id !== null) || [];\n  }, [allCurrentAnswerIds]);\n\n  // Only update selectedValues if they actually changed or question changed\n  const stableSelectedValues = useMemo(() => {\n    const currentQuestionId = currentQuestion?.id || '';\n    const hasQuestionChanged = prevQuestionIdRef.current !== currentQuestionId;\n\n    if (hasQuestionChanged) {\n      prevQuestionIdRef.current = currentQuestionId;\n      prevSelectedValuesRef.current = selectedValues;\n      return selectedValues;\n    }\n\n    // Only update if values actually changed\n    const hasValuesChanged =\n      JSON.stringify(prevSelectedValuesRef.current) !==\n      JSON.stringify(selectedValues);\n    if (hasValuesChanged) {\n      prevSelectedValuesRef.current = selectedValues;\n      return selectedValues;\n    }\n\n    return prevSelectedValuesRef.current;\n  }, [selectedValues, currentQuestion?.id]);\n\n  // Memoize the callback to prevent unnecessary re-renders\n  const handleSelectedValues = useCallback(\n    (values: string[]) => {\n      if (currentQuestion) {\n        selectMultipleAnswer(currentQuestion.id, values);\n      }\n    },\n    [currentQuestion, selectMultipleAnswer]\n  );\n\n  // Create a stable key to force re-mount when question changes\n  const questionKey = useMemo(\n    () => `question-${currentQuestion?.id || '1'}`,\n    [currentQuestion?.id]\n  );\n  const choices = currentQuestion?.options?.map((option) => {\n    let status: Status = Status.NEUTRAL;\n\n    if (variant === 'result') {\n      const isAllCorrectOptionId = currentQuestion.options\n        .filter((op) => op.isCorrect)\n        .map((op) => op.id);\n\n      if (isAllCorrectOptionId.includes(option.id)) {\n        status = Status.CORRECT;\n      } else if (\n        allCurrentAnswerIds?.includes(option.id) &&\n        !isAllCorrectOptionId.includes(option.id)\n      ) {\n        status = Status.INCORRECT;\n      }\n    }\n\n    return {\n      label: option.option,\n      value: option.id,\n      status: status,\n    };\n  });\n\n  if (!choices)\n    return (\n      <div>\n        <p>Não há Escolhas Multiplas</p>\n      </div>\n    );\n\n  return (\n    <div className=\"space-y-4\">\n      <MultipleChoiceList\n        choices={choices}\n        key={questionKey}\n        name={questionKey}\n        selectedValues={stableSelectedValues}\n        onHandleSelectedValues={handleSelectedValues}\n        mode={variant === 'default' ? 'interactive' : 'readonly'}\n      />\n    </div>\n  );\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  } = useQuizStore();\n\n  const groupedQuestions = getQuestionsGroupedBySubject();\n\n  const getQuestionStatus = (questionId: string) => {\n    return getQuestionStatusFromUserAnswers(questionId);\n  };\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\n        switch (filterType) {\n          case 'answered':\n            return status === 'answered';\n          case 'unanswered':\n            return status === 'unanswered';\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 getQuestionIndex = (questionId: string) => {\n    const { bySimulated, byActivity, byQuestionary } = useQuizStore.getState();\n    const quiz = bySimulated ?? byActivity ?? byQuestionary;\n    if (!quiz) return 0;\n\n    const index = quiz.questions.findIndex((q) => q.id === questionId);\n    return index + 1;\n  };\n\n  const getStatusLabel = (status: string) => {\n    switch (status) {\n      case 'answered':\n        return 'Respondida';\n      case 'skipped':\n        return 'Não respondida';\n      default:\n        return 'Em branco';\n    }\n  };\n  return (\n    <div className=\"space-y-6 px-4\">\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                <BookOpen size={17} className=\"text-white\" />\n              </div>\n              <p className=\"text-text-800 font-bold text-lg\">{subjectId}</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\n                return (\n                  <CardStatus\n                    key={question.id}\n                    header={`Questão ${questionNumber.toString().padStart(2, '0')}`}\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\nconst QuizFooter = forwardRef<\n  HTMLDivElement,\n  {\n    className?: string;\n    variant?: 'result' | 'default';\n    onGoToSimulated?: () => void;\n    onDetailResult?: () => void;\n  }\n>(\n  (\n    {\n      className,\n      onGoToSimulated,\n      onDetailResult,\n      variant = 'default',\n      ...props\n    },\n    ref\n  ) => {\n    const {\n      currentQuestionIndex,\n      getUserAnswers,\n      getTotalQuestions,\n      goToNextQuestion,\n      goToPreviousQuestion,\n      getUnansweredQuestionsFromUserAnswers,\n      getCurrentAnswer,\n      skipQuestion,\n      getCurrentQuestion,\n      getQuestionStatusFromUserAnswers,\n      getActiveQuiz,\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    const [alertDialogOpen, setAlertDialogOpen] = useState(false);\n    const [modalResultOpen, setModalResultOpen] = useState(false);\n    const [modalNavigateOpen, setModalNavigateOpen] = useState(false);\n    const [filterType, setFilterType] = useState('all');\n    const unansweredQuestions = getUnansweredQuestionsFromUserAnswers();\n    const userAnswers = getUserAnswers();\n    const allQuestions = getTotalQuestions();\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={<SquaresFour size={24} className=\"text-text-950\" />}\n                  size=\"md\"\n                  onClick={() => setModalNavigateOpen(true)}\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={<CaretLeft size={18} />}\n                    onClick={() => {\n                      goToPreviousQuestion();\n                    }}\n                  >\n                    Voltar\n                  </Button>\n                )}\n              </div>\n\n              {!isFirstQuestion && (\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                  disabled={!currentAnswer && !isCurrentQuestionSkipped}\n                  onClick={() => {\n                    if (unansweredQuestions.length > 0) {\n                      setAlertDialogOpen(true);\n                    } else {\n                      setModalResultOpen(true);\n                    }\n                  }}\n                >\n                  Finalizar\n                </Button>\n              ) : (\n                <Button\n                  size=\"medium\"\n                  variant=\"link\"\n                  action=\"primary\"\n                  iconRight={<CaretRight size={18} />}\n                  disabled={!currentAnswer && !isCurrentQuestionSkipped}\n                  onClick={() => {\n                    goToNextQuestion();\n                  }}\n                >\n                  Avançar\n                </Button>\n              )}\n            </>\n          ) : (\n            <div className=\"flex flex-row items-center justify-end w-full\">\n              <Button variant=\"solid\" action=\"primary\" size=\"medium\">\n                Ver Resolução\n              </Button>\n            </div>\n          )}\n        </footer>\n\n        <AlertDialog\n          isOpen={alertDialogOpen}\n          onChangeOpen={setAlertDialogOpen}\n          title=\"Finalizar simulado?\"\n          description={\n            unansweredQuestions.length > 0\n              ? `Você deixou as questões ${unansweredQuestions.join(', ')} sem resposta. Finalizar agora pode impactar seu desempenho.`\n              : 'Tem certeza que deseja finalizar o simulado?'\n          }\n          cancelButtonLabel=\"Voltar e revisar\"\n          submitButtonLabel=\"Finalizar Mesmo Assim\"\n          onSubmit={() => {\n            setModalResultOpen(true);\n          }}\n        />\n\n        <Modal\n          isOpen={modalResultOpen}\n          onClose={() => setModalResultOpen(false)}\n          title=\"\"\n          closeOnBackdropClick={false}\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            <img\n              src={SimulatedResult}\n              alt=\"Simulated Result\"\n              className=\"w-[282px] h-auto object-cover\"\n            />\n            <div className=\"flex flex-col gap-2 text-center\">\n              <h2 className=\"text-text-950 font-bold text-lg\">\n                Você concluiu o simulado!\n              </h2>\n              <p className=\"text-text-500 font-sm\">\n                Você acertou{' '}\n                {(() => {\n                  const activeQuiz = getActiveQuiz();\n                  if (!activeQuiz) return 0;\n\n                  return userAnswers.filter((answer) => {\n                    const question = activeQuiz.quiz.questions.find(\n                      (q) => q.id === answer.questionId\n                    );\n                    const isCorrectOption = question?.options.find(\n                      (op) => op.isCorrect\n                    );\n                    return question && answer.optionId === isCorrectOption?.id;\n                  }).length;\n                })()}{' '}\n                de {allQuestions} questões.\n              </p>\n            </div>\n\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                Ir para simulados\n              </Button>\n\n              <Button className=\"w-full\" onClick={onDetailResult}>\n                Detalhar resultado\n              </Button>\n            </div>\n          </div>\n        </Modal>\n\n        <Modal\n          isOpen={modalNavigateOpen}\n          onClose={() => setModalNavigateOpen(false)}\n          title=\"Questões\"\n          size={'lg'}\n        >\n          <div className=\"flex flex-col w-full h-full\">\n            <div className=\"flex flex-row justify-between items-center py-6 pt-6 pb-4 border-b border-border-200\">\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 variant=\"rounded\" className=\"max-w-[266px]\">\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 not-lg:h-[calc(100vh-200px)] lg:max-h-[687px] overflow-y-auto\">\n              <QuizQuestionList\n                filterType={filterType}\n                onQuestionClick={() => setModalNavigateOpen(false)}\n              />\n            </div>\n          </div>\n        </Modal>\n      </>\n    );\n  }\n);\n\n// QUIZ RESULT COMPONENTS\n\nconst QuizResultHeaderTitle = forwardRef<\n  HTMLDivElement,\n  { className?: string }\n>(({ className, ...props }, ref) => {\n  const { bySimulated } = useQuizStore();\n\n  return (\n    <div\n      ref={ref}\n      className={cn('flex flex-row pt-4 justify-between', className)}\n      {...props}\n    >\n      <p className=\"text-text-950 font-bold text-2xl\">Resultado</p>\n      {bySimulated && (\n        <Badge variant=\"solid\" action=\"info\">\n          {bySimulated.category}\n        </Badge>\n      )}\n    </div>\n  );\n});\n\nconst QuizResultTitle = forwardRef<\n  HTMLParagraphElement,\n  { className?: string }\n>(({ className, ...props }, ref) => {\n  const { getQuizTitle } = useQuizStore();\n  const quizTitle = getQuizTitle();\n\n  return (\n    <p\n      className={cn('pt-6 pb-4 text-text-950 font-bold text-lg', className)}\n      ref={ref}\n      {...props}\n    >\n      {quizTitle}\n    </p>\n  );\n});\n\nconst QuizResultPerformance = forwardRef<HTMLDivElement>(\n  ({ ...props }, ref) => {\n    const {\n      getTotalQuestions,\n      timeElapsed,\n      formatTime,\n      bySimulated,\n      byActivity,\n      byQuestionary,\n      getUserAnswerByQuestionId,\n    } = useQuizStore();\n\n    const totalQuestions = getTotalQuestions();\n    const quiz = bySimulated || byActivity || byQuestionary;\n\n    let correctAnswers = 0;\n    let correctEasyAnswers = 0;\n    let correctMediumAnswers = 0;\n    let correctDifficultAnswers = 0;\n    let totalEasyQuestions = 0;\n    let totalMediumQuestions = 0;\n    let totalDifficultQuestions = 0;\n\n    if (quiz) {\n      quiz.questions.forEach((question) => {\n        const userAnswerItem = getUserAnswerByQuestionId(question.id);\n        const userAnswer = userAnswerItem?.optionId;\n        const isCorrectOption = question?.options.find((op) => op.isCorrect);\n        const isCorrect = userAnswer && userAnswer === isCorrectOption?.id;\n\n        if (isCorrect) {\n          correctAnswers++;\n        }\n\n        if (question.difficulty === QUESTION_DIFFICULTY.FACIL) {\n          totalEasyQuestions++;\n          if (isCorrect) {\n            correctEasyAnswers++;\n          }\n        } else if (question.difficulty === QUESTION_DIFFICULTY.MEDIO) {\n          totalMediumQuestions++;\n          if (isCorrect) {\n            correctMediumAnswers++;\n          }\n        } else if (question.difficulty === QUESTION_DIFFICULTY.DIFICIL) {\n          totalDifficultQuestions++;\n          if (isCorrect) {\n            correctDifficultAnswers++;\n          }\n        }\n      });\n    }\n\n    const percentage =\n      totalQuestions > 0\n        ? Math.round((correctAnswers / totalQuestions) * 100)\n        : 0;\n\n    return (\n      <div\n        className=\"flex flex-row gap-6 p-6 rounded-xl bg-background justify-between\"\n        ref={ref}\n        {...props}\n      >\n        <div className=\"relative\">\n          <ProgressCircle\n            size=\"medium\"\n            variant=\"green\"\n            value={percentage}\n            showPercentage={false}\n            label=\"\"\n          />\n\n          <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n            <div className=\"flex items-center gap-1 mb-1\">\n              <Clock size={12} weight=\"regular\" className=\"text-text-800\" />\n              <span className=\"text-2xs font-medium text-text-800\">\n                {formatTime(timeElapsed)}\n              </span>\n            </div>\n\n            <div className=\"text-2xl font-medium text-text-800 leading-7\">\n              {correctAnswers} de {totalQuestions}\n            </div>\n\n            <div className=\"text-2xs font-medium text-text-600 mt-1\">\n              Corretas\n            </div>\n          </div>\n        </div>\n\n        <div className=\"flex flex-col gap-4 w-full\">\n          <ProgressBar\n            className=\"w-full\"\n            layout=\"stacked\"\n            variant=\"green\"\n            value={correctEasyAnswers}\n            max={totalEasyQuestions}\n            label=\"Fáceis\"\n            showHitCount\n            labelClassName=\"text-base font-medium text-text-800 leading-none\"\n            percentageClassName=\"text-xs font-medium leading-[14px] text-right\"\n          />\n\n          <ProgressBar\n            className=\"w-full\"\n            layout=\"stacked\"\n            variant=\"green\"\n            value={correctMediumAnswers}\n            max={totalMediumQuestions}\n            label=\"Médias\"\n            showHitCount\n            labelClassName=\"text-base font-medium text-text-800 leading-none\"\n            percentageClassName=\"text-xs font-medium leading-[14px] text-right\"\n          />\n\n          <ProgressBar\n            className=\"w-full\"\n            layout=\"stacked\"\n            variant=\"green\"\n            value={correctDifficultAnswers}\n            max={totalDifficultQuestions}\n            label=\"Difíceis\"\n            showHitCount\n            labelClassName=\"text-base font-medium text-text-800 leading-none\"\n            percentageClassName=\"text-xs font-medium leading-[14px] text-right\"\n          />\n        </div>\n      </div>\n    );\n  }\n);\n\nconst QuizListResult = forwardRef<\n  HTMLDivElement,\n  {\n    className?: string;\n    onSubjectClick?: (subject: string) => void;\n  }\n>(({ className, onSubjectClick, ...props }, ref) => {\n  const {\n    getQuestionsGroupedBySubject,\n    isQuestionAnswered,\n    getUserAnswerByQuestionId,\n  } = useQuizStore();\n  const groupedQuestions = getQuestionsGroupedBySubject();\n\n  const subjectsStats = Object.entries(groupedQuestions).map(\n    ([subjectId, questions]) => {\n      let correct = 0;\n      let incorrect = 0;\n\n      questions.forEach((question) => {\n        if (isQuestionAnswered(question.id)) {\n          const userAnswerItem = getUserAnswerByQuestionId(question.id);\n          const userAnswer = userAnswerItem?.optionId;\n          const isCorrectOption = question?.options.find((op) => op.isCorrect);\n          if (userAnswer === isCorrectOption?.id) {\n            correct++;\n          } else {\n            incorrect++;\n          }\n        }\n      });\n\n      return {\n        subject: subjectId,\n        correct,\n        incorrect,\n        total: questions.length,\n      };\n    }\n  );\n\n  return (\n    <section ref={ref} className={className} {...props}>\n      <p className=\"pt-6 pb-4 text-text-950 font-bold text-lg\">Matérias</p>\n\n      <ul className=\"flex flex-col gap-2\">\n        {subjectsStats.map((subject) => (\n          <li key={subject.subject}>\n            <CardResults\n              onClick={() => onSubjectClick?.(subject.subject)}\n              className=\"max-w-full\"\n              header={subject.subject}\n              correct_answers={subject.correct}\n              incorrect_answers={subject.incorrect}\n              icon={<Book size={20} />}\n              direction=\"row\"\n            />\n          </li>\n        ))}\n      </ul>\n    </section>\n  );\n});\n\nconst QuizListResultByMateria = ({\n  subject,\n  onQuestionClick,\n}: {\n  subject: string;\n  onQuestionClick: (question: Question) => void;\n}) => {\n  const { getQuestionsGroupedBySubject, getUserAnswerByQuestionId } =\n    useQuizStore();\n  const groupedQuestions = getQuestionsGroupedBySubject();\n\n  const answeredQuestions = groupedQuestions[subject] || [];\n\n  return (\n    <div className=\"w-full max-w-[1000px] flex flex-col mx-auto h-full relative not-lg:px-6\">\n      <div className=\"flex flex-row pt-4 justify-between\">\n        <p className=\"text-text-950 font-bold text-2xl\">{subject}</p>\n      </div>\n\n      <section className=\"flex flex-col \">\n        <p className=\"pt-6 pb-4 text-text-950 font-bold text-lg\">\n          Resultado das questões\n        </p>\n\n        <ul className=\"flex flex-col gap-2 pt-4\">\n          {answeredQuestions.map((question) => (\n            <li key={question.id}>\n              <CardStatus\n                className=\"max-w-full\"\n                header={`Questão ${question.id}`}\n                status={(() => {\n                  const userAnswer = getUserAnswerByQuestionId(question.id);\n                  const isCorrectOption = question?.options.find(\n                    (op) => op.isCorrect\n                  );\n\n                  return userAnswer &&\n                    userAnswer.optionId === isCorrectOption?.id\n                    ? 'correct'\n                    : 'incorrect';\n                })()}\n                onClick={() => onQuestionClick?.(question)}\n              />\n            </li>\n          ))}\n        </ul>\n      </section>\n    </div>\n  );\n};\n\nexport {\n  QuizHeaderResult,\n  QuizTitle,\n  Quiz,\n  QuizHeader,\n  QuizContent,\n  QuizAlternative,\n  QuizQuestionList,\n  QuizFooter,\n  QuizListResult,\n  QuizResultHeaderTitle,\n  QuizResultTitle,\n  QuizResultPerformance,\n  QuizListResultByMateria,\n  QuizMultipleChoice,\n};\n","import { HTMLAttributes, ReactNode } from 'react';\nimport { Bell } from 'phosphor-react';\nimport { cn } from '../../utils/utils';\n\n/**\n * Lookup table for variant and action class combinations\n */\nconst VARIANT_ACTION_CLASSES = {\n  solid: {\n    error: 'bg-error-background text-error-700 focus-visible:outline-none',\n    warning: 'bg-warning text-warning-800 focus-visible:outline-none',\n    success: 'bg-success text-success-800 focus-visible:outline-none',\n    info: 'bg-info text-info-800 focus-visible:outline-none',\n    muted: 'bg-background-muted text-background-800 focus-visible:outline-none',\n  },\n  outlined: {\n    error:\n      'bg-error text-error-700 border border-error-300 focus-visible:outline-none',\n    warning:\n      'bg-warning text-warning-800 border border-warning-300 focus-visible:outline-none',\n    success:\n      'bg-success text-success-800 border border-success-300 focus-visible:outline-none',\n    info: 'bg-info text-info-800 border border-info-300 focus-visible:outline-none',\n    muted:\n      'bg-background-muted text-background-800 border border-border-300 focus-visible:outline-none',\n  },\n  exams: {\n    exam1: 'bg-exam-1 text-info-700 focus-visible:outline-none',\n    exam2: 'bg-exam-2 text-typography-1 focus-visible:outline-none',\n    exam3: 'bg-exam-3 text-typography-2 focus-visible:outline-none',\n    exam4: 'bg-exam-4 text-success-700 focus-visible:outline-none',\n  },\n  examsOutlined: {\n    exam1:\n      'bg-exam-1 text-info-700 border border-info-700 focus-visible:outline-none',\n    exam2:\n      'bg-exam-2 text-typography-1 border border-typography-1 focus-visible:outline-none',\n    exam3:\n      'bg-exam-3 text-typography-2 border border-typography-2 focus-visible:outline-none',\n    exam4:\n      'bg-exam-4 text-success-700 border border-success-700 focus-visible:outline-none',\n  },\n  resultStatus: {\n    negative: 'bg-error text-error-800 focus-visible:outline-none',\n    positive: 'bg-success text-success-800 focus-visible:outline-none',\n  },\n  notification: 'text-primary',\n} as const;\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n  small: 'text-2xs px-2 py-1',\n  medium: 'text-xs px-2 py-1',\n  large: 'text-sm px-2 py-1',\n} as const;\n\nconst SIZE_CLASSES_ICON = {\n  small: 'size-3',\n  medium: 'size-3.5',\n  large: 'size-4',\n} as const;\n\n/**\n * Badge component props interface\n */\ntype BadgeProps = {\n  /** Content to be displayed inside the badge */\n  children?: ReactNode;\n  /** Ícone à direita do texto */\n  iconRight?: ReactNode;\n  /** Ícone à esquerda do texto */\n  iconLeft?: ReactNode;\n  /** Size of the badge */\n  size?: 'small' | 'medium' | 'large';\n  /** Visual variant of the badge */\n  variant?:\n    | 'solid'\n    | 'outlined'\n    | 'exams'\n    | 'examsOutlined'\n    | 'resultStatus'\n    | 'notification';\n  /** Action type of the badge  */\n  action?:\n    | 'error'\n    | 'warning'\n    | 'success'\n    | 'info'\n    | 'muted'\n    | 'exam1'\n    | 'exam2'\n    | 'exam3'\n    | 'exam4'\n    | 'positive'\n    | 'negative';\n  /** Additional CSS classes to apply */\n  className?: string;\n  notificationActive?: boolean;\n} & HTMLAttributes<HTMLDivElement>;\n\n/**\n * Badge component for Analytica Ensino platforms\n *\n * A flexible button component with multiple variants, sizes and actions.\n *\n * @param children - The content to display inside the badge\n * @param size - The size variant (extra-small, small, medium, large, extra-large)\n * @param variant - The visual style variant (solid, outline, link)\n * @param action - The action type (primary, positive, negative)\n * @param className - Additional CSS classes\n * @param props - All other standard div HTML attributes\n * @returns A styled badge element\n *\n * @example\n * ```tsx\n * <Badge variant=\"solid\" action=\"info\" size=\"medium\">\n *   Information\n * </Badge>\n * ```\n */\nconst Badge = ({\n  children,\n  iconLeft,\n  iconRight,\n  size = 'medium',\n  variant = 'solid',\n  action = 'error',\n  className = '',\n  notificationActive = false,\n  ...props\n}: BadgeProps) => {\n  // Get classes from lookup tables\n  const sizeClasses = SIZE_CLASSES[size];\n  const sizeClassesIcon = SIZE_CLASSES_ICON[size];\n  const variantActionMap = VARIANT_ACTION_CLASSES[variant] || {};\n  const variantClasses =\n    typeof variantActionMap === 'string'\n      ? variantActionMap\n      : ((variantActionMap as Record<string, string>)[action] ??\n        (variantActionMap as Record<string, string>).muted ??\n        '');\n\n  const baseClasses =\n    'inline-flex items-center justify-center rounded-xs font-normal gap-1 relative';\n\n  const baseClassesIcon = 'flex items-center';\n  if (variant === 'notification') {\n    return (\n      <div\n        className={cn(baseClasses, variantClasses, sizeClasses, className)}\n        {...props}\n      >\n        <Bell size={24} className=\"text-current\" aria-hidden=\"true\" />\n\n        {notificationActive && (\n          <span\n            data-testid=\"notification-dot\"\n            className=\"absolute top-[5px] right-[10px] block h-2 w-2 rounded-full bg-indicator-error ring-2 ring-white\"\n          />\n        )}\n      </div>\n    );\n  }\n  return (\n    <div\n      className={cn(baseClasses, variantClasses, sizeClasses, className)}\n      {...props}\n    >\n      {iconLeft && (\n        <span className={cn(baseClassesIcon, sizeClassesIcon)}>{iconLeft}</span>\n      )}\n      {children}\n      {iconRight && (\n        <span className={cn(baseClassesIcon, sizeClassesIcon)}>\n          {iconRight}\n        </span>\n      )}\n    </div>\n  );\n};\n\nexport default Badge;\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n","import { CheckCircle, XCircle } from 'phosphor-react';\nimport Badge from '../Badge/Badge';\nimport { RadioGroup, RadioGroupItem } from '../Radio/Radio';\nimport { forwardRef, HTMLAttributes, useId, useState } from 'react';\nimport { cn } from '../../utils/utils';\n\n/**\n * Interface para definir uma alternativa\n */\nexport interface Alternative {\n  value: string;\n  label: string;\n  status?: 'correct' | 'incorrect' | 'neutral';\n  disabled?: boolean;\n  description?: string;\n}\n\n/**\n * Props do componente AlternativesList\n */\nexport interface AlternativesListProps {\n  /** Lista de alternativas */\n  alternatives: Alternative[];\n  /** Nome do grupo de radio */\n  name?: string;\n  /** Valor selecionado por padrão */\n  defaultValue?: string;\n  /** Valor controlado */\n  value?: string;\n  /** Callback quando uma alternativa é selecionada */\n  onValueChange?: (value: string) => void;\n  /** Se o componente está desabilitado */\n  disabled?: boolean;\n  /** Layout das alternativas */\n  layout?: 'default' | 'compact' | 'detailed';\n  /** Classes CSS adicionais */\n  className?: string;\n  /** Modo de exibição: interativo (com radios funcionais) ou readonly (apenas visual) */\n  mode?: 'interactive' | 'readonly';\n  /** Valor selecionado pelo usuário (apenas para modo readonly) */\n  selectedValue?: string;\n}\n\n/**\n * Componente reutilizável para exibir lista de alternativas com RadioGroup\n *\n * Suporta dois modos:\n * - `interactive`: Permite interação com radios (padrão)\n * - `readonly`: Apenas exibição visual dos estados\n *\n * @example\n * ```tsx\n * // Modo interativo (padrão)\n * <AlternativesList\n *   mode=\"interactive\"\n *   alternatives={[\n *     { value: \"a\", label: \"Alternativa A\", status: \"correct\" },\n *     { value: \"b\", label: \"Alternativa B\", status: \"incorrect\" },\n *     { value: \"c\", label: \"Alternativa C\" }\n *   ]}\n *   defaultValue=\"a\"\n *   onValueChange={(value) => console.log(value)}\n * />\n *\n * // Modo readonly - mostra seleção do usuário\n * <AlternativesList\n *   mode=\"readonly\"\n *   selectedValue=\"b\"  // O que o usuário selecionou\n *   alternatives={[\n *     { value: \"a\", label: \"Resposta A\", status: \"correct\" },  // Mostra como correta\n *     { value: \"b\", label: \"Resposta B\" },  // Mostra radio selecionado + badge incorreto\n *     { value: \"c\", label: \"Resposta C\" }\n *   ]}\n * />\n * ```\n */\nconst AlternativesList = ({\n  alternatives,\n  name,\n  defaultValue,\n  value,\n  onValueChange,\n  disabled = false,\n  layout = 'default',\n  className = '',\n  mode = 'interactive',\n  selectedValue,\n}: AlternativesListProps) => {\n  // Gerar um ID único para garantir que cada instância tenha seu próprio grupo\n  const uniqueId = useId();\n  const groupName = name || `alternatives-${uniqueId}`;\n  const [actualValue, setActualValue] = useState(value);\n  // No modo readonly, não precisamos de interação\n  const isReadonly = mode === 'readonly';\n  const getStatusStyles = (\n    status?: Alternative['status'],\n    isReadonly?: boolean\n  ) => {\n    const hoverClass = isReadonly ? '' : 'hover:bg-background-50';\n\n    switch (status) {\n      case 'correct':\n        return 'bg-success-background border-success-300';\n      case 'incorrect':\n        return 'bg-error-background border-error-300';\n      default:\n        return `bg-background border-border-100 ${hoverClass}`;\n    }\n  };\n\n  const getStatusBadge = (status?: Alternative['status']) => {\n    switch (status) {\n      case 'correct':\n        return (\n          <Badge variant=\"solid\" action=\"success\" iconLeft={<CheckCircle />}>\n            Resposta correta\n          </Badge>\n        );\n      case 'incorrect':\n        return (\n          <Badge variant=\"solid\" action=\"error\" iconLeft={<XCircle />}>\n            Resposta incorreta\n          </Badge>\n        );\n      default:\n        return null;\n    }\n  };\n\n  const getLayoutClasses = () => {\n    switch (layout) {\n      case 'compact':\n        return 'gap-2';\n      case 'detailed':\n        return 'gap-4';\n      default:\n        return 'gap-3.5';\n    }\n  };\n\n  // Componente para renderizar alternativa no modo readonly\n  const renderReadonlyAlternative = (alternative: Alternative) => {\n    const alternativeId = alternative.value;\n    const isUserSelected = selectedValue === alternative.value;\n    const isCorrectAnswer = alternative.status === 'correct';\n\n    // Determinar o status da alternativa para visualização\n    let displayStatus: Alternative['status'] = undefined;\n    if (isUserSelected && !isCorrectAnswer) {\n      // Usuário selecionou alternativa incorreta\n      displayStatus = 'incorrect';\n    } else if (isCorrectAnswer) {\n      // Alternativa correta (independente se foi selecionada ou não)\n      displayStatus = 'correct';\n    }\n\n    const statusStyles = getStatusStyles(displayStatus, true);\n    const statusBadge = getStatusBadge(displayStatus);\n\n    // Radio visual - apenas mostra selecionado se o usuário escolheu esta alternativa\n    const renderRadio = () => {\n      const radioClasses = `w-6 h-6 rounded-full border-2 cursor-default transition-all duration-200 flex items-center justify-center ${\n        isUserSelected\n          ? 'border-primary-950 bg-background'\n          : 'border-border-400 bg-background'\n      }`;\n\n      const dotClasses =\n        'w-3 h-3 rounded-full bg-primary-950 transition-all duration-200';\n\n      return (\n        <div className={radioClasses}>\n          {isUserSelected && <div className={dotClasses} />}\n        </div>\n      );\n    };\n\n    if (layout === 'detailed') {\n      return (\n        <div\n          key={alternativeId}\n          className={cn(\n            'border-2 rounded-lg p-4 w-full',\n            statusStyles,\n            alternative.disabled ? 'opacity-50' : ''\n          )}\n        >\n          <div className=\"flex items-start justify-between gap-3\">\n            <div className=\"flex items-start gap-3 flex-1\">\n              <div className=\"mt-1\">{renderRadio()}</div>\n              <div className=\"flex-1\">\n                <p\n                  className={cn(\n                    'block font-medium',\n                    selectedValue === alternative.value || statusBadge\n                      ? 'text-text-950'\n                      : 'text-text-600'\n                  )}\n                >\n                  {alternative.label}\n                </p>\n                {alternative.description && (\n                  <p className=\"text-sm text-text-600 mt-1\">\n                    {alternative.description}\n                  </p>\n                )}\n              </div>\n            </div>\n            {statusBadge && <div className=\"flex-shrink-0\">{statusBadge}</div>}\n          </div>\n        </div>\n      );\n    }\n\n    return (\n      <div\n        key={alternativeId}\n        className={cn(\n          'flex flex-row justify-between items-start gap-2 p-2 rounded-lg w-full',\n          statusStyles,\n          alternative.disabled ? 'opacity-50' : ''\n        )}\n      >\n        <div className=\"flex items-center gap-2 flex-1\">\n          {renderRadio()}\n          <span\n            className={cn(\n              'flex-1',\n              selectedValue === alternative.value || statusBadge\n                ? 'text-text-950'\n                : 'text-text-600'\n            )}\n          >\n            {alternative.label}\n          </span>\n        </div>\n        {statusBadge && <div className=\"flex-shrink-0\">{statusBadge}</div>}\n      </div>\n    );\n  };\n\n  // Se for modo readonly, renderizar sem RadioGroup\n  if (isReadonly) {\n    return (\n      <div\n        className={cn('flex flex-col', getLayoutClasses(), 'w-full', className)}\n      >\n        {alternatives.map((alternative) =>\n          renderReadonlyAlternative(alternative)\n        )}\n      </div>\n    );\n  }\n\n  return (\n    <RadioGroup\n      name={groupName}\n      defaultValue={defaultValue}\n      value={value}\n      onValueChange={(value) => {\n        setActualValue(value);\n        onValueChange?.(value);\n      }}\n      disabled={disabled}\n      className={cn('flex flex-col', getLayoutClasses(), className)}\n    >\n      {alternatives.map((alternative, index) => {\n        const alternativeId = alternative.value || `alt-${index}`;\n        const statusStyles = getStatusStyles(alternative.status, false);\n        const statusBadge = getStatusBadge(alternative.status);\n\n        if (layout === 'detailed') {\n          return (\n            <div\n              key={alternativeId}\n              className={cn(\n                'border-2 rounded-lg p-4 transition-all',\n                statusStyles,\n                alternative.disabled\n                  ? 'opacity-50 cursor-not-allowed'\n                  : 'cursor-pointer'\n              )}\n            >\n              <div className=\"flex items-start justify-between gap-3\">\n                <div className=\"flex items-start gap-3 flex-1\">\n                  <RadioGroupItem\n                    value={alternative.value}\n                    id={alternativeId}\n                    disabled={alternative.disabled}\n                    className=\"mt-1\"\n                  />\n                  <div className=\"flex-1\">\n                    <label\n                      htmlFor={alternativeId}\n                      className={cn(\n                        'block font-medium',\n                        actualValue === alternative.value\n                          ? 'text-text-950'\n                          : 'text-text-600',\n                        alternative.disabled\n                          ? 'cursor-not-allowed'\n                          : 'cursor-pointer'\n                      )}\n                    >\n                      {alternative.label}\n                    </label>\n                    {alternative.description && (\n                      <p className=\"text-sm text-text-600 mt-1\">\n                        {alternative.description}\n                      </p>\n                    )}\n                  </div>\n                </div>\n                {statusBadge && (\n                  <div className=\"flex-shrink-0\">{statusBadge}</div>\n                )}\n              </div>\n            </div>\n          );\n        }\n\n        return (\n          <div\n            key={alternativeId}\n            className={cn(\n              'flex flex-row justify-between gap-2 items-start p-2 rounded-lg transition-all',\n              statusStyles,\n              alternative.disabled ? 'opacity-50 cursor-not-allowed' : ''\n            )}\n          >\n            <div className=\"flex items-center gap-2 flex-1\">\n              <RadioGroupItem\n                value={alternative.value}\n                id={alternativeId}\n                disabled={alternative.disabled}\n              />\n              <label\n                htmlFor={alternativeId}\n                className={cn(\n                  'flex-1',\n                  actualValue === alternative.value\n                    ? 'text-text-950'\n                    : 'text-text-600',\n                  alternative.disabled ? 'cursor-not-allowed' : 'cursor-pointer'\n                )}\n              >\n                {alternative.label}\n              </label>\n            </div>\n            {statusBadge && <div className=\"flex-shrink-0\">{statusBadge}</div>}\n          </div>\n        );\n      })}\n    </RadioGroup>\n  );\n};\n\ninterface HeaderAlternativeProps extends HTMLAttributes<HTMLDivElement> {\n  title: string;\n  subTitle: string;\n  content: string;\n}\n\nconst HeaderAlternative = forwardRef<HTMLDivElement, HeaderAlternativeProps>(\n  ({ className, title, subTitle, content, ...props }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          'bg-background p-4 flex flex-col gap-4 rounded-xl',\n          className\n        )}\n        {...props}\n      >\n        <span className=\"flex flex-col\">\n          <p className=\"text-text-950 font-bold text-lg\">{title}</p>\n          <p className=\"text-text-700 text-sm \">{subTitle}</p>\n        </span>\n\n        <p className=\"text-text-950 text-md\">{content}</p>\n      </div>\n    );\n  }\n);\n\nexport { AlternativesList, HeaderAlternative };\n","import {\n  InputHTMLAttributes,\n  HTMLAttributes,\n  ReactNode,\n  forwardRef,\n  useState,\n  useId,\n  ChangeEvent,\n  useEffect,\n  useRef,\n  Children,\n  cloneElement,\n  isValidElement,\n  ReactElement,\n} from 'react';\nimport { create, StoreApi, useStore } from 'zustand';\nimport Text from '../Text/Text';\nimport { cn } from '../../utils/utils';\n\n/**\n * Radio size variants\n */\ntype RadioSize = 'small' | 'medium' | 'large' | 'extraLarge';\n\n/**\n * Radio visual state\n */\ntype RadioState = 'default' | 'hovered' | 'focused' | 'invalid' | 'disabled';\n\n/**\n * Size configurations using Tailwind classes\n */\nconst SIZE_CLASSES = {\n  small: {\n    radio: 'w-5 h-5',\n    textSize: 'sm' as const,\n    spacing: 'gap-1.5',\n    borderWidth: 'border-2',\n    dotSize: 'w-2.5 h-2.5',\n    labelHeight: 'h-5',\n  },\n  medium: {\n    radio: 'w-6 h-6',\n    textSize: 'md' as const,\n    spacing: 'gap-2',\n    borderWidth: 'border-2',\n    dotSize: 'w-3 h-3',\n    labelHeight: 'h-6',\n  },\n  large: {\n    radio: 'w-7 h-7',\n    textSize: 'lg' as const,\n    spacing: 'gap-2',\n    borderWidth: 'border-2',\n    dotSize: 'w-3.5 h-3.5',\n    labelHeight: 'h-7',\n  },\n  extraLarge: {\n    radio: 'w-8 h-8',\n    textSize: 'xl' as const,\n    spacing: 'gap-3',\n    borderWidth: 'border-2',\n    dotSize: 'w-4 h-4',\n    labelHeight: 'h-8',\n  },\n} as const;\n\n/**\n * Focused state maintains the same sizes as default state\n * Only adds wrapper styling, does not change radio/dot sizes\n */\n\n/**\n * Base radio styling classes using design system colors\n */\nconst BASE_RADIO_CLASSES =\n  'rounded-full border cursor-pointer transition-all duration-200 flex items-center justify-center focus:outline-none';\n\n/**\n * State-based styling classes using design system colors from styles.css\n */\nconst STATE_CLASSES = {\n  default: {\n    unchecked: 'border-border-400 bg-background hover:border-border-500',\n    checked: 'border-primary-950 bg-background hover:border-primary-800',\n  },\n  hovered: {\n    unchecked: 'border-border-500 bg-background',\n    checked: 'border-info-700 bg-background',\n  },\n  focused: {\n    unchecked: 'border-border-400 bg-background',\n    checked: 'border-primary-950 bg-background',\n  },\n  invalid: {\n    unchecked: 'border-border-400 bg-background',\n    checked: 'border-primary-950 bg-background',\n  },\n  disabled: {\n    unchecked: 'border-border-400 bg-background cursor-not-allowed',\n    checked: 'border-primary-950 bg-background cursor-not-allowed',\n  },\n} as const;\n\n/**\n * Dot styling classes for the inner dot when checked\n */\nconst DOT_CLASSES = {\n  default: 'bg-primary-950',\n  hovered: 'bg-info-700',\n  focused: 'bg-primary-950',\n  invalid: 'bg-primary-950',\n  disabled: 'bg-primary-950',\n} as const;\n\n/**\n * Radio component props interface\n */\nexport type RadioProps = {\n  /** Label text to display next to the radio */\n  label?: ReactNode;\n  /** Size variant of the radio */\n  size?: RadioSize;\n  /** Visual state of the radio */\n  state?: RadioState;\n  /** Error message to display */\n  errorMessage?: string;\n  /** Helper text to display */\n  helperText?: string;\n  /** Additional CSS classes */\n  className?: string;\n  /** Label CSS classes */\n  labelClassName?: string;\n  /** Radio group name */\n  name?: string;\n  /** Radio value */\n  value?: string;\n  /** Default checked state for uncontrolled radios */\n  defaultChecked?: boolean;\n} & Omit<\n  InputHTMLAttributes<HTMLInputElement>,\n  'size' | 'type' | 'defaultChecked'\n>;\n\n/**\n * Radio component for Analytica Ensino platforms\n *\n * A radio button component with essential states, sizes and themes.\n * Uses the Analytica Ensino Design System colors from styles.css with automatic\n * light/dark mode support. Includes Text component integration for consistent typography.\n *\n * @example\n * ```tsx\n * // Basic radio\n * <Radio name=\"option\" value=\"1\" label=\"Option 1\" />\n *\n * // Small size\n * <Radio size=\"small\" name=\"option\" value=\"2\" label=\"Small option\" />\n *\n * // Invalid state\n * <Radio state=\"invalid\" name=\"option\" value=\"3\" label=\"Required field\" />\n *\n * // Disabled state\n * <Radio disabled name=\"option\" value=\"4\" label=\"Disabled option\" />\n *\n * // Default checked (uncontrolled)\n * <Radio defaultChecked name=\"option\" value=\"5\" label=\"Initially checked\" />\n * ```\n */\nconst Radio = forwardRef<HTMLInputElement, RadioProps>(\n  (\n    {\n      label,\n      size = 'medium',\n      state = 'default',\n      errorMessage,\n      helperText,\n      className = '',\n      labelClassName = '',\n      checked: checkedProp,\n      defaultChecked = false,\n      disabled,\n      id,\n      name,\n      value,\n      onChange,\n      ...props\n    },\n    ref\n  ) => {\n    // Generate unique ID if not provided\n    const generatedId = useId();\n    const inputId = id ?? `radio-${generatedId}`;\n    const inputRef = useRef<HTMLInputElement>(null);\n\n    // Handle controlled vs uncontrolled behavior\n    const [internalChecked, setInternalChecked] = useState(defaultChecked);\n    const isControlled = checkedProp !== undefined;\n    const checked = isControlled ? checkedProp : internalChecked;\n\n    // Handle change events\n    const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n      const newChecked = event.target.checked;\n\n      if (!isControlled) {\n        setInternalChecked(newChecked);\n      }\n\n      // Prevent automatic scroll when input changes\n      if (event.target) {\n        event.target.blur();\n      }\n\n      onChange?.(event);\n    };\n\n    // Determine current state based on props\n    const currentState = disabled ? 'disabled' : state;\n\n    // Get size classes\n    const sizeClasses = SIZE_CLASSES[size];\n\n    // Focused state maintains original sizes, only adds wrapper\n    const actualRadioSize = sizeClasses.radio;\n    const actualDotSize = sizeClasses.dotSize;\n\n    // Determine radio visual variant\n    const radioVariant = checked ? 'checked' : 'unchecked';\n\n    // Get styling classes\n    const stylingClasses = STATE_CLASSES[currentState][radioVariant];\n\n    // Border width logic - consistent across all states and sizes\n    const getBorderWidth = () => {\n      if (currentState === 'focused') {\n        return 'border-2';\n      }\n      return sizeClasses.borderWidth;\n    };\n\n    const borderWidthClass = getBorderWidth();\n\n    // Get final radio classes\n    const radioClasses = cn(\n      BASE_RADIO_CLASSES,\n      actualRadioSize,\n      borderWidthClass,\n      stylingClasses,\n      className\n    );\n\n    // Get dot classes\n    const dotClasses = cn(\n      actualDotSize,\n      'rounded-full',\n      DOT_CLASSES[currentState],\n      'transition-all duration-200'\n    );\n\n    // Determine if wrapper is needed only for focused or invalid states\n    const isWrapperNeeded =\n      currentState === 'focused' || currentState === 'invalid';\n    const wrapperBorderColor =\n      currentState === 'focused'\n        ? 'border-indicator-info'\n        : 'border-indicator-error';\n\n    // Determine text color based on state and checked status\n    const getTextColor = () => {\n      if (currentState === 'disabled') {\n        return checked ? 'text-text-900' : 'text-text-600';\n      }\n\n      if (currentState === 'focused') {\n        return 'text-text-900';\n      }\n\n      return checked ? 'text-text-900' : 'text-text-600';\n    };\n\n    // Determine cursor class based on disabled state\n    const getCursorClass = () => {\n      return currentState === 'disabled'\n        ? 'cursor-not-allowed'\n        : 'cursor-pointer';\n    };\n\n    return (\n      <div className=\"flex flex-col\">\n        <div\n          className={cn(\n            'flex flex-row items-center',\n            isWrapperNeeded\n              ? cn('p-1 border-2', wrapperBorderColor, 'rounded-lg gap-1.5')\n              : sizeClasses.spacing,\n            disabled ? 'opacity-40' : ''\n          )}\n        >\n          {/* Hidden native input for accessibility and form submission */}\n          <input\n            ref={(node) => {\n              inputRef.current = node;\n              if (typeof ref === 'function') ref(node);\n              else if (ref) ref.current = node;\n            }}\n            type=\"radio\"\n            id={inputId}\n            checked={checked}\n            disabled={disabled}\n            name={name}\n            value={value}\n            onChange={handleChange}\n            className=\"sr-only\"\n            style={{\n              position: 'absolute',\n              left: '-9999px',\n              visibility: 'hidden',\n            }}\n            {...props}\n          />\n\n          {/* Custom styled radio */}\n          <button\n            type=\"button\"\n            className={radioClasses}\n            disabled={disabled}\n            aria-pressed={checked}\n            onClick={(e) => {\n              // Prevent scroll when radio is clicked\n              e.preventDefault();\n              if (!disabled) {\n                // Simulate click on hidden input\n                if (inputRef.current) {\n                  inputRef.current.click();\n                  // Remove focus to prevent scroll behavior\n                  inputRef.current.blur();\n                }\n              }\n            }}\n            onKeyDown={(e) => {\n              // Handle keyboard activation (Enter or Space)\n              if ((e.key === 'Enter' || e.key === ' ') && !disabled) {\n                e.preventDefault();\n                if (inputRef.current) {\n                  inputRef.current.click();\n                  inputRef.current.blur();\n                }\n              }\n            }}\n          >\n            {/* Show dot when checked */}\n            {checked && <div className={dotClasses} />}\n          </button>\n\n          {/* Label text */}\n          {label && (\n            <div\n              className={cn(\n                'flex flex-row items-center',\n                sizeClasses.labelHeight,\n                'flex-1 min-w-0'\n              )}\n            >\n              <Text\n                as=\"label\"\n                htmlFor={inputId}\n                size={sizeClasses.textSize}\n                weight=\"normal\"\n                className={cn(\n                  getCursorClass(),\n                  'select-none leading-normal flex items-center font-roboto truncate',\n                  labelClassName\n                )}\n                color={getTextColor()}\n              >\n                {label}\n              </Text>\n            </div>\n          )}\n        </div>\n\n        {/* Error message */}\n        {errorMessage && (\n          <Text\n            size=\"sm\"\n            weight=\"normal\"\n            className=\"mt-1.5 truncate\"\n            color=\"text-error-600\"\n          >\n            {errorMessage}\n          </Text>\n        )}\n\n        {/* Helper text */}\n        {helperText && !errorMessage && (\n          <Text\n            size=\"sm\"\n            weight=\"normal\"\n            className=\"mt-1.5 truncate\"\n            color=\"text-text-500\"\n          >\n            {helperText}\n          </Text>\n        )}\n      </div>\n    );\n  }\n);\n\nRadio.displayName = 'Radio';\n\n/**\n * RadioGroup store interface\n */\ninterface RadioGroupStore {\n  value: string;\n  setValue: (value: string) => void;\n  onValueChange?: (value: string) => void;\n  disabled: boolean;\n  name: string;\n}\n\ntype RadioGroupStoreApi = StoreApi<RadioGroupStore>;\n\n/**\n * Create a new RadioGroup store\n */\nconst createRadioGroupStore = (\n  name: string,\n  defaultValue: string,\n  disabled: boolean,\n  onValueChange?: (value: string) => void\n): RadioGroupStoreApi =>\n  create<RadioGroupStore>((set, get) => ({\n    value: defaultValue,\n    setValue: (value) => {\n      if (!get().disabled) {\n        set({ value });\n        get().onValueChange?.(value);\n      }\n    },\n    onValueChange,\n    disabled,\n    name,\n  }));\n\n/**\n * Hook to access RadioGroup store\n */\nexport const useRadioGroupStore = (externalStore?: RadioGroupStoreApi) => {\n  if (!externalStore) {\n    throw new Error('RadioGroupItem must be used within a RadioGroup');\n  }\n  return externalStore;\n};\n\n/**\n * Inject store into RadioGroupItem children\n */\nconst injectStore = (\n  children: ReactNode,\n  store: RadioGroupStoreApi\n): ReactNode =>\n  Children.map(children, (child) => {\n    if (!isValidElement(child)) return child;\n    /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n    const typedChild = child as ReactElement<any>;\n    const shouldInject = typedChild.type === RadioGroupItem;\n    return cloneElement(typedChild, {\n      ...(shouldInject ? { store } : {}),\n      ...(typedChild.props.children\n        ? { children: injectStore(typedChild.props.children, store) }\n        : {}),\n    });\n  });\n\n/**\n * RadioGroup component props interface\n */\nexport type RadioGroupProps = {\n  /** Current selected value */\n  value?: string;\n  /** Default selected value for uncontrolled usage */\n  defaultValue?: string;\n  /** Callback when selection changes */\n  onValueChange?: (value: string) => void;\n  /** Group name for all radios */\n  name?: string;\n  /** Disabled state for the entire group */\n  disabled?: boolean;\n  /** Additional CSS classes */\n  className?: string;\n  /** Children components */\n  children: ReactNode;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'>;\n\n/**\n * RadioGroup component for flexible radio group composition\n *\n * Uses Zustand for state management with automatic store injection.\n * Allows complete control over layout and styling by composing with RadioGroupItem.\n *\n * @example\n * ```tsx\n * <RadioGroup defaultValue=\"option1\" onValueChange={setValue}>\n *   <div className=\"flex items-center gap-3\">\n *     <RadioGroupItem value=\"option1\" id=\"r1\" />\n *     <label htmlFor=\"r1\">Option 1</label>\n *   </div>\n *   <div className=\"flex items-center gap-3\">\n *     <RadioGroupItem value=\"option2\" id=\"r2\" />\n *     <label htmlFor=\"r2\">Option 2</label>\n *   </div>\n * </RadioGroup>\n * ```\n */\nconst RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n  (\n    {\n      value: propValue,\n      defaultValue = '',\n      onValueChange,\n      name: propName,\n      disabled = false,\n      className = '',\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    // Generate unique name if not provided\n    const generatedId = useId();\n    const name = propName || `radio-group-${generatedId}`;\n\n    // Create store reference\n    const storeRef = useRef<RadioGroupStoreApi>(null);\n    storeRef.current ??= createRadioGroupStore(\n      name,\n      defaultValue,\n      disabled,\n      onValueChange\n    );\n    const store = storeRef.current;\n\n    // Get store actions\n    const { setValue } = useStore(store, (s) => s);\n\n    // Call onValueChange with initial value\n    useEffect(() => {\n      const currentValue = store.getState().value;\n      if (currentValue && onValueChange) {\n        onValueChange(currentValue);\n      }\n    }, []); // Empty dependency array for mount only\n\n    // Handle controlled value changes\n    useEffect(() => {\n      if (propValue !== undefined) {\n        setValue(propValue);\n      }\n    }, [propValue, setValue]);\n\n    // Update disabled state\n    useEffect(() => {\n      store.setState({ disabled });\n    }, [disabled, store]);\n\n    return (\n      <div\n        ref={ref}\n        className={className}\n        role=\"radiogroup\"\n        aria-label={name}\n        {...props}\n      >\n        {injectStore(children, store)}\n      </div>\n    );\n  }\n);\n\nRadioGroup.displayName = 'RadioGroup';\n\n/**\n * RadioGroupItem component props interface\n */\nexport type RadioGroupItemProps = {\n  /** Value for this radio item */\n  value: string;\n  /** Store reference (automatically injected by RadioGroup) */\n  store?: RadioGroupStoreApi;\n  /** Disabled state for this specific item */\n  disabled?: boolean;\n  /** Size variant */\n  size?: RadioSize;\n  /** Visual state */\n  state?: RadioState;\n  /** Additional CSS classes */\n  className?: string;\n} & Omit<\n  InputHTMLAttributes<HTMLInputElement>,\n  'type' | 'name' | 'value' | 'checked' | 'onChange' | 'size'\n>;\n\n/**\n * RadioGroupItem component for use within RadioGroup\n *\n * A radio button without label that works within RadioGroup context.\n * Provides just the radio input for maximum flexibility in composition.\n *\n * @example\n * ```tsx\n * <RadioGroup defaultValue=\"option1\">\n *   <div className=\"flex items-center gap-3\">\n *     <RadioGroupItem value=\"option1\" id=\"r1\" />\n *     <label htmlFor=\"r1\">Option 1</label>\n *   </div>\n * </RadioGroup>\n * ```\n */\nconst RadioGroupItem = forwardRef<HTMLInputElement, RadioGroupItemProps>(\n  (\n    {\n      value,\n      store: externalStore,\n      disabled: itemDisabled,\n      size = 'medium',\n      state = 'default',\n      className = '',\n      id,\n      ...props\n    },\n    ref\n  ) => {\n    // Get store and state\n    const store = useRadioGroupStore(externalStore);\n    const {\n      value: groupValue,\n      setValue,\n      disabled: groupDisabled,\n      name,\n    } = useStore(store);\n\n    // Generate unique ID if not provided\n    const generatedId = useId();\n    const inputId = id ?? `radio-item-${generatedId}`;\n\n    // Determine states\n    const isChecked = groupValue === value;\n    const isDisabled = groupDisabled || itemDisabled;\n    const currentState = isDisabled ? 'disabled' : state;\n\n    // Use standard Radio component for consistency and simplicity\n    return (\n      <Radio\n        ref={ref}\n        id={inputId}\n        name={name}\n        value={value}\n        checked={isChecked}\n        disabled={isDisabled}\n        size={size}\n        state={currentState}\n        className={className}\n        onChange={(e) => {\n          if (e.target.checked && !isDisabled) {\n            setValue(value);\n          }\n        }}\n        {...props}\n      />\n    );\n  }\n);\n\nRadioGroupItem.displayName = 'RadioGroupItem';\n\nexport default Radio;\nexport { RadioGroup, RadioGroupItem };\n","import { ComponentPropsWithoutRef, ElementType, ReactNode } from 'react';\nimport { cn } from '../../utils/utils';\n\n/**\n * Base text component props\n */\ntype BaseTextProps = {\n  /** Content to be displayed */\n  children?: ReactNode;\n  /** Text size variant */\n  size?:\n    | '2xs'\n    | 'xs'\n    | 'sm'\n    | 'md'\n    | 'lg'\n    | 'xl'\n    | '2xl'\n    | '3xl'\n    | '4xl'\n    | '5xl'\n    | '6xl';\n  /** Font weight variant */\n  weight?:\n    | 'hairline'\n    | 'light'\n    | 'normal'\n    | 'medium'\n    | 'semibold'\n    | 'bold'\n    | 'extrabold'\n    | 'black';\n  /** Color variant - white for light backgrounds, black for dark backgrounds */\n  color?: string;\n  /** Additional CSS classes to apply */\n  className?: string;\n};\n\n/**\n * Polymorphic text component props that ensures type safety based on the 'as' prop\n */\ntype TextProps<T extends ElementType = 'p'> = BaseTextProps & {\n  /** HTML tag to render */\n  as?: T;\n} & Omit<ComponentPropsWithoutRef<T>, keyof BaseTextProps>;\n\n/**\n * Text component for Analytica Ensino platforms\n *\n * A flexible polymorphic text component with multiple sizes, weights, and colors.\n * Automatically adapts to dark and light themes with full type safety.\n *\n * @param children - The content to display\n * @param size - The text size variant (2xs, xs, sm, md, lg, xl, 2xl, 3xl, 4xl, 5xl, 6xl)\n * @param weight - The font weight variant (hairline, light, normal, medium, semibold, bold, extrabold, black)\n * @param color - The color variant - adapts to theme\n * @param as - The HTML tag to render - determines allowed attributes via TypeScript\n * @param className - Additional CSS classes\n * @param props - HTML attributes valid for the chosen tag only\n * @returns A styled text element with type-safe attributes\n *\n * @example\n * ```tsx\n * <Text size=\"lg\" weight=\"bold\" color=\"text-info-800\">\n *   This is a large, bold text\n * </Text>\n *\n * <Text as=\"a\" href=\"/link\" target=\"_blank\">\n *   Link with type-safe anchor attributes\n * </Text>\n *\n * <Text as=\"button\" onClick={handleClick} disabled>\n *   Button with type-safe button attributes\n * </Text>\n * ```\n */\nconst Text = <T extends ElementType = 'p'>({\n  children,\n  size = 'md',\n  weight = 'normal',\n  color = 'text-text-950',\n  as,\n  className = '',\n  ...props\n}: TextProps<T>) => {\n  let sizeClasses = '';\n  let weightClasses = '';\n\n  // Text size classes mapping\n  const sizeClassMap = {\n    '2xs': 'text-2xs',\n    xs: 'text-xs',\n    sm: 'text-sm',\n    md: 'text-md',\n    lg: 'text-lg',\n    xl: 'text-xl',\n    '2xl': 'text-2xl',\n    '3xl': 'text-3xl',\n    '4xl': 'text-4xl',\n    '5xl': 'text-5xl',\n    '6xl': 'text-6xl',\n  } as const;\n\n  sizeClasses = sizeClassMap[size] ?? sizeClassMap.md;\n\n  // Font weight classes mapping\n  const weightClassMap = {\n    hairline: 'font-hairline',\n    light: 'font-light',\n    normal: 'font-normal',\n    medium: 'font-medium',\n    semibold: 'font-semibold',\n    bold: 'font-bold',\n    extrabold: 'font-extrabold',\n    black: 'font-black',\n  } as const;\n\n  weightClasses = weightClassMap[weight] ?? weightClassMap.normal;\n\n  const baseClasses = 'font-primary';\n  const Component = as ?? ('p' as ElementType);\n\n  return (\n    <Component\n      className={cn(baseClasses, sizeClasses, weightClasses, color, className)}\n      {...props}\n    >\n      {children}\n    </Component>\n  );\n};\n\nexport default Text;\n","import { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/utils';\n\n/**\n * Lookup table for variant and action class combinations\n */\nconst VARIANT_ACTION_CLASSES = {\n  solid: {\n    primary:\n      'bg-primary-950 text-text border border-primary-950 hover:bg-primary-800 hover:border-primary-800 focus-visible:outline-none focus-visible:bg-primary-950 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-primary-700 active:border-primary-700 disabled:bg-primary-500 disabled:border-primary-500 disabled:opacity-40 disabled:cursor-not-allowed',\n    positive:\n      'bg-success-500 text-text border border-success-500 hover:bg-success-600 hover:border-success-600 focus-visible:outline-none focus-visible:bg-success-500 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-success-700 active:border-success-700 disabled:bg-success-500 disabled:border-success-500 disabled:opacity-40 disabled:cursor-not-allowed',\n    negative:\n      'bg-error-500 text-text border border-error-500 hover:bg-error-600 hover:border-error-600 focus-visible:outline-none focus-visible:bg-error-500 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-error-700 active:border-error-700 disabled:bg-error-500 disabled:border-error-500 disabled:opacity-40 disabled:cursor-not-allowed',\n  },\n  outline: {\n    primary:\n      'bg-transparent text-primary-950 border border-primary-950 hover:bg-background-50 hover:text-primary-400 hover:border-primary-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-primary-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-primary-700 active:border-primary-700 disabled:opacity-40 disabled:cursor-not-allowed',\n    positive:\n      'bg-transparent text-success-500 border border-success-300 hover:bg-background-50 hover:text-success-400 hover:border-success-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-success-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-success-700 active:border-success-700 disabled:opacity-40 disabled:cursor-not-allowed',\n    negative:\n      'bg-transparent text-error-500 border border-error-300 hover:bg-background-50 hover:text-error-400 hover:border-error-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-error-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-error-700 active:border-error-700 disabled:opacity-40 disabled:cursor-not-allowed',\n  },\n  link: {\n    primary:\n      'bg-transparent text-primary-950 hover:text-primary-400 focus-visible:outline-none focus-visible:text-primary-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-primary-700 disabled:opacity-40 disabled:cursor-not-allowed',\n    positive:\n      'bg-transparent text-success-500 hover:text-success-400 focus-visible:outline-none focus-visible:text-success-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-success-700 disabled:opacity-40 disabled:cursor-not-allowed',\n    negative:\n      'bg-transparent text-error-500 hover:text-error-400 focus-visible:outline-none focus-visible:text-error-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-error-700 disabled:opacity-40 disabled:cursor-not-allowed',\n  },\n} as const;\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n  'extra-small': 'text-xs px-3.5 py-2',\n  small: 'text-sm px-4 py-2.5',\n  medium: 'text-md px-5 py-2.5',\n  large: 'text-lg px-6 py-3',\n  'extra-large': 'text-lg px-7 py-3.5',\n} as const;\n\n/**\n * Button component props interface\n */\ntype ButtonProps = {\n  /** Content to be displayed inside the button */\n  children: ReactNode;\n  /** Ícone à esquerda do texto */\n  iconLeft?: ReactNode;\n  /** Ícone à direita do texto */\n  iconRight?: ReactNode;\n  /** Size of the button */\n  size?: 'extra-small' | 'small' | 'medium' | 'large' | 'extra-large';\n  /** Visual variant of the button */\n  variant?: 'solid' | 'outline' | 'link';\n  /** Action type of the button */\n  action?: 'primary' | 'positive' | 'negative';\n  /** Additional CSS classes to apply */\n  className?: string;\n} & ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * Button component for Analytica Ensino platforms\n *\n * A flexible button component with multiple variants, sizes and actions.\n *\n * @param children - The content to display inside the button\n * @param size - The size variant (extra-small, small, medium, large, extra-large)\n * @param variant - The visual style variant (solid, outline, link)\n * @param action - The action type (primary, positive, negative)\n * @param className - Additional CSS classes\n * @param props - All other standard button HTML attributes\n * @returns A styled button element\n *\n * @example\n * ```tsx\n * <Button variant=\"solid\" action=\"primary\" size=\"medium\" onClick={() => console.log('clicked')}>\n *   Click me\n * </Button>\n * ```\n */\nconst Button = ({\n  children,\n  iconLeft,\n  iconRight,\n  size = 'medium',\n  variant = 'solid',\n  action = 'primary',\n  className = '',\n  disabled,\n  type = 'button',\n  ...props\n}: ButtonProps) => {\n  // Get classes from lookup tables\n  const sizeClasses = SIZE_CLASSES[size];\n  const variantClasses = VARIANT_ACTION_CLASSES[variant][action];\n\n  const baseClasses =\n    'inline-flex items-center justify-center rounded-full cursor-pointer font-medium';\n\n  return (\n    <button\n      className={cn(baseClasses, variantClasses, sizeClasses, className)}\n      disabled={disabled}\n      type={type}\n      {...props}\n    >\n      {iconLeft && <span className=\"mr-2 flex items-center\">{iconLeft}</span>}\n      {children}\n      {iconRight && <span className=\"ml-2 flex items-center\">{iconRight}</span>}\n    </button>\n  );\n};\n\nexport default Button;\n","import { ButtonHTMLAttributes, ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/utils';\n\n/**\n * IconButton component props interface\n */\nexport type IconButtonProps = {\n  /** Ícone a ser exibido no botão */\n  icon: ReactNode;\n  /** Tamanho do botão */\n  size?: 'sm' | 'md';\n  /** Estado de seleção/ativo do botão - permanece ativo até ser clicado novamente ou outro botão ser ativado */\n  active?: boolean;\n  /** Additional CSS classes to apply */\n  className?: string;\n} & ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * IconButton component for Analytica Ensino platforms\n *\n * Um botão compacto apenas com ícone, ideal para menus dropdown,\n * barras de ferramentas e ações secundárias.\n * Oferece dois tamanhos com estilo consistente.\n * Estado ativo permanece até ser clicado novamente ou outro botão ser ativado.\n * Suporta forwardRef para acesso programático ao elemento DOM.\n *\n * @param icon - O ícone a ser exibido no botão\n * @param size - Tamanho do botão (sm, md)\n * @param active - Estado ativo/selecionado do botão\n * @param className - Classes CSS adicionais\n * @param props - Todos os outros atributos HTML padrão de button\n * @returns Um elemento button compacto estilizado apenas com ícone\n *\n * @example\n * ```tsx\n * <IconButton\n *   icon={<MoreVerticalIcon />}\n *   size=\"sm\"\n *   onClick={() => openMenu()}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Botão ativo em uma barra de ferramentas - permanece ativo até outro clique\n * <IconButton\n *   icon={<BoldIcon />}\n *   active={isBold}\n *   onClick={toggleBold}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Usando ref para controle programático\n * const buttonRef = useRef<HTMLButtonElement>(null);\n *\n * <IconButton\n *   ref={buttonRef}\n *   icon={<EditIcon />}\n *   size=\"md\"\n *   onClick={() => startEditing()}\n * />\n * ```\n */\nconst IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n  (\n    { icon, size = 'md', active = false, className = '', disabled, ...props },\n    ref\n  ) => {\n    // Classes base para todos os estados\n    const baseClasses = [\n      'inline-flex',\n      'items-center',\n      'justify-center',\n      'rounded-lg',\n      'font-medium',\n      'bg-transparent',\n      'text-text-950',\n      'cursor-pointer',\n      'hover:bg-primary-600',\n      'hover:text-text',\n      'focus-visible:outline-none',\n      'focus-visible:ring-2',\n      'focus-visible:ring-offset-0',\n      'focus-visible:ring-indicator-info',\n      'disabled:opacity-50',\n      'disabled:cursor-not-allowed',\n      'disabled:pointer-events-none',\n    ];\n\n    // Classes de tamanho\n    const sizeClasses = {\n      sm: ['w-6', 'h-6', 'text-sm'],\n      md: ['w-10', 'h-10', 'text-base'],\n    };\n\n    // Classes de estado ativo\n    const activeClasses = active\n      ? ['!bg-primary-50', '!text-primary-950', 'hover:!bg-primary-100']\n      : [];\n\n    const allClasses = [\n      ...baseClasses,\n      ...sizeClasses[size],\n      ...activeClasses,\n    ].join(' ');\n\n    // Garantir acessibilidade com aria-label padrão\n    const ariaLabel = props['aria-label'] ?? 'Botão de ação';\n\n    return (\n      <button\n        ref={ref}\n        type=\"button\"\n        className={cn(allClasses, className)}\n        disabled={disabled}\n        aria-pressed={active}\n        aria-label={ariaLabel}\n        {...props}\n      >\n        <span className=\"flex items-center justify-center\">{icon}</span>\n      </button>\n    );\n  }\n);\n\nIconButton.displayName = 'IconButton';\n\nexport default IconButton;\n","import { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\nexport enum QUESTION_DIFFICULTY {\n  FACIL = 'FACIL',\n  MEDIO = 'MEDIO',\n  DIFICIL = 'DIFICIL',\n}\n\nexport enum QUESTION_TYPE {\n  ALTERNATIVA = 'ALTERNATIVA',\n  DISSERTATIVA = 'DISSERTATIVA',\n  MULTIPLA_CHOICE = 'MULTIPLA_CHOICE',\n}\n\nexport enum QUESTION_STATUS {\n  APROVADO = 'APROVADO',\n  REPROVADO = 'REPROVADO',\n}\n\nexport interface Question {\n  id: string;\n  questionText: string;\n  description: string;\n  type: QUESTION_TYPE;\n  status: QUESTION_STATUS;\n  difficulty: QUESTION_DIFFICULTY;\n  examBoard: string;\n  examYear: string;\n  answerKey: null | string;\n  institutionIds: string[];\n  knowledgeMatrix: {\n    areaKnowledgeId: string;\n    subjectId: string;\n    topicId: string;\n    subtopicId: string;\n    contentId: string;\n  }[];\n  options: {\n    id: string;\n    option: string;\n    isCorrect: boolean;\n  }[];\n}\n\ninterface Simulado {\n  id: string;\n  title: string;\n  category: string;\n  questions: Question[];\n}\n\ninterface Atividade {\n  id: string;\n  title: string;\n  questions: Question[];\n}\n\ninterface Aula {\n  id: string;\n  title: string;\n  questions: Question[];\n}\n\ninterface UserAnswerItem {\n  questionId: string;\n  activityId: string;\n  userId: string;\n  answer: string | null;\n  optionId: string | null;\n}\n\ninterface QuizState {\n  // Data\n  bySimulated?: Simulado;\n  byActivity?: Atividade;\n  byQuestionary?: Aula;\n\n  // UI State\n  currentQuestionIndex: number;\n  selectedAnswers: Record<string, string>;\n  userAnswers: UserAnswerItem[];\n  timeElapsed: number;\n  isStarted: boolean;\n  isFinished: boolean;\n  userId: string;\n  // Actions\n  setBySimulated: (simulado: Simulado) => void;\n  setByActivity: (atividade: Atividade) => void;\n  setByQuestionary: (aula: Aula) => void;\n  setUserId: (userId: string) => void;\n  setUserAnswers: (userAnswers: UserAnswerItem[]) => void;\n\n  // Quiz Navigation\n  goToNextQuestion: () => void;\n  goToPreviousQuestion: () => void;\n  goToQuestion: (index: number) => void;\n  getActiveQuiz: () => {\n    quiz: Simulado | Atividade | Aula;\n    type: 'bySimulated' | 'byActivity' | 'byQuestionary';\n  } | null;\n\n  // Quiz Actions\n  selectAnswer: (questionId: string, answerId: string) => void;\n  selectMultipleAnswer: (questionId: string, answerIds: string[]) => void;\n  skipQuestion: () => void;\n  addUserAnswer: (questionId: string, answerId?: string) => void;\n  startQuiz: () => void;\n  finishQuiz: () => void;\n  resetQuiz: () => void;\n\n  // Timer\n  updateTime: (time: number) => void;\n  startTimer: () => void;\n  stopTimer: () => void;\n\n  // Getters\n  getCurrentQuestion: () => Question | null;\n  getTotalQuestions: () => number;\n  getAnsweredQuestions: () => number;\n  getUnansweredQuestions: () => number[];\n  getSkippedQuestions: () => number;\n  getProgress: () => number;\n  isQuestionAnswered: (questionId: string) => boolean;\n  isQuestionSkipped: (questionId: string) => boolean;\n  getCurrentAnswer: () => string | undefined;\n  getAllCurrentAnswer: () => UserAnswerItem[] | undefined;\n  getQuizTitle: () => string;\n  formatTime: (seconds: number) => string;\n  getUserAnswers: () => UserAnswerItem[];\n  getUnansweredQuestionsFromUserAnswers: () => number[];\n  getQuestionsGroupedBySubject: () => { [key: string]: Question[] };\n  getUserId: () => string;\n  setCurrentQuestion: (question: Question) => void;\n\n  // New methods for userAnswers\n  getUserAnswerByQuestionId: (questionId: string) => UserAnswerItem | null;\n  isQuestionAnsweredByUserAnswers: (questionId: string) => boolean;\n  getQuestionStatusFromUserAnswers: (\n    questionId: string\n  ) => 'answered' | 'unanswered' | 'skipped';\n  getUserAnswersForActivity: () => UserAnswerItem[];\n}\n\nexport const useQuizStore = create<QuizState>()(\n  devtools(\n    (set, get) => {\n      let timerInterval: ReturnType<typeof setInterval> | null = null;\n\n      const startTimer = () => {\n        if (get().isFinished) {\n          return;\n        }\n\n        if (timerInterval) {\n          clearInterval(timerInterval);\n        }\n\n        timerInterval = setInterval(() => {\n          const { timeElapsed } = get();\n          set({ timeElapsed: timeElapsed + 1 });\n        }, 1000);\n      };\n\n      const stopTimer = () => {\n        if (timerInterval) {\n          clearInterval(timerInterval);\n          timerInterval = null;\n        }\n      };\n\n      return {\n        // Initial State\n        currentQuestionIndex: 0,\n        selectedAnswers: {},\n        userAnswers: [],\n        timeElapsed: 0,\n        isStarted: false,\n        isFinished: false,\n        userId: '',\n\n        // Setters\n        setBySimulated: (simulado) => set({ bySimulated: simulado }),\n        setByActivity: (atividade) => set({ byActivity: atividade }),\n        setByQuestionary: (aula) => set({ byQuestionary: aula }),\n        setUserId: (userId) => set({ userId }),\n        setUserAnswers: (userAnswers) => set({ userAnswers }),\n        getUserId: () => get().userId,\n\n        // Navigation\n        goToNextQuestion: () => {\n          const { currentQuestionIndex, getTotalQuestions } = get();\n          const totalQuestions = getTotalQuestions();\n\n          if (currentQuestionIndex < totalQuestions - 1) {\n            set({ currentQuestionIndex: currentQuestionIndex + 1 });\n          }\n        },\n\n        goToPreviousQuestion: () => {\n          const { currentQuestionIndex } = get();\n\n          if (currentQuestionIndex > 0) {\n            set({ currentQuestionIndex: currentQuestionIndex - 1 });\n          }\n        },\n\n        goToQuestion: (index) => {\n          const { getTotalQuestions } = get();\n          const totalQuestions = getTotalQuestions();\n\n          if (index >= 0 && index < totalQuestions) {\n            set({ currentQuestionIndex: index });\n          }\n        },\n\n        getActiveQuiz: () => {\n          const { bySimulated, byActivity, byQuestionary } = get();\n          if (bySimulated)\n            return { quiz: bySimulated, type: 'bySimulated' as const };\n          if (byActivity)\n            return { quiz: byActivity, type: 'byActivity' as const };\n          if (byQuestionary)\n            return { quiz: byQuestionary, type: 'byQuestionary' as const };\n          return null;\n        },\n\n        selectAnswer: (questionId, answerId) => {\n          const { getActiveQuiz, userAnswers } = get();\n          const activeQuiz = getActiveQuiz();\n\n          if (!activeQuiz) return;\n\n          const activityId = activeQuiz.quiz.id;\n          const userId = get().getUserId();\n\n          if (!userId || userId === '') {\n            console.warn('selectAnswer called before userId is set');\n            return;\n          }\n\n          const existingAnswerIndex = userAnswers.findIndex(\n            (answer) => answer.questionId === questionId\n          );\n\n          const newUserAnswer: UserAnswerItem = {\n            questionId,\n            activityId,\n            userId,\n            answer: null,\n            optionId: answerId,\n          };\n\n          let updatedUserAnswers;\n          if (existingAnswerIndex !== -1) {\n            updatedUserAnswers = [...userAnswers];\n            updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n          } else {\n            updatedUserAnswers = [...userAnswers, newUserAnswer];\n          }\n\n          set({\n            userAnswers: updatedUserAnswers,\n          });\n        },\n\n        selectMultipleAnswer: (questionId, answerIds) => {\n          const { getActiveQuiz, userAnswers } = get();\n          const activeQuiz = getActiveQuiz();\n\n          if (!activeQuiz) return;\n\n          const activityId = activeQuiz.quiz.id;\n          const userId = get().getUserId();\n\n          if (!userId || userId === '') {\n            console.warn('selectMultipleAnswer called before userId is set');\n            return;\n          }\n\n          // Remove all existing answers for this questionId\n          const filteredUserAnswers = userAnswers.filter(\n            (answer) => answer.questionId !== questionId\n          );\n\n          // Create new UserAnswerItem objects for each answerId\n          const newUserAnswers: UserAnswerItem[] = answerIds.map(\n            (answerId) => ({\n              questionId,\n              activityId,\n              userId,\n              answer: null,\n              optionId: answerId,\n            })\n          );\n\n          // Combine filtered answers with new answers\n          const updatedUserAnswers = [\n            ...filteredUserAnswers,\n            ...newUserAnswers,\n          ];\n\n          set({\n            userAnswers: updatedUserAnswers,\n          });\n        },\n\n        skipQuestion: () => {\n          const { getCurrentQuestion, userAnswers, getActiveQuiz } = get();\n          const currentQuestion = getCurrentQuestion();\n          const activeQuiz = getActiveQuiz();\n\n          if (!activeQuiz) return;\n\n          if (currentQuestion) {\n            const activityId = activeQuiz.quiz.id;\n            const userId = get().getUserId();\n\n            if (!userId || userId === '') {\n              console.warn('skipQuestion called before userId is set');\n              return;\n            }\n\n            const existingAnswerIndex = userAnswers.findIndex(\n              (answer) => answer.questionId === currentQuestion.id\n            );\n\n            const newUserAnswer: UserAnswerItem = {\n              questionId: currentQuestion.id,\n              activityId,\n              userId,\n              answer: null,\n              optionId: null,\n            };\n\n            let updatedUserAnswers;\n            if (existingAnswerIndex !== -1) {\n              // Update existing answer\n              updatedUserAnswers = [...userAnswers];\n              updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n            } else {\n              // Add new answer\n              updatedUserAnswers = [...userAnswers, newUserAnswer];\n            }\n\n            set({\n              userAnswers: updatedUserAnswers,\n            });\n          }\n        },\n\n        addUserAnswer: (questionId, answerId) => {\n          const { getActiveQuiz, userAnswers } = get();\n          const activeQuiz = getActiveQuiz();\n\n          if (!activeQuiz) return;\n\n          // Add to userAnswers array with new structure\n          const activityId = activeQuiz.quiz.id;\n          const userId = get().getUserId();\n\n          if (!userId || userId === '') {\n            console.warn('addUserAnswer called before userId is set');\n            return;\n          }\n\n          const existingAnswerIndex = userAnswers.findIndex(\n            (answer) => answer.questionId === questionId\n          );\n\n          const newUserAnswer: UserAnswerItem = {\n            questionId,\n            activityId,\n            userId,\n            answer: null,\n            optionId: answerId || null,\n          };\n\n          if (existingAnswerIndex !== -1) {\n            // Update existing answer\n            const updatedUserAnswers = [...userAnswers];\n            updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n            set({ userAnswers: updatedUserAnswers });\n          } else {\n            // Add new answer\n            set({ userAnswers: [...userAnswers, newUserAnswer] });\n          }\n        },\n\n        startQuiz: () => {\n          set({ isStarted: true, timeElapsed: 0 });\n          startTimer();\n        },\n\n        finishQuiz: () => {\n          set({ isFinished: true });\n          stopTimer();\n        },\n\n        resetQuiz: () => {\n          stopTimer();\n          set({\n            currentQuestionIndex: 0,\n            selectedAnswers: {},\n            userAnswers: [],\n            timeElapsed: 0,\n            isStarted: false,\n            isFinished: false,\n            userId: '',\n          });\n        },\n\n        // Timer\n        updateTime: (time) => set({ timeElapsed: time }),\n        startTimer,\n        stopTimer,\n\n        // Getters\n        getCurrentQuestion: () => {\n          const { currentQuestionIndex, getActiveQuiz } = get();\n          const activeQuiz = getActiveQuiz();\n\n          if (!activeQuiz) {\n            return null;\n          }\n\n          return activeQuiz.quiz.questions[currentQuestionIndex];\n        },\n\n        getTotalQuestions: () => {\n          const { getActiveQuiz } = get();\n          const activeQuiz = getActiveQuiz();\n\n          return activeQuiz?.quiz?.questions?.length || 0;\n        },\n\n        getAnsweredQuestions: () => {\n          const { userAnswers } = get();\n          return userAnswers.filter((answer) => answer.optionId !== null)\n            .length;\n        },\n\n        getUnansweredQuestions: () => {\n          const { getActiveQuiz, userAnswers } = get();\n          const activeQuiz = getActiveQuiz();\n          if (!activeQuiz) return [];\n\n          const unansweredQuestions: number[] = [];\n\n          activeQuiz.quiz.questions.forEach((question, index) => {\n            const userAnswer = userAnswers.find(\n              (answer) => answer.questionId === question.id\n            );\n            const isAnswered = userAnswer && userAnswer.optionId !== null;\n            const isSkipped = userAnswer && userAnswer.optionId === null;\n\n            if (!isAnswered && !isSkipped) {\n              unansweredQuestions.push(index + 1); // index + 1 para mostrar número da questão\n            }\n          });\n          return unansweredQuestions;\n        },\n\n        getSkippedQuestions: () => {\n          const { userAnswers } = get();\n          return userAnswers.filter((answer) => answer.optionId === null)\n            .length;\n        },\n\n        getProgress: () => {\n          const { getTotalQuestions, getAnsweredQuestions } = get();\n          const total = getTotalQuestions();\n          const answered = getAnsweredQuestions();\n\n          return total > 0 ? (answered / total) * 100 : 0;\n        },\n\n        isQuestionAnswered: (questionId) => {\n          const { userAnswers } = get();\n          const userAnswer = userAnswers.find(\n            (answer) => answer.questionId === questionId\n          );\n          return userAnswer ? userAnswer.optionId !== null : false;\n        },\n\n        isQuestionSkipped: (questionId) => {\n          const { userAnswers } = get();\n          const userAnswer = userAnswers.find(\n            (answer) => answer.questionId === questionId\n          );\n          return userAnswer ? userAnswer.optionId === null : false;\n        },\n\n        getCurrentAnswer: () => {\n          const { getCurrentQuestion, userAnswers } = get();\n          const currentQuestion = getCurrentQuestion();\n\n          if (!currentQuestion) return undefined;\n\n          const userAnswer = userAnswers.find(\n            (answer) => answer.questionId === currentQuestion.id\n          );\n          return userAnswer?.optionId;\n        },\n\n        getAllCurrentAnswer: () => {\n          const { getCurrentQuestion, userAnswers } = get();\n          const currentQuestion = getCurrentQuestion();\n\n          if (!currentQuestion) return undefined;\n\n          const userAnswer = userAnswers.filter(\n            (answer) => answer.questionId === currentQuestion.id\n          );\n\n          return userAnswer;\n        },\n\n        getQuizTitle: () => {\n          const { getActiveQuiz } = get();\n          const activeQuiz = getActiveQuiz();\n\n          return activeQuiz?.quiz?.title || 'Quiz';\n        },\n\n        formatTime: (seconds: number) => {\n          const minutes = Math.floor(seconds / 60);\n          const remainingSeconds = seconds % 60;\n          return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;\n        },\n\n        getUserAnswers: () => {\n          const { userAnswers } = get();\n          return userAnswers;\n        },\n\n        getUnansweredQuestionsFromUserAnswers: () => {\n          const { getActiveQuiz, userAnswers } = get();\n          const activeQuiz = getActiveQuiz();\n          if (!activeQuiz) return [];\n\n          const unansweredQuestions: number[] = [];\n\n          activeQuiz.quiz.questions.forEach((question, index) => {\n            const userAnswer = userAnswers.find(\n              (answer) => answer.questionId === question.id\n            );\n            const hasAnswer = userAnswer && userAnswer.optionId !== null;\n            const isSkipped = userAnswer && userAnswer.optionId === null;\n\n            // Se não há resposta do usuário OU se a questão foi pulada\n            if (!hasAnswer || isSkipped) {\n              unansweredQuestions.push(index + 1); // index + 1 para mostrar número da questão\n            }\n          });\n\n          return unansweredQuestions;\n        },\n\n        getQuestionsGroupedBySubject: () => {\n          const { getActiveQuiz } = get();\n          const activeQuiz = getActiveQuiz();\n          if (!activeQuiz) return {};\n\n          const groupedQuestions: { [key: string]: Question[] } = {};\n\n          activeQuiz.quiz.questions.forEach((question) => {\n            const subjectId =\n              question.knowledgeMatrix?.[0]?.subjectId || 'Sem matéria';\n\n            if (!groupedQuestions[subjectId]) {\n              groupedQuestions[subjectId] = [];\n            }\n\n            groupedQuestions[subjectId].push(question);\n          });\n\n          return groupedQuestions;\n        },\n\n        // New methods for userAnswers\n        getUserAnswerByQuestionId: (questionId) => {\n          const { userAnswers } = get();\n          return (\n            userAnswers.find((answer) => answer.questionId === questionId) ||\n            null\n          );\n        },\n        isQuestionAnsweredByUserAnswers: (questionId) => {\n          const { userAnswers } = get();\n          const answer = userAnswers.find(\n            (answer) => answer.questionId === questionId\n          );\n          return answer ? answer.optionId !== null : false;\n        },\n        getQuestionStatusFromUserAnswers: (questionId) => {\n          const { userAnswers } = get();\n          const answer = userAnswers.find(\n            (answer) => answer.questionId === questionId\n          );\n          if (!answer) return 'unanswered';\n          if (answer.optionId === null) return 'skipped';\n          return 'answered';\n        },\n        getUserAnswersForActivity: () => {\n          const { userAnswers } = get();\n          return userAnswers;\n        },\n        setCurrentQuestion: (question) => {\n          const { getActiveQuiz } = get();\n          const activeQuiz = getActiveQuiz();\n          if (!activeQuiz) return;\n\n          const questionIndex = activeQuiz.quiz.questions.findIndex(\n            (q) => q.id === question.id\n          );\n\n          // Validate that the question was found before updating currentQuestionIndex\n          if (questionIndex === -1) {\n            console.warn(\n              `Question with id \"${question.id}\" not found in active quiz`\n            );\n            return;\n          }\n\n          set({ currentQuestionIndex: questionIndex });\n        },\n      };\n    },\n    {\n      name: 'quiz-store',\n    }\n  )\n);\n","import {\n  forwardRef,\n  HTMLAttributes,\n  useEffect,\n  MouseEvent,\n  KeyboardEvent,\n} from 'react';\nimport Button from '../Button/Button';\nimport { cn } from '../../utils/utils';\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n  'extra-small': 'w-screen max-w-[324px]',\n  small: 'w-screen max-w-[378px]',\n  medium: 'w-screen max-w-[459px]',\n  large: 'w-screen max-w-[578px]',\n  'extra-large': 'w-screen max-w-[912px]',\n} as const;\n\ninterface AlertDialogProps extends HTMLAttributes<HTMLDivElement> {\n  /** Title of the alert dialog */\n  title: string;\n  /** Whether the alert dialog is open (controlled mode) */\n  isOpen: boolean;\n  /** Function called when the alert dialog is opened or closed (controlled mode) */\n  onChangeOpen: (open: boolean) => void;\n  /** Whether clicking the backdrop should close the alert dialog */\n  closeOnBackdropClick?: boolean;\n  /** Whether pressing Escape should close the alert dialog */\n  closeOnEscape?: boolean;\n  /** Additional CSS classes for the alert dialog content */\n  className?: string;\n  /** Function called when submit button is clicked */\n  onSubmit?: (value?: unknown) => void;\n  /** Value to pass to onSubmit function */\n  submitValue?: unknown;\n  /** Function called when cancel button is clicked */\n  onCancel?: (value?: unknown) => void;\n  /** Value to pass to onCancel function */\n  cancelValue?: unknown;\n  /** Description of the alert dialog */\n  description: string;\n  /** Label of the cancel button */\n  cancelButtonLabel?: string;\n  /** Label of the submit button */\n  submitButtonLabel?: string;\n  /** Size of the alert dialog */\n  size?: 'extra-small' | 'small' | 'medium' | 'large' | 'extra-large';\n}\n\nconst AlertDialog = forwardRef<HTMLDivElement, AlertDialogProps>(\n  (\n    {\n      description,\n      cancelButtonLabel = 'Cancelar',\n      submitButtonLabel = 'Deletar',\n      title,\n      isOpen,\n      closeOnBackdropClick = true,\n      closeOnEscape = true,\n      className = '',\n      onSubmit,\n      onChangeOpen,\n      submitValue,\n      onCancel,\n      cancelValue,\n      size = 'medium',\n      ...props\n    },\n    ref\n  ) => {\n    // Handle escape key\n    useEffect(() => {\n      if (!isOpen || !closeOnEscape) return;\n\n      const handleEscape = (event: globalThis.KeyboardEvent) => {\n        if (event.key === 'Escape') {\n          onChangeOpen(false);\n        }\n      };\n\n      document.addEventListener('keydown', handleEscape);\n      return () => document.removeEventListener('keydown', handleEscape);\n    }, [isOpen, closeOnEscape]);\n\n    // Prevent body scroll when modal is open\n    useEffect(() => {\n      if (isOpen) {\n        document.body.style.overflow = 'hidden';\n      } else {\n        document.body.style.overflow = 'unset';\n      }\n\n      return () => {\n        document.body.style.overflow = 'unset';\n      };\n    }, [isOpen]);\n\n    const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n      if (event.target === event.currentTarget && closeOnBackdropClick) {\n        onChangeOpen(false);\n      }\n    };\n\n    const handleBackdropKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n      if (event.key === 'Escape' && closeOnEscape) {\n        onChangeOpen(false);\n      }\n    };\n\n    const handleSubmit = () => {\n      onChangeOpen(false);\n      onSubmit?.(submitValue);\n    };\n\n    const handleCancel = () => {\n      onChangeOpen(false);\n      onCancel?.(cancelValue);\n    };\n\n    const sizeClasses = SIZE_CLASSES[size];\n\n    return (\n      <>\n        {/* Alert Dialog Overlay */}\n        {isOpen && (\n          <div\n            className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm\"\n            onClick={handleBackdropClick}\n            onKeyDown={handleBackdropKeyDown}\n            data-testid=\"alert-dialog-overlay\"\n          >\n            {/* Alert Dialog Content */}\n            <div\n              ref={ref}\n              className={cn(\n                'bg-background border border-border-100 rounded-lg shadow-lg p-6 m-3',\n                sizeClasses,\n                className\n              )}\n              {...props}\n            >\n              <h2\n                id=\"alert-dialog-title\"\n                className=\"pb-3 text-xl font-semibold text-text-950\"\n              >\n                {title}\n              </h2>\n              <p\n                id=\"alert-dialog-description\"\n                className=\"text-text-700 text-sm\"\n              >\n                {description}\n              </p>\n\n              <div className=\"flex flex-row items-center justify-end pt-4 gap-3\">\n                <Button variant=\"outline\" size=\"small\" onClick={handleCancel}>\n                  {cancelButtonLabel}\n                </Button>\n\n                <Button\n                  variant=\"solid\"\n                  size=\"small\"\n                  action=\"negative\"\n                  onClick={handleSubmit}\n                >\n                  {submitButtonLabel}\n                </Button>\n              </div>\n            </div>\n          </div>\n        )}\n      </>\n    );\n  }\n);\n\nAlertDialog.displayName = 'AlertDialog';\n\nexport { AlertDialog };\n","import { ReactNode, MouseEvent, useEffect, KeyboardEvent } from 'react';\nimport { X } from 'phosphor-react';\nimport { cn } from '../../utils/utils';\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n  xs: 'max-w-[360px]',\n  sm: 'max-w-[420px]',\n  md: 'max-w-[510px]',\n  lg: 'max-w-[640px]',\n  xl: 'max-w-[970px]',\n} as const;\n\n/**\n * Modal component props interface\n */\ntype ModalProps = {\n  /** Whether the modal is open */\n  isOpen: boolean;\n  /** Function to close the modal */\n  onClose: () => void;\n  /** Modal title */\n  title: string;\n  /** Modal description/content */\n  children: ReactNode;\n  /** Size of the modal */\n  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n  /** Additional CSS classes for the modal content */\n  className?: string;\n  /** Whether clicking the backdrop should close the modal */\n  closeOnBackdropClick?: boolean;\n  /** Whether pressing Escape should close the modal */\n  closeOnEscape?: boolean;\n  /** Footer content (typically buttons) */\n  footer?: ReactNode;\n  /** Hide the close button */\n  hideCloseButton?: boolean;\n};\n\n/**\n * Modal component for Analytica Ensino platforms\n *\n * A flexible modal component with multiple size variants and customizable behavior.\n *\n * @param isOpen - Whether the modal is currently open\n * @param onClose - Callback function called when the modal should be closed\n * @param title - The title displayed at the top of the modal\n * @param children - The main content of the modal\n * @param size - The size variant (xs, sm, md, lg, xl)\n * @param className - Additional CSS classes for the modal content\n * @param closeOnBackdropClick - Whether clicking the backdrop closes the modal (default: true)\n * @param closeOnEscape - Whether pressing Escape closes the modal (default: true)\n * @param footer - Footer content, typically action buttons\n * @param hideCloseButton - Whether to hide the X close button (default: false)\n * @returns A modal overlay with content\n *\n * @example\n * ```tsx\n * <Modal\n *   isOpen={isModalOpen}\n *   onClose={() => setIsModalOpen(false)}\n *   title=\"Invite your team\"\n *   size=\"md\"\n *   footer={\n *     <div className=\"flex gap-3\">\n *       <Button variant=\"outline\" onClick={() => setIsModalOpen(false)}>Cancel</Button>\n *       <Button variant=\"solid\" onClick={handleExplore}>Explore</Button>\n *     </div>\n *   }\n * >\n *   Elevate user interactions with our versatile modals.\n * </Modal>\n * ```\n */\nconst Modal = ({\n  isOpen,\n  onClose,\n  title,\n  children,\n  size = 'md',\n  className = '',\n  closeOnBackdropClick = true,\n  closeOnEscape = true,\n  footer,\n  hideCloseButton = false,\n}: ModalProps) => {\n  // Handle escape key\n  useEffect(() => {\n    if (!isOpen || !closeOnEscape) return;\n\n    const handleEscape = (event: globalThis.KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        onClose();\n      }\n    };\n\n    document.addEventListener('keydown', handleEscape);\n    return () => document.removeEventListener('keydown', handleEscape);\n  }, [isOpen, closeOnEscape, onClose]);\n\n  // Handle body scroll lock\n  useEffect(() => {\n    const originalOverflow = document.body.style.overflow;\n    if (isOpen) {\n      document.body.style.overflow = 'hidden';\n    } else {\n      document.body.style.overflow = originalOverflow;\n    }\n\n    return () => {\n      document.body.style.overflow = originalOverflow;\n    };\n  }, [isOpen]);\n\n  // Handle backdrop click\n  const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n    if (closeOnBackdropClick && event.target === event.currentTarget) {\n      onClose();\n    }\n  };\n\n  // Handle backdrop keyboard interaction\n  const handleBackdropKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n    if (closeOnBackdropClick && (event.key === 'Enter' || event.key === ' ')) {\n      onClose();\n    }\n  };\n\n  if (!isOpen) return null;\n\n  const sizeClasses = SIZE_CLASSES[size];\n  const baseClasses =\n    'bg-secondary-50 rounded-3xl shadow-hard-shadow-2 border border-border-100 w-full mx-4';\n  // Reset dialog default styles to prevent positioning issues\n  const dialogResetClasses =\n    'p-0 m-0 border-none outline-none max-h-none static';\n  const modalClasses = cn(\n    baseClasses,\n    sizeClasses,\n    dialogResetClasses,\n    className\n  );\n\n  return (\n    <div\n      className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-xs\"\n      onClick={handleBackdropClick}\n      onKeyDown={handleBackdropKeyDown}\n      role=\"button\"\n      tabIndex={closeOnBackdropClick ? 0 : -1}\n      aria-label=\"Fechar modal clicando no fundo\"\n    >\n      <dialog className={modalClasses} aria-labelledby=\"modal-title\" open>\n        {/* Header */}\n        <div className=\"flex items-center justify-between px-6 py-6\">\n          <h2 id=\"modal-title\" className=\"text-lg font-semibold text-text-950\">\n            {title}\n          </h2>\n          {!hideCloseButton && (\n            <button\n              onClick={onClose}\n              className=\"p-1 text-text-500 hover:text-text-700 hover:bg-background-50 rounded-md transition-colors focus:outline-none focus:ring-2 focus:ring-indicator-info focus:ring-offset-2\"\n              aria-label=\"Fechar modal\"\n            >\n              <X size={18} />\n            </button>\n          )}\n        </div>\n\n        {/* Content */}\n        <div className=\"px-6 pb-6\">\n          <div className=\"text-text-500 font-normal text-sm leading-6\">\n            {children}\n          </div>\n        </div>\n\n        {/* Footer */}\n        {footer && (\n          <div className=\"flex justify-end gap-3 px-6 pb-6\">{footer}</div>\n        )}\n      </dialog>\n    </div>\n  );\n};\n\nexport default Modal;\n","import { create, StoreApi, useStore } from 'zustand';\nimport {\n  ReactNode,\n  useEffect,\n  useRef,\n  ButtonHTMLAttributes,\n  forwardRef,\n  HTMLAttributes,\n  KeyboardEvent,\n  MouseEvent,\n  ReactElement,\n  isValidElement,\n  Children,\n  cloneElement,\n  useId,\n} from 'react';\nimport { CaretDown, Check, WarningCircle } from 'phosphor-react';\nimport { cn } from '../../utils/utils';\n\nconst VARIANT_CLASSES = {\n  outlined: 'border rounded-lg focus:border-primary-950',\n  underlined: 'border-b focus:border-primary-950',\n  rounded: 'border rounded-full focus:border-primary-950',\n} as const;\n\nconst SIZE_CLASSES = {\n  small: 'text-sm',\n  medium: 'text-md',\n  large: 'text-lg',\n  'extra-large': 'text-lg',\n} as const;\n\nconst HEIGHT_CLASSES = {\n  small: 'h-8',\n  medium: 'h-9',\n  large: 'h-10',\n  'extra-large': 'h-12',\n} as const;\n\nconst PADDING_CLASSES = {\n  small: 'px-2 py-1',\n  medium: 'px-3 py-2',\n  large: 'px-4 py-3',\n  'extra-large': 'px-5 py-4',\n} as const;\n\nconst SIDE_CLASSES = {\n  top: 'bottom-full -translate-y-1',\n  right: 'top-full translate-y-1',\n  bottom: 'top-full translate-y-1',\n  left: 'top-full translate-y-1',\n};\nconst ALIGN_CLASSES = {\n  start: 'left-0',\n  center: 'left-1/2 -translate-x-1/2',\n  end: 'right-0',\n};\n\ninterface SelectStore {\n  open: boolean;\n  setOpen: (open: boolean) => void;\n  value: string;\n  setValue: (value: string) => void;\n  selectedLabel: ReactNode;\n  setSelectedLabel: (label: ReactNode) => void;\n  onValueChange?: (value: string) => void;\n}\n\ntype SelectStoreApi = StoreApi<SelectStore>;\n\nexport function createSelectStore(\n  onValueChange?: (value: string) => void\n): SelectStoreApi {\n  return create<SelectStore>((set) => ({\n    open: false,\n    setOpen: (open) => set({ open }),\n    value: '',\n    setValue: (value) => set({ value }),\n    selectedLabel: '',\n    setSelectedLabel: (label) => set({ selectedLabel: label }),\n    onValueChange,\n  }));\n}\n\nexport const useSelectStore = (externalStore?: SelectStoreApi) => {\n  if (!externalStore) {\n    throw new Error(\n      'Component must be used within a Select (store is missing)'\n    );\n  }\n\n  return externalStore;\n};\n\nexport function getLabelAsNode(children: ReactNode): ReactNode {\n  if (typeof children === 'string' || typeof children === 'number') {\n    return children;\n  }\n  const flattened = Children.toArray(children);\n\n  if (flattened.length === 1) return flattened[0];\n\n  return <>{flattened}</>;\n}\n\ninterface SelectProps {\n  children: ReactNode;\n  defaultValue?: string;\n  value?: string;\n  onValueChange?: (value: string) => void;\n  size?: 'small' | 'medium' | 'large' | 'extra-large';\n  label?: string;\n  helperText?: string;\n  errorMessage?: string;\n  id?: string;\n}\n\nconst injectStore = (\n  children: ReactNode,\n  store: SelectStoreApi,\n  size: string,\n  selectId: string\n): ReactNode => {\n  return Children.map(children, (child) => {\n    if (isValidElement(child)) {\n      const typedChild = child as ReactElement<{\n        store?: SelectStoreApi;\n        children?: ReactNode;\n        size?: string;\n        selectId?: string;\n      }>;\n\n      const newProps: Partial<{\n        store: SelectStoreApi;\n        children: ReactNode;\n        size: string;\n        selectId: string;\n      }> = {\n        store,\n      };\n\n      // Only pass size and selectId to SelectTrigger\n      if (typedChild.type === SelectTrigger) {\n        newProps.size = size;\n        newProps.selectId = selectId;\n      }\n\n      if (typedChild.props.children) {\n        newProps.children = injectStore(\n          typedChild.props.children,\n          store,\n          size,\n          selectId\n        );\n      }\n\n      return cloneElement(typedChild, newProps);\n    }\n    return child;\n  });\n};\n\nconst Select = ({\n  children,\n  defaultValue = '',\n  value: propValue,\n  onValueChange,\n  size = 'small',\n  label,\n  helperText,\n  errorMessage,\n  id,\n}: SelectProps) => {\n  const storeRef = useRef<SelectStoreApi | null>(null);\n  storeRef.current ??= createSelectStore(onValueChange);\n  const store = storeRef.current;\n\n  const selectRef = useRef<HTMLDivElement>(null);\n  const { open, setOpen, setValue, selectedLabel } = useStore(store, (s) => s);\n\n  // Generate unique ID if not provided\n  const generatedId = useId();\n  const selectId = id ?? `select-${generatedId}`;\n\n  const findLabelForValue = (\n    children: ReactNode,\n    targetValue: string\n  ): string | null => {\n    let found: string | null = null;\n    const search = (nodes: ReactNode) => {\n      Children.forEach(nodes, (child) => {\n        if (!isValidElement(child)) return;\n        const typedChild = child as ReactElement<{\n          value?: string;\n          children?: ReactNode;\n        }>;\n        if (\n          typedChild.type === SelectItem &&\n          typedChild.props.value === targetValue\n        ) {\n          if (typeof typedChild.props.children === 'string')\n            found = typedChild.props.children;\n        }\n        if (typedChild.props.children && !found)\n          search(typedChild.props.children);\n      });\n    };\n    search(children);\n    return found;\n  };\n\n  useEffect(() => {\n    if (!selectedLabel && defaultValue) {\n      const label = findLabelForValue(children, defaultValue);\n      if (label) store.setState({ selectedLabel: label });\n    }\n  }, [children, defaultValue, selectedLabel]);\n\n  useEffect(() => {\n    const handleClickOutside = (event: globalThis.MouseEvent) => {\n      if (\n        selectRef.current &&\n        !selectRef.current.contains(event.target as Node)\n      ) {\n        setOpen(false);\n      }\n    };\n\n    const handleArrowKeys = (event: globalThis.KeyboardEvent) => {\n      const selectContent = selectRef.current?.querySelector('[role=\"menu\"]');\n      if (selectContent) {\n        event.preventDefault();\n        const items = Array.from(\n          selectContent.querySelectorAll(\n            '[role=\"menuitem\"]:not([aria-disabled=\"true\"])'\n          )\n        ).filter((el): el is HTMLElement => el instanceof HTMLElement);\n\n        const focused = document.activeElement as HTMLElement;\n        const currentIndex = items.findIndex((item) => item === focused);\n\n        let nextIndex = 0;\n        if (event.key === 'ArrowDown') {\n          nextIndex =\n            currentIndex === -1 ? 0 : (currentIndex + 1) % items.length;\n        } else {\n          nextIndex =\n            currentIndex === -1\n              ? items.length - 1\n              : (currentIndex - 1 + items.length) % items.length;\n        }\n        items[nextIndex]?.focus();\n      }\n    };\n\n    if (open) {\n      document.addEventListener('mousedown', handleClickOutside);\n      document.addEventListener('keydown', handleArrowKeys);\n    }\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n      document.removeEventListener('keydown', handleArrowKeys);\n    };\n  }, [open]);\n\n  useEffect(() => {\n    if (propValue) {\n      setValue(propValue);\n      const label = findLabelForValue(children, propValue);\n      if (label) store.setState({ selectedLabel: label });\n    }\n  }, [propValue]);\n\n  const sizeClasses = SIZE_CLASSES[size];\n\n  return (\n    <div className=\"w-full\">\n      {/* Label */}\n      {label && (\n        <label\n          htmlFor={selectId}\n          className={cn('block font-bold text-text-900 mb-1.5', sizeClasses)}\n        >\n          {label}\n        </label>\n      )}\n\n      {/* Select Container */}\n      <div className={cn('relative', sizeClasses)} ref={selectRef}>\n        {injectStore(children, store, size, selectId)}\n      </div>\n\n      {/* Helper Text or Error Message */}\n      <div className=\"mt-1.5 gap-1.5\">\n        {helperText && <p className=\"text-sm text-text-500\">{helperText}</p>}\n        {errorMessage && (\n          <p className=\"flex gap-1 items-center text-sm text-indicator-error\">\n            <WarningCircle size={16} /> {errorMessage}\n          </p>\n        )}\n      </div>\n    </div>\n  );\n};\n\nconst SelectValue = ({\n  placeholder,\n  store: externalStore,\n}: {\n  placeholder?: string;\n  store?: SelectStoreApi;\n}) => {\n  const store = useSelectStore(externalStore);\n\n  const selectedLabel = useStore(store, (s) => s.selectedLabel);\n  const value = useStore(store, (s) => s.value);\n  return (\n    <span className=\"text-inherit\">\n      {selectedLabel || placeholder || value}\n    </span>\n  );\n};\n\ninterface SelectTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n  className?: string;\n  invalid?: boolean;\n  variant?: 'outlined' | 'underlined' | 'rounded';\n  store?: SelectStoreApi;\n  size?: 'small' | 'medium' | 'large' | 'extra-large';\n  selectId?: string;\n}\n\nconst SelectTrigger = forwardRef<HTMLButtonElement, SelectTriggerProps>(\n  (\n    {\n      className,\n      invalid = false,\n      variant = 'outlined',\n      store: externalStore,\n      disabled,\n      size = 'medium',\n      selectId,\n      ...props\n    },\n    ref\n  ) => {\n    const store = useSelectStore(externalStore);\n    const open = useStore(store, (s) => s.open);\n    const toggleOpen = () => store.setState({ open: !open });\n\n    const variantClasses = VARIANT_CLASSES[variant];\n    const heightClasses = HEIGHT_CLASSES[size];\n    const paddingClasses = PADDING_CLASSES[size];\n\n    return (\n      <button\n        ref={ref}\n        id={selectId}\n        className={`\n        flex min-w-[220px] w-full items-center justify-between border-border-300\n        ${heightClasses} ${paddingClasses}\n        ${invalid && `${variant == 'underlined' ? 'border-b-2' : 'border-2'} border-indicator-error text-text-600`}\n        ${\n          disabled\n            ? 'cursor-not-allowed text-text-400 pointer-events-none opacity-50'\n            : 'cursor-pointer hover:bg-background-50 focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground'\n        }\n        ${!invalid && !disabled ? 'text-text-700' : ''}\n        ${variantClasses}\n        ${className}\n      `}\n        onClick={toggleOpen}\n        aria-expanded={open}\n        aria-haspopup=\"listbox\"\n        aria-controls={open ? 'select-content' : undefined}\n        {...props}\n      >\n        {props.children}\n        <CaretDown\n          className={cn(\n            'h-[1em] w-[1em] opacity-50 transition-transform',\n            open ? 'rotate-180' : ''\n          )}\n        />\n      </button>\n    );\n  }\n);\nSelectTrigger.displayName = 'SelectTrigger';\n\ninterface SelectContentProps extends HTMLAttributes<HTMLDivElement> {\n  className?: string;\n  align?: 'start' | 'center' | 'end';\n  side?: 'top' | 'right' | 'bottom' | 'left';\n  store?: SelectStoreApi;\n}\n\nconst SelectContent = forwardRef<HTMLDivElement, SelectContentProps>(\n  (\n    {\n      children,\n      className,\n      align = 'start',\n      side = 'bottom',\n      store: externalStore,\n      ...props\n    },\n    ref\n  ) => {\n    const store = useSelectStore(externalStore);\n\n    const open = useStore(store, (s) => s.open);\n    if (!open) return null;\n\n    const getPositionClasses = () =>\n      `w-full min-w-full absolute ${SIDE_CLASSES[side]} ${ALIGN_CLASSES[align]}`;\n\n    return (\n      <div\n        role=\"menu\"\n        ref={ref}\n        className={cn(\n          'bg-secondary z-50 min-w-[210px] overflow-hidden rounded-md border p-1 shadow-md border-border-100',\n          getPositionClasses(),\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\nSelectContent.displayName = 'SelectContent';\n\ninterface SelectItemProps extends HTMLAttributes<HTMLDivElement> {\n  value: string;\n  disabled?: boolean;\n  store?: SelectStoreApi;\n}\n\nconst SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(\n  (\n    {\n      className,\n      children,\n      value,\n      disabled = false,\n      store: externalStore,\n      ...props\n    },\n    ref\n  ) => {\n    const store = useSelectStore(externalStore);\n    const {\n      value: selectedValue,\n      setValue,\n      setOpen,\n      setSelectedLabel,\n      onValueChange,\n    } = useStore(store, (s) => s);\n\n    const handleClick = (\n      e: MouseEvent<HTMLDivElement> | KeyboardEvent<HTMLDivElement>\n    ) => {\n      const labelNode = getLabelAsNode(children);\n      if (!disabled) {\n        setValue(value);\n        setSelectedLabel(labelNode);\n        setOpen(false);\n        onValueChange?.(value);\n      }\n      props.onClick?.(e as MouseEvent<HTMLDivElement>);\n    };\n\n    return (\n      <div\n        role=\"menuitem\"\n        aria-disabled={disabled}\n        ref={ref}\n        className={`\n          bg-secondary focus-visible:bg-background-50\n          relative flex select-none items-center gap-2 rounded-sm p-3 outline-none transition-colors [&>svg]:size-4 [&>svg]:shrink-0\n          ${className}\n          ${\n            disabled\n              ? 'cursor-not-allowed text-text-400 pointer-events-none opacity-50'\n              : 'cursor-pointer hover:bg-background-50 text-text-700 focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground'\n          }\n          ${selectedValue === value && 'bg-background-50'}\n        `}\n        onClick={handleClick}\n        onKeyDown={(e) => {\n          if (e.key === 'Enter' || e.key === ' ') handleClick(e);\n        }}\n        tabIndex={disabled ? -1 : 0}\n        {...props}\n      >\n        <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n          {selectedValue === value && <Check className=\"\" />}\n        </span>\n        {children}\n      </div>\n    );\n  }\n);\n\nSelectItem.displayName = 'SelectItem';\n\nexport default Select;\nexport { SelectTrigger, SelectContent, SelectItem, SelectValue };\n","import {\n  forwardRef,\n  Fragment,\n  HTMLAttributes,\n  ReactNode,\n  useState,\n  useRef,\n  MouseEvent,\n  ChangeEvent,\n  KeyboardEvent,\n  Ref,\n} from 'react';\nimport Button from '../Button/Button';\nimport Badge from '../Badge/Badge';\nimport ProgressBar from '../ProgressBar/ProgressBar';\nimport {\n  CaretRight,\n  ChatCircleText,\n  CheckCircle,\n  Clock,\n  DotsThreeVertical,\n  Play,\n  SpeakerHigh,\n  SpeakerLow,\n  SpeakerSimpleX,\n  XCircle,\n} from 'phosphor-react';\nimport Text from '../Text/Text';\nimport { cn } from '../../utils/utils';\n\n// Componente base reutilizável para todos os cards\ninterface CardBaseProps extends HTMLAttributes<HTMLDivElement> {\n  children: ReactNode;\n  variant?: 'default' | 'compact' | 'minimal';\n  layout?: 'horizontal' | 'vertical';\n  padding?: 'none' | 'small' | 'medium' | 'large';\n  minHeight?: 'none' | 'small' | 'medium' | 'large';\n  cursor?: 'default' | 'pointer';\n}\n\nconst CARD_BASE_CLASSES = {\n  default: 'w-full bg-background border border-border-50 rounded-xl',\n  compact: 'w-full bg-background border border-border-50 rounded-lg',\n  minimal: 'w-full bg-background border border-border-100 rounded-md',\n};\n\nconst CARD_PADDING_CLASSES = {\n  none: '',\n  small: 'p-2',\n  medium: 'p-4',\n  large: 'p-6',\n};\n\nconst CARD_MIN_HEIGHT_CLASSES = {\n  none: '',\n  small: 'min-h-16',\n  medium: 'min-h-20',\n  large: 'min-h-24',\n};\n\nconst CARD_LAYOUT_CLASSES = {\n  horizontal: 'flex flex-row',\n  vertical: 'flex flex-col',\n};\n\nconst CARD_CURSOR_CLASSES = {\n  default: '',\n  pointer: 'cursor-pointer',\n};\n\nconst CardBase = forwardRef<HTMLDivElement, CardBaseProps>(\n  (\n    {\n      children,\n      variant = 'default',\n      layout = 'horizontal',\n      padding = 'medium',\n      minHeight = 'medium',\n      cursor = 'default',\n      className = '',\n      ...props\n    },\n    ref\n  ) => {\n    const baseClasses = CARD_BASE_CLASSES[variant];\n    const paddingClasses = CARD_PADDING_CLASSES[padding];\n    const minHeightClasses = CARD_MIN_HEIGHT_CLASSES[minHeight];\n    const layoutClasses = CARD_LAYOUT_CLASSES[layout];\n    const cursorClasses = CARD_CURSOR_CLASSES[cursor];\n\n    const combinedClasses = [\n      baseClasses,\n      paddingClasses,\n      minHeightClasses,\n      layoutClasses,\n      cursorClasses,\n      className,\n    ]\n      .filter(Boolean)\n      .join(' ');\n\n    return (\n      <div ref={ref} className={combinedClasses} {...props}>\n        {children}\n      </div>\n    );\n  }\n);\n\ninterface CardActivitiesResultsProps extends HTMLAttributes<HTMLDivElement> {\n  icon: ReactNode;\n  title: string;\n  subTitle: string;\n  header: string;\n  description?: string;\n  extended?: boolean;\n  action?: 'warning' | 'success' | 'error' | 'info';\n}\n\nconst ACTION_CARD_CLASSES = {\n  warning: 'bg-warning-background',\n  success: 'bg-success-300',\n  error: 'bg-error-100',\n  info: 'bg-info-background',\n};\n\nconst ACTION_ICON_CLASSES = {\n  warning: 'bg-warning-300 text-text',\n  success: 'bg-yellow-300 text-text-950',\n  error: 'bg-error-500 text-text',\n  info: 'bg-info-500 text-text',\n};\n\nconst ACTION_SUBTITLE_CLASSES = {\n  warning: 'text-warning-600',\n  success: 'text-success-700',\n  error: 'text-error-700',\n  info: 'text-info-700',\n};\n\nconst ACTION_HEADER_CLASSES = {\n  warning: 'text-warning-300',\n  success: 'text-success-300',\n  error: 'text-error-300',\n  info: 'text-info-300',\n};\n\nconst CardActivitiesResults = forwardRef<\n  HTMLDivElement,\n  CardActivitiesResultsProps\n>(\n  (\n    {\n      icon,\n      title,\n      subTitle,\n      header,\n      extended = false,\n      action = 'success',\n      description,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const actionCardClasses = ACTION_CARD_CLASSES[action];\n    const actionIconClasses = ACTION_ICON_CLASSES[action];\n    const actionSubTitleClasses = ACTION_SUBTITLE_CLASSES[action];\n    const actionHeaderClasses = ACTION_HEADER_CLASSES[action];\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          'w-full flex flex-col border border-border-50  bg-background rounded-xl',\n          className\n        )}\n        {...props}\n      >\n        <div\n          className={cn(\n            'flex flex-col gap-1 items-center justify-center p-4',\n            actionCardClasses,\n            extended ? 'rounded-t-xl' : 'rounded-xl'\n          )}\n        >\n          <span\n            className={cn(\n              'size-7.5 rounded-full flex items-center justify-center',\n              actionIconClasses\n            )}\n          >\n            {icon}\n          </span>\n\n          <Text\n            size=\"2xs\"\n            weight=\"medium\"\n            className=\"text-text-800 uppercase truncate\"\n          >\n            {title}\n          </Text>\n\n          <p\n            className={cn('text-lg font-bold truncate', actionSubTitleClasses)}\n          >\n            {subTitle}\n          </p>\n        </div>\n\n        {extended && (\n          <div className=\"flex flex-col items-center gap-2.5 pb-9.5 pt-2.5\">\n            <p\n              className={cn(\n                'text-2xs font-medium uppercase truncate',\n                actionHeaderClasses\n              )}\n            >\n              {header}\n            </p>\n            <Badge size=\"large\" action=\"info\">\n              {description}\n            </Badge>\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\ninterface CardQuestionProps extends HTMLAttributes<HTMLDivElement> {\n  header: string;\n  state?: 'done' | 'undone';\n  onClickButton?: (valueButton?: unknown) => void;\n  valueButton?: unknown;\n}\n\nconst CardQuestions = forwardRef<HTMLDivElement, CardQuestionProps>(\n  (\n    {\n      header,\n      state = 'undone',\n      className,\n      onClickButton,\n      valueButton,\n      ...props\n    },\n    ref\n  ) => {\n    const isDone = state === 'done';\n    const stateLabel = isDone ? 'Realizado' : 'Não Realizado';\n    const buttonLabel = isDone ? 'Ver Questão' : 'Responder';\n\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"medium\"\n        minHeight=\"medium\"\n        className={cn('justify-between gap-4', className)}\n        {...props}\n      >\n        <section className=\"flex flex-col gap-1 flex-1 min-w-0\">\n          <p className=\"font-bold text-xs text-text-950 truncate\">{header}</p>\n\n          <div className=\"flex flex-row gap-6 items-center\">\n            <Badge\n              size=\"medium\"\n              variant=\"solid\"\n              action={isDone ? 'success' : 'error'}\n            >\n              {stateLabel}\n            </Badge>\n\n            <span className=\"flex flex-row items-center gap-1 text-text-700 text-xs\">\n              {isDone ? 'Nota' : 'Sem nota'}\n              {isDone && (\n                <Badge size=\"medium\" action=\"success\">\n                  00\n                </Badge>\n              )}\n            </span>\n          </div>\n        </section>\n\n        <span className=\"flex-shrink-0\">\n          <Button\n            size=\"extra-small\"\n            onClick={() => onClickButton?.(valueButton)}\n            className=\"min-w-fit\"\n          >\n            {buttonLabel}\n          </Button>\n        </span>\n      </CardBase>\n    );\n  }\n);\n\ninterface CardProgressProps extends HTMLAttributes<HTMLDivElement> {\n  header: string;\n  subhead?: string;\n  initialDate?: string;\n  endDate?: string;\n  progress?: number;\n  direction?: 'horizontal' | 'vertical';\n  icon: ReactNode;\n  color?: string;\n  progressVariant?: 'blue' | 'green';\n  showDates?: boolean;\n}\n\nconst CardProgress = forwardRef<HTMLDivElement, CardProgressProps>(\n  (\n    {\n      header,\n      subhead,\n      initialDate,\n      endDate,\n      progress = 0,\n      direction = 'horizontal',\n      icon,\n      color = '#B7DFFF',\n      progressVariant = 'blue',\n      showDates = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const isHorizontal = direction === 'horizontal';\n    const contentComponent = {\n      horizontal: (\n        <>\n          {showDates && (\n            <div className=\"flex flex-row gap-6 items-center\">\n              {initialDate && (\n                <span className=\"flex flex-row gap-1 items-center text-2xs\">\n                  <p className=\"text-text-800 font-semibold\">Início</p>\n                  <p className=\"text-text-600\">{initialDate}</p>\n                </span>\n              )}\n              {endDate && (\n                <span className=\"flex flex-row gap-1 items-center text-2xs\">\n                  <p className=\"text-text-800 font-semibold\">Fim</p>\n                  <p className=\"text-text-600\">{endDate}</p>\n                </span>\n              )}\n            </div>\n          )}\n          <span className=\"grid grid-cols-[1fr_auto] items-center gap-2\">\n            <ProgressBar\n              size=\"small\"\n              value={progress}\n              variant={progressVariant}\n              data-testid=\"progress-bar\"\n            />\n\n            <Text\n              size=\"xs\"\n              weight=\"medium\"\n              className={cn(\n                'text-text-950 leading-none tracking-normal text-center flex-none'\n              )}\n            >\n              {Math.round(progress)}%\n            </Text>\n          </span>\n        </>\n      ),\n      vertical: <p className=\"text-sm text-text-800\">{subhead}</p>,\n    };\n\n    return (\n      <CardBase\n        ref={ref}\n        layout={isHorizontal ? 'horizontal' : 'vertical'}\n        padding=\"none\"\n        minHeight=\"medium\"\n        cursor=\"pointer\"\n        className={cn(isHorizontal ? 'h-20' : '', className)}\n        {...props}\n      >\n        <div\n          className={cn(\n            'flex justify-center items-center [&>svg]:size-6 text-text-950',\n            isHorizontal\n              ? 'min-w-[80px] min-h-[80px] rounded-l-xl'\n              : 'min-h-[50px] w-full rounded-t-xl',\n            !color.startsWith('#') ? `bg-${color}` : ''\n          )}\n          style={color.startsWith('#') ? { backgroundColor: color } : undefined}\n          data-testid=\"icon-container\"\n        >\n          {icon}\n        </div>\n\n        <div\n          className={cn(\n            'p-4 flex flex-col justify-between w-full h-full',\n            !isHorizontal && 'gap-4'\n          )}\n        >\n          <Text size=\"sm\" weight=\"bold\" className=\"text-text-950 truncate\">\n            {header}\n          </Text>\n          {contentComponent[direction]}\n        </div>\n      </CardBase>\n    );\n  }\n);\n\ninterface CardTopicProps extends HTMLAttributes<HTMLDivElement> {\n  header: string;\n  subHead?: string[];\n  progress: number;\n  showPercentage?: boolean;\n  progressVariant?: 'blue' | 'green';\n}\n\nconst CardTopic = forwardRef<HTMLDivElement, CardTopicProps>(\n  (\n    {\n      header,\n      subHead,\n      progress,\n      showPercentage = false,\n      progressVariant = 'blue',\n      className = '',\n      ...props\n    },\n    ref\n  ) => {\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"vertical\"\n        padding=\"small\"\n        minHeight=\"medium\"\n        cursor=\"pointer\"\n        className={cn('justify-center gap-2  py-2 px-4', className)}\n        {...props}\n      >\n        {subHead && (\n          <span className=\"text-text-600 text-2xs flex flex-row gap-1\">\n            {subHead.map((text, index) => (\n              <Fragment key={`${text} - ${index}`}>\n                <p>{text}</p>\n                {index < subHead.length - 1 && <p>•</p>}\n              </Fragment>\n            ))}\n          </span>\n        )}\n\n        <p className=\"text-sm text-text-950 font-bold truncate\">{header}</p>\n\n        <span className=\"grid grid-cols-[1fr_auto] items-center gap-2\">\n          <ProgressBar\n            size=\"small\"\n            value={progress}\n            variant={progressVariant}\n            data-testid=\"progress-bar\"\n          />\n          {showPercentage && (\n            <Text\n              size=\"xs\"\n              weight=\"medium\"\n              className={cn(\n                'text-text-950 leading-none tracking-normal text-center flex-none'\n              )}\n            >\n              {Math.round(progress)}%\n            </Text>\n          )}\n        </span>\n      </CardBase>\n    );\n  }\n);\n\ninterface CardPerformanceProps extends HTMLAttributes<HTMLDivElement> {\n  header: string;\n  description?: string;\n  progress?: number;\n  labelProgress?: string;\n  actionVariant?: 'button' | 'caret';\n  progressVariant?: 'blue' | 'green';\n  onClickButton?: (valueButton?: unknown) => void;\n  valueButton?: unknown;\n}\n\nconst CardPerformance = forwardRef<HTMLDivElement, CardPerformanceProps>(\n  (\n    {\n      header,\n      progress,\n      description = 'Sem dados ainda! Você ainda não fez um questionário neste assunto.',\n      actionVariant = 'button',\n      progressVariant = 'blue',\n      labelProgress = '',\n      className = '',\n      onClickButton,\n      valueButton,\n      ...props\n    },\n    ref\n  ) => {\n    const hasProgress = progress !== undefined;\n\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"medium\"\n        minHeight=\"none\"\n        className={cn(\n          actionVariant == 'caret' ? 'cursor-pointer' : '',\n          className\n        )}\n        onClick={() => actionVariant == 'caret' && onClickButton?.(valueButton)}\n        {...props}\n      >\n        <div className=\"w-full flex flex-col justify-between gap-2\">\n          <div className=\"flex flex-row justify-between items-center gap-2\">\n            <p className=\"text-lg font-bold text-text-950 truncate flex-1 min-w-0\">\n              {header}\n            </p>\n            {actionVariant === 'button' && (\n              <Button\n                variant=\"outline\"\n                size=\"extra-small\"\n                onClick={() => onClickButton?.(valueButton)}\n                className=\"min-w-fit flex-shrink-0\"\n              >\n                Ver Aula\n              </Button>\n            )}\n          </div>\n\n          <div className=\"w-full\">\n            {hasProgress ? (\n              <ProgressBar\n                value={progress}\n                label={`${progress}% ${labelProgress}`}\n                variant={progressVariant}\n              />\n            ) : (\n              <p className=\"text-xs text-text-600 truncate\">{description}</p>\n            )}\n          </div>\n        </div>\n\n        {actionVariant == 'caret' && (\n          <CaretRight\n            className=\"size-4.5 text-text-800 cursor-pointer\"\n            data-testid=\"caret-icon\"\n          />\n        )}\n      </CardBase>\n    );\n  }\n);\n\ninterface CardResultsProps extends HTMLAttributes<HTMLDivElement> {\n  header: string;\n  icon: ReactNode;\n  correct_answers: number;\n  incorrect_answers: number;\n  direction?: 'row' | 'col';\n  color?: string;\n}\n\nconst CardResults = forwardRef<HTMLDivElement, CardResultsProps>(\n  (\n    {\n      header,\n      correct_answers,\n      incorrect_answers,\n      icon,\n      direction = 'col',\n      color = '#B7DFFF',\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const isRow = direction == 'row';\n\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"none\"\n        minHeight=\"medium\"\n        className={cn('items-center cursor-pointer pr-4', className)}\n        {...props}\n      >\n        <div\n          className={cn(\n            'flex justify-center items-center [&>svg]:size-8 text-text-950 min-w-20 max-w-20 min-h-20 h-full rounded-l-xl'\n          )}\n          style={{\n            backgroundColor: color,\n          }}\n        >\n          {icon}\n        </div>\n\n        <div\n          className={cn(\n            'p-4 flex justify-between w-full h-full',\n            isRow ? 'flex-row items-center gap-2' : 'flex-col'\n          )}\n        >\n          <p className=\"text-sm font-bold text-text-950 truncate flex-1 min-w-0\">\n            {header}\n          </p>\n          <span className=\"flex flex-row gap-1 items-center\">\n            <Badge\n              action=\"success\"\n              variant=\"solid\"\n              size=\"large\"\n              iconLeft={<CheckCircle />}\n            >\n              {correct_answers} Corretas\n            </Badge>\n\n            <Badge\n              action=\"error\"\n              variant=\"solid\"\n              size=\"large\"\n              iconLeft={<XCircle />}\n            >\n              {incorrect_answers} Incorretas\n            </Badge>\n          </span>\n        </div>\n\n        <CaretRight className=\"min-w-6 min-h-6 text-text-800\" />\n      </CardBase>\n    );\n  }\n);\n\ninterface CardStatusProps extends HTMLAttributes<HTMLDivElement> {\n  header: string;\n  status?: 'correct' | 'incorrect';\n  label?: string;\n}\n\nconst CardStatus = forwardRef<HTMLDivElement, CardStatusProps>(\n  ({ header, className, status, label, ...props }, ref) => {\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"medium\"\n        minHeight=\"medium\"\n        className={cn('items-center cursor-pointer', className)}\n        {...props}\n      >\n        <div className=\"flex justify-between w-full h-full flex-row items-center gap-2\">\n          <p className=\"text-sm font-bold text-text-950 truncate flex-1 min-w-0\">\n            {header}\n          </p>\n          <span className=\"flex flex-row gap-1 items-center flex-shrink-0\">\n            {status && (\n              <Badge\n                action={status == 'correct' ? 'success' : 'error'}\n                variant=\"solid\"\n                size=\"medium\"\n                iconLeft={<CheckCircle />}\n              >\n                {status == 'correct' ? 'Correta' : 'Incorreta'}\n              </Badge>\n            )}\n            {label && <p className=\"text-sm text-text-800\">{label}</p>}\n          </span>\n          <CaretRight className=\"min-w-6 min-h-6 text-text-800 cursor-pointer flex-shrink-0 ml-2\" />\n        </div>\n      </CardBase>\n    );\n  }\n);\n\ninterface CardSettingsProps extends HTMLAttributes<HTMLDivElement> {\n  icon: ReactNode;\n  header: string;\n}\n\nconst CardSettings = forwardRef<HTMLDivElement, CardSettingsProps>(\n  ({ header, className, icon, ...props }, ref) => {\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"small\"\n        minHeight=\"none\"\n        className={cn(\n          'border-none items-center gap-2 text-text-700',\n          className\n        )}\n        {...props}\n      >\n        <span className=\"[&>svg]:size-6\">{icon}</span>\n\n        <p className=\"w-full text-sm truncate\">{header}</p>\n\n        <CaretRight size={24} className=\"cursor-pointer\" />\n      </CardBase>\n    );\n  }\n);\n\ninterface CardSupportProps extends HTMLAttributes<HTMLDivElement> {\n  header: string;\n  direction?: 'row' | 'col';\n  children: ReactNode;\n}\n\nconst CardSupport = forwardRef<HTMLDivElement, CardSupportProps>(\n  ({ header, className, direction = 'col', children, ...props }, ref) => {\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"medium\"\n        minHeight=\"none\"\n        className={cn(\n          'border-none items-center gap-2 text-text-700',\n          className\n        )}\n        {...props}\n      >\n        <div\n          className={cn(\n            'w-full flex',\n            direction == 'col' ? 'flex-col' : 'flex-row items-center'\n          )}\n        >\n          <span className=\"w-full min-w-0\">\n            <p className=\"text-sm text-text-950 font-bold truncate\">{header}</p>\n          </span>\n          <span className=\"flex flex-row gap-1\">{children}</span>\n        </div>\n\n        <CaretRight className=\"text-text-800 cursor-pointer\" size={24} />\n      </CardBase>\n    );\n  }\n);\n\ninterface CardForumProps<T = unknown> extends HTMLAttributes<HTMLDivElement> {\n  title: string;\n  content: string;\n  comments: number;\n  date: string;\n  hour: string;\n  onClickComments?: (value?: T) => void;\n  valueComments?: T;\n  onClickProfile?: (profile?: T) => void;\n  valueProfile?: T;\n}\n\nconst CardForum = forwardRef<HTMLDivElement, CardForumProps>(\n  (\n    {\n      title,\n      content,\n      comments,\n      onClickComments,\n      valueComments,\n      onClickProfile,\n      valueProfile,\n      className = '',\n      date,\n      hour,\n      ...props\n    },\n    ref\n  ) => {\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"medium\"\n        minHeight=\"none\"\n        variant=\"minimal\"\n        className={cn('w-auto h-auto gap-3', className)}\n        {...props}\n      >\n        <button\n          type=\"button\"\n          aria-label=\"Ver perfil\"\n          onClick={() => onClickProfile?.(valueProfile)}\n          className=\"min-w-8 h-8 rounded-full bg-background-950\"\n        />\n\n        <div className=\"flex flex-col gap-2 flex-1 min-w-0\">\n          <div className=\"flex flex-row gap-1 items-center flex-wrap\">\n            <p className=\"text-xs font-semibold text-primary-700 truncate\">\n              {title}\n            </p>\n            <p className=\"text-xs text-text-600\">\n              • {date} • {hour}\n            </p>\n          </div>\n\n          <p className=\"text-text-950 text-sm line-clamp-2 truncate\">\n            {content}\n          </p>\n\n          <button\n            type=\"button\"\n            aria-label=\"Ver comentários\"\n            onClick={() => onClickComments?.(valueComments)}\n            className=\"text-text-600 flex flex-row gap-2 items-center\"\n          >\n            <ChatCircleText aria-hidden=\"true\" size={16} />\n            <p className=\"text-xs\">{comments} respostas</p>\n          </button>\n        </div>\n      </CardBase>\n    );\n  }\n);\n\ninterface CardAudioProps extends HTMLAttributes<HTMLDivElement> {\n  src?: string;\n  title?: string;\n  onPlay?: () => void;\n  onPause?: () => void;\n  onEnded?: () => void;\n  onAudioTimeUpdate?: (currentTime: number, duration: number) => void;\n  loop?: boolean;\n  preload?: 'none' | 'metadata' | 'auto';\n  tracks?: Array<{\n    kind: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata';\n    src: string;\n    srcLang: string;\n    label: string;\n    default?: boolean;\n  }>;\n}\n\nconst CardAudio = forwardRef<HTMLDivElement, CardAudioProps>(\n  (\n    {\n      src,\n      title,\n      onPlay,\n      onPause,\n      onEnded,\n      onAudioTimeUpdate,\n      loop = false,\n      preload = 'metadata',\n      tracks,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [isPlaying, setIsPlaying] = useState(false);\n    const [currentTime, setCurrentTime] = useState(0);\n    const [duration, setDuration] = useState(0);\n    const [volume, setVolume] = useState(1);\n    const [showVolumeControl, setShowVolumeControl] = useState(false);\n    const audioRef = useRef<HTMLAudioElement>(null);\n\n    const formatTime = (time: number) => {\n      const minutes = Math.floor(time / 60);\n      const seconds = Math.floor(time % 60);\n      return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n    };\n\n    const handlePlayPause = () => {\n      if (isPlaying) {\n        audioRef.current?.pause();\n        setIsPlaying(false);\n        onPause?.();\n      } else {\n        audioRef.current?.play();\n        setIsPlaying(true);\n        onPlay?.();\n      }\n    };\n\n    const handleTimeUpdate = () => {\n      const current = audioRef.current?.currentTime ?? 0;\n      const total = audioRef.current?.duration ?? 0;\n\n      setCurrentTime(current);\n      setDuration(total);\n      onAudioTimeUpdate?.(current, total);\n    };\n\n    const handleLoadedMetadata = () => {\n      setDuration(audioRef.current?.duration ?? 0);\n    };\n\n    const handleEnded = () => {\n      setIsPlaying(false);\n      setCurrentTime(0);\n      onEnded?.();\n    };\n\n    const handleProgressClick = (e: MouseEvent<HTMLButtonElement>) => {\n      const rect = e.currentTarget.getBoundingClientRect();\n      const clickX = e.clientX - rect.left;\n      const width = rect.width;\n      const percentage = clickX / width;\n      const newTime = percentage * duration;\n\n      if (audioRef.current) {\n        audioRef.current.currentTime = newTime;\n      }\n      setCurrentTime(newTime);\n    };\n\n    const handleVolumeChange = (e: ChangeEvent<HTMLInputElement>) => {\n      const newVolume = parseFloat(e.target.value);\n      setVolume(newVolume);\n      if (audioRef.current) {\n        audioRef.current.volume = newVolume;\n      }\n    };\n\n    const toggleVolumeControl = () => {\n      setShowVolumeControl(!showVolumeControl);\n    };\n\n    const getVolumeIcon = () => {\n      if (volume === 0) {\n        return <SpeakerSimpleX />;\n      }\n      if (volume < 0.5) {\n        return <SpeakerLow />;\n      }\n      return <SpeakerHigh />;\n    };\n\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"medium\"\n        minHeight=\"none\"\n        className={cn('w-auto h-14 items-center gap-2', className)}\n        {...props}\n      >\n        {/* Audio element */}\n        <audio\n          ref={audioRef}\n          src={src}\n          loop={loop}\n          preload={preload}\n          onTimeUpdate={handleTimeUpdate}\n          onLoadedMetadata={handleLoadedMetadata}\n          onEnded={handleEnded}\n          data-testid=\"audio-element\"\n          aria-label={title}\n        >\n          {tracks ? (\n            tracks.map((track) => (\n              <track\n                key={track.src}\n                kind={track.kind}\n                src={track.src}\n                srcLang={track.srcLang}\n                label={track.label}\n                default={track.default}\n              />\n            ))\n          ) : (\n            <track\n              kind=\"captions\"\n              src=\"data:text/vtt;base64,\"\n              srcLang=\"pt\"\n              label=\"Sem legendas disponíveis\"\n            />\n          )}\n        </audio>\n\n        {/* Play/Pause Button */}\n        <button\n          type=\"button\"\n          onClick={handlePlayPause}\n          disabled={!src}\n          className=\"cursor-pointer text-text-950 hover:text-primary-600 disabled:text-text-400 disabled:cursor-not-allowed\"\n          aria-label={isPlaying ? 'Pausar' : 'Reproduzir'}\n        >\n          {isPlaying ? (\n            <div className=\"w-6 h-6 flex items-center justify-center\">\n              <div className=\"flex gap-0.5\">\n                <div className=\"w-1 h-4 bg-current rounded-sm\"></div>\n                <div className=\"w-1 h-4 bg-current rounded-sm\"></div>\n              </div>\n            </div>\n          ) : (\n            <Play size={24} />\n          )}\n        </button>\n\n        {/* Current Time */}\n        <p className=\"text-text-800 text-sm font-medium min-w-[2.5rem]\">\n          {formatTime(currentTime)}\n        </p>\n\n        {/* Progress Bar */}\n        <div className=\"flex-1 relative\" data-testid=\"progress-bar\">\n          <button\n            type=\"button\"\n            className=\"w-full h-2 bg-border-100 rounded-full cursor-pointer\"\n            onClick={handleProgressClick}\n            onKeyDown={(e) => {\n              if (e.key === 'Enter' || e.key === ' ') {\n                e.preventDefault();\n                handleProgressClick(\n                  e as unknown as MouseEvent<HTMLButtonElement>\n                );\n              }\n            }}\n            aria-label=\"Barra de progresso do áudio\"\n          >\n            <div\n              className=\"h-full bg-primary-600 rounded-full transition-all duration-100\"\n              style={{\n                width:\n                  duration > 0 ? `${(currentTime / duration) * 100}%` : '0%',\n              }}\n            />\n          </button>\n        </div>\n\n        {/* Duration */}\n        <p className=\"text-text-800 text-sm font-medium min-w-[2.5rem]\">\n          {formatTime(duration)}\n        </p>\n\n        {/* Volume Control */}\n        <div className=\"relative\">\n          <button\n            type=\"button\"\n            onClick={toggleVolumeControl}\n            className=\"cursor-pointer text-text-950 hover:text-primary-600\"\n            aria-label=\"Controle de volume\"\n          >\n            <div className=\"w-6 h-6 flex items-center justify-center\">\n              {getVolumeIcon()}\n            </div>\n          </button>\n\n          {showVolumeControl && (\n            <button\n              type=\"button\"\n              className=\"absolute bottom-full right-0 mb-2 p-2 bg-background border border-border-100 rounded-lg shadow-lg focus:outline-none focus:ring-2 focus:ring-primary-500\"\n              onKeyDown={(e) => {\n                if (e.key === 'Escape') {\n                  setShowVolumeControl(false);\n                }\n              }}\n            >\n              <input\n                type=\"range\"\n                min=\"0\"\n                max=\"1\"\n                step=\"0.1\"\n                value={volume}\n                onChange={handleVolumeChange}\n                onKeyDown={(e) => {\n                  if (e.key === 'ArrowUp' || e.key === 'ArrowRight') {\n                    e.preventDefault();\n                    const newVolume = Math.min(\n                      1,\n                      Math.round((volume + 0.1) * 10) / 10\n                    );\n                    setVolume(newVolume);\n                    if (audioRef.current) audioRef.current.volume = newVolume;\n                  } else if (e.key === 'ArrowDown' || e.key === 'ArrowLeft') {\n                    e.preventDefault();\n                    const newVolume = Math.max(\n                      0,\n                      Math.round((volume - 0.1) * 10) / 10\n                    );\n                    setVolume(newVolume);\n                    if (audioRef.current) audioRef.current.volume = newVolume;\n                  }\n                }}\n                className=\"w-20 h-2 bg-border-100 rounded-lg appearance-none cursor-pointer\"\n                style={{\n                  background: `linear-gradient(to right, #3b82f6 0%, #3b82f6 ${volume * 100}%, #e5e7eb ${volume * 100}%, #e5e7eb 100%)`,\n                }}\n                aria-label=\"Volume\"\n                aria-valuenow={Math.round(volume * 100)}\n                aria-valuemin={0}\n                aria-valuemax={100}\n              />\n            </button>\n          )}\n        </div>\n\n        {/* Menu Button */}\n        <DotsThreeVertical\n          size={24}\n          className=\"text-text-950 cursor-pointer hover:text-primary-600\"\n        />\n      </CardBase>\n    );\n  }\n);\n\ninterface CardSimuladoProps extends HTMLAttributes<HTMLDivElement> {\n  title: string;\n  duration?: string;\n  info: string;\n  backgroundColor: 'enem' | 'prova' | 'simuladao' | 'vestibular';\n}\n\nconst SIMULADO_BACKGROUND_CLASSES = {\n  enem: 'bg-exam-1',\n  prova: 'bg-exam-2',\n  simuladao: 'bg-exam-3',\n  vestibular: 'bg-exam-4',\n};\n\nconst CardSimulado = forwardRef<HTMLDivElement, CardSimuladoProps>(\n  ({ title, duration, info, backgroundColor, className, ...props }, ref) => {\n    const backgroundClass = SIMULADO_BACKGROUND_CLASSES[backgroundColor];\n\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"medium\"\n        minHeight=\"none\"\n        cursor=\"pointer\"\n        className={cn(\n          `${backgroundClass} hover:shadow-soft-shadow-2 transition-shadow duration-200`,\n          className\n        )}\n        {...props}\n      >\n        <div className=\"flex justify-between items-center w-full gap-4\">\n          <div className=\"flex flex-col gap-1 flex-1 min-w-0\">\n            <Text size=\"lg\" weight=\"bold\" className=\"text-text-950 truncate\">\n              {title}\n            </Text>\n\n            <div className=\"flex items-center gap-4 text-text-700\">\n              {duration && (\n                <div className=\"flex items-center gap-1\">\n                  <Clock size={16} className=\"flex-shrink-0\" />\n                  <Text size=\"sm\">{duration}</Text>\n                </div>\n              )}\n\n              <Text size=\"sm\" className=\"truncate\">\n                {info}\n              </Text>\n            </div>\n          </div>\n\n          <CaretRight\n            size={24}\n            className=\"text-text-800 flex-shrink-0\"\n            data-testid=\"caret-icon\"\n          />\n        </div>\n      </CardBase>\n    );\n  }\n);\n\ninterface CardTestProps extends Omit<HTMLAttributes<HTMLElement>, 'onSelect'> {\n  title: string;\n  duration?: string;\n  questionsCount?: number;\n  additionalInfo?: string;\n  selected?: boolean;\n  onSelect?: (selected: boolean) => void;\n}\n\nconst CardTest = forwardRef<HTMLElement, CardTestProps>(\n  (\n    {\n      title,\n      duration,\n      questionsCount,\n      additionalInfo,\n      selected = false,\n      onSelect,\n      className = '',\n      ...props\n    },\n    ref\n  ) => {\n    const handleClick = () => {\n      if (onSelect) {\n        onSelect(!selected);\n      }\n    };\n\n    const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n      if ((event.key === 'Enter' || event.key === ' ') && onSelect) {\n        event.preventDefault();\n        onSelect(!selected);\n      }\n    };\n\n    const isSelectable = !!onSelect;\n    const getQuestionsText = (count: number) => {\n      const singular = count === 1 ? 'questão' : 'questões';\n      return `${count} ${singular}`;\n    };\n\n    const displayInfo = questionsCount\n      ? getQuestionsText(questionsCount)\n      : additionalInfo || '';\n    const baseClasses =\n      'flex flex-row items-center p-4 gap-2 w-full max-w-full bg-background shadow-soft-shadow-1 rounded-xl isolate border-0 text-left';\n    const interactiveClasses = isSelectable\n      ? 'cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary-950 focus:ring-offset-2'\n      : '';\n    const selectedClasses = selected\n      ? 'ring-2 ring-primary-950 ring-offset-2'\n      : '';\n\n    if (isSelectable) {\n      return (\n        <button\n          ref={ref as Ref<HTMLButtonElement>}\n          type=\"button\"\n          className={cn(\n            `${baseClasses} ${interactiveClasses} ${selectedClasses} ${className}`.trim()\n          )}\n          onClick={handleClick}\n          onKeyDown={handleKeyDown}\n          aria-pressed={selected}\n          {...(props as HTMLAttributes<HTMLButtonElement>)}\n        >\n          <div className=\"flex flex-col justify-between gap-[27px] flex-grow min-h-[67px] w-full min-w-0\">\n            <Text\n              size=\"md\"\n              weight=\"bold\"\n              className=\"text-text-950 tracking-[0.2px] leading-[19px] truncate\"\n            >\n              {title}\n            </Text>\n\n            <div className=\"flex flex-row justify-start items-end gap-4 w-full\">\n              {duration && (\n                <div className=\"flex flex-row items-center gap-1 flex-shrink-0\">\n                  <Clock size={16} className=\"text-text-700\" />\n                  <Text\n                    size=\"sm\"\n                    className=\"text-text-700 leading-[21px] whitespace-nowrap\"\n                  >\n                    {duration}\n                  </Text>\n                </div>\n              )}\n\n              <Text\n                size=\"sm\"\n                className=\"text-text-700 leading-[21px] flex-grow truncate\"\n              >\n                {displayInfo}\n              </Text>\n            </div>\n          </div>\n        </button>\n      );\n    }\n\n    return (\n      <div\n        ref={ref as Ref<HTMLDivElement>}\n        className={cn(`${baseClasses} ${className}`.trim())}\n        {...(props as HTMLAttributes<HTMLDivElement>)}\n      >\n        <div className=\"flex flex-col justify-between gap-[27px] flex-grow min-h-[67px] w-full min-w-0\">\n          <Text\n            size=\"md\"\n            weight=\"bold\"\n            className=\"text-text-950 tracking-[0.2px] leading-[19px] truncate\"\n          >\n            {title}\n          </Text>\n\n          <div className=\"flex flex-row justify-start items-end gap-4 w-full\">\n            {duration && (\n              <div className=\"flex flex-row items-center gap-1 flex-shrink-0\">\n                <Clock size={16} className=\"text-text-700\" />\n                <Text\n                  size=\"sm\"\n                  className=\"text-text-700 leading-[21px] whitespace-nowrap\"\n                >\n                  {duration}\n                </Text>\n              </div>\n            )}\n\n            <Text\n              size=\"sm\"\n              className=\"text-text-700 leading-[21px] flex-grow truncate min-w-0\"\n            >\n              {displayInfo}\n            </Text>\n          </div>\n        </div>\n      </div>\n    );\n  }\n);\n\ninterface SimulationItem {\n  id: string;\n  title: string;\n  type: 'enem' | 'prova' | 'simulado' | 'vestibular';\n  info: string;\n}\n\ninterface SimulationHistoryData {\n  date: string;\n  simulations: SimulationItem[];\n}\n\ninterface CardSimulationHistoryProps extends HTMLAttributes<HTMLDivElement> {\n  data: SimulationHistoryData[];\n  onSimulationClick?: (simulation: SimulationItem) => void;\n}\n\nconst SIMULATION_TYPE_STYLES = {\n  enem: {\n    background: 'bg-exam-1',\n    badge: 'exam1' as const,\n    text: 'Enem',\n  },\n  prova: {\n    background: 'bg-exam-2',\n    badge: 'exam2' as const,\n    text: 'Prova',\n  },\n  simulado: {\n    background: 'bg-exam-3',\n    badge: 'exam3' as const,\n    text: 'Simulado',\n  },\n  vestibular: {\n    background: 'bg-exam-4',\n    badge: 'exam4' as const,\n    text: 'Vestibular',\n  },\n};\n\nconst CardSimulationHistory = forwardRef<\n  HTMLDivElement,\n  CardSimulationHistoryProps\n>(({ data, onSimulationClick, className, ...props }, ref) => {\n  return (\n    <div\n      ref={ref}\n      className={cn('w-full max-w-[992px] h-auto', className)}\n      {...props}\n    >\n      {/* Content */}\n      <div className=\"flex flex-col gap-0\">\n        {data.map((section, sectionIndex) => (\n          <div key={section.date} className=\"flex flex-col\">\n            {/* Seção com data */}\n            <div\n              className={cn(\n                'flex flex-row justify-center items-start px-4 py-6 gap-2 w-full bg-white',\n                sectionIndex === 0 ? 'rounded-t-3xl' : ''\n              )}\n            >\n              <Text\n                size=\"xs\"\n                weight=\"bold\"\n                className=\"text-text-800 w-11 flex-shrink-0\"\n              >\n                {section.date}\n              </Text>\n\n              <div className=\"flex flex-col gap-2 flex-1\">\n                {section.simulations.map((simulation) => {\n                  const typeStyles = SIMULATION_TYPE_STYLES[simulation.type];\n\n                  return (\n                    <CardBase\n                      key={simulation.id}\n                      layout=\"horizontal\"\n                      padding=\"medium\"\n                      minHeight=\"none\"\n                      cursor=\"pointer\"\n                      className={cn(\n                        `${typeStyles.background} rounded-xl hover:shadow-soft-shadow-2 \n                          transition-shadow duration-200 h-auto min-h-[61px]`\n                      )}\n                      onClick={() => onSimulationClick?.(simulation)}\n                    >\n                      <div className=\"flex justify-between items-center w-full gap-2\">\n                        <div className=\"flex flex-col gap-2 flex-1 min-w-0\">\n                          <Text\n                            size=\"lg\"\n                            weight=\"bold\"\n                            className=\"text-text-950 truncate\"\n                          >\n                            {simulation.title}\n                          </Text>\n\n                          <div className=\"flex items-center gap-2\">\n                            <Badge\n                              variant=\"examsOutlined\"\n                              action={typeStyles.badge}\n                              size=\"medium\"\n                            >\n                              {typeStyles.text}\n                            </Badge>\n\n                            <Text size=\"sm\" className=\"text-text-800 truncate\">\n                              {simulation.info}\n                            </Text>\n                          </div>\n                        </div>\n\n                        <CaretRight\n                          size={24}\n                          className=\"text-text-800 flex-shrink-0\"\n                          data-testid=\"caret-icon\"\n                        />\n                      </div>\n                    </CardBase>\n                  );\n                })}\n              </div>\n            </div>\n          </div>\n        ))}\n\n        {/* Footer rounded */}\n        {data.length > 0 && (\n          <div className=\"w-full h-6 bg-white rounded-b-3xl\" />\n        )}\n      </div>\n    </div>\n  );\n});\n\nexport {\n  CardBase,\n  CardActivitiesResults,\n  CardQuestions,\n  CardProgress,\n  CardTopic,\n  CardPerformance,\n  CardResults,\n  CardStatus,\n  CardSettings,\n  CardSupport,\n  CardForum,\n  CardAudio,\n  CardSimulado,\n  CardTest,\n  CardSimulationHistory,\n};\n","import { ReactNode } from 'react';\nimport Text from '../Text/Text';\nimport { cn } from '../../utils/utils';\n\n/**\n * Progress bar size variants\n */\ntype ProgressBarSize = 'small' | 'medium';\n\n/**\n * Progress bar color variants\n */\ntype ProgressBarVariant = 'blue' | 'green';\n\n/**\n * Progress bar layout variants\n */\ntype ProgressBarLayout = 'default' | 'stacked' | 'compact';\n\n/**\n * Size configurations using Tailwind classes\n */\nconst SIZE_CLASSES = {\n  small: {\n    container: 'h-1', // 4px height (h-1 = 4px in Tailwind)\n    bar: 'h-1', // 4px height for the fill bar\n    spacing: 'gap-2', // 8px gap between label and progress bar\n    layout: 'flex-col', // vertical layout for small\n    borderRadius: 'rounded-full', // 9999px border radius\n  },\n  medium: {\n    container: 'h-2', // 8px height (h-2 = 8px in Tailwind)\n    bar: 'h-2', // 8px height for the fill bar\n    spacing: 'gap-2', // 8px gap between progress bar and label\n    layout: 'flex-row items-center', // horizontal layout for medium\n    borderRadius: 'rounded-lg', // 8px border radius\n  },\n} as const;\n\n/**\n * Color configurations using design system colors\n */\nconst VARIANT_CLASSES = {\n  blue: {\n    background: 'bg-background-300', // Background track color (#D5D4D4)\n    fill: 'bg-primary-700', // Blue for activity progress (#2271C4)\n  },\n  green: {\n    background: 'bg-background-300', // Background track color (#D5D4D4)\n    fill: 'bg-success-200', // Green for performance (#84D3A2)\n  },\n} as const;\n\n/**\n * Type for size classes\n */\ntype SizeClassType = (typeof SIZE_CLASSES)[keyof typeof SIZE_CLASSES];\n\n/**\n * Type for variant classes\n */\ntype VariantClassType = (typeof VARIANT_CLASSES)[keyof typeof VARIANT_CLASSES];\n\n/**\n * Common props shared across all layout components\n */\ninterface BaseLayoutProps {\n  className: string;\n  label: ReactNode;\n  showPercentage: boolean;\n  showHitCount: boolean;\n  labelClassName: string;\n  percentageClassName: string;\n  clampedValue: number;\n  max: number;\n  percentage: number;\n  variantClasses: VariantClassType;\n}\n\n/**\n * Dimensions configuration for layouts\n */\ninterface LayoutDimensions {\n  width: string;\n  height: string;\n}\n\n/**\n * Props for StackedLayout component\n */\ninterface StackedLayoutProps extends BaseLayoutProps {\n  dimensions: LayoutDimensions;\n}\n\n/**\n * Props for CompactLayout component\n */\ninterface CompactLayoutProps extends BaseLayoutProps {\n  dimensions: LayoutDimensions;\n}\n\n/**\n * Props for DefaultLayout component\n */\ninterface DefaultLayoutProps {\n  className: string;\n  size: ProgressBarSize;\n  sizeClasses: SizeClassType;\n  variantClasses: VariantClassType;\n  label: ReactNode;\n  showPercentage: boolean;\n  labelClassName: string;\n  percentageClassName: string;\n  clampedValue: number;\n  max: number;\n  percentage: number;\n}\n\n/**\n * ProgressBar component props interface\n */\nexport type ProgressBarProps = {\n  /** Progress value between 0 and 100 */\n  value: number;\n  /** Maximum value (defaults to 100) */\n  max?: number;\n  /** Size variant of the progress bar */\n  size?: ProgressBarSize;\n  /** Color variant of the progress bar */\n  variant?: ProgressBarVariant;\n  /** Layout variant of the progress bar */\n  layout?: ProgressBarLayout;\n  /** Optional label to display */\n  label?: ReactNode;\n  /** Show percentage text */\n  showPercentage?: boolean;\n  /**\n   * Show hit count (e.g., \"28 de 30\") instead of percentage\n   *\n   * PRIORITY: When both showHitCount and showPercentage are true,\n   * showHitCount takes precedence (stacked and compact layouts only).\n   * Default layout does not support showHitCount.\n   */\n  showHitCount?: boolean;\n  /** Additional CSS classes */\n  className?: string;\n  /** Label CSS classes */\n  labelClassName?: string;\n  /** Percentage text CSS classes */\n  percentageClassName?: string;\n  /** Custom width for stacked layout (defaults to w-[380px]) */\n  stackedWidth?: string;\n  /** Custom height for stacked layout (defaults to h-[35px]) */\n  stackedHeight?: string;\n  /** Custom width for compact layout (defaults to w-[131px]) */\n  compactWidth?: string;\n  /** Custom height for compact layout (defaults to h-[24px]) */\n  compactHeight?: string;\n};\n\n/**\n * Helper function to calculate safe progress values\n */\nconst calculateProgressValues = (value: number, max: number) => {\n  const safeValue = isNaN(value) ? 0 : value;\n  const clampedValue = Math.max(0, Math.min(safeValue, max));\n  const percentage = max === 0 ? 0 : (clampedValue / max) * 100;\n\n  return { clampedValue, percentage };\n};\n\n/**\n * Helper function to determine if header content should be shown\n */\nconst shouldShowHeader = (\n  label: ReactNode,\n  showPercentage: boolean,\n  showHitCount: boolean\n): boolean => {\n  return !!(label || showPercentage || showHitCount);\n};\n\n/**\n * Centralized function to determine display priority and content\n *\n * PRIORITY ORDER (consistent across all layouts):\n * 1. showHitCount (highest priority) - displays \"X de Y\" format\n * 2. showPercentage - displays \"X%\" format\n * 3. label (lowest priority) - displays custom label\n *\n * @param showHitCount - Whether to show hit count format\n * @param showPercentage - Whether to show percentage format\n * @param label - Custom label to display\n * @param clampedValue - Current progress value\n * @param max - Maximum progress value\n * @param percentage - Calculated percentage value\n * @returns Object with content type and formatted content\n */\nconst getDisplayPriority = (\n  showHitCount: boolean,\n  showPercentage: boolean,\n  label: ReactNode,\n  clampedValue: number,\n  max: number,\n  percentage: number\n) => {\n  if (showHitCount) {\n    return {\n      type: 'hitCount' as const,\n      content: `${Math.round(clampedValue)} de ${max}`,\n      hasMetrics: true,\n    };\n  }\n\n  if (showPercentage) {\n    return {\n      type: 'percentage' as const,\n      content: `${Math.round(percentage)}%`,\n      hasMetrics: true,\n    };\n  }\n\n  return {\n    type: 'label' as const,\n    content: label,\n    hasMetrics: false,\n  };\n};\n\n/**\n * Parameters for compact layout configuration\n */\ninterface CompactLayoutConfigParams {\n  showPercentage: boolean;\n  showHitCount: boolean;\n  percentage: number;\n  clampedValue: number;\n  max: number;\n  label: ReactNode;\n  percentageClassName: string;\n  labelClassName: string;\n}\n\n/**\n * Helper function to get compact layout configuration\n *\n * PRIORITY ORDER (consistent across all layouts):\n * 1. showHitCount (highest priority) - displays \"X de Y\" format\n * 2. showPercentage - displays \"X%\" format\n * 3. label (lowest priority) - displays custom label\n *\n * When both showHitCount and showPercentage are true, showHitCount takes precedence.\n */\nconst getCompactLayoutConfig = ({\n  showPercentage,\n  showHitCount,\n  percentage,\n  clampedValue,\n  max,\n  label,\n  percentageClassName,\n  labelClassName,\n}: CompactLayoutConfigParams) => {\n  // Use centralized priority logic for consistency\n  const displayPriority = getDisplayPriority(\n    showHitCount,\n    showPercentage,\n    label,\n    clampedValue,\n    max,\n    percentage\n  );\n\n  return {\n    color: displayPriority.hasMetrics ? 'text-primary-600' : 'text-primary-700',\n    className: displayPriority.hasMetrics\n      ? percentageClassName\n      : labelClassName,\n    content: displayPriority.content,\n  };\n};\n\n/**\n * Helper function to get default layout display configuration\n *\n * PRIORITY ORDER for default layout (showHitCount is not supported):\n * 1. showPercentage (when enabled, takes precedence over label)\n * 2. label (shown only when showPercentage is false)\n *\n * Note: Default layout does not support showHitCount feature.\n */\nconst getDefaultLayoutDisplayConfig = (\n  size: ProgressBarSize,\n  label: ReactNode,\n  showPercentage: boolean\n) => ({\n  showHeader: size === 'small' && !!(label || showPercentage),\n  showPercentage: size === 'medium' && showPercentage,\n  showLabel: size === 'medium' && !!label && !showPercentage, // Only show label when percentage is not shown\n});\n\n/**\n * Helper function to render hit count or percentage display for stacked layout\n *\n * PRIORITY ORDER (consistent across all layouts):\n * 1. showHitCount (highest priority) - displays \"X de Y\" format\n * 2. showPercentage - displays \"X%\" format\n *\n * When both showHitCount and showPercentage are true, showHitCount takes precedence.\n */\nconst renderStackedHitCountDisplay = (\n  showHitCount: boolean,\n  showPercentage: boolean,\n  clampedValue: number,\n  max: number,\n  percentage: number,\n  percentageClassName: string\n): ReactNode => {\n  if (!showHitCount && !showPercentage) return null;\n\n  // Use centralized priority logic for consistency\n  const displayPriority = getDisplayPriority(\n    showHitCount,\n    showPercentage,\n    null, // label is not relevant for stacked layout metrics display\n    clampedValue,\n    max,\n    percentage\n  );\n\n  return (\n    <div\n      className={cn(\n        'text-xs font-medium leading-[14px] text-right',\n        percentageClassName\n      )}\n    >\n      {displayPriority.type === 'hitCount' ? (\n        <>\n          <span className=\"text-success-200\">{Math.round(clampedValue)}</span>\n          <span className=\"text-text-600\"> de {max}</span>\n        </>\n      ) : (\n        <Text size=\"xs\" weight=\"medium\" className=\"text-success-200\">\n          {Math.round(percentage)}%\n        </Text>\n      )}\n    </div>\n  );\n};\n\n/**\n * Base progress bar component with common rendering logic\n */\nconst ProgressBarBase = ({\n  clampedValue,\n  max,\n  percentage,\n  label,\n  variantClasses,\n  containerClassName,\n  fillClassName,\n}: {\n  clampedValue: number;\n  max: number;\n  percentage: number;\n  label: ReactNode;\n  variantClasses: VariantClassType;\n  containerClassName: string;\n  fillClassName: string;\n}) => (\n  <div\n    className={cn(\n      containerClassName,\n      variantClasses.background,\n      'overflow-hidden relative'\n    )}\n  >\n    <progress\n      value={clampedValue}\n      max={max}\n      aria-label={\n        typeof label === 'string'\n          ? `${label}: ${Math.round(percentage)}% complete`\n          : `Progress: ${Math.round(percentage)}% of ${max}`\n      }\n      className=\"absolute inset-0 w-full h-full opacity-0\"\n    />\n    <div\n      className={cn(\n        fillClassName,\n        variantClasses.fill,\n        'transition-all duration-300 ease-out'\n      )}\n      style={{ width: `${percentage}%` }}\n    />\n  </div>\n);\n\n/**\n * Stacked layout component\n */\nconst StackedLayout = ({\n  className,\n  label,\n  showPercentage,\n  showHitCount,\n  labelClassName,\n  percentageClassName,\n  clampedValue,\n  max,\n  percentage,\n  variantClasses,\n  dimensions,\n}: StackedLayoutProps) => (\n  <div\n    className={cn(\n      'flex flex-col items-start gap-2',\n      dimensions.width,\n      dimensions.height,\n      className\n    )}\n  >\n    {shouldShowHeader(label, showPercentage, showHitCount) && (\n      <div className=\"flex flex-row justify-between items-center w-full h-[19px]\">\n        {label && (\n          <Text\n            as=\"div\"\n            size=\"md\"\n            weight=\"medium\"\n            className={cn('text-text-600 leading-[19px]', labelClassName)}\n          >\n            {label}\n          </Text>\n        )}\n\n        {renderStackedHitCountDisplay(\n          showHitCount,\n          showPercentage,\n          clampedValue,\n          max,\n          percentage,\n          percentageClassName\n        )}\n      </div>\n    )}\n\n    <ProgressBarBase\n      clampedValue={clampedValue}\n      max={max}\n      percentage={percentage}\n      label={label}\n      variantClasses={variantClasses}\n      containerClassName=\"w-full h-2 rounded-lg\"\n      fillClassName=\"h-2 rounded-lg shadow-hard-shadow-3\"\n    />\n  </div>\n);\n\n/**\n * Compact layout component\n */\nconst CompactLayout = ({\n  className,\n  label,\n  showPercentage,\n  showHitCount,\n  labelClassName,\n  percentageClassName,\n  clampedValue,\n  max,\n  percentage,\n  variantClasses,\n  dimensions,\n}: CompactLayoutProps) => {\n  const {\n    color,\n    className: compactClassName,\n    content,\n  } = getCompactLayoutConfig({\n    showPercentage,\n    showHitCount,\n    percentage,\n    clampedValue,\n    max,\n    label,\n    percentageClassName,\n    labelClassName,\n  });\n\n  return (\n    <div\n      className={cn(\n        'flex flex-col items-start gap-1',\n        dimensions.width,\n        dimensions.height,\n        className\n      )}\n    >\n      {shouldShowHeader(label, showPercentage, showHitCount) && (\n        <Text\n          as=\"div\"\n          size=\"sm\"\n          weight=\"medium\"\n          color={color}\n          className={cn('leading-4 w-full', compactClassName)}\n        >\n          {content}\n        </Text>\n      )}\n\n      <ProgressBarBase\n        clampedValue={clampedValue}\n        max={max}\n        percentage={percentage}\n        label={label}\n        variantClasses={variantClasses}\n        containerClassName=\"w-full h-1 rounded-full\"\n        fillClassName=\"h-1 rounded-full\"\n      />\n    </div>\n  );\n};\n\n/**\n * Default layout component\n */\nconst DefaultLayout = ({\n  className,\n  size,\n  sizeClasses,\n  variantClasses,\n  label,\n  showPercentage,\n  labelClassName,\n  percentageClassName,\n  clampedValue,\n  max,\n  percentage,\n}: DefaultLayoutProps) => {\n  const gapClass = size === 'medium' ? 'gap-2' : sizeClasses.spacing;\n  const progressBarClass = size === 'medium' ? 'flex-grow' : 'w-full';\n  const displayConfig = getDefaultLayoutDisplayConfig(\n    size,\n    label,\n    showPercentage\n  );\n\n  return (\n    <div className={cn('flex', sizeClasses.layout, gapClass, className)}>\n      {displayConfig.showHeader && (\n        <div className=\"flex flex-row items-center justify-between w-full\">\n          {label && (\n            <Text\n              as=\"div\"\n              size=\"xs\"\n              weight=\"medium\"\n              className={cn(\n                'text-text-950 leading-none tracking-normal text-center',\n                labelClassName\n              )}\n            >\n              {label}\n            </Text>\n          )}\n\n          {showPercentage && (\n            <Text\n              size=\"xs\"\n              weight=\"medium\"\n              className={cn(\n                'text-text-950 leading-none tracking-normal text-center',\n                percentageClassName\n              )}\n            >\n              {Math.round(percentage)}%\n            </Text>\n          )}\n        </div>\n      )}\n\n      <ProgressBarBase\n        clampedValue={clampedValue}\n        max={max}\n        percentage={percentage}\n        label={label}\n        variantClasses={variantClasses}\n        containerClassName={cn(\n          progressBarClass,\n          sizeClasses.container,\n          sizeClasses.borderRadius\n        )}\n        fillClassName={cn(\n          sizeClasses.bar,\n          sizeClasses.borderRadius,\n          'shadow-hard-shadow-3'\n        )}\n      />\n\n      {displayConfig.showPercentage && (\n        <Text\n          size=\"xs\"\n          weight=\"medium\"\n          className={cn(\n            'text-text-950 leading-none tracking-normal text-center flex-none',\n            percentageClassName\n          )}\n        >\n          {Math.round(percentage)}%\n        </Text>\n      )}\n\n      {displayConfig.showLabel && (\n        <Text\n          as=\"div\"\n          size=\"xs\"\n          weight=\"medium\"\n          className={cn(\n            'text-text-950 leading-none tracking-normal text-center flex-none',\n            labelClassName\n          )}\n        >\n          {label}\n        </Text>\n      )}\n    </div>\n  );\n};\n\n/**\n * ProgressBar component for Analytica Ensino platforms\n *\n * A progress bar component with size and color variants designed for tracking\n * activity progress (blue) and performance metrics (green).\n * Uses the Analytica Ensino Design System colors from styles.css with automatic\n * light/dark mode support. Includes Text component integration for consistent typography.\n *\n * CONTENT DISPLAY PRIORITY (Consistent across all layouts):\n * 1. showHitCount (highest) - \"X de Y\" format (stacked/compact only)\n * 2. showPercentage - \"X%\" format\n * 3. label (lowest) - Custom label text\n *\n * When multiple display options are enabled, higher priority options take precedence.\n *\n * @example\n * ```tsx\n * // Basic progress bar\n * <ProgressBar value={65} />\n *\n * // Activity progress (blue)\n * <ProgressBar variant=\"blue\" value={45} label=\"Progress\" showPercentage />\n *\n * // Performance metrics (green)\n * <ProgressBar variant=\"green\" size=\"medium\" value={85} label=\"Performance\" />\n *\n * // Small size with custom max value\n * <ProgressBar size=\"small\" value={3} max={5} showPercentage />\n *\n * // Stacked layout with fixed width and hit count\n * <ProgressBar layout=\"stacked\" variant=\"green\" value={28} max={30} label=\"Fáceis\" showHitCount />\n *\n * // Compact layout for small cards\n * <ProgressBar layout=\"compact\" variant=\"blue\" value={70} label=\"Questão 08\" />\n * ```\n */\nconst ProgressBar = ({\n  value,\n  max = 100,\n  size = 'medium',\n  variant = 'blue',\n  layout = 'default',\n  label,\n  showPercentage = false,\n  showHitCount = false,\n  className = '',\n  labelClassName = '',\n  percentageClassName = '',\n  stackedWidth,\n  stackedHeight,\n  compactWidth,\n  compactHeight,\n}: ProgressBarProps) => {\n  const { clampedValue, percentage } = calculateProgressValues(value, max);\n  const sizeClasses = SIZE_CLASSES[size];\n  const variantClasses = VARIANT_CLASSES[variant];\n\n  if (layout === 'stacked') {\n    return (\n      <StackedLayout\n        className={className}\n        label={label}\n        showPercentage={showPercentage}\n        showHitCount={showHitCount}\n        labelClassName={labelClassName}\n        percentageClassName={percentageClassName}\n        clampedValue={clampedValue}\n        max={max}\n        percentage={percentage}\n        variantClasses={variantClasses}\n        dimensions={{\n          width: stackedWidth ?? 'w-[380px]',\n          height: stackedHeight ?? 'h-[35px]',\n        }}\n      />\n    );\n  }\n\n  if (layout === 'compact') {\n    return (\n      <CompactLayout\n        className={className}\n        label={label}\n        showPercentage={showPercentage}\n        showHitCount={showHitCount}\n        labelClassName={labelClassName}\n        percentageClassName={percentageClassName}\n        clampedValue={clampedValue}\n        max={max}\n        percentage={percentage}\n        variantClasses={variantClasses}\n        dimensions={{\n          width: compactWidth ?? 'w-[131px]',\n          height: compactHeight ?? 'h-[24px]',\n        }}\n      />\n    );\n  }\n\n  return (\n    <DefaultLayout\n      className={className}\n      size={size}\n      sizeClasses={sizeClasses}\n      variantClasses={variantClasses}\n      label={label}\n      showPercentage={showPercentage}\n      labelClassName={labelClassName}\n      percentageClassName={percentageClassName}\n      clampedValue={clampedValue}\n      max={max}\n      percentage={percentage}\n    />\n  );\n};\n\nexport default ProgressBar;\n","import { ReactNode } from 'react';\nimport Text from '../Text/Text';\nimport { cn } from '../../utils/utils';\n\n/**\n * Progress circle size variants\n */\ntype ProgressCircleSize = 'small' | 'medium';\n\n/**\n * Progress circle color variants\n */\ntype ProgressCircleVariant = 'blue' | 'green';\n\n/**\n * Size configurations using Tailwind classes\n */\nconst SIZE_CLASSES = {\n  small: {\n    container: 'w-[90px] h-[90px]', // 90px circle from design specs\n    strokeWidth: 4, // 4px stroke width - matches ProgressBar small (h-1)\n    textSize: '2xl', // 24px for percentage (font-size: 24px)\n    textWeight: 'medium', // font-weight: 500\n    labelSize: '2xs' as const, // Will be overridden with custom 8px in className\n    labelWeight: 'bold', // font-weight: 700\n    spacing: 'gap-0', // Reduced gap between percentage and label for better spacing\n    contentWidth: 'max-w-[50px]', // Reduced width to fit text inside circle\n  },\n  medium: {\n    container: 'w-[152px] h-[152px]', // 151.67px ≈ 152px circle from design specs\n    strokeWidth: 8, // 8px stroke width - matches ProgressBar medium (h-2)\n    textSize: '2xl', // 24px for percentage (font-size: 24px)\n    textWeight: 'medium', // font-weight: 500\n    labelSize: 'xs' as const, // 12px for status label (font-size: 12px)\n    labelWeight: 'medium', // font-weight: 500 (changed from bold)\n    spacing: 'gap-1', // 4px gap between percentage and label\n    contentWidth: 'max-w-[90px]', // Reduced width to fit text inside circle\n  },\n} as const;\n\n/**\n * Color configurations using design system colors\n */\nconst VARIANT_CLASSES = {\n  blue: {\n    background: 'stroke-primary-100', // Light blue background (#BBDCF7)\n    fill: 'stroke-primary-700', // Blue for activity progress (#2271C4)\n    textColor: 'text-primary-700', // Blue text color (#2271C4)\n    labelColor: 'text-text-700', // Gray text for label (#525252)\n  },\n  green: {\n    background: 'stroke-background-300', // Gray background (#D5D4D4 - matches design)\n    fill: 'stroke-success-200', // Green for performance (#84D3A2 - matches design)\n    textColor: 'text-text-800', // Dark gray text (#404040 - matches design)\n    labelColor: 'text-text-600', // Medium gray text for label (#737373 - matches design)\n  },\n} as const;\n\n/**\n * ProgressCircle component props interface\n */\nexport type ProgressCircleProps = {\n  /** Progress value between 0 and 100 */\n  value: number;\n  /** Maximum value (defaults to 100) */\n  max?: number;\n  /** Size variant of the progress circle */\n  size?: ProgressCircleSize;\n  /** Color variant of the progress circle */\n  variant?: ProgressCircleVariant;\n  /** Optional label to display below percentage */\n  label?: ReactNode;\n  /** Show percentage text */\n  showPercentage?: boolean;\n  /** Additional CSS classes */\n  className?: string;\n  /** Label CSS classes */\n  labelClassName?: string;\n  /** Percentage text CSS classes */\n  percentageClassName?: string;\n};\n\n/**\n * ProgressCircle component for Analytica Ensino platforms\n *\n * A circular progress indicator with size and color variants designed for tracking\n * activity progress (blue) and performance metrics (green).\n * Uses the Analytica Ensino Design System colors from styles.css with automatic\n * light/dark mode support. Includes Text component integration for consistent typography.\n *\n * @example\n * ```tsx\n * // Basic progress circle\n * <ProgressCircle value={65} />\n *\n * // Activity progress (blue)\n * <ProgressCircle variant=\"blue\" value={45} label=\"CONCLUÍDO\" showPercentage />\n *\n * // Performance metrics (green)\n * <ProgressCircle variant=\"green\" size=\"medium\" value={85} label=\"MÉDIA\" />\n *\n * // Small size with custom max value\n * <ProgressCircle size=\"small\" value={3} max={5} showPercentage />\n * ```\n */\nconst ProgressCircle = ({\n  value,\n  max = 100,\n  size = 'small',\n  variant = 'blue',\n  label,\n  showPercentage = true,\n  className = '',\n  labelClassName = '',\n  percentageClassName = '',\n}: ProgressCircleProps) => {\n  // Ensure value is within bounds and handle NaN/Infinity\n  const safeValue = isNaN(value) ? 0 : value;\n  const clampedValue = Math.max(0, Math.min(safeValue, max));\n  const percentage = max === 0 ? 0 : (clampedValue / max) * 100;\n\n  // Get size and variant classes\n  const sizeClasses = SIZE_CLASSES[size];\n  const variantClasses = VARIANT_CLASSES[variant];\n\n  // Calculate SVG dimensions and stroke properties\n  const radius = size === 'small' ? 37 : 64; // Radius calculation based on container size\n  const circumference = 2 * Math.PI * radius;\n  const strokeDashoffset = circumference - (percentage / 100) * circumference;\n  const center = size === 'small' ? 45 : 76; // Center point of SVG\n  const svgSize = size === 'small' ? 90 : 152; // SVG viewBox size\n\n  return (\n    <div\n      className={cn(\n        'relative flex flex-col items-center justify-center',\n        sizeClasses.container,\n        'rounded-lg',\n        className\n      )}\n    >\n      {/* Progress circle SVG */}\n      <svg\n        className=\"absolute inset-0 transform -rotate-90\"\n        width={svgSize}\n        height={svgSize}\n        viewBox={`0 0 ${svgSize} ${svgSize}`}\n        aria-hidden=\"true\"\n      >\n        {/* Background circle */}\n        <circle\n          cx={center}\n          cy={center}\n          r={radius}\n          fill=\"none\"\n          strokeWidth={sizeClasses.strokeWidth}\n          className={cn(variantClasses.background, 'rounded-lg')}\n        />\n        {/* Progress circle - SVG stroke properties require style for animation */}\n        <circle\n          cx={center}\n          cy={center}\n          r={radius}\n          fill=\"none\"\n          strokeWidth={sizeClasses.strokeWidth}\n          strokeLinecap=\"round\"\n          strokeDasharray={circumference}\n          strokeDashoffset={strokeDashoffset}\n          className={cn(\n            variantClasses.fill,\n            'transition-all duration-500 ease-out shadow-soft-shadow-3 rounded-lg'\n          )}\n        />\n      </svg>\n\n      {/* Native progress element for accessibility */}\n      <progress\n        value={clampedValue}\n        max={max}\n        aria-label={typeof label === 'string' ? label : 'Progress'}\n        className=\"absolute opacity-0 w-0 h-0\"\n      />\n\n      {/* Content overlay - centered content */}\n      <div\n        className={cn(\n          'relative z-10 flex flex-col items-center justify-center',\n          sizeClasses.spacing,\n          sizeClasses.contentWidth\n        )}\n      >\n        {/* Percentage text */}\n        {showPercentage && (\n          <Text\n            size={sizeClasses.textSize}\n            weight={sizeClasses.textWeight}\n            className={cn(\n              'text-center w-full',\n              variantClasses.textColor,\n              percentageClassName\n            )}\n          >\n            {Math.round(percentage)}%\n          </Text>\n        )}\n\n        {/* Label text */}\n        {label && (\n          <Text\n            as=\"span\"\n            size={sizeClasses.labelSize}\n            weight={sizeClasses.labelWeight}\n            className={cn(\n              variantClasses.labelColor,\n              'text-center uppercase tracking-wide truncate w-full',\n              labelClassName\n            )}\n          >\n            {label}\n          </Text>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default ProgressCircle;\n","import { HtmlHTMLAttributes, useEffect, useState } from 'react';\nimport CheckboxList, { CheckboxListItem } from '../CheckBox/CheckboxList';\nimport { cn } from '@/utils/utils';\nimport { CheckCircle, XCircle, Check } from 'phosphor-react';\nimport Badge from '../Badge/Badge';\n\ninterface Choice {\n  value: string;\n  label: string;\n  status?: 'correct' | 'incorrect' | 'neutral';\n  disabled?: boolean;\n}\n\ninterface MultipleChoiceListProps extends HtmlHTMLAttributes<HTMLDivElement> {\n  choices: Choice[];\n  disabled?: boolean;\n  name?: string;\n  selectedValues?: string[];\n  onHandleSelectedValues?: (values: string[]) => void;\n  mode?: 'interactive' | 'readonly';\n}\n\nconst MultipleChoiceList = ({\n  disabled = false,\n  className = '',\n  choices,\n  name,\n  selectedValues,\n  onHandleSelectedValues,\n  mode = 'interactive',\n}: MultipleChoiceListProps) => {\n  const [actualValue, setActualValue] = useState(selectedValues);\n\n  useEffect(() => {\n    setActualValue(selectedValues);\n  }, [selectedValues]);\n  const getStatusBadge = (status: Choice['status']) => {\n    switch (status) {\n      case 'correct':\n        return (\n          <Badge variant=\"solid\" action=\"success\" iconLeft={<CheckCircle />}>\n            Resposta correta\n          </Badge>\n        );\n      case 'incorrect':\n        return (\n          <Badge variant=\"solid\" action=\"error\" iconLeft={<XCircle />}>\n            Resposta incorreta\n          </Badge>\n        );\n      default:\n        return null;\n    }\n  };\n\n  const getStatusStyles = (status: Choice['status']) => {\n    switch (status) {\n      case 'correct':\n        return 'bg-success-background border-success-300';\n      case 'incorrect':\n        return 'bg-error-background border-error-300';\n      default:\n        return `bg-background border-border-100`;\n    }\n  };\n\n  const renderVisualCheckbox = (isSelected: boolean, isDisabled: boolean) => {\n    const checkboxClasses = cn(\n      'w-5 h-5 rounded border-2 cursor-default transition-all duration-200 flex items-center justify-center',\n      isSelected\n        ? 'border-primary-950 bg-primary-950 text-text'\n        : 'border-border-400 bg-background',\n      isDisabled && 'opacity-40 cursor-not-allowed'\n    );\n\n    return (\n      <div className={checkboxClasses}>\n        {isSelected && <Check size={16} weight=\"bold\" />}\n      </div>\n    );\n  };\n\n  if (mode === 'readonly') {\n    return (\n      <div className={cn('flex flex-col gap-2', className)}>\n        {choices.map((choice, i) => {\n          const isSelected = actualValue?.includes(choice.value) || false;\n          const statusStyles = getStatusStyles(choice.status);\n          const statusBadge = getStatusBadge(choice.status);\n\n          return (\n            <div\n              key={`readonly-${choice.value}-${i}`}\n              className={cn(\n                'flex flex-row justify-between gap-2 items-start p-2 rounded-lg transition-all',\n                statusStyles,\n                choice.disabled ? 'opacity-50 cursor-not-allowed' : ''\n              )}\n            >\n              <div className=\"flex items-center gap-2 flex-1\">\n                {renderVisualCheckbox(isSelected, choice.disabled || disabled)}\n                <span\n                  className={cn(\n                    'flex-1',\n                    isSelected || (choice.status && choice.status != 'neutral')\n                      ? 'text-text-950'\n                      : 'text-text-600',\n                    choice.disabled || disabled\n                      ? 'cursor-not-allowed'\n                      : 'cursor-default'\n                  )}\n                >\n                  {choice.label}\n                </span>\n              </div>\n              {statusBadge && (\n                <div className=\"flex-shrink-0\">{statusBadge}</div>\n              )}\n            </div>\n          );\n        })}\n      </div>\n    );\n  }\n  return (\n    <div\n      className={cn(\n        'flex flex-row justify-between gap-2 items-start p-2 rounded-lg transition-all',\n        disabled ? 'opacity-50 cursor-not-allowed' : '',\n        className\n      )}\n    >\n      <CheckboxList\n        name={name}\n        values={actualValue}\n        onValuesChange={(v) => {\n          setActualValue(v);\n          onHandleSelectedValues?.(v);\n        }}\n        disabled={disabled}\n      >\n        {choices.map((choice, i) => (\n          <div\n            key={`interactive-${choice.value}-${i}`}\n            className=\"flex flex-row gap-2 items-center\"\n          >\n            <CheckboxListItem\n              value={choice.value}\n              id={`interactive-${choice.value}-${i}`}\n              disabled={choice.disabled || disabled}\n            />\n\n            <label\n              htmlFor={`interactive-${choice.value}-${i}`}\n              className={cn(\n                'flex-1',\n                actualValue?.includes(choice.value)\n                  ? 'text-text-950'\n                  : 'text-text-600',\n                choice.disabled || disabled\n                  ? 'cursor-not-allowed'\n                  : 'cursor-pointer'\n              )}\n            >\n              {choice.label}\n            </label>\n          </div>\n        ))}\n      </CheckboxList>\n    </div>\n  );\n};\n\nexport { MultipleChoiceList };\n","import {\n  InputHTMLAttributes,\n  HTMLAttributes,\n  ReactNode,\n  forwardRef,\n  useId,\n  useEffect,\n  useRef,\n  Children,\n  cloneElement,\n  isValidElement,\n  ReactElement,\n} from 'react';\nimport { create, StoreApi, useStore } from 'zustand';\nimport CheckBox from './CheckBox';\nimport { cn } from '../../utils/utils';\n\n/**\n * CheckboxList size variants\n */\ntype CheckboxListSize = 'small' | 'medium' | 'large';\n\n/**\n * CheckboxList visual state\n */\ntype CheckboxListState =\n  | 'default'\n  | 'hovered'\n  | 'focused'\n  | 'invalid'\n  | 'disabled';\n\n/**\n * CheckboxList store interface\n */\ninterface CheckboxListStore {\n  values: string[];\n  setValues: (values: string[]) => void;\n  toggleValue: (value: string) => void;\n  onValuesChange?: (values: string[]) => void;\n  disabled: boolean;\n  name: string;\n}\n\ntype CheckboxListStoreApi = StoreApi<CheckboxListStore>;\n\n/**\n * Create a new CheckboxList store\n */\nconst createCheckboxListStore = (\n  name: string,\n  defaultValues: string[],\n  disabled: boolean,\n  onValuesChange?: (values: string[]) => void\n): CheckboxListStoreApi =>\n  create<CheckboxListStore>((set, get) => ({\n    values: defaultValues,\n    setValues: (values) => {\n      if (!get().disabled) {\n        set({ values });\n        get().onValuesChange?.(values);\n      }\n    },\n    toggleValue: (value) => {\n      if (!get().disabled) {\n        const currentValues = get().values;\n        const newValues = currentValues.includes(value)\n          ? currentValues.filter((v) => v !== value)\n          : [...currentValues, value];\n        set({ values: newValues });\n        get().onValuesChange?.(newValues);\n      }\n    },\n    onValuesChange,\n    disabled,\n    name,\n  }));\n\n/**\n * Hook to access CheckboxList store\n */\nexport const useCheckboxListStore = (externalStore?: CheckboxListStoreApi) => {\n  if (!externalStore) {\n    throw new Error('CheckboxListItem must be used within a CheckboxList');\n  }\n  return externalStore;\n};\n\n/**\n * Inject store into CheckboxListItem children\n */\nconst injectStore = (\n  children: ReactNode,\n  store: CheckboxListStoreApi\n): ReactNode =>\n  Children.map(children, (child) => {\n    if (!isValidElement(child)) return child;\n    const typedChild = child as ReactElement<CheckboxListItemProps>;\n    const shouldInject = typedChild.type === CheckboxListItem;\n    return cloneElement(typedChild, {\n      ...(shouldInject ? { store } : {}),\n      ...(typedChild.props.children\n        ? { children: injectStore(typedChild.props.children, store) }\n        : {}),\n    });\n  });\n\n/**\n * CheckboxList component props interface\n */\nexport type CheckboxListProps = {\n  /** Current selected values */\n  values?: string[];\n  /** Default selected values for uncontrolled usage */\n  defaultValues?: string[];\n  /** Callback when selection changes */\n  onValuesChange?: (values: string[]) => void;\n  /** Group name for all checkboxes */\n  name?: string;\n  /** Disabled state for the entire group */\n  disabled?: boolean;\n  /** Additional CSS classes */\n  className?: string;\n  /** Children components */\n  children: ReactNode;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValues'>;\n\n/**\n * CheckboxList component for flexible checkbox group composition\n *\n * Uses Zustand for state management with automatic store injection.\n * Allows complete control over layout and styling by composing with CheckboxListItem.\n *\n * @example\n * ```tsx\n * <CheckboxList defaultValues={[\"option1\"]} onValuesChange={setValues}>\n *   <div className=\"flex items-center gap-3\">\n *     <CheckboxListItem value=\"option1\" id=\"c1\" />\n *     <label htmlFor=\"c1\">Option 1</label>\n *   </div>\n *   <div className=\"flex items-center gap-3\">\n *     <CheckboxListItem value=\"option2\" id=\"c2\" />\n *     <label htmlFor=\"c2\">Option 2</label>\n *   </div>\n * </CheckboxList>\n * ```\n */\nconst CheckboxList = forwardRef<HTMLDivElement, CheckboxListProps>(\n  (\n    {\n      values: propValues,\n      defaultValues = [],\n      onValuesChange,\n      name: propName,\n      disabled = false,\n      className = '',\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    // Generate unique name if not provided\n    const generatedId = useId();\n    const name = propName || `checkbox-list-${generatedId}`;\n\n    // Create store reference\n    const storeRef = useRef<CheckboxListStoreApi>(null);\n    storeRef.current ??= createCheckboxListStore(\n      name,\n      defaultValues,\n      disabled,\n      onValuesChange\n    );\n    const store = storeRef.current;\n\n    // Get store actions\n    const { setValues } = useStore(store, (s) => s);\n\n    // Call onValuesChange with initial values\n    useEffect(() => {\n      const currentValues = store.getState().values;\n      if (currentValues.length > 0 && onValuesChange) {\n        onValuesChange(currentValues);\n      }\n    }, []);\n\n    // Handle controlled values changes\n    useEffect(() => {\n      if (propValues !== undefined) {\n        setValues(propValues);\n      }\n    }, [propValues, setValues]);\n\n    // Update disabled state\n    useEffect(() => {\n      store.setState({ disabled });\n    }, [disabled, store]);\n\n    return (\n      <div\n        ref={ref}\n        className={cn('flex flex-col gap-2 w-full', className)}\n        aria-label={name}\n        {...props}\n      >\n        {injectStore(children, store)}\n      </div>\n    );\n  }\n);\n\nCheckboxList.displayName = 'CheckboxList';\n\n/**\n * CheckboxListItem component props interface\n */\nexport type CheckboxListItemProps = {\n  /** Value for this checkbox item */\n  value: string;\n  /** Store reference (automatically injected by CheckboxList) */\n  store?: CheckboxListStoreApi;\n  /** Disabled state for this specific item */\n  disabled?: boolean;\n  /** Size variant */\n  size?: CheckboxListSize;\n  /** Visual state */\n  state?: CheckboxListState;\n  /** Additional CSS classes */\n  className?: string;\n} & Omit<\n  InputHTMLAttributes<HTMLInputElement>,\n  'type' | 'name' | 'value' | 'checked' | 'onChange' | 'size'\n>;\n\n/**\n * CheckboxListItem component for use within CheckboxList\n *\n * A checkbox without label that works within CheckboxList context.\n * Provides just the checkbox input for maximum flexibility in composition.\n *\n * @example\n * ```tsx\n * <CheckboxList defaultValues={[\"option1\"]}>\n *   <div className=\"flex items-center gap-3\">\n *     <CheckboxListItem value=\"option1\" id=\"c1\" />\n *     <label htmlFor=\"c1\">Option 1</label>\n *   </div>\n * </CheckboxList>\n * ```\n */\nconst CheckboxListItem = forwardRef<HTMLInputElement, CheckboxListItemProps>(\n  (\n    {\n      value,\n      store: externalStore,\n      disabled: itemDisabled,\n      size = 'medium',\n      state = 'default',\n      className = '',\n      id,\n      ...props\n    },\n    ref\n  ) => {\n    // Get store and state\n    const store = useCheckboxListStore(externalStore);\n    const {\n      values: groupValues,\n      toggleValue,\n      disabled: groupDisabled,\n      name,\n    } = useStore(store);\n\n    // Generate unique ID if not provided\n    const generatedId = useId();\n    const inputId = id ?? `checkbox-item-${generatedId}`;\n\n    // Determine states\n    const isChecked = groupValues.includes(value);\n    const isDisabled = groupDisabled || itemDisabled;\n    const currentState = isDisabled ? 'disabled' : state;\n\n    // Use standard CheckBox component for consistency and simplicity\n    return (\n      <CheckBox\n        ref={ref}\n        id={inputId}\n        name={name}\n        value={value}\n        checked={isChecked}\n        disabled={isDisabled}\n        size={size}\n        state={currentState}\n        className={className}\n        onChange={() => {\n          if (!isDisabled) {\n            toggleValue(value);\n          }\n        }}\n        {...props}\n      />\n    );\n  }\n);\n\nCheckboxListItem.displayName = 'CheckboxListItem';\n\nexport default CheckboxList;\nexport { CheckboxListItem };\n","import {\n  InputHTMLAttributes,\n  ReactNode,\n  forwardRef,\n  useState,\n  useId,\n  ChangeEvent,\n} from 'react';\nimport Text from '../Text/Text';\nimport { Check, Minus } from 'phosphor-react';\nimport { cn } from '../../utils/utils';\n\n/**\n * CheckBox size variants\n */\ntype CheckBoxSize = 'small' | 'medium' | 'large';\n\n/**\n * CheckBox visual state\n */\ntype CheckBoxState = 'default' | 'hovered' | 'focused' | 'invalid' | 'disabled';\n\n/**\n * Size configurations using Tailwind classes\n */\nconst SIZE_CLASSES = {\n  small: {\n    checkbox: 'w-4 h-4', // 16px x 16px\n    textSize: 'sm' as const,\n    spacing: 'gap-1.5', // 6px\n    borderWidth: 'border-2',\n    iconSize: 14, // pixels for Phosphor icons\n    labelHeight: 'h-[21px]',\n  },\n  medium: {\n    checkbox: 'w-5 h-5', // 20px x 20px\n    textSize: 'md' as const,\n    spacing: 'gap-2', // 8px\n    borderWidth: 'border-2',\n    iconSize: 16, // pixels for Phosphor icons\n    labelHeight: 'h-6',\n  },\n  large: {\n    checkbox: 'w-6 h-6', // 24px x 24px\n    textSize: 'lg' as const,\n    spacing: 'gap-2', // 8px\n    borderWidth: 'border-[3px]', // 3px border\n    iconSize: 20, // pixels for Phosphor icons\n    labelHeight: 'h-[27px]',\n  },\n} as const;\n\n/**\n * Base checkbox styling classes using design system colors\n */\nconst BASE_CHECKBOX_CLASSES =\n  'rounded border cursor-pointer transition-all duration-200 flex items-center justify-center focus:outline-none';\n\n/**\n * State-based styling classes using design system colors from styles.css\n */\nconst STATE_CLASSES = {\n  default: {\n    unchecked: 'border-border-400 bg-background hover:border-border-500',\n    checked:\n      'border-primary-950 bg-primary-950 text-text hover:border-primary-800 hover:bg-primary-800',\n  },\n  hovered: {\n    unchecked: 'border-border-500 bg-background',\n    checked: 'border-primary-800 bg-primary-800 text-text',\n  },\n  focused: {\n    unchecked:\n      'border-indicator-info bg-background ring-2 ring-indicator-info/20',\n    checked:\n      'border-indicator-info bg-primary-950 text-text ring-2 ring-indicator-info/20',\n  },\n  invalid: {\n    unchecked: 'border-error-700 bg-background hover:border-error-600',\n    checked: 'border-error-700 bg-primary-950 text-text',\n  },\n  disabled: {\n    unchecked: 'border-border-400 bg-background cursor-not-allowed opacity-40',\n    checked:\n      'border-primary-600 bg-primary-600 text-text cursor-not-allowed opacity-40',\n  },\n} as const;\n\n/**\n * CheckBox component props interface\n */\nexport type CheckBoxProps = {\n  /** Label text to display next to the checkbox */\n  label?: ReactNode;\n  /** Size variant of the checkbox */\n  size?: CheckBoxSize;\n  /** Visual state of the checkbox */\n  state?: CheckBoxState;\n  /** Indeterminate state for partial selections */\n  indeterminate?: boolean;\n  /** Error message to display */\n  errorMessage?: string;\n  /** Helper text to display */\n  helperText?: string;\n  /** Additional CSS classes */\n  className?: string;\n  /** Label CSS classes */\n  labelClassName?: string;\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>;\n\n/**\n * CheckBox component for Analytica Ensino platforms\n *\n * A checkbox component with essential states, sizes and themes.\n * Uses the Analytica Ensino Design System colors from styles.css with automatic\n * light/dark mode support. Includes Text component integration for consistent typography.\n *\n * @example\n * ```tsx\n * // Basic checkbox\n * <CheckBox label=\"Option\" />\n *\n * // Small size\n * <CheckBox size=\"small\" label=\"Small option\" />\n *\n * // Invalid state\n * <CheckBox state=\"invalid\" label=\"Required field\" />\n *\n * // Disabled state\n * <CheckBox disabled label=\"Disabled option\" />\n * ```\n */\nconst CheckBox = forwardRef<HTMLInputElement, CheckBoxProps>(\n  (\n    {\n      label,\n      size = 'medium',\n      state = 'default',\n      indeterminate = false,\n      errorMessage,\n      helperText,\n      className = '',\n      labelClassName = '',\n      checked: checkedProp,\n      disabled,\n      id,\n      onChange,\n      ...props\n    },\n    ref\n  ) => {\n    // Generate unique ID if not provided\n    const generatedId = useId();\n    const inputId = id ?? `checkbox-${generatedId}`;\n\n    // Handle controlled vs uncontrolled behavior\n    const [internalChecked, setInternalChecked] = useState(false);\n    const isControlled = checkedProp !== undefined;\n    const checked = isControlled ? checkedProp : internalChecked;\n\n    // Handle change events\n    const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n      if (!isControlled) {\n        setInternalChecked(event.target.checked);\n      }\n      onChange?.(event);\n    };\n\n    // Determine current state based on props\n    const currentState = disabled ? 'disabled' : state;\n\n    // Get size classes\n    const sizeClasses = SIZE_CLASSES[size];\n\n    // Determine checkbox visual variant\n    const checkVariant = checked || indeterminate ? 'checked' : 'unchecked';\n\n    // Get styling classes\n    const stylingClasses = STATE_CLASSES[currentState][checkVariant];\n\n    // Special border width handling for focused/hovered states and large size\n    const borderWidthClass =\n      state === 'focused' || (state === 'hovered' && size === 'large')\n        ? 'border-[3px]'\n        : sizeClasses.borderWidth;\n\n    // Get final checkbox classes\n    const checkboxClasses = cn(\n      BASE_CHECKBOX_CLASSES,\n      sizeClasses.checkbox,\n      borderWidthClass,\n      stylingClasses,\n      className\n    );\n\n    // Render appropriate icon based on state\n    const renderIcon = () => {\n      if (indeterminate) {\n        return (\n          <Minus\n            size={sizeClasses.iconSize}\n            weight=\"bold\"\n            color=\"currentColor\"\n          />\n        );\n      }\n\n      if (checked) {\n        return (\n          <Check\n            size={sizeClasses.iconSize}\n            weight=\"bold\"\n            color=\"currentColor\"\n          />\n        );\n      }\n\n      return null;\n    };\n\n    return (\n      <div className=\"flex flex-col\">\n        <div\n          className={cn(\n            'flex flex-row items-center',\n            sizeClasses.spacing,\n            disabled ? 'opacity-40' : ''\n          )}\n        >\n          {/* Hidden native input for accessibility and form submission */}\n          <input\n            ref={ref}\n            type=\"checkbox\"\n            id={inputId}\n            checked={checked}\n            disabled={disabled}\n            onChange={handleChange}\n            className=\"sr-only\"\n            {...props}\n          />\n\n          {/* Custom styled checkbox */}\n          <label htmlFor={inputId} className={checkboxClasses}>\n            {/* Show appropriate icon based on state */}\n            {renderIcon()}\n          </label>\n\n          {/* Label text */}\n          {label && (\n            <div\n              className={cn(\n                'flex flex-row items-center',\n                sizeClasses.labelHeight\n              )}\n            >\n              <Text\n                as=\"label\"\n                htmlFor={inputId}\n                size={sizeClasses.textSize}\n                weight=\"normal\"\n                className={cn(\n                  'cursor-pointer select-none leading-[150%] flex items-center font-roboto',\n                  labelClassName\n                )}\n              >\n                {label}\n              </Text>\n            </div>\n          )}\n        </div>\n\n        {/* Error message */}\n        {errorMessage && (\n          <Text\n            size=\"sm\"\n            weight=\"normal\"\n            className=\"mt-1.5\"\n            color=\"text-error-600\"\n          >\n            {errorMessage}\n          </Text>\n        )}\n\n        {/* Helper text */}\n        {helperText && !errorMessage && (\n          <Text\n            size=\"sm\"\n            weight=\"normal\"\n            className=\"mt-1.5\"\n            color=\"text-text-500\"\n          >\n            {helperText}\n          </Text>\n        )}\n      </div>\n    );\n  }\n);\n\nCheckBox.displayName = 'CheckBox';\n\nexport default CheckBox;\n"],"mappings":"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","names":["CaretRight","Clock","jsx","jsx","jsxs","SIZE_CLASSES","forwardRef","useId","useState","jsx","jsxs","useId","useState","isReadonly","value","forwardRef","jsx","jsxs","VARIANT_ACTION_CLASSES","SIZE_CLASSES","forwardRef","jsx","forwardRef","forwardRef","useEffect","useState","useRef","create","create","answer","forwardRef","useEffect","jsx","jsxs","SIZE_CLASSES","forwardRef","useEffect","useEffect","jsx","jsxs","SIZE_CLASSES","useEffect","create","useStore","useEffect","useRef","forwardRef","isValidElement","Children","cloneElement","useId","Fragment","jsx","jsxs","SIZE_CLASSES","create","Children","injectStore","isValidElement","cloneElement","useRef","useStore","useId","children","useEffect","label","forwardRef","forwardRef","Fragment","useState","useRef","Fragment","jsx","jsxs","SIZE_CLASSES","VARIANT_CLASSES","CheckCircle","XCircle","Fragment","jsx","jsxs","forwardRef","CheckCircle","XCircle","useState","useRef","jsx","jsxs","SIZE_CLASSES","VARIANT_CLASSES","useEffect","useState","forwardRef","useId","useEffect","useRef","Children","cloneElement","isValidElement","create","useStore","forwardRef","useState","useId","Check","jsx","jsxs","SIZE_CLASSES","STATE_CLASSES","forwardRef","useId","useState","Check","jsx","create","injectStore","Children","isValidElement","cloneElement","forwardRef","useId","useRef","useStore","useEffect","CheckCircle","XCircle","Check","jsx","jsxs","useState","useEffect","CheckCircle","XCircle","Check","Fragment","jsx","jsxs","forwardRef","useState","useEffect","Clock","jsx","useRef","jsxs","forwardRef","useState","Fragment","CaretRight","Clock"]}