blue-chestnut-solar-expert 0.0.9 → 0.0.12
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/dist/cjs/eraser-icon.house-icon.icon-selector.map-draw.move-icon.octagon-minus-icon.search-icon.solar-expert.solar-system-form.entry.cjs.js.map +1 -1
- package/dist/cjs/eraser-icon_9.cjs.entry.js +388 -15110
- package/dist/cjs/eraser-icon_9.cjs.entry.js.map +1 -1
- package/dist/cjs/{index-BFx4q5Ui.js → index-GZ-kuJi4.js} +8 -28
- package/dist/{esm/index-D0YnIAAN.js.map → cjs/index-GZ-kuJi4.js.map} +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/loading-widget.cjs.entry.js +20 -0
- package/dist/cjs/loading-widget.cjs.entry.js.map +1 -0
- package/dist/cjs/loading-widget.entry.cjs.js.map +1 -0
- package/dist/cjs/solar-calculator.cjs.entry.js +3 -3
- package/dist/cjs/solar-calculator.cjs.entry.js.map +1 -1
- package/dist/cjs/solar-calculator.entry.cjs.js.map +1 -1
- package/dist/cjs/stencil-library.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +2 -1
- package/dist/collection/components/icons/eraser.js +26 -1
- package/dist/collection/components/icons/eraser.js.map +1 -1
- package/dist/collection/components/icons/house.js +26 -1
- package/dist/collection/components/icons/house.js.map +1 -1
- package/dist/collection/components/icons/icon.js +27 -6
- package/dist/collection/components/icons/icon.js.map +1 -1
- package/dist/collection/components/icons/move.js +26 -1
- package/dist/collection/components/icons/move.js.map +1 -1
- package/dist/collection/components/icons/octagonMinus.js +26 -1
- package/dist/collection/components/icons/octagonMinus.js.map +1 -1
- package/dist/collection/components/icons/search.js +26 -1
- package/dist/collection/components/icons/search.js.map +1 -1
- package/dist/collection/components/map-draw/map-draw.js +133 -31
- package/dist/collection/components/map-draw/map-draw.js.map +1 -1
- package/dist/collection/components/solar-calculator/solar-calculator.js +1 -1
- package/dist/collection/components/solar-expert/solar-expert.js +3 -3
- package/dist/collection/components/solar-expert/solar-expert.js.map +1 -1
- package/dist/collection/components/solar-system-form/solar-system-form.js +86 -84
- package/dist/collection/components/solar-system-form/solar-system-form.js.map +1 -1
- package/dist/collection/components/widgets/loading-widget.js +18 -0
- package/dist/collection/components/widgets/loading-widget.js.map +1 -0
- package/dist/collection/output.css +284 -0
- package/dist/collection/utils/geometry/gridMatch.js +0 -1
- package/dist/collection/utils/geometry/gridMatch.js.map +1 -1
- package/dist/collection/utils/lang/english.js +1 -1
- package/dist/collection/utils/lang/english.js.map +1 -1
- package/dist/collection/utils/lang/german.js +3 -3
- package/dist/collection/utils/lang/german.js.map +1 -1
- package/dist/collection/utils/lang/spanish.js +1 -1
- package/dist/collection/utils/lang/spanish.js.map +1 -1
- package/dist/components/eraser-icon.js +1 -1
- package/dist/components/house-icon.js +1 -1
- package/dist/components/icon-selector.js +1 -1
- package/dist/components/index.js +7 -22
- package/dist/components/index.js.map +1 -1
- package/dist/components/loading-widget.d.ts +11 -0
- package/dist/components/loading-widget.js +36 -0
- package/dist/components/loading-widget.js.map +1 -0
- package/dist/components/map-draw.js +1 -1
- package/dist/components/move-icon.js +1 -1
- package/dist/components/octagon-minus-icon.js +1 -1
- package/dist/components/p-BGspvo5S.js +36 -0
- package/dist/components/p-BGspvo5S.js.map +1 -0
- package/dist/components/p-C46bD4Bg.js +36 -0
- package/dist/components/p-C46bD4Bg.js.map +1 -0
- package/dist/components/p-CB8h41UZ.js +36 -0
- package/dist/components/p-CB8h41UZ.js.map +1 -0
- package/dist/components/p-CHsmfSJD.js +36 -0
- package/dist/components/p-CHsmfSJD.js.map +1 -0
- package/dist/components/p-Cg3h6HF4.js +83 -0
- package/dist/components/p-Cg3h6HF4.js.map +1 -0
- package/dist/components/p-D6cs3r7j.js +621 -0
- package/dist/components/p-D6cs3r7j.js.map +1 -0
- package/dist/components/{p-CtPeF0hC.js → p-DEfwuR25.js} +143 -42
- package/dist/components/p-DEfwuR25.js.map +1 -0
- package/dist/components/p-DP1y5q1K.js +36 -0
- package/dist/components/p-DP1y5q1K.js.map +1 -0
- package/dist/components/search-icon.js +1 -1
- package/dist/components/solar-calculator.js +2 -2
- package/dist/components/solar-calculator.js.map +1 -1
- package/dist/components/solar-expert.js +12 -12
- package/dist/components/solar-expert.js.map +1 -1
- package/dist/components/solar-system-form.js +1 -1
- package/dist/esm/eraser-icon.house-icon.icon-selector.map-draw.move-icon.octagon-minus-icon.search-icon.solar-expert.solar-system-form.entry.js.map +1 -1
- package/dist/esm/eraser-icon_9.entry.js +370 -15092
- package/dist/esm/eraser-icon_9.entry.js.map +1 -1
- package/dist/esm/{index-D0YnIAAN.js → index-CnQR_-WL.js} +8 -28
- package/dist/{cjs/index-BFx4q5Ui.js.map → esm/index-CnQR_-WL.js.map} +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/loading-widget.entry.js +18 -0
- package/dist/esm/loading-widget.entry.js.map +1 -0
- package/dist/esm/solar-calculator.entry.js +3 -3
- package/dist/esm/solar-calculator.entry.js.map +1 -1
- package/dist/esm/stencil-library.js +3 -3
- package/dist/stencil-library/eraser-icon.house-icon.icon-selector.map-draw.move-icon.octagon-minus-icon.search-icon.solar-expert.solar-system-form.entry.esm.js.map +1 -1
- package/dist/stencil-library/loading-widget.entry.esm.js.map +1 -0
- package/dist/stencil-library/p-25e04c7a.entry.js +2 -0
- package/dist/stencil-library/p-25e04c7a.entry.js.map +1 -0
- package/dist/stencil-library/p-642b4ce9.entry.js +32 -0
- package/dist/stencil-library/{p-ded21f18.entry.js.map → p-642b4ce9.entry.js.map} +1 -1
- package/dist/stencil-library/p-CnQR_-WL.js +3 -0
- package/dist/stencil-library/{p-D0YnIAAN.js.map → p-CnQR_-WL.js.map} +1 -1
- package/dist/stencil-library/p-a8d15c85.entry.js +2 -0
- package/dist/stencil-library/p-a8d15c85.entry.js.map +1 -0
- package/dist/stencil-library/solar-calculator.entry.esm.js.map +1 -1
- package/dist/stencil-library/stencil-library.esm.js +1 -1
- package/dist/types/components/icons/eraser.d.ts +1 -0
- package/dist/types/components/icons/house.d.ts +1 -0
- package/dist/types/components/icons/icon.d.ts +1 -0
- package/dist/types/components/icons/move.d.ts +1 -0
- package/dist/types/components/icons/octagonMinus.d.ts +1 -0
- package/dist/types/components/icons/search.d.ts +1 -0
- package/dist/types/components/map-draw/map-draw.d.ts +2 -0
- package/dist/types/components/solar-system-form/solar-system-form.d.ts +3 -2
- package/dist/types/components/widgets/loading-widget.d.ts +3 -0
- package/dist/types/components.d.ts +25 -0
- package/package.json +1 -1
- package/dist/components/p-BL_DlPdu.js +0 -33
- package/dist/components/p-BL_DlPdu.js.map +0 -1
- package/dist/components/p-BcT1n-3A.js +0 -15447
- package/dist/components/p-BcT1n-3A.js.map +0 -1
- package/dist/components/p-CC3tp0bK.js +0 -33
- package/dist/components/p-CC3tp0bK.js.map +0 -1
- package/dist/components/p-CtPeF0hC.js.map +0 -1
- package/dist/components/p-D064AshY.js +0 -33
- package/dist/components/p-D064AshY.js.map +0 -1
- package/dist/components/p-DQwOnYzQ.js +0 -33
- package/dist/components/p-DQwOnYzQ.js.map +0 -1
- package/dist/components/p-DbEU_5GR.js +0 -33
- package/dist/components/p-DbEU_5GR.js.map +0 -1
- package/dist/components/p-Dv86mKXd.js +0 -81
- package/dist/components/p-Dv86mKXd.js.map +0 -1
- package/dist/stencil-library/p-7512b392.entry.js +0 -20
- package/dist/stencil-library/p-7512b392.entry.js.map +0 -1
- package/dist/stencil-library/p-D0YnIAAN.js +0 -3
- package/dist/stencil-library/p-ded21f18.entry.js +0 -32
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
--color-red-500: oklch(63.7% 0.237 25.331);
|
|
11
11
|
--color-green-600: oklch(62.7% 0.194 149.214);
|
|
12
12
|
--color-blue-500: oklch(62.3% 0.214 259.815);
|
|
13
|
+
--color-purple-500: oklch(62.7% 0.265 303.9);
|
|
13
14
|
--color-gray-50: oklch(98.5% 0.002 247.839);
|
|
14
15
|
--color-gray-200: oklch(92.8% 0.006 264.531);
|
|
15
16
|
--color-gray-300: oklch(87.2% 0.01 258.338);
|
|
@@ -18,8 +19,10 @@
|
|
|
18
19
|
--color-gray-600: oklch(44.6% 0.03 256.802);
|
|
19
20
|
--color-gray-700: oklch(37.3% 0.034 259.733);
|
|
20
21
|
--color-gray-800: oklch(27.8% 0.033 256.848);
|
|
22
|
+
--color-black: #000;
|
|
21
23
|
--color-white: #fff;
|
|
22
24
|
--spacing: 0.25rem;
|
|
25
|
+
--container-xl: 36rem;
|
|
23
26
|
--container-2xl: 42rem;
|
|
24
27
|
--container-3xl: 48rem;
|
|
25
28
|
--text-sm: 0.875rem;
|
|
@@ -202,6 +205,9 @@
|
|
|
202
205
|
.relative {
|
|
203
206
|
position: relative;
|
|
204
207
|
}
|
|
208
|
+
.inset-0 {
|
|
209
|
+
inset: calc(var(--spacing) * 0);
|
|
210
|
+
}
|
|
205
211
|
.top-0 {
|
|
206
212
|
top: calc(var(--spacing) * 0);
|
|
207
213
|
}
|
|
@@ -235,6 +241,24 @@
|
|
|
235
241
|
.z-20 {
|
|
236
242
|
z-index: 20;
|
|
237
243
|
}
|
|
244
|
+
.container {
|
|
245
|
+
width: 100%;
|
|
246
|
+
@media (width >= 40rem) {
|
|
247
|
+
max-width: 40rem;
|
|
248
|
+
}
|
|
249
|
+
@media (width >= 48rem) {
|
|
250
|
+
max-width: 48rem;
|
|
251
|
+
}
|
|
252
|
+
@media (width >= 64rem) {
|
|
253
|
+
max-width: 64rem;
|
|
254
|
+
}
|
|
255
|
+
@media (width >= 80rem) {
|
|
256
|
+
max-width: 80rem;
|
|
257
|
+
}
|
|
258
|
+
@media (width >= 96rem) {
|
|
259
|
+
max-width: 96rem;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
238
262
|
.m-auto {
|
|
239
263
|
margin: auto;
|
|
240
264
|
}
|
|
@@ -262,9 +286,21 @@
|
|
|
262
286
|
.grid {
|
|
263
287
|
display: grid;
|
|
264
288
|
}
|
|
289
|
+
.hidden {
|
|
290
|
+
display: none;
|
|
291
|
+
}
|
|
292
|
+
.inline {
|
|
293
|
+
display: inline;
|
|
294
|
+
}
|
|
295
|
+
.inline-block {
|
|
296
|
+
display: inline-block;
|
|
297
|
+
}
|
|
265
298
|
.table {
|
|
266
299
|
display: table;
|
|
267
300
|
}
|
|
301
|
+
.h-4 {
|
|
302
|
+
height: calc(var(--spacing) * 4);
|
|
303
|
+
}
|
|
268
304
|
.h-5 {
|
|
269
305
|
height: calc(var(--spacing) * 5);
|
|
270
306
|
}
|
|
@@ -277,12 +313,18 @@
|
|
|
277
313
|
.h-full {
|
|
278
314
|
height: 100%;
|
|
279
315
|
}
|
|
316
|
+
.w-4 {
|
|
317
|
+
width: calc(var(--spacing) * 4);
|
|
318
|
+
}
|
|
280
319
|
.w-5 {
|
|
281
320
|
width: calc(var(--spacing) * 5);
|
|
282
321
|
}
|
|
283
322
|
.w-16 {
|
|
284
323
|
width: calc(var(--spacing) * 16);
|
|
285
324
|
}
|
|
325
|
+
.w-20 {
|
|
326
|
+
width: calc(var(--spacing) * 20);
|
|
327
|
+
}
|
|
286
328
|
.w-52 {
|
|
287
329
|
width: calc(var(--spacing) * 52);
|
|
288
330
|
}
|
|
@@ -295,6 +337,12 @@
|
|
|
295
337
|
.max-w-2xl {
|
|
296
338
|
max-width: var(--container-2xl);
|
|
297
339
|
}
|
|
340
|
+
.max-w-3xl {
|
|
341
|
+
max-width: var(--container-3xl);
|
|
342
|
+
}
|
|
343
|
+
.max-w-xl {
|
|
344
|
+
max-width: var(--container-xl);
|
|
345
|
+
}
|
|
298
346
|
.flex-1 {
|
|
299
347
|
flex: 1;
|
|
300
348
|
}
|
|
@@ -329,15 +377,36 @@
|
|
|
329
377
|
.resize {
|
|
330
378
|
resize: both;
|
|
331
379
|
}
|
|
380
|
+
.appearance-none {
|
|
381
|
+
appearance: none;
|
|
382
|
+
}
|
|
383
|
+
.auto-cols-max {
|
|
384
|
+
grid-auto-columns: max-content;
|
|
385
|
+
}
|
|
386
|
+
.grid-flow-col {
|
|
387
|
+
grid-auto-flow: column;
|
|
388
|
+
}
|
|
332
389
|
.grid-cols-2 {
|
|
333
390
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
334
391
|
}
|
|
392
|
+
.grid-cols-4 {
|
|
393
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
394
|
+
}
|
|
395
|
+
.grid-rows-2 {
|
|
396
|
+
grid-template-rows: repeat(2, minmax(0, 1fr));
|
|
397
|
+
}
|
|
335
398
|
.flex-col {
|
|
336
399
|
flex-direction: column;
|
|
337
400
|
}
|
|
338
401
|
.flex-row {
|
|
339
402
|
flex-direction: row;
|
|
340
403
|
}
|
|
404
|
+
.flex-wrap {
|
|
405
|
+
flex-wrap: wrap;
|
|
406
|
+
}
|
|
407
|
+
.place-items-stretch {
|
|
408
|
+
place-items: stretch;
|
|
409
|
+
}
|
|
341
410
|
.items-center {
|
|
342
411
|
align-items: center;
|
|
343
412
|
}
|
|
@@ -353,6 +422,9 @@
|
|
|
353
422
|
.justify-start {
|
|
354
423
|
justify-content: flex-start;
|
|
355
424
|
}
|
|
425
|
+
.gap-0 {
|
|
426
|
+
gap: calc(var(--spacing) * 0);
|
|
427
|
+
}
|
|
356
428
|
.gap-1 {
|
|
357
429
|
gap: calc(var(--spacing) * 1);
|
|
358
430
|
}
|
|
@@ -376,6 +448,9 @@
|
|
|
376
448
|
margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
|
|
377
449
|
}
|
|
378
450
|
}
|
|
451
|
+
.overflow-hidden {
|
|
452
|
+
overflow: hidden;
|
|
453
|
+
}
|
|
379
454
|
.rounded-4xl {
|
|
380
455
|
border-radius: var(--radius-4xl);
|
|
381
456
|
}
|
|
@@ -419,12 +494,30 @@
|
|
|
419
494
|
.bg-\[\#f3ebda\] {
|
|
420
495
|
background-color: #f3ebda;
|
|
421
496
|
}
|
|
497
|
+
.bg-black {
|
|
498
|
+
background-color: var(--color-black);
|
|
499
|
+
}
|
|
500
|
+
.bg-gray-200 {
|
|
501
|
+
background-color: var(--color-gray-200);
|
|
502
|
+
}
|
|
503
|
+
.bg-gray-500 {
|
|
504
|
+
background-color: var(--color-gray-500);
|
|
505
|
+
}
|
|
422
506
|
.bg-gray-800 {
|
|
423
507
|
background-color: var(--color-gray-800);
|
|
424
508
|
}
|
|
509
|
+
.bg-transparent {
|
|
510
|
+
background-color: transparent;
|
|
511
|
+
}
|
|
425
512
|
.bg-white {
|
|
426
513
|
background-color: var(--color-white);
|
|
427
514
|
}
|
|
515
|
+
.object-contain {
|
|
516
|
+
object-fit: contain;
|
|
517
|
+
}
|
|
518
|
+
.p-1 {
|
|
519
|
+
padding: calc(var(--spacing) * 1);
|
|
520
|
+
}
|
|
428
521
|
.p-2 {
|
|
429
522
|
padding: calc(var(--spacing) * 2);
|
|
430
523
|
}
|
|
@@ -455,6 +548,9 @@
|
|
|
455
548
|
.pb-3 {
|
|
456
549
|
padding-bottom: calc(var(--spacing) * 3);
|
|
457
550
|
}
|
|
551
|
+
.pl-2 {
|
|
552
|
+
padding-left: calc(var(--spacing) * 2);
|
|
553
|
+
}
|
|
458
554
|
.pl-10 {
|
|
459
555
|
padding-left: calc(var(--spacing) * 10);
|
|
460
556
|
}
|
|
@@ -513,6 +609,9 @@
|
|
|
513
609
|
.underline {
|
|
514
610
|
text-decoration-line: underline;
|
|
515
611
|
}
|
|
612
|
+
.accent-\[\#271200\] {
|
|
613
|
+
accent-color: #271200;
|
|
614
|
+
}
|
|
516
615
|
.opacity-0 {
|
|
517
616
|
opacity: 0%;
|
|
518
617
|
}
|
|
@@ -552,6 +651,48 @@
|
|
|
552
651
|
}
|
|
553
652
|
}
|
|
554
653
|
}
|
|
654
|
+
.hover\:bg-\[\#ffffff\] {
|
|
655
|
+
&:hover {
|
|
656
|
+
@media (hover: hover) {
|
|
657
|
+
background-color: #ffffff;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
.hover\:bg-gray-50 {
|
|
662
|
+
&:hover {
|
|
663
|
+
@media (hover: hover) {
|
|
664
|
+
background-color: var(--color-gray-50);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
.hover\:bg-gray-200 {
|
|
669
|
+
&:hover {
|
|
670
|
+
@media (hover: hover) {
|
|
671
|
+
background-color: var(--color-gray-200);
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
.hover\:bg-gray-500 {
|
|
676
|
+
&:hover {
|
|
677
|
+
@media (hover: hover) {
|
|
678
|
+
background-color: var(--color-gray-500);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
.hover\:bg-white {
|
|
683
|
+
&:hover {
|
|
684
|
+
@media (hover: hover) {
|
|
685
|
+
background-color: var(--color-white);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
.hover\:text-\[\#271200\] {
|
|
690
|
+
&:hover {
|
|
691
|
+
@media (hover: hover) {
|
|
692
|
+
color: #271200;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
555
696
|
.focus\:border-transparent {
|
|
556
697
|
&:focus {
|
|
557
698
|
border-color: transparent;
|
|
@@ -584,6 +725,149 @@
|
|
|
584
725
|
gap: calc(var(--spacing) * 4);
|
|
585
726
|
}
|
|
586
727
|
}
|
|
728
|
+
.\[\&\:\:-moz-range-thumb\]\:h-4 {
|
|
729
|
+
&::-moz-range-thumb {
|
|
730
|
+
height: calc(var(--spacing) * 4);
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
.\[\&\:\:-moz-range-thumb\]\:w-4 {
|
|
734
|
+
&::-moz-range-thumb {
|
|
735
|
+
width: calc(var(--spacing) * 4);
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
.\[\&\:\:-moz-range-thumb\]\:cursor-pointer {
|
|
739
|
+
&::-moz-range-thumb {
|
|
740
|
+
cursor: pointer;
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
.\[\&\:\:-moz-range-thumb\]\:appearance-none {
|
|
744
|
+
&::-moz-range-thumb {
|
|
745
|
+
appearance: none;
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
.\[\&\:\:-moz-range-thumb\]\:rounded-full {
|
|
749
|
+
&::-moz-range-thumb {
|
|
750
|
+
border-radius: calc(infinity * 1px);
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
.\[\&\:\:-moz-range-thumb\]\:bg-\[\#271200\] {
|
|
754
|
+
&::-moz-range-thumb {
|
|
755
|
+
background-color: #271200;
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
.\[\&\:\:-moz-range-track\]\:h-2 {
|
|
759
|
+
&::-moz-range-track {
|
|
760
|
+
height: calc(var(--spacing) * 2);
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
.\[\&\:\:-moz-range-track\]\:rounded-full {
|
|
764
|
+
&::-moz-range-track {
|
|
765
|
+
border-radius: calc(infinity * 1px);
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
.\[\&\:\:-moz-range-track\]\:bg-gray-200 {
|
|
769
|
+
&::-moz-range-track {
|
|
770
|
+
background-color: var(--color-gray-200);
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
.\[\&\:\:-webkit-slider-runnable-track\]\:h-2 {
|
|
774
|
+
&::-webkit-slider-runnable-track {
|
|
775
|
+
height: calc(var(--spacing) * 2);
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
.\[\&\:\:-webkit-slider-runnable-track\]\:rounded-full {
|
|
779
|
+
&::-webkit-slider-runnable-track {
|
|
780
|
+
border-radius: calc(infinity * 1px);
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
.\[\&\:\:-webkit-slider-runnable-track\]\:bg-black\/25 {
|
|
784
|
+
&::-webkit-slider-runnable-track {
|
|
785
|
+
background-color: color-mix(in srgb, #000 25%, transparent);
|
|
786
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
787
|
+
background-color: color-mix(in oklab, var(--color-black) 25%, transparent);
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
.\[\&\:\:-webkit-slider-runnable-track\]\:bg-gray-200 {
|
|
792
|
+
&::-webkit-slider-runnable-track {
|
|
793
|
+
background-color: var(--color-gray-200);
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
.\[\&\:\:-webkit-slider-runnable-track\]\:bg-white {
|
|
797
|
+
&::-webkit-slider-runnable-track {
|
|
798
|
+
background-color: var(--color-white);
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
.\[\&\:\:-webkit-slider-thumb\]\:h-4 {
|
|
802
|
+
&::-webkit-slider-thumb {
|
|
803
|
+
height: calc(var(--spacing) * 4);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
.\[\&\:\:-webkit-slider-thumb\]\:h-\[5px\] {
|
|
807
|
+
&::-webkit-slider-thumb {
|
|
808
|
+
height: 5px;
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
.\[\&\:\:-webkit-slider-thumb\]\:h-\[10px\] {
|
|
812
|
+
&::-webkit-slider-thumb {
|
|
813
|
+
height: 10px;
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
.\[\&\:\:-webkit-slider-thumb\]\:h-\[50px\] {
|
|
817
|
+
&::-webkit-slider-thumb {
|
|
818
|
+
height: 50px;
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
.\[\&\:\:-webkit-slider-thumb\]\:w-4 {
|
|
822
|
+
&::-webkit-slider-thumb {
|
|
823
|
+
width: calc(var(--spacing) * 4);
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
.\[\&\:\:-webkit-slider-thumb\]\:w-\[5px\] {
|
|
827
|
+
&::-webkit-slider-thumb {
|
|
828
|
+
width: 5px;
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
.\[\&\:\:-webkit-slider-thumb\]\:w-\[10px\] {
|
|
832
|
+
&::-webkit-slider-thumb {
|
|
833
|
+
width: 10px;
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
.\[\&\:\:-webkit-slider-thumb\]\:w-\[50px\] {
|
|
837
|
+
&::-webkit-slider-thumb {
|
|
838
|
+
width: 50px;
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
.\[\&\:\:-webkit-slider-thumb\]\:cursor-pointer {
|
|
842
|
+
&::-webkit-slider-thumb {
|
|
843
|
+
cursor: pointer;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
.\[\&\:\:-webkit-slider-thumb\]\:appearance-none {
|
|
847
|
+
&::-webkit-slider-thumb {
|
|
848
|
+
appearance: none;
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
.\[\&\:\:-webkit-slider-thumb\]\:rounded-full {
|
|
852
|
+
&::-webkit-slider-thumb {
|
|
853
|
+
border-radius: calc(infinity * 1px);
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
.\[\&\:\:-webkit-slider-thumb\]\:bg-\[\#271200\] {
|
|
857
|
+
&::-webkit-slider-thumb {
|
|
858
|
+
background-color: #271200;
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
.\[\&\:\:-webkit-slider-thumb\]\:bg-purple-500 {
|
|
862
|
+
&::-webkit-slider-thumb {
|
|
863
|
+
background-color: var(--color-purple-500);
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
.\[\&\:\:-webkit-slider-thumb\]\:bg-white {
|
|
867
|
+
&::-webkit-slider-thumb {
|
|
868
|
+
background-color: var(--color-white);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
587
871
|
}
|
|
588
872
|
@property --tw-translate-x {
|
|
589
873
|
syntax: "*";
|
|
@@ -140,7 +140,6 @@ export function getOptimalSolarPosition(roof, obstacles, solarPanel, angle) {
|
|
|
140
140
|
minY: minY,
|
|
141
141
|
maxY: maxY
|
|
142
142
|
};
|
|
143
|
-
console.log("solar", solarPanel);
|
|
144
143
|
const horizontalSolarPanel = {
|
|
145
144
|
...solarPanel,
|
|
146
145
|
widthMeters: solarPanel.widthMeters * Math.cos(angle * Math.PI / 180),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridMatch.js","sourceRoot":"","sources":["../../../src/utils/geometry/gridMatch.ts"],"names":[],"mappings":"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","sourcesContent":["import { COLUMN_SPACING, ROW_SPACING } from \"../../constants\";\r\nimport { Point, Polygon } from \"../../types/shapes\";\r\nimport { isPointInPolygon, Line } from \"../render/polygon\";\r\nimport { SolarPanelType } from \"../solar\";\r\nimport { intersects, offsetPolygon, PositionedSolarPanel, projectPoint, projectPolygon } from \"./fitting\";\r\n\r\nexport interface MinMax {\r\n minX: number;\r\n maxX: number;\r\n minY: number;\r\n maxY: number;\r\n}\r\n\r\nexport function generateGrid(minMax: MinMax, solarPanel: SolarPanelType, horizontal: boolean, anker: Point, rowSpacing: number, columnSpacing: number): Array<Array<PositionedSolarPanel>> {\r\n const grid: Array<Array<PositionedSolarPanel>> = [];\r\n const width = horizontal ? solarPanel.heightMeters : solarPanel.widthMeters;\r\n const widthCount = Math.ceil((minMax.maxX - minMax.minX) / width);\r\n const height = horizontal ? solarPanel.widthMeters : solarPanel.heightMeters;\r\n const heightCount = Math.ceil((minMax.maxY - minMax.minY) / height);\r\n\r\n const widthOffset = width / 2;\r\n const heightOffset = height / 2;\r\n\r\n // calculate the starting point based on the anker\r\n const startX = anker.x - (Math.ceil((anker.x - minMax.minX) / width) * width);\r\n const startY = anker.y - (Math.ceil((anker.y - minMax.minY) / height) * height);\r\n\r\n for (let i = 0; i < heightCount; i++) {\r\n const row: Array<PositionedSolarPanel> = [];\r\n for (let j = 0; j < widthCount; j++) {\r\n const x = startX + j * width + j * columnSpacing + widthOffset;\r\n const y = startY + i * height + i * rowSpacing + heightOffset;\r\n const positionedSolarPanel: PositionedSolarPanel = {\r\n panel: solarPanel,\r\n pixelPosition: {\r\n x: x,\r\n y: y\r\n },\r\n horizontal: horizontal\r\n }\r\n row.push(positionedSolarPanel);\r\n }\r\n grid.push(row);\r\n }\r\n return grid;\r\n}\r\n\r\nfunction getSolarPanelLines(positionedSolarPanel: PositionedSolarPanel, horizontal: boolean): Array<Line> {\r\n const width = horizontal ? positionedSolarPanel.panel.heightMeters : positionedSolarPanel.panel.widthMeters;\r\n const height = horizontal ? positionedSolarPanel.panel.widthMeters : positionedSolarPanel.panel.heightMeters;\r\n const p1 = {\r\n x: positionedSolarPanel.pixelPosition.x - width / 2,\r\n y: positionedSolarPanel.pixelPosition.y - height / 2\r\n }\r\n const p2 = {\r\n x: positionedSolarPanel.pixelPosition.x - width / 2,\r\n y: positionedSolarPanel.pixelPosition.y + height / 2\r\n }\r\n const p3 = {\r\n x: positionedSolarPanel.pixelPosition.x + width / 2,\r\n y: positionedSolarPanel.pixelPosition.y + height / 2\r\n }\r\n const p4 = {\r\n x: positionedSolarPanel.pixelPosition.x + width / 2,\r\n y: positionedSolarPanel.pixelPosition.y - height / 2\r\n }\r\n const lines = [\r\n {\r\n start: p1,\r\n end: p2\r\n },\r\n {\r\n start: p2,\r\n end: p3\r\n },\r\n {\r\n start: p3,\r\n end: p4\r\n },\r\n {\r\n start: p4,\r\n end: p1\r\n }\r\n ]\r\n return lines;\r\n}\r\n\r\n\r\nexport function solarPanelInObstacle(positionedSolarPanel: PositionedSolarPanel, obstacle: Polygon, horizontal: boolean): boolean {\r\n const lines = getSolarPanelLines(positionedSolarPanel, horizontal);\r\n if (isPointInPolygon(positionedSolarPanel.pixelPosition, obstacle)) {\r\n return true;\r\n }\r\n for (let i = 0; i < obstacle.points.length; i++) {\r\n const point = obstacle.points[i];\r\n const nextPoint = obstacle.points[(i + 1) % obstacle.points.length];\r\n const border = {\r\n start: point,\r\n end: nextPoint\r\n }\r\n for (const line of lines) {\r\n if (intersects(line, border)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function solarPanelInPolygon(positionedSolarPanel: PositionedSolarPanel, polygon: Polygon, horizontal: boolean): boolean {\r\n const lines = getSolarPanelLines(positionedSolarPanel, horizontal);\r\n\r\n for (let i = 0; i < polygon.points.length; i++) {\r\n const point = polygon.points[i];\r\n const nextPoint = polygon.points[(i + 1) % polygon.points.length];\r\n const border = {\r\n start: point,\r\n end: nextPoint\r\n }\r\n for (const line of lines) {\r\n if (intersects(line, border)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return isPointInPolygon(positionedSolarPanel.pixelPosition, polygon);\r\n}\r\n\r\nexport interface Obstacle {\r\n polygon: Polygon;\r\n boundingBox: {\r\n minX: number;\r\n maxX: number;\r\n minY: number;\r\n maxY: number;\r\n }\r\n}\r\n\r\nexport function isPanelObstructed(positionedSolarPanel: PositionedSolarPanel, obstacles: Obstacle[], horizontal: boolean): boolean {\r\n for (const obstacle of obstacles) {\r\n if (solarPanelInObstacle(positionedSolarPanel, obstacle.polygon, horizontal)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function getSolarPanelsInPolygon(grid: Array<Array<PositionedSolarPanel>>, polygon: Polygon, horizontal: boolean, obstacles: Obstacle[]): Array<Array<PositionedSolarPanel>> {\r\n const solarPanels: Array<Array<PositionedSolarPanel>> = [];\r\n for (const row of grid) {\r\n let newRow: Array<PositionedSolarPanel> = [];\r\n for (const positionedSolarPanel of row) {\r\n const isObstructed = isPanelObstructed(positionedSolarPanel, obstacles, horizontal);\r\n if (solarPanelInPolygon(positionedSolarPanel, polygon, horizontal) && !isObstructed) {\r\n newRow.push(positionedSolarPanel);\r\n }\r\n }\r\n solarPanels.push(newRow);\r\n }\r\n return solarPanels;\r\n}\r\n\r\nexport function getOptimalSolarPosition(roof: Polygon, obstacles: Obstacle[], solarPanel: SolarPanelType, angle: number): Array<Array<PositionedSolarPanel>> {\r\n const minX = Math.min(...roof.points.map(p => p.x));\r\n const maxX = Math.max(...roof.points.map(p => p.x));\r\n const minY = Math.min(...roof.points.map(p => p.y));\r\n const maxY = Math.max(...roof.points.map(p => p.y));\r\n const minMax = {\r\n minX: minX,\r\n maxX: maxX,\r\n minY: minY,\r\n maxY: maxY\r\n } as MinMax;\r\n\r\n console.log(\"solar\", solarPanel)\r\n\r\n const horizontalSolarPanel = {\r\n ...solarPanel,\r\n widthMeters: solarPanel.widthMeters * Math.cos(angle * Math.PI / 180),\r\n heightMeters: solarPanel.heightMeters\r\n } as SolarPanelType;\r\n\r\n const verticalSolarPanel = {\r\n ...solarPanel,\r\n widthMeters: solarPanel.widthMeters,\r\n heightMeters: solarPanel.heightMeters * Math.cos(angle * Math.PI / 180)\r\n } as SolarPanelType;\r\n\r\n let solarPanels: Array<Array<PositionedSolarPanel>> = [];\r\n let numberOfPanels = 0;\r\n for (const point of roof.points) {\r\n for (const horizontal of [false]) { // TODO removed true\r\n const grid = generateGrid(minMax, horizontal ? horizontalSolarPanel : verticalSolarPanel, horizontal, point, ROW_SPACING, COLUMN_SPACING);\r\n const solarPanelsInPolygon = getSolarPanelsInPolygon(grid, roof, horizontal, obstacles);\r\n\r\n const numberOfPanelsInPolygon = solarPanelsInPolygon.reduce((acc, row) => acc + row.length, 0);\r\n if (numberOfPanelsInPolygon > numberOfPanels) {\r\n numberOfPanels = numberOfPanelsInPolygon;\r\n solarPanels = solarPanelsInPolygon;\r\n }\r\n }\r\n break;\r\n }\r\n return solarPanels;\r\n}\r\n\r\nfunction projectObstacles(obstacles: Polygon[], azimuth: number, offset: {x: number, y: number}, inset: number): Array<Obstacle> {\r\n const result: Array<Obstacle> = [];\r\n for (const obstacle of obstacles) {\r\n const offsetObstacle = offsetPolygon(obstacle, offset);\r\n const projectedObstacle = projectPolygon(offsetObstacle.polygon, -azimuth);\r\n const insetObstacle = insetPolygon(projectedObstacle, -inset);\r\n\r\n const minX = Math.min(...insetObstacle.points.map(p => p.x));\r\n const maxX = Math.max(...insetObstacle.points.map(p => p.x));\r\n const minY = Math.min(...insetObstacle.points.map(p => p.y));\r\n const maxY = Math.max(...insetObstacle.points.map(p => p.y));\r\n const boundingBox = {\r\n minX: minX,\r\n maxX: maxX,\r\n minY: minY,\r\n maxY: maxY\r\n } as MinMax;\r\n result.push({\r\n polygon: projectedObstacle,\r\n boundingBox: boundingBox\r\n });\r\n }\r\n return result;\r\n}\r\n\r\nfunction isClockwise(points: Point[]): boolean {\r\n let sum = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n const curr = points[i];\r\n const next = points[(i + 1) % points.length];\r\n sum += (next.x - curr.x) * (next.y + curr.y);\r\n }\r\n return sum > 0;\r\n}\r\n\r\nexport function insetPolygon(polygon: Polygon, inset: number): Polygon {\r\n const points = polygon.points;\r\n const isClockwisePolygon = isClockwise(points);\r\n inset = inset * Math.sqrt(2) * (isClockwisePolygon ? -1 : 1);\r\n const insetPoints: Point[] = [];\r\n \r\n for (let i = 0; i < points.length; i++) {\r\n const prev = points[(i - 1 + points.length) % points.length];\r\n const curr = points[i];\r\n const next = points[(i + 1) % points.length];\r\n \r\n // Calculate vectors for the two edges meeting at current point\r\n const v1 = {\r\n x: curr.x - prev.x,\r\n y: curr.y - prev.y\r\n };\r\n const v2 = {\r\n x: next.x - curr.x,\r\n y: next.y - curr.y\r\n };\r\n \r\n // Calculate perpendicular vectors (90 degrees clockwise)\r\n const perp1 = {\r\n x: -v1.y,\r\n y: v1.x\r\n };\r\n const perp2 = {\r\n x: -v2.y,\r\n y: v2.x\r\n };\r\n \r\n // Normalize the perpendicular vectors\r\n const length1 = Math.sqrt(perp1.x * perp1.x + perp1.y * perp1.y);\r\n const length2 = Math.sqrt(perp2.x * perp2.x + perp2.y * perp2.y);\r\n \r\n perp1.x /= length1;\r\n perp1.y /= length1;\r\n perp2.x /= length2;\r\n perp2.y /= length2;\r\n \r\n // Calculate the bisector vector\r\n const bisector = {\r\n x: perp1.x + perp2.x,\r\n y: perp1.y + perp2.y\r\n };\r\n \r\n // Normalize the bisector\r\n const bisectorLength = Math.sqrt(bisector.x * bisector.x + bisector.y * bisector.y);\r\n bisector.x /= bisectorLength;\r\n bisector.y /= bisectorLength;\r\n \r\n // Calculate the inset point\r\n const insetPoint = {\r\n x: curr.x + bisector.x * inset,\r\n y: curr.y + bisector.y * inset\r\n };\r\n \r\n insetPoints.push(insetPoint);\r\n }\r\n \r\n return {\r\n points: insetPoints,\r\n type: polygon.type,\r\n closed: polygon.closed,\r\n _id: polygon._id,\r\n details: polygon.details\r\n };\r\n}\r\n\r\nexport function getOptimalSolarPositionFully(roof: Polygon, obstacles: Polygon[], solarPanel: SolarPanelType, azimuth: number, inset: number, angle: number): Array<PositionedSolarPanel> {\r\n const insetRoof = insetPolygon(roof, inset);\r\n const offset = offsetPolygon(insetRoof);\r\n const projectedOffset = projectPolygon(offset.polygon, -azimuth);\r\n\r\n const projectedObstacles = projectObstacles(obstacles, azimuth, offset.offset, inset);\r\n\r\n const horizontalSolarPanels = getOptimalSolarPosition(projectedOffset, projectedObstacles, solarPanel, angle);\r\n const unprojectedPanels: Array<PositionedSolarPanel> = [];\r\n\r\n for (const panel of horizontalSolarPanels.flat()) {\r\n const unprojectedPanel = projectPoint(panel.pixelPosition, azimuth);\r\n const offsetPosition = {\r\n x: unprojectedPanel.x + offset.offset.x,\r\n y: unprojectedPanel.y + offset.offset.y\r\n }\r\n unprojectedPanels.push({\r\n panel: panel.panel,\r\n pixelPosition: offsetPosition,\r\n horizontal: panel.horizontal\r\n });\r\n }\r\n return unprojectedPanels;\r\n}"]}
|
|
1
|
+
{"version":3,"file":"gridMatch.js","sourceRoot":"","sources":["../../../src/utils/geometry/gridMatch.ts"],"names":[],"mappings":"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","sourcesContent":["import { COLUMN_SPACING, ROW_SPACING } from \"../../constants\";\r\nimport { Point, Polygon } from \"../../types/shapes\";\r\nimport { isPointInPolygon, Line } from \"../render/polygon\";\r\nimport { SolarPanelType } from \"../solar\";\r\nimport { intersects, offsetPolygon, PositionedSolarPanel, projectPoint, projectPolygon } from \"./fitting\";\r\n\r\nexport interface MinMax {\r\n minX: number;\r\n maxX: number;\r\n minY: number;\r\n maxY: number;\r\n}\r\n\r\nexport function generateGrid(minMax: MinMax, solarPanel: SolarPanelType, horizontal: boolean, anker: Point, rowSpacing: number, columnSpacing: number): Array<Array<PositionedSolarPanel>> {\r\n const grid: Array<Array<PositionedSolarPanel>> = [];\r\n const width = horizontal ? solarPanel.heightMeters : solarPanel.widthMeters;\r\n const widthCount = Math.ceil((minMax.maxX - minMax.minX) / width);\r\n const height = horizontal ? solarPanel.widthMeters : solarPanel.heightMeters;\r\n const heightCount = Math.ceil((minMax.maxY - minMax.minY) / height);\r\n\r\n const widthOffset = width / 2;\r\n const heightOffset = height / 2;\r\n\r\n // calculate the starting point based on the anker\r\n const startX = anker.x - (Math.ceil((anker.x - minMax.minX) / width) * width);\r\n const startY = anker.y - (Math.ceil((anker.y - minMax.minY) / height) * height);\r\n\r\n for (let i = 0; i < heightCount; i++) {\r\n const row: Array<PositionedSolarPanel> = [];\r\n for (let j = 0; j < widthCount; j++) {\r\n const x = startX + j * width + j * columnSpacing + widthOffset;\r\n const y = startY + i * height + i * rowSpacing + heightOffset;\r\n const positionedSolarPanel: PositionedSolarPanel = {\r\n panel: solarPanel,\r\n pixelPosition: {\r\n x: x,\r\n y: y\r\n },\r\n horizontal: horizontal\r\n }\r\n row.push(positionedSolarPanel);\r\n }\r\n grid.push(row);\r\n }\r\n return grid;\r\n}\r\n\r\nfunction getSolarPanelLines(positionedSolarPanel: PositionedSolarPanel, horizontal: boolean): Array<Line> {\r\n const width = horizontal ? positionedSolarPanel.panel.heightMeters : positionedSolarPanel.panel.widthMeters;\r\n const height = horizontal ? positionedSolarPanel.panel.widthMeters : positionedSolarPanel.panel.heightMeters;\r\n const p1 = {\r\n x: positionedSolarPanel.pixelPosition.x - width / 2,\r\n y: positionedSolarPanel.pixelPosition.y - height / 2\r\n }\r\n const p2 = {\r\n x: positionedSolarPanel.pixelPosition.x - width / 2,\r\n y: positionedSolarPanel.pixelPosition.y + height / 2\r\n }\r\n const p3 = {\r\n x: positionedSolarPanel.pixelPosition.x + width / 2,\r\n y: positionedSolarPanel.pixelPosition.y + height / 2\r\n }\r\n const p4 = {\r\n x: positionedSolarPanel.pixelPosition.x + width / 2,\r\n y: positionedSolarPanel.pixelPosition.y - height / 2\r\n }\r\n const lines = [\r\n {\r\n start: p1,\r\n end: p2\r\n },\r\n {\r\n start: p2,\r\n end: p3\r\n },\r\n {\r\n start: p3,\r\n end: p4\r\n },\r\n {\r\n start: p4,\r\n end: p1\r\n }\r\n ]\r\n return lines;\r\n}\r\n\r\n\r\nexport function solarPanelInObstacle(positionedSolarPanel: PositionedSolarPanel, obstacle: Polygon, horizontal: boolean): boolean {\r\n const lines = getSolarPanelLines(positionedSolarPanel, horizontal);\r\n if (isPointInPolygon(positionedSolarPanel.pixelPosition, obstacle)) {\r\n return true;\r\n }\r\n for (let i = 0; i < obstacle.points.length; i++) {\r\n const point = obstacle.points[i];\r\n const nextPoint = obstacle.points[(i + 1) % obstacle.points.length];\r\n const border = {\r\n start: point,\r\n end: nextPoint\r\n }\r\n for (const line of lines) {\r\n if (intersects(line, border)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function solarPanelInPolygon(positionedSolarPanel: PositionedSolarPanel, polygon: Polygon, horizontal: boolean): boolean {\r\n const lines = getSolarPanelLines(positionedSolarPanel, horizontal);\r\n\r\n for (let i = 0; i < polygon.points.length; i++) {\r\n const point = polygon.points[i];\r\n const nextPoint = polygon.points[(i + 1) % polygon.points.length];\r\n const border = {\r\n start: point,\r\n end: nextPoint\r\n }\r\n for (const line of lines) {\r\n if (intersects(line, border)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return isPointInPolygon(positionedSolarPanel.pixelPosition, polygon);\r\n}\r\n\r\nexport interface Obstacle {\r\n polygon: Polygon;\r\n boundingBox: {\r\n minX: number;\r\n maxX: number;\r\n minY: number;\r\n maxY: number;\r\n }\r\n}\r\n\r\nexport function isPanelObstructed(positionedSolarPanel: PositionedSolarPanel, obstacles: Obstacle[], horizontal: boolean): boolean {\r\n for (const obstacle of obstacles) {\r\n if (solarPanelInObstacle(positionedSolarPanel, obstacle.polygon, horizontal)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function getSolarPanelsInPolygon(grid: Array<Array<PositionedSolarPanel>>, polygon: Polygon, horizontal: boolean, obstacles: Obstacle[]): Array<Array<PositionedSolarPanel>> {\r\n const solarPanels: Array<Array<PositionedSolarPanel>> = [];\r\n for (const row of grid) {\r\n let newRow: Array<PositionedSolarPanel> = [];\r\n for (const positionedSolarPanel of row) {\r\n const isObstructed = isPanelObstructed(positionedSolarPanel, obstacles, horizontal);\r\n if (solarPanelInPolygon(positionedSolarPanel, polygon, horizontal) && !isObstructed) {\r\n newRow.push(positionedSolarPanel);\r\n }\r\n }\r\n solarPanels.push(newRow);\r\n }\r\n return solarPanels;\r\n}\r\n\r\nexport function getOptimalSolarPosition(roof: Polygon, obstacles: Obstacle[], solarPanel: SolarPanelType, angle: number): Array<Array<PositionedSolarPanel>> {\r\n const minX = Math.min(...roof.points.map(p => p.x));\r\n const maxX = Math.max(...roof.points.map(p => p.x));\r\n const minY = Math.min(...roof.points.map(p => p.y));\r\n const maxY = Math.max(...roof.points.map(p => p.y));\r\n const minMax = {\r\n minX: minX,\r\n maxX: maxX,\r\n minY: minY,\r\n maxY: maxY\r\n } as MinMax; \r\n\r\n const horizontalSolarPanel = {\r\n ...solarPanel,\r\n widthMeters: solarPanel.widthMeters * Math.cos(angle * Math.PI / 180),\r\n heightMeters: solarPanel.heightMeters\r\n } as SolarPanelType;\r\n\r\n const verticalSolarPanel = {\r\n ...solarPanel,\r\n widthMeters: solarPanel.widthMeters,\r\n heightMeters: solarPanel.heightMeters * Math.cos(angle * Math.PI / 180)\r\n } as SolarPanelType;\r\n\r\n let solarPanels: Array<Array<PositionedSolarPanel>> = [];\r\n let numberOfPanels = 0;\r\n for (const point of roof.points) {\r\n for (const horizontal of [false]) { // TODO removed true\r\n const grid = generateGrid(minMax, horizontal ? horizontalSolarPanel : verticalSolarPanel, horizontal, point, ROW_SPACING, COLUMN_SPACING);\r\n const solarPanelsInPolygon = getSolarPanelsInPolygon(grid, roof, horizontal, obstacles);\r\n\r\n const numberOfPanelsInPolygon = solarPanelsInPolygon.reduce((acc, row) => acc + row.length, 0);\r\n if (numberOfPanelsInPolygon > numberOfPanels) {\r\n numberOfPanels = numberOfPanelsInPolygon;\r\n solarPanels = solarPanelsInPolygon;\r\n }\r\n }\r\n break;\r\n }\r\n return solarPanels;\r\n}\r\n\r\nfunction projectObstacles(obstacles: Polygon[], azimuth: number, offset: {x: number, y: number}, inset: number): Array<Obstacle> {\r\n const result: Array<Obstacle> = [];\r\n for (const obstacle of obstacles) {\r\n const offsetObstacle = offsetPolygon(obstacle, offset);\r\n const projectedObstacle = projectPolygon(offsetObstacle.polygon, -azimuth);\r\n const insetObstacle = insetPolygon(projectedObstacle, -inset);\r\n\r\n const minX = Math.min(...insetObstacle.points.map(p => p.x));\r\n const maxX = Math.max(...insetObstacle.points.map(p => p.x));\r\n const minY = Math.min(...insetObstacle.points.map(p => p.y));\r\n const maxY = Math.max(...insetObstacle.points.map(p => p.y));\r\n const boundingBox = {\r\n minX: minX,\r\n maxX: maxX,\r\n minY: minY,\r\n maxY: maxY\r\n } as MinMax;\r\n result.push({\r\n polygon: projectedObstacle,\r\n boundingBox: boundingBox\r\n });\r\n }\r\n return result;\r\n}\r\n\r\nfunction isClockwise(points: Point[]): boolean {\r\n let sum = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n const curr = points[i];\r\n const next = points[(i + 1) % points.length];\r\n sum += (next.x - curr.x) * (next.y + curr.y);\r\n }\r\n return sum > 0;\r\n}\r\n\r\nexport function insetPolygon(polygon: Polygon, inset: number): Polygon {\r\n const points = polygon.points;\r\n const isClockwisePolygon = isClockwise(points);\r\n inset = inset * Math.sqrt(2) * (isClockwisePolygon ? -1 : 1);\r\n const insetPoints: Point[] = [];\r\n \r\n for (let i = 0; i < points.length; i++) {\r\n const prev = points[(i - 1 + points.length) % points.length];\r\n const curr = points[i];\r\n const next = points[(i + 1) % points.length];\r\n \r\n // Calculate vectors for the two edges meeting at current point\r\n const v1 = {\r\n x: curr.x - prev.x,\r\n y: curr.y - prev.y\r\n };\r\n const v2 = {\r\n x: next.x - curr.x,\r\n y: next.y - curr.y\r\n };\r\n \r\n // Calculate perpendicular vectors (90 degrees clockwise)\r\n const perp1 = {\r\n x: -v1.y,\r\n y: v1.x\r\n };\r\n const perp2 = {\r\n x: -v2.y,\r\n y: v2.x\r\n };\r\n \r\n // Normalize the perpendicular vectors\r\n const length1 = Math.sqrt(perp1.x * perp1.x + perp1.y * perp1.y);\r\n const length2 = Math.sqrt(perp2.x * perp2.x + perp2.y * perp2.y);\r\n \r\n perp1.x /= length1;\r\n perp1.y /= length1;\r\n perp2.x /= length2;\r\n perp2.y /= length2;\r\n \r\n // Calculate the bisector vector\r\n const bisector = {\r\n x: perp1.x + perp2.x,\r\n y: perp1.y + perp2.y\r\n };\r\n \r\n // Normalize the bisector\r\n const bisectorLength = Math.sqrt(bisector.x * bisector.x + bisector.y * bisector.y);\r\n bisector.x /= bisectorLength;\r\n bisector.y /= bisectorLength;\r\n \r\n // Calculate the inset point\r\n const insetPoint = {\r\n x: curr.x + bisector.x * inset,\r\n y: curr.y + bisector.y * inset\r\n };\r\n \r\n insetPoints.push(insetPoint);\r\n }\r\n \r\n return {\r\n points: insetPoints,\r\n type: polygon.type,\r\n closed: polygon.closed,\r\n _id: polygon._id,\r\n details: polygon.details\r\n };\r\n}\r\n\r\nexport function getOptimalSolarPositionFully(roof: Polygon, obstacles: Polygon[], solarPanel: SolarPanelType, azimuth: number, inset: number, angle: number): Array<PositionedSolarPanel> {\r\n const insetRoof = insetPolygon(roof, inset);\r\n const offset = offsetPolygon(insetRoof);\r\n const projectedOffset = projectPolygon(offset.polygon, -azimuth);\r\n\r\n const projectedObstacles = projectObstacles(obstacles, azimuth, offset.offset, inset);\r\n\r\n const horizontalSolarPanels = getOptimalSolarPosition(projectedOffset, projectedObstacles, solarPanel, angle);\r\n const unprojectedPanels: Array<PositionedSolarPanel> = [];\r\n\r\n for (const panel of horizontalSolarPanels.flat()) {\r\n const unprojectedPanel = projectPoint(panel.pixelPosition, azimuth);\r\n const offsetPosition = {\r\n x: unprojectedPanel.x + offset.offset.x,\r\n y: unprojectedPanel.y + offset.offset.y\r\n }\r\n unprojectedPanels.push({\r\n panel: panel.panel,\r\n pixelPosition: offsetPosition,\r\n horizontal: panel.horizontal\r\n });\r\n }\r\n return unprojectedPanels;\r\n}"]}
|
|
@@ -10,7 +10,7 @@ export const en = {
|
|
|
10
10
|
totalSystemPeakPower: "Total System Peak Power (kW)",
|
|
11
11
|
electricityPrice: "Electricity Price (€/kWh)",
|
|
12
12
|
compensationRate: "Compensation Rate (€/kWh)",
|
|
13
|
-
autonomy: "Autonomy
|
|
13
|
+
autonomy: "Autonomy",
|
|
14
14
|
costSavings: "Cost Savings (€/year)",
|
|
15
15
|
householdConsumptionTitle: "Household Electricity Consumption",
|
|
16
16
|
consumptionProfileTitle: "Consumption Profile",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"english.js","sourceRoot":"","sources":["../../../src/utils/lang/english.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAoB;IAC/B,WAAW,EAAE;QACT,iBAAiB,EAAE,uBAAuB;KAC7C;IACD,eAAe,EAAE;QACb,KAAK,EAAE,4BAA4B;QACnC,iBAAiB,EAAE,oBAAoB;QACvC,cAAc,EAAE,wBAAwB;QACxC,cAAc,EAAE,uBAAuB;QACvC,oBAAoB,EAAE,8BAA8B;QACpD,gBAAgB,EAAE,2BAA2B;QAC7C,gBAAgB,EAAE,2BAA2B;QAC7C,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"english.js","sourceRoot":"","sources":["../../../src/utils/lang/english.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAoB;IAC/B,WAAW,EAAE;QACT,iBAAiB,EAAE,uBAAuB;KAC7C;IACD,eAAe,EAAE;QACb,KAAK,EAAE,4BAA4B;QACnC,iBAAiB,EAAE,oBAAoB;QACvC,cAAc,EAAE,wBAAwB;QACxC,cAAc,EAAE,uBAAuB;QACvC,oBAAoB,EAAE,8BAA8B;QACpD,gBAAgB,EAAE,2BAA2B;QAC7C,gBAAgB,EAAE,2BAA2B;QAC7C,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,uBAAuB;QACpC,yBAAyB,EAAE,mCAAmC;QAC9D,uBAAuB,EAAE,qBAAqB;QAC9C,qBAAqB,EAAE,mBAAmB;QAC1C,qBAAqB,EAAE,mBAAmB;QAC1C,YAAY,EAAE,SAAS;QACvB,iBAAiB,EAAE,8EAA8E;QACjG,iBAAiB,EAAE,0BAA0B;QAC7C,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,wBAAwB;QACnC,UAAU,EAAE,oCAAoC;QAChD,mBAAmB,EAAE;YACjB,YAAY,EAAE,gBAAgB;YAC9B,UAAU,EAAE,aAAa;SAC5B;QACD,KAAK,EAAE;YACH,WAAW,EAAE,aAAa;YAC1B,UAAU,EAAE,YAAY;YACxB,kBAAkB,EAAE,qBAAqB;YACzC,mBAAmB,EAAE,sBAAsB;YAC3C,SAAS,EAAE,aAAa;SAC3B;QACD,eAAe,EAAE,oCAAoC;QACrD,YAAY,EAAE,eAAe;QAC7B,kBAAkB,EAAE,eAAe;QACnC,IAAI,EAAE,MAAM;KACf;IACD,OAAO,EAAE;QACL,iBAAiB,EAAE,qBAAqB;QACxC,iBAAiB,EAAE,0BAA0B;QAC7C,WAAW,EAAE,aAAa;QAC1B,oBAAoB,EAAE,wBAAwB;QAC9C,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,OAAO;QACd,KAAK,EAAE;YACH,IAAI,EAAE;gBACF,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,+BAA+B;gBAC5C,SAAS,EAAE,MAAM;aACpB;YACD,WAAW,EAAE;gBACT,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,sCAAsC;gBACnD,SAAS,EAAE,aAAa;aAC3B;YACD,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6BAA6B;gBAC1C,SAAS,EAAE,QAAQ;aACtB;YACD,IAAI,EAAE;gBACF,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,2BAA2B;gBACxC,SAAS,EAAE,MAAM;aACpB;SACJ;KACJ;CACJ,CAAA","sourcesContent":["import { LanguageStrings } from \"../../types/lang\";\r\n\r\nexport const en: LanguageStrings = {\r\n solarExpert: {\r\n searchPlaceholder: \"Search for a location\"\r\n },\r\n solarSystemForm: {\r\n title: \"Solar System Configuration\",\r\n systemInformation: \"System Information\",\r\n numberOfPanels: \"Number of Solar Panels\",\r\n panelPeakPower: \"Panel Peak Power (kW)\",\r\n totalSystemPeakPower: \"Total System Peak Power (kW)\",\r\n electricityPrice: \"Electricity Price (€/kWh)\",\r\n compensationRate: \"Compensation Rate (€/kWh)\",\r\n autonomy: \"Autonomy\",\r\n costSavings: \"Cost Savings (€/year)\",\r\n householdConsumptionTitle: \"Household Electricity Consumption\",\r\n consumptionProfileTitle: \"Consumption Profile\",\r\n electricityCostsTitle: \"Electricity Costs\",\r\n compensationRateTitle: \"Compensation Rate\",\r\n resultsTitle: \"Results\",\r\n savingsDisclaimer: \"Disclaimer: The savings are based on the average electricity price in Spain.\",\r\n annualConsumption: \"Annual Consumption (kWh)\",\r\n name: \"Name\",\r\n email: \"Email\",\r\n nameError: \"Please enter your name\",\r\n emailError: \"Please enter a valid email address\",\r\n consumptionProfiles: {\r\n mostlyAtHome: \"Mostly at home\",\r\n mostlyAway: \"Mostly away\",\r\n },\r\n chart: {\r\n consumption: \"Consumption\",\r\n production: \"Production\",\r\n consumptionProfile: \"Consumption Profile\",\r\n relativeConsumption: \"Relative Consumption\",\r\n hourOfDay: \"Hour of Day\",\r\n },\r\n validEmailError: \"Please enter a valid email address\",\r\n requestOffer: \"Request Offer\",\r\n requestOfferButton: \"Request Offer\",\r\n year: \"year\",\r\n },\r\n mapDraw: {\r\n noPolygonSelected: \"No polygon selected\",\r\n noAddressSelected: \"Please select an address\",\r\n information: \"Information\",\r\n calculateSolarPanels: \"Calculate Solar Panels\",\r\n panels: \"Panels\",\r\n area: \"Area\",\r\n azimuth: \"Azimuth\",\r\n pitch: \"Pitch\",\r\n tools: {\r\n roof: {\r\n name: \"Roof\",\r\n explanation: \"Draw the roof of the building\",\r\n ariaLabel: \"Roof\",\r\n },\r\n obstruction: {\r\n name: \"Obstruction\",\r\n explanation: \"Draw the obstruction of the building\",\r\n ariaLabel: \"Obstruction\",\r\n },\r\n delete: {\r\n name: \"Delete\",\r\n explanation: \"Delete the selected polygon\",\r\n ariaLabel: \"Delete\",\r\n },\r\n move: {\r\n name: \"Move\",\r\n explanation: \"Move the selected polygon\",\r\n ariaLabel: \"Move\",\r\n },\r\n },\r\n }\r\n}"]}
|
|
@@ -6,11 +6,11 @@ export const de = {
|
|
|
6
6
|
title: "Solarsystem Konfiguration",
|
|
7
7
|
systemInformation: "System Information",
|
|
8
8
|
numberOfPanels: "Anzahl der Solarpanel",
|
|
9
|
-
panelPeakPower: "
|
|
10
|
-
totalSystemPeakPower: "
|
|
9
|
+
panelPeakPower: "Panelleistung (kW)",
|
|
10
|
+
totalSystemPeakPower: "Maximale Anlagengröße (kWp)",
|
|
11
11
|
electricityPrice: "Strompreis (€/kWh)",
|
|
12
12
|
compensationRate: "Einspeisevergütung (€/kWh)",
|
|
13
|
-
autonomy: "Autonomie
|
|
13
|
+
autonomy: "Autonomie",
|
|
14
14
|
costSavings: "Einsparungen (€/Jahr)",
|
|
15
15
|
householdConsumptionTitle: "Haushaltsverbrauch",
|
|
16
16
|
consumptionProfileTitle: "Verbrauchprofil",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"german.js","sourceRoot":"","sources":["../../../src/utils/lang/german.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAoB;IAC/B,WAAW,EAAE;QACT,iBAAiB,EAAE,0BAA0B;KAChD;IACD,eAAe,EAAE;QACb,KAAK,EAAE,2BAA2B;QAClC,iBAAiB,EAAE,oBAAoB;QACvC,cAAc,EAAE,uBAAuB;QACvC,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"german.js","sourceRoot":"","sources":["../../../src/utils/lang/german.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAoB;IAC/B,WAAW,EAAE;QACT,iBAAiB,EAAE,0BAA0B;KAChD;IACD,eAAe,EAAE;QACb,KAAK,EAAE,2BAA2B;QAClC,iBAAiB,EAAE,oBAAoB;QACvC,cAAc,EAAE,uBAAuB;QACvC,cAAc,EAAE,oBAAoB;QACpC,oBAAoB,EAAE,6BAA6B;QACnD,gBAAgB,EAAE,oBAAoB;QACtC,gBAAgB,EAAE,4BAA4B;QAC9C,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,uBAAuB;QACpC,yBAAyB,EAAE,oBAAoB;QAC/C,uBAAuB,EAAE,iBAAiB;QAC1C,qBAAqB,EAAE,aAAa;QACpC,qBAAqB,EAAE,oBAAoB;QAC3C,YAAY,EAAE,YAAY;QAC1B,iBAAiB,EAAE,yFAAyF;QAC5G,iBAAiB,EAAE,4BAA4B;QAC/C,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,iCAAiC;QAC5C,UAAU,EAAE,iDAAiD;QAC7D,mBAAmB,EAAE;YACjB,YAAY,EAAE,wBAAwB;YACtC,UAAU,EAAE,cAAc;SAC7B;QACD,KAAK,EAAE;YACH,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,YAAY;YACxB,kBAAkB,EAAE,iBAAiB;YACrC,mBAAmB,EAAE,WAAW;YAChC,SAAS,EAAE,kBAAkB;SAChC;QACD,eAAe,EAAE,iDAAiD;QAClE,YAAY,EAAE,mBAAmB;QACjC,kBAAkB,EAAE,mBAAmB;QACvC,IAAI,EAAE,MAAM;KACf;IACD,OAAO,EAAE;QACL,iBAAiB,EAAE,yBAAyB;QAC5C,iBAAiB,EAAE,+BAA+B;QAClD,WAAW,EAAE,aAAa;QAC1B,oBAAoB,EAAE,+BAA+B;QACrD,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,aAAa;QACtB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE;YACH,IAAI,EAAE;gBACF,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,oCAAoC;gBACjD,SAAS,EAAE,MAAM;aACpB;YACD,WAAW,EAAE;gBACT,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,yCAAyC;gBACtD,SAAS,EAAE,WAAW;aACzB;YACD,MAAM,EAAE;gBACJ,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,qCAAqC;gBAClD,SAAS,EAAE,SAAS;aACvB;YACD,IAAI,EAAE;gBACF,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,kDAAkD;gBAC/D,SAAS,EAAE,aAAa;aAC3B;SACJ;KACJ;CACJ,CAAA","sourcesContent":["import { LanguageStrings } from \"../../types/lang\";\r\n\r\nexport const de: LanguageStrings = {\r\n solarExpert: {\r\n searchPlaceholder: \"Suche nach einer Adresse\"\r\n },\r\n solarSystemForm: {\r\n title: \"Solarsystem Konfiguration\",\r\n systemInformation: \"System Information\",\r\n numberOfPanels: \"Anzahl der Solarpanel\",\r\n panelPeakPower: \"Panelleistung (kW)\",\r\n totalSystemPeakPower: \"Maximale Anlagengröße (kWp)\",\r\n electricityPrice: \"Strompreis (€/kWh)\",\r\n compensationRate: \"Einspeisevergütung (€/kWh)\",\r\n autonomy: \"Autonomie\",\r\n costSavings: \"Einsparungen (€/Jahr)\",\r\n householdConsumptionTitle: \"Haushaltsverbrauch\",\r\n consumptionProfileTitle: \"Verbrauchprofil\",\r\n electricityCostsTitle: \"Stromkosten\",\r\n compensationRateTitle: \"Einspeisevergütung\",\r\n resultsTitle: \"Ergebnisse\",\r\n savingsDisclaimer: \"Disclaimer: Die Einsparungen basieren auf dem durchschnittlichen Strompreis in Spanien.\",\r\n annualConsumption: \"Jährlicher Verbrauch (kWh)\",\r\n name: \"Name\",\r\n email: \"Email\",\r\n nameError: \"Bitte geben Sie Ihren Namen ein\",\r\n emailError: \"Bitte geben Sie eine gültige E-Mail-Adresse ein\",\r\n consumptionProfiles: {\r\n mostlyAtHome: \"Hauptsächlich zu Hause\",\r\n mostlyAway: \"Erwerbstätig\",\r\n },\r\n chart: {\r\n consumption: \"Verbrauch\",\r\n production: \"Produktion\",\r\n consumptionProfile: \"Verbrauchprofil\",\r\n relativeConsumption: \"Verbrauch\",\r\n hourOfDay: \"Stunde des Tages\",\r\n },\r\n validEmailError: \"Bitte geben Sie eine gültige E-Mail-Adresse ein\",\r\n requestOffer: \"Angebot anfordern\",\r\n requestOfferButton: \"Angebot anfordern\",\r\n year: \"Jahr\",\r\n },\r\n mapDraw: {\r\n noPolygonSelected: \"Kein Polygon ausgewählt\",\r\n noAddressSelected: \"Bitte wählen Sie eine Adresse\",\r\n information: \"Information\",\r\n calculateSolarPanels: \"Berechnen Sie die Solarpanele\",\r\n panels: \"Panele\",\r\n area: \"Fläche\",\r\n azimuth: \"Ausrichtung\",\r\n pitch: \"Neigung\",\r\n tools: {\r\n roof: {\r\n name: \"Dach\",\r\n explanation: \"Zeichnen Sie das Dach des Gebäudes\",\r\n ariaLabel: \"Dach\",\r\n },\r\n obstruction: {\r\n name: \"Hindernis\",\r\n explanation: \"Zeichnen Sie das Hindernis des Gebäudes\",\r\n ariaLabel: \"Hindernis\",\r\n },\r\n delete: {\r\n name: \"Löschen\",\r\n explanation: \"Löschen Sie das ausgewählte Polygon\",\r\n ariaLabel: \"Löschen\",\r\n },\r\n move: {\r\n name: \"Verschieben\",\r\n explanation: \"Verschieben Sie Punkte des ausgewählten Polygons\",\r\n ariaLabel: \"Verschieben\",\r\n },\r\n },\r\n }\r\n}"]}
|
|
@@ -10,7 +10,7 @@ export const es = {
|
|
|
10
10
|
totalSystemPeakPower: "Potencia pico total del sistema (kW)",
|
|
11
11
|
electricityPrice: "Precio de la electricidad (€/kWh)",
|
|
12
12
|
compensationRate: "Tasa de compensación (€/kWh)",
|
|
13
|
-
autonomy: "Autonomía
|
|
13
|
+
autonomy: "Autonomía",
|
|
14
14
|
costSavings: "Ahorro (€/año)",
|
|
15
15
|
householdConsumptionTitle: "Consumo de la casa",
|
|
16
16
|
consumptionProfileTitle: "Perfil de consumo",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spanish.js","sourceRoot":"","sources":["../../../src/utils/lang/spanish.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAoB;IAC/B,WAAW,EAAE;QACT,iBAAiB,EAAE,0BAA0B;KAChD;IACD,eAAe,EAAE;QACb,KAAK,EAAE,iCAAiC;QACxC,iBAAiB,EAAE,yBAAyB;QAC5C,cAAc,EAAE,2BAA2B;QAC3C,cAAc,EAAE,8BAA8B;QAC9C,oBAAoB,EAAE,sCAAsC;QAC5D,gBAAgB,EAAE,mCAAmC;QACrD,gBAAgB,EAAE,8BAA8B;QAChD,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"spanish.js","sourceRoot":"","sources":["../../../src/utils/lang/spanish.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAoB;IAC/B,WAAW,EAAE;QACT,iBAAiB,EAAE,0BAA0B;KAChD;IACD,eAAe,EAAE;QACb,KAAK,EAAE,iCAAiC;QACxC,iBAAiB,EAAE,yBAAyB;QAC5C,cAAc,EAAE,2BAA2B;QAC3C,cAAc,EAAE,8BAA8B;QAC9C,oBAAoB,EAAE,sCAAsC;QAC5D,gBAAgB,EAAE,mCAAmC;QACrD,gBAAgB,EAAE,8BAA8B;QAChD,QAAQ,EAAE,WAAW;QACrB,WAAW,EAAE,gBAAgB;QAC7B,yBAAyB,EAAE,oBAAoB;QAC/C,uBAAuB,EAAE,mBAAmB;QAC5C,qBAAqB,EAAE,2BAA2B;QAClD,qBAAqB,EAAE,sBAAsB;QAC7C,YAAY,EAAE,YAAY;QAC1B,iBAAiB,EAAE,gFAAgF;QACnG,iBAAiB,EAAE,qBAAqB;QACxC,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,8BAA8B;QACzC,UAAU,EAAE,+DAA+D;QAC3E,mBAAmB,EAAE;YACjB,YAAY,EAAE,wBAAwB;YACtC,UAAU,EAAE,QAAQ;SACvB;QACD,KAAK,EAAE;YACH,WAAW,EAAE,SAAS;YACtB,UAAU,EAAE,YAAY;YACxB,kBAAkB,EAAE,mBAAmB;YACvC,mBAAmB,EAAE,SAAS;YAC9B,SAAS,EAAE,cAAc;SAC5B;QACD,eAAe,EAAE,+DAA+D;QAChF,YAAY,EAAE,sBAAsB;QACpC,kBAAkB,EAAE,kBAAkB;QACtC,IAAI,EAAE,KAAK;KACd;IACD,OAAO,EAAE;QACL,iBAAiB,EAAE,mCAAmC;QACtD,iBAAiB,EAAE,qCAAqC;QACxD,WAAW,EAAE,aAAa;QAC1B,oBAAoB,EAAE,0BAA0B;QAChD,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE;YACH,IAAI,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+BAA+B;gBAC5C,SAAS,EAAE,QAAQ;aACtB;YACD,WAAW,EAAE;gBACT,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,oCAAoC;gBACjD,SAAS,EAAE,aAAa;aAC3B;YACD,MAAM,EAAE;gBACJ,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,kCAAkC;gBAC/C,SAAS,EAAE,UAAU;aACxB;YACD,IAAI,EAAE;gBACF,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,4CAA4C;gBACzD,SAAS,EAAE,OAAO;aACrB;SACJ;KACJ;CACJ,CAAA","sourcesContent":["import { LanguageStrings } from \"../../types/lang\";\r\n\r\nexport const es: LanguageStrings = {\r\n solarExpert: {\r\n searchPlaceholder: \"Suche nach einer Adresse\"\r\n },\r\n solarSystemForm: {\r\n title: \"Configuración del sistema solar\",\r\n systemInformation: \"Información del sistema\",\r\n numberOfPanels: \"Número de paneles solares\",\r\n panelPeakPower: \"Potencia pico del panel (kW)\",\r\n totalSystemPeakPower: \"Potencia pico total del sistema (kW)\",\r\n electricityPrice: \"Precio de la electricidad (€/kWh)\",\r\n compensationRate: \"Tasa de compensación (€/kWh)\",\r\n autonomy: \"Autonomía\",\r\n costSavings: \"Ahorro (€/año)\",\r\n householdConsumptionTitle: \"Consumo de la casa\",\r\n consumptionProfileTitle: \"Perfil de consumo\",\r\n electricityCostsTitle: \"Costes de la electricidad\",\r\n compensationRateTitle: \"Tasa de compensación\",\r\n resultsTitle: \"Resultados\",\r\n savingsDisclaimer: \"Nota: Los ahorros se basan en el precio promedio de la electricidad en España.\",\r\n annualConsumption: \"Consumo anual (kWh)\",\r\n name: \"Nombre\",\r\n email: \"Email\",\r\n nameError: \"Por favor, ingrese su nombre\",\r\n emailError: \"Por favor, ingrese una dirección de correo electrónico válida\",\r\n consumptionProfiles: {\r\n mostlyAtHome: \"Principalmente en casa\",\r\n mostlyAway: \"Empleo\",\r\n },\r\n chart: {\r\n consumption: \"Consumo\",\r\n production: \"Producción\",\r\n consumptionProfile: \"Perfil de consumo\",\r\n relativeConsumption: \"Consumo\",\r\n hourOfDay: \"Hora del día\",\r\n },\r\n validEmailError: \"Por favor, ingrese una dirección de correo electrónico válida\",\r\n requestOffer: \"Solicitar una oferta\",\r\n requestOfferButton: \"Solicitar oferta\",\r\n year: \"Año\",\r\n },\r\n mapDraw: {\r\n noPolygonSelected: \"No se ha seleccionado un polígono\",\r\n noAddressSelected: \"Por favor, seleccione una dirección\",\r\n information: \"Información\",\r\n calculateSolarPanels: \"Calcular paneles solares\",\r\n panels: \"Paneles\",\r\n area: \"Área\",\r\n azimuth: \"Azimut\",\r\n pitch: \"Inclinación\",\r\n tools: {\r\n roof: {\r\n name: \"Tejado\",\r\n explanation: \"Dibuje el tejado del edificio\",\r\n ariaLabel: \"Tejado\",\r\n },\r\n obstruction: {\r\n name: \"Obstrucción\",\r\n explanation: \"Dibuje la obstrucción del edificio\",\r\n ariaLabel: \"Obstrucción\",\r\n },\r\n delete: {\r\n name: \"Eliminar\",\r\n explanation: \"Elimine el polígono seleccionado\",\r\n ariaLabel: \"Eliminar\",\r\n },\r\n move: {\r\n name: \"Mover\",\r\n explanation: \"Mueva los puntos del polígono seleccionado\",\r\n ariaLabel: \"Mover\",\r\n },\r\n },\r\n }\r\n}"]}
|