@jjlmoya/utils-forensic-science 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 (316) hide show
  1. package/package.json +69 -0
  2. package/scripts/crystal-lattice-catalog-translations.mjs +459 -0
  3. package/scripts/postinstall.mjs +27 -0
  4. package/scripts/sync-crystal-lattice-i18n.mjs +50 -0
  5. package/src/category/i18n/de.ts +55 -0
  6. package/src/category/i18n/en.ts +55 -0
  7. package/src/category/i18n/es.ts +55 -0
  8. package/src/category/i18n/fr.ts +55 -0
  9. package/src/category/i18n/id.ts +55 -0
  10. package/src/category/i18n/it.ts +55 -0
  11. package/src/category/i18n/ja.ts +56 -0
  12. package/src/category/i18n/ko.ts +56 -0
  13. package/src/category/i18n/nl.ts +55 -0
  14. package/src/category/i18n/pl.ts +55 -0
  15. package/src/category/i18n/pt.ts +55 -0
  16. package/src/category/i18n/ru.ts +55 -0
  17. package/src/category/i18n/sv.ts +55 -0
  18. package/src/category/i18n/tr.ts +55 -0
  19. package/src/category/i18n/zh.ts +56 -0
  20. package/src/category/index.ts +48 -0
  21. package/src/category/seo.astro +15 -0
  22. package/src/components/PreviewNavSidebar.astro +116 -0
  23. package/src/components/PreviewToolbar.astro +143 -0
  24. package/src/data.ts +10 -0
  25. package/src/entries.ts +48 -0
  26. package/src/env.d.ts +5 -0
  27. package/src/index.ts +29 -0
  28. package/src/layouts/PreviewLayout.astro +117 -0
  29. package/src/pages/[locale]/[slug].astro +162 -0
  30. package/src/pages/[locale].astro +261 -0
  31. package/src/pages/index.astro +3 -0
  32. package/src/tests/diacritics_density.test.ts +140 -0
  33. package/src/tests/faq_count.test.ts +19 -0
  34. package/src/tests/i18n_coverage.test.ts +36 -0
  35. package/src/tests/inverted_punctuation.test.ts +84 -0
  36. package/src/tests/locale_completeness.test.ts +24 -0
  37. package/src/tests/mocks/astro_mock.js +2 -0
  38. package/src/tests/no_en_dash.test.ts +70 -0
  39. package/src/tests/no_h1_in_components.test.ts +48 -0
  40. package/src/tests/schemas_fulfillment.test.ts +23 -0
  41. package/src/tests/script_density.test.ts +94 -0
  42. package/src/tests/seo_length.test.ts +46 -0
  43. package/src/tests/shared-test-helpers.ts +56 -0
  44. package/src/tests/slug_language_code_format.test.ts +23 -0
  45. package/src/tests/slug_uniqueness.test.ts +81 -0
  46. package/src/tests/title_quality.test.ts +55 -0
  47. package/src/tests/tool_exports.test.ts +34 -0
  48. package/src/tests/tool_validation.test.ts +16 -0
  49. package/src/tests/widmark.test.ts +28 -0
  50. package/src/tool/forensic-age-estimator/bibliography.astro +14 -0
  51. package/src/tool/forensic-age-estimator/bibliography.ts +16 -0
  52. package/src/tool/forensic-age-estimator/component.astro +321 -0
  53. package/src/tool/forensic-age-estimator/dental-skeletal-third-molar-age-estimator.css +634 -0
  54. package/src/tool/forensic-age-estimator/entry.ts +32 -0
  55. package/src/tool/forensic-age-estimator/i18n/de.ts +245 -0
  56. package/src/tool/forensic-age-estimator/i18n/en.ts +245 -0
  57. package/src/tool/forensic-age-estimator/i18n/es.ts +245 -0
  58. package/src/tool/forensic-age-estimator/i18n/fr.ts +245 -0
  59. package/src/tool/forensic-age-estimator/i18n/id.ts +245 -0
  60. package/src/tool/forensic-age-estimator/i18n/it.ts +245 -0
  61. package/src/tool/forensic-age-estimator/i18n/ja.ts +245 -0
  62. package/src/tool/forensic-age-estimator/i18n/ko.ts +245 -0
  63. package/src/tool/forensic-age-estimator/i18n/nl.ts +245 -0
  64. package/src/tool/forensic-age-estimator/i18n/pl.ts +245 -0
  65. package/src/tool/forensic-age-estimator/i18n/pt.ts +245 -0
  66. package/src/tool/forensic-age-estimator/i18n/ru.ts +245 -0
  67. package/src/tool/forensic-age-estimator/i18n/sv.ts +245 -0
  68. package/src/tool/forensic-age-estimator/i18n/tr.ts +245 -0
  69. package/src/tool/forensic-age-estimator/i18n/zh.ts +246 -0
  70. package/src/tool/forensic-age-estimator/index.ts +11 -0
  71. package/src/tool/forensic-age-estimator/logic.ts +81 -0
  72. package/src/tool/forensic-age-estimator/seo.astro +15 -0
  73. package/src/tool/forensic-blood-test-simulator/bibliography.astro +6 -0
  74. package/src/tool/forensic-blood-test-simulator/bibliography.ts +12 -0
  75. package/src/tool/forensic-blood-test-simulator/component.astro +168 -0
  76. package/src/tool/forensic-blood-test-simulator/dom-utils.ts +40 -0
  77. package/src/tool/forensic-blood-test-simulator/entry.ts +32 -0
  78. package/src/tool/forensic-blood-test-simulator/forensic-presumptive-blood-testing-luminol-kastle-meyer-simulator.css +532 -0
  79. package/src/tool/forensic-blood-test-simulator/helpers.ts +16 -0
  80. package/src/tool/forensic-blood-test-simulator/i18n/de.ts +185 -0
  81. package/src/tool/forensic-blood-test-simulator/i18n/en.ts +185 -0
  82. package/src/tool/forensic-blood-test-simulator/i18n/es.ts +185 -0
  83. package/src/tool/forensic-blood-test-simulator/i18n/fr.ts +220 -0
  84. package/src/tool/forensic-blood-test-simulator/i18n/id.ts +220 -0
  85. package/src/tool/forensic-blood-test-simulator/i18n/it.ts +220 -0
  86. package/src/tool/forensic-blood-test-simulator/i18n/ja.ts +220 -0
  87. package/src/tool/forensic-blood-test-simulator/i18n/ko.ts +220 -0
  88. package/src/tool/forensic-blood-test-simulator/i18n/nl.ts +220 -0
  89. package/src/tool/forensic-blood-test-simulator/i18n/pl.ts +220 -0
  90. package/src/tool/forensic-blood-test-simulator/i18n/pt.ts +220 -0
  91. package/src/tool/forensic-blood-test-simulator/i18n/ru.ts +220 -0
  92. package/src/tool/forensic-blood-test-simulator/i18n/sv.ts +220 -0
  93. package/src/tool/forensic-blood-test-simulator/i18n/tr.ts +220 -0
  94. package/src/tool/forensic-blood-test-simulator/i18n/zh.ts +220 -0
  95. package/src/tool/forensic-blood-test-simulator/index.ts +11 -0
  96. package/src/tool/forensic-blood-test-simulator/logic.ts +174 -0
  97. package/src/tool/forensic-blood-test-simulator/script.ts +192 -0
  98. package/src/tool/forensic-blood-test-simulator/seo.astro +15 -0
  99. package/src/tool/forensic-fiber-comparison-microscope/bibliography.astro +6 -0
  100. package/src/tool/forensic-fiber-comparison-microscope/bibliography.ts +16 -0
  101. package/src/tool/forensic-fiber-comparison-microscope/component.astro +146 -0
  102. package/src/tool/forensic-fiber-comparison-microscope/entry.ts +32 -0
  103. package/src/tool/forensic-fiber-comparison-microscope/forensic-fiber-comparison-microscope.css +629 -0
  104. package/src/tool/forensic-fiber-comparison-microscope/i18n/de.ts +250 -0
  105. package/src/tool/forensic-fiber-comparison-microscope/i18n/en.ts +246 -0
  106. package/src/tool/forensic-fiber-comparison-microscope/i18n/es.ts +246 -0
  107. package/src/tool/forensic-fiber-comparison-microscope/i18n/fr.ts +246 -0
  108. package/src/tool/forensic-fiber-comparison-microscope/i18n/id.ts +250 -0
  109. package/src/tool/forensic-fiber-comparison-microscope/i18n/it.ts +246 -0
  110. package/src/tool/forensic-fiber-comparison-microscope/i18n/ja.ts +250 -0
  111. package/src/tool/forensic-fiber-comparison-microscope/i18n/ko.ts +246 -0
  112. package/src/tool/forensic-fiber-comparison-microscope/i18n/nl.ts +246 -0
  113. package/src/tool/forensic-fiber-comparison-microscope/i18n/pl.ts +250 -0
  114. package/src/tool/forensic-fiber-comparison-microscope/i18n/pt.ts +250 -0
  115. package/src/tool/forensic-fiber-comparison-microscope/i18n/ru.ts +250 -0
  116. package/src/tool/forensic-fiber-comparison-microscope/i18n/sv.ts +250 -0
  117. package/src/tool/forensic-fiber-comparison-microscope/i18n/tr.ts +246 -0
  118. package/src/tool/forensic-fiber-comparison-microscope/i18n/zh.ts +250 -0
  119. package/src/tool/forensic-fiber-comparison-microscope/index.ts +11 -0
  120. package/src/tool/forensic-fiber-comparison-microscope/logic.ts +244 -0
  121. package/src/tool/forensic-fiber-comparison-microscope/render.ts +265 -0
  122. package/src/tool/forensic-fiber-comparison-microscope/seo.astro +15 -0
  123. package/src/tool/forensic-fiber-comparison-microscope/view.ts +267 -0
  124. package/src/tool/forensic-glass-becke-line-simulator/bibliography.astro +6 -0
  125. package/src/tool/forensic-glass-becke-line-simulator/bibliography.ts +16 -0
  126. package/src/tool/forensic-glass-becke-line-simulator/component.astro +81 -0
  127. package/src/tool/forensic-glass-becke-line-simulator/entry.ts +32 -0
  128. package/src/tool/forensic-glass-becke-line-simulator/forensic-glass-becke-line-simulator.css +392 -0
  129. package/src/tool/forensic-glass-becke-line-simulator/i18n/de.ts +231 -0
  130. package/src/tool/forensic-glass-becke-line-simulator/i18n/en.ts +231 -0
  131. package/src/tool/forensic-glass-becke-line-simulator/i18n/es.ts +231 -0
  132. package/src/tool/forensic-glass-becke-line-simulator/i18n/fr.ts +231 -0
  133. package/src/tool/forensic-glass-becke-line-simulator/i18n/id.ts +231 -0
  134. package/src/tool/forensic-glass-becke-line-simulator/i18n/it.ts +231 -0
  135. package/src/tool/forensic-glass-becke-line-simulator/i18n/ja.ts +231 -0
  136. package/src/tool/forensic-glass-becke-line-simulator/i18n/ko.ts +231 -0
  137. package/src/tool/forensic-glass-becke-line-simulator/i18n/nl.ts +231 -0
  138. package/src/tool/forensic-glass-becke-line-simulator/i18n/pl.ts +231 -0
  139. package/src/tool/forensic-glass-becke-line-simulator/i18n/pt.ts +231 -0
  140. package/src/tool/forensic-glass-becke-line-simulator/i18n/ru.ts +231 -0
  141. package/src/tool/forensic-glass-becke-line-simulator/i18n/sv.ts +231 -0
  142. package/src/tool/forensic-glass-becke-line-simulator/i18n/tr.ts +231 -0
  143. package/src/tool/forensic-glass-becke-line-simulator/i18n/zh.ts +231 -0
  144. package/src/tool/forensic-glass-becke-line-simulator/index.ts +11 -0
  145. package/src/tool/forensic-glass-becke-line-simulator/logic.ts +100 -0
  146. package/src/tool/forensic-glass-becke-line-simulator/seo.astro +15 -0
  147. package/src/tool/forensic-glass-becke-line-simulator/view.ts +281 -0
  148. package/src/tool/forensic-image-authenticity-analyzer/bibliography.astro +9 -0
  149. package/src/tool/forensic-image-authenticity-analyzer/bibliography.ts +7 -0
  150. package/src/tool/forensic-image-authenticity-analyzer/component.astro +250 -0
  151. package/src/tool/forensic-image-authenticity-analyzer/entry.ts +29 -0
  152. package/src/tool/forensic-image-authenticity-analyzer/forensic-image-metadata-authenticity-analyzer.css +679 -0
  153. package/src/tool/forensic-image-authenticity-analyzer/i18n/de.ts +105 -0
  154. package/src/tool/forensic-image-authenticity-analyzer/i18n/en.ts +105 -0
  155. package/src/tool/forensic-image-authenticity-analyzer/i18n/es.ts +105 -0
  156. package/src/tool/forensic-image-authenticity-analyzer/i18n/fr.ts +105 -0
  157. package/src/tool/forensic-image-authenticity-analyzer/i18n/id.ts +76 -0
  158. package/src/tool/forensic-image-authenticity-analyzer/i18n/it.ts +105 -0
  159. package/src/tool/forensic-image-authenticity-analyzer/i18n/ja.ts +72 -0
  160. package/src/tool/forensic-image-authenticity-analyzer/i18n/ko.ts +72 -0
  161. package/src/tool/forensic-image-authenticity-analyzer/i18n/nl.ts +75 -0
  162. package/src/tool/forensic-image-authenticity-analyzer/i18n/pl.ts +75 -0
  163. package/src/tool/forensic-image-authenticity-analyzer/i18n/pt.ts +105 -0
  164. package/src/tool/forensic-image-authenticity-analyzer/i18n/ru.ts +75 -0
  165. package/src/tool/forensic-image-authenticity-analyzer/i18n/sv.ts +76 -0
  166. package/src/tool/forensic-image-authenticity-analyzer/i18n/tr.ts +76 -0
  167. package/src/tool/forensic-image-authenticity-analyzer/i18n/zh.ts +71 -0
  168. package/src/tool/forensic-image-authenticity-analyzer/index.ts +11 -0
  169. package/src/tool/forensic-image-authenticity-analyzer/logic.ts +283 -0
  170. package/src/tool/forensic-image-authenticity-analyzer/seo.astro +10 -0
  171. package/src/tool/forensic-microcrystal-drug-simulator/bibliography.astro +6 -0
  172. package/src/tool/forensic-microcrystal-drug-simulator/bibliography.ts +12 -0
  173. package/src/tool/forensic-microcrystal-drug-simulator/component.astro +240 -0
  174. package/src/tool/forensic-microcrystal-drug-simulator/entry.ts +32 -0
  175. package/src/tool/forensic-microcrystal-drug-simulator/forensic-microcrystal-drug-simulator.css +430 -0
  176. package/src/tool/forensic-microcrystal-drug-simulator/i18n/de.ts +244 -0
  177. package/src/tool/forensic-microcrystal-drug-simulator/i18n/en.ts +244 -0
  178. package/src/tool/forensic-microcrystal-drug-simulator/i18n/es.ts +244 -0
  179. package/src/tool/forensic-microcrystal-drug-simulator/i18n/fr.ts +244 -0
  180. package/src/tool/forensic-microcrystal-drug-simulator/i18n/id.ts +244 -0
  181. package/src/tool/forensic-microcrystal-drug-simulator/i18n/it.ts +244 -0
  182. package/src/tool/forensic-microcrystal-drug-simulator/i18n/ja.ts +244 -0
  183. package/src/tool/forensic-microcrystal-drug-simulator/i18n/ko.ts +244 -0
  184. package/src/tool/forensic-microcrystal-drug-simulator/i18n/nl.ts +244 -0
  185. package/src/tool/forensic-microcrystal-drug-simulator/i18n/pl.ts +244 -0
  186. package/src/tool/forensic-microcrystal-drug-simulator/i18n/pt.ts +244 -0
  187. package/src/tool/forensic-microcrystal-drug-simulator/i18n/ru.ts +244 -0
  188. package/src/tool/forensic-microcrystal-drug-simulator/i18n/sv.ts +244 -0
  189. package/src/tool/forensic-microcrystal-drug-simulator/i18n/tr.ts +244 -0
  190. package/src/tool/forensic-microcrystal-drug-simulator/i18n/zh.ts +244 -0
  191. package/src/tool/forensic-microcrystal-drug-simulator/index.ts +11 -0
  192. package/src/tool/forensic-microcrystal-drug-simulator/logic.ts +189 -0
  193. package/src/tool/forensic-microcrystal-drug-simulator/seo.astro +15 -0
  194. package/src/tool/forensic-sex-determinator/bibliography.astro +14 -0
  195. package/src/tool/forensic-sex-determinator/bibliography.ts +12 -0
  196. package/src/tool/forensic-sex-determinator/component.astro +463 -0
  197. package/src/tool/forensic-sex-determinator/entry.ts +32 -0
  198. package/src/tool/forensic-sex-determinator/forensic-sex-determinator.css +413 -0
  199. package/src/tool/forensic-sex-determinator/i18n/de.ts +211 -0
  200. package/src/tool/forensic-sex-determinator/i18n/en.ts +211 -0
  201. package/src/tool/forensic-sex-determinator/i18n/es.ts +211 -0
  202. package/src/tool/forensic-sex-determinator/i18n/fr.ts +211 -0
  203. package/src/tool/forensic-sex-determinator/i18n/id.ts +211 -0
  204. package/src/tool/forensic-sex-determinator/i18n/it.ts +211 -0
  205. package/src/tool/forensic-sex-determinator/i18n/ja.ts +211 -0
  206. package/src/tool/forensic-sex-determinator/i18n/ko.ts +211 -0
  207. package/src/tool/forensic-sex-determinator/i18n/nl.ts +211 -0
  208. package/src/tool/forensic-sex-determinator/i18n/pl.ts +211 -0
  209. package/src/tool/forensic-sex-determinator/i18n/pt.ts +211 -0
  210. package/src/tool/forensic-sex-determinator/i18n/ru.ts +211 -0
  211. package/src/tool/forensic-sex-determinator/i18n/sv.ts +211 -0
  212. package/src/tool/forensic-sex-determinator/i18n/tr.ts +211 -0
  213. package/src/tool/forensic-sex-determinator/i18n/zh.ts +211 -0
  214. package/src/tool/forensic-sex-determinator/index.ts +11 -0
  215. package/src/tool/forensic-sex-determinator/logic.ts +89 -0
  216. package/src/tool/forensic-sex-determinator/seo.astro +15 -0
  217. package/src/tool/forensic-stature-estimator/bibliography.astro +14 -0
  218. package/src/tool/forensic-stature-estimator/bibliography.ts +12 -0
  219. package/src/tool/forensic-stature-estimator/component.astro +49 -0
  220. package/src/tool/forensic-stature-estimator/components/EstimationPanel.astro +65 -0
  221. package/src/tool/forensic-stature-estimator/components/OsteometricBoard.astro +39 -0
  222. package/src/tool/forensic-stature-estimator/components/OsteometricSelector.astro +109 -0
  223. package/src/tool/forensic-stature-estimator/dom-utils.ts +71 -0
  224. package/src/tool/forensic-stature-estimator/entry.ts +32 -0
  225. package/src/tool/forensic-stature-estimator/forensic-stature-estimator.css +689 -0
  226. package/src/tool/forensic-stature-estimator/helpers.ts +51 -0
  227. package/src/tool/forensic-stature-estimator/i18n/de.ts +196 -0
  228. package/src/tool/forensic-stature-estimator/i18n/en.ts +196 -0
  229. package/src/tool/forensic-stature-estimator/i18n/es.ts +196 -0
  230. package/src/tool/forensic-stature-estimator/i18n/fr.ts +196 -0
  231. package/src/tool/forensic-stature-estimator/i18n/id.ts +196 -0
  232. package/src/tool/forensic-stature-estimator/i18n/it.ts +196 -0
  233. package/src/tool/forensic-stature-estimator/i18n/ja.ts +196 -0
  234. package/src/tool/forensic-stature-estimator/i18n/ko.ts +196 -0
  235. package/src/tool/forensic-stature-estimator/i18n/nl.ts +196 -0
  236. package/src/tool/forensic-stature-estimator/i18n/pl.ts +196 -0
  237. package/src/tool/forensic-stature-estimator/i18n/pt.ts +196 -0
  238. package/src/tool/forensic-stature-estimator/i18n/ru.ts +196 -0
  239. package/src/tool/forensic-stature-estimator/i18n/sv.ts +196 -0
  240. package/src/tool/forensic-stature-estimator/i18n/tr.ts +196 -0
  241. package/src/tool/forensic-stature-estimator/i18n/zh.ts +196 -0
  242. package/src/tool/forensic-stature-estimator/index.ts +11 -0
  243. package/src/tool/forensic-stature-estimator/logic.ts +119 -0
  244. package/src/tool/forensic-stature-estimator/script.ts +288 -0
  245. package/src/tool/forensic-stature-estimator/seo.astro +15 -0
  246. package/src/tool/forensic-tlc-ink-simulator/bibliography.astro +6 -0
  247. package/src/tool/forensic-tlc-ink-simulator/bibliography.ts +16 -0
  248. package/src/tool/forensic-tlc-ink-simulator/component.astro +245 -0
  249. package/src/tool/forensic-tlc-ink-simulator/entry.ts +32 -0
  250. package/src/tool/forensic-tlc-ink-simulator/forensic-tlc-ink-simulator.css +462 -0
  251. package/src/tool/forensic-tlc-ink-simulator/i18n/de.ts +243 -0
  252. package/src/tool/forensic-tlc-ink-simulator/i18n/en.ts +243 -0
  253. package/src/tool/forensic-tlc-ink-simulator/i18n/es.ts +243 -0
  254. package/src/tool/forensic-tlc-ink-simulator/i18n/fr.ts +243 -0
  255. package/src/tool/forensic-tlc-ink-simulator/i18n/id.ts +243 -0
  256. package/src/tool/forensic-tlc-ink-simulator/i18n/it.ts +243 -0
  257. package/src/tool/forensic-tlc-ink-simulator/i18n/ja.ts +235 -0
  258. package/src/tool/forensic-tlc-ink-simulator/i18n/ko.ts +235 -0
  259. package/src/tool/forensic-tlc-ink-simulator/i18n/nl.ts +243 -0
  260. package/src/tool/forensic-tlc-ink-simulator/i18n/pl.ts +243 -0
  261. package/src/tool/forensic-tlc-ink-simulator/i18n/pt.ts +243 -0
  262. package/src/tool/forensic-tlc-ink-simulator/i18n/ru.ts +243 -0
  263. package/src/tool/forensic-tlc-ink-simulator/i18n/sv.ts +243 -0
  264. package/src/tool/forensic-tlc-ink-simulator/i18n/tr.ts +243 -0
  265. package/src/tool/forensic-tlc-ink-simulator/i18n/zh.ts +235 -0
  266. package/src/tool/forensic-tlc-ink-simulator/index.ts +11 -0
  267. package/src/tool/forensic-tlc-ink-simulator/logic.ts +152 -0
  268. package/src/tool/forensic-tlc-ink-simulator/seo.astro +15 -0
  269. package/src/tool/gsr-dispersion-calculator/bibliography.astro +6 -0
  270. package/src/tool/gsr-dispersion-calculator/bibliography.ts +16 -0
  271. package/src/tool/gsr-dispersion-calculator/component.astro +294 -0
  272. package/src/tool/gsr-dispersion-calculator/entry.ts +32 -0
  273. package/src/tool/gsr-dispersion-calculator/gsr-dispersion-calculator.css +305 -0
  274. package/src/tool/gsr-dispersion-calculator/i18n/de.ts +272 -0
  275. package/src/tool/gsr-dispersion-calculator/i18n/en.ts +272 -0
  276. package/src/tool/gsr-dispersion-calculator/i18n/es.ts +272 -0
  277. package/src/tool/gsr-dispersion-calculator/i18n/fr.ts +272 -0
  278. package/src/tool/gsr-dispersion-calculator/i18n/id.ts +272 -0
  279. package/src/tool/gsr-dispersion-calculator/i18n/it.ts +272 -0
  280. package/src/tool/gsr-dispersion-calculator/i18n/ja.ts +272 -0
  281. package/src/tool/gsr-dispersion-calculator/i18n/ko.ts +272 -0
  282. package/src/tool/gsr-dispersion-calculator/i18n/nl.ts +272 -0
  283. package/src/tool/gsr-dispersion-calculator/i18n/pl.ts +272 -0
  284. package/src/tool/gsr-dispersion-calculator/i18n/pt.ts +272 -0
  285. package/src/tool/gsr-dispersion-calculator/i18n/ru.ts +272 -0
  286. package/src/tool/gsr-dispersion-calculator/i18n/sv.ts +272 -0
  287. package/src/tool/gsr-dispersion-calculator/i18n/tr.ts +272 -0
  288. package/src/tool/gsr-dispersion-calculator/i18n/zh.ts +272 -0
  289. package/src/tool/gsr-dispersion-calculator/index.ts +11 -0
  290. package/src/tool/gsr-dispersion-calculator/logic.ts +148 -0
  291. package/src/tool/gsr-dispersion-calculator/seo.astro +15 -0
  292. package/src/tool/widmark-alcohol-simulator/bibliography.astro +14 -0
  293. package/src/tool/widmark-alcohol-simulator/bibliography.ts +12 -0
  294. package/src/tool/widmark-alcohol-simulator/component.astro +453 -0
  295. package/src/tool/widmark-alcohol-simulator/entry.ts +32 -0
  296. package/src/tool/widmark-alcohol-simulator/i18n/de.ts +193 -0
  297. package/src/tool/widmark-alcohol-simulator/i18n/en.ts +206 -0
  298. package/src/tool/widmark-alcohol-simulator/i18n/es.ts +193 -0
  299. package/src/tool/widmark-alcohol-simulator/i18n/fr.ts +193 -0
  300. package/src/tool/widmark-alcohol-simulator/i18n/id.ts +193 -0
  301. package/src/tool/widmark-alcohol-simulator/i18n/it.ts +193 -0
  302. package/src/tool/widmark-alcohol-simulator/i18n/ja.ts +193 -0
  303. package/src/tool/widmark-alcohol-simulator/i18n/ko.ts +193 -0
  304. package/src/tool/widmark-alcohol-simulator/i18n/nl.ts +193 -0
  305. package/src/tool/widmark-alcohol-simulator/i18n/pl.ts +193 -0
  306. package/src/tool/widmark-alcohol-simulator/i18n/pt.ts +193 -0
  307. package/src/tool/widmark-alcohol-simulator/i18n/ru.ts +193 -0
  308. package/src/tool/widmark-alcohol-simulator/i18n/sv.ts +193 -0
  309. package/src/tool/widmark-alcohol-simulator/i18n/tr.ts +193 -0
  310. package/src/tool/widmark-alcohol-simulator/i18n/zh.ts +193 -0
  311. package/src/tool/widmark-alcohol-simulator/index.ts +11 -0
  312. package/src/tool/widmark-alcohol-simulator/logic.ts +97 -0
  313. package/src/tool/widmark-alcohol-simulator/seo.astro +15 -0
  314. package/src/tool/widmark-alcohol-simulator/widmark-alcohol-simulator.css +386 -0
  315. package/src/tools.ts +27 -0
  316. package/src/types.ts +70 -0
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@jjlmoya/utils-forensic-science",
3
+ "version": "1.1.0",
4
+ "type": "module",
5
+ "main": "./src/index.ts",
6
+ "types": "./src/index.ts",
7
+ "exports": {
8
+ ".": "./src/index.ts",
9
+ "./data": "./src/data.ts",
10
+ "./entries": "./src/entries.ts"
11
+ },
12
+ "files": [
13
+ "src",
14
+ "scripts"
15
+ ],
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "scripts": {
20
+ "dev": "astro dev",
21
+ "start": "astro dev",
22
+ "build": "astro build",
23
+ "preview": "astro preview",
24
+ "astro": "astro",
25
+ "lint": "eslint src/ --max-warnings 0 && stylelint \"src/**/*.{css,astro}\"",
26
+ "check": "astro check",
27
+ "type-check": "astro check",
28
+ "test": "vitest run",
29
+ "preversion": "npm run lint && npm run test",
30
+ "postversion": "git push && git push --tags",
31
+ "patch": "npm version patch",
32
+ "minor": "npm version minor",
33
+ "major": "npm version major",
34
+ "postinstall": "node scripts/postinstall.mjs"
35
+ },
36
+ "lint-staged": {
37
+ "*.{ts,tsx,astro}": [
38
+ "eslint --fix"
39
+ ]
40
+ },
41
+ "dependencies": {
42
+ "@iconify-json/mdi": "^1.2.3",
43
+ "@jjlmoya/prompagate": "^1.1.0",
44
+ "@jjlmoya/utils-shared": "1.2.0",
45
+ "astro": "^6.1.2",
46
+ "astro-icon": "^1.1.0"
47
+ },
48
+ "peerDependencies": {
49
+ "leaflet": "^1.9.4"
50
+ },
51
+ "devDependencies": {
52
+ "@astrojs/check": "^0.9.8",
53
+ "@types/leaflet": "^1.9.21",
54
+ "eslint": "^9.39.4",
55
+ "eslint-plugin-astro": "^1.6.0",
56
+ "eslint-plugin-no-comments": "^1.1.10",
57
+ "husky": "^9.1.7",
58
+ "leaflet": "^1.9.4",
59
+ "lint-staged": "^16.4.0",
60
+ "postcss-html": "^1.8.1",
61
+ "schema-dts": "^1.1.2",
62
+ "stylelint": "^17.6.0",
63
+ "stylelint-config-standard": "^40.0.0",
64
+ "stylelint-declaration-strict-value": "^1.11.1",
65
+ "typescript": "^5.4.0",
66
+ "typescript-eslint": "^8.58.0",
67
+ "vitest": "^4.1.2"
68
+ }
69
+ }
@@ -0,0 +1,459 @@
1
+ export const crystalCatalogTranslations = {
2
+ en: {
3
+ latticeBodyCenteredCubic: 'Body-centered cubic',
4
+ latticeCesiumChloride: 'Cesium chloride',
5
+ latticeDiamondCubic: 'Diamond cubic',
6
+ latticeFaceCenteredCubic: 'Face-centered cubic',
7
+ latticeHexagonalClosePacked: 'Hexagonal close-packed',
8
+ latticePerovskite: 'Cubic perovskite',
9
+ latticeRockSalt: 'Rock salt',
10
+ latticeRutile: 'Rutile',
11
+ latticeWurtzite: 'Wurtzite',
12
+ latticeZincBlende: 'Zinc blende',
13
+ materialAlphaIron: 'Alpha iron',
14
+ materialAlphaIronNote: 'Room-temperature body-centered cubic iron phase.',
15
+ materialTungsten: 'Tungsten',
16
+ materialTungstenNote: 'Dense BCC refractory metal with a very high melting point.',
17
+ materialSilicon: 'Silicon',
18
+ materialSiliconNote: 'Diamond cubic semiconductor used in integrated circuits.',
19
+ materialDiamond: 'Diamond',
20
+ materialDiamondNote: 'Covalent carbon network in the diamond cubic structure.',
21
+ materialCesiumChloride: 'Cesium chloride',
22
+ materialCesiumChlorideNote: 'Interpenetrating simple cubic ionic structure with eightfold coordination.',
23
+ materialZincSulfide: 'Zinc sulfide',
24
+ materialZincSulfideNote: 'Sphalerite, also called zinc blende, with tetrahedral coordination.',
25
+ materialGalliumNitride: 'Gallium nitride',
26
+ materialGalliumNitrideNote: 'Wurtzite semiconductor used in LEDs and power electronics.',
27
+ materialStrontiumTitanate: 'Strontium titanate',
28
+ materialStrontiumTitanateNote: 'Cubic perovskite oxide often used as a substrate and dielectric model.',
29
+ materialRutileTitania: 'Rutile titania',
30
+ materialRutileTitaniaNote: 'Rutile TiO2 structure with octahedral titanium coordination.',
31
+ },
32
+ es: {
33
+ latticeBodyCenteredCubic: 'Cúbica centrada en el cuerpo',
34
+ latticeCesiumChloride: 'Cloruro de cesio',
35
+ latticeDiamondCubic: 'Cúbica tipo diamante',
36
+ latticeFaceCenteredCubic: 'Cúbica centrada en caras',
37
+ latticeHexagonalClosePacked: 'Hexagonal compacta',
38
+ latticePerovskite: 'Perovskita cúbica',
39
+ latticeRockSalt: 'Sal gema',
40
+ latticeRutile: 'Rutilo',
41
+ latticeWurtzite: 'Wurtzita',
42
+ latticeZincBlende: 'Blenda de zinc',
43
+ materialAlphaIron: 'Hierro alfa',
44
+ materialAlphaIronNote: 'Fase de hierro cúbica centrada en el cuerpo a temperatura ambiente.',
45
+ materialTungsten: 'Tungsteno',
46
+ materialTungstenNote: 'Metal refractario BCC denso con punto de fusión muy alto.',
47
+ materialSilicon: 'Silicio',
48
+ materialSiliconNote: 'Semiconductor cúbico tipo diamante usado en circuitos integrados.',
49
+ materialDiamond: 'Diamante',
50
+ materialDiamondNote: 'Red covalente de carbono en estructura cúbica tipo diamante.',
51
+ materialCesiumChloride: 'Cloruro de cesio',
52
+ materialCesiumChlorideNote: 'Estructura iónica cúbica simple interpenetrada con coordinación ocho.',
53
+ materialZincSulfide: 'Sulfuro de zinc',
54
+ materialZincSulfideNote: 'Esfalerita, también llamada blenda de zinc, con coordinación tetraédrica.',
55
+ materialGalliumNitride: 'Nitruro de galio',
56
+ materialGalliumNitrideNote: 'Semiconductor wurtzita usado en LED y electrónica de potencia.',
57
+ materialStrontiumTitanate: 'Titanato de estroncio',
58
+ materialStrontiumTitanateNote: 'Óxido perovskita cúbico usado como sustrato y modelo dieléctrico.',
59
+ materialRutileTitania: 'Titania rutilo',
60
+ materialRutileTitaniaNote: 'Estructura TiO2 tipo rutilo con coordinación octaédrica del titanio.',
61
+ },
62
+ de: {
63
+ latticeBodyCenteredCubic: 'Kubisch raumzentriert',
64
+ latticeCesiumChloride: 'Cäsiumchlorid',
65
+ latticeDiamondCubic: 'Diamantkubisch',
66
+ latticeFaceCenteredCubic: 'Kubisch flächenzentriert',
67
+ latticeHexagonalClosePacked: 'Hexagonal dichtest gepackt',
68
+ latticePerovskite: 'Kubischer Perowskit',
69
+ latticeRockSalt: 'Steinsalz',
70
+ latticeRutile: 'Rutil',
71
+ latticeWurtzite: 'Wurtzit',
72
+ latticeZincBlende: 'Zinkblende',
73
+ materialAlphaIron: 'Alpha-Eisen',
74
+ materialAlphaIronNote: 'Raumtemperaturphase von Eisen mit kubisch raumzentrierter Struktur.',
75
+ materialTungsten: 'Wolfram',
76
+ materialTungstenNote: 'Dichtes BCC-Refraktärmetall mit sehr hohem Schmelzpunkt.',
77
+ materialSilicon: 'Silicium',
78
+ materialSiliconNote: 'Diamantkubischer Halbleiter für integrierte Schaltungen.',
79
+ materialDiamond: 'Diamant',
80
+ materialDiamondNote: 'Kovalentes Kohlenstoffnetzwerk in diamantkubischer Struktur.',
81
+ materialCesiumChloride: 'Cäsiumchlorid',
82
+ materialCesiumChlorideNote: 'Ionenstruktur aus ineinander greifenden einfach kubischen Gittern mit achtfacher Koordination.',
83
+ materialZincSulfide: 'Zinksulfid',
84
+ materialZincSulfideNote: 'Sphalerit, auch Zinkblende genannt, mit tetraedrischer Koordination.',
85
+ materialGalliumNitride: 'Galliumnitrid',
86
+ materialGalliumNitrideNote: 'Wurtzit-Halbleiter für LEDs und Leistungselektronik.',
87
+ materialStrontiumTitanate: 'Strontiumtitanat',
88
+ materialStrontiumTitanateNote: 'Kubisches Perowskitoxid, oft als Substrat und dielektrisches Modell verwendet.',
89
+ materialRutileTitania: 'Rutil-Titania',
90
+ materialRutileTitaniaNote: 'Rutil-TiO2-Struktur mit oktaedrischer Titan-Koordination.',
91
+ },
92
+ fr: {
93
+ latticeBodyCenteredCubic: 'Cubique centré',
94
+ latticeCesiumChloride: 'Chlorure de césium',
95
+ latticeDiamondCubic: 'Cubique diamant',
96
+ latticeFaceCenteredCubic: 'Cubique à faces centrées',
97
+ latticeHexagonalClosePacked: 'Hexagonal compact',
98
+ latticePerovskite: 'Pérovskite cubique',
99
+ latticeRockSalt: 'Sel gemme',
100
+ latticeRutile: 'Rutile',
101
+ latticeWurtzite: 'Wurtzite',
102
+ latticeZincBlende: 'Blende de zinc',
103
+ materialAlphaIron: 'Fer alpha',
104
+ materialAlphaIronNote: 'Phase cubique centrée du fer à température ambiante.',
105
+ materialTungsten: 'Tungstène',
106
+ materialTungstenNote: 'Métal réfractaire BCC dense à très haut point de fusion.',
107
+ materialSilicon: 'Silicium',
108
+ materialSiliconNote: 'Semi-conducteur cubique diamant utilisé dans les circuits intégrés.',
109
+ materialDiamond: 'Diamant',
110
+ materialDiamondNote: 'Réseau covalent de carbone en structure cubique diamant.',
111
+ materialCesiumChloride: 'Chlorure de césium',
112
+ materialCesiumChlorideNote: 'Structure ionique cubique simple interpénétrée à coordination huit.',
113
+ materialZincSulfide: 'Sulfure de zinc',
114
+ materialZincSulfideNote: 'Sphalérite, aussi appelée blende de zinc, à coordination tétraédrique.',
115
+ materialGalliumNitride: 'Nitrure de gallium',
116
+ materialGalliumNitrideNote: 'Semi-conducteur wurtzite utilisé dans les LED et en électronique de puissance.',
117
+ materialStrontiumTitanate: 'Titanate de strontium',
118
+ materialStrontiumTitanateNote: 'Oxyde pérovskite cubique utilisé comme substrat et modèle diélectrique.',
119
+ materialRutileTitania: 'Titane rutile',
120
+ materialRutileTitaniaNote: 'Structure TiO2 rutile avec coordination octaédrique du titane.',
121
+ },
122
+ pt: {
123
+ latticeBodyCenteredCubic: 'Cúbica de corpo centrado',
124
+ latticeCesiumChloride: 'Cloreto de césio',
125
+ latticeDiamondCubic: 'Cúbica do diamante',
126
+ latticeFaceCenteredCubic: 'Cúbica de face centrada',
127
+ latticeHexagonalClosePacked: 'Hexagonal compacta',
128
+ latticePerovskite: 'Perovskita cúbica',
129
+ latticeRockSalt: 'Sal-gema',
130
+ latticeRutile: 'Rutilo',
131
+ latticeWurtzite: 'Wurtzita',
132
+ latticeZincBlende: 'Blenda de zinco',
133
+ materialAlphaIron: 'Ferro alfa',
134
+ materialAlphaIronNote: 'Fase do ferro cúbica de corpo centrado em temperatura ambiente.',
135
+ materialTungsten: 'Tungstênio',
136
+ materialTungstenNote: 'Metal refratário BCC denso com ponto de fusão muito alto.',
137
+ materialSilicon: 'Silício',
138
+ materialSiliconNote: 'Semicondutor cúbico do diamante usado em circuitos integrados.',
139
+ materialDiamond: 'Diamante',
140
+ materialDiamondNote: 'Rede covalente de carbono na estrutura cúbica do diamante.',
141
+ materialCesiumChloride: 'Cloreto de césio',
142
+ materialCesiumChlorideNote: 'Estrutura iônica cúbica simples interpenetrada com coordenação oito.',
143
+ materialZincSulfide: 'Sulfeto de zinco',
144
+ materialZincSulfideNote: 'Esfalerita, também chamada blenda de zinco, com coordenação tetraédrica.',
145
+ materialGalliumNitride: 'Nitreto de gálio',
146
+ materialGalliumNitrideNote: 'Semicondutor wurtzita usado em LEDs e eletrônica de potência.',
147
+ materialStrontiumTitanate: 'Titanato de estrôncio',
148
+ materialStrontiumTitanateNote: 'Óxido perovskita cúbico usado como substrato e modelo dielétrico.',
149
+ materialRutileTitania: 'Titânia rutilo',
150
+ materialRutileTitaniaNote: 'Estrutura TiO2 rutilo com coordenação octaédrica do titânio.',
151
+ },
152
+ it: {
153
+ latticeBodyCenteredCubic: 'Cubica a corpo centrato',
154
+ latticeCesiumChloride: 'Cloruro di cesio',
155
+ latticeDiamondCubic: 'Cubica del diamante',
156
+ latticeFaceCenteredCubic: 'Cubica a facce centrate',
157
+ latticeHexagonalClosePacked: 'Esagonale compatta',
158
+ latticePerovskite: 'Perovskite cubica',
159
+ latticeRockSalt: 'Salgemma',
160
+ latticeRutile: 'Rutilo',
161
+ latticeWurtzite: 'Wurtzite',
162
+ latticeZincBlende: 'Blenda di zinco',
163
+ materialAlphaIron: 'Ferro alfa',
164
+ materialAlphaIronNote: 'Fase del ferro cubica a corpo centrato a temperatura ambiente.',
165
+ materialTungsten: 'Tungsteno',
166
+ materialTungstenNote: 'Metallo refrattario BCC denso con punto di fusione molto alto.',
167
+ materialSilicon: 'Silicio',
168
+ materialSiliconNote: 'Semiconduttore cubico del diamante usato nei circuiti integrati.',
169
+ materialDiamond: 'Diamante',
170
+ materialDiamondNote: 'Rete covalente di carbonio nella struttura cubica del diamante.',
171
+ materialCesiumChloride: 'Cloruro di cesio',
172
+ materialCesiumChlorideNote: 'Struttura ionica cubica semplice interpenetrata con coordinazione otto.',
173
+ materialZincSulfide: 'Solfuro di zinco',
174
+ materialZincSulfideNote: 'Sfalerite, detta anche blenda di zinco, con coordinazione tetraedrica.',
175
+ materialGalliumNitride: 'Nitruro di gallio',
176
+ materialGalliumNitrideNote: 'Semiconduttore wurtzite usato in LED ed elettronica di potenza.',
177
+ materialStrontiumTitanate: 'Titanato di stronzio',
178
+ materialStrontiumTitanateNote: 'Ossido perovskitico cubico usato come substrato e modello dielettrico.',
179
+ materialRutileTitania: 'Titania rutilo',
180
+ materialRutileTitaniaNote: 'Struttura TiO2 rutilo con coordinazione ottaedrica del titanio.',
181
+ },
182
+ ru: {
183
+ latticeBodyCenteredCubic: 'Объёмно-центрированная кубическая',
184
+ latticeCesiumChloride: 'Хлорид цезия',
185
+ latticeDiamondCubic: 'Кубическая алмазная',
186
+ latticeFaceCenteredCubic: 'Гранецентрированная кубическая',
187
+ latticeHexagonalClosePacked: 'Гексагональная плотноупакованная',
188
+ latticePerovskite: 'Кубический перовскит',
189
+ latticeRockSalt: 'Каменная соль',
190
+ latticeRutile: 'Рутил',
191
+ latticeWurtzite: 'Вюрцит',
192
+ latticeZincBlende: 'Цинковая обманка',
193
+ materialAlphaIron: 'Альфа-железо',
194
+ materialAlphaIronNote: 'ОЦК-фаза железа при комнатной температуре.',
195
+ materialTungsten: 'Вольфрам',
196
+ materialTungstenNote: 'Плотный ОЦК тугоплавкий металл с очень высокой температурой плавления.',
197
+ materialSilicon: 'Кремний',
198
+ materialSiliconNote: 'Полупроводник с алмазной кубической структурой для интегральных схем.',
199
+ materialDiamond: 'Алмаз',
200
+ materialDiamondNote: 'Ковалентная углеродная сеть с алмазной кубической структурой.',
201
+ materialCesiumChloride: 'Хлорид цезия',
202
+ materialCesiumChlorideNote: 'Взаимопроникающая простая кубическая ионная структура с восьмикратной координацией.',
203
+ materialZincSulfide: 'Сульфид цинка',
204
+ materialZincSulfideNote: 'Сфалерит, также называемый цинковой обманкой, с тетраэдрической координацией.',
205
+ materialGalliumNitride: 'Нитрид галлия',
206
+ materialGalliumNitrideNote: 'Полупроводник вюрцитной структуры для светодиодов и силовой электроники.',
207
+ materialStrontiumTitanate: 'Титанат стронция',
208
+ materialStrontiumTitanateNote: 'Кубический перовскитный оксид, используемый как подложка и диэлектрическая модель.',
209
+ materialRutileTitania: 'Рутильный диоксид титана',
210
+ materialRutileTitaniaNote: 'Структура рутила TiO2 с октаэдрической координацией титана.',
211
+ },
212
+ zh: {
213
+ latticeBodyCenteredCubic: '体心立方',
214
+ latticeCesiumChloride: '氯化铯',
215
+ latticeDiamondCubic: '金刚石立方',
216
+ latticeFaceCenteredCubic: '面心立方',
217
+ latticeHexagonalClosePacked: '六方密堆积',
218
+ latticePerovskite: '立方钙钛矿',
219
+ latticeRockSalt: '岩盐',
220
+ latticeRutile: '金红石',
221
+ latticeWurtzite: '纤锌矿',
222
+ latticeZincBlende: '闪锌矿',
223
+ materialAlphaIron: 'α铁',
224
+ materialAlphaIronNote: '室温下的体心立方铁相。',
225
+ materialTungsten: '钨',
226
+ materialTungstenNote: '致密的BCC难熔金属,熔点很高。',
227
+ materialSilicon: '硅',
228
+ materialSiliconNote: '用于集成电路的金刚石立方半导体。',
229
+ materialDiamond: '金刚石',
230
+ materialDiamondNote: '金刚石立方结构中的共价碳网络。',
231
+ materialCesiumChloride: '氯化铯',
232
+ materialCesiumChlorideNote: '相互穿插的简单立方离子结构,配位数为八。',
233
+ materialZincSulfide: '硫化锌',
234
+ materialZincSulfideNote: '闪锌矿结构,具有四面体配位。',
235
+ materialGalliumNitride: '氮化镓',
236
+ materialGalliumNitrideNote: '用于LED和功率电子的纤锌矿半导体。',
237
+ materialStrontiumTitanate: '钛酸锶',
238
+ materialStrontiumTitanateNote: '常用作衬底和介电模型的立方钙钛矿氧化物。',
239
+ materialRutileTitania: '金红石二氧化钛',
240
+ materialRutileTitaniaNote: '具有钛八面体配位的金红石TiO2结构。',
241
+ },
242
+ };
243
+
244
+ crystalCatalogTranslations.id = {
245
+ latticeBodyCenteredCubic: 'Kubus berpusat badan',
246
+ latticeCesiumChloride: 'Sesium klorida',
247
+ latticeDiamondCubic: 'Kubus berlian',
248
+ latticeFaceCenteredCubic: 'Kubus berpusat muka',
249
+ latticeHexagonalClosePacked: 'Heksagonal tumpukan rapat',
250
+ latticePerovskite: 'Perovskit kubus',
251
+ latticeRockSalt: 'Garam batu',
252
+ latticeRutile: 'Rutil',
253
+ latticeWurtzite: 'Wurtzite',
254
+ latticeZincBlende: 'Blenda seng',
255
+ materialAlphaIron: 'Besi alfa',
256
+ materialAlphaIronNote: 'Fase besi kubus berpusat badan pada suhu ruang.',
257
+ materialTungsten: 'Tungsten',
258
+ materialTungstenNote: 'Logam refraktori BCC yang padat dengan titik lebur sangat tinggi.',
259
+ materialSilicon: 'Silikon',
260
+ materialSiliconNote: 'Semikonduktor kubus berlian yang digunakan dalam sirkuit terpadu.',
261
+ materialDiamond: 'Berlian',
262
+ materialDiamondNote: 'Jaringan karbon kovalen dalam struktur kubus berlian.',
263
+ materialCesiumChloride: 'Sesium klorida',
264
+ materialCesiumChlorideNote: 'Struktur ionik kubus sederhana saling menembus dengan koordinasi delapan.',
265
+ materialZincSulfide: 'Seng sulfida',
266
+ materialZincSulfideNote: 'Sfalerit, juga disebut blenda seng, dengan koordinasi tetrahedral.',
267
+ materialGalliumNitride: 'Galium nitrida',
268
+ materialGalliumNitrideNote: 'Semikonduktor wurtzite yang digunakan pada LED dan elektronika daya.',
269
+ materialStrontiumTitanate: 'Stronsium titanat',
270
+ materialStrontiumTitanateNote: 'Oksida perovskit kubus yang sering digunakan sebagai substrat dan model dielektrik.',
271
+ materialRutileTitania: 'Titania rutil',
272
+ materialRutileTitaniaNote: 'Struktur TiO2 rutil dengan koordinasi oktahedral titanium.',
273
+ };
274
+
275
+ crystalCatalogTranslations.ja = {
276
+ latticeBodyCenteredCubic: '体心立方',
277
+ latticeCesiumChloride: '塩化セシウム型',
278
+ latticeDiamondCubic: 'ダイヤモンド立方',
279
+ latticeFaceCenteredCubic: '面心立方',
280
+ latticeHexagonalClosePacked: '六方最密充填',
281
+ latticePerovskite: '立方ペロブスカイト',
282
+ latticeRockSalt: '岩塩型',
283
+ latticeRutile: 'ルチル型',
284
+ latticeWurtzite: 'ウルツ鉱型',
285
+ latticeZincBlende: '閃亜鉛鉱型',
286
+ materialAlphaIron: 'α鉄',
287
+ materialAlphaIronNote: '室温での体心立方構造の鉄相。',
288
+ materialTungsten: 'タングステン',
289
+ materialTungstenNote: '非常に高い融点を持つ高密度のBCC耐火金属。',
290
+ materialSilicon: 'シリコン',
291
+ materialSiliconNote: '集積回路で使われるダイヤモンド立方半導体。',
292
+ materialDiamond: 'ダイヤモンド',
293
+ materialDiamondNote: 'ダイヤモンド立方構造の共有結合性炭素ネットワーク。',
294
+ materialCesiumChloride: '塩化セシウム',
295
+ materialCesiumChlorideNote: '八配位を持つ相互貫入した単純立方イオン構造。',
296
+ materialZincSulfide: '硫化亜鉛',
297
+ materialZincSulfideNote: '閃亜鉛鉱型とも呼ばれる四面体配位構造。',
298
+ materialGalliumNitride: '窒化ガリウム',
299
+ materialGalliumNitrideNote: 'LEDやパワーエレクトロニクスで使われるウルツ鉱型半導体。',
300
+ materialStrontiumTitanate: 'チタン酸ストロンチウム',
301
+ materialStrontiumTitanateNote: '基板や誘電体モデルとしてよく使われる立方ペロブスカイト酸化物。',
302
+ materialRutileTitania: 'ルチル型チタニア',
303
+ materialRutileTitaniaNote: 'チタンの八面体配位を持つルチル型TiO2構造。',
304
+ };
305
+
306
+ crystalCatalogTranslations.ko = {
307
+ latticeBodyCenteredCubic: '체심 입방',
308
+ latticeCesiumChloride: '염화 세슘',
309
+ latticeDiamondCubic: '다이아몬드 입방',
310
+ latticeFaceCenteredCubic: '면심 입방',
311
+ latticeHexagonalClosePacked: '육방 조밀 충전',
312
+ latticePerovskite: '입방 페로브스카이트',
313
+ latticeRockSalt: '암염',
314
+ latticeRutile: '루타일',
315
+ latticeWurtzite: '우르츠광',
316
+ latticeZincBlende: '섬아연석',
317
+ materialAlphaIron: '알파 철',
318
+ materialAlphaIronNote: '상온의 체심 입방 철 상입니다.',
319
+ materialTungsten: '텅스텐',
320
+ materialTungstenNote: '매우 높은 녹는점을 가진 조밀한 BCC 내화 금속입니다.',
321
+ materialSilicon: '실리콘',
322
+ materialSiliconNote: '집적 회로에 쓰이는 다이아몬드 입방 반도체입니다.',
323
+ materialDiamond: '다이아몬드',
324
+ materialDiamondNote: '다이아몬드 입방 구조의 공유 결합 탄소 네트워크입니다.',
325
+ materialCesiumChloride: '염화 세슘',
326
+ materialCesiumChlorideNote: '팔배위의 상호 침투 단순 입방 이온 구조입니다.',
327
+ materialZincSulfide: '황화 아연',
328
+ materialZincSulfideNote: '섬아연석이라고도 하며 사면체 배위를 가집니다.',
329
+ materialGalliumNitride: '질화 갈륨',
330
+ materialGalliumNitrideNote: 'LED와 전력 전자에 쓰이는 우르츠광 반도체입니다.',
331
+ materialStrontiumTitanate: '티탄산 스트론튬',
332
+ materialStrontiumTitanateNote: '기판과 유전체 모델로 자주 쓰이는 입방 페로브스카이트 산화물입니다.',
333
+ materialRutileTitania: '루타일 티타니아',
334
+ materialRutileTitaniaNote: '티타늄의 팔면체 배위를 가진 루타일 TiO2 구조입니다.',
335
+ };
336
+
337
+ crystalCatalogTranslations.nl = {
338
+ latticeBodyCenteredCubic: 'Ruimtegecentreerd kubisch',
339
+ latticeCesiumChloride: 'Cesiumchloride',
340
+ latticeDiamondCubic: 'Diamantkubisch',
341
+ latticeFaceCenteredCubic: 'Vlakgecentreerd kubisch',
342
+ latticeHexagonalClosePacked: 'Hexagonaal dichtst gepakt',
343
+ latticePerovskite: 'Kubische perovskiet',
344
+ latticeRockSalt: 'Steenzout',
345
+ latticeRutile: 'Rutiel',
346
+ latticeWurtzite: 'Wurtziet',
347
+ latticeZincBlende: 'Zinkblende',
348
+ materialAlphaIron: 'Alfa-ijzer',
349
+ materialAlphaIronNote: 'Ruimtegecentreerd kubische ijzerfase bij kamertemperatuur.',
350
+ materialTungsten: 'Wolfraam',
351
+ materialTungstenNote: 'Dicht BCC-refractair metaal met een zeer hoog smeltpunt.',
352
+ materialSilicon: 'Silicium',
353
+ materialSiliconNote: 'Diamantkubische halfgeleider gebruikt in geïntegreerde schakelingen.',
354
+ materialDiamond: 'Diamant',
355
+ materialDiamondNote: 'Covalent koolstofnetwerk in diamantkubische structuur.',
356
+ materialCesiumChloride: 'Cesiumchloride',
357
+ materialCesiumChlorideNote: 'Interpenetrerende eenvoudige kubische ionstructuur met achtvoudige coördinatie.',
358
+ materialZincSulfide: 'Zinksulfide',
359
+ materialZincSulfideNote: 'Sfaleriet, ook zinkblende genoemd, met tetraëdrische coördinatie.',
360
+ materialGalliumNitride: 'Galliumnitride',
361
+ materialGalliumNitrideNote: 'Wurtziet-halfgeleider gebruikt in leds en vermogenselektronica.',
362
+ materialStrontiumTitanate: 'Strontiumtitanaat',
363
+ materialStrontiumTitanateNote: 'Kubisch perovskietoxide gebruikt als substraat en diëlektrisch model.',
364
+ materialRutileTitania: 'Rutiel-titania',
365
+ materialRutileTitaniaNote: 'Rutiel-TiO2-structuur met octaëdrische titaniumcoördinatie.',
366
+ };
367
+
368
+ crystalCatalogTranslations.pl = {
369
+ latticeBodyCenteredCubic: 'Regularna przestrzennie centrowana',
370
+ latticeCesiumChloride: 'Chlorek cezu',
371
+ latticeDiamondCubic: 'Regularna diamentowa',
372
+ latticeFaceCenteredCubic: 'Regularna ściennie centrowana',
373
+ latticeHexagonalClosePacked: 'Heksagonalna zwarta',
374
+ latticePerovskite: 'Perowskit regularny',
375
+ latticeRockSalt: 'Sól kamienna',
376
+ latticeRutile: 'Rutyl',
377
+ latticeWurtzite: 'Wurcyt',
378
+ latticeZincBlende: 'Blenda cynkowa',
379
+ materialAlphaIron: 'Żelazo alfa',
380
+ materialAlphaIronNote: 'Faza żelaza BCC w temperaturze pokojowej.',
381
+ materialTungsten: 'Wolfram',
382
+ materialTungstenNote: 'Gęsty metal ogniotrwały BCC o bardzo wysokiej temperaturze topnienia.',
383
+ materialSilicon: 'Krzem',
384
+ materialSiliconNote: 'Półprzewodnik o strukturze diamentowej używany w układach scalonych.',
385
+ materialDiamond: 'Diament',
386
+ materialDiamondNote: 'Kowalencyjna sieć węglowa w strukturze regularnej diamentowej.',
387
+ materialCesiumChloride: 'Chlorek cezu',
388
+ materialCesiumChlorideNote: 'Przenikająca się prosta struktura jonowa o koordynacji ośmiokrotnej.',
389
+ materialZincSulfide: 'Siarczek cynku',
390
+ materialZincSulfideNote: 'Sfalerit, zwany też blendą cynkową, o koordynacji tetraedrycznej.',
391
+ materialGalliumNitride: 'Azotek galu',
392
+ materialGalliumNitrideNote: 'Półprzewodnik wurcytowy używany w LED i elektronice mocy.',
393
+ materialStrontiumTitanate: 'Tytanian strontu',
394
+ materialStrontiumTitanateNote: 'Regularny tlenek perowskitowy używany jako podłoże i model dielektryczny.',
395
+ materialRutileTitania: 'Tytania rutylowa',
396
+ materialRutileTitaniaNote: 'Struktura rutylowa TiO2 z oktaedryczną koordynacją tytanu.',
397
+ };
398
+
399
+ crystalCatalogTranslations.sv = {
400
+ latticeBodyCenteredCubic: 'Kubisk rymdcentrerad',
401
+ latticeCesiumChloride: 'Cesiumklorid',
402
+ latticeDiamondCubic: 'Diamantkubisk',
403
+ latticeFaceCenteredCubic: 'Kubisk ytcentrerad',
404
+ latticeHexagonalClosePacked: 'Hexagonal tätpackad',
405
+ latticePerovskite: 'Kubisk perovskit',
406
+ latticeRockSalt: 'Bergsalt',
407
+ latticeRutile: 'Rutil',
408
+ latticeWurtzite: 'Wurtzit',
409
+ latticeZincBlende: 'Zinkblände',
410
+ materialAlphaIron: 'Alfa-järn',
411
+ materialAlphaIronNote: 'Kubisk rymdcentrerad järnfas vid rumstemperatur.',
412
+ materialTungsten: 'Volfram',
413
+ materialTungstenNote: 'Tät BCC-refraktärmetall med mycket hög smältpunkt.',
414
+ materialSilicon: 'Kisel',
415
+ materialSiliconNote: 'Diamantkubisk halvledare som används i integrerade kretsar.',
416
+ materialDiamond: 'Diamant',
417
+ materialDiamondNote: 'Kovalent kolnätverk i diamantkubisk struktur.',
418
+ materialCesiumChloride: 'Cesiumklorid',
419
+ materialCesiumChlorideNote: 'Interpenetrerande enkel kubisk jonstruktur med åttafaldig koordination.',
420
+ materialZincSulfide: 'Zinksulfid',
421
+ materialZincSulfideNote: 'Sfalerit, även kallad zinkblände, med tetraedrisk koordination.',
422
+ materialGalliumNitride: 'Galliumnitrid',
423
+ materialGalliumNitrideNote: 'Wurtzit-halvledare som används i LED och kraftelektronik.',
424
+ materialStrontiumTitanate: 'Strontiumtitanat',
425
+ materialStrontiumTitanateNote: 'Kubisk perovskitoxid som används som substrat och dielektrisk modell.',
426
+ materialRutileTitania: 'Rutil-titania',
427
+ materialRutileTitaniaNote: 'Rutil-TiO2-struktur med oktaedrisk titankoordinering.',
428
+ };
429
+
430
+ crystalCatalogTranslations.tr = {
431
+ latticeBodyCenteredCubic: 'Hacim merkezli kübik',
432
+ latticeCesiumChloride: 'Sezyum klorür',
433
+ latticeDiamondCubic: 'Elmas kübik',
434
+ latticeFaceCenteredCubic: 'Yüzey merkezli kübik',
435
+ latticeHexagonalClosePacked: 'Hegzagonal sıkı paket',
436
+ latticePerovskite: 'Kübik perovskit',
437
+ latticeRockSalt: 'Kaya tuzu',
438
+ latticeRutile: 'Rutil',
439
+ latticeWurtzite: 'Wurtzit',
440
+ latticeZincBlende: 'Çinko blendi',
441
+ materialAlphaIron: 'Alfa demir',
442
+ materialAlphaIronNote: 'Oda sıcaklığındaki hacim merkezli kübik demir fazı.',
443
+ materialTungsten: 'Tungsten',
444
+ materialTungstenNote: 'Çok yüksek erime noktasına sahip yoğun BCC refrakter metal.',
445
+ materialSilicon: 'Silisyum',
446
+ materialSiliconNote: 'Entegre devrelerde kullanılan elmas kübik yarı iletken.',
447
+ materialDiamond: 'Elmas',
448
+ materialDiamondNote: 'Elmas kübik yapıda kovalent karbon ağı.',
449
+ materialCesiumChloride: 'Sezyum klorür',
450
+ materialCesiumChlorideNote: 'Sekizli koordinasyona sahip iç içe geçmiş basit kübik iyonik yapı.',
451
+ materialZincSulfide: 'Çinko sülfür',
452
+ materialZincSulfideNote: 'Sfalerit, çinko blendi olarak da bilinir, tetrahedral koordinasyona sahiptir.',
453
+ materialGalliumNitride: 'Galyum nitrür',
454
+ materialGalliumNitrideNote: 'LED ve güç elektroniğinde kullanılan wurtzit yarı iletken.',
455
+ materialStrontiumTitanate: 'Stronsiyum titanat',
456
+ materialStrontiumTitanateNote: 'Altlık ve dielektrik model olarak kullanılan kübik perovskit oksit.',
457
+ materialRutileTitania: 'Rutil titanya',
458
+ materialRutileTitaniaNote: 'Titanyumun oktahedral koordinasyonuna sahip rutil TiO2 yapısı.',
459
+ };
@@ -0,0 +1,27 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, readdirSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ const libDir = dirname(fileURLToPath(import.meta.url));
6
+ const toolsDir = join(libDir, '../src/tool');
7
+
8
+ const inNodeModules = libDir.includes('node_modules');
9
+ if (!inNodeModules) process.exit(0);
10
+
11
+ const projectRoot = join(libDir, '../../../..');
12
+ const categoryKey = JSON.parse(readFileSync(join(libDir, '../package.json'), 'utf8')).name.replace('@jjlmoya/utils-', '');
13
+ const destDir = join(projectRoot, `public/styles/lib/${categoryKey}`);
14
+
15
+ mkdirSync(destDir, { recursive: true });
16
+
17
+ const tools = readdirSync(toolsDir, { withFileTypes: true }).filter(d => d.isDirectory());
18
+ for (const tool of tools) {
19
+ const toolDir = join(toolsDir, tool.name);
20
+ let files;
21
+ try { files = readdirSync(toolDir).filter(f => f.endsWith('.css')); }
22
+ catch { continue; }
23
+ for (const file of files) {
24
+ writeFileSync(join(destDir, file), readFileSync(join(toolDir, file)));
25
+ console.log(`[@jjlmoya/utils-${categoryKey}] copied ${file}`);
26
+ }
27
+ }
@@ -0,0 +1,50 @@
1
+ import { readFile, writeFile } from 'node:fs/promises';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { dirname, join } from 'node:path';
4
+ import { crystalCatalogTranslations } from './crystal-lattice-catalog-translations.mjs';
5
+
6
+ const root = dirname(dirname(fileURLToPath(import.meta.url)));
7
+ const i18nDir = join(root, 'src/tool/crystal-lattice-structure-finder/i18n');
8
+
9
+ const shortNames = {
10
+ shortSimpleCubic: 'SC',
11
+ shortFaceCenteredCubic: 'FCC',
12
+ shortHexagonalClosePacked: 'HCP',
13
+ shortBodyCenteredCubic: 'BCC',
14
+ shortDiamondCubic: 'DC',
15
+ shortRockSalt: 'NaCl',
16
+ shortCesiumChloride: 'CsCl',
17
+ shortZincBlende: 'ZnS',
18
+ shortWurtzite: 'WZ',
19
+ shortPerovskite: 'ABO3',
20
+ shortRutile: 'TiO2',
21
+ };
22
+
23
+ const catalogKeys = Object.keys(crystalCatalogTranslations.en);
24
+ const managedKeys = [...Object.keys(shortNames), ...catalogKeys];
25
+
26
+ function quote(value) {
27
+ return `'${value.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}'`;
28
+ }
29
+
30
+ function renderBlock(locale) {
31
+ const values = crystalCatalogTranslations[locale];
32
+ if (!values) throw new Error(`Missing crystal catalog translations for locale: ${locale}`);
33
+ return Object.entries({ ...shortNames, ...values }).map(([key, value]) => ` ${key}: ${quote(value)},`).join('\n');
34
+ }
35
+
36
+ function insertBlock(text, block) {
37
+ const withoutOldMarkers = text.replace(/\s*\/\/ crystal-catalog:start[\s\S]*?\/\/ crystal-catalog:end\r?\n?/g, '\n');
38
+ const managedKeyPattern = new RegExp(`^\\s*(?:${managedKeys.join('|')}): .*?,\\r?\\n`, 'gm');
39
+ const withoutManagedKeys = withoutOldMarkers.replace(managedKeyPattern, '');
40
+
41
+ const anchor = /^(\s*materialHaliteNote: .*,\r?\n)/m;
42
+ if (!anchor.test(withoutManagedKeys)) throw new Error('Could not find materialHaliteNote insertion point.');
43
+ return withoutManagedKeys.replace(anchor, `$1${block}\n`);
44
+ }
45
+
46
+ for (const locale of Object.keys(crystalCatalogTranslations).sort()) {
47
+ const file = join(i18nDir, `${locale}.ts`);
48
+ const text = await readFile(file, 'utf8');
49
+ await writeFile(file, insertBlock(text, renderBlock(locale)), 'utf8');
50
+ }
@@ -0,0 +1,55 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: "forensische-wissenschaft",
5
+ title: "Werkzeuge fuer forensische Wissenschaft",
6
+ description: "Forensische Hilfswerkzeuge fuer strukturierte Falltriage, transparente Berechnungen und beweisbewusste Berichte.",
7
+ seo: [
8
+ {
9
+ type: 'title',
10
+ text: "Forensische Wissenschaftswerkzeuge fuer beweisbewusste Berechnungen und Falltriage",
11
+ level: 2,
12
+ },
13
+ {
14
+ type: 'paragraph',
15
+ html: "Diese Kategorie sammelt forensische Rechner und strukturierte Hilfen, die Beweise interpretieren, Annahmen dokumentieren und falsche Genauigkeit vermeiden. Sie ersetzt keine Fachleute, Labore oder validierten Protokolle, sondern macht fruehe Fallpruefung klarer: welche Daten vorliegen, welche Annahmen die Berechnung nutzt, was das Ergebnis stuetzen kann und welche Unsicherheit bleibt.",
16
+ },
17
+ {
18
+ type: 'paragraph',
19
+ html: "Forensische Arbeit kann Entscheidungen mit hohen Folgen beeinflussen. Deshalb muss jedes Werkzeug seine Grenzen sichtbar machen: Bereiche statt scheinbarer Sicherheit, Screening statt formeller Begutachtung und Hinweise auf fehlende Daten vor einer Schlussfolgerung.",
20
+ },
21
+ {
22
+ type: 'title',
23
+ text: "Was in diese Kategorie forensischer Hilfswerkzeuge gehoert",
24
+ level: 3,
25
+ },
26
+ {
27
+ type: 'list',
28
+ items: [
29
+ '<strong>Age assessment tools:</strong> dental, skeletal, and maturity indicators with explicit uncertainty.',
30
+ '<strong>Evidence interpretation tools:</strong> structured calculators that show assumptions, confidence, and limitations.',
31
+ '<strong>Case triage tools:</strong> fast workflows that help decide what data are missing before formal analysis.',
32
+ '<strong>Reporting support:</strong> outputs that encourage clear language, ranges, caveats, and traceable reasoning.',
33
+ ],
34
+ },
35
+ {
36
+ type: 'title',
37
+ text: "Forensische Rechner verantwortungsvoll nutzen",
38
+ level: 3,
39
+ },
40
+ {
41
+ type: 'paragraph',
42
+ html: "Nutzen Sie diese Werkzeuge als Entscheidungs- und Erklaerungshilfen, nicht als endgueltige Autoritaet fuer rechtliche, medizinische, migrationsbezogene, schutzbezogene oder Opferidentifikationsentscheidungen.",
43
+ },
44
+ {
45
+ type: 'table',
46
+ headers: ['Good use', 'Poor use', 'Why it matters'],
47
+ rows: [
48
+ ["Screen a case file before specialist review.", "Replace specialist review with a calculator result.", "Forensic conclusions must be defensible and methodologically valid."],
49
+ ["Explain uncertainty to non-specialists.", "Report one exact answer without caveats.", "False precision can mislead legal or safeguarding decisions."],
50
+ ["Compare how assumptions affect a result.", "Hide assumptions from the report.", "Transparent assumptions make the result easier to audit."],
51
+ ["Identify missing evidence.", "Ignore poor data quality.", "Weak inputs can make even a correct formula unreliable."],
52
+ ],
53
+ },
54
+ ],
55
+ };