@jjlmoya/utils-cooking 1.10.0 → 1.12.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 +58 -58
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tool/american-kitchen-converter/i18n/fr.ts +1 -1
- package/src/tool/banana-ripeness/i18n/fr.ts +86 -86
- package/src/tool/brine/component.astro +20 -22
- package/src/tool/cookware-guide/component.astro +22 -6
- package/src/tool/cookware-guide/i18n/en.ts +2 -2
- package/src/tool/cookware-guide/i18n/es.ts +3 -3
- package/src/tool/cookware-guide/i18n/fr.ts +109 -110
- package/src/tool/ingredient-rescaler/component.astro +8 -3
- package/src/tool/ingredient-rescaler/i18n/en.ts +74 -97
- package/src/tool/ingredient-rescaler/i18n/es.ts +77 -100
- package/src/tool/kitchen-timer/component.astro +27 -9
- package/src/tool/kitchen-timer/i18n/en.ts +6 -7
- package/src/tool/kitchen-timer/i18n/es.ts +7 -8
- package/src/tool/kitchen-timer/i18n/fr.ts +76 -77
- package/src/tool/kitchen-timer/init.ts +23 -6
- package/src/tool/kitchen-timer/lib/KitchenTimer.ts +20 -8
- package/src/tool/meringue-peak/component.astro +4 -4
- package/src/tool/meringue-peak/i18n/fr.ts +1 -1
- package/src/tool/mold-scaler/component.astro +17 -11
- package/src/tool/mold-scaler/i18n/en.ts +87 -60
- package/src/tool/mold-scaler/i18n/es.ts +87 -61
- package/src/tool/mold-scaler/i18n/fr.ts +97 -69
- package/src/tool/pizza/i18n/en.ts +2 -2
- package/src/tool/pizza/i18n/es.ts +2 -2
- package/src/tool/pizza/i18n/fr.ts +2 -2
- package/src/tool/roux-guide/i18n/en.ts +18 -1
- package/src/tool/roux-guide/i18n/es.ts +21 -4
- package/src/tool/roux-guide/i18n/fr.ts +18 -1
- package/src/tool/roux-guide/init.ts +55 -52
- package/src/tool/sourdough-calculator/i18n/es.ts +133 -133
|
@@ -1,10 +1,78 @@
|
|
|
1
1
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
2
|
|
|
3
|
+
const title = 'Professional Recipe Ingredient Scaler';
|
|
4
|
+
const description =
|
|
5
|
+
'Automatically scale your recipes based on serving count. Calculate exact ingredient amounts to multiply or reduce any recipe with professional precision.';
|
|
6
|
+
|
|
7
|
+
const faq = [
|
|
8
|
+
{
|
|
9
|
+
question: 'Why does my conversion factor include decimals?',
|
|
10
|
+
answer: 'Because culinary proportions aren\'t always whole numbers. If you scale a 4-person recipe for 7 people, the factor is exactly 1.75. Multiplying by this specific ratio is more accurate than arbitrary rounding.',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
question: 'How do I handle fractions like \'1/2 tsp\'?',
|
|
14
|
+
answer: 'The parser automatically identifies numbers. It will read \'1/2\' as \'0.5\' and scale it accordingly. For maximum clarity, you can also enter decimals directly.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Should I round the final results?',
|
|
18
|
+
answer: 'It depends on the ingredient. For flours and liquids, yes. For potent spices or yeast, we recommend scaling to about 75% of the calculated total to avoid overpowering the dish.',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
question: 'Does it work with cups and ounces?',
|
|
22
|
+
answer: 'Yes, the tool scales any numerical value. However, we strongly recommend converting to grams first for professional-grade consistency across larger batches.',
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
const howTo = [
|
|
27
|
+
{
|
|
28
|
+
name: 'Enter your servings count',
|
|
29
|
+
text: 'Define how many people the recipe was originally for, and how many you want to cook for now.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'Paste your ingredient list',
|
|
33
|
+
text: 'Copy and paste your entire list. Our tool recognizes numbers at the start of each line (e.g., 500g, 1/2, 2.5) and scales them instantly.',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'Apply professional adjustments',
|
|
37
|
+
text: 'Math is exact, but cooking is situational. Scale spices to 75%. Don\'t scale cooking times. Use your chef\'s intuition for the final touch.',
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const faqSchema = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'FAQPage',
|
|
44
|
+
mainEntity: faq.map((item) => ({
|
|
45
|
+
'@type': 'Question',
|
|
46
|
+
name: item.question,
|
|
47
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const howToSchema = {
|
|
52
|
+
'@context': 'https://schema.org',
|
|
53
|
+
'@type': 'HowTo',
|
|
54
|
+
name: title,
|
|
55
|
+
description,
|
|
56
|
+
step: howTo.map((step) => ({
|
|
57
|
+
'@type': 'HowToStep',
|
|
58
|
+
name: step.name,
|
|
59
|
+
text: step.text,
|
|
60
|
+
})),
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const appSchema = {
|
|
64
|
+
'@context': 'https://schema.org',
|
|
65
|
+
'@type': 'SoftwareApplication',
|
|
66
|
+
name: title,
|
|
67
|
+
description,
|
|
68
|
+
applicationCategory: 'UtilitiesApplication',
|
|
69
|
+
operatingSystem: 'All',
|
|
70
|
+
};
|
|
71
|
+
|
|
3
72
|
export const content: ToolLocaleContent = {
|
|
4
73
|
slug: "recipe-ingredient-scaler-converter-servings",
|
|
5
|
-
title
|
|
6
|
-
description
|
|
7
|
-
"Automatically scale your recipes based on serving count. Calculate exact ingredient amounts to multiply or reduce any recipe with professional precision.",
|
|
74
|
+
title,
|
|
75
|
+
description,
|
|
8
76
|
ui: {
|
|
9
77
|
servings: "Servings",
|
|
10
78
|
original: "Original",
|
|
@@ -25,24 +93,7 @@ export const content: ToolLocaleContent = {
|
|
|
25
93
|
defaultIngredient3: "2 Eggs",
|
|
26
94
|
},
|
|
27
95
|
faqTitle: "Frequently Asked Questions",
|
|
28
|
-
faq
|
|
29
|
-
{
|
|
30
|
-
question: "Why does my conversion factor include decimals?",
|
|
31
|
-
answer: "Because culinary proportions aren't always whole numbers. If you scale a 4-person recipe for 7 people, the factor is exactly 1.75. Multiplying by this specific ratio is more accurate than arbitrary rounding.",
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
question: "How do I handle fractions like '1/2 tsp'?",
|
|
35
|
-
answer: "The parser automatically identifies numbers. It will read '1/2' as '0.5' and scale it accordingly. For maximum clarity, you can also enter decimals directly.",
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
question: "Should I round the final results?",
|
|
39
|
-
answer: "It depends on the ingredient. For flours and liquids, yes. For potent spices or yeast, we recommend scaling to about 75% of the calculated total to avoid overpowering the dish.",
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
question: "Does it work with cups and ounces?",
|
|
43
|
-
answer: "Yes, the tool scales any numerical value. However, we strongly recommend converting to grams first for professional-grade consistency across larger batches.",
|
|
44
|
-
},
|
|
45
|
-
],
|
|
96
|
+
faq,
|
|
46
97
|
bibliographyTitle: "Bibliography & Resources",
|
|
47
98
|
bibliography: [
|
|
48
99
|
{
|
|
@@ -58,20 +109,7 @@ export const content: ToolLocaleContent = {
|
|
|
58
109
|
url: "https://www.modernistcuisine.com/",
|
|
59
110
|
},
|
|
60
111
|
],
|
|
61
|
-
howTo
|
|
62
|
-
{
|
|
63
|
-
name: "Enter your servings count",
|
|
64
|
-
text: "Define how many people the recipe was originally for, and how many you want to cook for now.",
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
name: "Paste your ingredient list",
|
|
68
|
-
text: "Copy and paste your entire list. Our tool recognizes numbers at the start of each line (e.g., 500g, 1/2, 2.5) and scales them instantly.",
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
name: "Apply professional adjustments",
|
|
72
|
-
text: "Math is exact, but cooking is situational. Scale spices to 75%. Don't scale cooking times. Use your chef's intuition for the final touch.",
|
|
73
|
-
},
|
|
74
|
-
],
|
|
112
|
+
howTo,
|
|
75
113
|
seo: [
|
|
76
114
|
{
|
|
77
115
|
type: "title",
|
|
@@ -200,66 +238,5 @@ export const content: ToolLocaleContent = {
|
|
|
200
238
|
},
|
|
201
239
|
],
|
|
202
240
|
|
|
203
|
-
schemas: [
|
|
204
|
-
{
|
|
205
|
-
'@context': 'https://schema.org',
|
|
206
|
-
'@type': 'WebApplication',
|
|
207
|
-
name: 'Ingredient Rescaler',
|
|
208
|
-
description: 'Scale recipes automatically based on the number of servings. Calculate exact ingredient quantities by multiplying or reducing your recipe without complications.',
|
|
209
|
-
url: 'https://jjlmoya.es/en/ingredient-rescaler',
|
|
210
|
-
applicationCategory: 'Utilities',
|
|
211
|
-
inLanguage: 'en-US',
|
|
212
|
-
offers: {
|
|
213
|
-
'@type': 'Offer',
|
|
214
|
-
price: '0',
|
|
215
|
-
priceCurrency: 'EUR',
|
|
216
|
-
},
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
'@context': 'https://schema.org',
|
|
220
|
-
'@type': 'Article',
|
|
221
|
-
headline: 'Ingredient Rescaler - Scale Your Recipes Easily',
|
|
222
|
-
description: 'Scale recipes automatically based on the number of servings. Calculate exact ingredient quantities by multiplying or reducing your recipe without complications.',
|
|
223
|
-
author: {
|
|
224
|
-
'@type': 'Person',
|
|
225
|
-
name: 'jjlmoya',
|
|
226
|
-
},
|
|
227
|
-
inLanguage: 'en-US',
|
|
228
|
-
isPartOf: {
|
|
229
|
-
'@type': 'WebSite',
|
|
230
|
-
name: 'jjlmoya Utilities',
|
|
231
|
-
url: 'https://jjlmoya.es',
|
|
232
|
-
},
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
'@context': 'https://schema.org',
|
|
236
|
-
'@type': 'BreadcrumbList',
|
|
237
|
-
itemListElement: [
|
|
238
|
-
{
|
|
239
|
-
'@type': 'ListItem',
|
|
240
|
-
position: 1,
|
|
241
|
-
name: 'Home',
|
|
242
|
-
item: 'https://jjlmoya.es/en',
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
'@type': 'ListItem',
|
|
246
|
-
position: 2,
|
|
247
|
-
name: 'Utilities',
|
|
248
|
-
item: 'https://jjlmoya.es/en/utilities',
|
|
249
|
-
},
|
|
250
|
-
{
|
|
251
|
-
'@type': 'ListItem',
|
|
252
|
-
position: 3,
|
|
253
|
-
name: 'Cooking',
|
|
254
|
-
item: 'https://jjlmoya.es/en/cooking',
|
|
255
|
-
},
|
|
256
|
-
{
|
|
257
|
-
'@type': 'ListItem',
|
|
258
|
-
position: 4,
|
|
259
|
-
name: 'Ingredient Rescaler',
|
|
260
|
-
item: 'https://jjlmoya.es/en/ingredient-rescaler',
|
|
261
|
-
},
|
|
262
|
-
],
|
|
263
|
-
},
|
|
264
|
-
],
|
|
241
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
265
242
|
};
|
|
@@ -1,9 +1,81 @@
|
|
|
1
1
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
2
|
|
|
3
|
+
const title = 'Escalador de Ingredientes Ajuste de Recetas';
|
|
4
|
+
const description = 'Escala recetas automáticamente según el número de raciones. Calcula las cantidades exactas de ingredientes multiplicando o reduciendo tu receta sin complicaciones.';
|
|
5
|
+
|
|
6
|
+
const faq = [
|
|
7
|
+
{
|
|
8
|
+
question: '¿Por qué mi factor de conversión incluye decimales?',
|
|
9
|
+
answer: 'Porque las proporciones culinarias no siempre son redondas. Si escalas una receta para 4 personas a 7, el factor es 1.75 exactamente. Los ingredientes se multiplican por ese número, aunque encuentres fracciones. Es más exacto que redondear arbitrariamente.',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
question: '¿Qué pasa si ingreso "1/2 cucharadita de sal"?',
|
|
13
|
+
answer: 'El parser busca el número primero. Reconocerá "1" como cantidad, luego "/2" como parte de la unidad. El resultado será "0.5", y al escalar se multiplicará correctamente. Para fracciones como "1/2", ingresa "0.5" directamente (más claro) o la herramienta las interpreta como división.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: '¿Debo redondear los resultados finales?',
|
|
17
|
+
answer: 'Depende del ingrediente. Para harinas, sí. Para levaduras o especias, la precisión importa menos (escala al 75% de lo indicado). Para huevos: si obtienes 2.3, usa 2 completos + parte de un tercero (pesada), o redondea a 2 si el plato lo permite.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: '¿Por qué no cambia el resultado cuando cambio las raciones?',
|
|
21
|
+
answer: 'Asegúrate de que el campo de ingredientes tenga contenido. Si está vacío, no hay nada que escalar. También verifica que los números en tus ingredientes sean reconocibles (ej: "500g", "1/2 cucharadita").',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: '¿Funciona con medidas imperiales (onzas, tazas)?',
|
|
25
|
+
answer: 'Técnicamente sí, la herramienta lee números y escala. Pero la precisión es limitada con tazas (volumen inconsistente). Se recomienda convertir a gramos antes de escalar.',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
const howTo = [
|
|
30
|
+
{
|
|
31
|
+
name: 'Ingresa tus raciones',
|
|
32
|
+
text: 'En el campo "Original", coloca el número de personas para el que la receta está diseñada. En "Deseado", coloca el número de personas que vas a cocinar.',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'Pega tu lista de ingredientes',
|
|
36
|
+
text: 'Copia y pega tu lista tal cual. Cada ingrediente en una línea. La herramienta reconoce números al inicio (500g, 1/2, 2.5) y escala automáticamente.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Ajusta según contexto',
|
|
40
|
+
text: 'Los resultados son matemáticamente exactos, pero la cocina es arte. Especias: escala al 75%. Levaduras: menos de lo teórico en grandes cantidades. Tiempos: no se escalan nunca.',
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
const faqSchema = {
|
|
45
|
+
'@context': 'https://schema.org',
|
|
46
|
+
'@type': 'FAQPage',
|
|
47
|
+
mainEntity: faq.map((item) => ({
|
|
48
|
+
'@type': 'Question',
|
|
49
|
+
name: item.question,
|
|
50
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
51
|
+
})),
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const howToSchema = {
|
|
55
|
+
'@context': 'https://schema.org',
|
|
56
|
+
'@type': 'HowTo',
|
|
57
|
+
name: title,
|
|
58
|
+
description,
|
|
59
|
+
step: howTo.map((step) => ({
|
|
60
|
+
'@type': 'HowToStep',
|
|
61
|
+
name: step.name,
|
|
62
|
+
text: step.text,
|
|
63
|
+
})),
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const appSchema = {
|
|
67
|
+
'@context': 'https://schema.org',
|
|
68
|
+
'@type': 'SoftwareApplication',
|
|
69
|
+
name: title,
|
|
70
|
+
description,
|
|
71
|
+
applicationCategory: 'UtilitiesApplication',
|
|
72
|
+
operatingSystem: 'All',
|
|
73
|
+
};
|
|
74
|
+
|
|
3
75
|
export const content: ToolLocaleContent = {
|
|
4
76
|
slug: 'reescalador-ingredientes',
|
|
5
|
-
title
|
|
6
|
-
description
|
|
77
|
+
title,
|
|
78
|
+
description,
|
|
7
79
|
ui: {
|
|
8
80
|
servings: 'Raciones',
|
|
9
81
|
original: 'Original',
|
|
@@ -24,28 +96,7 @@ export const content: ToolLocaleContent = {
|
|
|
24
96
|
defaultIngredient3: '2 Huevos',
|
|
25
97
|
},
|
|
26
98
|
faqTitle: 'Preguntas Frecuentes',
|
|
27
|
-
faq
|
|
28
|
-
{
|
|
29
|
-
question: '¿Por qué mi factor de conversión incluye decimales?',
|
|
30
|
-
answer: 'Porque las proporciones culinarias no siempre son redondas. Si escalas una receta para 4 personas a 7, el factor es 1.75 exactamente. Los ingredientes se multiplican por ese número, aunque encuentres fracciones. Es más exacto que redondear arbitrariamente.',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
question: '¿Qué pasa si ingreso "1/2 cucharadita de sal"?',
|
|
34
|
-
answer: 'El parser busca el número primero. Reconocerá "1" como cantidad, luego "/2" como parte de la unidad. El resultado será "0.5", y al escalar se multiplicará correctamente. Para fracciones como "1/2", ingresa "0.5" directamente (más claro) o la herramienta las interpreta como división.',
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
question: '¿Debo redondear los resultados finales?',
|
|
38
|
-
answer: 'Depende del ingrediente. Para harinas, sí. Para levaduras o especias, la precisión importa menos (escala al 75% de lo indicado). Para huevos: si obtienes 2.3, usa 2 completos + parte de un tercero (pesada), o redondea a 2 si el plato lo permite.',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
question: '¿Por qué no cambia el resultado cuando cambio las raciones?',
|
|
42
|
-
answer: 'Asegúrate de que el campo de ingredientes tenga contenido. Si está vacío, no hay nada que escalar. También verifica que los números en tus ingredientes sean reconocibles (ej: "500g", "1/2 cucharadita").',
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
question: '¿Funciona con medidas imperiales (onzas, tazas)?',
|
|
46
|
-
answer: 'Técnicamente sí, la herramienta lee números y escala. Pero la precisión es limitada con tazas (volumen inconsistente). Se recomienda convertir a gramos antes de escalar.',
|
|
47
|
-
},
|
|
48
|
-
],
|
|
99
|
+
faq,
|
|
49
100
|
bibliographyTitle: 'Bibliografía',
|
|
50
101
|
bibliography: [
|
|
51
102
|
{
|
|
@@ -61,20 +112,7 @@ export const content: ToolLocaleContent = {
|
|
|
61
112
|
url: 'https://www.modernistcuisine.com/',
|
|
62
113
|
},
|
|
63
114
|
],
|
|
64
|
-
howTo
|
|
65
|
-
{
|
|
66
|
-
name: 'Ingresa tus raciones',
|
|
67
|
-
text: 'En el campo "Original", coloca el número de personas para el que la receta está diseñada. En "Deseado", coloca el número de personas que vas a cocinar.',
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
name: 'Pega tu lista de ingredientes',
|
|
71
|
-
text: 'Copia y pega tu lista tal cual. Cada ingrediente en una línea. La herramienta reconoce números al inicio (500g, 1/2, 2.5) y escala automáticamente.',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
name: 'Ajusta según contexto',
|
|
75
|
-
text: 'Los resultados son matemáticamente exactos, pero la cocina es arte. Especias: escala al 75%. Levaduras: menos de lo teórico en grandes cantidades. Tiempos: no se escalan nunca.',
|
|
76
|
-
},
|
|
77
|
-
],
|
|
115
|
+
howTo,
|
|
78
116
|
seo: [
|
|
79
117
|
{
|
|
80
118
|
type: 'title',
|
|
@@ -203,66 +241,5 @@ export const content: ToolLocaleContent = {
|
|
|
203
241
|
},
|
|
204
242
|
],
|
|
205
243
|
|
|
206
|
-
schemas: [
|
|
207
|
-
{
|
|
208
|
-
'@context': 'https://schema.org',
|
|
209
|
-
'@type': 'WebApplication',
|
|
210
|
-
name: 'Escalador de Ingredientes',
|
|
211
|
-
description: 'Escala recetas automáticamente según el número de raciones. Calcula las cantidades exactas de ingredientes multiplicando o reduciendo tu receta sin complicaciones.',
|
|
212
|
-
url: 'https://jjlmoya.es/utilidades/escalador-ingredientes',
|
|
213
|
-
applicationCategory: 'Utilities',
|
|
214
|
-
inLanguage: 'es-ES',
|
|
215
|
-
offers: {
|
|
216
|
-
'@type': 'Offer',
|
|
217
|
-
price: '0',
|
|
218
|
-
priceCurrency: 'EUR',
|
|
219
|
-
},
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
'@context': 'https://schema.org',
|
|
223
|
-
'@type': 'Article',
|
|
224
|
-
headline: 'Escalador de Ingredientes - Ajusta tus Recetas Fácilmente',
|
|
225
|
-
description: 'Escala recetas automáticamente según el número de raciones. Calcula las cantidades exactas de ingredientes multiplicando o reduciendo tu receta sin complicaciones.',
|
|
226
|
-
author: {
|
|
227
|
-
'@type': 'Person',
|
|
228
|
-
name: 'jjlmoya',
|
|
229
|
-
},
|
|
230
|
-
inLanguage: 'es-ES',
|
|
231
|
-
isPartOf: {
|
|
232
|
-
'@type': 'WebSite',
|
|
233
|
-
name: 'Utilidades jjlmoya',
|
|
234
|
-
url: 'https://jjlmoya.es',
|
|
235
|
-
},
|
|
236
|
-
},
|
|
237
|
-
{
|
|
238
|
-
'@context': 'https://schema.org',
|
|
239
|
-
'@type': 'BreadcrumbList',
|
|
240
|
-
itemListElement: [
|
|
241
|
-
{
|
|
242
|
-
'@type': 'ListItem',
|
|
243
|
-
position: 1,
|
|
244
|
-
name: 'Inicio',
|
|
245
|
-
item: 'https://jjlmoya.es',
|
|
246
|
-
},
|
|
247
|
-
{
|
|
248
|
-
'@type': 'ListItem',
|
|
249
|
-
position: 2,
|
|
250
|
-
name: 'Utilidades',
|
|
251
|
-
item: 'https://jjlmoya.es/utilidades',
|
|
252
|
-
},
|
|
253
|
-
{
|
|
254
|
-
'@type': 'ListItem',
|
|
255
|
-
position: 3,
|
|
256
|
-
name: 'Cocina',
|
|
257
|
-
item: 'https://jjlmoya.es/utilidades/cocina',
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
'@type': 'ListItem',
|
|
261
|
-
position: 4,
|
|
262
|
-
name: 'Escalador de Ingredientes',
|
|
263
|
-
item: 'https://jjlmoya.es/utilidades/escalador-ingredientes',
|
|
264
|
-
},
|
|
265
|
-
],
|
|
266
|
-
},
|
|
267
|
-
],
|
|
244
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
268
245
|
};
|
|
@@ -8,7 +8,7 @@ interface Props {
|
|
|
8
8
|
const { ui } = Astro.props;
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
<div class="kitchen-timer-wrapper">
|
|
11
|
+
<div class="kitchen-timer-wrapper" id="kitchen-timer-wrapper" data-ui={JSON.stringify(ui)}>
|
|
12
12
|
<div class="kitchen-timer-master-card">
|
|
13
13
|
<div id="timers-grid" class="timers-grid">
|
|
14
14
|
<div class="timer-card" data-index="0">
|
|
@@ -332,10 +332,13 @@ const { ui } = Astro.props;
|
|
|
332
332
|
<script>
|
|
333
333
|
import { initKitchenTimers } from "./init";
|
|
334
334
|
|
|
335
|
+
const wrapper = document.getElementById("kitchen-timer-wrapper");
|
|
336
|
+
const ui = wrapper ? JSON.parse(wrapper.dataset.ui || "{}") : {};
|
|
337
|
+
|
|
335
338
|
if (document.readyState === "loading") {
|
|
336
|
-
document.addEventListener("DOMContentLoaded", initKitchenTimers);
|
|
339
|
+
document.addEventListener("DOMContentLoaded", () => initKitchenTimers(ui));
|
|
337
340
|
} else {
|
|
338
|
-
initKitchenTimers();
|
|
341
|
+
initKitchenTimers(ui);
|
|
339
342
|
}
|
|
340
343
|
</script>
|
|
341
344
|
|
|
@@ -346,6 +349,7 @@ const { ui } = Astro.props;
|
|
|
346
349
|
--kt-bg: #fff;
|
|
347
350
|
--kt-bg-secondary: #f8fafc;
|
|
348
351
|
--kt-border: #e2e8f0;
|
|
352
|
+
--kt-separator: #cbd5e1;
|
|
349
353
|
--kt-text: #0f172a;
|
|
350
354
|
--kt-text-muted: #64748b;
|
|
351
355
|
--card-br: 1.5rem;
|
|
@@ -357,6 +361,7 @@ const { ui } = Astro.props;
|
|
|
357
361
|
--kt-bg: #0f172a;
|
|
358
362
|
--kt-bg-secondary: #1e293b;
|
|
359
363
|
--kt-border: #334155;
|
|
364
|
+
--kt-separator: #64748b;
|
|
360
365
|
--kt-text: #f8fafc;
|
|
361
366
|
--kt-text-muted: #94a3b8;
|
|
362
367
|
}
|
|
@@ -473,22 +478,35 @@ const { ui } = Astro.props;
|
|
|
473
478
|
}
|
|
474
479
|
|
|
475
480
|
.time-input {
|
|
476
|
-
width:
|
|
481
|
+
width: 85px;
|
|
482
|
+
aspect-ratio: 1;
|
|
477
483
|
background: var(--kt-bg-secondary);
|
|
478
484
|
border: 2px solid var(--kt-border);
|
|
479
|
-
border-radius:
|
|
480
|
-
font-size: 2.
|
|
485
|
+
border-radius: 1.25rem;
|
|
486
|
+
font-size: 2.75rem;
|
|
481
487
|
font-weight: 900;
|
|
482
488
|
text-align: center;
|
|
483
489
|
color: var(--kt-text);
|
|
484
|
-
padding: 0
|
|
490
|
+
padding: 0;
|
|
491
|
+
display: flex;
|
|
492
|
+
align-items: center;
|
|
493
|
+
justify-content: center;
|
|
485
494
|
outline: none;
|
|
486
495
|
transition: all 0.2s;
|
|
496
|
+
appearance: textfield;
|
|
497
|
+
-moz-appearance: textfield;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
.time-input::-webkit-outer-spin-button,
|
|
501
|
+
.time-input::-webkit-inner-spin-button {
|
|
502
|
+
-webkit-appearance: none;
|
|
503
|
+
margin: 0;
|
|
487
504
|
}
|
|
488
505
|
|
|
489
506
|
.time-input:focus {
|
|
490
507
|
border-color: var(--kt-primary);
|
|
491
508
|
background: var(--kt-bg);
|
|
509
|
+
box-shadow: 0 0 0 4px rgba(234, 88, 12, 0.1);
|
|
492
510
|
}
|
|
493
511
|
|
|
494
512
|
.time-label {
|
|
@@ -502,8 +520,8 @@ const { ui } = Astro.props;
|
|
|
502
520
|
.time-separator {
|
|
503
521
|
font-size: 2rem;
|
|
504
522
|
font-weight: 900;
|
|
505
|
-
color: var(--kt-
|
|
506
|
-
margin-top: -1.
|
|
523
|
+
color: var(--kt-separator);
|
|
524
|
+
margin-top: -1.4rem;
|
|
507
525
|
}
|
|
508
526
|
|
|
509
527
|
.timer-controls {
|
|
@@ -101,12 +101,11 @@ export const content: ToolLocaleContent = {
|
|
|
101
101
|
reset: 'Reset',
|
|
102
102
|
addOneMin: '+1 min',
|
|
103
103
|
addFiveMin: '+5 min',
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
},
|
|
104
|
+
statusReady: 'Ready',
|
|
105
|
+
statusRunning: 'Running',
|
|
106
|
+
statusPaused: 'Paused',
|
|
107
|
+
statusFinished: 'TIME!',
|
|
108
|
+
finishNotification: 'Timer Finished for',
|
|
110
109
|
},
|
|
111
110
|
|
|
112
111
|
faq: [
|
|
@@ -225,5 +224,5 @@ export const content: ToolLocaleContent = {
|
|
|
225
224
|
},
|
|
226
225
|
],
|
|
227
226
|
|
|
228
|
-
schemas: [faqSchema, howToSchema, appSchema],
|
|
227
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
229
228
|
};
|
|
@@ -101,12 +101,11 @@ export const content: ToolLocaleContent = {
|
|
|
101
101
|
reset: 'Reset',
|
|
102
102
|
addOneMin: '+1 min',
|
|
103
103
|
addFiveMin: '+5 min',
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
},
|
|
104
|
+
statusReady: 'Listo',
|
|
105
|
+
statusRunning: 'Corriendo',
|
|
106
|
+
statusPaused: 'Pausado',
|
|
107
|
+
statusFinished: '¡TIEMPO!',
|
|
108
|
+
finishNotification: 'Temporizador Terminado para',
|
|
110
109
|
},
|
|
111
110
|
|
|
112
111
|
faq: [
|
|
@@ -216,7 +215,7 @@ export const content: ToolLocaleContent = {
|
|
|
216
215
|
items: [
|
|
217
216
|
'<strong>Escalona los tiempos de finalización:</strong> Si todo termina a la vez, te agobiarás emplatando. Intenta que los acompañamientos estén listos 5 minutos antes que el plato principal.',
|
|
218
217
|
'<strong>Usa el calor residual:</strong> Apaga el fuego de las verduras o pastas 1-2 minutos antes de que el temporizador suene. El calor residual terminará la cocción suavemente.',
|
|
219
|
-
'<strong>Nombra tus temporizadores:</strong> En una cocina ajetreada es fácil olvidar qué alarma es cual. Usa la función de renombrado de esta herramienta para etiquetar \'Horno\', \'Arroz\' o \'Salsa\'.',
|
|
218
|
+
'<strong>Nombra tus temporizadores:</strong> En una cocina ajetreada es fácil olvidar qué alarma es cual. Usa la función de renombrado de esta herramienta para etiquetar \'Horno\', \'Arroz\', o \'Salsa\'.',
|
|
220
219
|
],
|
|
221
220
|
},
|
|
222
221
|
{
|
|
@@ -225,5 +224,5 @@ export const content: ToolLocaleContent = {
|
|
|
225
224
|
},
|
|
226
225
|
],
|
|
227
226
|
|
|
228
|
-
schemas: [faqSchema, howToSchema, appSchema],
|
|
227
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema as any],
|
|
229
228
|
};
|