@iyulab/flex-table 0.35.0 → 0.36.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.
@@ -978,8 +978,697 @@ function y(e) {
978
978
  return String(e);
979
979
  }
980
980
  //#endregion
981
+ //#region node_modules/@iyulab/components/dist/utilities/Locale.js
982
+ var b = new Map(Object.entries(/* #__PURE__ */ Object.assign({
983
+ "../assets/locales/ar.json": {
984
+ valueMissing: "هذا الحقل مطلوب",
985
+ badInput: "يرجى إدخال قيمة صالحة",
986
+ typeMismatch: "يرجى إدخال قيمة بالتنسيق الصحيح",
987
+ patternMismatch: "يرجى اتباع التنسيق المطلوب",
988
+ rangeUnderflow: "يجب أن تكون القيمة {min} على الأقل",
989
+ rangeOverflow: "يجب ألا تتجاوز القيمة {max}",
990
+ stepMismatch: "يجب أن تكون القيمة من مضاعفات {step}",
991
+ tooShort: "يجب أن تكون {min} على الأقل",
992
+ tooLong: "يجب ألا تتجاوز {max}",
993
+ increment: "زيادة القيمة",
994
+ decrement: "إنقاص القيمة",
995
+ clear: "مسح القيمة",
996
+ today: "اليوم",
997
+ time: "الوقت",
998
+ showPassword: "إظهار كلمة المرور",
999
+ hidePassword: "إخفاء كلمة المرور",
1000
+ previousSlide: "الشريحة السابقة",
1001
+ nextSlide: "الشريحة التالية",
1002
+ goToSlide: "الانتقال إلى الشريحة {n}",
1003
+ chooseDate: "اختر التاريخ",
1004
+ previousMonth: "الشهر السابق",
1005
+ nextMonth: "الشهر التالي",
1006
+ close: "إغلاق",
1007
+ copy: "نسخ",
1008
+ copied: "تم النسخ",
1009
+ chooseFile: "اختر ملفًا",
1010
+ noFileChosen: "لم يتم اختيار أي ملف",
1011
+ filesSelected: "تم اختيار {count} ملفات",
1012
+ resizePanels: "تغيير حجم اللوحات",
1013
+ search: "بحث",
1014
+ alertError: "خطأ",
1015
+ alertWarning: "تحذير",
1016
+ alertSuccess: "نجاح",
1017
+ alertInfo: "معلومات",
1018
+ alertNotice: "إشعار",
1019
+ alertMessage: "رسالة",
1020
+ remove: "إزالة",
1021
+ closeTab: "إغلاق علامة التبويب"
1022
+ },
1023
+ "../assets/locales/de.json": {
1024
+ valueMissing: "Dieses Feld ist erforderlich",
1025
+ badInput: "Bitte geben Sie einen gültigen Wert ein",
1026
+ typeMismatch: "Bitte geben Sie einen gültigen Wert ein",
1027
+ patternMismatch: "Bitte halten Sie sich an das angeforderte Format",
1028
+ rangeUnderflow: "Der Wert muss mindestens {min} betragen",
1029
+ rangeOverflow: "Der Wert darf höchstens {max} betragen",
1030
+ stepMismatch: "Der Wert muss ein Vielfaches von {step} sein",
1031
+ tooShort: "Muss mindestens {min} betragen",
1032
+ tooLong: "Darf höchstens {max} betragen",
1033
+ increment: "Wert erhöhen",
1034
+ decrement: "Wert verringern",
1035
+ clear: "Wert löschen",
1036
+ today: "Heute",
1037
+ time: "Uhrzeit",
1038
+ showPassword: "Passwort anzeigen",
1039
+ hidePassword: "Passwort verbergen",
1040
+ previousSlide: "Vorherige Folie",
1041
+ nextSlide: "Nächste Folie",
1042
+ goToSlide: "Zu Folie {n} wechseln",
1043
+ chooseDate: "Datum auswählen",
1044
+ previousMonth: "Vorheriger Monat",
1045
+ nextMonth: "Nächster Monat",
1046
+ close: "Schließen",
1047
+ copy: "Kopieren",
1048
+ copied: "Kopiert",
1049
+ chooseFile: "Datei auswählen",
1050
+ noFileChosen: "Keine Datei ausgewählt",
1051
+ filesSelected: "{count} Dateien ausgewählt",
1052
+ resizePanels: "Bereichsgröße ändern",
1053
+ search: "Suchen",
1054
+ alertError: "Fehler",
1055
+ alertWarning: "Warnung",
1056
+ alertSuccess: "Erfolg",
1057
+ alertInfo: "Information",
1058
+ alertNotice: "Hinweis",
1059
+ alertMessage: "Nachricht",
1060
+ remove: "Entfernen",
1061
+ closeTab: "Tab schließen"
1062
+ },
1063
+ "../assets/locales/en.json": {
1064
+ valueMissing: "This field is required",
1065
+ badInput: "Please enter a valid value",
1066
+ typeMismatch: "Please enter a valid value",
1067
+ patternMismatch: "Please match the requested format",
1068
+ rangeUnderflow: "Value must be at least {min}",
1069
+ rangeOverflow: "Value must be at most {max}",
1070
+ stepMismatch: "Value must be a multiple of {step}",
1071
+ tooShort: "Must be at least {min}",
1072
+ tooLong: "Must be at most {max}",
1073
+ increment: "Increase value",
1074
+ decrement: "Decrease value",
1075
+ clear: "Clear value",
1076
+ today: "Today",
1077
+ time: "Time",
1078
+ showPassword: "Show password",
1079
+ hidePassword: "Hide password",
1080
+ previousSlide: "Previous slide",
1081
+ nextSlide: "Next slide",
1082
+ goToSlide: "Go to slide {n}",
1083
+ chooseDate: "Choose date",
1084
+ previousMonth: "Previous month",
1085
+ nextMonth: "Next month",
1086
+ close: "Close",
1087
+ copy: "Copy",
1088
+ copied: "Copied",
1089
+ chooseFile: "Choose file",
1090
+ noFileChosen: "No file chosen",
1091
+ filesSelected: "{count} files selected",
1092
+ resizePanels: "Resize panels",
1093
+ search: "Search",
1094
+ alertError: "Error",
1095
+ alertWarning: "Warning",
1096
+ alertSuccess: "Success",
1097
+ alertInfo: "Information",
1098
+ alertNotice: "Notice",
1099
+ alertMessage: "Message",
1100
+ remove: "Remove",
1101
+ closeTab: "Close tab"
1102
+ },
1103
+ "../assets/locales/es.json": {
1104
+ valueMissing: "Este campo es obligatorio",
1105
+ badInput: "Introduzca un valor válido",
1106
+ typeMismatch: "Introduzca un valor con el formato correcto",
1107
+ patternMismatch: "Ajuste el valor al formato solicitado",
1108
+ rangeUnderflow: "El valor debe ser como mínimo {min}",
1109
+ rangeOverflow: "El valor debe ser como máximo {max}",
1110
+ stepMismatch: "El valor debe ser múltiplo de {step}",
1111
+ tooShort: "Debe ser como mínimo {min}",
1112
+ tooLong: "Debe ser como máximo {max}",
1113
+ increment: "Aumentar valor",
1114
+ decrement: "Disminuir valor",
1115
+ clear: "Borrar valor",
1116
+ today: "Hoy",
1117
+ time: "Hora",
1118
+ showPassword: "Mostrar contraseña",
1119
+ hidePassword: "Ocultar contraseña",
1120
+ previousSlide: "Diapositiva anterior",
1121
+ nextSlide: "Siguiente diapositiva",
1122
+ goToSlide: "Ir a la diapositiva {n}",
1123
+ chooseDate: "Elegir fecha",
1124
+ previousMonth: "Mes anterior",
1125
+ nextMonth: "Mes siguiente",
1126
+ close: "Cerrar",
1127
+ copy: "Copiar",
1128
+ copied: "Copiado",
1129
+ chooseFile: "Elegir archivo",
1130
+ noFileChosen: "Ningún archivo elegido",
1131
+ filesSelected: "{count} archivos seleccionados",
1132
+ resizePanels: "Cambiar el tamaño de los paneles",
1133
+ search: "Buscar",
1134
+ alertError: "Error",
1135
+ alertWarning: "Advertencia",
1136
+ alertSuccess: "Éxito",
1137
+ alertInfo: "Información",
1138
+ alertNotice: "Aviso",
1139
+ alertMessage: "Mensaje",
1140
+ remove: "Quitar",
1141
+ closeTab: "Cerrar pestaña"
1142
+ },
1143
+ "../assets/locales/fr.json": {
1144
+ valueMissing: "Ce champ est obligatoire",
1145
+ badInput: "Veuillez saisir une valeur valide",
1146
+ typeMismatch: "Veuillez saisir une valeur au format correct",
1147
+ patternMismatch: "Veuillez respecter le format demandé",
1148
+ rangeUnderflow: "La valeur doit être supérieure ou égale à {min}",
1149
+ rangeOverflow: "La valeur doit être inférieure ou égale à {max}",
1150
+ stepMismatch: "La valeur doit être un multiple de {step}",
1151
+ tooShort: "Doit être au moins {min}",
1152
+ tooLong: "Doit être au plus {max}",
1153
+ increment: "Augmenter la valeur",
1154
+ decrement: "Diminuer la valeur",
1155
+ clear: "Effacer la valeur",
1156
+ today: "Aujourd’hui",
1157
+ time: "Heure",
1158
+ showPassword: "Afficher le mot de passe",
1159
+ hidePassword: "Masquer le mot de passe",
1160
+ previousSlide: "Diapositive précédente",
1161
+ nextSlide: "Diapositive suivante",
1162
+ goToSlide: "Aller à la diapositive {n}",
1163
+ chooseDate: "Choisir une date",
1164
+ previousMonth: "Mois précédent",
1165
+ nextMonth: "Mois suivant",
1166
+ close: "Fermer",
1167
+ copy: "Copier",
1168
+ copied: "Copié",
1169
+ chooseFile: "Choisir un fichier",
1170
+ noFileChosen: "Aucun fichier choisi",
1171
+ filesSelected: "{count} fichiers sélectionnés",
1172
+ resizePanels: "Redimensionner les panneaux",
1173
+ search: "Rechercher",
1174
+ alertError: "Erreur",
1175
+ alertWarning: "Avertissement",
1176
+ alertSuccess: "Succès",
1177
+ alertInfo: "Information",
1178
+ alertNotice: "Avis",
1179
+ alertMessage: "Message",
1180
+ remove: "Supprimer",
1181
+ closeTab: "Fermer l'onglet"
1182
+ },
1183
+ "../assets/locales/id.json": {
1184
+ valueMissing: "Kolom ini wajib diisi",
1185
+ badInput: "Masukkan nilai yang valid",
1186
+ typeMismatch: "Masukkan nilai dengan format yang benar",
1187
+ patternMismatch: "Sesuaikan dengan format yang diminta",
1188
+ rangeUnderflow: "Nilai harus minimal {min}",
1189
+ rangeOverflow: "Nilai harus maksimal {max}",
1190
+ stepMismatch: "Nilai harus kelipatan dari {step}",
1191
+ tooShort: "Harus minimal {min}",
1192
+ tooLong: "Harus maksimal {max}",
1193
+ increment: "Tambah nilai",
1194
+ decrement: "Kurangi nilai",
1195
+ clear: "Hapus nilai",
1196
+ today: "Hari ini",
1197
+ time: "Waktu",
1198
+ showPassword: "Tampilkan kata sandi",
1199
+ hidePassword: "Sembunyikan kata sandi",
1200
+ previousSlide: "Slide sebelumnya",
1201
+ nextSlide: "Slide berikutnya",
1202
+ goToSlide: "Buka slide {n}",
1203
+ chooseDate: "Pilih tanggal",
1204
+ previousMonth: "Bulan sebelumnya",
1205
+ nextMonth: "Bulan berikutnya",
1206
+ close: "Tutup",
1207
+ copy: "Salin",
1208
+ copied: "Disalin",
1209
+ chooseFile: "Pilih berkas",
1210
+ noFileChosen: "Tidak ada berkas dipilih",
1211
+ filesSelected: "{count} berkas dipilih",
1212
+ resizePanels: "Ubah ukuran panel",
1213
+ search: "Cari",
1214
+ alertError: "Kesalahan",
1215
+ alertWarning: "Peringatan",
1216
+ alertSuccess: "Berhasil",
1217
+ alertInfo: "Informasi",
1218
+ alertNotice: "Pemberitahuan",
1219
+ alertMessage: "Pesan",
1220
+ remove: "Hapus",
1221
+ closeTab: "Tutup tab"
1222
+ },
1223
+ "../assets/locales/ja.json": {
1224
+ valueMissing: "この項目は必須です",
1225
+ badInput: "有効な値を入力してください",
1226
+ typeMismatch: "正しい形式の値を入力してください",
1227
+ patternMismatch: "指定された形式で入力してください",
1228
+ rangeUnderflow: "値は{min}以上である必要があります",
1229
+ rangeOverflow: "値は{max}以下である必要があります",
1230
+ stepMismatch: "値は{step}の倍数である必要があります",
1231
+ tooShort: "{min}以上である必要があります",
1232
+ tooLong: "{max}以下である必要があります",
1233
+ increment: "値を増やす",
1234
+ decrement: "値を減らす",
1235
+ clear: "値をクリア",
1236
+ today: "今日",
1237
+ time: "時刻",
1238
+ showPassword: "パスワードを表示",
1239
+ hidePassword: "パスワードを隠す",
1240
+ previousSlide: "前のスライド",
1241
+ nextSlide: "次のスライド",
1242
+ goToSlide: "スライド{n}に移動",
1243
+ chooseDate: "日付を選択",
1244
+ previousMonth: "前月",
1245
+ nextMonth: "翌月",
1246
+ close: "閉じる",
1247
+ copy: "コピー",
1248
+ copied: "コピーしました",
1249
+ chooseFile: "ファイルを選択",
1250
+ noFileChosen: "ファイルが選択されていません",
1251
+ filesSelected: "{count}個のファイルを選択しました",
1252
+ resizePanels: "パネルのサイズ変更",
1253
+ search: "検索",
1254
+ alertError: "エラー",
1255
+ alertWarning: "警告",
1256
+ alertSuccess: "完了",
1257
+ alertInfo: "お知らせ",
1258
+ alertNotice: "通知",
1259
+ alertMessage: "メッセージ",
1260
+ remove: "削除",
1261
+ closeTab: "タブを閉じる"
1262
+ },
1263
+ "../assets/locales/ko.json": {
1264
+ valueMissing: "필수 항목입니다",
1265
+ badInput: "올바른 값을 입력하세요",
1266
+ typeMismatch: "올바른 형식의 값을 입력하세요",
1267
+ patternMismatch: "요청된 형식에 맞게 입력하세요",
1268
+ rangeUnderflow: "값은 {min} 이상이어야 합니다",
1269
+ rangeOverflow: "값은 {max} 이하여야 합니다",
1270
+ stepMismatch: "값은 {step}의 배수여야 합니다",
1271
+ tooShort: "최소 {min} 이상이어야 합니다",
1272
+ tooLong: "최대 {max} 이하여야 합니다",
1273
+ increment: "값 증가",
1274
+ decrement: "값 감소",
1275
+ clear: "값 지우기",
1276
+ today: "오늘",
1277
+ time: "시간",
1278
+ showPassword: "비밀번호 표시",
1279
+ hidePassword: "비밀번호 숨기기",
1280
+ previousSlide: "이전 슬라이드",
1281
+ nextSlide: "다음 슬라이드",
1282
+ goToSlide: "{n}번 슬라이드로 이동",
1283
+ chooseDate: "날짜 선택",
1284
+ previousMonth: "이전 달",
1285
+ nextMonth: "다음 달",
1286
+ close: "닫기",
1287
+ copy: "복사",
1288
+ copied: "복사됨",
1289
+ chooseFile: "파일 선택",
1290
+ noFileChosen: "선택된 파일 없음",
1291
+ filesSelected: "{count}개 파일 선택됨",
1292
+ resizePanels: "패널 크기 조절",
1293
+ search: "검색",
1294
+ alertError: "오류",
1295
+ alertWarning: "경고",
1296
+ alertSuccess: "완료",
1297
+ alertInfo: "안내",
1298
+ alertNotice: "알림",
1299
+ alertMessage: "메시지",
1300
+ remove: "제거",
1301
+ closeTab: "탭 닫기"
1302
+ },
1303
+ "../assets/locales/pt-BR.json": {
1304
+ valueMissing: "Este campo é obrigatório",
1305
+ badInput: "Insira um valor válido",
1306
+ typeMismatch: "Insira um valor no formato correto",
1307
+ patternMismatch: "Siga o formato solicitado",
1308
+ rangeUnderflow: "O valor deve ser no mínimo {min}",
1309
+ rangeOverflow: "O valor deve ser no máximo {max}",
1310
+ stepMismatch: "O valor deve ser um múltiplo de {step}",
1311
+ tooShort: "Deve ser no mínimo {min}",
1312
+ tooLong: "Deve ser no máximo {max}",
1313
+ increment: "Aumentar valor",
1314
+ decrement: "Diminuir valor",
1315
+ clear: "Limpar valor",
1316
+ today: "Hoje",
1317
+ time: "Hora",
1318
+ showPassword: "Mostrar senha",
1319
+ hidePassword: "Ocultar senha",
1320
+ previousSlide: "Slide anterior",
1321
+ nextSlide: "Próximo slide",
1322
+ goToSlide: "Ir para o slide {n}",
1323
+ chooseDate: "Escolher data",
1324
+ previousMonth: "Mês anterior",
1325
+ nextMonth: "Próximo mês",
1326
+ close: "Fechar",
1327
+ copy: "Copiar",
1328
+ copied: "Copiado",
1329
+ chooseFile: "Escolher arquivo",
1330
+ noFileChosen: "Nenhum arquivo escolhido",
1331
+ filesSelected: "{count} arquivos selecionados",
1332
+ resizePanels: "Redimensionar painéis",
1333
+ search: "Pesquisar",
1334
+ alertError: "Erro",
1335
+ alertWarning: "Aviso",
1336
+ alertSuccess: "Sucesso",
1337
+ alertInfo: "Informação",
1338
+ alertNotice: "Nota",
1339
+ alertMessage: "Mensagem",
1340
+ remove: "Remover",
1341
+ closeTab: "Fechar aba"
1342
+ },
1343
+ "../assets/locales/ru.json": {
1344
+ valueMissing: "Это поле обязательно для заполнения",
1345
+ badInput: "Введите допустимое значение",
1346
+ typeMismatch: "Введите значение в правильном формате",
1347
+ patternMismatch: "Введите значение в требуемом формате",
1348
+ rangeUnderflow: "Значение должно быть не менее {min}",
1349
+ rangeOverflow: "Значение должно быть не более {max}",
1350
+ stepMismatch: "Значение должно быть кратно {step}",
1351
+ tooShort: "Должно быть не менее {min}",
1352
+ tooLong: "Должно быть не более {max}",
1353
+ increment: "Увеличить значение",
1354
+ decrement: "Уменьшить значение",
1355
+ clear: "Очистить значение",
1356
+ today: "Сегодня",
1357
+ time: "Время",
1358
+ showPassword: "Показать пароль",
1359
+ hidePassword: "Скрыть пароль",
1360
+ previousSlide: "Предыдущий слайд",
1361
+ nextSlide: "Следующий слайд",
1362
+ goToSlide: "Перейти к слайду {n}",
1363
+ chooseDate: "Выбрать дату",
1364
+ previousMonth: "Предыдущий месяц",
1365
+ nextMonth: "Следующий месяц",
1366
+ close: "Закрыть",
1367
+ copy: "Копировать",
1368
+ copied: "Скопировано",
1369
+ chooseFile: "Выбрать файл",
1370
+ noFileChosen: "Файл не выбран",
1371
+ filesSelected: "Выбрано файлов: {count}",
1372
+ resizePanels: "Изменить размер панелей",
1373
+ search: "Поиск",
1374
+ alertError: "Ошибка",
1375
+ alertWarning: "Предупреждение",
1376
+ alertSuccess: "Успешно",
1377
+ alertInfo: "Информация",
1378
+ alertNotice: "Уведомление",
1379
+ alertMessage: "Сообщение",
1380
+ remove: "Удалить",
1381
+ closeTab: "Закрыть вкладку"
1382
+ },
1383
+ "../assets/locales/th.json": {
1384
+ valueMissing: "จำเป็นต้องกรอกข้อมูลนี้",
1385
+ badInput: "กรุณากรอกค่าที่ถูกต้อง",
1386
+ typeMismatch: "กรุณากรอกค่าให้ถูกรูปแบบ",
1387
+ patternMismatch: "กรุณากรอกให้ตรงตามรูปแบบที่กำหนด",
1388
+ rangeUnderflow: "ค่าต้องมากกว่าหรือเท่ากับ {min}",
1389
+ rangeOverflow: "ค่าต้องน้อยกว่าหรือเท่ากับ {max}",
1390
+ stepMismatch: "ค่าต้องเป็นจำนวนทวีคูณของ {step}",
1391
+ tooShort: "ต้องมีอย่างน้อย {min}",
1392
+ tooLong: "ต้องไม่เกิน {max}",
1393
+ increment: "เพิ่มค่า",
1394
+ decrement: "ลดค่า",
1395
+ clear: "ล้างค่า",
1396
+ today: "วันนี้",
1397
+ time: "เวลา",
1398
+ showPassword: "แสดงรหัสผ่าน",
1399
+ hidePassword: "ซ่อนรหัสผ่าน",
1400
+ previousSlide: "สไลด์ก่อนหน้า",
1401
+ nextSlide: "สไลด์ถัดไป",
1402
+ goToSlide: "ไปที่สไลด์ที่ {n}",
1403
+ chooseDate: "เลือกวันที่",
1404
+ previousMonth: "เดือนก่อนหน้า",
1405
+ nextMonth: "เดือนถัดไป",
1406
+ close: "ปิด",
1407
+ copy: "คัดลอก",
1408
+ copied: "คัดลอกแล้ว",
1409
+ chooseFile: "เลือกไฟล์",
1410
+ noFileChosen: "ยังไม่ได้เลือกไฟล์",
1411
+ filesSelected: "เลือกแล้ว {count} ไฟล์",
1412
+ resizePanels: "ปรับขนาดแผง",
1413
+ search: "ค้นหา",
1414
+ alertError: "ข้อผิดพลาด",
1415
+ alertWarning: "คำเตือน",
1416
+ alertSuccess: "สำเร็จ",
1417
+ alertInfo: "ข้อมูล",
1418
+ alertNotice: "ประกาศ",
1419
+ alertMessage: "ข้อความ",
1420
+ remove: "ลบ",
1421
+ closeTab: "ปิดแท็บ"
1422
+ },
1423
+ "../assets/locales/vi.json": {
1424
+ valueMissing: "Trường này là bắt buộc",
1425
+ badInput: "Vui lòng nhập giá trị hợp lệ",
1426
+ typeMismatch: "Vui lòng nhập giá trị đúng định dạng",
1427
+ patternMismatch: "Vui lòng nhập đúng định dạng yêu cầu",
1428
+ rangeUnderflow: "Giá trị phải lớn hơn hoặc bằng {min}",
1429
+ rangeOverflow: "Giá trị phải nhỏ hơn hoặc bằng {max}",
1430
+ stepMismatch: "Giá trị phải là bội số của {step}",
1431
+ tooShort: "Phải lớn hơn hoặc bằng {min}",
1432
+ tooLong: "Phải nhỏ hơn hoặc bằng {max}",
1433
+ increment: "Tăng giá trị",
1434
+ decrement: "Giảm giá trị",
1435
+ clear: "Xóa giá trị",
1436
+ today: "Hôm nay",
1437
+ time: "Giờ",
1438
+ showPassword: "Hiện mật khẩu",
1439
+ hidePassword: "Ẩn mật khẩu",
1440
+ previousSlide: "Slide trước",
1441
+ nextSlide: "Slide sau",
1442
+ goToSlide: "Đi đến slide {n}",
1443
+ chooseDate: "Chọn ngày",
1444
+ previousMonth: "Tháng trước",
1445
+ nextMonth: "Tháng sau",
1446
+ close: "Đóng",
1447
+ copy: "Sao chép",
1448
+ copied: "Đã sao chép",
1449
+ chooseFile: "Chọn tệp",
1450
+ noFileChosen: "Chưa chọn tệp nào",
1451
+ filesSelected: "Đã chọn {count} tệp",
1452
+ resizePanels: "Thay đổi kích thước bảng",
1453
+ search: "Tìm kiếm",
1454
+ alertError: "Lỗi",
1455
+ alertWarning: "Cảnh báo",
1456
+ alertSuccess: "Thành công",
1457
+ alertInfo: "Thông tin",
1458
+ alertNotice: "Lưu ý",
1459
+ alertMessage: "Thông báo",
1460
+ remove: "Xóa",
1461
+ closeTab: "Đóng tab"
1462
+ },
1463
+ "../assets/locales/zh-CN.json": {
1464
+ valueMissing: "此项为必填项",
1465
+ badInput: "请输入有效的值",
1466
+ typeMismatch: "请输入正确格式的值",
1467
+ patternMismatch: "请按照要求的格式输入",
1468
+ rangeUnderflow: "值必须大于或等于{min}",
1469
+ rangeOverflow: "值必须小于或等于{max}",
1470
+ stepMismatch: "值必须是{step}的倍数",
1471
+ tooShort: "至少需要{min}",
1472
+ tooLong: "最多不能超过{max}",
1473
+ increment: "增加值",
1474
+ decrement: "减少值",
1475
+ clear: "清除值",
1476
+ today: "今天",
1477
+ time: "时间",
1478
+ showPassword: "显示密码",
1479
+ hidePassword: "隐藏密码",
1480
+ previousSlide: "上一张幻灯片",
1481
+ nextSlide: "下一张幻灯片",
1482
+ goToSlide: "转到幻灯片{n}",
1483
+ chooseDate: "选择日期",
1484
+ previousMonth: "上个月",
1485
+ nextMonth: "下个月",
1486
+ close: "关闭",
1487
+ copy: "复制",
1488
+ copied: "已复制",
1489
+ chooseFile: "选择文件",
1490
+ noFileChosen: "未选择文件",
1491
+ filesSelected: "已选择{count}个文件",
1492
+ resizePanels: "调整面板大小",
1493
+ search: "搜索",
1494
+ alertError: "错误",
1495
+ alertWarning: "警告",
1496
+ alertSuccess: "成功",
1497
+ alertInfo: "信息",
1498
+ alertNotice: "提示",
1499
+ alertMessage: "消息",
1500
+ remove: "移除",
1501
+ closeTab: "关闭标签页"
1502
+ },
1503
+ "../assets/locales/zh-TW.json": {
1504
+ valueMissing: "此欄位為必填",
1505
+ badInput: "請輸入有效的值",
1506
+ typeMismatch: "請輸入正確格式的值",
1507
+ patternMismatch: "請依照要求的格式輸入",
1508
+ rangeUnderflow: "值必須大於或等於{min}",
1509
+ rangeOverflow: "值必須小於或等於{max}",
1510
+ stepMismatch: "值必須是{step}的倍數",
1511
+ tooShort: "至少需要{min}",
1512
+ tooLong: "最多不能超過{max}",
1513
+ increment: "增加值",
1514
+ decrement: "減少值",
1515
+ clear: "清除值",
1516
+ today: "今天",
1517
+ time: "時間",
1518
+ showPassword: "顯示密碼",
1519
+ hidePassword: "隱藏密碼",
1520
+ previousSlide: "上一張投影片",
1521
+ nextSlide: "下一張投影片",
1522
+ goToSlide: "前往投影片{n}",
1523
+ chooseDate: "選擇日期",
1524
+ previousMonth: "上個月",
1525
+ nextMonth: "下個月",
1526
+ close: "關閉",
1527
+ copy: "複製",
1528
+ copied: "已複製",
1529
+ chooseFile: "選擇檔案",
1530
+ noFileChosen: "未選擇檔案",
1531
+ filesSelected: "已選擇{count}個檔案",
1532
+ resizePanels: "調整面板大小",
1533
+ search: "搜尋",
1534
+ alertError: "錯誤",
1535
+ alertWarning: "警告",
1536
+ alertSuccess: "成功",
1537
+ alertInfo: "資訊",
1538
+ alertNotice: "提示",
1539
+ alertMessage: "訊息",
1540
+ remove: "移除",
1541
+ closeTab: "關閉分頁"
1542
+ }
1543
+ })).map(([e, t]) => [(e.split("/").pop()?.replace(".json", "") || "").toLowerCase(), t])), x = /* @__PURE__ */ new Map();
1544
+ function S() {
1545
+ return typeof document < "u" && document.documentElement?.lang ? document.documentElement.lang : typeof window < "u" && typeof navigator < "u" && navigator.language ? navigator.language : "en";
1546
+ }
1547
+ var C = S();
1548
+ function w(e) {
1549
+ let t = e.toLowerCase(), n = t.split("-")[0];
1550
+ return n === t ? [t, "en"] : [
1551
+ t,
1552
+ n,
1553
+ "en"
1554
+ ];
1555
+ }
1556
+ function T(e, t) {
1557
+ return t ? e.replace(/\{(\w+)\}/g, (e, n) => t[n] == null ? `{${n}}` : String(t[n])) : e;
1558
+ }
1559
+ function E(e, t) {
1560
+ for (let n of w(e)) {
1561
+ let e = x.get(n)?.[t] ?? b.get(n)?.[t];
1562
+ if (e) return e;
1563
+ }
1564
+ return b.get("en")[t];
1565
+ }
1566
+ var D = /* @__PURE__ */ new Map(), O = class {
1567
+ constructor() {}
1568
+ static set(e) {
1569
+ C = e;
1570
+ }
1571
+ static get() {
1572
+ return C;
1573
+ }
1574
+ static register(e, t) {
1575
+ let n = e.toLowerCase(), r = x.get(n) ?? b.get(n) ?? b.get("en");
1576
+ x.set(n, {
1577
+ ...r,
1578
+ ...t
1579
+ });
1580
+ }
1581
+ static getValue(e, t) {
1582
+ return T(E(C, e), t);
1583
+ }
1584
+ static namespace(e) {
1585
+ return {
1586
+ name: e,
1587
+ register(t, n) {
1588
+ let r = D.get(e) ?? /* @__PURE__ */ new Map(), i = t.toLowerCase();
1589
+ r.set(i, {
1590
+ ...r.get(i),
1591
+ ...n
1592
+ }), D.set(e, r);
1593
+ },
1594
+ text(t, n) {
1595
+ let r = D.get(e);
1596
+ for (let e of w(C)) {
1597
+ let i = r?.get(e)?.[t];
1598
+ if (i) return T(i, n);
1599
+ }
1600
+ return t;
1601
+ }
1602
+ };
1603
+ }
1604
+ }.namespace("flex-table");
1605
+ O.register("en", {
1606
+ showHiddenColumns: "Show hidden column(s)",
1607
+ columnMenu: "Column menu",
1608
+ cellActions: "Cell actions",
1609
+ noColumnsDefined: "No columns defined",
1610
+ addCommentPlaceholder: "Add a comment… (Ctrl+Enter to save)",
1611
+ cancel: "Cancel",
1612
+ save: "Save",
1613
+ clear: "Clear",
1614
+ blankCells: "Blank cells",
1615
+ emptyOnly: "Empty only",
1616
+ nonEmptyOnly: "Non-empty only",
1617
+ blankAll: "— All —",
1618
+ all: "All",
1619
+ contains: "Contains",
1620
+ startsWith: "Starts with",
1621
+ endsWith: "Ends with",
1622
+ wildcard: "Wildcard",
1623
+ searchPlaceholder: "Search...",
1624
+ valuePlaceholder: "Value",
1625
+ fromPlaceholder: "From",
1626
+ toPlaceholder: "To",
1627
+ findPlaceholder: "Find...",
1628
+ findPrevious: "Previous (Shift+Enter)",
1629
+ findNext: "Next (Enter)",
1630
+ matchCase: "Match case",
1631
+ wholeCell: "Whole cell",
1632
+ closeFind: "Close (Escape)",
1633
+ replaceWithPlaceholder: "Replace with...",
1634
+ replace: "Replace",
1635
+ replaceAll: "Replace all"
1636
+ }), O.register("ko", {
1637
+ showHiddenColumns: "숨긴 열 보기",
1638
+ columnMenu: "열 메뉴",
1639
+ cellActions: "셀 작업",
1640
+ noColumnsDefined: "정의된 열이 없습니다",
1641
+ addCommentPlaceholder: "메모 입력… (Ctrl+Enter 로 저장)",
1642
+ cancel: "취소",
1643
+ save: "저장",
1644
+ clear: "지우기",
1645
+ blankCells: "빈 셀",
1646
+ emptyOnly: "빈 값만",
1647
+ nonEmptyOnly: "빈 값 제외",
1648
+ blankAll: "— 전체 —",
1649
+ all: "전체",
1650
+ contains: "포함",
1651
+ startsWith: "시작 문자",
1652
+ endsWith: "끝 문자",
1653
+ wildcard: "와일드카드",
1654
+ searchPlaceholder: "검색...",
1655
+ valuePlaceholder: "값",
1656
+ fromPlaceholder: "시작",
1657
+ toPlaceholder: "끝",
1658
+ findPlaceholder: "찾기...",
1659
+ findPrevious: "이전 (Shift+Enter)",
1660
+ findNext: "다음 (Enter)",
1661
+ matchCase: "대/소문자 구분",
1662
+ wholeCell: "셀 전체 일치",
1663
+ closeFind: "닫기 (Escape)",
1664
+ replaceWithPlaceholder: "바꿀 내용...",
1665
+ replace: "바꾸기",
1666
+ replaceAll: "모두 바꾸기"
1667
+ });
1668
+ var k = (e) => O.text(e);
1669
+ //#endregion
981
1670
  //#region src/core/selection.ts
