@jjlmoya/utils-nautical 1.15.0 → 1.17.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 +1 -1
- package/src/category/i18n/de.ts +1 -1
- package/src/category/i18n/en.ts +1 -1
- package/src/category/i18n/es.ts +16 -16
- package/src/category/i18n/fr.ts +16 -16
- package/src/category/i18n/id.ts +1 -1
- package/src/category/i18n/it.ts +1 -1
- package/src/category/i18n/nl.ts +1 -1
- package/src/category/i18n/pl.ts +1 -1
- package/src/category/i18n/pt.ts +1 -1
- package/src/category/i18n/ru.ts +3 -3
- package/src/category/i18n/sv.ts +1 -1
- package/src/category/i18n/tr.ts +1 -1
- package/src/layouts/PreviewLayout.astro +1 -0
- package/src/pages/[locale]/[slug].astro +28 -12
- package/src/tests/diacritics_density.test.ts +118 -0
- package/src/tests/inverted_punctuation.test.ts +84 -0
- package/src/tests/locale_completeness.test.ts +1 -31
- package/src/tests/no_en_dash.test.ts +70 -0
- package/src/tests/script_density.test.ts +94 -0
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tool/endurance/bibliography.astro +1 -1
- package/src/tool/endurance/bibliography.ts +12 -0
- package/src/tool/endurance/entry.ts +2 -2
- package/src/tool/endurance/i18n/de.ts +1 -13
- package/src/tool/endurance/i18n/en.ts +1 -12
- package/src/tool/endurance/i18n/es.ts +55 -67
- package/src/tool/endurance/i18n/fr.ts +71 -83
- package/src/tool/endurance/i18n/id.ts +1 -13
- package/src/tool/endurance/i18n/it.ts +1 -13
- package/src/tool/endurance/i18n/ja.ts +1 -13
- package/src/tool/endurance/i18n/ko.ts +1 -13
- package/src/tool/endurance/i18n/nl.ts +1 -13
- package/src/tool/endurance/i18n/pl.ts +1 -13
- package/src/tool/endurance/i18n/pt.ts +1 -13
- package/src/tool/endurance/i18n/ru.ts +10 -22
- package/src/tool/endurance/i18n/sv.ts +1 -13
- package/src/tool/endurance/i18n/tr.ts +1 -13
- package/src/tool/endurance/i18n/zh.ts +1 -13
- package/src/tool/endurance/seo.astro +2 -42
- package/src/tool/nauticalConverter/bibliography.astro +1 -1
- package/src/tool/nauticalConverter/bibliography.ts +12 -0
- package/src/tool/nauticalConverter/entry.ts +2 -2
- package/src/tool/nauticalConverter/i18n/de.ts +1 -13
- package/src/tool/nauticalConverter/i18n/en.ts +1 -13
- package/src/tool/nauticalConverter/i18n/es.ts +47 -59
- package/src/tool/nauticalConverter/i18n/fr.ts +54 -66
- package/src/tool/nauticalConverter/i18n/id.ts +1 -13
- package/src/tool/nauticalConverter/i18n/it.ts +1 -13
- package/src/tool/nauticalConverter/i18n/ja.ts +1 -13
- package/src/tool/nauticalConverter/i18n/ko.ts +1 -13
- package/src/tool/nauticalConverter/i18n/nl.ts +1 -13
- package/src/tool/nauticalConverter/i18n/pl.ts +4 -16
- package/src/tool/nauticalConverter/i18n/pt.ts +1 -13
- package/src/tool/nauticalConverter/i18n/ru.ts +9 -21
- package/src/tool/nauticalConverter/i18n/sv.ts +1 -13
- package/src/tool/nauticalConverter/i18n/tr.ts +1 -13
- package/src/tool/nauticalConverter/i18n/zh.ts +4 -16
- package/src/tool/nauticalConverter/seo.astro +2 -39
- package/src/tool/sailArea/bibliography.astro +1 -1
- package/src/tool/sailArea/bibliography.ts +16 -0
- package/src/tool/sailArea/entry.ts +2 -2
- package/src/tool/sailArea/i18n/de.ts +1 -17
- package/src/tool/sailArea/i18n/en.ts +1 -17
- package/src/tool/sailArea/i18n/es.ts +54 -70
- package/src/tool/sailArea/i18n/fr.ts +71 -87
- package/src/tool/sailArea/i18n/id.ts +1 -17
- package/src/tool/sailArea/i18n/it.ts +1 -17
- package/src/tool/sailArea/i18n/ja.ts +1 -17
- package/src/tool/sailArea/i18n/ko.ts +1 -17
- package/src/tool/sailArea/i18n/nl.ts +1 -17
- package/src/tool/sailArea/i18n/pl.ts +1 -17
- package/src/tool/sailArea/i18n/pt.ts +1 -17
- package/src/tool/sailArea/i18n/ru.ts +9 -25
- package/src/tool/sailArea/i18n/sv.ts +1 -17
- package/src/tool/sailArea/i18n/tr.ts +1 -17
- package/src/tool/sailArea/i18n/zh.ts +6 -22
- package/src/tool/sailArea/seo.astro +2 -39
- package/src/tool/speedConverter/bibliography.astro +1 -1
- package/src/tool/speedConverter/bibliography.ts +12 -0
- package/src/tool/speedConverter/entry.ts +2 -2
- package/src/tool/speedConverter/i18n/de.ts +1 -13
- package/src/tool/speedConverter/i18n/en.ts +1 -13
- package/src/tool/speedConverter/i18n/es.ts +59 -71
- package/src/tool/speedConverter/i18n/fr.ts +76 -88
- package/src/tool/speedConverter/i18n/id.ts +1 -13
- package/src/tool/speedConverter/i18n/it.ts +1 -13
- package/src/tool/speedConverter/i18n/ja.ts +1 -13
- package/src/tool/speedConverter/i18n/ko.ts +1 -13
- package/src/tool/speedConverter/i18n/nl.ts +1 -13
- package/src/tool/speedConverter/i18n/pl.ts +1 -13
- package/src/tool/speedConverter/i18n/pt.ts +1 -13
- package/src/tool/speedConverter/i18n/ru.ts +7 -19
- package/src/tool/speedConverter/i18n/sv.ts +1 -13
- package/src/tool/speedConverter/i18n/tr.ts +1 -13
- package/src/tool/speedConverter/i18n/zh.ts +6 -18
- package/src/tool/speedConverter/seo.astro +2 -30
- package/src/tool/tideCalculator/bibliography.astro +1 -1
- package/src/tool/tideCalculator/bibliography.ts +12 -0
- package/src/tool/tideCalculator/entry.ts +2 -2
- package/src/tool/tideCalculator/i18n/de.ts +1 -13
- package/src/tool/tideCalculator/i18n/en.ts +1 -13
- package/src/tool/tideCalculator/i18n/es.ts +40 -52
- package/src/tool/tideCalculator/i18n/fr.ts +44 -56
- package/src/tool/tideCalculator/i18n/id.ts +1 -13
- package/src/tool/tideCalculator/i18n/it.ts +1 -13
- package/src/tool/tideCalculator/i18n/ja.ts +1 -13
- package/src/tool/tideCalculator/i18n/ko.ts +1 -13
- package/src/tool/tideCalculator/i18n/nl.ts +1 -13
- package/src/tool/tideCalculator/i18n/pl.ts +1 -13
- package/src/tool/tideCalculator/i18n/pt.ts +1 -13
- package/src/tool/tideCalculator/i18n/ru.ts +7 -19
- package/src/tool/tideCalculator/i18n/sv.ts +1 -13
- package/src/tool/tideCalculator/i18n/tr.ts +1 -13
- package/src/tool/tideCalculator/i18n/zh.ts +2 -14
- package/src/tool/tideCalculator/seo.astro +2 -48
- package/src/tool/tideCalculator/tide-height-calculator.css +136 -5
- package/src/tool/underKeel/bibliography.astro +1 -1
- package/src/tool/underKeel/bibliography.ts +12 -0
- package/src/tool/underKeel/entry.ts +2 -2
- package/src/tool/underKeel/i18n/de.ts +1 -13
- package/src/tool/underKeel/i18n/en.ts +1 -13
- package/src/tool/underKeel/i18n/es.ts +40 -52
- package/src/tool/underKeel/i18n/fr.ts +46 -58
- package/src/tool/underKeel/i18n/id.ts +2 -14
- package/src/tool/underKeel/i18n/it.ts +2 -14
- package/src/tool/underKeel/i18n/ja.ts +2 -14
- package/src/tool/underKeel/i18n/ko.ts +2 -14
- package/src/tool/underKeel/i18n/nl.ts +2 -14
- package/src/tool/underKeel/i18n/pl.ts +2 -14
- package/src/tool/underKeel/i18n/pt.ts +2 -14
- package/src/tool/underKeel/i18n/ru.ts +7 -19
- package/src/tool/underKeel/i18n/sv.ts +2 -14
- package/src/tool/underKeel/i18n/tr.ts +2 -14
- package/src/tool/underKeel/i18n/zh.ts +2 -14
- package/src/tool/underKeel/seo.astro +2 -33
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
import {
|
|
3
|
-
SEOTitle,
|
|
4
|
-
SEOTable,
|
|
5
|
-
SEOTip,
|
|
6
|
-
SEOCard,
|
|
7
|
-
SEOStats,
|
|
8
|
-
SEOGlossary,
|
|
9
|
-
SEOProsCons,
|
|
10
|
-
SEOSummary,
|
|
11
|
-
SEODiagnostic,
|
|
12
|
-
SEOArticle,
|
|
13
|
-
} from '@jjlmoya/utils-shared';
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
14
3
|
import { tideCalculator } from './index';
|
|
15
4
|
import type { KnownLocale } from '../../types';
|
|
16
5
|
|
|
@@ -21,41 +10,6 @@ interface Props {
|
|
|
21
10
|
const { locale = 'es' } = Astro.props;
|
|
22
11
|
const content = await tideCalculator.i18n[locale]?.();
|
|
23
12
|
if (!content) return null;
|
|
24
|
-
|
|
25
|
-
const { seo } = content;
|
|
26
13
|
---
|
|
27
14
|
|
|
28
|
-
<
|
|
29
|
-
{seo.map((section: any) => {
|
|
30
|
-
switch (section.type) {
|
|
31
|
-
case 'summary':
|
|
32
|
-
return <SEOSummary title={section.title} items={section.items} />;
|
|
33
|
-
case 'title':
|
|
34
|
-
return <SEOTitle title={section.text} level={section.level || 2} />;
|
|
35
|
-
case 'paragraph':
|
|
36
|
-
return <p set:html={section.html} />;
|
|
37
|
-
case 'stats':
|
|
38
|
-
return <SEOStats stats={section.items} columns={section.columns} />;
|
|
39
|
-
case 'card':
|
|
40
|
-
return <SEOCard title={section.title} icon={section.icon}><Fragment set:html={section.html} /></SEOCard>;
|
|
41
|
-
case 'tip':
|
|
42
|
-
return <SEOTip title={section.title}><Fragment set:html={section.html} /></SEOTip>;
|
|
43
|
-
case 'table':
|
|
44
|
-
return (
|
|
45
|
-
<SEOTable headers={section.headers}>
|
|
46
|
-
{section.rows.map((row: string[]) => (
|
|
47
|
-
<tr>{row.map((cell: string) => <td set:html={cell} />)}</tr>
|
|
48
|
-
))}
|
|
49
|
-
</SEOTable>
|
|
50
|
-
);
|
|
51
|
-
case 'proscons':
|
|
52
|
-
return <SEOProsCons title={section.title} items={section.items} />;
|
|
53
|
-
case 'diagnostic':
|
|
54
|
-
return <SEODiagnostic title={section.title} icon={section.icon} type={section.variant} badge={section.badge}><Fragment set:html={section.html} /></SEODiagnostic>;
|
|
55
|
-
case 'glossary':
|
|
56
|
-
return <SEOGlossary items={section.items} />;
|
|
57
|
-
default:
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
})}
|
|
61
|
-
</SEOArticle>
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.tide-calculator {
|
|
1
|
+
.tide-calculator {
|
|
2
2
|
--n-bg: #fff;
|
|
3
3
|
--n-bg-muted: #f1f5f9;
|
|
4
4
|
--n-text: #0f172a;
|
|
@@ -17,10 +17,16 @@
|
|
|
17
17
|
display: flex;
|
|
18
18
|
flex-direction: column;
|
|
19
19
|
gap: 1.5rem;
|
|
20
|
+
width: 100%;
|
|
20
21
|
max-width: 1000px;
|
|
21
22
|
margin: 0 auto;
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
.tide-calculator,
|
|
26
|
+
.tide-calculator * {
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
}
|
|
29
|
+
|
|
24
30
|
.theme-dark .tide-calculator {
|
|
25
31
|
--n-bg: #0f172a;
|
|
26
32
|
--n-bg-muted: #1e293b;
|
|
@@ -46,6 +52,7 @@
|
|
|
46
52
|
grid-template-columns: 320px 1fr;
|
|
47
53
|
overflow: hidden;
|
|
48
54
|
box-shadow: 0 20px 40px var(--n-shadow);
|
|
55
|
+
min-width: 0;
|
|
49
56
|
}
|
|
50
57
|
|
|
51
58
|
@media (max-width: 850px) {
|
|
@@ -61,12 +68,14 @@
|
|
|
61
68
|
display: flex;
|
|
62
69
|
flex-direction: column;
|
|
63
70
|
gap: 2rem;
|
|
71
|
+
min-width: 0;
|
|
64
72
|
}
|
|
65
73
|
|
|
66
74
|
.tc-sidebar-header {
|
|
67
75
|
display: flex;
|
|
68
76
|
justify-content: space-between;
|
|
69
77
|
align-items: center;
|
|
78
|
+
gap: 1rem;
|
|
70
79
|
}
|
|
71
80
|
|
|
72
81
|
.tc-sidebar-header h3 {
|
|
@@ -76,6 +85,7 @@
|
|
|
76
85
|
text-transform: uppercase;
|
|
77
86
|
letter-spacing: 0.05em;
|
|
78
87
|
opacity: 0.9;
|
|
88
|
+
overflow-wrap: anywhere;
|
|
79
89
|
}
|
|
80
90
|
|
|
81
91
|
#invert-btn {
|
|
@@ -129,16 +139,20 @@
|
|
|
129
139
|
color: var(--n-primary-on);
|
|
130
140
|
font-size: 1rem;
|
|
131
141
|
outline: none;
|
|
142
|
+
min-width: 0;
|
|
143
|
+
width: 100%;
|
|
132
144
|
}
|
|
133
145
|
|
|
134
146
|
.tc-unit-input {
|
|
135
147
|
position: relative;
|
|
136
148
|
display: flex;
|
|
137
149
|
align-items: center;
|
|
150
|
+
flex: 1 1 0;
|
|
151
|
+
min-width: 0;
|
|
138
152
|
}
|
|
139
153
|
|
|
140
154
|
.tc-unit-input input {
|
|
141
|
-
width:
|
|
155
|
+
width: 100%;
|
|
142
156
|
padding-right: 25px;
|
|
143
157
|
}
|
|
144
158
|
|
|
@@ -169,17 +183,20 @@
|
|
|
169
183
|
flex-direction: column;
|
|
170
184
|
gap: 2rem;
|
|
171
185
|
background: var(--n-bg-muted);
|
|
186
|
+
min-width: 0;
|
|
172
187
|
}
|
|
173
188
|
|
|
174
189
|
.tc-top-row {
|
|
175
190
|
display: flex;
|
|
176
191
|
justify-content: space-between;
|
|
177
192
|
align-items: flex-start;
|
|
193
|
+
gap: 1.5rem;
|
|
178
194
|
}
|
|
179
195
|
|
|
180
196
|
.tc-result-display {
|
|
181
197
|
display: flex;
|
|
182
198
|
flex-direction: column;
|
|
199
|
+
min-width: 0;
|
|
183
200
|
}
|
|
184
201
|
|
|
185
202
|
.tc-result-display .label {
|
|
@@ -234,6 +251,8 @@
|
|
|
234
251
|
.tc-summary-info {
|
|
235
252
|
display: flex;
|
|
236
253
|
gap: 1.5rem;
|
|
254
|
+
flex-wrap: wrap;
|
|
255
|
+
justify-content: flex-end;
|
|
237
256
|
}
|
|
238
257
|
|
|
239
258
|
.tc-stat {
|
|
@@ -262,6 +281,7 @@
|
|
|
262
281
|
padding: 1.5rem;
|
|
263
282
|
height: 250px;
|
|
264
283
|
position: relative;
|
|
284
|
+
min-width: 0;
|
|
265
285
|
}
|
|
266
286
|
|
|
267
287
|
.tc-table-card {
|
|
@@ -279,6 +299,7 @@
|
|
|
279
299
|
|
|
280
300
|
.tc-table-wrapper {
|
|
281
301
|
overflow-x: auto;
|
|
302
|
+
-webkit-overflow-scrolling: touch;
|
|
282
303
|
}
|
|
283
304
|
|
|
284
305
|
.tide-calculator table {
|
|
@@ -303,8 +324,118 @@
|
|
|
303
324
|
}
|
|
304
325
|
|
|
305
326
|
@media (max-width: 640px) {
|
|
327
|
+
.tide-calculator {
|
|
328
|
+
gap: 1rem;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.tc-main-card {
|
|
332
|
+
border-radius: 1rem;
|
|
333
|
+
box-shadow: 0 10px 24px var(--n-shadow);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.tc-calc-sidebar {
|
|
337
|
+
padding: 1.25rem;
|
|
338
|
+
gap: 1.25rem;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
.tc-sidebar-header h3 {
|
|
342
|
+
font-size: 0.95rem;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
#invert-btn {
|
|
346
|
+
width: 40px;
|
|
347
|
+
height: 40px;
|
|
348
|
+
flex: 0 0 auto;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.tc-input-set {
|
|
352
|
+
gap: 1rem;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.tc-input-block .row {
|
|
356
|
+
display: grid;
|
|
357
|
+
grid-template-columns: minmax(0, 1fr) minmax(92px, 0.75fr);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.tide-calculator input[type='time'],
|
|
361
|
+
.tide-calculator input[type='number'] {
|
|
362
|
+
padding: 0.75rem;
|
|
363
|
+
font-size: 1rem;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.tide-calculator input[type='time'].large-time {
|
|
367
|
+
font-size: 1.45rem;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.tc-calc-content {
|
|
371
|
+
padding: 1.25rem;
|
|
372
|
+
gap: 1.25rem;
|
|
373
|
+
}
|
|
374
|
+
|
|
306
375
|
.tc-top-row {
|
|
307
|
-
|
|
308
|
-
|
|
376
|
+
display: grid;
|
|
377
|
+
grid-template-columns: 1fr;
|
|
378
|
+
gap: 1.25rem;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
.tc-result-display .label {
|
|
382
|
+
font-size: 0.75rem;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
#target-value {
|
|
386
|
+
font-size: 3rem;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.tc-value-box small {
|
|
390
|
+
font-size: 1rem;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
.tc-summary-info {
|
|
394
|
+
display: grid;
|
|
395
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
396
|
+
gap: 0.75rem;
|
|
397
|
+
justify-content: stretch;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.tc-stat {
|
|
401
|
+
background: var(--n-bg);
|
|
402
|
+
border: 1px solid var(--n-border);
|
|
403
|
+
border-radius: 0.8rem;
|
|
404
|
+
padding: 0.75rem;
|
|
405
|
+
text-align: left;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.tc-chart-area {
|
|
409
|
+
height: 220px;
|
|
410
|
+
border-radius: 1rem;
|
|
411
|
+
padding: 0.75rem;
|
|
309
412
|
}
|
|
310
|
-
|
|
413
|
+
|
|
414
|
+
.tc-table-card {
|
|
415
|
+
border-radius: 1rem;
|
|
416
|
+
padding: 1rem;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
.tide-calculator th,
|
|
420
|
+
.tide-calculator td {
|
|
421
|
+
padding: 0.75rem 0.6rem;
|
|
422
|
+
font-size: 0.82rem;
|
|
423
|
+
white-space: nowrap;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
@media (max-width: 380px) {
|
|
428
|
+
.tc-calc-sidebar,
|
|
429
|
+
.tc-calc-content {
|
|
430
|
+
padding: 1rem;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
.tc-input-block .row,
|
|
434
|
+
.tc-summary-info {
|
|
435
|
+
grid-template-columns: 1fr;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
#target-value {
|
|
439
|
+
font-size: 2.6rem;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
@@ -11,4 +11,4 @@ const { locale = 'es' } = Astro.props;
|
|
|
11
11
|
const content = await underKeel.i18n[locale]?.();
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
-
{content && <SharedBibliography links={content.bibliography}
|
|
14
|
+
{content && <SharedBibliography links={content.bibliography} />}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BibliographyEntry } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const bibliography: BibliographyEntry[] = [
|
|
4
|
+
{
|
|
5
|
+
name: 'Ministerio de Transportes - Recreational Boating',
|
|
6
|
+
url: 'https://www.mitma.gob.es/marina-mercante/nautica-de-recreo/',
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: 'Portos de Galicia - Tide Tables',
|
|
10
|
+
url: 'https://portosdegalicia.gal/es/taboa-de-mareas',
|
|
11
|
+
},
|
|
12
|
+
];
|
|
@@ -17,8 +17,6 @@ export interface UnderKeelUI {
|
|
|
17
17
|
statusFromLabel: string;
|
|
18
18
|
statusUntilLabel: string;
|
|
19
19
|
bottomLabel: string;
|
|
20
|
-
faqTitle: string;
|
|
21
|
-
bibliographyTitle: string;
|
|
22
20
|
}
|
|
23
21
|
|
|
24
22
|
export type UnderKeelLocaleContent = ToolLocaleContent<UnderKeelUI>;
|
|
@@ -47,3 +45,5 @@ export const underKeel: NauticalToolEntry<UnderKeelUI> = {
|
|
|
47
45
|
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
48
46
|
},
|
|
49
47
|
};
|
|
48
|
+
|
|
49
|
+
export { bibliography } from './bibliography';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { UnderKeelUI, UnderKeelLocaleContent } from '../index';
|
|
3
4
|
|
|
@@ -22,8 +23,6 @@ const ui: UnderKeelUI = {
|
|
|
22
23
|
statusFromLabel: 'Durchfahrt ab:',
|
|
23
24
|
statusUntilLabel: 'Durchfahrt bis:',
|
|
24
25
|
bottomLabel: 'GRUND',
|
|
25
|
-
faqTitle: 'Häufig gestellte Fragen',
|
|
26
|
-
bibliographyTitle: 'Bibliografie',
|
|
27
26
|
};
|
|
28
27
|
|
|
29
28
|
const faq: UnderKeelLocaleContent['faq'] = [
|
|
@@ -72,17 +71,6 @@ const howTo: UnderKeelLocaleContent['howTo'] = [
|
|
|
72
71
|
},
|
|
73
72
|
];
|
|
74
73
|
|
|
75
|
-
const bibliography: UnderKeelLocaleContent['bibliography'] = [
|
|
76
|
-
{
|
|
77
|
-
name: 'Ministerio de Transportes - Recreational Boating',
|
|
78
|
-
url: 'https://www.mitma.gob.es/marina-mercante/nautica-de-recreo/',
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
name: 'Portos de Galicia - Tide Tables',
|
|
82
|
-
url: 'https://portosdegalicia.gal/es/taboa-de-mareas',
|
|
83
|
-
},
|
|
84
|
-
];
|
|
85
|
-
|
|
86
74
|
const seo: UnderKeelLocaleContent['seo'] = [
|
|
87
75
|
{
|
|
88
76
|
type: 'title',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { UnderKeelUI, UnderKeelLocaleContent } from '../index';
|
|
3
4
|
|
|
@@ -22,8 +23,6 @@ const ui: UnderKeelUI = {
|
|
|
22
23
|
statusFromLabel: 'Passage from:',
|
|
23
24
|
statusUntilLabel: 'Passage until:',
|
|
24
25
|
bottomLabel: 'BOTTOM',
|
|
25
|
-
faqTitle: 'Frequently Asked Questions',
|
|
26
|
-
bibliographyTitle: 'Bibliography',
|
|
27
26
|
};
|
|
28
27
|
|
|
29
28
|
const faq: UnderKeelLocaleContent['faq'] = [
|
|
@@ -72,17 +71,6 @@ const howTo: UnderKeelLocaleContent['howTo'] = [
|
|
|
72
71
|
},
|
|
73
72
|
];
|
|
74
73
|
|
|
75
|
-
const bibliography: UnderKeelLocaleContent['bibliography'] = [
|
|
76
|
-
{
|
|
77
|
-
name: 'Ministerio de Transportes - Recreational Boating',
|
|
78
|
-
url: 'https://www.mitma.gob.es/marina-mercante/nautica-de-recreo/',
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
name: 'Portos de Galicia - Tide Tables',
|
|
82
|
-
url: 'https://portosdegalicia.gal/es/taboa-de-mareas',
|
|
83
|
-
},
|
|
84
|
-
];
|
|
85
|
-
|
|
86
74
|
const seo: UnderKeelLocaleContent['seo'] = [
|
|
87
75
|
{
|
|
88
76
|
type: 'title',
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { UnderKeelUI, UnderKeelLocaleContent } from '../index';
|
|
3
4
|
|
|
4
5
|
const slug = 'calculador-paso-de-bajo';
|
|
5
|
-
const title = '
|
|
6
|
+
const title = 'Calculadora de Paso de Bajo';
|
|
6
7
|
const description =
|
|
7
8
|
'Calcula la ventana de tiempo segura para cruzar barras, canales o puntos de calado restringido. Introduce el calado de tu barco, la sonda de la carta y los datos de marea para obtener el intervalo exacto de paso seguro.';
|
|
8
9
|
|
|
9
10
|
const ui: UnderKeelUI = {
|
|
10
|
-
parametersLabel: '
|
|
11
|
+
parametersLabel: 'Parámetros',
|
|
11
12
|
boatDraftLabel: 'Calado del Barco',
|
|
12
13
|
chartDepthLabel: 'Sonda de la Carta',
|
|
13
14
|
safetyMarginLabel: 'Resguardo de Seguridad',
|
|
@@ -16,121 +17,108 @@ const ui: UnderKeelUI = {
|
|
|
16
17
|
metersLabel: 'metros',
|
|
17
18
|
passWindowLabel: 'Ventana de Paso',
|
|
18
19
|
neededLabel: 'Profundidad necesaria',
|
|
19
|
-
tideRequiredLabel: 'Marea
|
|
20
|
+
tideRequiredLabel: 'Marea mínima requerida',
|
|
20
21
|
statusNeverLabel: 'Sin calado en todo el ciclo',
|
|
21
22
|
statusAlwaysLabel: 'Paso libre todo el ciclo',
|
|
22
23
|
statusFromLabel: 'Paso desde las:',
|
|
23
24
|
statusUntilLabel: 'Paso hasta las:',
|
|
24
25
|
bottomLabel: 'FONDO',
|
|
25
|
-
faqTitle: 'Preguntas Frecuentes',
|
|
26
|
-
bibliographyTitle: 'Referencias',
|
|
27
26
|
};
|
|
28
27
|
|
|
29
28
|
const faq: UnderKeelLocaleContent['faq'] = [
|
|
30
29
|
{
|
|
31
|
-
question: '¿
|
|
32
|
-
answer: 'El paso de bajo es el
|
|
30
|
+
question: '¿Qué es exactamente el paso de bajo en náutica?',
|
|
31
|
+
answer: 'El paso de bajo es el cálculo del momento en el que hay profundidad suficiente en un punto crítico (como una barra de arena o un canal estrecho) para permitir el tránsito seguro de una embarcación según su calado.',
|
|
33
32
|
},
|
|
34
33
|
{
|
|
35
|
-
question: '¿
|
|
36
|
-
answer: 'Para embarcaciones de recreo se suele recomendar un resguardo
|
|
34
|
+
question: '¿Cuántos metros de resguardo de seguridad se recomiendan?',
|
|
35
|
+
answer: 'Para embarcaciones de recreo se suele recomendar un resguardo mínimo de entre 0,5 y 1 metro sobre el calado del barco. Este margen compensa posibles errores en el cálculo de marea, variaciones de presión atmosférica u oleaje imprevisto.',
|
|
37
36
|
},
|
|
38
37
|
{
|
|
39
|
-
question: '¿
|
|
40
|
-
answer: 'El oleaje genera oscilaciones verticales en el casco. En el punto
|
|
38
|
+
question: '¿Cómo influye el oleaje en el paso de bajo?',
|
|
39
|
+
answer: 'El oleaje genera oscilaciones verticales en el casco. En el punto más bajo de la ola el barco se acerca más al fondo que en reposo. Para cruzar zonas con olas el resguardo debe aumentarse sustancialmente.',
|
|
41
40
|
},
|
|
42
41
|
{
|
|
43
|
-
question: '¿
|
|
44
|
-
answer: 'Es la profundidad
|
|
42
|
+
question: '¿Qué es la sonda de la carta náutica?',
|
|
43
|
+
answer: 'Es la profundidad mínima que encontrarás en un punto cuando la marea está en el nivel del Cero de la Carta (Datum). Se suma a la altura de la marea en ese instante para obtener la profundidad total disponible.',
|
|
45
44
|
},
|
|
46
45
|
{
|
|
47
|
-
question: '¿
|
|
48
|
-
answer: 'Significa que ese punto queda al descubierto (en seco) cuando la marea
|
|
46
|
+
question: '¿Qué ocurre si la sonda en la carta está subrayada?',
|
|
47
|
+
answer: 'Significa que ese punto queda al descubierto (en seco) cuando la marea está en el Cero de la Carta. Necesitarás una altura de marea mayor para poder pasar por encima.',
|
|
49
48
|
},
|
|
50
49
|
{
|
|
51
|
-
question: '¿
|
|
52
|
-
answer: 'Es un
|
|
50
|
+
question: '¿Qué es el efecto Squat y cómo altera el paso?',
|
|
51
|
+
answer: 'Es un fenómeno hidrodinámico por el cual un barco que navega por canales poco profundos tiende a hundirse más respecto a su línea de flotación. Cuanto más rápido navegues, más aumenta el calado dinámico y menos agua tendrás bajo la quilla.',
|
|
53
52
|
},
|
|
54
53
|
];
|
|
55
54
|
|
|
56
55
|
const howTo: UnderKeelLocaleContent['howTo'] = [
|
|
57
56
|
{
|
|
58
57
|
name: 'Define el calado y el resguardo',
|
|
59
|
-
text: 'Mide el calado de tu barco en su punto
|
|
58
|
+
text: 'Mide el calado de tu barco en su punto máximo y añade un margen de seguridad prudente (por ejemplo, 0,5 m).',
|
|
60
59
|
},
|
|
61
60
|
{
|
|
62
|
-
name: 'Consulta la sonda en tu carta
|
|
63
|
-
text: 'Busca el valor de la sonda Datum para el paso
|
|
61
|
+
name: 'Consulta la sonda en tu carta náutica',
|
|
62
|
+
text: 'Busca el valor de la sonda Datum para el paso crítico que vas a navegar. Anota si es una zona de arena o roca.',
|
|
64
63
|
},
|
|
65
64
|
{
|
|
66
65
|
name: 'Introduce los datos de la marea',
|
|
67
|
-
text: 'Utiliza las horas y alturas de la pleamar y bajamar de la marina
|
|
66
|
+
text: 'Utiliza las horas y alturas de la pleamar y bajamar de la marina más cercana obtenidas del anuario oficial.',
|
|
68
67
|
},
|
|
69
68
|
{
|
|
70
69
|
name: 'Comprueba tu ventana de paso',
|
|
71
|
-
text: 'La herramienta te
|
|
72
|
-
},
|
|
73
|
-
];
|
|
74
|
-
|
|
75
|
-
const bibliography: UnderKeelLocaleContent['bibliography'] = [
|
|
76
|
-
{
|
|
77
|
-
name: 'Ministerio de Transportes - Nautica de Recreo',
|
|
78
|
-
url: 'https://www.mitma.gob.es/marina-mercante/nautica-de-recreo/',
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
name: 'Portos de Galicia - Tablas de Mareas',
|
|
82
|
-
url: 'https://portosdegalicia.gal/es/taboa-de-mareas',
|
|
70
|
+
text: 'La herramienta te indicará el intervalo de tiempo exacto durante el cual tendrás profundidad suficiente para navegar con seguridad.',
|
|
83
71
|
},
|
|
84
72
|
];
|
|
85
73
|
|
|
86
74
|
const seo: UnderKeelLocaleContent['seo'] = [
|
|
87
75
|
{
|
|
88
76
|
type: 'title',
|
|
89
|
-
text: '
|
|
77
|
+
text: 'Cálculo de Paso de Bajo: Navegando con Seguridad sobre Obstáculos',
|
|
90
78
|
level: 2,
|
|
91
79
|
},
|
|
92
80
|
{
|
|
93
81
|
type: 'paragraph',
|
|
94
|
-
html: 'La
|
|
82
|
+
html: 'La planificación de una travesía no termina con el trazo de un rumbo en la carta. Para el navegante costero, uno de los cálculos más determinantes es el del <strong>paso de bajo</strong>: saber a qué hora habrá profundidad suficiente para cruzar un punto crítico sin encallar.',
|
|
95
83
|
},
|
|
96
84
|
{
|
|
97
85
|
type: 'title',
|
|
98
|
-
text: '¿
|
|
86
|
+
text: '¿Qué es la sonda de la carta y cómo se relaciona con la marea?',
|
|
99
87
|
level: 3,
|
|
100
88
|
},
|
|
101
89
|
{
|
|
102
90
|
type: 'paragraph',
|
|
103
|
-
html: 'En las
|
|
91
|
+
html: 'En las cartas náuticas, las profundidades indicadas (sondas) están referidas al <strong>Cero de la Carta</strong> o Datum. Este nivel es, por convención, el nivel más bajo que puede alcanzar la marea en condiciones normales. La profundidad real que encontrará tu barco en un momento dado es la suma de esa sonda más la altura de la marea en ese instante, calculada con la Regla de los Dozavos.',
|
|
104
92
|
},
|
|
105
93
|
{
|
|
106
94
|
type: 'title',
|
|
107
|
-
text: 'Los elementos del
|
|
95
|
+
text: 'Los elementos del cálculo: Calado y Resguardo',
|
|
108
96
|
level: 3,
|
|
109
97
|
},
|
|
110
98
|
{
|
|
111
99
|
type: 'paragraph',
|
|
112
|
-
html: 'Para utilizar el calculador de paso de bajo de forma profesional, debes conocer con
|
|
100
|
+
html: 'Para utilizar el calculador de paso de bajo de forma profesional, debes conocer con precisión dos datos técnicos de tu propio barco y uno de decisión personal:',
|
|
113
101
|
},
|
|
114
102
|
{
|
|
115
103
|
type: 'list',
|
|
116
104
|
items: [
|
|
117
|
-
'<strong>Calado de
|
|
118
|
-
'<strong>Sonda de la carta:</strong> El
|
|
119
|
-
'<strong>Resguardo de seguridad:</strong> Es el margen "por si acaso" (
|
|
105
|
+
'<strong>Calado de máxima carga:</strong> Es la profundidad que alcanza el punto más bajo del barco (la quilla) cuando está totalmente cargado.',
|
|
106
|
+
'<strong>Sonda de la carta:</strong> El número que aparece en la carta náutica para el punto que quieres cruzar. Si está subrayado, el punto queda en seco en bajamar.',
|
|
107
|
+
'<strong>Resguardo de seguridad:</strong> Es el margen "por si acaso" (náuticamente conocido como resguardo) de al menos 0,5 a 1 metro.',
|
|
120
108
|
],
|
|
121
109
|
},
|
|
122
110
|
{
|
|
123
111
|
type: 'title',
|
|
124
|
-
text: '¿
|
|
112
|
+
text: '¿Cómo funciona la ventana de paso?',
|
|
125
113
|
level: 3,
|
|
126
114
|
},
|
|
127
115
|
{
|
|
128
116
|
type: 'paragraph',
|
|
129
|
-
html: 'El calculador determina el momento exacto en el que el nivel del agua
|
|
117
|
+
html: 'El calculador determina el momento exacto en el que el nivel del agua subirá por encima de tu calado más el resguardo elegido. A partir de ese minuto, se abre la <strong>ventana de paso</strong>. Si la marea es vaciante (bajando), la herramienta te indicará hasta que hora tienes permitido el tránsito antes de que el nivel del agua caiga por debajo de tu límite de seguridad.',
|
|
130
118
|
},
|
|
131
119
|
{
|
|
132
120
|
type: 'paragraph',
|
|
133
|
-
html: 'Esta
|
|
121
|
+
html: 'Esta planificación es vital para barcos de vela con quillas profundas que desean entrar en puertos como los de las Rías Baixas en Galicia o puertos fluviales en Andalucía, donde la variación de mareas puede marcar la diferencia entre una entrada cómoda o quedar varado durante seis horas esperando al siguiente ciclo.',
|
|
134
122
|
},
|
|
135
123
|
{
|
|
136
124
|
type: 'title',
|
|
@@ -139,17 +127,17 @@ const seo: UnderKeelLocaleContent['seo'] = [
|
|
|
139
127
|
},
|
|
140
128
|
{
|
|
141
129
|
type: 'table',
|
|
142
|
-
headers: ['Factor', 'Efecto', '
|
|
130
|
+
headers: ['Factor', 'Efecto', 'Recomendación'],
|
|
143
131
|
rows: [
|
|
144
132
|
['<strong>Oleaje</strong>', 'Reduce el agua bajo el casco', 'Aumentar el resguardo significativamente'],
|
|
145
|
-
['<strong>Efecto Squat</strong>', 'Aumenta el calado por
|
|
133
|
+
['<strong>Efecto Squat</strong>', 'Aumenta el calado por succión', 'Reducir la velocidad en zonas críticas'],
|
|
146
134
|
['<strong>Fondo de arena</strong>', 'Profundidad variable con temporales', 'Mantener sonda activa y resguardo extra'],
|
|
147
135
|
],
|
|
148
136
|
},
|
|
149
137
|
{
|
|
150
138
|
type: 'tip',
|
|
151
|
-
title: 'Consejo de
|
|
152
|
-
html: 'Si tu ventana de paso es muy estrecha o el tiempo empeora, la
|
|
139
|
+
title: 'Consejo de Navegación',
|
|
140
|
+
html: 'Si tu ventana de paso es muy estrecha o el tiempo empeora, la decisión más sabia suele ser esperar fuera en aguas profundas a que la marea gane la altura necesaria.',
|
|
153
141
|
},
|
|
154
142
|
{
|
|
155
143
|
type: 'title',
|
|
@@ -158,11 +146,11 @@ const seo: UnderKeelLocaleContent['seo'] = [
|
|
|
158
146
|
},
|
|
159
147
|
{
|
|
160
148
|
type: 'paragraph',
|
|
161
|
-
html: '<ol><li class="mb-2"><strong>Reduce la velocidad:</strong> Para minimizar el efecto squat y tener tiempo de corregir el rumbo.</li><li class="mb-2"><strong>Utiliza la sonda de a bordo:</strong> Configura la alarma de baja profundidad en tu equipo
|
|
149
|
+
html: '<ol><li class="mb-2"><strong>Reduce la velocidad:</strong> Para minimizar el efecto squat y tener tiempo de corregir el rumbo.</li><li class="mb-2"><strong>Utiliza la sonda de a bordo:</strong> Configura la alarma de baja profundidad en tu equipo electrónico.</li><li class="mb-2"><strong>Observa el mar:</strong> Las rompientes de olas suelen indicar la presencia de bajos.</li><li class="mb-2"><strong>Consulta a lugareños:</strong> Por radio (canal 9) o telefoneando al club náutico sobre el estado actual del canal.</li></ol>',
|
|
162
150
|
},
|
|
163
151
|
{
|
|
164
152
|
type: 'paragraph',
|
|
165
|
-
html: 'Esta herramienta es ideal para estudiantes que
|
|
153
|
+
html: 'Esta herramienta es ideal para estudiantes que están practicando ejercicios de mareas para el examen de Patrón de Embarcaciones de Recreo (PER) o Patrón de Yate, permitiendo verificar los resultados de cálculos manuales de forma instantánea y visual.',
|
|
166
154
|
},
|
|
167
155
|
];
|
|
168
156
|
|
|
@@ -188,7 +176,7 @@ const schemas: UnderKeelLocaleContent['schemas'] = [
|
|
|
188
176
|
{
|
|
189
177
|
'@context': 'https://schema.org',
|
|
190
178
|
'@type': 'HowTo',
|
|
191
|
-
name: `
|
|
179
|
+
name: `Cómo usar: ${title}`,
|
|
192
180
|
step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
|
|
193
181
|
} as WithContext<HowTo>,
|
|
194
182
|
];
|