@jjlmoya/utils-science 1.18.0 → 1.20.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 (99) hide show
  1. package/package.json +1 -1
  2. package/src/pages/[locale]/[slug].astro +30 -14
  3. package/src/tests/locale_completeness.test.ts +3 -20
  4. package/src/tests/shared-test-helpers.ts +56 -0
  5. package/src/tests/tool_exports.test.ts +34 -0
  6. package/src/tool/asteroid-impact/asteroid-impact-simulator.css +2 -2
  7. package/src/tool/asteroid-impact/bibliography.astro +1 -1
  8. package/src/tool/asteroid-impact/bibliography.ts +24 -0
  9. package/src/tool/asteroid-impact/i18n/de.ts +4 -24
  10. package/src/tool/asteroid-impact/i18n/en.ts +4 -24
  11. package/src/tool/asteroid-impact/i18n/es.ts +4 -24
  12. package/src/tool/asteroid-impact/i18n/fr.ts +4 -24
  13. package/src/tool/asteroid-impact/i18n/id.ts +4 -24
  14. package/src/tool/asteroid-impact/i18n/it.ts +4 -24
  15. package/src/tool/asteroid-impact/i18n/ja.ts +4 -24
  16. package/src/tool/asteroid-impact/i18n/ko.ts +4 -24
  17. package/src/tool/asteroid-impact/i18n/nl.ts +4 -24
  18. package/src/tool/asteroid-impact/i18n/pl.ts +4 -24
  19. package/src/tool/asteroid-impact/i18n/pt.ts +4 -24
  20. package/src/tool/asteroid-impact/i18n/ru.ts +4 -24
  21. package/src/tool/asteroid-impact/i18n/sv.ts +4 -24
  22. package/src/tool/asteroid-impact/i18n/tr.ts +4 -24
  23. package/src/tool/asteroid-impact/i18n/zh.ts +4 -24
  24. package/src/tool/asteroid-impact/seo.astro +1 -1
  25. package/src/tool/cellular-renewal/bibliography.astro +1 -1
  26. package/src/tool/cellular-renewal/bibliography.ts +24 -0
  27. package/src/tool/cellular-renewal/i18n/de.ts +3 -24
  28. package/src/tool/cellular-renewal/i18n/en.ts +3 -24
  29. package/src/tool/cellular-renewal/i18n/es.ts +3 -24
  30. package/src/tool/cellular-renewal/i18n/fr.ts +3 -24
  31. package/src/tool/cellular-renewal/i18n/id.ts +3 -24
  32. package/src/tool/cellular-renewal/i18n/it.ts +3 -24
  33. package/src/tool/cellular-renewal/i18n/ja.ts +3 -24
  34. package/src/tool/cellular-renewal/i18n/ko.ts +3 -24
  35. package/src/tool/cellular-renewal/i18n/nl.ts +3 -24
  36. package/src/tool/cellular-renewal/i18n/pl.ts +3 -24
  37. package/src/tool/cellular-renewal/i18n/pt.ts +3 -24
  38. package/src/tool/cellular-renewal/i18n/ru.ts +3 -24
  39. package/src/tool/cellular-renewal/i18n/sv.ts +3 -24
  40. package/src/tool/cellular-renewal/i18n/tr.ts +3 -24
  41. package/src/tool/cellular-renewal/i18n/zh.ts +3 -24
  42. package/src/tool/cellular-renewal/seo.astro +2 -1
  43. package/src/tool/colony-counter/bibliography.astro +1 -1
  44. package/src/tool/colony-counter/bibliography.ts +12 -0
  45. package/src/tool/colony-counter/colony-counter.css +3 -3
  46. package/src/tool/colony-counter/i18n/de.ts +3 -12
  47. package/src/tool/colony-counter/i18n/en.ts +3 -12
  48. package/src/tool/colony-counter/i18n/es.ts +3 -12
  49. package/src/tool/colony-counter/i18n/fr.ts +3 -12
  50. package/src/tool/colony-counter/i18n/id.ts +3 -12
  51. package/src/tool/colony-counter/i18n/it.ts +3 -12
  52. package/src/tool/colony-counter/i18n/ja.ts +3 -12
  53. package/src/tool/colony-counter/i18n/ko.ts +3 -12
  54. package/src/tool/colony-counter/i18n/nl.ts +3 -12
  55. package/src/tool/colony-counter/i18n/pl.ts +3 -12
  56. package/src/tool/colony-counter/i18n/pt.ts +3 -12
  57. package/src/tool/colony-counter/i18n/ru.ts +3 -12
  58. package/src/tool/colony-counter/i18n/sv.ts +3 -12
  59. package/src/tool/colony-counter/i18n/tr.ts +3 -12
  60. package/src/tool/colony-counter/i18n/zh.ts +3 -12
  61. package/src/tool/colony-counter/seo.astro +1 -1
  62. package/src/tool/microwave-detector/bibliography.astro +1 -1
  63. package/src/tool/microwave-detector/bibliography.ts +16 -0
  64. package/src/tool/microwave-detector/i18n/de.ts +3 -16
  65. package/src/tool/microwave-detector/i18n/en.ts +3 -16
  66. package/src/tool/microwave-detector/i18n/es.ts +3 -16
  67. package/src/tool/microwave-detector/i18n/fr.ts +3 -16
  68. package/src/tool/microwave-detector/i18n/id.ts +3 -16
  69. package/src/tool/microwave-detector/i18n/it.ts +3 -16
  70. package/src/tool/microwave-detector/i18n/ja.ts +3 -16
  71. package/src/tool/microwave-detector/i18n/ko.ts +3 -16
  72. package/src/tool/microwave-detector/i18n/nl.ts +3 -16
  73. package/src/tool/microwave-detector/i18n/pl.ts +3 -16
  74. package/src/tool/microwave-detector/i18n/pt.ts +3 -16
  75. package/src/tool/microwave-detector/i18n/ru.ts +3 -16
  76. package/src/tool/microwave-detector/i18n/sv.ts +3 -16
  77. package/src/tool/microwave-detector/i18n/tr.ts +3 -16
  78. package/src/tool/microwave-detector/i18n/zh.ts +3 -16
  79. package/src/tool/microwave-detector/microwave-leak-detector.css +22 -25
  80. package/src/tool/microwave-detector/seo.astro +2 -1
  81. package/src/tool/simulation-probability/bibliography.astro +1 -1
  82. package/src/tool/simulation-probability/bibliography.ts +24 -0
  83. package/src/tool/simulation-probability/i18n/de.ts +3 -24
  84. package/src/tool/simulation-probability/i18n/en.ts +3 -24
  85. package/src/tool/simulation-probability/i18n/es.ts +3 -24
  86. package/src/tool/simulation-probability/i18n/fr.ts +3 -24
  87. package/src/tool/simulation-probability/i18n/id.ts +3 -24
  88. package/src/tool/simulation-probability/i18n/it.ts +3 -24
  89. package/src/tool/simulation-probability/i18n/ja.ts +3 -24
  90. package/src/tool/simulation-probability/i18n/ko.ts +3 -24
  91. package/src/tool/simulation-probability/i18n/nl.ts +3 -24
  92. package/src/tool/simulation-probability/i18n/pl.ts +3 -24
  93. package/src/tool/simulation-probability/i18n/pt.ts +3 -24
  94. package/src/tool/simulation-probability/i18n/ru.ts +3 -24
  95. package/src/tool/simulation-probability/i18n/sv.ts +3 -24
  96. package/src/tool/simulation-probability/i18n/tr.ts +3 -24
  97. package/src/tool/simulation-probability/i18n/zh.ts +3 -24
  98. package/src/tool/simulation-probability/seo.astro +2 -1
  99. package/src/types.ts +0 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlmoya/utils-science",
