@jjlmoya/utils-home 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 (77) hide show
  1. package/package.json +62 -0
  2. package/src/category/i18n/en.ts +24 -0
  3. package/src/category/i18n/es.ts +24 -0
  4. package/src/category/i18n/fr.ts +24 -0
  5. package/src/category/index.ts +12 -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 +11 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +26 -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/seo_length.test.ts +22 -0
  21. package/src/tests/tool_validation.test.ts +17 -0
  22. package/src/tool/dewPointCalculator/bibliography.astro +14 -0
  23. package/src/tool/dewPointCalculator/component.astro +443 -0
  24. package/src/tool/dewPointCalculator/i18n/en.ts +183 -0
  25. package/src/tool/dewPointCalculator/i18n/es.ts +183 -0
  26. package/src/tool/dewPointCalculator/i18n/fr.ts +183 -0
  27. package/src/tool/dewPointCalculator/index.ts +34 -0
  28. package/src/tool/dewPointCalculator/logic.ts +16 -0
  29. package/src/tool/dewPointCalculator/seo.astro +14 -0
  30. package/src/tool/dewPointCalculator/ui.ts +13 -0
  31. package/src/tool/ledSavingCalculator/bibliography.astro +14 -0
  32. package/src/tool/ledSavingCalculator/component.astro +520 -0
  33. package/src/tool/ledSavingCalculator/i18n/en.ts +217 -0
  34. package/src/tool/ledSavingCalculator/i18n/es.ts +217 -0
  35. package/src/tool/ledSavingCalculator/i18n/fr.ts +217 -0
  36. package/src/tool/ledSavingCalculator/index.ts +34 -0
  37. package/src/tool/ledSavingCalculator/logic.ts +31 -0
  38. package/src/tool/ledSavingCalculator/seo.astro +14 -0
  39. package/src/tool/ledSavingCalculator/ui.ts +32 -0
  40. package/src/tool/projectorCalculator/bibliography.astro +14 -0
  41. package/src/tool/projectorCalculator/component.astro +569 -0
  42. package/src/tool/projectorCalculator/i18n/en.ts +181 -0
  43. package/src/tool/projectorCalculator/i18n/es.ts +181 -0
  44. package/src/tool/projectorCalculator/i18n/fr.ts +181 -0
  45. package/src/tool/projectorCalculator/index.ts +34 -0
  46. package/src/tool/projectorCalculator/logic.ts +21 -0
  47. package/src/tool/projectorCalculator/seo.astro +14 -0
  48. package/src/tool/projectorCalculator/ui.ts +16 -0
  49. package/src/tool/qrGenerator/bibliography.astro +14 -0
  50. package/src/tool/qrGenerator/component.astro +499 -0
  51. package/src/tool/qrGenerator/i18n/en.ts +233 -0
  52. package/src/tool/qrGenerator/i18n/es.ts +233 -0
  53. package/src/tool/qrGenerator/i18n/fr.ts +233 -0
  54. package/src/tool/qrGenerator/index.ts +34 -0
  55. package/src/tool/qrGenerator/logic.ts +27 -0
  56. package/src/tool/qrGenerator/seo.astro +14 -0
  57. package/src/tool/qrGenerator/ui.ts +23 -0
  58. package/src/tool/solarCalculator/bibliography.astro +14 -0
  59. package/src/tool/solarCalculator/component.astro +532 -0
  60. package/src/tool/solarCalculator/i18n/en.ts +176 -0
  61. package/src/tool/solarCalculator/i18n/es.ts +176 -0
  62. package/src/tool/solarCalculator/i18n/fr.ts +176 -0
  63. package/src/tool/solarCalculator/index.ts +34 -0
  64. package/src/tool/solarCalculator/logic.ts +31 -0
  65. package/src/tool/solarCalculator/seo.astro +14 -0
  66. package/src/tool/solarCalculator/ui.ts +11 -0
  67. package/src/tool/tariffComparator/bibliography.astro +14 -0
  68. package/src/tool/tariffComparator/component.astro +595 -0
  69. package/src/tool/tariffComparator/i18n/en.ts +192 -0
  70. package/src/tool/tariffComparator/i18n/es.ts +192 -0
  71. package/src/tool/tariffComparator/i18n/fr.ts +192 -0
  72. package/src/tool/tariffComparator/index.ts +34 -0
  73. package/src/tool/tariffComparator/logic.ts +47 -0
  74. package/src/tool/tariffComparator/seo.astro +14 -0
  75. package/src/tool/tariffComparator/ui.ts +25 -0
  76. package/src/tools.ts +9 -0
  77. package/src/types.ts +72 -0
