export interface Point { name: string; degree: number; speed?: number; } export interface ChartData { name: string; planets: Point[]; ascendant?: number; midheaven?: number; points?: Point[]; houseCusps?: number[]; houseSystemName?: string; timestamp?: Date; location?: string; chartType?: 'natal' | 'event' | 'transit' | 'composite'; compositeSource?: { chartNames: [string, string]; method: 'midpoint'; }; } export type MultiChartData = ChartData[]; export declare function isMultiChartData(obj: ChartData | MultiChartData): obj is MultiChartData; export type UnionedPoint = [Point, string]; export declare enum AspectClassification { Major = "major", Minor = "minor", Esoteric = "esoteric" } export declare enum PlanetCategory { Luminaries = "luminaries", Personal = "personal", Social = "social", Outer = "outer", Angles = "angles" } export interface Aspect { name: string; angle: number; orb: number; classification?: AspectClassification; } export type AspectStrength = 'tight' | 'moderate' | 'wide'; export interface AspectStrengthThresholds { tight: number; moderate: number; } export interface AspectData { planetA: string; planetB: string; p1ChartName?: string; p2ChartName?: string; aspectType: string; orb: number; application?: 'applying' | 'separating' | 'exact'; } export interface PlanetPosition { name: string; degree: number; sign: string; speed?: number; house?: number; chartName?: string; } export interface TSquare { type: 'T-Square'; apex: PlanetPosition; opposition: [PlanetPosition, PlanetPosition]; mode: 'Cardinal' | 'Fixed' | 'Mutable'; averageOrb: number; } export interface GrandTrine { type: 'Grand Trine'; planets: [PlanetPosition, PlanetPosition, PlanetPosition]; element: 'Fire' | 'Earth' | 'Air' | 'Water'; averageOrb: number; } export interface Stellium { type: 'Stellium'; planets: PlanetPosition[]; sign?: string; houses: number[]; span: number; } export interface GrandCross { type: 'Grand Cross'; planets: [PlanetPosition, PlanetPosition, PlanetPosition, PlanetPosition]; mode: 'Cardinal' | 'Fixed' | 'Mutable'; averageOrb: number; } export interface Yod { type: 'Yod'; apex: PlanetPosition; base: [PlanetPosition, PlanetPosition]; averageOrb: number; } export interface MysticRectangle { type: 'Mystic Rectangle'; oppositions: [ [ PlanetPosition, PlanetPosition ], [ PlanetPosition, PlanetPosition ] ]; averageOrb: number; } export interface Kite { type: 'Kite'; grandTrine: [PlanetPosition, PlanetPosition, PlanetPosition]; opposition: PlanetPosition; averageOrb: number; } export type AspectPattern = TSquare | GrandTrine | Stellium | GrandCross | Yod | MysticRectangle | Kite; export interface ChartAnalysis { chart: ChartData; placements: { planets: PlanetPosition[]; [key: string]: any; }; aspects: AspectData[]; groupedAspects?: Map; patterns: AspectPattern[]; stelliums: Stellium[]; signDistributions: { elements: { [key: string]: string[]; }; modalities: { [key: string]: number; }; polarities: { [key: string]: number; }; }; dispositors: { [key: string]: string; }; } export interface PairwiseAnalysis { chart1: ChartData; chart2: ChartData; synastryAspects: AspectData[]; groupedSynastryAspects?: Map; compositePatterns: AspectPattern[]; houseOverlays: { chart1InChart2Houses: { [key: string]: number; }; chart2InChart1Houses: { [key: string]: number; }; }; } export interface GlobalAnalysis { charts: ChartData[]; patterns: AspectPattern[]; } export interface TransitAnalysis { natalChart: ChartData; transitChart: ChartData; aspects: AspectData[]; groupedAspects?: Map; patterns: AspectPattern[]; } export interface AstrologicalReport { settings: Settings; chartAnalyses: ChartAnalysis[]; pairwiseAnalyses: PairwiseAnalysis[]; globalAnalysis?: GlobalAnalysis; transitAnalyses: TransitAnalysis[]; globalTransitAnalysis?: GlobalAnalysis; } export interface AnalysisSettings { aspectDefinitions?: Aspect[] | 'traditional' | 'modern' | 'tight' | 'wide'; skipOutOfSignAspects?: boolean; includeAspectPatterns?: boolean; includeSignDistributions?: boolean; includeDispositors?: boolean | 'finals'; includeHouseOverlays?: boolean; } export interface GroupingSettings { aspectStrengthThresholds?: AspectStrengthThresholds; } export interface FormattingSettings { dateFormat?: string; houseSystemName?: string; outputMode?: 'standard' | 'composite'; } export interface Settings extends AnalysisSettings, GroupingSettings, FormattingSettings { } export type PartialSettings = Partial; export type ChartDataWithInfo = { data: ChartData; index: number; };