@swan-admin/swan-web-component 1.0.102 → 1.0.103
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 +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","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/components/onboarding/Onboarding.tsx","../src/utils/deviceFocalLengthJson/index.ts","../src/components/focalLength/FocalLengthWrapper.tsx","../src/components/focalLength/FocalLength.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"],"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","\"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","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 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","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"],"names":["cn","classes","filter","Boolean","join","CustomInput","React","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","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","Onboarding","steps","resolveSteps","values","setValues","stepIndex","setStepIndex","s","updated","LanguageContextProvider","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","FocalLength","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","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","Educational"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","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/components/onboarding/Onboarding.tsx","../src/utils/deviceFocalLengthJson/index.ts","../src/components/focalLength/FocalLengthWrapper.tsx","../src/components/focalLength/FocalLength.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"],"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","\"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","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 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","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"],"names":["cn","classes","filter","Boolean","join","CustomInput","React","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","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","Onboarding","steps","resolveSteps","values","setValues","stepIndex","setStepIndex","s","updated","LanguageContextProvider","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","FocalLength","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","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","Educational"],"mappings":"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"}
|