@jjlmoya/utils-health 1.1.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 (155) hide show
  1. package/package.json +60 -0
  2. package/src/category/i18n/en.ts +60 -0
  3. package/src/category/i18n/es.ts +60 -0
  4. package/src/category/i18n/fr.ts +60 -0
  5. package/src/category/index.ts +22 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +28 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +36 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +251 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +19 -0
  17. package/src/tests/locale_completeness.test.ts +42 -0
  18. package/src/tests/mocks/astro_mock.js +2 -0
  19. package/src/tests/no_h1_in_components.test.ts +48 -0
  20. package/src/tests/schemas_fulfillment.test.ts +23 -0
  21. package/src/tests/seo_length.test.ts +22 -0
  22. package/src/tests/title_quality.test.ts +55 -0
  23. package/src/tests/tool_validation.test.ts +17 -0
  24. package/src/tool/binauralTuner/bibliography.astro +14 -0
  25. package/src/tool/binauralTuner/component.astro +687 -0
  26. package/src/tool/binauralTuner/i18n/en.ts +187 -0
  27. package/src/tool/binauralTuner/i18n/es.ts +187 -0
  28. package/src/tool/binauralTuner/i18n/fr.ts +187 -0
  29. package/src/tool/binauralTuner/index.ts +27 -0
  30. package/src/tool/binauralTuner/seo.astro +14 -0
  31. package/src/tool/binauralTuner/ui.ts +18 -0
  32. package/src/tool/bloodUnitConverter/bibliography.astro +14 -0
  33. package/src/tool/bloodUnitConverter/component.astro +915 -0
  34. package/src/tool/bloodUnitConverter/i18n/en.ts +227 -0
  35. package/src/tool/bloodUnitConverter/i18n/es.ts +250 -0
  36. package/src/tool/bloodUnitConverter/i18n/fr.ts +218 -0
  37. package/src/tool/bloodUnitConverter/index.ts +27 -0
  38. package/src/tool/bloodUnitConverter/seo.astro +14 -0
  39. package/src/tool/bloodUnitConverter/ui.ts +38 -0
  40. package/src/tool/bmiCalculator/bibliography.astro +14 -0
  41. package/src/tool/bmiCalculator/component.astro +415 -0
  42. package/src/tool/bmiCalculator/i18n/en.ts +217 -0
  43. package/src/tool/bmiCalculator/i18n/es.ts +221 -0
  44. package/src/tool/bmiCalculator/i18n/fr.ts +217 -0
  45. package/src/tool/bmiCalculator/index.ts +27 -0
  46. package/src/tool/bmiCalculator/seo.astro +14 -0
  47. package/src/tool/bmiCalculator/ui.ts +21 -0
  48. package/src/tool/breathingVisualizer/bibliography.astro +14 -0
  49. package/src/tool/breathingVisualizer/component.astro +636 -0
  50. package/src/tool/breathingVisualizer/i18n/en.ts +206 -0
  51. package/src/tool/breathingVisualizer/i18n/es.ts +206 -0
  52. package/src/tool/breathingVisualizer/i18n/fr.ts +206 -0
  53. package/src/tool/breathingVisualizer/index.ts +27 -0
  54. package/src/tool/breathingVisualizer/seo.astro +14 -0
  55. package/src/tool/breathingVisualizer/ui.ts +31 -0
  56. package/src/tool/caffeineTracker/bibliography.astro +14 -0
  57. package/src/tool/caffeineTracker/component.astro +1210 -0
  58. package/src/tool/caffeineTracker/i18n/en.ts +198 -0
  59. package/src/tool/caffeineTracker/i18n/es.ts +198 -0
  60. package/src/tool/caffeineTracker/i18n/fr.ts +198 -0
  61. package/src/tool/caffeineTracker/index.ts +27 -0
  62. package/src/tool/caffeineTracker/logic.ts +31 -0
  63. package/src/tool/caffeineTracker/seo.astro +14 -0
  64. package/src/tool/caffeineTracker/ui.ts +36 -0
  65. package/src/tool/daltonismSimulator/bibliography.astro +14 -0
  66. package/src/tool/daltonismSimulator/component.astro +383 -0
  67. package/src/tool/daltonismSimulator/i18n/en.ts +188 -0
  68. package/src/tool/daltonismSimulator/i18n/es.ts +218 -0
  69. package/src/tool/daltonismSimulator/i18n/fr.ts +168 -0
  70. package/src/tool/daltonismSimulator/index.ts +27 -0
  71. package/src/tool/daltonismSimulator/seo.astro +14 -0
  72. package/src/tool/daltonismSimulator/ui.ts +20 -0
  73. package/src/tool/digestionStopwatch/bibliography.astro +14 -0
  74. package/src/tool/digestionStopwatch/component.astro +627 -0
  75. package/src/tool/digestionStopwatch/i18n/en.ts +173 -0
  76. package/src/tool/digestionStopwatch/i18n/es.ts +173 -0
  77. package/src/tool/digestionStopwatch/i18n/fr.ts +173 -0
  78. package/src/tool/digestionStopwatch/index.ts +27 -0
  79. package/src/tool/digestionStopwatch/logic.ts +63 -0
  80. package/src/tool/digestionStopwatch/seo.astro +14 -0
  81. package/src/tool/digestionStopwatch/ui.ts +20 -0
  82. package/src/tool/epworthSleepinessScale/bibliography.astro +14 -0
  83. package/src/tool/epworthSleepinessScale/component.astro +528 -0
  84. package/src/tool/epworthSleepinessScale/i18n/en.ts +217 -0
  85. package/src/tool/epworthSleepinessScale/i18n/es.ts +217 -0
  86. package/src/tool/epworthSleepinessScale/i18n/fr.ts +217 -0
  87. package/src/tool/epworthSleepinessScale/index.ts +27 -0
  88. package/src/tool/epworthSleepinessScale/seo.astro +14 -0
  89. package/src/tool/epworthSleepinessScale/ui.ts +27 -0
  90. package/src/tool/hydrationCalculator/bibliography.astro +14 -0
  91. package/src/tool/hydrationCalculator/component.astro +694 -0
  92. package/src/tool/hydrationCalculator/i18n/en.ts +217 -0
  93. package/src/tool/hydrationCalculator/i18n/es.ts +222 -0
  94. package/src/tool/hydrationCalculator/i18n/fr.ts +199 -0
  95. package/src/tool/hydrationCalculator/index.ts +27 -0
  96. package/src/tool/hydrationCalculator/seo.astro +14 -0
  97. package/src/tool/hydrationCalculator/ui.ts +28 -0
  98. package/src/tool/pelliRobsonTest/bibliography.astro +14 -0
  99. package/src/tool/pelliRobsonTest/component.astro +653 -0
  100. package/src/tool/pelliRobsonTest/i18n/en.ts +205 -0
  101. package/src/tool/pelliRobsonTest/i18n/es.ts +205 -0
  102. package/src/tool/pelliRobsonTest/i18n/fr.ts +205 -0
  103. package/src/tool/pelliRobsonTest/index.ts +27 -0
  104. package/src/tool/pelliRobsonTest/seo.astro +14 -0
  105. package/src/tool/pelliRobsonTest/ui.ts +21 -0
  106. package/src/tool/peripheralVisionTrainer/bibliography.astro +14 -0
  107. package/src/tool/peripheralVisionTrainer/component.astro +678 -0
  108. package/src/tool/peripheralVisionTrainer/i18n/en.ts +224 -0
  109. package/src/tool/peripheralVisionTrainer/i18n/es.ts +224 -0
  110. package/src/tool/peripheralVisionTrainer/i18n/fr.ts +211 -0
  111. package/src/tool/peripheralVisionTrainer/index.ts +27 -0
  112. package/src/tool/peripheralVisionTrainer/seo.astro +14 -0
  113. package/src/tool/peripheralVisionTrainer/ui.ts +26 -0
  114. package/src/tool/readingDistanceCalculator/bibliography.astro +14 -0
  115. package/src/tool/readingDistanceCalculator/component.astro +588 -0
  116. package/src/tool/readingDistanceCalculator/i18n/en.ts +202 -0
  117. package/src/tool/readingDistanceCalculator/i18n/es.ts +215 -0
  118. package/src/tool/readingDistanceCalculator/i18n/fr.ts +193 -0
  119. package/src/tool/readingDistanceCalculator/index.ts +31 -0
  120. package/src/tool/readingDistanceCalculator/seo.astro +14 -0
  121. package/src/tool/readingDistanceCalculator/ui.ts +18 -0
  122. package/src/tool/screenDecompressionTime/bibliography.astro +14 -0
  123. package/src/tool/screenDecompressionTime/component.astro +671 -0
  124. package/src/tool/screenDecompressionTime/i18n/en.ts +225 -0
  125. package/src/tool/screenDecompressionTime/i18n/es.ts +247 -0
  126. package/src/tool/screenDecompressionTime/i18n/fr.ts +225 -0
  127. package/src/tool/screenDecompressionTime/index.ts +27 -0
  128. package/src/tool/screenDecompressionTime/seo.astro +14 -0
  129. package/src/tool/screenDecompressionTime/ui.ts +32 -0
  130. package/src/tool/tinnitusReliever/bibliography.astro +14 -0
  131. package/src/tool/tinnitusReliever/component.astro +581 -0
  132. package/src/tool/tinnitusReliever/i18n/en.ts +161 -0
  133. package/src/tool/tinnitusReliever/i18n/es.ts +161 -0
  134. package/src/tool/tinnitusReliever/i18n/fr.ts +161 -0
  135. package/src/tool/tinnitusReliever/index.ts +27 -0
  136. package/src/tool/tinnitusReliever/seo.astro +14 -0
  137. package/src/tool/tinnitusReliever/ui.ts +9 -0
  138. package/src/tool/ubeCalculator/bibliography.astro +14 -0
  139. package/src/tool/ubeCalculator/component.astro +683 -0
  140. package/src/tool/ubeCalculator/i18n/en.ts +200 -0
  141. package/src/tool/ubeCalculator/i18n/es.ts +200 -0
  142. package/src/tool/ubeCalculator/i18n/fr.ts +196 -0
  143. package/src/tool/ubeCalculator/index.ts +27 -0
  144. package/src/tool/ubeCalculator/seo.astro +14 -0
  145. package/src/tool/ubeCalculator/ui.ts +26 -0
  146. package/src/tool/waterPurifier/bibliography.astro +14 -0
  147. package/src/tool/waterPurifier/component.astro +628 -0
  148. package/src/tool/waterPurifier/i18n/en.ts +167 -0
  149. package/src/tool/waterPurifier/i18n/es.ts +167 -0
  150. package/src/tool/waterPurifier/i18n/fr.ts +167 -0
  151. package/src/tool/waterPurifier/index.ts +27 -0
  152. package/src/tool/waterPurifier/seo.astro +14 -0
  153. package/src/tool/waterPurifier/ui.ts +18 -0
  154. package/src/tools.ts +19 -0
  155. package/src/types.ts +72 -0
