{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n  createElement,\n  createContext as reactCreateContext,\n  useContext,\n  useRef,\n} from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport { useStoreWithEqualityFn } from \"zustand/traditional\";\n\n// Inspired from: https://github.com/pmndrs/zustand/blob/main/src/context.ts\nexport const createContext = <\n  State,\n  Store extends StoreApi<State> = StoreApi<State>\n>() => {\n  const StoreContext = reactCreateContext<Store | undefined>(undefined);\n\n  type Provider = React.FC<\n    {\n      createStore: () => Store;\n      children: React.ReactNode;\n    } & Record<string, unknown>\n  >;\n\n  const Provider: Provider = ({ createStore, ...rest }) => {\n    const storeRef = useRef<Store>();\n    return createElement(StoreContext.Provider, {\n      value: (storeRef.current ||= createStore()),\n      ...rest,\n    });\n  };\n\n  const useStore = <StateSlice = ExtractState<Store>>(\n    selector: (state: ExtractState<Store>) => StateSlice,\n    equalityFn?: (left: StateSlice, right: StateSlice) => boolean\n  ) => {\n    const store = useContext(StoreContext);\n    if (store) {\n      return useStoreWithEqualityFn(store, selector, equalityFn);\n    }\n    throw new Error(\n      \"Seems like you have not used zustand provider as an ancestor.\"\n    );\n  };\n\n  return [Provider, useStore] as const;\n};\n\ntype ExtractState<Store> = Store extends { getState: () => infer T }\n  ? T\n  : never;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKO;AAEP,yBAAuC;AAGhC,IAAM,gBAAgB,MAGtB;AACL,QAAM,mBAAe,aAAAA,eAAsC,MAAS;AASpE,QAAM,WAAqB,CAAC,EAAE,aAAa,GAAG,KAAK,MAAM;AACvD,UAAM,eAAW,qBAAc;AAC/B,eAAO,4BAAc,aAAa,UAAU;AAAA,MAC1C,OAAQ,SAAS,YAAY,YAAY;AAAA,MACzC,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CACf,UACA,eACG;AACH,UAAM,YAAQ,yBAAW,YAAY;AACrC,QAAI,OAAO;AACT,iBAAO,2CAAuB,OAAO,UAAU,UAAU;AAAA,IAC3D;AACA,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,CAAC,UAAU,QAAQ;AAC5B;","names":["reactCreateContext"]}