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.
@@ -119,12 +119,12 @@
119
119
  };
120
120
 
121
121
  const ar = {
122
- 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]}],
122
+ 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]}],
123
123
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-34.60377&lon=-58.38159&zoom=16&addressdetails=1&accept-language=es"
124
124
  };
125
125
 
126
126
  const at = {
127
- 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]}],
127
+ 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]}],
128
128
  SH: [
129
129
  {
130
130
  name: "Osterferien",
@@ -557,52 +557,52 @@
557
557
  };
558
558
 
559
559
  const au = {
560
- 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]}],
560
+ 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]}],
561
561
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-35.2809&lon=149.1300&zoom=16&addressdetails=1&accept-language=en",
562
562
  "Australian Capital Territory": {
563
563
  "_state_code": "act",
564
564
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-35.2809&lon=149.1300&zoom=16&addressdetails=1&accept-language=en",
565
- 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]}]
565
+ 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]}]
566
566
  },
567
567
  "New South Wales": {
568
568
  "_state_code": "nsw",
569
569
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-33.8688&lon=151.2093&zoom=16&addressdetails=1&accept-language=en",
570
- 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]}]
570
+ 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]}]
571
571
  },
572
572
  "Northern Territory": {
573
573
  "_state_code": "nt",
574
574
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-12.4634&lon=130.8456&zoom=16&addressdetails=1&accept-language=en",
575
- 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]}]
575
+ 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]}]
576
576
  },
577
577
  "Queensland": {
578
578
  "_state_code": "qld",
579
579
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-27.4698&lon=153.0251&zoom=16&addressdetails=1&accept-language=en",
580
- 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]}]
580
+ 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]}]
581
581
  },
582
582
  "South Australia": {
583
583
  "_state_code": "sa",
584
584
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-34.9285&lon=138.6007&zoom=16&addressdetails=1&accept-language=en",
585
- 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]}]
585
+ 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]}]
586
586
  },
587
587
  "Tasmania": {
588
588
  "_state_code": "tas",
589
589
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-42.8821&lon=147.3272&zoom=16&addressdetails=1&accept-language=en",
590
- 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]}]
590
+ 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]}]
591
591
  },
592
592
  "Victoria": {
593
593
  "_state_code": "vic",
594
594
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-37.8136&lon=144.9631&zoom=16&addressdetails=1&accept-language=en",
595
- 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]}]
595
+ 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]}]
596
596
  },
597
597
  "Western Australia": {
598
598
  "_state_code": "wa",
599
599
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-31.9505&lon=115.8605&zoom=16&addressdetails=1&accept-language=en",
600
- 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]}]
600
+ 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]}]
601
601
  }
602
602
  };
603
603
 
604
604
  const be = {
605
- 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]}],
605
+ 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]}],
606
606
  "_nominatim_url": "https://nominatim.openstreetmap.org/search?format=json&country=Belgium&zoom=18&addressdetails=1&limit=1&accept-language=nl,fr,de,en",
607
607
  "DE": {
608
608
  SH: [
@@ -807,6 +807,7 @@
807
807
  };
808
808
 
809
809
  const bg = {
810
+ 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]}],
810
811
  SH: [
811
812
  {
812
813
  name: "Коледна ваканция",
@@ -862,7 +863,8 @@
862
863
  2022: [2,2,2,4],
863
864
  2026: [3,2,3,2],
864
865
  },
865
- ]
866
+ ],
867
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=42.6977&lon=23.3219&zoom=18&addressdetails=1&accept-language=bg,en"
866
868
  };
867
869
 
868
870
  const br = {
@@ -953,6 +955,7 @@
953
955
  };
954
956
 
955
957
  const by = {
958
+ 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]}],
956
959
  SH: [
957
960
  {
958
961
  name: "Зімовыя вакацыі",
@@ -993,11 +996,13 @@
993
996
  2024: [10,27,11,5],
994
997
  2025: [11,2,11,9],
995
998
  },
996
- ]
999
+ ],
1000
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=53.9045&lon=27.5615&zoom=18&addressdetails=1&accept-language=be,en"
997
1001
  };
998
1002
 
999
1003
  const ca = {
1000
1004
  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]}],
1005
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=45.4215&lon=-75.6972&zoom=18&addressdetails=1&accept-language=en,fr",
1001
1006
  "Alberta": {
1002
1007
  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]}]
1003
1008
  },
@@ -3431,7 +3436,7 @@
3431
3436
  };
3432
3437
 
