react-native-lich-am 1.0.0

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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +248 -0
  3. package/core/index.d.ts +1 -0
  4. package/core/index.js +1 -0
  5. package/core/package.json +5 -0
  6. package/dataset/2024.d.ts +1 -0
  7. package/dataset/2024.js +1 -0
  8. package/dataset/2025.d.ts +1 -0
  9. package/dataset/2025.js +1 -0
  10. package/dataset/2026.d.ts +1 -0
  11. package/dataset/2026.js +1 -0
  12. package/dataset/2027.d.ts +1 -0
  13. package/dataset/2027.js +1 -0
  14. package/dataset/2028.d.ts +1 -0
  15. package/dataset/2028.js +1 -0
  16. package/dataset/index.d.ts +1 -0
  17. package/dataset/index.js +1 -0
  18. package/dataset/package.json +5 -0
  19. package/lib/core/astro.d.ts +43 -0
  20. package/lib/core/astro.js +203 -0
  21. package/lib/core/canchi.d.ts +47 -0
  22. package/lib/core/canchi.js +78 -0
  23. package/lib/core/constants.d.ts +54 -0
  24. package/lib/core/constants.js +141 -0
  25. package/lib/core/day.d.ts +30 -0
  26. package/lib/core/day.js +103 -0
  27. package/lib/core/format.d.ts +26 -0
  28. package/lib/core/format.js +60 -0
  29. package/lib/core/huong.d.ts +26 -0
  30. package/lib/core/huong.js +44 -0
  31. package/lib/core/index.d.ts +16 -0
  32. package/lib/core/index.js +32 -0
  33. package/lib/core/lunar.d.ts +39 -0
  34. package/lib/core/lunar.js +130 -0
  35. package/lib/core/tietkhi.d.ts +40 -0
  36. package/lib/core/tietkhi.js +115 -0
  37. package/lib/core/truc.d.ts +47 -0
  38. package/lib/core/truc.js +70 -0
  39. package/lib/core/types.d.ts +66 -0
  40. package/lib/core/types.js +3 -0
  41. package/lib/dataset/2024.d.ts +30 -0
  42. package/lib/dataset/2024.js +69 -0
  43. package/lib/dataset/2025.d.ts +30 -0
  44. package/lib/dataset/2025.js +69 -0
  45. package/lib/dataset/2026.d.ts +30 -0
  46. package/lib/dataset/2026.js +69 -0
  47. package/lib/dataset/2027.d.ts +30 -0
  48. package/lib/dataset/2027.js +69 -0
  49. package/lib/dataset/2028.d.ts +30 -0
  50. package/lib/dataset/2028.js +69 -0
  51. package/lib/dataset/data/days-2024.json +1 -0
  52. package/lib/dataset/data/days-2025.json +1 -0
  53. package/lib/dataset/data/days-2026.json +1 -0
  54. package/lib/dataset/data/days-2027.json +1 -0
  55. package/lib/dataset/data/days-2028.json +1 -0
  56. package/lib/dataset/data/dict.json +1 -0
  57. package/lib/dataset/data/gio-table.json +1 -0
  58. package/lib/dataset/decode.d.ts +225 -0
  59. package/lib/dataset/decode.js +285 -0
  60. package/lib/dataset/index.d.ts +37 -0
  61. package/lib/dataset/index.js +87 -0
  62. package/lib/index.d.ts +21 -0
  63. package/lib/index.js +37 -0
  64. package/lib/ui/LunarCalendar.d.ts +58 -0
  65. package/lib/ui/LunarCalendar.js +311 -0
  66. package/lib/ui/LunarDayDetail.d.ts +32 -0
  67. package/lib/ui/LunarDayDetail.js +221 -0
  68. package/lib/ui/index.d.ts +9 -0
  69. package/lib/ui/index.js +18 -0
  70. package/lib/ui/theme.d.ts +46 -0
  71. package/lib/ui/theme.js +60 -0
  72. package/package.json +431 -0
  73. package/ui/index.d.ts +1 -0
  74. package/ui/index.js +1 -0
  75. package/ui/package.json +5 -0
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * Can Chi: năm, tháng, ngày, giờ — kèm Nạp Âm (ngũ hành) và con giáp.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getConGiap = exports.getNguHanhId = exports.getNapAm = exports.getCanChiHour = exports.getCanChiMonth = exports.getCanChiDay = exports.getCanChiYear = exports.canChiIndex = void 0;
7
+ const constants_1 = require("./constants");
8
+ function build(canIndex, chiIndex) {
9
+ const c = ((canIndex % 10) + 10) % 10;
10
+ const z = ((chiIndex % 12) + 12) % 12;
11
+ return { canIndex: c, chiIndex: z, can: constants_1.CAN[c], chi: constants_1.CHI[z], name: `${constants_1.CAN[c]} ${constants_1.CHI[z]}` };
12
+ }
13
+ /** Chỉ số 0–59 trong vòng 60 hoa giáp, từ cặp (can, chi) */
14
+ function canChiIndex(canIndex, chiIndex) {
15
+ const c = ((canIndex % 10) + 10) % 10;
16
+ const z = ((chiIndex % 12) + 12) % 12;
17
+ for (let i = 0; i < 60; i += 1) {
18
+ if (i % 10 === c && i % 12 === z) {
19
+ return i;
20
+ }
21
+ }
22
+ return 0;
23
+ }
24
+ exports.canChiIndex = canChiIndex;
25
+ /** Can Chi của năm âm lịch */
26
+ function getCanChiYear(lunarYear) {
27
+ return build(lunarYear - 4, lunarYear - 4);
28
+ }
29
+ exports.getCanChiYear = getCanChiYear;
30
+ /** Can Chi của ngày, suy từ số ngày Julian */
31
+ function getCanChiDay(jd) {
32
+ const idx = (((jd + 49) % 60) + 60) % 60;
33
+ return build(idx % 10, idx % 12);
34
+ }
35
+ exports.getCanChiDay = getCanChiDay;
36
+ /**
37
+ * Can Chi của tháng âm lịch (theo Ngũ Hổ Độn).
38
+ *
39
+ * Tháng 1 (Dần) của năm Giáp/Kỷ là Bính Dần, Ất/Canh là Mậu Dần,
40
+ * Bính/Tân là Canh Dần, Đinh/Nhâm là Nhâm Dần, Mậu/Quý là Giáp Dần.
41
+ */
42
+ function getCanChiMonth(lunarMonth, lunarYear) {
43
+ const yearCan = (((lunarYear - 4) % 10) + 10) % 10;
44
+ const canThang1 = (yearCan % 5) * 2 + 2; // can của tháng Dần
45
+ const offset = lunarMonth - 1;
46
+ return build(canThang1 + offset, 2 + offset);
47
+ }
48
+ exports.getCanChiMonth = getCanChiMonth;
49
+ /**
50
+ * Can Chi của giờ (theo Ngũ Thử Độn).
51
+ *
52
+ * @param dayCanIndex chỉ số can của ngày (0 = Giáp)
53
+ * @param hourChiIndex chỉ số chi của giờ (0 = Tý)
54
+ */
55
+ function getCanChiHour(dayCanIndex, hourChiIndex) {
56
+ const can = (((dayCanIndex % 5) * 2 + hourChiIndex) % 10 + 10) % 10;
57
+ return build(can, hourChiIndex);
58
+ }
59
+ exports.getCanChiHour = getCanChiHour;
60
+ /** Nạp âm của một cặp can chi */
61
+ function getNapAm(canIndex, chiIndex) {
62
+ const idx = canChiIndex(canIndex, chiIndex);
63
+ const [name, element] = constants_1.NAP_AM[idx];
64
+ return { name, element };
65
+ }
66
+ exports.getNapAm = getNapAm;
67
+ /** Ngũ hành của nạp âm ngày (dạng số 1..5 đúng quy ước Lịch Việt) */
68
+ function getNguHanhId(element) {
69
+ const i = constants_1.NGU_HANH.indexOf(element);
70
+ return i > 0 ? i : 0;
71
+ }
72
+ exports.getNguHanhId = getNguHanhId;
73
+ /** Con giáp của năm âm lịch */
74
+ function getConGiap(lunarYear) {
75
+ const chi = (((lunarYear - 4) % 12) + 12) % 12;
76
+ return constants_1.CON_GIAP[chi];
77
+ }
78
+ exports.getConGiap = getConGiap;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Hằng số dùng chung cho toàn bộ thư viện.
3
+ * Toàn bộ tên gọi theo tiếng Việt, đúng cách gọi trong lịch vạn niên.
4
+ */
5
+ /** 10 Thiên Can */
6
+ export declare const CAN: readonly ["Giáp", "Ất", "Bính", "Đinh", "Mậu", "Kỷ", "Canh", "Tân", "Nhâm", "Quý"];
7
+ /** 12 Địa Chi */
8
+ export declare const CHI: readonly ["Tý", "Sửu", "Dần", "Mão", "Thìn", "Tỵ", "Ngọ", "Mùi", "Thân", "Dậu", "Tuất", "Hợi"];
9
+ /** 12 con giáp (theo chi của năm) */
10
+ export declare const CON_GIAP: readonly ["Chuột", "Trâu", "Hổ", "Mèo", "Rồng", "Rắn", "Ngựa", "Dê", "Khỉ", "Gà", "Chó", "Lợn"];
11
+ /** Ngũ hành theo đúng thứ tự id mà Lịch Việt dùng: 1=Kim 2=Mộc 3=Thủy 4=Hỏa 5=Thổ */
12
+ export declare const NGU_HANH: readonly ["", "Kim", "Mộc", "Thủy", "Hỏa", "Thổ"];
13
+ /** 12 Trực (Thập nhị kiến trừ), bắt đầu từ Kiến */
14
+ export declare const TRUC: readonly ["Kiến", "Trừ", "Mãn", "Bình", "Định", "Chấp", "Phá", "Nguy", "Thành", "Thu", "Khai", "Bế"];
15
+ /**
16
+ * 12 thần (Lục hoàng đạo / Lục hắc đạo) theo đúng thứ tự vòng.
17
+ * Chỉ số 0,1,4,5,7,10 là 6 thần TỐT (hoàng đạo).
18
+ */
19
+ export declare const THAN_12: readonly ["Thanh long", "Minh đường", "Thiên hình", "Chu tước", "Kim quỹ", "Bảo quang", "Bạch hổ", "Ngọc đường", "Thiên lao", "Huyền vũ", "Tư mệnh", "Câu trần"];
20
+ /** Vị trí (index) của 6 thần hoàng đạo trong vòng 12 thần */
21
+ export declare const THAN_12_TOT: readonly [0, 1, 4, 5, 7, 10];
22
+ /** 12 giờ theo địa chi: giờ Tý = 23h–01h */
23
+ export declare const GIO_CHI: readonly ["Tý", "Sửu", "Dần", "Mão", "Thìn", "Tỵ", "Ngọ", "Mùi", "Thân", "Dậu", "Tuất", "Hợi"];
24
+ /** Khung giờ thực tế của từng địa chi (giờ Tý bắt đầu 23:00 hôm trước) */
25
+ export declare const GIO_RANGE: ReadonlyArray<readonly [number, number]>;
26
+ /**
27
+ * 24 Tiết khí, đánh số id theo đúng quy ước của Lịch Việt:
28
+ * id 1 = Xuân phân … id 19 = Đông chí … id 24 = Kinh trập.
29
+ * `lon` là kinh độ mặt trời (độ) tại thời điểm bắt đầu tiết.
30
+ */
31
+ export declare const TIET_KHI: ReadonlyArray<{
32
+ id: number;
33
+ name: string;
34
+ lon: number;
35
+ }>;
36
+ /** Tên tháng âm lịch */
37
+ export declare const TEN_THANG_AM: readonly ["", "Giêng", "Hai", "Ba", "Tư", "Năm", "Sáu", "Bảy", "Tám", "Chín", "Mười", "Một", "Chạp"];
38
+ /** Tên tháng âm lịch viết đầy đủ (dạng "tháng Giêng", "tháng Chạp") */
39
+ export declare const TEN_THANG_AM_FULL: readonly ["", "tháng Giêng", "tháng Hai", "tháng Ba", "tháng Tư", "tháng Năm", "tháng Sáu", "tháng Bảy", "tháng Tám", "tháng Chín", "tháng Mười", "tháng Một", "tháng Chạp"];
40
+ /** Thứ trong tuần, bắt đầu từ Chủ nhật để khớp `Date.getDay()` */
41
+ export declare const THU: readonly ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"];
42
+ /** Thứ viết tắt */
43
+ export declare const THU_NGAN: readonly ["CN", "T2", "T3", "T4", "T5", "T6", "T7"];
44
+ /**
45
+ * Bảng Nạp Âm 60 hoa giáp: index 0..59 ứng với Giáp Tý … Quý Hợi.
46
+ * Mỗi phần tử là [tên nạp âm, ngũ hành].
47
+ */
48
+ export declare const NAP_AM: ReadonlyArray<readonly [string, string]>;
49
+ /** 8 hướng chính dùng cho xuất hành */
50
+ export declare const HUONG_8: readonly ["Chính Bắc", "Đông Bắc", "Chính Đông", "Đông Nam", "Chính Nam", "Tây Nam", "Chính Tây", "Tây Bắc"];
51
+ /** Múi giờ mặc định của lịch Việt Nam */
52
+ export declare const TZ_VN = 7;
53
+ /** JD của ngày 1970-01-01 (dùng để quy đổi JD <-> timestamp) */
54
+ export declare const JD_UNIX_EPOCH = 2440587.5;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ /**
3
+ * Hằng số dùng chung cho toàn bộ thư viện.
4
+ * Toàn bộ tên gọi theo tiếng Việt, đúng cách gọi trong lịch vạn niên.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.JD_UNIX_EPOCH = exports.TZ_VN = exports.HUONG_8 = exports.NAP_AM = exports.THU_NGAN = exports.THU = exports.TEN_THANG_AM_FULL = exports.TEN_THANG_AM = exports.TIET_KHI = exports.GIO_RANGE = exports.GIO_CHI = exports.THAN_12_TOT = exports.THAN_12 = exports.TRUC = exports.NGU_HANH = exports.CON_GIAP = exports.CHI = exports.CAN = void 0;
8
+ /** 10 Thiên Can */
9
+ exports.CAN = [
10
+ 'Giáp', 'Ất', 'Bính', 'Đinh', 'Mậu',
11
+ 'Kỷ', 'Canh', 'Tân', 'Nhâm', 'Quý',
12
+ ];
13
+ /** 12 Địa Chi */
14
+ exports.CHI = [
15
+ 'Tý', 'Sửu', 'Dần', 'Mão', 'Thìn', 'Tỵ',
16
+ 'Ngọ', 'Mùi', 'Thân', 'Dậu', 'Tuất', 'Hợi',
17
+ ];
18
+ /** 12 con giáp (theo chi của năm) */
19
+ exports.CON_GIAP = [
20
+ 'Chuột', 'Trâu', 'Hổ', 'Mèo', 'Rồng', 'Rắn',
21
+ 'Ngựa', 'Dê', 'Khỉ', 'Gà', 'Chó', 'Lợn',
22
+ ];
23
+ /** Ngũ hành theo đúng thứ tự id mà Lịch Việt dùng: 1=Kim 2=Mộc 3=Thủy 4=Hỏa 5=Thổ */
24
+ exports.NGU_HANH = ['', 'Kim', 'Mộc', 'Thủy', 'Hỏa', 'Thổ'];
25
+ /** 12 Trực (Thập nhị kiến trừ), bắt đầu từ Kiến */
26
+ exports.TRUC = [
27
+ 'Kiến', 'Trừ', 'Mãn', 'Bình', 'Định', 'Chấp',
28
+ 'Phá', 'Nguy', 'Thành', 'Thu', 'Khai', 'Bế',
29
+ ];
30
+ /**
31
+ * 12 thần (Lục hoàng đạo / Lục hắc đạo) theo đúng thứ tự vòng.
32
+ * Chỉ số 0,1,4,5,7,10 là 6 thần TỐT (hoàng đạo).
33
+ */
34
+ exports.THAN_12 = [
35
+ 'Thanh long', 'Minh đường', 'Thiên hình', 'Chu tước',
36
+ 'Kim quỹ', 'Bảo quang', 'Bạch hổ', 'Ngọc đường',
37
+ 'Thiên lao', 'Huyền vũ', 'Tư mệnh', 'Câu trần',
38
+ ];
39
+ /** Vị trí (index) của 6 thần hoàng đạo trong vòng 12 thần */
40
+ exports.THAN_12_TOT = [0, 1, 4, 5, 7, 10];
41
+ /** 12 giờ theo địa chi: giờ Tý = 23h–01h */
42
+ exports.GIO_CHI = exports.CHI;
43
+ /** Khung giờ thực tế của từng địa chi (giờ Tý bắt đầu 23:00 hôm trước) */
44
+ exports.GIO_RANGE = [
45
+ [23, 1], [1, 3], [3, 5], [5, 7], [7, 9], [9, 11],
46
+ [11, 13], [13, 15], [15, 17], [17, 19], [19, 21], [21, 23],
47
+ ];
48
+ /**
49
+ * 24 Tiết khí, đánh số id theo đúng quy ước của Lịch Việt:
50
+ * id 1 = Xuân phân … id 19 = Đông chí … id 24 = Kinh trập.
51
+ * `lon` là kinh độ mặt trời (độ) tại thời điểm bắt đầu tiết.
52
+ */
53
+ exports.TIET_KHI = [
54
+ { id: 1, name: 'Xuân phân', lon: 0 },
55
+ { id: 2, name: 'Thanh minh', lon: 15 },
56
+ { id: 3, name: 'Cốc vũ', lon: 30 },
57
+ { id: 4, name: 'Lập hạ', lon: 45 },
58
+ { id: 5, name: 'Tiểu mãn', lon: 60 },
59
+ { id: 6, name: 'Mang chủng', lon: 75 },
60
+ { id: 7, name: 'Hạ chí', lon: 90 },
61
+ { id: 8, name: 'Tiểu thử', lon: 105 },
62
+ { id: 9, name: 'Đại thử', lon: 120 },
63
+ { id: 10, name: 'Lập thu', lon: 135 },
64
+ { id: 11, name: 'Xử thử', lon: 150 },
65
+ { id: 12, name: 'Bạch lộ', lon: 165 },
66
+ { id: 13, name: 'Thu phân', lon: 180 },
67
+ { id: 14, name: 'Hàn lộ', lon: 195 },
68
+ { id: 15, name: 'Sương giáng', lon: 210 },
69
+ { id: 16, name: 'Lập đông', lon: 225 },
70
+ { id: 17, name: 'Tiểu tuyết', lon: 240 },
71
+ { id: 18, name: 'Đại tuyết', lon: 255 },
72
+ { id: 19, name: 'Đông chí', lon: 270 },
73
+ { id: 20, name: 'Tiểu hàn', lon: 285 },
74
+ { id: 21, name: 'Đại hàn', lon: 300 },
75
+ { id: 22, name: 'Lập xuân', lon: 315 },
76
+ { id: 23, name: 'Vũ thủy', lon: 330 },
77
+ { id: 24, name: 'Kinh trập', lon: 345 },
78
+ ];
79
+ /** Tên tháng âm lịch */
80
+ exports.TEN_THANG_AM = [
81
+ '', 'Giêng', 'Hai', 'Ba', 'Tư', 'Năm', 'Sáu',
82
+ 'Bảy', 'Tám', 'Chín', 'Mười', 'Một', 'Chạp',
83
+ ];
84
+ /** Tên tháng âm lịch viết đầy đủ (dạng "tháng Giêng", "tháng Chạp") */
85
+ exports.TEN_THANG_AM_FULL = [
86
+ '', 'tháng Giêng', 'tháng Hai', 'tháng Ba', 'tháng Tư', 'tháng Năm',
87
+ 'tháng Sáu', 'tháng Bảy', 'tháng Tám', 'tháng Chín', 'tháng Mười',
88
+ 'tháng Một', 'tháng Chạp',
89
+ ];
90
+ /** Thứ trong tuần, bắt đầu từ Chủ nhật để khớp `Date.getDay()` */
91
+ exports.THU = [
92
+ 'Chủ nhật', 'Thứ hai', 'Thứ ba', 'Thứ tư',
93
+ 'Thứ năm', 'Thứ sáu', 'Thứ bảy',
94
+ ];
95
+ /** Thứ viết tắt */
96
+ exports.THU_NGAN = ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'];
97
+ /**
98
+ * Bảng Nạp Âm 60 hoa giáp: index 0..59 ứng với Giáp Tý … Quý Hợi.
99
+ * Mỗi phần tử là [tên nạp âm, ngũ hành].
100
+ */
101
+ exports.NAP_AM = [
102
+ ['Hải Trung Kim', 'Kim'], ['Hải Trung Kim', 'Kim'],
103
+ ['Lư Trung Hỏa', 'Hỏa'], ['Lư Trung Hỏa', 'Hỏa'],
104
+ ['Lôi Đình Mộc', 'Mộc'], ['Lôi Đình Mộc', 'Mộc'],
105
+ ['Lộ Bàng Thổ', 'Thổ'], ['Lộ Bàng Thổ', 'Thổ'],
106
+ ['Kiếm Phong Kim', 'Kim'], ['Kiếm Phong Kim', 'Kim'],
107
+ ['Sơn Đầu Hỏa', 'Hỏa'], ['Sơn Đầu Hỏa', 'Hỏa'],
108
+ ['Giản Hạ Thủy', 'Thủy'], ['Giản Hạ Thủy', 'Thủy'],
109
+ ['Thành Đầu Thổ', 'Thổ'], ['Thành Đầu Thổ', 'Thổ'],
110
+ ['Bạch Lạp Kim', 'Kim'], ['Bạch Lạp Kim', 'Kim'],
111
+ ['Dương Liễu Mộc', 'Mộc'], ['Dương Liễu Mộc', 'Mộc'],
112
+ ['Tuyền Trung Thủy', 'Thủy'], ['Tuyền Trung Thủy', 'Thủy'],
113
+ ['Ốc Thượng Thổ', 'Thổ'], ['Ốc Thượng Thổ', 'Thổ'],
114
+ ['Tích Lịch Hỏa', 'Hỏa'], ['Tích Lịch Hỏa', 'Hỏa'],
115
+ ['Tùng Bách Mộc', 'Mộc'], ['Tùng Bách Mộc', 'Mộc'],
116
+ ['Trường Lưu Thủy', 'Thủy'], ['Trường Lưu Thủy', 'Thủy'],
117
+ ['Sa Trung Kim', 'Kim'], ['Sa Trung Kim', 'Kim'],
118
+ ['Sơn Hạ Hỏa', 'Hỏa'], ['Sơn Hạ Hỏa', 'Hỏa'],
119
+ ['Bình Địa Mộc', 'Mộc'], ['Bình Địa Mộc', 'Mộc'],
120
+ ['Bích Thượng Thổ', 'Thổ'], ['Bích Thượng Thổ', 'Thổ'],
121
+ ['Kim Bạch Kim', 'Kim'], ['Kim Bạch Kim', 'Kim'],
122
+ ['Phú Đăng Hỏa', 'Hỏa'], ['Phú Đăng Hỏa', 'Hỏa'],
123
+ ['Thiên Hà Thủy', 'Thủy'], ['Thiên Hà Thủy', 'Thủy'],
124
+ ['Đại Trạch Thổ', 'Thổ'], ['Đại Trạch Thổ', 'Thổ'],
125
+ ['Thoa Xuyến Kim', 'Kim'], ['Thoa Xuyến Kim', 'Kim'],
126
+ ['Tang Đố Mộc', 'Mộc'], ['Tang Đố Mộc', 'Mộc'],
127
+ ['Đại Khê Thủy', 'Thủy'], ['Đại Khê Thủy', 'Thủy'],
128
+ ['Sa Trung Thổ', 'Thổ'], ['Sa Trung Thổ', 'Thổ'],
129
+ ['Thiên Thượng Hỏa', 'Hỏa'], ['Thiên Thượng Hỏa', 'Hỏa'],
130
+ ['Thạch Lựu Mộc', 'Mộc'], ['Thạch Lựu Mộc', 'Mộc'],
131
+ ['Đại Hải Thủy', 'Thủy'], ['Đại Hải Thủy', 'Thủy'],
132
+ ];
133
+ /** 8 hướng chính dùng cho xuất hành */
134
+ exports.HUONG_8 = [
135
+ 'Chính Bắc', 'Đông Bắc', 'Chính Đông', 'Đông Nam',
136
+ 'Chính Nam', 'Tây Nam', 'Chính Tây', 'Tây Bắc',
137
+ ];
138
+ /** Múi giờ mặc định của lịch Việt Nam */
139
+ exports.TZ_VN = 7;
140
+ /** JD của ngày 1970-01-01 (dùng để quy đổi JD <-> timestamp) */
141
+ exports.JD_UNIX_EPOCH = 2440587.5;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * API tổng hợp: lấy toàn bộ thông tin lịch âm của một ngày.
3
+ */
4
+ import { type LunarDate } from './lunar';
5
+ import type { DateInput, LunarDateInfo, LunarDayInfo } from './types';
6
+ /** Chuẩn hoá đầu vào thành JD + [ngày, tháng, năm] dương lịch */
7
+ export declare function resolveDate(input: DateInput, timeZone?: number): {
8
+ jd: number;
9
+ day: number;
10
+ month: number;
11
+ year: number;
12
+ weekday: number;
13
+ };
14
+ /** Bọc thêm tên tháng, chuỗi ngày âm cho một `LunarDate` */
15
+ export declare function decorateLunar(l: LunarDate): LunarDateInfo;
16
+ /**
17
+ * Lấy toàn bộ thông tin lịch âm của một ngày.
18
+ *
19
+ * @example
20
+ * getLunarDayInfo('2024-02-10') // mùng 1 Tết Giáp Thìn
21
+ * getLunarDayInfo(new Date()) // hôm nay
22
+ * getLunarDayInfo(10, 2, 2024) // 10/02/2024
23
+ */
24
+ export declare function getLunarDayInfo(input: DateInput, timeZone?: number): LunarDayInfo;
25
+ /** Tiện dụng: chỉ lấy ngày âm */
26
+ export declare function getLunarDate(input: DateInput, timeZone?: number): LunarDateInfo;
27
+ /**
28
+ * Tiện dụng: hôm nay là ngày âm bao nhiêu.
29
+ */
30
+ export declare function getTodayLunar(timeZone?: number): LunarDateInfo;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ /**
3
+ * API tổng hợp: lấy toàn bộ thông tin lịch âm của một ngày.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getTodayLunar = exports.getLunarDate = exports.getLunarDayInfo = exports.decorateLunar = exports.resolveDate = void 0;
7
+ const constants_1 = require("./constants");
8
+ const astro_1 = require("./astro");
9
+ const lunar_1 = require("./lunar");
10
+ const canchi_1 = require("./canchi");
11
+ const tietkhi_1 = require("./tietkhi");
12
+ const truc_1 = require("./truc");
13
+ const huong_1 = require("./huong");
14
+ /** Chuẩn hoá đầu vào thành JD + [ngày, tháng, năm] dương lịch */
15
+ function resolveDate(input, timeZone = constants_1.TZ_VN) {
16
+ let jd;
17
+ let weekday;
18
+ if (input instanceof Date) {
19
+ jd = (0, astro_1.jdFromDateObject)(input, timeZone);
20
+ const shifted = new Date(input.getTime() + timeZone * 3600 * 1000);
21
+ weekday = shifted.getUTCDay();
22
+ }
23
+ else if (typeof input === 'number') {
24
+ jd = input;
25
+ weekday = (((jd + 1) % 7) + 7) % 7;
26
+ }
27
+ else if (typeof input === 'string') {
28
+ const m = /^(\d{4})-(\d{1,2})-(\d{1,2})/.exec(input.trim());
29
+ if (!m) {
30
+ throw new Error(`react-native-lich-am: không hiểu chuỗi ngày "${input}" (cần dạng YYYY-MM-DD)`);
31
+ }
32
+ jd = (0, astro_1.jdFromDate)(Number(m[3]), Number(m[2]), Number(m[1]));
33
+ weekday = (((jd + 1) % 7) + 7) % 7;
34
+ }
35
+ else {
36
+ jd = (0, astro_1.jdFromDate)(input.day, input.month, input.year);
37
+ weekday = (((jd + 1) % 7) + 7) % 7;
38
+ }
39
+ const [day, month, year] = (0, astro_1.jdToDate)(jd);
40
+ return { jd, day, month, year, weekday };
41
+ }
42
+ exports.resolveDate = resolveDate;
43
+ /** Bọc thêm tên tháng, chuỗi ngày âm cho một `LunarDate` */
44
+ function decorateLunar(l) {
45
+ const base = constants_1.TEN_THANG_AM_FULL[l.month];
46
+ return Object.assign(Object.assign({}, l), { monthName: base, monthNameFull: l.leap ? `${base} nhuận` : base, text: `${l.day}/${l.month}/${l.year}` });
47
+ }
48
+ exports.decorateLunar = decorateLunar;
49
+ /**
50
+ * Lấy toàn bộ thông tin lịch âm của một ngày.
51
+ *
52
+ * @example
53
+ * getLunarDayInfo('2024-02-10') // mùng 1 Tết Giáp Thìn
54
+ * getLunarDayInfo(new Date()) // hôm nay
55
+ * getLunarDayInfo(10, 2, 2024) // 10/02/2024
56
+ */
57
+ function getLunarDayInfo(input, timeZone = constants_1.TZ_VN) {
58
+ const { jd, day, month, year, weekday } = resolveDate(input, timeZone);
59
+ const lunar = (0, lunar_1.solarToLunar)(day, month, year, timeZone);
60
+ const canChiDay = (0, canchi_1.getCanChiDay)(jd);
61
+ const canChiYear = (0, canchi_1.getCanChiYear)(lunar.year);
62
+ const canChiMonth = (0, canchi_1.getCanChiMonth)(lunar.month, lunar.year);
63
+ const napAmDay = (0, canchi_1.getNapAm)(canChiDay.canIndex, canChiDay.chiIndex);
64
+ const napAmYear = (0, canchi_1.getNapAm)(canChiYear.canIndex, canChiYear.chiIndex);
65
+ const napAmMonth = (0, canchi_1.getNapAm)(canChiMonth.canIndex, canChiMonth.chiIndex);
66
+ const gio = (0, truc_1.getGioInDay)(canChiDay.chiIndex);
67
+ return {
68
+ jd,
69
+ solar: {
70
+ day,
71
+ month,
72
+ year,
73
+ weekday,
74
+ weekdayName: constants_1.THU[weekday],
75
+ iso: `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`,
76
+ },
77
+ lunar: decorateLunar(lunar),
78
+ canChi: { year: canChiYear, month: canChiMonth, day: canChiDay },
79
+ conGiap: (0, canchi_1.getConGiap)(lunar.year),
80
+ napAm: { year: napAmYear, month: napAmMonth, day: napAmDay },
81
+ nguHanh: napAmDay.element,
82
+ nguHanhId: (0, canchi_1.getNguHanhId)(napAmDay.element),
83
+ tietKhi: (0, tietkhi_1.getTietKhi)(jd, timeZone),
84
+ truc: (0, truc_1.getTruc)(jd, canChiDay.chiIndex, timeZone),
85
+ gio,
86
+ gioHoangDao: gio.filter((g) => g.hoangDao),
87
+ huongXuatHanh: (0, huong_1.getHuongXuatHanh)(canChiDay.canIndex, canChiDay.can),
88
+ };
89
+ }
90
+ exports.getLunarDayInfo = getLunarDayInfo;
91
+ /** Tiện dụng: chỉ lấy ngày âm */
92
+ function getLunarDate(input, timeZone = constants_1.TZ_VN) {
93
+ const { day, month, year } = resolveDate(input, timeZone);
94
+ return decorateLunar((0, lunar_1.solarToLunar)(day, month, year, timeZone));
95
+ }
96
+ exports.getLunarDate = getLunarDate;
97
+ /**
98
+ * Tiện dụng: hôm nay là ngày âm bao nhiêu.
99
+ */
100
+ function getTodayLunar(timeZone = constants_1.TZ_VN) {
101
+ return getLunarDate(new Date(), timeZone);
102
+ }
103
+ exports.getTodayLunar = getTodayLunar;
@@ -0,0 +1,26 @@
1
+ /** Hàm định dạng hiển thị */
2
+ import type { LunarDateInfo, LunarDayInfo } from './types';
3
+ /** Tên ngày âm theo cách gọi dân gian: Mùng 1 … Rằm … Ba mươi */
4
+ export declare function getLunarDayName(day: number): string;
5
+ export interface FormatLunarOptions {
6
+ /** Dạng hiển thị */
7
+ style?: 'short' | 'long' | 'day';
8
+ /** Thêm chữ "nhuận" khi là tháng nhuận (mặc định true) */
9
+ showLeap?: boolean;
10
+ }
11
+ /**
12
+ * Định dạng ngày âm.
13
+ *
14
+ * - `short` → "20/11/2023"
15
+ * - `long` → "20 tháng Một, năm Quý Mão"
16
+ * - `day` → "Mùng 1"
17
+ */
18
+ export declare function formatLunar(lunar: LunarDateInfo, options?: FormatLunarOptions): string;
19
+ /** Định dạng ngày dương: "10/02/2024" hoặc "Thứ bảy, 10/02/2024" */
20
+ export declare function formatSolar(day: LunarDayInfo, withWeekday?: boolean): string;
21
+ /** Nhãn ngắn cho ô lịch: thứ viết tắt + ngày dương */
22
+ export declare function formatCell(day: LunarDayInfo): string;
23
+ /** Một dòng mô tả đầy đủ: "Thứ bảy 10/02/2024 — Mùng 1 tháng Giêng, Giáp Thìn" */
24
+ export declare function describeDay(day: LunarDayInfo): string;
25
+ /** Tên tháng âm ngắn: "Giêng", "Chạp" */
26
+ export declare function getShortMonthName(month: number): string;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /** Hàm định dạng hiển thị */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getShortMonthName = exports.describeDay = exports.formatCell = exports.formatSolar = exports.formatLunar = exports.getLunarDayName = void 0;
5
+ const constants_1 = require("./constants");
6
+ /** Tên ngày âm theo cách gọi dân gian: Mùng 1 … Rằm … Ba mươi */
7
+ function getLunarDayName(day) {
8
+ if (day === 15)
9
+ return 'Rằm';
10
+ if (day === 30)
11
+ return 'Ba mươi';
12
+ if (day >= 1 && day <= 10)
13
+ return `Mùng ${day}`;
14
+ return String(day);
15
+ }
16
+ exports.getLunarDayName = getLunarDayName;
17
+ /**
18
+ * Định dạng ngày âm.
19
+ *
20
+ * - `short` → "20/11/2023"
21
+ * - `long` → "20 tháng Một, năm Quý Mão"
22
+ * - `day` → "Mùng 1"
23
+ */
24
+ function formatLunar(lunar, options = {}) {
25
+ const { style = 'short', showLeap = true } = options;
26
+ const leap = lunar.leap && showLeap ? ' nhuận' : '';
27
+ if (style === 'day') {
28
+ return getLunarDayName(lunar.day);
29
+ }
30
+ if (style === 'long') {
31
+ const yearPart = lunar.canChiYearName ? `, năm ${lunar.canChiYearName}` : '';
32
+ return `${lunar.day} ${constants_1.TEN_THANG_AM_FULL[lunar.month]}${leap}${yearPart}`;
33
+ }
34
+ return `${lunar.day}/${lunar.month}${leap}/${lunar.year}`;
35
+ }
36
+ exports.formatLunar = formatLunar;
37
+ /** Định dạng ngày dương: "10/02/2024" hoặc "Thứ bảy, 10/02/2024" */
38
+ function formatSolar(day, withWeekday = false) {
39
+ const { solar } = day;
40
+ const d = `${String(solar.day).padStart(2, '0')}/${String(solar.month).padStart(2, '0')}/${solar.year}`;
41
+ return withWeekday ? `${solar.weekdayName}, ${d}` : d;
42
+ }
43
+ exports.formatSolar = formatSolar;
44
+ /** Nhãn ngắn cho ô lịch: thứ viết tắt + ngày dương */
45
+ function formatCell(day) {
46
+ return `${constants_1.THU_NGAN[day.solar.weekday]} ${day.solar.day}`;
47
+ }
48
+ exports.formatCell = formatCell;
49
+ /** Một dòng mô tả đầy đủ: "Thứ bảy 10/02/2024 — Mùng 1 tháng Giêng, Giáp Thìn" */
50
+ function describeDay(day) {
51
+ const leap = day.lunar.leap ? ' nhuận' : '';
52
+ return (`${day.solar.weekdayName} ${String(day.solar.day).padStart(2, '0')}/${String(day.solar.month).padStart(2, '0')}/${day.solar.year}` +
53
+ ` — ${getLunarDayName(day.lunar.day)} ${constants_1.TEN_THANG_AM_FULL[day.lunar.month]}${leap}, ${day.canChi.year.name}`);
54
+ }
55
+ exports.describeDay = describeDay;
56
+ /** Tên tháng âm ngắn: "Giêng", "Chạp" */
57
+ function getShortMonthName(month) {
58
+ return constants_1.TEN_THANG_AM[month];
59
+ }
60
+ exports.getShortMonthName = getShortMonthName;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Hướng xuất hành theo bảng Ngọc Hạp Thông Thư.
3
+ *
4
+ * Bảng đối xứng theo cặp Can ngày:
5
+ * Giáp / Kỷ → Hỷ: Đông Bắc · Tài: Đông Bắc · Hạc: Đông Nam
6
+ * Ất / Canh→ Hỷ: Tây Bắc · Tài: Đông Nam · Hạc: Đông Nam
7
+ * Bính / Tân → Hỷ: Tây Nam · Tài: Tây · Hạc: Đông
8
+ * Đinh / Nhâm→ Hỷ: Nam · Tài: Tây Nam · Hạc: Đông
9
+ * Mậu / Quý → Hỷ: Đông Nam · Tài: Bắc · Hạc: Trung cung
10
+ */
11
+ export interface HuongXuatHanh {
12
+ /** Can của ngày (0 = Giáp) */
13
+ canIndex: number;
14
+ /** Tên can */
15
+ can: string;
16
+ /** Hướng Hỷ thần — gặp việc vui, cưới hỏi, gặp gỡ */
17
+ hyThan: string;
18
+ /** Hướng Tài thần — cầu tài, khai trương, đàm phán */
19
+ taiThan: string;
20
+ /** Hướng Hạc thần — đại kỵ, nên tránh */
21
+ hacThan: string;
22
+ }
23
+ /** Hướng xuất hành của ngày, suy từ can ngày */
24
+ export declare function getHuongXuatHanh(canIndex: number, canName: string): HuongXuatHanh;
25
+ /** Toạ độ la bàn (độ, 0 = Chính Bắc, thuận chiều kim đồng hồ) của 8 hướng */
26
+ export declare const HUONG_DEGREE: Record<string, number>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * Hướng xuất hành theo bảng Ngọc Hạp Thông Thư.
4
+ *
5
+ * Bảng đối xứng theo cặp Can ngày:
6
+ * Giáp / Kỷ → Hỷ: Đông Bắc · Tài: Đông Bắc · Hạc: Đông Nam
7
+ * Ất / Canh→ Hỷ: Tây Bắc · Tài: Đông Nam · Hạc: Đông Nam
8
+ * Bính / Tân → Hỷ: Tây Nam · Tài: Tây · Hạc: Đông
9
+ * Đinh / Nhâm→ Hỷ: Nam · Tài: Tây Nam · Hạc: Đông
10
+ * Mậu / Quý → Hỷ: Đông Nam · Tài: Bắc · Hạc: Trung cung
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.HUONG_DEGREE = exports.getHuongXuatHanh = void 0;
14
+ const HY = ['Đông Bắc', 'Tây Bắc', 'Tây Nam', 'Nam', 'Đông Nam'];
15
+ const TAI = ['Đông Bắc', 'Đông Nam', 'Tây', 'Tây Nam', 'Bắc'];
16
+ const HAC = ['Đông Nam', 'Đông Nam', 'Đông', 'Đông', 'Trung cung'];
17
+ /** Hướng xuất hành của ngày, suy từ can ngày */
18
+ function getHuongXuatHanh(canIndex, canName) {
19
+ const g = (((canIndex % 10) + 10) % 10) % 5;
20
+ return {
21
+ canIndex: (((canIndex % 10) + 10) % 10),
22
+ can: canName,
23
+ hyThan: HY[g],
24
+ taiThan: TAI[g],
25
+ hacThan: HAC[g],
26
+ };
27
+ }
28
+ exports.getHuongXuatHanh = getHuongXuatHanh;
29
+ /** Toạ độ la bàn (độ, 0 = Chính Bắc, thuận chiều kim đồng hồ) của 8 hướng */
30
+ exports.HUONG_DEGREE = {
31
+ 'Chính Bắc': 0,
32
+ 'Đông Bắc': 45,
33
+ 'Chính Đông': 90,
34
+ 'Đông Nam': 135,
35
+ 'Chính Nam': 180,
36
+ 'Tây Nam': 225,
37
+ 'Chính Tây': 270,
38
+ 'Tây Bắc': 315,
39
+ Bắc: 0,
40
+ Đông: 90,
41
+ Nam: 180,
42
+ Tây: 270,
43
+ 'Trung cung': -1,
44
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * react-native-lich-am / core
3
+ *
4
+ * Toàn bộ phần tính toán lịch âm — không phụ thuộc React Native,
5
+ * không phụ thuộc thư viện ngoài, chạy được cả trên Node và trình duyệt.
6
+ */
7
+ export * from './constants';
8
+ export * from './astro';
9
+ export * from './lunar';
10
+ export * from './canchi';
11
+ export * from './tietkhi';
12
+ export * from './truc';
13
+ export * from './huong';
14
+ export * from './format';
15
+ export * from './day';
16
+ export * from './types';
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ /**
3
+ * react-native-lich-am / core
4
+ *
5
+ * Toàn bộ phần tính toán lịch âm — không phụ thuộc React Native,
6
+ * không phụ thuộc thư viện ngoài, chạy được cả trên Node và trình duyệt.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ __exportStar(require("./constants"), exports);
24
+ __exportStar(require("./astro"), exports);
25
+ __exportStar(require("./lunar"), exports);
26
+ __exportStar(require("./canchi"), exports);
27
+ __exportStar(require("./tietkhi"), exports);
28
+ __exportStar(require("./truc"), exports);
29
+ __exportStar(require("./huong"), exports);
30
+ __exportStar(require("./format"), exports);
31
+ __exportStar(require("./day"), exports);
32
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Chuyển đổi dương lịch ⇄ âm lịch (âm lịch Việt Nam, múi giờ UTC+7).
3
+ */
4
+ export interface LunarDate {
5
+ /** Ngày âm (1–30) */
6
+ day: number;
7
+ /** Tháng âm (1–12) */
8
+ month: number;
9
+ /** Năm âm */
10
+ year: number;
11
+ /** Tháng nhuận hay không */
12
+ leap: boolean;
13
+ /** Số ngày Julian của ngày dương tương ứng */
14
+ jd: number;
15
+ }
16
+ export interface SolarDate {
17
+ day: number;
18
+ month: number;
19
+ year: number;
20
+ jd: number;
21
+ }
22
+ /**
23
+ * Dương lịch → âm lịch.
24
+ *
25
+ * @example
26
+ * solarToLunar(10, 2, 2024) // Tết Giáp Thìn → { day: 1, month: 1, year: 2024, leap: false }
27
+ */
28
+ export declare function solarToLunar(day: number, month: number, year: number, timeZone?: number): LunarDate;
29
+ /**
30
+ * Âm lịch → dương lịch.
31
+ *
32
+ * @returns ngày dương lịch, hoặc `null` nếu tổ hợp âm lịch không tồn tại
33
+ * (ví dụ yêu cầu tháng nhuận nhưng năm đó không có tháng nhuận đó).
34
+ */
35
+ export declare function lunarToSolar(day: number, month: number, year: number, leap?: boolean, timeZone?: number): SolarDate | null;
36
+ /** Tháng âm `month` của năm âm `year` có phải tháng nhuận hay không */
37
+ export declare function getLeapMonthOfYear(year: number, timeZone?: number): number;
38
+ /** Số ngày của một tháng âm (29 hoặc 30) */
39
+ export declare function getLunarMonthDays(month: number, year: number, leap?: boolean, timeZone?: number): number;