@jjlmoya/utils-textiles 1.1.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 (134) hide show
  1. package/package.json +60 -0
  2. package/src/category/i18n/en.ts +76 -0
  3. package/src/category/i18n/es.ts +76 -0
  4. package/src/category/i18n/fr.ts +73 -0
  5. package/src/category/index.ts +17 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +11 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +32 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +253 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +19 -0
  17. package/src/tests/locale_completeness.test.ts +42 -0
  18. package/src/tests/mocks/astro_mock.js +2 -0
  19. package/src/tests/no_h1_in_components.test.ts +48 -0
  20. package/src/tests/seo_length.test.ts +22 -0
  21. package/src/tests/title_separators.test.ts +40 -0
  22. package/src/tests/tool_validation.test.ts +17 -0
  23. package/src/tool/burnTest/bibliography.astro +34 -0
  24. package/src/tool/burnTest/component.astro +602 -0
  25. package/src/tool/burnTest/i18n/en.ts +225 -0
  26. package/src/tool/burnTest/i18n/es.ts +225 -0
  27. package/src/tool/burnTest/i18n/fr.ts +225 -0
  28. package/src/tool/burnTest/index.ts +34 -0
  29. package/src/tool/burnTest/logic.ts +3 -0
  30. package/src/tool/burnTest/seo.astro +40 -0
  31. package/src/tool/burnTest/ui.ts +36 -0
  32. package/src/tool/clothingSizeConverter/bibliography.astro +34 -0
  33. package/src/tool/clothingSizeConverter/component.astro +1226 -0
  34. package/src/tool/clothingSizeConverter/i18n/en.ts +356 -0
  35. package/src/tool/clothingSizeConverter/i18n/es.ts +356 -0
  36. package/src/tool/clothingSizeConverter/i18n/fr.ts +356 -0
  37. package/src/tool/clothingSizeConverter/index.ts +34 -0
  38. package/src/tool/clothingSizeConverter/logic.ts +30 -0
  39. package/src/tool/clothingSizeConverter/seo.astro +40 -0
  40. package/src/tool/clothingSizeConverter/ui.ts +70 -0
  41. package/src/tool/fabricProjectCalculator/bibliography.astro +19 -0
  42. package/src/tool/fabricProjectCalculator/component.astro +914 -0
  43. package/src/tool/fabricProjectCalculator/i18n/en.ts +250 -0
  44. package/src/tool/fabricProjectCalculator/i18n/es.ts +250 -0
  45. package/src/tool/fabricProjectCalculator/i18n/fr.ts +250 -0
  46. package/src/tool/fabricProjectCalculator/index.ts +34 -0
  47. package/src/tool/fabricProjectCalculator/logic.ts +89 -0
  48. package/src/tool/fabricProjectCalculator/seo.astro +40 -0
  49. package/src/tool/fabricProjectCalculator/ui.ts +57 -0
  50. package/src/tool/fabricTruth/bibliography.astro +40 -0
  51. package/src/tool/fabricTruth/component.astro +708 -0
  52. package/src/tool/fabricTruth/i18n/en.ts +282 -0
  53. package/src/tool/fabricTruth/i18n/es.ts +316 -0
  54. package/src/tool/fabricTruth/i18n/fr.ts +282 -0
  55. package/src/tool/fabricTruth/index.ts +34 -0
  56. package/src/tool/fabricTruth/logic.ts +91 -0
  57. package/src/tool/fabricTruth/seo.astro +40 -0
  58. package/src/tool/fabricTruth/ui.ts +28 -0
  59. package/src/tool/fiberPrep/bibliography.astro +33 -0
  60. package/src/tool/fiberPrep/component.astro +987 -0
  61. package/src/tool/fiberPrep/i18n/en.ts +225 -0
  62. package/src/tool/fiberPrep/i18n/es.ts +225 -0
  63. package/src/tool/fiberPrep/i18n/fr.ts +225 -0
  64. package/src/tool/fiberPrep/index.ts +34 -0
  65. package/src/tool/fiberPrep/logic.ts +36 -0
  66. package/src/tool/fiberPrep/seo.astro +40 -0
  67. package/src/tool/fiberPrep/ui.ts +38 -0
  68. package/src/tool/knittingGauge/bibliography.astro +14 -0
  69. package/src/tool/knittingGauge/component.astro +828 -0
  70. package/src/tool/knittingGauge/i18n/en.ts +234 -0
  71. package/src/tool/knittingGauge/i18n/es.ts +234 -0
  72. package/src/tool/knittingGauge/i18n/fr.ts +234 -0
  73. package/src/tool/knittingGauge/index.ts +34 -0
  74. package/src/tool/knittingGauge/logic.ts +28 -0
  75. package/src/tool/knittingGauge/seo.astro +40 -0
  76. package/src/tool/knittingGauge/ui.ts +41 -0
  77. package/src/tool/laundryGuide/bibliography.astro +33 -0
  78. package/src/tool/laundryGuide/component.astro +486 -0
  79. package/src/tool/laundryGuide/data-en.ts +166 -0
  80. package/src/tool/laundryGuide/data-es.ts +166 -0
  81. package/src/tool/laundryGuide/data-fr.ts +103 -0
  82. package/src/tool/laundryGuide/i18n/en.ts +275 -0
  83. package/src/tool/laundryGuide/i18n/es.ts +275 -0
  84. package/src/tool/laundryGuide/i18n/fr.ts +291 -0
  85. package/src/tool/laundryGuide/index.ts +29 -0
  86. package/src/tool/laundryGuide/logic.ts +19 -0
  87. package/src/tool/laundryGuide/seo.astro +40 -0
  88. package/src/tool/needleConverter/bibliography.astro +14 -0
  89. package/src/tool/needleConverter/component.astro +518 -0
  90. package/src/tool/needleConverter/i18n/en.ts +217 -0
  91. package/src/tool/needleConverter/i18n/es.ts +217 -0
  92. package/src/tool/needleConverter/i18n/fr.ts +217 -0
  93. package/src/tool/needleConverter/index.ts +34 -0
  94. package/src/tool/needleConverter/logic.ts +31 -0
  95. package/src/tool/needleConverter/seo.astro +15 -0
  96. package/src/tool/needleConverter/ui.ts +17 -0
  97. package/src/tool/sewingPatternScaler/bibliography.astro +14 -0
  98. package/src/tool/sewingPatternScaler/component.astro +550 -0
  99. package/src/tool/sewingPatternScaler/i18n/en.ts +196 -0
  100. package/src/tool/sewingPatternScaler/i18n/es.ts +231 -0
  101. package/src/tool/sewingPatternScaler/i18n/fr.ts +187 -0
  102. package/src/tool/sewingPatternScaler/index.ts +34 -0
  103. package/src/tool/sewingPatternScaler/logic.ts +35 -0
  104. package/src/tool/sewingPatternScaler/seo.astro +49 -0
  105. package/src/tool/sewingPatternScaler/ui.ts +29 -0
  106. package/src/tool/shoeSizeConverter/bibliography.astro +34 -0
  107. package/src/tool/shoeSizeConverter/component.astro +437 -0
  108. package/src/tool/shoeSizeConverter/i18n/en.ts +188 -0
  109. package/src/tool/shoeSizeConverter/i18n/es.ts +188 -0
  110. package/src/tool/shoeSizeConverter/i18n/fr.ts +188 -0
  111. package/src/tool/shoeSizeConverter/index.ts +34 -0
  112. package/src/tool/shoeSizeConverter/logic.ts +8 -0
  113. package/src/tool/shoeSizeConverter/seo.astro +40 -0
  114. package/src/tool/shoeSizeConverter/ui.ts +21 -0
  115. package/src/tool/stainChemistry/bibliography.astro +40 -0
  116. package/src/tool/stainChemistry/component.astro +717 -0
  117. package/src/tool/stainChemistry/i18n/en.ts +303 -0
  118. package/src/tool/stainChemistry/i18n/es.ts +300 -0
  119. package/src/tool/stainChemistry/i18n/fr.ts +310 -0
  120. package/src/tool/stainChemistry/index.ts +34 -0
  121. package/src/tool/stainChemistry/logic.ts +11 -0
  122. package/src/tool/stainChemistry/seo.astro +40 -0
  123. package/src/tool/stainChemistry/ui.ts +51 -0
  124. package/src/tool/yarnCalculator/bibliography.astro +19 -0
  125. package/src/tool/yarnCalculator/component.astro +792 -0
  126. package/src/tool/yarnCalculator/i18n/en.ts +310 -0
  127. package/src/tool/yarnCalculator/i18n/es.ts +310 -0
  128. package/src/tool/yarnCalculator/i18n/fr.ts +310 -0
  129. package/src/tool/yarnCalculator/index.ts +34 -0
  130. package/src/tool/yarnCalculator/logic.ts +84 -0
  131. package/src/tool/yarnCalculator/seo.astro +14 -0
  132. package/src/tool/yarnCalculator/ui.ts +42 -0
  133. package/src/tools.ts +16 -0
  134. package/src/types.ts +72 -0
