{"version":3,"sources":["../src/components/Card/Card.tsx"],"sourcesContent":["import {\n  forwardRef,\n  Fragment,\n  HTMLAttributes,\n  ReactNode,\n  useState,\n  useRef,\n  MouseEvent,\n  ChangeEvent,\n  KeyboardEvent,\n  Ref,\n  useEffect,\n} from 'react';\nimport Button from '../Button/Button';\nimport Badge from '../Badge/Badge';\nimport ProgressBar from '../ProgressBar/ProgressBar';\nimport { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';\nimport { ChatCircleTextIcon } from '@phosphor-icons/react/dist/csr/ChatCircleText';\nimport { CheckCircleIcon } from '@phosphor-icons/react/dist/csr/CheckCircle';\nimport { ClockIcon } from '@phosphor-icons/react/dist/csr/Clock';\nimport { DotsThreeVerticalIcon } from '@phosphor-icons/react/dist/csr/DotsThreeVertical';\nimport { PlayIcon } from '@phosphor-icons/react/dist/csr/Play';\nimport { SpeakerHighIcon } from '@phosphor-icons/react/dist/csr/SpeakerHigh';\nimport { SpeakerLowIcon } from '@phosphor-icons/react/dist/csr/SpeakerLow';\nimport { SpeakerSimpleXIcon } from '@phosphor-icons/react/dist/csr/SpeakerSimpleX';\nimport { XCircleIcon } from '@phosphor-icons/react/dist/csr/XCircle';\nimport Text from '../Text/Text';\nimport { cn } from '../../utils/utils';\nimport IconRender from '../IconRender/IconRender';\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      onClick,\n      onKeyDown,\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    // Make cards with onClick focusable and keyboard accessible\n    const isInteractive = !!onClick;\n    const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n      if (isInteractive && ['Enter', ' '].includes(e.key)) {\n        e.preventDefault();\n        (e.currentTarget as HTMLElement).click();\n      }\n      onKeyDown?.(e);\n    };\n\n    /*\n     * Note: Using div with role=\"button\" instead of native <button> element.\n     * Rationale:\n     * - Card is a complex container component with multiple child elements\n     * - Native button has layout/styling constraints incompatible with card design\n     * - Full WCAG/ARIA compliance implemented: role, tabIndex, keyboard support\n     */\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          baseClasses,\n          paddingClasses,\n          minHeightClasses,\n          layoutClasses,\n          cursorClasses,\n          className\n        )}\n        onClick={onClick}\n        onKeyDown={handleKeyDown}\n        tabIndex={isInteractive ? 0 : undefined}\n        role={isInteractive ? 'button' : undefined}\n        {...props}\n      >\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-200',\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-indicator-positive text-text-950',\n  error: 'bg-indicator-negative 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 rounded-xl',\n          extended && 'border border-border-50 bg-background',\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' | 'pending';\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 getStateConfig = () => {\n      switch (state) {\n        case 'done':\n          return {\n            label: 'Realizado',\n            buttonLabel: 'Ver Resultado',\n            badgeAction: 'success' as const,\n          };\n        case 'pending':\n          return {\n            label: 'Aguardando correção',\n            buttonLabel: 'Ver Resultado',\n            badgeAction: 'info' as const,\n          };\n        default:\n          return {\n            label: 'Não Realizado',\n            buttonLabel: 'Responder',\n            badgeAction: 'error' as const,\n          };\n      }\n    };\n\n    const { label, buttonLabel, badgeAction } = getStateConfig();\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 size=\"medium\" variant=\"solid\" action={badgeAction}>\n              {label}\n            </Badge>\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('#') ? `${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          <CaretRightIcon\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: string;\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-stretch 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-full rounded-l-xl'\n          )}\n          style={{\n            backgroundColor: color,\n          }}\n        >\n          <IconRender iconName={icon} color=\"currentColor\" size={20} />\n        </div>\n\n        <div className=\"w-full flex flex-row justify-between items-center\">\n          <div\n            className={cn(\n              'p-4 flex flex-wrap 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 flex-1\">{header}</p>\n            <span className=\"flex flex-wrap flex-row gap-1 items-center\">\n              <Badge\n                action=\"success\"\n                variant=\"solid\"\n                size=\"large\"\n                iconLeft={<CheckCircleIcon />}\n              >\n                {correct_answers} Corretas\n              </Badge>\n\n              <Badge\n                action=\"error\"\n                variant=\"solid\"\n                size=\"large\"\n                iconLeft={<XCircleIcon />}\n              >\n                {incorrect_answers} Incorretas\n              </Badge>\n            </span>\n          </div>\n\n          <CaretRightIcon className=\"min-w-6 min-h-6 text-text-800\" />\n        </div>\n      </CardBase>\n    );\n  }\n);\n\ninterface CardStatusProps extends HTMLAttributes<HTMLDivElement> {\n  header: string;\n  status?: 'correct' | 'incorrect' | 'unanswered' | 'pending';\n  label?: string;\n}\n\nconst CardStatus = forwardRef<HTMLDivElement, CardStatusProps>(\n  ({ header, className, status, label, ...props }, ref) => {\n    const getLabelBadge = (status: CardStatusProps['status']) => {\n      switch (status) {\n        case 'correct':\n          return 'Correta';\n        case 'incorrect':\n          return 'Incorreta';\n        case 'unanswered':\n          return 'Em branco';\n        case 'pending':\n          return 'Avaliação pendente';\n        default:\n          return 'Em branco';\n      }\n    };\n\n    const getIconBadge = (status: CardStatusProps['status']) => {\n      switch (status) {\n        case 'correct':\n          return <CheckCircleIcon />;\n        case 'incorrect':\n          return <XCircleIcon />;\n        case 'pending':\n          return <ClockIcon />;\n        default:\n          return <XCircleIcon />;\n      }\n    };\n\n    const getActionBadge = (status: CardStatusProps['status']) => {\n      switch (status) {\n        case 'correct':\n          return 'success';\n        case 'incorrect':\n          return 'error';\n        case 'pending':\n          return 'info';\n        default:\n          return 'info';\n      }\n    };\n\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={getActionBadge(status)}\n                variant=\"solid\"\n                size=\"medium\"\n                iconLeft={getIconBadge(status)}\n              >\n                {getLabelBadge(status)}\n              </Badge>\n            )}\n            {label && <p className=\"text-sm text-text-800\">{label}</p>}\n          </span>\n          <CaretRightIcon 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        <CaretRightIcon 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        <CaretRightIcon 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            <ChatCircleTextIcon 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 [showSpeedMenu, setShowSpeedMenu] = useState(false);\n    const [playbackRate, setPlaybackRate] = useState(1);\n    const audioRef = useRef<HTMLAudioElement>(null);\n    const volumeControlRef = useRef<HTMLDivElement>(null);\n    const speedMenuRef = useRef<HTMLDivElement>(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        // play() returns a promise that rejects (AbortError) when interrupted\n        // by a pause() before playback starts; swallow it to avoid crashing.\n        audioRef.current?.play()?.catch(() => {});\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 && Number.isFinite(newTime)) {\n        audioRef.current.currentTime = newTime;\n        setCurrentTime(newTime);\n      }\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      setShowSpeedMenu(false);\n    };\n\n    const toggleSpeedMenu = () => {\n      setShowSpeedMenu(!showSpeedMenu);\n      setShowVolumeControl(false);\n    };\n\n    const handleSpeedChange = (speed: number) => {\n      setPlaybackRate(speed);\n      if (audioRef.current) {\n        audioRef.current.playbackRate = speed;\n      }\n      setShowSpeedMenu(false);\n    };\n\n    const getVolumeIcon = () => {\n      if (volume === 0) {\n        return <SpeakerSimpleXIcon size={24} />;\n      }\n      if (volume < 0.5) {\n        return <SpeakerLowIcon size={24} />;\n      }\n      return <SpeakerHighIcon size={24} />;\n    };\n\n    useEffect(() => {\n      const handleClickOutside = (event: Event) => {\n        if (\n          volumeControlRef.current &&\n          !volumeControlRef.current.contains(event.target as Node)\n        ) {\n          setShowVolumeControl(false);\n        }\n        if (\n          speedMenuRef.current &&\n          !speedMenuRef.current.contains(event.target as Node)\n        ) {\n          setShowSpeedMenu(false);\n        }\n      };\n\n      document.addEventListener('mousedown', handleClickOutside);\n      return () => {\n        document.removeEventListener('mousedown', handleClickOutside);\n      };\n    }, []);\n\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"medium\"\n        minHeight=\"none\"\n        className={cn(\n          'flex flex-row w-auto h-14 items-center gap-2',\n          className\n        )}\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            <PlayIcon size={24} />\n          )}\n        </button>\n\n        {/* Current Time */}\n        <p className=\"text-text-800 text-md 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                e.currentTarget.click();\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-md font-medium min-w-[2.5rem]\">\n          {formatTime(duration)}\n        </p>\n\n        {/* Volume Control */}\n        <div className=\"relative h-6\" ref={volumeControlRef}>\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        <div className=\"relative h-6\" ref={speedMenuRef}>\n          <button\n            type=\"button\"\n            onClick={toggleSpeedMenu}\n            className=\"cursor-pointer text-text-950 hover:text-primary-600\"\n            aria-label=\"Opções de velocidade\"\n          >\n            <DotsThreeVerticalIcon size={24} />\n          </button>\n\n          {showSpeedMenu && (\n            <div className=\"absolute bottom-full right-0 mb-2 p-2 bg-background border border-border-100 rounded-lg shadow-lg min-w-24 z-10\">\n              <div className=\"flex flex-col gap-1\">\n                {[\n                  { speed: 1, label: '1x' },\n                  { speed: 1.5, label: '1.5x' },\n                  { speed: 2, label: '2x' },\n                ].map(({ speed, label }) => (\n                  <button\n                    key={speed}\n                    type=\"button\"\n                    onClick={() => handleSpeedChange(speed)}\n                    className={cn(\n                      'px-3 py-1 text-sm text-left rounded hover:bg-border-50 transition-colors',\n                      playbackRate === speed\n                        ? 'bg-primary-950 text-secondary-100 font-medium'\n                        : 'text-text-950'\n                    )}\n                  >\n                    {label}\n                  </button>\n                ))}\n              </div>\n            </div>\n          )}\n        </div>\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   * Renders the card in a non-interactive \"coming soon\" state: greyed out,\n   * not clickable, with an \"Em breve\" badge next to the title.\n   */\n  comingSoon?: boolean;\n  /** Disables interaction (greyed out, not clickable) without a badge. */\n  disabled?: boolean;\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  (\n    {\n      title,\n      duration,\n      info,\n      backgroundColor,\n      comingSoon = false,\n      disabled = false,\n      className,\n      onClick,\n      onKeyDown,\n      ...props\n    },\n    ref\n  ) => {\n    const backgroundClass = SIMULADO_BACKGROUND_CLASSES[backgroundColor];\n    const isInteractive = !comingSoon && !disabled;\n\n    return (\n      <CardBase\n        ref={ref}\n        layout=\"horizontal\"\n        padding=\"medium\"\n        minHeight=\"none\"\n        cursor={isInteractive ? 'pointer' : 'default'}\n        aria-disabled={isInteractive ? undefined : true}\n        // Only forward handlers when interactive: CardBase derives tabIndex,\n        // role=\"button\" and Enter/Space activation from the presence of onClick,\n        // so a disabled/coming-soon card must not receive them.\n        onClick={isInteractive ? onClick : undefined}\n        onKeyDown={isInteractive ? onKeyDown : undefined}\n        className={cn(\n          backgroundClass,\n          isInteractive\n            ? 'hover:shadow-soft-shadow-2 transition-shadow duration-200'\n            : 'opacity-60 pointer-events-none',\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            {comingSoon ? (\n              <div className=\"flex items-center gap-2 min-w-0\">\n                <Text\n                  size=\"lg\"\n                  weight=\"bold\"\n                  className=\"text-text-950 truncate\"\n                >\n                  {title}\n                </Text>\n                <Badge\n                  size=\"small\"\n                  variant=\"solid\"\n                  action=\"info\"\n                  className=\"flex-shrink-0\"\n                  data-testid=\"badge-em-breve\"\n                >\n                  Em breve\n                </Badge>\n              </div>\n            ) : (\n              <Text size=\"lg\" weight=\"bold\" className=\"text-text-950 truncate\">\n                {title}\n              </Text>\n            )}\n\n            <div className=\"flex items-center gap-4 text-text-700\">\n              {duration && (\n                <div className=\"flex items-center gap-1\">\n                  <ClockIcon 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          {isInteractive && (\n            <CaretRightIcon\n              size={24}\n              className=\"text-text-800 flex-shrink-0\"\n              data-testid=\"caret-icon\"\n            />\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                  <ClockIcon 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                <ClockIcon 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   * Optional status badge (e.g. \"Em andamento\" / \"Concluído\"). When provided it\n   * is rendered next to the type badge. `action` maps to the Badge color action.\n   */\n  statusBadge?: {\n    label: string;\n    action: 'success' | 'warning' | 'info' | 'error';\n  };\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: 'Simuladão',\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-background',\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-wrap flex-col justify-between sm:flex-row 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                            {simulation.statusBadge && (\n                              <Badge\n                                variant=\"outlined\"\n                                action={simulation.statusBadge.action}\n                                size=\"medium\"\n                              >\n                                {simulation.statusBadge.label}\n                              </Badge>\n                            )}\n\n                            <Text size=\"sm\" className=\"text-text-800 truncate\">\n                              {simulation.info}\n                            </Text>\n                          </div>\n                        </div>\n\n                        <CaretRightIcon\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-background rounded-b-3xl\" />\n        )}\n      </div>\n    </div>\n  );\n});\n\n// ======================================================================\n// CardEssayHistory — histórico de redações agrupado por data\n// ======================================================================\n\nexport enum EssayStatus {\n  DRAFT = 'DRAFT',\n  SUBMITTED = 'SUBMITTED',\n  CORRECTING = 'CORRECTING',\n  CORRECTED = 'CORRECTED',\n  ERROR = 'ERROR',\n}\n\nexport enum EssayReviewStatus {\n  PENDING = 'PENDING',\n  APPROVED = 'APPROVED',\n  MODIFIED = 'MODIFIED',\n}\n\nexport interface EssayHistoryItem {\n  id: string;\n  /** Título exibido. Se null/undefined, o componente cai no `fallbackTitle` */\n  title: string | null;\n  /** Título fallback (ex: título do tema) quando `title` está vazio */\n  fallbackTitle?: string;\n  status: EssayStatus;\n  /** Nota total (0..maxScore). null quando ainda não pontuou */\n  totalScore: number | null;\n  /** Status da revisão do professor */\n  reviewStatus?: EssayReviewStatus | null;\n}\n\nexport interface EssayHistoryData {\n  /** Label da data do grupo (ex: \"12 Fev\") */\n  date: string;\n  essays: EssayHistoryItem[];\n}\n\ninterface CardEssayHistoryProps extends HTMLAttributes<HTMLDivElement> {\n  data: EssayHistoryData[];\n  /** Nota máxima pra compor o label \"X de {maxScore}\". Default: 1000 */\n  maxScore?: number;\n  /** Callback ao clicar num item clicável (CORRECTED com score, ou ERROR) */\n  onEssayClick?: (essay: EssayHistoryItem) => void;\n}\n\ntype EssayVisualState = {\n  background: string;\n  text: string;\n  clickable: boolean;\n};\n\nconst resolveEssayVisualState = (\n  essay: EssayHistoryItem,\n  maxScore: number\n): EssayVisualState => {\n  // If essay has a score, show it (regardless of status - covers professor review cases)\n  if (essay.totalScore != null) {\n    return {\n      background: 'bg-subject-12',\n      text: `${essay.totalScore} de ${maxScore}`,\n      clickable: true,\n    };\n  }\n  if (essay.status === EssayStatus.ERROR) {\n    return {\n      background: 'bg-tertiary-100',\n      text: 'Erro na correção',\n      clickable: true,\n    };\n  }\n  if (\n    essay.status === EssayStatus.CORRECTING ||\n    essay.status === EssayStatus.SUBMITTED\n  ) {\n    return {\n      background: 'bg-secondary-200',\n      text: 'Gerando resultado...',\n      clickable: false,\n    };\n  }\n  if (essay.status === EssayStatus.DRAFT) {\n    return {\n      background: 'bg-secondary-200',\n      text: 'Rascunho',\n      clickable: false,\n    };\n  }\n  return {\n    background: 'bg-secondary-200',\n    text: 'Sem nota ainda',\n    clickable: false,\n  };\n};\n\ntype ReviewBadgeConfig = {\n  label: string;\n  action: 'success' | 'info';\n} | null;\n\nconst resolveReviewBadge = (essay: EssayHistoryItem): ReviewBadgeConfig => {\n  if (\n    essay.reviewStatus === EssayReviewStatus.APPROVED ||\n    essay.reviewStatus === EssayReviewStatus.MODIFIED\n  ) {\n    return { label: 'Revisado', action: 'success' };\n  }\n\n  if (\n    essay.status === EssayStatus.CORRECTED &&\n    essay.reviewStatus === EssayReviewStatus.PENDING\n  ) {\n    return { label: 'Corrigido por IA', action: 'info' };\n  }\n\n  return null;\n};\n\nconst CardEssayHistory = forwardRef<HTMLDivElement, CardEssayHistoryProps>(\n  ({ data, maxScore = 1000, onEssayClick, className, ...props }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={cn('w-full max-w-248 bg-background rounded-3xl', className)}\n        {...props}\n      >\n        <div className=\"flex flex-col\">\n          {data.map((section, sectionIndex) => (\n            <div\n              key={`${section.date}-${sectionIndex}`}\n              className=\"flex flex-row items-start px-4 py-6 gap-2 w-full\"\n            >\n              <Text\n                size=\"xs\"\n                weight=\"bold\"\n                className=\"text-text-800 w-11 shrink-0 pt-3\"\n              >\n                {section.date}\n              </Text>\n\n              <div className=\"flex flex-col gap-2 flex-1 min-w-0\">\n                {section.essays.map((essay) => {\n                  const visual = resolveEssayVisualState(essay, maxScore);\n                  const isClickable = visual.clickable && !!onEssayClick;\n                  const label =\n                    essay.title ?? essay.fallbackTitle ?? 'Sem título';\n                  const reviewBadge = resolveReviewBadge(essay);\n\n                  return (\n                    <button\n                      key={essay.id}\n                      type=\"button\"\n                      disabled={!isClickable}\n                      onClick={() => isClickable && onEssayClick?.(essay)}\n                      aria-label={`${label} — ${visual.text}`}\n                      className={cn(\n                        visual.background,\n                        'rounded-xl p-4 flex flex-row items-center justify-between gap-2 w-full transition-shadow duration-200',\n                        isClickable\n                          ? 'cursor-pointer hover:shadow-soft-shadow-2'\n                          : 'cursor-default'\n                      )}\n                    >\n                      <Text\n                        size=\"md\"\n                        weight=\"bold\"\n                        className=\"text-text-950 truncate text-left\"\n                      >\n                        {label}\n                      </Text>\n\n                      <div className=\"flex items-center gap-2 shrink-0\">\n                        {reviewBadge && (\n                          <Badge\n                            variant=\"solid\"\n                            action={reviewBadge.action}\n                            size=\"small\"\n                          >\n                            {reviewBadge.label}\n                          </Badge>\n                        )}\n                        <Text\n                          size=\"sm\"\n                          className=\"text-text-800 whitespace-nowrap\"\n                        >\n                          {visual.text}\n                        </Text>\n                        {isClickable && (\n                          <CaretRightIcon\n                            size={20}\n                            className=\"text-text-800 shrink-0\"\n                          />\n                        )}\n                      </div>\n                    </button>\n                  );\n                })}\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n    );\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  CardEssayHistory,\n};\n"],"mappings":"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","names":["Fragment","status","EssayStatus","EssayReviewStatus"]}