import { type CurveGenerator } from '@mui/x-charts-vendor/d3-shape';
export type CurveOptions = {
  /**
   * The gap between each segment.
   * @default 0
   */
  gap?: number;
  /**
   * Indicates if the main axis of the visualization.
   */
  isHorizontal?: boolean;
  /**
   * Indicates if the segments values are increasing or decreasing.
   */
  isIncreasing?: boolean;
  /**
   * The order position of the segment.
   */
  position?: number;
  /**
   * The total number of segments that will be drawn.
   * @default 1
   */
  sections?: number;
  /**
   * The border radius of the segments.
   * @default 0
   */
  borderRadius?: number;
  /**
   * The minimum point for all the segments.
   */
  min?: Point;
  /**
   * The maximum point for all the segments.
   */
  max?: Point;
  /**
   * The shape of the point of the funnel for the curves that support it.
   */
  pointShape?: FunnelPointShape;
};
export type FunnelCurveType = 'linear' | 'linear-sharp' | 'step' | 'bump' | 'pyramid' | 'step-pyramid';
export type FunnelPointShape = 'square' | 'sharp';
export type Point = {
  x: number;
  y: number;
};
export interface FunnelCurveGenerator extends CurveGenerator {
  /**
   * Processes the points to create a curve based on the provided options.
   * This does not draw the curve but prepares the points for rendering.
   *
   * @param points The points to process.
   * @param options The options for the curve.
   * @returns The processed points.
   */
  processPoints(points: Point[], xPosition: PositionGetter, yPosition: PositionGetter): Point[];
}
export type PositionGetter = (value: number, bandIndex: number, stackOffset?: number, useBand?: boolean) => number;