{"version":3,"sources":["../src/createContext.ts"],"sourcesContent":["'use client';\n\nimport { useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { unstable_NormalPriority as NormalPriority, unstable_runWithPriority as runWithPriority } from 'scheduler';\n\nimport type { Context, ContextValue } from './types';\n\nconst createProvider = <Value>(Original: React.Provider<ContextValue<Value>>) => {\n  const Provider: React.FC<React.ProviderProps<Value>> = props => {\n    // Holds an actual \"props.value\"\n    const valueRef = React.useRef(props.value);\n\n    // A stable object, is used to avoid context updates via mutation of its values.\n    const contextValue = React.useRef<ContextValue<Value>>(null);\n\n    if (!contextValue.current) {\n      contextValue.current = {\n        value: valueRef,\n        listeners: [],\n      };\n    }\n\n    useIsomorphicLayoutEffect(() => {\n      valueRef.current = props.value;\n\n      runWithPriority(NormalPriority, () => {\n        (contextValue.current as ContextValue<Value>).listeners.forEach(listener => {\n          listener(props.value);\n        });\n      });\n    }, [props.value]);\n\n    return React.createElement(Original, { value: contextValue.current }, props.children);\n  };\n\n  /* istanbul ignore else */\n  if (process.env.NODE_ENV !== 'production') {\n    Provider.displayName = 'ContextSelector.Provider';\n  }\n\n  return Provider as unknown as React.Provider<ContextValue<Value>>;\n};\n\n/**\n * @internal\n */\nexport const createContext = <Value>(defaultValue: Value): Context<Value> => {\n  // eslint-disable-next-line @fluentui/no-context-default-value\n  const context = React.createContext<ContextValue<Value>>({\n    value: { current: defaultValue },\n    listeners: [],\n    isDefault: true,\n  });\n\n  context.Provider = createProvider<Value>(context.Provider);\n\n  // We don't support Consumer API\n  delete (context as unknown as Context<Value>).Consumer;\n\n  return context as unknown as Context<Value>;\n};\n"],"names":["createContext","createProvider","Original","Provider","props","valueRef","React","useRef","value","contextValue","current","listeners","useIsomorphicLayoutEffect","runWithPriority","NormalPriority","forEach","listener","createElement","children","process","env","NODE_ENV","displayName","defaultValue","context","isDefault","Consumer"],"mappings":"AAAA;;;;;+BA+CaA;;;eAAAA;;;;gCA7C6B;iEACnB;2BACgF;AAIvG,MAAMC,iBAAiB,CAAQC;IAC7B,MAAMC,WAAiDC,CAAAA;QACrD,gCAAgC;QAChC,MAAMC,WAAWC,OAAMC,MAAM,CAACH,MAAMI,KAAK;QAEzC,gFAAgF;QAChF,MAAMC,eAAeH,OAAMC,MAAM,CAAsB;QAEvD,IAAI,CAACE,aAAaC,OAAO,EAAE;YACzBD,aAAaC,OAAO,GAAG;gBACrBF,OAAOH;gBACPM,WAAW,EAAE;YACf;QACF;QAEAC,IAAAA,yCAAyB,EAAC;YACxBP,SAASK,OAAO,GAAGN,MAAMI,KAAK;YAE9BK,IAAAA,mCAAe,EAACC,kCAAc,EAAE;gBAC7BL,aAAaC,OAAO,CAAyBC,SAAS,CAACI,OAAO,CAACC,CAAAA;oBAC9DA,SAASZ,MAAMI,KAAK;gBACtB;YACF;QACF,GAAG;YAACJ,MAAMI,KAAK;SAAC;QAEhB,OAAOF,OAAMW,aAAa,CAACf,UAAU;YAAEM,OAAOC,aAAaC,OAAO;QAAC,GAAGN,MAAMc,QAAQ;IACtF;IAEA,wBAAwB,GACxB,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;QACzClB,SAASmB,WAAW,GAAG;IACzB;IAEA,OAAOnB;AACT;AAKO,MAAMH,gBAAgB,CAAQuB;IACnC,8DAA8D;IAC9D,MAAMC,UAAUlB,OAAMN,aAAa,CAAsB;QACvDQ,OAAO;YAAEE,SAASa;QAAa;QAC/BZ,WAAW,EAAE;QACbc,WAAW;IACb;IAEAD,QAAQrB,QAAQ,GAAGF,eAAsBuB,QAAQrB,QAAQ;IAEzD,gCAAgC;IAChC,OAAO,AAACqB,QAAsCE,QAAQ;IAEtD,OAAOF;AACT"}