3433
3438
  const cz = {
3434
- 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]}],
3439
+ 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]}],
3435
3440
  SH: [
3436
3441
  {
3437
3442
  name: "Vánoční prázdniny",
@@ -4729,7 +4734,7 @@
4729
4734
  };
4730
4735
 
4731
4736
  const de = {
4732
- 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]}],
4737
+ 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]}],
4733
4738
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=49.5487&lon=9.8160&zoom=18&addressdetails=1&accept-language=de,en",
4734
4739
  "Baden-Württemberg": {
4735
4740
  SH: [
@@ -7006,11 +7011,12 @@
7006
7011
  };
7007
7012
 
7008
7013
  const dk = {
7009
- 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]}],
7014
+ 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]}],
7010
7015
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=55.670249&lon=10.3333283&zoom=18&addressdetails=1&accept-language=da,en"
7011
7016
  };
7012
7017
 
7013
7018
  const ee = {
7019
+ 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]}],
7014
7020
  SH: [
7015
7021
  {
7016
7022
  name: "jõulupühad",
@@ -7066,7 +7072,8 @@
7066
7072
  2025: [10,20,10,26],
7067
7073
  2026: [10,26,11,1],
7068
7074
  },
7069
- ]
7075
+ ],
7076
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=59.4370&lon=24.7536&zoom=18&addressdetails=1&accept-language=et,en"
7070
7077
  };
7071
7078
 
7072
7079
  const es = {
@@ -10181,13 +10188,18 @@
10181
10188
  }
10182
10189
  };
10183
10190
 
10191
+ const ge = {
10192
+ 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]}],
10193
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=41.7151&lon=44.8271&zoom=18&addressdetails=1&accept-language=ka,en"
10194
+ };
10195
+
10184
10196
  const gr = {
10185
- 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]}],
10197
+ 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]}],
10186
10198
  "_nominatim_url": "https://nominatim.openstreetmap.org/search?format=json&country=Greece&&zoom=18&addressdetails=1&limit=1&accept-language=el,en"
10187
10199
  };
10188
10200
 
10189
10201
  const hr = {
10190
- 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]}],
10202
+ 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]}],
10191
10203
  SH: [
10192
10204
  {
10193
10205
  name: "Zimski odmor",
@@ -10312,7 +10324,7 @@
10312
10324
  };
10313
10325
 
10314
10326
  const ie = {
10315
- 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]}],
10327
+ 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]}],
10316
10328
  SH: [
10317
10329
  {
10318
10330
  name: "Christmas",
@@ -11370,8 +11382,15 @@
11370
11382
  }
11371
11383
  };
11372
11384
 
11385
+ const je = {
11386
+ "Jersey": {
11387
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=49.2&lon=-2.1&zoom=11&addressdetails=1&accept-language=en",
11388
+ 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]}]
11389
+ }
11390
+ };
11391
+
11373
11392
  const jp = {
11374
- 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"}],
11393
+ 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"}],
11375
11394
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=35.39291572&lon=139.44288869&zoom=18&addressdetails=1&accept-language=ja,en"
11376
11395
  };
11377
11396
 
@@ -11442,6 +11461,7 @@
11442
11461
  };
11443
11462
 
11444
11463
  const lt = {
11464
+ 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]}],
11445
11465
  SH: [
11446
11466
  {
11447
11467
  name: "Žiemos atostogos",
@@ -11487,7 +11507,8 @@
11487
11507
  2025: [11,3,11,9],
11488
11508
  2026: [11,2,11,8],
11489
11509
  },
11490
- ]
11510
+ ],
11511
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=54.6872&lon=25.2797&zoom=18&addressdetails=1&accept-language=lt,en"
11491
11512
  };
11492
11513
 
11493
11514
  const lu = {
@@ -11563,6 +11584,7 @@
11563
11584
  };
11564
11585
 
11565
11586
  const lv = {
11587
+ 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]}],
11566
11588
  SH: [
11567
11589
  {
11568
11590
  name: "Ziemas brīvdienas",
@@ -11599,10 +11621,12 @@
11599
11621
  2023: [10,23,10,27],
11600
11622
  2024: [10,21,10,27],
11601
11623
  },
11602
- ]
11624
+ ],
11625
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=56.9460&lon=24.1059&zoom=18&addressdetails=1&accept-language=lv,en"
11603
11626
  };
11604
11627
 
11605
11628
  const mc = {
11629
+ 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]}],
11606
11630
  SH: [
11607
11631
  {
11608
11632
  name: "Vacances de Noël",
@@ -11668,10 +11692,12 @@
11668
11692
  2024: [10,24,11,3],
11669
11693
  2025: [10,23,11,2],
11670
11694
  },
11671
- ]
11695
+ ],
11696
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=43.7384&lon=7.4246&zoom=18&addressdetails=1&accept-language=fr,en"
11672
11697
  };
