{"version":3,"file":"index.cjs","sources":["../src/store.ts","../src/useSharableState.ts"],"sourcesContent":["const store = (<F extends (state: any) => void, S = any>() => {\n  const generateId = () => {\n    return (Date.now().toString(36) + Math.random().toString(36)).replace(\n      /\\./g,\n      \"\",\n    );\n  };\n\n  const mappedData: { [K: string]: { value: S; setters: { [K: string]: F } } } =\n    {};\n\n  const addSetter = ({\n    stateKey,\n    setterKey,\n    setter,\n    initialValue,\n  }: {\n    stateKey: string;\n    setterKey: string;\n    setter: F;\n    initialValue?: any;\n  }) => {\n    if (mappedData[stateKey]) {\n      mappedData[stateKey].setters[setterKey] = setter;\n    } else {\n      mappedData[stateKey] = {\n        value: initialValue,\n        setters: { [setterKey]: setter },\n      };\n    }\n  };\n\n  const removeSetter = ({\n    stateKey,\n    setterKey,\n  }: {\n    stateKey: string;\n    setterKey: string;\n  }) => {\n    if (mappedData[stateKey]?.setters[setterKey]) {\n      delete mappedData[stateKey].setters[setterKey];\n    }\n  };\n\n  const updateState = ({\n    stateKey,\n    value,\n  }: {\n    stateKey: string;\n    value: any;\n  }) => {\n    const data = mappedData[stateKey];\n\n    if (data) {\n      data.value = value;\n\n      Object.entries(data.setters).forEach(([, setter]) => {\n        setter(value);\n      });\n    }\n  };\n\n  const getCurrentState = (stateKey: string) => {\n    return mappedData[stateKey]?.value;\n  };\n\n  const getCurrentSetter = ({\n    stateKey,\n    setterKey,\n  }: {\n    stateKey: string;\n    setterKey: string;\n  }) => {\n    return mappedData[stateKey]?.setters[setterKey];\n  };\n\n  const clearStates = () => {\n    Object.entries(mappedData).forEach(([stateKey, state]) => {\n      if (state.setters) {\n        Object.entries(state.setters).forEach(([, setter]) => {\n          setter(undefined);\n        });\n      }\n\n      delete mappedData[stateKey];\n    });\n  };\n\n  return {\n    mappedData,\n\n    addSetter,\n    removeSetter,\n    updateState,\n    getCurrentState,\n    getCurrentSetter,\n    generateId,\n    clearStates,\n  };\n})();\n\nexport default store;\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport store from \"./store\";\n\ntype Action<S> = (prevState: S) => S;\nexport type Dispatch<S> = (value: S | Action<S>) => void;\n\nexport const useSharableState = <S>(\n  stateKey: string,\n  initialState?: S,\n): [S, Dispatch<S>] => {\n  const setterKey = useRef(store.generateId());\n\n  const initialValue = useMemo(\n    () => store.getCurrentState(stateKey) || initialState,\n    [initialState, stateKey],\n  );\n\n  const [state, setState] = useState<S>(initialValue);\n\n  useEffect(() => {\n    const stk = setterKey.current;\n\n    if (!store.getCurrentSetter({ stateKey, setterKey: setterKey.current })) {\n      store.addSetter({\n        stateKey,\n        initialValue,\n        setter: setState,\n        setterKey: stk,\n      });\n    }\n\n    return () => store.removeSetter({ stateKey, setterKey: stk });\n  }, [initialValue, stateKey]);\n\n  const updateState: Dispatch<S> = useCallback(\n    (value) => {\n      if (typeof value === \"function\") {\n        store.updateState({\n          stateKey,\n          value: (value as Action<S>)(store.getCurrentState(stateKey)),\n        });\n      } else {\n        store.updateState({ stateKey, value });\n      }\n    },\n    [stateKey],\n  );\n\n  return [state, updateState];\n};\n"],"names":["mappedData","_ref","stateKey","setterKey","setter","initialValue","setters","value","_setters","_mappedData$stateKey2","initialState","useRef","Date","now","toString","Math","random","replace","useMemo","store","useState","state","setState","useEffect","_ref5","stk","current","_mappedData$stateKey3","_ref2","_mappedData$stateKey","useCallback","data","Object","entries","forEach"],"mappings":"IAQkBA,wBAAAA,EACd,CAAA,EAEgB,SAAAC,OAcdD,EAJCE,EAAAD,EATHC,SACAC,EAAAA,EAAAA,UACAC,EAOGH,EAPHG,OACAC,EAAAA,EAAAA,aAOIL,EAAWE,GACbF,EAAWE,GAAUI,QAAQH,GAAaC,EAE1CJ,EAAWE,GAAY,CACrBK,MAAOF,EACPC,gBAAYH,GAAYC,EAFHI,GAK1B,KAgCuB,SAACN,GAAoB,IAAAO,EAC3C,gBAAOT,EAAWE,WAAXO,EAAsBF,KAC9B,2BCzD6B,SAC9BL,EACAQ,GAEA,IAAMP,EAAYQ,EAAAA,QDTRC,KAAKC,MAAMC,SAAS,IAAMC,KAAKC,SAASF,SAAS,KAAKG,QAC5D,MACA,KCScZ,EAAGa,EAAAA,QACnB,WAAMC,OAAAA,EAAsBjB,IAAaQ,CAAzC,EACA,CAACA,EAAcR,IAGSkB,EAAAA,EAAQA,SAAIf,GAA/BgB,EAAOC,EAAAA,GAAAA,EAEdC,EAAAA,GA6BA,OA7BAA,EAASA,UAAC,WACR,ID6CuBC,IC7CjBC,EAAMtB,EAAUuB,QAWtB,cDyCO1B,EAAAA,GAPgBwB,EC3CK,CAAEtB,SAAAA,EAAUC,UAAWA,EAAUuB,UD4C7DxB,kBAMOyB,EAAsBrB,UAL7BH,aC5CEgB,EAAgB,CACdjB,SAAAA,EACAG,aAAAA,EACAD,OAAQkB,EACRnB,UAAWsB,IAIFN,WAAAA,ODAM,YACnBjB,IAAAA,EAAAA,IAAAA,SACAC,EAIGyB,EAJHzB,UAKI,OAAJ0B,EAAI7B,EAAWE,KAAX2B,EAAsBvB,QAAQH,WACzBH,EAAWE,GAAUI,QAAQH,EAEvC,CCVcgB,CAAmB,CAAEjB,SAAAA,EAAUC,UAAWsB,GAAhD,CACR,EAAE,CAACpB,EAAcH,IAgBX,CAACmB,EAdyBS,EAAWA,YAC1C,SAACvB,IDQiB,YAClBL,IACAK,EAAAA,EAAAA,QAKaP,IANbE,UAQI6B,IACFA,EAAKxB,MAAQA,EAEbyB,OAAOC,QAAQF,EAAKzB,SAAS4B,QAAQ,aACnC9B,EAAAA,EAAAA,IAAOG,EACR,GAEJ,CCtBKY,CADmB,mBAAVZ,EACS,CAChBL,SAAAA,EACAK,MAAQA,EAAoBY,EAAsBjB,KAGlC,CAAEA,SAAAA,EAAUK,MAAAA,GAEjC,EACD,CAACL,IAIJ"}