door_models 5.2.2 → 5.2.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/lib/context/DoorContext.tsx","../src/lib/utils/materials.ts","../src/lib/components/DoorModels.tsx","../src/lib/components/DoorConfigurator.tsx"],"sourcesContent":["import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n} from \"react\";\n\nimport { availableMaterials } from \"../utils/materials\";\ntype MaterialName = keyof typeof availableMaterials;\n\n// --- Type Definitions to Match JSON Structure ---\n\ntype DoorType = {\n doorMaterial: string;\n doorWidth: number;\n doorHeight: number;\n theDoorDepth: number;\n doorPivot: string;\n doorOpening: string;\n};\n\ntype DoorFrameType = {\n frameMaterial: string;\n doorStopMaterial?: string;\n gasketMaterial: string;\n hingeMaterial: string;\n glassMaterial?: string;\n frameDepth: number;\n topThk: string;\n sidesThk: string;\n notchDepth: string;\n notchWidth: string;\n doorStopWidth: number;\n doorStopDepth: number;\n doorStopOffset: string;\n notchposition: number;\n gasketWidth: number;\n gasketDepth: number;\n secondDoorStopWidth: number;\n secondDoorStopDepth: number;\n secondDoorStopOffset: number;\n};\n\ntype InteriorFanlightType = {\n visible: boolean;\n height: number;\n material: string;\n};\n\ntype ExteriorFanlightType = {\n visible: boolean;\n height: number;\n depth: number;\n material: string;\n};\n\ntype OcculusType = {\n visible: boolean;\n infillVisible: boolean;\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n material: string;\n depth: number;\n};\n\ntype CoverPanelType = {\n visible: boolean;\n width: number;\n height: number;\n depth: number;\n material: string;\n};\n\ntype FrameAndDoorSettings = Partial<DoorFrameType> & { doorDepth?: number };\ntype GlassType = {\n visible: boolean;\n material: string;\n depth: number;\n};\n\ntype DoorPlaneType = {\n visible: boolean;\n material: string;\n};\n\ntype MaterialProps = {\n D_SRF_DECOR_2?: string;\n D_SRF_DECOR?: string;\n D_PRF_COLOR?: string;\n D_FR_SRF_DECOR?: string;\n D_FR_SRF_DECOR_S2?: string;\n D_FR_COLOR?: string;\n D_GASKET?: string;\n};\n\n// --- Main Context Type ---\ntype ConfiguratorContextType = {\n is2D: boolean;\n setIs2D: React.Dispatch<React.SetStateAction<boolean>>;\n isPlaneVisible: boolean;\n setIsPlaneVisible: React.Dispatch<React.SetStateAction<boolean>>;\n isFrameVisible: boolean;\n setIsFrameVisible: React.Dispatch<React.SetStateAction<boolean>>;\n cpid: string;\n setCpid: React.Dispatch<React.SetStateAction<string>>;\n door: DoorType;\n setDoor: React.Dispatch<React.SetStateAction<DoorType>>;\n doorFrame: DoorFrameType;\n setDoorFrame: React.Dispatch<React.SetStateAction<DoorFrameType>>;\n interiorFanlight: InteriorFanlightType;\n setInteriorFanlight: React.Dispatch<\n React.SetStateAction<InteriorFanlightType>\n >;\n exteriorFanlight: ExteriorFanlightType;\n setExteriorFanlight: React.Dispatch<\n React.SetStateAction<ExteriorFanlightType>\n >;\n exteriorFanlightType: string;\n setExteriorFanlightType: React.Dispatch<React.SetStateAction<string>>;\n occulus: OcculusType;\n setOcculus: React.Dispatch<React.SetStateAction<OcculusType>>;\n frontCoverPanel: CoverPanelType;\n setFrontCoverPanel: React.Dispatch<React.SetStateAction<CoverPanelType>>;\n backCoverPanel: CoverPanelType;\n setBackCoverPanel: React.Dispatch<React.SetStateAction<CoverPanelType>>;\n frontDoorPlane: DoorPlaneType;\n setFrontDoorPlane: React.Dispatch<React.SetStateAction<DoorPlaneType>>;\n backDoorPlane: DoorPlaneType;\n setBackDoorPlane: React.Dispatch<React.SetStateAction<DoorPlaneType>>;\n glass: GlassType;\n setGlass: React.Dispatch<React.SetStateAction<GlassType>>;\n frameType: string;\n setFrameType: React.Dispatch<React.SetStateAction<string>>;\n bodyType: string;\n setBodyType: React.Dispatch<React.SetStateAction<string>>;\n totalHeight: number;\n setTotalHeight: React.Dispatch<React.SetStateAction<number>>;\n totalWidth: number;\n setTotalWidth: React.Dispatch<React.SetStateAction<number>>;\n handleParseCpid: (cpidToParse: string) => void;\n // --- States for Test Materials ---\n testDoorMaterial: string;\n setTestDoorMaterial: React.Dispatch<React.SetStateAction<string>>;\n testFrameMaterial: string;\n setTestFrameMaterial: React.Dispatch<React.SetStateAction<string>>;\n testGasketMaterial: string;\n setTestGasketMaterial: React.Dispatch<React.SetStateAction<string>>;\n testInteriorFanlightMaterial: string;\n setTestInteriorFanlightMaterial: React.Dispatch<React.SetStateAction<string>>;\n testExteriorFanlightMaterial: string;\n setTestExteriorFanlightMaterial: React.Dispatch<React.SetStateAction<string>>;\n testOcculusInfillMaterial: string;\n setTestOcculusInfillMaterial: React.Dispatch<React.SetStateAction<string>>;\n testGlassInfillMaterial: string;\n setTestGlassInfillMaterial: React.Dispatch<React.SetStateAction<string>>;\n testDoorStopMaterial: string;\n setTestDoorStopMaterial: React.Dispatch<React.SetStateAction<string>>;\n testHingeMaterial: string;\n setTestHingeMaterial: React.Dispatch<React.SetStateAction<string>>;\n testFrontCoverPanelMaterial: string;\n setTestFrontCoverPanelMaterial: React.Dispatch<React.SetStateAction<string>>;\n testBackCoverPanelMaterial: string;\n setTestBackCoverPanelMaterial: React.Dispatch<React.SetStateAction<string>>;\n testFrontDoorPlaneMaterial: string;\n setTestFrontDoorPlaneMaterial: React.Dispatch<React.SetStateAction<string>>;\n testBackDoorPlaneMaterial: string;\n setTestBackDoorPlaneMaterial: React.Dispatch<React.SetStateAction<string>>;\n glassVisible: boolean;\n setGlassVisible: React.Dispatch<React.SetStateAction<boolean>>;\n glassDepth: number;\n setGlassDepth: React.Dispatch<React.SetStateAction<number>>;\n doorHeight: number;\n newPivotPosition: number;\n setNewPivotPosition: React.Dispatch<React.SetStateAction<number>>;\n isDoubleDoor: boolean;\n setIsDoubleDoor: React.Dispatch<React.SetStateAction<boolean>>;\n materials: MaterialProps;\n};\n\nconst ConfiguratorContext = createContext<ConfiguratorContextType | undefined>(\n undefined\n);\n\ntype ConfiguratorProviderProps = {\n children: React.ReactNode;\n initialIs2D?: boolean;\n initialMaterials?: MaterialProps;\n};\n\nexport const ConfiguratorProvider = ({\n children,\n initialIs2D = false,\n initialMaterials = {},\n}: ConfiguratorProviderProps) => {\n const [materials, setMaterials] = useState<MaterialProps>(initialMaterials);\n const [is2D, setIs2D] = useState<boolean>(initialIs2D);\n const [isPlaneVisible, setIsPlaneVisible] = useState<boolean>(false);\n const [isFrameVisible, setIsFrameVisible] = useState<boolean>(true);\n const [cpid, setCpid] = useState<string>(\"\");\n const [totalHeight, setTotalHeight] = useState<number>(2700);\n const [totalWidth, setTotalWidth] = useState<number>(974);\n const [glassVisible, setGlassVisible] = useState(false);\n const [glassDepth, setGlassDepth] = useState(8);\n const [isDoubleDoor, setIsDoubleDoor] = useState<boolean>(false);\n const [door, setDoor] = useState<DoorType>({\n doorMaterial: \"door_material\",\n doorWidth: 0,\n doorHeight: 0,\n theDoorDepth: 40,\n doorPivot: \"left\",\n doorOpening: \"out\",\n });\n const [doorFrame, setDoorFrame] = useState<DoorFrameType>({\n frameMaterial: \"doorFrame_material\",\n doorStopMaterial: \"doorStop_material\",\n gasketMaterial: \"gasket_material\",\n hingeMaterial: \"hinge_material\",\n glassMaterial: \"glass_material\",\n frameDepth: 103,\n topThk: \"20mm\",\n sidesThk: \"20mm\",\n doorStopOffset: \"30mm\",\n doorStopWidth: 20,\n doorStopDepth: 13,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n secondDoorStopWidth: 20,\n secondDoorStopDepth: 30,\n secondDoorStopOffset: 13,\n });\n const [interiorFanlight, setInteriorFanlight] =\n useState<InteriorFanlightType>({\n visible: false,\n height: 300,\n material: \"interiorFanlight_material\",\n });\n const [exteriorFanlight, setExteriorFanlight] =\n useState<ExteriorFanlightType>({\n visible: false,\n height: 300,\n depth: 60,\n material: \"exteriorFanlight_material\",\n });\n const [occulus, setOcculus] = useState<OcculusType>({\n visible: false,\n infillVisible: true,\n x1: 150,\n x2: 150,\n y1: 150,\n y2: 150,\n material: \"infill_material\",\n depth: 20,\n });\n const [frontCoverPanel, setFrontCoverPanel] = useState<CoverPanelType>({\n visible: false,\n width: 73,\n height: 2200,\n depth: 12,\n material: \"front_cover_material\",\n });\n const [backCoverPanel, setBackCoverPanel] = useState<CoverPanelType>({\n visible: false,\n width: 73,\n height: 2200,\n depth: 12,\n material: \"back_cover_material\",\n });\n const [frontDoorPlane, setFrontDoorPlane] = useState<DoorPlaneType>({\n visible: true,\n material: \"test_material\",\n });\n const [backDoorPlane, setBackDoorPlane] = useState<DoorPlaneType>({\n visible: true,\n material: \"test_material\",\n });\n const [glass, setGlass] = useState<GlassType>({\n visible: false,\n material: \"infill_material\",\n depth: 20,\n });\n\n const defaultOptions = [\"D_PRF_COLOR\", \"D_FR_SRF_DECOR\", \"D_FR_SRF_DECOR_S2\"];\n\n function getFirstValidValue(\n values: string[],\n isValid: (val: string) => boolean\n ) {\n for (const val of values) {\n if (isValid(val)) return val;\n }\n return \"\";\n }\n\n const hasValue = (val: string) =>\n val !== null && val !== undefined && val !== \"\";\n\n const [frameType, setFrameType] = useState<string>(\"AF20_40\");\n const [bodyType, setBodyType] = useState<string>(\"40\");\n const [exteriorFanlightType, setExteriorFanlightType] =\n useState<string>(\"WPFL\");\n const [testDoorMaterial, setTestDoorMaterial] = useState<string>(\"\");\n const [testFrameMaterial, setTestFrameMaterial] = useState<string>(\n getFirstValidValue(defaultOptions, hasValue)\n );\n const [testGasketMaterial, setTestGasketMaterial] =\n useState<string>(\"D_GASKET\");\n const [testInteriorFanlightMaterial, setTestInteriorFanlightMaterial] =\n useState<string>(\"D_SRF_DECOR\");\n const [testExteriorFanlightMaterial, setTestExteriorFanlightMaterial] =\n useState<string>(\"\");\n const [testOcculusInfillMaterial, setTestOcculusInfillMaterial] =\n useState<string>(\"\");\n const [testGlassInfillMaterial, setTestGlassInfillMaterial] =\n useState<string>(\"D_FR_COLOR\");\n const [testDoorStopMaterial, setTestDoorStopMaterial] = useState<string>(\n getFirstValidValue(defaultOptions, hasValue)\n );\n const [testHingeMaterial, setTestHingeMaterial] = useState<string>(\"\");\n const [testFrontCoverPanelMaterial, setTestFrontCoverPanelMaterial] =\n useState<string>(getFirstValidValue(defaultOptions, hasValue));\n const [testBackCoverPanelMaterial, setTestBackCoverPanelMaterial] =\n useState<string>(getFirstValidValue(defaultOptions, hasValue));\n const [testFrontDoorPlaneMaterial, setTestFrontDoorPlaneMaterial] =\n useState<string>(\"D_SRF_DECOR_2\");\n const [testBackDoorPlaneMaterial, setTestBackDoorPlaneMaterial] =\n useState<string>(\"D_SRF_DECOR\");\n const doorHeight = 0;\n const [newPivotPosition, setNewPivotPosition] = useState<number>(0);\n const [parseMessage, setParseMessage] = useState({ type: \"\", text: \"\" });\n\n useEffect(() => {\n setIs2D(initialIs2D);\n }, [initialIs2D]);\n\n useEffect(() => {\n if (initialMaterials) {\n setMaterials(initialMaterials);\n }\n }, [initialMaterials]);\n\n const handleParseCpid = useCallback(\n cpidToParse => {\n const showMessage = (text, type = \"error\") => {\n setParseMessage({ text, type });\n setTimeout(() => setParseMessage({ text: \"\", type: \"\" }), 4000);\n };\n\n if (!cpidToParse || !cpidToParse.trim().startsWith(\"P_\")) {\n showMessage(\"Invalid format: CPID must start with 'P_'.\");\n return;\n }\n\n const parts = cpidToParse.trim().split(\"_\");\n if (parts.length < 4) {\n showMessage(\"Invalid format: Not enough parts in CPID.\");\n return;\n }\n\n const newConfig = {\n fanlightVisible: false,\n fanlightType: \"WPFL\",\n interiorFanlightVisible: false,\n occulusVisible: false,\n frameType: \"\",\n bodyType: \"\",\n };\n let currentIndex = 1;\n\n // Door Type\n if (parts[currentIndex] === \"SD\") {\n setIsDoubleDoor(false);\n setTotalHeight(2700);\n setTotalWidth(974);\n currentIndex++;\n } else if (parts[currentIndex] === \"DD\") {\n setIsDoubleDoor(true);\n setTotalWidth(1802);\n currentIndex++;\n } else {\n showMessage(\"Unsupported Door Type: Only 'SD' or 'DD' is supported.\");\n return;\n }\n\n //Fanlight Type\n const fanlightPart = parts[currentIndex];\n const validFanlights = [\"WPFL\", \"ALDGFL\", \"ALSGFL\"];\n if (fanlightPart === \"FH\") {\n newConfig.fanlightVisible = false;\n currentIndex++;\n } else if (validFanlights.includes(fanlightPart)) {\n setExteriorFanlight(prev => ({\n ...prev,\n height: 300,\n }));\n newConfig.fanlightVisible = true;\n newConfig.fanlightType = fanlightPart;\n currentIndex++;\n } else {\n showMessage(`Invalid Fanlight Type: '${fanlightPart}'.`);\n return;\n }\n\n // Frame and Body Type\n const validSimpleFrameTypes = [\n \"AF20\",\n \"AF40\",\n \"WF\",\n \"MXF\",\n \"MXCAF\",\n \"NOF\",\n ];\n const validBodyTypes = [\n \"40\",\n \"50\",\n \"FLI\",\n \"100\",\n \"WDG100\",\n \"SG8\",\n \"SG10\",\n \"SG12\",\n ];\n\n let framePart = parts[currentIndex];\n let bodyPartRaw = parts[currentIndex + 1] || \"\";\n let frameFound = false;\n\n if (`${framePart}_${bodyPartRaw}` === \"WDGF_WDG100\") {\n newConfig.frameType = \"WDGF_WDG100\";\n newConfig.bodyType = \"WDG100\";\n currentIndex += 2;\n frameFound = true;\n } else if (validSimpleFrameTypes.includes(framePart)) {\n let tempBody = bodyPartRaw.replace(\"OCC\", \"\");\n\n if (validBodyTypes.includes(tempBody)) {\n newConfig.frameType =\n framePart === \"NOF\" ? \"NOF\" : `${framePart}_${tempBody}`;\n\n newConfig.bodyType = tempBody;\n\n if (bodyPartRaw.endsWith(\"OCC\")) {\n newConfig.occulusVisible = true;\n setOcculus(prev => ({\n ...prev,\n x1: 150,\n x2: 150,\n y1: 150,\n y2: 150,\n }));\n }\n currentIndex += 2;\n frameFound = true;\n }\n }\n\n if (!frameFound) {\n showMessage(\n `Invalid Frame/Body combination starting with '${framePart}'.`\n );\n return;\n }\n\n for (let i = currentIndex; i < parts.length; i++) {\n if (parts[i] === \"IFL\") {\n setInteriorFanlight(prev => ({\n ...prev,\n height: 300,\n }));\n newConfig.interiorFanlightVisible = true;\n } else if (parts[i] === \"OCC\") {\n newConfig.occulusVisible = true;\n }\n }\n\n // Apply final configuration\n setFrameType(newConfig.frameType);\n setBodyType(newConfig.bodyType);\n setExteriorFanlight(prev => ({\n ...prev,\n visible: newConfig.fanlightVisible,\n }));\n if (newConfig.fanlightVisible) {\n setExteriorFanlightType(newConfig.fanlightType);\n }\n setInteriorFanlight(prev => ({\n ...prev,\n visible: newConfig.interiorFanlightVisible,\n }));\n setOcculus(prev => ({ ...prev, visible: newConfig.occulusVisible }));\n setCpid(cpidToParse);\n\n showMessage(\"Configuration Applied!\", \"success\");\n },\n [\n setCpid,\n setBodyType,\n setExteriorFanlight,\n setExteriorFanlightType,\n setFrameType,\n setInteriorFanlight,\n setOcculus,\n setIsDoubleDoor,\n setTotalWidth,\n ]\n );\n\n // --- BodyType Effect ---\n useEffect(() => {\n let newDoorDepth = 40;\n let newMaterial = \"brown\";\n\n switch (bodyType) {\n case \"50\":\n newDoorDepth = 50;\n break;\n case \"SG8\":\n newDoorDepth = 8;\n newMaterial = \"glass\";\n break;\n case \"SG10\":\n newDoorDepth = 10;\n newMaterial = \"glass\";\n break;\n case \"SG12\":\n newDoorDepth = 12;\n newMaterial = \"glass\";\n break;\n }\n\n setDoor(prev => ({ ...prev, theDoorDepth: newDoorDepth }));\n setTestDoorMaterial(newMaterial);\n }, [bodyType]);\n\n // --- FrameType Effect ---\n useEffect(() => {\n setIsFrameVisible(frameType !== \"NOF\");\n\n setGlassVisible(false);\n\n let newSettings: FrameAndDoorSettings = {};\n\n let lookupKey = frameType;\n if (frameType.startsWith(\"AF20_SG\")) {\n lookupKey = \"AF20_40\";\n } else if (frameType.startsWith(\"AF40_SG\")) {\n lookupKey = \"AF40_40\";\n }\n\n switch (lookupKey) {\n case \"NOF\":\n newSettings = {\n topThk: \"0mm\",\n sidesThk: \"0mm\",\n frameDepth: 0,\n };\n break;\n case \"AF20_40\":\n newSettings = {\n frameDepth: 103,\n topThk: \"20mm\",\n sidesThk: \"20mm\",\n doorStopOffset: \"42mm\",\n doorStopWidth: 20,\n doorStopDepth: 13,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n if (frameType === \"AF20_40\") {\n newSettings.doorDepth = 40;\n }\n break;\n case \"AF20_50\":\n newSettings = {\n doorDepth: 50,\n frameDepth: 103,\n topThk: \"20mm\",\n sidesThk: \"20mm\",\n doorStopOffset: \"30mm\",\n doorStopWidth: 20,\n doorStopDepth: 13,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"AF40_40\":\n newSettings = {\n frameDepth: 103,\n topThk: \"40mm\",\n sidesThk: \"40mm\",\n doorStopOffset: \"42mm\",\n doorStopWidth: 20,\n doorStopDepth: 13,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n if (frameType === \"AF40_40\") {\n newSettings.doorDepth = 40;\n }\n break;\n case \"AF40_50\":\n newSettings = {\n doorDepth: 50,\n frameDepth: 103,\n topThk: \"40mm\",\n sidesThk: \"40mm\",\n doorStopOffset: \"30mm\",\n doorStopWidth: 20,\n doorStopDepth: 13,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"WF_40\":\n newSettings = {\n doorDepth: 39.6,\n frameDepth: 103,\n topThk: \"31.6mm\",\n sidesThk: \"31.6mm\",\n doorStopOffset: \"0mm\",\n doorStopWidth: 16.4,\n doorStopDepth: 58.4,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"WF_50\":\n newSettings = {\n doorDepth: 51.6,\n frameDepth: 103,\n topThk: \"31.6mm\",\n sidesThk: \"31.6mm\",\n doorStopOffset: \"0mm\",\n doorStopWidth: 16,\n doorStopDepth: 46.4,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"WF_100\":\n newSettings = {\n doorDepth: 102,\n frameDepth: 102,\n topThk: \"52mm\",\n sidesThk: \"52mm\",\n doorStopOffset: \"17.6mm\",\n doorStopWidth: 16.4,\n doorStopDepth: 44.8,\n notchWidth: \"16mm\",\n notchDepth: \"66.5mm\",\n notchposition: 0.02,\n gasketDepth: 5,\n gasketWidth: 5,\n secondDoorStopWidth: 29,\n secondDoorStopDepth: 17.6,\n secondDoorStopOffset: 0,\n };\n break;\n case \"WF_FLI\":\n newSettings = {\n doorDepth: 51,\n frameDepth: 102,\n topThk: \"52mm\",\n sidesThk: \"52mm\",\n doorStopOffset: \"17.4mm\",\n doorStopWidth: 16.4,\n doorStopDepth: 34,\n notchWidth: \"14mm\",\n notchDepth: \"66mm\",\n notchposition: 0.02,\n gasketDepth: 5,\n gasketWidth: 5,\n secondDoorStopWidth: 29,\n secondDoorStopDepth: 17.6,\n secondDoorStopOffset: 0,\n };\n break;\n case \"WDGF_WDG100\":\n newSettings = {\n doorDepth: 86,\n frameDepth: 86,\n topThk: \"50mm\",\n sidesThk: \"50mm\",\n doorStopOffset: \"34mm\",\n doorStopWidth: 13,\n doorStopDepth: 30,\n notchWidth: \"14mm\",\n notchDepth: \"66mm\",\n notchposition: 0.02,\n gasketDepth: 4.5,\n gasketWidth: 5,\n secondDoorStopWidth: 23,\n secondDoorStopDepth: 30,\n secondDoorStopOffset: 13,\n };\n setGlassVisible(true);\n break;\n case \"MXF_40\":\n newSettings = {\n doorDepth: 38,\n frameDepth: 103,\n topThk: \"18mm\",\n sidesThk: \"18mm\",\n doorStopOffset: \"45mm\",\n doorStopWidth: 15,\n doorStopDepth: 15,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"MXF_50\":\n newSettings = {\n doorDepth: 50,\n frameDepth: 103,\n topThk: \"18.2mm\",\n sidesThk: \"18.2mm\",\n doorStopOffset: \"33mm\",\n doorStopWidth: 15,\n doorStopDepth: 15,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"MXCAF_40\":\n newSettings = {\n doorDepth: 38,\n frameDepth: 103,\n topThk: \"18mm\",\n sidesThk: \"18mm\",\n doorStopOffset: \"45mm\",\n doorStopWidth: 15,\n doorStopDepth: 15,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"MXCAF_50\":\n newSettings = {\n doorDepth: 50,\n frameDepth: 103,\n topThk: \"18.2mm\",\n sidesThk: \"18.2mm\",\n doorStopOffset: \"33mm\",\n doorStopWidth: 15,\n doorStopDepth: 15,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n default:\n break;\n }\n\n const isMxCaf = frameType.startsWith(\"MXCAF\");\n setFrontCoverPanel(prev => ({ ...prev, visible: isMxCaf }));\n setBackCoverPanel(prev => ({ ...prev, visible: isMxCaf }));\n\n const { doorDepth, ...newFrameSettings } = newSettings;\n setDoorFrame(prev => ({ ...prev, ...newFrameSettings }));\n\n if (doorDepth !== undefined) {\n setDoor(prev => ({ ...prev, theDoorDepth: doorDepth }));\n }\n }, [frameType]);\n\n // --- Exterior Fanlight Logic ---\n useEffect(() => {\n if (!exteriorFanlight.visible) return;\n switch (exteriorFanlightType) {\n case \"WPFL\":\n setExteriorFanlight(prev => ({ ...prev, depth: doorFrame.frameDepth }));\n setTestExteriorFanlightMaterial(\"metal\");\n break;\n case \"ALDGFL\":\n setExteriorFanlight(prev => ({ ...prev, depth: doorFrame.frameDepth }));\n setTestExteriorFanlightMaterial(\"glass\");\n break;\n case \"ALSGFL\":\n setExteriorFanlight(prev => ({ ...prev, depth: 40 }));\n setTestExteriorFanlightMaterial(\"glass\");\n break;\n default:\n break;\n }\n }, [\n exteriorFanlight.visible,\n exteriorFanlightType,\n doorFrame.frameDepth,\n setTestExteriorFanlightMaterial,\n setExteriorFanlight,\n ]);\n\n useEffect(() => {\n setOcculus(prevOcculus => ({\n ...prevOcculus,\n depth: door.theDoorDepth,\n }));\n }, [door.theDoorDepth]);\n\n useEffect(() => {\n const topThkValue = parseInt(doorFrame.topThk) || 0;\n const exteriorFanlightHeight = exteriorFanlight.visible\n ? exteriorFanlight.height\n : 0;\n const newDoorHeight = totalHeight - topThkValue - exteriorFanlightHeight;\n\n setDoor(prevDoor => ({\n ...prevDoor,\n doorHeight: newDoorHeight > 0 ? newDoorHeight : 0,\n }));\n }, [\n totalHeight,\n doorFrame.topThk,\n exteriorFanlight.visible,\n exteriorFanlight.height,\n ]);\n\n useEffect(() => {\n const sidesThkValue = parseInt(doorFrame.sidesThk) || 0;\n const numDoors = isDoubleDoor ? 2 : 1;\n const newDoorWidth = (totalWidth - sidesThkValue * 2) / numDoors;\n setDoor(prevDoor => ({\n ...prevDoor,\n doorWidth: newDoorWidth > 0 ? newDoorWidth : 0,\n }));\n }, [totalWidth, doorFrame.sidesThk, isDoubleDoor]);\n\n return (\n <ConfiguratorContext.Provider\n value={{\n materials,\n is2D,\n setIs2D,\n isPlaneVisible,\n setIsPlaneVisible,\n isFrameVisible,\n setIsFrameVisible,\n cpid,\n setCpid,\n door,\n setDoor,\n doorFrame,\n setDoorFrame,\n interiorFanlight,\n setInteriorFanlight,\n exteriorFanlight,\n setExteriorFanlight,\n occulus,\n setOcculus,\n frontCoverPanel,\n setFrontCoverPanel,\n backCoverPanel,\n setBackCoverPanel,\n frontDoorPlane,\n setFrontDoorPlane,\n backDoorPlane,\n setBackDoorPlane,\n glass,\n setGlass,\n frameType,\n setFrameType,\n bodyType,\n setBodyType,\n totalHeight,\n setTotalHeight,\n totalWidth,\n setTotalWidth,\n exteriorFanlightType,\n setExteriorFanlightType,\n testDoorMaterial,\n setTestDoorMaterial,\n testFrameMaterial,\n setTestFrameMaterial,\n testGasketMaterial,\n setTestGasketMaterial,\n testInteriorFanlightMaterial,\n setTestInteriorFanlightMaterial,\n testExteriorFanlightMaterial,\n setTestExteriorFanlightMaterial,\n testOcculusInfillMaterial,\n setTestOcculusInfillMaterial,\n testGlassInfillMaterial,\n setTestGlassInfillMaterial,\n testDoorStopMaterial,\n setTestDoorStopMaterial,\n testHingeMaterial,\n setTestHingeMaterial,\n testFrontCoverPanelMaterial,\n setTestFrontCoverPanelMaterial,\n testBackCoverPanelMaterial,\n setTestBackCoverPanelMaterial,\n testFrontDoorPlaneMaterial,\n setTestFrontDoorPlaneMaterial,\n testBackDoorPlaneMaterial,\n setTestBackDoorPlaneMaterial,\n glassVisible,\n setGlassVisible,\n glassDepth,\n setGlassDepth,\n handleParseCpid,\n newPivotPosition,\n setNewPivotPosition,\n doorHeight,\n isDoubleDoor,\n setIsDoubleDoor,\n }}\n >\n {children}\n </ConfiguratorContext.Provider>\n );\n};\n\nexport const useConfigurator = () => {\n const context = useContext(ConfiguratorContext);\n if (!context) {\n throw new Error(\n \"useConfigurator must be used within a ConfiguratorProvider\"\n );\n }\n return context;\n};\n","import * as THREE from \"three\";\n\nconst isUrl = (string: string) => {\n try {\n new URL(string);\n return true;\n } catch (_) {\n return false;\n }\n};\n\nexport const createMaterialFromProp = (\n value: string | undefined\n): THREE.MeshStandardMaterial | null => {\n if (!value) return null;\n\n if (value.startsWith(\"#\")) {\n return new THREE.MeshStandardMaterial({ color: value, roughness: 0.8 });\n }\n\n if (isUrl(value)) {\n const texture = textureLoader.load(value);\n texture.wrapS = THREE.RepeatWrapping;\n texture.wrapT = THREE.RepeatWrapping;\n return new THREE.MeshStandardMaterial({ map: texture, roughness: 0.8 });\n }\n\n return null;\n};\n\nconst textureLoader = new THREE.TextureLoader();\n\nconst bodyInt = textureLoader.load(\n \"http://192.168.30.92:3009/api/proxy?path=IVIS/E_TEX00.JPG\"\n);\n\nconst bodyExt = textureLoader.load(\n \"https://threejs.org/examples/textures/brick_diffuse.jpg\"\n);\n\nconst frameAlu = textureLoader.load(\n \"https://threejs.org/examples/textures/brick_diffuse.jpg\"\n);\n\nconst frameWoodenInt = textureLoader.load(\n \"https://threejs.org/examples/textures/brick_diffuse.jpg\"\n);\n\nconst frameWoodenExt = textureLoader.load(\n \"https://threejs.org/examples/textures/brick_diffuse.jpg\"\n);\n\nconst wdg = textureLoader.load(\n \"https://threejs.org/examples/textures/brick_diffuse.jpg\"\n);\n\nconst gasket = textureLoader.load(\n \"https://threejs.org/examples/textures/brick_diffuse.jpg\"\n);\n\nbodyInt.wrapS = THREE.RepeatWrapping;\nbodyInt.wrapT = THREE.RepeatWrapping;\nbodyExt.wrapS = THREE.RepeatWrapping;\nbodyExt.wrapT = THREE.RepeatWrapping;\n\nexport const availableMaterials = {\n D_SRF_DECOR_2: new THREE.MeshStandardMaterial({\n map: bodyInt,\n roughness: 0.8,\n }),\n D_SRF_DECOR: new THREE.MeshStandardMaterial({\n map: bodyExt,\n roughness: 0.8,\n }),\n D_PRF_COLOR: new THREE.MeshStandardMaterial({\n map: frameAlu,\n roughness: 0.8,\n }),\n D_FR_SRF_DECOR: new THREE.MeshStandardMaterial({\n map: frameWoodenInt,\n roughness: 0.8,\n }),\n D_FR_SRF_DECOR_S2: new THREE.MeshStandardMaterial({\n map: frameWoodenInt,\n roughness: 0.8,\n }),\n D_FR_COLOR: new THREE.MeshStandardMaterial({\n map: wdg,\n roughness: 0.8,\n }),\n D_GASKET: new THREE.MeshStandardMaterial({\n map: gasket,\n roughness: 0.8,\n }),\n\n black: new THREE.MeshStandardMaterial({ color: \"#000000\" }),\n metal: new THREE.MeshStandardMaterial({\n color: \"#aaaaaa\",\n metalness: 1.0,\n roughness: 0.4,\n }),\n darkgrey: new THREE.MeshStandardMaterial({ color: \"#5e5e5e\" }),\n grey: new THREE.MeshStandardMaterial({ color: \"#cccccc\" }),\n yellow: new THREE.MeshStandardMaterial({ color: \"#ffff00\" }),\n darkBrown: new THREE.MeshStandardMaterial({ color: \"#a0522d\" }),\n brown: new THREE.MeshStandardMaterial({ color: \"#d2b48c\" }),\n glass: new THREE.MeshStandardMaterial({\n color: \"#ffffff\",\n roughness: 0.1,\n transparent: true,\n opacity: 0.7,\n }),\n aluminum: new THREE.MeshStandardMaterial({\n color: \"#abb0aa\",\n metalness: 0.8,\n roughness: 0.5,\n envMapIntensity: 1.2,\n }),\n\n aluminumBrighter: new THREE.MeshStandardMaterial({\n color: \"#cdcdcd\",\n metalness: 0.8,\n roughness: 0.5,\n envMapIntensity: 1.2,\n }),\n\n aluminumExtraBrighter: new THREE.MeshStandardMaterial({\n color: \"#ececec\",\n metalness: 0.8,\n roughness: 0.5,\n envMapIntensity: 1.2,\n }),\n silver: new THREE.MeshStandardMaterial({\n color: \"#c0c0c0\",\n metalness: 1.0,\n roughness: 0.2,\n }),\n\n gold: new THREE.MeshStandardMaterial({\n color: \"#ffd700\",\n metalness: 1.0,\n roughness: 0.3,\n }),\n\n diamond: new THREE.MeshStandardMaterial({\n color: \"#e0f7fa\",\n metalness: 0.9,\n roughness: 0.05,\n transparent: true,\n opacity: 0.9,\n envMapIntensity: 1.5,\n }),\n test_material: new THREE.MeshStandardMaterial({\n color: \"red\",\n roughness: 0.1,\n }),\n};\n\nexport const placeholderMaterial = new THREE.MeshStandardMaterial({\n color: \"#cccccc\",\n roughness: 0.8,\n});\n\nexport const placeholderMaterialforFrames = new THREE.MeshStandardMaterial({\n color: \"#000\",\n roughness: 0.8,\n});\n","import React, { useState, useMemo, useEffect, useRef } from \"react\";\nimport { Geometry, Base, Subtraction, Addition } from \"@react-three/csg\";\nimport { useConfigurator } from \"../context/DoorContext\";\nimport { useSpring, a } from \"@react-spring/three\";\nimport * as THREE from \"three\";\nimport {\n createMaterialFromProp,\n availableMaterials,\n placeholderMaterial,\n placeholderMaterialforFrames,\n} from \"../utils/materials\";\n\n// Custom hook for door handle calculations\nfunction StandardHandle({\n position,\n doorDepthM,\n doorPivot,\n frameType, // 👈\n}: {\n position: [number, number, number];\n doorDepthM: number;\n doorPivot: \"left\" | \"right\";\n frameType: string;\n}) {\n // --- Base Dimensions ---\n const roseRadius = 0.035;\n\n // --- Thickness ---\n // default 5mm, but 8mm + 1–2mm if WDG frame\n const roseThickness =\n frameType === \"WDGF_WDG100\"\n ? 0.008 + 0.0015 // average: 9.5mm\n : 0.005; // 5mm default\n\n const handleRadius = 0.015;\n const handleLength = 0.2;\n\n // face offset based on thickness\n const faceZ = doorDepthM / 2 + roseThickness / 2;\n const connectorLength = handleLength / 3;\n\n const cornerFrontZ = faceZ + roseThickness + connectorLength;\n const cornerBackZ = -faceZ - roseThickness - connectorLength;\n const roseGapY = 0.07;\n\n return (\n <group position={position}>\n {/* Roses + keyholes */}\n {[faceZ, -faceZ].map((z, i) => (\n <React.Fragment key={i}>\n {frameType === \"WDGF_WDG100\" ? (\n // --- Capsule rose ---\n <group position-z={z}>\n {/* Center rectangle */}\n <mesh material={availableMaterials.aluminum} castShadow>\n <boxGeometry\n args={[roseRadius * 2, roseRadius * 2, roseThickness]}\n />\n </mesh>\n {/* Top rounded end */}\n <mesh\n position-y={roseRadius}\n rotation={[Math.PI / 2, Math.PI / 2, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[\n roseRadius,\n roseRadius,\n roseThickness,\n 32,\n 1,\n false,\n 0,\n Math.PI,\n ]}\n />\n </mesh>\n {/* Bottom rounded end */}\n <mesh\n position-y={-roseRadius}\n rotation={[-Math.PI / 2, Math.PI / 2, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[\n roseRadius,\n roseRadius,\n roseThickness,\n 32,\n 1,\n false,\n 0,\n Math.PI,\n ]}\n />\n </mesh>\n </group>\n ) : (\n // --- Round rose ---\n <mesh\n rotation={[Math.PI / 2, 0, 0]}\n position-z={z}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[roseRadius, roseRadius, roseThickness, 48]}\n />\n </mesh>\n )}\n\n {frameType === \"WDGF_WDG100\" ? (\n <group position-z={z} position-y={-(0.08 + roseGapY)}>\n {/* Center rectangle */}\n <mesh material={availableMaterials.aluminum} castShadow>\n <boxGeometry\n args={[\n (roseRadius - 0.008) * 2,\n (roseRadius - 0.008) * 2,\n roseThickness,\n ]}\n />\n </mesh>\n\n {/* Top rounded end */}\n <mesh\n position-y={roseRadius - 0.008}\n rotation={[Math.PI / 2, Math.PI / 2, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[\n roseRadius - 0.008,\n roseRadius - 0.008,\n roseThickness,\n 32,\n 1,\n false,\n 0,\n Math.PI,\n ]}\n />\n </mesh>\n\n {/* Bottom rounded end */}\n <mesh\n position-y={-(roseRadius - 0.008)}\n rotation={[-Math.PI / 2, Math.PI / 2, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[\n roseRadius - 0.008,\n roseRadius - 0.008,\n roseThickness,\n 32,\n 1,\n false,\n 0,\n Math.PI,\n ]}\n />\n </mesh>\n </group>\n ) : (\n <mesh\n rotation={[Math.PI / 2, 0, 0]}\n position-z={z}\n position-y={-(0.08 + roseGapY)}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[roseRadius, roseRadius, roseThickness, 48]}\n />\n </mesh>\n )}\n\n <group\n position={[\n 0,\n -(0.08 + roseGapY), // 👈 same Y as small rose\n z + (z > 0 ? roseThickness : -roseThickness), // 👈 accounts for thickness\n ]}\n castShadow\n >\n <mesh\n rotation={[Math.PI / 2, 0, 0]}\n position={[0, 0.0075, 0]}\n material={availableMaterials.aluminumBrighter}\n >\n <cylinderGeometry args={[0.01, 0.01, roseThickness, 32]} />\n </mesh>\n <mesh\n position={[0, -0.0075, 0]}\n material={availableMaterials.aluminumBrighter}\n >\n <boxGeometry args={[0.01, 0.015, roseThickness]} />\n </mesh>\n </group>\n </React.Fragment>\n ))}\n\n {/* Handles (same as before)… */}\n <group scale={[doorPivot === \"left\" ? -1 : 1, 1, 1]}>\n {/* Front handle */}\n <group position={[0, 0, -0.01]}>\n <mesh\n position={[0, 0, faceZ + roseThickness + connectorLength / 2]}\n rotation={[Math.PI / 2, 0, 0]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, connectorLength, 48]}\n />\n </mesh>\n <mesh\n position={[0, 0, cornerFrontZ]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <sphereGeometry args={[handleRadius, 32, 32]} />\n </mesh>\n <mesh\n position={[handleLength / 2, 0, cornerFrontZ]}\n rotation={[0, 0, Math.PI / 2]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, handleLength, 48]}\n />\n </mesh>\n </group>\n\n {/* Back handle */}\n <group position={[0, 0, 0.01]}>\n <mesh\n position={[0, 0, -faceZ - roseThickness - connectorLength / 2]}\n rotation={[Math.PI / 2, 0, 0]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, connectorLength, 48]}\n />\n </mesh>\n <mesh\n position={[0, 0, cornerBackZ]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <sphereGeometry args={[handleRadius, 32, 32]} />\n </mesh>\n <mesh\n position={[handleLength / 2, 0, cornerBackZ]}\n rotation={[0, 0, Math.PI / 2]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, handleLength, 48]}\n />\n </mesh>\n </group>\n </group>\n </group>\n );\n}\n\nconst MergedPlate = ({ plateMaterial, roseThickness, faceZ }) => {\n const geometry = useMemo(() => {\n // Left half - sharp edges\n const leftHalf = new THREE.BoxGeometry(0.05, 0.24, roseThickness);\n leftHalf.translate(-0.025, 0, 0); // Center the left half\n\n const shape = new THREE.Shape();\n\n const width = 0.1;\n const height = 0.24;\n const radius = 0.01;\n\n shape.moveTo(-width / 2, -height / 2);\n shape.lineTo(-width / 2, height / 2);\n shape.lineTo(width / 2 - radius, height / 2);\n shape.absarc(\n width / 2 - radius,\n height / 2 - radius,\n radius,\n Math.PI / 2,\n 0,\n true\n );\n shape.lineTo(width / 2, -height / 2 + radius);\n shape.absarc(\n width / 2 - radius,\n -height / 2 + radius,\n radius,\n 0,\n -Math.PI / 2,\n true\n );\n shape.lineTo(-width / 2, -height / 2);\n\n const extrudeSettings = {\n steps: 2,\n depth: roseThickness,\n bevelEnabled: false,\n };\n\n return new THREE.ExtrudeGeometry(shape, extrudeSettings);\n }, [roseThickness]);\n\n return (\n <group position-z={faceZ}>\n <mesh geometry={geometry} material={plateMaterial} castShadow />\n </group>\n );\n};\n\nfunction GlassHandle({\n position,\n doorDepthM,\n doorPivot,\n}: {\n position: [number, number, number];\n doorDepthM: number;\n doorPivot: \"left\" | \"right\";\n}) {\n // --- Dimensions ---\n const roseRadius = 0.035;\n const roseThickness = 0.005;\n const handleRadius = 0.015;\n const handleLength = 0.2;\n const faceZ = doorDepthM / 2 + roseThickness / 2;\n const connectorLength = handleLength / 3;\n const cornerFrontZ = faceZ + roseThickness + connectorLength;\n const cornerBackZ = -faceZ - roseThickness - connectorLength;\n return (\n <group position={position}>\n {/* Backplate/Roses (both sides of glass door) */}\n {[faceZ, -faceZ].map((z, i) => (\n <React.Fragment key={i}>\n {/* Rose disc */}\n <mesh\n rotation={[Math.PI / 2, 0, 0]}\n position-z={z + (z > 0 ? roseThickness : -roseThickness) + 0.002}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[roseRadius, roseRadius, roseThickness, 48]}\n />\n </mesh>\n\n {/* Keyhole shape (using r3f CSG instead of manual merge) */}\n <mesh\n position={[0, -0.08, z + (z > 0 ? roseThickness : -roseThickness)]}\n castShadow\n >\n {/* Circular part (rotated 90° on X) */}\n <mesh\n rotation={[Math.PI / 2, 0, 0]}\n position={[0, 0.0075, 0]}\n material={availableMaterials.aluminum}\n >\n <cylinderGeometry args={[0.01, 0.01, roseThickness, 32]} />\n </mesh>\n\n {/* Rectangular part (placed just below cylinder) */}\n <mesh\n position={[0, -0.0075, 0]}\n material={availableMaterials.aluminum}\n >\n <boxGeometry args={[0.01, 0.015, roseThickness]} />\n </mesh>\n </mesh>\n </React.Fragment>\n ))}\n\n {/* Handle rods */}\n <group scale-x={doorPivot === \"left\" ? -1 : 1}>\n {[faceZ, -faceZ].map((z, i) => (\n <MergedPlate\n key={`plate-${i}`}\n faceZ={z}\n plateMaterial={availableMaterials.aluminumExtraBrighter}\n roseThickness={roseThickness}\n />\n ))}\n {/* Front handle */}\n <group>\n {/* Horizontal cylinder */}\n <mesh\n position={[handleLength / 2, 0, faceZ + connectorLength]}\n rotation={[0, 0, Math.PI / 2]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, handleLength, 48]}\n />\n </mesh>\n {/* Vertical cylinder */}\n <mesh\n position={[0, 0, faceZ + connectorLength / 2]}\n rotation={[Math.PI / 2, 0, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, connectorLength, 48]}\n />\n </mesh>\n {/* Corner sphere for radius effect */}\n <mesh\n position={[0, 0, faceZ + connectorLength]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <sphereGeometry args={[handleRadius, 32, 32]} />\n </mesh>\n </group>\n\n {/* Back handle */}\n <group>\n {/* Horizontal cylinder */}\n <mesh\n position={[handleLength / 2, 0, -(faceZ + connectorLength)]}\n rotation={[0, 0, Math.PI / 2]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, handleLength, 48]}\n />\n </mesh>\n {/* Vertical cylinder */}\n <mesh\n position={[0, 0, -(faceZ + connectorLength / 2)]}\n rotation={[Math.PI / 2, 0, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, connectorLength, 48]}\n />\n </mesh>\n {/* Corner sphere for radius effect */}\n <mesh\n position={[0, 0, -(faceZ + connectorLength)]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <sphereGeometry args={[handleRadius, 32, 32]} />\n </mesh>\n </group>\n </group>\n </group>\n );\n}\n\nfunction DoorHandle({\n bodyType,\n handleX,\n handleHeightM,\n doorDepthM,\n doorPivot,\n}: {\n bodyType: string;\n handleX: number;\n handleHeightM: number;\n doorDepthM: number;\n doorPivot: \"left\" | \"right\";\n}) {\n const isSingleGlass = [\"SG8\", \"SG10\", \"SG12\"].includes(bodyType);\n const handlePos: [number, number, number] = [handleX, handleHeightM, 0];\n const frameType = useConfigurator().frameType;\n return isSingleGlass ? (\n <GlassHandle\n position={[handleX, handleHeightM, -0.0024]}\n doorDepthM={doorDepthM}\n doorPivot={doorPivot}\n />\n ) : (\n <StandardHandle\n position={handlePos}\n doorDepthM={doorDepthM}\n doorPivot={doorPivot}\n frameType={frameType}\n />\n );\n}\n\nfunction GlassHinge({\n position,\n pivot,\n frameSideWidth,\n doorDepthM,\n material,\n gasketMaterial,\n}) {\n const plateWidth = 130 / 1000;\n const plateHeight = 55 / 1000;\n const plateThickness = 8 / 1000;\n const gasketThickness = 1 / 1000;\n const pivotRadius = 10 / 1000;\n const pivotHeight = plateHeight;\n\n const sideMultiplier = pivot === \"left\" ? 1 : -1;\n\n const plateOffsetX = sideMultiplier * (plateWidth / 2 + frameSideWidth);\n\n const holeRadius = 10 / 1000;\n const holeSpacingX = 45 / 1000;\n\n return (\n <group position={position}>\n <mesh material={material} castShadow receiveShadow position-x={0.01}>\n <cylinderGeometry args={[pivotRadius, pivotRadius, pivotHeight, 32]} />\n </mesh>\n\n <group position-x={plateOffsetX}>\n {/* Back Plate */}\n <mesh\n position-z={-(doorDepthM / 2) - plateThickness / 2 - gasketThickness}\n material={material}\n castShadow\n >\n <boxGeometry args={[plateWidth, plateHeight, plateThickness]} />\n </mesh>\n {/* Back Gasket */}\n <mesh\n position-z={-(doorDepthM / 2) - gasketThickness / 2}\n material={gasketMaterial}\n castShadow\n >\n <boxGeometry args={[plateWidth, plateHeight, gasketThickness]} />\n </mesh>\n {/* Front Plate with Holes */}\n <mesh\n position-z={doorDepthM / 2 + plateThickness / 2 + gasketThickness}\n castShadow\n >\n <Geometry useGroups>\n <Base material={material}>\n <boxGeometry args={[plateWidth, plateHeight, plateThickness]} />\n </Base>\n {/* Left Hole */}\n <Subtraction\n position={[-sideMultiplier * (holeSpacingX / 2), 0, 0]}\n rotation={[Math.PI / 2, 0, 0]}\n >\n <cylinderGeometry\n args={[holeRadius, holeRadius, plateThickness + 0.01, 32]}\n />\n </Subtraction>\n {/* Right Hole */}\n <Subtraction\n position={[sideMultiplier * (holeSpacingX / 2), 0, 0]}\n rotation={[Math.PI / 2, 0, 0]}\n >\n <cylinderGeometry\n args={[holeRadius, holeRadius, plateThickness + 0.01, 32]}\n />\n </Subtraction>\n </Geometry>\n </mesh>\n\n {/* Front Gasket */}\n <mesh\n position-z={doorDepthM / 2 + gasketThickness / 2}\n material={gasketMaterial}\n castShadow\n >\n <boxGeometry args={[plateWidth, plateHeight, gasketThickness]} />\n </mesh>\n </group>\n </group>\n );\n}\n\nfunction DoorStopCuts({\n visible,\n width,\n height,\n stopWidth,\n stopDepth,\n stopPositionZ,\n centerZ,\n glassDepthOffset = 0,\n material,\n setName,\n}: DoorStopCutsProps) {\n if (!visible) return null;\n\n return (\n <>\n {/* Top cut only */}\n <Subtraction\n name={`cut-top-${setName}`}\n material={material}\n position={[\n 0,\n height / 2 - stopWidth / 2 + 0.0001,\n stopPositionZ - centerZ,\n ]}\n >\n <boxGeometry args={[width + 0.01, stopWidth, stopDepth + 0.01]} />\n </Subtraction>\n\n {/* Left cut */}\n <Subtraction\n name={`cut-left-${setName}`}\n material={material}\n position={[\n -width / 2 + stopWidth / 2 - 0.0001,\n 0,\n stopPositionZ - centerZ,\n ]}\n >\n <boxGeometry args={[stopWidth, height + 0.01, stopDepth + 0.01]} />\n </Subtraction>\n\n {/* Right cut */}\n <Subtraction\n name={`cut-right-${setName}`}\n material={material}\n position={[\n width / 2 - stopWidth / 2 + 0.0001,\n 0,\n stopPositionZ - centerZ,\n ]}\n >\n <boxGeometry args={[stopWidth, height + 0.01, stopDepth + 0.01]} />\n </Subtraction>\n </>\n );\n}\n\ntype DoorModelsProps = {\n doorName?: string;\n};\n\ntype DoorStopCutsProps = {\n visible: boolean;\n width: number;\n height: number;\n stopWidth: number;\n stopDepth: number;\n stopPositionZ: number;\n centerZ: number;\n glassDepthOffset?: number;\n material: THREE.Material;\n setName: string;\n};\n\nfunction DoorModels({ doorName }: DoorModelsProps) {\n const {\n is2D,\n totalWidth,\n totalHeight,\n isPlaneVisible,\n isFrameVisible,\n door,\n doorFrame,\n interiorFanlight,\n exteriorFanlight,\n occulus,\n glass,\n frontCoverPanel,\n backCoverPanel,\n frontDoorPlane,\n backDoorPlane,\n frameType,\n bodyType,\n exteriorFanlightType,\n testDoorMaterial,\n testFrameMaterial,\n testGasketMaterial,\n testInteriorFanlightMaterial,\n testExteriorFanlightMaterial,\n testOcculusInfillMaterial,\n testGlassInfillMaterial,\n testDoorStopMaterial,\n testHingeMaterial,\n glassVisible,\n testFrontCoverPanelMaterial,\n testBackCoverPanelMaterial,\n testFrontDoorPlaneMaterial,\n testBackDoorPlaneMaterial,\n glassDepth,\n cpid,\n handleParseCpid,\n isDoubleDoor,\n materials,\n } = useConfigurator();\n\n useEffect(() => {\n if (doorName) {\n handleParseCpid(doorName);\n }\n }, [doorName, handleParseCpid]);\n\n // here i get material names from context\n const { doorMaterial: doorMaterialName } = door;\n const {\n frameMaterial: frameMaterialName,\n gasketMaterial: gasketMaterialName,\n doorStopMaterial: doorStopMaterialName,\n hingeMaterial: hingeMaterialName,\n } = doorFrame;\n const { material: interiorFanlightMaterialName } = interiorFanlight;\n const { material: exteriorFanlightMaterialName } = exteriorFanlight;\n const { material: occulusInfillMaterialName } = occulus;\n const { material: glassInfillMaterialName } = glass;\n\n const { material: frontCoverPanelMaterialName } = frontCoverPanel;\n const { material: backCoverPanelMaterialName } = backCoverPanel;\n const { material: frontDoorPlaneMaterialName } = frontDoorPlane;\n const { material: backDoorPlaneMaterialName } = backDoorPlane;\n const pers = useMemo(() => {\n const dynamicMaterials: {\n [key: string]: THREE.MeshStandardMaterial | null;\n } = {};\n for (const key in materials) {\n if (Object.prototype.hasOwnProperty.call(materials, key)) {\n const value = materials[key as keyof typeof materials];\n dynamicMaterials[key] = createMaterialFromProp(value);\n }\n }\n return dynamicMaterials;\n }, [materials]);\n // --- Material Logic ---\n const doorMaterial = useMemo(\n () =>\n availableMaterials[testDoorMaterial] ||\n availableMaterials[doorMaterialName] ||\n placeholderMaterial,\n [testDoorMaterial, doorMaterialName]\n );\n const frameMaterial = useMemo(\n () =>\n pers.D_PRF_COLOR ||\n pers.D_FR_SRF_DECOR ||\n pers.D_FR_SRF_DECOR_S2 ||\n availableMaterials[testFrameMaterial] ||\n availableMaterials[frameMaterialName] ||\n placeholderMaterialforFrames,\n [testFrameMaterial, frameMaterialName]\n );\n const gasketMaterial = useMemo(\n () =>\n pers.D_GASKET ||\n availableMaterials[testGasketMaterial] ||\n availableMaterials[gasketMaterialName] ||\n new THREE.MeshStandardMaterial({ color: \"#111111\" }),\n [testGasketMaterial, gasketMaterialName]\n );\n\n const doorStopMaterial = useMemo(() => {\n return (\n pers.D_PRF_COLOR ||\n pers.D_FR_SRF_DECOR ||\n pers.D_FR_SRF_DECOR_S2 ||\n availableMaterials[testDoorStopMaterial] ||\n availableMaterials[\n (doorStopMaterialName as keyof typeof availableMaterials) || \"\"\n ] ||\n frameMaterial\n );\n }, [testDoorStopMaterial, doorStopMaterialName, frameType, frameMaterial]);\n\n const interiorFanlightMaterial = useMemo(\n () =>\n pers.D_SRF_DECOR_2 ||\n availableMaterials[testInteriorFanlightMaterial] ||\n availableMaterials[interiorFanlightMaterialName] ||\n placeholderMaterial,\n [testInteriorFanlightMaterial, interiorFanlightMaterialName]\n );\n const exteriorFanlightMaterial = useMemo(\n () =>\n availableMaterials[testExteriorFanlightMaterial] ||\n availableMaterials[exteriorFanlightMaterialName] ||\n placeholderMaterial,\n [testExteriorFanlightMaterial, exteriorFanlightMaterialName]\n );\n const occulusInfillMaterial = useMemo(\n () =>\n availableMaterials[testOcculusInfillMaterial] ||\n availableMaterials[occulusInfillMaterialName] ||\n placeholderMaterial,\n [testOcculusInfillMaterial, occulusInfillMaterialName]\n );\n const glassInfillMaterial = useMemo(\n () =>\n pers.D_FR_COLOR ||\n availableMaterials[testGlassInfillMaterial] ||\n availableMaterials[glassInfillMaterialName] ||\n placeholderMaterial,\n [testGlassInfillMaterial, glassInfillMaterialName]\n );\n\n const hingeBodyMaterial = useMemo(\n () =>\n availableMaterials[testHingeMaterial] ||\n availableMaterials[hingeMaterialName] ||\n new THREE.MeshStandardMaterial({\n color: \"#d4d4d4\",\n metalness: 1.0,\n roughness: 0.4,\n }),\n [testHingeMaterial, hingeMaterialName]\n );\n\n const frontCoverPanelMaterial = useMemo(\n () =>\n pers.D_PRF_COLOR ||\n pers.D_FR_SRF_DECOR ||\n pers.D_FR_SRF_DECOR_S2 ||\n availableMaterials[testFrontCoverPanelMaterial] ||\n availableMaterials[frontCoverPanelMaterialName] ||\n placeholderMaterial,\n [testFrontCoverPanelMaterial, frontCoverPanelMaterialName]\n );\n\n const backCoverPanelMaterial = useMemo(\n () =>\n pers.D_PRF_COLOR ||\n pers.D_FR_SRF_DECOR ||\n pers.D_FR_SRF_DECOR_S2 ||\n availableMaterials[testBackCoverPanelMaterial] ||\n availableMaterials[backCoverPanelMaterialName] ||\n placeholderMaterial,\n [testBackCoverPanelMaterial, backCoverPanelMaterialName]\n );\n\n const frontDoorPlaneMaterial = useMemo(\n () =>\n pers.D_SRF_DECOR_2 ||\n availableMaterials[testFrontDoorPlaneMaterial] ||\n availableMaterials[frontDoorPlaneMaterialName] ||\n placeholderMaterial,\n [testFrontDoorPlaneMaterial, frontDoorPlaneMaterialName]\n );\n const backDoorPlaneMaterial = useMemo(\n () =>\n pers.D_SRF_DECOR ||\n availableMaterials[testBackDoorPlaneMaterial] ||\n availableMaterials[backDoorPlaneMaterialName] ||\n placeholderMaterial,\n [testBackDoorPlaneMaterial, backDoorPlaneMaterialName]\n );\n\n const hingeAccentMaterial = useMemo(\n () =>\n new THREE.MeshStandardMaterial({\n color: \"#1a1a1a\",\n roughness: 0.1,\n }),\n []\n );\n\n // --- Dimension calculations ---\n const { doorWidth, doorHeight, theDoorDepth, doorPivot, doorOpening } = door;\n const {\n frameDepth,\n topThk,\n sidesThk,\n doorStopWidth,\n doorStopDepth,\n doorStopOffset,\n notchWidth,\n notchDepth,\n notchposition,\n gasketWidth,\n gasketDepth,\n secondDoorStopWidth,\n secondDoorStopDepth,\n secondDoorStopOffset,\n } = doorFrame;\n\n const initialDoorHeight = useRef<number>(doorHeight);\n\n const { height: interiorFanlightHeightValue } = interiorFanlight;\n const {\n height: exteriorFanlightHeightValue,\n depth: exteriorFanlightDepthValue,\n } = exteriorFanlight;\n const {\n x1: occulusX1,\n x2: occulusX2,\n y1: occulusY1,\n y2: occulusY2,\n depth: occulusInfillDepth,\n } = occulus;\n const { width: architraveWidth, depth: architraveDepth } = frontCoverPanel;\n\n const interiorFanlightHeight = interiorFanlight.visible\n ? interiorFanlightHeightValue\n : 0;\n const mainDoorHeight = doorHeight - interiorFanlightHeight;\n\n const topThkValue = parseInt(topThk) || 20;\n const sidesThkValue = parseInt(sidesThk) || 20;\n\n // Convert dimensions from mm to meters\n const doorWidthM = doorWidth / 1000;\n const mainDoorHeightM = mainDoorHeight / 1000;\n const interiorFanlightHeightM = interiorFanlightHeight / 1000;\n const totalOpeningHeightM = doorHeight / 1000;\n const doorDepthM = theDoorDepth / 1000;\n const frameDepthM = frameDepth / 1000;\n const topFrameWidthM = topThkValue / 1000;\n const sidesFrameWidthM = sidesThkValue / 1000;\n\n const totalOpeningWidthM = isDoubleDoor ? doorWidthM * 2 : doorWidthM;\n\n const exteriorFanlightHeightM = exteriorFanlight.visible\n ? exteriorFanlightHeightValue / 1000\n : 0;\n const exteriorFanlightDepthM = exteriorFanlightDepthValue / 1000;\n const occulusX1M = occulusX1 / 1000;\n const occulusX2M = occulusX2 / 1000;\n const occulusY1M = occulusY1 / 1000;\n const occulusY2M = occulusY2 / 1000;\n const occulusInfillDepthM = occulusInfillDepth / 1000;\n const doorStopWidthM = doorStopWidth / 1000;\n const doorStopDepthM = doorStopDepth / 1000;\n\n // Architrave Dimensions\n const architraveProfileM = architraveWidth / 1000;\n const architraveDepthM = architraveDepth / 1000;\n\n // Gasket Dimensions\n const gasketWidthM = gasketWidth / 1000;\n const gasketDepthM = gasketDepth / 1000;\n\n const doorStopOffsetValue = parseInt(doorStopOffset);\n const doorStopOffsetFromEdgeM = doorStopOffsetValue / 1000;\n\n const notchDepthValue = parseInt(notchDepth) || 40;\n const notchWidthValue = parseInt(notchWidth) || 20;\n\n const notchWidthM = notchWidthValue / 1000;\n const notchDepthM = notchDepthValue / 1000;\n\n const isOpeningIn = doorOpening === \"in\";\n\n const doorStopPositionZ = useMemo(\n () =>\n isOpeningIn\n ? frameDepthM / 2 - doorStopOffsetFromEdgeM - doorStopDepthM / 2\n : -frameDepthM / 2 + doorStopOffsetFromEdgeM + doorStopDepthM / 2,\n [isOpeningIn, frameDepthM, doorStopOffsetFromEdgeM, doorStopDepthM]\n );\n\n const gasketZPosition = useMemo(\n () =>\n isOpeningIn\n ? doorStopPositionZ - doorStopDepthM / 2 - gasketDepthM / 2\n : doorStopPositionZ + doorStopDepthM / 2 + gasketDepthM / 2,\n [isOpeningIn, doorStopPositionZ, doorStopDepthM, gasketDepthM]\n );\n const secondDoorStopWidthM = secondDoorStopWidth / 1000;\n const secondDoorStopDepthM = secondDoorStopDepth / 1000;\n const secondDoorStopPositionZ = isOpeningIn\n ? frameDepthM / 2 - secondDoorStopDepthM / 2\n : -frameDepthM / 2 + secondDoorStopDepthM / 2;\n\n // Position the first glass panel against the primary doorstop\n\n const secondGasketZPosition = isOpeningIn\n ? secondDoorStopPositionZ - secondDoorStopDepthM / 2 - gasketDepthM / 2\n : secondDoorStopPositionZ + secondDoorStopDepthM / 2 + gasketDepthM / 2;\n\n const doorCenterZ = useMemo(() => {\n if (frameType === \"WF_FLI\") {\n if (isOpeningIn) {\n return frameDepthM / 2 - doorDepthM / 2;\n } else {\n return -frameDepthM / 2 + doorDepthM / 2;\n }\n }\n\n if (frameType === \"WDGF_WDG100\" || frameType === \"WF_100\") {\n return 0;\n } else {\n if (isOpeningIn) {\n const gasketBackFaceZ = gasketZPosition - gasketDepthM / 2;\n return gasketBackFaceZ - doorDepthM / 2;\n } else {\n const gasketFrontFaceZ = gasketZPosition + gasketDepthM / 2;\n return gasketFrontFaceZ + doorDepthM / 2;\n }\n }\n }, [\n isOpeningIn,\n gasketZPosition,\n gasketDepthM,\n doorDepthM,\n frameType,\n frameDepthM,\n ]);\n const GlassPanelDepthM = glassDepth / 1000;\n\n const frontGlassOffsetZ = doorDepthM / 2 + GlassPanelDepthM / 2;\n const backGlassOffsetZ = -doorDepthM / 2 - GlassPanelDepthM / 2;\n\n // --- Door Stop Positions on Door ---\n const doorStopOffsetOnDoor =\n frameType === \"WDGF_WDG100\" ? secondDoorStopWidthM / 2 : doorStopDepthM / 2;\n\n const exteriorFanlightZPosition =\n exteriorFanlightType === \"ALSGFL\"\n ? 0 // Center it\n : isOpeningIn\n ? -frameDepthM / 2 + exteriorFanlightDepthM / 2\n : frameDepthM / 2 - exteriorFanlightDepthM / 2;\n\n const occulusWidthM = doorWidthM - occulusX1M - occulusX2M;\n const occulusHeightM = mainDoorHeightM - occulusY1M - occulusY2M;\n const occulusPositionXM = (occulusX1M - occulusX2M) / 2;\n const occulusPositionYM = (occulusY2M - occulusY1M) / 2;\n\n const [isOpen, setIsOpen] = useState(false);\n const hingeSideX = doorPivot === \"left\" ? -doorWidthM / 2 : doorWidthM / 2;\n\n const leftGlass_Z =\n -frameDepthM / 2 + GlassPanelDepthM / 2 - GlassPanelDepthM;\n const rightGlass_Z =\n frameDepthM / 2 - GlassPanelDepthM / 2 + GlassPanelDepthM;\n // --- PIVOT ---\n const hingeZ = useMemo(() => {\n if (frameType === \"WF_FLI\") {\n if (isOpeningIn) {\n return doorCenterZ - doorDepthM / 2;\n } else {\n return doorCenterZ + doorDepthM / 2;\n }\n }\n return isOpeningIn ? -frameDepthM / 2 : frameDepthM / 2;\n }, [frameType, isOpeningIn, doorCenterZ, doorDepthM, frameDepthM]);\n\n const doorOffsetZ = useMemo(\n () => doorCenterZ - hingeZ,\n [doorCenterZ, hingeZ]\n );\n\n const directionMultiplier = doorOpening === \"in\" ? 1 : -1;\n const { rotation } = useSpring({\n rotation: isOpen\n ? [\n 0,\n (doorPivot === \"left\" ? Math.PI / 2 : -Math.PI / 2) *\n directionMultiplier,\n 0,\n ]\n : [0, 0, 0],\n config: { mass: 1, tension: 100, friction: 20 },\n });\n\n const handleClick = () => setIsOpen(!isOpen);\n\n const totalFrameWidth = totalOpeningWidthM + sidesFrameWidthM * 2;\n const totalFrameHeightM = totalOpeningHeightM + topFrameWidthM;\n\n // --- Centering Logic ---\n const initialHeightM = (initialDoorHeight.current || doorHeight) / 1000;\n\n const yCenteringOffset = -topFrameWidthM / 2;\n\n const sideFrameCenterY = topFrameWidthM / 2;\n\n const interiorFanlightYPosition =\n totalOpeningHeightM / 2 - interiorFanlightHeightM / 2;\n const doorYPosition = -totalOpeningHeightM / 2 + mainDoorHeightM / 2;\n const topFrameCenterY = totalOpeningHeightM / 2 + topFrameWidthM / 2;\n const topOfFrameY = topFrameCenterY + topFrameWidthM / 2;\n const exteriorFanlightYPosition = topOfFrameY + exteriorFanlightHeightM / 2;\n\n const frontArchitraveZ = frameDepthM / 2 + architraveDepthM / 2;\n const backArchitraveZ = -frameDepthM / 2 - architraveDepthM / 2;\n\n const sideArchitraveHeight = totalOpeningHeightM;\n const sideArchitraveCenterY = 0;\n\n const leftArchitraveX = -totalOpeningWidthM / 2 - architraveProfileM / 2;\n const rightArchitraveX = totalOpeningWidthM / 2 + architraveProfileM / 2;\n\n const topArchitraveY = totalOpeningHeightM / 2 + architraveProfileM / 2;\n const topArchitraveWidth = totalOpeningWidthM + 2 * architraveProfileM;\n\n // --- Handle placement ---\n // Handle local placement on the DOOR LEAF so it follows rotation\n const handleCenterYFromDoorBottom = 1.0; // 1000 mm from bottom by default\n const safeHandleY = Math.min(\n Math.max(handleCenterYFromDoorBottom, 0.25),\n mainDoorHeightM - 0.25\n );\n const handleHeightM = -mainDoorHeightM / 2 + safeHandleY; // convert to door local Y\n\n // Check if the door is a glass type to adjust handle positioning\n const isSingleGlass = [\"SG8\", \"SG10\", \"SG12\"].includes(bodyType);\n\n const latchMarginM = 0.08;\n\n // --- Primary Gasket Edge Position Calculations ---\n const topGasketYPosition =\n totalOpeningHeightM / 2 - doorStopWidthM + gasketWidthM / 2;\n const leftGasketXPosition =\n -totalOpeningWidthM / 2 + doorStopWidthM - gasketWidthM / 2;\n const rightGasketXPosition =\n totalOpeningWidthM / 2 - doorStopWidthM + gasketWidthM / 2;\n\n // --- Second Gasket ---\n\n const secondTopGasketYPosition =\n totalOpeningHeightM / 2 - secondDoorStopWidthM + gasketWidthM / 2;\n\n const secondLeftGasketXPosition =\n -totalOpeningWidthM / 2 + secondDoorStopWidthM - gasketWidthM / 2;\n const secondRightGasketXPosition =\n totalOpeningWidthM / 2 - secondDoorStopWidthM + gasketWidthM / 2;\n // --- HINGE CALCULATIONS ---\n const hingeTotalHeightM = 120 / 1000;\n const hingeRadiusM = 8 / 1000;\n const capHeightM = 4 / 1000;\n const separatorHeightM = 4 / 1000;\n\n const barrelPartHeight =\n (hingeTotalHeightM - capHeightM * 2 - separatorHeightM) / 2;\n\n // --- HINGE VISIBILITY LOGIC ---\n const isGlassDoor = useMemo(\n () => [\"SG8\", \"SG10\", \"SG12\"].includes(bodyType),\n [bodyType]\n );\n\n const pivotNewPosition = useMemo(() => {\n if (initialDoorHeight.current === null || initialDoorHeight.current === 0) {\n return 0;\n }\n return (doorHeight - initialDoorHeight.current) / 2 / 1000;\n }, [doorHeight]);\n\n // Calculate evenly spaced hinge positions\n const standardHingeYPositions = useMemo(() => {\n const numHinges = 4;\n const topMargin = 180 / 1000;\n const bottomMargin = 180 / 1000;\n const availableHeight = mainDoorHeightM - topMargin - bottomMargin;\n const spacing = availableHeight / (numHinges - 1);\n const positions: number[] = [];\n for (let i = 0; i < numHinges; i++) {\n positions.push(mainDoorHeightM / 2 - topMargin - i * spacing);\n }\n return positions;\n }, [mainDoorHeightM]);\n\n // Y positions for the new glass hinges\n const glassHingeYPositions = useMemo(() => {\n const topMargin = 250 / 1000;\n const secondTopMargin = 450 / 1000;\n const bottomMargin = 250 / 1000;\n\n const top = mainDoorHeightM / 2 - topMargin;\n const secondTop = mainDoorHeightM / 2 - secondTopMargin;\n const bottom = -mainDoorHeightM / 2 + bottomMargin;\n\n return [top, secondTop, bottom];\n }, [mainDoorHeightM]);\n\n const isStandardHingeVisible = useMemo(() => {\n if (isGlassDoor) return false;\n if (!isFrameVisible) return false;\n\n const invisibleFrameTypes = [\"WDGF_WDG100\", \"WF_100\", \"WF_FLI\"];\n if (invisibleFrameTypes.includes(frameType)) {\n return false;\n }\n\n return true;\n }, [isFrameVisible, frameType, isGlassDoor]);\n\n const doorInstances = useMemo(() => {\n if (isDoubleDoor) {\n return [\n { key: \"left\", pivot: \"left\", x: -doorWidthM / 2 },\n { key: \"right\", pivot: \"right\", x: doorWidthM / 2 },\n ];\n }\n return [{ key: \"single\", pivot: doorPivot, x: 0 }];\n }, [isDoubleDoor, doorWidthM, doorPivot]);\n\n if (is2D) {\n return (\n <group position-y={yCenteringOffset + 0.1}>\n <mesh>\n <boxGeometry args={[totalWidth / 1000, 0.1, frameDepth / 1000]} />\n <meshBasicMaterial color=\"white\" side={THREE.DoubleSide} />\n </mesh>\n </group>\n );\n }\n\n return (\n <>\n <group position-y={yCenteringOffset + pivotNewPosition}>\n {frontCoverPanel.visible && (\n <group position-z={frontArchitraveZ}>\n {/* Top */}\n <mesh\n position={[0, topArchitraveY, 0]}\n castShadow\n material={frontCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n topArchitraveWidth,\n architraveProfileM,\n architraveDepthM,\n ]}\n />\n </mesh>\n {/* Left */}\n <mesh\n position={[leftArchitraveX, sideArchitraveCenterY, 0]}\n castShadow\n material={frontCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n architraveProfileM,\n sideArchitraveHeight,\n architraveDepthM,\n ]}\n />\n </mesh>\n {/* Right */}\n <mesh\n position={[rightArchitraveX, sideArchitraveCenterY, 0]}\n castShadow\n material={frontCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n architraveProfileM,\n sideArchitraveHeight,\n architraveDepthM,\n ]}\n />\n </mesh>\n </group>\n )}\n {backCoverPanel.visible && (\n <group position-z={backArchitraveZ}>\n {/* Top */}\n <mesh\n position={[0, topArchitraveY, 0]}\n castShadow\n material={backCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n topArchitraveWidth,\n architraveProfileM,\n architraveDepthM,\n ]}\n />\n </mesh>\n {/* Left */}\n <mesh\n position={[leftArchitraveX, sideArchitraveCenterY, 0]}\n castShadow\n material={backCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n architraveProfileM,\n sideArchitraveHeight,\n architraveDepthM,\n ]}\n />\n </mesh>\n {/* Right */}\n <mesh\n position={[rightArchitraveX, sideArchitraveCenterY, 0]}\n castShadow\n material={backCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n architraveProfileM,\n sideArchitraveHeight,\n architraveDepthM,\n ]}\n />\n </mesh>\n </group>\n )}\n\n {exteriorFanlight.visible && (\n <mesh\n position={[0, exteriorFanlightYPosition, exteriorFanlightZPosition]}\n castShadow\n material={exteriorFanlightMaterial}\n >\n <boxGeometry\n args={[\n totalFrameWidth,\n exteriorFanlightHeightM,\n exteriorFanlightDepthM,\n ]}\n />\n </mesh>\n )}\n\n {isFrameVisible && (\n <group>\n {/* --- Top Frame with CSG Cut --- */}\n <mesh castShadow position={[0, topFrameCenterY, 0]}>\n <Geometry useGroups>\n <Base name=\"frame-base\" material={frameMaterial}>\n <boxGeometry\n args={[totalOpeningWidthM, topFrameWidthM, frameDepthM]}\n />\n </Base>\n {![\"MXF_40\", \"MXF_50\", \"MXCAF_40\", \"MXCAF_50\"].includes(\n frameType\n ) && (\n <Subtraction\n name=\"cut-exterior\"\n material={frameMaterial}\n position={[0, notchposition, 0]}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM + 0.01,\n notchWidthM,\n notchDepthM,\n ]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n\n {/* --- Left Frame with CSG Cut --- */}\n <mesh\n castShadow\n position={[\n -totalOpeningWidthM / 2 - sidesFrameWidthM / 2,\n sideFrameCenterY,\n 0,\n ]}\n >\n <Geometry useGroups>\n <Base name=\"frame-base\" material={frameMaterial}>\n <boxGeometry\n args={[sidesFrameWidthM, totalFrameHeightM, frameDepthM]}\n />\n </Base>\n {![\"MXF_40\", \"MXF_50\", \"MXCAF_40\", \"MXCAF_50\"].includes(\n frameType\n ) && (\n <Subtraction\n name=\"cut-exterior\"\n material={frameMaterial}\n position={[-notchposition, 0, 0]}\n >\n <boxGeometry\n args={[\n notchWidthM,\n totalFrameHeightM + 0.01,\n notchDepthM,\n ]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n\n {/* --- Right Frame with CSG Cut --- */}\n <mesh\n castShadow\n position={[\n totalOpeningWidthM / 2 + sidesFrameWidthM / 2,\n sideFrameCenterY,\n 0,\n ]}\n >\n <Geometry useGroups>\n <Base name=\"frame-base\" material={frameMaterial}>\n <boxGeometry\n args={[sidesFrameWidthM, totalFrameHeightM, frameDepthM]}\n />\n </Base>\n {![\"MXF_40\", \"MXF_50\", \"MXCAF_40\", \"MXCAF_50\"].includes(\n frameType\n ) && (\n <Subtraction\n name=\"cut-exterior\"\n material={frameMaterial}\n position={[notchposition, 0, 0]}\n >\n <boxGeometry\n args={[\n notchWidthM,\n totalFrameHeightM + 0.01,\n notchDepthM,\n ]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n\n {/* --- Door Stop Geometry --- */}\n <mesh\n castShadow\n position={[\n 0,\n totalOpeningHeightM / 2 - doorStopWidthM / 2,\n doorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[totalOpeningWidthM, doorStopWidthM, doorStopDepthM]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n -totalOpeningWidthM / 2 + doorStopWidthM / 2,\n 0,\n doorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[doorStopWidthM, totalOpeningHeightM, doorStopDepthM]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n totalOpeningWidthM / 2 - doorStopWidthM / 2,\n 0,\n doorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[doorStopWidthM, totalOpeningHeightM, doorStopDepthM]}\n />\n </mesh>\n\n {/* --- Rubber Gasket Geometry (Primary) --- */}\n {frameType !== \"WF_FLI\" && (\n <>\n <mesh\n castShadow\n position={[0, topGasketYPosition, gasketZPosition]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM - 0.03,\n gasketWidthM + 0.005,\n gasketDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n leftGasketXPosition - 0.005,\n -0.005,\n gasketZPosition,\n ]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n gasketWidthM + 0.005,\n totalOpeningHeightM - 0.02,\n gasketDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n rightGasketXPosition + 0.005,\n -0.005,\n gasketZPosition,\n ]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n gasketWidthM + 0.005,\n totalOpeningHeightM - 0.02,\n gasketDepthM,\n ]}\n />\n </mesh>\n </>\n )}\n\n {(frameType === \"WDGF_WDG100\" ||\n frameType === \"WF_100\" ||\n frameType === \"WF_FLI\") && (\n <group>\n {/* --- Door Stops (Second) --- */}\n <group>\n <mesh\n castShadow\n position={[\n 0,\n totalOpeningHeightM / 2 - secondDoorStopWidthM / 2,\n secondDoorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM,\n secondDoorStopWidthM,\n secondDoorStopDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n -totalOpeningWidthM / 2 + secondDoorStopWidthM / 2,\n 0,\n secondDoorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[\n secondDoorStopWidthM,\n totalOpeningHeightM,\n secondDoorStopDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n totalOpeningWidthM / 2 - secondDoorStopWidthM / 2,\n 0,\n secondDoorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[\n secondDoorStopWidthM,\n totalOpeningHeightM,\n secondDoorStopDepthM,\n ]}\n />\n </mesh>\n </group>\n\n {/* --- Gaskets (Second) --- */}\n <group>\n <mesh\n castShadow\n position={[\n 0,\n secondTopGasketYPosition - 0.005,\n secondGasketZPosition,\n ]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM - 0.03,\n gasketWidthM + 0.005,\n gasketDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n secondLeftGasketXPosition - 0.005,\n -0.01,\n secondGasketZPosition,\n ]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n gasketWidthM + 0.005,\n totalOpeningHeightM - 0.04,\n gasketDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n secondRightGasketXPosition + 0.005,\n -0.01,\n secondGasketZPosition,\n ]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n gasketWidthM + 0.004,\n totalOpeningHeightM - 0.04,\n gasketDepthM,\n ]}\n />\n </mesh>\n </group>\n\n {/* --- Glass Frame (if visible) --- */}\n {glassVisible && (\n <>\n {/* Back side */}\n <group>\n {/* Top frame */}\n {(frameType === \"WDGF_WDG100\" ||\n frameType === \"WF_100\") && (\n <mesh\n castShadow\n position={[\n 0,\n topFrameCenterY - secondDoorStopWidthM / 2,\n leftGlass_Z,\n ]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM - 2 * secondDoorStopWidthM,\n topFrameWidthM + secondDoorStopWidthM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n )}\n {frameType !== \"WDGF_WDG100\" &&\n frameType !== \"WF_100\" && (\n <mesh\n castShadow\n position={[0, topFrameCenterY, leftGlass_Z]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM - 2 * secondDoorStopWidthM,\n topFrameWidthM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n )}\n\n {/* Left side frame */}\n <mesh\n castShadow\n position={[\n -totalOpeningWidthM / 2 -\n sidesFrameWidthM / 2 +\n secondDoorStopWidthM / 2,\n sideFrameCenterY,\n leftGlass_Z,\n ]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n sidesFrameWidthM + secondDoorStopWidthM,\n totalFrameHeightM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n\n {/* Right side frame */}\n <mesh\n castShadow\n position={[\n totalOpeningWidthM / 2 +\n sidesFrameWidthM / 2 -\n secondDoorStopWidthM / 2,\n sideFrameCenterY,\n leftGlass_Z,\n ]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n sidesFrameWidthM + secondDoorStopWidthM,\n totalFrameHeightM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n </group>\n\n {/* Front side */}\n <group>\n {/* Top frame */}\n <mesh\n castShadow\n position={[0, topFrameCenterY, rightGlass_Z]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM,\n topFrameWidthM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n\n {/* Left side frame */}\n <mesh\n castShadow\n position={[\n -totalOpeningWidthM / 2 - sidesFrameWidthM / 2,\n sideFrameCenterY,\n rightGlass_Z,\n ]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n sidesFrameWidthM,\n totalFrameHeightM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n\n {/* Right side frame */}\n <mesh\n castShadow\n position={[\n totalOpeningWidthM / 2 + sidesFrameWidthM / 2,\n sideFrameCenterY,\n rightGlass_Z,\n ]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n sidesFrameWidthM,\n totalFrameHeightM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n </group>\n </>\n )}\n </group>\n )}\n </group>\n )}\n\n {interiorFanlight.visible && (\n <mesh\n position={[0, interiorFanlightYPosition, doorCenterZ]}\n castShadow\n material={interiorFanlightMaterial}\n >\n <boxGeometry\n args={[totalOpeningWidthM, interiorFanlightHeightM, doorDepthM]}\n />\n </mesh>\n )}\n {doorInstances.map(instance => (\n <DoorLeaf\n key={instance.key}\n pivot={instance.pivot}\n xOffset={instance.x}\n />\n ))}\n </group>\n\n {/* Floor plane */}\n {/* {!isPlaneVisible && (\n <mesh\n receiveShadow\n rotation={[-Math.PI / 2, 0, 0]}\n position={[0, -1.35, 0]}\n >\n <planeGeometry args={[10, 10]} />\n <meshStandardMaterial color=\"#f9f9f9\" side={THREE.DoubleSide} />\n </mesh>\n )} */}\n </>\n );\n}\n\nfunction DoorLeaf({ pivot, xOffset }) {\n const {\n is2D,\n totalWidth,\n totalHeight,\n isPlaneVisible,\n isFrameVisible,\n door,\n doorFrame,\n interiorFanlight,\n exteriorFanlight,\n occulus,\n glass,\n frontCoverPanel,\n backCoverPanel,\n frontDoorPlane,\n backDoorPlane,\n frameType,\n bodyType,\n exteriorFanlightType,\n testDoorMaterial,\n testFrameMaterial,\n testGasketMaterial,\n testInteriorFanlightMaterial,\n testExteriorFanlightMaterial,\n testOcculusInfillMaterial,\n testGlassInfillMaterial,\n testDoorStopMaterial,\n testHingeMaterial,\n glassVisible,\n testFrontCoverPanelMaterial,\n testBackCoverPanelMaterial,\n testFrontDoorPlaneMaterial,\n testBackDoorPlaneMaterial,\n glassDepth,\n cpid,\n handleParseCpid,\n } = useConfigurator();\n\n // here i get material names from context\n const { doorMaterial: doorMaterialName } = door;\n const {\n frameMaterial: frameMaterialName,\n gasketMaterial: gasketMaterialName,\n doorStopMaterial: doorStopMaterialName,\n hingeMaterial: hingeMaterialName,\n } = doorFrame;\n const { material: interiorFanlightMaterialName } = interiorFanlight;\n const { material: exteriorFanlightMaterialName } = exteriorFanlight;\n const { material: occulusInfillMaterialName } = occulus;\n const { material: glassInfillMaterialName } = glass;\n\n const { material: frontCoverPanelMaterialName } = frontCoverPanel;\n const { material: backCoverPanelMaterialName } = backCoverPanel;\n const { material: frontDoorPlaneMaterialName } = frontDoorPlane;\n const { material: backDoorPlaneMaterialName } = backDoorPlane;\n\n // --- Material Logic ---\n const doorMaterial = useMemo(\n () =>\n availableMaterials[testDoorMaterial] ||\n availableMaterials[doorMaterialName] ||\n placeholderMaterial,\n [testDoorMaterial, doorMaterialName]\n );\n const frameMaterial = useMemo(\n () =>\n availableMaterials[testFrameMaterial] ||\n availableMaterials[frameMaterialName] ||\n placeholderMaterialforFrames,\n [testFrameMaterial, frameMaterialName]\n );\n const gasketMaterial = useMemo(\n () =>\n availableMaterials[testGasketMaterial] ||\n availableMaterials[gasketMaterialName] ||\n new THREE.MeshStandardMaterial({ color: \"#111111\" }),\n [testGasketMaterial, gasketMaterialName]\n );\n\n const doorStopMaterial = useMemo(() => {\n return (\n availableMaterials[testDoorStopMaterial] ||\n availableMaterials[\n (doorStopMaterialName as keyof typeof availableMaterials) || \"\"\n ] ||\n frameMaterial\n );\n }, [testDoorStopMaterial, doorStopMaterialName, frameType, frameMaterial]);\n\n const interiorFanlightMaterial = useMemo(\n () =>\n availableMaterials[testInteriorFanlightMaterial] ||\n availableMaterials[interiorFanlightMaterialName] ||\n placeholderMaterial,\n [testInteriorFanlightMaterial, interiorFanlightMaterialName]\n );\n const exteriorFanlightMaterial = useMemo(\n () =>\n availableMaterials[testExteriorFanlightMaterial] ||\n availableMaterials[exteriorFanlightMaterialName] ||\n placeholderMaterial,\n [testExteriorFanlightMaterial, exteriorFanlightMaterialName]\n );\n const occulusInfillMaterial = useMemo(\n () =>\n availableMaterials[testOcculusInfillMaterial] ||\n availableMaterials[occulusInfillMaterialName] ||\n placeholderMaterial,\n [testOcculusInfillMaterial, occulusInfillMaterialName]\n );\n const glassInfillMaterial = useMemo(\n () =>\n availableMaterials[testGlassInfillMaterial] ||\n availableMaterials[glassInfillMaterialName] ||\n placeholderMaterial,\n [testGlassInfillMaterial, glassInfillMaterialName]\n );\n\n const hingeBodyMaterial = useMemo(\n () =>\n availableMaterials[testHingeMaterial] ||\n availableMaterials[hingeMaterialName] ||\n new THREE.MeshStandardMaterial({\n color: \"#d4d4d4\",\n metalness: 1.0,\n roughness: 0.4,\n }),\n [testHingeMaterial, hingeMaterialName]\n );\n\n const frontCoverPanelMaterial = useMemo(\n () =>\n availableMaterials[testFrontCoverPanelMaterial] ||\n availableMaterials[frontCoverPanelMaterialName] ||\n placeholderMaterial,\n [testFrontCoverPanelMaterial, frontCoverPanelMaterialName]\n );\n\n const backCoverPanelMaterial = useMemo(\n () =>\n availableMaterials[testBackCoverPanelMaterial] ||\n availableMaterials[backCoverPanelMaterialName] ||\n placeholderMaterial,\n [testBackCoverPanelMaterial, backCoverPanelMaterialName]\n );\n\n const frontDoorPlaneMaterial = useMemo(\n () =>\n availableMaterials[testFrontDoorPlaneMaterial] ||\n availableMaterials[frontDoorPlaneMaterialName] ||\n placeholderMaterial,\n [testFrontDoorPlaneMaterial, frontDoorPlaneMaterialName]\n );\n const backDoorPlaneMaterial = useMemo(\n () =>\n availableMaterials[testBackDoorPlaneMaterial] ||\n availableMaterials[backDoorPlaneMaterialName] ||\n placeholderMaterial,\n [testBackDoorPlaneMaterial, backDoorPlaneMaterialName]\n );\n\n const hingeAccentMaterial = useMemo(\n () =>\n new THREE.MeshStandardMaterial({\n color: \"#1a1a1a\",\n roughness: 0.1,\n }),\n []\n );\n\n // --- Dimension calculations ---\n const { doorWidth, doorHeight, theDoorDepth, doorPivot, doorOpening } = door;\n const {\n frameDepth,\n topThk,\n sidesThk,\n doorStopWidth,\n doorStopDepth,\n doorStopOffset,\n notchWidth,\n notchDepth,\n notchposition,\n gasketWidth,\n gasketDepth,\n secondDoorStopWidth,\n secondDoorStopDepth,\n secondDoorStopOffset,\n } = doorFrame;\n\n const initialDoorHeight = useRef<number | null>(null);\n const initialDoorWidth = useRef<number | null>(null);\n\n useEffect(() => {\n if (doorHeight > 0 && initialDoorHeight.current === null) {\n initialDoorHeight.current = doorHeight;\n }\n if (doorWidth > 0 && initialDoorWidth.current === null) {\n initialDoorWidth.current = doorWidth;\n }\n }, [doorHeight, doorWidth]);\n\n const { height: interiorFanlightHeightValue } = interiorFanlight;\n const {\n height: exteriorFanlightHeightValue,\n depth: exteriorFanlightDepthValue,\n } = exteriorFanlight;\n const {\n x1: occulusX1,\n x2: occulusX2,\n y1: occulusY1,\n y2: occulusY2,\n depth: occulusInfillDepth,\n } = occulus;\n const { width: architraveWidth, depth: architraveDepth } = frontCoverPanel;\n\n const interiorFanlightHeight = interiorFanlight.visible\n ? interiorFanlightHeightValue\n : 0;\n const mainDoorHeight = doorHeight - interiorFanlightHeight;\n\n const topThkValue = parseInt(topThk) || 20;\n const sidesThkValue = parseInt(sidesThk) || 20;\n\n // Convert dimensions from mm to meters\n const doorWidthM = doorWidth / 1000;\n const mainDoorHeightM = mainDoorHeight / 1000;\n const interiorFanlightHeightM = interiorFanlightHeight / 1000;\n const totalOpeningHeightM = doorHeight / 1000;\n const doorDepthM = theDoorDepth / 1000;\n const frameDepthM = frameDepth / 1000;\n const topFrameWidthM = topThkValue / 1000;\n const sidesFrameWidthM = sidesThkValue / 1000;\n const exteriorFanlightHeightM = exteriorFanlight.visible\n ? exteriorFanlightHeightValue / 1000\n : 0;\n const exteriorFanlightDepthM = exteriorFanlightDepthValue / 1000;\n const occulusX1M = occulusX1 / 1000;\n const occulusX2M = occulusX2 / 1000;\n const occulusY1M = occulusY1 / 1000;\n const occulusY2M = occulusY2 / 1000;\n const occulusInfillDepthM = occulusInfillDepth / 1000;\n const doorStopWidthM = doorStopWidth / 1000;\n const doorStopDepthM = doorStopDepth / 1000;\n\n // Architrave Dimensions\n const architraveProfileM = architraveWidth / 1000;\n const architraveDepthM = architraveDepth / 1000;\n\n // Gasket Dimensions\n const gasketWidthM = gasketWidth / 1000;\n const gasketDepthM = gasketDepth / 1000;\n\n const doorStopOffsetValue = parseInt(doorStopOffset);\n const doorStopOffsetFromEdgeM = doorStopOffsetValue / 1000;\n\n const notchDepthValue = parseInt(notchDepth) || 40;\n const notchWidthValue = parseInt(notchWidth) || 20;\n\n const notchWidthM = notchWidthValue / 1000;\n const notchDepthM = notchDepthValue / 1000;\n\n const isOpeningIn = doorOpening === \"in\";\n\n const doorStopPositionZ = useMemo(\n () =>\n isOpeningIn\n ? frameDepthM / 2 - doorStopOffsetFromEdgeM - doorStopDepthM / 2\n : -frameDepthM / 2 + doorStopOffsetFromEdgeM + doorStopDepthM / 2,\n [isOpeningIn, frameDepthM, doorStopOffsetFromEdgeM, doorStopDepthM]\n );\n\n const gasketZPosition = useMemo(\n () =>\n isOpeningIn\n ? doorStopPositionZ - doorStopDepthM / 2 - gasketDepthM / 2\n : doorStopPositionZ + doorStopDepthM / 2 + gasketDepthM / 2,\n [isOpeningIn, doorStopPositionZ, doorStopDepthM, gasketDepthM]\n );\n const secondDoorStopWidthM = secondDoorStopWidth / 1000;\n const secondDoorStopDepthM = secondDoorStopDepth / 1000;\n const secondDoorStopPositionZ = isOpeningIn\n ? frameDepthM / 2 - secondDoorStopDepthM / 2\n : -frameDepthM / 2 + secondDoorStopDepthM / 2;\n\n // Position the first glass panel against the primary doorstop\n\n const secondGasketZPosition = isOpeningIn\n ? secondDoorStopPositionZ - secondDoorStopDepthM / 2 - gasketDepthM / 2\n : secondDoorStopPositionZ + secondDoorStopDepthM / 2 + gasketDepthM / 2;\n\n const doorCenterZ = useMemo(() => {\n if (frameType === \"WF_FLI\") {\n if (isOpeningIn) {\n return frameDepthM / 2 - doorDepthM / 2;\n } else {\n return -frameDepthM / 2 + doorDepthM / 2;\n }\n }\n\n if (frameType === \"WDGF_WDG100\" || frameType === \"WF_100\") {\n return 0;\n } else {\n if (isOpeningIn) {\n const gasketBackFaceZ = gasketZPosition - gasketDepthM / 2;\n return gasketBackFaceZ - doorDepthM / 2;\n } else {\n const gasketFrontFaceZ = gasketZPosition + gasketDepthM / 2;\n return gasketFrontFaceZ + doorDepthM / 2;\n }\n }\n }, [\n isOpeningIn,\n gasketZPosition,\n gasketDepthM,\n doorDepthM,\n frameType,\n frameDepthM,\n ]);\n const GlassPanelDepthM = glassDepth / 1000;\n\n const frontGlassOffsetZ = doorDepthM / 2 + GlassPanelDepthM / 2;\n const backGlassOffsetZ = -doorDepthM / 2 - GlassPanelDepthM / 2;\n\n // --- Door Stop Positions on Door ---\n const doorStopOffsetOnDoor =\n frameType === \"WDGF_WDG100\" ? secondDoorStopWidthM / 2 : doorStopDepthM / 2;\n\n const exteriorFanlightZPosition =\n exteriorFanlightType === \"ALSGFL\"\n ? 0 // Center it\n : isOpeningIn\n ? -frameDepthM / 2 + exteriorFanlightDepthM / 2\n : frameDepthM / 2 - exteriorFanlightDepthM / 2;\n\n const occulusWidthM = doorWidthM - occulusX1M - occulusX2M;\n const occulusHeightM = mainDoorHeightM - occulusY1M - occulusY2M;\n const occulusPositionXM = (occulusX1M - occulusX2M) / 2;\n const occulusPositionYM = (occulusY2M - occulusY1M) / 2;\n\n const [isOpen, setIsOpen] = useState(false);\n const hingeSideX = pivot === \"left\" ? -doorWidthM / 2 : doorWidthM / 2;\n\n const leftGlass_Z =\n -frameDepthM / 2 + GlassPanelDepthM / 2 - GlassPanelDepthM;\n const rightGlass_Z =\n frameDepthM / 2 - GlassPanelDepthM / 2 + GlassPanelDepthM;\n // --- PIVOT ---\n const hingeZ = useMemo(() => {\n if (frameType === \"WF_FLI\") {\n if (isOpeningIn) {\n return doorCenterZ - doorDepthM / 2;\n } else {\n return doorCenterZ + doorDepthM / 2;\n }\n }\n return isOpeningIn ? -frameDepthM / 2 : frameDepthM / 2;\n }, [frameType, isOpeningIn, doorCenterZ, doorDepthM, frameDepthM]);\n\n const doorOffsetZ = useMemo(\n () => doorCenterZ - hingeZ,\n [doorCenterZ, hingeZ]\n );\n\n const directionMultiplier = doorOpening === \"in\" ? 1 : -1;\n const { rotation } = useSpring({\n rotation: isOpen\n ? [\n 0,\n (pivot === \"left\" ? Math.PI / 2 : -Math.PI / 2) * directionMultiplier,\n 0,\n ]\n : [0, 0, 0],\n config: { mass: 1, tension: 100, friction: 20 },\n });\n\n const handleClick = () => setIsOpen(!isOpen);\n\n const totalFrameHeightM = totalOpeningHeightM + topFrameWidthM;\n\n const doorYPosition = -totalOpeningHeightM / 2 + mainDoorHeightM / 2;\n\n const handleCenterYFromDoorBottom = 1.0;\n const safeHandleY = Math.min(\n Math.max(handleCenterYFromDoorBottom, 0.25),\n mainDoorHeightM - 0.25\n );\n const handleHeightM = -mainDoorHeightM / 2 + safeHandleY;\n\n const isSingleGlass = [\"SG8\", \"SG10\", \"SG12\"].includes(bodyType);\n const nonHingeSideX = pivot === \"left\" ? doorWidthM / 2 : -doorWidthM / 2;\n\n let handleX;\n\n if (isSingleGlass) {\n const plateHalfWidth = 0.05;\n handleX =\n nonHingeSideX + (pivot === \"left\" ? -plateHalfWidth : plateHalfWidth);\n } else {\n const latchMarginM = 0.08;\n handleX = nonHingeSideX + (pivot === \"left\" ? -latchMarginM : latchMarginM);\n }\n\n const hingeTotalHeightM = 120 / 1000;\n const hingeRadiusM = 8 / 1000;\n const capHeightM = 4 / 1000;\n const separatorHeightM = 4 / 1000;\n\n const barrelPartHeight =\n (hingeTotalHeightM - capHeightM * 2 - separatorHeightM) / 2;\n\n const isGlassDoor = useMemo(\n () => [\"SG8\", \"SG10\", \"SG12\"].includes(bodyType),\n [bodyType]\n );\n\n const standardHingeYPositions = useMemo(() => {\n const numHinges = 4;\n const topMargin = 180 / 1000;\n const bottomMargin = 180 / 1000;\n const availableHeight = mainDoorHeightM - topMargin - bottomMargin;\n const spacing = availableHeight / (numHinges - 1);\n const positions: number[] = [];\n for (let i = 0; i < numHinges; i++) {\n positions.push(mainDoorHeightM / 2 - topMargin - i * spacing);\n }\n return positions;\n }, [mainDoorHeightM]);\n\n const glassHingeYPositions = useMemo(() => {\n const topMargin = 250 / 1000;\n const secondTopMargin = 450 / 1000;\n const bottomMargin = 250 / 1000;\n const top = mainDoorHeightM / 2 - topMargin;\n const secondTop = mainDoorHeightM / 2 - secondTopMargin;\n const bottom = -mainDoorHeightM / 2 + bottomMargin;\n return [top, secondTop, bottom];\n }, [mainDoorHeightM]);\n\n const isStandardHingeVisible = useMemo(() => {\n if (isGlassDoor) return false;\n if (!isFrameVisible) return false;\n const invisibleFrameTypes = [\"WDGF_WDG100\", \"WF_100\", \"WF_FLI\"];\n if (invisibleFrameTypes.includes(frameType)) {\n return false;\n }\n return true;\n }, [isFrameVisible, frameType, isGlassDoor]);\n\n // --- DYNAMIC TEXTURE MATERIALS ---\n const dynamicFrontDoorPlaneMaterial = useMemo(() => {\n const newMaterial = frontDoorPlaneMaterial.clone();\n if (newMaterial.map) {\n newMaterial.map = newMaterial.map.clone();\n newMaterial.map.needsUpdate = true;\n newMaterial.map.wrapS = THREE.RepeatWrapping;\n newMaterial.map.wrapT = THREE.RepeatWrapping;\n\n const initialHeightM = initialDoorHeight.current\n ? initialDoorHeight.current / 1000\n : mainDoorHeightM;\n const initialWidthM = initialDoorWidth.current\n ? initialDoorWidth.current / 1000\n : doorWidthM;\n\n const repeatY = initialHeightM > 0 ? mainDoorHeightM / initialHeightM : 1;\n const repeatX = initialWidthM > 0 ? doorWidthM / initialWidthM : 1;\n\n newMaterial.map.repeat.set(repeatX, repeatY * 2);\n console.log(repeatX, repeatY);\n }\n return newMaterial;\n }, [frontDoorPlaneMaterial, mainDoorHeightM, doorWidthM]);\n\n const dynamicBackDoorPlaneMaterial = useMemo(() => {\n const newMaterial = backDoorPlaneMaterial.clone();\n if (newMaterial.map) {\n newMaterial.map = newMaterial.map.clone();\n newMaterial.map.needsUpdate = true;\n newMaterial.map.wrapS = THREE.RepeatWrapping;\n newMaterial.map.wrapT = THREE.RepeatWrapping;\n\n const initialHeightM = initialDoorHeight.current\n ? initialDoorHeight.current / 1000\n : mainDoorHeightM;\n const initialWidthM = initialDoorWidth.current\n ? initialDoorWidth.current / 1000\n : doorWidthM;\n\n const repeatY = initialHeightM > 0 ? mainDoorHeightM / initialHeightM : 1;\n const repeatX = initialWidthM > 0 ? doorWidthM / initialWidthM : 1;\n\n newMaterial.map.repeat.set(repeatX, repeatY * 2);\n }\n return newMaterial;\n }, [backDoorPlaneMaterial, mainDoorHeightM, doorWidthM]);\n\n return (\n <group position-x={xOffset}>\n {isStandardHingeVisible &&\n standardHingeYPositions.map((y, index) => (\n <group\n key={`frame-hinge-${index}`}\n position={[hingeSideX, doorYPosition + y, hingeZ]}\n >\n <mesh\n material={hingeBodyMaterial}\n position={[0, separatorHeightM / 2 + barrelPartHeight / 2, 0]}\n castShadow\n >\n <cylinderGeometry\n args={[hingeRadiusM, hingeRadiusM, barrelPartHeight, 32]}\n />\n </mesh>\n <mesh\n material={hingeAccentMaterial}\n position={[\n 0,\n separatorHeightM / 2 + barrelPartHeight + capHeightM / 2,\n 0,\n ]}\n castShadow\n >\n <cylinderGeometry\n args={[hingeRadiusM, hingeRadiusM, capHeightM, 32]}\n />\n </mesh>\n </group>\n ))}\n\n {/* --- PIVOT GROUP --- */}\n <a.group\n position={[hingeSideX, doorYPosition, hingeZ]}\n rotation={rotation.to((x, y, z) => [x, y, z] as any)}\n onClick={handleClick}\n onPointerOver={() => (document.body.style.cursor = \"pointer\")}\n onPointerOut={() => (document.body.style.cursor = \"auto\")}\n >\n {/* --- Standard Hinge (Door Side)--- */}\n {isStandardHingeVisible &&\n standardHingeYPositions.map((y, index) => (\n <group key={`door-hinge-${index}`} position={[0, y, 0]}>\n <mesh\n material={hingeBodyMaterial}\n position={[0, -separatorHeightM / 2 - barrelPartHeight / 2, 0]}\n castShadow\n >\n <cylinderGeometry\n args={[hingeRadiusM, hingeRadiusM, barrelPartHeight, 32]}\n />\n </mesh>\n <mesh\n material={hingeAccentMaterial}\n position={[\n 0,\n -separatorHeightM / 2 - barrelPartHeight - capHeightM / 2,\n 0,\n ]}\n castShadow\n >\n <cylinderGeometry\n args={[hingeRadiusM, hingeRadiusM, capHeightM, 32]}\n />\n </mesh>\n <mesh\n material={hingeAccentMaterial}\n position={[0, 0, 0]}\n castShadow\n >\n <cylinderGeometry\n args={[hingeRadiusM, hingeRadiusM, separatorHeightM, 32]}\n />\n </mesh>\n </group>\n ))}\n {/* --- Glass Hinge --- */}\n {isGlassDoor &&\n isFrameVisible &&\n glassHingeYPositions.map((y, index) => (\n <GlassHinge\n key={`glass-hinge-${index}`}\n position={[0, y, doorOffsetZ + 0.0001]}\n pivot={pivot}\n frameSideWidth={sidesFrameWidthM}\n doorDepthM={doorDepthM}\n material={hingeBodyMaterial}\n gasketMaterial={gasketMaterial}\n />\n ))}\n\n <group position={[-hingeSideX, 0, doorOffsetZ]}>\n <mesh castShadow receiveShadow>\n <Geometry useGroups>\n <Base name=\"door-base\" material={doorMaterial}>\n <boxGeometry args={[doorWidthM, mainDoorHeightM, doorDepthM]} />\n </Base>\n {/* First set of cuts */}\n <DoorStopCuts\n visible={\n frameType === \"WDGF_WDG100\" ||\n frameType === \"WF_100\" ||\n frameType === \"WF_FLI\"\n }\n width={doorWidthM}\n height={totalOpeningHeightM}\n stopWidth={doorStopWidthM}\n stopDepth={doorStopDepthM}\n stopPositionZ={doorStopPositionZ}\n centerZ={doorCenterZ}\n glassDepthOffset={GlassPanelDepthM / 2}\n material={doorMaterial}\n setName=\"1\"\n />\n\n {/* Second set of cuts */}\n <DoorStopCuts\n visible={\n frameType === \"WDGF_WDG100\" ||\n frameType === \"WF_100\" ||\n frameType === \"WF_FLI\"\n }\n width={doorWidthM}\n height={totalOpeningHeightM}\n stopWidth={secondDoorStopWidthM}\n stopDepth={secondDoorStopDepthM}\n stopPositionZ={secondDoorStopPositionZ}\n centerZ={doorCenterZ}\n glassDepthOffset={GlassPanelDepthM / 2}\n material={doorMaterial}\n setName=\"2\"\n />\n\n {/* Glass panels */}\n {glassVisible && (\n <>\n <mesh\n position={[0, 0, frontGlassOffsetZ]}\n castShadow\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[doorWidthM, mainDoorHeightM, GlassPanelDepthM]}\n />\n </mesh>\n\n {frameType !== \"WDGF_WDG100\" && frameType !== \"WF_100\" && (\n <mesh\n position={[0, 0, backGlassOffsetZ]}\n castShadow\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[doorWidthM, mainDoorHeightM, GlassPanelDepthM]}\n />\n </mesh>\n )}\n\n {(frameType === \"WDGF_WDG100\" || frameType === \"WF_100\") && (\n <mesh\n position={[\n 0,\n -secondDoorStopWidthM / 2,\n backGlassOffsetZ,\n ]}\n castShadow\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n doorWidthM - 2 * secondDoorStopWidthM,\n mainDoorHeightM - secondDoorStopWidthM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n )}\n </>\n )}\n\n {/* Occulus cut */}\n {occulus.visible && occulusWidthM > 0 && occulusHeightM > 0 && (\n <Subtraction\n material={placeholderMaterial}\n position={[occulusPositionXM, occulusPositionYM, 0]}\n >\n <boxGeometry\n args={[occulusWidthM, occulusHeightM, doorDepthM + 0.01]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n\n {frontDoorPlane.visible && (\n <mesh position={[0, 0, doorDepthM / 2 + 0.0005]} castShadow>\n <Geometry useGroups>\n <Base material={dynamicFrontDoorPlaneMaterial}>\n <boxGeometry args={[doorWidthM, mainDoorHeightM, 0.001]} />\n </Base>\n {occulus.visible && occulusWidthM > 0 && occulusHeightM > 0 && (\n <Subtraction\n position={[occulusPositionXM, occulusPositionYM, 0]}\n >\n <boxGeometry\n args={[occulusWidthM, occulusHeightM, 0.002]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n )}\n {backDoorPlane.visible && (\n <mesh position={[0, 0, -doorDepthM / 2 - 0.0005]} castShadow>\n <Geometry useGroups>\n <Base material={dynamicBackDoorPlaneMaterial}>\n <boxGeometry args={[doorWidthM, mainDoorHeightM, 0.0001]} />\n </Base>\n {occulus.visible && occulusWidthM > 0 && occulusHeightM > 0 && (\n <Subtraction\n position={[occulusPositionXM, occulusPositionYM, 0]}\n >\n <boxGeometry\n args={[occulusWidthM, occulusHeightM, 0.002]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n )}\n\n {/* Occulus infill */}\n {occulus.visible &&\n occulus.infillVisible &&\n occulusWidthM > 0 &&\n occulusHeightM > 0 && (\n <mesh\n position={[occulusPositionXM, occulusPositionYM, 0]}\n castShadow\n material={occulusInfillMaterial}\n >\n <boxGeometry\n args={[occulusWidthM, occulusHeightM, occulusInfillDepthM]}\n />\n </mesh>\n )}\n\n {/* Door Handle - Positioned correctly relative to the door leaf */}\n <DoorHandle\n bodyType={bodyType}\n handleX={handleX}\n handleHeightM={handleHeightM}\n doorDepthM={doorDepthM}\n doorPivot={pivot}\n />\n </group>\n </a.group>\n </group>\n );\n}\n\nexport default DoorModels;\n","import React from \"react\";\nimport { ConfiguratorProvider } from \"../context/DoorContext\";\nimport DoorModels from \"./DoorModels\";\n\ntype MaterialInputValue = string;\n\ntype MaterialProps = {\n D_SRF_DECOR_2?: MaterialInputValue;\n D_SRF_DECOR?: MaterialInputValue;\n D_PRF_COLOR?: MaterialInputValue;\n D_FR_SRF_DECOR?: MaterialInputValue;\n D_FR_SRF_DECOR_S2?: MaterialInputValue;\n D_FR_COLOR?: MaterialInputValue;\n D_GASKET?: MaterialInputValue;\n};\n\ntype DoorConfiguratorProps = {\n doorName?: string;\n is2D?: boolean;\n materials?: MaterialProps;\n};\n\nconst DoorConfigurator = ({\n doorName,\n is2D = false,\n materials,\n}: DoorConfiguratorProps) => {\n return (\n <ConfiguratorProvider initialIs2D={is2D} initialMaterials={materials}>\n <DoorModels doorName={doorName} />\n </ConfiguratorProvider>\n );\n};\nexport default DoorConfigurator;\n"],"names":["ConfiguratorContext","createContext","undefined","ConfiguratorProvider","_ref","children","initialIs2D","initialMaterials","materials","setMaterials","useState","is2D","setIs2D","isPlaneVisible","setIsPlaneVisible","isFrameVisible","setIsFrameVisible","cpid","setCpid","totalHeight","setTotalHeight","totalWidth","setTotalWidth","glassVisible","setGlassVisible","glassDepth","setGlassDepth","isDoubleDoor","setIsDoubleDoor","door","setDoor","doorMaterial","doorWidth","doorHeight","theDoorDepth","doorPivot","doorOpening","doorFrame","setDoorFrame","frameMaterial","doorStopMaterial","gasketMaterial","hingeMaterial","glassMaterial","frameDepth","topThk","sidesThk","doorStopOffset","doorStopWidth","doorStopDepth","notchWidth","notchDepth","notchposition","gasketDepth","gasketWidth","secondDoorStopWidth","secondDoorStopDepth","secondDoorStopOffset","interiorFanlight","setInteriorFanlight","visible","height","material","exteriorFanlight","setExteriorFanlight","depth","occulus","setOcculus","infillVisible","x1","x2","y1","y2","frontCoverPanel","setFrontCoverPanel","width","backCoverPanel","setBackCoverPanel","frontDoorPlane","setFrontDoorPlane","backDoorPlane","setBackDoorPlane","glass","setGlass","defaultOptions","getFirstValidValue","values","isValid","val","hasValue","frameType","setFrameType","bodyType","setBodyType","exteriorFanlightType","setExteriorFanlightType","testDoorMaterial","setTestDoorMaterial","testFrameMaterial","setTestFrameMaterial","testGasketMaterial","setTestGasketMaterial","testInteriorFanlightMaterial","setTestInteriorFanlightMaterial","testExteriorFanlightMaterial","setTestExteriorFanlightMaterial","testOcculusInfillMaterial","setTestOcculusInfillMaterial","testGlassInfillMaterial","setTestGlassInfillMaterial","testDoorStopMaterial","setTestDoorStopMaterial","testHingeMaterial","setTestHingeMaterial","testFrontCoverPanelMaterial","setTestFrontCoverPanelMaterial","testBackCoverPanelMaterial","setTestBackCoverPanelMaterial","testFrontDoorPlaneMaterial","setTestFrontDoorPlaneMaterial","testBackDoorPlaneMaterial","setTestBackDoorPlaneMaterial","newPivotPosition","setNewPivotPosition","parseMessage","setParseMessage","type","text","useEffect","handleParseCpid","useCallback","cpidToParse","showMessage","arguments","length","setTimeout","trim","startsWith","parts","split","newConfig","fanlightVisible","fanlightType","interiorFanlightVisible","occulusVisible","currentIndex","fanlightPart","validFanlights","includes","prev","_objectSpread","concat","validSimpleFrameTypes","validBodyTypes","framePart","bodyPartRaw","frameFound","tempBody","replace","endsWith","i","newDoorDepth","newMaterial","newSettings","lookupKey","doorDepth","isMxCaf","newFrameSettings","_objectWithoutProperties","_excluded","prevOcculus","topThkValue","parseInt","exteriorFanlightHeight","newDoorHeight","prevDoor","sidesThkValue","numDoors","newDoorWidth","_jsx","Provider","value","useConfigurator","context","useContext","Error","isUrl","string","URL","_","createMaterialFromProp","THREE","MeshStandardMaterial","color","roughness","texture","textureLoader","load","wrapS","RepeatWrapping","wrapT","map","TextureLoader","bodyInt","bodyExt","frameAlu","frameWoodenInt","wdg","gasket","availableMaterials","D_SRF_DECOR_2","D_SRF_DECOR","D_PRF_COLOR","D_FR_SRF_DECOR","D_FR_SRF_DECOR_S2","D_FR_COLOR","D_GASKET","black","metal","metalness","darkgrey","grey","yellow","darkBrown","brown","transparent","opacity","aluminum","envMapIntensity","aluminumBrighter","aluminumExtraBrighter","silver","gold","diamond","test_material","placeholderMaterial","placeholderMaterialforFrames","StandardHandle","position","doorDepthM","roseRadius","roseThickness","handleRadius","handleLength","faceZ","connectorLength","cornerFrontZ","cornerBackZ","roseGapY","_jsxs","z","React","Fragment","castShadow","args","rotation","Math","PI","scale","MergedPlate","_ref2","plateMaterial","geometry","useMemo","leftHalf","BoxGeometry","translate","shape","Shape","radius","moveTo","lineTo","absarc","extrudeSettings","steps","bevelEnabled","ExtrudeGeometry","GlassHandle","_ref3","DoorHandle","_ref4","handleX","handleHeightM","isSingleGlass","handlePos","GlassHinge","_ref5","pivot","frameSideWidth","plateWidth","plateHeight","plateThickness","gasketThickness","pivotRadius","pivotHeight","sideMultiplier","plateOffsetX","holeRadius","holeSpacingX","receiveShadow","Geometry","useGroups","Base","Subtraction","DoorStopCuts","_ref6","stopWidth","stopDepth","stopPositionZ","centerZ","glassDepthOffset","setName","_Fragment","name","DoorModels","_ref7","doorName","doorMaterialName","frameMaterialName","gasketMaterialName","doorStopMaterialName","hingeMaterialName","interiorFanlightMaterialName","exteriorFanlightMaterialName","occulusInfillMaterialName","glassInfillMaterialName","frontCoverPanelMaterialName","backCoverPanelMaterialName","frontDoorPlaneMaterialName","backDoorPlaneMaterialName","pers","dynamicMaterials","key","Object","prototype","hasOwnProperty","call","interiorFanlightMaterial","exteriorFanlightMaterial","glassInfillMaterial","frontCoverPanelMaterial","backCoverPanelMaterial","initialDoorHeight","useRef","interiorFanlightHeightValue","exteriorFanlightHeightValue","exteriorFanlightDepthValue","architraveWidth","architraveDepth","interiorFanlightHeight","mainDoorHeight","doorWidthM","mainDoorHeightM","interiorFanlightHeightM","totalOpeningHeightM","frameDepthM","topFrameWidthM","sidesFrameWidthM","totalOpeningWidthM","exteriorFanlightHeightM","exteriorFanlightDepthM","doorStopWidthM","doorStopDepthM","architraveProfileM","architraveDepthM","gasketWidthM","gasketDepthM","doorStopOffsetValue","doorStopOffsetFromEdgeM","notchDepthValue","notchWidthValue","notchWidthM","notchDepthM","isOpeningIn","doorStopPositionZ","gasketZPosition","secondDoorStopWidthM","secondDoorStopDepthM","secondDoorStopPositionZ","secondGasketZPosition","doorCenterZ","gasketBackFaceZ","gasketFrontFaceZ","GlassPanelDepthM","exteriorFanlightZPosition","isOpen","setIsOpen","leftGlass_Z","rightGlass_Z","hingeZ","directionMultiplier","useSpring","config","mass","tension","friction","totalFrameWidth","totalFrameHeightM","current","yCenteringOffset","sideFrameCenterY","interiorFanlightYPosition","topFrameCenterY","topOfFrameY","exteriorFanlightYPosition","frontArchitraveZ","backArchitraveZ","sideArchitraveHeight","sideArchitraveCenterY","leftArchitraveX","rightArchitraveX","topArchitraveY","topArchitraveWidth","topGasketYPosition","leftGasketXPosition","rightGasketXPosition","secondTopGasketYPosition","secondLeftGasketXPosition","secondRightGasketXPosition","isGlassDoor","pivotNewPosition","numHinges","topMargin","bottomMargin","availableHeight","spacing","positions","push","secondTopMargin","top","secondTop","bottom","invisibleFrameTypes","doorInstances","x","side","DoubleSide","instance","DoorLeaf","xOffset","_ref8","occulusInfillMaterial","hingeBodyMaterial","frontDoorPlaneMaterial","backDoorPlaneMaterial","hingeAccentMaterial","initialDoorWidth","occulusX1","occulusX2","occulusY1","occulusY2","occulusInfillDepth","occulusX1M","occulusX2M","occulusY1M","occulusY2M","occulusInfillDepthM","frontGlassOffsetZ","backGlassOffsetZ","occulusWidthM","occulusHeightM","occulusPositionXM","occulusPositionYM","hingeSideX","doorOffsetZ","handleClick","doorYPosition","handleCenterYFromDoorBottom","safeHandleY","min","max","nonHingeSideX","plateHalfWidth","latchMarginM","hingeTotalHeightM","hingeRadiusM","capHeightM","separatorHeightM","barrelPartHeight","standardHingeYPositions","glassHingeYPositions","isStandardHingeVisible","dynamicFrontDoorPlaneMaterial","clone","needsUpdate","initialHeightM","initialWidthM","repeatY","repeatX","repeat","set","console","log","dynamicBackDoorPlaneMaterial","y","index","a","group","to","onClick","onPointerOver","document","body","style","cursor","onPointerOut","DoorConfigurator"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/lib/context/DoorContext.tsx","../src/lib/utils/materials.ts","../src/lib/components/DoorModels.tsx","../src/lib/components/DoorConfigurator.tsx"],"sourcesContent":["import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n} from \"react\";\n\nimport { availableMaterials } from \"../utils/materials\";\ntype MaterialName = keyof typeof availableMaterials;\n\n// --- Type Definitions to Match JSON Structure ---\n\ntype DoorType = {\n doorMaterial: string;\n doorWidth: number;\n doorHeight: number;\n theDoorDepth: number;\n doorPivot: string;\n doorOpening: string;\n};\n\ntype DoorFrameType = {\n frameMaterial: string;\n doorStopMaterial?: string;\n gasketMaterial: string;\n hingeMaterial: string;\n glassMaterial?: string;\n frameDepth: number;\n topThk: string;\n sidesThk: string;\n notchDepth: string;\n notchWidth: string;\n doorStopWidth: number;\n doorStopDepth: number;\n doorStopOffset: string;\n notchposition: number;\n gasketWidth: number;\n gasketDepth: number;\n secondDoorStopWidth: number;\n secondDoorStopDepth: number;\n secondDoorStopOffset: number;\n};\n\ntype InteriorFanlightType = {\n visible: boolean;\n height: number;\n material: string;\n};\n\ntype ExteriorFanlightType = {\n visible: boolean;\n height: number;\n depth: number;\n material: string;\n};\n\ntype OcculusType = {\n visible: boolean;\n infillVisible: boolean;\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n material: string;\n depth: number;\n};\n\ntype CoverPanelType = {\n visible: boolean;\n width: number;\n height: number;\n depth: number;\n material: string;\n};\n\ntype FrameAndDoorSettings = Partial<DoorFrameType> & { doorDepth?: number };\ntype GlassType = {\n visible: boolean;\n material: string;\n depth: number;\n};\n\ntype DoorPlaneType = {\n visible: boolean;\n material: string;\n};\n\ntype MaterialProps = {\n D_SRF_DECOR_2?: string;\n D_SRF_DECOR?: string;\n D_PRF_COLOR?: string;\n D_FR_SRF_DECOR?: string;\n D_FR_SRF_DECOR_S2?: string;\n D_FR_COLOR?: string;\n D_GASKET?: string;\n};\n\n// --- Main Context Type ---\ntype ConfiguratorContextType = {\n is2D: boolean;\n setIs2D: React.Dispatch<React.SetStateAction<boolean>>;\n isPlaneVisible: boolean;\n setIsPlaneVisible: React.Dispatch<React.SetStateAction<boolean>>;\n isFrameVisible: boolean;\n setIsFrameVisible: React.Dispatch<React.SetStateAction<boolean>>;\n cpid: string;\n setCpid: React.Dispatch<React.SetStateAction<string>>;\n door: DoorType;\n setDoor: React.Dispatch<React.SetStateAction<DoorType>>;\n doorFrame: DoorFrameType;\n setDoorFrame: React.Dispatch<React.SetStateAction<DoorFrameType>>;\n interiorFanlight: InteriorFanlightType;\n setInteriorFanlight: React.Dispatch<\n React.SetStateAction<InteriorFanlightType>\n >;\n exteriorFanlight: ExteriorFanlightType;\n setExteriorFanlight: React.Dispatch<\n React.SetStateAction<ExteriorFanlightType>\n >;\n exteriorFanlightType: string;\n setExteriorFanlightType: React.Dispatch<React.SetStateAction<string>>;\n occulus: OcculusType;\n setOcculus: React.Dispatch<React.SetStateAction<OcculusType>>;\n frontCoverPanel: CoverPanelType;\n setFrontCoverPanel: React.Dispatch<React.SetStateAction<CoverPanelType>>;\n backCoverPanel: CoverPanelType;\n setBackCoverPanel: React.Dispatch<React.SetStateAction<CoverPanelType>>;\n frontDoorPlane: DoorPlaneType;\n setFrontDoorPlane: React.Dispatch<React.SetStateAction<DoorPlaneType>>;\n backDoorPlane: DoorPlaneType;\n setBackDoorPlane: React.Dispatch<React.SetStateAction<DoorPlaneType>>;\n glass: GlassType;\n setGlass: React.Dispatch<React.SetStateAction<GlassType>>;\n frameType: string;\n setFrameType: React.Dispatch<React.SetStateAction<string>>;\n bodyType: string;\n setBodyType: React.Dispatch<React.SetStateAction<string>>;\n totalHeight: number;\n setTotalHeight: React.Dispatch<React.SetStateAction<number>>;\n totalWidth: number;\n setTotalWidth: React.Dispatch<React.SetStateAction<number>>;\n handleParseCpid: (cpidToParse: string) => void;\n // --- States for Test Materials ---\n testDoorMaterial: string;\n setTestDoorMaterial: React.Dispatch<React.SetStateAction<string>>;\n testFrameMaterial: string;\n setTestFrameMaterial: React.Dispatch<React.SetStateAction<string>>;\n testGasketMaterial: string;\n setTestGasketMaterial: React.Dispatch<React.SetStateAction<string>>;\n testInteriorFanlightMaterial: string;\n setTestInteriorFanlightMaterial: React.Dispatch<React.SetStateAction<string>>;\n testExteriorFanlightMaterial: string;\n setTestExteriorFanlightMaterial: React.Dispatch<React.SetStateAction<string>>;\n testOcculusInfillMaterial: string;\n setTestOcculusInfillMaterial: React.Dispatch<React.SetStateAction<string>>;\n testGlassInfillMaterial: string;\n setTestGlassInfillMaterial: React.Dispatch<React.SetStateAction<string>>;\n testDoorStopMaterial: string;\n setTestDoorStopMaterial: React.Dispatch<React.SetStateAction<string>>;\n testHingeMaterial: string;\n setTestHingeMaterial: React.Dispatch<React.SetStateAction<string>>;\n testFrontCoverPanelMaterial: string;\n setTestFrontCoverPanelMaterial: React.Dispatch<React.SetStateAction<string>>;\n testBackCoverPanelMaterial: string;\n setTestBackCoverPanelMaterial: React.Dispatch<React.SetStateAction<string>>;\n testFrontDoorPlaneMaterial: string;\n setTestFrontDoorPlaneMaterial: React.Dispatch<React.SetStateAction<string>>;\n testBackDoorPlaneMaterial: string;\n setTestBackDoorPlaneMaterial: React.Dispatch<React.SetStateAction<string>>;\n glassVisible: boolean;\n setGlassVisible: React.Dispatch<React.SetStateAction<boolean>>;\n glassDepth: number;\n setGlassDepth: React.Dispatch<React.SetStateAction<number>>;\n doorHeight: number;\n newPivotPosition: number;\n setNewPivotPosition: React.Dispatch<React.SetStateAction<number>>;\n isDoubleDoor: boolean;\n setIsDoubleDoor: React.Dispatch<React.SetStateAction<boolean>>;\n materials: MaterialProps;\n};\n\nconst ConfiguratorContext = createContext<ConfiguratorContextType | undefined>(\n undefined\n);\n\ntype ConfiguratorProviderProps = {\n children: React.ReactNode;\n initialIs2D?: boolean;\n initialMaterials?: MaterialProps;\n};\n\nexport const ConfiguratorProvider = ({\n children,\n initialIs2D = false,\n initialMaterials = {},\n}: ConfiguratorProviderProps) => {\n const [materials, setMaterials] = useState<MaterialProps>(initialMaterials);\n const [is2D, setIs2D] = useState<boolean>(initialIs2D);\n const [isPlaneVisible, setIsPlaneVisible] = useState<boolean>(false);\n const [isFrameVisible, setIsFrameVisible] = useState<boolean>(true);\n const [cpid, setCpid] = useState<string>(\"\");\n const [totalHeight, setTotalHeight] = useState<number>(2700);\n const [totalWidth, setTotalWidth] = useState<number>(974);\n const [glassVisible, setGlassVisible] = useState(false);\n const [glassDepth, setGlassDepth] = useState(8);\n const [isDoubleDoor, setIsDoubleDoor] = useState<boolean>(false);\n const [door, setDoor] = useState<DoorType>({\n doorMaterial: \"door_material\",\n doorWidth: 0,\n doorHeight: 0,\n theDoorDepth: 40,\n doorPivot: \"left\",\n doorOpening: \"out\",\n });\n const [doorFrame, setDoorFrame] = useState<DoorFrameType>({\n frameMaterial: \"doorFrame_material\",\n doorStopMaterial: \"doorStop_material\",\n gasketMaterial: \"gasket_material\",\n hingeMaterial: \"hinge_material\",\n glassMaterial: \"glass_material\",\n frameDepth: 103,\n topThk: \"20mm\",\n sidesThk: \"20mm\",\n doorStopOffset: \"30mm\",\n doorStopWidth: 20,\n doorStopDepth: 13,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n secondDoorStopWidth: 20,\n secondDoorStopDepth: 30,\n secondDoorStopOffset: 13,\n });\n const [interiorFanlight, setInteriorFanlight] =\n useState<InteriorFanlightType>({\n visible: false,\n height: 300,\n material: \"interiorFanlight_material\",\n });\n const [exteriorFanlight, setExteriorFanlight] =\n useState<ExteriorFanlightType>({\n visible: false,\n height: 300,\n depth: 60,\n material: \"exteriorFanlight_material\",\n });\n const [occulus, setOcculus] = useState<OcculusType>({\n visible: false,\n infillVisible: true,\n x1: 150,\n x2: 150,\n y1: 150,\n y2: 150,\n material: \"infill_material\",\n depth: 20,\n });\n const [frontCoverPanel, setFrontCoverPanel] = useState<CoverPanelType>({\n visible: false,\n width: 73,\n height: 2200,\n depth: 12,\n material: \"front_cover_material\",\n });\n const [backCoverPanel, setBackCoverPanel] = useState<CoverPanelType>({\n visible: false,\n width: 73,\n height: 2200,\n depth: 12,\n material: \"back_cover_material\",\n });\n const [frontDoorPlane, setFrontDoorPlane] = useState<DoorPlaneType>({\n visible: true,\n material: \"test_material\",\n });\n const [backDoorPlane, setBackDoorPlane] = useState<DoorPlaneType>({\n visible: true,\n material: \"test_material\",\n });\n const [glass, setGlass] = useState<GlassType>({\n visible: false,\n material: \"infill_material\",\n depth: 20,\n });\n\n const defaultOptions = [\"D_PRF_COLOR\", \"D_FR_SRF_DECOR\", \"D_FR_SRF_DECOR_S2\"];\n\n function getFirstValidValue(\n values: string[],\n isValid: (val: string) => boolean\n ) {\n for (const val of values) {\n if (isValid(val)) return val;\n }\n return \"\";\n }\n\n const hasValue = (val: string) =>\n val !== null && val !== undefined && val !== \"\";\n\n const [frameType, setFrameType] = useState<string>(\"AF20_40\");\n const [bodyType, setBodyType] = useState<string>(\"40\");\n const [exteriorFanlightType, setExteriorFanlightType] =\n useState<string>(\"WPFL\");\n const [testDoorMaterial, setTestDoorMaterial] = useState<string>(\"\");\n const [testFrameMaterial, setTestFrameMaterial] = useState<string>(\n getFirstValidValue(defaultOptions, hasValue)\n );\n const [testGasketMaterial, setTestGasketMaterial] =\n useState<string>(\"D_GASKET\");\n const [testInteriorFanlightMaterial, setTestInteriorFanlightMaterial] =\n useState<string>(\"D_SRF_DECOR\");\n const [testExteriorFanlightMaterial, setTestExteriorFanlightMaterial] =\n useState<string>(\"\");\n const [testOcculusInfillMaterial, setTestOcculusInfillMaterial] =\n useState<string>(\"\");\n const [testGlassInfillMaterial, setTestGlassInfillMaterial] =\n useState<string>(\"D_FR_COLOR\");\n const [testDoorStopMaterial, setTestDoorStopMaterial] = useState<string>(\n getFirstValidValue(defaultOptions, hasValue)\n );\n const [testHingeMaterial, setTestHingeMaterial] = useState<string>(\"\");\n const [testFrontCoverPanelMaterial, setTestFrontCoverPanelMaterial] =\n useState<string>(getFirstValidValue(defaultOptions, hasValue));\n const [testBackCoverPanelMaterial, setTestBackCoverPanelMaterial] =\n useState<string>(getFirstValidValue(defaultOptions, hasValue));\n const [testFrontDoorPlaneMaterial, setTestFrontDoorPlaneMaterial] =\n useState<string>(\"D_SRF_DECOR_2\");\n const [testBackDoorPlaneMaterial, setTestBackDoorPlaneMaterial] =\n useState<string>(\"D_SRF_DECOR\");\n const doorHeight = 0;\n const [newPivotPosition, setNewPivotPosition] = useState<number>(0);\n const [parseMessage, setParseMessage] = useState({ type: \"\", text: \"\" });\n\n useEffect(() => {\n setIs2D(initialIs2D);\n }, [initialIs2D]);\n\n useEffect(() => {\n if (initialMaterials) {\n setMaterials(initialMaterials);\n }\n }, [initialMaterials]);\n\n const handleParseCpid = useCallback(\n cpidToParse => {\n const showMessage = (text, type = \"error\") => {\n setParseMessage({ text, type });\n setTimeout(() => setParseMessage({ text: \"\", type: \"\" }), 4000);\n };\n\n if (!cpidToParse || !cpidToParse.trim().startsWith(\"P_\")) {\n showMessage(\"Invalid format: CPID must start with 'P_'.\");\n return;\n }\n\n const parts = cpidToParse.trim().split(\"_\");\n if (parts.length < 4) {\n showMessage(\"Invalid format: Not enough parts in CPID.\");\n return;\n }\n\n const newConfig = {\n fanlightVisible: false,\n fanlightType: \"WPFL\",\n interiorFanlightVisible: false,\n occulusVisible: false,\n frameType: \"\",\n bodyType: \"\",\n };\n let currentIndex = 1;\n\n // Door Type\n if (parts[currentIndex] === \"SD\") {\n setIsDoubleDoor(false);\n setTotalHeight(2700);\n setTotalWidth(974);\n currentIndex++;\n } else if (parts[currentIndex] === \"DD\") {\n setIsDoubleDoor(true);\n setTotalWidth(1802);\n currentIndex++;\n } else {\n showMessage(\"Unsupported Door Type: Only 'SD' or 'DD' is supported.\");\n return;\n }\n\n //Fanlight Type\n const fanlightPart = parts[currentIndex];\n const validFanlights = [\"WPFL\", \"ALDGFL\", \"ALSGFL\"];\n if (fanlightPart === \"FH\") {\n newConfig.fanlightVisible = false;\n currentIndex++;\n } else if (validFanlights.includes(fanlightPart)) {\n setExteriorFanlight(prev => ({\n ...prev,\n height: 300,\n }));\n newConfig.fanlightVisible = true;\n newConfig.fanlightType = fanlightPart;\n currentIndex++;\n } else {\n showMessage(`Invalid Fanlight Type: '${fanlightPart}'.`);\n return;\n }\n\n // Frame and Body Type\n const validSimpleFrameTypes = [\n \"AF20\",\n \"AF40\",\n \"WF\",\n \"MXF\",\n \"MXCAF\",\n \"NOF\",\n ];\n const validBodyTypes = [\n \"40\",\n \"50\",\n \"FLI\",\n \"100\",\n \"WDG100\",\n \"SG8\",\n \"SG10\",\n \"SG12\",\n ];\n\n let framePart = parts[currentIndex];\n let bodyPartRaw = parts[currentIndex + 1] || \"\";\n let frameFound = false;\n\n if (`${framePart}_${bodyPartRaw}` === \"WDGF_WDG100\") {\n newConfig.frameType = \"WDGF_WDG100\";\n newConfig.bodyType = \"WDG100\";\n currentIndex += 2;\n frameFound = true;\n } else if (validSimpleFrameTypes.includes(framePart)) {\n let tempBody = bodyPartRaw.replace(\"OCC\", \"\");\n\n if (validBodyTypes.includes(tempBody)) {\n newConfig.frameType =\n framePart === \"NOF\" ? \"NOF\" : `${framePart}_${tempBody}`;\n\n newConfig.bodyType = tempBody;\n\n if (bodyPartRaw.endsWith(\"OCC\")) {\n newConfig.occulusVisible = true;\n setOcculus(prev => ({\n ...prev,\n x1: 150,\n x2: 150,\n y1: 150,\n y2: 150,\n }));\n }\n currentIndex += 2;\n frameFound = true;\n }\n }\n\n if (!frameFound) {\n showMessage(\n `Invalid Frame/Body combination starting with '${framePart}'.`\n );\n return;\n }\n\n for (let i = currentIndex; i < parts.length; i++) {\n if (parts[i] === \"IFL\") {\n setInteriorFanlight(prev => ({\n ...prev,\n height: 300,\n }));\n newConfig.interiorFanlightVisible = true;\n } else if (parts[i] === \"OCC\") {\n newConfig.occulusVisible = true;\n }\n }\n\n // Apply final configuration\n setFrameType(newConfig.frameType);\n setBodyType(newConfig.bodyType);\n setExteriorFanlight(prev => ({\n ...prev,\n visible: newConfig.fanlightVisible,\n }));\n if (newConfig.fanlightVisible) {\n setExteriorFanlightType(newConfig.fanlightType);\n }\n setInteriorFanlight(prev => ({\n ...prev,\n visible: newConfig.interiorFanlightVisible,\n }));\n setOcculus(prev => ({ ...prev, visible: newConfig.occulusVisible }));\n setCpid(cpidToParse);\n\n showMessage(\"Configuration Applied!\", \"success\");\n },\n [\n setCpid,\n setBodyType,\n setExteriorFanlight,\n setExteriorFanlightType,\n setFrameType,\n setInteriorFanlight,\n setOcculus,\n setIsDoubleDoor,\n setTotalWidth,\n ]\n );\n\n // --- BodyType Effect ---\n useEffect(() => {\n let newDoorDepth = 40;\n let newMaterial = \"brown\";\n\n switch (bodyType) {\n case \"50\":\n newDoorDepth = 50;\n break;\n case \"SG8\":\n newDoorDepth = 8;\n newMaterial = \"glass\";\n break;\n case \"SG10\":\n newDoorDepth = 10;\n newMaterial = \"glass\";\n break;\n case \"SG12\":\n newDoorDepth = 12;\n newMaterial = \"glass\";\n break;\n }\n\n setDoor(prev => ({ ...prev, theDoorDepth: newDoorDepth }));\n setTestDoorMaterial(newMaterial);\n }, [bodyType]);\n\n // --- FrameType Effect ---\n useEffect(() => {\n setIsFrameVisible(frameType !== \"NOF\");\n\n setGlassVisible(false);\n\n let newSettings: FrameAndDoorSettings = {};\n\n let lookupKey = frameType;\n if (frameType.startsWith(\"AF20_SG\")) {\n lookupKey = \"AF20_40\";\n } else if (frameType.startsWith(\"AF40_SG\")) {\n lookupKey = \"AF40_40\";\n }\n\n switch (lookupKey) {\n case \"NOF\":\n newSettings = {\n topThk: \"0mm\",\n sidesThk: \"0mm\",\n frameDepth: 0,\n };\n break;\n case \"AF20_40\":\n newSettings = {\n frameDepth: 103,\n topThk: \"20mm\",\n sidesThk: \"20mm\",\n doorStopOffset: \"42mm\",\n doorStopWidth: 20,\n doorStopDepth: 13,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n if (frameType === \"AF20_40\") {\n newSettings.doorDepth = 40;\n }\n break;\n case \"AF20_50\":\n newSettings = {\n doorDepth: 50,\n frameDepth: 103,\n topThk: \"20mm\",\n sidesThk: \"20mm\",\n doorStopOffset: \"30mm\",\n doorStopWidth: 20,\n doorStopDepth: 13,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"AF40_40\":\n newSettings = {\n frameDepth: 103,\n topThk: \"40mm\",\n sidesThk: \"40mm\",\n doorStopOffset: \"42mm\",\n doorStopWidth: 20,\n doorStopDepth: 13,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n if (frameType === \"AF40_40\") {\n newSettings.doorDepth = 40;\n }\n break;\n case \"AF40_50\":\n newSettings = {\n doorDepth: 50,\n frameDepth: 103,\n topThk: \"40mm\",\n sidesThk: \"40mm\",\n doorStopOffset: \"30mm\",\n doorStopWidth: 20,\n doorStopDepth: 13,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"WF_40\":\n newSettings = {\n doorDepth: 39.6,\n frameDepth: 103,\n topThk: \"31.6mm\",\n sidesThk: \"31.6mm\",\n doorStopOffset: \"0mm\",\n doorStopWidth: 16.4,\n doorStopDepth: 58.4,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"WF_50\":\n newSettings = {\n doorDepth: 51.6,\n frameDepth: 103,\n topThk: \"31.6mm\",\n sidesThk: \"31.6mm\",\n doorStopOffset: \"0mm\",\n doorStopWidth: 16,\n doorStopDepth: 46.4,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"WF_100\":\n newSettings = {\n doorDepth: 102,\n frameDepth: 102,\n topThk: \"52mm\",\n sidesThk: \"52mm\",\n doorStopOffset: \"17.6mm\",\n doorStopWidth: 16.4,\n doorStopDepth: 44.8,\n notchWidth: \"16mm\",\n notchDepth: \"66.5mm\",\n notchposition: 0.02,\n gasketDepth: 5,\n gasketWidth: 5,\n secondDoorStopWidth: 29,\n secondDoorStopDepth: 17.6,\n secondDoorStopOffset: 0,\n };\n break;\n case \"WF_FLI\":\n newSettings = {\n doorDepth: 51,\n frameDepth: 102,\n topThk: \"52mm\",\n sidesThk: \"52mm\",\n doorStopOffset: \"17.4mm\",\n doorStopWidth: 16.4,\n doorStopDepth: 34,\n notchWidth: \"14mm\",\n notchDepth: \"66mm\",\n notchposition: 0.02,\n gasketDepth: 5,\n gasketWidth: 5,\n secondDoorStopWidth: 29,\n secondDoorStopDepth: 17.6,\n secondDoorStopOffset: 0,\n };\n break;\n case \"WDGF_WDG100\":\n newSettings = {\n doorDepth: 86,\n frameDepth: 86,\n topThk: \"50mm\",\n sidesThk: \"50mm\",\n doorStopOffset: \"34mm\",\n doorStopWidth: 13,\n doorStopDepth: 30,\n notchWidth: \"14mm\",\n notchDepth: \"66mm\",\n notchposition: 0.02,\n gasketDepth: 4.5,\n gasketWidth: 5,\n secondDoorStopWidth: 23,\n secondDoorStopDepth: 30,\n secondDoorStopOffset: 13,\n };\n setGlassVisible(true);\n break;\n case \"MXF_40\":\n newSettings = {\n doorDepth: 38,\n frameDepth: 103,\n topThk: \"18mm\",\n sidesThk: \"18mm\",\n doorStopOffset: \"45mm\",\n doorStopWidth: 15,\n doorStopDepth: 15,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"MXF_50\":\n newSettings = {\n doorDepth: 50,\n frameDepth: 103,\n topThk: \"18.2mm\",\n sidesThk: \"18.2mm\",\n doorStopOffset: \"33mm\",\n doorStopWidth: 15,\n doorStopDepth: 15,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"MXCAF_40\":\n newSettings = {\n doorDepth: 38,\n frameDepth: 103,\n topThk: \"18mm\",\n sidesThk: \"18mm\",\n doorStopOffset: \"45mm\",\n doorStopWidth: 15,\n doorStopDepth: 15,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n case \"MXCAF_50\":\n newSettings = {\n doorDepth: 50,\n frameDepth: 103,\n topThk: \"18.2mm\",\n sidesThk: \"18.2mm\",\n doorStopOffset: \"33mm\",\n doorStopWidth: 15,\n doorStopDepth: 15,\n notchWidth: \"20mm\",\n notchDepth: \"40mm\",\n notchposition: 0.01,\n gasketDepth: 5,\n gasketWidth: 5,\n };\n break;\n default:\n break;\n }\n\n const isMxCaf = frameType.startsWith(\"MXCAF\");\n setFrontCoverPanel(prev => ({ ...prev, visible: isMxCaf }));\n setBackCoverPanel(prev => ({ ...prev, visible: isMxCaf }));\n\n const { doorDepth, ...newFrameSettings } = newSettings;\n setDoorFrame(prev => ({ ...prev, ...newFrameSettings }));\n\n if (doorDepth !== undefined) {\n setDoor(prev => ({ ...prev, theDoorDepth: doorDepth }));\n }\n }, [frameType]);\n\n // --- Exterior Fanlight Logic ---\n useEffect(() => {\n if (!exteriorFanlight.visible) return;\n switch (exteriorFanlightType) {\n case \"WPFL\":\n setExteriorFanlight(prev => ({ ...prev, depth: doorFrame.frameDepth }));\n setTestExteriorFanlightMaterial(\"metal\");\n break;\n case \"ALDGFL\":\n setExteriorFanlight(prev => ({ ...prev, depth: doorFrame.frameDepth }));\n setTestExteriorFanlightMaterial(\"glass\");\n break;\n case \"ALSGFL\":\n setExteriorFanlight(prev => ({ ...prev, depth: 40 }));\n setTestExteriorFanlightMaterial(\"glass\");\n break;\n default:\n break;\n }\n }, [\n exteriorFanlight.visible,\n exteriorFanlightType,\n doorFrame.frameDepth,\n setTestExteriorFanlightMaterial,\n setExteriorFanlight,\n ]);\n\n useEffect(() => {\n setOcculus(prevOcculus => ({\n ...prevOcculus,\n depth: door.theDoorDepth,\n }));\n }, [door.theDoorDepth]);\n\n useEffect(() => {\n const topThkValue = parseInt(doorFrame.topThk) || 0;\n const exteriorFanlightHeight = exteriorFanlight.visible\n ? exteriorFanlight.height\n : 0;\n const newDoorHeight = totalHeight - topThkValue - exteriorFanlightHeight;\n\n setDoor(prevDoor => ({\n ...prevDoor,\n doorHeight: newDoorHeight > 0 ? newDoorHeight : 0,\n }));\n }, [\n totalHeight,\n doorFrame.topThk,\n exteriorFanlight.visible,\n exteriorFanlight.height,\n ]);\n\n useEffect(() => {\n const sidesThkValue = parseInt(doorFrame.sidesThk) || 0;\n const numDoors = isDoubleDoor ? 2 : 1;\n const newDoorWidth = (totalWidth - sidesThkValue * 2) / numDoors;\n setDoor(prevDoor => ({\n ...prevDoor,\n doorWidth: newDoorWidth > 0 ? newDoorWidth : 0,\n }));\n }, [totalWidth, doorFrame.sidesThk, isDoubleDoor]);\n\n return (\n <ConfiguratorContext.Provider\n value={{\n materials,\n is2D,\n setIs2D,\n isPlaneVisible,\n setIsPlaneVisible,\n isFrameVisible,\n setIsFrameVisible,\n cpid,\n setCpid,\n door,\n setDoor,\n doorFrame,\n setDoorFrame,\n interiorFanlight,\n setInteriorFanlight,\n exteriorFanlight,\n setExteriorFanlight,\n occulus,\n setOcculus,\n frontCoverPanel,\n setFrontCoverPanel,\n backCoverPanel,\n setBackCoverPanel,\n frontDoorPlane,\n setFrontDoorPlane,\n backDoorPlane,\n setBackDoorPlane,\n glass,\n setGlass,\n frameType,\n setFrameType,\n bodyType,\n setBodyType,\n totalHeight,\n setTotalHeight,\n totalWidth,\n setTotalWidth,\n exteriorFanlightType,\n setExteriorFanlightType,\n testDoorMaterial,\n setTestDoorMaterial,\n testFrameMaterial,\n setTestFrameMaterial,\n testGasketMaterial,\n setTestGasketMaterial,\n testInteriorFanlightMaterial,\n setTestInteriorFanlightMaterial,\n testExteriorFanlightMaterial,\n setTestExteriorFanlightMaterial,\n testOcculusInfillMaterial,\n setTestOcculusInfillMaterial,\n testGlassInfillMaterial,\n setTestGlassInfillMaterial,\n testDoorStopMaterial,\n setTestDoorStopMaterial,\n testHingeMaterial,\n setTestHingeMaterial,\n testFrontCoverPanelMaterial,\n setTestFrontCoverPanelMaterial,\n testBackCoverPanelMaterial,\n setTestBackCoverPanelMaterial,\n testFrontDoorPlaneMaterial,\n setTestFrontDoorPlaneMaterial,\n testBackDoorPlaneMaterial,\n setTestBackDoorPlaneMaterial,\n glassVisible,\n setGlassVisible,\n glassDepth,\n setGlassDepth,\n handleParseCpid,\n newPivotPosition,\n setNewPivotPosition,\n doorHeight,\n isDoubleDoor,\n setIsDoubleDoor,\n }}\n >\n {children}\n </ConfiguratorContext.Provider>\n );\n};\n\nexport const useConfigurator = () => {\n const context = useContext(ConfiguratorContext);\n if (!context) {\n throw new Error(\n \"useConfigurator must be used within a ConfiguratorProvider\"\n );\n }\n return context;\n};\n","import * as THREE from \"three\";\n\n// Keep the textureLoader instance\nconst textureLoader = new THREE.TextureLoader();\n\n// This is your new core logic. It's self-contained.\nconst isUrl = (string: string) => {\n try {\n new URL(string);\n return true;\n } catch (_) {\n return false;\n }\n};\n\nexport const createMaterialFromProp = (\n value: string | undefined\n): THREE.MeshStandardMaterial | null => {\n if (!value) return null;\n\n // Handle HEX colors\n if (value.startsWith(\"#\")) {\n return new THREE.MeshStandardMaterial({ color: value, roughness: 0.8 });\n }\n\n // Handle URLs\n if (isUrl(value)) {\n const texture = textureLoader.load(value);\n texture.wrapS = THREE.RepeatWrapping;\n texture.wrapT = THREE.RepeatWrapping;\n return new THREE.MeshStandardMaterial({ map: texture, roughness: 0.8 });\n }\n\n // It's good practice to return null if the format is not recognized.\n return null;\n};\n\n// --- REMOVED THE ENTIRE `availableMaterials` OBJECT ---\n// It is no longer needed.\n\n// Keep placeholder materials as a fallback if a material prop isn't provided\nexport const placeholderMaterial = new THREE.MeshStandardMaterial({\n color: \"#cccccc\", // A neutral grey\n roughness: 0.8,\n});\n\nexport const placeholderMaterialforFrames = new THREE.MeshStandardMaterial({\n color: \"#555555\", // A darker grey for frames\n roughness: 0.8,\n});\n","import React, { useState, useMemo, useEffect, useRef } from \"react\";\nimport { Geometry, Base, Subtraction, Addition } from \"@react-three/csg\";\nimport { useConfigurator } from \"../context/DoorContext\";\nimport { useSpring, a } from \"@react-spring/three\";\nimport * as THREE from \"three\";\nimport {\n createMaterialFromProp,\n placeholderMaterial,\n placeholderMaterialforFrames,\n} from \"../utils/materials\";\n\nexport const availableMaterials = {\n black: new THREE.MeshStandardMaterial({ color: \"#000000\" }),\n aluminum: new THREE.MeshStandardMaterial({\n color: \"#abb0aa\",\n metalness: 0.8,\n roughness: 0.5,\n envMapIntensity: 1.2,\n }),\n\n aluminumBrighter: new THREE.MeshStandardMaterial({\n color: \"#cdcdcd\",\n metalness: 0.8,\n roughness: 0.5,\n envMapIntensity: 1.2,\n }),\n\n aluminumExtraBrighter: new THREE.MeshStandardMaterial({\n color: \"#ececec\",\n metalness: 0.8,\n roughness: 0.5,\n envMapIntensity: 1.2,\n }),\n};\n\n// Custom hook for door handle calculations\nfunction StandardHandle({\n position,\n doorDepthM,\n doorPivot,\n frameType, // 👈\n}: {\n position: [number, number, number];\n doorDepthM: number;\n doorPivot: \"left\" | \"right\";\n frameType: string;\n}) {\n // --- Base Dimensions ---\n const roseRadius = 0.035;\n\n // --- Thickness ---\n // default 5mm, but 8mm + 1–2mm if WDG frame\n const roseThickness =\n frameType === \"WDGF_WDG100\"\n ? 0.008 + 0.0015 // average: 9.5mm\n : 0.005; // 5mm default\n\n const handleRadius = 0.015;\n const handleLength = 0.2;\n\n // face offset based on thickness\n const faceZ = doorDepthM / 2 + roseThickness / 2;\n const connectorLength = handleLength / 3;\n\n const cornerFrontZ = faceZ + roseThickness + connectorLength;\n const cornerBackZ = -faceZ - roseThickness - connectorLength;\n const roseGapY = 0.07;\n\n return (\n <group position={position}>\n {/* Roses + keyholes */}\n {[faceZ, -faceZ].map((z, i) => (\n <React.Fragment key={i}>\n {frameType === \"WDGF_WDG100\" ? (\n // --- Capsule rose ---\n <group position-z={z}>\n {/* Center rectangle */}\n <mesh material={availableMaterials.aluminum} castShadow>\n <boxGeometry\n args={[roseRadius * 2, roseRadius * 2, roseThickness]}\n />\n </mesh>\n {/* Top rounded end */}\n <mesh\n position-y={roseRadius}\n rotation={[Math.PI / 2, Math.PI / 2, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[\n roseRadius,\n roseRadius,\n roseThickness,\n 32,\n 1,\n false,\n 0,\n Math.PI,\n ]}\n />\n </mesh>\n {/* Bottom rounded end */}\n <mesh\n position-y={-roseRadius}\n rotation={[-Math.PI / 2, Math.PI / 2, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[\n roseRadius,\n roseRadius,\n roseThickness,\n 32,\n 1,\n false,\n 0,\n Math.PI,\n ]}\n />\n </mesh>\n </group>\n ) : (\n // --- Round rose ---\n <mesh\n rotation={[Math.PI / 2, 0, 0]}\n position-z={z}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[roseRadius, roseRadius, roseThickness, 48]}\n />\n </mesh>\n )}\n\n {frameType === \"WDGF_WDG100\" ? (\n <group position-z={z} position-y={-(0.08 + roseGapY)}>\n {/* Center rectangle */}\n <mesh material={availableMaterials.aluminum} castShadow>\n <boxGeometry\n args={[\n (roseRadius - 0.008) * 2,\n (roseRadius - 0.008) * 2,\n roseThickness,\n ]}\n />\n </mesh>\n\n {/* Top rounded end */}\n <mesh\n position-y={roseRadius - 0.008}\n rotation={[Math.PI / 2, Math.PI / 2, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[\n roseRadius - 0.008,\n roseRadius - 0.008,\n roseThickness,\n 32,\n 1,\n false,\n 0,\n Math.PI,\n ]}\n />\n </mesh>\n\n {/* Bottom rounded end */}\n <mesh\n position-y={-(roseRadius - 0.008)}\n rotation={[-Math.PI / 2, Math.PI / 2, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[\n roseRadius - 0.008,\n roseRadius - 0.008,\n roseThickness,\n 32,\n 1,\n false,\n 0,\n Math.PI,\n ]}\n />\n </mesh>\n </group>\n ) : (\n <mesh\n rotation={[Math.PI / 2, 0, 0]}\n position-z={z}\n position-y={-(0.08 + roseGapY)}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[roseRadius, roseRadius, roseThickness, 48]}\n />\n </mesh>\n )}\n\n <group\n position={[\n 0,\n -(0.08 + roseGapY), // 👈 same Y as small rose\n z + (z > 0 ? roseThickness : -roseThickness), // 👈 accounts for thickness\n ]}\n castShadow\n >\n <mesh\n rotation={[Math.PI / 2, 0, 0]}\n position={[0, 0.0075, 0]}\n material={availableMaterials.aluminumBrighter}\n >\n <cylinderGeometry args={[0.01, 0.01, roseThickness, 32]} />\n </mesh>\n <mesh\n position={[0, -0.0075, 0]}\n material={availableMaterials.aluminumBrighter}\n >\n <boxGeometry args={[0.01, 0.015, roseThickness]} />\n </mesh>\n </group>\n </React.Fragment>\n ))}\n\n {/* Handles (same as before)… */}\n <group scale={[doorPivot === \"left\" ? -1 : 1, 1, 1]}>\n {/* Front handle */}\n <group position={[0, 0, -0.01]}>\n <mesh\n position={[0, 0, faceZ + roseThickness + connectorLength / 2]}\n rotation={[Math.PI / 2, 0, 0]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, connectorLength, 48]}\n />\n </mesh>\n <mesh\n position={[0, 0, cornerFrontZ]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <sphereGeometry args={[handleRadius, 32, 32]} />\n </mesh>\n <mesh\n position={[handleLength / 2, 0, cornerFrontZ]}\n rotation={[0, 0, Math.PI / 2]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, handleLength, 48]}\n />\n </mesh>\n </group>\n\n {/* Back handle */}\n <group position={[0, 0, 0.01]}>\n <mesh\n position={[0, 0, -faceZ - roseThickness - connectorLength / 2]}\n rotation={[Math.PI / 2, 0, 0]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, connectorLength, 48]}\n />\n </mesh>\n <mesh\n position={[0, 0, cornerBackZ]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <sphereGeometry args={[handleRadius, 32, 32]} />\n </mesh>\n <mesh\n position={[handleLength / 2, 0, cornerBackZ]}\n rotation={[0, 0, Math.PI / 2]}\n castShadow\n material={availableMaterials.aluminum}\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, handleLength, 48]}\n />\n </mesh>\n </group>\n </group>\n </group>\n );\n}\n\nconst MergedPlate = ({ plateMaterial, roseThickness, faceZ }) => {\n const geometry = useMemo(() => {\n // Left half - sharp edges\n const leftHalf = new THREE.BoxGeometry(0.05, 0.24, roseThickness);\n leftHalf.translate(-0.025, 0, 0); // Center the left half\n\n const shape = new THREE.Shape();\n\n const width = 0.1;\n const height = 0.24;\n const radius = 0.01;\n\n shape.moveTo(-width / 2, -height / 2);\n shape.lineTo(-width / 2, height / 2);\n shape.lineTo(width / 2 - radius, height / 2);\n shape.absarc(\n width / 2 - radius,\n height / 2 - radius,\n radius,\n Math.PI / 2,\n 0,\n true\n );\n shape.lineTo(width / 2, -height / 2 + radius);\n shape.absarc(\n width / 2 - radius,\n -height / 2 + radius,\n radius,\n 0,\n -Math.PI / 2,\n true\n );\n shape.lineTo(-width / 2, -height / 2);\n\n const extrudeSettings = {\n steps: 2,\n depth: roseThickness,\n bevelEnabled: false,\n };\n\n return new THREE.ExtrudeGeometry(shape, extrudeSettings);\n }, [roseThickness]);\n\n return (\n <group position-z={faceZ}>\n <mesh geometry={geometry} material={plateMaterial} castShadow />\n </group>\n );\n};\n\nfunction GlassHandle({\n position,\n doorDepthM,\n doorPivot,\n}: {\n position: [number, number, number];\n doorDepthM: number;\n doorPivot: \"left\" | \"right\";\n}) {\n // --- Dimensions ---\n const roseRadius = 0.035;\n const roseThickness = 0.005;\n const handleRadius = 0.015;\n const handleLength = 0.2;\n const faceZ = doorDepthM / 2 + roseThickness / 2;\n const connectorLength = handleLength / 3;\n const cornerFrontZ = faceZ + roseThickness + connectorLength;\n const cornerBackZ = -faceZ - roseThickness - connectorLength;\n return (\n <group position={position}>\n {/* Backplate/Roses (both sides of glass door) */}\n {[faceZ, -faceZ].map((z, i) => (\n <React.Fragment key={i}>\n {/* Rose disc */}\n <mesh\n rotation={[Math.PI / 2, 0, 0]}\n position-z={z + (z > 0 ? roseThickness : -roseThickness) + 0.002}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[roseRadius, roseRadius, roseThickness, 48]}\n />\n </mesh>\n\n {/* Keyhole shape (using r3f CSG instead of manual merge) */}\n <mesh\n position={[0, -0.08, z + (z > 0 ? roseThickness : -roseThickness)]}\n castShadow\n >\n {/* Circular part (rotated 90° on X) */}\n <mesh\n rotation={[Math.PI / 2, 0, 0]}\n position={[0, 0.0075, 0]}\n material={availableMaterials.aluminum}\n >\n <cylinderGeometry args={[0.01, 0.01, roseThickness, 32]} />\n </mesh>\n\n {/* Rectangular part (placed just below cylinder) */}\n <mesh\n position={[0, -0.0075, 0]}\n material={availableMaterials.aluminum}\n >\n <boxGeometry args={[0.01, 0.015, roseThickness]} />\n </mesh>\n </mesh>\n </React.Fragment>\n ))}\n\n {/* Handle rods */}\n <group scale-x={doorPivot === \"left\" ? -1 : 1}>\n {[faceZ, -faceZ].map((z, i) => (\n <MergedPlate\n key={`plate-${i}`}\n faceZ={z}\n plateMaterial={availableMaterials.aluminumExtraBrighter}\n roseThickness={roseThickness}\n />\n ))}\n {/* Front handle */}\n <group>\n {/* Horizontal cylinder */}\n <mesh\n position={[handleLength / 2, 0, faceZ + connectorLength]}\n rotation={[0, 0, Math.PI / 2]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, handleLength, 48]}\n />\n </mesh>\n {/* Vertical cylinder */}\n <mesh\n position={[0, 0, faceZ + connectorLength / 2]}\n rotation={[Math.PI / 2, 0, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, connectorLength, 48]}\n />\n </mesh>\n {/* Corner sphere for radius effect */}\n <mesh\n position={[0, 0, faceZ + connectorLength]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <sphereGeometry args={[handleRadius, 32, 32]} />\n </mesh>\n </group>\n\n {/* Back handle */}\n <group>\n {/* Horizontal cylinder */}\n <mesh\n position={[handleLength / 2, 0, -(faceZ + connectorLength)]}\n rotation={[0, 0, Math.PI / 2]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, handleLength, 48]}\n />\n </mesh>\n {/* Vertical cylinder */}\n <mesh\n position={[0, 0, -(faceZ + connectorLength / 2)]}\n rotation={[Math.PI / 2, 0, 0]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <cylinderGeometry\n args={[handleRadius, handleRadius, connectorLength, 48]}\n />\n </mesh>\n {/* Corner sphere for radius effect */}\n <mesh\n position={[0, 0, -(faceZ + connectorLength)]}\n material={availableMaterials.aluminum}\n castShadow\n >\n <sphereGeometry args={[handleRadius, 32, 32]} />\n </mesh>\n </group>\n </group>\n </group>\n );\n}\n\nfunction DoorHandle({\n bodyType,\n handleX,\n handleHeightM,\n doorDepthM,\n doorPivot,\n}: {\n bodyType: string;\n handleX: number;\n handleHeightM: number;\n doorDepthM: number;\n doorPivot: \"left\" | \"right\";\n}) {\n const isSingleGlass = [\"SG8\", \"SG10\", \"SG12\"].includes(bodyType);\n const handlePos: [number, number, number] = [handleX, handleHeightM, 0];\n const frameType = useConfigurator().frameType;\n return isSingleGlass ? (\n <GlassHandle\n position={[handleX, handleHeightM, -0.0024]}\n doorDepthM={doorDepthM}\n doorPivot={doorPivot}\n />\n ) : (\n <StandardHandle\n position={handlePos}\n doorDepthM={doorDepthM}\n doorPivot={doorPivot}\n frameType={frameType}\n />\n );\n}\n\nfunction GlassHinge({\n position,\n pivot,\n frameSideWidth,\n doorDepthM,\n material,\n gasketMaterial,\n}) {\n const plateWidth = 130 / 1000;\n const plateHeight = 55 / 1000;\n const plateThickness = 8 / 1000;\n const gasketThickness = 1 / 1000;\n const pivotRadius = 10 / 1000;\n const pivotHeight = plateHeight;\n\n const sideMultiplier = pivot === \"left\" ? 1 : -1;\n\n const plateOffsetX = sideMultiplier * (plateWidth / 2 + frameSideWidth);\n\n const holeRadius = 10 / 1000;\n const holeSpacingX = 45 / 1000;\n\n return (\n <group position={position}>\n <mesh material={material} castShadow receiveShadow position-x={0.01}>\n <cylinderGeometry args={[pivotRadius, pivotRadius, pivotHeight, 32]} />\n </mesh>\n\n <group position-x={plateOffsetX}>\n {/* Back Plate */}\n <mesh\n position-z={-(doorDepthM / 2) - plateThickness / 2 - gasketThickness}\n material={material}\n castShadow\n >\n <boxGeometry args={[plateWidth, plateHeight, plateThickness]} />\n </mesh>\n {/* Back Gasket */}\n <mesh\n position-z={-(doorDepthM / 2) - gasketThickness / 2}\n material={gasketMaterial}\n castShadow\n >\n <boxGeometry args={[plateWidth, plateHeight, gasketThickness]} />\n </mesh>\n {/* Front Plate with Holes */}\n <mesh\n position-z={doorDepthM / 2 + plateThickness / 2 + gasketThickness}\n castShadow\n >\n <Geometry useGroups>\n <Base material={material}>\n <boxGeometry args={[plateWidth, plateHeight, plateThickness]} />\n </Base>\n {/* Left Hole */}\n <Subtraction\n position={[-sideMultiplier * (holeSpacingX / 2), 0, 0]}\n rotation={[Math.PI / 2, 0, 0]}\n >\n <cylinderGeometry\n args={[holeRadius, holeRadius, plateThickness + 0.01, 32]}\n />\n </Subtraction>\n {/* Right Hole */}\n <Subtraction\n position={[sideMultiplier * (holeSpacingX / 2), 0, 0]}\n rotation={[Math.PI / 2, 0, 0]}\n >\n <cylinderGeometry\n args={[holeRadius, holeRadius, plateThickness + 0.01, 32]}\n />\n </Subtraction>\n </Geometry>\n </mesh>\n\n {/* Front Gasket */}\n <mesh\n position-z={doorDepthM / 2 + gasketThickness / 2}\n material={gasketMaterial}\n castShadow\n >\n <boxGeometry args={[plateWidth, plateHeight, gasketThickness]} />\n </mesh>\n </group>\n </group>\n );\n}\n\nfunction DoorStopCuts({\n visible,\n width,\n height,\n stopWidth,\n stopDepth,\n stopPositionZ,\n centerZ,\n glassDepthOffset = 0,\n material,\n setName,\n}: DoorStopCutsProps) {\n if (!visible) return null;\n\n return (\n <>\n {/* Top cut only */}\n <Subtraction\n name={`cut-top-${setName}`}\n material={material}\n position={[\n 0,\n height / 2 - stopWidth / 2 + 0.0001,\n stopPositionZ - centerZ,\n ]}\n >\n <boxGeometry args={[width + 0.01, stopWidth, stopDepth + 0.01]} />\n </Subtraction>\n\n {/* Left cut */}\n <Subtraction\n name={`cut-left-${setName}`}\n material={material}\n position={[\n -width / 2 + stopWidth / 2 - 0.0001,\n 0,\n stopPositionZ - centerZ,\n ]}\n >\n <boxGeometry args={[stopWidth, height + 0.01, stopDepth + 0.01]} />\n </Subtraction>\n\n {/* Right cut */}\n <Subtraction\n name={`cut-right-${setName}`}\n material={material}\n position={[\n width / 2 - stopWidth / 2 + 0.0001,\n 0,\n stopPositionZ - centerZ,\n ]}\n >\n <boxGeometry args={[stopWidth, height + 0.01, stopDepth + 0.01]} />\n </Subtraction>\n </>\n );\n}\n\ntype DoorModelsProps = {\n doorName?: string;\n};\n\ntype DoorStopCutsProps = {\n visible: boolean;\n width: number;\n height: number;\n stopWidth: number;\n stopDepth: number;\n stopPositionZ: number;\n centerZ: number;\n glassDepthOffset?: number;\n material: THREE.Material;\n setName: string;\n};\n\nfunction DoorModels({ doorName }: DoorModelsProps) {\n const {\n is2D,\n totalWidth,\n totalHeight,\n isPlaneVisible,\n isFrameVisible,\n door,\n doorFrame,\n interiorFanlight,\n exteriorFanlight,\n occulus,\n glass,\n frontCoverPanel,\n backCoverPanel,\n frontDoorPlane,\n backDoorPlane,\n frameType,\n bodyType,\n exteriorFanlightType,\n testDoorMaterial,\n testFrameMaterial,\n testGasketMaterial,\n testInteriorFanlightMaterial,\n testExteriorFanlightMaterial,\n testOcculusInfillMaterial,\n testGlassInfillMaterial,\n testDoorStopMaterial,\n testHingeMaterial,\n glassVisible,\n testFrontCoverPanelMaterial,\n testBackCoverPanelMaterial,\n testFrontDoorPlaneMaterial,\n testBackDoorPlaneMaterial,\n glassDepth,\n cpid,\n handleParseCpid,\n isDoubleDoor,\n materials,\n } = useConfigurator();\n\n useEffect(() => {\n if (doorName) {\n handleParseCpid(doorName);\n }\n }, [doorName, handleParseCpid]);\n\n // here i get material names from context\n const { doorMaterial: doorMaterialName } = door;\n const {\n frameMaterial: frameMaterialName,\n gasketMaterial: gasketMaterialName,\n doorStopMaterial: doorStopMaterialName,\n hingeMaterial: hingeMaterialName,\n } = doorFrame;\n const { material: interiorFanlightMaterialName } = interiorFanlight;\n const { material: exteriorFanlightMaterialName } = exteriorFanlight;\n const { material: occulusInfillMaterialName } = occulus;\n const { material: glassInfillMaterialName } = glass;\n\n const { material: frontCoverPanelMaterialName } = frontCoverPanel;\n const { material: backCoverPanelMaterialName } = backCoverPanel;\n const { material: frontDoorPlaneMaterialName } = frontDoorPlane;\n const { material: backDoorPlaneMaterialName } = backDoorPlane;\n const pers = useMemo(() => {\n const dynamicMaterials: {\n [key: string]: THREE.MeshStandardMaterial | null;\n } = {};\n for (const key in materials) {\n if (Object.prototype.hasOwnProperty.call(materials, key)) {\n const value = materials[key as keyof typeof materials];\n dynamicMaterials[key] = createMaterialFromProp(value);\n }\n }\n return dynamicMaterials;\n }, [materials]);\n // --- Material Logic ---\n const doorMaterial = useMemo(\n () => placeholderMaterial,\n [testDoorMaterial, doorMaterialName]\n );\n const frameMaterial = useMemo(\n () =>\n pers.D_PRF_COLOR ||\n pers.D_FR_SRF_DECOR ||\n pers.D_FR_SRF_DECOR_S2 ||\n placeholderMaterialforFrames,\n [testFrameMaterial, frameMaterialName]\n );\n const gasketMaterial = useMemo(\n () => pers.D_GASKET || availableMaterials.black,\n [testGasketMaterial, gasketMaterialName]\n );\n\n const doorStopMaterial = useMemo(() => {\n return (\n pers.D_PRF_COLOR ||\n pers.D_FR_SRF_DECOR ||\n pers.D_FR_SRF_DECOR_S2 ||\n frameMaterial\n );\n }, [testDoorStopMaterial, doorStopMaterialName, frameType, frameMaterial]);\n\n const interiorFanlightMaterial = useMemo(\n () => pers.D_SRF_DECOR_2 || placeholderMaterial,\n [testInteriorFanlightMaterial, interiorFanlightMaterialName]\n );\n const exteriorFanlightMaterial = useMemo(\n () => placeholderMaterial,\n [testExteriorFanlightMaterial, exteriorFanlightMaterialName]\n );\n const occulusInfillMaterial = useMemo(\n () => placeholderMaterial,\n [testOcculusInfillMaterial, occulusInfillMaterialName]\n );\n const glassInfillMaterial = useMemo(\n () => pers.D_FR_COLOR || placeholderMaterial,\n [testGlassInfillMaterial, glassInfillMaterialName]\n );\n\n const hingeBodyMaterial = useMemo(\n () =>\n new THREE.MeshStandardMaterial({\n color: \"#d4d4d4\",\n metalness: 1.0,\n roughness: 0.4,\n }),\n [testHingeMaterial, hingeMaterialName]\n );\n\n const frontCoverPanelMaterial = useMemo(\n () =>\n pers.D_PRF_COLOR ||\n pers.D_FR_SRF_DECOR ||\n pers.D_FR_SRF_DECOR_S2 ||\n placeholderMaterial,\n [testFrontCoverPanelMaterial, frontCoverPanelMaterialName]\n );\n\n const backCoverPanelMaterial = useMemo(\n () =>\n pers.D_PRF_COLOR ||\n pers.D_FR_SRF_DECOR ||\n pers.D_FR_SRF_DECOR_S2 ||\n placeholderMaterial,\n [testBackCoverPanelMaterial, backCoverPanelMaterialName]\n );\n\n const frontDoorPlaneMaterial = useMemo(\n () => pers.D_SRF_DECOR_2 || placeholderMaterial,\n [testFrontDoorPlaneMaterial, frontDoorPlaneMaterialName]\n );\n const backDoorPlaneMaterial = useMemo(\n () => pers.D_SRF_DECOR || placeholderMaterial,\n [testBackDoorPlaneMaterial, backDoorPlaneMaterialName]\n );\n\n const hingeAccentMaterial = useMemo(\n () =>\n new THREE.MeshStandardMaterial({\n color: \"#1a1a1a\",\n roughness: 0.1,\n }),\n []\n );\n\n // --- Dimension calculations ---\n const { doorWidth, doorHeight, theDoorDepth, doorPivot, doorOpening } = door;\n const {\n frameDepth,\n topThk,\n sidesThk,\n doorStopWidth,\n doorStopDepth,\n doorStopOffset,\n notchWidth,\n notchDepth,\n notchposition,\n gasketWidth,\n gasketDepth,\n secondDoorStopWidth,\n secondDoorStopDepth,\n secondDoorStopOffset,\n } = doorFrame;\n\n const initialDoorHeight = useRef<number>(doorHeight);\n\n const { height: interiorFanlightHeightValue } = interiorFanlight;\n const {\n height: exteriorFanlightHeightValue,\n depth: exteriorFanlightDepthValue,\n } = exteriorFanlight;\n const {\n x1: occulusX1,\n x2: occulusX2,\n y1: occulusY1,\n y2: occulusY2,\n depth: occulusInfillDepth,\n } = occulus;\n const { width: architraveWidth, depth: architraveDepth } = frontCoverPanel;\n\n const interiorFanlightHeight = interiorFanlight.visible\n ? interiorFanlightHeightValue\n : 0;\n const mainDoorHeight = doorHeight - interiorFanlightHeight;\n\n const topThkValue = parseInt(topThk) || 20;\n const sidesThkValue = parseInt(sidesThk) || 20;\n\n // Convert dimensions from mm to meters\n const doorWidthM = doorWidth / 1000;\n const mainDoorHeightM = mainDoorHeight / 1000;\n const interiorFanlightHeightM = interiorFanlightHeight / 1000;\n const totalOpeningHeightM = doorHeight / 1000;\n const doorDepthM = theDoorDepth / 1000;\n const frameDepthM = frameDepth / 1000;\n const topFrameWidthM = topThkValue / 1000;\n const sidesFrameWidthM = sidesThkValue / 1000;\n\n const totalOpeningWidthM = isDoubleDoor ? doorWidthM * 2 : doorWidthM;\n\n const exteriorFanlightHeightM = exteriorFanlight.visible\n ? exteriorFanlightHeightValue / 1000\n : 0;\n const exteriorFanlightDepthM = exteriorFanlightDepthValue / 1000;\n const occulusX1M = occulusX1 / 1000;\n const occulusX2M = occulusX2 / 1000;\n const occulusY1M = occulusY1 / 1000;\n const occulusY2M = occulusY2 / 1000;\n const occulusInfillDepthM = occulusInfillDepth / 1000;\n const doorStopWidthM = doorStopWidth / 1000;\n const doorStopDepthM = doorStopDepth / 1000;\n\n // Architrave Dimensions\n const architraveProfileM = architraveWidth / 1000;\n const architraveDepthM = architraveDepth / 1000;\n\n // Gasket Dimensions\n const gasketWidthM = gasketWidth / 1000;\n const gasketDepthM = gasketDepth / 1000;\n\n const doorStopOffsetValue = parseInt(doorStopOffset);\n const doorStopOffsetFromEdgeM = doorStopOffsetValue / 1000;\n\n const notchDepthValue = parseInt(notchDepth) || 40;\n const notchWidthValue = parseInt(notchWidth) || 20;\n\n const notchWidthM = notchWidthValue / 1000;\n const notchDepthM = notchDepthValue / 1000;\n\n const isOpeningIn = doorOpening === \"in\";\n\n const doorStopPositionZ = useMemo(\n () =>\n isOpeningIn\n ? frameDepthM / 2 - doorStopOffsetFromEdgeM - doorStopDepthM / 2\n : -frameDepthM / 2 + doorStopOffsetFromEdgeM + doorStopDepthM / 2,\n [isOpeningIn, frameDepthM, doorStopOffsetFromEdgeM, doorStopDepthM]\n );\n\n const gasketZPosition = useMemo(\n () =>\n isOpeningIn\n ? doorStopPositionZ - doorStopDepthM / 2 - gasketDepthM / 2\n : doorStopPositionZ + doorStopDepthM / 2 + gasketDepthM / 2,\n [isOpeningIn, doorStopPositionZ, doorStopDepthM, gasketDepthM]\n );\n const secondDoorStopWidthM = secondDoorStopWidth / 1000;\n const secondDoorStopDepthM = secondDoorStopDepth / 1000;\n const secondDoorStopPositionZ = isOpeningIn\n ? frameDepthM / 2 - secondDoorStopDepthM / 2\n : -frameDepthM / 2 + secondDoorStopDepthM / 2;\n\n // Position the first glass panel against the primary doorstop\n\n const secondGasketZPosition = isOpeningIn\n ? secondDoorStopPositionZ - secondDoorStopDepthM / 2 - gasketDepthM / 2\n : secondDoorStopPositionZ + secondDoorStopDepthM / 2 + gasketDepthM / 2;\n\n const doorCenterZ = useMemo(() => {\n if (frameType === \"WF_FLI\") {\n if (isOpeningIn) {\n return frameDepthM / 2 - doorDepthM / 2;\n } else {\n return -frameDepthM / 2 + doorDepthM / 2;\n }\n }\n\n if (frameType === \"WDGF_WDG100\" || frameType === \"WF_100\") {\n return 0;\n } else {\n if (isOpeningIn) {\n const gasketBackFaceZ = gasketZPosition - gasketDepthM / 2;\n return gasketBackFaceZ - doorDepthM / 2;\n } else {\n const gasketFrontFaceZ = gasketZPosition + gasketDepthM / 2;\n return gasketFrontFaceZ + doorDepthM / 2;\n }\n }\n }, [\n isOpeningIn,\n gasketZPosition,\n gasketDepthM,\n doorDepthM,\n frameType,\n frameDepthM,\n ]);\n const GlassPanelDepthM = glassDepth / 1000;\n\n const frontGlassOffsetZ = doorDepthM / 2 + GlassPanelDepthM / 2;\n const backGlassOffsetZ = -doorDepthM / 2 - GlassPanelDepthM / 2;\n\n // --- Door Stop Positions on Door ---\n const doorStopOffsetOnDoor =\n frameType === \"WDGF_WDG100\" ? secondDoorStopWidthM / 2 : doorStopDepthM / 2;\n\n const exteriorFanlightZPosition =\n exteriorFanlightType === \"ALSGFL\"\n ? 0 // Center it\n : isOpeningIn\n ? -frameDepthM / 2 + exteriorFanlightDepthM / 2\n : frameDepthM / 2 - exteriorFanlightDepthM / 2;\n\n const occulusWidthM = doorWidthM - occulusX1M - occulusX2M;\n const occulusHeightM = mainDoorHeightM - occulusY1M - occulusY2M;\n const occulusPositionXM = (occulusX1M - occulusX2M) / 2;\n const occulusPositionYM = (occulusY2M - occulusY1M) / 2;\n\n const [isOpen, setIsOpen] = useState(false);\n const hingeSideX = doorPivot === \"left\" ? -doorWidthM / 2 : doorWidthM / 2;\n\n const leftGlass_Z =\n -frameDepthM / 2 + GlassPanelDepthM / 2 - GlassPanelDepthM;\n const rightGlass_Z =\n frameDepthM / 2 - GlassPanelDepthM / 2 + GlassPanelDepthM;\n // --- PIVOT ---\n const hingeZ = useMemo(() => {\n if (frameType === \"WF_FLI\") {\n if (isOpeningIn) {\n return doorCenterZ - doorDepthM / 2;\n } else {\n return doorCenterZ + doorDepthM / 2;\n }\n }\n return isOpeningIn ? -frameDepthM / 2 : frameDepthM / 2;\n }, [frameType, isOpeningIn, doorCenterZ, doorDepthM, frameDepthM]);\n\n const doorOffsetZ = useMemo(\n () => doorCenterZ - hingeZ,\n [doorCenterZ, hingeZ]\n );\n\n const directionMultiplier = doorOpening === \"in\" ? 1 : -1;\n const { rotation } = useSpring({\n rotation: isOpen\n ? [\n 0,\n (doorPivot === \"left\" ? Math.PI / 2 : -Math.PI / 2) *\n directionMultiplier,\n 0,\n ]\n : [0, 0, 0],\n config: { mass: 1, tension: 100, friction: 20 },\n });\n\n const handleClick = () => setIsOpen(!isOpen);\n\n const totalFrameWidth = totalOpeningWidthM + sidesFrameWidthM * 2;\n const totalFrameHeightM = totalOpeningHeightM + topFrameWidthM;\n\n // --- Centering Logic ---\n const initialHeightM = (initialDoorHeight.current || doorHeight) / 1000;\n\n const yCenteringOffset = -topFrameWidthM / 2;\n\n const sideFrameCenterY = topFrameWidthM / 2;\n\n const interiorFanlightYPosition =\n totalOpeningHeightM / 2 - interiorFanlightHeightM / 2;\n const doorYPosition = -totalOpeningHeightM / 2 + mainDoorHeightM / 2;\n const topFrameCenterY = totalOpeningHeightM / 2 + topFrameWidthM / 2;\n const topOfFrameY = topFrameCenterY + topFrameWidthM / 2;\n const exteriorFanlightYPosition = topOfFrameY + exteriorFanlightHeightM / 2;\n\n const frontArchitraveZ = frameDepthM / 2 + architraveDepthM / 2;\n const backArchitraveZ = -frameDepthM / 2 - architraveDepthM / 2;\n\n const sideArchitraveHeight = totalOpeningHeightM;\n const sideArchitraveCenterY = 0;\n\n const leftArchitraveX = -totalOpeningWidthM / 2 - architraveProfileM / 2;\n const rightArchitraveX = totalOpeningWidthM / 2 + architraveProfileM / 2;\n\n const topArchitraveY = totalOpeningHeightM / 2 + architraveProfileM / 2;\n const topArchitraveWidth = totalOpeningWidthM + 2 * architraveProfileM;\n\n // --- Handle placement ---\n // Handle local placement on the DOOR LEAF so it follows rotation\n const handleCenterYFromDoorBottom = 1.0; // 1000 mm from bottom by default\n const safeHandleY = Math.min(\n Math.max(handleCenterYFromDoorBottom, 0.25),\n mainDoorHeightM - 0.25\n );\n const handleHeightM = -mainDoorHeightM / 2 + safeHandleY; // convert to door local Y\n\n // Check if the door is a glass type to adjust handle positioning\n const isSingleGlass = [\"SG8\", \"SG10\", \"SG12\"].includes(bodyType);\n\n const latchMarginM = 0.08;\n\n // --- Primary Gasket Edge Position Calculations ---\n const topGasketYPosition =\n totalOpeningHeightM / 2 - doorStopWidthM + gasketWidthM / 2;\n const leftGasketXPosition =\n -totalOpeningWidthM / 2 + doorStopWidthM - gasketWidthM / 2;\n const rightGasketXPosition =\n totalOpeningWidthM / 2 - doorStopWidthM + gasketWidthM / 2;\n\n // --- Second Gasket ---\n\n const secondTopGasketYPosition =\n totalOpeningHeightM / 2 - secondDoorStopWidthM + gasketWidthM / 2;\n\n const secondLeftGasketXPosition =\n -totalOpeningWidthM / 2 + secondDoorStopWidthM - gasketWidthM / 2;\n const secondRightGasketXPosition =\n totalOpeningWidthM / 2 - secondDoorStopWidthM + gasketWidthM / 2;\n // --- HINGE CALCULATIONS ---\n const hingeTotalHeightM = 120 / 1000;\n const hingeRadiusM = 8 / 1000;\n const capHeightM = 4 / 1000;\n const separatorHeightM = 4 / 1000;\n\n const barrelPartHeight =\n (hingeTotalHeightM - capHeightM * 2 - separatorHeightM) / 2;\n\n // --- HINGE VISIBILITY LOGIC ---\n const isGlassDoor = useMemo(\n () => [\"SG8\", \"SG10\", \"SG12\"].includes(bodyType),\n [bodyType]\n );\n\n const pivotNewPosition = useMemo(() => {\n if (initialDoorHeight.current === null || initialDoorHeight.current === 0) {\n return 0;\n }\n return (doorHeight - initialDoorHeight.current) / 2 / 1000;\n }, [doorHeight]);\n\n // Calculate evenly spaced hinge positions\n const standardHingeYPositions = useMemo(() => {\n const numHinges = 4;\n const topMargin = 180 / 1000;\n const bottomMargin = 180 / 1000;\n const availableHeight = mainDoorHeightM - topMargin - bottomMargin;\n const spacing = availableHeight / (numHinges - 1);\n const positions: number[] = [];\n for (let i = 0; i < numHinges; i++) {\n positions.push(mainDoorHeightM / 2 - topMargin - i * spacing);\n }\n return positions;\n }, [mainDoorHeightM]);\n\n // Y positions for the new glass hinges\n const glassHingeYPositions = useMemo(() => {\n const topMargin = 250 / 1000;\n const secondTopMargin = 450 / 1000;\n const bottomMargin = 250 / 1000;\n\n const top = mainDoorHeightM / 2 - topMargin;\n const secondTop = mainDoorHeightM / 2 - secondTopMargin;\n const bottom = -mainDoorHeightM / 2 + bottomMargin;\n\n return [top, secondTop, bottom];\n }, [mainDoorHeightM]);\n\n const isStandardHingeVisible = useMemo(() => {\n if (isGlassDoor) return false;\n if (!isFrameVisible) return false;\n\n const invisibleFrameTypes = [\"WDGF_WDG100\", \"WF_100\", \"WF_FLI\"];\n if (invisibleFrameTypes.includes(frameType)) {\n return false;\n }\n\n return true;\n }, [isFrameVisible, frameType, isGlassDoor]);\n\n const doorInstances = useMemo(() => {\n if (isDoubleDoor) {\n return [\n { key: \"left\", pivot: \"left\", x: -doorWidthM / 2 },\n { key: \"right\", pivot: \"right\", x: doorWidthM / 2 },\n ];\n }\n return [{ key: \"single\", pivot: doorPivot, x: 0 }];\n }, [isDoubleDoor, doorWidthM, doorPivot]);\n\n if (is2D) {\n return (\n <group position-y={yCenteringOffset + 0.1}>\n <mesh>\n <boxGeometry args={[totalWidth / 1000, 0.1, frameDepth / 1000]} />\n <meshBasicMaterial color=\"white\" side={THREE.DoubleSide} />\n </mesh>\n </group>\n );\n }\n\n return (\n <>\n <group position-y={yCenteringOffset + pivotNewPosition}>\n {frontCoverPanel.visible && (\n <group position-z={frontArchitraveZ}>\n {/* Top */}\n <mesh\n position={[0, topArchitraveY, 0]}\n castShadow\n material={frontCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n topArchitraveWidth,\n architraveProfileM,\n architraveDepthM,\n ]}\n />\n </mesh>\n {/* Left */}\n <mesh\n position={[leftArchitraveX, sideArchitraveCenterY, 0]}\n castShadow\n material={frontCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n architraveProfileM,\n sideArchitraveHeight,\n architraveDepthM,\n ]}\n />\n </mesh>\n {/* Right */}\n <mesh\n position={[rightArchitraveX, sideArchitraveCenterY, 0]}\n castShadow\n material={frontCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n architraveProfileM,\n sideArchitraveHeight,\n architraveDepthM,\n ]}\n />\n </mesh>\n </group>\n )}\n {backCoverPanel.visible && (\n <group position-z={backArchitraveZ}>\n {/* Top */}\n <mesh\n position={[0, topArchitraveY, 0]}\n castShadow\n material={backCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n topArchitraveWidth,\n architraveProfileM,\n architraveDepthM,\n ]}\n />\n </mesh>\n {/* Left */}\n <mesh\n position={[leftArchitraveX, sideArchitraveCenterY, 0]}\n castShadow\n material={backCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n architraveProfileM,\n sideArchitraveHeight,\n architraveDepthM,\n ]}\n />\n </mesh>\n {/* Right */}\n <mesh\n position={[rightArchitraveX, sideArchitraveCenterY, 0]}\n castShadow\n material={backCoverPanelMaterial}\n >\n <boxGeometry\n args={[\n architraveProfileM,\n sideArchitraveHeight,\n architraveDepthM,\n ]}\n />\n </mesh>\n </group>\n )}\n\n {exteriorFanlight.visible && (\n <mesh\n position={[0, exteriorFanlightYPosition, exteriorFanlightZPosition]}\n castShadow\n material={exteriorFanlightMaterial}\n >\n <boxGeometry\n args={[\n totalFrameWidth,\n exteriorFanlightHeightM,\n exteriorFanlightDepthM,\n ]}\n />\n </mesh>\n )}\n\n {isFrameVisible && (\n <group>\n {/* --- Top Frame with CSG Cut --- */}\n <mesh castShadow position={[0, topFrameCenterY, 0]}>\n <Geometry useGroups>\n <Base name=\"frame-base\" material={frameMaterial}>\n <boxGeometry\n args={[totalOpeningWidthM, topFrameWidthM, frameDepthM]}\n />\n </Base>\n {![\"MXF_40\", \"MXF_50\", \"MXCAF_40\", \"MXCAF_50\"].includes(\n frameType\n ) && (\n <Subtraction\n name=\"cut-exterior\"\n material={frameMaterial}\n position={[0, notchposition, 0]}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM + 0.01,\n notchWidthM,\n notchDepthM,\n ]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n\n {/* --- Left Frame with CSG Cut --- */}\n <mesh\n castShadow\n position={[\n -totalOpeningWidthM / 2 - sidesFrameWidthM / 2,\n sideFrameCenterY,\n 0,\n ]}\n >\n <Geometry useGroups>\n <Base name=\"frame-base\" material={frameMaterial}>\n <boxGeometry\n args={[sidesFrameWidthM, totalFrameHeightM, frameDepthM]}\n />\n </Base>\n {![\"MXF_40\", \"MXF_50\", \"MXCAF_40\", \"MXCAF_50\"].includes(\n frameType\n ) && (\n <Subtraction\n name=\"cut-exterior\"\n material={frameMaterial}\n position={[-notchposition, 0, 0]}\n >\n <boxGeometry\n args={[\n notchWidthM,\n totalFrameHeightM + 0.01,\n notchDepthM,\n ]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n\n {/* --- Right Frame with CSG Cut --- */}\n <mesh\n castShadow\n position={[\n totalOpeningWidthM / 2 + sidesFrameWidthM / 2,\n sideFrameCenterY,\n 0,\n ]}\n >\n <Geometry useGroups>\n <Base name=\"frame-base\" material={frameMaterial}>\n <boxGeometry\n args={[sidesFrameWidthM, totalFrameHeightM, frameDepthM]}\n />\n </Base>\n {![\"MXF_40\", \"MXF_50\", \"MXCAF_40\", \"MXCAF_50\"].includes(\n frameType\n ) && (\n <Subtraction\n name=\"cut-exterior\"\n material={frameMaterial}\n position={[notchposition, 0, 0]}\n >\n <boxGeometry\n args={[\n notchWidthM,\n totalFrameHeightM + 0.01,\n notchDepthM,\n ]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n\n {/* --- Door Stop Geometry --- */}\n <mesh\n castShadow\n position={[\n 0,\n totalOpeningHeightM / 2 - doorStopWidthM / 2,\n doorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[totalOpeningWidthM, doorStopWidthM, doorStopDepthM]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n -totalOpeningWidthM / 2 + doorStopWidthM / 2,\n 0,\n doorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[doorStopWidthM, totalOpeningHeightM, doorStopDepthM]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n totalOpeningWidthM / 2 - doorStopWidthM / 2,\n 0,\n doorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[doorStopWidthM, totalOpeningHeightM, doorStopDepthM]}\n />\n </mesh>\n\n {/* --- Rubber Gasket Geometry (Primary) --- */}\n {frameType !== \"WF_FLI\" && (\n <>\n <mesh\n castShadow\n position={[0, topGasketYPosition, gasketZPosition]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM - 0.03,\n gasketWidthM + 0.005,\n gasketDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n leftGasketXPosition - 0.005,\n -0.005,\n gasketZPosition,\n ]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n gasketWidthM + 0.005,\n totalOpeningHeightM - 0.02,\n gasketDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n rightGasketXPosition + 0.005,\n -0.005,\n gasketZPosition,\n ]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n gasketWidthM + 0.005,\n totalOpeningHeightM - 0.02,\n gasketDepthM,\n ]}\n />\n </mesh>\n </>\n )}\n\n {(frameType === \"WDGF_WDG100\" ||\n frameType === \"WF_100\" ||\n frameType === \"WF_FLI\") && (\n <group>\n {/* --- Door Stops (Second) --- */}\n <group>\n <mesh\n castShadow\n position={[\n 0,\n totalOpeningHeightM / 2 - secondDoorStopWidthM / 2,\n secondDoorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM,\n secondDoorStopWidthM,\n secondDoorStopDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n -totalOpeningWidthM / 2 + secondDoorStopWidthM / 2,\n 0,\n secondDoorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[\n secondDoorStopWidthM,\n totalOpeningHeightM,\n secondDoorStopDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n totalOpeningWidthM / 2 - secondDoorStopWidthM / 2,\n 0,\n secondDoorStopPositionZ,\n ]}\n material={doorStopMaterial}\n >\n <boxGeometry\n args={[\n secondDoorStopWidthM,\n totalOpeningHeightM,\n secondDoorStopDepthM,\n ]}\n />\n </mesh>\n </group>\n\n {/* --- Gaskets (Second) --- */}\n <group>\n <mesh\n castShadow\n position={[\n 0,\n secondTopGasketYPosition - 0.005,\n secondGasketZPosition,\n ]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM - 0.03,\n gasketWidthM + 0.005,\n gasketDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n secondLeftGasketXPosition - 0.005,\n -0.01,\n secondGasketZPosition,\n ]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n gasketWidthM + 0.005,\n totalOpeningHeightM - 0.04,\n gasketDepthM,\n ]}\n />\n </mesh>\n <mesh\n castShadow\n position={[\n secondRightGasketXPosition + 0.005,\n -0.01,\n secondGasketZPosition,\n ]}\n material={gasketMaterial}\n >\n <boxGeometry\n args={[\n gasketWidthM + 0.004,\n totalOpeningHeightM - 0.04,\n gasketDepthM,\n ]}\n />\n </mesh>\n </group>\n\n {/* --- Glass Frame (if visible) --- */}\n {glassVisible && (\n <>\n {/* Back side */}\n <group>\n {/* Top frame */}\n {(frameType === \"WDGF_WDG100\" ||\n frameType === \"WF_100\") && (\n <mesh\n castShadow\n position={[\n 0,\n topFrameCenterY - secondDoorStopWidthM / 2,\n leftGlass_Z,\n ]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM - 2 * secondDoorStopWidthM,\n topFrameWidthM + secondDoorStopWidthM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n )}\n {frameType !== \"WDGF_WDG100\" &&\n frameType !== \"WF_100\" && (\n <mesh\n castShadow\n position={[0, topFrameCenterY, leftGlass_Z]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM - 2 * secondDoorStopWidthM,\n topFrameWidthM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n )}\n\n {/* Left side frame */}\n <mesh\n castShadow\n position={[\n -totalOpeningWidthM / 2 -\n sidesFrameWidthM / 2 +\n secondDoorStopWidthM / 2,\n sideFrameCenterY,\n leftGlass_Z,\n ]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n sidesFrameWidthM + secondDoorStopWidthM,\n totalFrameHeightM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n\n {/* Right side frame */}\n <mesh\n castShadow\n position={[\n totalOpeningWidthM / 2 +\n sidesFrameWidthM / 2 -\n secondDoorStopWidthM / 2,\n sideFrameCenterY,\n leftGlass_Z,\n ]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n sidesFrameWidthM + secondDoorStopWidthM,\n totalFrameHeightM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n </group>\n\n {/* Front side */}\n <group>\n {/* Top frame */}\n <mesh\n castShadow\n position={[0, topFrameCenterY, rightGlass_Z]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n totalOpeningWidthM,\n topFrameWidthM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n\n {/* Left side frame */}\n <mesh\n castShadow\n position={[\n -totalOpeningWidthM / 2 - sidesFrameWidthM / 2,\n sideFrameCenterY,\n rightGlass_Z,\n ]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n sidesFrameWidthM,\n totalFrameHeightM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n\n {/* Right side frame */}\n <mesh\n castShadow\n position={[\n totalOpeningWidthM / 2 + sidesFrameWidthM / 2,\n sideFrameCenterY,\n rightGlass_Z,\n ]}\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n sidesFrameWidthM,\n totalFrameHeightM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n </group>\n </>\n )}\n </group>\n )}\n </group>\n )}\n\n {interiorFanlight.visible && (\n <mesh\n position={[0, interiorFanlightYPosition, doorCenterZ]}\n castShadow\n material={interiorFanlightMaterial}\n >\n <boxGeometry\n args={[totalOpeningWidthM, interiorFanlightHeightM, doorDepthM]}\n />\n </mesh>\n )}\n {doorInstances.map(instance => (\n <DoorLeaf\n key={instance.key}\n pivot={instance.pivot}\n xOffset={instance.x}\n />\n ))}\n </group>\n\n {/* Floor plane */}\n {/* {!isPlaneVisible && (\n <mesh\n receiveShadow\n rotation={[-Math.PI / 2, 0, 0]}\n position={[0, -1.35, 0]}\n >\n <planeGeometry args={[10, 10]} />\n <meshStandardMaterial color=\"#f9f9f9\" side={THREE.DoubleSide} />\n </mesh>\n )} */}\n </>\n );\n}\n\nfunction DoorLeaf({ pivot, xOffset }) {\n const {\n is2D,\n totalWidth,\n totalHeight,\n isPlaneVisible,\n isFrameVisible,\n door,\n doorFrame,\n interiorFanlight,\n exteriorFanlight,\n occulus,\n glass,\n frontCoverPanel,\n backCoverPanel,\n frontDoorPlane,\n backDoorPlane,\n frameType,\n bodyType,\n exteriorFanlightType,\n testDoorMaterial,\n testFrameMaterial,\n testGasketMaterial,\n testInteriorFanlightMaterial,\n testExteriorFanlightMaterial,\n testOcculusInfillMaterial,\n testGlassInfillMaterial,\n testDoorStopMaterial,\n testHingeMaterial,\n glassVisible,\n testFrontCoverPanelMaterial,\n testBackCoverPanelMaterial,\n testFrontDoorPlaneMaterial,\n testBackDoorPlaneMaterial,\n glassDepth,\n cpid,\n handleParseCpid,\n } = useConfigurator();\n\n // here i get material names from context\n const { doorMaterial: doorMaterialName } = door;\n const {\n frameMaterial: frameMaterialName,\n gasketMaterial: gasketMaterialName,\n doorStopMaterial: doorStopMaterialName,\n hingeMaterial: hingeMaterialName,\n } = doorFrame;\n const { material: interiorFanlightMaterialName } = interiorFanlight;\n const { material: exteriorFanlightMaterialName } = exteriorFanlight;\n const { material: occulusInfillMaterialName } = occulus;\n const { material: glassInfillMaterialName } = glass;\n\n const { material: frontCoverPanelMaterialName } = frontCoverPanel;\n const { material: backCoverPanelMaterialName } = backCoverPanel;\n const { material: frontDoorPlaneMaterialName } = frontDoorPlane;\n const { material: backDoorPlaneMaterialName } = backDoorPlane;\n\n // --- Material Logic ---\n const doorMaterial = useMemo(\n () => placeholderMaterial,\n [testDoorMaterial, doorMaterialName]\n );\n const frameMaterial = useMemo(\n () => placeholderMaterialforFrames,\n [testFrameMaterial, frameMaterialName]\n );\n const gasketMaterial = useMemo(\n () => new THREE.MeshStandardMaterial({ color: \"#111111\" }),\n [testGasketMaterial, gasketMaterialName]\n );\n\n const doorStopMaterial = useMemo(() => {\n return frameMaterial;\n }, [testDoorStopMaterial, doorStopMaterialName, frameType, frameMaterial]);\n\n const interiorFanlightMaterial = useMemo(\n () => placeholderMaterial,\n [testInteriorFanlightMaterial, interiorFanlightMaterialName]\n );\n const exteriorFanlightMaterial = useMemo(\n () => placeholderMaterial,\n [testExteriorFanlightMaterial, exteriorFanlightMaterialName]\n );\n const occulusInfillMaterial = useMemo(\n () => placeholderMaterial,\n [testOcculusInfillMaterial, occulusInfillMaterialName]\n );\n const glassInfillMaterial = useMemo(\n () => placeholderMaterial,\n [testGlassInfillMaterial, glassInfillMaterialName]\n );\n\n const hingeBodyMaterial = useMemo(\n () =>\n new THREE.MeshStandardMaterial({\n color: \"#d4d4d4\",\n metalness: 1.0,\n roughness: 0.4,\n }),\n [testHingeMaterial, hingeMaterialName]\n );\n\n const frontCoverPanelMaterial = useMemo(\n () => placeholderMaterial,\n [testFrontCoverPanelMaterial, frontCoverPanelMaterialName]\n );\n\n const backCoverPanelMaterial = useMemo(\n () => placeholderMaterial,\n [testBackCoverPanelMaterial, backCoverPanelMaterialName]\n );\n\n const frontDoorPlaneMaterial = useMemo(\n () => placeholderMaterial,\n [testFrontDoorPlaneMaterial, frontDoorPlaneMaterialName]\n );\n const backDoorPlaneMaterial = useMemo(\n () => placeholderMaterial,\n [testBackDoorPlaneMaterial, backDoorPlaneMaterialName]\n );\n\n const hingeAccentMaterial = useMemo(\n () =>\n new THREE.MeshStandardMaterial({\n color: \"#1a1a1a\",\n roughness: 0.1,\n }),\n []\n );\n\n // --- Dimension calculations ---\n const { doorWidth, doorHeight, theDoorDepth, doorPivot, doorOpening } = door;\n const {\n frameDepth,\n topThk,\n sidesThk,\n doorStopWidth,\n doorStopDepth,\n doorStopOffset,\n notchWidth,\n notchDepth,\n notchposition,\n gasketWidth,\n gasketDepth,\n secondDoorStopWidth,\n secondDoorStopDepth,\n secondDoorStopOffset,\n } = doorFrame;\n\n const initialDoorHeight = useRef<number | null>(null);\n const initialDoorWidth = useRef<number | null>(null);\n\n useEffect(() => {\n if (doorHeight > 0 && initialDoorHeight.current === null) {\n initialDoorHeight.current = doorHeight;\n }\n if (doorWidth > 0 && initialDoorWidth.current === null) {\n initialDoorWidth.current = doorWidth;\n }\n }, [doorHeight, doorWidth]);\n\n const { height: interiorFanlightHeightValue } = interiorFanlight;\n const {\n height: exteriorFanlightHeightValue,\n depth: exteriorFanlightDepthValue,\n } = exteriorFanlight;\n const {\n x1: occulusX1,\n x2: occulusX2,\n y1: occulusY1,\n y2: occulusY2,\n depth: occulusInfillDepth,\n } = occulus;\n const { width: architraveWidth, depth: architraveDepth } = frontCoverPanel;\n\n const interiorFanlightHeight = interiorFanlight.visible\n ? interiorFanlightHeightValue\n : 0;\n const mainDoorHeight = doorHeight - interiorFanlightHeight;\n\n const topThkValue = parseInt(topThk) || 20;\n const sidesThkValue = parseInt(sidesThk) || 20;\n\n // Convert dimensions from mm to meters\n const doorWidthM = doorWidth / 1000;\n const mainDoorHeightM = mainDoorHeight / 1000;\n const interiorFanlightHeightM = interiorFanlightHeight / 1000;\n const totalOpeningHeightM = doorHeight / 1000;\n const doorDepthM = theDoorDepth / 1000;\n const frameDepthM = frameDepth / 1000;\n const topFrameWidthM = topThkValue / 1000;\n const sidesFrameWidthM = sidesThkValue / 1000;\n const exteriorFanlightHeightM = exteriorFanlight.visible\n ? exteriorFanlightHeightValue / 1000\n : 0;\n const exteriorFanlightDepthM = exteriorFanlightDepthValue / 1000;\n const occulusX1M = occulusX1 / 1000;\n const occulusX2M = occulusX2 / 1000;\n const occulusY1M = occulusY1 / 1000;\n const occulusY2M = occulusY2 / 1000;\n const occulusInfillDepthM = occulusInfillDepth / 1000;\n const doorStopWidthM = doorStopWidth / 1000;\n const doorStopDepthM = doorStopDepth / 1000;\n\n // Architrave Dimensions\n const architraveProfileM = architraveWidth / 1000;\n const architraveDepthM = architraveDepth / 1000;\n\n // Gasket Dimensions\n const gasketWidthM = gasketWidth / 1000;\n const gasketDepthM = gasketDepth / 1000;\n\n const doorStopOffsetValue = parseInt(doorStopOffset);\n const doorStopOffsetFromEdgeM = doorStopOffsetValue / 1000;\n\n const notchDepthValue = parseInt(notchDepth) || 40;\n const notchWidthValue = parseInt(notchWidth) || 20;\n\n const notchWidthM = notchWidthValue / 1000;\n const notchDepthM = notchDepthValue / 1000;\n\n const isOpeningIn = doorOpening === \"in\";\n\n const doorStopPositionZ = useMemo(\n () =>\n isOpeningIn\n ? frameDepthM / 2 - doorStopOffsetFromEdgeM - doorStopDepthM / 2\n : -frameDepthM / 2 + doorStopOffsetFromEdgeM + doorStopDepthM / 2,\n [isOpeningIn, frameDepthM, doorStopOffsetFromEdgeM, doorStopDepthM]\n );\n\n const gasketZPosition = useMemo(\n () =>\n isOpeningIn\n ? doorStopPositionZ - doorStopDepthM / 2 - gasketDepthM / 2\n : doorStopPositionZ + doorStopDepthM / 2 + gasketDepthM / 2,\n [isOpeningIn, doorStopPositionZ, doorStopDepthM, gasketDepthM]\n );\n const secondDoorStopWidthM = secondDoorStopWidth / 1000;\n const secondDoorStopDepthM = secondDoorStopDepth / 1000;\n const secondDoorStopPositionZ = isOpeningIn\n ? frameDepthM / 2 - secondDoorStopDepthM / 2\n : -frameDepthM / 2 + secondDoorStopDepthM / 2;\n\n // Position the first glass panel against the primary doorstop\n\n const secondGasketZPosition = isOpeningIn\n ? secondDoorStopPositionZ - secondDoorStopDepthM / 2 - gasketDepthM / 2\n : secondDoorStopPositionZ + secondDoorStopDepthM / 2 + gasketDepthM / 2;\n\n const doorCenterZ = useMemo(() => {\n if (frameType === \"WF_FLI\") {\n if (isOpeningIn) {\n return frameDepthM / 2 - doorDepthM / 2;\n } else {\n return -frameDepthM / 2 + doorDepthM / 2;\n }\n }\n\n if (frameType === \"WDGF_WDG100\" || frameType === \"WF_100\") {\n return 0;\n } else {\n if (isOpeningIn) {\n const gasketBackFaceZ = gasketZPosition - gasketDepthM / 2;\n return gasketBackFaceZ - doorDepthM / 2;\n } else {\n const gasketFrontFaceZ = gasketZPosition + gasketDepthM / 2;\n return gasketFrontFaceZ + doorDepthM / 2;\n }\n }\n }, [\n isOpeningIn,\n gasketZPosition,\n gasketDepthM,\n doorDepthM,\n frameType,\n frameDepthM,\n ]);\n const GlassPanelDepthM = glassDepth / 1000;\n\n const frontGlassOffsetZ = doorDepthM / 2 + GlassPanelDepthM / 2;\n const backGlassOffsetZ = -doorDepthM / 2 - GlassPanelDepthM / 2;\n\n // --- Door Stop Positions on Door ---\n const doorStopOffsetOnDoor =\n frameType === \"WDGF_WDG100\" ? secondDoorStopWidthM / 2 : doorStopDepthM / 2;\n\n const exteriorFanlightZPosition =\n exteriorFanlightType === \"ALSGFL\"\n ? 0 // Center it\n : isOpeningIn\n ? -frameDepthM / 2 + exteriorFanlightDepthM / 2\n : frameDepthM / 2 - exteriorFanlightDepthM / 2;\n\n const occulusWidthM = doorWidthM - occulusX1M - occulusX2M;\n const occulusHeightM = mainDoorHeightM - occulusY1M - occulusY2M;\n const occulusPositionXM = (occulusX1M - occulusX2M) / 2;\n const occulusPositionYM = (occulusY2M - occulusY1M) / 2;\n\n const [isOpen, setIsOpen] = useState(false);\n const hingeSideX = pivot === \"left\" ? -doorWidthM / 2 : doorWidthM / 2;\n\n const leftGlass_Z =\n -frameDepthM / 2 + GlassPanelDepthM / 2 - GlassPanelDepthM;\n const rightGlass_Z =\n frameDepthM / 2 - GlassPanelDepthM / 2 + GlassPanelDepthM;\n // --- PIVOT ---\n const hingeZ = useMemo(() => {\n if (frameType === \"WF_FLI\") {\n if (isOpeningIn) {\n return doorCenterZ - doorDepthM / 2;\n } else {\n return doorCenterZ + doorDepthM / 2;\n }\n }\n return isOpeningIn ? -frameDepthM / 2 : frameDepthM / 2;\n }, [frameType, isOpeningIn, doorCenterZ, doorDepthM, frameDepthM]);\n\n const doorOffsetZ = useMemo(\n () => doorCenterZ - hingeZ,\n [doorCenterZ, hingeZ]\n );\n\n const directionMultiplier = doorOpening === \"in\" ? 1 : -1;\n const { rotation } = useSpring({\n rotation: isOpen\n ? [\n 0,\n (pivot === \"left\" ? Math.PI / 2 : -Math.PI / 2) * directionMultiplier,\n 0,\n ]\n : [0, 0, 0],\n config: { mass: 1, tension: 100, friction: 20 },\n });\n\n const handleClick = () => setIsOpen(!isOpen);\n\n const totalFrameHeightM = totalOpeningHeightM + topFrameWidthM;\n\n const doorYPosition = -totalOpeningHeightM / 2 + mainDoorHeightM / 2;\n\n const handleCenterYFromDoorBottom = 1.0;\n const safeHandleY = Math.min(\n Math.max(handleCenterYFromDoorBottom, 0.25),\n mainDoorHeightM - 0.25\n );\n const handleHeightM = -mainDoorHeightM / 2 + safeHandleY;\n\n const isSingleGlass = [\"SG8\", \"SG10\", \"SG12\"].includes(bodyType);\n const nonHingeSideX = pivot === \"left\" ? doorWidthM / 2 : -doorWidthM / 2;\n\n let handleX;\n\n if (isSingleGlass) {\n const plateHalfWidth = 0.05;\n handleX =\n nonHingeSideX + (pivot === \"left\" ? -plateHalfWidth : plateHalfWidth);\n } else {\n const latchMarginM = 0.08;\n handleX = nonHingeSideX + (pivot === \"left\" ? -latchMarginM : latchMarginM);\n }\n\n const hingeTotalHeightM = 120 / 1000;\n const hingeRadiusM = 8 / 1000;\n const capHeightM = 4 / 1000;\n const separatorHeightM = 4 / 1000;\n\n const barrelPartHeight =\n (hingeTotalHeightM - capHeightM * 2 - separatorHeightM) / 2;\n\n const isGlassDoor = useMemo(\n () => [\"SG8\", \"SG10\", \"SG12\"].includes(bodyType),\n [bodyType]\n );\n\n const standardHingeYPositions = useMemo(() => {\n const numHinges = 4;\n const topMargin = 180 / 1000;\n const bottomMargin = 180 / 1000;\n const availableHeight = mainDoorHeightM - topMargin - bottomMargin;\n const spacing = availableHeight / (numHinges - 1);\n const positions: number[] = [];\n for (let i = 0; i < numHinges; i++) {\n positions.push(mainDoorHeightM / 2 - topMargin - i * spacing);\n }\n return positions;\n }, [mainDoorHeightM]);\n\n const glassHingeYPositions = useMemo(() => {\n const topMargin = 250 / 1000;\n const secondTopMargin = 450 / 1000;\n const bottomMargin = 250 / 1000;\n const top = mainDoorHeightM / 2 - topMargin;\n const secondTop = mainDoorHeightM / 2 - secondTopMargin;\n const bottom = -mainDoorHeightM / 2 + bottomMargin;\n return [top, secondTop, bottom];\n }, [mainDoorHeightM]);\n\n const isStandardHingeVisible = useMemo(() => {\n if (isGlassDoor) return false;\n if (!isFrameVisible) return false;\n const invisibleFrameTypes = [\"WDGF_WDG100\", \"WF_100\", \"WF_FLI\"];\n if (invisibleFrameTypes.includes(frameType)) {\n return false;\n }\n return true;\n }, [isFrameVisible, frameType, isGlassDoor]);\n\n // --- DYNAMIC TEXTURE MATERIALS ---\n const dynamicFrontDoorPlaneMaterial = useMemo(() => {\n const newMaterial = frontDoorPlaneMaterial.clone();\n if (newMaterial.map) {\n newMaterial.map = newMaterial.map.clone();\n newMaterial.map.needsUpdate = true;\n newMaterial.map.wrapS = THREE.RepeatWrapping;\n newMaterial.map.wrapT = THREE.RepeatWrapping;\n\n const initialHeightM = initialDoorHeight.current\n ? initialDoorHeight.current / 1000\n : mainDoorHeightM;\n const initialWidthM = initialDoorWidth.current\n ? initialDoorWidth.current / 1000\n : doorWidthM;\n\n const repeatY = initialHeightM > 0 ? mainDoorHeightM / initialHeightM : 1;\n const repeatX = initialWidthM > 0 ? doorWidthM / initialWidthM : 1;\n\n newMaterial.map.repeat.set(repeatX, repeatY * 2);\n console.log(repeatX, repeatY);\n }\n return newMaterial;\n }, [frontDoorPlaneMaterial, mainDoorHeightM, doorWidthM]);\n\n const dynamicBackDoorPlaneMaterial = useMemo(() => {\n const newMaterial = backDoorPlaneMaterial.clone();\n if (newMaterial.map) {\n newMaterial.map = newMaterial.map.clone();\n newMaterial.map.needsUpdate = true;\n newMaterial.map.wrapS = THREE.RepeatWrapping;\n newMaterial.map.wrapT = THREE.RepeatWrapping;\n\n const initialHeightM = initialDoorHeight.current\n ? initialDoorHeight.current / 1000\n : mainDoorHeightM;\n const initialWidthM = initialDoorWidth.current\n ? initialDoorWidth.current / 1000\n : doorWidthM;\n\n const repeatY = initialHeightM > 0 ? mainDoorHeightM / initialHeightM : 1;\n const repeatX = initialWidthM > 0 ? doorWidthM / initialWidthM : 1;\n\n newMaterial.map.repeat.set(repeatX, repeatY * 2);\n }\n return newMaterial;\n }, [backDoorPlaneMaterial, mainDoorHeightM, doorWidthM]);\n\n return (\n <group position-x={xOffset}>\n {isStandardHingeVisible &&\n standardHingeYPositions.map((y, index) => (\n <group\n key={`frame-hinge-${index}`}\n position={[hingeSideX, doorYPosition + y, hingeZ]}\n >\n <mesh\n material={hingeBodyMaterial}\n position={[0, separatorHeightM / 2 + barrelPartHeight / 2, 0]}\n castShadow\n >\n <cylinderGeometry\n args={[hingeRadiusM, hingeRadiusM, barrelPartHeight, 32]}\n />\n </mesh>\n <mesh\n material={hingeAccentMaterial}\n position={[\n 0,\n separatorHeightM / 2 + barrelPartHeight + capHeightM / 2,\n 0,\n ]}\n castShadow\n >\n <cylinderGeometry\n args={[hingeRadiusM, hingeRadiusM, capHeightM, 32]}\n />\n </mesh>\n </group>\n ))}\n\n {/* --- PIVOT GROUP --- */}\n <a.group\n position={[hingeSideX, doorYPosition, hingeZ]}\n rotation={rotation.to((x, y, z) => [x, y, z] as any)}\n onClick={handleClick}\n onPointerOver={() => (document.body.style.cursor = \"pointer\")}\n onPointerOut={() => (document.body.style.cursor = \"auto\")}\n >\n {/* --- Standard Hinge (Door Side)--- */}\n {isStandardHingeVisible &&\n standardHingeYPositions.map((y, index) => (\n <group key={`door-hinge-${index}`} position={[0, y, 0]}>\n <mesh\n material={hingeBodyMaterial}\n position={[0, -separatorHeightM / 2 - barrelPartHeight / 2, 0]}\n castShadow\n >\n <cylinderGeometry\n args={[hingeRadiusM, hingeRadiusM, barrelPartHeight, 32]}\n />\n </mesh>\n <mesh\n material={hingeAccentMaterial}\n position={[\n 0,\n -separatorHeightM / 2 - barrelPartHeight - capHeightM / 2,\n 0,\n ]}\n castShadow\n >\n <cylinderGeometry\n args={[hingeRadiusM, hingeRadiusM, capHeightM, 32]}\n />\n </mesh>\n <mesh\n material={hingeAccentMaterial}\n position={[0, 0, 0]}\n castShadow\n >\n <cylinderGeometry\n args={[hingeRadiusM, hingeRadiusM, separatorHeightM, 32]}\n />\n </mesh>\n </group>\n ))}\n {/* --- Glass Hinge --- */}\n {isGlassDoor &&\n isFrameVisible &&\n glassHingeYPositions.map((y, index) => (\n <GlassHinge\n key={`glass-hinge-${index}`}\n position={[0, y, doorOffsetZ + 0.0001]}\n pivot={pivot}\n frameSideWidth={sidesFrameWidthM}\n doorDepthM={doorDepthM}\n material={hingeBodyMaterial}\n gasketMaterial={gasketMaterial}\n />\n ))}\n\n <group position={[-hingeSideX, 0, doorOffsetZ]}>\n <mesh castShadow receiveShadow>\n <Geometry useGroups>\n <Base name=\"door-base\" material={doorMaterial}>\n <boxGeometry args={[doorWidthM, mainDoorHeightM, doorDepthM]} />\n </Base>\n {/* First set of cuts */}\n <DoorStopCuts\n visible={\n frameType === \"WDGF_WDG100\" ||\n frameType === \"WF_100\" ||\n frameType === \"WF_FLI\"\n }\n width={doorWidthM}\n height={totalOpeningHeightM}\n stopWidth={doorStopWidthM}\n stopDepth={doorStopDepthM}\n stopPositionZ={doorStopPositionZ}\n centerZ={doorCenterZ}\n glassDepthOffset={GlassPanelDepthM / 2}\n material={doorMaterial}\n setName=\"1\"\n />\n\n {/* Second set of cuts */}\n <DoorStopCuts\n visible={\n frameType === \"WDGF_WDG100\" ||\n frameType === \"WF_100\" ||\n frameType === \"WF_FLI\"\n }\n width={doorWidthM}\n height={totalOpeningHeightM}\n stopWidth={secondDoorStopWidthM}\n stopDepth={secondDoorStopDepthM}\n stopPositionZ={secondDoorStopPositionZ}\n centerZ={doorCenterZ}\n glassDepthOffset={GlassPanelDepthM / 2}\n material={doorMaterial}\n setName=\"2\"\n />\n\n {/* Glass panels */}\n {glassVisible && (\n <>\n <mesh\n position={[0, 0, frontGlassOffsetZ]}\n castShadow\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[doorWidthM, mainDoorHeightM, GlassPanelDepthM]}\n />\n </mesh>\n\n {frameType !== \"WDGF_WDG100\" && frameType !== \"WF_100\" && (\n <mesh\n position={[0, 0, backGlassOffsetZ]}\n castShadow\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[doorWidthM, mainDoorHeightM, GlassPanelDepthM]}\n />\n </mesh>\n )}\n\n {(frameType === \"WDGF_WDG100\" || frameType === \"WF_100\") && (\n <mesh\n position={[\n 0,\n -secondDoorStopWidthM / 2,\n backGlassOffsetZ,\n ]}\n castShadow\n material={glassInfillMaterial}\n >\n <boxGeometry\n args={[\n doorWidthM - 2 * secondDoorStopWidthM,\n mainDoorHeightM - secondDoorStopWidthM,\n GlassPanelDepthM,\n ]}\n />\n </mesh>\n )}\n </>\n )}\n\n {/* Occulus cut */}\n {occulus.visible && occulusWidthM > 0 && occulusHeightM > 0 && (\n <Subtraction\n material={placeholderMaterial}\n position={[occulusPositionXM, occulusPositionYM, 0]}\n >\n <boxGeometry\n args={[occulusWidthM, occulusHeightM, doorDepthM + 0.01]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n\n {frontDoorPlane.visible && (\n <mesh position={[0, 0, doorDepthM / 2 + 0.0005]} castShadow>\n <Geometry useGroups>\n <Base material={dynamicFrontDoorPlaneMaterial}>\n <boxGeometry args={[doorWidthM, mainDoorHeightM, 0.001]} />\n </Base>\n {occulus.visible && occulusWidthM > 0 && occulusHeightM > 0 && (\n <Subtraction\n position={[occulusPositionXM, occulusPositionYM, 0]}\n >\n <boxGeometry\n args={[occulusWidthM, occulusHeightM, 0.002]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n )}\n {backDoorPlane.visible && (\n <mesh position={[0, 0, -doorDepthM / 2 - 0.0005]} castShadow>\n <Geometry useGroups>\n <Base material={dynamicBackDoorPlaneMaterial}>\n <boxGeometry args={[doorWidthM, mainDoorHeightM, 0.0001]} />\n </Base>\n {occulus.visible && occulusWidthM > 0 && occulusHeightM > 0 && (\n <Subtraction\n position={[occulusPositionXM, occulusPositionYM, 0]}\n >\n <boxGeometry\n args={[occulusWidthM, occulusHeightM, 0.002]}\n />\n </Subtraction>\n )}\n </Geometry>\n </mesh>\n )}\n\n {/* Occulus infill */}\n {occulus.visible &&\n occulus.infillVisible &&\n occulusWidthM > 0 &&\n occulusHeightM > 0 && (\n <mesh\n position={[occulusPositionXM, occulusPositionYM, 0]}\n castShadow\n material={occulusInfillMaterial}\n >\n <boxGeometry\n args={[occulusWidthM, occulusHeightM, occulusInfillDepthM]}\n />\n </mesh>\n )}\n\n {/* Door Handle - Positioned correctly relative to the door leaf */}\n <DoorHandle\n bodyType={bodyType}\n handleX={handleX}\n handleHeightM={handleHeightM}\n doorDepthM={doorDepthM}\n doorPivot={pivot}\n />\n </group>\n </a.group>\n </group>\n );\n}\n\nexport default DoorModels;\n","import React from \"react\";\nimport { ConfiguratorProvider } from \"../context/DoorContext\";\nimport DoorModels from \"./DoorModels\";\n\ntype MaterialInputValue = string;\n\ntype MaterialProps = {\n D_SRF_DECOR_2?: MaterialInputValue;\n D_SRF_DECOR?: MaterialInputValue;\n D_PRF_COLOR?: MaterialInputValue;\n D_FR_SRF_DECOR?: MaterialInputValue;\n D_FR_SRF_DECOR_S2?: MaterialInputValue;\n D_FR_COLOR?: MaterialInputValue;\n D_GASKET?: MaterialInputValue;\n};\n\ntype DoorConfiguratorProps = {\n doorName?: string;\n is2D?: boolean;\n materials?: MaterialProps;\n};\n\nconst DoorConfigurator = ({\n doorName,\n is2D = false,\n materials,\n}: DoorConfiguratorProps) => {\n return (\n <ConfiguratorProvider initialIs2D={is2D} initialMaterials={materials}>\n <DoorModels doorName={doorName} />\n </ConfiguratorProvider>\n );\n};\nexport default DoorConfigurator;\n"],"names":["ConfiguratorContext","createContext","undefined","ConfiguratorProvider","_ref","children","initialIs2D","initialMaterials","materials","setMaterials","useState","is2D","setIs2D","isPlaneVisible","setIsPlaneVisible","isFrameVisible","setIsFrameVisible","cpid","setCpid","totalHeight","setTotalHeight","totalWidth","setTotalWidth","glassVisible","setGlassVisible","glassDepth","setGlassDepth","isDoubleDoor","setIsDoubleDoor","door","setDoor","doorMaterial","doorWidth","doorHeight","theDoorDepth","doorPivot","doorOpening","doorFrame","setDoorFrame","frameMaterial","doorStopMaterial","gasketMaterial","hingeMaterial","glassMaterial","frameDepth","topThk","sidesThk","doorStopOffset","doorStopWidth","doorStopDepth","notchWidth","notchDepth","notchposition","gasketDepth","gasketWidth","secondDoorStopWidth","secondDoorStopDepth","secondDoorStopOffset","interiorFanlight","setInteriorFanlight","visible","height","material","exteriorFanlight","setExteriorFanlight","depth","occulus","setOcculus","infillVisible","x1","x2","y1","y2","frontCoverPanel","setFrontCoverPanel","width","backCoverPanel","setBackCoverPanel","frontDoorPlane","setFrontDoorPlane","backDoorPlane","setBackDoorPlane","glass","setGlass","defaultOptions","getFirstValidValue","values","isValid","val","hasValue","frameType","setFrameType","bodyType","setBodyType","exteriorFanlightType","setExteriorFanlightType","testDoorMaterial","setTestDoorMaterial","testFrameMaterial","setTestFrameMaterial","testGasketMaterial","setTestGasketMaterial","testInteriorFanlightMaterial","setTestInteriorFanlightMaterial","testExteriorFanlightMaterial","setTestExteriorFanlightMaterial","testOcculusInfillMaterial","setTestOcculusInfillMaterial","testGlassInfillMaterial","setTestGlassInfillMaterial","testDoorStopMaterial","setTestDoorStopMaterial","testHingeMaterial","setTestHingeMaterial","testFrontCoverPanelMaterial","setTestFrontCoverPanelMaterial","testBackCoverPanelMaterial","setTestBackCoverPanelMaterial","testFrontDoorPlaneMaterial","setTestFrontDoorPlaneMaterial","testBackDoorPlaneMaterial","setTestBackDoorPlaneMaterial","newPivotPosition","setNewPivotPosition","parseMessage","setParseMessage","type","text","useEffect","handleParseCpid","useCallback","cpidToParse","showMessage","arguments","length","setTimeout","trim","startsWith","parts","split","newConfig","fanlightVisible","fanlightType","interiorFanlightVisible","occulusVisible","currentIndex","fanlightPart","validFanlights","includes","prev","_objectSpread","concat","validSimpleFrameTypes","validBodyTypes","framePart","bodyPartRaw","frameFound","tempBody","replace","endsWith","i","newDoorDepth","newMaterial","newSettings","lookupKey","doorDepth","isMxCaf","newFrameSettings","_objectWithoutProperties","_excluded","prevOcculus","topThkValue","parseInt","exteriorFanlightHeight","newDoorHeight","prevDoor","sidesThkValue","numDoors","newDoorWidth","_jsx","Provider","value","useConfigurator","context","useContext","Error","textureLoader","THREE","TextureLoader","isUrl","string","URL","_","createMaterialFromProp","MeshStandardMaterial","color","roughness","texture","load","wrapS","RepeatWrapping","wrapT","map","placeholderMaterial","placeholderMaterialforFrames","availableMaterials","black","aluminum","metalness","envMapIntensity","aluminumBrighter","aluminumExtraBrighter","StandardHandle","position","doorDepthM","roseRadius","roseThickness","handleRadius","handleLength","faceZ","connectorLength","cornerFrontZ","cornerBackZ","roseGapY","_jsxs","z","React","Fragment","castShadow","args","rotation","Math","PI","scale","MergedPlate","_ref2","plateMaterial","geometry","useMemo","leftHalf","BoxGeometry","translate","shape","Shape","radius","moveTo","lineTo","absarc","extrudeSettings","steps","bevelEnabled","ExtrudeGeometry","GlassHandle","_ref3","DoorHandle","_ref4","handleX","handleHeightM","isSingleGlass","handlePos","GlassHinge","_ref5","pivot","frameSideWidth","plateWidth","plateHeight","plateThickness","gasketThickness","pivotRadius","pivotHeight","sideMultiplier","plateOffsetX","holeRadius","holeSpacingX","receiveShadow","Geometry","useGroups","Base","Subtraction","DoorStopCuts","_ref6","stopWidth","stopDepth","stopPositionZ","centerZ","glassDepthOffset","setName","_Fragment","name","DoorModels","_ref7","doorName","doorMaterialName","frameMaterialName","gasketMaterialName","doorStopMaterialName","hingeMaterialName","interiorFanlightMaterialName","exteriorFanlightMaterialName","occulusInfillMaterialName","glassInfillMaterialName","frontCoverPanelMaterialName","backCoverPanelMaterialName","frontDoorPlaneMaterialName","backDoorPlaneMaterialName","pers","dynamicMaterials","key","Object","prototype","hasOwnProperty","call","D_PRF_COLOR","D_FR_SRF_DECOR","D_FR_SRF_DECOR_S2","D_GASKET","interiorFanlightMaterial","D_SRF_DECOR_2","exteriorFanlightMaterial","glassInfillMaterial","D_FR_COLOR","frontCoverPanelMaterial","backCoverPanelMaterial","D_SRF_DECOR","initialDoorHeight","useRef","interiorFanlightHeightValue","exteriorFanlightHeightValue","exteriorFanlightDepthValue","architraveWidth","architraveDepth","interiorFanlightHeight","mainDoorHeight","doorWidthM","mainDoorHeightM","interiorFanlightHeightM","totalOpeningHeightM","frameDepthM","topFrameWidthM","sidesFrameWidthM","totalOpeningWidthM","exteriorFanlightHeightM","exteriorFanlightDepthM","doorStopWidthM","doorStopDepthM","architraveProfileM","architraveDepthM","gasketWidthM","gasketDepthM","doorStopOffsetValue","doorStopOffsetFromEdgeM","notchDepthValue","notchWidthValue","notchWidthM","notchDepthM","isOpeningIn","doorStopPositionZ","gasketZPosition","secondDoorStopWidthM","secondDoorStopDepthM","secondDoorStopPositionZ","secondGasketZPosition","doorCenterZ","gasketBackFaceZ","gasketFrontFaceZ","GlassPanelDepthM","exteriorFanlightZPosition","isOpen","setIsOpen","leftGlass_Z","rightGlass_Z","hingeZ","directionMultiplier","useSpring","config","mass","tension","friction","totalFrameWidth","totalFrameHeightM","current","yCenteringOffset","sideFrameCenterY","interiorFanlightYPosition","topFrameCenterY","topOfFrameY","exteriorFanlightYPosition","frontArchitraveZ","backArchitraveZ","sideArchitraveHeight","sideArchitraveCenterY","leftArchitraveX","rightArchitraveX","topArchitraveY","topArchitraveWidth","topGasketYPosition","leftGasketXPosition","rightGasketXPosition","secondTopGasketYPosition","secondLeftGasketXPosition","secondRightGasketXPosition","isGlassDoor","pivotNewPosition","numHinges","topMargin","bottomMargin","availableHeight","spacing","positions","push","secondTopMargin","top","secondTop","bottom","invisibleFrameTypes","doorInstances","x","side","DoubleSide","instance","DoorLeaf","xOffset","_ref8","occulusInfillMaterial","hingeBodyMaterial","frontDoorPlaneMaterial","backDoorPlaneMaterial","hingeAccentMaterial","initialDoorWidth","occulusX1","occulusX2","occulusY1","occulusY2","occulusInfillDepth","occulusX1M","occulusX2M","occulusY1M","occulusY2M","occulusInfillDepthM","frontGlassOffsetZ","backGlassOffsetZ","occulusWidthM","occulusHeightM","occulusPositionXM","occulusPositionYM","hingeSideX","doorOffsetZ","handleClick","doorYPosition","handleCenterYFromDoorBottom","safeHandleY","min","max","nonHingeSideX","plateHalfWidth","latchMarginM","hingeTotalHeightM","hingeRadiusM","capHeightM","separatorHeightM","barrelPartHeight","standardHingeYPositions","glassHingeYPositions","isStandardHingeVisible","dynamicFrontDoorPlaneMaterial","clone","needsUpdate","initialHeightM","initialWidthM","repeatY","repeatX","repeat","set","console","log","dynamicBackDoorPlaneMaterial","y","index","a","group","to","onClick","onPointerOver","document","body","style","cursor","onPointerOut","DoorConfigurator"],"mappings":"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"}