@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 { ClothingSizeConverterUI } from '../ui';
4
5
 
5
6
  const slug = 'internationell-storlekskonverterare-klader';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: 'Vanliga frågor',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Bibliografi',
212
- bibliography: [
213
- { name: 'ISO 3635: Klädstorlekar - Officiell Standard', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Standarder för Klädstorlekar - Wikipedia', url: 'https://sv.wikipedia.org/wiki/Kl%C3%A4dstorlek' },
215
- {
216
- name: 'Internationell Storlekskonvertering - Wikipedia',
217
- url: 'https://en.wikipedia.org/wiki/Clothing_size#International_variations',
218
- },
219
- ],
211
+ bibliography: bibliography,
220
212
  howTo: howToData,
221
213
  schemas: [faqSchema, howToSchema, appSchema],
222
214
  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 { ClothingSizeConverterUI } from '../ui';
4
5
 
5
6
  const slug = 'uluslararasi-giysi-beden-donusturucu';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: 'Sıkça Sorulan Sorular',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Kaynakça',
212
- bibliography: [
213
- { name: 'ISO 3635: Giysi Bedenleri - Resmi Standart', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Giysi Beden Standartları - Wikipedia', url: 'https://tr.wikipedia.org/wiki/Beden_tablosu' },
215
- {
216
- name: 'Uluslararası Beden Dönüşümü - Wikipedia',
217
- url: 'https://en.wikipedia.org/wiki/Clothing_size#International_variations',
218
- },
219
- ],
211
+ bibliography: bibliography,
220
212
  howTo: howToData,
221
213
  schemas: [faqSchema, howToSchema, appSchema],
222
214
  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 { ClothingSizeConverterUI } from '../ui';
4
5
 
5
6
  const slug = 'clothing-size-converter';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: '常见问题',
210
210
  faq: faqData,
211
- bibliographyTitle: '参考文献',
212
- bibliography: [
213
- { name: 'ISO 3635: 服装尺码 — 官方标准', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: '服装尺码标准 - 维基百科', url: 'https://zh.wikipedia.org/wiki/%E8%A1%A3%E7%89%A9%E5%B0%BA%E7%A2%BC' },
215
- {
216
- name: '国际服装尺码换算 - Wikipedia',
217
- url: 'https://en.wikipedia.org/wiki/Clothing_size#International_variations',
218
- },
219
- ],
211
+ bibliography: bibliography,
220
212
  howTo: howToData,
221
213
  schemas: [faqSchema, howToSchema, appSchema],
222
214
  seo: [
@@ -1,3 +1,4 @@
1
+ import type { ToolDefinition } from '../../types';
1
2
  import { clothingSizeConverter } from './entry';
2
3
  export * from './entry';
3
4
  export const CLOTHING_SIZE_CONVERTER_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 { clothingSizeConverter } 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 clothingSizeConverter.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 { fabricProjectCalculator } 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 fabricProjectCalculator.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: 'Fabric Estimation Guide - Threads Magazine',
6
+ url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
7
+ },
8
+ {
9
+ name: 'How much fabric do I need? - Seamwork',
10
+ url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
11
+ },
12
+ {
13
+ name: 'Standard Fabric Consumption Charts - Textile School',
14
+ url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
15
+ },
16
+ ];
@@ -284,7 +284,7 @@
284
284
  position: relative;
285
285
  }
286
286
 
