/** * MSAHeader.ts - Interactive MSA Header Component * This module provides functionality for an interactive MSA (Multiple Sequence Alignment) header * with position markers, slider navigation, and position selection. */ import * as DG from 'datagrok-api/dg'; import { ISeqHandler } from './macromolecule/seq-handler'; import { HelmType } from '../helm/types'; import { IMonomerLib } from '../types/monomer-library'; interface WindowRange { start: number; end: number; } interface MSAHeaderOptions { canvas: HTMLCanvasElement; totalPositions?: number; positionWidth?: number; headerHeight?: number; sliderHeight?: number; currentPosition?: number; windowStartPosition?: number; cellBackground?: boolean; sliderColor?: string; x?: number; y?: number; width?: number; height?: number; onPositionChange?: (position: number, range: WindowRange) => void; onHeaderHeightChange?: (height: number) => void; } interface Preventable { preventDefault: () => void; } /** * Base class for all MSA header tracks */ export declare abstract class MSAHeaderTrack { protected ctx: CanvasRenderingContext2D | null; protected visible: boolean; protected height: number; protected minHeight: number; protected defaultHeight: number; protected title: string; protected tooltipEnabled: boolean; protected tooltipContent: ((position: number, monomer: string | null, data: Map) => HTMLElement) | null; constructor(height?: number, minHeight?: number, title?: string); /** * Initialize the track with a canvas context */ init(ctx: CanvasRenderingContext2D): void; getMonomerAt(_x: number, _y: number, _position: number): string | null; enableTooltip(enabled: boolean): void; setTooltipContentGenerator(contentGenerator: (position: number, monomer: string | null, data: Map) => HTMLElement): void; getTooltipContent(position: number, monomer: string | null): HTMLElement | null; /** * Get data for a specific position (to be implemented by subclasses) */ protected getPositionData(position: number): Map | null; setVisible(visible: boolean): void; getHeight(): number; getDefaultHeight(): number; getMinHeight(): number; setHeight(height: number): void; resetHeight(): void; isVisible(): boolean; setTitle(title: string): void; getTitle(): string; /** * Draw the track at the specified position */ abstract draw(x: number, y: number, width: number, height: number, windowStart: number, positionWidth: number, totalPositions: number, currentPosition: number): void; } export declare class WebLogoTrack extends MSAHeaderTrack { private data; private monomerLib; private biotype; private hoveredPosition; private hoveredMonomer; constructor(data?: Map>, height?: number, _colorScheme?: string, title?: string); setHovered(position: number, monomer: string | null): void; protected getPositionData(position: number): Map | null; setupDefaultTooltip(): void; private createFrequencyTable; private createTooltipContent; setMonomerLib(monomerLib: IMonomerLib): void; setBiotype(biotype: HelmType): void; /** * Calculate which monomer is at the specified coordinates within a WebLogo column */ getMonomerAt(x: number, y: number, position: number): string | null; updateData(data: Map>): void; /** * Draw the WebLogo track */ draw(x: number, y: number, width: number, height: number, windowStart: number, positionWidth: number, totalPositions: number, currentPosition: number): void; private drawWebLogoColumn; private drawLettersInColumn; private drawColumnBorder; private drawLetter; private drawLetterSeparators; private drawLetterText; private getMonomerBackgroundColor; private getMonomerTextColor; } /** * Track for displaying conservation bars */ export declare class ConservationTrack extends MSAHeaderTrack { private data; private colorScheme; constructor(data: number[], height?: number, colorScheme?: 'default' | 'rainbow' | 'heatmap', title?: string); updateData(data: number[]): void; /** * Draw the conservation track */ draw(x: number, y: number, width: number, height: number, windowStart: number, positionWidth: number, totalPositions: number, currentPosition: number): void; private drawConservationBar; } export declare class MSAScrollingHeader { private gridColumn; private config; private state; private canvas; private ctx; private eventElement; private tracks; private currentHoverPosition; private currentHoverTrack; private currentHoverMonomer; private previousHoverPosition; private previousHoverTrack; private previousHoverMonomer; private dataFrame; private seqHandler; private seqColumn; private onSelectionCallback; private trackButtons; private userSelectedTracks; constructor(options: MSAHeaderOptions, gridColumn: DG.GridColumn); private determineVisibleTracks; private drawTrackButtons; private drawTrackButton; private handleTrackButtonClick; private isInsideColumnHeaderArea; private snapToTrackHeight; private resetToAutoMode; /** * Draw the column title (shown when above threshold) */ private drawColumnTitle; private clearHoverStates; private redraw; setSelectionData(dataFrame: DG.DataFrame, seqColumn: DG.Column, seqHandler: ISeqHandler, callback?: (position: number, monomer: string) => void): void; setupTooltipHandling(): void; private handleTooltipMouseMove; private handleTooltipMouseLeave; private hideTooltip; draw(x: number, y: number, w: number, h: number, currentPos: number, scrollerStart: number, preventable: Preventable, columnName?: string): void; /** * Draw the dotted cells area with position markers */ private drawDottedCells; /** * Draw the position slider */ private drawSlider; private setupEventElement; getCoords(e: MouseEvent): { x: number; y: number; }; isInHeaderArea(e: MouseEvent): boolean; get positionWidth(): number; set positionWidth(value: number); isInSliderArea(e: MouseEvent): boolean; get sliderWidth(): number; isInSliderDraggableArea(e: MouseEvent): boolean; private setupEventListeners; private handleSelectionClick; private selectRowsWithMonomerAtPosition; private init; addTrack(id: string, track: MSAHeaderTrack): void; removeTrack(id: string): void; getTrack(id: string): T | undefined; updateTrack(id: string, updater: (track: T) => void): void; get isValid(): boolean; private handleMouseDown; private handleMouseWheel; private handleMouseMove; detach(): void; private handleKeyDown; private handleMouseUp; private handleSliderDrag; get headerHeight(): number; set headerHeight(value: number); private handleClick; getWindowRange(): WindowRange; updateConfig(newConfig: Partial): void; getCurrentPosition(): number; setCurrentPosition(position: number): void; /** * ADDED: Public methods for external control */ getHeightThresholds(): { BASE: number; WITH_TITLE: number; WITH_WEBLOGO: number; WITH_BOTH: number; }; } export {}; //# sourceMappingURL=sequence-position-scroller.d.ts.map