11673
11698
 
11674
11699
  const md = {
11700
+ 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]}],
11675
11701
  SH: [
11676
11702
  {
11677
11703
  name: "Vacanţa de iarnă",
@@ -11722,10 +11748,12 @@
11722
11748
  2024: [10,28,11,3],
11723
11749
  2025: [10,27,11,2],
11724
11750
  },
11725
- ]
11751
+ ],
11752
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=47.0105&lon=28.8638&zoom=18&addressdetails=1&accept-language=ro,en"
11726
11753
  };
11727
11754
 
11728
11755
  const mt = {
11756
+ 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]}],
11729
11757
  SH: [
11730
11758
  {
11731
11759
  name: "Vaganzi tal-Milied",
@@ -11786,10 +11814,12 @@
11786
11814
  2024: [11,1,11,5],
11787
11815
  2025: [11,3,11,5],
11788
11816
  },
11789
- ]
11817
+ ],
11818
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=35.8997&lon=14.5147&zoom=18&addressdetails=1&accept-language=mt,en"
11790
11819
  };
11791
11820
 
11792
11821
  const mx = {
11822
+ 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]}],
11793
11823
  SH: [
11794
11824
  {
11795
11825
  name: "Receso de invierno",
@@ -11824,16 +11854,18 @@
11824
11854
  name: "Fin de lecciones",
11825
11855
  2026: [7,15,7,15],
11826
11856
  },
11827
- ]
11857
+ ],
11858
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=19.4326&lon=-99.1332&zoom=18&addressdetails=1&accept-language=es,en"
11828
11859
  };
11829
11860
 
11830
11861
  const na = {
11831
- 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]}],
11862
+ 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]}],
11832
11863
  "_nominatim_url": "https://nominatim.openstreetmap.org/search?format=json&country=Namibia&zoom=18&addressdetails=1&limit=1"
11833
11864
  };
11834
11865
 
11835
11866
  const nl = {
11836
11867
  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]}],
11868
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=52.3702&lon=4.8952&zoom=18&addressdetails=1&accept-language=nl,en",
11837
11869
  "MI": {
11838
11870
  SH: [
11839
11871
  {
@@ -12056,17 +12088,17 @@
12056
12088
  };
12057
12089
 
12058
12090
  const no = {
12059
- 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]}],
12091
+ 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]}],
12060
12092
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=61.0&lon=8.0&zoom=8&addressdetails=1&accept-language=no,en"
12061
12093
  };
12062
12094
 
12063
12095
  const nz = {
12064
- 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]}],
12096
+ 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]}],
12065
12097
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-41.2922255&lon=174.7763033&zoom=16&addressdetails=1&accept-language=en"
12066
12098
  };
12067
12099
 
12068
12100
  const pl = {
12069
- 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]}],
12101
+ 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]}],
12070
12102
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=53.4825&lon=18.75823&zoom=18&addressdetails=1&accept-language=pl,en",
12071
12103
  "Dolnośląskie": {
12072
12104
  SH: [
@@ -12790,6 +12822,7 @@
12790
12822
  };
12791
12823
 
12792
12824
  const pt = {
12825
+ 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]}],
12793
12826
  SH: [
12794
12827
  {
12795
12828
  name: "Férias de Natal",
@@ -12841,11 +12874,12 @@
12841
12874
  name: "Fim das aulas",
12842
12875
  2028: [6,30,6,30],
12843
12876
  },
12844
- ]
12877
+ ],
12878
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=38.7223&lon=-9.1393&zoom=18&addressdetails=1&accept-language=pt,en"
12845
12879
  };
12846
12880
 
12847
12881
  const ro = {
12848
- 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]}],
12882
+ 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]}],
12849
12883
  SH: [
12850
12884
  {
12851
12885
  name: "Vacanța de iarnă",
@@ -13385,6 +13419,7 @@
13385
13419
  };
13386
13420
 
13387
13421
  const rs = {
13422
+ 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]}],
13388
13423
  SH: [
13389
13424
  {
13390
13425
  name: "Зимски распуст",
@@ -13428,7 +13463,8 @@
13428
13463
  name: "Сретењски распуст",
13429
13464
  2026: [2,16,2,20],
13430
13465
  },
13431
- ]
13466
+ ],
13467
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=44.8176&lon=20.4569&zoom=18&addressdetails=1&accept-language=sr,en"
13432
13468
  };
13433
13469
 
