@wesantal/santali-calendar 1.0.3 → 1.0.4

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 CHANGED
@@ -24,16 +24,19 @@ import {
24
24
  getMonth,
25
25
  isLeapYear,
26
26
  weekDays,
27
+ santaliWeeks,
27
28
  festivals,
28
29
  months,
29
- formatDate,
30
30
  formatDateShort,
31
31
  toOlChikiNumeral,
32
+ getNextNewMoon,
33
+ getNextFullMoon,
34
+ getMoonPhase,
32
35
  } from "@wesantal/santali-calendar";
33
36
 
34
37
  // Get today's Santali date
35
38
  const today = getToday();
36
- // { day: 15, year: 2026, month: "ᱢᱟᱜᱽ", monthIndex: 0, startDate: "...", endDate: "..." }
39
+ // { day: 15, year: 2026, month: { name: "ᱢᱟᱜᱽ", english: "Mag", ... }, monthIndex: 0, ... }
37
40
 
38
41
  // Convert any Gregorian date
39
42
  const date = getDate(new Date("2026-06-15"));
@@ -52,8 +55,12 @@ const magh = getMonth(2026, 0);
52
55
  toOlChikiNumeral(2026); // "᱒᱐᱒᱖"
53
56
 
54
57
  // Format dates
55
- formatDate("2026-01-19T00:00:00.000Z"); // "19 January 2026"
56
58
  formatDateShort("2026-01-19T00:00:00.000Z"); // "19 Jan 2026"
59
+
60
+ // Moon phase utilities
61
+ const nextNewMoon = getNextNewMoon();
62
+ const nextFullMoon = getNextFullMoon();
63
+ const phase = getMoonPhase(new Date("2026-06-15"));
57
64
  ```
58
65
 
59
66
  ## Calendar Structure
@@ -63,19 +70,20 @@ formatDateShort("2026-01-19T00:00:00.000Z"); // "19 Jan 2026"
63
70
  ```typescript
