@djangocfg/nextjs 2.1.192 → 2.1.194

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/i18n/client.ts","../../src/i18n/navigation.ts","../../src/i18n/routing.ts","../../src/i18n/provider.tsx"],"sourcesContent":["/**\n * Client-side i18n Hooks\n *\n * For use in Client Components ('use client')\n *\n * @example\n * ```tsx\n * 'use client';\n *\n * import { useTranslations, useLocale } from '@djangocfg/nextjs/i18n/client';\n *\n * export function MyComponent() {\n * const t = useTranslations('HomePage');\n * const locale = useLocale();\n *\n * return <h1>{t('title')}</h1>;\n * }\n * ```\n */\n\n'use client';\n\nimport {\n useFormatter, useLocale as useNextIntlLocale, useMessages, useNow, useTimeZone,\n useTranslations as useNextIntlTranslations\n} from 'next-intl';\n\nimport { usePathname, useRouter } from './navigation';\nimport { I18nProvider, NextIntlProvider } from './provider';\nimport { routing } from './routing';\n\n// Re-export providers\nexport { I18nProvider, NextIntlProvider };\n\nimport type { LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Core Client Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get translations in Client Components\n *\n * @example\n * ```tsx\n * const t = useTranslations('HomePage');\n * return <h1>{t('title')}</h1>;\n *\n * // With interpolation\n * return <p>{t('greeting', { name: 'John' })}</p>;\n * ```\n */\nexport function useTranslations<Namespace extends string = never>(\n namespace?: Namespace\n) {\n return useNextIntlTranslations(namespace);\n}\n\n/**\n * Get current locale in Client Components\n */\nexport function useLocale(): LocaleCode {\n return useNextIntlLocale() as LocaleCode;\n}\n\n/**\n * Get all messages\n * Useful for passing to child providers\n */\nexport { useMessages };\n\n/**\n * Get current time\n */\nexport { useNow };\n\n/**\n * Get timezone\n */\nexport { useTimeZone };\n\n/**\n * Get formatter for dates, numbers, etc.\n */\nexport { useFormatter };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Convenience Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Shorthand for useTranslations\n * Alias for compatibility with @djangocfg/i18n\n */\nexport const useT = useTranslations;\n\n/**\n * Get namespaced translations\n *\n * @example\n * ```tsx\n * const pt = useNamespacedTranslations('payments');\n * return <span>{pt('balance.available')}</span>;\n * ```\n */\nexport function useNamespacedTranslations(namespace: string) {\n return useNextIntlTranslations(namespace);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Formatting Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Format a date according to locale\n *\n * @example\n * ```tsx\n * const formatDate = useDateFormatter();\n * return <span>{formatDate(new Date())}</span>;\n * ```\n */\nexport function useDateFormatter() {\n const formatter = useFormatter();\n return (date: Date | number, options?: Parameters<typeof formatter.dateTime>[1]) =>\n formatter.dateTime(date, options);\n}\n\n/**\n * Format a number according to locale\n *\n * @example\n * ```tsx\n * const formatNumber = useNumberFormatter();\n * return <span>{formatNumber(1234.56)}</span>;\n * ```\n */\nexport function useNumberFormatter() {\n const formatter = useFormatter();\n return (number: number, options?: Parameters<typeof formatter.number>[1]) =>\n formatter.number(number, options);\n}\n\n/**\n * Format relative time\n *\n * @example\n * ```tsx\n * const formatRelative = useRelativeTimeFormatter();\n * return <span>{formatRelative(new Date())}</span>;\n * ```\n */\nexport function useRelativeTimeFormatter() {\n const formatter = useFormatter();\n return (date: Date | number, options?: Parameters<typeof formatter.relativeTime>[1]) =>\n formatter.relativeTime(date, options);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Locale Switching Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get list of available locales from routing config\n *\n * @example\n * ```tsx\n * const locales = useLocales();\n * // ['en', 'ru', 'ko']\n * ```\n */\nexport function useLocales(): LocaleCode[] {\n return routing.locales as LocaleCode[];\n}\n\n/**\n * Get default locale from routing config\n */\nexport function useDefaultLocale(): LocaleCode {\n return routing.defaultLocale as LocaleCode;\n}\n\n/**\n * Hook to change current locale\n *\n * @example\n * ```tsx\n * const changeLocale = useChangeLocale();\n *\n * <button onClick={() => changeLocale('ru')}>\n * Switch to Russian\n * </button>\n * ```\n */\nexport function useChangeLocale() {\n const router = useRouter();\n const pathname = usePathname();\n\n return (locale: LocaleCode) => {\n // Set NEXT_LOCALE cookie so middleware remembers the choice\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n document.cookie = `NEXT_LOCALE=${locale}; expires=${date.toUTCString()}; path=/`;\n\n router.replace(pathname, { locale });\n };\n}\n\n/**\n * Combined hook for locale switching\n * Returns current locale, available locales, and change function\n *\n * @example\n * ```tsx\n * const { locale, locales, changeLocale } = useLocaleSwitcher();\n *\n * <select value={locale} onChange={(e) => changeLocale(e.target.value)}>\n * {locales.map(l => <option key={l} value={l}>{l}</option>)}\n * </select>\n * ```\n */\nexport function useLocaleSwitcher() {\n const locale = useLocale();\n const locales = useLocales();\n const changeLocale = useChangeLocale();\n\n return { locale, locales, changeLocale };\n}\n","/**\n * i18n Navigation Utilities\n *\n * Provides locale-aware navigation components and functions\n *\n * @example\n * ```ts\n * // In your app's i18n/navigation.ts\n * import { createNavigation } from '@djangocfg/nextjs/i18n';\n * import { routing } from './routing';\n *\n * export const { Link, redirect, usePathname, useRouter } = createNavigation(routing);\n * ```\n *\n * @example\n * ```tsx\n * // Using in components\n * import { Link, usePathname } from '@/i18n/navigation';\n *\n * function Nav() {\n * const pathname = usePathname();\n * return <Link href=\"/about\">About</Link>;\n * }\n * ```\n */\n\nimport { createNavigation as createNextIntlNavigation } from 'next-intl/navigation';\n\nimport { createRouting, routing } from './routing';\n\nimport type { I18nConfig } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Navigation Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create navigation utilities with custom routing\n *\n * Returns locale-aware versions of:\n * - Link: Locale-prefixed links\n * - redirect: Server-side redirect with locale\n * - usePathname: Current pathname without locale prefix\n * - useRouter: Router with locale-aware navigation\n * - getPathname: Get pathname for a route\n */\nexport function createNavigation(routingConfig?: ReturnType<typeof createRouting>) {\n const config = routingConfig ?? routing;\n return createNextIntlNavigation(config);\n}\n\n/**\n * Create navigation from config options\n */\nexport function createNavigationFromConfig(config: Partial<I18nConfig>) {\n const routingConfig = createRouting(config);\n return createNextIntlNavigation(routingConfig);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Navigation (using default routing)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Default navigation utilities\n * Use these directly or create custom ones with createNavigation()\n */\nexport const {\n Link,\n redirect,\n usePathname,\n useRouter,\n getPathname,\n} = createNavigation();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for locale-aware Link component\n */\nexport interface LinkProps {\n /** Target href */\n href: string;\n /** Target locale (optional, defaults to current) */\n locale?: string;\n /** Children */\n children?: React.ReactNode;\n /** Additional props passed to Next.js Link */\n [key: string]: unknown;\n}\n","/**\n * i18n Routing Configuration\n *\n * Creates routing configuration for next-intl\n * Used by proxy and navigation components\n */\n\nimport { defineRouting } from 'next-intl/routing';\n\nimport type { I18nConfig, LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Configuration\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const DEFAULT_LOCALES: LocaleCode[] = ['en', 'ru', 'ko', 'ja', 'de', 'fr', 'zh', 'it', 'es', 'nl', 'ar', 'tr', 'pt-BR', 'pl', 'sv', 'no', 'da'];\nexport const DEFAULT_LOCALE: LocaleCode = 'en';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Routing Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create routing configuration for next-intl\n *\n * @example\n * ```ts\n * // i18n/routing.ts\n * import { createRouting } from '@djangocfg/nextjs/i18n';\n *\n * export const routing = createRouting({\n * locales: ['en', 'ru', 'ko'],\n * defaultLocale: 'en',\n * });\n * ```\n */\nexport function createRouting(config?: Partial<I18nConfig>) {\n const locales = config?.locales ?? DEFAULT_LOCALES;\n const defaultLocale = config?.defaultLocale ?? DEFAULT_LOCALE;\n const localePrefix = config?.localePrefix ?? 'as-needed';\n\n return defineRouting({\n locales,\n defaultLocale,\n localePrefix,\n });\n}\n\n/**\n * Default routing configuration\n * Can be overridden by app-specific configuration\n */\nexport const routing = createRouting();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Locale Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Check if a locale is supported\n */\nexport function isValidLocale(\n locale: string,\n supportedLocales: readonly string[] = DEFAULT_LOCALES\n): locale is LocaleCode {\n return supportedLocales.includes(locale as LocaleCode);\n}\n\n/**\n * Get locale from params (handles async params in Next.js 15+)\n */\nexport async function getLocaleFromParams(\n params: Promise<{ locale: string }> | { locale: string }\n): Promise<LocaleCode> {\n const resolved = await params;\n return resolved.locale as LocaleCode;\n}\n\n/**\n * Generate static params for all locales\n * Use in generateStaticParams for locale pages\n */\nexport function generateLocaleParams(locales: readonly string[] = DEFAULT_LOCALES) {\n return locales.map((locale) => ({ locale }));\n}\n","/**\n * i18n Provider for Next.js App Router\n *\n * Bridges next-intl with @djangocfg/i18n\n * Provides translations to both Server and Client components\n *\n * @example\n * ```tsx\n * // app/[locale]/layout.tsx\n * import { I18nProvider } from '@djangocfg/nextjs/i18n';\n * import { getMessages, getLocale } from '@djangocfg/nextjs/i18n/server';\n *\n * export default async function LocaleLayout({ children, params }) {\n * const locale = await getLocale(params);\n * const messages = await getMessages();\n *\n * return (\n * <I18nProvider locale={locale} messages={messages}>\n * {children}\n * </I18nProvider>\n * );\n * }\n * ```\n */\n\n'use client';\n\nimport { NextIntlClientProvider } from 'next-intl';\nimport { I18nProvider as DjangoCfgI18nProvider } from '@djangocfg/i18n';\nimport type { I18nProviderProps, LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Provider Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Unified i18n Provider\n *\n * Wraps both NextIntlClientProvider and @djangocfg/i18n's I18nProvider\n * This ensures both next-intl hooks and @djangocfg/i18n hooks work correctly\n */\nexport function I18nProvider({\n locale,\n messages,\n timeZone = 'UTC',\n now,\n children,\n}: I18nProviderProps) {\n return (\n <NextIntlClientProvider\n locale={locale}\n messages={messages}\n timeZone={timeZone}\n now={now}\n >\n <DjangoCfgI18nProvider\n locale={locale as LocaleCode}\n translations={messages}\n >\n {children}\n </DjangoCfgI18nProvider>\n </NextIntlClientProvider>\n );\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Lightweight Provider (next-intl only)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Next-intl only provider (without @djangocfg/i18n context)\n * Use if you only need next-intl hooks\n */\nexport function NextIntlProvider({\n locale,\n messages,\n timeZone = 'UTC',\n now,\n children,\n}: I18nProviderProps) {\n return (\n <NextIntlClientProvider\n locale={locale}\n messages={messages}\n timeZone={timeZone}\n now={now}\n >\n {children}\n </NextIntlClientProvider>\n );\n}\n"],"mappings":";;;AAsBA;AAAA,EACI;AAAA,EAAc,aAAa;AAAA,EAAmB;AAAA,EAAa;AAAA,EAAQ;AAAA,EACnE,mBAAmB;AAAA,OAChB;;;ACCP,SAAS,oBAAoB,gCAAgC;;;ACnB7D,SAAS,qBAAqB;AAQvB,IAAM,kBAAgC,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM,MAAM,IAAI;AAC9I,IAAM,iBAA6B;AAoBnC,SAAS,cAAc,QAA8B;AAC1D,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,QAAM,eAAe,QAAQ,gBAAgB;AAE7C,SAAO,cAAc;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAMO,IAAM,UAAU,cAAc;;;ADN9B,SAAS,iBAAiB,eAAkD;AACjF,QAAM,SAAS,iBAAiB;AAChC,SAAO,yBAAyB,MAAM;AACxC;AAkBO,IAAM;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAI,iBAAiB;;;AE9CrB,SAAS,8BAA8B;AACvC,SAAS,gBAAgB,6BAA6B;AA2BhD;AAdC,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,cAAc;AAAA,UAEb;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAUO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;AHtCO,SAAS,gBACd,WACA;AACA,SAAO,wBAAwB,SAAS;AAC1C;AAKO,SAAS,YAAwB;AACtC,SAAO,kBAAkB;AAC3B;AA+BO,IAAM,OAAO;AAWb,SAAS,0BAA0B,WAAmB;AAC3D,SAAO,wBAAwB,SAAS;AAC1C;AAeO,SAAS,mBAAmB;AACjC,QAAM,YAAY,aAAa;AAC/B,SAAO,CAAC,MAAqB,YAC3B,UAAU,SAAS,MAAM,OAAO;AACpC;AAWO,SAAS,qBAAqB;AACnC,QAAM,YAAY,aAAa;AAC/B,SAAO,CAAC,QAAgB,YACtB,UAAU,OAAO,QAAQ,OAAO;AACpC;AAWO,SAAS,2BAA2B;AACzC,QAAM,YAAY,aAAa;AAC/B,SAAO,CAAC,MAAqB,YAC3B,UAAU,aAAa,MAAM,OAAO;AACxC;AAeO,SAAS,aAA2B;AACzC,SAAO,QAAQ;AACjB;AAKO,SAAS,mBAA+B;AAC7C,SAAO,QAAQ;AACjB;AAcO,SAAS,kBAAkB;AAChC,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,YAAY;AAE7B,SAAO,CAAC,WAAuB;AAE7B,UAAM,OAAO,oBAAI,KAAK;AACtB,SAAK,YAAY,KAAK,YAAY,IAAI,CAAC;AACvC,aAAS,SAAS,eAAe,MAAM,aAAa,KAAK,YAAY,CAAC;AAEtE,WAAO,QAAQ,UAAU,EAAE,OAAO,CAAC;AAAA,EACrC;AACF;AAeO,SAAS,oBAAoB;AAClC,QAAM,SAAS,UAAU;AACzB,QAAM,UAAU,WAAW;AAC3B,QAAM,eAAe,gBAAgB;AAErC,SAAO,EAAE,QAAQ,SAAS,aAAa;AACzC;","names":[]}
1
+ {"version":3,"sources":["../../src/i18n/client.ts","../../src/i18n/navigation.ts","../../src/i18n/routing.ts","../../src/i18n/provider.tsx"],"sourcesContent":["/**\n * Client-side i18n Hooks\n *\n * For use in Client Components ('use client')\n *\n * @example\n * ```tsx\n * 'use client';\n *\n * import { useTranslations, useLocale } from '@djangocfg/nextjs/i18n/client';\n *\n * export function MyComponent() {\n * const t = useTranslations('HomePage');\n * const locale = useLocale();\n *\n * return <h1>{t('title')}</h1>;\n * }\n * ```\n */\n\n'use client';\n\nimport {\n useFormatter, useLocale as useNextIntlLocale, useMessages, useNow, useTimeZone,\n useTranslations as useNextIntlTranslations\n} from 'next-intl';\n\nimport { usePathname } from './navigation';\nimport { I18nProvider, NextIntlProvider } from './provider';\nimport { routing } from './routing';\n\n// Re-export providers\nexport { I18nProvider, NextIntlProvider };\n\nimport type { LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Core Client Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get translations in Client Components\n *\n * @example\n * ```tsx\n * const t = useTranslations('HomePage');\n * return <h1>{t('title')}</h1>;\n *\n * // With interpolation\n * return <p>{t('greeting', { name: 'John' })}</p>;\n * ```\n */\nexport function useTranslations<Namespace extends string = never>(\n namespace?: Namespace\n) {\n return useNextIntlTranslations(namespace);\n}\n\n/**\n * Get current locale in Client Components\n */\nexport function useLocale(): LocaleCode {\n return useNextIntlLocale() as LocaleCode;\n}\n\n/**\n * Get all messages\n * Useful for passing to child providers\n */\nexport { useMessages };\n\n/**\n * Get current time\n */\nexport { useNow };\n\n/**\n * Get timezone\n */\nexport { useTimeZone };\n\n/**\n * Get formatter for dates, numbers, etc.\n */\nexport { useFormatter };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Convenience Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Shorthand for useTranslations\n * Alias for compatibility with @djangocfg/i18n\n */\nexport const useT = useTranslations;\n\n/**\n * Get namespaced translations\n *\n * @example\n * ```tsx\n * const pt = useNamespacedTranslations('payments');\n * return <span>{pt('balance.available')}</span>;\n * ```\n */\nexport function useNamespacedTranslations(namespace: string) {\n return useNextIntlTranslations(namespace);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Formatting Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Format a date according to locale\n *\n * @example\n * ```tsx\n * const formatDate = useDateFormatter();\n * return <span>{formatDate(new Date())}</span>;\n * ```\n */\nexport function useDateFormatter() {\n const formatter = useFormatter();\n return (date: Date | number, options?: Parameters<typeof formatter.dateTime>[1]) =>\n formatter.dateTime(date, options);\n}\n\n/**\n * Format a number according to locale\n *\n * @example\n * ```tsx\n * const formatNumber = useNumberFormatter();\n * return <span>{formatNumber(1234.56)}</span>;\n * ```\n */\nexport function useNumberFormatter() {\n const formatter = useFormatter();\n return (number: number, options?: Parameters<typeof formatter.number>[1]) =>\n formatter.number(number, options);\n}\n\n/**\n * Format relative time\n *\n * @example\n * ```tsx\n * const formatRelative = useRelativeTimeFormatter();\n * return <span>{formatRelative(new Date())}</span>;\n * ```\n */\nexport function useRelativeTimeFormatter() {\n const formatter = useFormatter();\n return (date: Date | number, options?: Parameters<typeof formatter.relativeTime>[1]) =>\n formatter.relativeTime(date, options);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Locale Switching Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get list of available locales from routing config\n *\n * @example\n * ```tsx\n * const locales = useLocales();\n * // ['en', 'ru', 'ko']\n * ```\n */\nexport function useLocales(): LocaleCode[] {\n return routing.locales as LocaleCode[];\n}\n\n/**\n * Get default locale from routing config\n */\nexport function useDefaultLocale(): LocaleCode {\n return routing.defaultLocale as LocaleCode;\n}\n\n/**\n * Hook to change current locale\n *\n * @example\n * ```tsx\n * const changeLocale = useChangeLocale();\n *\n * <button onClick={() => changeLocale('ru')}>\n * Switch to Russian\n * </button>\n * ```\n */\nexport function useChangeLocale() {\n const pathname = usePathname();\n\n return (locale: LocaleCode) => {\n // Set NEXT_LOCALE cookie so middleware remembers the choice\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n document.cookie = `NEXT_LOCALE=${locale}; expires=${date.toUTCString()}; path=/`;\n\n // Hard navigation to force full page reload with new locale\n // (ensures server components re-render with updated translations)\n window.location.href = `/${locale}${pathname}`;\n };\n}\n\n/**\n * Combined hook for locale switching\n * Returns current locale, available locales, and change function\n *\n * @example\n * ```tsx\n * const { locale, locales, changeLocale } = useLocaleSwitcher();\n *\n * <select value={locale} onChange={(e) => changeLocale(e.target.value)}>\n * {locales.map(l => <option key={l} value={l}>{l}</option>)}\n * </select>\n * ```\n */\nexport function useLocaleSwitcher() {\n const locale = useLocale();\n const locales = useLocales();\n const changeLocale = useChangeLocale();\n\n return { locale, locales, changeLocale };\n}\n","/**\n * i18n Navigation Utilities\n *\n * Provides locale-aware navigation components and functions\n *\n * @example\n * ```ts\n * // In your app's i18n/navigation.ts\n * import { createNavigation } from '@djangocfg/nextjs/i18n';\n * import { routing } from './routing';\n *\n * export const { Link, redirect, usePathname, useRouter } = createNavigation(routing);\n * ```\n *\n * @example\n * ```tsx\n * // Using in components\n * import { Link, usePathname } from '@/i18n/navigation';\n *\n * function Nav() {\n * const pathname = usePathname();\n * return <Link href=\"/about\">About</Link>;\n * }\n * ```\n */\n\nimport { createNavigation as createNextIntlNavigation } from 'next-intl/navigation';\n\nimport { createRouting, routing } from './routing';\n\nimport type { I18nConfig } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Navigation Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create navigation utilities with custom routing\n *\n * Returns locale-aware versions of:\n * - Link: Locale-prefixed links\n * - redirect: Server-side redirect with locale\n * - usePathname: Current pathname without locale prefix\n * - useRouter: Router with locale-aware navigation\n * - getPathname: Get pathname for a route\n */\nexport function createNavigation(routingConfig?: ReturnType<typeof createRouting>) {\n const config = routingConfig ?? routing;\n return createNextIntlNavigation(config);\n}\n\n/**\n * Create navigation from config options\n */\nexport function createNavigationFromConfig(config: Partial<I18nConfig>) {\n const routingConfig = createRouting(config);\n return createNextIntlNavigation(routingConfig);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Navigation (using default routing)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Default navigation utilities\n * Use these directly or create custom ones with createNavigation()\n */\nexport const {\n Link,\n redirect,\n usePathname,\n useRouter,\n getPathname,\n} = createNavigation();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for locale-aware Link component\n */\nexport interface LinkProps {\n /** Target href */\n href: string;\n /** Target locale (optional, defaults to current) */\n locale?: string;\n /** Children */\n children?: React.ReactNode;\n /** Additional props passed to Next.js Link */\n [key: string]: unknown;\n}\n","/**\n * i18n Routing Configuration\n *\n * Creates routing configuration for next-intl\n * Used by proxy and navigation components\n */\n\nimport { defineRouting } from 'next-intl/routing';\n\nimport type { I18nConfig, LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Configuration\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const DEFAULT_LOCALES: LocaleCode[] = ['en', 'ru', 'ko', 'ja', 'de', 'fr', 'zh', 'it', 'es', 'nl', 'ar', 'tr', 'pt-BR', 'pl', 'sv', 'no', 'da'];\nexport const DEFAULT_LOCALE: LocaleCode = 'en';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Routing Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create routing configuration for next-intl\n *\n * @example\n * ```ts\n * // i18n/routing.ts\n * import { createRouting } from '@djangocfg/nextjs/i18n';\n *\n * export const routing = createRouting({\n * locales: ['en', 'ru', 'ko'],\n * defaultLocale: 'en',\n * });\n * ```\n */\nexport function createRouting(config?: Partial<I18nConfig>) {\n const locales = config?.locales ?? DEFAULT_LOCALES;\n const defaultLocale = config?.defaultLocale ?? DEFAULT_LOCALE;\n const localePrefix = config?.localePrefix ?? 'as-needed';\n\n return defineRouting({\n locales,\n defaultLocale,\n localePrefix,\n });\n}\n\n/**\n * Default routing configuration\n * Can be overridden by app-specific configuration\n */\nexport const routing = createRouting();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Locale Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Check if a locale is supported\n */\nexport function isValidLocale(\n locale: string,\n supportedLocales: readonly string[] = DEFAULT_LOCALES\n): locale is LocaleCode {\n return supportedLocales.includes(locale as LocaleCode);\n}\n\n/**\n * Get locale from params (handles async params in Next.js 15+)\n */\nexport async function getLocaleFromParams(\n params: Promise<{ locale: string }> | { locale: string }\n): Promise<LocaleCode> {\n const resolved = await params;\n return resolved.locale as LocaleCode;\n}\n\n/**\n * Generate static params for all locales\n * Use in generateStaticParams for locale pages\n */\nexport function generateLocaleParams(locales: readonly string[] = DEFAULT_LOCALES) {\n return locales.map((locale) => ({ locale }));\n}\n","/**\n * i18n Provider for Next.js App Router\n *\n * Bridges next-intl with @djangocfg/i18n\n * Provides translations to both Server and Client components\n *\n * @example\n * ```tsx\n * // app/[locale]/layout.tsx\n * import { I18nProvider } from '@djangocfg/nextjs/i18n';\n * import { getMessages, getLocale } from '@djangocfg/nextjs/i18n/server';\n *\n * export default async function LocaleLayout({ children, params }) {\n * const locale = await getLocale(params);\n * const messages = await getMessages();\n *\n * return (\n * <I18nProvider locale={locale} messages={messages}>\n * {children}\n * </I18nProvider>\n * );\n * }\n * ```\n */\n\n'use client';\n\nimport { NextIntlClientProvider } from 'next-intl';\nimport { I18nProvider as DjangoCfgI18nProvider } from '@djangocfg/i18n';\nimport type { I18nProviderProps, LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Provider Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Unified i18n Provider\n *\n * Wraps both NextIntlClientProvider and @djangocfg/i18n's I18nProvider\n * This ensures both next-intl hooks and @djangocfg/i18n hooks work correctly\n */\nexport function I18nProvider({\n locale,\n messages,\n timeZone = 'UTC',\n now,\n children,\n}: I18nProviderProps) {\n return (\n <NextIntlClientProvider\n locale={locale}\n messages={messages}\n timeZone={timeZone}\n now={now}\n >\n <DjangoCfgI18nProvider\n locale={locale as LocaleCode}\n translations={messages}\n >\n {children}\n </DjangoCfgI18nProvider>\n </NextIntlClientProvider>\n );\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Lightweight Provider (next-intl only)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Next-intl only provider (without @djangocfg/i18n context)\n * Use if you only need next-intl hooks\n */\nexport function NextIntlProvider({\n locale,\n messages,\n timeZone = 'UTC',\n now,\n children,\n}: I18nProviderProps) {\n return (\n <NextIntlClientProvider\n locale={locale}\n messages={messages}\n timeZone={timeZone}\n now={now}\n >\n {children}\n </NextIntlClientProvider>\n );\n}\n"],"mappings":";;;AAsBA;AAAA,EACI;AAAA,EAAc,aAAa;AAAA,EAAmB;AAAA,EAAa;AAAA,EAAQ;AAAA,EACnE,mBAAmB;AAAA,OAChB;;;ACCP,SAAS,oBAAoB,gCAAgC;;;ACnB7D,SAAS,qBAAqB;AAQvB,IAAM,kBAAgC,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM,MAAM,IAAI;AAC9I,IAAM,iBAA6B;AAoBnC,SAAS,cAAc,QAA8B;AAC1D,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,QAAM,eAAe,QAAQ,gBAAgB;AAE7C,SAAO,cAAc;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAMO,IAAM,UAAU,cAAc;;;ADN9B,SAAS,iBAAiB,eAAkD;AACjF,QAAM,SAAS,iBAAiB;AAChC,SAAO,yBAAyB,MAAM;AACxC;AAkBO,IAAM;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAI,iBAAiB;;;AE9CrB,SAAS,8BAA8B;AACvC,SAAS,gBAAgB,6BAA6B;AA2BhD;AAdC,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,cAAc;AAAA,UAEb;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAUO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAAsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;AHtCO,SAAS,gBACd,WACA;AACA,SAAO,wBAAwB,SAAS;AAC1C;AAKO,SAAS,YAAwB;AACtC,SAAO,kBAAkB;AAC3B;AA+BO,IAAM,OAAO;AAWb,SAAS,0BAA0B,WAAmB;AAC3D,SAAO,wBAAwB,SAAS;AAC1C;AAeO,SAAS,mBAAmB;AACjC,QAAM,YAAY,aAAa;AAC/B,SAAO,CAAC,MAAqB,YAC3B,UAAU,SAAS,MAAM,OAAO;AACpC;AAWO,SAAS,qBAAqB;AACnC,QAAM,YAAY,aAAa;AAC/B,SAAO,CAAC,QAAgB,YACtB,UAAU,OAAO,QAAQ,OAAO;AACpC;AAWO,SAAS,2BAA2B;AACzC,QAAM,YAAY,aAAa;AAC/B,SAAO,CAAC,MAAqB,YAC3B,UAAU,aAAa,MAAM,OAAO;AACxC;AAeO,SAAS,aAA2B;AACzC,SAAO,QAAQ;AACjB;AAKO,SAAS,mBAA+B;AAC7C,SAAO,QAAQ;AACjB;AAcO,SAAS,kBAAkB;AAChC,QAAM,WAAW,YAAY;AAE7B,SAAO,CAAC,WAAuB;AAE7B,UAAM,OAAO,oBAAI,KAAK;AACtB,SAAK,YAAY,KAAK,YAAY,IAAI,CAAC;AACvC,aAAS,SAAS,eAAe,MAAM,aAAa,KAAK,YAAY,CAAC;AAItE,WAAO,SAAS,OAAO,IAAI,MAAM,GAAG,QAAQ;AAAA,EAC9C;AACF;AAeO,SAAS,oBAAoB;AAClC,QAAM,SAAS,UAAU;AACzB,QAAM,UAAU,WAAW;AAC3B,QAAM,eAAe,gBAAgB;AAErC,SAAO,EAAE,QAAQ,SAAS,aAAa;AACzC;","names":[]}
@@ -58,13 +58,12 @@ function useLocales() {
58
58
  return routing.locales;
59
59
  }
