{"version":3,"file":"create-context.mjs","sources":["../../src/utils/create-context.tsx"],"sourcesContent":["import { createContext as reactCreateContext, useContext, useMemo } from 'react';\n\ntype StateSelector<T, U> = (state: T) => U;\n\nexport type CreateContextProviderProps<TState> = React.PropsWithChildren<{\n  value: TState;\n}>;\n\nconst createContext = <TState,>() => {\n  const BaseContext = reactCreateContext<TState | undefined>(undefined);\n  const Provider = ({ value, children }: CreateContextProviderProps<TState>) => {\n    return <BaseContext.Provider value={value}>{children}</BaseContext.Provider>;\n  };\n\n  const useProps = <TStateSlice,>(\n    selector: StateSelector<TState, TStateSlice> = v => v as unknown as TStateSlice\n  ) => {\n    const context = useContext(BaseContext);\n    if (typeof context === 'undefined')\n      throw new Error('You must use `useProps` in children of its `Provider`');\n    const memoizedValue = useMemo(() => selector(context), [selector, context]);\n    return memoizedValue;\n  };\n\n  return [Provider, useProps] as const;\n};\n\nexport { createContext };\n"],"names":["createContext","BaseContext","reactCreateContext","undefined","Provider","value","children","_jsx","useProps","selector","v","context","useContext","Error","memoizedValue","useMemo"],"mappings":";;;AAQA,MAAMA,gBAAgB,IAAe;AACnC,IAAA,MAAMC,4BAAcC,eAAuCC,CAAAA,SAAAA,CAAAA,CAAAA;AAC3D,IAAA,MAAMC,WAAW,CAAC,EAAEC,QAAOC,QAAAA,GAA8C,GAAK;QAC5E,qBAAOC,GAAA,CAACN,YAAYG,QAAQ,EAAA;YAACC,KAAOA,EAAAA,KAAAA;AAAQC,YAAAA,QAAAA,EAAAA,QAAAA;;AAC9C,KAAA,CAAA;AAEA,IAAA,MAAME,WAAW,CACfC,QAAAA,GAA+CC,CAAAA,CAAAA,GAAKA,CAA2B,GAC5E;AACH,QAAA,MAAMC,UAAUC,UAAWX,CAAAA,WAAAA,CAAAA,CAAAA;AAC3B,QAAA,IAAI,OAAOU,OAAY,KAAA,WAAA,EACrB,MAAM,IAAIE,MAAM,uDAAyD,CAAA,CAAA;AAC3E,QAAA,MAAMC,aAAgBC,GAAAA,OAAAA,CAAQ,IAAMN,QAAAA,CAASE,OAAU,CAAA,EAAA;AAACF,YAAAA,QAAAA;AAAUE,YAAAA,OAAAA;AAAQ,SAAA,CAAA,CAAA;QAC1E,OAAOG,aAAAA,CAAAA;AACT,KAAA,CAAA;IAEA,OAAO;AAACV,QAAAA,QAAAA;AAAUI,QAAAA,QAAAA;AAAS,KAAA,CAAA;AAC7B;;;;"}