@jjlmoya/utils-babies 1.2.0 → 1.4.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 (27) hide show
  1. package/package.json +2 -2
  2. package/src/tool/baby-feeding-calculator/bibliography.astro +8 -4
  3. package/src/tool/baby-feeding-calculator/component.astro +208 -177
  4. package/src/tool/baby-feeding-calculator/style.css +317 -229
  5. package/src/tool/baby-percentile-calculator/bibliography.astro +8 -4
  6. package/src/tool/baby-percentile-calculator/component.astro +98 -240
  7. package/src/tool/baby-percentile-calculator/i18n/en.ts +1 -0
  8. package/src/tool/baby-percentile-calculator/i18n/es.ts +1 -0
  9. package/src/tool/baby-percentile-calculator/i18n/fr.ts +1 -0
  10. package/src/tool/baby-percentile-calculator/index.ts +1 -0
  11. package/src/tool/baby-percentile-calculator/style.css +342 -268
  12. package/src/tool/baby-size-converter/bibliography.astro +8 -4
  13. package/src/tool/baby-size-converter/component.astro +221 -212
  14. package/src/tool/baby-size-converter/style.css +433 -263
  15. package/src/tool/fertile-days-estimator/bibliography.astro +8 -4
  16. package/src/tool/fertile-days-estimator/component.astro +202 -200
  17. package/src/tool/fertile-days-estimator/style.css +408 -270
  18. package/src/tool/pregnancy-calculator/bibliography.astro +8 -4
  19. package/src/tool/pregnancy-calculator/component.astro +50 -8
  20. package/src/tool/pregnancy-calculator/i18n/en.ts +8 -0
  21. package/src/tool/pregnancy-calculator/i18n/es.ts +8 -0
  22. package/src/tool/pregnancy-calculator/i18n/fr.ts +8 -0
  23. package/src/tool/pregnancy-calculator/index.ts +8 -0
  24. package/src/tool/pregnancy-calculator/style.css +351 -134
  25. package/src/tool/vaccination-calendar/bibliography.astro +8 -4
  26. package/src/tool/vaccination-calendar/component.astro +120 -124
  27. package/src/tool/vaccination-calendar/style.css +296 -209
@@ -4,138 +4,92 @@ import type { BabyPercentileCalculatorUI } from './index';
4
4
  interface Props { ui: BabyPercentileCalculatorUI; }
5
5
  const { ui } = Astro.props;
6
6
  ---
7
- <div id="baby-percentile-calculator-root" class="baby-percentile-calculator baby-percentile-calculator-boy" data-ui={JSON.stringify(ui)}>
8
- <div class="baby-percentile-calculator-main">
9
- <div class="baby-percentile-calculator-left">
10
- <span class="baby-percentile-calculator-section-marker">{ui.labelMeasurements}</span>
11
-
12
- <div class="baby-percentile-calculator-input-group">
13
- <label class="baby-percentile-calculator-input-label">{ui.labelSex}</label>
14
- <div class="baby-percentile-calculator-sex-selector">
15
- <button
16
- id="bpc-btn-boy"
17
- class="baby-percentile-calculator-sex-btn"
18
- data-sex="boy"
19
- data-active="true"
20
- type="button"
21
- >{ui.sexBoy}</button>
22
- <button
23
- id="bpc-btn-girl"
24
- class="baby-percentile-calculator-sex-btn"
25
- data-sex="girl"
26
- data-active="false"
27
- type="button"
28
- >{ui.sexGirl}</button>
7
+ <div id="bpc-root" class="bpc-card" data-ui={JSON.stringify(ui)}>
8
+ <div class="bpc-main">
9
+ <div class="bpc-left">
10
+ <span class="bpc-section-marker">{ui.labelMeasurements}</span>
11
+
12
+ <div class="bpc-input-group">
13
+ <label class="bpc-input-label">{ui.labelSex}</label>
14
+ <div class="bpc-sex-selector">
15
+ <button id="bpc-btn-boy" class="bpc-sex-btn bpc-active" data-sex="boy" type="button">{ui.sexBoy}</button>
16
+ <button id="bpc-btn-girl" class="bpc-sex-btn" data-sex="girl" type="button">{ui.sexGirl}</button>
29
17
  </div>
