@jjlmoya/utils-astronomy 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 (57) hide show
  1. package/package.json +60 -0
  2. package/src/category/i18n/en.ts +57 -0
  3. package/src/category/i18n/es.ts +57 -0
  4. package/src/category/i18n/fr.ts +58 -0
  5. package/src/category/index.ts +16 -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 +19 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +22 -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 +24 -0
  17. package/src/tests/mocks/astro_mock.js +2 -0
  18. package/src/tests/seo_length.test.ts +57 -0
  19. package/src/tests/tool_validation.test.ts +145 -0
  20. package/src/tool/bortleVisualizer/bibliography.astro +14 -0
  21. package/src/tool/bortleVisualizer/component.astro +491 -0
  22. package/src/tool/bortleVisualizer/i18n/en.ts +153 -0
  23. package/src/tool/bortleVisualizer/i18n/es.ts +161 -0
  24. package/src/tool/bortleVisualizer/i18n/fr.ts +153 -0
  25. package/src/tool/bortleVisualizer/index.ts +41 -0
  26. package/src/tool/bortleVisualizer/logic.ts +118 -0
  27. package/src/tool/bortleVisualizer/seo.astro +61 -0
  28. package/src/tool/bortleVisualizer/style.css +5 -0
  29. package/src/tool/deepSpaceScope/bibliography.astro +14 -0
  30. package/src/tool/deepSpaceScope/component.astro +849 -0
  31. package/src/tool/deepSpaceScope/i18n/en.ts +157 -0
  32. package/src/tool/deepSpaceScope/i18n/es.ts +157 -0
  33. package/src/tool/deepSpaceScope/i18n/fr.ts +157 -0
  34. package/src/tool/deepSpaceScope/index.ts +48 -0
  35. package/src/tool/deepSpaceScope/logic.ts +41 -0
  36. package/src/tool/deepSpaceScope/seo.astro +61 -0
  37. package/src/tool/deepSpaceScope/style.css +5 -0
  38. package/src/tool/starExposureCalculator/bibliography.astro +14 -0
  39. package/src/tool/starExposureCalculator/component.astro +562 -0
  40. package/src/tool/starExposureCalculator/i18n/en.ts +163 -0
  41. package/src/tool/starExposureCalculator/i18n/es.ts +163 -0
  42. package/src/tool/starExposureCalculator/i18n/fr.ts +158 -0
  43. package/src/tool/starExposureCalculator/index.ts +53 -0
  44. package/src/tool/starExposureCalculator/logic.ts +49 -0
  45. package/src/tool/starExposureCalculator/seo.astro +61 -0
  46. package/src/tool/starExposureCalculator/style.css +5 -0
  47. package/src/tool/telescopeResolution/bibliography.astro +14 -0
  48. package/src/tool/telescopeResolution/component.astro +556 -0
  49. package/src/tool/telescopeResolution/i18n/en.ts +168 -0
  50. package/src/tool/telescopeResolution/i18n/es.ts +163 -0
  51. package/src/tool/telescopeResolution/i18n/fr.ts +168 -0
  52. package/src/tool/telescopeResolution/index.ts +52 -0
  53. package/src/tool/telescopeResolution/logic.ts +39 -0
  54. package/src/tool/telescopeResolution/seo.astro +61 -0
  55. package/src/tool/telescopeResolution/style.css +5 -0
  56. package/src/tools.ts +19 -0
  57. package/src/types.ts +71 -0
