@verbaly/react 0.11.0 → 0.13.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/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/AronSoto/verbaly/develop/assets/logo-light.png" alt="Verbaly" width="300" />
2
+ <img src="https://raw.githubusercontent.com/AronSoto/verbaly/develop/assets/logo.png" alt="Verbaly" width="300" />
3
3
  </p>
4
4
 
5
5
  <p align="center"><em>React bindings for Verbaly — hooks over the reactive core.</em></p>
package/dist/index.cjs CHANGED
@@ -1,99 +1,56 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var index_exports = {};
22
- __export(index_exports, {
23
- Trans: () => Trans,
24
- VerbalyProvider: () => VerbalyProvider,
25
- useLocale: () => useLocale,
26
- useT: () => useT,
27
- useVerbaly: () => useVerbaly
28
- });
29
- module.exports = __toCommonJS(index_exports);
30
- var import_react = require("react");
31
- var import_verbaly = require("verbaly");
32
- var VerbalyContext = (0, import_react.createContext)(null);
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let react = require("react");
3
+ let verbaly = require("verbaly");
4
+ //#region src/index.ts
5
+ const VerbalyContext = (0, react.createContext)(null);
33
6
  function VerbalyProvider(props) {
34
- return (0, import_react.createElement)(
35
- VerbalyContext.Provider,
36
- { value: props.instance },
37
- props.children
38
- );
7
+ return (0, react.createElement)(VerbalyContext.Provider, { value: props.instance }, props.children);
39
8
  }
40
9
  function useVerbaly() {
41
- const instance = (0, import_react.useContext)(VerbalyContext);
42
- if (!instance) {
43
- throw new Error("[verbaly] useVerbaly requires a <VerbalyProvider>");
44
- }
45
- return instance;
10
+ const instance = (0, react.useContext)(VerbalyContext);
11
+ if (!instance) throw new Error("[verbaly] useVerbaly requires a <VerbalyProvider>");
12
+ return instance;
46
13
  }
47
14
  function useT() {
48
- const instance = useVerbaly();
49
- useVersion(instance);
50
- return instance.t;
15
+ const instance = useVerbaly();
16
+ useVersion(instance);
17
+ return instance.t;
51
18
  }
52
19
  function useLocale() {
53
- const instance = useVerbaly();
54
- useVersion(instance);
55
- return [instance.locale, instance.setLocale];
20
+ const instance = useVerbaly();
21
+ useVersion(instance);
22
+ return [instance.locale, instance.setLocale];
56
23
  }
57
24
  function useVersion(instance) {
58
- (0, import_react.useSyncExternalStore)(
59
- instance.subscribe,
60
- () => instance.version,
61
- () => instance.version
62
- );
25
+ (0, react.useSyncExternalStore)(instance.subscribe, () => instance.version, () => instance.version);
63
26
  }
64
27
  function Trans(props) {
65
- const t = useT();
66
- const text = t(props.id, props.values);
67
- return (0, import_react.createElement)(
68
- import_react.Fragment,
69
- null,
70
- ...toNodes((0, import_verbaly.parseTags)(text), props.components ?? {}, props.links ?? {})
71
- );
28
+ return (0, react.createElement)(react.Fragment, null, ...toNodes((0, verbaly.parseTags)(useT()(props.id, props.values)), props.components ?? {}, props.links ?? {}));
72
29
  }
73
30
  function toNodes(nodes, components, links) {
74
- return nodes.map((node, i) => {
75
- if (typeof node === "string") return node;
76
- const children = toNodes(node.children, components, links);
77
- const el = components[node.name];
78
- if (el) return (0, import_react.cloneElement)(el, { key: i }, ...children);
79
- const link = links[node.name];
80
- if (link !== void 0) {
81
- const def = typeof link === "string" ? { href: link } : link;
82
- return (0, import_react.createElement)(
83
- "a",
84
- { key: i, href: (0, import_verbaly.safeHref)(def.href), target: def.target, rel: def.rel },
85
- ...children
86
- );
87
- }
88
- return (0, import_react.createElement)(import_react.Fragment, { key: i }, ...children);
89
- });
31
+ return nodes.map((node, i) => {
32
+ if (typeof node === "string") return node;
33
+ const children = toNodes(node.children, components, links);
34
+ const el = components[node.name];
35
+ if (el) return (0, react.cloneElement)(el, { key: i }, ...children);
36
+ const link = links[node.name];
37
+ if (link !== void 0) {
38
+ const def = typeof link === "string" ? { href: link } : link;
39
+ return (0, react.createElement)("a", {
40
+ key: i,
41
+ href: (0, verbaly.safeHref)(def.href),
42
+ target: def.target,
43
+ rel: def.rel
44
+ }, ...children);
45
+ }
46
+ return (0, react.createElement)(react.Fragment, { key: i }, ...children);
47
+ });
90
48
  }
