@jjlmoya/utils-drones 1.15.0 → 1.16.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/index.ts +2 -1
- package/src/entries.ts +4 -1
- package/src/index.ts +1 -0
- package/src/pages/[locale]/[slug].astro +30 -14
- package/src/tests/locale_completeness.test.ts +4 -22
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/antenna-length-calculator/bibliography.astro +3 -11
- package/src/tool/antenna-length-calculator/bibliography.ts +6 -0
- package/src/tool/antenna-length-calculator/i18n/de.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/en.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/es.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/fr.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/id.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/it.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/ja.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/ko.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/nl.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/pl.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/pt.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/ru.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/sv.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/tr.ts +2 -8
- package/src/tool/antenna-length-calculator/i18n/zh.ts +2 -8
- package/src/tool/antenna-length-calculator/seo.astro +2 -26
- package/src/tool/drone-flight-time/bibliography.astro +3 -11
- package/src/tool/drone-flight-time/bibliography.ts +7 -0
- package/src/tool/drone-flight-time/i18n/de.ts +2 -9
- package/src/tool/drone-flight-time/i18n/en.ts +2 -9
- package/src/tool/drone-flight-time/i18n/es.ts +2 -9
- package/src/tool/drone-flight-time/i18n/fr.ts +2 -9
- package/src/tool/drone-flight-time/i18n/id.ts +2 -9
- package/src/tool/drone-flight-time/i18n/it.ts +2 -9
- package/src/tool/drone-flight-time/i18n/ja.ts +2 -9
- package/src/tool/drone-flight-time/i18n/ko.ts +2 -9
- package/src/tool/drone-flight-time/i18n/nl.ts +2 -9
- package/src/tool/drone-flight-time/i18n/pl.ts +2 -9
- package/src/tool/drone-flight-time/i18n/pt.ts +2 -9
- package/src/tool/drone-flight-time/i18n/ru.ts +2 -9
- package/src/tool/drone-flight-time/i18n/sv.ts +2 -9
- package/src/tool/drone-flight-time/i18n/tr.ts +2 -9
- package/src/tool/drone-flight-time/i18n/zh.ts +2 -9
- package/src/tool/drone-flight-time/seo.astro +2 -18
- package/src/tool/drone-power-analyzer/bibliography.astro +6 -0
- package/src/tool/drone-power-analyzer/bibliography.ts +7 -0
- package/src/tool/drone-power-analyzer/component.astro +210 -0
- package/src/tool/drone-power-analyzer/components/FlightProfile.astro +37 -0
- package/src/tool/drone-power-analyzer/components/MotorConfig.astro +46 -0
- package/src/tool/drone-power-analyzer/components/PowerGauge.astro +48 -0
- package/src/tool/drone-power-analyzer/components/WeightConfig.astro +49 -0
- package/src/tool/drone-power-analyzer/drone-power-analyzer.css +535 -0
- package/src/tool/drone-power-analyzer/entry.ts +29 -0
- package/src/tool/drone-power-analyzer/i18n/de.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/en.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/es.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/fr.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/id.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/it.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/ja.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/ko.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/nl.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/pl.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/pt.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/ru.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/sv.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/tr.ts +203 -0
- package/src/tool/drone-power-analyzer/i18n/zh.ts +203 -0
- package/src/tool/drone-power-analyzer/index.ts +8 -0
- package/src/tool/drone-power-analyzer/seo.astro +15 -0
- package/src/tool/gps-coordinates-converter/bibliography.astro +3 -11
- package/src/tool/gps-coordinates-converter/bibliography.ts +12 -0
- package/src/tool/gps-coordinates-converter/components/GpsMap.astro +3 -2
- package/src/tool/gps-coordinates-converter/gps-coordinates-converter.css +197 -119
- package/src/tool/gps-coordinates-converter/i18n/de.ts +35 -36
- package/src/tool/gps-coordinates-converter/i18n/en.ts +4 -14
- package/src/tool/gps-coordinates-converter/i18n/es.ts +4 -14
- package/src/tool/gps-coordinates-converter/i18n/fr.ts +4 -14
- package/src/tool/gps-coordinates-converter/i18n/id.ts +36 -37
- package/src/tool/gps-coordinates-converter/i18n/it.ts +35 -36
- package/src/tool/gps-coordinates-converter/i18n/ja.ts +19 -20
- package/src/tool/gps-coordinates-converter/i18n/ko.ts +20 -21
- package/src/tool/gps-coordinates-converter/i18n/nl.ts +33 -36
- package/src/tool/gps-coordinates-converter/i18n/pl.ts +19 -20
- package/src/tool/gps-coordinates-converter/i18n/pt.ts +19 -20
- package/src/tool/gps-coordinates-converter/i18n/ru.ts +19 -20
- package/src/tool/gps-coordinates-converter/i18n/sv.ts +19 -20
- package/src/tool/gps-coordinates-converter/i18n/tr.ts +19 -20
- package/src/tool/gps-coordinates-converter/i18n/zh.ts +20 -21
- package/src/tool/gps-coordinates-converter/seo.astro +2 -26
- package/src/tools.ts +3 -0
- package/src/types.ts +1 -3
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
import 'leaflet/dist/leaflet.css';
|
|
3
|
+
const { ui } = Astro.props;
|
|
3
4
|
---
|
|
4
5
|
|
|
5
6
|
<div class="tech-section">
|
|
6
|
-
<h3 class="section-title">
|
|
7
|
+
<h3 class="section-title">{ui.mapVisualization}</h3>
|
|
7
8
|
<div id="gpsMap" class="map-container"></div>
|
|
8
|
-
<small class="hint">
|
|
9
|
+
<small class="hint">{ui.mapHint}</small>
|
|
9
10
|
</div>
|
|
10
11
|
|
|
@@ -1,49 +1,48 @@
|
|
|
1
1
|
.gps-converter-ui {
|
|
2
|
-
--gps-accent: #
|
|
3
|
-
--gps-accent-rgb:
|
|
4
|
-
--gps-accent-glow: rgba(
|
|
2
|
+
--gps-accent: #6366f1;
|
|
3
|
+
--gps-accent-rgb: 99, 102, 241;
|
|
4
|
+
--gps-accent-glow: rgba(99, 102, 241, 0.15);
|
|
5
5
|
--gps-bg: #fff;
|
|
6
6
|
--gps-bg-muted: #f8fafc;
|
|
7
7
|
--gps-bg-surface: #f1f5f9;
|
|
8
|
-
--gps-bg-overlay: #
|
|
9
|
-
--gps-text: #
|
|
10
|
-
--gps-text-muted: #
|
|
8
|
+
--gps-bg-overlay: #fff;
|
|
9
|
+
--gps-text: #0f172a;
|
|
10
|
+
--gps-text-muted: #475569;
|
|
11
11
|
--gps-text-dim: #94a3b8;
|
|
12
12
|
--gps-border: #e2e8f0;
|
|
13
13
|
--gps-border-light: #f1f5f9;
|
|
14
|
-
--gps-shadow: 0
|
|
14
|
+
--gps-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.05);
|
|
15
15
|
--gps-danger: #ef4444;
|
|
16
|
-
--gps-
|
|
16
|
+
--gps-radius-xl: 32px;
|
|
17
|
+
--gps-radius-lg: 20px;
|
|
18
|
+
--gps-radius-md: 12px;
|
|
17
19
|
|
|
18
20
|
width: 100%;
|
|
19
21
|
max-width: 1200px;
|
|
20
22
|
margin: 2rem auto;
|
|
21
|
-
padding: 0 1.5rem;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
[data-theme="dark"] .gps-converter-ui,
|
|
25
26
|
.theme-dark .gps-converter-ui {
|
|
26
27
|
--gps-bg: #0f172a;
|
|
27
28
|
--gps-bg-muted: #1e293b;
|
|
28
|
-
--gps-bg-surface: #
|
|
29
|
+
--gps-bg-surface: #1e293b;
|
|
29
30
|
--gps-bg-overlay: #1e293b;
|
|
30
|
-
--gps-text: #
|
|
31
|
+
--gps-text: #f8fafc;
|
|
31
32
|
--gps-text-muted: #94a3b8;
|
|
32
33
|
--gps-text-dim: #64748b;
|
|
33
34
|
--gps-border: #334155;
|
|
34
35
|
--gps-border-light: #1e293b;
|
|
35
|
-
--gps-shadow: 0
|
|
36
|
+
--gps-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
.gps-converter-ui .tech-mega-card {
|
|
39
40
|
background: var(--gps-bg);
|
|
40
|
-
backdrop-filter: blur(24px) saturate(180%);
|
|
41
|
-
-webkit-backdrop-filter: blur(24px) saturate(180%);
|
|
42
41
|
border: 1px solid var(--gps-border);
|
|
43
|
-
border-radius:
|
|
42
|
+
border-radius: var(--gps-radius-xl);
|
|
44
43
|
box-shadow: var(--gps-shadow);
|
|
45
|
-
position: relative;
|
|
46
44
|
overflow: hidden;
|
|
45
|
+
position: relative;
|
|
47
46
|
}
|
|
48
47
|
|
|
49
48
|
.gps-converter-ui .tech-mega-card::before {
|
|
@@ -52,10 +51,10 @@
|
|
|
52
51
|
top: 0;
|
|
53
52
|
left: 0;
|
|
54
53
|
right: 0;
|
|
55
|
-
height:
|
|
56
|
-
background: linear-gradient(90deg, #
|
|
54
|
+
height: 4px;
|
|
55
|
+
background: linear-gradient(90deg, #6366f1, #a855f7, #6366f1);
|
|
57
56
|
background-size: 200% 100%;
|
|
58
|
-
animation: gradient-shift-gps
|
|
57
|
+
animation: gradient-shift-gps 3s linear infinite;
|
|
59
58
|
z-index: 10;
|
|
60
59
|
}
|
|
61
60
|
|
|
@@ -66,133 +65,158 @@
|
|
|
66
65
|
|
|
67
66
|
.gps-converter-ui .card-grid {
|
|
68
67
|
display: grid;
|
|
69
|
-
grid-template-columns:
|
|
68
|
+
grid-template-columns: 360px 1fr;
|
|
70
69
|
min-height: 700px;
|
|
71
70
|
}
|
|
72
71
|
|
|
73
72
|
.gps-converter-ui .config-sidebar {
|
|
74
|
-
padding:
|
|
75
|
-
background: var(--gps-bg-
|
|
76
|
-
border-right: 1px solid var(--gps-border
|
|
73
|
+
padding: 2.5rem;
|
|
74
|
+
background: var(--gps-bg-muted);
|
|
75
|
+
border-right: 1px solid var(--gps-border);
|
|
77
76
|
display: flex;
|
|
78
77
|
flex-direction: column;
|
|
79
|
-
gap:
|
|
78
|
+
gap: 2.5rem;
|
|
80
79
|
}
|
|
81
80
|
|
|
82
81
|
.gps-converter-ui .main-display {
|
|
83
|
-
padding:
|
|
82
|
+
padding: 2.5rem;
|
|
84
83
|
display: flex;
|
|
85
84
|
flex-direction: column;
|
|
86
|
-
gap:
|
|
87
|
-
background: var(--gps-bg);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.gps-converter-ui .divider {
|
|
91
|
-
height: 1px;
|
|
92
|
-
width: 100%;
|
|
93
|
-
background: linear-gradient(90deg, transparent, var(--gps-border-light), transparent);
|
|
85
|
+
gap: 2.5rem;
|
|
94
86
|
}
|
|
95
87
|
|
|
96
88
|
.gps-converter-ui .tech-section {
|
|
97
89
|
display: flex;
|
|
98
90
|
flex-direction: column;
|
|
99
|
-
gap: 1.
|
|
91
|
+
gap: 1.25rem;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.gps-converter-ui .row-header {
|
|
95
|
+
display: flex;
|
|
96
|
+
justify-content: space-between;
|
|
97
|
+
align-items: center;
|
|
98
|
+
gap: 1rem;
|
|
100
99
|
}
|
|
101
100
|
|
|
102
101
|
.gps-converter-ui .section-title {
|
|
103
|
-
font-size: 0.
|
|
104
|
-
font-weight:
|
|
102
|
+
font-size: 0.8rem;
|
|
103
|
+
font-weight: 700;
|
|
105
104
|
color: var(--gps-text-muted);
|
|
106
105
|
text-transform: uppercase;
|
|
107
|
-
letter-spacing: 0.
|
|
106
|
+
letter-spacing: 0.1em;
|
|
108
107
|
}
|
|
109
108
|
|
|
110
109
|
.gps-converter-ui .field-label {
|
|
111
|
-
font-size: 0.
|
|
112
|
-
font-weight:
|
|
113
|
-
color: var(--gps-text-
|
|
114
|
-
text-transform: uppercase;
|
|
115
|
-
letter-spacing: 0.05em;
|
|
110
|
+
font-size: 0.75rem;
|
|
111
|
+
font-weight: 600;
|
|
112
|
+
color: var(--gps-text-muted);
|
|
116
113
|
margin-bottom: 0.5rem;
|
|
117
114
|
display: block;
|
|
118
115
|
}
|
|
119
116
|
|
|
120
117
|
.gps-converter-ui .tech-input {
|
|
121
118
|
width: 100%;
|
|
122
|
-
padding: 1rem
|
|
123
|
-
background: var(--gps-bg
|
|
119
|
+
padding: 0.8rem 1rem;
|
|
120
|
+
background: var(--gps-bg);
|
|
124
121
|
border: 1px solid var(--gps-border);
|
|
125
|
-
border-radius:
|
|
126
|
-
font-weight: 700;
|
|
122
|
+
border-radius: var(--gps-radius-md);
|
|
127
123
|
color: var(--gps-text);
|
|
128
|
-
font-
|
|
129
|
-
|
|
124
|
+
font-weight: 500;
|
|
125
|
+
font-size: 0.95rem;
|
|
126
|
+
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
130
127
|
}
|
|
131
128
|
|
|
132
129
|
.gps-converter-ui .tech-input:focus {
|
|
133
130
|
outline: none;
|
|
134
131
|
border-color: var(--gps-accent);
|
|
135
132
|
box-shadow: 0 0 0 4px var(--gps-accent-glow);
|
|
136
|
-
background: var(--gps-bg);
|
|
137
133
|
}
|
|
138
134
|
|
|
139
135
|
.gps-converter-ui .mode-switch {
|
|
140
136
|
display: flex;
|
|
141
137
|
background: var(--gps-bg-surface);
|
|
142
|
-
padding: 0.
|
|
143
|
-
border-radius:
|
|
144
|
-
|
|
138
|
+
padding: 0.25rem;
|
|
139
|
+
border-radius: var(--gps-radius-md);
|
|
140
|
+
flex: 1;
|
|
145
141
|
}
|
|
146
142
|
|
|
147
143
|
.gps-converter-ui .mode-btn {
|
|
148
144
|
flex: 1;
|
|
149
|
-
padding: 0.
|
|
150
|
-
border-radius:
|
|
145
|
+
padding: 0.6rem;
|
|
146
|
+
border-radius: calc(var(--gps-radius-md) - 4px);
|
|
151
147
|
border: none;
|
|
152
148
|
background: transparent;
|
|
153
|
-
font-size: 0.
|
|
154
|
-
font-weight:
|
|
149
|
+
font-size: 0.8rem;
|
|
150
|
+
font-weight: 600;
|
|
155
151
|
color: var(--gps-text-muted);
|
|
156
152
|
cursor: pointer;
|
|
157
|
-
transition: all 0.
|
|
153
|
+
transition: all 0.2s ease;
|
|
158
154
|
}
|
|
159
155
|
|
|
160
156
|
.gps-converter-ui .mode-btn.active {
|
|
161
157
|
background: var(--gps-bg);
|
|
162
158
|
color: var(--gps-accent);
|
|
163
|
-
box-shadow: 0
|
|
159
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
|
|
164
160
|
}
|
|
165
161
|
|
|
166
|
-
.gps-converter-ui .
|
|
167
|
-
max-width: 100%;
|
|
168
|
-
height: 400px;
|
|
169
|
-
border-radius: 32px;
|
|
170
|
-
overflow: hidden;
|
|
162
|
+
.gps-converter-ui .loc-btn {
|
|
171
163
|
background: var(--gps-bg-surface);
|
|
172
|
-
border: 1px solid var(--gps-border
|
|
164
|
+
border: 1px solid var(--gps-border);
|
|
165
|
+
color: var(--gps-text-muted);
|
|
166
|
+
padding: 0.6rem;
|
|
167
|
+
border-radius: var(--gps-radius-md);
|
|
168
|
+
cursor: pointer;
|
|
169
|
+
display: flex;
|
|
170
|
+
align-items: center;
|
|
171
|
+
justify-content: center;
|
|
172
|
+
transition: all 0.2s ease;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.gps-converter-ui .loc-btn:hover {
|
|
176
|
+
color: var(--gps-accent);
|
|
177
|
+
border-color: var(--gps-accent);
|
|
178
|
+
background: var(--gps-bg);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.gps-converter-ui .compact-inputs {
|
|
182
|
+
display: grid;
|
|
183
|
+
grid-template-columns: 1fr 1fr;
|
|
184
|
+
gap: 1rem;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.gps-converter-ui .gms-group {
|
|
188
|
+
display: flex;
|
|
189
|
+
flex-direction: column;
|
|
190
|
+
gap: 0.5rem;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.gps-converter-ui .gms-group .compact-inputs {
|
|
194
|
+
grid-template-columns: repeat(4, 1fr);
|
|
195
|
+
gap: 0.5rem;
|
|
173
196
|
}
|
|
174
197
|
|
|
175
198
|
.gps-converter-ui .results-area {
|
|
176
199
|
display: grid;
|
|
177
200
|
grid-template-columns: repeat(2, 1fr);
|
|
178
|
-
gap:
|
|
201
|
+
gap: 1.5rem;
|
|
179
202
|
}
|
|
180
203
|
|
|
181
204
|
.gps-converter-ui .result-box {
|
|
182
|
-
background: var(--gps-bg-
|
|
183
|
-
border: 1px solid var(--gps-border
|
|
184
|
-
border-radius:
|
|
185
|
-
padding:
|
|
205
|
+
background: var(--gps-bg-muted);
|
|
206
|
+
border: 1px solid var(--gps-border);
|
|
207
|
+
border-radius: var(--gps-radius-lg);
|
|
208
|
+
padding: 1.5rem;
|
|
186
209
|
display: flex;
|
|
187
210
|
flex-direction: column;
|
|
188
|
-
gap:
|
|
189
|
-
transition: all 0.
|
|
211
|
+
gap: 0.75rem;
|
|
212
|
+
transition: all 0.2s ease;
|
|
190
213
|
}
|
|
191
214
|
|
|
192
215
|
.gps-converter-ui .result-box:hover {
|
|
193
|
-
transform: translateY(-5px);
|
|
194
|
-
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.04);
|
|
195
216
|
border-color: var(--gps-accent);
|
|
217
|
+
background: var(--gps-bg);
|
|
218
|
+
transform: translateY(-2px);
|
|
219
|
+
box-shadow: 0 12px 24px -10px rgba(0, 0, 0, 0.1);
|
|
196
220
|
}
|
|
197
221
|
|
|
198
222
|
.gps-converter-ui .res-header {
|
|
@@ -201,19 +225,27 @@
|
|
|
201
225
|
align-items: center;
|
|
202
226
|
}
|
|
203
227
|
|
|
228
|
+
.gps-converter-ui .res-label {
|
|
229
|
+
font-size: 0.7rem;
|
|
230
|
+
font-weight: 700;
|
|
231
|
+
color: var(--gps-text-dim);
|
|
232
|
+
text-transform: uppercase;
|
|
233
|
+
letter-spacing: 0.05em;
|
|
234
|
+
}
|
|
235
|
+
|
|
204
236
|
.gps-converter-ui .copy-btn {
|
|
205
|
-
background:
|
|
237
|
+
background: transparent;
|
|
206
238
|
border: 1px solid var(--gps-border);
|
|
207
239
|
color: var(--gps-text-muted);
|
|
208
|
-
padding: 0.
|
|
209
|
-
border-radius:
|
|
210
|
-
font-size: 0.
|
|
211
|
-
font-weight:
|
|
240
|
+
padding: 0.4rem 0.8rem;
|
|
241
|
+
border-radius: 8px;
|
|
242
|
+
font-size: 0.65rem;
|
|
243
|
+
font-weight: 700;
|
|
212
244
|
cursor: pointer;
|
|
213
245
|
display: flex;
|
|
214
246
|
align-items: center;
|
|
215
|
-
gap: 0.
|
|
216
|
-
transition: all 0.
|
|
247
|
+
gap: 0.4rem;
|
|
248
|
+
transition: all 0.2s ease;
|
|
217
249
|
}
|
|
218
250
|
|
|
219
251
|
.gps-converter-ui .copy-btn:hover {
|
|
@@ -223,84 +255,130 @@
|
|
|
223
255
|
}
|
|
224
256
|
|
|
225
257
|
.gps-converter-ui .val-display {
|
|
226
|
-
font-size: 1.
|
|
227
|
-
font-weight:
|
|
258
|
+
font-size: 1.25rem;
|
|
259
|
+
font-weight: 700;
|
|
228
260
|
color: var(--gps-text);
|
|
229
261
|
word-break: break-all;
|
|
230
|
-
letter-spacing: -0.01em;
|
|
231
262
|
}
|
|
232
263
|
|
|
233
|
-
.gps-converter-ui .
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
border
|
|
264
|
+
.gps-converter-ui .map-container {
|
|
265
|
+
height: 350px;
|
|
266
|
+
border-radius: var(--gps-radius-lg);
|
|
267
|
+
border: 1px solid var(--gps-border);
|
|
268
|
+
overflow: hidden;
|
|
269
|
+
z-index: 1;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.gps-converter-ui .header-row {
|
|
237
273
|
display: flex;
|
|
238
274
|
justify-content: space-between;
|
|
239
275
|
align-items: center;
|
|
240
|
-
transition: all 0.3s ease;
|
|
241
|
-
border: 1px solid transparent;
|
|
242
276
|
}
|
|
243
277
|
|
|
244
|
-
.gps-converter-ui .
|
|
245
|
-
background:
|
|
246
|
-
border
|
|
247
|
-
|
|
278
|
+
.gps-converter-ui .text-btn {
|
|
279
|
+
background: transparent;
|
|
280
|
+
border: none;
|
|
281
|
+
color: var(--gps-text-dim);
|
|
282
|
+
font-size: 0.7rem;
|
|
283
|
+
font-weight: 700;
|
|
284
|
+
text-transform: uppercase;
|
|
285
|
+
cursor: pointer;
|
|
286
|
+
padding: 0.5rem;
|
|
287
|
+
transition: color 0.2s ease;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.gps-converter-ui .text-btn:hover {
|
|
291
|
+
color: var(--gps-danger);
|
|
248
292
|
}
|
|
249
293
|
|
|
250
|
-
.gps-converter-ui .
|
|
294
|
+
.gps-converter-ui .history-list {
|
|
251
295
|
display: flex;
|
|
252
296
|
flex-direction: column;
|
|
253
|
-
|
|
254
|
-
|
|
297
|
+
gap: 0.75rem;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
.gps-converter-ui .history-item {
|
|
301
|
+
background: var(--gps-bg);
|
|
302
|
+
border: 1px solid var(--gps-border);
|
|
303
|
+
border-radius: var(--gps-radius-md);
|
|
304
|
+
padding: 0.75rem 1rem;
|
|
305
|
+
display: flex;
|
|
306
|
+
justify-content: space-between;
|
|
307
|
+
align-items: center;
|
|
308
|
+
transition: all 0.2s ease;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.gps-converter-ui .history-item:hover {
|
|
312
|
+
border-color: var(--gps-accent);
|
|
313
|
+
transform: translateX(4px);
|
|
255
314
|
}
|
|
256
315
|
|
|
257
316
|
.gps-converter-ui .hist-coords {
|
|
258
|
-
font-size: 0.
|
|
259
|
-
font-weight:
|
|
317
|
+
font-size: 0.85rem;
|
|
318
|
+
font-weight: 600;
|
|
260
319
|
color: var(--gps-text);
|
|
261
320
|
}
|
|
262
321
|
|
|
263
322
|
.gps-converter-ui .hist-time {
|
|
264
|
-
font-size: 0.
|
|
323
|
+
font-size: 0.65rem;
|
|
265
324
|
color: var(--gps-text-dim);
|
|
266
|
-
|
|
267
|
-
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.gps-converter-ui .hist-actions {
|
|
328
|
+
display: flex;
|
|
329
|
+
gap: 0.5rem;
|
|
268
330
|
}
|
|
269
331
|
|
|
270
332
|
.gps-converter-ui .action-btn {
|
|
271
|
-
background: var(--gps-bg-
|
|
272
|
-
border:
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
333
|
+
background: var(--gps-bg-surface);
|
|
334
|
+
border: none;
|
|
335
|
+
color: var(--gps-text-muted);
|
|
336
|
+
padding: 0.4rem;
|
|
337
|
+
border-radius: 6px;
|
|
276
338
|
cursor: pointer;
|
|
277
|
-
display: flex;
|
|
278
|
-
align-items: center;
|
|
279
|
-
justify-content: center;
|
|
280
339
|
transition: all 0.2s ease;
|
|
281
340
|
}
|
|
282
341
|
|
|
342
|
+
.gps-converter-ui .action-btn:hover {
|
|
343
|
+
background: var(--gps-accent);
|
|
344
|
+
color: white;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.gps-converter-ui .delete-btn:hover {
|
|
348
|
+
background: var(--gps-danger);
|
|
349
|
+
}
|
|
350
|
+
|
|
283
351
|
.gps-converter-ui .no-history {
|
|
352
|
+
padding: 2rem;
|
|
284
353
|
text-align: center;
|
|
285
|
-
padding: 3rem;
|
|
286
354
|
color: var(--gps-text-dim);
|
|
287
|
-
font-
|
|
288
|
-
|
|
355
|
+
font-size: 0.85rem;
|
|
356
|
+
border: 1px dashed var(--gps-border);
|
|
357
|
+
border-radius: var(--gps-radius-md);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.gps-converter-ui .divider {
|
|
361
|
+
height: 1px;
|
|
362
|
+
background: var(--gps-border);
|
|
363
|
+
opacity: 0.5;
|
|
289
364
|
}
|
|
290
365
|
|
|
291
|
-
@media (max-width:
|
|
366
|
+
@media (max-width: 1024px) {
|
|
292
367
|
.gps-converter-ui .card-grid {
|
|
293
368
|
grid-template-columns: 1fr;
|
|
294
369
|
}
|
|
295
370
|
.gps-converter-ui .config-sidebar {
|
|
296
371
|
border-right: none;
|
|
297
|
-
border-bottom: 1px solid var(--gps-border
|
|
372
|
+
border-bottom: 1px solid var(--gps-border);
|
|
298
373
|
}
|
|
299
374
|
}
|
|
300
375
|
|
|
301
|
-
@media (max-width:
|
|
302
|
-
.gps-converter-ui
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
.gps-converter-ui .
|
|
376
|
+
@media (max-width: 640px) {
|
|
377
|
+
.gps-converter-ui .results-area {
|
|
378
|
+
grid-template-columns: 1fr;
|
|
379
|
+
}
|
|
380
|
+
.gps-converter-ui .main-display,
|
|
381
|
+
.gps-converter-ui .config-sidebar {
|
|
382
|
+
padding: 1.5rem;
|
|
383
|
+
}
|
|
306
384
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { GpsCoordinatesConverterLocaleContent } from '../index';
|
|
2
2
|
import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
|
|
3
|
+
import { bibliography } from '../bibliography';
|
|
3
4
|
|
|
4
5
|
const slug = 'gps-koordinaten-umrechner';
|
|
5
6
|
const title = 'GPS Koordinaten Umrechner fur Breitengrad und Laengengrad';
|
|
@@ -7,20 +8,20 @@ const description = 'Wandeln Sie GPS-Koordinaten zwischen Dezimalgrad (DD), Grad
|
|
|
7
8
|
|
|
8
9
|
const faqItems = [
|
|
9
10
|
{
|
|
10
|
-
question: '
|
|
11
|
-
answer: `DD (
|
|
11
|
+
question: 'Was ist der Unterschied zwischen DD und DMS?',
|
|
12
|
+
answer: `DD (Dezimalgrad) verwendet eine einzelne Zahl mit Dezimalstellen (z. B. 51.50). DMS (Grad, Minuten, Sekunden) unterteilt das Grad in sexagesimale Bruchteile (z. B. 51° 30' 0").`,
|
|
12
13
|
},
|
|
13
14
|
{
|
|
14
|
-
question: '
|
|
15
|
-
answer: '
|
|
15
|
+
question: 'Warum werden negative Koordinaten verwendet?',
|
|
16
|
+
answer: 'Im Dezimalsystem (DD) werden Breitengrade südlich des Äquators und Längengrade westlich von Greenwich mit einem Minuszeichen gekennzeichnet, um mathematische Berechnungen zu erleichtern.',
|
|
16
17
|
},
|
|
17
18
|
{
|
|
18
|
-
question: '
|
|
19
|
-
answer: '
|
|
19
|
+
question: 'Wie viel Präzision verliere ich beim Umrechnen?',
|
|
20
|
+
answer: 'Unser Tool verwendet Gleitkommazahlen mit doppelter Genauigkeit. Bei 6 Dezimalstellen in DD beträgt die Genauigkeit etwa 11 Zentimeter, was für Drohnen und zivile Navigation mehr als ausreichend ist.',
|
|
20
21
|
},
|
|
21
22
|
{
|
|
22
|
-
question: '
|
|
23
|
-
answer: '
|
|
23
|
+
question: 'Funktioniert dieses Tool offline?',
|
|
24
|
+
answer: 'Ja, sobald die Seite geladen ist, erfolgt die gesamte Umrechnungslogik lokal (clientseitig). Nur die Karte benötigt eine Verbindung, um neue Kacheln herunterzuladen.',
|
|
24
25
|
},
|
|
25
26
|
];
|
|
26
27
|
|
|
@@ -43,26 +44,26 @@ const schemas: GpsCoordinatesConverterLocaleContent['schemas'] = [
|
|
|
43
44
|
{
|
|
44
45
|
'@type': 'HowToStep',
|
|
45
46
|
position: 1,
|
|
46
|
-
name: '
|
|
47
|
-
text: '
|
|
47
|
+
name: 'Koordinaten eingeben',
|
|
48
|
+
text: 'Geben Sie Ihre Koordinaten entweder im Format Dezimalgrad (DD) oder Grad, Minuten, Sekunden (DMS) ein.',
|
|
48
49
|
},
|
|
49
50
|
{
|
|
50
51
|
'@type': 'HowToStep',
|
|
51
52
|
position: 2,
|
|
52
|
-
name: '
|
|
53
|
-
text: '
|
|
53
|
+
name: 'Umrechnung überprüfen',
|
|
54
|
+
text: 'Das Tool zeigt sofort die umgerechneten Koordinaten in allen unterstützten Formaten an.',
|
|
54
55
|
},
|
|
55
56
|
{
|
|
56
57
|
'@type': 'HowToStep',
|
|
57
58
|
position: 3,
|
|
58
|
-
name: '
|
|
59
|
-
text: '
|
|
59
|
+
name: 'Auf Karte verifizieren',
|
|
60
|
+
text: 'Überprüfen Sie die Kartenvisualisierung, um sicherzustellen, dass die Koordinaten auf den richtigen Ort zeigen.',
|
|
60
61
|
},
|
|
61
62
|
{
|
|
62
63
|
'@type': 'HowToStep',
|
|
63
64
|
position: 4,
|
|
64
|
-
name: '
|
|
65
|
-
text: '
|
|
65
|
+
name: 'Ergebnis kopieren',
|
|
66
|
+
text: 'Kopieren Sie die umgerechneten Koordinaten in Ihre Zwischenablage für die Verwendung in Navigationssystemen oder bei der Missionsplanung.',
|
|
66
67
|
},
|
|
67
68
|
],
|
|
68
69
|
} as WithContext<HowTo>,
|
|
@@ -82,25 +83,26 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
82
83
|
slug,
|
|
83
84
|
title,
|
|
84
85
|
description,
|
|
85
|
-
faqTitle: 'Häufig gestellte Fragen',
|
|
86
|
-
bibliographyTitle: 'Referenzhandbücher',
|
|
87
86
|
ui: {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
87
|
+
decimalDD: 'Dezimal (DD)',
|
|
88
|
+
degreesGMS: 'Grad (DMS)',
|
|
89
|
+
useLocation: 'Meinen Standort verwenden',
|
|
90
|
+
lat: 'Breitengrad',
|
|
91
|
+
lng: 'Längengrad',
|
|
92
|
+
latGMS: 'Breitengrad (DMS)',
|
|
93
|
+
lngGMS: 'Längengrad (DMS)',
|
|
94
|
+
gmsTraditional: 'Traditionelles DMS',
|
|
95
|
+
nauticalDM: 'Grad & Dez. Min. (Nautik)',
|
|
96
|
+
googleMapsFormat: 'Google Maps Format',
|
|
97
|
+
mapVisualization: 'Kartenvisualisierung',
|
|
98
|
+
mapHint: 'Klicken Sie auf die Karte, um Koordinaten direkt zu erfassen.',
|
|
95
99
|
copy: 'Kopieren',
|
|
96
100
|
copied: 'Kopiert!',
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
invalidFormat: 'Das Format wird nicht erkannt. Bitte überprüfen Sie Ihre Eingabe.',
|
|
103
|
-
},
|
|
101
|
+
recentHistory: 'Letzte Umrechnungen',
|
|
102
|
+
clear: 'Löschen',
|
|
103
|
+
noHistory: 'Keine letzten Umrechnungen.',
|
|
104
|
+
load: 'Laden',
|
|
105
|
+
delete: 'Löschen',
|
|
104
106
|
},
|
|
105
107
|
seo: [
|
|
106
108
|
{
|
|
@@ -196,10 +198,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
198
|
},
|
|
197
199
|
],
|
|
198
200
|
faq: faqItems,
|
|
199
|
-
bibliography
|
|
200
|
-
{ name: 'ArduPilot GPS Integration', url: 'https://ardupilot.org/copter/docs/common-positioning-landing-page.html' },
|
|
201
|
-
{ name: 'Dezimalgrad vs DMS (Wikipedia)', url: 'https://en.wikipedia.org/wiki/Decimal_degrees' },
|
|
202
|
-
],
|
|
201
|
+
bibliography,
|
|
203
202
|
howTo: [
|
|
204
203
|
{
|
|
205
204
|
name: 'Format identifizieren',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { GpsCoordinatesConverterLocaleContent } from '../index';
|
|
2
2
|
import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
|
|
3
|
+
import { bibliography } from '../bibliography';
|
|
3
4
|
|
|
4
5
|
const slug = 'gps-coordinates-converter';
|
|
5
6
|
const title = 'GPS Coordinates Converter from Decimal to DMS Online Free';
|
|
@@ -81,11 +82,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
81
82
|
slug,
|
|
82
83
|
title,
|
|
83
84
|
description,
|
|
84
|
-
faqTitle: 'Frequently Asked Questions',
|
|
85
|
-
bibliographyTitle: 'Bibliographic References',
|
|
86
85
|
ui: {
|
|
87
|
-
faqTitle: 'Frequently Asked Questions',
|
|
88
|
-
bibliographyTitle: 'Bibliographic References',
|
|
89
86
|
decimalDD: 'Decimal (DD)',
|
|
90
87
|
degreesGMS: 'Degrees (DMS)',
|
|
91
88
|
useLocation: 'Use my location',
|
|
@@ -96,6 +93,8 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
96
93
|
gmsTraditional: 'Traditional DMS',
|
|
97
94
|
nauticalDM: 'Degrees & Dec. Min. (Nautical)',
|
|
98
95
|
googleMapsFormat: 'Google Maps Format',
|
|
96
|
+
mapVisualization: 'Map Visualization',
|
|
97
|
+
mapHint: 'Click on the map to capture coordinates directly.',
|
|
99
98
|
copy: 'Copy',
|
|
100
99
|
copied: 'Copied!',
|
|
101
100
|
recentHistory: 'Recent History',
|
|
@@ -242,16 +241,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
242
241
|
},
|
|
243
242
|
],
|
|
244
243
|
faq: faqItems,
|
|
245
|
-
bibliography
|
|
246
|
-
{
|
|
247
|
-
name: 'WGS 84 (World Geodetic System 1984): The global technical standard for mapping and GPS.',
|
|
248
|
-
url: 'https://en.wikipedia.org/wiki/World_Geodetic_System',
|
|
249
|
-
},
|
|
250
|
-
{
|
|
251
|
-
name: 'USGS: Using GPS and Coordinate Systems.',
|
|
252
|
-
url: 'https://www.usgs.gov/faqs/how-do-i-find-latitude-and-longitude-a-location',
|
|
253
|
-
},
|
|
254
|
-
],
|
|
244
|
+
bibliography,
|
|
255
245
|
howTo: [],
|
|
256
246
|
schemas,
|
|
257
247
|
};
|