opening_hours 3.12.0 → 3.13.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.
@@ -115,12 +115,12 @@ const al = {
115
115
  };
116
116
 
117
117
  const ar = {
118
- PH: [{"name":"Año Nuevo","fixed_date":[1,1]},{"name":"Carnaval I","variable_date":"easter","offset":-48},{"name":"Carnaval II","variable_date":"easter","offset":-47},{"name":"Feriado con fines turísticos","fixed_date":[3,23]},{"name":"Día Nacional de la Memoria por la Verdad y la Justicia","fixed_date":[3,24]},{"name":"Viernes Santo","variable_date":"easter","offset":-2},{"name":"Día del Veterano y de los Caídos en la Guerra de Malvinas","fixed_date":[4,2]},{"name":"Día del Trabajador","fixed_date":[5,1]},{"name":"Día de la Revolución de Mayo","fixed_date":[5,25]},{"name":"Paso a la Inmortalidad del Gral. Don Martín Miguel de Güemes","fixed_date":[6,15]},{"name":"Paso a la Inmortalidad del General Manuel Belgrano","fixed_date":[6,20]},{"name":"Día de la Independencia","fixed_date":[7,9]},{"name":"Feriado con fines turísticos","fixed_date":[7,10]},{"name":"Paso a la Inmortalidad del Gral. José de San Martín","fixed_date":[8,17]},{"name":"Día del Respeto a la Diversidad Cultural","fixed_date":[10,12]},{"name":"Día de la Soberanía Nacional","fixed_date":[11,23]},{"name":"Feriado con fines turísticos","fixed_date":[12,7]},{"name":"Inmaculada Concepción de María","fixed_date":[12,8]},{"name":"Navidad","fixed_date":[12,25]}],
118
+ PH: [{"name":"Año Nuevo","fixed_date":[1,1]},{"name":"Carnaval","variable_date":"easter","offset":-48},{"name":"Carnaval","variable_date":"easter","offset":-47},{"name":"Día Nacional de la Memoria por la Verdad y la Justicia","fixed_date":[3,24]},{"name":"Viernes Santo","variable_date":"easter","offset":-2},{"name":"Día del Veterano y de los Caídos en la Guerra de Malvinas","fixed_date":[4,2]},{"name":"Día del Trabajador","fixed_date":[5,1]},{"name":"Día de la Revolución de Mayo","fixed_date":[5,25]},{"name":"Paso a la Inmortalidad del General Don Martín Miguel de Güemes","fixed_date":[6,17],"shift_rule":"if tuesday,wednesday then previous monday if thursday,friday then next monday"},{"name":"Paso a la Inmortalidad del General D. Manuel Belgrano","fixed_date":[6,20]},{"name":"Día de la Independencia","fixed_date":[7,9]},{"name":"Día no laborable con fines turísticos","fixed_date":[7,10]},{"name":"Paso a la Inmortalidad del General José de San Martín","fixed_date":[8,17],"shift_rule":"if tuesday,wednesday then previous monday if thursday,friday then next monday"},{"name":"Día del Respeto a la Diversidad Cultural","fixed_date":[10,12]},{"name":"Día de la Soberanía Nacional","fixed_date":[11,20],"shift_rule":"if tuesday,wednesday then previous monday if thursday,friday then next monday"},{"name":"Día no laborable con fines turísticos","fixed_date":[12,7]},{"name":"Inmaculada Concepción de María","fixed_date":[12,8]},{"name":"Navidad","fixed_date":[12,25]}],
119
119
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-34.60377&lon=-58.38159&zoom=16&addressdetails=1&accept-language=es"
120
120
  };
121
121
 
