@swan-admin/swan-web-component 1.0.80 → 1.0.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/atoms/customInput/CustomInput.tsx","../src/components/onboarding/NameStep.tsx","../src/components/onboarding/EmailStep.tsx","../src/components/onboarding/HeightStep.tsx","../src/components/onboarding/GenderStep.tsx","../src/atoms/progressDots/ProgressDots.tsx","../src/utils/deviceFocalLengthJson/index.ts","../src/components/educational/MuseSteps/MuseScreenRenderer.tsx","../src/components/educational/MuseSteps/index.tsx","../src/components/educational/MuseSteps/BodyScanAnimation.tsx","../src/components/educational/MuseSteps/FaceScanAnimation.tsx","../src/components/educational/MuseSteps/TypewritterScene.tsx","../src/customHooks/useMuseAnimation.ts","../src/components/educational/VolumeStep.tsx","../src/components/educational/SetupScreen.tsx","../src/components/educational/Educational.tsx","../src/components/focalLength/FocalLength.tsx","../src/components/onboarding/Onboarding.tsx"],"sourcesContent":["import * as React from \"react\";\n\n/** Lightweight classnames helper to avoid depending on ../../utils/utils */\nconst cn = (...classes: Array<string | false | null | undefined>) =>\n classes.filter(Boolean).join(\" \");\n\nexport interface CustomInputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n className?: string;\n type?: string;\n resolvedConfig?: any;\n}\n\nconst CustomInput = React.forwardRef<HTMLInputElement, CustomInputProps>(\n ({ className, resolvedConfig, type, ...props }, ref) => (\n <>\n <input\n type={type}\n className={`${className ? className : ''} customInput ` + cn(\n \"flex w-full px-[.75rem] h-[40px] text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed backdrop-blur-sm bg-btn font-medium pl-[1rem] pr-[2.5rem] focus:ring-1 focus:outline-none transition-all duration-200\",\n \n )}\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n ref={ref}\n {...props}\n style={{\n background: resolvedConfig?.style?.input?.inputBackgroundColor || '#F9FAFC',\n color: resolvedConfig?.style?.input?.inputTextColor || '#000',\n fontSize: resolvedConfig?.style?.input?.inputFontSize || '16px',\n fontWeight: resolvedConfig?.style?.input?.inputFontWeight || '400',\n border: `1px solid ${resolvedConfig?.style?.input?.inputBorderColor || 'transparent'}`,\n fontFamily: resolvedConfig?.style?.base?.baseFontFamily || 'Inter, sans-serif',\n borderRadius: resolvedConfig?.style?.input?.inputBorderRadius || '4px',\n }}\n />\n <style>\n {`\n .customInput::placeholder {\n color: ${resolvedConfig?.style?.input?.inputPlaceholderColor || '#000'};\n font-weight: ${resolvedConfig?.style?.input?.inputFontWeight || '500'};\n opacity: 1;\n font-size: ${resolvedConfig?.style?.input?.inputFontSize || '14px'};\n }\n .customInput:focus-visible {\n box-shadow:0 0 0 2px white, 0 0 0 4px rgb(from currentColor r g b / 0.5);\n }\n \n `}\n </style>\n </>\n )\n );\n\n CustomInput.displayName = \"CustomInput\";\n\n export default CustomInput;\n","import CustomInput from \"../../atoms/customInput/CustomInput\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\nimport { handleErrorMessage } from \"../../utils/utils\";\nimport { ArrowRight } from \"lucide-react\";\nimport React from \"react\";\n\n\ninterface NameStepProps {\n\tonComplete: (value: any) => void;\n\tinitialValue?: any;\n\tresolvedConfig?: any;\n\tonStepComplete?: (value: any) => Promise<void> | void;\n}\nconst NameStep = ({ onComplete, initialValue, resolvedConfig, onStepComplete }: NameStepProps) => {\n\tconst [value, setValue] = React.useState(initialValue || \"\");\n\tconst [message, setMessage] = React.useState<string | undefined>(undefined);\n\t const [loading, setLoading] = React.useState(false);\n\tconst handleNext = async (e: React.FormEvent<HTMLFormElement>) => {\n\t\te.preventDefault();\n\t\tsetLoading(true);\n\t\ttry {\n\t\t\tif (!value.trim()) {\n\t\t\t\tsetMessage(\"Name is required.\");\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tawait onStepComplete?.(value);\n\t\t\t\tonComplete?.(value);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsetMessage(handleErrorMessage(error));\n\t\t}finally{\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\treturn (\n\t\t<div className=\"w-full max-w-md\">\n\t\t\t<form onSubmit={handleNext} className=\"mt-[3.5rem] mb-[.75rem]\">\n\t\t\t\t<div>\n\t\t\t\t\t<CustomInput\n\t\t\t\t\t\trequired\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tid=\"name\"\n\t\t\t\t\t\tplaceholder=\"Enter your name\"\n\t\t\t\t\t\tresolvedConfig={resolvedConfig}\n\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\tsetValue(e.target.value);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t{message && <p className=\"mt-[0.2rem] text-[16px]\"\n style={{\n color: resolvedConfig?.style?.input?.inputErrorColor || '#000',\n fontSize: resolvedConfig?.style?.input?.inputErrorFontSize || '16px',\n }}\n >{message}</p>}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex justify-end mt-[.5rem]\">\n\t\t\t\t\t<SpecificButton disabled={!value.trim() || loading} resolvedConfig={resolvedConfig} buttonText={\"Next\"} type=\"submit\" postfixIcon={<ArrowRight size={14} />} />\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t);\n};\n\nexport default NameStep;\n","import CustomInput from \"../../atoms/customInput/CustomInput\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\nimport { handleErrorMessage, isValidEmail } from \"../../utils/utils\";\nimport { ArrowRight } from \"lucide-react\";\nimport React from \"react\";\n\ninterface EmailStepProps {\n\tonComplete: (value: any) => void;\n initialValue?: any;\n resolvedConfig?: any;\n onStepComplete?: (value: any) => Promise<void> | void;\n}\n\nconst EmailStep = ({ onComplete, initialValue, resolvedConfig,onStepComplete }: EmailStepProps) => {\n const [value, setValue] = React.useState(initialValue || \"\");\n const [message, setMessage] = React.useState<string | undefined>(undefined);\n const [loading, setLoading] = React.useState(false);\n const handleNext = async(e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n setLoading(true);\n try {\n if (!value.trim()) {\n setMessage(\"Email is required.\");\n return; \n }else if (!isValidEmail(value.trim())){\n setMessage(\"Please enter a valid email address.\")\n }else{\n await onStepComplete?.(value);\n onComplete?.(value);\n }\n } catch (error) {\n setMessage(handleErrorMessage(error))\n }finally{\n setLoading(false);\n }\n \n }\n\treturn (\n\t\t<div className=\"w-full max-w-md\">\n\t\t\t<form className=\"mt-[3.5rem]\" onSubmit={handleNext}>\n\t\t\t\t<div>\n\t\t\t\t\t<CustomInput\n\t\t\t\t\t\trequired\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tid=\"name\"\n\t\t\t\t\t\tplaceholder=\"Enter your email\"\n\t\t\t\t\t\tresolvedConfig={resolvedConfig}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={(e) => {\n setMessage(undefined);\n setValue(e.target.value);\n }}\n\t\t\t\t\t/>\n\t\t\t\t\t{message && <p \n style={{\n color: resolvedConfig?.style?.input?.inputErrorColor || '#000',\n fontSize: resolvedConfig?.style?.input?.inputErrorFontSize || '16px',\n }}\n >{message}</p>}\n\t\t\t\t</div>\n <div className=\"flex justify-end mt-[.5rem]\">\n <SpecificButton type=\"submit\" disabled={!value.trim() || loading} resolvedConfig={resolvedConfig} buttonText={\"Next\"} \n postfixIcon={<ArrowRight size={14} />}\n />\n </div>\n\t\t\t</form>\n\t\t</div>\n\t);\n};\n\nexport default EmailStep;\n","import CustomInput from \"../../atoms/customInput/CustomInput\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\nimport { HeightStepProps } from \"../../types/interfaces\";\nimport { convertToCentimeters, handleErrorMessage } from \"../../utils/utils\";\nimport { MenuItem, Select } from \"@mui/material\";\nimport { ArrowRight } from \"lucide-react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\n\nconst HeightStep = ({ onComplete, initialValue, resolvedConfig, onStepComplete }: HeightStepProps) => {\n\tconst [localHeight, setLocalHeight] = useState({ cm: initialValue ? String(initialValue) : \"\", ft: \"\", inch: \"\" });\n\tconst [measurementUnit, setMeasurementUnit] = useState(\"cm\");\n\tconst [message, setMessage] = useState<string | undefined>(undefined);\n\tconst handleSetHeight = useCallback(\n\t\t(event: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tsetMessage(undefined);\n\t\t\tif (measurementUnit === \"cm\") {\n\t\t\t\tsetLocalHeight((prev) => ({ ...prev, cm: event.target.value, ft: \"\", inch: \"\" }));\n\t\t\t} else if (event.target.id === \"ft\") {\n\t\t\t\tsetLocalHeight((prev) => ({ ...prev, ft: event.target.value, cm: \"\" }));\n\t\t\t} else {\n\t\t\t\tsetLocalHeight((prev) => ({ ...prev, inch: event.target.value, cm: \"\" }));\n\t\t\t}\n\t\t},\n\t\t[measurementUnit],\n\t);\n\n\tconst handleMeasurementUnit = useCallback((event: any) => {\n\t\tconst val = event.target.value;\n\t\tsetMeasurementUnit(val);\n\t\tsetLocalHeight({ cm: \"\", ft: \"\", inch: \"\" });\n\t\tsetMessage(undefined);\n\t}, []);\n\tconst validateHeight = useCallback(\n\t\t(height: { cm: string; ft: string; inch: string }) => {\n\t\t\tif (measurementUnit === \"cm\") {\n\t\t\t\treturn !(+height.cm < 152.4 || +height.cm > 213.36);\n\t\t\t}\n\t\t\treturn !(convertToCentimeters(+height.ft, +height.inch) < 152.4 || convertToCentimeters(+height.ft, +height.inch) > 213.36);\n\t\t},\n\t\t[measurementUnit],\n\t);\n\n\tconst checkMeasurement = useCallback(async () => {\n\t\ttry {\n\t\t\tif (!validateHeight(localHeight)) {\n\t\t\t\t// setError(true);\n\t\t\t\tsetMessage(\"We're sorry, we currently don't support this heights outside of 5 ft & 7 ft. We're working on new models that do\")\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t const height ={cm:+localHeight.cm, ft:+localHeight.ft, inch:+localHeight.inch};\n\t\t\tawait onStepComplete?.(height);\n\t\t\tonComplete?.(height);\n\t\t} catch (error) {\n\t\t\tsetMessage(handleErrorMessage(error));\n\t\t}\n\t}, [localHeight, validateHeight, onStepComplete]);\n\tconst isButtonDisabled = useMemo(() => (!localHeight.cm && !localHeight.ft && !localHeight.inch) || !!message, [localHeight, message]);\n\tuseEffect(() => {\n\t\tif (localHeight.cm === \"\" && localHeight.ft !== \"\") {\n\t\t\tsetMeasurementUnit(\"ft\");\n\t\t}\n\t}, [localHeight]);\n\tconst renderHeightInput = useCallback(() => {\n\t\tif (measurementUnit === \"cm\") {\n\t\t\treturn (\n\t\t\t\t<div className={`w-full`}>\n\t\t\t\t\t<CustomInput\n\t\t\t\t\t\trequired\n\t\t\t\t\t\t// variant=\"filled\"\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tid=\"cm\"\n\t\t\t\t\t\tplaceholder={\"Height\"}\n\t\t\t\t\t\tclassName=\"!pr-[10px]\"\n\t\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\t\tvalue={localHeight.cm}\n\t\t\t\t\t\tonChange={handleSetHeight}\n resolvedConfig={resolvedConfig}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex gap-[.5rem]\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<CustomInput\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t// variant=\"filled\"\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tid=\"ft\"\n\t\t\t\t\t\t\t// error={error}\n\t\t\t\t\t\t\tclassName=\"!pr-[10px]\"\n\t\t\t\t\t\t\tplaceholder={\"Height in ft\"}\n\t\t\t\t\t\t\tvalue={localHeight.ft}\n\t\t\t\t\t\t\tonChange={handleSetHeight}\n resolvedConfig={resolvedConfig}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<CustomInput\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t// variant=\"filled\"\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tid=\"inch\"\n\t\t\t\t\t\t\t// error={error}\n\t\t\t\t\t\t\tclassName=\"!pr-[10px]\"\n\t\t\t\t\t\t\tplaceholder={\"Height in inch\"}\n\t\t\t\t\t\t\tvalue={localHeight.inch}\n\t\t\t\t\t\t\tonChange={handleSetHeight}\n resolvedConfig={resolvedConfig}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t}, [localHeight]);\n\treturn (\n\t\t<div className=\"h-full w-full\">\n\t\t\t<div className=\"mt-[3.5rem] mb-[.75rem]\">\n\t\t\t\t<div className=\"w-full flex gap-[.5rem]\">\n\t\t\t\t\t{renderHeightInput()}\n\t\t\t\t\t<Select\n\t\t\t\t\t\tclassName=\"bg-btn outline-none h-[40px] [&_svg]:text-base !shadow-none !outline-none !text-base\"\n\t\t\t\t\t\tvalue={measurementUnit}\n\t\t\t\t\t\tonChange={handleMeasurementUnit}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground: resolvedConfig?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\t\tborder: `1px solid ${resolvedConfig?.style?.input?.inputBorderColor || \"transparent\"}`,\n\t\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n borderRadius: resolvedConfig?.style?.input?.inputBorderRadius || '4px',\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MenuItem value=\"cm\">cm</MenuItem>\n\t\t\t\t\t\t<MenuItem value=\"ft\">ft</MenuItem>\n\t\t\t\t\t</Select>\n\t\t\t\t\t<style>\n\t\t\t\t\t\t{`\n .MuiOutlinedInput-notchedOutline {\n border: 1px solid ${resolvedConfig?.style?.input?.inputBorderColor || \"transparent\"} !important;\n outline: none;\n }\n .MuiSelect-select{\n outline: none;\n }\n \n `}\n\t\t\t\t\t</style>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"mt-2\"\n style={{\n color: resolvedConfig?.style?.input?.inputErrorColor || '#000',\n fontSize: resolvedConfig?.style?.input?.inputErrorFontSize || '16px',\n }}\n >{ message}</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex justify-end\">\n\t\t\t\t<SpecificButton resolvedConfig={resolvedConfig} disabled={isButtonDisabled} buttonFunc={checkMeasurement} buttonText={\"Next\"} postfixIcon={<ArrowRight size={14} />} />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default HeightStep;\n","import SpecificButton from \"../../atoms/specificButton/SpecificButton\";\nimport { GenderStepProps } from \"../../types/interfaces\";\nimport { GenderType } from \"../../utils/enums\";\nimport { handleErrorMessage } from \"../../utils/utils\";\nimport { ArrowRight } from \"lucide-react\";\nimport React, { useState } from \"react\";\n\n\nconst GenderStep = ({ onComplete, initialValue, resolvedConfig, onStepComplete }: GenderStepProps) => {\n\tconst [genderType, setGenderType] = useState<GenderType>(initialValue);\n\tconst [message, setMessage] = React.useState<string | undefined>(undefined);\n const [loading, setLoading] = React.useState(false);\n\n\tconst handleNext = async () => { \n setLoading(true);\n setMessage(undefined);\n\t\ttry {\n\t\t\tawait onStepComplete?.(genderType);\n\t\t\tonComplete?.(genderType);\n\t\t} catch (error) {\n\t\t\tconsole.log(error, \"gener\");\n setMessage(handleErrorMessage(error));\n\t\t}finally{\n setLoading(false);\n }\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\" w-full flex flex-col max-w-md mt-[3.5rem] mb-[.75rem] gap-[1rem]\">\n\t\t\t\t<button\n\t\t\t\t\tclassName={` text-btnSize bg-btn text-base cursor-pointer text-sm border leading-none rounded-[.375rem] focus-visible:ring-secondary p-[1rem] ${\n\t\t\t\t\t\tgenderType === GenderType.Male ? ` shadow-[0_1px_1px_rgba(0,0,0,0.251)]` : \"\"\n\t\t\t\t\t}`}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tsetGenderType(GenderType.Male);\n setMessage(undefined);\n\t\t\t\t\t}}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: resolvedConfig?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${genderType === GenderType.Male ? resolvedConfig?.style?.base?.primaryColor : `transparent`}`,\n\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n borderRadius: resolvedConfig?.style?.input?.inputBorderRadius || '4px',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tMen's\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tclassName={`text-btnSize font-btnFont cursor-pointer leading-none rounded-[.375rem] focus-visible:ring-secondary p-[1rem] ${\n\t\t\t\t\t\tgenderType === GenderType.Female ? ` shadow-[0_1px_1px_rgba(0,0,0,0.251)]` : \"\"\n\t\t\t\t\t}`}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tsetGenderType(GenderType.Female);\n setMessage(undefined);\n\t\t\t\t\t}}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: resolvedConfig?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${genderType === GenderType.Female ? resolvedConfig?.style?.base?.primaryColor : `transparent`}`,\n\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n borderRadius: resolvedConfig?.style?.input?.inputBorderRadius || '4px',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tWomen's\n\t\t\t\t</button>\n\t\t\t\t{message && <p className=\"mt-[0.2rem]\"\n style={{\n color: resolvedConfig?.style?.input?.inputErrorColor || '#000',\n fontSize: resolvedConfig?.style?.input?.inputErrorFontSize || '16px',\n }}\n >{message}</p>}\n\t\t\t</div>\n\t\t\t<div className=\"flex justify-end mt-[.5rem]\">\n\t\t\t\t<SpecificButton type=\"submit\" resolvedConfig={resolvedConfig} buttonText={\"Next\"} postfixIcon={<ArrowRight size={14} />} disabled={!genderType || loading} buttonFunc={handleNext} />\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default GenderStep;\n","import React, { useMemo } from \"react\";\n\ninterface ProgressDotsProps {\n totalSteps: number;\n currentStepIndex: number;\n resolvedConfig?: any;\n}\n\nconst ProgressDots: React.FC<ProgressDotsProps> = ({\n totalSteps,\n currentStepIndex,\n resolvedConfig\n}) => {\n const activeColor = resolvedConfig?.style?.base?.primaryColor || \"#000\";\n const inactiveColor = resolvedConfig?.style?.base?.secondaryColor || \"#D9D9D9\";\n\n const dots = useMemo(\n () =>\n Array.from({ length: totalSteps }, (_, i) => ({\n index: i,\n isActive: i === currentStepIndex,\n isCompleted: i < currentStepIndex\n })),\n [totalSteps, currentStepIndex]\n );\n\n return (\n <div className=\"flex justify-center items-center gap-[4px] my-[1.5rem]\">\n {dots.map(({ index, isActive, isCompleted }) => (\n <div\n key={index}\n className={`h-[3px] rounded-[9999px] transition-all duration-300 ${\n isActive ? \"w-[50px]\" : \"w-[30px]\"\n }`}\n style={{\n backgroundColor: isCompleted || isActive ? activeColor : inactiveColor\n }}\n />\n ))}\n </div>\n );\n};\n\nexport default ProgressDots;\n","import Alcatel from \"./Alcatel.json\"\nimport Apple from \"./Apple.json\"\nimport CAT from \"./CAT.json\"\nimport Fairphone from \"./Fairphone.json\"\nimport Fujitsu from \"./Fujitsu.json\"\nimport Google from \"./Google.json\"\nimport Huawei from \"./Huawei.json\"\nimport iTel from \"./iTel.json\"\nimport Lava from \"./Lava.json\"\nimport Lg from \"./Lg.json\"\nimport Motorola from \"./Motorola.json\"\nimport NokiaHmd from \"./NokiaHmd.json\"\nimport Nothing from \"./Nothing.json\"\nimport Olla from \"./Olla.json\"\nimport Oneplus from \"./Oneplus.json\"\nimport Oppo from \"./Oppo.json\"\nimport Realme from \"./Realme.json\"\nimport Samsung from \"./Samsung.json\"\nimport Sharp from \"./Sharp.json\"\nimport Sony from \"./Sony.json\"\nimport Tecno from \"./Tecno.json\"\nimport Vivo from \"./Vivo.json\"\nimport Vsmart from \"./Vsmart.json\"\nimport Wiko from \"./Wiko.json\"\nimport Xiaomi from \"./Xiaomi.json\"\n\n\n\n\nconst DevicesList=[\n Alcatel,Apple,CAT,Fairphone,Fujitsu,Google,Huawei,iTel,Lava,Lg,Motorola,NokiaHmd,Nothing,Olla,Oneplus,Oppo,Realme,Samsung,Sharp,Sony,\n Tecno,Vivo,Vsmart,Wiko,Xiaomi\n\n]\n \n\nexport default DevicesList\n","import React, { memo } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nexport default function MuseScreenRenderer({\n screenIndex,\n scanLinePosition,\n faceZoomed,\n showFaceScanLine,\n faceScanLinePosition,\n showLargeS,\n typewriterText,\n fullText,\n screens,\n videoToShow,\n faceScanVideo,\n sizeVideo,\n formFittingVideo,\n}: any) {\n const screen = screens[screenIndex];\n\n // Map screen id to props for each component\n const componentProps: any = {\n body: { scanLinePosition, videoToShow },\n face: {\n faceZoomed,\n showFaceScanLine,\n faceScanLinePosition,\n faceScanVideo,\n },\n sizeFit: { showLargeS, typewriterText, fullText, sizeVideo },\n };\n\n const hasComponent = !!screen.component;\n const Comp = hasComponent ? screen.component : null;\n\n let content = null;\n if (hasComponent) {\n content = React.createElement(\n Comp.type || Comp,\n componentProps[screen.id] || {}\n );\n } else if (screen.image) {\n content = (\n <video\n className=\"h-full w-full object-contain border-none\"\n muted\n loop\n autoPlay\n playsInline\n preload=\"auto\"\n >\n <source src={formFittingVideo} type=\"video/mp4\" />\n </video>\n );\n }\n\n return (\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={screenIndex}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -20 }}\n transition={{ duration: 0.4 }}\n className=\"w-full h-full\"\n >\n {content}\n </motion.div>\n </AnimatePresence>\n );\n}\n","import { ArrowRight } from \"lucide-react\";\nimport BodyScanAnimation from \"./BodyScanAnimation\";\nimport FaceScanAnimation from \"./FaceScanAnimation\";\nimport TypewriterScene from \"./TypewritterScene\";\nimport { useMemo, useState } from \"react\";\nimport MuseScreenRenderer from \"./MuseScreenRenderer\";\nimport Header from \"../../Header\";\nimport { GenderType, MuseScreenStep } from \"../../../utils/enums\";\nimport { bodyScanPerson, faceScanPerson, faceScanVideo, femaleScanVideo, fittingGuide, formFittingGuide, fullText, leSableDress, maleFaceScanVideo, maleFormFittingGuide, maleScanVideo, maleSizeSuggestions, OUTFIT_IMAGES, sizeSuggestions } from \"../../../utils/constants\";\nimport { MuseStepsProps } from \"../../../types/interfaces\";\nimport useMuseAnimations from \"../../../customHooks/useMuseAnimation\";\nimport SpecificButton from \"../../../atoms/specificButton/SpecificButton\";\n\n\n\n\nconst screens: {\n id: string;\n title: string;\n description: string;\n image: string;\n component?: React.ReactNode;\n}[] = [\n {\n id: MuseScreenStep.Body,\n title: \"First a Body Scan\",\n description: \"To accurately take your measurements\",\n image: bodyScanPerson,\n component: <BodyScanAnimation />,\n },\n {\n id: MuseScreenStep.Face,\n title: \"Face Scan\",\n description: \"To precisely recreate your facial features\",\n image: faceScanPerson,\n component: <FaceScanAnimation />,\n },\n {\n id: MuseScreenStep.SizeFit,\n title: \"See & size anything on your Muse\",\n description: \"\",\n image: leSableDress,\n component: <TypewriterScene />,\n },\n {\n id: MuseScreenStep.Ready,\n title: \"Ready to start?\",\n description:\n \"To get accurate measurements, make sure to wear form-fitting clothing\",\n image: fittingGuide,\n },\n];\n\n\nexport default function MuseSteps({\n applicableScreens,\n config,\n gender,\n handleNext,\n}: MuseStepsProps) {\n const [currentScreen, setCurrentScreen] = useState(0);\n const [scanLinePosition, setScanLinePosition] = useState(0);\n const [faceZoomed, setFaceZoomed] = useState(false);\n const [faceScanLinePosition, setFaceScanLinePosition] = useState(0);\n const [showFaceScanLine, setShowFaceScanLine] = useState(false);\n const [currentOutfit, setCurrentOutfit] = useState(0);\n const [typewriterText, setTypewriterText] = useState(\"\");\n const [showLargeS, setShowLargeS] = useState(false);\n\n const screensToShow = useMemo(() => {\n if (!applicableScreens?.length) {\n return screens;\n }\n return screens.filter((screen) => applicableScreens.includes(screen.id));\n }, [applicableScreens]);\n\n useMuseAnimations({\n screenId: screensToShow[currentScreen].id,\n setScanLinePosition,\n setFaceZoomed,\n setShowFaceScanLine,\n setFaceScanLinePosition,\n setCurrentOutfit,\n setTypewriterText,\n setShowLargeS,\n outfitImages: OUTFIT_IMAGES,\n fullText,\n });\n\n const onNextClick = () => {\n if (currentScreen < screensToShow.length - 1) {\n setCurrentScreen((prev) => prev + 1);\n } else {\n handleNext?.();\n }\n };\n return (\n <div\n className=\"relative h-full max-w-[28rem] mx-auto w-full flex justify-center\"\n style={{ background: config?.style?.base?.backgroundColor }}\n >\n \n \n <div className=\"absolute bottom-0 left-0 right-0 h-full shadow-lg \">\n <div className=\"h-full flex flex-col p-[1rem] w-full\">\n <Header noTitle resolvedConfig={config} />\n <div className=\"text-center pb-[.5rem]\">\n <h1\n style={{\n fontFamily:\n config?.style?.heading?.headingFontFamily ||\n \"SeriouslyNostalgic Fn\",\n fontSize: config?.style?.heading?.headingFontSize || \"32px\",\n color: config?.style?.heading?.headingColor || \"#000\",\n fontWeight:\n config?.style?.heading?.headingFontWeight || \"normal\",\n }}\n >\n {screensToShow[currentScreen].title}\n </h1>\n {screensToShow[currentScreen].description && (\n <p\n className=\" mt-[.25rem] max-w-[280px] mx-auto min-h-[40px]\"\n style={{\n fontFamily:\n config?.style?.subheading?.subheadingFontFamily ||\n \"'Inter', sans-serif\",\n fontSize:\n config?.style?.subheading?.subheadingFontSize || \"14px\",\n color:\n config?.style?.subheading?.subheadingColor || \"#4b5563\",\n fontWeight:\n config?.style?.subheading?.subheadingFontWeight || \"normal\",\n }}\n >\n {screensToShow[currentScreen].description}\n </p>\n )}\n </div>\n <div className=\"flex-1 flex justify-center items-center overflow-hidden py-[1rem] relative\">\n <MuseScreenRenderer\n screenIndex={currentScreen}\n scanLinePosition={scanLinePosition}\n faceZoomed={faceZoomed}\n showFaceScanLine={showFaceScanLine}\n faceScanLinePosition={faceScanLinePosition}\n outfitImages={OUTFIT_IMAGES}\n currentOutfit={currentOutfit}\n showLargeS={showLargeS}\n typewriterText={typewriterText}\n fullText={fullText}\n screens={screensToShow}\n videoToShow={\n gender === GenderType.Male ? maleScanVideo : femaleScanVideo\n }\n faceScanVideo={\n gender === GenderType.Male ? maleFaceScanVideo : faceScanVideo\n }\n sizeVideo={\n gender === GenderType.Male\n ? maleSizeSuggestions\n : sizeSuggestions\n }\n formFittingVideo={\n gender === GenderType.Male\n ? maleFormFittingGuide\n : formFittingGuide\n }\n />\n </div>\n\n <div className=\"pt-[.5rem] flex justify-end\">\n <SpecificButton\n resolvedConfig={config}\n buttonText={\"Next\"}\n type=\"submit\"\n postfixIcon={<ArrowRight size={14} />}\n buttonFunc={onNextClick}\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","export default function BodyScanAnimation({\n videoToShow,\n}: {\n videoToShow?: string;\n}) {\n return (\n <div className=\"relative w-full h-full\">\n <video\n className=\"h-full w-full object-contain border-none\"\n muted\n autoPlay\n loop\n playsInline\n >\n <source src={videoToShow} type=\"video/mp4\" />\n </video>\n </div>\n );\n}\n","import { FaceScanAnimationProps } from \"../../../types/interfaces\";\n\nexport default function FaceScanAnimation({\n faceZoomed,\n showFaceScanLine,\n faceScanLinePosition,\n faceScanVideo,\n}: FaceScanAnimationProps) {\n return (\n <div className=\"relative h-full w-full\">\n <div className=\"w-full h-full relative\">\n <video\n className=\"h-full w-full object-contain border-none\"\n muted\n autoPlay\n playsInline\n >\n <source src={faceScanVideo} type=\"video/mp4\" />\n </video>\n {showFaceScanLine && faceZoomed && (\n <div\n className=\"absolute w-[1px] bg-[#8B5CF6] shadow-[0_0_8px_rgba(139,92,246,0.8)] z-20\"\n style={{\n left: `${faceScanLinePosition}%`,\n top: \"0%\",\n height: \"40%\",\n opacity:\n faceScanLinePosition && faceScanLinePosition >= 0 ? 1 : 0,\n }}\n />\n )}\n </div>\n </div>\n );\n}\n","export default function TypewriterScene({ sizeVideo }: { sizeVideo?: string }) {\n return (\n <div className=\"relative w-full h-full flex justify-center items-center\">\n <video\n className=\"h-full w-full object-contain border-none\"\n muted\n loop\n autoPlay\n playsInline\n >\n <source src={sizeVideo} type=\"video/mp4\" />\n </video>\n </div>\n );\n}\n","import { useEffect, useRef } from \"react\";\n\nfunction useMuseAnimations({\n screenId,\n setScanLinePosition,\n setFaceZoomed,\n setShowFaceScanLine,\n setFaceScanLinePosition,\n setCurrentOutfit,\n outfitImages,\n setTypewriterText,\n setShowLargeS,\n fullText,\n}: any) {\n const animationRefs = useRef<any>({\n scan: null,\n face: null,\n outfit: null,\n typewriter: null,\n });\n\n const cleanupAnimations = () => {\n Object.values(animationRefs.current).forEach((ref: any) => {\n if (typeof ref === \"number\") {\n cancelAnimationFrame(ref);\n } else if (ref) {\n clearTimeout(ref);\n clearInterval(ref);\n }\n });\n animationRefs.current = {\n scan: null,\n face: null,\n outfit: null,\n typewriter: null,\n };\n };\n\n useEffect(() => {\n cleanupAnimations();\n\n switch (screenId) {\n case \"body\": {\n const startTime = Date.now();\n const duration = 3000;\n\n const animateScanLine = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n setScanLinePosition(progress * 100);\n if (progress < 1) {\n animationRefs.current.scan = requestAnimationFrame(animateScanLine);\n }\n };\n\n animationRefs.current.scan = requestAnimationFrame(animateScanLine);\n break;\n }\n\n case \"face\": {\n setFaceZoomed(false);\n setShowFaceScanLine(false);\n setFaceScanLinePosition(0);\n\n animationRefs.current.face = setTimeout(() => {\n setFaceZoomed(true);\n\n setTimeout(() => {\n setShowFaceScanLine(true);\n\n const startTime = Date.now();\n const duration = 6000; // ✅ Total 6s (3s for each direction)\n\n const animateFaceScanLine = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n\n setFaceScanLinePosition(\n progress <= 0.5 ? progress * 2 * 100 : (2 - progress * 2) * 100\n );\n\n if (progress < 1) {\n animationRefs.current.face =\n requestAnimationFrame(animateFaceScanLine);\n }\n };\n\n animationRefs.current.face =\n requestAnimationFrame(animateFaceScanLine);\n }, 2500); // Delay after zoom\n }, 800); // Delay before zoom\n break;\n }\n\n case \"sizeFit\": {\n setCurrentOutfit(0);\n animationRefs.current.outfit = setInterval(() => {\n setCurrentOutfit((prev: any) => (prev + 1) % outfitImages.length);\n }, 1500);\n break;\n }\n\n case \"ready\": {\n setShowLargeS(false);\n setTypewriterText(\"\");\n\n animationRefs.current.typewriter = setTimeout(() => {\n setShowLargeS(true);\n setTimeout(() => {\n let currentIndex = 0;\n const typeNextChar = () => {\n if (currentIndex < fullText.length) {\n setTypewriterText(fullText.slice(0, currentIndex + 1));\n currentIndex++;\n animationRefs.current.typewriter = setTimeout(typeNextChar, 30);\n }\n };\n typeNextChar();\n }, 1000);\n }, 800);\n break;\n }\n\n default:\n break;\n }\n\n return cleanupAnimations;\n }, [screenId]);\n}\n\nexport default useMuseAnimations;\n","import { ArrowRight, Volume2 } from \"lucide-react\";\nimport { useState, useEffect } from \"react\";\nimport Header from \"../Header\";\nimport { VolumeStepProps } from \"../../types/interfaces\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\n\n\nexport default function VolumeScreen({\n handleNext,\n config,\n}: VolumeStepProps) {\n const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });\n const [isAnimationPaused, setIsAnimationPaused] = useState(false);\n\n useEffect(() => {\n const handleMouseMove = (e: any) => {\n setMousePosition({ x: e.clientX, y: e.clientY });\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n return () => window.removeEventListener(\"mousemove\", handleMouseMove);\n }, []);\n\n const toggleAnimationPause = () => {\n setIsAnimationPaused((prev) => !prev);\n };\n\n function hexToRgba(hex: string, alpha: number = 1): string {\n hex = hex.replace(\"#\", \"\");\n\n if (hex.length === 3) {\n hex = hex\n .split(\"\")\n .map((h) => h + h)\n .join(\"\");\n }\n\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n const brandColor = config?.style?.base?.brandColor || \"#000\";\n const rgba1 = hexToRgba(brandColor, 0.19);\n const rgba2 = hexToRgba(brandColor, 0.23);\n const rgba3 = hexToRgba(brandColor, 0.24);\n\n const calculateHolographicEffect = () => {\n const windowWidth =\n typeof window !== \"undefined\" ? window.innerWidth : 1000;\n const windowHeight =\n typeof window !== \"undefined\" ? window.innerHeight : 1000;\n const normalizedX = (mousePosition.x / windowWidth) * 2 - 1;\n const normalizedY = (mousePosition.y / windowHeight) * 2 - 1;\n const rotateX = normalizedY * 5;\n const rotateY = normalizedX * -5;\n\n return {\n transform: `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`,\n background: \"#fff\",\n boxShadow: `0 0 20px ${rgba1}, 0 0 30px ${rgba2}`,\n };\n };\n\n const holographicStyle = calculateHolographicEffect();\n\n return (\n <div\n className=\"flex h-full max-w-[28rem] mx-auto w-full flex-col relative items-center justify-center overflow-hidden max-w-md mx-auto bg-primary text-base\"\n style={{ background: config?.style?.base?.backgroundColor }}\n >\n <div className=\"flex justify-start absolute z-[99] top-[1rem] max-w-md mx-auto w-full px-[1rem]\">\n <Header noTitle resolvedConfig={config} />\n </div>\n <div className=\"relative mb-[2rem]\">\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className=\"absolute rounded-[9999px]\"\n style={{\n width: \"100px\",\n height: \"100px\",\n minHeight: \"100px\",\n minWidth: \"100px\",\n background: config?.style?.base?.backgroundColor || \"#fff\",\n boxShadow: `0 0 20px 2px ${rgba3}`,\n border: \"none\",\n filter: \"blur(1px)\",\n margin: \"0 auto\",\n left: \"50%\",\n top: \"50%\",\n animation: isAnimationPaused\n ? \"none\"\n : `gentleRipple 15s cubic-bezier(0.1, 0.5, 0.2, 1) ${\n i * 5\n }s infinite`,\n opacity: isAnimationPaused ? 1 : 0,\n transform: isAnimationPaused\n ? \"translate(-50%, -50%) scale(0.5)\"\n : \"translate(-50%, -50%)\",\n }}\n />\n ))}\n\n <div\n className=\"relative z-10 rounded-[9999px] p-[1.5rem] cursor-pointer transition-all backdrop-blur-sm\"\n style={{\n ...holographicStyle,\n transition: \"transform 0.1s ease-out, box-shadow 0.1s ease-out\",\n }}\n onClick={toggleAnimationPause}\n >\n <Volume2\n className=\"w-[3rem] h-[3rem] relative z-10\"\n style={{ filter: \"drop-shadow(0 0 5px rgba(255, 255, 255, 0.7))\" }}\n color={config?.style?.base?.primaryColor || \"#000\"}\n />\n </div>\n </div>\n\n <div className=\"relative z-10 text-center max-w-[20rem]\">\n <div\n className=\" mb-[.5rem]\"\n style={{\n fontFamily:\n config?.style?.subheading?.subheadingFontFamily ||\n \"'Inter', sans-serif\",\n fontSize: config?.style?.subheading?.subheadingFontSize || \"14px\",\n color: config?.style?.subheading?.subheadingColor || \"#4b5563\",\n fontWeight:\n config?.style?.subheading?.subheadingFontWeight || \"normal\",\n }}\n >\n Please turn up your volume to hear the guide\n </div>\n </div>\n\n <div className=\"absolute bottom-[1rem] right-0 max-w-[28rem] mx-auto w-full px-[1rem] max-w-md mx-auto\">\n <div className=\"flex justify-end\">\n <SpecificButton\n buttonFunc={() => handleNext()}\n postfixIcon={<ArrowRight />}\n buttonText=\"Continue\"\n resolvedConfig={config}\n />\n </div>\n {/* )} */}\n </div>\n <style>{`\n @keyframes gentleRipple {\n 0% {\n transform: translate(-50%, -50%) scale(0.5) translateZ(0);\n opacity: 0.7;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n transform: translate(-50%, -50%) scale(25) translateZ(0);\n opacity: 0;\n }\n }\n`}</style>\n </div>\n );\n}\n","import React from \"react\";\nimport { ArrowRight } from \"lucide-react\";\nimport Header from \"../Header\";\nimport { SetupScreenProps } from \"../../types/interfaces\";\nimport { GenderType } from \"../../utils/enums\";\nimport { maleSetupVideo, setupVideo } from \"../../utils/constants\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\n\n\n\n\nexport default function SetupScreen({\n gender,\n handleNext,\n config,\n}: SetupScreenProps) {\n return (\n <div\n className=\"flex h-full max-w-[28rem] mx-auto w-full p-[1rem] relative flex-col items-center overflow-hidden max-w-md mx-auto bg-primary text-base\"\n style={{ background: config?.style?.base?.backgroundColor }}\n >\n <div className=\"flex justify-start max-w-md mx-auto w-full \">\n <Header noTitle resolvedConfig={config} />\n </div>\n <h2\n className=\"mb-[1rem] text-[32px]\"\n style={{\n fontFamily:\n config?.style?.heading?.headingFontFamily ||\n \"SeriouslyNostalgic Fn\",\n fontSize: config?.style?.heading?.headingFontSize || \"32px\",\n color: config?.style?.heading?.headingColor || \"#000\",\n fontWeight: config?.style?.heading?.headingFontWeight || \"normal\",\n }}\n >\n Phone placement\n </h2>\n <p\n className=\"text-center text-gray-600 text-sm mt-1 max-w-[280px] mx-auto min-h-[40px]\"\n style={{\n fontFamily:\n config?.style?.subheading?.subheadingFontFamily ||\n \"'Inter', sans-serif\",\n fontSize: config?.style?.subheading?.subheadingFontSize || \"14px\",\n color: config?.style?.subheading?.subheadingColor || \"#4b5563\",\n fontWeight:\n config?.style?.subheading?.subheadingFontWeight || \"normal\",\n }}\n >\n At hip height with space to stand back and be fully in frame{\" \"}\n </p>\n <div className=\"relative w-full h-full flex flex-col items-center max-w-md pt-[1rem]\">\n <div className=\"relative w-full h-auto\">\n <video\n className=\"h-full w-full object-contain border-none\"\n muted\n loop\n autoPlay\n playsInline\n >\n <source\n src={gender === GenderType.Male ? maleSetupVideo : setupVideo}\n type=\"video/mp4\"\n />\n </video>\n </div>\n\n <div className=\"absolute bottom-[0] max-w-[28rem] mx-auto w-full left-0 right-0 flex justify-center max-w-md mx-auto\">\n <div className=\"flex justify-end w-full\">\n <SpecificButton\n buttonFunc={() => handleNext?.()}\n buttonText=\"Continue\"\n postfixIcon={<ArrowRight />}\n resolvedConfig={config}\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\nimport { useState } from \"react\";\nimport MuseSteps from \"./MuseSteps\";\nimport VolumeStep from \"./VolumeStep\";\nimport SetupScreen from \"./SetupScreen\";\nimport { EducationalProps } from \"../../types/interfaces\";\nimport { useLocalConfig } from \"../../config/useLocalConfig\";\nimport { GenderType, MuseScreenStep, SectionType } from \"../../utils/enums\";\n\n\n\nexport const Educational: React.FC<EducationalProps> = ({ sections = [], config, gender = GenderType.Male, onComplete }) => {\n const resolvedConfig = useLocalConfig(config);\n const [step, setStep] = useState(1);\n\n switch (step) {\n case 1:\n return (\n <MuseSteps\n applicableScreens={\n (sections[0] === SectionType.Full || !sections || !sections?.length)\n ? undefined\n : sections[0] === SectionType.Body\n ? [\n MuseScreenStep.Body,\n MuseScreenStep.SizeFit,\n MuseScreenStep.Ready,\n ]\n : [MuseScreenStep.Face, MuseScreenStep.SizeFit]\n }\n config={resolvedConfig}\n gender={gender}\n handleNext={() => setStep(2)}\n />\n );\n\n case 2:\n return (\n <VolumeStep\n handleNext={() =>\n sections[0] === SectionType.Face ? onComplete?.() : setStep(3)\n }\n config={resolvedConfig}\n />\n );\n\n case 3:\n return (\n <SetupScreen\n config={resolvedConfig}\n gender={gender}\n handleNext={onComplete}\n />\n );\n\n default:\n return <></>;\n }\n\n};\n","\"use client\";\nimport { MenuItem, Select } from \"@mui/material\";\nimport { ArrowRight } from \"lucide-react\";\nimport React, { useCallback, useState } from \"react\";\nimport Header from \"../Header\";\nimport { FocalLengthProps } from \"../../types/interfaces\";\nimport { useLocalConfig } from \"../../config/useLocalConfig\";\nimport DevicesList from \"../../utils/deviceFocalLengthJson\";\nimport { handleErrorMessage } from \"../../utils/utils\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\n\n\ntype PhoneModel = {\n\tid: number;\n\tmodel_name: string;\n\tfocal_length: number;\n};\n\ntype DeviceManufacturer = Record<string, PhoneModel[]>;\ntype DevicesListType = DeviceManufacturer[];\n\nexport const FocalLength: React.FC<FocalLengthProps> = ({ onComplete, initialValue, config }: FocalLengthProps) => {\n\tconst [deviceInfo, setDeviceInfo] = useState({\n\t\tbrandName: initialValue?.brandName ?? \"\",\n\t\tmodel: initialValue?.model ?? (null as PhoneModel | null),\n\t});\n\tconst [message, setMessage] = React.useState<string | undefined>(undefined);\n\tconst [loading, setLoading] = React.useState(false);\n\tconst resolvedConfig = useLocalConfig(config);\n\t/* ------------ Brand Change ------------ */\n\tconst handleBrandChange = (event: any) => {\n\t\tsetDeviceInfo({\n\t\t\tbrandName: event.target.value,\n\t\t\tmodel: null,\n\t\t});\n\t};\n\n\t/* ------------ Model Change ------------ */\n\tconst handleModelChange = (event: any) => {\n\t\tconst selectedId = event.target.value;\n\n\t\tconst brandMatch = (DevicesList as DevicesListType).find((m) => {\n\t\t\treturn Object.keys(m)[0] === deviceInfo.brandName;\n\t\t});\n\n\t\tif (!brandMatch) return;\n\n\t\tconst key = Object.keys(brandMatch)[0];\n\t\tconst models = brandMatch[key];\n\n\t\tconst foundModel = models.find((phone) => phone.id === selectedId);\n\n\t\tsetDeviceInfo((prev) => ({\n\t\t\t...prev,\n\t\t\tmodel: foundModel ?? null,\n\t\t}));\n\t};\n\n\t/* ------------ Brand Menu ------------ */\n\tconst manufacturerMenuItems = useCallback(() => {\n\t\treturn (DevicesList as DevicesListType).map((manufacturer) => {\n\t\t\tconst brandName = Object.keys(manufacturer)[0];\n\t\t\treturn (\n\t\t\t\t<MenuItem key={brandName} value={brandName}>\n\t\t\t\t\t{brandName}\n\t\t\t\t</MenuItem>\n\t\t\t);\n\t\t});\n\t}, []);\n\n\t/* ------------ Model Menu ------------ */\n\tconst phoneModelMenuItems = useCallback(() => {\n\t\tconst brandMatch = (DevicesList as DevicesListType).find((manufacturer) => {\n\t\t\tconst key = Object.keys(manufacturer)[0];\n\t\t\treturn key === deviceInfo.brandName;\n\t\t});\n\n\t\tif (!brandMatch) return null;\n\n\t\tconst key = Object.keys(brandMatch)[0];\n\t\tconst models = brandMatch[key];\n\n\t\treturn models.map((phone) => (\n\t\t\t<MenuItem key={phone.id} value={phone.id}>\n\t\t\t\t{phone.model_name}\n\t\t\t</MenuItem>\n\t\t));\n\t}, [deviceInfo.brandName]);\n\n\tconst handleStepComplete = useCallback(async () => {\n\t\tsetLoading(true);\n\t\ttry {\n\t\t\tif (deviceInfo.brandName && deviceInfo.model) {\n\t\t\t\tawait onComplete?.({\n\t\t\t\t\tbrandName: deviceInfo.brandName,\n\t\t\t\t\tmodelName: deviceInfo.model.model_name,\n\t\t\t\t\tfocalLength: deviceInfo.model.focal_length,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsetMessage(handleErrorMessage(error));\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [deviceInfo, onComplete]);\n\n\t/* ------------ Auto-complete if focal length exists ------------ */\n\t// useEffect(() => {\n\t// \tif (deviceInfo.model?.focal_length) {\n\t// \t\tonComplete?.({\n\t// \t\t\tbrandName: deviceInfo.brandName,\n\t// \t\t\tmodelName: deviceInfo.model.model_name,\n\t// \t\t\tfocalLength: deviceInfo.model.focal_length,\n\t// \t\t});\n\t// \t}\n\t// }, []);\n\n\t/* -------------------- UI -------------------- */\n\treturn (\n\t\t<div className=\"h-full flex-col max-w-md mx-auto pt-[1rem] p-[15px] w-full flex justify-start items-start text-center\"\n style={{ background: resolvedConfig?.style?.base?.backgroundColor }}\n >\n\t\t\t<div className=\"w-full max-w-[28rem] mx-auto\">\n\t\t\t\t<Header subtitle=\"Phone Model\" resolvedConfig={resolvedConfig} />\n\t\t\t\t<div className=\"text-left mb-[.25rem] mt-[1rem]\"\n style={{\n fontFamily:\n resolvedConfig?.style?.base?.baseFontFamily ||\n \"'Inter', sans-serif\",\n fontSize:\n resolvedConfig?.style?.base?.baseFontSize || \"14px\",\n color:\n resolvedConfig?.style?.base?.baseTextColor || \"#4b5563\",\n }}\n >Select phone brand...</div>\n\n\t\t\t\t<Select\n\t\t\t\t\tonChange={handleBrandChange}\n\t\t\t\t\tclassName=\"w-full h-[40px] !shadow-none !outline-none text-left\"\n\t\t\t\t\tvalue={deviceInfo.brandName}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: resolvedConfig?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${resolvedConfig?.style?.input?.inputBorderColor || \"transparent\"}`,\n\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n borderRadius: resolvedConfig?.style?.input?.inputBorderRadius || '4px',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{manufacturerMenuItems()}\n\t\t\t\t</Select>\n\n\t\t\t\t<div className=\"text-left mb-[.25rem] mt-[1rem]\"\n style={{\n fontFamily:\n resolvedConfig?.style?.base?.baseFontFamily ||\n \"'Inter', sans-serif\",\n fontSize:\n resolvedConfig?.style?.base?.baseFontSize || \"14px\",\n color:\n resolvedConfig?.style?.base?.baseTextColor || \"#4b5563\",\n }}\n >Select phone model...</div>\n\n\t\t\t\t<Select\n\t\t\t\t\tonChange={handleModelChange}\n\t\t\t\t\tclassName=\"w-full bg-btn h-[40px] !shadow-none !outline-none text-left\"\n\t\t\t\t\tvalue={deviceInfo.model?.id || \"\"}\n\t\t\t\t\tdisabled={!deviceInfo.brandName}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: resolvedConfig?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${resolvedConfig?.style?.input?.inputBorderColor || \"transparent\"}`,\n\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n borderRadius: resolvedConfig?.style?.input?.inputBorderRadius || '4px',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{phoneModelMenuItems()}\n\t\t\t\t</Select>\n\t\t\t\t<style>\n\t\t\t\t\t{`\n .MuiOutlinedInput-notchedOutline {\n border: 1px solid ${resolvedConfig?.style?.input?.inputBorderColor || \"transparent\"} !important;\n outline: none;\n }\n .MuiSelect-select{\n outline: none;\n }\n \n `}\n\t\t\t\t</style>\n\t\t\t\t{message && <p className=\"mt-[0.2rem] text-[16px]\"\n style={{\n color: resolvedConfig?.style?.input?.inputErrorColor || '#000',\n fontSize: resolvedConfig?.style?.input?.inputErrorFontSize || '16px',\n }}\n >{message}</p>}\n\t\t\t</div>\n\n\t\t\t<div className=\"mt-[.75rem] mb-[1.25rem] max-w-[28rem] mx-auto w-full flex justify-end\">\n\t\t\t\t<SpecificButton\n\t\t\t\t\tdisabled={!deviceInfo.brandName || !deviceInfo.model||loading}\n\t\t\t\t\tpostfixIcon={<ArrowRight />}\n\t\t\t\t\tresolvedConfig={resolvedConfig}\n\t\t\t\t\tbuttonFunc={handleStepComplete}\n\t\t\t\t\tbuttonText={\"Next\"}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","\"use client\";\nimport React, { useState, useMemo, useCallback } from \"react\";\nimport { useLocalConfig } from \"../../config/useLocalConfig\";\nimport { OnboardingProps } from \"../../types/interfaces\";\nimport NameStep from \"./NameStep\";\nimport EmailStep from \"./EmailStep\";\nimport HeightStep from \"./HeightStep\";\nimport GenderStep from \"./GenderStep\";\nimport { resolveSteps } from \"../../utils/utils\";\nimport { OnboardingStep } from \"../../utils/enums\";\nimport ProgressDots from \"../../atoms/progressDots/ProgressDots\";\nimport { STEPS } from \"../../utils/constants\";\n\nexport const Onboarding: React.FC<OnboardingProps> = ({ steps, config, onComplete }) => {\n\tconst resolvedConfig = useLocalConfig(config);\n\t/** 1️⃣ Compute visible steps in correct sequence */\n\tconst visibleSteps = useMemo(() => resolveSteps(steps), []);\n\tconst [values, setValues] = useState<Record<string, any>>({});\n\tconst [stepIndex, setStepIndex] = useState(0);\n\tconst currentStep = visibleSteps[stepIndex];\n\t \n\t/** 4️⃣ Handle completion for a step */\nconst handleStepComplete = useCallback(\n (value: any) => {\n if (!currentStep) return;\n const updated = { ...values, [currentStep.type]: value };\n setValues(updated);\n if (stepIndex === visibleSteps.length - 1) {\n onComplete?.(updated);\n } else {\n setStepIndex((prev) => prev + 1); // 👈 FIX\n }\n },\n [currentStep, values, stepIndex, visibleSteps.length, onComplete],\n);\n\n\t/** 5️⃣ Render the correct step based ONLY on visibleSteps order */\n\tconst renderStep = () => {\n\t\tif (!currentStep) return null;\n\t\tconst commonProps = {\n\t\t\tresolvedConfig,\n\t\t\tinitialValue: currentStep.value,\n\t\t\tonComplete: handleStepComplete,\n\t\t\tonStepComplete: currentStep?.onStepComplete,\n\t\t};\n\n\t\tswitch (currentStep.type) {\n\t\t\tcase OnboardingStep.Email:\n\t\t\t\treturn <EmailStep {...commonProps} />;\n\t\t\tcase OnboardingStep.Name:\n\t\t\t\treturn <NameStep {...commonProps} />;\n\t\t\tcase OnboardingStep.Gender:\n\t\t\t\treturn <GenderStep {...commonProps} />;\n\t\t\tcase OnboardingStep.Height:\n\t\t\t\treturn <HeightStep {...commonProps} />;\n\t\t\tdefault:\n\t\t\t\treturn <div>Unsupported step type: {currentStep.type}</div>;\n\t\t}\n\t};\n\n\tif (!visibleSteps.length) return <div>No steps configured for onboarding.</div>;\n\n\t/** 6️⃣ FULL_ORDER always based on original provided `steps` prop */\n\tconst FULL_ORDER = steps.map((s) => s.type);\n\n\t/** 7️⃣ The dot index must never depend on resolved visibility */\n\tconst absoluteIndex = currentStep ? FULL_ORDER.indexOf(currentStep.type) : 0;\n\n\treturn (\n <>\n <div \n id=\"swan-onboarding-bg\"\n style={{ background: resolvedConfig?.style?.base?.backgroundColor }}\n className=\"fixed w-full h-full z-[0] pointer-events-none top-0 left-0\"\n ></div>\n \n\t\t<div className=\"px-[15px] relative pt-[15px] w-full flex items-center flex-col\" >\n\t\t\t<div className=\"max-w-[28rem] mx-auto w-full\">\n\t\t\t\t{/* Logo */}\n\t\t\t\t{resolvedConfig?.logo && (\n\t\t\t\t\t<div className=\"text-center mb-[1rem] flex justify-center\">\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={resolvedConfig?.logo}\n\t\t\t\t\t\t\talt=\"logo\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\theight: resolvedConfig?.style?.logo?.logoHeight,\n\t\t\t\t\t\t\t\twidth: resolvedConfig?.style?.logo?.logoWidth,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"h-10 mx-auto\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Progress Dots */}\n\t\t\t\t<ProgressDots resolvedConfig={resolvedConfig} totalSteps={FULL_ORDER.length} currentStepIndex={absoluteIndex} />\n\t\t\t\t{/* Heading */}\n\t\t\t\t<h1\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.heading?.headingFontFamily || \"SeriouslyNostalgic Fn\",\n\t\t\t\t\t\tfontSize: resolvedConfig?.style?.heading?.headingFontSize || \"32px\",\n\t\t\t\t\t\tcolor: resolvedConfig?.style?.heading?.headingColor || \"#000\",\n\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.heading?.headingFontWeight || \"normal\",\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"text-center pt-[1.5rem]\"\n\t\t\t\t>\n\t\t\t\t\t{STEPS[currentStep?.type as keyof typeof STEPS] ?? \"Onboarding\"}\n\t\t\t\t</h1>\n\n\t\t\t\t{/* Step */}\n\t\t\t\t{renderStep()}\n\t\t\t</div>\n\t\t</div>\n </>\n\t);\n};\n"],"names":["cn","classes","filter","Boolean","join","CustomInput","forwardRef","className","resolvedConfig","type","props","ref","_jsxs","_Fragment","children","_jsx","autoCapitalize","autoCorrect","style","background","input","inputBackgroundColor","color","inputTextColor","fontSize","inputFontSize","fontWeight","inputFontWeight","border","inputBorderColor","fontFamily","base","baseFontFamily","borderRadius","inputBorderRadius","inputPlaceholderColor","displayName","NameStep","onComplete","initialValue","onStepComplete","value","setValue","React","useState","message","setMessage","undefined","loading","setLoading","onSubmit","async","e","preventDefault","trim","error","handleErrorMessage","required","id","placeholder","onChange","target","inputErrorColor","inputErrorFontSize","SpecificButton","disabled","buttonText","postfixIcon","ArrowRight","size","EmailStep","isValidEmail","HeightStep","localHeight","setLocalHeight","cm","String","ft","inch","measurementUnit","setMeasurementUnit","handleSetHeight","useCallback","event","prev","handleMeasurementUnit","val","validateHeight","height","convertToCentimeters","checkMeasurement","isButtonDisabled","useMemo","useEffect","renderHeightInput","inputMode","Select","MenuItem","buttonFunc","GenderStep","genderType","setGenderType","GenderType","Male","onClick","primaryColor","Female","console","log","ProgressDots","totalSteps","currentStepIndex","activeColor","inactiveColor","secondaryColor","dots","Array","from","length","_","i","index","isActive","isCompleted","map","backgroundColor","DevicesList","MuseScreenRenderer","screenIndex","scanLinePosition","faceZoomed","showFaceScanLine","faceScanLinePosition","showLargeS","typewriterText","fullText","screens","videoToShow","faceScanVideo","sizeVideo","formFittingVideo","screen","componentProps","body","face","sizeFit","hasComponent","component","Comp","content","createElement","image","muted","loop","autoPlay","playsInline","preload","src","AnimatePresence","mode","motion","div","initial","opacity","y","animate","exit","transition","duration","MuseScreenStep","Body","title","description","bodyScanPerson","Face","faceScanPerson","left","top","SizeFit","leSableDress","Ready","fittingGuide","MuseSteps","applicableScreens","config","gender","handleNext","currentScreen","setCurrentScreen","setScanLinePosition","setFaceZoomed","setFaceScanLinePosition","setShowFaceScanLine","currentOutfit","setCurrentOutfit","setTypewriterText","setShowLargeS","screensToShow","includes","screenId","outfitImages","animationRefs","useRef","scan","outfit","typewriter","cleanupAnimations","Object","values","current","forEach","cancelAnimationFrame","clearTimeout","clearInterval","startTime","Date","now","animateScanLine","elapsed","progress","Math","min","requestAnimationFrame","setTimeout","animateFaceScanLine","setInterval","currentIndex","typeNextChar","slice","useMuseAnimations","OUTFIT_IMAGES","Header","noTitle","heading","headingFontFamily","headingFontSize","headingColor","headingFontWeight","subheading","subheadingFontFamily","subheadingFontSize","subheadingColor","subheadingFontWeight","maleScanVideo","femaleScanVideo","maleFaceScanVideo","maleSizeSuggestions","sizeSuggestions","maleFormFittingGuide","formFittingGuide","VolumeScreen","mousePosition","setMousePosition","x","isAnimationPaused","setIsAnimationPaused","handleMouseMove","clientX","clientY","window","addEventListener","removeEventListener","hexToRgba","hex","alpha","replace","split","h","parseInt","substring","brandColor","rgba1","rgba2","rgba3","holographicStyle","windowWidth","innerWidth","windowHeight","innerHeight","normalizedX","transform","boxShadow","calculateHolographicEffect","width","minHeight","minWidth","margin","animation","Volume2","SetupScreen","maleSetupVideo","setupVideo","sections","useLocalConfig","step","setStep","SectionType","Full","VolumeStep","deviceInfo","setDeviceInfo","brandName","model","manufacturerMenuItems","manufacturer","keys","phoneModelMenuItems","brandMatch","find","phone","model_name","handleStepComplete","modelName","focalLength","focal_length","subtitle","baseFontSize","baseTextColor","selectedId","m","foundModel","steps","visibleSteps","resolveSteps","setValues","stepIndex","setStepIndex","currentStep","updated","FULL_ORDER","s","absoluteIndex","indexOf","logo","alt","logoHeight","logoWidth","STEPS","commonProps","OnboardingStep","Email","Name","Gender","Height","renderStep"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/atoms/customInput/CustomInput.tsx","../src/components/onboarding/EmailStep.tsx","../src/components/onboarding/NameStep.tsx","../src/components/onboarding/GenderStep.tsx","../src/components/onboarding/HeightStep.tsx","../src/atoms/progressDots/ProgressDots.tsx","../src/components/onboarding/StepsWrapper.tsx","../src/utils/deviceFocalLengthJson/index.ts","../src/components/focalLength/FocalLengthWrapper.tsx","../src/components/educational/MuseSteps/MuseScreenRenderer.tsx","../src/components/educational/MuseSteps/index.tsx","../src/components/educational/MuseSteps/BodyScanAnimation.tsx","../src/components/educational/MuseSteps/FaceScanAnimation.tsx","../src/components/educational/MuseSteps/TypewritterScene.tsx","../src/customHooks/useMuseAnimation.ts","../src/components/educational/VolumeStep.tsx","../src/components/educational/SetupScreen.tsx","../src/components/educational/EducationalStepsWrapper.tsx","../src/components/educational/Educational.tsx","../src/components/focalLength/FocalLength.tsx","../src/components/onboarding/Onboarding.tsx"],"sourcesContent":["import * as React from \"react\";\n\n/** Lightweight classnames helper to avoid depending on ../../utils/utils */\nconst cn = (...classes: Array<string | false | null | undefined>) =>\n classes.filter(Boolean).join(\" \");\n\nexport interface CustomInputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n className?: string;\n type?: string;\n resolvedConfig?: any;\n}\n\nconst CustomInput = React.forwardRef<HTMLInputElement, CustomInputProps>(\n ({ className, resolvedConfig, type, ...props }, ref) => (\n <>\n <input\n type={type}\n className={`${className ? className : ''} customInput ` + cn(\n \"flex w-full px-[.75rem] h-[40px] text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed backdrop-blur-sm bg-btn font-medium pl-[1rem] pr-[2.5rem] focus:ring-1 focus:outline-none transition-all duration-200\",\n \n )}\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n ref={ref}\n {...props}\n style={{\n background: resolvedConfig?.style?.input?.inputBackgroundColor || '#F9FAFC',\n color: resolvedConfig?.style?.input?.inputTextColor || '#000',\n fontSize: resolvedConfig?.style?.input?.inputFontSize || '16px',\n fontWeight: resolvedConfig?.style?.input?.inputFontWeight || '400',\n border: `1px solid ${resolvedConfig?.style?.input?.inputBorderColor || 'transparent'}`,\n fontFamily: resolvedConfig?.style?.base?.baseFontFamily || 'Inter, sans-serif',\n borderRadius: resolvedConfig?.style?.input?.inputBorderRadius || '4px',\n }}\n />\n <style>\n {`\n .customInput::placeholder {\n color: ${resolvedConfig?.style?.input?.inputPlaceholderColor || '#000'};\n font-weight: ${resolvedConfig?.style?.input?.inputFontWeight || '500'};\n opacity: 1;\n font-size: ${resolvedConfig?.style?.input?.inputFontSize || '14px'};\n }\n .customInput:focus-visible {\n box-shadow:0 0 0 2px white, 0 0 0 4px rgb(from currentColor r g b / 0.5);\n }\n \n `}\n </style>\n </>\n )\n );\n\n CustomInput.displayName = \"CustomInput\";\n\n export default CustomInput;\n","import CustomInput from \"../../atoms/customInput/CustomInput\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\nimport { LanguageContext } from \"../../utils/context/languageContext\";\nimport { LanguageKeys } from \"../../utils/languageKeys\";\nimport { handleErrorMessage, isValidEmail } from \"../../utils/utils\";\nimport { ArrowRight } from \"lucide-react\";\nimport React, { useContext } from \"react\";\n\ninterface EmailStepProps {\n\tonComplete: (value: any) => void;\n\tinitialValue?: any;\n\tresolvedConfig?: any;\n\tonStepComplete?: (value: any) => Promise<void> | void;\n}\n\nconst EmailStep = ({ onComplete, initialValue, resolvedConfig, onStepComplete }: EmailStepProps) => {\n\tconst [value, setValue] = React.useState(initialValue || \"\");\n\tconst [message, setMessage] = React.useState<string | undefined>(undefined);\n\tconst [loading, setLoading] = React.useState(false);\n\tconst { translate } = useContext(LanguageContext) || {};\n\tconst handleNext = async (e: React.FormEvent<HTMLFormElement>) => {\n\t\te.preventDefault();\n\t\tsetLoading(true);\n\t\ttry {\n\t\t\tif (!value.trim()) {\n\t\t\t\tsetMessage(translate?.(LanguageKeys.emailRequired));\n\t\t\t\treturn;\n\t\t\t} else if (!isValidEmail(value.trim())) {\n\t\t\t\tsetMessage(translate?.(LanguageKeys.validEmail));\n\t\t\t} else {\n\t\t\t\tawait onStepComplete?.(value);\n\t\t\t\tonComplete?.(value);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsetMessage(handleErrorMessage(error));\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\treturn (\n\t\t<div className=\"w-full max-w-md\">\n\t\t\t<form className=\"mt-[3.5rem]\" onSubmit={handleNext}>\n\t\t\t\t<div>\n\t\t\t\t\t<CustomInput\n\t\t\t\t\t\trequired\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tid=\"name\"\n\t\t\t\t\t\tplaceholder={translate?.(LanguageKeys.enterEmail)}\n\t\t\t\t\t\tresolvedConfig={resolvedConfig}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\tsetMessage(undefined);\n\t\t\t\t\t\t\tsetValue(e.target.value);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t{message && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputErrorColor || \"#000\",\n\t\t\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputErrorFontSize || \"16px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{message}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex justify-end mt-[.5rem]\">\n\t\t\t\t\t<SpecificButton type=\"submit\" disabled={!value.trim() || loading} resolvedConfig={resolvedConfig} buttonText={translate?.(LanguageKeys.next)} postfixIcon={<ArrowRight size={14} />} />\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t);\n};\n\nexport default EmailStep;\n","import CustomInput from \"../../atoms/customInput/CustomInput\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\nimport { LanguageContext } from \"../../utils/context/languageContext\";\nimport { LanguageKeys } from \"../../utils/languageKeys\";\nimport { handleErrorMessage } from \"../../utils/utils\";\nimport { ArrowRight } from \"lucide-react\";\nimport React, { useContext } from \"react\";\n\ninterface NameStepProps {\n\tonComplete: (value: any) => void;\n\tinitialValue?: any;\n\tresolvedConfig?: any;\n\tonStepComplete?: (value: any) => Promise<void> | void;\n}\nconst NameStep = ({ onComplete, initialValue, resolvedConfig, onStepComplete }: NameStepProps) => {\n\tconst [value, setValue] = React.useState(initialValue || \"\");\n\tconst [message, setMessage] = React.useState<string | undefined>(undefined);\n\t const [loading, setLoading] = React.useState(false);\n\t const {translate} = useContext(LanguageContext)||{}\n\tconst handleNext = async (e: React.FormEvent<HTMLFormElement>) => {\n\t\te.preventDefault();\n\t\tsetLoading(true);\n\t\ttry {\n\t\t\tif (!value.trim()) {\n\t\t\t\tsetMessage(translate?.(LanguageKeys.nameRequired));\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tawait onStepComplete?.(value);\n\t\t\t\tonComplete?.(value);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsetMessage(handleErrorMessage(error));\n\t\t}finally{\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\treturn (\n\t\t<div className=\"w-full max-w-md\">\n\t\t\t<form onSubmit={handleNext} className=\"mt-[3.5rem] mb-[.75rem]\">\n\t\t\t\t<div>\n\t\t\t\t\t<CustomInput\n\t\t\t\t\t\trequired\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tid=\"name\"\n\t\t\t\t\t\tplaceholder={translate?.(LanguageKeys.enterName)}\n\t\t\t\t\t\tresolvedConfig={resolvedConfig}\n\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\tsetValue(e.target.value);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t{message && <p className=\"mt-[0.2rem] text-[16px]\"\n style={{\n color: resolvedConfig?.style?.input?.inputErrorColor || '#000',\n fontSize: resolvedConfig?.style?.input?.inputErrorFontSize || '16px',\n }}\n >{message}</p>}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex justify-end mt-[.5rem]\">\n\t\t\t\t\t<SpecificButton disabled={!value.trim() || loading} resolvedConfig={resolvedConfig} buttonText={translate?.(LanguageKeys.next)} type=\"submit\" postfixIcon={<ArrowRight size={14} />} />\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t);\n};\n\nexport default NameStep;\n","import SpecificButton from \"../../atoms/specificButton/SpecificButton\";\nimport { GenderStepProps } from \"../../types/interfaces\";\nimport { LanguageContext } from \"../../utils/context/languageContext\";\nimport { GenderType } from \"../../utils/enums\";\nimport { LanguageKeys } from \"../../utils/languageKeys\";\nimport { handleErrorMessage } from \"../../utils/utils\";\nimport { ArrowRight } from \"lucide-react\";\nimport React, { useContext, useState } from \"react\";\n\nconst GenderStep = ({ onComplete, initialValue, resolvedConfig, onStepComplete }: GenderStepProps) => {\n\tconst [genderType, setGenderType] = useState<GenderType>(initialValue);\n\tconst [message, setMessage] = React.useState<string | undefined>(undefined);\n\tconst [loading, setLoading] = React.useState(false);\n\tconst { translate } = useContext(LanguageContext) || {};\n\n\tconst handleNext = async () => {\n\t\tsetLoading(true);\n\t\tsetMessage(undefined);\n\t\ttry {\n\t\t\tawait onStepComplete?.(genderType);\n\t\t\tonComplete?.(genderType);\n\t\t} catch (error) {\n\t\t\tconsole.log(error, \"gener\");\n\t\t\tsetMessage(handleErrorMessage(error));\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\" w-full flex flex-col max-w-md mt-[3.5rem] mb-[.75rem] gap-[1rem]\">\n\t\t\t\t<button\n\t\t\t\t\tclassName={` text-btnSize bg-btn text-base cursor-pointer text-sm border leading-none rounded-[.375rem] focus-visible:ring-secondary p-[1rem] ${\n\t\t\t\t\t\tgenderType === GenderType.Male ? ` shadow-[0_1px_1px_rgba(0,0,0,0.251)]` : \"\"\n\t\t\t\t\t}`}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tsetGenderType(GenderType.Male);\n\t\t\t\t\t\tsetMessage(undefined);\n\t\t\t\t\t}}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: resolvedConfig?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${genderType === GenderType.Male ? resolvedConfig?.style?.base?.primaryColor : `transparent`}`,\n\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t\tborderRadius: resolvedConfig?.style?.input?.inputBorderRadius || \"4px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{translate?.(LanguageKeys.mens)}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tclassName={`text-btnSize font-btnFont cursor-pointer leading-none rounded-[.375rem] focus-visible:ring-secondary p-[1rem] ${\n\t\t\t\t\t\tgenderType === GenderType.Female ? ` shadow-[0_1px_1px_rgba(0,0,0,0.251)]` : \"\"\n\t\t\t\t\t}`}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tsetGenderType(GenderType.Female);\n\t\t\t\t\t\tsetMessage(undefined);\n\t\t\t\t\t}}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: resolvedConfig?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${genderType === GenderType.Female ? resolvedConfig?.style?.base?.primaryColor : `transparent`}`,\n\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t\tborderRadius: resolvedConfig?.style?.input?.inputBorderRadius || \"4px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{translate?.(LanguageKeys.womens)}\n\t\t\t\t</button>\n\t\t\t\t{message && (\n\t\t\t\t\t<p\n\t\t\t\t\t\tclassName=\"mt-[0.2rem]\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputErrorColor || \"#000\",\n\t\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputErrorFontSize || \"16px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{message}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className=\"flex justify-end mt-[.5rem]\">\n\t\t\t\t<SpecificButton\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tresolvedConfig={resolvedConfig}\n\t\t\t\t\tbuttonText={translate?.(LanguageKeys.next)}\n\t\t\t\t\tpostfixIcon={<ArrowRight size={14} />}\n\t\t\t\t\tdisabled={!genderType || loading}\n\t\t\t\t\tbuttonFunc={handleNext}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default GenderStep;\n","import CustomInput from \"../../atoms/customInput/CustomInput\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\nimport { HeightStepProps } from \"../../types/interfaces\";\nimport { LanguageContext } from \"../../utils/context/languageContext\";\nimport { LanguageKeys } from \"../../utils/languageKeys\";\nimport { convertToCentimeters, handleErrorMessage } from \"../../utils/utils\";\nimport { MenuItem, Select } from \"@mui/material\";\nimport { ArrowRight } from \"lucide-react\";\nimport { useCallback, useContext, useEffect, useMemo, useState } from \"react\";\n\nconst HeightStep = ({ onComplete, initialValue, resolvedConfig, onStepComplete }: HeightStepProps) => {\n\tconst [localHeight, setLocalHeight] = useState({ cm: initialValue ? String(initialValue) : \"\", ft: \"\", inch: \"\" });\n\tconst [measurementUnit, setMeasurementUnit] = useState(\"cm\");\n\tconst [message, setMessage] = useState<string | undefined>(undefined);\n\tconst { translate, preferredLanguage } = useContext(LanguageContext) || {};\n\tconst handleSetHeight = useCallback(\n\t\t(event: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tsetMessage(undefined);\n\t\t\tif (measurementUnit === \"cm\") {\n\t\t\t\tsetLocalHeight((prev) => ({ ...prev, cm: event.target.value, ft: \"\", inch: \"\" }));\n\t\t\t} else if (event.target.id === \"ft\") {\n\t\t\t\tsetLocalHeight((prev) => ({ ...prev, ft: event.target.value, cm: \"\" }));\n\t\t\t} else {\n\t\t\t\tsetLocalHeight((prev) => ({ ...prev, inch: event.target.value, cm: \"\" }));\n\t\t\t}\n\t\t},\n\t\t[measurementUnit],\n\t);\n\n\tconst handleMeasurementUnit = useCallback((event: any) => {\n\t\tconst val = event.target.value;\n\t\tsetMeasurementUnit(val);\n\t\tsetLocalHeight({ cm: \"\", ft: \"\", inch: \"\" });\n\t\tsetMessage(undefined);\n\t}, []);\n\tconst validateHeight = useCallback(\n\t\t(height: { cm: string; ft: string; inch: string }) => {\n\t\t\tif (measurementUnit === \"cm\") {\n\t\t\t\treturn !(+height.cm < 152.4 || +height.cm > 213.36);\n\t\t\t}\n\t\t\treturn !(convertToCentimeters(+height.ft, +height.inch) < 152.4 || convertToCentimeters(+height.ft, +height.inch) > 213.36);\n\t\t},\n\t\t[measurementUnit],\n\t);\n\n\tconst checkMeasurement = useCallback(async () => {\n\t\ttry {\n\t\t\tif (!validateHeight(localHeight)) {\n\t\t\t\t// setError(true);\n\t\t\t\tsetMessage(translate?.(LanguageKeys.heightError));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst height = { cm: +localHeight.cm, ft: +localHeight.ft, inch: +localHeight.inch };\n\t\t\tawait onStepComplete?.(height);\n\t\t\tonComplete?.(height);\n\t\t} catch (error) {\n\t\t\tsetMessage(handleErrorMessage(error));\n\t\t}\n\t}, [localHeight, validateHeight, onStepComplete]);\n\tconst isButtonDisabled = useMemo(() => (!localHeight.cm && !localHeight.ft && !localHeight.inch) || !!message, [localHeight, message]);\n\tuseEffect(() => {\n\t\tif (localHeight.cm === \"\" && localHeight.ft !== \"\") {\n\t\t\tsetMeasurementUnit(\"ft\");\n\t\t}\n\t}, [localHeight]);\n\tconst renderHeightInput = useCallback(() => {\n\t\tif (measurementUnit === \"cm\") {\n\t\t\treturn (\n\t\t\t\t<div className={`w-full`}>\n\t\t\t\t\t<CustomInput\n\t\t\t\t\t\trequired\n\t\t\t\t\t\t// variant=\"filled\"\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tid=\"cm\"\n\t\t\t\t\t\tplaceholder={translate?.(LanguageKeys.height)}\n\t\t\t\t\t\tclassName=\"!pr-[10px]\"\n\t\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\t\tvalue={localHeight.cm}\n\t\t\t\t\t\tonChange={handleSetHeight}\n\t\t\t\t\t\tresolvedConfig={resolvedConfig}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t<div className=\"flex gap-[.5rem]\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<CustomInput\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t// variant=\"filled\"\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tid=\"ft\"\n\t\t\t\t\t\t\t// error={error}\n\t\t\t\t\t\t\tclassName=\"!pr-[10px]\"\n\t\t\t\t\t\t\tplaceholder={translate?.(LanguageKeys.heightInFt)}\n\t\t\t\t\t\t\tvalue={localHeight.ft}\n\t\t\t\t\t\t\tonChange={handleSetHeight}\n\t\t\t\t\t\t\tresolvedConfig={resolvedConfig}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<CustomInput\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t// variant=\"filled\"\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tid=\"inch\"\n\t\t\t\t\t\t\t// error={error}\n\t\t\t\t\t\t\tclassName=\"!pr-[10px]\"\n\t\t\t\t\t\t\tplaceholder={translate?.(LanguageKeys.heightInInch)}\n\t\t\t\t\t\t\tvalue={localHeight.inch}\n\t\t\t\t\t\t\tonChange={handleSetHeight}\n\t\t\t\t\t\t\tresolvedConfig={resolvedConfig}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t}, [localHeight, preferredLanguage]);\n\treturn (\n\t\t<div className=\"h-full w-full\">\n\t\t\t<div className=\"mt-[3.5rem] mb-[.75rem]\">\n\t\t\t\t<div className=\"w-full flex gap-[.5rem]\">\n\t\t\t\t\t{renderHeightInput()}\n\t\t\t\t\t<Select\n\t\t\t\t\t\tclassName=\"bg-btn outline-none h-[40px] [&_svg]:text-base !shadow-none !outline-none !text-base\"\n\t\t\t\t\t\tvalue={measurementUnit}\n\t\t\t\t\t\tonChange={handleMeasurementUnit}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground: resolvedConfig?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\t\tborder: `1px solid ${resolvedConfig?.style?.input?.inputBorderColor || \"transparent\"}`,\n\t\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t\t\tborderRadius: resolvedConfig?.style?.input?.inputBorderRadius || \"4px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MenuItem value=\"cm\">{translate?.(LanguageKeys.cmMeasurementUnit)}</MenuItem>\n\t\t\t\t\t\t<MenuItem value=\"ft\">{translate?.(LanguageKeys.ftMeasurementUnit)}</MenuItem>\n\t\t\t\t\t</Select>\n\t\t\t\t\t<style>\n\t\t\t\t\t\t{`\n .MuiOutlinedInput-notchedOutline {\n border: 1px solid ${resolvedConfig?.style?.input?.inputBorderColor || \"transparent\"} !important;\n outline: none;\n }\n .MuiSelect-select{\n outline: none;\n }\n \n `}\n\t\t\t\t\t</style>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"mt-2\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputErrorColor || \"#000\",\n\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputErrorFontSize || \"16px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{message}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex justify-end\">\n\t\t\t\t<SpecificButton resolvedConfig={resolvedConfig} disabled={isButtonDisabled} buttonFunc={checkMeasurement} buttonText={translate?.(LanguageKeys.next)} postfixIcon={<ArrowRight size={14} />} />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default HeightStep;\n","import React, { useMemo } from \"react\";\n\ninterface ProgressDotsProps {\n totalSteps: number;\n currentStepIndex: number;\n resolvedConfig?: any;\n}\n\nconst ProgressDots: React.FC<ProgressDotsProps> = ({\n totalSteps,\n currentStepIndex,\n resolvedConfig\n}) => {\n const activeColor = resolvedConfig?.style?.base?.primaryColor || \"#000\";\n const inactiveColor = resolvedConfig?.style?.base?.secondaryColor || \"#D9D9D9\";\n\n const dots = useMemo(\n () =>\n Array.from({ length: totalSteps }, (_, i) => ({\n index: i,\n isActive: i === currentStepIndex,\n isCompleted: i < currentStepIndex\n })),\n [totalSteps, currentStepIndex]\n );\n\n return (\n <div className=\"flex justify-center items-center gap-[4px] my-[1.5rem]\">\n {dots.map(({ index, isActive, isCompleted }) => (\n <div\n key={index}\n className={`h-[3px] rounded-[9999px] transition-all duration-300 ${\n isActive ? \"w-[50px]\" : \"w-[30px]\"\n }`}\n style={{\n backgroundColor: isCompleted || isActive ? activeColor : inactiveColor\n }}\n />\n ))}\n </div>\n );\n};\n\nexport default ProgressDots;\n","import { useContext, useEffect } from \"react\";\nimport EmailStep from \"./EmailStep\";\nimport NameStep from \"./NameStep\";\nimport GenderStep from \"./GenderStep\";\nimport HeightStep from \"./HeightStep\";\nimport { OnboardingStep } from \"../../utils/enums\";\nimport { Config, Step } from \"../../types/interfaces\";\nimport { LanguageContext } from \"../../utils/context/languageContext\";\nimport { LanguageKeys } from \"../../utils/languageKeys\";\nimport ProgressDots from \"../../atoms/progressDots/ProgressDots\";\nimport { useLocalConfig } from \"../../config/useLocalConfig\";\n\nconst StepsWrapper = ({\n currentStep,\n handleStepComplete,\n fullOrder,\n config,\n visibleSteps = [],\n}: {\n currentStep: Step;\n handleStepComplete: (val: any) => void;\n fullOrder: any;\n config?: Config;\n visibleSteps?: Step[];\n}) => {\n const { setPreferredLanguage, translate } = useContext(LanguageContext) || {};\n const resolvedConfig = useLocalConfig(config);\n\n const renderStep = () => {\n if (!currentStep) return null;\n\n const commonProps = {\n resolvedConfig,\n initialValue: currentStep.value,\n onComplete: handleStepComplete,\n onStepComplete: currentStep?.onStepComplete,\n };\n\n switch (currentStep.type) {\n case OnboardingStep.Email:\n return <EmailStep {...commonProps} />;\n case OnboardingStep.Name:\n return <NameStep {...commonProps} />;\n case OnboardingStep.Gender:\n return <GenderStep {...commonProps} />;\n case OnboardingStep.Height:\n return <HeightStep {...commonProps} />;\n default:\n return (\n <div>\n {translate?.(LanguageKeys.noValidSteps)} {currentStep.type}\n </div>\n );\n }\n };\n\n useEffect(() => {\n setPreferredLanguage?.(resolvedConfig.language);\n }, [resolvedConfig]);\n\n if (!visibleSteps.length)\n return <div>{translate?.(LanguageKeys.unsupportedStep)}</div>;\n\n /** 7️⃣ The dot index must never depend on resolved visibility */\n const absoluteIndex = currentStep ? fullOrder.indexOf(currentStep.type) : 0;\n\n return (\n <>\n <div\n id=\"swan-onboarding-bg\"\n style={{ background: resolvedConfig?.style?.base?.backgroundColor }}\n className=\"fixed w-full h-full z-[0] pointer-events-none top-0 left-0\"\n ></div>\n\n <div className=\"px-[15px] relative pt-[15px] w-full flex items-center flex-col\">\n <div className=\"max-w-[28rem] mx-auto w-full\">\n {/* Logo */}\n {resolvedConfig?.logo && (\n <div className=\"text-center mb-[1rem] flex justify-center\">\n <img\n src={resolvedConfig?.logo}\n alt=\"logo\"\n style={{\n height: resolvedConfig?.style?.logo?.logoHeight,\n width: resolvedConfig?.style?.logo?.logoWidth,\n }}\n className=\"h-10 mx-auto\"\n />\n </div>\n )}\n\n {/* Progress Dots */}\n <ProgressDots\n resolvedConfig={resolvedConfig}\n totalSteps={fullOrder.length}\n currentStepIndex={absoluteIndex}\n />\n\n {/* Heading */}\n <h1\n style={{\n fontFamily:\n resolvedConfig?.style?.heading?.headingFontFamily ||\n \"SeriouslyNostalgic Fn\",\n fontSize: resolvedConfig?.style?.heading?.headingFontSize || \"32px\",\n color: resolvedConfig?.style?.heading?.headingColor || \"#000\",\n fontWeight:\n resolvedConfig?.style?.heading?.headingFontWeight || \"normal\",\n }}\n className=\"text-center pt-[1.5rem]\"\n >\n {translate?.(LanguageKeys.onboarding[currentStep?.type || \"heading\"])}\n </h1>\n\n {/* Step */}\n {renderStep()}\n </div>\n </div>\n </>\n );\n};\n\nexport default StepsWrapper;\n","import Alcatel from \"./Alcatel.json\"\nimport Apple from \"./Apple.json\"\nimport CAT from \"./CAT.json\"\nimport Fairphone from \"./Fairphone.json\"\nimport Fujitsu from \"./Fujitsu.json\"\nimport Google from \"./Google.json\"\nimport Huawei from \"./Huawei.json\"\nimport iTel from \"./iTel.json\"\nimport Lava from \"./Lava.json\"\nimport Lg from \"./Lg.json\"\nimport Motorola from \"./Motorola.json\"\nimport NokiaHmd from \"./NokiaHmd.json\"\nimport Nothing from \"./Nothing.json\"\nimport Olla from \"./Olla.json\"\nimport Oneplus from \"./Oneplus.json\"\nimport Oppo from \"./Oppo.json\"\nimport Realme from \"./Realme.json\"\nimport Samsung from \"./Samsung.json\"\nimport Sharp from \"./Sharp.json\"\nimport Sony from \"./Sony.json\"\nimport Tecno from \"./Tecno.json\"\nimport Vivo from \"./Vivo.json\"\nimport Vsmart from \"./Vsmart.json\"\nimport Wiko from \"./Wiko.json\"\nimport Xiaomi from \"./Xiaomi.json\"\n\n\n\n\nconst DevicesList=[\n Alcatel,Apple,CAT,Fairphone,Fujitsu,Google,Huawei,iTel,Lava,Lg,Motorola,NokiaHmd,Nothing,Olla,Oneplus,Oppo,Realme,Samsung,Sharp,Sony,\n Tecno,Vivo,Vsmart,Wiko,Xiaomi\n\n]\n \n\nexport default DevicesList\n","import { useCallback, useContext, useEffect, useState } from \"react\";\nimport { LanguageContext } from \"../../utils/context/languageContext\";\nimport Header from \"../Header\";\nimport { MenuItem, Select } from \"@mui/material\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\nimport { ArrowRight } from \"lucide-react\";\nimport { useLocalConfig } from \"../../config/useLocalConfig\";\nimport { FocalLengthProps } from \"../../types/interfaces\";\nimport DevicesList from \"../../utils/deviceFocalLengthJson\";\nimport { handleErrorMessage } from \"../../utils/utils\";\nimport { LanguageKeys } from \"../../utils/languageKeys\";\n\ntype PhoneModel = {\n\tid: number;\n\tmodel_name: string;\n\tfocal_length: number;\n};\n\ntype DeviceManufacturer = Record<string, PhoneModel[]>;\ntype DevicesListType = DeviceManufacturer[];\n\nconst FocalLengthWrapper = ({ config, initialValue, onComplete }: FocalLengthProps) => {\n\tconst { translate, setPreferredLanguage } = useContext(LanguageContext) || {};\n\tconst resolvedConfig = useLocalConfig(config);\n\tconst [deviceInfo, setDeviceInfo] = useState({\n\t\tbrandName: initialValue?.brandName ?? \"\",\n\t\tmodel: initialValue?.model ?? (null as PhoneModel | null),\n\t});\n\tconst [message, setMessage] = useState<string | undefined>(undefined);\n\tconst [loading, setLoading] = useState(false);\n\n\t/* ------------ Brand Menu ------------ */\n\tconst manufacturerMenuItems = useCallback(() => {\n\t\treturn (DevicesList as DevicesListType).map((manufacturer) => {\n\t\t\tconst brandName = Object.keys(manufacturer)[0];\n\t\t\treturn (\n\t\t\t\t<MenuItem key={brandName} value={brandName}>\n\t\t\t\t\t{brandName}\n\t\t\t\t</MenuItem>\n\t\t\t);\n\t\t});\n\t}, []);\n\n\t/* ------------ Model Menu ------------ */\n\tconst phoneModelMenuItems = useCallback(() => {\n\t\tconst brandMatch = (DevicesList as DevicesListType).find((manufacturer) => {\n\t\t\tconst key = Object.keys(manufacturer)[0];\n\t\t\treturn key === deviceInfo.brandName;\n\t\t});\n\n\t\tif (!brandMatch) return null;\n\n\t\tconst key = Object.keys(brandMatch)[0];\n\t\tconst models = brandMatch[key];\n\n\t\treturn models.map((phone) => (\n\t\t\t<MenuItem key={phone.id} value={phone.id}>\n\t\t\t\t{phone.model_name}\n\t\t\t</MenuItem>\n\t\t));\n\t}, [deviceInfo.brandName]);\n\n\tconst handleStepComplete = useCallback(async () => {\n\t\tsetLoading(true);\n\t\ttry {\n\t\t\tif (deviceInfo.brandName && deviceInfo.model) {\n\t\t\t\tawait onComplete?.({\n\t\t\t\t\tbrandName: deviceInfo.brandName,\n\t\t\t\t\tmodelName: deviceInfo.model.model_name,\n\t\t\t\t\tfocalLength: deviceInfo.model.focal_length,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsetMessage(handleErrorMessage(error));\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [deviceInfo]);\n\n\t/* ------------ Brand Change ------------ */\n\tconst handleBrandChange = (event: any) => {\n\t\tsetDeviceInfo({\n\t\t\tbrandName: event.target.value,\n\t\t\tmodel: null,\n\t\t});\n\t};\n\n\t/* ------------ Model Change ------------ */\n\tconst handleModelChange = (event: any) => {\n\t\tconst selectedId = event.target.value;\n\n\t\tconst brandMatch = (DevicesList as DevicesListType).find((m) => {\n\t\t\treturn Object.keys(m)[0] === deviceInfo.brandName;\n\t\t});\n\n\t\tif (!brandMatch) return;\n\n\t\tconst key = Object.keys(brandMatch)[0];\n\t\tconst models = brandMatch[key];\n\n\t\tconst foundModel = models.find((phone) => phone.id === selectedId);\n\n\t\tsetDeviceInfo((prev) => ({\n\t\t\t...prev,\n\t\t\tmodel: foundModel ?? null,\n\t\t}));\n\t};\n\n\tuseEffect(() => {\n\t\tsetPreferredLanguage?.(resolvedConfig?.language);\n\t}, [resolvedConfig]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"h-full flex-col max-w-md mx-auto pt-[1rem] p-[15px] w-full flex justify-start items-start text-center rounded-t-[20px]\"\n\t\t\tstyle={{ background: resolvedConfig?.style?.base?.backgroundColor }}\n\t\t>\n\t\t\t<div className=\"w-full max-w-[28rem] mx-auto\">\n\t\t\t\t<Header subtitle={translate?.(LanguageKeys.phoneModel)} resolvedConfig={resolvedConfig} />\n\t\t\t\t<div className=\"text-left mb-[.25rem] mt-[1rem]\">{translate?.(LanguageKeys.selectPhoneBrand)}</div>\n\n\t\t\t\t<Select\n\t\t\t\t\tonChange={handleBrandChange}\n\t\t\t\t\tclassName=\"w-full h-[40px] !shadow-none !outline-none text-left\"\n\t\t\t\t\tvalue={deviceInfo.brandName}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: resolvedConfig?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${resolvedConfig?.style?.input?.inputBorderColor || \"transparent\"}`,\n\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{manufacturerMenuItems()}\n\t\t\t\t</Select>\n\n\t\t\t\t<div className=\"text-left mb-[.25rem] mt-[1rem]\">{translate?.(LanguageKeys.selectPhoneModel)}</div>\n\n\t\t\t\t<Select\n\t\t\t\t\tonChange={handleModelChange}\n\t\t\t\t\tclassName=\"w-full bg-btn h-[40px] !shadow-none !outline-none text-left\"\n\t\t\t\t\tvalue={deviceInfo.model?.id || \"\"}\n\t\t\t\t\tdisabled={!deviceInfo.brandName}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: resolvedConfig?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: resolvedConfig?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: resolvedConfig?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: resolvedConfig?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${resolvedConfig?.style?.input?.inputBorderColor || \"transparent\"}`,\n\t\t\t\t\t\tfontFamily: resolvedConfig?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{phoneModelMenuItems()}\n\t\t\t\t</Select>\n\t\t\t\t<style>\n\t\t\t\t\t{`\n .MuiOutlinedInput-notchedOutline {\n border: 1px solid ${resolvedConfig?.style?.input?.inputBorderColor || \"transparent\"} !important;\n outline: none;\n }\n .MuiSelect-select{\n outline: none;\n }\n \n `}\n\t\t\t\t</style>\n\t\t\t\t{message && <p className=\"mt-[0.2rem] text-[16px]\">{message}</p>}\n\t\t\t</div>\n\n\t\t\t<div className=\"mt-[.75rem] mb-[1.25rem] max-w-[28rem] mx-auto w-full flex justify-end\">\n\t\t\t\t<SpecificButton\n\t\t\t\t\tdisabled={!deviceInfo?.brandName || !deviceInfo?.model || loading}\n\t\t\t\t\tpostfixIcon={<ArrowRight />}\n\t\t\t\t\tresolvedConfig={resolvedConfig}\n\t\t\t\t\tbuttonFunc={handleStepComplete}\n\t\t\t\t\tbuttonText={translate?.(LanguageKeys.next)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default FocalLengthWrapper;\n","import React from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nexport default function MuseScreenRenderer({\n\tscreenIndex,\n\tscanLinePosition,\n\tfaceZoomed,\n\tshowFaceScanLine,\n\tfaceScanLinePosition,\n\tshowLargeS,\n\ttypewriterText,\n\tfullText,\n\tscreens,\n\tvideoToShow,\n\tfaceScanVideo,\n\tsizeVideo,\n\tformFittingVideo,\n}: any) {\n\tconst screen = screens[screenIndex];\n\n\t// Map screen id to props for each component\n\tconst componentProps: any = {\n\t\tbody: { scanLinePosition, videoToShow },\n\t\tface: {\n\t\t\tfaceZoomed,\n\t\t\tshowFaceScanLine,\n\t\t\tfaceScanLinePosition,\n\t\t\tfaceScanVideo,\n\t\t},\n\t\tsizeFit: { showLargeS, typewriterText, fullText, sizeVideo },\n\t};\n\n\tconst hasComponent = !!screen.component;\n\tconst Comp = hasComponent ? screen.component : null;\n\n\tlet content = null;\n\tif (hasComponent) {\n\t\tcontent = React.createElement(Comp.type || Comp, componentProps[screen.id] || {});\n\t} else if (screen.image) {\n\t\tcontent = (\n\t\t\t<video className=\"h-full w-full object-contain border-none\" muted loop autoPlay playsInline preload=\"auto\">\n\t\t\t\t<source src={formFittingVideo} type=\"video/mp4\" />\n\t\t\t</video>\n\t\t);\n\t}\n\n\treturn (\n\t\t<AnimatePresence mode=\"wait\">\n\t\t\t<motion.div key={screenIndex} initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -20 }} transition={{ duration: 0.4 }} className=\"w-full h-full\">\n\t\t\t\t{content}\n\t\t\t</motion.div>\n\t\t</AnimatePresence>\n\t);\n}\n","import { ArrowRight } from \"lucide-react\";\nimport BodyScanAnimation from \"./BodyScanAnimation\";\nimport FaceScanAnimation from \"./FaceScanAnimation\";\nimport TypewriterScene from \"./TypewritterScene\";\nimport { useContext, useMemo, useState } from \"react\";\nimport MuseScreenRenderer from \"./MuseScreenRenderer\";\nimport Header from \"../../Header\";\nimport { GenderType, MuseScreenStep } from \"../../../utils/enums\";\nimport {\n bodyScanPerson,\n faceScanPerson,\n faceScanVideo,\n femaleScanVideo,\n fittingGuide,\n formFittingGuide,\n fullText,\n leSableDress,\n maleFaceScanVideo,\n maleFormFittingGuide,\n maleScanVideo,\n maleSizeSuggestions,\n OUTFIT_IMAGES,\n sizeSuggestions,\n} from \"../../..//utils/constants\";\nimport { MuseStepsProps } from \"../../../types/interfaces\";\nimport useMuseAnimations from \"../../../customHooks/useMuseAnimation\";\nimport SpecificButton from \"../../../atoms/specificButton/SpecificButton\";\nimport { LanguageKeys } from \"../../../utils/languageKeys\";\nimport { LanguageContext } from \"../../../utils/context/languageContext\";\n\nconst screens: {\n id: string;\n title: string;\n description: string;\n image: string;\n component?: React.ReactNode;\n}[] = [\n {\n id: MuseScreenStep.Body,\n title: LanguageKeys.bodyScan,\n description: LanguageKeys.bodyScanDescription,\n image: bodyScanPerson,\n component: <BodyScanAnimation />,\n },\n {\n id: MuseScreenStep.Face,\n title: LanguageKeys.faceScan,\n description: LanguageKeys.faceScanDescription,\n image: faceScanPerson,\n component: <FaceScanAnimation />,\n },\n {\n id: MuseScreenStep.SizeFit,\n title: LanguageKeys.sizeFit,\n description: \"\",\n image: leSableDress,\n component: <TypewriterScene />,\n },\n {\n id: MuseScreenStep.Ready,\n title: LanguageKeys.readyToStart,\n description: LanguageKeys.readyToStartDescription,\n image: fittingGuide,\n },\n];\n\nexport default function MuseSteps({\n applicableScreens,\n config,\n gender,\n handleNext,\n}: MuseStepsProps) {\n const { translate } = useContext(LanguageContext) || {};\n const [currentScreen, setCurrentScreen] = useState(0);\n const [scanLinePosition, setScanLinePosition] = useState(0);\n const [faceZoomed, setFaceZoomed] = useState(false);\n const [faceScanLinePosition, setFaceScanLinePosition] = useState(0);\n const [showFaceScanLine, setShowFaceScanLine] = useState(false);\n const [currentOutfit, setCurrentOutfit] = useState(0);\n const [typewriterText, setTypewriterText] = useState(\"\");\n const [showLargeS, setShowLargeS] = useState(false);\n\n const screensToShow = useMemo(() => {\n if (!applicableScreens?.length) {\n return screens;\n }\n return screens.filter((screen) => applicableScreens.includes(screen.id));\n }, [applicableScreens]);\n\n useMuseAnimations({\n screenId: screensToShow[currentScreen].id,\n setScanLinePosition,\n setFaceZoomed,\n setShowFaceScanLine,\n setFaceScanLinePosition,\n setCurrentOutfit,\n setTypewriterText,\n setShowLargeS,\n outfitImages: OUTFIT_IMAGES,\n fullText,\n });\n\n const onNextClick = () => {\n if (currentScreen < screensToShow.length - 1) {\n setCurrentScreen((prev) => prev + 1);\n } else {\n handleNext?.();\n }\n };\n return (\n <div\n className=\"relative h-full max-w-[28rem] mx-auto w-full flex justify-center\"\n style={{ background: config?.style?.base?.backgroundColor }}\n >\n \n \n <div className=\"absolute bottom-0 left-0 right-0 h-full shadow-lg \">\n <div className=\"h-full flex flex-col p-[1rem] w-full\">\n <Header noTitle resolvedConfig={config} />\n <div className=\"text-center pb-[.5rem]\">\n <h1\n style={{\n fontFamily:\n config?.style?.heading?.headingFontFamily ||\n \"SeriouslyNostalgic Fn\",\n fontSize: config?.style?.heading?.headingFontSize || \"32px\",\n color: config?.style?.heading?.headingColor || \"#000\",\n fontWeight:\n config?.style?.heading?.headingFontWeight || \"normal\",\n }}\n >\n {translate?.(screensToShow[currentScreen].title)}\n </h1>\n {screensToShow[currentScreen].description && (\n <p\n className=\" mt-[.25rem] max-w-[280px] mx-auto min-h-[40px]\"\n style={{\n fontFamily:\n config?.style?.subheading?.subheadingFontFamily ||\n \"'Inter', sans-serif\",\n fontSize:\n config?.style?.subheading?.subheadingFontSize || \"14px\",\n color:\n config?.style?.subheading?.subheadingColor || \"#4b5563\",\n fontWeight:\n config?.style?.subheading?.subheadingFontWeight || \"normal\",\n }}\n >\n {translate?.(screensToShow[currentScreen].description)}\n </p>\n )}\n </div>\n <div className=\"flex-1 flex justify-center items-center overflow-hidden py-[1rem] relative\">\n <MuseScreenRenderer\n screenIndex={currentScreen}\n scanLinePosition={scanLinePosition}\n faceZoomed={faceZoomed}\n showFaceScanLine={showFaceScanLine}\n faceScanLinePosition={faceScanLinePosition}\n outfitImages={OUTFIT_IMAGES}\n currentOutfit={currentOutfit}\n showLargeS={showLargeS}\n typewriterText={typewriterText}\n fullText={fullText}\n screens={screensToShow}\n videoToShow={\n gender === GenderType.Male ? maleScanVideo : femaleScanVideo\n }\n faceScanVideo={\n gender === GenderType.Male ? maleFaceScanVideo : faceScanVideo\n }\n sizeVideo={\n gender === GenderType.Male\n ? maleSizeSuggestions\n : sizeSuggestions\n }\n formFittingVideo={\n gender === GenderType.Male\n ? maleFormFittingGuide\n : formFittingGuide\n }\n />\n </div>\n\n <div className=\"pt-[.5rem] flex justify-end\">\n <SpecificButton\n resolvedConfig={config}\n buttonText={translate?.(LanguageKeys.next)}\n type=\"submit\"\n postfixIcon={<ArrowRight size={14} />}\n buttonFunc={onNextClick}\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","export default function BodyScanAnimation({\n videoToShow,\n}: {\n videoToShow?: string;\n}) {\n return (\n <div className=\"relative w-full h-full\">\n <video\n className=\"h-full w-full object-contain border-none\"\n muted\n autoPlay\n loop\n playsInline\n >\n <source src={videoToShow} type=\"video/mp4\" />\n </video>\n </div>\n );\n}\n","import { FaceScanAnimationProps } from \"../../../types/interfaces\";\n\nexport default function FaceScanAnimation({\n faceZoomed,\n showFaceScanLine,\n faceScanLinePosition,\n faceScanVideo,\n}: FaceScanAnimationProps) {\n return (\n <div className=\"relative h-full w-full\">\n <div className=\"w-full h-full relative\">\n <video\n className=\"h-full w-full object-contain border-none\"\n muted\n autoPlay\n playsInline\n >\n <source src={faceScanVideo} type=\"video/mp4\" />\n </video>\n {showFaceScanLine && faceZoomed && (\n <div\n className=\"absolute w-[1px] bg-[#8B5CF6] shadow-[0_0_8px_rgba(139,92,246,0.8)] z-20\"\n style={{\n left: `${faceScanLinePosition}%`,\n top: \"0%\",\n height: \"40%\",\n opacity:\n faceScanLinePosition && faceScanLinePosition >= 0 ? 1 : 0,\n }}\n />\n )}\n </div>\n </div>\n );\n}\n","export default function TypewriterScene({ sizeVideo }: { sizeVideo?: string }) {\n return (\n <div className=\"relative w-full h-full flex justify-center items-center\">\n <video\n className=\"h-full w-full object-contain border-none\"\n muted\n loop\n autoPlay\n playsInline\n >\n <source src={sizeVideo} type=\"video/mp4\" />\n </video>\n </div>\n );\n}\n","import { useEffect, useRef } from \"react\";\n\nfunction useMuseAnimations({\n screenId,\n setScanLinePosition,\n setFaceZoomed,\n setShowFaceScanLine,\n setFaceScanLinePosition,\n setCurrentOutfit,\n outfitImages,\n setTypewriterText,\n setShowLargeS,\n fullText,\n}: any) {\n const animationRefs = useRef<any>({\n scan: null,\n face: null,\n outfit: null,\n typewriter: null,\n });\n\n const cleanupAnimations = () => {\n Object.values(animationRefs.current).forEach((ref: any) => {\n if (typeof ref === \"number\") {\n cancelAnimationFrame(ref);\n } else if (ref) {\n clearTimeout(ref);\n clearInterval(ref);\n }\n });\n animationRefs.current = {\n scan: null,\n face: null,\n outfit: null,\n typewriter: null,\n };\n };\n\n useEffect(() => {\n cleanupAnimations();\n\n switch (screenId) {\n case \"body\": {\n const startTime = Date.now();\n const duration = 3000;\n\n const animateScanLine = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n setScanLinePosition(progress * 100);\n if (progress < 1) {\n animationRefs.current.scan = requestAnimationFrame(animateScanLine);\n }\n };\n\n animationRefs.current.scan = requestAnimationFrame(animateScanLine);\n break;\n }\n\n case \"face\": {\n setFaceZoomed(false);\n setShowFaceScanLine(false);\n setFaceScanLinePosition(0);\n\n animationRefs.current.face = setTimeout(() => {\n setFaceZoomed(true);\n\n setTimeout(() => {\n setShowFaceScanLine(true);\n\n const startTime = Date.now();\n const duration = 6000; // ✅ Total 6s (3s for each direction)\n\n const animateFaceScanLine = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n\n setFaceScanLinePosition(\n progress <= 0.5 ? progress * 2 * 100 : (2 - progress * 2) * 100\n );\n\n if (progress < 1) {\n animationRefs.current.face =\n requestAnimationFrame(animateFaceScanLine);\n }\n };\n\n animationRefs.current.face =\n requestAnimationFrame(animateFaceScanLine);\n }, 2500); // Delay after zoom\n }, 800); // Delay before zoom\n break;\n }\n\n case \"sizeFit\": {\n setCurrentOutfit(0);\n animationRefs.current.outfit = setInterval(() => {\n setCurrentOutfit((prev: any) => (prev + 1) % outfitImages.length);\n }, 1500);\n break;\n }\n\n case \"ready\": {\n setShowLargeS(false);\n setTypewriterText(\"\");\n\n animationRefs.current.typewriter = setTimeout(() => {\n setShowLargeS(true);\n setTimeout(() => {\n let currentIndex = 0;\n const typeNextChar = () => {\n if (currentIndex < fullText.length) {\n setTypewriterText(fullText.slice(0, currentIndex + 1));\n currentIndex++;\n animationRefs.current.typewriter = setTimeout(typeNextChar, 30);\n }\n };\n typeNextChar();\n }, 1000);\n }, 800);\n break;\n }\n\n default:\n break;\n }\n\n return cleanupAnimations;\n }, [screenId]);\n}\n\nexport default useMuseAnimations;\n","import { ArrowRight, Volume2 } from \"lucide-react\";\nimport { useState, useEffect, useContext } from \"react\";\nimport Header from \"../Header\";\nimport { VolumeStepProps } from \"../../types/interfaces\";\nimport { LanguageContext } from \"../../utils/context/languageContext\";\nimport { LanguageKeys } from \"../../utils/languageKeys\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\n\nexport default function VolumeScreen({ handleNext, config }: VolumeStepProps) {\n const { translate } = useContext(LanguageContext) || {};\n const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });\n const [isAnimationPaused, setIsAnimationPaused] = useState(false);\n\n useEffect(() => {\n const handleMouseMove = (e: any) => {\n setMousePosition({ x: e.clientX, y: e.clientY });\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n return () => window.removeEventListener(\"mousemove\", handleMouseMove);\n }, []);\n\n const toggleAnimationPause = () => {\n setIsAnimationPaused((prev) => !prev);\n };\n\n function hexToRgba(hex: string, alpha: number = 1): string {\n hex = hex.replace(\"#\", \"\");\n\n if (hex.length === 3) {\n hex = hex\n .split(\"\")\n .map((h) => h + h)\n .join(\"\");\n }\n\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n const brandColor = config?.style?.base?.brandColor || \"#000\";\n const rgba1 = hexToRgba(brandColor, 0.19);\n const rgba2 = hexToRgba(brandColor, 0.23);\n const rgba3 = hexToRgba(brandColor, 0.24);\n\n const calculateHolographicEffect = () => {\n const windowWidth =\n typeof window !== \"undefined\" ? window.innerWidth : 1000;\n const windowHeight =\n typeof window !== \"undefined\" ? window.innerHeight : 1000;\n const normalizedX = (mousePosition.x / windowWidth) * 2 - 1;\n const normalizedY = (mousePosition.y / windowHeight) * 2 - 1;\n const rotateX = normalizedY * 5;\n const rotateY = normalizedX * -5;\n\n return {\n transform: `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`,\n background: \"#fff\",\n boxShadow: `0 0 20px ${rgba1}, 0 0 30px ${rgba2}`,\n };\n };\n\n const holographicStyle = calculateHolographicEffect();\n\n return (\n <div\n className=\"flex h-full max-w-[28rem] mx-auto w-full flex-col relative items-center justify-center overflow-hidden max-w-md mx-auto bg-primary text-base\"\n style={{ background: config?.style?.base?.backgroundColor }}\n >\n <div className=\"flex justify-start absolute z-[99] top-[1rem] max-w-md mx-auto w-full px-[1rem]\">\n <Header noTitle resolvedConfig={config} />\n </div>\n <div className=\"relative mb-[2rem]\">\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className=\"absolute rounded-[9999px]\"\n style={{\n width: \"100px\",\n height: \"100px\",\n minHeight: \"100px\",\n minWidth: \"100px\",\n background: config?.style?.base?.backgroundColor || \"#fff\",\n boxShadow: `0 0 20px 2px ${rgba3}`,\n border: \"none\",\n filter: \"blur(1px)\",\n margin: \"0 auto\",\n left: \"50%\",\n top: \"50%\",\n animation: isAnimationPaused\n ? \"none\"\n : `gentleRipple 15s cubic-bezier(0.1, 0.5, 0.2, 1) ${\n i * 5\n }s infinite`,\n opacity: isAnimationPaused ? 1 : 0,\n transform: isAnimationPaused\n ? \"translate(-50%, -50%) scale(0.5)\"\n : \"translate(-50%, -50%)\",\n }}\n />\n ))}\n\n <div\n className=\"relative z-10 rounded-[9999px] p-[1.5rem] cursor-pointer transition-all backdrop-blur-sm\"\n style={{\n ...holographicStyle,\n transition: \"transform 0.1s ease-out, box-shadow 0.1s ease-out\",\n }}\n onClick={toggleAnimationPause}\n >\n <Volume2\n className=\"w-[3rem] h-[3rem] relative z-10\"\n style={{ filter: \"drop-shadow(0 0 5px rgba(255, 255, 255, 0.7))\" }}\n color={config?.style?.base?.primaryColor || \"#000\"}\n />\n </div>\n </div>\n\n <div className=\"relative z-10 text-center max-w-[20rem]\">\n <div\n className=\" mb-[.5rem]\"\n style={{\n fontFamily:\n config?.style?.subheading?.subheadingFontFamily ||\n \"'Inter', sans-serif\",\n fontSize: config?.style?.subheading?.subheadingFontSize || \"14px\",\n color: config?.style?.subheading?.subheadingColor || \"#4b5563\",\n fontWeight:\n config?.style?.subheading?.subheadingFontWeight || \"normal\",\n }}\n >\n {translate?.(LanguageKeys.turnUpVolume)}\n </div>\n </div>\n\n <div className=\"absolute bottom-[1rem] right-0 max-w-[28rem] mx-auto w-full px-[1rem] max-w-md mx-auto\">\n <div className=\"flex justify-end\">\n <SpecificButton\n buttonFunc={() => handleNext()}\n postfixIcon={<ArrowRight />}\n buttonText={translate?.(LanguageKeys.continue)}\n resolvedConfig={config}\n />\n </div>\n </div>\n <style>{`\n @keyframes gentleRipple {\n 0% {\n transform: translate(-50%, -50%) scale(0.5) translateZ(0);\n opacity: 0.7;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n transform: translate(-50%, -50%) scale(25) translateZ(0);\n opacity: 0;\n }\n }\n`}</style>\n </div>\n );\n}\n","import { useContext } from \"react\";\nimport { ArrowRight } from \"lucide-react\";\nimport Header from \"../Header\";\nimport { maleSetupVideo, setupVideo } from \"../../utils/constants\";\nimport { SetupScreenProps } from \"../../types/interfaces\";\nimport { LanguageContext } from \"../../utils/context/languageContext\";\nimport { LanguageKeys } from \"../../utils/languageKeys\";\nimport { GenderType } from \"../../utils/enums\";\nimport SpecificButton from \"../../atoms/specificButton/SpecificButton\";\n\nexport default function SetupScreen({ gender, handleNext, config }: SetupScreenProps) {\n\tconst { translate } = useContext(LanguageContext) || {};\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"flex h-full max-w-[28rem] mx-auto w-full p-[1rem] relative flex-col items-center overflow-hidden max-w-md mx-auto bg-primary text-base\"\n\t\t\tstyle={{ background: config?.style?.base?.backgroundColor }}\n\t\t>\n\t\t\t<div className=\"flex justify-start max-w-md mx-auto w-full \">\n\t\t\t\t<Header noTitle resolvedConfig={config} />\n\t\t\t</div>\n\t\t\t<h2\n\t\t\t\tclassName=\"mb-[1rem] text-[32px]\"\n\t\t\t\tstyle={{\n\t\t\t\t\tfontFamily: config?.style?.heading?.headingFontFamily || \"SeriouslyNostalgic Fn\",\n\t\t\t\t\tfontSize: config?.style?.heading?.headingFontSize || \"32px\",\n\t\t\t\t\tcolor: config?.style?.heading?.headingColor || \"#000\",\n\t\t\t\t\tfontWeight: config?.style?.heading?.headingFontWeight || \"normal\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{translate?.(LanguageKeys.phonePlacement)}\n\t\t\t</h2>\n\t\t\t<p\n\t\t\t\tclassName=\"text-center text-gray-600 text-sm mt-1 max-w-[280px] mx-auto min-h-[40px]\"\n\t\t\t\tstyle={{\n\t\t\t\t\tfontFamily: config?.style?.subheading?.subheadingFontFamily || \"'Inter', sans-serif\",\n\t\t\t\t\tfontSize: config?.style?.subheading?.subheadingFontSize || \"14px\",\n\t\t\t\t\tcolor: config?.style?.subheading?.subheadingColor || \"#4b5563\",\n\t\t\t\t\tfontWeight: config?.style?.subheading?.subheadingFontWeight || \"normal\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{translate?.(LanguageKeys.phonePlacementDescription)}\n\t\t\t</p>\n\t\t\t<div className=\"relative w-full h-full flex flex-col items-center max-w-md pt-[1rem]\">\n\t\t\t\t<div className=\"relative w-full h-auto\">\n\t\t\t\t\t<video className=\"h-full w-full object-contain border-none\" muted loop autoPlay playsInline>\n\t\t\t\t\t\t<source src={gender === GenderType.Male ? maleSetupVideo : setupVideo} type=\"video/mp4\" />\n\t\t\t\t\t</video>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"absolute bottom-[0] max-w-[28rem] mx-auto w-full left-0 right-0 flex justify-center max-w-md mx-auto\">\n\t\t\t\t\t<div className=\"flex justify-end w-full\">\n\t\t\t\t\t\t<SpecificButton buttonFunc={() => handleNext?.()} buttonText={translate?.(LanguageKeys.continue)} postfixIcon={<ArrowRight />} resolvedConfig={config} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { useContext, useEffect, useState } from \"react\";\nimport MuseSteps from \"./MuseSteps\";\nimport VolumeStep from \"./VolumeStep\";\nimport SetupScreen from \"./SetupScreen\";\nimport { EducationalProps } from \"../../types/interfaces\";\nimport { GenderType, MuseScreenStep, SectionType } from \"../../utils/enums\";\nimport { useLocalConfig } from \"../../config/useLocalConfig\";\nimport { LanguageContext } from \"../../utils/context/languageContext\";\n\nconst EducationalStepsWrapper = ({ sections, gender, onComplete, config }: EducationalProps) => {\n\tconst resolvedConfig = useLocalConfig(config);\n\tconst { setPreferredLanguage } = useContext(LanguageContext) || {};\n\tconst [step, setStep] = useState(1);\n\n\tuseEffect(() => {\n\t\tsetPreferredLanguage?.(resolvedConfig.language);\n\t}, [resolvedConfig]);\n\n\tswitch (step) {\n\t\tcase 1:\n\t\t\treturn (\n\t\t\t\t<MuseSteps\n\t\t\t\t\tapplicableScreens={\n\t\t\t\t\t\tsections?.[0] === SectionType.Full || !sections || !sections?.length\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: sections[0] === SectionType.Body\n\t\t\t\t\t\t\t? [MuseScreenStep.Body, MuseScreenStep.SizeFit, MuseScreenStep.Ready]\n\t\t\t\t\t\t\t: [MuseScreenStep.Face, MuseScreenStep.SizeFit]\n\t\t\t\t\t}\n\t\t\t\t\tconfig={resolvedConfig}\n\t\t\t\t\tgender={gender || GenderType.Male}\n\t\t\t\t\thandleNext={() => setStep(2)}\n\t\t\t\t/>\n\t\t\t);\n\n\t\tcase 2:\n\t\t\treturn <VolumeStep handleNext={() => (sections?.[0] === SectionType.Face ? onComplete?.() : setStep(3))} config={resolvedConfig} />;\n\n\t\tcase 3:\n\t\t\treturn <SetupScreen config={resolvedConfig} gender={gender || GenderType.Male} handleNext={onComplete} />;\n\n\t\tdefault:\n\t\t\treturn <></>;\n\t}\n};\n\nexport default EducationalStepsWrapper;\n","import { EducationalProps } from \"../../types/interfaces\";\nimport { GenderType } from \"../../utils/enums\";\nimport EducationalStepsWrapper from \"./EducationalStepsWrapper\";\nimport LanguageContextProvider from \"../../utils/context/languageContext\";\n\nexport const Educational: React.FC<EducationalProps> = ({\n sections = [],\n config,\n gender = GenderType.Male,\n onComplete,\n}) => {\n return (\n <LanguageContextProvider>\n <EducationalStepsWrapper\n sections={sections}\n config={config}\n gender={gender}\n onComplete={onComplete}\n />\n </LanguageContextProvider>\n );\n};\n","import React from \"react\";\nimport FocalLengthWrapper from \"./FocalLengthWrapper\";\nimport { FocalLengthProps } from \"../../types/interfaces\";\nimport LanguageContextProvider from \"../../utils/context/languageContext\";\n\nexport const FocalLength: React.FC<FocalLengthProps> = ({\n onComplete,\n initialValue,\n config,\n}: FocalLengthProps) => {\n return (\n <LanguageContextProvider>\n <FocalLengthWrapper\n config={config}\n onComplete={onComplete}\n initialValue={initialValue}\n />\n </LanguageContextProvider>\n );\n};\n","\"use client\";\nimport React, { useState, useMemo, useCallback } from \"react\";\nimport { OnboardingProps } from \"../../types/interfaces\";\nimport { resolveSteps } from \"../../utils/utils\";\nimport LanguageContextProvider from \"../../utils/context/languageContext\";\nimport StepsWrapper from \"./StepsWrapper\";\n\nexport const Onboarding: React.FC<OnboardingProps> = ({\n steps,\n config,\n onComplete,\n}) => {\n const visibleSteps = useMemo(() => resolveSteps(steps), [steps]);\n const [values, setValues] = useState<Record<string, any>>({});\n const [stepIndex, setStepIndex] = useState(0);\n const currentStep = visibleSteps[stepIndex];\n const fullOrder = steps.map((s) => s.type);\n\n /** 4️⃣ Handle completion for a step */\n const handleStepComplete = useCallback(\n (value: any) => {\n if (!currentStep) return;\n const updated = { ...values, [currentStep.type]: value };\n setValues(updated);\n if (stepIndex === visibleSteps.length - 1) {\n onComplete?.(updated);\n } else {\n setStepIndex((prev) => prev + 1); // 👈 FIX\n }\n },\n [currentStep, values, stepIndex, visibleSteps.length, onComplete]\n );\n\n if (!visibleSteps.length)\n return <div>No steps configured for onboarding.</div>;\n\n return (\n <LanguageContextProvider>\n <StepsWrapper\n currentStep={currentStep}\n handleStepComplete={handleStepComplete}\n visibleSteps={visibleSteps}\n fullOrder={fullOrder}\n config={config}\n />\n </LanguageContextProvider>\n );\n};\n"],"names":["cn","classes","filter","Boolean","join","CustomInput","forwardRef","className","resolvedConfig","type","props","ref","_jsxs","_Fragment","children","_jsx","autoCapitalize","autoCorrect","style","background","input","inputBackgroundColor","color","inputTextColor","fontSize","inputFontSize","fontWeight","inputFontWeight","border","inputBorderColor","fontFamily","base","baseFontFamily","borderRadius","inputBorderRadius","inputPlaceholderColor","displayName","EmailStep","onComplete","initialValue","onStepComplete","value","setValue","React","useState","message","setMessage","undefined","loading","setLoading","translate","useContext","LanguageContext","onSubmit","async","e","preventDefault","trim","LanguageKeys","emailRequired","isValidEmail","validEmail","error","handleErrorMessage","required","id","placeholder","enterEmail","onChange","target","inputErrorColor","inputErrorFontSize","SpecificButton","disabled","buttonText","next","postfixIcon","ArrowRight","size","NameStep","nameRequired","enterName","GenderStep","genderType","setGenderType","GenderType","Male","onClick","primaryColor","mens","Female","womens","buttonFunc","console","log","HeightStep","localHeight","setLocalHeight","cm","String","ft","inch","measurementUnit","setMeasurementUnit","preferredLanguage","handleSetHeight","useCallback","event","prev","handleMeasurementUnit","val","validateHeight","height","convertToCentimeters","checkMeasurement","heightError","isButtonDisabled","useMemo","useEffect","renderHeightInput","inputMode","heightInFt","heightInInch","Select","MenuItem","cmMeasurementUnit","ftMeasurementUnit","ProgressDots","totalSteps","currentStepIndex","activeColor","inactiveColor","secondaryColor","dots","Array","from","length","_","i","index","isActive","isCompleted","map","backgroundColor","StepsWrapper","currentStep","handleStepComplete","fullOrder","config","visibleSteps","setPreferredLanguage","useLocalConfig","language","unsupportedStep","absoluteIndex","indexOf","logo","src","alt","logoHeight","width","logoWidth","heading","headingFontFamily","headingFontSize","headingColor","headingFontWeight","onboarding","commonProps","OnboardingStep","Email","Name","Gender","Height","noValidSteps","renderStep","DevicesList","FocalLengthWrapper","deviceInfo","setDeviceInfo","brandName","model","manufacturerMenuItems","manufacturer","Object","keys","phoneModelMenuItems","brandMatch","find","phone","model_name","modelName","focalLength","focal_length","Header","subtitle","phoneModel","selectPhoneBrand","selectPhoneModel","selectedId","m","foundModel","MuseScreenRenderer","screenIndex","scanLinePosition","faceZoomed","showFaceScanLine","faceScanLinePosition","showLargeS","typewriterText","fullText","screens","videoToShow","faceScanVideo","sizeVideo","formFittingVideo","screen","componentProps","body","face","sizeFit","hasComponent","component","Comp","content","createElement","image","muted","loop","autoPlay","playsInline","preload","AnimatePresence","mode","motion","div","initial","opacity","y","animate","exit","transition","duration","MuseScreenStep","Body","title","bodyScan","description","bodyScanDescription","bodyScanPerson","Face","faceScan","faceScanDescription","faceScanPerson","left","top","SizeFit","leSableDress","Ready","readyToStart","readyToStartDescription","fittingGuide","MuseSteps","applicableScreens","gender","handleNext","currentScreen","setCurrentScreen","setScanLinePosition","setFaceZoomed","setFaceScanLinePosition","setShowFaceScanLine","currentOutfit","setCurrentOutfit","setTypewriterText","setShowLargeS","screensToShow","includes","screenId","outfitImages","animationRefs","useRef","scan","outfit","typewriter","cleanupAnimations","values","current","forEach","cancelAnimationFrame","clearTimeout","clearInterval","startTime","Date","now","animateScanLine","elapsed","progress","Math","min","requestAnimationFrame","setTimeout","animateFaceScanLine","setInterval","currentIndex","typeNextChar","slice","useMuseAnimations","OUTFIT_IMAGES","noTitle","subheading","subheadingFontFamily","subheadingFontSize","subheadingColor","subheadingFontWeight","maleScanVideo","femaleScanVideo","maleFaceScanVideo","maleSizeSuggestions","sizeSuggestions","maleFormFittingGuide","formFittingGuide","VolumeScreen","mousePosition","setMousePosition","x","isAnimationPaused","setIsAnimationPaused","handleMouseMove","clientX","clientY","window","addEventListener","removeEventListener","hexToRgba","hex","alpha","replace","split","h","parseInt","substring","brandColor","rgba1","rgba2","rgba3","holographicStyle","windowWidth","innerWidth","windowHeight","innerHeight","normalizedX","transform","boxShadow","calculateHolographicEffect","minHeight","minWidth","margin","animation","Volume2","turnUpVolume","continue","SetupScreen","phonePlacement","phonePlacementDescription","maleSetupVideo","setupVideo","EducationalStepsWrapper","sections","step","setStep","SectionType","Full","VolumeStep","LanguageContextProvider","steps","resolveSteps","setValues","stepIndex","setStepIndex","s","updated"],"mappings":"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"}