30
18
  </div>
31
19
 
32
- <div class="baby-percentile-calculator-input-group">
33
- <div class="baby-percentile-calculator-unit-nav">
34
- <button
35
- id="bpc-unit-months"
36
- class="baby-percentile-calculator-unit-tab"
37
- data-unit="months"
38
- data-active="true"
39
- type="button"
40
- >{ui.unitMonths}</button>
41
- <button
42
- id="bpc-unit-years"
43
- class="baby-percentile-calculator-unit-tab"
44
- data-unit="yearsMonths"
45
- data-active="false"
46
- type="button"
47
- >{ui.unitYearsMonths}</button>
20
+ <div class="bpc-input-group">
21
+ <div class="bpc-unit-nav">
22
+ <button id="bpc-unit-months" class="bpc-unit-tab bpc-active" data-unit="months" type="button">{ui.unitMonths}</button>
23
+ <button id="bpc-unit-years" class="bpc-unit-tab" data-unit="yearsMonths" type="button">{ui.unitYearsMonths}</button>
48
24
  </div>
49
25
  </div>
50
26
 
51
- <div class="baby-percentile-calculator-input-group">
52
- <div class="baby-percentile-calculator-stepper-box">
53
- <button id="bpc-step-minus-years" class="baby-percentile-calculator-btn-step" type="button" data-hidden="true" style="display:none;">-</button>
54
- <div id="bpc-years-view" class="baby-percentile-calculator-val-view" style="display:none;">
55
- <span id="bpc-years-val" class="baby-percentile-calculator-val-big">0</span>
56
- <span class="baby-percentile-calculator-val-sub">años</span>
27
+ <div class="bpc-input-group">
28
+ <div class="bpc-stepper-box">
29
+ <button id="bpc-step-minus-years" class="bpc-btn-step" type="button" style="display:none">-</button>
30
+ <div id="bpc-years-view" class="bpc-val-view" style="display:none">
31
+ <span id="bpc-years-val" class="bpc-val-big">0</span>
32
+ <span class="bpc-val-sub">{ui.labelYears}</span>
57
33
  </div>
58
- <button id="bpc-step-plus-years" class="baby-percentile-calculator-btn-step" type="button" data-hidden="true" style="display:none;">+</button>
34
+ <button id="bpc-step-plus-years" class="bpc-btn-step" type="button" style="display:none">+</button>
59
35
 
60
- <button id="bpc-step-minus" class="baby-percentile-calculator-btn-step" type="button">-</button>
61
- <div class="baby-percentile-calculator-val-view">
62
- <span id="bpc-age-val" class="baby-percentile-calculator-val-big">0</span>
63
- <span class="baby-percentile-calculator-val-sub">{ui.labelMonths}</span>
36
+ <button id="bpc-step-minus" class="bpc-btn-step" type="button">-</button>
37
+ <div class="bpc-val-view">
38
+ <span id="bpc-age-val" class="bpc-val-big">0</span>
39
+ <span class="bpc-val-sub">{ui.labelMonths}</span>
64
40
  </div>
65
- <button id="bpc-step-plus" class="baby-percentile-calculator-btn-step" type="button">+</button>
41
+ <button id="bpc-step-plus" class="bpc-btn-step" type="button">+</button>
42
+ </div>
43
+ <div style="padding: 0 11px;">
44
+ <input id="bpc-slider" class="bpc-slider" type="range" min="0" max="60" value="0" step="1" />
66
45
  </div>
67
- <input
68
- id="bpc-slider"
69
- class="baby-percentile-calculator-slider-line"
70
- type="range"
71
- min="0"
72
- max="60"
73
- value="0"
74
- step="1"
75
- />
76
46
  </div>