91
- // Annotate the CommonJS export names for ESM import in node:
92
- 0 && (module.exports = {
93
- Trans,
94
- VerbalyProvider,
95
- useLocale,
96
- useT,
97
- useVerbaly
98
- });
49
+ //#endregion
50
+ exports.Trans = Trans;
51
+ exports.VerbalyProvider = VerbalyProvider;
52
+ exports.useLocale = useLocale;
53
+ exports.useT = useT;
54
+ exports.useVerbaly = useVerbaly;
55
+
99
56
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n cloneElement,\n createContext,\n createElement,\n Fragment,\n useContext,\n useSyncExternalStore,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n parseTags,\n safeHref,\n type DictionaryInput,\n type Params,\n type RichLink,\n type TagNode,\n type TFunction,\n type Verbaly,\n} from 'verbaly';\n\nconst VerbalyContext = createContext<Verbaly | null>(null);\n\nexport interface VerbalyProviderProps<D extends DictionaryInput> {\n instance: Verbaly<D>;\n children?: ReactNode;\n}\n\nexport function VerbalyProvider<D extends DictionaryInput>(\n props: VerbalyProviderProps<D>,\n): ReactElement {\n return createElement(\n VerbalyContext.Provider,\n { value: props.instance as unknown as Verbaly },\n props.children,\n );\n}\n\nexport function useVerbaly<D extends DictionaryInput = DictionaryInput>(): Verbaly<D> {\n const instance = useContext(VerbalyContext);\n if (!instance) {\n throw new Error('[verbaly] useVerbaly requires a <VerbalyProvider>');\n }\n return instance as unknown as Verbaly<D>;\n}\n\nexport function useT<D extends DictionaryInput = DictionaryInput>(): TFunction<D> {\n const instance = useVerbaly<D>();\n useVersion(instance);\n return instance.t;\n}\n\nexport function useLocale(): [string, (locale: string) => void] {\n const instance = useVerbaly();\n useVersion(instance);\n return [instance.locale, instance.setLocale];\n}\n\nfunction useVersion<D extends DictionaryInput>(instance: Verbaly<D>): void {\n useSyncExternalStore(\n instance.subscribe,\n () => instance.version,\n () => instance.version,\n );\n}\n\nexport interface TransProps {\n id: string;\n values?: Params;\n components?: Record<string, ReactElement>;\n links?: Record<string, RichLink>;\n}\n\n// translated message + element interpolation\nexport function Trans(props: TransProps): ReactElement {\n const t = useT();\n const text = (t as unknown as (id: string, values?: Params) => string)(props.id, props.values);\n return createElement(\n Fragment,\n null,\n ...toNodes(parseTags(text), props.components ?? {}, props.links ?? {}),\n );\n}\n\nfunction toNodes(\n nodes: TagNode[],\n components: Record<string, ReactElement>,\n links: Record<string, RichLink>,\n): ReactNode[] {\n return nodes.map((node, i) => {\n if (typeof node === 'string') return node;\n const children = toNodes(node.children, components, links);\n const el = components[node.name];\n if (el) return cloneElement(el, { key: i }, ...children);\n const link = links[node.name];\n if (link !== undefined) {\n const def: Exclude<RichLink, string> = typeof link === 'string' ? { href: link } : link;\n return createElement(\n 'a',\n { key: i, href: safeHref(def.href), target: def.target, rel: def.rel },\n ...children,\n );\n }\n return createElement(Fragment, { key: i }, ...children);\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBASO;AACP,qBASO;AAEP,IAAM,qBAAiB,4BAA8B,IAAI;AAOlD,SAAS,gBACd,OACc;AACd,aAAO;AAAA,IACL,eAAe;AAAA,IACf,EAAE,OAAO,MAAM,SAA+B;AAAA,IAC9C,MAAM;AAAA,EACR;AACF;AAEO,SAAS,aAAsE;AACpF,QAAM,eAAW,yBAAW,cAAc;AAC1C,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,SAAO;AACT;AAEO,SAAS,OAAkE;AAChF,QAAM,WAAW,WAAc;AAC/B,aAAW,QAAQ;AACnB,SAAO,SAAS;AAClB;AAEO,SAAS,YAAgD;AAC9D,QAAM,WAAW,WAAW;AAC5B,aAAW,QAAQ;AACnB,SAAO,CAAC,SAAS,QAAQ,SAAS,SAAS;AAC7C;AAEA,SAAS,WAAsC,UAA4B;AACzE;AAAA,IACE,SAAS;AAAA,IACT,MAAM,SAAS;AAAA,IACf,MAAM,SAAS;AAAA,EACjB;AACF;AAUO,SAAS,MAAM,OAAiC;AACrD,QAAM,IAAI,KAAK;AACf,QAAM,OAAQ,EAAyD,MAAM,IAAI,MAAM,MAAM;AAC7F,aAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAG,YAAQ,0BAAU,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC;AAAA,EACvE;AACF;AAEA,SAAS,QACP,OACA,YACA,OACa;AACb,SAAO,MAAM,IAAI,CAAC,MAAM,MAAM;AAC5B,QAAI,OAAO,SAAS,SAAU,QAAO;AACrC,UAAM,WAAW,QAAQ,KAAK,UAAU,YAAY,KAAK;AACzD,UAAM,KAAK,WAAW,KAAK,IAAI;AAC/B,QAAI,GAAI,YAAO,2BAAa,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ;AACvD,UAAM,OAAO,MAAM,KAAK,IAAI;AAC5B,QAAI,SAAS,QAAW;AACtB,YAAM,MAAiC,OAAO,SAAS,WAAW,EAAE,MAAM,KAAK,IAAI;AACnF,iBAAO;AAAA,QACL;AAAA,QACA,EAAE,KAAK,GAAG,UAAM,yBAAS,IAAI,IAAI,GAAG,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI;AAAA,QACrE,GAAG;AAAA,MACL;AAAA,IACF;AACA,eAAO,4BAAc,uBAAU,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ;AAAA,EACxD,CAAC;AACH;","names":[]}
1
+ {"version":3,"file":"index.cjs","names":["Fragment"],"sources":["../src/index.ts"],"sourcesContent":["import {\n cloneElement,\n createContext,\n createElement,\n Fragment,\n useContext,\n useSyncExternalStore,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n parseTags,\n safeHref,\n type DictionaryInput,\n type Params,\n type RichLink,\n type TagNode,\n type TFunction,\n type Verbaly,\n} from 'verbaly';\n\nconst VerbalyContext = createContext<Verbaly | null>(null);\n\nexport interface VerbalyProviderProps<D extends DictionaryInput> {\n instance: Verbaly<D>;\n children?: ReactNode;\n}\n\nexport function VerbalyProvider<D extends DictionaryInput>(\n props: VerbalyProviderProps<D>,\n): ReactElement {\n return createElement(\n VerbalyContext.Provider,\n { value: props.instance as unknown as Verbaly },\n props.children,\n );\n}\n\nexport function useVerbaly<D extends DictionaryInput = DictionaryInput>(): Verbaly<D> {\n const instance = useContext(VerbalyContext);\n if (!instance) {\n throw new Error('[verbaly] useVerbaly requires a <VerbalyProvider>');\n }\n return instance as unknown as Verbaly<D>;\n}\n\nexport function useT<D extends DictionaryInput = DictionaryInput>(): TFunction<D> {\n const instance = useVerbaly<D>();\n useVersion(instance);\n return instance.t;\n}\n\nexport function useLocale(): [string, (locale: string) => void] {\n const instance = useVerbaly();\n useVersion(instance);\n return [instance.locale, instance.setLocale];\n}\n\nfunction useVersion<D extends DictionaryInput>(instance: Verbaly<D>): void {\n useSyncExternalStore(\n instance.subscribe,\n () => instance.version,\n () => instance.version,\n );\n}\n\nexport interface TransProps {\n id: string;\n values?: Params;\n components?: Record<string, ReactElement>;\n links?: Record<string, RichLink>;\n}\n\n// translated message + element interpolation\nexport function Trans(props: TransProps): ReactElement {\n const t = useT();\n const text = (t as unknown as (id: string, values?: Params) => string)(props.id, props.values);\n return createElement(\n Fragment,\n null,\n ...toNodes(parseTags(text), props.components ?? {}, props.links ?? {}),\n );\n}\n\nfunction toNodes(\n nodes: TagNode[],\n components: Record<string, ReactElement>,\n links: Record<string, RichLink>,\n): ReactNode[] {\n return nodes.map((node, i) => {\n if (typeof node === 'string') return node;\n const children = toNodes(node.children, components, links);\n const el = components[node.name];\n if (el) return cloneElement(el, { key: i }, ...children);\n const link = links[node.name];\n if (link !== undefined) {\n const def: Exclude<RichLink, string> = typeof link === 'string' ? { href: link } : link;\n return createElement(\n 'a',\n { key: i, href: safeHref(def.href), target: def.target, rel: def.rel },\n ...children,\n );\n }\n return createElement(Fragment, { key: i }, ...children);\n });\n}\n"],"mappings":";;;;AAqBA,MAAM,kBAAA,GAAA,MAAA,cAAA,CAA+C,IAAI;AAOzD,SAAgB,gBACd,OACc;CACd,QAAA,GAAA,MAAA,cAAA,CACE,eAAe,UACf,EAAE,OAAO,MAAM,SAA+B,GAC9C,MAAM,QACR;AACF;AAEA,SAAgB,aAAsE;CACpF,MAAM,YAAA,GAAA,MAAA,WAAA,CAAsB,cAAc;CAC1C,IAAI,CAAC,UACH,MAAM,IAAI,MAAM,mDAAmD;CAErE,OAAO;AACT;AAEA,SAAgB,OAAkE;CAChF,MAAM,WAAW,WAAc;CAC/B,WAAW,QAAQ;CACnB,OAAO,SAAS;AAClB;AAEA,SAAgB,YAAgD;CAC9D,MAAM,WAAW,WAAW;CAC5B,WAAW,QAAQ;CACnB,OAAO,CAAC,SAAS,QAAQ,SAAS,SAAS;AAC7C;AAEA,SAAS,WAAsC,UAA4B;CACzE,CAAA,GAAA,MAAA,qBAAA,CACE,SAAS,iBACH,SAAS,eACT,SAAS,OACjB;AACF;AAUA,SAAgB,MAAM,OAAiC;CAGrD,QAAA,GAAA,MAAA,cAAA,CACEA,MAAAA,UACA,MACA,GAAG,SAAA,GAAA,QAAA,UAAA,CALK,KACI,CAAC,CAAwD,MAAM,IAAI,MAAM,MAI7D,CAAC,GAAG,MAAM,cAAc,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC,CACvE;AACF;AAEA,SAAS,QACP,OACA,YACA,OACa;CACb,OAAO,MAAM,KAAK,MAAM,MAAM;EAC5B,IAAI,OAAO,SAAS,UAAU,OAAO;EACrC,MAAM,WAAW,QAAQ,KAAK,UAAU,YAAY,KAAK;EACzD,MAAM,KAAK,WAAW,KAAK;EAC3B,IAAI,IAAI,QAAA,GAAA,MAAA,aAAA,CAAoB,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ;EACvD,MAAM,OAAO,MAAM,KAAK;EACxB,IAAI,SAAS,KAAA,GAAW;GACtB,MAAM,MAAiC,OAAO,SAAS,WAAW,EAAE,MAAM,KAAK,IAAI;GACnF,QAAA,GAAA,MAAA,cAAA,CACE,KACA;IAAE,KAAK;IAAG,OAAA,GAAA,QAAA,SAAA,CAAe,IAAI,IAAI;IAAG,QAAQ,IAAI;IAAQ,KAAK,IAAI;GAAI,GACrE,GAAG,QACL;EACF;EACA,QAAA,GAAA,MAAA,cAAA,CAAqBA,MAAAA,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ;CACxD,CAAC;AACH"}
package/dist/index.d.cts CHANGED
@@ -1,20 +1,21 @@
1
- import { ReactElement, ReactNode } from 'react';
2
- import { Params, RichLink, DictionaryInput, Verbaly, TFunction } from 'verbaly';
3
-
1
+ import { ReactElement, ReactNode } from "react";
2
+ import { DictionaryInput, Params, RichLink, TFunction, Verbaly } from "verbaly";
3
+ //#region src/index.d.ts
4
4
  interface VerbalyProviderProps<D extends DictionaryInput> {
5
- instance: Verbaly<D>;
6
- children?: ReactNode;
5
+ instance: Verbaly<D>;
6
+ children?: ReactNode;
7
7
  }
