@jjlmoya/utils-textiles 1.12.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 (244) 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/burnTest/textile-burn-test.css +11 -11
  26. package/src/tool/clothingSizeConverter/bibliography.astro +2 -10
  27. package/src/tool/clothingSizeConverter/bibliography.ts +10 -0
  28. package/src/tool/clothingSizeConverter/clothing-size-converter.css +13 -13
  29. package/src/tool/clothingSizeConverter/i18n/de.ts +2 -10
  30. package/src/tool/clothingSizeConverter/i18n/en.ts +2 -10
  31. package/src/tool/clothingSizeConverter/i18n/es.ts +2 -10
  32. package/src/tool/clothingSizeConverter/i18n/fr.ts +2 -10
  33. package/src/tool/clothingSizeConverter/i18n/id.ts +2 -10
  34. package/src/tool/clothingSizeConverter/i18n/it.ts +2 -10
  35. package/src/tool/clothingSizeConverter/i18n/ja.ts +2 -10
  36. package/src/tool/clothingSizeConverter/i18n/ko.ts +2 -10
  37. package/src/tool/clothingSizeConverter/i18n/nl.ts +2 -10
  38. package/src/tool/clothingSizeConverter/i18n/pl.ts +2 -10
  39. package/src/tool/clothingSizeConverter/i18n/pt.ts +2 -10
  40. package/src/tool/clothingSizeConverter/i18n/ru.ts +2 -10
  41. package/src/tool/clothingSizeConverter/i18n/sv.ts +2 -10
  42. package/src/tool/clothingSizeConverter/i18n/tr.ts +2 -10
  43. package/src/tool/clothingSizeConverter/i18n/zh.ts +2 -10
  44. package/src/tool/clothingSizeConverter/index.ts +1 -0
  45. package/src/tool/clothingSizeConverter/seo.astro +2 -27
  46. package/src/tool/fabricProjectCalculator/bibliography.astro +2 -10
  47. package/src/tool/fabricProjectCalculator/bibliography.ts +16 -0
  48. package/src/tool/fabricProjectCalculator/fabric-project-calculator.css +12 -12
  49. package/src/tool/fabricProjectCalculator/i18n/de.ts +2 -16
  50. package/src/tool/fabricProjectCalculator/i18n/en.ts +2 -16
  51. package/src/tool/fabricProjectCalculator/i18n/es.ts +2 -16
  52. package/src/tool/fabricProjectCalculator/i18n/fr.ts +2 -16
  53. package/src/tool/fabricProjectCalculator/i18n/id.ts +2 -16
  54. package/src/tool/fabricProjectCalculator/i18n/it.ts +2 -16
  55. package/src/tool/fabricProjectCalculator/i18n/ja.ts +2 -16
  56. package/src/tool/fabricProjectCalculator/i18n/ko.ts +2 -16
  57. package/src/tool/fabricProjectCalculator/i18n/nl.ts +2 -16
  58. package/src/tool/fabricProjectCalculator/i18n/pl.ts +2 -16
  59. package/src/tool/fabricProjectCalculator/i18n/pt.ts +2 -16
  60. package/src/tool/fabricProjectCalculator/i18n/ru.ts +2 -16
  61. package/src/tool/fabricProjectCalculator/i18n/sv.ts +2 -16
  62. package/src/tool/fabricProjectCalculator/i18n/tr.ts +2 -16
  63. package/src/tool/fabricProjectCalculator/i18n/zh.ts +2 -16
  64. package/src/tool/fabricProjectCalculator/index.ts +1 -0
  65. package/src/tool/fabricProjectCalculator/seo.astro +2 -27
  66. package/src/tool/fabricTruth/bibliography.astro +2 -10
  67. package/src/tool/fabricTruth/bibliography.ts +16 -0
  68. package/src/tool/fabricTruth/fabric-truthfulness.css +11 -11
  69. package/src/tool/fabricTruth/i18n/de.ts +2 -16
  70. package/src/tool/fabricTruth/i18n/en.ts +2 -16
  71. package/src/tool/fabricTruth/i18n/es.ts +2 -16
  72. package/src/tool/fabricTruth/i18n/fr.ts +2 -16
  73. package/src/tool/fabricTruth/i18n/id.ts +2 -16
  74. package/src/tool/fabricTruth/i18n/it.ts +2 -16
  75. package/src/tool/fabricTruth/i18n/ja.ts +2 -16
  76. package/src/tool/fabricTruth/i18n/ko.ts +2 -16
  77. package/src/tool/fabricTruth/i18n/nl.ts +2 -16
  78. package/src/tool/fabricTruth/i18n/pl.ts +2 -16
  79. package/src/tool/fabricTruth/i18n/pt.ts +2 -16
  80. package/src/tool/fabricTruth/i18n/ru.ts +2 -16
  81. package/src/tool/fabricTruth/i18n/sv.ts +2 -16
  82. package/src/tool/fabricTruth/i18n/tr.ts +2 -16
  83. package/src/tool/fabricTruth/i18n/zh.ts +2 -16
  84. package/src/tool/fabricTruth/index.ts +1 -0
  85. package/src/tool/fabricTruth/seo.astro +2 -27
  86. package/src/tool/fiberPrep/bibliography.astro +2 -10
  87. package/src/tool/fiberPrep/bibliography.ts +12 -0
  88. package/src/tool/fiberPrep/i18n/de.ts +2 -12
  89. package/src/tool/fiberPrep/i18n/en.ts +2 -12
  90. package/src/tool/fiberPrep/i18n/es.ts +2 -12
  91. package/src/tool/fiberPrep/i18n/fr.ts +2 -12
  92. package/src/tool/fiberPrep/i18n/id.ts +2 -12
  93. package/src/tool/fiberPrep/i18n/it.ts +2 -12
  94. package/src/tool/fiberPrep/i18n/ja.ts +2 -12
  95. package/src/tool/fiberPrep/i18n/ko.ts +2 -12
  96. package/src/tool/fiberPrep/i18n/nl.ts +2 -12
  97. package/src/tool/fiberPrep/i18n/pl.ts +2 -12
  98. package/src/tool/fiberPrep/i18n/pt.ts +2 -12
  99. package/src/tool/fiberPrep/i18n/ru.ts +2 -12
  100. package/src/tool/fiberPrep/i18n/sv.ts +2 -12
  101. package/src/tool/fiberPrep/i18n/tr.ts +2 -12
  102. package/src/tool/fiberPrep/i18n/zh.ts +2 -12
  103. package/src/tool/fiberPrep/index.ts +1 -0
  104. package/src/tool/fiberPrep/seo.astro +2 -27
  105. package/src/tool/knittingGauge/bibliography.astro +2 -10
  106. package/src/tool/knittingGauge/bibliography.ts +12 -0
  107. package/src/tool/knittingGauge/i18n/de.ts +2 -12
  108. package/src/tool/knittingGauge/i18n/en.ts +2 -12
  109. package/src/tool/knittingGauge/i18n/es.ts +2 -12
  110. package/src/tool/knittingGauge/i18n/fr.ts +2 -12
  111. package/src/tool/knittingGauge/i18n/id.ts +2 -12
  112. package/src/tool/knittingGauge/i18n/it.ts +2 -12
  113. package/src/tool/knittingGauge/i18n/ja.ts +2 -12
  114. package/src/tool/knittingGauge/i18n/ko.ts +2 -12
  115. package/src/tool/knittingGauge/i18n/nl.ts +2 -12
  116. package/src/tool/knittingGauge/i18n/pl.ts +2 -12
  117. package/src/tool/knittingGauge/i18n/pt.ts +2 -12
  118. package/src/tool/knittingGauge/i18n/ru.ts +2 -12
  119. package/src/tool/knittingGauge/i18n/sv.ts +2 -12
  120. package/src/tool/knittingGauge/i18n/tr.ts +2 -12
  121. package/src/tool/knittingGauge/i18n/zh.ts +2 -12
  122. package/src/tool/knittingGauge/index.ts +1 -0
  123. package/src/tool/knittingGauge/knitting-gauge-calculator.css +9 -9
  124. package/src/tool/knittingGauge/seo.astro +2 -27
  125. package/src/tool/laundryGuide/bibliography.astro +2 -10
  126. package/src/tool/laundryGuide/bibliography.ts +6 -0
  127. package/src/tool/laundryGuide/i18n/de.ts +2 -6
  128. package/src/tool/laundryGuide/i18n/en.ts +2 -6
  129. package/src/tool/laundryGuide/i18n/es.ts +2 -6
  130. package/src/tool/laundryGuide/i18n/fr.ts +2 -6
  131. package/src/tool/laundryGuide/i18n/id.ts +2 -6
  132. package/src/tool/laundryGuide/i18n/it.ts +2 -6
  133. package/src/tool/laundryGuide/i18n/ja.ts +2 -6
  134. package/src/tool/laundryGuide/i18n/ko.ts +2 -6
  135. package/src/tool/laundryGuide/i18n/nl.ts +2 -6
  136. package/src/tool/laundryGuide/i18n/pl.ts +2 -6
  137. package/src/tool/laundryGuide/i18n/pt.ts +2 -6
  138. package/src/tool/laundryGuide/i18n/ru.ts +2 -6
  139. package/src/tool/laundryGuide/i18n/sv.ts +2 -6
  140. package/src/tool/laundryGuide/i18n/tr.ts +2 -6
  141. package/src/tool/laundryGuide/i18n/zh.ts +2 -6
  142. package/src/tool/laundryGuide/index.ts +1 -0
  143. package/src/tool/laundryGuide/seo.astro +2 -27
  144. package/src/tool/needleConverter/bibliography.astro +2 -10
  145. package/src/tool/needleConverter/bibliography.ts +12 -0
  146. package/src/tool/needleConverter/i18n/de.ts +2 -12
  147. package/src/tool/needleConverter/i18n/en.ts +2 -12
  148. package/src/tool/needleConverter/i18n/es.ts +2 -12
  149. package/src/tool/needleConverter/i18n/fr.ts +2 -12
  150. package/src/tool/needleConverter/i18n/id.ts +2 -12
  151. package/src/tool/needleConverter/i18n/it.ts +2 -12
  152. package/src/tool/needleConverter/i18n/ja.ts +2 -12
  153. package/src/tool/needleConverter/i18n/ko.ts +2 -12
  154. package/src/tool/needleConverter/i18n/nl.ts +2 -12
  155. package/src/tool/needleConverter/i18n/pl.ts +2 -12
  156. package/src/tool/needleConverter/i18n/pt.ts +2 -12
  157. package/src/tool/needleConverter/i18n/ru.ts +2 -12
  158. package/src/tool/needleConverter/i18n/sv.ts +2 -12
  159. package/src/tool/needleConverter/i18n/tr.ts +2 -12
  160. package/src/tool/needleConverter/i18n/zh.ts +2 -12
  161. package/src/tool/needleConverter/index.ts +1 -0
  162. package/src/tool/needleConverter/knitting-needle-converter.css +13 -13
  163. package/src/tool/needleConverter/seo.astro +1 -1
  164. package/src/tool/sewingPatternScaler/bibliography.astro +2 -10
  165. package/src/tool/sewingPatternScaler/bibliography.ts +12 -0
  166. package/src/tool/sewingPatternScaler/i18n/de.ts +2 -12
  167. package/src/tool/sewingPatternScaler/i18n/en.ts +2 -12
  168. package/src/tool/sewingPatternScaler/i18n/es.ts +2 -12
  169. package/src/tool/sewingPatternScaler/i18n/fr.ts +2 -12
  170. package/src/tool/sewingPatternScaler/i18n/id.ts +2 -12
  171. package/src/tool/sewingPatternScaler/i18n/it.ts +2 -12
  172. package/src/tool/sewingPatternScaler/i18n/ja.ts +2 -12
  173. package/src/tool/sewingPatternScaler/i18n/ko.ts +2 -12
  174. package/src/tool/sewingPatternScaler/i18n/nl.ts +2 -12
  175. package/src/tool/sewingPatternScaler/i18n/pl.ts +2 -12
  176. package/src/tool/sewingPatternScaler/i18n/pt.ts +2 -12
  177. package/src/tool/sewingPatternScaler/i18n/ru.ts +2 -12
  178. package/src/tool/sewingPatternScaler/i18n/sv.ts +2 -12
  179. package/src/tool/sewingPatternScaler/i18n/tr.ts +2 -12
  180. package/src/tool/sewingPatternScaler/i18n/zh.ts +2 -12
  181. package/src/tool/sewingPatternScaler/index.ts +1 -0
  182. package/src/tool/sewingPatternScaler/seo.astro +2 -36
  183. package/src/tool/sewingPatternScaler/sewing-pattern-scaler.css +8 -8
  184. package/src/tool/shoeSizeConverter/bibliography.astro +2 -10
  185. package/src/tool/shoeSizeConverter/bibliography.ts +7 -0
  186. package/src/tool/shoeSizeConverter/i18n/de.ts +2 -7
  187. package/src/tool/shoeSizeConverter/i18n/en.ts +2 -7
  188. package/src/tool/shoeSizeConverter/i18n/es.ts +2 -7
  189. package/src/tool/shoeSizeConverter/i18n/fr.ts +2 -7
  190. package/src/tool/shoeSizeConverter/i18n/id.ts +2 -7
  191. package/src/tool/shoeSizeConverter/i18n/it.ts +2 -7
  192. package/src/tool/shoeSizeConverter/i18n/ja.ts +2 -7
  193. package/src/tool/shoeSizeConverter/i18n/ko.ts +2 -7
  194. package/src/tool/shoeSizeConverter/i18n/nl.ts +2 -7
  195. package/src/tool/shoeSizeConverter/i18n/pl.ts +2 -7
  196. package/src/tool/shoeSizeConverter/i18n/pt.ts +2 -7
  197. package/src/tool/shoeSizeConverter/i18n/ru.ts +2 -7
  198. package/src/tool/shoeSizeConverter/i18n/sv.ts +2 -7
  199. package/src/tool/shoeSizeConverter/i18n/tr.ts +2 -7
  200. package/src/tool/shoeSizeConverter/i18n/zh.ts +2 -7
  201. package/src/tool/shoeSizeConverter/index.ts +1 -0
  202. package/src/tool/shoeSizeConverter/seo.astro +2 -27
  203. package/src/tool/shoeSizeConverter/shoe-size-converter.css +3 -3
  204. package/src/tool/stainChemistry/bibliography.astro +2 -10
  205. package/src/tool/stainChemistry/bibliography.ts +16 -0
  206. package/src/tool/stainChemistry/i18n/de.ts +2 -16
  207. package/src/tool/stainChemistry/i18n/en.ts +2 -16
  208. package/src/tool/stainChemistry/i18n/es.ts +2 -16
  209. package/src/tool/stainChemistry/i18n/fr.ts +2 -16
  210. package/src/tool/stainChemistry/i18n/id.ts +2 -16
  211. package/src/tool/stainChemistry/i18n/it.ts +2 -16
  212. package/src/tool/stainChemistry/i18n/ja.ts +2 -16
  213. package/src/tool/stainChemistry/i18n/ko.ts +2 -16
  214. package/src/tool/stainChemistry/i18n/nl.ts +2 -16
  215. package/src/tool/stainChemistry/i18n/pl.ts +2 -16
  216. package/src/tool/stainChemistry/i18n/pt.ts +2 -16
  217. package/src/tool/stainChemistry/i18n/ru.ts +2 -16
  218. package/src/tool/stainChemistry/i18n/sv.ts +2 -16
  219. package/src/tool/stainChemistry/i18n/tr.ts +2 -16
  220. package/src/tool/stainChemistry/i18n/zh.ts +2 -16
  221. package/src/tool/stainChemistry/index.ts +1 -0
  222. package/src/tool/stainChemistry/seo.astro +2 -27
  223. package/src/tool/stainChemistry/stain-chemical-protocol.css +3 -3
  224. package/src/tool/yarnCalculator/bibliography.astro +2 -10
  225. package/src/tool/yarnCalculator/bibliography.ts +16 -0
  226. package/src/tool/yarnCalculator/i18n/de.ts +2 -16
  227. package/src/tool/yarnCalculator/i18n/en.ts +2 -16
  228. package/src/tool/yarnCalculator/i18n/es.ts +2 -16
  229. package/src/tool/yarnCalculator/i18n/fr.ts +2 -16
  230. package/src/tool/yarnCalculator/i18n/id.ts +2 -16
  231. package/src/tool/yarnCalculator/i18n/it.ts +2 -16
  232. package/src/tool/yarnCalculator/i18n/ja.ts +2 -16
  233. package/src/tool/yarnCalculator/i18n/ko.ts +2 -16
  234. package/src/tool/yarnCalculator/i18n/nl.ts +2 -16
  235. package/src/tool/yarnCalculator/i18n/pl.ts +2 -16
  236. package/src/tool/yarnCalculator/i18n/pt.ts +2 -16
  237. package/src/tool/yarnCalculator/i18n/ru.ts +2 -16
  238. package/src/tool/yarnCalculator/i18n/sv.ts +2 -16
  239. package/src/tool/yarnCalculator/i18n/tr.ts +2 -16
  240. package/src/tool/yarnCalculator/i18n/zh.ts +2 -16
  241. package/src/tool/yarnCalculator/index.ts +1 -0
  242. package/src/tool/yarnCalculator/seo.astro +2 -1
  243. package/src/tool/yarnCalculator/yarn-calculator.css +7 -7
  244. 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 { FabricTruthUI } from '../ui';
