blue-chestnut-solar-expert 0.0.17 → 0.0.19

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.
Files changed (104) hide show
  1. package/dist/components/polygon-buttons.d.ts +11 -0
  2. package/dist/components/polygon-information.d.ts +11 -0
  3. package/dist/components/undo-icon.d.ts +11 -0
  4. package/dist/stencil-library/{config-hh5GAFbi.js → config-BV_PiZGS.js} +5 -3
  5. package/dist/stencil-library/config-BV_PiZGS.js.map +1 -0
  6. package/dist/stencil-library/eraser-icon.entry.esm.js.map +1 -1
  7. package/dist/stencil-library/eraser-icon.entry.js +1 -1
  8. package/dist/stencil-library/eraser-icon.entry.js.map +1 -1
  9. package/dist/stencil-library/house-icon.entry.esm.js.map +1 -1
  10. package/dist/stencil-library/house-icon.entry.js +1 -1
  11. package/dist/stencil-library/house-icon.entry.js.map +1 -1
  12. package/dist/stencil-library/icon-selector.entry.esm.js.map +1 -1
  13. package/dist/stencil-library/icon-selector.entry.js +4 -1
  14. package/dist/stencil-library/icon-selector.entry.js.map +1 -1
  15. package/dist/stencil-library/loading-widget.entry.esm.js.map +1 -1
  16. package/dist/stencil-library/loading-widget.entry.js +2 -2
  17. package/dist/stencil-library/loading-widget.entry.js.map +1 -1
  18. package/dist/stencil-library/map-draw.entry.esm.js.map +1 -1
  19. package/dist/stencil-library/map-draw.entry.js +118 -170
  20. package/dist/stencil-library/map-draw.entry.js.map +1 -1
  21. package/dist/stencil-library/map-selector.entry.esm.js.map +1 -1
  22. package/dist/stencil-library/map-selector.entry.js +4 -4
  23. package/dist/stencil-library/map-selector.entry.js.map +1 -1
  24. package/dist/stencil-library/move-icon.entry.esm.js.map +1 -1
  25. package/dist/stencil-library/move-icon.entry.js +1 -1
  26. package/dist/stencil-library/move-icon.entry.js.map +1 -1
  27. package/dist/stencil-library/octagon-minus-icon.entry.esm.js.map +1 -1
  28. package/dist/stencil-library/octagon-minus-icon.entry.js +1 -1
  29. package/dist/stencil-library/octagon-minus-icon.entry.js.map +1 -1
  30. package/dist/stencil-library/polygon-buttons.entry.esm.js.map +1 -0
  31. package/dist/stencil-library/polygon-buttons.entry.js +28 -0
  32. package/dist/stencil-library/polygon-buttons.entry.js.map +1 -0
  33. package/dist/stencil-library/polygon-information.entry.esm.js.map +1 -0
  34. package/dist/stencil-library/polygon-information.entry.js +74 -0
  35. package/dist/stencil-library/polygon-information.entry.js.map +1 -0
  36. package/dist/stencil-library/search-icon.entry.esm.js.map +1 -1
  37. package/dist/stencil-library/search-icon.entry.js +1 -1
  38. package/dist/stencil-library/search-icon.entry.js.map +1 -1
  39. package/dist/stencil-library/settings-icon.entry.esm.js.map +1 -1
  40. package/dist/stencil-library/settings-icon.entry.js +1 -1
  41. package/dist/stencil-library/settings-icon.entry.js.map +1 -1
  42. package/dist/stencil-library/settings-modal.entry.esm.js.map +1 -1
  43. package/dist/stencil-library/settings-modal.entry.js +10 -10
  44. package/dist/stencil-library/settings-modal.entry.js.map +1 -1
  45. package/dist/stencil-library/solar-calculator.entry.esm.js.map +1 -1
  46. package/dist/stencil-library/solar-calculator.entry.js +2 -2
  47. package/dist/stencil-library/solar-calculator.entry.js.map +1 -1
  48. package/dist/stencil-library/solar-expert.entry.esm.js.map +1 -1
  49. package/dist/stencil-library/solar-expert.entry.js +3 -3
  50. package/dist/stencil-library/solar-expert.entry.js.map +1 -1
  51. package/dist/stencil-library/solar-system-form.entry.esm.js.map +1 -1
  52. package/dist/stencil-library/solar-system-form.entry.js +223 -184
  53. package/dist/stencil-library/solar-system-form.entry.js.map +1 -1
  54. package/dist/stencil-library/stencil-library.esm.js +1 -1
  55. package/dist/stencil-library/{store-CbFNgpiN.js → store-By_Yq2NT.js} +22 -4
  56. package/dist/stencil-library/store-By_Yq2NT.js.map +1 -0
  57. package/dist/stencil-library/{store-DsXeXraH.js → store-Dr69Zmu_.js} +27 -5
  58. package/dist/stencil-library/store-Dr69Zmu_.js.map +1 -0
  59. package/dist/stencil-library/tool-box.entry.esm.js.map +1 -1
  60. package/dist/stencil-library/tool-box.entry.js +11 -5
  61. package/dist/stencil-library/tool-box.entry.js.map +1 -1
  62. package/dist/stencil-library/{tools-DO8CG56H.js → tools-DU7Muwzb.js} +17 -3
  63. package/dist/stencil-library/tools-DU7Muwzb.js.map +1 -0
  64. package/dist/stencil-library/undo-icon.entry.esm.js.map +1 -0
  65. package/dist/stencil-library/undo-icon.entry.js +20 -0
  66. package/dist/stencil-library/undo-icon.entry.js.map +1 -0
  67. package/dist/stencil-library/utils-CTW6J-87.js +99 -0
  68. package/dist/stencil-library/utils-CTW6J-87.js.map +1 -0
  69. package/dist/types/components/icons/undo.d.ts +5 -0
  70. package/dist/types/components/map-draw/map-draw.d.ts +5 -0
  71. package/dist/types/components/map-draw/polygon-buttons.d.ts +6 -0
  72. package/dist/types/components/map-draw/polygon-information.d.ts +9 -0
  73. package/dist/types/components/map-draw/tool-box.d.ts +1 -0
  74. package/dist/types/components/solar-system-form/solar-system-form.d.ts +3 -2
  75. package/dist/types/components.d.ts +73 -10
  76. package/dist/types/config.d.ts +1 -0
  77. package/dist/types/constants.d.ts +2 -1
  78. package/dist/types/types/lang.d.ts +6 -0
  79. package/dist/types/utils/render/polygon.d.ts +6 -1
  80. package/dist/types/utils/render/tools.d.ts +3 -1
  81. package/dist/types/utils/simulation/simulation.d.ts +8 -0
  82. package/dist/types/utils/simulation/solarCurves.d.ts +3 -0
  83. package/dist/types/utils/simulation/types.d.ts +49 -0
  84. package/package.json +2 -2
  85. package/dist/stencil-library/config-hh5GAFbi.js.map +0 -1
  86. package/dist/stencil-library/store-B-oT8BM6.js +0 -579
  87. package/dist/stencil-library/store-B-oT8BM6.js.map +0 -1
  88. package/dist/stencil-library/store-B74GO7_R.js +0 -579
  89. package/dist/stencil-library/store-B74GO7_R.js.map +0 -1
  90. package/dist/stencil-library/store-CJCtVxJR.js +0 -546
  91. package/dist/stencil-library/store-CJCtVxJR.js.map +0 -1
  92. package/dist/stencil-library/store-CbFNgpiN.js.map +0 -1
  93. package/dist/stencil-library/store-CzUjX3ZS.js +0 -579
  94. package/dist/stencil-library/store-CzUjX3ZS.js.map +0 -1
  95. package/dist/stencil-library/store-D2T-tfKH.js +0 -573
  96. package/dist/stencil-library/store-D2T-tfKH.js.map +0 -1
  97. package/dist/stencil-library/store-DsXeXraH.js.map +0 -1
  98. package/dist/stencil-library/store-TjbCCrIW.js +0 -573
  99. package/dist/stencil-library/store-TjbCCrIW.js.map +0 -1
  100. package/dist/stencil-library/store-Y8q2XvVS.js +0 -579
  101. package/dist/stencil-library/store-Y8q2XvVS.js.map +0 -1
  102. package/dist/stencil-library/store-tzn2ldy2.js +0 -579
  103. package/dist/stencil-library/store-tzn2ldy2.js.map +0 -1
  104. package/dist/stencil-library/tools-DO8CG56H.js.map +0 -1
