@iyulab/flex-table 0.35.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.
@@ -978,8 +978,755 @@ 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
+ breadcrumb: "مسار التنقل"
1023
+ },
1024
+ "../assets/locales/de.json": {
1025
+ valueMissing: "Dieses Feld ist erforderlich",
1026
+ badInput: "Bitte geben Sie einen gültigen Wert ein",
1027
+ typeMismatch: "Bitte geben Sie einen gültigen Wert ein",
1028
+ patternMismatch: "Bitte halten Sie sich an das angeforderte Format",
1029
+ rangeUnderflow: "Der Wert muss mindestens {min} betragen",
1030
+ rangeOverflow: "Der Wert darf höchstens {max} betragen",
1031
+ stepMismatch: "Der Wert muss ein Vielfaches von {step} sein",
1032
+ tooShort: "Muss mindestens {min} betragen",
1033
+ tooLong: "Darf höchstens {max} betragen",
1034
+ increment: "Wert erhöhen",
1035
+ decrement: "Wert verringern",
1036
+ clear: "Wert löschen",
1037
+ today: "Heute",
1038
+ time: "Uhrzeit",
1039
+ showPassword: "Passwort anzeigen",
1040
+ hidePassword: "Passwort verbergen",
1041
+ previousSlide: "Vorherige Folie",
1042
+ nextSlide: "Nächste Folie",
1043
+ goToSlide: "Zu Folie {n} wechseln",
1044
+ chooseDate: "Datum auswählen",
1045
+ previousMonth: "Vorheriger Monat",
1046
+ nextMonth: "Nächster Monat",
1047
+ close: "Schließen",
1048
+ copy: "Kopieren",
1049
+ copied: "Kopiert",
1050
+ chooseFile: "Datei auswählen",
1051
+ noFileChosen: "Keine Datei ausgewählt",
1052
+ filesSelected: "{count} Dateien ausgewählt",
1053
+ resizePanels: "Bereichsgröße ändern",
1054
+ search: "Suchen",
1055
+ alertError: "Fehler",
1056
+ alertWarning: "Warnung",
1057
+ alertSuccess: "Erfolg",
1058
+ alertInfo: "Information",
1059
+ alertNotice: "Hinweis",
1060
+ alertMessage: "Nachricht",
1061
+ remove: "Entfernen",
1062
+ closeTab: "Tab schließen",
1063
+ breadcrumb: "Navigationspfad"
1064
+ },
1065
+ "../assets/locales/en.json": {
1066
+ valueMissing: "This field is required",
1067
+ badInput: "Please enter a valid value",
1068
+ typeMismatch: "Please enter a valid value",
1069
+ patternMismatch: "Please match the requested format",
1070
+ rangeUnderflow: "Value must be at least {min}",
1071
+ rangeOverflow: "Value must be at most {max}",
1072
+ stepMismatch: "Value must be a multiple of {step}",
1073
+ tooShort: "Must be at least {min}",
1074
+ tooLong: "Must be at most {max}",
1075
+ increment: "Increase value",
1076
+ decrement: "Decrease value",
1077
+ clear: "Clear value",
1078
+ today: "Today",
1079
+ time: "Time",
1080
+ showPassword: "Show password",
1081
+ hidePassword: "Hide password",
1082
+ previousSlide: "Previous slide",
1083
+ nextSlide: "Next slide",
1084
+ goToSlide: "Go to slide {n}",
1085
+ chooseDate: "Choose date",
1086
+ previousMonth: "Previous month",
1087
+ nextMonth: "Next month",
1088
+ close: "Close",
1089
+ copy: "Copy",
1090
+ copied: "Copied",
1091
+ chooseFile: "Choose file",
1092
+ noFileChosen: "No file chosen",
1093
+ filesSelected: "{count} files selected",
1094
+ resizePanels: "Resize panels",
1095
+ search: "Search",
1096
+ alertError: "Error",
1097
+ alertWarning: "Warning",
1098
+ alertSuccess: "Success",
1099
+ alertInfo: "Information",
1100
+ alertNotice: "Notice",
1101
+ alertMessage: "Message",
1102
+ remove: "Remove",
1103
+ closeTab: "Close tab",
1104
+ breadcrumb: "Breadcrumb"
1105
+ },
1106
+ "../assets/locales/es.json": {
1107
+ valueMissing: "Este campo es obligatorio",
1108
+ badInput: "Introduzca un valor válido",
1109
+ typeMismatch: "Introduzca un valor con el formato correcto",
1110
+ patternMismatch: "Ajuste el valor al formato solicitado",
1111
+ rangeUnderflow: "El valor debe ser como mínimo {min}",
1112
+ rangeOverflow: "El valor debe ser como máximo {max}",
1113
+ stepMismatch: "El valor debe ser múltiplo de {step}",
1114
+ tooShort: "Debe ser como mínimo {min}",
1115
+ tooLong: "Debe ser como máximo {max}",
1116
+ increment: "Aumentar valor",
1117
+ decrement: "Disminuir valor",
1118
+ clear: "Borrar valor",
1119
+ today: "Hoy",
1120
+ time: "Hora",
1121
+ showPassword: "Mostrar contraseña",
1122
+ hidePassword: "Ocultar contraseña",
1123
+ previousSlide: "Diapositiva anterior",
1124
+ nextSlide: "Siguiente diapositiva",
1125
+ goToSlide: "Ir a la diapositiva {n}",
1126
+ chooseDate: "Elegir fecha",
1127
+ previousMonth: "Mes anterior",
1128
+ nextMonth: "Mes siguiente",
1129
+ close: "Cerrar",
1130
+ copy: "Copiar",
1131
+ copied: "Copiado",
1132
+ chooseFile: "Elegir archivo",
1133
+ noFileChosen: "Ningún archivo elegido",
1134
+ filesSelected: "{count} archivos seleccionados",
1135
+ resizePanels: "Cambiar el tamaño de los paneles",
1136
+ search: "Buscar",
1137
+ alertError: "Error",
1138
+ alertWarning: "Advertencia",
1139
+ alertSuccess: "Éxito",
1140
+ alertInfo: "Información",
1141
+ alertNotice: "Aviso",
1142
+ alertMessage: "Mensaje",
1143
+ remove: "Quitar",
1144
+ closeTab: "Cerrar pestaña",
1145
+ breadcrumb: "Ruta de navegación"
1146
+ },
1147
+ "../assets/locales/fr.json": {
1148
+ valueMissing: "Ce champ est obligatoire",
1149
+ badInput: "Veuillez saisir une valeur valide",
1150
+ typeMismatch: "Veuillez saisir une valeur au format correct",
1151
+ patternMismatch: "Veuillez respecter le format demandé",
1152
+ rangeUnderflow: "La valeur doit être supérieure ou égale à {min}",
1153
+ rangeOverflow: "La valeur doit être inférieure ou égale à {max}",
1154
+ stepMismatch: "La valeur doit être un multiple de {step}",
1155
+ tooShort: "Doit être au moins {min}",
1156
+ tooLong: "Doit être au plus {max}",
1157
+ increment: "Augmenter la valeur",
1158
+ decrement: "Diminuer la valeur",
1159
+ clear: "Effacer la valeur",
1160
+ today: "Aujourd’hui",
1161
+ time: "Heure",
1162
+ showPassword: "Afficher le mot de passe",
1163
+ hidePassword: "Masquer le mot de passe",
1164
+ previousSlide: "Diapositive précédente",
1165
+ nextSlide: "Diapositive suivante",
1166
+ goToSlide: "Aller à la diapositive {n}",
1167
+ chooseDate: "Choisir une date",
1168
+ previousMonth: "Mois précédent",
1169
+ nextMonth: "Mois suivant",
1170
+ close: "Fermer",
1171
+ copy: "Copier",
1172
+ copied: "Copié",
1173
+ chooseFile: "Choisir un fichier",
1174
+ noFileChosen: "Aucun fichier choisi",
1175
+ filesSelected: "{count} fichiers sélectionnés",
1176
+ resizePanels: "Redimensionner les panneaux",
1177
+ search: "Rechercher",
1178
+ alertError: "Erreur",
1179
+ alertWarning: "Avertissement",
1180
+ alertSuccess: "Succès",
1181
+ alertInfo: "Information",
1182
+ alertNotice: "Avis",
1183
+ alertMessage: "Message",
1184
+ remove: "Supprimer",
1185
+ closeTab: "Fermer l'onglet",
1186
+ breadcrumb: "Fil d'Ariane"
1187
+ },
1188
+ "../assets/locales/id.json": {
1189
+ valueMissing: "Kolom ini wajib diisi",
1190
+ badInput: "Masukkan nilai yang valid",
1191
+ typeMismatch: "Masukkan nilai dengan format yang benar",
1192
+ patternMismatch: "Sesuaikan dengan format yang diminta",
1193
+ rangeUnderflow: "Nilai harus minimal {min}",
1194
+ rangeOverflow: "Nilai harus maksimal {max}",
1195
+ stepMismatch: "Nilai harus kelipatan dari {step}",
1196
+ tooShort: "Harus minimal {min}",
1197
+ tooLong: "Harus maksimal {max}",
1198
+ increment: "Tambah nilai",
1199
+ decrement: "Kurangi nilai",
1200
+ clear: "Hapus nilai",
1201
+ today: "Hari ini",
1202
+ time: "Waktu",
1203
+ showPassword: "Tampilkan kata sandi",
1204
+ hidePassword: "Sembunyikan kata sandi",
1205
+ previousSlide: "Slide sebelumnya",
1206
+ nextSlide: "Slide berikutnya",
1207
+ goToSlide: "Buka slide {n}",
1208
+ chooseDate: "Pilih tanggal",
1209
+ previousMonth: "Bulan sebelumnya",
1210
+ nextMonth: "Bulan berikutnya",
1211
+ close: "Tutup",
1212
+ copy: "Salin",
1213
+ copied: "Disalin",
1214
+ chooseFile: "Pilih berkas",
1215
+ noFileChosen: "Tidak ada berkas dipilih",
1216
+ filesSelected: "{count} berkas dipilih",
1217
+ resizePanels: "Ubah ukuran panel",
1218
+ search: "Cari",
1219
+ alertError: "Kesalahan",
1220
+ alertWarning: "Peringatan",
1221
+ alertSuccess: "Berhasil",
1222
+ alertInfo: "Informasi",
1223
+ alertNotice: "Pemberitahuan",
1224
+ alertMessage: "Pesan",
1225
+ remove: "Hapus",
1226
+ closeTab: "Tutup tab",
1227
+ breadcrumb: "Navigasi remah roti"
1228
+ },
1229
+ "../assets/locales/ja.json": {
1230
+ valueMissing: "この項目は必須です",
1231
+ badInput: "有効な値を入力してください",
1232
+ typeMismatch: "正しい形式の値を入力してください",
1233
+ patternMismatch: "指定された形式で入力してください",
1234
+ rangeUnderflow: "値は{min}以上である必要があります",
1235
+ rangeOverflow: "値は{max}以下である必要があります",
1236
+ stepMismatch: "値は{step}の倍数である必要があります",
1237
+ tooShort: "{min}以上である必要があります",
1238
+ tooLong: "{max}以下である必要があります",
1239
+ increment: "値を増やす",
1240
+ decrement: "値を減らす",
1241
+ clear: "値をクリア",
1242
+ today: "今日",
1243
+ time: "時刻",
1244
+ showPassword: "パスワードを表示",
1245
+ hidePassword: "パスワードを隠す",
1246
+ previousSlide: "前のスライド",
1247
+ nextSlide: "次のスライド",
1248
+ goToSlide: "スライド{n}に移動",
1249
+ chooseDate: "日付を選択",
1250
+ previousMonth: "前月",
1251
+ nextMonth: "翌月",
1252
+ close: "閉じる",
1253
+ copy: "コピー",
1254
+ copied: "コピーしました",
1255
+ chooseFile: "ファイルを選択",
1256
+ noFileChosen: "ファイルが選択されていません",
1257
+ filesSelected: "{count}個のファイルを選択しました",
1258
+ resizePanels: "パネルのサイズ変更",
1259
+ search: "検索",
1260
+ alertError: "エラー",
1261
+ alertWarning: "警告",
1262
+ alertSuccess: "完了",
1263
+ alertInfo: "お知らせ",
1264
+ alertNotice: "通知",
1265
+ alertMessage: "メッセージ",
1266
+ remove: "削除",
1267
+ closeTab: "タブを閉じる",
1268
+ breadcrumb: "パンくずリスト"
1269
+ },
1270
+ "../assets/locales/ko.json": {
1271
+ valueMissing: "필수 항목입니다",
1272
+ badInput: "올바른 값을 입력하세요",
1273
+ typeMismatch: "올바른 형식의 값을 입력하세요",
1274
+ patternMismatch: "요청된 형식에 맞게 입력하세요",
1275
+ rangeUnderflow: "값은 {min} 이상이어야 합니다",
1276
+ rangeOverflow: "값은 {max} 이하여야 합니다",
1277
+ stepMismatch: "값은 {step}의 배수여야 합니다",
1278
+ tooShort: "최소 {min} 이상이어야 합니다",
1279
+ tooLong: "최대 {max} 이하여야 합니다",
1280
+ increment: "값 증가",
1281
+ decrement: "값 감소",
1282
+ clear: "값 지우기",
1283
+ today: "오늘",
1284
+ time: "시간",
1285
+ showPassword: "비밀번호 표시",
1286
+ hidePassword: "비밀번호 숨기기",
1287
+ previousSlide: "이전 슬라이드",
1288
+ nextSlide: "다음 슬라이드",
1289
+ goToSlide: "{n}번 슬라이드로 이동",
1290
+ chooseDate: "날짜 선택",
1291
+ previousMonth: "이전 달",
1292
+ nextMonth: "다음 달",
1293
+ close: "닫기",
1294
+ copy: "복사",
1295
+ copied: "복사됨",
1296
+ chooseFile: "파일 선택",
1297
+ noFileChosen: "선택된 파일 없음",
1298
+ filesSelected: "{count}개 파일 선택됨",
1299
+ resizePanels: "패널 크기 조절",
1300
+ search: "검색",
1301
+ alertError: "오류",
1302
+ alertWarning: "경고",
1303
+ alertSuccess: "완료",
1304
+ alertInfo: "안내",
1305
+ alertNotice: "알림",
1306
+ alertMessage: "메시지",
1307
+ remove: "제거",
1308
+ closeTab: "탭 닫기",
1309
+ breadcrumb: "탐색 경로"
1310
+ },
1311
+ "../assets/locales/pt-BR.json": {
1312
+ valueMissing: "Este campo é obrigatório",
1313
+ badInput: "Insira um valor válido",
1314
+ typeMismatch: "Insira um valor no formato correto",
1315
+ patternMismatch: "Siga o formato solicitado",
1316
+ rangeUnderflow: "O valor deve ser no mínimo {min}",
1317
+ rangeOverflow: "O valor deve ser no máximo {max}",
1318
+ stepMismatch: "O valor deve ser um múltiplo de {step}",
1319
+ tooShort: "Deve ser no mínimo {min}",
1320
+ tooLong: "Deve ser no máximo {max}",
1321
+ increment: "Aumentar valor",
1322
+ decrement: "Diminuir valor",
1323
+ clear: "Limpar valor",
1324
+ today: "Hoje",
1325
+ time: "Hora",
1326
+ showPassword: "Mostrar senha",
1327
+ hidePassword: "Ocultar senha",
1328
+ previousSlide: "Slide anterior",
1329
+ nextSlide: "Próximo slide",
1330
+ goToSlide: "Ir para o slide {n}",
1331
+ chooseDate: "Escolher data",
1332
+ previousMonth: "Mês anterior",
1333
+ nextMonth: "Próximo mês",
1334
+ close: "Fechar",
1335
+ copy: "Copiar",
1336
+ copied: "Copiado",
1337
+ chooseFile: "Escolher arquivo",
1338
+ noFileChosen: "Nenhum arquivo escolhido",
1339
+ filesSelected: "{count} arquivos selecionados",
1340
+ resizePanels: "Redimensionar painéis",
1341
+ search: "Pesquisar",
1342
+ alertError: "Erro",
1343
+ alertWarning: "Aviso",
1344
+ alertSuccess: "Sucesso",
1345
+ alertInfo: "Informação",
1346
+ alertNotice: "Nota",
1347
+ alertMessage: "Mensagem",
1348
+ remove: "Remover",
1349
+ closeTab: "Fechar aba",
1350
+ breadcrumb: "Trilha de navegação"
1351
+ },
1352
+ "../assets/locales/ru.json": {
1353
+ valueMissing: "Это поле обязательно для заполнения",
1354
+ badInput: "Введите допустимое значение",
1355
+ typeMismatch: "Введите значение в правильном формате",
1356
+ patternMismatch: "Введите значение в требуемом формате",
1357
+ rangeUnderflow: "Значение должно быть не менее {min}",
1358
+ rangeOverflow: "Значение должно быть не более {max}",
1359
+ stepMismatch: "Значение должно быть кратно {step}",
1360
+ tooShort: "Должно быть не менее {min}",
1361
+ tooLong: "Должно быть не более {max}",
1362
+ increment: "Увеличить значение",
1363
+ decrement: "Уменьшить значение",
1364
+ clear: "Очистить значение",
1365
+ today: "Сегодня",
1366
+ time: "Время",
1367
+ showPassword: "Показать пароль",
1368
+ hidePassword: "Скрыть пароль",
1369
+ previousSlide: "Предыдущий слайд",
1370
+ nextSlide: "Следующий слайд",
1371
+ goToSlide: "Перейти к слайду {n}",
1372
+ chooseDate: "Выбрать дату",
1373
+ previousMonth: "Предыдущий месяц",
1374
+ nextMonth: "Следующий месяц",
1375
+ close: "Закрыть",
1376
+ copy: "Копировать",
1377
+ copied: "Скопировано",
1378
+ chooseFile: "Выбрать файл",
1379
+ noFileChosen: "Файл не выбран",
1380
+ filesSelected: "Выбрано файлов: {count}",
1381
+ resizePanels: "Изменить размер панелей",
1382
+ search: "Поиск",
1383
+ alertError: "Ошибка",
1384
+ alertWarning: "Предупреждение",
1385
+ alertSuccess: "Успешно",
1386
+ alertInfo: "Информация",
1387
+ alertNotice: "Уведомление",
1388
+ alertMessage: "Сообщение",
1389
+ remove: "Удалить",
1390
+ closeTab: "Закрыть вкладку",
1391
+ breadcrumb: "Навигационная цепочка"
1392
+ },
1393
+ "../assets/locales/th.json": {
1394
+ valueMissing: "จำเป็นต้องกรอกข้อมูลนี้",
1395
+ badInput: "กรุณากรอกค่าที่ถูกต้อง",
1396
+ typeMismatch: "กรุณากรอกค่าให้ถูกรูปแบบ",
1397
+ patternMismatch: "กรุณากรอกให้ตรงตามรูปแบบที่กำหนด",
1398
+ rangeUnderflow: "ค่าต้องมากกว่าหรือเท่ากับ {min}",
1399
+ rangeOverflow: "ค่าต้องน้อยกว่าหรือเท่ากับ {max}",
1400
+ stepMismatch: "ค่าต้องเป็นจำนวนทวีคูณของ {step}",
1401
+ tooShort: "ต้องมีอย่างน้อย {min}",
1402
+ tooLong: "ต้องไม่เกิน {max}",
1403
+ increment: "เพิ่มค่า",
1404
+ decrement: "ลดค่า",
1405
+ clear: "ล้างค่า",
1406
+ today: "วันนี้",
1407
+ time: "เวลา",
1408
+ showPassword: "แสดงรหัสผ่าน",
1409
+ hidePassword: "ซ่อนรหัสผ่าน",
1410
+ previousSlide: "สไลด์ก่อนหน้า",
1411
+ nextSlide: "สไลด์ถัดไป",
1412
+ goToSlide: "ไปที่สไลด์ที่ {n}",
1413
+ chooseDate: "เลือกวันที่",
1414
+ previousMonth: "เดือนก่อนหน้า",
1415
+ nextMonth: "เดือนถัดไป",
1416
+ close: "ปิด",
1417
+ copy: "คัดลอก",
1418
+ copied: "คัดลอกแล้ว",
1419
+ chooseFile: "เลือกไฟล์",
1420
+ noFileChosen: "ยังไม่ได้เลือกไฟล์",
1421
+ filesSelected: "เลือกแล้ว {count} ไฟล์",
1422
+ resizePanels: "ปรับขนาดแผง",
1423
+ search: "ค้นหา",
1424
+ alertError: "ข้อผิดพลาด",
1425
+ alertWarning: "คำเตือน",
1426
+ alertSuccess: "สำเร็จ",
1427
+ alertInfo: "ข้อมูล",
1428
+ alertNotice: "ประกาศ",
1429
+ alertMessage: "ข้อความ",
1430
+ remove: "ลบ",
1431
+ closeTab: "ปิดแท็บ",
1432
+ breadcrumb: "เส้นทางการนำทาง"
1433
+ },
1434
+ "../assets/locales/vi.json": {
1435
+ valueMissing: "Trường này là bắt buộc",
1436
+ badInput: "Vui lòng nhập giá trị hợp lệ",
1437
+ typeMismatch: "Vui lòng nhập giá trị đúng định dạng",
1438
+ patternMismatch: "Vui lòng nhập đúng định dạng yêu cầu",
1439
+ rangeUnderflow: "Giá trị phải lớn hơn hoặc bằng {min}",
1440
+ rangeOverflow: "Giá trị phải nhỏ hơn hoặc bằng {max}",
1441
+ stepMismatch: "Giá trị phải là bội số của {step}",
1442
+ tooShort: "Phải lớn hơn hoặc bằng {min}",
1443
+ tooLong: "Phải nhỏ hơn hoặc bằng {max}",
1444
+ increment: "Tăng giá trị",
1445
+ decrement: "Giảm giá trị",
1446
+ clear: "Xóa giá trị",
1447
+ today: "Hôm nay",
1448
+ time: "Giờ",
1449
+ showPassword: "Hiện mật khẩu",
1450
+ hidePassword: "Ẩn mật khẩu",
1451
+ previousSlide: "Slide trước",
1452
+ nextSlide: "Slide sau",
1453
+ goToSlide: "Đi đến slide {n}",
1454
+ chooseDate: "Chọn ngày",
1455
+ previousMonth: "Tháng trước",
1456
+ nextMonth: "Tháng sau",
1457
+ close: "Đóng",
1458
+ copy: "Sao chép",
1459
+ copied: "Đã sao chép",
1460
+ chooseFile: "Chọn tệp",
1461
+ noFileChosen: "Chưa chọn tệp nào",
1462
+ filesSelected: "Đã chọn {count} tệp",
1463
+ resizePanels: "Thay đổi kích thước bảng",
1464
+ search: "Tìm kiếm",
1465
+ alertError: "Lỗi",
1466
+ alertWarning: "Cảnh báo",
1467
+ alertSuccess: "Thành công",
1468
+ alertInfo: "Thông tin",
1469
+ alertNotice: "Lưu ý",
1470
+ alertMessage: "Thông báo",
1471
+ remove: "Xóa",
1472
+ closeTab: "Đóng tab",
1473
+ breadcrumb: "Đường dẫn điều hướng"
1474
+ },
1475
+ "../assets/locales/zh-CN.json": {
1476
+ valueMissing: "此项为必填项",
1477
+ badInput: "请输入有效的值",
1478
+ typeMismatch: "请输入正确格式的值",
1479
+ patternMismatch: "请按照要求的格式输入",
1480
+ rangeUnderflow: "值必须大于或等于{min}",
1481
+ rangeOverflow: "值必须小于或等于{max}",
1482
+ stepMismatch: "值必须是{step}的倍数",
1483
+ tooShort: "至少需要{min}",
1484
+ tooLong: "最多不能超过{max}",
1485
+ increment: "增加值",
1486
+ decrement: "减少值",
1487
+ clear: "清除值",
1488
+ today: "今天",
1489
+ time: "时间",
1490
+ showPassword: "显示密码",
1491
+ hidePassword: "隐藏密码",
1492
+ previousSlide: "上一张幻灯片",
1493
+ nextSlide: "下一张幻灯片",
1494
+ goToSlide: "转到幻灯片{n}",
1495
+ chooseDate: "选择日期",
1496
+ previousMonth: "上个月",
1497
+ nextMonth: "下个月",
1498
+ close: "关闭",
1499
+ copy: "复制",
1500
+ copied: "已复制",
1501
+ chooseFile: "选择文件",
1502
+ noFileChosen: "未选择文件",
1503
+ filesSelected: "已选择{count}个文件",
1504
+ resizePanels: "调整面板大小",
1505
+ search: "搜索",
1506
+ alertError: "错误",
1507
+ alertWarning: "警告",
1508
+ alertSuccess: "成功",
1509
+ alertInfo: "信息",
1510
+ alertNotice: "提示",
1511
+ alertMessage: "消息",
1512
+ remove: "移除",
1513
+ closeTab: "关闭标签页",
1514
+ breadcrumb: "面包屑导航"
1515
+ },
1516
+ "../assets/locales/zh-TW.json": {
1517
+ valueMissing: "此欄位為必填",
1518
+ badInput: "請輸入有效的值",
1519
+ typeMismatch: "請輸入正確格式的值",
1520
+ patternMismatch: "請依照要求的格式輸入",
1521
+ rangeUnderflow: "值必須大於或等於{min}",
1522
+ rangeOverflow: "值必須小於或等於{max}",
1523
+ stepMismatch: "值必須是{step}的倍數",
1524
+ tooShort: "至少需要{min}",
1525
+ tooLong: "最多不能超過{max}",
1526
+ increment: "增加值",
1527
+ decrement: "減少值",
1528
+ clear: "清除值",
1529
+ today: "今天",
1530
+ time: "時間",
1531
+ showPassword: "顯示密碼",
1532
+ hidePassword: "隱藏密碼",
1533
+ previousSlide: "上一張投影片",
1534
+ nextSlide: "下一張投影片",
1535
+ goToSlide: "前往投影片{n}",
1536
+ chooseDate: "選擇日期",
1537
+ previousMonth: "上個月",
1538
+ nextMonth: "下個月",
1539
+ close: "關閉",
1540
+ copy: "複製",
1541
+ copied: "已複製",
1542
+ chooseFile: "選擇檔案",
1543
+ noFileChosen: "未選擇檔案",
1544
+ filesSelected: "已選擇{count}個檔案",
1545
+ resizePanels: "調整面板大小",
1546
+ search: "搜尋",
1547
+ alertError: "錯誤",
1548
+ alertWarning: "警告",
1549
+ alertSuccess: "成功",
1550
+ alertInfo: "資訊",
1551
+ alertNotice: "提示",
1552
+ alertMessage: "訊息",
1553
+ remove: "移除",
1554
+ closeTab: "關閉分頁",
1555
+ breadcrumb: "麵包屑導覽"
1556
+ }
1557
+ })).map(([e, t]) => [(e.split("/").pop()?.replace(".json", "") || "").toLowerCase(), t])), x = /* @__PURE__ */ new Map();
1558
+ function S() {
1559
+ return typeof document < "u" && document.documentElement?.lang ? document.documentElement.lang : typeof window < "u" && typeof navigator < "u" && navigator.language ? navigator.language : "en";
1560
+ }
1561
+ var C = S();
1562
+ function w(e) {
1563
+ let t = e.toLowerCase(), n = t.split("-")[0];
1564
+ return n === t ? [t, "en"] : [
1565
+ t,
1566
+ n,
1567
+ "en"
1568
+ ];
1569
+ }
1570
+ function T(e, t) {
1571
+ return t ? e.replace(/\{(\w+)\}/g, (e, n) => t[n] == null ? `{${n}}` : String(t[n])) : e;
1572
+ }
1573
+ function E(e, t) {
1574
+ for (let n of w(e)) {
1575
+ let e = x.get(n)?.[t] ?? b.get(n)?.[t];
1576
+ if (e) return e;
1577
+ }
1578
+ return b.get("en")[t];
1579
+ }
1580
+ var D = /* @__PURE__ */ new Map(), O = class {
1581
+ constructor() {}
1582
+ static set(e) {
1583
+ C = e;
1584
+ }
1585
+ static get() {
1586
+ return C;
1587
+ }
1588
+ static register(e, t) {
1589
+ let n = e.toLowerCase(), r = x.get(n) ?? b.get(n) ?? b.get("en");
1590
+ x.set(n, {
1591
+ ...r,
1592
+ ...t
1593
+ });
1594
+ }
1595
+ static getValue(e, t) {
1596
+ return T(E(C, e), t);
1597
+ }
1598
+ static namespace(e) {
1599
+ return {
1600
+ name: e,
1601
+ register(t, n) {
1602
+ let r = D.get(e) ?? /* @__PURE__ */ new Map(), i = t.toLowerCase();
1603
+ r.set(i, {
1604
+ ...r.get(i),
1605
+ ...n
1606
+ }), D.set(e, r);
1607
+ },
1608
+ text(t, n) {
1609
+ let r = D.get(e);
1610
+ for (let e of w(C)) {
1611
+ let i = r?.get(e)?.[t];
1612
+ if (i) return T(i, n);
1613
+ }
1614
+ return t;
1615
+ }
1616
+ };
1617
+ }
1618
+ }.namespace("flex-table");
1619
+ O.register("en", {
1620
+ showHiddenColumns: "Show hidden column(s)",
1621
+ columnMenu: "Column menu",
1622
+ cellActions: "Cell actions",
1623
+ noColumnsDefined: "No columns defined",
1624
+ addCommentPlaceholder: "Add a comment… (Ctrl+Enter to save)",
1625
+ cancel: "Cancel",
1626
+ save: "Save",
1627
+ clear: "Clear",
1628
+ blankCells: "Blank cells",
1629
+ emptyOnly: "Empty only",
1630
+ nonEmptyOnly: "Non-empty only",
1631
+ blankAll: "— All —",
1632
+ all: "All",
1633
+ contains: "Contains",
1634
+ startsWith: "Starts with",
1635
+ endsWith: "Ends with",
1636
+ wildcard: "Wildcard",
1637
+ searchPlaceholder: "Search...",
1638
+ valuePlaceholder: "Value",
1639
+ fromPlaceholder: "From",
1640
+ toPlaceholder: "To",
1641
+ findPlaceholder: "Find...",
1642
+ findPrevious: "Previous (Shift+Enter)",
1643
+ findNext: "Next (Enter)",
1644
+ matchCase: "Match case",
1645
+ wholeCell: "Whole cell",
1646
+ closeFind: "Close (Escape)",
1647
+ replaceWithPlaceholder: "Replace with...",
1648
+ replace: "Replace",
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)"
1672
+ }), O.register("ko", {
1673
+ showHiddenColumns: "숨긴 열 보기",
1674
+ columnMenu: "열 메뉴",
1675
+ cellActions: "셀 작업",
1676
+ noColumnsDefined: "정의된 열이 없습니다",
1677
+ addCommentPlaceholder: "메모 입력… (Ctrl+Enter 로 저장)",
1678
+ cancel: "취소",
1679
+ save: "저장",
1680
+ clear: "지우기",
1681
+ blankCells: "빈 셀",
1682
+ emptyOnly: "빈 값만",
1683
+ nonEmptyOnly: "빈 값 제외",
1684
+ blankAll: "— 전체 —",
1685
+ all: "전체",
1686
+ contains: "포함",
1687
+ startsWith: "시작 문자",
1688
+ endsWith: "끝 문자",
1689
+ wildcard: "와일드카드",
1690
+ searchPlaceholder: "검색...",
1691
+ valuePlaceholder: "값",
1692
+ fromPlaceholder: "시작",
1693
+ toPlaceholder: "끝",
1694
+ findPlaceholder: "찾기...",
1695
+ findPrevious: "이전 (Shift+Enter)",
1696
+ findNext: "다음 (Enter)",
1697
+ matchCase: "대/소문자 구분",
1698
+ wholeCell: "셀 전체 일치",
1699
+ closeFind: "닫기 (Escape)",
1700
+ replaceWithPlaceholder: "바꿀 내용...",
1701
+ replace: "바꾸기",
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)"
1725
+ });
1726
+ var k = (e, t) => O.text(e, t);
1727
+ //#endregion
981
1728
  //#region src/core/selection.ts