8
8
  declare function VerbalyProvider<D extends DictionaryInput>(props: VerbalyProviderProps<D>): ReactElement;
9
9
  declare function useVerbaly<D extends DictionaryInput = DictionaryInput>(): Verbaly<D>;
10
10
  declare function useT<D extends DictionaryInput = DictionaryInput>(): TFunction<D>;
11
11
  declare function useLocale(): [string, (locale: string) => void];
12
12
  interface TransProps {
13
- id: string;
14
- values?: Params;
15
- components?: Record<string, ReactElement>;
16
- links?: Record<string, RichLink>;
13
+ id: string;
14
+ values?: Params;
15
+ components?: Record<string, ReactElement>;
16
+ links?: Record<string, RichLink>;
17
17
  }
18
18
  declare function Trans(props: TransProps): ReactElement;
19
-
20
- export { Trans, type TransProps, VerbalyProvider, type VerbalyProviderProps, useLocale, useT, useVerbaly };
19
+ //#endregion
20
+ export { Trans, TransProps, VerbalyProvider, VerbalyProviderProps, useLocale, useT, useVerbaly };
21
+ //# sourceMappingURL=index.d.cts.map
package/dist/index.d.ts CHANGED
@@ -1,20 +1,21 @@
1
- import { ReactElement, ReactNode } from 'react';
2
- import { Params, RichLink, DictionaryInput, Verbaly, TFunction } from 'verbaly';
3
-
1
+ import { ReactElement, ReactNode } from "react";
2
+ import { DictionaryInput, Params, RichLink, TFunction, Verbaly } from "verbaly";
3
+ //#region src/index.d.ts
4
4
  interface VerbalyProviderProps<D extends DictionaryInput> {
5
- instance: Verbaly<D>;
6
- children?: ReactNode;
5
+ instance: Verbaly<D>;
6
+ children?: ReactNode;
7
7
  }