@@ -0,0 +1,234 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { KnittingGaugeUI } from '../ui';
4
+
5
+ const slug = 'calculateur-tension-tricot';
6
+ const title = 'Calculateur de Tension de Tricot';
7
+ const description =
8
+ 'Recalculez facilement les mailles et les rangs de n\'importe quel patron de tricot ou crochet. Ajustez la tension par multiples et facteur d\'échelle pour un résultat professionnel.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Qu\'est-ce que la tension ou gauge en tricot?',
13
+ answer:
14
+ 'C\'est la mesure du nombre de mailles et de rangs qui tiennent dans une surface donnée (généralement 10x10 cm). Elle est fondamentale car elle détermine la taille finale du vêtement selon l\'aiguille et le fil utilisés.',
15
+ },
16
+ {
17
+ question: 'Comment le changement de tension affecte-t-il la taille?',
18
+ answer:
19
+ 'Si votre tension a plus de mailles par centimètre que le patron, le vêtement sera plus petit. S\'il a moins de mailles, le vêtement sera plus grand. C\'est pourquoi il est vital de recalculer les mailles ou de changer d\'aiguilles.',
20
+ },
21
+ {
22
+ question: 'Pourquoi l\'ajustement par multiples est-il important?',
23
+ answer:
24
+ 'De nombreux patrons ont des motifs (dentelles, torsades, dessins) qui nécessitent un nombre spécifique de mailles pour se compléter. Notre calculateur ajuste le total au multiple le plus proche pour ne pas briser le design.',
25
+ },
26
+ {
27
+ question: 'Dois-je laver l\'échantillon avant de mesurer?',
28
+ answer:
29
+ 'Oui, toujours. Le "blocage" (laver et mettre en forme) détend les fibres et montre la tension réelle que le vêtement aura après sa première utilisation et son lavage.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Identifier la tension du patron',
36
+ text: 'Cherchez dans les instructions du patron combien de mailles et de rangs sont indiqués pour un échantillon de 10x10 cm ou 4x4 pouces.',
37
+ },
38
+ {
39
+ name: 'Tricoter et mesurer votre propre échantillon',
40
+ text: 'Tricotez un échantillon avec votre fil et vos aiguilles, bloquez-le et mesurez combien de mailles et de rangs vous avez dans cette même zone.',
41
+ },
42
+ {
43
+ name: 'Configurer le calculateur',
44
+ text: 'Entrez les données de l\'échantillon du patron et de votre propre échantillon. Ajoutez le total de mailles pour votre taille et les multiples du motif s\'il y en a.',
45
+ },
46
+ {
47
+ name: 'Obtenir les résultats',
48
+ text: 'Vérifiez le nouveau nombre de mailles à monter et le facteur d\'échelle pour savoir si vous devez également ajuster la longueur du vêtement.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step) => ({
68
+ '@type': 'HowToStep',
69
+ name: step.name,
70
+ text: step.text,
71
+ })),
72
+ };
73
+
74
+ const appSchema: WithContext<SoftwareApplication> = {
75
+ '@context': 'https://schema.org',
76
+ '@type': 'SoftwareApplication',
77
+ name: title,
78
+ description,
79
+ applicationCategory: 'UtilityApplication',
80
+ operatingSystem: 'All',
81
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
82
+ inLanguage: 'fr',
83
+ };
84
+
85
+ export const content: ToolLocaleContent<KnittingGaugeUI> = {
86
+ slug,
87
+ title,
88
+ description,
89
+ faqTitle: 'Questions Fréquentes',
90
+ faq: faqData,
91
+ bibliographyTitle: 'Bibliographie',
92
+ bibliography: [
93
+ {
94
+ name: 'The Importance of Gauge - Tin Can Knits',
95
+ url: 'https://blog.tincanknits.com/2013/08/17/gauge/',
96
+ },
97
+ {
98
+ name: 'Knitting Gauge: How to Measure Stitches and Rows',
99
+ url: 'https://elizabethsmithknits.com/2020/10/30/how-to-measure-your-gauge-swatch/',
100
+ },
101
+ ],
102
+ howTo: howToData,
103
+ schemas: [faqSchema, howToSchema, appSchema],
104
+ seo: [
105
+ {
106
+ type: 'title',
107
+ text: 'Calculateur de Tension de Tricot en Ligne: Guide Technique',
108
+ level: 2,
109
+ },
110
+ {
111
+ type: 'paragraph',
112
+ html: 'Si vous avez déjà terminé un pull qui semblait conçu pour un géant ou un bonnet qui couvrait à peine le sommet du crâne, vous connaissez déjà l\'importance de la <strong>tension ou gauge</strong>. Dans le monde du tricot et du crochet, la tension est la relation entre l\'épaisseur du fil, la taille des aiguilles et la force avec laquelle chaque tricoteur manipule la pelote.',
113
+ },
114
+ {
115
+ type: 'title',
116
+ text: 'Pourquoi la Tension est-elle Vitale en Tricot?',
117
+ level: 3,
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'Ce calculateur de tension pour tricot est un outil technique conçu pour éliminer les conjectures mathématiques et vous permettre de vous concentrer sur la créativité. En saisissant les données de l\'échantillon du patron et de votre propre échantillon, vous obtiendrez des ajustements précis de mailles et de rangs.',
122
+ },
123
+ {
124
+ type: 'title',
125
+ text: 'Comment utiliser le calculateur de tension',
126
+ level: 3,
127
+ },
128
+ {
129
+ type: 'list',
130
+ items: [
131
+ '<strong>Tricotez un échantillon:</strong> Ne vous limitez pas à 10x10 cm. Tricotez au moins 15x15 cm pour que les bords ne faussent pas la mesure centrale.',
132
+ '<strong>Bloquez votre échantillon:</strong> Lavez et séchez l\'échantillon comme vous le feriez avec le vêtement terminé. De nombreuses fibres de laine s\'étendent ou grossissent lorsqu\'elles sont mouillées.',
133
+ '<strong>Mesurez avec précision:</strong> Utilisez une règle rigide ou un gabarit de 10 cm. Comptez combien de mailles entrent horizontalement et combien de rangs verticalement.',
134
+ '<strong>Entrez les données:</strong> Placez les valeurs du patron à gauche et vos valeurs réelles à droite. L\'outil recalculera automatiquement combien de mailles vous avez besoin.',
135
+ ],
136
+ },
137
+ {
138
+ type: 'title',
139
+ text: 'Interprétation des Résultats: Le Facteur d\'Échelle',
140
+ level: 3,
141
+ },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'Le facteur d\'échelle est le multiplicateur que nous appliquons à chaque instruction du patron. Si votre tension est de 22 mailles et que le patron en demande 20, votre facteur d\'échelle est de 1.1. Une déviation de 0-2% est idéale, de 2-10% est modérée, de 10-25% nécessite un recalcul obligatoire, et plus de 25% représente un risque structurel.',
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'Traitement des Multiples et Motifs',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'paragraph',
153
+ html: 'L\'un des plus grands défis lors du recalcul d\'un patron est de maintenir l\'intégrité des dentelles, torsades ou motifs. La fonction d\'<strong>ajustement par multiples</strong> de ce calculateur suggère le nombre de mailles le plus proche qui respecte l\'architecture du design.',
154
+ },
155
+ {
156
+ type: 'tip',
157
+ title: 'Conseil d\'Expert',
158
+ html: '<p>Il est généralement préférable d\'utiliser ce calculateur et de travailler avec la tension naturelle de votre fil, en adaptant le nombre de mailles plutôt que de forcer la tension en changeant radicalement la taille des aiguilles.</p>',
159
+ },
160
+ {
161
+ type: 'title',
162
+ text: 'Avantages de notre outil d\'ajustement',
163
+ level: 3,
164
+ },
165
+ {
166
+ type: 'list',
167
+ items: [
168
+ 'Ajustement automatique des mailles et des rangs avec facteur d\'échelle précis.',
169
+ 'Support pour les multiples complexes (X + Y) pour maintenir l\'intégrité du motif.',
170
+ 'Estimation des grammes de laine nécessaires pour le projet complet.',
171
+ 'Visualiseur dynamique de l\'échantillon montrant la densité du tissu en temps réel.',
172
+ ],
173
+ },
174
+ {
175
+ type: 'card',
176
+ title: 'Tension / Gauge',
177
+ icon: 'mdi:ruler',
178
+ html: 'Nombre de mailles et de rangs contenus dans un carré de <strong>10x10 cm</strong> ou <strong>4x4 pouces</strong>. C\'est la référence universelle de tous les patrons de tricot.',
179
+ },
180
+ {
181
+ type: 'card',
182
+ title: 'Blocage',
183
+ icon: 'mdi:water',
184
+ html: 'Processus de mouillage et de mise en forme du vêtement pour fixer les mailles. Révèle la <strong>tension réelle</strong> que le vêtement aura après sa première utilisation et son lavage.',
185
+ },
186
+ {
187
+ type: 'card',
188
+ title: 'Facteur d\'Échelle',
189
+ icon: 'mdi:scale',
190
+ html: 'Proportion mathématique entre l\'échantillon du patron et l\'échantillon réel du tricoteur. Détermine combien de mailles et de rangs ajuster pour maintenir les <strong>mesures correctes</strong>.',
191
+ },
192
+ ],
193
+ ui: {
194
+ sectionOriginalGauge: 'Tension du Patron',
195
+ sectionMyGauge: 'Mon Échantillon Actuel',
196
+ sectionProject: 'Structure du Projet',
197
+ labelStitches: 'Mailles',
198
+ labelRows: 'Rangs',
199
+ labelWidth: 'Largeur',
200
+ labelLength: 'Longueur',
201
+ labelUnit: 'Unité de Mesure',
202
+ labelNeedle: 'Aiguille',
203
+ labelNeedleMm: 'Aiguille (mm)',
204
+ labelWeight: 'Poids (g)',
205
+ labelWeightOptional: 'optionnel',
206
+ labelPatternSts: 'Mailles Patron',
207
+ labelPatternRows: 'Rangs Patron',
208
+ labelMultiples: 'Multiples',
209
+ labelMultiplesExample: 'Ex: 10 + 2',
210
+ labelMultiplesPlaceholder: 'Multiple + Lisière',
211
+ unitEU: '10 x 10 cm (Standard EU)',
212
+ unitUS: '4 x 4 pouces (Standard US)',
213
+ btnClear: 'Effacer',
214
+ btnShare: 'Partager',
215
+ btnCopied: 'Copié!',
216
+ resSuggestedSts: 'Mailles suggérées à monter',
217
+ resNewRows: 'Nouveaux Rangs',
218
+ resNewRowsTooltip: 'Nombre de rangs nécessaires pour égaler la longueur du patron original avec votre tension actuelle.',
219
+ resScaleFactor: 'Facteur d\'Échelle',
220
+ resScaleFactorTooltip: 'Rapport de taille entre votre tricot et le patron. Une valeur négative indique que votre tricot est plus dense.',
221
+ resSuggestion: 'Suggestion',
222
+ resSuggestionTooltip: 'Recommandation technique pour ajuster votre tension sans recalculer chaque maille du patron.',
223
+ suggestionIdeal: 'Idéal',
224
+ suggestionDown: 'Descendre une Taille',
225
+ suggestionUp: 'Monter une Taille',
226
+ suggestionDownDetail: 'Utilisez une aiguille de {n}mm ou taille inférieure.',
227
+ suggestionUpDetail: 'Utilisez une aiguille de {n}mm ou taille supérieure.',
228
+ multiplesNoteFormat: 'Ajusté de {n} mailles (Mult. {m})',
229
+ yarnTitle: 'Estimation de Laine pour le Projet',
230
+ yarnResultFormat: 'Laine estimée: <strong>{g}g</strong>',
231
+ yarnSafetyFormat: '(+{s}g de marge de sécurité)',
232
+ alertDanger: 'Différence extrême (>25%). La chute et la structure du vêtement seront altérées.',
233
+ },
234
+ };
@@ -0,0 +1,34 @@
1
+ import type { TextilesToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
2
+ import KnittingGaugeComponent from './component.astro';
3
+ import KnittingGaugeSEO from './seo.astro';
4
+ import KnittingGaugeBibliography from './bibliography.astro';
5
+
6
+ import type { KnittingGaugeUI } from './ui';
7
+
8
+ export type KnittingGaugeLocaleContent = ToolLocaleContent<KnittingGaugeUI>;
9
+
10
+ import { content as es } from './i18n/es';
11
+ import { content as en } from './i18n/en';
12
+ import { content as fr } from './i18n/fr';
13
+
14
+ export const knittingGauge: TextilesToolEntry<KnittingGaugeUI> = {
15
+ id: 'knitting-gauge-calculator',
16
+ icons: {
17
+ bg: 'mdi:ruler-square',
18
+ fg: 'mdi:needle',
19
+ },
20
+ i18n: {
21
+ es: async () => es,
22
+ en: async () => en,
23
+ fr: async () => fr,
24
+ },
25
+ };
26
+
27
+ export { KnittingGaugeComponent, KnittingGaugeSEO, KnittingGaugeBibliography };
28
+
29
+ export const KNITTING_GAUGE_TOOL: ToolDefinition = {
30
+ entry: knittingGauge,
31
+ Component: KnittingGaugeComponent,
32
+ SEOComponent: KnittingGaugeSEO,
33
+ BibliographyComponent: KnittingGaugeBibliography,
34
+ };
@@ -0,0 +1,28 @@
1
+ export interface MultiplesResult {
2
+ base: number;
3
+ offset: number;
4
+ }
5
+
6
+ export function parseMultiples(str: string): MultiplesResult {
7
+ if (!str) return { base: 0, offset: 0 };
8
+ const match = str.replace(/\s+/g, '').match(/(\d+)(?:\+(\d+))?/);
9
+ if (!match) return { base: 0, offset: 0 };
10
+ return {
11
+ base: parseInt(match[1]) || 0,
12
+ offset: parseInt(match[2]) || 0,
13
+ };
14
+ }
15
+
16
+ export function adjustForMultiples(rawSts: number, base: number, offset: number): number {
17
+ const low = Math.floor((rawSts - offset) / base) * base + offset;
18
+ const high = Math.ceil((rawSts - offset) / base) * base + offset;
19
+ return Math.abs(rawSts - low) <= Math.abs(rawSts - high) ? low : high;
20
+ }
21
+
22
+ export function computeScaleFactor(patternSts: number, mySts: number): number {
23
+ return (patternSts / mySts - 1) * 100;
24
+ }
25
+
26
+ export function computeNeedleStep(scaleDiffAbs: number): number {
27
+ return Math.ceil(scaleDiffAbs / 5) * 0.25;
28
+ }
@@ -0,0 +1,40 @@
1
+ ---
2
+ import {
3
+ SEOTitle,
4
+ SEOCard,
5
+ SEOTip,
6
+ SEOList,
7
+ SEOArticle
8
+ } from '@jjlmoya/utils-shared';
9
+ import { knittingGauge } from './index';
10
+ import type { KnownLocale } from '../../types';
11
+
12
+ interface Props {
13
+ locale?: KnownLocale;
14
+ }
15
+
16
+ const { locale = 'es' } = Astro.props;
17
+ const content = await knittingGauge.i18n[locale]?.();
18
+ if (!content) return null;
19
+
20
+ const { seo } = content;
21
+ ---
22
+
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>
@@ -0,0 +1,41 @@
1
+ export interface KnittingGaugeUI {
2
+ sectionOriginalGauge: string;
3
+ sectionMyGauge: string;
4
+ sectionProject: string;
5
+ labelStitches: string;
6
+ labelRows: string;
7
+ labelWidth: string;
8
+ labelLength: string;
9
+ labelUnit: string;
10
+ labelNeedle: string;
11
+ labelNeedleMm: string;
12
+ labelWeight: string;
13
+ labelWeightOptional: string;
14
+ labelPatternSts: string;
15
+ labelPatternRows: string;
16
+ labelMultiples: string;
17
+ labelMultiplesExample: string;
18
+ labelMultiplesPlaceholder: string;
19
+ unitEU: string;
20
+ unitUS: string;
21
+ btnClear: string;
22
+ btnShare: string;
23
+ btnCopied: string;
24
+ resSuggestedSts: string;
25
+ resNewRows: string;
26
+ resNewRowsTooltip: string;
27
+ resScaleFactor: string;
28
+ resScaleFactorTooltip: string;
29
+ resSuggestion: string;
30
+ resSuggestionTooltip: string;
31
+ suggestionIdeal: string;
32
+ suggestionDown: string;
33
+ suggestionUp: string;
34
+ suggestionDownDetail: string;
35
+ suggestionUpDetail: string;
36
+ multiplesNoteFormat: string;
37
+ yarnTitle: string;
38
+ yarnResultFormat: string;
39
+ yarnSafetyFormat: string;
40
+ alertDanger: string;
41
+ }
@@ -0,0 +1,33 @@
1
+ ---
2
+ ---
3
+ <div class="bibliography">
4
+ <h3>References</h3>
5
+ <ul>
6
+ <li><a href="https://www.iso.org/standard/60465.html" target="_blank">ISO 3758 - Textile Care Symbols</a></li>
7
+ <li><a href="https://www.ftc.gov/" target="_blank">FTC - Textile Care Information</a></li>
8
+ </ul>
9
+ </div>
10
+ <style>
11
+ .bibliography {
12
+ padding: 1rem 0;
13
+ }
14
+ .bibliography h3 {
15
+ font-size: 1.1rem;
16
+ font-weight: 600;
17
+ margin-bottom: 1rem;
18
+ }
19
+ .bibliography ul {
20
+ list-style: none;
21
+ padding: 0;
22
+ }
23
+ .bibliography li {
24
+ margin-bottom: 0.5rem;
25
+ }
26
+ .bibliography a {
27
+ color: #6366f1;
28
+ text-decoration: none;
29
+ }
30
+ .bibliography a:hover {
31
+ text-decoration: underline;
32
+ }
33
+ </style>