react-top-loading-bar
Version:
A very simple, highly customisable react top loader component.
1 lines • 22.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/useInterval.ts","../src/utils.ts","../src/index.tsx"],"names":["noop","useInterval","callback","delay","immediate","savedCallback","useRef","useEffect","id","randomValue","min","max","randomInt","LoadingBar","forwardRef","progress","height","className","color","background","onLoaderFinished","transitionTime","loaderSpeed","waitingTime","shadow","containerStyle","style","shadowStyleProp","containerClassName","ref","isMounted","localProgress","localProgressSet","useState","pressedContinuous","pressedStaticStart","setStaticStartPressed","initialLoaderStyle","loaderContainerStyle","initialShadowStyles","loaderStyle","loaderStyleSet","shadowStyle","shadowStyleSet","useImperativeHandle","startingValue","refreshRate","val","checkIfFull","type","continuousRandom","staticRandom","value","prev","newVal","_progress","_loaderStyle","minValue","maxValue","random","LoaderContext","LoadingBarContainer","children","props","hookProps","setProps","start","_a","useLoadingBar","context"],"mappings":"qGAGA,IAAMA,CAAAA,CAAO,IAAM,EAEZ,CAAA,SAASC,CACdC,CAAAA,CAAAA,CACAC,EACAC,CACA,CAAA,CACA,IAAMC,CAAAA,CAAgBC,MAAON,CAAAA,CAAI,CAGjCO,CAAAA,SAAAA,CAAU,IAAM,CACdF,CAAc,CAAA,OAAA,CAAUH,EAC1B,CAAC,EAGDK,SAAU,CAAA,IAAM,CAIhB,CAAA,CAAG,CAACH,CAAS,CAAC,CAGdG,CAAAA,SAAAA,CAAU,IAAM,CACd,GAAIJ,CAAAA,GAAU,IAAQA,EAAAA,CAAAA,GAAU,CAAO,CAAA,CAAA,OAEvC,IAAMK,CAAAA,CAAK,WADE,CAAA,IAAMH,EAAc,OAAQ,EAAA,CACZF,CAAK,CAAA,CAClC,OAAO,IAAM,aAAcK,CAAAA,CAAE,CAC/B,CAAA,CAAG,CAACL,CAAK,CAAC,EACZ,CC/BO,SAASM,CAAAA,CAAYC,CAAaC,CAAAA,CAAAA,CAAqB,CAC5D,OAAQ,IAAK,CAAA,MAAA,EAAYA,EAAAA,CAAAA,CAAMD,CAAM,CAAA,CAAA,CAAA,CAAKA,CAC5C,CAEO,SAASE,CAAUF,CAAAA,CAAAA,CAAaC,CAAqB,CAAA,CAC1D,OAAO,IAAA,CAAK,KAAMF,CAAAA,CAAAA,CAAYC,CAAKC,CAAAA,CAAG,CAAC,CACzC,CCqCA,IAAME,EAAaC,UACjB,CAAA,CACE,CACE,QAAA,CAAAC,CACA,CAAA,MAAA,CAAAC,CAAS,CAAA,CAAA,CACT,SAAAC,CAAAA,CAAAA,CAAY,EACZ,CAAA,KAAA,CAAAC,CAAQ,CAAA,KAAA,CACR,WAAAC,CAAa,CAAA,aAAA,CACb,gBAAAC,CAAAA,CAAAA,CACA,cAAAC,CAAAA,CAAAA,CAAiB,GACjB,CAAA,WAAA,CAAAC,CAAc,CAAA,GAAA,CACd,WAAAC,CAAAA,CAAAA,CAAc,GACd,CAAA,MAAA,CAAAC,EAAS,CACT,CAAA,CAAA,cAAA,CAAAC,CAAiB,CAAA,EACjB,CAAA,KAAA,CAAAC,CAAQ,CAAA,EACR,CAAA,WAAA,CAAaC,CAAkB,CAAA,EAC/B,CAAA,kBAAA,CAAAC,EAAqB,EACvB,CAAA,CACAC,CACG,GAAA,CACH,IAAMC,CAAAA,CAAYxB,MAAO,CAAA,CAAA,CAAK,CACxB,CAAA,CAACyB,CAAeC,CAAAA,CAAgB,CAAIC,CAAAA,QAAAA,CAAiB,CAAC,CAEtDC,CAAAA,CAAAA,CAAoB5B,MAGvB,CAAA,CAAE,MAAQ,CAAA,CAAA,CAAA,CAAO,WAAa,CAAA,GAAK,CAAC,CAAA,CAEjC,CAAC6B,CAAAA,CAAoBC,CAAqB,CAAA,CAAIH,SAGjD,CAAE,MAAA,CAAQ,CAAO,CAAA,CAAA,KAAA,CAAO,EAAG,CAAC,CAEzBI,CAAAA,CAAAA,CAAoC,CACxC,MAAA,CAAQ,MACR,CAAA,UAAA,CAAYnB,CACZ,CAAA,UAAA,CAAY,OAAOI,CAAW,CAAA,OAAA,CAAA,CAC9B,KAAO,CAAA,IACT,CAEMgB,CAAAA,CAAAA,CAAsC,CAC1C,QAAA,CAAU,OACV,CAAA,GAAA,CAAK,CACL,CAAA,IAAA,CAAM,CACN,CAAA,MAAA,CAAAtB,CACA,CAAA,UAAA,CAAAG,CACA,CAAA,MAAA,CAAQ,WACR,CAAA,KAAA,CAAO,MACT,CAAA,CAEMoB,CAAqC,CAAA,CACzC,SAAW,CAAA,CAAA,SAAA,EAAYrB,CAAK,CAAA,WAAA,EAAcA,CAAK,CAAA,CAAA,CAC/C,MAAO,IACP,CAAA,OAAA,CAAS,CACT,CAAA,QAAA,CAAU,UACV,CAAA,MAAA,CAAQ,MACR,CAAA,UAAA,CAAY,CAAOI,IAAAA,EAAAA,CAAW,CAC9B,OAAA,CAAA,CAAA,SAAA,CAAW,mCACX,CAAA,IAAA,CAAM,QACR,CAEM,CAAA,CAACkB,CAAaC,CAAAA,CAAc,CAChCR,CAAAA,QAAAA,CAAwBI,CAAkB,CAAA,CACtC,CAACK,CAAAA,CAAaC,CAAc,CAAA,CAChCV,QAAwBM,CAAAA,CAAmB,EAE7ChC,SAAU,CAAA,KACRuB,CAAU,CAAA,OAAA,CAAU,CACb,CAAA,CAAA,IAAM,CACXA,CAAAA,CAAU,OAAU,CAAA,CAAA,EACtB,CACC,CAAA,CAAA,EAAE,CAAA,CAELc,oBAAoBf,CAAK,CAAA,KAAO,CAC9B,eAAA,CAAgBgB,CAAwBC,CAAAA,CAAAA,CAAsB,GAAM,CAAA,CAClE,GAAIX,CAAAA,CAAmB,MAAQ,CAAA,OAC/B,GAAIpB,CAAAA,GAAa,OAAW,CAC1B,OAAA,CAAQ,IACN,CAAA,oGACF,CACA,CAAA,MACF,CAEA,IAAMgC,CAAMF,CAAAA,CAAAA,EAAiBjC,CAAU,CAAA,EAAA,CAAI,EAAE,CAAA,CAE7CsB,EAAkB,OAAU,CAAA,CAC1B,MAAQ,CAAA,CAAA,CAAA,CACR,WAAAY,CAAAA,CACF,CAEAd,CAAAA,CAAAA,CAAiBe,CAAG,CAAA,CACpBC,CAAYD,CAAAA,CAAG,EACjB,CAAA,CACA,YAAYF,CAAwB,CAAA,CAClC,GAAIX,CAAAA,CAAkB,OAAQ,CAAA,MAAA,CAAQ,OACtC,GAAInB,CAAa,GAAA,KAAA,CAAA,CAAW,CAC1B,OAAA,CAAQ,IACN,CAAA,oGACF,EACA,MACF,CAEA,IAAMgC,CAAAA,CAAMF,CAAiBjC,EAAAA,CAAAA,CAAU,EAAI,CAAA,EAAE,CAE7CwB,CAAAA,CAAAA,CAAsB,CACpB,MAAA,CAAQ,CACR,CAAA,CAAA,KAAA,CAAOW,CACT,CAAC,CAAA,CACDf,CAAiBe,CAAAA,CAAG,CACpBC,CAAAA,CAAAA,CAAYD,CAAG,EACjB,CACA,CAAA,KAAA,CAAME,CAAO,CAAA,YAAA,CAAcJ,CAAwBC,CAAAA,CAAAA,CAAsB,CACvE,GAAI/B,CAAAA,GAAa,KAAW,CAAA,CAAA,CAC1B,OAAQ,CAAA,IAAA,CACN,oGACF,CAAA,CACA,MACF,CAEIkC,CAAS,GAAA,YAAA,CACXf,CAAkB,CAAA,OAAA,CAAU,CAC1B,MAAQ,CAAA,CAAA,CAAA,CACR,WAAaY,CAAAA,CAAAA,EAAe,GAC9B,CAAA,CAEAV,CAAsB,CAAA,CACpB,MAAQ,CAAA,CAAA,CAAA,CACR,KAAOS,CAAAA,CAAAA,EAAiB,EAC1B,CAAC,EAGH,IAAMK,CAAAA,CAAmBtC,CAAU,CAAA,EAAA,CAAI,EAAE,CAAA,CACnCuC,CAAevC,CAAAA,CAAAA,CAAU,EAAI,CAAA,EAAE,CAE/BmC,CAAAA,CAAAA,CACJF,CACCI,GAAAA,CAAAA,GAAS,aAAeC,CAAmBC,CAAAA,CAAAA,CAAAA,CAE9CnB,CAAiBe,CAAAA,CAAG,CACpBC,CAAAA,CAAAA,CAAYD,CAAG,EACjB,CACA,CAAA,QAAA,EAAW,CACT,GAAIhC,CAAa,GAAA,KAAA,CAAA,CAAW,CAC1B,OAAQ,CAAA,IAAA,CACN,oGACF,CAAA,CACA,MACF,CACAiB,CAAiB,CAAA,GAAG,CACpBgB,CAAAA,CAAAA,CAAY,GAAG,EACjB,CACA,CAAA,QAAA,CAASI,EAAe,CACtB,GAAIrC,CAAa,GAAA,KAAA,CAAA,CAAW,CAC1B,OAAA,CAAQ,IACN,CAAA,oGACF,CACA,CAAA,MACF,CACAiB,CAAAA,CAAkBqB,CAAS,EAAA,CACzB,IAAMC,CAAAA,CAASD,CAAOD,CAAAA,CAAAA,CACtB,OAAAJ,CAAAA,CAAYM,CAAM,CAAA,CACXA,CACT,CAAC,EACH,CAAA,CACA,QAASF,CAAAA,CAAAA,CAAe,CACtB,GAAIrC,IAAa,KAAW,CAAA,CAAA,CAC1B,OAAQ,CAAA,IAAA,CACN,oGACF,CAAA,CACA,MACF,CACAiB,CAAkBqB,CAAAA,CAAAA,EAAS,CACzB,IAAMC,CAASD,CAAAA,CAAAA,CAAOD,EACtB,OAAAJ,CAAAA,CAAYM,CAAM,CAAA,CACXA,CACT,CAAC,EACH,CAAA,CACA,WAAc,EAAA,CACZ,OAAOvB,CACT,CACF,CAAA,CAAE,EAEFxB,SAAU,CAAA,IAAM,CACdkC,CAAAA,CAAe,CACb,GAAGD,CACH,CAAA,UAAA,CAAYtB,CACd,CAAC,CAEDyB,CAAAA,CAAAA,CAAe,CACb,GAAGD,EACH,SAAW,CAAA,CAAA,SAAA,EAAYxB,CAAK,CAAA,UAAA,EAAaA,CAAK,CAAA,CAChD,CAAC,EACH,CAAG,CAAA,CAACA,CAAK,CAAC,CAEVX,CAAAA,SAAAA,CAAU,IAAM,CACd,GAAIsB,CAAK,CAAA,CACP,GAAIA,CAAAA,EAAOd,CAAa,GAAA,KAAA,CAAA,CAAW,CACjC,OAAA,CAAQ,IACN,CAAA,CAAA,6MAAA,CACF,CACA,CAAA,MACF,CACAiC,CAAYjB,CAAAA,CAAa,EAC3B,CAAA,KACMhB,CAAUiC,EAAAA,CAAAA,CAAYjC,CAAQ,EAEtC,CAAG,CAAA,CAACA,CAAQ,CAAC,CAEb,CAAA,IAAMiC,EAAeO,CAAsB,EAAA,CACrCA,CAAa,EAAA,GAAA,EAEfd,CAAe,CAAA,CACb,GAAGD,CAAAA,CACH,KAAO,CAAA,MACT,CAAC,CAAA,CACGhB,CACFmB,EAAAA,CAAAA,CAAe,CACb,GAAGD,CAAAA,CACH,IAAMa,CAAAA,CAAAA,CAAY,EAAK,CAAA,GACzB,CAAC,CAAA,CAGH,UAAW,CAAA,IAAM,CACVzB,CAAAA,CAAU,OAIfW,GAAAA,CAAAA,CAAe,CACb,GAAGD,CAAAA,CACH,OAAS,CAAA,CAAA,CACT,KAAO,CAAA,MAAA,CACP,UAAY,CAAA,CAAA,IAAA,EAAOnB,CAAc,CAAA,WAAA,CAAA,CACjC,KAAOH,CAAAA,CACT,CAAC,CAAA,CAED,WAAW,IAAM,CACVY,CAAU,CAAA,OAAA,GAIXI,CAAkB,CAAA,OAAA,CAAQ,MAG5BA,GAAAA,CAAAA,CAAkB,OAAU,CAAA,CAC1B,GAAGA,CAAAA,CAAkB,OACrB,CAAA,MAAA,CAAQ,EACV,CAEAF,CAAAA,CAAAA,CAAiB,CAAC,CAAA,CAClBgB,CAAY,CAAA,CAAC,CAGXb,CAAAA,CAAAA,CAAAA,CAAmB,MACrBC,GAAAA,CAAAA,CAAsB,CACpB,GAAGD,CACH,CAAA,MAAA,CAAQ,EACV,CAAC,CAAA,CACDH,CAAiB,CAAA,CAAC,CAClBgB,CAAAA,CAAAA,CAAY,CAAC,CAAA,CAAA,CAGX5B,CAAkBA,EAAAA,CAAAA,EACtBY,CAAAA,CAAAA,CAAiB,CAAC,CAAA,CAClBgB,EAAY,CAAC,CAAA,EACf,CAAG3B,CAAAA,CAAc,CACnB,EAAA,CAAA,CAAGE,CAAW,CAAA,GAEdkB,CAAgBe,CAAAA,CAAAA,GACP,CACL,GAAGA,CACH,CAAA,KAAA,CAAOD,EAAY,GACnB,CAAA,OAAA,CAAS,CACT,CAAA,UAAA,CAAYA,CAAY,CAAA,CAAA,CAAI,CAAOjC,IAAAA,EAAAA,CAAW,CAAY,OAAA,CAAA,CAAA,EAC5D,CACD,CAAA,CAAA,CAEGE,CACFmB,EAAAA,CAAAA,CAAe,CACb,GAAGD,CAAAA,CACH,IAAMa,CAAAA,CAAAA,CAAY,GAAM,CAAA,GAAA,CACxB,UAAYA,CAAAA,CAAAA,CAAY,CAAI,CAAA,CAAA,IAAA,EAAOjC,CAAW,CAAA,OAAA,CAAA,CAAY,EAC5D,CAAC,CAGP,EAAA,CAAA,CAEA,OAAArB,CAAAA,CACE,IAAM,CACJ,IAAMwD,CAAAA,CAAW,IAAK,CAAA,GAAA,CAAI,EAAK,CAAA,CAAA,GAAA,CAAM1B,CAAiB,EAAA,CAAC,CACjD2B,CAAAA,CAAAA,CAAW,KAAK,GAAI,CAAA,EAAA,CAAA,CAAK,GAAM3B,CAAAA,CAAAA,EAAiB,CAAC,CAAA,CAEjD4B,CAASlD,CAAAA,CAAAA,CAAYgD,CAAUC,CAAAA,CAAQ,CAEzC3B,CAAAA,CAAAA,CAAgB4B,CAAS,CAAA,EAAA,GAC3B3B,EAAiBD,CAAgB4B,CAAAA,CAAM,CACvCX,CAAAA,CAAAA,CAAYjB,CAAgB4B,CAAAA,CAAM,CAEtC,EAAA,CAAA,CACAzB,CAAkB,CAAA,OAAA,CAAQ,MACtBA,CAAAA,CAAAA,CAAkB,OAAQ,CAAA,WAAA,CAC1B,IACN,CAGE,CAAA,CAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,SAAA,CAAWN,CACX,CAAA,KAAA,CAAO,CAAE,GAAGU,CAAsB,CAAA,GAAGb,CAAe,CAAA,CAAA,CAEpD,CAAC,CAAA,aAAA,CAAA,KAAA,CAAA,CAAI,UAAWR,CAAW,CAAA,KAAA,CAAO,CAAE,GAAGuB,CAAa,CAAA,GAAGd,CAAM,CAAA,CAAA,CAC1DF,CACC,CAAA,CAAA,CAAA,aAAA,CAAC,KAAI,CAAA,CAAA,KAAA,CAAO,CAAE,GAAGkB,EAAa,GAAGf,CAAgB,CAAG,CAAA,CAAA,CAClD,IACN,CACF,CAEJ,CACF,CAOMiC,CAAAA,CAAAA,CAAsB,CAAwB,CAAA,aAAA,CAAA,KAAA,CAAgB,CAEvDC,CAAAA,EAAAA,CAAsB,CAAC,CAClC,QAAA,CAAAC,CACA,CAAA,KAAA,CAAAC,CACF,CAAA,GAGM,CACJ,GAAM,CAACC,CAAAA,CAAWC,CAAQ,CAAA,CAAIhC,QAAiB8B,CAAAA,CAAAA,EAAS,EAAE,CAAA,CAEpDlC,CAAMvB,CAAAA,MAAAA,CAAsB,IAAI,CAAA,CAEhC4D,CAAQ,CAAA,CAACjB,CAAgC,CAAA,YAAA,GAAc,CA3X/D,IAAAkB,CA4XI,CAAA,OAAA,CAAAA,EAAAtC,CAAI,CAAA,OAAA,GAAJ,IAAAsC,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAa,KAAMlB,CAAAA,CAAAA,CAAAA,CAAAA,CAErB,OACE,CAAA,CAAA,aAAA,CAACW,CAAc,CAAA,QAAA,CAAd,CACC,KAAA,CAAO,CACL,KAAA,CAAAM,EACA,QAAU,CAAA,IAAG,CAlYrB,IAAAC,CAkYwB,CAAA,OAAA,CAAAA,CAAAtC,CAAAA,CAAAA,CAAI,OAAJ,GAAA,IAAA,CAAA,KAAA,CAAA,CAAAsC,CAAa,CAAA,QAAA,EAAA,CAAA,CAC7B,WAAa,CAAA,IAAG,CAnYxB,IAAAA,CAAAA,CAmY2B,OAAAA,CAAAA,CAAAA,CAAAA,CAAAtC,CAAI,CAAA,OAAA,GAAJ,IAAAsC,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAa,WAAiB,EAAA,GAAA,CAAA,CAAA,CACjD,QAAWf,CAAAA,CAAAA,EAAe,CApYlC,IAAAe,EAoYqC,OAAAA,CAAAA,CAAAA,CAAAtC,CAAI,CAAA,OAAA,GAAJ,IAAAsC,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAa,QAASf,CAAAA,CAAAA,CAAAA,CAAAA,CACnD,QAAWA,CAAAA,CAAAA,EAAe,CArYlC,IAAAe,CAqYqC,CAAA,OAAA,CAAAA,EAAAtC,CAAI,CAAA,OAAA,GAAJ,IAAAsC,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAa,QAASf,CAAAA,CAAAA,CAAAA,CAAAA,CACnD,QAAWW,CAAAA,CAAAA,EAAkBE,CAAS,CAAA,CAAE,GAAGF,CAAAA,CAAO,GAAGC,CAAU,CAAC,CAClE,CAAA,CAAA,CAEA,CAACnD,CAAAA,aAAAA,CAAAA,CAAAA,CAAA,CAAW,GAAA,CAAKgB,CAAM,CAAA,GAAGmC,CAAW,CAAA,CAAA,CACpCF,CACH,CAEJ,CAEaM,CAAAA,EAAAA,CAAiBL,GAA+C,CAC3E,IAAMM,CAAgB,CAAA,CAAA,CAAA,UAAA,CAAWT,CAAa,CAAA,CAE9C,GAAI,CAACS,CACH,CAAA,MAAM,IAAI,KAAA,CACR,+IACF,CAAA,CAGF,OAAA9D,SAAU,CAAA,IAAM,CACVwD,CAAAA,EAAOM,CAAQ,CAAA,QAAA,CAASN,CAAK,EACnC,CAAG,CAAA,EAAE,CAAA,CAEE,CACL,KAAA,CAAOM,CAAQ,CAAA,KAAA,CACf,QAAUA,CAAAA,CAAAA,CAAQ,QAClB,CAAA,QAAA,CAAUA,CAAQ,CAAA,QAAA,CAClB,QAAUA,CAAAA,CAAAA,CAAQ,QAClB,CAAA,WAAA,CAAaA,CAAQ,CAAA,WACvB,CACF","file":"index.mjs","sourcesContent":["import { useEffect, useRef } from \"react\";\n\n/** keep typescript happy */\nconst noop = () => {};\n\nexport function useInterval(\n callback: () => void,\n delay: number | null | false,\n immediate?: boolean,\n) {\n const savedCallback = useRef(noop);\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n // Execute callback if immediate is set.\n useEffect(() => {\n if (!immediate) return;\n if (delay === null || delay === false) return;\n savedCallback.current();\n }, [immediate]);\n\n // Set up the interval.\n useEffect(() => {\n if (delay === null || delay === false) return undefined;\n const tick = () => savedCallback.current();\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n}\n","export function randomValue(min: number, max: number): number {\n return (Math.random() * (max - min + 1) + min)\n}\n\nexport function randomInt(min: number, max: number): number {\n return Math.floor(randomValue(min, max))\n}\n","import * as React from \"react\";\nimport {\n CSSProperties,\n useEffect,\n useState,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { useInterval } from \"./useInterval\";\nimport { randomInt, randomValue } from \"./utils\";\n\nexport interface IProps {\n progress?: number;\n color?: string;\n shadow?: boolean;\n background?: string;\n height?: number;\n onLoaderFinished?: () => void;\n className?: string;\n containerClassName?: string;\n loaderSpeed?: number;\n transitionTime?: number;\n waitingTime?: number;\n style?: CSSProperties;\n containerStyle?: CSSProperties;\n shadowStyle?: CSSProperties;\n}\n\nexport interface LoadingBarRef {\n continuousStart: (startingValue?: number, refreshRate?: number) => void;\n staticStart: (startingValue?: number) => void;\n start: (\n type?: \"continuous\" | \"static\",\n startingValue?: number,\n refreshRate?: number,\n ) => void;\n complete: () => void;\n increase: (value: number) => void;\n decrease: (value: number) => void;\n getProgress: () => number;\n}\n\nconst LoadingBar = forwardRef<LoadingBarRef, IProps>(\n (\n {\n progress,\n height = 2,\n className = \"\",\n color = \"red\",\n background = \"transparent\",\n onLoaderFinished,\n transitionTime = 300,\n loaderSpeed = 500,\n waitingTime = 1000,\n shadow = true,\n containerStyle = {},\n style = {},\n shadowStyle: shadowStyleProp = {},\n containerClassName = \"\",\n },\n ref,\n ) => {\n const isMounted = useRef(false);\n const [localProgress, localProgressSet] = useState<number>(0);\n\n const pressedContinuous = useRef<{\n active: boolean;\n refreshRate: number;\n }>({ active: false, refreshRate: 1000 });\n\n const [pressedStaticStart, setStaticStartPressed] = useState<{\n active: boolean;\n value: number;\n }>({ active: false, value: 60 });\n\n const initialLoaderStyle: CSSProperties = {\n height: \"100%\",\n background: color,\n transition: `all ${loaderSpeed}ms ease`,\n width: \"0%\",\n };\n\n const loaderContainerStyle: CSSProperties = {\n position: \"fixed\",\n top: 0,\n left: 0,\n height,\n background,\n zIndex: 99999999999,\n width: 100 + \"%\",\n };\n\n const initialShadowStyles: CSSProperties = {\n boxShadow: `0 0 10px ${color}, 0 0 10px ${color}`,\n width: \"5%\",\n opacity: 1,\n position: \"absolute\",\n height: \"100%\",\n transition: `all ${loaderSpeed}ms ease`,\n transform: \"rotate(2deg) translate(0px, -2px)\",\n left: \"-10rem\",\n };\n\n const [loaderStyle, loaderStyleSet] =\n useState<CSSProperties>(initialLoaderStyle);\n const [shadowStyle, shadowStyleSet] =\n useState<CSSProperties>(initialShadowStyles);\n\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n useImperativeHandle(ref, () => ({\n continuousStart(startingValue?: number, refreshRate: number = 1000) {\n if (pressedStaticStart.active) return;\n if (progress !== undefined) {\n console.warn(\n \"react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!\",\n );\n return;\n }\n\n const val = startingValue || randomInt(10, 20);\n\n pressedContinuous.current = {\n active: true,\n refreshRate,\n };\n\n localProgressSet(val);\n checkIfFull(val);\n },\n staticStart(startingValue?: number) {\n if (pressedContinuous.current.active) return;\n if (progress !== undefined) {\n console.warn(\n \"react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!\",\n );\n return;\n }\n\n const val = startingValue || randomInt(30, 60);\n\n setStaticStartPressed({\n active: true,\n value: val,\n });\n localProgressSet(val);\n checkIfFull(val);\n },\n start(type = \"continuous\", startingValue?: number, refreshRate?: number) {\n if (progress !== undefined) {\n console.warn(\n \"react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!\",\n );\n return;\n }\n\n if (type === \"continuous\") {\n pressedContinuous.current = {\n active: true,\n refreshRate: refreshRate || 1000,\n };\n } else {\n setStaticStartPressed({\n active: true,\n value: startingValue || 20,\n });\n }\n\n const continuousRandom = randomInt(10, 20);\n const staticRandom = randomInt(30, 70);\n\n const val =\n startingValue ||\n (type === \"continuous\" ? continuousRandom : staticRandom);\n\n localProgressSet(val);\n checkIfFull(val);\n },\n complete() {\n if (progress !== undefined) {\n console.warn(\n \"react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!\",\n );\n return;\n }\n localProgressSet(100);\n checkIfFull(100);\n },\n increase(value: number) {\n if (progress !== undefined) {\n console.warn(\n \"react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!\",\n );\n return;\n }\n localProgressSet((prev) => {\n const newVal = prev + value;\n checkIfFull(newVal);\n return newVal;\n });\n },\n decrease(value: number) {\n if (progress !== undefined) {\n console.warn(\n \"react-top-loading-bar: You can't use both controlling by props and ref methods to control the bar!\",\n );\n return;\n }\n localProgressSet((prev) => {\n const newVal = prev - value;\n checkIfFull(newVal);\n return newVal;\n });\n },\n getProgress() {\n return localProgress;\n },\n }));\n\n useEffect(() => {\n loaderStyleSet({\n ...loaderStyle,\n background: color,\n });\n\n shadowStyleSet({\n ...shadowStyle,\n boxShadow: `0 0 10px ${color}, 0 0 5px ${color}`,\n });\n }, [color]);\n\n useEffect(() => {\n if (ref) {\n if (ref && progress !== undefined) {\n console.warn(\n 'react-top-loading-bar: You can\\'t use both controlling by props and ref methods to control the bar! Please use only props or only ref methods! Ref methods will override props if \"ref\" property is available.',\n );\n return;\n }\n checkIfFull(localProgress);\n } else {\n if (progress) checkIfFull(progress);\n }\n }, [progress]);\n\n const checkIfFull = (_progress: number) => {\n if (_progress >= 100) {\n // now it should wait a little\n loaderStyleSet({\n ...loaderStyle,\n width: \"100%\",\n });\n if (shadow) {\n shadowStyleSet({\n ...shadowStyle,\n left: _progress - 10 + \"%\",\n });\n }\n\n setTimeout(() => {\n if (!isMounted.current) {\n return;\n }\n // now it can fade out\n loaderStyleSet({\n ...loaderStyle,\n opacity: 0,\n width: \"100%\",\n transition: `all ${transitionTime}ms ease-out`,\n color: color,\n });\n\n setTimeout(() => {\n if (!isMounted.current) {\n return;\n }\n // here we wait for it to fade\n if (pressedContinuous.current.active) {\n // if we have continuous loader just ending, we kill it and reset it\n\n pressedContinuous.current = {\n ...pressedContinuous.current,\n active: false,\n };\n\n localProgressSet(0);\n checkIfFull(0);\n }\n\n if (pressedStaticStart.active) {\n setStaticStartPressed({\n ...pressedStaticStart,\n active: false,\n });\n localProgressSet(0);\n checkIfFull(0);\n }\n\n if (onLoaderFinished) onLoaderFinished();\n localProgressSet(0);\n checkIfFull(0);\n }, transitionTime);\n }, waitingTime);\n } else {\n loaderStyleSet((_loaderStyle) => {\n return {\n ..._loaderStyle,\n width: _progress + \"%\",\n opacity: 1,\n transition: _progress > 0 ? `all ${loaderSpeed}ms ease` : \"\",\n };\n });\n\n if (shadow) {\n shadowStyleSet({\n ...shadowStyle,\n left: _progress - 5.5 + \"%\",\n transition: _progress > 0 ? `all ${loaderSpeed}ms ease` : \"\",\n });\n }\n }\n };\n\n useInterval(\n () => {\n const minValue = Math.min(10, (100 - localProgress) / 5);\n const maxValue = Math.min(20, (100 - localProgress) / 3);\n\n const random = randomValue(minValue, maxValue);\n\n if (localProgress + random < 95) {\n localProgressSet(localProgress + random);\n checkIfFull(localProgress + random);\n }\n },\n pressedContinuous.current.active\n ? pressedContinuous.current.refreshRate\n : null,\n );\n\n return (\n <div\n className={containerClassName}\n style={{ ...loaderContainerStyle, ...containerStyle }}\n >\n <div className={className} style={{ ...loaderStyle, ...style }}>\n {shadow ? (\n <div style={{ ...shadowStyle, ...shadowStyleProp }} />\n ) : null}\n </div>\n </div>\n );\n },\n);\n\ninterface IContext\n extends Omit<LoadingBarRef, \"continuousStart\" | \"staticStart\"> {\n setProps: (props: IProps) => void;\n}\n\nconst LoaderContext = React.createContext<IContext>(undefined as any);\n\nexport const LoadingBarContainer = ({\n children,\n props,\n}: {\n children: React.ReactNode;\n props?: Omit<IProps, \"progress\">;\n}) => {\n const [hookProps, setProps] = useState<IProps>(props || {});\n\n const ref = useRef<LoadingBarRef>(null);\n\n const start = (type: \"continuous\" | \"static\" = \"continuous\") =>\n ref.current?.start(type);\n\n return (\n <LoaderContext.Provider\n value={{\n start,\n complete: () => ref.current?.complete(),\n getProgress: () => ref.current?.getProgress() || 0,\n increase: (value: number) => ref.current?.increase(value),\n decrease: (value: number) => ref.current?.decrease(value),\n setProps: (props: IProps) => setProps({ ...props, ...hookProps }),\n }}\n >\n <LoadingBar ref={ref} {...hookProps} />\n {children}\n </LoaderContext.Provider>\n );\n};\n\nexport const useLoadingBar = (props?: IProps): Omit<IContext, \"setProps\"> => {\n const context = React.useContext(LoaderContext);\n\n if (!context) {\n throw new Error(\n \"[react-top-loading-bar] useLoadingBar hook must be used within a LoadingBarContainer. Try wrapping parent component in <LoadingBarContainer>.\",\n );\n }\n\n useEffect(() => {\n if (props) context.setProps(props);\n }, []);\n\n return {\n start: context.start,\n complete: context.complete,\n increase: context.increase,\n decrease: context.decrease,\n getProgress: context.getProgress,\n };\n};\n\nexport { LoadingBar as default };\n"]}