982
- function b(e) {
1671
+ function ee(e) {
983
1672
  return {
984
1673
  startRow: Math.min(e.startRow, e.endRow),
985
1674
  startCol: Math.min(e.startCol, e.endCol),
@@ -987,7 +1676,7 @@ function b(e) {
987
1676
  endCol: Math.max(e.startCol, e.endCol)
988
1677
  };
989
1678
  }
990
- var x = class {
1679
+ var te = class {
991
1680
  constructor() {
992
1681
  this.activeCell = null, this.rangeAnchor = null, this.range = null, this.extraRanges = [], this._rowCount = 0, this._colCount = 0;
993
1682
  }
@@ -1014,7 +1703,7 @@ var x = class {
1014
1703
  return e < 0 || e >= this._rowCount || t < 0 || t >= this._colCount ? this.activeCell : (!this.rangeAnchor && this.activeCell && (this.rangeAnchor = { ...this.activeCell }), this.activeCell = {
1015
1704
  row: e,
1016
1705
  col: t
1017
- }, this.rangeAnchor && (this.range = b({
1706
+ }, this.rangeAnchor && (this.range = ee({
1018
1707
  startRow: this.rangeAnchor.row,
1019
1708
  startCol: this.rangeAnchor.col,
1020
1709
  endRow: e,
@@ -1085,7 +1774,7 @@ var x = class {
1085
1774
  shiftMoveRight() {
1086
1775
  return this.activeCell ? this.setActiveWithRange(this.activeCell.row, this.activeCell.col + 1) : null;
1087
1776
  }
1088
- }, S = class {
1777
+ }, ne = class {
1089
1778
  constructor() {
1090
1779
  this.current = null;
1091
1780
  }
@@ -1106,7 +1795,7 @@ var x = class {
1106
1795
  let e = this.current;
1107
1796
  return this.current = null, e;
1108
1797
  }
1109
- }, C = class {
1798
+ }, A = class {
1110
1799
  constructor() {
1111
1800
  this._selected = /* @__PURE__ */ new Set(), this._mode = "multi", this._rowCount = 0;
1112
1801
  }
@@ -1167,7 +1856,7 @@ var x = class {
1167
1856
  };
1168
1857
  //#endregion
1169
1858
  //#region src/core/filtering.ts
1170
- function w(e, t, n) {
1859
+ function j(e, t, n) {
1171
1860
  if (t.length === 0) return Array.from({ length: e.length }, (e, t) => t);
1172
1861
  let r = [];
1173
1862
  for (let i = 0; i < e.length; i++) {
@@ -1186,9 +1875,9 @@ function w(e, t, n) {
1186
1875
  }
1187
1876
  //#endregion
1188
1877
  //#region src/core/undo.ts
1189
- var T = 100, E = class {
1878
+ var re = 100, M = class {
1190
1879
  constructor() {
1191
- this._undoStack = [], this._redoStack = [], this._maxSize = T;
1880
+ this._undoStack = [], this._redoStack = [], this._maxSize = re;
1192
1881
  }
1193
1882
  get maxSize() {
1194
1883
  return this._maxSize;
@@ -1225,7 +1914,7 @@ var T = 100, E = class {
1225
1914
  };
1226
1915
  //#endregion
1227
1916
  //#region src/clipboard/clipboard.ts
1228
- function D(e, t, n) {
1917
+ function ie(e, t, n) {
1229
1918
  let r = [];
1230
1919
  for (let i = n.startRow; i <= n.endRow; i++) {
1231
1920
  let a = e[i], o = [];
@@ -1237,7 +1926,7 @@ function D(e, t, n) {
1237
1926
  }
1238
1927
  return r.join("\n");
1239
1928
  }
1240
- function O(e) {
1929
+ function N(e) {
1241
1930
  let t = e.replace(/\r\n/g, "\n").replace(/\r/g, "\n"), n = [], r = [], i = 0, a = t.length;
1242
1931
  for (; i <= a;) {
1243
1932
  if (i === a) {
@@ -1267,7 +1956,7 @@ function O(e) {
1267
1956
  }
1268
1957
  return n;
1269
1958
  }
1270
- function k(e, t) {
1959
+ function P(e, t) {
1271
1960
  if (e === "") return null;
1272
1961
  switch (t.type) {
1273
1962
  case "number": {
@@ -1280,7 +1969,7 @@ function k(e, t) {
1280
1969
  }
1281
1970
  //#endregion
1282
1971
  //#region src/export/xlsx-writer.ts
1283
- var A = (() => {
1972
+ var ae = (() => {
1284
1973
  let e = /* @__PURE__ */ new Uint32Array(256);
1285
1974
  for (let t = 0; t < 256; t++) {
1286
1975
  let n = t;
@@ -1289,56 +1978,56 @@ var A = (() => {
1289
1978
  }
1290
1979
  return e;
1291
1980
  })();
1292
- function ee(e) {
1981
+ function oe(e) {
1293
1982
  let t = 4294967295;
1294
- for (let n = 0; n < e.length; n++) t = A[(t ^ e[n]) & 255] ^ t >>> 8;
1983
+ for (let n = 0; n < e.length; n++) t = ae[(t ^ e[n]) & 255] ^ t >>> 8;
1295
1984
  return (t ^ 4294967295) >>> 0;
1296
1985
  }
1297
- var j = new TextEncoder();
1298
- function te(e) {
1986
+ var F = new TextEncoder();
1987
+ function se(e) {
1299
1988
  let t = [], n = [], r = 0;
1300
1989
  for (let i of e) {
1301
- let e = j.encode(i.name), a = ee(i.data), o = i.data.length, s = new ArrayBuffer(30 + e.length), c = new DataView(s);
1990
+ let e = F.encode(i.name), a = oe(i.data), o = i.data.length, s = new ArrayBuffer(30 + e.length), c = new DataView(s);
1302
1991
  c.setUint32(0, 67324752, !0), c.setUint16(4, 20, !0), c.setUint16(6, 0, !0), c.setUint16(8, 0, !0), c.setUint16(10, 0, !0), c.setUint16(12, 33, !0), c.setUint32(14, a, !0), c.setUint32(18, o, !0), c.setUint32(22, o, !0), c.setUint16(26, e.length, !0), c.setUint16(28, 0, !0), new Uint8Array(s, 30).set(e), t.push(new Uint8Array(s)), t.push(i.data);
1303
1992
  let l = new ArrayBuffer(46 + e.length), u = new DataView(l);
1304
1993
  u.setUint32(0, 33639248, !0), u.setUint16(4, 20, !0), u.setUint16(6, 20, !0), u.setUint16(8, 0, !0), u.setUint16(10, 0, !0), u.setUint16(12, 0, !0), u.setUint16(14, 33, !0), u.setUint32(16, a, !0), u.setUint32(20, o, !0), u.setUint32(24, o, !0), u.setUint16(28, e.length, !0), u.setUint16(30, 0, !0), u.setUint16(32, 0, !0), u.setUint16(34, 0, !0), u.setUint16(36, 0, !0), u.setUint32(38, 0, !0), u.setUint32(42, r, !0), new Uint8Array(l, 46).set(e), n.push(new Uint8Array(l)), r += 30 + e.length + o;
1305
1994
  }
1306
- let i = M(n), a = /* @__PURE__ */ new ArrayBuffer(22), o = new DataView(a);
1307
- return o.setUint32(0, 101010256, !0), o.setUint16(4, 0, !0), o.setUint16(6, 0, !0), o.setUint16(8, e.length, !0), o.setUint16(10, e.length, !0), o.setUint32(12, i.length, !0), o.setUint32(16, r, !0), o.setUint16(20, 0, !0), M([
1995
+ let i = I(n), a = /* @__PURE__ */ new ArrayBuffer(22), o = new DataView(a);
1996
+ return o.setUint32(0, 101010256, !0), o.setUint16(4, 0, !0), o.setUint16(6, 0, !0), o.setUint16(8, e.length, !0), o.setUint16(10, e.length, !0), o.setUint32(12, i.length, !0), o.setUint32(16, r, !0), o.setUint16(20, 0, !0), I([
1308
1997
  ...t,
1309
1998
  i,
1310
1999
  new Uint8Array(a)
1311
2000
  ]);
1312
2001
  }
1313
- function M(e) {
2002
+ function I(e) {
1314
2003
  let t = e.reduce((e, t) => e + t.length, 0), n = new Uint8Array(t), r = 0;
1315
2004
  for (let t of e) n.set(t, r), r += t.length;
1316
2005
  return n;
1317
2006
  }
1318
- function N(e) {
2007
+ function L(e) {
1319
2008
  return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
1320
2009
  }
1321
- function P(e) {
2010
+ function ce(e) {
1322
2011
  let t = "";
1323
2012
  for (e++; e > 0;) t = String.fromCharCode(64 + (e % 26 || 26)) + t, e = Math.floor((e - 1) / 26);
1324
2013
  return t;
1325
2014
  }
1326
- function F(e, t) {
1327
- return P(t) + (e + 1);
2015
+ function R(e, t) {
2016
+ return ce(t) + (e + 1);
1328
2017
  }
1329
- function ne(e) {
2018
+ function le(e) {
1330
2019
  let t = Date.UTC(1899, 11, 30);
1331
2020
  return (e.getTime() - t) / 864e5;
1332
2021
  }
1333
- var re = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\n <Default Extension=\"xml\" ContentType=\"application/xml\"/>\n <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>\n <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>\n <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>\n</Types>", ie = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>\n</Relationships>", ae = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\n <sheets><sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/></sheets>\n</workbook>", oe = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>\n</Relationships>", se = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">\n <numFmts count=\"1\"><numFmt numFmtId=\"164\" formatCode=\"yyyy-mm-dd\"/></numFmts>\n <fonts count=\"2\">\n <font><sz val=\"11\"/><name val=\"Calibri\"/></font>\n <font><sz val=\"11\"/><b/><name val=\"Calibri\"/></font>\n </fonts>\n <fills count=\"2\">\n <fill><patternFill patternType=\"none\"/></fill>\n <fill><patternFill patternType=\"gray125\"/></fill>\n </fills>\n <borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders>\n <cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>\n <cellXfs count=\"3\">\n <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>\n <xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/>\n <xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyFont=\"1\"/>\n </cellXfs>\n</styleSheet>";
1334
- function ce(e, t) {
1335
- let n = [], r = t.map((e, t) => `<c r="${F(0, t)}" t="str" s="2"><v>${N(e.header)}</v></c>`);
2022
+ var ue = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\n <Default Extension=\"xml\" ContentType=\"application/xml\"/>\n <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>\n <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>\n <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>\n</Types>", de = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>\n</Relationships>", fe = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\n <sheets><sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/></sheets>\n</workbook>", z = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>\n</Relationships>", B = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">\n <numFmts count=\"1\"><numFmt numFmtId=\"164\" formatCode=\"yyyy-mm-dd\"/></numFmts>\n <fonts count=\"2\">\n <font><sz val=\"11\"/><name val=\"Calibri\"/></font>\n <font><sz val=\"11\"/><b/><name val=\"Calibri\"/></font>\n </fonts>\n <fills count=\"2\">\n <fill><patternFill patternType=\"none\"/></fill>\n <fill><patternFill patternType=\"gray125\"/></fill>\n </fills>\n <borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders>\n <cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>\n <cellXfs count=\"3\">\n <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>\n <xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/>\n <xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyFont=\"1\"/>\n </cellXfs>\n</styleSheet>";
2023
+ function V(e, t) {
2024
+ let n = [], r = t.map((e, t) => `<c r="${R(0, t)}" t="str" s="2"><v>${L(e.header)}</v></c>`);
1336
2025
  return n.push(`<row r="1">${r.join("")}</row>`), e.forEach((e, r) => {
1337
2026
  let i = t.map((t, n) => {
1338
- let i = F(r + 1, n), a = e[t.key];
2027
+ let i = R(r + 1, n), a = e[t.key];
1339
2028
  if (a == null) return `<c r="${i}" t="str"><v></v></c>`;
1340
2029
  let o = t.type ?? "text";
1341
- return o === "number" && typeof a == "number" ? `<c r="${i}"><v>${a}</v></c>` : (o === "date" || o === "datetime") && a instanceof Date ? `<c r="${i}" s="1"><v>${ne(a).toFixed(6)}</v></c>` : o === "boolean" ? `<c r="${i}" t="b"><v>${+!!a}</v></c>` : `<c r="${i}" t="str"><v>${N(String(a))}</v></c>`;
2030
+ return o === "number" && typeof a == "number" ? `<c r="${i}"><v>${a}</v></c>` : (o === "date" || o === "datetime") && a instanceof Date ? `<c r="${i}" s="1"><v>${le(a).toFixed(6)}</v></c>` : o === "boolean" ? `<c r="${i}" t="b"><v>${+!!a}</v></c>` : `<c r="${i}" t="str"><v>${L(String(a))}</v></c>`;
1342
2031
  });
1343
2032
  n.push(`<row r="${r + 2}">${i.join("")}</row>`);
1344
2033
  }), `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
@@ -1346,55 +2035,55 @@ function ce(e, t) {
1346
2035
  <sheetData>${n.join("")}</sheetData>
1347
2036
  </worksheet>`;
1348
2037
  }
1349
- function le(e, t) {
1350
- let n = ce(e, t);
1351
- return te([
2038
+ function pe(e, t) {
2039
+ let n = V(e, t);
2040
+ return se([
1352
2041
  {
1353
2042
  name: "[Content_Types].xml",
1354
- data: j.encode(re)
2043
+ data: F.encode(ue)
1355
2044
  },
1356
2045
  {
1357
2046
  name: "_rels/.rels",
1358
- data: j.encode(ie)
2047
+ data: F.encode(de)
1359
2048
  },
1360
2049
  {
1361
2050
  name: "xl/workbook.xml",
1362
- data: j.encode(ae)
2051
+ data: F.encode(fe)
1363
2052
  },
1364
2053
  {
1365
2054
  name: "xl/_rels/workbook.xml.rels",
1366
- data: j.encode(oe)
2055
+ data: F.encode(z)
1367
2056
  },
1368
2057
  {
1369
2058
  name: "xl/worksheets/sheet1.xml",
1370
- data: j.encode(n)
2059
+ data: F.encode(n)
1371
2060
  },
1372
2061
  {
1373
2062
  name: "xl/styles.xml",
1374
- data: j.encode(se)
2063
+ data: F.encode(B)
1375
2064
  }
1376
2065
  ]);
1377
2066
  }
1378
2067
  //#endregion
1379
2068
  //#region src/export/export.ts
1380
- function I(e, t, n) {
2069
+ function H(e, t, n) {
1381
2070
  switch (n) {
1382
- case "csv": return R(e, t, ",");
1383
- case "tsv": return R(e, t, " ");
1384
- case "json": return B(e, t);
1385
- case "xlsx": return le(e, t);
2071
+ case "csv": return U(e, t, ",");
2072
+ case "tsv": return U(e, t, " ");
2073
+ case "json": return he(e, t);
2074
+ case "xlsx": return pe(e, t);
1386
2075
  }
1387
2076
  }
1388
- function L(e, t) {
2077
+ function me(e, t) {
1389
2078
  return e == null ? "" : (t.type === "date" || t.type === "datetime") && e instanceof Date ? e.toISOString() : String(e);
1390
2079
  }
1391
- function R(e, t, n) {
1392
- return [t.map((e) => z(e.header, n)).join(n), ...e.map((e) => t.map((t) => z(L(e[t.key], t), n)).join(n))].join("\n");
2080
+ function U(e, t, n) {
2081
+ return [t.map((e) => W(e.header, n)).join(n), ...e.map((e) => t.map((t) => W(me(e[t.key], t), n)).join(n))].join("\n");
1393
2082
  }
1394
- function z(e, t) {
2083
+ function W(e, t) {
1395
2084
  return e.includes(t) || e.includes("\"") || e.includes("\n") || e.includes("\r") ? "\"" + e.replace(/"/g, "\"\"") + "\"" : e;
1396
2085
  }
1397
- function B(e, t) {
2086
+ function he(e, t) {
1398
2087
  let n = e.map((e) => {
1399
2088
  let n = {};
1400
2089
  for (let r of t) {
@@ -1405,35 +2094,35 @@ function B(e, t) {
1405
2094
  });
1406
2095
  return JSON.stringify(n, null, 2);
1407
2096
  }
1408
- function V(e, t, n) {
2097
+ function ge(e, t, n) {
1409
2098
  let r = new Blob([e], { type: n }), i = URL.createObjectURL(r), a = document.createElement("a");
1410
2099
  a.href = i, a.download = t, a.style.display = "none", document.body.appendChild(a), a.click(), document.body.removeChild(a), setTimeout(() => URL.revokeObjectURL(i), 100);
1411
2100
  }
1412
- var H = {
2101
+ var _e = {
1413
2102
  csv: "text/csv;charset=utf-8",
1414
2103
  tsv: "text/tab-separated-values;charset=utf-8",
1415
2104
  json: "application/json;charset=utf-8",
1416
2105
  xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
1417
- }, U = {
2106
+ }, ve = {
1418
2107
  csv: ".csv",
1419
2108
  tsv: ".tsv",
1420
2109
  json: ".json",
1421
2110
  xlsx: ".xlsx"
1422
2111
  };
1423
- function ue(e) {
1424
- return H[e];
2112
+ function ye(e) {
2113
+ return _e[e];
1425
2114
  }
1426
- function de(e) {
1427
- return U[e];
2115
+ function be(e) {
2116
+ return ve[e];
1428
2117
  }
1429
2118
  //#endregion
1430
2119
  //#region src/export/xlsx-reader.ts
1431
- function fe(e) {
2120
+ function xe(e) {
1432
2121
  for (let t = e.byteLength - 22; t >= 0; t--) if (e.getUint32(t, !0) === 101010256) return t;
1433
2122
  throw Error("XLSX: End of central directory not found — not a valid ZIP file");
1434
2123
  }
1435
- function pe(e) {
1436
- let t = fe(e), n = e.getUint32(t + 16, !0), r = e.getUint32(t + 12, !0), i = new TextDecoder("utf-8"), a = [], o = n, s = n + r;
2124
+ function Se(e) {
2125
+ let t = xe(e), n = e.getUint32(t + 16, !0), r = e.getUint32(t + 12, !0), i = new TextDecoder("utf-8"), a = [], o = n, s = n + r;
1437
2126
  for (; o < s && e.getUint32(o, !0) === 33639248;) {
1438
2127
  let t = e.getUint16(o + 10, !0), n = e.getUint32(o + 20, !0), r = e.getUint32(o + 24, !0), s = e.getUint16(o + 28, !0), c = e.getUint16(o + 30, !0), l = e.getUint16(o + 32, !0), u = e.getUint32(o + 42, !0), d = i.decode(new Uint8Array(e.buffer, o + 46, s));
1439
2128
  a.push({
@@ -1446,7 +2135,7 @@ function pe(e) {
1446
2135
  }
1447
2136
  return a;
1448
2137
  }
1449
- async function me(e) {
2138
+ async function Ce(e) {
1450
2139
  let t = new DecompressionStream("deflate-raw"), n = t.writable.getWriter(), r = t.readable.getReader();
1451
2140
  n.write(e), n.close();
1452
2141
  let i = [];
@@ -1459,40 +2148,40 @@ async function me(e) {
1459
2148
  for (let e of i) o.set(e, s), s += e.length;
1460
2149
  return o;
1461
2150
  }
1462
- async function he(e, t) {
2151
+ async function we(e, t) {
1463
2152
  let n = t.localHeaderOffset, r = e.getUint16(n + 26, !0), i = e.getUint16(n + 28, !0), a = n + 30 + r + i, o = new Uint8Array(e.buffer, a, t.compressedSize);
1464
2153
  if (t.compressionMethod === 0) return o.slice();
1465
- if (t.compressionMethod === 8) return me(o);
2154
+ if (t.compressionMethod === 8) return Ce(o);
1466
2155
  throw Error(`XLSX: Unsupported compression method ${t.compressionMethod}`);
1467
2156
  }
1468
- async function ge(e) {
1469
- let t = new DataView(e), n = pe(t), r = /* @__PURE__ */ new Map();
1470
- for (let e of n) e.compressedSize === 0 && e.name.endsWith("/") || r.set(e.name, await he(t, e));
2157
+ async function Te(e) {
2158
+ let t = new DataView(e), n = Se(t), r = /* @__PURE__ */ new Map();
2159
+ for (let e of n) e.compressedSize === 0 && e.name.endsWith("/") || r.set(e.name, await we(t, e));
1471
2160
  return r;
1472
2161
  }
1473
- var _e = new TextDecoder("utf-8");
1474
- function W(e) {
1475
- let t = _e.decode(e);
2162
+ var Ee = new TextDecoder("utf-8");
2163
+ function G(e) {
2164
+ let t = Ee.decode(e);
1476
2165
  return new DOMParser().parseFromString(t, "application/xml");
1477
2166
  }
1478
- function ve(e) {
2167
+ function De(e) {
1479
2168
  if (!e) return [];
1480
- let t = W(e);
2169
+ let t = G(e);
1481
2170
  return Array.from(t.querySelectorAll("si")).map((e) => Array.from(e.querySelectorAll("t")).map((e) => e.textContent ?? "").join(""));
1482
2171
  }
1483
- function ye(e) {
2172
+ function Oe(e) {
1484
2173
  let t = (e - 1) * 864e5 + Date.UTC(1899, 11, 30);
1485
2174
  return new Date(t).toISOString().slice(0, 10);
1486
2175
  }
1487
- function be(e, t) {
1488
- let n = W(e).querySelectorAll("row");
2176
+ function ke(e, t) {
2177
+ let n = G(e).querySelectorAll("row");
1489
2178
  if (n.length === 0) return [];
1490
2179
  let r = 0, i = /* @__PURE__ */ new Map();
1491
2180
  for (let e of n) {
1492
2181
  let n = parseInt(e.getAttribute("r") ?? "1", 10) - 1, a = /* @__PURE__ */ new Map();
1493
2182
  i.set(n, a);
1494
2183
  for (let n of e.querySelectorAll("c")) {
1495
- let e = xe(n.getAttribute("r") ?? "");
2184
+ let e = Ae(n.getAttribute("r") ?? "");
1496
2185
  e > r && (r = e);
1497
2186
  let i = n.getAttribute("t") ?? "", o = n.getAttribute("s") ?? "", s = n.querySelector("v")?.textContent ?? "", c = n.querySelector("is > t")?.textContent ?? null, l;
1498
2187
  if (i === "s") l = t[parseInt(s, 10)] ?? "";
@@ -1501,7 +2190,7 @@ function be(e, t) {
1501
2190
  else if (s === "") l = "";
1502
2191
  else {
1503
2192
  let e = parseFloat(s);
1504
- l = !isNaN(e) && o !== "" && parseInt(o, 10) > 0 && e >= 1 && e <= 73050 ? ye(e) : s;
2193
+ l = !isNaN(e) && o !== "" && parseInt(o, 10) > 0 && e >= 1 && e <= 73050 ? Oe(e) : s;
1505
2194
  }
1506
2195
  a.set(e, l);
1507
2196
  }
@@ -1515,13 +2204,13 @@ function be(e, t) {
1515
2204
  }
1516
2205
  return o;
1517
2206
  }
1518
- function xe(e) {
2207
+ function Ae(e) {
1519
2208
  let t = 0, n = 0;
1520
2209
  for (; n < e.length && e[n] >= "A" && e[n] <= "Z";) t = t * 26 + (e.charCodeAt(n) - 64), n++;
1521
2210
  return t - 1;
1522
2211
  }
1523
- async function G(e) {
1524
- let t = await ge(e), n = ve(t.get("xl/sharedStrings.xml")), r = t.get("xl/worksheets/sheet1.xml");
2212
+ async function je(e) {
2213
+ let t = await Te(e), n = De(t.get("xl/sharedStrings.xml")), r = t.get("xl/worksheets/sheet1.xml");
1525
2214
  if (!r) {
1526
2215
  for (let [e, n] of t) if (e.toLowerCase().includes("worksheets/sheet")) {
1527
2216
  r = n;
@@ -1529,7 +2218,7 @@ async function G(e) {
1529
2218
  }
1530
2219
  }
1531
2220
  if (!r) throw Error("XLSX: No worksheet found");
1532
- let i = be(r, n);
2221
+ let i = ke(r, n);
1533
2222
  return i.length === 0 ? {
1534
2223
  headers: [],
1535
2224
  rows: []
@@ -1539,7 +2228,7 @@ async function G(e) {
1539
2228
  };
1540
2229
  }
1541
2230
  //#endregion
1542
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorate.js
2231
+ //#region \0@oxc-project+runtime@0.150.0/helpers/esm/decorate.js
1543
2232
  function K(e, t, n, r) {
1544
2233
  var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
1545
2234
  if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
@@ -1555,9 +2244,9 @@ var q = {
1555
2244
  lt: "<",
1556
2245
  gte: "≥",
1557
2246
  lte: "≤"
1558
- }, J = 120, Y = 40, X = 20, Z = 32, Q = 5, Se = 200, $ = class extends n {
2247
+ }, J = 120, Y = 40, X = 20, Z = 32, Q = 5, Me = 200, $ = class extends n {
1559
2248
  constructor(...e) {
1560
- super(...e), this.columns = [], this._data = [], this._inUndoRedo = !1, this.clearUndoOnDataChange = !1, this.clearSelectionOnDataChange = !1, this._rowHeightFromCss = Z, this.showRowNumbers = !1, this.theme = void 0, this.maxRows = 0, this.editable = !0, this.showFilters = !1, this.showContextMenu = !1, this.frozenRows = 0, this.emptyMessage = "No data", this.noMatchingMessage = "No matching data", this.loading = !1, this.importEnabled = !1, this.selectable = !1, this.dataMode = "client", this.footerData = null, this.stylesheets = [], this._scrollTop = 0, this._scrollLeft = 0, this._viewportHeight = 0, this._viewportWidth = 0, this._colLeftOffsets = [], this._totalRowWidth = 0, this._baseStyleSheets = [], this._activeCell = null, this._editingCell = null, this._sortCriteria = [], this._selection = new x(), this._editing = new S(), this._rowSelection = new C(), this._undo = new E(), this._filters = [], this._filteredIndices = [], this._sortedIndices = [], this._openFilterKey = null, this._rowSelectionVersion = 0, this._lastCheckboxRowIndex = null, this._checkboxShiftPending = !1, this._autocompleteState = null, this._headerMenu = null, this._bodyContextMenu = null, this._commentPopup = null, this._viewDirty = !0, this._isDragging = !1, this._wasDrag = !1, this._resizing = null, this._resizeCleanup = null, this._wasHeaderDrag = !1, this._wasRowDrag = !1, this._colDrag = null, this._colDragIndicatorLeft = null, this._fillDrag = null, this._rowDrag = null, this._rowDragIndicatorY = null, this._findState = null, this._columnWidths = /* @__PURE__ */ new Map(), this._hostResizeObserver = null, this._comments = /* @__PURE__ */ new Map(), this._isDragOver = !1, this._warnedUnconstrained = !1, this._onCommentPopupOutsideClick = () => {
2249
+ super(...e), this.columns = [], this._data = [], this._inUndoRedo = !1, this.clearUndoOnDataChange = !1, this.clearSelectionOnDataChange = !1, this._rowHeightFromCss = Z, this.showRowNumbers = !1, this.theme = void 0, this.maxRows = 0, this.editable = !0, this.showFilters = !1, this.showContextMenu = !1, this.frozenRows = 0, this.emptyMessage = "No data", this.noMatchingMessage = "No matching data", this.loading = !1, this.importEnabled = !1, this.selectable = !1, this.dataMode = "client", this.footerData = null, this.stylesheets = [], this._scrollTop = 0, this._scrollLeft = 0, this._viewportHeight = 0, this._viewportWidth = 0, this._colLeftOffsets = [], this._totalRowWidth = 0, this._baseStyleSheets = [], this._activeCell = null, this._editingCell = null, this._sortCriteria = [], this._selection = new te(), this._editing = new ne(), this._rowSelection = new A(), this._undo = new M(), this._filters = [], this._filteredIndices = [], this._sortedIndices = [], this._openFilterKey = null, this._rowSelectionVersion = 0, this._lastCheckboxRowIndex = null, this._checkboxShiftPending = !1, this._autocompleteState = null, this._headerMenu = null, this._bodyContextMenu = null, this._commentPopup = null, this._viewDirty = !0, this._isDragging = !1, this._wasDrag = !1, this._resizing = null, this._resizeCleanup = null, this._wasHeaderDrag = !1, this._wasRowDrag = !1, this._colDrag = null, this._colDragIndicatorLeft = null, this._fillDrag = null, this._rowDrag = null, this._rowDragIndicatorY = null, this._findState = null, this._columnWidths = /* @__PURE__ */ new Map(), this._hostResizeObserver = null, this._comments = /* @__PURE__ */ new Map(), this._isDragOver = !1, this._warnedUnconstrained = !1, this._onCommentPopupOutsideClick = () => {
1561
2250
  this._commitCommentPopup();
1562
2251
  }, this._invalidCells = /* @__PURE__ */ new Map(), this._textFilterState = /* @__PURE__ */ new Map(), this._numberFilterState = /* @__PURE__ */ new Map(), this._dateFilterState = /* @__PURE__ */ new Map(), this._emptyFilterState = /* @__PURE__ */ new Map();
1563
2252
  }
@@ -1922,12 +2611,12 @@ var q = {
1922
2611
  if (!t) return "";
1923
2612
  let n = this.visibleColumns.slice(t.startCol, t.endCol + 1), r = [];
1924
2613
  for (let e = t.startRow; e <= t.endRow; e++) r.push(this.data[this._toDataIndex(e)]);
1925
- return I(r, n, e);
2614
+ return H(r, n, e);
1926
2615
  }
1927
- return I(this._sortedIndices.map((e) => this.data[e]), this.visibleColumns, e);
2616
+ return H(this._sortedIndices.map((e) => this.data[e]), this.visibleColumns, e);
1928
2617
  }
1929
2618
  exportToFile(e, t) {
1930
- V(this.exportToString(e), t ?? `export${de(e)}`, ue(e));
2619
+ ge(this.exportToString(e), t ?? `export${be(e)}`, ye(e));
1931
2620
  }
1932
2621
  setComment(e, t, n) {
1933
2622
  let r = this.getComment(e, t);
@@ -1984,10 +2673,10 @@ var q = {
1984
2673
  async importFromFile(e) {
1985
2674
  let t = e.name.toLowerCase();
1986
2675
  if (t.endsWith(".xlsx")) {
1987
- let t = await G(await e.arrayBuffer());
2676
+ let t = await je(await e.arrayBuffer());
1988
2677
  this._applyImportedSheet(t);
1989
2678
  } else if (t.endsWith(".csv") || t.endsWith(".tsv")) {
1990
- let t = O(await e.text());
2679
+ let t = N(await e.text());
1991
2680
  this._applyImportedRows(t);
1992
2681
  } else console.warn(`flex-table importFromFile: unsupported file type "${e.name}"`);
1993
2682
  }
@@ -1998,7 +2687,7 @@ var q = {
1998
2687
  let a = t.get(e);
1999
2688
  if (!a) return;
2000
2689
  let o = this.columns.find((e) => e.key === a);
2001
- r[a] = o ? k(n[i] ?? "", o) : n[i] ?? null;
2690
+ r[a] = o ? P(n[i] ?? "", o) : n[i] ?? null;
2002
2691
  }), r;
2003
2692
  }), r = [...this.data];
2004
2693
  this.data = n, this._undo.push({
@@ -2023,7 +2712,7 @@ var q = {
2023
2712
  let a = n.get(t);
2024
2713
  if (!a) return;
2025
2714
  let o = this.columns.find((e) => e.key === a);
2026
- r[a] = o ? k(e[i] ?? "", o) : e[i] ?? null;
2715
+ r[a] = o ? P(e[i] ?? "", o) : e[i] ?? null;
2027
2716
  }), r;
2028
2717
  }), i = [...this.data];
2029
2718
  this.data = r, this._undo.push({
@@ -2169,7 +2858,7 @@ var q = {
2169
2858
  this._filteredIndices = Array.from({ length: this.data.length }, (e, t) => t), this._sortedIndices = this._filteredIndices;
2170
2859
  return;
2171
2860
  }
2172
- if (this._filteredIndices = w(this.data, this._filters, (e, t, n) => {
2861
+ if (this._filteredIndices = j(this.data, this._filters, (e, t, n) => {
2173
2862
  this.dispatchEvent(new CustomEvent("filter-error", {
2174
2863
  detail: {
2175
2864
  error: e,
@@ -2199,7 +2888,7 @@ var q = {
2199
2888
  e !== this._viewportHeight && (this._viewportHeight = e), t !== this._viewportWidth && (this._viewportWidth = t), this._warnIfUnconstrained();
2200
2889
  }
2201
2890
  _warnIfUnconstrained() {
2202
- this._warnedUnconstrained || process.env.NODE_ENV === "production" || this._visibleRowCount < Se || this.scrollHeight > this.clientHeight + 1 || (this._warnedUnconstrained = !0, console.warn(`[@iyulab/flex-table] ${this._visibleRowCount} rows but the host has no height constraint — it grew to fit every row, so virtual scrolling is off and all rows are rendered. Give the host a height (e.g. height: 400px, or flex: 1 1 auto with min-height: 0 inside a sized parent) so it becomes the scroll container.`));
2891
+ this._warnedUnconstrained || process.env.NODE_ENV === "production" || this._visibleRowCount < Me || this.scrollHeight > this.clientHeight + 1 || (this._warnedUnconstrained = !0, console.warn(`[@iyulab/flex-table] ${this._visibleRowCount} rows but the host has no height constraint — it grew to fit every row, so virtual scrolling is off and all rows are rendered. Give the host a height (e.g. height: 400px, or flex: 1 1 auto with min-height: 0 inside a sized parent) so it becomes the scroll container.`));
2203
2892
  }
2204
2893
  _onScroll() {
2205
2894
  this._scrollTop = this.scrollTop, this._scrollLeft = this.scrollLeft;
@@ -2329,7 +3018,7 @@ var q = {
2329
3018
  }
2330
3019
  let t = this.shadowRoot?.querySelector(".ft-editor");
2331
3020
  if (t) {
2332
- let n = k(t.value, e);
3021
+ let n = P(t.value, e);
2333
3022
  this._applyEdit(n);
2334
3023
  } else this._cancelEdit();
2335
3024
  }
@@ -2557,7 +3246,7 @@ var q = {
2557
3246
  async _handleCopy(e) {
2558
3247
  let t = this._selection.getEffectiveRange();
2559
3248
  if (!t) return;
2560
- let n = this.visibleColumns, r = D(this._sortedIndices.map((e) => this.data[e]), n, t);
3249
+ let n = this.visibleColumns, r = ie(this._sortedIndices.map((e) => this.data[e]), n, t);
2561
3250
  try {
2562
3251
  await navigator.clipboard.writeText(r);
2563
3252
  } catch (e) {
@@ -2583,7 +3272,7 @@ var q = {
2583
3272
  if (!this._activeCell) return;
2584
3273
  let e = await this._readClipboardText();
2585
3274
  if (e == null) return;
2586
- let t = O(e);
3275
+ let t = N(e);
2587
3276
  if (t.length === 0) return;
2588
3277
  let n = this._expandRowsForPaste(this._activeCell.row, t.length), r = this._applyPasteData(this._activeCell, t);
2589
3278
  if (r.length > 0 || n.length > 0) {
@@ -2641,7 +3330,7 @@ var q = {
2641
3330
  for (let a = 0; a < t[i].length; a++) {
2642
3331
  let s = e.col + a;
2643
3332
  if (s >= n.length) break;
2644
- let c = n[s], l = this.data[o][c.key], u = k(t[i][a], c);
3333
+ let c = n[s], l = this.data[o][c.key], u = P(t[i][a], c);
2645
3334
  this.data[o][c.key] = u, r.push({
2646
3335
  row: o,
2647
3336
  col: s,
@@ -2706,7 +3395,7 @@ var q = {
2706
3395
  for (let r = e.startCol + 1; r <= e.endCol; r++) {
2707
3396
  let e = t[r];
2708
3397
  if (!e || !this._isCellEditable(e)) continue;
2709
- let a = k(o == null ? "" : String(o), e);
3398
+ let a = P(o == null ? "" : String(o), e);
2710
3399
  n.push({
2711
3400
  row: i,
2712
3401
  key: e.key,
@@ -2865,7 +3554,7 @@ var q = {
2865
3554
  @click=${n ? (t) => this._onHeaderClick(t, e) : void 0}>
2866
3555
  ${x ? i`
2867
3556
  <button class="ft-hidden-col-indicator"
2868
- title="Show hidden column(s)"
3557
+ title=${k("showHiddenColumns")}
2869
3558
  @click=${(t) => {
2870
3559
  t.stopPropagation(), this._showHiddenBefore(e);
2871
3560
  }}>&#x276F;</button>
@@ -2875,7 +3564,7 @@ var q = {
2875
3564
  ${o >= 0 ? i`<span class="ft-sort-order">${o + 1}</span>` : ""}
2876
3565
  <button class="ft-column-menu-btn ${s ? "ft-filter-active" : ""}"
2877
3566
  type="button"
2878
- title="Column menu"
3567
+ title=${k("columnMenu")}
2879
3568
  aria-label=${`Column menu: ${e.header}`}
2880
3569
  aria-haspopup="menu"
2881
3570
  aria-expanded=${this._headerMenu?.key === e.key ? "true" : "false"}
@@ -3032,7 +3721,7 @@ var q = {
3032
3721
  }}>${e}</button>
3033
3722
  `, f = i`<div class="ft-context-menu-separator" role="separator"></div>`;
3034
3723
  return i`
3035
- <div class="ft-body-context-menu" role="menu" aria-label="Cell actions"
3724
+ <div class="ft-body-context-menu" role="menu" aria-label=${k("cellActions")}
3036
3725
  style="position: fixed; left: ${n}px; top: ${r}px; z-index: 200;"
3037
3726
  @mousedown=${(e) => e.stopPropagation()}
3038
3727
  @keydown=${(e) => this._onMenuKeydown(e, ".ft-body-context-menu", l)}>
@@ -3083,13 +3772,13 @@ var q = {
3083
3772
  @mousedown=${(e) => e.stopPropagation()}>
3084
3773
  <textarea class="ft-comment-popup-textarea"
3085
3774
  rows="4"
3086
- placeholder="Add a comment… (Ctrl+Enter to save)"
3775
+ placeholder=${k("addCommentPlaceholder")}
3087
3776
  @keydown=${(e) => {
3088
3777
  e.key === "Escape" && (e.preventDefault(), this._cancelCommentPopup()), e.key === "Enter" && (e.ctrlKey || e.metaKey) && (e.preventDefault(), this._commitCommentPopup());
3089
3778
  }}></textarea>
3090
3779
  <div class="ft-comment-popup-buttons">
3091
- <button class="ft-comment-popup-cancel" @click=${() => this._cancelCommentPopup()}>Cancel</button>
3092
- <button class="ft-comment-popup-save" @click=${() => this._commitCommentPopup()}>Save</button>
3780
+ <button class="ft-comment-popup-cancel" @click=${() => this._cancelCommentPopup()}>${k("cancel")}</button>
3781
+ <button class="ft-comment-popup-save" @click=${() => this._commitCommentPopup()}>${k("save")}</button>
3093
3782
  </div>
3094
3783
  </div>
3095
3784
  `;
@@ -3125,7 +3814,7 @@ var q = {
3125
3814
  <div class="ft-filter-dropdown" @click=${(e) => e.stopPropagation()}>
3126
3815
  ${t === "boolean" ? this._renderBooleanFilter(e) : t === "number" ? this._renderNumberFilter(e) : t === "date" || t === "datetime" ? this._renderDateFilter(e) : this._renderTextFilter(e)}
3127
3816
  <div class="ft-filter-actions">
3128
- <button class="ft-filter-clear" @click=${() => this._clearColumnFilter(e.key)}>Clear</button>
3817
+ <button class="ft-filter-clear" @click=${() => this._clearColumnFilter(e.key)}>${k("clear")}</button>
3129
3818
  </div>
3130
3819
  </div>
3131
3820
  `;
@@ -3158,7 +3847,7 @@ var q = {
3158
3847
  let n = this._emptyFilterState.get(e) ?? "";
3159
3848
  return i`
3160
3849
  <div class="ft-filter-empty-row">
3161
- <label>Blank cells</label>
3850
+ <label>${k("blankCells")}</label>
3162
3851
  <select class="ft-filter-mode-select"
3163
3852
  .value=${n}
3164
3853
  @change=${(n) => {
@@ -3168,9 +3857,9 @@ var q = {
3168
3857
  @keydown=${(e) => {
3169
3858
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
3170
3859
  }}>
3171
- <option value="">— All —</option>
3172
- <option value="empty">Empty only</option>
3173
- <option value="non-empty">Non-empty only</option>
3860
+ <option value="">${k("blankAll")}</option>
3861
+ <option value="empty">${k("emptyOnly")}</option>
3862
+ <option value="non-empty">${k("nonEmptyOnly")}</option>
3174
3863
  </select>
3175
3864
  </div>
3176
3865
  `;
@@ -3246,13 +3935,13 @@ var q = {
3246
3935
  @keydown=${(e) => {
3247
3936
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
3248
3937
  }}>
3249
- <option value="contains">Contains</option>
3250
- <option value="starts">Starts with</option>
3251
- <option value="ends">Ends with</option>
3252
- <option value="wildcard">Wildcard</option>
3938
+ <option value="contains">${k("contains")}</option>
3939
+ <option value="starts">${k("startsWith")}</option>
3940
+ <option value="ends">${k("endsWith")}</option>
3941
+ <option value="wildcard">${k("wildcard")}</option>
3253
3942
  </select>
3254
3943
  </div>
3255
- <input class="ft-filter-input" type="text" placeholder="Search..."
3944
+ <input class="ft-filter-input" type="text" placeholder=${k("searchPlaceholder")}
3256
3945
  .value=${t.value}
3257
3946
  @input=${(t) => {
3258
3947
  let n = t.target.value, r = this._textFilterState.get(e.key) ?? {
@@ -3303,7 +3992,7 @@ var q = {
3303
3992
  }}>
3304
3993
  ${Object.keys(q).map((e) => i`<option value=${e}>${q[e]}</option>`)}
3305
3994
  </select>
3306
- <input class="ft-filter-input ft-num-cond-input" type="number" placeholder="Value"
3995
+ <input class="ft-filter-input ft-num-cond-input" type="number" placeholder=${k("valuePlaceholder")}
3307
3996
  .value=${n.value == null ? "" : String(n.value)}
3308
3997
  @input=${(n) => {
3309
3998
  let r = n.target.value, i = this._numberFilterState.get(e) ?? this._defaultNumState();
@@ -3364,13 +4053,13 @@ var q = {
3364
4053
  let t = e.type === "datetime" ? "datetime-local" : "date", n = this._dateFilterState.get(e.key) ?? {};
3365
4054
  return i`
3366
4055
  <div class="ft-filter-range">
3367
- <input class="ft-filter-input" type=${t} placeholder="From"
4056
+ <input class="ft-filter-input" type=${t} placeholder=${k("fromPlaceholder")}
3368
4057
  .value=${n.from ?? ""}
3369
4058
  @input=${(t) => this._applyDateFilter(e.key, t, "from")}
3370
4059
  @keydown=${(e) => {
3371
4060
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
3372
4061
  }}>
3373
- <input class="ft-filter-input" type=${t} placeholder="To"
4062
+ <input class="ft-filter-input" type=${t} placeholder=${k("toPlaceholder")}
3374
4063
  .value=${n.to ?? ""}
3375
4064
  @input=${(t) => this._applyDateFilter(e.key, t, "to")}
3376
4065
  @keydown=${(e) => {
@@ -3396,7 +4085,7 @@ var q = {
3396
4085
  @keydown=${(e) => {
3397
4086
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
3398
4087
  }}>
3399
- <option value="all">All</option>
4088
+ <option value="all">${k("all")}</option>
3400
4089
  <option value="true">\u2714 True</option>
3401
4090
  <option value="false">\u2718 False</option>
3402
4091
  </select>
@@ -3818,31 +4507,31 @@ var q = {
3818
4507
  e.key === "Enter" && e.target instanceof HTMLInputElement && e.target.classList.contains("ft-find-input") && (e.shiftKey ? this._findPrev() : this._findNext());
3819
4508
  }}>
3820
4509
  <div class="ft-find-row">
3821
- <input class="ft-find-input" type="text" placeholder="Find..."
4510
+ <input class="ft-find-input" type="text" placeholder=${k("findPlaceholder")}
3822
4511
  .value=${t}
3823
4512
  @input=${(e) => {
3824
4513
  this._findState.query = e.target.value, this._findSearch();
3825
4514
  }}>
3826
4515
  <span class="ft-find-count">${c > 0 ? `${l}/${c}` : t ? "0 results" : ""}</span>
3827
- <button @click=${() => this._findPrev()} title="Previous (Shift+Enter)">◀</button>
3828
- <button @click=${() => this._findNext()} title="Next (Enter)">▶</button>
3829
- <label title="Match case"><input type="checkbox" ?checked=${r} @change=${(e) => {
4516
+ <button @click=${() => this._findPrev()} title=${k("findPrevious")}>◀</button>
4517
+ <button @click=${() => this._findNext()} title=${k("findNext")}>▶</button>
4518
+ <label title=${k("matchCase")}><input type="checkbox" ?checked=${r} @change=${(e) => {
3830
4519
  this._findState.matchCase = e.target.checked, this._findSearch();
3831
4520
  }}> Aa</label>
3832
- <label title="Whole cell"><input type="checkbox" ?checked=${a} @change=${(e) => {
4521
+ <label title=${k("wholeCell")}><input type="checkbox" ?checked=${a} @change=${(e) => {
3833
4522
  this._findState.wholeCell = e.target.checked, this._findSearch();
3834
4523
  }}> [ ]</label>
3835
- <button @click=${() => this._closeFindPanel()} title="Close (Escape)">✕</button>
4524
+ <button @click=${() => this._closeFindPanel()} title=${k("closeFind")}>✕</button>
3836
4525
  </div>
3837
4526
  ${e === "replace" ? i`
3838
4527
  <div class="ft-find-row">
3839
- <input class="ft-find-replace-input" type="text" placeholder="Replace with..."
4528
+ <input class="ft-find-replace-input" type="text" placeholder=${k("replaceWithPlaceholder")}
3840
4529
  .value=${n}
3841
4530
  @input=${(e) => {
3842
4531
  this._findState.replaceWith = e.target.value;
3843
4532
  }}>
3844
- <button @click=${() => this._replaceOne()} ?disabled=${c === 0}>Replace</button>
3845
- <button @click=${() => this._replaceAll()} ?disabled=${c === 0}>Replace All</button>
4533
+ <button @click=${() => this._replaceOne()} ?disabled=${c === 0}>${k("replace")}</button>
4534
+ <button @click=${() => this._replaceAll()} ?disabled=${c === 0}>${k("replaceAll")}</button>
3846
4535
  </div>
3847
4536
  ` : ""}
3848
4537
  </div>
@@ -3850,7 +4539,7 @@ var q = {
3850
4539
  }
3851
4540
  render() {
3852
4541
  let e = this.visibleColumns, t = this.importEnabled && this._isDragOver ? i`<div class="ft-import-overlay">Drop file to import (.xlsx / .csv)</div>` : a, n = this.loading ? i`<div class="ft-loading-overlay"></div>` : a;
3853
- if (e.length === 0) return i`${t}${n}<div class="ft-empty">No columns defined</div>`;
4542
+ if (e.length === 0) return i`${t}${n}<div class="ft-empty">${k("noColumnsDefined")}</div>`;
3854
4543
  let r = this.headerHeight, o = this._totalRowWidth, { start: s, end: c } = this.visibleColRange, l = [];
3855
4544
  for (let t = 0; t < e.length; t++) (e[t].pinned === "left" || e[t].pinned === "right") && (t < s || t >= c) && l.push(t);
3856
4545
  let u = 0, d = this._scrollLeft, f = this.selectable ? i`<div class="ft-checkbox-header"
@@ -4159,4 +4848,4 @@ K([s({ type: Array })], $.prototype, "columns", void 0), K([s({
4159
4848
  attribute: "max-undo-size"
4160
4849
  })], $.prototype, "maxUndoSize", null), K([c()], $.prototype, "_scrollTop", void 0), K([c()], $.prototype, "_scrollLeft", void 0), K([c()], $.prototype, "_viewportHeight", void 0), K([c()], $.prototype, "_viewportWidth", void 0), K([c()], $.prototype, "_activeCell", void 0), K([c()], $.prototype, "_editingCell", void 0), K([c()], $.prototype, "_sortCriteria", void 0), K([c()], $.prototype, "_openFilterKey", void 0), K([c()], $.prototype, "_rowSelectionVersion", void 0), K([c()], $.prototype, "_autocompleteState", void 0), K([c()], $.prototype, "_headerMenu", void 0), K([c()], $.prototype, "_bodyContextMenu", void 0), K([c()], $.prototype, "_commentPopup", void 0), K([c()], $.prototype, "_isDragOver", void 0), $ = K([o("flex-table")], $);
4161
4850
  //#endregion
4162
- export { m as a, C as i, I as n, E as r, $ as t };
4851
+ export { O as a, A as i, H as n, m as o, M as r, $ as t };