@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 { BurnTestUI } from '../ui';
4
5
 
5
6
  const slug = 'textil-branntest';
@@ -114,23 +115,8 @@ export const content: ToolLocaleContent<BurnTestUI> = {
114
115
  slug,
115
116
  title,
116
117
  description,
117
- faqTitle: 'Vanliga frågor',
118
118
  faq: faqData,
119
- bibliographyTitle: 'Bibliografi',
120
- bibliography: [
121
- {
122
- name: 'AATCC TM20: Fiber Analysis - Qualitative',
123
- url: 'https://members.aatcc.org/store/tm20/485/',
124
- },
125
- {
126
- name: 'Textile Fibers: Identification and Testing - NIST',
127
- url: 'https://nvlpubs.nist.gov/nistpubs/Legacy/circ/nbscircular41e3.pdf',
128
- },
129
- {
130
- name: 'Burn Test Chart for Fiber Identification - Fabric Mart',
131
- url: 'https://fabricmartfabrics.com/pages/burn-test-chart',
132
- },
133
- ],
119
+ bibliography: bibliography,
134
120
  howTo: howToData,
135
121
  schemas: [faqSchema, howToSchema, appSchema],
136
122
  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 { BurnTestUI } from '../ui';
4
5
 
5
6
  const slug = 'tekstil-yakma-testi';
@@ -114,23 +115,8 @@ export const content: ToolLocaleContent<BurnTestUI> = {
114
115
  slug,
115
116
  title,
116
117
  description,
117
- faqTitle: 'Sıkça Sorulan Sorular',
118
118
  faq: faqData,
119
- bibliographyTitle: 'Kaynakça',
120
- bibliography: [
121
- {
122
- name: 'AATCC TM20: Fiber Analysis - Qualitative',
123
- url: 'https://members.aatcc.org/store/tm20/485/',
124
- },
125
- {
126
- name: 'Textile Fibers: Identification and Testing - NIST',
127
- url: 'https://nvlpubs.nist.gov/nistpubs/Legacy/circ/nbscircular41e3.pdf',
128
- },
129
- {
130
- name: 'Burn Test Chart for Fiber Identification - Fabric Mart',
131
- url: 'https://fabricmartfabrics.com/pages/burn-test-chart',
132
- },
133
- ],
119
+ bibliography: bibliography,
134
120
  howTo: howToData,
135
121
  schemas: [faqSchema, howToSchema, appSchema],
136
122
  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 { BurnTestUI } from '../ui';
4
5
 
5
6
  const slug = 'textile-burn-test';
@@ -114,23 +115,8 @@ export const content: ToolLocaleContent<BurnTestUI> = {
114
115
  slug,
115
116
  title,
116
117
  description,
117
- faqTitle: '常见问题',
118
118
  faq: faqData,
119
- bibliographyTitle: '参考文献',
120
- bibliography: [
121
- {
122
- name: 'AATCC TM20: Fiber Analysis - Qualitative',
123
- url: 'https://members.aatcc.org/store/tm20/485/',
124
- },
125
- {
126
- name: 'Textile Fibers: Identification and Testing - NIST',
127
- url: 'https://nvlpubs.nist.gov/nistpubs/Legacy/circ/nbscircular41e3.pdf',
128
- },
129
- {
130
- name: 'Burn Test Chart for Fiber Identification - Fabric Mart',
131
- url: 'https://fabricmartfabrics.com/pages/burn-test-chart',
132
- },
133
- ],
119
+ bibliography: bibliography,
134
120
  howTo: howToData,
135
121
  schemas: [faqSchema, howToSchema, appSchema],
136
122
  seo: [
@@ -1,3 +1,4 @@
1
+ import type { ToolDefinition } from '../../types';
1
2
  import { burnTest } from './entry';
2
3
  export * from './entry';
3
4
  export const BURN_TEST_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 { burnTest } 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 burnTest.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 }} />}
@@ -138,7 +138,7 @@
138
138
  gap: 0.75rem;
139
139
  }
140
140
 
