langsys-js-typescript 0.1.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/CHANGELOG.md +31 -0
- package/LICENSE +21 -0
- package/README.md +268 -0
- package/dist/index.d.mts +428 -0
- package/dist/index.d.ts +428 -0
- package/dist/index.js +1249 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1231 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +56 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny framework-agnostic reactive value holder — our replacement for a
|
|
3
|
+
* Svelte `Writable<T>`. The shape is deliberately similar so the mental
|
|
4
|
+
* model is identical: subscribe/set/update/get.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* const locale = createSignal('en-us');
|
|
8
|
+
* locale.subscribe((v) => console.log('locale is now', v));
|
|
9
|
+
* locale.set('fr-fr');
|
|
10
|
+
* locale.get(); // 'fr-fr'
|
|
11
|
+
*
|
|
12
|
+
* Subscribe is called synchronously with the current value on registration
|
|
13
|
+
* (same semantics as a Svelte store).
|
|
14
|
+
*/
|
|
15
|
+
type Subscriber<T> = (value: T) => void;
|
|
16
|
+
type Unsubscriber = () => void;
|
|
17
|
+
type Updater<T> = (value: T) => T;
|
|
18
|
+
interface Signal<T> {
|
|
19
|
+
/** Register a subscriber; it's called immediately with the current value. Returns an unsubscribe function. */
|
|
20
|
+
subscribe(run: Subscriber<T>): Unsubscriber;
|
|
21
|
+
/** Set the value and notify subscribers. */
|
|
22
|
+
set(value: T): void;
|
|
23
|
+
/** Update the value via a function and notify subscribers. */
|
|
24
|
+
update(fn: Updater<T>): void;
|
|
25
|
+
/** Read the current value without subscribing. */
|
|
26
|
+
get(): T;
|
|
27
|
+
}
|
|
28
|
+
declare function createSignal<T>(initial: T): Signal<T>;
|
|
29
|
+
/** Synchronously read a Signal's value. Mirrors svelte's `get(store)`. */
|
|
30
|
+
declare function getValue<T>(signal: Signal<T>): T;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Lightweight debug logger. Styled in browsers (via %c), plain text in Node.
|
|
34
|
+
* Replaces the pre-existing `echo` module from the Svelte SDK with a simpler,
|
|
35
|
+
* SSR-safe equivalent.
|
|
36
|
+
*/
|
|
37
|
+
declare class Logger {
|
|
38
|
+
debugEnabled: boolean;
|
|
39
|
+
constructor(debugEnabled?: boolean);
|
|
40
|
+
log(...args: unknown[]): void;
|
|
41
|
+
warn(...args: unknown[]): void;
|
|
42
|
+
error(...args: unknown[]): void;
|
|
43
|
+
}
|
|
44
|
+
declare const logger: Logger;
|
|
45
|
+
|
|
46
|
+
interface iDirectToken {
|
|
47
|
+
token: string;
|
|
48
|
+
trans: string | null;
|
|
49
|
+
}
|
|
50
|
+
interface iDirectTokenTranslations {
|
|
51
|
+
__DirectToken__?: iDirectToken;
|
|
52
|
+
}
|
|
53
|
+
type iTranslations = iDirectTokenTranslations & {
|
|
54
|
+
__category__: string;
|
|
55
|
+
__symbol__: string;
|
|
56
|
+
[key: string]: string;
|
|
57
|
+
};
|
|
58
|
+
type iCategories = {
|
|
59
|
+
[key: string]: iTranslations;
|
|
60
|
+
__uncategorized__: iTranslations;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
interface iLangsysInitConfig {
|
|
64
|
+
/** The ID (UUID) of the project created in Langsys */
|
|
65
|
+
projectid: string;
|
|
66
|
+
/** The API key associated with the project */
|
|
67
|
+
key: string;
|
|
68
|
+
/**
|
|
69
|
+
* A reactive holder for the user's selected locale. Accepts any object
|
|
70
|
+
* with `subscribe`, `set`, and `get` methods (our `Signal<string>` works
|
|
71
|
+
* out of the box). Use `createSignal('en-us')` if you have nothing of your own.
|
|
72
|
+
*/
|
|
73
|
+
UserLocaleStore: Signal<string>;
|
|
74
|
+
/**
|
|
75
|
+
* Base language/locale for the source strings in your code.
|
|
76
|
+
* @default 'en'
|
|
77
|
+
*/
|
|
78
|
+
baseLocale?: string;
|
|
79
|
+
/**
|
|
80
|
+
* Enable debug console messages.
|
|
81
|
+
* @default false
|
|
82
|
+
*/
|
|
83
|
+
debug?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Emulate Langsys failure to load (for testing error handling).
|
|
86
|
+
* @default false
|
|
87
|
+
*/
|
|
88
|
+
emulateFailureToLoad?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Token creation behavior during SSR.
|
|
91
|
+
* @default 'client'
|
|
92
|
+
*/
|
|
93
|
+
ssrTokenStrategy?: 'client' | 'server' | 'auto';
|
|
94
|
+
/**
|
|
95
|
+
* Pre-fetched translation data to bypass the initial API call.
|
|
96
|
+
* Useful for SSR scenarios to avoid duplicate fetches.
|
|
97
|
+
*/
|
|
98
|
+
initialTranslations?: iCategories;
|
|
99
|
+
/** Locale that `initialTranslations` corresponds to. */
|
|
100
|
+
initialTranslationsLocale?: string;
|
|
101
|
+
}
|
|
102
|
+
interface iLangsysConfig {
|
|
103
|
+
projectid: string;
|
|
104
|
+
key: string;
|
|
105
|
+
sUserLocale: Signal<string>;
|
|
106
|
+
baseLocale: string;
|
|
107
|
+
debug?: boolean;
|
|
108
|
+
/** Permission level of the API key, set automatically after successful authorization. */
|
|
109
|
+
key_type?: 'read' | 'write';
|
|
110
|
+
/**
|
|
111
|
+
* Token creation behavior during SSR.
|
|
112
|
+
* - 'client': queue tokens for client-side sending (default)
|
|
113
|
+
* - 'server': send tokens immediately from server
|
|
114
|
+
* - 'auto': send from server if few tokens, queue otherwise
|
|
115
|
+
* @default 'client'
|
|
116
|
+
*/
|
|
117
|
+
ssrTokenStrategy?: 'client' | 'server' | 'auto';
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Translation function type machinery.
|
|
122
|
+
*
|
|
123
|
+
* The big trick here is `ExtractParamKeys` — a recursive template-literal
|
|
124
|
+
* type that pulls placeholder names out of a phrase at compile time, so
|
|
125
|
+
* `t('Cat', 'Hello, {name}!', { name: 'Sarah' })` is type-checked: passing
|
|
126
|
+
* an object without `name`, or with a key not in the phrase, is a TS error.
|
|
127
|
+
*/
|
|
128
|
+
/** Allowed value types for interpolation. Mirrors what ICU MessageFormat will accept. */
|
|
129
|
+
type ParamPrimitive = string | number | Date | boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Pull placeholder names out of a phrase.
|
|
132
|
+
* @example
|
|
133
|
+
* ExtractParamKeys<"Hello, {name}!"> // "name"
|
|
134
|
+
* ExtractParamKeys<"{first} and {last}"> // "first" | "last"
|
|
135
|
+
* ExtractParamKeys<"no placeholders here"> // never
|
|
136
|
+
*/
|
|
137
|
+
type ExtractParamKeys<S extends string> = S extends `${string}{${infer K}}${infer Rest}` ? K | ExtractParamKeys<Rest> : never;
|
|
138
|
+
/** Build the params object type required for a given phrase. */
|
|
139
|
+
type ParamsFor<S extends string> = {
|
|
140
|
+
[K in ExtractParamKeys<S>]: ParamPrimitive;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Rest-tuple for the optional params argument.
|
|
144
|
+
* Empty when the phrase has no placeholders → 3rd arg is forbidden.
|
|
145
|
+
* Required tuple when the phrase has placeholders → 3rd arg must be passed.
|
|
146
|
+
*/
|
|
147
|
+
type TArgs<P extends string> = [ExtractParamKeys<P>] extends [never] ? [] : [params: ParamsFor<P>];
|
|
148
|
+
/** Loose params type — used inside generic stores where the phrase isn't a known literal. */
|
|
149
|
+
type TranslationParams = Record<string, ParamPrimitive>;
|
|
150
|
+
/** The translation function signature. */
|
|
151
|
+
interface TFunction {
|
|
152
|
+
<P extends string>(category: string, phrase: P, ...args: TArgs<P>): string;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Lifecycle for app translations:
|
|
157
|
+
* - on-miss: any `t(cat, phrase)` whose phrase isn't in the catalog is
|
|
158
|
+
* queued as a "missing token" and (with write keys) flushed to the API.
|
|
159
|
+
* - locale changes trigger `change()` which fetches and replaces.
|
|
160
|
+
* - consumers can `subscribe(fn)` to react to translation snapshots.
|
|
161
|
+
* - frameworks subscribe to `tSignal` (which re-emits a fresh `TFunction`
|
|
162
|
+
* every time translations or the loaded locale change) so reactive
|
|
163
|
+
* templates re-render automatically.
|
|
164
|
+
*/
|
|
165
|
+
declare class Translations {
|
|
166
|
+
private config;
|
|
167
|
+
private locale;
|
|
168
|
+
private lastLoaded;
|
|
169
|
+
private missingTokens;
|
|
170
|
+
private timer;
|
|
171
|
+
private flushScheduled;
|
|
172
|
+
private isFirstClientRun;
|
|
173
|
+
debug: Logger;
|
|
174
|
+
/** Reactive holder for the current translation function. Re-emits on every catalog/locale change. */
|
|
175
|
+
tSignal: Signal<TFunction>;
|
|
176
|
+
constructor(config: iLangsysConfig);
|
|
177
|
+
/** Current translation function. Reads fresh state on every call. */
|
|
178
|
+
get t(): TFunction;
|
|
179
|
+
/** Subscribe to translation snapshot changes. Fires immediately with the current value. */
|
|
180
|
+
subscribe(run: (value: iCategories) => void): Unsubscriber;
|
|
181
|
+
/**
|
|
182
|
+
* Content-block-keyed lookup used by the DOM `Translate` class.
|
|
183
|
+
* Returns the per-token translation inside a content block, or `null` if
|
|
184
|
+
* either the content block or the inner token is missing. Never registers
|
|
185
|
+
* a missing token — the DOM class manages its own lifecycle via content blocks.
|
|
186
|
+
*/
|
|
187
|
+
lookupContent(category: string, customId: string, token: string): string | null;
|
|
188
|
+
private buildTFn;
|
|
189
|
+
private missingToken;
|
|
190
|
+
private scheduleTokenFlush;
|
|
191
|
+
setup(config: iLangsysConfig): void;
|
|
192
|
+
/**
|
|
193
|
+
* React to a user-locale change. Fetches translations if we haven't
|
|
194
|
+
* loaded this locale within the last 60s (or if forced).
|
|
195
|
+
*/
|
|
196
|
+
change(locale: string, force?: boolean, skipFetch?: boolean): Promise<boolean>;
|
|
197
|
+
private updateTokens;
|
|
198
|
+
private getTranslations;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
interface HttpResponse {
|
|
202
|
+
status: number;
|
|
203
|
+
statusText: string;
|
|
204
|
+
url: string;
|
|
205
|
+
data: string;
|
|
206
|
+
}
|
|
207
|
+
interface ResponseObject {
|
|
208
|
+
status: boolean;
|
|
209
|
+
page?: number;
|
|
210
|
+
page_count?: number;
|
|
211
|
+
records_per_page?: number;
|
|
212
|
+
data?: object[] | object;
|
|
213
|
+
errors?: string[];
|
|
214
|
+
http?: HttpResponse;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
interface iCountry {
|
|
218
|
+
label: string;
|
|
219
|
+
code: string;
|
|
220
|
+
}
|
|
221
|
+
type iCountryList = iCountry[];
|
|
222
|
+
interface iCountryDialCode {
|
|
223
|
+
/** ISO 3166-1 alpha-2 country code (e.g., "US", "CA", "GB") */
|
|
224
|
+
country_code: string;
|
|
225
|
+
/** International dialing code with + prefix (e.g., "+1", "+44", "+33") */
|
|
226
|
+
dial_code: string;
|
|
227
|
+
/** Localized country name in the requested locale */
|
|
228
|
+
name: string;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
interface iCurrency {
|
|
232
|
+
code: string;
|
|
233
|
+
name: string;
|
|
234
|
+
symbol: string;
|
|
235
|
+
symbol_native: string;
|
|
236
|
+
decimal_digits: number;
|
|
237
|
+
rounding: number;
|
|
238
|
+
name_plural?: string;
|
|
239
|
+
}
|
|
240
|
+
type iCurrencyList = iCurrency[];
|
|
241
|
+
|
|
242
|
+
interface iLocaleFlat {
|
|
243
|
+
code: string;
|
|
244
|
+
name: string;
|
|
245
|
+
}
|
|
246
|
+
interface iLocaleData {
|
|
247
|
+
/** The locale code */
|
|
248
|
+
code: string;
|
|
249
|
+
/** Full locale name */
|
|
250
|
+
locale_name: string;
|
|
251
|
+
/** Language name only */
|
|
252
|
+
lang_name: string;
|
|
253
|
+
}
|
|
254
|
+
type iLanguageName = string;
|
|
255
|
+
/** `{ LanguageName: [{code, name}, ...] }` */
|
|
256
|
+
type iLocaleDefault = Record<iLanguageName, iLocaleFlat[]>;
|
|
257
|
+
|
|
258
|
+
declare class LangsysAppClass {
|
|
259
|
+
private config;
|
|
260
|
+
Translations: Translations;
|
|
261
|
+
translationsLoadingPromise: Promise<unknown>;
|
|
262
|
+
private locales;
|
|
263
|
+
private countries;
|
|
264
|
+
private countriesLocale;
|
|
265
|
+
private dialCodes;
|
|
266
|
+
private dialCodesLocale;
|
|
267
|
+
private currencies;
|
|
268
|
+
private currenciesLocale;
|
|
269
|
+
debug: Logger;
|
|
270
|
+
constructor();
|
|
271
|
+
/** Current translation function. Reads fresh state on every call. */
|
|
272
|
+
get t(): TFunction;
|
|
273
|
+
refresh(): Promise<boolean>;
|
|
274
|
+
/**
|
|
275
|
+
* Initialize Langsys. Configuration must include at least `projectid`,
|
|
276
|
+
* `key`, and `UserLocaleStore` (any Signal<string>).
|
|
277
|
+
*/
|
|
278
|
+
init(initConfig: iLangsysInitConfig): Promise<ResponseObject>;
|
|
279
|
+
getDialCodes(inLocale?: string): Promise<iCountryDialCode[]>;
|
|
280
|
+
getCurrencies(inLocale?: string): Promise<iCurrencyList>;
|
|
281
|
+
getCountries(inLocale?: string): Promise<iCountryList>;
|
|
282
|
+
getCountryName(forCountryCode: string, inLocale?: string): Promise<string>;
|
|
283
|
+
getCurrencyName(forCurrencyCode: string, inLocale?: string): Promise<string>;
|
|
284
|
+
getLocalesFormat(format?: '' | 'flat' | 'data', inLocale?: string): Promise<iLocaleDefault | iLocaleFlat[] | iLocaleData[]>;
|
|
285
|
+
getLocalesFlat(inLocale?: string): Promise<iLocaleFlat[]>;
|
|
286
|
+
getLocalesData(inLocale?: string, forceRefresh?: boolean): Promise<iLocaleData[]>;
|
|
287
|
+
getLocales(inLocale?: string): Promise<iLocaleDefault>;
|
|
288
|
+
getLocaleNameWithLookup(forLocale: string, shortName?: boolean, inLocale?: string): Promise<string>;
|
|
289
|
+
getLocaleName(forLocale: string, shortName?: boolean, inLocale?: string): string;
|
|
290
|
+
/** @deprecated use `getLocaleNameWithLookup` or `getLocaleName` */
|
|
291
|
+
getLanguageName(forLocale: string, shortName?: boolean, inLocale?: string): Promise<string>;
|
|
292
|
+
/**
|
|
293
|
+
* Detects the end-user's preferred locale.
|
|
294
|
+
*
|
|
295
|
+
* - In browsers, uses `navigator.languages` with fallback to `navigator.language`.
|
|
296
|
+
* - In SSR environments, parses the `Accept-Language` header.
|
|
297
|
+
*/
|
|
298
|
+
detectPreferredLocale(acceptLanguageHeader?: string | null, supportedLocales?: string[]): string | false;
|
|
299
|
+
private getUserLanguagePreferences;
|
|
300
|
+
private parseAcceptLanguageHeader;
|
|
301
|
+
private findBestLocaleMatch;
|
|
302
|
+
private normalizeLocale;
|
|
303
|
+
private getLanguageCode;
|
|
304
|
+
}
|
|
305
|
+
declare const LangsysApp: LangsysAppClass;
|
|
306
|
+
|
|
307
|
+
/** Options for the `Translate` class. Matches the Svelte component's props. */
|
|
308
|
+
interface TranslateOptions {
|
|
309
|
+
/** Optional category under which tokens are registered. Helps translators disambiguate. */
|
|
310
|
+
category?: string;
|
|
311
|
+
/** Optional stable id for the content block. If omitted, we hash category+tokens. */
|
|
312
|
+
custom_id?: string;
|
|
313
|
+
/** Optional human-readable label shown in the Translation Manager. */
|
|
314
|
+
label?: string;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Wrap a DOM element and manage translation for its contents.
|
|
318
|
+
*
|
|
319
|
+
* const el = document.querySelector('#hero');
|
|
320
|
+
* new Translate(el, { category: 'Home' });
|
|
321
|
+
*
|
|
322
|
+
* The first-pass tokenizes text nodes and translatable attributes; if the
|
|
323
|
+
* content is a single text run, it's treated as a plain token. For HTML
|
|
324
|
+
* content, a "content block" is registered so translators see the content
|
|
325
|
+
* with the same visual structure users see.
|
|
326
|
+
*
|
|
327
|
+
* Call `.destroy()` to stop reacting to locale changes.
|
|
328
|
+
*/
|
|
329
|
+
declare class Translate {
|
|
330
|
+
private element;
|
|
331
|
+
private options;
|
|
332
|
+
private contentClone;
|
|
333
|
+
private tokens;
|
|
334
|
+
private parseComplete;
|
|
335
|
+
private isTokenizing;
|
|
336
|
+
private lastTranslatedLocale;
|
|
337
|
+
private custom_id;
|
|
338
|
+
private unsubscribeLocale;
|
|
339
|
+
constructor(element: HTMLElement, options?: TranslateOptions);
|
|
340
|
+
/** Stop reacting to locale changes. Safe to call multiple times. */
|
|
341
|
+
destroy(): void;
|
|
342
|
+
private translateUpdate;
|
|
343
|
+
private tokenizeContent;
|
|
344
|
+
private handleContentBlock;
|
|
345
|
+
private tokenize;
|
|
346
|
+
private tokenizeAttributes;
|
|
347
|
+
private findNode;
|
|
348
|
+
private translate;
|
|
349
|
+
private getTranslation;
|
|
350
|
+
private translateAttributes;
|
|
351
|
+
private translateAttribute;
|
|
352
|
+
private generateCustomId;
|
|
353
|
+
private applyStylesToNode;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
declare class LangsysAppAPIClass {
|
|
357
|
+
private apiurl;
|
|
358
|
+
config: iLangsysConfig;
|
|
359
|
+
private headers;
|
|
360
|
+
constructor();
|
|
361
|
+
setup(config: iLangsysConfig): void;
|
|
362
|
+
/** Optional hook to point the client at a different API host. */
|
|
363
|
+
setBaseUrl(url: string): void;
|
|
364
|
+
validate(config: iLangsysConfig): Promise<ResponseObject>;
|
|
365
|
+
getTranslations(locale: string): Promise<ResponseObject>;
|
|
366
|
+
post(path: string, data?: Record<string, unknown>): Promise<ResponseObject>;
|
|
367
|
+
get(path: string, data?: Record<string, unknown>): Promise<ResponseObject>;
|
|
368
|
+
delete(path: string, data?: Record<string, unknown>): Promise<ResponseObject>;
|
|
369
|
+
patch(path: string, data?: Record<string, unknown>): Promise<ResponseObject>;
|
|
370
|
+
put(path: string, data?: Record<string, unknown>): Promise<ResponseObject>;
|
|
371
|
+
private send;
|
|
372
|
+
}
|
|
373
|
+
declare const LangsysAppAPI: LangsysAppAPIClass;
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Create a Signal whose value is persisted to localStorage (when available).
|
|
377
|
+
* Falls back to in-memory behavior during SSR or when storage is unavailable
|
|
378
|
+
* or quota-exceeded. Stored value is JSON-encoded.
|
|
379
|
+
*/
|
|
380
|
+
declare function persist<T>(key: string, initial: T): Signal<T>;
|
|
381
|
+
|
|
382
|
+
interface iContentBlock {
|
|
383
|
+
custom_id: string;
|
|
384
|
+
category: string;
|
|
385
|
+
content: string;
|
|
386
|
+
label?: string;
|
|
387
|
+
tokens: string[];
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
declare const sTranslations: Signal<iCategories>;
|
|
391
|
+
declare const currentlyLoadedLocale: Signal<string>;
|
|
392
|
+
declare const contentBlocks: Signal<iContentBlock[]>;
|
|
393
|
+
|
|
394
|
+
declare const isEmpty: (data: unknown) => boolean;
|
|
395
|
+
declare function md5(inputString: string): string;
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Substitute `{name}`-style placeholders in a translated string with values
|
|
399
|
+
* from `params`. Unknown placeholders are left untouched so missing data is
|
|
400
|
+
* visible to the developer rather than silently rendering empty strings.
|
|
401
|
+
*
|
|
402
|
+
* Dates are serialized to ISO 8601; everything else goes through `String()`.
|
|
403
|
+
* Designed as a forward-compatible stop-gap until ICU MessageFormat is wired
|
|
404
|
+
* in for plurals/select/date formatting.
|
|
405
|
+
*/
|
|
406
|
+
declare function interpolate(template: string, params: Record<string, unknown>): string;
|
|
407
|
+
|
|
408
|
+
interface iProject {
|
|
409
|
+
id: string;
|
|
410
|
+
owner_id: string;
|
|
411
|
+
title: string;
|
|
412
|
+
description: string;
|
|
413
|
+
base_locale: string;
|
|
414
|
+
organization_id: string;
|
|
415
|
+
organization_name: string;
|
|
416
|
+
target_locales: string[];
|
|
417
|
+
default_locales: string[];
|
|
418
|
+
settings: unknown;
|
|
419
|
+
admin: string[];
|
|
420
|
+
last_activity: string;
|
|
421
|
+
totals: unknown;
|
|
422
|
+
visitor_locale: string;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
declare const t: TFunction;
|
|
426
|
+
declare const tSignal: Signal<TFunction>;
|
|
427
|
+
|
|
428
|
+
export { type ExtractParamKeys, LangsysApp, LangsysAppAPI, Logger, type ParamPrimitive, type ParamsFor, type Signal, type Subscriber, type TArgs, type TFunction, Translate, type TranslateOptions, type TranslationParams, Translations, type Unsubscriber, type Updater, contentBlocks, createSignal, currentlyLoadedLocale, getValue, type iCategories, type iContentBlock, type iCountry, type iCountryDialCode, type iCountryList, type iCurrency, type iCurrencyList, type iLangsysConfig, type iLangsysInitConfig, type ResponseObject as iLangsysResponse, type iLanguageName, type iLocaleData, type iLocaleDefault, type iLocaleFlat, type iProject, type iTranslations, interpolate, isEmpty, logger, md5, persist, sTranslations, t, tSignal };
|