77
47
 
78
- <div class="baby-percentile-calculator-grid-2">
79
- <div class="baby-percentile-calculator-input-group">
80
- <label for="bpc-weight" class="baby-percentile-calculator-input-label">{ui.labelWeight}</label>
81
- <input
82
- id="bpc-weight"
83
- class="baby-percentile-calculator-num-input"
84
- type="number"
85
- min="1"
86
- max="30"
87
- step="0.1"
88
- placeholder="3.5"
89
- />
48
+ <div class="bpc-grid-2">
49
+ <div class="bpc-input-group">
50
+ <label for="bpc-weight" class="bpc-input-label">{ui.labelWeight}</label>
51
+ <input id="bpc-weight" class="bpc-num-input" type="number" min="1" max="30" step="0.1" placeholder="3.5" />
90
52
  </div>
91
- <div class="baby-percentile-calculator-input-group">
92
- <label for="bpc-height" class="baby-percentile-calculator-input-label">{ui.labelHeight}</label>
93
- <input
94
- id="bpc-height"
95
- class="baby-percentile-calculator-num-input"
96
- type="number"
97
- min="30"
98
- max="130"
99
- step="0.1"
100
- placeholder="50"
101
- />
53
+ <div class="bpc-input-group">
54
+ <label for="bpc-height" class="bpc-input-label">{ui.labelHeight}</label>
55
+ <input id="bpc-height" class="bpc-num-input" type="number" min="30" max="130" step="0.1" placeholder="50" />
102
56
  </div>
103
57
  </div>
104
58
 
105
- <div class="baby-percentile-calculator-history-actions">
106
- <button id="bpc-btn-save" class="baby-percentile-calculator-btn-secondary" type="button">{ui.btnAddHistory}</button>
107
- <button id="bpc-btn-clear" class="baby-percentile-calculator-btn-clear" type="button">{ui.btnClearHistory}</button>
59
+ <div class="bpc-history-actions">
60
+ <button id="bpc-btn-save" class="bpc-btn-secondary" type="button">{ui.btnAddHistory}</button>
61
+ <button id="bpc-btn-clear" class="bpc-btn-clear" type="button">{ui.btnClearHistory}</button>
108
62
  </div>
109
63
  </div>
110
64
 
111
- <div class="baby-percentile-calculator-right">
112
- <span class="baby-percentile-calculator-section-marker">{ui.labelDashboard}</span>
65
+ <div class="bpc-right">
66
+ <span class="bpc-section-marker">{ui.labelDashboard}</span>
113
67
 
114
- <div class="baby-percentile-calculator-res-grid">
115
- <div class="baby-percentile-calculator-res-item">
116
- <span class="baby-percentile-calculator-res-title">{ui.labelWeight2}</span>
117
- <span id="bpc-res-weight" class="baby-percentile-calculator-percent-val">—</span>
118
- <span id="bpc-res-weight-desc" class="baby-percentile-calculator-res-desc">{ui.labelCalculating}</span>
68
+ <div class="bpc-res-grid">
69
+ <div class="bpc-res-item">
70
+ <span class="bpc-res-title">{ui.labelWeight2}</span>
71
+ <span id="bpc-res-weight" class="bpc-percent-val">—</span>
72
+ <span id="bpc-res-weight-desc" class="bpc-res-desc">{ui.labelCalculating}</span>
119
73
  </div>
120
- <div class="baby-percentile-calculator-res-item">
121
- <span class="baby-percentile-calculator-res-title">{ui.labelHeight2}</span>
122
- <span id="bpc-res-height" class="baby-percentile-calculator-percent-val">—</span>
123
- <span id="bpc-res-height-desc" class="baby-percentile-calculator-res-desc">{ui.labelCalculating}</span>
74
+ <div class="bpc-res-item">
75
+ <span class="bpc-res-title">{ui.labelHeight2}</span>
76
+ <span id="bpc-res-height" class="bpc-percent-val">—</span>
77
+ <span id="bpc-res-height-desc" class="bpc-res-desc">{ui.labelCalculating}</span>
124
78
  </div>
