@jjlmoya/utils-textiles 1.20.0 → 1.22.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 (209) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/de.ts +76 -76
  3. package/src/category/i18n/en.ts +76 -76
  4. package/src/category/i18n/es.ts +76 -76
  5. package/src/category/i18n/fr.ts +76 -76
  6. package/src/category/i18n/id.ts +76 -76
  7. package/src/category/i18n/it.ts +76 -76
  8. package/src/category/i18n/ja.ts +76 -76
  9. package/src/category/i18n/ko.ts +76 -76
  10. package/src/category/i18n/nl.ts +76 -76
  11. package/src/category/i18n/pl.ts +76 -76
  12. package/src/category/i18n/pt.ts +76 -76
  13. package/src/category/i18n/ru.ts +76 -76
  14. package/src/category/i18n/sv.ts +76 -76
  15. package/src/category/i18n/zh.ts +76 -76
  16. package/src/category/index.ts +2 -0
  17. package/src/category/seo.astro +1 -1
  18. package/src/components/PreviewNavSidebar.astro +1 -1
  19. package/src/components/PreviewToolbar.astro +1 -1
  20. package/src/data.ts +1 -1
  21. package/src/entries.ts +4 -1
  22. package/src/env.d.ts +1 -1
  23. package/src/index.ts +1 -1
  24. package/src/layouts/PreviewLayout.astro +113 -113
  25. package/src/pages/index.astro +1 -1
  26. package/src/tests/faq_count.test.ts +19 -19
  27. package/src/tests/i18n_coverage.test.ts +4 -2
  28. package/src/tests/locale_spelling.test.ts +44 -0
  29. package/src/tests/mocks/astro_mock.js +1 -1
  30. package/src/tests/no_en_dash.test.ts +70 -70
  31. package/src/tests/no_h1_in_components.test.ts +1 -1
  32. package/src/tests/seo_length.test.ts +22 -22
  33. package/src/tests/seo_translation_completeness.test.ts +69 -0
  34. package/src/tests/spanish_leakage.test.ts +175 -153
  35. package/src/tests/tool_validation.test.ts +17 -17
  36. package/src/tool/burnTest/i18n/es.ts +211 -211
  37. package/src/tool/burnTest/i18n/fr.ts +211 -211
  38. package/src/tool/burnTest/i18n/ja.ts +211 -211
  39. package/src/tool/burnTest/i18n/ko.ts +211 -211
  40. package/src/tool/burnTest/i18n/pl.ts +211 -211
  41. package/src/tool/burnTest/i18n/ru.ts +211 -211
  42. package/src/tool/burnTest/i18n/sv.ts +211 -211
  43. package/src/tool/burnTest/i18n/zh.ts +211 -211
  44. package/src/tool/burnTest/seo.astro +15 -15
  45. package/src/tool/clothingSizeConverter/i18n/de.ts +348 -348
  46. package/src/tool/clothingSizeConverter/i18n/en.ts +348 -348
  47. package/src/tool/clothingSizeConverter/i18n/fr.ts +348 -348
  48. package/src/tool/clothingSizeConverter/i18n/ja.ts +348 -348
  49. package/src/tool/clothingSizeConverter/i18n/ko.ts +348 -348
  50. package/src/tool/clothingSizeConverter/i18n/nl.ts +348 -348
  51. package/src/tool/clothingSizeConverter/i18n/pl.ts +348 -348
  52. package/src/tool/clothingSizeConverter/i18n/ru.ts +348 -348
  53. package/src/tool/clothingSizeConverter/i18n/sv.ts +348 -348
  54. package/src/tool/clothingSizeConverter/i18n/tr.ts +348 -348
  55. package/src/tool/clothingSizeConverter/i18n/zh.ts +348 -348
  56. package/src/tool/clothingSizeConverter/seo.astro +15 -15
  57. package/src/tool/embroideryStitchPricingEstimator/bibliography.astro +6 -0
  58. package/src/tool/embroideryStitchPricingEstimator/bibliography.ts +12 -0
  59. package/src/tool/embroideryStitchPricingEstimator/component.astro +111 -0
  60. package/src/tool/embroideryStitchPricingEstimator/controller.ts +111 -0
  61. package/src/tool/embroideryStitchPricingEstimator/dom-views.ts +94 -0
  62. package/src/tool/embroideryStitchPricingEstimator/embroidery-stitch-count-pricing-estimator.css +438 -0
  63. package/src/tool/embroideryStitchPricingEstimator/entry.ts +29 -0
  64. package/src/tool/embroideryStitchPricingEstimator/evaluator.ts +22 -0
  65. package/src/tool/embroideryStitchPricingEstimator/i18n/de.ts +38 -0
  66. package/src/tool/embroideryStitchPricingEstimator/i18n/en.ts +194 -0
  67. package/src/tool/embroideryStitchPricingEstimator/i18n/es.ts +38 -0
  68. package/src/tool/embroideryStitchPricingEstimator/i18n/fr.ts +38 -0
  69. package/src/tool/embroideryStitchPricingEstimator/i18n/id.ts +38 -0
  70. package/src/tool/embroideryStitchPricingEstimator/i18n/it.ts +38 -0
  71. package/src/tool/embroideryStitchPricingEstimator/i18n/ja.ts +38 -0
  72. package/src/tool/embroideryStitchPricingEstimator/i18n/ko.ts +38 -0
  73. package/src/tool/embroideryStitchPricingEstimator/i18n/nl.ts +38 -0
  74. package/src/tool/embroideryStitchPricingEstimator/i18n/pl.ts +38 -0
  75. package/src/tool/embroideryStitchPricingEstimator/i18n/pt.ts +38 -0
  76. package/src/tool/embroideryStitchPricingEstimator/i18n/ru.ts +38 -0
  77. package/src/tool/embroideryStitchPricingEstimator/i18n/sv.ts +38 -0
  78. package/src/tool/embroideryStitchPricingEstimator/i18n/tr.ts +38 -0
  79. package/src/tool/embroideryStitchPricingEstimator/i18n/zh.ts +38 -0
  80. package/src/tool/embroideryStitchPricingEstimator/index.ts +11 -0
  81. package/src/tool/embroideryStitchPricingEstimator/logic.test.ts +40 -0
  82. package/src/tool/embroideryStitchPricingEstimator/logic.ts +86 -0
  83. package/src/tool/embroideryStitchPricingEstimator/seo.astro +15 -0
  84. package/src/tool/embroideryStitchPricingEstimator/storage.ts +20 -0
  85. package/src/tool/embroideryStitchPricingEstimator/ui.ts +53 -0
  86. package/src/tool/fabricProjectCalculator/i18n/de.ts +236 -236
  87. package/src/tool/fabricProjectCalculator/i18n/ja.ts +236 -236
  88. package/src/tool/fabricProjectCalculator/i18n/ko.ts +236 -236
  89. package/src/tool/fabricProjectCalculator/i18n/nl.ts +236 -236
  90. package/src/tool/fabricProjectCalculator/i18n/pl.ts +236 -236
  91. package/src/tool/fabricProjectCalculator/i18n/ru.ts +236 -236
  92. package/src/tool/fabricProjectCalculator/i18n/sv.ts +236 -236
  93. package/src/tool/fabricProjectCalculator/i18n/tr.ts +236 -236
  94. package/src/tool/fabricProjectCalculator/i18n/zh.ts +236 -236
  95. package/src/tool/fabricProjectCalculator/seo.astro +15 -15
  96. package/src/tool/fabricTruth/i18n/de.ts +268 -268
  97. package/src/tool/fabricTruth/i18n/en.ts +268 -268
  98. package/src/tool/fabricTruth/i18n/es.ts +302 -302
  99. package/src/tool/fabricTruth/i18n/fr.ts +268 -268
  100. package/src/tool/fabricTruth/i18n/id.ts +268 -268
  101. package/src/tool/fabricTruth/i18n/it.ts +268 -268
  102. package/src/tool/fabricTruth/i18n/ja.ts +268 -268
  103. package/src/tool/fabricTruth/i18n/ko.ts +268 -268
  104. package/src/tool/fabricTruth/i18n/nl.ts +268 -268
  105. package/src/tool/fabricTruth/i18n/pl.ts +268 -268
  106. package/src/tool/fabricTruth/i18n/pt.ts +268 -268
  107. package/src/tool/fabricTruth/i18n/ru.ts +268 -268
  108. package/src/tool/fabricTruth/i18n/sv.ts +268 -268
  109. package/src/tool/fabricTruth/i18n/tr.ts +268 -268
  110. package/src/tool/fabricTruth/i18n/zh.ts +272 -272
  111. package/src/tool/fabricTruth/seo.astro +15 -15
  112. package/src/tool/fiberPrep/i18n/de.ts +215 -215
  113. package/src/tool/fiberPrep/i18n/fr.ts +215 -215
  114. package/src/tool/fiberPrep/i18n/ja.ts +215 -215
  115. package/src/tool/fiberPrep/i18n/ko.ts +215 -215
  116. package/src/tool/fiberPrep/i18n/nl.ts +215 -215
  117. package/src/tool/fiberPrep/i18n/pl.ts +215 -215
  118. package/src/tool/fiberPrep/i18n/ru.ts +215 -215
  119. package/src/tool/fiberPrep/i18n/sv.ts +215 -215
  120. package/src/tool/fiberPrep/i18n/tr.ts +215 -215
  121. package/src/tool/fiberPrep/i18n/zh.ts +215 -215
  122. package/src/tool/fiberPrep/seo.astro +15 -15
  123. package/src/tool/knittingGauge/i18n/de.ts +224 -224
  124. package/src/tool/knittingGauge/i18n/ja.ts +224 -224
  125. package/src/tool/knittingGauge/i18n/ko.ts +224 -224
  126. package/src/tool/knittingGauge/i18n/pl.ts +224 -224
  127. package/src/tool/knittingGauge/i18n/ru.ts +224 -224
  128. package/src/tool/knittingGauge/i18n/tr.ts +224 -224
  129. package/src/tool/knittingGauge/i18n/zh.ts +224 -224
  130. package/src/tool/knittingGauge/seo.astro +15 -15
  131. package/src/tool/laundryGuide/i18n/de.ts +271 -271
  132. package/src/tool/laundryGuide/i18n/en.ts +271 -271
  133. package/src/tool/laundryGuide/i18n/es.ts +271 -271
  134. package/src/tool/laundryGuide/i18n/fr.ts +255 -255
  135. package/src/tool/laundryGuide/i18n/id.ts +271 -271
  136. package/src/tool/laundryGuide/i18n/it.ts +271 -271
  137. package/src/tool/laundryGuide/i18n/ja.ts +271 -271
  138. package/src/tool/laundryGuide/i18n/ko.ts +271 -271
  139. package/src/tool/laundryGuide/i18n/nl.ts +271 -271
  140. package/src/tool/laundryGuide/i18n/pl.ts +271 -271
  141. package/src/tool/laundryGuide/i18n/pt.ts +271 -271
  142. package/src/tool/laundryGuide/i18n/ru.ts +271 -271
  143. package/src/tool/laundryGuide/i18n/sv.ts +271 -271
  144. package/src/tool/laundryGuide/i18n/tr.ts +271 -271
  145. package/src/tool/laundryGuide/i18n/zh.ts +271 -271
  146. package/src/tool/laundryGuide/seo.astro +15 -15
  147. package/src/tool/needleConverter/i18n/de.ts +202 -202
  148. package/src/tool/needleConverter/i18n/es.ts +207 -207
  149. package/src/tool/needleConverter/i18n/fr.ts +207 -207
  150. package/src/tool/needleConverter/i18n/ja.ts +202 -202
  151. package/src/tool/needleConverter/i18n/ko.ts +202 -202
  152. package/src/tool/needleConverter/i18n/nl.ts +202 -202
  153. package/src/tool/needleConverter/i18n/pl.ts +202 -202
  154. package/src/tool/needleConverter/i18n/ru.ts +202 -202
  155. package/src/tool/needleConverter/i18n/sv.ts +202 -202
  156. package/src/tool/needleConverter/i18n/tr.ts +202 -202
  157. package/src/tool/needleConverter/i18n/zh.ts +202 -202
  158. package/src/tool/needleConverter/seo.astro +15 -15
  159. package/src/tool/sewingPatternScaler/component.astro +236 -236
  160. package/src/tool/sewingPatternScaler/i18n/fr.ts +170 -170
  161. package/src/tool/sewingPatternScaler/i18n/ja.ts +114 -114
  162. package/src/tool/sewingPatternScaler/i18n/ko.ts +114 -114
  163. package/src/tool/sewingPatternScaler/i18n/nl.ts +114 -114
  164. package/src/tool/sewingPatternScaler/i18n/pl.ts +114 -114
  165. package/src/tool/sewingPatternScaler/i18n/ru.ts +114 -114
  166. package/src/tool/sewingPatternScaler/i18n/sv.ts +114 -114
  167. package/src/tool/sewingPatternScaler/i18n/tr.ts +114 -114
  168. package/src/tool/sewingPatternScaler/i18n/zh.ts +114 -114
  169. package/src/tool/sewingPatternScaler/seo.astro +15 -15
  170. package/src/tool/shoeSizeConverter/i18n/fr.ts +183 -183
  171. package/src/tool/shoeSizeConverter/i18n/ja.ts +179 -179
  172. package/src/tool/shoeSizeConverter/i18n/ko.ts +179 -179
  173. package/src/tool/shoeSizeConverter/i18n/nl.ts +179 -179
  174. package/src/tool/shoeSizeConverter/i18n/pl.ts +179 -179
  175. package/src/tool/shoeSizeConverter/i18n/ru.ts +179 -179
  176. package/src/tool/shoeSizeConverter/i18n/sv.ts +179 -179
  177. package/src/tool/shoeSizeConverter/i18n/tr.ts +179 -179
  178. package/src/tool/shoeSizeConverter/i18n/zh.ts +179 -179
  179. package/src/tool/shoeSizeConverter/seo.astro +15 -15
  180. package/src/tool/stainChemistry/bibliography.ts +16 -16
  181. package/src/tool/stainChemistry/i18n/de.ts +286 -286
  182. package/src/tool/stainChemistry/i18n/en.ts +289 -289
  183. package/src/tool/stainChemistry/i18n/es.ts +286 -286
  184. package/src/tool/stainChemistry/i18n/fr.ts +296 -296
  185. package/src/tool/stainChemistry/i18n/id.ts +286 -286
  186. package/src/tool/stainChemistry/i18n/it.ts +286 -286
  187. package/src/tool/stainChemistry/i18n/ja.ts +286 -286
  188. package/src/tool/stainChemistry/i18n/ko.ts +283 -283
  189. package/src/tool/stainChemistry/i18n/nl.ts +286 -286
  190. package/src/tool/stainChemistry/i18n/pl.ts +286 -286
  191. package/src/tool/stainChemistry/i18n/pt.ts +286 -286
  192. package/src/tool/stainChemistry/i18n/ru.ts +286 -286
  193. package/src/tool/stainChemistry/i18n/sv.ts +286 -286
  194. package/src/tool/stainChemistry/i18n/tr.ts +286 -286
  195. package/src/tool/stainChemistry/i18n/zh.ts +281 -281
  196. package/src/tool/stainChemistry/seo.astro +15 -15
  197. package/src/tool/yarnCalculator/i18n/de.ts +296 -296
  198. package/src/tool/yarnCalculator/i18n/es.ts +296 -296
  199. package/src/tool/yarnCalculator/i18n/fr.ts +296 -296
  200. package/src/tool/yarnCalculator/i18n/ja.ts +296 -296
  201. package/src/tool/yarnCalculator/i18n/ko.ts +296 -296
  202. package/src/tool/yarnCalculator/i18n/nl.ts +296 -296
  203. package/src/tool/yarnCalculator/i18n/pl.ts +296 -296
  204. package/src/tool/yarnCalculator/i18n/ru.ts +296 -296
  205. package/src/tool/yarnCalculator/i18n/sv.ts +296 -296
  206. package/src/tool/yarnCalculator/i18n/tr.ts +296 -296
  207. package/src/tool/yarnCalculator/i18n/zh.ts +295 -295
  208. package/src/tool/yarnCalculator/seo.astro +15 -15
  209. package/src/tools.ts +2 -2
