tekivex-ui 2.3.0 → 2.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +436 -83
  2. package/dist/TkxForm-BWK4LqY3.js +1461 -0
  3. package/dist/TkxForm-ljQjX7KD.cjs +15 -0
  4. package/dist/charts.cjs +1 -0
  5. package/dist/charts.js +480 -0
  6. package/dist/headless.cjs +1 -0
  7. package/dist/headless.js +258 -0
  8. package/dist/index-BINBzXuY.cjs +2 -0
  9. package/dist/index-eT_U4qB2.js +512 -0
  10. package/dist/index.cjs +20 -32
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +7942 -8903
  14. package/dist/src/charts/TkxAreaChart.d.ts +29 -0
  15. package/dist/src/charts/TkxAreaChart.d.ts.map +1 -0
  16. package/dist/src/charts/TkxBarChart.d.ts +28 -0
  17. package/dist/src/charts/TkxBarChart.d.ts.map +1 -0
  18. package/dist/src/charts/TkxDonutChart.d.ts +23 -0
  19. package/dist/src/charts/TkxDonutChart.d.ts.map +1 -0
  20. package/dist/src/charts/TkxLineChart.d.ts +35 -0
  21. package/dist/src/charts/TkxLineChart.d.ts.map +1 -0
  22. package/dist/src/charts/TkxPieChart.d.ts +19 -0
  23. package/dist/src/charts/TkxPieChart.d.ts.map +1 -0
  24. package/dist/src/charts/TkxRadarChart.d.ts +20 -0
  25. package/dist/src/charts/TkxRadarChart.d.ts.map +1 -0
  26. package/dist/src/charts/TkxScatterChart.d.ts +28 -0
  27. package/dist/src/charts/TkxScatterChart.d.ts.map +1 -0
  28. package/dist/src/charts/index.d.ts +15 -0
  29. package/dist/src/charts/index.d.ts.map +1 -0
  30. package/dist/src/charts/shared.d.ts +33 -0
  31. package/dist/src/charts/shared.d.ts.map +1 -0
  32. package/dist/src/components/TkxDataGrid.d.ts +16 -2
  33. package/dist/src/components/TkxDataGrid.d.ts.map +1 -1
  34. package/dist/src/components/TkxForm.d.ts +33 -3
  35. package/dist/src/components/TkxForm.d.ts.map +1 -1
  36. package/dist/src/components/TkxImage.d.ts.map +1 -1
  37. package/dist/src/components/TkxTypography.d.ts +1 -1
  38. package/dist/src/components/TkxTypography.d.ts.map +1 -1
  39. package/dist/src/engine/tkx.d.ts.map +1 -1
  40. package/dist/src/headless/index.d.ts +18 -0
  41. package/dist/src/headless/index.d.ts.map +1 -0
  42. package/dist/src/headless/useControllable.d.ts +20 -0
  43. package/dist/src/headless/useControllable.d.ts.map +1 -0
  44. package/dist/src/headless/useDebounce.d.ts +14 -0
  45. package/dist/src/headless/useDebounce.d.ts.map +1 -0
  46. package/dist/src/headless/useDisclosure.d.ts +20 -0
  47. package/dist/src/headless/useDisclosure.d.ts.map +1 -0
  48. package/dist/src/headless/useFormState.d.ts +44 -0
  49. package/dist/src/headless/useFormState.d.ts.map +1 -0
  50. package/dist/src/headless/useIntersectionObserver.d.ts +23 -0
  51. package/dist/src/headless/useIntersectionObserver.d.ts.map +1 -0
  52. package/dist/src/headless/useListSelection.d.ts +29 -0
  53. package/dist/src/headless/useListSelection.d.ts.map +1 -0
  54. package/dist/src/headless/useLocalStorage.d.ts +9 -0
  55. package/dist/src/headless/useLocalStorage.d.ts.map +1 -0
  56. package/dist/src/headless/useMediaQuery.d.ts +21 -0
  57. package/dist/src/headless/useMediaQuery.d.ts.map +1 -0
  58. package/dist/src/headless/useRovingTabIndex.d.ts +33 -0
  59. package/dist/src/headless/useRovingTabIndex.d.ts.map +1 -0
  60. package/dist/src/headless/useThrottle.d.ts +9 -0
  61. package/dist/src/headless/useThrottle.d.ts.map +1 -0
  62. package/dist/src/i18n/index.d.ts +47 -2
  63. package/dist/src/i18n/index.d.ts.map +1 -1
  64. package/dist/src/themes/index.d.ts.map +1 -1
  65. package/package.json +61 -7
  66. package/src/charts/TkxAreaChart.tsx +119 -0
  67. package/src/charts/TkxBarChart.tsx +115 -0
  68. package/src/charts/TkxDonutChart.tsx +145 -0
  69. package/src/charts/TkxLineChart.tsx +135 -0
  70. package/src/charts/TkxPieChart.tsx +82 -0
  71. package/src/charts/TkxRadarChart.tsx +90 -0
  72. package/src/charts/TkxScatterChart.tsx +102 -0
  73. package/src/charts/index.ts +20 -0
  74. package/src/charts/shared.ts +45 -0
  75. package/src/components/TkxDataGrid.tsx +532 -268
  76. package/src/components/TkxForm.tsx +67 -15
  77. package/src/components/TkxImage.tsx +1 -1
  78. package/src/components/TkxTypography.tsx +4 -2
  79. package/src/engine/tkx.ts +60 -3
  80. package/src/headless/index.ts +44 -0
  81. package/src/headless/useControllable.ts +40 -0
  82. package/src/headless/useDebounce.ts +35 -0
  83. package/src/headless/useDisclosure.ts +28 -0
  84. package/src/headless/useFormState.ts +111 -0
  85. package/src/headless/useIntersectionObserver.ts +51 -0
  86. package/src/headless/useListSelection.ts +101 -0
  87. package/src/headless/useLocalStorage.ts +46 -0
  88. package/src/headless/useMediaQuery.ts +37 -0
  89. package/src/headless/useRovingTabIndex.ts +84 -0
  90. package/src/headless/useThrottle.ts +46 -0
  91. package/src/i18n/I18nProvider.tsx +1 -1
  92. package/src/i18n/index.ts +678 -38
  93. package/src/themes/index.ts +31 -4