@@ -1,546 +0,0 @@
1
- import { d as getRenderingRef, f as forceUpdate } from './index-DZjEuBrX.js';
2
-
3
- const en = {
4
- settings: {
5
- language: "Language",
6
- rowSpacing: "Row Spacing",
7
- columnSpacing: "Column Spacing",
8
- borderInset: "Border Inset",
9
- },
10
- mapSelector: {
11
- explanation: "Select your house on the map and adjust the radius of the circle to fully encompase your roof.",
12
- radius: "Radius (meters)",
13
- accept: "Accept",
14
- chooseOnMap: "Choose on Map",
15
- },
16
- solarExpert: {
17
- searchPlaceholder: "Search for your address"
18
- },
19
- solarSystemForm: {
20
- title: "Solar System Configuration",
21
- systemInformation: "System Information",
22
- numberOfPanels: "Number of Solar Panels",
23
- panelPeakPower: "Panel Peak Power (kW)",
24
- totalSystemPeakPower: "Total System Peak Power (kW)",
25
- electricityPrice: "Electricity Price (€/kWh)",
26
- compensationRate: "Compensation Rate (€/kWh)",
27
- autonomy: "Autonomy",
28
- costSavings: "Cost Savings (€/year)",
29
- householdConsumptionTitle: "Household Electricity Consumption",
30
- consumptionProfileTitle: "Consumption Profile",
31
- electricityCostsTitle: "Electricity Costs",
32
- compensationRateTitle: "Compensation Rate",
33
- resultsTitle: "Results",
34
- savingsDisclaimer: "Disclaimer: The savings are based on the average electricity price in Spain.",
35
- annualConsumption: "Annual Consumption (kWh)",
36
- name: "Name",
37
- email: "Email",
38
- nameError: "Please enter your name",
39
- emailError: "Please enter a valid email address",
40
- consumptionProfiles: {
41
- mostlyAtHome: "Mostly at home",
42
- mostlyAway: "Mostly away",
43
- },
44
- chart: {
45
- consumption: "Consumption",
46
- production: "Production",
47
- consumptionProfile: "Consumption Profile",
48
- relativeConsumption: "Relative Consumption",
49
- hourOfDay: "Hour of Day",
50
- },
51
- validEmailError: "Please enter a valid email address",
52
- requestOffer: "Request Offer",
53
- requestOfferButton: "Request Offer",
54
- year: "year",
55
- },
56
- mapDraw: {
57
- instructions: {
58
- show: "Show Instructions",
59
- hide: "Hide Instructions",
60
- parts: {
61
- roof: "After you have searched and selected your address. Highlight the part of your roof that you want to add solar panels to. Mark each surface with a polygon with the roof tool",
62
- obstruction: ". If you have skylights or other obstructions where you don't want to add solar panels, mark those as well with the obstruction tool",
63
- delete: ". You can delete polygons with the delete tool",
64
- move: ". If you want to change the corners of a polygon, select the move tool",
65
- end: ", select the polygon you want to change and drag and drop the corners.",
66
- }
67
- },
68
- noPolygonSelected: "No polygon selected",
69
- noAddressSelected: "Please select an address",
70
- information: "Information",
71
- calculateSolarPanels: "Calculate Solar Panels",
72
- panels: "Panels",
73
- area: "Area",
74
- azimuth: "Azimuth",
75
- pitch: "Pitch",
76
- tools: {
77
- roof: {
78
- name: "Roof",
79
- explanation: "Draw the roof of the building",
80
- ariaLabel: "Roof",
81
- },
82
- obstruction: {
83
- name: "Obstruction",
84
- explanation: "Draw the obstruction of the building",
85
- ariaLabel: "Obstruction",
86
- },
87
- delete: {
88
- name: "Delete",
89
- explanation: "Delete the selected polygon",
90
- ariaLabel: "Delete",
91
- },
92
- move: {
93
- name: "Move",
94
- explanation: "Move the selected polygon",
95
- ariaLabel: "Move",
96
- },
97
- },
98
- }
99
- };
100
-
101
- const de = {
102
- settings: {
103
- language: "Sprache",
104
- rowSpacing: "Zeilenabstand",
105
- columnSpacing: "Spaltenabstand",
106
- borderInset: "Randabstand",
107
- },
108
- mapSelector: {
109
- explanation: "Wählen Sie Ihre Adresse auf der Karte und passen Sie den Radius des Kreises an, um Ihr Dach vollständig zu erfassen.",
110
- radius: "Radius (Meter)",
111
- accept: "Akzeptieren",
112
- chooseOnMap: "Auf der Karte auswählen",
113
- },
114
- solarExpert: {
115
- searchPlaceholder: "Ihre Adresse"
116
- },
117
- solarSystemForm: {
118
- title: "Solarsystem Konfiguration",
119
- systemInformation: "System Information",
120
- numberOfPanels: "Anzahl der Solarpanel",
121
- panelPeakPower: "Panelleistung (kW)",
122
- totalSystemPeakPower: "Maximale Anlagengröße (kWp)",
123
- electricityPrice: "Strompreis (€/kWh)",
124
- compensationRate: "Einspeisevergütung (€/kWh)",
125
- autonomy: "Autonomie",
126
- costSavings: "Einsparungen (€/Jahr)",
127
- householdConsumptionTitle: "Haushaltsverbrauch",
128
- consumptionProfileTitle: "Verbrauchprofil",
129
- electricityCostsTitle: "Stromkosten",
130
- compensationRateTitle: "Einspeisevergütung",
131
- resultsTitle: "Ergebnisse",
132
- savingsDisclaimer: "Disclaimer: Die Einsparungen basieren auf dem durchschnittlichen Strompreis in Spanien.",
133
- annualConsumption: "Jährlicher Verbrauch (kWh)",
134
- name: "Name",
135
- email: "Email",
136
- nameError: "Bitte geben Sie Ihren Namen ein",
137
- emailError: "Bitte geben Sie eine gültige E-Mail-Adresse ein",
138
- consumptionProfiles: {
139
- mostlyAtHome: "Hauptsächlich zu Hause",
140
- mostlyAway: "Erwerbstätig",
141
- },
142
- chart: {
143
- consumption: "Verbrauch",
144
- production: "Produktion",
145
- consumptionProfile: "Verbrauchprofil",
146
- relativeConsumption: "Verbrauch",
147
- hourOfDay: "Stunde des Tages",
148
- },
149
- validEmailError: "Bitte geben Sie eine gültige E-Mail-Adresse ein",
150
- requestOffer: "Angebot anfordern",
151
- requestOfferButton: "Angebot anfordern",
152
- year: "Jahr",
153
- },
154
- mapDraw: {
155
- instructions: {
156
- show: "Anleitung anzeigen",
157
- hide: "Anleitung ausblenden",
158
- parts: {
159
- roof: "Nachdem Sie Ihre Adresse gesucht und ausgewählt haben. Markieren Sie die Teile Ihres Daches, auf denen Sie Solarpanelleisten hinzufügen möchten. Markieren Sie jede Oberfläche mit einem Polygon mit dem Dachwerkzeug",
160
- obstruction: ". Wenn Sie Dachfenster oder andere Hindernisse haben, auf denen Sie keine Solarpanele hinzufügen können, markieren Sie diese mit dem Hinderniswerkzeug",
161
- delete: ". Sie können Polygone mit dem Löschwerkzeug löschen",
162
- move: ". Wenn Sie die Ecken eines Polygons ändern möchten, wählen Sie das Verschiebewerkzeug",
163
- end: ", wählen Sie das Polygon, das Sie ändern möchten, und verschieben Sie die Ecken.",
164
- }
165
- },
166
- noPolygonSelected: "Kein Polygon ausgewählt",
167
- noAddressSelected: "Bitte wählen Sie eine Adresse",
168
- information: "Information",
169
- calculateSolarPanels: "Berechnen Sie die Solarpanele",
170
- panels: "Panele",
171
- area: "Fläche",
172
- azimuth: "Ausrichtung",
173
- pitch: "Neigung",
174
- tools: {
175
- roof: {
176
- name: "Dach",
177
- explanation: "Zeichnen Sie das Dach des Gebäudes",
178
- ariaLabel: "Dach",
179
- },
180
- obstruction: {
181
- name: "Hindernis",
182
- explanation: "Zeichnen Sie das Hindernis des Gebäudes",
183
- ariaLabel: "Hindernis",
184
- },
185
- delete: {
186
- name: "Löschen",
187
- explanation: "Löschen Sie das ausgewählte Polygon",
188
- ariaLabel: "Löschen",
189
- },
190
- move: {
191
- name: "Verschieben",
192
- explanation: "Verschieben Sie Punkte des ausgewählten Polygons",
193
- ariaLabel: "Verschieben",
194
- },
195
- },
196
- }
197
- };
198
-
199
- const es = {
200
- settings: {
201
- language: "Idioma",
202
- rowSpacing: "Espaciado de filas",
203
- columnSpacing: "Espaciado de columnas",
204
- borderInset: "Espaciado de bordes",
205
- },
206
- mapSelector: {
207
- explanation: "Selecciona tu casa en el mapa y ajusta el radio del círculo para cubrir completamente tu tejado.",
208
- radius: "Radio (metros)",
209
- accept: "Aceptar",
210
- chooseOnMap: "Seleccionar en el mapa",
211
- },
212
- solarExpert: {
213
- searchPlaceholder: "Buscar tu dirección"
214
- },
215
- solarSystemForm: {
216
- title: "Configuración del sistema solar",
217
- systemInformation: "Información del sistema",
218
- numberOfPanels: "Número de paneles solares",
219
- panelPeakPower: "Potencia pico del panel (kW)",
220
- totalSystemPeakPower: "Potencia pico total del sistema (kW)",
221
- electricityPrice: "Precio de la electricidad (€/kWh)",
222
- compensationRate: "Tasa de compensación (€/kWh)",
223
- autonomy: "Autonomía",
224
- costSavings: "Ahorro (€/año)",
225
- householdConsumptionTitle: "Consumo de la casa",
226
- consumptionProfileTitle: "Perfil de consumo",
227
- electricityCostsTitle: "Costes de la electricidad",
228
- compensationRateTitle: "Tasa de compensación",
229
- resultsTitle: "Resultados",
230
- savingsDisclaimer: "Nota: Los ahorros se basan en el precio promedio de la electricidad en España.",
231
- annualConsumption: "Consumo anual (kWh)",
232
- name: "Nombre",
233
- email: "Email",
234
- nameError: "Por favor, ingrese su nombre",
235
- emailError: "Por favor, ingrese una dirección de correo electrónico válida",
236
- consumptionProfiles: {
237
- mostlyAtHome: "Principalmente en casa",
238
- mostlyAway: "Empleo",
239
- },
240
- chart: {
241
- consumption: "Consumo",
242
- production: "Producción",
243
- consumptionProfile: "Perfil de consumo",
244
- relativeConsumption: "Consumo",
245
- hourOfDay: "Hora del día",
246
- },
247
- validEmailError: "Por favor, ingrese una dirección de correo electrónico válida",
248
- requestOffer: "Solicitar una oferta",
249
- requestOfferButton: "Solicitar oferta",
250
- year: "Año",
251
- },
252
- mapDraw: {
253
- instructions: {
254
- show: "Mostrar instrucciones",
255
- hide: "Ocultar instrucciones",
256
- parts: {
257
- roof: "Después de buscar y seleccionar su dirección, resalte la parte del tejado donde desea añadir paneles solares. Marque cada superficie con un polígono con la herramienta de tejado",
258
- obstruction: ". Si tiene claraboyas u otras obstrucciones donde no desea añadir paneles solares, márquelas también con la herramienta de obstrucción",
259
- delete: ". Puede eliminar polígonos con la herramienta de eliminación",
260
- move: ". Si desea cambiar las esquinas de un polígono, seleccione la herramienta de movimiento",
261
- end: ", seleccione el polígono que desea modificar y arrastre y suelte los bordes.",
262
- }
263
- },
264
- noPolygonSelected: "No se ha seleccionado un polígono",
265
- noAddressSelected: "Por favor, seleccione una dirección",
266
- information: "Información",
267
- calculateSolarPanels: "Calcular paneles solares",
268
- panels: "Paneles",
269
- area: "Área",
270
- azimuth: "Azimut",
271
- pitch: "Inclinación",
272
- tools: {
273
- roof: {
274
- name: "Tejado",
275
- explanation: "Dibuje el tejado del edificio",
276
- ariaLabel: "Tejado",
277
- },
278
- obstruction: {
279
- name: "Obstrucción",
280
- explanation: "Dibuje la obstrucción del edificio",
281
- ariaLabel: "Obstrucción",
282
- },
283
- delete: {
284
- name: "Eliminar",
285
- explanation: "Elimine el polígono seleccionado",
286
- ariaLabel: "Eliminar",
287
- },
288
- move: {
289
- name: "Mover",
290
- explanation: "Mueva los puntos del polígono seleccionado",
291
- ariaLabel: "Mover",
292
- },
293
- },
294
- }
295
- };
296
-
297
- const languageStrings = {
298
- en: en,
299
- es: es,
300
- de: de,
301
- };
302
- function getLanguageStrings(lang) {
303
- const defaultLang = languageStrings["en"];
304
- if (lang === "en") {
305
- return defaultLang;
306
- }
307
- const langStrings = languageStrings[lang];
308
- // Deep merge the default language strings with the selected language strings
309
- const mergedStrings = JSON.parse(JSON.stringify(defaultLang)); // Deep clone default
310
- function deepMerge(target, source) {
311
- for (const key in source) {
312
- if (source[key] instanceof Object && key in target) {
313
- deepMerge(target[key], source[key]);
314
- }
315
- else if (source[key] !== undefined) {
316
- target[key] = source[key];
317
- }
318
- }
319
- }
320
- deepMerge(mergedStrings, langStrings);
321
- return mergedStrings;
322
- }
323
-
324
- const appendToMap = (map, propName, value) => {
325
- const items = map.get(propName);
326
- if (!items) {
327
- map.set(propName, [value]);
328
- }
329
- else if (!items.includes(value)) {
330
- items.push(value);
331
- }
332
- };
333
- const debounce = (fn, ms) => {
334
- let timeoutId;
335
- return (...args) => {
336
- if (timeoutId) {
337
- clearTimeout(timeoutId);
338
- }
339
- timeoutId = setTimeout(() => {
340
- timeoutId = 0;
341
- fn(...args);
342
- }, ms);
343
- };
344
- };
345
-
346
- /**
347
- * Check if a possible element isConnected.
348
- * The property might not be there, so we check for it.
349
- *
350
- * We want it to return true if isConnected is not a property,
351
- * otherwise we would remove these elements and would not update.
352
- *
353
- * Better leak in Edge than to be useless.
354
- */
355
- const isConnected = (maybeElement) => !('isConnected' in maybeElement) || maybeElement.isConnected;
356
- const cleanupElements = debounce((map) => {
357
- for (let key of map.keys()) {
358
- map.set(key, map.get(key).filter(isConnected));
359
- }
360
- }, 2_000);
361
- const stencilSubscription = () => {
362
- if (typeof getRenderingRef !== 'function') {
363
- // If we are not in a stencil project, we do nothing.
364
- // This function is not really exported by @stencil/core.
365
- return {};
366
- }
367
- const elmsToUpdate = new Map();
368
- return {
369
- dispose: () => elmsToUpdate.clear(),
370
- get: (propName) => {
371
- const elm = getRenderingRef();
372
- if (elm) {
373
- appendToMap(elmsToUpdate, propName, elm);
374
- }
375
- },
376
- set: (propName) => {
377
- const elements = elmsToUpdate.get(propName);
378
- if (elements) {
379
- elmsToUpdate.set(propName, elements.filter(forceUpdate));
380
- }
381
- cleanupElements(elmsToUpdate);
382
- },
383
- reset: () => {
384
- elmsToUpdate.forEach((elms) => elms.forEach(forceUpdate));
385
- cleanupElements(elmsToUpdate);
386
- },
387
- };
388
- };
389
-
390
- const unwrap = (val) => (typeof val === 'function' ? val() : val);
391
- const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) => {
392
- const unwrappedState = unwrap(defaultState);
393
- let states = new Map(Object.entries(unwrappedState ?? {}));
394
- const handlers = {
395
- dispose: [],
396
- get: [],
397
- set: [],
398
- reset: [],
399
- };
400
- const reset = () => {
401
- // When resetting the state, the default state may be a function - unwrap it to invoke it.
402
- // otherwise, the state won't be properly reset
403
- states = new Map(Object.entries(unwrap(defaultState) ?? {}));
404
- handlers.reset.forEach((cb) => cb());
405
- };
406
- const dispose = () => {
407
- // Call first dispose as resetting the state would
408
- // cause less updates ;)
409
- handlers.dispose.forEach((cb) => cb());
410
- reset();
411
- };
412
- const get = (propName) => {
413
- handlers.get.forEach((cb) => cb(propName));
414
- return states.get(propName);
415
- };
416
- const set = (propName, value) => {
417
- const oldValue = states.get(propName);
418
- if (shouldUpdate(value, oldValue, propName)) {
419
- states.set(propName, value);
420
- handlers.set.forEach((cb) => cb(propName, value, oldValue));
421
- }
422
- };
423
- const state = (typeof Proxy === 'undefined'
424
- ? {}
425
- : new Proxy(unwrappedState, {
426
- get(_, propName) {
427
- return get(propName);
428
- },
429
- ownKeys(_) {
430
- return Array.from(states.keys());
431
- },
432
- getOwnPropertyDescriptor() {
433
- return {
434
- enumerable: true,
435
- configurable: true,
436
- };
437
- },
438
- has(_, propName) {
439
- return states.has(propName);
440
- },
441
- set(_, propName, value) {
442
- set(propName, value);
443
- return true;
444
- },
445
- }));
446
- const on = (eventName, callback) => {
447
- handlers[eventName].push(callback);
448
- return () => {
449
- removeFromArray(handlers[eventName], callback);
450
- };
451
- };
452
- const onChange = (propName, cb) => {
453
- const unSet = on('set', (key, newValue) => {
454
- if (key === propName) {
455
- cb(newValue);
456
- }
457
- });
458
- // We need to unwrap the defaultState because it might be a function.
459
- // Otherwise we might not be sending the right reset value.
460
- const unReset = on('reset', () => cb(unwrap(defaultState)[propName]));
461
- return () => {
462
- unSet();
463
- unReset();
464
- };
465
- };
466
- const use = (...subscriptions) => {
467
- const unsubs = subscriptions.reduce((unsubs, subscription) => {
468
- if (subscription.set) {
469
- unsubs.push(on('set', subscription.set));
470
- }
471
- if (subscription.get) {
472
- unsubs.push(on('get', subscription.get));
473
- }
474
- if (subscription.reset) {
475
- unsubs.push(on('reset', subscription.reset));
476
- }
477
- if (subscription.dispose) {
478
- unsubs.push(on('dispose', subscription.dispose));
479
- }
480
- return unsubs;
481
- }, []);
482
- return () => unsubs.forEach((unsub) => unsub());
483
- };
484
- const forceUpdate = (key) => {
485
- const oldValue = states.get(key);
486
- handlers.set.forEach((cb) => cb(key, oldValue, oldValue));
487
- };
488
- return {
489
- state,
490
- get,
491
- set,
492
- on,
493
- onChange,
494
- use,
495
- dispose,
496
- reset,
497
- forceUpdate,
498
- };
499
- };
500
- const removeFromArray = (array, item) => {
501
- const index = array.indexOf(item);
502
- if (index >= 0) {
503
- array[index] = array[array.length - 1];
504
- array.length--;
505
- }
506
- };
507
-
508
- const createStore = (defaultState, shouldUpdate) => {
509
- const map = createObservableMap(defaultState, shouldUpdate);
510
- map.use(stencilSubscription());
511
- return map;
512
- };
513
-
514
- const { state, onChange } = createStore({
515
- latitude: 40.581614,
516
- longitude: -4.128423,
517
- radiusMeters: 15,
518
- settings: {
519
- language: "en",
520
- rowSpacing: 1,
521
- columnSpacing: 1,
522
- borderInset: 0,
523
- heatPumpM2Consumption: 85,
524
- },
525
- settingsVersion: 1,
526
- });
527
- onChange("latitude", (value) => {
528
- state.latitude = value;
529
- });
530
- onChange("longitude", (value) => {
531
- state.longitude = value;
532
- });
533
- onChange("radiusMeters", (value) => {
534
- state.radiusMeters = value;
535
- });
536
- onChange("settings", (value) => {
537
- state.settings = value;
538
- });
539
- onChange("settingsVersion", (value) => {
540
- state.settingsVersion = value;
541
- });
542
-
543
- export { getLanguageStrings as g, onChange as o, state as s };
544
- //# sourceMappingURL=store-CJCtVxJR.js.map
545
-
546
- //# sourceMappingURL=store-CJCtVxJR.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-CJCtVxJR.js","sources":["src/utils/lang/english.ts","src/utils/lang/german.ts","src/utils/lang/spanish.ts","src/utils/lang/general.ts","../../node_modules/@stencil/store/dist/index.js","src/store.ts"],"sourcesContent":["import { LanguageStrings } from \"../../types/lang\";\r\n\r\nexport const en: LanguageStrings = {\r\n settings: {\r\n language: \"Language\",\r\n rowSpacing: \"Row Spacing\",\r\n columnSpacing: \"Column Spacing\",\r\n borderInset: \"Border Inset\",\r\n },\r\n mapSelector: {\r\n explanation: \"Select your house on the map and adjust the radius of the circle to fully encompase your roof.\",\r\n radius: \"Radius (meters)\",\r\n accept: \"Accept\",\r\n chooseOnMap: \"Choose on Map\",\r\n },\r\n solarExpert: {\r\n searchPlaceholder: \"Search for your address\"\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 instructions: {\r\n show: \"Show Instructions\",\r\n hide: \"Hide Instructions\",\r\n parts: {\r\n roof: \"After you have searched and selected your address. Highlight the part of your roof that you want to add solar panels to. Mark each surface with a polygon with the roof tool\",\r\n obstruction: \". If you have skylights or other obstructions where you don't want to add solar panels, mark those as well with the obstruction tool\",\r\n delete: \". You can delete polygons with the delete tool\",\r\n move: \". If you want to change the corners of a polygon, select the move tool\",\r\n end: \", select the polygon you want to change and drag and drop the corners.\",\r\n }\r\n },\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}","import { LanguageStrings } from \"../../types/lang\";\r\n\r\nexport const de: LanguageStrings = {\r\n settings: {\r\n language: \"Sprache\",\r\n rowSpacing: \"Zeilenabstand\",\r\n columnSpacing: \"Spaltenabstand\",\r\n borderInset: \"Randabstand\",\r\n },\r\n mapSelector: {\r\n explanation: \"Wählen Sie Ihre Adresse auf der Karte und passen Sie den Radius des Kreises an, um Ihr Dach vollständig zu erfassen.\",\r\n radius: \"Radius (Meter)\",\r\n accept: \"Akzeptieren\",\r\n chooseOnMap: \"Auf der Karte auswählen\",\r\n },\r\n solarExpert: {\r\n searchPlaceholder: \"Ihre 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 instructions: {\r\n show: \"Anleitung anzeigen\",\r\n hide: \"Anleitung ausblenden\",\r\n parts: {\r\n roof: \"Nachdem Sie Ihre Adresse gesucht und ausgewählt haben. Markieren Sie die Teile Ihres Daches, auf denen Sie Solarpanelleisten hinzufügen möchten. Markieren Sie jede Oberfläche mit einem Polygon mit dem Dachwerkzeug\",\r\n obstruction: \". Wenn Sie Dachfenster oder andere Hindernisse haben, auf denen Sie keine Solarpanele hinzufügen können, markieren Sie diese mit dem Hinderniswerkzeug\",\r\n delete: \". Sie können Polygone mit dem Löschwerkzeug löschen\",\r\n move: \". Wenn Sie die Ecken eines Polygons ändern möchten, wählen Sie das Verschiebewerkzeug\",\r\n end: \", wählen Sie das Polygon, das Sie ändern möchten, und verschieben Sie die Ecken.\",\r\n }\r\n },\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}","import { LanguageStrings } from \"../../types/lang\";\r\n\r\nexport const es: LanguageStrings = {\r\n settings: {\r\n language: \"Idioma\",\r\n rowSpacing: \"Espaciado de filas\",\r\n columnSpacing: \"Espaciado de columnas\",\r\n borderInset: \"Espaciado de bordes\",\r\n },\r\n mapSelector: {\r\n explanation: \"Selecciona tu casa en el mapa y ajusta el radio del círculo para cubrir completamente tu tejado.\",\r\n radius: \"Radio (metros)\",\r\n accept: \"Aceptar\",\r\n chooseOnMap: \"Seleccionar en el mapa\",\r\n },\r\n solarExpert: {\r\n searchPlaceholder: \"Buscar tu dirección\"\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 instructions: {\r\n show: \"Mostrar instrucciones\",\r\n hide: \"Ocultar instrucciones\",\r\n parts: {\r\n roof: \"Después de buscar y seleccionar su dirección, resalte la parte del tejado donde desea añadir paneles solares. Marque cada superficie con un polígono con la herramienta de tejado\",\r\n obstruction: \". Si tiene claraboyas u otras obstrucciones donde no desea añadir paneles solares, márquelas también con la herramienta de obstrucción\",\r\n delete: \". Puede eliminar polígonos con la herramienta de eliminación\",\r\n move: \". Si desea cambiar las esquinas de un polígono, seleccione la herramienta de movimiento\",\r\n end: \", seleccione el polígono que desea modificar y arrastre y suelte los bordes.\",\r\n }\r\n },\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}","import { Language, LanguageStrings } from \"../../types/lang\";\r\nimport { en } from \"./english\";\r\nimport { de } from \"./german\";\r\nimport { es } from \"./spanish\";\r\n\r\nconst languageStrings: Record<Language, LanguageStrings> = {\r\n en: en,\r\n es: es,\r\n de: de,\r\n}\r\n\r\n\r\nexport function getLanguageStrings(lang: Language): LanguageStrings {\r\n const defaultLang = languageStrings[\"en\"];\r\n if (lang === \"en\") {\r\n return defaultLang;\r\n }\r\n const langStrings = languageStrings[lang];\r\n \r\n // Deep merge the default language strings with the selected language strings\r\n const mergedStrings = JSON.parse(JSON.stringify(defaultLang)); // Deep clone default\r\n \r\n function deepMerge(target: any, source: any) {\r\n for (const key in source) {\r\n if (source[key] instanceof Object && key in target) {\r\n deepMerge(target[key], source[key]);\r\n } else if (source[key] !== undefined) {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n \r\n deepMerge(mergedStrings, langStrings);\r\n return mergedStrings;\r\n}\r\n","import { getRenderingRef, forceUpdate } from '@stencil/core';\n\nconst appendToMap = (map, propName, value) => {\n const items = map.get(propName);\n if (!items) {\n map.set(propName, [value]);\n }\n else if (!items.includes(value)) {\n items.push(value);\n }\n};\nconst debounce = (fn, ms) => {\n let timeoutId;\n return (...args) => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = 0;\n fn(...args);\n }, ms);\n };\n};\n\n/**\n * Check if a possible element isConnected.\n * The property might not be there, so we check for it.\n *\n * We want it to return true if isConnected is not a property,\n * otherwise we would remove these elements and would not update.\n *\n * Better leak in Edge than to be useless.\n */\nconst isConnected = (maybeElement) => !('isConnected' in maybeElement) || maybeElement.isConnected;\nconst cleanupElements = debounce((map) => {\n for (let key of map.keys()) {\n map.set(key, map.get(key).filter(isConnected));\n }\n}, 2_000);\nconst stencilSubscription = () => {\n if (typeof getRenderingRef !== 'function') {\n // If we are not in a stencil project, we do nothing.\n // This function is not really exported by @stencil/core.\n return {};\n }\n const elmsToUpdate = new Map();\n return {\n dispose: () => elmsToUpdate.clear(),\n get: (propName) => {\n const elm = getRenderingRef();\n if (elm) {\n appendToMap(elmsToUpdate, propName, elm);\n }\n },\n set: (propName) => {\n const elements = elmsToUpdate.get(propName);\n if (elements) {\n elmsToUpdate.set(propName, elements.filter(forceUpdate));\n }\n cleanupElements(elmsToUpdate);\n },\n reset: () => {\n elmsToUpdate.forEach((elms) => elms.forEach(forceUpdate));\n cleanupElements(elmsToUpdate);\n },\n };\n};\n\nconst unwrap = (val) => (typeof val === 'function' ? val() : val);\nconst createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) => {\n const unwrappedState = unwrap(defaultState);\n let states = new Map(Object.entries(unwrappedState ?? {}));\n const handlers = {\n dispose: [],\n get: [],\n set: [],\n reset: [],\n };\n const reset = () => {\n // When resetting the state, the default state may be a function - unwrap it to invoke it.\n // otherwise, the state won't be properly reset\n states = new Map(Object.entries(unwrap(defaultState) ?? {}));\n handlers.reset.forEach((cb) => cb());\n };\n const dispose = () => {\n // Call first dispose as resetting the state would\n // cause less updates ;)\n handlers.dispose.forEach((cb) => cb());\n reset();\n };\n const get = (propName) => {\n handlers.get.forEach((cb) => cb(propName));\n return states.get(propName);\n };\n const set = (propName, value) => {\n const oldValue = states.get(propName);\n if (shouldUpdate(value, oldValue, propName)) {\n states.set(propName, value);\n handlers.set.forEach((cb) => cb(propName, value, oldValue));\n }\n };\n const state = (typeof Proxy === 'undefined'\n ? {}\n : new Proxy(unwrappedState, {\n get(_, propName) {\n return get(propName);\n },\n ownKeys(_) {\n return Array.from(states.keys());\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n };\n },\n has(_, propName) {\n return states.has(propName);\n },\n set(_, propName, value) {\n set(propName, value);\n return true;\n },\n }));\n const on = (eventName, callback) => {\n handlers[eventName].push(callback);\n return () => {\n removeFromArray(handlers[eventName], callback);\n };\n };\n const onChange = (propName, cb) => {\n const unSet = on('set', (key, newValue) => {\n if (key === propName) {\n cb(newValue);\n }\n });\n // We need to unwrap the defaultState because it might be a function.\n // Otherwise we might not be sending the right reset value.\n const unReset = on('reset', () => cb(unwrap(defaultState)[propName]));\n return () => {\n unSet();\n unReset();\n };\n };\n const use = (...subscriptions) => {\n const unsubs = subscriptions.reduce((unsubs, subscription) => {\n if (subscription.set) {\n unsubs.push(on('set', subscription.set));\n }\n if (subscription.get) {\n unsubs.push(on('get', subscription.get));\n }\n if (subscription.reset) {\n unsubs.push(on('reset', subscription.reset));\n }\n if (subscription.dispose) {\n unsubs.push(on('dispose', subscription.dispose));\n }\n return unsubs;\n }, []);\n return () => unsubs.forEach((unsub) => unsub());\n };\n const forceUpdate = (key) => {\n const oldValue = states.get(key);\n handlers.set.forEach((cb) => cb(key, oldValue, oldValue));\n };\n return {\n state,\n get,\n set,\n on,\n onChange,\n use,\n dispose,\n reset,\n forceUpdate,\n };\n};\nconst removeFromArray = (array, item) => {\n const index = array.indexOf(item);\n if (index >= 0) {\n array[index] = array[array.length - 1];\n array.length--;\n }\n};\n\nconst createStore = (defaultState, shouldUpdate) => {\n const map = createObservableMap(defaultState, shouldUpdate);\n map.use(stencilSubscription());\n return map;\n};\n\nexport { createObservableMap, createStore };\n","import { createStore } from \"@stencil/store\";\r\nimport { Language } from \"./components\";\r\n\r\nexport interface Settings {\r\n language: Language;\r\n rowSpacing: number;\r\n columnSpacing: number;\r\n borderInset: number;\r\n heatPumpM2Consumption: number;\r\n}\r\n\r\nexport interface State {\r\n latitude: number | null;\r\n longitude: number | null;\r\n radiusMeters: number;\r\n settings: Settings;\r\n settingsVersion: number;\r\n}\r\n\r\nconst {state, onChange} = createStore<State>({\r\n latitude: 40.581614,\r\n longitude: -4.128423,\r\n radiusMeters: 15,\r\n settings: {\r\n language: \"en\",\r\n rowSpacing: 1,\r\n columnSpacing: 1,\r\n borderInset: 0,\r\n heatPumpM2Consumption: 85,\r\n },\r\n settingsVersion: 1,\r\n});\r\n\r\nonChange(\"latitude\", (value) => {\r\n state.latitude = value;\r\n});\r\n\r\nonChange(\"longitude\", (value) => {\r\n state.longitude = value;\r\n});\r\n\r\nonChange(\"radiusMeters\", (value) => {\r\n state.radiusMeters = value;\r\n});\r\n\r\nonChange(\"settings\", (value) => {\r\n state.settings = value;\r\n});\r\n\r\nonChange(\"settingsVersion\", (value) => {\r\n state.settingsVersion = value;\r\n});\r\n\r\nexport {state, onChange};\r\n"],"names":[],"mappings":"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","x_google_ignoreList":[4]}