@@ -0,0 +1,218 @@
1
+ import type { WithContext, SoftwareApplication, FAQPage, HowToThing } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { BloodUnitConverterUI } from '../ui';
4
+
5
+ const slug = 'convertisseur-unites-analyses-sanguines';
6
+ const title = "Convertisseur d'Unités d'Analyses Sanguines";
7
+ const description =
8
+ "Calculatrice médicale pour convertir les résultats d'analyses de sang entre mg/dL et mmol/L. Compatible avec le glucose, le cholestérol total, HDL, LDL, les triglycérides, la créatinine et l'urée.";
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Que signifie mg/dL?',
13
+ answer:
14
+ "Milligrammes par décilitre. Une unité de concentration de masse qui indique combien de milligrammes d'une substance sont présents dans 100 millilitres de sang. C'est la norme en Espagne, aux États-Unis et en Amérique latine.",
15
+ },
16
+ {
17
+ question: 'Que signifie mmol/L?',
18
+ answer:
19
+ "Millimoles par litre. L'unité du Système International pour mesurer la concentration de substances basée sur le nombre de molécules (moles) par volume. Préférée par la communauté scientifique internationale et des pays comme le Royaume-Uni ou le Canada.",
20
+ },
21
+ {
22
+ question: "Pourquoi le facteur de conversion est-il différent pour chaque substance?",
23
+ answer:
24
+ "Parce que le facteur dépend du poids moléculaire de la molécule. Une molécule plus lourde comme le cholestérol (PM ≈ 387 g/mol) nécessite un diviseur plus grand que le glucose (PM ≈ 180 g/mol). La formule est: mmol/L = mg/dL ÷ poids moléculaire × 10.",
25
+ },
26
+ {
27
+ question: 'Comment convertir manuellement de mmol/L à mg/dL?',
28
+ answer:
29
+ "Multipliez la valeur en mmol/L par le facteur de conversion spécifique à la substance. Par exemple, pour le glucose, multipliez par 18.016. Pour le cholestérol, par 38.67. La calculatrice effectue ce calcul automatiquement et instantanément.",
30
+ },
31
+ {
32
+ question: "Cette calculatrice est-elle fiable pour les diagnostics médicaux?",
33
+ answer:
34
+ "Cet outil est purement informatif et utilise des facteurs de conversion selon les directives de l'IFCC. Il ne remplace pas un diagnostic professionnel. Les plages de référence affichées sont indicatives et peuvent varier selon les laboratoires, les âges et les circonstances cliniques individuelles. Consultez toujours votre médecin.",
35
+ },
36
+ ];
37
+
38
+ const howToData = [
39
+ {
40
+ name: "Sélectionnez l'analyte",
41
+ text: "Cliquez sur l'icône correspondant à la substance que vous souhaitez convertir: Glucose, Cholestérol Total, HDL, LDL, Triglycérides, Créatinine ou Urée.",
42
+ },
43
+ {
44
+ name: 'Saisissez la valeur',
45
+ text: "Tapez le nombre dans le champ mg/dL ou mmol/L. Utilisez le bouton d'échange pour inverser la direction de conversion. Le résultat apparaît instantanément.",
46
+ },
47
+ {
48
+ name: 'Lisez le feu de signalisation visuel',
49
+ text: "L'indicateur de statut montre si le niveau se situe dans la plage basse, normale, limite ou élevée selon les directives de référence clinique pour cette substance.",
50
+ },
51
+ {
52
+ name: 'Enregistrez vos résultats',
53
+ text: 'Cliquez sur "Ajouter au Tableau" pour enregistrer la valeur dans l\'historique et comparer plusieurs lectures dans la même session.',
54
+ },
55
+ ];
56
+
57
+ const faqSchema: WithContext<FAQPage> = {
58
+ '@context': 'https://schema.org',
59
+ '@type': 'FAQPage',
60
+ mainEntity: faqData.map((item) => ({
61
+ '@type': 'Question',
62
+ name: item.question,
63
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
64
+ })),
65
+ };
66
+
67
+ const howToSchema: WithContext<HowToThing> = {
68
+ '@context': 'https://schema.org',
69
+ '@type': 'HowTo',
70
+ name: title,
71
+ description,
72
+ step: howToData.map((step, i) => ({
73
+ '@type': 'HowToStep',
74
+ position: i + 1,
75
+ name: step.name,
76
+ text: step.text,
77
+ })),
78
+ };
79
+
80
+ const appSchema: WithContext<SoftwareApplication> = {
81
+ '@context': 'https://schema.org',
82
+ '@type': 'SoftwareApplication',
83
+ name: title,
84
+ description,
85
+ applicationCategory: 'HealthApplication',
86
+ operatingSystem: 'Web',
87
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
88
+ };
89
+
90
+ export const content: ToolLocaleContent<BloodUnitConverterUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faqTitle: "Questions fréquentes sur la conversion des unités d'analyses sanguines",
95
+ faq: faqData,
96
+ bibliographyTitle: 'Références scientifiques',
97
+ bibliography: [
98
+ {
99
+ name: "IFCC Division Scientifique — Facteurs de conversion biochimique",
100
+ url: 'https://www.ifcc.org/',
101
+ },
102
+ {
103
+ name: "Mayo Clinic — Interprétation des analyses de sang",
104
+ url: 'https://www.mayoclinic.org/',
105
+ },
106
+ {
107
+ name: "Organisation Mondiale de la Santé — Critères diagnostiques du diabète",
108
+ url: 'https://www.who.int/',
109
+ },
110
+ ],
111
+ howTo: howToData,
112
+ schemas: [faqSchema, howToSchema, appSchema],
113
+ ui: {
114
+ appTitle: 'Analytics Suite',
115
+ appSubtitle: "Convertisseur d'unités cliniques professionnel",
116
+ sectionAnalyte: "Sélectionner l'Analyte",
117
+ sectionHistory: 'Mon Historique',
118
+ labelMg: 'Masse (mg/dL)',
119
+ labelMmol: 'Molaire (mmol/L)',
120
+ swapAriaLabel: 'Inverser la direction de conversion',
121
+ statusIdle: 'Saisissez une valeur à analyser',
122
+ analyteGlucosa: 'Glucose',
123
+ analyteColesterolTotal: 'Cholestérol Total',
124
+ analyteHdl: 'Cholestérol HDL',
125
+ analyteLdl: 'Cholestérol LDL',
126
+ analyteTriglic: 'Triglycérides',
127
+ analyteCreatinina: 'Créatinine',
128
+ analyteUrea: 'Urée',
129
+ rangeBajo: 'Bas',
130
+ rangeNormal: 'Normal',
131
+ rangeAlto: 'Élevé',
132
+ rangeMuyAlto: 'Très Élevé',
133
+ rangeLimite: 'Limite',
134
+ rangeElevado: 'Augmenté',
135
+ rangePrediabetes: 'Prédiabète',
136
+ rangeDiabetes: 'Diabète',
137
+ rangeDeseable: 'Souhaitable',
138
+ rangeRiesgo: 'À Risque',
139
+ rangeAceptable: 'Acceptable',
140
+ rangeExcelente: 'Excellent',
141
+ rangeOptimo: 'Optimal',
142
+ rangeCasiOptimo: 'Quasi Optimal',
143
+ historyAdd: 'Ajouter au Tableau',
144
+ historyAnalyte: 'Analyte',
145
+ historyMg: 'mg/dL',
146
+ historyMmol: 'mmol/L',
147
+ historyStatus: 'Statut',
148
+ historyEmpty: 'Aucun enregistrement sauvegardé',
149
+ disclaimerText:
150
+ "Avis Médical: Cet outil est informatif et utilise des facteurs de conversion selon les directives de l'IFCC. Il ne remplace pas un diagnostic professionnel. Consultez toujours votre médecin.",
151
+ },
152
+ seo: [
153
+ {
154
+ type: 'summary',
155
+ title: "Convertisseur d'Unités d'Analyses Sanguines",
156
+ items: [
157
+ "<strong>7 analytes</strong>: glucose, cholestérol total, HDL, LDL, triglycérides, créatinine et urée.",
158
+ '<strong>Bidirectionnel</strong>: convertit de mg/dL à mmol/L et inversement en un clic.',
159
+ '<strong>Feu de signalisation clinique</strong>: indicateur visuel des plages basse, normale, limite et élevée.',
160
+ "<strong>Historique de session</strong>: sauvegardez et comparez plusieurs valeurs dans un tableau.",
161
+ ],
162
+ },
163
+ {
164
+ type: 'title',
165
+ text: "Guide Complet sur la Conversion des Unités dans les Analyses de Sang",
166
+ level: 2,
167
+ },
168
+ {
169
+ type: 'paragraph',
170
+ html: "Les résultats d'analyses de sang peuvent être déroutants lorsqu'ils sont présentés dans différents systèmes d'unités. Les laboratoires médicaux utilisent principalement deux types: la concentration de masse (<strong>mg/dL</strong>) et la concentration molaire (<strong>mmol/L</strong>). Comprendre comment passer de l'un à l'autre est crucial pour les patients qui consultent la littérature scientifique internationale ou qui vivent dans des pays avec des normes différentes.",
171
+ },
172
+ {
173
+ type: 'title',
174
+ text: 'Tableau des Facteurs de Conversion Biochimique',
175
+ level: 2,
176
+ },
177
+ {
178
+ type: 'table',
179
+ headers: ['Analyte', 'Unité de masse', 'Unité molaire', 'Facteur de conversion'],
180
+ rows: [
181
+ ['<strong>Glucose</strong>', 'mg/dL', 'mmol/L', '18.016 (diviser mg/dL)'],
182
+ ['<strong>Cholestérol Total</strong>', 'mg/dL', 'mmol/L', '38.67 (diviser mg/dL)'],
183
+ ['<strong>Triglycérides</strong>', 'mg/dL', 'mmol/L', '88.57 (diviser mg/dL)'],
184
+ ["<strong>Urée</strong>", 'mg/dL', 'mmol/L', '6.006 (diviser mg/dL)'],
185
+ ['<strong>Créatinine</strong>', 'mg/dL', 'mmol/L', '11.312 (diviser mg/dL)'],
186
+ ],
187
+ },
188
+ {
189
+ type: 'title',
190
+ text: "Glucose: Le Carburant de l'Organisme",
191
+ level: 2,
192
+ },
193
+ {
194
+ type: 'paragraph',
195
+ html: "Le glucose est la principale source d'énergie pour les cellules. Sa mesure est fondamentale pour la gestion du diabète et la santé métabolique. Un niveau à jeun inférieur à <strong>100 mg/dL (5,55 mmol/L)</strong> est considéré comme normal. Des valeurs entre 100 et 125 mg/dL peuvent indiquer un prédiabète, et des niveaux supérieurs à <strong>126 mg/dL (7,0 mmol/L)</strong> lors de deux tests séparés sont généralement indicatifs d'un diabète de type 2.",
196
+ },
197
+ {
198
+ type: 'tip',
199
+ title: 'Confidentialité avant tout',
200
+ html: "Vos données médicales sont privées. Cet outil traite tous les calculs <strong>localement dans votre navigateur</strong>. Aucune information sensible n'est envoyée ni stockée sur aucun serveur.",
201
+ },
202
+ {
203
+ type: 'title',
204
+ text: 'Quand Consulter Votre Médecin',
205
+ level: 2,
206
+ },
207
+ {
208
+ type: 'list',
209
+ items: [
210
+ 'Glycémie à jeun <strong>répétitivement supérieure à 100 mg/dL</strong>.',
211
+ 'Cholestérol total <strong>supérieur à 240 mg/dL</strong> ou LDL au-dessus de 160 mg/dL.',
212
+ 'Triglycérides <strong>supérieurs à 200 mg/dL</strong> de façon persistante.',
213
+ "Créatinine élevée ou soudainement diminuée, indiquant une altération de la fonction rénale.",
214
+ 'Toute valeur hors plage confirmée lors de <strong>deux mesures consécutives</strong>.',
215
+ ],
216
+ },
217
+ ],
218
+ };
@@ -0,0 +1,27 @@
1
+ import type { HealthToolEntry, ToolDefinition } from '../../types';
2
+ import BloodUnitConverterComponent from './component.astro';
3
+ import BloodUnitConverterSEO from './seo.astro';
4
+ import BloodUnitConverterBibliography from './bibliography.astro';
5
+ import type { BloodUnitConverterUI } from './ui';
6
+
7
+ export const bloodUnitConverter: HealthToolEntry<BloodUnitConverterUI> = {
8
+ id: 'bloodUnitConverter',
9
+ icons: {
10
+ bg: 'mdi:test-tube',
11
+ fg: 'mdi:water-percent',
12
+ },
13
+ i18n: {
14
+ es: () => import('./i18n/es').then((m) => m.content),
15
+ en: () => import('./i18n/en').then((m) => m.content),
16
+ fr: () => import('./i18n/fr').then((m) => m.content),
17
+ },
18
+ };
19
+
20
+ export { BloodUnitConverterComponent, BloodUnitConverterSEO, BloodUnitConverterBibliography };
21
+
22
+ export const BLOOD_UNIT_CONVERTER_TOOL: ToolDefinition = {
23
+ entry: bloodUnitConverter,
24
+ Component: BloodUnitConverterComponent,
25
+ SEOComponent: BloodUnitConverterSEO,
26
+ BibliographyComponent: BloodUnitConverterBibliography,
27
+ };
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { bloodUnitConverter } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await bloodUnitConverter.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -0,0 +1,38 @@
1
+ export interface BloodUnitConverterUI extends Record<string, string> {
2
+ appTitle: string;
3
+ appSubtitle: string;
4
+ sectionAnalyte: string;
5
+ sectionHistory: string;
6
+ labelMg: string;
7
+ labelMmol: string;
8
+ swapAriaLabel: string;
9
+ statusIdle: string;
10
+ analyteGlucosa: string;
11
+ analyteColesterolTotal: string;
12
+ analyteHdl: string;
13
+ analyteLdl: string;
14
+ analyteTriglic: string;
15
+ analyteCreatinina: string;
16
+ analyteUrea: string;
17
+ rangeBajo: string;
18
+ rangeNormal: string;
19
+ rangeAlto: string;
20
+ rangeMuyAlto: string;
21
+ rangeLimite: string;
22
+ rangeElevado: string;
23
+ rangePrediabetes: string;
24
+ rangeDiabetes: string;
25
+ rangeDeseable: string;
26
+ rangeRiesgo: string;
27
+ rangeAceptable: string;
28
+ rangeExcelente: string;
29
+ rangeOptimo: string;
30
+ rangeCasiOptimo: string;
31
+ historyAdd: string;
32
+ historyAnalyte: string;
33
+ historyMg: string;
34
+ historyMmol: string;
35
+ historyStatus: string;
36
+ historyEmpty: string;
37
+ disclaimerText: string;
38
+ }
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { Bibliography } from '@jjlmoya/utils-shared';
3
+ import { bmiCalculator } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await bmiCalculator.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <Bibliography items={content.bibliography} title={content.bibliographyTitle} />}