@swan-admin/swan-web-component 1.0.102 → 1.0.104

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/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\tsetMessage(handleErrorMessage(error));\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n const customStyles = {\n\t\t...resolvedConfig,style: {\n\t\t\t...resolvedConfig?.style,\n\t\t\tbutton: {\n\t\t\t\t...resolvedConfig?.style?.button,\n\t\t\t\tbuttonTextColor: resolvedConfig?.style?.button?.priority?.buttonTextColor || resolvedConfig?.style?.button?.buttonTextColor,\n\t\t\t\tbuttonBackground: resolvedConfig?.style?.button?.priority?.buttonBackground || resolvedConfig?.style?.button?.buttonBackground,\n buttonDisabledBackground: resolvedConfig?.style?.button?.priority?.buttonBackground || resolvedConfig?.style?.button?.buttonDisabledBackground,\n buttonDisabledTextColor: resolvedConfig?.style?.button?.priority?.buttonDisabledTextColor || resolvedConfig?.style?.button?.buttonDisabledTextColor,\n justify: resolvedConfig?.style?.button?.priority?.justify || 'center',\n padding: resolvedConfig?.style?.button?.priority?.padding || \"6px 24px\",\n },\n input: {\n ...resolvedConfig?.style?.input,\n inputBackgroundColor: resolvedConfig?.style?.input?.priority?.inputBackgroundColor || resolvedConfig?.style?.input?.inputBackgroundColor,\n inputTextColor: resolvedConfig?.style?.input?.priority?.inputTextColor || resolvedConfig?.style?.input?.inputTextColor,\n },\n\t\t}\n\t }\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: genderType === GenderType.Male ? customStyles?.style?.input?.inputBackgroundColorSelect : customStyles?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: genderType === GenderType.Male ? customStyles?.style?.input?.inputBackgroundColorSelectTextColor : customStyles?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: customStyles?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: customStyles?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${genderType === GenderType.Male ? customStyles?.style?.base?.primaryColor : `transparent`}`,\n\t\t\t\t\t\tfontFamily: customStyles?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t\tborderRadius: customStyles?.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: genderType === GenderType.Female ? customStyles?.style?.input?.inputBackgroundColorSelect : customStyles?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: genderType === GenderType.Female ? customStyles?.style?.input?.inputBackgroundColorSelectTextColor : customStyles?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: customStyles?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: customStyles?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${genderType === GenderType.Female ? customStyles?.style?.base?.primaryColor : `transparent`}`,\n\t\t\t\t\t\tfontFamily: customStyles?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t\tborderRadius: customStyles?.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={customStyles}\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={customStyles}\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={customStyles}\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={customStyles}\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 const customStyles = {\n\t\t...resolvedConfig,style: {\n\t\t\t...resolvedConfig?.style,\n\t\t\tbutton: {\n\t\t\t\t...resolvedConfig?.style?.button,\n\t\t\t\tbuttonTextColor: resolvedConfig?.style?.button?.priority?.buttonTextColor || resolvedConfig?.style?.button?.buttonTextColor,\n\t\t\t\tbuttonBackground: resolvedConfig?.style?.button?.priority?.buttonBackground || resolvedConfig?.style?.button?.buttonBackground,\n buttonDisabledBackground: resolvedConfig?.style?.button?.priority?.buttonBackground || resolvedConfig?.style?.button?.buttonDisabledBackground,\n buttonDisabledTextColor: resolvedConfig?.style?.button?.priority?.buttonDisabledTextColor || resolvedConfig?.style?.button?.buttonDisabledTextColor,\n justify: resolvedConfig?.style?.button?.priority?.justify || 'center',\n padding: resolvedConfig?.style?.button?.priority?.padding || \"6px 24px\",\n },\n input: {\n ...resolvedConfig?.style?.input,\n inputBackgroundColor: resolvedConfig?.style?.input?.priority?.inputBackgroundColor || resolvedConfig?.style?.input?.inputBackgroundColor,\n inputTextColor: resolvedConfig?.style?.input?.priority?.inputTextColor || resolvedConfig?.style?.input?.inputTextColor,\n inputPlaceholderColor: resolvedConfig?.style?.input?.priority?.inputPlaceholderColor || resolvedConfig?.style?.input?.inputPlaceholderColor,\n },\n\t\t}\n\t }\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: customStyles?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\t\tcolor: customStyles?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\t\tfontSize: customStyles?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\t\tfontWeight: customStyles?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\t\tborder: `1px solid ${customStyles?.style?.input?.inputBorderColor || \"transparent\"}`,\n\t\t\t\t\t\t\tfontFamily: customStyles?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t\t\tborderRadius: customStyles?.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 ${customStyles?.style?.input?.inputBorderColor || \"transparent\"} !important;\n outline: none;\n }\n .MuiSelect-select{\n outline: none;\n }\n .MuiSvgIcon-root{\n color: ${customStyles?.style?.input?.inputTextColor || \"#000\"} !important;\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: customStyles?.style?.input?.inputErrorColor || \"#000\",\n\t\t\t\t\t\tfontSize: customStyles?.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={customStyles} 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 const customStyles = {\n ...config,style: {\n ...config?.style,\n button: {\n ...config?.style?.button,\n buttonTextColor: config?.style?.button?.priority?.buttonTextColor || config?.style?.button?.buttonTextColor,\n buttonBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonBackground,\n buttonDisabledBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonDisabledBackground,\n buttonDisabledTextColor: config?.style?.button?.priority?.buttonDisabledTextColor || config?.style?.button?.buttonDisabledTextColor,\n justify: config?.style?.button?.priority?.justify || 'center',\n padding: config?.style?.button?.priority?.padding || \"6px 24px\",\n },\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 w-full\">\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={customStyles}\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 const customStyles = {\n ...config,style: {\n ...config?.style,\n button: {\n ...config?.style?.button,\n buttonTextColor: config?.style?.button?.priority?.buttonTextColor || config?.style?.button?.buttonTextColor,\n buttonBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonBackground,\n buttonDisabledBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonDisabledBackground,\n buttonDisabledTextColor: config?.style?.button?.priority?.buttonDisabledTextColor || config?.style?.button?.buttonDisabledTextColor,\n justify: config?.style?.button?.priority?.justify || 'center',\n padding: config?.style?.button?.priority?.padding || \"6px 24px\",\n },\n }\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={customStyles}\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 const customStyles = {\n ...config,style: {\n ...config?.style,\n button: {\n ...config?.style?.button,\n buttonTextColor: config?.style?.button?.priority?.buttonTextColor || config?.style?.button?.buttonTextColor,\n buttonBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonBackground,\n buttonDisabledBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonDisabledBackground,\n buttonDisabledTextColor: config?.style?.button?.priority?.buttonDisabledTextColor || config?.style?.button?.buttonDisabledTextColor,\n justify: config?.style?.button?.priority?.justify || 'center',\n padding: config?.style?.button?.priority?.padding || \"6px 24px\",\n },\n }\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={customStyles} />\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> = ({ steps, config, onComplete }) => {\n\tconst visibleSteps = useMemo(() => resolveSteps(steps), [steps]);\n\tconst [values, setValues] = useState<Record<string, any>>({});\n\tconst [stepIndex, setStepIndex] = useState(0);\n\tconst currentStep = visibleSteps[stepIndex];\n\tconst fullOrder = steps.map((s) => s.type);\n\n\t/** 4️⃣ Handle completion for a step */\n\tconst handleStepComplete = useCallback(\n\t\t(value: any) => {\n\t\t\tif (!currentStep) return;\n\t\t\tconst updated = { ...values, [currentStep.type]: value };\n\t\t\tsetValues(updated);\n\t\t\tif (stepIndex === visibleSteps.length - 1) {\n\t\t\t\tonComplete?.(updated);\n\t\t\t} else {\n\t\t\t\tsetStepIndex((prev) => prev + 1); // 👈 FIX\n\t\t\t}\n\t\t},\n\t\t[currentStep, values, stepIndex, visibleSteps.length, onComplete],\n\t);\n\n\tif (!visibleSteps.length) return <div>No steps configured for onboarding.</div>;\n\n\treturn (\n\t\t<LanguageContextProvider>\n\t\t\t<StepsWrapper currentStep={currentStep} handleStepComplete={handleStepComplete} visibleSteps={visibleSteps} fullOrder={fullOrder} config={config} />\n\t\t</LanguageContextProvider>\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","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","customStyles","button","buttonTextColor","priority","buttonBackground","buttonDisabledBackground","buttonDisabledTextColor","justify","padding","GenderType","Male","onClick","inputBackgroundColorSelect","inputBackgroundColorSelectTextColor","primaryColor","mens","Female","womens","buttonFunc","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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"}
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\tsetMessage(handleErrorMessage(error));\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n const customStyles = {\n\t\t...resolvedConfig,style: {\n\t\t\t...resolvedConfig?.style,\n\t\t\tbutton: {\n\t\t\t\t...resolvedConfig?.style?.button,\n\t\t\t\tbuttonTextColor: resolvedConfig?.style?.button?.priority?.buttonTextColor || resolvedConfig?.style?.button?.buttonTextColor,\n\t\t\t\tbuttonBackground: resolvedConfig?.style?.button?.priority?.buttonBackground || resolvedConfig?.style?.button?.buttonBackground,\n buttonDisabledBackground: resolvedConfig?.style?.button?.priority?.buttonBackground || resolvedConfig?.style?.button?.buttonDisabledBackground,\n buttonDisabledTextColor: resolvedConfig?.style?.button?.priority?.buttonDisabledTextColor || resolvedConfig?.style?.button?.buttonDisabledTextColor,\n justify: resolvedConfig?.style?.button?.priority?.justify || 'center',\n padding: resolvedConfig?.style?.button?.priority?.padding || \"6px 24px\",\n },\n input: {\n ...resolvedConfig?.style?.input,\n inputBackgroundColor: resolvedConfig?.style?.input?.priority?.inputBackgroundColor || resolvedConfig?.style?.input?.inputBackgroundColor,\n inputTextColor: resolvedConfig?.style?.input?.priority?.inputTextColor || resolvedConfig?.style?.input?.inputTextColor,\n inputBackgroundColorSelect: resolvedConfig?.style?.input?.priority?.inputBackgroundColorSelect || resolvedConfig?.style?.input?.inputBackgroundColorSelect,\n inputBackgroundColorSelectTextColor: resolvedConfig?.style?.input?.priority?.inputBackgroundColorSelectTextColor || resolvedConfig?.style?.input?.inputBackgroundColorSelectTextColor,\n },\n\t\t}\n\t }\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 cursor-pointer 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: genderType === GenderType.Male ? customStyles?.style?.input?.inputBackgroundColorSelect : customStyles?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: genderType === GenderType.Male ? customStyles?.style?.input?.inputBackgroundColorSelectTextColor : customStyles?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: customStyles?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: customStyles?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${genderType === GenderType.Male ? customStyles?.style?.base?.primaryColor : `transparent`}`,\n\t\t\t\t\t\tfontFamily: customStyles?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t\tborderRadius: customStyles?.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: genderType === GenderType.Female ? customStyles?.style?.input?.inputBackgroundColorSelect : customStyles?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\tcolor: genderType === GenderType.Female ? customStyles?.style?.input?.inputBackgroundColorSelectTextColor : customStyles?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\tfontSize: customStyles?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\tfontWeight: customStyles?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\tborder: `1px solid ${genderType === GenderType.Female ? customStyles?.style?.base?.primaryColor : `transparent`}`,\n\t\t\t\t\t\tfontFamily: customStyles?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t\tborderRadius: customStyles?.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={customStyles}\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={customStyles}\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={customStyles}\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={customStyles}\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 const customStyles = {\n\t\t...resolvedConfig,style: {\n\t\t\t...resolvedConfig?.style,\n\t\t\tbutton: {\n\t\t\t\t...resolvedConfig?.style?.button,\n\t\t\t\tbuttonTextColor: resolvedConfig?.style?.button?.priority?.buttonTextColor || resolvedConfig?.style?.button?.buttonTextColor,\n\t\t\t\tbuttonBackground: resolvedConfig?.style?.button?.priority?.buttonBackground || resolvedConfig?.style?.button?.buttonBackground,\n buttonDisabledBackground: resolvedConfig?.style?.button?.priority?.buttonBackground || resolvedConfig?.style?.button?.buttonDisabledBackground,\n buttonDisabledTextColor: resolvedConfig?.style?.button?.priority?.buttonDisabledTextColor || resolvedConfig?.style?.button?.buttonDisabledTextColor,\n justify: resolvedConfig?.style?.button?.priority?.justify || 'center',\n padding: resolvedConfig?.style?.button?.priority?.padding || \"6px 24px\",\n },\n input: {\n ...resolvedConfig?.style?.input,\n inputBackgroundColor: resolvedConfig?.style?.input?.priority?.inputBackgroundColor || resolvedConfig?.style?.input?.inputBackgroundColor,\n inputTextColor: resolvedConfig?.style?.input?.priority?.inputTextColor || resolvedConfig?.style?.input?.inputTextColor,\n inputPlaceholderColor: resolvedConfig?.style?.input?.priority?.inputPlaceholderColor || resolvedConfig?.style?.input?.inputPlaceholderColor,\n },\n\t\t}\n\t }\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: customStyles?.style?.input?.inputBackgroundColor || \"#F9FAFC\",\n\t\t\t\t\t\t\tcolor: customStyles?.style?.input?.inputTextColor || \"#000\",\n\t\t\t\t\t\t\tfontSize: customStyles?.style?.input?.inputFontSize || \"16px\",\n\t\t\t\t\t\t\tfontWeight: customStyles?.style?.input?.inputFontWeight || \"400\",\n\t\t\t\t\t\t\tborder: `1px solid ${customStyles?.style?.input?.inputBorderColor || \"transparent\"}`,\n\t\t\t\t\t\t\tfontFamily: customStyles?.style?.base?.baseFontFamily || \"Inter, sans-serif\",\n\t\t\t\t\t\t\tborderRadius: customStyles?.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 ${customStyles?.style?.input?.inputBorderColor || \"transparent\"} !important;\n outline: none;\n }\n .MuiSelect-select{\n outline: none;\n }\n .MuiSvgIcon-root{\n color: ${customStyles?.style?.input?.inputTextColor || \"#000\"} !important;\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: customStyles?.style?.input?.inputErrorColor || \"#000\",\n\t\t\t\t\t\tfontSize: customStyles?.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={customStyles} 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 const customStyles = {\n ...config,style: {\n ...config?.style,\n button: {\n ...config?.style?.button,\n buttonTextColor: config?.style?.button?.priority?.buttonTextColor || config?.style?.button?.buttonTextColor,\n buttonBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonBackground,\n buttonDisabledBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonDisabledBackground,\n buttonDisabledTextColor: config?.style?.button?.priority?.buttonDisabledTextColor || config?.style?.button?.buttonDisabledTextColor,\n justify: config?.style?.button?.priority?.justify || 'center',\n padding: config?.style?.button?.priority?.padding || \"6px 24px\",\n },\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 w-full\">\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={customStyles}\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 const customStyles = {\n ...config,style: {\n ...config?.style,\n button: {\n ...config?.style?.button,\n buttonTextColor: config?.style?.button?.priority?.buttonTextColor || config?.style?.button?.buttonTextColor,\n buttonBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonBackground,\n buttonDisabledBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonDisabledBackground,\n buttonDisabledTextColor: config?.style?.button?.priority?.buttonDisabledTextColor || config?.style?.button?.buttonDisabledTextColor,\n justify: config?.style?.button?.priority?.justify || 'center',\n padding: config?.style?.button?.priority?.padding || \"6px 24px\",\n },\n }\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={customStyles}\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 const customStyles = {\n ...config,style: {\n ...config?.style,\n button: {\n ...config?.style?.button,\n buttonTextColor: config?.style?.button?.priority?.buttonTextColor || config?.style?.button?.buttonTextColor,\n buttonBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonBackground,\n buttonDisabledBackground: config?.style?.button?.priority?.buttonBackground || config?.style?.button?.buttonDisabledBackground,\n buttonDisabledTextColor: config?.style?.button?.priority?.buttonDisabledTextColor || config?.style?.button?.buttonDisabledTextColor,\n justify: config?.style?.button?.priority?.justify || 'center',\n padding: config?.style?.button?.priority?.padding || \"6px 24px\",\n },\n }\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={customStyles} />\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> = ({ steps, config, onComplete }) => {\n\tconst visibleSteps = useMemo(() => resolveSteps(steps), [steps]);\n\tconst [values, setValues] = useState<Record<string, any>>({});\n\tconst [stepIndex, setStepIndex] = useState(0);\n\tconst currentStep = visibleSteps[stepIndex];\n\tconst fullOrder = steps.map((s) => s.type);\n\n\t/** 4️⃣ Handle completion for a step */\n\tconst handleStepComplete = useCallback(\n\t\t(value: any) => {\n\t\t\tif (!currentStep) return;\n\t\t\tconst updated = { ...values, [currentStep.type]: value };\n\t\t\tsetValues(updated);\n\t\t\tif (stepIndex === visibleSteps.length - 1) {\n\t\t\t\tonComplete?.(updated);\n\t\t\t} else {\n\t\t\t\tsetStepIndex((prev) => prev + 1); // 👈 FIX\n\t\t\t}\n\t\t},\n\t\t[currentStep, values, stepIndex, visibleSteps.length, onComplete],\n\t);\n\n\tif (!visibleSteps.length) return <div>No steps configured for onboarding.</div>;\n\n\treturn (\n\t\t<LanguageContextProvider>\n\t\t\t<StepsWrapper currentStep={currentStep} handleStepComplete={handleStepComplete} visibleSteps={visibleSteps} fullOrder={fullOrder} config={config} />\n\t\t</LanguageContextProvider>\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","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","customStyles","button","buttonTextColor","priority","buttonBackground","buttonDisabledBackground","buttonDisabledTextColor","justify","padding","inputBackgroundColorSelect","inputBackgroundColorSelectTextColor","GenderType","Male","onClick","primaryColor","mens","Female","womens","buttonFunc","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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"}