{"version":3,"sources":["../src/components/ComparatorChart/ComparatorView.tsx","../src/components/ComparatorChart/ComparatorEmptyState.tsx","../src/components/ComparatorChart/ComparatorLoadingState.tsx","../src/components/ComparatorChart/ComparatorSelectTypeStep.tsx","../src/components/ComparatorChart/ComparatorSelectItemsStep.tsx","../src/components/ComparatorChart/Legend.tsx","../src/components/ComparatorChart/PercentageScale.tsx","../src/components/ComparatorChart/ChartArea.tsx","../src/components/ComparatorChart/BarChartRow.tsx","../src/components/ComparatorChart/KnowledgeAreasContent.tsx","../src/components/ComparatorChart/CurricularComponentsContent.tsx","../src/components/ComparatorChart/CompetenciesContent.tsx","../src/components/ComparatorChart/NationalAverageCard.tsx","../src/components/ComparatorChart/NationalAveragesContent.tsx","../src/components/ComparatorChart/ComparatorTabContent.tsx"],"sourcesContent":["import { useState, useMemo, useCallback, useEffect, useRef } from 'react';\nimport { CaretLeftIcon } from '@phosphor-icons/react/dist/csr/CaretLeft';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport Modal from '../Modal/Modal';\nimport type { SearchSelectOption } from '../SearchSelect/SearchSelect';\nimport { ComparatorEmptyState } from './ComparatorEmptyState';\nimport { ComparatorLoadingState } from './ComparatorLoadingState';\nimport { ComparatorSelectTypeStep } from './ComparatorSelectTypeStep';\nimport { ComparatorSelectItemsStep } from './ComparatorSelectItemsStep';\nimport { ComparatorTabContent } from './ComparatorTabContent';\nimport {\n  ComparatorTabValue,\n  DEFAULT_COMPARATOR_LABELS,\n  DEFAULT_COMPARATOR_TABS,\n  type ComparisonType,\n  type ComparatorTabType,\n  type ComparatorStoreState,\n  type UseComparatorReturn,\n  type ComparatorLabels,\n  type ComparatorTab,\n} from '../../types/comparator';\n\nexport interface ComparatorViewProps {\n  // Data sources\n  readonly schools: SearchSelectOption[];\n  readonly schoolYears: SearchSelectOption[];\n\n  // Store hooks (injected)\n  readonly useComparatorStore: () => ComparatorStoreState;\n  readonly useComparator: () => UseComparatorReturn;\n\n  // Navigation\n  readonly onBack?: () => void;\n\n  // Tab management\n  readonly activeTab?: ComparatorTabType;\n  readonly onTabChange?: (tab: ComparatorTabType) => void;\n  readonly tabs?: ComparatorTab[];\n\n  // Customization\n  readonly labels?: Partial<ComparatorLabels>;\n  readonly isUserLoading?: boolean;\n\n  // Callbacks\n  readonly onFetchUserData?: (force?: boolean) => void;\n}\n\nexport function ComparatorView({\n  schools,\n  schoolYears,\n  useComparatorStore,\n  useComparator,\n  onBack,\n  activeTab: externalActiveTab,\n  onTabChange,\n  tabs = DEFAULT_COMPARATOR_TABS,\n  labels: customLabels,\n  isUserLoading = false,\n  onFetchUserData,\n}: ComparatorViewProps) {\n  const labels = useMemo(\n    () => ({ ...DEFAULT_COMPARATOR_LABELS, ...customLabels }),\n    [customLabels]\n  );\n\n  // Store state\n  const {\n    comparisonType,\n    selectedItems,\n    setComparisonType,\n    addItem,\n    removeItem,\n    clearSelection,\n  } = useComparatorStore();\n\n  // Data hook\n  const { data, loading, fetchData } = useComparator();\n\n  // Local UI state\n  const [isModalOpen, setIsModalOpen] = useState(false);\n  const [modalStep, setModalStep] = useState<1 | 2>(1);\n  const [internalActiveTab, setInternalActiveTab] = useState<ComparatorTabType>(\n    ComparatorTabValue.KNOWLEDGE_AREAS\n  );\n  const hasInitializedRef = useRef(false);\n\n  // Use external tab if provided, otherwise internal\n  const activeTab = externalActiveTab ?? internalActiveTab;\n\n  // Determine comparison availability\n  const canCompareSchools = schools.length > 1;\n  const canCompareSchoolYears = schoolYears.length > 1;\n  const hasAnyComparisonOption = canCompareSchools || canCompareSchoolYears;\n\n  // Fetch user data on mount\n  useEffect(() => {\n    onFetchUserData?.(true);\n  }, [onFetchUserData]);\n\n  // Load comparison data on mount if there are persisted selections\n  useEffect(() => {\n    if (hasInitializedRef.current) return;\n    if (selectedItems.length > 0 && comparisonType) {\n      hasInitializedRef.current = true;\n      fetchData(\n        selectedItems.map((i) => i.id),\n        comparisonType,\n        activeTab\n      );\n    }\n  }, [selectedItems, comparisonType, activeTab, fetchData]);\n\n  // Options based on comparison type\n  const options = useMemo((): SearchSelectOption[] => {\n    if (comparisonType === 'school') return schools;\n    if (comparisonType === 'schoolYear') return schoolYears;\n    return [];\n  }, [comparisonType, schools, schoolYears]);\n\n  // Filter out already selected items\n  const availableOptions = useMemo(() => {\n    return options.filter(\n      (opt) => !selectedItems.some((item) => item.id === opt.value)\n    );\n  }, [options, selectedItems]);\n\n  // Handlers\n  const handleTabChange = useCallback(\n    (tab: ComparatorTabType) => {\n      if (onTabChange) {\n        onTabChange(tab);\n      } else {\n        setInternalActiveTab(tab);\n      }\n\n      if (selectedItems.length > 0 && comparisonType) {\n        fetchData(\n          selectedItems.map((i) => i.id),\n          comparisonType,\n          tab\n        );\n      }\n    },\n    [selectedItems, comparisonType, onTabChange, fetchData]\n  );\n\n  const handleOpenModal = useCallback(() => {\n    if (comparisonType) {\n      setModalStep(2);\n      setIsModalOpen(true);\n      return;\n    }\n\n    if (canCompareSchools && !canCompareSchoolYears) {\n      setComparisonType('school');\n      setModalStep(2);\n    } else if (canCompareSchoolYears && !canCompareSchools) {\n      setComparisonType('schoolYear');\n      setModalStep(2);\n    } else {\n      setModalStep(1);\n    }\n    setIsModalOpen(true);\n  }, [\n    comparisonType,\n    canCompareSchools,\n    canCompareSchoolYears,\n    setComparisonType,\n  ]);\n\n  const handleSelectType = useCallback(\n    (type: ComparisonType) => {\n      clearSelection();\n      setComparisonType(type);\n      setModalStep(2);\n    },\n    [clearSelection, setComparisonType]\n  );\n\n  const handleSelectItem = useCallback(\n    (value: string) => {\n      if (selectedItems.length >= 5) return;\n\n      const option = options.find((opt) => opt.value === value);\n      if (!option) return;\n\n      addItem({\n        id: option.value,\n        name: option.label,\n        color: '',\n      });\n    },\n    [options, selectedItems.length, addItem]\n  );\n\n  const handleRemoveItem = useCallback(\n    (itemId: string) => {\n      removeItem(itemId);\n    },\n    [removeItem]\n  );\n\n  const handleConfirmSelection = useCallback(() => {\n    setIsModalOpen(false);\n    if (selectedItems.length > 0 && comparisonType) {\n      fetchData(\n        selectedItems.map((i) => i.id),\n        comparisonType,\n        activeTab\n      );\n    }\n  }, [selectedItems, comparisonType, activeTab, fetchData]);\n\n  const handleCloseModal = useCallback(() => {\n    setIsModalOpen(false);\n  }, []);\n\n  const handleChangeType = useCallback(() => {\n    setModalStep(1);\n    clearSelection();\n  }, [clearSelection]);\n\n  // Get button text\n  const buttonText = useMemo(() => {\n    if (selectedItems.length > 0) {\n      return comparisonType === 'school'\n        ? labels.selectSchools\n        : labels.selectSchoolYears;\n    }\n    if (canCompareSchools && canCompareSchoolYears) {\n      return labels.selectComparison;\n    }\n    return canCompareSchools ? labels.selectSchools : labels.selectSchoolYears;\n  }, [\n    selectedItems.length,\n    comparisonType,\n    canCompareSchools,\n    canCompareSchoolYears,\n    labels,\n  ]);\n\n  const renderMainContent = () => {\n    if (selectedItems.length === 0) {\n      return (\n        <ComparatorEmptyState\n          onSelectClick={handleOpenModal}\n          canCompareSchools={canCompareSchools}\n          canCompareSchoolYears={canCompareSchoolYears}\n          isLoading={isUserLoading}\n          labels={labels}\n        />\n      );\n    }\n\n    if (loading) {\n      return <ComparatorLoadingState />;\n    }\n\n    return (\n      <ComparatorTabContent\n        activeTab={activeTab}\n        data={data}\n        selectedItems={selectedItems}\n        labels={labels}\n      />\n    );\n  };\n\n  return (\n    <div className=\"h-screen bg-background flex flex-col\">\n      {/* Header */}\n      <header className=\"flex items-center justify-between px-6 py-4 border-b border-border-100 bg-secondary-50\">\n        {onBack ? (\n          <Button\n            variant=\"raw\"\n            onClick={onBack}\n            className=\"flex items-center gap-2 text-text-950 hover:text-text-700 transition-colors\"\n          >\n            <CaretLeftIcon size={20} weight=\"bold\" />\n            <Text size=\"lg\" weight=\"semibold\">\n              {labels.title}\n            </Text>\n          </Button>\n        ) : (\n          <div className=\"flex items-center gap-2 text-text-950\">\n            <Text size=\"lg\" weight=\"semibold\">\n              {labels.title}\n            </Text>\n          </div>\n        )}\n        <Button\n          variant=\"solid\"\n          action=\"primary\"\n          size=\"medium\"\n          onClick={handleOpenModal}\n          disabled={!hasAnyComparisonOption || isUserLoading}\n        >\n          {buttonText}\n        </Button>\n      </header>\n\n      {/* Tabs */}\n      <div className=\"flex gap-2 px-6 py-4 border-b border-border-100 bg-secondary-50\">\n        {tabs.map((tab) => (\n          <Button\n            variant=\"raw\"\n            key={tab.value}\n            onClick={() => handleTabChange(tab.value)}\n            className={`px-4 py-2 text-sm font-medium transition-colors ${\n              activeTab === tab.value\n                ? 'text-primary-700 border-b-2 border-primary-600'\n                : 'text-text-500 hover:text-text-700'\n            }`}\n          >\n            {tab.label}\n          </Button>\n        ))}\n      </div>\n\n      {/* Content */}\n      <main className=\"flex-1 overflow-auto p-6\">{renderMainContent()}</main>\n\n      {/* Selection Modal */}\n      <Modal\n        isOpen={isModalOpen}\n        onClose={handleCloseModal}\n        title={labels.filters}\n        size=\"md\"\n        footer={\n          modalStep === 2 ? (\n            <div className=\"flex justify-end gap-3 w-full\">\n              <Button variant=\"outline\" onClick={handleChangeType}>\n                {labels.back}\n              </Button>\n              <Button\n                variant=\"solid\"\n                action=\"primary\"\n                onClick={handleConfirmSelection}\n                disabled={selectedItems.length === 0}\n              >\n                {labels.confirm} ({selectedItems.length}/5)\n              </Button>\n            </div>\n          ) : undefined\n        }\n      >\n        {modalStep === 1 ? (\n          <ComparatorSelectTypeStep\n            onSelectType={handleSelectType}\n            canCompareSchools={canCompareSchools}\n            canCompareSchoolYears={canCompareSchoolYears}\n            labels={labels}\n          />\n        ) : (\n          <ComparatorSelectItemsStep\n            options={availableOptions}\n            selectedItems={selectedItems}\n            onSelectItem={handleSelectItem}\n            onRemoveItem={handleRemoveItem}\n            comparisonType={comparisonType!}\n            labels={labels}\n          />\n        )}\n      </Modal>\n    </div>\n  );\n}\n","import { PlusIcon } from '@phosphor-icons/react/dist/csr/Plus';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport type { ComparatorLabels } from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface ComparatorEmptyStateProps {\n  readonly onSelectClick: () => void;\n  readonly canCompareSchools: boolean;\n  readonly canCompareSchoolYears: boolean;\n  readonly isLoading?: boolean;\n  readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorEmptyState({\n  onSelectClick,\n  canCompareSchools,\n  canCompareSchoolYears,\n  isLoading = false,\n  labels: customLabels,\n}: ComparatorEmptyStateProps) {\n  const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n  const hasAnyOption = canCompareSchools || canCompareSchoolYears;\n\n  const getButtonText = (): string => {\n    if (canCompareSchools && canCompareSchoolYears) {\n      return labels.selectComparison;\n    }\n    if (canCompareSchools) {\n      return labels.selectSchools;\n    }\n    return labels.selectSchoolYears;\n  };\n\n  const getDescriptionText = (): string => {\n    if (canCompareSchools && canCompareSchoolYears) {\n      return labels.emptyStateDescriptionBoth;\n    }\n    if (canCompareSchools) {\n      return labels.emptyStateDescriptionSchools;\n    }\n    if (canCompareSchoolYears) {\n      return labels.emptyStateDescriptionSchoolYears;\n    }\n    return labels.noAccessMessage;\n  };\n\n  const buttonText = getButtonText();\n  const descriptionText = getDescriptionText();\n\n  return (\n    <div className=\"flex flex-col items-center justify-center h-full gap-6\">\n      <div className=\"w-24 h-24 rounded-full bg-primary-100 flex items-center justify-center\">\n        <svg\n          className=\"w-12 h-12 text-primary-600\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          viewBox=\"0 0 24 24\"\n        >\n          <path\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeWidth={2}\n            d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\"\n          />\n        </svg>\n      </div>\n      <div className=\"text-center\">\n        <Text size=\"lg\" weight=\"semibold\" className=\"text-text-950 mb-2\">\n          {labels.title}\n        </Text>\n        <Text size=\"sm\" className=\"text-text-500\">\n          {descriptionText}\n        </Text>\n      </div>\n      {hasAnyOption && (\n        <Button\n          variant=\"outline\"\n          action=\"primary\"\n          size=\"medium\"\n          onClick={onSelectClick}\n          disabled={isLoading}\n        >\n          <PlusIcon size={18} />\n          {buttonText}\n        </Button>\n      )}\n    </div>\n  );\n}\n","import { SkeletonCard } from '../Skeleton/Skeleton';\n\nexport function ComparatorLoadingState() {\n  return (\n    <div\n      className=\"flex flex-col gap-6\"\n      data-testid=\"comparator-loading-skeleton\"\n    >\n      <SkeletonCard className=\"h-12 w-full\" />\n      <SkeletonCard className=\"h-64 w-full\" />\n      <SkeletonCard className=\"h-64 w-full\" />\n    </div>\n  );\n}\n","import Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport type { ComparisonType, ComparatorLabels } from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface ComparatorSelectTypeStepProps {\n  readonly onSelectType: (type: ComparisonType) => void;\n  readonly canCompareSchools: boolean;\n  readonly canCompareSchoolYears: boolean;\n  readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorSelectTypeStep({\n  onSelectType,\n  canCompareSchools,\n  canCompareSchoolYears,\n  labels: customLabels,\n}: ComparatorSelectTypeStepProps) {\n  const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n\n  if (!canCompareSchools && !canCompareSchoolYears) {\n    return (\n      <div className=\"flex flex-col gap-4\">\n        <Text size=\"sm\" className=\"text-text-600\">\n          {labels.noAccessMessage}\n        </Text>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"flex flex-col gap-4\">\n      <Text size=\"sm\" className=\"text-text-600\">\n        {labels.selectComparisonType}\n      </Text>\n      <div className=\"flex gap-4\">\n        {canCompareSchools && (\n          <Button\n            variant=\"raw\"\n            onClick={() => onSelectType('school')}\n            className=\"flex-1 p-4 border border-border-200 rounded-xl hover:border-primary-500 hover:bg-primary-50 transition-colors text-left\"\n          >\n            <Text size=\"md\" weight=\"semibold\" className=\"text-text-950\">\n              {labels.schools}\n            </Text>\n            <Text size=\"sm\" className=\"text-text-500\">\n              {labels.compareSchoolsDescription}\n            </Text>\n          </Button>\n        )}\n        {canCompareSchoolYears && (\n          <Button\n            variant=\"raw\"\n            onClick={() => onSelectType('schoolYear')}\n            className=\"flex-1 p-4 border border-border-200 rounded-xl hover:border-primary-500 hover:bg-primary-50 transition-colors text-left\"\n          >\n            <Text size=\"md\" weight=\"semibold\" className=\"text-text-950\">\n              {labels.schoolYears}\n            </Text>\n            <Text size=\"sm\" className=\"text-text-500\">\n              {labels.compareSchoolYearsDescription}\n            </Text>\n          </Button>\n        )}\n      </div>\n    </div>\n  );\n}\n","import { XIcon } from '@phosphor-icons/react/dist/csr/X';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport Badge from '../Badge/Badge';\nimport SearchSelect from '../SearchSelect/SearchSelect';\nimport type { SearchSelectOption } from '../SearchSelect/SearchSelect';\nimport type {\n  ComparisonType,\n  ComparisonItem,\n  ComparatorLabels,\n} from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface ComparatorSelectItemsStepProps {\n  readonly options: SearchSelectOption[];\n  readonly selectedItems: ComparisonItem[];\n  readonly onSelectItem: (value: string) => void;\n  readonly onRemoveItem: (itemId: string) => void;\n  readonly comparisonType: ComparisonType;\n  readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorSelectItemsStep({\n  options,\n  selectedItems,\n  onSelectItem,\n  onRemoveItem,\n  comparisonType,\n  labels: customLabels,\n}: ComparatorSelectItemsStepProps) {\n  const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n  const isMaxReached = selectedItems.length >= 5;\n  const placeholder =\n    comparisonType === 'school' ? labels.schools : labels.schoolYears;\n  const itemTypeName =\n    comparisonType === 'school'\n      ? labels.schools.toLowerCase()\n      : labels.schoolYears.toLowerCase();\n  const singularItemTypeName =\n    comparisonType === 'school' ? labels.school : labels.schoolYear;\n\n  return (\n    <div className=\"flex flex-col gap-4\">\n      <Text size=\"sm\" className=\"text-text-600\">\n        {labels.selectItemInstruction.replace('{item}', singularItemTypeName)}\n      </Text>\n\n      <SearchSelect\n        options={options}\n        placeholder={placeholder}\n        searchPlaceholder={`${labels.search} ${placeholder.toLowerCase()}...`}\n        onValueChange={onSelectItem}\n        disabled={isMaxReached}\n        emptyText=\"Nenhum resultado encontrado\"\n        size=\"medium\"\n        variant=\"outlined\"\n      />\n\n      {selectedItems.length > 0 && (\n        <div className=\"flex flex-wrap gap-2 p-3 bg-secondary-50 rounded-xl border border-border-100\">\n          {selectedItems.map((item) => (\n            <Badge\n              key={item.id}\n              variant=\"outlined\"\n              action=\"info\"\n              size=\"medium\"\n              className=\"flex items-center gap-1 pr-1\"\n            >\n              <span\n                className=\"w-2 h-2 rounded-full mr-1\"\n                style={{ backgroundColor: item.color }}\n              />\n              <span className=\"truncate max-w-[200px]\">{item.name}</span>\n              <Button\n                variant=\"raw\"\n                onClick={() => onRemoveItem(item.id)}\n                className=\"ml-1 p-0.5 rounded-full hover:bg-secondary-200 transition-colors\"\n                aria-label={`Remover ${item.name}`}\n              >\n                <XIcon size={14} />\n              </Button>\n            </Badge>\n          ))}\n        </div>\n      )}\n\n      {isMaxReached && (\n        <Text size=\"xs\" className=\"text-warning-600\">\n          {labels.maxLimitWarning}\n        </Text>\n      )}\n\n      <Text size=\"xs\" className=\"text-text-500\">\n        {selectedItems.length} de 5 {itemTypeName} {labels.ofSelected}\n      </Text>\n    </div>\n  );\n}\n","import Text from '../Text/Text';\n\nexport interface LegendItem {\n  id: string;\n  name: string;\n  color: string;\n}\n\nexport interface LegendProps {\n  readonly items: LegendItem[];\n}\n\nexport function Legend({ items }: LegendProps) {\n  return (\n    <div className=\"flex flex-col gap-2\">\n      <div className=\"flex flex-wrap gap-4 items-center\">\n        {items.map((item) => (\n          <div key={item.id} className=\"flex items-center gap-2\">\n            <div\n              className=\"w-3 h-3 rounded-full\"\n              style={{ backgroundColor: item.color }}\n            />\n            <Text size=\"sm\" className=\"text-text-700\">\n              {item.name}\n            </Text>\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n}\n","import Text from '../Text/Text';\n\nexport function PercentageScale() {\n  return (\n    <div className=\"flex items-center gap-4 mb-2 border-b border-border-100 pb-2\">\n      {/* Spacer for label column (matches BarChartRow label width) */}\n      <div className=\"w-64 shrink-0\" />\n      {/* Scale markers */}\n      <div className=\"flex-1 flex justify-between px-1\">\n        <Text size=\"xs\" className=\"text-text-400\">\n          0%\n        </Text>\n        <Text size=\"xs\" className=\"text-text-400\">\n          25%\n        </Text>\n        <Text size=\"xs\" className=\"text-text-400\">\n          50%\n        </Text>\n        <Text size=\"xs\" className=\"text-text-400\">\n          75%\n        </Text>\n        <Text size=\"xs\" className=\"text-text-400\">\n          100%\n        </Text>\n      </div>\n    </div>\n  );\n}\n","import { ReactNode } from 'react';\n\nexport interface ChartAreaProps {\n  readonly children: ReactNode;\n}\n\nexport function ChartArea({ children }: ChartAreaProps) {\n  return (\n    <div className=\"relative\">\n      {/* Grid lines */}\n      <div className=\"absolute inset-0 flex items-stretch pointer-events-none gap-4\">\n        {/* Spacer for label column (matches BarChartRow label width) */}\n        <div className=\"w-64 shrink-0\" />\n        <div className=\"flex-1 flex\">\n          <div className=\"w-1/4 border-r border-dashed border-border-200\" />\n          <div className=\"w-1/4 border-r border-dashed border-border-200\" />\n          <div className=\"w-1/4 border-r border-dashed border-border-200\" />\n          <div className=\"w-1/4\" />\n        </div>\n      </div>\n      {/* Content */}\n      <div className=\"relative space-y-6\">{children}</div>\n    </div>\n  );\n}\n","import { useState } from 'react';\nimport Text from '../Text/Text';\nimport type { LegendItem } from './Legend';\n\nexport interface BarChartValue {\n  itemId: string;\n  percentage: number;\n}\n\nexport interface BarChartRowProps {\n  readonly label: string;\n  readonly values: BarChartValue[];\n  readonly items: LegendItem[];\n}\n\nexport function BarChartRow({ label, values, items }: BarChartRowProps) {\n  const [hoveredItem, setHoveredItem] = useState<string | null>(null);\n\n  return (\n    <div className=\"flex items-center gap-4\">\n      <Text size=\"sm\" className=\"text-text-700 w-64 shrink-0\">\n        {label}\n      </Text>\n      <div className=\"flex-1 space-y-1.5\">\n        {items.map((item) => {\n          const value = values.find((v) => v.itemId === item.id);\n          const percentage = value?.percentage ?? 0;\n          const clampedPercentage = Math.max(0, Math.min(percentage, 100));\n          const isHovered = hoveredItem === item.id;\n\n          return (\n            <div\n              key={item.id}\n              className=\"relative group\"\n              onMouseEnter={() => setHoveredItem(item.id)}\n              onMouseLeave={() => setHoveredItem(null)}\n            >\n              <div className=\"flex-1 h-5 bg-secondary-100 rounded-full overflow-hidden relative\">\n                <div\n                  className={`h-full rounded-full transition-all duration-500 ${\n                    isHovered ? 'opacity-90' : ''\n                  }`}\n                  style={{\n                    width: `${clampedPercentage}%`,\n                    backgroundColor: item.color,\n                    minWidth: clampedPercentage > 0 ? '8px' : '0px',\n                  }}\n                />\n              </div>\n              {/* Tooltip */}\n              {isHovered && (\n                <div\n                  className=\"absolute z-10 px-2 py-1 bg-text-900 rounded shadow-lg whitespace-nowrap\"\n                  style={{\n                    left: `${Math.min(Math.max(percentage, 5), 95)}%`,\n                    top: '-28px',\n                    transform: 'translateX(-50%)',\n                  }}\n                >\n                  <Text size=\"xs\" weight=\"medium\" className=\"text-white\">\n                    {item.name}: {percentage.toFixed(1)}%\n                  </Text>\n                  <div\n                    className=\"absolute w-2 h-2 bg-text-900 rotate-45\"\n                    style={{\n                      left: '50%',\n                      bottom: '-4px',\n                      transform: 'translateX(-50%)',\n                    }}\n                  />\n                </div>\n              )}\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n","import Text from '../Text/Text';\nimport { Legend } from './Legend';\nimport { PercentageScale } from './PercentageScale';\nimport { ChartArea } from './ChartArea';\nimport { BarChartRow } from './BarChartRow';\nimport type { KnowledgeAreaData, ComparisonItem } from '../../types/comparator';\n\nexport interface KnowledgeAreasContentProps {\n  readonly data: KnowledgeAreaData[];\n  readonly items: ComparisonItem[];\n  readonly title?: string;\n}\n\nexport function KnowledgeAreasContent({\n  data,\n  items,\n  title = 'Proficiência média das escolas por área do Enem',\n}: KnowledgeAreasContentProps) {\n  return (\n    <div className=\"bg-secondary-50 rounded-2xl p-6\">\n      <div className=\"mb-6\">\n        <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n          {title}\n        </Text>\n        <Legend items={items} />\n      </div>\n      <PercentageScale />\n      <ChartArea>\n        {data.map((area) => (\n          <BarChartRow\n            key={area.area}\n            label={area.area}\n            values={area.values}\n            items={items}\n          />\n        ))}\n      </ChartArea>\n    </div>\n  );\n}\n","import Text from '../Text/Text';\nimport { Legend } from './Legend';\nimport { PercentageScale } from './PercentageScale';\nimport { ChartArea } from './ChartArea';\nimport { BarChartRow } from './BarChartRow';\nimport type {\n  CurricularComponentData,\n  ComparisonItem,\n} from '../../types/comparator';\n\nexport interface CurricularComponentsContentProps {\n  readonly data: CurricularComponentData[];\n  readonly items: ComparisonItem[];\n  readonly title?: string;\n}\n\nexport function CurricularComponentsContent({\n  data,\n  items,\n  title = 'Proficiência média por componente curricular',\n}: CurricularComponentsContentProps) {\n  return (\n    <div className=\"bg-secondary-50 rounded-2xl p-6\">\n      <div className=\"mb-6\">\n        <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n          {title}\n        </Text>\n        <Legend items={items} />\n      </div>\n      <PercentageScale />\n      <ChartArea>\n        {data.map((component) => (\n          <BarChartRow\n            key={component.component}\n            label={component.component}\n            values={component.values}\n            items={items}\n          />\n        ))}\n      </ChartArea>\n    </div>\n  );\n}\n","import Text from '../Text/Text';\nimport { Legend } from './Legend';\nimport { PercentageScale } from './PercentageScale';\nimport { ChartArea } from './ChartArea';\nimport { BarChartRow } from './BarChartRow';\nimport type { CompetencyData, ComparisonItem } from '../../types/comparator';\n\nexport interface CompetenciesContentProps {\n  readonly data: CompetencyData[];\n  readonly items: ComparisonItem[];\n  readonly title?: string;\n}\n\nexport function CompetenciesContent({\n  data,\n  items,\n  title = 'Proficiência média por competência',\n}: CompetenciesContentProps) {\n  return (\n    <div className=\"bg-secondary-50 rounded-2xl p-6\">\n      <div className=\"mb-6\">\n        <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n          {title}\n        </Text>\n        <Legend items={items} />\n      </div>\n      <PercentageScale />\n      <ChartArea>\n        {data.map((competency) => (\n          <BarChartRow\n            key={competency.competency}\n            label={competency.competency}\n            values={competency.values}\n            items={items}\n          />\n        ))}\n      </ChartArea>\n    </div>\n  );\n}\n","import Text from '../Text/Text';\nimport Badge from '../Badge/Badge';\nimport type {\n  NationalAverageData,\n  ComparatorLabels,\n} from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface NationalAverageCardProps {\n  readonly data: NationalAverageData;\n  readonly color?: string;\n  readonly labels?: Partial<ComparatorLabels>;\n}\n\nconst DETAIL_LABELS = [\n  { key: 'languages', label: 'LINGUAGENS, CÓDIGOS E SUAS TECNOLOGIAS' },\n  { key: 'humanities', label: 'CIÊNCIAS HUMANAS E SUAS TECNOLOGIAS' },\n  { key: 'essay', label: 'REDAÇÃO' },\n  { key: 'naturalSciences', label: 'CIÊNCIAS DA NATUREZA E SUAS TECNOLOGIAS' },\n  { key: 'mathematics', label: 'MATEMÁTICA E SUAS TECNOLOGIAS' },\n] as const;\n\nexport function NationalAverageCard({\n  data,\n  color,\n  labels: customLabels,\n}: NationalAverageCardProps) {\n  const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n\n  return (\n    <div className=\"bg-secondary-50 rounded-2xl p-6\">\n      <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n        {data.itemName}\n      </Text>\n\n      {/* Main scores */}\n      <div className=\"grid grid-cols-3 gap-4 mb-6\">\n        <div\n          className=\"bg-background rounded-xl p-4 text-center border-l-4\"\n          style={{ borderColor: color }}\n        >\n          <Text size=\"2xl\" weight=\"bold\" className=\"text-primary-700\">\n            {data.simulatedProficiency.toFixed(1)}\n          </Text>\n          <Text size=\"xs\" className=\"text-text-500 uppercase\">\n            {labels.simulatedProficiency}\n          </Text>\n        </div>\n        <div className=\"bg-warning-50 rounded-xl p-4 text-center\">\n          <Text size=\"2xl\" weight=\"bold\" className=\"text-warning-700\">\n            {data.publicAverage}\n          </Text>\n          <Text size=\"xs\" className=\"text-text-500 uppercase\">\n            {labels.publicSchoolAverage}\n          </Text>\n        </div>\n        <div className=\"bg-success-50 rounded-xl p-4 text-center\">\n          <Text size=\"2xl\" weight=\"bold\" className=\"text-success-700\">\n            {data.privateAverage}\n          </Text>\n          <Text size=\"xs\" className=\"text-text-500 uppercase\">\n            {labels.privateSchoolAverage}\n          </Text>\n        </div>\n      </div>\n\n      {/* Detail scores */}\n      <div className=\"grid grid-cols-5 gap-4 mb-4\">\n        {DETAIL_LABELS.map(({ key, label }) => (\n          <div key={key} className=\"bg-background rounded-xl p-3 text-center\">\n            <Text\n              size=\"xs\"\n              className=\"text-text-500 uppercase mb-1 line-clamp-2\"\n            >\n              {label}\n            </Text>\n            <Text size=\"lg\" weight=\"bold\" className=\"text-primary-700\">\n              {data.details[key]}\n            </Text>\n          </div>\n        ))}\n      </div>\n\n      {/* Status */}\n      <Badge\n        variant=\"solid\"\n        action={data.status === 'above' ? 'success' : 'warning'}\n        size=\"medium\"\n        className=\"w-full justify-center py-3\"\n      >\n        {data.status === 'above' ? labels.aboveAverage : labels.belowAverage}\n      </Badge>\n    </div>\n  );\n}\n","import Text from '../Text/Text';\nimport { NationalAverageCard } from './NationalAverageCard';\nimport type {\n  NationalAverageData,\n  ComparisonItem,\n  ComparatorLabels,\n} from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface NationalAveragesContentProps {\n  readonly data: NationalAverageData[];\n  readonly items: ComparisonItem[];\n  readonly title?: string;\n  readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function NationalAveragesContent({\n  data,\n  items,\n  title,\n  labels: customLabels,\n}: NationalAveragesContentProps) {\n  const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n\n  return (\n    <div className=\"space-y-6\">\n      <Text size=\"md\" weight=\"semibold\" className=\"text-text-950\">\n        {title || labels.nationalAveragesTitle}\n      </Text>\n      {data.map((item) => {\n        const selectedItem = items.find((i) => i.id === item.itemId);\n        return (\n          <NationalAverageCard\n            key={item.itemId}\n            data={item}\n            color={selectedItem?.color}\n            labels={labels}\n          />\n        );\n      })}\n    </div>\n  );\n}\n","import { KnowledgeAreasContent } from './KnowledgeAreasContent';\nimport { CurricularComponentsContent } from './CurricularComponentsContent';\nimport { CompetenciesContent } from './CompetenciesContent';\nimport { NationalAveragesContent } from './NationalAveragesContent';\nimport {\n  ComparatorTabValue,\n  type ComparatorTabType,\n  type ComparatorData,\n  type ComparisonItem,\n  type ComparatorLabels,\n} from '../../types/comparator';\n\nexport interface ComparatorTabContentProps {\n  readonly activeTab: ComparatorTabType;\n  readonly data: ComparatorData;\n  readonly selectedItems: ComparisonItem[];\n  readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorTabContent({\n  activeTab,\n  data,\n  selectedItems,\n  labels,\n}: ComparatorTabContentProps) {\n  switch (activeTab) {\n    case ComparatorTabValue.KNOWLEDGE_AREAS:\n      return (\n        <KnowledgeAreasContent\n          data={data.knowledgeAreas}\n          items={selectedItems}\n          title={labels?.knowledgeAreasTitle}\n        />\n      );\n    case ComparatorTabValue.CURRICULAR_COMPONENTS:\n      return (\n        <CurricularComponentsContent\n          data={data.curricularComponents}\n          items={selectedItems}\n          title={labels?.curricularComponentsTitle}\n        />\n      );\n    case ComparatorTabValue.COMPETENCIES:\n      return (\n        <CompetenciesContent\n          data={data.competencies}\n          items={selectedItems}\n          title={labels?.competenciesTitle}\n        />\n      );\n    case ComparatorTabValue.NATIONAL_AVERAGES:\n      return (\n        <NationalAveragesContent\n          data={data.nationalAverages}\n          items={selectedItems}\n          title={labels?.nationalAveragesTitle}\n          labels={labels}\n        />\n      );\n    default:\n      return null;\n  }\n}\n"],"mappings":"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","names":["useState","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","useState"]}