125
- <div class="baby-percentile-calculator-res-item">
126
- <span class="baby-percentile-calculator-res-title">{ui.labelBMI}</span>
127
- <span id="bpc-res-bmi" class="baby-percentile-calculator-percent-val">—</span>
128
- <span id="bpc-res-bmi-desc" class="baby-percentile-calculator-res-desc">{ui.labelCalculating}</span>
79
+ <div class="bpc-res-item">
80
+ <span class="bpc-res-title">{ui.labelBMI}</span>
81
+ <span id="bpc-res-bmi" class="bpc-percent-val">—</span>
82
+ <span id="bpc-res-bmi-desc" class="bpc-res-desc">{ui.labelCalculating}</span>
129
83
  </div>
130
84
  </div>
131
85
 
132
- <div id="bpc-alert" class="baby-percentile-calculator-alert">{ui.alertOutOfRange}</div>
86
+ <div id="bpc-alert" class="bpc-alert-msg bpc-hidden">{ui.alertOutOfRange}</div>
133
87
 
134
- <div class="baby-percentile-calculator-chart-box">
88
+ <div class="bpc-chart-box">
135
89
  <canvas id="bpc-chart"></canvas>
136
90
  </div>
137
91
 
138
- <p class="baby-percentile-calculator-disclaimer">{ui.disclaimer}</p>
92
+ <p class="bpc-disclaimer">{ui.disclaimer}</p>
139
93
  </div>
140
94
  </div>
141
95
  </div>
@@ -144,45 +98,18 @@ const { ui } = Astro.props;
144
98
  import { calculatePercentile, getDescriptionKey, getDataSet, calcBMI, buildChartDatasets } from './logic';
145
99
  import { interpolateLMS } from './lmsData';
146
100
 
147
- const root = document.getElementById('baby-percentile-calculator-root') as HTMLElement;
101
+ const root = document.getElementById('bpc-root') as HTMLElement;
148
102
  const ui = JSON.parse(root.dataset.ui as string) as Record<string, string>;
149
103
 
150
- interface HistoryEntry {
151
- sex: string;
152
- age: number;
153
- weight: number;
154
- height: number;
155
- }
156
-
157
- interface State {
158
- sex: string;
159
- age: number;
160
- ageUnit: string;
161
- weight: number;
162
- height: number;
163
- history: HistoryEntry[];
164
- }
104
+ interface HistoryEntry { sex: string; age: number; weight: number; height: number; }
105
+ interface State { sex: string; age: number; ageUnit: string; weight: number; height: number; history: HistoryEntry[]; }
165
106
 
166
107
  const LS_KEY = 'jjlmoya-babies-percentile';
167
-
168
- const state: State = {
169
- sex: 'boy',
170
- age: 0,
171
- ageUnit: 'months',
172
- weight: 0,
173
- height: 0,
174
- history: [],
175
- };
176
-
108
+ const state: State = { sex: 'boy', age: 0, ageUnit: 'months', weight: 0, height: 0, history: [] };
177
109
  let chartInstance: { destroy: () => void; data: { datasets: object[] }; update: () => void } | null = null;
178
110
 
179
- function getEl(id: string): HTMLElement {
180
- return document.getElementById(id) as HTMLElement;
181
- }
182
-
183
- function getInput(id: string): HTMLInputElement {
184
- return document.getElementById(id) as HTMLInputElement;
185
- }
111
+ function getEl(id: string): HTMLElement { return document.getElementById(id) as HTMLElement; }
112
+ function getInput(id: string): HTMLInputElement { return document.getElementById(id) as HTMLInputElement; }
186
113
 
