{"version":3,"file":"index.mjs","names":[],"sources":["../../src/BenchmarkRankingChart/index.tsx"],"sourcesContent":["'use client';\n\nimport { A, Flexbox, Skeleton, Tooltip, cssVar, cx, useTheme } from '@lobehub/ui';\nimport { type CSSProperties, type ReactNode, forwardRef, useMemo, useState } from 'react';\n\nimport ChartTooltip from '@/common/ChartTooltip';\nimport NoData from '@/common/NoData';\nimport {\n  type BenchmarkBaseProps,\n  type BenchmarkEventProps,\n  type NormalizedBenchmarkItem,\n  defaultBenchmarkErrorFormatter,\n  defaultBenchmarkValueFormatter,\n  formatBenchmarkAccuracyDisplay,\n  getBenchmarkBarPercent,\n  normalizeBenchmarkData,\n} from '@/common/benchmark';\n\nimport { styles } from './styles';\n\nexport interface BenchmarkRankingChartProps extends BenchmarkBaseProps {\n  /**\n   * Thickness of the horizontal score bar\n   * @default 24\n   */\n  barSize?: number;\n  /**\n   * Fallback bar color when an item has no color\n   */\n  color?: string;\n  /**\n   * Text accent color when an item has `highlighted: true` (does not change bar fill)\n   * @default theme.gold\n   */\n  highlightColor?: string;\n  /**\n   * Font size for the model name\n   * @default 14\n   */\n  labelFontSize?: number;\n  /**\n   * Display width of the left label (icon + name + provider).\n   * Omit to size to the longest label.\n   */\n  labelWidth?: number | string;\n  /**\n   * Override domain max used for bar scaling\n   */\n  maxValue?: number;\n  /**\n   * Custom rank renderer. Receives the normalized item; default is `#${rank}`.\n   */\n  renderRank?: (item: NormalizedBenchmarkItem) => ReactNode;\n  /**\n   * Height of each ranking row\n   * @default 40\n   */\n  rowHeight?: number;\n  /**\n   * Show AccuracyBar-style horizontal error bars\n   * @default true\n   */\n  showErrorBars?: boolean;\n  /**\n   * Show vertical grid lines in the plot\n   * @default true\n   */\n  showGridLines?: boolean;\n  /**\n   * Show rank on the left (default `#1`, `#2`, ...)\n   * @default true\n   */\n  showRank?: boolean;\n  /**\n   * Show tooltip on row hover\n   * @default true\n   */\n  showTooltip?: boolean;\n  /**\n   * Show numeric score labels on the right\n   * @default true\n   */\n  showValueLabel?: boolean;\n  /**\n   * Show X value axis line + ticks under the bars\n   * @default false\n   */\n  showXAxis?: boolean;\n  /**\n   * Show Y axis line along the plot\n   * @default true\n   */\n  showYAxis?: boolean;\n  /**\n   * Font size for the numeric score\n   * @default 14\n   */\n  valueLabelFontSize?: number;\n  /**\n   * Optional X axis title under the ticks\n   */\n  xAxisLabel?: string;\n}\n\nconst prefixCls = 'ant';\n\nconst getAxisTicks = (max: number, count = 4) => {\n  if (max <= 0) return [0];\n  const raw = max / count;\n  const magnitude = 10 ** Math.floor(Math.log10(raw));\n  const normalized = raw / magnitude;\n  const stepBase = normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10;\n  const step = stepBase * magnitude;\n  const ticks: number[] = [];\n  for (let value = 0; value <= max + step / 1000; value += step) {\n    ticks.push(Math.min(Number(value.toFixed(6)), max));\n  }\n  if (ticks.at(-1) !== max) ticks.push(max);\n  return [...new Set(ticks)];\n};\n\nconst BenchmarkRankingChart = forwardRef<HTMLDivElement, BenchmarkRankingChartProps>(\n  (props, ref) => {\n    const theme = useTheme();\n    const {\n      data = [],\n      index,\n      valueKey,\n      providerKey,\n      iconKey,\n      colorKey,\n      errorKey,\n      renderIcon,\n      color = cssVar.colorPrimary,\n      highlightColor,\n      valueFormatter = defaultBenchmarkValueFormatter,\n      accuracyFormatter,\n      errorFormatter = defaultBenchmarkErrorFormatter,\n      showError = true,\n      showErrorBars = true,\n      showAnimation = false,\n      onValueChange,\n      sortOrder = 'descending',\n      className,\n      style,\n      loading,\n      width = '100%',\n      height,\n      noDataText,\n      barSize = 24,\n      rowHeight = 40,\n      labelWidth,\n      labelFontSize = 14,\n      valueLabelFontSize = 14,\n      maxValue,\n      renderRank,\n      showRank = true,\n      showValueLabel = true,\n      showTooltip = true,\n      showGridLines = true,\n      showXAxis = false,\n      showYAxis = true,\n      xAxisLabel,\n      ...rest\n    } = props;\n\n    const resolvedHighlightColor = highlightColor ?? theme.gold;\n\n    const [activeKey, setActiveKey] = useState<string | number | undefined>();\n    const enableErrorBars = showError && showErrorBars;\n    const displayFormatter = accuracyFormatter ?? valueFormatter;\n\n    const items = useMemo(\n      () =>\n        normalizeBenchmarkData({\n          colorKey,\n          data,\n          errorKey,\n          iconKey,\n          index,\n          providerKey,\n          renderIcon,\n          sortOrder,\n          valueKey,\n        }),\n      [colorKey, data, errorKey, iconKey, index, providerKey, renderIcon, sortOrder, valueKey],\n    );\n\n    const resolvedMaxValue = useMemo(() => {\n      if (typeof maxValue === 'number') return maxValue;\n      return Math.max(\n        ...items.map((item) => item.value + (enableErrorBars ? (item.error ?? 0) : 0)),\n        0,\n      );\n    }, [enableErrorBars, items, maxValue]);\n\n    const axisTicks = useMemo(() => getAxisTicks(resolvedMaxValue), [resolvedMaxValue]);\n    const hasLabelWidth = labelWidth !== undefined && labelWidth !== null && labelWidth !== '';\n    const labelWidthStyle = typeof labelWidth === 'number' ? `${labelWidth}px` : labelWidth;\n    const gridTicks = axisTicks.filter((tick) => tick > 0 && tick < resolvedMaxValue);\n\n    if (loading || !data) return <Skeleton height={height ?? 280} width={width} />;\n\n    const handleClick = (item: NormalizedBenchmarkItem) => {\n      if (!onValueChange) return;\n\n      if (activeKey === item.key) {\n        setActiveKey(undefined);\n        onValueChange(null);\n        return;\n      }\n\n      setActiveKey(item.key);\n      const payload: BenchmarkEventProps = {\n        ...item.original,\n        eventType: 'row',\n        rank: item.rank,\n        value: item.value,\n      };\n      onValueChange(payload);\n    };\n\n    const renderRowTooltip = (\n      item: NormalizedBenchmarkItem,\n      child: ReactNode,\n      key: string,\n      fillTrigger = true,\n    ) => {\n      const trigger = (\n        <div\n          className={styles.tooltipTrigger}\n          style={fillTrigger ? undefined : { minWidth: 'max-content', width: 'auto' }}\n        >\n          {child}\n        </div>\n      );\n\n      if (!showTooltip) return <div key={key}>{trigger}</div>;\n\n      const modelName = String(item.name).replaceAll('\\n', ' ');\n      const metricName = accuracyFormatter ? 'Accuracy' : 'Score';\n      const title = item.provider ? String(item.provider) : metricName;\n      const swatch = item.color ?? color;\n\n      return (\n        <Tooltip\n          arrow={false}\n          key={key}\n          mouseEnterDelay={0.05}\n          styles={{\n            container: {\n              background: 'transparent',\n              boxShadow: 'none',\n              maxWidth: 'none',\n              padding: 0,\n              width: 'max-content',\n            },\n            content: {\n              color: cssVar.colorText,\n              fontSize: cssVar.fontSize,\n              lineHeight: cssVar.lineHeight,\n              maxWidth: 'none',\n              overflow: 'visible',\n              padding: 0,\n            },\n            root: {\n              maxWidth: 'none',\n            },\n          }}\n          title={\n            <ChartTooltip\n              active\n              categoryColors={new Map([[modelName, swatch]])}\n              label={title}\n              payload={[\n                {\n                  color: swatch,\n                  dataKey: '__value',\n                  name: modelName,\n                  value: item.value,\n                },\n              ]}\n              valueFormatter={(val: number): any => {\n                if (!showError || item.error === undefined || item.error === null) {\n                  return displayFormatter(Number(val));\n                }\n                return (\n                  <>\n                    {displayFormatter(Number(val))}\n                    <span style={{ color: cssVar.colorTextSecondary }}>\n                      {' '}\n                      ± {errorFormatter(Number(item.error))}\n                    </span>\n                  </>\n                );\n              }}\n            />\n          }\n        >\n          {trigger}\n        </Tooltip>\n      );\n    };\n\n    const toPercent = (value: number) =>\n      resolvedMaxValue <= 0 ? 0 : Math.max(0, Math.min(100, (value / resolvedMaxValue) * 100));\n\n    return (\n      <Flexbox\n        className={cx(styles.container, className)}\n        gap={0}\n        horizontal\n        ref={ref}\n        style={\n          {\n            '--benchmark-label-font-size': `${labelFontSize}px`,\n            '--benchmark-subtitle-font-size': `${Math.max(10, labelFontSize - 2)}px`,\n            '--benchmark-value-label-font-size': `${valueLabelFontSize}px`,\n            'minHeight': height,\n            'position': 'relative',\n            ...style,\n          } as CSSProperties\n        }\n        width={width}\n        {...rest}\n      >\n        <Flexbox\n          className={styles.labelColumn}\n          gap={8}\n          style={{\n            flex: hasLabelWidth ? `0 0 ${labelWidthStyle}` : '0 0 auto',\n            minWidth: hasLabelWidth ? 0 : 'max-content',\n            width: hasLabelWidth ? labelWidthStyle : 'auto',\n          }}\n          width={hasLabelWidth ? labelWidth : 'auto'}\n        >\n          {items.map((item) => {\n            const textColor = item.highlighted ? resolvedHighlightColor : undefined;\n\n            return renderRowTooltip(\n              item,\n              <Flexbox\n                align=\"center\"\n                className={styles.labelRow}\n                height={rowHeight}\n                horizontal\n                onClick={() => handleClick(item)}\n                style={{ cursor: onValueChange ? 'pointer' : 'default' }}\n                width=\"100%\"\n              >\n                {showRank ? (\n                  <div className={styles.rank} style={textColor ? { color: textColor } : undefined}>\n                    {renderRank ? renderRank(item) : `#${item.rank}`}\n                  </div>\n                ) : null}\n                <Flexbox className={styles.identity} horizontal>\n                  {item.icon ? <div className={styles.icon}>{item.icon}</div> : null}\n                  <div className={styles.labelStack}>\n                    {item.href ? (\n                      <A\n                        className={cx(styles.nameLink, styles.emphasis)}\n                        href={item.href}\n                        onClick={(event) => event.stopPropagation()}\n                        style={textColor ? { color: textColor } : undefined}\n                        target={item.target}\n                      >\n                        {item.name}\n                      </A>\n                    ) : (\n                      <div\n                        className={cx(styles.name, styles.emphasis)}\n                        style={textColor ? { color: textColor } : undefined}\n                      >\n                        {item.name}\n                      </div>\n                    )}\n                    {item.provider ? (\n                      <div\n                        className={cx(styles.provider, styles.emphasis)}\n                        style={textColor ? { color: textColor } : undefined}\n                      >\n                        {item.provider}\n                      </div>\n                    ) : null}\n                  </div>\n                </Flexbox>\n              </Flexbox>,\n              `label-${item.key}`,\n              hasLabelWidth,\n            );\n          })}\n          {showXAxis ? (\n            <div className={styles.axisLabelSpacer} style={{ minHeight: xAxisLabel ? 44 : 28 }} />\n          ) : null}\n        </Flexbox>\n\n        <div className={styles.plot}>\n          {showYAxis ? (\n            <div\n              className={styles.yAxisLine}\n              style={{ bottom: showXAxis ? (xAxisLabel ? 44 : 28) : 0 }}\n            />\n          ) : null}\n          {showGridLines\n            ? gridTicks.map((tick) => (\n                <div\n                  className={styles.gridLine}\n                  key={`grid-${tick}`}\n                  style={{\n                    bottom: showXAxis ? (xAxisLabel ? 44 : 28) : 0,\n                    left: `${toPercent(tick)}%`,\n                  }}\n                />\n              ))\n            : null}\n\n          <Flexbox className={styles.plotRows} gap={8} role=\"list\">\n            {items.map((item) => {\n              const barColor = item.color ?? color;\n              const percent = getBenchmarkBarPercent(item.value, resolvedMaxValue);\n              const isActive = activeKey === item.key;\n              const display = formatBenchmarkAccuracyDisplay({\n                accuracyFormatter,\n                error: item.error,\n                errorFormatter,\n                showError,\n                value: item.value,\n                valueFormatter,\n              });\n              const errorPct =\n                enableErrorBars && item.error !== undefined && item.error !== null\n                  ? toPercent(item.error)\n                  : 0;\n              const errorLeft = Math.max(0, percent - errorPct);\n              const errorWidth = Math.min(100 - errorLeft, errorPct * 2);\n\n              return renderRowTooltip(\n                item,\n                <Flexbox\n                  aria-label={`Rank ${item.rank}: ${String(item.name)}${item.provider ? ` by ${String(item.provider)}` : ''}, score ${display.text}`}\n                  className={cx(styles.plotRow, onValueChange && styles.barHover)}\n                  height={rowHeight}\n                  onClick={() => handleClick(item)}\n                  role={'listitem'}\n                  style={{\n                    cursor: onValueChange || showTooltip ? 'pointer' : 'default',\n                    opacity: activeKey && !isActive ? 0.55 : 1,\n                  }}\n                >\n                  <div className={styles.barTrack}>\n                    <div\n                      className={cx(`${prefixCls}-benchmark-ranking-bar`, styles.bar)}\n                      style={{\n                        background: barColor,\n                        height: barSize,\n                        transition: showAnimation ? undefined : 'none',\n                        width: `${percent}%`,\n                      }}\n                    />\n                    {errorPct > 0 ? (\n                      <div\n                        className={styles.errorBar}\n                        data-testid=\"benchmark-error-bar\"\n                        style={{\n                          left: `${errorLeft}%`,\n                          width: `${errorWidth}%`,\n                        }}\n                      />\n                    ) : null}\n                  </div>\n                </Flexbox>,\n                `plot-${item.key}`,\n              );\n            })}\n          </Flexbox>\n\n          {showXAxis ? (\n            <div className={styles.xAxis}>\n              <div className={styles.xAxisLine} />\n              <div className={styles.xAxisTicks}>\n                {axisTicks.map((tick) => (\n                  <span\n                    className={styles.xAxisTick}\n                    key={tick}\n                    style={{\n                      left: `${toPercent(tick)}%`,\n                      transform:\n                        tick === 0\n                          ? 'translateX(0)'\n                          : tick === resolvedMaxValue\n                            ? 'translateX(-100%)'\n                            : 'translateX(-50%)',\n                    }}\n                  >\n                    {displayFormatter(tick)}\n                  </span>\n                ))}\n              </div>\n              {xAxisLabel ? <div className={styles.xAxisLabel}>{xAxisLabel}</div> : null}\n            </div>\n          ) : null}\n        </div>\n\n        {showValueLabel ? (\n          <Flexbox className={styles.scoreColumn} gap={8}>\n            {items.map((item) => {\n              const textColor = item.highlighted ? resolvedHighlightColor : undefined;\n              const display = formatBenchmarkAccuracyDisplay({\n                accuracyFormatter,\n                error: item.error,\n                errorFormatter,\n                showError: showError && !enableErrorBars,\n                value: item.value,\n                valueFormatter,\n              });\n\n              return renderRowTooltip(\n                item,\n                <Flexbox\n                  align=\"center\"\n                  className={styles.scoreRow}\n                  height={rowHeight}\n                  horizontal\n                  justify=\"flex-end\"\n                  onClick={() => handleClick(item)}\n                  style={{ cursor: onValueChange || showTooltip ? 'pointer' : 'default' }}\n                >\n                  <div\n                    className={styles.score}\n                    style={textColor ? { color: textColor } : undefined}\n                  >\n                    {displayFormatter(item.value)}\n                    {display.errorText ? (\n                      <span className={styles.scoreError}>± {display.errorText}</span>\n                    ) : null}\n                  </div>\n                </Flexbox>,\n                `score-${item.key}`,\n              );\n            })}\n            {showXAxis ? (\n              <div className={styles.axisLabelSpacer} style={{ minHeight: xAxisLabel ? 44 : 28 }} />\n            ) : null}\n          </Flexbox>\n        ) : null}\n\n        {!data.length && <NoData noDataText={noDataText} />}\n      </Flexbox>\n    );\n  },\n);\n\nBenchmarkRankingChart.displayName = 'BenchmarkRankingChart';\n\nexport default BenchmarkRankingChart;\n"],"mappings":"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"}