@i18n-micro/solid 1.0.0
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.
- package/LICENSE +22 -0
- package/README.md +73 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +314 -0
- package/dist/index.mjs +575 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/i18n.ts","../src/injection.ts","../src/context.tsx","../src/use-i18n.ts","../src/components/I18nT.tsx","../src/components/I18nLink.tsx","../src/components/I18nSwitcher.tsx","../src/components/I18nGroup.tsx","../src/router/adapter.tsx"],"sourcesContent":["import { createSignal, type Accessor, type Setter } from 'solid-js'\nimport { createStore, type SetStoreFunction } from 'solid-js/store'\nimport { BaseI18n, type TranslationCache } from '@i18n-micro/core'\nimport type { Translations, PluralFunc } from '@i18n-micro/types'\n\nexport interface SolidI18nOptions {\n locale: string\n fallbackLocale?: string\n messages?: Record<string, Translations>\n plural?: PluralFunc\n missingWarn?: boolean\n missingHandler?: (locale: string, key: string, routeName: string) => void\n}\n\n/**\n * SolidJS I18n Adapter\n *\n * Provides a SolidJS-compatible i18n instance that uses the shared core logic.\n * Uses createSignal for locale/route reactivity and createStore for translation cache.\n */\nexport class SolidI18n extends BaseI18n {\n // Реактивные примитивы Solid\n private _locale: Accessor<string>\n private _setLocale: Setter<string>\n private _fallbackLocale: Accessor<string>\n private _currentRoute: Accessor<string>\n private _setRoute: Setter<string>\n\n // Store для кэша.\n // Мы используем createStore для глубокой реактивности, чтобы при подгрузке\n // частичных переводов (mergeTranslation) интерфейс обновлялся.\n public readonly cacheStore: {\n general: Record<string, Translations>\n route: Record<string, Translations>\n }\n\n private setCacheStore: SetStoreFunction<{\n general: Record<string, Translations>\n route: Record<string, Translations>\n }>\n\n // Слушатели для DevTools (аналог subscribe в React версии)\n private listeners = new Set<() => void>()\n\n constructor(options: SolidI18nOptions) {\n // 1. Инициализация реактивного хранилища\n // Создаем signals и store напрямую (без createRoot, так как это SolidJS, не Preact)\n const [locale, setLocale] = createSignal(options.locale)\n const [fallback] = createSignal(options.fallbackLocale || options.locale)\n const [route, setRoute] = createSignal('general')\n\n const [store, setStore] = createStore({\n general: {} as Record<string, Translations>,\n route: {} as Record<string, Translations>,\n })\n\n // 2. Адаптация для BaseI18n\n // BaseI18n ожидает RefLike объекты. В Solid Store работает как Proxy,\n // поэтому мы можем обернуть доступ к нему.\n const cacheAdapter: TranslationCache = {\n // Solid Store Proxy is compatible with reading objects\n generalLocaleCache: { value: store.general } as unknown as TranslationCache['generalLocaleCache'],\n routeLocaleCache: { value: store.route } as unknown as TranslationCache['routeLocaleCache'],\n dynamicTranslationsCaches: { value: [] },\n serverTranslationCache: { value: {} },\n }\n\n super({\n cache: cacheAdapter,\n plural: options.plural,\n missingWarn: options.missingWarn,\n missingHandler: options.missingHandler,\n })\n\n this._locale = locale\n this._setLocale = setLocale\n this._fallbackLocale = fallback\n this._currentRoute = route\n this._setRoute = setRoute\n\n this.cacheStore = store\n this.setCacheStore = setStore\n\n // Загрузка начальных сообщений\n if (options.messages) {\n for (const [lang, msgs] of Object.entries(options.messages)) {\n this.addTranslations(lang, msgs)\n }\n }\n }\n\n // --- Abstract Implementation ---\n\n public getLocale(): string {\n return this._locale()\n }\n\n public getFallbackLocale(): string {\n return this._fallbackLocale()\n }\n\n public getRoute(): string {\n return this._currentRoute()\n }\n\n // --- Setters ---\n\n public set locale(val: string) {\n this._setLocale(val)\n this.notifyListeners()\n }\n\n public get locale(): string {\n return this._locale()\n }\n\n // Публичный accessor для реактивности\n public get localeAccessor(): Accessor<string> {\n return this._locale\n }\n\n public get fallbackLocale(): string {\n return this._fallbackLocale()\n }\n\n public get currentRoute(): string {\n return this._currentRoute()\n }\n\n // Публичный accessor для реактивности\n public get routeAccessor(): Accessor<string> {\n return this._currentRoute\n }\n\n public setRoute(val: string): void {\n this._setRoute(val)\n this.notifyListeners()\n }\n\n // --- Overrides for Reactivity ---\n\n public addTranslations(locale: string, translations: Translations, merge = true): void {\n if (merge) {\n this.setCacheStore('general', locale, (prev: Translations | undefined) => ({\n ...(prev || {}),\n ...translations,\n }))\n }\n else {\n this.setCacheStore('general', locale, translations)\n }\n this.notifyListeners()\n }\n\n public addRouteTranslations(locale: string, routeName: string, translations: Translations, merge = true): void {\n const key = `${locale}:${routeName}`\n if (merge) {\n this.setCacheStore('route', key, (prev: Translations | undefined) => ({\n ...(prev || {}),\n ...translations,\n }))\n }\n else {\n this.setCacheStore('route', key, translations)\n }\n this.notifyListeners()\n }\n\n public override clearCache(): void {\n this.setCacheStore('general', {})\n this.setCacheStore('route', {})\n super.clearCache()\n this.notifyListeners()\n }\n\n public subscribe(cb: () => void): () => void {\n this.listeners.add(cb)\n return () => this.listeners.delete(cb)\n }\n\n private notifyListeners(): void {\n this.listeners.forEach((cb) => {\n cb()\n })\n }\n}\n\nexport function createI18n(options: SolidI18nOptions): SolidI18n {\n return new SolidI18n(options)\n}\n","import { createContext, useContext } from 'solid-js'\nimport type { SolidI18n } from './i18n'\nimport type { Locale } from '@i18n-micro/types'\nimport type { I18nRoutingStrategy } from './router/types'\n\n// Context keys (analogous to Vue's InjectionKey)\nexport const I18nContext = createContext<SolidI18n>()\nexport const I18nLocalesContext = createContext<Locale[]>()\nexport const I18nDefaultLocaleContext = createContext<string>()\nexport const I18nRouterContext = createContext<I18nRoutingStrategy | undefined>()\n\n// Helper hooks (analogous to Vue's inject)\nexport const useI18nContext = () => {\n const context = useContext(I18nContext)\n if (!context) {\n throw new Error('[i18n-micro] I18nContext not found. Make sure I18nProvider is used.')\n }\n return context\n}\n\nexport const useI18nLocales = () => {\n const context = useContext(I18nLocalesContext)\n if (!context) {\n throw new Error('[i18n-micro] I18nLocalesContext not found. Make sure I18nLocalesContext is provided.')\n }\n return context\n}\n\nexport const useI18nDefaultLocale = () => {\n const context = useContext(I18nDefaultLocaleContext)\n if (!context) {\n throw new Error('[i18n-micro] I18nDefaultLocaleContext not found. Make sure I18nDefaultLocaleContext is provided.')\n }\n return context\n}\n\nexport const useI18nRouter = () => {\n return useContext(I18nRouterContext)\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport type { ParentComponent, JSX } from 'solid-js'\nimport type { SolidI18n } from './i18n'\nimport type { Locale } from '@i18n-micro/types'\nimport { I18nContext, I18nLocalesContext, I18nDefaultLocaleContext, I18nRouterContext } from './injection'\nimport type { I18nRoutingStrategy } from './router/types'\n\nexport interface I18nProviderProps {\n i18n: SolidI18n\n locales?: Locale[]\n defaultLocale?: string\n routingStrategy?: I18nRoutingStrategy\n}\n\nexport const I18nProvider: ParentComponent<I18nProviderProps> = (props): JSX.Element => {\n const children = props.children as JSX.Element\n return (\n // @ts-expect-error - Provider components type conflict with Vue JSX\n <I18nContext.Provider value={props.i18n}>\n {props.locales && (\n // @ts-expect-error - Provider components type conflict with Vue JSX\n <I18nLocalesContext.Provider value={props.locales}>\n {props.defaultLocale && (\n // @ts-expect-error - Provider components type conflict with Vue JSX\n <I18nDefaultLocaleContext.Provider value={props.defaultLocale}>\n {props.routingStrategy && (\n // @ts-expect-error - Provider components type conflict with Vue JSX\n <I18nRouterContext.Provider value={props.routingStrategy}>\n {children}\n </I18nRouterContext.Provider>\n )}\n {!props.routingStrategy && children}\n </I18nDefaultLocaleContext.Provider>\n )}\n {!props.defaultLocale && children}\n </I18nLocalesContext.Provider>\n )}\n {!props.locales && children}\n </I18nContext.Provider>\n ) as unknown as JSX.Element\n}\n\n// Keep useI18nContext for backward compatibility\nexport { useI18nContext } from './injection'\n","import { createMemo } from 'solid-js'\nimport { useI18nContext, useI18nLocales, useI18nDefaultLocale, useI18nRouter } from './injection'\nimport type { Locale } from '@i18n-micro/types'\n\nexport interface UseI18nOptions {\n locales?: Locale[]\n defaultLocale?: string\n}\n\nexport function useI18n(options?: UseI18nOptions) {\n const i18n = useI18nContext()\n const router = useI18nRouter()\n const injectedLocales = useI18nLocales()\n const injectedDefaultLocale = useI18nDefaultLocale()\n\n const locales = options?.locales || injectedLocales\n const defaultLocale = options?.defaultLocale || injectedDefaultLocale\n\n const resolveLocalePath = (to: string | { path?: string }, localeCode?: string): string | { path?: string } => {\n if (!router?.resolvePath) {\n return to\n }\n return router.resolvePath(to, localeCode || i18n.getLocale())\n }\n\n return {\n // Direct access to instance\n instance: i18n,\n\n // Locale (reactive) - используем accessor для отслеживания изменений\n locale: createMemo(() => i18n.localeAccessor()),\n\n // Locale helpers\n getLocales: () => locales,\n defaultLocale: () => defaultLocale,\n getLocaleName: () => {\n // Используем accessor для реактивности\n const current = locales.find(l => l.code === i18n.localeAccessor())\n return current?.displayName || null\n },\n\n // Routing helpers\n localeRoute: resolveLocalePath,\n localePath: (to: string | { path?: string }, locale?: string): string => {\n const res = resolveLocalePath(to, locale)\n return typeof res === 'string' ? res : (res.path || '/')\n },\n switchLocale: (newLocale: string) => {\n i18n.locale = newLocale\n if (router) {\n const currentPath = router.getCurrentPath()\n const newPath = resolveLocalePath(currentPath, newLocale)\n router.push(typeof newPath === 'string' ? { path: newPath } : { path: newPath.path || '/' })\n }\n },\n\n // Translation methods (delegate to instance)\n t: i18n.t.bind(i18n),\n ts: i18n.ts.bind(i18n),\n tc: i18n.tc.bind(i18n),\n tn: i18n.tn.bind(i18n),\n td: i18n.td.bind(i18n),\n tdr: i18n.tdr.bind(i18n),\n has: i18n.has.bind(i18n),\n\n // Route management\n setRoute: i18n.setRoute.bind(i18n),\n getRoute: i18n.getRoute.bind(i18n),\n getLocale: () => i18n.getLocale(),\n\n // Translation management\n addTranslations: i18n.addTranslations.bind(i18n),\n addRouteTranslations: i18n.addRouteTranslations.bind(i18n),\n clearCache: i18n.clearCache.bind(i18n),\n }\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport { splitProps, createMemo, type Component, type JSX } from 'solid-js'\nimport { Dynamic } from 'solid-js/web'\nimport { useI18nContext } from '../injection'\nimport type { TranslationKey, PluralFunc } from '@i18n-micro/types'\n\ninterface I18nTProps extends JSX.HTMLAttributes<HTMLElement> {\n keypath: TranslationKey\n params?: Record<string, string | number | boolean>\n tag?: string\n plural?: number | string\n defaultValue?: string\n html?: boolean\n hideIfEmpty?: boolean\n customPluralRule?: PluralFunc\n number?: number | string\n date?: Date | string | number\n relativeDate?: Date | string | number\n}\n\nexport const I18nT: Component<I18nTProps> = (props): JSX.Element => {\n const i18n = useI18nContext()\n const [local, others] = splitProps(props, [\n 'keypath',\n 'params',\n 'tag',\n 'plural',\n 'defaultValue',\n 'html',\n 'hideIfEmpty',\n 'customPluralRule',\n 'number',\n 'date',\n 'relativeDate',\n ])\n\n // Используем createMemo для реактивности (отслеживает изменения локали и роута)\n // В Solid мемо автоматически отслеживает зависимости при использовании в JSX\n const translation = createMemo(() => {\n // Отслеживаем изменения локали и роута через accessors\n const locale = i18n.localeAccessor()\n const route = i18n.routeAccessor()\n\n // Handle number formatting\n if (local.number !== undefined) {\n const numberValue = Number(local.number)\n const formattedNumber = i18n.tn(numberValue)\n const result = i18n.t(local.keypath, { number: formattedNumber, ...(local.params || {}) }, undefined, route)\n return typeof result === 'string' ? result : String(result)\n }\n\n // Handle date formatting\n if (local.date !== undefined) {\n const formattedDate = i18n.td(local.date)\n const result = i18n.t(local.keypath, { date: formattedDate, ...(local.params || {}) }, undefined, route)\n return typeof result === 'string' ? result : String(result)\n }\n\n // Handle relative date formatting\n if (local.relativeDate !== undefined) {\n const formattedRelativeDate = i18n.tdr(local.relativeDate)\n const result = i18n.t(local.keypath, { relativeDate: formattedRelativeDate, ...(local.params || {}) }, undefined, route)\n return typeof result === 'string' ? result : String(result)\n }\n\n // Handle pluralization\n if (local.plural !== undefined) {\n const count = Number.parseInt(local.plural.toString())\n if (local.customPluralRule) {\n const translationResult = local.customPluralRule(\n local.keypath,\n count,\n local.params || {},\n locale,\n (k: TranslationKey, p?: Record<string, string | number | boolean>, dv?: string) => i18n.t(k, p, dv, route),\n )\n return translationResult || ''\n }\n else {\n return i18n.tc(local.keypath, { count, ...(local.params || {}) }, local.defaultValue)\n }\n }\n\n // Regular translation\n const translationResult = (i18n.t(local.keypath, local.params, local.defaultValue, route) ?? '').toString()\n\n if (local.hideIfEmpty && !translationResult.trim()) {\n return local.defaultValue || ''\n }\n\n return translationResult\n })\n\n // Если html=true, используем innerHTML и не рендерим children\n if (local.html) {\n return (\n // @ts-expect-error - Dynamic component type conflict with Vue JSX\n <Dynamic\n component={local.tag || 'span'}\n {...(others as unknown as Record<string, unknown>)}\n innerHTML={translation()}\n />\n ) as unknown as JSX.Element\n }\n\n // Если html=false, рендерим как текст (Solid автоматически экранирует HTML)\n const translationValue = translation()\n if (local.hideIfEmpty && !translationValue.trim()) {\n if (local.defaultValue) {\n return (\n <Dynamic\n component={local.tag || 'span'}\n {...(others as unknown as Record<string, unknown>)}\n >\n {local.defaultValue}\n </Dynamic>\n ) as unknown as JSX.Element\n }\n return null as unknown as JSX.Element\n }\n\n return (\n // @ts-expect-error - Dynamic component type conflict with Vue JSX\n <Dynamic\n component={local.tag || 'span'}\n {...(others as unknown as Record<string, unknown>)}\n >\n {translationValue}\n </Dynamic>\n ) as unknown as JSX.Element\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport { splitProps, createMemo, type Accessor, type Component, type JSX } from 'solid-js'\nimport { useI18nRouter, useI18nContext } from '../injection'\nimport type { I18nRoutingStrategy } from '../router/types'\n\ninterface I18nLinkProps extends JSX.AnchorHTMLAttributes<HTMLAnchorElement> {\n to: string | { path?: string }\n localeRoute?: (to: string | { path?: string }, locale?: string) => string | { path?: string }\n activeStyle?: JSX.CSSProperties\n}\n\nexport const I18nLink: Component<I18nLinkProps> = (props): JSX.Element => {\n const router = useI18nRouter()\n const i18n = useI18nContext()\n // Разделяем пропсы: явно выделяем style, чтобы объединить его с activeStyle\n const [local, others] = splitProps(props, ['to', 'localeRoute', 'activeStyle', 'style', 'children'])\n\n // 1. Получаем accessor для текущего пути из роутера\n const extendedRouter = router as I18nRoutingStrategy & { getCurrentPathAccessor?: Accessor<string> }\n const pathnameAccessor = extendedRouter?.getCurrentPathAccessor\n\n // 2. Вычисление целевого пути (href) - реактивно отслеживает изменения локали\n const targetPath = createMemo(() => {\n // Используем реактивный accessor для отслеживания изменений локали\n const currentLocale = i18n.localeAccessor()\n let result: string\n if (local.localeRoute) {\n const res = local.localeRoute(local.to, currentLocale)\n result = typeof res === 'string' ? res : res?.path || '/'\n }\n else if (router?.resolvePath) {\n const res = router.resolvePath(local.to, currentLocale)\n result = typeof res === 'string' ? res : (res?.path || '/')\n }\n else if (typeof local.to === 'string') {\n result = local.to\n }\n else {\n result = (local.to as { path?: string })?.path || '/'\n }\n return result\n })\n\n // 3. Проверка на внешнюю ссылку\n const isExternal = createMemo(() => {\n if (typeof local.to === 'string') {\n return /^(?:https?:\\/\\/|\\/\\/|[a-zA-Z0-9-]+\\.[a-zA-Z]{2,})|tel:|mailto:/.test(local.to)\n }\n return false\n })\n\n // 4. Вычисление активного состояния\n // Важно: вызываем pathnameAccessor() внутри createMemo для правильного отслеживания изменений\n const isActive = createMemo(() => {\n if (isExternal()) {\n return false\n }\n\n // Получаем текущий путь - вызываем accessor внутри createMemo для реактивности\n const current = pathnameAccessor\n ? pathnameAccessor() // Вызов accessor внутри createMemo отслеживает изменения\n : (router ? router.getCurrentPath() : (typeof window !== 'undefined' ? window.location.pathname : '/'))\n const target = targetPath()\n\n // Нормализация для сравнения (убираем слэш в конце, если это не корень)\n const normCurrent = current === '/' ? '/' : current.replace(/\\/$/, '')\n const normTarget = target === '/' ? '/' : target.replace(/\\/$/, '')\n\n return normCurrent === normTarget\n })\n\n // 5. Объединение стилей - используем isActive напрямую для реактивности\n const mergedStyle = createMemo(() => {\n const baseStyle = local.style || {}\n // Вызываем isActive() внутри createMemo для отслеживания изменений\n const active = isActive()\n const activeStyle = active ? (local.activeStyle || {}) : {}\n\n // SolidJS умеет работать с объектами стилей корректно при слиянии\n return {\n ...(typeof baseStyle === 'object' ? baseStyle : {}),\n ...(typeof activeStyle === 'object' ? activeStyle : {}),\n } as JSX.CSSProperties\n })\n\n // Используем linkComponent из роутера, если доступен\n const LinkComponent = router?.linkComponent\n\n if (isExternal()) {\n return (\n // @ts-expect-error - Type conflict with Vue JSX\n <a\n href={typeof local.to === 'string' ? local.to : ''}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={mergedStyle()}\n {...(others as unknown as JSX.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {local.children}\n </a>\n ) as unknown as JSX.Element\n }\n\n // Если есть linkComponent из роутера (например, A из @solidjs/router), используем его\n if (LinkComponent) {\n return (\n // @ts-expect-error - Type conflict with router component types\n <LinkComponent\n href={targetPath()}\n style={mergedStyle()}\n {...(others as unknown as Record<string, unknown>)}\n >\n {local.children}\n </LinkComponent>\n ) as unknown as JSX.Element\n }\n\n // Fallback на нативный <a> с onClick обработчиком\n return (\n // @ts-expect-error - Type conflict with Vue JSX\n <a\n href={targetPath()}\n style={mergedStyle()}\n {...(others as unknown as JSX.AnchorHTMLAttributes<HTMLAnchorElement>)}\n onClick={(e: MouseEvent) => {\n if (router && !isExternal()) {\n e.preventDefault()\n router.push({ path: targetPath() })\n }\n }}\n >\n {local.children}\n </a>\n ) as unknown as JSX.Element\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport { createSignal, onMount, onCleanup, splitProps, type Accessor, type Component, type JSX } from 'solid-js'\nimport { createMemo } from 'solid-js'\nimport type { Locale } from '@i18n-micro/types'\nimport { useI18nContext, useI18nLocales, useI18nRouter } from '../injection'\nimport type { I18nRoutingStrategy } from '../router/types'\n\ninterface I18nSwitcherProps extends JSX.HTMLAttributes<HTMLDivElement> {\n locales?: Locale[]\n currentLocale?: string | (() => string)\n getLocaleName?: () => string | null\n switchLocale?: (locale: string) => void\n localeRoute?: (to: string | { path?: string }, locale?: string) => string | { path?: string }\n customLabels?: Record<string, string>\n customWrapperStyle?: JSX.CSSProperties\n customButtonStyle?: JSX.CSSProperties\n customDropdownStyle?: JSX.CSSProperties\n customItemStyle?: JSX.CSSProperties\n customLinkStyle?: JSX.CSSProperties\n customActiveLinkStyle?: JSX.CSSProperties\n customDisabledLinkStyle?: JSX.CSSProperties\n customIconStyle?: JSX.CSSProperties\n}\n\nexport const I18nSwitcher: Component<I18nSwitcherProps> = (props): JSX.Element => {\n const i18n = useI18nContext()\n const router = useI18nRouter()\n const injectedLocales = useI18nLocales()\n\n const [local, others] = splitProps(props, [\n 'locales',\n 'currentLocale',\n 'getLocaleName',\n 'switchLocale',\n 'localeRoute',\n 'customLabels',\n 'customWrapperStyle',\n 'customButtonStyle',\n 'customDropdownStyle',\n 'customItemStyle',\n 'customLinkStyle',\n 'customActiveLinkStyle',\n 'customDisabledLinkStyle',\n 'customIconStyle',\n ])\n\n const [dropdownOpen, setDropdownOpen] = createSignal(false)\n let wrapperRef: HTMLDivElement | undefined\n\n const locales = createMemo(() => local.locales || injectedLocales || [])\n const currentLocale = createMemo(() => {\n if (local.currentLocale !== undefined) {\n return typeof local.currentLocale === 'function' ? local.currentLocale() : local.currentLocale\n }\n // Используем реактивный accessor для отслеживания изменений\n return i18n.localeAccessor()\n })\n const currentLocaleName = createMemo(() => {\n if (local.getLocaleName) {\n return local.getLocaleName() || null\n }\n // Используем реактивный accessor для отслеживания изменений\n const current = locales().find(l => l.code === i18n.localeAccessor())\n return current?.displayName || null\n })\n\n const toggleDropdown = (event?: Event) => {\n if (event) {\n event.stopPropagation()\n event.preventDefault()\n }\n setDropdownOpen(!dropdownOpen())\n }\n\n const localeLabel = (localeItem: Locale): string => {\n const current = local.customLabels?.[localeItem.code] || localeItem.displayName\n return current || localeItem.code\n }\n\n const currentLocaleLabel = createMemo(() => {\n const current = locales().find(l => l.code === currentLocale())\n return current ? localeLabel(current) : (currentLocaleName() || currentLocale())\n })\n\n const handleSwitchLocale = async (code: string) => {\n setDropdownOpen(false)\n\n if (local.switchLocale) {\n local.switchLocale(code)\n return\n }\n\n i18n.locale = code\n\n if (!router) {\n return\n }\n\n // Используем accessor напрямую, если доступен, иначе fallback на getCurrentPath()\n const extendedRouter = router as I18nRoutingStrategy & { getCurrentPathAccessor?: Accessor<string> }\n const currentPath = extendedRouter.getCurrentPathAccessor ? extendedRouter.getCurrentPathAccessor() : router.getCurrentPath()\n const newPath = local.localeRoute\n ? (() => {\n const res = local.localeRoute(currentPath, code)\n return typeof res === 'string' ? res : (res.path || '/')\n })()\n : (router?.resolvePath\n ? (() => {\n const res = router.resolvePath(currentPath, code)\n return typeof res === 'string' ? res : (res.path || '/')\n })()\n : currentPath)\n\n router.push({ path: newPath })\n }\n\n // Default Styles\n const wrapperStyle: JSX.CSSProperties = {\n 'position': 'relative',\n 'display': 'inline-block',\n 'vertical-align': 'middle',\n }\n\n const buttonStyle: JSX.CSSProperties = {\n 'padding': '4px 12px',\n 'font-size': '16px',\n 'cursor': 'pointer',\n 'background-color': '#fff',\n 'border': '1px solid #333',\n 'transition': 'background-color 0.3s ease',\n 'display': 'flex',\n 'align-items': 'center',\n 'justify-content': 'space-between',\n }\n\n const dropdownStyle: JSX.CSSProperties = {\n 'position': 'absolute',\n 'top': '100%',\n 'left': '0',\n 'z-index': 1000,\n 'background-color': '#fff',\n 'border': '1px solid #333',\n 'list-style': 'none',\n 'padding': '0',\n 'margin': '4px 0 0 0',\n 'min-width': '150px',\n 'box-shadow': '0 2px 8px rgba(0,0,0,0.15)',\n }\n\n const itemStyle: JSX.CSSProperties = {\n margin: '0',\n padding: '0',\n }\n\n const linkStyle: JSX.CSSProperties = {\n 'display': 'block',\n 'padding': '8px 12px',\n 'color': '#333',\n 'text-decoration': 'none',\n 'transition': 'background-color 0.3s ease',\n 'cursor': 'pointer',\n }\n\n const activeLinkStyle: JSX.CSSProperties = {\n 'font-weight': 'bold',\n 'color': '#007bff',\n }\n\n const iconStyle: JSX.CSSProperties = {\n 'margin-left': '8px',\n 'display': 'inline-block',\n 'transition': 'transform 0.3s ease',\n }\n\n const openIconStyle: JSX.CSSProperties = {\n transform: 'rotate(180deg)',\n }\n\n const handleClickOutside = (event: MouseEvent) => {\n if (!dropdownOpen()) return\n\n const target = event.target as HTMLElement\n if (!target || !wrapperRef) return\n\n const isClickInside = wrapperRef.contains(target)\n const isButtonClick = target.closest('.i18n-switcher-button') !== null\n\n if (!isClickInside && !isButtonClick) {\n setDropdownOpen(false)\n }\n }\n\n onMount(() => {\n document.addEventListener('click', handleClickOutside)\n })\n\n onCleanup(() => {\n document.removeEventListener('click', handleClickOutside)\n })\n\n return (\n <div\n // @ts-expect-error - ref type conflict with Vue JSX\n ref={(el: HTMLDivElement) => { wrapperRef = el }}\n class=\"i18n-switcher-wrapper\"\n style={{ ...wrapperStyle, ...local.customWrapperStyle }}\n {...(others as unknown as JSX.HTMLAttributes<HTMLDivElement>)}\n >\n <button\n type=\"button\"\n class=\"i18n-switcher-button\"\n style={{ ...buttonStyle, ...local.customButtonStyle }}\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n toggleDropdown(e)\n }}\n aria-haspopup=\"true\"\n aria-expanded={dropdownOpen()}\n >\n <span>{currentLocaleLabel()}</span>\n <span\n style={{\n ...iconStyle,\n ...(dropdownOpen() ? openIconStyle : {}),\n ...local.customIconStyle,\n }}\n >\n ▼\n </span>\n </button>\n\n {dropdownOpen() && (\n <ul\n class=\"i18n-switcher-dropdown\"\n style={{ ...dropdownStyle, ...local.customDropdownStyle }}\n >\n {locales().map((localeItem) => {\n const isActive = localeItem.code === currentLocale()\n // Используем accessor для реактивного отслеживания пути\n const extendedRouter = router as I18nRoutingStrategy & { getCurrentPathAccessor?: Accessor<string> }\n const currentPath = extendedRouter?.getCurrentPathAccessor\n ? extendedRouter.getCurrentPathAccessor()\n : (router?.getCurrentPath() || (typeof window !== 'undefined' ? window.location.pathname : '/'))\n const result = local.localeRoute\n ? local.localeRoute(currentPath, localeItem.code)\n : (router?.resolvePath\n ? router.resolvePath(currentPath, localeItem.code)\n : currentPath)\n const routeTo = typeof result === 'string' ? result : (result?.path || '#')\n\n return (\n <li\n style={{ ...itemStyle, ...local.customItemStyle }}\n >\n <a\n class={`switcher-locale-${localeItem.code}`}\n href={typeof routeTo === 'string' ? routeTo : '#'}\n style={{\n ...linkStyle,\n ...(isActive ? activeLinkStyle : {}),\n ...local.customLinkStyle,\n ...(isActive ? local.customActiveLinkStyle : {}),\n }}\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n handleSwitchLocale(localeItem.code)\n }}\n >\n {localeLabel(localeItem)}\n </a>\n </li>\n )\n })}\n </ul>\n )}\n </div>\n ) as unknown as JSX.Element\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport { splitProps, type Component, type JSX } from 'solid-js'\nimport { useI18nContext } from '../injection'\nimport type { TranslationKey } from '@i18n-micro/types'\n\ninterface I18nGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {\n prefix: string\n groupClass?: string\n}\n\nexport const I18nGroup: Component<I18nGroupProps> = (props): JSX.Element => {\n const i18n = useI18nContext()\n const [local, others] = splitProps(props, ['prefix', 'groupClass'])\n\n const translate = (key: string, params?: Record<string, string | number | boolean>): string => {\n // Use type assertion for dynamic keys with prefix\n // The developer is responsible for ensuring the key exists\n const result = i18n.t(`${local.prefix}.${key}` as TranslationKey, params, undefined, i18n.getRoute())\n return typeof result === 'string' ? result : String(result)\n }\n\n return (\n // @ts-expect-error - Type conflict with Vue JSX in monorepo\n <div\n class={['i18n-group', local.groupClass].filter(Boolean).join(' ')}\n {...(others as unknown as JSX.HTMLAttributes<HTMLDivElement>)}\n >\n {typeof props.children === 'function'\n ? (props.children as (props: { prefix: string, t: (key: string, params?: Record<string, string | number | boolean>) => string }) => JSX.Element)({ prefix: local.prefix, t: translate })\n : props.children}\n </div>\n ) as unknown as JSX.Element\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-nocheck\nimport { createSignal, createEffect, type Accessor, type Component, type JSX } from 'solid-js'\nimport { A, type useNavigate, type Location } from '@solidjs/router'\nimport type { I18nRoutingStrategy } from './types'\nimport type { Locale } from '@i18n-micro/types'\n\ntype NavigateFunction = ReturnType<typeof useNavigate>\n\n/**\n * Factory for Solid Router adapter\n * Implements routing utilities for Solid Router\n * Uses @solidjs/router APIs for navigation and path resolution\n *\n * **IMPORTANT**: This function must be called inside a SolidJS component or reactive context\n * (e.g., inside a component function, not at module level). This is required because\n * `createSignal` and `createEffect` need to be within a reactive owner context.\n *\n * @example\n * ```tsx\n * const RouterRoot: Component = () => {\n * const navigate = useNavigate()\n * const location = useLocation()\n * const routingStrategy = createSolidRouterAdapter(\n * locales,\n * defaultLocale,\n * navigate,\n * location,\n * )\n * // ...\n * }\n * ```\n *\n * @param locales - Array of locale configurations\n * @param defaultLocale - Default locale code\n * @param navigate - Navigation function from @solidjs/router's useNavigate hook\n * @param location - Location object from @solidjs/router's useLocation hook\n * @returns I18nRoutingStrategy with reactive pathname accessor\n */\nexport function createSolidRouterAdapter(\n locales: Locale[],\n defaultLocale: string,\n navigate: NavigateFunction,\n location: Location,\n): I18nRoutingStrategy & { getCurrentPathAccessor: Accessor<string> } {\n const localeCodes = locales.map(loc => loc.code)\n\n // Create signal to track pathname changes\n // NOTE: This requires a reactive context (component/effect), so this function\n // must be called inside a component, not at module level\n const [pathname, setPathname] = createSignal(location.pathname)\n\n // Track location.pathname changes\n // NOTE: createEffect requires a reactive owner, so this function must be called\n // inside a component or runWithOwner context\n createEffect(() => {\n setPathname(location.pathname)\n })\n\n const resolvePath = (to: string | { path?: string }, locale: string): string | { path?: string } => {\n const path = typeof to === 'string' ? to : (to.path || '/')\n const pathSegments = path.split('/').filter(Boolean)\n\n if (pathSegments.length > 0 && localeCodes.includes(pathSegments[0])) {\n pathSegments.shift()\n }\n\n const cleanPath = '/' + pathSegments.join('/')\n return locale === defaultLocale ? cleanPath : `/${locale}${cleanPath === '/' ? '' : cleanPath}`\n }\n\n return {\n getCurrentPath: () => pathname(), // Returns current value for compatibility\n getCurrentPathAccessor: pathname, // Returns accessor for reactivity\n\n push: (target: { path: string }) => {\n // Use navigate from @solidjs/router\n navigate(target.path)\n },\n\n replace: (target: { path: string }) => {\n // Use navigate with replace option\n navigate(target.path, { replace: true })\n },\n\n resolvePath: (to: string | { path?: string }, locale: string) => resolvePath(to, locale),\n\n getRoute: () => ({\n fullPath: pathname(),\n query: {},\n }),\n\n // Use A component from @solidjs/router\n linkComponent: ((props: { href: string, children?: JSX.Element, class?: string, style?: JSX.CSSProperties, [key: string]: unknown }) => {\n const { href, children, class: className, style, ...restProps } = props\n return (\n <A\n href={href}\n class={className}\n style={style}\n {...restProps}\n >\n {children}\n </A>\n ) as unknown as JSX.Element\n }) as unknown as Component<{\n href: string\n children?: JSX.Element\n style?: JSX.CSSProperties\n class?: string\n [key: string]: unknown\n }>,\n }\n}\n"],"names":["SolidI18n","BaseI18n","options","locale","setLocale","createSignal","fallback","route","setRoute","store","setStore","createStore","cacheAdapter","lang","msgs","val","translations","merge","prev","routeName","key","cb","createI18n","I18nContext","createContext","I18nLocalesContext","I18nDefaultLocaleContext","I18nRouterContext","useI18nContext","context","useContext","useI18nLocales","useI18nDefaultLocale","useI18nRouter","I18nProvider","props","children","_$createComponent","Provider","value","i18n","_$memo","locales","defaultLocale","routingStrategy","useI18n","router","injectedLocales","injectedDefaultLocale","resolveLocalePath","to","localeCode","createMemo","l","res","newLocale","currentPath","newPath","I18nT","local","others","splitProps","translation","localeAccessor","routeAccessor","number","undefined","numberValue","Number","formattedNumber","tn","result","t","keypath","params","String","date","formattedDate","td","relativeDate","formattedRelativeDate","tdr","plural","count","parseInt","toString","customPluralRule","k","p","dv","tc","defaultValue","translationResult","hideIfEmpty","trim","html","Dynamic","_$mergeProps","component","tag","innerHTML","translationValue","I18nLink","pathnameAccessor","getCurrentPathAccessor","targetPath","currentLocale","localeRoute","path","resolvePath","isExternal","test","isActive","current","getCurrentPath","window","location","pathname","target","normCurrent","replace","normTarget","mergedStyle","baseStyle","style","activeStyle","LinkComponent","linkComponent","_el$","_tmpl$","_$spread","href","_$insert","_el$2","_tmpl$2","onClick","e","preventDefault","push","I18nSwitcher","dropdownOpen","setDropdownOpen","wrapperRef","currentLocaleName","getLocaleName","find","code","displayName","toggleDropdown","event","stopPropagation","localeLabel","localeItem","customLabels","currentLocaleLabel","handleSwitchLocale","switchLocale","extendedRouter","wrapperStyle","buttonStyle","dropdownStyle","itemStyle","margin","padding","linkStyle","activeLinkStyle","iconStyle","openIconStyle","transform","handleClickOutside","isClickInside","contains","isButtonClick","closest","onMount","document","addEventListener","onCleanup","removeEventListener","firstChild","_el$3","_el$4","nextSibling","_$use","el","customWrapperStyle","$$click","_c$","_el$5","map","routeTo","_el$6","_tmpl$3","_el$7","_$setAttribute","_$effect","_p$","_v$4","customItemStyle","_v$5","_v$6","customLinkStyle","customActiveLinkStyle","_$style","_$className","a","_$p","customDropdownStyle","_v$","customButtonStyle","_v$2","_v$3","customIconStyle","_$delegateEvents","I18nGroup","translate","prefix","getRoute","groupClass","filter","Boolean","join","createSolidRouterAdapter","navigate","localeCodes","loc","setPathname","createEffect","pathSegments","split","length","includes","shift","cleanPath","fullPath","query","class","className","restProps","A"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@i18n-micro/solid",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.cjs",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.cjs"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"peerDependencies": {
|
|
22
|
+
"solid-js": "^1.8.0",
|
|
23
|
+
"@solidjs/router": "^0.15.4"
|
|
24
|
+
},
|
|
25
|
+
"peerDependenciesMeta": {
|
|
26
|
+
"solid-js": {
|
|
27
|
+
"optional": false
|
|
28
|
+
},
|
|
29
|
+
"@solidjs/router": {
|
|
30
|
+
"optional": true
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@i18n-micro/types": "1.0.16",
|
|
35
|
+
"@i18n-micro/core": "1.0.28"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/jest": "^29.5.14",
|
|
39
|
+
"jest": "^29.7.0",
|
|
40
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
41
|
+
"solid-js": "^1.9.10",
|
|
42
|
+
"ts-jest": "^29.4.6",
|
|
43
|
+
"vite": "^7.2.7",
|
|
44
|
+
"vite-plugin-dts": "^4.5.4",
|
|
45
|
+
"vite-plugin-solid": "^2.11.10"
|
|
46
|
+
},
|
|
47
|
+
"scripts": {
|
|
48
|
+
"build": "vite build",
|
|
49
|
+
"dev": "cd playground && vite",
|
|
50
|
+
"test": "jest",
|
|
51
|
+
"typecheck": "tsc --noEmit"
|
|
52
|
+
}
|
|
53
|
+
}
|