{"version":3,"file":"index.mjs","names":["ReChartsBarChart","Tooltip"],"sources":["../../src/AccuracyBarChart/index.tsx"],"sourcesContent":["'use client';\n\nimport { Flexbox } from '@lobehub/ui';\nimport { Skeleton } from '@lobehub/ui/base-ui';\nimport { css, cssVar, cx } from 'antd-style';\nimport { MouseEvent, forwardRef, useMemo, useState } from 'react';\nimport {\n  Bar,\n  CartesianGrid,\n  ErrorBar,\n  Label,\n  LabelList,\n  Legend,\n  BarChart as ReChartsBarChart,\n  ResponsiveContainer,\n  Tooltip,\n  XAxis,\n  YAxis,\n} from 'recharts';\nimport { AxisDomain } from 'recharts/types/util/types';\n\nimport BaseChartProps from '@/common/BaseChartProps';\nimport ChartLegend from '@/common/ChartLegend';\nimport ChartTooltip from '@/common/ChartTooltip';\nimport CustomYAxisTick from '@/common/CustomYAxisTick';\nimport NoData from '@/common/NoData';\nimport { constructCategoryColors, deepEqual, getYAxisDomain } from '@/common/utils';\nimport { useThemeColorRange } from '@/hooks/useThemeColorRange';\nimport { defaultValueFormatter } from '@/utils';\nimport { getMaxLabelLength, getTextWidth } from '@/utils/getMaxLabelLength';\n\nimport { styles } from './styles';\n\nexport interface AccuracyBarChartProps extends Omit<BaseChartProps, 'categories'> {\n  /**\n   * Custom accuracy formatter\n   */\n  accuracyFormatter?: (value: number) => string;\n  /**\n   * Gap between bar categories\n   */\n  barCategoryGap?: string | number;\n  /**\n   * Single data category key (e.g., 'accuracy')\n   * @default 'accuracy'\n   */\n  category?: string;\n  /**\n   * Color scheme for accuracy levels\n   * @default 'gradient'\n   */\n  colorScheme?: 'gradient' | 'threshold' | 'uniform';\n  /**\n   * Error value formatter used in tooltip when displaying value±error\n   */\n  errorFormatter?: (value: number) => string;\n  /**\n   * Error bar data key (e.g., 'error', 'stdDev')\n   */\n  errorKey?: string;\n  /**\n   * Chart layout orientation\n   * @default 'vertical'\n   */\n  layout?: 'vertical' | 'horizontal';\n  /**\n   * Show error bars on the right side\n   * @default true\n   */\n  showErrorBars?: boolean;\n  /**\n   * Show accuracy value on the left side\n   * @default true\n   */\n  showLeftValue?: boolean;\n  /**\n   * Show accuracy percentage on bars\n   * @default true\n   */\n  showPercentage?: boolean;\n  /**\n   * Threshold values for color coding (only used with 'threshold' colorScheme)\n   */\n  thresholds?: {\n    excellent?: number;\n    // >= this value\n    fair?: number;\n    // >= this value\n    good?: number; // >= this value\n    // below fair is considered poor\n  };\n}\n\nconst AccuracyBarChart = forwardRef<HTMLDivElement, AccuracyBarChartProps>((props, ref) => {\n  const themeColorRange = useThemeColorRange();\n  const {\n    data = [],\n    category = 'accuracy',\n    customCategories,\n    index,\n    yAxisAlign = 'left',\n    colors = themeColorRange,\n    valueFormatter = defaultValueFormatter,\n    xAxisLabelFormatter = defaultValueFormatter,\n    layout = 'vertical', // Default to vertical for leaderboard-style display\n    startEndOnly = false,\n    animationDuration = 900,\n    showAnimation = false,\n    showXAxis = true,\n    showYAxis = true,\n    yAxisWidth,\n    intervalType = 'equidistantPreserveStart',\n    showTooltip = true,\n    showLegend = false, // Default to false for accuracy charts\n    showGridLines = true,\n    autoMinValue = true, // Default to true for percentage data\n    minValue = 0,\n    maxValue = 100, // Default max for percentage\n    allowDecimals = true,\n    noDataText,\n    onValueChange,\n    enableLegendSlider = false,\n    showPercentage = true,\n    customTooltip,\n    rotateLabelX,\n    barCategoryGap = '20%',\n    tickGap = 5,\n    loading,\n    xAxisLabel,\n    yAxisLabel,\n    className,\n    width = '100%',\n    height = 400, // Taller default for vertical layout\n    style,\n    showErrorBars = true,\n    errorFormatter = (value: number) => value.toFixed(1),\n    errorKey = 'error',\n    accuracyFormatter = (value: number) => `${value.toFixed(1)}%`,\n    ...rest\n  } = props;\n\n  const [activeBar, setActiveBar] = useState<any | undefined>();\n  const [activeLegend, setActiveLegend] = useState<string | undefined>();\n  const [legendHeight, setLegendHeight] = useState(60);\n\n  const calculatedYAxisWidth: number | string = useMemo(() => {\n    if (yAxisWidth) return yAxisWidth;\n    return getMaxLabelLength({ data, index, layout, valueFormatter: xAxisLabelFormatter });\n  }, [yAxisWidth, layout, data, xAxisLabelFormatter, index]);\n\n  if (loading || !data) return <Skeleton height={height} width={width} />;\n\n  const CustomTooltip = customTooltip;\n  const paddingValue = !showXAxis && !showYAxis ? 0 : 20;\n  const categoryColors = constructCategoryColors([category], colors);\n  const hasOnValueChange = !!onValueChange;\n\n  const onBarClick = (data: any, idx: number, event: MouseEvent) => {\n    event.stopPropagation();\n    if (!onValueChange) return;\n    if (deepEqual(activeBar, { ...data.payload, value: data.value })) {\n      setActiveLegend(undefined);\n      setActiveBar(undefined);\n      onValueChange?.(null);\n    } else {\n      setActiveLegend(data.tooltipPayload?.[0]?.dataKey);\n      setActiveBar({\n        ...data.payload,\n        value: data.value,\n      });\n      onValueChange?.({\n        categoryClicked: data.tooltipPayload?.[0]?.dataKey,\n        eventType: 'bar',\n        ...data.payload,\n      });\n    }\n  };\n\n  const onCategoryClick = (dataKey: string) => {\n    if (!hasOnValueChange) return;\n    if (dataKey === activeLegend && !activeBar) {\n      setActiveLegend(undefined);\n      onValueChange?.(null);\n    } else {\n      setActiveLegend(dataKey);\n      onValueChange?.({\n        categoryClicked: dataKey,\n        eventType: 'category',\n      });\n    }\n    setActiveBar(undefined);\n  };\n\n  const yAxisDomain = getYAxisDomain(autoMinValue, minValue, maxValue);\n\n  // Custom accuracy formatter for display\n  const displayFormatter = accuracyFormatter || valueFormatter;\n\n  return (\n    <Flexbox\n      className={className}\n      height={height}\n      ref={ref}\n      style={{ position: 'relative', ...style }}\n      width={width}\n      {...rest}\n    >\n      <ResponsiveContainer>\n        {data?.length ? (\n          <ReChartsBarChart\n            barCategoryGap={barCategoryGap}\n            data={data}\n            layout={layout === 'vertical' ? 'vertical' : 'horizontal'}\n            margin={{\n              bottom: xAxisLabel ? 30 : undefined,\n              left: yAxisLabel ? 20 : undefined,\n              right: showErrorBars && layout === 'vertical' ? 40 : yAxisLabel ? 5 : undefined,\n              top: 5,\n            }}\n            onClick={\n              hasOnValueChange && (activeLegend || activeBar)\n                ? () => {\n                    setActiveBar(undefined);\n                    setActiveLegend(undefined);\n                    onValueChange?.(null);\n                  }\n                : undefined\n            }\n          >\n            {showGridLines ? (\n              <CartesianGrid\n                className={styles.gridLines}\n                horizontal={layout !== 'vertical'}\n                vertical={layout === 'vertical'}\n              />\n            ) : undefined}\n\n            {layout === 'vertical' ? (\n              <XAxis\n                allowDecimals={allowDecimals}\n                angle={rotateLabelX?.angle}\n                axisLine={false}\n                className={styles.label}\n                domain={yAxisDomain as AxisDomain}\n                dy={rotateLabelX?.verticalShift}\n                fill=\"\"\n                hide={!showXAxis}\n                minTickGap={tickGap}\n                stroke=\"\"\n                tick={{ transform: 'translate(-3, 0)' }}\n                tickFormatter={displayFormatter}\n                tickLine={false}\n                type=\"number\"\n              >\n                {xAxisLabel && (\n                  <Label\n                    className={cx(styles.strongLabel, styles.emphasis)}\n                    offset={-20}\n                    position=\"insideBottom\"\n                    style={{\n                      fill: cssVar.colorTextSecondary,\n                      fontWeight: 500,\n                      textAnchor: 'middle',\n                    }}\n                  >\n                    {xAxisLabel}\n                  </Label>\n                )}\n              </XAxis>\n            ) : (\n              <XAxis\n                angle={rotateLabelX?.angle}\n                axisLine={false}\n                className={styles.label}\n                dataKey={index}\n                dy={rotateLabelX?.verticalShift}\n                fill=\"\"\n                hide={!showXAxis}\n                interval={startEndOnly ? 'preserveStartEnd' : intervalType}\n                minTickGap={tickGap}\n                padding={{ left: paddingValue, right: paddingValue }}\n                stroke=\"\"\n                tick={{ transform: 'translate(0, 6)' }}\n                tickFormatter={xAxisLabelFormatter}\n                tickLine={false}\n                ticks={startEndOnly ? [data[0][index], data.at(-1)[index]] : undefined}\n              >\n                {xAxisLabel && (\n                  <Label\n                    className={cx(styles.strongLabel, styles.emphasis)}\n                    offset={-20}\n                    position=\"insideBottom\"\n                    style={{\n                      fill: cssVar.colorTextSecondary,\n                      fontWeight: 500,\n                      textAnchor: 'middle',\n                    }}\n                  >\n                    {xAxisLabel}\n                  </Label>\n                )}\n              </XAxis>\n            )}\n            {layout === 'vertical' ? (\n              <YAxis\n                axisLine={false}\n                className={styles.label}\n                dataKey={index}\n                fill=\"\"\n                hide={!showYAxis}\n                interval=\"preserveStartEnd\"\n                stroke=\"\"\n                tick={(props) => (\n                  <CustomYAxisTick\n                    {...props}\n                    align={yAxisAlign}\n                    formatter={xAxisLabelFormatter}\n                    textAnchor={yAxisAlign === 'left' ? 'start' : 'end'}\n                    yAxisLabel={Boolean(yAxisLabel)}\n                  />\n                )}\n                tickFormatter={xAxisLabelFormatter}\n                tickLine={false}\n                ticks={startEndOnly ? [data[0][index], data.at(-1)[index]] : undefined}\n                type=\"category\"\n                width={calculatedYAxisWidth}\n              >\n                {yAxisLabel && (\n                  <Label\n                    angle={-90}\n                    className={styles.emphasis}\n                    offset={-15}\n                    position=\"insideLeft\"\n                    style={{\n                      fill: cssVar.colorTextSecondary,\n                      fontWeight: 500,\n                      textAnchor: 'middle',\n                    }}\n                  >\n                    {yAxisLabel}\n                  </Label>\n                )}\n              </YAxis>\n            ) : (\n              <YAxis\n                allowDecimals={allowDecimals}\n                axisLine={false}\n                className={styles.label}\n                domain={yAxisDomain as AxisDomain}\n                fill=\"\"\n                hide={!showYAxis}\n                stroke=\"\"\n                tick={(props) => (\n                  <CustomYAxisTick\n                    {...props}\n                    align={yAxisAlign}\n                    formatter={displayFormatter}\n                    textAnchor={yAxisAlign === 'left' ? 'start' : 'end'}\n                    yAxisLabel={Boolean(yAxisLabel)}\n                  />\n                )}\n                tickFormatter={displayFormatter}\n                tickLine={false}\n                type=\"number\"\n                width={calculatedYAxisWidth}\n              >\n                {yAxisLabel && (\n                  <Label\n                    angle={-90}\n                    className={styles.emphasis}\n                    offset={-15}\n                    position=\"insideLeft\"\n                    style={{\n                      fill: cssVar.colorTextSecondary,\n                      fontWeight: 500,\n                      textAnchor: 'middle',\n                    }}\n                  >\n                    {yAxisLabel}\n                  </Label>\n                )}\n              </YAxis>\n            )}\n            <Tooltip\n              content={\n                showTooltip\n                  ? ({ active, payload, label }) =>\n                      CustomTooltip ? (\n                        <CustomTooltip\n                          active={active}\n                          customCategories={customCategories}\n                          label={label}\n                          payload={payload?.map((payloadItem: any) => {\n                            const record = data.find((item) => item[index] === label);\n                            const errVal = record?.[errorKey];\n                            const combined =\n                              errVal === undefined || errVal === null\n                                ? accuracyFormatter(Number(payloadItem.value))\n                                : `${accuracyFormatter(Number(payloadItem.value))} ± ${errorFormatter(Number(errVal))}`;\n                            return {\n                              ...payloadItem,\n                              formattedValue: combined,\n                            };\n                          })}\n                          valueFormatter={displayFormatter}\n                        />\n                      ) : (\n                        <ChartTooltip\n                          active={active}\n                          categoryColors={categoryColors}\n                          customCategories={customCategories}\n                          label={label}\n                          payload={payload}\n                          valueFormatter={(val: number): any => {\n                            const record = data.find((item) => item[index] === label);\n                            const errVal = record?.[errorKey];\n                            if (!showErrorBars || errVal === undefined || errVal === null)\n                              return accuracyFormatter(Number(val));\n                            return (\n                              <>\n                                {accuracyFormatter(Number(val))}\n                                <span style={{ color: cssVar.colorTextSecondary }}>\n                                  {' '}\n                                  ± {errorFormatter(Number(errVal))}\n                                </span>\n                              </>\n                            );\n                          }}\n                        />\n                      )\n                  : undefined\n              }\n              cursor={{ fill: cssVar.colorFillTertiary }}\n              isAnimationActive={false}\n              position={{ y: 0 }}\n              wrapperStyle={{ outline: 'none' }}\n            />\n            {showLegend ? (\n              <Legend\n                content={({ payload }) =>\n                  ChartLegend(\n                    { payload },\n                    categoryColors,\n                    setLegendHeight,\n                    activeLegend,\n                    hasOnValueChange\n                      ? (clickedLegendItem: string) => onCategoryClick(clickedLegendItem)\n                      : undefined,\n                    enableLegendSlider,\n                    customCategories,\n                  )\n                }\n                height={legendHeight}\n                verticalAlign=\"top\"\n              />\n            ) : undefined}\n            <Bar\n              animationDuration={animationDuration}\n              className={cx(css`\n                fill: ${categoryColors.get(category) ?? cssVar.colorPrimary};\n              `)}\n              dataKey={category}\n              fill={''}\n              isAnimationActive={showAnimation}\n              key={category}\n              name={category}\n              onClick={onBarClick}\n              style={{\n                cursor: onValueChange ? 'pointer' : undefined,\n              }}\n              type=\"linear\"\n            >\n              {showPercentage && layout === 'vertical' ? (\n                <LabelList\n                  content={(labelProps: any) => {\n                    const { x: lx, y: ly, height: lh, width: lw, value } = labelProps;\n                    if (\n                      lx === null ||\n                      lx === undefined ||\n                      ly === null ||\n                      ly === undefined ||\n                      lh === null ||\n                      lh === undefined ||\n                      lw === null ||\n                      lw === undefined\n                    )\n                      return null;\n                    const text = accuracyFormatter(Number(value ?? 0));\n                    const textWidth = getTextWidth(text);\n                    const horizontalPadding = 16; // 8px left padding + 8px safe space\n                    if (Number(lw) <= textWidth + horizontalPadding) return null;\n                    return (\n                      <text\n                        className={styles.percentageLabel}\n                        dominantBaseline=\"central\"\n                        style={{\n                          fill: cssVar.colorTextLightSolid,\n                        }}\n                        x={Number(lx) + 8}\n                        y={Number(ly) + Number(lh) / 2}\n                      >\n                        {text}\n                      </text>\n                    );\n                  }}\n                  dataKey={category}\n                  offset={8}\n                  position=\"insideLeft\"\n                />\n              ) : null}\n              {showErrorBars ? (\n                <ErrorBar\n                  dataKey={errorKey}\n                  direction={layout === 'vertical' ? 'x' : 'y'}\n                  stroke={cssVar.colorTextSecondary}\n                />\n              ) : null}\n            </Bar>\n          </ReChartsBarChart>\n        ) : (\n          <NoData noDataText={noDataText} />\n        )}\n      </ResponsiveContainer>\n    </Flexbox>\n  );\n});\n\nAccuracyBarChart.displayName = 'AccuracyBarChart';\n\nexport default AccuracyBarChart;\n"],"mappings":"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"}