@jjlmoya/utils-travel 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 (58) hide show
  1. package/package.json +60 -0
  2. package/src/category/i18n/en.ts +185 -0
  3. package/src/category/i18n/es.ts +187 -0
  4. package/src/category/i18n/fr.ts +100 -0
  5. package/src/category/index.ts +12 -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 +15 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +22 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +278 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +8 -0
  17. package/src/tests/locale_completeness.test.ts +21 -0
  18. package/src/tests/mocks/astro_mock.js +2 -0
  19. package/src/tests/no_h1_in_components.test.ts +8 -0
  20. package/src/tests/seo_length.test.ts +8 -0
  21. package/src/tests/tool_validation.test.ts +17 -0
  22. package/src/tool/luggage-calculator/bibliography.astro +14 -0
  23. package/src/tool/luggage-calculator/component.astro +560 -0
  24. package/src/tool/luggage-calculator/i18n/en.ts +617 -0
  25. package/src/tool/luggage-calculator/i18n/es.ts +617 -0
  26. package/src/tool/luggage-calculator/i18n/fr.ts +549 -0
  27. package/src/tool/luggage-calculator/index.ts +53 -0
  28. package/src/tool/luggage-calculator/seo.astro +14 -0
  29. package/src/tool/mini-adventures/bibliography.astro +14 -0
  30. package/src/tool/mini-adventures/component.astro +665 -0
  31. package/src/tool/mini-adventures/i18n/en.ts +161 -0
  32. package/src/tool/mini-adventures/i18n/es.ts +286 -0
  33. package/src/tool/mini-adventures/i18n/fr.ts +144 -0
  34. package/src/tool/mini-adventures/index.ts +70 -0
  35. package/src/tool/mini-adventures/seo.astro +14 -0
  36. package/src/tool/optimal-routes/bibliography.astro +14 -0
  37. package/src/tool/optimal-routes/component.astro +439 -0
  38. package/src/tool/optimal-routes/i18n/en.ts +42 -0
  39. package/src/tool/optimal-routes/i18n/es.ts +52 -0
  40. package/src/tool/optimal-routes/index.ts +63 -0
  41. package/src/tool/optimal-routes/lib/RouteManager.ts +181 -0
  42. package/src/tool/optimal-routes/seo.astro +14 -0
  43. package/src/tool/suitcase-checklist/bibliography.astro +14 -0
  44. package/src/tool/suitcase-checklist/component.astro +710 -0
  45. package/src/tool/suitcase-checklist/i18n/en.ts +261 -0
  46. package/src/tool/suitcase-checklist/i18n/es.ts +261 -0
  47. package/src/tool/suitcase-checklist/i18n/fr.ts +259 -0
  48. package/src/tool/suitcase-checklist/index.ts +75 -0
  49. package/src/tool/suitcase-checklist/seo.astro +14 -0
  50. package/src/tool/tip-calculator/bibliography.astro +14 -0
  51. package/src/tool/tip-calculator/component.astro +683 -0
  52. package/src/tool/tip-calculator/i18n/en.ts +264 -0
  53. package/src/tool/tip-calculator/i18n/es.ts +264 -0
  54. package/src/tool/tip-calculator/i18n/fr.ts +264 -0
  55. package/src/tool/tip-calculator/index.ts +53 -0
  56. package/src/tool/tip-calculator/seo.astro +14 -0
  57. package/src/tools.ts +13 -0
  58. package/src/types.ts +73 -0