3
- "version": "1.18.0",
3
+ "version": "1.20.0",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -34,18 +34,28 @@ export async function getStaticPaths() {
34
34
  ]),
35
35
  ) as Partial<Record<KnownLocale, string>>;
36
36
 
37
+ const firstLoader = entry.i18n.en ?? Object.values(entry.i18n)[0];
38
+ const englishSlug = firstLoader ? (await firstLoader()).slug : entry.id;
39
+
37
40
  for (const { locale, content } of localeContents) {
38
- const allToolsNav = await Promise.all(
39
- ALL_TOOLS.map(async ({ entry: navEntry }) => ({
40
- id: navEntry.id,
41
- title: (await navEntry.i18n[locale]!()).title,
42
- href: `/${locale}/${(await navEntry.i18n[locale]!()).slug}`,
43
- isActive: navEntry.id === entry.id,
44
- })),
45
- );
41
+ const allToolsNav = (
42
+ await Promise.all(
43
+ ALL_TOOLS.map(async ({ entry: navEntry }) => {
44
+ const loader = navEntry.i18n[locale] ?? navEntry.i18n.en;
45
+ if (!loader) return null;
46
+ const navContent = await loader();
47
+ return {
48
+ id: navEntry.id,
49
+ title: navContent.title,
50
+ href: `/${locale}/${navContent.slug}`,
51
+ isActive: navEntry.id === entry.id,
52
+ };
53
+ }),
54
+ )
55
+ ).filter(Boolean) as NavItem[];
46
56
  paths.push({
47
57
  params: { locale, slug: content.slug },
48
- props: { Component, locale, content, localeUrls, allToolsNav },
58
+ props: { Component, locale, content, localeUrls, allToolsNav, englishSlug },
49
59
  });
50
60
  }