4
5
 
5
6
  const slug = 'textil-sanning-fiberanalys';
@@ -260,23 +261,8 @@ export const content: ToolLocaleContent<FabricTruthUI> = {
260
261
  { type: 'tip', title: 'Tvätta ut och in', html: 'Skyddar färg och broderier från friktion mot trumman och andra plagg.' },
261
262
  { type: 'paragraph', html: '"Köp mindre, välj bättre och låt det hålla länge." — Denna analysator är ditt första steg mot en medveten garderob av hög kvalitet.' },
262
263
  ],
263
- faqTitle: 'Vanliga frågor',
264
264
  faq: faqData,
265
- bibliographyTitle: 'Bibliografi',
266
- bibliography: [
267
- {
268
- name: 'FTC - Guide till textilmärkning',
269
- url: 'https://www.ftc.gov/business-guidance/resources/textile-fiber-products-guides',
270
- },
271
- {
272
- name: 'Europeiska kommissionen - Textilförordning',
273
- url: 'https://ec.europa.eu/growth/tools-databases/nando/',
274
- },
275
- {
276
- name: 'ISO 3758:2012 - Skötselsymboler för textilier',
277
- url: 'https://www.iso.org/standard/60465.html',
278
- },
279
- ],
265
+ bibliography: bibliography,
280
266
  howTo: howToData,
