@geenius/i18n 0.1.0 → 0.3.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.
Files changed (117) hide show
  1. package/README.md +134 -1
  2. package/package.json +16 -3
  3. package/packages/convex/dist/index.d.ts +62 -0
  4. package/packages/convex/dist/index.js +157 -0
  5. package/packages/convex/dist/index.js.map +1 -0
  6. package/packages/react/README.md +1 -1
  7. package/packages/react/dist/index.d.ts +100 -0
  8. package/packages/react/dist/index.js +284 -0
  9. package/packages/react/dist/index.js.map +1 -0
  10. package/packages/react-css/README.md +1 -1
  11. package/packages/react-css/dist/index.d.ts +34 -0
  12. package/packages/react-css/dist/index.js +134 -0
  13. package/packages/react-css/dist/index.js.map +1 -0
  14. package/packages/shared/README.md +1 -1
  15. package/packages/shared/dist/index.d.ts +77 -0
  16. package/packages/shared/dist/index.js +158 -0
  17. package/packages/shared/dist/index.js.map +1 -0
  18. package/packages/solidjs/README.md +1 -1
  19. package/packages/solidjs/dist/index.d.ts +105 -0
  20. package/packages/solidjs/dist/index.js +328 -0
  21. package/packages/solidjs/dist/index.js.map +1 -0
  22. package/packages/solidjs-css/README.md +1 -1
  23. package/packages/solidjs-css/dist/index.d.ts +59 -0
  24. package/packages/solidjs-css/dist/index.js +244 -0
  25. package/packages/solidjs-css/dist/index.js.map +1 -0
  26. package/.changeset/config.json +0 -11
  27. package/.github/CODEOWNERS +0 -1
  28. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
  29. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
  30. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  31. package/.github/dependabot.yml +0 -11
  32. package/.github/workflows/ci.yml +0 -23
  33. package/.github/workflows/release.yml +0 -29
  34. package/.nvmrc +0 -1
  35. package/.project/ACCOUNT.yaml +0 -4
  36. package/.project/IDEAS.yaml +0 -7
  37. package/.project/PROJECT.yaml +0 -11
  38. package/.project/ROADMAP.yaml +0 -15
  39. package/CODE_OF_CONDUCT.md +0 -16
  40. package/CONTRIBUTING.md +0 -26
  41. package/SECURITY.md +0 -15
  42. package/SUPPORT.md +0 -8
  43. package/packages/convex/package.json +0 -42
  44. package/packages/convex/src/index.ts +0 -3
  45. package/packages/convex/src/mutations.ts +0 -65
  46. package/packages/convex/src/queries.ts +0 -54
  47. package/packages/convex/src/schema.ts +0 -26
  48. package/packages/convex/tsconfig.json +0 -18
  49. package/packages/convex/tsup.config.ts +0 -17
  50. package/packages/react/package.json +0 -51
  51. package/packages/react/src/components/index.tsx +0 -87
  52. package/packages/react/src/hooks/index.ts +0 -4
  53. package/packages/react/src/hooks/useI18n.tsx +0 -50
  54. package/packages/react/src/hooks/useI18nAdmin.ts +0 -12
  55. package/packages/react/src/hooks/useLocaleDetect.ts +0 -10
  56. package/packages/react/src/hooks/useTranslations.ts +0 -11
  57. package/packages/react/src/index.tsx +0 -8
  58. package/packages/react/src/pages/I18nAdminPage.tsx +0 -42
  59. package/packages/react/src/pages/LocalePreviewPage.tsx +0 -54
  60. package/packages/react/src/pages/index.ts +0 -2
  61. package/packages/react/tsconfig.json +0 -19
  62. package/packages/react/tsup.config.ts +0 -12
  63. package/packages/react-css/package.json +0 -36
  64. package/packages/react-css/src/components/index.tsx +0 -66
  65. package/packages/react-css/src/hooks/index.ts +0 -4
  66. package/packages/react-css/src/index.tsx +0 -4
  67. package/packages/react-css/src/pages/LocaleSettingsPage.tsx +0 -74
  68. package/packages/react-css/src/pages/TranslationsPage.tsx +0 -98
  69. package/packages/react-css/src/styles.css +0 -210
  70. package/packages/react-css/tsconfig.json +0 -19
  71. package/packages/react-css/tsup.config.ts +0 -10
  72. package/packages/shared/package.json +0 -44
  73. package/packages/shared/src/__tests__/i18n.test.ts +0 -78
  74. package/packages/shared/src/config.ts +0 -344
  75. package/packages/shared/src/index.ts +0 -106
  76. package/packages/shared/src/types.ts +0 -51
  77. package/packages/shared/tsconfig.json +0 -18
  78. package/packages/shared/tsup.config.ts +0 -11
  79. package/packages/shared/vitest.config.ts +0 -4
  80. package/packages/solidjs/package.json +0 -47
  81. package/packages/solidjs/src/components/LocaleCard.tsx +0 -44
  82. package/packages/solidjs/src/components/LocaleStatsCard.tsx +0 -35
  83. package/packages/solidjs/src/components/LocaleSwitcher.tsx +0 -65
  84. package/packages/solidjs/src/components/MissingKeyAlert.tsx +0 -21
  85. package/packages/solidjs/src/components/RTLWrapper.tsx +0 -13
  86. package/packages/solidjs/src/components/TranslationKeyRow.tsx +0 -41
  87. package/packages/solidjs/src/components/index.ts +0 -6
  88. package/packages/solidjs/src/index.tsx +0 -8
  89. package/packages/solidjs/src/pages/I18nAdminPage.tsx +0 -188
  90. package/packages/solidjs/src/pages/LocalePreviewPage.tsx +0 -99
  91. package/packages/solidjs/src/pages/index.ts +0 -2
  92. package/packages/solidjs/src/primitives/I18nProvider.tsx +0 -56
  93. package/packages/solidjs/src/primitives/createI18nAdmin.ts +0 -7
  94. package/packages/solidjs/src/primitives/createLocaleDetect.ts +0 -8
  95. package/packages/solidjs/src/primitives/createTranslations.ts +0 -22
  96. package/packages/solidjs/src/primitives/index.ts +0 -4
  97. package/packages/solidjs/tsconfig.json +0 -20
  98. package/packages/solidjs/tsup.config.ts +0 -12
  99. package/packages/solidjs-css/package.json +0 -33
  100. package/packages/solidjs-css/src/components/LocaleCard.tsx +0 -45
  101. package/packages/solidjs-css/src/components/LocaleStatsCard.tsx +0 -43
  102. package/packages/solidjs-css/src/components/LocaleSwitcher.tsx +0 -51
  103. package/packages/solidjs-css/src/components/MissingKeyAlert.tsx +0 -24
  104. package/packages/solidjs-css/src/components/RTLWrapper.tsx +0 -16
  105. package/packages/solidjs-css/src/components/TranslationKeyRow.tsx +0 -47
  106. package/packages/solidjs-css/src/components/index.ts +0 -6
  107. package/packages/solidjs-css/src/i18n.css +0 -1322
  108. package/packages/solidjs-css/src/index.tsx +0 -3
  109. package/packages/solidjs-css/src/pages/I18nAdminPage.tsx +0 -134
  110. package/packages/solidjs-css/src/pages/LocalePreviewPage.tsx +0 -116
  111. package/packages/solidjs-css/src/pages/index.ts +0 -2
  112. package/packages/solidjs-css/src/primitives/index.ts +0 -1
  113. package/packages/solidjs-css/tsconfig.json +0 -20
  114. package/packages/solidjs-css/tsup.config.bundled_dcjc4sct21j.mjs +0 -18
  115. package/packages/solidjs-css/tsup.config.ts +0 -14
  116. package/pnpm-workspace.yaml +0 -2
  117. package/tsconfig.json +0 -23
