{"version":3,"file":"IntlProvider.cjs","sources":["../../src/intl/IntlProvider.tsx"],"sourcesContent":["'use client'\n\nimport { type FC, type PropsWithChildren, createContext, useContext, useMemo } from 'react'\nimport { IntlContext, IntlProvider as ReactIntlProvider } from 'react-intl'\n\nimport { type Locale, convertLang, localeMap } from './localeMap'\nimport { locales } from './locales'\n\n// Object.keys は常に string[] を返却するが、locales は実行時に変更されないため、as 型キャストを使用することは自明に安全なので使用している\nconst allLocaleKeys = Object.keys(localeMap) as Locale[]\n\ntype Props<AvailableLocales extends Locale[] = typeof allLocaleKeys> = PropsWithChildren<{\n  locale: string\n  availableLocales?: string[]\n  // ↑ プロダクト側と smarthr-ui の言語コードの揺れに対応するため、一旦 string, string[] で受け取れるようにする\n  // ↓ 本来は AvailableLocales[number], AvailableLocales で受け取りたいが、プロダクトと smarthr-ui での言語コード統一が終わるまで使えない\n  _not_used_locale?: AvailableLocales[number]\n  _not_used_availableLocales?: AvailableLocales\n}>\n\nconst AvailableLocalesContext = createContext<Locale[]>(allLocaleKeys)\n\nexport const useAvailableLocales = () => useContext(AvailableLocalesContext)\n\nexport const IntlProvider = <AvailableLocales extends Locale[] = typeof allLocaleKeys>({\n  availableLocales,\n  locale,\n  children,\n}: Props<AvailableLocales>): ReturnType<FC> => {\n  const convertedLocale = convertLang(locale)\n  const convertedAvailableLocales = availableLocales?.map(convertLang)\n\n  // プロダクト側でIntlProviderを使っている場合、プロダクト側のmessagesとマージして提供するためにContextから取得している\n  const intl = useContext(IntlContext)\n  const actualMessages = useMemo(\n    () => ({ ...intl?.messages, ...locales[convertedLocale] }),\n    [intl, convertedLocale],\n  )\n\n  return (\n    <AvailableLocalesContext.Provider value={convertedAvailableLocales ?? allLocaleKeys}>\n      <ReactIntlProvider {...intl} locale={convertedLocale} messages={actualMessages}>\n        {children}\n      </ReactIntlProvider>\n    </AvailableLocalesContext.Provider>\n  )\n}\n"],"names":[],"mappings":";;;;;;;;;AAQA;AACA;AAWA;AAEO;AAEA;AAKL;;;AAIA;AACA;AAKA;AAOF;;;"}