141
- :global(.option-btn) {
141
+ .option-btn {
142
142
  text-align: left;
143
143
  padding: 1rem;
144
144
  background: var(--bg-page);
@@ -154,7 +154,7 @@
154
154
  line-height: 1.4;
155
155
  }
156
156
 
157
- :global(.option-btn:hover) {
157
+ .option-btn:hover {
158
158
  border-color: #6366f1;
159
159
  background: rgba(99, 102, 241, 0.05);
160
160
  color: var(--text-main);
@@ -232,13 +232,13 @@
232
232
  text-align: left;
233
233
  }
234
234
 
235
- :global(.result-details) {
235
+ .result-details {
236
236
  display: flex;
237
237
  flex-direction: column;
238
238
  gap: 1rem;
239
239
  }
240
240
 
241
- :global(.result-id-text) {
241
+ .result-id-text {
242
242
  font-size: 0.875rem;
243
243
  font-weight: 500;
244
244
  color: var(--text-muted);
@@ -247,32 +247,32 @@
247
247
  margin: 0;
248
248
  }
249
249
 
250
- :global(.result-attrs) {
250
+ .result-attrs {
251
251
  display: flex;
252
252
  flex-direction: column;
253
253
  gap: 0.75rem;
254
254
  }
255
255
 
256
- :global(.attr-row) {
256
+ .attr-row {
257
257
  display: flex;
258
258
  flex-direction: column;
259
259
  padding-left: 1rem;
260
260
  border-left: 2px solid var(--border-color);
261
261
  }
262
262
 
263
- :global(.attr-flame) {
263
+ .attr-flame {
264
264
  border-left-color: #f97316;
265
265
  }
266
266
 
267
- :global(.attr-odor) {
267
+ .attr-odor {
268
268
  border-left-color: #6366f1;
269
269
  }
270
270
 
271
- :global(.attr-residue) {
271
+ .attr-residue {
272
272
  border-left-color: #94a3b8;
273
273
  }
274
274
 
275
- :global(.attr-label) {
275
+ .attr-label {
276
276
  font-size: 0.6rem;
277
277
  font-weight: 900;
278
278
  text-transform: uppercase;
@@ -281,7 +281,7 @@
281
281
  margin-bottom: 0.2rem;
282
282
  }
283
283
 
284
- :global(.attr-value) {
284
+ .attr-value {
285
285
  font-size: 0.875rem;
286
286
  font-weight: 600;
287
287
  color: var(--text-main);
@@ -1,14 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { clothingSizeConverter } 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 clothingSizeConverter.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,10 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ { name: 'ISO 3635: Clothing Sizes - Official Standard', url: 'https://www.iso.org/standard/68644.html' },
5
+ { name: 'Clothing Size Standards - Wikipedia', url: 'https://en.wikipedia.org/wiki/Clothing_size' },
6
+ {
7
+ name: 'International Clothing Size Conversion - Wikipedia',
8
+ url: 'https://en.wikipedia.org/wiki/Clothing_size#International_variations',
9
+ },
10
+ ];
@@ -248,7 +248,7 @@
248
248
  gap: 0.75rem;
249
249
  }
250
250
 
251
- :global(.size-cell) {
251
+ .size-cell {
252
252
  aspect-ratio: 1;
253
253
  display: flex;
254
254
  align-items: center;
@@ -263,13 +263,13 @@
263
263
  transition: all 0.2s;
264
264
  }
265
265
 
266
- :global(.size-cell:hover) {
266
+ .size-cell:hover {
267
267
  border-color: #3b82f6;
268
268
  color: #3b82f6;
269
269
  transform: scale(1.05);
270
270
  }
271
271
 
272
- :global(.size-cell.active) {
272
+ .size-cell.active {
273
273
  background: #3b82f6;
274
274
  border-color: #1e40af;
275
275
  color: white;
@@ -454,29 +454,29 @@
454
454
  font-weight: 700;
455
455
  }
456
456
 
457
- :global(.rec-size-label) {
457
+ .rec-size-label {
458
458
  display: block;
459
459
  font-size: 1rem;
460
460
  margin-bottom: 0.5rem;
461
461
  }
462
462
 
463
- :global(.rec-size) {
463
+ .rec-size {
464
464
  color: #10b981;
465
465
  font-style: normal;
466
466
  font-size: 1.2em;
467
467
  }
468
468
 
469
- :global(.rec-info) {
469
+ .rec-info {
470
470
  display: block;
471
471
  font-size: 0.875rem;
472
472
  opacity: 0.85;
473
473
  }
474
474
 
475
- :global(.rec-error) {
475
+ .rec-error {
476
476
  color: #dc2626;
477
477
  }
478
478
 
479
- :global(.recommend-details) {
479
+ .recommend-details {
480
480
  display: grid;
481
481
  grid-template-columns: repeat(3, 1fr);
482
482
  gap: 0.75rem;
@@ -485,20 +485,20 @@
485
485
  border-top: 1px solid rgba(16, 185, 129, 0.3);
486
486
  }
487
487
 
488
- :global(.recommend-item) {
488
+ .recommend-item {
489
489
  text-align: center;
490
490
  display: flex;
491
491
  flex-direction: column;
492
492
  gap: 0.25rem;
493
493
  }
494
494
 
495
- :global(.rec-label) {
495
+ .rec-label {
496
496
  font-size: 0.7rem;
497
497
  text-transform: uppercase;
498
498
  opacity: 0.7;
499
499
  }
500
500
 
501
- :global(.recommend-item strong) {
501
+ .recommend-item strong {
502
502
  font-weight: 700;
503
503
  color: #10b981;
504
504
  }
@@ -635,12 +635,12 @@
635
635
  background: var(--bg-page);
636
636
  }
637
637
 
638
- :global(.eu-cell) {
638
+ .eu-cell {
639
639
  font-weight: 700;
640
640
  color: #3b82f6;
641
641
  }
642
642
 
643
- :global(.eu-cell.active) {
643
+ .eu-cell.active {
644
644
  background: rgba(59, 130, 246, 0.1);
645
645
  }
646
646
 
@@ -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 = 'internationaler-konverter-konfektionsgroessen';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: 'Häufig gestellte Fragen',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Bibliographie',
212
- bibliography: [
213
- { name: 'ISO 3635: Kleidergrößen - Offizieller Standard', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Kleidernormen - Wikipedia', url: 'https://de.wikipedia.org/wiki/Konfektionsgr%C3%B6%C3%9Fe' },
215
- {
216
- name: 'Internationale Größenumrechnung - 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: 'Frequently Asked Questions',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Bibliography',
212
- bibliography: [
213
- { name: 'ISO 3635: Clothing Sizes - Official Standard', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Clothing Size Standards - Wikipedia', url: 'https://en.wikipedia.org/wiki/Clothing_size' },
215
- {
216
- name: 'International Clothing Size Conversion - 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 = 'conversor-tallas-ropa';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: 'Preguntas Frecuentes',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Bibliografía',
212
- bibliography: [
213
- { name: 'ISO 3635: Clothing Sizes - Official Standard', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Clothing Size Standards - Wikipedia', url: 'https://en.wikipedia.org/wiki/Clothing_size' },
215
- {
216
- name: 'International Clothing Size Conversion - 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 = 'convertisseur-tailles-vetements';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: 'Questions Fréquentes',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Bibliographie',
212
- bibliography: [
213
- { name: 'ISO 3635: Clothing Sizes - Official Standard', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Clothing Size Standards - Wikipedia', url: 'https://en.wikipedia.org/wiki/Clothing_size' },
215
- {
216
- name: 'International Clothing Size Conversion - 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 = 'konverter-ukuran-pakaian-internasional';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: 'Pertanyaan yang Sering Diajukan',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Bibliografi',
212
- bibliography: [
213
- { name: 'ISO 3635: Ukuran Pakaian - Standar Resmi', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Standar Ukuran Pakaian - Wikipedia', url: 'https://en.wikipedia.org/wiki/Clothing_size' },
215
- {
216
- name: 'Konversi Ukuran Pakaian Internasional - 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 = 'convertitore-taglie-abbigliamento-internazionale';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: 'Domande Frequenti',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Bibliografia',
212
- bibliography: [
213
- { name: 'ISO 3635: Taglie di Abbigliamento - Standard Ufficiale', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Standard Taglie Abbigliamento - Wikipedia', url: 'https://it.wikipedia.org/wiki/Taglia_(abbigliamento)' },
215
- {
216
- name: 'Conversione Taglie Internazionali - 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: '衣料品サイズ基準 - Wikipedia', url: 'https://ja.wikipedia.org/wiki/%E8%A1%A3%E9%A1%9E%E3%81%AE%E3%82%B5%E3%82%A4%E3%82%BA' },
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,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://ko.wikipedia.org/wiki/%EC%9D%98%EB%A5%98_%EC%B9%98%EC%88%98' },
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,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 = 'internationale-kledingmaten-omzetter';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: 'Veelgestelde Vragen',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Bibliografie',
212
- bibliography: [
213
- { name: 'ISO 3635: Kledingmaten - Officiële Standaard', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Kledingmaat Standaarden - Wikipedia', url: 'https://nl.wikipedia.org/wiki/Confectiemaat' },
215
- {
216
- name: 'Internationale Kledingmaten Conversie - 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 = 'miedzynarodowy-konwerter-rozmiarow-odziezy';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: 'Najczęściej Zadawane Pytania',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Bibliografia',
212
- bibliography: [
213
- { name: 'ISO 3635: Rozmiary odzieży - Oficjalny standard', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Standardy rozmiarów ubrań - Wikipedia', url: 'https://pl.wikipedia.org/wiki/Rozmiar_odzie%C5%BCy' },
215
- {
216
- name: 'Międzynarodowa konwersja rozmiarów - 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 = 'conversor-tamanhos-roupa-internacional';
@@ -206,17 +207,8 @@ export const content: ToolLocaleContent<ClothingSizeConverterUI> = {
206
207
  slug,
207
208
  title,
208
209
  description,
209
- faqTitle: 'Perguntas Frequentes',
210
210
  faq: faqData,
211
- bibliographyTitle: 'Bibliografia',
212
- bibliography: [
213
- { name: 'ISO 3635: Tamanhos de Roupa - Norma Oficial', url: 'https://www.iso.org/standard/68644.html' },
214
- { name: 'Normas de Tamanho de Roupa - Wikipedia', url: 'https://pt.wikipedia.org/wiki/Tamanho_de_roupa' },
215
- {
216
- name: 'Conversão de Tamanhos Internacional - 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 = 'mezhdunarodnyj-konverter-razmerov-odezhdy';
@@ -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://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80_%D0%BE%D0%B4%D0%B5%D0%B6%D0%B4%D1%8B' },
215
- {
216
- name: 'Международная конвертация размеров — Википедия',
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: [