@@ -0,0 +1,244 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+
15
+ // src/index.tsx
16
+ import { I18nProvider as I18nProvider2, createI18n as createI18n2, createTranslations, createLocaleDetect, createI18nAdmin } from "@geenius/i18n-solidjs";
17
+
18
+ // src/components/LocaleSwitcher.tsx
19
+ import { createSignal, Show, For } from "solid-js";
20
+ import { LOCALE_INFO } from "@geenius/i18n-shared";
21
+ var LocaleSwitcher = (props) => {
22
+ const [open, setOpen] = createSignal(false);
23
+ return /* @__PURE__ */ React.createElement("div", { class: "i18n__locale-switcher" }, /* @__PURE__ */ React.createElement(
24
+ "button",
25
+ {
26
+ type: "button",
27
+ class: "i18n__locale-switcher-trigger",
28
+ onClick: () => setOpen((o) => !o)
29
+ },
30
+ /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-switcher-flag" }, LOCALE_INFO[props.current]?.flag),
31
+ /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-switcher-label" }, LOCALE_INFO[props.current]?.nativeName),
32
+ /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-switcher-arrow" }, "\u25BE")
33
+ ), /* @__PURE__ */ React.createElement(Show, { when: open() }, /* @__PURE__ */ React.createElement("div", { class: "i18n__locale-switcher-dropdown" }, /* @__PURE__ */ React.createElement(For, { each: props.locales }, (locale) => {
34
+ const info = LOCALE_INFO[locale];
35
+ return /* @__PURE__ */ React.createElement(
36
+ "button",
37
+ {
38
+ type: "button",
39
+ class: `i18n__locale-switcher-option${locale === props.current ? " i18n__locale-switcher-option--active" : ""}`,
40
+ onClick: () => {
41
+ props.onChange(locale);
42
+ setOpen(false);
43
+ }
44
+ },
45
+ /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-switcher-option-flag" }, info?.flag),
46
+ /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-switcher-option-name" }, info?.nativeName),
47
+ /* @__PURE__ */ React.createElement(Show, { when: info?.direction === "rtl" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-switcher-option-rtl" }, "RTL"))
48
+ );
49
+ }))));
50
+ };
51
+
52
+ // src/components/RTLWrapper.tsx
53
+ import { LOCALE_INFO as LOCALE_INFO2 } from "@geenius/i18n-shared";
54
+ var RTLWrapper = (props) => {
55
+ const dir = () => props.locale ? LOCALE_INFO2[props.locale]?.direction ?? "ltr" : "ltr";
56
+ return /* @__PURE__ */ React.createElement(
57
+ "div",
58
+ {
59
+ class: `i18n__rtl-wrapper i18n__rtl-wrapper--${dir()}`,
60
+ dir: dir()
61
+ },
62
+ props.children
63
+ );
64
+ };
65
+
66
+ // src/components/LocaleStatsCard.tsx
67
+ import { Show as Show2 } from "solid-js";
68
+ import { LOCALE_INFO as LOCALE_INFO3 } from "@geenius/i18n-shared";
69
+ var LocaleStatsCard = (props) => {
70
+ const info = () => LOCALE_INFO3[props.stat.locale];
71
+ const barModifier = () => props.stat.coverage >= 90 ? "i18n__stats-card-bar-fill--complete" : props.stat.coverage >= 70 ? "i18n__stats-card-bar-fill--partial" : "i18n__stats-card-bar-fill--low";
72
+ return /* @__PURE__ */ React.createElement("div", { class: "i18n__stats-card" }, /* @__PURE__ */ React.createElement("div", { class: "i18n__stats-card-header" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__stats-card-flag" }, info()?.flag), /* @__PURE__ */ React.createElement("span", { class: "i18n__stats-card-locale" }, info()?.nativeName)), /* @__PURE__ */ React.createElement("div", { class: "i18n__stats-card-coverage" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__stats-card-keys" }, props.stat.totalKeys, " keys"), /* @__PURE__ */ React.createElement("span", { class: "i18n__stats-card-percent" }, props.stat.coverage, "%")), /* @__PURE__ */ React.createElement("div", { class: "i18n__stats-card-bar" }, /* @__PURE__ */ React.createElement(
73
+ "div",
74
+ {
75
+ class: `i18n__stats-card-bar-fill ${barModifier()}`,
76
+ style: { width: `${props.stat.coverage}%` }
77
+ }
78
+ )), /* @__PURE__ */ React.createElement("div", { class: "i18n__stats-card-counts" }, /* @__PURE__ */ React.createElement(Show2, { when: props.stat.missingKeys > 0 }, /* @__PURE__ */ React.createElement("span", { class: "i18n__stats-card-missing" }, props.stat.missingKeys, " missing")), /* @__PURE__ */ React.createElement(Show2, { when: props.stat.missingKeys === 0 }, /* @__PURE__ */ React.createElement("span", { class: "i18n__stats-card-complete" }, "Complete"))));
79
+ };
80
+
81
+ // src/components/MissingKeyAlert.tsx
82
+ import { Show as Show3 } from "solid-js";
83
+ import { LOCALE_INFO as LOCALE_INFO4 } from "@geenius/i18n-shared";
84
+ var MissingKeyAlert = (props) => {
85
+ return /* @__PURE__ */ React.createElement(Show3, { when: props.count > 0 }, /* @__PURE__ */ React.createElement("div", { class: "i18n__missing-alert" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__missing-alert-icon" }, "\u26A0\uFE0F"), /* @__PURE__ */ React.createElement("span", { class: "i18n__missing-alert-text" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__missing-alert-count" }, props.count), " ", "missing key", props.count > 1 ? "s" : "", " for", " ", /* @__PURE__ */ React.createElement("strong", null, LOCALE_INFO4[props.locale]?.name))));
86
+ };
87
+
88
+ // src/components/TranslationKeyRow.tsx
89
+ import { Show as Show4 } from "solid-js";
90
+ var TranslationKeyRow = (props) => {
91
+ return /* @__PURE__ */ React.createElement("div", { class: "i18n__key-row" }, /* @__PURE__ */ React.createElement("div", { class: "i18n__key-row-key" }, props.translationKey), /* @__PURE__ */ React.createElement("div", { class: "i18n__key-row-value" }, props.value), /* @__PURE__ */ React.createElement("div", { class: "i18n__key-row-locale" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__key-row-locale-badge" }, props.locale.toUpperCase()), /* @__PURE__ */ React.createElement(Show4, { when: props.namespace }, /* @__PURE__ */ React.createElement("span", { class: "i18n__key-row-namespace" }, props.namespace))), /* @__PURE__ */ React.createElement("div", { class: "i18n__key-row-actions" }, /* @__PURE__ */ React.createElement(Show4, { when: props.onEdit }, /* @__PURE__ */ React.createElement(
92
+ "button",
93
+ {
94
+ type: "button",
95
+ class: "i18n__key-row-btn i18n__key-row-btn--edit",
96
+ onClick: () => props.onEdit?.(props.translationKey, props.value)
97
+ },
98
+ "Edit"
99
+ )), /* @__PURE__ */ React.createElement(Show4, { when: props.onDelete }, /* @__PURE__ */ React.createElement(
100
+ "button",
101
+ {
102
+ type: "button",
103
+ class: "i18n__key-row-btn i18n__key-row-btn--delete",
104
+ onClick: () => props.onDelete?.(props.translationKey)
105
+ },
106
+ "Delete"
107
+ ))));
108
+ };
109
+
110
+ // src/components/LocaleCard.tsx
111
+ import { Show as Show5 } from "solid-js";
112
+ import { LOCALE_INFO as LOCALE_INFO5 } from "@geenius/i18n-shared";
113
+ var LocaleCard = (props) => {
114
+ const info = () => LOCALE_INFO5[props.locale];
115
+ const barModifier = () => props.coverage >= 90 ? "i18n__locale-card-bar-fill--complete" : props.coverage >= 70 ? "i18n__locale-card-bar-fill--partial" : "i18n__locale-card-bar-fill--low";
116
+ return /* @__PURE__ */ React.createElement(
117
+ "button",
118
+ {
119
+ type: "button",
120
+ class: `i18n__locale-card${props.isSelected ? " i18n__locale-card--selected" : ""}`,
121
+ onClick: () => props.onSelect(props.locale)
122
+ },
123
+ /* @__PURE__ */ React.createElement("div", { class: "i18n__locale-card-header" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-card-flag" }, info()?.flag), /* @__PURE__ */ React.createElement("div", { class: "i18n__locale-card-info" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-card-name" }, info()?.nativeName), /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-card-code" }, info()?.name, " \u2014 ", props.locale.toUpperCase())), /* @__PURE__ */ React.createElement(Show5, { when: info()?.direction === "rtl" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-card-rtl" }, "RTL"))),
124
+ /* @__PURE__ */ React.createElement("div", { class: "i18n__locale-card-bar" }, /* @__PURE__ */ React.createElement(
125
+ "div",
126
+ {
127
+ class: `i18n__locale-card-bar-fill ${barModifier()}`,
128
+ style: { width: `${props.coverage}%` }
129
+ }
130
+ )),
131
+ /* @__PURE__ */ React.createElement("span", { class: "i18n__locale-card-coverage" }, props.coverage, "%")
132
+ );
133
+ };
134
+
135
+ // src/pages/I18nAdminPage.tsx
136
+ import { createSignal as createSignal2, createMemo, Show as Show6, For as For2 } from "solid-js";
137
+ import { LOCALE_INFO as LOCALE_INFO6, ALL_LOCALES } from "@geenius/i18n-shared";
138
+ var I18nAdminPage = (props) => {
139
+ const locales = () => props.supportedLocales ?? ALL_LOCALES;
140
+ const [selectedLocale, setSelectedLocale] = createSignal2(locales()[0] ?? "en");
141
+ const [search, setSearch] = createSignal2("");
142
+ const allStats = () => props.stats ?? [];
143
+ const allTranslations = () => props.translations ?? {};
144
+ const selectedStat = createMemo(
145
+ () => allStats().find((s) => s.locale === selectedLocale())
146
+ );
147
+ const missingCount = createMemo(() => selectedStat()?.missingKeys ?? 0);
148
+ const translationEntries = createMemo(() => {
149
+ const localeTranslations = allTranslations()[selectedLocale()];
150
+ if (!localeTranslations) return [];
151
+ const entries = Object.entries(localeTranslations);
152
+ const q = search().toLowerCase();
153
+ if (!q) return entries;
154
+ return entries.filter(
155
+ ([key, value]) => key.toLowerCase().includes(q) || value.toLowerCase().includes(q)
156
+ );
157
+ });
158
+ const coverageForLocale = (locale) => {
159
+ const stat = allStats().find((s) => s.locale === locale);
160
+ return stat?.coverage ?? 0;
161
+ };
162
+ return /* @__PURE__ */ React.createElement("div", { class: "i18n__admin-page" }, /* @__PURE__ */ React.createElement("div", { class: "i18n__admin-container" }, /* @__PURE__ */ React.createElement("div", { class: "i18n__page-header" }, /* @__PURE__ */ React.createElement("h1", { class: "i18n__page-title" }, "Translation Admin"), /* @__PURE__ */ React.createElement("p", { class: "i18n__page-subtitle" }, "Manage translations across all supported locales")), /* @__PURE__ */ React.createElement("div", { class: "i18n__admin-body" }, /* @__PURE__ */ React.createElement(Show6, { when: allStats().length > 0 }, /* @__PURE__ */ React.createElement("section", { class: "i18n__admin-section" }, /* @__PURE__ */ React.createElement("h2", { class: "i18n__admin-section-title" }, "Locale Coverage"), /* @__PURE__ */ React.createElement("div", { class: "i18n__stats-grid" }, /* @__PURE__ */ React.createElement(For2, { each: allStats() }, (stat) => /* @__PURE__ */ React.createElement(LocaleStatsCard, { stat }))))), /* @__PURE__ */ React.createElement(MissingKeyAlert, { count: missingCount(), locale: selectedLocale() }), /* @__PURE__ */ React.createElement("section", { class: "i18n__admin-section" }, /* @__PURE__ */ React.createElement("h2", { class: "i18n__admin-section-title" }, "Select Locale"), /* @__PURE__ */ React.createElement("div", { class: "i18n__locale-grid" }, /* @__PURE__ */ React.createElement(For2, { each: locales() }, (locale) => /* @__PURE__ */ React.createElement(
163
+ LocaleCard,
164
+ {
165
+ locale,
166
+ coverage: coverageForLocale(locale),
167
+ isSelected: locale === selectedLocale(),
168
+ onSelect: setSelectedLocale
169
+ }
170
+ )))), /* @__PURE__ */ React.createElement("section", { class: "i18n__admin-section" }, /* @__PURE__ */ React.createElement("div", { class: "i18n__admin-section-header" }, /* @__PURE__ */ React.createElement("h2", { class: "i18n__admin-section-title" }, "Translations \u2014 ", LOCALE_INFO6[selectedLocale()]?.nativeName), /* @__PURE__ */ React.createElement(
171
+ "input",
172
+ {
173
+ type: "text",
174
+ class: "i18n__search-input",
175
+ placeholder: "Search keys or values\u2026",
176
+ value: search(),
177
+ onInput: (e) => setSearch(e.currentTarget.value)
178
+ }
179
+ )), /* @__PURE__ */ React.createElement(
180
+ Show6,
181
+ {
182
+ when: translationEntries().length > 0,
183
+ fallback: /* @__PURE__ */ React.createElement("div", { class: "i18n__empty-state" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__empty-state-icon" }, "\u{1F310}"), /* @__PURE__ */ React.createElement("p", { class: "i18n__empty-state-text" }, "No translations for ", LOCALE_INFO6[selectedLocale()]?.name))
184
+ },
185
+ /* @__PURE__ */ React.createElement("div", { class: "i18n__translation-list" }, /* @__PURE__ */ React.createElement(For2, { each: translationEntries() }, ([key, value]) => /* @__PURE__ */ React.createElement(
186
+ TranslationKeyRow,
187
+ {
188
+ translationKey: key,
189
+ value,
190
+ locale: selectedLocale(),
191
+ onEdit: (k, v) => props.onUpsert?.(selectedLocale(), k, v),
192
+ onDelete: (k) => props.onDelete?.(selectedLocale(), k)
193
+ }
194
+ )))
195
+ )))));
196
+ };
197
+
198
+ // src/pages/LocalePreviewPage.tsx
199
+ import { Show as Show7 } from "solid-js";
200
+ import { LOCALE_INFO as LOCALE_INFO7, ALL_LOCALES as ALL_LOCALES2 } from "@geenius/i18n-shared";
201
+
202
+ // src/primitives/index.ts
203
+ var primitives_exports = {};
204
+ __reExport(primitives_exports, i18n_solidjs_star);
205
+ import * as i18n_solidjs_star from "@geenius/i18n-solidjs";
206
+
207
+ // src/pages/LocalePreviewPage.tsx
208
+ function PreviewInfoCard(props) {
209
+ return /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-info-card" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__preview-info-label" }, props.label), /* @__PURE__ */ React.createElement("span", { class: `i18n__preview-info-value${props.highlight ? " i18n__preview-info-value--highlight" : ""}` }, props.value));
210
+ }
211
+ function FormatExample(props) {
212
+ return /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-example" }, /* @__PURE__ */ React.createElement("span", { class: "i18n__preview-label" }, props.label), /* @__PURE__ */ React.createElement("span", { class: "i18n__preview-value" }, props.value));
213
+ }
214
+ function PreviewContent() {
215
+ const { locale, t, direction, isRTL, setLocale, formatDate, formatNumber, formatCurrency } = (0, primitives_exports.createI18n)();
216
+ const info = () => LOCALE_INFO7[locale()];
217
+ return /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-page" }, /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-container" }, /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-header" }, /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-header-text" }, /* @__PURE__ */ React.createElement("h1", { class: "i18n__preview-title" }, "Locale Preview"), /* @__PURE__ */ React.createElement("p", { class: "i18n__preview-subtitle" }, "Live preview of locale formatting and direction")), /* @__PURE__ */ React.createElement(LocaleSwitcher, { locales: ALL_LOCALES2, current: locale(), onChange: setLocale })), /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-info-grid" }, /* @__PURE__ */ React.createElement(PreviewInfoCard, { label: "Locale", value: locale().toUpperCase() }), /* @__PURE__ */ React.createElement(PreviewInfoCard, { label: "Direction", value: direction(), highlight: isRTL() }), /* @__PURE__ */ React.createElement(PreviewInfoCard, { label: "Native Name", value: info()?.nativeName ?? "?" }), /* @__PURE__ */ React.createElement(PreviewInfoCard, { label: "Flag", value: info()?.flag ?? "?" })), /* @__PURE__ */ React.createElement(RTLWrapper, { locale: locale() }, /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-content" }, /* @__PURE__ */ React.createElement("section", { class: "i18n__preview-section" }, /* @__PURE__ */ React.createElement("h3", { class: "i18n__preview-section-title" }, "Formatting Examples"), /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-examples" }, /* @__PURE__ */ React.createElement(FormatExample, { label: "Date", value: formatDate(/* @__PURE__ */ new Date()) }), /* @__PURE__ */ React.createElement(FormatExample, { label: "Date (full)", value: formatDate(/* @__PURE__ */ new Date(), { dateStyle: "full" }) }), /* @__PURE__ */ React.createElement(FormatExample, { label: "Number", value: formatNumber(123456789e-2) }), /* @__PURE__ */ React.createElement(FormatExample, { label: "Currency (USD)", value: formatCurrency(9999.99, "USD") }), /* @__PURE__ */ React.createElement(FormatExample, { label: "Currency (EUR)", value: formatCurrency(4250.5, "EUR") }), /* @__PURE__ */ React.createElement(FormatExample, { label: "Percentage", value: formatNumber(0.85, { style: "percent" }) }))), /* @__PURE__ */ React.createElement(Show7, { when: isRTL() }, /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-rtl-notice" }, "\u26A1 RTL mode active \u2014 text flows right-to-left")), /* @__PURE__ */ React.createElement("section", { class: "i18n__preview-section" }, /* @__PURE__ */ React.createElement("h3", { class: "i18n__preview-section-title" }, "Sample Text"), /* @__PURE__ */ React.createElement("p", { class: "i18n__preview-sample-text" }, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.")), /* @__PURE__ */ React.createElement("section", { class: "i18n__preview-section" }, /* @__PURE__ */ React.createElement("h3", { class: "i18n__preview-section-title" }, "Translation Lookup"), /* @__PURE__ */ React.createElement("div", { class: "i18n__preview-examples" }, /* @__PURE__ */ React.createElement(FormatExample, { label: "greeting", value: t("greeting") }), /* @__PURE__ */ React.createElement(FormatExample, { label: "auth.login", value: t("auth.login") }), /* @__PURE__ */ React.createElement(FormatExample, { label: "dashboard.title", value: t("dashboard.title") })))))));
218
+ }
219
+ var LocalePreviewPage = (props) => {
220
+ const fullConfig = {
221
+ defaultLocale: "en",
222
+ supportedLocales: ALL_LOCALES2,
223
+ detectBrowser: true,
224
+ persistLocale: true,
225
+ ...props.config
226
+ };
227
+ return /* @__PURE__ */ React.createElement(primitives_exports.I18nProvider, { config: fullConfig, translations: props.translations }, /* @__PURE__ */ React.createElement(PreviewContent, null));
228
+ };
229
+ export {
230
+ I18nAdminPage,
231
+ I18nProvider2 as I18nProvider,
232
+ LocaleCard,
233
+ LocalePreviewPage,
234
+ LocaleStatsCard,
235
+ LocaleSwitcher,
236
+ MissingKeyAlert,
237
+ RTLWrapper,
238
+ TranslationKeyRow,
239
+ createI18n2 as createI18n,
240
+ createI18nAdmin,
241
+ createLocaleDetect,
242
+ createTranslations
243
+ };
244
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.tsx","../src/components/LocaleSwitcher.tsx","../src/components/RTLWrapper.tsx","../src/components/LocaleStatsCard.tsx","../src/components/MissingKeyAlert.tsx","../src/components/TranslationKeyRow.tsx","../src/components/LocaleCard.tsx","../src/pages/I18nAdminPage.tsx","../src/pages/LocalePreviewPage.tsx","../src/primitives/index.ts"],"sourcesContent":["export { I18nProvider, createI18n, createTranslations, createLocaleDetect, createI18nAdmin } from '@geenius/i18n-solidjs'\nexport * from './components'\nexport * from './pages'\n","import { createSignal, Show, For } from 'solid-js'\nimport type { Component } from 'solid-js'\nimport type { Locale } from '@geenius/i18n-shared'\nimport { LOCALE_INFO } from '@geenius/i18n-shared'\n\ninterface Props {\n locales: Locale[]\n current: Locale\n onChange: (l: Locale) => void\n}\n\nexport const LocaleSwitcher: Component<Props> = (props) => {\n const [open, setOpen] = createSignal(false)\n\n return (\n <div class=\"i18n__locale-switcher\">\n <button\n type=\"button\"\n class=\"i18n__locale-switcher-trigger\"\n onClick={() => setOpen((o) => !o)}\n >\n <span class=\"i18n__locale-switcher-flag\">{LOCALE_INFO[props.current]?.flag}</span>\n <span class=\"i18n__locale-switcher-label\">{LOCALE_INFO[props.current]?.nativeName}</span>\n <span class=\"i18n__locale-switcher-arrow\">▾</span>\n </button>\n\n <Show when={open()}>\n <div class=\"i18n__locale-switcher-dropdown\">\n <For each={props.locales}>\n {(locale) => {\n const info = LOCALE_INFO[locale]\n return (\n <button\n type=\"button\"\n class={`i18n__locale-switcher-option${locale === props.current ? ' i18n__locale-switcher-option--active' : ''}`}\n onClick={() => { props.onChange(locale); setOpen(false) }}\n >\n <span class=\"i18n__locale-switcher-option-flag\">{info?.flag}</span>\n <span class=\"i18n__locale-switcher-option-name\">{info?.nativeName}</span>\n <Show when={info?.direction === 'rtl'}>\n <span class=\"i18n__locale-switcher-option-rtl\">RTL</span>\n </Show>\n </button>\n )\n }}\n </For>\n </div>\n </Show>\n </div>\n )\n}\n","import type { ParentComponent } from 'solid-js'\nimport type { Locale } from '@geenius/i18n-shared'\nimport { LOCALE_INFO } from '@geenius/i18n-shared'\n\nexport const RTLWrapper: ParentComponent<{ locale?: Locale }> = (props) => {\n const dir = () => props.locale ? LOCALE_INFO[props.locale]?.direction ?? 'ltr' : 'ltr'\n\n return (\n <div\n class={`i18n__rtl-wrapper i18n__rtl-wrapper--${dir()}`}\n dir={dir()}\n >\n {props.children}\n </div>\n )\n}\n","import { Show } from 'solid-js'\nimport type { Component } from 'solid-js'\nimport type { LocaleStat } from '@geenius/i18n-shared'\nimport { LOCALE_INFO } from '@geenius/i18n-shared'\n\ninterface Props {\n stat: LocaleStat\n}\n\nexport const LocaleStatsCard: Component<Props> = (props) => {\n const info = () => LOCALE_INFO[props.stat.locale]\n const barModifier = () =>\n props.stat.coverage >= 90 ? 'i18n__stats-card-bar-fill--complete'\n : props.stat.coverage >= 70 ? 'i18n__stats-card-bar-fill--partial'\n : 'i18n__stats-card-bar-fill--low'\n\n return (\n <div class=\"i18n__stats-card\">\n <div class=\"i18n__stats-card-header\">\n <span class=\"i18n__stats-card-flag\">{info()?.flag}</span>\n <span class=\"i18n__stats-card-locale\">{info()?.nativeName}</span>\n </div>\n <div class=\"i18n__stats-card-coverage\">\n <span class=\"i18n__stats-card-keys\">{props.stat.totalKeys} keys</span>\n <span class=\"i18n__stats-card-percent\">{props.stat.coverage}%</span>\n </div>\n <div class=\"i18n__stats-card-bar\">\n <div\n class={`i18n__stats-card-bar-fill ${barModifier()}`}\n style={{ width: `${props.stat.coverage}%` }}\n />\n </div>\n <div class=\"i18n__stats-card-counts\">\n <Show when={props.stat.missingKeys > 0}>\n <span class=\"i18n__stats-card-missing\">{props.stat.missingKeys} missing</span>\n </Show>\n <Show when={props.stat.missingKeys === 0}>\n <span class=\"i18n__stats-card-complete\">Complete</span>\n </Show>\n </div>\n </div>\n )\n}\n","import { Show } from 'solid-js'\nimport type { Component } from 'solid-js'\nimport type { Locale } from '@geenius/i18n-shared'\nimport { LOCALE_INFO } from '@geenius/i18n-shared'\n\ninterface Props {\n count: number\n locale: Locale\n}\n\nexport const MissingKeyAlert: Component<Props> = (props) => {\n return (\n <Show when={props.count > 0}>\n <div class=\"i18n__missing-alert\">\n <span class=\"i18n__missing-alert-icon\">⚠️</span>\n <span class=\"i18n__missing-alert-text\">\n <span class=\"i18n__missing-alert-count\">{props.count}</span>\n {' '}missing key{props.count > 1 ? 's' : ''} for{' '}\n <strong>{LOCALE_INFO[props.locale]?.name}</strong>\n </span>\n </div>\n </Show>\n )\n}\n","import { Show } from 'solid-js'\nimport type { Component } from 'solid-js'\nimport type { Locale } from '@geenius/i18n-shared'\n\ninterface Props {\n translationKey: string\n value: string\n locale: Locale\n namespace?: string\n onEdit?: (key: string, value: string) => void\n onDelete?: (key: string) => void\n}\n\nexport const TranslationKeyRow: Component<Props> = (props) => {\n return (\n <div class=\"i18n__key-row\">\n <div class=\"i18n__key-row-key\">{props.translationKey}</div>\n <div class=\"i18n__key-row-value\">{props.value}</div>\n <div class=\"i18n__key-row-locale\">\n <span class=\"i18n__key-row-locale-badge\">{props.locale.toUpperCase()}</span>\n <Show when={props.namespace}>\n <span class=\"i18n__key-row-namespace\">{props.namespace}</span>\n </Show>\n </div>\n <div class=\"i18n__key-row-actions\">\n <Show when={props.onEdit}>\n <button\n type=\"button\"\n class=\"i18n__key-row-btn i18n__key-row-btn--edit\"\n onClick={() => props.onEdit?.(props.translationKey, props.value)}\n >\n Edit\n </button>\n </Show>\n <Show when={props.onDelete}>\n <button\n type=\"button\"\n class=\"i18n__key-row-btn i18n__key-row-btn--delete\"\n onClick={() => props.onDelete?.(props.translationKey)}\n >\n Delete\n </button>\n </Show>\n </div>\n </div>\n )\n}\n","import { Show } from 'solid-js'\nimport type { Component } from 'solid-js'\nimport type { Locale } from '@geenius/i18n-shared'\nimport { LOCALE_INFO } from '@geenius/i18n-shared'\n\ninterface Props {\n locale: Locale\n coverage: number\n isSelected: boolean\n onSelect: (l: Locale) => void\n}\n\nexport const LocaleCard: Component<Props> = (props) => {\n const info = () => LOCALE_INFO[props.locale]\n const barModifier = () =>\n props.coverage >= 90 ? 'i18n__locale-card-bar-fill--complete'\n : props.coverage >= 70 ? 'i18n__locale-card-bar-fill--partial'\n : 'i18n__locale-card-bar-fill--low'\n\n return (\n <button\n type=\"button\"\n class={`i18n__locale-card${props.isSelected ? ' i18n__locale-card--selected' : ''}`}\n onClick={() => props.onSelect(props.locale)}\n >\n <div class=\"i18n__locale-card-header\">\n <span class=\"i18n__locale-card-flag\">{info()?.flag}</span>\n <div class=\"i18n__locale-card-info\">\n <span class=\"i18n__locale-card-name\">{info()?.nativeName}</span>\n <span class=\"i18n__locale-card-code\">{info()?.name} — {props.locale.toUpperCase()}</span>\n </div>\n <Show when={info()?.direction === 'rtl'}>\n <span class=\"i18n__locale-card-rtl\">RTL</span>\n </Show>\n </div>\n <div class=\"i18n__locale-card-bar\">\n <div\n class={`i18n__locale-card-bar-fill ${barModifier()}`}\n style={{ width: `${props.coverage}%` }}\n />\n </div>\n <span class=\"i18n__locale-card-coverage\">{props.coverage}%</span>\n </button>\n )\n}\n","import { createSignal, createMemo, Show, For } from 'solid-js'\nimport type { Component } from 'solid-js'\nimport type { Locale, LocaleStat } from '@geenius/i18n-shared'\nimport { LOCALE_INFO, ALL_LOCALES, flattenDict } from '@geenius/i18n-shared'\nimport type { TranslationDict } from '@geenius/i18n-shared'\nimport { LocaleStatsCard } from '../components/LocaleStatsCard'\nimport { MissingKeyAlert } from '../components/MissingKeyAlert'\nimport { TranslationKeyRow } from '../components/TranslationKeyRow'\nimport { LocaleCard } from '../components/LocaleCard'\n\ninterface Props {\n stats?: LocaleStat[]\n translations?: Record<string, Record<string, string>>\n supportedLocales?: Locale[]\n onUpsert?: (locale: string, key: string, value: string) => void\n onDelete?: (locale: string, key: string) => void\n}\n\nexport const I18nAdminPage: Component<Props> = (props) => {\n const locales = () => props.supportedLocales ?? ALL_LOCALES\n const [selectedLocale, setSelectedLocale] = createSignal<Locale>(locales()[0] ?? 'en')\n const [search, setSearch] = createSignal('')\n\n const allStats = () => props.stats ?? []\n const allTranslations = () => props.translations ?? {}\n\n const selectedStat = createMemo(() =>\n allStats().find((s) => s.locale === selectedLocale())\n )\n\n const missingCount = createMemo(() => selectedStat()?.missingKeys ?? 0)\n\n const translationEntries = createMemo(() => {\n const localeTranslations = allTranslations()[selectedLocale()]\n if (!localeTranslations) return []\n const entries = Object.entries(localeTranslations)\n const q = search().toLowerCase()\n if (!q) return entries\n return entries.filter(\n ([key, value]) => key.toLowerCase().includes(q) || value.toLowerCase().includes(q)\n )\n })\n\n const coverageForLocale = (locale: Locale) => {\n const stat = allStats().find((s) => s.locale === locale)\n return stat?.coverage ?? 0\n }\n\n return (\n <div class=\"i18n__admin-page\">\n <div class=\"i18n__admin-container\">\n {/* Header */}\n <div class=\"i18n__page-header\">\n <h1 class=\"i18n__page-title\">Translation Admin</h1>\n <p class=\"i18n__page-subtitle\">Manage translations across all supported locales</p>\n </div>\n\n <div class=\"i18n__admin-body\">\n {/* Stats section */}\n <Show when={allStats().length > 0}>\n <section class=\"i18n__admin-section\">\n <h2 class=\"i18n__admin-section-title\">Locale Coverage</h2>\n <div class=\"i18n__stats-grid\">\n <For each={allStats()}>\n {(stat) => <LocaleStatsCard stat={stat} />}\n </For>\n </div>\n </section>\n </Show>\n\n {/* Missing keys alert */}\n <MissingKeyAlert count={missingCount()} locale={selectedLocale()} />\n\n {/* Locale selector */}\n <section class=\"i18n__admin-section\">\n <h2 class=\"i18n__admin-section-title\">Select Locale</h2>\n <div class=\"i18n__locale-grid\">\n <For each={locales()}>\n {(locale) => (\n <LocaleCard\n locale={locale}\n coverage={coverageForLocale(locale)}\n isSelected={locale === selectedLocale()}\n onSelect={setSelectedLocale}\n />\n )}\n </For>\n </div>\n </section>\n\n {/* Search + translation rows */}\n <section class=\"i18n__admin-section\">\n <div class=\"i18n__admin-section-header\">\n <h2 class=\"i18n__admin-section-title\">\n Translations — {LOCALE_INFO[selectedLocale()]?.nativeName}\n </h2>\n <input\n type=\"text\"\n class=\"i18n__search-input\"\n placeholder=\"Search keys or values…\"\n value={search()}\n onInput={(e) => setSearch(e.currentTarget.value)}\n />\n </div>\n\n <Show\n when={translationEntries().length > 0}\n fallback={\n <div class=\"i18n__empty-state\">\n <span class=\"i18n__empty-state-icon\">🌐</span>\n <p class=\"i18n__empty-state-text\">No translations for {LOCALE_INFO[selectedLocale()]?.name}</p>\n </div>\n }\n >\n <div class=\"i18n__translation-list\">\n <For each={translationEntries()}>\n {([key, value]) => (\n <TranslationKeyRow\n translationKey={key}\n value={value}\n locale={selectedLocale()}\n onEdit={(k, v) => props.onUpsert?.(selectedLocale(), k, v)}\n onDelete={(k) => props.onDelete?.(selectedLocale(), k)}\n />\n )}\n </For>\n </div>\n </Show>\n </section>\n </div>\n </div>\n </div>\n )\n}\n","import { Show } from 'solid-js'\nimport type { Component } from 'solid-js'\nimport type { I18nConfig, TranslationDict } from '@geenius/i18n-shared'\nimport { LOCALE_INFO, ALL_LOCALES } from '@geenius/i18n-shared'\nimport { I18nProvider, createI18n } from '../primitives'\nimport { LocaleSwitcher } from '../components/LocaleSwitcher'\nimport { RTLWrapper } from '../components/RTLWrapper'\n\nfunction PreviewInfoCard(props: { label: string; value: string; highlight?: boolean }) {\n return (\n <div class=\"i18n__preview-info-card\">\n <span class=\"i18n__preview-info-label\">{props.label}</span>\n <span class={`i18n__preview-info-value${props.highlight ? ' i18n__preview-info-value--highlight' : ''}`}>\n {props.value}\n </span>\n </div>\n )\n}\n\nfunction FormatExample(props: { label: string; value: string }) {\n return (\n <div class=\"i18n__preview-example\">\n <span class=\"i18n__preview-label\">{props.label}</span>\n <span class=\"i18n__preview-value\">{props.value}</span>\n </div>\n )\n}\n\nfunction PreviewContent() {\n const { locale, t, direction, isRTL, setLocale, formatDate, formatNumber, formatCurrency } = createI18n()\n const info = () => LOCALE_INFO[locale()]\n\n return (\n <div class=\"i18n__preview-page\">\n <div class=\"i18n__preview-container\">\n {/* Header */}\n <div class=\"i18n__preview-header\">\n <div class=\"i18n__preview-header-text\">\n <h1 class=\"i18n__preview-title\">Locale Preview</h1>\n <p class=\"i18n__preview-subtitle\">Live preview of locale formatting and direction</p>\n </div>\n <LocaleSwitcher locales={ALL_LOCALES} current={locale()} onChange={setLocale} />\n </div>\n\n {/* Info cards */}\n <div class=\"i18n__preview-info-grid\">\n <PreviewInfoCard label=\"Locale\" value={locale().toUpperCase()} />\n <PreviewInfoCard label=\"Direction\" value={direction()} highlight={isRTL()} />\n <PreviewInfoCard label=\"Native Name\" value={info()?.nativeName ?? '?'} />\n <PreviewInfoCard label=\"Flag\" value={info()?.flag ?? '?'} />\n </div>\n\n {/* RTL-aware content */}\n <RTLWrapper locale={locale()}>\n <div class=\"i18n__preview-content\">\n {/* Formatting */}\n <section class=\"i18n__preview-section\">\n <h3 class=\"i18n__preview-section-title\">Formatting Examples</h3>\n <div class=\"i18n__preview-examples\">\n <FormatExample label=\"Date\" value={formatDate(new Date())} />\n <FormatExample label=\"Date (full)\" value={formatDate(new Date(), { dateStyle: 'full' })} />\n <FormatExample label=\"Number\" value={formatNumber(1234567.89)} />\n <FormatExample label=\"Currency (USD)\" value={formatCurrency(9999.99, 'USD')} />\n <FormatExample label=\"Currency (EUR)\" value={formatCurrency(4250.50, 'EUR')} />\n <FormatExample label=\"Percentage\" value={formatNumber(0.85, { style: 'percent' })} />\n </div>\n </section>\n\n {/* RTL notice */}\n <Show when={isRTL()}>\n <div class=\"i18n__preview-rtl-notice\">\n ⚡ RTL mode active — text flows right-to-left\n </div>\n </Show>\n\n {/* Sample text */}\n <section class=\"i18n__preview-section\">\n <h3 class=\"i18n__preview-section-title\">Sample Text</h3>\n <p class=\"i18n__preview-sample-text\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor\n incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud\n exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n </p>\n </section>\n\n {/* Translation test */}\n <section class=\"i18n__preview-section\">\n <h3 class=\"i18n__preview-section-title\">Translation Lookup</h3>\n <div class=\"i18n__preview-examples\">\n <FormatExample label=\"greeting\" value={t('greeting')} />\n <FormatExample label=\"auth.login\" value={t('auth.login')} />\n <FormatExample label=\"dashboard.title\" value={t('dashboard.title')} />\n </div>\n </section>\n </div>\n </RTLWrapper>\n </div>\n </div>\n )\n}\n\nexport const LocalePreviewPage: Component<{ config?: Partial<I18nConfig>; translations?: TranslationDict }> = (props) => {\n const fullConfig: I18nConfig = {\n defaultLocale: 'en',\n supportedLocales: ALL_LOCALES,\n detectBrowser: true,\n persistLocale: true,\n ...props.config,\n }\n\n return (\n <I18nProvider config={fullConfig} translations={props.translations}>\n <PreviewContent />\n </I18nProvider>\n )\n}\n","export * from '@geenius/i18n-solidjs'\n"],"mappings":"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","names":["I18nProvider","createI18n","LOCALE_INFO","Show","LOCALE_INFO","Show","LOCALE_INFO","Show","Show","LOCALE_INFO","createSignal","Show","For","LOCALE_INFO","createSignal","Show","For","LOCALE_INFO","Show","LOCALE_INFO","ALL_LOCALES","LOCALE_INFO","ALL_LOCALES","Show"]}
@@ -1,11 +0,0 @@
1
- {
2
- "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
3
- "changelog": "@changesets/cli/changelog",
4
- "commit": false,
5
- "fixed": [],
6
- "linked": [],
7
- "access": "public",
8
- "baseBranch": "main",
9
- "updateInternalDependencies": "patch",
10
- "ignore": []
11
- }
@@ -1 +0,0 @@
1
- * @mxn2020
@@ -1,16 +0,0 @@
1
- ---
2
- name: Bug Report
3
- about: Report a bug
4
- labels: bug
5
- ---
6
-
7
- ## Describe the bug
8
-
9
- ## Steps to reproduce
10
-
11
- ## Expected behavior
12
-
13
- ## Environment
14
- - Package version:
15
- - Node version:
16
- - OS:
@@ -1,11 +0,0 @@
1
- ---
2
- name: Feature Request
3
- about: Suggest a new feature
4
- labels: enhancement
5
- ---
6
-
7
- ## Problem
8
-
9
- ## Proposed solution
10
-
11
- ## Alternatives considered
@@ -1,10 +0,0 @@
1
- ## What
2
-
3
- ## Why
4
-
5
- ## How
6
-
7
- ## Checklist
8
- - [ ] Tests added/updated
9
- - [ ] `pnpm changeset` run (if applicable)
10
- - [ ] Documentation updated
@@ -1,11 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: "npm"
4
- directory: "/"
5
- schedule:
6
- interval: "weekly"
7
- open-pull-requests-limit: 10
8
- - package-ecosystem: "github-actions"
9
- directory: "/"
10
- schedule:
11
- interval: "weekly"
@@ -1,23 +0,0 @@
1
- name: CI
2
- on:
3
- pull_request:
4
- branches: [main]
5
- push:
6
- branches: [main]
7
-
8
- jobs:
9
- check:
10
- runs-on: ubuntu-latest
11
- steps:
12
- - uses: actions/checkout@v4
13
- - uses: pnpm/action-setup@v4
14
- with:
15
- version: 10
16
- - uses: actions/setup-node@v4
17
- with:
18
- node-version-file: '.nvmrc'
19
- cache: 'pnpm'
20
- - run: pnpm install --frozen-lockfile
21
- - run: pnpm build
22
- - run: pnpm lint
23
- - run: pnpm test
@@ -1,29 +0,0 @@
1
- name: Release
2
- on:
3
- push:
4
- branches: [main]
5
-
6
- concurrency: ${{ github.workflow }}-${{ github.ref }}
7
-
8
- jobs:
9
- release:
10
- runs-on: ubuntu-latest
11
- steps:
12
- - uses: actions/checkout@v4
13
- - uses: pnpm/action-setup@v4
14
- with:
15
- version: 10
16
- - uses: actions/setup-node@v4
17
- with:
18
- node-version-file: '.nvmrc'
19
- cache: 'pnpm'
20
- registry-url: 'https://registry.npmjs.org'
21
- - run: pnpm install --frozen-lockfile
22
- - run: pnpm build
23
- - uses: changesets/action@v1
24
- with:
25
- publish: pnpm changeset publish
26
- version: pnpm changeset version
27
- env:
28
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- 22
@@ -1,4 +0,0 @@
1
- owner: Mehdi Nabhani
2
- email: mehdi@geenius.app
3
- github: mxn2020
4
- organization: geenius
@@ -1,7 +0,0 @@
1
- ideas:
2
- - title: "CLI scaffolding"
3
- description: "Add a create command to geenius-cli for this package"
4
- priority: medium
5
- - title: "Vue adapter"
6
- description: "Add Vue 3 support alongside React and SolidJS"
7
- priority: low
@@ -1,11 +0,0 @@
1
- name: geenius-i18n
2
- description: "Geenius I18n — Internationalization for Convex apps (React + SolidJS)"
3
- category: library
4
- priority: high
5
- tags:
6
- - geenius
7
- - npm-package
8
- - react
9
- - solidjs
10
- deploy_url: null
11
- npm_scope: "@geenius-i18n"
@@ -1,15 +0,0 @@
1
- version: "0.1"
2
- milestones:
3
- - name: "v0.1.0 — Initial Release"
4
- status: in-progress
5
- items:
6
- - "Core shared types and logic"
7
- - "React hooks and components"
8
- - "SolidJS primitives"
9
- - "npm publishing via Changesets"
10
- - name: "v0.2.0 — Stability"
11
- status: planned
12
- items:
13
- - "Test coverage ≥ 50%"
14
- - "API documentation"
15
- - "Convex adapter"
@@ -1,16 +0,0 @@
1
- # Contributor Covenant Code of Conduct
2
-
3
- ## Our Pledge
4
-
5
- We as members, contributors, and leaders pledge to make participation in our
6
- community a harassment-free experience for everyone, regardless of age, body
7
- size, disability, ethnicity, gender identity and expression, level of experience,
8
- education, socio-economic status, nationality, personal appearance, race,
9
- religion, or sexual identity and orientation.
10
-
11
- ## Enforcement
12
-
13
- Instances of abusive, harassing, or otherwise unacceptable behavior may be
14
- reported to the project team at conduct@geenius.app.
15
-
16
- This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1.
package/CONTRIBUTING.md DELETED
@@ -1,26 +0,0 @@
1
- # Contributing to @geenius-i18n
2
-
3
- Thank you for your interest in contributing!
4
-
5
- ## Development Setup
6
-
7
- ```bash
8
- git clone https://github.com/mxn2020/geenius-i18n.git
9
- cd geenius-i18n
10
- pnpm install
11
- pnpm build
12
- pnpm test
13
- ```
14
-
15
- ## Pull Request Process
16
-
17
- 1. Fork the repo and create a feature branch from `main`
18
- 2. Add or update tests as appropriate
19
- 3. Run `pnpm changeset` to describe your changes for the changelog
20
- 4. Open a PR against `main`
21
-
22
- ## Code Style
23
-
24
- - TypeScript strict mode
25
- - ESLint + Prettier formatting
26
- - Conventional commits preferred
package/SECURITY.md DELETED
@@ -1,15 +0,0 @@
1
- # Security Policy
2
-
3
- ## Supported Versions
4
-
5
- | Version | Supported |
6
- | ------- | --------- |
7
- | 0.x.x | ✅ |
8
-
9
- ## Reporting a Vulnerability
10
-
11
- Please report security vulnerabilities by emailing **security@geenius.app**.
12
-
13
- Do **not** open a public GitHub issue for security vulnerabilities.
14
-
15
- We will acknowledge receipt within 48 hours and provide a detailed response within 5 business days.
package/SUPPORT.md DELETED
@@ -1,8 +0,0 @@
1
- # Support
2
-
3
- ## Getting Help
4
-
5
- - 📖 [Documentation](https://docs.geenius.app)
6
- - 🐛 [Bug Reports](https://github.com/mxn2020/geenius-i18n/issues/new?template=bug_report.md)
7
- - 💡 [Feature Requests](https://github.com/mxn2020/geenius-i18n/issues/new?template=feature_request.md)
8
- - 📧 Email: support@geenius.app
@@ -1,42 +0,0 @@
1
- {
2
- "name": "@geenius-i18n/convex",
3
- "version": "0.1.0",
4
- "private": false,
5
- "type": "module",
6
- "description": "Convex backend functions and schema for the Geenius i18n system",
7
- "author": "Antigravity HQ",
8
- "license": "MIT",
9
- "publishConfig": {
10
- "access": "public"
11
- },
12
- "main": "./dist/index.js",
13
- "module": "./dist/index.js",
14
- "types": "./dist/index.d.ts",
15
- "exports": {
16
- ".": {
17
- "types": "./dist/index.d.ts",
18
- "import": "./dist/index.js"
19
- }
20
- },
21
- "files": [
22
- "dist",
23
- "src"
24
- ],
25
- "scripts": {
26
- "build": "tsup",
27
- "clean": "rm -rf dist",
28
- "type-check": "tsc --noEmit",
29
- "prepublishOnly": "pnpm clean && pnpm build"
30
- },
31
- "peerDependencies": {
32
- "convex": "^1.34.0"
33
- },
34
- "devDependencies": {
35
- "convex": "^1.34.0",
36
- "tsup": "^8.5.1",
37
- "typescript": "~6.0.2"
38
- },
39
- "engines": {
40
- "node": ">=20.0.0"
41
- }
42
- }
@@ -1,3 +0,0 @@
1
- export { default as schema } from './schema'
2
- export * as queries from './queries'
3
- export * as mutations from './mutations'