@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,225 @@
1
+ import type { WithContext, SoftwareApplication, FAQPage, HowToThing } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { ScreenDecompressionTimeUI } from '../ui';
4
+
5
+ const slug = 'calculateur-decompression-oculaire';
6
+ const title = 'Calculateur de Décompression Oculaire';
7
+ const description =
8
+ "Calculez les minutes de repos visuel dont vous avez besoin en fonction de vos heures d'écran quotidiennes. Règle 20-20-20 personnalisée pour prévenir la fatigue visuelle numérique.";
9
+
10
+ const faqData = [
11
+ {
12
+ question: "Qu'est-ce que la règle 20-20-20 et pourquoi fonctionne-t-elle?",
13
+ answer:
14
+ "La règle 20-20-20 stipule que toutes les 20 minutes de travail sur écran, vous devez regarder un objet à 20 pieds (environ 6 mètres) pendant au moins 20 secondes. Cet intervalle permet au muscle ciliaire — responsable de la mise au point — de se détendre complètement après la contraction soutenue exigée par la vision de près.",
15
+ },
16
+ {
17
+ question: "Combien de minutes de repos me faut-il pour 8 heures de travail sur ordinateur?",
18
+ answer:
19
+ "Pour 8 heures d'exposition à l'écran, la calculatrice recommande environ 16 minutes de repos visuel réparties tout au long de la journée, avec des pauses de 30 secondes toutes les 20 minutes. Une pause supplémentaire de 10 à 15 minutes en milieu de session est également recommandée.",
20
+ },
21
+ {
22
+ question: "Pourquoi les yeux se fatiguent-ils devant les écrans?",
23
+ answer:
24
+ "Les écrans obligent le muscle ciliaire à maintenir une contraction soutenue pour maintenir la mise au point sur un point proche. Ils réduisent également la fréquence de clignement de 17 à seulement 7 fois par minute, provoquant une sécheresse. La lumière bleue haute énergie (380-500 nm) ajoute un stress oxydatif supplémentaire à la rétine.",
25
+ },
26
+ {
27
+ question: "Les lunettes anti-lumière bleue sont-elles nécessaires?",
28
+ answer:
29
+ "Les preuves scientifiques sur les filtres anti-lumière bleue sont mitigées pour la fatigue générale, mais ils sont particulièrement utiles au-delà de 6 à 8 heures d'écran quotidiennes. Leur bénéfice le mieux documenté est la réduction de la suppression nocturne de la mélatonine, améliorant la qualité du sommeil des utilisateurs intensifs.",
30
+ },
31
+ {
32
+ question: "Quand consulter un ophtalmologue pour la fatigue visuelle numérique?",
33
+ answer:
34
+ "Consultez un spécialiste si vous présentez une vision floue persistant plus de 30 minutes après avoir quitté l'écran, des maux de tête frontaux ou occipitaux fréquents, une vision double, une sensation persistante de corps étranger ou des changements soudains de l'acuité visuelle. Ces symptômes peuvent indiquer des erreurs réfractives non corrigées ou une pathologie oculaire.",
35
+ },
36
+ ];
37
+
38
+ const howToData = [
39
+ {
40
+ name: "Saisissez vos heures d'écran",
41
+ text: "Utilisez le curseur ou le champ numérique pour indiquer combien d'heures par jour vous passez devant les écrans (ordinateur, téléphone, tablette). La plage va de 0 à 16 heures.",
42
+ },
43
+ {
44
+ name: 'Obtenez votre plan personnalisé',
45
+ text: "La calculatrice affiche instantanément les minutes de repos recommandées, le niveau de fatigue oculaire, l'intervalle optimal entre les pauses et la distance de travail idéale.",
46
+ },
47
+ {
48
+ name: 'Appliquez les recommandations dynamiques',
49
+ text: "Lisez les 4 cartes de recommandations adaptées à vos heures: gestion des pauses, posture ergonomique, fréquence de clignement et protection contre la lumière bleue.",
50
+ },
51
+ {
52
+ name: 'Visualisez votre journée idéale',
53
+ text: "Le graphique chronologique montre comment votre journée devrait être distribuée entre temps de travail sur écran, pauses visuelles et activités sans écran.",
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<ScreenDecompressionTimeUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faqTitle: "Questions fréquentes sur la fatigue visuelle et les écrans",
95
+ faq: faqData,
96
+ bibliographyTitle: 'Références scientifiques',
97
+ bibliography: [
98
+ {
99
+ name: "Organisation Mondiale de la Santé — Santé oculaire",
100
+ url: 'https://www.who.int/es/news-room/fact-sheets/detail/blindness-and-visual-impairment',
101
+ },
102
+ {
103
+ name: 'American Optometric Association — Computer Vision Syndrome',
104
+ url: 'https://www.aoa.org/healthy-eyes/eye-and-vision-conditions/computer-vision-syndrome',
105
+ },
106
+ {
107
+ name: "Mayo Clinic — Fatigue oculaire",
108
+ url: 'https://www.mayoclinic.org/diseases-conditions/eyestrain/symptoms-causes/syc-20372397',
109
+ },
110
+ ],
111
+ howTo: howToData,
112
+ schemas: [faqSchema, howToSchema, appSchema],
113
+ ui: {
114
+ labelHours: "Heures d'écran par jour",
115
+ presetLow: 'Peu',
116
+ presetNormal: 'Normal',
117
+ presetHigh: 'Beaucoup',
118
+ resultUnit: 'minutes de repos',
119
+ resultPer: 'par jour',
120
+ statInterval: 'Intervalle',
121
+ statBreaks: 'Pauses/jour',
122
+ statDistance: 'Distance idéale',
123
+ timelineTitle: 'Votre Journée Visuelle Idéale',
124
+ timelineWork: 'Travail',
125
+ timelineRest: 'Repos',
126
+ timelineOther: 'Autres',
127
+ fatigueLow: 'Faible',
128
+ fatigueMod: 'Modérée',
129
+ fatigueHigh: 'Élevée',
130
+ fatigueCritical: 'Critique',
131
+ recBreaksTitle: 'Pauses',
132
+ recBreaksText: 'Faites une pause visuelle toutes les {0} minutes de travail continu.',
133
+ recPostureTitle: 'Posture',
134
+ recPostureLow: "Gardez l'écran à 60-70 cm. Ajustez la hauteur au niveau des yeux.",
135
+ recPostureMod: "Augmentez la distance à 70-80 cm. Utilisez un moniteur d'au moins 24 pouces.",
136
+ recPostureHigh: "Distance minimale 80-100 cm. Envisagez un projecteur ou un grand écran.",
137
+ recBlinkTitle: 'Clignement',
138
+ recBlinkText: 'Clignez consciemment {0}+ fois par heure. Les écrans réduisent le clignement de 66%.',
139
+ recLightTitle: 'Lumière Bleue',
140
+ recLightLow: "Activez le mode nuit du système d'exploitation à partir de 20h.",
141
+ recLightMod: "Utilisez des lunettes avec filtre ou activez f.lux/Night Shift sur tous vos appareils.",
142
+ recLightHigh: "Filtre lumière bleue + lunettes spécialisées + mode sombre INDISPENSABLES.",
143
+ unitMin: 'min',
144
+ },
145
+ seo: [
146
+ {
147
+ type: 'summary',
148
+ title: 'Calculateur de Décompression Oculaire',
149
+ items: [
150
+ "<strong>Formule personnalisée</strong>: 2 minutes de repos par heure d'exposition à l'écran.",
151
+ '<strong>4 niveaux de fatigue</strong>: Faible, Modérée, Élevée et Critique avec des recommandations adaptées.',
152
+ "<strong>Règle 20-20-20</strong>: intervalles de pause calculés selon vos heures d'utilisation réelles.",
153
+ '<strong>Chronologie</strong>: visualisation de votre journée idéale avec blocs de travail et de repos.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: "Fatigue Visuelle Numérique: Le Coût Caché du Travail sur Écran",
159
+ level: 2,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: "Plus de <strong>60% des travailleurs numériques</strong> ressentent quotidiennement des symptômes de fatigue visuelle numérique: yeux irrités, vision floue, maux de tête frontaux ou sensation de lourdeur oculaire. Ce syndrome, cliniquement connu sous le nom de <em>Computer Vision Syndrome</em> (CVS), est la conséquence directe de soumettre le système visuel à un effort de mise au point de proximité soutenu sans les repos que la physiologie oculaire exige.",
164
+ },
165
+ {
166
+ type: 'title',
167
+ text: "La Règle 20-20-20: Base Scientifique et Application Pratique",
168
+ level: 2,
169
+ },
170
+ {
171
+ type: 'paragraph',
172
+ html: "La règle 20-20-20 a été popularisée par le Dr Jeff Anshel comme méthode mnémotechnique pour mettre en œuvre des pauses visuelles. Toutes les <strong>20 minutes</strong> de travail sur écran, regardez un objet à <strong>20 pieds</strong> (≈6 mètres) pendant <strong>20 secondes</strong>. Cet intervalle suffit pour que le muscle ciliaire atteigne son état de relaxation complète, équivalent à la vision infinie.",
173
+ },
174
+ {
175
+ type: 'table',
176
+ headers: ["Heures d'écran", 'Niveau de risque', 'Symptômes fréquents', 'Repos recommandé'],
177
+ rows: [
178
+ ['0-2 h', 'Faible', 'Pratiquement aucun', '4 min/jour'],
179
+ ['2-4 h', 'Faible-Modéré', 'Légère sécheresse occasionnelle', '6-8 min/jour'],
180
+ ['4-8 h', 'Modéré', 'Sécheresse, céphalée, flou vespéral', '10-16 min/jour'],
181
+ ['8-12 h', 'Élevé', 'Fatigue marquée, diplopie transitoire', '18-24 min/jour'],
182
+ ['>12 h', 'Critique', 'Symptômes persistants, risque pathologique', '>24 min/jour'],
183
+ ],
184
+ },
185
+ {
186
+ type: 'tip',
187
+ title: 'Le Clignement: La Variable Oubliée',
188
+ html: "Dans des conditions normales, nous clignons <strong>17 fois par minute</strong>, distribuant le film lacrymal sur la cornée. Devant un écran, ce taux tombe à <strong>7 fois par minute</strong> — une réduction de 59%. Le résultat est une évaporation accélérée des larmes, une sécheresse et une irritation accrue. Cligner consciemment toutes les quelques minutes est aussi important que les pauses visuelles.",
189
+ },
190
+ {
191
+ type: 'title',
192
+ text: "Lumière Bleue: Effets sur le Système Visuel et le Sommeil",
193
+ level: 2,
194
+ },
195
+ {
196
+ type: 'paragraph',
197
+ html: "Les écrans LED émettent dans la plage <strong>380-500 nm</strong> (lumière bleue haute énergie). Ce spectre a deux effets documentés: il stimule les cellules ganglionnaires rétiniennes qui régulent le rythme circadien, supprimant la sécrétion nocturne de <strong>mélatonine</strong>; et génère un stress oxydatif dans l'épithélium pigmentaire rétinien avec une exposition chronique et cumulée.",
198
+ },
199
+ {
200
+ type: 'title',
201
+ text: "Ergonomie Visuelle: Posture et Distance de Travail",
202
+ level: 2,
203
+ },
204
+ {
205
+ type: 'paragraph',
206
+ html: "La distance de travail n'est pas une donnée arbitraire: à <strong>60 cm</strong> le muscle ciliaire travaille à 50% de sa capacité d'accommodation maximale; à <strong>90 cm</strong> l'effort tombe à presque zéro. Pour les utilisateurs intensifs (>8h), augmenter la distance de travail et utiliser une police plus grande réduit significativement la charge ciliaire quotidienne cumulée.",
207
+ },
208
+ {
209
+ type: 'title',
210
+ text: "Quand Consulter un Ophtalmologue",
211
+ level: 2,
212
+ },
213
+ {
214
+ type: 'list',
215
+ items: [
216
+ "Vision floue <strong>persistant plus de 30 minutes</strong> après avoir quitté l'écran.",
217
+ "Maux de tête frontaux ou occipitaux <strong>fréquents</strong> associés au travail numérique.",
218
+ 'Vision double transitoire ou difficulté à changer la mise au point entre les distances.',
219
+ "<strong>Persistante</strong> sensation de corps étranger, démangeaisons ou picotements.",
220
+ "Changements soudains de l'acuité visuelle sans lien avec la fatigue.",
221
+ "Symptômes qui <strong>ne s'améliorent pas</strong> avec les mesures préventives standard.",
222
+ ],
223
+ },
224
+ ],
225
+ };
@@ -0,0 +1,27 @@
1
+ import type { HealthToolEntry, ToolDefinition } from '../../types';
2
+ import ScreenDecompressionTimeComponent from './component.astro';
3
+ import ScreenDecompressionTimeSEO from './seo.astro';
4
+ import ScreenDecompressionTimeBibliography from './bibliography.astro';
5
+ import type { ScreenDecompressionTimeUI } from './ui';
6
+
7
+ export const screenDecompressionTime: HealthToolEntry<ScreenDecompressionTimeUI> = {
8
+ id: 'screenDecompressionTime',
9
+ icons: {
10
+ bg: 'mdi:eye-outline',
11
+ fg: 'mdi:monitor',
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 { ScreenDecompressionTimeComponent, ScreenDecompressionTimeSEO, ScreenDecompressionTimeBibliography };
21
+
22
+ export const SCREEN_DECOMPRESSION_TIME_TOOL: ToolDefinition = {
23
+ entry: screenDecompressionTime,
24
+ Component: ScreenDecompressionTimeComponent,
25
+ SEOComponent: ScreenDecompressionTimeSEO,
26
+ BibliographyComponent: ScreenDecompressionTimeBibliography,
27
+ };
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { screenDecompressionTime } 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 screenDecompressionTime.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -0,0 +1,32 @@
1
+ export interface ScreenDecompressionTimeUI extends Record<string, string> {
2
+ labelHours: string;
3
+ presetLow: string;
4
+ presetNormal: string;
5
+ presetHigh: string;
6
+ resultUnit: string;
7
+ resultPer: string;
8
+ statInterval: string;
9
+ statBreaks: string;
10
+ statDistance: string;
11
+ timelineTitle: string;
12
+ timelineWork: string;
13
+ timelineRest: string;
14
+ timelineOther: string;
15
+ fatigueLow: string;
16
+ fatigueMod: string;
17
+ fatigueHigh: string;
18
+ fatigueCritical: string;
19
+ recBreaksTitle: string;
20
+ recBreaksText: string;
21
+ recPostureTitle: string;
22
+ recPostureLow: string;
23
+ recPostureMod: string;
24
+ recPostureHigh: string;
25
+ recBlinkTitle: string;
26
+ recBlinkText: string;
27
+ recLightTitle: string;
28
+ recLightLow: string;
29
+ recLightMod: string;
30
+ recLightHigh: string;
31
+ unitMin: string;
32
+ }
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { Bibliography } from '@jjlmoya/utils-shared';
3
+ import { tinnitusReliever } 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 tinnitusReliever.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <Bibliography items={content.bibliography} title={content.bibliographyTitle} />}