@venite/components 0.16.30 → 0.16.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/cjs/{book-1a92678a.js → book-b04f6553.js} +115 -3
  2. package/dist/cjs/{heading-5afc2b24.js → heading-1243cde5.js} +1 -1
  3. package/dist/cjs/{image-3bee3e73.js → image-7ff56371.js} +1 -1
  4. package/dist/cjs/ion-button_13.cjs.entry.js +2 -2
  5. package/dist/cjs/ion-card-content_6.cjs.entry.js +3 -3
  6. package/dist/cjs/ion-checkbox_3.cjs.entry.js +2 -2
  7. package/dist/cjs/ion-input_2.cjs.entry.js +2 -2
  8. package/dist/cjs/ion-segment_16.cjs.entry.js +7 -7
  9. package/dist/cjs/ldf-day-name_5.cjs.entry.js +307 -141
  10. package/dist/cjs/ldf-editable-add-block-menu.cjs.entry.js +8 -8
  11. package/dist/cjs/ldf-editable-condition-piece.cjs.entry.js +2 -2
  12. package/dist/cjs/ldf-editable-condition.cjs.entry.js +2 -2
  13. package/dist/cjs/ldf-editable-filter-documents.cjs.entry.js +3 -3
  14. package/dist/cjs/ldf-editable-lookup_2.cjs.entry.js +8 -8
  15. package/dist/cjs/ldf-editable-metadata.cjs.entry.js +8 -8
  16. package/dist/cjs/ldf-editable-preference-option.cjs.entry.js +2 -2
  17. package/dist/cjs/ldf-editable-preference.cjs.entry.js +2 -2
  18. package/dist/cjs/ldf-editable-preferences.cjs.entry.js +2 -2
  19. package/dist/cjs/ldf-editable-string-list.cjs.entry.js +2 -2
  20. package/dist/cjs/ldf-editor.cjs.entry.js +1 -1
  21. package/dist/cjs/{locale-d4e925b1.js → locale-13a47c0e.js} +2 -2
  22. package/dist/cjs/{option-a078d432.js → option-491b2cc7.js} +5 -1
  23. package/dist/cjs/{refrain-91fb446b.js → refrain-2089062b.js} +1 -1
  24. package/dist/cjs/{rubric-0afbe4c0.js → rubric-3ef36eea.js} +1 -1
  25. package/dist/cjs/{specific-class-76b4d343.js → specific-class-3e56392a.js} +5 -5
  26. package/dist/cjs/{text-5edb80f3.js → text-67a354ff.js} +1 -1
  27. package/dist/collection/components/day-name/day-name.i18n.es.json +265 -0
  28. package/dist/collection/components/day-name/day-name.js +18 -11
  29. package/dist/collection/components/day-name/dist/day-name.js +163 -0
  30. package/dist/collection/components/heading/dist/heading.js +5 -5
  31. package/dist/collection/components/heading/heading.js +5 -5
  32. package/dist/collection/components/text/dist/text.js +4 -3
  33. package/dist/collection/components/text/text.css +5 -0
  34. package/dist/collection/components/text/text.js +5 -4
  35. package/dist/collection/i18n/day-name.i18n.es.json +265 -0
  36. package/dist/collection/utils/dist/locale.js +82 -0
  37. package/dist/collection/utils/locale.js +5 -6
  38. package/dist/esm/{book-31b8cdde.js → book-4795ea34.js} +115 -3
  39. package/dist/esm/{heading-cc5ffa8a.js → heading-dedd87c7.js} +1 -1
  40. package/dist/esm/{image-c6a3f0c5.js → image-374f5ed7.js} +1 -1
  41. package/dist/esm/ion-button_13.entry.js +2 -2
  42. package/dist/esm/ion-card-content_6.entry.js +3 -3
  43. package/dist/esm/ion-checkbox_3.entry.js +2 -2
  44. package/dist/esm/ion-input_2.entry.js +2 -2
  45. package/dist/esm/ion-segment_16.entry.js +7 -7
  46. package/dist/esm/ldf-day-name_5.entry.js +303 -137
  47. package/dist/esm/ldf-editable-add-block-menu.entry.js +8 -8
  48. package/dist/esm/ldf-editable-condition-piece.entry.js +2 -2
  49. package/dist/esm/ldf-editable-condition.entry.js +2 -2
  50. package/dist/esm/ldf-editable-filter-documents.entry.js +3 -3
  51. package/dist/esm/ldf-editable-lookup_2.entry.js +8 -8
  52. package/dist/esm/ldf-editable-metadata.entry.js +8 -8
  53. package/dist/esm/ldf-editable-preference-option.entry.js +2 -2
  54. package/dist/esm/ldf-editable-preference.entry.js +2 -2
  55. package/dist/esm/ldf-editable-preferences.entry.js +2 -2
  56. package/dist/esm/ldf-editable-string-list.entry.js +2 -2
  57. package/dist/esm/ldf-editor.entry.js +1 -1
  58. package/dist/esm/locale-de430ca1.js +6 -0
  59. package/dist/esm/{option-c16af13a.js → option-4e49f550.js} +5 -1
  60. package/dist/esm/{refrain-75a412cb.js → refrain-984f9410.js} +1 -1
  61. package/dist/esm/{rubric-f779c469.js → rubric-5c072ba1.js} +1 -1
  62. package/dist/esm/{specific-class-09c98625.js → specific-class-23168094.js} +5 -5
  63. package/dist/esm/{text-ed75fbd4.js → text-2ec5b6b3.js} +1 -1
  64. package/dist/ldf/i18n/day-name.i18n.es.json +265 -0
  65. package/dist/ldf/ldf.esm.js +1 -1
  66. package/dist/ldf/{p-c1a86b14.entry.js → p-0f706bcd.entry.js} +1 -1
  67. package/dist/ldf/{p-23af1bc3.entry.js → p-1411d9f8.entry.js} +1 -1
  68. package/dist/ldf/p-1d5e9bac.entry.js +1 -0
  69. package/dist/ldf/{p-7a9ab85c.entry.js → p-31dc4ea7.entry.js} +1 -1
  70. package/dist/ldf/p-44c8d30b.entry.js +1 -0
  71. package/dist/ldf/{p-d56dff05.js → p-47600061.js} +1 -1
  72. package/dist/ldf/p-49174004.js +1 -0
  73. package/dist/ldf/{p-0491d1d2.js → p-546bb0de.js} +0 -0
  74. package/dist/ldf/{p-94949614.entry.js → p-56ea465d.entry.js} +1 -1
  75. package/dist/ldf/{p-65ea7ab3.entry.js → p-5906d820.entry.js} +1 -1
  76. package/dist/ldf/{p-468d36d0.entry.js → p-791369ff.entry.js} +1 -1
  77. package/dist/ldf/{p-2c39ce94.entry.js → p-84ab4f0c.entry.js} +1 -1
  78. package/dist/ldf/{p-2ae548b3.entry.js → p-8af99fa3.entry.js} +1 -1
  79. package/dist/ldf/p-97ada7f4.js +1 -0
  80. package/dist/ldf/{p-f0de7628.entry.js → p-9e255008.entry.js} +1 -1
  81. package/dist/ldf/p-a2e30644.js +1 -0
  82. package/dist/ldf/p-a97ca6c2.js +1 -0
  83. package/dist/ldf/{p-005ad01b.entry.js → p-ada4d650.entry.js} +1 -1
  84. package/dist/ldf/{p-594fa9d4.entry.js → p-aeaa99ba.entry.js} +1 -1
  85. package/dist/ldf/{p-5b43e6be.js → p-b0ceb153.js} +1 -1
  86. package/dist/ldf/{p-c0ef6296.entry.js → p-c77ba7ad.entry.js} +1 -1
  87. package/dist/ldf/p-cb1922dc.js +1 -0
  88. package/dist/ldf/p-d9994330.js +1 -0
  89. package/dist/ldf/{p-fa191f47.entry.js → p-ebd887c2.entry.js} +1 -1
  90. package/dist/ldf/{p-9c1973a6.entry.js → p-fa135d5f.entry.js} +1 -1
  91. package/dist/ldf/{p-03afc8cb.entry.js → p-fddee761.entry.js} +1 -1
  92. package/dist/types/components/text/text.d.ts +2 -2
  93. package/dist/types/components.d.ts +1 -1
  94. package/package.json +2 -2
  95. package/dist/esm/locale-ec8e14e6.js +0 -6
  96. package/dist/ldf/p-00e5ee6b.js +0 -1
  97. package/dist/ldf/p-021add56.entry.js +0 -1
  98. package/dist/ldf/p-476327d6.js +0 -1
  99. package/dist/ldf/p-4aa9a6f2.js +0 -1
  100. package/dist/ldf/p-65d26c45.js +0 -1
  101. package/dist/ldf/p-800a115c.entry.js +0 -1
  102. package/dist/ldf/p-a1729dbd.js +0 -1
  103. package/dist/ldf/p-e7a449d7.js +0 -1
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ exports.__esModule = true;
39
+ exports.getLocaleComponentStrings = exports.getComponentClosestLanguage = void 0;
40
+ function getComponentClosestLanguage(element) {
41
+ var closestElement = element.closest("[lang]");
42
+ return closestElement ? closestElement.lang : "en";
43
+ }
44
+ exports.getComponentClosestLanguage = getComponentClosestLanguage;
45
+ function fetchLocaleStringsForComponent(componentName, locale) {
46
+ return new Promise(function (resolve, reject) {
47
+ fetch("/i18n/" + componentName + ".i18n." + locale + ".json").then(function (result) {
48
+ if (result.ok)
49
+ resolve(result.json());
50
+ else
51
+ reject();
52
+ }, function () { return reject(); });
53
+ });
54
+ }
55
+ function getLocaleComponentStrings(element) {
56
+ return __awaiter(this, void 0, Promise, function () {
57
+ var componentName, componentLanguage, strings, e_1;
58
+ return __generator(this, function (_a) {
59
+ switch (_a.label) {
60
+ case 0:
61
+ componentName = element.tagName.toLowerCase().replace("ldf-", "");
62
+ componentLanguage = getComponentClosestLanguage(element);
63
+ _a.label = 1;
64
+ case 1:
65
+ _a.trys.push([1, 3, , 5]);
66
+ return [4 /*yield*/, fetchLocaleStringsForComponent(componentName, componentLanguage)];
67
+ case 2:
68
+ strings = _a.sent();
69
+ return [3 /*break*/, 5];
70
+ case 3:
71
+ e_1 = _a.sent();
72
+ console.warn("no locale for " + componentName + " (" + componentLanguage + "); loading default locale en.");
73
+ return [4 /*yield*/, fetchLocaleStringsForComponent(componentName, "en")];
74
+ case 4:
75
+ strings = _a.sent();
76
+ return [3 /*break*/, 5];
77
+ case 5: return [2 /*return*/, strings];
78
+ }
79
+ });
80
+ });
81
+ }
82
+ exports.getLocaleComponentStrings = getLocaleComponentStrings;
@@ -1,11 +1,10 @@
1
1
  export function getComponentClosestLanguage(element) {
2
- let closestElement = element.closest('[lang]');
3
- return closestElement ? closestElement.lang : 'en';
2
+ let closestElement = element.closest("[lang]");
3
+ return closestElement ? closestElement.lang : "en";
4
4
  }
