vedic-calc 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,283 @@
1
+ # Vedic Calc - Vedic Astrology Chart SDK
2
+
3
+ <p align="center">
4
+ <a href="https://www.npmjs.com/package/kundali-charts"><img src="https://img.shields.io/npm/v/kundali-charts.svg" alt="npm version"></a>
5
+ <a href="https://www.npmjs.com/package/kundali-charts"><img src="https://img.shields.io/npm/dm/kundali-charts.svg" alt="npm downloads"></a>
6
+ <a href="https://github.com/jatingodnani/kundali-charts/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/kundali-charts.svg" alt="MIT License"></a>
7
+ <a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-5.x-blue.svg" alt="TypeScript"></a>
8
+ </p>
9
+
10
+ > High-precision Vedic Astrology (Jyotish) chart generation library using Swiss Ephemeris. Generate Rasi (D-1), Navamsa (D-9) charts and beautiful SVG visualizations.
11
+
12
+ ## Features
13
+
14
+ - **Rasi Chart (D-1)** - Complete birth chart with planetary positions
15
+ - **Navamsa Chart (D-9)** - Divisional chart for marriage & spiritual analysis
16
+ - **SVG Chart Rendering** - Beautiful North Indian chart style
17
+ - **High Precision** - Swiss Ephemeris for accurate astronomical calculations
18
+ - **Vedic Astrology** - Whole Sign houses, Lahiri Ayanamsa
19
+ - **Customizable** - Colors, symbols, layouts
20
+ - **TypeScript** - Full type definitions included
21
+
22
+ ## Installation
23
+
24
+ ```bash
25
+ npm install vedic-calc
26
+ ```
27
+
28
+ ## Quick Start
29
+
30
+ ```typescript
31
+ import { generateRasiChart, generateNorthIndianChartSVG } from 'kundali-charts';
32
+
33
+ // Generate birth chart
34
+ const chart = generateRasiChart(
35
+ new Date('1990-04-29T21:15:00+05:30'), // Date of birth
36
+ 16.544893, // Latitude
37
+ 81.521240, // Longitude
38
+ 'Asia/Kolkata' // Timezone
39
+ );
40
+
41
+ // Generate SVG chart
42
+ const svg = generateNorthIndianChartSVG(chart, { showTable: true });
43
+
44
+ // Save to file or display
45
+ console.log(svg);
46
+ ```
47
+
48
+ ## API Reference
49
+
50
+ ### Chart Generation
51
+
52
+ #### `generateRasiChart(date, latitude, longitude, timezone?, nodeType?)`
53
+
54
+ Generates a complete Rasi (D-1) birth chart.
55
+
56
+ ```typescript
57
+ const chart = generateRasiChart(
58
+ new Date('1990-04-29T21:15:00+05:30'), // Date
59
+ 16.544893, // Latitude
60
+ 81.521240, // Longitude
61
+ 'Asia/Kolkata' // Timezone (optional, default: 'UTC')
62
+ );
63
+ ```
64
+
65
+ **Returns:**
66
+ ```typescript
67
+ {
68
+ birthData: { date, latitude, longitude, timezone },
69
+ ascendant: { degree, sign, signName, nakshatra, nakshatraPada },
70
+ planets: [
71
+ {
72
+ planet: Planet, // 0=Sun, 1=Moon, 2=Mars, etc.
73
+ longitude: number,
74
+ sign: Sign, // 0-11
75
+ signName: string,
76
+ degreeInSign: number,
77
+ nakshatra: string,
78
+ nakshatraPada: number,
79
+ nakshatraLord: string,
80
+ house: number, // 1-12
81
+ isRetrograde: boolean
82
+ }
83
+ ],
84
+ houses: [
85
+ {
86
+ number: number,
87
+ sign: Sign,
88
+ signName: string,
89
+ lord: string,
90
+ planets: Planet[],
91
+ cuspStart: number,
92
+ cuspEnd: number
93
+ }
94
+ ],
95
+ ayanamsa: number
96
+ }
97
+ ```
98
+
99
+ #### `generateNavamsaChart(rasiChart)`
100
+
101
+ Generates Navamsa (D-9) chart from Rasi chart.
102
+
103
+ ```typescript
104
+ const navamsa = generateNavamsaChart(rasiChart);
105
+ ```
106
+
107
+ ### SVG Chart Rendering
108
+
109
+ #### `generateNorthIndianChartSVG(chart, options?)`
110
+
111
+ Generates North Indian style chart (diamond grid layout).
112
+
113
+ ```typescript
114
+ const svg = generateNorthIndianChartSVG(chart, {
115
+ showTable: true, // Show planet details table
116
+ layout: 'row', // 'row' or 'column'
117
+ title: 'My Kundali', // Chart title
118
+ width: 400, // Chart width
119
+ height: 300, // Chart height
120
+ showSignGlyphs: true, // Show zodiac symbols (♈♉♊) or numbers (1,2,3)
121
+ showSignNumbers: true, // Show sign numbers
122
+ showDegrees: true, // Show planet degrees
123
+ customConfig: {
124
+ colors: {
125
+ background: '#FFFFFF',
126
+ border: '#422762',
127
+ innerLines: '#422762',
128
+ signNumber: '#422762',
129
+ text: '#1A1A2E',
130
+ retrograde: '#D63031',
131
+ }
132
+ }
133
+ });
134
+ ```
135
+
136
+ #### `generateSouthIndianChartSVG(chart, options?)`
137
+
138
+ Generates South Indian style chart (3x4 grid layout).
139
+
140
+ ```typescript
141
+ const svg = generateSouthIndianChartSVG(chart, {
142
+ showTable: true,
143
+ showSignGlyphs: true,
144
+ cellWidth: 150,
145
+ cellHeight: 100,
146
+ // ... other options
147
+ });
148
+ ```
149
+
150
+ ### Available Themes
151
+
152
+ ```typescript
153
+ import { PREBUILT_THEMES } from 'kundali-charts';
154
+
155
+ // Use predefined themes
156
+ const svg = generateNorthIndianChartSVG(chart, {
157
+ customConfig: {
158
+ colors: PREBUILT_THEMES.dark.colors,
159
+ // or
160
+ colors: PREBUILT_THEMES.ocean.colors,
161
+ // or
162
+ colors: PREBUILT_THEMES.forest.colors,
163
+ // or
164
+ colors: PREBUILT_THEMES.golden.colors,
165
+ }
166
+ });
167
+ ```
168
+
169
+ ### Constants
170
+
171
+ ```typescript
172
+ import { Planet, Sign, Nakshatras } from 'kundali-charts';
173
+
174
+ // Planets
175
+ Planet.SUN // 0
176
+ Planet.MOON // 1
177
+ Planet.MARS // 2
178
+ Planet.MERCURY // 3
179
+ Planet.JUPITER // 4
180
+ Planet.VENUS // 5
181
+ Planet.SATURN // 6
182
+ Planet.RAHU // 7
183
+ Planet.KETU // 8
184
+
185
+ // Signs (0-11)
186
+ Sign.ARIES // 0
187
+ Sign.TAURUS // 1
188
+ Sign.GEMINI // 2
189
+ // ... etc
190
+ ```
191
+
192
+ ## Example: Complete Kundali with Chart
193
+
194
+ ```typescript
195
+ import { generateRasiChart, generateNavamsaChart, generateNorthIndianChartSVG } from 'kundali-charts';
196
+
197
+ // Birth details
198
+ const date = new Date('1990-04-29T21:15:00+05:30');
199
+ const latitude = 16.544893;
200
+ const longitude = 81.521240;
201
+ const timezone = 'Asia/Kolkata';
202
+
203
+ // Generate charts
204
+ const rasi = generateRasiChart(date, latitude, longitude, timezone);
205
+ const navamsa = generateNavamsaChart(rasi);
206
+
207
+ // Get ascendant
208
+ console.log('Ascendant:', rasi.ascendant.signName);
209
+
210
+ // Get planets in each house
211
+ rasi.houses.forEach(house => {
212
+ console.log(`House ${house.number} (${house.signName}):`, house.planets);
213
+ });
214
+
215
+ // Generate SVG
216
+ const chartSVG = generateNorthIndianChartSVG(rasi, {
217
+ showTable: true,
218
+ title: 'My Birth Chart',
219
+ showSignGlyphs: false // Show numbers instead of symbols
220
+ });
221
+
222
+ // Use the SVG in your HTML
223
+ document.getElementById('chart')!.innerHTML = chartSVG;
224
+ ```
225
+
226
+ ## HTML Output Example
227
+
228
+ ```html
229
+ <!DOCTYPE html>
230
+ <html>
231
+ <head>
232
+ <title>Kundali Chart</title>
233
+ <style>
234
+ body { display: flex; justify-content: center; padding: 20px; }
235
+ .chart { background: white; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.15); }
236
+ </style>
237
+ </head>
238
+ <body>
239
+ <div class="chart">
240
+ <!-- SVG will be inserted here -->
241
+ <div id="chart"></div>
242
+ </div>
243
+ <script>
244
+ // Generate and insert chart
245
+ </script>
246
+ </body>
247
+ </html>
248
+ ```
249
+
250
+ ## API Summary
251
+
252
+ | Function | Description |
253
+ |----------|-------------|
254
+ | `generateRasiChart(date, lat, lon, tz)` | Generate Rasi (D-1) birth chart |
255
+ | `generateNavamsaChart(rasiChart)` | Generate Navamsa (D-9) chart |
256
+ | `generateNorthIndianChartSVG(chart, options)` | North Indian style SVG |
257
+ | `generateSouthIndianChartSVG(chart, options)` | South Indian style SVG |
258
+ | `calculateNavamsaSign(longitude)` | Calculate Navamsa sign for longitude |
259
+ | `getAyanamsa(jd, system)` | Get ayanamsa value |
260
+ | `calculateHouseCusps(jd, lat, lon, system)` | Calculate house cusps |
261
+
262
+ ## Requirements
263
+
264
+ - Node.js >= 16.0.0
265
+ - npm or yarn
266
+
267
+ ## Swiss Ephemeris
268
+
269
+ This library uses [Swiss Ephemeris](https://www.astro.com/swisseph/) for high-precision planetary calculations. The `ephe/` folder contains necessary ephemeris data files.
270
+
271
+ ## License
272
+
273
+ MIT License - see [LICENSE](LICENSE) for details.
274
+
275
+ ## Keywords
276
+
277
+ vedic astrology, jyotish, kundali, horoscope, rasi chart, navamsa, birth chart, swisseph, hindu astrology, indian astrology, planetary positions, houses, nakshatra, rashis
278
+
279
+ ## Related
280
+
281
+ - [Swiss Ephemeris](https://www.astro.com/swisseph/) - Astronomical calculations
282
+ - [AstroSage](https://www.astro.com/) - Online astrology calculations reference
283
+ - [Vedic Rishi](https://www.vedicrishi.com/) - Vedic astrology reference
@@ -0,0 +1,104 @@
1
+ import { Planet, Sign } from './constants';
2
+ import { NodeType } from '../core/swisseph';
3
+ /**
4
+ * Complete data for a single planet in a chart
5
+ */
6
+ export interface PlanetData {
7
+ planet: Planet;
8
+ longitude: number;
9
+ sign: Sign;
10
+ signName: string;
11
+ degreeInSign: number;
12
+ nakshatra: string;
13
+ nakshatraPada: number;
14
+ nakshatraLord: string;
15
+ house: number;
16
+ isRetrograde: boolean;
17
+ }
18
+ /**
19
+ * Complete Rasi (D-1) Chart
20
+ */
21
+ export interface RasiChart {
22
+ birthData: {
23
+ date: Date;
24
+ latitude: number;
25
+ longitude: number;
26
+ timezone: string;
27
+ };
28
+ ascendant: {
29
+ degree: number;
30
+ sign: Sign;
31
+ signName: string;
32
+ nakshatra: string;
33
+ nakshatraPada: number;
34
+ };
35
+ planets: PlanetData[];
36
+ houses: {
37
+ number: number;
38
+ sign: Sign;
39
+ signName: string;
40
+ lord: string;
41
+ planets: Planet[];
42
+ cuspStart: number;
43
+ cuspEnd: number;
44
+ }[];
45
+ ayanamsa: number;
46
+ }
47
+ /**
48
+ * Navamsa (D-9) Chart Data
49
+ */
50
+ export interface NavamsaChart {
51
+ planets: {
52
+ planet: Planet;
53
+ navamsaSign: Sign;
54
+ navamsaSignName: string;
55
+ navamsaHouse: number;
56
+ longitude: number;
57
+ }[];
58
+ ascendantNavamsa: {
59
+ sign: Sign;
60
+ signName: string;
61
+ longitude: number;
62
+ };
63
+ }
64
+ /**
65
+ * Calculates the Navamsa sign for a given longitude
66
+ * Navamsa divides each sign into 9 parts (3°20' each)
67
+ *
68
+ * @param longitude Sidereal longitude (0-360)
69
+ * @returns Navamsa sign (0-11)
70
+ */
71
+ export declare function calculateNavamsaSign(longitude: number): Sign;
72
+ /**
73
+ * Generates a complete Rasi (D-1) Chart
74
+ *
75
+ * @param date Birth date and time
76
+ * @param latitude Birth latitude
77
+ * @param longitude Birth longitude
78
+ * @param timezone Timezone string (e.g., 'Asia/Kolkata')
79
+ * @returns Complete Rasi Chart
80
+ */
81
+ export declare function generateRasiChart(date: Date, latitude: number, longitude: number, timezone?: string, nodeType?: NodeType): RasiChart;
82
+ /**
83
+ * Generates Navamsa (D-9) Chart from a Rasi Chart
84
+ *
85
+ * @param rasiChart The Rasi chart to derive Navamsa from
86
+ * @returns Navamsa Chart
87
+ */
88
+ export declare function generateNavamsaChart(rasiChart: RasiChart): NavamsaChart;
89
+ /**
90
+ * Generates both Rasi and Navamsa charts
91
+ *
92
+ * @param date Birth date and time
93
+ * @param latitude Birth latitude
94
+ * @param longitude Birth longitude
95
+ * @param timezone Timezone string
96
+ * @returns Object containing both charts
97
+ */
98
+ export declare function generateKundali(date: Date, latitude: number, longitude: number, timezone?: string, options?: {
99
+ nodeType?: NodeType;
100
+ }): {
101
+ rasi: RasiChart;
102
+ navamsa: NavamsaChart;
103
+ };
104
+ //# sourceMappingURL=charts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../src/astrology/charts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAc,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAuD,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjG;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE;QACP,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IACJ,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,IAAI,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;IACJ,gBAAgB,EAAE;QACd,IAAI,EAAE,IAAI,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;CACL;AAmBD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAoB5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAc,EACxB,QAAQ,GAAE,QAA6B,GACxC,SAAS,CA+EX;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,CAyBvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC3B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAc,EACxB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAK5C"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateNavamsaSign = calculateNavamsaSign;
4
+ exports.generateRasiChart = generateRasiChart;
5
+ exports.generateNavamsaChart = generateNavamsaChart;
6
+ exports.generateKundali = generateKundali;
7
+ const planetaryPosition_1 = require("./planetaryPosition");
8
+ const houses_1 = require("../core/houses");
9
+ const swisseph_1 = require("../core/swisseph");
10
+ const ayanamsa_1 = require("../core/ayanamsa");
11
+ const math_1 = require("../utils/math");
12
+ /**
13
+ * Sign names for display
14
+ */
15
+ const SIGN_NAMES = [
16
+ 'Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo',
17
+ 'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces'
18
+ ];
19
+ /**
20
+ * Nakshatra lords for Vimshottari Dasha
21
+ */
22
+ const NAKSHATRA_LORDS = [
23
+ 'Ketu', 'Venus', 'Sun', 'Moon', 'Mars', 'Rahu', 'Jupiter', 'Saturn', 'Mercury',
24
+ 'Ketu', 'Venus', 'Sun', 'Moon', 'Mars', 'Rahu', 'Jupiter', 'Saturn', 'Mercury',
25
+ 'Ketu', 'Venus', 'Sun', 'Moon', 'Mars', 'Rahu', 'Jupiter', 'Saturn', 'Mercury'
26
+ ];
27
+ /**
28
+ * Calculates the Navamsa sign for a given longitude
29
+ * Navamsa divides each sign into 9 parts (3°20' each)
30
+ *
31
+ * @param longitude Sidereal longitude (0-360)
32
+ * @returns Navamsa sign (0-11)
33
+ */
34
+ function calculateNavamsaSign(longitude) {
35
+ const normalized = (0, math_1.normalizeAngle)(longitude);
36
+ // Each sign has 9 navamsas of 3.333... degrees each
37
+ const navamsaSize = 30 / 9; // 3.333...
38
+ const sign = Math.floor(normalized / 30);
39
+ const degreeInSign = normalized % 30;
40
+ const navamsaInSign = Math.floor(degreeInSign / navamsaSize);
41
+ // Calculate starting navamsa based on sign element
42
+ // Fire signs (0,4,8) start from Aries (0)
43
+ // Earth signs (1,5,9) start from Capricorn (9)
44
+ // Air signs (2,6,10) start from Libra (6)
45
+ // Water signs (3,7,11) start from Cancer (3)
46
+ const element = sign % 4;
47
+ const startingNavamsa = [0, 9, 6, 3][element];
48
+ const navamsaSign = (startingNavamsa + navamsaInSign) % 12;
49
+ return navamsaSign;
50
+ }
51
+ /**
52
+ * Generates a complete Rasi (D-1) Chart
53
+ *
54
+ * @param date Birth date and time
55
+ * @param latitude Birth latitude
56
+ * @param longitude Birth longitude
57
+ * @param timezone Timezone string (e.g., 'Asia/Kolkata')
58
+ * @returns Complete Rasi Chart
59
+ */
60
+ function generateRasiChart(date, latitude, longitude, timezone = 'UTC', nodeType = swisseph_1.NodeType.TRUE_NODE) {
61
+ // Step 1: Calculate Julian Day
62
+ const jd = (0, swisseph_1.getJulianDay)(date);
63
+ // Step 2: Get Ayanamsa for this date
64
+ const ayanamsa = (0, ayanamsa_1.getAyanamsa)(jd, ayanamsa_1.AyanamsaSystem.LAHIRI);
65
+ // Step 3: Get planetary positions (tropical)
66
+ const tropicalPositions = (0, swisseph_1.getPlanetaryPositions)(jd, nodeType);
67
+ // Step 4: Calculate house cusps (tropical) - only for Ascendant
68
+ const tropicalHouseCusps = (0, houses_1.calculateHouseCusps)(jd, latitude, longitude, houses_1.HouseSystem.WHOLE_SIGN);
69
+ // Step 5: Convert Ascendant to Sidereal
70
+ const siderealAscendant = (0, ayanamsa_1.tropicalToSidereal)(tropicalHouseCusps.ascendant, ayanamsa);
71
+ const ascendantSign = (0, planetaryPosition_1.getSign)(siderealAscendant);
72
+ const ascendantNakshatra = (0, planetaryPosition_1.getNakshatra)(siderealAscendant);
73
+ // Step 5b: Calculate SIDEREAL Whole Sign house cusps
74
+ // Astrosage and most Vedic software use Whole Sign houses
75
+ // Each house = one complete zodiac sign
76
+ const siderealHouseCusps = (0, houses_1.calculateWholeSignHouses)(siderealAscendant);
77
+ // Step 6: Convert each planet to Sidereal and build planet data
78
+ const planets = tropicalPositions.map((pos) => {
79
+ const siderealLongitude = (0, ayanamsa_1.tropicalToSidereal)(pos.longitude, ayanamsa);
80
+ const sign = (0, planetaryPosition_1.getSign)(siderealLongitude);
81
+ const nakshatra = (0, planetaryPosition_1.getNakshatra)(siderealLongitude);
82
+ const nakshatraIndex = Math.floor(siderealLongitude / (360 / 27));
83
+ return {
84
+ planet: pos.planet,
85
+ longitude: siderealLongitude,
86
+ sign: sign,
87
+ signName: SIGN_NAMES[sign],
88
+ degreeInSign: (0, planetaryPosition_1.getDegreeInSign)(siderealLongitude),
89
+ nakshatra: nakshatra,
90
+ nakshatraPada: (0, planetaryPosition_1.getNakshatraPada)(siderealLongitude),
91
+ nakshatraLord: NAKSHATRA_LORDS[nakshatraIndex],
92
+ house: (0, houses_1.getPlanetHouseWholeSign)(siderealLongitude, siderealAscendant),
93
+ isRetrograde: pos.isRetrograde,
94
+ };
95
+ });
96
+ // Step 7: Build houses data
97
+ const houses = Array.from({ length: 12 }, (_, i) => {
98
+ const houseNumber = i + 1;
99
+ const signIndex = (ascendantSign + i) % 12;
100
+ const planetsInHouse = planets.filter(p => p.house === houseNumber).map(p => p.planet);
101
+ return {
102
+ number: houseNumber,
103
+ sign: signIndex,
104
+ signName: SIGN_NAMES[signIndex],
105
+ lord: (0, houses_1.getHouseLord)(signIndex * 30),
106
+ planets: planetsInHouse,
107
+ cuspStart: siderealHouseCusps[i],
108
+ cuspEnd: siderealHouseCusps[(i + 1) % 12],
109
+ };
110
+ });
111
+ return {
112
+ birthData: {
113
+ date,
114
+ latitude,
115
+ longitude,
116
+ timezone,
117
+ },
118
+ ascendant: {
119
+ degree: siderealAscendant,
120
+ sign: ascendantSign,
121
+ signName: SIGN_NAMES[ascendantSign],
122
+ nakshatra: ascendantNakshatra,
123
+ nakshatraPada: (0, planetaryPosition_1.getNakshatraPada)(siderealAscendant),
124
+ },
125
+ planets,
126
+ houses,
127
+ ayanamsa,
128
+ };
129
+ }
130
+ /**
131
+ * Generates Navamsa (D-9) Chart from a Rasi Chart
132
+ *
133
+ * @param rasiChart The Rasi chart to derive Navamsa from
134
+ * @returns Navamsa Chart
135
+ */
136
+ function generateNavamsaChart(rasiChart) {
137
+ const ascendantNavamsaSign = calculateNavamsaSign(rasiChart.ascendant.degree);
138
+ const planets = rasiChart.planets.map(p => {
139
+ const navamsaSign = calculateNavamsaSign(p.longitude);
140
+ // Calculate house in navamsa (1-12) from navamsa ascendant
141
+ const navamsaHouse = ((navamsaSign - ascendantNavamsaSign + 12) % 12) + 1;
142
+ return {
143
+ planet: p.planet,
144
+ navamsaSign,
145
+ navamsaSignName: SIGN_NAMES[navamsaSign],
146
+ navamsaHouse,
147
+ longitude: p.longitude,
148
+ };
149
+ });
150
+ return {
151
+ planets,
152
+ ascendantNavamsa: {
153
+ sign: ascendantNavamsaSign,
154
+ signName: SIGN_NAMES[ascendantNavamsaSign],
155
+ longitude: rasiChart.ascendant.degree,
156
+ },
157
+ };
158
+ }
159
+ /**
160
+ * Generates both Rasi and Navamsa charts
161
+ *
162
+ * @param date Birth date and time
163
+ * @param latitude Birth latitude
164
+ * @param longitude Birth longitude
165
+ * @param timezone Timezone string
166
+ * @returns Object containing both charts
167
+ */
168
+ function generateKundali(date, latitude, longitude, timezone = 'UTC', options) {
169
+ const rasi = generateRasiChart(date, latitude, longitude, timezone, options?.nodeType);
170
+ const navamsa = generateNavamsaChart(rasi);
171
+ return { rasi, navamsa };
172
+ }
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Zodiac Signs (Rashis) in Vedic Astrology
3
+ * Each sign occupies 30 degrees of the 360-degree zodiac
4
+ */
5
+ export declare enum Sign {
6
+ ARIES = 0,// Mesha
7
+ TAURUS = 1,// Vrishabha
8
+ GEMINI = 2,// Mithuna
9
+ CANCER = 3,// Karka
10
+ LEO = 4,// Simha
11
+ VIRGO = 5,// Kanya
12
+ LIBRA = 6,// Tula
13
+ SCORPIO = 7,// Vrishchika
14
+ SAGITTARIUS = 8,// Dhanu
15
+ CAPRICORN = 9,// Makara
16
+ AQUARIUS = 10,// Kumbha
17
+ PISCES = 11
18
+ }
19
+ export declare const SignNames: {
20
+ 0: {
21
+ en: string;
22
+ sa: string;
23
+ };
24
+ 1: {
25
+ en: string;
26
+ sa: string;
27
+ };
28
+ 2: {
29
+ en: string;
30
+ sa: string;
31
+ };
32
+ 3: {
33
+ en: string;
34
+ sa: string;
35
+ };
36
+ 4: {
37
+ en: string;
38
+ sa: string;
39
+ };
40
+ 5: {
41
+ en: string;
42
+ sa: string;
43
+ };
44
+ 6: {
45
+ en: string;
46
+ sa: string;
47
+ };
48
+ 7: {
49
+ en: string;
50
+ sa: string;
51
+ };
52
+ 8: {
53
+ en: string;
54
+ sa: string;
55
+ };
56
+ 9: {
57
+ en: string;
58
+ sa: string;
59
+ };
60
+ 10: {
61
+ en: string;
62
+ sa: string;
63
+ };
64
+ 11: {
65
+ en: string;
66
+ sa: string;
67
+ };
68
+ };
69
+ /**
70
+ * Nakshatras (Lunar Mansions)
71
+ * 27 divisions of the zodiac, each 13°20' (13.333...)
72
+ */
73
+ export declare const Nakshatras: readonly ["Ashwini", "Bharani", "Krittika", "Rohini", "Mrigashira", "Ardra", "Punarvasu", "Pushya", "Ashlesha", "Magha", "Purva Phalguni", "Uttara Phalguni", "Hasta", "Chitra", "Swati", "Vishakha", "Anuradha", "Jyeshtha", "Mula", "Purva Ashadha", "Uttara Ashadha", "Shravana", "Dhanishta", "Shatabhisha", "Purva Bhadrapada", "Uttara Bhadrapada", "Revati"];
74
+ export type NakshatraName = typeof Nakshatras[number];
75
+ /**
76
+ * Planets in Vedic Astrology
77
+ * Sun to Ketu (9 grahas)
78
+ */
79
+ export declare enum Planet {
80
+ SUN = 0,// Surya
81
+ MOON = 1,// Chandra
82
+ MARS = 2,// Mangal
83
+ MERCURY = 3,// Budh
84
+ JUPITER = 4,// Guru
85
+ VENUS = 5,// Shukra
86
+ SATURN = 6,// Shani
87
+ RAHU = 7,// North Node
88
+ KETU = 8
89
+ }
90
+ export declare const PlanetNames: {
91
+ 0: {
92
+ en: string;
93
+ sa: string;
94
+ };
95
+ 1: {
96
+ en: string;
97
+ sa: string;
98
+ };
99
+ 2: {
100
+ en: string;
101
+ sa: string;
102
+ };
103
+ 3: {
104
+ en: string;
105
+ sa: string;
106
+ };
107
+ 4: {
108
+ en: string;
109
+ sa: string;
110
+ };
111
+ 5: {
112
+ en: string;
113
+ sa: string;
114
+ };
115
+ 6: {
116
+ en: string;
117
+ sa: string;
118
+ };
119
+ 7: {
120
+ en: string;
121
+ sa: string;
122
+ };
123
+ 8: {
124
+ en: string;
125
+ sa: string;
126
+ };
127
+ };
128
+ /**
129
+ * Swiss Ephemeris Planet IDs mapping to our Planet enum
130
+ */
131
+ export declare const SwissEphPlanetIds: {
132
+ 0: number;
133
+ 1: number;
134
+ 3: number;
135
+ 5: number;
136
+ 2: number;
137
+ 4: number;
138
+ 6: number;
139
+ 7: number;
140
+ 8: number;
141
+ };
142
+ //# sourceMappingURL=constants.d.ts.map