@@ -1,271 +1,271 @@
1
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
- import type { ToolLocaleContent } from '../../../types';
3
- import { bibliography } from '../bibliography';
4
-
5
- const slug = 'laundry-guide';
6
- const title = 'Textile Care Guide: How to Wash Every Fabric Type';
7
- const description = 'Scientific guide to washing and caring for cotton, wool, silk, linen, and synthetics. Prevent shrinkage, fading, and damage with proper care instructions.';
8
-
9
- const faqData = [
10
- {
11
- question: 'How do I prevent colors from fading?',
12
- answer: 'Wash in cold water (maximum 30°C), turn garments inside out, use detergent for dark colors, and avoid direct sunlight when drying.',
13
- },
14
- {
15
- question: 'Can I wash wool in a washing machine?',
16
- answer: 'Yes, but only with a wool cycle (cold water, gentle agitation). Use wool-specific detergent and never use a regular cycle.',
17
- },
18
- {
19
- question: 'Why is my silk getting water stains?',
20
- answer: 'Silk reacts to water minerals. Use distilled water for the final rinse or lightly rub the stain with pure silk fabric.',
21
- },
22
- ];
23
-
24
- const howToData = [
25
- { name: 'Check the label', text: 'Always read the care instructions on the garment label before washing.' },
26
- { name: 'Sort by fiber type', text: 'Wash natural fibers separately from synthetics when possible.' },
27
- { name: 'Choose water temperature', text: 'Use cold water for delicate fabrics and hot water only for sturdy materials.' },
28
- ];
29
-
30
- const faqSchema: WithContext<FAQPage> = {
31
- '@context': 'https://schema.org',
32
- '@type': 'FAQPage',
33
- mainEntity: faqData.map((item) => ({
34
- '@type': 'Question',
35
- name: item.question,
36
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
37
- })),
38
- };
39
-
40
- const howToSchema: WithContext<HowTo> = {
41
- '@context': 'https://schema.org',
42
- '@type': 'HowTo',
43
- name: title,
44
- description: description,
45
- step: howToData.map((step) => ({
46
- '@type': 'HowToStep',
47
- name: step.name,
48
- text: step.text,
49
- })),
50
- };
51
-
52
- const appSchema: WithContext<SoftwareApplication> = {
53
- '@context': 'https://schema.org',
54
- '@type': 'SoftwareApplication',
55
- name: title,
56
- description: description,
57
- applicationCategory: 'UtilityApplication',
58
- operatingSystem: 'All',
59
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
60
- inLanguage: 'en',
61
- };
62
-
63
- export const content: ToolLocaleContent = {
64
- slug,
65
- title,
66
- description,
67
- ui: {
68
- selectMaterialTitle: 'Select Fabric',
69
- selectMaterialPrompt: 'Select a fabric to see care instructions',
70
- careInstructions: 'Premium care instructions',
71
- maxTemp: 'Max Temperature',
72
- ironing: 'Ironing',
73
- drying: 'Drying',
74
- avoidLabel: 'Things to AVOID',
75
- sosLabel: 'Maintenance Tip',
76
- textileData: {
77
- cotton: {
78
- name: "Cotton",
79
- description: "Natural plant fiber, soft and breathable. The king of basics.",
80
- family: "natural",
81
- origin: "Cotton plant capsule",
82
- breathability: 9,
83
- durability: 7,
84
- warmth: 4,
85
- washing: "Cold or lukewarm water (shrinks with heat). Allows strong spinning.",
86
- drying: "Dryer on medium heat or air dry.",
87
- ironing: "High heat with steam while still damp.",
88
- donts: ["Leave wet for long (mold risk)", "Excess bleach (weakens fibers)"],
89
- sos: "Shrunk? Soak in lukewarm water with hair conditioner and gently stretch.",
90
- icon: "mdi:tshirt-crew",
91
- color: "#60A5FA",
92
- maxTemp: "40-60°C",
93
- isNoble: false,
94
- },
95
- linen: {
96
- name: "Linen",
97
- description: "Very strong plant fiber, fresh and with characteristic wrinkle.",
98
- family: "natural",
99
- origin: "Linen plant stem",
100
- breathability: 10,
101
- durability: 9,
102
- warmth: 2,
103
- washing: "Delicate cycle, don't overfill drum (needs water to avoid breaking).",
104
- drying: "Air dry only. NEVER use dryer (breaks fibers).",
105
- ironing: "Maximum temperature, always with very damp garment.",
106
- donts: ["Strong spinning", "Always folding same way (fibers break)"],
107
- sos: "Shine from ironing? Wipe with cloth dampened in white vinegar.",
108
- icon: "mdi:leaf",
109
- color: "#A7F3D0",
110
- maxTemp: "60°C",
111
- isNoble: true,
112
- },
113
- wool: {
114
- name: "Wool / Merino",
115
- description: "Protein fiber, excellent thermal insulator and elastic.",
116
- family: "natural",
117
- origin: "Sheep fleece",
118
- breathability: 8,
119
- durability: 6,
120
- warmth: 10,
121
- washing: "Hand wash or wool cycle. Neutral soap. NEVER hot water (felts).",
122
- drying: "Flat on towel. Never hang (deforms).",
123
- ironing: "Vertical steam or medium heat with cloth on top.",
124
- donts: ["Hot water", "Rubbing or wringing", "Bleach (dissolves)"],
125
- sos: "Felted? Almost impossible, but soaking with conditioner may help slightly.",
126
- icon: "mdi:sheep",
127
- color: "#FCD34D",
128
- maxTemp: "30°C",
129
- isNoble: true,
130
- },
131
- silk: {
132
- name: "Silk",
133
- description: "Continuous filament animal fiber. Natural sheen and dry feel.",
134
- family: "natural",
135
- origin: "Silkworm cocoon",
136
- breathability: 7,
137
- durability: 5,
138
- warmth: 6,
139
- washing: "Hand wash in cold water with neutral shampoo. Don't wring.",
140
- drying: "Roll in towel to remove moisture. Air dry in shade.",
141
- ironing: "Low heat, inside out, no direct steam.",
142
- donts: ["Direct sunlight (burns)", "Perfume/Deodorant (stains)", "Water (water marks)"],
143
- sos: "Water stain? Gently rub silk against itself.",
144
- icon: "mdi:ticket-percent",
145
- color: "#F472B6",
146
- maxTemp: "20°C",
147
- isNoble: true,
148
- },
149
- cashmere: {
150
- name: "Cashmere",
151
- description: "Luxury fiber from Cashmere goat. Extremely soft and warm.",
152
- family: "natural",
153
- origin: "Undercoat of Hircus goat",
154
- breathability: 9,
155
- durability: 5,
156
- warmth: 10,
157
- washing: "STRICTLY hand wash with baby shampoo. Cold water. Never rub.",
158
- drying: "Flat on towel, shaping as it dries. Never hang.",
159
- ironing: "Vertical steam without touching or mild heat with cloth.",
160
- donts: ["Washing machine (even wool cycle)", "Fabric softener", "Continuous friction (pilling)"],
161
- sos: "Pilling? Use specialized comb or remove by hand.",
162
- icon: "mdi:crown",
163
- color: "#F59E0B",
164
- maxTemp: "20°C",
165
- isNoble: true,
166
- },
167
- polyester: {
168
- name: "Polyester",
169
- description: "Synthetic petroleum fiber. Resistant, wrinkle-free, doesn't breathe.",
170
- family: "synthetic",
171
- origin: "Petroleum-derived polymers",
172
- breathability: 2,
173
- durability: 10,
174
- warmth: 5,
175
- washing: "Warm/cold water. Tolerates everything, but traps odors and oils.",
176
- drying: "Low dryer or air dry. Dries very quickly.",
177
- ironing: "Low/medium heat. Be careful, it melts.",
178
- donts: ["Excess heat", "Fabric softener (creates waxy film that traps odor)"],
179
- sos: "Persistent odor? Soak in water with vinegar before washing.",
180
- icon: "mdi:oil",
181
- color: "#94A3B8",
182
- maxTemp: "40°C",
183
- isNoble: false,
184
- },
185
- viscose: {
186
- name: "Viscose / Rayon",
187
- description: "Semi-synthetic regenerated cellulose. Silky feel, very absorbent.",
188
- family: "artificial",
189
- origin: "Chemically treated wood pulp",
190
- breathability: 8,
191
- durability: 4,
192
- warmth: 3,
193
- washing: "Delicate in cold. Becomes very weak when wet.",
194
- drying: "Flat or padded hanger. No dryer.",
195
- ironing: "Medium, inside out. No direct steam if possible.",
196
- donts: ["Wring when wet (breaks)", "Long soaks"],
197
- sos: "Shrunken and stiff? Iron with lots of steam to relax fibers.",
198
- icon: "mdi:forest",
199
- color: "#C084FC",
200
- maxTemp: "30°C",
201
- isNoble: false,
202
- },
203
- nylon: {
204
- name: "Nylon (Polyamide)",
205
- description: "Highly resistant to tension and abrasion.",
206
- family: "synthetic",
207
- origin: "Petroleum-derived (polyamide)",
208
- breathability: 3,
209
- durability: 10,
210
- warmth: 4,
211
- washing: "Normal cycle. Be careful mixing colors (absorbs dyes).",
212
- drying: "Air dry. Low dryer.",
213
- ironing: "Very low. Melts quickly.",
214
- donts: ["Bleach (yellows)", "Direct sunlight (fades)"],
215
- sos: "Grayish? Wash with oxygen-based whitener.",
216
- icon: "mdi:parachute",
217
- color: "#2DD4BF",
218
- maxTemp: "40°C",
219
- isNoble: false,
220
- },
221
- acrylic: {
222
- name: "Acrylic",
223
- description: "Synthetic wool imitation. Soft, warm, pills easily.",
224
- family: "synthetic",
225
- origin: "Polyacrylonitrile",
226
- breathability: 4,
227
- durability: 6,
228
- warmth: 8,
229
- washing: "Lukewarm water. Use fabric softener to reduce static.",
230
- drying: "Air dry. Heat permanently deforms garment.",
231
- ironing: "Don't iron",
232
- donts: ["Fabric softener (breaks fibers)", "Strong wringing", "Heat"],
233
- sos: "Lost elasticity? It's irreversible (fibers are broken).",
234
- icon: "mdi:resize",
235
- color: "#450A0A",
236
- maxTemp: "30°C",
237
- isNoble: false,
238
- },
239
- },
240
- },
241
- seo: [
242
- { type: 'title', text: 'Textile Care Mastery: A Scientific Guide to Extending the Life of Your Garments', level: 2 },
243
- { type: 'paragraph', html: 'How many garments have you ruined without knowing it? An accidental shrink in wool, color fading in cotton, a stain that never comes out of silk. Most people wash their clothes without understanding that each fiber has specific needs.' },
244
- { type: 'paragraph', html: 'Our <strong>Laundry Guide</strong> provides scientific instructions based on the actual composition of your garment. It\'s not generic; it\'s specific. It\'s not advice; it\'s science.' },
245
- { type: 'title', text: 'Why Traditional Methods Fail', level: 2 },
246
- { type: 'paragraph', html: 'Your grandmother probably washed everything in hot water with strong soap. It worked for the thick cotton sheets of the 1950s, but the textile world has changed. Modern fibers - from <strong>Lyocell</strong> to <strong>Elastane</strong> - require completely different protocols.' },
247
- { type: 'list', items: ['<strong>Cotton</strong> tolerates hot water but needs gentle cycles to avoid shrinkage.', '<strong>Silk</strong> is fragile above 30°C and requires distilled water.', '<strong>Wool</strong> can feel like a stone if a standard washing machine processes it.', '<strong>Synthetics</strong> don\'t need much care, but they generate static and pill easily.'] },
248
- { type: 'title', text: 'Protocols by Fiber Type', level: 2 },
249
- { type: 'title', text: 'Cotton: The Resilient One', level: 3 },
250
- { type: 'paragraph', html: 'Cotton is forgiving. It can handle water at 40-60°C without problems. The real enemy is chlorine (which weakens the fiber) and high-temperature dryer heat (which causes permanent shrinkage). The rule: always wash inside-out to preserve color.' },
251
- { type: 'title', text: 'Silk: The Diva', level: 3 },
252
- { type: 'paragraph', html: 'Silk requires cold water (maximum 30°C), gentle detergent, and rinse with distilled water if possible. The problem: minerals in tap water leave deposits that make silk look dull and rough. The solution is simple but costly: use distilled water on the final rinse.' },
253
- { type: 'title', text: 'Wool: The Delicate One', level: 3 },
254
- { type: 'paragraph', html: 'Wool is protein, like your hair. Wash at maximum 30°C with wool-specific detergent. Never, ever use a standard cycle: the agitation will shrink it irreversibly. The golden rule: always dry flat, never hanging (it stretches).' },
255
- { type: 'title', text: 'Synthetics: The Easy Ones', level: 3 },
256
- { type: 'paragraph', html: 'Polyester, acrylic, and nylon are resilient. They can handle water at 40°C without problems. The only enemy is static, which causes garments to become electrically charged. The trick: add fabric softener or use a dryer sheet in the dryer.' },
257
- { type: 'title', text: 'Uncomfortable Truths About Drying', level: 2 },
258
- { type: 'paragraph', html: '90% of garment damage happens during drying, not washing. Here\'s why:' },
259
- { type: 'card', title: 'Lint in the Filter', icon: 'mdi:alert', html: 'That lint you see is <strong>fibers detaching</strong> from your clothes. Every dryer cycle destroys a bit more. Synthetics are worse: they pill within weeks.' },
260
- { type: 'card', title: 'Silent Shrinkage', icon: 'mdi:warning', html: 'Dryer heat shrinks most natural fibers permanently. A garment that shrinks 5% in one drying will never return to its original size.' },
261
- { type: 'tip', title: 'Best Drying Practice', html: 'Air dry whenever possible. If you must use a dryer, use low heat and remove clothes while still slightly damp.' },
262
- { type: 'title', text: 'Stains: The Survival Guide', level: 2 },
263
- { type: 'paragraph', html: 'Each fiber reacts differently to chemicals. A wine stain on cotton is treated with cold water; on silk, you need distilled water and pure silk cloth. Here are the basic protocols:' },
264
- { type: 'list', items: ['<strong>Grease:</strong> Use dry soap before washing. Never hot water (sets the stain).', '<strong>Ink/Pen:</strong> Isopropyl alcohol for synthetics; cold water for naturals.', '<strong>Blood:</strong> Cold water ALWAYS. Heat sets it permanently.', '<strong>Wine/Drinks:</strong> Cold water immediately, followed by salt to absorb.'] },
265
- { type: 'paragraph', html: '"Buy less, choose better, and make it last." A well-cared-for garment can last decades. A neglected one, months.' },
266
- ],
267
- faq: faqData,
268
- bibliography: bibliography,
269
- howTo: howToData,
270
- schemas: [faqSchema, howToSchema, appSchema],
271
- };
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+
5
+ const slug = 'laundry-guide';
6
+ const title = 'Textile Care Guide: How to Wash Every Fabric Type';
7
+ const description = 'Scientific guide to washing and caring for cotton, wool, silk, linen, and synthetics. Prevent shrinkage, fading, and damage with proper care instructions.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'How do I prevent colors from fading?',
12
+ answer: 'Wash in cold water (maximum 30°C), turn garments inside out, use detergent for dark colors, and avoid direct sunlight when drying.',
13
+ },
14
+ {
15
+ question: 'Can I wash wool in a washing machine?',
16
+ answer: 'Yes, but only with a wool cycle (cold water, gentle agitation). Use wool-specific detergent and never use a regular cycle.',
17
+ },
18
+ {
19
+ question: 'Why is my silk getting water stains?',
20
+ answer: 'Silk reacts to water minerals. Use distilled water for the final rinse or lightly rub the stain with pure silk fabric.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'Check the label', text: 'Always read the care instructions on the garment label before washing.' },
26
+ { name: 'Sort by fiber type', text: 'Wash natural fibers separately from synthetics when possible.' },
27
+ { name: 'Choose water temperature', text: 'Use cold water for delicate fabrics and hot water only for sturdy materials.' },
28
+ ];
29
+
30
+ const faqSchema: WithContext<FAQPage> = {
31
+ '@context': 'https://schema.org',
32
+ '@type': 'FAQPage',
33
+ mainEntity: faqData.map((item) => ({
34
+ '@type': 'Question',
35
+ name: item.question,
36
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
37
+ })),
38
+ };
39
+
40
+ const howToSchema: WithContext<HowTo> = {
41
+ '@context': 'https://schema.org',
42
+ '@type': 'HowTo',
43
+ name: title,
44
+ description: description,
45
+ step: howToData.map((step) => ({
46
+ '@type': 'HowToStep',
47
+ name: step.name,
48
+ text: step.text,
49
+ })),
50
+ };
51
+
52
+ const appSchema: WithContext<SoftwareApplication> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'SoftwareApplication',
55
+ name: title,
56
+ description: description,
57
+ applicationCategory: 'UtilityApplication',
58
+ operatingSystem: 'All',
59
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
60
+ inLanguage: 'en',
61
+ };
62
+
63
+ export const content: ToolLocaleContent = {
64
+ slug,
65
+ title,
66
+ description,
67
+ ui: {
68
+ selectMaterialTitle: 'Select Fabric',
69
+ selectMaterialPrompt: 'Select a fabric to see care instructions',
70
+ careInstructions: 'Premium care instructions',
71
+ maxTemp: 'Max Temperature',
72
+ ironing: 'Ironing',
73
+ drying: 'Drying',
74
+ avoidLabel: 'Things to AVOID',
75
+ sosLabel: 'Maintenance Tip',
76
+ textileData: {
77
+ cotton: {
78
+ name: "Cotton",
79
+ description: "Natural plant fiber, soft and breathable. The king of basics.",
80
+ family: "natural",
81
+ origin: "Cotton plant capsule",
82
+ breathability: 9,
83
+ durability: 7,
84
+ warmth: 4,
85
+ washing: "Cold or lukewarm water (shrinks with heat). Allows strong spinning.",
86
+ drying: "Dryer on medium heat or air dry.",
87
+ ironing: "High heat with steam while still damp.",
88
+ donts: ["Leave wet for long (mold risk)", "Excess bleach (weakens fibers)"],
89
+ sos: "Shrunk? Soak in lukewarm water with hair conditioner and gently stretch.",
90
+ icon: "mdi:tshirt-crew",
91
+ color: "#60A5FA",
92
+ maxTemp: "40-60°C",
93
+ isNoble: false,
94
+ },
95
+ linen: {
96
+ name: "Linen",
97
+ description: "Very strong plant fiber, fresh and with characteristic wrinkle.",
98
+ family: "natural",
99
+ origin: "Linen plant stem",
100
+ breathability: 10,
101
+ durability: 9,
102
+ warmth: 2,
103
+ washing: "Delicate cycle, don't overfill drum (needs water to avoid breaking).",
104
+ drying: "Air dry only. NEVER use dryer (breaks fibers).",
105
+ ironing: "Maximum temperature, always with very damp garment.",
106
+ donts: ["Strong spinning", "Always folding same way (fibers break)"],
107
+ sos: "Shine from ironing? Wipe with cloth dampened in white vinegar.",
108
+ icon: "mdi:leaf",
109
+ color: "#A7F3D0",
110
+ maxTemp: "60°C",
111
+ isNoble: true,
112
+ },
113
+ wool: {
114
+ name: "Wool / Merino",
115
+ description: "Protein fiber, excellent thermal insulator and elastic.",
116
+ family: "natural",
117
+ origin: "Sheep fleece",
118
+ breathability: 8,
119
+ durability: 6,
120
+ warmth: 10,
121
+ washing: "Hand wash or wool cycle. Neutral soap. NEVER hot water (felts).",
122
+ drying: "Flat on towel. Never hang (deforms).",
123
+ ironing: "Vertical steam or medium heat with cloth on top.",
124
+ donts: ["Hot water", "Rubbing or wringing", "Bleach (dissolves)"],
125
+ sos: "Felted? Almost impossible, but soaking with conditioner may help slightly.",
126
+ icon: "mdi:sheep",
127
+ color: "#FCD34D",
128
+ maxTemp: "30°C",
129
+ isNoble: true,
130
+ },
131
+ silk: {
132
+ name: "Silk",
133
+ description: "Continuous filament animal fiber. Natural sheen and dry feel.",
134
+ family: "natural",
135
+ origin: "Silkworm cocoon",
136
+ breathability: 7,
137
+ durability: 5,
138
+ warmth: 6,
139
+ washing: "Hand wash in cold water with neutral shampoo. Don't wring.",
140
+ drying: "Roll in towel to remove moisture. Air dry in shade.",
141
+ ironing: "Low heat, inside out, no direct steam.",
142
+ donts: ["Direct sunlight (burns)", "Perfume/Deodorant (stains)", "Water (water marks)"],
143
+ sos: "Water stain? Gently rub silk against itself.",
144
+ icon: "mdi:ticket-percent",
145
+ color: "#F472B6",
146
+ maxTemp: "20°C",
147
+ isNoble: true,
148
+ },
149
+ cashmere: {
150
+ name: "Cashmere",
151
+ description: "Luxury fiber from Cashmere goat. Extremely soft and warm.",
152
+ family: "natural",
153
+ origin: "Undercoat of Hircus goat",
154
+ breathability: 9,
155
+ durability: 5,
156
+ warmth: 10,
157
+ washing: "STRICTLY hand wash with baby shampoo. Cold water. Never rub.",
158
+ drying: "Flat on towel, shaping as it dries. Never hang.",
159
+ ironing: "Vertical steam without touching or mild heat with cloth.",
160
+ donts: ["Washing machine (even wool cycle)", "Fabric softener", "Continuous friction (pilling)"],
161
+ sos: "Pilling? Use specialized comb or remove by hand.",
162
+ icon: "mdi:crown",
163
+ color: "#F59E0B",
164
+ maxTemp: "20°C",
165
+ isNoble: true,
166
+ },
167
+ polyester: {
168
+ name: "Polyester",
169
+ description: "Synthetic petroleum fiber. Resistant, wrinkle-free, doesn't breathe.",
170
+ family: "synthetic",
171
+ origin: "Petroleum-derived polymers",
172
+ breathability: 2,
173
+ durability: 10,
174
+ warmth: 5,
175
+ washing: "Warm/cold water. Tolerates everything, but traps odors and oils.",
176
+ drying: "Low dryer or air dry. Dries very quickly.",
177
+ ironing: "Low/medium heat. Be careful, it melts.",
178
+ donts: ["Excess heat", "Fabric softener (creates waxy film that traps odor)"],
179
+ sos: "Persistent odor? Soak in water with vinegar before washing.",
180
+ icon: "mdi:oil",
181
+ color: "#94A3B8",
182
+ maxTemp: "40°C",
183
+ isNoble: false,
184
+ },
185
+ viscose: {
186
+ name: "Viscose / Rayon",
187
+ description: "Semi-synthetic regenerated cellulose. Silky feel, very absorbent.",
188
+ family: "artificial",
189
+ origin: "Chemically treated wood pulp",
190
+ breathability: 8,
191
+ durability: 4,
192
+ warmth: 3,
193
+ washing: "Delicate in cold. Becomes very weak when wet.",
194
+ drying: "Flat or padded hanger. No dryer.",
195
+ ironing: "Medium, inside out. No direct steam if possible.",
196
+ donts: ["Wring when wet (breaks)", "Long soaks"],
197
+ sos: "Shrunken and stiff? Iron with lots of steam to relax fibers.",
198
+ icon: "mdi:forest",
199
+ color: "#C084FC",
200
+ maxTemp: "30°C",
201
+ isNoble: false,
202
+ },
203
+ nylon: {
204
+ name: "Nylon (Polyamide)",
205
+ description: "Highly resistant to tension and abrasion.",
206
+ family: "synthetic",
207
+ origin: "Petroleum-derived (polyamide)",
208
+ breathability: 3,
209
+ durability: 10,
210
+ warmth: 4,
211
+ washing: "Normal cycle. Be careful mixing colors (absorbs dyes).",
212
+ drying: "Air dry. Low dryer.",
213
+ ironing: "Very low. Melts quickly.",
214
+ donts: ["Bleach (yellows)", "Direct sunlight (fades)"],
215
+ sos: "Grayish? Wash with oxygen-based whitener.",
216
+ icon: "mdi:parachute",
217
+ color: "#2DD4BF",
218
+ maxTemp: "40°C",
219
+ isNoble: false,
220
+ },
221
+ acrylic: {
222
+ name: "Acrylic",
223
+ description: "Synthetic wool imitation. Soft, warm, pills easily.",
224
+ family: "synthetic",
225
+ origin: "Polyacrylonitrile",
226
+ breathability: 4,
227
+ durability: 6,
228
+ warmth: 8,
229
+ washing: "Lukewarm water. Use fabric softener to reduce static.",
230
+ drying: "Air dry. Heat permanently deforms garment.",
231
+ ironing: "Don't iron",
232
+ donts: ["Fabric softener (breaks fibers)", "Strong wringing", "Heat"],
233
+ sos: "Lost elasticity? It's irreversible (fibers are broken).",
234
+ icon: "mdi:resize",
235
+ color: "#450A0A",
236
+ maxTemp: "30°C",
237
+ isNoble: false,
238
+ },
239
+ },
240
+ },
241
+ seo: [
242
+ { type: 'title', text: 'Textile Care Mastery: A Scientific Guide to Extending the Life of Your Garments', level: 2 },
243
+ { type: 'paragraph', html: 'How many garments have you ruined without knowing it? An accidental shrink in wool, color fading in cotton, a stain that never comes out of silk. Most people wash their clothes without understanding that each fiber has specific needs.' },
244
+ { type: 'paragraph', html: 'Our <strong>Laundry Guide</strong> provides scientific instructions based on the actual composition of your garment. It\'s not generic; it\'s specific. It\'s not advice; it\'s science.' },
245
+ { type: 'title', text: 'Why Traditional Methods Fail', level: 2 },
246
+ { type: 'paragraph', html: 'Your grandmother probably washed everything in hot water with strong soap. It worked for the thick cotton sheets of the 1950s, but the textile world has changed. Modern fibers - from <strong>Lyocell</strong> to <strong>Elastane</strong> - require completely different protocols.' },
247
+ { type: 'list', items: ['<strong>Cotton</strong> tolerates hot water but needs gentle cycles to avoid shrinkage.', '<strong>Silk</strong> is fragile above 30°C and requires distilled water.', '<strong>Wool</strong> can feel like a stone if a standard washing machine processes it.', '<strong>Synthetics</strong> don\'t need much care, but they generate static and pill easily.'] },
248
+ { type: 'title', text: 'Protocols by Fiber Type', level: 2 },
249
+ { type: 'title', text: 'Cotton: The Resilient One', level: 3 },
250
+ { type: 'paragraph', html: 'Cotton is forgiving. It can handle water at 40-60°C without problems. The real enemy is chlorine (which weakens the fiber) and high-temperature dryer heat (which causes permanent shrinkage). The rule: always wash inside-out to preserve color.' },
251
+ { type: 'title', text: 'Silk: The Diva', level: 3 },
252
+ { type: 'paragraph', html: 'Silk requires cold water (maximum 30°C), gentle detergent, and rinse with distilled water if possible. The problem: minerals in tap water leave deposits that make silk look dull and rough. The solution is simple but costly: use distilled water on the final rinse.' },
253
+ { type: 'title', text: 'Wool: The Delicate One', level: 3 },
254
+ { type: 'paragraph', html: 'Wool is protein, like your hair. Wash at maximum 30°C with wool-specific detergent. Never, ever use a standard cycle: the agitation will shrink it irreversibly. The golden rule: always dry flat, never hanging (it stretches).' },
255
+ { type: 'title', text: 'Synthetics: The Easy Ones', level: 3 },
256
+ { type: 'paragraph', html: 'Polyester, acrylic, and nylon are resilient. They can handle water at 40°C without problems. The only enemy is static, which causes garments to become electrically charged. The trick: add fabric softener or use a dryer sheet in the dryer.' },
257
+ { type: 'title', text: 'Uncomfortable Truths About Drying', level: 2 },
258
+ { type: 'paragraph', html: '90% of garment damage happens during drying, not washing. Here\'s why:' },
259
+ { type: 'card', title: 'Lint in the Filter', icon: 'mdi:alert', html: 'That lint you see is <strong>fibers detaching</strong> from your clothes. Every dryer cycle destroys a bit more. Synthetics are worse: they pill within weeks.' },
260
+ { type: 'card', title: 'Silent Shrinkage', icon: 'mdi:warning', html: 'Dryer heat shrinks most natural fibers permanently. A garment that shrinks 5% in one drying will never return to its original size.' },
261
+ { type: 'tip', title: 'Best Drying Practice', html: 'Air dry whenever possible. If you must use a dryer, use low heat and remove clothes while still slightly damp.' },
262
+ { type: 'title', text: 'Stains: The Survival Guide', level: 2 },
263
+ { type: 'paragraph', html: 'Each fiber reacts differently to chemicals. A wine stain on cotton is treated with cold water; on silk, you need distilled water and pure silk cloth. Here are the basic protocols:' },
264
+ { type: 'list', items: ['<strong>Grease:</strong> Use dry soap before washing. Never hot water (sets the stain).', '<strong>Ink/Pen:</strong> Isopropyl alcohol for synthetics; cold water for naturals.', '<strong>Blood:</strong> Cold water ALWAYS. Heat sets it permanently.', '<strong>Wine/Drinks:</strong> Cold water immediately, followed by salt to absorb.'] },
265
+ { type: 'paragraph', html: '"Buy less, choose better, and make it last." A well-cared-for garment can last decades. A neglected one, months.' },
266
+ ],
267
+ faq: faqData,
268
+ bibliography: bibliography,
269
+ howTo: howToData,
270
+ schemas: [faqSchema, howToSchema, appSchema],
271
+ };