@jjlmoya/utils-diy 1.10.0 → 1.12.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 (286) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +3 -1
  4. package/src/index.ts +2 -0
  5. package/src/pages/[locale]/[slug].astro +28 -12
  6. package/src/tests/locale_completeness.test.ts +7 -9
  7. package/src/tests/shared-test-helpers.ts +56 -0
  8. package/src/tests/tool_exports.test.ts +34 -0
  9. package/src/tests/tool_validation.test.ts +2 -2
  10. package/src/tool/balusterCalculator/baluster-calculator.css +9 -9
  11. package/src/tool/balusterCalculator/bibliography.astro +2 -10
  12. package/src/tool/balusterCalculator/bibliography.ts +16 -0
  13. package/src/tool/balusterCalculator/i18n/de.ts +2 -15
  14. package/src/tool/balusterCalculator/i18n/en.ts +2 -15
  15. package/src/tool/balusterCalculator/i18n/es.ts +2 -15
  16. package/src/tool/balusterCalculator/i18n/fr.ts +2 -15
  17. package/src/tool/balusterCalculator/i18n/id.ts +2 -15
  18. package/src/tool/balusterCalculator/i18n/it.ts +2 -15
  19. package/src/tool/balusterCalculator/i18n/ja.ts +2 -15
  20. package/src/tool/balusterCalculator/i18n/ko.ts +2 -15
  21. package/src/tool/balusterCalculator/i18n/nl.ts +2 -15
  22. package/src/tool/balusterCalculator/i18n/pl.ts +2 -15
  23. package/src/tool/balusterCalculator/i18n/pt.ts +2 -15
  24. package/src/tool/balusterCalculator/i18n/ru.ts +2 -15
  25. package/src/tool/balusterCalculator/i18n/sv.ts +2 -15
  26. package/src/tool/balusterCalculator/i18n/tr.ts +2 -15
  27. package/src/tool/balusterCalculator/i18n/zh.ts +2 -15
  28. package/src/tool/balusterCalculator/seo.astro +1 -1
  29. package/src/tool/clayCalculator/bibliography.astro +2 -10
  30. package/src/tool/clayCalculator/bibliography.ts +12 -0
  31. package/src/tool/clayCalculator/clay-shrinkage-calculator.css +30 -30
  32. package/src/tool/clayCalculator/i18n/de.ts +2 -11
  33. package/src/tool/clayCalculator/i18n/en.ts +2 -11
  34. package/src/tool/clayCalculator/i18n/es.ts +2 -11
  35. package/src/tool/clayCalculator/i18n/fr.ts +2 -11
  36. package/src/tool/clayCalculator/i18n/id.ts +2 -11
  37. package/src/tool/clayCalculator/i18n/it.ts +2 -11
  38. package/src/tool/clayCalculator/i18n/ja.ts +2 -11
  39. package/src/tool/clayCalculator/i18n/ko.ts +2 -11
  40. package/src/tool/clayCalculator/i18n/nl.ts +2 -11
  41. package/src/tool/clayCalculator/i18n/pl.ts +2 -11
  42. package/src/tool/clayCalculator/i18n/pt.ts +2 -11
  43. package/src/tool/clayCalculator/i18n/ru.ts +2 -11
  44. package/src/tool/clayCalculator/i18n/sv.ts +2 -11
  45. package/src/tool/clayCalculator/i18n/tr.ts +2 -11
  46. package/src/tool/clayCalculator/i18n/zh.ts +2 -11
  47. package/src/tool/clayCalculator/seo.astro +1 -1
  48. package/src/tool/concreteCalculator/bibliography.astro +2 -9
  49. package/src/tool/concreteCalculator/bibliography.ts +7 -0
  50. package/src/tool/concreteCalculator/concrete-mortar-calculator.css +18 -18
  51. package/src/tool/concreteCalculator/i18n/de.ts +2 -15
  52. package/src/tool/concreteCalculator/i18n/en.ts +2 -15
  53. package/src/tool/concreteCalculator/i18n/es.ts +2 -15
  54. package/src/tool/concreteCalculator/i18n/fr.ts +2 -15
  55. package/src/tool/concreteCalculator/i18n/id.ts +2 -15
  56. package/src/tool/concreteCalculator/i18n/it.ts +2 -15
  57. package/src/tool/concreteCalculator/i18n/ja.ts +2 -15
  58. package/src/tool/concreteCalculator/i18n/ko.ts +2 -15
  59. package/src/tool/concreteCalculator/i18n/nl.ts +2 -15
  60. package/src/tool/concreteCalculator/i18n/pl.ts +2 -15
  61. package/src/tool/concreteCalculator/i18n/pt.ts +2 -15
  62. package/src/tool/concreteCalculator/i18n/ru.ts +2 -15
  63. package/src/tool/concreteCalculator/i18n/sv.ts +2 -15
  64. package/src/tool/concreteCalculator/i18n/tr.ts +2 -15
  65. package/src/tool/concreteCalculator/i18n/zh.ts +2 -15
  66. package/src/tool/concreteCalculator/seo.astro +2 -1
  67. package/src/tool/cutOptimizer/bibliography.astro +2 -9
  68. package/src/tool/cutOptimizer/bibliography.ts +12 -0
  69. package/src/tool/cutOptimizer/cut-optimizer.css +25 -25
  70. package/src/tool/cutOptimizer/i18n/de.ts +2 -11
  71. package/src/tool/cutOptimizer/i18n/en.ts +2 -11
  72. package/src/tool/cutOptimizer/i18n/es.ts +2 -11
  73. package/src/tool/cutOptimizer/i18n/fr.ts +2 -11
  74. package/src/tool/cutOptimizer/i18n/id.ts +2 -11
  75. package/src/tool/cutOptimizer/i18n/it.ts +2 -11
  76. package/src/tool/cutOptimizer/i18n/ja.ts +2 -11
  77. package/src/tool/cutOptimizer/i18n/ko.ts +2 -11
  78. package/src/tool/cutOptimizer/i18n/nl.ts +2 -11
  79. package/src/tool/cutOptimizer/i18n/pl.ts +2 -11
  80. package/src/tool/cutOptimizer/i18n/pt.ts +2 -11
  81. package/src/tool/cutOptimizer/i18n/ru.ts +2 -11
  82. package/src/tool/cutOptimizer/i18n/sv.ts +2 -11
  83. package/src/tool/cutOptimizer/i18n/tr.ts +2 -11
  84. package/src/tool/cutOptimizer/i18n/zh.ts +2 -11
  85. package/src/tool/cutOptimizer/seo.astro +2 -1
  86. package/src/tool/drillCalculator/bibliography.astro +2 -9
  87. package/src/tool/drillCalculator/bibliography.ts +12 -0
  88. package/src/tool/drillCalculator/drill-rpm-calculator.css +57 -57
  89. package/src/tool/drillCalculator/i18n/de.ts +2 -5
  90. package/src/tool/drillCalculator/i18n/en.ts +2 -5
  91. package/src/tool/drillCalculator/i18n/es.ts +2 -5
  92. package/src/tool/drillCalculator/i18n/fr.ts +2 -5
  93. package/src/tool/drillCalculator/i18n/id.ts +2 -5
  94. package/src/tool/drillCalculator/i18n/it.ts +2 -5
  95. package/src/tool/drillCalculator/i18n/ja.ts +2 -5
  96. package/src/tool/drillCalculator/i18n/ko.ts +2 -5
  97. package/src/tool/drillCalculator/i18n/nl.ts +2 -5
  98. package/src/tool/drillCalculator/i18n/pl.ts +2 -5
  99. package/src/tool/drillCalculator/i18n/pt.ts +2 -5
  100. package/src/tool/drillCalculator/i18n/ru.ts +2 -5
  101. package/src/tool/drillCalculator/i18n/sv.ts +2 -5
  102. package/src/tool/drillCalculator/i18n/tr.ts +2 -5
  103. package/src/tool/drillCalculator/i18n/zh.ts +2 -5
  104. package/src/tool/drillCalculator/seo.astro +2 -1
  105. package/src/tool/drillSharpener/bibliography.astro +2 -9
  106. package/src/tool/drillSharpener/bibliography.ts +16 -0
  107. package/src/tool/drillSharpener/drill-sharpening-master.css +1 -1
  108. package/src/tool/drillSharpener/i18n/de.ts +2 -5
  109. package/src/tool/drillSharpener/i18n/en.ts +2 -6
  110. package/src/tool/drillSharpener/i18n/es.ts +2 -6
  111. package/src/tool/drillSharpener/i18n/fr.ts +2 -6
  112. package/src/tool/drillSharpener/i18n/id.ts +2 -5
  113. package/src/tool/drillSharpener/i18n/it.ts +2 -5
  114. package/src/tool/drillSharpener/i18n/ja.ts +2 -5
  115. package/src/tool/drillSharpener/i18n/ko.ts +2 -5
  116. package/src/tool/drillSharpener/i18n/nl.ts +2 -5
  117. package/src/tool/drillSharpener/i18n/pl.ts +2 -5
  118. package/src/tool/drillSharpener/i18n/pt.ts +2 -5
  119. package/src/tool/drillSharpener/i18n/ru.ts +2 -5
  120. package/src/tool/drillSharpener/i18n/sv.ts +2 -5
  121. package/src/tool/drillSharpener/i18n/tr.ts +2 -5
  122. package/src/tool/drillSharpener/i18n/zh.ts +2 -5
  123. package/src/tool/drillSharpener/seo.astro +2 -1
  124. package/src/tool/epoxyCalculator/bibliography.astro +2 -10
  125. package/src/tool/epoxyCalculator/bibliography.ts +20 -0
  126. package/src/tool/epoxyCalculator/epoxy-resin-calculator.css +13 -13
  127. package/src/tool/epoxyCalculator/i18n/de.ts +2 -5
  128. package/src/tool/epoxyCalculator/i18n/en.ts +2 -19
  129. package/src/tool/epoxyCalculator/i18n/es.ts +2 -19
  130. package/src/tool/epoxyCalculator/i18n/fr.ts +2 -19
  131. package/src/tool/epoxyCalculator/i18n/id.ts +2 -5
  132. package/src/tool/epoxyCalculator/i18n/it.ts +2 -5
  133. package/src/tool/epoxyCalculator/i18n/ja.ts +2 -5
  134. package/src/tool/epoxyCalculator/i18n/ko.ts +2 -5
  135. package/src/tool/epoxyCalculator/i18n/nl.ts +2 -5
  136. package/src/tool/epoxyCalculator/i18n/pl.ts +2 -5
  137. package/src/tool/epoxyCalculator/i18n/pt.ts +2 -5
  138. package/src/tool/epoxyCalculator/i18n/ru.ts +2 -5
  139. package/src/tool/epoxyCalculator/i18n/sv.ts +2 -5
  140. package/src/tool/epoxyCalculator/i18n/tr.ts +2 -5
  141. package/src/tool/epoxyCalculator/i18n/zh.ts +2 -5
  142. package/src/tool/epoxyCalculator/seo.astro +1 -1
  143. package/src/tool/furnitureFit/bibliography.astro +2 -9
  144. package/src/tool/furnitureFit/bibliography.ts +12 -0
  145. package/src/tool/furnitureFit/furniture-fit-calculator.css +7 -7
  146. package/src/tool/furnitureFit/i18n/de.ts +2 -5
  147. package/src/tool/furnitureFit/i18n/en.ts +2 -5
  148. package/src/tool/furnitureFit/i18n/es.ts +2 -5
  149. package/src/tool/furnitureFit/i18n/fr.ts +2 -5
  150. package/src/tool/furnitureFit/i18n/id.ts +2 -5
  151. package/src/tool/furnitureFit/i18n/it.ts +2 -5
  152. package/src/tool/furnitureFit/i18n/ja.ts +2 -5
  153. package/src/tool/furnitureFit/i18n/ko.ts +2 -5
  154. package/src/tool/furnitureFit/i18n/nl.ts +2 -5
  155. package/src/tool/furnitureFit/i18n/pl.ts +2 -5
  156. package/src/tool/furnitureFit/i18n/pt.ts +2 -5
  157. package/src/tool/furnitureFit/i18n/ru.ts +2 -5
  158. package/src/tool/furnitureFit/i18n/sv.ts +2 -5
  159. package/src/tool/furnitureFit/i18n/tr.ts +2 -5
  160. package/src/tool/furnitureFit/i18n/zh.ts +2 -5
  161. package/src/tool/furnitureFit/seo.astro +2 -1
  162. package/src/tool/mortarCalculator/bibliography.astro +2 -9
  163. package/src/tool/mortarCalculator/bibliography.ts +20 -0
  164. package/src/tool/mortarCalculator/i18n/de.ts +2 -5
  165. package/src/tool/mortarCalculator/i18n/en.ts +2 -19
  166. package/src/tool/mortarCalculator/i18n/es.ts +2 -19
  167. package/src/tool/mortarCalculator/i18n/fr.ts +2 -19
  168. package/src/tool/mortarCalculator/i18n/id.ts +2 -5
  169. package/src/tool/mortarCalculator/i18n/it.ts +2 -5
  170. package/src/tool/mortarCalculator/i18n/ja.ts +2 -5
  171. package/src/tool/mortarCalculator/i18n/ko.ts +2 -5
  172. package/src/tool/mortarCalculator/i18n/nl.ts +2 -5
  173. package/src/tool/mortarCalculator/i18n/pl.ts +2 -5
  174. package/src/tool/mortarCalculator/i18n/pt.ts +2 -5
  175. package/src/tool/mortarCalculator/i18n/ru.ts +2 -5
  176. package/src/tool/mortarCalculator/i18n/sv.ts +2 -5
  177. package/src/tool/mortarCalculator/i18n/tr.ts +2 -5
  178. package/src/tool/mortarCalculator/i18n/zh.ts +2 -5
  179. package/src/tool/mortarCalculator/lime-mortar-calculator.css +30 -30
  180. package/src/tool/mortarCalculator/seo.astro +2 -1
  181. package/src/tool/passepartoutCalculator/bibliography.astro +2 -9
  182. package/src/tool/passepartoutCalculator/bibliography.ts +16 -0
  183. package/src/tool/passepartoutCalculator/i18n/de.ts +2 -6
  184. package/src/tool/passepartoutCalculator/i18n/en.ts +2 -15
  185. package/src/tool/passepartoutCalculator/i18n/es.ts +2 -15
  186. package/src/tool/passepartoutCalculator/i18n/fr.ts +2 -15
  187. package/src/tool/passepartoutCalculator/i18n/id.ts +2 -6
  188. package/src/tool/passepartoutCalculator/i18n/it.ts +2 -6
  189. package/src/tool/passepartoutCalculator/i18n/ja.ts +2 -6
  190. package/src/tool/passepartoutCalculator/i18n/ko.ts +2 -6
  191. package/src/tool/passepartoutCalculator/i18n/nl.ts +2 -6
  192. package/src/tool/passepartoutCalculator/i18n/pl.ts +2 -6
  193. package/src/tool/passepartoutCalculator/i18n/pt.ts +2 -6
  194. package/src/tool/passepartoutCalculator/i18n/ru.ts +2 -6
  195. package/src/tool/passepartoutCalculator/i18n/sv.ts +2 -6
  196. package/src/tool/passepartoutCalculator/i18n/tr.ts +2 -6
  197. package/src/tool/passepartoutCalculator/i18n/zh.ts +2 -6
  198. package/src/tool/passepartoutCalculator/passepartout-calculator.css +26 -26
  199. package/src/tool/passepartoutCalculator/seo.astro +2 -1
  200. package/src/tool/stairCalculator/bibliography.astro +2 -9
  201. package/src/tool/stairCalculator/bibliography.ts +16 -0
  202. package/src/tool/stairCalculator/i18n/de.ts +2 -5
  203. package/src/tool/stairCalculator/i18n/en.ts +2 -6
  204. package/src/tool/stairCalculator/i18n/es.ts +2 -6
  205. package/src/tool/stairCalculator/i18n/fr.ts +2 -6
  206. package/src/tool/stairCalculator/i18n/id.ts +2 -5
  207. package/src/tool/stairCalculator/i18n/it.ts +2 -5
  208. package/src/tool/stairCalculator/i18n/ja.ts +2 -5
  209. package/src/tool/stairCalculator/i18n/ko.ts +2 -5
  210. package/src/tool/stairCalculator/i18n/nl.ts +2 -5
  211. package/src/tool/stairCalculator/i18n/pl.ts +2 -5
  212. package/src/tool/stairCalculator/i18n/pt.ts +2 -5
  213. package/src/tool/stairCalculator/i18n/ru.ts +2 -5
  214. package/src/tool/stairCalculator/i18n/sv.ts +2 -5
  215. package/src/tool/stairCalculator/i18n/tr.ts +2 -5
  216. package/src/tool/stairCalculator/i18n/zh.ts +2 -5
  217. package/src/tool/stairCalculator/seo.astro +2 -1
  218. package/src/tool/stairCalculator/stair-calculator.css +10 -10
  219. package/src/tool/thermalExpansionCalculator/bibliography.astro +2 -9
  220. package/src/tool/thermalExpansionCalculator/bibliography.ts +16 -0
  221. package/src/tool/thermalExpansionCalculator/i18n/de.ts +2 -6
  222. package/src/tool/thermalExpansionCalculator/i18n/en.ts +2 -6
  223. package/src/tool/thermalExpansionCalculator/i18n/es.ts +2 -6
  224. package/src/tool/thermalExpansionCalculator/i18n/fr.ts +2 -6
  225. package/src/tool/thermalExpansionCalculator/i18n/id.ts +2 -6
  226. package/src/tool/thermalExpansionCalculator/i18n/it.ts +2 -6
  227. package/src/tool/thermalExpansionCalculator/i18n/ja.ts +2 -6
  228. package/src/tool/thermalExpansionCalculator/i18n/ko.ts +2 -6
  229. package/src/tool/thermalExpansionCalculator/i18n/nl.ts +2 -6
  230. package/src/tool/thermalExpansionCalculator/i18n/pl.ts +2 -6
  231. package/src/tool/thermalExpansionCalculator/i18n/pt.ts +2 -6
  232. package/src/tool/thermalExpansionCalculator/i18n/ru.ts +2 -6
  233. package/src/tool/thermalExpansionCalculator/i18n/sv.ts +2 -6
  234. package/src/tool/thermalExpansionCalculator/i18n/tr.ts +2 -6
  235. package/src/tool/thermalExpansionCalculator/i18n/zh.ts +2 -6
  236. package/src/tool/thermalExpansionCalculator/seo.astro +2 -1
  237. package/src/tool/thermalExpansionCalculator/thermal-expansion-calculator.css +19 -19
  238. package/src/tool/voltageDropCalculator/bibliography.astro +2 -9
  239. package/src/tool/voltageDropCalculator/bibliography.ts +16 -0
  240. package/src/tool/voltageDropCalculator/i18n/de.ts +2 -5
  241. package/src/tool/voltageDropCalculator/i18n/en.ts +2 -6
  242. package/src/tool/voltageDropCalculator/i18n/es.ts +2 -6
  243. package/src/tool/voltageDropCalculator/i18n/fr.ts +2 -6
  244. package/src/tool/voltageDropCalculator/i18n/id.ts +2 -5
  245. package/src/tool/voltageDropCalculator/i18n/it.ts +2 -5
  246. package/src/tool/voltageDropCalculator/i18n/ja.ts +2 -5
  247. package/src/tool/voltageDropCalculator/i18n/ko.ts +2 -5
  248. package/src/tool/voltageDropCalculator/i18n/nl.ts +2 -5
  249. package/src/tool/voltageDropCalculator/i18n/pl.ts +2 -5
  250. package/src/tool/voltageDropCalculator/i18n/pt.ts +2 -5
  251. package/src/tool/voltageDropCalculator/i18n/ru.ts +2 -5
  252. package/src/tool/voltageDropCalculator/i18n/sv.ts +2 -5
  253. package/src/tool/voltageDropCalculator/i18n/tr.ts +2 -5
  254. package/src/tool/voltageDropCalculator/i18n/zh.ts +2 -5
  255. package/src/tool/voltageDropCalculator/seo.astro +2 -1
  256. package/src/tool/voltageDropCalculator/voltage-drop-calculator.css +24 -24
  257. package/src/tool/workshopFractionConverter/bibliography.astro +6 -0
  258. package/src/tool/workshopFractionConverter/bibliography.ts +12 -0
  259. package/src/tool/workshopFractionConverter/client.ts +183 -0
  260. package/src/tool/workshopFractionConverter/component.astro +226 -0
  261. package/src/tool/workshopFractionConverter/converter.ts +110 -0
  262. package/src/tool/workshopFractionConverter/engine.ts +223 -0
  263. package/src/tool/workshopFractionConverter/entry.ts +24 -0
  264. package/src/tool/workshopFractionConverter/i18n/de.ts +141 -0
  265. package/src/tool/workshopFractionConverter/i18n/en.ts +141 -0
  266. package/src/tool/workshopFractionConverter/i18n/es.ts +141 -0
  267. package/src/tool/workshopFractionConverter/i18n/fr.ts +141 -0
  268. package/src/tool/workshopFractionConverter/i18n/id.ts +141 -0
  269. package/src/tool/workshopFractionConverter/i18n/it.ts +141 -0
  270. package/src/tool/workshopFractionConverter/i18n/ja.ts +141 -0
  271. package/src/tool/workshopFractionConverter/i18n/ko.ts +141 -0
  272. package/src/tool/workshopFractionConverter/i18n/nl.ts +141 -0
  273. package/src/tool/workshopFractionConverter/i18n/pl.ts +141 -0
  274. package/src/tool/workshopFractionConverter/i18n/pt.ts +141 -0
  275. package/src/tool/workshopFractionConverter/i18n/ru.ts +141 -0
  276. package/src/tool/workshopFractionConverter/i18n/sv.ts +141 -0
  277. package/src/tool/workshopFractionConverter/i18n/tr.ts +141 -0
  278. package/src/tool/workshopFractionConverter/i18n/zh.ts +141 -0
  279. package/src/tool/workshopFractionConverter/index.ts +11 -0
  280. package/src/tool/workshopFractionConverter/seo.astro +15 -0
  281. package/src/tool/workshopFractionConverter/types-client.ts +89 -0
  282. package/src/tool/workshopFractionConverter/ui-updater.ts +94 -0
  283. package/src/tool/workshopFractionConverter/ui.ts +38 -0
  284. package/src/tool/workshopFractionConverter/workshop-fraction-converter.css +563 -0
  285. package/src/tools.ts +2 -1
  286. package/src/types.ts +1 -1
