@jjlmoya/utils-drones 1.1.0 → 1.3.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.
@@ -173,10 +173,10 @@ const materials = [
173
173
  </div>
174
174
  </div>
175
175
 
176
- <script lang="ts">
177
- const freqInput = document.getElementById('freqInput') as HTMLInputElement;
178
- const vfInput = document.getElementById('vfInput') as HTMLSelectElement;
179
- const waveRadios = document.getElementsByName('waveType') as NodeListOf<HTMLInputElement>;
176
+ <script>
177
+ const freqInput = document.getElementById('freqInput');
178
+ const vfInput = document.getElementById('vfInput');
179
+ const waveRadios = document.getElementsByName('waveType');
180
180
 
181
181
  const elements = {
182
182
  total: document.getElementById('totalLength'),
@@ -185,24 +185,24 @@ const materials = [
185
185
  dipoleLayer: document.getElementById('dipoleLayer'),
186
186
  whipLayer: document.getElementById('whipLayer'),
187
187
  harmonics: document.getElementById('harmonicsList'),
188
- leftArm: document.getElementById('leftArm') as SVGLineElement | null,
189
- rightArm: document.getElementById('rightArm') as SVGLineElement | null,
190
- verticalWhip: document.getElementById('verticalWhip') as SVGLineElement | null,
191
- measureLine: document.getElementById('measureLine') as SVGLineElement | null,
192
- leftTick: document.getElementById('leftTick') as SVGLineElement | null,
193
- rightTick: document.getElementById('rightTick') as SVGLineElement | null,
194
- topTick: document.getElementById('topTick') as SVGLineElement | null,
195
- bottomTick: document.getElementById('bottomTick') as SVGLineElement | null,
196
- verticalMeasure: document.getElementById('verticalMeasure') as SVGLineElement | null
188
+ leftArm: document.getElementById('leftArm') || null,
189
+ rightArm: document.getElementById('rightArm') || null,
190
+ verticalWhip: document.getElementById('verticalWhip') || null,
191
+ measureLine: document.getElementById('measureLine') || null,
192
+ leftTick: document.getElementById('leftTick') || null,
193
+ rightTick: document.getElementById('rightTick') || null,
194
+ topTick: document.getElementById('topTick') || null,
195
+ bottomTick: document.getElementById('bottomTick') || null,
196
+ verticalMeasure: document.getElementById('verticalMeasure') || null
197
197
  };
198
198
 
199
- function getWaveType(): string {
199
+ function getWaveType() {
200
200
  let waveType = 'half';
201
201
  waveRadios.forEach(r => { if(r.checked) waveType = r.value; });
202
202
  return waveType;
203
203
  }
204
204
 
205
- function updateLayerVisibility(waveType: string): void {
205
+ function updateLayerVisibility(waveType) {
206
206
  if (waveType === 'half') {
207
207
  if (elements.branchCard) elements.branchCard.style.display = 'flex';
208
208
  if (elements.dipoleLayer) elements.dipoleLayer.style.display = 'block';
@@ -236,7 +236,7 @@ const materials = [
236
236
  updateHarmonics(freq);
237
237
  }
238
238
 
239
- function setArmAttributes(x: number, isLeft: boolean): void {
239
+ function setArmAttributes(x, isLeft) {
240
240
  const arm = isLeft ? elements.leftArm : elements.rightArm;
241
241
  const startX = isLeft ? '195' : '205';
242
242
  arm?.setAttribute('x1', startX);
@@ -246,7 +246,7 @@ const materials = [
246
246
  tick?.setAttribute('x2', x.toString());
247
247
  }
248
248
 
249
- function updateDipoleVisuals(visualLen: number): void {
249
+ function updateDipoleVisuals(visualLen) {
250
250
  const x1 = 200 - visualLen;
251
251
  const x2 = 200 + visualLen;
252
252
  setArmAttributes(x1, true);
@@ -255,7 +255,7 @@ const materials = [
255
255
  elements.measureLine?.setAttribute('x2', x2.toString());
256
256
  }
257
257
 
258
- function updateWhipVisuals(visualLen: number): void {
258
+ function updateWhipVisuals(visualLen) {
259
259
  const y2 = 250 - visualLen;
260
260
  elements.verticalWhip?.setAttribute('y2', y2.toString());
261
261
  elements.verticalMeasure?.setAttribute('y1', y2.toString());
@@ -263,7 +263,7 @@ const materials = [
263
263
  elements.topTick?.setAttribute('y2', y2.toString());
264
264
  }
265
265
 
266
- function updateVisuals(type: string, len: number) {
266
+ function updateVisuals(type, len) {
267
267
  const visualLen = Math.min(Math.max(len / 4, 30), 160);
268
268
  if (type === 'half') {
269
269
  updateDipoleVisuals(visualLen);
@@ -272,7 +272,7 @@ const materials = [
272
272
  }
273
273
  }
274
274
 
275
- function updateHarmonics(baseFreq: number) {
275
+ function updateHarmonics(baseFreq) {
276
276
  if (!elements.harmonics) return;
277
277
 
278
278
  const harmonicLabel = elements.harmonics.dataset.label || "Armónica";
@@ -2,14 +2,14 @@
2
2
  --dft-accent: #f97316;
3
3
  --dft-accent-glow: rgba(249, 115, 22, 0.15);
4
4
  --dft-bg: #fff;
5
- --dft-bg-muted: #f8fafc;
6
- --dft-bg-surface: #f1f5f9;
7
- --dft-text: #0f172a;
8
- --dft-text-muted: #64748b;
9
- --dft-text-dim: #94a3b8;
10
- --dft-border: #e2e8f0;
11
- --dft-border-light: rgba(0, 0, 0, 0.05);
12
- --dft-border-dark-light: rgba(255, 255, 255, 0.05);
5
+ --dft-bg-muted: #f5f5f5;
6
+ --dft-bg-surface: #eee;
7
+ --dft-bg-overlay: #f0f0f0;
8
+ --dft-text: #1a1a1a;
9
+ --dft-text-muted: #4a4a4a;
10
+ --dft-text-dim: #707070;
11
+ --dft-border: #d0d0d0;
12
+ --dft-border-light: #e8e8e8;
13
13
  --dft-shadow: 0 30px 60px rgba(0, 0, 0, 0.08);
14
14
  --dft-success: #15803d;
15
15
  --dft-success-bg: #dcfce7;
@@ -17,32 +17,33 @@
17
17
  --dft-warning-bg: #fef9c3;
18
18
  --dft-danger: #b91c1c;
19
19
  --dft-danger-bg: #fee2e2;
20
+
21
+ width: 100%;
22
+ max-width: 1100px;
23
+ margin: 0 auto;
20
24
  }
21
25
 
22
26
  [data-theme="dark"] .flight-calculator-ui,
23
27
  .theme-dark .flight-calculator-ui {
24
- --dft-bg: #0f172a;
25
- --dft-bg-muted: #1e293b;
26
- --dft-bg-surface: #334155;
27
- --dft-text: #f1f5f9;
28
- --dft-text-muted: #94a3b8;
29
- --dft-text-dim: #cbd5e1;
30
- --dft-border: #334155;
31
- --dft-border-light: rgba(255, 255, 255, 0.08);
32
- --dft-border-dark-light: rgba(255, 255, 255, 0.05);
28
+ --dft-bg: #1a1a1a;
29
+ --dft-bg-muted: #2d2d2d;
30
+ --dft-bg-surface: #3a3a3a;
31
+ --dft-bg-overlay: #292929;
32
+ --dft-text: #f5f5f5;
33
+ --dft-text-muted: #b0b0b0;
34
+ --dft-text-dim: #888;
35
+ --dft-border: #4a4a4a;
36
+ --dft-border-light: #525252;
37
+ --dft-shadow: 0 30px 60px rgba(0, 0, 0, 0.08);
33
38
  --dft-success: #4ade80;
34
39
  --dft-success-bg: rgba(21, 128, 61, 0.15);
35
40
  --dft-warning: #facc15;
36
41
  --dft-warning-bg: rgba(161, 98, 7, 0.15);
37
42
  --dft-danger: #f87171;
38
43
  --dft-danger-bg: rgba(185, 28, 28, 0.15);
39
-
40
- width: 100%;
41
- max-width: 1100px;
42
- margin: 0 auto;
43
44
  }
44
45
 
45
- .tech-mega-card {
46
+ .flight-calculator-ui .tech-mega-card {
46
47
  background: var(--dft-bg);
47
48
  backdrop-filter: blur(20px);
48
49
  border: 1px solid var(--dft-border);
@@ -51,51 +52,57 @@
51
52
  overflow: hidden;
52
53
  }
53
54
 
54
- .card-grid {
55
+ .flight-calculator-ui .card-grid {
55
56
  display: grid;
56
57
  grid-template-columns: 380px 1fr;
57
58
  }
58
59
 
59
- .config-sidebar {
60
+ .flight-calculator-ui .config-sidebar {
60
61
  padding: 2.5rem;
61
- background: rgba(255, 255, 255, 0.3);
62
+ background: var(--dft-bg-overlay);
62
63
  display: flex;
63
64
  flex-direction: column;
64
65
  gap: 2.5rem;
65
66
  border-right: 1px solid var(--dft-border-light);
66
67
  }
67
68
 
68
- [data-theme="dark"] .config-sidebar,
69
- .theme-dark .config-sidebar {
70
- background: rgba(255, 255, 255, 0.02);
71
- border-right-color: var(--dft-border-dark-light);
69
+ [data-theme="dark"] .flight-calculator-ui .config-sidebar,
70
+ .theme-dark .flight-calculator-ui .config-sidebar {
71
+ background: var(--dft-bg-surface);
72
+ border-right-color: var(--dft-border-light);
72
73
  }
73
74
 
74
- .main-display {
75
+ .flight-calculator-ui .main-display {
75
76
  padding: 2.5rem;
76
77
  display: flex;
77
78
  flex-direction: column;
78
79
  gap: 2.5rem;
80
+ background: var(--dft-bg);
81
+ }
82
+
83
+ [data-theme="dark"] .flight-calculator-ui .main-display,
84
+ .theme-dark .flight-calculator-ui .main-display {
85
+ background: var(--dft-bg);
79
86
  }
80
87
 
81
- .divider {
88
+ .flight-calculator-ui .divider {
82
89
  height: 1px;
83
90
  width: 100%;
84
- background: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.05), transparent);
91
+ background: linear-gradient(90deg, transparent, var(--dft-border-light), transparent);
85
92
  }
86
93
 
87
- [data-theme="dark"] .divider,
88
- .theme-dark .divider {
89
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.05), transparent);
94
+ [data-theme="dark"] .flight-calculator-ui .divider,
95
+ .theme-dark .flight-calculator-ui .divider {
96
+ background: linear-gradient(90deg, transparent, var(--dft-border-light), transparent);
90
97
  }
91
98
 
92
- .tech-section {
99
+ .flight-calculator-ui .tech-section {
93
100
  display: flex;
94
101
  flex-direction: column;
95
102
  gap: 1.5rem;
96
103
  }
97
104
 
98
- .section-title {
105
+ .flight-calculator-ui .section-title {
99
106
  font-size: 0.95rem;
100
107
  font-weight: 800;
101
108
  color: var(--dft-text);
@@ -104,34 +111,34 @@
104
111
  margin: 0;
105
112
  }
106
113
 
107
- .input-group {
114
+ .flight-calculator-ui .input-group {
108
115
  display: flex;
109
116
  flex-direction: column;
110
117
  gap: 0.75rem;
111
118
  }
112
119
 
113
- .label-row {
120
+ .flight-calculator-ui .label-row {
114
121
  display: flex;
115
122
  justify-content: space-between;
116
123
  align-items: center;
117
124
  }
118
125
 
119
- .input-group label {
126
+ .flight-calculator-ui .input-group label {
120
127
  font-size: 0.85rem;
121
128
  font-weight: 700;
122
129
  color: var(--dft-text-muted);
123
130
  }
124
131
 
125
- .value-badge {
132
+ .flight-calculator-ui .value-badge {
126
133
  padding: 0.25rem 0.75rem;
127
- background: rgba(249, 115, 22, 0.1);
134
+ background: var(--dft-accent-glow);
128
135
  border-radius: 12px;
129
136
  color: var(--dft-accent);
130
137
  font-weight: 800;
131
138
  font-size: 0.9rem;
132
139
  }
133
140
 
134
- .tech-slider {
141
+ .flight-calculator-ui .tech-slider {
135
142
  width: 100%;
136
143
  height: 6px;
137
144
  appearance: none;
@@ -140,26 +147,26 @@
140
147
  outline: none;
141
148
  }
142
149
 
143
- .tech-slider::-webkit-slider-thumb {
150
+ .flight-calculator-ui .tech-slider::-webkit-slider-thumb {
144
151
  appearance: none;
145
152
  width: 18px;
146
153
  height: 18px;
147
154
  background: var(--dft-accent);
148
- border: 3px solid white;
155
+ border: 3px solid var(--dft-bg);
149
156
  border-radius: 50%;
150
157
  cursor: pointer;
151
158
  }
152
159
 
153
- .tech-slider::-moz-range-thumb {
160
+ .flight-calculator-ui .tech-slider::-moz-range-thumb {
154
161
  width: 18px;
155
162
  height: 18px;
156
163
  background: var(--dft-accent);
157
- border: 3px solid white;
164
+ border: 3px solid var(--dft-bg);
158
165
  border-radius: 50%;
159
166
  cursor: pointer;
160
167
  }
161
168
 
162
- .tech-select {
169
+ .flight-calculator-ui .tech-select {
163
170
  width: 100%;
164
171
  padding: 0.75rem;
165
172
  background: var(--dft-bg-surface);
@@ -169,7 +176,7 @@
169
176
  color: var(--dft-text);
170
177
  }
171
178
 
172
- .tech-input {
179
+ .flight-calculator-ui .tech-input {
173
180
  width: 100%;
174
181
  padding: 0.75rem;
175
182
  background: var(--dft-bg-surface);
@@ -179,13 +186,13 @@
179
186
  color: var(--dft-text);
180
187
  }
181
188
 
182
- .presets {
189
+ .flight-calculator-ui .presets {
183
190
  display: flex;
184
191
  gap: 0.5rem;
185
192
  flex-wrap: wrap;
186
193
  }
187
194
 
188
- .preset-btn {
195
+ .flight-calculator-ui .preset-btn {
189
196
  padding: 0.35rem 0.65rem;
190
197
  background: var(--dft-bg-surface);
191
198
  border: none;
@@ -197,29 +204,29 @@
197
204
  transition: all 0.2s;
198
205
  }
199
206
 
200
- .preset-btn:hover {
207
+ .flight-calculator-ui .preset-btn:hover {
201
208
  background: var(--dft-border);
202
209
  color: var(--dft-text);
203
210
  }
204
211
 
205
- .hint {
212
+ .flight-calculator-ui .hint {
206
213
  font-size: 0.75rem;
207
214
  color: var(--dft-text-dim);
208
215
  }
209
216
 
210
- .dashboard-section {
217
+ .flight-calculator-ui .dashboard-section {
211
218
  display: flex;
212
219
  flex-direction: column;
213
220
  align-items: center;
214
221
  gap: 2rem;
215
222
  }
216
223
 
217
- .main-result {
224
+ .flight-calculator-ui .main-result {
218
225
  display: flex;
219
226
  justify-content: center;
220
227
  }
221
228
 
222
- .radial-container {
229
+ .flight-calculator-ui .radial-container {
223
230
  position: relative;
224
231
  width: 240px;
225
232
  height: 240px;
@@ -228,19 +235,19 @@
228
235
  align-items: center;
229
236
  }
230
237
 
231
- .radial-svg {
238
+ .flight-calculator-ui .radial-svg {
232
239
  transform: rotate(-90deg);
233
240
  width: 100%;
234
241
  height: 100%;
235
242
  }
236
243
 
237
- .bg-circle {
244
+ .flight-calculator-ui .bg-circle {
238
245
  fill: none;
239
246
  stroke: var(--dft-bg-surface);
240
247
  stroke-width: 8;
241
248
  }
242
249
 
243
- .fg-circle {
250
+ .flight-calculator-ui .fg-circle {
244
251
  fill: none;
245
252
  stroke: var(--dft-accent);
246
253
  stroke-width: 8;
@@ -250,7 +257,7 @@
250
257
  transition: stroke-dashoffset 0.8s cubic-bezier(0.4, 0, 0.2, 1);
251
258
  }
252
259
 
253
- .result-text {
260
+ .flight-calculator-ui .result-text {
254
261
  position: absolute;
255
262
  display: flex;
256
263
  flex-direction: column;
@@ -258,7 +265,7 @@
258
265
  gap: 0.25rem;
259
266
  }
260
267
 
261
- .time-primary {
268
+ .flight-calculator-ui .time-primary {
262
269
  font-size: 4.5rem;
263
270
  font-weight: 950;
264
271
  color: var(--dft-text);
@@ -266,7 +273,7 @@
266
273
  line-height: 1;
267
274
  }
268
275
 
269
- .time-label {
276
+ .flight-calculator-ui .time-label {
270
277
  font-size: 0.9rem;
271
278
  font-weight: 800;
272
279
  color: var(--dft-text-muted);
@@ -274,31 +281,31 @@
274
281
  letter-spacing: 0.1em;
275
282
  }
276
283
 
277
- .secondary-stats {
284
+ .flight-calculator-ui .secondary-stats {
278
285
  display: grid;
279
286
  grid-template-columns: repeat(3, 1fr);
280
287
  gap: 1.5rem;
281
288
  width: 100%;
282
289
  }
283
290
 
284
- .stat-box {
291
+ .flight-calculator-ui .stat-box {
285
292
  display: flex;
286
293
  flex-direction: column;
287
294
  align-items: center;
288
295
  gap: 0.25rem;
289
296
  padding: 1.25rem;
290
- background: rgba(255, 255, 255, 0.5);
291
- border: 1px solid rgba(0, 0, 0, 0.03);
297
+ background: var(--dft-bg-overlay);
298
+ border: 1px solid var(--dft-border-light);
292
299
  border-radius: 20px;
293
300
  }
294
301
 
295
- [data-theme="dark"] .stat-box,
296
- .theme-dark .stat-box {
297
- background: rgba(255, 255, 255, 0.03);
298
- border-color: rgba(255, 255, 255, 0.05);
302
+ [data-theme="dark"] .flight-calculator-ui .stat-box,
303
+ .theme-dark .flight-calculator-ui .stat-box {
304
+ background: var(--dft-bg-muted);
305
+ border-color: var(--dft-border);
299
306
  }
300
307
 
301
- .stat-label {
308
+ .flight-calculator-ui .stat-label {
302
309
  font-size: 0.7rem;
303
310
  font-weight: 700;
304
311
  color: var(--dft-text-dim);
@@ -306,58 +313,58 @@
306
313
  text-align: center;
307
314
  }
308
315
 
309
- .stat-value {
316
+ .flight-calculator-ui .stat-value {
310
317
  font-size: 1.2rem;
311
318
  font-weight: 900;
312
319
  color: var(--dft-text);
313
320
  }
314
321
 
315
- .chart-header {
322
+ .flight-calculator-ui .chart-header {
316
323
  display: flex;
317
324
  justify-content: space-between;
318
325
  align-items: center;
319
326
  margin-bottom: 1rem;
320
327
  }
321
328
 
322
- .chart-subtitle {
329
+ .flight-calculator-ui .chart-subtitle {
323
330
  font-size: 0.85rem;
324
331
  font-weight: 600;
325
332
  color: var(--dft-text-muted);
326
333
  }
327
334
 
328
- .chart-body {
335
+ .flight-calculator-ui .chart-body {
329
336
  position: relative;
330
337
  height: 300px;
331
338
  width: 100%;
332
339
  }
333
340
 
334
341
  @media (max-width: 992px) {
335
- .card-grid {
342
+ .flight-calculator-ui .card-grid {
336
343
  grid-template-columns: 1fr;
337
344
  }
338
345
 
339
- .config-sidebar {
346
+ .flight-calculator-ui .config-sidebar {
340
347
  border-right: none;
341
348
  border-bottom: 1px solid var(--dft-border-light);
342
349
  }
343
350
 
344
- [data-theme="dark"] .config-sidebar,
345
- .theme-dark .config-sidebar {
346
- border-bottom-color: var(--dft-border-dark-light);
351
+ [data-theme="dark"] .flight-calculator-ui .config-sidebar,
352
+ .theme-dark .flight-calculator-ui .config-sidebar {
353
+ border-bottom-color: var(--dft-border-light);
347
354
  }
348
355
  }
349
356
 
350
357
  @media (max-width: 600px) {
351
- .secondary-stats {
358
+ .flight-calculator-ui .secondary-stats {
352
359
  grid-template-columns: 1fr;
353
360
  }
354
361
 
355
- .radial-container {
362
+ .flight-calculator-ui .radial-container {
356
363
  width: 200px;
357
364
  height: 200px;
358
365
  }
359
366
 
360
- .time-primary {
367
+ .flight-calculator-ui .time-primary {
361
368
  font-size: 3.5rem;
362
369
  }
363
370
  }