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 @@
1
+ {"year":2028,"days":{"2028-01-01":{"l":"5-12-2027","t":9,"n":3,"x":0,"s":10.5,"a":[6,57,72,74,87,103],"b":[61,62,63,76,106],"y":[0,10],"z":[1,2,3,4,5,6,7,8,9,11,12,13,14,15,18,19,20,21,22,23,24,25,27,28,29,30],"h":[[0,6,[2,15]],[1,1,[7,17]],[2,1,[18]],[3,1,[9,13,20]],[4,-3,[3,23]],[5,-6,[14,24]],[6,1,[1,19,22]],[7,-3,[11,22,24]],[8,3,[1,6,8]],[9,4,[2,4,16]],[10,-1,[0,5,7]],[11,6,[2,10]]],"g":[[0,12],[8,11],[11,8],[9,4],[2,3]],"d":[[2,8,1],[5,9,3],[8,9,4],[11,10,5]],"q":[[8,6],[0,7]],"p":{"nam":[[6,7,5],[3,6,3],[1,4,1],[16,3,3],[4,3,4],[8,2,7]],"thang":[[10,8,9],[7,5,6],[1,5,1],[18,5,10],[8,4,7],[23,3,15]],"ngay":[[20,3,0],[9,3,8],[24,3,1],[5,3,1],[2,3,2],[6,3,5],[14,2,12],[7,2,6]]},"u":[[5,3],[3,3],[7,7],[7,1]],"e":65,"k":1}}}
@@ -0,0 +1 @@
1
+ {"_note":"Dữ liệu trích xuất từ app Lịch Việt (com.somestudio.lichvietnam). Xem README để biết phạm vi sử dụng.","truc":["Kiến","Trừ","Mãn","Bình","Định","Chấp","Phá","Nguy","Thành","Thu","Khai","Bế"],"nguHanh":["","Kim","Mộc","Thủy","Hỏa","Thổ"],"chatLuong":["dep","tot","bt","xau","ratxau"],"sao":["Kim quỹ","Kính an","Nguyệt ân","Quan nhật","Thiên ân","Thiên xá","Tứ tương","Nguyệt kiến","Thổ phủ","Tiểu thời","Nguyệt yếm","Địa hỏa","Âm đức","Bảo quang","Cát kỳ","Lục hợp","Phổ hộ","Thủ nhật","Dịch mã","Thiên hậu","Thiên mã","Ngũ hợp","Ô phệ đối","Nguyệt không","Phúc sinh","Phúc đức","Thiên vu","Thời đức","Tương nhật","Bạch hổ","Quy kỵ","Ngũ hư","Bất tương","Dân nhật","Ngọc đường","Nguyệt đức hợp","Nguyệt hình","Thiên lại","Trí tử","Thiên tặc","Tử thần","Thiên cương","Tam hợp","Lâm nhật","Thánh tâm","Thiên thương","Thời âm","Tử khí","Quan phù","Thiên lao","Lục nghi","Chiêu dao","Yếm đối","Cửu khảm","Cửu tiêu","Trùng nhật","Phục nhật","Ô phệ","Giải thần","Nguyệt đức","Thiên đức","Đại thời","Đại bại","Hàm trì","Tiểu hao","Nguyệt hại","Cửu không","Huyền vũ","Đại hao","Nguyệt phá","Tứ kích","Dương đức","Mẫu thương","Ngũ phú","Trừ thần","Tư mệnh","Ngũ ly","Du họa","Thiên hỷ","Thiên y","Đại sát","Câu trần","Địa nang","Thanh long","Thiên nguyện","Bát phong","Ích hậu","Minh đường","Sinh khí","Thời dương","Thiên đức hợp","Vương nhật","Tục thế","Huyết kỵ","Huyết chi","Thiên hình","Xúc thủy long","Thổ phù","Yếu an","Vãng vong","Chu tước","Ngọc vũ","Kiếp sát","Kim đường","Thiên hỏa","Tai sát","Hà khôi","Nguyệt sát","Nguyệt hư","Trục trận","Bát chuyên","Âm thác","Tứ hao","Dương thác","Tứ phế","Tam âm","Bát long","Tứ kị","Tứ cùng","Tiểu hội","Đại hội","Ngũ mộ","Cô thần","Đơn âm","Thuần dương","Thất điểu","Hành ngận","Âm dương đều thác","Âm dương xung kích","Thiên cẩu","Cửu hổ","Âm đạo xung dương","Âm vị","Tuyệt dương","Thuần âm","Lục xà","Dương phá âm xung","Tuế bạc","Liễu lệ","Âm dương giao phá"],"gioSao":["Nhật kiến","Kim quỹ","Thiên ất quý nhân","Nhật hợp","Bảo quang","Bạch hổ","Nhật mã","Phúc tinh quý nhân","Hỷ thần","Nhật lộc","Ngọc đường","Nhật hình","Thiên lao","Nhật phá","Ngũ bất ngộ","Tư mệnh","Nhật hại","Câu trần","Thanh long","Triệt lộ không vong","Minh đường","Thiên quan quý nhân","Tuần trung không vong","Thiên hình","Chu tước","Huyền vũ"],"viec":["Cầu cúng","Cầu an","Cầu tự","Giải hạn","Họp đồng hương/họp họ/họp lớp/họp chiến hữu","Xuất hành","Dạm ngõ","Lễ ăn hỏi","Thành hôn","Tuyển dụng người","Cắt tóc","Nhập trạch","Khởi công/động thổ","Sửa chữa kho tàng","Nạo vét mương máng","Đào giếng/ao/hồ chứa nước","Lấp ao/hồ rộng","Phá dỡ công trình","Động thổ (âm phần)","An táng","Cải táng / bốc mộ","Khai trương","Lập thỏa thuận/hợp đồng giao dịch","Mua tài sản có giá trị","Xuất hàng hóa","Mua con giống","Đổ mái cất nóc","Công bố và trao quyết định bổ nhiệm","Kê giường","Khám chữa bệnh","Đắp đê"],"nhom":["Việc cầu, cúng, tế, lễ","Việc xã hội - tập thể","Việc cá nhân-gia đình","Việc tu tạo - tang táng","Việc sản xuất - kinh doanh","Việc trồng trọt - chăn nuôi"],"huong":["Bắc - Đông Bắc","Nam - Đông Nam","Chính Nam","Bắc - Tây Bắc","Chính Đông Nam","Nam - Tây Nam","Tây - Tây Nam","Chính Tây Bắc","Chính Đông Bắc","Đông - Đông Bắc","Đông - Đông Nam","Tây - Tây Bắc","Chính Tây Nam","Chính Đông","Chính Bắc","Chính Tây"],"son":["Quý","Tị","Ngọ","Nhâm","Tốn","Bính","Đinh","Canh","Càn","Cấn","Giáp","Mùi","Thìn","Tân","Khôn","Thân","Hợi","Tuất","Ất","Mão","Sửu","Dần","Tý","Dậu","Tỵ"],"than":["Thiên ất","Cấn","Thiên không","Tốn","Khôn","Càn","Dương quý","Âm quý","Đằng xà","Thanh long","Thiên hậu","Chu tước","Câu trần","Thái âm","Thái thường","Bạch hổ","Huyền vũ","Quý","Ất","Đinh","Tân","Lục hợp","Thái thương","Giáp","Bính","Canh","Nhâm","Đằng xa","Thái dương","Thiên Hậu","Thanh Long","Bạch Hổ"],"gioChi":["Tý","Sửu","Dần","Mão","Thìn","Tỵ","Ngọ","Mùi","Thân","Dậu","Tuất","Hợi"],"phamVi":["nam","thang","ngay"],"meta":{"start":"2024-01-01","end":"2028-01-01","count":1462,"scoreMin":-7.55,"scoreMax":20.1}}
@@ -0,0 +1 @@
1
+ {"note":"Bảng giờ chuẩn 60 can-chi × 12 giờ. Sinh bởi scripts/build-gio-table.mjs — đừng sửa tay.","sao":[{"id":2,"loai":0,"ten":"Huyền vũ","w":-1},{"id":4,"loai":0,"ten":"Chu tước","w":-1},{"id":9,"loai":0,"ten":"Câu trần","w":-1},{"id":11,"loai":0,"ten":"Bạch hổ","w":-1},{"id":12,"loai":1,"ten":"Thanh long","w":1},{"id":14,"loai":1,"ten":"Thiên ất quý nhân","w":5},{"id":15,"loai":0,"ten":"Nhật hợp","w":-2},{"id":16,"loai":0,"ten":"Thiên hình","w":-1},{"id":17,"loai":1,"ten":"Phúc tinh quý nhân","w":2},{"id":18,"loai":0,"ten":"Nhật kiến","w":-2},{"id":19,"loai":1,"ten":"Kim quỹ","w":1},{"id":20,"loai":1,"ten":"Nhật lộc","w":2},{"id":21,"loai":1,"ten":"Bảo quang","w":1},{"id":22,"loai":0,"ten":"Triệt lộ không vong","w":0},{"id":23,"loai":0,"ten":"Nhật hại","w":-2},{"id":24,"loai":0,"ten":"Thiên lao","w":-1},{"id":25,"loai":1,"ten":"Tư mệnh","w":1},{"id":26,"loai":1,"ten":"Thiên quan quý nhân","w":2},{"id":27,"loai":1,"ten":"Hỷ thần","w":1},{"id":28,"loai":0,"ten":"Tuần trung không vong","w":0},{"id":30,"loai":1,"ten":"Nhật mã","w":1},{"id":31,"loai":1,"ten":"Minh đường","w":1},{"id":32,"loai":0,"ten":"Ngũ bất ngộ","w":-5},{"id":34,"loai":0,"ten":"Nhật hình","w":-2},{"id":35,"loai":0,"ten":"Nhật phá","w":-2},{"id":36,"loai":1,"ten":"Ngọc đường","w":1}],"cells":{"0|0":[18,19],"0|1":[14,15,21],"0|2":[11,17,20,27,30],"0|3":[34,36],"0|4":[24],"0|5":[2],"0|6":[25,32,35],"0|7":[9,14,23],"0|8":[12,22],"0|9":[22,26,31],"0|10":[16,28],"0|11":[4,28],"1|0":[14,15,16],"1|1":[4,17,18],"1|2":[19],"1|3":[20,21],"1|4":[11],"1|5":[32,36],"1|6":[22,23,24],"1|7":[2,22,35],"1|8":[14,25,26],"1|9":[9],"1|10":[12,27,28,34],"1|11":[17,28,30,31],"2|0":[12,17,26],"2|1":[31],"2|2":[16,18],"2|3":[4],"2|4":[19,22,32],"2|5":[20,21,22,23,34],"2|6":[11],"2|7":[36],"2|8":[24,27,30,35],"2|9":[2,14],"2|10":[17,25,28],"2|11":[9,14,15,28],"3|0":[25,34],"3|1":[9],"3|2":[12,22],"3|3":[18,22,31,32],"3|4":[16,23],"3|5":[4,30],"3|6":[19,20,27],"3|7":[21],"3|8":[11],"3|9":[14,17,35,36],"3|10":[15,24,28],"3|11":[2,14,26,28],"4|0":[22,24],"4|1":[2,14,22],"4|2":[25,30,32],"4|3":[9,23,26],"4|4":[12,18,27,34],"4|5":[20,31],"4|6":[16],"4|7":[4,14],"4|8":[17,19],"4|9":[15,21],"4|10":[11,22,28,35],"4|11":[22,28,36],"5|0":[11,14],"5|1":[32,36],"5|2":[23,24,26,27],"5|3":[2],"5|4":[25],"5|5":[9,18],"5|6":[12,20],"5|7":[17,31],"5|8":[14,15,16,22,34],"5|9":[4,22],"5|10":[19,28],"5|11":[21,28,30,32,35],"6|0":[19,32,35],"6|1":[14,21,23],"6|2":[11],"6|3":[36],"6|4":[24],"6|5":[2],"6|6":[17,18,22,25,26,34],"6|7":[9,14,15,22],"6|8":[12,20,30],"6|9":[31],"6|10":[16,27,28,32],"6|11":[4,28],"7|0":[16,23],"7|1":[4,34,35],"7|2":[14,19],"7|3":[21],"7|4":[11,22],"7|5":[17,22,26,30,36],"7|6":[14,15,24],"7|7":[2,18],"7|8":[25,27],"7|9":[9,20,32],"7|10":[12,28],"7|11":[28,31],"8|0":[12],"8|1":[26,31],"8|2":[16,22,30,34,35],"8|3":[4,14,22],"8|4":[17,19],"8|5":[14,15,21],"8|6":[11,27],"8|7":[26,36],"8|8":[18,24,32],"8|9":[2],"8|10":[25,28],"8|11":[9,20,23,28],"9|0":[20,22,25],"9|1":[9,22],"9|2":[12],"9|3":[14,17,31,35],"9|4":[15,16,26,27],"9|5":[4,14],"9|6":[19],"9|7":[21,32],"9|8":[11],"9|9":[18,34,36],"9|10":[22,23,24,26,28],"9|11":[2,22,28,30],"10|0":[24],"10|1":[2,14],"10|2":[17,20,25,27],"10|3":[9,15],"10|4":[12,35],"10|5":[31],"10|6":[16,32],"10|7":[4,14,34],"10|8":[19,22,28,30],"10|9":[21,22,23,26,28],"10|10":[11,18],"10|11":[36],"11|0":[11,14],"11|1":[17,36],"11|2":[15,24],"11|3":[2,20],"11|4":[25],"11|5":[9,30,32,35],"11|6":[12,22],"11|7":[22,31],"11|8":[14,16,23,26,28],"11|9":[4,28],"11|10":[19,27],"11|11":[17,18,21,34],"12|0":[17,18,19,26],"12|1":[15,21],"12|2":[11,30],"12|3":[34,36],"12|4":[22,24,32],"12|5":[2,20,22],"12|6":[25,35],"12|7":[9,23],"12|8":[12,27,28],"12|9":[14,28,31],"12|10":[16,17],"12|11":[4,14],"13|0":[15,16],"13|1":[4,18],"13|2":[19,22],"13|3":[21,22,32],"13|4":[11],"13|5":[36],"13|6":[20,23,24,27],"13|7":[2,35],"13|8":[25,28],"13|9":[9,14,17,28],"13|10":[12,34],"13|11":[14,26,30,31],"14|0":[12,22],"14|1":[14,22,31],"14|2":[16,18,32],"14|3":[4,26],"14|4":[19,27],"14|5":[20,21,23,34],"14|6":[11],"14|7":[14,36],"14|8":[17,24,28,30,35],"14|9":[2,28],"14|10":[22,25],"14|11":[9,15,22],"15|0":[14,25,34],"15|1":[9,32],"15|2":[12,26,27],"15|3":[18,31],"15|4":[16,23],"15|5":[4,30],"15|6":[19,20],"15|7":[17,21],"15|8":[11,14,22,28],"15|9":[22,28,35,36],"15|10":[15,24],"15|11":[2,32],"16|0":[24,32],"16|1":[2,14],"16|2":[25,30],"16|3":[9,23],"16|4":[12,18,34],"16|5":[31],"16|6":[16,17,22,26],"16|7":[4,14,22],"16|8":[19,20,28],"16|9":[15,21,28],"16|10":[11,27,32,35],"16|11":[36],"17|0":[11],"17|1":[36],"17|2":[14,23,24],"17|3":[2],"17|4":[22,25],"17|5":[9,17,18,22,26],"17|6":[12,14],"17|7":[31],"17|8":[15,16,27,28,34],"17|9":[4,20,28,32],"17|10":[19],"17|11":[21,30,35],"18|0":[19,35],"18|1":[21,23,26],"18|2":[11,22],"18|3":[14,22,36],"18|4":[17,24],"18|5":[2,14],"18|6":[18,25,27,34],"18|7":[9,15,26],"18|8":[12,28,30,32],"18|9":[28,31],"18|10":[16],"18|11":[4,20],"19|0":[16,20,22,23],"19|1":[4,22,34,35],"19|2":[19],"19|3":[14,17,21],"19|4":[11,26,27],"19|5":[14,30,36],"19|6":[15,24],"19|7":[2,18,32],"19|8":[25,28],"19|9":[9,28],"19|10":[12,22,26],"19|11":[22,31],"20|0":[12],"20|1":[14,31],"20|2":[16,17,20,27,30,34,35],"20|3":[4],"20|4":[19],"20|5":[15,21],"20|6":[11,28,32],"20|7":[14,28,36],"20|8":[18,22,24],"20|9":[2,22,26],"20|10":[25],"20|11":[9,23],"21|0":[14,25],"21|1":[9,17],"21|2":[12],"21|3":[20,31,35],"21|4":[15,16],"21|5":[4,32],"21|6":[19,22,28],"21|7":[21,22,28],"21|8":[11,14,26],"21|9":[18,34,36],"21|10":[23,24,27],"21|11":[2,17,30],"22|0":[17,24,26],"22|1":[2],"22|2":[25],"22|3":[9,15],"22|4":[12,22,32,35],"22|5":[20,22,31],"22|6":[16,28],"22|7":[4,28,34],"22|8":[19,27,30],"22|9":[14,21,23],"22|10":[11,17,18],"22|11":[14,36],"23|0":[11],"23|1":[36],"23|2":[15,22,24],"23|3":[2,22,32],"23|4":[25],"23|5":[9,30,35],"23|6":[12,20,27,28],"23|7":[28,31],"23|8":[16,23],"23|9":[4,14,17],"23|10":[19],"23|11":[14,18,21,26,34],"24|0":[18,19,22],"24|1":[14,15,21,22],"24|2":[11,30,32],"24|3":[26,34,36],"24|4":[24,27],"24|5":[2,20],"24|6":[25,28,35],"24|7":[9,14,23,28],"24|8":[12,17],"24|9":[31],"24|10":[16,22],"24|11":[4,22],"25|0":[14,15,16],"25|1":[4,18,32],"25|2":[19,26,27],"25|3":[21],"25|4":[11],"25|5":[36],"25|6":[20,23,24,28],"25|7":[2,17,28,35],"25|8":[14,22,25],"25|9":[9,22],"25|10":[12,34],"25|11":[30,31,32],"26|0":[12,32],"26|1":[14,31],"26|2":[16,18],"26|3":[4],"26|4":[19],"26|5":[21,23,34],"26|6":[11,17,22,26,28],"26|7":[14,22,28,36],"26|8":[20,24,30,35],"26|9":[2],"26|10":[25,27,32],"26|11":[9,15],"27|0":[25,34],"27|1":[9],"27|2":[12,14],"27|3":[18,31],"27|4":[16,22,23],"27|5":[4,17,22,26,30],"27|6":[14,19,28],"27|7":[21,28],"27|8":[11,27],"27|9":[20,32,35,36],"27|10":[15,24],"27|11":[2],"28|0":[24],"28|1":[2,26],"28|2":[22,25,30],"28|3":[9,14,22,23],"28|4":[12,17,18,34],"28|5":[14,31],"28|6":[16,27,28],"28|7":[4,26,28],"28|8":[19,32],"28|9":[15,21],"28|10":[11,35],"28|11":[20,36],"29|0":[11,20,22],"29|1":[22,36],"29|2":[23,24],"29|3":[2,14,17],"29|4":[25,26,27],"29|5":[9,14,18],"29|6":[12,28],"29|7":[28,31,32],"29|8":[15,16,34],"29|9":[4],"29|10":[19,22,26],"29|11":[21,22,30,35],"30|0":[19,35],"30|1":[14,21,23],"30|2":[11,17,20,27],"30|3":[36],"30|4":[24,28],"30|5":[2,28],"30|6":[18,25,32,34],"30|7":[9,14,15],"30|8":[12,22,30],"30|9":[22,26,31],"30|10":[16],"30|11":[4],"31|0":[14,16,23],"31|1":[4,17,34,35],"31|2":[19],"31|3":[20,21],"31|4":[11,28],"31|5":[28,30,32,36],"31|6":[15,22,24],"31|7":[2,18,22],"31|8":[14,25,26],"31|9":[9],"31|10":[12,27],"31|11":[17,31],"32|0":[12,17,26],"32|1":[31],"32|2":[16,30,34,35],"32|3":[4],"32|4":[19,22,28,32],"32|5":[15,20,21,22,28],"32|6":[11],"32|7":[36],"32|8":[18,24,27],"32|9":[2,14],"32|10":[17,25],"32|11":[9,14,23],"33|0":[25],"33|1":[9],"33|2":[12,22],"33|3":[22,31,32,35],"33|4":[15,16,28],"33|5":[4,28],"33|6":[19,20,27],"33|7":[21],"33|8":[11],"33|9":[14,17,18,34,36],"33|10":[23,24],"33|11":[2,14,26,30],"34|0":[22,24],"34|1":[2,14,22],"34|2":[25,32],"34|3":[9,15,26],"34|4":[12,27,28,35],"34|5":[20,28,31],"34|6":[16],"34|7":[4,14,34],"34|8":[17,19,30],"34|9":[21,23],"34|10":[11,18,22],"34|11":[22,36],"35|0":[11,14],"35|1":[32,36],"35|2":[15,24,26,27],"35|3":[2],"35|4":[25,28],"35|5":[9,28,30,35],"35|6":[12,20],"35|7":[17,31],"35|8":[14,16,22,23],"35|9":[4,22],"35|10":[19],"35|11":[18,21,32,34],"36|0":[18,19,32],"36|1":[14,15,21],"36|2":[11,30],"36|3":[34,36],"36|4":[24,28],"36|5":[2,28],"36|6":[17,22,25,26,35],"36|7":[9,14,22,23],"36|8":[12,20],"36|9":[31],"36|10":[16,27,32],"36|11":[4],"37|0":[15,16],"37|1":[4,18],"37|2":[14,19],"37|3":[21],"37|4":[11,22,28],"37|5":[17,22,26,28,36],"37|6":[14,23,24],"37|7":[2,35],"37|8":[25,27],"37|9":[9,20,32],"37|10":[12,34],"37|11":[30,31],"38|0":[12],"38|1":[26,31],"38|2":[16,18,22],"38|3":[4,14,22],"38|4":[17,19,28],"38|5":[14,21,23,28,34],"38|6":[11,27],"38|7":[26,36],"38|8":[24,30,32,35],"38|9":[2],"38|10":[25],"38|11":[9,15,20],"39|0":[20,22,25,34],"39|1":[9,22],"39|2":[12],"39|3":[14,17,18,31],"39|4":[16,23,26,27,28],"39|5":[4,14,28,30],"39|6":[19],"39|7":[21,32],"39|8":[11],"39|9":[35,36],"39|10":[15,22,24,26],"39|11":[2,22],"40|0":[24],"40|1":[2,14],"40|2":[17,20,25,27,28,30],"40|3":[9,23,28],"40|4":[12,18,34],"40|5":[31],"40|6":[16,32],"40|7":[4,14],"40|8":[19,22],"40|9":[15,21,22,26],"40|10":[11,35],"40|11":[36],"41|0":[11,14],"41|1":[17,36],"41|2":[23,24,28],"41|3":[2,20,28],"41|4":[25],"41|5":[9,18,32],"41|6":[12,22],"41|7":[22,31],"41|8":[14,15,16,26,34],"41|9":[4],"41|10":[19,27],"41|11":[17,21,30,35],"42|0":[17,19,26,35],"42|1":[21,23],"42|2":[11,28],"42|3":[28,36],"42|4":[22,24,32],"42|5":[2,20,22],"42|6":[18,25,34],"42|7":[9,15],"42|8":[12,27,30],"42|9":[14,31],"42|10":[16,17],"42|11":[4,14],"43|0":[16,23],"43|1":[4,34,35],"43|2":[19,22,28],"43|3":[21,22,28,32],"43|4":[11],"43|5":[30,36],"43|6":[15,20,24,27],"43|7":[2,18],"43|8":[25],"43|9":[9,14,17],"43|10":[12],"43|11":[14,26,31],"44|0":[12,22],"44|1":[14,22,31],"44|2":[16,28,30,32,34,35],"44|3":[4,26,28],"44|4":[19,27],"44|5":[15,20,21],"44|6":[11],"44|7":[14,36],"44|8":[17,18,24],"44|9":[2],"44|10":[22,25],"44|11":[9,22,23],"45|0":[14,25],"45|1":[9,32],"45|2":[12,26,27,28],"45|3":[28,31,35],"45|4":[15,16],"45|5":[4],"45|6":[19,20],"45|7":[17,21],"45|8":[11,14,22],"45|9":[18,22,34,36],"45|10":[23,24],"45|11":[2,30,32],"46|0":[24,32],"46|1":[2,14],"46|2":[25,28],"46|3":[9,15,28],"46|4":[12,35],"46|5":[31],"46|6":[16,17,22,26],"46|7":[4,14,22,34],"46|8":[19,20,30],"46|9":[21,23],"46|10":[11,18,27,32],"46|11":[36],"47|0":[11],"47|1":[36],"47|2":[14,15,24,28],"47|3":[2,28],"47|4":[22,25],"47|5":[9,17,22,26,30,35],"47|6":[12,14],"47|7":[31],"47|8":[16,23,27],"47|9":[4,20,32],"47|10":[19],"47|11":[18,21,34],"48|0":[18,19],"48|1":[15,21,26],"48|2":[11,22,28,30],"48|3":[14,22,28,34,36],"48|4":[17,24],"48|5":[2,14],"48|6":[25,27,35],"48|7":[9,23,26],"48|8":[12,32],"48|9":[31],"48|10":[16],"48|11":[4,20],"49|0":[15,16,20,22],"49|1":[4,18,22],"49|2":[19,28],"49|3":[14,17,21,28],"49|4":[11,26,27],"49|5":[14,36],"49|6":[23,24],"49|7":[2,32,35],"49|8":[25],"49|9":[9],"49|10":[12,22,26,34],"49|11":[22,30,31],"50|0":[12,28],"50|1":[14,28,31],"50|2":[16,17,18,20,27],"50|3":[4],"50|4":[19],"50|5":[21,23,34],"50|6":[11,32],"50|7":[14,36],"50|8":[22,24,30,35],"50|9":[2,22,26],"50|10":[25],"50|11":[9,15],"51|0":[14,25,28,34],"51|1":[9,17,28],"51|2":[12],"51|3":[18,20,31],"51|4":[16,23],"51|5":[4,30,32],"51|6":[19,22],"51|7":[21,22],"51|8":[11,14,26],"51|9":[35,36],"51|10":[15,24,27],"51|11":[2,17],"52|0":[17,24,26,28],"52|1":[2,28],"52|2":[25,30],"52|3":[9,23],"52|4":[12,18,22,32,34],"52|5":[20,22,31],"52|6":[16],"52|7":[4],"52|8":[19,27],"52|9":[14,15,21],"52|10":[11,17,35],"52|11":[14,36],"53|0":[11,28],"53|1":[28,36],"53|2":[22,23,24],"53|3":[2,22,32],"53|4":[25],"53|5":[9,18],"53|6":[12,20,27],"53|7":[31],"53|8":[15,16,34],"53|9":[4,14,17],"53|10":[19],"53|11":[14,21,26,30,35],"54|0":[19,22,28,35],"54|1":[14,21,22,23,28],"54|2":[11,32],"54|3":[26,36],"54|4":[24,27],"54|5":[2,20],"54|6":[18,25,34],"54|7":[9,14,15],"54|8":[12,17,30],"54|9":[31],"54|10":[16,22],"54|11":[4,22],"55|0":[14,16,23,28],"55|1":[4,28,32,34,35],"55|2":[19,26,27],"55|3":[21],"55|4":[11],"55|5":[30,36],"55|6":[15,20,24],"55|7":[2,17,18],"55|8":[14,22,25],"55|9":[9,22],"55|10":[12],"55|11":[31,32],"56|0":[12,28,32],"56|1":[14,28,31],"56|2":[16,30,34,35],"56|3":[4],"56|4":[19],"56|5":[15,21],"56|6":[11,17,22,26],"56|7":[14,22,36],"56|8":[18,20,24],"56|9":[2],"56|10":[25,27,32],"56|11":[9,23],"57|0":[25,28],"57|1":[9,28],"57|2":[12,14],"57|3":[31,35],"57|4":[15,16,22],"57|5":[4,17,22,26],"57|6":[14,19],"57|7":[21],"57|8":[11,27],"57|9":[18,20,32,34,36],"57|10":[23,24],"57|11":[2,30],"58|0":[24,28],"58|1":[2,26,28],"58|2":[22,25],"58|3":[9,14,15,22],"58|4":[12,17,35],"58|5":[14,31],"58|6":[16,27],"58|7":[4,26,34],"58|8":[19,30,32],"58|9":[21,23],"58|10":[11,18],"58|11":[20,36],"59|0":[11,20,22,28],"59|1":[22,28,36],"59|2":[15,24],"59|3":[2,14,17],"59|4":[25,26,27],"59|5":[9,14,30,35],"59|6":[12],"59|7":[31,32],"59|8":[16,23],"59|9":[4],"59|10":[19,22,26],"59|11":[18,21,22,34]}}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Giải mã bộ dữ liệu Lịch Việt (bản nén) + các hàm tra cứu dùng chung.
3
+ *
4
+ * File này KHÔNG nạp dữ liệu năm nào — nhờ vậy các entry point theo từng năm
5
+ * (`react-native-lich-am/dataset/2024`) chỉ kéo theo đúng dữ liệu của năm đó.
6
+ */
7
+ export interface RawDict {
8
+ truc: string[];
9
+ nguHanh: string[];
10
+ chatLuong: string[];
11
+ sao: string[];
12
+ gioSao: string[];
13
+ viec: string[];
14
+ nhom: string[];
15
+ huong: string[];
16
+ son: string[];
17
+ than: string[];
18
+ gioChi: string[];
19
+ meta: {
20
+ start: string;
21
+ end: string;
22
+ count: number;
23
+ scoreMin: number;
24
+ scoreMax: number;
25
+ };
26
+ }
27
+ export interface RawDay {
28
+ /** ngày âm "d-m-yyyy" */
29
+ l: string;
30
+ /** chỉ số Trực */
31
+ t: number;
32
+ /** id ngũ hành */
33
+ n: number;
34
+ /** ngày rất xấu */
35
+ x: number;
36
+ /** điểm thô */
37
+ s: number;
38
+ /** sao tốt */
39
+ a: number[];
40
+ /** sao xấu */
41
+ b: number[];
42
+ /** việc nên làm */
43
+ y: number[];
44
+ /** việc không nên làm */
45
+ z: number[];
46
+ /** 12 giờ: [giờ, điểm, sao[]] */
47
+ h: Array<[number, number, number[]]>;
48
+ /** giờ tốt nhất: [giờ, điểm] */
49
+ g: Array<[number, number]>;
50
+ /** 4 giờ đại cát: [giờ, sao, hướng gốc] */
51
+ d: Array<[number, number, number]>;
52
+ /** giờ quý đăng thiên môn: [giờ, sao] */
53
+ q: Array<[number, number]>;
54
+ /** hướng tốt: [sơn, số sao, hướng] */
55
+ p: {
56
+ nam: Array<[number, number, number]>;
57
+ thang: Array<[number, number, number]>;
58
+ ngay: Array<[number, number, number]>;
59
+ };
60
+ /** tuổi xung: [can, chi] */
61
+ u: Array<[number, number]>;
62
+ /** điểm 0–100 */
63
+ e: number;
64
+ /** xếp loại */
65
+ k: number;
66
+ }
67
+ export interface RawYear {
68
+ year: number;
69
+ days: Record<string, RawDay>;
70
+ }
71
+ export declare const dict: RawDict;
72
+ export type ChatLuong = 'dep' | 'tot' | 'bt' | 'xau' | 'ratxau';
73
+ export interface LichVietGio {
74
+ /** Chỉ số địa chi 0..11 */
75
+ index: number;
76
+ /** "Tý" … "Hợi" */
77
+ chi: string;
78
+ /** Điểm của giờ (số càng cao càng tốt) */
79
+ diem: number;
80
+ /** Các sao chiếu vào giờ */
81
+ sao: string[];
82
+ /** Có phải một trong các giờ tốt nhất ngày */
83
+ top: boolean;
84
+ /**
85
+ * Nguồn gốc của khung giờ này:
86
+ * - `nguon` — nguyên vẹn như dữ liệu gốc
87
+ * - `sua` — dữ liệu gốc sai, đã tính lại theo luật cổ điển
88
+ * - `suy-ra` — dữ liệu gốc bỏ trống, đã dựng lại
89
+ */
90
+ nguon: 'nguon' | 'sua' | 'suy-ra';
91
+ }
92
+ /**
93
+ * Một khung giờ theo thang điểm riêng của app Lịch Việt.
94
+ * Dùng cho `gioTotNhat` — điểm ở đây KHÁC `gio[].diem` (thang của thư viện).
95
+ */
96
+ export interface LichVietGioTomTat {
97
+ index: number;
98
+ chi: string;
99
+ /** Điểm theo thang riêng của app, không so được với `gio[].diem` */
100
+ diem: number;
101
+ sao: string[];
102
+ top: boolean;
103
+ }
104
+ export interface LichVietHuong {
105
+ /** Tên sơn, ví dụ "Tốn", "Bính" */
106
+ son: string;
107
+ /** Số sao tốt của hướng */
108
+ soSao: number;
109
+ /** Mô tả hướng, ví dụ "Chính Đông Nam" */
110
+ huong: string;
111
+ }
112
+ export interface LichVietDaiCat {
113
+ index: number;
114
+ chi: string;
115
+ sao: string;
116
+ /** Hướng gốc: Càn / Khôn / Cấn / Tốn */
117
+ gioGoc: string;
118
+ }
119
+ /** Thông tin chi tiết một ngày (dữ liệu Lịch Việt) */
120
+ export interface LichVietDay {
121
+ /** "2024-02-10" */
122
+ date: string;
123
+ lunar: {
124
+ day: number;
125
+ month: number;
126
+ year: number;
127
+ };
128
+ /** Chuỗi ngày âm gốc, "1-1-2024" */
129
+ lunarRaw: string;
130
+ truc: string;
131
+ nguHanh: string;
132
+ ngayRatXau: boolean;
133
+ saoTot: string[];
134
+ saoXau: string[];
135
+ nenLam: string[];
136
+ khongNenLam: string[];
137
+ /** Đủ 12 khung giờ, đã lấp ô thiếu và sửa ô sai của nguồn */
138
+ gio: LichVietGio[];
139
+ /** Khung giờ nguyên bản của nguồn (11 hoặc 12 phần tử, có thể chứa lỗi) */
140
+ gioRaw: LichVietGio[];
141
+ /** Các giờ tốt nhất trong ngày, theo thang điểm riêng của app */
142
+ gioTotNhat: LichVietGioTomTat[];
143
+ /** 4 giờ đại cát */
144
+ bonGioDaiCat: LichVietDaiCat[];
145
+ /** Giờ quý đăng thiên môn (Dương quý / Âm quý) */
146
+ gioQuyDangThienMon: Array<{
147
+ index: number;
148
+ chi: string;
149
+ sao: string;
150
+ }>;
151
+ /** Hướng tốt theo năm / tháng / ngày */
152
+ huong: {
153
+ nam: LichVietHuong[];
154
+ thang: LichVietHuong[];
155
+ ngay: LichVietHuong[];
156
+ };
157
+ /** Tuổi xung với ngày, ví dụ ["Mậu Ngọ", "Nhâm Ngọ"] */
158
+ tuoiXung: string[];
159
+ /** Điểm thô */
160
+ diemRaw: number;
161
+ /** Điểm 0–100 (phân vị trên toàn bộ tập dữ liệu) */
162
+ diem: number;
163
+ /** Xếp loại chất lượng ngày */
164
+ chatLuong: ChatLuong;
165
+ }
166
+ export declare const LICH_VIET_META: {
167
+ readonly start: string;
168
+ readonly end: string;
169
+ readonly count: number;
170
+ readonly scoreMin: number;
171
+ readonly scoreMax: number;
172
+ };
173
+ /** Nguồn dữ liệu */
174
+ export declare const LICH_VIET_SOURCE = "Tr\u00EDch xu\u1EA5t t\u1EEB app L\u1ECBch Vi\u1EC7t (com.somestudio.lichvietnam). D\u00F9ng cho m\u1EE5c \u0111\u00EDch c\u00E1 nh\u00E2n / tham kh\u1EA3o.";
175
+ export declare const QUALITY_LABEL: Record<ChatLuong, string>;
176
+ export declare const QUALITY_ORDER: Record<ChatLuong, number>;
177
+ export declare function decodeDay(iso: string, r: RawDay): LichVietDay;
178
+ /** Bỏ dấu tiếng Việt để so khớp tìm kiếm */
179
+ export declare function normalizeVi(s: string): string;
180
+ /** Danh sách việc có trong dữ liệu */
181
+ export declare function listActivities(): string[];
182
+ /** Danh sách nhóm việc */
183
+ export declare function listActivityGroups(): string[];
184
+ /** Tìm tên việc gần đúng (bỏ dấu, khớp một phần) */
185
+ export declare function findActivities(keyword: string): string[];
186
+ export type DayLookup = (iso: string) => LichVietDay | null;
187
+ export interface FindGoodDaysOptions {
188
+ /** Tên việc, ví dụ "Thành hôn", "Khai trương", "Động thổ" */
189
+ activity: string;
190
+ /** Từ ngày "YYYY-MM-DD" */
191
+ from?: string;
192
+ /** Đến ngày "YYYY-MM-DD" */
193
+ to?: string;
194
+ /** Chỉ lấy ngày có chất lượng tối thiểu */
195
+ minQuality?: ChatLuong;
196
+ /** Số kết quả tối đa (mặc định 30) */
197
+ limit?: number;
198
+ /** Bỏ qua ngày rất xấu */
199
+ excludeVeryBad?: boolean;
200
+ }
201
+ /**
202
+ * Tìm ngày phù hợp cho một việc, trên một danh sách ngày cho trước.
203
+ *
204
+ * Dùng thẳng dữ liệu gốc: việc đó có nằm trong nhóm "Nên làm" của ngày hay không,
205
+ * KHÔNG suy diễn thêm. Kết quả xếp theo điểm ngày giảm dần.
206
+ */
207
+ export declare function findGoodDaysIn(keys: string[], lookup: DayLookup, options: FindGoodDaysOptions): LichVietDay[];
208
+ /** Ngày đẹp nhất trong một khoảng */
209
+ export declare function topDaysIn(keys: string[], lookup: DayLookup, from?: string, to?: string, limit?: number): LichVietDay[];
210
+ /** Thống kê chất lượng ngày trong một khoảng */
211
+ export declare function qualityStatsIn(keys: string[], lookup: DayLookup, from?: string, to?: string): Record<ChatLuong, number> & {
212
+ total: number;
213
+ avgDiem: number;
214
+ };
215
+ export interface DayStore {
216
+ keys: string[];
217
+ lookup: DayLookup;
218
+ has: (iso: string) => boolean;
219
+ /** Danh sách ngày đã giải mã, sắp xếp tăng dần */
220
+ all: () => LichVietDay[];
221
+ }
222
+ /** Tạo bộ tra cứu + danh sách ngày từ một hoặc nhiều payload năm */
223
+ export declare function createStore(years: RawYear[]): DayStore;
224
+ /** Chuẩn hoá ngày thành "YYYY-MM-DD" */
225
+ export declare function toIso(year: number, month: number, day: number): string;
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ /**
3
+ * Giải mã bộ dữ liệu Lịch Việt (bản nén) + các hàm tra cứu dùng chung.
4
+ *
5
+ * File này KHÔNG nạp dữ liệu năm nào — nhờ vậy các entry point theo từng năm
6
+ * (`react-native-lich-am/dataset/2024`) chỉ kéo theo đúng dữ liệu của năm đó.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.toIso = exports.createStore = exports.qualityStatsIn = exports.topDaysIn = exports.findGoodDaysIn = exports.findActivities = exports.listActivityGroups = exports.listActivities = exports.normalizeVi = exports.decodeDay = exports.QUALITY_ORDER = exports.QUALITY_LABEL = exports.LICH_VIET_SOURCE = exports.LICH_VIET_META = exports.dict = void 0;
10
+ const constants_1 = require("../core/constants");
11
+ const astro_1 = require("../core/astro");
12
+ const canchi_1 = require("../core/canchi");
13
+ exports.dict = require('./data/dict.json');
14
+ const CAN_NAMES = ['Giáp', 'Ất', 'Bính', 'Đinh', 'Mậu', 'Kỷ', 'Canh', 'Tân', 'Nhâm', 'Quý'];
15
+ exports.LICH_VIET_META = {
16
+ start: exports.dict.meta.start,
17
+ end: exports.dict.meta.end,
18
+ count: exports.dict.meta.count,
19
+ scoreMin: exports.dict.meta.scoreMin,
20
+ scoreMax: exports.dict.meta.scoreMax,
21
+ };
22
+ /** Nguồn dữ liệu */
23
+ exports.LICH_VIET_SOURCE = 'Trích xuất từ app Lịch Việt (com.somestudio.lichvietnam). Dùng cho mục đích cá nhân / tham khảo.';
24
+ exports.QUALITY_LABEL = {
25
+ dep: 'Ngày đẹp',
26
+ tot: 'Ngày tốt',
27
+ bt: 'Bình thường',
28
+ xau: 'Ngày xấu',
29
+ ratxau: 'Ngày rất xấu',
30
+ };
31
+ exports.QUALITY_ORDER = {
32
+ ratxau: 0,
33
+ xau: 1,
34
+ bt: 2,
35
+ tot: 3,
36
+ dep: 4,
37
+ };
38
+ /* ------------------------------------------------------------------ */
39
+ /* Giải mã */
40
+ /* ------------------------------------------------------------------ */
41
+ function decodeHuong(list) {
42
+ return list.map(([s, soSao, h]) => ({ son: exports.dict.son[s], soSao, huong: exports.dict.huong[h] }));
43
+ }
44
+ const GIO_TABLE = require('./data/gio-table.json');
45
+ /** Tra sao theo id — `GIO_TABLE.sao` là mảng phẳng, id không trùng vị trí. */
46
+ const SAO_BY_ID = new Map(GIO_TABLE.sao.map((s) => [s.id, s]));
47
+ /**
48
+ * Chỉ số 0..59 trong vòng lục giáp của ngày dương `iso`.
49
+ * Khớp với `scripts/build-gio-table.mjs` nên bảng tra được đúng ô.
50
+ */
51
+ function canChi60(iso) {
52
+ const [y, m, d] = iso.split('-').map(Number);
53
+ const cc = (0, canchi_1.getCanChiDay)((0, astro_1.jdFromDate)(d, m, y));
54
+ for (let i = 0; i < 60; i += 1) {
55
+ if (i % 10 === cc.canIndex && i % 12 === cc.chiIndex)
56
+ return i;
57
+ }
58
+ return -1;
59
+ }
60
+ function decodeDay(iso, r) {
61
+ var _a, _b, _c, _d, _e, _f;
62
+ // r.l có dạng "dd-mm-yyyy" (ví dụ "20-11-2023" = 20 tháng Mười Một 2023)
63
+ const [ld, lm, ly] = r.l.split('-').map(Number);
64
+ // Dựng lại 12 khung giờ từ bảng chuẩn (xem scripts/build-gio-table.mjs).
65
+ // Nguồn bỏ trống giờ Tỵ ở 5 can-chi và tính sai vài ô, nên không dùng thẳng r.h.
66
+ const gio = [];
67
+ const rawHours = new Map(r.h.map(([g, diem, sao]) => [g, { diem, sao }]));
68
+ const ci = canChi60(iso);
69
+ const topIndex = new Set(r.g.map(([g]) => g));
70
+ for (let h = 0; h < 12; h += 1) {
71
+ const ids = GIO_TABLE.cells[`${ci}|${h}`] || [];
72
+ const sao = ids.map((id) => SAO_BY_ID.get(id));
73
+ const diem = sao.reduce((a, s) => a + (s ? s.w : 0), 0);
74
+ const src = rawHours.get(h);
75
+ let nguon = 'nguon';
76
+ if (!src)
77
+ nguon = 'suy-ra';
78
+ else {
79
+ const srcNames = src.sao.map((i) => exports.dict.gioSao[i]).slice().sort().join('|');
80
+ const nowNames = sao.map((s) => (s ? s.ten : '')).slice().sort().join('|');
81
+ if (srcNames !== nowNames || src.diem !== diem)
82
+ nguon = 'sua';
83
+ }
84
+ gio.push({
85
+ index: h,
86
+ chi: (_a = constants_1.CHI[h]) !== null && _a !== void 0 ? _a : String(h),
87
+ diem,
88
+ sao: sao.map((s) => (s ? s.ten : '')),
89
+ top: topIndex.has(h),
90
+ nguon,
91
+ });
92
+ }
93
+ return {
94
+ date: iso,
95
+ lunar: { day: ld, month: lm, year: ly },
96
+ lunarRaw: r.l,
97
+ truc: (_c = (_b = exports.dict.truc[r.t]) !== null && _b !== void 0 ? _b : constants_1.TRUC[r.t]) !== null && _c !== void 0 ? _c : '',
98
+ nguHanh: (_e = (_d = exports.dict.nguHanh[r.n]) !== null && _d !== void 0 ? _d : constants_1.NGU_HANH[r.n]) !== null && _e !== void 0 ? _e : '',
99
+ ngayRatXau: r.x === 1,
100
+ saoTot: r.a.map((i) => exports.dict.sao[i]),
101
+ saoXau: r.b.map((i) => exports.dict.sao[i]),
102
+ nenLam: r.y.map((i) => exports.dict.viec[i]),
103
+ khongNenLam: r.z.map((i) => exports.dict.viec[i]),
104
+ gio,
105
+ gioRaw: r.h.map(([g, diem, sao]) => {
106
+ var _a;
107
+ return ({
108
+ index: g,
109
+ chi: (_a = constants_1.CHI[g]) !== null && _a !== void 0 ? _a : String(g),
110
+ diem,
111
+ sao: sao.map((i) => exports.dict.gioSao[i]),
112
+ top: false,
113
+ nguon: 'nguon',
114
+ });
115
+ }),
116
+ gioTotNhat: r.g.map(([g, diem]) => {
117
+ var _a, _b, _c;
118
+ return ({
119
+ index: g,
120
+ chi: (_a = constants_1.CHI[g]) !== null && _a !== void 0 ? _a : String(g),
121
+ diem,
122
+ sao: ((_c = (_b = r.h.find((x) => x[0] === g)) === null || _b === void 0 ? void 0 : _b[2]) !== null && _c !== void 0 ? _c : []).map((i) => exports.dict.gioSao[i]),
123
+ top: true,
124
+ });
125
+ }),
126
+ bonGioDaiCat: r.d.map(([g, sao, goc]) => {
127
+ var _a, _b, _c;
128
+ return ({
129
+ index: g,
130
+ chi: (_a = constants_1.CHI[g]) !== null && _a !== void 0 ? _a : String(g),
131
+ sao: (_b = exports.dict.than[sao]) !== null && _b !== void 0 ? _b : '',
132
+ gioGoc: (_c = exports.dict.than[goc]) !== null && _c !== void 0 ? _c : '',
133
+ });
134
+ }),
135
+ gioQuyDangThienMon: r.q.map(([g, sao]) => {
136
+ var _a, _b;
137
+ return ({
138
+ index: g,
139
+ chi: (_a = constants_1.CHI[g]) !== null && _a !== void 0 ? _a : String(g),
140
+ sao: (_b = exports.dict.than[sao]) !== null && _b !== void 0 ? _b : '',
141
+ });
142
+ }),
143
+ huong: {
144
+ nam: decodeHuong(r.p.nam),
145
+ thang: decodeHuong(r.p.thang),
146
+ ngay: decodeHuong(r.p.ngay),
147
+ },
148
+ tuoiXung: r.u.map(([c, z]) => { var _a, _b; return `${(_a = CAN_NAMES[c]) !== null && _a !== void 0 ? _a : ''} ${(_b = constants_1.CHI[z]) !== null && _b !== void 0 ? _b : ''}`.trim(); }),
149
+ diemRaw: r.s,
150
+ diem: r.e,
151
+ chatLuong: ((_f = exports.dict.chatLuong[r.k]) !== null && _f !== void 0 ? _f : 'bt'),
152
+ };
153
+ }
154
+ exports.decodeDay = decodeDay;
155
+ /** Bỏ dấu tiếng Việt để so khớp tìm kiếm */
156
+ function normalizeVi(s) {
157
+ return s
158
+ .normalize('NFD')
159
+ .replace(/[\u0300-\u036f]/g, '')
160
+ .replace(/đ/g, 'd')
161
+ .replace(/Đ/g, 'D')
162
+ .toLowerCase()
163
+ .trim();
164
+ }
165
+ exports.normalizeVi = normalizeVi;
166
+ /* ------------------------------------------------------------------ */
167
+ /* Từ vựng */
168
+ /* ------------------------------------------------------------------ */
169
+ /** Danh sách việc có trong dữ liệu */
170
+ function listActivities() {
171
+ return [...exports.dict.viec].sort((a, b) => a.localeCompare(b, 'vi'));
172
+ }
173
+ exports.listActivities = listActivities;
174
+ /** Danh sách nhóm việc */
175
+ function listActivityGroups() {
176
+ return [...exports.dict.nhom];
177
+ }
178
+ exports.listActivityGroups = listActivityGroups;
179
+ /** Tìm tên việc gần đúng (bỏ dấu, khớp một phần) */
180
+ function findActivities(keyword) {
181
+ const k = normalizeVi(keyword);
182
+ return exports.dict.viec.filter((v) => normalizeVi(v).includes(k)).sort((a, b) => a.localeCompare(b, 'vi'));
183
+ }
184
+ exports.findActivities = findActivities;
185
+ /**
186
+ * Tìm ngày phù hợp cho một việc, trên một danh sách ngày cho trước.
187
+ *
188
+ * Dùng thẳng dữ liệu gốc: việc đó có nằm trong nhóm "Nên làm" của ngày hay không,
189
+ * KHÔNG suy diễn thêm. Kết quả xếp theo điểm ngày giảm dần.
190
+ */
191
+ function findGoodDaysIn(keys, lookup, options) {
192
+ const { activity, from, to, minQuality, limit = 30, excludeVeryBad = false } = options;
193
+ const target = normalizeVi(activity);
194
+ const minQ = minQuality ? exports.QUALITY_ORDER[minQuality] : -1;
195
+ const out = [];
196
+ for (const iso of keys) {
197
+ if (from && iso < from)
198
+ continue;
199
+ if (to && iso > to)
200
+ continue;
201
+ const day = lookup(iso);
202
+ if (!day)
203
+ continue;
204
+ if (excludeVeryBad && day.ngayRatXau)
205
+ continue;
206
+ if (minQ >= 0 && exports.QUALITY_ORDER[day.chatLuong] < minQ)
207
+ continue;
208
+ if (!day.nenLam.some((a) => normalizeVi(a) === target))
209
+ continue;
210
+ out.push(day);
211
+ }
212
+ out.sort((a, b) => b.diem - a.diem || a.date.localeCompare(b.date));
213
+ return out.slice(0, limit);
214
+ }
215
+ exports.findGoodDaysIn = findGoodDaysIn;
216
+ /** Ngày đẹp nhất trong một khoảng */
217
+ function topDaysIn(keys, lookup, from, to, limit = 10) {
218
+ const out = [];
219
+ for (const iso of keys) {
220
+ if (from && iso < from)
221
+ continue;
222
+ if (to && iso > to)
223
+ continue;
224
+ const day = lookup(iso);
225
+ if (day)
226
+ out.push(day);
227
+ }
228
+ out.sort((a, b) => b.diem - a.diem || a.date.localeCompare(b.date));
229
+ return out.slice(0, limit);
230
+ }
231
+ exports.topDaysIn = topDaysIn;
232
+ /** Thống kê chất lượng ngày trong một khoảng */
233
+ function qualityStatsIn(keys, lookup, from, to) {
234
+ const stats = { dep: 0, tot: 0, bt: 0, xau: 0, ratxau: 0, total: 0, avgDiem: 0 };
235
+ let sum = 0;
236
+ for (const iso of keys) {
237
+ if (from && iso < from)
238
+ continue;
239
+ if (to && iso > to)
240
+ continue;
241
+ const day = lookup(iso);
242
+ if (!day)
243
+ continue;
244
+ stats[day.chatLuong] += 1;
245
+ stats.total += 1;
246
+ sum += day.diem;
247
+ }
248
+ stats.avgDiem = stats.total ? Math.round((sum / stats.total) * 10) / 10 : 0;
249
+ return stats;
250
+ }
251
+ exports.qualityStatsIn = qualityStatsIn;
252
+ /** Tạo bộ tra cứu + danh sách ngày từ một hoặc nhiều payload năm */
253
+ function createStore(years) {
254
+ const map = new Map();
255
+ for (const y of years) {
256
+ for (const iso of Object.keys(y.days)) {
257
+ map.set(iso, y.days[iso]);
258
+ }
259
+ }
260
+ const keys = [...map.keys()].sort();
261
+ const cache = new Map();
262
+ const lookup = (iso) => {
263
+ const hit = cache.get(iso);
264
+ if (hit)
265
+ return hit;
266
+ const raw = map.get(iso);
267
+ if (!raw)
268
+ return null;
269
+ const decoded = decodeDay(iso, raw);
270
+ cache.set(iso, decoded);
271
+ return decoded;
272
+ };
273
+ return {
274
+ keys,
275
+ lookup,
276
+ has: (iso) => map.has(iso),
277
+ all: () => keys.map((k) => lookup(k)),
278
+ };
279
+ }
280
+ exports.createStore = createStore;
281
+ /** Chuẩn hoá ngày thành "YYYY-MM-DD" */
282
+ function toIso(year, month, day) {
283
+ return `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
284
+ }
285
+ exports.toIso = toIso;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * react-native-lich-am / dataset
3
+ *
4
+ * Bộ dữ liệu chi tiết theo ngày, trích xuất từ app Lịch Việt
5
+ * (com.somestudio.lichvietnam) — phủ 01/01/2024 → 01/01/2028 (1.462 ngày).
6
+ *
7
+ * Gồm những thứ KHÔNG thể suy ra bằng thuật toán:
8
+ * sao tốt / sao xấu, việc nên làm / không nên làm, điểm từng giờ,
9
+ * hướng tốt theo sơn, tuổi xung, 4 giờ đại cát, giờ quý đăng thiên môn.
10
+ *
11
+ * Muốn nhẹ bundle hơn thì import từng năm:
12
+ * import { getDayData } from 'react-native-lich-am/dataset/2024';
13
+ */
14
+ import { dict, type ChatLuong, type FindGoodDaysOptions, type LichVietDay } from './decode';
15
+ export * from './decode';
16
+ /** Các năm có dữ liệu */
17
+ export declare const AVAILABLE_YEARS: number[];
18
+ /** Có dữ liệu chi tiết cho ngày này hay không (chuỗi "YYYY-MM-DD") */
19
+ export declare function hasDayData(date: string): boolean;
20
+ /** Lấy thông tin chi tiết một ngày theo chuỗi "YYYY-MM-DD" */
21
+ export declare function getDayData(date: string): LichVietDay | null;
22
+ /** Lấy theo ngày/tháng/năm dương */
23
+ export declare function getDayDataBySolar(day: number, month: number, year: number): LichVietDay | null;
24
+ /** Toàn bộ ngày có dữ liệu, dạng "YYYY-MM-DD", đã sắp xếp */
25
+ export declare function listDayKeys(): string[];
26
+ /** Toàn bộ ngày đã giải mã */
27
+ export declare function listDays(): LichVietDay[];
28
+ /** Tìm ngày phù hợp cho một việc (xem `FindGoodDaysOptions`) */
29
+ export declare function findGoodDays(options: FindGoodDaysOptions): LichVietDay[];
30
+ /** Ngày đẹp nhất trong một khoảng */
31
+ export declare function topDays(from?: string, to?: string, limit?: number): LichVietDay[];
32
+ /** Thống kê chất lượng ngày trong một khoảng */
33
+ export declare function getQualityStats(from?: string, to?: string): Record<ChatLuong, number> & {
34
+ total: number;
35
+ avgDiem: number;
36
+ };
37
+ export { dict as RAW_DICT };