@@ -0,0 +1,183 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { DewPointCalculatorUI } from '../ui';
4
+
5
+ const slug = 'punto-de-rocio';
6
+ const title = 'Calculadora de Punto de Rocío';
7
+ const description =
8
+ 'Calcula la temperatura de condensación en tus paredes usando la humedad y temperatura ambiente. Una herramienta vital para prevenir humedades y proteger la salud estructural de tu hogar.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '¿Qué es exactamente el punto de rocío?',
13
+ answer:
14
+ 'Es la temperatura a la que el aire debe enfriarse para que el vapor de agua se condense en agua líquida. Cuanto más alta es la humedad relativa, más cerca está el punto de rocío de la temperatura actual.',
15
+ },
16
+ {
17
+ question: '¿Por qué aparece moho en las esquinas de mi casa?',
18
+ answer:
19
+ 'Las esquinas suelen ser puentes térmicos donde la pared está más fría. Si la temperatura de esa superficie baja del punto de rocío, se forma agua líquida. El moho necesita esa humedad constante para crecer.',
20
+ },
21
+ {
22
+ question: '¿Cómo puedo bajar la humedad en casa?',
23
+ answer:
24
+ 'La forma más efectiva es ventilar (especialmente después de ducharse o cocinar) y usar deshumidificadores. Mantener una temperatura constante también ayuda a que el aire pueda retener más vapor sin condensar.',
25
+ },
26
+ {
27
+ question: '¿Es peligroso el moho por condensación?',
28
+ answer:
29
+ 'Sí. El moho libera esporas que pueden causar problemas respiratorios, alergias y asma. Detectar el riesgo de condensación con esta calculadora es el primer paso para una casa saludable.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Medir temperatura y humedad',
36
+ text: 'Usa un termómetro e higrómetro para conocer los valores actuales de la estancia.',
37
+ },
38
+ {
39
+ name: 'Introducir valores',
40
+ text: 'Ajusta la temperatura en grados Celsius y el porcentaje de humedad en la calculadora.',
41
+ },
42
+ {
43
+ name: 'Obtener temperatura crítica',
44
+ text: 'La herramienta te dirá a qué temperatura exacta empezará a condensar el agua en las superficies.',
45
+ },
46
+ {
47
+ name: 'Verificar superficies',
48
+ text: 'Si tienes un termómetro láser, mide la temperatura de las paredes. Si es igual o menor al resultado, necesitas ventilar o aislar.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step) => ({
68
+ '@type': 'HowToStep',
69
+ name: step.name,
70
+ text: step.text,
71
+ })),
72
+ };
73
+
74
+ const appSchema: WithContext<SoftwareApplication> = {
75
+ '@context': 'https://schema.org',
76
+ '@type': 'SoftwareApplication',
77
+ name: title,
78
+ description,
79
+ applicationCategory: 'UtilityApplication',
80
+ operatingSystem: 'All',
81
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
82
+ inLanguage: 'es',
83
+ };
84
+
85
+ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
86
+ slug,
87
+ title,
88
+ description,
89
+ faqTitle: 'Preguntas Frecuentes',
90
+ faq: faqData,
91
+ bibliographyTitle: 'Bibliografía',
92
+ bibliography: [
93
+ {
94
+ name: 'Magnus Approximation of the Dew-Point — Meteorological Applications (2011)',
95
+ url: 'https://es.scribd.com/document/331352069/dew-point',
96
+ },
97
+ {
98
+ name: 'Guide to Meteorological Instruments and Methods of Observation — WMO (2021)',
99
+ url: 'https://community.wmo.int/site/knowledge-hub/programmes-and-initiatives/instruments-and-methods-of-observation-programme-imop/guide-instruments-and-methods-of-observation-wmo-no-8',
100
+ },
101
+ ],
102
+ howTo: howToData,
103
+ schemas: [faqSchema, howToSchema, appSchema],
104
+ seo: [
105
+ {
106
+ type: 'title',
107
+ text: '¿Qué es el Punto de Rocío y por qué importa en tu hogar?',
108
+ level: 2,
109
+ },
110
+ {
111
+ type: 'paragraph',
112
+ html: 'El punto de rocío es la temperatura a la cual el aire debe enfriarse para que el vapor de agua se condense en agua líquida. En el contexto de una vivienda, este concepto marca la frontera entre una casa sana y una con problemas estructurales de humedad. Cuando la temperatura de una superficie (como una pared mal aislada) cae por debajo del punto de rocío, aparecen gotas de agua — el caldo de cultivo ideal para el <em>Aspergillus</em> y otros hongos nocivos.',
113
+ },
114
+ {
115
+ type: 'stats',
116
+ items: [
117
+ { value: '> 5°C', label: 'Diferencia Segura', icon: 'mdi:shield-check' },
118
+ { value: '40–60%', label: 'Humedad Ideal', icon: 'mdi:water-percent' },
119
+ { value: '< 1°C', label: 'Peligro Extremo', icon: 'mdi:alert' },
120
+ ],
121
+ columns: 3,
122
+ },
123
+ {
124
+ type: 'comparative',
125
+ items: [
126
+ {
127
+ title: 'La Fórmula de Magnus-Tetens',
128
+ description: 'Para calcular el punto de rocío con precisión científica utilizamos la aproximación de Magnus-Tetens, con constantes b=17.625 y c=243.04°C recomendadas por la Organización Meteorológica Mundial para temperaturas entre 0°C y 50°C.',
129
+ icon: 'mdi:calculator',
130
+ points: ['Precisión científica validada por la OMM', 'Válida para rangos de temperatura habitacional'],
131
+ },
132
+ {
133
+ title: 'Puentes Térmicos y Moho',
134
+ description: 'Las esquinas de habitaciones, los marcos de ventanas y las paredes exteriores mal aisladas son los puntos más fríos. Si su temperatura cae por debajo del punto de rocío, la condensación y el moho son inevitables.',
135
+ icon: 'mdi:home-thermometer',
136
+ points: ['Las esquinas son los puntos más vulnerables', 'El aislamiento térmico previene la condensación'],
137
+ },
138
+ ],
139
+ columns: 2,
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: 'Niveles de Riesgo',
144
+ level: 3,
145
+ },
146
+ {
147
+ type: 'paragraph',
148
+ html: '<strong>Riesgo Bajo (diferencia &gt; 5°C):</strong> El aire está lejos de saturarse. Tus paredes están seguras. <strong>Riesgo Medio (3–5°C):</strong> Vigila las esquinas y los puentes térmicos. <strong>Riesgo Alto (1–3°C):</strong> Condensación probable en cristales y zonas frías — ventila inmediatamente. <strong>Peligro Extremo (&lt; 1°C):</strong> Condensación activa con riesgo inmediato de proliferación de moho negro.',
149
+ },
150
+ {
151
+ type: 'diagnostic',
152
+ variant: 'warning',
153
+ title: 'La Regla de Oro',
154
+ icon: 'mdi:thermometer-alert',
155
+ badge: 'Consejo Clave',
156
+ html: '<p>Si la temperatura de tu pared está a menos de <strong>3°C del punto de rocío</strong>, tienes un riesgo inminente de condensación. Ventila, usa extractores en baños y cocinas, y mantén la humedad relativa entre el 40% y el 60%.</p>',
157
+ },
158
+ {
159
+ type: 'summary',
160
+ title: 'Cómo Prevenir la Condensación',
161
+ items: [
162
+ 'Ventila diariamente, especialmente tras ducharte o cocinar.',
163
+ 'Mantén la humedad relativa entre el 40% y el 60%.',
164
+ 'Usa extractores en baños y cocinas para evacuar el vapor.',
165
+ 'No seques ropa dentro de casa sin ventilación.',
166
+ 'Aísla térmicamente las paredes para evitar superficies frías.',
167
+ ],
168
+ },
169
+ ],
170
+ ui: {
171
+ labelTemperature: 'Temperatura Ambiente',
172
+ labelHumidity: 'Humedad Relativa',
173
+ labelDewPoint: 'Punto de Rocío',
174
+ riskLow: 'Riesgo Bajo',
175
+ riskMedium: 'Riesgo Medio',
176
+ riskHigh: 'Riesgo Alto',
177
+ riskExtreme: 'Peligro Extremo',
178
+ riskLowDesc: 'Diferencia > 5°C. Superficies seguras.',
179
+ riskMediumDesc: 'Diferencia 3–5°C. Vigila las esquinas.',
180
+ riskHighDesc: 'Diferencia 1–3°C. Ventila inmediatamente.',
181
+ riskExtremeDesc: 'Diferencia < 1°C. Condensación activa.',
182
+ },
183
+ };
@@ -0,0 +1,183 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { DewPointCalculatorUI } from '../ui';
4
+
5
+ const slug = 'calculateur-point-de-rosee';
6
+ const title = 'Calculateur de Point de Rosée';
7
+ const description =
8
+ "Calculez la température de condensation sur vos murs à partir de l'humidité ambiante et de la température. Un outil essentiel pour prévenir l'humidité et protéger la santé structurale de votre domicile.";
9
+
10
+ const faqData = [
11
+ {
12
+ question: "Qu'est-ce que le point de rosée exactement ?",
13
+ answer:
14
+ "C'est la température à laquelle l'air doit refroidir pour que la vapeur d'eau se condense en eau liquide. Plus l'humidité relative est élevée, plus le point de rosée est proche de la température actuelle.",
15
+ },
16
+ {
17
+ question: "Pourquoi de la moisissure apparaît-elle dans les coins de mon logement ?",
18
+ answer:
19
+ "Les coins sont souvent des ponts thermiques où le mur est plus froid. Si la température de cette surface descend sous le point de rosée, de l'eau liquide se forme. La moisissure a besoin de cette humidité constante pour se développer.",
20
+ },
21
+ {
22
+ question: "Comment puis-je réduire l'humidité chez moi ?",
23
+ answer:
24
+ "La méthode la plus efficace est la ventilation — surtout après la douche ou la cuisine — et l'utilisation de déshumidificateurs. Maintenir une température constante aide aussi l'air à retenir plus de vapeur sans condenser.",
25
+ },
26
+ {
27
+ question: "La moisissure par condensation est-elle dangereuse ?",
28
+ answer:
29
+ "Oui. La moisissure libère des spores qui peuvent provoquer des problèmes respiratoires, des allergies et de l'asthme. Détecter le risque de condensation avec cette calculatrice est la première étape vers un logement sain.",
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: "Mesurer la température et l'humidité",
36
+ text: "Utilisez un thermomètre et un hygromètre pour connaître les valeurs actuelles de la pièce.",
37
+ },
38
+ {
39
+ name: 'Saisir les valeurs',
40
+ text: "Ajustez la température en degrés Celsius et le pourcentage d'humidité dans la calculatrice.",
41
+ },
42
+ {
43
+ name: 'Obtenir la température critique',
44
+ text: "L'outil vous indiquera à quelle température exacte l'eau commencera à se condenser sur les surfaces.",
45
+ },
46
+ {
47
+ name: 'Vérifier les surfaces',
48
+ text: "Si vous disposez d'un thermomètre laser, mesurez la température de vos murs. Si elle est égale ou inférieure au résultat, vous devez ventiler ou isoler.",
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step) => ({
68
+ '@type': 'HowToStep',
69
+ name: step.name,
70
+ text: step.text,
71
+ })),
72
+ };
73
+
74
+ const appSchema: WithContext<SoftwareApplication> = {
75
+ '@context': 'https://schema.org',
76
+ '@type': 'SoftwareApplication',
77
+ name: title,
78
+ description,
79
+ applicationCategory: 'UtilityApplication',
80
+ operatingSystem: 'All',
81
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
82
+ inLanguage: 'fr',
83
+ };
84
+
85
+ export const content: ToolLocaleContent<DewPointCalculatorUI> = {
86
+ slug,
87
+ title,
88
+ description,
89
+ faqTitle: 'Questions Fréquentes',
90
+ faq: faqData,
91
+ bibliographyTitle: 'Bibliographie',
92
+ bibliography: [
93
+ {
94
+ name: "Magnus Approximation of the Dew-Point — Meteorological Applications (2011)",
95
+ url: 'https://es.scribd.com/document/331352069/dew-point',
96
+ },
97
+ {
98
+ name: "Guide to Meteorological Instruments and Methods of Observation — WMO (2021)",
99
+ url: 'https://community.wmo.int/site/knowledge-hub/programmes-and-initiatives/instruments-and-methods-of-observation-programme-imop/guide-instruments-and-methods-of-observation-wmo-no-8',
100
+ },
101
+ ],
102
+ howTo: howToData,
103
+ schemas: [faqSchema, howToSchema, appSchema],
104
+ seo: [
105
+ {
106
+ type: 'title',
107
+ text: "Qu'est-ce que le Point de Rosée et Pourquoi est-il Important ?",
108
+ level: 2,
109
+ },
110
+ {
111
+ type: 'paragraph',
112
+ html: "Le point de rosée est la température à laquelle l'air doit refroidir pour que la vapeur d'eau se condense en eau liquide. Dans un logement, ce concept marque la frontière entre une maison saine et une maison avec des problèmes structurels d'humidité. Lorsque la température d'une surface (comme un mur mal isolé) descend sous le point de rosée, des gouttelettes d'eau apparaissent — le terrain idéal pour l'<em>Aspergillus</em> et autres champignons nocifs.",
113
+ },
114
+ {
115
+ type: 'stats',
116
+ items: [
117
+ { value: '> 5°C', label: 'Différence Sûre', icon: 'mdi:shield-check' },
118
+ { value: '40–60%', label: 'Humidité Idéale', icon: 'mdi:water-percent' },
119
+ { value: '< 1°C', label: 'Danger Extrême', icon: 'mdi:alert' },
120
+ ],
121
+ columns: 3,
122
+ },
123
+ {
124
+ type: 'comparative',
125
+ items: [
126
+ {
127
+ title: 'La Formule de Magnus-Tetens',
128
+ description: "Pour calculer le point de rosée avec précision scientifique, nous utilisons l'approximation de Magnus-Tetens, avec les constantes b=17,625 et c=243,04°C recommandées par l'Organisation Météorologique Mondiale pour des températures entre 0°C et 50°C.",
129
+ icon: 'mdi:calculator',
130
+ points: ["Précision scientifique validée par l'OMM", 'Valide pour les plages de température résidentielles'],
131
+ },
132
+ {
133
+ title: 'Ponts Thermiques et Moisissures',
134
+ description: "Les coins de pièces, les cadres de fenêtres et les murs extérieurs mal isolés sont les points les plus froids. Si leur température descend sous le point de rosée, la condensation et les moisissures sont inévitables.",
135
+ icon: 'mdi:home-thermometer',
136
+ points: ['Les coins sont les points les plus vulnérables', "L'isolation thermique prévient la condensation"],
137
+ },
138
+ ],
139
+ columns: 2,
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: 'Niveaux de Risque',
144
+ level: 3,
145
+ },
146
+ {
147
+ type: 'paragraph',
148
+ html: "<strong>Risque Faible (différence &gt; 5°C) :</strong> L'air est loin de la saturation. Vos murs sont sûrs. <strong>Risque Moyen (3–5°C) :</strong> Surveillez les coins et les ponts thermiques. <strong>Risque Élevé (1–3°C) :</strong> Condensation probable sur les vitres et les zones froides — ventilez immédiatement. <strong>Danger Extrême (&lt; 1°C) :</strong> Condensation active avec risque imminent de prolifération de moisissures noires.",
149
+ },
150
+ {
151
+ type: 'diagnostic',
152
+ variant: 'warning',
153
+ title: 'La Règle d\'Or',
154
+ icon: 'mdi:thermometer-alert',
155
+ badge: 'Conseil Clé',
156
+ html: "<p>Si la température de votre mur est à moins de <strong>3°C du point de rosée</strong>, vous faites face à un risque imminent de condensation. Ventilez, utilisez des extracteurs dans les salles de bain et les cuisines, et maintenez l'humidité relative entre 40% et 60%.</p>",
157
+ },
158
+ {
159
+ type: 'summary',
160
+ title: 'Comment Prévenir la Condensation',
161
+ items: [
162
+ 'Ventilez quotidiennement, surtout après la douche ou la cuisine.',
163
+ "Maintenez l'humidité relative entre 40% et 60%.",
164
+ 'Utilisez des extracteurs dans les salles de bain et les cuisines.',
165
+ "Ne faites pas sécher le linge à l'intérieur sans ventilation.",
166
+ 'Isolez thermiquement les murs pour éviter les surfaces froides.',
167
+ ],
168
+ },
169
+ ],
170
+ ui: {
171
+ labelTemperature: 'Température Ambiante',
172
+ labelHumidity: 'Humidité Relative',
173
+ labelDewPoint: 'Point de Rosée',
174
+ riskLow: 'Risque Faible',
175
+ riskMedium: 'Risque Moyen',
176
+ riskHigh: 'Risque Élevé',
177
+ riskExtreme: 'Danger Extrême',
178
+ riskLowDesc: 'Différence > 5°C. Surfaces sûres.',
179
+ riskMediumDesc: 'Différence 3–5°C. Surveillez les coins.',
180
+ riskHighDesc: 'Différence 1–3°C. Ventilez immédiatement.',
181
+ riskExtremeDesc: 'Différence < 1°C. Condensation active.',
182
+ },
183
+ };
@@ -0,0 +1,34 @@
1
+ import type { HomeToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
2
+ import DewPointCalculatorComponent from './component.astro';
3
+ import DewPointCalculatorSEO from './seo.astro';
4
+ import DewPointCalculatorBibliography from './bibliography.astro';
5
+
6
+ import type { DewPointCalculatorUI } from './ui';
7
+
8
+ export type DewPointCalculatorLocaleContent = ToolLocaleContent<DewPointCalculatorUI>;
9
+
10
+ import { content as es } from './i18n/es';
11
+ import { content as en } from './i18n/en';
12
+ import { content as fr } from './i18n/fr';
13
+
14
+ export const dewPointCalculator: HomeToolEntry<DewPointCalculatorUI> = {
15
+ id: 'dew-point-calculator',
16
+ icons: {
17
+ bg: 'mdi:water-thermometer',
18
+ fg: 'mdi:home-thermometer',
19
+ },
20
+ i18n: {
21
+ es: async () => es,
22
+ en: async () => en,
23
+ fr: async () => fr,
24
+ },
25
+ };
26
+
27
+ export { DewPointCalculatorComponent, DewPointCalculatorSEO, DewPointCalculatorBibliography };
28
+
29
+ export const DEW_POINT_CALCULATOR_TOOL: ToolDefinition = {
30
+ entry: dewPointCalculator,
31
+ Component: DewPointCalculatorComponent,
32
+ SEOComponent: DewPointCalculatorSEO,
33
+ BibliographyComponent: DewPointCalculatorBibliography,
34
+ };
@@ -0,0 +1,16 @@
1
+ export type MoldRisk = 'low' | 'medium' | 'high' | 'extreme';
2
+
3
+ export function calculateDewPoint(temp: number, humidity: number): number {
4
+ const b = 17.625;
5
+ const c = 243.04;
6
+ const alpha = Math.log(humidity / 100) + (b * temp) / (c + temp);
7
+ return (c * alpha) / (b - alpha);
8
+ }
9
+
10
+ export function getMoldRisk(temp: number, dewPoint: number): MoldRisk {
11
+ const diff = temp - dewPoint;
12
+ if (diff > 5) return 'low';
13
+ if (diff > 3) return 'medium';
14
+ if (diff > 1) return 'high';
15
+ return 'extreme';
16
+ }
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { dewPointCalculator } 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 dewPointCalculator.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+ <SEORenderer content={{ locale: locale as string, sections: content.seo }} />
@@ -0,0 +1,13 @@
1
+ export interface DewPointCalculatorUI extends Record<string, string> {
2
+ labelTemperature: string;
3
+ labelHumidity: string;
4
+ labelDewPoint: string;
5
+ riskLow: string;
6
+ riskMedium: string;
7
+ riskHigh: string;
8
+ riskExtreme: string;
9
+ riskLowDesc: string;
10
+ riskMediumDesc: string;
11
+ riskHighDesc: string;
12
+ riskExtremeDesc: string;
13
+ }
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
+ import { ledSavingCalculator } 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 ledSavingCalculator.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <SharedBibliography links={content.bibliography} />}