281
267
  schemas: [faqSchema, howToSchema, appSchema],
282
268
  };
@@ -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 { FabricTruthUI } from '../ui';
4
5
 
5
6
  const slug = 'tekstil-gercekleri-elyaf-analizi';
@@ -260,23 +261,8 @@ export const content: ToolLocaleContent<FabricTruthUI> = {
260
261
  { type: 'tip', title: 'Tersinden Yıkama', html: 'Rengi ve nakışları tamburla ve diğer giysilerle temastan korur.' },
261
262
  { type: 'paragraph', html: '"Az al, iyi seç ve uzun ömürlü kıl." — Bu analizör, bilinçli ve yüksek kaliteli bir gardıroba giden ilk adımınızdır.' },
262
263
  ],
263
- faqTitle: 'Sıkça Sorulan Sorular',
264
264
  faq: faqData,
265
- bibliographyTitle: 'Referanslar',
266
- bibliography: [
267
- {
268
- name: 'FTC - Tekstil Etiketleme Rehberi',
269
- url: 'https://www.ftc.gov/business-guidance/resources/textile-fiber-products-guides',
270
- },
271
- {
272
- name: 'Avrupa Komisyonu - Tekstil Düzenlemesi',
273
- url: 'https://ec.europa.eu/growth/tools-databases/nando/',
274
- },
275
- {
276
- name: 'ISO 3758:2012 - Tekstil Bakım Sembolleri',
277
- url: 'https://www.iso.org/standard/60465.html',
278
- },
279
- ],
265
+ bibliography: bibliography,
280
266
  howTo: howToData,
