@better-i18n/use-intl 0.2.0 → 0.2.2
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/dist/components/locale-dropdown.d.ts +6 -1
- package/dist/components/locale-dropdown.d.ts.map +1 -1
- package/dist/components/locale-dropdown.js +52 -21
- package/dist/components/locale-dropdown.js.map +1 -1
- package/dist/context.d.ts +6 -19
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +6 -19
- package/dist/context.js.map +1 -1
- package/dist/hooks/useLocaleRouter.d.ts +9 -8
- package/dist/hooks/useLocaleRouter.d.ts.map +1 -1
- package/dist/hooks/useLocaleRouter.js +48 -17
- package/dist/hooks/useLocaleRouter.js.map +1 -1
- package/dist/hooks.d.ts +7 -18
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +8 -19
- package/dist/hooks.js.map +1 -1
- package/dist/provider.d.ts +29 -8
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +35 -20
- package/dist/provider.js.map +1 -1
- package/dist/types.d.ts +16 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -22,6 +22,8 @@ export interface LocaleDropdownProps {
|
|
|
22
22
|
showNativeName?: boolean;
|
|
23
23
|
/** Show locale code (e.g., "EN"). @default true */
|
|
24
24
|
showLocaleCode?: boolean;
|
|
25
|
+
/** Menu placement direction. "auto" detects available viewport space. @default "auto" */
|
|
26
|
+
placement?: "auto" | "top" | "bottom";
|
|
25
27
|
/** Custom render for the trigger button. */
|
|
26
28
|
renderTrigger?: (ctx: {
|
|
27
29
|
language: LanguageOption | undefined;
|
|
@@ -48,6 +50,9 @@ export interface LocaleDropdownProps {
|
|
|
48
50
|
* // Headless mode for full custom styling
|
|
49
51
|
* <LocaleDropdown variant="unstyled" className="my-dropdown" />
|
|
50
52
|
*
|
|
53
|
+
* // Force open upward (e.g., in a footer)
|
|
54
|
+
* <LocaleDropdown placement="top" />
|
|
55
|
+
*
|
|
51
56
|
* // Custom render
|
|
52
57
|
* <LocaleDropdown
|
|
53
58
|
* renderItem={({ language, isActive, flag, label }) => (
|
|
@@ -58,5 +63,5 @@ export interface LocaleDropdownProps {
|
|
|
58
63
|
* />
|
|
59
64
|
* ```
|
|
60
65
|
*/
|
|
61
|
-
export declare function LocaleDropdown({ variant, className, triggerClassName, menuClassName, showFlag, showNativeName, showLocaleCode, renderTrigger, renderItem, }: LocaleDropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
export declare function LocaleDropdown({ variant, className, triggerClassName, menuClassName, showFlag, showNativeName, showLocaleCode, placement: placementProp, renderTrigger, renderItem, }: LocaleDropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
62
67
|
//# sourceMappingURL=locale-dropdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale-dropdown.d.ts","sourceRoot":"","sources":["../../src/components/locale-dropdown.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"locale-dropdown.d.ts","sourceRoot":"","sources":["../../src/components/locale-dropdown.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAQf,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAyO3B,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,0IAA0I;IAC1I,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAChC,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mDAAmD;IACnD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACtC,4CAA4C;IAC5C,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;QACpB,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;QACrC,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;QAC1B,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,SAAS,CAAC;IAChB,wCAAwC;IACxC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,2BAA2B,KAAK,SAAS,CAAC;CAC9D;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,QAAe,EACf,cAAqB,EACrB,cAAqB,EACrB,SAAS,EAAE,aAAsB,EACjC,aAAa,EACb,UAAU,GACX,EAAE,mBAAmB,2CA0SrB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
4
|
+
import { useFloating, offset, flip, shift, autoUpdate, } from "@floating-ui/react";
|
|
4
5
|
import { getLanguageLabel, resolveFlag, } from "@better-i18n/core";
|
|
5
6
|
import { useLocaleRouter } from "../hooks/useLocaleRouter.js";
|
|
6
7
|
import { useLanguages } from "../hooks.js";
|
|
@@ -37,8 +38,19 @@ function FlagDisplay({ flag, label, }) {
|
|
|
37
38
|
}, "aria-hidden": "true", children: emoji }));
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
|
-
return (_jsx("span", { style: { color: "var(--better-locale-code-text,
|
|
41
|
+
return (_jsx("span", { style: { color: "var(--better-locale-code-text, var(--_bl-muted))" }, children: _jsx(GlobeIcon, {}) }));
|
|
41
42
|
}
|
|
43
|
+
// ─── Theme CSS ──────────────────────────────────────────────────────
|
|
44
|
+
/**
|
|
45
|
+
* Internal CSS custom properties (`--_bl-*`) provide dark-mode-aware
|
|
46
|
+
* defaults. Consumer-set `--better-locale-*` properties always win
|
|
47
|
+
* because the inline styles use them as the primary `var()` value.
|
|
48
|
+
*
|
|
49
|
+
* Supports: `.dark` class (Tailwind), `[data-theme="dark"]` attribute.
|
|
50
|
+
* Does NOT use `prefers-color-scheme` — dark mode must be explicit via
|
|
51
|
+
* site markup, so light-only sites aren't affected by OS dark mode.
|
|
52
|
+
*/
|
|
53
|
+
const LOCALE_DROPDOWN_CSS = `[data-better-locale-dropdown]{--_bl-text:#374151;--_bl-menu-bg:#fff;--_bl-border:#e5e7eb;--_bl-hover:#f3f4f6;--_bl-active:#f9fafb;--_bl-muted:#9ca3af;--_bl-shadow:0 4px 24px rgba(0,0,0,.12)}.dark [data-better-locale-dropdown],[data-theme=dark] [data-better-locale-dropdown]{--_bl-text:#d1d5db;--_bl-menu-bg:#1f2937;--_bl-border:#374151;--_bl-hover:#374151;--_bl-active:#374151;--_bl-muted:#6b7280;--_bl-shadow:0 4px 24px rgba(0,0,0,.4)}@keyframes better-locale-pulse{0%,100%{opacity:1}50%{opacity:.4}}`;
|
|
42
54
|
// ─── Styles ──────────────────────────────────────────────────────────
|
|
43
55
|
const styles = {
|
|
44
56
|
trigger: {
|
|
@@ -49,7 +61,7 @@ const styles = {
|
|
|
49
61
|
borderRadius: "var(--better-locale-trigger-radius, 8px)",
|
|
50
62
|
border: "var(--better-locale-trigger-border, 1px solid transparent)",
|
|
51
63
|
background: "var(--better-locale-trigger-bg, transparent)",
|
|
52
|
-
color: "var(--better-locale-text,
|
|
64
|
+
color: "var(--better-locale-text, var(--_bl-text))",
|
|
53
65
|
fontSize: 14,
|
|
54
66
|
fontWeight: 500,
|
|
55
67
|
cursor: "pointer",
|
|
@@ -62,16 +74,13 @@ const styles = {
|
|
|
62
74
|
cursor: "default",
|
|
63
75
|
},
|
|
64
76
|
menu: {
|
|
65
|
-
position: "absolute",
|
|
66
|
-
right: 0,
|
|
67
|
-
top: "calc(100% + 4px)",
|
|
68
77
|
minWidth: 200,
|
|
69
78
|
maxHeight: "70vh",
|
|
70
79
|
overflowY: "auto",
|
|
71
80
|
borderRadius: 12,
|
|
72
|
-
border: "1px solid var(--better-locale-border,
|
|
73
|
-
background: "var(--better-locale-menu-bg,
|
|
74
|
-
boxShadow: "
|
|
81
|
+
border: "1px solid var(--better-locale-border, var(--_bl-border))",
|
|
82
|
+
background: "var(--better-locale-menu-bg, var(--_bl-menu-bg))",
|
|
83
|
+
boxShadow: "var(--_bl-shadow)",
|
|
75
84
|
padding: 0,
|
|
76
85
|
zIndex: 50,
|
|
77
86
|
listStyle: "none",
|
|
@@ -85,7 +94,7 @@ const styles = {
|
|
|
85
94
|
padding: "8px 14px",
|
|
86
95
|
border: "none",
|
|
87
96
|
background: "transparent",
|
|
88
|
-
color: "var(--better-locale-text,
|
|
97
|
+
color: "var(--better-locale-text, var(--_bl-text))",
|
|
89
98
|
fontSize: 14,
|
|
90
99
|
cursor: "pointer",
|
|
91
100
|
transition: "background 0.1s",
|
|
@@ -94,10 +103,10 @@ const styles = {
|
|
|
94
103
|
lineHeight: 1.2,
|
|
95
104
|
},
|
|
96
105
|
itemActive: {
|
|
97
|
-
background: "var(--better-locale-active-bg,
|
|
106
|
+
background: "var(--better-locale-active-bg, var(--_bl-active))",
|
|
98
107
|
},
|
|
99
108
|
itemHovered: {
|
|
100
|
-
background: "var(--better-locale-hover-bg,
|
|
109
|
+
background: "var(--better-locale-hover-bg, var(--_bl-hover))",
|
|
101
110
|
},
|
|
102
111
|
label: {
|
|
103
112
|
flex: 1,
|
|
@@ -107,7 +116,7 @@ const styles = {
|
|
|
107
116
|
fontSize: 10,
|
|
108
117
|
fontFamily: "monospace",
|
|
109
118
|
textTransform: "uppercase",
|
|
110
|
-
color: "var(--better-locale-code-text,
|
|
119
|
+
color: "var(--better-locale-code-text, var(--_bl-muted))",
|
|
111
120
|
letterSpacing: "0.05em",
|
|
112
121
|
},
|
|
113
122
|
check: {
|
|
@@ -127,7 +136,7 @@ const styles = {
|
|
|
127
136
|
width: 20,
|
|
128
137
|
height: 18,
|
|
129
138
|
borderRadius: 3,
|
|
130
|
-
background: "var(--better-locale-border,
|
|
139
|
+
background: "var(--better-locale-border, var(--_bl-border))",
|
|
131
140
|
animation: "better-locale-pulse 1.5s ease-in-out infinite",
|
|
132
141
|
flexShrink: 0,
|
|
133
142
|
},
|
|
@@ -135,7 +144,7 @@ const styles = {
|
|
|
135
144
|
width: 56,
|
|
136
145
|
height: 18,
|
|
137
146
|
borderRadius: 4,
|
|
138
|
-
background: "var(--better-locale-border,
|
|
147
|
+
background: "var(--better-locale-border, var(--_bl-border))",
|
|
139
148
|
animation: "better-locale-pulse 1.5s ease-in-out infinite",
|
|
140
149
|
},
|
|
141
150
|
};
|
|
@@ -155,6 +164,9 @@ const styles = {
|
|
|
155
164
|
* // Headless mode for full custom styling
|
|
156
165
|
* <LocaleDropdown variant="unstyled" className="my-dropdown" />
|
|
157
166
|
*
|
|
167
|
+
* // Force open upward (e.g., in a footer)
|
|
168
|
+
* <LocaleDropdown placement="top" />
|
|
169
|
+
*
|
|
158
170
|
* // Custom render
|
|
159
171
|
* <LocaleDropdown
|
|
160
172
|
* renderItem={({ language, isActive, flag, label }) => (
|
|
@@ -165,13 +177,24 @@ const styles = {
|
|
|
165
177
|
* />
|
|
166
178
|
* ```
|
|
167
179
|
*/
|
|
168
|
-
export function LocaleDropdown({ variant = "styled", className, triggerClassName, menuClassName, showFlag = true, showNativeName = true, showLocaleCode = true, renderTrigger, renderItem, }) {
|
|
180
|
+
export function LocaleDropdown({ variant = "styled", className, triggerClassName, menuClassName, showFlag = true, showNativeName = true, showLocaleCode = true, placement: placementProp = "auto", renderTrigger, renderItem, }) {
|
|
169
181
|
const { locale, navigate, isReady } = useLocaleRouter();
|
|
170
182
|
const { languages, isLoading } = useLanguages();
|
|
171
183
|
const [isOpen, setIsOpen] = useState(false);
|
|
172
184
|
const [focusIndex, setFocusIndex] = useState(-1);
|
|
173
185
|
const containerRef = useRef(null);
|
|
174
186
|
const menuRef = useRef(null);
|
|
187
|
+
const { refs, floatingStyles, placement: resolvedPlacement } = useFloating({
|
|
188
|
+
open: isOpen,
|
|
189
|
+
strategy: "fixed",
|
|
190
|
+
placement: placementProp === "top" ? "top-end" : "bottom-end",
|
|
191
|
+
middleware: [
|
|
192
|
+
offset(4),
|
|
193
|
+
flip({ padding: 16 }),
|
|
194
|
+
shift({ padding: 8 }),
|
|
195
|
+
],
|
|
196
|
+
whileElementsMounted: autoUpdate,
|
|
197
|
+
});
|
|
175
198
|
const isStyled = variant === "styled";
|
|
176
199
|
const currentLanguage = useMemo(() => languages.find((l) => l.code === locale), [languages, locale]);
|
|
177
200
|
const currentLabel = currentLanguage
|
|
@@ -255,15 +278,20 @@ export function LocaleDropdown({ variant = "styled", className, triggerClassName
|
|
|
255
278
|
label: "",
|
|
256
279
|
}) }));
|
|
257
280
|
}
|
|
258
|
-
return (_jsxs("div", { "data-better-locale-dropdown": true, className: className, children: [_jsxs("div", { "aria-busy": "true", "data-better-locale-trigger": true, className: triggerClassName, style: isStyled ? styles.skeleton : undefined, children: [_jsx("span", { style: isStyled ? styles.skeletonFlag : undefined }), _jsx("span", { style: isStyled ? styles.skeletonText : undefined })] }), isStyled &&
|
|
281
|
+
return (_jsxs("div", { "data-better-locale-dropdown": true, className: className, children: [_jsxs("div", { "aria-busy": "true", "data-better-locale-trigger": true, className: triggerClassName, style: isStyled ? styles.skeleton : undefined, children: [_jsx("span", { style: isStyled ? styles.skeletonFlag : undefined }), _jsx("span", { style: isStyled ? styles.skeletonText : undefined })] }), isStyled && _jsx("style", { children: LOCALE_DROPDOWN_CSS })] }));
|
|
259
282
|
}
|
|
260
|
-
|
|
283
|
+
const handleTriggerClick = () => {
|
|
284
|
+
if (!canToggle)
|
|
285
|
+
return;
|
|
286
|
+
setIsOpen((prev) => !prev);
|
|
287
|
+
};
|
|
288
|
+
return (_jsxs("div", { ref: containerRef, "data-better-locale-dropdown": true, className: className, style: { position: "relative", display: "inline-block" }, children: [renderTrigger ? (_jsx("div", { ref: refs.setReference, onClick: handleTriggerClick, onKeyDown: handleKeyDown, role: "button", tabIndex: 0, "aria-haspopup": "listbox", "aria-expanded": isOpen, "data-better-locale-trigger": true, className: triggerClassName, children: renderTrigger({
|
|
261
289
|
language: currentLanguage,
|
|
262
290
|
isOpen,
|
|
263
291
|
isLoading: false,
|
|
264
292
|
flag: currentFlag,
|
|
265
293
|
label: currentLabel,
|
|
266
|
-
}) })) : (_jsxs("button", { type: "button", onClick:
|
|
294
|
+
}) })) : (_jsxs("button", { ref: refs.setReference, type: "button", onClick: handleTriggerClick, onKeyDown: handleKeyDown, "aria-haspopup": "listbox", "aria-expanded": isOpen, "aria-label": "Select language", disabled: !canToggle, "data-better-locale-trigger": true, className: triggerClassName, style: isStyled
|
|
267
295
|
? {
|
|
268
296
|
...styles.trigger,
|
|
269
297
|
...(!canToggle ? styles.triggerDisabled : {}),
|
|
@@ -271,8 +299,11 @@ export function LocaleDropdown({ variant = "styled", className, triggerClassName
|
|
|
271
299
|
: undefined, children: [showFlag && currentFlag && (_jsx(FlagDisplay, { flag: currentFlag, label: currentLabel })), showNativeName && _jsx("span", { children: currentLabel }), canToggle && (_jsx(ChevronDownIcon, { style: {
|
|
272
300
|
transition: "transform 0.2s",
|
|
273
301
|
transform: isOpen ? "rotate(180deg)" : "rotate(0deg)",
|
|
274
|
-
color: "var(--better-locale-code-text,
|
|
275
|
-
} }))] })), isOpen && canToggle && (_jsx("ul", { ref:
|
|
302
|
+
color: "var(--better-locale-code-text, var(--_bl-muted))",
|
|
303
|
+
} }))] })), isOpen && canToggle && (_jsx("ul", { ref: (node) => {
|
|
304
|
+
refs.setFloating(node);
|
|
305
|
+
menuRef.current = node;
|
|
306
|
+
}, role: "listbox", "aria-label": "Available languages", "data-better-locale-menu": true, "data-placement": resolvedPlacement.startsWith("top") ? "top" : "bottom", className: menuClassName, style: isStyled ? { ...styles.menu, ...floatingStyles } : floatingStyles, children: languages.map((language, index) => {
|
|
276
307
|
const label = getLanguageLabel(language);
|
|
277
308
|
const isActive = language.code === locale;
|
|
278
309
|
const isFocused = index === focusIndex;
|
|
@@ -293,6 +324,6 @@ export function LocaleDropdown({ variant = "styled", className, triggerClassName
|
|
|
293
324
|
...(isFocused ? styles.itemHovered : {}),
|
|
294
325
|
}
|
|
295
326
|
: undefined, children: [showFlag && _jsx(FlagDisplay, { flag: flag, label: label }), _jsx("span", { style: isStyled ? styles.label : undefined, children: showNativeName ? label : language.code.toUpperCase() }), showLocaleCode && (_jsx("span", { style: isStyled ? styles.code : undefined, children: language.code })), isActive && (_jsx("span", { style: isStyled ? styles.check : undefined, children: _jsx(CheckIcon, {}) }))] }, language.code));
|
|
296
|
-
}) })), isStyled &&
|
|
327
|
+
}) })), isStyled && _jsx("style", { children: LOCALE_DROPDOWN_CSS })] }));
|
|
297
328
|
}
|
|
298
329
|
//# sourceMappingURL=locale-dropdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale-dropdown.js","sourceRoot":"","sources":["../../src/components/locale-dropdown.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"locale-dropdown.js","sourceRoot":"","sources":["../../src/components/locale-dropdown.tsx"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts
CHANGED
|
@@ -6,38 +6,25 @@ export declare const BetterI18nContext: import("react").Context<BetterI18nContex
|
|
|
6
6
|
/**
|
|
7
7
|
* Hook to access Better i18n context
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* Provides locale state, language list, and `setLocale()` for switching.
|
|
10
|
+
* For higher-level APIs, use `useLocale()` or `useLocaleRouter()`.
|
|
10
11
|
*
|
|
11
12
|
* @example
|
|
12
13
|
* ```tsx
|
|
13
14
|
* function LanguageInfo() {
|
|
14
|
-
* const { locale, languages, isLoadingLanguages } = useBetterI18n()
|
|
15
|
+
* const { locale, setLocale, languages, isLoadingLanguages } = useBetterI18n()
|
|
15
16
|
*
|
|
16
17
|
* if (isLoadingLanguages) return <div>Loading...</div>
|
|
17
18
|
*
|
|
18
19
|
* return (
|
|
19
20
|
* <div>
|
|
20
|
-
* Current: {locale}
|
|
21
|
-
* Available: {languages.map(l => l.code).join(', ')}
|
|
21
|
+
* <p>Current: {locale}</p>
|
|
22
|
+
* <p>Available: {languages.map(l => l.code).join(', ')}</p>
|
|
23
|
+
* <button onClick={() => setLocale('tr')}>Switch to Turkish</button>
|
|
22
24
|
* </div>
|
|
23
25
|
* )
|
|
24
26
|
* }
|
|
25
27
|
* ```
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```tsx
|
|
29
|
-
* // For language switching with proper router navigation:
|
|
30
|
-
* import { useLocaleRouter } from '@better-i18n/use-intl'
|
|
31
|
-
*
|
|
32
|
-
* function LanguageSwitcher() {
|
|
33
|
-
* const { locale, locales, navigate } = useLocaleRouter()
|
|
34
|
-
* return (
|
|
35
|
-
* <select value={locale} onChange={(e) => navigate(e.target.value)}>
|
|
36
|
-
* {locales.map((loc) => <option key={loc} value={loc}>{loc}</option>)}
|
|
37
|
-
* </select>
|
|
38
|
-
* )
|
|
39
|
-
* }
|
|
40
|
-
* ```
|
|
41
28
|
*/
|
|
42
29
|
export declare function useBetterI18n(): BetterI18nContextValue;
|
|
43
30
|
//# sourceMappingURL=context.d.ts.map
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,iBAAiB,wDAE7B,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,iBAAiB,wDAE7B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,IAAI,sBAAsB,CAUtD"}
|
package/dist/context.js
CHANGED
|
@@ -7,38 +7,25 @@ export const BetterI18nContext = createContext(null);
|
|
|
7
7
|
/**
|
|
8
8
|
* Hook to access Better i18n context
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Provides locale state, language list, and `setLocale()` for switching.
|
|
11
|
+
* For higher-level APIs, use `useLocale()` or `useLocaleRouter()`.
|
|
11
12
|
*
|
|
12
13
|
* @example
|
|
13
14
|
* ```tsx
|
|
14
15
|
* function LanguageInfo() {
|
|
15
|
-
* const { locale, languages, isLoadingLanguages } = useBetterI18n()
|
|
16
|
+
* const { locale, setLocale, languages, isLoadingLanguages } = useBetterI18n()
|
|
16
17
|
*
|
|
17
18
|
* if (isLoadingLanguages) return <div>Loading...</div>
|
|
18
19
|
*
|
|
19
20
|
* return (
|
|
20
21
|
* <div>
|
|
21
|
-
* Current: {locale}
|
|
22
|
-
* Available: {languages.map(l => l.code).join(', ')}
|
|
22
|
+
* <p>Current: {locale}</p>
|
|
23
|
+
* <p>Available: {languages.map(l => l.code).join(', ')}</p>
|
|
24
|
+
* <button onClick={() => setLocale('tr')}>Switch to Turkish</button>
|
|
23
25
|
* </div>
|
|
24
26
|
* )
|
|
25
27
|
* }
|
|
26
28
|
* ```
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* ```tsx
|
|
30
|
-
* // For language switching with proper router navigation:
|
|
31
|
-
* import { useLocaleRouter } from '@better-i18n/use-intl'
|
|
32
|
-
*
|
|
33
|
-
* function LanguageSwitcher() {
|
|
34
|
-
* const { locale, locales, navigate } = useLocaleRouter()
|
|
35
|
-
* return (
|
|
36
|
-
* <select value={locale} onChange={(e) => navigate(e.target.value)}>
|
|
37
|
-
* {locales.map((loc) => <option key={loc} value={loc}>{loc}</option>)}
|
|
38
|
-
* </select>
|
|
39
|
-
* )
|
|
40
|
-
* }
|
|
41
|
-
* ```
|
|
42
29
|
*/
|
|
43
30
|
export function useBetterI18n() {
|
|
44
31
|
const context = useContext(BetterI18nContext);
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAC5C,IAAI,CACL,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAC5C,IAAI,CACL,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -15,8 +15,9 @@ export interface UseLocaleRouterReturn {
|
|
|
15
15
|
*/
|
|
16
16
|
defaultLocale: string;
|
|
17
17
|
/**
|
|
18
|
-
* Navigate to the same page with a new locale
|
|
19
|
-
* Uses TanStack Router
|
|
18
|
+
* Navigate to the same page with a new locale.
|
|
19
|
+
* Uses TanStack Router navigation when available,
|
|
20
|
+
* falls back to context-based `setLocale()` otherwise.
|
|
20
21
|
*/
|
|
21
22
|
navigate: (locale: string) => void;
|
|
22
23
|
/**
|
|
@@ -31,16 +32,16 @@ export interface UseLocaleRouterReturn {
|
|
|
31
32
|
isReady: boolean;
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
|
-
* Hook for
|
|
35
|
+
* Hook for locale navigation with automatic router detection.
|
|
35
36
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* - Works with TanStack Router's file-based routing
|
|
37
|
+
* When TanStack Router context is available, locale changes trigger
|
|
38
|
+
* proper SPA navigation. When no router is present (e.g., plain Vite
|
|
39
|
+
* apps), falls back to the provider's `setLocale()` for state-based
|
|
40
|
+
* locale switching.
|
|
41
41
|
*
|
|
42
42
|
* @example
|
|
43
43
|
* ```tsx
|
|
44
|
+
* // Works in both router and non-router environments
|
|
44
45
|
* function LanguageSwitcher() {
|
|
45
46
|
* const { locale, locales, navigate, isReady } = useLocaleRouter();
|
|
46
47
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocaleRouter.d.ts","sourceRoot":"","sources":["../../src/hooks/useLocaleRouter.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB
|
|
1
|
+
{"version":3,"file":"useLocaleRouter.d.ts","sourceRoot":"","sources":["../../src/hooks/useLocaleRouter.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC;;;;OAIG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAEtD;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,eAAe,IAAI,qBAAqB,CA6FvD"}
|
|
@@ -4,16 +4,16 @@ import { useRouter, useLocation } from "@tanstack/react-router";
|
|
|
4
4
|
import { getLocaleFromPath, replaceLocaleInPath, addLocalePrefix, } from "@better-i18n/core";
|
|
5
5
|
import { useBetterI18n } from "../context.js";
|
|
6
6
|
/**
|
|
7
|
-
* Hook for
|
|
7
|
+
* Hook for locale navigation with automatic router detection.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* - Works with TanStack Router's file-based routing
|
|
9
|
+
* When TanStack Router context is available, locale changes trigger
|
|
10
|
+
* proper SPA navigation. When no router is present (e.g., plain Vite
|
|
11
|
+
* apps), falls back to the provider's `setLocale()` for state-based
|
|
12
|
+
* locale switching.
|
|
14
13
|
*
|
|
15
14
|
* @example
|
|
16
15
|
* ```tsx
|
|
16
|
+
* // Works in both router and non-router environments
|
|
17
17
|
* function LanguageSwitcher() {
|
|
18
18
|
* const { locale, locales, navigate, isReady } = useLocaleRouter();
|
|
19
19
|
*
|
|
@@ -45,16 +45,41 @@ import { useBetterI18n } from "../context.js";
|
|
|
45
45
|
* ```
|
|
46
46
|
*/
|
|
47
47
|
export function useLocaleRouter() {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
//
|
|
48
|
+
const { languages, isLoadingLanguages, localePrefix, locale: contextLocale, setLocale, } = useBetterI18n();
|
|
49
|
+
// Safely detect TanStack Router context.
|
|
50
|
+
// When no <RouterProvider> is in the tree, these hooks throw —
|
|
51
|
+
// we catch gracefully and fall back to context-based locale switching.
|
|
52
|
+
//
|
|
53
|
+
// This is safe because:
|
|
54
|
+
// - The router presence never changes during a component's lifecycle
|
|
55
|
+
// - React hook calls (useContext) inside useRouter/useLocation always execute
|
|
56
|
+
// before any throw, so the hook count is consistent between renders
|
|
57
|
+
let router = null;
|
|
58
|
+
let location = null;
|
|
59
|
+
try {
|
|
60
|
+
router = useRouter();
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// No TanStack Router context — will use context-based navigation
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
location = useLocation();
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// No TanStack Router context — will use context-based navigation
|
|
70
|
+
}
|
|
71
|
+
const hasRouter = router != null && location != null;
|
|
72
|
+
// Build config from CDN manifest — includes localePrefix for URL strategy
|
|
52
73
|
const config = useMemo(() => ({
|
|
53
74
|
locales: languages.map((lang) => lang.code),
|
|
54
75
|
defaultLocale: languages.find((l) => l.isDefault)?.code || "en",
|
|
55
|
-
|
|
56
|
-
|
|
76
|
+
localePrefix,
|
|
77
|
+
}), [languages, localePrefix]);
|
|
78
|
+
// Get effective locale: from URL when router is available, from context otherwise
|
|
57
79
|
const locale = useMemo(() => {
|
|
80
|
+
if (!hasRouter || !location) {
|
|
81
|
+
return contextLocale;
|
|
82
|
+
}
|
|
58
83
|
// If no languages loaded yet, extract from path manually
|
|
59
84
|
if (languages.length === 0) {
|
|
60
85
|
const segments = location.pathname.split("/").filter(Boolean);
|
|
@@ -66,12 +91,18 @@ export function useLocaleRouter() {
|
|
|
66
91
|
return "en"; // fallback
|
|
67
92
|
}
|
|
68
93
|
return getLocaleFromPath(location.pathname, config);
|
|
69
|
-
}, [location
|
|
70
|
-
// Navigate
|
|
94
|
+
}, [hasRouter, location, config, languages, contextLocale]);
|
|
95
|
+
// Navigate: router-based SPA navigation or context-based state update
|
|
71
96
|
const navigate = useCallback((newLocale) => {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
97
|
+
if (hasRouter && router && location) {
|
|
98
|
+
const newPath = replaceLocaleInPath(location.pathname, newLocale, config);
|
|
99
|
+
router.navigate({ to: newPath });
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// No router — update locale via provider state
|
|
103
|
+
setLocale(newLocale);
|
|
104
|
+
}
|
|
105
|
+
}, [hasRouter, location, config, router, setLocale]);
|
|
75
106
|
// Get localized path for links
|
|
76
107
|
const localePath = useCallback((path, targetLocale) => {
|
|
77
108
|
const loc = targetLocale || locale;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocaleRouter.js","sourceRoot":"","sources":["../../src/hooks/useLocaleRouter.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,GAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"useLocaleRouter.js","sourceRoot":"","sources":["../../src/hooks/useLocaleRouter.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.d.ts
CHANGED
|
@@ -25,38 +25,27 @@ export declare function useLanguages(): {
|
|
|
25
25
|
isLoading: boolean;
|
|
26
26
|
};
|
|
27
27
|
/**
|
|
28
|
-
* Hook to get current locale
|
|
29
|
-
*
|
|
30
|
-
* For locale switching with proper router navigation, use useLocaleRouter() instead.
|
|
28
|
+
* Hook to get current locale and switch between locales
|
|
31
29
|
*
|
|
32
30
|
* @example
|
|
33
31
|
* ```tsx
|
|
34
32
|
* function LocaleDisplay() {
|
|
35
|
-
* const { locale, isLoading } = useLocale()
|
|
33
|
+
* const { locale, setLocale, isLoading } = useLocale()
|
|
36
34
|
*
|
|
37
35
|
* if (isLoading) return <div>Loading...</div>
|
|
38
36
|
*
|
|
39
|
-
* return <span>Current locale: {locale}</span>
|
|
40
|
-
* }
|
|
41
|
-
* ```
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```tsx
|
|
45
|
-
* // For locale switching, use useLocaleRouter:
|
|
46
|
-
* import { useLocaleRouter } from '@better-i18n/use-intl'
|
|
47
|
-
*
|
|
48
|
-
* function LocaleSwitcher() {
|
|
49
|
-
* const { locale, navigate } = useLocaleRouter()
|
|
50
37
|
* return (
|
|
51
|
-
* <
|
|
52
|
-
*
|
|
53
|
-
*
|
|
38
|
+
* <div>
|
|
39
|
+
* <span>Current: {locale}</span>
|
|
40
|
+
* <button onClick={() => setLocale('tr')}>Switch to Turkish</button>
|
|
41
|
+
* </div>
|
|
54
42
|
* )
|
|
55
43
|
* }
|
|
56
44
|
* ```
|
|
57
45
|
*/
|
|
58
46
|
export declare function useLocale(): {
|
|
59
47
|
locale: string;
|
|
48
|
+
setLocale: (locale: string) => void;
|
|
60
49
|
isLoading: boolean;
|
|
61
50
|
};
|
|
62
51
|
export { useTranslations, useFormatter, useMessages, useNow, useTimeZone, useLocale as useIntlLocale, } from "use-intl";
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY;;;EAO3B;AAED
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY;;;EAO3B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS;;;;EAQxB;AAGD,OAAO,EACL,eAAe,EACf,YAAY,EACZ,WAAW,EACX,MAAM,EACN,WAAW,EACX,SAAS,IAAI,aAAa,GAC3B,MAAM,UAAU,CAAC"}
|
package/dist/hooks.js
CHANGED
|
@@ -30,40 +30,29 @@ export function useLanguages() {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* Hook to get current locale
|
|
34
|
-
*
|
|
35
|
-
* For locale switching with proper router navigation, use useLocaleRouter() instead.
|
|
33
|
+
* Hook to get current locale and switch between locales
|
|
36
34
|
*
|
|
37
35
|
* @example
|
|
38
36
|
* ```tsx
|
|
39
37
|
* function LocaleDisplay() {
|
|
40
|
-
* const { locale, isLoading } = useLocale()
|
|
38
|
+
* const { locale, setLocale, isLoading } = useLocale()
|
|
41
39
|
*
|
|
42
40
|
* if (isLoading) return <div>Loading...</div>
|
|
43
41
|
*
|
|
44
|
-
* return <span>Current locale: {locale}</span>
|
|
45
|
-
* }
|
|
46
|
-
* ```
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```tsx
|
|
50
|
-
* // For locale switching, use useLocaleRouter:
|
|
51
|
-
* import { useLocaleRouter } from '@better-i18n/use-intl'
|
|
52
|
-
*
|
|
53
|
-
* function LocaleSwitcher() {
|
|
54
|
-
* const { locale, navigate } = useLocaleRouter()
|
|
55
42
|
* return (
|
|
56
|
-
* <
|
|
57
|
-
*
|
|
58
|
-
*
|
|
43
|
+
* <div>
|
|
44
|
+
* <span>Current: {locale}</span>
|
|
45
|
+
* <button onClick={() => setLocale('tr')}>Switch to Turkish</button>
|
|
46
|
+
* </div>
|
|
59
47
|
* )
|
|
60
48
|
* }
|
|
61
49
|
* ```
|
|
62
50
|
*/
|
|
63
51
|
export function useLocale() {
|
|
64
|
-
const { locale, isLoadingMessages } = useBetterI18n();
|
|
52
|
+
const { locale, setLocale, isLoadingMessages } = useBetterI18n();
|
|
65
53
|
return {
|
|
66
54
|
locale,
|
|
55
|
+
setLocale,
|
|
67
56
|
isLoading: isLoadingMessages,
|
|
68
57
|
};
|
|
69
58
|
}
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,aAAa,EAAE,CAAC;IAE1D,OAAO;QACL,SAAS;QACT,SAAS,EAAE,kBAAkB;KAC9B,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,aAAa,EAAE,CAAC;IAE1D,OAAO;QACL,SAAS;QACT,SAAS,EAAE,kBAAkB;KAC9B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,aAAa,EAAE,CAAC;IAEjE,OAAO;QACL,MAAM;QACN,SAAS;QACT,SAAS,EAAE,iBAAiB;KAC7B,CAAC;AACJ,CAAC;AAED,2CAA2C;AAC3C,OAAO,EACL,eAAe,EACf,YAAY,EACZ,WAAW,EACX,MAAM,EACN,WAAW,EACX,SAAS,IAAI,aAAa,GAC3B,MAAM,UAAU,CAAC"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -5,28 +5,49 @@ export interface BetterI18nProviderProps extends BetterI18nProviderConfig {
|
|
|
5
5
|
children: ReactNode;
|
|
6
6
|
/** Pre-loaded languages from SSR loader — skips loading state on first render */
|
|
7
7
|
initialLanguages?: LanguageOption[];
|
|
8
|
+
/**
|
|
9
|
+
* URL prefix strategy for locale codes.
|
|
10
|
+
* - `"as-needed"` (default): default locale has no URL prefix
|
|
11
|
+
* - `"always"`: all locales get a URL prefix (e.g., TanStack Router `$locale/` routes)
|
|
12
|
+
* @default "as-needed"
|
|
13
|
+
*/
|
|
14
|
+
localePrefix?: "always" | "as-needed";
|
|
8
15
|
/** Custom fallback when a message key is missing */
|
|
9
16
|
getMessageFallback?: (info: {
|
|
10
17
|
error: Error;
|
|
11
18
|
key: string;
|
|
12
19
|
namespace?: string;
|
|
13
20
|
}) => string;
|
|
21
|
+
/**
|
|
22
|
+
* Called when locale changes via `setLocale()` (e.g., from `LocaleDropdown`).
|
|
23
|
+
* In router-based apps, use this to trigger URL navigation:
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* <BetterI18nProvider
|
|
28
|
+
* project="acme/web"
|
|
29
|
+
* locale={locale}
|
|
30
|
+
* onLocaleChange={(newLocale) => {
|
|
31
|
+
* navigate({ to: `/${newLocale}${pathname}` })
|
|
32
|
+
* }}
|
|
33
|
+
* >
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
onLocaleChange?: (locale: string) => void;
|
|
14
37
|
}
|
|
15
38
|
/**
|
|
16
39
|
* Provider component that combines Better i18n CDN with use-intl
|
|
17
40
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
41
|
+
* Manages locale state internally, enabling locale switching via
|
|
42
|
+
* `setLocale()` from `useLocale()` or `useLocaleRouter()`.
|
|
20
43
|
*
|
|
21
44
|
* @example
|
|
22
45
|
* ```tsx
|
|
23
|
-
* //
|
|
46
|
+
* // Plain Vite / React app (no router)
|
|
24
47
|
* function App() {
|
|
25
48
|
* return (
|
|
26
|
-
* <BetterI18nProvider
|
|
27
|
-
*
|
|
28
|
-
* locale="en"
|
|
29
|
-
* >
|
|
49
|
+
* <BetterI18nProvider project="acme/dashboard" locale="en">
|
|
50
|
+
* <LocaleDropdown />
|
|
30
51
|
* <MyComponent />
|
|
31
52
|
* </BetterI18nProvider>
|
|
32
53
|
* )
|
|
@@ -47,5 +68,5 @@ export interface BetterI18nProviderProps extends BetterI18nProviderConfig {
|
|
|
47
68
|
* }
|
|
48
69
|
* ```
|
|
49
70
|
*/
|
|
50
|
-
export declare function BetterI18nProvider({ children, project, locale: propLocale, messages: propMessages, timeZone, now, onError, cdnBaseUrl, debug, logLevel, fetch: customFetch, storage, staticData, fetchTimeout, retryCount, initialLanguages, getMessageFallback: customGetMessageFallback, }: BetterI18nProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
71
|
+
export declare function BetterI18nProvider({ children, project, locale: propLocale, messages: propMessages, timeZone, now, onError, cdnBaseUrl, debug, logLevel, fetch: customFetch, storage, staticData, fetchTimeout, retryCount, initialLanguages, localePrefix, getMessageFallback: customGetMessageFallback, onLocaleChange, }: BetterI18nProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
51
72
|
//# sourceMappingURL=provider.d.ts.map
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG1F,OAAO,KAAK,EAAE,wBAAwB,EAAY,MAAM,YAAY,CAAC;AAErE,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACvE,QAAQ,EAAE,SAAS,CAAC;IACpB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;IACpC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IACtC,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,KAAK,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,KAAK,MAAM,CAAC;IACb;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,OAAO,EACP,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EACR,GAAG,EACH,OAAO,EACP,UAAU,EACV,KAAK,EACL,QAAQ,EACR,KAAK,EAAE,WAAW,EAClB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAA0B,EAC1B,kBAAkB,EAAE,wBAAwB,EAC5C,cAAc,GACf,EAAE,uBAAuB,2CAsKzB"}
|
package/dist/provider.js
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { createI18nCore } from "@better-i18n/core";
|
|
4
|
-
import { useEffect, useMemo, useState } from "react";
|
|
4
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
5
5
|
import { IntlProvider } from "use-intl";
|
|
6
6
|
import { BetterI18nContext } from "./context.js";
|
|
7
7
|
/**
|
|
8
8
|
* Provider component that combines Better i18n CDN with use-intl
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* Manages locale state internally, enabling locale switching via
|
|
11
|
+
* `setLocale()` from `useLocale()` or `useLocaleRouter()`.
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
14
|
* ```tsx
|
|
15
|
-
* //
|
|
15
|
+
* // Plain Vite / React app (no router)
|
|
16
16
|
* function App() {
|
|
17
17
|
* return (
|
|
18
|
-
* <BetterI18nProvider
|
|
19
|
-
*
|
|
20
|
-
* locale="en"
|
|
21
|
-
* >
|
|
18
|
+
* <BetterI18nProvider project="acme/dashboard" locale="en">
|
|
19
|
+
* <LocaleDropdown />
|
|
22
20
|
* <MyComponent />
|
|
23
21
|
* </BetterI18nProvider>
|
|
24
22
|
* )
|
|
@@ -39,14 +37,30 @@ import { BetterI18nContext } from "./context.js";
|
|
|
39
37
|
* }
|
|
40
38
|
* ```
|
|
41
39
|
*/
|
|
42
|
-
export function BetterI18nProvider({ children, project, locale: propLocale, messages: propMessages, timeZone, now, onError, cdnBaseUrl, debug, logLevel, fetch: customFetch, storage, staticData, fetchTimeout, retryCount, initialLanguages, getMessageFallback: customGetMessageFallback, }) {
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
//
|
|
47
|
-
|
|
40
|
+
export function BetterI18nProvider({ children, project, locale: propLocale, messages: propMessages, timeZone, now, onError, cdnBaseUrl, debug, logLevel, fetch: customFetch, storage, staticData, fetchTimeout, retryCount, initialLanguages, localePrefix = "as-needed", getMessageFallback: customGetMessageFallback, onLocaleChange, }) {
|
|
41
|
+
// Internal locale state — enables non-router apps to switch locale
|
|
42
|
+
// via setLocale() without needing URL-based navigation.
|
|
43
|
+
const [managedLocale, setManagedLocale] = useState(propLocale);
|
|
44
|
+
// Sync when the external prop changes (e.g., router navigation updates propLocale)
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
setManagedLocale(propLocale);
|
|
47
|
+
}, [propLocale]);
|
|
48
|
+
const locale = managedLocale;
|
|
49
|
+
// setLocale: updates internal state + notifies parent via callback
|
|
50
|
+
const setLocale = useCallback((newLocale) => {
|
|
51
|
+
setManagedLocale(newLocale);
|
|
52
|
+
onLocaleChange?.(newLocale);
|
|
53
|
+
}, [onLocaleChange]);
|
|
54
|
+
// Track the locale that propMessages was originally provided for.
|
|
55
|
+
// In SSR apps, propMessages comes from a one-time loader (script tag / SSR side-channel)
|
|
56
|
+
// and stays frozen at the initial locale. When the user SPA-navigates to a new locale,
|
|
57
|
+
// propMessages is stale — we must fetch from CDN instead of trusting it.
|
|
58
|
+
const propMessagesLocaleRef = useRef(propMessages ? locale : undefined);
|
|
48
59
|
const [clientMessages, setClientMessages] = useState();
|
|
49
|
-
|
|
60
|
+
// Use propMessages only when it matches the current locale (SSR hydration).
|
|
61
|
+
// After SPA navigation to a different locale, fall through to clientMessages (CDN-fetched).
|
|
62
|
+
const isPropMessagesFresh = propMessages && propMessagesLocaleRef.current === locale;
|
|
63
|
+
const messages = isPropMessagesFresh ? propMessages : (clientMessages ?? propMessages);
|
|
50
64
|
const [languages, setLanguages] = useState(initialLanguages ?? []);
|
|
51
65
|
const [isLoadingMessages, setIsLoadingMessages] = useState(propMessages === undefined);
|
|
52
66
|
const [isLoadingLanguages, setIsLoadingLanguages] = useState(!initialLanguages);
|
|
@@ -89,10 +103,10 @@ export function BetterI18nProvider({ children, project, locale: propLocale, mess
|
|
|
89
103
|
cancelled = true;
|
|
90
104
|
};
|
|
91
105
|
}, [i18nCore, initialLanguages]);
|
|
92
|
-
// Load messages when locale changes
|
|
106
|
+
// Load messages when locale changes.
|
|
107
|
+
// Skip only when propMessages is fresh (provided for the current locale — SSR hydration).
|
|
93
108
|
useEffect(() => {
|
|
94
|
-
|
|
95
|
-
if (propMessages) {
|
|
109
|
+
if (propMessages && propMessagesLocaleRef.current === locale) {
|
|
96
110
|
return;
|
|
97
111
|
}
|
|
98
112
|
let cancelled = false;
|
|
@@ -118,14 +132,15 @@ export function BetterI18nProvider({ children, project, locale: propLocale, mess
|
|
|
118
132
|
cancelled = true;
|
|
119
133
|
};
|
|
120
134
|
}, [locale, i18nCore, propMessages]);
|
|
121
|
-
// Context value (read-only locale - use useLocaleRouter for navigation)
|
|
122
135
|
const contextValue = useMemo(() => ({
|
|
123
136
|
locale,
|
|
137
|
+
setLocale,
|
|
124
138
|
languages,
|
|
125
139
|
isLoadingLanguages,
|
|
126
140
|
isLoadingMessages,
|
|
127
141
|
project,
|
|
128
|
-
|
|
142
|
+
localePrefix,
|
|
143
|
+
}), [locale, setLocale, languages, isLoadingLanguages, isLoadingMessages, project, localePrefix]);
|
|
129
144
|
if (!messages) {
|
|
130
145
|
// Render children with empty messages instead of blanking the screen.
|
|
131
146
|
// This converts a full DOM structural mismatch (null vs full tree)
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAsCjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,QAAQ,EACR,OAAO,EACP,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EACR,GAAG,EACH,OAAO,EACP,UAAU,EACV,KAAK,EACL,QAAQ,EACR,KAAK,EAAE,WAAW,EAClB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAAY,GAAG,WAAW,EAC1B,kBAAkB,EAAE,wBAAwB,EAC5C,cAAc,GACU;IACxB,mEAAmE;IACnE,wDAAwD;IACxD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE/D,mFAAmF;IACnF,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,MAAM,GAAG,aAAa,CAAC;IAE7B,mEAAmE;IACnE,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,SAAiB,EAAE,EAAE;QACpB,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC5B,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,kEAAkE;IAClE,yFAAyF;IACzF,uFAAuF;IACvF,yEAAyE;IACzE,MAAM,qBAAqB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAExE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,EAAwB,CAAC;IAE7E,4EAA4E;IAC5E,4FAA4F;IAC5F,MAAM,mBAAmB,GAAG,YAAY,IAAI,qBAAqB,CAAC,OAAO,KAAK,MAAM,CAAC;IACrF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,YAAY,CAAC,CAAC;IACvF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAmB,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACrF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;IACvF,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAEhF,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CACH,cAAc,CAAC;QACb,OAAO;QACP,aAAa,EAAE,MAAM;QACrB,UAAU;QACV,KAAK;QACL,QAAQ;QACR,KAAK,EAAE,WAAW;QAClB,OAAO;QACP,UAAU;QACV,YAAY;QACZ,UAAU;KACX,CAAC,EACJ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAC3G,CAAC;IAEF,8DAA8D;IAC9D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,gBAAgB;YAAE,OAAO;QAE7B,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAClE,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,aAAa,EAAE,CAAC;QAEhB,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEjC,qCAAqC;IACrC,0FAA0F;IAC1F,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,IAAI,qBAAqB,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;YAC9B,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAE3B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAChD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,iBAAiB,CAAC,IAAgB,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CACX,qDAAqD,MAAM,IAAI,EAC/D,KAAK,CACN,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,YAAY,EAAE,CAAC;QAEf,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,CAAC;QACL,MAAM;QACN,SAAS;QACT,SAAS;QACT,kBAAkB;QAClB,iBAAiB;QACjB,OAAO;QACP,YAAY;KACb,CAAC,EACF,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,CAAC,CAC7F,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,sEAAsE;QACtE,mEAAmE;QACnE,wEAAwE;QACxE,0CAA0C;QAC1C,OAAO,CACL,KAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAC7C,KAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,EAAE,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EACjB,kBAAkB,EAAE,wBAAwB,YAE3C,QAAiB,GACL,GACY,CAC9B,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAC7C,KAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAC9B,kBAAkB,EAAE,wBAAwB,YAE3C,QAAiB,GACL,GACY,CAC9B,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -34,14 +34,21 @@ export interface BetterI18nProviderConfig extends Omit<I18nCoreConfig, "defaultL
|
|
|
34
34
|
/**
|
|
35
35
|
* Better i18n context value
|
|
36
36
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
37
|
+
* Use `setLocale()` for locale switching. In router-based apps,
|
|
38
|
+
* the provider's `onLocaleChange` callback handles navigation.
|
|
39
39
|
*/
|
|
40
40
|
export interface BetterI18nContextValue {
|
|
41
41
|
/**
|
|
42
|
-
* Current locale
|
|
42
|
+
* Current locale
|
|
43
43
|
*/
|
|
44
44
|
locale: string;
|
|
45
|
+
/**
|
|
46
|
+
* Change the active locale.
|
|
47
|
+
* Updates internal state and triggers message loading.
|
|
48
|
+
* In router-based apps, also fires the `onLocaleChange` callback
|
|
49
|
+
* so the parent can handle URL navigation.
|
|
50
|
+
*/
|
|
51
|
+
setLocale: (locale: string) => void;
|
|
45
52
|
/**
|
|
46
53
|
* Available languages with metadata from CDN manifest
|
|
47
54
|
*/
|
|
@@ -58,6 +65,12 @@ export interface BetterI18nContextValue {
|
|
|
58
65
|
* Project identifier
|
|
59
66
|
*/
|
|
60
67
|
project: string;
|
|
68
|
+
/**
|
|
69
|
+
* URL prefix strategy for locale codes.
|
|
70
|
+
* - `"as-needed"`: default locale has no URL prefix
|
|
71
|
+
* - `"always"`: all locales get a URL prefix (e.g., TanStack Router `$locale/`)
|
|
72
|
+
*/
|
|
73
|
+
localePrefix: "always" | "as-needed";
|
|
61
74
|
}
|
|
62
75
|
/**
|
|
63
76
|
* Server-side configuration for getMessages
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,wBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC;IAC7C;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,GAAG,CAAC,EAAE,IAAI,CAAC;IAEX;;OAEG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;CAC1D;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,SAAS,EAAE,cAAc,EAAE,CAAC;IAE5B;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,wBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC;IAC7C;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,GAAG,CAAC,EAAE,IAAI,CAAC;IAEX;;OAEG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;CAC1D;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpC;;OAEG;IACH,SAAS,EAAE,cAAc,EAAE,CAAC;IAE5B;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,YAAY,EAAE,QAAQ,GAAG,WAAW,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@better-i18n/use-intl",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Better i18n integration for use-intl (React, TanStack Start)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -57,7 +57,8 @@
|
|
|
57
57
|
"prepublishOnly": "bun run build"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@better-i18n/core": "^0.3.0"
|
|
60
|
+
"@better-i18n/core": "^0.3.0",
|
|
61
|
+
"@floating-ui/react": "^0.27.19"
|
|
61
62
|
},
|
|
62
63
|
"peerDependencies": {
|
|
63
64
|
"react": ">=18.0.0",
|