@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,14 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { yarnCalculator } 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 yarnCalculator.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,16 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ {
5
+ name: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
6
+ url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
7
+ },
8
+ {
9
+ name: 'Interweave Essentials: Yarn Substitution and Estimation',
10
+ url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
11
+ },
12
+ {
13
+ name: 'The Woolery: Fibers and Calculation of Yarn Usage',
14
+ url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
15
+ },
16
+ ];
@@ -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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'wollrechner-garnverbrauch';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Häufig gestellte Fragen',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Literaturhinweise',
92
- bibliography: [
93
- {
94
- name: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'yarn-calculator';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
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: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'calculadora-lana-tejido';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
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: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'calculateur-laine';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
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: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'kalkulator-benang-rajut';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Pertanyaan yang Sering Diajukan',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Referensi',
92
- bibliography: [
93
- {
94
- name: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'calcolatrice-lana-filato';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
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: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'yarn-calculator';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'よくある質問',
90
90
  faq: faqData,
91
- bibliographyTitle: '参考文献',
92
- bibliography: [
93
- {
94
- name: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'yarn-calculator';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: '자주 묻는 질문',
90
90
  faq: faqData,
91
- bibliographyTitle: '참고 문헌',
92
- bibliography: [
93
- {
94
- name: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'wolcalculator-breien-haken';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
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: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'kalkulator-wloczki-dzierganie';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Często zadawane pytania',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Bibliografia',
92
- bibliography: [
93
- {
94
- name: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'calculadora-la-tricot-crochet';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
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: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'kalkulyator-pryazhi-vyazanie';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Часто задаваемые вопросы',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Библиография',
92
- bibliography: [
93
- {
94
- name: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'garnkalkylator-stickning-virkning';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
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: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'yun-hesaplama-orgu-metik';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
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: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
- },
97
- {
98
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
- },
101
- {
102
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
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 { YarnCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'yarn-calculator';
@@ -85,23 +86,8 @@ export const content: ToolLocaleContent<YarnCalculatorUI> = {
85
86
  slug,
86
87
  title,
87
88
  description,
88
- faqTitle: '常见问题',
89
89
  faq: faqData,
90
- bibliographyTitle: '参考文献',
91
- bibliography: [
92
- {
93
- name: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
94
- url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
95
- },
96
- {
97
- name: 'Interweave Essentials: Yarn Substitution and Estimation',
98
- url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
99
- },
100
- {
101
- name: 'The Woolery: Fibers and Calculation of Yarn Usage',
102
- url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
103
- },
104
- ],
90
+ bibliography: bibliography,
105
91
  howTo: howToData,
106
92
  schemas: [faqSchema, howToSchema, appSchema],
107
93
  seo: [
@@ -1,3 +1,4 @@
1
+ import type { ToolDefinition } from '../../types';
1
2
  import { yarnCalculator } from './entry';
2
3
  export * from './entry';
3
4
  export const YARN_CALCULATOR_TOOL: ToolDefinition = {
@@ -11,4 +11,5 @@ const { locale = 'es' } = Astro.props;
11
11
  const content = await yarnCalculator.i18n[locale]?.();
12
12
  if (!content) return null;
13
13
  ---
14
- <SEORenderer content={{ locale: locale as string, sections: content.seo }} />
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
package/src/types.ts CHANGED
@@ -23,15 +23,13 @@ export interface HowToStep {
23
23
  text: string;
24
24
  }
25
25
 
26
- export interface ToolLocaleContent<TUI extends Record<string, unknown> = Record<string, unknown>> {
26
+ export interface ToolLocaleContent<TUI = unknown> {
27
27
  slug: string;
28
28
  title: string;
29
29
  description: string;
30
30
  ui: TUI;
31
31
  seo: SEOSection[];
32
- faqTitle?: string;
33
32
  faq: FAQItem[];
34
- bibliographyTitle?: string;
35
33
  bibliography: BibliographyEntry[];
36
34
  howTo: HowToStep[];
37
35
  schemas: WithContext<Thing>[];
@@ -48,7 +46,7 @@ export type LocaleLoader<T> = () => Promise<T>;
48
46
 
49
47
  export type LocaleMap<T> = Partial<Record<KnownLocale, LocaleLoader<T>>>;
50
48
 
51
- export interface TextilesToolEntry<TUI extends Record<string, unknown> = Record<string, unknown>> {
49
+ export interface TextilesToolEntry<TUI = unknown> {
52
50
  id: string;
53
51
  icons: {
54
52
  bg: string;