@zydon/common 2.8.80 → 2.8.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/PieLabel.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/props.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnersDetail/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersDetail/Header.tsx","../../../../src/components/Analytics/PartnerAnalysis/ProfileDetail/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/ProfileDetail/Header.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/props.ts","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/BarBackground.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/RankingDetail/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/RankingDetail/Header.tsx","../../../../src/components/Analytics/PartnerAnalysis/RankingDetail/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/BarBackground.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/props.ts"],"names":["CardContent","CardHeader","Stack","Pie","PieChart","ResponsiveContainer","Tooltip","styled","ChartContainer","theme","Divider","Typography","jsx","jsxs","formatPercentage","value","fPercent","PieChartTooltip","active","payload","total","entry","SimpleCard_default","Tooltip_default","PieChartBreakdown","chartData","isEmptyData","onPieClick","clickable","fNumber","Chart_default","Checkbox","FormControlLabel","PieChartLegend","items","hiddenKeys","onToggle","onItemClick","item","e","_","checked","fShortenNumber","Legend_default","PartnerBreakdown","title","legendItems","ChartCard","PartnerBreakdown_default","RADIAN","LABEL_OFFSET","MIN_PERCENTAGE","PieLabel","props","cx","cy","midAngle","outerRadius","percentage","cxNum","cyNum","outerR","angle","sin","cos","x1","y1","xMid","yMid","side","xEnd","yEnd","label","badgeW","badgeX","PieLabel_default","ProfileTooltip","renderLabel","ProfileChart","ProfileLegend","Scrollbar_default","PartnersByProfile","data","onLegendClick","Result_default","EmptyState_default","PartnersByProfile_default","SEGMENT_COLORS","MAX_VISIBLE","Link","Header","Header_default","Fragment","PartnersDetail","open","onClose","columns","rows","totalPartners","isLoading","isFetching","isFetchingNextPage","onSearch","onRowsScrollEnd","sellerName","buildSellerLink","sellerExternalId","mobileRender","isMobile","useResponsive_default","content","SearchInput_default","DataView_default","row","header","Drawer_default","Modal_default","PartnersDetail_default","profileName","ProfileDetail","ProfileDetail_default","memo","useCallback","useMemo","useRef","useState","Slider","Bar","CartesianGrid","ComposedChart","ReferenceLine","XAxis","YAxis","AVERAGE_COLOR","RANKING_CONFIG","fCurrencyBRL","BarBackground","x","y","width","height","index","activeBarIndex","color","onBarClick","BarBackground_default","RankingTooltip","config","average","BAR_SIZE","BAR_SLOT","RankingChart","visibleSeries","activeCoordX","shouldRotateLabels","onMouseMove","onMouseLeave","yDomain","values","max","yTicks","step","i","barLabel","tooltipContent","renderXAxisTick","tickProps","RotatedTick_default","WrappedTick_default","handleBarClick","ChartWrapper","v","ReferenceCircle_default","RankingLegend","onToggleSerie","Ranking","children","isDownLg","setVisibleSeries","visibleCount","setVisibleCount","setActiveBarIndex","setActiveCoordX","containerWidth","setContainerWidth","observerRef","wrapperRefCallback","node","sortedData","a","b","totalItems","maxVisible","showSlider","sliderMax","clampedCount","displayData","handleToggleSerie","serie","prev","handleChartMouseMove","state","handleChartMouseLeave","handleSliderChange","val","ChartCardHeader","Ranking_default","MuiButton","ItemButton","prop","rankingLabel","partnerName","MuiDivider","alpha","StyledDivider","MobileItemContainer","getOrderId","order","getPartnerName","buildPartnerLink","getOrderValue","getOrderDate","fDate","getOrderStatus","getDefaultMobileRender","RankingDetail","totalValue","averageTicket","page","perPage","onPaginationChange","mobileItemSlot","RankingDetail_default","BarChart","formatPct","StackedTooltip","visibleEntries","sum","series","s","pct","SellerPortfolioChart","visible","firstVisible","lastVisible","isFirst","isLast","SellerPortfolioLegend","SellerPortfolio","setHiddenKeys","displayDataWithTotals","dataKey","next","handleMouseMove","handleMouseLeave","sellerId","SellerPortfolio_default","CLASSIFICATION_SERIES","ABC_CURVE_SERIES","SELLER_PORTFOLIO_CONFIG"],"mappings":"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","sourcesContent":["import CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\n\nimport PieChartBreakdown from './Chart';\nimport PieChartLegend from './Legend';\nimport { PartnerBreakdownProps } from './props';\n\nconst PartnerBreakdown = ({\n title,\n chartData,\n total,\n isEmptyData,\n legendItems,\n hiddenKeys,\n onToggle,\n onPieClick,\n onItemClick,\n}: PartnerBreakdownProps) => (\n <ChartCard>\n <CardHeader title={title} />\n\n <CardContent>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n alignItems=\"center\"\n gap={1.5}\n minWidth={0}\n >\n <PieChartBreakdown\n chartData={chartData}\n total={total}\n isEmptyData={isEmptyData}\n onPieClick={onPieClick}\n clickable={!!onPieClick}\n />\n\n <PieChartLegend\n items={legendItems}\n hiddenKeys={hiddenKeys}\n onToggle={onToggle}\n onItemClick={onItemClick}\n />\n </Stack>\n </CardContent>\n </ChartCard>\n);\n\nexport default PartnerBreakdown;\n","import { fNumber } from 'utils/formatNumber';\nimport { Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts';\n\nimport { ChartProps } from '../props';\n\nimport { ChartContainer } from './styles';\nimport PieChartTooltip from './Tooltip';\n\nconst PieChartBreakdown = ({\n chartData,\n total,\n isEmptyData,\n onPieClick,\n clickable,\n}: ChartProps) => (\n <ChartContainer>\n <ResponsiveContainer width={200} height={200}>\n <PieChart>\n <Pie\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={60}\n outerRadius={90}\n paddingAngle={2}\n strokeWidth={0}\n isAnimationActive={false}\n onClick={onPieClick}\n cursor={clickable ? 'pointer' : undefined}\n />\n\n <text\n x=\"50%\"\n y=\"46%\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 24, fontWeight: 700 }}\n >\n {fNumber(total)}\n </text>\n\n <text\n x=\"50%\"\n y=\"58%\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 12, fill: '#919EAB' }}\n >\n clientes\n </text>\n\n {!isEmptyData && (\n <Tooltip content={<PieChartTooltip total={total} />} />\n )}\n </PieChart>\n </ResponsiveContainer>\n </ChartContainer>\n);\n\nexport default PieChartBreakdown;\n","import Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const ChartContainer = styled(Stack)(({ theme }) => ({\n position: 'relative',\n alignSelf: 'flex-start',\n\n flexShrink: 0,\n\n '& .recharts-wrapper, & .recharts-wrapper *': {\n outline: 'none !important',\n boxShadow: 'none !important',\n },\n\n '& .recharts-pie-sector': {\n cursor: 'pointer',\n },\n\n [theme.breakpoints.down('md')]: {\n alignSelf: 'center',\n },\n}));\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from '../props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst PieChartTooltip = ({ active, payload, total }: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const entry = payload[0];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {entry.name}\n </Typography>\n\n <Divider />\n\n <Stack>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.payload.fill}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(entry.payload.percentage)} ({entry.value})\n </Typography>\n </Stack>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default PieChartTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { fPercent, fShortenNumber } from 'utils/formatNumber';\n\nimport { LegendProps } from './props';\n\nconst PieChartLegend = ({\n items,\n hiddenKeys,\n onToggle,\n onItemClick,\n}: LegendProps) => (\n <Stack width=\"100%\" justifyContent=\"center\">\n {items.map(item => (\n <Stack\n key={item.key}\n display=\"grid\"\n gridTemplateColumns=\"1fr auto auto\"\n alignItems=\"center\"\n gap={1.5}\n onClick={() => onItemClick?.(item.key, item.label)}\n sx={{\n ...(onItemClick ? { cursor: 'pointer' } : {}),\n }}\n >\n <FormControlLabel\n label={item.label}\n onClick={e => e.stopPropagation()}\n control={\n <Checkbox\n size=\"small\"\n checked={!hiddenKeys.has(item.key)}\n onChange={(_, checked) => onToggle(item.key, checked)}\n sx={{ '&.Mui-checked': { color: item.color } }}\n />\n }\n sx={{\n '& .MuiFormControlLabel-label': {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n }}\n />\n\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"right\"\n noWrap\n >\n {fPercent(item.percentage, {\n maximumFractionDigits: 2,\n ...(item.percentage > 0 && item.percentage < 100\n ? { minimumFractionDigits: 2 }\n : {}),\n })}\n </Typography>\n\n <Typography\n variant=\"subtitle2\"\n color=\"text.primary\"\n textAlign=\"right\"\n noWrap\n >\n {fShortenNumber(item.count)}\n </Typography>\n </Stack>\n ))}\n </Stack>\n);\n\nexport default PieChartLegend;\n","import CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\n\nimport ProfileChart from './Chart';\nimport ProfileLegend from './Legend';\nimport { PartnersByProfileProps } from './props';\n\nconst PartnersByProfile = ({\n data,\n chartData,\n total,\n isEmptyData,\n onPieClick,\n onLegendClick,\n hiddenKeys,\n onToggle,\n}: PartnersByProfileProps) => (\n <ChartCard>\n <CardHeader title=\"Clientes por segmentos\" />\n\n <CardContent>\n <Result isEmpty={data.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={2}>\n <ProfileChart\n chartData={chartData}\n total={total}\n isEmptyData={isEmptyData}\n onPieClick={onPieClick}\n />\n\n <ProfileLegend\n items={data}\n hiddenKeys={hiddenKeys}\n onToggle={onToggle}\n onItemClick={onLegendClick}\n />\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n);\n\nexport default PartnersByProfile;\n","import { PieLabelRenderProps } from 'recharts';\nimport { Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts';\n\nimport PieLabel from './PieLabel';\nimport { ChartProps } from './props';\nimport { ChartContainer } from './styles';\nimport ProfileTooltip from './Tooltip';\n\nconst renderLabel = (props: PieLabelRenderProps) => <PieLabel {...props} />;\n\nconst ProfileChart = ({\n chartData,\n total,\n isEmptyData,\n onPieClick,\n}: ChartProps) => (\n <ChartContainer>\n <ResponsiveContainer width={280} height={280}>\n <PieChart>\n <Pie\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n outerRadius={90}\n paddingAngle={1}\n strokeWidth={0}\n isAnimationActive={false}\n label={isEmptyData ? false : renderLabel}\n labelLine={false}\n onClick={onPieClick}\n cursor={onPieClick ? 'pointer' : undefined}\n />\n\n {!isEmptyData && (\n <Tooltip content={<ProfileTooltip total={total} />} />\n )}\n </PieChart>\n </ResponsiveContainer>\n </ChartContainer>\n);\n\nexport default ProfileChart;\n","import { PieLabelRenderProps } from 'recharts';\nimport { fPercent } from 'utils/formatNumber';\n\nconst RADIAN = Math.PI / 180;\nconst LABEL_OFFSET = 22;\nconst MIN_PERCENTAGE = 2;\n\nconst PieLabel = (props: PieLabelRenderProps) => {\n const { cx, cy, midAngle, outerRadius, percentage } =\n props as PieLabelRenderProps & { percentage: number };\n\n if (percentage < MIN_PERCENTAGE) return null;\n\n const cxNum = Number(cx);\n const cyNum = Number(cy);\n const outerR = Number(outerRadius);\n const angle = Number(midAngle);\n\n if (isNaN(cxNum) || isNaN(cyNum) || isNaN(outerR)) return null;\n\n const sin = Math.sin(-angle * RADIAN);\n const cos = Math.cos(-angle * RADIAN);\n\n const x1 = cxNum + outerR * cos;\n const y1 = cyNum + outerR * sin;\n\n const xMid = cxNum + (outerR + LABEL_OFFSET * 0.5) * cos;\n const yMid = cyNum + (outerR + LABEL_OFFSET * 0.5) * sin;\n\n const side = cos >= 0 ? 1 : -1;\n const xEnd = xMid + side * 10;\n const yEnd = yMid;\n\n const label = fPercent(percentage, {\n maximumFractionDigits: 1,\n ...(percentage > 0 && percentage < 100 ? { minimumFractionDigits: 1 } : {}),\n });\n\n const badgeW = label.length * 7 + 10;\n const badgeX = side === 1 ? xEnd + 2 : xEnd - badgeW - 2;\n\n return (\n <g>\n <path\n d={`M${x1},${y1} L${xMid},${yMid} L${xEnd},${yEnd}`}\n stroke=\"#637381\"\n fill=\"none\"\n strokeWidth={1}\n />\n\n <rect\n x={badgeX}\n y={yEnd - 10}\n width={badgeW}\n height={20}\n rx={4}\n fill=\"#212B36\"\n />\n\n <text\n x={badgeX + badgeW / 2}\n y={yEnd}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={11}\n fontWeight={600}\n fill=\"#FFFFFF\"\n >\n {label}\n </text>\n </g>\n );\n};\n\nexport default PieLabel;\n","import Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const ChartContainer = styled(Stack)({\n position: 'relative',\n alignItems: 'center',\n justifyContent: 'center',\n\n '& .recharts-wrapper, & .recharts-wrapper *': {\n outline: 'none !important',\n boxShadow: 'none !important',\n },\n\n '& .recharts-wrapper': {\n overflow: 'visible !important',\n },\n\n '& .recharts-wrapper svg': {\n overflow: 'visible',\n },\n\n '& .recharts-pie-sector': {\n cursor: 'pointer',\n },\n});\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from './props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst ProfileTooltip = ({ active, payload, total }: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const entry = payload[0];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {entry.name}\n </Typography>\n\n <Divider />\n\n <Stack>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.payload.fill}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(entry.payload.percentage)} ({entry.value})\n </Typography>\n </Stack>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default ProfileTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Scrollbar from 'components/Scrollbar';\nimport { fPercent, fShortenNumber } from 'utils/formatNumber';\n\nimport { LegendProps } from './props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst ProfileLegend = ({\n items,\n hiddenKeys,\n onToggle,\n onItemClick,\n}: LegendProps) => (\n <Scrollbar sx={{ maxHeight: 280, width: '100%', pl: 0.5 }}>\n {items.map(item => (\n <Stack\n key={item.key}\n display=\"grid\"\n gridTemplateColumns=\"1fr auto auto\"\n alignItems=\"center\"\n gap={1.5}\n onClick={() => onItemClick?.(item.key)}\n sx={onItemClick ? { cursor: 'pointer' } : undefined}\n >\n <FormControlLabel\n label={item.label}\n onClick={e => e.stopPropagation()}\n control={\n <Checkbox\n size=\"small\"\n checked={!hiddenKeys.has(item.key)}\n onChange={(_, checked) => onToggle(item.key, checked)}\n sx={{ '&.Mui-checked': { color: item.color } }}\n />\n }\n sx={{\n '& .MuiFormControlLabel-label': {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n }}\n />\n\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"right\"\n noWrap\n >\n {formatPercentage(item.percentage)}\n </Typography>\n\n <Typography\n variant=\"subtitle2\"\n color=\"text.primary\"\n textAlign=\"right\"\n noWrap\n >\n {fShortenNumber(item.count)}\n </Typography>\n </Stack>\n ))}\n </Scrollbar>\n);\n\nexport default ProfileLegend;\n","export const SEGMENT_COLORS = [\n '#FF5630',\n '#FFAB00',\n '#22C55E',\n '#C4CDD5',\n '#8E33FF',\n '#00B8D9',\n '#3366FF',\n '#FF6C40',\n '#36B37E',\n '#B76E00',\n];\n\nexport const MAX_VISIBLE = 12;\n\nexport interface LegendItem {\n key: string;\n label: string;\n count: number;\n percentage: number;\n color: string;\n}\n\nexport interface LegendProps {\n items: LegendItem[];\n hiddenKeys: Set<string>;\n onToggle: (key: string, checked: boolean) => void;\n onItemClick?: (key: string) => void;\n}\n\nexport interface PartnersByProfileProps {\n data: LegendItem[];\n chartData: SegmentChartItem[];\n total: number;\n isEmptyData: boolean;\n onPieClick?: (_: unknown, index: number) => void;\n onLegendClick?: (key: string) => void;\n hiddenKeys: Set<string>;\n onToggle: (key: string, checked: boolean) => void;\n}\n\nexport interface SegmentChartItem {\n name: string;\n value: number;\n percentage: number;\n fill: string;\n}\n","import Divider from '@mui/material/Divider';\nimport Link from '@mui/material/Link';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport DataView from 'components/DataView';\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport SearchInput from 'components/SearchInput';\nimport useResponsive from 'hooks/useResponsive';\nimport { DashboardPartner } from 'types/partnerAnalysis';\n\nimport Header from './Header';\nimport { PartnersDetailProps } from './props';\n\nconst PartnersDetail = ({\n open,\n onClose,\n title,\n label,\n columns,\n rows,\n totalPartners,\n isLoading,\n isFetching,\n isFetchingNextPage,\n onSearch,\n onRowsScrollEnd,\n sellerName,\n buildSellerLink,\n sellerExternalId,\n mobileRender,\n}: PartnersDetailProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const content = (\n <Stack gap={3}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n justifyContent=\"space-between\"\n alignItems={{ sm: 'center' }}\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={3} flexWrap=\"wrap\">\n {sellerName && sellerExternalId && (\n <>\n {buildSellerLink ? (\n <Link\n component=\"a\"\n href={buildSellerLink(sellerExternalId)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant=\"subtitle2\"\n sx={{ textDecoration: 'underline' }}\n noWrap\n >\n {sellerName}\n </Link>\n ) : (\n <Typography variant=\"subtitle2\" noWrap>\n {sellerName}\n </Typography>\n )}\n\n <Divider orientation=\"vertical\" flexItem />\n </>\n )}\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Total de clientes:\n </Typography>\n\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {totalPartners}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Clientes\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={columns}\n rows={rows}\n getRowId={(row: DashboardPartner) => row.external_id}\n mobileRender={mobileRender}\n loading={isLoading}\n fetching={isFetching && !isFetchingNextPage}\n fetchingNextPage={isFetchingNextPage}\n onRowsScrollEnd={onRowsScrollEnd}\n scrollEndThreshold={600}\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = <Header title={title} label={label} />;\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default PartnersDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { PartnersDetailHeaderProps } from './props';\n\nconst Header = ({ title, label }: PartnersDetailHeaderProps) => (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" noWrap>\n {title}\n </Typography>\n\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n {label}\n </Typography>\n </Stack>\n);\n\nexport default Header;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport DataView from 'components/DataView';\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport SearchInput from 'components/SearchInput';\nimport useResponsive from 'hooks/useResponsive';\nimport { DashboardPartner } from 'types/partnerAnalysis';\n\nimport Header from './Header';\nimport { ProfileDetailProps } from './props';\n\nconst ProfileDetail = ({\n open,\n onClose,\n profileName,\n columns,\n rows,\n totalPartners,\n isLoading,\n isFetching,\n isFetchingNextPage,\n onSearch,\n onRowsScrollEnd,\n mobileRender,\n}: ProfileDetailProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const content = (\n <Stack gap={3}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n justifyContent=\"space-between\"\n alignItems={{ sm: 'center' }}\n gap={2}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={3} flexWrap=\"wrap\">\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Total de clientes:\n </Typography>\n\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {totalPartners}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Clientes\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={columns}\n rows={rows}\n getRowId={(row: DashboardPartner) => row.external_id}\n mobileRender={mobileRender}\n loading={isLoading}\n fetching={isFetching && !isFetchingNextPage}\n fetchingNextPage={isFetchingNextPage}\n onRowsScrollEnd={onRowsScrollEnd}\n scrollEndThreshold={600}\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = <Header profileName={profileName} />;\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default ProfileDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { ProfileDetailHeaderProps } from './props';\n\nconst Header = ({ profileName }: ProfileDetailHeaderProps) => (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" noWrap>\n Clientes por perfil\n </Typography>\n\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n {profileName}\n </Typography>\n </Stack>\n);\n\nexport default Header;\n","import { memo, useCallback, useMemo, useRef, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport Slider from '@mui/material/Slider';\nimport Stack from '@mui/material/Stack';\nimport { ChartCardHeader } from 'components/Analytics/ChartStyles';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport useResponsive from 'hooks/useResponsive';\nimport { RankingItem } from 'types/partnerAnalysis';\nimport { MouseHandlerDataParam } from 'recharts/types/synchronisation/types';\n\nimport RankingChart from './Chart';\nimport RankingLegend from './Legend';\nimport { RankingProps, VisibleSeries } from './props';\n\nconst Ranking = memo(\n ({ data, config, average, onBarClick, children }: RankingProps & { children?: React.ReactNode }) => {\n const isMobile = useResponsive('down', 'sm');\n const isDownLg = useResponsive('down', 'lg');\n\n const [visibleSeries, setVisibleSeries] = useState<VisibleSeries>({\n bar: true,\n average: true,\n });\n const [visibleCount, setVisibleCount] = useState(12);\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n const [activeCoordX, setActiveCoordX] = useState<number | null>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const sortedData = useMemo(\n () =>\n [...data].sort(\n (a, b) => (b[config.dataKey] as number) - (a[config.dataKey] as number),\n ),\n [data, config.dataKey],\n );\n\n const totalItems = sortedData.length;\n\n const maxVisible = useMemo(() => {\n if (isMobile) return 10;\n if (isDownLg) return 25;\n return 30;\n }, [isMobile, isDownLg]);\n\n const showSlider = !isMobile && totalItems > 10;\n const sliderMax = Math.min(totalItems, maxVisible);\n\n const clampedCount = Math.min(\n isMobile ? totalItems : visibleCount,\n totalItems,\n maxVisible,\n );\n\n const displayData = useMemo(\n () => sortedData.slice(0, clampedCount),\n [sortedData, clampedCount],\n );\n\n const shouldRotateLabels = useMemo(() => {\n if (containerWidth === 0 || displayData.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / displayData.length;\n return slotPerBar < 80;\n }, [containerWidth, displayData.length]);\n\n const handleToggleSerie = useCallback((serie: keyof VisibleSeries) => {\n setVisibleSeries(prev => ({ ...prev, [serie]: !prev[serie] }));\n }, []);\n\n const handleChartMouseMove = useCallback((state: MouseHandlerDataParam) => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n if (state?.activeCoordinate?.x != null) {\n setActiveCoordX(state.activeCoordinate.x);\n }\n }, []);\n\n const handleChartMouseLeave = useCallback(() => {\n setActiveBarIndex(null);\n setActiveCoordX(null);\n }, []);\n\n const handleBarClick = useCallback(\n (item: RankingItem) => {\n if (!item) return;\n onBarClick?.(item);\n },\n [onBarClick],\n );\n\n const handleSliderChange = useCallback(\n (_: Event, val: number | number[]) => {\n setVisibleCount(val as number);\n },\n [],\n );\n\n return (\n <ChartCard>\n <ChartCardHeader\n title=\"Ranking de clientes\"\n action={children}\n />\n\n <CardContent>\n <Result isEmpty={displayData.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={1.5}>\n <Stack width=\"100%\" ref={wrapperRefCallback}>\n <RankingChart\n data={displayData}\n config={config}\n visibleSeries={visibleSeries}\n average={average}\n activeBarIndex={activeBarIndex}\n activeCoordX={activeCoordX}\n shouldRotateLabels={shouldRotateLabels}\n onMouseMove={handleChartMouseMove}\n onMouseLeave={handleChartMouseLeave}\n onBarClick={handleBarClick}\n />\n </Stack>\n\n <RankingLegend\n visibleSeries={visibleSeries}\n config={config}\n onToggleSerie={handleToggleSerie}\n />\n\n {showSlider && (\n <Slider\n size=\"small\"\n min={10}\n max={sliderMax}\n value={clampedCount}\n valueLabelDisplay=\"auto\"\n onChange={handleSliderChange}\n />\n )}\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n );\n },\n);\n\nRanking.displayName = 'Ranking';\n\nexport default Ranking;\n","import { useCallback, useMemo } from 'react';\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { BarRectangleItem } from 'recharts/types/cartesian/Bar';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport ReferenceCircle from 'components/Analytics/ReferenceCircle';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { RotatedTickProps } from 'components/Analytics/RotatedTick/props';\nimport WrappedTick from 'components/Analytics/WrappedTick';\nimport { RankingItem } from 'types/partnerAnalysis';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport { AVERAGE_COLOR } from '../props';\n\nimport BarBackground from './BarBackground';\nimport { ChartProps } from './props';\nimport RankingTooltip from './Tooltip';\n\nconst BAR_SIZE = 48;\nconst BAR_SLOT = BAR_SIZE / 0.8;\n\nconst RankingChart = ({\n data,\n config,\n visibleSeries,\n average,\n activeBarIndex,\n activeCoordX,\n shouldRotateLabels,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: ChartProps) => {\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const values = data.map(item => (item[config.dataKey] as number) || 0);\n if (visibleSeries.average && average > 0) values.push(average);\n const max = Math.max(...values);\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data, config.dataKey, average, visibleSeries.average]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const barLabel = useMemo(\n () =>\n shouldRotateLabels\n ? false\n : {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n formatter: (value: unknown) => config.formatLabel(Number(value)),\n },\n [shouldRotateLabels, config],\n );\n\n const tooltipContent = useMemo(\n () => <RankingTooltip config={config} average={average} />,\n [config, average],\n );\n\n const renderXAxisTick = useCallback(\n (tickProps: Record<string, unknown>) => {\n if (shouldRotateLabels) {\n return <RotatedTick {...(tickProps as RotatedTickProps)} />;\n }\n return (\n <WrappedTick\n x={tickProps.x as number}\n y={tickProps.y as number}\n payload={tickProps.payload as { value: string }}\n slotWidth={BAR_SLOT}\n />\n );\n },\n [shouldRotateLabels],\n );\n\n const handleBarClick = useCallback(\n (entry: BarRectangleItem) => {\n if (!entry) return;\n onBarClick(entry as unknown as RankingItem);\n },\n [onBarClick],\n );\n\n return (\n <ChartWrapper>\n <ResponsiveContainer width=\"100%\" height={350}>\n <ComposedChart\n data={data}\n margin={{ top: 20, right: 10, bottom: 0, left: 20 }}\n barCategoryGap=\"20%\"\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"partner_name\"\n axisLine={false}\n tickLine={false}\n interval={0}\n height={shouldRotateLabels ? 70 : 50}\n tick={renderXAxisTick}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={tooltipContent} />\n\n {visibleSeries.average && average > 0 && (\n <ReferenceLine\n y={average}\n stroke={AVERAGE_COLOR}\n strokeDasharray=\"8 4\"\n strokeWidth={2}\n ifOverflow=\"extendDomain\"\n />\n )}\n\n {visibleSeries.average && average > 0 && (\n <ReferenceLine\n y={average}\n stroke=\"none\"\n ifOverflow=\"extendDomain\"\n label={\n <ReferenceCircle\n activeCoordX={activeCoordX}\n referenceCircleColor={AVERAGE_COLOR}\n activeIndex={activeBarIndex}\n />\n }\n />\n )}\n\n {visibleSeries.bar && (\n <Bar\n dataKey={config.dataKey}\n name={config.barName}\n fill={config.color}\n maxBarSize={48}\n isAnimationActive={false}\n radius={[4, 4, 0, 0]}\n cursor=\"pointer\"\n onClick={handleBarClick}\n background={\n <BarBackground\n activeBarIndex={activeBarIndex}\n color={config.color}\n data={data}\n onBarClick={onBarClick}\n />\n }\n label={barLabel}\n />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default RankingChart;\n","import { RankingItem } from 'types/partnerAnalysis';\nimport { RankingType } from 'utils/partnerAnalysis';\nimport { fCurrencyBRL, fShortenNumber } from 'utils/formatNumber';\n\nexport const AVERAGE_COLOR = '#212B36';\n\nexport interface RankingTypeConfig {\n label: string;\n color: string;\n dataKey: keyof RankingItem;\n barName: string;\n averageName: string;\n averageDataKey: string;\n formatLabel: (value: number) => string;\n formatYAxis: (value: number) => string;\n floorAverage?: boolean;\n}\n\nexport interface VisibleSeries {\n bar: boolean;\n average: boolean;\n}\n\nexport interface LegendProps {\n visibleSeries: VisibleSeries;\n config: RankingTypeConfig;\n onToggleSerie: (serie: keyof VisibleSeries) => void;\n}\n\nexport interface RankingProps {\n data: RankingItem[];\n config: RankingTypeConfig;\n average: number;\n isFetching?: boolean;\n onBarClick?: (item: RankingItem) => void;\n}\n\nexport const RANKING_CONFIG: Record<RankingType, RankingTypeConfig> = {\n [RankingType.SALE_TOTAL_VALUE]: {\n label: 'Por valor total',\n color: '#22C55E',\n dataKey: 'total_sale_value',\n barName: 'Valor total por cliente',\n averageName: 'Média total de valor por cliente',\n averageDataKey: 'average_total_value',\n formatLabel: fCurrencyBRL,\n formatYAxis: fShortenNumber,\n },\n [RankingType.SALE_COUNT]: {\n label: 'Por pedidos',\n color: '#C684FF',\n dataKey: 'total_value_by_customer',\n barName: 'Quantidade de pedidos',\n averageName: 'Quantidade total de pedidos',\n averageDataKey: 'average_sale_count',\n formatLabel: String,\n formatYAxis: fShortenNumber,\n floorAverage: true,\n },\n [RankingType.SALE_AVERAGE_VALUE]: {\n label: 'Por ticket médio',\n color: '#00B8D9',\n dataKey: 'total_sale_value',\n barName: 'Ticket médio por cliente',\n averageName: 'Média do ticket médio',\n averageDataKey: 'average_ticket',\n formatLabel: fCurrencyBRL,\n formatYAxis: fShortenNumber,\n },\n};\n","import { BarBackgroundProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index = 0,\n activeBarIndex,\n color,\n data,\n onBarClick,\n}: BarBackgroundProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill={color}\n opacity={0.16}\n rx={6}\n style={{ cursor: 'pointer' }}\n onClick={() => onBarClick(data[index])}\n />\n );\n};\n\nexport default BarBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\n\nimport { AVERAGE_COLOR } from '../props';\n\nimport { CustomTooltipProps } from './props';\n\nconst RankingTooltip = ({\n active,\n payload,\n label,\n config,\n average,\n}: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label}\n </Typography>\n\n <Divider />\n\n <Stack>\n {payload.map((entry, index) => (\n <Stack\n key={entry.dataKey}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n data-testid={`tooltip-item-${index}`}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {config.barName}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\">\n {config.formatLabel(entry.value)}\n </Typography>\n </Stack>\n ))}\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={AVERAGE_COLOR}\n />\n\n <Typography variant=\"body2\" noWrap>\n {config.averageName}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\">{config.formatLabel(average)}</Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default RankingTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { AVERAGE_COLOR, LegendProps } from './props';\n\nconst RankingLegend = ({\n visibleSeries,\n config,\n onToggleSerie,\n}: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.bar}\n onChange={() => onToggleSerie('bar')}\n sx={{ '&.Mui-checked': { color: config.color } }}\n />\n }\n label={config.barName}\n />\n\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.average}\n onChange={() => onToggleSerie('average')}\n sx={{ '&.Mui-checked': { color: AVERAGE_COLOR } }}\n />\n }\n label={config.averageName}\n />\n </Stack>\n);\n\nexport default RankingLegend;\n","import MuiButton from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\n\ninterface ItemButtonProps {\n active?: boolean;\n}\n\nexport const ItemButton = styled(MuiButton, {\n shouldForwardProp: prop => prop !== 'active',\n})<ItemButtonProps>(({ theme, active }) => ({\n justifyContent: 'flex-start',\n\n color: active ? theme.palette.primary.main : theme.palette.text.secondary,\n fontWeight: active ? 800 : 400,\n\n '&:hover': {\n background: theme.palette.action.hover,\n },\n}));\n","import Divider from '@mui/material/Divider';\nimport Link from '@mui/material/Link';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { GridRenderCellParams } from '@mui/x-data-grid-premium';\n\nimport DataView from 'components/DataView';\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport SearchInput from 'components/SearchInput';\nimport useResponsive from 'hooks/useResponsive';\nimport { fCurrencyBRL } from 'utils/formatNumber';\nimport { fDate } from 'utils/formatTime';\n\nimport Header from './Header';\nimport { RankingDetailOrder, RankingDetailProps } from './props';\nimport { MobileItemContainer, StyledDivider } from './styles';\n\nconst getOrderId = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n <Typography variant=\"body2\" color=\"text.primary\">\n {order.id}\n </Typography>\n </Stack>\n);\n\nconst getPartnerName = (\n order: RankingDetailOrder,\n buildPartnerLink?: (partnerId: string) => string,\n) => (\n <Stack justifyContent=\"center\" height={1}>\n {order?.partner?.id && buildPartnerLink ? (\n <Link\n component=\"a\"\n href={buildPartnerLink(order.partner.id)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant=\"subtitle2\"\n sx={{ textDecoration: 'underline' }}\n noWrap\n >\n {order.partner?.name || '-'}\n </Link>\n ) : (\n <Typography variant=\"body2\" color=\"text.primary\" noWrap>\n {order.partner?.name || '-'}\n </Typography>\n )}\n </Stack>\n);\n\nconst getOrderValue = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n <Typography variant=\"body2\" color=\"text.primary\">\n {fCurrencyBRL(order.total_value)}\n </Typography>\n </Stack>\n);\n\nconst getOrderDate = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n {order.negotiation_date ? (\n <Typography variant=\"body2\" color=\"text.primary\">\n {fDate(order.negotiation_date, 'DD/MM/YYYY')}\n </Typography>\n ) : (\n '-'\n )}\n </Stack>\n);\n\nconst getOrderStatus = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n {order.status || '-'}\n </Stack>\n);\n\nconst getDefaultMobileRender = (order: RankingDetailOrder) => (\n <MobileItemContainer key={order.id}>\n <Stack gap={1}>\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Pedido\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {order.id}\n </Typography>\n </Stack>\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Cliente\n </Typography>\n <Typography variant=\"subtitle2\" color=\"primary.main\">\n {order.partner?.name || '-'}\n </Typography>\n </Stack>\n\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack flex={1} overflow=\"hidden\">\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n Valor do pedido\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\" noWrap>\n {fCurrencyBRL(order.total_value)}\n </Typography>\n </Stack>\n\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{ borderStyle: 'dashed', mx: 3 }}\n />\n\n <Stack flex={1} overflow=\"hidden\">\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n Data\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\" noWrap>\n {order.negotiation_date\n ? fDate(order.negotiation_date, 'DD/MM/YYYY')\n : '-'}\n </Typography>\n </Stack>\n </Stack>\n\n <Stack gap={0.5}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Status\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {order.status || '-'}\n </Typography>\n </Stack>\n </Stack>\n </MobileItemContainer>\n);\n\nconst RankingDetail = ({\n open,\n onClose,\n partnerName,\n rankingLabel,\n rows,\n total,\n totalValue,\n averageTicket,\n isLoading,\n isFetching,\n page,\n perPage,\n onSearch,\n onPaginationChange,\n buildPartnerLink,\n mobileItemSlot,\n}: RankingDetailProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const content = (\n <Stack gap={3}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n justifyContent=\"space-between\"\n gap={2}\n >\n <Stack\n minWidth={0}\n direction=\"row\"\n alignItems=\"center\"\n gap={3}\n flexWrap=\"wrap\"\n >\n <Typography variant=\"subtitle2\" noWrap>\n {partnerName}\n </Typography>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Qtd. de pedidos\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {total}\n </Typography>\n </Stack>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Valor em pedidos\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {fCurrencyBRL(totalValue)}\n </Typography>\n </Stack>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Ticket médio\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {fCurrencyBRL(averageTicket)}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Pedidos\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={[\n {\n field: 'external_id',\n headerName: 'Pedido',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderId(row),\n },\n {\n field: 'partner_name',\n headerName: 'Cliente',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) =>\n getPartnerName(row, buildPartnerLink),\n },\n {\n field: 'total_value',\n headerName: 'Valor do pedido',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderValue(row),\n },\n {\n field: 'created_at',\n headerName: 'Data',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderDate(row),\n },\n {\n field: 'last_status',\n headerName: 'Status',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderStatus(row),\n },\n ]}\n rows={rows}\n rowCount={total}\n mobileRender={(data: RankingDetailOrder) =>\n mobileItemSlot ? mobileItemSlot(data) : getDefaultMobileRender(data)\n }\n loading={isLoading}\n fetching={isFetching}\n paginationModel={{ page, pageSize: perPage }}\n onPaginationChange={onPaginationChange}\n paginationMode=\"server\"\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = (\n <Header rankingLabel={rankingLabel} partnerName={partnerName} />\n );\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default RankingDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { RankingDetailHeaderProps } from './props';\n\nconst Header = ({ rankingLabel, partnerName }: RankingDetailHeaderProps) => (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" noWrap>\n Detalhes do relatório\n </Typography>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n columnGap={1.5}\n rowGap={0}\n flexWrap=\"wrap\"\n >\n <Typography variant=\"body2\" color=\"text.secondary\" flexShrink={0}>\n Top clientes\n </Typography>\n &#x2022;\n <Typography variant=\"body2\" flexShrink={0}>\n Por &quot;{rankingLabel}&quot;\n </Typography>\n &#x2022;\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n {partnerName}\n </Typography>\n </Stack>\n </Stack>\n);\n\nexport default Header;\n","import MuiDivider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport { alpha, styled } from '@mui/material/styles';\n\nexport const StyledDivider = styled(MuiDivider)(() => ({\n height: 30,\n alignSelf: 'center',\n borderStyle: 'dashed',\n}));\n\nexport const MobileItemContainer = styled(Stack)(({ theme }) => ({\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(2),\n gap: theme.spacing(1),\n color: theme.palette.text.primary,\n\n '& a': {\n textDecoration: 'none',\n },\n\n '&+div': {\n borderTop: `1px dashed ${alpha(theme.palette.grey[500], 0.2)}`,\n },\n}));\n","import { useCallback, useMemo, useRef, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport Slider from '@mui/material/Slider';\nimport Stack from '@mui/material/Stack';\nimport { ChartCard, ChartCardHeader } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport useResponsive from 'hooks/useResponsive';\nimport { MouseHandlerDataParam } from 'recharts/types/synchronisation/types';\n\nimport SellerPortfolioChart from './Chart';\nimport SellerPortfolioLegend from './Legend';\nimport { ChartDataRow, SellerPortfolioProps } from './props';\n\nconst SellerPortfolio = ({\n data,\n config,\n onBarClick,\n children,\n}: SellerPortfolioProps) => {\n const isMobile = useResponsive('down', 'sm');\n const isDownLg = useResponsive('down', 'lg');\n\n const [hiddenKeys, setHiddenKeys] = useState<Set<string>>(new Set());\n const [visibleCount, setVisibleCount] = useState(12);\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const sortedData = useMemo(\n () => [...data].sort((a, b) => b._total - a._total),\n [data],\n );\n\n const maxVisible = useMemo(() => {\n if (isMobile) return 10;\n if (isDownLg) return 25;\n return 30;\n }, [isDownLg, isMobile]);\n\n const totalItems = sortedData.length;\n const showSlider = !isMobile && totalItems > 10;\n const sliderMax = Math.min(totalItems, maxVisible);\n\n const clampedCount = Math.min(\n isMobile ? totalItems : visibleCount,\n totalItems,\n maxVisible,\n );\n\n const displayData = useMemo(\n () => sortedData.slice(0, clampedCount),\n [sortedData, clampedCount],\n );\n\n const shouldRotateLabels = useMemo(() => {\n if (containerWidth === 0 || displayData.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / displayData.length;\n return slotPerBar < 80;\n }, [containerWidth, displayData.length]);\n\n const visibleSeries = useMemo(\n () => config.series.filter(s => !hiddenKeys.has(s.dataKey)),\n [config.series, hiddenKeys],\n );\n\n const displayDataWithTotals = useMemo(\n () =>\n displayData.map(item => ({\n ...item,\n _visibleTotal: visibleSeries.reduce(\n (sum, s) => sum + (Number(item[s.dataKey]) || 0),\n 0,\n ),\n })),\n [displayData, visibleSeries],\n );\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const handleToggleSerie = useCallback((dataKey: string) => {\n setHiddenKeys(prev => {\n const next = new Set(prev);\n if (next.has(dataKey)) next.delete(dataKey);\n else next.add(dataKey);\n return next;\n });\n }, []);\n\n const handleMouseMove = useCallback((state: MouseHandlerDataParam) => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setActiveBarIndex(null);\n }, []);\n\n const handleBarClick = useCallback(\n (sellerId: string, sellerName: string) => {\n onBarClick?.(sellerId, sellerName);\n },\n [onBarClick],\n );\n\n const handleSliderChange = useCallback(\n (_: Event, val: number | number[]) => {\n setVisibleCount(val as number);\n },\n [],\n );\n\n return (\n <ChartCard>\n <ChartCardHeader\n title=\"Carteira de clientes do vendedor\"\n action={children}\n />\n\n <CardContent>\n <Result isEmpty={displayData.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={1.5}>\n <Stack width=\"100%\" ref={wrapperRefCallback}>\n <SellerPortfolioChart\n data={displayDataWithTotals}\n config={config}\n visibleSeries={visibleSeries}\n hiddenKeys={hiddenKeys}\n activeBarIndex={activeBarIndex}\n shouldRotateLabels={shouldRotateLabels}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onBarClick={handleBarClick}\n />\n </Stack>\n\n <SellerPortfolioLegend\n series={config.series}\n hiddenKeys={hiddenKeys}\n onToggleSerie={handleToggleSerie}\n />\n\n {showSlider && (\n <Slider\n size=\"small\"\n min={10}\n max={sliderMax}\n value={clampedCount}\n valueLabelDisplay=\"auto\"\n onChange={handleSliderChange}\n />\n )}\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n );\n};\n\nexport default SellerPortfolio;\n","import { type ReactElement, useCallback, useMemo } from 'react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { BarRectangleItem } from 'recharts/types/cartesian/Bar';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { RotatedTickProps } from 'components/Analytics/RotatedTick/props';\nimport WrappedTick from 'components/Analytics/WrappedTick';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport BarBackground from './BarBackground';\nimport { ChartProps } from './props';\nimport StackedTooltip from './Tooltip';\n\nconst BAR_SIZE = 48;\nconst BAR_SLOT = BAR_SIZE / 0.8;\n\nconst SellerPortfolioChart = ({\n data,\n config,\n visibleSeries,\n hiddenKeys,\n activeBarIndex,\n shouldRotateLabels,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: ChartProps) => {\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const max = Math.max(...data.map(item => item._visibleTotal));\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const tooltipContent = useMemo(\n () => <StackedTooltip config={config} />,\n [config],\n );\n\n const renderXAxisTick = useCallback(\n (tickProps: Record<string, unknown>) => {\n if (shouldRotateLabels) {\n return <RotatedTick {...(tickProps as RotatedTickProps)} />;\n }\n return (\n <WrappedTick\n x={tickProps.x as number}\n y={tickProps.y as number}\n payload={tickProps.payload as { value: string }}\n slotWidth={BAR_SLOT}\n />\n );\n },\n [shouldRotateLabels],\n );\n\n const handleBarClick = useCallback(\n (entry: BarRectangleItem) => {\n if (!entry) return;\n const row = entry.payload as Record<string, unknown> | undefined;\n if (!row) return;\n onBarClick(String(row.seller_external_id), String(row.seller_name));\n },\n [onBarClick],\n );\n\n const renderLabel = useCallback(\n (props: Record<string, unknown>) => {\n const { x, y, width, index } = props as {\n x: number;\n y: number;\n width: number;\n index: number;\n };\n const total = data[index]?._visibleTotal;\n if (!total) return <></>;\n return (\n <text\n x={(x as number) + (width as number) / 2}\n y={(y as number) - 6}\n textAnchor=\"middle\"\n fontSize={11}\n fill=\"#212B36\"\n >\n {total}\n </text>\n );\n },\n [data],\n );\n\n return (\n <ChartWrapper>\n <ResponsiveContainer width=\"100%\" height={350}>\n <BarChart\n data={data}\n margin={{ top: 20, right: 10, bottom: 0, left: 20 }}\n barCategoryGap=\"20%\"\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"seller_name\"\n axisLine={false}\n tickLine={false}\n interval={0}\n height={shouldRotateLabels ? 70 : 50}\n tick={renderXAxisTick}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={tooltipContent} cursor={false} />\n\n {config.series.map(s => {\n const visible = !hiddenKeys.has(s.dataKey);\n const firstVisible = visibleSeries[0];\n const lastVisible = visibleSeries[visibleSeries.length - 1];\n const isFirst = visible && s.dataKey === firstVisible?.dataKey;\n const isLast = visible && s.dataKey === lastVisible?.dataKey;\n\n return (\n <Bar\n key={s.dataKey}\n dataKey={visible ? s.dataKey : `_hidden_${s.dataKey}`}\n name={s.name}\n fill={s.color}\n stackId=\"stack\"\n maxBarSize={48}\n isAnimationActive={false}\n cursor=\"pointer\"\n hide={!visible}\n onClick={handleBarClick}\n {...(isFirst && {\n background: (\n <BarBackground\n activeBarIndex={activeBarIndex}\n data={data}\n onBarClick={onBarClick}\n />\n ),\n })}\n {...(isLast && { radius: [4, 4, 0, 0] as [number, number, number, number] })}\n {...(isLast &&\n !shouldRotateLabels && {\n label: {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n content: renderLabel as unknown as ReactElement,\n },\n })}\n />\n );\n })}\n </BarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default SellerPortfolioChart;\n","import { BarBackgroundProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index = 0,\n activeBarIndex,\n data,\n onBarClick,\n}: BarBackgroundProps) => {\n if (activeBarIndex !== index) return null;\n\n const entry = data[index];\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill=\"#919EAB\"\n opacity={0.16}\n rx={6}\n style={{ cursor: 'pointer' }}\n onClick={() => {\n if (!entry) return;\n onBarClick(\n String(entry.seller_external_id),\n String(entry.seller_name),\n );\n }}\n />\n );\n};\n\nexport default BarBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { StackedTooltipProps, TooltipPayloadEntry } from './props';\n\nconst formatPct = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst StackedTooltip = ({\n active,\n payload,\n label,\n config,\n}: StackedTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const visibleEntries = payload.filter(\n entry => entry.value != null && entry.value > 0,\n );\n\n const total = visibleEntries.reduce(\n (sum: number, entry: TooltipPayloadEntry) => sum + entry.value,\n 0,\n );\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label}\n </Typography>\n\n <Divider />\n\n <Stack>\n {visibleEntries.map((entry: TooltipPayloadEntry) => {\n const series = config.series.find(s => s.dataKey === entry.dataKey);\n const pct = total > 0 ? formatPct((entry.value / total) * 100) : '0%';\n\n return (\n <Stack\n key={entry.dataKey}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {series?.name ?? entry.dataKey}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {pct} ({entry.value})\n </Typography>\n </Stack>\n );\n })}\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPct(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default StackedTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { LegendProps } from './props';\n\nconst SellerPortfolioLegend = ({\n series,\n hiddenKeys,\n onToggleSerie,\n}: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n {series.map(s => (\n <FormControlLabel\n key={s.dataKey}\n control={\n <Checkbox\n checked={!hiddenKeys.has(s.dataKey)}\n onChange={() => onToggleSerie(s.dataKey)}\n sx={{ '&.Mui-checked': { color: s.color } }}\n />\n }\n label={s.name}\n />\n ))}\n </Stack>\n);\n\nexport default SellerPortfolioLegend;\n","import { AbcCurve, SellerPortfolioQueryType, Status } from 'utils/partnerAnalysis';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nexport interface StackedBarSeries {\n dataKey: string;\n name: string;\n color: string;\n}\n\nexport interface SellerPortfolioTypeConfig {\n label: string;\n series: StackedBarSeries[];\n formatYAxis: (value: number) => string;\n}\n\nexport interface ChartDataRow extends Record<string, string | number> {\n seller_name: string;\n seller_external_id: string;\n _total: number;\n}\n\nexport interface DisplayDataRow extends ChartDataRow {\n _visibleTotal: number;\n}\n\nexport interface SelectedSeller {\n id: string;\n name: string;\n}\n\nexport interface LegendProps {\n series: StackedBarSeries[];\n hiddenKeys: Set<string>;\n onToggleSerie: (dataKey: string) => void;\n}\n\nexport interface SellerPortfolioProps {\n data: ChartDataRow[];\n config: SellerPortfolioTypeConfig;\n onBarClick?: (sellerId: string, sellerName: string) => void;\n children?: React.ReactNode;\n}\n\nconst CLASSIFICATION_SERIES: StackedBarSeries[] = [\n { dataKey: Status.ACTIVE, name: 'Ativos', color: '#22C55E' },\n { dataKey: Status.AT_RISK, name: 'Em risco', color: '#FFAB00' },\n { dataKey: Status.INACTIVE, name: 'Inativos', color: '#FF5630' },\n { dataKey: Status.NEW_CLIENT, name: 'Novos clientes', color: '#8E33FF' },\n { dataKey: Status.PROSPECT, name: 'Prospects', color: '#00B8D9' },\n { dataKey: Status.LOST, name: 'Perdidos', color: '#C4CDD5' },\n];\n\nconst ABC_CURVE_SERIES: StackedBarSeries[] = [\n { dataKey: AbcCurve.A, name: 'Curva A', color: '#22C55E' },\n { dataKey: AbcCurve.B, name: 'Curva B', color: '#FFAB00' },\n { dataKey: AbcCurve.C, name: 'Curva C', color: '#FF5630' },\n];\n\nexport const SELLER_PORTFOLIO_CONFIG: Record<\n SellerPortfolioQueryType,\n SellerPortfolioTypeConfig\n> = {\n [SellerPortfolioQueryType.CLASSIFICATION]: {\n label: 'Por classificação',\n series: CLASSIFICATION_SERIES,\n formatYAxis: fShortenNumber,\n },\n [SellerPortfolioQueryType.ABC_CURVE]: {\n label: 'Por curva ABC',\n series: ABC_CURVE_SERIES,\n formatYAxis: fShortenNumber,\n },\n};\n"]}
1
+ {"version":3,"sources":["../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/PieLabel.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/props.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnersDetail/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersDetail/Header.tsx","../../../../src/components/Analytics/PartnerAnalysis/ProfileDetail/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/ProfileDetail/Header.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/props.ts","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/BarBackground.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/RankingDetail/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/RankingDetail/Header.tsx","../../../../src/components/Analytics/PartnerAnalysis/RankingDetail/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/BarBackground.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/props.ts"],"names":["CardContent","CardHeader","Stack","Pie","PieChart","ResponsiveContainer","Tooltip","styled","ChartContainer","theme","Divider","Typography","jsx","jsxs","formatPercentage","value","fPercent","PieChartTooltip","active","payload","total","entry","SimpleCard_default","Tooltip_default","PieChartBreakdown","chartData","isEmptyData","onPieClick","clickable","fNumber","Chart_default","Checkbox","FormControlLabel","PieChartLegend","items","hiddenKeys","onToggle","onItemClick","item","e","_","checked","fShortenNumber","Legend_default","PartnerBreakdown","title","legendItems","ChartCard","PartnerBreakdown_default","RADIAN","LABEL_OFFSET","MIN_PERCENTAGE","PieLabel","props","cx","cy","midAngle","outerRadius","percentage","cxNum","cyNum","outerR","angle","sin","cos","x1","y1","xMid","yMid","side","xEnd","yEnd","label","badgeW","badgeX","PieLabel_default","ProfileTooltip","renderLabel","ProfileChart","ProfileLegend","Scrollbar_default","PartnersByProfile","data","onLegendClick","Result_default","EmptyState_default","PartnersByProfile_default","SEGMENT_COLORS","MAX_VISIBLE","Link","Header","Header_default","Fragment","PartnersDetail","open","onClose","columns","rows","totalPartners","isLoading","isFetching","isFetchingNextPage","onSearch","onRowsScrollEnd","sellerName","buildSellerLink","sellerExternalId","mobileRender","isMobile","useResponsive_default","content","SearchInput_default","DataView_default","row","header","Drawer_default","Modal_default","PartnersDetail_default","profileName","ProfileDetail","ProfileDetail_default","memo","useCallback","useMemo","useRef","useState","Slider","Bar","CartesianGrid","ComposedChart","ReferenceLine","XAxis","YAxis","AVERAGE_COLOR","RANKING_CONFIG","fCurrencyBRL","BarBackground","x","y","width","height","index","activeBarIndex","color","onBarClick","BarBackground_default","RankingTooltip","config","average","BAR_SIZE","BAR_SLOT","RankingChart","visibleSeries","activeCoordX","shouldRotateLabels","onMouseMove","onMouseLeave","yDomain","values","max","yTicks","step","i","barLabel","tooltipContent","renderXAxisTick","tickProps","RotatedTick_default","WrappedTick_default","handleBarClick","ChartWrapper","v","ReferenceCircle_default","RankingLegend","onToggleSerie","Ranking","children","isDownLg","setVisibleSeries","visibleCount","setVisibleCount","setActiveBarIndex","setActiveCoordX","containerWidth","setContainerWidth","observerRef","wrapperRefCallback","node","sortedData","a","b","totalItems","maxVisible","showSlider","sliderMax","clampedCount","displayData","handleToggleSerie","serie","prev","handleChartMouseMove","state","handleChartMouseLeave","handleSliderChange","val","ChartCardHeader","Ranking_default","MuiButton","ItemButton","prop","rankingLabel","partnerName","MuiDivider","alpha","StyledDivider","MobileItemContainer","getOrderId","order","getPartnerName","buildPartnerLink","getOrderValue","getOrderDate","fDate","getOrderStatus","getDefaultMobileRender","RankingDetail","totalValue","averageTicket","page","perPage","onPaginationChange","mobileItemSlot","RankingDetail_default","BarChart","formatPct","StackedTooltip","visibleEntries","sum","series","s","pct","SellerPortfolioChart","visible","firstVisible","lastVisible","isFirst","isLast","SellerPortfolioLegend","SellerPortfolio","setHiddenKeys","displayDataWithTotals","dataKey","next","handleMouseMove","handleMouseLeave","sellerId","SellerPortfolio_default","CLASSIFICATION_SERIES","ABC_CURVE_SERIES","SELLER_PORTFOLIO_CONFIG"],"mappings":"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","sourcesContent":["import CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\n\nimport { ChartCard } from 'components/Analytics/ChartStyles';\n\nimport PieChartBreakdown from './Chart';\nimport PieChartLegend from './Legend';\nimport { PartnerBreakdownProps } from './props';\n\nconst PartnerBreakdown = ({\n title,\n chartData,\n total,\n isEmptyData,\n legendItems,\n hiddenKeys,\n onToggle,\n onPieClick,\n onItemClick,\n}: PartnerBreakdownProps) => (\n <ChartCard>\n <CardHeader title={title} />\n\n <CardContent>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n alignItems=\"center\"\n gap={1.5}\n minWidth={0}\n >\n <PieChartBreakdown\n chartData={chartData}\n total={total}\n isEmptyData={isEmptyData}\n onPieClick={onPieClick}\n clickable={!!onPieClick}\n />\n\n <PieChartLegend\n items={legendItems}\n hiddenKeys={hiddenKeys}\n onToggle={onToggle}\n onItemClick={onItemClick}\n />\n </Stack>\n </CardContent>\n </ChartCard>\n);\n\nexport default PartnerBreakdown;\n","import { Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts';\n\nimport { fNumber } from 'utils/formatNumber';\n\nimport { ChartProps } from '../props';\n\nimport { ChartContainer } from './styles';\nimport PieChartTooltip from './Tooltip';\n\nconst PieChartBreakdown = ({\n chartData,\n total,\n isEmptyData,\n onPieClick,\n clickable,\n}: ChartProps) => (\n <ChartContainer>\n <ResponsiveContainer width={200} height={200}>\n <PieChart>\n <Pie\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={60}\n outerRadius={90}\n paddingAngle={2}\n strokeWidth={0}\n isAnimationActive={false}\n onClick={onPieClick}\n cursor={clickable ? 'pointer' : undefined}\n />\n\n <text\n x=\"50%\"\n y=\"46%\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 24, fontWeight: 700 }}\n >\n {fNumber(total)}\n </text>\n\n <text\n x=\"50%\"\n y=\"58%\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 12, fill: '#919EAB' }}\n >\n clientes\n </text>\n\n {!isEmptyData && (\n <Tooltip content={<PieChartTooltip total={total} />} />\n )}\n </PieChart>\n </ResponsiveContainer>\n </ChartContainer>\n);\n\nexport default PieChartBreakdown;\n","import Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const ChartContainer = styled(Stack)(({ theme }) => ({\n position: 'relative',\n alignSelf: 'flex-start',\n\n flexShrink: 0,\n\n '& .recharts-wrapper, & .recharts-wrapper *': {\n outline: 'none !important',\n boxShadow: 'none !important',\n },\n\n '& .recharts-pie-sector': {\n cursor: 'pointer',\n },\n\n [theme.breakpoints.down('md')]: {\n alignSelf: 'center',\n },\n}));\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from '../props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst PieChartTooltip = ({ active, payload, total }: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const entry = payload[0];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {entry.name}\n </Typography>\n\n <Divider />\n\n <Stack>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.payload.fill}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(entry.payload.percentage)} ({entry.value})\n </Typography>\n </Stack>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default PieChartTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { fPercent, fShortenNumber } from 'utils/formatNumber';\n\nimport { LegendProps } from './props';\n\nconst PieChartLegend = ({\n items,\n hiddenKeys,\n onToggle,\n onItemClick,\n}: LegendProps) => (\n <Stack width=\"100%\" justifyContent=\"center\">\n {items.map(item => (\n <Stack\n key={item.key}\n display=\"grid\"\n gridTemplateColumns=\"1fr auto auto\"\n alignItems=\"center\"\n gap={1.5}\n onClick={() => onItemClick?.(item.key, item.label)}\n sx={{\n ...(onItemClick ? { cursor: 'pointer' } : {}),\n }}\n >\n <FormControlLabel\n label={item.label}\n onClick={e => e.stopPropagation()}\n control={\n <Checkbox\n size=\"small\"\n checked={!hiddenKeys.has(item.key)}\n onChange={(_, checked) => onToggle(item.key, checked)}\n sx={{ '&.Mui-checked': { color: item.color } }}\n />\n }\n sx={{\n '& .MuiFormControlLabel-label': {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n }}\n />\n\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"right\"\n noWrap\n >\n {fPercent(item.percentage, {\n maximumFractionDigits: 2,\n ...(item.percentage > 0 && item.percentage < 100\n ? { minimumFractionDigits: 2 }\n : {}),\n })}\n </Typography>\n\n <Typography\n variant=\"subtitle2\"\n color=\"text.primary\"\n textAlign=\"right\"\n noWrap\n >\n {fShortenNumber(item.count)}\n </Typography>\n </Stack>\n ))}\n </Stack>\n);\n\nexport default PieChartLegend;\n","import CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\n\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\n\nimport ProfileChart from './Chart';\nimport ProfileLegend from './Legend';\nimport { PartnersByProfileProps } from './props';\n\nconst PartnersByProfile = ({\n data,\n chartData,\n total,\n isEmptyData,\n onPieClick,\n onLegendClick,\n hiddenKeys,\n onToggle,\n}: PartnersByProfileProps) => (\n <ChartCard>\n <CardHeader title=\"Clientes por segmentos\" />\n\n <CardContent>\n <Result isEmpty={data.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={2}>\n <ProfileChart\n chartData={chartData}\n total={total}\n isEmptyData={isEmptyData}\n onPieClick={onPieClick}\n />\n\n <ProfileLegend\n items={data}\n hiddenKeys={hiddenKeys}\n onToggle={onToggle}\n onItemClick={onLegendClick}\n />\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n);\n\nexport default PartnersByProfile;\n","import { PieLabelRenderProps } from 'recharts';\nimport { Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts';\n\nimport PieLabel from './PieLabel';\nimport { ChartProps } from './props';\nimport { ChartContainer } from './styles';\nimport ProfileTooltip from './Tooltip';\n\nconst renderLabel = (props: PieLabelRenderProps) => <PieLabel {...props} />;\n\nconst ProfileChart = ({\n chartData,\n total,\n isEmptyData,\n onPieClick,\n}: ChartProps) => (\n <ChartContainer>\n <ResponsiveContainer width={280} height={280}>\n <PieChart>\n <Pie\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n outerRadius={90}\n paddingAngle={1}\n strokeWidth={0}\n isAnimationActive={false}\n label={isEmptyData ? false : renderLabel}\n labelLine={false}\n onClick={onPieClick}\n cursor={onPieClick ? 'pointer' : undefined}\n />\n\n {!isEmptyData && (\n <Tooltip content={<ProfileTooltip total={total} />} />\n )}\n </PieChart>\n </ResponsiveContainer>\n </ChartContainer>\n);\n\nexport default ProfileChart;\n","import { PieLabelRenderProps } from 'recharts';\n\nimport { fPercent } from 'utils/formatNumber';\n\nconst RADIAN = Math.PI / 180;\nconst LABEL_OFFSET = 22;\nconst MIN_PERCENTAGE = 2;\n\nconst PieLabel = (props: PieLabelRenderProps) => {\n const { cx, cy, midAngle, outerRadius, percentage } =\n props as PieLabelRenderProps & { percentage: number };\n\n if (percentage < MIN_PERCENTAGE) return null;\n\n const cxNum = Number(cx);\n const cyNum = Number(cy);\n const outerR = Number(outerRadius);\n const angle = Number(midAngle);\n\n if (isNaN(cxNum) || isNaN(cyNum) || isNaN(outerR)) return null;\n\n const sin = Math.sin(-angle * RADIAN);\n const cos = Math.cos(-angle * RADIAN);\n\n const x1 = cxNum + outerR * cos;\n const y1 = cyNum + outerR * sin;\n\n const xMid = cxNum + (outerR + LABEL_OFFSET * 0.5) * cos;\n const yMid = cyNum + (outerR + LABEL_OFFSET * 0.5) * sin;\n\n const side = cos >= 0 ? 1 : -1;\n const xEnd = xMid + side * 10;\n const yEnd = yMid;\n\n const label = fPercent(percentage, {\n maximumFractionDigits: 1,\n ...(percentage > 0 && percentage < 100 ? { minimumFractionDigits: 1 } : {}),\n });\n\n const badgeW = label.length * 7 + 10;\n const badgeX = side === 1 ? xEnd + 2 : xEnd - badgeW - 2;\n\n return (\n <g>\n <path\n d={`M${x1},${y1} L${xMid},${yMid} L${xEnd},${yEnd}`}\n stroke=\"#637381\"\n fill=\"none\"\n strokeWidth={1}\n />\n\n <rect\n x={badgeX}\n y={yEnd - 10}\n width={badgeW}\n height={20}\n rx={4}\n fill=\"#212B36\"\n />\n\n <text\n x={badgeX + badgeW / 2}\n y={yEnd}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={11}\n fontWeight={600}\n fill=\"#FFFFFF\"\n >\n {label}\n </text>\n </g>\n );\n};\n\nexport default PieLabel;\n","import Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const ChartContainer = styled(Stack)({\n position: 'relative',\n alignItems: 'center',\n justifyContent: 'center',\n\n '& .recharts-wrapper, & .recharts-wrapper *': {\n outline: 'none !important',\n boxShadow: 'none !important',\n },\n\n '& .recharts-wrapper': {\n overflow: 'visible !important',\n },\n\n '& .recharts-wrapper svg': {\n overflow: 'visible',\n },\n\n '& .recharts-pie-sector': {\n cursor: 'pointer',\n },\n});\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from './props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst ProfileTooltip = ({ active, payload, total }: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const entry = payload[0];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {entry.name}\n </Typography>\n\n <Divider />\n\n <Stack>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.payload.fill}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(entry.payload.percentage)} ({entry.value})\n </Typography>\n </Stack>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default ProfileTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Scrollbar from 'components/Scrollbar';\nimport { fPercent, fShortenNumber } from 'utils/formatNumber';\n\nimport { LegendProps } from './props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst ProfileLegend = ({\n items,\n hiddenKeys,\n onToggle,\n onItemClick,\n}: LegendProps) => (\n <Scrollbar sx={{ maxHeight: 280, width: '100%', pl: 0.5 }}>\n {items.map(item => (\n <Stack\n key={item.key}\n display=\"grid\"\n gridTemplateColumns=\"1fr auto auto\"\n alignItems=\"center\"\n gap={1.5}\n onClick={() => onItemClick?.(item.key)}\n sx={onItemClick ? { cursor: 'pointer' } : undefined}\n >\n <FormControlLabel\n label={item.label}\n onClick={e => e.stopPropagation()}\n control={\n <Checkbox\n size=\"small\"\n checked={!hiddenKeys.has(item.key)}\n onChange={(_, checked) => onToggle(item.key, checked)}\n sx={{ '&.Mui-checked': { color: item.color } }}\n />\n }\n sx={{\n '& .MuiFormControlLabel-label': {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n }}\n />\n\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"right\"\n noWrap\n >\n {formatPercentage(item.percentage)}\n </Typography>\n\n <Typography\n variant=\"subtitle2\"\n color=\"text.primary\"\n textAlign=\"right\"\n noWrap\n >\n {fShortenNumber(item.count)}\n </Typography>\n </Stack>\n ))}\n </Scrollbar>\n);\n\nexport default ProfileLegend;\n","export const SEGMENT_COLORS = [\n '#FF5630',\n '#FFAB00',\n '#22C55E',\n '#C4CDD5',\n '#8E33FF',\n '#00B8D9',\n '#3366FF',\n '#FF6C40',\n '#36B37E',\n '#B76E00',\n];\n\nexport const MAX_VISIBLE = 12;\n\nexport interface LegendItem {\n key: string;\n label: string;\n count: number;\n percentage: number;\n color: string;\n}\n\nexport interface LegendProps {\n items: LegendItem[];\n hiddenKeys: Set<string>;\n onToggle: (key: string, checked: boolean) => void;\n onItemClick?: (key: string) => void;\n}\n\nexport interface PartnersByProfileProps {\n data: LegendItem[];\n chartData: SegmentChartItem[];\n total: number;\n isEmptyData: boolean;\n onPieClick?: (_: unknown, index: number) => void;\n onLegendClick?: (key: string) => void;\n hiddenKeys: Set<string>;\n onToggle: (key: string, checked: boolean) => void;\n}\n\nexport interface SegmentChartItem {\n name: string;\n value: number;\n percentage: number;\n fill: string;\n}\n","import Divider from '@mui/material/Divider';\nimport Link from '@mui/material/Link';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport DataView from 'components/DataView';\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport SearchInput from 'components/SearchInput';\nimport useResponsive from 'hooks/useResponsive';\nimport { DashboardPartner } from 'types/partnerAnalysis';\n\nimport Header from './Header';\nimport { PartnersDetailProps } from './props';\n\nconst PartnersDetail = ({\n open,\n onClose,\n title,\n label,\n columns,\n rows,\n totalPartners,\n isLoading,\n isFetching,\n isFetchingNextPage,\n onSearch,\n onRowsScrollEnd,\n sellerName,\n buildSellerLink,\n sellerExternalId,\n mobileRender,\n}: PartnersDetailProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const content = (\n <Stack gap={3}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n justifyContent=\"space-between\"\n alignItems={{ sm: 'center' }}\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={3} flexWrap=\"wrap\">\n {sellerName && sellerExternalId && (\n <>\n {buildSellerLink ? (\n <Link\n component=\"a\"\n href={buildSellerLink(sellerExternalId)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant=\"subtitle2\"\n sx={{ textDecoration: 'underline' }}\n noWrap\n >\n {sellerName}\n </Link>\n ) : (\n <Typography variant=\"subtitle2\" noWrap>\n {sellerName}\n </Typography>\n )}\n\n <Divider orientation=\"vertical\" flexItem />\n </>\n )}\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Total de clientes:\n </Typography>\n\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {totalPartners}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Clientes\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={columns}\n rows={rows}\n getRowId={(row: DashboardPartner) => row.external_id}\n mobileRender={mobileRender}\n loading={isLoading}\n fetching={isFetching && !isFetchingNextPage}\n fetchingNextPage={isFetchingNextPage}\n onRowsScrollEnd={onRowsScrollEnd}\n scrollEndThreshold={600}\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = <Header title={title} label={label} />;\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default PartnersDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { PartnersDetailHeaderProps } from './props';\n\nconst Header = ({ title, label }: PartnersDetailHeaderProps) => (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" noWrap>\n {title}\n </Typography>\n\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n {label}\n </Typography>\n </Stack>\n);\n\nexport default Header;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport DataView from 'components/DataView';\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport SearchInput from 'components/SearchInput';\nimport useResponsive from 'hooks/useResponsive';\nimport { DashboardPartner } from 'types/partnerAnalysis';\n\nimport Header from './Header';\nimport { ProfileDetailProps } from './props';\n\nconst ProfileDetail = ({\n open,\n onClose,\n profileName,\n columns,\n rows,\n totalPartners,\n isLoading,\n isFetching,\n isFetchingNextPage,\n onSearch,\n onRowsScrollEnd,\n mobileRender,\n}: ProfileDetailProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const content = (\n <Stack gap={3}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n justifyContent=\"space-between\"\n alignItems={{ sm: 'center' }}\n gap={2}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={3} flexWrap=\"wrap\">\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Total de clientes:\n </Typography>\n\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {totalPartners}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Clientes\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={columns}\n rows={rows}\n getRowId={(row: DashboardPartner) => row.external_id}\n mobileRender={mobileRender}\n loading={isLoading}\n fetching={isFetching && !isFetchingNextPage}\n fetchingNextPage={isFetchingNextPage}\n onRowsScrollEnd={onRowsScrollEnd}\n scrollEndThreshold={600}\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = <Header profileName={profileName} />;\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default ProfileDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { ProfileDetailHeaderProps } from './props';\n\nconst Header = ({ profileName }: ProfileDetailHeaderProps) => (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" noWrap>\n Clientes por perfil\n </Typography>\n\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n {profileName}\n </Typography>\n </Stack>\n);\n\nexport default Header;\n","import { memo, useCallback, useMemo, useRef, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport Slider from '@mui/material/Slider';\nimport Stack from '@mui/material/Stack';\nimport { MouseHandlerDataParam } from 'recharts/types/synchronisation/types';\n\nimport { ChartCardHeader } from 'components/Analytics/ChartStyles';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport useResponsive from 'hooks/useResponsive';\nimport { RankingItem } from 'types/partnerAnalysis';\n\nimport RankingChart from './Chart';\nimport RankingLegend from './Legend';\nimport { RankingProps, VisibleSeries } from './props';\n\nconst Ranking = memo(\n ({ data, config, average, onBarClick, children }: RankingProps & { children?: React.ReactNode }) => {\n const isMobile = useResponsive('down', 'sm');\n const isDownLg = useResponsive('down', 'lg');\n\n const [visibleSeries, setVisibleSeries] = useState<VisibleSeries>({\n bar: true,\n average: true,\n });\n const [visibleCount, setVisibleCount] = useState(12);\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n const [activeCoordX, setActiveCoordX] = useState<number | null>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const sortedData = useMemo(\n () =>\n [...data].sort(\n (a, b) => (b[config.dataKey] as number) - (a[config.dataKey] as number),\n ),\n [data, config.dataKey],\n );\n\n const totalItems = sortedData.length;\n\n const maxVisible = useMemo(() => {\n if (isMobile) return 10;\n if (isDownLg) return 25;\n return 30;\n }, [isMobile, isDownLg]);\n\n const showSlider = !isMobile && totalItems > 10;\n const sliderMax = Math.min(totalItems, maxVisible);\n\n const clampedCount = Math.min(\n isMobile ? totalItems : visibleCount,\n totalItems,\n maxVisible,\n );\n\n const displayData = useMemo(\n () => sortedData.slice(0, clampedCount),\n [sortedData, clampedCount],\n );\n\n const shouldRotateLabels = useMemo(() => {\n if (containerWidth === 0 || displayData.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / displayData.length;\n return slotPerBar < 80;\n }, [containerWidth, displayData.length]);\n\n const handleToggleSerie = useCallback((serie: keyof VisibleSeries) => {\n setVisibleSeries(prev => ({ ...prev, [serie]: !prev[serie] }));\n }, []);\n\n const handleChartMouseMove = useCallback((state: MouseHandlerDataParam) => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n if (state?.activeCoordinate?.x != null) {\n setActiveCoordX(state.activeCoordinate.x);\n }\n }, []);\n\n const handleChartMouseLeave = useCallback(() => {\n setActiveBarIndex(null);\n setActiveCoordX(null);\n }, []);\n\n const handleBarClick = useCallback(\n (item: RankingItem) => {\n if (!item) return;\n onBarClick?.(item);\n },\n [onBarClick],\n );\n\n const handleSliderChange = useCallback(\n (_: Event, val: number | number[]) => {\n setVisibleCount(val as number);\n },\n [],\n );\n\n return (\n <ChartCard>\n <ChartCardHeader\n title=\"Ranking de clientes\"\n action={children}\n />\n\n <CardContent>\n <Result isEmpty={displayData.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={1.5}>\n <Stack width=\"100%\" ref={wrapperRefCallback}>\n <RankingChart\n data={displayData}\n config={config}\n visibleSeries={visibleSeries}\n average={average}\n activeBarIndex={activeBarIndex}\n activeCoordX={activeCoordX}\n shouldRotateLabels={shouldRotateLabels}\n onMouseMove={handleChartMouseMove}\n onMouseLeave={handleChartMouseLeave}\n onBarClick={handleBarClick}\n />\n </Stack>\n\n <RankingLegend\n visibleSeries={visibleSeries}\n config={config}\n onToggleSerie={handleToggleSerie}\n />\n\n {showSlider && (\n <Slider\n size=\"small\"\n min={10}\n max={sliderMax}\n value={clampedCount}\n valueLabelDisplay=\"auto\"\n onChange={handleSliderChange}\n />\n )}\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n );\n },\n);\n\nRanking.displayName = 'Ranking';\n\nexport default Ranking;\n","import { useCallback, useMemo } from 'react';\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { BarRectangleItem } from 'recharts/types/cartesian/Bar';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport ReferenceCircle from 'components/Analytics/ReferenceCircle';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { RotatedTickProps } from 'components/Analytics/RotatedTick/props';\nimport WrappedTick from 'components/Analytics/WrappedTick';\nimport { RankingItem } from 'types/partnerAnalysis';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport { AVERAGE_COLOR } from '../props';\n\nimport BarBackground from './BarBackground';\nimport { ChartProps } from './props';\nimport RankingTooltip from './Tooltip';\n\nconst BAR_SIZE = 48;\nconst BAR_SLOT = BAR_SIZE / 0.8;\n\nconst RankingChart = ({\n data,\n config,\n visibleSeries,\n average,\n activeBarIndex,\n activeCoordX,\n shouldRotateLabels,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: ChartProps) => {\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const values = data.map(item => (item[config.dataKey] as number) || 0);\n if (visibleSeries.average && average > 0) values.push(average);\n const max = Math.max(...values);\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data, config.dataKey, average, visibleSeries.average]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const barLabel = useMemo(\n () =>\n shouldRotateLabels\n ? false\n : {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n formatter: (value: unknown) => config.formatLabel(Number(value)),\n },\n [shouldRotateLabels, config],\n );\n\n const tooltipContent = useMemo(\n () => <RankingTooltip config={config} average={average} />,\n [config, average],\n );\n\n const renderXAxisTick = useCallback(\n (tickProps: Record<string, unknown>) => {\n if (shouldRotateLabels) {\n return <RotatedTick {...(tickProps as RotatedTickProps)} />;\n }\n return (\n <WrappedTick\n x={tickProps.x as number}\n y={tickProps.y as number}\n payload={tickProps.payload as { value: string }}\n slotWidth={BAR_SLOT}\n />\n );\n },\n [shouldRotateLabels],\n );\n\n const handleBarClick = useCallback(\n (entry: BarRectangleItem) => {\n if (!entry) return;\n onBarClick(entry as unknown as RankingItem);\n },\n [onBarClick],\n );\n\n return (\n <ChartWrapper>\n <ResponsiveContainer width=\"100%\" height={350}>\n <ComposedChart\n data={data}\n margin={{ top: 20, right: 10, bottom: 0, left: 20 }}\n barCategoryGap=\"20%\"\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"partner_name\"\n axisLine={false}\n tickLine={false}\n interval={0}\n height={shouldRotateLabels ? 70 : 50}\n tick={renderXAxisTick}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={tooltipContent} />\n\n {visibleSeries.average && average > 0 && (\n <ReferenceLine\n y={average}\n stroke={AVERAGE_COLOR}\n strokeDasharray=\"8 4\"\n strokeWidth={2}\n ifOverflow=\"extendDomain\"\n />\n )}\n\n {visibleSeries.average && average > 0 && (\n <ReferenceLine\n y={average}\n stroke=\"none\"\n ifOverflow=\"extendDomain\"\n label={\n <ReferenceCircle\n activeCoordX={activeCoordX}\n referenceCircleColor={AVERAGE_COLOR}\n activeIndex={activeBarIndex}\n />\n }\n />\n )}\n\n {visibleSeries.bar && (\n <Bar\n dataKey={config.dataKey}\n name={config.barName}\n fill={config.color}\n maxBarSize={48}\n isAnimationActive={false}\n radius={[4, 4, 0, 0]}\n cursor=\"pointer\"\n onClick={handleBarClick}\n background={\n <BarBackground\n activeBarIndex={activeBarIndex}\n color={config.color}\n data={data}\n onBarClick={onBarClick}\n />\n }\n label={barLabel}\n />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default RankingChart;\n","import { RankingItem } from 'types/partnerAnalysis';\nimport { fCurrencyBRL, fShortenNumber } from 'utils/formatNumber';\nimport { RankingType } from 'utils/partnerAnalysis';\n\nexport const AVERAGE_COLOR = '#212B36';\n\nexport interface RankingTypeConfig {\n label: string;\n color: string;\n dataKey: keyof RankingItem;\n barName: string;\n averageName: string;\n averageDataKey: string;\n formatLabel: (value: number) => string;\n formatYAxis: (value: number) => string;\n floorAverage?: boolean;\n}\n\nexport interface VisibleSeries {\n bar: boolean;\n average: boolean;\n}\n\nexport interface LegendProps {\n visibleSeries: VisibleSeries;\n config: RankingTypeConfig;\n onToggleSerie: (serie: keyof VisibleSeries) => void;\n}\n\nexport interface RankingProps {\n data: RankingItem[];\n config: RankingTypeConfig;\n average: number;\n isFetching?: boolean;\n onBarClick?: (item: RankingItem) => void;\n}\n\nexport const RANKING_CONFIG: Record<RankingType, RankingTypeConfig> = {\n [RankingType.SALE_TOTAL_VALUE]: {\n label: 'Por valor total',\n color: '#22C55E',\n dataKey: 'total_sale_value',\n barName: 'Valor total por cliente',\n averageName: 'Média total de valor por cliente',\n averageDataKey: 'average_total_value',\n formatLabel: fCurrencyBRL,\n formatYAxis: fShortenNumber,\n },\n [RankingType.SALE_COUNT]: {\n label: 'Por pedidos',\n color: '#C684FF',\n dataKey: 'total_value_by_customer',\n barName: 'Quantidade de pedidos',\n averageName: 'Quantidade total de pedidos',\n averageDataKey: 'average_sale_count',\n formatLabel: String,\n formatYAxis: fShortenNumber,\n floorAverage: true,\n },\n [RankingType.SALE_AVERAGE_VALUE]: {\n label: 'Por ticket médio',\n color: '#00B8D9',\n dataKey: 'total_sale_value',\n barName: 'Ticket médio por cliente',\n averageName: 'Média do ticket médio',\n averageDataKey: 'average_ticket',\n formatLabel: fCurrencyBRL,\n formatYAxis: fShortenNumber,\n },\n};\n","import { BarBackgroundProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index = 0,\n activeBarIndex,\n color,\n data,\n onBarClick,\n}: BarBackgroundProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill={color}\n opacity={0.16}\n rx={6}\n style={{ cursor: 'pointer' }}\n onClick={() => onBarClick(data[index])}\n />\n );\n};\n\nexport default BarBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\n\nimport { AVERAGE_COLOR } from '../props';\n\nimport { CustomTooltipProps } from './props';\n\nconst RankingTooltip = ({\n active,\n payload,\n label,\n config,\n average,\n}: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label}\n </Typography>\n\n <Divider />\n\n <Stack>\n {payload.map((entry, index) => (\n <Stack\n key={entry.dataKey}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n data-testid={`tooltip-item-${index}`}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {config.barName}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\">\n {config.formatLabel(entry.value)}\n </Typography>\n </Stack>\n ))}\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={AVERAGE_COLOR}\n />\n\n <Typography variant=\"body2\" noWrap>\n {config.averageName}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\">{config.formatLabel(average)}</Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default RankingTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { AVERAGE_COLOR, LegendProps } from './props';\n\nconst RankingLegend = ({\n visibleSeries,\n config,\n onToggleSerie,\n}: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.bar}\n onChange={() => onToggleSerie('bar')}\n sx={{ '&.Mui-checked': { color: config.color } }}\n />\n }\n label={config.barName}\n />\n\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.average}\n onChange={() => onToggleSerie('average')}\n sx={{ '&.Mui-checked': { color: AVERAGE_COLOR } }}\n />\n }\n label={config.averageName}\n />\n </Stack>\n);\n\nexport default RankingLegend;\n","import MuiButton from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\n\ninterface ItemButtonProps {\n active?: boolean;\n}\n\nexport const ItemButton = styled(MuiButton, {\n shouldForwardProp: prop => prop !== 'active',\n})<ItemButtonProps>(({ theme, active }) => ({\n justifyContent: 'flex-start',\n\n color: active ? theme.palette.primary.main : theme.palette.text.secondary,\n fontWeight: active ? 800 : 400,\n\n '&:hover': {\n background: theme.palette.action.hover,\n },\n}));\n","import Divider from '@mui/material/Divider';\nimport Link from '@mui/material/Link';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { GridRenderCellParams } from '@mui/x-data-grid-premium';\n\nimport DataView from 'components/DataView';\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport SearchInput from 'components/SearchInput';\nimport useResponsive from 'hooks/useResponsive';\nimport { fCurrencyBRL } from 'utils/formatNumber';\nimport { fDate } from 'utils/formatTime';\n\nimport Header from './Header';\nimport { RankingDetailOrder, RankingDetailProps } from './props';\nimport { MobileItemContainer, StyledDivider } from './styles';\n\nconst getOrderId = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n <Typography variant=\"body2\" color=\"text.primary\">\n {order.id}\n </Typography>\n </Stack>\n);\n\nconst getPartnerName = (\n order: RankingDetailOrder,\n buildPartnerLink?: (partnerId: string) => string,\n) => (\n <Stack justifyContent=\"center\" height={1}>\n {order?.partner?.id && buildPartnerLink ? (\n <Link\n component=\"a\"\n href={buildPartnerLink(order.partner.id)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant=\"subtitle2\"\n sx={{ textDecoration: 'underline' }}\n noWrap\n >\n {order.partner?.name || '-'}\n </Link>\n ) : (\n <Typography variant=\"body2\" color=\"text.primary\" noWrap>\n {order.partner?.name || '-'}\n </Typography>\n )}\n </Stack>\n);\n\nconst getOrderValue = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n <Typography variant=\"body2\" color=\"text.primary\">\n {fCurrencyBRL(order.total_value)}\n </Typography>\n </Stack>\n);\n\nconst getOrderDate = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n {order.negotiation_date ? (\n <Typography variant=\"body2\" color=\"text.primary\">\n {fDate(order.negotiation_date, 'DD/MM/YYYY')}\n </Typography>\n ) : (\n '-'\n )}\n </Stack>\n);\n\nconst getOrderStatus = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n {order.status || '-'}\n </Stack>\n);\n\nconst getDefaultMobileRender = (order: RankingDetailOrder) => (\n <MobileItemContainer key={order.id}>\n <Stack gap={1}>\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Pedido\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {order.id}\n </Typography>\n </Stack>\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Cliente\n </Typography>\n <Typography variant=\"subtitle2\" color=\"primary.main\">\n {order.partner?.name || '-'}\n </Typography>\n </Stack>\n\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack flex={1} overflow=\"hidden\">\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n Valor do pedido\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\" noWrap>\n {fCurrencyBRL(order.total_value)}\n </Typography>\n </Stack>\n\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{ borderStyle: 'dashed', mx: 3 }}\n />\n\n <Stack flex={1} overflow=\"hidden\">\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n Data\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\" noWrap>\n {order.negotiation_date\n ? fDate(order.negotiation_date, 'DD/MM/YYYY')\n : '-'}\n </Typography>\n </Stack>\n </Stack>\n\n <Stack gap={0.5}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Status\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {order.status || '-'}\n </Typography>\n </Stack>\n </Stack>\n </MobileItemContainer>\n);\n\nconst RankingDetail = ({\n open,\n onClose,\n partnerName,\n rankingLabel,\n rows,\n total,\n totalValue,\n averageTicket,\n isLoading,\n isFetching,\n page,\n perPage,\n onSearch,\n onPaginationChange,\n buildPartnerLink,\n mobileItemSlot,\n}: RankingDetailProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const content = (\n <Stack gap={3}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n justifyContent=\"space-between\"\n gap={2}\n >\n <Stack\n minWidth={0}\n direction=\"row\"\n alignItems=\"center\"\n gap={3}\n flexWrap=\"wrap\"\n >\n <Typography variant=\"subtitle2\" noWrap>\n {partnerName}\n </Typography>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Qtd. de pedidos\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {total}\n </Typography>\n </Stack>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Valor em pedidos\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {fCurrencyBRL(totalValue)}\n </Typography>\n </Stack>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Ticket médio\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {fCurrencyBRL(averageTicket)}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Pedidos\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={[\n {\n field: 'external_id',\n headerName: 'Pedido',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderId(row),\n },\n {\n field: 'partner_name',\n headerName: 'Cliente',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) =>\n getPartnerName(row, buildPartnerLink),\n },\n {\n field: 'total_value',\n headerName: 'Valor do pedido',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderValue(row),\n },\n {\n field: 'created_at',\n headerName: 'Data',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderDate(row),\n },\n {\n field: 'last_status',\n headerName: 'Status',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderStatus(row),\n },\n ]}\n rows={rows}\n rowCount={total}\n mobileRender={(data: RankingDetailOrder) =>\n mobileItemSlot ? mobileItemSlot(data) : getDefaultMobileRender(data)\n }\n loading={isLoading}\n fetching={isFetching}\n paginationModel={{ page, pageSize: perPage }}\n onPaginationChange={onPaginationChange}\n paginationMode=\"server\"\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = (\n <Header rankingLabel={rankingLabel} partnerName={partnerName} />\n );\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default RankingDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { RankingDetailHeaderProps } from './props';\n\nconst Header = ({ rankingLabel, partnerName }: RankingDetailHeaderProps) => (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" noWrap>\n Detalhes do relatório\n </Typography>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n columnGap={1.5}\n rowGap={0}\n flexWrap=\"wrap\"\n >\n <Typography variant=\"body2\" color=\"text.secondary\" flexShrink={0}>\n Top clientes\n </Typography>\n &#x2022;\n <Typography variant=\"body2\" flexShrink={0}>\n Por &quot;{rankingLabel}&quot;\n </Typography>\n &#x2022;\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n {partnerName}\n </Typography>\n </Stack>\n </Stack>\n);\n\nexport default Header;\n","import MuiDivider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport { alpha, styled } from '@mui/material/styles';\n\nexport const StyledDivider = styled(MuiDivider)(() => ({\n height: 30,\n alignSelf: 'center',\n borderStyle: 'dashed',\n}));\n\nexport const MobileItemContainer = styled(Stack)(({ theme }) => ({\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(2),\n gap: theme.spacing(1),\n color: theme.palette.text.primary,\n\n '& a': {\n textDecoration: 'none',\n },\n\n '&+div': {\n borderTop: `1px dashed ${alpha(theme.palette.grey[500], 0.2)}`,\n },\n}));\n","import { useCallback, useMemo, useRef, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport Slider from '@mui/material/Slider';\nimport Stack from '@mui/material/Stack';\nimport { MouseHandlerDataParam } from 'recharts/types/synchronisation/types';\n\nimport { ChartCard, ChartCardHeader } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport useResponsive from 'hooks/useResponsive';\n\nimport SellerPortfolioChart from './Chart';\nimport SellerPortfolioLegend from './Legend';\nimport { SellerPortfolioProps } from './props';\n\nconst SellerPortfolio = ({\n data,\n config,\n onBarClick,\n children,\n}: SellerPortfolioProps) => {\n const isMobile = useResponsive('down', 'sm');\n const isDownLg = useResponsive('down', 'lg');\n\n const [hiddenKeys, setHiddenKeys] = useState<Set<string>>(new Set());\n const [visibleCount, setVisibleCount] = useState(12);\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const sortedData = useMemo(\n () => [...data].sort((a, b) => b._total - a._total),\n [data],\n );\n\n const maxVisible = useMemo(() => {\n if (isMobile) return 10;\n if (isDownLg) return 25;\n return 30;\n }, [isDownLg, isMobile]);\n\n const totalItems = sortedData.length;\n const showSlider = !isMobile && totalItems > 10;\n const sliderMax = Math.min(totalItems, maxVisible);\n\n const clampedCount = Math.min(\n isMobile ? totalItems : visibleCount,\n totalItems,\n maxVisible,\n );\n\n const displayData = useMemo(\n () => sortedData.slice(0, clampedCount),\n [sortedData, clampedCount],\n );\n\n const shouldRotateLabels = useMemo(() => {\n if (containerWidth === 0 || displayData.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / displayData.length;\n return slotPerBar < 80;\n }, [containerWidth, displayData.length]);\n\n const visibleSeries = useMemo(\n () => config.series.filter(s => !hiddenKeys.has(s.dataKey)),\n [config.series, hiddenKeys],\n );\n\n const displayDataWithTotals = useMemo(\n () =>\n displayData.map(item => ({\n ...item,\n _visibleTotal: visibleSeries.reduce(\n (sum, s) => sum + (Number(item[s.dataKey]) || 0),\n 0,\n ),\n })),\n [displayData, visibleSeries],\n );\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const handleToggleSerie = useCallback((dataKey: string) => {\n setHiddenKeys(prev => {\n const next = new Set(prev);\n if (next.has(dataKey)) next.delete(dataKey);\n else next.add(dataKey);\n return next;\n });\n }, []);\n\n const handleMouseMove = useCallback((state: MouseHandlerDataParam) => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setActiveBarIndex(null);\n }, []);\n\n const handleBarClick = useCallback(\n (sellerId: string, sellerName: string) => {\n onBarClick?.(sellerId, sellerName);\n },\n [onBarClick],\n );\n\n const handleSliderChange = useCallback(\n (_: Event, val: number | number[]) => {\n setVisibleCount(val as number);\n },\n [],\n );\n\n return (\n <ChartCard>\n <ChartCardHeader\n title=\"Carteira de clientes do vendedor\"\n action={children}\n />\n\n <CardContent>\n <Result isEmpty={displayData.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={1.5}>\n <Stack width=\"100%\" ref={wrapperRefCallback}>\n <SellerPortfolioChart\n data={displayDataWithTotals}\n config={config}\n visibleSeries={visibleSeries}\n hiddenKeys={hiddenKeys}\n activeBarIndex={activeBarIndex}\n shouldRotateLabels={shouldRotateLabels}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onBarClick={handleBarClick}\n />\n </Stack>\n\n <SellerPortfolioLegend\n series={config.series}\n hiddenKeys={hiddenKeys}\n onToggleSerie={handleToggleSerie}\n />\n\n {showSlider && (\n <Slider\n size=\"small\"\n min={10}\n max={sliderMax}\n value={clampedCount}\n valueLabelDisplay=\"auto\"\n onChange={handleSliderChange}\n />\n )}\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n );\n};\n\nexport default SellerPortfolio;\n","import { type ReactElement, useCallback, useMemo } from 'react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { BarRectangleItem } from 'recharts/types/cartesian/Bar';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { RotatedTickProps } from 'components/Analytics/RotatedTick/props';\nimport WrappedTick from 'components/Analytics/WrappedTick';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport BarBackground from './BarBackground';\nimport { ChartProps } from './props';\nimport StackedTooltip from './Tooltip';\n\nconst BAR_SIZE = 48;\nconst BAR_SLOT = BAR_SIZE / 0.8;\n\nconst SellerPortfolioChart = ({\n data,\n config,\n visibleSeries,\n hiddenKeys,\n activeBarIndex,\n shouldRotateLabels,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: ChartProps) => {\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const max = Math.max(...data.map(item => item._visibleTotal));\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const tooltipContent = useMemo(\n () => <StackedTooltip config={config} />,\n [config],\n );\n\n const renderXAxisTick = useCallback(\n (tickProps: Record<string, unknown>) => {\n if (shouldRotateLabels) {\n return <RotatedTick {...(tickProps as RotatedTickProps)} />;\n }\n return (\n <WrappedTick\n x={tickProps.x as number}\n y={tickProps.y as number}\n payload={tickProps.payload as { value: string }}\n slotWidth={BAR_SLOT}\n />\n );\n },\n [shouldRotateLabels],\n );\n\n const handleBarClick = useCallback(\n (entry: BarRectangleItem) => {\n if (!entry) return;\n const row = entry.payload as Record<string, unknown> | undefined;\n if (!row) return;\n onBarClick(String(row.seller_external_id), String(row.seller_name));\n },\n [onBarClick],\n );\n\n const renderLabel = useCallback(\n (props: Record<string, unknown>) => {\n const { x, y, width, index } = props as {\n x: number;\n y: number;\n width: number;\n index: number;\n };\n const total = data[index]?._visibleTotal;\n if (!total) return <></>;\n return (\n <text\n x={(x as number) + (width as number) / 2}\n y={(y as number) - 6}\n textAnchor=\"middle\"\n fontSize={11}\n fill=\"#212B36\"\n >\n {total}\n </text>\n );\n },\n [data],\n );\n\n return (\n <ChartWrapper>\n <ResponsiveContainer width=\"100%\" height={350}>\n <BarChart\n data={data}\n margin={{ top: 20, right: 10, bottom: 0, left: 20 }}\n barCategoryGap=\"20%\"\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"seller_name\"\n axisLine={false}\n tickLine={false}\n interval={0}\n height={shouldRotateLabels ? 70 : 50}\n tick={renderXAxisTick}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={tooltipContent} cursor={false} />\n\n {config.series.map(s => {\n const visible = !hiddenKeys.has(s.dataKey);\n const firstVisible = visibleSeries[0];\n const lastVisible = visibleSeries[visibleSeries.length - 1];\n const isFirst = visible && s.dataKey === firstVisible?.dataKey;\n const isLast = visible && s.dataKey === lastVisible?.dataKey;\n\n return (\n <Bar\n key={s.dataKey}\n dataKey={visible ? s.dataKey : `_hidden_${s.dataKey}`}\n name={s.name}\n fill={s.color}\n stackId=\"stack\"\n maxBarSize={48}\n isAnimationActive={false}\n cursor=\"pointer\"\n hide={!visible}\n onClick={handleBarClick}\n {...(isFirst && {\n background: (\n <BarBackground\n activeBarIndex={activeBarIndex}\n data={data}\n onBarClick={onBarClick}\n />\n ),\n })}\n {...(isLast && { radius: [4, 4, 0, 0] as [number, number, number, number] })}\n {...(isLast &&\n !shouldRotateLabels && {\n label: {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n content: renderLabel as unknown as ReactElement,\n },\n })}\n />\n );\n })}\n </BarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default SellerPortfolioChart;\n","import { BarBackgroundProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index = 0,\n activeBarIndex,\n data,\n onBarClick,\n}: BarBackgroundProps) => {\n if (activeBarIndex !== index) return null;\n\n const entry = data[index];\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill=\"#919EAB\"\n opacity={0.16}\n rx={6}\n style={{ cursor: 'pointer' }}\n onClick={() => {\n if (!entry) return;\n onBarClick(\n String(entry.seller_external_id),\n String(entry.seller_name),\n );\n }}\n />\n );\n};\n\nexport default BarBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { StackedTooltipProps, TooltipPayloadEntry } from './props';\n\nconst formatPct = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst StackedTooltip = ({\n active,\n payload,\n label,\n config,\n}: StackedTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const visibleEntries = payload.filter(\n entry => entry.value != null && entry.value > 0,\n );\n\n const total = visibleEntries.reduce(\n (sum: number, entry: TooltipPayloadEntry) => sum + entry.value,\n 0,\n );\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label}\n </Typography>\n\n <Divider />\n\n <Stack>\n {visibleEntries.map((entry: TooltipPayloadEntry) => {\n const series = config.series.find(s => s.dataKey === entry.dataKey);\n const pct = total > 0 ? formatPct((entry.value / total) * 100) : '0%';\n\n return (\n <Stack\n key={entry.dataKey}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {series?.name ?? entry.dataKey}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {pct} ({entry.value})\n </Typography>\n </Stack>\n );\n })}\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPct(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default StackedTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { LegendProps } from './props';\n\nconst SellerPortfolioLegend = ({\n series,\n hiddenKeys,\n onToggleSerie,\n}: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n {series.map(s => (\n <FormControlLabel\n key={s.dataKey}\n control={\n <Checkbox\n checked={!hiddenKeys.has(s.dataKey)}\n onChange={() => onToggleSerie(s.dataKey)}\n sx={{ '&.Mui-checked': { color: s.color } }}\n />\n }\n label={s.name}\n />\n ))}\n </Stack>\n);\n\nexport default SellerPortfolioLegend;\n","import { fShortenNumber } from 'utils/formatNumber';\nimport { AbcCurve, SellerPortfolioQueryType, Status } from 'utils/partnerAnalysis';\n\nexport interface StackedBarSeries {\n dataKey: string;\n name: string;\n color: string;\n}\n\nexport interface SellerPortfolioTypeConfig {\n label: string;\n series: StackedBarSeries[];\n formatYAxis: (value: number) => string;\n}\n\nexport interface ChartDataRow extends Record<string, string | number> {\n seller_name: string;\n seller_external_id: string;\n _total: number;\n}\n\nexport interface DisplayDataRow extends ChartDataRow {\n _visibleTotal: number;\n}\n\nexport interface SelectedSeller {\n id: string;\n name: string;\n}\n\nexport interface LegendProps {\n series: StackedBarSeries[];\n hiddenKeys: Set<string>;\n onToggleSerie: (dataKey: string) => void;\n}\n\nexport interface SellerPortfolioProps {\n data: ChartDataRow[];\n config: SellerPortfolioTypeConfig;\n onBarClick?: (sellerId: string, sellerName: string) => void;\n children?: React.ReactNode;\n}\n\nconst CLASSIFICATION_SERIES: StackedBarSeries[] = [\n { dataKey: Status.ACTIVE, name: 'Ativos', color: '#22C55E' },\n { dataKey: Status.AT_RISK, name: 'Em risco', color: '#FFAB00' },\n { dataKey: Status.INACTIVE, name: 'Inativos', color: '#FF5630' },\n { dataKey: Status.NEW_CLIENT, name: 'Novos clientes', color: '#8E33FF' },\n { dataKey: Status.PROSPECT, name: 'Prospects', color: '#00B8D9' },\n { dataKey: Status.LOST, name: 'Perdidos', color: '#C4CDD5' },\n];\n\nconst ABC_CURVE_SERIES: StackedBarSeries[] = [\n { dataKey: AbcCurve.A, name: 'Curva A', color: '#22C55E' },\n { dataKey: AbcCurve.B, name: 'Curva B', color: '#FFAB00' },\n { dataKey: AbcCurve.C, name: 'Curva C', color: '#FF5630' },\n];\n\nexport const SELLER_PORTFOLIO_CONFIG: Record<\n SellerPortfolioQueryType,\n SellerPortfolioTypeConfig\n> = {\n [SellerPortfolioQueryType.CLASSIFICATION]: {\n label: 'Por classificação',\n series: CLASSIFICATION_SERIES,\n formatYAxis: fShortenNumber,\n },\n [SellerPortfolioQueryType.ABC_CURVE]: {\n label: 'Por curva ABC',\n series: ABC_CURVE_SERIES,\n formatYAxis: fShortenNumber,\n },\n};\n"]}