8
8
  declare function VerbalyProvider<D extends DictionaryInput>(props: VerbalyProviderProps<D>): ReactElement;
9
9
  declare function useVerbaly<D extends DictionaryInput = DictionaryInput>(): Verbaly<D>;
10
10
  declare function useT<D extends DictionaryInput = DictionaryInput>(): TFunction<D>;
11
11
  declare function useLocale(): [string, (locale: string) => void];
12
12
  interface TransProps {
13
- id: string;
14
- values?: Params;
15
- components?: Record<string, ReactElement>;
16
- links?: Record<string, RichLink>;
13
+ id: string;
14
+ values?: Params;
15
+ components?: Record<string, ReactElement>;
16
+ links?: Record<string, RichLink>;
17
17
  }
18
18
  declare function Trans(props: TransProps): ReactElement;
19
-
20
- export { Trans, type TransProps, VerbalyProvider, type VerbalyProviderProps, useLocale, useT, useVerbaly };
19
+ //#endregion
20
+ export { Trans, TransProps, VerbalyProvider, VerbalyProviderProps, useLocale, useT, useVerbaly };
21
+ //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,80 +1,51 @@
1
- // src/index.ts
2
- import {
3
- cloneElement,
4
- createContext,
5
- createElement,
6
- Fragment,
7
- useContext,
8
- useSyncExternalStore
9
- } from "react";
10
- import {
11
- parseTags,
12
- safeHref
13
- } from "verbaly";
14
- var VerbalyContext = createContext(null);
1
+ import { Fragment, cloneElement, createContext, createElement, useContext, useSyncExternalStore } from "react";
2
+ import { parseTags, safeHref } from "verbaly";
3
+ //#region src/index.ts
4
+ const VerbalyContext = createContext(null);
15
5
  function VerbalyProvider(props) {
16
- return createElement(
17
- VerbalyContext.Provider,
18
- { value: props.instance },
19
- props.children
20
- );
6
+ return createElement(VerbalyContext.Provider, { value: props.instance }, props.children);
21
7
  }