281
267
  schemas: [faqSchema, howToSchema, appSchema],
282
268
  };
@@ -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 { FabricTruthUI } from '../ui';
4
5
 
5
6
  const slug = 'fabric-truthfulness';
@@ -264,23 +265,8 @@ export const content: ToolLocaleContent<FabricTruthUI> = {
264
265
  { type: 'tip', title: '反面洗涤', html: '保护颜色和绣花免受滚筒和其他衣物的磨擦。' },
265
266
  { type: 'paragraph', html: '“买得少一点,选得好一点,穿得久一点。” —— 这个分析工具是您迈向理性、高品质衣橱的第一步。' },
266
267
  ],
267
- faqTitle: '常见问题',
268
268
  faq: faqData,
269
- bibliographyTitle: '参考文献',
270
- bibliography: [
271
- {
272
- name: 'FTC - 纺织纤维产品指南',
273
- url: 'https://www.ftc.gov/business-guidance/resources/textile-fiber-products-guides',
274
- },
275
- {
276
- name: '欧盟委员会 - 纺织品法规',
277
- url: 'https://ec.europa.eu/growth/tools-databases/nando/',
278
- },
279
- {
280
- name: 'ISO 3758:2012 - 纺织品维护标签符号',
281
- url: 'https://www.iso.org/standard/60465.html',
282
- },
283
- ],
269
+ bibliography: bibliography,
284
270
  howTo: howToData,
