@jjlmoya/utils-textiles 1.13.0 → 1.14.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 (234) hide show
  1. package/package.json +1 -1
  2. package/src/pages/[locale]/[slug].astro +30 -14
  3. package/src/tests/locale_completeness.test.ts +0 -33
  4. package/src/tests/shared-test-helpers.ts +56 -0
  5. package/src/tests/tool_exports.test.ts +34 -0
  6. package/src/tool/burnTest/bibliography.astro +2 -10
  7. package/src/tool/burnTest/bibliography.ts +16 -0
  8. package/src/tool/burnTest/i18n/de.ts +2 -16
  9. package/src/tool/burnTest/i18n/en.ts +2 -16
  10. package/src/tool/burnTest/i18n/es.ts +2 -16
  11. package/src/tool/burnTest/i18n/fr.ts +2 -16
  12. package/src/tool/burnTest/i18n/id.ts +2 -16
  13. package/src/tool/burnTest/i18n/it.ts +2 -16
  14. package/src/tool/burnTest/i18n/ja.ts +2 -16
  15. package/src/tool/burnTest/i18n/ko.ts +2 -16
  16. package/src/tool/burnTest/i18n/nl.ts +2 -16
  17. package/src/tool/burnTest/i18n/pl.ts +2 -16
  18. package/src/tool/burnTest/i18n/pt.ts +2 -16
  19. package/src/tool/burnTest/i18n/ru.ts +2 -16
  20. package/src/tool/burnTest/i18n/sv.ts +2 -16
  21. package/src/tool/burnTest/i18n/tr.ts +2 -16
  22. package/src/tool/burnTest/i18n/zh.ts +2 -16
  23. package/src/tool/burnTest/index.ts +1 -0
  24. package/src/tool/burnTest/seo.astro +2 -27
  25. package/src/tool/clothingSizeConverter/bibliography.astro +2 -10
  26. package/src/tool/clothingSizeConverter/bibliography.ts +10 -0
  27. package/src/tool/clothingSizeConverter/i18n/de.ts +2 -10
  28. package/src/tool/clothingSizeConverter/i18n/en.ts +2 -10
  29. package/src/tool/clothingSizeConverter/i18n/es.ts +2 -10
  30. package/src/tool/clothingSizeConverter/i18n/fr.ts +2 -10
  31. package/src/tool/clothingSizeConverter/i18n/id.ts +2 -10
  32. package/src/tool/clothingSizeConverter/i18n/it.ts +2 -10
  33. package/src/tool/clothingSizeConverter/i18n/ja.ts +2 -10
  34. package/src/tool/clothingSizeConverter/i18n/ko.ts +2 -10
  35. package/src/tool/clothingSizeConverter/i18n/nl.ts +2 -10
  36. package/src/tool/clothingSizeConverter/i18n/pl.ts +2 -10
  37. package/src/tool/clothingSizeConverter/i18n/pt.ts +2 -10
  38. package/src/tool/clothingSizeConverter/i18n/ru.ts +2 -10
  39. package/src/tool/clothingSizeConverter/i18n/sv.ts +2 -10
  40. package/src/tool/clothingSizeConverter/i18n/tr.ts +2 -10
  41. package/src/tool/clothingSizeConverter/i18n/zh.ts +2 -10
  42. package/src/tool/clothingSizeConverter/index.ts +1 -0
  43. package/src/tool/clothingSizeConverter/seo.astro +2 -27
  44. package/src/tool/fabricProjectCalculator/bibliography.astro +2 -10
  45. package/src/tool/fabricProjectCalculator/bibliography.ts +16 -0
  46. package/src/tool/fabricProjectCalculator/i18n/de.ts +2 -16
  47. package/src/tool/fabricProjectCalculator/i18n/en.ts +2 -16
  48. package/src/tool/fabricProjectCalculator/i18n/es.ts +2 -16
  49. package/src/tool/fabricProjectCalculator/i18n/fr.ts +2 -16
  50. package/src/tool/fabricProjectCalculator/i18n/id.ts +2 -16
  51. package/src/tool/fabricProjectCalculator/i18n/it.ts +2 -16
  52. package/src/tool/fabricProjectCalculator/i18n/ja.ts +2 -16
  53. package/src/tool/fabricProjectCalculator/i18n/ko.ts +2 -16
  54. package/src/tool/fabricProjectCalculator/i18n/nl.ts +2 -16
  55. package/src/tool/fabricProjectCalculator/i18n/pl.ts +2 -16
  56. package/src/tool/fabricProjectCalculator/i18n/pt.ts +2 -16
  57. package/src/tool/fabricProjectCalculator/i18n/ru.ts +2 -16
  58. package/src/tool/fabricProjectCalculator/i18n/sv.ts +2 -16
  59. package/src/tool/fabricProjectCalculator/i18n/tr.ts +2 -16
  60. package/src/tool/fabricProjectCalculator/i18n/zh.ts +2 -16
  61. package/src/tool/fabricProjectCalculator/index.ts +1 -0
  62. package/src/tool/fabricProjectCalculator/seo.astro +2 -27
  63. package/src/tool/fabricTruth/bibliography.astro +2 -10
  64. package/src/tool/fabricTruth/bibliography.ts +16 -0
  65. package/src/tool/fabricTruth/i18n/de.ts +2 -16
  66. package/src/tool/fabricTruth/i18n/en.ts +2 -16
  67. package/src/tool/fabricTruth/i18n/es.ts +2 -16
  68. package/src/tool/fabricTruth/i18n/fr.ts +2 -16
  69. package/src/tool/fabricTruth/i18n/id.ts +2 -16
  70. package/src/tool/fabricTruth/i18n/it.ts +2 -16
  71. package/src/tool/fabricTruth/i18n/ja.ts +2 -16
  72. package/src/tool/fabricTruth/i18n/ko.ts +2 -16
  73. package/src/tool/fabricTruth/i18n/nl.ts +2 -16
  74. package/src/tool/fabricTruth/i18n/pl.ts +2 -16
  75. package/src/tool/fabricTruth/i18n/pt.ts +2 -16
  76. package/src/tool/fabricTruth/i18n/ru.ts +2 -16
  77. package/src/tool/fabricTruth/i18n/sv.ts +2 -16
  78. package/src/tool/fabricTruth/i18n/tr.ts +2 -16
  79. package/src/tool/fabricTruth/i18n/zh.ts +2 -16
  80. package/src/tool/fabricTruth/index.ts +1 -0
  81. package/src/tool/fabricTruth/seo.astro +2 -27
  82. package/src/tool/fiberPrep/bibliography.astro +2 -10
  83. package/src/tool/fiberPrep/bibliography.ts +12 -0
  84. package/src/tool/fiberPrep/i18n/de.ts +2 -12
  85. package/src/tool/fiberPrep/i18n/en.ts +2 -12
  86. package/src/tool/fiberPrep/i18n/es.ts +2 -12
  87. package/src/tool/fiberPrep/i18n/fr.ts +2 -12
  88. package/src/tool/fiberPrep/i18n/id.ts +2 -12
  89. package/src/tool/fiberPrep/i18n/it.ts +2 -12
  90. package/src/tool/fiberPrep/i18n/ja.ts +2 -12
  91. package/src/tool/fiberPrep/i18n/ko.ts +2 -12
  92. package/src/tool/fiberPrep/i18n/nl.ts +2 -12
  93. package/src/tool/fiberPrep/i18n/pl.ts +2 -12
  94. package/src/tool/fiberPrep/i18n/pt.ts +2 -12
  95. package/src/tool/fiberPrep/i18n/ru.ts +2 -12
  96. package/src/tool/fiberPrep/i18n/sv.ts +2 -12
  97. package/src/tool/fiberPrep/i18n/tr.ts +2 -12
  98. package/src/tool/fiberPrep/i18n/zh.ts +2 -12
  99. package/src/tool/fiberPrep/index.ts +1 -0
  100. package/src/tool/fiberPrep/seo.astro +2 -27
  101. package/src/tool/knittingGauge/bibliography.astro +2 -10
  102. package/src/tool/knittingGauge/bibliography.ts +12 -0
  103. package/src/tool/knittingGauge/i18n/de.ts +2 -12
  104. package/src/tool/knittingGauge/i18n/en.ts +2 -12
  105. package/src/tool/knittingGauge/i18n/es.ts +2 -12
  106. package/src/tool/knittingGauge/i18n/fr.ts +2 -12
  107. package/src/tool/knittingGauge/i18n/id.ts +2 -12
  108. package/src/tool/knittingGauge/i18n/it.ts +2 -12
  109. package/src/tool/knittingGauge/i18n/ja.ts +2 -12
  110. package/src/tool/knittingGauge/i18n/ko.ts +2 -12
  111. package/src/tool/knittingGauge/i18n/nl.ts +2 -12
  112. package/src/tool/knittingGauge/i18n/pl.ts +2 -12
  113. package/src/tool/knittingGauge/i18n/pt.ts +2 -12
  114. package/src/tool/knittingGauge/i18n/ru.ts +2 -12
  115. package/src/tool/knittingGauge/i18n/sv.ts +2 -12
  116. package/src/tool/knittingGauge/i18n/tr.ts +2 -12
  117. package/src/tool/knittingGauge/i18n/zh.ts +2 -12
  118. package/src/tool/knittingGauge/index.ts +1 -0
  119. package/src/tool/knittingGauge/seo.astro +2 -27
  120. package/src/tool/laundryGuide/bibliography.astro +2 -10
  121. package/src/tool/laundryGuide/bibliography.ts +6 -0
  122. package/src/tool/laundryGuide/i18n/de.ts +2 -6
  123. package/src/tool/laundryGuide/i18n/en.ts +2 -6
  124. package/src/tool/laundryGuide/i18n/es.ts +2 -6
  125. package/src/tool/laundryGuide/i18n/fr.ts +2 -6
  126. package/src/tool/laundryGuide/i18n/id.ts +2 -6
  127. package/src/tool/laundryGuide/i18n/it.ts +2 -6
  128. package/src/tool/laundryGuide/i18n/ja.ts +2 -6
  129. package/src/tool/laundryGuide/i18n/ko.ts +2 -6
  130. package/src/tool/laundryGuide/i18n/nl.ts +2 -6
  131. package/src/tool/laundryGuide/i18n/pl.ts +2 -6
  132. package/src/tool/laundryGuide/i18n/pt.ts +2 -6
  133. package/src/tool/laundryGuide/i18n/ru.ts +2 -6
  134. package/src/tool/laundryGuide/i18n/sv.ts +2 -6
  135. package/src/tool/laundryGuide/i18n/tr.ts +2 -6
  136. package/src/tool/laundryGuide/i18n/zh.ts +2 -6
  137. package/src/tool/laundryGuide/index.ts +1 -0
  138. package/src/tool/laundryGuide/seo.astro +2 -27
  139. package/src/tool/needleConverter/bibliography.astro +2 -10
  140. package/src/tool/needleConverter/bibliography.ts +12 -0
  141. package/src/tool/needleConverter/i18n/de.ts +2 -12
  142. package/src/tool/needleConverter/i18n/en.ts +2 -12
  143. package/src/tool/needleConverter/i18n/es.ts +2 -12
  144. package/src/tool/needleConverter/i18n/fr.ts +2 -12
  145. package/src/tool/needleConverter/i18n/id.ts +2 -12
  146. package/src/tool/needleConverter/i18n/it.ts +2 -12
  147. package/src/tool/needleConverter/i18n/ja.ts +2 -12
  148. package/src/tool/needleConverter/i18n/ko.ts +2 -12
  149. package/src/tool/needleConverter/i18n/nl.ts +2 -12
  150. package/src/tool/needleConverter/i18n/pl.ts +2 -12
  151. package/src/tool/needleConverter/i18n/pt.ts +2 -12
  152. package/src/tool/needleConverter/i18n/ru.ts +2 -12
  153. package/src/tool/needleConverter/i18n/sv.ts +2 -12
  154. package/src/tool/needleConverter/i18n/tr.ts +2 -12
  155. package/src/tool/needleConverter/i18n/zh.ts +2 -12
  156. package/src/tool/needleConverter/index.ts +1 -0
  157. package/src/tool/needleConverter/seo.astro +1 -1
  158. package/src/tool/sewingPatternScaler/bibliography.astro +2 -10
  159. package/src/tool/sewingPatternScaler/bibliography.ts +12 -0
  160. package/src/tool/sewingPatternScaler/i18n/de.ts +2 -12
  161. package/src/tool/sewingPatternScaler/i18n/en.ts +2 -12
  162. package/src/tool/sewingPatternScaler/i18n/es.ts +2 -12
  163. package/src/tool/sewingPatternScaler/i18n/fr.ts +2 -12
  164. package/src/tool/sewingPatternScaler/i18n/id.ts +2 -12
  165. package/src/tool/sewingPatternScaler/i18n/it.ts +2 -12
  166. package/src/tool/sewingPatternScaler/i18n/ja.ts +2 -12
  167. package/src/tool/sewingPatternScaler/i18n/ko.ts +2 -12
  168. package/src/tool/sewingPatternScaler/i18n/nl.ts +2 -12
  169. package/src/tool/sewingPatternScaler/i18n/pl.ts +2 -12
  170. package/src/tool/sewingPatternScaler/i18n/pt.ts +2 -12
  171. package/src/tool/sewingPatternScaler/i18n/ru.ts +2 -12
  172. package/src/tool/sewingPatternScaler/i18n/sv.ts +2 -12
  173. package/src/tool/sewingPatternScaler/i18n/tr.ts +2 -12
  174. package/src/tool/sewingPatternScaler/i18n/zh.ts +2 -12
  175. package/src/tool/sewingPatternScaler/index.ts +1 -0
  176. package/src/tool/sewingPatternScaler/seo.astro +2 -36
  177. package/src/tool/shoeSizeConverter/bibliography.astro +2 -10
  178. package/src/tool/shoeSizeConverter/bibliography.ts +7 -0
  179. package/src/tool/shoeSizeConverter/i18n/de.ts +2 -7
  180. package/src/tool/shoeSizeConverter/i18n/en.ts +2 -7
  181. package/src/tool/shoeSizeConverter/i18n/es.ts +2 -7
  182. package/src/tool/shoeSizeConverter/i18n/fr.ts +2 -7
  183. package/src/tool/shoeSizeConverter/i18n/id.ts +2 -7
  184. package/src/tool/shoeSizeConverter/i18n/it.ts +2 -7
  185. package/src/tool/shoeSizeConverter/i18n/ja.ts +2 -7
  186. package/src/tool/shoeSizeConverter/i18n/ko.ts +2 -7
  187. package/src/tool/shoeSizeConverter/i18n/nl.ts +2 -7
  188. package/src/tool/shoeSizeConverter/i18n/pl.ts +2 -7
  189. package/src/tool/shoeSizeConverter/i18n/pt.ts +2 -7
  190. package/src/tool/shoeSizeConverter/i18n/ru.ts +2 -7
  191. package/src/tool/shoeSizeConverter/i18n/sv.ts +2 -7
  192. package/src/tool/shoeSizeConverter/i18n/tr.ts +2 -7
  193. package/src/tool/shoeSizeConverter/i18n/zh.ts +2 -7
  194. package/src/tool/shoeSizeConverter/index.ts +1 -0
  195. package/src/tool/shoeSizeConverter/seo.astro +2 -27
  196. package/src/tool/stainChemistry/bibliography.astro +2 -10
  197. package/src/tool/stainChemistry/bibliography.ts +16 -0
  198. package/src/tool/stainChemistry/i18n/de.ts +2 -16
  199. package/src/tool/stainChemistry/i18n/en.ts +2 -16
  200. package/src/tool/stainChemistry/i18n/es.ts +2 -16
  201. package/src/tool/stainChemistry/i18n/fr.ts +2 -16
  202. package/src/tool/stainChemistry/i18n/id.ts +2 -16
  203. package/src/tool/stainChemistry/i18n/it.ts +2 -16
  204. package/src/tool/stainChemistry/i18n/ja.ts +2 -16
  205. package/src/tool/stainChemistry/i18n/ko.ts +2 -16
  206. package/src/tool/stainChemistry/i18n/nl.ts +2 -16
  207. package/src/tool/stainChemistry/i18n/pl.ts +2 -16
  208. package/src/tool/stainChemistry/i18n/pt.ts +2 -16
  209. package/src/tool/stainChemistry/i18n/ru.ts +2 -16
  210. package/src/tool/stainChemistry/i18n/sv.ts +2 -16
  211. package/src/tool/stainChemistry/i18n/tr.ts +2 -16
  212. package/src/tool/stainChemistry/i18n/zh.ts +2 -16
  213. package/src/tool/stainChemistry/index.ts +1 -0
  214. package/src/tool/stainChemistry/seo.astro +2 -27
  215. package/src/tool/yarnCalculator/bibliography.astro +2 -10
  216. package/src/tool/yarnCalculator/bibliography.ts +16 -0
  217. package/src/tool/yarnCalculator/i18n/de.ts +2 -16
  218. package/src/tool/yarnCalculator/i18n/en.ts +2 -16
  219. package/src/tool/yarnCalculator/i18n/es.ts +2 -16
  220. package/src/tool/yarnCalculator/i18n/fr.ts +2 -16
  221. package/src/tool/yarnCalculator/i18n/id.ts +2 -16
  222. package/src/tool/yarnCalculator/i18n/it.ts +2 -16
  223. package/src/tool/yarnCalculator/i18n/ja.ts +2 -16
  224. package/src/tool/yarnCalculator/i18n/ko.ts +2 -16
  225. package/src/tool/yarnCalculator/i18n/nl.ts +2 -16
  226. package/src/tool/yarnCalculator/i18n/pl.ts +2 -16
  227. package/src/tool/yarnCalculator/i18n/pt.ts +2 -16
  228. package/src/tool/yarnCalculator/i18n/ru.ts +2 -16
  229. package/src/tool/yarnCalculator/i18n/sv.ts +2 -16
  230. package/src/tool/yarnCalculator/i18n/tr.ts +2 -16
  231. package/src/tool/yarnCalculator/i18n/zh.ts +2 -16
  232. package/src/tool/yarnCalculator/index.ts +1 -0
  233. package/src/tool/yarnCalculator/seo.astro +2 -1
  234. package/src/types.ts +2 -4
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
  import type { KnittingGaugeUI } from '../ui';