5
5
  function fetchLocaleStringsForComponent(componentName, locale) {
6
6
  return new Promise((resolve, reject) => {
7
- fetch(`/i18n/${componentName}.i18n.${locale}.json`)
8
- .then((result) => {
7
+ fetch(`/i18n/${componentName}.i18n.${locale}.json`).then((result) => {
9
8
  if (result.ok)
10
9
  resolve(result.json());
11
10
  else
@@ -14,7 +13,7 @@ function fetchLocaleStringsForComponent(componentName, locale) {
14
13
  });
15
14
  }
16
15
  export async function getLocaleComponentStrings(element) {
17
- let componentName = element.tagName.toLowerCase().replace('ldf-', '');
16
+ let componentName = element.tagName.toLowerCase().replace("ldf-", "");
18
17
  let componentLanguage = getComponentClosestLanguage(element);
19
18
  let strings;
20
19
  try {
@@ -22,7 +21,7 @@ export async function getLocaleComponentStrings(element) {
22
21
  }
23
22
  catch (e) {
24
23
  console.warn(`no locale for ${componentName} (${componentLanguage}); loading default locale en.`);
25
- strings = await fetchLocaleStringsForComponent(componentName, 'en');
24
+ strings = await fetchLocaleStringsForComponent(componentName, "en");
26
25
  }
27
26
  return strings;
28
27
  }
@@ -24,6 +24,118 @@ function dateFromYMDString(ymd) {
24
24
  return dateFromYMD(y, m, d);
25
25
  }
26
26
 
27
+ /**
28
+ * LiturgicalDay represents a particular moment in the liturgical calendar,
29
+ * like "Monday in Holy Week" or "The Eve of the Epiphany."
30
+ */
31
+ class LiturgicalDay {
32
+ //** Constructor takes a Javascript object containing the class's properties */
33
+ constructor(data = {}) {
34
+ /** True if this moment is the evening. Used to indicate the eve of feasts. */
35
+ this.evening = false;
36
+ Object.assign(this, data);
37
+ }
38
+ /** Returns a native Date from the day's date string */
39
+ getDate() {
40
+ return dateFromYMDString(this.date);
41
+ }
42
+ /** Given a LiturgicalDay, returns a new LiturgicalDay that includes the feasts passed */
43
+ addHolyDays(holydays) {
44
+ var _a, _b, _c, _d;
45
+ const day = this;
46
+ holydays = holydays
47
+ // filter out eves if it's not evening
48
+ .filter((feast) => !feast.eve || this.evening)
49
+ // filter out days that are supposed to stop after a certain Sunday
50
+ // viz., the 1979 daily lectionary for January 8, 9, 10, 11, etc., stops at the 1st Sunday after the Epiphany
51
+ .filter((feast) => feast.stops_at_sunday !== day.week.slug)
52
+ .map((feast) => {
53
+ // if a feast has an `evening` field and it's evening, use that
54
+ if (feast.hasOwnProperty('evening') && this.evening == true) {
55
+ return feast.evening;
56
+ }
57
+ // if a feast has a `morning` field and it's morning, use that
58
+ else if (feast.hasOwnProperty('morning') && this.evening == false) {
59
+ return feast.morning;
60
+ }
61
+ // if a feast is the eve of something and it's evening, use that feast
62
+ else if (feast && feast.eve && this.evening == true) {
63
+ return feast;
64
+ }
65
+ // if none of these, just return the feast
66
+ else {
67
+ return feast;
68
+ }
69
+ })
70
+ .filter((feast) => !!feast);
71
+ // Determine whether a holy day takes precedence over the ordinary day
72
+ const observed = this.observedDay(this, (this.holy_days || new Array()).concat(holydays));
73
+ // overwrite the day's slug with the observed day's slug if they differ
74
+ const holy_day_rank = Number((_b = (_a = observed) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.rank), holy_day_is_observed = (observed === null || observed === void 0 ? void 0 : observed.slug) && ((observed === null || observed === void 0 ? void 0 : observed.slug) !== day.slug || holy_day_rank > 2), slug = holy_day_is_observed && holy_day_rank > 2 ? observed.slug : day.slug;
75
+ let propers = this.propers;
76
+ if (slug !== this.slug) {
77
+ propers = slug;
78
+ }
79
+ const color = observed.color || this.color, collect = observed.collect || this.collect, season = observed.season || this.season, octave = (_d = (_c = (this.holy_days || [])) === null || _c === void 0 ? void 0 : _c.concat(holydays)) === null || _d === void 0 ? void 0 : _d.map((holyday) => holyday.octave).filter((octave) => Boolean(octave)).reduce((acc, curr) => (acc ? acc : curr || acc), undefined);
80
+ return new LiturgicalDay(Object.assign(Object.assign({}, this), { slug, propers: holy_day_is_observed && holy_day_rank > 2 ? (observed === null || observed === void 0 ? void 0 : observed.propers) || (observed === null || observed === void 0 ? void 0 : observed.slug) : propers, color,
81
+ season,
82
+ octave,
83
+ collect, holy_days: (this.holy_days || new Array()).concat(holydays), holy_day_observed: holy_day_is_observed ? observed : this.holy_day_observed }));
84
+ }
85
+ /** Given a `LiturgicalDay` and a set of `HolyDay`s, it returns whichever option takes precedence */
86
+ observedDay(day, holydays) {
87
+ // rank: Principal Feast (5), Sunday (4), Holy Day (3), random other days (2), ferial weekday (1)
88
+ function getRank(item, type) {
89
+ var _a;
90
+ // ranked items => go with rank
91
+ if (type == 'holyday') {
92
+ return ((_a = item === null || item === void 0 ? void 0 : item.type) === null || _a === void 0 ? void 0 : _a.rank) || 2;
93
+ }
94
+ else {
95
+ // if `day.date` is defined, used it to generate a date
96
+ // otherwise, use the current date
97
+ const date = day.date ? dateFromYMDString(day.date) : dateOnly(new Date());
98
+ // Sundays => 4
99
+ if (date.getDay() == 0) {
100
+ return 4;
101
+ }
102
+ // weekdays => 1
103
+ else {
104
+ return 1;
105
+ }
106
+ }
107
+ }
108
+ const sorted = holydays
109
+ .map((holyday) => ({ rank: getRank(holyday, 'holyday'), obj: holyday }))
110
+ .concat({ rank: getRank(day, 'weekday'), obj: day })
111
+ .sort((a, b) => {
112
+ // equal rank => choose earlier feast (probably )
113
+ if (a.rank === b.rank && a.obj.mmdd && b.obj.mmdd) {
114
+ const [bMM, bDD] = b.obj.mmdd.split('/'), [aMM, aDD] = a.obj.mmdd.split('/'), bDate = new Date(), aDate = new Date();
115
+ bDate.setMonth(parseInt(bMM) - 1);
116
+ bDate.setDate(parseInt(bDD));
117
+ aDate.setMonth(parseInt(aMM) - 1);
118
+ aDate.setDate(parseInt(aDD));
119
+ return a.obj.mmdd === b.obj.mmdd && a.obj.kalendar !== b.obj.kalendar
120
+ ? a.obj.kalendar === day.kalendar
121
+ ? -1
122
+ : 1
123
+ : aDate.getTime() - bDate.getTime();
124
+ }
125
+ else {
126
+ return b.rank - a.rank;
127
+ }
128
+ });
129
+ return Object.assign({}, sorted[0].obj);
130
+ }
131
+ // whether this day is ranked as a Major Feast
132
+ isFeast() {
133
+ var _a, _b, _c, _d, _e, _f, _g, _h;
134
+ const isSunday = this.getDate().getDay() === 0, hasRank = (((_b = (_a = this.holy_day_observed) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.rank) || 1) >= 3, holyWeek = ((_c = this.slug) === null || _c === void 0 ? void 0 : _c.includes('holy-week')) || ((_d = this.slug) === null || _d === void 0 ? void 0 : _d.includes('palm-sunday')), ashWednesdayWeek = (_e = this.slug) === null || _e === void 0 ? void 0 : _e.includes('last-epiphany'), ascensionWeek = (_f = this.slug) === null || _f === void 0 ? void 0 : _f.includes('6th-easter'), easterWeek = (_g = this.slug) === null || _g === void 0 ? void 0 : _g.includes('easter'), ember = (_h = this.season) === null || _h === void 0 ? void 0 : _h.includes('Ember');
135
+ return isSunday || (hasRank && !holyWeek && !easterWeek && !ashWednesdayWeek && !ascensionWeek && !ember);
136
+ }
137
+ }
138
+
27
139
  class Condition {
28
140
  //** Constructor takes a Javascript object containing the class's properties */
29
141
  constructor(data = {}) {
@@ -55,11 +167,11 @@ class Condition {
55
167
  }
56
168
  // `feastDay`
57
169
  if (this.hasOwnProperty('feastDay') && this.feastDay !== undefined) {
58
- const highestFeastRank = Math.max(
170
+ Math.max(
59
171
  // highest rank of holy days given
60
172
  ...(day.holy_days || [])
61
173
  .filter((a) => !!a) // exclude any null or undefined from array
62
- .map((a) => (a && a.type && a.type.rank ? a.type.rank : 3))), isSunday = dateFromYMDString(day.date).getDay() == 0, isFeast = highestFeastRank >= 3 || isSunday;
174
+ .map((a) => (a && a.type && a.type.rank ? a.type.rank : 3))); dateFromYMDString(day.date).getDay() == 0; const isFeast = new LiturgicalDay(day).isFeast();
63
175
  evaluatedConditions.push(isFeast == this.feastDay);
64
176
  }
65
177
  // `date`
@@ -279,4 +391,4 @@ var Book;
279
391
  Book["Bel"] = "Bel";
280
392
  })(Book || (Book = {}));
281
393
 
282
- export { Condition as C, LiturgicalDocument as L, Responsive as R, dateOnly as a, dateFromYMDString as d };
394
+ export { Condition as C, LiturgicalDocument as L, Responsive as R, LiturgicalDay as a, dateFromYMDString as d };
@@ -1,4 +1,4 @@
1
- import { L as LiturgicalDocument } from './book-31b8cdde.js';
1
+ import { L as LiturgicalDocument } from './book-4795ea34.js';
2
2
 
3
3
  const STYLES = ['text', 'day', 'date'];
4
4
  class Heading extends LiturgicalDocument {
@@ -1,4 +1,4 @@
1
- import { L as LiturgicalDocument } from './book-31b8cdde.js';
1
+ import { L as LiturgicalDocument } from './book-4795ea34.js';
2
2
 
3
3
  const STYLES = ['normal', 'slideshow', 'carousel'];
4
4
  /** Refrain represents a short text like the Gloria Patri, Hail Mary, or an Antiphon */
@@ -3,9 +3,9 @@ import { g as getIonMode$1, i as isPlatform, c as config } from './ionic-global-
3
3
  import { h as hasShadowDom, c as clamp, d as debounceEvent, r as raf } from './helpers-8c93393b.js';
4
4
  import { o as openURL, c as createColorClasses$1, h as hostContext } from './theme-74c22054.js';
5
5
  import { p as popoverController } from './overlays-06b43b65.js';
6
- import './book-31b8cdde.js';
6
+ import './book-4795ea34.js';
7
7
  import { C as Change } from './change-ea574d32.js';
8
- import { g as getComponentClosestLanguage } from './locale-ec8e14e6.js';
8
+ import { g as getComponentClosestLanguage } from './locale-de430ca1.js';
9
9
  import './hardware-back-button-b3b61715.js';
10
10
 
11
11
  const buttonIosCss = ":host{--overflow:hidden;--ripple-color:currentColor;--border-width:initial;--border-color:initial;--border-style:initial;--color-activated:var(--color);--color-focused:var(--color);--color-hover:var(--color);--box-shadow:none;display:inline-block;width:auto;color:var(--color);font-family:var(--ion-font-family, inherit);text-align:center;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;user-select:none;vertical-align:top;vertical-align:-webkit-baseline-middle;pointer-events:auto;font-kerning:none}:host(.button-disabled){cursor:default;opacity:0.5;pointer-events:none}:host(.button-solid){--background:var(--ion-color-primary, #3880ff);--color:var(--ion-color-primary-contrast, #fff)}:host(.button-outline){--border-color:var(--ion-color-primary, #3880ff);--background:transparent;--color:var(--ion-color-primary, #3880ff)}:host(.button-clear){--border-width:0;--background:transparent;--color:var(--ion-color-primary, #3880ff)}:host(.button-block){display:block}:host(.button-block) .button-native{margin-left:0;margin-right:0;display:block;width:100%;clear:both;contain:content}:host(.button-block) .button-native::after{clear:both}:host(.button-full){display:block}:host(.button-full) .button-native{margin-left:0;margin-right:0;display:block;width:100%;contain:content}:host(.button-full:not(.button-round)) .button-native{border-radius:0;border-right-width:0;border-left-width:0}.button-native{border-radius:var(--border-radius);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;display:block;position:relative;width:100%;height:100%;transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);outline:none;background:var(--background);line-height:1;box-shadow:var(--box-shadow);contain:layout style;cursor:pointer;opacity:var(--opacity);overflow:var(--overflow);z-index:0;box-sizing:border-box;appearance:none}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.button-native{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.button-native::-moz-focus-inner{border:0}.button-inner{display:flex;position:relative;flex-flow:row nowrap;flex-shrink:0;align-items:center;justify-content:center;width:100%;height:100%;z-index:1}::slotted(ion-icon){font-size:1.4em;pointer-events:none}::slotted(ion-icon[slot=start]){margin-left:-0.3em;margin-right:0.3em;margin-top:0;margin-bottom:0}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){::slotted(ion-icon[slot=start]){margin-left:unset;margin-right:unset;-webkit-margin-start:-0.3em;margin-inline-start:-0.3em;-webkit-margin-end:0.3em;margin-inline-end:0.3em}}::slotted(ion-icon[slot=end]){margin-left:0.3em;margin-right:-0.2em;margin-top:0;margin-bottom:0}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){::slotted(ion-icon[slot=end]){margin-left:unset;margin-right:unset;-webkit-margin-start:0.3em;margin-inline-start:0.3em;-webkit-margin-end:-0.2em;margin-inline-end:-0.2em}}::slotted(ion-icon[slot=icon-only]){font-size:1.8em}ion-ripple-effect{color:var(--ripple-color)}.button-native::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0}:host(.ion-activated){color:var(--color-activated)}:host(.ion-activated) .button-native::after{background:var(--background-activated);opacity:var(--background-activated-opacity)}:host(.ion-focused){color:var(--color-focused)}:host(.ion-focused) .button-native::after{background:var(--background-focused);opacity:var(--background-focused-opacity)}@media (any-hover: hover){:host(:hover){color:var(--color-hover)}:host(:hover) .button-native::after{background:var(--background-hover);opacity:var(--background-hover-opacity)}}:host(.button-solid.ion-color) .button-native{background:var(--ion-color-base);color:var(--ion-color-contrast)}:host(.button-outline.ion-color) .button-native{border-color:var(--ion-color-base);background:transparent;color:var(--ion-color-base)}:host(.button-clear.ion-color) .button-native{background:transparent;color:var(--ion-color-base)}:host(.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native{color:var(--ion-toolbar-color, var(--color))}:host(.button-outline.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native{border-color:var(--ion-toolbar-color, var(--color, var(--border-color)))}:host(.button-solid.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native{background:var(--ion-toolbar-color, var(--background));color:var(--ion-toolbar-background, var(--color))}:host{--border-radius:10px;--padding-top:0;--padding-bottom:0;--padding-start:1em;--padding-end:1em;--transition:background-color, opacity 100ms linear;margin-left:2px;margin-right:2px;margin-top:4px;margin-bottom:4px;height:2.8em;font-size:16px;font-weight:500;letter-spacing:-0.03em}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){:host{margin-left:unset;margin-right:unset;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px}}:host(.button-solid){--background-activated:var(--ion-color-primary-shade, #3171e0);--background-focused:var(--ion-color-primary-shade, #3171e0);--background-hover:var(--ion-color-primary-tint, #4c8dff);--background-activated-opacity:1;--background-focused-opacity:1;--background-hover-opacity:1}:host(.button-outline){--border-radius:10px;--border-width:1px;--border-style:solid;--background-activated:var(--ion-color-primary, #3880ff);--background-focused:var(--ion-color-primary, #3880ff);--background-hover:transparent;--background-focused-opacity:.1;--color-activated:var(--ion-color-primary-contrast, #fff)}:host(.button-clear){--background-activated:transparent;--background-focused:var(--ion-color-primary, #3880ff);--background-hover:transparent;--background-focused-opacity:.1;font-size:17px;font-weight:normal;letter-spacing:0}:host(.button-large){--border-radius:12px;--padding-top:0;--padding-start:1em;--padding-end:1em;--padding-bottom:0;height:2.8em;font-size:20px}:host(.button-small){--border-radius:6px;--padding-top:0;--padding-start:0.9em;--padding-end:0.9em;--padding-bottom:0;height:2.1em;font-size:13px}:host(.button-round){--border-radius:64px;--padding-top:0;--padding-start:26px;--padding-end:26px;--padding-bottom:0}:host(.button-strong){font-weight:600}:host(.button-clear.ion-activated){opacity:0.4}:host(.button-outline.ion-activated.ion-color) .button-native{color:var(--ion-color-contrast)}:host(.button-outline.ion-activated.ion-color) .button-native::after{background:var(--ion-color-base)}:host(.button-solid.ion-color.ion-activated) .button-native::after{background:var(--ion-color-shade)}:host(.button-outline.ion-focused.ion-color) .button-native,:host(.button-clear.ion-focused.ion-color) .button-native{color:var(--ion-color-base)}:host(.button-outline.ion-focused.ion-color) .button-native::after,:host(.button-clear.ion-focused.ion-color) .button-native::after{background:var(--ion-color-base)}:host(.button-solid.ion-color.ion-focused) .button-native::after{background:var(--ion-color-shade)}@media (any-hover: hover){:host(.button-clear:hover),:host(.button-outline:hover){opacity:0.6}:host(.button-clear.ion-color:hover) .button-native,:host(.button-outline.ion-color:hover) .button-native{color:var(--ion-color-base)}:host(.button-clear.ion-color:hover) .button-native::after,:host(.button-outline.ion-color:hover) .button-native::after{background:transparent}:host(.button-solid.ion-color:hover) .button-native::after{background:var(--ion-color-tint)}:host(:hover.button-solid.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native::after{background:#fff;opacity:0.1}}";
@@ -2,10 +2,10 @@ import { r as registerInstance, h, H as Host, f as forceUpdate, c as createEvent
2
2
  import { g as getIonMode } from './ionic-global-ef89a0a5.js';
3
3
  import { c as createColorClasses } from './theme-74c22054.js';
4
4
  import { f as alertController } from './overlays-06b43b65.js';
5
- import './book-31b8cdde.js';
6
- import { R as Refrain } from './refrain-75a412cb.js';
5
+ import './book-4795ea34.js';
6
+ import { R as Refrain } from './refrain-984f9410.js';
7
7
  import { C as Change } from './change-ea574d32.js';
8
- import { g as getComponentClosestLanguage } from './locale-ec8e14e6.js';
8
+ import { g as getComponentClosestLanguage } from './locale-de430ca1.js';
9
9
  import './hardware-back-button-b3b61715.js';
10
10
 
11
11
  const cardContentIosCss = "ion-card-content{display:block;position:relative}.card-content-ios{padding-left:20px;padding-right:20px;padding-top:20px;padding-bottom:20px;font-size:16px;line-height:1.4}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.card-content-ios{padding-left:unset;padding-right:unset;-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px}}.card-content-ios h1{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:24px;font-weight:normal}.card-content-ios h2{margin-left:0;margin-right:0;margin-top:2px;margin-bottom:2px;font-size:16px;font-weight:normal}.card-content-ios h3,.card-content-ios h4,.card-content-ios h5,.card-content-ios h6{margin-left:0;margin-right:0;margin-top:2px;margin-bottom:2px;font-size:14px;font-weight:normal}.card-content-ios p{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:14px}ion-card-header+.card-content-ios{padding-top:0}";
@@ -2,10 +2,10 @@ import { r as registerInstance, c as createEvent, h, H as Host, a as getElement
2
2
  import { g as getIonMode } from './ionic-global-ef89a0a5.js';
3
3
  import { f as findItemLabel, b as renderHiddenInput } from './helpers-8c93393b.js';
4
4
  import { c as createColorClasses, h as hostContext } from './theme-74c22054.js';
5
- import './book-31b8cdde.js';
5
+ import './book-4795ea34.js';
6
6
  import { C as Change } from './change-ea574d32.js';
7
7
  import { f as alertController } from './overlays-06b43b65.js';
8
- import { g as getComponentClosestLanguage } from './locale-ec8e14e6.js';
8
+ import { g as getComponentClosestLanguage } from './locale-de430ca1.js';
9
9
  import './hardware-back-button-b3b61715.js';
10
10
 
11
11
  const checkboxIosCss = ":host{--background-checked:var(--ion-color-primary, #3880ff);--border-color-checked:var(--ion-color-primary, #3880ff);--checkmark-color:var(--ion-color-primary-contrast, #fff);--checkmark-width:1;--transition:none;display:inline-block;position:relative;user-select:none;z-index:2}:host(.ion-color){--background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}button{left:0;top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;appearance:none;outline:none}[dir=rtl] button,:host-context([dir=rtl]) button{left:unset;right:unset;right:0}button::-moz-focus-inner{border:0}.checkbox-icon{border-radius:var(--border-radius);display:block;position:relative;width:100%;height:100%;transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:50%;--border-width:1px;--border-style:solid;--border-color:rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.23);--background:var(--ion-item-background, var(--ion-background-color, #fff));--size:26px;width:var(--size);height:var(--size)}:host(.checkbox-disabled){opacity:0.3}:host(.in-item){margin-left:0;margin-right:8px;margin-top:10px;margin-bottom:9px;display:block;position:static}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){:host(.in-item){margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:8px;margin-inline-end:8px}}:host(.in-item[slot=start]){margin-left:2px;margin-right:20px;margin-top:8px;margin-bottom:8px}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){:host(.in-item[slot=start]){margin-left:unset;margin-right:unset;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:20px;margin-inline-end:20px}}";
@@ -3,11 +3,11 @@ import { g as getIonMode } from './ionic-global-ef89a0a5.js';
3
3
  import { d as debounceEvent, f as findItemLabel } from './helpers-8c93393b.js';
4
4
  import { c as createColorClasses } from './theme-74c22054.js';
5
5
  import { D as Debounce } from './index-f08f6130.js';
6
- import './book-31b8cdde.js';
6
+ import './book-4795ea34.js';
7
7
  import { C as Cursor } from './cursor-0e47f111.js';
8
8
  import { C as Change } from './change-ea574d32.js';
9
9
  import { c as createCommonjsModule } from './_commonjsHelpers-ba3f0406.js';
10
- import { g as getComponentClosestLanguage } from './locale-ec8e14e6.js';
10
+ import { g as getComponentClosestLanguage } from './locale-de430ca1.js';
11
11
 
12
12
  const inputIosCss = ".sc-ion-input-ios-h{--placeholder-color:initial;--placeholder-font-style:initial;--placeholder-font-weight:initial;--placeholder-opacity:.5;--padding-top:0;--padding-end:0;--padding-bottom:0;--padding-start:0;--background:transparent;--color:initial;display:flex;position:relative;flex:1;align-items:center;width:100%;padding:0 !important;background:var(--background);color:var(--color);font-family:var(--ion-font-family, inherit);z-index:2}ion-item.sc-ion-input-ios-h:not(.item-label),ion-item:not(.item-label) .sc-ion-input-ios-h{--padding-start:0}.ion-color.sc-ion-input-ios-h{color:var(--ion-color-base)}.native-input.sc-ion-input-ios{border-radius:var(--border-radius);padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;display:inline-block;flex:1;width:100%;max-width:100%;max-height:100%;border:0;outline:none;background:transparent;box-sizing:border-box;appearance:none}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.native-input.sc-ion-input-ios{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.native-input.sc-ion-input-ios::placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-input.sc-ion-input-ios:-webkit-autofill{background-color:transparent}.native-input.sc-ion-input-ios:invalid{box-shadow:none}.native-input.sc-ion-input-ios::-ms-clear{display:none}.native-input[disabled].sc-ion-input-ios{opacity:0.4}.cloned-input.sc-ion-input-ios{left:0;top:0;position:absolute;pointer-events:none}[dir=rtl].sc-ion-input-ios .cloned-input.sc-ion-input-ios,[dir=rtl].sc-ion-input-ios-h .cloned-input.sc-ion-input-ios,[dir=rtl] .sc-ion-input-ios-h .cloned-input.sc-ion-input-ios{left:unset;right:unset;right:0}.input-clear-icon.sc-ion-input-ios{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;background-position:center;border:0;outline:none;background-color:transparent;background-repeat:no-repeat;visibility:hidden;appearance:none}.has-focus.has-value.sc-ion-input-ios-h .input-clear-icon.sc-ion-input-ios{visibility:visible}.has-focus.sc-ion-input-ios-h{pointer-events:none}.has-focus.sc-ion-input-ios-h input.sc-ion-input-ios,.has-focus.sc-ion-input-ios-h a.sc-ion-input-ios,.has-focus.sc-ion-input-ios-h button.sc-ion-input-ios{pointer-events:auto}.sc-ion-input-ios-h{--padding-top:10px;--padding-end:10px;--padding-bottom:10px;--padding-start:0;font-size:inherit}.item-label-stacked.sc-ion-input-ios-h,.item-label-stacked .sc-ion-input-ios-h,.item-label-floating.sc-ion-input-ios-h,.item-label-floating .sc-ion-input-ios-h{--padding-top:8px;--padding-bottom:8px;--padding-start:0px}.input-clear-icon.sc-ion-input-ios{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='var(--ion-color-step-600,%20%23666666)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\");width:30px;height:30px;background-size:18px}";
13
13
 
@@ -3,15 +3,15 @@ import { c as config, g as getIonMode } from './ionic-global-ef89a0a5.js';
3
3
  import { p as pointerCoord } from './helpers-8c93393b.js';
4
4
  import { c as createColorClasses, h as hostContext } from './theme-74c22054.js';
5
5
  import { f as alertController, l as loadingController, m as modalController, t as toastController } from './overlays-06b43b65.js';
6
- import { R as Responsive, L as LiturgicalDocument, d as dateFromYMDString } from './book-31b8cdde.js';
7
- import { B as BibleReading, L as Liturgy, M as Meditation, P as Psalm, R as ResponsivePrayer, a as Rubric } from './rubric-f779c469.js';
8
- import { H as Heading } from './heading-cc5ffa8a.js';
9
- import { v as versionToString, O as Option } from './option-c16af13a.js';
6
+ import { R as Responsive, L as LiturgicalDocument, d as dateFromYMDString } from './book-4795ea34.js';
7
+ import { B as BibleReading, L as Liturgy, M as Meditation, P as Psalm, R as ResponsivePrayer, a as Rubric } from './rubric-5c072ba1.js';
8
+ import { H as Heading } from './heading-dedd87c7.js';
9
+ import { v as versionToString, O as Option } from './option-4e49f550.js';
10
10
  import { C as Change } from './change-ea574d32.js';
11
- import { g as getComponentClosestLanguage } from './locale-ec8e14e6.js';
12
- import { I as Image } from './image-c6a3f0c5.js';
11
+ import { g as getComponentClosestLanguage } from './locale-de430ca1.js';
12
+ import { I as Image } from './image-374f5ed7.js';
13
13
  import { D as Debounce } from './index-f08f6130.js';
14
- import { R as Refrain } from './refrain-75a412cb.js';
14
+ import { R as Refrain } from './refrain-984f9410.js';
15
15
  import './hardware-back-button-b3b61715.js';
16
16
  import './_commonjsHelpers-ba3f0406.js';
17
17