285
271
  schemas: [faqSchema, howToSchema, appSchema],
286
272
  };
@@ -1,3 +1,4 @@
1
+ import type { ToolDefinition } from '../../types';
1
2
  import { fabricTruth } from './entry';
2
3
  export * from './entry';
3
4
  export const FABRIC_TRUTH_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 { fabricTruth } 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 fabricTruth.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 { fiberPrep } 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 fiberPrep.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: 'La Escuela Artesana - Natural Dye Workshop on Wool',
6
+ url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
7
+ },
8
+ {
9
+ name: 'Tatiana Sarasa (@tatianasarasa) - Textile Artist and Natural Dyes',
10
+ url: 'https://www.instagram.com/tatianasarasa/',
11
+ },
12
+ ];
@@ -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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'faservorbereitung-pigmentierung';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Häufig gestellte Fragen',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliographie',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artista Textil y Tintes Naturales',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'fiber-preparation-natural-dyeing';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Frequently Asked Questions',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliography',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Natural Dye Workshop on Wool',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Textile Artist and Natural Dyes',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'preparacion-fibras-pigmentar';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Preguntas Frecuentes',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliografía',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artista Textil y Tintes Naturales',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'preparation-fibres-teinture-naturelle';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Questions Fréquentes',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliographie',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Atelier de Teintures Naturelles sur Laine',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artiste Textile et Teintures Naturelles',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'persiapan-serat-pewarnaan';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Pertanyaan yang Sering Diajukan',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliografi',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artista Textil y Tintes Naturales',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'preparazione-fibre-tintura';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Domande Frequenti',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliografia',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artista Textil y Tintes Naturales',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'fiber-preparation-natural-dyeing';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'よくある質問',
90
90
  faq: faqData,