51
61
  }
@@ -66,11 +76,16 @@ interface Props {
66
76
  content: ToolLocaleContent;
67
77
  localeUrls: Partial<Record<KnownLocale, string>>;
68
78
  allToolsNav: NavItem[];
79
+ englishSlug: string;
69
80
  }
70
81
 
71
- const { Component, locale, content, localeUrls, allToolsNav } = Astro.props;
82
+ const { Component, locale, content, localeUrls, allToolsNav, englishSlug } = Astro.props;
83
+
84
+ const cssFiles = import.meta.glob("../../tool/*/*.css", { query: "?raw", import: "default" });
85
+ const cssKey = Object.keys(cssFiles).find((k) => k.endsWith(`/${englishSlug}.css`));
86
+ const toolCss = cssKey ? await cssFiles[cssKey]() as string : "";
72
87
 
73
- const seoContent: UtilitySEOContent = { locale, sections: content.seo };
88
+ const seoContent: UtilitySEOContent = { locale, sections: content.seo ?? [] };
74
89
 
75
90
  const words = content.title.split(" ");
76
91
  const titleHighlight = words[0] || "";
@@ -89,8 +104,9 @@ const titleBase = words.slice(1).join(" ") || "";
89
104
  tools={allToolsNav}
90
105
  />
91
106
  <Fragment slot="head">