64
71
  {
65
72
  year: 2026,
66
- startDate: "2026-01-19T00:00:00.000Z",
67
- endDate: "2027-01-07T00:00:00.000Z",
73
+ startDate: "2026-01-19",
74
+ endDate: "2027-01-07",
68
75
  currentMonthIndex: 0,
69
76
  months: [
70
77
  {
71
78
  name: "ᱢᱟᱜᱽ",
72
79
  english: "Mag",
73
- startDate: "2026-01-19T00:00:00.000Z",
74
- endDate: "2026-02-17T00:00:00.000Z",
80
+ startDate: "2026-01-19",
81
+ endDate: "2026-02-17",
82
+ totalDays: 30,
75
83
  days: [
76
84
  null, // empty padding cell
77
- { day: "", date: "2026-01-19", weekDay: "sun", isToday: false, isCurrentMonth: true },
78
- // ... all days in flat array (42 cells for 6 rows × 7 columns)
85
+ { day: "", date: "2026-01-19", weekDay: "Sunday", isToday: false, isCurrentMonth: true, isNewMoon: false, isFullMoon: false, santaliWeekDay: "ᱥᱤᱸᱜᱤ" },
86
+ // ... flat array of 42 cells (6 rows × 7 columns)
79
87
  ]
80
88
  },
81
89
  // ... 12 or 13 months
@@ -89,11 +97,11 @@ Each month contains a flat `days` array with 42 cells (6 rows × 7 columns). Eac
89
97
 
90
98
  - A `SantaliCalendarDay` object:
91
99
  ```typescript
92
- { day: "", date: "2026-01-19", weekDay: "sun", isToday: false, isCurrentMonth: true }
100
+ { day: "", date: "2026-01-19", weekDay: "Sunday", isToday: false, isCurrentMonth: true, isNewMoon: false, isFullMoon: false, santaliWeekDay: "ᱥᱤᱸᱜᱤ" }
93
101
  ```
94
102
  - `null` for empty padding cells
95
103
 
96
- The `day` field is in Ol Chiki script. Use `weekDay` to determine column positioning when rendering a grid layout.
104
+ The `day` field is in Ol Chiki script. Use `weekDay` for English names or `santaliWeekDay` for Ol Chiki weekday names when rendering a grid layout.
97
105
 
98
106
  ## Santali Months
99
107
 
@@ -103,14 +111,14 @@ The `day` field is in Ol Chiki script. Use `weekDay` to determine column positio
103
111
  | 1 | Phagun | ᱯᱷᱟ.ᱜᱩᱱ | 29 |
104
112
  | 2 | Chaat | ᱪᱟ.ᱛ | 30 |
105
113
  | 3 | Baisak | ᱵᱟ.ᱭᱥᱟ.ᱠ | 29 |
106
- | 4 | Jhent | ᱡᱷᱮᱸᱴ | 30 |
114
+ | 4 | Jhent | ᱡᱷᱮᱸᱴ | 29 |
107
115
  | 5 | Asal | ᱟᱥᱟᱲ | 29 |
108
116
  | 6 | Saan | ᱥᱟᱱ | 30 |
109
117
  | 7 | Bhador | ᱵᱷᱟᱫᱚᱨ | 29 |
110
118
  | 8 | Dasain | ᱫᱟᱥᱟᱸᱭ | 30 |
111
119
  | 9 | Saharay | ᱥᱚᱦᱨᱟᱭ | 29 |
112
120
  | 10 | Aghan | ᱟᱜᱷᱟᱬ | 30 |
113
- | 11 | Pus | ᱯᱩᱥ | 29 |
121
+ | 11 | Pus | ᱯᱩᱥ | 30 |
114
122
 
115
123
  **Normal year:** 354 days (12 months). **Leap year:** 384 days (adds Sarcha, a 30-day intercalary month).
116
124
 
@@ -144,20 +152,28 @@ null = empty cell
144
152
  | `getToday()` | Today's Santali date |
145
153
  | `getDate(date)` | Convert a Gregorian date to Santali |
146
154
  | `isLeapYear(year)` | Check if year has 13 months |
147
- | `buildYearStart(year)` | Gregorian start date for a Santali year |
148
- | `formatDate(iso)` | Long format date (e.g. "19 January 2026") |
155
+ | `getYearDays(year)` | Get total days in a year (354 or 384) |
149
156
  | `formatDateShort(iso)` | Short format date (e.g. "19 Jan 2026") |
150
157
  | `toOlChikiNumeral(n)` | Convert number to Ol Chiki script |
158
+ | `getNextNewMoon(date?)` | Find the next New Moon |
159
+ | `getNextFullMoon(date?)` | Find the next Full Moon |
160
+ | `getMoonPhase(date)` | Get moon phase for a date |
161
+ | `getMoonPhaseName(illumination)` | Get phase name from illumination data |
162
+ | `getMoonPhaseIcon(illumination)` | Get phase icon from illumination data |
163
+ | `getMoonPhaseDescription(illumination)` | Get phase description from illumination data |
164
+ | `getSunriseAndSunset(date, lat, lng)` | Get sunrise/sunset times |
165
+ | `getMoonTimes(date, lat, lng)` | Get moonrise/moonset times |
166
+ | `getLunarPhases(start, end)` | Get all phases between two dates |
151
167
 
152
168
  ### Constants
153
169
 
154
170
  | Export | Description |
155
171
  |--------|-------------|
156
172
  | `months` | Array of 12 base month definitions |
157
- | `festivals` | Array of 11 festivals with metadata |
158
- | `weekDays` | Weekday names in Ol Chiki script |
159
- | `METONIC_CYCLE_START` | Metonic cycle anchor year (2026) |
160
- | `METONIC_LEAP_POS` | Set of leap positions within the cycle |
173
+ | `santaliMonths` | Array of 13 months (includes Sarcha for leap years) |
174
+ | `festivals` | Array of 4 Santali cultural festivals/events |
175
+ | `weekDays` | Array of English weekday names (Sunday-first) |
176
+ | `santaliWeeks` | Array of Ol Chiki weekday objects with `name` and `english` |
161
177
 
162
178
  ## Festivals
163
179
 
@@ -165,11 +181,11 @@ null = empty cell
165
181
  import { festivals } from "@wesantal/santali-calendar";
166
182
 
167
183
  festivals.forEach((f) => {
168
- console.log(`${f.name}: ${f.date ?? "Date varies"}`);
184
+ console.log(`${f.name}: ${f.startedAt}`);
169
185
  });
170
186
  ```
171
187
 
172
- Each festival includes `id`, `name`, `date`, `santaliMonth`, `description`, and `type` (`"festival"`, `"cultural"`, or `"community"`).
188
+ Each festival includes `id`, `name`, `startedAt` (founding date), `description`, and `type` (`"cultural"` or `"community"`).
173
189
 
174
190
  ## TypeScript
175
191
 
@@ -177,7 +193,10 @@ Full type support:
177
193
 
178
194
  ```typescript
179
195
  import type {
196
+ DateTime,
180
197
  WeekDay,
198
+ SantaliWeekDay,
199
+ SantaliWeek,
181
200
  SantaliMonth,
182
201
  SantaliMonthInfo,
183
202
  SantaliCalendarYear,
@@ -187,6 +206,12 @@ import type {
187
206
  SantaliCalendarMonth,
188
207
  SantaliFestival,
189
208
  TodaySantaliDate,
209
+ MoonPhase,
210
+ MoonPhaseIcon,
211
+ MoonPhaseName,
212
+ LunarQuarterType,
213
+ LunarQuarter,
214
+ LunarEvents,
190
215
  } from "@wesantal/santali-calendar";
191
216
  ```
192
217
 
@@ -1,3 +1,4 @@
1
1
  import { SantaliMonthInfo } from "../types/index.js";
2
2
  export declare const months: SantaliMonthInfo[];
3
+ export declare const santaliMonths: SantaliMonthInfo[];
3
4
  //# sourceMappingURL=months.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"months.d.ts","sourceRoot":"","sources":["../../src/constants/months.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,MAAM,EAAE,gBAAgB,EA6DpC,CAAC"}
1
+ {"version":3,"file":"months.d.ts","sourceRoot":"","sources":["../../src/constants/months.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,MAAM,EAAE,gBAAgB,EA6DpC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,gBAAgB,EAO3C,CAAC"}
@@ -60,4 +60,12 @@ export const months = [
60
60
  english: "Pus",
61
61
  },
62
62
  ];
63
+ export const santaliMonths = [
64
+ ...months,
65
+ {
66
+ days: 30,
67
+ name: "ᱥᱟᱨᱪᱟ",
68
+ english: "Sarcha",
69
+ },
70
+ ];
63
71
  //# sourceMappingURL=months.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"months.js","sourceRoot":"","sources":["../../src/constants/months.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAuB;IACxC;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK;KACf;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;KACnB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;KACf;CACF,CAAC"}
1
+ {"version":3,"file":"months.js","sourceRoot":"","sources":["../../src/constants/months.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAuB;IACxC;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK;KACf;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,MAAM;KAChB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;KAClB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;KACnB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;KACjB;IACD;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;KACf;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAuB;IAC/C,GAAG,MAAM;IACT;QACE,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,QAAQ;KAClB;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const IST_TIME_ZONE = "Asia/Kolkata";
2
+ export declare const MONTH_START_CUTOFF_HOUR = 17;
3
+ export declare const MONTH_START_CUTOFF_MINUTE = 0;
4
+ export declare const METONIC_CYCLE_START = 2026;
5
+ export declare const METONIC_LEAP_POS: Set<number>;
6
+ export declare const YEAR_ANCHOR_DATE = "2026-01-19T00:00:00.000Z";
7
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/constants/rules.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,iBAAiB,CAAC;AAC5C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,gBAAgB,aAAoC,CAAC;AAClE,eAAO,MAAM,gBAAgB,6BAA6B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const IST_TIME_ZONE = "Asia/Kolkata";
2
+ export const MONTH_START_CUTOFF_HOUR = 17;
3
+ export const MONTH_START_CUTOFF_MINUTE = 0;
4
+ export const METONIC_CYCLE_START = 2026;
5
+ export const METONIC_LEAP_POS = new Set([1, 4, 7, 9, 12, 15, 18]);
6
+ export const YEAR_ANCHOR_DATE = "2026-01-19T00:00:00.000Z";
7
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/constants/rules.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAC;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC"}
@@ -42,6 +42,8 @@ export interface SantaliCalendarDay {
42
42
  date: string;
43
43
  isToday: boolean;
44
44
  weekDay: WeekDay;
45
+ isNewMoon: boolean;
46
+ isFullMoon: boolean;
45
47
  isCurrentMonth: boolean;
46
48
  santaliWeekDay: SantaliWeekDay;
47
49
  }
@@ -53,8 +55,6 @@ export interface SantaliCalendarMonth {
53
55
  totalDays: number;
54
56
  startDate: string;
55
57
  description?: string;
56
- newMoonPhase: MoonPhase;
57
- fullMoonPhase: MoonPhase;
58
58
  days: SantaliCalendarDayCell[];
59
59
  }
60
60
  export interface SantaliCalendarYear {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- import { DateTime, MoonPhase, MoonPhaseName } from "../types/index.js";
2
- export declare function searchMoonPhase(name: MoonPhaseName, date: DateTime, totalDays: number): MoonPhase;
3
- export declare function getNextNewMoon(date?: DateTime): MoonPhase;
4
- export declare function getNextFullMoon(date?: DateTime): MoonPhase;
1
+ import { DateTime, LunarQuarter } from "../types/index.js";
2
+ export declare function getNextNewMoon(date?: DateTime): LunarQuarter;
3
+ /**
4
+ * Find the next Full Moon (Purnima).
5
+ */
6
+ export declare function getNextFullMoon(date?: DateTime): LunarQuarter;
5
7
  //# sourceMappingURL=astronomy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"astronomy.d.ts","sourceRoot":"","sources":["../../src/utils/astronomy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvE,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,GAChB,SAAS,CAeX;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE,QAAqB,aAEzD;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE,QAAqB,aAE1D"}
1
+ {"version":3,"file":"astronomy.d.ts","sourceRoot":"","sources":["../../src/utils/astronomy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAU3D,wBAAgB,cAAc,CAAC,IAAI,GAAE,QAAqB,GAAG,YAAY,CAiBxE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,QAAqB,GAAG,YAAY,CAezE"}
@@ -1,23 +1,44 @@
1
- import { addDays } from "date-fns";
2
- import { getMoonPhase } from "./moon-phase.js";
3
- export function searchMoonPhase(name, date, totalDays) {
4
- let moonPhase = undefined;
5
- let searchedDays = 0;
6
- while (searchedDays !== totalDays || !moonPhase) {
7
- const startDate = addDays(date, searchedDays);
8
- const currentMoonPhase = getMoonPhase(startDate);
9
- if (currentMoonPhase.name === name) {
10
- moonPhase = currentMoonPhase;
11
- break;
12
- }
13
- searchedDays++;
14
- }
15
- return moonPhase;
1
+ import { SearchMoonPhase } from "astronomy-engine";
2
+ import { toDate } from "date-fns";
3
+ /**
4
+ * Converts Astronomy Engine AstroTime
5
+ * into a JavaScript Date.
6
+ */
7
+ function astroTimeToDate(time) {
8
+ return time.date;
16
9
  }
17
10
  export function getNextNewMoon(date = new Date()) {
18
- return searchMoonPhase("New Moon", date, 40);
11
+ const time = SearchMoonPhase(0, toDate(date), 40);
12
+ if (!time) {
13
+ throw new Error("Unable to find the next New Moon.");
14
+ }
15
+ const eventDate = astroTimeToDate(time);
16
+ return {
17
+ quarter: 0,
18
+ date: eventDate,
19
+ type: "NEW_MOON",
20
+ dateTime: eventDate.toISOString(),
21
+ dateString: eventDate.toISOString().slice(0, 10),
22
+ name: "New Moon",
23
+ icon: "🌑",
24
+ };
19
25
  }
26
+ /**
27
+ * Find the next Full Moon (Purnima).
28
+ */
20
29
  export function getNextFullMoon(date = new Date()) {
21
- return searchMoonPhase("Full Moon", date, 40);
30
+ const time = SearchMoonPhase(180, toDate(date), 40);
31
+ if (!time)
32
+ throw new Error("Unable to find the next Full Moon.");
33
+ const eventDate = astroTimeToDate(time);
34
+ return {
35
+ quarter: 2,
36
+ date: eventDate,
37
+ type: "FULL_MOON",
38
+ dateTime: eventDate.toISOString(),
39
+ dateString: eventDate.toISOString().slice(0, 10),
40
+ name: "Full Moon",
41
+ icon: "🌕",
42
+ };
22
43
  }
23
44
  //# sourceMappingURL=astronomy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"astronomy.js","sourceRoot":"","sources":["../../src/utils/astronomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,UAAU,eAAe,CAC7B,IAAmB,EACnB,IAAc,EACd,SAAiB;IAEjB,IAAI,SAAS,GAA0B,SAAS,CAAC;IACjD,IAAI,YAAY,GAAW,CAAC,CAAC;IAE7B,OAAO,YAAY,KAAK,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC9C,MAAM,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,gBAAgB,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACnC,SAAS,GAAG,gBAAgB,CAAC;YAC7B,MAAM;QACR,CAAC;QACD,YAAY,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAiB,IAAI,IAAI,EAAE;IACxD,OAAO,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAiB,IAAI,IAAI,EAAE;IACzD,OAAO,eAAe,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"astronomy.js","sourceRoot":"","sources":["../../src/utils/astronomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;GAGG;AACH,SAAS,eAAe,CAAC,IAAoB;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAiB,IAAI,IAAI,EAAE;IACxD,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAExC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;QACjC,UAAU,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAiB,IAAI,IAAI,EAAE;IACzD,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAExC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;QACjC,UAAU,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
- import { SantaliCalendarMonth, SantaliCalendarYear, SantaliMonth, TodaySantaliDate } from "../types/index.js";
2
- export declare function formatToDateString(date: Date | string): string;
1
+ import { DateTime, SantaliCalendarMonth, SantaliCalendarYear, SantaliMonth, TodaySantaliDate } from "../types/index.js";
2
+ export declare function formatToDateString(date: DateTime): string;
3
3
  export declare function buildNormalMonth(month: SantaliMonth, previousMonth?: SantaliMonth, nextMonth?: SantaliMonth): SantaliCalendarMonth;
4
4
  export declare function formatDateShort(iso: string): string;
5
5
  /**
@@ -29,20 +29,6 @@ export declare function getBaseMonthDays(): number;
29
29
  * Throws if the base months don't contain exactly 354 days.
30
30
  */
31
31
  export declare function validateMonths(): void;
32
- /**
33
- * Calculate the beginning of any Santali year from the known anchor.
34
- *
35
- * 2026 = YEAR_ANCHOR_DATE
36
- *
37
- * For future years:
38
- * add each previous year's actual length.
39
- *
40
- * For previous years:
41
- * subtract each previous year's actual length.
42
- *
43
- * This is important because a leap year is not necessarily 365/366 days.
44
- */
45
- export declare function buildYearStart(year: number, anchorYear?: number, anchorDate?: string): string;
46
32
  /**
47
33
  * Build all months for a particular Santali year.
48
34
  *
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/utils/calendar.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EAEZ,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAiB3B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAE9D;AAkBD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,aAAa,CAAC,EAAE,YAAY,EAC5B,SAAS,CAAC,EAAE,YAAY,GACvB,oBAAoB,CAwDtB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnD;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAOrC;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,SAAO,EACjB,UAAU,GAAE,MAAyB,GACpC,MAAM,CAkBR;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GACpB,YAAY,EAAE,CAmChB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAuC7D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,oBAAoB,CAetB;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,gBAAgB,CAkE7D;AAMD;;GAEG;AACH,wBAAgB,QAAQ,IAAI,gBAAgB,CAE3C"}
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/utils/calendar.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,QAAQ,EAER,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EAEZ,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAiB3B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEzD;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,aAAa,CAAC,EAAE,YAAY,EAC5B,SAAS,CAAC,EAAE,YAAY,GACvB,oBAAoB,CAuFtB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnD;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAOrC;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GACpB,YAAY,EAAE,CAmChB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAuC7D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,oBAAoB,CAetB;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,gBAAgB,CAkE7D;AAMD;;GAEG;AACH,wBAAgB,QAAQ,IAAI,gBAAgB,CAE3C"}
@@ -1,9 +1,12 @@
1
1
  import { addDays, differenceInDays, formatDate, getDay, isToday, toDate, } from "date-fns";
2
2
  import { months } from "../constants/months.js";
3
3
  import { santaliWeeks, weekDays } from "../constants/week-days.js";
4
- import { getNextFullMoon, getNextNewMoon } from "./astronomy.js";
5
- import { isLeapYear, METONIC_CYCLE_START, YEAR_ANCHOR_DATE, } from "./leap-year.js";
4
+ import { METONIC_CYCLE_START, YEAR_ANCHOR_DATE } from "../constants/rules.js";
5
+ import { isLeapYear } from "./leap-year.js";
6
+ import { getMonths } from "./month.js";
7
+ import { getMoonPhase } from "./moon-phase.js";
6
8
  import { toOlChikiNumeral } from "./numeral.js";
9
+ import { buildYearStart } from "./year.utils.js";
7
10
  function getWeekDay(date) {
8
11
  return weekDays[date.getDay()];
9
12
  }
@@ -11,18 +14,7 @@ function getSantaliWeekDay(date) {
11
14
  return santaliWeeks[date.getDay()]?.name;
12
15
  }
13
16
  export function formatToDateString(date) {
14
- return formatDate(date, "yyyy-MM-dd");
15
- }
16
- function createCalendarDay(day, date, isCurrentMonth) {
17
- return {
18
- day: toOlChikiNumeral(day),
19
- date: formatToDateString(date),
20
- isCurrentMonth,
21
- isToday: isToday(date),
22
- weekDay: getWeekDay(date),
23
- // moonPhase: getMoonPhase(date),
24
- santaliWeekDay: getSantaliWeekDay(date),
25
- };
17
+ return formatDate(toDate(date), "yyyy-MM-dd");
26
18
  }
27
19
  export function buildNormalMonth(month, previousMonth, nextMonth) {
28
20
  const cells = [];
@@ -36,7 +28,19 @@ export function buildNormalMonth(month, previousMonth, nextMonth) {
36
28
  const firstPreviousDay = previousMonth.days - startDow + 1;
37
29
  for (let day = firstPreviousDay; day <= previousMonth.days; day++) {
38
30
  const currentDate = addDays(previousStart, day - 1);
39
- cells.push(createCalendarDay(day, currentDate, false));
31
+ const dateString = formatToDateString(currentDate);
32
+ const isNewMoon = getMoonPhase(currentDate).name === "New Moon";
33
+ const isFullMoon = getMoonPhase(currentDate).name === "Full Moon";
34
+ cells.push({
35
+ date: dateString,
36
+ day: toOlChikiNumeral(day),
37
+ isCurrentMonth: false,
38
+ isFullMoon,
39
+ isNewMoon,
40
+ isToday: false,
41
+ weekDay: getWeekDay(currentDate),
42
+ santaliWeekDay: getSantaliWeekDay(currentDate),
43
+ });
40
44
  }
41
45
  }
42
46
  else {
@@ -48,7 +52,19 @@ export function buildNormalMonth(month, previousMonth, nextMonth) {
48
52
  * Current month.
49
53
  */
50
54
  for (let day = 1; day <= month.days; day++) {
51
- cells.push(createCalendarDay(day, addDays(toDate(month.startDate), day - 1), true));
55
+ const currentDate = addDays(toDate(month.startDate), day - 1);
56
+ const dateString = formatToDateString(currentDate);
57
+ const isFullMoon = getMoonPhase(currentDate).name === "Full Moon";
58
+ cells.push({
59
+ date: dateString,
60
+ isFullMoon,
61
+ isNewMoon: day === 1,
62
+ isCurrentMonth: true,
63
+ day: toOlChikiNumeral(day),
64
+ isToday: isToday(currentDate),
65
+ weekDay: getWeekDay(currentDate),
66
+ santaliWeekDay: getSantaliWeekDay(currentDate),
67
+ });
52
68
  }
53
69
  /*
54
70
  * Gregorian calendars normally complete
@@ -57,9 +73,20 @@ export function buildNormalMonth(month, previousMonth, nextMonth) {
57
73
  const remainder = cells.length % 7;
58
74
  if (remainder !== 0 && nextMonth) {
59
75
  const required = 7 - remainder;
60
- const nextStart = toDate(nextMonth.startDate);
61
76
  for (let day = 1; day <= required && day <= nextMonth.days; day++) {
62
- cells.push(createCalendarDay(day, addDays(nextStart, day - 1), false));
77
+ const currentDate = addDays(toDate(month.endDate), day + 1);
78
+ const dateString = formatToDateString(currentDate);
79
+ const isFullMoon = getMoonPhase(currentDate).name === "Full Moon";
80
+ cells.push({
81
+ date: dateString,
82
+ day: toOlChikiNumeral(day),
83
+ isToday: false,
84
+ isCurrentMonth: false,
85
+ isFullMoon,
86
+ isNewMoon: day === 1,
87
+ weekDay: getWeekDay(currentDate),
88
+ santaliWeekDay: getSantaliWeekDay(currentDate),
89
+ });
63
90
  }
64
91
  }
65
92
  while (cells.length % 7 !== 0) {
@@ -69,8 +96,6 @@ export function buildNormalMonth(month, previousMonth, nextMonth) {
69
96
  ...month,
70
97
  days: cells,
71
98
  totalDays: month.days,
72
- newMoonPhase: getNextNewMoon(month.startDate),
73
- fullMoonPhase: getNextFullMoon(month.startDate),
74
99
  };
75
100
  }
76
101
  export function formatDateShort(iso) {
@@ -120,39 +145,6 @@ export function validateMonths() {
120
145
  }
121
146
  }
122
147
  /* -------------------------------------------------------------------------- */
123
- /* Year start */
124
- /* -------------------------------------------------------------------------- */
125
- /**
126
- * Calculate the beginning of any Santali year from the known anchor.
127
- *
128
- * 2026 = YEAR_ANCHOR_DATE
129
- *
130
- * For future years:
131
- * add each previous year's actual length.
132
- *
133
- * For previous years:
134
- * subtract each previous year's actual length.
135
- *
136
- * This is important because a leap year is not necessarily 365/366 days.
137
- */
138
- export function buildYearStart(year, anchorYear = 2026, anchorDate = YEAR_ANCHOR_DATE) {
139
- let startDate = toDate(anchorDate);
140
- if (year === anchorYear) {
141
- return startDate.toISOString();
142
- }
143
- if (year > anchorYear) {
144
- for (let currentYear = anchorYear; currentYear < year; currentYear++) {
145
- startDate = addDays(startDate, getYearDays(currentYear));
146
- }
147
- }
148
- else {
149
- for (let currentYear = anchorYear - 1; currentYear >= year; currentYear--) {
150
- startDate = addDays(startDate, -getYearDays(currentYear));
151
- }
152
- }
153
- return startDate.toISOString();
154
- }
155
- /* -------------------------------------------------------------------------- */
156
148
  /* Build months */
157
149
  /* -------------------------------------------------------------------------- */
158
150
  /**
@@ -207,7 +199,7 @@ export function getCalendar(year) {
207
199
  throw new TypeError(`Santali year must be an integer: ${year}`);
208
200
  }
209
201
  const startDate = buildYearStart(year);
210
- const yearMonths = buildMonths(year, startDate);
202
+ const yearMonths = getMonths(year);
211
203
  const totalDays = yearMonths.reduce((total, month) => total + month.days, 0);
212
204
  const expectedDays = getYearDays(year);
213
205
  if (totalDays !== expectedDays) {
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/utils/calendar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/utils/calendar.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,2 @@
1
- export declare const METONIC_CYCLE_START = 2026;
2
- export declare const METONIC_LEAP_POS: Set<number>;
3
- export declare const YEAR_ANCHOR_DATE = "2026-01-19T00:00:00.000Z";
4
1
  export declare function isLeapYear(y: number): boolean;
5
2
  //# sourceMappingURL=leap-year.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"leap-year.d.ts","sourceRoot":"","sources":["../../src/utils/leap-year.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,gBAAgB,aAAoC,CAAC;AAClE,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AAE3D,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI7C"}
1
+ {"version":3,"file":"leap-year.d.ts","sourceRoot":"","sources":["../../src/utils/leap-year.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI7C"}
@@ -1,6 +1,4 @@
1
- export const METONIC_CYCLE_START = 2026;
2
- export const METONIC_LEAP_POS = new Set([1, 4, 7, 9, 12, 15, 18]);
3
- export const YEAR_ANCHOR_DATE = "2026-01-19T00:00:00.000Z";
1
+ import { METONIC_CYCLE_START, METONIC_LEAP_POS } from "../constants/rules.js";
4
2
  export function isLeapYear(y) {
5
3
  // Normalize year to a 1-19 position
6
4
  const pos = ((((y - METONIC_CYCLE_START) % 19) + 19) % 19) + 1;
@@ -1 +1 @@
1
- {"version":3,"file":"leap-year.js","sourceRoot":"","sources":["../../src/utils/leap-year.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAE3D,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,oCAAoC;IACpC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"leap-year.js","sourceRoot":"","sources":["../../src/utils/leap-year.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,oCAAoC;IACpC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { FlexibleDateTime } from "astronomy-engine";
2
+ import { SantaliMonth } from "../types/index.js";
3
+ export interface SantaliMonthStart {
4
+ newMoon: Date;
5
+ monthStartDate: Date;
6
+ istDate: {
7
+ year: number;
8
+ month: number;
9
+ day: number;
10
+ };
11
+ newMoonTimeIST: {
12
+ hour: number;
13
+ minute: number;
14
+ second: number;
15
+ };
16
+ cutoffTime: string;
17
+ startsSameDay: boolean;
18
+ }
19
+ export declare function calculateSantaliMonthStart(newMoonDate: Date): SantaliMonthStart;
20
+ export declare function getNextSantaliMonth(date: FlexibleDateTime): SantaliMonthStart;
21
+ export declare function getPreviousSantaliMonth(date?: FlexibleDateTime): SantaliMonthStart;
22
+ export declare function getMonths(year: number): SantaliMonth[];
23
+ //# sourceMappingURL=month.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"month.d.ts","sourceRoot":"","sources":["../../src/utils/month.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AAcrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA+CjD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC;IAEd,cAAc,EAAE,IAAI,CAAC;IAErB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IAEF,cAAc,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF,UAAU,EAAE,MAAM,CAAC;IAEnB,aAAa,EAAE,OAAO,CAAC;CACxB;AACD,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,IAAI,GAChB,iBAAiB,CAoCnB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,CAQ7E;AAED,wBAAgB,uBAAuB,CACrC,IAAI,GAAE,gBAA6B,GAClC,iBAAiB,CAQnB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,kBA2BrC"}
@@ -0,0 +1,101 @@
1
+ import { SearchMoonPhase } from "astronomy-engine";
2
+ import { addDays, differenceInDays, formatDate, subDays, toDate, } from "date-fns";
3
+ import { santaliMonths } from "../constants/months.js";
4
+ import { IST_TIME_ZONE, MONTH_START_CUTOFF_HOUR, MONTH_START_CUTOFF_MINUTE, } from "../constants/rules.js";
5
+ import { isLeapYear } from "./leap-year.js";
6
+ import { buildYearStart } from "./year.utils.js";
7
+ function getISTDateParts(date) {
8
+ const formatter = new Intl.DateTimeFormat("en-US", {
9
+ timeZone: IST_TIME_ZONE,
10
+ year: "numeric",
11
+ month: "numeric",
12
+ day: "numeric",
13
+ hour: "numeric",
14
+ minute: "numeric",
15
+ second: "numeric",
16
+ hourCycle: "h23",
17
+ });
18
+ const parts = formatter.formatToParts(date);
19
+ const getValue = (type) => {
20
+ const value = parts.find((part) => part.type === type)?.value;
21
+ if (!value) {
22
+ throw new Error(`Unable to determine IST ${type}.`);
23
+ }
24
+ return Number(value);
25
+ };
26
+ return {
27
+ year: getValue("year"),
28
+ month: getValue("month"),
29
+ day: getValue("day"),
30
+ hour: getValue("hour"),
31
+ minute: getValue("minute"),
32
+ second: getValue("second"),
33
+ };
34
+ }
35
+ export function calculateSantaliMonthStart(newMoonDate) {
36
+ const ist = getISTDateParts(newMoonDate);
37
+ const minutesOfDay = ist.hour * 60 + ist.minute;
38
+ const cutoffMinutes = MONTH_START_CUTOFF_HOUR * 60 + MONTH_START_CUTOFF_MINUTE;
39
+ const startsSameDay = minutesOfDay < cutoffMinutes;
40
+ const monthStartDate = new Date(Date.UTC(ist.year, ist.month - 1, ist.day, 12, 0, 0));
41
+ if (!startsSameDay) {
42
+ monthStartDate.setUTCDate(monthStartDate.getUTCDate() + 1);
43
+ }
44
+ return {
45
+ newMoon: newMoonDate,
46
+ monthStartDate,
47
+ istDate: {
48
+ year: ist.year,
49
+ month: ist.month,
50
+ day: ist.day,
51
+ },
52
+ newMoonTimeIST: {
53
+ hour: ist.hour,
54
+ minute: ist.minute,
55
+ second: ist.second,
56
+ },
57
+ cutoffTime: "17:00 IST",
58
+ startsSameDay,
59
+ };
60
+ }
61
+ export function getNextSantaliMonth(date) {
62
+ const newMoon = SearchMoonPhase(0, date, 40);
63
+ if (!newMoon) {
64
+ throw new Error("Unable to find the next New Moon.");
65
+ }
66
+ return calculateSantaliMonthStart(newMoon.date);
67
+ }
68
+ export function getPreviousSantaliMonth(date = new Date()) {
69
+ const newMoon = SearchMoonPhase(0, date, -40);
70
+ if (!newMoon) {
71
+ throw new Error("Unable to find the previous New Moon.");
72
+ }
73
+ return calculateSantaliMonthStart(newMoon.date);
74
+ }
75
+ export function getMonths(year) {
76
+ const months = [];
77
+ const totalYears = isLeapYear(year) ? 13 : 12;
78
+ const startYearDate = buildYearStart(year);
79
+ const minDaysInMonth = 28;
80
+ let startDate = toDate(startYearDate);
81
+ for (let m = 0; totalYears > m; m++) {
82
+ const endDate = addDays(startDate, minDaysInMonth);
83
+ const nextMonth = getNextSantaliMonth(endDate);
84
+ const days = differenceInDays(nextMonth.monthStartDate, startDate);
85
+ const finalEndDate = addDays(startDate, days);
86
+ const month = santaliMonths[m];
87
+ if (month) {
88
+ const monthEndDate = formatDate(subDays(finalEndDate, 1), "yyyy-MM-dd");
89
+ months.push({
90
+ days,
91
+ name: month.name,
92
+ english: month.english,
93
+ endDate: monthEndDate,
94
+ startDate: startDate.toISOString().slice(0, 10),
95
+ });
96
+ }
97
+ startDate = finalEndDate;
98
+ }
99
+ return months;
100
+ }
101
+ //# sourceMappingURL=month.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"month.js","sourceRoot":"","sources":["../../src/utils/month.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,5 @@
1
1
  import * as SunCalc from "suncalc";
2
2
  import { DateTime, MoonPhase, MoonPhaseIcon, MoonPhaseName } from "../types/index.js";
3
- /**
4
- * Get the moon phase index for a given phase
5
- * @param phase The moon phase
6
- * @returns The moon phase index
7
- */
8
- export declare function getMoonPhaseIndex(phase: number): number;
9
3
  /**
10
4
  * Get the moon phase name for a given illumination
11
5
  * @param illumination The moon illumination
@@ -29,7 +23,7 @@ export declare function getMoonPhaseDescription(illumination: SunCalc.MoonIllumi
29
23
  * @param date The date to get the moon phase for
30
24
  * @returns The moon phase
31
25
  */
32
- export declare function getMoonPhase(date: Date): MoonPhase;
26
+ export declare function getMoonPhase(date: DateTime): MoonPhase;
33
27
  /**
34
28
  * Get sunrise and sunset times for a given date and location
35
29
  * @param date The date to get sunrise and sunset times for
@@ -1 +1 @@
1
- {"version":3,"file":"moon-phase.d.ts","sourceRoot":"","sources":["../../src/utils/moon-phase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACd,MAAM,mBAAmB,CAAC;AAI3B;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,OAAO,CAAC,gBAAgB,GACrC,aAAa,CAUf;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,OAAO,CAAC,gBAAgB,GACrC,aAAa,CAUf;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,OAAO,CAAC,gBAAgB,GACrC,MAAM,CAUR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAgBlD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,CAElB;AAED;;;;;;GAMG;AAEH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAEnB;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,0BASpE"}
1
+ {"version":3,"file":"moon-phase.d.ts","sourceRoot":"","sources":["../../src/utils/moon-phase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACd,MAAM,mBAAmB,CAAC;AAI3B;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,OAAO,CAAC,gBAAgB,GACrC,aAAa,CAUf;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,OAAO,CAAC,gBAAgB,GACrC,aAAa,CAUf;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,OAAO,CAAC,gBAAgB,GACrC,MAAM,CAUR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAiBtD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,CAElB;AAED;;;;;;GAMG;AAEH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAEnB;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,0BASpE"}
@@ -1,15 +1,7 @@
1
- import { addDays, differenceInDays } from "date-fns";
1
+ import { addDays, differenceInDays, toDate } from "date-fns";
2
2
  import * as SunCalc from "suncalc";
3
3
  import { formatToDateString } from "./calendar.js";
4
4
  import { getISTCutoff } from "./moon-date.js";
5
- /**
6
- * Get the moon phase index for a given phase
7
- * @param phase The moon phase
8
- * @returns The moon phase index
9
- */
10
- export function getMoonPhaseIndex(phase) {
11
- return Math.round(phase * 8) % 8;
12
- }
13
5
  /**
14
6
  * Get the moon phase name for a given illumination
15
7
  * @param illumination The moon illumination
@@ -85,7 +77,8 @@ export function getMoonPhaseDescription(illumination) {
85
77
  * @returns The moon phase
86
78
  */
87
79
  export function getMoonPhase(date) {
88
- const cutoffDate = getISTCutoff(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
80
+ const currentDate = toDate(date);
81
+ const cutoffDate = getISTCutoff(currentDate.getUTCFullYear(), currentDate.getUTCMonth(), currentDate.getUTCDate());
89
82
  const illumination = SunCalc.getMoonIllumination(cutoffDate);
90
83
  return {
91
84
  date: formatToDateString(cutoffDate),
@@ -1 +1 @@
1
- {"version":3,"file":"moon-phase.js","sourceRoot":"","sources":["../../src/utils/moon-phase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"moon-phase.js","sourceRoot":"","sources":["../../src/utils/moon-phase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Calculate the beginning of any Santali year from the known anchor.
3
+ *
4
+ * 2026 = YEAR_ANCHOR_DATE
5
+ *
6
+ * For future years:
7
+ * add each previous year's actual length.
8
+ *
9
+ * For previous years:
10
+ * subtract each previous year's actual length.
11
+ *
12
+ * This is important because a leap year is not necessarily 365/366 days.
13
+ */
14
+ export declare function buildYearStart(year: number, anchorYear?: number): Date;
15
+ //# sourceMappingURL=year.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"year.utils.d.ts","sourceRoot":"","sources":["../../src/utils/year.utils.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAO,GAAG,IAAI,CAgBpE"}
@@ -0,0 +1,36 @@
1
+ /* -------------------------------------------------------------------------- */
2
+ /* Year start */
3
+ /* -------------------------------------------------------------------------- */
4
+ import { addDays, toDate } from "date-fns";
5
+ import { YEAR_ANCHOR_DATE } from "../constants/rules.js";
6
+ import { getYearDays } from "./calendar.js";
7
+ /**
8
+ * Calculate the beginning of any Santali year from the known anchor.
9
+ *
10
+ * 2026 = YEAR_ANCHOR_DATE
11
+ *
12
+ * For future years:
13
+ * add each previous year's actual length.
14
+ *
15
+ * For previous years:
16
+ * subtract each previous year's actual length.
17
+ *
18
+ * This is important because a leap year is not necessarily 365/366 days.
19
+ */
20
+ export function buildYearStart(year, anchorYear = 2026) {
21
+ let startDate = toDate(YEAR_ANCHOR_DATE);
22
+ if (year === anchorYear)
23
+ return startDate;
24
+ if (year > anchorYear) {
25
+ for (let currentYear = anchorYear; currentYear < year; currentYear++) {
26
+ startDate = addDays(startDate, getYearDays(currentYear));
27
+ }
28
+ }
29
+ else {
30
+ for (let currentYear = anchorYear - 1; currentYear >= year; currentYear--) {
31
+ startDate = addDays(startDate, -getYearDays(currentYear));
32
+ }
33
+ }
34
+ return startDate;
35
+ }
36
+ //# sourceMappingURL=year.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"year.utils.js","sourceRoot":"","sources":["../../src/utils/year.utils.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAEhF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,UAAU,GAAG,IAAI;IAC5D,IAAI,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEzC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAE1C,IAAI,IAAI,GAAG,UAAU,EAAE,CAAC;QACtB,KAAK,IAAI,WAAW,GAAG,UAAU,EAAE,WAAW,GAAG,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;YACrE,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,WAAW,GAAG,UAAU,GAAG,CAAC,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;YAC1E,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wesantal/santali-calendar",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "A framework-independent Santali Calendar data and utility package for JavaScript and TypeScript applications.",
5
5
  "private": false,
6
6
  "type": "module",
@@ -53,6 +53,7 @@
53
53
  "vitest": "^3.2.4"
54
54
  },
55
55
  "dependencies": {
56
+ "astronomy-engine": "^2.1.19",
56
57
  "date-fns": "^4.4.0",
57
58
  "suncalc": "^2.0.2"
58
59
  }