blue-chestnut-solar-expert 0.0.63 → 0.0.65
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_19.cjs.entry.js +1 -1
- package/dist/cjs/{lerc-Cg9Ef4kN.js → lerc-CweSdQV9.js} +3 -3
- package/dist/cjs/{lerc-Cg9Ef4kN.js.map → lerc-CweSdQV9.js.map} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/loading-widget.cjs.entry.js +2 -2
- package/dist/cjs/loading-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/loading-widget.entry.cjs.js.map +1 -1
- package/dist/cjs/stencil-library.cjs.js +1 -1
- package/dist/collection/components/map-draw/map-draw.js +16 -47
- package/dist/collection/components/map-draw/map-draw.js.map +1 -1
- package/dist/collection/components/map-draw/map-selector.js +3 -3
- package/dist/collection/components/map-draw/polygon-buttons.js +1 -1
- package/dist/collection/components/map-draw/polygon-information.js +18 -11
- package/dist/collection/components/map-draw/polygon-information.js.map +1 -1
- package/dist/collection/components/map-draw/tool-box.js +3 -3
- package/dist/collection/components/map-draw/tutorial-component.js +3 -3
- package/dist/collection/components/settings/settings.js +8 -8
- package/dist/collection/components/solar-expert/solar-expert.js +3 -1
- package/dist/collection/components/solar-expert/solar-expert.js.map +1 -1
- package/dist/collection/components/solar-system-form/solar-system-form.js +37 -38
- package/dist/collection/components/solar-system-form/solar-system-form.js.map +1 -1
- package/dist/collection/components/widgets/loading-widget.js +1 -1
- package/dist/collection/output.css +17 -52
- package/dist/collection/types/lang.js.map +1 -1
- package/dist/collection/utils/lang/english.js +1 -0
- package/dist/collection/utils/lang/english.js.map +1 -1
- package/dist/collection/utils/lang/german.js +1 -0
- package/dist/collection/utils/lang/german.js.map +1 -1
- package/dist/collection/utils/lang/spanish.js +1 -0
- package/dist/collection/utils/lang/spanish.js.map +1 -1
- package/dist/collection/utils/solar.js +1 -0
- package/dist/collection/utils/solar.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/loading-widget.js +2 -2
- package/dist/components/loading-widget.js.map +1 -1
- package/dist/components/map-draw.js +1 -1
- package/dist/components/map-selector.js +1 -1
- package/dist/components/marker-icon.js +1 -1
- package/dist/components/move-icon.js +1 -1
- package/dist/components/octagon-minus-icon.js +1 -1
- package/dist/components/p-BJLO76Yi.js +40 -0
- package/dist/components/p-BJLO76Yi.js.map +1 -0
- package/dist/components/p-BXoz2zXG.js +47 -0
- package/dist/components/p-BXoz2zXG.js.map +1 -0
- package/dist/components/{p-BsvvtnQe.js → p-B_6Ue-UQ.js} +5 -2
- package/dist/components/p-B_6Ue-UQ.js.map +1 -0
- package/dist/components/p-C5QieOat.js +114 -0
- package/dist/components/p-C5QieOat.js.map +1 -0
- package/dist/components/{p-kbMAsJ_s.js → p-CCG3fXg3.js} +45 -43
- package/dist/components/p-CCG3fXg3.js.map +1 -0
- package/dist/components/p-CE2V-avM.js +623 -0
- package/dist/components/p-CE2V-avM.js.map +1 -0
- package/dist/components/p-CL74Q4VR.js +40 -0
- package/dist/components/p-CL74Q4VR.js.map +1 -0
- package/dist/components/p-CN8xBdHM.js +76 -0
- package/dist/components/p-CN8xBdHM.js.map +1 -0
- package/dist/components/{p-CIfpd0H7.js → p-Cl7aThVr.js} +38 -68
- package/dist/components/p-Cl7aThVr.js.map +1 -0
- package/dist/components/p-D8w3bTPO.js +40 -0
- package/dist/components/p-D8w3bTPO.js.map +1 -0
- package/dist/components/p-DBwr8xSB.js +40 -0
- package/dist/components/p-DBwr8xSB.js.map +1 -0
- package/dist/components/p-DDmNiupX.js +121 -0
- package/dist/components/p-DDmNiupX.js.map +1 -0
- package/dist/components/{p-UhBaEaSb.js → p-DRV0Pmhs.js} +3 -3
- package/dist/components/{p-UhBaEaSb.js.map → p-DRV0Pmhs.js.map} +1 -1
- package/dist/components/p-DTXeHbuh.js +40 -0
- package/dist/components/p-DTXeHbuh.js.map +1 -0
- package/dist/components/p-FdEV2qPo.js +40 -0
- package/dist/components/p-FdEV2qPo.js.map +1 -0
- package/dist/components/p-Ooow0N-g.js +89 -0
- package/dist/components/p-Ooow0N-g.js.map +1 -0
- package/dist/components/p-P28NBglk.js +86 -0
- package/dist/components/p-P28NBglk.js.map +1 -0
- package/dist/components/p-QhOsRYRe.js +163 -0
- package/dist/components/p-QhOsRYRe.js.map +1 -0
- package/dist/components/p-Umz6nJIv.js +40 -0
- package/dist/components/p-Umz6nJIv.js.map +1 -0
- package/dist/components/p-waOPoUcA.js +40 -0
- package/dist/components/p-waOPoUcA.js.map +1 -0
- package/dist/components/polygon-buttons.js +1 -1
- package/dist/components/polygon-information.js +1 -1
- package/dist/components/search-icon.js +1 -1
- package/dist/components/settings-icon.js +1 -1
- package/dist/components/settings-modal.js +1 -1
- package/dist/components/solar-expert.js +23 -21
- package/dist/components/solar-expert.js.map +1 -1
- package/dist/components/solar-system-form.js +1 -1
- package/dist/components/toast-notification.js +1 -1
- package/dist/components/tool-box.js +1 -1
- package/dist/components/tutorial-component.js +1 -1
- package/dist/components/undo-icon.js +1 -1
- package/dist/esm/eraser-icon_19.entry.js +1 -1
- package/dist/esm/{lerc-D1ySec2h.js → lerc-D7wRie33.js} +3 -3
- package/dist/esm/{lerc-D1ySec2h.js.map → lerc-D7wRie33.js.map} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/loading-widget.entry.js +2 -2
- package/dist/esm/loading-widget.entry.js.map +1 -1
- package/dist/esm/stencil-library.js +1 -1
- package/dist/stencil-library/loading-widget.entry.esm.js.map +1 -1
- package/dist/stencil-library/{p-ea3fd08c.entry.js → p-05a58ef0.entry.js} +2 -2
- package/dist/stencil-library/{p-r7aBltoS.js → p-CcRwkRDp.js} +4 -4
- package/dist/stencil-library/{p-r7aBltoS.js.map → p-CcRwkRDp.js.map} +1 -1
- package/dist/stencil-library/p-D3ZsxpeN.js +2 -0
- package/dist/stencil-library/p-D3ZsxpeN.js.map +1 -0
- package/dist/stencil-library/p-ab0f2031.entry.js +2 -0
- package/dist/stencil-library/p-ab0f2031.entry.js.map +1 -0
- package/dist/stencil-library/stencil-library.esm.js +1 -1
- package/dist/types/components/map-draw/map-draw.d.ts +1 -4
- package/dist/types/components/map-draw/polygon-information.d.ts +1 -0
- package/dist/types/types/lang.d.ts +1 -0
- package/package.json +1 -1
- package/dist/components/p-6t2i7GOy.js +0 -163
- package/dist/components/p-6t2i7GOy.js.map +0 -1
- package/dist/components/p-B2W-WTcd.js +0 -47
- package/dist/components/p-B2W-WTcd.js.map +0 -1
- package/dist/components/p-Bl-OxMMK.js +0 -40
- package/dist/components/p-Bl-OxMMK.js.map +0 -1
- package/dist/components/p-BsvvtnQe.js.map +0 -1
- package/dist/components/p-BzU0ssT8.js +0 -40
- package/dist/components/p-BzU0ssT8.js.map +0 -1
- package/dist/components/p-C241_R3r.js +0 -623
- package/dist/components/p-C241_R3r.js.map +0 -1
- package/dist/components/p-CBoVsYa-.js +0 -40
- package/dist/components/p-CBoVsYa-.js.map +0 -1
- package/dist/components/p-CIfpd0H7.js.map +0 -1
- package/dist/components/p-CuNvbl9l.js +0 -40
- package/dist/components/p-CuNvbl9l.js.map +0 -1
- package/dist/components/p-CuhV6w4i.js +0 -40
- package/dist/components/p-CuhV6w4i.js.map +0 -1
- package/dist/components/p-CwFdd3zn.js +0 -86
- package/dist/components/p-CwFdd3zn.js.map +0 -1
- package/dist/components/p-D3H70xDr.js +0 -40
- package/dist/components/p-D3H70xDr.js.map +0 -1
- package/dist/components/p-DIii3RoN.js +0 -76
- package/dist/components/p-DIii3RoN.js.map +0 -1
- package/dist/components/p-DPHbqum8.js +0 -114
- package/dist/components/p-DPHbqum8.js.map +0 -1
- package/dist/components/p-DXQvpFgv.js +0 -114
- package/dist/components/p-DXQvpFgv.js.map +0 -1
- package/dist/components/p-DnjGygv7.js +0 -89
- package/dist/components/p-DnjGygv7.js.map +0 -1
- package/dist/components/p-DxfT4KzX.js +0 -40
- package/dist/components/p-DxfT4KzX.js.map +0 -1
- package/dist/components/p-gYPKei39.js +0 -40
- package/dist/components/p-gYPKei39.js.map +0 -1
- package/dist/components/p-kbMAsJ_s.js.map +0 -1
- package/dist/stencil-library/p-Tmp2o-vp.js +0 -2
- package/dist/stencil-library/p-Tmp2o-vp.js.map +0 -1
- package/dist/stencil-library/p-c2c69c28.entry.js +0 -2
- package/dist/stencil-library/p-c2c69c28.entry.js.map +0 -1
- /package/dist/stencil-library/{p-ea3fd08c.entry.js.map → p-05a58ef0.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solar-system-form.js","sourceRoot":"","sources":["../../../src/components/solar-system-form/solar-system-form.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Watch } from \"@stencil/core\";\nimport { DEFAULT_SOLAR_PANEL_TYPE } from \"../../config\";\nimport { getLanguageStrings } from \"../../utils/lang/general\";\nimport { Polygon } from \"harmonia-types\";\nimport { state } from \"../../store\";\nimport { SimulationConfig, SolarSystem } from \"harmonia-sim\";\nimport { generateElectricCarChargingHours, simulate } from \"harmonia-sim\";\nimport { HEAT_PUMP_CONSUMPTION } from \"../../constants\";\nimport { LeadData, sendLeadToNexvoro } from \"../../utils/api\";\n\n@Component({\n tag: \"solar-system-form\",\n styleUrl: \"../../output.css\",\n shadow: false,\n})\nexport class SolarSystemForm {\n @Prop()\n systemConfigs: { [id: string]: SolarSystem } = {};\n @Prop()\n polygons: Polygon[] = [];\n @Prop()\n roofCanvas: HTMLCanvasElement;\n @Prop()\n polygonCanvas: HTMLCanvasElement;\n\n @State()\n householdConsumption: number = 4500;\n @State()\n consumptionProfile: \"mostly_at_home\" | \"mostly_away\" = \"mostly_at_home\";\n @State()\n electricityPrice: number = 0.3;\n @State()\n compensationRate: number = 0.07;\n @State()\n annualPriceIncrease: number = 2;\n @State()\n autonomy: number = 0;\n @State()\n costSavings: number = 0;\n @State()\n numberOfPanels: number = 5;\n @State()\n panelPeakPower: number = 0.4; // kW per panel\n @State()\n name: string = \"\";\n @State()\n email: string = \"\";\n @State()\n phone: string = \"\";\n @State()\n nameError: string = \"\";\n @State()\n emailError: string = \"\";\n @State()\n phoneError: string = \"\";\n @State()\n electricCar: boolean = false;\n @State()\n electricCarChargingTime: \"day\" | \"night\" = \"day\";\n @State()\n heatPump: number = 0;\n @State()\n battery: number = 0;\n\n @State()\n compensation20Years: number = 0;\n @State()\n savedCosts20Years: number = 0;\n @State()\n maxPanels: number = 5;\n @State()\n kmDrivenPerYear: number = 10000;\n @State()\n totalEnergyConsumption: number = 4500;\n @State()\n totalEnergyProduction: number = 0;\n @State()\n isSubmitting: boolean = false;\n @State()\n submitMessage: string = \"\";\n @State()\n submitSuccess: boolean = false;\n\n @Watch(\"systemConfigs\")\n updateSystemConfigs() {\n if (Object.keys(this.systemConfigs).length === 0) {\n this.numberOfPanels = 0;\n this.maxPanels = 0;\n return;\n }\n this.numberOfPanels = Object.keys(this.systemConfigs).reduce(\n (acc, curr) => acc + this.systemConfigs[curr].numberOfPanels,\n 0,\n );\n this.maxPanels = Object.keys(this.systemConfigs).reduce(\n (acc, curr) => acc + this.systemConfigs[curr].numberOfPanels,\n 0,\n );\n\n this.panelPeakPower = Object.entries(this.systemConfigs)[0][1][0]\n ?.panel.kWattPeak ?? 0.44;\n\n this.recalculate();\n }\n\n private formatEuropeanNumber(num: number, decimals: number = 2): string {\n const fixed = num.toFixed(decimals);\n const [integerPart, decimalPart] = fixed.split(\".\");\n\n // Add dots as thousands separators\n const formattedInteger = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n \".\",\n );\n\n // Join with comma as decimal separator\n return decimalPart\n ? `${formattedInteger},${decimalPart}`\n : formattedInteger;\n }\n\n private recalculate() {\n const currentSystemConfigs = {};\n let totalNumberOfPanels = 0;\n for (const [key, value] of Object.entries(this.systemConfigs)) {\n if (totalNumberOfPanels >= this.numberOfPanels) {\n break;\n }\n if (\n value.numberOfPanels + totalNumberOfPanels > this.numberOfPanels\n ) {\n currentSystemConfigs[key] = {\n ...value,\n numberOfPanels: this.numberOfPanels - totalNumberOfPanels,\n };\n totalNumberOfPanels = this.numberOfPanels;\n } else {\n currentSystemConfigs[key] = value;\n totalNumberOfPanels += value.numberOfPanels;\n }\n }\n\n const simulationConfig: SimulationConfig = {\n general: {\n simulationYears: 20,\n },\n householdConsumption: {\n consumptionProfile: this.consumptionProfile,\n winterConsumptionFactor: 1.4,\n summerConsumptionFactor: 0.6,\n averageConsumption: this.householdConsumption / 365,\n },\n electricityPrice: {\n purchase: this.electricityPrice,\n sell: this.compensationRate,\n increase: this.annualPriceIncrease / 100,\n },\n solarSystems: currentSystemConfigs,\n batteryKWh: this.battery,\n solarRadiation: {\n winterFactor: 0.2,\n summerFactor: 0.6,\n },\n heatPump: {\n m2: this.heatPump,\n consumptionPerM2: HEAT_PUMP_CONSUMPTION / 365,\n },\n electricCar: this.electricCar\n ? {\n averageKilometersPerDay: this.kmDrivenPerYear / 365,\n consumptionkWhPer100km: 20,\n batteryKWh: 80,\n chargingHours: this.electricCarChargingTime === \"day\"\n ? generateElectricCarChargingHours(6, 18)\n : generateElectricCarChargingHours(18, 6),\n }\n : undefined,\n };\n\n const result = simulate(simulationConfig);\n\n this.compensation20Years = result.compensationPerDay * 365 * 20;\n this.savedCosts20Years = result.byYearSavedCosts.reduce(\n (acc, curr) => acc + curr,\n 0,\n ) + this.compensation20Years;\n this.costSavings = result.byYearSavedCosts[0];\n this.autonomy = result.autonomy * 100;\n this.totalEnergyConsumption = result.totalEnergyConsumptionDay * 365;\n // Calculate total energy production based on compensation and rate\n this.totalEnergyProduction =\n (result.compensationPerDay / this.compensationRate) * 365;\n }\n\n componentWillLoad() {\n this.updateSystemConfigs();\n }\n\n private validateForm(): boolean {\n let isValid = true;\n const t = getLanguageStrings(state.settings.language);\n\n // Validate name\n if (!this.name.trim()) {\n this.nameError = t.solarSystemForm.nameError;\n isValid = false;\n } else {\n this.nameError = \"\";\n }\n\n // Validate email\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!this.email.trim()) {\n this.emailError = t.solarSystemForm.emailError;\n isValid = false;\n } else if (!emailRegex.test(this.email)) {\n this.emailError = t.solarSystemForm.validEmailError;\n isValid = false;\n } else {\n this.emailError = \"\";\n }\n\n // Validate phone (optional)\n const phoneRegex = /^[\\+]?[1-9][\\d]{0,15}$/;\n if (\n this.phone.trim() &&\n !phoneRegex.test(this.phone.replace(/[\\s\\-\\(\\)]/g, \"\"))\n ) {\n this.phoneError = t.solarSystemForm.phoneError;\n isValid = false;\n } else {\n this.phoneError = \"\";\n }\n\n return isValid;\n }\n\n private async handleRequestOffer() {\n if (!this.validateForm()) {\n return;\n }\n\n this.isSubmitting = true;\n this.submitMessage = \"\";\n this.submitSuccess = false;\n\n const t = getLanguageStrings(state.settings.language);\n\n try {\n const leadData: LeadData = {\n location: {\n name: state.location,\n latitude: state.latitude,\n longitude: state.longitude,\n },\n systemConfig: {\n maxNumberOfPanels: this.maxPanels,\n panelPeakPower: this.panelPeakPower,\n polygons: this.polygons,\n solarSystems: this.systemConfigs,\n electricityPrice: this.electricityPrice,\n compensationRate: this.compensationRate,\n annualPriceIncrease: this.annualPriceIncrease,\n },\n client: {\n name: this.name,\n email: this.email,\n phone: this.phone,\n consumption: this.householdConsumption,\n consumptionProfile: this.consumptionProfile,\n hasBattery: this.battery > 0,\n battery: this.battery,\n hasHeatPump: this.heatPump > 0,\n heatPumpM2: this.heatPump,\n hasElectricCar: this.electricCar,\n electricCarChargingTime: this.electricCarChargingTime,\n electricCarKmPerYear: this.kmDrivenPerYear,\n },\n images: {\n roof: this.roofCanvas.toDataURL(),\n polygon: this.polygonCanvas.toDataURL(),\n },\n results: {\n autonomy: this.autonomy,\n costSavings: this.costSavings,\n compensation20Years: this.compensation20Years,\n savedCosts20Years: this.savedCosts20Years,\n totalEnergyConsumption: this.totalEnergyConsumption,\n },\n };\n console.log(\"leadData\", leadData);\n const result = await sendLeadToNexvoro(leadData);\n\n this.submitSuccess = result.success;\n\n if (result.success) {\n console.log(\"Lead successfully sent to Nexvoro\", result);\n this.submitMessage = t.solarSystemForm.leadSubmitted;\n // Optionally reset form or show success message\n } else {\n console.error(\n \"Failed to send lead to Nexvoro:\",\n result.message,\n );\n this.submitMessage = t.solarSystemForm.leadError;\n }\n } catch (error) {\n console.error(\"Error in handleRequestOffer:\", error);\n this.submitSuccess = false;\n this.submitMessage = error instanceof Error\n ? error.message\n : \"An unexpected error occurred\";\n } finally {\n this.isSubmitting = false;\n }\n }\n\n private isIOS(): boolean {\n return state.isIOS;\n }\n\n render() {\n const t = getLanguageStrings(state.settings.language);\n\n // Reusable style objects\n const borderStyle = { border: \"1px solid var(--color-border)\" };\n const errorBorderStyle = { border: \"1px solid var(--color-error)\" };\n\n return (\n <div\n class=\"flex flex-col justify-center items-center w-full h-full pt-4\" // style={{\n // display: (Object.keys(this.systemConfigs).length === 0)\n // ? \"none\"\n // : \"flex\",\n // }}\n id=\"solar-system-form\"\n >\n <h1 class=\"text-2xl font-bold text-secondary mb-4 w-full\">\n {t.solarSystemForm.title}\n </h1>\n\n <div class=\"w-full bg-primary rounded-4xl space-y-6\">\n {/* System Info Section */}\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.systemInformation}\n </h2>\n <div class=\"flex flex-col sm:flex-row gap-4\">\n {/* Number of Panels */}\n <div class=\"flex-1 bg-muted rounded-4xl p-4 space-y-3\">\n <div class=\"flex items-center justify-between\">\n <label class=\"text-sm font-medium text-text-muted\">\n {t.solarSystemForm.numberOfPanels}\n </label>\n {!this.isIOS()\n ? (\n <input\n type=\"number\"\n class=\"w-20 px-3 py-1 rounded-full bg-muted text-muted-foreground text-right\"\n value={this.numberOfPanels}\n readOnly\n />\n )\n : (\n <input\n type=\"number\"\n min=\"1\"\n max={this.maxPanels}\n class=\"w-20 px-3 py-1 rounded-full focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground text-center\"\n style={borderStyle}\n value={this.numberOfPanels}\n onInput={(e) => {\n const value = parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n if (\n value >= 1 &&\n value <=\n this.maxPanels\n ) {\n this.numberOfPanels =\n value;\n this.recalculate();\n }\n }}\n />\n )}\n </div>\n {!this.isIOS() && (\n <input\n type=\"range\"\n min=\"1\"\n max={this.maxPanels}\n step=\"1\"\n class=\"input-slider w-full custom-range appearance-none rounded-full bg-transparent [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-black/25 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:h-[10px] [&::-webkit-slider-thumb]:w-[10px] [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-muted\"\n value={this.numberOfPanels}\n onInput={(e) => {\n this.numberOfPanels = parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n )}\n </div>\n\n {/* Panel Peak Power */}\n <div class=\"flex-1 bg-muted rounded-4xl p-4\">\n <div class=\"flex items-center justify-between\">\n <label class=\"text-sm font-medium text-text-muted\">\n {t.solarSystemForm.panelPeakPower}\n </label>\n <span class=\"text-text-muted\">\n {this.panelPeakPower.toFixed(2)} kW\n </span>\n </div>\n <div class=\"flex items-center justify-between mt-4\">\n <span class=\"text-sm font-medium text-text-muted\">\n {t.solarSystemForm.totalSystemPeakPower}\n </span>\n <span class=\"font-bold text-text-muted\">\n {(DEFAULT_SOLAR_PANEL_TYPE.kWattPeak *\n this.numberOfPanels).toFixed(1)} kWp\n </span>\n </div>\n </div>\n </div>\n </div>\n {/* Household Consumption Section */}\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.householdConsumptionTitle}\n </h2>\n <div class=\"grid grid-rows-2 gap-0\">\n <div class=\"grid grid-cols-2 gap-4\">\n <label class=\"block text-sm font-medium text-text-muted\">\n {t.solarSystemForm.annualConsumption}\n </label>\n <label class=\"block text-sm font-medium text-text-muted\">\n {t.solarSystemForm.consumptionProfileTitle}\n </label>\n </div>\n <div class=\"grid grid-cols-2 gap-4\">\n <input\n type=\"number\"\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground\"\n style={borderStyle}\n value={this.householdConsumption}\n onInput={(e) => {\n this.householdConsumption = parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n <select\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground\"\n style={borderStyle}\n onChange={(e) => {\n this.consumptionProfile =\n (e.target as HTMLSelectElement)\n .value as\n | \"mostly_at_home\"\n | \"mostly_away\";\n this.recalculate();\n }}\n >\n <option\n value=\"mostly_at_home\"\n selected={this.consumptionProfile ===\n \"mostly_at_home\"}\n >\n {t.solarSystemForm.consumptionProfiles\n .mostlyAtHome}\n </option>\n <option\n value=\"mostly_away\"\n selected={this.consumptionProfile ===\n \"mostly_away\"}\n >\n {t.solarSystemForm.consumptionProfiles\n .mostlyAway}\n </option>\n </select>\n </div>\n </div>\n {\n /* <div class=\"mt-4 h-48\">\n <canvas ref={(el) => this.chartRef = el}></canvas>\n </div> */\n }\n </div>\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.additionalComponents.title}\n </h2>\n <div class=\"flex flex-col gap-4\">\n {/* Heat Pump Section */}\n <div class=\"flex flex-col bg-muted rounded-4xl p-4 gap-4\">\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"heatPump\"\n class=\"w-4 h-4 accent-tertiary border-border rounded-full focus:ring-tertiary focus:ring-offset-0 focus:ring-2\"\n checked={this.heatPump > 0}\n onChange={(e) => {\n this.heatPump =\n (e.target as HTMLInputElement)\n .checked\n ? 100\n : 0;\n this.recalculate();\n }}\n />\n <label\n htmlFor=\"heatPump\"\n class=\"text-text-muted\"\n >\n {t.solarSystemForm\n .additionalComponents\n .heatPump}\n </label>\n </div>\n {(this.heatPump > 0 && !this.isIOS()) && (\n <span class=\"text-text-muted\">\n {this.heatPump} m²\n </span>\n )}\n </div>\n {this.heatPump > 0 && (\n <div class=\"flex flex-col gap-2\">\n {this.isIOS()\n ? (\n <div class=\"flex items-center gap-2\">\n <input\n type=\"number\"\n min=\"10\"\n max=\"300\"\n step=\"10\"\n class=\"flex-1 px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n style={borderStyle}\n value={this.heatPump}\n onInput={(e) => {\n const value =\n parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n if (\n value >= 10 &&\n value <= 300\n ) {\n this.heatPump =\n value;\n this.recalculate();\n }\n }}\n />\n <span class=\"text-sm text-text-muted\">\n m²\n </span>\n </div>\n )\n : (\n <input\n type=\"range\"\n min=\"10\"\n max=\"300\"\n step=\"10\"\n class=\"input-slider custom-range appearance-none rounded-full bg-transparent [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-black/25 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:h-[10px] [&::-webkit-slider-thumb]:w-[10px] [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-muted\"\n value={this.heatPump}\n onInput={(e) => {\n this.heatPump =\n parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n )}\n </div>\n )}\n </div>\n\n {/* Electric Car Section */}\n <div class=\"flex flex-col bg-muted rounded-4xl p-4 gap-4\">\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"electricCar\"\n class=\"w-4 h-4 accent-tertiary border-border rounded focus:ring-tertiary focus:ring-offset-0 focus:ring-2\"\n checked={this.electricCar}\n onChange={(e) => {\n this.electricCar =\n (e.target as HTMLInputElement)\n .checked;\n this.recalculate();\n }}\n />\n <label\n htmlFor=\"electricCar\"\n class=\"text-text-muted\"\n >\n {t.solarSystemForm\n .additionalComponents\n .electricCar}\n </label>\n </div>\n </div>\n {this.electricCar && (\n <div class=\"flex flex-col gap-2\">\n <div class=\"grid grid-cols-2 gap-4\">\n <label class=\"text-sm text-text-muted\">\n {t.solarSystemForm\n .additionalComponents\n .chargingTime}\n </label>\n <label class=\"text-sm text-text-muted\">\n {t.solarSystemForm\n .additionalComponents\n .kilometersPerYear}\n </label>\n </div>\n <div class=\"grid grid-cols-2 gap-4\">\n <select\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n onChange={(e) => {\n this.electricCarChargingTime =\n (e.target as HTMLSelectElement)\n .value as\n | \"day\"\n | \"night\";\n this.recalculate();\n }}\n style={borderStyle}\n >\n <option\n value=\"day\"\n selected={this\n .electricCarChargingTime ===\n \"day\"}\n >\n {t.solarSystemForm\n .additionalComponents\n .chargingTimeDay}\n </option>\n <option\n value=\"night\"\n selected={this\n .electricCarChargingTime ===\n \"night\"}\n >\n {t.solarSystemForm\n .additionalComponents\n .chargingTimeNight}\n </option>\n </select>\n <input\n type=\"number\"\n min=\"1000\"\n max=\"50000\"\n step=\"1000\"\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n value={this.kmDrivenPerYear}\n onInput={(e) => {\n this.kmDrivenPerYear =\n parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n style={borderStyle}\n />\n </div>\n </div>\n )}\n </div>\n\n {/* Battery Section */}\n <div class=\"flex flex-col bg-muted rounded-4xl p-4 gap-4\">\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"battery\"\n class=\"w-4 h-4 accent-tertiary border-border rounded-full focus:ring-tertiary focus:ring-offset-0 focus:ring-2\"\n checked={this.battery > 0}\n onChange={(e) => {\n this.battery =\n (e.target as HTMLInputElement)\n .checked\n ? 5\n : 0;\n this.recalculate();\n }}\n />\n <label\n htmlFor=\"battery\"\n class=\"text-text-muted\"\n >\n {t.solarSystemForm\n .additionalComponents\n .battery}\n </label>\n </div>\n {(this.battery > 0 && !this.isIOS()) && (\n <span class=\"text-text-muted\">\n {this.battery} kWh\n </span>\n )}\n </div>\n {this.battery > 0 && (\n <div class=\"flex flex-col gap-2\">\n {this.isIOS()\n ? (\n <div class=\"flex items-center gap-2\">\n <input\n type=\"number\"\n min=\"1\"\n max=\"20\"\n step=\"1\"\n class=\"flex-1 px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n value={this.battery}\n onInput={(e) => {\n const value =\n parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n if (\n value >= 1 &&\n value <= 20\n ) {\n this.battery =\n value;\n this.recalculate();\n }\n }}\n style={borderStyle}\n />\n <span class=\"text-sm text-text-muted\">\n kWh\n </span>\n </div>\n )\n : (\n <input\n type=\"range\"\n min=\"1\"\n max=\"20\"\n step=\"1\"\n class=\"input-slider w-full custom-range appearance-none rounded-full bg-transparent [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-black/25 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:h-[10px] [&::-webkit-slider-thumb]:w-[10px] [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-muted\"\n value={this.battery}\n onInput={(e) => {\n this.battery = parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Electricity Price and Compensation Section */}\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.electricityCostsTitle}\n </h2>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns:\n \"repeat(auto-fit, minmax(250px, 1fr))\",\n gap: \"1rem\",\n }}\n >\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.electricityPrice}\n </label>\n <input\n type=\"number\"\n step=\"0.01\"\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n style={borderStyle}\n value={this.electricityPrice.toFixed(2)}\n onInput={(e) => {\n this.electricityPrice = parseFloat(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n </div>\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.compensationRate}\n </label>\n <input\n type=\"number\"\n step=\"0.01\"\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n style={borderStyle}\n value={this.compensationRate.toFixed(2)}\n onInput={(e) => {\n this.compensationRate = parseFloat(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n </div>\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.annualPriceIncrease}\n </label>\n <input\n type=\"number\"\n step=\"0.1\"\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n style={borderStyle}\n value={this.annualPriceIncrease.toFixed(1)}\n onInput={(e) => {\n this.annualPriceIncrease = parseFloat(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n </div>\n </div>\n </div>\n\n {/* Results Section */}\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.resultsTitle}\n </h2>\n <div class=\"bg-muted rounded-4xl p-4\">\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm.autonomy}\n </span>\n <span class=\"text-xl font-bold text-secondary mt-1 sm:mt-0\">\n {this.autonomy > 100\n ? \"100\"\n : this.formatEuropeanNumber(\n this.autonomy,\n 1,\n )}%\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between mt-4\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm.totalEnergyConsumption}\n </span>\n <span class=\"text-xl font-bold text-secondary mt-1 sm:mt-0\">\n {this.formatEuropeanNumber(\n this.totalEnergyConsumption,\n 0,\n )} kWh/{t.solarSystemForm.year}\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between mt-4\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm.totalEnergyProduction}\n </span>\n <span class=\"text-xl font-bold text-secondary mt-1 sm:mt-0\">\n {this.formatEuropeanNumber(\n this.totalEnergyProduction,\n 0,\n )} kWh/{t.solarSystemForm.year}\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between mt-4\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm.costSavings}\n </span>\n </div>\n <span class=\"text-xl font-bold text-success mt-1 sm:mt-0\">\n {this.formatEuropeanNumber(\n this.costSavings,\n )}€/{t\n .solarSystemForm.year}\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between mt-4\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm.compensation20Years}\n </span>\n </div>\n <span class=\"text-xl font-bold text-success mt-1 sm:mt-0\">\n {this.formatEuropeanNumber(\n this.compensation20Years,\n )}€\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between mt-4\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm\n .monetaryBenefit20Years}\n </span>\n </div>\n <span class=\"text-xl font-bold text-success mt-1 sm:mt-0\">\n {this.formatEuropeanNumber(\n this.savedCosts20Years,\n )}€\n </span>\n </div>\n </div>\n </div>\n\n {/* Contact Information Section */}\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.requestOffer}\n </h2>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns:\n \"repeat(auto-fit, minmax(250px, 1fr))\",\n gap: \"1rem\",\n }}\n >\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.name}\n </label>\n <input\n type=\"text\"\n class={`w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground`}\n style={this.nameError\n ? errorBorderStyle\n : borderStyle}\n value={this.name}\n onInput={(e) => {\n this.name =\n (e.target as HTMLInputElement)\n .value;\n this.validateForm();\n }}\n placeholder=\"Your name\"\n />\n {this.nameError && (\n <p class=\"text-error text-sm mt-1\">\n {this.nameError}\n </p>\n )}\n </div>\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.email}\n </label>\n <input\n type=\"email\"\n class={`w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground`}\n style={this.emailError\n ? errorBorderStyle\n : borderStyle}\n value={this.email}\n onInput={(e) => {\n this.email =\n (e.target as HTMLInputElement)\n .value;\n this.validateForm();\n }}\n placeholder=\"your.email@example.com\"\n />\n {this.emailError && (\n <p class=\"text-error text-sm mt-1\">\n {this.emailError}\n </p>\n )}\n </div>\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.phone}\n </label>\n <input\n type=\"tel\"\n class={`w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground`}\n style={this.phoneError\n ? errorBorderStyle\n : borderStyle}\n value={this.phone}\n onInput={(e) => {\n this.phone =\n (e.target as HTMLInputElement)\n .value;\n this.validateForm();\n }}\n placeholder=\"+34 123 456 789\"\n />\n {this.phoneError && (\n <p class=\"text-error text-sm mt-1\">\n {this.phoneError}\n </p>\n )}\n </div>\n </div>\n <div class=\"flex flex-col items-center gap-4\">\n <button\n onClick={() => this.handleRequestOffer()}\n disabled={!this.name.trim() ||\n !this.email.trim() || !!this.nameError ||\n !!this.emailError || !!this.phoneError ||\n this.isSubmitting}\n class={`px-6 py-3 rounded-4xl transition-colors duration-200 flex items-center gap-2 ${\n this.isSubmitting\n ? \"bg-muted text-text-muted cursor-not-allowed\"\n : \"bg-secondary hover:bg-tertiary\"\n }`}\n style={{\n color: this.isSubmitting\n ? \"var(--color-text-muted)\"\n : \"#ffffff\",\n }}\n >\n {this.isSubmitting && (\n <div class=\"w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin\">\n </div>\n )}\n {this.isSubmitting\n ? t.solarSystemForm.sending\n : t.solarSystemForm.requestOfferButton}\n </button>\n\n {this.submitMessage && (\n <div\n class={`text-sm px-4 py-2 rounded-4xl ${\n this.submitSuccess\n ? \"bg-success/10 text-success border border-success/20\"\n : \"bg-error/10 text-error border border-error/20\"\n }`}\n >\n {this.submitMessage}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"solar-system-form.js","sourceRoot":"","sources":["../../../src/components/solar-system-form/solar-system-form.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Watch } from \"@stencil/core\";\nimport { DEFAULT_SOLAR_PANEL_TYPE } from \"../../config\";\nimport { getLanguageStrings } from \"../../utils/lang/general\";\nimport { Polygon } from \"harmonia-types\";\nimport { state } from \"../../store\";\nimport { SimulationConfig, SolarSystem } from \"harmonia-sim\";\nimport { generateElectricCarChargingHours, simulate } from \"harmonia-sim\";\nimport { HEAT_PUMP_CONSUMPTION } from \"../../constants\";\nimport { LeadData, sendLeadToNexvoro } from \"../../utils/api\";\n\n@Component({\n tag: \"solar-system-form\",\n styleUrl: \"../../output.css\",\n shadow: false,\n})\nexport class SolarSystemForm {\n @Prop()\n systemConfigs: { [id: string]: SolarSystem } = {};\n @Prop()\n polygons: Polygon[] = [];\n @Prop()\n roofCanvas: HTMLCanvasElement;\n @Prop()\n polygonCanvas: HTMLCanvasElement;\n\n @State()\n householdConsumption: number = 4500;\n @State()\n consumptionProfile: \"mostly_at_home\" | \"mostly_away\" = \"mostly_at_home\";\n @State()\n electricityPrice: number = 0.3;\n @State()\n compensationRate: number = 0.07;\n @State()\n annualPriceIncrease: number = 2;\n @State()\n autonomy: number = 0;\n @State()\n costSavings: number = 0;\n @State()\n numberOfPanels: number = 5;\n @State()\n panelPeakPower: number = 0.4; // kW per panel\n @State()\n name: string = \"\";\n @State()\n email: string = \"\";\n @State()\n phone: string = \"\";\n @State()\n nameError: string = \"\";\n @State()\n emailError: string = \"\";\n @State()\n phoneError: string = \"\";\n @State()\n electricCar: boolean = false;\n @State()\n electricCarChargingTime: \"day\" | \"night\" = \"day\";\n @State()\n heatPump: number = 0;\n @State()\n battery: number = 0;\n\n @State()\n compensation20Years: number = 0;\n @State()\n savedCosts20Years: number = 0;\n @State()\n maxPanels: number = 5;\n @State()\n kmDrivenPerYear: number = 10000;\n @State()\n totalEnergyConsumption: number = 4500;\n @State()\n totalEnergyProduction: number = 0;\n @State()\n isSubmitting: boolean = false;\n @State()\n submitMessage: string = \"\";\n @State()\n submitSuccess: boolean = false;\n\n @Watch(\"systemConfigs\")\n updateSystemConfigs() {\n if (Object.keys(this.systemConfigs).length === 0) {\n this.numberOfPanels = 0;\n this.maxPanels = 0;\n return;\n }\n this.numberOfPanels = Object.keys(this.systemConfigs).reduce(\n (acc, curr) => acc + this.systemConfigs[curr].numberOfPanels,\n 0,\n );\n this.maxPanels = Object.keys(this.systemConfigs).reduce(\n (acc, curr) => acc + this.systemConfigs[curr].numberOfPanels,\n 0,\n );\n\n this.panelPeakPower = Object.entries(this.systemConfigs)[0][1][0]\n ?.panel.kWattPeak ?? 0.44;\n\n this.recalculate();\n }\n\n private formatEuropeanNumber(num: number, decimals: number = 2): string {\n const fixed = num.toFixed(decimals);\n const [integerPart, decimalPart] = fixed.split(\".\");\n\n // Add dots as thousands separators\n const formattedInteger = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n \".\",\n );\n\n // Join with comma as decimal separator\n return decimalPart\n ? `${formattedInteger},${decimalPart}`\n : formattedInteger;\n }\n\n private recalculate() {\n const currentSystemConfigs = {};\n let totalNumberOfPanels = 0;\n for (const [key, value] of Object.entries(this.systemConfigs)) {\n if (totalNumberOfPanels >= this.numberOfPanels) {\n break;\n }\n if (\n value.numberOfPanels + totalNumberOfPanels > this.numberOfPanels\n ) {\n currentSystemConfigs[key] = {\n ...value,\n numberOfPanels: this.numberOfPanels - totalNumberOfPanels,\n };\n totalNumberOfPanels = this.numberOfPanels;\n } else {\n currentSystemConfigs[key] = value;\n totalNumberOfPanels += value.numberOfPanels;\n }\n }\n\n const simulationConfig: SimulationConfig = {\n general: {\n simulationYears: 20,\n },\n householdConsumption: {\n consumptionProfile: this.consumptionProfile,\n winterConsumptionFactor: 1.4,\n summerConsumptionFactor: 0.6,\n averageConsumption: this.householdConsumption / 365,\n },\n electricityPrice: {\n purchase: this.electricityPrice,\n sell: this.compensationRate,\n increase: this.annualPriceIncrease / 100,\n },\n solarSystems: currentSystemConfigs,\n batteryKWh: this.battery,\n solarRadiation: {\n winterFactor: 0.2,\n summerFactor: 0.6,\n },\n heatPump: {\n m2: this.heatPump,\n consumptionPerM2: HEAT_PUMP_CONSUMPTION / 365,\n },\n electricCar: this.electricCar\n ? {\n averageKilometersPerDay: this.kmDrivenPerYear / 365,\n consumptionkWhPer100km: 20,\n batteryKWh: 80,\n chargingHours: this.electricCarChargingTime === \"day\"\n ? generateElectricCarChargingHours(6, 18)\n : generateElectricCarChargingHours(18, 6),\n }\n : undefined,\n };\n\n const result = simulate(simulationConfig);\n\n this.compensation20Years = result.compensationPerDay * 365 * 20;\n this.savedCosts20Years = result.byYearSavedCosts.reduce(\n (acc, curr) => acc + curr,\n 0,\n ) + this.compensation20Years;\n this.costSavings = result.byYearSavedCosts[0];\n this.autonomy = result.autonomy * 100;\n this.totalEnergyConsumption = result.totalEnergyConsumptionDay * 365;\n // Calculate total energy production based on compensation and rate\n this.totalEnergyProduction = result.totalEnergyProduction * 365;\n }\n\n componentWillLoad() {\n this.updateSystemConfigs();\n }\n\n private validateForm(): boolean {\n let isValid = true;\n const t = getLanguageStrings(state.settings.language);\n\n // Validate name\n if (!this.name.trim()) {\n this.nameError = t.solarSystemForm.nameError;\n isValid = false;\n } else {\n this.nameError = \"\";\n }\n\n // Validate email\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!this.email.trim()) {\n this.emailError = t.solarSystemForm.emailError;\n isValid = false;\n } else if (!emailRegex.test(this.email)) {\n this.emailError = t.solarSystemForm.validEmailError;\n isValid = false;\n } else {\n this.emailError = \"\";\n }\n\n // Validate phone (optional)\n const phoneRegex = /^[\\+]?[1-9][\\d]{0,15}$/;\n if (\n this.phone.trim() &&\n !phoneRegex.test(this.phone.replace(/[\\s\\-\\(\\)]/g, \"\"))\n ) {\n this.phoneError = t.solarSystemForm.phoneError;\n isValid = false;\n } else {\n this.phoneError = \"\";\n }\n\n return isValid;\n }\n\n private async handleRequestOffer() {\n if (!this.validateForm()) {\n return;\n }\n\n this.isSubmitting = true;\n this.submitMessage = \"\";\n this.submitSuccess = false;\n\n const t = getLanguageStrings(state.settings.language);\n\n try {\n const leadData: LeadData = {\n location: {\n name: state.location,\n latitude: state.latitude,\n longitude: state.longitude,\n },\n systemConfig: {\n maxNumberOfPanels: this.maxPanels,\n panelPeakPower: this.panelPeakPower,\n polygons: this.polygons,\n solarSystems: this.systemConfigs,\n electricityPrice: this.electricityPrice,\n compensationRate: this.compensationRate,\n annualPriceIncrease: this.annualPriceIncrease,\n },\n client: {\n name: this.name,\n email: this.email,\n phone: this.phone,\n consumption: this.householdConsumption,\n consumptionProfile: this.consumptionProfile,\n hasBattery: this.battery > 0,\n battery: this.battery,\n hasHeatPump: this.heatPump > 0,\n heatPumpM2: this.heatPump,\n hasElectricCar: this.electricCar,\n electricCarChargingTime: this.electricCarChargingTime,\n electricCarKmPerYear: this.kmDrivenPerYear,\n },\n images: {\n roof: this.roofCanvas.toDataURL(),\n polygon: this.polygonCanvas.toDataURL(),\n },\n results: {\n autonomy: this.autonomy,\n costSavings: this.costSavings,\n compensation20Years: this.compensation20Years,\n savedCosts20Years: this.savedCosts20Years,\n totalEnergyConsumption: this.totalEnergyConsumption,\n },\n };\n console.log(\"leadData\", leadData);\n const result = await sendLeadToNexvoro(leadData);\n\n this.submitSuccess = result.success;\n\n if (result.success) {\n console.log(\"Lead successfully sent to Nexvoro\", result);\n this.submitMessage = t.solarSystemForm.leadSubmitted;\n // Optionally reset form or show success message\n } else {\n console.error(\n \"Failed to send lead to Nexvoro:\",\n result.message,\n );\n this.submitMessage = t.solarSystemForm.leadError;\n }\n } catch (error) {\n console.error(\"Error in handleRequestOffer:\", error);\n this.submitSuccess = false;\n this.submitMessage = error instanceof Error\n ? error.message\n : \"An unexpected error occurred\";\n } finally {\n this.isSubmitting = false;\n }\n }\n\n private isIOS(): boolean {\n return state.isIOS;\n }\n\n render() {\n const t = getLanguageStrings(state.settings.language);\n\n // Reusable style objects\n const borderStyle = { border: \"1px solid var(--color-border)\" };\n const errorBorderStyle = { border: \"1px solid var(--color-error)\" };\n\n return (\n <div\n class=\"flex flex-col justify-center items-center w-full h-full pt-4\" // style={{\n // display: (Object.keys(this.systemConfigs).length === 0)\n // ? \"none\"\n // : \"flex\",\n // }}\n id=\"solar-system-form\"\n >\n <h1 class=\"text-2xl font-bold text-secondary mb-4 w-full\">\n {t.solarSystemForm.title}\n </h1>\n\n <div class=\"w-full bg-primary rounded-4xl space-y-6\">\n {/* System Info Section */}\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.systemInformation}\n </h2>\n <div class=\"flex flex-col sm:flex-row gap-4\">\n {/* Number of Panels */}\n <div class=\"flex-1 bg-muted rounded-4xl p-4 space-y-3\">\n <div class=\"flex items-center justify-between\">\n <label class=\"text-sm font-medium text-text-muted\">\n {t.solarSystemForm.numberOfPanels}\n </label>\n {!this.isIOS()\n ? (\n <input\n type=\"number\"\n class=\"w-20 px-3 py-1 rounded-full bg-muted text-muted-foreground text-right\"\n value={this.numberOfPanels}\n readOnly\n />\n )\n : (\n <input\n type=\"number\"\n min=\"1\"\n max={this.maxPanels}\n class=\"w-20 px-3 py-1 rounded-full focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground text-center\"\n style={borderStyle}\n value={this.numberOfPanels}\n onInput={(e) => {\n const value = parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n if (\n value >= 1 &&\n value <=\n this.maxPanels\n ) {\n this.numberOfPanels =\n value;\n this.recalculate();\n }\n }}\n />\n )}\n </div>\n {!this.isIOS() && (\n <input\n type=\"range\"\n min=\"1\"\n max={this.maxPanels}\n step=\"1\"\n class=\"input-slider w-full custom-range appearance-none rounded-full bg-transparent [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-black/25 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:h-[10px] [&::-webkit-slider-thumb]:w-[10px] [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-muted\"\n value={this.numberOfPanels}\n onInput={(e) => {\n this.numberOfPanels = parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n )}\n </div>\n\n {/* Panel Peak Power */}\n <div class=\"flex-1 bg-muted rounded-4xl p-4\">\n <div class=\"flex items-center justify-between\">\n <label class=\"text-sm font-medium text-text-muted\">\n {t.solarSystemForm.panelPeakPower}\n </label>\n <span class=\"text-text-muted\">\n {this.panelPeakPower.toFixed(2)} kW\n </span>\n </div>\n <div class=\"flex items-center justify-between mt-4\">\n <span class=\"text-sm font-medium text-text-muted\">\n {t.solarSystemForm.totalSystemPeakPower}\n </span>\n <span class=\"font-bold text-text-muted\">\n {(DEFAULT_SOLAR_PANEL_TYPE.kWattPeak *\n this.numberOfPanels).toFixed(1)} kWp\n </span>\n </div>\n </div>\n </div>\n </div>\n {/* Household Consumption Section */}\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.householdConsumptionTitle}\n </h2>\n <div class=\"grid grid-rows-2 gap-0\">\n <div class=\"grid grid-cols-2 gap-4\">\n <label class=\"block text-sm font-medium text-text-muted\">\n {t.solarSystemForm.annualConsumption}\n </label>\n <label class=\"block text-sm font-medium text-text-muted\">\n {t.solarSystemForm.consumptionProfileTitle}\n </label>\n </div>\n <div class=\"grid grid-cols-2 gap-4\">\n <input\n type=\"number\"\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground\"\n style={borderStyle}\n value={this.householdConsumption}\n onInput={(e) => {\n this.householdConsumption = parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n <select\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground\"\n style={borderStyle}\n onChange={(e) => {\n this.consumptionProfile =\n (e.target as HTMLSelectElement)\n .value as\n | \"mostly_at_home\"\n | \"mostly_away\";\n this.recalculate();\n }}\n >\n <option\n value=\"mostly_at_home\"\n selected={this.consumptionProfile ===\n \"mostly_at_home\"}\n >\n {t.solarSystemForm.consumptionProfiles\n .mostlyAtHome}\n </option>\n <option\n value=\"mostly_away\"\n selected={this.consumptionProfile ===\n \"mostly_away\"}\n >\n {t.solarSystemForm.consumptionProfiles\n .mostlyAway}\n </option>\n </select>\n </div>\n </div>\n {\n /* <div class=\"mt-4 h-48\">\n <canvas ref={(el) => this.chartRef = el}></canvas>\n </div> */\n }\n </div>\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.additionalComponents.title}\n </h2>\n <div class=\"flex flex-col gap-4\">\n {/* Heat Pump Section */}\n <div class=\"flex flex-col bg-muted rounded-4xl p-4 gap-4\">\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"heatPump\"\n class=\"w-4 h-4 accent-tertiary border-border rounded-full focus:ring-tertiary focus:ring-offset-0 focus:ring-2\"\n checked={this.heatPump > 0}\n onChange={(e) => {\n this.heatPump =\n (e.target as HTMLInputElement)\n .checked\n ? 100\n : 0;\n this.recalculate();\n }}\n />\n <label\n htmlFor=\"heatPump\"\n class=\"text-text-muted\"\n >\n {t.solarSystemForm\n .additionalComponents\n .heatPump}\n </label>\n </div>\n {(this.heatPump > 0 && !this.isIOS()) && (\n <span class=\"text-text-muted\">\n {this.heatPump} m²\n </span>\n )}\n </div>\n {this.heatPump > 0 && (\n <div class=\"flex flex-col gap-2\">\n {this.isIOS()\n ? (\n <div class=\"flex items-center gap-2\">\n <input\n type=\"number\"\n min=\"10\"\n max=\"300\"\n step=\"10\"\n class=\"flex-1 px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n style={borderStyle}\n value={this.heatPump}\n onInput={(e) => {\n const value =\n parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n if (\n value >= 10 &&\n value <= 300\n ) {\n this.heatPump =\n value;\n this.recalculate();\n }\n }}\n />\n <span class=\"text-sm text-text-muted\">\n m²\n </span>\n </div>\n )\n : (\n <input\n type=\"range\"\n min=\"10\"\n max=\"300\"\n step=\"10\"\n class=\"input-slider custom-range appearance-none rounded-full bg-transparent [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-black/25 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:h-[10px] [&::-webkit-slider-thumb]:w-[10px] [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-muted\"\n value={this.heatPump}\n onInput={(e) => {\n this.heatPump =\n parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n )}\n </div>\n )}\n </div>\n\n {/* Electric Car Section */}\n <div class=\"flex flex-col bg-muted rounded-4xl p-4 gap-4\">\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"electricCar\"\n class=\"w-4 h-4 accent-tertiary border-border rounded focus:ring-tertiary focus:ring-offset-0 focus:ring-2\"\n checked={this.electricCar}\n onChange={(e) => {\n this.electricCar =\n (e.target as HTMLInputElement)\n .checked;\n this.recalculate();\n }}\n />\n <label\n htmlFor=\"electricCar\"\n class=\"text-text-muted\"\n >\n {t.solarSystemForm\n .additionalComponents\n .electricCar}\n </label>\n </div>\n </div>\n {this.electricCar && (\n <div class=\"flex flex-col gap-2\">\n <div class=\"grid grid-cols-2 gap-4\">\n <label class=\"text-sm text-text-muted\">\n {t.solarSystemForm\n .additionalComponents\n .chargingTime}\n </label>\n <label class=\"text-sm text-text-muted\">\n {t.solarSystemForm\n .additionalComponents\n .kilometersPerYear}\n </label>\n </div>\n <div class=\"grid grid-cols-2 gap-4\">\n <select\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n onChange={(e) => {\n this.electricCarChargingTime =\n (e.target as HTMLSelectElement)\n .value as\n | \"day\"\n | \"night\";\n this.recalculate();\n }}\n style={borderStyle}\n >\n <option\n value=\"day\"\n selected={this\n .electricCarChargingTime ===\n \"day\"}\n >\n {t.solarSystemForm\n .additionalComponents\n .chargingTimeDay}\n </option>\n <option\n value=\"night\"\n selected={this\n .electricCarChargingTime ===\n \"night\"}\n >\n {t.solarSystemForm\n .additionalComponents\n .chargingTimeNight}\n </option>\n </select>\n <input\n type=\"number\"\n min=\"1000\"\n max=\"50000\"\n step=\"1000\"\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n value={this.kmDrivenPerYear}\n onInput={(e) => {\n this.kmDrivenPerYear =\n parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n style={borderStyle}\n />\n </div>\n </div>\n )}\n </div>\n\n {/* Battery Section */}\n <div class=\"flex flex-col bg-muted rounded-4xl p-4 gap-4\">\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"battery\"\n class=\"w-4 h-4 accent-tertiary border-border rounded-full focus:ring-tertiary focus:ring-offset-0 focus:ring-2\"\n checked={this.battery > 0}\n onChange={(e) => {\n this.battery =\n (e.target as HTMLInputElement)\n .checked\n ? 5\n : 0;\n this.recalculate();\n }}\n />\n <label\n htmlFor=\"battery\"\n class=\"text-text-muted\"\n >\n {t.solarSystemForm\n .additionalComponents\n .battery}\n </label>\n </div>\n {(this.battery > 0 && !this.isIOS()) && (\n <span class=\"text-text-muted\">\n {this.battery} kWh\n </span>\n )}\n </div>\n {this.battery > 0 && (\n <div class=\"flex flex-col gap-2\">\n {this.isIOS()\n ? (\n <div class=\"flex items-center gap-2\">\n <input\n type=\"number\"\n min=\"1\"\n max=\"20\"\n step=\"1\"\n class=\"flex-1 px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n value={this.battery}\n onInput={(e) => {\n const value =\n parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n if (\n value >= 1 &&\n value <= 20\n ) {\n this.battery =\n value;\n this.recalculate();\n }\n }}\n style={borderStyle}\n />\n <span class=\"text-sm text-text-muted\">\n kWh\n </span>\n </div>\n )\n : (\n <input\n type=\"range\"\n min=\"1\"\n max=\"20\"\n step=\"1\"\n class=\"input-slider w-full custom-range appearance-none rounded-full bg-transparent [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-black/25 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:h-[10px] [&::-webkit-slider-thumb]:w-[10px] [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-muted\"\n value={this.battery}\n onInput={(e) => {\n this.battery = parseInt(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Electricity Price and Compensation Section */}\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.electricityCostsTitle}\n </h2>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns:\n \"repeat(auto-fit, minmax(250px, 1fr))\",\n gap: \"1rem\",\n }}\n >\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.electricityPrice}\n </label>\n <input\n type=\"number\"\n step=\"0.01\"\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n style={borderStyle}\n value={this.electricityPrice.toFixed(2)}\n onInput={(e) => {\n this.electricityPrice = parseFloat(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n </div>\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.compensationRate}\n </label>\n <input\n type=\"number\"\n step=\"0.01\"\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n style={borderStyle}\n value={this.compensationRate.toFixed(2)}\n onInput={(e) => {\n this.compensationRate = parseFloat(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n </div>\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.annualPriceIncrease}\n </label>\n <input\n type=\"number\"\n step=\"0.1\"\n class=\"w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted\"\n style={borderStyle}\n value={this.annualPriceIncrease.toFixed(1)}\n onInput={(e) => {\n this.annualPriceIncrease = parseFloat(\n (e.target as HTMLInputElement)\n .value,\n );\n this.recalculate();\n }}\n />\n </div>\n </div>\n </div>\n\n {/* Results Section */}\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.resultsTitle}\n </h2>\n <div class=\"bg-muted rounded-4xl p-4\">\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm.autonomy}\n </span>\n <span class=\"text-xl font-bold text-secondary mt-1 sm:mt-0\">\n {this.autonomy > 100\n ? \"100\"\n : this.formatEuropeanNumber(\n this.autonomy,\n 1,\n )}%\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between mt-4\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm.totalEnergyConsumption}\n </span>\n <span class=\"text-xl font-bold text-secondary mt-1 sm:mt-0\">\n {this.formatEuropeanNumber(\n this.totalEnergyConsumption,\n 0,\n )} kWh/{t.solarSystemForm.year}\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between mt-4\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm.totalEnergyProduction}\n </span>\n <span class=\"text-xl font-bold text-secondary mt-1 sm:mt-0\">\n {this.formatEuropeanNumber(\n this.totalEnergyProduction,\n 0,\n )} kWh/{t.solarSystemForm.year}\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between mt-4\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm.costSavings}\n </span>\n </div>\n <span class=\"text-xl font-bold text-success mt-1 sm:mt-0\">\n {this.formatEuropeanNumber(\n this.costSavings,\n )}€/{t\n .solarSystemForm.year}\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between mt-4\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm.compensation20Years}\n </span>\n </div>\n <span class=\"text-xl font-bold text-success mt-1 sm:mt-0\">\n {this.formatEuropeanNumber(\n this.compensation20Years,\n )}€\n </span>\n </div>\n <div class=\"flex flex-col sm:flex-row sm:items-center justify-between mt-4\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-text-muted\">\n {t.solarSystemForm\n .monetaryBenefit20Years}\n </span>\n </div>\n <span class=\"text-xl font-bold text-success mt-1 sm:mt-0\">\n {this.formatEuropeanNumber(\n this.savedCosts20Years,\n )}€\n </span>\n </div>\n </div>\n </div>\n\n {/* Contact Information Section */}\n <div\n class=\"space-y-4 p-4 rounded-4xl\"\n style={borderStyle}\n >\n <h2 class=\"text-lg font-semibold text-secondary\">\n {t.solarSystemForm.requestOffer}\n </h2>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns:\n \"repeat(auto-fit, minmax(250px, 1fr))\",\n gap: \"1rem\",\n }}\n >\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.name}\n </label>\n <input\n type=\"text\"\n class={`w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground`}\n style={this.nameError\n ? errorBorderStyle\n : borderStyle}\n value={this.name}\n onInput={(e) => {\n this.name =\n (e.target as HTMLInputElement)\n .value;\n this.validateForm();\n }}\n placeholder=\"Your name\"\n />\n {this.nameError && (\n <p class=\"text-error text-sm mt-1\">\n {this.nameError}\n </p>\n )}\n </div>\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.email}\n </label>\n <input\n type=\"email\"\n class={`w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground`}\n style={this.emailError\n ? errorBorderStyle\n : borderStyle}\n value={this.email}\n onInput={(e) => {\n this.email =\n (e.target as HTMLInputElement)\n .value;\n this.validateForm();\n }}\n placeholder=\"your.email@example.com\"\n />\n {this.emailError && (\n <p class=\"text-error text-sm mt-1\">\n {this.emailError}\n </p>\n )}\n </div>\n <div>\n <label class=\"block text-sm font-medium text-text-muted mb-1\">\n {t.solarSystemForm.phone}\n </label>\n <input\n type=\"tel\"\n class={`w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground`}\n style={this.phoneError\n ? errorBorderStyle\n : borderStyle}\n value={this.phone}\n onInput={(e) => {\n this.phone =\n (e.target as HTMLInputElement)\n .value;\n this.validateForm();\n }}\n placeholder=\"+34 123 456 789\"\n />\n {this.phoneError && (\n <p class=\"text-error text-sm mt-1\">\n {this.phoneError}\n </p>\n )}\n </div>\n </div>\n <div class=\"flex flex-col items-center gap-4\">\n <button\n onClick={() => this.handleRequestOffer()}\n disabled={!this.name.trim() ||\n !this.email.trim() || !!this.nameError ||\n !!this.emailError || !!this.phoneError ||\n this.isSubmitting}\n class={`px-6 py-3 rounded-4xl transition-colors duration-200 flex items-center gap-2 ${\n this.isSubmitting\n ? \"bg-muted text-text-muted cursor-not-allowed\"\n : \"bg-secondary hover:bg-tertiary\"\n }`}\n style={{\n color: this.isSubmitting\n ? \"var(--color-text-muted)\"\n : \"#ffffff\",\n }}\n >\n {this.isSubmitting && (\n <div class=\"w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin\">\n </div>\n )}\n {this.isSubmitting\n ? t.solarSystemForm.sending\n : t.solarSystemForm.requestOfferButton}\n </button>\n\n {this.submitMessage && (\n <div\n class={`text-sm px-4 py-2 rounded-4xl ${\n this.submitSuccess\n ? \"bg-success/10 text-success border border-success/20\"\n : \"bg-error/10 text-error border border-error/20\"\n }`}\n >\n {this.submitMessage}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
2
|
export class LoadingWidget {
|
|
3
3
|
render() {
|
|
4
|
-
return (h("div", { key: '
|
|
4
|
+
return (h("div", { key: '60316e73e9161a81e299e5e0632fc83c30d3fc15', class: "absolute flex items-center justify-center bg-muted bg-opacity-75 z-20 pt-7 rounded-4xl" }, h("div", { key: 'f8edb698475d859fe07e53efe8e66a42e66dba29', class: "animate-spin rounded-full h-16 w-16 border-t-2 border-b-2 border-secondary" })));
|
|
5
5
|
}
|
|
6
6
|
static get is() { return "loading-widget"; }
|
|
7
7
|
static get originalStyleUrls() {
|
|
@@ -9,9 +9,8 @@
|
|
|
9
9
|
"Courier New", monospace;
|
|
10
10
|
--color-red-100: oklch(93.6% 0.032 17.717);
|
|
11
11
|
--color-red-300: oklch(80.8% 0.114 19.571);
|
|
12
|
+
--color-red-500: oklch(63.7% 0.237 25.331);
|
|
12
13
|
--color-red-700: oklch(50.5% 0.213 27.518);
|
|
13
|
-
--color-gray-400: oklch(70.7% 0.022 261.325);
|
|
14
|
-
--color-gray-800: oklch(27.8% 0.033 256.848);
|
|
15
14
|
--color-black: #000;
|
|
16
15
|
--color-white: #fff;
|
|
17
16
|
--spacing: 0.25rem;
|
|
@@ -234,9 +233,6 @@
|
|
|
234
233
|
.left-0 {
|
|
235
234
|
left: calc(var(--spacing) * 0);
|
|
236
235
|
}
|
|
237
|
-
.left-1 {
|
|
238
|
-
left: calc(var(--spacing) * 1);
|
|
239
|
-
}
|
|
240
236
|
.left-1\/2 {
|
|
241
237
|
left: calc(1/2 * 100%);
|
|
242
238
|
}
|
|
@@ -306,9 +302,6 @@
|
|
|
306
302
|
.inline-block {
|
|
307
303
|
display: inline-block;
|
|
308
304
|
}
|
|
309
|
-
.table {
|
|
310
|
-
display: table;
|
|
311
|
-
}
|
|
312
305
|
.h-4 {
|
|
313
306
|
height: calc(var(--spacing) * 4);
|
|
314
307
|
}
|
|
@@ -354,13 +347,6 @@
|
|
|
354
347
|
.flex-1 {
|
|
355
348
|
flex: 1;
|
|
356
349
|
}
|
|
357
|
-
.border-collapse {
|
|
358
|
-
border-collapse: collapse;
|
|
359
|
-
}
|
|
360
|
-
.-translate-x-1 {
|
|
361
|
-
--tw-translate-x: calc(var(--spacing) * -1);
|
|
362
|
-
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
363
|
-
}
|
|
364
350
|
.-translate-x-1\/2 {
|
|
365
351
|
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
|
|
366
352
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
@@ -400,6 +386,9 @@
|
|
|
400
386
|
.appearance-none {
|
|
401
387
|
appearance: none;
|
|
402
388
|
}
|
|
389
|
+
.grid-cols-1 {
|
|
390
|
+
grid-template-columns: repeat(1, minmax(0, 1fr));
|
|
391
|
+
}
|
|
403
392
|
.grid-cols-2 {
|
|
404
393
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
405
394
|
}
|
|
@@ -509,18 +498,12 @@
|
|
|
509
498
|
.border-current {
|
|
510
499
|
border-color: currentcolor;
|
|
511
500
|
}
|
|
512
|
-
.border-error {
|
|
513
|
-
border-color: var(--color-error);
|
|
514
|
-
}
|
|
515
501
|
.border-error\/20 {
|
|
516
502
|
border-color: color-mix(in srgb, hsl(0 100% 50%) 20%, transparent);
|
|
517
503
|
@supports (color: color-mix(in lab, red, red)) {
|
|
518
504
|
border-color: color-mix(in oklab, var(--color-error) 20%, transparent);
|
|
519
505
|
}
|
|
520
506
|
}
|
|
521
|
-
.border-info {
|
|
522
|
-
border-color: var(--color-info);
|
|
523
|
-
}
|
|
524
507
|
.border-info\/20 {
|
|
525
508
|
border-color: color-mix(in srgb, hsl(221 83% 53%) 20%, transparent);
|
|
526
509
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -533,9 +516,6 @@
|
|
|
533
516
|
.border-secondary {
|
|
534
517
|
border-color: var(--color-secondary);
|
|
535
518
|
}
|
|
536
|
-
.border-success {
|
|
537
|
-
border-color: var(--color-success);
|
|
538
|
-
}
|
|
539
519
|
.border-success\/20 {
|
|
540
520
|
border-color: color-mix(in srgb, hsl(142 76% 36%) 20%, transparent);
|
|
541
521
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -548,9 +528,6 @@
|
|
|
548
528
|
.bg-black {
|
|
549
529
|
background-color: var(--color-black);
|
|
550
530
|
}
|
|
551
|
-
.bg-error {
|
|
552
|
-
background-color: var(--color-error);
|
|
553
|
-
}
|
|
554
531
|
.bg-error\/10 {
|
|
555
532
|
background-color: color-mix(in srgb, hsl(0 100% 50%) 10%, transparent);
|
|
556
533
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -563,9 +540,6 @@
|
|
|
563
540
|
background-color: color-mix(in oklab, var(--color-error) 90%, transparent);
|
|
564
541
|
}
|
|
565
542
|
}
|
|
566
|
-
.bg-info {
|
|
567
|
-
background-color: var(--color-info);
|
|
568
|
-
}
|
|
569
543
|
.bg-info\/90 {
|
|
570
544
|
background-color: color-mix(in srgb, hsl(221 83% 53%) 90%, transparent);
|
|
571
545
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -587,9 +561,6 @@
|
|
|
587
561
|
.bg-secondary {
|
|
588
562
|
background-color: var(--color-secondary);
|
|
589
563
|
}
|
|
590
|
-
.bg-success {
|
|
591
|
-
background-color: var(--color-success);
|
|
592
|
-
}
|
|
593
564
|
.bg-success\/10 {
|
|
594
565
|
background-color: color-mix(in srgb, hsl(142 76% 36%) 10%, transparent);
|
|
595
566
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -644,9 +615,6 @@
|
|
|
644
615
|
.py-3 {
|
|
645
616
|
padding-block: calc(var(--spacing) * 3);
|
|
646
617
|
}
|
|
647
|
-
.pt-2 {
|
|
648
|
-
padding-top: calc(var(--spacing) * 2);
|
|
649
|
-
}
|
|
650
618
|
.pt-3 {
|
|
651
619
|
padding-top: calc(var(--spacing) * 3);
|
|
652
620
|
}
|
|
@@ -671,9 +639,6 @@
|
|
|
671
639
|
.pb-4 {
|
|
672
640
|
padding-bottom: calc(var(--spacing) * 4);
|
|
673
641
|
}
|
|
674
|
-
.pl-2 {
|
|
675
|
-
padding-left: calc(var(--spacing) * 2);
|
|
676
|
-
}
|
|
677
642
|
.pl-3 {
|
|
678
643
|
padding-left: calc(var(--spacing) * 3);
|
|
679
644
|
}
|
|
@@ -736,6 +701,9 @@
|
|
|
736
701
|
.text-primary-foreground {
|
|
737
702
|
color: var(--color-primary-foreground);
|
|
738
703
|
}
|
|
704
|
+
.text-red-500 {
|
|
705
|
+
color: var(--color-red-500);
|
|
706
|
+
}
|
|
739
707
|
.text-red-700 {
|
|
740
708
|
color: var(--color-red-700);
|
|
741
709
|
}
|
|
@@ -754,9 +722,6 @@
|
|
|
754
722
|
.text-white {
|
|
755
723
|
color: var(--color-white);
|
|
756
724
|
}
|
|
757
|
-
.underline {
|
|
758
|
-
text-decoration-line: underline;
|
|
759
|
-
}
|
|
760
725
|
.accent-tertiary {
|
|
761
726
|
accent-color: var(--color-tertiary);
|
|
762
727
|
}
|
|
@@ -774,10 +739,6 @@
|
|
|
774
739
|
--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
775
740
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
776
741
|
}
|
|
777
|
-
.outline {
|
|
778
|
-
outline-style: var(--tw-outline-style);
|
|
779
|
-
outline-width: 1px;
|
|
780
|
-
}
|
|
781
742
|
.transition {
|
|
782
743
|
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events;
|
|
783
744
|
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
|
@@ -936,6 +897,16 @@
|
|
|
936
897
|
gap: calc(var(--spacing) * 4);
|
|
937
898
|
}
|
|
938
899
|
}
|
|
900
|
+
.md\:grid-cols-2 {
|
|
901
|
+
@media (width >= 48rem) {
|
|
902
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
.md\:pl-2 {
|
|
906
|
+
@media (width >= 48rem) {
|
|
907
|
+
padding-left: calc(var(--spacing) * 2);
|
|
908
|
+
}
|
|
909
|
+
}
|
|
939
910
|
.\[\&\:\:-webkit-slider-runnable-track\]\:rounded-full {
|
|
940
911
|
&::-webkit-slider-runnable-track {
|
|
941
912
|
border-radius: calc(infinity * 1px);
|
|
@@ -1104,11 +1075,6 @@
|
|
|
1104
1075
|
inherits: false;
|
|
1105
1076
|
initial-value: 0 0 #0000;
|
|
1106
1077
|
}
|
|
1107
|
-
@property --tw-outline-style {
|
|
1108
|
-
syntax: "*";
|
|
1109
|
-
inherits: false;
|
|
1110
|
-
initial-value: solid;
|
|
1111
|
-
}
|
|
1112
1078
|
@property --tw-duration {
|
|
1113
1079
|
syntax: "*";
|
|
1114
1080
|
inherits: false;
|
|
@@ -1153,7 +1119,6 @@
|
|
|
1153
1119
|
--tw-ring-offset-width: 0px;
|
|
1154
1120
|
--tw-ring-offset-color: #fff;
|
|
1155
1121
|
--tw-ring-offset-shadow: 0 0 #0000;
|
|
1156
|
-
--tw-outline-style: solid;
|
|
1157
1122
|
--tw-duration: initial;
|
|
1158
1123
|
--tw-ease: initial;
|
|
1159
1124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lang.js","sourceRoot":"","sources":["../../src/types/lang.ts"],"names":[],"mappings":"","sourcesContent":["export type Language = \"en\" | \"es\" | \"de\";\r\n\r\nexport interface LanguageStrings {\r\n settings: {\r\n language: string;\r\n rowSpacing: string;\r\n columnSpacing: string;\r\n borderInset: string;\r\n };\r\n mapSelector: {\r\n explanation: string;\r\n radius: string;\r\n accept: string;\r\n chooseOnMap: string;\r\n switchToStandard: string;\r\n switchToSatellite: string;\r\n noAddressSelected: string;\r\n };\r\n solarExpert: {\r\n searchPlaceholder: string;\r\n };\r\n solarSystemForm: {\r\n title: string;\r\n year: string;\r\n systemInformation: string;\r\n numberOfPanels: string;\r\n panelPeakPower: string;\r\n totalSystemPeakPower: string;\r\n electricityPrice: string;\r\n compensationRate: string;\r\n autonomy: string;\r\n totalEnergyConsumption: string;\r\n totalEnergyProduction: string;\r\n costSavings: string;\r\n householdConsumptionTitle: string;\r\n consumptionProfileTitle: string;\r\n electricityCostsTitle: string;\r\n compensationRateTitle: string;\r\n resultsTitle: string;\r\n savingsDisclaimer: string;\r\n annualConsumption: string;\r\n name: string;\r\n email: string;\r\n phone: string;\r\n nameError: string;\r\n emailError: string;\r\n phoneError: string;\r\n consumptionProfiles: {\r\n mostlyAtHome: string;\r\n mostlyAway: string;\r\n };\r\n chart: {\r\n consumption: string;\r\n production: string;\r\n consumptionProfile: string;\r\n relativeConsumption: string;\r\n hourOfDay: string;\r\n };\r\n validEmailError: string;\r\n requestOffer: string;\r\n requestOfferButton: string;\r\n additionalComponents: {\r\n title: string;\r\n heatPump: string;\r\n electricCar: string;\r\n battery: string;\r\n chargingTime: string;\r\n chargingTimeDay: string;\r\n chargingTimeNight: string;\r\n kilometersPerYear: string;\r\n };\r\n annualPriceIncrease: string;\r\n costSavings20Years: string;\r\n compensation20Years: string;\r\n monetaryBenefit20Years: string;\r\n approximate: string;\r\n sending: string;\r\n leadSubmitted: string;\r\n leadError: string;\r\n };\r\n mapDraw: {\r\n instructions: {\r\n show: string;\r\n hide: string;\r\n parts: {\r\n roof: string;\r\n obstruction: string;\r\n delete: string;\r\n move: string;\r\n end: string;\r\n };\r\n };\r\n noPolygonSelected: string;\r\n noAddressSelected: string;\r\n information: string;\r\n calculateSolarPanels: string;\r\n markRoofEdge: string;\r\n markAsFlatRoof: string;\r\n panels: string;\r\n area: string;\r\n azimuth: string;\r\n pitch: string;\r\n loading: string;\r\n tools: {\r\n roof: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n obstruction: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n delete: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n move: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n undo: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n markRoofEdge: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n };\r\n toast: {\r\n undoSuccess: string;\r\n calculateSolarPanelsSuccess: string;\r\n markAsFlatRoofSuccess: string;\r\n };\r\n tutorial: {\r\n title: string;\r\n description: string;\r\n understood: string;\r\n markEdge: {\r\n title: string;\r\n description: string;\r\n understood: string;\r\n };\r\n additionalTools: {\r\n title: string;\r\n description: string;\r\n understood: string;\r\n };\r\n };\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"lang.js","sourceRoot":"","sources":["../../src/types/lang.ts"],"names":[],"mappings":"","sourcesContent":["export type Language = \"en\" | \"es\" | \"de\";\r\n\r\nexport interface LanguageStrings {\r\n settings: {\r\n language: string;\r\n rowSpacing: string;\r\n columnSpacing: string;\r\n borderInset: string;\r\n };\r\n mapSelector: {\r\n explanation: string;\r\n radius: string;\r\n accept: string;\r\n chooseOnMap: string;\r\n switchToStandard: string;\r\n switchToSatellite: string;\r\n noAddressSelected: string;\r\n };\r\n solarExpert: {\r\n searchPlaceholder: string;\r\n };\r\n solarSystemForm: {\r\n title: string;\r\n year: string;\r\n systemInformation: string;\r\n numberOfPanels: string;\r\n panelPeakPower: string;\r\n totalSystemPeakPower: string;\r\n electricityPrice: string;\r\n compensationRate: string;\r\n autonomy: string;\r\n totalEnergyConsumption: string;\r\n totalEnergyProduction: string;\r\n costSavings: string;\r\n householdConsumptionTitle: string;\r\n consumptionProfileTitle: string;\r\n electricityCostsTitle: string;\r\n compensationRateTitle: string;\r\n resultsTitle: string;\r\n savingsDisclaimer: string;\r\n annualConsumption: string;\r\n name: string;\r\n email: string;\r\n phone: string;\r\n nameError: string;\r\n emailError: string;\r\n phoneError: string;\r\n consumptionProfiles: {\r\n mostlyAtHome: string;\r\n mostlyAway: string;\r\n };\r\n chart: {\r\n consumption: string;\r\n production: string;\r\n consumptionProfile: string;\r\n relativeConsumption: string;\r\n hourOfDay: string;\r\n };\r\n validEmailError: string;\r\n requestOffer: string;\r\n requestOfferButton: string;\r\n additionalComponents: {\r\n title: string;\r\n heatPump: string;\r\n electricCar: string;\r\n battery: string;\r\n chargingTime: string;\r\n chargingTimeDay: string;\r\n chargingTimeNight: string;\r\n kilometersPerYear: string;\r\n };\r\n annualPriceIncrease: string;\r\n costSavings20Years: string;\r\n compensation20Years: string;\r\n monetaryBenefit20Years: string;\r\n approximate: string;\r\n sending: string;\r\n leadSubmitted: string;\r\n leadError: string;\r\n };\r\n mapDraw: {\r\n instructions: {\r\n show: string;\r\n hide: string;\r\n parts: {\r\n roof: string;\r\n obstruction: string;\r\n delete: string;\r\n move: string;\r\n end: string;\r\n };\r\n };\r\n noPolygonSelected: string;\r\n noAddressSelected: string;\r\n information: string;\r\n calculateSolarPanels: string;\r\n markRoofEdge: string;\r\n markAsFlatRoof: string;\r\n panels: string;\r\n area: string;\r\n azimuth: string;\r\n pitch: string;\r\n loading: string;\r\n imageLoadError: string;\r\n tools: {\r\n roof: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n obstruction: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n delete: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n move: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n undo: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n markRoofEdge: {\r\n name: string;\r\n explanation: string;\r\n ariaLabel: string;\r\n };\r\n };\r\n toast: {\r\n undoSuccess: string;\r\n calculateSolarPanelsSuccess: string;\r\n markAsFlatRoofSuccess: string;\r\n };\r\n tutorial: {\r\n title: string;\r\n description: string;\r\n understood: string;\r\n markEdge: {\r\n title: string;\r\n description: string;\r\n understood: string;\r\n };\r\n additionalTools: {\r\n title: string;\r\n description: string;\r\n understood: string;\r\n };\r\n };\r\n };\r\n}\r\n"]}
|