22
8
  function useVerbaly() {
23
- const instance = useContext(VerbalyContext);
24
- if (!instance) {
25
- throw new Error("[verbaly] useVerbaly requires a <VerbalyProvider>");
26
- }
27
- return instance;
9
+ const instance = useContext(VerbalyContext);
10
+ if (!instance) throw new Error("[verbaly] useVerbaly requires a <VerbalyProvider>");
11
+ return instance;
28
12
  }
29
13
  function useT() {
30
- const instance = useVerbaly();
31
- useVersion(instance);
32
- return instance.t;
14
+ const instance = useVerbaly();
15
+ useVersion(instance);
16
+ return instance.t;
33
17
  }
34
18
  function useLocale() {
35
- const instance = useVerbaly();
36
- useVersion(instance);
37
- return [instance.locale, instance.setLocale];
19
+ const instance = useVerbaly();
20
+ useVersion(instance);
21
+ return [instance.locale, instance.setLocale];
38
22
  }
39
23
  function useVersion(instance) {
40
- useSyncExternalStore(
41
- instance.subscribe,
42
- () => instance.version,
43
- () => instance.version
44
- );
24
+ useSyncExternalStore(instance.subscribe, () => instance.version, () => instance.version);
45
25
  }
46
26
  function Trans(props) {
47
- const t = useT();
48
- const text = t(props.id, props.values);
49
- return createElement(
50
- Fragment,
51
- null,
52
- ...toNodes(parseTags(text), props.components ?? {}, props.links ?? {})
53
- );
27
+ return createElement(Fragment, null, ...toNodes(parseTags(useT()(props.id, props.values)), props.components ?? {}, props.links ?? {}));
54
28
  }
