@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
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { CutOptimizerUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'kapoptimering';
6
7
  const title = 'Kapoptimering för reglar och skivor';
@@ -89,17 +90,7 @@ export const content: ToolLocaleContent<CutOptimizerUI> = {
89
90
  description,
90
91
  faqTitle: 'Vanliga frågor',
91
92
  faq: faqData,
92
- bibliographyTitle: 'Tekniska referenser',
93
- bibliography: [
94
- {
95
- name: 'Cutting Stock Problem: Wikipedia',
96
- url: 'https://en.wikipedia.org/wiki/Cutting_stock_problem',
97
- },
98
- {
99
- name: 'Bin Packing Problem: Wolfram MathWorld',
100
- url: 'https://mathworld.wolfram.com/BinPackingProblem.html',
101
- },
102
- ],
93
+ bibliography,
103
94
  howTo: howToData,
104
95
  schemas: [faqSchema, howToSchema, appSchema],
105
96
  seo: [
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { CutOptimizerUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'kesim-optimizasyonu';
6
7
  const title = 'Çıta ve Panel Kesim Optimizasyonu';
@@ -89,17 +90,7 @@ export const content: ToolLocaleContent<CutOptimizerUI> = {
89
90
  description,
90
91
  faqTitle: 'Sıkça Sorulan Sorular',
91
92
  faq: faqData,
92
- bibliographyTitle: 'Teknik Referanslar',
93
- bibliography: [
94
- {
95
- name: 'Cutting Stock Problem: Wikipedia',
96
- url: 'https://en.wikipedia.org/wiki/Cutting_stock_problem',
97
- },
98
- {
99
- name: 'Bin Packing Problem: Wolfram MathWorld',
100
- url: 'https://mathworld.wolfram.com/BinPackingProblem.html',
101
- },
102
- ],
93
+ bibliography,
103
94
  howTo: howToData,
104
95
  schemas: [faqSchema, howToSchema, appSchema],
105
96
  seo: [
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { CutOptimizerUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'cut-optimizer';
6
7
  const title = '木材与板材切割优化计算器';
@@ -89,17 +90,7 @@ export const content: ToolLocaleContent<CutOptimizerUI> = {
89
90
  description,
90
91
  faqTitle: '常见问题',
91
92
  faq: faqData,
92
- bibliographyTitle: '技术参考',
93
- bibliography: [
94
- {
95
- name: 'Cutting Stock Problem: Wikipedia',
96
- url: 'https://en.wikipedia.org/wiki/Cutting_stock_problem',
97
- },
98
- {
99
- name: 'Bin Packing Problem: Wolfram MathWorld',
100
- url: 'https://mathworld.wolfram.com/BinPackingProblem.html',
101
- },
102
- ],
93
+ bibliography,
103
94
  howTo: howToData,
104
95
  schemas: [faqSchema, howToSchema, appSchema],
105
96
  seo: [
@@ -6,9 +6,10 @@ import type { KnownLocale } from '../../types';
6
6
  interface Props {
7
7
  locale?: KnownLocale;
8
8
  }
9
+
9
10
  const { locale = 'es' } = Astro.props;
10
11
  const content = await cutOptimizer.i18n[locale]?.();
11
12
  if (!content) return null;
12
13
  ---
13
14
 
14
- <SEORenderer content={{ locale: locale as string, sections: content.seo }} />
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -1,13 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { drillCalculator } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
- const { locale = 'es' } = Astro.props;
10
- const content = await drillCalculator.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
11
4
  ---
12
5
 
13
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,12 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ {
5
+ name: 'Sandvik Coromant: Cutting Speed and Feed Rate Formulae',
6
+ url: 'https://www.sandvik.coromant.com/en-gb/knowledge/machining-formulas-definitions/general-turning-formulas-definitions',
7
+ },
8
+ {
9
+ name: 'Machine Calculations and Workshop Tables — Machinery Handbook',
10
+ url: 'https://www.google.com/search?q=machinery+handbook+cutting+speeds',
11
+ },
12
+ ];
@@ -11,7 +11,7 @@
11
11
  --dc-border: #e5e7eb;
12
12
  }
13
13
 
14
- :global(.theme-dark) {
14
+ .theme-dark {
15
15
  --dc-primary: #818cf8;
16
16
  --dc-primary-dark: #6366f1;
17
17
  --dc-accent: #fbbf24;
@@ -33,7 +33,7 @@
33
33
  background: rgba(255, 255, 255, 0.3);
34
34
  }
35
35
 
36
- :global(.theme-dark) .dc-card {
36
+ .theme-dark .dc-card {
37
37
  background: rgba(255, 255, 255, 0.01);
38
38
  }
39
39
 
@@ -52,7 +52,7 @@
52
52
  gap: 2.5rem;
53
53
  }
54
54
 
55
- :global(.theme-dark) .dc-sidebar {
55
+ .theme-dark .dc-sidebar {
56
56
  background: rgba(255, 255, 255, 0.02);
57
57
  }
58
58
 
@@ -64,7 +64,7 @@
64
64
  background: rgba(255, 255, 255, 0.2);
65
65
  }
66
66
 
67
- :global(.theme-dark) .dc-main {
67
+ .theme-dark .dc-main {
68
68
  background: rgba(255, 255, 255, 0.005);
69
69
  }
70
70
 
@@ -82,7 +82,7 @@
82
82
  color: #6b7280;
83
83
  }
84
84
 
85
- :global(.theme-dark) .dc-field-label {
85
+ .theme-dark .dc-field-label {
86
86
  color: #9ca3af;
87
87
  }
88
88
 
@@ -124,20 +124,20 @@
124
124
  border-color: var(--dc-primary);
125
125
  }
126
126
 
127
- :global(.dc-mat-chip.active) {
127
+ .dc-mat-chip.active {
128
128
  background: white;
129
129
  border-color: var(--dc-accent);
130
130
  transform: rotate(5deg) scale(1.05);
131
131
  box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);
132
132
  }
133
133
 
134
- :global(.theme-dark) .dc-mat-chip {
134
+ .theme-dark .dc-mat-chip {
135
135
  background: rgba(255, 255, 255, 0.05);
136
136
  border-color: rgba(255, 255, 255, 0.1);
137
137
  color: #e5e7eb;
138
138
  }
139
139
 
140
- :global(.theme-dark .dc-mat-chip.active) {
140
+ .theme-dark .dc-mat-chip.active {
141
141
  background: rgba(255, 255, 255, 0.1);
142
142
  border-color: var(--dc-accent);
143
143
  }
@@ -164,19 +164,19 @@
164
164
  border-color: var(--dc-primary);
165
165
  }
166
166
 
167
- :global(.dc-toggle-btn.active) {
167
+ .dc-toggle-btn.active {
168
168
  background: var(--dc-primary);
169
169
  border-color: var(--dc-primary);
170
170
  color: white;
171
171
  }
172
172
 
173
- :global(.theme-dark) .dc-toggle-btn {
173
+ .theme-dark .dc-toggle-btn {
174
174
  background: rgba(255, 255, 255, 0.05);
175
175
  border-color: rgba(255, 255, 255, 0.1);
176
176
  color: #e5e7eb;
177
177
  }
178
178
 
179
- :global(.theme-dark .dc-toggle-btn.active) {
179
+ .theme-dark .dc-toggle-btn.active {
180
180
  background: var(--dc-primary);
181
181
  border-color: var(--dc-primary);
182
182
  color: white;
@@ -208,14 +208,14 @@
208
208
  transition: all 0.2s;
209
209
  }
210
210
 
211
- :global(.dc-unit-btn.active) {
211
+ .dc-unit-btn.active {
212
212
  background: white;
213
213
  border-color: var(--dc-primary);
214
214
  color: var(--dc-primary);
215
215
  box-shadow: 0 2px 8px rgba(99, 102, 241, 0.15);
216
216
  }
217
217
 
218
- :global(.theme-dark) .dc-unit-btn {
218
+ .theme-dark .dc-unit-btn {
219
219
  background: rgba(255, 255, 255, 0.05);
220
220
  border-color: rgba(255, 255, 255, 0.1);
221
221
  color: #e5e7eb;
@@ -228,7 +228,7 @@
228
228
  margin-bottom: 0.5rem;
229
229
  }
230
230
 
231
- :global(.theme-dark) .dc-diameter-display {
231
+ .theme-dark .dc-diameter-display {
232
232
  color: var(--dc-primary-light);
233
233
  }
234
234
 
@@ -277,7 +277,7 @@
277
277
  padding: 1rem;
278
278
  }
279
279
 
280
- :global(.theme-dark) .dc-mode-badge {
280
+ .theme-dark .dc-mode-badge {
281
281
  background: rgba(99, 102, 241, 0.15);
282
282
  border-color: rgba(99, 102, 241, 0.3);
283
283
  }
@@ -290,7 +290,7 @@
290
290
  letter-spacing: 0.05em;
291
291
  }
292
292
 
293
- :global(.theme-dark) .dc-mode-label {
293
+ .theme-dark .dc-mode-label {
294
294
  color: var(--dc-primary-light);
295
295
  }
296
296
 
@@ -304,7 +304,7 @@
304
304
  position: relative;
305
305
  }
306
306
 
307
- :global(.dc-toggle-switch.active) {
307
+ .dc-toggle-switch.active {
308
308
  background: var(--dc-primary);
309
309
  }
310
310
 
@@ -320,7 +320,7 @@
320
320
  transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1);
321
321
  }
322
322
 
323
- :global(.dc-toggle-switch.active::after) {
323
+ .dc-toggle-switch.active::after {
324
324
  left: 26px;
325
325
  }
326
326
 
@@ -346,7 +346,7 @@
346
346
  border-style: solid;
347
347
  background: rgba(99, 102, 241, 0.05);
348
348
  }
349
- :global(.theme-dark) .dc-advanced-trigger {
349
+ .theme-dark .dc-advanced-trigger {
350
350
  background: rgba(255, 255, 255, 0.05);
351
351
  border-color: rgba(99, 102, 241, 0.3);
352
352
  color: var(--dc-primary-light);
@@ -359,7 +359,7 @@
359
359
  transition: transform 0.2s;
360
360
  }
361
361
 
362
- :global(.dc-chevron.rotate) {
362
+ .dc-chevron.rotate {
363
363
  transform: rotate(180deg);
364
364
  }
365
365
 
@@ -369,7 +369,7 @@
369
369
  transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
370
370
  margin-top: 0;
371
371
  }
372
- :global(.dc-advanced-body.visible) {
372
+ .dc-advanced-body.visible {
373
373
  max-height: 500px;
374
374
  margin-top: 1rem;
375
375
  }
@@ -395,7 +395,7 @@
395
395
  border-color: var(--dc-primary);
396
396
  }
397
397
 
398
- :global(.theme-dark) .dc-input {
398
+ .theme-dark .dc-input {
399
399
  background: rgba(0, 0, 0, 0.25);
400
400
  border-color: rgba(255, 255, 255, 0.1);
401
401
  color: #f9fafb;
@@ -416,7 +416,7 @@
416
416
  color: var(--dc-primary);
417
417
  }
418
418
 
419
- :global(.theme-dark) .dc-hero-label {
419
+ .theme-dark .dc-hero-label {
420
420
  color: var(--dc-primary-light);
421
421
  }
422
422
 
@@ -427,11 +427,11 @@
427
427
  line-height: 1;
428
428
  margin: 1rem 0;
429
429
  }
430
- :global(.dc-rpm-number.limited) { color: var(--dc-danger); }
431
- :global(.dc-rpm-number.slow) { color: var(--dc-accent); }
432
- :global(.dc-rpm-number.optimal) { color: var(--dc-success); }
433
- :global(.theme-dark .dc-rpm-number) { color: var(--dc-primary-light); }
434
- :global(.theme-dark .dc-rpm-number.slow) { color: var(--dc-accent-light); }
430
+ .dc-rpm-number.limited { color: var(--dc-danger); }
431
+ .dc-rpm-number.slow { color: var(--dc-accent); }
432
+ .dc-rpm-number.optimal { color: var(--dc-success); }
433
+ .theme-dark .dc-rpm-number { color: var(--dc-primary-light); }
434
+ .theme-dark .dc-rpm-number.slow { color: var(--dc-accent-light); }
435
435
 
436
436
  .dc-hero-unit {
437
437
  font-size: 0.85rem;
@@ -472,7 +472,7 @@
472
472
  gap: 0.5rem;
473
473
  }
474
474
 
475
- :global(.dc-badge) {
475
+ .dc-badge {
476
476
  display: inline-flex;
477
477
  align-items: center;
478
478
  gap: 0.5rem;
@@ -482,25 +482,25 @@
482
482
  font-weight: 700;
483
483
  }
484
484
 
485
- :global(.dc-badge-warning) {
485
+ .dc-badge-warning {
486
486
  background: rgba(99, 102, 241, 0.15);
487
487
  color: var(--dc-primary);
488
488
  }
489
489
 
490
- :global(.theme-dark .dc-badge-warning) {
490
+ .theme-dark .dc-badge-warning {
491
491
  background: rgba(99, 102, 241, 0.25);
492
492
  }
493
493
 
494
- :global(.dc-badge-alert) {
494
+ .dc-badge-alert {
495
495
  background: rgba(239, 68, 68, 0.15);
496
496
  color: var(--dc-danger);
497
497
  }
498
498
 
499
- :global(.theme-dark .dc-badge-alert) {
499
+ .theme-dark .dc-badge-alert {
500
500
  background: rgba(239, 68, 68, 0.25);
501
501
  }
502
502
 
503
- :global(.dc-badge-icon) {
503
+ .dc-badge-icon {
504
504
  width: 16px;
505
505
  height: 16px;
506
506
  display: flex;
@@ -510,14 +510,14 @@
510
510
  color: inherit;
511
511
  }
512
512
 
513
- :global(.dc-badge-icon svg) {
513
+ .dc-badge-icon svg {
514
514
  width: 100%;
515
515
  height: 100%;
516
516
  stroke: currentcolor;
517
517
  fill: currentcolor;
518
518
  }
519
519
 
520
- :global(.dc-badge-icon path) {
520
+ .dc-badge-icon path {
521
521
  stroke: currentcolor;
522
522
  fill: currentcolor;
523
523
  }
@@ -545,7 +545,7 @@
545
545
  border-color: var(--dc-border);
546
546
  }
547
547
 
548
- :global(.theme-dark) .dc-tile {
548
+ .theme-dark .dc-tile {
549
549
  background: rgba(255, 255, 255, 0.04);
550
550
  border-color: rgba(255, 255, 255, 0.06);
551
551
  }
@@ -561,7 +561,7 @@
561
561
  font-size: 2rem;
562
562
  }
563
563
 
564
- :global(.theme-dark) .dc-tile-icon {
564
+ .theme-dark .dc-tile-icon {
565
565
  color: var(--dc-primary-light);
566
566
  }
567
567
 
@@ -579,7 +579,7 @@
579
579
  letter-spacing: 0.05em;
580
580
  }
581
581
 
582
- :global(.theme-dark) .dc-tile-label {
582
+ .theme-dark .dc-tile-label {
583
583
  color: #9ca3af;
584
584
  }
585
585
 
@@ -589,7 +589,7 @@
589
589
  color: var(--dc-primary);
590
590
  }
591
591
 
592
- :global(.theme-dark) .dc-tile-value {
592
+ .theme-dark .dc-tile-value {
593
593
  color: var(--dc-primary-light);
594
594
  }
595
595
 
@@ -603,7 +603,7 @@
603
603
  gap: 1rem;
604
604
  }
605
605
 
606
- :global(.theme-dark) .dc-machine-card {
606
+ .theme-dark .dc-machine-card {
607
607
  background: rgba(255, 255, 255, 0.03);
608
608
  border-color: rgba(255, 255, 255, 0.06);
609
609
  }
@@ -627,7 +627,7 @@
627
627
  cursor: pointer;
628
628
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
629
629
  }
630
- :global(.dc-preset-btn:last-child) {
630
+ .dc-preset-btn:last-child {
631
631
  border-right: none;
632
632
  }
633
633
 
@@ -635,12 +635,12 @@
635
635
  background: rgba(99, 102, 241, 0.05);
636
636
  }
637
637
 
638
- :global(.dc-preset-btn.active) {
638
+ .dc-preset-btn.active {
639
639
  background: var(--dc-primary);
640
640
  color: white;
641
641
  }
642
642
 
643
- :global(.theme-dark) .dc-preset-btn {
643
+ .theme-dark .dc-preset-btn {
644
644
  background: rgba(255, 255, 255, 0.05);
645
645
  border-right-color: rgba(255, 255, 255, 0.1);
646
646
  color: #e5e7eb;
@@ -671,7 +671,7 @@
671
671
  background: rgba(99, 102, 241, 0.02);
672
672
  }
673
673
 
674
- :global(.theme-dark) .dc-manual-input .dc-input {
674
+ .theme-dark .dc-manual-input .dc-input {
675
675
  background: rgba(255, 255, 255, 0.08);
676
676
  color: #f9fafb;
677
677
  border-color: rgba(255, 255, 255, 0.1);
@@ -693,13 +693,13 @@
693
693
  background: var(--dc-primary-dark);
694
694
  }
695
695
 
696
- :global(.dc-chips-area) {
696
+ .dc-chips-area {
697
697
  display: flex;
698
698
  flex-wrap: wrap;
699
699
  gap: 0.5rem;
700
700
  min-height: 0;
701
701
  }
702
- :global(.dc-chip) {
702
+ .dc-chip {
703
703
  display: inline-flex;
704
704
  align-items: center;
705
705
  gap: 0.5rem;
@@ -710,11 +710,11 @@
710
710
  font-size: 0.75rem;
711
711
  font-weight: 700;
712
712
  }
713
- :global(.theme-dark .dc-chip) {
713
+ .theme-dark .dc-chip {
714
714
  background: rgba(99, 102, 241, 0.15);
715
715
  color: var(--dc-primary-light);
716
716
  }
717
- :global(.dc-chip button) {
717
+ .dc-chip button {
718
718
  background: none;
719
719
  border: none;
720
720
  color: inherit;
@@ -728,9 +728,9 @@
728
728
  justify-content: center;
729
729
  transition: color 0.2s;
730
730
  }
731
- :global(.dc-chip button:hover) { color: var(--dc-danger); }
731
+ .dc-chip button:hover { color: var(--dc-danger); }
732
732
 
733
- :global(.dc-match-box) {
733
+ .dc-match-box {
734
734
  background: rgba(99, 102, 241, 0.08);
735
735
  border: 1px solid rgba(99, 102, 241, 0.2);
736
736
  border-radius: 12px;
@@ -749,7 +749,7 @@
749
749
  transform: translateY(0);
750
750
  }
751
751
  }
752
- :global(.dc-match-header) {
752
+ .dc-match-header {
753
753
  font-size: 0.75rem;
754
754
  font-weight: 800;
755
755
  text-transform: uppercase;
@@ -758,21 +758,21 @@
758
758
  letter-spacing: 0.05em;
759
759
  }
760
760
 
761
- :global(.theme-dark .dc-match-header) {
761
+ .theme-dark .dc-match-header {
762
762
  color: var(--dc-primary-light);
763
763
  }
764
764
 
765
- :global(.dc-match-value) {
765
+ .dc-match-value {
766
766
  font-size: 1.5rem;
767
767
  font-weight: 900;
768
768
  color: var(--dc-primary);
769
769
  }
770
770
 
771
- :global(.theme-dark .dc-match-value) {
771
+ .theme-dark .dc-match-value {
772
772
  color: var(--dc-primary-light);
773
773
  }
774
774
 
775
- :global(.dc-match-hint) {
775
+ .dc-match-hint {
776
776
  font-size: 0.65rem;
777
777
  color: #6b7280;
778
778
  margin: 0.6rem 0 0;
@@ -808,6 +808,6 @@
808
808
  }
809
809
  }
810
810
 
811
- :global(.hidden) {
811
+ .hidden {
812
812
  display: none;
813
813
  }
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { DrillCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'drehzahlrechner-bohren-fraesen';
6
7
  const title = 'Drehzahlrechner Bohren und Fräsen';
@@ -76,11 +77,7 @@ export const content: ToolLocaleContent<DrillCalculatorUI> = {
76
77
  description,
77
78
  faqTitle: 'Häufig gestellte Fragen',
78
79
  faq: faqData,
79
- bibliographyTitle: 'Technische Referenzen',
80
- bibliography: [
81
- { name: 'Sandvik Coromant: Formeln für Schnittgeschwindigkeit und Vorschub', url: 'https://www.sandvik.coromant.com/de-de/knowledge/machining-formulas-definitions/general-turning-formulas-definitions' },
82
- { name: 'Tabellenbuch Metall', url: 'https://www.europa-lehrmittel.de/' },
83
- ],
80
+ bibliography,
84
81
  howTo: howToData,
85
82
  schemas: [faqSchema, howToSchema, appSchema],
86
83
  seo: [
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { DrillCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'drill-rpm-calculator';
6
7
  const title = 'Drill and Machining RPM Calculator';
@@ -76,11 +77,7 @@ export const content: ToolLocaleContent<DrillCalculatorUI> = {
76
77
  description,
77
78
  faqTitle: 'Frequently Asked Questions',
78
79
  faq: faqData,
79
- bibliographyTitle: 'Technical References',
80
- bibliography: [
81
- { name: 'Sandvik Coromant: Cutting Speed and Feed Rate Formulae', url: 'https://www.sandvik.coromant.com/en-gb/knowledge/machining-formulas-definitions/general-turning-formulas-definitions' },
82
- { name: 'Machine Calculations and Workshop Tables — Machinery Handbook', url: 'https://www.google.com/search?q=machinery+handbook+cutting+speeds' },
83
- ],
80
+ bibliography,
84
81
  howTo: howToData,
85
82
  schemas: [faqSchema, howToSchema, appSchema],
86
83
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { DrillCalculatorUI } from '../ui';
@@ -76,11 +77,7 @@ export const content: ToolLocaleContent<DrillCalculatorUI> = {
76
77
  description,
77
78
  faqTitle: 'Preguntas Frecuentes',
78
79
  faq: faqData,
79
- bibliographyTitle: 'Referencias Técnicas',
80
- bibliography: [
81
- { name: 'Sandvik Coromant: Cutting Speed and Feed Rate Formulae', url: 'https://www.sandvik.coromant.com/en-gb/knowledge/machining-formulas-definitions/general-turning-formulas-definitions' },
82
- { name: 'Máquinas. Cálculos de taller — A.L. Casillas', url: 'https://www.google.com/search?q=Casillas+Maquinas+Calculos+de+taller' },
83
- ],
80
+ bibliography,
84
81
  howTo: howToData,
85
82
  schemas: [faqSchema, howToSchema, appSchema],
86
83
  seo: [
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { DrillCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'calculateur-tours-taraudage';
6
7
  const title = 'Calculateur RPM Perçage et Fraisage';
@@ -76,11 +77,7 @@ export const content: ToolLocaleContent<DrillCalculatorUI> = {
76
77
  description,
77
78
  faqTitle: 'Questions Fréquentes',
78
79
  faq: faqData,
79
- bibliographyTitle: 'Références Techniques',
80
- bibliography: [
81
- { name: 'Sandvik Coromant: Formules de Vitesse de Coupe et d\'Avance', url: 'https://www.sandvik.coromant.com/en-gb/knowledge/machining-formulas-definitions/general-turning-formulas-definitions' },
82
- { name: 'Calculs d\'usinage et Tables de l\'Atelier — Manuel du Technicien', url: 'https://www.google.com/search?q=calculs+usinage+vitesses+coupe' },
83
- ],
80
+ bibliography,
84
81
  howTo: howToData,
85
82
  schemas: [faqSchema, howToSchema, appSchema],
86
83
  seo: [
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { DrillCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'kalkulator-kecepatan-bor-frais';
6
7
  const title = 'Kalkulator RPM Pemesinan dan Bor';
@@ -76,11 +77,7 @@ export const content: ToolLocaleContent<DrillCalculatorUI> = {
76
77
  description,
77
78
  faqTitle: 'Pertanyaan Umum',
78
79
  faq: faqData,
79
- bibliographyTitle: 'Referensi Teknis',
80
- bibliography: [
81
- { name: 'Sandvik Coromant: Cutting Speed and Feed Rate Formulae', url: 'https://www.sandvik.coromant.com/en-gb/knowledge/machining-formulas-definitions/general-turning-formulas-definitions' },
82
- { name: 'Mesin. Perhitungan Bengkel — A.L. Casillas', url: 'https://www.google.com/search?q=Casillas+Maquinas+Calculos+de+taller' },
83
- ],
80
+ bibliography,
84
81
  howTo: howToData,
85
82
  schemas: [faqSchema, howToSchema, appSchema],
86
83
  seo: [
@@ -1,6 +1,7 @@
1
1
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { DrillCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
4
5
 
5
6
  const slug = 'calcolatore-giri-trapano-fresa';
6
7
  const title = 'Calcolatore RPM Lavorazione e Perforazione';
@@ -76,11 +77,7 @@ export const content: ToolLocaleContent<DrillCalculatorUI> = {
76
77
  description,
77
78
  faqTitle: 'Domande Frequenti',
78
79
  faq: faqData,
79
- bibliographyTitle: 'Riferimenti Tecnici',
80
- bibliography: [
81
- { name: 'Sandvik Coromant: Cutting Speed and Feed Rate Formulae', url: 'https://www.sandvik.coromant.com/en-gb/knowledge/machining-formulas-definitions/general-turning-formulas-definitions' },
82
- { name: 'Macchine. Calcoli d\'officina — A.L. Casillas', url: 'https://www.google.com/search?q=Casillas+Maquinas+Calculos+de+taller' },
83
- ],
80
+ bibliography,
84
81
  howTo: howToData,
85
82
  schemas: [faqSchema, howToSchema, appSchema],
86
83
  seo: [