60
60
  function useChangeLocale() {
61
- const router = useRouter();
62
61
  const pathname = usePathname();
63
62
  return (locale) => {
64
63
  const date = /* @__PURE__ */ new Date();
65
64
  date.setFullYear(date.getFullYear() + 1);
66
65
  document.cookie = `NEXT_LOCALE=${locale}; expires=${date.toUTCString()}; path=/`;
67
- router.replace(pathname, { locale });
66
+ window.location.href = `/${locale}${pathname}`;
68
67
  };
69
68
  }
70
69
  function useLocaleSwitcher() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/i18n/components/LocaleSwitcher.tsx","../../src/i18n/client.ts","../../src/i18n/navigation.ts","../../src/i18n/routing.ts","../../src/i18n/provider.tsx"],"sourcesContent":["/**\n * LocaleSwitcher Component (Smart)\n *\n * Wrapper around @djangocfg/layouts LocaleSwitcher with next-intl hooks.\n * Automatically gets locale data from routing config.\n *\n * @example\n * ```tsx\n * import { LocaleSwitcher } from '@djangocfg/nextjs/i18n/components';\n *\n * // Basic usage (uses all locales from routing config)\n * <LocaleSwitcher />\n *\n * // With custom locales\n * <LocaleSwitcher locales={['en', 'ru']} />\n *\n * // With custom labels\n * <LocaleSwitcher\n * labels={{\n * en: 'English',\n * ru: 'Русский',\n * ko: '한국어',\n * }}\n * />\n * ```\n */\n\n'use client';\n\nimport {\n LocaleSwitcher as BaseLocaleSwitcher,\n type LocaleSwitcherProps as BaseLocaleSwitcherProps,\n} from '@djangocfg/layouts';\n\nimport { useLocaleSwitcher } from '../client';\nimport type { LocaleCode } from '../types';\n\nexport interface LocaleSwitcherProps\n extends Omit<BaseLocaleSwitcherProps, 'locale' | 'locales' | 'onChange'> {\n /** Available locales (defaults to all from routing config) */\n locales?: LocaleCode[];\n}\n\nexport function LocaleSwitcher({\n locales: customLocales,\n ...props\n}: LocaleSwitcherProps) {\n const { locale, locales: routingLocales, changeLocale } = useLocaleSwitcher();\n\n const availableLocales = customLocales || routingLocales;\n\n return (\n <BaseLocaleSwitcher\n locale={locale}\n locales={availableLocales}\n onChange={changeLocale}\n {...props}\n />\n );\n}\n","/**\n * Client-side i18n Hooks\n *\n * For use in Client Components ('use client')\n *\n * @example\n * ```tsx\n * 'use client';\n *\n * import { useTranslations, useLocale } from '@djangocfg/nextjs/i18n/client';\n *\n * export function MyComponent() {\n * const t = useTranslations('HomePage');\n * const locale = useLocale();\n *\n * return <h1>{t('title')}</h1>;\n * }\n * ```\n */\n\n'use client';\n\nimport {\n useFormatter, useLocale as useNextIntlLocale, useMessages, useNow, useTimeZone,\n useTranslations as useNextIntlTranslations\n} from 'next-intl';\n\nimport { usePathname, useRouter } from './navigation';\nimport { I18nProvider, NextIntlProvider } from './provider';\nimport { routing } from './routing';\n\n// Re-export providers\nexport { I18nProvider, NextIntlProvider };\n\nimport type { LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Core Client Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get translations in Client Components\n *\n * @example\n * ```tsx\n * const t = useTranslations('HomePage');\n * return <h1>{t('title')}</h1>;\n *\n * // With interpolation\n * return <p>{t('greeting', { name: 'John' })}</p>;\n * ```\n */\nexport function useTranslations<Namespace extends string = never>(\n namespace?: Namespace\n) {\n return useNextIntlTranslations(namespace);\n}\n\n/**\n * Get current locale in Client Components\n */\nexport function useLocale(): LocaleCode {\n return useNextIntlLocale() as LocaleCode;\n}\n\n/**\n * Get all messages\n * Useful for passing to child providers\n */\nexport { useMessages };\n\n/**\n * Get current time\n */\nexport { useNow };\n\n/**\n * Get timezone\n */\nexport { useTimeZone };\n\n/**\n * Get formatter for dates, numbers, etc.\n */\nexport { useFormatter };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Convenience Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Shorthand for useTranslations\n * Alias for compatibility with @djangocfg/i18n\n */\nexport const useT = useTranslations;\n\n/**\n * Get namespaced translations\n *\n * @example\n * ```tsx\n * const pt = useNamespacedTranslations('payments');\n * return <span>{pt('balance.available')}</span>;\n * ```\n */\nexport function useNamespacedTranslations(namespace: string) {\n return useNextIntlTranslations(namespace);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Formatting Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Format a date according to locale\n *\n * @example\n * ```tsx\n * const formatDate = useDateFormatter();\n * return <span>{formatDate(new Date())}</span>;\n * ```\n */\nexport function useDateFormatter() {\n const formatter = useFormatter();\n return (date: Date | number, options?: Parameters<typeof formatter.dateTime>[1]) =>\n formatter.dateTime(date, options);\n}\n\n/**\n * Format a number according to locale\n *\n * @example\n * ```tsx\n * const formatNumber = useNumberFormatter();\n * return <span>{formatNumber(1234.56)}</span>;\n * ```\n */\nexport function useNumberFormatter() {\n const formatter = useFormatter();\n return (number: number, options?: Parameters<typeof formatter.number>[1]) =>\n formatter.number(number, options);\n}\n\n/**\n * Format relative time\n *\n * @example\n * ```tsx\n * const formatRelative = useRelativeTimeFormatter();\n * return <span>{formatRelative(new Date())}</span>;\n * ```\n */\nexport function useRelativeTimeFormatter() {\n const formatter = useFormatter();\n return (date: Date | number, options?: Parameters<typeof formatter.relativeTime>[1]) =>\n formatter.relativeTime(date, options);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Locale Switching Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get list of available locales from routing config\n *\n * @example\n * ```tsx\n * const locales = useLocales();\n * // ['en', 'ru', 'ko']\n * ```\n */\nexport function useLocales(): LocaleCode[] {\n return routing.locales as LocaleCode[];\n}\n\n/**\n * Get default locale from routing config\n */\nexport function useDefaultLocale(): LocaleCode {\n return routing.defaultLocale as LocaleCode;\n}\n\n/**\n * Hook to change current locale\n *\n * @example\n * ```tsx\n * const changeLocale = useChangeLocale();\n *\n * <button onClick={() => changeLocale('ru')}>\n * Switch to Russian\n * </button>\n * ```\n */\nexport function useChangeLocale() {\n const router = useRouter();\n const pathname = usePathname();\n\n return (locale: LocaleCode) => {\n // Set NEXT_LOCALE cookie so middleware remembers the choice\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n document.cookie = `NEXT_LOCALE=${locale}; expires=${date.toUTCString()}; path=/`;\n\n router.replace(pathname, { locale });\n };\n}\n\n/**\n * Combined hook for locale switching\n * Returns current locale, available locales, and change function\n *\n * @example\n * ```tsx\n * const { locale, locales, changeLocale } = useLocaleSwitcher();\n *\n * <select value={locale} onChange={(e) => changeLocale(e.target.value)}>\n * {locales.map(l => <option key={l} value={l}>{l}</option>)}\n * </select>\n * ```\n */\nexport function useLocaleSwitcher() {\n const locale = useLocale();\n const locales = useLocales();\n const changeLocale = useChangeLocale();\n\n return { locale, locales, changeLocale };\n}\n","/**\n * i18n Navigation Utilities\n *\n * Provides locale-aware navigation components and functions\n *\n * @example\n * ```ts\n * // In your app's i18n/navigation.ts\n * import { createNavigation } from '@djangocfg/nextjs/i18n';\n * import { routing } from './routing';\n *\n * export const { Link, redirect, usePathname, useRouter } = createNavigation(routing);\n * ```\n *\n * @example\n * ```tsx\n * // Using in components\n * import { Link, usePathname } from '@/i18n/navigation';\n *\n * function Nav() {\n * const pathname = usePathname();\n * return <Link href=\"/about\">About</Link>;\n * }\n * ```\n */\n\nimport { createNavigation as createNextIntlNavigation } from 'next-intl/navigation';\n\nimport { createRouting, routing } from './routing';\n\nimport type { I18nConfig } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Navigation Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create navigation utilities with custom routing\n *\n * Returns locale-aware versions of:\n * - Link: Locale-prefixed links\n * - redirect: Server-side redirect with locale\n * - usePathname: Current pathname without locale prefix\n * - useRouter: Router with locale-aware navigation\n * - getPathname: Get pathname for a route\n */\nexport function createNavigation(routingConfig?: ReturnType<typeof createRouting>) {\n const config = routingConfig ?? routing;\n return createNextIntlNavigation(config);\n}\n\n/**\n * Create navigation from config options\n */\nexport function createNavigationFromConfig(config: Partial<I18nConfig>) {\n const routingConfig = createRouting(config);\n return createNextIntlNavigation(routingConfig);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Navigation (using default routing)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Default navigation utilities\n * Use these directly or create custom ones with createNavigation()\n */\nexport const {\n Link,\n redirect,\n usePathname,\n useRouter,\n getPathname,\n} = createNavigation();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for locale-aware Link component\n */\nexport interface LinkProps {\n /** Target href */\n href: string;\n /** Target locale (optional, defaults to current) */\n locale?: string;\n /** Children */\n children?: React.ReactNode;\n /** Additional props passed to Next.js Link */\n [key: string]: unknown;\n}\n","/**\n * i18n Routing Configuration\n *\n * Creates routing configuration for next-intl\n * Used by proxy and navigation components\n */\n\nimport { defineRouting } from 'next-intl/routing';\n\nimport type { I18nConfig, LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Configuration\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const DEFAULT_LOCALES: LocaleCode[] = ['en', 'ru', 'ko', 'ja', 'de', 'fr', 'zh', 'it', 'es', 'nl', 'ar', 'tr', 'pt-BR', 'pl', 'sv', 'no', 'da'];\nexport const DEFAULT_LOCALE: LocaleCode = 'en';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Routing Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create routing configuration for next-intl\n *\n * @example\n * ```ts\n * // i18n/routing.ts\n * import { createRouting } from '@djangocfg/nextjs/i18n';\n *\n * export const routing = createRouting({\n * locales: ['en', 'ru', 'ko'],\n * defaultLocale: 'en',\n * });\n * ```\n */\nexport function createRouting(config?: Partial<I18nConfig>) {\n const locales = config?.locales ?? DEFAULT_LOCALES;\n const defaultLocale = config?.defaultLocale ?? DEFAULT_LOCALE;\n const localePrefix = config?.localePrefix ?? 'as-needed';\n\n return defineRouting({\n locales,\n defaultLocale,\n localePrefix,\n });\n}\n\n/**\n * Default routing configuration\n * Can be overridden by app-specific configuration\n */\nexport const routing = createRouting();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Locale Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Check if a locale is supported\n */\nexport function isValidLocale(\n locale: string,\n supportedLocales: readonly string[] = DEFAULT_LOCALES\n): locale is LocaleCode {\n return supportedLocales.includes(locale as LocaleCode);\n}\n\n/**\n * Get locale from params (handles async params in Next.js 15+)\n */\nexport async function getLocaleFromParams(\n params: Promise<{ locale: string }> | { locale: string }\n): Promise<LocaleCode> {\n const resolved = await params;\n return resolved.locale as LocaleCode;\n}\n\n/**\n * Generate static params for all locales\n * Use in generateStaticParams for locale pages\n */\nexport function generateLocaleParams(locales: readonly string[] = DEFAULT_LOCALES) {\n return locales.map((locale) => ({ locale }));\n}\n","/**\n * i18n Provider for Next.js App Router\n *\n * Bridges next-intl with @djangocfg/i18n\n * Provides translations to both Server and Client components\n *\n * @example\n * ```tsx\n * // app/[locale]/layout.tsx\n * import { I18nProvider } from '@djangocfg/nextjs/i18n';\n * import { getMessages, getLocale } from '@djangocfg/nextjs/i18n/server';\n *\n * export default async function LocaleLayout({ children, params }) {\n * const locale = await getLocale(params);\n * const messages = await getMessages();\n *\n * return (\n * <I18nProvider locale={locale} messages={messages}>\n * {children}\n * </I18nProvider>\n * );\n * }\n * ```\n */\n\n'use client';\n\nimport { NextIntlClientProvider } from 'next-intl';\nimport { I18nProvider as DjangoCfgI18nProvider } from '@djangocfg/i18n';\nimport type { I18nProviderProps, LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Provider Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Unified i18n Provider\n *\n * Wraps both NextIntlClientProvider and @djangocfg/i18n's I18nProvider\n * This ensures both next-intl hooks and @djangocfg/i18n hooks work correctly\n */\nexport function I18nProvider({\n locale,\n messages,\n timeZone = 'UTC',\n now,\n children,\n}: I18nProviderProps) {\n return (\n <NextIntlClientProvider\n locale={locale}\n messages={messages}\n timeZone={timeZone}\n now={now}\n >\n <DjangoCfgI18nProvider\n locale={locale as LocaleCode}\n translations={messages}\n >\n {children}\n </DjangoCfgI18nProvider>\n </NextIntlClientProvider>\n );\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Lightweight Provider (next-intl only)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Next-intl only provider (without @djangocfg/i18n context)\n * Use if you only need next-intl hooks\n */\nexport function NextIntlProvider({\n locale,\n messages,\n timeZone = 'UTC',\n now,\n children,\n}: I18nProviderProps) {\n return (\n <NextIntlClientProvider\n locale={locale}\n messages={messages}\n timeZone={timeZone}\n now={now}\n >\n {children}\n </NextIntlClientProvider>\n );\n}\n"],"mappings":";AA6BA;AAAA,EACE,kBAAkB;AAAA,OAEb;;;ACVP;AAAA,EACI;AAAA,EAAc,aAAa;AAAA,EAAmB;AAAA,EAAa;AAAA,EAAQ;AAAA,EACnE,mBAAmB;AAAA,OAChB;;;ACCP,SAAS,oBAAoB,gCAAgC;;;ACnB7D,SAAS,qBAAqB;AAQvB,IAAM,kBAAgC,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM,MAAM,IAAI;AAC9I,IAAM,iBAA6B;AAoBnC,SAAS,cAAc,QAA8B;AAC1D,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,QAAM,eAAe,QAAQ,gBAAgB;AAE7C,SAAO,cAAc;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAMO,IAAM,UAAU,cAAc;;;ADN9B,SAAS,iBAAiB,eAAkD;AACjF,QAAM,SAAS,iBAAiB;AAChC,SAAO,yBAAyB,MAAM;AACxC;AAkBO,IAAM;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAI,iBAAiB;;;AE9CrB,SAAS,8BAA8B;AACvC,SAAS,gBAAgB,6BAA6B;AA2BhD;;;AHMC,SAAS,YAAwB;AACtC,SAAO,kBAAkB;AAC3B;AA4GO,SAAS,aAA2B;AACzC,SAAO,QAAQ;AACjB;AAqBO,SAAS,kBAAkB;AAChC,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,YAAY;AAE7B,SAAO,CAAC,WAAuB;AAE7B,UAAM,OAAO,oBAAI,KAAK;AACtB,SAAK,YAAY,KAAK,YAAY,IAAI,CAAC;AACvC,aAAS,SAAS,eAAe,MAAM,aAAa,KAAK,YAAY,CAAC;AAEtE,WAAO,QAAQ,UAAU,EAAE,OAAO,CAAC;AAAA,EACrC;AACF;AAeO,SAAS,oBAAoB;AAClC,QAAM,SAAS,UAAU;AACzB,QAAM,UAAU,WAAW;AAC3B,QAAM,eAAe,gBAAgB;AAErC,SAAO,EAAE,QAAQ,SAAS,aAAa;AACzC;;;AD/KI,gBAAAA,YAAA;AATG,SAAS,eAAe;AAAA,EAC7B,SAAS;AAAA,EACT,GAAG;AACL,GAAwB;AACtB,QAAM,EAAE,QAAQ,SAAS,gBAAgB,aAAa,IAAI,kBAAkB;AAE5E,QAAM,mBAAmB,iBAAiB;AAE1C,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT,UAAU;AAAA,MACT,GAAG;AAAA;AAAA,EACN;AAEJ;","names":["jsx"]}