287
- :global(.ruler-mark) {
287
+ .ruler-mark {
288
288
  position: absolute;
289
289
  left: 0;
290
290
  right: 0;
@@ -293,7 +293,7 @@
293
293
  transform: translateY(-50%);
294
294
  }
295
295
 
296
- :global(.ruler-mark::before) {
296
+ .ruler-mark::before {
297
297
  content: '';
298
298
  width: 8px;
299
299
  height: 1.5px;
@@ -303,7 +303,7 @@
303
303
  margin-right: 4px;
304
304
  }
305
305
 
306
- :global(.ruler-mark span) {
306
+ .ruler-mark span {
307
307
  font-size: 0.58rem;
308
308
  font-weight: 700;
309
309
  color: var(--text-muted);
@@ -325,7 +325,7 @@
325
325
  border-radius: 4px;
326
326
  }
327
327
 
328
- :global(.piece-row) {
328
+ .piece-row {
329
329
  display: flex;
330
330
  flex-direction: row;
331
331
  gap: 4px;
@@ -333,7 +333,7 @@
333
333
  align-items: stretch;
334
334
  }
335
335
 
336
- :global(.piece-block) {
336
+ .piece-block {
337
337
  border-radius: 4px;
338
338
  border: 1.5px solid;
339
339
  display: flex;
@@ -346,11 +346,11 @@
346
346
  transition: filter 0.15s;
347
347
  }
348
348
 
349
- :global(.piece-block:hover) {
349
+ .piece-block:hover {
350
350
  filter: brightness(1.08);
351
351
  }
352
352
 
353
- :global(.piece-name) {
353
+ .piece-name {
354
354
  font-size: 0.62rem;
355
355
  font-weight: 800;
356
356
  color: var(--text-main);
@@ -361,11 +361,11 @@
361
361
  width: 100%;
362
362
  }
363
363
 
364
- :global(.piece-fold) {
364
+ .piece-fold {
365
365
  border-left: 3px dashed rgba(79, 70, 229, 0.65);
366
366
  }
367
367
 
368
- :global(.fold-indicator) {
368
+ .fold-indicator {
369
369
  font-size: 0.48rem;
370
370
  font-weight: 800;
371
371
  color: rgba(79, 70, 229, 0.75);
@@ -374,7 +374,7 @@
374
374
  margin-top: 2px;
375
375
  }
376
376
 
377
- :global(.board-empty-state) {
377
+ .board-empty-state {
378
378
  flex: 1;
379
379
  display: flex;
380
380
  align-items: center;
@@ -441,7 +441,7 @@
441
441
  gap: 0.6rem;
442
442
  }
443
443
 
444
- :global(.merch-item) {
444
+ .merch-item {
445
445
  display: flex;
446
446
  align-items: center;
447
447
  gap: 0.6rem;
@@ -450,7 +450,7 @@
450
450
  color: var(--text-main);
451
451
  }
452
452
 
453
- :global(.merch-dot) {
453
+ .merch-dot {
454
454
  color: var(--f-p);
455
455
  font-size: 0.5rem;
456
456
  flex-shrink: 0;
@@ -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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'stoffverbrauchsrechner-projekt';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
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: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'fabric-project-calculator';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
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: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'calculadora-tela-proyecto';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
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: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'calculateur-tissu-projet';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
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: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'kalkulator-kain-proyek';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
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: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'calcolatrice-tessuto-progetto';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
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: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'fabric-project-calculator';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'よくある質問',
90
90
  faq: faqData,
91
- bibliographyTitle: '参考文献',
92
- bibliography: [
93
- {
94
- name: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'fabric-project-calculator';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: '자주 묻는 질문',
90
90
  faq: faqData,
91
- bibliographyTitle: '참고 문헌',
92
- bibliography: [
93
- {
94
- name: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'stofverbruik-calculator-project';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
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: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'kalkulator-tkaniny-projekt';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
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: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'calculadora-tecido-projeto';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
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: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
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 { FabricProjectCalculatorUI } from '../ui';
4
5
 
5
6
  const slug = 'kalkulyator-tkani-proekt';
@@ -86,23 +87,8 @@ export const content: ToolLocaleContent<FabricProjectCalculatorUI> = {
86
87
  slug,
87
88
  title,
88
89
  description,
89
- faqTitle: 'Часто задаваемые вопросы',
90
90
  faq: faqData,
91
- bibliographyTitle: 'Библиография',
92
- bibliography: [
93
- {
94
- name: 'Fabric Estimation Guide - Threads Magazine',
95
- url: 'https://www.threadsmagazine.com/forum/measuring-fabric',
96
- },
97
- {
98
- name: 'How much fabric do I need? - Seamwork',
99
- url: 'https://www.seamwork.com/sewing-tutorials/the-anatomy-of-a-sewing-pattern',
100
- },
101
- {
102
- name: 'Standard Fabric Consumption Charts - Textile School',
103
- url: 'https://www.textileschool.com/209/fabric-consumption-in-garment-making/',
104
- },
105
- ],
91
+ bibliography: bibliography,
106
92
  howTo: howToData,
107
93
  schemas: [faqSchema, howToSchema, appSchema],
108
94
  seo: [