@semiont/frontend 0.4.9 → 0.4.11

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,"file":"routing-nZgBtxly.js","sources":["../../src/i18n/routing.tsx"],"sourcesContent":["/**\n * Routing abstraction layer — React Router implementation\n *\n * Replaces next-intl/navigation. All call sites import from @/i18n/routing\n * and do not need to change when the underlying router changes.\n *\n * Key behaviours:\n * - Link: locale-prefixed anchor rendered via react-router-dom\n * - useRouter: locale-aware push/replace/back\n * - usePathname: returns path WITHOUT locale prefix (matches next-intl behaviour)\n * - redirect: programmatic navigation without locale prefix\n */\n\nimport React from 'react';\nimport {\n Link as RouterLink,\n useNavigate,\n useLocation,\n useParams,\n Navigate,\n} from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { SUPPORTED_LOCALES, DEFAULT_LOCALE, isSupportedLocale } from './config';\n\nexport { SUPPORTED_LOCALES, DEFAULT_LOCALE };\n\n// ── Link ─────────────────────────────────────────────────────────────────────\n\ntype LinkProps = React.ComponentProps<typeof RouterLink>;\n\n/**\n * Locale-aware Link. Prepends the current locale to the href.\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n function Link({ to, ...props }, ref) {\n const { i18n } = useTranslation();\n const params = useParams<{ locale?: string }>();\n const locale = i18n.language || params.locale || DEFAULT_LOCALE;\n const target = typeof to === 'string' ? `/${locale}${to.startsWith('/') ? to : `/${to}`}` : to;\n return <RouterLink ref={ref} to={target} {...props} />;\n },\n);\n\n// ── useRouter ─────────────────────────────────────────────────────────────────\n\ntype RouterOptions = { locale?: string };\n\nexport function useRouter() {\n const navigate = useNavigate();\n const { i18n } = useTranslation();\n const params = useParams<{ locale?: string }>();\n\n function prefixLocale(path: string, locale?: string): string {\n const lang = locale || i18n.language || params.locale || DEFAULT_LOCALE;\n return `/${lang}${path.startsWith('/') ? path : `/${path}`}`;\n }\n\n return {\n push(path: string, options?: RouterOptions) {\n navigate(prefixLocale(path, options?.locale));\n },\n replace(path: string, options?: RouterOptions) {\n navigate(prefixLocale(path, options?.locale), { replace: true });\n },\n back() {\n navigate(-1);\n },\n forward() {\n navigate(1);\n },\n refresh() {\n window.location.reload();\n },\n prefetch(_path: string) {\n // No-op: Vite/React Router handles prefetching differently\n },\n };\n}\n\n// ── usePathname ───────────────────────────────────────────────────────────────\n\n/**\n * Returns the path WITHOUT the locale prefix, matching next-intl behaviour.\n * e.g. /en/know/discover → /know/discover\n */\nexport function usePathname(): string {\n const { pathname } = useLocation();\n // Strip leading /{locale}\n const match = pathname.match(/^\\/[a-z]{2}(\\/.*)?$/);\n if (match) {\n return match[1] ?? '/';\n }\n return pathname;\n}\n\n// ── redirect ─────────────────────────────────────────────────────────────────\n\n/**\n * Render a redirect component. Pass { href, locale } to redirect with locale,\n * or just a string href to redirect to an absolute path.\n */\nexport function redirect(target: string | { href: string; locale?: string }): React.ReactElement {\n const { i18n } = useTranslation();\n const locale = typeof target === 'string' ? (i18n.language || DEFAULT_LOCALE) : (target.locale || i18n.language || DEFAULT_LOCALE);\n const href = typeof target === 'string' ? target : target.href;\n const to = `/${locale}${href.startsWith('/') ? href : `/${href}`}`;\n return <Navigate to={to} replace />;\n}\n\n// ── useParams with locale ────────────────────────────────────────────────────\n\nexport function useLocale(): string {\n const params = useParams<{ locale?: string }>();\n const { i18n } = useTranslation();\n const localeFromParams = params.locale;\n if (localeFromParams && isSupportedLocale(localeFromParams)) {\n return localeFromParams;\n }\n return i18n.language || DEFAULT_LOCALE;\n}\n"],"names":["Link","React","to","props","ref","i18n","useTranslation","params","useParams","locale","DEFAULT_LOCALE","target","RouterLink","useRouter","navigate","useNavigate","prefixLocale","path","options","_path","usePathname","pathname","useLocation","match","useLocale","localeFromParams","isSupportedLocale"],"mappings":"8LAiCO,MAAMA,EAAOC,EAAM,WACxB,SAAc,CAAE,GAAAC,EAAI,GAAGC,CAAA,EAASC,EAAK,CACnC,KAAM,CAAE,KAAAC,CAAA,EAASC,EAAA,EACXC,EAASC,EAAA,EACTC,EAASJ,EAAK,UAAYE,EAAO,QAAUG,EAC3CC,EAAS,OAAOT,GAAO,SAAW,IAAIO,CAAM,GAAGP,EAAG,WAAW,GAAG,EAAIA,EAAK,IAAIA,CAAE,EAAE,GAAKA,EAC5F,aAAQU,EAAA,CAAW,IAAAR,EAAU,GAAIO,EAAS,GAAGR,EAAO,CACtD,CACF,EAMO,SAASU,GAAY,CAC1B,MAAMC,EAAWC,EAAA,EACX,CAAE,KAAAV,CAAA,EAASC,EAAA,EACXC,EAASC,EAAA,EAEf,SAASQ,EAAaC,EAAcR,EAAyB,CAE3D,MAAO,IADMA,GAAUJ,EAAK,UAAYE,EAAO,QAAUG,CAC1C,GAAGO,EAAK,WAAW,GAAG,EAAIA,EAAO,IAAIA,CAAI,EAAE,EAC5D,CAEA,MAAO,CACL,KAAKA,EAAcC,EAAyB,CAC1CJ,EAASE,EAAaC,EAAMC,GAAA,YAAAA,EAAS,MAAM,CAAC,CAC9C,EACA,QAAQD,EAAcC,EAAyB,CAC7CJ,EAASE,EAAaC,EAAMC,GAAA,YAAAA,EAAS,MAAM,EAAG,CAAE,QAAS,GAAM,CACjE,EACA,MAAO,CACLJ,EAAS,EAAE,CACb,EACA,SAAU,CACRA,EAAS,CAAC,CACZ,EACA,SAAU,CACR,OAAO,SAAS,OAAA,CAClB,EACA,SAASK,EAAe,CAExB,CAAA,CAEJ,CAQO,SAASC,GAAsB,CACpC,KAAM,CAAE,SAAAC,CAAA,EAAaC,EAAA,EAEfC,EAAQF,EAAS,MAAM,qBAAqB,EAClD,OAAIE,EACKA,EAAM,CAAC,GAAK,IAEdF,CACT,CAkBO,SAASG,GAAoB,CAClC,MAAMjB,EAASC,EAAA,EACT,CAAE,KAAAH,CAAA,EAASC,EAAA,EACXmB,EAAmBlB,EAAO,OAChC,OAAIkB,GAAoBC,EAAkBD,CAAgB,EACjDA,EAEFpB,EAAK,UAAYK,CAC1B"}
1
+ {"version":3,"file":"routing-nZgBtxly.js","sources":["../../src/i18n/routing.tsx"],"sourcesContent":["/**\n * Routing abstraction layer — React Router implementation\n *\n * All call sites import from @/i18n/routing and do not need to change\n * when the underlying router changes.\n *\n * Key behaviours:\n * - Link: locale-prefixed anchor rendered via react-router-dom\n * - useRouter: locale-aware push/replace/back\n * - usePathname: returns path WITHOUT locale prefix\n * - redirect: programmatic navigation without locale prefix\n */\n\nimport React from 'react';\nimport {\n Link as RouterLink,\n useNavigate,\n useLocation,\n useParams,\n Navigate,\n} from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { SUPPORTED_LOCALES, DEFAULT_LOCALE, isSupportedLocale } from './config';\n\nexport { SUPPORTED_LOCALES, DEFAULT_LOCALE };\n\n// ── Link ─────────────────────────────────────────────────────────────────────\n\ntype LinkProps = React.ComponentProps<typeof RouterLink>;\n\n/**\n * Locale-aware Link. Prepends the current locale to the href.\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n function Link({ to, ...props }, ref) {\n const { i18n } = useTranslation();\n const params = useParams<{ locale?: string }>();\n const locale = i18n.language || params.locale || DEFAULT_LOCALE;\n const target = typeof to === 'string' ? `/${locale}${to.startsWith('/') ? to : `/${to}`}` : to;\n return <RouterLink ref={ref} to={target} {...props} />;\n },\n);\n\n// ── useRouter ─────────────────────────────────────────────────────────────────\n\ntype RouterOptions = { locale?: string };\n\nexport function useRouter() {\n const navigate = useNavigate();\n const { i18n } = useTranslation();\n const params = useParams<{ locale?: string }>();\n\n function prefixLocale(path: string, locale?: string): string {\n const lang = locale || i18n.language || params.locale || DEFAULT_LOCALE;\n return `/${lang}${path.startsWith('/') ? path : `/${path}`}`;\n }\n\n return {\n push(path: string, options?: RouterOptions) {\n navigate(prefixLocale(path, options?.locale));\n },\n replace(path: string, options?: RouterOptions) {\n navigate(prefixLocale(path, options?.locale), { replace: true });\n },\n back() {\n navigate(-1);\n },\n forward() {\n navigate(1);\n },\n refresh() {\n window.location.reload();\n },\n prefetch(_path: string) {\n // No-op: Vite/React Router handles prefetching differently\n },\n };\n}\n\n// ── usePathname ───────────────────────────────────────────────────────────────\n\n/**\n * Returns the path WITHOUT the locale prefix.\n * e.g. /en/know/discover → /know/discover\n */\nexport function usePathname(): string {\n const { pathname } = useLocation();\n // Strip leading /{locale}\n const match = pathname.match(/^\\/[a-z]{2}(\\/.*)?$/);\n if (match) {\n return match[1] ?? '/';\n }\n return pathname;\n}\n\n// ── redirect ─────────────────────────────────────────────────────────────────\n\n/**\n * Render a redirect component. Pass { href, locale } to redirect with locale,\n * or just a string href to redirect to an absolute path.\n */\nexport function redirect(target: string | { href: string; locale?: string }): React.ReactElement {\n const { i18n } = useTranslation();\n const locale = typeof target === 'string' ? (i18n.language || DEFAULT_LOCALE) : (target.locale || i18n.language || DEFAULT_LOCALE);\n const href = typeof target === 'string' ? target : target.href;\n const to = `/${locale}${href.startsWith('/') ? href : `/${href}`}`;\n return <Navigate to={to} replace />;\n}\n\n// ── useParams with locale ────────────────────────────────────────────────────\n\nexport function useLocale(): string {\n const params = useParams<{ locale?: string }>();\n const { i18n } = useTranslation();\n const localeFromParams = params.locale;\n if (localeFromParams && isSupportedLocale(localeFromParams)) {\n return localeFromParams;\n }\n return i18n.language || DEFAULT_LOCALE;\n}\n"],"names":["Link","React","to","props","ref","i18n","useTranslation","params","useParams","locale","DEFAULT_LOCALE","target","RouterLink","useRouter","navigate","useNavigate","prefixLocale","path","options","_path","usePathname","pathname","useLocation","match","useLocale","localeFromParams","isSupportedLocale"],"mappings":"8LAiCO,MAAMA,EAAOC,EAAM,WACxB,SAAc,CAAE,GAAAC,EAAI,GAAGC,CAAA,EAASC,EAAK,CACnC,KAAM,CAAE,KAAAC,CAAA,EAASC,EAAA,EACXC,EAASC,EAAA,EACTC,EAASJ,EAAK,UAAYE,EAAO,QAAUG,EAC3CC,EAAS,OAAOT,GAAO,SAAW,IAAIO,CAAM,GAAGP,EAAG,WAAW,GAAG,EAAIA,EAAK,IAAIA,CAAE,EAAE,GAAKA,EAC5F,aAAQU,EAAA,CAAW,IAAAR,EAAU,GAAIO,EAAS,GAAGR,EAAO,CACtD,CACF,EAMO,SAASU,GAAY,CAC1B,MAAMC,EAAWC,EAAA,EACX,CAAE,KAAAV,CAAA,EAASC,EAAA,EACXC,EAASC,EAAA,EAEf,SAASQ,EAAaC,EAAcR,EAAyB,CAE3D,MAAO,IADMA,GAAUJ,EAAK,UAAYE,EAAO,QAAUG,CAC1C,GAAGO,EAAK,WAAW,GAAG,EAAIA,EAAO,IAAIA,CAAI,EAAE,EAC5D,CAEA,MAAO,CACL,KAAKA,EAAcC,EAAyB,CAC1CJ,EAASE,EAAaC,EAAMC,GAAA,YAAAA,EAAS,MAAM,CAAC,CAC9C,EACA,QAAQD,EAAcC,EAAyB,CAC7CJ,EAASE,EAAaC,EAAMC,GAAA,YAAAA,EAAS,MAAM,EAAG,CAAE,QAAS,GAAM,CACjE,EACA,MAAO,CACLJ,EAAS,EAAE,CACb,EACA,SAAU,CACRA,EAAS,CAAC,CACZ,EACA,SAAU,CACR,OAAO,SAAS,OAAA,CAClB,EACA,SAASK,EAAe,CAExB,CAAA,CAEJ,CAQO,SAASC,GAAsB,CACpC,KAAM,CAAE,SAAAC,CAAA,EAAaC,EAAA,EAEfC,EAAQF,EAAS,MAAM,qBAAqB,EAClD,OAAIE,EACKA,EAAM,CAAC,GAAK,IAEdF,CACT,CAkBO,SAASG,GAAoB,CAClC,MAAMjB,EAASC,EAAA,EACT,CAAE,KAAAH,CAAA,EAASC,EAAA,EACXmB,EAAmBlB,EAAO,OAChC,OAAIkB,GAAoBC,EAAkBD,CAAgB,EACjDA,EAEFpB,EAAK,UAAYK,CAC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@semiont/frontend",
3
- "version": "0.4.9",
3
+ "version": "0.4.11",
4
4
  "description": "Semiont frontend - pre-built Vite SPA with static file server",
5
5
  "main": "server.js",
6
6
  "bin": {