1
+ {"version":3,"sources":["../../src/i18n/components/LocaleSwitcher.tsx","../../src/i18n/client.ts","../../src/i18n/navigation.ts","../../src/i18n/routing.ts","../../src/i18n/provider.tsx"],"sourcesContent":["/**\n * LocaleSwitcher Component (Smart)\n *\n * Wrapper around @djangocfg/layouts LocaleSwitcher with next-intl hooks.\n * Automatically gets locale data from routing config.\n *\n * @example\n * ```tsx\n * import { LocaleSwitcher } from '@djangocfg/nextjs/i18n/components';\n *\n * // Basic usage (uses all locales from routing config)\n * <LocaleSwitcher />\n *\n * // With custom locales\n * <LocaleSwitcher locales={['en', 'ru']} />\n *\n * // With custom labels\n * <LocaleSwitcher\n * labels={{\n * en: 'English',\n * ru: 'Русский',\n * ko: '한국어',\n * }}\n * />\n * ```\n */\n\n'use client';\n\nimport {\n LocaleSwitcher as BaseLocaleSwitcher,\n type LocaleSwitcherProps as BaseLocaleSwitcherProps,\n} from '@djangocfg/layouts';\n\nimport { useLocaleSwitcher } from '../client';\nimport type { LocaleCode } from '../types';\n\nexport interface LocaleSwitcherProps\n extends Omit<BaseLocaleSwitcherProps, 'locale' | 'locales' | 'onChange'> {\n /** Available locales (defaults to all from routing config) */\n locales?: LocaleCode[];\n}\n\nexport function LocaleSwitcher({\n locales: customLocales,\n ...props\n}: LocaleSwitcherProps) {\n const { locale, locales: routingLocales, changeLocale } = useLocaleSwitcher();\n\n const availableLocales = customLocales || routingLocales;\n\n return (\n <BaseLocaleSwitcher\n locale={locale}\n locales={availableLocales}\n onChange={changeLocale}\n {...props}\n />\n );\n}\n","/**\n * Client-side i18n Hooks\n *\n * For use in Client Components ('use client')\n *\n * @example\n * ```tsx\n * 'use client';\n *\n * import { useTranslations, useLocale } from '@djangocfg/nextjs/i18n/client';\n *\n * export function MyComponent() {\n * const t = useTranslations('HomePage');\n * const locale = useLocale();\n *\n * return <h1>{t('title')}</h1>;\n * }\n * ```\n */\n\n'use client';\n\nimport {\n useFormatter, useLocale as useNextIntlLocale, useMessages, useNow, useTimeZone,\n useTranslations as useNextIntlTranslations\n} from 'next-intl';\n\nimport { usePathname } from './navigation';\nimport { I18nProvider, NextIntlProvider } from './provider';\nimport { routing } from './routing';\n\n// Re-export providers\nexport { I18nProvider, NextIntlProvider };\n\nimport type { LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Core Client Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get translations in Client Components\n *\n * @example\n * ```tsx\n * const t = useTranslations('HomePage');\n * return <h1>{t('title')}</h1>;\n *\n * // With interpolation\n * return <p>{t('greeting', { name: 'John' })}</p>;\n * ```\n */\nexport function useTranslations<Namespace extends string = never>(\n namespace?: Namespace\n) {\n return useNextIntlTranslations(namespace);\n}\n\n/**\n * Get current locale in Client Components\n */\nexport function useLocale(): LocaleCode {\n return useNextIntlLocale() as LocaleCode;\n}\n\n/**\n * Get all messages\n * Useful for passing to child providers\n */\nexport { useMessages };\n\n/**\n * Get current time\n */\nexport { useNow };\n\n/**\n * Get timezone\n */\nexport { useTimeZone };\n\n/**\n * Get formatter for dates, numbers, etc.\n */\nexport { useFormatter };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Convenience Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Shorthand for useTranslations\n * Alias for compatibility with @djangocfg/i18n\n */\nexport const useT = useTranslations;\n\n/**\n * Get namespaced translations\n *\n * @example\n * ```tsx\n * const pt = useNamespacedTranslations('payments');\n * return <span>{pt('balance.available')}</span>;\n * ```\n */\nexport function useNamespacedTranslations(namespace: string) {\n return useNextIntlTranslations(namespace);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Formatting Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Format a date according to locale\n *\n * @example\n * ```tsx\n * const formatDate = useDateFormatter();\n * return <span>{formatDate(new Date())}</span>;\n * ```\n */\nexport function useDateFormatter() {\n const formatter = useFormatter();\n return (date: Date | number, options?: Parameters<typeof formatter.dateTime>[1]) =>\n formatter.dateTime(date, options);\n}\n\n/**\n * Format a number according to locale\n *\n * @example\n * ```tsx\n * const formatNumber = useNumberFormatter();\n * return <span>{formatNumber(1234.56)}</span>;\n * ```\n */\nexport function useNumberFormatter() {\n const formatter = useFormatter();\n return (number: number, options?: Parameters<typeof formatter.number>[1]) =>\n formatter.number(number, options);\n}\n\n/**\n * Format relative time\n *\n * @example\n * ```tsx\n * const formatRelative = useRelativeTimeFormatter();\n * return <span>{formatRelative(new Date())}</span>;\n * ```\n */\nexport function useRelativeTimeFormatter() {\n const formatter = useFormatter();\n return (date: Date | number, options?: Parameters<typeof formatter.relativeTime>[1]) =>\n formatter.relativeTime(date, options);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Locale Switching Hooks\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get list of available locales from routing config\n *\n * @example\n * ```tsx\n * const locales = useLocales();\n * // ['en', 'ru', 'ko']\n * ```\n */\nexport function useLocales(): LocaleCode[] {\n return routing.locales as LocaleCode[];\n}\n\n/**\n * Get default locale from routing config\n */\nexport function useDefaultLocale(): LocaleCode {\n return routing.defaultLocale as LocaleCode;\n}\n\n/**\n * Hook to change current locale\n *\n * @example\n * ```tsx\n * const changeLocale = useChangeLocale();\n *\n * <button onClick={() => changeLocale('ru')}>\n * Switch to Russian\n * </button>\n * ```\n */\nexport function useChangeLocale() {\n const pathname = usePathname();\n\n return (locale: LocaleCode) => {\n // Set NEXT_LOCALE cookie so middleware remembers the choice\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n document.cookie = `NEXT_LOCALE=${locale}; expires=${date.toUTCString()}; path=/`;\n\n // Hard navigation to force full page reload with new locale\n // (ensures server components re-render with updated translations)\n window.location.href = `/${locale}${pathname}`;\n };\n}\n\n/**\n * Combined hook for locale switching\n * Returns current locale, available locales, and change function\n *\n * @example\n * ```tsx\n * const { locale, locales, changeLocale } = useLocaleSwitcher();\n *\n * <select value={locale} onChange={(e) => changeLocale(e.target.value)}>\n * {locales.map(l => <option key={l} value={l}>{l}</option>)}\n * </select>\n * ```\n */\nexport function useLocaleSwitcher() {\n const locale = useLocale();\n const locales = useLocales();\n const changeLocale = useChangeLocale();\n\n return { locale, locales, changeLocale };\n}\n","/**\n * i18n Navigation Utilities\n *\n * Provides locale-aware navigation components and functions\n *\n * @example\n * ```ts\n * // In your app's i18n/navigation.ts\n * import { createNavigation } from '@djangocfg/nextjs/i18n';\n * import { routing } from './routing';\n *\n * export const { Link, redirect, usePathname, useRouter } = createNavigation(routing);\n * ```\n *\n * @example\n * ```tsx\n * // Using in components\n * import { Link, usePathname } from '@/i18n/navigation';\n *\n * function Nav() {\n * const pathname = usePathname();\n * return <Link href=\"/about\">About</Link>;\n * }\n * ```\n */\n\nimport { createNavigation as createNextIntlNavigation } from 'next-intl/navigation';\n\nimport { createRouting, routing } from './routing';\n\nimport type { I18nConfig } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Navigation Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create navigation utilities with custom routing\n *\n * Returns locale-aware versions of:\n * - Link: Locale-prefixed links\n * - redirect: Server-side redirect with locale\n * - usePathname: Current pathname without locale prefix\n * - useRouter: Router with locale-aware navigation\n * - getPathname: Get pathname for a route\n */\nexport function createNavigation(routingConfig?: ReturnType<typeof createRouting>) {\n const config = routingConfig ?? routing;\n return createNextIntlNavigation(config);\n}\n\n/**\n * Create navigation from config options\n */\nexport function createNavigationFromConfig(config: Partial<I18nConfig>) {\n const routingConfig = createRouting(config);\n return createNextIntlNavigation(routingConfig);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Navigation (using default routing)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Default navigation utilities\n * Use these directly or create custom ones with createNavigation()\n */\nexport const {\n Link,\n redirect,\n usePathname,\n useRouter,\n getPathname,\n} = createNavigation();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for locale-aware Link component\n */\nexport interface LinkProps {\n /** Target href */\n href: string;\n /** Target locale (optional, defaults to current) */\n locale?: string;\n /** Children */\n children?: React.ReactNode;\n /** Additional props passed to Next.js Link */\n [key: string]: unknown;\n}\n","/**\n * i18n Routing Configuration\n *\n * Creates routing configuration for next-intl\n * Used by proxy and navigation components\n */\n\nimport { defineRouting } from 'next-intl/routing';\n\nimport type { I18nConfig, LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Default Configuration\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const DEFAULT_LOCALES: LocaleCode[] = ['en', 'ru', 'ko', 'ja', 'de', 'fr', 'zh', 'it', 'es', 'nl', 'ar', 'tr', 'pt-BR', 'pl', 'sv', 'no', 'da'];\nexport const DEFAULT_LOCALE: LocaleCode = 'en';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Routing Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create routing configuration for next-intl\n *\n * @example\n * ```ts\n * // i18n/routing.ts\n * import { createRouting } from '@djangocfg/nextjs/i18n';\n *\n * export const routing = createRouting({\n * locales: ['en', 'ru', 'ko'],\n * defaultLocale: 'en',\n * });\n * ```\n */\nexport function createRouting(config?: Partial<I18nConfig>) {\n const locales = config?.locales ?? DEFAULT_LOCALES;\n const defaultLocale = config?.defaultLocale ?? DEFAULT_LOCALE;\n const localePrefix = config?.localePrefix ?? 'as-needed';\n\n return defineRouting({\n locales,\n defaultLocale,\n localePrefix,\n });\n}\n\n/**\n * Default routing configuration\n * Can be overridden by app-specific configuration\n */\nexport const routing = createRouting();\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Locale Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Check if a locale is supported\n */\nexport function isValidLocale(\n locale: string,\n supportedLocales: readonly string[] = DEFAULT_LOCALES\n): locale is LocaleCode {\n return supportedLocales.includes(locale as LocaleCode);\n}\n\n/**\n * Get locale from params (handles async params in Next.js 15+)\n */\nexport async function getLocaleFromParams(\n params: Promise<{ locale: string }> | { locale: string }\n): Promise<LocaleCode> {\n const resolved = await params;\n return resolved.locale as LocaleCode;\n}\n\n/**\n * Generate static params for all locales\n * Use in generateStaticParams for locale pages\n */\nexport function generateLocaleParams(locales: readonly string[] = DEFAULT_LOCALES) {\n return locales.map((locale) => ({ locale }));\n}\n","/**\n * i18n Provider for Next.js App Router\n *\n * Bridges next-intl with @djangocfg/i18n\n * Provides translations to both Server and Client components\n *\n * @example\n * ```tsx\n * // app/[locale]/layout.tsx\n * import { I18nProvider } from '@djangocfg/nextjs/i18n';\n * import { getMessages, getLocale } from '@djangocfg/nextjs/i18n/server';\n *\n * export default async function LocaleLayout({ children, params }) {\n * const locale = await getLocale(params);\n * const messages = await getMessages();\n *\n * return (\n * <I18nProvider locale={locale} messages={messages}>\n * {children}\n * </I18nProvider>\n * );\n * }\n * ```\n */\n\n'use client';\n\nimport { NextIntlClientProvider } from 'next-intl';\nimport { I18nProvider as DjangoCfgI18nProvider } from '@djangocfg/i18n';\nimport type { I18nProviderProps, LocaleCode } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Provider Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Unified i18n Provider\n *\n * Wraps both NextIntlClientProvider and @djangocfg/i18n's I18nProvider\n * This ensures both next-intl hooks and @djangocfg/i18n hooks work correctly\n */\nexport function I18nProvider({\n locale,\n messages,\n timeZone = 'UTC',\n now,\n children,\n}: I18nProviderProps) {\n return (\n <NextIntlClientProvider\n locale={locale}\n messages={messages}\n timeZone={timeZone}\n now={now}\n >\n <DjangoCfgI18nProvider\n locale={locale as LocaleCode}\n translations={messages}\n >\n {children}\n </DjangoCfgI18nProvider>\n </NextIntlClientProvider>\n );\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Lightweight Provider (next-intl only)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Next-intl only provider (without @djangocfg/i18n context)\n * Use if you only need next-intl hooks\n */\nexport function NextIntlProvider({\n locale,\n messages,\n timeZone = 'UTC',\n now,\n children,\n}: I18nProviderProps) {\n return (\n <NextIntlClientProvider\n locale={locale}\n messages={messages}\n timeZone={timeZone}\n now={now}\n >\n {children}\n </NextIntlClientProvider>\n );\n}\n"],"mappings":";AA6BA;AAAA,EACE,kBAAkB;AAAA,OAEb;;;ACVP;AAAA,EACI;AAAA,EAAc,aAAa;AAAA,EAAmB;AAAA,EAAa;AAAA,EAAQ;AAAA,EACnE,mBAAmB;AAAA,OAChB;;;ACCP,SAAS,oBAAoB,gCAAgC;;;ACnB7D,SAAS,qBAAqB;AAQvB,IAAM,kBAAgC,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM,MAAM,IAAI;AAC9I,IAAM,iBAA6B;AAoBnC,SAAS,cAAc,QAA8B;AAC1D,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,QAAM,eAAe,QAAQ,gBAAgB;AAE7C,SAAO,cAAc;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAMO,IAAM,UAAU,cAAc;;;ADN9B,SAAS,iBAAiB,eAAkD;AACjF,QAAM,SAAS,iBAAiB;AAChC,SAAO,yBAAyB,MAAM;AACxC;AAkBO,IAAM;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAI,iBAAiB;;;AE9CrB,SAAS,8BAA8B;AACvC,SAAS,gBAAgB,6BAA6B;AA2BhD;;;AHMC,SAAS,YAAwB;AACtC,SAAO,kBAAkB;AAC3B;AA4GO,SAAS,aAA2B;AACzC,SAAO,QAAQ;AACjB;AAqBO,SAAS,kBAAkB;AAChC,QAAM,WAAW,YAAY;AAE7B,SAAO,CAAC,WAAuB;AAE7B,UAAM,OAAO,oBAAI,KAAK;AACtB,SAAK,YAAY,KAAK,YAAY,IAAI,CAAC;AACvC,aAAS,SAAS,eAAe,MAAM,aAAa,KAAK,YAAY,CAAC;AAItE,WAAO,SAAS,OAAO,IAAI,MAAM,GAAG,QAAQ;AAAA,EAC9C;AACF;AAeO,SAAS,oBAAoB;AAClC,QAAM,SAAS,UAAU;AACzB,QAAM,UAAU,WAAW;AAC3B,QAAM,eAAe,gBAAgB;AAErC,SAAO,EAAE,QAAQ,SAAS,aAAa;AACzC;;;ADhLI,gBAAAA,YAAA;AATG,SAAS,eAAe;AAAA,EAC7B,SAAS;AAAA,EACT,GAAG;AACL,GAAwB;AACtB,QAAM,EAAE,QAAQ,SAAS,gBAAgB,aAAa,IAAI,kBAAkB;AAE5E,QAAM,mBAAmB,iBAAiB;AAE1C,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT,UAAU;AAAA,MACT,GAAG;AAAA;AAAA,EACN;AAEJ;","names":["jsx"]}
@@ -24,6 +24,7 @@ declare function createRouting(config?: Partial<I18nConfig>): {
24
24
  localePrefix?: next_intl_routing.LocalePrefix<string[], "always" | "as-needed" | "never">;
25
25
  domains?: never;
26
26
  localeCookie?: boolean | {
27
+ name?: string;
27
28
  maxAge?: number | undefined;
28
29
  priority?: "low" | "medium" | "high" | undefined;
29
30
  domain?: string | undefined;
@@ -31,7 +32,6 @@ declare function createRouting(config?: Partial<I18nConfig>): {
31
32
  secure?: boolean | undefined;
32
33
  sameSite?: true | false | "lax" | "strict" | "none" | undefined;
33
34
  partitioned?: boolean | undefined;
34
- name?: string;
35
35
  };
36
36
  alternateLinks?: boolean;
37
37
  localeDetection?: boolean;
@@ -46,6 +46,7 @@ declare const routing: {
46
46
  localePrefix?: next_intl_routing.LocalePrefix<string[], "always" | "as-needed" | "never">;
47
47
  domains?: never;
48
48
  localeCookie?: boolean | {
49
+ name?: string;
49
50
  maxAge?: number | undefined;
50
51
  priority?: "low" | "medium" | "high" | undefined;
51
52
  domain?: string | undefined;
@@ -53,7 +54,6 @@ declare const routing: {
53
54
  secure?: boolean | undefined;
54
55
  sameSite?: true | false | "lax" | "strict" | "none" | undefined;
55
56
  partitioned?: boolean | undefined;
56
- name?: string;
57
57
  };
58
58
  alternateLinks?: boolean;
59
59
  localeDetection?: boolean;
package/dist/index.mjs CHANGED
@@ -14,7 +14,7 @@ var require_package = __commonJS({
14
14
  "package.json"(exports, module) {
15
15
  module.exports = {
16
16
  name: "@djangocfg/nextjs",
17
- version: "2.1.192",
17
+ version: "2.1.194",
18
18
  description: "Next.js server utilities: sitemap, health, OG images, contact forms, navigation, config",
19
19
  keywords: [
20
20
  "nextjs",