91
- bibliographyTitle: '参考文献',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artista Textil y Tintes Naturales',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'fiber-preparation-natural-dyeing';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: '자주 묻는 질문',
90
90
  faq: faqData,
91
- bibliographyTitle: '참고 문헌',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artista Textil y Tintes Naturales',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'vezelvoorbereiding-verven';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Veelgestelde Vragen',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliografie',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artista Textil y Tintes Naturales',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'przygotowanie-wlokien-farbowanie';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Najczęściej Zadawane Pytania',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliografia',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artista Textil i Tintes Naturales',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'preparacao-fibras-tingimento';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
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: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artista Têxtil e Tintas Naturais',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'podgotovka-volokon-krashenie';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Часто задаваемые вопросы',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Библиография',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Artista Textil и Natural Dyes',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'fiberberedning-fargning';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
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: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Textilkonstnär och naturliga färgämnen',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'elyaflarin-boyamaya-hazirlanmasi';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
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: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - Tekstil Sanatçısı ve Doğal Boyalar',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { FiberPrepUI } from '../ui';
4
5
 
5
6
  const slug = 'fiber-preparation-natural-dyeing';
@@ -86,19 +87,8 @@ export const content: ToolLocaleContent<FiberPrepUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: '常见问题',
90
90
  faq: faqData,
91
- bibliographyTitle: '参考文献',
92
- bibliography: [
93
- {
94
- name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
- url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
- },
97
- {
98
- name: 'Tatiana Sarasa (@tatianasarasa) - 纺织艺术家与天然染色',
99
- url: 'https://www.instagram.com/tatianasarasa/',
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 { fiberPrep } from './entry';
2
3
  export * from './entry';
3
4
  export const FIBER_PREP_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 { fiberPrep } 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 fiberPrep.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 { knittingGauge } 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 knittingGauge.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />