@jjlmoya/utils-babies 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/package.json +67 -66
  2. package/src/category/i18n/de.ts +48 -0
  3. package/src/category/i18n/en.ts +10 -10
  4. package/src/category/i18n/fr.ts +10 -10
  5. package/src/category/i18n/id.ts +48 -0
  6. package/src/category/i18n/it.ts +48 -0
  7. package/src/category/i18n/ja.ts +48 -0
  8. package/src/category/i18n/ko.ts +48 -0
  9. package/src/category/i18n/nl.ts +48 -0
  10. package/src/category/i18n/pl.ts +48 -0
  11. package/src/category/i18n/pt.ts +48 -0
  12. package/src/category/i18n/ru.ts +48 -0
  13. package/src/category/i18n/sv.ts +48 -0
  14. package/src/category/i18n/tr.ts +48 -0
  15. package/src/category/i18n/zh.ts +48 -0
  16. package/src/category/index.ts +13 -1
  17. package/src/tests/faq_count.test.ts +1 -1
  18. package/src/tests/i18n_coverage.test.ts +36 -0
  19. package/src/tests/locale_completeness.test.ts +1 -1
  20. package/src/tests/schemas_fulfillment.test.ts +23 -0
  21. package/src/tests/seo_length.test.ts +1 -2
  22. package/src/tests/title_quality.test.ts +55 -0
  23. package/src/tool/baby-feeding-calculator/component.astro +40 -40
  24. package/src/tool/baby-feeding-calculator/i18n/de.ts +162 -0
  25. package/src/tool/baby-feeding-calculator/i18n/id.ts +162 -0
  26. package/src/tool/baby-feeding-calculator/i18n/it.ts +162 -0
  27. package/src/tool/baby-feeding-calculator/i18n/ja.ts +162 -0
  28. package/src/tool/baby-feeding-calculator/i18n/ko.ts +162 -0
  29. package/src/tool/baby-feeding-calculator/i18n/nl.ts +162 -0
  30. package/src/tool/baby-feeding-calculator/i18n/pl.ts +162 -0
  31. package/src/tool/baby-feeding-calculator/i18n/pt.ts +162 -0
  32. package/src/tool/baby-feeding-calculator/i18n/ru.ts +162 -0
  33. package/src/tool/baby-feeding-calculator/i18n/sv.ts +162 -0
  34. package/src/tool/baby-feeding-calculator/i18n/tr.ts +162 -0
  35. package/src/tool/baby-feeding-calculator/i18n/zh.ts +162 -0
  36. package/src/tool/baby-feeding-calculator/index.ts +12 -0
  37. package/src/tool/baby-percentile-calculator/component.astro +38 -38
  38. package/src/tool/baby-percentile-calculator/i18n/de.ts +245 -0
  39. package/src/tool/baby-percentile-calculator/i18n/id.ts +245 -0
  40. package/src/tool/baby-percentile-calculator/i18n/it.ts +245 -0
  41. package/src/tool/baby-percentile-calculator/i18n/ja.ts +245 -0
  42. package/src/tool/baby-percentile-calculator/i18n/ko.ts +245 -0
  43. package/src/tool/baby-percentile-calculator/i18n/nl.ts +245 -0
  44. package/src/tool/baby-percentile-calculator/i18n/pl.ts +245 -0
  45. package/src/tool/baby-percentile-calculator/i18n/pt.ts +245 -0
  46. package/src/tool/baby-percentile-calculator/i18n/ru.ts +245 -0
  47. package/src/tool/baby-percentile-calculator/i18n/sv.ts +245 -0
  48. package/src/tool/baby-percentile-calculator/i18n/tr.ts +245 -0
  49. package/src/tool/baby-percentile-calculator/i18n/zh.ts +245 -0
  50. package/src/tool/baby-percentile-calculator/index.ts +12 -0
  51. package/src/tool/baby-size-converter/component.astro +42 -42
  52. package/src/tool/baby-size-converter/i18n/de.ts +203 -0
  53. package/src/tool/baby-size-converter/i18n/fr.ts +1 -1
  54. package/src/tool/baby-size-converter/i18n/id.ts +203 -0
  55. package/src/tool/baby-size-converter/i18n/it.ts +203 -0
  56. package/src/tool/baby-size-converter/i18n/ja.ts +203 -0
  57. package/src/tool/baby-size-converter/i18n/ko.ts +203 -0
  58. package/src/tool/baby-size-converter/i18n/nl.ts +203 -0
  59. package/src/tool/baby-size-converter/i18n/pl.ts +203 -0
  60. package/src/tool/baby-size-converter/i18n/pt.ts +203 -0
  61. package/src/tool/baby-size-converter/i18n/ru.ts +203 -0
  62. package/src/tool/baby-size-converter/i18n/sv.ts +203 -0
  63. package/src/tool/baby-size-converter/i18n/tr.ts +203 -0
  64. package/src/tool/baby-size-converter/i18n/zh.ts +203 -0
  65. package/src/tool/baby-size-converter/index.ts +12 -0
  66. package/src/tool/fertile-days-estimator/component.astro +14 -9
  67. package/src/tool/fertile-days-estimator/i18n/de.ts +262 -0
  68. package/src/tool/fertile-days-estimator/i18n/id.ts +262 -0
  69. package/src/tool/fertile-days-estimator/i18n/it.ts +262 -0
  70. package/src/tool/fertile-days-estimator/i18n/ja.ts +262 -0
  71. package/src/tool/fertile-days-estimator/i18n/ko.ts +262 -0
  72. package/src/tool/fertile-days-estimator/i18n/nl.ts +262 -0
  73. package/src/tool/fertile-days-estimator/i18n/pl.ts +262 -0
  74. package/src/tool/fertile-days-estimator/i18n/pt.ts +262 -0
  75. package/src/tool/fertile-days-estimator/i18n/ru.ts +262 -0
  76. package/src/tool/fertile-days-estimator/i18n/sv.ts +262 -0
  77. package/src/tool/fertile-days-estimator/i18n/tr.ts +262 -0
  78. package/src/tool/fertile-days-estimator/i18n/zh.ts +262 -0
  79. package/src/tool/fertile-days-estimator/index.ts +12 -0
  80. package/src/tool/pregnancy-calculator/component.astro +55 -48
  81. package/src/tool/pregnancy-calculator/i18n/de.ts +467 -0
  82. package/src/tool/pregnancy-calculator/i18n/en.ts +140 -0
  83. package/src/tool/pregnancy-calculator/i18n/es.ts +143 -3
  84. package/src/tool/pregnancy-calculator/i18n/fr.ts +143 -3
  85. package/src/tool/pregnancy-calculator/i18n/id.ts +467 -0
  86. package/src/tool/pregnancy-calculator/i18n/it.ts +467 -0
  87. package/src/tool/pregnancy-calculator/i18n/ja.ts +467 -0
  88. package/src/tool/pregnancy-calculator/i18n/ko.ts +467 -0
  89. package/src/tool/pregnancy-calculator/i18n/nl.ts +467 -0
  90. package/src/tool/pregnancy-calculator/i18n/pl.ts +467 -0
  91. package/src/tool/pregnancy-calculator/i18n/pt.ts +467 -0
  92. package/src/tool/pregnancy-calculator/i18n/ru.ts +467 -0
  93. package/src/tool/pregnancy-calculator/i18n/sv.ts +467 -0
  94. package/src/tool/pregnancy-calculator/i18n/tr.ts +467 -0
  95. package/src/tool/pregnancy-calculator/i18n/zh.ts +467 -0
  96. package/src/tool/pregnancy-calculator/index.ts +37 -1
  97. package/src/tool/pregnancy-calculator/milestones.ts +2 -146
  98. package/src/tool/vaccination-calendar/component.astro +26 -24
  99. package/src/tool/vaccination-calendar/i18n/de.ts +194 -0
  100. package/src/tool/vaccination-calendar/i18n/en.ts +20 -0
  101. package/src/tool/vaccination-calendar/i18n/es.ts +20 -0
  102. package/src/tool/vaccination-calendar/i18n/fr.ts +99 -75
  103. package/src/tool/vaccination-calendar/i18n/id.ts +194 -0
  104. package/src/tool/vaccination-calendar/i18n/it.ts +194 -0
  105. package/src/tool/vaccination-calendar/i18n/ja.ts +194 -0
  106. package/src/tool/vaccination-calendar/i18n/ko.ts +194 -0
  107. package/src/tool/vaccination-calendar/i18n/nl.ts +194 -0
  108. package/src/tool/vaccination-calendar/i18n/pl.ts +194 -0
  109. package/src/tool/vaccination-calendar/i18n/pt.ts +194 -0
  110. package/src/tool/vaccination-calendar/i18n/ru.ts +194 -0
  111. package/src/tool/vaccination-calendar/i18n/sv.ts +194 -0
  112. package/src/tool/vaccination-calendar/i18n/tr.ts +194 -0
  113. package/src/tool/vaccination-calendar/i18n/zh.ts +194 -0
  114. package/src/tool/vaccination-calendar/index.ts +33 -1
  115. package/src/tool/vaccination-calendar/logic.ts +39 -13
@@ -40,25 +40,25 @@ const { ui } = Astro.props;
40
40
  <select
41
41
  id="pc-dp-day"
42
42
  class="pregnancy-calculator-dp-select"
43
- aria-label="Día"
43
+ aria-label={ui.dayLabel}
44
44
  >
45
- <option value="">Día</option>
45
+ <option value="">{ui.dayLabel}</option>
46
46
  </select>
47
47
  <span class="pregnancy-calculator-dp-sep">/</span>
48
48
  <select
49
49
  id="pc-dp-month"
50
50
  class="pregnancy-calculator-dp-select"
51
- aria-label="Mes"
51
+ aria-label={ui.monthLabel}
52
52
  >
53
- <option value="">Mes</option>
53
+ <option value="">{ui.monthLabel}</option>
54
54
  </select>
55
55
  <span class="pregnancy-calculator-dp-sep">/</span>
56
56
  <select
57
57
  id="pc-dp-year"
58
58
  class="pregnancy-calculator-dp-select"
59
- aria-label="Año"
59
+ aria-label={ui.yearLabel}
60
60
  >
61
- <option value="">Año</option>
61
+ <option value="">{ui.yearLabel}</option>
62
62
  </select>
63
63
  </div>
64
64
  </div>
@@ -144,7 +144,7 @@ const { ui } = Astro.props;
144
144
  >
145
145
  <div class="pregnancy-calculator-mp-top-row">
146
146
  <span class="pregnancy-calculator-mp-badge" id="pc-mp-badge"
147
- >Semana —</span
147
+ >{ui.labelWeekBadge} —</span
148
148
  >
149
149
  <div class="pregnancy-calculator-analogy-tabs">
150
150
  <button class="pregnancy-calculator-at-btn" data-cat="fruits"
@@ -207,7 +207,7 @@ const { ui } = Astro.props;
207
207
 
208
208
  <script>
209
209
  import { getState, setState, subscribe } from "./store";
210
- import { getMilestone, timelineLabels } from "./milestones";
210
+ import { getMilestone } from "./milestones";
211
211
  import type { PCState } from "./store";
212
212
  import type { CalcResult } from "./calculator";
213
213
 
@@ -244,21 +244,11 @@ const { ui } = Astro.props;
244
244
  const mpAlert = root.querySelector("#pc-mp-alert") as HTMLElement;
245
245
  const tlScroll = root.querySelector("#pc-tl-scroll") as HTMLElement;
246
246
 
247
- const MONTHS_ES = [
248
- "Ene",
249
- "Feb",
250
- "Mar",
251
- "Abr",
252
- "May",
253
- "Jun",
254
- "Jul",
255
- "Ago",
256
- "Sep",
257
- "Oct",
258
- "Nov",
259
- "Dic",
260
- ];
261
- const fmtEdd = new Intl.DateTimeFormat("es-ES", {
247
+ const MONTHS = JSON.parse(ui.monthsData as string);
248
+ const timelineLabels = JSON.parse(ui.timelineLabelsData as string);
249
+ const milestones = JSON.parse(ui.milestonesData as string);
250
+
251
+ const fmtEdd = new Intl.DateTimeFormat(document.documentElement.lang || "es", {
262
252
  day: "numeric",
263
253
  month: "long",
264
254
  year: "numeric",
@@ -271,7 +261,7 @@ const { ui } = Astro.props;
271
261
  o.textContent = String(d).padStart(2, "0");
272
262
  dpDay.appendChild(o);
273
263
  }
274
- MONTHS_ES.forEach((m, i) => {
264
+ MONTHS.forEach((m: string, i: number) => {
275
265
  const o = document.createElement("option");
276
266
  o.value = String(i + 1);
277
267
  o.textContent = m;
@@ -426,7 +416,7 @@ const { ui } = Astro.props;
426
416
  }
427
417
 
428
418
  function renderMilestone(weeks: number, cat: string, partner: boolean): void {
429
- const ms = getMilestone(weeks);
419
+ const ms = getMilestone(weeks, milestones);
430
420
  mpBadge.textContent = `${ui["labelWeekBadge"] ?? "Semana"} ${weeks}`;
431
421
  mpAnalogy.textContent =
432
422
  ms.analogies[cat as "fruits" | "geek" | "sweets"] ?? ms.analogies.fruits;
@@ -512,8 +502,8 @@ const { ui } = Astro.props;
512
502
  `DTSTART;VALUE=DATE:${y}${m}${d}`,
513
503
  `DTEND;VALUE=DATE:${y}${m}${d}`,
514
504
  `DTSTAMP:${stamp}`,
515
- "SUMMARY:Fecha Probable de Parto",
516
- "DESCRIPTION:Fecha estimada de parto calculada por jjlmoya",
505
+ `SUMMARY:${ui.icsSummary}`,
506
+ `DESCRIPTION:${ui.icsDescription}`,
517
507
  "END:VEVENT",
518
508
  "END:VCALENDAR",
519
509
  ];
@@ -521,7 +511,7 @@ const { ui } = Astro.props;
521
511
  const url = URL.createObjectURL(blob);
522
512
  const a = document.createElement("a");
523
513
  a.href = url;
524
- a.download = "fecha-parto.ics";
514
+ a.download = ui.icsFilename as string;
525
515
  a.click();
526
516
  URL.revokeObjectURL(url);
527
517
  }
@@ -658,7 +648,7 @@ const { ui } = Astro.props;
658
648
  --pc-bg-dark: #0f1923;
659
649
  --pc-text: #f1f5f9;
660
650
  --pc-text-muted: #94a3b8;
661
- --pc-text-dim: #64748b;
651
+ --pc-text-dim: #cbd5e1;
662
652
  --pc-border: rgba(255, 255, 255, 0.04);
663
653
  --pc-border-inner: rgba(255, 255, 255, 0.04);
664
654
  --pc-shadow: rgba(0, 0, 0, 0.4);
@@ -866,6 +856,11 @@ const { ui } = Astro.props;
866
856
  min-width: 0;
867
857
  }
868
858
 
859
+ :global(.theme-dark) .pregnancy-calculator-dp-select {
860
+ background-color: #0f1923;
861
+ color: #f1f5f9;
862
+ }
863
+
869
864
  .pregnancy-calculator-dp-sep {
870
865
  color: #cbd5e1;
871
866
  font-size: 1rem;
@@ -874,6 +869,10 @@ const { ui } = Astro.props;
874
869
  padding: 0 2px;
875
870
  }
876
871
 
872
+ :global(.theme-dark) .pregnancy-calculator-dp-sep {
873
+ color: #64748b;
874
+ }
875
+
877
876
  .pregnancy-calculator-cs-wrap {
878
877
  background: #fff;
879
878
  border-radius: 18px;
@@ -1436,7 +1435,15 @@ const { ui } = Astro.props;
1436
1435
  border-radius: 2px;
1437
1436
  }
1438
1437
 
1439
- .pregnancy-calculator-tl-row {
1438
+ :global(.theme-dark) .pregnancy-calculator-tl-scroll {
1439
+ scrollbar-color: #334155 transparent;
1440
+ }
1441
+
1442
+ :global(.theme-dark) .pregnancy-calculator-tl-scroll::-webkit-scrollbar-thumb {
1443
+ background: #334155;
1444
+ }
1445
+
1446
+ :global(.pregnancy-calculator-tl-row) {
1440
1447
  display: flex;
1441
1448
  align-items: flex-start;
1442
1449
  gap: 0.5rem;
@@ -1445,11 +1452,11 @@ const { ui } = Astro.props;
1445
1452
  transition: background 0.1s;
1446
1453
  }
1447
1454
 
1448
- .pregnancy-calculator-tl-row-current {
1455
+ :global(.pregnancy-calculator-tl-row-current) {
1449
1456
  background: var(--pc-tri-bg);
1450
1457
  }
1451
1458
 
1452
- .pregnancy-calculator-tl-line-col {
1459
+ :global(.pregnancy-calculator-tl-line-col) {
1453
1460
  display: flex;
1454
1461
  flex-direction: column;
1455
1462
  align-items: center;
@@ -1458,7 +1465,7 @@ const { ui } = Astro.props;
1458
1465
  padding-top: 0.2rem;
1459
1466
  }
1460
1467
 
1461
- .pregnancy-calculator-tl-dot {
1468
+ :global(.pregnancy-calculator-tl-dot) {
1462
1469
  width: 0.5rem;
1463
1470
  height: 0.5rem;
1464
1471
  border-radius: 50%;
@@ -1467,18 +1474,18 @@ const { ui } = Astro.props;
1467
1474
  transition: background 0.15s;
1468
1475
  }
1469
1476
 
1470
- .pregnancy-calculator-tl-row-past .pregnancy-calculator-tl-dot {
1477
+ :global(.pregnancy-calculator-tl-row-past .pregnancy-calculator-tl-dot) {
1471
1478
  background: var(--pc-tri-accent);
1472
1479
  }
1473
1480
 
1474
- .pregnancy-calculator-tl-row-current .pregnancy-calculator-tl-dot {
1481
+ :global(.pregnancy-calculator-tl-row-current .pregnancy-calculator-tl-dot) {
1475
1482
  background: var(--pc-tri-accent);
1476
1483
  box-shadow: 0 0 0 3px var(--pc-tri-glow);
1477
1484
  width: 0.625rem;
1478
1485
  height: 0.625rem;
1479
1486
  }
1480
1487
 
1481
- .pregnancy-calculator-tl-line {
1488
+ :global(.pregnancy-calculator-tl-line) {
1482
1489
  width: 2px;
1483
1490
  flex: 1;
1484
1491
  min-height: 1.25rem;
@@ -1486,34 +1493,34 @@ const { ui } = Astro.props;
1486
1493
  margin-top: 2px;
1487
1494
  }
1488
1495
 
1489
- .pregnancy-calculator-tl-row-past .pregnancy-calculator-tl-line {
1496
+ :global(.pregnancy-calculator-tl-row-past .pregnancy-calculator-tl-line) {
1490
1497
  background: var(--pc-tri-primary);
1491
1498
  }
1492
1499
 
1493
- .pregnancy-calculator-tl-info {
1500
+ :global(.pregnancy-calculator-tl-info) {
1494
1501
  display: flex;
1495
1502
  align-items: baseline;
1496
1503
  gap: 0.375rem;
1497
1504
  min-width: 0;
1498
1505
  }
1499
1506
 
1500
- .pregnancy-calculator-tl-num {
1507
+ :global(.pregnancy-calculator-tl-num) {
1501
1508
  font-size: 0.75rem;
1502
1509
  font-weight: 700;
1503
1510
  color: var(--pc-text-dim);
1504
1511
  flex-shrink: 0;
1505
1512
  }
1506
1513
 
1507
- .pregnancy-calculator-tl-row-past .pregnancy-calculator-tl-num {
1514
+ :global(.pregnancy-calculator-tl-row-past .pregnancy-calculator-tl-num) {
1508
1515
  color: var(--pc-tri-accent);
1509
1516
  }
1510
1517
 
1511
- .pregnancy-calculator-tl-row-current .pregnancy-calculator-tl-num {
1518
+ :global(.pregnancy-calculator-tl-row-current .pregnancy-calculator-tl-num) {
1512
1519
  color: var(--pc-tri-accent);
1513
1520
  font-size: 0.875rem;
1514
1521
  }
1515
1522
 
1516
- .pregnancy-calculator-tl-label {
1523
+ :global(.pregnancy-calculator-tl-label) {
1517
1524
  font-size: 0.6875rem;
1518
1525
  color: var(--pc-text-dim);
1519
1526
  white-space: nowrap;
@@ -1521,7 +1528,7 @@ const { ui } = Astro.props;
1521
1528
  text-overflow: ellipsis;
1522
1529
  }
1523
1530
 
1524
- .pregnancy-calculator-tl-row-current .pregnancy-calculator-tl-label {
1531
+ :global(.pregnancy-calculator-tl-row-current .pregnancy-calculator-tl-label) {
1525
1532
  color: var(--pc-tri-text);
1526
1533
  font-weight: 600;
1527
1534
  font-size: 0.75rem;
@@ -1556,20 +1563,20 @@ const { ui } = Astro.props;
1556
1563
  gap: 0.25rem;
1557
1564
  }
1558
1565
 
1559
- .pregnancy-calculator-tl-row {
1566
+ :global(.pregnancy-calculator-tl-row) {
1560
1567
  flex-direction: column;
1561
1568
  align-items: center;
1562
1569
  padding: 0.5rem 0.375rem;
1563
1570
  min-width: 3rem;
1564
1571
  }
1565
1572
 
1566
- .pregnancy-calculator-tl-line-col {
1573
+ :global(.pregnancy-calculator-tl-line-col) {
1567
1574
  flex-direction: row;
1568
1575
  width: auto;
1569
1576
  padding-top: 0;
1570
1577
  }
1571
1578
 
1572
- .pregnancy-calculator-tl-line {
1579
+ :global(.pregnancy-calculator-tl-line) {
1573
1580
  width: 1.25rem;
1574
1581
  height: 2px;
1575
1582
  min-height: 0;
@@ -1577,13 +1584,13 @@ const { ui } = Astro.props;
1577
1584
  margin-left: 2px;
1578
1585
  }
1579
1586
 
1580
- .pregnancy-calculator-tl-info {
1587
+ :global(.pregnancy-calculator-tl-info) {
1581
1588
  flex-direction: column;
1582
1589
  align-items: center;
1583
1590
  gap: 0.125rem;
1584
1591
  }
1585
1592
 
1586
- .pregnancy-calculator-tl-label {
1593
+ :global(.pregnancy-calculator-tl-label) {
1587
1594
  display: none;
1588
1595
  }
1589
1596