122
122
  const at = {
123
- PH: [{"name":"Neujahrstag","fixed_date":[1,1]},{"name":"Heilige Drei Könige","fixed_date":[1,6]},{"name":"Ostermontag","variable_date":"easter","offset":1},{"name":"Staatsfeiertag","fixed_date":[5,1]},{"name":"Christi Himmelfahrt","variable_date":"easter","offset":39},{"name":"Pfingstmontag","variable_date":"easter","offset":50},{"name":"Fronleichnam","variable_date":"easter","offset":60},{"name":"Mariä Himmelfahrt","fixed_date":[8,15]},{"name":"Nationalfeiertag","fixed_date":[10,26]},{"name":"Allerheiligen","fixed_date":[11,1]},{"name":"Mariä Empfängnis","fixed_date":[12,8]},{"name":"Christtag","fixed_date":[12,25]},{"name":"Stefanitag","fixed_date":[12,26]}],
123
+ PH: [{"name":"Neujahr","fixed_date":[1,1]},{"name":"Heilige Drei Könige","fixed_date":[1,6]},{"name":"Ostermontag","variable_date":"easter","offset":1},{"name":"Staatsfeiertag","fixed_date":[5,1]},{"name":"Christi Himmelfahrt","variable_date":"easter","offset":39},{"name":"Pfingstmontag","variable_date":"easter","offset":50},{"name":"Fronleichnam","variable_date":"easter","offset":60},{"name":"Mariä Himmelfahrt","fixed_date":[8,15]},{"name":"Nationalfeiertag","fixed_date":[10,26]},{"name":"Allerheiligen","fixed_date":[11,1]},{"name":"Mariä Empfängnis","fixed_date":[12,8]},{"name":"Christtag","fixed_date":[12,25]},{"name":"Stefanitag","fixed_date":[12,26]}],
124
124
  SH: [
125
125
  {
126
126
  name: "Osterferien",
@@ -553,52 +553,52 @@ const at = {
553
553
  };
554
554
 
555
555
  const au = {
556
- PH: [{"name":"New Years Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"ANZAC Day","fixed_date":[4,25]},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}],
556
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}],
557
557
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-35.2809&lon=149.1300&zoom=16&addressdetails=1&accept-language=en",
558
558
  "Australian Capital Territory": {
559
559
  "_state_code": "act",
560
560
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-35.2809&lon=149.1300&zoom=16&addressdetails=1&accept-language=en",
561
- PH: [{"name":"New Years Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Canberra Day","variable_date":"firstMarchMonday","offset":7},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Sunday","variable_date":"easter"},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"ANZAC Day","fixed_date":[4,25]},{"name":"Reconciliation Day","variable_date":"lastMayMonday"},{"name":"Queens Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"Family and Community Day","variable_date":"lastSeptemberMonday"},{"name":"Labour Day","variable_date":"firstOctoberMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
561
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Canberra Day","variable_date":"firstMarchMonday","offset":7},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Sunday","variable_date":"easter"},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"Reconciliation Day","variable_date":"lastMayMonday"},{"name":"King's Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"Labour Day","variable_date":"firstOctoberMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
562
562
  },
563
563
  "New South Wales": {
564
564
  "_state_code": "nsw",
565
565
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-33.8688&lon=151.2093&zoom=16&addressdetails=1&accept-language=en",
566
- PH: [{"name":"New Years Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Sunday","variable_date":"easter"},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"ANZAC Day","fixed_date":[4,25]},{"name":"Queens Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"Labour Day","variable_date":"firstOctoberMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
566
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Sunday","variable_date":"easter"},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"King's Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"Labour Day","variable_date":"firstOctoberMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
567
567
  },
568
568
  "Northern Territory": {
569
569
  "_state_code": "nt",
570
570
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-12.4634&lon=130.8456&zoom=16&addressdetails=1&accept-language=en",
571
- PH: [{"name":"New Years Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"ANZAC Day","fixed_date":[4,25]},{"name":"May Day","variable_date":"firstMayMonday"},{"name":"Queens Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"Picnic Day","variable_date":"firstAugustMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
571
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Sunday","variable_date":"easter"},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"May Day","variable_date":"firstMayMonday"},{"name":"King's Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"Picnic Day","variable_date":"firstAugustMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
572
572
  },
573
573
  "Queensland": {
574
574
  "_state_code": "qld",
575
575
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-27.4698&lon=153.0251&zoom=16&addressdetails=1&accept-language=en",
576
- PH: [{"name":"New Years Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"ANZAC Day","fixed_date":[4,25]},{"name":"Labour Day","variable_date":"firstMayMonday"},{"name":"Queens Birthday","variable_date":"firstOctoberMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
576
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Sunday","variable_date":"easter"},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"Labour Day","variable_date":"firstMayMonday"},{"name":"King's Birthday","variable_date":"firstOctoberMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
577
577
  },
578
578
  "South Australia": {
579
579
  "_state_code": "sa",
580
580
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-34.9285&lon=138.6007&zoom=16&addressdetails=1&accept-language=en",
581
- PH: [{"name":"New Years Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Adelaide Cup","variable_date":"firstMarchMonday","offset":7},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"ANZAC Day","fixed_date":[4,25]},{"name":"Queens Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"Labour Day","variable_date":"firstOctoberMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
581
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Adelaide Cup Day","variable_date":"firstMarchMonday","offset":7},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Sunday","variable_date":"easter"},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"King's Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"Labour Day","variable_date":"firstOctoberMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]},{"name":"Proclamation Day","fixed_date":[12,26]}]
582
582
  },
583
583
  "Tasmania": {
584
584
  "_state_code": "tas",
585
585
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-42.8821&lon=147.3272&zoom=16&addressdetails=1&accept-language=en",
586
- PH: [{"name":"New Years Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Eight Hours Day","variable_date":"firstMarchMonday","offset":7},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"ANZAC Day","fixed_date":[4,25]},{"name":"Queens Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
586
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Eight Hours Day","variable_date":"firstMarchMonday","offset":7},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"King's Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
587
587
  },
588
588
  "Victoria": {
589
589
  "_state_code": "vic",
590
590
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-37.8136&lon=144.9631&zoom=16&addressdetails=1&accept-language=en",
591
- PH: [{"name":"New Years Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Labour Day","variable_date":"firstMarchMonday","offset":7},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Sunday","variable_date":"easter"},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"ANZAC Day","fixed_date":[4,25]},{"name":"Queens Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"AFL Grand Final","variable_date":"lastSeptemberFriday"},{"name":"Melbourne Cup","variable_date":"firstNovemberTuesday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
591
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Labour Day","variable_date":"firstMarchMonday","offset":7},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Saturday","variable_date":"easter","offset":-1},{"name":"Easter Sunday","variable_date":"easter"},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"King's Birthday","variable_date":"firstJuneMonday","offset":7},{"name":"AFL Grand Final Friday","variable_date":"lastSeptemberFriday"},{"name":"Melbourne Cup","variable_date":"firstNovemberTuesday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
592
592
  },
593
593
  "Western Australia": {
594
594
  "_state_code": "wa",
595
595
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-31.9505&lon=115.8605&zoom=16&addressdetails=1&accept-language=en",
596
- PH: [{"name":"New Years Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Labour Day","variable_date":"firstMarchMonday"},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"ANZAC Day","fixed_date":[4,25]},{"name":"Western Australia Day","variable_date":"firstJuneMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
596
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Australia Day","fixed_date":[1,26]},{"name":"Labour Day","variable_date":"firstMarchMonday"},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Sunday","variable_date":"easter"},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"Western Australia Day","variable_date":"firstJuneMonday"},{"name":"King's Birthday","variable_date":"lastSeptemberMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
597
597
  }
598
598
  };
599
599
 
600
600
  const be = {
601
- PH: [{"name":"Nieuwjaar - Jour de l'an","fixed_date":[1,1]},{"name":"Paasmaandag - Lundi de Pâques","variable_date":"easter","offset":1},{"name":"Dag van de Arbeid - Fête du Travail","fixed_date":[5,1]},{"name":"Onze-Lieve-Heer-Hemelvaart - Jeudi de l'Ascensionn","variable_date":"easter","offset":39},{"name":"Pinkstermaandag - Lundi de Pentecôte","variable_date":"easter","offset":50},{"name":"Nationale feestdag van België - Fête nationale","fixed_date":[7,21]},{"name":"Onze-Lieve-Vrouw-Hemelvaart - Assomption","fixed_date":[8,15]},{"name":"Allerheiligen - Toussaint","fixed_date":[11,1]},{"name":"Wapenstilstand - Armistice","fixed_date":[11,11]},{"name":"Kerstmis - Noël","fixed_date":[12,25]}],
601
+ PH: [{"name":"Nieuwjaar - Nouvel An","fixed_date":[1,1]},{"name":"Paasmaandag - Lundi de Pâques","variable_date":"easter","offset":1},{"name":"Dag van de Arbeid - Fête du travail","fixed_date":[5,1]},{"name":"Hemelvaartsdag - Ascension","variable_date":"easter","offset":39},{"name":"Pinkstermaandag - Lundi de Pentecôte","variable_date":"easter","offset":50},{"name":"Nationale feestdag - Fête nationale","fixed_date":[7,21]},{"name":"Tenhemelopneming - Assomption","fixed_date":[8,15]},{"name":"Allerheiligen - Toussaint","fixed_date":[11,1]},{"name":"Wapenstilstand - Armistice","fixed_date":[11,11]},{"name":"Kerstmis - Noël","fixed_date":[12,25]}],
602
602
  "_nominatim_url": "https://nominatim.openstreetmap.org/search?format=json&country=Belgium&zoom=18&addressdetails=1&limit=1&accept-language=nl,fr,de,en",
603
603
  "DE": {
604
604
  SH: [
@@ -803,6 +803,7 @@ const be = {
803
803
  };
804
804
 
805
805
  const bg = {
806
+ PH: [{"name":"Нова Година","fixed_date":[1,1]},{"name":"Ден на Освобождението на България от Османската Империя","fixed_date":[3,3]},{"name":"Разпети петък","variable_date":"orthodox easter","offset":-2},{"name":"Великден","variable_date":"orthodox easter"},{"name":"Велики понеделник","variable_date":"orthodox easter","offset":1},{"name":"Ден на труда","fixed_date":[5,1]},{"name":"Гергьовден","fixed_date":[5,6]},{"name":"Ден на азбуката, културата и просветата","fixed_date":[5,24]},{"name":"Ден на съединението","fixed_date":[9,6]},{"name":"Ден на независимостта","fixed_date":[9,22]},{"name":"Бъдни вечер","fixed_date":[12,24]},{"name":"Коледа","fixed_date":[12,25]}],
806
807
  SH: [
807
808
  {
808
809
  name: "Коледна ваканция",
@@ -858,7 +859,8 @@ const bg = {
858
859
  2022: [2,2,2,4],
859
860
  2026: [3,2,3,2],
860
861
  },
861
- ]
862
+ ],
863
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=42.6977&lon=23.3219&zoom=18&addressdetails=1&accept-language=bg,en"
862
864
  };
863
865
 
864
866
  const br = {
@@ -949,6 +951,7 @@ const br = {
949
951
  };
950
952
 
951
953
  const by = {
954
+ PH: [{"name":"Новы год","fixed_date":[1,1]},{"name":"Мiжнародны жаночы дзень","fixed_date":[3,8]},{"name":"Дзень працы","fixed_date":[5,1]},{"name":"Дзень Перамогi","fixed_date":[5,9]},{"name":"Дзень Незалежнасцi","fixed_date":[7,3]},{"name":"Дзень Кастрычніцкай рэвалюцыі","fixed_date":[11,7]},{"name":"Каляды каталiцкiя","fixed_date":[12,25]}],
952
955
  SH: [
953
956
  {
954
957
  name: "Зімовыя вакацыі",
@@ -989,11 +992,13 @@ const by = {
989
992
  2024: [10,27,11,5],
990
993
  2025: [11,2,11,9],
991
994
  },
992
- ]
995
+ ],
996
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=53.9045&lon=27.5615&zoom=18&addressdetails=1&accept-language=be,en"
993
997
  };
994
998
 
995
999
  const ca = {
996
1000
  PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Canada Day","variable_date":"canadaDay"},{"name":"Labour Day","variable_date":"firstSeptemberMonday"},{"name":"Christmas Day","fixed_date":[12,25]}],
1001
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=45.4215&lon=-75.6972&zoom=18&addressdetails=1&accept-language=en,fr",
997
1002
  "Alberta": {
998
1003
  PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Alberta Family Day","variable_date":"firstFebruaryMonday","offset":14},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Victoria Day","variable_date":"victoriaDay"},{"name":"Canada Day","variable_date":"canadaDay"},{"name":"Heritage Day","variable_date":"firstAugustMonday"},{"name":"Labour Day","variable_date":"firstSeptemberMonday"},{"name":"Thanksgiving","variable_date":"firstOctoberMonday","offset":7},{"name":"Remembrance Day","fixed_date":[11,11]},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
999
1004
  },
@@ -3427,7 +3432,7 @@ const cn = {
3427
3432
  };
3428
3433
 
3429
3434
  const cz = {
3430
- PH: [{"name":"Den obnovy samostatného českého státu","fixed_date":[1,1]},{"name":"Velký pátek","variable_date":"easter","offset":-2},{"name":"Velikonoční pondělí","variable_date":"easter","offset":1},{"name":"Svátek práce","fixed_date":[5,1]},{"name":"Den vítězství","fixed_date":[5,8]},{"name":"Den slovanských věrozvěstů Cyrila a Metoděje","fixed_date":[7,5]},{"name":"Den upálení mistra Jana Husa","fixed_date":[7,6]},{"name":"Den české státnosti","fixed_date":[9,28]},{"name":"Den vzniku samostatného československého státu","fixed_date":[10,28]},{"name":"Den boje za svobodu a demokracii","fixed_date":[11,17]},{"name":"Štědrý den","fixed_date":[12,24]},{"name":"1. svátek vánoční","fixed_date":[12,25]},{"name":"2. svátek vánoční","fixed_date":[12,26]}],
3435
+ PH: [{"name":"Den obnovy samostatného českého státu; Nový rok","fixed_date":[1,1]},{"name":"Velký pátek","variable_date":"easter","offset":-2},{"name":"Velikonoční pondělí","variable_date":"easter","offset":1},{"name":"Svátek práce","fixed_date":[5,1]},{"name":"Den vítězství","fixed_date":[5,8]},{"name":"Den slovanských věrozvěstů Cyrila a Metoděje","fixed_date":[7,5]},{"name":"Den upálení mistra Jana Husa","fixed_date":[7,6]},{"name":"Den české státnosti","fixed_date":[9,28]},{"name":"Den vzniku samostatného československého státu","fixed_date":[10,28]},{"name":"Den boje za svobodu a demokracii","fixed_date":[11,17]},{"name":"Štědrý den","fixed_date":[12,24]},{"name":"1. svátek vánoční","fixed_date":[12,25]},{"name":"2. svátek vánoční","fixed_date":[12,26]}],
3431
3436
  SH: [
3432
3437
  {
3433
3438
  name: "Vánoční prázdniny",
@@ -4725,7 +4730,7 @@ const cz = {
4725
4730
  };
4726
4731
 
4727
4732
  const de = {
4728
- PH: [{"name":"Neujahrstag","fixed_date":[1,1]},{"name":"Heilige Drei Könige","fixed_date":[1,6],"only_states":["Baden-Württemberg","Bayern","Sachsen-Anhalt"]},{"name":"Frauentag","fixed_date":[3,8],"only_states":["Berlin","Mecklenburg-Vorpommern"]},{"name":"Tag der Arbeit","fixed_date":[5,1]},{"name":"Karfreitag","variable_date":"easter","offset":-2},{"name":"Ostersonntag","variable_date":"easter","only_states":["Brandenburg"]},{"name":"Ostermontag","variable_date":"easter","offset":1},{"name":"Christi Himmelfahrt","variable_date":"easter","offset":39},{"name":"Pfingstsonntag","variable_date":"easter","offset":49,"only_states":["Brandenburg"]},{"name":"Pfingstmontag","variable_date":"easter","offset":50},{"name":"Fronleichnam","variable_date":"easter","offset":60,"only_states":["Baden-Württemberg","Bayern","Hessen","Nordrhein-Westfalen","Rheinland-Pfalz","Saarland"]},{"name":"Mariä Himmelfahrt","fixed_date":[8,15],"only_states":["Saarland"]},{"name":"Weltkindertag","fixed_date":[9,20],"only_states":["Thüringen"]},{"name":"Tag der Deutschen Einheit","fixed_date":[10,3]},{"name":"Reformationstag","fixed_date":[10,31],"only_states":["Brandenburg","Bremen","Hamburg","Mecklenburg-Vorpommern","Niedersachsen","Sachsen","Sachsen-Anhalt","Schleswig-Holstein","Thüringen"]},{"name":"Allerheiligen","fixed_date":[11,1],"only_states":["Baden-Württemberg","Bayern","Nordrhein-Westfalen","Rheinland-Pfalz","Saarland"]},{"name":"Buß- und Bettag","variable_date":"nextWednesday16Nov","only_states":["Sachsen"]},{"name":"1. Weihnachtstag","fixed_date":[12,25]},{"name":"2. Weihnachtstag","fixed_date":[12,26]}],
4733
+ PH: [{"name":"Neujahr","fixed_date":[1,1]},{"name":"Heilige Drei Könige","fixed_date":[1,6],"only_states":["Baden-Württemberg","Bayern","Sachsen-Anhalt"]},{"name":"Frauentag","fixed_date":[3,8],"only_states":["Berlin","Mecklenburg-Vorpommern"]},{"name":"Tag der Arbeit","fixed_date":[5,1]},{"name":"Karfreitag","variable_date":"easter","offset":-2},{"name":"Ostersonntag","variable_date":"easter","only_states":["Brandenburg"]},{"name":"Ostermontag","variable_date":"easter","offset":1},{"name":"Christi Himmelfahrt","variable_date":"easter","offset":39},{"name":"Pfingstsonntag","variable_date":"easter","offset":49,"only_states":["Brandenburg"]},{"name":"Pfingstmontag","variable_date":"easter","offset":50},{"name":"Fronleichnam","variable_date":"easter","offset":60,"only_states":["Baden-Württemberg","Bayern","Hessen","Nordrhein-Westfalen","Rheinland-Pfalz","Saarland"]},{"name":"Mariä Himmelfahrt","fixed_date":[8,15],"only_states":["Saarland"]},{"name":"Weltkindertag","fixed_date":[9,20],"only_states":["Thüringen"]},{"name":"Tag der Deutschen Einheit","fixed_date":[10,3]},{"name":"Reformationstag","fixed_date":[10,31],"only_states":["Brandenburg","Bremen","Hamburg","Mecklenburg-Vorpommern","Niedersachsen","Sachsen","Sachsen-Anhalt","Schleswig-Holstein","Thüringen"]},{"name":"Allerheiligen","fixed_date":[11,1],"only_states":["Baden-Württemberg","Bayern","Nordrhein-Westfalen","Rheinland-Pfalz","Saarland"]},{"name":"Buß- und Bettag","variable_date":"nextWednesday16Nov","only_states":["Sachsen"]},{"name":"1. Weihnachtstag","fixed_date":[12,25]},{"name":"2. Weihnachtstag","fixed_date":[12,26]}],
4729
4734
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=49.5487&lon=9.8160&zoom=18&addressdetails=1&accept-language=de,en",
4730
4735
  "Baden-Württemberg": {
4731
4736
  SH: [
@@ -7002,11 +7007,12 @@ const de = {
7002
7007
  };
7003
7008
 
7004
7009
  const dk = {
7005
- PH: [{"name":"Nytårsdag","fixed_date":[1,1]},{"name":"Skærtorsdag","variable_date":"easter","offset":-3},{"name":"Langfredag","variable_date":"easter","offset":-2},{"name":"Påskedag","variable_date":"easter"},{"name":"2. Påskedag","variable_date":"easter","offset":1},{"name":"Store Bededag","variable_date":"easter","offset":26},{"name":"Kristi Himmelfartsdag","variable_date":"easter","offset":39},{"name":"Pinsedag","variable_date":"easter","offset":49},{"name":"2. Pinsedag","variable_date":"easter","offset":50},{"name":"Grundlovsdag","fixed_date":[6,5]},{"name":"Juleaftensdag","fixed_date":[12,24]},{"name":"Juledag","fixed_date":[12,25]},{"name":"2. Juledag","fixed_date":[12,26]}],
7010
+ PH: [{"name":"Nytårsdag","fixed_date":[1,1]},{"name":"Skærtorsdag","variable_date":"easter","offset":-3},{"name":"Langfredag","variable_date":"easter","offset":-2},{"name":"Påskedag","variable_date":"easter"},{"name":"Anden påskedag","variable_date":"easter","offset":1},{"name":"Kristi Himmelfartsdag","variable_date":"easter","offset":39},{"name":"Pinsedag","variable_date":"easter","offset":49},{"name":"Anden Pinsedag","variable_date":"easter","offset":50},{"name":"Grundlovsdag","fixed_date":[6,5]},{"name":"Juleaftensdag","fixed_date":[12,24]},{"name":"Juledag","fixed_date":[12,25]},{"name":"Anden Juledag","fixed_date":[12,26]}],
7006
7011
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=55.670249&lon=10.3333283&zoom=18&addressdetails=1&accept-language=da,en"
7007
7012
  };
7008
7013
 
7009
7014
  const ee = {
7015
+ PH: [{"name":"uusaasta","fixed_date":[1,1]},{"name":"iseseisvuspäev","fixed_date":[2,24]},{"name":"suur reede","variable_date":"easter","offset":-2},{"name":"lihavõtted","variable_date":"easter"},{"name":"kevadpüha","fixed_date":[5,1]},{"name":"nelipühade 1. püha","variable_date":"easter","offset":49},{"name":"võidupüha","fixed_date":[6,23]},{"name":"jaanipäev","fixed_date":[6,24]},{"name":"taasiseseisvumispäev","fixed_date":[8,20]},{"name":"jõululaupäev","fixed_date":[12,24]},{"name":"esimene jõulupüha","fixed_date":[12,25]},{"name":"teine jõulupüha","fixed_date":[12,26]}],
7010
7016
  SH: [
7011
7017
  {
7012
7018
  name: "jõulupühad",
@@ -7062,7 +7068,8 @@ const ee = {
7062
7068
  2025: [10,20,10,26],
7063
7069
  2026: [10,26,11,1],
7064
7070
  },
7065
- ]
7071
+ ],
7072
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=59.4370&lon=24.7536&zoom=18&addressdetails=1&accept-language=et,en"
7066
7073
  };
7067
7074
 
7068
7075
  const es = {
@@ -10177,13 +10184,18 @@ const gb = {
10177
10184
  }
10178
10185
  };
10179
10186
 
10187
+ const ge = {
10188
+ PH: [{"name":"ახალი წელი","fixed_date":[1,1]},{"name":"ბედობა","fixed_date":[1,2]},{"name":"შობა","fixed_date":[1,7]},{"name":"ნათლისღება","fixed_date":[1,19]},{"name":"დედის დღე","fixed_date":[3,3]},{"name":"ქალთა საერთაშორისო დღე","fixed_date":[3,8]},{"name":"ეროვნული ერთიანობის დღე","fixed_date":[4,9]},{"name":"წითელი პარასკევი","variable_date":"orthodox easter","offset":-2},{"name":"დიდი შაბათი","variable_date":"orthodox easter","offset":-1},{"name":"აღდგომა","variable_date":"orthodox easter"},{"name":"აღდგომის ორშაბათი","variable_date":"orthodox easter","offset":1},{"name":"ფაშიზმზე გამარჯვების დღე","fixed_date":[5,9]},{"name":"წმინდა ანდრია პირველწოდებულის ხსენების დღე","fixed_date":[5,12]},{"name":"დამოუკიდებლობის დღე","fixed_date":[5,26]},{"name":"მარიამობა","fixed_date":[8,28]},{"name":"სვეტიცხოვლობა","fixed_date":[10,14]},{"name":"გიორგობა","fixed_date":[11,23]}],
10189
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=41.7151&lon=44.8271&zoom=18&addressdetails=1&accept-language=ka,en"
10190
+ };
10191
+
10180
10192
  const gr = {
10181
- PH: [{"name":"Πρωτοχρονιά","fixed_date":[1,1]},{"name":"Θεοφάνια","fixed_date":[1,6]},{"name":"Καθαρά Δευτέρα","variable_date":"orthodox easter","offset":-48},{"name":"25η Μαρτίου","fixed_date":[3,25]},{"name":"Μεγάλη Παρασκευή","variable_date":"orthodox easter","offset":-2},{"name":"Πάσχα","variable_date":"orthodox easter","offset":0},{"name":"Δευτέρα του Πάσχα","variable_date":"orthodox easter","offset":1},{"name":"Πρωτομαγιά","fixed_date":[5,1]},{"name":"Κοίμηση της Θεοτόκου","fixed_date":[8,15]},{"name":"28η Οκτωβρίου","fixed_date":[10,28]},{"name":"Χριστούγεννα","fixed_date":[12,25]},{"name":"2η μέρα Χριστουγέννων","fixed_date":[12,26]}],
10193
+ PH: [{"name":"Πρωτοχρονιά","fixed_date":[1,1]},{"name":"Θεοφάνια","fixed_date":[1,6]},{"name":"Καθαρά Δευτέρα","variable_date":"orthodox easter","offset":-48},{"name":"25η Μαρτίου","fixed_date":[3,25]},{"name":"Μεγάλη Παρασκευή","variable_date":"orthodox easter","offset":-2},{"name":"Πάσχα","variable_date":"orthodox easter"},{"name":"Δευτέρα του Πάσχα","variable_date":"orthodox easter","offset":1},{"name":"Εργατική Πρωτομαγιά","fixed_date":[5,1]},{"name":"Κοίμηση της Θεοτόκου","fixed_date":[8,15]},{"name":"Επέτειος του Όχι","fixed_date":[10,28]},{"name":"Χριστούγεννα","fixed_date":[12,25]},{"name":"2η μέρα Χριστουγέννων","fixed_date":[12,26]}],
10182
10194
  "_nominatim_url": "https://nominatim.openstreetmap.org/search?format=json&country=Greece&&zoom=18&addressdetails=1&limit=1&accept-language=el,en"
10183
10195
  };
10184
10196
 
10185
10197
  const hr = {
10186
- PH: [{"name":"Nova godina","fixed_date":[1,1]},{"name":"Sveta tri kralja","fixed_date":[1,6]},{"name":"Uskršnji ponedjeljak","variable_date":"easter","offset":1},{"name":"Praznik rada","fixed_date":[5,1]},{"name":"Tijelovo","variable_date":"easter","offset":60},{"name":"Dan antifašističke borbe","fixed_date":[6,22]},{"name":"Dan pobjede i domovinske zahvalnosti","fixed_date":[8,5]},{"name":"Velika Gospa","fixed_date":[8,15]},{"name":"Svi sveti","fixed_date":[11,1]},{"name":"Dan sjećanja na žrtve Domovinskog rata","fixed_date":[11,18]},{"name":"Božić","fixed_date":[12,25]},{"name":"Sveti Stjepan","fixed_date":[12,26]}],
10198
+ PH: [{"name":"Nova godina","fixed_date":[1,1]},{"name":"Sveta tri kralja","fixed_date":[1,6]},{"name":"Uskrs","variable_date":"easter"},{"name":"Uskršnji ponedjeljak","variable_date":"easter","offset":1},{"name":"Praznik rada","fixed_date":[5,1]},{"name":"Dan državnosti","fixed_date":[5,30]},{"name":"Tijelovo","variable_date":"easter","offset":60},{"name":"Dan antifašističke borbe","fixed_date":[6,22]},{"name":"Dan pobjede i domovinske zahvalnosti","fixed_date":[8,5]},{"name":"Velika Gospa","fixed_date":[8,15]},{"name":"Svi sveti","fixed_date":[11,1]},{"name":"Dan sjećanja na žrtve Domovinskog rata","fixed_date":[11,18]},{"name":"Božić","fixed_date":[12,25]},{"name":"Sveti Stjepan","fixed_date":[12,26]}],
10187
10199
  SH: [
10188
10200
  {
10189
10201
  name: "Zimski odmor",
@@ -10308,7 +10320,7 @@ const hu = {
10308
10320
  };
10309
10321
 
10310
10322
  const ie = {
10311
- PH: [{"name":"New Year’s Day","fixed_date":[1,1]},{"name":"St Patrick’s Day","fixed_date":[3,17]},{"name":"St Patrick’s Day","variable_date":"nextMo-Fr17March"},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"May Bank Holiday","variable_date":"firstMayMonday"},{"name":"June Bank Holiday","variable_date":"firstJuneMonday"},{"name":"August Bank Holiday","variable_date":"firstAugustMonday"},{"name":"October Bank Holiday (Halloween)","variable_date":"lastOctoberMonday"},{"name":"Christmas","fixed_date":[12,25]},{"name":"St Stephen’s Day","fixed_date":[12,26]},{"name":"Bank Holiday","fixed_date":[12,27]}],
10323
+ PH: [{"name":"New Year’s Day","fixed_date":[1,1]},{"name":"St. Patrick’s Day","fixed_date":[3,17]},{"name":"St. Patrick’s Day","variable_date":"nextMo-Fr17March"},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"May Bank Holiday","variable_date":"firstMayMonday"},{"name":"June Bank Holiday","variable_date":"firstJuneMonday"},{"name":"August Bank Holiday","variable_date":"firstAugustMonday"},{"name":"October Bank Holiday","variable_date":"lastOctoberMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"St. Stephen’s Day","fixed_date":[12,26]},{"name":"Bank Holiday","fixed_date":[12,27]}],
10312
10324
  SH: [
10313
10325
  {
10314
10326
  name: "Christmas",
@@ -11366,8 +11378,15 @@ const it = {
11366
11378
  }
11367
11379
  };
11368
11380
 
11381
+ const je = {
11382
+ "Jersey": {
11383
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=49.2&lon=-2.1&zoom=11&addressdetails=1&accept-language=en",
11384
+ PH: [{"name":"New Year’s Day","fixed_date":[1,1]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Early May bank holiday","variable_date":"firstMayMonday"},{"name":"Liberation Day","fixed_date":[5,9]},{"name":"Spring bank holiday","variable_date":"lastMayMonday"},{"name":"Summer bank holiday","variable_date":"lastAugustMonday"},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}]
11385
+ }
11386
+ };
11387
+
11369
11388
  const jp = {
11370
- PH: [{"name":"元日","fixed_date":[1,1]},{"name":"成人の日","variable_date":"firstJanuaryMonday","offset":7},{"name":"建国記念の日","fixed_date":[2,11]},{"name":"天皇誕生日","fixed_date":[2,23]},{"name":"昭和の日","fixed_date":[4,29]},{"name":"憲法記念日","fixed_date":[5,3]},{"name":"みどりの日","fixed_date":[5,4]},{"name":"こどもの日","fixed_date":[5,5]},{"name":"海の日","variable_date":"firstJulyMonday","offset":14},{"name":"山の日","fixed_date":[8,11]},{"name":"敬老の日","variable_date":"firstSeptemberMonday","offset":14},{"name":"スポーツの日","variable_date":"firstNovemberMonday","offset":7},{"name":"文化の日","fixed_date":[11,3]},{"name":"勤労感謝の日","fixed_date":[11,23]},{"name":"春分の日","variable_date":"springEquinox"},{"name":"秋分の日","variable_date":"autumnalEquinox"}],
11389
+ PH: [{"name":"元日","fixed_date":[1,1]},{"name":"成人の日","variable_date":"firstJanuaryMonday","offset":7},{"name":"建国記念の日","fixed_date":[2,11]},{"name":"天皇誕生日","fixed_date":[2,23]},{"name":"昭和の日","fixed_date":[4,29]},{"name":"憲法記念日","fixed_date":[5,3]},{"name":"みどりの日","fixed_date":[5,4]},{"name":"こどもの日","fixed_date":[5,5]},{"name":"海の日","variable_date":"firstJulyMonday","offset":14},{"name":"山の日","fixed_date":[8,11]},{"name":"敬老の日","variable_date":"firstSeptemberMonday","offset":14},{"name":"スポーツの日","variable_date":"firstOctoberMonday","offset":7},{"name":"文化の日","fixed_date":[11,3]},{"name":"勤労感謝の日","fixed_date":[11,23]},{"name":"春分の日","variable_date":"springEquinox"},{"name":"秋分の日","variable_date":"autumnalEquinox"}],
11371
11390
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=35.39291572&lon=139.44288869&zoom=18&addressdetails=1&accept-language=ja,en"
11372
11391
  };
11373
11392
 
@@ -11438,6 +11457,7 @@ const li = {
11438
11457
  };
11439
11458
 
11440
11459
  const lt = {
11460
+ PH: [{"name":"Naujieji metai","fixed_date":[1,1]},{"name":"Lietuvos valstybės atkūrimo diena","fixed_date":[2,16]},{"name":"Lietuvos nepriklausomybės atkūrimo diena","fixed_date":[3,11]},{"name":"Velykos","variable_date":"easter"},{"name":"Velykų pirmadienis","variable_date":"easter","offset":1},{"name":"Tarptautinė darbo diena","fixed_date":[5,1]},{"name":"Joninės, Rasos","fixed_date":[6,24]},{"name":"Valstybės diena","fixed_date":[7,6]},{"name":"Žolinė","fixed_date":[8,15]},{"name":"Visų šventųjų diena","fixed_date":[11,1]},{"name":"Vėlinės","fixed_date":[11,2]},{"name":"Šv. Kūčios","fixed_date":[12,24]},{"name":"Šv. Kalėdos","fixed_date":[12,25]},{"name":"2. Kalėdų diena","fixed_date":[12,26]}],
11441
11461
  SH: [
11442
11462
  {
11443
11463
  name: "Žiemos atostogos",
@@ -11483,7 +11503,8 @@ const lt = {
11483
11503
  2025: [11,3,11,9],
11484
11504
  2026: [11,2,11,8],
11485
11505
  },
11486
- ]
11506
+ ],
11507
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=54.6872&lon=25.2797&zoom=18&addressdetails=1&accept-language=lt,en"
11487
11508
  };
11488
11509
 
11489
11510
  const lu = {
@@ -11559,6 +11580,7 @@ const lu = {
11559
11580
  };
11560
11581
 
11561
11582
  const lv = {
11583
+ PH: [{"name":"Jaunais Gads","fixed_date":[1,1]},{"name":"Lielā Piektdiena","variable_date":"easter","offset":-2},{"name":"Lieldienas","variable_date":"easter"},{"name":"Otrās Lieldienas","variable_date":"easter","offset":1},{"name":"Darba svētki","fixed_date":[5,1]},{"name":"Latvijas Republikas Neatkarības atjaunošanas diena","fixed_date":[5,4]},{"name":"Līgo Diena","fixed_date":[6,23]},{"name":"Jāņi","fixed_date":[6,24]},{"name":"Latvijas Republikas proklamēšanas diena","fixed_date":[11,18]},{"name":"Ziemassvētku vakars","fixed_date":[12,24]},{"name":"Ziemassvētki","fixed_date":[12,25]},{"name":"Otrie Ziemassvētki","fixed_date":[12,26]},{"name":"Vecgada vakars","fixed_date":[12,31]}],
11562
11584
  SH: [
11563
11585
  {
11564
11586
  name: "Ziemas brīvdienas",
@@ -11595,10 +11617,12 @@ const lv = {
11595
11617
  2023: [10,23,10,27],
11596
11618
  2024: [10,21,10,27],
11597
11619
  },
11598
- ]
11620
+ ],
11621
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=56.9460&lon=24.1059&zoom=18&addressdetails=1&accept-language=lv,en"
11599
11622
  };
11600
11623
 
11601
11624
  const mc = {
11625
+ PH: [{"name":"Nouvel An","fixed_date":[1,1]},{"name":"Sainte Dévote","fixed_date":[1,27]},{"name":"Lundi de Pâques","variable_date":"easter","offset":1},{"name":"1er mai","fixed_date":[5,1]},{"name":"Ascension","variable_date":"easter","offset":39},{"name":"Lundi de Pentecôte","variable_date":"easter","offset":50},{"name":"la Fête-Dieu","variable_date":"easter","offset":60},{"name":"Assomption","fixed_date":[8,15]},{"name":"Toussaint","fixed_date":[11,1]},{"name":"La Fête du Prince","fixed_date":[11,19]},{"name":"Immaculée Conception","fixed_date":[12,8]},{"name":"Noël","fixed_date":[12,25]}],
11602
11626
  SH: [
11603
11627
  {
11604
11628
  name: "Vacances de Noël",
@@ -11664,10 +11688,12 @@ const mc = {
11664
11688
  2024: [10,24,11,3],
11665
11689
  2025: [10,23,11,2],
11666
11690
  },
11667
- ]
11691
+ ],
11692
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=43.7384&lon=7.4246&zoom=18&addressdetails=1&accept-language=fr,en"
11668
11693
  };
11669
11694
 
11670
11695
  const md = {
11696
+ PH: [{"name":"Anul nou","fixed_date":[1,1]},{"name":"Ziua Internationala a Femeii","fixed_date":[3,8]},{"name":"Paștele","variable_date":"orthodox easter"},{"name":"A doua zi de Pasti","variable_date":"orthodox easter","offset":1},{"name":"Paştele Blăjinilor","variable_date":"orthodox easter","offset":8},{"name":"Ziua muncii","fixed_date":[5,1]},{"name":"Ziua Victoriei","fixed_date":[5,9]},{"name":"Ziua Independentei","fixed_date":[8,27]},{"name":"Limba noastră","fixed_date":[8,31]},{"name":"Craciun pe stil Nou","fixed_date":[12,25]}],
11671
11697
  SH: [
11672
11698
  {
11673
11699
  name: "Vacanţa de iarnă",
@@ -11718,10 +11744,12 @@ const md = {
11718
11744
  2024: [10,28,11,3],
11719
11745
  2025: [10,27,11,2],
11720
11746
  },
11721
- ]
11747
+ ],
11748
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=47.0105&lon=28.8638&zoom=18&addressdetails=1&accept-language=ro,en"
11722
11749
  };
11723
11750
 
11724
11751
  const mt = {
11752
+ PH: [{"name":"L-Ewwel tas-Sena","fixed_date":[1,1]},{"name":"Nawfraġju ta' San Pawl","fixed_date":[2,10]},{"name":"San Ġużepp","fixed_date":[3,19]},{"name":"Jum il-Ħelsien","fixed_date":[3,31]},{"name":"Il-Ġimgħa l-Kbira","variable_date":"easter","offset":-2},{"name":"Jum il-Ħaddiem","fixed_date":[5,1]},{"name":"Sette Giugno","fixed_date":[6,7]},{"name":"L-Imnarja","fixed_date":[6,29]},{"name":"Santa Marija","fixed_date":[8,15]},{"name":"Jum il-Vitorja","fixed_date":[9,8]},{"name":"Jum l-Indipendenza","fixed_date":[9,21]},{"name":"Il-Kunċizzjoni","fixed_date":[12,8]},{"name":"Jum ir-Repubblika","fixed_date":[12,13]},{"name":"Il-Milied","fixed_date":[12,25]}],
11725
11753
  SH: [
11726
11754
  {
11727
11755
  name: "Vaganzi tal-Milied",
@@ -11782,10 +11810,12 @@ const mt = {
11782
11810
  2024: [11,1,11,5],
11783
11811
  2025: [11,3,11,5],
11784
11812
  },
11785
- ]
11813
+ ],
11814
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=35.8997&lon=14.5147&zoom=18&addressdetails=1&accept-language=mt,en"
11786
11815
  };
11787
11816
 
11788
11817
  const mx = {
11818
+ PH: [{"name":"Año Nuevo","fixed_date":[1,1]},{"name":"Día de la Constitución","variable_date":"firstFebruaryMonday"},{"name":"Natalicio de Benito Juárez","variable_date":"firstMarchMonday","offset":14},{"name":"Día del Trabajador","fixed_date":[5,1]},{"name":"Día de la Independencia","fixed_date":[9,16]},{"name":"Día de la Revolución","variable_date":"firstNovemberMonday","offset":14},{"name":"Navidad","fixed_date":[12,25]}],
11789
11819
  SH: [
11790
11820
  {
11791
11821
  name: "Receso de invierno",
@@ -11820,16 +11850,18 @@ const mx = {
11820
11850
  name: "Fin de lecciones",
11821
11851
  2026: [7,15,7,15],
11822
11852
  },
11823
- ]
11853
+ ],
11854
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=19.4326&lon=-99.1332&zoom=18&addressdetails=1&accept-language=es,en"
11824
11855
  };
11825
11856
 
11826
11857
  const na = {
11827
- PH: [{"name":"New Year’s Day","fixed_date":[1,1]},{"name":"Independence Day","fixed_date":[3,21]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Workers Day","fixed_date":[5,1]},{"name":"Cassinga Day","fixed_date":[5,4]},{"name":"Ascension Day","variable_date":"easter","offset":39},{"name":"Africa Day","fixed_date":[5,25]},{"name":"Heroes’ Day","fixed_date":[8,26]},{"name":"Human Rights Day","fixed_date":[12,10]},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Family Day","fixed_date":[12,26]}],
11858
+ PH: [{"name":"New Year’s Day","fixed_date":[1,1]},{"name":"Independence Day","fixed_date":[3,21]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Workers’ Day","fixed_date":[5,1]},{"name":"Cassinga Day","fixed_date":[5,4]},{"name":"Ascension Day","variable_date":"easter","offset":39},{"name":"Africa Day","fixed_date":[5,25]},{"name":"Heroes’ Day","fixed_date":[8,26]},{"name":"Human Rights Day","fixed_date":[12,10]},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Family Day","fixed_date":[12,26]}],
11828
11859
  "_nominatim_url": "https://nominatim.openstreetmap.org/search?format=json&country=Namibia&zoom=18&addressdetails=1&limit=1"
11829
11860
  };
11830
11861
 
11831
11862
  const nl = {
11832
11863
  PH: [{"name":"Nieuwjaarsdag","fixed_date":[1,1]},{"name":"Goede vrijdag","variable_date":"easter","offset":-2},{"name":"Tweede Paasdag","variable_date":"easter","offset":1},{"name":"Koningsdag","fixed_date":[4,27]},{"name":"Bevrijdingsdag","fixed_date":[5,5]},{"name":"Hemelvaartsdag","variable_date":"easter","offset":39},{"name":"Tweede Pinksterdag","variable_date":"easter","offset":50},{"name":"Eerste Kerstdag","fixed_date":[12,25]},{"name":"Tweede Kerstdag","fixed_date":[12,26]}],
11864
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=52.3702&lon=4.8952&zoom=18&addressdetails=1&accept-language=nl,en",
11833
11865
  "MI": {
11834
11866
  SH: [
11835
11867
  {
@@ -12052,17 +12084,17 @@ const nl = {
12052
12084
  };
12053
12085
 
12054
12086
  const no = {
12055
- PH: [{"name":"Nyttårsdag","fixed_date":[1,1]},{"name":"Skjærtorsdag","variable_date":"easter","offset":-3},{"name":"Langfredag","variable_date":"easter","offset":-2},{"name":"Påskedag","variable_date":"easter"},{"name":"2. Påskedag","variable_date":"easter","offset":1},{"name":"1. Mai","fixed_date":[5,1]},{"name":"Grunnlovsdagen","fixed_date":[5,17]},{"name":"Kristi Himmelfartsdag","variable_date":"easter","offset":39},{"name":"Pinsedag","variable_date":"easter","offset":49},{"name":"2. Pinsedag","variable_date":"easter","offset":50},{"name":"Juledag","fixed_date":[12,25]},{"name":"2. Juledag","fixed_date":[12,26]}],
12087
+ PH: [{"name":"Første nyttårsdag","fixed_date":[1,1]},{"name":"Skjærtorsdag","variable_date":"easter","offset":-3},{"name":"Langfredag","variable_date":"easter","offset":-2},{"name":"Første påskedag","variable_date":"easter"},{"name":"Andre påskedag","variable_date":"easter","offset":1},{"name":"Arbeidernes dag","fixed_date":[5,1]},{"name":"Kristi himmelfartsdag","variable_date":"easter","offset":39},{"name":"Grunnlovsdagen","fixed_date":[5,17]},{"name":"Første pinsedag","variable_date":"easter","offset":49},{"name":"Andre pinsedag","variable_date":"easter","offset":50},{"name":"Første juledag","fixed_date":[12,25]},{"name":"Andre juledag","fixed_date":[12,26]}],
12056
12088
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=61.0&lon=8.0&zoom=8&addressdetails=1&accept-language=no,en"
12057
12089
  };
12058
12090
 
12059
12091
  const nz = {
12060
- PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Day after New Year's Day","fixed_date":[1,2]},{"name":"Waitangi Day","fixed_date":[2,6]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"Queen's Birthday","variable_date":"firstJuneMonday"},{"name":"Labour Day","variable_date":"firstOctoberMonday","offset":21},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}],
12092
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Day after New Year's Day","fixed_date":[1,2]},{"name":"Waitangi Day","fixed_date":[2,6]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Easter Monday","variable_date":"easter","offset":1},{"name":"Anzac Day","fixed_date":[4,25]},{"name":"King's Birthday","variable_date":"firstJuneMonday"},{"name":"Labour Day","variable_date":"firstOctoberMonday","offset":21},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Boxing Day","fixed_date":[12,26]}],
12061
12093
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-41.2922255&lon=174.7763033&zoom=16&addressdetails=1&accept-language=en"
12062
12094
  };
12063
12095
 
12064
12096
  const pl = {
12065
- PH: [{"name":"Nowy Rok","fixed_date":[1,1]},{"name":"Święto Trzech Króli","fixed_date":[1,6]},{"name":"Wielkanoc","variable_date":"easter"},{"name":"Lany Poniedziałek - drugi dzień Wielkiej Nocy","variable_date":"easter","offset":1},{"name":"Pierwszy Maja","fixed_date":[5,1]},{"name":"Trzeci Maja","fixed_date":[5,3]},{"name":"Zielone Świątki","variable_date":"easter","offset":49},{"name":"Boże Ciało","variable_date":"easter","offset":60},{"name":"Wniebowzięcie Najświętszej Maryi Panny","fixed_date":[8,15]},{"name":"Wszystkich Świętych","fixed_date":[11,1]},{"name":"Święto Niepodległości","fixed_date":[11,11]},{"name":"Wigilia Bożego Narodzenia","fixed_date":[12,24]},{"name":"pierwszy dzień Bożego Narodzenia","fixed_date":[12,25]},{"name":"drugi dzień Bożego Narodzenia","fixed_date":[12,26]}],
12097
+ PH: [{"name":"Nowy Rok","fixed_date":[1,1]},{"name":"Święto Trzech Króli","fixed_date":[1,6]},{"name":"pierwszy dzień Wielkiej Nocy","variable_date":"easter"},{"name":"drugi dzień Wielkiej Nocy","variable_date":"easter","offset":1},{"name":"Święto Państwowe","fixed_date":[5,1]},{"name":"Święto Narodowe Trzeciego Maja","fixed_date":[5,3]},{"name":"pierwszy dzień Zielonych Świątek","variable_date":"easter","offset":49},{"name":"dzień Bożego Ciała","variable_date":"easter","offset":60},{"name":"Wniebowzięcie Najświętszej Marii Panny","fixed_date":[8,15]},{"name":"Wszystkich Świętych","fixed_date":[11,1]},{"name":"Narodowe Święto Niepodległości","fixed_date":[11,11]},{"name":"Wigilia Bożego Narodzenia","fixed_date":[12,24]},{"name":"pierwszy dzień Bożego Narodzenia","fixed_date":[12,25]},{"name":"drugi dzień Bożego Narodzenia","fixed_date":[12,26]}],
12066
12098
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=53.4825&lon=18.75823&zoom=18&addressdetails=1&accept-language=pl,en",
12067
12099
  "Dolnośląskie": {
12068
12100
  SH: [
@@ -12786,6 +12818,7 @@ const pl = {
12786
12818
  };
12787
12819
 
12788
12820
  const pt = {
12821
+ PH: [{"name":"Ano Novo","fixed_date":[1,1]},{"name":"Sexta-Feira Santa","variable_date":"easter","offset":-2},{"name":"Páscoa","variable_date":"easter"},{"name":"Dia da Liberdade","fixed_date":[4,25]},{"name":"Dia do trabalhador","fixed_date":[5,1]},{"name":"Corpo de Deus","variable_date":"easter","offset":60},{"name":"Dia de Portugal","fixed_date":[6,10]},{"name":"Assunção de Maria","fixed_date":[8,15]},{"name":"Implantação da República","fixed_date":[10,5]},{"name":"Todos os santos","fixed_date":[11,1]},{"name":"Restauração da Independência","fixed_date":[12,1]},{"name":"Imaculada Conceição","fixed_date":[12,8]},{"name":"Natal","fixed_date":[12,25]}],
12789
12822
  SH: [
12790
12823
  {
12791
12824
  name: "Férias de Natal",
@@ -12837,11 +12870,12 @@ const pt = {
12837
12870
  name: "Fim das aulas",
12838
12871
  2028: [6,30,6,30],
12839
12872
  },
12840
- ]
12873
+ ],
12874
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=38.7223&lon=-9.1393&zoom=18&addressdetails=1&accept-language=pt,en"
12841
12875
  };
12842
12876
 
12843
12877
  const ro = {
12844
- PH: [{"name":"Anul Nou","fixed_date":[1,1]},{"name":"A doua zi de Anul Nou","fixed_date":[1,2]},{"name":"Ziua Unirii Principatelor Române (Ziua Unirii)","fixed_date":[1,24]},{"name":"Paștele ortodox","variable_date":"orthodox easter"},{"name":"A doua zi de Paște ortodox","variable_date":"orthodox easter","offset":1},{"name":"Ziua Muncii","fixed_date":[5,1]},{"name":"Rusaliile","variable_date":"orthodox easter","offset":50},{"name":"A doua zi de Rusalii","variable_date":"orthodox easter","offset":51},{"name":"Adormirea Maicii Domnului","fixed_date":[8,15]},{"name":"Sfântul Apostol Andrei","fixed_date":[11,30]},{"name":"Ziua Națională (Ziua Marii Uniri)","fixed_date":[12,1]},{"name":"Crăciunul","fixed_date":[12,25]},{"name":"A doua zi de Crăciun","fixed_date":[12,26]}],
12878
+ PH: [{"name":"Anul Nou","fixed_date":[1,1]},{"name":"A doua zi de Anul Nou","fixed_date":[1,2]},{"name":"Bobotează","fixed_date":[1,6]},{"name":"Sfântul Ioan Botezătorul","fixed_date":[1,7]},{"name":"Ziua Unirii Principatelor Române","fixed_date":[1,24]},{"name":"Vinerea Mare","variable_date":"orthodox easter","offset":-2},{"name":"Paștele","variable_date":"orthodox easter"},{"name":"A doua zi de Paști","variable_date":"orthodox easter","offset":1},{"name":"Ziua Muncii","fixed_date":[5,1]},{"name":"Ziua Copilului","fixed_date":[6,1]},{"name":"Rusaliile","variable_date":"orthodox easter","offset":50},{"name":"A doua zi de Rusalii","variable_date":"orthodox easter","offset":51},{"name":"Adormirea Maicii Domnului","fixed_date":[8,15]},{"name":"Sfântul Andrei","fixed_date":[11,30]},{"name":"Ziua Națională a României","fixed_date":[12,1]},{"name":"Crăciunul","fixed_date":[12,25]},{"name":"A doua zi de Crăciun","fixed_date":[12,26]}],
12845
12879
  SH: [
12846
12880
  {
12847
12881
  name: "Vacanța de iarnă",
@@ -13381,6 +13415,7 @@ const ro = {
13381
13415
  };
13382
13416
 
13383
13417
  const rs = {
13418
+ PH: [{"name":"Нова година","fixed_date":[1,1]},{"name":"Нова година","fixed_date":[1,2]},{"name":"Дан државности Србије","fixed_date":[2,16]},{"name":"Велики петак","variable_date":"orthodox easter","offset":-2},{"name":"Васкрс","variable_date":"orthodox easter"},{"name":"Васкрсни понедељак","variable_date":"orthodox easter","offset":1},{"name":"Празник рада","fixed_date":[5,1]},{"name":"Празник рада","fixed_date":[5,2]},{"name":"Дан примирја","fixed_date":[11,11]}],
13384
13419
  SH: [
13385
13420
  {
13386
13421
  name: "Зимски распуст",
@@ -13424,7 +13459,8 @@ const rs = {
13424
13459
  name: "Сретењски распуст",
13425
13460
  2026: [2,16,2,20],
13426
13461
  },
13427
- ]
13462
+ ],
13463
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=44.8176&lon=20.4569&zoom=18&addressdetails=1&accept-language=sr,en"
13428
13464
  };
13429
13465
 
13430
13466
  const ru = {
@@ -13579,6 +13615,7 @@ const si = {
13579
13615
  2024: [5,3,5,3],
13580
13616
  },
13581
13617
  ],
13618
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=46.0569&lon=14.5058&zoom=18&addressdetails=1&accept-language=sl,en",
13582
13619
  "vzhodne regije": {
13583
13620
  SH: [
13584
13621
  {
@@ -13610,7 +13647,7 @@ const si = {
13610
13647
  };
13611
13648
 
13612
13649
  const sk = {
13613
- PH: [{"name":"Deň vzniku Slovenskej republiky","fixed_date":[1,1]},{"name":"Zjavenie Pána","fixed_date":[1,6]},{"name":"Veľký piatok","variable_date":"easter","offset":-2},{"name":"Veľkonočná nedeľa","variable_date":"easter"},{"name":"Veľkonočný pondelok","variable_date":"easter","offset":1},{"name":"Sviatok práce","fixed_date":[5,1]},{"name":"Deň víťazstva nad fašizmom","fixed_date":[5,8]},{"name":"Sviatok svätého Cyrila a Metoda","fixed_date":[7,5]},{"name":"Výročie Slovenského národného povstania","fixed_date":[8,29]},{"name":"Deň Ústavy Slovenskej republiky","fixed_date":[9,1]},{"name":"Sviatok Panny Márie Sedembolestnej","fixed_date":[9,15]},{"name":"Sviatok všetkých svätých","fixed_date":[11,1]},{"name":"Deň boja za slobodu a demokraciu","fixed_date":[11,17]},{"name":"Štedrý deň","fixed_date":[12,24]},{"name":"Prvý sviatok vianočný","fixed_date":[12,25]},{"name":"Druhý sviatok vianočný","fixed_date":[12,26]}],
13650
+ PH: [{"name":"Deň vzniku Slovenskej republiky","fixed_date":[1,1]},{"name":"Zjavenie Pána","fixed_date":[1,6]},{"name":"Veľký piatok","variable_date":"easter","offset":-2},{"name":"Veľkonočná nedeľa","variable_date":"easter"},{"name":"Veľkonočný pondelok","variable_date":"easter","offset":1},{"name":"Sviatok práce","fixed_date":[5,1]},{"name":"Sviatok svätého Cyrila a Metoda","fixed_date":[7,5]},{"name":"Výročie Slovenského národného povstania","fixed_date":[8,29]},{"name":"Sviatok všetkých svätých","fixed_date":[11,1]},{"name":"Štedrý deň","fixed_date":[12,24]},{"name":"Prvý sviatok vianočný","fixed_date":[12,25]},{"name":"Druhý sviatok vianočný","fixed_date":[12,26]}],
13614
13651
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=48.7411522&lon=19.4528646&zoom=18&addressdetails=1&accept-language=sk,en",
13615
13652
  "Banskobystrický kraj": {
13616
13653
  SH: [
@@ -14119,6 +14156,7 @@ const sk = {
14119
14156
  };
14120
14157
 
14121
14158
  const sm = {
14159
+ PH: [{"name":"Capodanno","fixed_date":[1,1]},{"name":"Epifania","fixed_date":[1,6]},{"name":"Festa di Sant’Agata","fixed_date":[2,5]},{"name":"Anniversario dell'Arengo","fixed_date":[3,25]},{"name":"Cerimonia di investitura dei Capitani Reggenti","fixed_date":[4,1]},{"name":"Domenica di Pasqua","variable_date":"easter"},{"name":"Lunedì dell’Angelo","variable_date":"easter","offset":1},{"name":"Festa del Lavoro","fixed_date":[5,1]},{"name":"Corpus Domini","variable_date":"easter","offset":60},{"name":"Anniversario della caduta del Fascismo e Festa della Libertà","fixed_date":[7,28]},{"name":"Ferragosto","fixed_date":[8,15]},{"name":"Festa di San Marino e di Fondazione della Repubblica","fixed_date":[9,3]},{"name":"Cerimonia di investitura dei Capitani Reggenti","fixed_date":[10,1]},{"name":"Tutti i Santi","fixed_date":[11,1]},{"name":"Commemorazione dei defunti","fixed_date":[11,2]},{"name":"Immacolata Concezione","fixed_date":[12,8]},{"name":"Natale","fixed_date":[12,25]},{"name":"Santo Stefano","fixed_date":[12,26]}],
14122
14160
  SH: [
14123
14161
  {
14124
14162
  name: "Vacanze Natalizie",
@@ -14153,11 +14191,13 @@ const sm = {
14153
14191
  name: "Termine lezioni",
14154
14192
  2026: [6,17,6,17],
14155
14193
  },
14156
- ]
14194
+ ],
14195
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=43.9424&lon=12.4578&zoom=18&addressdetails=1&accept-language=it,en"
14157
14196
  };
14158
14197
 
14159
14198
  const ua = {
14160
- PH: [{"name":"Новий рік","fixed_date":[1,1]},{"name":"Різдво","fixed_date":[1,7]},{"name":"Міжнародний жіночий день","fixed_date":[3,8]},{"name":"Великдень","variable_date":"orthodox easter","offset":1},{"name":"День Праці 1","fixed_date":[5,1]},{"name":"День Праці 2","fixed_date":[5,2]},{"name":"День Перемоги","fixed_date":[5,9]},{"name":"День Конституції України","fixed_date":[6,28]},{"name":"День Незалежності України","fixed_date":[8,24]}]
14199
+ PH: [{"name":"Новий рік","fixed_date":[1,1]},{"name":"Міжнародний жіночий день","fixed_date":[3,8]},{"name":"Великдень","variable_date":"orthodox easter","offset":1},{"name":"День міжнародної солідарності трудящих","fixed_date":[5,1]},{"name":"День пам'яті та перемоги над нацизмом у Другій світовій війні","fixed_date":[5,8]},{"name":"Трійця","variable_date":"orthodox easter","offset":50},{"name":"День Конституції України","fixed_date":[6,28]},{"name":"День Української Державності","fixed_date":[7,15]},{"name":"День Незалежності України","fixed_date":[8,24]},{"name":"День захисників і захисниць України","fixed_date":[10,1]},{"name":"Різдво Христове","fixed_date":[12,25]}],
14200
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=50.4501&lon=30.5234&zoom=18&addressdetails=1&accept-language=uk,en"
14161
14201
  };
14162
14202
 
14163
14203
  const us = {
@@ -14464,6 +14504,7 @@ const xa = {
14464
14504
  };
14465
14505
 
14466
14506
  const za = {
14507
+ PH: [{"name":"New Year's Day","fixed_date":[1,1]},{"name":"Human Rights Day","fixed_date":[3,21]},{"name":"Good Friday","variable_date":"easter","offset":-2},{"name":"Family Day","variable_date":"easter","offset":1},{"name":"Freedom Day","fixed_date":[4,27]},{"name":"Workers' Day","fixed_date":[5,1]},{"name":"Youth Day","fixed_date":[6,16]},{"name":"National Women's Day","fixed_date":[8,9]},{"name":"Heritage Day","fixed_date":[9,24]},{"name":"Day of Reconciliation","fixed_date":[12,16]},{"name":"Christmas Day","fixed_date":[12,25]},{"name":"Day of Goodwill","fixed_date":[12,26]}],
14467
14508
  SH: [
14468
14509
  {
14469
14510
  name: "Summer Break",
@@ -14520,10 +14561,15 @@ const za = {
14520
14561
  2026: [9,25,9,25],
14521
14562
  2027: [4,26,4,26],
14522
14563
  },
14523
- ]
14564
+ ],
14565
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-25.7462&lon=28.1881&zoom=18&addressdetails=1&accept-language=en,af"
14524
14566
  };
14525
14567
 
14526
14568
  /**
14569
+ * SPDX-FileCopyrightText: © opening_hours.js contributors
14570
+ *
14571
+ * SPDX-License-Identifier: LGPL-3.0-only
14572
+ *
14527
14573
  * Holiday definitions for opening_hours.js
14528
14574
  *
14529
14575
  * All countries are now sourced from generated-openholidays.js
@@ -14556,11 +14602,13 @@ var holiday_definitions = /*#__PURE__*/Object.freeze({
14556
14602
  fi: fi,
14557
14603
  fr: fr,
14558
14604
  gb: gb,
14605
+ ge: ge,
14559
14606
  gr: gr,
14560
14607
  hr: hr,
14561
14608
  hu: hu,
14562
14609
  ie: ie,
14563
14610
  it: it,
14611
+ je: je,
14564
14612
  jp: jp,
14565
14613
  li: li,
14566
14614
  lt: lt,
@@ -14642,6 +14690,9 @@ var data$2 = { "assuming ok for ko":{ daytime:"sunrise-sunset",
14642
14690
  "please use fallback rule":{ otherwise:"||" },
14643
14691
  "please use ok for missing data":{ "\\?":"" },
14644
14692
  "please use ok for ko":{ "→":"-",
14693
+ "‐":"-",
14694
+ "‑":"-",
14695
+ "‒":"-",
14645
14696
  "−":"-",
14646
14697
  "—":"-",
14647
14698
  "ー":"-",
@@ -20643,6 +20694,12 @@ data.nl;
20643
20694
  data.ru;
20644
20695
  data.it;
20645
20696
 
20697
+ /**
20698
+ * SPDX-FileCopyrightText: © 2025 Kristjan ESPERANTO <https://github.com/KristjanESPERANTO>
20699
+ *
20700
+ * SPDX-License-Identifier: LGPL-3.0-only
20701
+ */
20702
+
20646
20703
  const resources = data;
20647
20704
 
20648
20705
  // Simple i18n object compatible with the minimal features used in src/index.js
@@ -20804,6 +20861,7 @@ function index(value, nominatim_object, optional_conf_parm) {
20804
20861
  'opening_hours:.+' : { 'mode' : 0, },
20805
20862
  '.+:opening_hours' : { 'mode' : 0, },
20806
20863
  '.+:opening_hours:.+' : { 'mode' : 0, },
20864
+ '.+:conditional' : { 'mode' : 0, },
20807
20865
  'smoking_hours' : { 'mode' : 0, },
20808
20866
  'service_times' : { 'mode' : 2, },
20809
20867
  'happy_hours' : { 'mode' : 0, },
@@ -20980,7 +21038,7 @@ function index(value, nominatim_object, optional_conf_parm) {
20980
21038
  throw t('nothing');
20981
21039
  }
20982
21040
 
20983
- const parsing_warnings = []; // Elements are fed into function formatWarnErrorMessage(nrule, at, message)
21041
+ const parsing_warnings = []; // Elements are arrays [nrule, at, message, tokens_to_use?] fed into formatWarnErrorMessage().
20984
21042
  let done_with_warnings = false; // The functions which returns warnings can be called multiple times.
20985
21043
  let done_with_selector_reordering = false;
20986
21044
  let done_with_selector_reordering_warnings = false;
@@ -21168,9 +21226,13 @@ function index(value, nominatim_object, optional_conf_parm) {
21168
21226
  /* Format warning or error message for the user. {{{
21169
21227
  *
21170
21228
  * :param nrule: Rule number starting with 0.
21171
- * :param at: Token position at which the issue occurred.
21229
+ * -1: error during tokenization, `at` is remaining value.length.
21230
+ * string: prettified value, `at` is a byte offset into it.
21231
+ * :param at: Token position. -1 means end of rule (no token at that position).
21172
21232
  * :param message: Human readable string with the message.
21173
- * :param tokens_to_use: List of token objects.
21233
+ * :param tokens_to_use: Optional. Defaults to `tokens`. Pass `new_tokens` from
21234
+ * getWarnings() because new_tokens can have more entries than tokens
21235
+ * when Additional Rules are present.
21174
21236
  * :returns: String with position of the warning or error marked for the user.
21175
21237
  */
21176
21238
  function formatWarnErrorMessage(nrule, at, message, tokens_to_use) {
@@ -21178,14 +21240,20 @@ function index(value, nominatim_object, optional_conf_parm) {
21178
21240
  tokens_to_use = tokens;
21179
21241
  }
21180
21242
  // console.log(`Called formatWarnErrorMessage: ${nrule}, ${at}, ${message}`);
21181
- // FIXME: Change to new_tokens.
21182
21243
  if (typeof nrule === 'number') {
21183
- let pos = 0;
21184
- if (nrule === -1) { // Usage of rule index not required because we do have access to value.length.
21244
+ let pos;
21245
+ if (nrule === -1) {
21246
+ // at is remaining value.length at the point of the error.
21185
21247
  pos = value.length - at;
21186
- } else { // Issue occurred at a later time, position in string needs to be reconstructed.
21248
+ } else {
21249
+ if (typeof tokens_to_use[nrule] === 'undefined') {
21250
+ // Caller passed the wrong token array (tokens instead of new_tokens?).
21251
+ formatLibraryBugMessage('Bug in warning generation code: tokens_to_use[nrule] is undefined for nrule=' + nrule + '.');
21252
+ return value + ' <--- (' + message + ')';
21253
+ }
21187
21254
  if (typeof tokens_to_use[nrule][0][at] === 'undefined') {
21188
21255
  if (typeof tokens_to_use[nrule][0] !== 'undefined' && at === -1) {
21256
+ // at === -1: point to end of rule, use offset of next rule entry if available.
21189
21257
  pos = value.length;
21190
21258
  if (typeof tokens_to_use[nrule+1] === 'object' && typeof tokens_to_use[nrule+1][2] === 'number') {
21191
21259
  pos -= tokens_to_use[nrule+1][2];
@@ -21193,13 +21261,11 @@ function index(value, nominatim_object, optional_conf_parm) {
21193
21261
  pos -= tokens_to_use[nrule][2];
21194
21262
  }
21195
21263
  } else {
21196
- // Given position is invalid.
21197
- //
21264
+ // Token position is out of range. Run real_test regularly to catch this.
21198
21265
  formatLibraryBugMessage('Bug in warning generation code which could not determine the exact position of the warning or error in value.');
21199
21266
  pos = value.length;
21200
21267
  if (typeof tokens_to_use[nrule][2] === 'number') {
21201
- // Fallback: Point to last token in the rule which caused the problem.
21202
- // Run real_test regularly to fix the problem before a user is confronted with it.
21268
+ // Fallback: point to last token in the rule which caused the problem.
21203
21269
  pos -= tokens_to_use[nrule][2];
21204
21270
  console.warn('Last token for rule: ' + JSON.stringify(tokens_to_use[nrule]));
21205
21271
  } else {
@@ -21219,6 +21285,7 @@ function index(value, nominatim_object, optional_conf_parm) {
21219
21285
  } else if (typeof nrule === 'string') {
21220
21286
  return nrule.substring(0, at) + ' <--- (' + message + ')';
21221
21287
  }
21288
+ return message;
21222
21289
  }
21223
21290
  /* }}} */
21224
21291
 
@@ -21335,7 +21402,7 @@ function index(value, nominatim_object, optional_conf_parm) {
21335
21402
  t('please use ok for ko', {'ko': tmp[0], 'ok': ok})]);
21336
21403
  }
21337
21404
  value = ok + value.substr(tmp[0].length);
21338
- } else if ((tmp = value.match(/^(&|_|→|–|−|—|ー|=|·|öffnungszeit(?:en)?:?|opening_hours\s*=|\?|~|~|:|always (?:open|closed)|24x7|24 hours 7 days a week|24 hours|7 ?days(?:(?: a |\/)week)?|7j?\/7|all days?|every day|(?:bis|till?|-|–)? ?(?:open ?end|late)|(?:(?:one )?day (?:before|after) )?(?:school|public) holidays?|days(?=\s|$|[^\p{L}_])|до|рм|ам|jours fériés|on work days?|sonntags?|(?:nur |an )?sonn-?(?:(?: und |\/)feiertag(?:s|en?)?)?|(?:an )?feiertag(?:s|en?)?|(?:nach|on|by) (?:appointments?|vereinbarung|absprache)|p\.m\.|a\.m\.|(?:[^\s\d\p{P}\p{S}\p{C}]|_)+(?=\s|$|[\s\d\p{Po}\p{Ps}\p{Pe}\p{Pd}\p{Pf}\p{Pi}\p{S}\p{C}])|à|á|mo|tu|we|th|fr|sa|su|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)(\.?)/iu))) {
21405
+ } else if ((tmp = value.match(/^(&|_|→|‐|‑|‒|–|−|—|ー|=|·|öffnungszeit(?:en)?:?|opening_hours\s*=|\?|~|~|:|always (?:open|closed)|24x7|24 hours 7 days a week|24 hours|7 ?days(?:(?: a |\/)week)?|7j?\/7|all days?|every day|(?:bis|till?|-|–)? ?(?:open ?end|late)|(?:(?:one )?day (?:before|after) )?(?:school|public) holidays?|days(?=\s|$|[^\p{L}_])|до|рм|ам|jours fériés|on work days?|sonntags?|(?:nur |an )?sonn-?(?:(?: und |\/)feiertag(?:s|en?)?)?|(?:an )?feiertag(?:s|en?)?|(?:nach|on|by) (?:appointments?|vereinbarung|absprache)|p\.m\.|a\.m\.|(?:[^\s\d\p{P}\p{S}\p{C}]|_)+(?=\s|$|[\s\d\p{Po}\p{Ps}\p{Pe}\p{Pd}\p{Pf}\p{Pi}\p{S}\p{C}])|à|á|mo|tu|we|th|fr|sa|su|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)(\.?)/iu))) {
21339
21406
  /* Handle all remaining words and specific other characters with error tolerance.
21340
21407
  *
21341
21408
  * à|á: Word boundary does not work with Unicode chars: 'test à test'.match(/\bà\b/i)
@@ -21631,7 +21698,8 @@ function index(value, nominatim_object, optional_conf_parm) {
21631
21698
  :
21632
21699
  t('selector multi 2b', {'what': t(selector_type + (/^(?:month|weekday)$/.test(selector_type) ? 's' : ' ranges'))})
21633
21700
  )
21634
- })]
21701
+ }),
21702
+ new_tokens]
21635
21703
  );
21636
21704
  done_with_selector_reordering = true; // Correcting the selector order makes no sense if this kind of issue exists.
21637
21705
  }
@@ -21642,7 +21710,7 @@ function index(value, nominatim_object, optional_conf_parm) {
21642
21710
  && Object.keys(used_selectors[nrule]).length === 1
21643
21711
  ) {
21644
21712
  if (nrule !== 0) {
21645
- parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1, t('default state')]);
21713
+ parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1, t('default state'), new_tokens]);
21646
21714
  }
21647
21715
  /* }}} */
21648
21716
  /* Check if a rule (with state open) has no time selector {{{ */
@@ -21656,7 +21724,7 @@ function index(value, nominatim_object, optional_conf_parm) {
21656
21724
  typeof used_selectors[nrule]['24/7'] === 'undefined'
21657
21725
  ) {
21658
21726
 
21659
- parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1, t('vague')]);
21727
+ parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1, t('vague'), new_tokens]);
21660
21728
  }
21661
21729
  }
21662
21730
  /* }}} */
@@ -21665,7 +21733,7 @@ function index(value, nominatim_object, optional_conf_parm) {
21665
21733
  && new_tokens[nrule][0][used_selectors[nrule].comment[0]][0].length === 0
21666
21734
  ) {
21667
21735
 
21668
- parsing_warnings.push([nrule, used_selectors[nrule].comment[0], t('empty comment')]);
21736
+ parsing_warnings.push([nrule, used_selectors[nrule].comment[0], t('empty comment'), new_tokens]);
21669
21737
  }
21670
21738
  /* }}} */
21671
21739
  /* Check for valid use of <separator_for_readability> {{{ */
@@ -21680,7 +21748,8 @@ function index(value, nominatim_object, optional_conf_parm) {
21680
21748
 
21681
21749
  if (new_tokens[nrule][0][used_selectors[nrule][selector_type][0]][0] === ':') {
21682
21750
  parsing_warnings.push([nrule, used_selectors[nrule][selector_type][0],
21683
- t('separator_for_readability')
21751
+ t('separator_for_readability'),
21752
+ new_tokens
21684
21753
  ]);
21685
21754
  }
21686
21755
  }
@@ -21774,6 +21843,7 @@ function index(value, nominatim_object, optional_conf_parm) {
21774
21843
  && (
21775
21844
  (
21776
21845
  typeof oh_key === 'string'
21846
+ && oh_regex_key
21777
21847
  && osm_tag_defaults[oh_regex_key]['warn_for_PH_missing']
21778
21848
  )
21779
21849
  || (typeof oh_key !== 'string')
@@ -22918,6 +22988,11 @@ function index(value, nominatim_object, optional_conf_parm) {
22918
22988
  // The target day is in the next month. If the target day without the added days is not in this month
22919
22989
  if (target_day_this_month.getTime() >= start_of_next_month.getTime())
22920
22990
  return [false, start_of_next_month];
22991
+ } else if (target_day_this_month.getTime() >= start_of_next_month.getTime()) {
22992
+ // The nth weekday overflows to next month (e.g. no 5th Sunday in February),
22993
+ // but negative add_days pulled the result back into this month.
22994
+ // The nth weekday still does not exist this month, so do not match.
22995
+ return [false, start_of_next_month];
22921
22996
  }
22922
22997
 
22923
22998
  let target_day_with_added_moved_days_this_month;
@@ -23659,15 +23734,116 @@ function index(value, nominatim_object, optional_conf_parm) {
23659
23734
  }
23660
23735
  /* }}} */
23661
23736
 
23737
+ // Shift rule support for transferable holidays. {{{
23738
+
23739
+ const weekday_name_to_num = {
23740
+ sunday: 0, monday: 1, tuesday: 2, wednesday: 3,
23741
+ thursday: 4, friday: 5, saturday: 6,
23742
+ };
23743
+
23744
+ const shift_rule_cache = Object.create(null);
23745
+
23746
+ /* Compile a shift_rule string into a (Date) => Date shifter.
23747
+ *
23748
+ * A `shift_rule` field on a holiday definition moves the holiday’s date
23749
+ * depending on the weekday it falls on. The syntax is a subset of the
23750
+ * date-holidays DSL: chained `if … then …` clauses, first match wins,
23751
+ * unmatched dates stay unchanged.
23752
+ *
23753
+ * Format:
23754
+ * “if <wd>[,<wd>...] then <next|previous> <wd> [if … then … <wd>]*”
23755
+ *
23756
+ * Collision behaviour: if the shifted date would land on another
23757
+ * non-shifted holiday in the same year, the holiday keeps its original
23758
+ * date instead.
23759
+ */
23760
+ function compileShiftRule(rule) {
23761
+ if (shift_rule_cache[rule]) {
23762
+ return shift_rule_cache[rule];
23763
+ }
23764
+ const clauses = parseShiftRule(rule);
23765
+ const shifter = function (date) {
23766
+ return applyShiftClauses(clauses, date);
23767
+ };
23768
+ shift_rule_cache[rule] = shifter;
23769
+ return shifter;
23770
+ }
23771
+
23772
+ /* Parse a shift_rule string into a list of clause objects.
23773
+ *
23774
+ * Each clause has the shape:
23775
+ * { from_wds: [<int>, ...], direction: "next"|"previous", target_wd: <int> }
23776
+ * where weekdays are 0–6 (Sunday–Saturday).
23777
+ */
23778
+ function parseShiftRule(rule) {
23779
+ function fail(detail) {
23780
+ throw formatLibraryBugMessage(
23781
+ 'shift_rule: ' + detail + ' in "' + rule + '"'
23782
+ );
23783
+ }
23784
+ function toWeekdayNum(name) {
23785
+ const n = name.trim();
23786
+ if (!(n in weekday_name_to_num)) {
23787
+ fail('unknown weekday "' + n + '"');
23788
+ }
23789
+ return weekday_name_to_num[n];
23790
+ }
23791
+
23792
+ const clause_regex = /if\s+([a-z,\s]+?)\s+then\s+(next|previous)\s+([a-z]+)/g;
23793
+ const clauses = [];
23794
+ let last_end = 0;
23795
+ let match;
23796
+ while ((match = clause_regex.exec(rule)) !== null) {
23797
+ // Any text before the first match or between matches must be blank.
23798
+ if (rule.slice(last_end, match.index).trim() !== '') {
23799
+ fail('cannot parse');
23800
+ }
23801
+ clauses.push({
23802
+ from_wds: match[1].split(',').map(toWeekdayNum),
23803
+ direction: match[2],
23804
+ target_wd: toWeekdayNum(match[3]),
23805
+ });
23806
+ last_end = clause_regex.lastIndex;
23807
+ }
23808
+ if (clauses.length === 0 || rule.slice(last_end).trim() !== '') {
23809
+ fail('cannot parse');
23810
+ }
23811
+ return clauses;
23812
+ }
23813
+
23814
+ /* Apply the first matching clause to `date` and return the shifted date.
23815
+ * Returns the original date if no clause matches.
23816
+ */
23817
+ function applyShiftClauses(clauses, date) {
23818
+ const wd = date.getDay();
23819
+ for (let i = 0; i < clauses.length; i++) {
23820
+ const c = clauses[i];
23821
+ if (c.from_wds.indexOf(wd) === -1) continue;
23822
+
23823
+ // Distance to the target weekday, always in the range [1, 7].
23824
+ // The modulo alone could yield 0 when wd === target_wd, but the
23825
+ // from_wds guard above prevents that for well-formed rules.
23826
+ // The "|| 7" is a safety net: if it ever did produce 0 we would
23827
+ // shift by a full week rather than silently not moving the date.
23828
+ let diff;
23829
+ if (c.direction === 'next') {
23830
+ diff = ((c.target_wd - wd + 7) % 7) || 7; // move forward
23831
+ } else {
23832
+ diff = -(((wd - c.target_wd + 7) % 7) || 7); // move backward
23833
+ }
23834
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate() + diff);
23835
+ }
23836
+ return date;
23837
+ }
23838
+
23662
23839
  function getApplyingHolidaysForYear(applying_holidays, year, add_days) {
23663
23840
  const movableDays = getMovableEventsForYear(year);
23664
23841
 
23665
- let sorted_holidays = [];
23666
- let next_holiday;
23667
-
23668
- applying_holidays.forEach(function (holiday_item) {
23842
+ /* Pass 1: resolve the base date of every holiday (no shift, no add_days). */
23843
+ const resolved = applying_holidays.map(function (holiday_item) {
23844
+ let base_date;
23669
23845
  if ('fixed_date' in holiday_item) {
23670
- next_holiday = new Date(year,
23846
+ base_date = new Date(year,
23671
23847
  holiday_item.fixed_date[0] - 1,
23672
23848
  holiday_item.fixed_date[1]
23673
23849
  );
@@ -23676,27 +23852,49 @@ function index(value, nominatim_object, optional_conf_parm) {
23676
23852
  if (!selected_movableDay) {
23677
23853
  throw t('movable no formula', {'name': holiday_item.name});
23678
23854
  }
23679
- let date_offset = 0;
23680
- if ('offset' in holiday_item) {
23681
- date_offset = holiday_item.offset;
23682
- }
23683
- next_holiday = new Date(selected_movableDay.getFullYear(),
23855
+ const date_offset = 'offset' in holiday_item ? holiday_item.offset : 0;
23856
+ base_date = new Date(selected_movableDay.getFullYear(),
23684
23857
  selected_movableDay.getMonth(),
23685
23858
  selected_movableDay.getDate() + date_offset
23686
23859
  );
23687
- if (year !== next_holiday.getFullYear()) {
23860
+ if (year !== base_date.getFullYear()) {
23688
23861
  throw t('movable not in year', {
23689
23862
  'name': holiday_item.variable_date, 'days': date_offset});
23690
23863
  }
23691
23864
  } else {
23692
23865
  throw formatLibraryBugMessage('Unexpected object: ' + JSON.stringify(holiday_item, null, ' '));
23693
23866
  }
23867
+ return { date: base_date, holiday: holiday_item };
23868
+ });
23694
23869
 
23695
- if (add_days[0]) {
23696
- next_holiday.setDate(next_holiday.getDate() + add_days[0]);
23870
+ /* Pass 2: apply shift_rule with collision detection.
23871
+ * Collisions are checked against the nominal (non-shifted, no-add_days)
23872
+ * dates of all non-shifted holidays — never against other shifted ones,
23873
+ * to keep the result deterministic regardless of declaration order.
23874
+ */
23875
+ const fixed_times = new Set();
23876
+ resolved.forEach(function (r) {
23877
+ if (!r.holiday.shift_rule) {
23878
+ fixed_times.add(r.date.getTime());
23697
23879
  }
23880
+ });
23881
+ resolved.forEach(function (r) {
23882
+ if (!r.holiday.shift_rule) return;
23883
+ const shifter = compileShiftRule(r.holiday.shift_rule);
23884
+ const shifted = shifter(r.date);
23885
+ if (shifted.getTime() === r.date.getTime()) return;
23886
+ // Keep original date on collision with a non-shifted holiday.
23887
+ if (fixed_times.has(shifted.getTime())) return;
23888
+ r.date = shifted;
23889
+ });
23698
23890
 
23699
- sorted_holidays.push([ next_holiday, holiday_item.name ]);
23891
+ /* Pass 3: apply add_days uniformly and sort. */
23892
+ let sorted_holidays = resolved.map(function (r) {
23893
+ let d = r.date;
23894
+ if (add_days[0]) {
23895
+ d = new Date(d.getFullYear(), d.getMonth(), d.getDate() + add_days[0]);
23896
+ }
23897
+ return [ d, r.holiday.name ];
23700
23898
  });
23701
23899
 
23702
23900
  sorted_holidays = sorted_holidays.sort(function(a,b){
@@ -23720,7 +23918,7 @@ function index(value, nominatim_object, optional_conf_parm) {
23720
23918
  tokens[at][3] = 'year';
23721
23919
  for (; at < tokens.length; at++) {
23722
23920
  if (matchTokens(tokens, at, 'year')) {
23723
- let is_range = false,
23921
+ let is_range,
23724
23922
  has_period,
23725
23923
  period;
23726
23924
  if (matchTokens(tokens, at+1, '-', 'year', '/', 'number')) {
@@ -24678,11 +24876,20 @@ function index(value, nominatim_object, optional_conf_parm) {
24678
24876
  /* }}} */
24679
24877
 
24680
24878
  /* getNextChange: Get time of next status change {{{ */
24879
+ /*
24880
+ * Return next visible state change (open/closed/unknown).
24881
+ * Skip comment-only boundaries; use getIterator(...).advance() for those.
24882
+ */
24681
24883
  this.getNextChange = function(date, maxdate) {
24682
24884
  const it = this.getIterator(date);
24683
- if (!it.advance(maxdate))
24684
- return undefined;
24685
- return it.getDate();
24885
+ const initial_state = it.getState();
24886
+ const initial_unknown = it.getUnknown();
24887
+ while (it.advance(maxdate)) {
24888
+ if (it.getState() !== initial_state || it.getUnknown() !== initial_unknown) {
24889
+ return it.getDate();
24890
+ }
24891
+ }
24892
+ return undefined;
24686
24893
  };
24687
24894
  /* }}} */
24688
24895