55
29
  function toNodes(nodes, components, links) {
56
- return nodes.map((node, i) => {
57
- if (typeof node === "string") return node;
58
- const children = toNodes(node.children, components, links);
59
- const el = components[node.name];
60
- if (el) return cloneElement(el, { key: i }, ...children);
61
- const link = links[node.name];
62
- if (link !== void 0) {
63
- const def = typeof link === "string" ? { href: link } : link;
64
- return createElement(
65
- "a",
66
- { key: i, href: safeHref(def.href), target: def.target, rel: def.rel },
67
- ...children
68
- );
69
- }
70
- return createElement(Fragment, { key: i }, ...children);
71
- });
30
+ return nodes.map((node, i) => {
31
+ if (typeof node === "string") return node;
32
+ const children = toNodes(node.children, components, links);
33
+ const el = components[node.name];
34
+ if (el) return cloneElement(el, { key: i }, ...children);
35
+ const link = links[node.name];
36
+ if (link !== void 0) {
37
+ const def = typeof link === "string" ? { href: link } : link;
38
+ return createElement("a", {
39
+ key: i,
40
+ href: safeHref(def.href),
41
+ target: def.target,
42
+ rel: def.rel
43
+ }, ...children);
44
+ }
45
+ return createElement(Fragment, { key: i }, ...children);
46
+ });
72
47
  }
