@babelize/elements 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +73 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/registry/components/index.d.ts +3 -0
- package/dist/registry/components/index.d.ts.map +1 -0
- package/dist/registry/components/index.js +2 -0
- package/dist/registry/components/index.js.map +1 -0
- package/dist/registry/components/language-switcher.d.ts +83 -0
- package/dist/registry/components/language-switcher.d.ts.map +1 -0
- package/dist/registry/components/language-switcher.js +194 -0
- package/dist/registry/components/language-switcher.js.map +1 -0
- package/package.json +91 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Babelize
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./public/elements_logo.svg" width="341" height="64" alt="Babelize Elements logo" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Babelize Elements</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
Open-source Localization UI components for React and Tailwind CSS.
|
|
9
|
+
<br />
|
|
10
|
+
Copy-paste components for language switchers, locale pickers, translation widgets, and more — built by the community.
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://elements.babelize.co">elements.babelize.co</a>
|
|
15
|
+
·
|
|
16
|
+
<a href="https://github.com/babelize/babelize-elements/issues">Issues</a>
|
|
17
|
+
·
|
|
18
|
+
<a href="https://github.com/babelize/babelize-elements/blob/main/CONTRIBUTING.md">Contributing</a>
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
<p align="center">
|
|
22
|
+
<a href="https://github.com/babelize/babelize-elements/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT" /></a>
|
|
23
|
+
<a href="https://github.com/babelize/babelize-elements/blob/main/CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-Keep%20a%20Changelog-blueviolet.svg" alt="Changelog" /></a>
|
|
24
|
+
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs welcome" />
|
|
25
|
+
<a href="https://github.com/babelize/babelize-elements/discussions"><img src="https://img.shields.io/badge/discussions-Join%20us-blue.svg" alt="Discussions" /></a>
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
## What is Babelize Elements?
|
|
29
|
+
|
|
30
|
+
**Babelize Elements** is a community-built library of copy-paste **Localization UI components** for React and Tailwind CSS. Every localized app needs a language switcher, a locale picker, RTL-aware layouts, and pluralization UI — Elements turns that repetitive work into a shared, open-source toolbox.
|
|
31
|
+
|
|
32
|
+
- **Copy & paste** — grab the code, drop it in your project. No installs, no registry lock-in.
|
|
33
|
+
- **Localization-first** — pluralization, RTL, and locale data built into every component.
|
|
34
|
+
- **Accessible** — keyboard support, ARIA labels, and WCAG-aware markup.
|
|
35
|
+
- **Open source** — MIT-licensed, free forever, built by contributors like you.
|
|
36
|
+
|
|
37
|
+
## Docs & Website
|
|
38
|
+
|
|
39
|
+
The landing page and component documentation live at [elements.babelize.co](https://elements.babelize.co), built with Next.js and [Fumadocs](https://fumadocs.dev).
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
bun install
|
|
43
|
+
bun run dev
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Contributing a component
|
|
47
|
+
|
|
48
|
+
Components are contributed by the community. The typical flow:
|
|
49
|
+
|
|
50
|
+
1. Pick an open [issue](https://github.com/babelize/babelize-elements/issues) — look for `good first issue` or `help wanted`.
|
|
51
|
+
2. Build the component in `src/registry/components/`.
|
|
52
|
+
3. Open a pull request following our [contributing guide](https://github.com/babelize/babelize-elements/blob/main/CONTRIBUTING.md).
|
|
53
|
+
4. Maintainers review it, and merged components ship to the docs for everyone.
|
|
54
|
+
|
|
55
|
+
Great component candidates:
|
|
56
|
+
|
|
57
|
+
- Language switchers (dropdowns, pills, searchable)
|
|
58
|
+
- Locale pickers (regions, currencies, date formats)
|
|
59
|
+
- Translation widgets and inline editors
|
|
60
|
+
- RTL-aware layout primitives
|
|
61
|
+
- Locale-aware date/time pickers
|
|
62
|
+
- Pluralization helpers and CLDR plural-rule UI
|
|
63
|
+
- Locale-aware currency inputs
|
|
64
|
+
|
|
65
|
+
## Community
|
|
66
|
+
|
|
67
|
+
- [Code of Conduct](https://github.com/babelize/babelize-elements/blob/main/CODE_OF_CONDUCT.md)
|
|
68
|
+
- [Security Policy](https://github.com/babelize/babelize-elements/blob/main/SECURITY.md)
|
|
69
|
+
- [Contributing](https://github.com/babelize/babelize-elements/blob/main/CONTRIBUTING.md)
|
|
70
|
+
|
|
71
|
+
## License
|
|
72
|
+
|
|
73
|
+
[MIT](https://github.com/babelize/babelize-elements/blob/main/LICENSE) © [Babelize](https://babelize.co)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/registry/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/registry/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface Locale {
|
|
3
|
+
/** ISO 639-1 / BCP 47 code (e.g. "en", "fr-FR", "ar-SA") */
|
|
4
|
+
code: string;
|
|
5
|
+
/** Override display name (auto-resolved from built-in mapping if omitted) */
|
|
6
|
+
label?: string;
|
|
7
|
+
/** Override flag emoji (auto-detected from code if omitted) */
|
|
8
|
+
flag?: string;
|
|
9
|
+
/** Override RTL (auto-detected from code if omitted) */
|
|
10
|
+
rtl?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface LanguageSwitcherThemeColors {
|
|
13
|
+
/** Button background */
|
|
14
|
+
btnBg: string;
|
|
15
|
+
/** Button border */
|
|
16
|
+
btnBorder: string;
|
|
17
|
+
/** Button text */
|
|
18
|
+
btnText: string;
|
|
19
|
+
/** Chevron and muted icon color */
|
|
20
|
+
iconColor: string;
|
|
21
|
+
/** Dropdown background */
|
|
22
|
+
dropdownBg: string;
|
|
23
|
+
/** Dropdown border */
|
|
24
|
+
dropdownBorder: string;
|
|
25
|
+
/** Dropdown item text */
|
|
26
|
+
itemText: string;
|
|
27
|
+
/** Dropdown item hover background */
|
|
28
|
+
itemHoverBg: string;
|
|
29
|
+
/** Dropdown item hover text */
|
|
30
|
+
itemHoverText: string;
|
|
31
|
+
/** Active item background */
|
|
32
|
+
activeBg: string;
|
|
33
|
+
/** Active item text */
|
|
34
|
+
activeText: string;
|
|
35
|
+
/** Search input background */
|
|
36
|
+
inputBg: string;
|
|
37
|
+
/** Search input text */
|
|
38
|
+
inputText: string;
|
|
39
|
+
/** Search input placeholder */
|
|
40
|
+
inputPlaceholder: string;
|
|
41
|
+
/** Search border */
|
|
42
|
+
inputBorder: string;
|
|
43
|
+
/** No results text */
|
|
44
|
+
noResultsText: string;
|
|
45
|
+
}
|
|
46
|
+
export interface LanguageSwitcherProps {
|
|
47
|
+
/** Array of available locales — only `code` is required */
|
|
48
|
+
locales: Locale[];
|
|
49
|
+
/** Initial selected locale code (default: first locale's code) */
|
|
50
|
+
defaultValue?: string;
|
|
51
|
+
/** Callback when locale changes */
|
|
52
|
+
onValueChange?: (code: string) => void;
|
|
53
|
+
/** Show flag emojis next to locale names (default: false) */
|
|
54
|
+
showFlags?: boolean;
|
|
55
|
+
/** Display labels in native language or English (default: "english") */
|
|
56
|
+
label?: "native" | "english";
|
|
57
|
+
/** Additional CSS classes */
|
|
58
|
+
className?: string;
|
|
59
|
+
/** Theme colors — when provided, component uses inline styles instead of Tailwind dark: variants */
|
|
60
|
+
themeColors?: LanguageSwitcherThemeColors;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Dropdown language switcher with searchable locale list.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```tsx
|
|
67
|
+
* // Simplest — just pass codes
|
|
68
|
+
* <LanguageSwitcher
|
|
69
|
+
* locales={[{ code: "en" }, { code: "fr" }, { code: "ar" }]}
|
|
70
|
+
* defaultValue="en"
|
|
71
|
+
* onValueChange={(code) => router.push(`/${code}`)}
|
|
72
|
+
* />
|
|
73
|
+
*
|
|
74
|
+
* // Native labels + flags
|
|
75
|
+
* <LanguageSwitcher
|
|
76
|
+
* locales={[{ code: "en" }, { code: "fr" }]}
|
|
77
|
+
* label="native"
|
|
78
|
+
* showFlags
|
|
79
|
+
* />
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function LanguageSwitcher({ locales, defaultValue, onValueChange, showFlags, label: labelMode, className, themeColors, }: LanguageSwitcherProps): React.JSX.Element;
|
|
83
|
+
//# sourceMappingURL=language-switcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-switcher.d.ts","sourceRoot":"","sources":["../../../src/registry/components/language-switcher.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,MAAM;IACrB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oGAAoG;IACpG,WAAW,CAAC,EAAE,2BAA2B,CAAC;CAC3C;AA6GD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,YAAY,EACZ,aAAa,EACb,SAAiB,EACjB,KAAK,EAAE,SAAqB,EAC5B,SAAS,EACT,WAAW,GACZ,EAAE,qBAAqB,qBAoLvB"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "@/lib/utils";
|
|
5
|
+
const RTL_LOCALES = new Set(["ar", "he", "fa", "ur", "ps", "sd", "yi"]);
|
|
6
|
+
function isRtl(code) {
|
|
7
|
+
const lang = code.split("-")[0].toLowerCase();
|
|
8
|
+
return RTL_LOCALES.has(lang);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Maps ISO 639-1 language codes to flag emojis via regional indicator symbols.
|
|
12
|
+
* Covers 80+ common languages. Override per-locale with the `flag` prop.
|
|
13
|
+
*/
|
|
14
|
+
const LANG_TO_FLAG = {
|
|
15
|
+
en: "\u{1F1FA}\u{1F1F8}", fr: "\u{1F1EB}\u{1F1F7}", es: "\u{1F1EA}\u{1F1F8}",
|
|
16
|
+
de: "\u{1F1E9}\u{1F1EA}", ja: "\u{1F1EF}\u{1F1F5}", ko: "\u{1F1F0}\u{1F1F7}",
|
|
17
|
+
zh: "\u{1F1E8}\u{1F1F3}", ar: "\u{1F1F8}\u{1F1E6}", pt: "\u{1F1E7}\u{1F1F7}",
|
|
18
|
+
it: "\u{1F1EE}\u{1F1F9}", nl: "\u{1F1F3}\u{1F1F1}", ru: "\u{1F1F7}\u{1F1FA}",
|
|
19
|
+
pl: "\u{1F1F5}\u{1F1F1}", tr: "\u{1F1F9}\u{1F1F7}", vi: "\u{1F1FB}\u{1F1F3}",
|
|
20
|
+
th: "\u{1F1F9}\u{1F1ED}", id: "\u{1F1EE}\u{1F1E9}", hi: "\u{1F1EE}\u{1F1F3}",
|
|
21
|
+
bn: "\u{1F1E7}\u{1F1E9}", uk: "\u{1F1FA}\u{1F1E6}", cs: "\u{1F1E8}\u{1F1FF}",
|
|
22
|
+
sv: "\u{1F1F8}\u{1F1EA}", da: "\u{1F1E9}\u{1F1F0}", fi: "\u{1F1EB}\u{1F1EE}",
|
|
23
|
+
no: "\u{1F1F3}\u{1F1F4}", nb: "\u{1F1F3}\u{1F1F4}", nn: "\u{1F1F3}\u{1F1F4}",
|
|
24
|
+
el: "\u{1F1EC}\u{1F1F7}", he: "\u{1F1EE}\u{1F1F1}", fa: "\u{1F1EE}\u{1F1F7}",
|
|
25
|
+
ro: "\u{1F1F7}\u{1F1F4}", hu: "\u{1F1ED}\u{1F1FA}", sk: "\u{1F1F8}\u{1F1F0}",
|
|
26
|
+
bg: "\u{1F1E7}\u{1F1EC}", hr: "\u{1F1ED}\u{1F1F7}", sr: "\u{1F1F7}\u{1F1F8}",
|
|
27
|
+
sl: "\u{1F1F8}\u{1F1EE}", lt: "\u{1F1F1}\u{1F1F9}", lv: "\u{1F1F1}\u{1F1FB}",
|
|
28
|
+
et: "\u{1F1EA}\u{1F1EA}", ga: "\u{1F1EE}\u{1F1EA}", mt: "\u{1F1F2}\u{1F1F9}",
|
|
29
|
+
ca: "\u{1F1E6}\u{1F1F8}", eu: "\u{1F1E6}\u{1F1F7}", gl: "\u{1F1E6}\u{1F1F7}",
|
|
30
|
+
cy: "\u{1F1FF}\u{1F1F4}", mk: "\u{1F1F2}\u{1F1F0}", sq: "\u{1F1E6}\u{1F1F1}",
|
|
31
|
+
bs: "\u{1F1E7}\u{1F1F8}", is: "\u{1F1EE}\u{1F1F8}", fo: "\u{1F1EB}\u{1F1F4}",
|
|
32
|
+
sw: "\u{1F1F9}\u{1F1FF}", am: "\u{1F1E6}\u{1F1F2}", ne: "\u{1F1F3}\u{1F1F5}",
|
|
33
|
+
si: "\u{1F1F8}\u{1F1F0}", my: "\u{1F1F2}\u{1F1E2}", km: "\u{1F1F0}\u{1F1ED}",
|
|
34
|
+
lo: "\u{1F1F1}\u{1F1E6}", ka: "\u{1F1EC}\u{1F1EA}", hy: "\u{1F1E6}\u{1F1F2}",
|
|
35
|
+
kk: "\u{1F1F0}\u{1F1F0}", uz: "\u{1F1FA}\u{1F1FF}", mn: "\u{1F1F2}\u{1F1F3}",
|
|
36
|
+
ps: "\u{1F1F5}\u{1F1F8}", ur: "\u{1F1FA}\u{1F1F2}", sd: "\u{1F1F8}\u{1F1E6}",
|
|
37
|
+
ml: "\u{1F1F2}\u{1F1F1}", ta: "\u{1F1F9}\u{1F1F1}", te: "\u{1F1F9}\u{1F1EF}",
|
|
38
|
+
kn: "\u{1F1EE}\u{1F1F3}", mr: "\u{1F1F2}\u{1F1F7}", gu: "\u{1F1EC}\u{1F1A9}",
|
|
39
|
+
pa: "\u{1F1F5}\u{1F1E6}", or: "\u{1F1F3}\u{1F1F4}", as: "\u{1F1E6}\u{1F1F8}",
|
|
40
|
+
yi: "\u{1F1FE}\u{1F1EA}", yo: "\u{1F1FE}\u{1F1F3}", ig: "\u{1F1EE}\u{1F1EC}",
|
|
41
|
+
zu: "\u{1F1FF}\u{1F1F3}", af: "\u{1F1E6}\u{1F1FF}",
|
|
42
|
+
ha: "\u{1F1ED}\u{1F1F2}", tl: "\u{1F1F5}\u{1F1ED}", mg: "\u{1F1F2}\u{1F1EC}",
|
|
43
|
+
mi: "\u{1F1F3}\u{1F1FF}", sm: "\u{1F1F8}\u{1F1F4}", fj: "\u{1F1EB}\u{1F1EF}",
|
|
44
|
+
to: "\u{1F1F9}\u{1F1F4}", haw: "\u{1F1ED}\u{1F1FC}", la: "\u{1F1F1}\u{1F1E6}",
|
|
45
|
+
eo: "\u{1F1EA}\u{1F1F7}",
|
|
46
|
+
};
|
|
47
|
+
function getFlag(code) {
|
|
48
|
+
var _a;
|
|
49
|
+
const lang = code.split("-")[0].toLowerCase();
|
|
50
|
+
return (_a = LANG_TO_FLAG[lang]) !== null && _a !== void 0 ? _a : "\u{1F310}"; // 🌐 globe as fallback
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Built-in language names: native form and English form.
|
|
54
|
+
* Used to auto-resolve display labels from just a language code.
|
|
55
|
+
*/
|
|
56
|
+
const LANG_NAMES = {
|
|
57
|
+
en: ["English", "English"], fr: ["Français", "French"], es: ["Español", "Spanish"],
|
|
58
|
+
de: ["Deutsch", "German"], ja: ["日本語", "Japanese"], ko: ["한국어", "Korean"],
|
|
59
|
+
zh: ["中文", "Chinese"], ar: ["العربية", "Arabic"], pt: ["Português", "Portuguese"],
|
|
60
|
+
it: ["Italiano", "Italian"], nl: ["Nederlands", "Dutch"], ru: ["Русский", "Russian"],
|
|
61
|
+
pl: ["Polski", "Polish"], tr: ["Türkçe", "Turkish"], vi: ["Tiếng Việt", "Vietnamese"],
|
|
62
|
+
th: ["ไทย", "Thai"], id: ["Bahasa Indonesia", "Indonesian"], hi: ["हिन्दी", "Hindi"],
|
|
63
|
+
bn: ["বাংলা", "Bengali"], uk: ["Українська", "Ukrainian"], cs: ["Čeština", "Czech"],
|
|
64
|
+
sv: ["Svenska", "Swedish"], da: ["Dansk", "Danish"], fi: ["Suomi", "Finnish"],
|
|
65
|
+
no: ["Norsk", "Norwegian"], nb: ["Norsk bokmål", "Norwegian Bokmål"],
|
|
66
|
+
nn: ["Nynorsk", "Norwegian Nynorsk"], el: ["Ελληνικά", "Greek"],
|
|
67
|
+
he: ["עברית", "Hebrew"], fa: ["فارسی", "Persian"], ro: ["Română", "Romanian"],
|
|
68
|
+
hu: ["Magyar", "Hungarian"], sk: ["Slovenčina", "Slovak"],
|
|
69
|
+
bg: ["Български", "Bulgarian"], hr: ["Hrvatski", "Croatian"],
|
|
70
|
+
sr: ["Српски", "Serbian"], sl: ["Slovenščina", "Slovenian"],
|
|
71
|
+
lt: ["Lietuvių", "Lithuanian"], lv: ["Latviešu", "Latvian"],
|
|
72
|
+
et: ["Eesti", "Estonian"], ga: ["Gaeilge", "Irish"], mt: ["Malti", "Maltese"],
|
|
73
|
+
ca: ["Català", "Catalan"], eu: ["Euskara", "Basque"], gl: ["Galego", "Galician"],
|
|
74
|
+
cy: ["Cymraeg", "Welsh"], mk: ["Македонски", "Macedonian"],
|
|
75
|
+
sq: ["Shqip", "Albanian"], bs: ["Bosanski", "Bosnian"],
|
|
76
|
+
is: ["Íslenska", "Icelandic"], fo: ["Føroyskt", "Faroese"],
|
|
77
|
+
sw: ["Kiswahili", "Swahili"], am: ["አማርኛ", "Amharic"],
|
|
78
|
+
ne: ["नेपाली", "Nepali"], si: ["සිංහල", "Sinhala"],
|
|
79
|
+
my: ["မြန်မာ", "Burmese"], km: ["ខ្មែរ", "Khmer"], lo: ["ລາວ", "Lao"],
|
|
80
|
+
ka: ["ქართული", "Georgian"], hy: ["Հայերեն", "Armenian"],
|
|
81
|
+
kk: ["Қазақ", "Kazakh"], uz: ["Oʻzbek", "Uzbek"],
|
|
82
|
+
mn: ["Монгол", "Mongolian"], ps: ["پښتو", "Pashto"],
|
|
83
|
+
ur: ["اردو", "Urdu"], sd: ["سنڌي", "Sindhi"],
|
|
84
|
+
ml: ["മലയാളം", "Malayalam"], ta: ["தமிழ்", "Tamil"],
|
|
85
|
+
te: ["తెలుగు", "Telugu"], kn: ["ಕನ್ನಡ", "Kannada"],
|
|
86
|
+
mr: ["मराठी", "Marathi"], gu: ["ગુજરાતી", "Gujarati"],
|
|
87
|
+
pa: ["ਪੰਜਾਬੀ", "Punjabi"], or: ["ଓଡ଼ିଆ", "Odia"],
|
|
88
|
+
as: ["অসমীয়া", "Assamese"], yi: ["ייִדיש", "Yiddish"],
|
|
89
|
+
yo: ["Yorùbá", "Yoruba"], ig: ["Igbo", "Igbo"],
|
|
90
|
+
zu: ["isiZulu", "Zulu"], af: ["Afrikaans", "Afrikaans"],
|
|
91
|
+
ha: ["Hausa", "Hausa"], tl: ["Filipino", "Filipino"],
|
|
92
|
+
mg: ["Malagasy", "Malagasy"], mi: ["Te Reo Māori", "Māori"],
|
|
93
|
+
sm: ["Gagana Samoa", "Samoan"], to: ["Lea Faka-Tonga", "Tongan"],
|
|
94
|
+
fj: ["Na Vosa Vakaviti", "Fijian"], haw: ["ʻŌlelo Hawaiʻi", "Hawaiian"],
|
|
95
|
+
la: ["Latina", "Latin"], eo: ["Esperanto", "Esperanto"],
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Get the display label for a locale.
|
|
99
|
+
* Falls back to `code` if no mapping found.
|
|
100
|
+
*/
|
|
101
|
+
function getLabel(code, mode) {
|
|
102
|
+
const lang = code.split("-")[0].toLowerCase();
|
|
103
|
+
const names = LANG_NAMES[lang];
|
|
104
|
+
if (!names)
|
|
105
|
+
return code;
|
|
106
|
+
return mode === "native" ? names[0] : names[1];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Dropdown language switcher with searchable locale list.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```tsx
|
|
113
|
+
* // Simplest — just pass codes
|
|
114
|
+
* <LanguageSwitcher
|
|
115
|
+
* locales={[{ code: "en" }, { code: "fr" }, { code: "ar" }]}
|
|
116
|
+
* defaultValue="en"
|
|
117
|
+
* onValueChange={(code) => router.push(`/${code}`)}
|
|
118
|
+
* />
|
|
119
|
+
*
|
|
120
|
+
* // Native labels + flags
|
|
121
|
+
* <LanguageSwitcher
|
|
122
|
+
* locales={[{ code: "en" }, { code: "fr" }]}
|
|
123
|
+
* label="native"
|
|
124
|
+
* showFlags
|
|
125
|
+
* />
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export function LanguageSwitcher({ locales, defaultValue, onValueChange, showFlags = false, label: labelMode = "english", className, themeColors, }) {
|
|
129
|
+
var _a, _b, _c;
|
|
130
|
+
const [locale, setLocale] = React.useState((_b = defaultValue !== null && defaultValue !== void 0 ? defaultValue : (_a = locales[0]) === null || _a === void 0 ? void 0 : _a.code) !== null && _b !== void 0 ? _b : "");
|
|
131
|
+
const [open, setOpen] = React.useState(false);
|
|
132
|
+
const [search, setSearch] = React.useState("");
|
|
133
|
+
const ref = React.useRef(null);
|
|
134
|
+
const inputRef = React.useRef(null);
|
|
135
|
+
const resolveLabel = (l) => { var _a; return (_a = l.label) !== null && _a !== void 0 ? _a : getLabel(l.code, labelMode); };
|
|
136
|
+
const activeLocale = locales.find((l) => l.code === locale);
|
|
137
|
+
const filtered = locales.filter((l) => resolveLabel(l).toLowerCase().includes(search.toLowerCase()) ||
|
|
138
|
+
l.code.toLowerCase().includes(search.toLowerCase()));
|
|
139
|
+
const dir = isRtl(locale) ? "rtl" : "ltr";
|
|
140
|
+
const hasTheme = !!themeColors;
|
|
141
|
+
const tc = themeColors;
|
|
142
|
+
React.useEffect(() => {
|
|
143
|
+
function handleClickOutside(e) {
|
|
144
|
+
if (ref.current && !ref.current.contains(e.target)) {
|
|
145
|
+
setOpen(false);
|
|
146
|
+
setSearch("");
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
150
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
151
|
+
}, []);
|
|
152
|
+
React.useEffect(() => {
|
|
153
|
+
var _a;
|
|
154
|
+
if (open)
|
|
155
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
156
|
+
}, [open]);
|
|
157
|
+
React.useEffect(() => {
|
|
158
|
+
function handleKeyDown(e) {
|
|
159
|
+
if (e.key === "Escape") {
|
|
160
|
+
setOpen(false);
|
|
161
|
+
setSearch("");
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (open) {
|
|
165
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
166
|
+
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
167
|
+
}
|
|
168
|
+
}, [open]);
|
|
169
|
+
return (_jsxs("div", { ref: ref, className: cn("relative inline-block text-sm z-50", className), children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), className: cn("inline-flex items-center gap-2 rounded-lg px-3 py-2 text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-emerald-500/50", dir === "rtl" && "flex-row-reverse", !hasTheme && "border border-black/10 dark:border-white/10 bg-black/5 dark:bg-white/5 text-black/80 dark:text-white/80 hover:bg-black/10 dark:hover:bg-white/10"), style: hasTheme ? { background: tc.btnBg, borderColor: tc.btnBorder, color: tc.btnText } : undefined, "aria-expanded": open, "aria-haspopup": "listbox", "aria-label": `Current language: ${activeLocale ? resolveLabel(activeLocale) : locale}`, children: [showFlags && _jsx("span", { className: "text-base", children: (_c = activeLocale === null || activeLocale === void 0 ? void 0 : activeLocale.flag) !== null && _c !== void 0 ? _c : getFlag(locale) }), _jsx("span", { children: activeLocale ? resolveLabel(activeLocale) : locale }), _jsx("svg", { className: cn("size-4 transition-transform", open && "rotate-180", !hasTheme && "text-black/40 dark:text-white/40"), style: hasTheme ? { color: tc.iconColor } : undefined, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) })] }), open && (_jsxs("div", { className: cn("absolute z-50 mt-1 min-w-[200px] overflow-hidden rounded-xl shadow-xl", !hasTheme && "border border-black/10 dark:border-white/10 bg-white dark:bg-[#111]"), style: hasTheme ? { background: tc.dropdownBg, borderColor: tc.dropdownBorder } : undefined, role: "listbox", "aria-label": "Select language", children: [_jsx("div", { className: cn("p-2", !hasTheme && "border-b border-black/5 dark:border-white/5"), style: hasTheme ? { borderBottom: `1px solid ${tc.inputBorder}` } : undefined, children: _jsx("input", { ref: inputRef, type: "text", placeholder: "Search...", value: search, onChange: (e) => setSearch(e.target.value), className: cn("w-full rounded-lg px-3 py-1.5 text-sm outline-none focus:ring-1 focus:ring-emerald-500/50", !hasTheme && "bg-black/5 dark:bg-white/5 text-black dark:text-white placeholder-black/30 dark:placeholder-white/30"), style: hasTheme ? { background: tc.inputBg, color: tc.inputText } : undefined }) }), _jsxs("div", { className: "max-h-60 overflow-y-auto p-1", children: [filtered.map((l) => {
|
|
170
|
+
var _a;
|
|
171
|
+
const isActive = l.code === locale;
|
|
172
|
+
const itemDir = l.rtl || isRtl(l.code) ? "rtl" : "ltr";
|
|
173
|
+
return (_jsxs("button", { type: "button", role: "option", "aria-selected": isActive, dir: itemDir, onClick: () => {
|
|
174
|
+
setLocale(l.code);
|
|
175
|
+
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(l.code);
|
|
176
|
+
setOpen(false);
|
|
177
|
+
setSearch("");
|
|
178
|
+
}, className: cn("flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-sm transition-colors", itemDir === "rtl" && "flex-row-reverse text-right", !hasTheme && (isActive
|
|
179
|
+
? "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400"
|
|
180
|
+
: "text-black/60 dark:text-white/70 hover:bg-black/5 dark:hover:bg-white/5 hover:text-black dark:hover:text-white")), style: hasTheme
|
|
181
|
+
? {
|
|
182
|
+
background: isActive ? tc.activeBg : undefined,
|
|
183
|
+
color: isActive ? tc.activeText : tc.itemText,
|
|
184
|
+
}
|
|
185
|
+
: undefined, onMouseEnter: (e) => {
|
|
186
|
+
if (hasTheme && !isActive)
|
|
187
|
+
e.currentTarget.style.background = tc.itemHoverBg;
|
|
188
|
+
}, onMouseLeave: (e) => {
|
|
189
|
+
if (hasTheme && !isActive)
|
|
190
|
+
e.currentTarget.style.background = "transparent";
|
|
191
|
+
}, children: [showFlags && _jsx("span", { className: "text-base", children: (_a = l.flag) !== null && _a !== void 0 ? _a : getFlag(l.code) }), _jsx("span", { className: "flex-1", children: resolveLabel(l) }), isActive && (_jsx("svg", { className: "size-4", style: { color: tc === null || tc === void 0 ? void 0 : tc.activeText }, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }) }))] }, l.code));
|
|
192
|
+
}), filtered.length === 0 && (_jsx("div", { className: cn("px-3 py-2 text-sm", !hasTheme && "text-black/30 dark:text-white/30"), style: hasTheme ? { color: tc.noResultsText } : undefined, children: "No results" }))] })] }))] }));
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=language-switcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-switcher.js","sourceRoot":"","sources":["../../../src/registry/components/language-switcher.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAiEjC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAExE,SAAS,KAAK,CAAC,IAAY;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,YAAY,GAA2B;IAC3C,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAClD,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB;IAC5E,EAAE,EAAE,oBAAoB,EAAE,GAAG,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBA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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@babelize/elements",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Open-source copy-paste Localization UI components for React and Tailwind CSS",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/registry/components/index.js",
|
|
8
|
+
"module": "./dist/registry/components/index.js",
|
|
9
|
+
"types": "./dist/registry/components/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/registry/components/index.d.ts",
|
|
13
|
+
"import": "./dist/registry/components/index.js",
|
|
14
|
+
"require": "./dist/registry/components/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./style.css": "./dist/style.css"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"dev": "next dev",
|
|
28
|
+
"build": "next build",
|
|
29
|
+
"build:lib": "tsc --project tsconfig.lib.json",
|
|
30
|
+
"start": "next start",
|
|
31
|
+
"lint": "eslint",
|
|
32
|
+
"typecheck": "tsc --noEmit",
|
|
33
|
+
"release": "changeset publish",
|
|
34
|
+
"version": "changeset version"
|
|
35
|
+
},
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "https://github.com/babelize/babelize-elements.git"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"react",
|
|
42
|
+
"i18n",
|
|
43
|
+
"localization",
|
|
44
|
+
"internationalization",
|
|
45
|
+
"tailwindcss",
|
|
46
|
+
"components",
|
|
47
|
+
"language-switcher",
|
|
48
|
+
"locale-picker",
|
|
49
|
+
"rtl",
|
|
50
|
+
"nextjs"
|
|
51
|
+
],
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"react": ">=18",
|
|
54
|
+
"react-dom": ">=18",
|
|
55
|
+
"tailwindcss": ">=3"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"clsx": "^2.1.1",
|
|
59
|
+
"next-themes": "^0.4.6",
|
|
60
|
+
"tailwind-merge": "^3.6.0"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@changesets/cli": "^3.0.0",
|
|
64
|
+
"@tailwindcss/postcss": "^4",
|
|
65
|
+
"@types/node": "^20",
|
|
66
|
+
"@types/react": "^19",
|
|
67
|
+
"@types/react-dom": "^19",
|
|
68
|
+
"eslint": "^9",
|
|
69
|
+
"eslint-config-next": "16.3.0",
|
|
70
|
+
"fumadocs-core": "^16.14.0",
|
|
71
|
+
"fumadocs-mdx": "^15.2.2",
|
|
72
|
+
"fumadocs-ui": "^16.14.0",
|
|
73
|
+
"geist": "^1.7.2",
|
|
74
|
+
"lucide-react": "^1.28.0",
|
|
75
|
+
"motion": "^12.43.0",
|
|
76
|
+
"next": "16.3.0",
|
|
77
|
+
"react": "19.2.8",
|
|
78
|
+
"react-dom": "19.2.8",
|
|
79
|
+
"tailwindcss": "^4",
|
|
80
|
+
"typescript": "^5"
|
|
81
|
+
},
|
|
82
|
+
"packageManager": "bun@1.3.14",
|
|
83
|
+
"ignoreScripts": [
|
|
84
|
+
"sharp",
|
|
85
|
+
"unrs-resolver"
|
|
86
|
+
],
|
|
87
|
+
"trustedDependencies": [
|
|
88
|
+
"sharp",
|
|
89
|
+
"unrs-resolver"
|
|
90
|
+
]
|
|
91
|
+
}
|