4
5
 
5
6
  const slug = 'calculadora-gauge-tensao-tricot';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<KnittingGaugeUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Perguntas Frequentes',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliografia',
92
- bibliography: [
93
- {
94
- name: 'The Importance of Gauge - Tin Can Knits',
95
- url: 'https://blog.tincanknits.com/2013/08/17/gauge/',
96
- },
97
- {
98
- name: 'Knitting Gauge: How to Measure Stitches and Rows',
99
- url: 'https://elizabethsmithknits.com/2020/10/30/how-to-measure-your-gauge-swatch/',
100
- },
101
- ],
91
+ bibliography: bibliography,
102
92
  howTo: howToData,
103
93
  schemas: [faqSchema, howToSchema, appSchema],
104
94
  seo: [
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
  import type { KnittingGaugeUI } from '../ui';
4
5
 
5
6
  const slug = 'kalkulyator-plotnosti-vyazaniya-gauge';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<KnittingGaugeUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Часто задаваемые вопросы',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Библиография',
92
- bibliography: [
93
- {
94
- name: 'The Importance of Gauge - Tin Can Knits',
95
- url: 'https://blog.tincanknits.com/2013/08/17/gauge/',
96
- },
97
- {
98
- name: 'Knitting Gauge: How to Measure Stitches and Rows',
99
- url: 'https://elizabethsmithknits.com/2020/10/30/how-to-measure-your-gauge-swatch/',
100
- },
101
- ],
91
+ bibliography: bibliography,
102
92
  howTo: howToData,
103
93
  schemas: [faqSchema, howToSchema, appSchema],
104
94
  seo: [
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
  import type { KnittingGaugeUI } from '../ui';
4
5
 
5
6
  const slug = 'stickfasthet-gauge-kalkylator';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<KnittingGaugeUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Vanliga frågor',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliografi',
92
- bibliography: [
93
- {
94
- name: 'The Importance of Gauge - Tin Can Knits',
95
- url: 'https://blog.tincanknits.com/2013/08/17/gauge/',
96
- },
97
- {
98
- name: 'Knitting Gauge: How to Measure Stitches and Rows',
99
- url: 'https://elizabethsmithknits.com/2020/10/30/how-to-measure-your-gauge-swatch/',
100
- },
101
- ],
91
+ bibliography: bibliography,
102
92
  howTo: howToData,
103
93
  schemas: [faqSchema, howToSchema, appSchema],
104
94
  seo: [
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
  import type { KnittingGaugeUI } from '../ui';
4
5
 
5
6
  const slug = 'orgu-gauge-ilmek-gerginlik-hesaplayici';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<KnittingGaugeUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Sıkça Sorulan Sorular',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Kaynakça',
92
- bibliography: [
93
- {
94
- name: 'The Importance of Gauge - Tin Can Knits',
95
- url: 'https://blog.tincanknits.com/2013/08/17/gauge/',
96
- },
97
- {
98
- name: 'Knitting Gauge: How to Measure Stitches and Rows',
99
- url: 'https://elizabethsmithknits.com/2020/10/30/how-to-measure-your-gauge-swatch/',
100
- },
101
- ],
91
+ bibliography: bibliography,
102
92
  howTo: howToData,
103
93
  schemas: [faqSchema, howToSchema, appSchema],
104
94
  seo: [
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
  import type { KnittingGaugeUI } from '../ui';
4
5
 
5
6
  const slug = 'knitting-gauge-calculator';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<KnittingGaugeUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: '常见问题',
90
90
  faq: faqData,
91
- bibliographyTitle: '参考文献',
92
- bibliography: [
93
- {
94
- name: 'The Importance of Gauge - Tin Can Knits',
95
- url: 'https://blog.tincanknits.com/2013/08/17/gauge/',
96
- },
97
- {
98
- name: 'Knitting Gauge: How to Measure Stitches and Rows',
99
- url: 'https://elizabethsmithknits.com/2020/10/30/how-to-measure-your-gauge-swatch/',
100
- },
101
- ],
91
+ bibliography: bibliography,
102
92
  howTo: howToData,
103
93
  schemas: [faqSchema, howToSchema, appSchema],
104
94
  seo: [
@@ -1,3 +1,4 @@
1
+ import type { ToolDefinition } from '../../types';
1
2
  import { knittingGauge } from './entry';
2
3
  export * from './entry';
3
4
  export const KNITTING_GAUGE_TOOL: ToolDefinition = {
@@ -1,11 +1,5 @@
1
1
  ---
2
- import {
3
- SEOTitle,
4
- SEOCard,
5
- SEOTip,
6
- SEOList,
7
- SEOArticle
8
- } from '@jjlmoya/utils-shared';
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
9
3
  import { knittingGauge } from './index';
10
4
  import type { KnownLocale } from '../../types';
11
5
 
@@ -16,25 +10,6 @@ interface Props {
16
10
  const { locale = 'es' } = Astro.props;
17
11
  const content = await knittingGauge.i18n[locale]?.();
18
12
  if (!content) return null;
19
-
20
- const { seo } = content;
21
13
  ---
22
14
 
23
- <SEOArticle>
24
- {seo.map((section: any) => {
25
- switch (section.type) {
26
- case 'title':
27
- return <SEOTitle title={section.text} level={section.level || 2} />;
28
- case 'paragraph':
29
- return <p set:html={section.html} />;
30
- case 'list':
31
- return <SEOList items={section.items} />;
32
- case 'card':
33
- return <SEOCard title={section.title} icon={section.icon}><Fragment set:html={section.html} /></SEOCard>;
34
- case 'tip':
35
- return <SEOTip title={section.title}><Fragment set:html={section.html} /></SEOTip>;
36
- default:
37
- return null;
38
- }
39
- })}
40
- </SEOArticle>
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -1,14 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { laundryGuide } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const content = await laundryGuide.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,6 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ { name: 'ISO 3758 - Textile Care Symbols', url: 'https://www.iso.org/standard/60465.html' },
5
+ { name: 'FTC - Textile Care Labels', url: 'https://www.ftc.gov/' },
6
+ ];
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'textilpflege-leitfaden';
5
6
  const title = 'Textilpflege Leitfaden: So waschen Sie jeden Fasertyp';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Fett:</strong> Vor dem Waschen mit Trockenreiniger behandeln. Niemals heißes Wasser (fixiert den Fleck).', '<strong>Tinte/Kugelschreiber:</strong> Isopropylalkohol für Synthetik; kaltes Wasser für Naturfasern.', '<strong>Blut:</strong> IMMER kaltes Wasser. Hitze fixiert es dauerhaft.', '<strong>Wein/Getränke:</strong> Sofort kaltes Wasser, gefolgt von Salz zur Absorption.'] },
264
265
  { type: 'paragraph', html: '"Weniger kaufen, besser wählen und dafür sorgen, dass es hält." Ein gut gepflegtes Kleidungsstück kann Jahrzehnte halten. Ein schlecht behandeltes nur Monate.' },
265
266
  ],
266
- faqTitle: 'Häufig gestellte Fragen',
267
267
  faq: faqData,
268
- bibliographyTitle: 'Referenzen',
269
- bibliography: [
270
- { name: 'ISO 3758 - Textilpflege-Symbole', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'Leitfaden zur Textilkennzeichnung', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'laundry-guide';
5
6
  const title = 'Textile Care Guide: How to Wash Every Fabric Type';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Grease:</strong> Use dry soap before washing. Never hot water (sets the stain).', '<strong>Ink/Pen:</strong> Isopropyl alcohol for synthetics; cold water for naturals.', '<strong>Blood:</strong> Cold water ALWAYS. Heat sets it permanently.', '<strong>Wine/Drinks:</strong> Cold water immediately, followed by salt to absorb.'] },
264
265
  { type: 'paragraph', html: '"Buy less, choose better, and make it last." A well-cared-for garment can last decades. A neglected one, months.' },
265
266
  ],
266
- faqTitle: 'Frequently Asked Questions',
267
267
  faq: faqData,
268
- bibliographyTitle: 'References',
269
- bibliography: [
270
- { name: 'ISO 3758 - Textile Care Symbols', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'FTC - Textile Care Labels', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'guia-lavado-textil';
5
6
  const title = 'Guía de Cuidado Textil: Cómo Lavar Cada Tipo de Fibra';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Grasas:</strong> Usa jabón en seco antes de lavar. Nunca agua caliente (fija la mancha).', '<strong>Tinta/Bolígrafo:</strong> Alcohol isopropílico para sintéticos; agua fría para naturales.', '<strong>Sangre:</strong> Agua fría SIEMPRE. El calor lo fija permanentemente.', '<strong>Vino/Bebidas:</strong> Agua fría inmediatamente, seguida de sal para absorber.'] },
264
265
  { type: 'paragraph', html: '"Comprar menos, elegir mejor y hacerlo durar." Una prenda bien cuidada puede durar décadas. Una prenda maltratada, meses.' },
265
266
  ],
266
- faqTitle: 'Preguntas Frecuentes',
267
267
  faq: faqData,
268
- bibliographyTitle: 'Referencias',
269
- bibliography: [
270
- { name: 'ISO 3758 - Símbolos de Cuidado Textil', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'Guía de Etiquetado Textil', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'guide-lavage-textile';
5
6
  const title = 'Dimensionneur de Patron de Couture en Ligne';
@@ -279,13 +280,8 @@ export const content: ToolLocaleContent = {
279
280
  { type: 'list', items: ['<strong>Graisses :</strong> Utilisez du savon sec avant le lavage. Jamais d\'eau chaude (fixe la tache).', '<strong>Encre/Stylo :</strong> Alcool isopropylique pour les synthétiques ; eau froide pour les naturelles.', '<strong>Sang :</strong> Eau froide TOUJOURS. La chaleur la fixe définitivement.', '<strong>Vin/Boissons :</strong> Eau froide immédiatement, suivie de sel pour absorber.'] },
280
281
  { type: 'paragraph', html: '"Acheter moins, choisir mieux et le faire durer." Un vêtement bien entretenu peut durer des décennies. Un négligé, quelques mois.' },
281
282
  ],
282
- faqTitle: 'Questions Fréquentes',
283
283
  faq: faqData,
284
- bibliographyTitle: 'Bibliographie',
285
- bibliography: [
286
- { name: 'ISO 3758 - Symboles d\'Entretien Textile', url: 'https://www.iso.org/standard/60465.html' },
287
- { name: 'FTC - Guide d\'Étiquetage Textile', url: 'https://www.ftc.gov/' },
288
- ],
284
+ bibliography: bibliography,
289
285
  howTo: howToData,
290
286
  schemas: [faqSchema, howToSchema, appSchema],
291
287
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'panduan-mencuci-tekstil';
5
6
  const title = 'Panduan Perawatan Tekstil: Cara Mencuci Setiap Jenis Serat';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Lemak:</strong> Gunakan sabun kering (dry soap) sebelum cuci. Jangan gunakan air panas (akan memantapkan noda).', '<strong>Tinta/Pulpen:</strong> Alkohol isopropil untuk sintetis; air dingin untuk alami.', '<strong>Darah:</strong> SELALU air dingin. Panas akan memantapkannya secara permanen.', '<strong>Anggur/Minuman:</strong> Air dingin segera, diikuti garam untuk menyerap.'] },
264
265
  { type: 'paragraph', html: '"Beli lebih sedikit, pilih lebih baik, dan buatlah awet." Pakaian yang dirawat dengan baik bisa bertahan puluhan tahun. Pakaian yang disalahartikan, hanya bertahan berbulan-bulan.' },
265
266
  ],
266
- faqTitle: 'Pertanyaan yang Sering Diajukan',
267
267
  faq: faqData,
268
- bibliographyTitle: 'Referensi',
269
- bibliography: [
270
- { name: 'ISO 3758 - Simbol Perawatan Tekstil', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'Panduan Pelabelan Tekstil', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'guida-lavaggio-tessile';
5
6
  const title = 'Guida alla Cura Tessile: Come Lavare Ogni Tipo di Fibra';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Grassi:</strong> Usa sapone a secco prima del lavaggio. Mai acqua calda (fissa la macchia).', '<strong>Inchiostro/Penna:</strong> Alcol isopropilico per i sintetici; acqua fredda per i naturali.', '<strong>Sangue:</strong> Acqua fredda SEMPRE. Il calore fissa la macchia permanentemente.', '<strong>Vino/Bevande:</strong> Acqua fredda immediatamente, seguita da sale per assorbire.'] },
264
265
  { type: 'paragraph', html: '"Comprare meno, scegliere meglio e farlo durare." Un capo ben curato può durare decenni. Un capo maltrattato, mesi.' },
265
266
  ],
266
- faqTitle: 'Domande Frequenti',
267
267
  faq: faqData,
268
- bibliographyTitle: 'Riferimenti',
269
- bibliography: [
270
- { name: 'ISO 3758 - Simboli di Cura Tessile', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'Guida all\'Etichettatura Tessile', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'laundry-guide';
5
6
  const title = '繊維別お手入れガイド:素材に合わせた正しい洗濯方法';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>油汚れ:</strong> 洗濯前に中性洗剤(原液)をつけておきます。お湯は汚れを固めてしまうので厳禁です。', '<strong>インク・ボールペン:</strong> 合成繊維には無水エタノール、天然繊維には冷水。', '<strong>血液:</strong> 必ず冷水で。熱はタンパク質を固め、一生取れないシミにします。', '<strong>ワイン・飲料:</strong> すぐに冷水で洗い、塩で水分を吸い取らせます。'] },
264
265
  { type: 'paragraph', html: '「少なく買い、良いものを選び、長持ちさせる」。大切にお手入れされた服は何十年も着られます。不適切に扱われた服は、数ヶ月で寿命を迎えます。' },
265
266
  ],
266
- faqTitle: 'よくある質問',
267
267
  faq: faqData,
268
- bibliographyTitle: '参考文献',
269
- bibliography: [
270
- { name: 'ISO 3758 - テキスタイルケアシンボル', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: '衣類・繊維製品の表示ガイド', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'laundry-guide';
5
6
  const title = '섬유별 세탁 가이드: 소재별 올바른 세탁 및 관리 방법';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>기름기:</strong> 세탁 전 전처리 세제를 사용하세요. 절대 뜨거운 물을 쓰지 마세요(얼룩을 고착시킴).', '<strong>잉크/볼펜:</strong> 합성 섬유는 소독용 알코올, 천연 섬유는 찬물.', '<strong>혈액:</strong> 언제나 찬물. 열은 혈액을 영구적으로 고착시킵니다.', '<strong>와인/음료:</strong> 즉시 찬물로 씻어내고 소금을 뿌려 흡수시키세요.'] },
264
265
  { type: 'paragraph', html: '"적게 사고, 더 잘 고르고, 오래 입으세요." 잘 관리된 옷은 수십 년을 가지만, 잘못 다루면 몇 달 만에 사라집니다.' },
265
266
  ],
266
- faqTitle: '자주 묻는 질문',
267
267
  faq: faqData,
268
- bibliographyTitle: '참고 문헌',
269
- bibliography: [
270
- { name: 'ISO 3758 - 섬유 관리 기호', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: '의류 라벨 가이드', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'textielverzorgingsgids';
5
6
  const title = 'Gids voor Textielverzorging: Hoe elk type vezel te wassen';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Vetten:</strong> Gebruik droge zeep voor het wassen. Nooit heet water (zet de vlek vast).', '<strong>Inkt/Pen:</strong> Isopropylalcohol voor synthetische stoffen; koud water voor natuurlijke stoffen.', '<strong>Bloed:</strong> ALTIJD koud water. Hitte zet het permanent vast.', '<strong>Wijn/Dranken:</strong> Onmiddellijk koud water, gevolgd door zout om te absorberen.'] },
264
265
  { type: 'paragraph', html: '"Koop minder, kies beter en laat het lang meegaan." Een goed verzorgd kledingstuk kan decennia meegaan. Een slecht behandeld stuk, maanden.' },
265
266
  ],
266
- faqTitle: 'Veelgestelde Vragen',
267
267
  faq: faqData,
268
- bibliographyTitle: 'Verwijzingen',
269
- bibliography: [
270
- { name: 'ISO 3758 - Textielverzorgingssymbolen', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'Gids voor Textieletikettering', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'przewodnik-pielegnacji-tekstyliow';
5
6
  const title = 'Przewodnik po Pielęgnacji Tekstyliów: Jak Prać Każdy Rodzaj Włókna';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Tłuszcze:</strong> Użyj mydła na sucho przed praniem. Nigdy gorącej wody (utrwala plamę).', '<strong>Atrament/Długopis:</strong> Alkohol izopropylowy dla syntetyków; zimna woda dla naturalnych.', '<strong>Krew:</strong> ZAWSZE zimna woda. Ciepło utrwala ją na stałe.', '<strong>Wino/Napoje:</strong> Natychmiast zimna woda, a następnie sól do wchłonięcia.'] },
264
265
  { type: 'paragraph', html: '"Kupuj mniej, wybieraj lepiej i spraw, by trwało." Dobrze zadbane ubranie może służyć dekady. Zle traktowane — miesiące.' },
265
266
  ],
266
- faqTitle: 'Najczęściej Zadawane Pytania',
267
267
  faq: faqData,
268
- bibliographyTitle: 'Źródła',
269
- bibliography: [
270
- { name: 'ISO 3758 - Symbole Pielęgnacji Tekstyliów', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'Przewodnik po Etykietowaniu Tekstyliów', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'guia-lavagem-textil';
5
6
  const title = 'Guia de Cuidados Têxteis: Como Lavar Cada Tipo de Fibra';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Gorduras:</strong> Use sabão a seco antes de lavar. Nunca água quente (fixa a mancha).', '<strong>Tinta/Caneta:</strong> Álcool isopropílico para sintéticos; água fria para naturais.', '<strong>Sangue:</strong> Água fria SEMPRE. O calor fixa-o permanentemente.', '<strong>Vinho/Bebidas:</strong> Água fria imediatamente, seguida de sal para absorver.'] },
264
265
  { type: 'paragraph', html: '"Comprar menos, escolher melhor e fazer durar." Uma peça bem cuidada pode durar décadas. Uma peça maltratada, meses.' },
265
266
  ],
266
- faqTitle: 'Perguntas Frequentes',
267
267
  faq: faqData,
268
- bibliographyTitle: 'Referências',
269
- bibliography: [
270
- { name: 'ISO 3758 - Símbolos de Cuidados Têxteis', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'Guia de Etiquetagem Têxtil', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'rukovodstvo-po-uhodu-za-tekstilem';
5
6
  const title = 'Руководство по уходу за текстилем: Как стирать каждый тип волокна';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Жиры:</strong> Используйте сухое мыло перед стиркой. Никогда не используйте горячую воду (закрепляет пятно).', '<strong>Чернила/Ручка:</strong> Изопропиловый спирт для синтетики; холодная вода для натуральных тканей.', '<strong>Кровь:</strong> ВСЕГДА холодная вода. Тепло закрепляет ее навсегда.', '<strong>Вино/Напитки:</strong> Немедленно холодная вода, затем соль для впитывания.'] },
264
265
  { type: 'paragraph', html: '"Покупайте меньше, выбирайте лучше и делайте так, чтобы вещь служила долго." Хорошо ухоженная вещь может служить десятилетиями. Плохо обработанная — месяцы.' },
265
266
  ],
266
- faqTitle: 'Часто задаваемые вопросы',
267
267
  faq: faqData,
268
- bibliographyTitle: 'Источники',
269
- bibliography: [
270
- { name: 'ISO 3758 - Символы по уходу за текстилем', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'Руководство по маркировке текстиля', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'textil-tvattrad';
5
6
  const title = 'Guide för Textilvård: Så tvättar du varje fibertyp';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Fett:</strong> Använd diskmedel eller galltvål före tvätt. Aldrig varmt vatten (fixerar fläcken).', '<strong>Bläck:</strong> Isopropanol för syntetmaterial; kallt vatten för naturfiber.', '<strong>Blod:</strong> ALLTID kallt vatten. Värme fixerar det permanent.', '<strong>Vin/Dryck:</strong> Omedelbart kallt vatten, följt av salt för att suga upp vätskan.'] },
264
265
  { type: 'paragraph', html: '"Köp mindre, välj bättre och låt det hålla." Ett välskött plagg kan hålla i årtionden. Ett misskött plagg bara i månader.' },
265
266
  ],
266
- faqTitle: 'Vanliga frågor',
267
267
  faq: faqData,
268
- bibliographyTitle: 'Referenser',
269
- bibliography: [
270
- { name: 'ISO 3758 - Textilvårdssymboler', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'Guide för textilmarkning', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'tekstil-bakim-kilavuzu';
5
6
  const title = 'Tekstil Bakım Kılavuzu: Her Lif Türü Nasıl Yıkanır';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>Yağlar:</strong> Yıkamadan önce kuru sabun kullanın. Asla sıcak su kullanmayın (lekeyi sabitler).', '<strong>Mürekkep/Tükenmez Kalem:</strong> Sentetikler için izopropil alkol; doğallar için soğuk su.', '<strong>Kan:</strong> HER ZAMAN soğuk su. Isı onu kalıcı olarak sabitler.', '<strong>Şarap/İçecekler:</strong> Hemen soğuk su, ardından emmesi için tuz.'] },
264
265
  { type: 'paragraph', html: '"Daha az al, daha iyi seç ve uzun süre dayanmasını sağla." İyi bakılan bir giysi on yıllarca dayanabilir. Kötü davranılan bir giysi ise aylar sürer.' },
265
266
  ],
266
- faqTitle: 'Sıkça Sorulan Sorular',
267
267
  faq: faqData,
268
- bibliographyTitle: 'Referanslar',
269
- bibliography: [
270
- { name: 'ISO 3758 - Tekstil Bakım Sembolleri', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: 'Tekstil Etiketleme Kılavuzu', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,5 +1,6 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'laundry-guide';
5
6
  const title = '纺织品护理指南:如何洗涤每种纤维类型';
@@ -263,13 +264,8 @@ export const content: ToolLocaleContent = {
263
264
  { type: 'list', items: ['<strong>油脂:</strong> 洗涤前使用干皂,严禁用热水(会固化污渍)。', '<strong>墨水/圆珠笔:</strong> 合成纤维用异丙醇;天然纤维用冷水。', '<strong>血迹:</strong> 务必使用冷水。热量会使其永久固化。', '<strong>红酒/饮料:</strong> 立即冷水冲洗,然后撒盐吸收。'] },
264
265
  { type: 'paragraph', html: '“少买,优选,使之长久。” 护理得当的衣服可以穿几十年,护理不当的只能穿几个月。' },
265
266
  ],
266
- faqTitle: '常见问题',
267
267
  faq: faqData,
268
- bibliographyTitle: '参考资料',
269
- bibliography: [
270
- { name: 'ISO 3758 - 纺织品护理符号', url: 'https://www.iso.org/standard/60465.html' },
271
- { name: '纺织品标签指南', url: 'https://www.ftc.gov/' },
272
- ],
268
+ bibliography: bibliography,
273
269
  howTo: howToData,
274
270
  schemas: [faqSchema, howToSchema, appSchema],
275
271
  };
@@ -1,3 +1,4 @@
1
+ import type { ToolDefinition } from '../../types';
1
2
  import { laundryGuide } from './entry';
2
3
  export * from './entry';
3
4
  export const LAUNDRY_GUIDE_TOOL: ToolDefinition = {
@@ -1,11 +1,5 @@
1
1
  ---
2
- import {
3
- SEOTitle,
4
- SEOCard,
5
- SEOTip,
6
- SEOList,
7
- SEOArticle
8
- } from '@jjlmoya/utils-shared';
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
9
3
  import { laundryGuide } from './index';
10
4
  import type { KnownLocale } from '../../types';
11
5
 
@@ -16,25 +10,6 @@ interface Props {
16
10
  const { locale = 'es' } = Astro.props;
17
11
  const content = await laundryGuide.i18n[locale]?.();
18
12
  if (!content) return null;
19
-
20
- const { seo } = content;
21
13
  ---
22
14
 
23
- <SEOArticle>
24
- {seo.map((section: any) => {
25
- switch (section.type) {
26
- case 'title':
27
- return <SEOTitle title={section.text} level={section.level || 2} />;
28
- case 'paragraph':
29
- return <p set:html={section.html} />;
30
- case 'list':
31
- return <SEOList items={section.items} />;
32
- case 'card':
33
- return <SEOCard title={section.title} icon={section.icon}><Fragment set:html={section.html} /></SEOCard>;
34
- case 'tip':
35
- return <SEOTip title={section.title}><Fragment set:html={section.html} /></SEOTip>;
36
- default:
37
- return null;
38
- }
39
- })}
40
- </SEOArticle>
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -1,14 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { needleConverter } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const content = await needleConverter.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {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: 'Craft Yarn Council: Needle and Hook Size Chart',
6
+ url: 'https://www.craftyarncouncil.com/standards/hooks-and-needles',
7
+ },
8
+ {
9
+ name: 'British Standards Institution: Textiles - Marking of Knitting Needles',
10
+ url: 'https://knowledge.bsigroup.com/products/textile-machinery-knitting-machines-number-of-needles-for-circular-knitting-machines-of-large-nominal-diameter',
11
+ },
12
+ ];