blue-chestnut-solar-expert 0.0.64 → 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-CQf05pmr.js → lerc-CweSdQV9.js} +3 -3
- package/dist/cjs/{lerc-CQf05pmr.js.map → lerc-CweSdQV9.js.map} +1 -1
- package/dist/cjs/loading-widget.cjs.entry.js +1 -1
- package/dist/cjs/loading-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/loading-widget.entry.cjs.js.map +1 -1
- package/dist/collection/components/map-draw/map-draw.js +8 -10
- package/dist/collection/components/map-draw/map-draw.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/output.css +0 -52
- 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 +1 -1
- 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-C5QieOat.js +114 -0
- package/dist/components/p-C5QieOat.js.map +1 -0
- package/dist/components/{p-IzVa21Wl.js → p-CCG3fXg3.js} +44 -42
- 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-De6Uhz0b.js → p-Cl7aThVr.js} +28 -30
- 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-DoOT28vq.js → p-DRV0Pmhs.js} +3 -3
- package/dist/components/{p-DoOT28vq.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 +19 -19
- 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-j3yBkoBc.js → lerc-D7wRie33.js} +3 -3
- package/dist/esm/{lerc-j3yBkoBc.js.map → lerc-D7wRie33.js.map} +1 -1
- package/dist/esm/loading-widget.entry.js +1 -1
- package/dist/esm/loading-widget.entry.js.map +1 -1
- package/dist/stencil-library/loading-widget.entry.esm.js.map +1 -1
- package/dist/stencil-library/{p-d2fcb2d8.entry.js → p-05a58ef0.entry.js} +2 -2
- package/dist/stencil-library/{p-rVA7BFlW.js → p-CcRwkRDp.js} +4 -4
- package/dist/stencil-library/{p-rVA7BFlW.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/package.json +1 -1
- package/dist/components/p-1jcVNjsm.js +0 -47
- package/dist/components/p-1jcVNjsm.js.map +0 -1
- package/dist/components/p-4FooU4eR.js +0 -40
- package/dist/components/p-4FooU4eR.js.map +0 -1
- package/dist/components/p-6rmvkwsO.js +0 -163
- package/dist/components/p-6rmvkwsO.js.map +0 -1
- package/dist/components/p-BYULvwxQ.js +0 -40
- package/dist/components/p-BYULvwxQ.js.map +0 -1
- package/dist/components/p-BcBvva_X.js +0 -40
- package/dist/components/p-BcBvva_X.js.map +0 -1
- package/dist/components/p-But3uNm3.js +0 -76
- package/dist/components/p-But3uNm3.js.map +0 -1
- package/dist/components/p-COCnOrkb.js +0 -121
- package/dist/components/p-COCnOrkb.js.map +0 -1
- package/dist/components/p-COL7rExT.js +0 -86
- package/dist/components/p-COL7rExT.js.map +0 -1
- package/dist/components/p-CpGXfh7Q.js +0 -114
- package/dist/components/p-CpGXfh7Q.js.map +0 -1
- package/dist/components/p-Cu7ckMQp.js +0 -40
- package/dist/components/p-Cu7ckMQp.js.map +0 -1
- package/dist/components/p-CxwiRuTf.js +0 -623
- package/dist/components/p-CxwiRuTf.js.map +0 -1
- package/dist/components/p-DCMO4ssM.js +0 -40
- package/dist/components/p-DCMO4ssM.js.map +0 -1
- package/dist/components/p-DWrXodHT.js +0 -40
- package/dist/components/p-DWrXodHT.js.map +0 -1
- package/dist/components/p-De6Uhz0b.js.map +0 -1
- package/dist/components/p-IzVa21Wl.js.map +0 -1
- package/dist/components/p-JzJ_ZuEh.js +0 -89
- package/dist/components/p-JzJ_ZuEh.js.map +0 -1
- package/dist/components/p-kB7DMoo7.js +0 -40
- package/dist/components/p-kB7DMoo7.js.map +0 -1
- package/dist/components/p-rW0sFWOp.js +0 -40
- package/dist/components/p-rW0sFWOp.js.map +0 -1
- package/dist/stencil-library/p-741a746a.entry.js +0 -2
- package/dist/stencil-library/p-741a746a.entry.js.map +0 -1
- package/dist/stencil-library/p-c6J1w7ew.js +0 -2
- package/dist/stencil-library/p-c6J1w7ew.js.map +0 -1
- /package/dist/stencil-library/{p-d2fcb2d8.entry.js.map → p-05a58ef0.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-draw.js","sourceRoot":"","sources":["../../../src/components/map-draw/map-draw.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\r\n Component,\r\n Element,\r\n getAssetPath,\r\n h,\r\n Prop,\r\n State,\r\n Watch,\r\n} from \"@stencil/core\";\r\n\r\nimport {\r\n BuildingInsightsResponse,\r\n GeoTiff,\r\n Polygon,\r\n SolarPanelType,\r\n} from \"harmonia-types\";\r\nimport {\r\n fetchSolarData,\r\n getBestFittingRoofSegment,\r\n getOptimalSolarPositionFully,\r\n SolarSystem,\r\n} from \"harmonia-sim\";\r\nimport { getBuildingImages } from \"../../utils/solar\";\r\nimport {\r\n CanvasInteraction,\r\n CanvasManager,\r\n CanvasUtils,\r\n renderRGB,\r\n Tool,\r\n} from \"harmonia-draw\";\r\nimport {\r\n markRoofEdgeTool,\r\n moveTool,\r\n obstructionTool,\r\n roofTool,\r\n Tool as LegacyTool,\r\n} from \"../../utils/render/tools\";\r\nimport {\r\n DEFAULT_SOLAR_EXPERT_CONFIG,\r\n DEFAULT_SOLAR_PANEL_TYPE,\r\n SolarExpertConfig,\r\n} from \"../../config\";\r\nimport { getPixelInMeters } from \"../../utils/utils\";\r\nimport { BORDER_INSET } from \"../../constants\";\r\nimport { getLanguageStrings } from \"../../utils/lang/general\";\r\nimport { onChange, Settings, state } from \"../../store\";\r\n\r\n@Component({\r\n tag: \"map-draw\",\r\n styleUrl: \"../../output.css\",\r\n shadow: false,\r\n})\r\nexport class MapDraw {\r\n @Prop()\r\n apiKey: string = \"\";\r\n @Prop()\r\n config: SolarExpertConfig = DEFAULT_SOLAR_EXPERT_CONFIG;\r\n @Prop()\r\n solarPanel: SolarPanelType = DEFAULT_SOLAR_PANEL_TYPE;\r\n @Prop()\r\n enableSettings: boolean = false;\r\n\r\n @State()\r\n showInstructions: boolean = true;\r\n @State()\r\n showSettings: boolean = false;\r\n @State()\r\n showTutorial: boolean = false;\r\n @State()\r\n showMarkEdgeTutorial: boolean = false;\r\n @State()\r\n showAdditionalToolsTutorial: boolean = false;\r\n @State()\r\n additionalToolsTutorialShown: boolean = false;\r\n @State()\r\n firstPolygonClosed: boolean = false;\r\n @State()\r\n zoom: number = 1;\r\n @State()\r\n loadingState: \"empty\" | \"loading\" | \"loaded\" | \"error\" = \"empty\";\r\n @State()\r\n rgbTiff: GeoTiff | null = null;\r\n @State()\r\n currentTool: LegacyTool = roofTool;\r\n @State()\r\n buildingInsights: BuildingInsightsResponse | null = null;\r\n @State()\r\n pixelInMeters: number = 0.2;\r\n @State()\r\n interaction: CanvasInteraction = {\r\n isDrawing: false,\r\n isDragging: false,\r\n lastTouchTime: 0,\r\n };\r\n @State()\r\n currentPolygon: Polygon | null = null;\r\n @State()\r\n solarSystem: { [id: string]: SolarSystem } = {};\r\n @State()\r\n showToast: boolean = false;\r\n @State()\r\n toastMessage: string = \"\";\r\n @State()\r\n toastType: \"success\" | \"info\" | \"warning\" | \"error\" = \"success\";\r\n\r\n @Element()\r\n el: HTMLElement;\r\n private canvasElement?: HTMLCanvasElement;\r\n private polygonCanvas?: HTMLCanvasElement;\r\n private polygonCtx?: CanvasRenderingContext2D;\r\n private canvasManager?: CanvasManager;\r\n private preventDefaultTouch?: (e: TouchEvent) => void;\r\n private gestureStartHandler?: (e: Event) => void;\r\n private gestureChangeHandler?: (e: Event) => void;\r\n private gestureEndHandler?: (e: Event) => void;\r\n private latitudeChangeListener?: () => void;\r\n private longitudeChangeListener?: () => void;\r\n\r\n componentDidLoad() {\r\n // Set up change listeners for latitude and longitude\r\n this.latitudeChangeListener = () => {\r\n if (state.latitude && state.longitude) {\r\n this.loadingState = \"loading\";\r\n this.getBuildingImages();\r\n this.getBuildingInsights();\r\n\r\n // Reset tutorial states for new location\r\n this.showTutorial = false;\r\n this.showMarkEdgeTutorial = false;\r\n this.showAdditionalToolsTutorial = false;\r\n this.additionalToolsTutorialShown = false;\r\n this.firstPolygonClosed = false;\r\n\r\n // Show tutorial when coordinates are first set\r\n this.showTutorial = true;\r\n }\r\n };\r\n this.longitudeChangeListener = () => {\r\n if (state.latitude && state.longitude) {\r\n this.loadingState = \"loading\";\r\n this.getBuildingImages();\r\n this.getBuildingInsights();\r\n\r\n // Reset tutorial states for new location\r\n this.showTutorial = false;\r\n this.showMarkEdgeTutorial = false;\r\n this.showAdditionalToolsTutorial = false;\r\n this.additionalToolsTutorialShown = false;\r\n this.firstPolygonClosed = false;\r\n\r\n // Show tutorial when coordinates are first set\r\n this.showTutorial = true;\r\n }\r\n };\r\n\r\n onChange(\"latitude\", this.latitudeChangeListener);\r\n onChange(\"longitude\", this.longitudeChangeListener);\r\n\r\n // Load data if coordinates already exist\r\n if (state.latitude && state.longitude) {\r\n this.loadingState = \"loading\";\r\n this.getBuildingInsights();\r\n this.getBuildingImages();\r\n\r\n // Show tutorial if coordinates already exist\r\n this.showTutorial = true;\r\n }\r\n\r\n // Wait for the next frame to ensure DOM is ready\r\n requestAnimationFrame(() => {\r\n this.initializeCanvas();\r\n const rect = this.canvasElement.getBoundingClientRect();\r\n this.sizeCanvas(rect.width, rect.height);\r\n });\r\n }\r\n\r\n private initializeCanvas() {\r\n if (this.canvasElement && this.polygonCanvas) {\r\n // Set initial canvas sizes based on container\r\n const rect = this.canvasElement.getBoundingClientRect();\r\n if (rect.width > 0 && rect.height > 0) {\r\n this.canvasElement.width = rect.width;\r\n this.canvasElement.height = rect.height;\r\n this.polygonCanvas.width = rect.width;\r\n this.polygonCanvas.height = rect.height;\r\n this.polygonCtx = this.polygonCanvas.getContext(\"2d\");\r\n }\r\n }\r\n\r\n // Add resize listener\r\n window.addEventListener(\"resize\", this.handleResize);\r\n }\r\n\r\n private handleResize = () => {\r\n if (this.rgbTiff) {\r\n this.drawMap();\r\n }\r\n };\r\n\r\n disconnectedCallback() {\r\n this.removeEventListeners();\r\n window.removeEventListener(\"resize\", this.handleResize);\r\n window.removeEventListener(\"resize\", this.handleResize);\r\n }\r\n\r\n @Watch(\"rgbTiff\")\r\n setupCanvasManager() {\r\n if (!this.rgbTiff) return;\r\n if (!this.rgbTiff) return;\r\n // if (this.canvasManager) return;\r\n this.canvasManager = new CanvasManager({\r\n coordinateSystem: {\r\n width: this.rgbTiff.width,\r\n height: this.rgbTiff.height,\r\n },\r\n onStateChange: () => {\r\n const currentPolygon = this.canvasManager\r\n ?.getCurrentPolygon();\r\n // Calculate area and create a copy to trigger Stencil re-render\r\n this.currentPolygon = currentPolygon\r\n ? {\r\n ...currentPolygon,\r\n points: [...currentPolygon.points],\r\n area: currentPolygon.area,\r\n }\r\n : null;\r\n CanvasUtils.drawState(\r\n this.polygonCtx,\r\n this.canvasManager.getState(),\r\n this.solarPanel,\r\n {\r\n showGrid: false,\r\n showPreview: !state.isMobile,\r\n },\r\n );\r\n },\r\n onPolygonChange: (polygon) => this.handlePolygonsChange(polygon),\r\n onLowerRoofEdgeMarked: () => {\r\n this.calculateSolarPanels(false);\r\n if (!this.additionalToolsTutorialShown) {\r\n this.showAdditionalToolsTutorial = true;\r\n this.additionalToolsTutorialShown = true;\r\n }\r\n },\r\n });\r\n\r\n console.log(\"debug\", this.canvasManager?.getDebugString());\r\n\r\n // Add event listeners after canvas is initialized\r\n this.setupEventListeners();\r\n\r\n // Draw map after canvas manager is set up\r\n requestAnimationFrame(() => {\r\n this.drawMap();\r\n });\r\n\r\n // Draw map after canvas manager is set up\r\n requestAnimationFrame(() => {\r\n this.drawMap();\r\n });\r\n }\r\n\r\n private setupEventListeners() {\r\n if (!this.polygonCanvas) return;\r\n\r\n this.polygonCanvas.addEventListener(\"mousedown\", this.handleMouseDown, {\r\n passive: false,\r\n });\r\n this.polygonCanvas.addEventListener(\r\n \"touchstart\",\r\n this.handleTouchStart,\r\n {\r\n passive: false,\r\n },\r\n );\r\n this.polygonCanvas.addEventListener(\"mousemove\", this.handleMouseMove, {\r\n passive: true,\r\n });\r\n this.polygonCanvas.addEventListener(\r\n \"mouseleave\",\r\n this.handleMouseLeave,\r\n {\r\n passive: true,\r\n },\r\n );\r\n\r\n // Document-level event listeners for drag operations\r\n document.addEventListener(\"mousemove\", this.handleMouseMove, {\r\n passive: true,\r\n });\r\n document.addEventListener(\"touchmove\", this.handleTouchMove, {\r\n passive: false,\r\n });\r\n\r\n document.addEventListener(\"mouseup\", this.handleMouseUp, {\r\n passive: true,\r\n });\r\n document.addEventListener(\"touchend\", this.handleTouchEnd, {\r\n passive: false,\r\n });\r\n\r\n // Additional touch event prevention\r\n this.preventDefaultTouch = (e: TouchEvent) => {\r\n if (e.touches.length > 1) {\r\n e.preventDefault();\r\n }\r\n };\r\n\r\n this.gestureStartHandler = (e: Event) => e.preventDefault();\r\n this.gestureChangeHandler = (e: Event) => e.preventDefault();\r\n this.gestureEndHandler = (e: Event) => e.preventDefault();\r\n\r\n this.polygonCanvas.addEventListener(\r\n \"touchmove\",\r\n this.preventDefaultTouch,\r\n {\r\n passive: false,\r\n },\r\n );\r\n this.polygonCanvas.addEventListener(\r\n \"gesturestart\",\r\n this.gestureStartHandler,\r\n {\r\n passive: false,\r\n },\r\n );\r\n this.polygonCanvas.addEventListener(\r\n \"gesturechange\",\r\n this.gestureChangeHandler,\r\n {\r\n passive: false,\r\n },\r\n );\r\n this.polygonCanvas.addEventListener(\r\n \"gestureend\",\r\n this.gestureEndHandler,\r\n {\r\n passive: false,\r\n },\r\n );\r\n }\r\n\r\n private removeEventListeners() {\r\n if (!this.polygonCanvas) return;\r\n\r\n this.polygonCanvas.removeEventListener(\r\n \"mousedown\",\r\n this.handleMouseDown,\r\n );\r\n this.polygonCanvas.removeEventListener(\r\n \"touchstart\",\r\n this.handleTouchStart,\r\n );\r\n this.polygonCanvas.removeEventListener(\r\n \"mousemove\",\r\n this.handleMouseMove,\r\n );\r\n this.polygonCanvas.removeEventListener(\r\n \"mouseleave\",\r\n this.handleMouseLeave,\r\n );\r\n\r\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\r\n document.removeEventListener(\"touchmove\", this.handleTouchMove);\r\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\r\n document.removeEventListener(\"touchend\", this.handleTouchEnd);\r\n\r\n if (this.preventDefaultTouch) {\r\n this.polygonCanvas.removeEventListener(\r\n \"touchmove\",\r\n this.preventDefaultTouch,\r\n );\r\n }\r\n\r\n if (this.gestureStartHandler) {\r\n this.polygonCanvas.removeEventListener(\r\n \"gesturestart\",\r\n this.gestureStartHandler,\r\n );\r\n }\r\n\r\n if (this.gestureChangeHandler) {\r\n this.polygonCanvas.removeEventListener(\r\n \"gesturechange\",\r\n this.gestureChangeHandler,\r\n );\r\n }\r\n\r\n if (this.gestureEndHandler) {\r\n this.polygonCanvas.removeEventListener(\r\n \"gestureend\",\r\n this.gestureEndHandler,\r\n );\r\n }\r\n }\r\n\r\n private handlePolygonsChange(polygon: Polygon) {\r\n this.currentPolygon = polygon;\r\n\r\n // Check if this is the first polygon being closed\r\n if (\r\n polygon.closed && !this.firstPolygonClosed &&\r\n polygon.type === \"roof\"\r\n ) {\r\n this.firstPolygonClosed = true;\r\n this.showMarkEdgeTutorial = true;\r\n }\r\n\r\n if (polygon.closed || this.currentTool !== moveTool) {\r\n this.handleToolSelect(moveTool);\r\n if (polygon.azimuth && polygon.pitch) {\r\n if (this.canvasManager?.getPositionedSolarPanels(polygon.id)) {\r\n this.calculateSolarPanels(false);\r\n }\r\n return;\r\n }\r\n\r\n const bestMatch = getBestFittingRoofSegment(\r\n polygon,\r\n this.buildingInsights?.solarPotential.roofSegmentStats ?? [],\r\n this.rgbTiff.bounds,\r\n this.canvasElement,\r\n );\r\n if (!bestMatch) {\r\n const newPolygon = {\r\n ...polygon,\r\n azimuth: 180,\r\n pitch: 35,\r\n };\r\n this.canvasManager?.updatePolygon(newPolygon);\r\n return;\r\n }\r\n const newPolygon = {\r\n ...polygon,\r\n azimuth: polygon.azimuth || bestMatch.azimuthDegrees,\r\n pitch: polygon.pitch || bestMatch.pitchDegrees,\r\n };\r\n this.canvasManager?.updatePolygon(newPolygon);\r\n }\r\n\r\n if (\r\n polygon.closed &&\r\n this.canvasManager?.getPositionedSolarPanels(polygon.id)\r\n ) {\r\n this.calculateSolarPanels(false);\r\n }\r\n }\r\n\r\n private handleMouseUp = (event: MouseEvent) => {\r\n if (!this.canvasManager) return;\r\n this.canvasManager.handleMouseUp(event);\r\n };\r\n\r\n private handleTouchEnd = (event: TouchEvent) => {\r\n if (!this.polygonCanvas || !this.canvasManager) return;\r\n\r\n // Only prevent default if the touch is on the canvas\r\n const target = event.target as Element;\r\n if (this.isTargetCanvas(target)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n this.canvasManager.handleTouchEnd(event);\r\n };\r\n\r\n private handleTouchMove = (event: TouchEvent) => {\r\n if (!this.polygonCanvas || !this.canvasManager) return;\r\n\r\n // Only prevent default if the touch is on the canvas\r\n const target = event.target as Element;\r\n if (this.isTargetCanvas(target)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n const rect = this.polygonCanvas.getBoundingClientRect();\r\n this.canvasManager.handleTouchMove(event, rect);\r\n };\r\n\r\n private handleMouseMove = (event: MouseEvent) => {\r\n if (!this.canvasManager) return;\r\n const rect = this.polygonCanvas?.getBoundingClientRect();\r\n this.canvasManager.handleMouseMove(event, rect);\r\n };\r\n\r\n private handleMouseLeave = () => {\r\n if (!this.canvasManager) return;\r\n this.canvasManager.handleMouseLeave();\r\n };\r\n\r\n private handleMouseDown = (event: MouseEvent) => {\r\n if (!this.canvasManager) return;\r\n const rect = this.polygonCanvas?.getBoundingClientRect();\r\n this.canvasManager.handleMouseDown(event, rect);\r\n };\r\n\r\n private handleTouchStart = (event: TouchEvent) => {\r\n if (!this.polygonCanvas || !this.canvasManager) return;\r\n\r\n // Only prevent default if the touch is on the canvas\r\n const target = event.target as Element;\r\n if (!this.isTargetCanvas(target)) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const now = Date.now();\r\n\r\n // Prevent double tap zoom with a longer timeout\r\n if (now - this.interaction.lastTouchTime < 500) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n this.interaction = {\r\n ...this.interaction,\r\n lastTouchTime: now,\r\n };\r\n const rect = this.polygonCanvas.getBoundingClientRect();\r\n this.canvasManager.handleTouchStart(event, rect);\r\n };\r\n\r\n private isTargetCanvas(target: Element): boolean {\r\n if (!this.polygonCanvas || !this.canvasElement) return false;\r\n\r\n return target === this.polygonCanvas ||\r\n target === this.canvasElement ||\r\n this.polygonCanvas.contains(target) ||\r\n this.canvasElement.contains(target);\r\n }\r\n\r\n private sizeCanvas(width: number, height: number) {\r\n if (this.canvasElement) {\r\n this.canvasElement.width = width;\r\n this.canvasElement.height = height;\r\n }\r\n\r\n if (this.polygonCanvas) {\r\n this.polygonCanvas.width = width;\r\n this.polygonCanvas.height = height;\r\n this.polygonCtx = this.polygonCanvas.getContext(\"2d\");\r\n\r\n if (this.canvasManager) {\r\n this.canvasManager.updateCanvasSize({\r\n width: width,\r\n height: height,\r\n });\r\n }\r\n }\r\n }\r\n\r\n async getBuildingInsights() {\r\n if (!state.latitude || !state.longitude) {\r\n return;\r\n }\r\n\r\n if (this.buildingInsights) {\r\n const sameLocation =\r\n this.buildingInsights.center.latitude === state.latitude &&\r\n this.buildingInsights.center.longitude === state.longitude;\r\n if (sameLocation) {\r\n return;\r\n }\r\n this.solarSystem = {};\r\n this.canvasElement?.getContext(\"2d\")?.clearRect(\r\n 0,\r\n 0,\r\n this.canvasElement.width,\r\n this.canvasElement.height,\r\n );\r\n this.polygonCtx?.clearRect(\r\n 0,\r\n 0,\r\n this.polygonCanvas.width,\r\n this.polygonCanvas.height,\r\n );\r\n this.rgbTiff = null;\r\n this.canvasManager?.clearPolygons();\r\n\r\n // Reset tutorial states for new location\r\n this.showTutorial = false;\r\n this.showMarkEdgeTutorial = false;\r\n this.showAdditionalToolsTutorial = false;\r\n this.additionalToolsTutorialShown = false;\r\n this.firstPolygonClosed = false;\r\n }\r\n try {\r\n this.buildingInsights = await fetchSolarData(\r\n state.latitude,\r\n state.longitude,\r\n this.apiKey,\r\n );\r\n if (!this.buildingInsights) {\r\n console.error(\r\n \"No building insights found. Please enter them manually.\",\r\n );\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to get building insights:\", error);\r\n }\r\n }\r\n\r\n async getBuildingImages() {\r\n if (!state.latitude || !state.longitude) {\r\n return;\r\n }\r\n\r\n // Check if we already have building insights for the same location\r\n if (this.buildingInsights) {\r\n const sameLocation =\r\n this.buildingInsights.center.latitude === state.latitude &&\r\n this.buildingInsights.center.longitude === state.longitude;\r\n if (sameLocation) {\r\n return;\r\n }\r\n }\r\n\r\n try {\r\n this.rgbTiff = await getBuildingImages(\r\n state.latitude,\r\n state.longitude,\r\n this.apiKey,\r\n state.radiusMeters,\r\n );\r\n if (this.rgbTiff) {\r\n this.pixelInMeters = getPixelInMeters(this.rgbTiff);\r\n if (this.canvasManager) {\r\n this.canvasManager.setMeterToPixelRatio(this.pixelInMeters);\r\n }\r\n // this.loadingState = \"loaded\";\r\n } else {\r\n this.loadingState = \"error\";\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to get building images:\", error);\r\n this.loadingState = \"error\";\r\n }\r\n }\r\n\r\n @Watch(\"rgbTiff\")\r\n @Watch(\"canvasElement\")\r\n async drawMap() {\r\n if (!this.canvasElement || !this.rgbTiff) {\r\n return;\r\n }\r\n\r\n // Ensure canvas is properly sized\r\n if (!this.canvasElement || !this.rgbTiff) {\r\n return;\r\n }\r\n\r\n // Ensure canvas is properly sized\r\n this.sizeCanvas(this.rgbTiff.width, this.rgbTiff.height);\r\n // Add a small delay to ensure canvas sizing is complete\r\n await new Promise((resolve) => setTimeout(resolve, 0));\r\n // Add a small delay to ensure canvas sizing is complete\r\n await new Promise((resolve) => setTimeout(resolve, 0));\r\n\r\n try {\r\n renderRGB(this.rgbTiff, undefined, this.canvasElement);\r\n this.loadingState = \"loaded\";\r\n } catch (error) {\r\n console.error(\"Failed to render RGB image:\", error);\r\n }\r\n }\r\n\r\n private undo() {\r\n if (this.canvasManager?.canUndo()) {\r\n console.log(\"undo\");\r\n this.canvasManager.undo();\r\n\r\n // Map harmonia-draw Tool enum back to local Tool\r\n const harmoniaTool = this.canvasManager.getState().selectedTool;\r\n switch (harmoniaTool) {\r\n case Tool.ROOF_POLYGON:\r\n this.currentTool = roofTool;\r\n break;\r\n case Tool.OBSTRUCTION_POLYGON:\r\n this.currentTool = obstructionTool;\r\n break;\r\n case Tool.MOVE:\r\n this.currentTool = moveTool;\r\n break;\r\n case Tool.MARK_ROOF_EDGE:\r\n this.currentTool = markRoofEdgeTool;\r\n break;\r\n default:\r\n this.currentTool = moveTool;\r\n break;\r\n }\r\n\r\n // Show toast message\r\n const t = getLanguageStrings(state.settings.language);\r\n this.showToastMessage(t.mapDraw.toast.undoSuccess, \"success\");\r\n\r\n // if (!this.currentPolygon?.closed) {\r\n // this.handleToolSelect(roofTool);\r\n // }\r\n }\r\n }\r\n\r\n private calculateSolarPanels(showToast: boolean = false) {\r\n if (this.currentPolygon) {\r\n this.calculateSolarPanelsForPolygon(this.currentPolygon, false);\r\n\r\n // Show toast message only when explicitly requested\r\n if (showToast) {\r\n const t = getLanguageStrings(state.settings.language);\r\n this.showToastMessage(\r\n t.mapDraw.toast.calculateSolarPanelsSuccess,\r\n \"success\",\r\n );\r\n }\r\n }\r\n }\r\n\r\n private markAsFlatRoof() {\r\n if (this.currentPolygon) {\r\n const newPolygon = {\r\n ...this.currentPolygon,\r\n pitch: 15,\r\n azimuth: 180, // East orientation\r\n };\r\n this.canvasManager?.updatePolygon(newPolygon);\r\n this.currentPolygon = newPolygon;\r\n this.calculateSolarPanelsForPolygon(newPolygon, true);\r\n\r\n // Show toast message\r\n const t = getLanguageStrings(state.settings.language);\r\n this.showToastMessage(\r\n t.mapDraw.toast.markAsFlatRoofSuccess,\r\n \"info\",\r\n );\r\n\r\n // Auto-select the mark roof edge tool\r\n this.handleToolSelect(markRoofEdgeTool);\r\n }\r\n }\r\n\r\n private calculateSolarPanelsForPolygon(\r\n polygon: Polygon,\r\n isFlatRoof: boolean,\r\n ) {\r\n const convertedSolarPanel: SolarPanelType = {\r\n ...this.solarPanel,\r\n widthMeters: this.solarPanel.widthMeters / this.pixelInMeters,\r\n heightMeters: this.solarPanel.heightMeters / this.pixelInMeters,\r\n };\r\n const inset = BORDER_INSET / this.pixelInMeters;\r\n const solarPanels = getOptimalSolarPositionFully(\r\n polygon,\r\n this.canvasManager.getObstacles(),\r\n convertedSolarPanel,\r\n polygon.azimuth,\r\n inset,\r\n polygon.pitch,\r\n state.settings.columnSpacing,\r\n state.settings.rowSpacing,\r\n );\r\n\r\n this.canvasManager.setPositionedSolarPanel(polygon.id, solarPanels);\r\n\r\n // Convert PositionedSolarPanel[] to SolarPanelSystemPart format\r\n const allPositionedPanels = this.canvasManager\r\n .getAllPositionedSolarPanels();\r\n this.solarSystem = Object.keys(allPositionedPanels).reduce(\r\n (acc, polygonId) => {\r\n acc[polygonId] = {\r\n numberOfPanels: allPositionedPanels[polygonId].length,\r\n panelType: this.solarPanel,\r\n pitch: polygon.pitch,\r\n azimuth: polygon.azimuth,\r\n roofArea: polygon.area,\r\n isFlatRoof: isFlatRoof,\r\n inverterType: \"central\",\r\n };\r\n return acc;\r\n },\r\n {} as { [id: string]: SolarSystem },\r\n );\r\n }\r\n\r\n private handlePitchChange(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n const pitch = parseFloat(target.value);\r\n if (this.currentPolygon) {\r\n const newPolygon = {\r\n ...this.currentPolygon,\r\n pitch: pitch,\r\n };\r\n this.canvasManager?.updatePolygon(newPolygon);\r\n this.currentPolygon = newPolygon;\r\n }\r\n if (\r\n this.currentPolygon?.type === \"roof\" &&\r\n this.canvasManager?.getPositionedSolarPanels(this.currentPolygon.id)\r\n ) {\r\n this.calculateSolarPanels(false);\r\n return;\r\n }\r\n }\r\n\r\n private handleAzimuthChange(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n const displayAzimuth = parseFloat(target.value);\r\n const azimuth = (displayAzimuth + 270) % 360;\r\n if (this.currentPolygon) {\r\n const newPolygon = {\r\n ...this.currentPolygon,\r\n azimuth: azimuth,\r\n };\r\n this.canvasManager?.updatePolygon(newPolygon);\r\n this.currentPolygon = newPolygon;\r\n }\r\n if (\r\n this.currentPolygon?.type === \"roof\" &&\r\n this.canvasManager?.getPositionedSolarPanels(this.currentPolygon.id)\r\n ) {\r\n this.calculateSolarPanels(false);\r\n return;\r\n }\r\n }\r\n\r\n private handleToolSelect(tool: LegacyTool) {\r\n if (\r\n this.currentPolygon && !this.currentPolygon.closed &&\r\n this.currentPolygon.points.length > 0\r\n ) {\r\n alert(\"Please close the polygon before selecting a tool\");\r\n return;\r\n }\r\n\r\n this.currentTool = tool;\r\n\r\n // Map legacy tools to harmonia-draw tools\r\n if (this.canvasManager) {\r\n switch (tool.name) {\r\n case \"roof\":\r\n this.canvasManager.setSelectedTool(Tool.ROOF_POLYGON);\r\n break;\r\n case \"obstruction\":\r\n this.canvasManager.setSelectedTool(\r\n Tool.OBSTRUCTION_POLYGON,\r\n );\r\n break;\r\n case \"move\":\r\n this.canvasManager.setSelectedTool(Tool.MOVE);\r\n break;\r\n case \"markRoofEdge\":\r\n this.canvasManager.setSelectedTool(Tool.MARK_ROOF_EDGE);\r\n break;\r\n default:\r\n // For other tools like delete, etc., we handle them manually\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private handleSettingsClose = () => {\r\n this.showSettings = false;\r\n };\r\n\r\n private handleSettingsSave = (event: CustomEvent<Settings>) => {\r\n state.settings = event.detail;\r\n state.settingsVersion++;\r\n };\r\n\r\n private handleTutorialClose = () => {\r\n this.showTutorial = false;\r\n };\r\n\r\n private handleMarkEdgeTutorialClose = () => {\r\n this.showMarkEdgeTutorial = false;\r\n this.handleToolSelect(markRoofEdgeTool);\r\n };\r\n\r\n private handleAdditionalToolsTutorialClose = () => {\r\n this.showAdditionalToolsTutorial = false;\r\n };\r\n\r\n private showToastMessage(\r\n message: string,\r\n type: \"success\" | \"info\" | \"warning\" | \"error\" = \"success\",\r\n ) {\r\n this.toastMessage = message;\r\n this.toastType = type;\r\n this.showToast = true;\r\n\r\n // Hide toast after 3 seconds\r\n setTimeout(() => {\r\n this.showToast = false;\r\n }, 3000);\r\n }\r\n\r\n render() {\r\n console.log(this.loadingState);\r\n const t = getLanguageStrings(state.settings.language);\r\n return (\r\n <div\r\n class=\"flex flex-col justify-center items-center w-full h-full gap-4\"\r\n id=\"map-draw\"\r\n >\r\n {this.showTutorial && (\r\n <tutorial-component\r\n onClose={this.handleTutorialClose}\r\n title={t.mapDraw.tutorial.title}\r\n description={t.mapDraw.tutorial.description}\r\n videoSource={getAssetPath(\r\n \"./assets/tutorial1.mp4\",\r\n )}\r\n />\r\n )}\r\n {this.showMarkEdgeTutorial && (\r\n <tutorial-component\r\n onClose={this.handleMarkEdgeTutorialClose}\r\n title={t.mapDraw.tutorial.markEdge.title}\r\n description={t.mapDraw.tutorial.markEdge\r\n .description}\r\n videoSource={getAssetPath(\r\n \"./assets/tutorial2.mp4\",\r\n )}\r\n />\r\n )}\r\n {this.showAdditionalToolsTutorial && (\r\n <tutorial-component\r\n onClose={this\r\n .handleAdditionalToolsTutorialClose}\r\n title={t.mapDraw.tutorial.additionalTools.title}\r\n description={t.mapDraw.tutorial.additionalTools\r\n .description}\r\n videoSource={getAssetPath(\r\n \"./assets/tutorial3.mp4\",\r\n )}\r\n />\r\n )}\r\n {(state.latitude && state.longitude &&\r\n this.loadingState === \"loading\") && (\r\n <div class=\"flex items-center justify-center w-full bg-opacity-75 z-20 pt-7 rounded-4xl\">\r\n <div class=\"animate-spin rounded-full h-16 w-16 border-t-2 border-b-2 border-secondary\">\r\n </div>\r\n </div>\r\n )}\r\n {(state.latitude && state.longitude &&\r\n this.loadingState === \"error\") && (\r\n <div class=\"flex items-center justify-center w-full bg-opacity-75 z-20 pt-7 rounded-4xl\">\r\n <div class=\"text-red-500 text-center text-lg font-semibold\">\r\n {t.mapDraw.imageLoadError}\r\n </div>\r\n </div>\r\n )}\r\n <div class=\"flex items-start justify-center w-full bg-primary rounded-4xl\">\r\n <div\r\n class=\"relative flex items-center justify-center w-full rounded-4xl bg-secondary\"\r\n style={{\r\n aspectRatio: this.rgbTiff\r\n ? `${this.rgbTiff.width}/${this.rgbTiff.height}`\r\n : \"\",\r\n }}\r\n >\r\n <canvas\r\n ref={(el) => this.canvasElement = el}\r\n class=\"absolute top-0 left-0 w-full h-full rounded-4xl\"\r\n id=\"map-draw-canvas\"\r\n style={{\r\n cursor: this.currentTool.cursor,\r\n }}\r\n >\r\n </canvas>\r\n <canvas\r\n ref={(el) => this.polygonCanvas = el}\r\n class=\"absolute top-0 left-0 w-full h-full rounded-4xl\"\r\n style={{\r\n cursor: this.currentTool.cursor,\r\n }}\r\n >\r\n </canvas>\r\n </div>\r\n </div>\r\n\r\n {this.rgbTiff && (\r\n <div class=\"w-full\">\r\n <div class=\"w-full pb-4\">\r\n <tool-box\r\n currentTool={this.currentTool}\r\n onToolSelect={(tool) =>\r\n this.handleToolSelect(tool)}\r\n undoCallback={() => this.undo()}\r\n />\r\n </div>\r\n\r\n <div class=\"w-full\">\r\n <polygon-information\r\n currentPolygon={this.currentPolygon}\r\n numberOfPanels={this.currentPolygon\r\n ? this\r\n .solarSystem[this.currentPolygon.id]\r\n ?.numberOfPanels\r\n : undefined}\r\n handleAzimuthChange={(event) =>\r\n this.handleAzimuthChange(event)}\r\n handlePitchChange={(event) =>\r\n this.handlePitchChange(event)}\r\n calculateSolarPanels={() =>\r\n this.calculateSolarPanels(true)}\r\n markAsFlatRoof={() => this.markAsFlatRoof()}\r\n currentTool={this.currentTool.name}\r\n />\r\n </div>\r\n <div class=\"w-full\">\r\n <solar-system-form\r\n systemConfigs={this.solarSystem}\r\n polygons={this.canvasManager?.getPolygons()}\r\n roofCanvas={this.canvasElement}\r\n polygonCanvas={this.polygonCanvas}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n {this.showSettings && (\r\n <settings-modal\r\n settings={state.settings}\r\n onClose={this.handleSettingsClose}\r\n onSave={this.handleSettingsSave}\r\n />\r\n )}\r\n {this.showToast && (\r\n <toast-notification\r\n message={this.toastMessage}\r\n type={this.toastType}\r\n duration={3000}\r\n />\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"map-draw.js","sourceRoot":"","sources":["../../../src/components/map-draw/map-draw.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\r\n Component,\r\n Element,\r\n getAssetPath,\r\n h,\r\n Prop,\r\n State,\r\n Watch,\r\n} from \"@stencil/core\";\r\n\r\nimport {\r\n BuildingInsightsResponse,\r\n GeoTiff,\r\n Polygon,\r\n SolarPanelType,\r\n} from \"harmonia-types\";\r\nimport {\r\n fetchSolarData,\r\n getBestFittingRoofSegment,\r\n getOptimalSolarPositionFully,\r\n SolarSystem,\r\n} from \"harmonia-sim\";\r\nimport { getBuildingImages } from \"../../utils/solar\";\r\nimport {\r\n CanvasInteraction,\r\n CanvasManager,\r\n CanvasUtils,\r\n renderRGB,\r\n Tool,\r\n} from \"harmonia-draw\";\r\nimport {\r\n markRoofEdgeTool,\r\n moveTool,\r\n obstructionTool,\r\n roofTool,\r\n Tool as LegacyTool,\r\n} from \"../../utils/render/tools\";\r\nimport {\r\n DEFAULT_SOLAR_EXPERT_CONFIG,\r\n DEFAULT_SOLAR_PANEL_TYPE,\r\n SolarExpertConfig,\r\n} from \"../../config\";\r\nimport { getPixelInMeters } from \"../../utils/utils\";\r\nimport { BORDER_INSET } from \"../../constants\";\r\nimport { getLanguageStrings } from \"../../utils/lang/general\";\r\nimport { onChange, Settings, state } from \"../../store\";\r\n\r\n@Component({\r\n tag: \"map-draw\",\r\n styleUrl: \"../../output.css\",\r\n shadow: false,\r\n})\r\nexport class MapDraw {\r\n @Prop()\r\n apiKey: string = \"\";\r\n @Prop()\r\n config: SolarExpertConfig = DEFAULT_SOLAR_EXPERT_CONFIG;\r\n @Prop()\r\n solarPanel: SolarPanelType = DEFAULT_SOLAR_PANEL_TYPE;\r\n @Prop()\r\n enableSettings: boolean = false;\r\n\r\n @State()\r\n showInstructions: boolean = true;\r\n @State()\r\n showSettings: boolean = false;\r\n @State()\r\n showTutorial: boolean = false;\r\n @State()\r\n showMarkEdgeTutorial: boolean = false;\r\n @State()\r\n showAdditionalToolsTutorial: boolean = false;\r\n @State()\r\n additionalToolsTutorialShown: boolean = false;\r\n @State()\r\n firstPolygonClosed: boolean = false;\r\n @State()\r\n zoom: number = 1;\r\n @State()\r\n loadingState: \"empty\" | \"loading\" | \"loaded\" | \"error\" = \"empty\";\r\n @State()\r\n rgbTiff: GeoTiff | null = null;\r\n @State()\r\n currentTool: LegacyTool = roofTool;\r\n @State()\r\n buildingInsights: BuildingInsightsResponse | null = null;\r\n @State()\r\n pixelInMeters: number = 0.2;\r\n @State()\r\n interaction: CanvasInteraction = {\r\n isDrawing: false,\r\n isDragging: false,\r\n lastTouchTime: 0,\r\n };\r\n @State()\r\n currentPolygon: Polygon | null = null;\r\n @State()\r\n solarSystem: { [id: string]: SolarSystem } = {};\r\n @State()\r\n showToast: boolean = false;\r\n @State()\r\n toastMessage: string = \"\";\r\n @State()\r\n toastType: \"success\" | \"info\" | \"warning\" | \"error\" = \"success\";\r\n\r\n @Element()\r\n el: HTMLElement;\r\n private canvasElement?: HTMLCanvasElement;\r\n private polygonCanvas?: HTMLCanvasElement;\r\n private polygonCtx?: CanvasRenderingContext2D;\r\n private canvasManager?: CanvasManager;\r\n private preventDefaultTouch?: (e: TouchEvent) => void;\r\n private gestureStartHandler?: (e: Event) => void;\r\n private gestureChangeHandler?: (e: Event) => void;\r\n private gestureEndHandler?: (e: Event) => void;\r\n private latitudeChangeListener?: () => void;\r\n private longitudeChangeListener?: () => void;\r\n\r\n componentDidLoad() {\r\n // Set up change listeners for latitude and longitude\r\n this.latitudeChangeListener = () => {\r\n if (state.latitude && state.longitude) {\r\n this.loadingState = \"loading\";\r\n this.getBuildingImages();\r\n this.getBuildingInsights();\r\n\r\n // Reset tutorial states for new location\r\n this.showTutorial = false;\r\n this.showMarkEdgeTutorial = false;\r\n this.showAdditionalToolsTutorial = false;\r\n this.additionalToolsTutorialShown = false;\r\n this.firstPolygonClosed = false;\r\n\r\n // Show tutorial when coordinates are first set\r\n this.showTutorial = true;\r\n }\r\n };\r\n this.longitudeChangeListener = () => {\r\n if (state.latitude && state.longitude) {\r\n this.loadingState = \"loading\";\r\n this.getBuildingImages();\r\n this.getBuildingInsights();\r\n\r\n // Reset tutorial states for new location\r\n this.showTutorial = false;\r\n this.showMarkEdgeTutorial = false;\r\n this.showAdditionalToolsTutorial = false;\r\n this.additionalToolsTutorialShown = false;\r\n this.firstPolygonClosed = false;\r\n\r\n // Show tutorial when coordinates are first set\r\n this.showTutorial = true;\r\n }\r\n };\r\n\r\n onChange(\"latitude\", this.latitudeChangeListener);\r\n onChange(\"longitude\", this.longitudeChangeListener);\r\n\r\n // Load data if coordinates already exist\r\n if (state.latitude && state.longitude) {\r\n this.loadingState = \"loading\";\r\n this.getBuildingInsights();\r\n this.getBuildingImages();\r\n\r\n // Show tutorial if coordinates already exist\r\n this.showTutorial = true;\r\n }\r\n\r\n // Wait for the next frame to ensure DOM is ready\r\n requestAnimationFrame(() => {\r\n this.initializeCanvas();\r\n const rect = this.canvasElement.getBoundingClientRect();\r\n this.sizeCanvas(rect.width, rect.height);\r\n });\r\n }\r\n\r\n private initializeCanvas() {\r\n if (this.canvasElement && this.polygonCanvas) {\r\n // Set initial canvas sizes based on container\r\n const rect = this.canvasElement.getBoundingClientRect();\r\n if (rect.width > 0 && rect.height > 0) {\r\n this.canvasElement.width = rect.width;\r\n this.canvasElement.height = rect.height;\r\n this.polygonCanvas.width = rect.width;\r\n this.polygonCanvas.height = rect.height;\r\n this.polygonCtx = this.polygonCanvas.getContext(\"2d\");\r\n }\r\n }\r\n\r\n // Add resize listener\r\n window.addEventListener(\"resize\", this.handleResize);\r\n }\r\n\r\n private handleResize = () => {\r\n if (this.rgbTiff) {\r\n this.drawMap();\r\n }\r\n };\r\n\r\n disconnectedCallback() {\r\n this.removeEventListeners();\r\n window.removeEventListener(\"resize\", this.handleResize);\r\n window.removeEventListener(\"resize\", this.handleResize);\r\n }\r\n\r\n @Watch(\"rgbTiff\")\r\n setupCanvasManager() {\r\n if (!this.rgbTiff) return;\r\n if (!this.rgbTiff) return;\r\n // if (this.canvasManager) return;\r\n this.canvasManager = new CanvasManager({\r\n coordinateSystem: {\r\n width: this.rgbTiff.width,\r\n height: this.rgbTiff.height,\r\n },\r\n onStateChange: () => {\r\n const currentPolygon = this.canvasManager\r\n ?.getCurrentPolygon();\r\n // Calculate area and create a copy to trigger Stencil re-render\r\n this.currentPolygon = currentPolygon\r\n ? {\r\n ...currentPolygon,\r\n points: [...currentPolygon.points],\r\n area: currentPolygon.area,\r\n }\r\n : null;\r\n CanvasUtils.drawState(\r\n this.polygonCtx,\r\n this.canvasManager.getState(),\r\n this.solarPanel,\r\n {\r\n showGrid: false,\r\n showPreview: !state.isMobile,\r\n },\r\n );\r\n },\r\n onPolygonChange: (polygon) => this.handlePolygonsChange(polygon),\r\n onLowerRoofEdgeMarked: () => {\r\n this.calculateSolarPanels(false);\r\n if (!this.additionalToolsTutorialShown) {\r\n this.showAdditionalToolsTutorial = true;\r\n this.additionalToolsTutorialShown = true;\r\n }\r\n },\r\n });\r\n\r\n console.log(\"debug\", this.canvasManager?.getDebugString());\r\n\r\n // Add event listeners after canvas is initialized\r\n this.setupEventListeners();\r\n\r\n // Draw map after canvas manager is set up\r\n requestAnimationFrame(() => {\r\n this.drawMap();\r\n });\r\n\r\n // Draw map after canvas manager is set up\r\n requestAnimationFrame(() => {\r\n this.drawMap();\r\n });\r\n }\r\n\r\n private setupEventListeners() {\r\n if (!this.polygonCanvas) return;\r\n\r\n this.polygonCanvas.addEventListener(\"mousedown\", this.handleMouseDown, {\r\n passive: false,\r\n });\r\n this.polygonCanvas.addEventListener(\r\n \"touchstart\",\r\n this.handleTouchStart,\r\n {\r\n passive: false,\r\n },\r\n );\r\n this.polygonCanvas.addEventListener(\"mousemove\", this.handleMouseMove, {\r\n passive: true,\r\n });\r\n this.polygonCanvas.addEventListener(\r\n \"mouseleave\",\r\n this.handleMouseLeave,\r\n {\r\n passive: true,\r\n },\r\n );\r\n\r\n // Document-level event listeners for drag operations\r\n document.addEventListener(\"mousemove\", this.handleMouseMove, {\r\n passive: true,\r\n });\r\n document.addEventListener(\"touchmove\", this.handleTouchMove, {\r\n passive: false,\r\n });\r\n\r\n document.addEventListener(\"mouseup\", this.handleMouseUp, {\r\n passive: true,\r\n });\r\n document.addEventListener(\"touchend\", this.handleTouchEnd, {\r\n passive: false,\r\n });\r\n\r\n // Additional touch event prevention\r\n this.preventDefaultTouch = (e: TouchEvent) => {\r\n if (e.touches.length > 1) {\r\n e.preventDefault();\r\n }\r\n };\r\n\r\n this.gestureStartHandler = (e: Event) => e.preventDefault();\r\n this.gestureChangeHandler = (e: Event) => e.preventDefault();\r\n this.gestureEndHandler = (e: Event) => e.preventDefault();\r\n\r\n this.polygonCanvas.addEventListener(\r\n \"touchmove\",\r\n this.preventDefaultTouch,\r\n {\r\n passive: false,\r\n },\r\n );\r\n this.polygonCanvas.addEventListener(\r\n \"gesturestart\",\r\n this.gestureStartHandler,\r\n {\r\n passive: false,\r\n },\r\n );\r\n this.polygonCanvas.addEventListener(\r\n \"gesturechange\",\r\n this.gestureChangeHandler,\r\n {\r\n passive: false,\r\n },\r\n );\r\n this.polygonCanvas.addEventListener(\r\n \"gestureend\",\r\n this.gestureEndHandler,\r\n {\r\n passive: false,\r\n },\r\n );\r\n }\r\n\r\n private removeEventListeners() {\r\n if (!this.polygonCanvas) return;\r\n\r\n this.polygonCanvas.removeEventListener(\r\n \"mousedown\",\r\n this.handleMouseDown,\r\n );\r\n this.polygonCanvas.removeEventListener(\r\n \"touchstart\",\r\n this.handleTouchStart,\r\n );\r\n this.polygonCanvas.removeEventListener(\r\n \"mousemove\",\r\n this.handleMouseMove,\r\n );\r\n this.polygonCanvas.removeEventListener(\r\n \"mouseleave\",\r\n this.handleMouseLeave,\r\n );\r\n\r\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\r\n document.removeEventListener(\"touchmove\", this.handleTouchMove);\r\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\r\n document.removeEventListener(\"touchend\", this.handleTouchEnd);\r\n\r\n if (this.preventDefaultTouch) {\r\n this.polygonCanvas.removeEventListener(\r\n \"touchmove\",\r\n this.preventDefaultTouch,\r\n );\r\n }\r\n\r\n if (this.gestureStartHandler) {\r\n this.polygonCanvas.removeEventListener(\r\n \"gesturestart\",\r\n this.gestureStartHandler,\r\n );\r\n }\r\n\r\n if (this.gestureChangeHandler) {\r\n this.polygonCanvas.removeEventListener(\r\n \"gesturechange\",\r\n this.gestureChangeHandler,\r\n );\r\n }\r\n\r\n if (this.gestureEndHandler) {\r\n this.polygonCanvas.removeEventListener(\r\n \"gestureend\",\r\n this.gestureEndHandler,\r\n );\r\n }\r\n }\r\n\r\n private handlePolygonsChange(polygon: Polygon) {\r\n this.currentPolygon = polygon;\r\n\r\n // Check if this is the first polygon being closed\r\n if (\r\n polygon.closed && !this.firstPolygonClosed &&\r\n polygon.type === \"roof\"\r\n ) {\r\n this.firstPolygonClosed = true;\r\n this.showMarkEdgeTutorial = true;\r\n }\r\n\r\n if (polygon.closed || this.currentTool !== moveTool) {\r\n this.handleToolSelect(moveTool);\r\n if (polygon.azimuth && polygon.pitch) {\r\n if (this.canvasManager?.getPositionedSolarPanels(polygon.id)) {\r\n this.calculateSolarPanels(false);\r\n }\r\n return;\r\n }\r\n\r\n const bestMatch = getBestFittingRoofSegment(\r\n polygon,\r\n this.buildingInsights?.solarPotential.roofSegmentStats ?? [],\r\n this.rgbTiff.bounds,\r\n this.canvasElement,\r\n );\r\n if (!bestMatch) {\r\n const newPolygon = {\r\n ...polygon,\r\n azimuth: 180,\r\n pitch: 35,\r\n };\r\n this.canvasManager?.updatePolygon(newPolygon);\r\n return;\r\n }\r\n const newPolygon = {\r\n ...polygon,\r\n azimuth: polygon.azimuth || bestMatch.azimuthDegrees,\r\n pitch: polygon.pitch || bestMatch.pitchDegrees,\r\n };\r\n this.canvasManager?.updatePolygon(newPolygon);\r\n }\r\n\r\n if (\r\n polygon.closed &&\r\n this.canvasManager?.getPositionedSolarPanels(polygon.id)\r\n ) {\r\n this.calculateSolarPanels(false);\r\n }\r\n }\r\n\r\n private handleMouseUp = (event: MouseEvent) => {\r\n if (!this.canvasManager) return;\r\n this.canvasManager.handleMouseUp(event);\r\n };\r\n\r\n private handleTouchEnd = (event: TouchEvent) => {\r\n if (!this.polygonCanvas || !this.canvasManager) return;\r\n\r\n // Only prevent default if the touch is on the canvas\r\n const target = event.target as Element;\r\n if (this.isTargetCanvas(target)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n this.canvasManager.handleTouchEnd(event);\r\n };\r\n\r\n private handleTouchMove = (event: TouchEvent) => {\r\n if (!this.polygonCanvas || !this.canvasManager) return;\r\n\r\n // Only prevent default if the touch is on the canvas\r\n const target = event.target as Element;\r\n if (this.isTargetCanvas(target)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n const rect = this.polygonCanvas.getBoundingClientRect();\r\n this.canvasManager.handleTouchMove(event, rect);\r\n };\r\n\r\n private handleMouseMove = (event: MouseEvent) => {\r\n if (!this.canvasManager) return;\r\n const rect = this.polygonCanvas?.getBoundingClientRect();\r\n this.canvasManager.handleMouseMove(event, rect);\r\n };\r\n\r\n private handleMouseLeave = () => {\r\n if (!this.canvasManager) return;\r\n this.canvasManager.handleMouseLeave();\r\n };\r\n\r\n private handleMouseDown = (event: MouseEvent) => {\r\n if (!this.canvasManager) return;\r\n const rect = this.polygonCanvas?.getBoundingClientRect();\r\n this.canvasManager.handleMouseDown(event, rect);\r\n };\r\n\r\n private handleTouchStart = (event: TouchEvent) => {\r\n if (!this.polygonCanvas || !this.canvasManager) return;\r\n\r\n // Only prevent default if the touch is on the canvas\r\n const target = event.target as Element;\r\n if (!this.isTargetCanvas(target)) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const now = Date.now();\r\n\r\n // Prevent double tap zoom with a longer timeout\r\n if (now - this.interaction.lastTouchTime < 500) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n this.interaction = {\r\n ...this.interaction,\r\n lastTouchTime: now,\r\n };\r\n const rect = this.polygonCanvas.getBoundingClientRect();\r\n this.canvasManager.handleTouchStart(event, rect);\r\n };\r\n\r\n private isTargetCanvas(target: Element): boolean {\r\n if (!this.polygonCanvas || !this.canvasElement) return false;\r\n\r\n return target === this.polygonCanvas ||\r\n target === this.canvasElement ||\r\n this.polygonCanvas.contains(target) ||\r\n this.canvasElement.contains(target);\r\n }\r\n\r\n private sizeCanvas(width: number, height: number) {\r\n if (this.canvasElement) {\r\n this.canvasElement.width = width;\r\n this.canvasElement.height = height;\r\n }\r\n\r\n if (this.polygonCanvas) {\r\n this.polygonCanvas.width = width;\r\n this.polygonCanvas.height = height;\r\n this.polygonCtx = this.polygonCanvas.getContext(\"2d\");\r\n\r\n if (this.canvasManager) {\r\n this.canvasManager.updateCanvasSize({\r\n width: width,\r\n height: height,\r\n });\r\n }\r\n }\r\n }\r\n\r\n async getBuildingInsights() {\r\n if (!state.latitude || !state.longitude) {\r\n return;\r\n }\r\n\r\n if (this.buildingInsights) {\r\n const sameLocation =\r\n this.buildingInsights.center.latitude === state.latitude &&\r\n this.buildingInsights.center.longitude === state.longitude;\r\n if (sameLocation) {\r\n return;\r\n }\r\n this.solarSystem = {};\r\n this.canvasElement?.getContext(\"2d\")?.clearRect(\r\n 0,\r\n 0,\r\n this.canvasElement.width,\r\n this.canvasElement.height,\r\n );\r\n this.polygonCtx?.clearRect(\r\n 0,\r\n 0,\r\n this.polygonCanvas.width,\r\n this.polygonCanvas.height,\r\n );\r\n this.rgbTiff = null;\r\n this.canvasManager?.clearPolygons();\r\n\r\n // Reset tutorial states for new location\r\n this.showTutorial = false;\r\n this.showMarkEdgeTutorial = false;\r\n this.showAdditionalToolsTutorial = false;\r\n this.additionalToolsTutorialShown = false;\r\n this.firstPolygonClosed = false;\r\n }\r\n try {\r\n this.buildingInsights = await fetchSolarData(\r\n state.latitude,\r\n state.longitude,\r\n this.apiKey,\r\n );\r\n if (!this.buildingInsights) {\r\n console.error(\r\n \"No building insights found. Please enter them manually.\",\r\n );\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to get building insights:\", error);\r\n }\r\n }\r\n\r\n async getBuildingImages() {\r\n if (!state.latitude || !state.longitude) {\r\n return;\r\n }\r\n\r\n // Check if we already have building insights for the same location\r\n if (this.buildingInsights) {\r\n const sameLocation =\r\n this.buildingInsights.center.latitude === state.latitude &&\r\n this.buildingInsights.center.longitude === state.longitude;\r\n if (sameLocation) {\r\n return;\r\n }\r\n }\r\n\r\n try {\r\n this.rgbTiff = await getBuildingImages(\r\n state.latitude,\r\n state.longitude,\r\n this.apiKey,\r\n state.radiusMeters,\r\n );\r\n if (this.rgbTiff) {\r\n this.pixelInMeters = getPixelInMeters(this.rgbTiff);\r\n if (this.canvasManager) {\r\n this.canvasManager.setMeterToPixelRatio(this.pixelInMeters);\r\n }\r\n // this.loadingState = \"loaded\";\r\n } else {\r\n this.loadingState = \"error\";\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to get building images:\", error);\r\n this.loadingState = \"error\";\r\n }\r\n }\r\n\r\n @Watch(\"rgbTiff\")\r\n @Watch(\"canvasElement\")\r\n async drawMap() {\r\n if (!this.canvasElement || !this.rgbTiff) {\r\n return;\r\n }\r\n\r\n // Ensure canvas is properly sized\r\n if (!this.canvasElement || !this.rgbTiff) {\r\n return;\r\n }\r\n\r\n // Ensure canvas is properly sized\r\n this.sizeCanvas(this.rgbTiff.width, this.rgbTiff.height);\r\n // Add a small delay to ensure canvas sizing is complete\r\n await new Promise((resolve) => setTimeout(resolve, 0));\r\n // Add a small delay to ensure canvas sizing is complete\r\n await new Promise((resolve) => setTimeout(resolve, 0));\r\n\r\n try {\r\n renderRGB(this.rgbTiff, undefined, this.canvasElement);\r\n this.loadingState = \"loaded\";\r\n } catch (error) {\r\n console.error(\"Failed to render RGB image:\", error);\r\n }\r\n }\r\n\r\n private undo() {\r\n if (this.canvasManager?.canUndo()) {\r\n this.canvasManager.undo();\r\n\r\n // Map harmonia-draw Tool enum back to local Tool\r\n const harmoniaTool = this.canvasManager.getState().selectedTool;\r\n switch (harmoniaTool) {\r\n case Tool.ROOF_POLYGON:\r\n this.currentTool = roofTool;\r\n break;\r\n case Tool.OBSTRUCTION_POLYGON:\r\n this.currentTool = obstructionTool;\r\n break;\r\n case Tool.MOVE:\r\n this.currentTool = moveTool;\r\n break;\r\n case Tool.MARK_ROOF_EDGE:\r\n this.currentTool = markRoofEdgeTool;\r\n break;\r\n default:\r\n this.currentTool = moveTool;\r\n break;\r\n }\r\n\r\n // Show toast message\r\n const t = getLanguageStrings(state.settings.language);\r\n this.showToastMessage(t.mapDraw.toast.undoSuccess, \"success\");\r\n\r\n // if (!this.currentPolygon?.closed) {\r\n // this.handleToolSelect(roofTool);\r\n // }\r\n }\r\n }\r\n\r\n private calculateSolarPanels(showToast: boolean = false) {\r\n if (this.currentPolygon) {\r\n this.calculateSolarPanelsForPolygon(this.currentPolygon, false);\r\n\r\n // Show toast message only when explicitly requested\r\n if (showToast) {\r\n const t = getLanguageStrings(state.settings.language);\r\n this.showToastMessage(\r\n t.mapDraw.toast.calculateSolarPanelsSuccess,\r\n \"success\",\r\n );\r\n }\r\n }\r\n }\r\n\r\n private markAsFlatRoof() {\r\n if (this.currentPolygon) {\r\n const newPolygon = {\r\n ...this.currentPolygon,\r\n pitch: 15,\r\n azimuth: 180, // East orientation\r\n };\r\n this.canvasManager?.updatePolygon(newPolygon);\r\n this.currentPolygon = newPolygon;\r\n this.calculateSolarPanelsForPolygon(newPolygon, true);\r\n\r\n // Show toast message\r\n const t = getLanguageStrings(state.settings.language);\r\n this.showToastMessage(\r\n t.mapDraw.toast.markAsFlatRoofSuccess,\r\n \"info\",\r\n );\r\n\r\n // Auto-select the mark roof edge tool\r\n this.handleToolSelect(markRoofEdgeTool);\r\n }\r\n }\r\n\r\n private calculateSolarPanelsForPolygon(\r\n polygon: Polygon,\r\n isFlatRoof: boolean,\r\n ) {\r\n const convertedSolarPanel: SolarPanelType = {\r\n ...this.solarPanel,\r\n widthMeters: this.solarPanel.widthMeters / this.pixelInMeters,\r\n heightMeters: this.solarPanel.heightMeters / this.pixelInMeters,\r\n };\r\n const inset = BORDER_INSET / this.pixelInMeters;\r\n const solarPanels = getOptimalSolarPositionFully(\r\n polygon,\r\n this.canvasManager.getObstacles(),\r\n convertedSolarPanel,\r\n polygon.azimuth,\r\n inset,\r\n polygon.pitch,\r\n state.settings.columnSpacing,\r\n state.settings.rowSpacing,\r\n );\r\n\r\n this.canvasManager.setPositionedSolarPanel(polygon.id, solarPanels);\r\n\r\n // Convert PositionedSolarPanel[] to SolarPanelSystemPart format\r\n const allPositionedPanels = this.canvasManager\r\n .getAllPositionedSolarPanels();\r\n this.solarSystem = Object.keys(allPositionedPanels).reduce(\r\n (acc, polygonId) => {\r\n acc[polygonId] = {\r\n numberOfPanels: allPositionedPanels[polygonId].length,\r\n panelType: this.solarPanel,\r\n pitch: polygon.pitch,\r\n azimuth: polygon.azimuth,\r\n roofArea: polygon.area,\r\n isFlatRoof: isFlatRoof,\r\n inverterType: \"central\",\r\n };\r\n return acc;\r\n },\r\n {} as { [id: string]: SolarSystem },\r\n );\r\n }\r\n\r\n private handlePitchChange(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n const pitch = parseFloat(target.value);\r\n if (this.currentPolygon) {\r\n const newPolygon = {\r\n ...this.currentPolygon,\r\n pitch: pitch,\r\n };\r\n this.canvasManager?.updatePolygon(newPolygon);\r\n this.currentPolygon = newPolygon;\r\n }\r\n if (\r\n this.currentPolygon?.type === \"roof\" &&\r\n this.canvasManager?.getPositionedSolarPanels(this.currentPolygon.id)\r\n ) {\r\n this.calculateSolarPanels(false);\r\n return;\r\n }\r\n }\r\n\r\n private handleAzimuthChange(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n const displayAzimuth = parseFloat(target.value);\r\n const azimuth = (displayAzimuth + 270) % 360;\r\n if (this.currentPolygon) {\r\n const newPolygon = {\r\n ...this.currentPolygon,\r\n azimuth: azimuth,\r\n };\r\n this.canvasManager?.updatePolygon(newPolygon);\r\n this.currentPolygon = newPolygon;\r\n }\r\n if (\r\n this.currentPolygon?.type === \"roof\" &&\r\n this.canvasManager?.getPositionedSolarPanels(this.currentPolygon.id)\r\n ) {\r\n this.calculateSolarPanels(false);\r\n return;\r\n }\r\n }\r\n\r\n private handleToolSelect(tool: LegacyTool) {\r\n if (\r\n this.currentPolygon && !this.currentPolygon.closed &&\r\n this.currentPolygon.points.length > 0\r\n ) {\r\n alert(\"Please close the polygon before selecting a tool\");\r\n return;\r\n }\r\n\r\n this.currentTool = tool;\r\n\r\n // Map legacy tools to harmonia-draw tools\r\n if (this.canvasManager) {\r\n switch (tool.name) {\r\n case \"roof\":\r\n this.canvasManager.setSelectedTool(Tool.ROOF_POLYGON);\r\n break;\r\n case \"obstruction\":\r\n this.canvasManager.setSelectedTool(\r\n Tool.OBSTRUCTION_POLYGON,\r\n );\r\n break;\r\n case \"move\":\r\n this.canvasManager.setSelectedTool(Tool.MOVE);\r\n break;\r\n case \"markRoofEdge\":\r\n this.canvasManager.setSelectedTool(Tool.MARK_ROOF_EDGE);\r\n break;\r\n default:\r\n // For other tools like delete, etc., we handle them manually\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private handleSettingsClose = () => {\r\n this.showSettings = false;\r\n };\r\n\r\n private handleSettingsSave = (event: CustomEvent<Settings>) => {\r\n state.settings = event.detail;\r\n state.settingsVersion++;\r\n };\r\n\r\n private handleTutorialClose = () => {\r\n this.showTutorial = false;\r\n };\r\n\r\n private handleMarkEdgeTutorialClose = () => {\r\n this.showMarkEdgeTutorial = false;\r\n this.handleToolSelect(markRoofEdgeTool);\r\n };\r\n\r\n private handleAdditionalToolsTutorialClose = () => {\r\n this.showAdditionalToolsTutorial = false;\r\n };\r\n\r\n private showToastMessage(\r\n message: string,\r\n type: \"success\" | \"info\" | \"warning\" | \"error\" = \"success\",\r\n ) {\r\n this.toastMessage = message;\r\n this.toastType = type;\r\n this.showToast = true;\r\n\r\n // Hide toast after 3 seconds\r\n setTimeout(() => {\r\n this.showToast = false;\r\n }, 3000);\r\n }\r\n\r\n render() {\r\n const t = getLanguageStrings(state.settings.language);\r\n return (\r\n <div\r\n class=\"flex flex-col justify-center items-center w-full h-full gap-4\"\r\n id=\"map-draw\"\r\n >\r\n {this.showTutorial && (\r\n <tutorial-component\r\n onClose={this.handleTutorialClose}\r\n title={t.mapDraw.tutorial.title}\r\n description={t.mapDraw.tutorial.description}\r\n videoSource={getAssetPath(\r\n \"./assets/tutorial1.mp4\",\r\n )}\r\n />\r\n )}\r\n {this.showMarkEdgeTutorial && (\r\n <tutorial-component\r\n onClose={this.handleMarkEdgeTutorialClose}\r\n title={t.mapDraw.tutorial.markEdge.title}\r\n description={t.mapDraw.tutorial.markEdge\r\n .description}\r\n videoSource={getAssetPath(\r\n \"./assets/tutorial2.mp4\",\r\n )}\r\n />\r\n )}\r\n {this.showAdditionalToolsTutorial && (\r\n <tutorial-component\r\n onClose={this\r\n .handleAdditionalToolsTutorialClose}\r\n title={t.mapDraw.tutorial.additionalTools.title}\r\n description={t.mapDraw.tutorial.additionalTools\r\n .description}\r\n videoSource={getAssetPath(\r\n \"./assets/tutorial3.mp4\",\r\n )}\r\n />\r\n )}\r\n {(state.latitude && state.longitude &&\r\n this.loadingState === \"loading\") && (\r\n <div class=\"flex items-center justify-center w-full bg-opacity-75 z-20 pt-7 rounded-4xl\">\r\n <div class=\"animate-spin rounded-full h-16 w-16 border-t-2 border-b-2 border-secondary\">\r\n </div>\r\n </div>\r\n )}\r\n {(state.latitude && state.longitude &&\r\n this.loadingState === \"error\") && (\r\n <div class=\"flex items-center justify-center w-full bg-opacity-75 z-20 pt-7 rounded-4xl\">\r\n <div class=\"text-red-500 text-center text-lg font-semibold\">\r\n {t.mapDraw.imageLoadError}\r\n </div>\r\n </div>\r\n )}\r\n <div class=\"flex items-start justify-center w-full bg-primary rounded-4xl\">\r\n <div\r\n class=\"relative flex items-center justify-center w-full rounded-4xl bg-secondary\"\r\n style={{\r\n aspectRatio: this.rgbTiff\r\n ? `${this.rgbTiff.width}/${this.rgbTiff.height}`\r\n : \"\",\r\n }}\r\n >\r\n <canvas\r\n ref={(el) => this.canvasElement = el}\r\n class=\"absolute top-0 left-0 w-full h-full rounded-4xl\"\r\n id=\"map-draw-canvas\"\r\n style={{\r\n cursor: this.currentTool.cursor,\r\n }}\r\n >\r\n </canvas>\r\n <canvas\r\n ref={(el) => this.polygonCanvas = el}\r\n class=\"absolute top-0 left-0 w-full h-full rounded-4xl\"\r\n style={{\r\n cursor: this.currentTool.cursor,\r\n }}\r\n >\r\n </canvas>\r\n </div>\r\n </div>\r\n\r\n {this.rgbTiff && (\r\n <div class=\"w-full\">\r\n <div class=\"w-full pb-4\">\r\n <tool-box\r\n currentTool={this.currentTool}\r\n onToolSelect={(tool) =>\r\n this.handleToolSelect(tool)}\r\n undoCallback={() => this.undo()}\r\n />\r\n </div>\r\n\r\n <div class=\"w-full\">\r\n <polygon-information\r\n currentPolygon={this.currentPolygon}\r\n numberOfPanels={this.currentPolygon\r\n ? this\r\n .solarSystem[this.currentPolygon.id]\r\n ?.numberOfPanels\r\n : undefined}\r\n handleAzimuthChange={(event) =>\r\n this.handleAzimuthChange(event)}\r\n handlePitchChange={(event) =>\r\n this.handlePitchChange(event)}\r\n calculateSolarPanels={() =>\r\n this.calculateSolarPanels(true)}\r\n markAsFlatRoof={() => this.markAsFlatRoof()}\r\n currentTool={this.currentTool.name}\r\n />\r\n </div>\r\n <div class=\"w-full\">\r\n <solar-system-form\r\n systemConfigs={this.solarSystem}\r\n polygons={this.canvasManager?.getPolygons()}\r\n roofCanvas={this.canvasElement}\r\n polygonCanvas={this.polygonCanvas}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n {this.showSettings && (\r\n <settings-modal\r\n settings={state.settings}\r\n onClose={this.handleSettingsClose}\r\n onSave={this.handleSettingsSave}\r\n />\r\n )}\r\n {this.showToast && (\r\n <toast-notification\r\n message={this.toastMessage}\r\n type={this.toastType}\r\n duration={3000}\r\n />\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
|
@@ -122,8 +122,7 @@ export class SolarSystemForm {
|
|
|
122
122
|
this.autonomy = result.autonomy * 100;
|
|
123
123
|
this.totalEnergyConsumption = result.totalEnergyConsumptionDay * 365;
|
|
124
124
|
// Calculate total energy production based on compensation and rate
|
|
125
|
-
this.totalEnergyProduction =
|
|
126
|
-
(result.compensationPerDay / this.compensationRate) * 365;
|
|
125
|
+
this.totalEnergyProduction = result.totalEnergyProduction * 365;
|
|
127
126
|
}
|
|
128
127
|
componentWillLoad() {
|
|
129
128
|
this.updateSystemConfigs();
|
|
@@ -246,13 +245,13 @@ export class SolarSystemForm {
|
|
|
246
245
|
// Reusable style objects
|
|
247
246
|
const borderStyle = { border: "1px solid var(--color-border)" };
|
|
248
247
|
const errorBorderStyle = { border: "1px solid var(--color-error)" };
|
|
249
|
-
return (h("div", { key: '
|
|
248
|
+
return (h("div", { key: '311a75f162c9b3d2bf0b3d4b1f46309404a4a66e', class: "flex flex-col justify-center items-center w-full h-full pt-4" // style={{
|
|
250
249
|
,
|
|
251
250
|
// display: (Object.keys(this.systemConfigs).length === 0)
|
|
252
251
|
// ? "none"
|
|
253
252
|
// : "flex",
|
|
254
253
|
// }}
|
|
255
|
-
id: "solar-system-form" }, h("h1", { key: '
|
|
254
|
+
id: "solar-system-form" }, h("h1", { key: 'db6fea28762915920105844e13a4f0d83a15034a', class: "text-2xl font-bold text-secondary mb-4 w-full" }, t.solarSystemForm.title), h("div", { key: '8f5fd44e0e0636662d4847ad99f695b79dcffb9c', class: "w-full bg-primary rounded-4xl space-y-6" }, h("div", { key: '6e67ca2315b60382e1962c31402c90b185af23d8', class: "space-y-4 p-4 rounded-4xl", style: borderStyle }, h("h2", { key: 'f68e091bc2b5ddb81cd2c1688f0c1ecfe77d8da9', class: "text-lg font-semibold text-secondary" }, t.solarSystemForm.systemInformation), h("div", { key: '8e7e789c7ea7ced4d6dff3fdba3219aa67107670', class: "flex flex-col sm:flex-row gap-4" }, h("div", { key: 'e969707b3b3f33511e8bf2675fc1a0001494d54b', class: "flex-1 bg-muted rounded-4xl p-4 space-y-3" }, h("div", { key: 'e87643a1d0ab7311735d480ebd1b84aef6c7c786', class: "flex items-center justify-between" }, h("label", { key: 'bfe9ceed374b5e9ff960ebc9f5e4d7cd6af3c753', class: "text-sm font-medium text-text-muted" }, t.solarSystemForm.numberOfPanels), !this.isIOS()
|
|
256
255
|
? (h("input", { type: "number", class: "w-20 px-3 py-1 rounded-full bg-muted text-muted-foreground text-right", value: this.numberOfPanels, readOnly: true }))
|
|
257
256
|
: (h("input", { type: "number", min: "1", max: this.maxPanels, 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", style: borderStyle, value: this.numberOfPanels, onInput: (e) => {
|
|
258
257
|
const value = parseInt(e.target
|
|
@@ -264,34 +263,34 @@ export class SolarSystemForm {
|
|
|
264
263
|
value;
|
|
265
264
|
this.recalculate();
|
|
266
265
|
}
|
|
267
|
-
} }))), !this.isIOS() && (h("input", { key: '
|
|
266
|
+
} }))), !this.isIOS() && (h("input", { key: 'cc83c205d13a0b5ec5aef34cfd1a60859bbc377a', type: "range", min: "1", max: this.maxPanels, step: "1", 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", value: this.numberOfPanels, onInput: (e) => {
|
|
268
267
|
this.numberOfPanels = parseInt(e.target
|
|
269
268
|
.value);
|
|
270
269
|
this.recalculate();
|
|
271
|
-
} }))), h("div", { key: '
|
|
272
|
-
this.numberOfPanels).toFixed(1), " kWp"))))), h("div", { key: '
|
|
270
|
+
} }))), h("div", { key: 'f325c5937603ebd211deb1cf3ae017364e296b26', class: "flex-1 bg-muted rounded-4xl p-4" }, h("div", { key: 'a62d362a9145ef8d16adc49f152961d161c4e7e2', class: "flex items-center justify-between" }, h("label", { key: '6931eef558eb8621da14badde66436003f5d12f1', class: "text-sm font-medium text-text-muted" }, t.solarSystemForm.panelPeakPower), h("span", { key: 'd72415ae3276ee7dfa5b53e899fc242c907a558f', class: "text-text-muted" }, this.panelPeakPower.toFixed(2), " kW")), h("div", { key: 'a6abf916d0cb7dbe9c31c4aa1b359c4a1fcdc3f5', class: "flex items-center justify-between mt-4" }, h("span", { key: 'bff9b4cd1fbcfd048ae9396e991e0c8a196616bc', class: "text-sm font-medium text-text-muted" }, t.solarSystemForm.totalSystemPeakPower), h("span", { key: '7838d7af86c7ecb57aaa8c503991024772ccdf54', class: "font-bold text-text-muted" }, (DEFAULT_SOLAR_PANEL_TYPE.kWattPeak *
|
|
271
|
+
this.numberOfPanels).toFixed(1), " kWp"))))), h("div", { key: 'd9c706b013801443a5b817e0e02630f9cee9cbab', class: "space-y-4 p-4 rounded-4xl", style: borderStyle }, h("h2", { key: 'afb88035523779fbc5de4756249ba92dbddef200', class: "text-lg font-semibold text-secondary" }, t.solarSystemForm.householdConsumptionTitle), h("div", { key: '98c8e30e7e585c5a247be0e686f792724d4b7bfe', class: "grid grid-rows-2 gap-0" }, h("div", { key: '86c02c113b3539c5afb353587d375483ad533f62', class: "grid grid-cols-2 gap-4" }, h("label", { key: '15938439fe3051b67e12c10c021511096e361893', class: "block text-sm font-medium text-text-muted" }, t.solarSystemForm.annualConsumption), h("label", { key: '7541d87d9cbc63c054d5cdbd7b0f7abb27fc9761', class: "block text-sm font-medium text-text-muted" }, t.solarSystemForm.consumptionProfileTitle)), h("div", { key: '38684b748e232d6af285e61ce9a335e10c0d023b', class: "grid grid-cols-2 gap-4" }, h("input", { key: 'cac666a72ba7fe3da002ff7a97eaed6c7995aa20', type: "number", class: "w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground", style: borderStyle, value: this.householdConsumption, onInput: (e) => {
|
|
273
272
|
this.householdConsumption = parseInt(e.target
|
|
274
273
|
.value);
|
|
275
274
|
this.recalculate();
|
|
276
|
-
} }), h("select", { key: '
|
|
275
|
+
} }), h("select", { key: 'a2a0c25c560253412736f94a004ee0552faab64e', class: "w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground", style: borderStyle, onChange: (e) => {
|
|
277
276
|
this.consumptionProfile =
|
|
278
277
|
e.target
|
|
279
278
|
.value;
|
|
280
279
|
this.recalculate();
|
|
281
|
-
} }, h("option", { key: '
|
|
280
|
+
} }, h("option", { key: '727866d2da3557657e1bd770a4a4bbb247406dac', value: "mostly_at_home", selected: this.consumptionProfile ===
|
|
282
281
|
"mostly_at_home" }, t.solarSystemForm.consumptionProfiles
|
|
283
|
-
.mostlyAtHome), h("option", { key: '
|
|
282
|
+
.mostlyAtHome), h("option", { key: '8bc3ed0c0ac3770bad515d1f46964e9cd27a8ef3', value: "mostly_away", selected: this.consumptionProfile ===
|
|
284
283
|
"mostly_away" }, t.solarSystemForm.consumptionProfiles
|
|
285
|
-
.mostlyAway))))), h("div", { key: '
|
|
284
|
+
.mostlyAway))))), h("div", { key: '4e44d5396ae94949e8239beeeb7a0a636c2c8472', class: "space-y-4 p-4 rounded-4xl", style: borderStyle }, h("h2", { key: '1727e2228faf014143958328c1e7b538ab0f67f9', class: "text-lg font-semibold text-secondary" }, t.solarSystemForm.additionalComponents.title), h("div", { key: '4ff16de6af482a139e9fec5cabf8bc78a7c47f95', class: "flex flex-col gap-4" }, h("div", { key: '27992331cc4fb1c16a1f1328b70c8e4aded0ab92', class: "flex flex-col bg-muted rounded-4xl p-4 gap-4" }, h("div", { key: '6150dc9f6abbc97abc0f3e5ae44b2e8602ee42d2', class: "flex items-center justify-between" }, h("div", { key: 'b0e16b75c60a64e2a6a3d309519860fee1d26276', class: "flex items-center gap-2" }, h("input", { key: 'cc63c3fb3857ac03751a316be5707557aa93ff1a', type: "checkbox", id: "heatPump", class: "w-4 h-4 accent-tertiary border-border rounded-full focus:ring-tertiary focus:ring-offset-0 focus:ring-2", checked: this.heatPump > 0, onChange: (e) => {
|
|
286
285
|
this.heatPump =
|
|
287
286
|
e.target
|
|
288
287
|
.checked
|
|
289
288
|
? 100
|
|
290
289
|
: 0;
|
|
291
290
|
this.recalculate();
|
|
292
|
-
} }), h("label", { key: '
|
|
291
|
+
} }), h("label", { key: 'c32094e4e1121e9e6085fee481aa293bdef2eec2', htmlFor: "heatPump", class: "text-text-muted" }, t.solarSystemForm
|
|
293
292
|
.additionalComponents
|
|
294
|
-
.heatPump)), (this.heatPump > 0 && !this.isIOS()) && (h("span", { key: '
|
|
293
|
+
.heatPump)), (this.heatPump > 0 && !this.isIOS()) && (h("span", { key: '045bebcf61f9c60665d5093a920914caf3c16e2e', class: "text-text-muted" }, this.heatPump, " m\u00B2"))), this.heatPump > 0 && (h("div", { key: 'd68c70c1134f3efd4319e7ad54d0b7f3b159fd5d', class: "flex flex-col gap-2" }, this.isIOS()
|
|
295
294
|
? (h("div", { class: "flex items-center gap-2" }, h("input", { type: "number", min: "10", max: "300", step: "10", class: "flex-1 px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted", style: borderStyle, value: this.heatPump, onInput: (e) => {
|
|
296
295
|
const value = parseInt(e.target
|
|
297
296
|
.value);
|
|
@@ -307,45 +306,45 @@ export class SolarSystemForm {
|
|
|
307
306
|
parseInt(e.target
|
|
308
307
|
.value);
|
|
309
308
|
this.recalculate();
|
|
310
|
-
} }))))), h("div", { key: '
|
|
309
|
+
} }))))), h("div", { key: '3402972a0d31a544bed7bbbf7dbe42299b7b66d5', class: "flex flex-col bg-muted rounded-4xl p-4 gap-4" }, h("div", { key: 'b23ef38c61b55df0cb10b1a6ea2091dc9a1c3369', class: "flex items-center justify-between" }, h("div", { key: '9c065d24ba5257de49c4565d5d5c3eff72c98ecf', class: "flex items-center gap-2" }, h("input", { key: '35e60291e50c74722f96b7cb29861dfc9a73695a', type: "checkbox", id: "electricCar", class: "w-4 h-4 accent-tertiary border-border rounded focus:ring-tertiary focus:ring-offset-0 focus:ring-2", checked: this.electricCar, onChange: (e) => {
|
|
311
310
|
this.electricCar =
|
|
312
311
|
e.target
|
|
313
312
|
.checked;
|
|
314
313
|
this.recalculate();
|
|
315
|
-
} }), h("label", { key: '
|
|
314
|
+
} }), h("label", { key: 'c07c96918e94336b73627b453d6ebf7df2de752a', htmlFor: "electricCar", class: "text-text-muted" }, t.solarSystemForm
|
|
316
315
|
.additionalComponents
|
|
317
|
-
.electricCar))), this.electricCar && (h("div", { key: '
|
|
316
|
+
.electricCar))), this.electricCar && (h("div", { key: 'c8f52e9a0382fd90beba9161007de12fc68f1243', class: "flex flex-col gap-2" }, h("div", { key: 'c18810ddb896191e91ac1a9ab8d75cbe45a1e34a', class: "grid grid-cols-2 gap-4" }, h("label", { key: '7b6cf7fc61fff0379dae3a3ba6125d2dff648f43', class: "text-sm text-text-muted" }, t.solarSystemForm
|
|
318
317
|
.additionalComponents
|
|
319
|
-
.chargingTime), h("label", { key: '
|
|
318
|
+
.chargingTime), h("label", { key: '6fb22cf041d293e1ca3c9059d8d5f7044dec2e15', class: "text-sm text-text-muted" }, t.solarSystemForm
|
|
320
319
|
.additionalComponents
|
|
321
|
-
.kilometersPerYear)), h("div", { key: '
|
|
320
|
+
.kilometersPerYear)), h("div", { key: '05e1f9a986bd2c7607019ee9c0a83e30f0eef548', class: "grid grid-cols-2 gap-4" }, h("select", { key: '9112adffaa66ab2a8c0432caf76dfd2244de7fa0', class: "w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted", onChange: (e) => {
|
|
322
321
|
this.electricCarChargingTime =
|
|
323
322
|
e.target
|
|
324
323
|
.value;
|
|
325
324
|
this.recalculate();
|
|
326
|
-
}, style: borderStyle }, h("option", { key: '
|
|
325
|
+
}, style: borderStyle }, h("option", { key: '67bec333b8a190edc43a90424df590d3abb5024a', value: "day", selected: this
|
|
327
326
|
.electricCarChargingTime ===
|
|
328
327
|
"day" }, t.solarSystemForm
|
|
329
328
|
.additionalComponents
|
|
330
|
-
.chargingTimeDay), h("option", { key: '
|
|
329
|
+
.chargingTimeDay), h("option", { key: 'd996c506dc54d4495fc019fc3191ccd00b515788', value: "night", selected: this
|
|
331
330
|
.electricCarChargingTime ===
|
|
332
331
|
"night" }, t.solarSystemForm
|
|
333
332
|
.additionalComponents
|
|
334
|
-
.chargingTimeNight)), h("input", { key: '
|
|
333
|
+
.chargingTimeNight)), h("input", { key: '5add5ab3deb8d0db82127793ee5dac7fcc4a93b7', type: "number", min: "1000", max: "50000", step: "1000", class: "w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted", value: this.kmDrivenPerYear, onInput: (e) => {
|
|
335
334
|
this.kmDrivenPerYear =
|
|
336
335
|
parseInt(e.target
|
|
337
336
|
.value);
|
|
338
337
|
this.recalculate();
|
|
339
|
-
}, style: borderStyle }))))), h("div", { key: '
|
|
338
|
+
}, style: borderStyle }))))), h("div", { key: '041fc0246af12eb78111569c884bd20614c37322', class: "flex flex-col bg-muted rounded-4xl p-4 gap-4" }, h("div", { key: 'e4ebee64adf842e629e5a1e250cfd65821eb7dbc', class: "flex items-center justify-between" }, h("div", { key: 'dac660c6e7663d4cde45757d2641aef1c0c2b835', class: "flex items-center gap-2" }, h("input", { key: 'db51aab5ce13c52db32f5ff4426bc5876cd26cc6', type: "checkbox", id: "battery", class: "w-4 h-4 accent-tertiary border-border rounded-full focus:ring-tertiary focus:ring-offset-0 focus:ring-2", checked: this.battery > 0, onChange: (e) => {
|
|
340
339
|
this.battery =
|
|
341
340
|
e.target
|
|
342
341
|
.checked
|
|
343
342
|
? 5
|
|
344
343
|
: 0;
|
|
345
344
|
this.recalculate();
|
|
346
|
-
} }), h("label", { key: '
|
|
345
|
+
} }), h("label", { key: 'c4178834ed11cd595bbf7a5a33a6c53c24e4b0f0', htmlFor: "battery", class: "text-text-muted" }, t.solarSystemForm
|
|
347
346
|
.additionalComponents
|
|
348
|
-
.battery)), (this.battery > 0 && !this.isIOS()) && (h("span", { key: '
|
|
347
|
+
.battery)), (this.battery > 0 && !this.isIOS()) && (h("span", { key: '8026f5753a7b0ccc9f65b05f8d8ff8ab006cf0e9', class: "text-text-muted" }, this.battery, " kWh"))), this.battery > 0 && (h("div", { key: '331ec7827bae37177faeb3e956086acf954a0d7d', class: "flex flex-col gap-2" }, this.isIOS()
|
|
349
348
|
? (h("div", { class: "flex items-center gap-2" }, h("input", { type: "number", min: "1", max: "20", step: "1", class: "flex-1 px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted", value: this.battery, onInput: (e) => {
|
|
350
349
|
const value = parseInt(e.target
|
|
351
350
|
.value);
|
|
@@ -360,52 +359,52 @@ export class SolarSystemForm {
|
|
|
360
359
|
this.battery = parseInt(e.target
|
|
361
360
|
.value);
|
|
362
361
|
this.recalculate();
|
|
363
|
-
} }))))))), h("div", { key: '
|
|
362
|
+
} }))))))), h("div", { key: '4be5a459e2750973741d60888bc4e3c6ab255016', class: "space-y-4 p-4 rounded-4xl", style: borderStyle }, h("h2", { key: 'c48c733e3431048476ef816b0e5bdd5baeac072c', class: "text-lg font-semibold text-secondary" }, t.solarSystemForm.electricityCostsTitle), h("div", { key: '148b904319ff9e37cff886e307925f5ceed5214b', style: {
|
|
364
363
|
display: "grid",
|
|
365
364
|
gridTemplateColumns: "repeat(auto-fit, minmax(250px, 1fr))",
|
|
366
365
|
gap: "1rem",
|
|
367
|
-
} }, h("div", { key: '
|
|
366
|
+
} }, h("div", { key: '44dca317fe36f8b595cd2e0db43a047b79da028d' }, h("label", { key: 'af429b76716c987a36bd80328e7a6cbda115a758', class: "block text-sm font-medium text-text-muted mb-1" }, t.solarSystemForm.electricityPrice), h("input", { key: '69f82fc1bf29d648da35147827934cb954e7c15f', type: "number", step: "0.01", class: "w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted", style: borderStyle, value: this.electricityPrice.toFixed(2), onInput: (e) => {
|
|
368
367
|
this.electricityPrice = parseFloat(e.target
|
|
369
368
|
.value);
|
|
370
369
|
this.recalculate();
|
|
371
|
-
} })), h("div", { key: '
|
|
370
|
+
} })), h("div", { key: '556e7cac0f6eb84c712f32fb865236c117b0c850' }, h("label", { key: '8c01e4b3617b42e0c08f7c70df0bf6bd5f9a1e36', class: "block text-sm font-medium text-text-muted mb-1" }, t.solarSystemForm.compensationRate), h("input", { key: '40e3f63d65fd85f95fcd872f9a6cec1a6765329c', type: "number", step: "0.01", class: "w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted", style: borderStyle, value: this.compensationRate.toFixed(2), onInput: (e) => {
|
|
372
371
|
this.compensationRate = parseFloat(e.target
|
|
373
372
|
.value);
|
|
374
373
|
this.recalculate();
|
|
375
|
-
} })), h("div", { key: '
|
|
374
|
+
} })), h("div", { key: '5995e5ebbafe4c5c11c57c4000a6dbe91b06afd6' }, h("label", { key: '0f69d8930ca657fae719a98d042256c91d0cbd46', class: "block text-sm font-medium text-text-muted mb-1" }, t.solarSystemForm.annualPriceIncrease), h("input", { key: '3c8b0670ce258ab44f5af28b94a922d81d32f793', type: "number", step: "0.1", class: "w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted", style: borderStyle, value: this.annualPriceIncrease.toFixed(1), onInput: (e) => {
|
|
376
375
|
this.annualPriceIncrease = parseFloat(e.target
|
|
377
376
|
.value);
|
|
378
377
|
this.recalculate();
|
|
379
|
-
} })))), h("div", { key: '
|
|
378
|
+
} })))), h("div", { key: '32450c874314588fc2864bf4bc6b659c45767224', class: "space-y-4 p-4 rounded-4xl", style: borderStyle }, h("h2", { key: 'dfc1a170e86411517c465535077da5c7aacc0c3d', class: "text-lg font-semibold text-secondary" }, t.solarSystemForm.resultsTitle), h("div", { key: '464e5e32dbfda19d75f161a4cae4dd854196897a', class: "bg-muted rounded-4xl p-4" }, h("div", { key: '1c7af874a19f1463e8155c8adf678e36a10aadfa', class: "flex flex-col sm:flex-row sm:items-center justify-between" }, h("span", { key: 'caf0cc0319bb343b969e1fb53d25c51c8dd3364c', class: "text-text-muted" }, t.solarSystemForm.autonomy), h("span", { key: 'f103cc8d1d244c4075e8dfb965fae75a128605ee', class: "text-xl font-bold text-secondary mt-1 sm:mt-0" }, this.autonomy > 100
|
|
380
379
|
? "100"
|
|
381
|
-
: this.formatEuropeanNumber(this.autonomy, 1), "%")), h("div", { key: '
|
|
382
|
-
.solarSystemForm.year)), h("div", { key: '
|
|
383
|
-
.monetaryBenefit20Years)), h("span", { key: '
|
|
380
|
+
: this.formatEuropeanNumber(this.autonomy, 1), "%")), h("div", { key: '6b315c64fc618a5625bdf18f95807b1810fe7d02', class: "flex flex-col sm:flex-row sm:items-center justify-between mt-4" }, h("span", { key: '4d9622101eaf087b28c8e446071f0dd19b537f82', class: "text-text-muted" }, t.solarSystemForm.totalEnergyConsumption), h("span", { key: '42cb8b45c2a47670a685a55e090a32e33a6ea7e8', class: "text-xl font-bold text-secondary mt-1 sm:mt-0" }, this.formatEuropeanNumber(this.totalEnergyConsumption, 0), " kWh/", t.solarSystemForm.year)), h("div", { key: 'ad73d33a4744424e62577ca61fe99a07c724a8e7', class: "flex flex-col sm:flex-row sm:items-center justify-between mt-4" }, h("span", { key: 'a10a292f89d2d9b8ae0c53470fdd2a0959db662b', class: "text-text-muted" }, t.solarSystemForm.totalEnergyProduction), h("span", { key: '022d2b3e88a804c0412d199b60092b338cc5a096', class: "text-xl font-bold text-secondary mt-1 sm:mt-0" }, this.formatEuropeanNumber(this.totalEnergyProduction, 0), " kWh/", t.solarSystemForm.year)), h("div", { key: 'bd2f4c86276c958989c2e9f306b2b3fc9ad11c16', class: "flex flex-col sm:flex-row sm:items-center justify-between mt-4" }, h("div", { key: 'c23ffe0f98b85a0dc1a12faa81c3e6ed6728326f', class: "flex items-center gap-2" }, h("span", { key: '6bcd71b98de340cd3b963c03c7f81f154a591b0c', class: "text-text-muted" }, t.solarSystemForm.costSavings)), h("span", { key: 'b8a533e06fd8a16af4889a300962a2625dfbb414', class: "text-xl font-bold text-success mt-1 sm:mt-0" }, this.formatEuropeanNumber(this.costSavings), "\u20AC/", t
|
|
381
|
+
.solarSystemForm.year)), h("div", { key: '66b123f86982e0c700485d08145e48d5f11f416a', class: "flex flex-col sm:flex-row sm:items-center justify-between mt-4" }, h("div", { key: '78d0529ad89f93678fe1770b06bb762e36598c36', class: "flex items-center gap-2" }, h("span", { key: 'bc4c266678fe3d9ba9e74105a39fa1e806afcf11', class: "text-text-muted" }, t.solarSystemForm.compensation20Years)), h("span", { key: '82942abbb9e6c6466a897e3a6d7506a25a6e1cfa', class: "text-xl font-bold text-success mt-1 sm:mt-0" }, this.formatEuropeanNumber(this.compensation20Years), "\u20AC")), h("div", { key: 'b6bbec34158fe9cbee87d0f09137a2eee8413859', class: "flex flex-col sm:flex-row sm:items-center justify-between mt-4" }, h("div", { key: 'c53e4100aabd7666c31c992d475ceb93e0659bf6', class: "flex items-center gap-2" }, h("span", { key: '17e278b24e677d980bb0ed06b4d70ae9ed4bd43d', class: "text-text-muted" }, t.solarSystemForm
|
|
382
|
+
.monetaryBenefit20Years)), h("span", { key: '04620169c1f1e0d9f06a6a009e041d596102676b', class: "text-xl font-bold text-success mt-1 sm:mt-0" }, this.formatEuropeanNumber(this.savedCosts20Years), "\u20AC")))), h("div", { key: 'a973dd649f27c0a4c465ce62e197e8c1c6923e7c', class: "space-y-4 p-4 rounded-4xl", style: borderStyle }, h("h2", { key: 'c804251249a2a826d54c6f1ff253b985e52ebf93', class: "text-lg font-semibold text-secondary" }, t.solarSystemForm.requestOffer), h("div", { key: 'cc7ffe567ea55ae096f22574423629523186d849', style: {
|
|
384
383
|
display: "grid",
|
|
385
384
|
gridTemplateColumns: "repeat(auto-fit, minmax(250px, 1fr))",
|
|
386
385
|
gap: "1rem",
|
|
387
|
-
} }, h("div", { key: '
|
|
386
|
+
} }, h("div", { key: '2d484636c1b4d742ea2449ad9dd1c94dd396f324' }, h("label", { key: 'f668d8fd583b87ffc87fc878e90daf97d0065e34', class: "block text-sm font-medium text-text-muted mb-1" }, t.solarSystemForm.name), h("input", { key: 'cf0954936ec766a5721be89c2a8dd1a21495e2da', type: "text", class: `w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground`, style: this.nameError
|
|
388
387
|
? errorBorderStyle
|
|
389
388
|
: borderStyle, value: this.name, onInput: (e) => {
|
|
390
389
|
this.name =
|
|
391
390
|
e.target
|
|
392
391
|
.value;
|
|
393
392
|
this.validateForm();
|
|
394
|
-
}, placeholder: "Your name" }), this.nameError && (h("p", { key: '
|
|
393
|
+
}, placeholder: "Your name" }), this.nameError && (h("p", { key: 'e78085692549c91360110eec20dd03ed173030bd', class: "text-error text-sm mt-1" }, this.nameError))), h("div", { key: 'd5fa2f82e546bbaa4516fb83cd91dfde556b7632' }, h("label", { key: '273f77ed86813e4de109a22b5064b0ca18ec7283', class: "block text-sm font-medium text-text-muted mb-1" }, t.solarSystemForm.email), h("input", { key: '6ec96604898b4f1ff0e68c7b0e74e95c67e91a33', type: "email", class: `w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground`, style: this.emailError
|
|
395
394
|
? errorBorderStyle
|
|
396
395
|
: borderStyle, value: this.email, onInput: (e) => {
|
|
397
396
|
this.email =
|
|
398
397
|
e.target
|
|
399
398
|
.value;
|
|
400
399
|
this.validateForm();
|
|
401
|
-
}, placeholder: "your.email@example.com" }), this.emailError && (h("p", { key: '
|
|
400
|
+
}, placeholder: "your.email@example.com" }), this.emailError && (h("p", { key: 'f8f2deb4849f570a3ad1fb57705a9dc8f625e285', class: "text-error text-sm mt-1" }, this.emailError))), h("div", { key: 'fd790363ec794d7de01a62a947c208301c760d1f' }, h("label", { key: 'e8f9181e7f09831d4dc9ca2416d36c52d775e086', class: "block text-sm font-medium text-text-muted mb-1" }, t.solarSystemForm.phone), h("input", { key: '993cbdee6308406cef97bb37242f95d0692b92d3', type: "tel", class: `w-full px-4 py-2 rounded-4xl focus:ring-2 focus:ring-tertiary focus:border-transparent bg-muted text-muted-foreground`, style: this.phoneError
|
|
402
401
|
? errorBorderStyle
|
|
403
402
|
: borderStyle, value: this.phone, onInput: (e) => {
|
|
404
403
|
this.phone =
|
|
405
404
|
e.target
|
|
406
405
|
.value;
|
|
407
406
|
this.validateForm();
|
|
408
|
-
}, placeholder: "+34 123 456 789" }), this.phoneError && (h("p", { key: '
|
|
407
|
+
}, placeholder: "+34 123 456 789" }), this.phoneError && (h("p", { key: 'b6f4e2fcc3408d8872786e0e73143afc47bc3340', class: "text-error text-sm mt-1" }, this.phoneError)))), h("div", { key: '23e5cfe888637f9ed46262ff36a935266fe11e1c', class: "flex flex-col items-center gap-4" }, h("button", { key: 'e8df6756b1e9c6881b239e992550600605201f15', onClick: () => this.handleRequestOffer(), disabled: !this.name.trim() ||
|
|
409
408
|
!this.email.trim() || !!this.nameError ||
|
|
410
409
|
!!this.emailError || !!this.phoneError ||
|
|
411
410
|
this.isSubmitting, class: `px-6 py-3 rounded-4xl transition-colors duration-200 flex items-center gap-2 ${this.isSubmitting
|
|
@@ -414,9 +413,9 @@ export class SolarSystemForm {
|
|
|
414
413
|
color: this.isSubmitting
|
|
415
414
|
? "var(--color-text-muted)"
|
|
416
415
|
: "#ffffff",
|
|
417
|
-
} }, this.isSubmitting && (h("div", { key: '
|
|
416
|
+
} }, this.isSubmitting && (h("div", { key: 'd519b1d5f66bcc30b695e8ae10396a809710b112', class: "w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin" })), this.isSubmitting
|
|
418
417
|
? t.solarSystemForm.sending
|
|
419
|
-
: t.solarSystemForm.requestOfferButton), this.submitMessage && (h("div", { key: '
|
|
418
|
+
: t.solarSystemForm.requestOfferButton), this.submitMessage && (h("div", { key: '33241fd401bd5ce53631573b04cc1a52a463f955', class: `text-sm px-4 py-2 rounded-4xl ${this.submitSuccess
|
|
420
419
|
? "bg-success/10 text-success border border-success/20"
|
|
421
420
|
: "bg-error/10 text-error border border-error/20"}` }, this.submitMessage)))))));
|
|
422
421
|
}
|