@@ -0,0 +1,89 @@
1
+ export interface Fraction {
2
+ whole: number;
3
+ numerator: number;
4
+ denominator: number;
5
+ }
6
+
7
+ export interface ConversionResult {
8
+ fraction: Fraction;
9
+ inches: number;
10
+ millimeters: number;
11
+ closestFastener: Match | null;
12
+ closestSocket: Match | null;
13
+ }
14
+
15
+ export interface Match {
16
+ name: string;
17
+ size_mm: number;
18
+ size_inch: string;
19
+ difference_mm: number;
20
+ difference_pct: number;
21
+ }
22
+
23
+ export interface ReverseSearchResult {
24
+ input_mm: number;
25
+ closest_fraction: Fraction;
26
+ inches: number;
27
+ closestFastener: Match | null;
28
+ closestSocket: Match | null;
29
+ }
30
+
31
+ export interface HistoryEntry {
32
+ fraction: string;
33
+ mm: string;
34
+ time: number;
35
+ }
36
+
37
+ export const STANDARD_FASTENERS = [
38
+ { name: '#0', inch: '1/80', mm: 0.318 },
39
+ { name: '#1', inch: '1/73', mm: 0.346 },
40
+ { name: '#2', inch: '3/32', mm: 2.362 },
41
+ { name: '#3', inch: '7/64', mm: 2.778 },
42
+ { name: '#4', inch: '7/64', mm: 2.819 },
43
+ { name: '#5', inch: '1/8', mm: 3.175 },
44
+ { name: '#6', inch: '9/64', mm: 3.556 },
45
+ { name: '#8', inch: '5/32', mm: 4.191 },
46
+ { name: '#10', inch: '3/16', mm: 4.826 },
47
+ { name: '#12', inch: '7/32', mm: 5.461 },
48
+ { name: '1/4"', inch: '1/4', mm: 6.35 },
49
+ { name: '5/16"', inch: '5/16', mm: 7.938 },
50
+ { name: '3/8"', inch: '3/8', mm: 9.525 },
51
+ { name: '7/16"', inch: '7/16', mm: 11.113 },
52
+ { name: '1/2"', inch: '1/2', mm: 12.7 },
53
+ { name: '9/16"', inch: '9/16', mm: 14.288 },
54
+ { name: '5/8"', inch: '5/8', mm: 15.875 },
55
+ { name: '3/4"', inch: '3/4', mm: 19.05 },
56
+ { name: '7/8"', inch: '7/8', mm: 22.225 },
57
+ { name: '1"', inch: '1', mm: 25.4 },
58
+ ];
59
+
60
+ export const STANDARD_SOCKETS = [
61
+ { name: '4mm', mm: 4.0, inch: '5/32' },
62
+ { name: '4.5mm', mm: 4.5, inch: '3/16' },
63
+ { name: '5mm', mm: 5.0, inch: '13/64' },
64
+ { name: '5.5mm', mm: 5.5, inch: '7/32' },
65
+ { name: '6mm', mm: 6.0, inch: '15/64' },
66
+ { name: '7mm', mm: 7.0, inch: '9/32' },
67
+ { name: '8mm', mm: 8.0, inch: '5/16' },
68
+ { name: '9mm', mm: 9.0, inch: '23/64' },
69
+ { name: '10mm', mm: 10.0, inch: '3/8' },
70
+ { name: '11mm', mm: 11.0, inch: '7/16' },
71
+ { name: '12mm', mm: 12.0, inch: '15/32' },
72
+ { name: '13mm', mm: 13.0, inch: '1/2' },
73
+ { name: '14mm', mm: 14.0, inch: '9/16' },
74
+ { name: '15mm', mm: 15.0, inch: '19/32' },
75
+ { name: '16mm', mm: 16.0, inch: '5/8' },
76
+ { name: '17mm', mm: 17.0, inch: '11/16' },
77
+ { name: '18mm', mm: 18.0, inch: '23/32' },
78
+ { name: '19mm', mm: 19.0, inch: '3/4' },
79
+ { name: '20mm', mm: 20.0, inch: '13/16' },
80
+ { name: '1/4" socket', mm: 6.35, inch: '1/4' },
81
+ { name: '5/16" socket', mm: 7.938, inch: '5/16' },
82
+ { name: '3/8" socket', mm: 9.525, inch: '3/8' },
83
+ { name: '7/16" socket', mm: 11.113, inch: '7/16' },
84
+ { name: '1/2" socket', mm: 12.7, inch: '1/2' },
85
+ { name: '9/16" socket', mm: 14.288, inch: '9/16' },
86
+ { name: '5/8" socket', mm: 15.875, inch: '5/8' },
87
+ { name: '11/16" socket', mm: 17.463, inch: '11/16' },
88
+ { name: '3/4" socket', mm: 19.05, inch: '3/4' },
89
+ ];
@@ -0,0 +1,94 @@
1
+ import type { ConversionResult, Match, ReverseSearchResult } from './types-client';
2
+ import { formatFraction } from './converter';
3
+
4
+ function getDecimals(precision: string) {
5
+ return precision === 'metal' ? 3 : 1;
6
+ }
7
+
8
+ function updateResultDisplay(fractionStr: string, inchesStr: string, mmStr: string) {
9
+ const fractionEl = document.getElementById('wfc-result-fraction');
10
+ if (fractionEl) fractionEl.textContent = fractionStr;
11
+ const inchesEl = document.getElementById('wfc-result-inches');
12
+ if (inchesEl) inchesEl.textContent = inchesStr;
13
+ const mmEl = document.getElementById('wfc-result-mm');
14
+ if (mmEl) mmEl.textContent = mmStr;
15
+ }
16
+
17
+ export function displayResult(result: ConversionResult, precision = 'carpentry', ui: Record<string, string> = {}) {
18
+ document.getElementById('wfc-no-result')?.classList.add('wfc-hidden');
19
+ document.getElementById('wfc-result-content')?.classList.remove('wfc-hidden');
20
+ const decimals = getDecimals(precision);
21
+ const fractionStr = formatFraction(result.fraction);
22
+ const inchesStr = result.inches.toFixed(decimals) + '"';
23
+ const mmStr = result.millimeters.toFixed(decimals) + ' mm';
24
+ updateResultDisplay(fractionStr, inchesStr, mmStr);
25
+ updateVisualScale(result.millimeters);
26
+ if (result.closestFastener) updateFastenerMatch(result.closestFastener, ui);
27
+ if (result.closestSocket) updateSocketMatch(result.closestSocket, ui);
28
+ }
29
+
30
+ export function displayReverseResult(result: ReverseSearchResult, precision = 'carpentry', ui: Record<string, string> = {}) {
31
+ document.getElementById('wfc-no-result')?.classList.add('wfc-hidden');
32
+ document.getElementById('wfc-result-content')?.classList.remove('wfc-hidden');
33
+ const decimals = getDecimals(precision);
34
+ const fractionStr = formatFraction(result.closest_fraction);
35
+ const inchesStr = result.inches.toFixed(decimals) + '"';
36
+ const mmStr = result.input_mm.toFixed(decimals) + ' mm';
37
+ updateResultDisplay(fractionStr, inchesStr, mmStr);
38
+ updateVisualScale(result.input_mm);
39
+ if (result.closestFastener) updateFastenerMatch(result.closestFastener, ui);
40
+ if (result.closestSocket) updateSocketMatch(result.closestSocket, ui);
41
+ }
42
+
43
+ function updateVisualScale(mm: number) {
44
+ const inchPx = 96;
45
+ const inches = mm / 25.4;
46
+ const width = inches * inchPx;
47
+ const indicator = document.getElementById('wfc-scale-indicator');
48
+ if (indicator) {
49
+ indicator.style.width = Math.min(width, 240) + 'px';
50
+ }
51
+ const scaleText = document.getElementById('wfc-scale-text');
52
+ if (scaleText) {
53
+ scaleText.textContent = mm.toFixed(2) + ' mm (' + inches.toFixed(2) + '")';
54
+ }
55
+ }
56
+
57
+ function updateFastenerMatch(match: Match, ui: Record<string, string>) {
58
+ const pct = Math.abs(match.difference_pct).toFixed(1);
59
+ const badge = document.getElementById('wfc-fastener-badge');
60
+ const badgeClass = getBadgeClass(pct);
61
+ if (badge) {
62
+ badge.className = 'wfc-match-badge ' + badgeClass;
63
+ badge.textContent = pct + '%';
64
+ }
65
+ const nameEl = document.getElementById('wfc-fastener-name');
66
+ if (nameEl) nameEl.textContent = match.name;
67
+ const detailsEl = document.getElementById('wfc-fastener-details');
68
+ if (detailsEl) {
69
+ detailsEl.innerHTML = `<strong>${match.size_mm.toFixed(2)} mm</strong> (${match.size_inch})<br/>${ui.matchDifference || 'Difference'}: ${match.difference_mm.toFixed(2)} mm`;
70
+ }
71
+ }
72
+
73
+ function updateSocketMatch(match: Match, ui: Record<string, string>) {
74
+ const pct = Math.abs(match.difference_pct).toFixed(1);
75
+ const badge = document.getElementById('wfc-socket-badge');
76
+ const badgeClass = getBadgeClass(pct);
77
+ if (badge) {
78
+ badge.className = 'wfc-match-badge ' + badgeClass;
79
+ badge.textContent = pct + '%';
80
+ }
81
+ const nameEl = document.getElementById('wfc-socket-name');
82
+ if (nameEl) nameEl.textContent = match.name;
83
+ const detailsEl = document.getElementById('wfc-socket-details');
84
+ if (detailsEl) {
85
+ detailsEl.innerHTML = `<strong>${match.size_mm.toFixed(2)} mm</strong> (${match.size_inch})<br/>${ui.matchDifference || 'Difference'}: ${match.difference_mm.toFixed(2)} mm`;
86
+ }
87
+ }
88
+
89
+ function getBadgeClass(pct: string) {
90
+ const numPct = parseFloat(pct);
91
+ if (numPct < 2) return 'tight';
92
+ if (numPct < 5) return '';
93
+ return 'loose';
94
+ }
@@ -0,0 +1,38 @@
1
+ export interface WorkshopFractionConverterUI extends Record<string, string> {
2
+ labelFraction: string;
3
+ labelWhole: string;
4
+ labelNumerator: string;
5
+ labelDenominator: string;
6
+ labelInches: string;
7
+ labelMillimeters: string;
8
+ resultTitle: string;
9
+ resultFraction: string;
10
+ resultInches: string;
11
+ resultMillimeters: string;
12
+ matchTitle: string;
13
+ matchClosestFastener: string;
14
+ matchClosestSocket: string;
15
+ matchDifference: string;
16
+ matchRecommendation: string;
17
+ reverseSearchTitle: string;
18
+ reverseSearchLabel: string;
19
+ reverseSearchButton: string;
20
+ reverseSearchHint: string;
21
+ unitMm: string;
22
+ unitInch: string;
23
+ modeForward: string;
24
+ modeReverse: string;
25
+ precisionLabel: string;
26
+ precisionCarpentry: string;
27
+ precisionMetal: string;
28
+ buttonConvert: string;
29
+ buttonClear: string;
30
+ buttonCopyResult: string;
31
+ buttonSaveToHistory: string;
32
+ historyTitle: string;
33
+ historyEmpty: string;
34
+ historyRemove: string;
35
+ helpText: string;
36
+ toolOverline: string;
37
+ labelVisualReference: string;
38
+ }