13434
13470
  const ru = {
@@ -13583,6 +13619,7 @@
13583
13619
  2024: [5,3,5,3],
13584
13620
  },
13585
13621
  ],
13622
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=46.0569&lon=14.5058&zoom=18&addressdetails=1&accept-language=sl,en",
13586
13623
  "vzhodne regije": {
13587
13624
  SH: [
13588
13625
  {
@@ -13614,7 +13651,7 @@
13614
13651
  };
13615
13652
 
13616
13653
  const sk = {
13617
- 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]}],
13654
+ 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]}],
13618
13655
  "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=48.7411522&lon=19.4528646&zoom=18&addressdetails=1&accept-language=sk,en",
13619
13656
  "Banskobystrický kraj": {
13620
13657
  SH: [
@@ -14123,6 +14160,7 @@
14123
14160
  };
14124
14161
 
14125
14162
  const sm = {
14163
+ 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]}],
14126
14164
  SH: [
14127
14165
  {
14128
14166
  name: "Vacanze Natalizie",
@@ -14157,11 +14195,13 @@
14157
14195
  name: "Termine lezioni",
14158
14196
  2026: [6,17,6,17],
14159
14197
  },
14160
- ]
14198
+ ],
14199
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=43.9424&lon=12.4578&zoom=18&addressdetails=1&accept-language=it,en"
14161
14200
  };
14162
14201
 
14163
14202
  const ua = {
14164
- 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]}]
14203
+ 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]}],
14204
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=50.4501&lon=30.5234&zoom=18&addressdetails=1&accept-language=uk,en"
14165
14205
  };
14166
14206
 
14167
14207
  const us = {
@@ -14468,6 +14508,7 @@
14468
14508
  };
14469
14509
 
14470
14510
  const za = {
14511
+ 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]}],
14471
14512
  SH: [
14472
14513
  {
14473
14514
  name: "Summer Break",
@@ -14524,10 +14565,15 @@
14524
14565
  2026: [9,25,9,25],
14525
14566
  2027: [4,26,4,26],
14526
14567
  },
14527
- ]
14568
+ ],
14569
+ "_nominatim_url": "https://nominatim.openstreetmap.org/reverse?format=json&lat=-25.7462&lon=28.1881&zoom=18&addressdetails=1&accept-language=en,af"
14528
14570
  };
14529
14571
 
14530
14572
  /**
14573
+ * SPDX-FileCopyrightText: © opening_hours.js contributors
14574
+ *
14575
+ * SPDX-License-Identifier: LGPL-3.0-only
14576
+ *
14531
14577
  * Holiday definitions for opening_hours.js
14532
14578
  *
14533
14579
  * All countries are now sourced from generated-openholidays.js
@@ -14560,11 +14606,13 @@
14560
14606
  fi: fi,
14561
14607
  fr: fr,
14562
14608
  gb: gb,
14609
+ ge: ge,
14563
14610
  gr: gr,
14564
14611
  hr: hr,
14565
14612
  hu: hu,
14566
14613
  ie: ie,
14567
14614
  it: it,
14615
+ je: je,
14568
14616
  jp: jp,
14569
14617
  li: li,
14570
14618
  lt: lt,
@@ -14646,6 +14694,9 @@
14646
14694
  "please use fallback rule":{ otherwise:"||" },
14647
14695
  "please use ok for missing data":{ "\\?":"" },
14648
14696
  "please use ok for ko":{ "→":"-",
14697
+ "‐":"-",
14698
+ "‑":"-",
14699
+ "‒":"-",
14649
14700
  "−":"-",
14650
14701
  "—":"-",
14651
14702
  "ー":"-",
@@ -20647,6 +20698,12 @@
20647
20698
  data.ru;
20648
20699
  data.it;
20649
20700
 
20701
+ /**
20702
+ * SPDX-FileCopyrightText: © 2025 Kristjan ESPERANTO <https://github.com/KristjanESPERANTO>
20703
+ *
20704
+ * SPDX-License-Identifier: LGPL-3.0-only
20705
+ */
20706
+
20650
20707
  const resources = data;
20651
20708
 
20652
20709
  // Simple i18n object compatible with the minimal features used in src/index.js
@@ -20808,6 +20865,7 @@
20808
20865
  'opening_hours:.+' : { 'mode' : 0, },
20809
20866
  '.+:opening_hours' : { 'mode' : 0, },
20810
20867
  '.+:opening_hours:.+' : { 'mode' : 0, },
20868
+ '.+:conditional' : { 'mode' : 0, },
20811
20869
  'smoking_hours' : { 'mode' : 0, },
20812
20870
  'service_times' : { 'mode' : 2, },
