{"version":3,"sources":["../src/components/StudentLessonProgressModal/StudentLessonProgressModal.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from 'react';\nimport {\n  MagnifyingGlassIcon,\n  XCircleIcon,\n  MedalIcon,\n  SealWarningIcon,\n} from '@phosphor-icons/react';\nimport { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';\nimport Modal from '../Modal/Modal';\nimport Text from '../Text/Text';\nimport ProgressBar from '../ProgressBar/ProgressBar';\nimport ProgressCircle from '../ProgressCircle/ProgressCircle';\nimport { CardActivitiesResults } from '../Card/Card';\nimport {\n  Skeleton,\n  SkeletonCircle,\n  SkeletonRounded,\n} from '../Skeleton/Skeleton';\nimport type {\n  StudentLessonProgressModalProps,\n  StudentLessonProgressData,\n  StudentLessonProgressLabels,\n  TopicProgressItem,\n  SubtopicProgressItem,\n  ContentProgressItem,\n} from './types';\nimport { DEFAULT_LESSON_PROGRESS_LABELS } from './types';\nimport { cn } from '../../utils/utils';\n\n/**\n * Content item accordion (deepest level - individual lessons)\n */\nconst ContentAccordionItem = ({\n  item,\n  noDataMessage,\n}: {\n  item: ContentProgressItem;\n  noDataMessage: string;\n}) => {\n  const hasNoData = item.progress === 0 && !item.isCompleted;\n\n  return (\n    <div className=\"flex items-center justify-between p-4 border-t border-border-50\">\n      <Text size=\"sm\" className=\"text-text-950\">\n        {item.content.name}\n      </Text>\n      {hasNoData ? (\n        <Text size=\"xs\" className=\"text-text-500\">\n          {noDataMessage}\n        </Text>\n      ) : (\n        <Text\n          size=\"xs\"\n          weight=\"medium\"\n          className=\"text-text-500 whitespace-nowrap\"\n        >\n          {Math.round(item.progress)}%\n        </Text>\n      )}\n    </div>\n  );\n};\n\n/**\n * Subtopic accordion item (middle level)\n */\nconst SubtopicAccordionItem = ({\n  item,\n  noDataMessage,\n}: {\n  item: SubtopicProgressItem;\n  noDataMessage: string;\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const hasChildren = item.contents && item.contents.length > 0;\n  const hasNoData = item.status === 'no_data';\n\n  return (\n    <div className=\"flex flex-col\">\n      <button\n        type=\"button\"\n        onClick={() => hasChildren && setIsExpanded(!isExpanded)}\n        disabled={!hasChildren}\n        className={cn(\n          'w-full flex items-center justify-between gap-3 p-4 text-left transition-colors duration-200',\n          'focus:outline-none focus:ring-2 focus:ring-primary-950 focus:ring-inset rounded-xl',\n          'border-t border-border-50',\n          hasChildren && 'cursor-pointer hover:bg-background-50',\n          !hasChildren && 'cursor-default'\n        )}\n        aria-expanded={hasChildren ? isExpanded : undefined}\n      >\n        <div className=\"flex items-center justify-between flex-1 min-w-0\">\n          <Text size=\"md\" weight=\"medium\" className=\"text-text-950\">\n            {item.subtopic.name}\n          </Text>\n          {!hasNoData && (\n            <Text\n              size=\"xs\"\n              weight=\"medium\"\n              className=\"text-text-500 whitespace-nowrap\"\n            >\n              {Math.round(item.progress)}%\n            </Text>\n          )}\n        </div>\n\n        {hasChildren && (\n          <CaretRightIcon\n            size={20}\n            className={cn(\n              'transition-transform duration-200 flex-shrink-0 text-text-700',\n              isExpanded ? 'rotate-90' : 'rotate-0'\n            )}\n          />\n        )}\n      </button>\n\n      {hasChildren && (\n        <div\n          data-testid={`accordion-content-subtopic-${item.subtopic.id}`}\n          data-expanded={isExpanded}\n          className={cn(\n            'transition-all duration-300 ease-in-out overflow-hidden',\n            isExpanded ? 'max-h-[2000px] opacity-100' : 'max-h-0 opacity-0'\n          )}\n        >\n          <div className=\"pl-4\">\n            {item.contents.map((content) => (\n              <ContentAccordionItem\n                key={content.content.id}\n                item={content}\n                noDataMessage={noDataMessage}\n              />\n            ))}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n\n/**\n * Topic accordion item (top level)\n */\nconst TopicAccordionItem = ({\n  item,\n  noDataMessage,\n}: {\n  item: TopicProgressItem;\n  noDataMessage: string;\n}) => {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const hasChildren = item.subtopics && item.subtopics.length > 0;\n  const hasNoData = item.status === 'no_data';\n\n  return (\n    <div className=\"flex flex-col\">\n      <button\n        type=\"button\"\n        onClick={() => hasChildren && setIsExpanded(!isExpanded)}\n        disabled={!hasChildren}\n        className={cn(\n          'w-full flex items-center justify-between gap-3 p-4 text-left transition-colors duration-200',\n          'focus:outline-none focus:ring-2 focus:ring-primary-950 focus:ring-inset rounded-xl',\n          hasChildren && 'cursor-pointer hover:bg-background-50',\n          !hasChildren && 'cursor-default'\n        )}\n        aria-expanded={hasChildren ? isExpanded : undefined}\n      >\n        <div className=\"flex flex-col gap-2 flex-1 min-w-0\">\n          <Text size=\"lg\" weight=\"bold\" className=\"text-text-950\">\n            {item.topic.name}\n          </Text>\n          {hasNoData ? (\n            <Text size=\"xs\" className=\"text-text-500\">\n              {noDataMessage}\n            </Text>\n          ) : (\n            <div className=\"flex flex-row items-center gap-2\">\n              <div className=\"flex-1\">\n                <ProgressBar\n                  value={item.progress}\n                  variant=\"green\"\n                  size=\"medium\"\n                />\n              </div>\n              <Text\n                size=\"xs\"\n                weight=\"medium\"\n                className=\"text-text-950 whitespace-nowrap\"\n              >\n                {Math.round(item.progress)}%\n              </Text>\n            </div>\n          )}\n        </div>\n\n        {hasChildren && (\n          <CaretRightIcon\n            size={20}\n            className={cn(\n              'transition-transform duration-200 flex-shrink-0 text-text-700',\n              isExpanded ? 'rotate-90' : 'rotate-0'\n            )}\n          />\n        )}\n      </button>\n\n      {hasChildren && (\n        <div\n          data-testid={`accordion-content-${item.topic.id}`}\n          data-expanded={isExpanded}\n          className={cn(\n            'transition-all duration-300 ease-in-out overflow-hidden',\n            isExpanded ? 'max-h-[2000px] opacity-100' : 'max-h-0 opacity-0'\n          )}\n        >\n          <div className=\"pl-4\">\n            {item.subtopics.map((subtopic) => (\n              <SubtopicAccordionItem\n                key={subtopic.subtopic.id}\n                item={subtopic}\n                noDataMessage={noDataMessage}\n              />\n            ))}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n\n/**\n * Loading skeleton for the modal content\n */\nconst LoadingSkeleton = () => (\n  <div data-testid=\"lesson-progress-skeleton\" className=\"flex flex-col gap-4\">\n    <Skeleton variant=\"text\" width=\"12rem\" height={24} />\n    <div className=\"flex flex-row gap-3\">\n      <SkeletonCircle width={107} height={107} />\n      <SkeletonRounded className=\"flex-1\" height={107} />\n      <SkeletonRounded className=\"flex-1\" height={107} />\n    </div>\n    <Skeleton variant=\"text\" width=\"9rem\" height={24} className=\"mt-4\" />\n    <div className=\"flex flex-col gap-2\">\n      <SkeletonRounded height={80} />\n      <SkeletonRounded height={80} />\n      <SkeletonRounded height={80} />\n    </div>\n  </div>\n);\n\n/**\n * Error state component\n */\nconst ErrorContent = ({\n  message,\n  prefix,\n}: {\n  message: string;\n  prefix?: string;\n}) => (\n  <div className=\"flex flex-col items-center justify-center py-8 gap-3\">\n    <Text\n      as=\"span\"\n      className=\"size-12 rounded-full bg-error-100 flex items-center justify-center\"\n    >\n      <XCircleIcon size={24} className=\"text-error-700\" weight=\"fill\" />\n    </Text>\n    <Text size=\"md\" className=\"text-error-700 text-center\">\n      {prefix ? `${prefix}: ${message}` : message}\n    </Text>\n  </div>\n);\n\n/**\n * Progress content when data is available\n */\nconst ProgressContent = ({\n  data,\n  labels,\n}: {\n  data: StudentLessonProgressData;\n  labels: StudentLessonProgressLabels;\n}) => (\n  <div className=\"flex flex-col gap-4\">\n    {/* Student name with search icon */}\n    <div className=\"flex items-center gap-2 pt-2\">\n      <Text\n        as=\"span\"\n        className=\"size-6 rounded-full bg-primary-100 flex items-center justify-center\"\n      >\n        <MagnifyingGlassIcon\n          size={14}\n          className=\"text-primary-800\"\n          weight=\"bold\"\n        />\n      </Text>\n      <Text size=\"md\" className=\"text-text-950\">\n        {data.name}\n      </Text>\n    </div>\n\n    {/* Stats cards row */}\n    <div className=\"grid grid-cols-3 gap-3\">\n      <div className=\"flex items-center justify-center\">\n        <ProgressCircle\n          value={data.overallCompletionRate}\n          variant=\"green\"\n          size=\"small\"\n          label={labels.completionRateLabel}\n          showPercentage\n        />\n      </div>\n\n      <CardActivitiesResults\n        icon={\n          <MedalIcon size={16} weight=\"regular\" className=\"text-text-950\" />\n        }\n        title={labels.bestResultLabel}\n        subTitle={data.bestResult || '-'}\n        header=\"\"\n        action=\"success\"\n      />\n\n      <CardActivitiesResults\n        icon={\n          <SealWarningIcon size={16} weight=\"regular\" className=\"text-white\" />\n        }\n        title={labels.biggestDifficultyLabel}\n        subTitle={data.biggestDifficulty || '-'}\n        header=\"\"\n        action=\"error\"\n      />\n    </div>\n\n    {/* Lesson progress section */}\n    {data.lessonProgress.length > 0 && (\n      <div className=\"flex flex-col gap-4 pt-4\">\n        <Text size=\"lg\" weight=\"bold\" className=\"text-text-950\">\n          {labels.lessonProgressTitle}\n        </Text>\n        <div className=\"flex flex-col gap-2\">\n          {data.lessonProgress.map((topic) => (\n            <div\n              key={topic.topic.id}\n              data-testid={`lesson-item-${topic.topic.id}`}\n              className=\"bg-background rounded-xl border border-border-50\"\n            >\n              <TopicAccordionItem\n                item={topic}\n                noDataMessage={labels.noDataMessage}\n              />\n            </div>\n          ))}\n        </div>\n      </div>\n    )}\n  </div>\n);\n\n/**\n * Renders the modal content based on loading, error, and data state\n */\nconst renderModalContent = (\n  loading: boolean,\n  error: string | null | undefined,\n  data: StudentLessonProgressData | null,\n  labels: StudentLessonProgressLabels\n): ReactNode => {\n  if (loading) {\n    return <LoadingSkeleton />;\n  }\n\n  if (error) {\n    return <ErrorContent message={error} prefix={labels.errorMessagePrefix} />;\n  }\n\n  if (data) {\n    return <ProgressContent data={data} labels={labels} />;\n  }\n\n  return null;\n};\n\n/**\n * StudentLessonProgressModal component\n *\n * Displays a modal with student lesson progress information including:\n * - Student name with profile icon\n * - Completion rate circle\n * - Best result and biggest difficulty highlight cards\n * - Expandable nested list of lesson progress by topic\n */\nexport const StudentLessonProgressModal = ({\n  isOpen,\n  onClose,\n  data,\n  loading = false,\n  error = null,\n  labels: customLabels,\n}: StudentLessonProgressModalProps) => {\n  const labels = useMemo(\n    () => ({ ...DEFAULT_LESSON_PROGRESS_LABELS, ...customLabels }),\n    [customLabels]\n  );\n\n  const content = renderModalContent(loading, error, data, labels);\n\n  if (!content) {\n    return null;\n  }\n\n  return (\n    <Modal\n      isOpen={isOpen}\n      onClose={onClose}\n      title={labels.title}\n      size=\"lg\"\n      contentClassName=\"max-h-[80vh] overflow-y-auto\"\n    >\n      {content}\n    </Modal>\n  );\n};\n\nexport default StudentLessonProgressModal;\n"],"mappings":"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","names":[]}