982
- function b(e) {
1729
+ function ee(e) {
983
1730
  return {
984
1731
  startRow: Math.min(e.startRow, e.endRow),
985
1732
  startCol: Math.min(e.startCol, e.endCol),
@@ -987,7 +1734,7 @@ function b(e) {
987
1734
  endCol: Math.max(e.startCol, e.endCol)
988
1735
  };
989
1736
  }
990
- var x = class {
1737
+ var te = class {
991
1738
  constructor() {
992
1739
  this.activeCell = null, this.rangeAnchor = null, this.range = null, this.extraRanges = [], this._rowCount = 0, this._colCount = 0;
993
1740
  }
@@ -1014,7 +1761,7 @@ var x = class {
1014
1761
  return e < 0 || e >= this._rowCount || t < 0 || t >= this._colCount ? this.activeCell : (!this.rangeAnchor && this.activeCell && (this.rangeAnchor = { ...this.activeCell }), this.activeCell = {
1015
1762
  row: e,
1016
1763
  col: t
1017
- }, this.rangeAnchor && (this.range = b({
1764
+ }, this.rangeAnchor && (this.range = ee({
1018
1765
  startRow: this.rangeAnchor.row,
1019
1766
  startCol: this.rangeAnchor.col,
1020
1767
  endRow: e,
@@ -1085,7 +1832,7 @@ var x = class {
1085
1832
  shiftMoveRight() {
1086
1833
  return this.activeCell ? this.setActiveWithRange(this.activeCell.row, this.activeCell.col + 1) : null;
1087
1834
  }
1088
- }, S = class {
1835
+ }, ne = class {
1089
1836
  constructor() {
1090
1837
  this.current = null;
1091
1838
  }
@@ -1106,7 +1853,7 @@ var x = class {
1106
1853
  let e = this.current;
1107
1854
  return this.current = null, e;
1108
1855
  }
1109
- }, C = class {
1856
+ }, A = class {
1110
1857
  constructor() {
1111
1858
  this._selected = /* @__PURE__ */ new Set(), this._mode = "multi", this._rowCount = 0;
1112
1859
  }
@@ -1167,7 +1914,7 @@ var x = class {
1167
1914
  };
1168
1915
  //#endregion
1169
1916
  //#region src/core/filtering.ts
1170
- function w(e, t, n) {
1917
+ function j(e, t, n) {
1171
1918
  if (t.length === 0) return Array.from({ length: e.length }, (e, t) => t);
1172
1919
  let r = [];
1173
1920
  for (let i = 0; i < e.length; i++) {
@@ -1186,9 +1933,9 @@ function w(e, t, n) {
1186
1933
  }
1187
1934
  //#endregion
1188
1935
  //#region src/core/undo.ts
1189
- var T = 100, E = class {
1936
+ var re = 100, M = class {
1190
1937
  constructor() {
1191
- this._undoStack = [], this._redoStack = [], this._maxSize = T;
1938
+ this._undoStack = [], this._redoStack = [], this._maxSize = re;
1192
1939
  }
1193
1940
  get maxSize() {
1194
1941
  return this._maxSize;
@@ -1225,7 +1972,7 @@ var T = 100, E = class {
1225
1972
  };
1226
1973
  //#endregion
1227
1974
  //#region src/clipboard/clipboard.ts
1228
- function D(e, t, n) {
1975
+ function ie(e, t, n) {
1229
1976
  let r = [];
1230
1977
  for (let i = n.startRow; i <= n.endRow; i++) {
1231
1978
  let a = e[i], o = [];
@@ -1237,7 +1984,7 @@ function D(e, t, n) {
1237
1984
  }
1238
1985
  return r.join("\n");
1239
1986
  }
1240
- function O(e) {
1987
+ function N(e) {
1241
1988
  let t = e.replace(/\r\n/g, "\n").replace(/\r/g, "\n"), n = [], r = [], i = 0, a = t.length;
1242
1989
  for (; i <= a;) {
1243
1990
  if (i === a) {
@@ -1267,7 +2014,7 @@ function O(e) {
1267
2014
  }
1268
2015
  return n;
1269
2016
  }
1270
- function k(e, t) {
2017
+ function P(e, t) {
1271
2018
  if (e === "") return null;
1272
2019
  switch (t.type) {
1273
2020
  case "number": {
@@ -1280,7 +2027,7 @@ function k(e, t) {
1280
2027
  }
1281
2028
  //#endregion
1282
2029
  //#region src/export/xlsx-writer.ts
1283
- var A = (() => {
2030
+ var ae = (() => {
1284
2031
  let e = /* @__PURE__ */ new Uint32Array(256);
1285
2032
  for (let t = 0; t < 256; t++) {
1286
2033
  let n = t;
@@ -1289,56 +2036,56 @@ var A = (() => {
1289
2036
  }
1290
2037
  return e;
1291
2038
  })();
1292
- function ee(e) {
2039
+ function oe(e) {
1293
2040
  let t = 4294967295;
1294
- for (let n = 0; n < e.length; n++) t = A[(t ^ e[n]) & 255] ^ t >>> 8;
2041
+ for (let n = 0; n < e.length; n++) t = ae[(t ^ e[n]) & 255] ^ t >>> 8;
1295
2042
  return (t ^ 4294967295) >>> 0;
1296
2043
  }
1297
- var j = new TextEncoder();
1298
- function te(e) {
2044
+ var F = new TextEncoder();
2045
+ function se(e) {
1299
2046
  let t = [], n = [], r = 0;
1300
2047
  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);
2048
+ 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
2049
  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
2050
  let l = new ArrayBuffer(46 + e.length), u = new DataView(l);
1304
2051
  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
2052
  }
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([
2053
+ let i = I(n), a = /* @__PURE__ */ new ArrayBuffer(22), o = new DataView(a);
2054
+ 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
2055
  ...t,
1309
2056
  i,
1310
2057
  new Uint8Array(a)
1311
2058
  ]);
1312
2059
  }
1313
- function M(e) {
2060
+ function I(e) {
1314
2061
  let t = e.reduce((e, t) => e + t.length, 0), n = new Uint8Array(t), r = 0;
1315
2062
  for (let t of e) n.set(t, r), r += t.length;
1316
2063
  return n;
1317
2064
  }
1318
- function N(e) {
2065
+ function L(e) {
1319
2066
  return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
1320
2067
  }
1321
- function P(e) {
2068
+ function ce(e) {
1322
2069
  let t = "";
1323
2070
  for (e++; e > 0;) t = String.fromCharCode(64 + (e % 26 || 26)) + t, e = Math.floor((e - 1) / 26);
1324
2071
  return t;
1325
2072
  }
1326
- function F(e, t) {
1327
- return P(t) + (e + 1);
2073
+ function R(e, t) {
2074
+ return ce(t) + (e + 1);
1328
2075
  }
1329
- function ne(e) {
2076
+ function le(e) {
1330
2077
  let t = Date.UTC(1899, 11, 30);
1331
2078
  return (e.getTime() - t) / 864e5;
1332
2079
  }
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>`);
2080
+ 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>";
2081
+ function V(e, t) {
2082
+ let n = [], r = t.map((e, t) => `<c r="${R(0, t)}" t="str" s="2"><v>${L(e.header)}</v></c>`);
1336
2083
  return n.push(`<row r="1">${r.join("")}</row>`), e.forEach((e, r) => {
1337
2084
  let i = t.map((t, n) => {
1338
- let i = F(r + 1, n), a = e[t.key];
2085
+ let i = R(r + 1, n), a = e[t.key];
1339
2086
  if (a == null) return `<c r="${i}" t="str"><v></v></c>`;
1340
2087
  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>`;
2088
+ 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
2089
  });
1343
2090
  n.push(`<row r="${r + 2}">${i.join("")}</row>`);
1344
2091
  }), `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
@@ -1346,55 +2093,55 @@ function ce(e, t) {
1346
2093
  <sheetData>${n.join("")}</sheetData>
1347
2094
  </worksheet>`;
1348
2095
  }
1349
- function le(e, t) {
1350
- let n = ce(e, t);
1351
- return te([
2096
+ function pe(e, t) {
2097
+ let n = V(e, t);
2098
+ return se([
1352
2099
  {
1353
2100
  name: "[Content_Types].xml",
1354
- data: j.encode(re)
2101
+ data: F.encode(ue)
1355
2102
  },
1356
2103
  {
1357
2104
  name: "_rels/.rels",
1358
- data: j.encode(ie)
2105
+ data: F.encode(de)
1359
2106
  },
1360
2107
  {
1361
2108
  name: "xl/workbook.xml",
1362
- data: j.encode(ae)
2109
+ data: F.encode(fe)
1363
2110
  },
1364
2111
  {
1365
2112
  name: "xl/_rels/workbook.xml.rels",
1366
- data: j.encode(oe)
2113
+ data: F.encode(z)
1367
2114
  },
1368
2115
  {
1369
2116
  name: "xl/worksheets/sheet1.xml",
1370
- data: j.encode(n)
2117
+ data: F.encode(n)
1371
2118
  },
1372
2119
  {
1373
2120
  name: "xl/styles.xml",
1374
- data: j.encode(se)
2121
+ data: F.encode(B)
1375
2122
  }
1376
2123
  ]);
1377
2124
  }
1378
2125
  //#endregion
1379
2126
  //#region src/export/export.ts
1380
- function I(e, t, n) {
2127
+ function H(e, t, n) {
1381
2128
  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);
2129
+ case "csv": return U(e, t, ",");
2130
+ case "tsv": return U(e, t, " ");
2131
+ case "json": return he(e, t);
2132
+ case "xlsx": return pe(e, t);
1386
2133
  }
1387
2134
  }
1388
- function L(e, t) {
2135
+ function me(e, t) {
1389
2136
  return e == null ? "" : (t.type === "date" || t.type === "datetime") && e instanceof Date ? e.toISOString() : String(e);
1390
2137
  }
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");
2138
+ function U(e, t, n) {
2139
+ 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
2140
  }
1394
- function z(e, t) {
2141
+ function W(e, t) {
1395
2142
  return e.includes(t) || e.includes("\"") || e.includes("\n") || e.includes("\r") ? "\"" + e.replace(/"/g, "\"\"") + "\"" : e;
1396
2143
  }
1397
- function B(e, t) {
2144
+ function he(e, t) {
1398
2145
  let n = e.map((e) => {
1399
2146
  let n = {};
1400
2147
  for (let r of t) {
@@ -1405,35 +2152,35 @@ function B(e, t) {
1405
2152
  });
1406
2153
  return JSON.stringify(n, null, 2);
1407
2154
  }
1408
- function V(e, t, n) {
2155
+ function ge(e, t, n) {
1409
2156
  let r = new Blob([e], { type: n }), i = URL.createObjectURL(r), a = document.createElement("a");
1410
2157
  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
2158
  }
1412
- var H = {
2159
+ var _e = {
1413
2160
  csv: "text/csv;charset=utf-8",
1414
2161
  tsv: "text/tab-separated-values;charset=utf-8",
1415
2162
  json: "application/json;charset=utf-8",
1416
2163
  xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
1417
- }, U = {
2164
+ }, ve = {
1418
2165
  csv: ".csv",
1419
2166
  tsv: ".tsv",
1420
2167
  json: ".json",
1421
2168
  xlsx: ".xlsx"
1422
2169
  };
1423
- function ue(e) {
1424
- return H[e];
2170
+ function ye(e) {
2171
+ return _e[e];
1425
2172
  }
1426
- function de(e) {
1427
- return U[e];
2173
+ function be(e) {
2174
+ return ve[e];
1428
2175
  }
1429
2176
  //#endregion
1430
2177
  //#region src/export/xlsx-reader.ts
1431
- function fe(e) {
2178
+ function xe(e) {
1432
2179
  for (let t = e.byteLength - 22; t >= 0; t--) if (e.getUint32(t, !0) === 101010256) return t;
1433
2180
  throw Error("XLSX: End of central directory not found — not a valid ZIP file");
1434
2181
  }
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;
2182
+ function Se(e) {
2183
+ 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
2184
  for (; o < s && e.getUint32(o, !0) === 33639248;) {
1438
2185
  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
2186
  a.push({
@@ -1446,7 +2193,7 @@ function pe(e) {
1446
2193
  }
1447
2194
  return a;
1448
2195
  }
1449
- async function me(e) {
2196
+ async function Ce(e) {
1450
2197
  let t = new DecompressionStream("deflate-raw"), n = t.writable.getWriter(), r = t.readable.getReader();
1451
2198
  n.write(e), n.close();
1452
2199
  let i = [];
@@ -1459,40 +2206,40 @@ async function me(e) {
1459
2206
  for (let e of i) o.set(e, s), s += e.length;
1460
2207
  return o;
1461
2208
  }
1462
- async function he(e, t) {
2209
+ async function we(e, t) {
1463
2210
  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
2211
  if (t.compressionMethod === 0) return o.slice();
1465
- if (t.compressionMethod === 8) return me(o);
2212
+ if (t.compressionMethod === 8) return Ce(o);
1466
2213
  throw Error(`XLSX: Unsupported compression method ${t.compressionMethod}`);
1467
2214
  }
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));
2215
+ async function Te(e) {
2216
+ let t = new DataView(e), n = Se(t), r = /* @__PURE__ */ new Map();
2217
+ for (let e of n) e.compressedSize === 0 && e.name.endsWith("/") || r.set(e.name, await we(t, e));
1471
2218
  return r;
1472
2219
  }
1473
- var _e = new TextDecoder("utf-8");
1474
- function W(e) {
1475
- let t = _e.decode(e);
2220
+ var Ee = new TextDecoder("utf-8");
2221
+ function G(e) {
2222
+ let t = Ee.decode(e);
1476
2223
  return new DOMParser().parseFromString(t, "application/xml");
1477
2224
  }
1478
- function ve(e) {
2225
+ function De(e) {
1479
2226
  if (!e) return [];
1480
- let t = W(e);
2227
+ let t = G(e);
1481
2228
  return Array.from(t.querySelectorAll("si")).map((e) => Array.from(e.querySelectorAll("t")).map((e) => e.textContent ?? "").join(""));
1482
2229
  }
1483
- function ye(e) {
2230
+ function Oe(e) {
1484
2231
  let t = (e - 1) * 864e5 + Date.UTC(1899, 11, 30);
1485
2232
  return new Date(t).toISOString().slice(0, 10);
1486
2233
  }
1487
- function be(e, t) {
1488
- let n = W(e).querySelectorAll("row");
2234
+ function ke(e, t) {
2235
+ let n = G(e).querySelectorAll("row");
1489
2236
  if (n.length === 0) return [];
1490
2237
  let r = 0, i = /* @__PURE__ */ new Map();
1491
2238
  for (let e of n) {
1492
2239
  let n = parseInt(e.getAttribute("r") ?? "1", 10) - 1, a = /* @__PURE__ */ new Map();
1493
2240
  i.set(n, a);
1494
2241
  for (let n of e.querySelectorAll("c")) {
1495
- let e = xe(n.getAttribute("r") ?? "");
2242
+ let e = Ae(n.getAttribute("r") ?? "");
1496
2243
  e > r && (r = e);
1497
2244
  let i = n.getAttribute("t") ?? "", o = n.getAttribute("s") ?? "", s = n.querySelector("v")?.textContent ?? "", c = n.querySelector("is > t")?.textContent ?? null, l;
1498
2245
  if (i === "s") l = t[parseInt(s, 10)] ?? "";
@@ -1501,7 +2248,7 @@ function be(e, t) {
1501
2248
  else if (s === "") l = "";
1502
2249
  else {
1503
2250
  let e = parseFloat(s);
1504
- l = !isNaN(e) && o !== "" && parseInt(o, 10) > 0 && e >= 1 && e <= 73050 ? ye(e) : s;
2251
+ l = !isNaN(e) && o !== "" && parseInt(o, 10) > 0 && e >= 1 && e <= 73050 ? Oe(e) : s;
1505
2252
  }
1506
2253
  a.set(e, l);
1507
2254
  }
@@ -1515,13 +2262,13 @@ function be(e, t) {
1515
2262
  }
1516
2263
  return o;
1517
2264
  }
1518
- function xe(e) {
2265
+ function Ae(e) {
1519
2266
  let t = 0, n = 0;
1520
2267
  for (; n < e.length && e[n] >= "A" && e[n] <= "Z";) t = t * 26 + (e.charCodeAt(n) - 64), n++;
1521
2268
  return t - 1;
1522
2269
  }
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");
2270
+ async function je(e) {
2271
+ let t = await Te(e), n = De(t.get("xl/sharedStrings.xml")), r = t.get("xl/worksheets/sheet1.xml");
1525
2272
  if (!r) {
1526
2273
  for (let [e, n] of t) if (e.toLowerCase().includes("worksheets/sheet")) {
1527
2274
  r = n;
@@ -1529,7 +2276,7 @@ async function G(e) {
1529
2276
  }
1530
2277
  }
1531
2278
  if (!r) throw Error("XLSX: No worksheet found");
1532
- let i = be(r, n);
2279
+ let i = ke(r, n);
1533
2280
  return i.length === 0 ? {
1534
2281
  headers: [],
1535
2282
  rows: []
@@ -1539,7 +2286,7 @@ async function G(e) {
1539
2286
  };
1540
2287
  }
1541
2288
  //#endregion
1542
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorate.js
2289
+ //#region \0@oxc-project+runtime@0.150.0/helpers/esm/decorate.js
1543
2290
  function K(e, t, n, r) {
1544
2291
  var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
1545
2292
  if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
@@ -1555,9 +2302,9 @@ var q = {
1555
2302
  lt: "<",
1556
2303
  gte: "≥",
1557
2304
  lte: "≤"
1558
- }, J = 120, Y = 40, X = 20, Z = 32, Q = 5, Se = 200, $ = class extends n {
2305
+ }, J = 120, Y = 40, X = 20, Z = 32, Q = 5, Me = 200, $ = class extends n {
1559
2306
  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 = () => {
2307
+ 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
2308
  this._commitCommentPopup();
1562
2309
  }, 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
2310
  }
@@ -1922,12 +2669,12 @@ var q = {
1922
2669
  if (!t) return "";
1923
2670
  let n = this.visibleColumns.slice(t.startCol, t.endCol + 1), r = [];
1924
2671
  for (let e = t.startRow; e <= t.endRow; e++) r.push(this.data[this._toDataIndex(e)]);
1925
- return I(r, n, e);
2672
+ return H(r, n, e);
1926
2673
  }
1927
- return I(this._sortedIndices.map((e) => this.data[e]), this.visibleColumns, e);
2674
+ return H(this._sortedIndices.map((e) => this.data[e]), this.visibleColumns, e);
1928
2675
  }
1929
2676
  exportToFile(e, t) {
1930
- V(this.exportToString(e), t ?? `export${de(e)}`, ue(e));
2677
+ ge(this.exportToString(e), t ?? `export${be(e)}`, ye(e));
1931
2678
  }
1932
2679
  setComment(e, t, n) {
1933
2680
  let r = this.getComment(e, t);
@@ -1984,10 +2731,10 @@ var q = {
1984
2731
  async importFromFile(e) {
1985
2732
  let t = e.name.toLowerCase();
1986
2733
  if (t.endsWith(".xlsx")) {
1987
- let t = await G(await e.arrayBuffer());
2734
+ let t = await je(await e.arrayBuffer());
1988
2735
  this._applyImportedSheet(t);
1989
2736
  } else if (t.endsWith(".csv") || t.endsWith(".tsv")) {
1990
- let t = O(await e.text());
2737
+ let t = N(await e.text());
1991
2738
  this._applyImportedRows(t);
1992
2739
  } else console.warn(`flex-table importFromFile: unsupported file type "${e.name}"`);
1993
2740
  }
@@ -1998,7 +2745,7 @@ var q = {
1998
2745
  let a = t.get(e);
1999
2746
  if (!a) return;
2000
2747
  let o = this.columns.find((e) => e.key === a);
2001
- r[a] = o ? k(n[i] ?? "", o) : n[i] ?? null;
2748
+ r[a] = o ? P(n[i] ?? "", o) : n[i] ?? null;
2002
2749
  }), r;
2003
2750
  }), r = [...this.data];
2004
2751
  this.data = n, this._undo.push({
@@ -2023,7 +2770,7 @@ var q = {
2023
2770
  let a = n.get(t);
2024
2771
  if (!a) return;
2025
2772
  let o = this.columns.find((e) => e.key === a);
2026
- r[a] = o ? k(e[i] ?? "", o) : e[i] ?? null;
2773
+ r[a] = o ? P(e[i] ?? "", o) : e[i] ?? null;
2027
2774
  }), r;
2028
2775
  }), i = [...this.data];
2029
2776
  this.data = r, this._undo.push({
@@ -2169,7 +2916,7 @@ var q = {
2169
2916
  this._filteredIndices = Array.from({ length: this.data.length }, (e, t) => t), this._sortedIndices = this._filteredIndices;
2170
2917
  return;
2171
2918
  }
2172
- if (this._filteredIndices = w(this.data, this._filters, (e, t, n) => {
2919
+ if (this._filteredIndices = j(this.data, this._filters, (e, t, n) => {
2173
2920
  this.dispatchEvent(new CustomEvent("filter-error", {
2174
2921
  detail: {
2175
2922
  error: e,
@@ -2199,7 +2946,7 @@ var q = {
2199
2946
  e !== this._viewportHeight && (this._viewportHeight = e), t !== this._viewportWidth && (this._viewportWidth = t), this._warnIfUnconstrained();
2200
2947
  }
2201
2948
  _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.`));
2949
+ 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
2950
  }
2204
2951
  _onScroll() {
2205
2952
  this._scrollTop = this.scrollTop, this._scrollLeft = this.scrollLeft;
@@ -2329,7 +3076,7 @@ var q = {
2329
3076
  }
2330
3077
  let t = this.shadowRoot?.querySelector(".ft-editor");
2331
3078
  if (t) {
2332
- let n = k(t.value, e);
3079
+ let n = P(t.value, e);
2333
3080
  this._applyEdit(n);
2334
3081
  } else this._cancelEdit();
2335
3082
  }
@@ -2557,7 +3304,7 @@ var q = {
2557
3304
  async _handleCopy(e) {
2558
3305
  let t = this._selection.getEffectiveRange();
2559
3306
  if (!t) return;
2560
- let n = this.visibleColumns, r = D(this._sortedIndices.map((e) => this.data[e]), n, t);
3307
+ let n = this.visibleColumns, r = ie(this._sortedIndices.map((e) => this.data[e]), n, t);
2561
3308
  try {
2562
3309
  await navigator.clipboard.writeText(r);
2563
3310
  } catch (e) {
@@ -2583,7 +3330,7 @@ var q = {
2583
3330
  if (!this._activeCell) return;
2584
3331
  let e = await this._readClipboardText();
2585
3332
  if (e == null) return;
2586
- let t = O(e);
3333
+ let t = N(e);
2587
3334
  if (t.length === 0) return;
2588
3335
  let n = this._expandRowsForPaste(this._activeCell.row, t.length), r = this._applyPasteData(this._activeCell, t);
2589
3336
  if (r.length > 0 || n.length > 0) {
@@ -2641,7 +3388,7 @@ var q = {
2641
3388
  for (let a = 0; a < t[i].length; a++) {
2642
3389
  let s = e.col + a;
2643
3390
  if (s >= n.length) break;
2644
- let c = n[s], l = this.data[o][c.key], u = k(t[i][a], c);
3391
+ let c = n[s], l = this.data[o][c.key], u = P(t[i][a], c);
2645
3392
  this.data[o][c.key] = u, r.push({
2646
3393
  row: o,
2647
3394
  col: s,
@@ -2706,7 +3453,7 @@ var q = {
2706
3453
  for (let r = e.startCol + 1; r <= e.endCol; r++) {
2707
3454
  let e = t[r];
2708
3455
  if (!e || !this._isCellEditable(e)) continue;
2709
- let a = k(o == null ? "" : String(o), e);
3456
+ let a = P(o == null ? "" : String(o), e);
2710
3457
  n.push({
2711
3458
  row: i,
2712
3459
  key: e.key,
@@ -2865,7 +3612,7 @@ var q = {
2865
3612
  @click=${n ? (t) => this._onHeaderClick(t, e) : void 0}>
2866
3613
  ${x ? i`
2867
3614
  <button class="ft-hidden-col-indicator"
2868
- title="Show hidden column(s)"
3615
+ title=${k("showHiddenColumns")}
2869
3616
  @click=${(t) => {
2870
3617
  t.stopPropagation(), this._showHiddenBefore(e);
2871
3618
  }}>&#x276F;</button>
@@ -2875,8 +3622,8 @@ var q = {
2875
3622
  ${o >= 0 ? i`<span class="ft-sort-order">${o + 1}</span>` : ""}
2876
3623
  <button class="ft-column-menu-btn ${s ? "ft-filter-active" : ""}"
2877
3624
  type="button"
2878
- title="Column menu"
2879
- aria-label=${`Column menu: ${e.header}`}
3625
+ title=${k("columnMenu")}
3626
+ aria-label=${k("columnMenuFor", { header: e.header })}
2880
3627
  aria-haspopup="menu"
2881
3628
  aria-expanded=${this._headerMenu?.key === e.key ? "true" : "false"}
2882
3629
  @mousedown=${(e) => e.stopPropagation()}
@@ -2995,26 +3742,26 @@ var q = {
2995
3742
  }}>${t}</button>
2996
3743
  `;
2997
3744
  return i`
2998
- <div class="ft-header-menu" role="menu" aria-label=${`${o.header} column`}
3745
+ <div class="ft-header-menu" role="menu" aria-label=${k("columnMenuRegion", { header: o.header })}
2999
3746
  style="position: fixed; left: ${t}px; top: ${n}px; z-index: 200;"
3000
3747
  @mousedown=${(e) => e.stopPropagation()}
3001
3748
  @keydown=${(e) => this._onHeaderMenuKeydown(e)}>
3002
3749
  ${o.sortable === !1 ? a : i`
3003
- ${c("sort-asc", "Sort ascending", () => this._applySortFromMenu(e, "asc"))}
3004
- ${c("sort-desc", "Sort descending", () => this._applySortFromMenu(e, "desc"))}
3750
+ ${c("sort-asc", k("sortAscending"), () => this._applySortFromMenu(e, "asc"))}
3751
+ ${c("sort-desc", k("sortDescending"), () => this._applySortFromMenu(e, "desc"))}
3005
3752
  <div class="ft-header-menu-separator" role="separator"></div>
3006
3753
  `}
3007
3754
  ${this.showFilters ? i`
3008
- ${c("filter", "Filter…", () => this._openFilterFromMenu(e))}
3009
- ${s ? c("clear-filter", "Clear filter", () => this._clearColumnFilter(e)) : a}
3755
+ ${c("filter", k("filter"), () => this._openFilterFromMenu(e))}
3756
+ ${s ? c("clear-filter", k("clearFilter"), () => this._clearColumnFilter(e)) : a}
3010
3757
  <div class="ft-header-menu-separator" role="separator"></div>
3011
3758
  ` : a}
3012
- ${c("hide", "Hide column", () => this._setColumnHidden(e, !0))}
3013
- ${r.map((e) => c("show", i`Show: ${e.header}`, () => this._setColumnHidden(e.key, !1)))}
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)))}
3014
3761
  <div class="ft-header-menu-separator" role="separator"></div>
3015
- ${c("autofit", "Auto-fit width", () => this._autoFitColumn(e))}
3016
- ${c("wider", "Wider", () => this._resizeColumnBy(e, X), !0)}
3017
- ${c("narrower", "Narrower", () => this._resizeColumnBy(e, -20), !0)}
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)}
3018
3765
  </div>
3019
3766
  `;
3020
3767
  }
@@ -3032,26 +3779,26 @@ var q = {
3032
3779
  }}>${e}</button>
3033
3780
  `, f = i`<div class="ft-context-menu-separator" role="separator"></div>`;
3034
3781
  return i`
3035
- <div class="ft-body-context-menu" role="menu" aria-label="Cell actions"
3782
+ <div class="ft-body-context-menu" role="menu" aria-label=${k("cellActions")}
3036
3783
  style="position: fixed; left: ${n}px; top: ${r}px; z-index: 200;"
3037
3784
  @mousedown=${(e) => e.stopPropagation()}
3038
3785
  @keydown=${(e) => this._onMenuKeydown(e, ".ft-body-context-menu", l)}>
3039
- ${d("Copy", () => this._handleCopy(!1))}
3786
+ ${d(k("copy"), () => this._handleCopy(!1))}
3040
3787
  ${f}
3041
- ${d("Insert row above", () => this.addRow(void 0, t))}
3042
- ${d("Insert row below", () => this.addRow(void 0, t + 1))}
3043
- ${d("Delete row", () => this.deleteRows([t]), !0)}
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)}
3044
3791
  ${f}
3045
- ${d("Hide column", () => this._setColumnHidden(o.key, !0))}
3792
+ ${d(k("hideColumn"), () => this._setColumnHidden(o.key, !0))}
3046
3793
  ${f}
3047
- ${d("Sort ascending ↑", () => this._applySortFromMenu(o.key, "asc"))}
3048
- ${d("Sort descending ↓", () => this._applySortFromMenu(o.key, "desc"))}
3794
+ ${d(`${k("sortAscending")} ↑`, () => this._applySortFromMenu(o.key, "asc"))}
3795
+ ${d(`${k("sortDescending")} ↓`, () => this._applySortFromMenu(o.key, "desc"))}
3049
3796
  ${f}
3050
- ${d("Filter by this value", () => this.setFilter(o.key, (e) => e === s))}
3051
- ${c ? d("Clear filter", () => this.removeFilter(o.key)) : a}
3797
+ ${d(k("filterByThisValue"), () => this.setFilter(o.key, (e) => e === s))}
3798
+ ${c ? d(k("clearFilter"), () => this.removeFilter(o.key)) : a}
3052
3799
  ${f}
3053
- ${d(u ? "Edit Comment" : "Add Comment", () => this._openCommentPopup(t, o.key, n, r))}
3054
- ${u ? d("Delete Comment", () => this.setComment(t, o.key, null), !0) : a}
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}
3055
3802
  </div>
3056
3803
  `;
3057
3804
  }
@@ -3083,13 +3830,13 @@ var q = {
3083
3830
  @mousedown=${(e) => e.stopPropagation()}>
3084
3831
  <textarea class="ft-comment-popup-textarea"
3085
3832
  rows="4"
3086
- placeholder="Add a comment… (Ctrl+Enter to save)"
3833
+ placeholder=${k("addCommentPlaceholder")}
3087
3834
  @keydown=${(e) => {
3088
3835
  e.key === "Escape" && (e.preventDefault(), this._cancelCommentPopup()), e.key === "Enter" && (e.ctrlKey || e.metaKey) && (e.preventDefault(), this._commitCommentPopup());
3089
3836
  }}></textarea>
3090
3837
  <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>
3838
+ <button class="ft-comment-popup-cancel" @click=${() => this._cancelCommentPopup()}>${k("cancel")}</button>
3839
+ <button class="ft-comment-popup-save" @click=${() => this._commitCommentPopup()}>${k("save")}</button>
3093
3840
  </div>
3094
3841
  </div>
3095
3842
  `;
@@ -3125,7 +3872,7 @@ var q = {
3125
3872
  <div class="ft-filter-dropdown" @click=${(e) => e.stopPropagation()}>
3126
3873
  ${t === "boolean" ? this._renderBooleanFilter(e) : t === "number" ? this._renderNumberFilter(e) : t === "date" || t === "datetime" ? this._renderDateFilter(e) : this._renderTextFilter(e)}
3127
3874
  <div class="ft-filter-actions">
3128
- <button class="ft-filter-clear" @click=${() => this._clearColumnFilter(e.key)}>Clear</button>
3875
+ <button class="ft-filter-clear" @click=${() => this._clearColumnFilter(e.key)}>${k("clear")}</button>
3129
3876
  </div>
3130
3877
  </div>
3131
3878
  `;
@@ -3158,7 +3905,7 @@ var q = {
3158
3905
  let n = this._emptyFilterState.get(e) ?? "";
3159
3906
  return i`
3160
3907
  <div class="ft-filter-empty-row">
3161
- <label>Blank cells</label>
3908
+ <label>${k("blankCells")}</label>
3162
3909
  <select class="ft-filter-mode-select"
3163
3910
  .value=${n}
3164
3911
  @change=${(n) => {
@@ -3168,9 +3915,9 @@ var q = {
3168
3915
  @keydown=${(e) => {
3169
3916
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
3170
3917
  }}>
3171
- <option value="">— All —</option>
3172
- <option value="empty">Empty only</option>
3173
- <option value="non-empty">Non-empty only</option>
3918
+ <option value="">${k("blankAll")}</option>
3919
+ <option value="empty">${k("emptyOnly")}</option>
3920
+ <option value="non-empty">${k("nonEmptyOnly")}</option>
3174
3921
  </select>
3175
3922
  </div>
3176
3923
  `;
@@ -3246,13 +3993,13 @@ var q = {
3246
3993
  @keydown=${(e) => {
3247
3994
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
3248
3995
  }}>
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>
3996
+ <option value="contains">${k("contains")}</option>
3997
+ <option value="starts">${k("startsWith")}</option>
3998
+ <option value="ends">${k("endsWith")}</option>
3999
+ <option value="wildcard">${k("wildcard")}</option>
3253
4000
  </select>
3254
4001
  </div>
3255
- <input class="ft-filter-input" type="text" placeholder="Search..."
4002
+ <input class="ft-filter-input" type="text" placeholder=${k("searchPlaceholder")}
3256
4003
  .value=${t.value}
3257
4004
  @input=${(t) => {
3258
4005
  let n = t.target.value, r = this._textFilterState.get(e.key) ?? {
@@ -3303,7 +4050,7 @@ var q = {
3303
4050
  }}>
3304
4051
  ${Object.keys(q).map((e) => i`<option value=${e}>${q[e]}</option>`)}
3305
4052
  </select>
3306
- <input class="ft-filter-input ft-num-cond-input" type="number" placeholder="Value"
4053
+ <input class="ft-filter-input ft-num-cond-input" type="number" placeholder=${k("valuePlaceholder")}
3307
4054
  .value=${n.value == null ? "" : String(n.value)}
3308
4055
  @input=${(n) => {
3309
4056
  let r = n.target.value, i = this._numberFilterState.get(e) ?? this._defaultNumState();
@@ -3364,13 +4111,13 @@ var q = {
3364
4111
  let t = e.type === "datetime" ? "datetime-local" : "date", n = this._dateFilterState.get(e.key) ?? {};
3365
4112
  return i`
3366
4113
  <div class="ft-filter-range">
3367
- <input class="ft-filter-input" type=${t} placeholder="From"
4114
+ <input class="ft-filter-input" type=${t} placeholder=${k("fromPlaceholder")}
3368
4115
  .value=${n.from ?? ""}
3369
4116
  @input=${(t) => this._applyDateFilter(e.key, t, "from")}
3370
4117
  @keydown=${(e) => {
3371
4118
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
3372
4119
  }}>
3373
- <input class="ft-filter-input" type=${t} placeholder="To"
4120
+ <input class="ft-filter-input" type=${t} placeholder=${k("toPlaceholder")}
3374
4121
  .value=${n.to ?? ""}
3375
4122
  @input=${(t) => this._applyDateFilter(e.key, t, "to")}
3376
4123
  @keydown=${(e) => {
@@ -3396,9 +4143,9 @@ var q = {
3396
4143
  @keydown=${(e) => {
3397
4144
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
3398
4145
  }}>
3399
- <option value="all">All</option>
3400
- <option value="true">\u2714 True</option>
3401
- <option value="false">\u2718 False</option>
4146
+ <option value="all">${k("all")}</option>
4147
+ <option value="true">\u2714 ${k("booleanTrue")}</option>
4148
+ <option value="false">\u2718 ${k("booleanFalse")}</option>
3402
4149
  </select>
3403
4150
  ${this._renderEmptyFilterRow(e.key)}
3404
4151
  `;
@@ -3818,39 +4565,39 @@ var q = {
3818
4565
  e.key === "Enter" && e.target instanceof HTMLInputElement && e.target.classList.contains("ft-find-input") && (e.shiftKey ? this._findPrev() : this._findNext());
3819
4566
  }}>
3820
4567
  <div class="ft-find-row">
3821
- <input class="ft-find-input" type="text" placeholder="Find..."
4568
+ <input class="ft-find-input" type="text" placeholder=${k("findPlaceholder")}
3822
4569
  .value=${t}
3823
4570
  @input=${(e) => {
3824
4571
  this._findState.query = e.target.value, this._findSearch();
3825
4572
  }}>
3826
4573
  <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) => {
4574
+ <button @click=${() => this._findPrev()} title=${k("findPrevious")}>◀</button>
4575
+ <button @click=${() => this._findNext()} title=${k("findNext")}>▶</button>
4576
+ <label title=${k("matchCase")}><input type="checkbox" ?checked=${r} @change=${(e) => {
3830
4577
  this._findState.matchCase = e.target.checked, this._findSearch();
3831
4578
  }}> Aa</label>
3832
- <label title="Whole cell"><input type="checkbox" ?checked=${a} @change=${(e) => {
4579
+ <label title=${k("wholeCell")}><input type="checkbox" ?checked=${a} @change=${(e) => {
3833
4580
  this._findState.wholeCell = e.target.checked, this._findSearch();
3834
4581
  }}> [ ]</label>
3835
- <button @click=${() => this._closeFindPanel()} title="Close (Escape)">✕</button>
4582
+ <button @click=${() => this._closeFindPanel()} title=${k("closeFind")}>✕</button>
3836
4583
  </div>
3837
4584
  ${e === "replace" ? i`
3838
4585
  <div class="ft-find-row">
3839
- <input class="ft-find-replace-input" type="text" placeholder="Replace with..."
4586
+ <input class="ft-find-replace-input" type="text" placeholder=${k("replaceWithPlaceholder")}
3840
4587
  .value=${n}
3841
4588
  @input=${(e) => {
3842
4589
  this._findState.replaceWith = e.target.value;
3843
4590
  }}>
3844
- <button @click=${() => this._replaceOne()} ?disabled=${c === 0}>Replace</button>
3845
- <button @click=${() => this._replaceAll()} ?disabled=${c === 0}>Replace All</button>
4591
+ <button @click=${() => this._replaceOne()} ?disabled=${c === 0}>${k("replace")}</button>
4592
+ <button @click=${() => this._replaceAll()} ?disabled=${c === 0}>${k("replaceAll")}</button>
3846
4593
  </div>
3847
4594
  ` : ""}
3848
4595
  </div>
3849
4596
  `;
3850
4597
  }
3851
4598
  render() {
3852
- 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>`;
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;
4600
+ if (e.length === 0) return i`${t}${n}<div class="ft-empty">${k("noColumnsDefined")}</div>`;
3854
4601
  let r = this.headerHeight, o = this._totalRowWidth, { start: s, end: c } = this.visibleColRange, l = [];
3855
4602
  for (let t = 0; t < e.length; t++) (e[t].pinned === "left" || e[t].pinned === "right") && (t < s || t >= c) && l.push(t);
3856
4603
  let u = 0, d = this._scrollLeft, f = this.selectable ? i`<div class="ft-checkbox-header"
@@ -4159,4 +4906,4 @@ K([s({ type: Array })], $.prototype, "columns", void 0), K([s({
4159
4906
  attribute: "max-undo-size"
4160
4907
  })], $.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
4908
  //#endregion
4162
- export { m as a, C as i, I as n, E as r, $ as t };
4909
+ export { O as a, A as i, H as n, m as o, M as r, $ as t };