20813
20871
  'happy_hours' : { 'mode' : 0, },
@@ -20984,7 +21042,7 @@
20984
21042
  throw t('nothing');
20985
21043
  }
20986
21044
 
20987
- const parsing_warnings = []; // Elements are fed into function formatWarnErrorMessage(nrule, at, message)
21045
+ const parsing_warnings = []; // Elements are arrays [nrule, at, message, tokens_to_use?] fed into formatWarnErrorMessage().
20988
21046
  let done_with_warnings = false; // The functions which returns warnings can be called multiple times.
20989
21047
  let done_with_selector_reordering = false;
20990
21048
  let done_with_selector_reordering_warnings = false;
@@ -21172,9 +21230,13 @@
21172
21230
  /* Format warning or error message for the user. {{{
21173
21231
  *
21174
21232
  * :param nrule: Rule number starting with 0.
21175
- * :param at: Token position at which the issue occurred.
21233
+ * -1: error during tokenization, `at` is remaining value.length.
21234
+ * string: prettified value, `at` is a byte offset into it.
21235
+ * :param at: Token position. -1 means end of rule (no token at that position).
21176
21236
  * :param message: Human readable string with the message.
21177
- * :param tokens_to_use: List of token objects.
21237
+ * :param tokens_to_use: Optional. Defaults to `tokens`. Pass `new_tokens` from
21238
+ * getWarnings() because new_tokens can have more entries than tokens
21239
+ * when Additional Rules are present.
21178
21240
  * :returns: String with position of the warning or error marked for the user.
21179
21241
  */
21180
21242
  function formatWarnErrorMessage(nrule, at, message, tokens_to_use) {
@@ -21182,14 +21244,20 @@
21182
21244
  tokens_to_use = tokens;
21183
21245
  }
21184
21246
  // console.log(`Called formatWarnErrorMessage: ${nrule}, ${at}, ${message}`);
21185
- // FIXME: Change to new_tokens.
21186
21247
  if (typeof nrule === 'number') {
21187
- let pos = 0;
21188
- if (nrule === -1) { // Usage of rule index not required because we do have access to value.length.
21248
+ let pos;
21249
+ if (nrule === -1) {
21250
+ // at is remaining value.length at the point of the error.
21189
21251
  pos = value.length - at;
21190
- } else { // Issue occurred at a later time, position in string needs to be reconstructed.
21252
+ } else {
21253
+ if (typeof tokens_to_use[nrule] === 'undefined') {
21254
+ // Caller passed the wrong token array (tokens instead of new_tokens?).
21255
+ formatLibraryBugMessage('Bug in warning generation code: tokens_to_use[nrule] is undefined for nrule=' + nrule + '.');
21256
+ return value + ' <--- (' + message + ')';
21257
+ }
21191
21258
  if (typeof tokens_to_use[nrule][0][at] === 'undefined') {
21192
21259
  if (typeof tokens_to_use[nrule][0] !== 'undefined' && at === -1) {
21260
+ // at === -1: point to end of rule, use offset of next rule entry if available.
21193
21261
  pos = value.length;
21194
21262
  if (typeof tokens_to_use[nrule+1] === 'object' && typeof tokens_to_use[nrule+1][2] === 'number') {
21195
21263
  pos -= tokens_to_use[nrule+1][2];
@@ -21197,13 +21265,11 @@
21197
21265
  pos -= tokens_to_use[nrule][2];
21198
21266
  }
21199
21267
  } else {
21200
- // Given position is invalid.
21201
- //
21268
+ // Token position is out of range. Run real_test regularly to catch this.
21202
21269
  formatLibraryBugMessage('Bug in warning generation code which could not determine the exact position of the warning or error in value.');
21203
21270
  pos = value.length;
21204
21271
  if (typeof tokens_to_use[nrule][2] === 'number') {
21205
- // Fallback: Point to last token in the rule which caused the problem.
21206
- // Run real_test regularly to fix the problem before a user is confronted with it.
21272
+ // Fallback: point to last token in the rule which caused the problem.
21207
21273
  pos -= tokens_to_use[nrule][2];
21208
21274
  console.warn('Last token for rule: ' + JSON.stringify(tokens_to_use[nrule]));
21209
21275
  } else {
@@ -21223,6 +21289,7 @@
21223
21289
  } else if (typeof nrule === 'string') {
21224
21290
  return nrule.substring(0, at) + ' <--- (' + message + ')';
21225
21291
  }
21292
+ return message;
21226
21293
  }
21227
21294
  /* }}} */
21228
21295
 
@@ -21339,7 +21406,7 @@
21339
21406
  t('please use ok for ko', {'ko': tmp[0], 'ok': ok})]);
21340
21407
  }
21341
21408
  value = ok + value.substr(tmp[0].length);
21342
- } 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))) {
21409
+ } 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))) {
21343
21410
  /* Handle all remaining words and specific other characters with error tolerance.
21344
21411
  *
21345
21412
  * à|á: Word boundary does not work with Unicode chars: 'test à test'.match(/\bà\b/i)
@@ -21635,7 +21702,8 @@
21635
21702
  :
21636
21703
  t('selector multi 2b', {'what': t(selector_type + (/^(?:month|weekday)$/.test(selector_type) ? 's' : ' ranges'))})
21637
21704
  )
21638
- })]
21705
+ }),
21706
+ new_tokens]
21639
21707
  );
21640
21708
  done_with_selector_reordering = true; // Correcting the selector order makes no sense if this kind of issue exists.
21641
21709
  }
@@ -21646,7 +21714,7 @@
21646
21714
  && Object.keys(used_selectors[nrule]).length === 1
21647
21715
  ) {
21648
21716
  if (nrule !== 0) {
21649
- parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1, t('default state')]);
21717
+ parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1, t('default state'), new_tokens]);
21650
21718
  }
21651
21719
  /* }}} */
21652
21720
  /* Check if a rule (with state open) has no time selector {{{ */
@@ -21660,7 +21728,7 @@
21660
21728
  typeof used_selectors[nrule]['24/7'] === 'undefined'
21661
21729
  ) {
21662
21730
 
21663
- parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1, t('vague')]);
21731
+ parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1, t('vague'), new_tokens]);
21664
21732
  }
