{"version":3,"file":"ThemeProvider.mjs","sources":["../../../../src/components/ThemeProvider/ThemeProvider.tsx"],"sourcesContent":["'use client'\n\nimport { forwardRef } from 'react'\n\nimport { Slot } from '@radix-ui/react-slot'\n\nimport {\n  AlphaTokenProvider,\n  useAlphaTokenContext,\n} from '~/src/components/AlphaTokenProvider'\nimport {\n  BetaTokenProvider,\n  useBetaTokenContext,\n} from '~/src/components/BetaTokenProvider'\nimport { TokenProvider, useTokenContext } from '~/src/components/TokenProvider'\n\nimport {\n  type FixedThemeProviderProps,\n  type ThemeProviderProps,\n} from './ThemeProvider.types'\n\n/**\n * `useThemeName` is a hook that returns the current theme name.\n */\nexport function useThemeName() {\n  return useTokenContext('useThemeName').themeName\n}\n\n/**\n * `useTokens` is a hook that returns the design tokens of the current theme.\n */\nexport function useTokens() {\n  return useTokenContext('useTokens').tokens\n}\n\n/**\n * `useAlphaTokens` is a hook that returns the alpha tokens of the current theme.\n * @internal\n */\nexport function useAlphaTokens() {\n  return useAlphaTokenContext('useAlphaTokens').tokens\n}\n\n/**\n * `useBetaTokens` is a hook that returns the beta tokens of the current theme.\n * @internal\n */\nexport function useBetaTokens() {\n  return useBetaTokenContext('useBetaTokens').tokens\n}\n\n/**\n * `ThemeProvider` is a wrapper component that provides theme context.\n *\n * Components that pass to children **must spread props and forward ref.**\n */\nexport const ThemeProvider = forwardRef<HTMLElement, ThemeProviderProps>(\n  function ThemeProvider({ themeName, children, ...rest }, forwardedRef) {\n    return (\n      <TokenProvider themeName={themeName}>\n        <AlphaTokenProvider themeName={themeName}>\n          <BetaTokenProvider themeName={themeName}>\n            <Slot\n              ref={forwardedRef}\n              // TODO: Change data attribute constant to import from bezier-tokens\n              data-bezier-theme={themeName}\n              {...rest}\n            >\n              {children}\n            </Slot>\n          </BetaTokenProvider>\n        </AlphaTokenProvider>\n      </TokenProvider>\n    )\n  }\n)\n\n/**\n * `LightThemeProvider` is a wrapper component that provides light theme context.\n *\n * Components that pass to children **must spread props and forward ref.**\n */\nexport const LightThemeProvider = forwardRef<\n  HTMLElement,\n  FixedThemeProviderProps\n>(function LightTheme({ children, ...rest }, forwardedRef) {\n  return (\n    <ThemeProvider\n      ref={forwardedRef}\n      themeName=\"light\"\n      {...rest}\n    >\n      {children}\n    </ThemeProvider>\n  )\n})\n\n/**\n * `DarkThemeProvider` is a wrapper component that provides dark theme context.\n *\n * Components that pass to children **must spread props and forward ref.**\n */\nexport const DarkThemeProvider = forwardRef<\n  HTMLElement,\n  FixedThemeProviderProps\n>(function DarkTheme({ children, ...rest }, forwardedRef) {\n  return (\n    <ThemeProvider\n      ref={forwardedRef}\n      themeName=\"dark\"\n      {...rest}\n    >\n      {children}\n    </ThemeProvider>\n  )\n})\n\n/**\n * `InvertedThemeProvider` is a wrapper component that provides inverted theme context.\n */\nexport const InvertedThemeProvider = forwardRef<\n  HTMLElement,\n  FixedThemeProviderProps\n>(function InvertedTheme({ children, ...rest }, forwardedRef) {\n  return (\n    <ThemeProvider\n      ref={forwardedRef}\n      themeName={useThemeName() === 'light' ? 'dark' : 'light'}\n      {...rest}\n    >\n      {children}\n    </ThemeProvider>\n  )\n})\n"],"names":["useThemeName","useTokenContext","themeName","useTokens","tokens","useAlphaTokens","useAlphaTokenContext","useBetaTokens","useBetaTokenContext","ThemeProvider","forwardRef","children","rest","forwardedRef","_jsx","TokenProvider","AlphaTokenProvider","BetaTokenProvider","Slot","ref","LightThemeProvider","LightTheme","DarkThemeProvider","DarkTheme","InvertedThemeProvider","InvertedTheme"],"mappings":";;;;;;;AAqBA;AACA;AACA;AACO,SAASA,YAAYA,GAAG;AAC7B,EAAA,OAAOC,eAAe,CAAC,cAAc,CAAC,CAACC,SAAS;AAClD;;AAEA;AACA;AACA;AACO,SAASC,SAASA,GAAG;AAC1B,EAAA,OAAOF,eAAe,CAAC,WAAW,CAAC,CAACG,MAAM;AAC5C;;AAEA;AACA;AACA;AACA;AACO,SAASC,cAAcA,GAAG;AAC/B,EAAA,OAAOC,iBAAoB,CAAC,gBAAgB,CAAC,CAACF,MAAM;AACtD;;AAEA;AACA;AACA;AACA;AACO,SAASG,aAAaA,GAAG;AAC9B,EAAA,OAAOC,iBAAmB,CAAC,eAAe,CAAC,CAACJ,MAAM;AACpD;;AAEA;AACA;AACA;AACA;AACA;MACaK,aAAa,gBAAGC,UAAU,CACrC,SAASD,aAAaA,CAAC;EAAEP,SAAS;EAAES,QAAQ;EAAE,GAAGC;AAAK,CAAC,EAAEC,YAAY,EAAE;EACrE,oBACEC,GAAA,CAACC,aAAa,EAAA;AAACb,IAAAA,SAAS,EAAEA,SAAU;IAAAS,QAAA,eAClCG,GAAA,CAACE,eAAkB,EAAA;AAACd,MAAAA,SAAS,EAAEA,SAAU;MAAAS,QAAA,eACvCG,GAAA,CAACG,eAAiB,EAAA;AAACf,QAAAA,SAAS,EAAEA,SAAU;QAAAS,QAAA,eACtCG,GAAA,CAACI,IAAI,EAAA;AACHC,UAAAA,GAAG,EAAEN;AACL;AAAA;AACA,UAAA,mBAAA,EAAmBX,SAAU;AAAA,UAAA,GACzBU,IAAI;AAAAD,UAAAA,QAAA,EAEPA;SACG;OACW;KACD;AAAC,GACR,CAAC;AAEpB,CACF;;AAEA;AACA;AACA;AACA;AACA;MACaS,kBAAkB,gBAAGV,UAAU,CAG1C,SAASW,UAAUA,CAAC;EAAEV,QAAQ;EAAE,GAAGC;AAAK,CAAC,EAAEC,YAAY,EAAE;EACzD,oBACEC,GAAA,CAACL,aAAa,EAAA;AACZU,IAAAA,GAAG,EAAEN,YAAa;AAClBX,IAAAA,SAAS,EAAC,OAAO;AAAA,IAAA,GACbU,IAAI;AAAAD,IAAAA,QAAA,EAEPA;AAAQ,GACI,CAAC;AAEpB,CAAC;;AAED;AACA;AACA;AACA;AACA;MACaW,iBAAiB,gBAAGZ,UAAU,CAGzC,SAASa,SAASA,CAAC;EAAEZ,QAAQ;EAAE,GAAGC;AAAK,CAAC,EAAEC,YAAY,EAAE;EACxD,oBACEC,GAAA,CAACL,aAAa,EAAA;AACZU,IAAAA,GAAG,EAAEN,YAAa;AAClBX,IAAAA,SAAS,EAAC,MAAM;AAAA,IAAA,GACZU,IAAI;AAAAD,IAAAA,QAAA,EAEPA;AAAQ,GACI,CAAC;AAEpB,CAAC;;AAED;AACA;AACA;MACaa,qBAAqB,gBAAGd,UAAU,CAG7C,SAASe,aAAaA,CAAC;EAAEd,QAAQ;EAAE,GAAGC;AAAK,CAAC,EAAEC,YAAY,EAAE;EAC5D,oBACEC,GAAA,CAACL,aAAa,EAAA;AACZU,IAAAA,GAAG,EAAEN,YAAa;IAClBX,SAAS,EAAEF,YAAY,EAAE,KAAK,OAAO,GAAG,MAAM,GAAG,OAAQ;AAAA,IAAA,GACrDY,IAAI;AAAAD,IAAAA,QAAA,EAEPA;AAAQ,GACI,CAAC;AAEpB,CAAC;;;;"}