@@ -0,0 +1,617 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { LuggageCalculatorUI, LuggageCalculatorLocaleContent } from '../index';
3
+
4
+ const slug = 'calculadora-equipaje-aerolineas';
5
+ const title = 'Calculadora de Equipaje de Mano: Medidas Aerolíneas 2026';
6
+ const description = 'Consulta las dimensiones y peso permitido para tu maleta de mano y artículo personal en Ryanair, Vueling, Iberia y +30 aerolíneas. ¡Evita recargos!';
7
+
8
+ const ui: LuggageCalculatorUI = {
9
+ title: "Calculadora de Equipaje",
10
+ searchLabel: 'Busca tu aerolínea',
11
+ searchPlaceholder: 'Escribe el nombre de la compañía...',
12
+ personalItemTitle: 'Artículo Personal',
13
+ cabinBagTitle: 'Maleta de Mano',
14
+ weightLabel: 'Peso Max.',
15
+ noResults: 'No encontramos esa aerolínea. Prueba con la búsqueda global.',
16
+ modalNoteTitle: 'Nota importante:',
17
+ modalNoteText: 'Algunas aerolíneas low-cost solo permiten bajar la maleta de cabina si se ha contratado el servicio de "Prioridad" o una maleta adicional.',
18
+ personalItemDetail: 'Bajo el asiento',
19
+ cabinBagDetail: 'Maleta de cabina',
20
+ airlines: [
21
+ {
22
+ name: "Ryanair",
23
+ personal: "40 x 20 x 25 cm",
24
+ personalWeight: "Sin límite",
25
+ cabin: "55 x 40 x 20 cm",
26
+ cabinWeight: "10 kg",
27
+ icon: "mdi:airplane",
28
+ },
29
+ {
30
+ name: "Vueling",
31
+ personal: "40 x 20 x 30 cm",
32
+ personalWeight: "Sin límite",
33
+ cabin: "55 x 40 x 20 cm",
34
+ cabinWeight: "10 kg",
35
+ icon: "mdi:airplane",
36
+ },
37
+ {
38
+ name: "Iberia / Air Nostrum",
39
+ personal: "40 x 30 x 15 cm",
40
+ personalWeight: "Sin límite",
41
+ cabin: "56 x 40 x 25 cm",
42
+ cabinWeight: "10 kg",
43
+ icon: "mdi:airplane",
44
+ },
45
+ {
46
+ name: "EasyJet",
47
+ personal: "45 x 36 x 20 cm",
48
+ personalWeight: "15 kg",
49
+ cabin: "56 x 45 x 25 cm",
50
+ cabinWeight: "15 kg",
51
+ icon: "mdi:airplane",
52
+ },
53
+ {
54
+ name: "Air Europa",
55
+ personal: "40 x 30 x 15 cm",
56
+ personalWeight: "Sin límite",
57
+ cabin: "55 x 35 x 25 cm",
58
+ cabinWeight: "10 kg",
59
+ icon: "mdi:airplane",
60
+ },
61
+ {
62
+ name: "Air France",
63
+ personal: "40 x 30 x 15 cm",
64
+ personalWeight: "12 kg (total)",
65
+ cabin: "55 x 35 x 25 cm",
66
+ cabinWeight: "12 kg (total)",
67
+ icon: "mdi:airplane",
68
+ },
69
+ {
70
+ name: "Lufthansa",
71
+ personal: "40 x 30 x 10 cm",
72
+ personalWeight: "Sin límite",
73
+ cabin: "55 x 40 x 23 cm",
74
+ cabinWeight: "8 kg",
75
+ icon: "mdi:airplane",
76
+ },
77
+ {
78
+ name: "British Airways",
79
+ personal: "40 x 30 x 15 cm",
80
+ personalWeight: "23 kg",
81
+ cabin: "56 x 45 x 25 cm",
82
+ cabinWeight: "23 kg",
83
+ icon: "mdi:airplane",
84
+ },
85
+ {
86
+ name: "KLM",
87
+ personal: "40 x 30 x 15 cm",
88
+ personalWeight: "12 kg (total)",
89
+ cabin: "55 x 35 x 25 cm",
90
+ cabinWeight: "12 kg (total)",
91
+ icon: "mdi:airplane",
92
+ },
93
+ {
94
+ name: "Swiss",
95
+ personal: "40 x 30 x 10 cm",
96
+ personalWeight: "Sin límite",
97
+ cabin: "55 x 40 x 23 cm",
98
+ cabinWeight: "8 kg",
99
+ icon: "mdi:airplane",
100
+ },
101
+ {
102
+ name: "Norwegian",
103
+ personal: "30 x 20 x 38 cm",
104
+ personalWeight: "10 kg (total)",
105
+ cabin: "55 x 40 x 23 cm",
106
+ cabinWeight: "10 kg (total)",
107
+ icon: "mdi:airplane",
108
+ },
109
+ {
110
+ name: "TAP Air Portugal",
111
+ personal: "40 x 30 x 15 cm",
112
+ personalWeight: "2 kg",
113
+ cabin: "55 x 40 x 20 cm",
114
+ cabinWeight: "8 kg",
115
+ icon: "mdi:airplane",
116
+ },
117
+ {
118
+ name: "Volotea",
119
+ personal: "40 x 30 x 20 cm",
120
+ personalWeight: "Sin límite",
121
+ cabin: "55 x 40 x 20 cm",
122
+ cabinWeight: "10 kg (total)",
123
+ icon: "mdi:airplane",
124
+ },
125
+ {
126
+ name: "Emirates",
127
+ personal: "Incluida en cabina",
128
+ personalWeight: "-",
129
+ cabin: "55 x 38 x 20 cm",
130
+ cabinWeight: "7 kg",
131
+ icon: "mdi:airplane",
132
+ },
133
+ {
134
+ name: "Qatar Airways",
135
+ personal: "Incluida en cabina",
136
+ personalWeight: "-",
137
+ cabin: "50 x 37 x 25 cm",
138
+ cabinWeight: "7 kg",
139
+ icon: "mdi:airplane",
140
+ },
141
+ {
142
+ name: "Turkish Airlines",
143
+ personal: "40 x 30 x 15 cm",
144
+ personalWeight: "4 kg",
145
+ cabin: "55 x 40 x 23 cm",
146
+ cabinWeight: "8 kg",
147
+ icon: "mdi:airplane",
148
+ },
149
+ {
150
+ name: "American Airlines",
151
+ personal: "45 x 35 x 20 cm",
152
+ personalWeight: "Sin límite",
153
+ cabin: "56 x 36 x 23 cm",
154
+ cabinWeight: "Sin límite",
155
+ icon: "mdi:airplane",
156
+ },
157
+ {
158
+ name: "Delta Air Lines",
159
+ personal: "Bajo el asiento",
160
+ personalWeight: "-",
161
+ cabin: "56 x 35 x 23 cm",
162
+ cabinWeight: "Sin límite",
163
+ icon: "mdi:airplane",
164
+ },
165
+ {
166
+ name: "United Airlines",
167
+ personal: "43 x 25 x 22 cm",
168
+ personalWeight: "Sin límite",
169
+ cabin: "56 x 35 x 22 cm",
170
+ cabinWeight: "Sin límite",
171
+ icon: "mdi:airplane",
172
+ },
173
+ {
174
+ name: "Southwest Airlines",
175
+ personal: "47 x 34 x 21 cm",
176
+ personalWeight: "Sin límite",
177
+ cabin: "61 x 40 x 25 cm",
178
+ cabinWeight: "Sin límite",
179
+ icon: "mdi:airplane",
180
+ },
181
+ {
182
+ name: "JetBlue",
183
+ personal: "43 x 33 x 20 cm",
184
+ personalWeight: "Sin límite",
185
+ cabin: "56 x 35 x 23 cm",
186
+ cabinWeight: "Sin límite",
187
+ icon: "mdi:airplane",
188
+ },
189
+ {
190
+ name: "Air Canada",
191
+ personal: "43 x 33 x 16 cm",
192
+ personalWeight: "Sin límite",
193
+ cabin: "55 x 40 x 23 cm",
194
+ cabinWeight: "10 kg",
195
+ icon: "mdi:airplane",
196
+ },
197
+ {
198
+ name: "Avianca",
199
+ personal: "45 x 35 x 25 cm",
200
+ personalWeight: "Sin límite",
201
+ cabin: "55 x 35 x 25 cm",
202
+ cabinWeight: "10 kg",
203
+ icon: "mdi:airplane",
204
+ },
205
+ {
206
+ name: "LATAM",
207
+ personal: "45 x 35 x 20 cm",
208
+ personalWeight: "Sin límite",
209
+ cabin: "55 x 35 x 25 cm",
210
+ cabinWeight: "10 kg",
211
+ icon: "mdi:airplane",
212
+ },
213
+ {
214
+ name: "Aerolineas Argentinas",
215
+ personal: "40 x 30 x 15 cm",
216
+ personalWeight: "Sin límite",
217
+ cabin: "55 x 35 x 25 cm",
218
+ cabinWeight: "8 kg",
219
+ icon: "mdi:airplane",
220
+ },
221
+ {
222
+ name: "Japan Airlines (JAL)",
223
+ personal: "40 x 30 x 15 cm",
224
+ personalWeight: "Sin límite",
225
+ cabin: "55 x 40 x 25 cm",
226
+ cabinWeight: "10 kg",
227
+ icon: "mdi:airplane",
228
+ },
229
+ {
230
+ name: "Singapore Airlines",
231
+ personal: "Bajo el asiento",
232
+ personalWeight: "Sin límite",
233
+ cabin: "55 x 40 x 20 cm",
234
+ cabinWeight: "7 kg",
235
+ icon: "mdi:airplane",
236
+ },
237
+ {
238
+ name: "Qantas",
239
+ personal: "Bajo el asiento",
240
+ personalWeight: "Sin límite",
241
+ cabin: "56 x 36 x 23 cm",
242
+ cabinWeight: "7 kg",
243
+ icon: "mdi:airplane",
244
+ },
245
+ {
246
+ name: "Finnair",
247
+ personal: "40 x 30 x 15 cm",
248
+ personalWeight: "Sin límite",
249
+ cabin: "55 x 40 x 23 cm",
250
+ cabinWeight: "8 kg",
251
+ icon: "mdi:airplane",
252
+ },
253
+ {
254
+ name: "ITA Airways",
255
+ personal: "45 x 36 x 20 cm",
256
+ personalWeight: "Sin límite",
257
+ cabin: "55 x 35 x 25 cm",
258
+ cabinWeight: "8 kg",
259
+ icon: "mdi:airplane",
260
+ },
261
+ {
262
+ name: "Air New Zealand",
263
+ personal: "Bajo el asiento",
264
+ personalWeight: "-",
265
+ cabin: "56 x 36 x 23 cm",
266
+ cabinWeight: "7 kg",
267
+ icon: "mdi:airplane",
268
+ },
269
+ {
270
+ name: "Cathay Pacific",
271
+ personal: "40 x 30 x 15 cm",
272
+ personalWeight: "Sin límite",
273
+ cabin: "56 x 36 x 23 cm",
274
+ cabinWeight: "7 kg",
275
+ icon: "mdi:airplane",
276
+ },
277
+ {
278
+ name: "Eva Air",
279
+ personal: "40 x 30 x 15 cm",
280
+ personalWeight: "Sin límite",
281
+ cabin: "56 x 36 x 23 cm",
282
+ cabinWeight: "7 kg",
283
+ icon: "mdi:airplane",
284
+ },
285
+ {
286
+ name: "Thai Airways",
287
+ personal: "Bajo el asiento",
288
+ personalWeight: "-",
289
+ cabin: "56 x 45 x 25 cm",
290
+ cabinWeight: "7 kg",
291
+ icon: "mdi:airplane",
292
+ },
293
+ {
294
+ name: "ANA (All Nippon Airways)",
295
+ personal: "Bajo el asiento",
296
+ personalWeight: "-",
297
+ cabin: "55 x 40 x 25 cm",
298
+ cabinWeight: "10 kg",
299
+ icon: "mdi:airplane",
300
+ },
301
+ {
302
+ name: "Korean Air",
303
+ personal: "40 x 30 x 15 cm",
304
+ personalWeight: "Sin límite",
305
+ cabin: "55 x 40 x 20 cm",
306
+ cabinWeight: "10 kg",
307
+ icon: "mdi:airplane",
308
+ },
309
+ {
310
+ name: "Aeroméxico",
311
+ personal: "45 x 35 x 20 cm",
312
+ personalWeight: "Sin límite",
313
+ cabin: "55 x 35 x 25 cm",
314
+ cabinWeight: "10 kg",
315
+ icon: "mdi:airplane",
316
+ },
317
+ {
318
+ name: "Copa Airlines",
319
+ personal: "43 x 25 x 22 cm",
320
+ personalWeight: "Sin límite",
321
+ cabin: "56 x 36 x 23 cm",
322
+ cabinWeight: "10 kg",
323
+ icon: "mdi:airplane",
324
+ },
325
+ {
326
+ name: "Air India",
327
+ personal: "Dimensiones personales",
328
+ personalWeight: "-",
329
+ cabin: "55 x 35 x 25 cm",
330
+ cabinWeight: "8 kg",
331
+ icon: "mdi:airplane",
332
+ },
333
+ {
334
+ name: "Ethiopian Airlines",
335
+ personal: "Bajo el asiento",
336
+ personalWeight: "-",
337
+ cabin: "55 x 40 x 23 cm",
338
+ cabinWeight: "7 kg",
339
+ icon: "mdi:airplane",
340
+ },
341
+ {
342
+ name: "Kenya Airways",
343
+ personal: "Bajo el asiento",
344
+ personalWeight: "-",
345
+ cabin: "55 x 35 x 25 cm",
346
+ cabinWeight: "12 kg",
347
+ icon: "mdi:airplane",
348
+ },
349
+ {
350
+ name: "Jetstar",
351
+ personal: "Bajo el asiento",
352
+ personalWeight: "7 kg (total)",
353
+ cabin: "56 x 36 x 23 cm",
354
+ cabinWeight: "7 kg (total)",
355
+ icon: "mdi:airplane",
356
+ },
357
+ {
358
+ name: "Lion Air",
359
+ personal: "Dimensiones reducidas",
360
+ personalWeight: "-",
361
+ cabin: "40 x 30 x 20 cm",
362
+ cabinWeight: "7 kg",
363
+ icon: "mdi:airplane",
364
+ },
365
+ {
366
+ name: "China Southern Airlines",
367
+ personal: "Bajo el asiento",
368
+ personalWeight: "-",
369
+ cabin: "55 x 40 x 20 cm",
370
+ cabinWeight: "5 kg",
371
+ icon: "mdi:airplane",
372
+ },
373
+ ],
374
+
375
+ };
376
+
377
+ const faq: LuggageCalculatorLocaleContent['faq'] = [
378
+ {
379
+ question: "¿Qué pasa si mi maleta excede las medidas por 1 o 2 cm?",
380
+ answer: "Depende de la aerolínea y del personal de puerta. Las aerolíneas low-cost suelen usar un cajón metálico de medidas; si la maleta no entra libremente (incluyendo ruedas), te cobrarán la tasa de facturación en puerta, que suele rondar entre los 45€ y 65€.",
381
+ },
382
+ {
383
+ question: "¿Puedo llevar una mochila y una maleta de mano gratis?",
384
+ answer: "En aerolíneas como Iberia, British Airways o Lufthansa, sí. En aerolíneas como Ryanair o Vueling (tarifa básica), solo puedes llevar un bulto pequeño que quepa bajo el asiento. Para subir la maleta de cabina, debes pagar el extra de 'Prioridad'.",
385
+ },
386
+ {
387
+ question: "¿Las ruedas cuentan en las medidas de la maleta?",
388
+ answer: "Sí, siempre. Las medidas oficiales de las aerolíneas (ej: 55x40x20) son dimensiones totales. Si tu maleta mide 55cm de cuerpo pero las ruedas añaden otros 3cm, legalmente estás excediendo el límite.",
389
+ },
390
+ {
391
+ question: "¿Hay límite de peso para el bulto personal bajo el asiento?",
392
+ answer: "La mayoría de aerolíneas no suelen pesar el bulto pequeño, siempre que mantenga unas dimensiones razonables y quepa bajo el asiento. Sin embargo, algunas como EasyJet marcan un límite de 15kg para todo el equipaje de mano combinado.",
393
+ },
394
+ ];
395
+
396
+ const howTo: LuggageCalculatorLocaleContent['howTo'] = [
397
+ {
398
+ name: "Busca tu aerolínea",
399
+ text: "Escribe el nombre de la compañía con la que vuelas en nuestro buscador para ver sus límites específicos.",
400
+ },
401
+ {
402
+ name: "Mide tu maleta en casa",
403
+ text: "Usa una cinta métrica para medir el alto (incluyendo ruedas), ancho y profundidad de tu equipaje.",
404
+ },
405
+ {
406
+ name: "Comprueba el peso",
407
+ text: "Usa una báscula de maletas o una doméstica para asegurarte de no superar los kilos permitidos (suelen ser 8kg o 10kg).",
408
+ },
409
+ ];
410
+
411
+ const bibliography: LuggageCalculatorLocaleContent['bibliography'] = [
412
+ {
413
+ name: "AENA: Pasajeros y Equipajes",
414
+ url: "https://www.aena.es/es/pasajeros/pasajeros.html",
415
+ },
416
+ {
417
+ name: "Derechos de los Pasajeros de la UE",
418
+ url: "https://europa.eu/youreurope/citizens/travel/passenger-rights/air/index_es.htm",
419
+ },
420
+ {
421
+ name: "IATA: Passenger Baggage Rules",
422
+ url: "https://www.iata.org/en/programs/ops-infra/baggage/passenger-baggage-rules/",
423
+ },
424
+ ];
425
+
426
+ const seo: LuggageCalculatorLocaleContent['seo'] = [
427
+ {
428
+ type: "title",
429
+ text: "Guía Completa de Medidas de Equipaje de Mano 2026",
430
+ level: 2,
431
+ },
432
+ {
433
+ type: "summary",
434
+ title: "Todo lo que necesitas saber antes de volar",
435
+ items: [
436
+ "Guía actualizada de dimensiones para artículo personal y maleta de cabina.",
437
+ "Comparativa de pesos permitidos por aerolínea (desde 7kg hasta 23kg).",
438
+ "Diferencia entre artículo personal, maleta de mano y equipaje facturado.",
439
+ "Consejos para evitar recargos en la puerta de embarque.",
440
+ ],
441
+ },
442
+ {
443
+ type: "paragraph",
444
+ html: "Viajar hoy en día se ha convertido en un rompecabezas logístico. Lo que antes era un estándar universal (la maleta de 10kg de toda la vida) es ahora una jungla de medidas que varían por escasos centímetros entre compañías. Nuestra <strong>calculadora de equipaje</strong> nace para responder a la pregunta más repetida en los aeropuertos: \"¿Me van a cobrar por este bulto?\".",
445
+ },
446
+ {
447
+ type: "title",
448
+ text: "Artículo Personal vs. Maleta de Cabina",
449
+ level: 3,
450
+ },
451
+ {
452
+ type: "paragraph",
453
+ html: "Entender la jerarquía del equipaje moderno es vital. Desde que el modelo *Low Cost* se impuso, la mayoría de aerolíneas han fragmentado lo que puedes subir al avión. El <strong>artículo personal</strong> (mochila pequeña, bolso o maletín de portátil) suele ser el único gratuito en tarifas básicas, mientras que la <strong>maleta de cabina</strong> (el trolley tradicional) suele requerir un suplemento o estar incluida en Prioridad.",
454
+ },
455
+ {
456
+ type: "comparative",
457
+ items: [
458
+ {
459
+ title: "Aerolíneas Low Cost",
460
+ description: "Reglas estrictas, suelen permitir solo un bulto pequeño bajo el asiento gratis.",
461
+ icon: "mdi:tag-outline",
462
+ points: [
463
+ "Ryanair/Vueling: Maleta de cabina de pago",
464
+ "Dimensiones vigiladas con cajón de medidas",
465
+ "Pesos máximos entre 8kg y 10kg",
466
+ "Recargos elevados si excedes el tamaño",
467
+ ],
468
+ },
469
+ {
470
+ title: "Líneas de Bandera / Tradicionales",
471
+ description: "Políticas más flexibles, suelen incluir maleta de cabina en casi todas las tarifas.",
472
+ icon: "mdi:airplane-takeoff",
473
+ highlight: true,
474
+ points: [
475
+ "Iberia/Lufthansa: Maleta de cabina incluida",
476
+ "Límites de peso más amplios (hasta 23kg en BA)",
477
+ "Combinación de artículo personal + maleta",
478
+ "Servicio de bajada a bodega gratis si el vuelo va lleno",
479
+ ],
480
+ },
481
+ ],
482
+ },
483
+ {
484
+ type: "title",
485
+ text: "Medidas por Aerolínea: Tabla de Referencia",
486
+ level: 3,
487
+ },
488
+ {
489
+ type: "paragraph",
490
+ html: "Aunque puedes usar nuestro buscador interactivo, aquí tienes un resumen de las políticas más comunes para planificar rápido:",
491
+ },
492
+ {
493
+ type: "table",
494
+ headers: ["Aerolínea", "Artículo Personal (Bajo asiento)", "Maleta Cabina (Mano)"],
495
+ rows: [
496
+ ["<strong>Ryanair</strong>", "40 x 20 x 25 cm", "55 x 40 x 20 cm (Pago)"],
497
+ ["<strong>Vueling</strong>", "40 x 20 x 30 cm", "55 x 40 x 20 cm (Pago)"],
498
+ ["<strong>Iberia</strong>", "40 x 30 x 15 cm", "56 x 40 x 25 cm (P.Gratuita)"],
499
+ ["<strong>Air France</strong>", "40 x 30 x 15 cm", "55 x 35 x 25 cm (Gratuita)"],
500
+ ["<strong>EasyJet</strong>", "45 x 36 x 20 cm", "56 x 45 x 25 cm (Prioridad)"],
501
+ ["<strong>Lufthansa</strong>", "40 x 30 x 10 cm", "55 x 40 x 23 cm (Gratuita)"],
502
+ ["<strong>American Airlines</strong>", "45 x 35 x 20 cm", "56 x 36 x 23 cm (Gratuita)"],
503
+ ["<strong>Emirates</strong>", "40 x 30 x 15 cm", "55 x 38 x 20 cm (Gratuita)"],
504
+ ["<strong>Qatar Airways</strong>", "Bajo el asiento", "50 x 37 x 25 cm (Gratuita)"],
505
+ ],
506
+ },
507
+ {
508
+ type: "tip",
509
+ title: "El Truco del Peso",
510
+ html: "<p>Muchos viajan tranquilos con las medidas pero olvidan el peso. Aerolíneas como Emirates o Qatar son muy estrictas con el peso (7kg) aunque más relajadas con las medidas. ¡Pesa tu maleta siempre en casa!</p>",
511
+ },
512
+ {
513
+ type: "title",
514
+ text: "Por qué fallan las medidas estándar",
515
+ level: 3,
516
+ },
517
+ {
518
+ type: "paragraph",
519
+ html: "Muchos viajeros compran maletas con la etiqueta \"Cabin Size\" y se llevan una sorpresa desagradable. La razón es que los fabricantes suelen indicar la medida del cuerpo de la maleta, pero las aerolíneas miden el conjunto total: <strong>ruedas + asa + bolsillos exteriores</strong>.",
520
+ },
521
+ {
522
+ type: "title",
523
+ text: "Consejos de Expertos para Empacar",
524
+ level: 3,
525
+ },
526
+ {
527
+ type: "list",
528
+ icon: "mdi:check-decagram",
529
+ items: [
530
+ "<strong>Diferencia entre 'Personal Item' y 'Carry-on':</strong> El personal item debe caber bajo el asiento delantero. El carry-on va en los compartimentos superiores.",
531
+ "<strong>El factor ruedas:</strong> Las medidas que indicamos incluyen ruedas y asas. Una maleta de 55cm con ruedas de 3cm sobresaldrá del medidor oficial.",
532
+ "<strong>Compresión y Flexibilidad:</strong> Las mochilas blandas son preferibles a las maletas rígidas si vas al límite, ya que se pueden comprimir ligeramente en el medidor.",
533
+ "<strong>Tarifas combinadas:</strong> A veces sale más barato pagar una tarifa 'Plus' que añadir la maleta de cabina por separado después de la compra.",
534
+ ],
535
+ },
536
+ {
537
+ type: "title",
538
+ text: "Normas especiales y Objetos Prohibidos",
539
+ level: 3,
540
+ },
541
+ {
542
+ type: "paragraph",
543
+ html: "No todo son centímetros y kilos. El equipaje de mano está sujeto a normativas de seguridad estrictas (reglamento de la EASA). Recuerda la regla de los líquidos: envases de máximo 100ml guardados en una bolsa transparente de 1 litro de capacidad total.",
544
+ },
545
+ {
546
+ type: "table",
547
+ headers: ["Objeto", "¿Permitido?"],
548
+ rows: [
549
+ ["Baterías externas (Powerbanks)", "Sí (Solo cabina)"],
550
+ ["Líquidos > 100ml", "No permitido"],
551
+ ["Tijeras pequeñas (<6cm)", "Generalmente sí"],
552
+ ["Herramientas punzantes", "No permitido"],
553
+ ],
554
+ },
555
+ {
556
+ type: "tip",
557
+ title: "Aviso de Seguridad",
558
+ html: "<p>Las baterías de litio están prohibidas en la bodega del avión por riesgo de incendio. Deben viajar siempre en tu equipaje de mano.</p>",
559
+ },
560
+ {
561
+ type: "title",
562
+ text: "Conclusión: Viaja sin Estrés",
563
+ level: 3,
564
+ },
565
+ {
566
+ type: "paragraph",
567
+ html: "Revisar las medidas de tu maleta antes de salir hacia el aeropuerto te ahorrará no solo dinero (los cargos en puerta suelen superar los 50€), sino el estrés de empezar tus vacaciones con una discusión en el mostrador. ¡Usa nuestra calculadora y vuela tranquilo!",
568
+ },
569
+ ];
570
+
571
+ const faqSchema: WithContext<FAQPage> = {
572
+ '@context': 'https://schema.org',
573
+ '@type': 'FAQPage',
574
+ mainEntity: faq.map((item: any) => ({
575
+ '@type': 'Question',
576
+ name: item.question,
577
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
578
+ })),
579
+ };
580
+
581
+ const howToSchema: WithContext<HowTo> = {
582
+ '@context': 'https://schema.org',
583
+ '@type': 'HowTo',
584
+ name: title,
585
+ description,
586
+ step: howTo.map((step: any) => ({
587
+ '@type': 'HowToStep',
588
+ name: step.name,
589
+ text: step.text,
590
+ })),
591
+ };
592
+
593
+ const appSchema: WithContext<SoftwareApplication> = {
594
+ '@context': 'https://schema.org',
595
+ '@type': 'SoftwareApplication',
596
+ name: title,
597
+ description,
598
+ applicationCategory: 'UtilitiesApplication',
599
+ operatingSystem: 'Web',
600
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
601
+ inLanguage: 'es',
602
+ };
603
+
604
+ export const content: LuggageCalculatorLocaleContent = {
605
+ slug,
606
+ title,
607
+ description,
608
+ ui,
609
+ seo,
610
+ faq,
611
+ faqTitle: "Preguntas Frecuentes",
612
+ bibliography,
613
+ bibliographyTitle: "Fuentes y Referencias",
614
+ howTo,
615
+ howToTitle: "Cómo usar la calculadora",
616
+ schemas: [faqSchema, howToSchema, appSchema],
617
+ };