21665
21733
  }
21666
21734
  /* }}} */
@@ -21669,7 +21737,7 @@
21669
21737
  && new_tokens[nrule][0][used_selectors[nrule].comment[0]][0].length === 0
21670
21738
  ) {
21671
21739
 
21672
- parsing_warnings.push([nrule, used_selectors[nrule].comment[0], t('empty comment')]);
21740
+ parsing_warnings.push([nrule, used_selectors[nrule].comment[0], t('empty comment'), new_tokens]);
21673
21741
  }
21674
21742
  /* }}} */
21675
21743
  /* Check for valid use of <separator_for_readability> {{{ */
@@ -21684,7 +21752,8 @@
21684
21752
 
21685
21753
  if (new_tokens[nrule][0][used_selectors[nrule][selector_type][0]][0] === ':') {
21686
21754
  parsing_warnings.push([nrule, used_selectors[nrule][selector_type][0],
21687
- t('separator_for_readability')
21755
+ t('separator_for_readability'),
21756
+ new_tokens
21688
21757
  ]);
21689
21758
  }
21690
21759
  }
@@ -21778,6 +21847,7 @@
21778
21847
  && (
21779
21848
  (
21780
21849
  typeof oh_key === 'string'
21850
+ && oh_regex_key
21781
21851
  && osm_tag_defaults[oh_regex_key]['warn_for_PH_missing']
21782
21852
  )
21783
21853
  || (typeof oh_key !== 'string')
@@ -22922,6 +22992,11 @@
22922
22992
  // The target day is in the next month. If the target day without the added days is not in this month
22923
22993
  if (target_day_this_month.getTime() >= start_of_next_month.getTime())
22924
22994
  return [false, start_of_next_month];
22995
+ } else if (target_day_this_month.getTime() >= start_of_next_month.getTime()) {
22996
+ // The nth weekday overflows to next month (e.g. no 5th Sunday in February),
22997
+ // but negative add_days pulled the result back into this month.
22998
+ // The nth weekday still does not exist this month, so do not match.
22999
+ return [false, start_of_next_month];
22925
23000
  }
22926
23001
 
22927
23002
  let target_day_with_added_moved_days_this_month;
@@ -23663,15 +23738,116 @@
23663
23738
  }
23664
23739
  /* }}} */
23665
23740
 
