import { EventEmitter, ElementRef, AfterViewInit, OnChanges, SimpleChanges, OnDestroy, ChangeDetectorRef } from '@angular/core';
import { VennData, VennIntersection } from '../../services/list-set-operations.service';
import * as i0 from "@angular/core";
/**
 * Event emitted when a Venn region is clicked
 */
export interface VennRegionClickEvent {
    intersection: VennIntersection;
    recordIds: string[];
}
/**
 * Interactive D3-based Venn diagram component for visualizing list overlaps.
 *
 * Features:
 * - Proportional circle sizing based on list size
 * - Animated transitions
 * - Hover highlighting
 * - Click to select regions
 * - Responsive sizing
 */
export declare class VennDiagramComponent implements AfterViewInit, OnChanges, OnDestroy {
    private cdr;
    containerRef: ElementRef<HTMLDivElement>;
    svgRef: ElementRef<SVGSVGElement>;
    data: VennData | null;
    selectedRegion: VennIntersection | null;
    regionClick: EventEmitter<VennRegionClickEvent>;
    regionHover: EventEmitter<VennIntersection | null>;
    tooltipVisible: boolean;
    tooltipX: number;
    tooltipY: number;
    tooltipTitle: string;
    tooltipCount: number;
    private isHoveringIntersectionLabel;
    private svg;
    private resizeObserver;
    private width;
    private height;
    constructor(cdr: ChangeDetectorRef);
    /**
     * Apply the view-vs-list visual distinction to a circle selection: views
     * get a dashed colored stroke; lists get nothing extra (fill-only).
     * Centralized here so all 5 circle-drawing sites stay consistent.
     */
    private applyOperandStyle;
    ngAfterViewInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngOnDestroy(): void;
    private initializeSvg;
    private setupResizeObserver;
    private updateDimensions;
    private render;
    private renderSingleSet;
    private renderTwoSets;
    /**
     * Add a clickable label with background for intersection regions
     */
    private addClickableLabel;
    /**
     * Check if a region is currently selected
     */
    private isRegionSelected;
    /**
     * Calculate proportional radii using a small/medium/large approach
     * This avoids extreme size differences (e.g., 1000 vs 10 items)
     */
    private calculateProportionalRadii;
    private renderThreeSets;
    private getIntersectionLabelPosition;
    /**
     * Render a 4-set Venn diagram using overlapping ellipses.
     * This is a simplified approach - true 4-set Venn diagrams use complex curves.
     * We use two pairs of rotated ellipses to create all 15 possible regions.
     */
    private renderFourSets;
    /**
     * Calculate label position for 4-set Venn intersections
     */
    private getFourSetIntersectionPosition;
    private renderMultipleSets;
    /**
     * Show tooltip for circle/ellipse elements.
     * This is suppressed when hovering an intersection label.
     */
    private showCircleTooltip;
    private showTooltip;
    private moveTooltip;
    /**
     * Show tooltip for intersection label with proper intersection name
     */
    private showLabelTooltip;
    /**
     * Update tooltip position for label without triggering extra change detection
     */
    private moveLabelTooltipPosition;
    private hideTooltip;
    private onCircleClick;
    private onIntersectionClick;
    static ɵfac: i0.ɵɵFactoryDeclaration<VennDiagramComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<VennDiagramComponent, "mj-venn-diagram", never, { "data": { "alias": "data"; "required": false; }; "selectedRegion": { "alias": "selectedRegion"; "required": false; }; }, { "regionClick": "regionClick"; "regionHover": "regionHover"; }, never, never, false, never>;
}
//# sourceMappingURL=venn-diagram.component.d.ts.map