@jjlmoya/utils-home 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 +5 -3
- package/scripts/postinstall.mjs +27 -0
- package/src/pages/[locale]/[slug].astro +28 -12
- package/src/tests/locale_completeness.test.ts +2 -20
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tool/dewPointCalculator/bibliography.ts +10 -0
- package/src/tool/dewPointCalculator/component.astro +0 -232
- package/src/tool/dewPointCalculator/dew-point-calculator.css +230 -0
- package/src/tool/dewPointCalculator/i18n/de.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/en.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/es.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/fr.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/id.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/it.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/ja.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/ko.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/nl.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/pl.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/pt.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/ru.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/sv.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/tr.ts +2 -12
- package/src/tool/dewPointCalculator/i18n/zh.ts +2 -12
- package/src/tool/dewPointCalculator/seo.astro +2 -1
- package/src/tool/heatingComparator/bibliography.ts +14 -0
- package/src/tool/heatingComparator/component.astro +0 -269
- package/src/tool/heatingComparator/heating-consumption-comparator.css +267 -0
- package/src/tool/heatingComparator/i18n/de.ts +2 -16
- package/src/tool/heatingComparator/i18n/en.ts +2 -12
- package/src/tool/heatingComparator/i18n/es.ts +2 -16
- package/src/tool/heatingComparator/i18n/fr.ts +2 -12
- package/src/tool/heatingComparator/i18n/id.ts +2 -16
- package/src/tool/heatingComparator/i18n/it.ts +2 -16
- package/src/tool/heatingComparator/i18n/ja.ts +296 -310
- package/src/tool/heatingComparator/i18n/ko.ts +296 -306
- package/src/tool/heatingComparator/i18n/nl.ts +2 -16
- package/src/tool/heatingComparator/i18n/pl.ts +2 -16
- package/src/tool/heatingComparator/i18n/pt.ts +2 -16
- package/src/tool/heatingComparator/i18n/ru.ts +2 -12
- package/src/tool/heatingComparator/i18n/sv.ts +2 -16
- package/src/tool/heatingComparator/i18n/tr.ts +2 -16
- package/src/tool/heatingComparator/i18n/zh.ts +296 -306
- package/src/tool/heatingComparator/seo.astro +3 -3
- package/src/tool/ledSavingCalculator/bibliography.ts +14 -0
- package/src/tool/ledSavingCalculator/component.astro +0 -305
- package/src/tool/ledSavingCalculator/i18n/de.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/en.ts +2 -16
- package/src/tool/ledSavingCalculator/i18n/es.ts +2 -16
- package/src/tool/ledSavingCalculator/i18n/fr.ts +2 -16
- package/src/tool/ledSavingCalculator/i18n/id.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/it.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/ja.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/ko.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/nl.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/pl.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/pt.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/ru.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/sv.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/tr.ts +2 -12
- package/src/tool/ledSavingCalculator/i18n/zh.ts +2 -12
- package/src/tool/ledSavingCalculator/led-saving-calculator.css +303 -0
- package/src/tool/ledSavingCalculator/seo.astro +2 -1
- package/src/tool/projectorCalculator/bibliography.ts +5 -0
- package/src/tool/projectorCalculator/component.astro +0 -359
- package/src/tool/projectorCalculator/i18n/de.ts +2 -6
- package/src/tool/projectorCalculator/i18n/en.ts +2 -7
- package/src/tool/projectorCalculator/i18n/es.ts +2 -7
- package/src/tool/projectorCalculator/i18n/fr.ts +2 -7
- package/src/tool/projectorCalculator/i18n/id.ts +2 -7
- package/src/tool/projectorCalculator/i18n/it.ts +2 -6
- package/src/tool/projectorCalculator/i18n/ja.ts +175 -179
- package/src/tool/projectorCalculator/i18n/ko.ts +175 -179
- package/src/tool/projectorCalculator/i18n/nl.ts +2 -6
- package/src/tool/projectorCalculator/i18n/pl.ts +2 -6
- package/src/tool/projectorCalculator/i18n/pt.ts +2 -6
- package/src/tool/projectorCalculator/i18n/ru.ts +2 -6
- package/src/tool/projectorCalculator/i18n/sv.ts +2 -6
- package/src/tool/projectorCalculator/i18n/tr.ts +2 -6
- package/src/tool/projectorCalculator/i18n/zh.ts +175 -179
- package/src/tool/projectorCalculator/projector-throw-calculator.css +357 -0
- package/src/tool/projectorCalculator/seo.astro +2 -1
- package/src/tool/qrGenerator/bibliography.ts +14 -0
- package/src/tool/qrGenerator/component.astro +0 -266
- package/src/tool/qrGenerator/i18n/de.ts +192 -202
- package/src/tool/qrGenerator/i18n/en.ts +2 -16
- package/src/tool/qrGenerator/i18n/es.ts +2 -16
- package/src/tool/qrGenerator/i18n/fr.ts +2 -16
- package/src/tool/qrGenerator/i18n/id.ts +146 -150
- package/src/tool/qrGenerator/i18n/it.ts +169 -173
- package/src/tool/qrGenerator/i18n/ja.ts +146 -150
- package/src/tool/qrGenerator/i18n/ko.ts +146 -150
- package/src/tool/qrGenerator/i18n/nl.ts +146 -150
- package/src/tool/qrGenerator/i18n/pl.ts +146 -150
- package/src/tool/qrGenerator/i18n/pt.ts +146 -150
- package/src/tool/qrGenerator/i18n/ru.ts +146 -150
- package/src/tool/qrGenerator/i18n/sv.ts +146 -150
- package/src/tool/qrGenerator/i18n/tr.ts +146 -150
- package/src/tool/qrGenerator/i18n/zh.ts +146 -150
- package/src/tool/qrGenerator/qr-generator.css +264 -0
- package/src/tool/qrGenerator/seo.astro +2 -1
- package/src/tool/solarCalculator/bibliography.ts +5 -0
- package/src/tool/solarCalculator/component.astro +0 -298
- package/src/tool/solarCalculator/i18n/de.ts +141 -145
- package/src/tool/solarCalculator/i18n/en.ts +2 -7
- package/src/tool/solarCalculator/i18n/es.ts +2 -7
- package/src/tool/solarCalculator/i18n/fr.ts +2 -7
- package/src/tool/solarCalculator/i18n/id.ts +2 -6
- package/src/tool/solarCalculator/i18n/it.ts +2 -6
- package/src/tool/solarCalculator/i18n/ja.ts +121 -125
- package/src/tool/solarCalculator/i18n/ko.ts +116 -120
- package/src/tool/solarCalculator/i18n/nl.ts +2 -5
- package/src/tool/solarCalculator/i18n/pl.ts +2 -6
- package/src/tool/solarCalculator/i18n/pt.ts +2 -6
- package/src/tool/solarCalculator/i18n/ru.ts +2 -5
- package/src/tool/solarCalculator/i18n/sv.ts +2 -5
- package/src/tool/solarCalculator/i18n/tr.ts +2 -5
- package/src/tool/solarCalculator/i18n/zh.ts +116 -120
- package/src/tool/solarCalculator/seo.astro +2 -1
- package/src/tool/solarCalculator/solar-panel-calculator.css +296 -0
- package/src/tool/tariffComparator/bibliography.ts +7 -0
- package/src/tool/tariffComparator/component.astro +0 -337
- package/src/tool/tariffComparator/electricity-tariff-comparator.css +335 -0
- package/src/tool/tariffComparator/i18n/de.ts +129 -132
- package/src/tool/tariffComparator/i18n/en.ts +2 -9
- package/src/tool/tariffComparator/i18n/es.ts +2 -9
- package/src/tool/tariffComparator/i18n/fr.ts +2 -9
- package/src/tool/tariffComparator/i18n/id.ts +2 -5
- package/src/tool/tariffComparator/i18n/it.ts +2 -5
- package/src/tool/tariffComparator/i18n/ja.ts +129 -132
- package/src/tool/tariffComparator/i18n/ko.ts +129 -132
- package/src/tool/tariffComparator/i18n/nl.ts +2 -5
- package/src/tool/tariffComparator/i18n/pl.ts +2 -5
- package/src/tool/tariffComparator/i18n/pt.ts +2 -5
- package/src/tool/tariffComparator/i18n/ru.ts +2 -5
- package/src/tool/tariffComparator/i18n/sv.ts +2 -5
- package/src/tool/tariffComparator/i18n/tr.ts +2 -5
- package/src/tool/tariffComparator/i18n/zh.ts +129 -132
- package/src/tool/tariffComparator/seo.astro +2 -1
- package/src/types.ts +0 -2
|
@@ -232,301 +232,3 @@ const initial = calculateTilt(40.41);
|
|
|
232
232
|
init();
|
|
233
233
|
</script>
|
|
234
234
|
|
|
235
|
-
<style>
|
|
236
|
-
.solar-wrapper {
|
|
237
|
-
--solar-p: #f97316;
|
|
238
|
-
--solar-winter: #3b82f6;
|
|
239
|
-
--solar-summer: #eab308;
|
|
240
|
-
|
|
241
|
-
width: 100%;
|
|
242
|
-
padding: 1rem 0;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
.solar-card {
|
|
246
|
-
background: var(--bg-surface);
|
|
247
|
-
width: calc(100% - 24px);
|
|
248
|
-
max-width: 960px;
|
|
249
|
-
margin: 0 auto;
|
|
250
|
-
border-radius: 24px;
|
|
251
|
-
overflow: hidden;
|
|
252
|
-
display: flex;
|
|
253
|
-
flex-direction: column;
|
|
254
|
-
border: 1px solid var(--border-color);
|
|
255
|
-
color: var(--text-main);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
@media (min-width: 768px) {
|
|
259
|
-
.solar-card {
|
|
260
|
-
flex-direction: row;
|
|
261
|
-
min-height: 560px;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
.solar-left {
|
|
266
|
-
flex: 0 0 auto;
|
|
267
|
-
width: 100%;
|
|
268
|
-
padding: 32px;
|
|
269
|
-
border-bottom: 1px solid var(--border-color);
|
|
270
|
-
display: flex;
|
|
271
|
-
flex-direction: column;
|
|
272
|
-
gap: 24px;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
@media (min-width: 768px) {
|
|
276
|
-
.solar-left {
|
|
277
|
-
width: 340px;
|
|
278
|
-
border-bottom: none;
|
|
279
|
-
border-right: 1px solid var(--border-color);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
.solar-right {
|
|
284
|
-
flex: 1;
|
|
285
|
-
background: #020617;
|
|
286
|
-
position: relative;
|
|
287
|
-
overflow: hidden;
|
|
288
|
-
display: flex;
|
|
289
|
-
align-items: center;
|
|
290
|
-
justify-content: center;
|
|
291
|
-
min-height: 380px;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
.viz-dots {
|
|
295
|
-
position: absolute;
|
|
296
|
-
inset: 0;
|
|
297
|
-
opacity: 0.15;
|
|
298
|
-
pointer-events: none;
|
|
299
|
-
background-image: radial-gradient(#fff 1px, transparent 1px);
|
|
300
|
-
background-size: 24px 24px;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
.viz-svg {
|
|
304
|
-
width: 100%;
|
|
305
|
-
height: 100%;
|
|
306
|
-
position: relative;
|
|
307
|
-
z-index: 1;
|
|
308
|
-
padding: 1rem;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
.sun-pulse {
|
|
312
|
-
animation: pulse 2s ease-in-out infinite;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
@keyframes pulse {
|
|
316
|
-
0%, 100% { opacity: 0.2; }
|
|
317
|
-
50% { opacity: 0.5; }
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
.field-group {
|
|
321
|
-
display: flex;
|
|
322
|
-
flex-direction: column;
|
|
323
|
-
gap: 8px;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
.field-label {
|
|
327
|
-
font-size: 11px;
|
|
328
|
-
font-weight: 700;
|
|
329
|
-
color: var(--text-muted);
|
|
330
|
-
text-transform: uppercase;
|
|
331
|
-
letter-spacing: 0.1em;
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
.lat-row {
|
|
335
|
-
position: relative;
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
.lat-input {
|
|
339
|
-
width: 100%;
|
|
340
|
-
font-size: 2.5rem;
|
|
341
|
-
font-weight: 900;
|
|
342
|
-
color: var(--text-main);
|
|
343
|
-
background: transparent;
|
|
344
|
-
border: none;
|
|
345
|
-
border-bottom: 2px solid var(--border-color);
|
|
346
|
-
padding: 4px 2.5rem 4px 0;
|
|
347
|
-
outline: none;
|
|
348
|
-
transition: border-color 0.2s;
|
|
349
|
-
box-sizing: border-box;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
.lat-input:focus {
|
|
353
|
-
border-color: var(--solar-p);
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
.deg-unit {
|
|
357
|
-
position: absolute;
|
|
358
|
-
right: 8px;
|
|
359
|
-
bottom: 8px;
|
|
360
|
-
font-size: 1.5rem;
|
|
361
|
-
color: var(--text-muted);
|
|
362
|
-
font-weight: 300;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
.locate-btn {
|
|
366
|
-
display: inline-flex;
|
|
367
|
-
align-items: center;
|
|
368
|
-
gap: 6px;
|
|
369
|
-
background: none;
|
|
370
|
-
border: none;
|
|
371
|
-
color: var(--solar-p);
|
|
372
|
-
font-size: 0.8125rem;
|
|
373
|
-
font-weight: 700;
|
|
374
|
-
cursor: pointer;
|
|
375
|
-
padding: 0;
|
|
376
|
-
transition: opacity 0.2s;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
.locate-btn:hover {
|
|
380
|
-
opacity: 0.75;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
.locate-btn.loading {
|
|
384
|
-
opacity: 0.5;
|
|
385
|
-
pointer-events: none;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
.locate-btn svg {
|
|
389
|
-
width: 16px;
|
|
390
|
-
height: 16px;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
.optimal-card {
|
|
394
|
-
background: var(--bg-muted);
|
|
395
|
-
border-radius: 16px;
|
|
396
|
-
padding: 20px;
|
|
397
|
-
border: 1px solid var(--border-color);
|
|
398
|
-
position: relative;
|
|
399
|
-
overflow: hidden;
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
.optimal-card::after {
|
|
403
|
-
content: '';
|
|
404
|
-
position: absolute;
|
|
405
|
-
top: 0;
|
|
406
|
-
right: 0;
|
|
407
|
-
width: 80px;
|
|
408
|
-
height: 80px;
|
|
409
|
-
background: radial-gradient(circle at top right, rgba(249, 115, 22, 0.2), transparent);
|
|
410
|
-
border-radius: 0 0 0 80px;
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
.optimal-label {
|
|
414
|
-
font-size: 0.8125rem;
|
|
415
|
-
color: var(--text-muted);
|
|
416
|
-
font-weight: 500;
|
|
417
|
-
margin: 0 0 4px;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
.optimal-value-row {
|
|
421
|
-
display: flex;
|
|
422
|
-
align-items: baseline;
|
|
423
|
-
gap: 4px;
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
.optimal-value {
|
|
427
|
-
font-size: 3.5rem;
|
|
428
|
-
font-weight: 900;
|
|
429
|
-
color: var(--text-main);
|
|
430
|
-
line-height: 1;
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
.optimal-deg {
|
|
434
|
-
font-size: 1.5rem;
|
|
435
|
-
font-weight: 700;
|
|
436
|
-
color: var(--solar-p);
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
.efficiency-tag {
|
|
440
|
-
display: flex;
|
|
441
|
-
align-items: center;
|
|
442
|
-
gap: 4px;
|
|
443
|
-
font-size: 0.75rem;
|
|
444
|
-
color: #16a34a;
|
|
445
|
-
font-weight: 600;
|
|
446
|
-
margin: 8px 0 0;
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
.efficiency-tag svg {
|
|
450
|
-
width: 12px;
|
|
451
|
-
height: 12px;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
.season-grid {
|
|
455
|
-
display: grid;
|
|
456
|
-
grid-template-columns: 1fr 1fr;
|
|
457
|
-
gap: 12px;
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
.season-card {
|
|
461
|
-
border-radius: 12px;
|
|
462
|
-
padding: 14px;
|
|
463
|
-
border: 1px solid transparent;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
.season-card.winter {
|
|
467
|
-
background: rgba(59, 130, 246, 0.08);
|
|
468
|
-
border-color: rgba(59, 130, 246, 0.2);
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
.season-card.summer {
|
|
472
|
-
background: rgba(234, 179, 8, 0.08);
|
|
473
|
-
border-color: rgba(234, 179, 8, 0.2);
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
.season-header {
|
|
477
|
-
display: flex;
|
|
478
|
-
align-items: center;
|
|
479
|
-
gap: 6px;
|
|
480
|
-
margin-bottom: 8px;
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
.season-header svg {
|
|
484
|
-
width: 14px;
|
|
485
|
-
height: 14px;
|
|
486
|
-
flex-shrink: 0;
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
.season-card.winter .season-header svg {
|
|
490
|
-
color: var(--solar-winter);
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
.season-card.summer .season-header svg {
|
|
494
|
-
color: var(--solar-summer);
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
.season-name {
|
|
498
|
-
font-size: 0.6875rem;
|
|
499
|
-
font-weight: 800;
|
|
500
|
-
text-transform: uppercase;
|
|
501
|
-
letter-spacing: 0.08em;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
.season-card.winter .season-name {
|
|
505
|
-
color: var(--solar-winter);
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
.season-card.summer .season-name {
|
|
509
|
-
color: var(--solar-summer);
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
.season-value {
|
|
513
|
-
font-size: 1.5rem;
|
|
514
|
-
font-weight: 700;
|
|
515
|
-
color: var(--text-main);
|
|
516
|
-
margin: 0;
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
.hemi-badge {
|
|
520
|
-
display: inline-block;
|
|
521
|
-
padding: 6px 14px;
|
|
522
|
-
background: var(--bg-muted);
|
|
523
|
-
border: 1px solid var(--border-color);
|
|
524
|
-
border-radius: 8px;
|
|
525
|
-
font-size: 0.6875rem;
|
|
526
|
-
font-weight: 700;
|
|
527
|
-
color: var(--text-muted);
|
|
528
|
-
text-transform: uppercase;
|
|
529
|
-
letter-spacing: 0.08em;
|
|
530
|
-
align-self: flex-start;
|
|
531
|
-
}
|
|
532
|
-
</style>
|
|
@@ -1,146 +1,142 @@
|
|
|
1
|
-
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
-
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
-
import type { SolarCalculatorUI } from '../ui';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
'@
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
'@
|
|
61
|
-
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { SolarCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'solar-neigung-rechner';
|
|
7
|
+
const title = 'Solarpanel Neigungsrechner';
|
|
8
|
+
const description =
|
|
9
|
+
'Berechnen Sie den optimalen Neigungswinkel für Ihre Solarmodule basierend auf Ihrem Breitengrad. Für feste Installationen und saisonale Anpassungen.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'Was passiert, wenn mein Dach nicht die perfekte Neigung hat?',
|
|
14
|
+
answer:
|
|
15
|
+
'Das ist kein großes Problem. Verluste durch Abweichungen von 5-10° liegen bei weniger als 3 % der Jahresproduktion. Es ist wichtiger, Schatten zu vermeiden, als den exakten Winkel zu jagen.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Ist der optimale Winkel überall auf der Welt gleich?',
|
|
19
|
+
answer:
|
|
20
|
+
'Nein. Er hängt direkt von Ihrem Breitengrad ab. In Madrid (~40°N) ist der Winkel anders als in Oslo (~60°N) oder Sydney (~34°S).',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'In welche Richtung sollten die Paneele zeigen?',
|
|
24
|
+
answer:
|
|
25
|
+
'Auf der Nordhalbkugel immer nach Süden (Azimut 180°). Auf der Südhalbkugel nach Norden. Eine Ost-West-Ausrichtung kann 15-20 % Verlust gegenüber dem Optimum bedeuten.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Funktioniert das auch für Solarthermie (Warmwasser)?',
|
|
29
|
+
answer:
|
|
30
|
+
'Ja. Die Formeln für die Neigung sind für thermische Kollektoren und Photovoltaik identisch, da beide auf dem gleichen geometrischen Prinzip basieren.',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const howToData = [
|
|
35
|
+
{
|
|
36
|
+
name: 'Breitengrad eingeben',
|
|
37
|
+
text: 'Geben Sie Ihren Breitengrad in Dezimalgrad ein oder nutzen Sie die automatische Standorterkennung.',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'Optimalen Winkel prüfen',
|
|
41
|
+
text: 'Der optimale Ganzjahreswinkel ist der Hauptwert für feste Installationen.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Saisonal anpassen (optional)',
|
|
45
|
+
text: 'Wenn Ihre Halterung verstellbar ist, nutzen Sie die Winter- und Sommerwinkel für maximale Erträge.',
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'FAQPage',
|
|
52
|
+
mainEntity: faqData.map((item) => ({
|
|
53
|
+
'@type': 'Question',
|
|
54
|
+
name: item.question,
|
|
55
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const howToSchema: WithContext<HowTo> = {
|
|
60
|
+
'@context': 'https://schema.org',
|
|
61
|
+
'@type': 'HowTo',
|
|
62
|
+
name: title,
|
|
63
|
+
description,
|
|
64
|
+
step: howToData.map((step) => ({
|
|
65
|
+
'@type': 'HowToStep',
|
|
66
|
+
name: step.name,
|
|
67
|
+
text: step.text,
|
|
68
|
+
})),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
72
|
+
'@context': 'https://schema.org',
|
|
73
|
+
'@type': 'SoftwareApplication',
|
|
74
|
+
name: title,
|
|
75
|
+
description,
|
|
76
|
+
applicationCategory: 'UtilityApplication',
|
|
77
|
+
operatingSystem: 'All',
|
|
78
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
79
|
+
inLanguage: 'de',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const content: ToolLocaleContent<SolarCalculatorUI> = {
|
|
83
|
+
slug,
|
|
84
|
+
title,
|
|
62
85
|
description,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
},
|
|
121
|
-
],
|
|
122
|
-
columns: 1,
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
type: 'summary',
|
|
126
|
-
title: 'Tipps für eine effiziente Installation',
|
|
127
|
-
items: [
|
|
128
|
-
'Der Ganzjahreswinkel ist ideal für feste Montagen.',
|
|
129
|
-
'Abweichungen von ±5° sind vernachlässigbar.',
|
|
130
|
-
'Verschattung vermeiden ist wichtiger als der exakte Winkel.',
|
|
131
|
-
'Auf der Nordhalbkugel nach Süden ausrichten.',
|
|
132
|
-
],
|
|
133
|
-
},
|
|
134
|
-
],
|
|
135
|
-
ui: {
|
|
136
|
-
labelLatitude: 'Geographische Breite',
|
|
137
|
-
btnLocate: 'Meinen Standort finden',
|
|
138
|
-
labelOptimal: 'Optimaler Ganzjahreswinkel',
|
|
139
|
-
labelEfficiency: 'Maximale Effizienz',
|
|
140
|
-
labelWinter: 'Winter',
|
|
141
|
-
labelSummer: 'Sommer',
|
|
142
|
-
hemisphereNorth: 'Nordhalbkugel — Nach SÜDEN ausrichten',
|
|
143
|
-
hemisphereSouth: 'Südhalbkugel — Nach NORDEN ausrichten',
|
|
144
|
-
geoNotAvailable: 'Geolokalisierung wird nicht unterstützt.',
|
|
145
|
-
},
|
|
146
|
-
};
|
|
86
|
+
faq: faqData,
|
|
87
|
+
bibliography,
|
|
88
|
+
howTo: howToData,
|
|
89
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
90
|
+
seo: [
|
|
91
|
+
{
|
|
92
|
+
type: 'title',
|
|
93
|
+
text: 'Die Wissenschaft der Solar-Neigung',
|
|
94
|
+
level: 2,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: 'paragraph',
|
|
98
|
+
html: 'Der Unterschied zwischen einer hohen Stromersparnis und einer suboptimalen Anlage liegt oft im Winkel. Die Sonnenstrahlung ist dynamisch und ändert sich mit der Uhrzeit und Jahreszeit.',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
type: 'stats',
|
|
102
|
+
items: [
|
|
103
|
+
{ value: 'Breite × 0,87', label: 'Faustformel', icon: 'mdi:angle-acute' },
|
|
104
|
+
{ value: '± 15°', label: 'Saisonaler Abgleich', icon: 'mdi:calendar-sync' },
|
|
105
|
+
],
|
|
106
|
+
columns: 2,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
type: 'comparative',
|
|
110
|
+
items: [
|
|
111
|
+
{
|
|
112
|
+
title: 'Das Prinzip der Rechtwinkligkeit',
|
|
113
|
+
description: 'Ein Solarpanel arbeitet am effektivsten, wenn die Sonnenstrahlen im 90°-Winkel auftreffen.',
|
|
114
|
+
icon: 'mdi:solar-panel',
|
|
115
|
+
points: ['Maximiert die Energieausbeute', 'Basis aller Neigungsberechnungen'],
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
columns: 1,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'summary',
|
|
122
|
+
title: 'Tipps für eine effiziente Installation',
|
|
123
|
+
items: [
|
|
124
|
+
'Der Ganzjahreswinkel ist ideal für feste Montagen.',
|
|
125
|
+
'Abweichungen von ±5° sind vernachlässigbar.',
|
|
126
|
+
'Verschattung vermeiden ist wichtiger als der exakte Winkel.',
|
|
127
|
+
'Auf der Nordhalbkugel nach Süden ausrichten.',
|
|
128
|
+
],
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
ui: {
|
|
132
|
+
labelLatitude: 'Geographische Breite',
|
|
133
|
+
btnLocate: 'Meinen Standort finden',
|
|
134
|
+
labelOptimal: 'Optimaler Ganzjahreswinkel',
|
|
135
|
+
labelEfficiency: 'Maximale Effizienz',
|
|
136
|
+
labelWinter: 'Winter',
|
|
137
|
+
labelSummer: 'Sommer',
|
|
138
|
+
hemisphereNorth: 'Nordhalbkugel — Nach SÜDEN ausrichten',
|
|
139
|
+
hemisphereSouth: 'Südhalbkugel — Nach NORDEN ausrichten',
|
|
140
|
+
geoNotAvailable: 'Geolokalisierung wird nicht unterstützt.',
|
|
141
|
+
},
|
|
142
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
3
|
import type { SolarCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
4
5
|
|
|
5
6
|
const slug = 'solar-panel-calculator';
|
|
6
7
|
const title = 'Solar Panel Tilt Angle Calculator';
|
|
@@ -86,14 +87,8 @@ export const content: ToolLocaleContent<SolarCalculatorUI> = {
|
|
|
86
87
|
slug,
|
|
87
88
|
title,
|
|
88
89
|
description,
|
|
89
|
-
faqTitle: 'Frequently Asked Questions',
|
|
90
90
|
faq: faqData,
|
|
91
|
-
|
|
92
|
-
bibliography: [
|
|
93
|
-
{ name: 'NREL PVWatts Calculator', url: 'https://pvwatts.nrel.gov/' },
|
|
94
|
-
{ name: 'PVGIS — European Commission Solar Tool', url: 'https://re.jrc.ec.europa.eu/pvgis/' },
|
|
95
|
-
{ name: 'SEIA — Solar Energy Industry Research Data', url: 'https://www.seia.org/solar-industry-research-data' },
|
|
96
|
-
],
|
|
91
|
+
bibliography,
|
|
97
92
|
howTo: howToData,
|
|
98
93
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
99
94
|
seo: [
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
3
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
4
|
import type { SolarCalculatorUI } from '../ui';
|
|
@@ -86,14 +87,8 @@ export const content: ToolLocaleContent<SolarCalculatorUI> = {
|
|
|
86
87
|
slug,
|
|
87
88
|
title,
|
|
88
89
|
description,
|
|
89
|
-
faqTitle: 'Preguntas Frecuentes',
|
|
90
90
|
faq: faqData,
|
|
91
|
-
|
|
92
|
-
bibliography: [
|
|
93
|
-
{ name: 'NREL PVWatts Calculator', url: 'https://pvwatts.nrel.gov/' },
|
|
94
|
-
{ name: 'PVGIS — European Commission Solar Tool', url: 'https://re.jrc.ec.europa.eu/pvgis/' },
|
|
95
|
-
{ name: 'SEIA — Solar Energy Industry Research Data', url: 'https://www.seia.org/solar-industry-research-data' },
|
|
96
|
-
],
|
|
91
|
+
bibliography,
|
|
97
92
|
howTo: howToData,
|
|
98
93
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
99
94
|
seo: [
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
3
|
import type { SolarCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
4
5
|
|
|
5
6
|
const slug = 'calculateur-solaire';
|
|
6
7
|
const title = "Calculateur d'Inclinaison de Panneaux Solaires";
|
|
@@ -86,14 +87,8 @@ export const content: ToolLocaleContent<SolarCalculatorUI> = {
|
|
|
86
87
|
slug,
|
|
87
88
|
title,
|
|
88
89
|
description,
|
|
89
|
-
faqTitle: 'Questions Fréquentes',
|
|
90
90
|
faq: faqData,
|
|
91
|
-
|
|
92
|
-
bibliography: [
|
|
93
|
-
{ name: 'NREL PVWatts Calculator', url: 'https://pvwatts.nrel.gov/' },
|
|
94
|
-
{ name: 'PVGIS — Outil Solaire de la Commission Européenne', url: 'https://re.jrc.ec.europa.eu/pvgis/' },
|
|
95
|
-
{ name: "SEIA — Données de Recherche sur l'Énergie Solaire", url: 'https://www.seia.org/solar-industry-research-data' },
|
|
96
|
-
],
|
|
91
|
+
bibliography,
|
|
97
92
|
howTo: howToData,
|
|
98
93
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
99
94
|
seo: [
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
3
|
import type { SolarCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
4
5
|
|
|
5
6
|
const slug = 'kalkulator-solar';
|
|
6
7
|
const title = 'Kalkulator Kemiringan Panel Surya';
|
|
@@ -82,13 +83,8 @@ export const content: ToolLocaleContent<SolarCalculatorUI> = {
|
|
|
82
83
|
slug,
|
|
83
84
|
title,
|
|
84
85
|
description,
|
|
85
|
-
faqTitle: 'Pertanyaan Umum',
|
|
86
86
|
faq: faqData,
|
|
87
|
-
|
|
88
|
-
bibliography: [
|
|
89
|
-
{ name: 'NREL PVWatts Calculator', url: 'https://pvwatts.nrel.gov/' },
|
|
90
|
-
{ name: 'PVGIS — European Commission Solar Tool', url: 'https://re.jrc.ec.europa.eu/pvgis/' },
|
|
91
|
-
],
|
|
87
|
+
bibliography,
|
|
92
88
|
howTo: howToData,
|
|
93
89
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
94
90
|
seo: [
|