@jjlmoya/utils-diy 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.
- package/package.json +60 -0
- package/src/category/i18n/en.ts +110 -0
- package/src/category/i18n/es.ts +110 -0
- package/src/category/i18n/fr.ts +101 -0
- package/src/category/index.ts +25 -0
- package/src/category/seo.astro +15 -0
- package/src/components/PreviewNavSidebar.astro +116 -0
- package/src/components/PreviewToolbar.astro +143 -0
- package/src/data.ts +11 -0
- package/src/env.d.ts +5 -0
- package/src/index.ts +57 -0
- package/src/layouts/PreviewLayout.astro +117 -0
- package/src/pages/[locale]/[slug].astro +146 -0
- package/src/pages/[locale].astro +251 -0
- package/src/pages/index.astro +4 -0
- package/src/tests/faq_count.test.ts +19 -0
- package/src/tests/locale_completeness.test.ts +42 -0
- package/src/tests/mocks/astro_mock.js +2 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/seo_length.test.ts +22 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tests/tool_validation.test.ts +17 -0
- package/src/tool/balusterCalculator/bibliography.astro +14 -0
- package/src/tool/balusterCalculator/component.astro +605 -0
- package/src/tool/balusterCalculator/i18n/en.ts +264 -0
- package/src/tool/balusterCalculator/i18n/es.ts +264 -0
- package/src/tool/balusterCalculator/i18n/fr.ts +264 -0
- package/src/tool/balusterCalculator/index.ts +33 -0
- package/src/tool/balusterCalculator/seo.astro +15 -0
- package/src/tool/balusterCalculator/ui.ts +15 -0
- package/src/tool/clayCalculator/bibliography.astro +14 -0
- package/src/tool/clayCalculator/component.astro +731 -0
- package/src/tool/clayCalculator/i18n/en.ts +183 -0
- package/src/tool/clayCalculator/i18n/es.ts +183 -0
- package/src/tool/clayCalculator/i18n/fr.ts +183 -0
- package/src/tool/clayCalculator/index.ts +33 -0
- package/src/tool/clayCalculator/seo.astro +15 -0
- package/src/tool/clayCalculator/ui.ts +19 -0
- package/src/tool/concreteCalculator/bibliography.astro +13 -0
- package/src/tool/concreteCalculator/component.astro +1089 -0
- package/src/tool/concreteCalculator/i18n/en.ts +201 -0
- package/src/tool/concreteCalculator/i18n/es.ts +201 -0
- package/src/tool/concreteCalculator/i18n/fr.ts +201 -0
- package/src/tool/concreteCalculator/index.ts +28 -0
- package/src/tool/concreteCalculator/seo.astro +14 -0
- package/src/tool/concreteCalculator/ui.ts +35 -0
- package/src/tool/cutOptimizer/bibliography.astro +13 -0
- package/src/tool/cutOptimizer/component.astro +825 -0
- package/src/tool/cutOptimizer/i18n/en.ts +178 -0
- package/src/tool/cutOptimizer/i18n/es.ts +178 -0
- package/src/tool/cutOptimizer/i18n/fr.ts +178 -0
- package/src/tool/cutOptimizer/index.ts +28 -0
- package/src/tool/cutOptimizer/optimizer.ts +199 -0
- package/src/tool/cutOptimizer/seo.astro +14 -0
- package/src/tool/cutOptimizer/ui.ts +25 -0
- package/src/tool/drillCalculator/bibliography.astro +13 -0
- package/src/tool/drillCalculator/component.astro +1210 -0
- package/src/tool/drillCalculator/engine.ts +63 -0
- package/src/tool/drillCalculator/i18n/en.ts +137 -0
- package/src/tool/drillCalculator/i18n/es.ts +137 -0
- package/src/tool/drillCalculator/i18n/fr.ts +137 -0
- package/src/tool/drillCalculator/index.ts +28 -0
- package/src/tool/drillCalculator/seo.astro +14 -0
- package/src/tool/drillCalculator/ui.ts +41 -0
- package/src/tool/drillSharpener/bibliography.astro +13 -0
- package/src/tool/drillSharpener/component.astro +712 -0
- package/src/tool/drillSharpener/engine.ts +42 -0
- package/src/tool/drillSharpener/i18n/en.ts +121 -0
- package/src/tool/drillSharpener/i18n/es.ts +121 -0
- package/src/tool/drillSharpener/i18n/fr.ts +121 -0
- package/src/tool/drillSharpener/index.ts +31 -0
- package/src/tool/drillSharpener/seo.astro +14 -0
- package/src/tool/drillSharpener/ui.ts +53 -0
- package/src/tool/epoxyCalculator/bibliography.astro +14 -0
- package/src/tool/epoxyCalculator/component.astro +888 -0
- package/src/tool/epoxyCalculator/i18n/en.ts +195 -0
- package/src/tool/epoxyCalculator/i18n/es.ts +195 -0
- package/src/tool/epoxyCalculator/i18n/fr.ts +195 -0
- package/src/tool/epoxyCalculator/index.ts +33 -0
- package/src/tool/epoxyCalculator/seo.astro +15 -0
- package/src/tool/epoxyCalculator/ui.ts +22 -0
- package/src/tool/furnitureFit/bibliography.astro +13 -0
- package/src/tool/furnitureFit/component.astro +552 -0
- package/src/tool/furnitureFit/engine.ts +51 -0
- package/src/tool/furnitureFit/i18n/en.ts +152 -0
- package/src/tool/furnitureFit/i18n/es.ts +152 -0
- package/src/tool/furnitureFit/i18n/fr.ts +152 -0
- package/src/tool/furnitureFit/index.ts +28 -0
- package/src/tool/furnitureFit/seo.astro +14 -0
- package/src/tool/furnitureFit/ui.ts +21 -0
- package/src/tool/mortarCalculator/bibliography.astro +13 -0
- package/src/tool/mortarCalculator/component.astro +1139 -0
- package/src/tool/mortarCalculator/i18n/en.ts +219 -0
- package/src/tool/mortarCalculator/i18n/es.ts +205 -0
- package/src/tool/mortarCalculator/i18n/fr.ts +220 -0
- package/src/tool/mortarCalculator/index.ts +24 -0
- package/src/tool/mortarCalculator/seo.astro +14 -0
- package/src/tool/mortarCalculator/ui.ts +37 -0
- package/src/tool/passepartoutCalculator/bibliography.astro +13 -0
- package/src/tool/passepartoutCalculator/component.astro +741 -0
- package/src/tool/passepartoutCalculator/i18n/en.ts +178 -0
- package/src/tool/passepartoutCalculator/i18n/es.ts +178 -0
- package/src/tool/passepartoutCalculator/i18n/fr.ts +178 -0
- package/src/tool/passepartoutCalculator/index.ts +28 -0
- package/src/tool/passepartoutCalculator/seo.astro +14 -0
- package/src/tool/passepartoutCalculator/ui.ts +17 -0
- package/src/tool/stairCalculator/bibliography.astro +52 -0
- package/src/tool/stairCalculator/component.astro +766 -0
- package/src/tool/stairCalculator/engine.ts +128 -0
- package/src/tool/stairCalculator/i18n/en.ts +149 -0
- package/src/tool/stairCalculator/i18n/es.ts +149 -0
- package/src/tool/stairCalculator/i18n/fr.ts +149 -0
- package/src/tool/stairCalculator/index.ts +31 -0
- package/src/tool/stairCalculator/seo.astro +211 -0
- package/src/tool/stairCalculator/ui.ts +109 -0
- package/src/tool/thermalExpansionCalculator/bibliography.astro +13 -0
- package/src/tool/thermalExpansionCalculator/component.astro +771 -0
- package/src/tool/thermalExpansionCalculator/engine.ts +23 -0
- package/src/tool/thermalExpansionCalculator/i18n/en.ts +174 -0
- package/src/tool/thermalExpansionCalculator/i18n/es.ts +174 -0
- package/src/tool/thermalExpansionCalculator/i18n/fr.ts +174 -0
- package/src/tool/thermalExpansionCalculator/index.ts +28 -0
- package/src/tool/thermalExpansionCalculator/seo.astro +14 -0
- package/src/tool/thermalExpansionCalculator/ui.ts +41 -0
- package/src/tool/voltageDropCalculator/bibliography.astro +13 -0
- package/src/tool/voltageDropCalculator/component.astro +1022 -0
- package/src/tool/voltageDropCalculator/i18n/en.ts +155 -0
- package/src/tool/voltageDropCalculator/i18n/es.ts +155 -0
- package/src/tool/voltageDropCalculator/i18n/fr.ts +148 -0
- package/src/tool/voltageDropCalculator/index.ts +28 -0
- package/src/tool/voltageDropCalculator/seo.astro +14 -0
- package/src/tool/voltageDropCalculator/ui.ts +22 -0
- package/src/tools.ts +16 -0
- package/src/types.ts +72 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { EpoxyCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'epoxy-resin-calculator';
|
|
6
|
+
const title = 'Epoxy Resin Calculator: Exact Mix and Volume';
|
|
7
|
+
const description =
|
|
8
|
+
'Calculate the exact amount of epoxy resin and hardener for your projects. Avoid waste on river tables, jewelry and molds.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Why is the exact ratio so important with resin?',
|
|
13
|
+
answer:
|
|
14
|
+
'Unlike other mixtures, epoxy resin does not cure by evaporation but through a chemical reaction (polymerization). If there is excess resin or hardener, the reaction will be incomplete, leaving the piece sticky, soft or with permanent bubbles.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'What is the difference between weight and volume ratio?',
|
|
18
|
+
answer:
|
|
19
|
+
'Many resins mix 2:1 by volume but 100:45 by weight because the hardener is usually denser. Always use the scale specified by the manufacturer and, if possible, use a digital scale for maximum precision.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'How do I avoid bubbles when mixing?',
|
|
23
|
+
answer:
|
|
24
|
+
'Mix slowly with constant circular movements for at least 3 minutes, scraping the sides of the cup well. Let the mixture rest for a couple of minutes before pouring so bubbles rise to the surface.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'What is Pot Life?',
|
|
28
|
+
answer:
|
|
29
|
+
'It is the time you have to work with the mixture before it starts to harden (gel). In summer or with large volumes, this time is drastically reduced due to the exothermic reaction (generates heat).',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Measure the mold dimensions',
|
|
36
|
+
text: 'Measure the length, width and depth (thickness) of the area you want to fill with resin.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Enter the mixing ratio',
|
|
40
|
+
text: 'Check on your product label whether the mix is 1:1, 2:1 or 3:1 and whether it is based on weight or volume.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Weigh the components',
|
|
44
|
+
text: 'Pour component A (resin) first, then B (hardener) into a clean container on a digital scale.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Technical mixing',
|
|
48
|
+
text: "Stir gently until the mixture is completely transparent and no 'threads' of different density are visible.",
|
|
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<HowToThing> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
83
|
+
inLanguage: 'en',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<EpoxyCalculatorUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Frequently Asked Questions',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'Technical References',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'TotalBoat - Support Center and Technical Guides',
|
|
96
|
+
url: 'https://www.totalboat.com/pages/support',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'ArtResin - FAQ and Usage Guide',
|
|
100
|
+
url: 'https://www.artresin.com/pages/artresin-faq',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'Smooth-On - Mold and Casting Calculators',
|
|
104
|
+
url: 'https://www.smooth-on.com/support/calculators/',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'Polytek - Technical Support and Safety Data Sheets',
|
|
108
|
+
url: 'https://www.polytek.com/technical-support',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
howTo: howToData,
|
|
112
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
113
|
+
seo: [
|
|
114
|
+
{
|
|
115
|
+
type: 'title',
|
|
116
|
+
text: 'Epoxy Resin Calculation and Mixing Guide',
|
|
117
|
+
level: 2,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'paragraph',
|
|
121
|
+
html: "Epoxy resin is not a paint that dries by evaporation; it is a complex <strong>exothermic chemical reaction</strong>. The magic happens when epoxide molecules chain with polyamine molecules to form a solid crystalline thermosetting polymer.",
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'paragraph',
|
|
125
|
+
html: 'The difference between a lasting piece of art and a sticky disaster lies in <strong>exact stoichiometry</strong>. An error of just 5% in the mixing ratio can permanently inhibit curing. This tool eliminates the mathematical guesswork, letting you focus on creation.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'grid',
|
|
129
|
+
columns: [
|
|
130
|
+
{
|
|
131
|
+
type: 'card',
|
|
132
|
+
icon: 'mdi:scale-balance',
|
|
133
|
+
title: 'Volume vs Weight?',
|
|
134
|
+
html: '<p>The #1 beginner mistake is assuming 100ml weighs 100g. <strong>Resin is denser than hardener.</strong></p><p>If your product data sheet says "100:50 by weight", it is NOT the same as "2:1 by volume". This calculator works with <strong>Volume</strong> (V = L × W × H), the standard for filling molds.</p>',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'card',
|
|
138
|
+
icon: 'mdi:water-percent',
|
|
139
|
+
title: 'Common Ratios',
|
|
140
|
+
html: '<ul><li><strong>1:1</strong> — Coatings, varnishes and quick adhesives.</li><li><strong>2:1</strong> — Standard. River tables, jewelry and medium molds.</li><li><strong>3:1</strong> — Industrial floors and high-strength structural laminates.</li></ul>',
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
type: 'title',
|
|
146
|
+
text: 'Safety Protocol and Best Practices',
|
|
147
|
+
level: 2,
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
type: 'grid',
|
|
151
|
+
columns: [
|
|
152
|
+
{
|
|
153
|
+
type: 'card',
|
|
154
|
+
icon: 'mdi:thermometer',
|
|
155
|
+
title: 'Critical Temperature',
|
|
156
|
+
html: '<p>Always work between <strong>21°C and 25°C</strong>. Cold can stop the reaction, leaving the piece cloudy. Excessive heat dangerously accelerates the exothermic reaction ("flash cure").</p>',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
type: 'card',
|
|
160
|
+
icon: 'mdi:cup-outline',
|
|
161
|
+
title: 'Double Cup Technique',
|
|
162
|
+
html: '<p>Do not trust a single mix. Scrape the sides and bottom thoroughly, pour the mixture into a <strong>second clean cup</strong> and mix again. This ensures no uncatalyzed material remains.</p>',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: 'card',
|
|
168
|
+
icon: 'mdi:weather-windy',
|
|
169
|
+
title: 'Ventilation',
|
|
170
|
+
html: "<p>Although many modern resins are low odor, isocyanate and amine vapors require cross ventilation or an activated carbon mask. Always wear nitrile gloves.</p>",
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
ui: {
|
|
174
|
+
shapeRect: 'Rectangular',
|
|
175
|
+
shapeCylinder: 'Cylindrical',
|
|
176
|
+
shapeSphere: 'Spherical',
|
|
177
|
+
labelLength: 'Length (cm)',
|
|
178
|
+
labelWidth: 'Width (cm)',
|
|
179
|
+
labelDiameter: 'Diameter (cm)',
|
|
180
|
+
labelDepth: 'Depth (cm)',
|
|
181
|
+
labelRatio: 'Mix Ratio (Weight/Volume)',
|
|
182
|
+
labelCustomRatio: 'Use custom ratio (A:B)',
|
|
183
|
+
labelResinA: 'Resin (A)',
|
|
184
|
+
labelHardenerB: 'Hardener (B)',
|
|
185
|
+
labelWasteTitle: 'Safety Margin',
|
|
186
|
+
labelWasteDesc: 'Add 5% extra for losses',
|
|
187
|
+
labelTotalVolume: 'Total Volume',
|
|
188
|
+
labelPartA: 'Part A (Resin)',
|
|
189
|
+
labelPartB: 'Part B (Hardener)',
|
|
190
|
+
labelVisualization: 'Visualization',
|
|
191
|
+
shapeRectLabel: 'Rectangular Block',
|
|
192
|
+
shapeCylinderLabel: 'Cylinder / Round Mold',
|
|
193
|
+
shapeSphereLabel: 'Full Sphere',
|
|
194
|
+
},
|
|
195
|
+
};
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { EpoxyCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'calculadora-resina';
|
|
6
|
+
const title = 'Calculadora de Resina Epoxi: Mezcla y Volumen Exacto';
|
|
7
|
+
const description =
|
|
8
|
+
'Calcula la cantidad exacta de resina epoxi y catalizador necesaria para tus proyectos. Evita desperdicios en mesas río, joyería y moldes.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: '¿Por qué es tan importante la proporción exacta en la resina?',
|
|
13
|
+
answer:
|
|
14
|
+
'A diferencia de otras mezclas, la resina epoxi no seca por evaporación, sino por una reacción química (polimerización). Si sobra resina o catalizador, la reacción será incompleta, dejando la pieza pegajosa, blanda o con burbujas permanentes.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: '¿Qué es la proporción en peso vs volumen?',
|
|
18
|
+
answer:
|
|
19
|
+
'Muchas resinas se mezclan 2:1 en volumen pero 100:45 en peso debido a que el catalizador suele ser más denso. Usa siempre la escala que indique el fabricante y, si es posible, usa una báscula digital para máxima precisión.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: '¿Cómo evito las burbujas al mezclar?',
|
|
23
|
+
answer:
|
|
24
|
+
'Mezcla lentamente con movimientos circulares constantes durante al menos 3 minutos, rascando bien las paredes del vaso. Deja reposar la mezcla un par de minutos antes de verter para que las burbujas suban a la superficie.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: '¿Qué es el tiempo de vida (Pot Life)?',
|
|
28
|
+
answer:
|
|
29
|
+
'Es el tiempo que tienes para trabajar con la mezcla antes de que empiece a endurecerse (gelificar). En verano o en grandes volúmenes, este tiempo se reduce drásticamente debido a la reacción exotérmica (genera calor).',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Medir las dimensiones del molde',
|
|
36
|
+
text: 'Mide el largo, ancho y la profundidad (grosor) de la zona que quieres rellenar con resina.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Introducir la relación de mezcla',
|
|
40
|
+
text: 'Consulta en la etiqueta de tu producto si la mezcla es 1:1, 2:1 o 3:1 y si se basa en peso o volumen.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Pesar los componentes',
|
|
44
|
+
text: 'Vierte primero el componente A (resina) y luego el B (catalizador) en un recipiente limpio sobre una báscula digital.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Mezclado técnico',
|
|
48
|
+
text: "Remueve suavemente hasta que la mezcla sea totalmente transparente y no se vean 'hilos' de diferente densidad.",
|
|
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<HowToThing> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'es',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<EpoxyCalculatorUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Preguntas Frecuentes',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'Referencias Técnicas',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'TotalBoat - Centro de Soporte y Guías Técnicas',
|
|
96
|
+
url: 'https://www.totalboat.com/pages/support',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'ArtResin - Preguntas Frecuentes y Guía de Uso',
|
|
100
|
+
url: 'https://www.artresin.com/pages/artresin-faq',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'Smooth-On - Calculadoras de Moldes y Vaciado',
|
|
104
|
+
url: 'https://www.smooth-on.com/support/calculators/',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'Polytek - Soporte Técnico y Hojas de Seguridad',
|
|
108
|
+
url: 'https://www.polytek.com/technical-support',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
howTo: howToData,
|
|
112
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
113
|
+
seo: [
|
|
114
|
+
{
|
|
115
|
+
type: 'title',
|
|
116
|
+
text: 'Guía de Cálculo y Mezcla de Resina Epóxica',
|
|
117
|
+
level: 2,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'paragraph',
|
|
121
|
+
html: 'La resina epóxica no es una pintura que se seca por evaporación; es una <strong>reacción química exotérmica</strong> compleja. La magia ocurre cuando las moléculas de epóxido se encadenan con las de poliamina para formar un polímero termoestable sólido cristalino.',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'paragraph',
|
|
125
|
+
html: 'La diferencia entre una pieza de arte duradera y un desastre pegajoso radica en la <strong>estequiometría exacta</strong>. Un error de apenas un 5% en la proporción de mezcla puede inhibir el curado permanentemente. Esta herramienta elimina las conjeturas matemáticas, permitiéndote enfocarte en la creación.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'grid',
|
|
129
|
+
columns: [
|
|
130
|
+
{
|
|
131
|
+
type: 'card',
|
|
132
|
+
icon: 'mdi:scale-balance',
|
|
133
|
+
title: '¿Volumen o Peso?',
|
|
134
|
+
html: '<p>El error #1 de los principiantes es asumir que 100ml pesan 100g. <strong>La resina es más densa que el endurecedor.</strong></p><p>Si la ficha técnica de tu producto dice "100:50 por peso", NO es lo mismo que "2:1 por volumen". Esta calculadora trabaja con <strong>Volumen</strong> (V = L × W × H), que es el estándar para llenar moldes.</p>',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'card',
|
|
138
|
+
icon: 'mdi:water-percent',
|
|
139
|
+
title: 'Proporciones Comunes',
|
|
140
|
+
html: '<ul><li><strong>1:1</strong> — Recubrimientos, barnices y adhesivos rápidos.</li><li><strong>2:1</strong> — Estándar. River tables, joyería y moldes medios.</li><li><strong>3:1</strong> — Suelos industriales y laminados estructurales de alta dureza.</li></ul>',
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
type: 'title',
|
|
146
|
+
text: 'Protocolo de Seguridad y Mejores Prácticas',
|
|
147
|
+
level: 2,
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
type: 'grid',
|
|
151
|
+
columns: [
|
|
152
|
+
{
|
|
153
|
+
type: 'card',
|
|
154
|
+
icon: 'mdi:thermometer',
|
|
155
|
+
title: 'Temperatura Vital',
|
|
156
|
+
html: '<p>Trabaja siempre entre <strong>21°C y 25°C</strong>. El frío puede detener la reacción, dejando la pieza turbia. El calor excesivo acelera la reacción exotérmica peligrosamente ("flash cure").</p>',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
type: 'card',
|
|
160
|
+
icon: 'mdi:cup-outline',
|
|
161
|
+
title: 'Técnica del Doble Vaso',
|
|
162
|
+
html: '<p>No confíes en una sola mezcla. Raspa bien los lados y el fondo, vierte la mezcla en un <strong>segundo vaso limpio</strong> y vuelve a mezclar. Esto asegura que no quede material sin catalizar.</p>',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: 'card',
|
|
168
|
+
icon: 'mdi:weather-windy',
|
|
169
|
+
title: 'Ventilación',
|
|
170
|
+
html: '<p>Aunque muchas resinas modernas son de bajo olor, los vapores de isocianatos y aminas requieren ventilación cruzada o máscara de carbón activo. Usa siempre guantes de nitrilo.</p>',
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
ui: {
|
|
174
|
+
shapeRect: 'Rectangular',
|
|
175
|
+
shapeCylinder: 'Cilíndrico',
|
|
176
|
+
shapeSphere: 'Esférico',
|
|
177
|
+
labelLength: 'Largo (cm)',
|
|
178
|
+
labelWidth: 'Ancho (cm)',
|
|
179
|
+
labelDiameter: 'Diámetro (cm)',
|
|
180
|
+
labelDepth: 'Profundidad (cm)',
|
|
181
|
+
labelRatio: 'Proporción de Mezcla (Peso/Volumen)',
|
|
182
|
+
labelCustomRatio: 'Usar proporción personalizada (A:B)',
|
|
183
|
+
labelResinA: 'Resina (A)',
|
|
184
|
+
labelHardenerB: 'Endurecedor (B)',
|
|
185
|
+
labelWasteTitle: 'Margen de Seguridad',
|
|
186
|
+
labelWasteDesc: 'Añade 5% extra para pérdidas',
|
|
187
|
+
labelTotalVolume: 'Volumen Total',
|
|
188
|
+
labelPartA: 'Parte A (Resina)',
|
|
189
|
+
labelPartB: 'Parte B (Catalizador)',
|
|
190
|
+
labelVisualization: 'Visualización',
|
|
191
|
+
shapeRectLabel: 'Bloque Rectangular',
|
|
192
|
+
shapeCylinderLabel: 'Cilindro / Molde Redondo',
|
|
193
|
+
shapeSphereLabel: 'Esfera Completa',
|
|
194
|
+
},
|
|
195
|
+
};
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { EpoxyCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'calculateur-resine-epoxy';
|
|
6
|
+
const title = 'Calculateur de Résine Époxy : Mélange et Volume Exact';
|
|
7
|
+
const description =
|
|
8
|
+
"Calculez la quantité exacte de résine époxy et de durcisseur nécessaire pour vos projets. Évitez les gaspillages pour les tables rivières, bijoux et moules.";
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Pourquoi la proportion exacte est-elle si importante avec la résine ?',
|
|
13
|
+
answer:
|
|
14
|
+
"Contrairement à d'autres mélanges, la résine époxy ne sèche pas par évaporation mais par une réaction chimique (polymérisation). S'il y a un excès de résine ou de durcisseur, la réaction sera incomplète, laissant la pièce collante, molle ou avec des bulles permanentes.",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Quelle est la différence entre le ratio en poids et en volume ?',
|
|
18
|
+
answer:
|
|
19
|
+
"Beaucoup de résines se mélangent 2:1 en volume mais 100:45 en poids car le durcisseur est généralement plus dense. Utilisez toujours l'échelle indiquée par le fabricant et, si possible, une balance numérique pour une précision maximale.",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Comment éviter les bulles lors du mélange ?',
|
|
23
|
+
answer:
|
|
24
|
+
"Mélangez lentement avec des mouvements circulaires constants pendant au moins 3 minutes, en raclant bien les parois du récipient. Laissez reposer le mélange quelques minutes avant de verser pour que les bulles remontent à la surface.",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: "Qu'est-ce que le Pot Life (durée de vie) ?",
|
|
28
|
+
answer:
|
|
29
|
+
"C'est le temps dont vous disposez pour travailler avec le mélange avant qu'il commence à durcir (gélifier). En été ou avec de grands volumes, ce temps est considérablement réduit en raison de la réaction exothermique (génère de la chaleur).",
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Mesurer les dimensions du moule',
|
|
36
|
+
text: 'Mesurez la longueur, la largeur et la profondeur (épaisseur) de la zone que vous souhaitez remplir de résine.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Entrer le ratio de mélange',
|
|
40
|
+
text: "Vérifiez sur l'étiquette de votre produit si le mélange est 1:1, 2:1 ou 3:1 et s'il est basé sur le poids ou le volume.",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Peser les composants',
|
|
44
|
+
text: "Versez d'abord le composant A (résine) puis le B (durcisseur) dans un récipient propre sur une balance numérique.",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Mélange technique',
|
|
48
|
+
text: "Remuez doucement jusqu'à ce que le mélange soit totalement transparent et qu'il n'y ait plus de 'fils' de densité différente visibles.",
|
|
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<HowToThing> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'fr',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<EpoxyCalculatorUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Questions Fréquentes',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'Références Techniques',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'TotalBoat - Centre de support et guides techniques',
|
|
96
|
+
url: 'https://www.totalboat.com/pages/support',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "ArtResin - FAQ et guide d'utilisation",
|
|
100
|
+
url: 'https://www.artresin.com/pages/artresin-faq',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'Smooth-On - Calculateurs de moules et coulée',
|
|
104
|
+
url: 'https://www.smooth-on.com/support/calculators/',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'Polytek - Support technique et fiches de sécurité',
|
|
108
|
+
url: 'https://www.polytek.com/technical-support',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
howTo: howToData,
|
|
112
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
113
|
+
seo: [
|
|
114
|
+
{
|
|
115
|
+
type: 'title',
|
|
116
|
+
text: 'Guide de Calcul et de Mélange de Résine Époxyde',
|
|
117
|
+
level: 2,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'paragraph',
|
|
121
|
+
html: "La résine époxyde n'est pas une peinture qui sèche par évaporation ; c'est une <strong>réaction chimique exothermique</strong> complexe. La magie opère lorsque les molécules d'époxyde se lient aux molécules de polyamine pour former un polymère thermodurcissable solide et cristallin.",
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'paragraph',
|
|
125
|
+
html: "La différence entre une pièce artistique durable et un désastre collant réside dans la <strong>stœchiométrie exacte</strong>. Une erreur de seulement 5% dans le ratio de mélange peut inhiber définitivement la polymérisation. Cet outil élimine les approximations mathématiques pour vous permettre de vous concentrer sur la création.",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'grid',
|
|
129
|
+
columns: [
|
|
130
|
+
{
|
|
131
|
+
type: 'card',
|
|
132
|
+
icon: 'mdi:scale-balance',
|
|
133
|
+
title: 'Volume ou Poids ?',
|
|
134
|
+
html: "<p>L'erreur n°1 des débutants est de supposer que 100ml pèsent 100g. <strong>La résine est plus dense que le durcisseur.</strong></p><p>Si la fiche technique de votre produit indique \"100:50 en poids\", ce n'est PAS équivalent à \"2:1 en volume\". Ce calculateur fonctionne avec le <strong>Volume</strong> (V = L × l × H), la norme pour remplir les moules.</p>",
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'card',
|
|
138
|
+
icon: 'mdi:water-percent',
|
|
139
|
+
title: 'Proportions Courantes',
|
|
140
|
+
html: "<ul><li><strong>1:1</strong> — Revêtements, vernis et adhésifs rapides.</li><li><strong>2:1</strong> — Standard. Tables rivières, bijoux et moules moyens.</li><li><strong>3:1</strong> — Sols industriels et stratifiés structurels haute résistance.</li></ul>",
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
type: 'title',
|
|
146
|
+
text: 'Protocole de Sécurité et Meilleures Pratiques',
|
|
147
|
+
level: 2,
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
type: 'grid',
|
|
151
|
+
columns: [
|
|
152
|
+
{
|
|
153
|
+
type: 'card',
|
|
154
|
+
icon: 'mdi:thermometer',
|
|
155
|
+
title: 'Température Critique',
|
|
156
|
+
html: '<p>Travaillez toujours entre <strong>21°C et 25°C</strong>. Le froid peut stopper la réaction, laissant la pièce trouble. La chaleur excessive accélère dangereusement la réaction exothermique ("flash cure").</p>',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
type: 'card',
|
|
160
|
+
icon: 'mdi:cup-outline',
|
|
161
|
+
title: 'Technique du Double Récipient',
|
|
162
|
+
html: '<p>Ne faites pas confiance à un seul mélange. Raclez bien les côtés et le fond, versez le mélange dans un <strong>second récipient propre</strong> et remélangez. Cela garantit qu\'aucun matériau non catalysé ne reste.</p>',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: 'card',
|
|
168
|
+
icon: 'mdi:weather-windy',
|
|
169
|
+
title: 'Ventilation',
|
|
170
|
+
html: "<p>Même si de nombreuses résines modernes sont à faible odeur, les vapeurs d'isocyanates et d'amines nécessitent une ventilation croisée ou un masque à charbon actif. Portez toujours des gants en nitrile.</p>",
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
ui: {
|
|
174
|
+
shapeRect: 'Rectangulaire',
|
|
175
|
+
shapeCylinder: 'Cylindrique',
|
|
176
|
+
shapeSphere: 'Sphérique',
|
|
177
|
+
labelLength: 'Longueur (cm)',
|
|
178
|
+
labelWidth: 'Largeur (cm)',
|
|
179
|
+
labelDiameter: 'Diamètre (cm)',
|
|
180
|
+
labelDepth: 'Profondeur (cm)',
|
|
181
|
+
labelRatio: 'Ratio de Mélange (Poids/Volume)',
|
|
182
|
+
labelCustomRatio: 'Utiliser un ratio personnalisé (A:B)',
|
|
183
|
+
labelResinA: 'Résine (A)',
|
|
184
|
+
labelHardenerB: 'Durcisseur (B)',
|
|
185
|
+
labelWasteTitle: 'Marge de Sécurité',
|
|
186
|
+
labelWasteDesc: "Ajoute 5% supplémentaire pour les pertes",
|
|
187
|
+
labelTotalVolume: 'Volume Total',
|
|
188
|
+
labelPartA: 'Partie A (Résine)',
|
|
189
|
+
labelPartB: 'Partie B (Durcisseur)',
|
|
190
|
+
labelVisualization: 'Visualisation',
|
|
191
|
+
shapeRectLabel: 'Bloc Rectangulaire',
|
|
192
|
+
shapeCylinderLabel: 'Cylindre / Moule Rond',
|
|
193
|
+
shapeSphereLabel: 'Sphère Complète',
|
|
194
|
+
},
|
|
195
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { DiyToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
|
|
2
|
+
import EpoxyCalculatorComponent from './component.astro';
|
|
3
|
+
import EpoxyCalculatorSEO from './seo.astro';
|
|
4
|
+
import EpoxyCalculatorBibliography from './bibliography.astro';
|
|
5
|
+
import type { EpoxyCalculatorUI } from './ui';
|
|
6
|
+
|
|
7
|
+
export type EpoxyCalculatorLocaleContent = ToolLocaleContent<EpoxyCalculatorUI>;
|
|
8
|
+
|
|
9
|
+
import { content as es } from './i18n/es';
|
|
10
|
+
import { content as en } from './i18n/en';
|
|
11
|
+
import { content as fr } from './i18n/fr';
|
|
12
|
+
|
|
13
|
+
export const epoxyCalculator: DiyToolEntry<EpoxyCalculatorUI> = {
|
|
14
|
+
id: 'epoxy-calculator',
|
|
15
|
+
icons: {
|
|
16
|
+
bg: 'mdi:flask',
|
|
17
|
+
fg: 'mdi:scale-balance',
|
|
18
|
+
},
|
|
19
|
+
i18n: {
|
|
20
|
+
es: async () => es,
|
|
21
|
+
en: async () => en,
|
|
22
|
+
fr: async () => fr,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { EpoxyCalculatorComponent, EpoxyCalculatorSEO, EpoxyCalculatorBibliography };
|
|
27
|
+
|
|
28
|
+
export const EPOXY_CALCULATOR_TOOL: ToolDefinition = {
|
|
29
|
+
entry: epoxyCalculator,
|
|
30
|
+
Component: EpoxyCalculatorComponent,
|
|
31
|
+
SEOComponent: EpoxyCalculatorSEO,
|
|
32
|
+
BibliographyComponent: EpoxyCalculatorBibliography,
|
|
33
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { epoxyCalculator } 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 epoxyCalculator.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<SEORenderer content={{ locale: locale as string, sections: content.seo }} />
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface EpoxyCalculatorUI extends Record<string, string> {
|
|
2
|
+
shapeRect: string;
|
|
3
|
+
shapeCylinder: string;
|
|
4
|
+
shapeSphere: string;
|
|
5
|
+
labelLength: string;
|
|
6
|
+
labelWidth: string;
|
|
7
|
+
labelDiameter: string;
|
|
8
|
+
labelDepth: string;
|
|
9
|
+
labelRatio: string;
|
|
10
|
+
labelCustomRatio: string;
|
|
11
|
+
labelResinA: string;
|
|
12
|
+
labelHardenerB: string;
|
|
13
|
+
labelWasteTitle: string;
|
|
14
|
+
labelWasteDesc: string;
|
|
15
|
+
labelTotalVolume: string;
|
|
16
|
+
labelPartA: string;
|
|
17
|
+
labelPartB: string;
|
|
18
|
+
labelVisualization: string;
|
|
19
|
+
shapeRectLabel: string;
|
|
20
|
+
shapeCylinderLabel: string;
|
|
21
|
+
shapeSphereLabel: string;
|
|
22
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { furnitureFit } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
const { locale = 'es' } = Astro.props;
|
|
10
|
+
const content = await furnitureFit.i18n[locale]?.();
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
{content && <SharedBibliography links={content.bibliography} />}
|