23741
+ // Shift rule support for transferable holidays. {{{
23742
+
23743
+ const weekday_name_to_num = {
23744
+ sunday: 0, monday: 1, tuesday: 2, wednesday: 3,
23745
+ thursday: 4, friday: 5, saturday: 6,
23746
+ };
23747
+
23748
+ const shift_rule_cache = Object.create(null);
23749
+
23750
+ /* Compile a shift_rule string into a (Date) => Date shifter.
23751
+ *
23752
+ * A `shift_rule` field on a holiday definition moves the holiday’s date
23753
+ * depending on the weekday it falls on. The syntax is a subset of the
23754
+ * date-holidays DSL: chained `if … then …` clauses, first match wins,
23755
+ * unmatched dates stay unchanged.
23756
+ *
23757
+ * Format:
23758
+ * “if <wd>[,<wd>...] then <next|previous> <wd> [if … then … <wd>]*”
23759
+ *
23760
+ * Collision behaviour: if the shifted date would land on another
23761
+ * non-shifted holiday in the same year, the holiday keeps its original
23762
+ * date instead.
23763
+ */
23764
+ function compileShiftRule(rule) {
23765
+ if (shift_rule_cache[rule]) {
23766
+ return shift_rule_cache[rule];
23767
+ }
23768
+ const clauses = parseShiftRule(rule);
23769
+ const shifter = function (date) {
23770
+ return applyShiftClauses(clauses, date);
23771
+ };
23772
+ shift_rule_cache[rule] = shifter;
23773
+ return shifter;
23774
+ }
23775
+
23776
+ /* Parse a shift_rule string into a list of clause objects.
23777
+ *
23778
+ * Each clause has the shape:
23779
+ * { from_wds: [<int>, ...], direction: "next"|"previous", target_wd: <int> }
23780
+ * where weekdays are 0–6 (Sunday–Saturday).
23781
+ */
23782
+ function parseShiftRule(rule) {
23783
+ function fail(detail) {
23784
+ throw formatLibraryBugMessage(
23785
+ 'shift_rule: ' + detail + ' in "' + rule + '"'
23786
+ );
23787
+ }
23788
+ function toWeekdayNum(name) {
23789
+ const n = name.trim();
23790
+ if (!(n in weekday_name_to_num)) {
23791
+ fail('unknown weekday "' + n + '"');
23792
+ }
23793
+ return weekday_name_to_num[n];
23794
+ }
23795
+
23796
+ const clause_regex = /if\s+([a-z,\s]+?)\s+then\s+(next|previous)\s+([a-z]+)/g;
23797
+ const clauses = [];
23798
+ let last_end = 0;
23799
+ let match;
23800
+ while ((match = clause_regex.exec(rule)) !== null) {
23801
+ // Any text before the first match or between matches must be blank.
23802
+ if (rule.slice(last_end, match.index).trim() !== '') {
23803
+ fail('cannot parse');
23804
+ }
23805
+ clauses.push({
23806
+ from_wds: match[1].split(',').map(toWeekdayNum),
23807
+ direction: match[2],
23808
+ target_wd: toWeekdayNum(match[3]),
23809
+ });
23810
+ last_end = clause_regex.lastIndex;
23811
+ }
23812
+ if (clauses.length === 0 || rule.slice(last_end).trim() !== '') {
23813
+ fail('cannot parse');
23814
+ }
23815
+ return clauses;
23816
+ }
23817
+
23818
+ /* Apply the first matching clause to `date` and return the shifted date.
23819
+ * Returns the original date if no clause matches.
23820
+ */
23821
+ function applyShiftClauses(clauses, date) {
23822
+ const wd = date.getDay();
23823
+ for (let i = 0; i < clauses.length; i++) {
23824
+ const c = clauses[i];
23825
+ if (c.from_wds.indexOf(wd) === -1) continue;
23826
+
23827
+ // Distance to the target weekday, always in the range [1, 7].
23828
+ // The modulo alone could yield 0 when wd === target_wd, but the
23829
+ // from_wds guard above prevents that for well-formed rules.
23830
+ // The "|| 7" is a safety net: if it ever did produce 0 we would
23831
+ // shift by a full week rather than silently not moving the date.
23832
+ let diff;
23833
+ if (c.direction === 'next') {
23834
+ diff = ((c.target_wd - wd + 7) % 7) || 7; // move forward
23835
+ } else {
23836
+ diff = -(((wd - c.target_wd + 7) % 7) || 7); // move backward
23837
+ }
23838
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate() + diff);
23839
+ }
23840
+ return date;
23841
+ }
23842
+
23666
23843
  function getApplyingHolidaysForYear(applying_holidays, year, add_days) {
23667
23844
  const movableDays = getMovableEventsForYear(year);
23668
23845
 
23669
- let sorted_holidays = [];
23670
- let next_holiday;
23671
-
23672
- applying_holidays.forEach(function (holiday_item) {
23846
+ /* Pass 1: resolve the base date of every holiday (no shift, no add_days). */
23847
+ const resolved = applying_holidays.map(function (holiday_item) {
23848
+ let base_date;
23673
23849
  if ('fixed_date' in holiday_item) {
23674
- next_holiday = new Date(year,
23850
+ base_date = new Date(year,
23675
23851
  holiday_item.fixed_date[0] - 1,
23676
23852
  holiday_item.fixed_date[1]
23677
23853
  );
@@ -23680,27 +23856,49 @@
23680
23856
  if (!selected_movableDay) {
23681
23857
  throw t('movable no formula', {'name': holiday_item.name});
23682
23858
  }
23683
- let date_offset = 0;
23684
- if ('offset' in holiday_item) {
23685
- date_offset = holiday_item.offset;
23686
- }
23687
- next_holiday = new Date(selected_movableDay.getFullYear(),
23859
+ const date_offset = 'offset' in holiday_item ? holiday_item.offset : 0;
23860
+ base_date = new Date(selected_movableDay.getFullYear(),
23688
23861
  selected_movableDay.getMonth(),
23689
23862
  selected_movableDay.getDate() + date_offset
23690
23863
  );
23691
- if (year !== next_holiday.getFullYear()) {
23864
+ if (year !== base_date.getFullYear()) {
23692
23865
  throw t('movable not in year', {
23693
23866
  'name': holiday_item.variable_date, 'days': date_offset});
23694
23867
  }
23695
23868
  } else {
23696
23869
  throw formatLibraryBugMessage('Unexpected object: ' + JSON.stringify(holiday_item, null, ' '));
23697
23870
  }
23871
+ return { date: base_date, holiday: holiday_item };
23872
+ });
23698
23873
 
23699
- if (add_days[0]) {
23700
- next_holiday.setDate(next_holiday.getDate() + add_days[0]);
23874
+ /* Pass 2: apply shift_rule with collision detection.
23875
+ * Collisions are checked against the nominal (non-shifted, no-add_days)
23876
+ * dates of all non-shifted holidays — never against other shifted ones,
23877
+ * to keep the result deterministic regardless of declaration order.
23878
+ */
23879
+ const fixed_times = new Set();
23880
+ resolved.forEach(function (r) {
23881
+ if (!r.holiday.shift_rule) {
23882
+ fixed_times.add(r.date.getTime());
23701
23883
  }
23884
+ });
23885
+ resolved.forEach(function (r) {
23886
+ if (!r.holiday.shift_rule) return;
23887
+ const shifter = compileShiftRule(r.holiday.shift_rule);
23888
+ const shifted = shifter(r.date);
23889
+ if (shifted.getTime() === r.date.getTime()) return;
23890
+ // Keep original date on collision with a non-shifted holiday.
23891
+ if (fixed_times.has(shifted.getTime())) return;
23892
+ r.date = shifted;
23893
+ });
23702
23894
 
23703
- sorted_holidays.push([ next_holiday, holiday_item.name ]);
23895
+ /* Pass 3: apply add_days uniformly and sort. */
23896
+ let sorted_holidays = resolved.map(function (r) {
23897
+ let d = r.date;
23898
+ if (add_days[0]) {
23899
+ d = new Date(d.getFullYear(), d.getMonth(), d.getDate() + add_days[0]);
23900
+ }
23901
+ return [ d, r.holiday.name ];
23704
23902
  });
23705
23903
 
23706
23904
  sorted_holidays = sorted_holidays.sort(function(a,b){
@@ -23724,7 +23922,7 @@
23724
23922
  tokens[at][3] = 'year';
23725
23923
  for (; at < tokens.length; at++) {
23726
23924
  if (matchTokens(tokens, at, 'year')) {
23727
- let is_range = false,
23925
+ let is_range,
23728
23926
  has_period,
23729
23927
  period;
23730
23928
  if (matchTokens(tokens, at+1, '-', 'year', '/', 'number')) {
@@ -24682,11 +24880,20 @@
24682
24880
  /* }}} */
24683
24881
 
24684
24882
  /* getNextChange: Get time of next status change {{{ */
24883
+ /*
24884
+ * Return next visible state change (open/closed/unknown).
24885
+ * Skip comment-only boundaries; use getIterator(...).advance() for those.
24886
+ */
24685
24887
  this.getNextChange = function(date, maxdate) {
24686
24888
  const it = this.getIterator(date);
24687
- if (!it.advance(maxdate))
24688
- return undefined;
24689
- return it.getDate();
24889
+ const initial_state = it.getState();
24890
+ const initial_unknown = it.getUnknown();
24891
+ while (it.advance(maxdate)) {
24892
+ if (it.getState() !== initial_state || it.getUnknown() !== initial_unknown) {
24893
+ return it.getDate();
24894
+ }
24895
+ }
24896
+ return undefined;
24690
24897
  };
24691
24898
  /* }}} */
24692
24899