187
114
  function renderPercentiles(): void {
188
115
  const dataSet = getDataSet(state.sex);
@@ -198,10 +125,10 @@ const { ui } = Astro.props;
198
125
  resWeight.textContent = '—';
199
126
  resHeight.textContent = '—';
200
127
  resBmi.textContent = '—';
201
- resWeightDesc.textContent = ui['labelCalculating'] ?? null;
202
- resHeightDesc.textContent = ui['labelCalculating'] ?? null;
203
- resBmiDesc.textContent = ui['labelCalculating'] ?? null;
204
- alertEl.removeAttribute('data-visible');
128
+ resWeightDesc.textContent = ui['labelCalculating'] ?? '';
129
+ resHeightDesc.textContent = ui['labelCalculating'] ?? '';
130
+ resBmiDesc.textContent = ui['labelCalculating'] ?? '';
131
+ alertEl.classList.add('bpc-hidden');
205
132
  return;
206
133
  }
207
134
 
@@ -221,12 +148,8 @@ const { ui } = Astro.props;
221
148
  resHeightDesc.textContent = ui[getDescriptionKey(pH)] ?? '';
222
149
  resBmiDesc.textContent = ui[getDescriptionKey(pBmi)] ?? '';
223
150
 
224
- const outOfRange = pW < 3 || pW > 97 || pH < 3 || pH > 97;
225
- if (outOfRange) {
226
- alertEl.setAttribute('data-visible', 'true');
227
- } else {
228
- alertEl.removeAttribute('data-visible');
229
- }
151
+ if (pW < 3 || pW > 97 || pH < 3 || pH > 97) alertEl.classList.remove('bpc-hidden');
152
+ else alertEl.classList.add('bpc-hidden');
230
153
  }
231
154
 
232
155
  async function initChart(): Promise<void> {
@@ -240,10 +163,7 @@ const { ui } = Astro.props;
240
163
  responsive: true,
241
164
  maintainAspectRatio: true,
242
165
  plugins: { legend: { display: false } },
243
- scales: {
244
- x: { type: 'linear', min: 0, max: 60 },
245
- y: { type: 'linear' },
246
- },
166
+ scales: { x: { type: 'linear', min: 0, max: 60 }, y: { type: 'linear' } },
247
167
  },
248
168
  });
249
169
  }