@@ -0,0 +1,168 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { TelescopeResolutionUI, TelescopeResolutionLocaleContent } from '../index';
3
+
4
+ const slug = 'telescope-resolution-calculator';
5
+ const title = 'Telescope Resolution Calculator (Dawes Limit)';
6
+ const description = 'Calculate the resolving power of your telescope with the Dawes Limit and Rayleigh Criterion. Discover the maximum useful magnification and the impact of atmospheric seeing.';
7
+
8
+ const ui: TelescopeResolutionUI = {
9
+ toolTitle: 'Telescope Resolution',
10
+ apertureLabel: 'Telescope Aperture',
11
+ unitLabel: 'Unit',
12
+ mmUnit: 'Millimeters (mm)',
13
+ inUnit: 'Inches (in)',
14
+ presetsLabel: 'Common Models',
15
+ presetsPlaceholder: '-- Select Preset --',
16
+ seeingLabel: 'Sky Quality (Seeing)',
17
+ dawesLabel: 'Useful Resolution (Dawes)',
18
+ arcsecUnit: 'arcseconds',
19
+ rayleighLabel: 'Rayleigh Limit',
20
+ maxMagLabel: 'Max. Useful Magnification',
21
+ seeingAlertPrefix: 'Atmosphere limited: Today\'s seeing',
22
+ seeingAlertSuffix: 'will prevent you from seeing your telescope\'s full potential',
23
+ simLabel: 'Simulation: Binary Stars',
24
+ simExplanation: 'Dawes separates point stars; Rayleigh defines planetary details.',
25
+ };
26
+
27
+ const faq: TelescopeResolutionLocaleContent['faq'] = [
28
+ {
29
+ question: 'What is the Dawes Limit?',
30
+ answer: 'The Dawes Limit is an empirical criterion for the angular resolution of a telescope, calculated as 116/D (where D is the diameter in mm). It represents the minimum separation in arcseconds between two stars of similar magnitude that an experienced observer can distinguish as two separate points. It was proposed by British astronomer William Dawes in the 19th century.',
31
+ },
32
+ {
33
+ question: 'What is the difference between Dawes and Rayleigh?',
34
+ answer: 'The Dawes Limit (116/D) is empirical and based on human vision for double stars. The Rayleigh Criterion (138/D) is physical, based on the wave nature of light. Rayleigh is more stringent and applies better to details on planetary surfaces (Jupiter\'s bands, lunar craters). Dawes is more useful for separating binary stars.',
35
+ },
36
+ {
37
+ question: 'What is seeing and how does it affect me?',
38
+ answer: 'Seeing is the measure of atmospheric turbulence that distorts light passing through the air. On an average night, seeing limits resolution to 1-2 arcseconds, meaning telescopes larger than ~115mm cannot exceed this atmospheric limit. Excellent seeing (0.5") is rare and occurs in high-altitude locations with little thermal activity.',
39
+ },
40
+ {
41
+ question: 'What is the maximum useful magnification of a telescope?',
42
+ answer: 'The golden rule is 2x the aperture in mm (or 50x per inch). A 150mm telescope has a useful maximum of 300x. Exceeding this limit makes the image larger but without more detail, only darker and blurrier. Seeing frequently limits this value to 100-150x on average nights.',
43
+ },
44
+ ];
45
+
46
+ const howTo: TelescopeResolutionLocaleContent['howTo'] = [
47
+ { name: '1. Enter the aperture', text: 'Type the diameter of your telescope\'s main mirror or lens. You can select a preset from common models.' },
48
+ { name: '2. Adjust seeing', text: 'Move the seeing slider to simulate the atmospheric turbulence on your observation night.' },
49
+ { name: '3. Interpret results', text: 'Observe the Dawes and Rayleigh limits in arcseconds. The lower the value, the higher the resolution.' },
50
+ { name: '4. Check if seeing limits you', text: 'If the seeing alert appears, the atmosphere is limiting your telescope\'s performance that night.' },
51
+ ];
52
+
53
+ const bibliography: TelescopeResolutionLocaleContent['bibliography'] = [
54
+ { name: 'Sky & Telescope - Telescope Resolution Explained', url: 'https://skyandtelescope.org/stargazing-and-observing/celestial-objects-to-watch/telescope-calculator/' },
55
+ { name: 'British Astronomical Association - Seeing Scale', url: 'https://www.britastro.org/' },
56
+ { name: 'Astronomical Seeing (Wikipedia)', url: 'https://en.wikipedia.org/wiki/Astronomical_seeing' },
57
+ ];
58
+
59
+ const seo: TelescopeResolutionLocaleContent['seo'] = [
60
+ {
61
+ type: 'summary',
62
+ title: 'Key Points of Telescopic Resolution',
63
+ items: [
64
+ 'The Dawes Limit (116/D mm) determines the minimum separation between resolvable binary stars.',
65
+ 'The Rayleigh Criterion (138/D mm) defines the minimum visible detail on planetary surfaces.',
66
+ 'Atmospheric seeing (1-2" typical) usually exceeds the theoretical limit of telescopes larger than 115mm.',
67
+ 'Maximum useful magnification is 2x aperture in mm; exceeding this only darkens the image.',
68
+ ],
69
+ },
70
+ { type: 'title', text: 'Astronomical Resolution: Guide to the Dawes Limit and Rayleigh', level: 2 },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'The power of a telescope is not measured by how much it can magnify an image, but by how much detail it can resolve. This capability, known as <strong>resolving power</strong>, depends almost exclusively on the diameter of its aperture. The larger the mirror or main lens, the smaller the details it can separate.',
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: 'There are two main criteria for quantifying this resolution. The <strong>Dawes Limit</strong> (116/D arcsec) is empirical, defined by astronomer William Dawes based on double star observations. The <strong>Rayleigh Criterion</strong> (138/D arcsec) is theoretical, derived from the wave physics of light diffraction. Both agree that aperture is the decisive factor.',
78
+ },
79
+ { type: 'title', text: 'Seeing: The Atmospheric Barrier', level: 2 },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'You can have the world\'s largest telescope, but if the atmosphere is unstable, you won\'t see fine details. <strong>Seeing</strong> is the measure of atmospheric turbulence. On an average night, the atmosphere limits resolution to approximately 1-1.5 arcseconds. For telescopes larger than 115mm, seeing is the bottleneck, not the optics.',
83
+ },
84
+ {
85
+ type: 'table',
86
+ headers: ['Aperture', 'Dawes (arcsec)', 'Rayleigh (arcsec)', 'Max. Mag', 'Required Seeing'],
87
+ rows: [
88
+ ['70mm', '1.66"', '1.97"', '140x', '< 1.7"'],
89
+ ['100mm', '1.16"', '1.38"', '200x', '< 1.2"'],
90
+ ['150mm', '0.77"', '0.92"', '300x', '< 0.8"'],
91
+ ['200mm', '0.58"', '0.69"', '400x', '< 0.6"'],
92
+ ['300mm', '0.39"', '0.46"', '600x', '< 0.4"'],
93
+ ['400mm', '0.29"', '0.35"', '800x', '< 0.3"'],
94
+ ],
95
+ },
96
+ {
97
+ type: 'tip',
98
+ title: 'Thermal Acclimatization: The Secret to Detail',
99
+ html: 'The greatest enemy of resolution is not external seeing, but <strong>local seeing</strong> inside the telescope tube. The warm air remaining inside when moving the telescope from indoors creates convection currents that destroy detail. Allow your telescope to acclimatize to outdoor temperature for at least 30-60 minutes before observing at high magnification.',
100
+ },
101
+ { type: 'title', text: 'Collimation: The Alignment that Unlocks Potential', level: 2 },
102
+ {
103
+ type: 'paragraph',
104
+ html: 'A poorly collimated telescope (with misaligned mirrors) will never perform at the Dawes limit, regardless of aperture. <strong>Collimation</strong> is the process of perfectly aligning the secondary and primary mirrors with the focuser. For reflecting telescopes (Newtonians, Dobsonians), collimation is an essential periodic task. Practice using the "star test" technique on a bright star.',
105
+ },
106
+ { type: 'title', text: 'Practical Tips to Maximize Resolution', level: 2 },
107
+ {
108
+ type: 'paragraph',
109
+ html: 'Beyond aperture and collimation, several observational habits dramatically improve the resolution you achieve in practice. Always wait for the telescope to reach thermal equilibrium with outdoor air — this takes 30-60 minutes for most instruments. Avoid observing over rooftops, parking lots, or any surface that radiates stored heat. Choose nights after cold fronts pass, which tend to bring more stable atmospheric layers. Use the highest magnification that still gives a steady image — if the image is "boiling", drop to a lower power eyepiece and wait for a steadier moment to push higher. Finally, <strong>dark adaptation</strong> matters even for planetary work: give your eyes 20 minutes of complete darkness to maximize cone sensitivity for color detail on planets like Mars or Jupiter.',
110
+ },
111
+ {
112
+ type: 'stats',
113
+ columns: 2,
114
+ items: [
115
+ { label: 'Dawes 150mm', value: '0.77"', icon: 'mdi:flare' },
116
+ { label: 'Dawes 300mm', value: '0.39"', icon: 'mdi:flare' },
117
+ { label: 'Good Seeing', value: '0.5 - 1.0"', icon: 'mdi:weather-windy' },
118
+ { label: 'Average Seeing', value: '1.0 - 2.0"', icon: 'mdi:weather-cloudy' },
119
+ ],
120
+ },
121
+ ];
122
+
123
+ const faqSchema: WithContext<FAQPage> = {
124
+ '@context': 'https://schema.org',
125
+ '@type': 'FAQPage',
126
+ mainEntity: faq.map((item) => ({
127
+ '@type': 'Question',
128
+ name: item.question,
129
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
130
+ })),
131
+ };
132
+
133
+ const howToSchema: WithContext<HowTo> = {
134
+ '@context': 'https://schema.org',
135
+ '@type': 'HowTo',
136
+ name: title,
137
+ description,
138
+ step: howTo.map((step) => ({
139
+ '@type': 'HowToStep',
140
+ name: step.name,
141
+ text: step.text,
142
+ })),
143
+ };
144
+
145
+ const appSchema: WithContext<SoftwareApplication> = {
146
+ '@context': 'https://schema.org',
147
+ '@type': 'SoftwareApplication',
148
+ name: title,
149
+ description,
150
+ applicationCategory: 'UtilitiesApplication',
151
+ operatingSystem: 'Web',
152
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
153
+ inLanguage: 'en',
154
+ };
155
+
156
+ export const content: TelescopeResolutionLocaleContent = {
157
+ slug,
158
+ title,
159
+ description,
160
+ ui,
161
+ seo,
162
+ faq,
163
+ faqTitle: 'Frequently Asked Questions',
164
+ bibliography,
165
+ bibliographyTitle: 'Bibliographic References',
166
+ howTo,
167
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
168
+ };
@@ -0,0 +1,163 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { TelescopeResolutionUI, TelescopeResolutionLocaleContent } from '../index';
3
+
4
+ const slug = 'calculadora-resolucion-telescopio';
5
+ const title = 'Calculadora de Resolución de Telescopio (Límite de Dawes)';
6
+ const description = 'Calcula el poder de resolución de tu telescopio con el Límite de Dawes y el Criterio de Rayleigh. Descubre el aumento máximo útil y el impacto del seeing atmosférico.';
7
+
8
+ const ui: TelescopeResolutionUI = {
9
+ toolTitle: 'Resolución del Telescopio',
10
+ apertureLabel: 'Apertura del Telescopio',
11
+ unitLabel: 'Unidad de Medida',
12
+ mmUnit: 'Milímetros (mm)',
13
+ inUnit: 'Pulgadas (in)',
14
+ presetsLabel: 'Modelos Comunes',
15
+ presetsPlaceholder: '-- Seleccionar Preset --',
16
+ seeingLabel: 'Calidad del Cielo (Seeing)',
17
+ dawesLabel: 'Resolución Útil (Dawes)',
18
+ arcsecUnit: 'arcosegundos',
19
+ rayleighLabel: 'Límite Rayleigh',
20
+ maxMagLabel: 'Aumento Máx. Útil',
21
+ seeingAlertPrefix: 'Atmósfera limitada: El seeing de hoy',
22
+ seeingAlertSuffix: 'impedirá que veas el potencial de tu telescopio',
23
+ simLabel: 'Simulación: Estrellas Binarias',
24
+ simExplanation: 'Dawes separa estrellas puntuales; Rayleigh define detalles planetarios.',
25
+ };
26
+
27
+ const faq: TelescopeResolutionLocaleContent['faq'] = [
28
+ {
29
+ question: '¿Qué es el Límite de Dawes?',
30
+ answer: 'El Límite de Dawes es un criterio empírico para la resolución angular de un telescopio, calculado como 116/D (donde D es el diámetro en mm). Representa la separación mínima en arcosegundos entre dos estrellas de similar magnitud que un observador experimentado puede distinguir como dos puntos separados. Fue propuesto por el astrónomo británico William Dawes en el siglo XIX.',
31
+ },
32
+ {
33
+ question: '¿Cuál es la diferencia entre Dawes y Rayleigh?',
34
+ answer: 'El Límite de Dawes (116/D) es empírico y basado en la visión humana para estrellas dobles. El Criterio de Rayleigh (138/D) es físico, basado en la naturaleza ondulatoria de la luz. Rayleigh es más estricto y se aplica mejor para detalles en superficies planetarias (bandas de Júpiter, cráteres de la Luna). Dawes es más útil para separar estrellas binarias.',
35
+ },
36
+ {
37
+ question: '¿Qué es el seeing y cómo me afecta?',
38
+ answer: 'El seeing es la medida de la turbulencia atmosférica que distorsiona la luz que pasa a través del aire. En una noche promedio, el seeing limita la resolución a 1-2 arcosegundos, lo que significa que telescopios mayores de ~115mm no pueden superar este límite atmosférico. El seeing excelente (0.5") es raro y se da en zonas altas y con poca actividad térmica.',
39
+ },
40
+ {
41
+ question: '¿Cuál es el aumento máximo útil de un telescopio?',
42
+ answer: 'La regla de oro es 2x la apertura en mm (o 50x por pulgada). Un telescopio de 150mm tiene un máximo útil de 300x. Pasar de este límite hace la imagen más grande pero sin más detalle, solo más oscura y borrosa. El seeing frecuentemente limita este valor a 100-150x en noches medias.',
43
+ },
44
+ ];
45
+
46
+ const howTo: TelescopeResolutionLocaleContent['howTo'] = [
47
+ { name: '1. Introduce la apertura', text: 'Escribe el diámetro del espejo o lente principal de tu telescopio. Puedes seleccionar un preset de modelos comunes.' },
48
+ { name: '2. Ajusta el seeing', text: 'Mueve el slider de seeing para simular la turbulencia atmosférica de tu noche de observación.' },
49
+ { name: '3. Interpreta los resultados', text: 'Observa los límites de Dawes y Rayleigh en arcosegundos. Cuanto menor, mayor resolución.' },
50
+ { name: '4. Verifica si el seeing te limita', text: 'Si aparece la alerta de seeing, tu atmósfera está limitando el rendimiento de tu telescopio esa noche.' },
51
+ ];
52
+
53
+ const bibliography: TelescopeResolutionLocaleContent['bibliography'] = [
54
+ { name: 'Sky & Telescope - Telescope Resolution Explained', url: 'https://skyandtelescope.org/stargazing-and-observing/celestial-objects-to-watch/telescope-calculator/' },
55
+ { name: 'British Astronomical Association - Seeing Scale', url: 'https://www.britastro.org/' },
56
+ { name: 'Atmospheric Dispersion and Seeing (Astronomia)', url: 'https://en.wikipedia.org/wiki/Astronomical_seeing' },
57
+ ];
58
+
59
+ const seo: TelescopeResolutionLocaleContent['seo'] = [
60
+ {
61
+ type: 'summary',
62
+ title: 'Claves de la Resolución Telescópica',
63
+ items: [
64
+ 'El Límite de Dawes (116/D mm) determina la separación mínima entre estrellas binarias resolvibles.',
65
+ 'El Criterio de Rayleigh (138/D mm) define el detalle mínimo visible en superficies planetarias.',
66
+ 'El seeing atmosférico (1-2" típico) suele superar el límite teórico de telescopios mayores de 115mm.',
67
+ 'El aumento máximo útil es 2x la apertura en mm; superarlo solo oscurece la imagen.',
68
+ ],
69
+ },
70
+ { type: 'title', text: 'Resolución Astronómica: Guía del Límite de Dawes y Rayleigh', level: 2 },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'La potencia de un telescopio no se mide por cuánto puede ampliar una imagen, sino por cuánto detalle es capaz de resolver. Esta capacidad, conocida como <strong>poder de resolución</strong>, depende casi exclusivamente del diámetro de su apertura. Cuanto mayor es el espejo o la lente principal, más pequeños son los detalles que puede separar.',
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: 'Existen dos criterios principales para cuantificar esta resolución. El <strong>Límite de Dawes</strong> (116/D arcsec) es empírico, definido por el astrónomo William Dawes en base a observaciones de estrellas dobles. El <strong>Criterio de Rayleigh</strong> (138/D arcsec) es teórico, derivado de la física ondulatoria de la difracción de la luz. Ambos concuerdan en que la apertura es el factor decisivo.',
78
+ },
79
+ { type: 'title', text: 'El Seeing: La Barrera Atmosférica', level: 2 },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'Puedes tener el telescopio más grande del mundo, pero si la atmósfera está inestable, no verás detalles finos. El <strong>seeing</strong> es la medida de la turbulencia atmosférica. En una noche media, la atmósfera limita la resolución a aproximadamente 1-1.5 arcosegundos. Para un telescopio de 115mm con Dawes = 1.01", el seeing promedio no permite ver más detalle del teórico. Para telescopios más grandes, el seeing es el cuello de botella.',
83
+ },
84
+ {
85
+ type: 'table',
86
+ headers: ['Apertura', 'Dawes (arcsec)', 'Rayleigh (arcsec)', 'Max. Aumento', 'Seeing necesario'],
87
+ rows: [
88
+ ['70mm', '1.66"', '1.97"', '140x', '< 1.7"'],
89
+ ['100mm', '1.16"', '1.38"', '200x', '< 1.2"'],
90
+ ['150mm', '0.77"', '0.92"', '300x', '< 0.8"'],
91
+ ['200mm', '0.58"', '0.69"', '400x', '< 0.6"'],
92
+ ['300mm', '0.39"', '0.46"', '600x', '< 0.4"'],
93
+ ['400mm', '0.29"', '0.35"', '800x', '< 0.3"'],
94
+ ],
95
+ },
96
+ {
97
+ type: 'tip',
98
+ title: 'Aclimatación Térmica: El Secreto del Detalle',
99
+ html: 'El mayor enemigo de la resolución no es el seeing externo, sino el <strong>seeing local</strong> dentro del tubo del telescopio. El aire caliente que queda dentro al trasladar el telescopio del interior al exterior crea corrientes de convección que destruyen el detalle. Deja que tu telescopio se aclimate a temperatura exterior durante al menos 30-60 minutos antes de observar a altos aumentos.',
100
+ },
101
+ { type: 'title', text: 'Colimación: La Alineación que Libera el Potencial', level: 2 },
102
+ {
103
+ type: 'paragraph',
104
+ html: 'Un telescopio mal colimado (con los espejos desalineados) nunca rendirá al límite de Dawes, independientemente de la apertura. La <strong>colimación</strong> es el proceso de alinear perfectamente los espejos secundario y primario con el portaocular. Para telescopios reflectores (Newtonianos, Dobsonianos), la colimación es una tarea periódica imprescindible. Practica la colimación en la estrella artificial de Polaris o en una estrella brillante usando la técnica del "star test".',
105
+ },
106
+ {
107
+ type: 'stats',
108
+ columns: 2,
109
+ items: [
110
+ { label: 'Dawes 150mm', value: '0.77"', icon: 'mdi:flare' },
111
+ { label: 'Dawes 300mm', value: '0.39"', icon: 'mdi:flare' },
112
+ { label: 'Seeing Bueno', value: '0.5 - 1.0"', icon: 'mdi:weather-windy' },
113
+ { label: 'Seeing Medio', value: '1.0 - 2.0"', icon: 'mdi:weather-cloudy' },
114
+ ],
115
+ },
116
+ ];
117
+
118
+ const faqSchema: WithContext<FAQPage> = {
119
+ '@context': 'https://schema.org',
120
+ '@type': 'FAQPage',
121
+ mainEntity: faq.map((item) => ({
122
+ '@type': 'Question',
123
+ name: item.question,
124
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
125
+ })),
126
+ };
127
+
128
+ const howToSchema: WithContext<HowTo> = {
129
+ '@context': 'https://schema.org',
130
+ '@type': 'HowTo',
131
+ name: title,
132
+ description,
133
+ step: howTo.map((step) => ({
134
+ '@type': 'HowToStep',
135
+ name: step.name,
136
+ text: step.text,
137
+ })),
138
+ };
139
+
140
+ const appSchema: WithContext<SoftwareApplication> = {
141
+ '@context': 'https://schema.org',
142
+ '@type': 'SoftwareApplication',
143
+ name: title,
144
+ description,
145
+ applicationCategory: 'UtilitiesApplication',
146
+ operatingSystem: 'Web',
147
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
148
+ inLanguage: 'es',
149
+ };
150
+
151
+ export const content: TelescopeResolutionLocaleContent = {
152
+ slug,
153
+ title,
154
+ description,
155
+ ui,
156
+ seo,
157
+ faq,
158
+ faqTitle: 'Preguntas Frecuentes',
159
+ bibliography,
160
+ bibliographyTitle: 'Referencias Bibliográficas',
161
+ howTo,
162
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
163
+ };
@@ -0,0 +1,168 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { TelescopeResolutionUI, TelescopeResolutionLocaleContent } from '../index';
3
+
4
+ const slug = 'calculateur-resolution-telescope';
5
+ const title = 'Calculateur de Résolution du Télescope (Limite de Dawes)';
6
+ const description = 'Calculez le pouvoir de résolution de votre télescope avec la Limite de Dawes et le Critère de Rayleigh. Découvrez le grossissement maximum utile et l\'impact du seeing atmosphérique.';
7
+
8
+ const ui: TelescopeResolutionUI = {
9
+ toolTitle: 'Résolution du Télescope',
10
+ apertureLabel: 'Ouverture du Télescope',
11
+ unitLabel: 'Unité',
12
+ mmUnit: 'Millimètres (mm)',
13
+ inUnit: 'Pouces (in)',
14
+ presetsLabel: 'Modèles Courants',
15
+ presetsPlaceholder: '-- Sélectionner un Modèle --',
16
+ seeingLabel: 'Qualité du Ciel (Seeing)',
17
+ dawesLabel: 'Résolution Utile (Dawes)',
18
+ arcsecUnit: 'arcsecondes',
19
+ rayleighLabel: 'Limite de Rayleigh',
20
+ maxMagLabel: 'Grossissement Max. Utile',
21
+ seeingAlertPrefix: 'Atmosphère limitée: Le seeing d\'aujourd\'hui',
22
+ seeingAlertSuffix: 'vous empêchera de voir le potentiel complet de votre télescope',
23
+ simLabel: 'Simulation: Étoiles Binaires',
24
+ simExplanation: 'Dawes sépare les étoiles ponctuelles; Rayleigh définit les détails planétaires.',
25
+ };
26
+
27
+ const faq: TelescopeResolutionLocaleContent['faq'] = [
28
+ {
29
+ question: 'Qu\'est-ce que la Limite de Dawes?',
30
+ answer: 'La Limite de Dawes est un critère empirique pour la résolution angulaire d\'un télescope, calculée comme 116/D (où D est le diamètre en mm). Elle représente la séparation minimale en arcsecondes entre deux étoiles de magnitude similaire qu\'un observateur expérimenté peut distinguer comme deux points séparés. Elle a été proposée par l\'astronome britannique William Dawes au XIXe siècle.',
31
+ },
32
+ {
33
+ question: 'Quelle est la différence entre Dawes et Rayleigh?',
34
+ answer: 'La Limite de Dawes (116/D) est empirique et basée sur la vision humaine pour les étoiles doubles. Le Critère de Rayleigh (138/D) est physique, basé sur la nature ondulatoire de la lumière. Rayleigh est plus strict et s\'applique mieux aux détails sur les surfaces planétaires (bandes de Jupiter, cratères lunaires). Dawes est plus utile pour séparer les étoiles binaires.',
35
+ },
36
+ {
37
+ question: 'Qu\'est-ce que le seeing et comment m\'affecte-t-il?',
38
+ answer: 'Le seeing est la mesure de la turbulence atmosphérique qui distord la lumière traversant l\'air. Par nuit moyenne, le seeing limite la résolution à environ 1-2 arcsecondes, ce qui signifie que les télescopes plus grands que ~115mm ne peuvent pas dépasser cette limite atmosphérique. Un excellent seeing (0.5") est rare et se produit dans des zones de haute altitude avec peu d\'activité thermique.',
39
+ },
40
+ {
41
+ question: 'Quel est le grossissement maximum utile d\'un télescope?',
42
+ answer: 'La règle d\'or est 2x l\'ouverture en mm (ou 50x par pouce). Un télescope de 150mm a un maximum utile de 300x. Dépasser cette limite rend l\'image plus grande mais sans plus de détail, seulement plus sombre et plus floue. Le seeing limite fréquemment cette valeur à 100-150x par nuit moyenne.',
43
+ },
44
+ ];
45
+
46
+ const howTo: TelescopeResolutionLocaleContent['howTo'] = [
47
+ { name: '1. Entrez l\'ouverture', text: 'Tapez le diamètre du miroir ou de la lentille principale de votre télescope. Vous pouvez sélectionner un modèle prédéfini.' },
48
+ { name: '2. Ajustez le seeing', text: 'Déplacez le curseur de seeing pour simuler la turbulence atmosphérique de votre nuit d\'observation.' },
49
+ { name: '3. Interprétez les résultats', text: 'Observez les limites de Dawes et Rayleigh en arcsecondes. Plus la valeur est faible, plus la résolution est élevée.' },
50
+ { name: '4. Vérifiez si le seeing vous limite', text: 'Si l\'alerte de seeing apparaît, l\'atmosphère limite les performances de votre télescope cette nuit.' },
51
+ ];
52
+
53
+ const bibliography: TelescopeResolutionLocaleContent['bibliography'] = [
54
+ { name: 'Sky & Telescope - Résolution du Télescope', url: 'https://skyandtelescope.org/stargazing-and-observing/celestial-objects-to-watch/telescope-calculator/' },
55
+ { name: 'British Astronomical Association - Échelle de Seeing', url: 'https://www.britastro.org/' },
56
+ { name: 'Turbulence Atmosphérique (Wikipedia)', url: 'https://en.wikipedia.org/wiki/Astronomical_seeing' },
57
+ ];
58
+
59
+ const seo: TelescopeResolutionLocaleContent['seo'] = [
60
+ {
61
+ type: 'summary',
62
+ title: 'Points Clés de la Résolution Télescopique',
63
+ items: [
64
+ 'La Limite de Dawes (116/D mm) détermine la séparation minimale entre étoiles binaires résolvables.',
65
+ 'Le Critère de Rayleigh (138/D mm) définit le détail minimal visible sur les surfaces planétaires.',
66
+ 'Le seeing atmosphérique (1-2" typique) dépasse généralement la limite théorique des télescopes > 115mm.',
67
+ 'Le grossissement maximum utile est 2x l\'ouverture en mm; le dépasser obscurcit seulement l\'image.',
68
+ ],
69
+ },
70
+ { type: 'title', text: 'Résolution Astronomique: Guide de la Limite de Dawes et Rayleigh', level: 2 },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'La puissance d\'un télescope ne se mesure pas à combien il peut agrandir une image, mais à combien de détails il peut résoudre. Cette capacité, connue sous le nom de <strong>pouvoir de résolution</strong>, dépend presque exclusivement du diamètre de son ouverture. Plus le miroir ou la lentille principale est grand, plus les détails qu\'il peut séparer sont petits.',
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: 'Il existe deux critères principaux pour quantifier cette résolution. La <strong>Limite de Dawes</strong> (116/D arcsecondes) est empirique, définie par l\'astronome William Dawes sur la base d\'observations d\'étoiles doubles. Le <strong>Critère de Rayleigh</strong> (138/D arcsecondes) est théorique, dérivé de la physique ondulatoire de la diffraction de la lumière. Les deux s\'accordent à dire que l\'ouverture est le facteur décisif.',
78
+ },
79
+ { type: 'title', text: 'Le Seeing: La Barrière Atmosphérique', level: 2 },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'Vous pouvez avoir le plus grand télescope du monde, mais si l\'atmosphère est instable, vous ne verrez pas de détails fins. Le <strong>seeing</strong> est la mesure de la turbulence atmosphérique. Par nuit moyenne, l\'atmosphère limite la résolution à environ 1-1.5 arcseconde. Pour les télescopes de plus de 115mm, le seeing est le goulot d\'étranglement, pas l\'optique.',
83
+ },
84
+ {
85
+ type: 'table',
86
+ headers: ['Ouverture', 'Dawes (arcsec)', 'Rayleigh (arcsec)', 'Grossissement Max', 'Seeing requis'],
87
+ rows: [
88
+ ['70mm', '1.66"', '1.97"', '140x', '< 1.7"'],
89
+ ['100mm', '1.16"', '1.38"', '200x', '< 1.2"'],
90
+ ['150mm', '0.77"', '0.92"', '300x', '< 0.8"'],
91
+ ['200mm', '0.58"', '0.69"', '400x', '< 0.6"'],
92
+ ['300mm', '0.39"', '0.46"', '600x', '< 0.4"'],
93
+ ['400mm', '0.29"', '0.35"', '800x', '< 0.3"'],
94
+ ],
95
+ },
96
+ {
97
+ type: 'tip',
98
+ title: 'Acclimatation Thermique: Le Secret du Détail',
99
+ html: 'Le plus grand ennemi de la résolution n\'est pas le seeing externe, mais le <strong>seeing local</strong> à l\'intérieur du tube du télescope. L\'air chaud restant à l\'intérieur lors du déplacement du télescope de l\'intérieur crée des courants de convection qui détruisent le détail. Laissez votre télescope s\'acclimater à la température extérieure pendant au moins 30-60 minutes avant d\'observer à forts grossissements.',
100
+ },
101
+ { type: 'title', text: 'Collimation: L\'Alignement qui Libère le Potentiel', level: 2 },
102
+ {
103
+ type: 'paragraph',
104
+ html: 'Un télescope mal collimaté (avec des miroirs désalignés) n\'atteindra jamais la limite de Dawes, quelle que soit l\'ouverture. La <strong>collimation</strong> est le processus d\'alignement parfait des miroirs secondaire et primaire avec le porte-oculaire. Pour les télescopes réflecteurs (Newtoniens, Dobsoniens), la collimation est une tâche périodique indispensable.',
105
+ },
106
+ { type: 'title', text: 'Conseils Pratiques pour Maximiser la Résolution', level: 2 },
107
+ {
108
+ type: 'paragraph',
109
+ html: 'Au-delà de l\'ouverture et de la collimation, plusieurs habitudes d\'observation améliorent considérablement la résolution obtenue en pratique. Attendez toujours que le télescope atteigne l\'équilibre thermique avec l\'air extérieur — cela prend 30 à 60 minutes pour la plupart des instruments. Évitez d\'observer au-dessus des toits, parkings ou toute surface qui rayonne la chaleur emmagasinée. Choisissez des nuits après le passage de fronts froids, qui tendent à apporter des couches atmosphériques plus stables. Utilisez le grossissement maximum qui donne encore une image stable — si l\'image "bout", passez à un oculaire de plus faible grossissement. Enfin, l\'<strong>adaptation à l\'obscurité</strong> est importante même pour le travail planétaire: laissez vos yeux 20 minutes dans l\'obscurité complète pour maximiser la sensibilité aux détails colorés sur des planètes comme Mars ou Jupiter.',
110
+ },
111
+ {
112
+ type: 'stats',
113
+ columns: 2,
114
+ items: [
115
+ { label: 'Dawes 150mm', value: '0.77"', icon: 'mdi:flare' },
116
+ { label: 'Dawes 300mm', value: '0.39"', icon: 'mdi:flare' },
117
+ { label: 'Bon Seeing', value: '0.5 - 1.0"', icon: 'mdi:weather-windy' },
118
+ { label: 'Seeing Moyen', value: '1.0 - 2.0"', icon: 'mdi:weather-cloudy' },
119
+ ],
120
+ },
121
+ ];
122
+
123
+ const faqSchema: WithContext<FAQPage> = {
124
+ '@context': 'https://schema.org',
125
+ '@type': 'FAQPage',
126
+ mainEntity: faq.map((item) => ({
127
+ '@type': 'Question',
128
+ name: item.question,
129
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
130
+ })),
131
+ };
132
+
133
+ const howToSchema: WithContext<HowTo> = {
134
+ '@context': 'https://schema.org',
135
+ '@type': 'HowTo',
136
+ name: title,
137
+ description,
138
+ step: howTo.map((step) => ({
139
+ '@type': 'HowToStep',
140
+ name: step.name,
141
+ text: step.text,
142
+ })),
143
+ };
144
+
145
+ const appSchema: WithContext<SoftwareApplication> = {
146
+ '@context': 'https://schema.org',
147
+ '@type': 'SoftwareApplication',
148
+ name: title,
149
+ description,
150
+ applicationCategory: 'UtilitiesApplication',
151
+ operatingSystem: 'Web',
152
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
153
+ inLanguage: 'fr',
154
+ };
155
+
156
+ export const content: TelescopeResolutionLocaleContent = {
157
+ slug,
158
+ title,
159
+ description,
160
+ ui,
161
+ seo,
162
+ faq,
163
+ faqTitle: 'Questions Fréquentes',
164
+ bibliography,
165
+ bibliographyTitle: 'Références Bibliographiques',
166
+ howTo,
167
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
168
+ };
@@ -0,0 +1,52 @@
1
+ import type { AstronomyToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
2
+ import TelescopeResolutionComponent from './component.astro';
3
+ import TelescopeResolutionSEO from './seo.astro';
4
+ import TelescopeResolutionBibliography from './bibliography.astro';
5
+
6
+ export interface TelescopeResolutionUI {
7
+ [key: string]: string;
8
+ toolTitle: string;
9
+ apertureLabel: string;
10
+ unitLabel: string;
11
+ mmUnit: string;
12
+ inUnit: string;
13
+ presetsLabel: string;
14
+ presetsPlaceholder: string;
15
+ seeingLabel: string;
16
+ dawesLabel: string;
17
+ arcsecUnit: string;
18
+ rayleighLabel: string;
19
+ maxMagLabel: string;
20
+ seeingAlertPrefix: string;
21
+ seeingAlertSuffix: string;
22
+ simLabel: string;
23
+ simExplanation: string;
24
+ }
25
+
26
+ export type TelescopeResolutionLocaleContent = ToolLocaleContent<TelescopeResolutionUI>;
27
+
28
+ import { content as es } from './i18n/es';
29
+ import { content as en } from './i18n/en';
30
+ import { content as fr } from './i18n/fr';
31
+
32
+ export const telescopeResolution: AstronomyToolEntry<TelescopeResolutionUI> = {
33
+ id: 'telescope-resolution',
34
+ icons: {
35
+ bg: 'mdi:telescope',
36
+ fg: 'mdi:flare',
37
+ },
38
+ i18n: {
39
+ es: async () => es,
40
+ en: async () => en,
41
+ fr: async () => fr,
42
+ },
43
+ };
44
+
45
+ export { TelescopeResolutionComponent, TelescopeResolutionSEO, TelescopeResolutionBibliography };
46
+
47
+ export const TELESCOPE_RESOLUTION_TOOL: ToolDefinition = {
48
+ entry: telescopeResolution,
49
+ Component: TelescopeResolutionComponent,
50
+ SEOComponent: TelescopeResolutionSEO,
51
+ BibliographyComponent: TelescopeResolutionBibliography,
52
+ };
@@ -0,0 +1,39 @@
1
+ export interface ResolutionResult {
2
+ dawes: number;
3
+ rayleigh: number;
4
+ maxMagnification: number;
5
+ apertureMm: number;
6
+ seeingLimited: boolean;
7
+ }
8
+
9
+ export function calculateResolution(apertureMm: number, seeing: number): ResolutionResult {
10
+ const dawes = 116 / apertureMm;
11
+ const rayleigh = 138 / apertureMm;
12
+ const maxMagnification = apertureMm * 2;
13
+ const seeingLimited = dawes < seeing;
14
+
15
+ return {
16
+ dawes,
17
+ rayleigh,
18
+ maxMagnification,
19
+ apertureMm,
20
+ seeingLimited,
21
+ };
22
+ }
23
+
24
+ export function inchesToMm(inches: number): number {
25
+ return inches * 25.4;
26
+ }
27
+
28
+ export function mmToInches(mm: number): number {
29
+ return mm / 25.4;
30
+ }
31
+
32
+ export const TELESCOPE_PRESETS: { label: string; mm: number }[] = [
33
+ { label: '70mm (Refractor - Iniciación)', mm: 70 },
34
+ { label: '114mm (4.5") Newtonian', mm: 114 },
35
+ { label: '150mm (6") Dobson', mm: 150 },
36
+ { label: '200mm (8") Dobson', mm: 200 },
37
+ { label: '254mm (10") Dobson', mm: 254 },
38
+ { label: '304mm (12") Profesional', mm: 304 },
39
+ ];
@@ -0,0 +1,61 @@
1
+ ---
2
+ import {
3
+ SEOTitle,
4
+ SEOTable,
5
+ SEOTip,
6
+ SEOCard,
7
+ SEOStats,
8
+ SEOGlossary,
9
+ SEOProsCons,
10
+ SEOSummary,
11
+ SEODiagnostic,
12
+ SEOArticle
13
+ } from '@jjlmoya/utils-shared';
14
+ import { telescopeResolution } from './index';
15
+ import type { KnownLocale } from '../../types';
16
+
17
+ interface Props {
18
+ locale?: KnownLocale;
19
+ }
20
+
21
+ const { locale = 'es' } = Astro.props;
22
+ const content = await telescopeResolution.i18n[locale]?.();
23
+ if (!content) return null;
24
+
25
+ const { seo } = content;
26
+ ---
27
+
28
+ <SEOArticle>
29
+ {seo.map((section: any) => {
30
+ switch (section.type) {
31
+ case 'summary':
32
+ return <SEOSummary title={section.title} items={section.items} />;
33
+ case 'title':
34
+ return <SEOTitle title={section.text} level={section.level || 2} />;
35
+ case 'paragraph':
36
+ return <p set:html={section.html} />;
37
+ case 'stats':
38
+ return <SEOStats stats={section.items} columns={section.columns} />;
39
+ case 'card':
40
+ return <SEOCard title={section.title} icon={section.icon}><Fragment set:html={section.html} /></SEOCard>;
41
+ case 'tip':
42
+ return <SEOTip title={section.title}><Fragment set:html={section.html} /></SEOTip>;
43
+ case 'table':
44
+ return (
45
+ <SEOTable headers={section.headers}>
46
+ {section.rows.map((row: string[]) => (
47
+ <tr>{row.map((cell: string) => <td set:html={cell} />)}</tr>
48
+ ))}
49
+ </SEOTable>
50
+ );
51
+ case 'proscons':
52
+ return <SEOProsCons title={section.title} items={section.items} />;
53
+ case 'diagnostic':
54
+ return <SEODiagnostic title={section.title} icon={section.icon} type={section.variant} badge={section.badge}><Fragment set:html={section.html} /></SEODiagnostic>;
55
+ case 'glossary':
56
+ return <SEOGlossary items={section.items} />;
57
+ default:
58
+ return null;
59
+ }
60
+ })}
61
+ </SEOArticle>