@iyulab/flex-table 0.36.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/README.md +19 -8
- package/dist/{flex-table-D5FjaSJV.js → flex-table-BAQbidin.js} +100 -42
- package/dist/flex-table.js +1 -1
- package/dist/locale.d.ts +2 -2
- package/dist/react.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.37.0] - 2026-09-20
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- **The column menu and the cell context menu stayed in English on a translated page.** 0.36.0 moved
|
|
8
|
+
the table's chrome text into a locale namespace, but the menus added in 0.35.0 were not part of
|
|
9
|
+
that move: their items, and the accessible name of the column-menu button, were written inline. On
|
|
10
|
+
a Korean page the same button therefore announced one language in its `title` and another in its
|
|
11
|
+
`aria-label`, and a screen-reader user heard English item names in the middle of a translated
|
|
12
|
+
grid — with no way to correct it, since the strings had no keys to register over. Every one of
|
|
13
|
+
those strings now goes through the namespace, including the cell context menu, the two menu
|
|
14
|
+
accessible names and the import drop target. Three keys name a column and carry a `{header}`
|
|
15
|
+
placeholder, so word order stays the translator's choice instead of being fixed by concatenation.
|
|
16
|
+
The built-in English wording is unchanged.
|
|
17
|
+
|
|
18
|
+
### Documentation
|
|
19
|
+
|
|
20
|
+
- **The README no longer lists every message key by hand.** That paragraph had gone stale once
|
|
21
|
+
already, and a hand-copied list is the only part of this documentation that can: the exported
|
|
22
|
+
`FlexTableMessageKey` cannot. It now names the groups and points at the type, which your editor
|
|
23
|
+
completes and the compiler checks.
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- **The boolean filter's two options are translatable** (`booleanTrue` / `booleanFalse`). They read
|
|
28
|
+
`True` and `False` in every locale before this; the check and cross glyphs stay in the template,
|
|
29
|
+
since a symbol means the same thing in every language.
|
|
30
|
+
- **`t()` and the exported namespace now interpolate.** `FlexTableMessageKey` gains the menu keys
|
|
31
|
+
above; registering a partial table still merges, so existing registrations keep working untouched.
|
|
32
|
+
|
|
3
33
|
## [0.36.0] - 2026-09-17
|
|
4
34
|
|
|
5
35
|
### Added
|
package/README.md
CHANGED
|
@@ -436,14 +436,25 @@ flexTableLocale.register('ja', {
|
|
|
436
436
|
flexTableLocale.register('en', { replaceAll: 'Replace everything' }); // reword one string
|
|
437
437
|
```
|
|
438
438
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
439
|
+
The keys are grouped by where they appear: the column header and its menu, the items inside that
|
|
440
|
+
menu, the cell context menu, cell comments, the filter panel, find-and-replace, and the import drop
|
|
441
|
+
target. **`FlexTableMessageKey` is the list** — it is exported, so your editor completes it and a
|
|
442
|
+
misspelled key is a type error rather than a string that silently falls back to its own name.
|
|
443
|
+
|
|
444
|
+
> This paragraph used to enumerate every key by hand. It went stale once, and a hand-copied list is
|
|
445
|
+
> the only thing here that can: the type cannot. If you want the full set, hover `FlexTableMessageKey`
|
|
446
|
+
> or open `src/locale.ts`.
|
|
447
|
+
|
|
448
|
+
Three of those keys name a column, and word order differs between languages, so they carry a
|
|
449
|
+
`{header}` placeholder rather than being assembled by concatenation:
|
|
450
|
+
|
|
451
|
+
```ts
|
|
452
|
+
flexTableLocale.register('ja', {
|
|
453
|
+
columnMenuFor: '{header} の列メニュー', // the column menu button's accessible name
|
|
454
|
+
columnMenuRegion: '{header} 列', // the open menu's accessible name
|
|
455
|
+
showColumn: '{header} を表示', // "show this hidden neighbour again"
|
|
456
|
+
});
|
|
457
|
+
```
|
|
447
458
|
|
|
448
459
|
The filter operators `AND` and `OR` are not in the table, and neither are the glyphs that stand in
|
|
449
460
|
for icons. They read the same in every language, and translating them makes them harder to
|
|
@@ -1018,7 +1018,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1018
1018
|
alertNotice: "إشعار",
|
|
1019
1019
|
alertMessage: "رسالة",
|
|
1020
1020
|
remove: "إزالة",
|
|
1021
|
-
closeTab: "إغلاق علامة التبويب"
|
|
1021
|
+
closeTab: "إغلاق علامة التبويب",
|
|
1022
|
+
breadcrumb: "مسار التنقل"
|
|
1022
1023
|
},
|
|
1023
1024
|
"../assets/locales/de.json": {
|
|
1024
1025
|
valueMissing: "Dieses Feld ist erforderlich",
|
|
@@ -1058,7 +1059,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1058
1059
|
alertNotice: "Hinweis",
|
|
1059
1060
|
alertMessage: "Nachricht",
|
|
1060
1061
|
remove: "Entfernen",
|
|
1061
|
-
closeTab: "Tab schließen"
|
|
1062
|
+
closeTab: "Tab schließen",
|
|
1063
|
+
breadcrumb: "Navigationspfad"
|
|
1062
1064
|
},
|
|
1063
1065
|
"../assets/locales/en.json": {
|
|
1064
1066
|
valueMissing: "This field is required",
|
|
@@ -1098,7 +1100,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1098
1100
|
alertNotice: "Notice",
|
|
1099
1101
|
alertMessage: "Message",
|
|
1100
1102
|
remove: "Remove",
|
|
1101
|
-
closeTab: "Close tab"
|
|
1103
|
+
closeTab: "Close tab",
|
|
1104
|
+
breadcrumb: "Breadcrumb"
|
|
1102
1105
|
},
|
|
1103
1106
|
"../assets/locales/es.json": {
|
|
1104
1107
|
valueMissing: "Este campo es obligatorio",
|
|
@@ -1138,7 +1141,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1138
1141
|
alertNotice: "Aviso",
|
|
1139
1142
|
alertMessage: "Mensaje",
|
|
1140
1143
|
remove: "Quitar",
|
|
1141
|
-
closeTab: "Cerrar pestaña"
|
|
1144
|
+
closeTab: "Cerrar pestaña",
|
|
1145
|
+
breadcrumb: "Ruta de navegación"
|
|
1142
1146
|
},
|
|
1143
1147
|
"../assets/locales/fr.json": {
|
|
1144
1148
|
valueMissing: "Ce champ est obligatoire",
|
|
@@ -1178,7 +1182,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1178
1182
|
alertNotice: "Avis",
|
|
1179
1183
|
alertMessage: "Message",
|
|
1180
1184
|
remove: "Supprimer",
|
|
1181
|
-
closeTab: "Fermer l'onglet"
|
|
1185
|
+
closeTab: "Fermer l'onglet",
|
|
1186
|
+
breadcrumb: "Fil d'Ariane"
|
|
1182
1187
|
},
|
|
1183
1188
|
"../assets/locales/id.json": {
|
|
1184
1189
|
valueMissing: "Kolom ini wajib diisi",
|
|
@@ -1218,7 +1223,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1218
1223
|
alertNotice: "Pemberitahuan",
|
|
1219
1224
|
alertMessage: "Pesan",
|
|
1220
1225
|
remove: "Hapus",
|
|
1221
|
-
closeTab: "Tutup tab"
|
|
1226
|
+
closeTab: "Tutup tab",
|
|
1227
|
+
breadcrumb: "Navigasi remah roti"
|
|
1222
1228
|
},
|
|
1223
1229
|
"../assets/locales/ja.json": {
|
|
1224
1230
|
valueMissing: "この項目は必須です",
|
|
@@ -1258,7 +1264,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1258
1264
|
alertNotice: "通知",
|
|
1259
1265
|
alertMessage: "メッセージ",
|
|
1260
1266
|
remove: "削除",
|
|
1261
|
-
closeTab: "タブを閉じる"
|
|
1267
|
+
closeTab: "タブを閉じる",
|
|
1268
|
+
breadcrumb: "パンくずリスト"
|
|
1262
1269
|
},
|
|
1263
1270
|
"../assets/locales/ko.json": {
|
|
1264
1271
|
valueMissing: "필수 항목입니다",
|
|
@@ -1298,7 +1305,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1298
1305
|
alertNotice: "알림",
|
|
1299
1306
|
alertMessage: "메시지",
|
|
1300
1307
|
remove: "제거",
|
|
1301
|
-
closeTab: "탭 닫기"
|
|
1308
|
+
closeTab: "탭 닫기",
|
|
1309
|
+
breadcrumb: "탐색 경로"
|
|
1302
1310
|
},
|
|
1303
1311
|
"../assets/locales/pt-BR.json": {
|
|
1304
1312
|
valueMissing: "Este campo é obrigatório",
|
|
@@ -1338,7 +1346,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1338
1346
|
alertNotice: "Nota",
|
|
1339
1347
|
alertMessage: "Mensagem",
|
|
1340
1348
|
remove: "Remover",
|
|
1341
|
-
closeTab: "Fechar aba"
|
|
1349
|
+
closeTab: "Fechar aba",
|
|
1350
|
+
breadcrumb: "Trilha de navegação"
|
|
1342
1351
|
},
|
|
1343
1352
|
"../assets/locales/ru.json": {
|
|
1344
1353
|
valueMissing: "Это поле обязательно для заполнения",
|
|
@@ -1378,7 +1387,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1378
1387
|
alertNotice: "Уведомление",
|
|
1379
1388
|
alertMessage: "Сообщение",
|
|
1380
1389
|
remove: "Удалить",
|
|
1381
|
-
closeTab: "Закрыть вкладку"
|
|
1390
|
+
closeTab: "Закрыть вкладку",
|
|
1391
|
+
breadcrumb: "Навигационная цепочка"
|
|
1382
1392
|
},
|
|
1383
1393
|
"../assets/locales/th.json": {
|
|
1384
1394
|
valueMissing: "จำเป็นต้องกรอกข้อมูลนี้",
|
|
@@ -1418,7 +1428,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1418
1428
|
alertNotice: "ประกาศ",
|
|
1419
1429
|
alertMessage: "ข้อความ",
|
|
1420
1430
|
remove: "ลบ",
|
|
1421
|
-
closeTab: "ปิดแท็บ"
|
|
1431
|
+
closeTab: "ปิดแท็บ",
|
|
1432
|
+
breadcrumb: "เส้นทางการนำทาง"
|
|
1422
1433
|
},
|
|
1423
1434
|
"../assets/locales/vi.json": {
|
|
1424
1435
|
valueMissing: "Trường này là bắt buộc",
|
|
@@ -1458,7 +1469,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1458
1469
|
alertNotice: "Lưu ý",
|
|
1459
1470
|
alertMessage: "Thông báo",
|
|
1460
1471
|
remove: "Xóa",
|
|
1461
|
-
closeTab: "Đóng tab"
|
|
1472
|
+
closeTab: "Đóng tab",
|
|
1473
|
+
breadcrumb: "Đường dẫn điều hướng"
|
|
1462
1474
|
},
|
|
1463
1475
|
"../assets/locales/zh-CN.json": {
|
|
1464
1476
|
valueMissing: "此项为必填项",
|
|
@@ -1498,7 +1510,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1498
1510
|
alertNotice: "提示",
|
|
1499
1511
|
alertMessage: "消息",
|
|
1500
1512
|
remove: "移除",
|
|
1501
|
-
closeTab: "关闭标签页"
|
|
1513
|
+
closeTab: "关闭标签页",
|
|
1514
|
+
breadcrumb: "面包屑导航"
|
|
1502
1515
|
},
|
|
1503
1516
|
"../assets/locales/zh-TW.json": {
|
|
1504
1517
|
valueMissing: "此欄位為必填",
|
|
@@ -1538,7 +1551,8 @@ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
|
|
|
1538
1551
|
alertNotice: "提示",
|
|
1539
1552
|
alertMessage: "訊息",
|
|
1540
1553
|
remove: "移除",
|
|
1541
|
-
closeTab: "關閉分頁"
|
|
1554
|
+
closeTab: "關閉分頁",
|
|
1555
|
+
breadcrumb: "麵包屑導覽"
|
|
1542
1556
|
}
|
|
1543
1557
|
})).map(([e, t]) => [(e.split("/").pop()?.replace(".json", "") || "").toLowerCase(), t])), x = /* @__PURE__ */ new Map();
|
|
1544
1558
|
function S() {
|
|
@@ -1632,7 +1646,29 @@ O.register("en", {
|
|
|
1632
1646
|
closeFind: "Close (Escape)",
|
|
1633
1647
|
replaceWithPlaceholder: "Replace with...",
|
|
1634
1648
|
replace: "Replace",
|
|
1635
|
-
replaceAll: "Replace all"
|
|
1649
|
+
replaceAll: "Replace all",
|
|
1650
|
+
sortAscending: "Sort ascending",
|
|
1651
|
+
sortDescending: "Sort descending",
|
|
1652
|
+
filter: "Filter…",
|
|
1653
|
+
clearFilter: "Clear filter",
|
|
1654
|
+
hideColumn: "Hide column",
|
|
1655
|
+
showColumn: "Show: {header}",
|
|
1656
|
+
autoFitWidth: "Auto-fit width",
|
|
1657
|
+
wider: "Wider",
|
|
1658
|
+
narrower: "Narrower",
|
|
1659
|
+
columnMenuFor: "Column menu: {header}",
|
|
1660
|
+
columnMenuRegion: "{header} column",
|
|
1661
|
+
copy: "Copy",
|
|
1662
|
+
insertRowAbove: "Insert row above",
|
|
1663
|
+
insertRowBelow: "Insert row below",
|
|
1664
|
+
deleteRow: "Delete row",
|
|
1665
|
+
filterByThisValue: "Filter by this value",
|
|
1666
|
+
addComment: "Add Comment",
|
|
1667
|
+
editComment: "Edit Comment",
|
|
1668
|
+
deleteComment: "Delete Comment",
|
|
1669
|
+
booleanTrue: "True",
|
|
1670
|
+
booleanFalse: "False",
|
|
1671
|
+
dropFileToImport: "Drop file to import (.xlsx / .csv)"
|
|
1636
1672
|
}), O.register("ko", {
|
|
1637
1673
|
showHiddenColumns: "숨긴 열 보기",
|
|
1638
1674
|
columnMenu: "열 메뉴",
|
|
@@ -1663,9 +1699,31 @@ O.register("en", {
|
|
|
1663
1699
|
closeFind: "닫기 (Escape)",
|
|
1664
1700
|
replaceWithPlaceholder: "바꿀 내용...",
|
|
1665
1701
|
replace: "바꾸기",
|
|
1666
|
-
replaceAll: "모두 바꾸기"
|
|
1702
|
+
replaceAll: "모두 바꾸기",
|
|
1703
|
+
sortAscending: "오름차순 정렬",
|
|
1704
|
+
sortDescending: "내림차순 정렬",
|
|
1705
|
+
filter: "필터…",
|
|
1706
|
+
clearFilter: "필터 지우기",
|
|
1707
|
+
hideColumn: "열 숨기기",
|
|
1708
|
+
showColumn: "{header} 보기",
|
|
1709
|
+
autoFitWidth: "너비 자동 맞춤",
|
|
1710
|
+
wider: "넓게",
|
|
1711
|
+
narrower: "좁게",
|
|
1712
|
+
columnMenuFor: "{header} 열 메뉴",
|
|
1713
|
+
columnMenuRegion: "{header} 열",
|
|
1714
|
+
copy: "복사",
|
|
1715
|
+
insertRowAbove: "위에 행 삽입",
|
|
1716
|
+
insertRowBelow: "아래에 행 삽입",
|
|
1717
|
+
deleteRow: "행 삭제",
|
|
1718
|
+
filterByThisValue: "이 값으로 필터",
|
|
1719
|
+
addComment: "메모 추가",
|
|
1720
|
+
editComment: "메모 편집",
|
|
1721
|
+
deleteComment: "메모 삭제",
|
|
1722
|
+
booleanTrue: "참",
|
|
1723
|
+
booleanFalse: "거짓",
|
|
1724
|
+
dropFileToImport: "가져올 파일을 놓으세요 (.xlsx / .csv)"
|
|
1667
1725
|
});
|
|
1668
|
-
var k = (e) => O.text(e);
|
|
1726
|
+
var k = (e, t) => O.text(e, t);
|
|
1669
1727
|
//#endregion
|
|
1670
1728
|
//#region src/core/selection.ts
|
|
1671
1729
|
function ee(e) {
|
|
@@ -3565,7 +3623,7 @@ var q = {
|
|
|
3565
3623
|
<button class="ft-column-menu-btn ${s ? "ft-filter-active" : ""}"
|
|
3566
3624
|
type="button"
|
|
3567
3625
|
title=${k("columnMenu")}
|
|
3568
|
-
aria-label=${
|
|
3626
|
+
aria-label=${k("columnMenuFor", { header: e.header })}
|
|
3569
3627
|
aria-haspopup="menu"
|
|
3570
3628
|
aria-expanded=${this._headerMenu?.key === e.key ? "true" : "false"}
|
|
3571
3629
|
@mousedown=${(e) => e.stopPropagation()}
|
|
@@ -3684,26 +3742,26 @@ var q = {
|
|
|
3684
3742
|
}}>${t}</button>
|
|
3685
3743
|
`;
|
|
3686
3744
|
return i`
|
|
3687
|
-
<div class="ft-header-menu" role="menu" aria-label=${
|
|
3745
|
+
<div class="ft-header-menu" role="menu" aria-label=${k("columnMenuRegion", { header: o.header })}
|
|
3688
3746
|
style="position: fixed; left: ${t}px; top: ${n}px; z-index: 200;"
|
|
3689
3747
|
@mousedown=${(e) => e.stopPropagation()}
|
|
3690
3748
|
@keydown=${(e) => this._onHeaderMenuKeydown(e)}>
|
|
3691
3749
|
${o.sortable === !1 ? a : i`
|
|
3692
|
-
${c("sort-asc", "
|
|
3693
|
-
${c("sort-desc", "
|
|
3750
|
+
${c("sort-asc", k("sortAscending"), () => this._applySortFromMenu(e, "asc"))}
|
|
3751
|
+
${c("sort-desc", k("sortDescending"), () => this._applySortFromMenu(e, "desc"))}
|
|
3694
3752
|
<div class="ft-header-menu-separator" role="separator"></div>
|
|
3695
3753
|
`}
|
|
3696
3754
|
${this.showFilters ? i`
|
|
3697
|
-
${c("filter", "
|
|
3698
|
-
${s ? c("clear-filter", "
|
|
3755
|
+
${c("filter", k("filter"), () => this._openFilterFromMenu(e))}
|
|
3756
|
+
${s ? c("clear-filter", k("clearFilter"), () => this._clearColumnFilter(e)) : a}
|
|
3699
3757
|
<div class="ft-header-menu-separator" role="separator"></div>
|
|
3700
3758
|
` : a}
|
|
3701
|
-
${c("hide", "
|
|
3702
|
-
${r.map((e) => c("show",
|
|
3759
|
+
${c("hide", k("hideColumn"), () => this._setColumnHidden(e, !0))}
|
|
3760
|
+
${r.map((e) => c("show", k("showColumn", { header: e.header }), () => this._setColumnHidden(e.key, !1)))}
|
|
3703
3761
|
<div class="ft-header-menu-separator" role="separator"></div>
|
|
3704
|
-
${c("autofit", "
|
|
3705
|
-
${c("wider", "
|
|
3706
|
-
${c("narrower", "
|
|
3762
|
+
${c("autofit", k("autoFitWidth"), () => this._autoFitColumn(e))}
|
|
3763
|
+
${c("wider", k("wider"), () => this._resizeColumnBy(e, X), !0)}
|
|
3764
|
+
${c("narrower", k("narrower"), () => this._resizeColumnBy(e, -20), !0)}
|
|
3707
3765
|
</div>
|
|
3708
3766
|
`;
|
|
3709
3767
|
}
|
|
@@ -3725,22 +3783,22 @@ var q = {
|
|
|
3725
3783
|
style="position: fixed; left: ${n}px; top: ${r}px; z-index: 200;"
|
|
3726
3784
|
@mousedown=${(e) => e.stopPropagation()}
|
|
3727
3785
|
@keydown=${(e) => this._onMenuKeydown(e, ".ft-body-context-menu", l)}>
|
|
3728
|
-
${d("
|
|
3786
|
+
${d(k("copy"), () => this._handleCopy(!1))}
|
|
3729
3787
|
${f}
|
|
3730
|
-
${d("
|
|
3731
|
-
${d("
|
|
3732
|
-
${d("
|
|
3788
|
+
${d(k("insertRowAbove"), () => this.addRow(void 0, t))}
|
|
3789
|
+
${d(k("insertRowBelow"), () => this.addRow(void 0, t + 1))}
|
|
3790
|
+
${d(k("deleteRow"), () => this.deleteRows([t]), !0)}
|
|
3733
3791
|
${f}
|
|
3734
|
-
${d("
|
|
3792
|
+
${d(k("hideColumn"), () => this._setColumnHidden(o.key, !0))}
|
|
3735
3793
|
${f}
|
|
3736
|
-
${d("
|
|
3737
|
-
${d("
|
|
3794
|
+
${d(`${k("sortAscending")} ↑`, () => this._applySortFromMenu(o.key, "asc"))}
|
|
3795
|
+
${d(`${k("sortDescending")} ↓`, () => this._applySortFromMenu(o.key, "desc"))}
|
|
3738
3796
|
${f}
|
|
3739
|
-
${d("
|
|
3740
|
-
${c ? d("
|
|
3797
|
+
${d(k("filterByThisValue"), () => this.setFilter(o.key, (e) => e === s))}
|
|
3798
|
+
${c ? d(k("clearFilter"), () => this.removeFilter(o.key)) : a}
|
|
3741
3799
|
${f}
|
|
3742
|
-
${d(u ? "
|
|
3743
|
-
${u ? d("
|
|
3800
|
+
${d(k(u ? "editComment" : "addComment"), () => this._openCommentPopup(t, o.key, n, r))}
|
|
3801
|
+
${u ? d(k("deleteComment"), () => this.setComment(t, o.key, null), !0) : a}
|
|
3744
3802
|
</div>
|
|
3745
3803
|
`;
|
|
3746
3804
|
}
|
|
@@ -4086,8 +4144,8 @@ var q = {
|
|
|
4086
4144
|
e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
|
|
4087
4145
|
}}>
|
|
4088
4146
|
<option value="all">${k("all")}</option>
|
|
4089
|
-
<option value="true">\u2714
|
|
4090
|
-
<option value="false">\u2718
|
|
4147
|
+
<option value="true">\u2714 ${k("booleanTrue")}</option>
|
|
4148
|
+
<option value="false">\u2718 ${k("booleanFalse")}</option>
|
|
4091
4149
|
</select>
|
|
4092
4150
|
${this._renderEmptyFilterRow(e.key)}
|
|
4093
4151
|
`;
|
|
@@ -4538,7 +4596,7 @@ var q = {
|
|
|
4538
4596
|
`;
|
|
4539
4597
|
}
|
|
4540
4598
|
render() {
|
|
4541
|
-
let e = this.visibleColumns, t = this.importEnabled && this._isDragOver ? i`<div class="ft-import-overlay"
|
|
4599
|
+
let e = this.visibleColumns, t = this.importEnabled && this._isDragOver ? i`<div class="ft-import-overlay">${k("dropFileToImport")}</div>` : a, n = this.loading ? i`<div class="ft-loading-overlay"></div>` : a;
|
|
4542
4600
|
if (e.length === 0) return i`${t}${n}<div class="ft-empty">${k("noColumnsDefined")}</div>`;
|
|
4543
4601
|
let r = this.headerHeight, o = this._totalRowWidth, { start: s, end: c } = this.visibleColRange, l = [];
|
|
4544
4602
|
for (let t = 0; t < e.length; t++) (e[t].pinned === "left" || e[t].pinned === "right") && (t < s || t >= c) && l.push(t);
|
package/dist/flex-table.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, i as t, n, o as r, r as i, t as a } from "./flex-table-
|
|
1
|
+
import { a as e, i as t, n, o as r, r as i, t as a } from "./flex-table-BAQbidin.js";
|
|
2
2
|
export { a as FlexTable, t as RowSelectionState, i as UndoStack, n as exportData, e as flexTableLocale, r as renderCell };
|
package/dist/locale.d.ts
CHANGED
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
* (아이콘 자리의 글리프)는 어느 로케일에서도 같은 것을 뜻하며, 번역하면 오히려 읽히지 않는다.
|
|
26
26
|
* 그 판단은 «번역하지 않기로 한 것»이지 «빠뜨린 것»이 아니다.
|
|
27
27
|
*/
|
|
28
|
-
export type FlexTableMessageKey = 'showHiddenColumns' | 'columnMenu' | 'cellActions' | 'noColumnsDefined' | 'addCommentPlaceholder' | 'cancel' | 'save' | 'clear' | 'blankCells' | 'emptyOnly' | 'nonEmptyOnly' | 'blankAll' | 'all' | 'contains' | 'startsWith' | 'endsWith' | 'wildcard' | 'searchPlaceholder' | 'valuePlaceholder' | 'fromPlaceholder' | 'toPlaceholder' | 'findPlaceholder' | 'findPrevious' | 'findNext' | 'matchCase' | 'wholeCell' | 'closeFind' | 'replaceWithPlaceholder' | 'replace' | 'replaceAll';
|
|
28
|
+
export type FlexTableMessageKey = 'showHiddenColumns' | 'columnMenu' | 'cellActions' | 'noColumnsDefined' | 'addCommentPlaceholder' | 'cancel' | 'save' | 'clear' | 'blankCells' | 'emptyOnly' | 'nonEmptyOnly' | 'blankAll' | 'all' | 'contains' | 'startsWith' | 'endsWith' | 'wildcard' | 'searchPlaceholder' | 'valuePlaceholder' | 'fromPlaceholder' | 'toPlaceholder' | 'findPlaceholder' | 'findPrevious' | 'findNext' | 'matchCase' | 'wholeCell' | 'closeFind' | 'replaceWithPlaceholder' | 'replace' | 'replaceAll' | 'sortAscending' | 'sortDescending' | 'filter' | 'clearFilter' | 'hideColumn' | 'showColumn' | 'autoFitWidth' | 'wider' | 'narrower' | 'columnMenuFor' | 'columnMenuRegion' | 'copy' | 'insertRowAbove' | 'insertRowBelow' | 'deleteRow' | 'filterByThisValue' | 'addComment' | 'editComment' | 'deleteComment' | 'booleanTrue' | 'booleanFalse' | 'dropFileToImport';
|
|
29
29
|
/** 이 패키지의 chrome 문자열 묶음. 소비자가 `register()` 로 언어를 더하거나 문구를 덮을 수 있다. */
|
|
30
30
|
export declare const flexTableLocale: import("@iyulab/components/dist/utilities/Locale.js").LocaleNamespace<FlexTableMessageKey>;
|
|
31
31
|
/** 짧은 조회 별칭 — 렌더 코드가 읽히게 유지한다. */
|
|
32
|
-
export declare const t: (key: FlexTableMessageKey) => string;
|
|
32
|
+
export declare const t: (key: FlexTableMessageKey, params?: Record<string, string | number>) => string;
|
package/dist/react.js
CHANGED