package/src/i18n/index.ts CHANGED
@@ -35,15 +35,25 @@ export interface LocaleStrings {
35
35
  dropFiles: string;
36
36
  browse: string;
37
37
 
38
- // Table
38
+ // Table / DataGrid
39
39
  noData: string;
40
40
  sortAscending: string;
41
41
  sortDescending: string;
42
+ filterPlaceholder: string;
43
+ exportCsv: string;
44
+ rowsSelected: (n: number) => string;
42
45
  }
43
46
 
44
- // ── Default English locale ──────────────────────────────────────────────────
47
+ // ── Helper build a locale without having to re-type every key ─────────────
45
48
 
46
- export const enUS: LocaleStrings = {
49
+ function locale(strings: LocaleStrings): LocaleStrings {
50
+ return strings;
51
+ }
52
+
53
+ // ── Locales ─────────────────────────────────────────────────────────────────
54
+
55
+ // English (United States)
56
+ export const enUS = locale({
47
57
  close: 'Close',
48
58
  cancel: 'Cancel',
49
59
  confirm: 'Confirm',
@@ -65,11 +75,13 @@ export const enUS: LocaleStrings = {
65
75
  noData: 'No data available',
66
76
  sortAscending: 'Sort ascending',
67
77
  sortDescending: 'Sort descending',
68
- };
69
-
70
- // ── Additional locales ──────────────────────────────────────────────────────
78
+ filterPlaceholder: 'Filter...',
79
+ exportCsv: 'Export CSV',
80
+ rowsSelected: (n) => `${n} row${n === 1 ? '' : 's'} selected`,
81
+ });
71
82
 
72
- export const esES: LocaleStrings = {
83
+ // Spanish (Spain)
84
+ export const esES = locale({
73
85
  close: 'Cerrar',
74
86
  cancel: 'Cancelar',
75
87
  confirm: 'Confirmar',
@@ -91,33 +103,69 @@ export const esES: LocaleStrings = {
91
103
  noData: 'No hay datos disponibles',
92
104
  sortAscending: 'Orden ascendente',
93
105
  sortDescending: 'Orden descendente',
94
- };
106
+ filterPlaceholder: 'Filtrar...',
107
+ exportCsv: 'Exportar CSV',
108
+ rowsSelected: (n) => `${n} fila${n === 1 ? '' : 's'} seleccionada${n === 1 ? '' : 's'}`,
109
+ });
95
110
 
96
- export const arSA: LocaleStrings = {
97
- close: 'إغلاق',
98
- cancel: 'إلغاء',
99
- confirm: 'تأكيد',
100
- save: 'حفظ',
101
- delete: 'حذف',
102
- search: 'بحث',
103
- loading: '...جارٍ التحميل',
104
- noResults: 'لم يتم العثور على نتائج',
105
- required: 'مطلوب',
106
- previous: 'السابق',
107
- next: 'التالي',
108
- pageOf: (page, total) => `صفحة ${page} من ${total}`,
109
- selectPlaceholder: '...اختر',
110
- clearSelection: 'مسح الاختيار',
111
- selectDate: 'اختر تاريخ',
112
- today: 'اليوم',
113
- dropFiles: 'أفلت الملفات هنا أو',
114
- browse: 'تصفح',
115
- noData: 'لا توجد بيانات',
116
- sortAscending: 'ترتيب تصاعدي',
117
- sortDescending: 'ترتيب تنازلي',
118
- };
111
+ // Portuguese (Brazil)
112
+ export const ptBR = locale({
113
+ close: 'Fechar',
114
+ cancel: 'Cancelar',
115
+ confirm: 'Confirmar',
116
+ save: 'Salvar',
117
+ delete: 'Excluir',
118
+ search: 'Pesquisar',
119
+ loading: 'Carregando...',
120
+ noResults: 'Nenhum resultado encontrado',
121
+ required: 'Obrigatório',
122
+ previous: 'Anterior',
123
+ next: 'Próximo',
124
+ pageOf: (page, total) => `Página ${page} de ${total}`,
125
+ selectPlaceholder: 'Selecionar...',
126
+ clearSelection: 'Limpar seleção',
127
+ selectDate: 'Selecionar data',
128
+ today: 'Hoje',
129
+ dropFiles: 'Solte arquivos aqui ou',
130
+ browse: 'Procurar',
131
+ noData: 'Nenhum dado disponível',
132
+ sortAscending: 'Ordenar crescente',
133
+ sortDescending: 'Ordenar decrescente',
134
+ filterPlaceholder: 'Filtrar...',
135
+ exportCsv: 'Exportar CSV',
136
+ rowsSelected: (n) => `${n} linha${n === 1 ? '' : 's'} selecionada${n === 1 ? '' : 's'}`,
137
+ });
138
+
139
+ // Portuguese (Portugal)
140
+ export const ptPT = locale({
141
+ close: 'Fechar',
142
+ cancel: 'Cancelar',
143
+ confirm: 'Confirmar',
144
+ save: 'Guardar',
145
+ delete: 'Eliminar',
146
+ search: 'Pesquisar',
147
+ loading: 'A carregar...',
148
+ noResults: 'Sem resultados',
149
+ required: 'Obrigatório',
150
+ previous: 'Anterior',
151
+ next: 'Próximo',
152
+ pageOf: (page, total) => `Página ${page} de ${total}`,
153
+ selectPlaceholder: 'Selecionar...',
154
+ clearSelection: 'Limpar seleção',
155
+ selectDate: 'Selecionar data',
156
+ today: 'Hoje',
157
+ dropFiles: 'Largue ficheiros aqui ou',
158
+ browse: 'Procurar',
159
+ noData: 'Sem dados disponíveis',
160
+ sortAscending: 'Ordenar crescente',
161
+ sortDescending: 'Ordenar decrescente',
162
+ filterPlaceholder: 'Filtrar...',
163
+ exportCsv: 'Exportar CSV',
164
+ rowsSelected: (n) => `${n} linha${n === 1 ? '' : 's'} selecionada${n === 1 ? '' : 's'}`,
165
+ });
119
166
 
120
- export const frFR: LocaleStrings = {
167
+ // French (France)
168
+ export const frFR = locale({
121
169
  close: 'Fermer',
122
170
  cancel: 'Annuler',
123
171
  confirm: 'Confirmer',
@@ -139,9 +187,13 @@ export const frFR: LocaleStrings = {
139
187
  noData: 'Aucune donnée disponible',
140
188
  sortAscending: 'Tri croissant',
141
189
  sortDescending: 'Tri décroissant',
142
- };
190
+ filterPlaceholder: 'Filtrer...',
191
+ exportCsv: 'Exporter CSV',
192
+ rowsSelected: (n) => `${n} ligne${n === 1 ? '' : 's'} sélectionnée${n === 1 ? '' : 's'}`,
193
+ });
143
194
 
144
- export const deDE: LocaleStrings = {
195
+ // German (Germany)
196
+ export const deDE = locale({
145
197
  close: 'Schließen',
146
198
  cancel: 'Abbrechen',
147
199
  confirm: 'Bestätigen',
@@ -163,9 +215,377 @@ export const deDE: LocaleStrings = {
163
215
  noData: 'Keine Daten verfügbar',
164
216
  sortAscending: 'Aufsteigend sortieren',
165
217
  sortDescending: 'Absteigend sortieren',
166
- };
218
+ filterPlaceholder: 'Filtern...',
219
+ exportCsv: 'CSV exportieren',
220
+ rowsSelected: (n) => `${n} Zeile${n === 1 ? '' : 'n'} ausgewählt`,
221
+ });
222
+
223
+ // Italian (Italy)
224
+ export const itIT = locale({
225
+ close: 'Chiudi',
226
+ cancel: 'Annulla',
227
+ confirm: 'Conferma',
228
+ save: 'Salva',
229
+ delete: 'Elimina',
230
+ search: 'Cerca',
231
+ loading: 'Caricamento...',
232
+ noResults: 'Nessun risultato trovato',
233
+ required: 'Obbligatorio',
234
+ previous: 'Precedente',
235
+ next: 'Successivo',
236
+ pageOf: (page, total) => `Pagina ${page} di ${total}`,
237
+ selectPlaceholder: 'Seleziona...',
238
+ clearSelection: 'Cancella selezione',
239
+ selectDate: 'Seleziona una data',
240
+ today: 'Oggi',
241
+ dropFiles: 'Trascina file qui o',
242
+ browse: 'Sfoglia',
243
+ noData: 'Nessun dato disponibile',
244
+ sortAscending: 'Ordinamento crescente',
245
+ sortDescending: 'Ordinamento decrescente',
246
+ filterPlaceholder: 'Filtra...',
247
+ exportCsv: 'Esporta CSV',
248
+ rowsSelected: (n) => `${n} riga${n === 1 ? '' : 'i'} selezionat${n === 1 ? 'a' : 'e'}`,
249
+ });
250
+
251
+ // Dutch (Netherlands)
252
+ export const nlNL = locale({
253
+ close: 'Sluiten',
254
+ cancel: 'Annuleren',
255
+ confirm: 'Bevestigen',
256
+ save: 'Opslaan',
257
+ delete: 'Verwijderen',
258
+ search: 'Zoeken',
259
+ loading: 'Laden...',
260
+ noResults: 'Geen resultaten gevonden',
261
+ required: 'Verplicht',
262
+ previous: 'Vorige',
263
+ next: 'Volgende',
264
+ pageOf: (page, total) => `Pagina ${page} van ${total}`,
265
+ selectPlaceholder: 'Selecteer...',
266
+ clearSelection: 'Selectie wissen',
267
+ selectDate: 'Selecteer een datum',
268
+ today: 'Vandaag',
269
+ dropFiles: 'Zet bestanden hier neer of',
270
+ browse: 'Bladeren',
271
+ noData: 'Geen gegevens beschikbaar',
272
+ sortAscending: 'Oplopend sorteren',
273
+ sortDescending: 'Aflopend sorteren',
274
+ filterPlaceholder: 'Filteren...',
275
+ exportCsv: 'CSV exporteren',
276
+ rowsSelected: (n) => `${n} rij${n === 1 ? '' : 'en'} geselecteerd`,
277
+ });
278
+
279
+ // Polish (Poland)
280
+ export const plPL = locale({
281
+ close: 'Zamknij',
282
+ cancel: 'Anuluj',
283
+ confirm: 'Potwierdź',
284
+ save: 'Zapisz',
285
+ delete: 'Usuń',
286
+ search: 'Szukaj',
287
+ loading: 'Ładowanie...',
288
+ noResults: 'Nie znaleziono wyników',
289
+ required: 'Wymagane',
290
+ previous: 'Poprzednia',
291
+ next: 'Następna',
292
+ pageOf: (page, total) => `Strona ${page} z ${total}`,
293
+ selectPlaceholder: 'Wybierz...',
294
+ clearSelection: 'Wyczyść wybór',
295
+ selectDate: 'Wybierz datę',
296
+ today: 'Dzisiaj',
297
+ dropFiles: 'Upuść pliki tutaj lub',
298
+ browse: 'Przeglądaj',
299
+ noData: 'Brak danych',
300
+ sortAscending: 'Sortuj rosnąco',
301
+ sortDescending: 'Sortuj malejąco',
302
+ filterPlaceholder: 'Filtruj...',
303
+ exportCsv: 'Eksportuj CSV',
304
+ rowsSelected: (n) => `Wybrano ${n} wier${n === 1 ? 'sz' : 'sze'}`,
305
+ });
306
+
307
+ // Russian (Russia)
308
+ export const ruRU = locale({
309
+ close: 'Закрыть',
310
+ cancel: 'Отмена',
311
+ confirm: 'Подтвердить',
312
+ save: 'Сохранить',
313
+ delete: 'Удалить',
314
+ search: 'Поиск',
315
+ loading: 'Загрузка...',
316
+ noResults: 'Результаты не найдены',
317
+ required: 'Обязательно',
318
+ previous: 'Назад',
319
+ next: 'Вперёд',
320
+ pageOf: (page, total) => `Страница ${page} из ${total}`,
321
+ selectPlaceholder: 'Выбрать...',
322
+ clearSelection: 'Снять выделение',
323
+ selectDate: 'Выбрать дату',
324
+ today: 'Сегодня',
325
+ dropFiles: 'Перетащите файлы сюда или',
326
+ browse: 'Обзор',
327
+ noData: 'Нет данных',
328
+ sortAscending: 'По возрастанию',
329
+ sortDescending: 'По убыванию',
330
+ filterPlaceholder: 'Фильтр...',
331
+ exportCsv: 'Экспорт CSV',
332
+ rowsSelected: (n) => `Выбрано ${n} строк`,
333
+ });
334
+
335
+ // Ukrainian (Ukraine)
336
+ export const ukUA = locale({
337
+ close: 'Закрити',
338
+ cancel: 'Скасувати',
339
+ confirm: 'Підтвердити',
340
+ save: 'Зберегти',
341
+ delete: 'Видалити',
342
+ search: 'Пошук',
343
+ loading: 'Завантаження...',
344
+ noResults: 'Результати не знайдено',
345
+ required: "Обов'язково",
346
+ previous: 'Назад',
347
+ next: 'Далі',
348
+ pageOf: (page, total) => `Сторінка ${page} з ${total}`,
349
+ selectPlaceholder: 'Вибрати...',
350
+ clearSelection: 'Очистити вибір',
351
+ selectDate: 'Вибрати дату',
352
+ today: 'Сьогодні',
353
+ dropFiles: 'Перетягніть файли або',
354
+ browse: 'Огляд',
355
+ noData: 'Немає даних',
356
+ sortAscending: 'За зростанням',
357
+ sortDescending: 'За спаданням',
358
+ filterPlaceholder: 'Фільтр...',
359
+ exportCsv: 'Експорт CSV',
360
+ rowsSelected: (n) => `Вибрано ${n} рядків`,
361
+ });
362
+
363
+ // Turkish (Turkey)
364
+ export const trTR = locale({
365
+ close: 'Kapat',
366
+ cancel: 'İptal',
367
+ confirm: 'Onayla',
368
+ save: 'Kaydet',
369
+ delete: 'Sil',
370
+ search: 'Ara',
371
+ loading: 'Yükleniyor...',
372
+ noResults: 'Sonuç bulunamadı',
373
+ required: 'Zorunlu',
374
+ previous: 'Önceki',
375
+ next: 'Sonraki',
376
+ pageOf: (page, total) => `${total} sayfadan ${page}. sayfa`,
377
+ selectPlaceholder: 'Seçin...',
378
+ clearSelection: 'Seçimi temizle',
379
+ selectDate: 'Tarih seçin',
380
+ today: 'Bugün',
381
+ dropFiles: 'Dosyaları buraya bırakın veya',
382
+ browse: 'Gözat',
383
+ noData: 'Veri yok',
384
+ sortAscending: 'Artan sıralama',
385
+ sortDescending: 'Azalan sıralama',
386
+ filterPlaceholder: 'Filtrele...',
387
+ exportCsv: 'CSV dışa aktar',
388
+ rowsSelected: (n) => `${n} satır seçildi`,
389
+ });
390
+
391
+ // Swedish (Sweden)
392
+ export const svSE = locale({
393
+ close: 'Stäng',
394
+ cancel: 'Avbryt',
395
+ confirm: 'Bekräfta',
396
+ save: 'Spara',
397
+ delete: 'Ta bort',
398
+ search: 'Sök',
399
+ loading: 'Laddar...',
400
+ noResults: 'Inga resultat hittades',
401
+ required: 'Obligatoriskt',
402
+ previous: 'Föregående',
403
+ next: 'Nästa',
404
+ pageOf: (page, total) => `Sida ${page} av ${total}`,
405
+ selectPlaceholder: 'Välj...',
406
+ clearSelection: 'Rensa val',
407
+ selectDate: 'Välj ett datum',
408
+ today: 'Idag',
409
+ dropFiles: 'Släpp filer här eller',
410
+ browse: 'Bläddra',
411
+ noData: 'Inga data tillgängliga',
412
+ sortAscending: 'Sortera stigande',
413
+ sortDescending: 'Sortera fallande',
414
+ filterPlaceholder: 'Filtrera...',
415
+ exportCsv: 'Exportera CSV',
416
+ rowsSelected: (n) => `${n} rad${n === 1 ? '' : 'er'} vald${n === 1 ? '' : 'a'}`,
417
+ });
418
+
419
+ // Danish (Denmark)
420
+ export const daDK = locale({
421
+ close: 'Luk',
422
+ cancel: 'Annuller',
423
+ confirm: 'Bekræft',
424
+ save: 'Gem',
425
+ delete: 'Slet',
426
+ search: 'Søg',
427
+ loading: 'Indlæser...',
428
+ noResults: 'Ingen resultater fundet',
429
+ required: 'Påkrævet',
430
+ previous: 'Forrige',
431
+ next: 'Næste',
432
+ pageOf: (page, total) => `Side ${page} af ${total}`,
433
+ selectPlaceholder: 'Vælg...',
434
+ clearSelection: 'Ryd valg',
435
+ selectDate: 'Vælg en dato',
436
+ today: 'I dag',
437
+ dropFiles: 'Slip filer her eller',
438
+ browse: 'Gennemse',
439
+ noData: 'Ingen data tilgængelige',
440
+ sortAscending: 'Sorter stigende',
441
+ sortDescending: 'Sorter faldende',
442
+ filterPlaceholder: 'Filtrer...',
443
+ exportCsv: 'Eksporter CSV',
444
+ rowsSelected: (n) => `${n} række${n === 1 ? '' : 'r'} valgt`,
445
+ });
446
+
447
+ // Czech (Czech Republic)
448
+ export const csCZ = locale({
449
+ close: 'Zavřít',
450
+ cancel: 'Zrušit',
451
+ confirm: 'Potvrdit',
452
+ save: 'Uložit',
453
+ delete: 'Smazat',
454
+ search: 'Hledat',
455
+ loading: 'Načítání...',
456
+ noResults: 'Žádné výsledky',
457
+ required: 'Povinné',
458
+ previous: 'Předchozí',
459
+ next: 'Další',
460
+ pageOf: (page, total) => `Stránka ${page} z ${total}`,
461
+ selectPlaceholder: 'Vyberte...',
462
+ clearSelection: 'Vymazat výběr',
463
+ selectDate: 'Vyberte datum',
464
+ today: 'Dnes',
465
+ dropFiles: 'Přetáhněte soubory nebo',
466
+ browse: 'Procházet',
467
+ noData: 'Žádná data',
468
+ sortAscending: 'Seřadit vzestupně',
469
+ sortDescending: 'Seřadit sestupně',
470
+ filterPlaceholder: 'Filtrovat...',
471
+ exportCsv: 'Exportovat CSV',
472
+ rowsSelected: (n) => `Vybráno ${n} řádků`,
473
+ });
474
+
475
+ // Hungarian (Hungary)
476
+ export const huHU = locale({
477
+ close: 'Bezárás',
478
+ cancel: 'Mégse',
479
+ confirm: 'Megerősítés',
480
+ save: 'Mentés',
481
+ delete: 'Törlés',
482
+ search: 'Keresés',
483
+ loading: 'Betöltés...',
484
+ noResults: 'Nincs találat',
485
+ required: 'Kötelező',
486
+ previous: 'Előző',
487
+ next: 'Következő',
488
+ pageOf: (page, total) => `${page}. oldal / ${total}`,
489
+ selectPlaceholder: 'Válasszon...',
490
+ clearSelection: 'Kijelölés törlése',
491
+ selectDate: 'Válasszon dátumot',
492
+ today: 'Ma',
493
+ dropFiles: 'Húzza ide a fájlokat vagy',
494
+ browse: 'Tallózás',
495
+ noData: 'Nincs adat',
496
+ sortAscending: 'Növekvő sorrend',
497
+ sortDescending: 'Csökkenő sorrend',
498
+ filterPlaceholder: 'Szűrés...',
499
+ exportCsv: 'CSV exportálása',
500
+ rowsSelected: (n) => `${n} sor kiválasztva`,
501
+ });
167
502
 
168
- export const jaJP: LocaleStrings = {
503
+ // Arabic (Saudi Arabia) RTL
504
+ export const arSA = locale({
505
+ close: 'إغلاق',
506
+ cancel: 'إلغاء',
507
+ confirm: 'تأكيد',
508
+ save: 'حفظ',
509
+ delete: 'حذف',
510
+ search: 'بحث',
511
+ loading: '...جارٍ التحميل',
512
+ noResults: 'لم يتم العثور على نتائج',
513
+ required: 'مطلوب',
514
+ previous: 'السابق',
515
+ next: 'التالي',
516
+ pageOf: (page, total) => `صفحة ${page} من ${total}`,
517
+ selectPlaceholder: '...اختر',
518
+ clearSelection: 'مسح الاختيار',
519
+ selectDate: 'اختر تاريخ',
520
+ today: 'اليوم',
521
+ dropFiles: 'أفلت الملفات هنا أو',
522
+ browse: 'تصفح',
523
+ noData: 'لا توجد بيانات',
524
+ sortAscending: 'ترتيب تصاعدي',
525
+ sortDescending: 'ترتيب تنازلي',
526
+ filterPlaceholder: '...فلترة',
527
+ exportCsv: 'تصدير CSV',
528
+ rowsSelected: (n) => `تم تحديد ${n} صفوف`,
529
+ });
530
+
531
+ // Hebrew (Israel) — RTL
532
+ export const heIL = locale({
533
+ close: 'סגור',
534
+ cancel: 'ביטול',
535
+ confirm: 'אישור',
536
+ save: 'שמור',
537
+ delete: 'מחק',
538
+ search: 'חיפוש',
539
+ loading: 'טוען...',
540
+ noResults: 'לא נמצאו תוצאות',
541
+ required: 'חובה',
542
+ previous: 'הקודם',
543
+ next: 'הבא',
544
+ pageOf: (page, total) => `עמוד ${page} מתוך ${total}`,
545
+ selectPlaceholder: 'בחר...',
546
+ clearSelection: 'נקה בחירה',
547
+ selectDate: 'בחר תאריך',
548
+ today: 'היום',
549
+ dropFiles: 'גרור קבצים לכאן או',
550
+ browse: 'עיון',
551
+ noData: 'אין נתונים',
552
+ sortAscending: 'מיון עולה',
553
+ sortDescending: 'מיון יורד',
554
+ filterPlaceholder: 'סינון...',
555
+ exportCsv: 'ייצוא CSV',
556
+ rowsSelected: (n) => `נבחרו ${n} שורות`,
557
+ });
558
+
559
+ // Persian / Farsi (Iran) — RTL
560
+ export const faIR = locale({
561
+ close: 'بستن',
562
+ cancel: 'لغو',
563
+ confirm: 'تأیید',
564
+ save: 'ذخیره',
565
+ delete: 'حذف',
566
+ search: 'جستجو',
567
+ loading: '...در حال بارگذاری',
568
+ noResults: 'نتیجه‌ای یافت نشد',
569
+ required: 'الزامی',
570
+ previous: 'قبلی',
571
+ next: 'بعدی',
572
+ pageOf: (page, total) => `صفحه ${page} از ${total}`,
573
+ selectPlaceholder: '...انتخاب کنید',
574
+ clearSelection: 'پاک کردن انتخاب',
575
+ selectDate: 'تاریخ را انتخاب کنید',
576
+ today: 'امروز',
577
+ dropFiles: 'فایل‌ها را اینجا رها کنید یا',
578
+ browse: 'مرور',
579
+ noData: 'داده‌ای موجود نیست',
580
+ sortAscending: 'مرتب‌سازی صعودی',
581
+ sortDescending: 'مرتب‌سازی نزولی',
582
+ filterPlaceholder: '...فیلتر',
583
+ exportCsv: 'خروجی CSV',
584
+ rowsSelected: (n) => `${n} ردیف انتخاب شده`,
585
+ });
586
+
587
+ // Japanese (Japan)
588
+ export const jaJP = locale({
169
589
  close: '閉じる',
170
590
  cancel: 'キャンセル',
171
591
  confirm: '確認',
@@ -187,17 +607,237 @@ export const jaJP: LocaleStrings = {
187
607
  noData: 'データなし',
188
608
  sortAscending: '昇順',
189
609
  sortDescending: '降順',
190
- };
610
+ filterPlaceholder: 'フィルター...',
611
+ exportCsv: 'CSVエクスポート',
612
+ rowsSelected: (n) => `${n}行選択中`,
613
+ });
614
+
615
+ // Korean (South Korea)
616
+ export const koKR = locale({
617
+ close: '닫기',
618
+ cancel: '취소',
619
+ confirm: '확인',
620
+ save: '저장',
621
+ delete: '삭제',
622
+ search: '검색',
623
+ loading: '로딩 중...',
624
+ noResults: '검색 결과 없음',
625
+ required: '필수',
626
+ previous: '이전',
627
+ next: '다음',
628
+ pageOf: (page, total) => `${total}페이지 중 ${page}페이지`,
629
+ selectPlaceholder: '선택...',
630
+ clearSelection: '선택 해제',
631
+ selectDate: '날짜 선택',
632
+ today: '오늘',
633
+ dropFiles: '여기에 파일을 놓거나',
634
+ browse: '찾아보기',
635
+ noData: '데이터 없음',
636
+ sortAscending: '오름차순 정렬',
637
+ sortDescending: '내림차순 정렬',
638
+ filterPlaceholder: '필터...',
639
+ exportCsv: 'CSV 내보내기',
640
+ rowsSelected: (n) => `${n}개 행 선택됨`,
641
+ });
642
+
643
+ // Chinese Simplified (China)
644
+ export const zhCN = locale({
645
+ close: '关闭',
646
+ cancel: '取消',
647
+ confirm: '确认',
648
+ save: '保存',
649
+ delete: '删除',
650
+ search: '搜索',
651
+ loading: '加载中...',
652
+ noResults: '未找到结果',
653
+ required: '必填',
654
+ previous: '上一页',
655
+ next: '下一页',
656
+ pageOf: (page, total) => `第 ${page} 页,共 ${total} 页`,
657
+ selectPlaceholder: '请选择...',
658
+ clearSelection: '清除选择',
659
+ selectDate: '选择日期',
660
+ today: '今天',
661
+ dropFiles: '将文件拖到此处或',
662
+ browse: '浏览',
663
+ noData: '暂无数据',
664
+ sortAscending: '升序排列',
665
+ sortDescending: '降序排列',
666
+ filterPlaceholder: '筛选...',
667
+ exportCsv: '导出 CSV',
668
+ rowsSelected: (n) => `已选择 ${n} 行`,
669
+ });
670
+
671
+ // Chinese Traditional (Taiwan)
672
+ export const zhTW = locale({
673
+ close: '關閉',
674
+ cancel: '取消',
675
+ confirm: '確認',
676
+ save: '儲存',
677
+ delete: '刪除',
678
+ search: '搜尋',
679
+ loading: '載入中...',
680
+ noResults: '未找到結果',
681
+ required: '必填',
682
+ previous: '上一頁',
683
+ next: '下一頁',
684
+ pageOf: (page, total) => `第 ${page} 頁,共 ${total} 頁`,
685
+ selectPlaceholder: '請選擇...',
686
+ clearSelection: '清除選擇',
687
+ selectDate: '選擇日期',
688
+ today: '今天',
689
+ dropFiles: '將檔案拖曳至此或',
690
+ browse: '瀏覽',
691
+ noData: '暫無資料',
692
+ sortAscending: '升冪排列',
693
+ sortDescending: '降冪排列',
694
+ filterPlaceholder: '篩選...',
695
+ exportCsv: '匯出 CSV',
696
+ rowsSelected: (n) => `已選擇 ${n} 行`,
697
+ });
698
+
699
+ // Thai (Thailand)
700
+ export const thTH = locale({
701
+ close: 'ปิด',
702
+ cancel: 'ยกเลิก',
703
+ confirm: 'ยืนยัน',
704
+ save: 'บันทึก',
705
+ delete: 'ลบ',
706
+ search: 'ค้นหา',
707
+ loading: 'กำลังโหลด...',
708
+ noResults: 'ไม่พบผลลัพธ์',
709
+ required: 'จำเป็น',
710
+ previous: 'ก่อนหน้า',
711
+ next: 'ถัดไป',
712
+ pageOf: (page, total) => `หน้า ${page} จาก ${total}`,
713
+ selectPlaceholder: 'เลือก...',
714
+ clearSelection: 'ล้างการเลือก',
715
+ selectDate: 'เลือกวันที่',
716
+ today: 'วันนี้',
717
+ dropFiles: 'วางไฟล์ที่นี่หรือ',
718
+ browse: 'เรียกดู',
719
+ noData: 'ไม่มีข้อมูล',
720
+ sortAscending: 'เรียงจากน้อยไปมาก',
721
+ sortDescending: 'เรียงจากมากไปน้อย',
722
+ filterPlaceholder: 'กรอง...',
723
+ exportCsv: 'ส่งออก CSV',
724
+ rowsSelected: (n) => `เลือก ${n} แถว`,
725
+ });
726
+
727
+ // Vietnamese (Vietnam)
728
+ export const viVN = locale({
729
+ close: 'Đóng',
730
+ cancel: 'Hủy',
731
+ confirm: 'Xác nhận',
732
+ save: 'Lưu',
733
+ delete: 'Xóa',
734
+ search: 'Tìm kiếm',
735
+ loading: 'Đang tải...',
736
+ noResults: 'Không tìm thấy kết quả',
737
+ required: 'Bắt buộc',
738
+ previous: 'Trước',
739
+ next: 'Tiếp',
740
+ pageOf: (page, total) => `Trang ${page} / ${total}`,
741
+ selectPlaceholder: 'Chọn...',
742
+ clearSelection: 'Xóa lựa chọn',
743
+ selectDate: 'Chọn ngày',
744
+ today: 'Hôm nay',
745
+ dropFiles: 'Thả tệp vào đây hoặc',
746
+ browse: 'Duyệt',
747
+ noData: 'Không có dữ liệu',
748
+ sortAscending: 'Sắp xếp tăng dần',
749
+ sortDescending: 'Sắp xếp giảm dần',
750
+ filterPlaceholder: 'Lọc...',
751
+ exportCsv: 'Xuất CSV',
752
+ rowsSelected: (n) => `Đã chọn ${n} hàng`,
753
+ });
754
+
755
+ // Indonesian (Indonesia)
756
+ export const idID = locale({
757
+ close: 'Tutup',
758
+ cancel: 'Batal',
759
+ confirm: 'Konfirmasi',
760
+ save: 'Simpan',
761
+ delete: 'Hapus',
762
+ search: 'Cari',
763
+ loading: 'Memuat...',
764
+ noResults: 'Tidak ada hasil',
765
+ required: 'Wajib',
766
+ previous: 'Sebelumnya',
767
+ next: 'Berikutnya',
768
+ pageOf: (page, total) => `Halaman ${page} dari ${total}`,
769
+ selectPlaceholder: 'Pilih...',
770
+ clearSelection: 'Hapus pilihan',
771
+ selectDate: 'Pilih tanggal',
772
+ today: 'Hari ini',
773
+ dropFiles: 'Seret file ke sini atau',
774
+ browse: 'Jelajahi',
775
+ noData: 'Tidak ada data',
776
+ sortAscending: 'Urutkan naik',
777
+ sortDescending: 'Urutkan turun',
778
+ filterPlaceholder: 'Filter...',
779
+ exportCsv: 'Ekspor CSV',
780
+ rowsSelected: (n) => `${n} baris dipilih`,
781
+ });
782
+
783
+ // Romanian (Romania)
784
+ export const roRO = locale({
785
+ close: 'Închide',
786
+ cancel: 'Anulează',
787
+ confirm: 'Confirmă',
788
+ save: 'Salvează',
789
+ delete: 'Șterge',
790
+ search: 'Caută',
791
+ loading: 'Se încarcă...',
792
+ noResults: 'Nu s-au găsit rezultate',
793
+ required: 'Obligatoriu',
794
+ previous: 'Anterior',
795
+ next: 'Următor',
796
+ pageOf: (page, total) => `Pagina ${page} din ${total}`,
797
+ selectPlaceholder: 'Selectați...',
798
+ clearSelection: 'Șterge selecția',
799
+ selectDate: 'Selectați o dată',
800
+ today: 'Astăzi',
801
+ dropFiles: 'Trageți fișierele aici sau',
802
+ browse: 'Răsfoiți',
803
+ noData: 'Nu există date',
804
+ sortAscending: 'Sortare crescătoare',
805
+ sortDescending: 'Sortare descrescătoare',
806
+ filterPlaceholder: 'Filtrați...',
807
+ exportCsv: 'Exportați CSV',
808
+ rowsSelected: (n) => `${n} rând${n === 1 ? '' : 'uri'} selectat${n === 1 ? '' : 'e'}`,
809
+ });
191
810
 
192
811
  // ── Locale map ──────────────────────────────────────────────────────────────
193
812
 
194
813
  export const LOCALES = {
195
814
  'en-US': enUS,
196
815
  'es-ES': esES,
197
- 'ar-SA': arSA,
816
+ 'pt-BR': ptBR,
817
+ 'pt-PT': ptPT,
198
818
  'fr-FR': frFR,
199
819
  'de-DE': deDE,
820
+ 'it-IT': itIT,
821
+ 'nl-NL': nlNL,
822
+ 'pl-PL': plPL,
823
+ 'ru-RU': ruRU,
824
+ 'uk-UA': ukUA,
825
+ 'tr-TR': trTR,
826
+ 'sv-SE': svSE,
827
+ 'da-DK': daDK,
828
+ 'cs-CZ': csCZ,
829
+ 'hu-HU': huHU,
830
+ 'ar-SA': arSA,
831
+ 'he-IL': heIL,
832
+ 'fa-IR': faIR,
200
833
  'ja-JP': jaJP,
834
+ 'ko-KR': koKR,
835
+ 'zh-CN': zhCN,
836
+ 'zh-TW': zhTW,
837
+ 'th-TH': thTH,
838
+ 'vi-VN': viVN,
839
+ 'id-ID': idID,
840
+ 'ro-RO': roRO,
201
841
  } as const;
202
842
 
203
843
  export type LocaleCode = keyof typeof LOCALES;