{"version":3,"file":"react-use-wizard.mjs","sources":["../src/wizardContext.ts","../src/useWizard.ts","../src/logger.ts","../src/wizard.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { WizardValues } from './types';\n\nconst WizardContext = React.createContext<WizardValues | null>(null);\n\nif (__DEV__) {\n  WizardContext.displayName = 'WizardContext';\n}\n\nexport default WizardContext;\n","import * as React from 'react';\n\nimport { WizardValues } from './types';\nimport WizardContext from './wizardContext';\n\nconst useWizard = () => {\n  const context = React.useContext(WizardContext);\n\n  if (!context && __DEV__) {\n    throw Error('Wrap your step with `Wizard`');\n  } else {\n    return context as WizardValues;\n  }\n};\n\nexport default useWizard;\n","import { LogLevel } from './types';\n/**\n * Log messages in the console with a corresponding urgency\n *\n * @param level The urgency of the message\n * @param message The message to log in the console\n */\nexport const log = (level: LogLevel, message: string) => {\n  if (__DEV__) {\n    const packageName = '[react-use-wizard]';\n\n    switch (level) {\n      case 'warn':\n        console.warn(`${packageName} ${message}`);\n        break;\n      case 'error':\n        console.error(`${packageName} ${message}`);\n        break;\n      default:\n        console.log(`${packageName} ${message}`);\n    }\n  }\n};\n","import * as React from 'react';\n\nimport * as logger from './logger';\nimport { Handler, WizardProps } from './types';\nimport WizardContext from './wizardContext';\n\nconst Wizard: React.FC<React.PropsWithChildren<WizardProps>> = React.memo(\n  ({\n    header,\n    footer,\n    children,\n    onStepChange,\n    wrapper: Wrapper,\n    startIndex = 0,\n  }) => {\n    const [activeStep, setActiveStep] = React.useState(startIndex);\n    const [isLoading, setIsLoading] = React.useState(false);\n    const hasNextStep = React.useRef(true);\n    const hasPreviousStep = React.useRef(false);\n    const nextStepHandler = React.useRef<Handler>(() => {});\n    const stepCount = React.Children.toArray(children).length;\n\n    hasNextStep.current = activeStep < stepCount - 1;\n    hasPreviousStep.current = activeStep > 0;\n\n    const goToNextStep = React.useCallback(() => {\n      if (hasNextStep.current) {\n        const newActiveStepIndex = activeStep + 1;\n\n        setActiveStep(newActiveStepIndex);\n        onStepChange?.(newActiveStepIndex);\n      }\n    }, [activeStep, onStepChange]);\n\n    const goToPreviousStep = React.useCallback(() => {\n      if (hasPreviousStep.current) {\n        nextStepHandler.current = null;\n        const newActiveStepIndex = activeStep - 1;\n\n        setActiveStep(newActiveStepIndex);\n        onStepChange?.(newActiveStepIndex);\n      }\n    }, [activeStep, onStepChange]);\n\n    const goToStep = React.useCallback(\n      (stepIndex: number) => {\n        if (stepIndex >= 0 && stepIndex < stepCount) {\n          nextStepHandler.current = null;\n          setActiveStep(stepIndex);\n          onStepChange?.(stepIndex);\n        } else {\n          if (__DEV__) {\n            logger.log(\n              'warn',\n              [\n                `Invalid step index [${stepIndex}] passed to 'goToStep'. `,\n                `Ensure the given stepIndex is not out of boundaries.`,\n              ].join(''),\n            );\n          }\n        }\n      },\n      [stepCount, onStepChange],\n    );\n\n    // Callback to attach the step handler\n    const handleStep = React.useRef((handler: Handler) => {\n      nextStepHandler.current = handler;\n    });\n\n    const doNextStep = React.useCallback(async () => {\n      if (hasNextStep.current && nextStepHandler.current) {\n        try {\n          setIsLoading(true);\n          await nextStepHandler.current();\n          setIsLoading(false);\n          nextStepHandler.current = null;\n          goToNextStep();\n        } catch (error) {\n          setIsLoading(false);\n          throw error;\n        }\n      } else {\n        goToNextStep();\n      }\n    }, [goToNextStep]);\n\n    const wizardValue = React.useMemo(\n      () => ({\n        nextStep: doNextStep,\n        previousStep: goToPreviousStep,\n        handleStep: handleStep.current,\n        isLoading,\n        activeStep,\n        stepCount,\n        isFirstStep: !hasPreviousStep.current,\n        isLastStep: !hasNextStep.current,\n        goToStep,\n      }),\n      [\n        doNextStep,\n        goToPreviousStep,\n        isLoading,\n        activeStep,\n        stepCount,\n        goToStep,\n      ],\n    );\n\n    const activeStepContent = React.useMemo(() => {\n      const reactChildren = React.Children.toArray(children);\n\n      if (__DEV__) {\n        // No steps passed\n        if (reactChildren.length === 0) {\n          logger.log(\n            'warn',\n            'Make sure to pass your steps as children in your <Wizard>',\n          );\n        }\n        // The passed start index is invalid\n        if (activeStep > reactChildren.length) {\n          logger.log('warn', 'An invalid startIndex is passed to <Wizard>');\n        }\n        // Invalid header element\n        if (header && !React.isValidElement(header)) {\n          logger.log('error', 'Invalid header passed to <Wizard>');\n        }\n        // Invalid footer element\n        if (footer && !React.isValidElement(footer)) {\n          logger.log('error', 'Invalid footer passed to <Wizard>');\n        }\n      }\n\n      return reactChildren[activeStep];\n    }, [activeStep, children, header, footer]);\n\n    const enhancedActiveStepContent = React.useMemo(\n      () =>\n        Wrapper\n          ? React.cloneElement(Wrapper, { children: activeStepContent })\n          : activeStepContent,\n      [Wrapper, activeStepContent],\n    );\n\n    return (\n      <WizardContext.Provider value={wizardValue}>\n        {header}\n        {enhancedActiveStepContent}\n        {footer}\n      </WizardContext.Provider>\n    );\n  },\n);\n\nexport default Wizard;\n"],"names":["WizardContext","React","displayName","useWizard","context","Error","log","level","message","packageName","console","warn","error","Wizard","header","footer","children","onStepChange","wrapper","Wrapper","startIndex","activeStep","setActiveStep","isLoading","setIsLoading","hasNextStep","hasPreviousStep","nextStepHandler","stepCount","toArray","length","current","goToNextStep","newActiveStepIndex","goToPreviousStep","goToStep","stepIndex","logger","join","handleStep","handler","doNextStep","wizardValue","nextStep","previousStep","isFirstStep","isLastStep","activeStepContent","reactChildren","enhancedActiveStepContent","Provider","value"],"mappings":";;AAIA,MAAMA,aAAa,gBAAGC,aAAA,CAAyC,IAAzC,CAAtB;;AAEA,2CAAa;AACXD,EAAAA,aAAa,CAACE,WAAd,GAA4B,eAA5B;AACD;;ACHD,MAAMC,SAAS,GAAG;AAChB,QAAMC,OAAO,GAAGH,UAAA,CAAiBD,aAAjB,CAAhB;;AAEA,MAAI,CAACI,OAAD,yCAAJ,EAAyB;AACvB,UAAMC,KAAK,CAAC,8BAAD,CAAX;AACD,GAFD,MAEO;AACL,WAAOD,OAAP;AACD;AACF,CARD;;ACJA;;;;;;AAMA,AAAO,MAAME,GAAG,GAAG,CAACC,KAAD,EAAkBC,OAAlB;AACjB,6CAAa;AACX,UAAMC,WAAW,GAAG,oBAApB;;AAEA,YAAQF,KAAR;AACE,WAAK,MAAL;AACEG,QAAAA,OAAO,CAACC,IAAR,CAAgBF,WAAhB,SAA+BD,OAA/B;AACA;;AACF,WAAK,OAAL;AACEE,QAAAA,OAAO,CAACE,KAAR,CAAiBH,WAAjB,SAAgCD,OAAhC;AACA;;AACF;AACEE,QAAAA,OAAO,CAACJ,GAAR,CAAeG,WAAf,SAA8BD,OAA9B;AARJ;AAUD;AACF,CAfM;;ACDP,MAAMK,MAAM,gBAAmDZ,IAAA,CAC7D,CAAC;AACCa,EAAAA,MADD;AAECC,EAAAA,MAFD;AAGCC,EAAAA,QAHD;AAICC,EAAAA,YAJD;AAKCC,EAAAA,OAAO,EAAEC,OALV;AAMCC,EAAAA,UAAU,GAAG;AANd,CAAD;AAQE,QAAM,CAACC,UAAD,EAAaC,aAAb,IAA8BrB,QAAA,CAAemB,UAAf,CAApC;AACA,QAAM,CAACG,SAAD,EAAYC,YAAZ,IAA4BvB,QAAA,CAAe,KAAf,CAAlC;AACA,QAAMwB,WAAW,GAAGxB,MAAA,CAAa,IAAb,CAApB;AACA,QAAMyB,eAAe,GAAGzB,MAAA,CAAa,KAAb,CAAxB;AACA,QAAM0B,eAAe,GAAG1B,MAAA,CAAsB,QAAtB,CAAxB;AACA,QAAM2B,SAAS,GAAG3B,QAAA,CAAe4B,OAAf,CAAuBb,QAAvB,EAAiCc,MAAnD;AAEAL,EAAAA,WAAW,CAACM,OAAZ,GAAsBV,UAAU,GAAGO,SAAS,GAAG,CAA/C;AACAF,EAAAA,eAAe,CAACK,OAAhB,GAA0BV,UAAU,GAAG,CAAvC;AAEA,QAAMW,YAAY,GAAG/B,WAAA,CAAkB;AACrC,QAAIwB,WAAW,CAACM,OAAhB,EAAyB;AACvB,YAAME,kBAAkB,GAAGZ,UAAU,GAAG,CAAxC;AAEAC,MAAAA,aAAa,CAACW,kBAAD,CAAb;AACAhB,MAAAA,YAAY,QAAZ,YAAAA,YAAY,CAAGgB,kBAAH,CAAZ;AACD;AACF,GAPoB,EAOlB,CAACZ,UAAD,EAAaJ,YAAb,CAPkB,CAArB;AASA,QAAMiB,gBAAgB,GAAGjC,WAAA,CAAkB;AACzC,QAAIyB,eAAe,CAACK,OAApB,EAA6B;AAC3BJ,MAAAA,eAAe,CAACI,OAAhB,GAA0B,IAA1B;AACA,YAAME,kBAAkB,GAAGZ,UAAU,GAAG,CAAxC;AAEAC,MAAAA,aAAa,CAACW,kBAAD,CAAb;AACAhB,MAAAA,YAAY,QAAZ,YAAAA,YAAY,CAAGgB,kBAAH,CAAZ;AACD;AACF,GARwB,EAQtB,CAACZ,UAAD,EAAaJ,YAAb,CARsB,CAAzB;AAUA,QAAMkB,QAAQ,GAAGlC,WAAA,CACdmC,SAAD;AACE,QAAIA,SAAS,IAAI,CAAb,IAAkBA,SAAS,GAAGR,SAAlC,EAA6C;AAC3CD,MAAAA,eAAe,CAACI,OAAhB,GAA0B,IAA1B;AACAT,MAAAA,aAAa,CAACc,SAAD,CAAb;AACAnB,MAAAA,YAAY,QAAZ,YAAAA,YAAY,CAAGmB,SAAH,CAAZ;AACD,KAJD,MAIO;AACL,iDAAa;AACXC,QAAAA,GAAA,CACE,MADF,EAEE,0BACyBD,SADzB,uFAGEE,IAHF,CAGO,EAHP,CAFF;AAOD;AACF;AACF,GAjBc,EAkBf,CAACV,SAAD,EAAYX,YAAZ,CAlBe,CAAjB;;AAsBA,QAAMsB,UAAU,GAAGtC,MAAA,CAAcuC,OAAD;AAC9Bb,IAAAA,eAAe,CAACI,OAAhB,GAA0BS,OAA1B;AACD,GAFkB,CAAnB;AAIA,QAAMC,UAAU,GAAGxC,WAAA,CAAkB;AACnC,QAAIwB,WAAW,CAACM,OAAZ,IAAuBJ,eAAe,CAACI,OAA3C,EAAoD;AAClD,UAAI;AACFP,QAAAA,YAAY,CAAC,IAAD,CAAZ;AACA,cAAMG,eAAe,CAACI,OAAhB,EAAN;AACAP,QAAAA,YAAY,CAAC,KAAD,CAAZ;AACAG,QAAAA,eAAe,CAACI,OAAhB,GAA0B,IAA1B;AACAC,QAAAA,YAAY;AACb,OAND,CAME,OAAOpB,KAAP,EAAc;AACdY,QAAAA,YAAY,CAAC,KAAD,CAAZ;AACA,cAAMZ,KAAN;AACD;AACF,KAXD,MAWO;AACLoB,MAAAA,YAAY;AACb;AACF,GAfkB,EAehB,CAACA,YAAD,CAfgB,CAAnB;AAiBA,QAAMU,WAAW,GAAGzC,OAAA,CAClB,OAAO;AACL0C,IAAAA,QAAQ,EAAEF,UADL;AAELG,IAAAA,YAAY,EAAEV,gBAFT;AAGLK,IAAAA,UAAU,EAAEA,UAAU,CAACR,OAHlB;AAILR,IAAAA,SAJK;AAKLF,IAAAA,UALK;AAMLO,IAAAA,SANK;AAOLiB,IAAAA,WAAW,EAAE,CAACnB,eAAe,CAACK,OAPzB;AAQLe,IAAAA,UAAU,EAAE,CAACrB,WAAW,CAACM,OARpB;AASLI,IAAAA;AATK,GAAP,CADkB,EAYlB,CACEM,UADF,EAEEP,gBAFF,EAGEX,SAHF,EAIEF,UAJF,EAKEO,SALF,EAMEO,QANF,CAZkB,CAApB;AAsBA,QAAMY,iBAAiB,GAAG9C,OAAA,CAAc;AACtC,UAAM+C,aAAa,GAAG/C,QAAA,CAAe4B,OAAf,CAAuBb,QAAvB,CAAtB;;AAEA,+CAAa;AACX;AACA,UAAIgC,aAAa,CAAClB,MAAd,KAAyB,CAA7B,EAAgC;AAC9BO,QAAAA,GAAA,CACE,MADF,EAEE,2DAFF;AAID,OAPU;;;AASX,UAAIhB,UAAU,GAAG2B,aAAa,CAAClB,MAA/B,EAAuC;AACrCO,QAAAA,GAAA,CAAW,MAAX,EAAmB,6CAAnB;AACD,OAXU;;;AAaX,UAAIvB,MAAM,IAAI,CAACb,cAAA,CAAqBa,MAArB,CAAf,EAA6C;AAC3CuB,QAAAA,GAAA,CAAW,OAAX,EAAoB,mCAApB;AACD,OAfU;;;AAiBX,UAAItB,MAAM,IAAI,CAACd,cAAA,CAAqBc,MAArB,CAAf,EAA6C;AAC3CsB,QAAAA,GAAA,CAAW,OAAX,EAAoB,mCAApB;AACD;AACF;;AAED,WAAOW,aAAa,CAAC3B,UAAD,CAApB;AACD,GA1ByB,EA0BvB,CAACA,UAAD,EAAaL,QAAb,EAAuBF,MAAvB,EAA+BC,MAA/B,CA1BuB,CAA1B;AA4BA,QAAMkC,yBAAyB,GAAGhD,OAAA,CAChC,MACEkB,OAAO,GACHlB,YAAA,CAAmBkB,OAAnB,EAA4B;AAAEH,IAAAA,QAAQ,EAAE+B;AAAZ,GAA5B,CADG,GAEHA,iBAJ0B,EAKhC,CAAC5B,OAAD,EAAU4B,iBAAV,CALgC,CAAlC;AAQA,SACE9C,aAAA,CAACD,aAAa,CAACkD,QAAf;AAAwBC,IAAAA,KAAK,EAAET;GAA/B,EACG5B,MADH,EAEGmC,yBAFH,EAGGlC,MAHH,CADF;AAOD,CAlJ4D,CAA/D;;;;"}