107
+ {toolCss ? <Fragment set:html={`<style is:inline>${toolCss}</style>`} /> : null}
92
108
  {
93
- content.schemas.map((schema: unknown) => (
109
+ ( content.schemas ?? []).map((schema: unknown) => (
94
110
  <script
95
111
  is:inline
96
112
  type="application/ld+json"
@@ -116,11 +132,11 @@ const titleBase = words.slice(1).join(" ") || "";
116
132
  </section>
117
133
 
118
134
  <section class="section-faq">
119
- <FAQSection items={content.faq} title={content.ui.faqTitle} inLanguage={locale} />
135
+ <FAQSection items={content.faq} inLanguage={locale} />
120
136
  </section>
121
137
 
122
138
  <section class="section-bibliography">
123
- <Bibliography links={content.bibliography} title={content.ui.bibliographyTitle} />
139
+ <Bibliography links={content.bibliography} />
124
140
  </section>
125
141
  </div>
126
142
  </PreviewLayout>
@@ -7,28 +7,11 @@ describe('Locale Completeness Validation', () => {
7
7
  describe(`Tool: ${tool.entry.id}`, () => {
8
8
  Object.keys(tool.entry.i18n).forEach((locale) => {
9
9
  describe(`Locale: ${locale}`, () => {
10
- it('faqTitle should be defined when faq items exist', async () => {
10
+ it('faq and bibliography should be arrays', async () => {
11
11
  const loader = tool.entry.i18n[locale as keyof typeof tool.entry.i18n];
12
12
  const content = (await loader?.()) as ToolLocaleContent;
13
-
14
- if (content.faq.length > 0) {
15
- expect(
16
- content.faqTitle,
17
- `Tool "${tool.entry.id}" locale "${locale}" has ${content.faq.length} FAQ items but is missing faqTitle`,
18
- ).toBeTruthy();
19
- }
20
- });
21
-
22
- it('bibliographyTitle should be defined when bibliography items exist', async () => {
23
- const loader = tool.entry.i18n[locale as keyof typeof tool.entry.i18n];
24
- const content = (await loader?.()) as ToolLocaleContent;
25
-
26
- if (content.bibliography.length > 0) {
27
- expect(
28
- content.bibliographyTitle,
29
- `Tool "${tool.entry.id}" locale "${locale}" has ${content.bibliography.length} bibliography items but is missing bibliographyTitle`,
30
- ).toBeTruthy();
31
- }
13
+ expect(Array.isArray(content.faq)).toBe(true);
14
+ expect(Array.isArray(content.bibliography)).toBe(true);
32
15
  });
33
16
  });
34
17
  });
@@ -0,0 +1,56 @@
1
+ import type { ToolDefinition } from '../types';
2
+
3
+ export interface ToolExportValidationResult {
4
+ passed: boolean;
5
+ failures: string[];
6
+ }
7
+
8
+ function validateComponentType(
9
+ toolId: string,
10
+ componentName: string,
11
+ component: unknown,
12
+ failures: string[],
13
+ ): void {
14
+ if (typeof component !== 'function') {
15
+ failures.push(`${toolId}: ${componentName} is not a function (${typeof component})`);
16
+ }
17
+ }
18
+
19
+ async function validateComponentExecution(
20
+ toolId: string,
21
+ componentName: string,
22
+ fn: () => Promise<unknown>,
23
+ failures: string[],
24
+ ): Promise<void> {
25
+ try {
26
+ const result = await fn();
27
+ if (!result || typeof result !== 'object') {
28
+ failures.push(`${toolId}: ${componentName} import returned invalid result`);
29
+ }
30
+ } catch (error) {
31
+ failures.push(`${toolId}: ${componentName} execution error - ${error instanceof Error ? error.message : 'unknown'}`);
32
+ }
33
+ }
34
+
35
+ export async function validateToolExports(tools: ToolDefinition[]): Promise<ToolExportValidationResult> {
36
+ const failures: string[] = [];
37
+
38
+ for (const tool of tools) {
39
+ validateComponentType(tool.entry.id, 'Component', tool.Component, failures);
40
+ validateComponentType(tool.entry.id, 'SEOComponent', tool.SEOComponent, failures);
41
+ validateComponentType(tool.entry.id, 'BibliographyComponent', tool.BibliographyComponent, failures);
42
+
43
+ const componentFn = tool.Component as () => Promise<unknown>;
44
+ const seoFn = tool.SEOComponent as () => Promise<unknown>;
45
+ const bibFn = tool.BibliographyComponent as () => Promise<unknown>;
46
+
47
+ await validateComponentExecution(tool.entry.id, 'Component', componentFn, failures);
48
+ await validateComponentExecution(tool.entry.id, 'SEOComponent', seoFn, failures);
49
+ await validateComponentExecution(tool.entry.id, 'BibliographyComponent', bibFn, failures);
50
+ }
51
+
52
+ return {
53
+ passed: failures.length === 0,
54
+ failures,
55
+ };
56
+ }
@@ -0,0 +1,34 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { ALL_TOOLS } from '../tools';
3
+ import { validateToolExports } from './shared-test-helpers';
4
+
5
+ describe('Tool Exports Pattern Validation', () => {
6
+ describe('Component Exports Format', () => {
7
+ ALL_TOOLS.forEach((tool) => {
8
+ it(`${tool.entry.id}: Component should be a lazy-loaded function`, () => {
9
+ expect(typeof tool.Component).toBe('function');
10
+ expect(tool.Component).toBeInstanceOf(Function);
11
+ });
12
+
13
+ it(`${tool.entry.id}: SEOComponent should be a lazy-loaded function`, () => {
14
+ expect(typeof tool.SEOComponent).toBe('function');
15
+ expect(tool.SEOComponent).toBeInstanceOf(Function);
16
+ });
17
+
18
+ it(`${tool.entry.id}: BibliographyComponent should be a lazy-loaded function`, () => {
19
+ expect(typeof tool.BibliographyComponent).toBe('function');
20
+ expect(tool.BibliographyComponent).toBeInstanceOf(Function);
21
+ });
22
+ });
23
+ });
24
+
25
+ describe('Dynamic Import Validation', () => {
26
+ it('all tools must have functional dynamic imports', async () => {
27
+ const result = await validateToolExports(ALL_TOOLS);
28
+ if (!result.passed) {
29
+ throw new Error(`Tool export validation failed:\n${result.failures.join('\n')}`);
30
+ }
31
+ expect(result.passed).toBe(true);
32
+ });
33
+ });
34
+ });
@@ -27,7 +27,7 @@
27
27
  --asteroid-transition-slow: all 0.3s ease;
28
28
  }
29
29
 
30
- :global(.theme-dark) {
30
+ .theme-dark {
31
31
  --asteroid-primary: #ff9f43;
32
32
  --asteroid-secondary: #ff6b5b;
33
33
  --asteroid-accent: #94a3b8;
@@ -134,7 +134,7 @@
134
134
  transition: var(--asteroid-transition);
135
135
  }
136
136
 
137
- :global(.theme-dark) .asteroid-gps-btn {
137
+ .theme-dark .asteroid-gps-btn {
138
138
  background: rgba(30, 41, 59, 0.95);
139
139
  border: 1px solid rgba(100, 116, 139, 0.4);
140
140
  }
@@ -11,4 +11,4 @@ const { locale = 'es' } = Astro.props;
11
11
  const content = await asteroidImpact.i18n[locale]?.();
12
12
  ---
13
13
 
14
- {content && <Bibliography links={content.bibliography} title={content.ui.bibliographyTitle} />}
14
+ {content && <Bibliography links={content.bibliography} />}
@@ -0,0 +1,24 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ {
5
+ name: 'Collins, G. S., et al. (2005). Earth Impact Effects Program: A Web-based computer program for calculating the regional environmental consequences of a meteoroid impact on Earth.',
6
+ url: 'https://impact.ese.ic.ac.uk/ImpactEarth/',
7
+ },
8
+ {
9
+ name: 'Toon, O. B., et al. (1997). Environmental perturbations caused by the impacts of asteroids and comets. Reviews of Geophysics.',
10
+ url: 'https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/96RG03038',
11
+ },
12
+ {
13
+ name: 'Chapman, C. R., & Morrison, D. (1994). Impacts on the Earth by asteroids and comets: assessing the hazard. Nature.',
14
+ url: 'https://www.nature.com/articles/367033a0',
15
+ },
16
+ {
17
+ name: 'Schulte, P., et al. (2010). The Chicxulub Asteroid Impact and Mass Extinction at the Cretaceous-Paleogene Boundary. Science.',
18
+ url: 'https://www.science.org/doi/10.1126/science.1177265',
19
+ },
20
+ {
21
+ name: 'Brown, P., et al. (2013). A 500-kiloton airburst over Chelyabinsk and an enhanced hazard from small impactors. Nature.',
22
+ url: 'https://www.nature.com/articles/nature12741',
23
+ },
24
+ ];
@@ -37,14 +37,13 @@ const faq = [
37
37
  answer: 'Kleinere Einschläge (wie Russland 2013) ereignen sich jedes Jahrzehnt. Katastrophale Einschläge (Typ Tunguska) alle paar Jahrhunderte. Ein globales Massenaussterben wie bei Chicxulub findet etwa alle 100 Millionen Jahre statt.',
38
38
  },
39
39
  ];
40
+ import { bibliography } from '../bibliography';
40
41
  import type { ToolLocaleContent } from '../../../types';
41
42
 
42
43
  export const content: ToolLocaleContent = {
43
44
  slug,
44
45
  title,
45
46
  description,
46
- faqTitle: 'Häufig gestellte Fragen',
47
- bibliographyTitle: 'Bibliografie',
48
47
  ui: {
49
48
  copied: 'Kopiert',
50
49
  noHistory: 'Kein Verlauf',
@@ -135,28 +134,7 @@ export const content: ToolLocaleContent = {
135
134
  },
136
135
  ],
137
136
  faq,
138
- bibliography: [
139
- {
140
- name: 'Collins, G. S., et al. (2005). Earth Impact Effects Program: Ein webbasiertes Computerprogramm zur Berechnung der regionalen Umweltfolgen eines Meteoriteneinschlags auf der Erde.',
141
- url: 'https://impact.ese.ic.ac.uk/ImpactEarth/',
142
- },
143
- {
144
- name: 'Toon, O. B., et al. (1997). Environmental perturbations caused by the impacts of asteroids and comets. Reviews of Geophysics.',
145
- url: 'https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/96RG03038',
146
- },
147
- {
148
- name: 'Chapman, C. R., & Morrison, D. (1994). Impacts on the Earth by asteroids and comets: assessing the hazard. Nature.',
149
- url: 'https://www.nature.com/articles/367033a0',
150
- },
151
- {
152
- name: 'Schulte, P., et al. (2010). The Chicxulub Asteroid Impact and Mass Extinction at the Cretaceous-Paleogene Boundary. Science.',
153
- url: 'https://www.science.org/doi/10.1126/science.1177265',
154
- },
155
- {
156
- name: 'Brown, P., et al. (2013). A 500-kiloton airburst over Chelyabinsk and an enhanced hazard from small impactors. Nature.',
157
- url: 'https://www.nature.com/articles/nature12741',
158
- },
159
- ],
137
+ bibliography,
160
138
  howTo,
161
139
 
162
140
  schemas: [
@@ -192,3 +170,5 @@ export const content: ToolLocaleContent = {
192
170
  },
193
171
  ],
194
172
  };
173
+
174
+
@@ -37,14 +37,13 @@ const faq = [
37
37
  answer: 'Small impacts (like Russia in 2013) happen every decade. Catastrophic impacts (Tunguska-style) every few centuries. A global extinction event like Chicxulub happens approximately every 100 million years.',
38
38
  },
39
39
  ];
40
+ import { bibliography } from '../bibliography';
40
41
  import type { ToolLocaleContent } from '../../../types';
41
42
 
42
43
  export const content: ToolLocaleContent = {
43
44
  slug,
44
45
  title,
45
46
  description,
46
- faqTitle: 'Frequently Asked Questions',
47
- bibliographyTitle: 'Bibliography',
48
47
  ui: {
49
48
  copied: 'Copied',
50
49
  noHistory: 'No history',
@@ -135,28 +134,7 @@ export const content: ToolLocaleContent = {
135
134
  },
136
135
  ],
137
136
  faq,
138
- bibliography: [
139
- {
140
- name: 'Collins, G. S., et al. (2005). Earth Impact Effects Program: A Web-based computer program for calculating the regional environmental consequences of a meteoroid impact on Earth.',
141
- url: 'https://impact.ese.ic.ac.uk/ImpactEarth/',
142
- },
143
- {
144
- name: 'Toon, O. B., et al. (1997). Environmental perturbations caused by the impacts of asteroids and comets. Reviews of Geophysics.',
145
- url: 'https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/96RG03038',
146
- },
147
- {
148
- name: 'Chapman, C. R., & Morrison, D. (1994). Impacts on the Earth by asteroids and comets: assessing the hazard. Nature.',
149
- url: 'https://www.nature.com/articles/367033a0',
150
- },
151
- {
152
- name: 'Schulte, P., et al. (2010). The Chicxulub Asteroid Impact and Mass Extinction at the Cretaceous-Paleogene Boundary. Science.',
153
- url: 'https://www.science.org/doi/10.1126/science.1177265',
154
- },
155
- {
156
- name: 'Brown, P., et al. (2013). A 500-kiloton airburst over Chelyabinsk and an enhanced hazard from small impactors. Nature.',
157
- url: 'https://www.nature.com/articles/nature12741',
158
- },
159
- ],
137
+ bibliography,
160
138
  howTo,
161
139
 
162
140
  schemas: [
@@ -192,3 +170,5 @@ export const content: ToolLocaleContent = {
192
170
  },
193
171
  ],
194
172
  };
173
+
174
+
@@ -37,14 +37,13 @@ const faq = [
37
37
  answer: 'Impactos pequeños (como el de Rusia en 2013) ocurren cada década. Impactos catastróficos (tipo Tunguska) cada pocos siglos. Un evento de extinción global como Chicxulub ocurre aproximadamente cada 100 millones de años.',
38
38
  },
39
39
  ];
40
+ import { bibliography } from '../bibliography';
40
41
  import type { ToolLocaleContent } from '../../../types';
41
42
 
42
43
  export const content: ToolLocaleContent = {
43
44
  slug,
44
45
  title,
45
46
  description,
46
- faqTitle: 'Preguntas Frecuentes',
47
- bibliographyTitle: 'Bibliografía',
48
47
  ui: {
49
48
  copied: 'Copiado',
50
49
  noHistory: 'Sin historial',
@@ -135,28 +134,7 @@ export const content: ToolLocaleContent = {
135
134
  },
136
135
  ],
137
136
  faq,
138
- bibliography: [
139
- {
140
- name: 'Collins, G. S., et al. (2005). Earth Impact Effects Program: A Web-based computer program for calculating the regional environmental consequences of a meteoroid impact on Earth.',
141
- url: 'https://impact.ese.ic.ac.uk/ImpactEarth/',
142
- },
143
- {
144
- name: 'Toon, O. B., et al. (1997). Environmental perturbations caused by the impacts of asteroids and comets. Reviews of Geophysics.',
145
- url: 'https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/96RG03038',
146
- },
147
- {
148
- name: 'Chapman, C. R., & Morrison, D. (1994). Impacts on the Earth by asteroids and comets: assessing the hazard. Nature.',
149
- url: 'https://www.nature.com/articles/367033a0',
150
- },
151
- {
152
- name: 'Schulte, P., et al. (2010). The Chicxulub Asteroid Impact and Mass Extinction at the Cretaceous-Paleogene Boundary. Science.',
153
- url: 'https://www.science.org/doi/10.1126/science.1177265',
154
- },
155
- {
156
- name: 'Brown, P., et al. (2013). A 500-kiloton airburst over Chelyabinsk and an enhanced hazard from small impactors. Nature.',
157
- url: 'https://www.nature.com/articles/nature12741',
158
- },
159
- ],
137
+ bibliography,
160
138
  howTo,
161
139
 
162
140
  schemas: [
@@ -192,3 +170,5 @@ export const content: ToolLocaleContent = {
192
170
  },
193
171
  ],
194
172
  };
173
+
174
+
@@ -37,14 +37,13 @@ const faq = [
37
37
  answer: 'Les petits impacts (comme en Russie en 2013) se produisent chaque décennie. Les impacts catastrophiques (type Tunguska) tous les quelques siècles. Un événement d\'extinction mondiale comme Chicxulub se produit environ tous les 100 millions d\'années.',
38
38
  },
39
39
  ];
40
+ import { bibliography } from '../bibliography';
40
41
  import type { ToolLocaleContent } from '../../../types';
41
42
 
42
43
  export const content: ToolLocaleContent = {
43
44
  slug,
44
45
  title,
45
46
  description,
46
- faqTitle: 'Questions Fréquemment Posées',
47
- bibliographyTitle: 'Bibliographie',
48
47
  ui: {
49
48
  copied: 'Copié',
50
49
  noHistory: 'Pas d\'historique',
@@ -135,28 +134,7 @@ export const content: ToolLocaleContent = {
135
134
  },
136
135
  ],
137
136
  faq,
138
- bibliography: [
139
- {
140
- name: 'Collins, G. S., et al. (2005). Earth Impact Effects Program: A Web-based computer program for calculating the regional environmental consequences of a meteoroid impact on Earth.',
141
- url: 'https://impact.ese.ic.ac.uk/ImpactEarth/',
142
- },
143
- {
144
- name: 'Toon, O. B., et al. (1997). Environmental perturbations caused by the impacts of asteroids and comets. Reviews of Geophysics.',
145
- url: 'https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/96RG03038',
146
- },
147
- {
148
- name: 'Chapman, C. R., & Morrison, D. (1994). Impacts on the Earth by asteroids and comets: assessing the hazard. Nature.',
149
- url: 'https://www.nature.com/articles/367033a0',
150
- },
151
- {
152
- name: 'Schulte, P., et al. (2010). The Chicxulub Asteroid Impact and Mass Extinction at the Cretaceous-Paleogene Boundary. Science.',
153
- url: 'https://www.science.org/doi/10.1126/science.1177265',
154
- },
155
- {
156
- name: 'Brown, P., et al. (2013). A 500-kiloton airburst over Chelyabinsk and an enhanced hazard from small impactors. Nature.',
157
- url: 'https://www.nature.com/articles/nature12741',
158
- },
159
- ],
137
+ bibliography,
160
138
  howTo,
161
139
 
162
140
  schemas: [
@@ -192,3 +170,5 @@ export const content: ToolLocaleContent = {
192
170
  },
193
171
  ],
194
172
  };
173
+
174
+
@@ -37,14 +37,13 @@ const faq = [
37
37
  answer: 'Dampak kecil (seperti Rusia pada 2013) terjadi setiap dekade. Dampak bencana (gaya Tunguska) terjadi setiap beberapa abad. Peristiwa kepunahan global seperti Chicxulub terjadi sekitar setiap 100 juta tahun.',
38
38
  },
39
39
  ];
40
+ import { bibliography } from '../bibliography';
40
41
  import type { ToolLocaleContent } from '../../../types';
41
42
 
42
43
  export const content: ToolLocaleContent = {
43
44
  slug,
44
45
  title,
45
46
  description,
46
- faqTitle: 'Pertanyaan yang Sering Diajukan',
47
- bibliographyTitle: 'Bibliografi',
48
47
  ui: {
49
48
  copied: 'Disalin',
50
49
  noHistory: 'Tidak ada riwayat',
@@ -135,28 +134,7 @@ export const content: ToolLocaleContent = {
135
134
  },
136
135
  ],
137
136
  faq,
138
- bibliography: [
139
- {
140
- name: 'Collins, G. S., dkk. (2005). Program Efek Dampak Bumi: Sebuah program komputer berbasis web untuk menghitung konsekuensi lingkungan regional dari dampak meteoroid di Bumi.',
141
- url: 'https://impact.ese.ic.ac.uk/ImpactEarth/',
142
- },
143
- {
144
- name: 'Toon, O. B., dkk. (1997). Gangguan lingkungan yang disebabkan oleh dampak asteroid dan komet. Reviews of Geophysics.',
145
- url: 'https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/96RG03038',
146
- },
147
- {
148
- name: 'Chapman, C. R., & Morrison, D. (1994). Dampak pada Bumi oleh asteroid dan komet: menilai bahayanya. Nature.',
149
- url: 'https://www.nature.com/articles/367033a0',
150
- },
151
- {
152
- name: 'Schulte, P., dkk. (2010). Dampak Asteroid Chicxulub dan Kepunahan Massal di Batas Kapas-Paleogen. Science.',
153
- url: 'https://www.science.org/doi/10.1126/science.1177265',
154
- },
155
- {
156
- name: 'Brown, P., dkk. (2013). Ledakan udara 500 kiloton di atas Chelyabinsk dan peningkatan bahaya dari penabrak kecil. Nature.',
157
- url: 'https://www.nature.com/articles/nature12741',
158
- },
159
- ],
137
+ bibliography,
160
138
  howTo,
161
139
 
162
140
  schemas: [
@@ -192,3 +170,5 @@ export const content: ToolLocaleContent = {
192
170
  },
193
171
  ],
194
172
  };
173
+
174
+
@@ -37,14 +37,13 @@ const faq = [
37
37
  answer: 'Piccoli impatti (come quello in Russia nel 2013) accadono ogni decennio. Impatti catastrofici (stile Tunguska) ogni pochi secoli. Un evento di estinzione globale come Chicxulub accade approssimativamente ogni 100 milioni di anni.',
38
38
  },
39
39
  ];
40
+ import { bibliography } from '../bibliography';
40
41
  import type { ToolLocaleContent } from '../../../types';
41
42
 
42
43
  export const content: ToolLocaleContent = {
43
44
  slug,
44
45
  title,
45
46
  description,
46
- faqTitle: 'Domande Frequenti',
47
- bibliographyTitle: 'Bibliografia',
48
47
  ui: {
49
48
  copied: 'Copiato',
50
49
  noHistory: 'Nessuna cronologia',
@@ -135,28 +134,7 @@ export const content: ToolLocaleContent = {
135
134
  },
136
135
  ],
137
136
  faq,
138
- bibliography: [
139
- {
140
- name: 'Collins, G. S., et al. (2005). Earth Impact Effects Program: Un programma computerizzato via web per il calcolo delle conseguenze ambientali regionali dell\'impatto di un meteoroide sulla Terra.',
141
- url: 'https://impact.ese.ic.ac.uk/ImpactEarth/',
142
- },
143
- {
144
- name: 'Toon, O. B., et al. (1997). Environmental perturbations caused by the impacts of asteroids and comets. Reviews of Geophysics.',
145
- url: 'https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/96RG03038',
146
- },
147
- {
148
- name: 'Chapman, C. R., & Morrison, D. (1994). Impacts on the Earth by asteroids and comets: assessing the hazard. Nature.',
149
- url: 'https://www.nature.com/articles/367033a0',
150
- },
151
- {
152
- name: 'Schulte, P., et al. (2010). The Chicxulub Asteroid Impact and Mass Extinction at the Cretaceous-Paleogene Boundary. Science.',
153
- url: 'https://www.science.org/doi/10.1126/science.1177265',
154
- },
155
- {
156
- name: 'Brown, P., et al. (2013). A 500-kiloton airburst over Chelyabinsk and an enhanced hazard from small impactors. Nature.',
157
- url: 'https://www.nature.com/articles/nature12741',
158
- },
159
- ],
137
+ bibliography,
160
138
  howTo,
161
139
 
162
140
  schemas: [
@@ -192,3 +170,5 @@ export const content: ToolLocaleContent = {
192
170
  },
193
171
  ],
194
172
  };
173
+
174
+
@@ -37,14 +37,13 @@ const faq = [
37
37
  answer: '小規模な衝突(2013年のロシアのようなもの)は10年ごとに発生します。壊滅的な衝突(ツングースカ級)は数世紀ごとです。チクシュルーブのような地球規模の絶滅イベントは、およそ1億年ごとに発生します。',
38
38
  },
39
39
  ];
40
+ import { bibliography } from '../bibliography';
40
41
  import type { ToolLocaleContent } from '../../../types';
41
42
 
42
43
  export const content: ToolLocaleContent = {
43
44
  slug,
44
45
  title,
45
46
  description,
46
- faqTitle: 'よくある質問',
47
- bibliographyTitle: '参考文献',
48
47
  ui: {
49
48
  copied: 'コピー済み',
50
49
  noHistory: '履歴なし',
@@ -135,28 +134,7 @@ export const content: ToolLocaleContent = {
135
134
  },
136
135
  ],
137
136
  faq,
138
- bibliography: [
139
- {
140
- name: 'Collins, G. S., et al. (2005). Earth Impact Effects Program: 地球への流星体衝突による地域的な環境への影響を計算するためのWebベースのコンピュータプログラム。',
141
- url: 'https://impact.ese.ic.ac.uk/ImpactEarth/',
142
- },
143
- {
144
- name: 'Toon, O. B., et al. (1997). Environmental perturbations caused by the impacts of asteroids and comets. Reviews of Geophysics.',
145
- url: 'https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/96RG03038',
146
- },
147
- {
148
- name: 'Chapman, C. R., & Morrison, D. (1994). Impacts on the Earth by asteroids and comets: assessing the hazard. Nature.',
149
- url: 'https://www.nature.com/articles/367033a0',
150
- },
151
- {
152
- name: 'Schulte, P., et al. (2010). The Chicxulub Asteroid Impact and Mass Extinction at the Cretaceous-Paleogene Boundary. Science.',
153
- url: 'https://www.science.org/doi/10.1126/science.1177265',
154
- },
155
- {
156
- name: 'Brown, P., et al. (2013). A 500-kiloton airburst over Chelyabinsk and an enhanced hazard from small impactors. Nature.',
157
- url: 'https://www.nature.com/articles/nature12741',
158
- },
159
- ],
137
+ bibliography,
160
138
  howTo,
161
139
 
162
140
  schemas: [
@@ -192,3 +170,5 @@ export const content: ToolLocaleContent = {
192
170
  },
193
171
  ],
194
172
  };
173
+
174
+