UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

853 lines (791 loc) 36 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _chunkXRCGVXQTjs = require('./chunk-XRCGVXQT.js'); var _chunkC5FRUHXCjs = require('./chunk-C5FRUHXC.js'); var _chunkNEDUOGWUjs = require('./chunk-NEDUOGWU.js'); var _chunkBJMKBBN3js = require('./chunk-BJMKBBN3.js'); var _chunkTCLRDUMFjs = require('./chunk-TCLRDUMF.js'); var _chunk34ST3MKOjs = require('./chunk-34ST3MKO.js'); var _chunkANT66KVKjs = require('./chunk-ANT66KVK.js'); // src/components/ComparatorChart/ComparatorView.tsx var _react = require('react'); var _CaretLeft = require('@phosphor-icons/react/dist/csr/CaretLeft'); // src/components/ComparatorChart/ComparatorEmptyState.tsx var _Plus = require('@phosphor-icons/react/dist/csr/Plus'); var _jsxruntime = require('react/jsx-runtime'); function ComparatorEmptyState({ onSelectClick, canCompareSchools, canCompareSchoolYears, isLoading = false, labels: customLabels }) { const labels = { ..._chunkXRCGVXQTjs.DEFAULT_COMPARATOR_LABELS, ...customLabels }; const hasAnyOption = canCompareSchools || canCompareSchoolYears; const getButtonText = () => { if (canCompareSchools && canCompareSchoolYears) { return labels.selectComparison; } if (canCompareSchools) { return labels.selectSchools; } return labels.selectSchoolYears; }; const getDescriptionText = () => { if (canCompareSchools && canCompareSchoolYears) { return labels.emptyStateDescriptionBoth; } if (canCompareSchools) { return labels.emptyStateDescriptionSchools; } if (canCompareSchoolYears) { return labels.emptyStateDescriptionSchoolYears; } return labels.noAccessMessage; }; const buttonText = getButtonText(); const descriptionText = getDescriptionText(); return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col items-center justify-center h-full gap-6", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-24 h-24 rounded-full bg-primary-100 flex items-center justify-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { className: "w-12 h-12 text-primary-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, 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" } ) } ) }), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "text-center", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "lg", weight: "semibold", className: "text-text-950 mb-2", children: labels.title }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-text-500", children: descriptionText }) ] }), hasAnyOption && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk34ST3MKOjs.Button_default, { variant: "outline", action: "primary", size: "medium", onClick: onSelectClick, disabled: isLoading, children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Plus.PlusIcon, { size: 18 }), buttonText ] } ) ] }); } // src/components/ComparatorChart/ComparatorLoadingState.tsx function ComparatorLoadingState() { return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-6", "data-testid": "comparator-loading-skeleton", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEDUOGWUjs.SkeletonCard, { className: "h-12 w-full" }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEDUOGWUjs.SkeletonCard, { className: "h-64 w-full" }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEDUOGWUjs.SkeletonCard, { className: "h-64 w-full" }) ] } ); } // src/components/ComparatorChart/ComparatorSelectTypeStep.tsx function ComparatorSelectTypeStep({ onSelectType, canCompareSchools, canCompareSchoolYears, labels: customLabels }) { const labels = { ..._chunkXRCGVXQTjs.DEFAULT_COMPARATOR_LABELS, ...customLabels }; if (!canCompareSchools && !canCompareSchoolYears) { return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col gap-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-text-600", children: labels.noAccessMessage }) }); } return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-4", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-text-600", children: labels.selectComparisonType }), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex gap-4", children: [ canCompareSchools && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk34ST3MKOjs.Button_default, { variant: "raw", onClick: () => onSelectType("school"), className: "flex-1 p-4 border border-border-200 rounded-xl hover:border-primary-500 hover:bg-primary-50 transition-colors text-left", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "md", weight: "semibold", className: "text-text-950", children: labels.schools }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-text-500", children: labels.compareSchoolsDescription }) ] } ), canCompareSchoolYears && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk34ST3MKOjs.Button_default, { variant: "raw", onClick: () => onSelectType("schoolYear"), className: "flex-1 p-4 border border-border-200 rounded-xl hover:border-primary-500 hover:bg-primary-50 transition-colors text-left", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "md", weight: "semibold", className: "text-text-950", children: labels.schoolYears }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-text-500", children: labels.compareSchoolYearsDescription }) ] } ) ] }) ] }); } // src/components/ComparatorChart/ComparatorSelectItemsStep.tsx var _X = require('@phosphor-icons/react/dist/csr/X'); function ComparatorSelectItemsStep({ options, selectedItems, onSelectItem, onRemoveItem, comparisonType, labels: customLabels }) { const labels = { ..._chunkXRCGVXQTjs.DEFAULT_COMPARATOR_LABELS, ...customLabels }; const isMaxReached = selectedItems.length >= 5; const placeholder = comparisonType === "school" ? labels.schools : labels.schoolYears; const itemTypeName = comparisonType === "school" ? labels.schools.toLowerCase() : labels.schoolYears.toLowerCase(); const singularItemTypeName = comparisonType === "school" ? labels.school : labels.schoolYear; return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-4", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-text-600", children: labels.selectItemInstruction.replace("{item}", singularItemTypeName) }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkC5FRUHXCjs.SearchSelect_default, { options, placeholder, searchPlaceholder: `${labels.search} ${placeholder.toLowerCase()}...`, onValueChange: onSelectItem, disabled: isMaxReached, emptyText: "Nenhum resultado encontrado", size: "medium", variant: "outlined" } ), selectedItems.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap gap-2 p-3 bg-secondary-50 rounded-xl border border-border-100", children: selectedItems.map((item) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBJMKBBN3js.Badge_default, { variant: "outlined", action: "info", size: "medium", className: "flex items-center gap-1 pr-1", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "w-2 h-2 rounded-full mr-1", style: { backgroundColor: item.color } } ), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate max-w-[200px]", children: item.name }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk34ST3MKOjs.Button_default, { variant: "raw", onClick: () => onRemoveItem(item.id), className: "ml-1 p-0.5 rounded-full hover:bg-secondary-200 transition-colors", "aria-label": `Remover ${item.name}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _X.XIcon, { size: 14 }) } ) ] }, item.id )) }), isMaxReached && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-warning-600", children: labels.maxLimitWarning }), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-text-500", children: [ selectedItems.length, " de 5 ", itemTypeName, " ", labels.ofSelected ] }) ] }); } // src/components/ComparatorChart/Legend.tsx function Legend({ items }) { return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col gap-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap gap-4 items-center", children: items.map((item) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-3 h-3 rounded-full", style: { backgroundColor: item.color } } ), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-text-700", children: item.name }) ] }, item.id)) }) }); } // src/components/ComparatorChart/PercentageScale.tsx function PercentageScale() { return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-4 mb-2 border-b border-border-100 pb-2", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-64 shrink-0" }), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex-1 flex justify-between px-1", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-text-400", children: "0%" }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-text-400", children: "25%" }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-text-400", children: "50%" }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-text-400", children: "75%" }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-text-400", children: "100%" }) ] }) ] }); } // src/components/ComparatorChart/ChartArea.tsx function ChartArea({ children }) { return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative", children: [ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "absolute inset-0 flex items-stretch pointer-events-none gap-4", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-64 shrink-0" }), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex-1 flex", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-1/4 border-r border-dashed border-border-200" }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-1/4 border-r border-dashed border-border-200" }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-1/4 border-r border-dashed border-border-200" }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-1/4" }) ] }) ] }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "relative space-y-6", children }) ] }); } // src/components/ComparatorChart/BarChartRow.tsx function BarChartRow({ label, values, items }) { const [hoveredItem, setHoveredItem] = _react.useState.call(void 0, null); return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-4", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-text-700 w-64 shrink-0", children: label }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1 space-y-1.5", children: items.map((item) => { const value = values.find((v) => v.itemId === item.id); const percentage = _nullishCoalesce(_optionalChain([value, 'optionalAccess', _ => _.percentage]), () => ( 0)); const clampedPercentage = Math.max(0, Math.min(percentage, 100)); const isHovered = hoveredItem === item.id; return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative group", onMouseEnter: () => setHoveredItem(item.id), onMouseLeave: () => setHoveredItem(null), children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1 h-5 bg-secondary-100 rounded-full overflow-hidden relative", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `h-full rounded-full transition-all duration-500 ${isHovered ? "opacity-90" : ""}`, style: { width: `${clampedPercentage}%`, backgroundColor: item.color, minWidth: clampedPercentage > 0 ? "8px" : "0px" } } ) }), isHovered && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "absolute z-10 px-2 py-1 bg-text-900 rounded shadow-lg whitespace-nowrap", style: { left: `${Math.min(Math.max(percentage, 5), 95)}%`, top: "-28px", transform: "translateX(-50%)" }, children: [ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", weight: "medium", className: "text-white", children: [ item.name, ": ", percentage.toFixed(1), "%" ] }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute w-2 h-2 bg-text-900 rotate-45", style: { left: "50%", bottom: "-4px", transform: "translateX(-50%)" } } ) ] } ) ] }, item.id ); }) }) ] }); } // src/components/ComparatorChart/KnowledgeAreasContent.tsx function KnowledgeAreasContent({ data, items, title = "Profici\xEAncia m\xE9dia das escolas por \xE1rea do Enem" }) { return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-secondary-50 rounded-2xl p-6", children: [ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mb-6", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "md", weight: "semibold", className: "text-text-950 mb-4", children: title }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Legend, { items }) ] }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PercentageScale, {}), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChartArea, { children: data.map((area) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BarChartRow, { label: area.area, values: area.values, items }, area.area )) }) ] }); } // src/components/ComparatorChart/CurricularComponentsContent.tsx function CurricularComponentsContent({ data, items, title = "Profici\xEAncia m\xE9dia por componente curricular" }) { return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-secondary-50 rounded-2xl p-6", children: [ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mb-6", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "md", weight: "semibold", className: "text-text-950 mb-4", children: title }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Legend, { items }) ] }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PercentageScale, {}), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChartArea, { children: data.map((component) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BarChartRow, { label: component.component, values: component.values, items }, component.component )) }) ] }); } // src/components/ComparatorChart/CompetenciesContent.tsx function CompetenciesContent({ data, items, title = "Profici\xEAncia m\xE9dia por compet\xEAncia" }) { return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-secondary-50 rounded-2xl p-6", children: [ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mb-6", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "md", weight: "semibold", className: "text-text-950 mb-4", children: title }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Legend, { items }) ] }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PercentageScale, {}), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChartArea, { children: data.map((competency) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BarChartRow, { label: competency.competency, values: competency.values, items }, competency.competency )) }) ] }); } // src/components/ComparatorChart/NationalAverageCard.tsx var DETAIL_LABELS = [ { key: "languages", label: "LINGUAGENS, C\xD3DIGOS E SUAS TECNOLOGIAS" }, { key: "humanities", label: "CI\xCANCIAS HUMANAS E SUAS TECNOLOGIAS" }, { key: "essay", label: "REDA\xC7\xC3O" }, { key: "naturalSciences", label: "CI\xCANCIAS DA NATUREZA E SUAS TECNOLOGIAS" }, { key: "mathematics", label: "MATEM\xC1TICA E SUAS TECNOLOGIAS" } ]; function NationalAverageCard({ data, color, labels: customLabels }) { const labels = { ..._chunkXRCGVXQTjs.DEFAULT_COMPARATOR_LABELS, ...customLabels }; return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-secondary-50 rounded-2xl p-6", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "md", weight: "semibold", className: "text-text-950 mb-4", children: data.itemName }), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-3 gap-4 mb-6", children: [ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-background rounded-xl p-4 text-center border-l-4", style: { borderColor: color }, children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "2xl", weight: "bold", className: "text-primary-700", children: data.simulatedProficiency.toFixed(1) }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-text-500 uppercase", children: labels.simulatedProficiency }) ] } ), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-warning-50 rounded-xl p-4 text-center", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "2xl", weight: "bold", className: "text-warning-700", children: data.publicAverage }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-text-500 uppercase", children: labels.publicSchoolAverage }) ] }), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-success-50 rounded-xl p-4 text-center", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "2xl", weight: "bold", className: "text-success-700", children: data.privateAverage }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-text-500 uppercase", children: labels.privateSchoolAverage }) ] }) ] }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "grid grid-cols-5 gap-4 mb-4", children: DETAIL_LABELS.map(({ key, label }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "bg-background rounded-xl p-3 text-center", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", className: "text-text-500 uppercase mb-1 line-clamp-2", children: label } ), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "lg", weight: "bold", className: "text-primary-700", children: data.details[key] }) ] }, key)) }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBJMKBBN3js.Badge_default, { variant: "solid", action: data.status === "above" ? "success" : "warning", size: "medium", className: "w-full justify-center py-3", children: data.status === "above" ? labels.aboveAverage : labels.belowAverage } ) ] }); } // src/components/ComparatorChart/NationalAveragesContent.tsx function NationalAveragesContent({ data, items, title, labels: customLabels }) { const labels = { ..._chunkXRCGVXQTjs.DEFAULT_COMPARATOR_LABELS, ...customLabels }; return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "md", weight: "semibold", className: "text-text-950", children: title || labels.nationalAveragesTitle }), data.map((item) => { const selectedItem = items.find((i) => i.id === item.itemId); return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NationalAverageCard, { data: item, color: _optionalChain([selectedItem, 'optionalAccess', _2 => _2.color]), labels }, item.itemId ); }) ] }); } // src/components/ComparatorChart/ComparatorTabContent.tsx function ComparatorTabContent({ activeTab, data, selectedItems, labels }) { switch (activeTab) { case "knowledge-areas" /* KNOWLEDGE_AREAS */: return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, KnowledgeAreasContent, { data: data.knowledgeAreas, items: selectedItems, title: _optionalChain([labels, 'optionalAccess', _3 => _3.knowledgeAreasTitle]) } ); case "curricular-components" /* CURRICULAR_COMPONENTS */: return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CurricularComponentsContent, { data: data.curricularComponents, items: selectedItems, title: _optionalChain([labels, 'optionalAccess', _4 => _4.curricularComponentsTitle]) } ); case "competencies" /* COMPETENCIES */: return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CompetenciesContent, { data: data.competencies, items: selectedItems, title: _optionalChain([labels, 'optionalAccess', _5 => _5.competenciesTitle]) } ); case "national-averages" /* NATIONAL_AVERAGES */: return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, NationalAveragesContent, { data: data.nationalAverages, items: selectedItems, title: _optionalChain([labels, 'optionalAccess', _6 => _6.nationalAveragesTitle]), labels } ); default: return null; } } // src/components/ComparatorChart/ComparatorView.tsx function ComparatorView({ schools, schoolYears, useComparatorStore, useComparator, onBack, activeTab: externalActiveTab, onTabChange, tabs = _chunkXRCGVXQTjs.DEFAULT_COMPARATOR_TABS, labels: customLabels, isUserLoading = false, onFetchUserData }) { const labels = _react.useMemo.call(void 0, () => ({ ..._chunkXRCGVXQTjs.DEFAULT_COMPARATOR_LABELS, ...customLabels }), [customLabels] ); const { comparisonType, selectedItems, setComparisonType, addItem, removeItem, clearSelection } = useComparatorStore(); const { data, loading, fetchData } = useComparator(); const [isModalOpen, setIsModalOpen] = _react.useState.call(void 0, false); const [modalStep, setModalStep] = _react.useState.call(void 0, 1); const [internalActiveTab, setInternalActiveTab] = _react.useState.call(void 0, "knowledge-areas" /* KNOWLEDGE_AREAS */ ); const hasInitializedRef = _react.useRef.call(void 0, false); const activeTab = _nullishCoalesce(externalActiveTab, () => ( internalActiveTab)); const canCompareSchools = schools.length > 1; const canCompareSchoolYears = schoolYears.length > 1; const hasAnyComparisonOption = canCompareSchools || canCompareSchoolYears; _react.useEffect.call(void 0, () => { _optionalChain([onFetchUserData, 'optionalCall', _7 => _7(true)]); }, [onFetchUserData]); _react.useEffect.call(void 0, () => { if (hasInitializedRef.current) return; if (selectedItems.length > 0 && comparisonType) { hasInitializedRef.current = true; fetchData( selectedItems.map((i) => i.id), comparisonType, activeTab ); } }, [selectedItems, comparisonType, activeTab, fetchData]); const options = _react.useMemo.call(void 0, () => { if (comparisonType === "school") return schools; if (comparisonType === "schoolYear") return schoolYears; return []; }, [comparisonType, schools, schoolYears]); const availableOptions = _react.useMemo.call(void 0, () => { return options.filter( (opt) => !selectedItems.some((item) => item.id === opt.value) ); }, [options, selectedItems]); const handleTabChange = _react.useCallback.call(void 0, (tab) => { if (onTabChange) { onTabChange(tab); } else { setInternalActiveTab(tab); } if (selectedItems.length > 0 && comparisonType) { fetchData( selectedItems.map((i) => i.id), comparisonType, tab ); } }, [selectedItems, comparisonType, onTabChange, fetchData] ); const handleOpenModal = _react.useCallback.call(void 0, () => { if (comparisonType) { setModalStep(2); setIsModalOpen(true); return; } if (canCompareSchools && !canCompareSchoolYears) { setComparisonType("school"); setModalStep(2); } else if (canCompareSchoolYears && !canCompareSchools) { setComparisonType("schoolYear"); setModalStep(2); } else { setModalStep(1); } setIsModalOpen(true); }, [ comparisonType, canCompareSchools, canCompareSchoolYears, setComparisonType ]); const handleSelectType = _react.useCallback.call(void 0, (type) => { clearSelection(); setComparisonType(type); setModalStep(2); }, [clearSelection, setComparisonType] ); const handleSelectItem = _react.useCallback.call(void 0, (value) => { if (selectedItems.length >= 5) return; const option = options.find((opt) => opt.value === value); if (!option) return; addItem({ id: option.value, name: option.label, color: "" }); }, [options, selectedItems.length, addItem] ); const handleRemoveItem = _react.useCallback.call(void 0, (itemId) => { removeItem(itemId); }, [removeItem] ); const handleConfirmSelection = _react.useCallback.call(void 0, () => { setIsModalOpen(false); if (selectedItems.length > 0 && comparisonType) { fetchData( selectedItems.map((i) => i.id), comparisonType, activeTab ); } }, [selectedItems, comparisonType, activeTab, fetchData]); const handleCloseModal = _react.useCallback.call(void 0, () => { setIsModalOpen(false); }, []); const handleChangeType = _react.useCallback.call(void 0, () => { setModalStep(1); clearSelection(); }, [clearSelection]); const buttonText = _react.useMemo.call(void 0, () => { if (selectedItems.length > 0) { return comparisonType === "school" ? labels.selectSchools : labels.selectSchoolYears; } if (canCompareSchools && canCompareSchoolYears) { return labels.selectComparison; } return canCompareSchools ? labels.selectSchools : labels.selectSchoolYears; }, [ selectedItems.length, comparisonType, canCompareSchools, canCompareSchoolYears, labels ]); const renderMainContent = () => { if (selectedItems.length === 0) { return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComparatorEmptyState, { onSelectClick: handleOpenModal, canCompareSchools, canCompareSchoolYears, isLoading: isUserLoading, labels } ); } if (loading) { return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComparatorLoadingState, {}); } return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComparatorTabContent, { activeTab, data, selectedItems, labels } ); }; return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "h-screen bg-background flex flex-col", children: [ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "header", { className: "flex items-center justify-between px-6 py-4 border-b border-border-100 bg-secondary-50", children: [ onBack ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk34ST3MKOjs.Button_default, { variant: "raw", onClick: onBack, className: "flex items-center gap-2 text-text-950 hover:text-text-700 transition-colors", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _CaretLeft.CaretLeftIcon, { size: 20, weight: "bold" }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "lg", weight: "semibold", children: labels.title }) ] } ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-2 text-text-950", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "lg", weight: "semibold", children: labels.title }) }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk34ST3MKOjs.Button_default, { variant: "solid", action: "primary", size: "medium", onClick: handleOpenModal, disabled: !hasAnyComparisonOption || isUserLoading, children: buttonText } ) ] }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex gap-2 px-6 py-4 border-b border-border-100 bg-secondary-50", children: tabs.map((tab) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk34ST3MKOjs.Button_default, { variant: "raw", onClick: () => handleTabChange(tab.value), className: `px-4 py-2 text-sm font-medium transition-colors ${activeTab === tab.value ? "text-primary-700 border-b-2 border-primary-600" : "text-text-500 hover:text-text-700"}`, children: tab.label }, tab.value )) }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "main", { className: "flex-1 overflow-auto p-6", children: renderMainContent() }), /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTCLRDUMFjs.Modal_default, { isOpen: isModalOpen, onClose: handleCloseModal, title: labels.filters, size: "md", footer: modalStep === 2 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-end gap-3 w-full", children: [ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk34ST3MKOjs.Button_default, { variant: "outline", onClick: handleChangeType, children: labels.back }), /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk34ST3MKOjs.Button_default, { variant: "solid", action: "primary", onClick: handleConfirmSelection, disabled: selectedItems.length === 0, children: [ labels.confirm, " (", selectedItems.length, "/5)" ] } ) ] }) : void 0, children: modalStep === 1 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComparatorSelectTypeStep, { onSelectType: handleSelectType, canCompareSchools, canCompareSchoolYears, labels } ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ComparatorSelectItemsStep, { options: availableOptions, selectedItems, onSelectItem: handleSelectItem, onRemoveItem: handleRemoveItem, comparisonType, labels } ) } ) ] }); } exports.Legend = Legend; exports.PercentageScale = PercentageScale; exports.ChartArea = ChartArea; exports.BarChartRow = BarChartRow; exports.KnowledgeAreasContent = KnowledgeAreasContent; exports.CurricularComponentsContent = CurricularComponentsContent; exports.CompetenciesContent = CompetenciesContent; exports.NationalAverageCard = NationalAverageCard; exports.NationalAveragesContent = NationalAveragesContent; exports.ComparatorEmptyState = ComparatorEmptyState; exports.ComparatorLoadingState = ComparatorLoadingState; exports.ComparatorSelectTypeStep = ComparatorSelectTypeStep; exports.ComparatorSelectItemsStep = ComparatorSelectItemsStep; exports.ComparatorTabContent = ComparatorTabContent; exports.ComparatorView = ComparatorView; //# sourceMappingURL=chunk-2JRNCQLG.js.map