@@ -257,8 +177,7 @@ const { ui } = Astro.props;
257
177
  function syncAgeDisplay(): void {
258
178
  const slider = getInput('bpc-slider');
259
179
  slider.value = String(state.age);
260
- getEl('bpc-age-val').textContent = String(state.age % 12);
261
-
180
+ getEl('bpc-age-val').textContent = String(state.ageUnit === 'yearsMonths' ? state.age % 12 : state.age);
262
181
  if (state.ageUnit === 'yearsMonths') {
263
182
  getEl('bpc-years-val').textContent = String(Math.floor(state.age / 12));
264
183
  }
@@ -273,116 +192,55 @@ const { ui } = Astro.props;
273
192
 
274
193
  function setSex(sex: string): void {
275
194
  state.sex = sex;
276
- const btnBoy = getEl('bpc-btn-boy');
277
- const btnGirl = getEl('bpc-btn-girl');
278
- btnBoy.setAttribute('data-active', sex === 'boy' ? 'true' : 'false');
279
- btnGirl.setAttribute('data-active', sex === 'girl' ? 'true' : 'false');
280
-
281
- if (sex === 'boy') {
282
- root.classList.add('baby-percentile-calculator-boy');
283
- } else {
284
- root.classList.remove('baby-percentile-calculator-boy');
285
- }
286
-
195
+ getEl('bpc-btn-boy').classList.toggle('bpc-active', sex === 'boy');
196
+ getEl('bpc-btn-girl').classList.toggle('bpc-active', sex === 'girl');
197
+ root.classList.toggle('bpc-boy', sex === 'boy');
287
198
  renderPercentiles();
288
199
  updateChart();
289
200
  }
290
201
 
291
202
  function setUnit(unit: string): void {
292
203
  state.ageUnit = unit;
293
- const tabMonths = getEl('bpc-unit-months');
294
- const tabYears = getEl('bpc-unit-years');
295
- tabMonths.setAttribute('data-active', unit === 'months' ? 'true' : 'false');
296
- tabYears.setAttribute('data-active', unit === 'yearsMonths' ? 'true' : 'false');
297
-
298
- const yearsControls = [
299
- getEl('bpc-step-minus-years'),
300
- getEl('bpc-step-plus-years'),
301
- getEl('bpc-years-view'),
302
- ];
303
-
304
- yearsControls.forEach(el => {
305
- if (unit === 'yearsMonths') {
306
- el.style.display = '';
307
- } else {
308
- el.style.display = 'none';
309
- }
310
- });
311
-
312
- const monthLabel = getEl('bpc-age-val').nextElementSibling as HTMLElement;
313
- if (monthLabel) {
314
- monthLabel.textContent = (unit === 'yearsMonths' ? ui['labelMonths'] : ui['labelMonths']) ?? null;
315
- }
316
-
204
+ getEl('bpc-unit-months').classList.toggle('bpc-active', unit === 'months');
205
+ getEl('bpc-unit-years').classList.toggle('bpc-active', unit === 'yearsMonths');
206
+ const yearsControls = [getEl('bpc-step-minus-years'), getEl('bpc-step-plus-years'), getEl('bpc-years-view')];
207
+ yearsControls.forEach(el => { el.style.display = unit === 'yearsMonths' ? '' : 'none'; });
317
208
  syncAgeDisplay();
318
209
  }
319
210
 
320
211
  function loadHistory(): void {
321
212
  try {
322
213
  const raw = localStorage.getItem(LS_KEY);
323
- if (raw) {
324
- const parsed = JSON.parse(raw) as HistoryEntry[];
325
- state.history = Array.isArray(parsed) ? parsed : [];
326
- }
327
- } catch {
328
- state.history = [];
329
- }
214
+ if (raw) { const parsed = JSON.parse(raw) as HistoryEntry[]; state.history = Array.isArray(parsed) ? parsed : []; }
215
+ } catch { state.history = []; }
330
216
  renderPercentiles();
331
217
  }
332
218
 
333
219
  function save(): void {
334
- const entry: HistoryEntry = {
335
- sex: state.sex,
336
- age: state.age,
337
- weight: state.weight,
338
- height: state.height,
339
- };
340
- state.history.push(entry);
341
- try {
342
- localStorage.setItem(LS_KEY, JSON.stringify(state.history));
343
- } catch { }
220
+ state.history.push({ sex: state.sex, age: state.age, weight: state.weight, height: state.height });
221
+ try { localStorage.setItem(LS_KEY, JSON.stringify(state.history)); } catch { }
344
222
  }
345
223
 
346
224
  function clearHistory(): void {
347
225
  state.history = [];
348
- try {
349
- localStorage.removeItem(LS_KEY);
350
- } catch { }
351
- }
352
-
353
- function bindEvents(): void {
354
- getEl('bpc-btn-boy').addEventListener('click', () => setSex('boy'));
355
- getEl('bpc-btn-girl').addEventListener('click', () => setSex('girl'));
356
-
357
- getEl('bpc-unit-months').addEventListener('click', () => setUnit('months'));
358
- getEl('bpc-unit-years').addEventListener('click', () => setUnit('yearsMonths'));
359
-
360
- getEl('bpc-step-minus').addEventListener('click', () => setAge(state.age - 1));
361
- getEl('bpc-step-plus').addEventListener('click', () => setAge(state.age + 1));
362
-
363
- getEl('bpc-step-minus-years').addEventListener('click', () => setAge(state.age - 12));
364
- getEl('bpc-step-plus-years').addEventListener('click', () => setAge(state.age + 12));
365
-
366
- getInput('bpc-slider').addEventListener('input', (e) => {
367
- const val = parseInt((e.target as HTMLInputElement).value, 10);
368
- setAge(val);
369
- });
370
-
371
- getInput('bpc-weight').addEventListener('input', (e) => {
372
- state.weight = parseFloat((e.target as HTMLInputElement).value) || 0;
373
- renderPercentiles();
374
- });
375
-
376
- getInput('bpc-height').addEventListener('input', (e) => {
377
- state.height = parseFloat((e.target as HTMLInputElement).value) || 0;
378
- renderPercentiles();
379
- });
380
-
381
- getEl('bpc-btn-save').addEventListener('click', () => save());
382
- getEl('bpc-btn-clear').addEventListener('click', () => clearHistory());
226
+ try { localStorage.removeItem(LS_KEY); } catch { }
383
227
  }
