@chakra-ui/react-env
Version:
Component and hook for handling window and document object in iframe or ssr environment
1 lines • 2.64 kB
Source Map (JSON)
{"version":3,"sources":["../src/env.tsx"],"sourcesContent":["import { useSafeLayoutEffect } from \"@chakra-ui/react-use-safe-layout-effect\"\nimport { createContext, useContext, useMemo, useReducer, useRef } from \"react\"\n\ninterface Environment {\n getWindow: () => Window\n getDocument: () => Document\n}\n\nconst EnvironmentContext = createContext<Environment>({\n getDocument() {\n return document\n },\n getWindow() {\n return window\n },\n})\n\nEnvironmentContext.displayName = \"EnvironmentContext\"\n\nexport function useEnvironment({ defer }: { defer?: boolean } = {}) {\n const [, forceUpdate] = useReducer((c) => c + 1, 0)\n\n useSafeLayoutEffect(() => {\n if (!defer) return\n forceUpdate()\n }, [defer])\n\n return useContext(EnvironmentContext)\n}\n\nexport interface EnvironmentProviderProps {\n children: React.ReactNode\n disabled?: boolean\n environment?: Environment\n}\n\nexport function EnvironmentProvider(props: EnvironmentProviderProps) {\n const { children, environment: environmentProp, disabled } = props\n const ref = useRef<HTMLSpanElement>(null)\n\n const context = useMemo<Environment>(() => {\n if (environmentProp) return environmentProp\n return {\n getDocument: () => ref.current?.ownerDocument ?? document,\n getWindow: () => ref.current?.ownerDocument.defaultView ?? window,\n }\n }, [environmentProp])\n\n const showSpan = !disabled || !environmentProp\n\n return (\n <EnvironmentContext.Provider value={context}>\n {children}\n {showSpan && <span id=\"__chakra_env\" hidden ref={ref} />}\n </EnvironmentContext.Provider>\n )\n}\n\nEnvironmentProvider.displayName = \"EnvironmentProvider\"\n"],"mappings":";;;AAAA,SAAS,2BAA2B;AACpC,SAAS,eAAe,YAAY,SAAS,YAAY,cAAc;AAkDnE,SAEe,KAFf;AA3CJ,IAAM,qBAAqB,cAA2B;AAAA,EACpD,cAAc;AACZ,WAAO;AAAA,EACT;AAAA,EACA,YAAY;AACV,WAAO;AAAA,EACT;AACF,CAAC;AAED,mBAAmB,cAAc;AAE1B,SAAS,eAAe,EAAE,MAAM,IAAyB,CAAC,GAAG;AAClE,QAAM,CAAC,EAAE,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,GAAG,CAAC;AAElD,sBAAoB,MAAM;AACxB,QAAI,CAAC;AAAO;AACZ,gBAAY;AAAA,EACd,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO,WAAW,kBAAkB;AACtC;AAQO,SAAS,oBAAoB,OAAiC;AACnE,QAAM,EAAE,UAAU,aAAa,iBAAiB,SAAS,IAAI;AAC7D,QAAM,MAAM,OAAwB,IAAI;AAExC,QAAM,UAAU,QAAqB,MAAM;AACzC,QAAI;AAAiB,aAAO;AAC5B,WAAO;AAAA,MACL,aAAa,MAAG;AA3CtB;AA2CyB,+BAAI,YAAJ,mBAAa,kBAAb,YAA8B;AAAA;AAAA,MACjD,WAAW,MAAG;AA5CpB;AA4CuB,+BAAI,YAAJ,mBAAa,cAAc,gBAA3B,YAA0C;AAAA;AAAA,IAC7D;AAAA,EACF,GAAG,CAAC,eAAe,CAAC;AAEpB,QAAM,WAAW,CAAC,YAAY,CAAC;AAE/B,SACE,qBAAC,mBAAmB,UAAnB,EAA4B,OAAO,SACjC;AAAA;AAAA,IACA,YAAY,oBAAC,UAAK,IAAG,gBAAe,QAAM,MAAC,KAAU;AAAA,KACxD;AAEJ;AAEA,oBAAoB,cAAc;","names":[]}