73
- export {
74
- Trans,
75
- VerbalyProvider,
76
- useLocale,
77
- useT,
78
- useVerbaly
79
- };
48
+ //#endregion
49
+ export { Trans, VerbalyProvider, useLocale, useT, useVerbaly };
50
+
80
51
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n cloneElement,\n createContext,\n createElement,\n Fragment,\n useContext,\n useSyncExternalStore,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n parseTags,\n safeHref,\n type DictionaryInput,\n type Params,\n type RichLink,\n type TagNode,\n type TFunction,\n type Verbaly,\n} from 'verbaly';\n\nconst VerbalyContext = createContext<Verbaly | null>(null);\n\nexport interface VerbalyProviderProps<D extends DictionaryInput> {\n instance: Verbaly<D>;\n children?: ReactNode;\n}\n\nexport function VerbalyProvider<D extends DictionaryInput>(\n props: VerbalyProviderProps<D>,\n): ReactElement {\n return createElement(\n VerbalyContext.Provider,\n { value: props.instance as unknown as Verbaly },\n props.children,\n );\n}\n\nexport function useVerbaly<D extends DictionaryInput = DictionaryInput>(): Verbaly<D> {\n const instance = useContext(VerbalyContext);\n if (!instance) {\n throw new Error('[verbaly] useVerbaly requires a <VerbalyProvider>');\n }\n return instance as unknown as Verbaly<D>;\n}\n\nexport function useT<D extends DictionaryInput = DictionaryInput>(): TFunction<D> {\n const instance = useVerbaly<D>();\n useVersion(instance);\n return instance.t;\n}\n\nexport function useLocale(): [string, (locale: string) => void] {\n const instance = useVerbaly();\n useVersion(instance);\n return [instance.locale, instance.setLocale];\n}\n\nfunction useVersion<D extends DictionaryInput>(instance: Verbaly<D>): void {\n useSyncExternalStore(\n instance.subscribe,\n () => instance.version,\n () => instance.version,\n );\n}\n\nexport interface TransProps {\n id: string;\n values?: Params;\n components?: Record<string, ReactElement>;\n links?: Record<string, RichLink>;\n}\n\n// translated message + element interpolation\nexport function Trans(props: TransProps): ReactElement {\n const t = useT();\n const text = (t as unknown as (id: string, values?: Params) => string)(props.id, props.values);\n return createElement(\n Fragment,\n null,\n ...toNodes(parseTags(text), props.components ?? {}, props.links ?? {}),\n );\n}\n\nfunction toNodes(\n nodes: TagNode[],\n components: Record<string, ReactElement>,\n links: Record<string, RichLink>,\n): ReactNode[] {\n return nodes.map((node, i) => {\n if (typeof node === 'string') return node;\n const children = toNodes(node.children, components, links);\n const el = components[node.name];\n if (el) return cloneElement(el, { key: i }, ...children);\n const link = links[node.name];\n if (link !== undefined) {\n const def: Exclude<RichLink, string> = typeof link === 'string' ? { href: link } : link;\n return createElement(\n 'a',\n { key: i, href: safeHref(def.href), target: def.target, rel: def.rel },\n ...children,\n );\n }\n return createElement(Fragment, { key: i }, ...children);\n });\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAOK;AAEP,IAAM,iBAAiB,cAA8B,IAAI;AAOlD,SAAS,gBACd,OACc;AACd,SAAO;AAAA,IACL,eAAe;AAAA,IACf,EAAE,OAAO,MAAM,SAA+B;AAAA,IAC9C,MAAM;AAAA,EACR;AACF;AAEO,SAAS,aAAsE;AACpF,QAAM,WAAW,WAAW,cAAc;AAC1C,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,SAAO;AACT;AAEO,SAAS,OAAkE;AAChF,QAAM,WAAW,WAAc;AAC/B,aAAW,QAAQ;AACnB,SAAO,SAAS;AAClB;AAEO,SAAS,YAAgD;AAC9D,QAAM,WAAW,WAAW;AAC5B,aAAW,QAAQ;AACnB,SAAO,CAAC,SAAS,QAAQ,SAAS,SAAS;AAC7C;AAEA,SAAS,WAAsC,UAA4B;AACzE;AAAA,IACE,SAAS;AAAA,IACT,MAAM,SAAS;AAAA,IACf,MAAM,SAAS;AAAA,EACjB;AACF;AAUO,SAAS,MAAM,OAAiC;AACrD,QAAM,IAAI,KAAK;AACf,QAAM,OAAQ,EAAyD,MAAM,IAAI,MAAM,MAAM;AAC7F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAG,QAAQ,UAAU,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC;AAAA,EACvE;AACF;AAEA,SAAS,QACP,OACA,YACA,OACa;AACb,SAAO,MAAM,IAAI,CAAC,MAAM,MAAM;AAC5B,QAAI,OAAO,SAAS,SAAU,QAAO;AACrC,UAAM,WAAW,QAAQ,KAAK,UAAU,YAAY,KAAK;AACzD,UAAM,KAAK,WAAW,KAAK,IAAI;AAC/B,QAAI,GAAI,QAAO,aAAa,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ;AACvD,UAAM,OAAO,MAAM,KAAK,IAAI;AAC5B,QAAI,SAAS,QAAW;AACtB,YAAM,MAAiC,OAAO,SAAS,WAAW,EAAE,MAAM,KAAK,IAAI;AACnF,aAAO;AAAA,QACL;AAAA,QACA,EAAE,KAAK,GAAG,MAAM,SAAS,IAAI,IAAI,GAAG,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI;AAAA,QACrE,GAAG;AAAA,MACL;AAAA,IACF;AACA,WAAO,cAAc,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ;AAAA,EACxD,CAAC;AACH;","names":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n cloneElement,\n createContext,\n createElement,\n Fragment,\n useContext,\n useSyncExternalStore,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n parseTags,\n safeHref,\n type DictionaryInput,\n type Params,\n type RichLink,\n type TagNode,\n type TFunction,\n type Verbaly,\n} from 'verbaly';\n\nconst VerbalyContext = createContext<Verbaly | null>(null);\n\nexport interface VerbalyProviderProps<D extends DictionaryInput> {\n instance: Verbaly<D>;\n children?: ReactNode;\n}\n\nexport function VerbalyProvider<D extends DictionaryInput>(\n props: VerbalyProviderProps<D>,\n): ReactElement {\n return createElement(\n VerbalyContext.Provider,\n { value: props.instance as unknown as Verbaly },\n props.children,\n );\n}\n\nexport function useVerbaly<D extends DictionaryInput = DictionaryInput>(): Verbaly<D> {\n const instance = useContext(VerbalyContext);\n if (!instance) {\n throw new Error('[verbaly] useVerbaly requires a <VerbalyProvider>');\n }\n return instance as unknown as Verbaly<D>;\n}\n\nexport function useT<D extends DictionaryInput = DictionaryInput>(): TFunction<D> {\n const instance = useVerbaly<D>();\n useVersion(instance);\n return instance.t;\n}\n\nexport function useLocale(): [string, (locale: string) => void] {\n const instance = useVerbaly();\n useVersion(instance);\n return [instance.locale, instance.setLocale];\n}\n\nfunction useVersion<D extends DictionaryInput>(instance: Verbaly<D>): void {\n useSyncExternalStore(\n instance.subscribe,\n () => instance.version,\n () => instance.version,\n );\n}\n\nexport interface TransProps {\n id: string;\n values?: Params;\n components?: Record<string, ReactElement>;\n links?: Record<string, RichLink>;\n}\n\n// translated message + element interpolation\nexport function Trans(props: TransProps): ReactElement {\n const t = useT();\n const text = (t as unknown as (id: string, values?: Params) => string)(props.id, props.values);\n return createElement(\n Fragment,\n null,\n ...toNodes(parseTags(text), props.components ?? {}, props.links ?? {}),\n );\n}\n\nfunction toNodes(\n nodes: TagNode[],\n components: Record<string, ReactElement>,\n links: Record<string, RichLink>,\n): ReactNode[] {\n return nodes.map((node, i) => {\n if (typeof node === 'string') return node;\n const children = toNodes(node.children, components, links);\n const el = components[node.name];\n if (el) return cloneElement(el, { key: i }, ...children);\n const link = links[node.name];\n if (link !== undefined) {\n const def: Exclude<RichLink, string> = typeof link === 'string' ? { href: link } : link;\n return createElement(\n 'a',\n { key: i, href: safeHref(def.href), target: def.target, rel: def.rel },\n ...children,\n );\n }\n return createElement(Fragment, { key: i }, ...children);\n });\n}\n"],"mappings":";;;AAqBA,MAAM,iBAAiB,cAA8B,IAAI;AAOzD,SAAgB,gBACd,OACc;CACd,OAAO,cACL,eAAe,UACf,EAAE,OAAO,MAAM,SAA+B,GAC9C,MAAM,QACR;AACF;AAEA,SAAgB,aAAsE;CACpF,MAAM,WAAW,WAAW,cAAc;CAC1C,IAAI,CAAC,UACH,MAAM,IAAI,MAAM,mDAAmD;CAErE,OAAO;AACT;AAEA,SAAgB,OAAkE;CAChF,MAAM,WAAW,WAAc;CAC/B,WAAW,QAAQ;CACnB,OAAO,SAAS;AAClB;AAEA,SAAgB,YAAgD;CAC9D,MAAM,WAAW,WAAW;CAC5B,WAAW,QAAQ;CACnB,OAAO,CAAC,SAAS,QAAQ,SAAS,SAAS;AAC7C;AAEA,SAAS,WAAsC,UAA4B;CACzE,qBACE,SAAS,iBACH,SAAS,eACT,SAAS,OACjB;AACF;AAUA,SAAgB,MAAM,OAAiC;CAGrD,OAAO,cACL,UACA,MACA,GAAG,QAAQ,UALH,KACI,CAAC,CAAwD,MAAM,IAAI,MAAM,MAI7D,CAAC,GAAG,MAAM,cAAc,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC,CACvE;AACF;AAEA,SAAS,QACP,OACA,YACA,OACa;CACb,OAAO,MAAM,KAAK,MAAM,MAAM;EAC5B,IAAI,OAAO,SAAS,UAAU,OAAO;EACrC,MAAM,WAAW,QAAQ,KAAK,UAAU,YAAY,KAAK;EACzD,MAAM,KAAK,WAAW,KAAK;EAC3B,IAAI,IAAI,OAAO,aAAa,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ;EACvD,MAAM,OAAO,MAAM,KAAK;EACxB,IAAI,SAAS,KAAA,GAAW;GACtB,MAAM,MAAiC,OAAO,SAAS,WAAW,EAAE,MAAM,KAAK,IAAI;GACnF,OAAO,cACL,KACA;IAAE,KAAK;IAAG,MAAM,SAAS,IAAI,IAAI;IAAG,QAAQ,IAAI;IAAQ,KAAK,IAAI;GAAI,GACrE,GAAG,QACL;EACF;EACA,OAAO,cAAc,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ;CACxD,CAAC;AACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verbaly/react",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "React bindings for Verbaly — hooks over the reactive core.",
5
5
  "keywords": [
6
6
  "i18n",
@@ -48,7 +48,7 @@
48
48
  },
49
49
  "peerDependencies": {
50
50
  "react": "^18.0.0 || ^19.0.0",
51
- "verbaly": "^0.11.0"
51
+ "verbaly": "^0.13.0"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@types/react": "^19.2.17",
@@ -56,11 +56,11 @@
56
56
  "happy-dom": "^20.10.6",
57
57
  "react": "^19.2.7",
58
58
  "react-dom": "^19.2.7",
59
- "verbaly": "0.11.0"
59
+ "verbaly": "0.13.0"
60
60
  },
61
61
  "scripts": {
62
- "build": "tsup",
63
- "dev": "tsup --watch",
62
+ "build": "tsdown",
63
+ "dev": "tsdown --watch",
64
64
  "test": "vitest run --passWithNoTests",
65
65
  "typecheck": "tsc --noEmit"
66
66
  }