384
228
 
229
+ getEl('bpc-btn-boy').addEventListener('click', () => setSex('boy'));
230
+ getEl('bpc-btn-girl').addEventListener('click', () => setSex('girl'));
231
+ getEl('bpc-unit-months').addEventListener('click', () => setUnit('months'));
232
+ getEl('bpc-unit-years').addEventListener('click', () => setUnit('yearsMonths'));
233
+ getEl('bpc-step-minus').addEventListener('click', () => setAge(state.age - 1));
234
+ getEl('bpc-step-plus').addEventListener('click', () => setAge(state.age + 1));
235
+ getEl('bpc-step-minus-years').addEventListener('click', () => setAge(state.age - 12));
236
+ getEl('bpc-step-plus-years').addEventListener('click', () => setAge(state.age + 12));
237
+ getInput('bpc-slider').addEventListener('input', (e) => setAge(parseInt((e.target as HTMLInputElement).value, 10)));
238
+ getInput('bpc-weight').addEventListener('input', (e) => { state.weight = parseFloat((e.target as HTMLInputElement).value) || 0; renderPercentiles(); });
239
+ getInput('bpc-height').addEventListener('input', (e) => { state.height = parseFloat((e.target as HTMLInputElement).value) || 0; renderPercentiles(); });
240
+ getEl('bpc-btn-save').addEventListener('click', () => save());
241
+ getEl('bpc-btn-clear').addEventListener('click', () => clearHistory());
242
+
243
+ setSex('boy');
385
244
  loadHistory();
386
- bindEvents();
387
245
  initChart();
388
246
  </script>
@@ -106,6 +106,7 @@ export const content: BabyPercentileCalculatorLocaleContent = {
106
106
  labelHighRange: 'High range',
107
107
  alertOutOfRange: 'Value outside P3-P97 range. Please consult your pediatrician.',
108
108
  labelMonths: 'Months',
109
+ labelYears: 'Years',
109
110
  faqTitle: 'Frequently asked questions',
110
111
  bibliographyTitle: 'References',
111
112
  },
@@ -106,6 +106,7 @@ export const content: BabyPercentileCalculatorLocaleContent = {
106
106
  labelHighRange: 'Rango alto',
107
107
  alertOutOfRange: 'Valor fuera de los rangos P3-P97. Consulta con tu pediatra.',
108
108
  labelMonths: 'Meses',
109
+ labelYears: 'Años',
109
110
  faqTitle: 'Preguntas frecuentes',
110
111
  bibliographyTitle: 'Referencias',
111
112
  },
@@ -106,6 +106,7 @@ export const content: BabyPercentileCalculatorLocaleContent = {
106
106
  labelHighRange: 'Plage haute',
107
107
  alertOutOfRange: 'Valeur hors des plages P3-P97. Consultez votre pédiatre.',
108
108
  labelMonths: 'Mois',
109
+ labelYears: 'Années',
109
110
  faqTitle: 'Questions fréquentes',
110
111
  bibliographyTitle: 'Références',
111
112
  },
@@ -28,6 +28,7 @@ export interface BabyPercentileCalculatorUI {
28
28
  labelHighRange: string;
29
29
  alertOutOfRange: string;
30
30
  labelMonths: string;
31
+ labelYears: string;
31
32
  faqTitle: string;
32
33
  bibliographyTitle: string;
33
34
  }