@iyulab/flex-table 0.40.1 → 0.40.3

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.
@@ -1,8 +1,12 @@
1
1
  import { n as e, t } from "./sorting-CjfjRxwL.js";
2
2
  import { LitElement as n, css as r, html as i, nothing as a } from "lit";
3
3
  import { customElement as o, property as s, state as c } from "lit/decorators.js";
4
+ import { Locale as l } from "@iyulab/components/dist/utilities/Locale.js";
5
+ import { formatDate as u, formatNumber as d } from "@iyulab/components/dist/utilities/format.js";
6
+ import { decodeTsv as f, encodeTsv as p } from "@iyulab/components/dist/utilities/tsv.js";
7
+ import { isImeComposing as m } from "@iyulab/components/dist/utilities/keyboard.js";
4
8
  //#region src/styles/flex-table.styles.ts
5
- var l = r`
9
+ var h = r`
6
10
  /* --- Theme Variables (Light defaults) --- */
7
11
  :host {
8
12
  --ft-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
@@ -905,701 +909,29 @@ var l = r`
905
909
  outline: 2px solid var(--ft-find-color);
906
910
  outline-offset: -2px;
907
911
  }
908
- `, u = new Map(Object.entries(/* #__PURE__ */ Object.assign({
909
- "../assets/locales/ar.json": {
910
- valueMissing: "هذا الحقل مطلوب",
911
- badInput: "يرجى إدخال قيمة صالحة",
912
- typeMismatch: "يرجى إدخال قيمة بالتنسيق الصحيح",
913
- patternMismatch: "يرجى اتباع التنسيق المطلوب",
914
- rangeUnderflow: "يجب أن تكون القيمة {min} على الأقل",
915
- rangeOverflow: "يجب ألا تتجاوز القيمة {max}",
916
- stepMismatch: "يجب أن تكون القيمة من مضاعفات {step}",
917
- tooShort: "يجب أن تكون {min} على الأقل",
918
- tooLong: "يجب ألا تتجاوز {max}",
919
- increment: "زيادة القيمة",
920
- decrement: "إنقاص القيمة",
921
- clear: "مسح القيمة",
922
- today: "اليوم",
923
- time: "الوقت",
924
- showPassword: "إظهار كلمة المرور",
925
- hidePassword: "إخفاء كلمة المرور",
926
- previousSlide: "الشريحة السابقة",
927
- nextSlide: "الشريحة التالية",
928
- goToSlide: "الانتقال إلى الشريحة {n}",
929
- chooseDate: "اختر التاريخ",
930
- previousMonth: "الشهر السابق",
931
- nextMonth: "الشهر التالي",
932
- close: "إغلاق",
933
- copy: "نسخ",
934
- copied: "تم النسخ",
935
- chooseFile: "اختر ملفًا",
936
- noFileChosen: "لم يتم اختيار أي ملف",
937
- filesSelected: "تم اختيار {count} ملفات",
938
- resizePanels: "تغيير حجم اللوحات",
939
- search: "بحث",
940
- alertError: "خطأ",
941
- alertWarning: "تحذير",
942
- alertSuccess: "نجاح",
943
- alertInfo: "معلومات",
944
- alertNotice: "إشعار",
945
- alertMessage: "رسالة",
946
- remove: "إزالة",
947
- closeTab: "إغلاق علامة التبويب",
948
- breadcrumb: "مسار التنقل",
949
- confirm: "تأكيد",
950
- cancel: "إلغاء"
951
- },
952
- "../assets/locales/de.json": {
953
- valueMissing: "Dieses Feld ist erforderlich",
954
- badInput: "Bitte geben Sie einen gültigen Wert ein",
955
- typeMismatch: "Bitte geben Sie einen gültigen Wert ein",
956
- patternMismatch: "Bitte halten Sie sich an das angeforderte Format",
957
- rangeUnderflow: "Der Wert muss mindestens {min} betragen",
958
- rangeOverflow: "Der Wert darf höchstens {max} betragen",
959
- stepMismatch: "Der Wert muss ein Vielfaches von {step} sein",
960
- tooShort: "Muss mindestens {min} betragen",
961
- tooLong: "Darf höchstens {max} betragen",
962
- increment: "Wert erhöhen",
963
- decrement: "Wert verringern",
964
- clear: "Wert löschen",
965
- today: "Heute",
966
- time: "Uhrzeit",
967
- showPassword: "Passwort anzeigen",
968
- hidePassword: "Passwort verbergen",
969
- previousSlide: "Vorherige Folie",
970
- nextSlide: "Nächste Folie",
971
- goToSlide: "Zu Folie {n} wechseln",
972
- chooseDate: "Datum auswählen",
973
- previousMonth: "Vorheriger Monat",
974
- nextMonth: "Nächster Monat",
975
- close: "Schließen",
976
- copy: "Kopieren",
977
- copied: "Kopiert",
978
- chooseFile: "Datei auswählen",
979
- noFileChosen: "Keine Datei ausgewählt",
980
- filesSelected: "{count} Dateien ausgewählt",
981
- resizePanels: "Bereichsgröße ändern",
982
- search: "Suchen",
983
- alertError: "Fehler",
984
- alertWarning: "Warnung",
985
- alertSuccess: "Erfolg",
986
- alertInfo: "Information",
987
- alertNotice: "Hinweis",
988
- alertMessage: "Nachricht",
989
- remove: "Entfernen",
990
- closeTab: "Tab schließen",
991
- breadcrumb: "Navigationspfad",
992
- confirm: "Bestätigen",
993
- cancel: "Abbrechen"
994
- },
995
- "../assets/locales/en.json": {
996
- valueMissing: "This field is required",
997
- badInput: "Please enter a valid value",
998
- typeMismatch: "Please enter a valid value",
999
- patternMismatch: "Please match the requested format",
1000
- rangeUnderflow: "Value must be at least {min}",
1001
- rangeOverflow: "Value must be at most {max}",
1002
- stepMismatch: "Value must be a multiple of {step}",
1003
- tooShort: "Must be at least {min}",
1004
- tooLong: "Must be at most {max}",
1005
- increment: "Increase value",
1006
- decrement: "Decrease value",
1007
- clear: "Clear value",
1008
- today: "Today",
1009
- time: "Time",
1010
- showPassword: "Show password",
1011
- hidePassword: "Hide password",
1012
- previousSlide: "Previous slide",
1013
- nextSlide: "Next slide",
1014
- goToSlide: "Go to slide {n}",
1015
- chooseDate: "Choose date",
1016
- previousMonth: "Previous month",
1017
- nextMonth: "Next month",
1018
- close: "Close",
1019
- copy: "Copy",
1020
- copied: "Copied",
1021
- chooseFile: "Choose file",
1022
- noFileChosen: "No file chosen",
1023
- filesSelected: "{count} files selected",
1024
- resizePanels: "Resize panels",
1025
- search: "Search",
1026
- alertError: "Error",
1027
- alertWarning: "Warning",
1028
- alertSuccess: "Success",
1029
- alertInfo: "Information",
1030
- alertNotice: "Notice",
1031
- alertMessage: "Message",
1032
- remove: "Remove",
1033
- closeTab: "Close tab",
1034
- breadcrumb: "Breadcrumb",
1035
- confirm: "Confirm",
1036
- cancel: "Cancel"
1037
- },
1038
- "../assets/locales/es.json": {
1039
- valueMissing: "Este campo es obligatorio",
1040
- badInput: "Introduzca un valor válido",
1041
- typeMismatch: "Introduzca un valor con el formato correcto",
1042
- patternMismatch: "Ajuste el valor al formato solicitado",
1043
- rangeUnderflow: "El valor debe ser como mínimo {min}",
1044
- rangeOverflow: "El valor debe ser como máximo {max}",
1045
- stepMismatch: "El valor debe ser múltiplo de {step}",
1046
- tooShort: "Debe ser como mínimo {min}",
1047
- tooLong: "Debe ser como máximo {max}",
1048
- increment: "Aumentar valor",
1049
- decrement: "Disminuir valor",
1050
- clear: "Borrar valor",
1051
- today: "Hoy",
1052
- time: "Hora",
1053
- showPassword: "Mostrar contraseña",
1054
- hidePassword: "Ocultar contraseña",
1055
- previousSlide: "Diapositiva anterior",
1056
- nextSlide: "Siguiente diapositiva",
1057
- goToSlide: "Ir a la diapositiva {n}",
1058
- chooseDate: "Elegir fecha",
1059
- previousMonth: "Mes anterior",
1060
- nextMonth: "Mes siguiente",
1061
- close: "Cerrar",
1062
- copy: "Copiar",
1063
- copied: "Copiado",
1064
- chooseFile: "Elegir archivo",
1065
- noFileChosen: "Ningún archivo elegido",
1066
- filesSelected: "{count} archivos seleccionados",
1067
- resizePanels: "Cambiar el tamaño de los paneles",
1068
- search: "Buscar",
1069
- alertError: "Error",
1070
- alertWarning: "Advertencia",
1071
- alertSuccess: "Éxito",
1072
- alertInfo: "Información",
1073
- alertNotice: "Aviso",
1074
- alertMessage: "Mensaje",
1075
- remove: "Quitar",
1076
- closeTab: "Cerrar pestaña",
1077
- breadcrumb: "Ruta de navegación",
1078
- confirm: "Confirmar",
1079
- cancel: "Cancelar"
1080
- },
1081
- "../assets/locales/fr.json": {
1082
- valueMissing: "Ce champ est obligatoire",
1083
- badInput: "Veuillez saisir une valeur valide",
1084
- typeMismatch: "Veuillez saisir une valeur au format correct",
1085
- patternMismatch: "Veuillez respecter le format demandé",
1086
- rangeUnderflow: "La valeur doit être supérieure ou égale à {min}",
1087
- rangeOverflow: "La valeur doit être inférieure ou égale à {max}",
1088
- stepMismatch: "La valeur doit être un multiple de {step}",
1089
- tooShort: "Doit être au moins {min}",
1090
- tooLong: "Doit être au plus {max}",
1091
- increment: "Augmenter la valeur",
1092
- decrement: "Diminuer la valeur",
1093
- clear: "Effacer la valeur",
1094
- today: "Aujourd’hui",
1095
- time: "Heure",
1096
- showPassword: "Afficher le mot de passe",
1097
- hidePassword: "Masquer le mot de passe",
1098
- previousSlide: "Diapositive précédente",
1099
- nextSlide: "Diapositive suivante",
1100
- goToSlide: "Aller à la diapositive {n}",
1101
- chooseDate: "Choisir une date",
1102
- previousMonth: "Mois précédent",
1103
- nextMonth: "Mois suivant",
1104
- close: "Fermer",
1105
- copy: "Copier",
1106
- copied: "Copié",
1107
- chooseFile: "Choisir un fichier",
1108
- noFileChosen: "Aucun fichier choisi",
1109
- filesSelected: "{count} fichiers sélectionnés",
1110
- resizePanels: "Redimensionner les panneaux",
1111
- search: "Rechercher",
1112
- alertError: "Erreur",
1113
- alertWarning: "Avertissement",
1114
- alertSuccess: "Succès",
1115
- alertInfo: "Information",
1116
- alertNotice: "Avis",
1117
- alertMessage: "Message",
1118
- remove: "Supprimer",
1119
- closeTab: "Fermer l'onglet",
1120
- breadcrumb: "Fil d'Ariane",
1121
- confirm: "Confirmer",
1122
- cancel: "Annuler"
1123
- },
1124
- "../assets/locales/id.json": {
1125
- valueMissing: "Kolom ini wajib diisi",
1126
- badInput: "Masukkan nilai yang valid",
1127
- typeMismatch: "Masukkan nilai dengan format yang benar",
1128
- patternMismatch: "Sesuaikan dengan format yang diminta",
1129
- rangeUnderflow: "Nilai harus minimal {min}",
1130
- rangeOverflow: "Nilai harus maksimal {max}",
1131
- stepMismatch: "Nilai harus kelipatan dari {step}",
1132
- tooShort: "Harus minimal {min}",
1133
- tooLong: "Harus maksimal {max}",
1134
- increment: "Tambah nilai",
1135
- decrement: "Kurangi nilai",
1136
- clear: "Hapus nilai",
1137
- today: "Hari ini",
1138
- time: "Waktu",
1139
- showPassword: "Tampilkan kata sandi",
1140
- hidePassword: "Sembunyikan kata sandi",
1141
- previousSlide: "Slide sebelumnya",
1142
- nextSlide: "Slide berikutnya",
1143
- goToSlide: "Buka slide {n}",
1144
- chooseDate: "Pilih tanggal",
1145
- previousMonth: "Bulan sebelumnya",
1146
- nextMonth: "Bulan berikutnya",
1147
- close: "Tutup",
1148
- copy: "Salin",
1149
- copied: "Disalin",
1150
- chooseFile: "Pilih berkas",
1151
- noFileChosen: "Tidak ada berkas dipilih",
1152
- filesSelected: "{count} berkas dipilih",
1153
- resizePanels: "Ubah ukuran panel",
1154
- search: "Cari",
1155
- alertError: "Kesalahan",
1156
- alertWarning: "Peringatan",
1157
- alertSuccess: "Berhasil",
1158
- alertInfo: "Informasi",
1159
- alertNotice: "Pemberitahuan",
1160
- alertMessage: "Pesan",
1161
- remove: "Hapus",
1162
- closeTab: "Tutup tab",
1163
- breadcrumb: "Navigasi remah roti",
1164
- confirm: "Konfirmasi",
1165
- cancel: "Batal"
1166
- },
1167
- "../assets/locales/ja.json": {
1168
- valueMissing: "この項目は必須です",
1169
- badInput: "有効な値を入力してください",
1170
- typeMismatch: "正しい形式の値を入力してください",
1171
- patternMismatch: "指定された形式で入力してください",
1172
- rangeUnderflow: "値は{min}以上である必要があります",
1173
- rangeOverflow: "値は{max}以下である必要があります",
1174
- stepMismatch: "値は{step}の倍数である必要があります",
1175
- tooShort: "{min}以上である必要があります",
1176
- tooLong: "{max}以下である必要があります",
1177
- increment: "値を増やす",
1178
- decrement: "値を減らす",
1179
- clear: "値をクリア",
1180
- today: "今日",
1181
- time: "時刻",
1182
- showPassword: "パスワードを表示",
1183
- hidePassword: "パスワードを隠す",
1184
- previousSlide: "前のスライド",
1185
- nextSlide: "次のスライド",
1186
- goToSlide: "スライド{n}に移動",
1187
- chooseDate: "日付を選択",
1188
- previousMonth: "前月",
1189
- nextMonth: "翌月",
1190
- close: "閉じる",
1191
- copy: "コピー",
1192
- copied: "コピーしました",
1193
- chooseFile: "ファイルを選択",
1194
- noFileChosen: "ファイルが選択されていません",
1195
- filesSelected: "{count}個のファイルを選択しました",
1196
- resizePanels: "パネルのサイズ変更",
1197
- search: "検索",
1198
- alertError: "エラー",
1199
- alertWarning: "警告",
1200
- alertSuccess: "完了",
1201
- alertInfo: "お知らせ",
1202
- alertNotice: "通知",
1203
- alertMessage: "メッセージ",
1204
- remove: "削除",
1205
- closeTab: "タブを閉じる",
1206
- breadcrumb: "パンくずリスト",
1207
- confirm: "OK",
1208
- cancel: "キャンセル"
1209
- },
1210
- "../assets/locales/ko.json": {
1211
- valueMissing: "필수 항목입니다",
1212
- badInput: "올바른 값을 입력하세요",
1213
- typeMismatch: "올바른 형식의 값을 입력하세요",
1214
- patternMismatch: "요청된 형식에 맞게 입력하세요",
1215
- rangeUnderflow: "값은 {min} 이상이어야 합니다",
1216
- rangeOverflow: "값은 {max} 이하여야 합니다",
1217
- stepMismatch: "값은 {step}의 배수여야 합니다",
1218
- tooShort: "최소 {min} 이상이어야 합니다",
1219
- tooLong: "최대 {max} 이하여야 합니다",
1220
- increment: "값 증가",
1221
- decrement: "값 감소",
1222
- clear: "값 지우기",
1223
- today: "오늘",
1224
- time: "시간",
1225
- showPassword: "비밀번호 표시",
1226
- hidePassword: "비밀번호 숨기기",
1227
- previousSlide: "이전 슬라이드",
1228
- nextSlide: "다음 슬라이드",
1229
- goToSlide: "{n}번 슬라이드로 이동",
1230
- chooseDate: "날짜 선택",
1231
- previousMonth: "이전 달",
1232
- nextMonth: "다음 달",
1233
- close: "닫기",
1234
- copy: "복사",
1235
- copied: "복사됨",
1236
- chooseFile: "파일 선택",
1237
- noFileChosen: "선택된 파일 없음",
1238
- filesSelected: "{count}개 파일 선택됨",
1239
- resizePanels: "패널 크기 조절",
1240
- search: "검색",
1241
- alertError: "오류",
1242
- alertWarning: "경고",
1243
- alertSuccess: "완료",
1244
- alertInfo: "안내",
1245
- alertNotice: "알림",
1246
- alertMessage: "메시지",
1247
- remove: "제거",
1248
- closeTab: "탭 닫기",
1249
- breadcrumb: "탐색 경로",
1250
- confirm: "확인",
1251
- cancel: "취소"
1252
- },
1253
- "../assets/locales/pt-BR.json": {
1254
- valueMissing: "Este campo é obrigatório",
1255
- badInput: "Insira um valor válido",
1256
- typeMismatch: "Insira um valor no formato correto",
1257
- patternMismatch: "Siga o formato solicitado",
1258
- rangeUnderflow: "O valor deve ser no mínimo {min}",
1259
- rangeOverflow: "O valor deve ser no máximo {max}",
1260
- stepMismatch: "O valor deve ser um múltiplo de {step}",
1261
- tooShort: "Deve ser no mínimo {min}",
1262
- tooLong: "Deve ser no máximo {max}",
1263
- increment: "Aumentar valor",
1264
- decrement: "Diminuir valor",
1265
- clear: "Limpar valor",
1266
- today: "Hoje",
1267
- time: "Hora",
1268
- showPassword: "Mostrar senha",
1269
- hidePassword: "Ocultar senha",
1270
- previousSlide: "Slide anterior",
1271
- nextSlide: "Próximo slide",
1272
- goToSlide: "Ir para o slide {n}",
1273
- chooseDate: "Escolher data",
1274
- previousMonth: "Mês anterior",
1275
- nextMonth: "Próximo mês",
1276
- close: "Fechar",
1277
- copy: "Copiar",
1278
- copied: "Copiado",
1279
- chooseFile: "Escolher arquivo",
1280
- noFileChosen: "Nenhum arquivo escolhido",
1281
- filesSelected: "{count} arquivos selecionados",
1282
- resizePanels: "Redimensionar painéis",
1283
- search: "Pesquisar",
1284
- alertError: "Erro",
1285
- alertWarning: "Aviso",
1286
- alertSuccess: "Sucesso",
1287
- alertInfo: "Informação",
1288
- alertNotice: "Nota",
1289
- alertMessage: "Mensagem",
1290
- remove: "Remover",
1291
- closeTab: "Fechar aba",
1292
- breadcrumb: "Trilha de navegação",
1293
- confirm: "Confirmar",
1294
- cancel: "Cancelar"
1295
- },
1296
- "../assets/locales/ru.json": {
1297
- valueMissing: "Это поле обязательно для заполнения",
1298
- badInput: "Введите допустимое значение",
1299
- typeMismatch: "Введите значение в правильном формате",
1300
- patternMismatch: "Введите значение в требуемом формате",
1301
- rangeUnderflow: "Значение должно быть не менее {min}",
1302
- rangeOverflow: "Значение должно быть не более {max}",
1303
- stepMismatch: "Значение должно быть кратно {step}",
1304
- tooShort: "Должно быть не менее {min}",
1305
- tooLong: "Должно быть не более {max}",
1306
- increment: "Увеличить значение",
1307
- decrement: "Уменьшить значение",
1308
- clear: "Очистить значение",
1309
- today: "Сегодня",
1310
- time: "Время",
1311
- showPassword: "Показать пароль",
1312
- hidePassword: "Скрыть пароль",
1313
- previousSlide: "Предыдущий слайд",
1314
- nextSlide: "Следующий слайд",
1315
- goToSlide: "Перейти к слайду {n}",
1316
- chooseDate: "Выбрать дату",
1317
- previousMonth: "Предыдущий месяц",
1318
- nextMonth: "Следующий месяц",
1319
- close: "Закрыть",
1320
- copy: "Копировать",
1321
- copied: "Скопировано",
1322
- chooseFile: "Выбрать файл",
1323
- noFileChosen: "Файл не выбран",
1324
- filesSelected: "Выбрано файлов: {count}",
1325
- resizePanels: "Изменить размер панелей",
1326
- search: "Поиск",
1327
- alertError: "Ошибка",
1328
- alertWarning: "Предупреждение",
1329
- alertSuccess: "Успешно",
1330
- alertInfo: "Информация",
1331
- alertNotice: "Уведомление",
1332
- alertMessage: "Сообщение",
1333
- remove: "Удалить",
1334
- closeTab: "Закрыть вкладку",
1335
- breadcrumb: "Навигационная цепочка",
1336
- confirm: "Подтвердить",
1337
- cancel: "Отмена"
1338
- },
1339
- "../assets/locales/th.json": {
1340
- valueMissing: "จำเป็นต้องกรอกข้อมูลนี้",
1341
- badInput: "กรุณากรอกค่าที่ถูกต้อง",
1342
- typeMismatch: "กรุณากรอกค่าให้ถูกรูปแบบ",
1343
- patternMismatch: "กรุณากรอกให้ตรงตามรูปแบบที่กำหนด",
1344
- rangeUnderflow: "ค่าต้องมากกว่าหรือเท่ากับ {min}",
1345
- rangeOverflow: "ค่าต้องน้อยกว่าหรือเท่ากับ {max}",
1346
- stepMismatch: "ค่าต้องเป็นจำนวนทวีคูณของ {step}",
1347
- tooShort: "ต้องมีอย่างน้อย {min}",
1348
- tooLong: "ต้องไม่เกิน {max}",
1349
- increment: "เพิ่มค่า",
1350
- decrement: "ลดค่า",
1351
- clear: "ล้างค่า",
1352
- today: "วันนี้",
1353
- time: "เวลา",
1354
- showPassword: "แสดงรหัสผ่าน",
1355
- hidePassword: "ซ่อนรหัสผ่าน",
1356
- previousSlide: "สไลด์ก่อนหน้า",
1357
- nextSlide: "สไลด์ถัดไป",
1358
- goToSlide: "ไปที่สไลด์ที่ {n}",
1359
- chooseDate: "เลือกวันที่",
1360
- previousMonth: "เดือนก่อนหน้า",
1361
- nextMonth: "เดือนถัดไป",
1362
- close: "ปิด",
1363
- copy: "คัดลอก",
1364
- copied: "คัดลอกแล้ว",
1365
- chooseFile: "เลือกไฟล์",
1366
- noFileChosen: "ยังไม่ได้เลือกไฟล์",
1367
- filesSelected: "เลือกแล้ว {count} ไฟล์",
1368
- resizePanels: "ปรับขนาดแผง",
1369
- search: "ค้นหา",
1370
- alertError: "ข้อผิดพลาด",
1371
- alertWarning: "คำเตือน",
1372
- alertSuccess: "สำเร็จ",
1373
- alertInfo: "ข้อมูล",
1374
- alertNotice: "ประกาศ",
1375
- alertMessage: "ข้อความ",
1376
- remove: "ลบ",
1377
- closeTab: "ปิดแท็บ",
1378
- breadcrumb: "เส้นทางการนำทาง",
1379
- confirm: "ยืนยัน",
1380
- cancel: "ยกเลิก"
1381
- },
1382
- "../assets/locales/vi.json": {
1383
- valueMissing: "Trường này là bắt buộc",
1384
- badInput: "Vui lòng nhập giá trị hợp lệ",
1385
- typeMismatch: "Vui lòng nhập giá trị đúng định dạng",
1386
- patternMismatch: "Vui lòng nhập đúng định dạng yêu cầu",
1387
- rangeUnderflow: "Giá trị phải lớn hơn hoặc bằng {min}",
1388
- rangeOverflow: "Giá trị phải nhỏ hơn hoặc bằng {max}",
1389
- stepMismatch: "Giá trị phải là bội số của {step}",
1390
- tooShort: "Phải lớn hơn hoặc bằng {min}",
1391
- tooLong: "Phải nhỏ hơn hoặc bằng {max}",
1392
- increment: "Tăng giá trị",
1393
- decrement: "Giảm giá trị",
1394
- clear: "Xóa giá trị",
1395
- today: "Hôm nay",
1396
- time: "Giờ",
1397
- showPassword: "Hiện mật khẩu",
1398
- hidePassword: "Ẩn mật khẩu",
1399
- previousSlide: "Slide trước",
1400
- nextSlide: "Slide sau",
1401
- goToSlide: "Đi đến slide {n}",
1402
- chooseDate: "Chọn ngày",
1403
- previousMonth: "Tháng trước",
1404
- nextMonth: "Tháng sau",
1405
- close: "Đóng",
1406
- copy: "Sao chép",
1407
- copied: "Đã sao chép",
1408
- chooseFile: "Chọn tệp",
1409
- noFileChosen: "Chưa chọn tệp nào",
1410
- filesSelected: "Đã chọn {count} tệp",
1411
- resizePanels: "Thay đổi kích thước bảng",
1412
- search: "Tìm kiếm",
1413
- alertError: "Lỗi",
1414
- alertWarning: "Cảnh báo",
1415
- alertSuccess: "Thành công",
1416
- alertInfo: "Thông tin",
1417
- alertNotice: "Lưu ý",
1418
- alertMessage: "Thông báo",
1419
- remove: "Xóa",
1420
- closeTab: "Đóng tab",
1421
- breadcrumb: "Đường dẫn điều hướng",
1422
- confirm: "Xác nhận",
1423
- cancel: "Hủy"
1424
- },
1425
- "../assets/locales/zh-CN.json": {
1426
- valueMissing: "此项为必填项",
1427
- badInput: "请输入有效的值",
1428
- typeMismatch: "请输入正确格式的值",
1429
- patternMismatch: "请按照要求的格式输入",
1430
- rangeUnderflow: "值必须大于或等于{min}",
1431
- rangeOverflow: "值必须小于或等于{max}",
1432
- stepMismatch: "值必须是{step}的倍数",
1433
- tooShort: "至少需要{min}",
1434
- tooLong: "最多不能超过{max}",
1435
- increment: "增加值",
1436
- decrement: "减少值",
1437
- clear: "清除值",
1438
- today: "今天",
1439
- time: "时间",
1440
- showPassword: "显示密码",
1441
- hidePassword: "隐藏密码",
1442
- previousSlide: "上一张幻灯片",
1443
- nextSlide: "下一张幻灯片",
1444
- goToSlide: "转到幻灯片{n}",
1445
- chooseDate: "选择日期",
1446
- previousMonth: "上个月",
1447
- nextMonth: "下个月",
1448
- close: "关闭",
1449
- copy: "复制",
1450
- copied: "已复制",
1451
- chooseFile: "选择文件",
1452
- noFileChosen: "未选择文件",
1453
- filesSelected: "已选择{count}个文件",
1454
- resizePanels: "调整面板大小",
1455
- search: "搜索",
1456
- alertError: "错误",
1457
- alertWarning: "警告",
1458
- alertSuccess: "成功",
1459
- alertInfo: "信息",
1460
- alertNotice: "提示",
1461
- alertMessage: "消息",
1462
- remove: "移除",
1463
- closeTab: "关闭标签页",
1464
- breadcrumb: "面包屑导航",
1465
- confirm: "确定",
1466
- cancel: "取消"
1467
- },
1468
- "../assets/locales/zh-TW.json": {
1469
- valueMissing: "此欄位為必填",
1470
- badInput: "請輸入有效的值",
1471
- typeMismatch: "請輸入正確格式的值",
1472
- patternMismatch: "請依照要求的格式輸入",
1473
- rangeUnderflow: "值必須大於或等於{min}",
1474
- rangeOverflow: "值必須小於或等於{max}",
1475
- stepMismatch: "值必須是{step}的倍數",
1476
- tooShort: "至少需要{min}",
1477
- tooLong: "最多不能超過{max}",
1478
- increment: "增加值",
1479
- decrement: "減少值",
1480
- clear: "清除值",
1481
- today: "今天",
1482
- time: "時間",
1483
- showPassword: "顯示密碼",
1484
- hidePassword: "隱藏密碼",
1485
- previousSlide: "上一張投影片",
1486
- nextSlide: "下一張投影片",
1487
- goToSlide: "前往投影片{n}",
1488
- chooseDate: "選擇日期",
1489
- previousMonth: "上個月",
1490
- nextMonth: "下個月",
1491
- close: "關閉",
1492
- copy: "複製",
1493
- copied: "已複製",
1494
- chooseFile: "選擇檔案",
1495
- noFileChosen: "未選擇檔案",
1496
- filesSelected: "已選擇{count}個檔案",
1497
- resizePanels: "調整面板大小",
1498
- search: "搜尋",
1499
- alertError: "錯誤",
1500
- alertWarning: "警告",
1501
- alertSuccess: "成功",
1502
- alertInfo: "資訊",
1503
- alertNotice: "提示",
1504
- alertMessage: "訊息",
1505
- remove: "移除",
1506
- closeTab: "關閉分頁",
1507
- breadcrumb: "麵包屑導覽",
1508
- confirm: "確定",
1509
- cancel: "取消"
1510
- }
1511
- })).map(([e, t]) => [(e.split("/").pop()?.replace(".json", "") || "").toLowerCase(), t])), d = /* @__PURE__ */ new Map();
1512
- function f() {
1513
- return typeof document < "u" && document.documentElement?.lang ? document.documentElement.lang : typeof window < "u" && typeof navigator < "u" && navigator.language ? navigator.language : "en";
1514
- }
1515
- var p = f(), m = {
1516
- "zh-hant": "zh-tw",
1517
- "zh-hk": "zh-tw",
1518
- "zh-mo": "zh-tw",
1519
- zh: "zh-cn",
1520
- pt: "pt-br"
1521
- };
1522
- function h(e) {
1523
- let t = e.toLowerCase().split("-"), n = t.map((e, n) => t.slice(0, t.length - n).join("-")), r = n.find((e) => e in m), i = r ? [
1524
- ...n,
1525
- m[r],
1526
- "en"
1527
- ] : [...n, "en"];
1528
- return [...new Set(i)];
1529
- }
1530
- function g(e, t) {
1531
- return t ? e.replace(/\{(\w+)\}/g, (e, n) => t[n] == null ? `{${n}}` : String(t[n])) : e;
1532
- }
1533
- function _(e, t) {
1534
- for (let n of h(e)) {
1535
- let e = d.get(n)?.[t] ?? u.get(n)?.[t];
1536
- if (e) return e;
1537
- }
1538
- return u.get("en")[t];
1539
- }
1540
- var v = /* @__PURE__ */ new Map(), y = class {
1541
- constructor() {}
1542
- static set(e) {
1543
- p = e;
1544
- }
1545
- static get() {
1546
- return p;
1547
- }
1548
- static register(e, t) {
1549
- let n = e.toLowerCase(), r = d.get(n) ?? u.get(n) ?? u.get("en");
1550
- d.set(n, {
1551
- ...r,
1552
- ...t
1553
- });
1554
- }
1555
- static getValue(e, t) {
1556
- return g(_(p, e), t);
1557
- }
1558
- static namespace(e) {
1559
- let t = (t, n, r) => {
1560
- let i = v.get(e);
1561
- for (let e of h(t || p)) {
1562
- let t = i?.get(e)?.[n];
1563
- if (t) return g(t, r);
1564
- }
1565
- return n;
1566
- };
1567
- return {
1568
- name: e,
1569
- register(t, n) {
1570
- let r = v.get(e) ?? /* @__PURE__ */ new Map(), i = t.toLowerCase();
1571
- r.set(i, {
1572
- ...r.get(i),
1573
- ...n
1574
- }), v.set(e, r);
1575
- },
1576
- text: (e, n) => t(void 0, e, n),
1577
- textIn: t
1578
- };
1579
- }
1580
- };
912
+ `;
1581
913
  //#endregion
1582
914
  //#region src/renderers/format.ts
1583
- function b(e, t) {
1584
- return e == null ? "" : typeof t == "function" ? t(e) : x(t) ? C(e, t) : S(e, t);
915
+ function g(e, t) {
916
+ return e == null ? "" : typeof t == "function" ? t(e) : _(t) ? y(e, t) : v(e, t);
1585
917
  }
1586
- function x(e) {
918
+ function _(e) {
1587
919
  return /[yMdHhms]/.test(e);
1588
920
  }
1589
- function S(e, t) {
921
+ function v(e, t) {
1590
922
  let n = typeof e == "number" ? e : Number(e);
1591
923
  if (isNaN(n)) return String(e);
1592
- let r = t.endsWith("%"), i = t.match(/^([^#0.,%]+)/), a = i ? i[1] : "", o = t.replace(/^[^#0.,%]+/, "").replace(/%$/, ""), s = o.match(/\.([0#]+)$/), c = s ? s[1].length : 0, l = {
924
+ let r = t.endsWith("%"), i = t.match(/^([^#0.,%]+)/), a = i ? i[1] : "", o = t.replace(/^[^#0.,%]+/, "").replace(/%$/, ""), s = o.match(/\.([0#]+)$/), c = s ? s[1].length : 0, u = {
1593
925
  minimumFractionDigits: c,
1594
926
  maximumFractionDigits: c,
1595
927
  useGrouping: o.includes(",")
1596
- }, u;
1597
- return r ? u = new Intl.NumberFormat(y.get(), {
1598
- ...l,
928
+ }, d;
929
+ return r ? d = new Intl.NumberFormat(l.get(), {
930
+ ...u,
1599
931
  style: "percent"
1600
- }).format(n) : (u = new Intl.NumberFormat(y.get(), l).format(n), a && (u = a + u)), u + "";
932
+ }).format(n) : (d = new Intl.NumberFormat(l.get(), u).format(n), a && (d = a + d)), d + "";
1601
933
  }
1602
- function C(e, t) {
934
+ function y(e, t) {
1603
935
  let n;
1604
936
  if (e instanceof Date) n = e;
1605
937
  else if (typeof e == "string" || typeof e == "number") n = new Date(e);
@@ -1609,43 +941,27 @@ function C(e, t) {
1609
941
  return t.replace("yyyy", r).replace("yy", i).replace("MM", a).replace("dd", o).replace("HH", s).replace("hh", c).replace("mm", l).replace("ss", u);
1610
942
  }
1611
943
  //#endregion
1612
- //#region node_modules/@iyulab/components/dist/utilities/format.js
1613
- function w(e) {
1614
- let [t, n, r] = e.split("-").map(Number);
1615
- return Number.isNaN(t) || Number.isNaN(n) || Number.isNaN(r) ? new Date(e) : new Date(t, n - 1, r);
1616
- }
1617
- function T(e) {
1618
- return typeof e == "string" ? w(e) : e;
1619
- }
1620
- function E(e, t, n) {
1621
- return new Intl.NumberFormat(n ?? y.get(), t).format(e);
1622
- }
1623
- function D(e, t, n) {
1624
- let r = T(e);
1625
- return Number.isNaN(r.getTime()) ? String(e) : new Intl.DateTimeFormat(n ?? y.get(), t).format(r);
1626
- }
1627
- //#endregion
1628
944
  //#region src/renderers/cell-renderer.ts
1629
- function O(e, t, n) {
1630
- return n.render ? n.render(e, t, n) : n.format ? typeof n.format == "function" ? n.format(e, t, n) : b(e, n.format) : ee(e, n);
945
+ function b(e, t, n) {
946
+ return n.render ? n.render(e, t, n) : n.format ? typeof n.format == "function" ? n.format(e, t, n) : g(e, n.format) : x(e, n);
1631
947
  }
1632
- function ee(e, t) {
948
+ function x(e, t) {
1633
949
  if (e == null) return "";
1634
950
  switch (t.type) {
1635
- case "number": return re(e);
951
+ case "number": return w(e);
1636
952
  case "boolean": return i`<span class="ft-bool">${e ? "✔" : ""}</span>`;
1637
- case "date": return ie(e);
1638
- case "datetime": return ae(e);
1639
- case "select": return te(e, t);
953
+ case "date": return T(e);
954
+ case "datetime": return E(e);
955
+ case "select": return S(e, t);
1640
956
  default: return String(e);
1641
957
  }
1642
958
  }
1643
- function te(e, t) {
959
+ function S(e, t) {
1644
960
  if (!t.options || t.options.length === 0 || typeof t.options[0] == "string") return e == null ? "" : String(e);
1645
961
  let n = t.options.find((t) => t.value === e);
1646
962
  return n ? n.label : e == null ? "" : String(e);
1647
963
  }
1648
- var ne = {
964
+ var C = {
1649
965
  year: "numeric",
1650
966
  month: "numeric",
1651
967
  day: "numeric",
@@ -1653,19 +969,19 @@ var ne = {
1653
969
  minute: "numeric",
1654
970
  second: "numeric"
1655
971
  };
1656
- function re(e) {
1657
- return typeof e == "number" ? Number.isInteger(e) ? E(e) : E(e, { minimumFractionDigits: 1 }) : String(e);
972
+ function w(e) {
973
+ return typeof e == "number" ? Number.isInteger(e) ? d(e) : d(e, { minimumFractionDigits: 1 }) : String(e);
1658
974
  }
1659
- function ie(e) {
1660
- return e instanceof Date || typeof e == "string" ? D(e) : String(e);
975
+ function T(e) {
976
+ return e instanceof Date || typeof e == "string" ? u(e) : String(e);
1661
977
  }
1662
- function ae(e) {
1663
- return e instanceof Date || typeof e == "string" ? D(e, ne) : String(e);
978
+ function E(e) {
979
+ return e instanceof Date || typeof e == "string" ? u(e, C) : String(e);
1664
980
  }
1665
981
  //#endregion
1666
982
  //#region src/locale.ts
1667
- var k = y.namespace("flex-table");
1668
- k.register("en", {
983
+ var D = l.namespace("flex-table");
984
+ D.register("en", {
1669
985
  showHiddenColumns: "Show hidden column(s)",
1670
986
  columnMenu: "Column menu",
1671
987
  cellActions: "Cell actions",
@@ -1718,7 +1034,7 @@ k.register("en", {
1718
1034
  booleanTrue: "True",
1719
1035
  booleanFalse: "False",
1720
1036
  dropFileToImport: "Drop file to import (.xlsx / .csv)"
1721
- }), k.register("ko", {
1037
+ }), D.register("ko", {
1722
1038
  showHiddenColumns: "숨긴 열 보기",
1723
1039
  columnMenu: "열 메뉴",
1724
1040
  cellActions: "셀 작업",
@@ -1772,10 +1088,10 @@ k.register("en", {
1772
1088
  booleanFalse: "거짓",
1773
1089
  dropFileToImport: "가져올 파일을 놓으세요 (.xlsx / .csv)"
1774
1090
  });
1775
- var A = (e, t) => k.text(e, t);
1091
+ var O = (e, t) => D.text(e, t);
1776
1092
  //#endregion
1777
1093
  //#region src/core/selection.ts
1778
- function oe(e) {
1094
+ function ee(e) {
1779
1095
  return {
1780
1096
  startRow: Math.min(e.startRow, e.endRow),
1781
1097
  startCol: Math.min(e.startCol, e.endCol),
@@ -1783,7 +1099,7 @@ function oe(e) {
1783
1099
  endCol: Math.max(e.startCol, e.endCol)
1784
1100
  };
1785
1101
  }
1786
- var se = class {
1102
+ var te = class {
1787
1103
  constructor() {
1788
1104
  this.activeCell = null, this.rangeAnchor = null, this.range = null, this.extraRanges = [], this._rowCount = 0, this._colCount = 0;
1789
1105
  }
@@ -1810,7 +1126,7 @@ var se = class {
1810
1126
  return e < 0 || e >= this._rowCount || t < 0 || t >= this._colCount ? this.activeCell : (!this.rangeAnchor && this.activeCell && (this.rangeAnchor = { ...this.activeCell }), this.activeCell = {
1811
1127
  row: e,
1812
1128
  col: t
1813
- }, this.rangeAnchor && (this.range = oe({
1129
+ }, this.rangeAnchor && (this.range = ee({
1814
1130
  startRow: this.rangeAnchor.row,
1815
1131
  startCol: this.rangeAnchor.col,
1816
1132
  endRow: e,
@@ -1881,7 +1197,7 @@ var se = class {
1881
1197
  shiftMoveRight() {
1882
1198
  return this.activeCell ? this.setActiveWithRange(this.activeCell.row, this.activeCell.col + 1) : null;
1883
1199
  }
1884
- }, ce = class {
1200
+ }, ne = class {
1885
1201
  constructor() {
1886
1202
  this.current = null;
1887
1203
  }
@@ -1902,7 +1218,7 @@ var se = class {
1902
1218
  let e = this.current;
1903
1219
  return this.current = null, e;
1904
1220
  }
1905
- }, j = class {
1221
+ }, k = class {
1906
1222
  constructor() {
1907
1223
  this._selected = /* @__PURE__ */ new Set(), this._mode = "multi", this._rowCount = 0;
1908
1224
  }
@@ -1963,7 +1279,7 @@ var se = class {
1963
1279
  };
1964
1280
  //#endregion
1965
1281
  //#region src/core/filtering.ts
1966
- function le(e, t, n) {
1282
+ function re(e, t, n) {
1967
1283
  if (t.length === 0) return Array.from({ length: e.length }, (e, t) => t);
1968
1284
  let r = [];
1969
1285
  for (let i = 0; i < e.length; i++) {
@@ -1982,9 +1298,9 @@ function le(e, t, n) {
1982
1298
  }
1983
1299
  //#endregion
1984
1300
  //#region src/core/undo.ts
1985
- var ue = 100, M = class {
1301
+ var ie = 100, A = class {
1986
1302
  constructor() {
1987
- this._undoStack = [], this._redoStack = [], this._maxSize = ue;
1303
+ this._undoStack = [], this._redoStack = [], this._maxSize = ie;
1988
1304
  }
1989
1305
  get maxSize() {
1990
1306
  return this._maxSize;
@@ -2021,7 +1337,7 @@ var ue = 100, M = class {
2021
1337
  };
2022
1338
  //#endregion
2023
1339
  //#region src/clipboard/clipboard.ts
2024
- function de(e, t, n) {
1340
+ function ae(e, t, n) {
2025
1341
  let r = [];
2026
1342
  for (let i = n.startRow; i <= n.endRow; i++) {
2027
1343
  let a = e[i], o = [];
@@ -2029,41 +1345,11 @@ function de(e, t, n) {
2029
1345
  let n = a[t[e].key];
2030
1346
  o.push(n == null ? "" : String(n));
2031
1347
  }
2032
- r.push(o.join(" "));
2033
- }
2034
- return r.join("\n");
2035
- }
2036
- function N(e) {
2037
- let t = e.replace(/\r\n/g, "\n").replace(/\r/g, "\n"), n = [], r = [], i = 0, a = t.length;
2038
- for (; i <= a;) {
2039
- if (i === a) {
2040
- (r.length > 0 || n.length > 0) && n.push(r);
2041
- break;
2042
- }
2043
- if (t[i] === "\"") {
2044
- let e = "";
2045
- for (i++; i < a;) if (t[i] === "\"") {
2046
- if (i + 1 < a && t[i + 1] === "\"") e += "\"", i += 2;
2047
- else {
2048
- i++;
2049
- break;
2050
- }
2051
- } else e += t[i], i++;
2052
- r.push(e), i < a && t[i] === " " ? i++ : i < a && t[i] === "\n" && (n.push(r), r = [], i++);
2053
- } else {
2054
- let e = "";
2055
- for (; i < a && t[i] !== " " && t[i] !== "\n";) e += t[i], i++;
2056
- r.push(e), i < a && t[i] === " " ? i++ : i < a && t[i] === "\n" && (n.push(r), r = [], i++);
2057
- }
2058
- }
2059
- for (; n.length > 0;) {
2060
- let e = n[n.length - 1];
2061
- if (e.length === 0 || e.length === 1 && e[0] === "") n.pop();
2062
- else break;
1348
+ r.push(o);
2063
1349
  }
2064
- return n;
1350
+ return p(r);
2065
1351
  }
2066
- function P(e, t) {
1352
+ function j(e, t) {
2067
1353
  if (e === "") return null;
2068
1354
  switch (t.type) {
2069
1355
  case "number": {
@@ -2076,7 +1362,7 @@ function P(e, t) {
2076
1362
  }
2077
1363
  //#endregion
2078
1364
  //#region src/export/xlsx-writer.ts
2079
- var fe = (() => {
1365
+ var M = (() => {
2080
1366
  let e = /* @__PURE__ */ new Uint32Array(256);
2081
1367
  for (let t = 0; t < 256; t++) {
2082
1368
  let n = t;
@@ -2085,56 +1371,56 @@ var fe = (() => {
2085
1371
  }
2086
1372
  return e;
2087
1373
  })();
2088
- function pe(e) {
1374
+ function oe(e) {
2089
1375
  let t = 4294967295;
2090
- for (let n = 0; n < e.length; n++) t = fe[(t ^ e[n]) & 255] ^ t >>> 8;
1376
+ for (let n = 0; n < e.length; n++) t = M[(t ^ e[n]) & 255] ^ t >>> 8;
2091
1377
  return (t ^ 4294967295) >>> 0;
2092
1378
  }
2093
- var F = new TextEncoder();
2094
- function me(e) {
1379
+ var N = new TextEncoder();
1380
+ function se(e) {
2095
1381
  let t = [], n = [], r = 0;
2096
1382
  for (let i of e) {
2097
- let e = F.encode(i.name), a = pe(i.data), o = i.data.length, s = new ArrayBuffer(30 + e.length), c = new DataView(s);
1383
+ let e = N.encode(i.name), a = oe(i.data), o = i.data.length, s = new ArrayBuffer(30 + e.length), c = new DataView(s);
2098
1384
  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);
2099
1385
  let l = new ArrayBuffer(46 + e.length), u = new DataView(l);
2100
1386
  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;
2101
1387
  }
2102
- let i = I(n), a = /* @__PURE__ */ new ArrayBuffer(22), o = new DataView(a);
2103
- 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([
1388
+ let i = P(n), a = /* @__PURE__ */ new ArrayBuffer(22), o = new DataView(a);
1389
+ 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), P([
2104
1390
  ...t,
2105
1391
  i,
2106
1392
  new Uint8Array(a)
2107
1393
  ]);
2108
1394
  }
2109
- function I(e) {
1395
+ function P(e) {
2110
1396
  let t = e.reduce((e, t) => e + t.length, 0), n = new Uint8Array(t), r = 0;
2111
1397
  for (let t of e) n.set(t, r), r += t.length;
2112
1398
  return n;
2113
1399
  }
2114
- function L(e) {
1400
+ function F(e) {
2115
1401
  return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
2116
1402
  }
2117
- function he(e) {
1403
+ function ce(e) {
2118
1404
  let t = "";
2119
1405
  for (e++; e > 0;) t = String.fromCharCode(64 + (e % 26 || 26)) + t, e = Math.floor((e - 1) / 26);
2120
1406
  return t;
2121
1407
  }
2122
- function R(e, t) {
2123
- return he(t) + (e + 1);
1408
+ function I(e, t) {
1409
+ return ce(t) + (e + 1);
2124
1410
  }
2125
- function ge(e) {
1411
+ function le(e) {
2126
1412
  let t = Date.UTC(1899, 11, 30);
2127
1413
  return (e.getTime() - t) / 864e5;
2128
1414
  }
2129
- var _e = "<?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>", ve = "<?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>", ye = "<?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>", be = "<?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>", xe = "<?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>";
2130
- function Se(e, t) {
2131
- let n = [], r = t.map((e, t) => `<c r="${R(0, t)}" t="str" s="2"><v>${L(e.label)}</v></c>`);
1415
+ 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>", pe = "<?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>", L = "<?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>";
1416
+ function R(e, t) {
1417
+ let n = [], r = t.map((e, t) => `<c r="${I(0, t)}" t="str" s="2"><v>${F(e.label)}</v></c>`);
2132
1418
  return n.push(`<row r="1">${r.join("")}</row>`), e.forEach((e, r) => {
2133
1419
  let i = t.map((t, n) => {
2134
- let i = R(r + 1, n), a = e[t.key];
1420
+ let i = I(r + 1, n), a = e[t.key];
2135
1421
  if (a == null) return `<c r="${i}" t="str"><v></v></c>`;
2136
1422
  let o = t.type ?? "text";
2137
- 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>${ge(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>`;
1423
+ 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>${F(String(a))}</v></c>`;
2138
1424
  });
2139
1425
  n.push(`<row r="${r + 2}">${i.join("")}</row>`);
2140
1426
  }), `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
@@ -2142,55 +1428,55 @@ function Se(e, t) {
2142
1428
  <sheetData>${n.join("")}</sheetData>
2143
1429
  </worksheet>`;
2144
1430
  }
2145
- function Ce(e, t) {
2146
- let n = Se(e, t);
2147
- return me([
1431
+ function z(e, t) {
1432
+ let n = R(e, t);
1433
+ return se([
2148
1434
  {
2149
1435
  name: "[Content_Types].xml",
2150
- data: F.encode(_e)
1436
+ data: N.encode(ue)
2151
1437
  },
2152
1438
  {
2153
1439
  name: "_rels/.rels",
2154
- data: F.encode(ve)
1440
+ data: N.encode(de)
2155
1441
  },
2156
1442
  {
2157
1443
  name: "xl/workbook.xml",
2158
- data: F.encode(ye)
1444
+ data: N.encode(fe)
2159
1445
  },
2160
1446
  {
2161
1447
  name: "xl/_rels/workbook.xml.rels",
2162
- data: F.encode(be)
1448
+ data: N.encode(pe)
2163
1449
  },
2164
1450
  {
2165
1451
  name: "xl/worksheets/sheet1.xml",
2166
- data: F.encode(n)
1452
+ data: N.encode(n)
2167
1453
  },
2168
1454
  {
2169
1455
  name: "xl/styles.xml",
2170
- data: F.encode(xe)
1456
+ data: N.encode(L)
2171
1457
  }
2172
1458
  ]);
2173
1459
  }
2174
1460
  //#endregion
2175
1461
  //#region src/export/export.ts
2176
- function z(e, t, n) {
1462
+ function B(e, t, n) {
2177
1463
  switch (n) {
2178
- case "csv": return B(e, t, ",");
2179
- case "tsv": return B(e, t, " ");
2180
- case "json": return Te(e, t);
2181
- case "xlsx": return Ce(e, t);
1464
+ case "csv": return V(e, t, ",");
1465
+ case "tsv": return V(e, t, " ");
1466
+ case "json": return he(e, t);
1467
+ case "xlsx": return z(e, t);
2182
1468
  }
2183
1469
  }
2184
- function we(e, t) {
1470
+ function me(e, t) {
2185
1471
  return e == null ? "" : (t.type === "date" || t.type === "datetime") && e instanceof Date ? e.toISOString() : String(e);
2186
1472
  }
2187
- function B(e, t, n) {
2188
- return [t.map((e) => V(e.label, n)).join(n), ...e.map((e) => t.map((t) => V(we(e[t.key], t), n)).join(n))].join("\n");
1473
+ function V(e, t, n) {
1474
+ return [t.map((e) => H(e.label, n)).join(n), ...e.map((e) => t.map((t) => H(me(e[t.key], t), n)).join(n))].join("\n");
2189
1475
  }
2190
- function V(e, t) {
1476
+ function H(e, t) {
2191
1477
  return e.includes(t) || e.includes("\"") || e.includes("\n") || e.includes("\r") ? "\"" + e.replace(/"/g, "\"\"") + "\"" : e;
2192
1478
  }
2193
- function Te(e, t) {
1479
+ function he(e, t) {
2194
1480
  let n = e.map((e) => {
2195
1481
  let n = {};
2196
1482
  for (let r of t) {
@@ -2201,35 +1487,35 @@ function Te(e, t) {
2201
1487
  });
2202
1488
  return JSON.stringify(n, null, 2);
2203
1489
  }
2204
- function Ee(e, t, n) {
1490
+ function ge(e, t, n) {
2205
1491
  let r = new Blob([e], { type: n }), i = URL.createObjectURL(r), a = document.createElement("a");
2206
1492
  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);
2207
1493
  }
2208
- var De = {
1494
+ var _e = {
2209
1495
  csv: "text/csv;charset=utf-8",
2210
1496
  tsv: "text/tab-separated-values;charset=utf-8",
2211
1497
  json: "application/json;charset=utf-8",
2212
1498
  xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
2213
- }, Oe = {
1499
+ }, ve = {
2214
1500
  csv: ".csv",
2215
1501
  tsv: ".tsv",
2216
1502
  json: ".json",
2217
1503
  xlsx: ".xlsx"
2218
1504
  };
2219
- function ke(e) {
2220
- return De[e];
1505
+ function ye(e) {
1506
+ return _e[e];
2221
1507
  }
2222
- function Ae(e) {
2223
- return Oe[e];
1508
+ function be(e) {
1509
+ return ve[e];
2224
1510
  }
2225
1511
  //#endregion
2226
1512
  //#region src/export/xlsx-reader.ts
2227
- function je(e) {
1513
+ function xe(e) {
2228
1514
  for (let t = e.byteLength - 22; t >= 0; t--) if (e.getUint32(t, !0) === 101010256) return t;
2229
1515
  throw Error("XLSX: End of central directory not found — not a valid ZIP file");
2230
1516
  }
2231
- function Me(e) {
2232
- let t = je(e), n = e.getUint32(t + 16, !0), r = e.getUint32(t + 12, !0), i = new TextDecoder("utf-8"), a = [], o = n, s = n + r;
1517
+ function Se(e) {
1518
+ 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;
2233
1519
  for (; o < s && e.getUint32(o, !0) === 33639248;) {
2234
1520
  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));
2235
1521
  a.push({
@@ -2242,7 +1528,7 @@ function Me(e) {
2242
1528
  }
2243
1529
  return a;
2244
1530
  }
2245
- async function Ne(e) {
1531
+ async function Ce(e) {
2246
1532
  let t = new DecompressionStream("deflate-raw"), n = t.writable.getWriter(), r = t.readable.getReader();
2247
1533
  n.write(e), n.close();
2248
1534
  let i = [];
@@ -2255,28 +1541,28 @@ async function Ne(e) {
2255
1541
  for (let e of i) o.set(e, s), s += e.length;
2256
1542
  return o;
2257
1543
  }
2258
- async function Pe(e, t) {
1544
+ async function we(e, t) {
2259
1545
  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);
2260
1546
  if (t.compressionMethod === 0) return o.slice();
2261
- if (t.compressionMethod === 8) return Ne(o);
1547
+ if (t.compressionMethod === 8) return Ce(o);
2262
1548
  throw Error(`XLSX: Unsupported compression method ${t.compressionMethod}`);
2263
1549
  }
2264
- async function Fe(e) {
2265
- let t = new DataView(e), n = Me(t), r = /* @__PURE__ */ new Map();
2266
- for (let e of n) e.compressedSize === 0 && e.name.endsWith("/") || r.set(e.name, await Pe(t, e));
1550
+ async function Te(e) {
1551
+ let t = new DataView(e), n = Se(t), r = /* @__PURE__ */ new Map();
1552
+ for (let e of n) e.compressedSize === 0 && e.name.endsWith("/") || r.set(e.name, await we(t, e));
2267
1553
  return r;
2268
1554
  }
2269
- var Ie = new TextDecoder("utf-8");
2270
- function H(e) {
2271
- let t = Ie.decode(e);
1555
+ var Ee = new TextDecoder("utf-8");
1556
+ function U(e) {
1557
+ let t = Ee.decode(e);
2272
1558
  return new DOMParser().parseFromString(t, "application/xml");
2273
1559
  }
2274
- function Le(e) {
1560
+ function De(e) {
2275
1561
  if (!e) return [];
2276
- let t = H(e);
1562
+ let t = U(e);
2277
1563
  return Array.from(t.querySelectorAll("si")).map((e) => Array.from(e.querySelectorAll("t")).map((e) => e.textContent ?? "").join(""));
2278
1564
  }
2279
- var Re = /* @__PURE__ */ new Set([
1565
+ var Oe = /* @__PURE__ */ new Set([
2280
1566
  14,
2281
1567
  15,
2282
1568
  16,
@@ -2296,37 +1582,37 @@ var Re = /* @__PURE__ */ new Set([
2296
1582
  57,
2297
1583
  58
2298
1584
  ]);
2299
- function ze(e) {
1585
+ function ke(e) {
2300
1586
  let t = e.replace(/"[^"]*"/g, "").replace(/\\./g, "").replace(/\[[^\]]*\]/g, "").split(";")[0];
2301
1587
  return /[dy]/i.test(t);
2302
1588
  }
2303
- function Be(e) {
1589
+ function Ae(e) {
2304
1590
  let t = /* @__PURE__ */ new Set();
2305
1591
  if (!e) return t;
2306
- let n = H(e), r = /* @__PURE__ */ new Map();
1592
+ let n = U(e), r = /* @__PURE__ */ new Map();
2307
1593
  for (let e of Array.from(n.querySelectorAll("numFmts > numFmt"))) r.set(parseInt(e.getAttribute("numFmtId") ?? "", 10), e.getAttribute("formatCode") ?? "");
2308
1594
  return Array.from(n.querySelectorAll("cellXfs > xf")).forEach((e, n) => {
2309
1595
  let i = parseInt(e.getAttribute("numFmtId") ?? "0", 10), a = r.get(i);
2310
- (a === void 0 ? Re.has(i) : ze(a)) && t.add(n);
1596
+ (a === void 0 ? Oe.has(i) : ke(a)) && t.add(n);
2311
1597
  }), t;
2312
1598
  }
2313
- function Ve(e) {
1599
+ function je(e) {
2314
1600
  if (!e) return !1;
2315
- let t = H(e).querySelector("workbookPr")?.getAttribute("date1904");
1601
+ let t = U(e).querySelector("workbookPr")?.getAttribute("date1904");
2316
1602
  return t === "1" || t === "true";
2317
1603
  }
2318
- function He(e, t) {
1604
+ function Me(e, t) {
2319
1605
  return new Date((t ? Date.UTC(1904, 0, 1) : Date.UTC(1899, 11, 30)) + Math.floor(e) * 864e5).toISOString().slice(0, 10);
2320
1606
  }
2321
- function Ue(e, t, n, r) {
2322
- let i = H(e).querySelectorAll("row");
1607
+ function Ne(e, t, n, r) {
1608
+ let i = U(e).querySelectorAll("row");
2323
1609
  if (i.length === 0) return [];
2324
1610
  let a = 0, o = /* @__PURE__ */ new Map();
2325
1611
  for (let e of i) {
2326
1612
  let i = parseInt(e.getAttribute("r") ?? "1", 10) - 1, s = /* @__PURE__ */ new Map();
2327
1613
  o.set(i, s);
2328
1614
  for (let i of e.querySelectorAll("c")) {
2329
- let e = We(i.getAttribute("r") ?? "");
1615
+ let e = W(i.getAttribute("r") ?? "");
2330
1616
  e > a && (a = e);
2331
1617
  let o = i.getAttribute("t") ?? "", c = i.getAttribute("s") ?? "", l = i.querySelector("v")?.textContent ?? "", u = i.querySelector("is > t")?.textContent ?? null, d;
2332
1618
  if (o === "s") d = t[parseInt(l, 10)] ?? "";
@@ -2335,7 +1621,7 @@ function Ue(e, t, n, r) {
2335
1621
  else if (l === "") d = "";
2336
1622
  else {
2337
1623
  let e = parseFloat(l);
2338
- d = c !== "" && n.has(parseInt(c, 10)) && !isNaN(e) && e >= 0 ? He(e, r) : l;
1624
+ d = c !== "" && n.has(parseInt(c, 10)) && !isNaN(e) && e >= 0 ? Me(e, r) : l;
2339
1625
  }
2340
1626
  s.set(e, d);
2341
1627
  }
@@ -2349,13 +1635,13 @@ function Ue(e, t, n, r) {
2349
1635
  }
2350
1636
  return c;
2351
1637
  }
2352
- function We(e) {
1638
+ function W(e) {
2353
1639
  let t = 0, n = 0;
2354
1640
  for (; n < e.length && e[n] >= "A" && e[n] <= "Z";) t = t * 26 + (e.charCodeAt(n) - 64), n++;
2355
1641
  return t - 1;
2356
1642
  }
2357
- async function U(e) {
2358
- let t = await Fe(e), n = Le(t.get("xl/sharedStrings.xml")), r = t.get("xl/worksheets/sheet1.xml");
1643
+ async function Pe(e) {
1644
+ let t = await Te(e), n = De(t.get("xl/sharedStrings.xml")), r = t.get("xl/worksheets/sheet1.xml");
2359
1645
  if (!r) {
2360
1646
  for (let [e, n] of t) if (e.toLowerCase().includes("worksheets/sheet")) {
2361
1647
  r = n;
@@ -2363,7 +1649,7 @@ async function U(e) {
2363
1649
  }
2364
1650
  }
2365
1651
  if (!r) throw Error("XLSX: No worksheet found");
2366
- let i = Be(t.get("xl/styles.xml")), a = Ve(t.get("xl/workbook.xml")), o = Ue(r, n, i, a);
1652
+ let i = Ae(t.get("xl/styles.xml")), a = je(t.get("xl/workbook.xml")), o = Ne(r, n, i, a);
2367
1653
  return o.length === 0 ? {
2368
1654
  headers: [],
2369
1655
  rows: []
@@ -2374,13 +1660,8 @@ async function U(e) {
2374
1660
  }
2375
1661
  //#endregion
2376
1662
  //#region src/models/types.ts
2377
- function W(e) {
2378
- return e.align ? e.align : e.type === "number" ? "end" : e.type === "boolean" ? "center" : "start";
2379
- }
2380
- //#endregion
2381
- //#region node_modules/@iyulab/components/dist/utilities/keyboard.js
2382
1663
  function G(e) {
2383
- return e.isComposing || e.keyCode === 229;
1664
+ return e.align ? e.align : e.type === "number" ? "end" : e.type === "boolean" ? "center" : "start";
2384
1665
  }
2385
1666
  //#endregion
2386
1667
  //#region \0@oxc-project+runtime@0.151.0/helpers/esm/decorate.js
@@ -2399,14 +1680,14 @@ var q = {
2399
1680
  lt: "<",
2400
1681
  gte: "≥",
2401
1682
  lte: "≤"
2402
- }, J = 120, Y = 40, X = 20, Z = 32, Q = 5, Ge = 200, $ = class extends n {
1683
+ }, J = 120, Y = 40, X = 20, Z = 32, Q = 5, Fe = 200, $ = class extends n {
2403
1684
  constructor(...e) {
2404
- 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 se(), this._editing = new ce(), this._rowSelection = new j(), 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 = () => {
1685
+ 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 k(), this._undo = new A(), 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 = () => {
2405
1686
  this._commitCommentPopup();
2406
1687
  }, 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();
2407
1688
  }
2408
1689
  static {
2409
- this.styles = l;
1690
+ this.styles = h;
2410
1691
  }
2411
1692
  get data() {
2412
1693
  return this._data;
@@ -2766,12 +2047,12 @@ var q = {
2766
2047
  if (!t) return "";
2767
2048
  let n = this.visibleColumns.slice(t.startCol, t.endCol + 1), r = [];
2768
2049
  for (let e = t.startRow; e <= t.endRow; e++) r.push(this.data[this._toDataIndex(e)]);
2769
- return z(r, n, e);
2050
+ return B(r, n, e);
2770
2051
  }
2771
- return z(this._sortedIndices.map((e) => this.data[e]), this.visibleColumns, e);
2052
+ return B(this._sortedIndices.map((e) => this.data[e]), this.visibleColumns, e);
2772
2053
  }
2773
2054
  exportToFile(e, t) {
2774
- Ee(this.exportToString(e), t ?? `export${Ae(e)}`, ke(e));
2055
+ ge(this.exportToString(e), t ?? `export${be(e)}`, ye(e));
2775
2056
  }
2776
2057
  setComment(e, t, n) {
2777
2058
  let r = this.getComment(e, t);
@@ -2828,11 +2109,11 @@ var q = {
2828
2109
  async importFromFile(e) {
2829
2110
  let t = e.name.toLowerCase();
2830
2111
  if (t.endsWith(".xlsx")) {
2831
- let t = await U(await e.arrayBuffer());
2112
+ let t = await Pe(await e.arrayBuffer());
2832
2113
  this._applyImportedSheet(t);
2833
2114
  } else if (t.endsWith(".csv") || t.endsWith(".tsv")) {
2834
- let t = N(await e.text());
2835
- this._applyImportedRows(t);
2115
+ let t = await e.text(), n = f(t);
2116
+ this._applyImportedRows(n);
2836
2117
  } else console.warn(`flex-table importFromFile: unsupported file type "${e.name}"`);
2837
2118
  }
2838
2119
  _applyImportedSheet(e) {
@@ -2842,7 +2123,7 @@ var q = {
2842
2123
  let a = t.get(e);
2843
2124
  if (!a) return;
2844
2125
  let o = this.columns.find((e) => e.key === a);
2845
- r[a] = o ? P(n[i] ?? "", o) : n[i] ?? null;
2126
+ r[a] = o ? j(n[i] ?? "", o) : n[i] ?? null;
2846
2127
  }), r;
2847
2128
  }), r = [...this.data];
2848
2129
  this.data = n, this._undo.push({
@@ -2867,7 +2148,7 @@ var q = {
2867
2148
  let a = n.get(t);
2868
2149
  if (!a) return;
2869
2150
  let o = this.columns.find((e) => e.key === a);
2870
- r[a] = o ? P(e[i] ?? "", o) : e[i] ?? null;
2151
+ r[a] = o ? j(e[i] ?? "", o) : e[i] ?? null;
2871
2152
  }), r;
2872
2153
  }), i = [...this.data];
2873
2154
  this.data = r, this._undo.push({
@@ -3010,7 +2291,7 @@ var q = {
3010
2291
  }
3011
2292
  updated(e) {
3012
2293
  this._focusEditor(), this._adjustFilterDropdown(), e.has("_headerMenu") && this._keepMenuInView(".ft-header-menu"), e.has("_bodyContextMenu") && this._bodyContextMenu && (this._keepMenuInView(".ft-body-context-menu"), this.shadowRoot?.querySelector(".ft-body-context-menu [role=\"menuitem\"]")?.focus()), e.has("stylesheets") && this._syncStylesheets();
3013
- let t = String(this._visibleRowCount), n = String(this.visibleColumns.length);
2294
+ let t = String(1 + this._visibleRowCount + +!!this.footerData), n = String(this.visibleColumns.length);
3014
2295
  if (this.getAttribute("aria-rowcount") !== t && this.setAttribute("aria-rowcount", t), this.getAttribute("aria-colcount") !== n && this.setAttribute("aria-colcount", n), this.loading ? this.getAttribute("aria-busy") !== "true" && this.setAttribute("aria-busy", "true") : this.hasAttribute("aria-busy") && this.removeAttribute("aria-busy"), e.has("_commentPopup") && this._commentPopup) {
3015
2296
  let e = this.shadowRoot?.querySelector(".ft-comment-popup textarea");
3016
2297
  e && (e.value = this.getComment(this._commentPopup.dataIndex, this._commentPopup.colKey) ?? "", e.focus(), e.select());
@@ -3021,7 +2302,7 @@ var q = {
3021
2302
  this._filteredIndices = Array.from({ length: this.data.length }, (e, t) => t), this._sortedIndices = this._filteredIndices;
3022
2303
  return;
3023
2304
  }
3024
- if (this._filteredIndices = le(this.data, this._filters, (e, t, n) => {
2305
+ if (this._filteredIndices = re(this.data, this._filters, (e, t, n) => {
3025
2306
  this.dispatchEvent(new CustomEvent("filter-error", {
3026
2307
  detail: {
3027
2308
  error: e,
@@ -3051,7 +2332,7 @@ var q = {
3051
2332
  e !== this._viewportHeight && (this._viewportHeight = e), t !== this._viewportWidth && (this._viewportWidth = t), this._warnIfUnconstrained();
3052
2333
  }
3053
2334
  _warnIfUnconstrained() {
3054
- this._warnedUnconstrained || process.env.NODE_ENV === "production" || this._visibleRowCount < Ge || 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.`));
2335
+ this._warnedUnconstrained || process.env.NODE_ENV === "production" || this._visibleRowCount < Fe || 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.`));
3055
2336
  }
3056
2337
  _onScroll() {
3057
2338
  this._scrollTop = this.scrollTop, this._scrollLeft = this.scrollLeft;
@@ -3181,7 +2462,7 @@ var q = {
3181
2462
  }
3182
2463
  let t = this.shadowRoot?.querySelector(".ft-editor");
3183
2464
  if (t) {
3184
- let n = P(t.value, e);
2465
+ let n = j(t.value, e);
3185
2466
  this._applyEdit(n);
3186
2467
  } else this._cancelEdit();
3187
2468
  }
@@ -3255,7 +2536,7 @@ var q = {
3255
2536
  }));
3256
2537
  }
3257
2538
  _onEditorKeyDown(e) {
3258
- if (!G(e)) {
2539
+ if (!m(e)) {
3259
2540
  if (this._autocompleteState && this._autocompleteState.candidates.length > 0) {
3260
2541
  if (e.key === "ArrowDown") {
3261
2542
  e.preventDefault(), e.stopPropagation();
@@ -3323,7 +2604,7 @@ var q = {
3323
2604
  ].includes(t) && this._handleCtrlKey(e)) return;
3324
2605
  }
3325
2606
  if (t.length !== 0 && this._visibleRowCount !== 0) {
3326
- if ((e.key === "Enter" || e.key === "F2") && this._activeCell && !G(e)) {
2607
+ if ((e.key === "Enter" || e.key === "F2") && this._activeCell && !m(e)) {
3327
2608
  e.preventDefault();
3328
2609
  let n = t[this._activeCell.col];
3329
2610
  n && this._isCellEditable(n) ? this._startEdit() : e.key === "Enter" && this._fireRowActivate(n);
@@ -3411,7 +2692,7 @@ var q = {
3411
2692
  async _handleCopy(e) {
3412
2693
  let t = this._selection.getEffectiveRange();
3413
2694
  if (!t) return;
3414
- let n = this.visibleColumns, r = de(this._sortedIndices.map((e) => this.data[e]), n, t);
2695
+ let n = this.visibleColumns, r = ae(this._sortedIndices.map((e) => this.data[e]), n, t);
3415
2696
  try {
3416
2697
  await navigator.clipboard.writeText(r);
3417
2698
  } catch (e) {
@@ -3437,7 +2718,7 @@ var q = {
3437
2718
  if (!this._activeCell) return;
3438
2719
  let e = await this._readClipboardText();
3439
2720
  if (e == null) return;
3440
- let t = N(e);
2721
+ let t = f(e);
3441
2722
  if (t.length === 0) return;
3442
2723
  let n = this._expandRowsForPaste(this._activeCell.row, t.length), r = this._applyPasteData(this._activeCell, t);
3443
2724
  if (r.length > 0 || n.length > 0) {
@@ -3495,7 +2776,7 @@ var q = {
3495
2776
  for (let a = 0; a < t[i].length; a++) {
3496
2777
  let s = e.col + a;
3497
2778
  if (s >= n.length) break;
3498
- let c = n[s], l = this.data[o][c.key], u = P(t[i][a], c);
2779
+ let c = n[s], l = this.data[o][c.key], u = j(t[i][a], c);
3499
2780
  this.data[o][c.key] = u, r.push({
3500
2781
  row: o,
3501
2782
  col: s,
@@ -3560,7 +2841,7 @@ var q = {
3560
2841
  for (let r = e.startCol + 1; r <= e.endCol; r++) {
3561
2842
  let e = t[r];
3562
2843
  if (!e || !this._isCellEditable(e)) continue;
3563
- let a = P(o == null ? "" : String(o), e);
2844
+ let a = j(o == null ? "" : String(o), e);
3564
2845
  n.push({
3565
2846
  row: i,
3566
2847
  key: e.key,
@@ -3697,7 +2978,7 @@ var q = {
3697
2978
  return Math.min(n, i);
3698
2979
  }
3699
2980
  _renderHeaderCell(e, t) {
3700
- let n = e.sortable !== !1, r = this._sortCriteria.find((t) => t.key === e.key), o = this._sortCriteria.length > 1 ? this._sortCriteria.findIndex((t) => t.key === e.key) : -1, s = this._filters.some((t) => t.key === e.key), c = e.pinned === "left", l = e.pinned === "right", u = c || l, d = e.headerAlign ?? W(e), f = [
2981
+ let n = e.sortable !== !1, r = this._sortCriteria.find((t) => t.key === e.key), o = this._sortCriteria.length > 1 ? this._sortCriteria.findIndex((t) => t.key === e.key) : -1, s = this._filters.some((t) => t.key === e.key), c = e.pinned === "left", l = e.pinned === "right", u = c || l, d = e.headerAlign ?? G(e), f = [
3701
2982
  "ft-header-cell",
3702
2983
  n ? "ft-sortable" : "",
3703
2984
  u ? "ft-pinned" : "",
@@ -3711,6 +2992,7 @@ var q = {
3711
2992
  return i`
3712
2993
  <div class=${y}
3713
2994
  role="columnheader"
2995
+ aria-colindex=${t + 1}
3714
2996
  data-col-index=${t}
3715
2997
  style=${_}
3716
2998
  aria-sort=${p ?? a}
@@ -3719,7 +3001,7 @@ var q = {
3719
3001
  @click=${n ? (t) => this._onHeaderClick(t, e) : void 0}>
3720
3002
  ${C ? i`
3721
3003
  <button class="ft-hidden-col-indicator"
3722
- title=${A("showHiddenColumns")}
3004
+ title=${O("showHiddenColumns")}
3723
3005
  @click=${(t) => {
3724
3006
  t.stopPropagation(), this._showHiddenBefore(e);
3725
3007
  }}>&#x276F;</button>
@@ -3729,8 +3011,8 @@ var q = {
3729
3011
  ${o >= 0 ? i`<span class="ft-sort-order">${o + 1}</span>` : ""}
3730
3012
  <button class="ft-column-menu-btn ${s ? "ft-filter-active" : ""}"
3731
3013
  type="button"
3732
- title=${A("columnMenu")}
3733
- aria-label=${A("columnMenuFor", { header: e.label })}
3014
+ title=${O("columnMenu")}
3015
+ aria-label=${O("columnMenuFor", { header: e.label })}
3734
3016
  aria-haspopup="menu"
3735
3017
  aria-expanded=${this._headerMenu?.key === e.key ? "true" : "false"}
3736
3018
  @mousedown=${(e) => e.stopPropagation()}
@@ -3849,26 +3131,26 @@ var q = {
3849
3131
  }}>${t}</button>
3850
3132
  `;
3851
3133
  return i`
3852
- <div class="ft-header-menu" role="menu" aria-label=${A("columnMenuRegion", { header: o.label })}
3134
+ <div class="ft-header-menu" role="menu" aria-label=${O("columnMenuRegion", { header: o.label })}
3853
3135
  style="position: fixed; left: ${t}px; top: ${n}px; z-index: var(--u-layer-floating, 1000);"
3854
3136
  @mousedown=${(e) => e.stopPropagation()}
3855
3137
  @keydown=${(e) => this._onHeaderMenuKeydown(e)}>
3856
3138
  ${o.sortable === !1 ? a : i`
3857
- ${c("sort-asc", A("sortAscending"), () => this._applySortFromMenu(e, "asc"))}
3858
- ${c("sort-desc", A("sortDescending"), () => this._applySortFromMenu(e, "desc"))}
3139
+ ${c("sort-asc", O("sortAscending"), () => this._applySortFromMenu(e, "asc"))}
3140
+ ${c("sort-desc", O("sortDescending"), () => this._applySortFromMenu(e, "desc"))}
3859
3141
  <div class="ft-header-menu-separator" role="separator"></div>
3860
3142
  `}
3861
3143
  ${this.showFilters ? i`
3862
- ${c("filter", A("filter"), () => this._openFilterFromMenu(e))}
3863
- ${s ? c("clear-filter", A("clearFilter"), () => this._clearColumnFilter(e)) : a}
3144
+ ${c("filter", O("filter"), () => this._openFilterFromMenu(e))}
3145
+ ${s ? c("clear-filter", O("clearFilter"), () => this._clearColumnFilter(e)) : a}
3864
3146
  <div class="ft-header-menu-separator" role="separator"></div>
3865
3147
  ` : a}
3866
- ${c("hide", A("hideColumn"), () => this._setColumnHidden(e, !0))}
3867
- ${r.map((e) => c("show", A("showColumn", { header: e.label }), () => this._setColumnHidden(e.key, !1)))}
3148
+ ${c("hide", O("hideColumn"), () => this._setColumnHidden(e, !0))}
3149
+ ${r.map((e) => c("show", O("showColumn", { header: e.label }), () => this._setColumnHidden(e.key, !1)))}
3868
3150
  <div class="ft-header-menu-separator" role="separator"></div>
3869
- ${c("autofit", A("autoFitWidth"), () => this._autoFitColumn(e))}
3870
- ${c("wider", A("wider"), () => this._resizeColumnBy(e, X), !0)}
3871
- ${c("narrower", A("narrower"), () => this._resizeColumnBy(e, -20), !0)}
3151
+ ${c("autofit", O("autoFitWidth"), () => this._autoFitColumn(e))}
3152
+ ${c("wider", O("wider"), () => this._resizeColumnBy(e, X), !0)}
3153
+ ${c("narrower", O("narrower"), () => this._resizeColumnBy(e, -20), !0)}
3872
3154
  </div>
3873
3155
  `;
3874
3156
  }
@@ -3886,26 +3168,26 @@ var q = {
3886
3168
  }}>${e}</button>
3887
3169
  `, f = i`<div class="ft-context-menu-separator" role="separator"></div>`;
3888
3170
  return i`
3889
- <div class="ft-body-context-menu" role="menu" aria-label=${A("cellActions")}
3171
+ <div class="ft-body-context-menu" role="menu" aria-label=${O("cellActions")}
3890
3172
  style="position: fixed; left: ${n}px; top: ${r}px; z-index: var(--u-layer-floating, 1000);"
3891
3173
  @mousedown=${(e) => e.stopPropagation()}
3892
3174
  @keydown=${(e) => this._onMenuKeydown(e, ".ft-body-context-menu", l)}>
3893
- ${d(A("copy"), () => this._handleCopy(!1))}
3175
+ ${d(O("copy"), () => this._handleCopy(!1))}
3894
3176
  ${f}
3895
- ${d(A("insertRowAbove"), () => this.addRow(void 0, t))}
3896
- ${d(A("insertRowBelow"), () => this.addRow(void 0, t + 1))}
3897
- ${d(A("deleteRow"), () => this.deleteRows([t]), !0)}
3177
+ ${d(O("insertRowAbove"), () => this.addRow(void 0, t))}
3178
+ ${d(O("insertRowBelow"), () => this.addRow(void 0, t + 1))}
3179
+ ${d(O("deleteRow"), () => this.deleteRows([t]), !0)}
3898
3180
  ${f}
3899
- ${d(A("hideColumn"), () => this._setColumnHidden(o.key, !0))}
3181
+ ${d(O("hideColumn"), () => this._setColumnHidden(o.key, !0))}
3900
3182
  ${f}
3901
- ${d(`${A("sortAscending")} ↑`, () => this._applySortFromMenu(o.key, "asc"))}
3902
- ${d(`${A("sortDescending")} ↓`, () => this._applySortFromMenu(o.key, "desc"))}
3183
+ ${d(`${O("sortAscending")} ↑`, () => this._applySortFromMenu(o.key, "asc"))}
3184
+ ${d(`${O("sortDescending")} ↓`, () => this._applySortFromMenu(o.key, "desc"))}
3903
3185
  ${f}
3904
- ${d(A("filterByThisValue"), () => this.setFilter(o.key, (e) => e === s))}
3905
- ${c ? d(A("clearFilter"), () => this.removeFilter(o.key)) : a}
3186
+ ${d(O("filterByThisValue"), () => this.setFilter(o.key, (e) => e === s))}
3187
+ ${c ? d(O("clearFilter"), () => this.removeFilter(o.key)) : a}
3906
3188
  ${f}
3907
- ${d(A(u ? "editComment" : "addComment"), () => this._openCommentPopup(t, o.key, n, r))}
3908
- ${u ? d(A("deleteComment"), () => this.setComment(t, o.key, null), !0) : a}
3189
+ ${d(O(u ? "editComment" : "addComment"), () => this._openCommentPopup(t, o.key, n, r))}
3190
+ ${u ? d(O("deleteComment"), () => this.setComment(t, o.key, null), !0) : a}
3909
3191
  </div>
3910
3192
  `;
3911
3193
  }
@@ -3937,13 +3219,13 @@ var q = {
3937
3219
  @mousedown=${(e) => e.stopPropagation()}>
3938
3220
  <textarea class="ft-comment-popup-textarea"
3939
3221
  rows="4"
3940
- placeholder=${A("addCommentPlaceholder")}
3222
+ placeholder=${O("addCommentPlaceholder")}
3941
3223
  @keydown=${(e) => {
3942
3224
  e.key === "Escape" && (e.preventDefault(), this._cancelCommentPopup()), e.key === "Enter" && (e.ctrlKey || e.metaKey) && (e.preventDefault(), this._commitCommentPopup());
3943
3225
  }}></textarea>
3944
3226
  <div class="ft-comment-popup-buttons">
3945
- <button class="ft-comment-popup-cancel" @click=${() => this._cancelCommentPopup()}>${A("cancel")}</button>
3946
- <button class="ft-comment-popup-save" @click=${() => this._commitCommentPopup()}>${A("save")}</button>
3227
+ <button class="ft-comment-popup-cancel" @click=${() => this._cancelCommentPopup()}>${O("cancel")}</button>
3228
+ <button class="ft-comment-popup-save" @click=${() => this._commitCommentPopup()}>${O("save")}</button>
3947
3229
  </div>
3948
3230
  </div>
3949
3231
  `;
@@ -3979,7 +3261,7 @@ var q = {
3979
3261
  <div class="ft-filter-dropdown" @click=${(e) => e.stopPropagation()}>
3980
3262
  ${t === "boolean" ? this._renderBooleanFilter(e) : t === "number" ? this._renderNumberFilter(e) : t === "date" || t === "datetime" ? this._renderDateFilter(e) : this._renderTextFilter(e)}
3981
3263
  <div class="ft-filter-actions">
3982
- <button class="ft-filter-clear" @click=${() => this._clearColumnFilter(e.key)}>${A("clear")}</button>
3264
+ <button class="ft-filter-clear" @click=${() => this._clearColumnFilter(e.key)}>${O("clear")}</button>
3983
3265
  </div>
3984
3266
  </div>
3985
3267
  `;
@@ -4012,7 +3294,7 @@ var q = {
4012
3294
  let n = this._emptyFilterState.get(e) ?? "";
4013
3295
  return i`
4014
3296
  <div class="ft-filter-empty-row">
4015
- <label>${A("blankCells")}</label>
3297
+ <label>${O("blankCells")}</label>
4016
3298
  <select class="ft-filter-mode-select"
4017
3299
  .value=${n}
4018
3300
  @change=${(n) => {
@@ -4022,9 +3304,9 @@ var q = {
4022
3304
  @keydown=${(e) => {
4023
3305
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
4024
3306
  }}>
4025
- <option value="">${A("blankAll")}</option>
4026
- <option value="empty">${A("emptyOnly")}</option>
4027
- <option value="non-empty">${A("nonEmptyOnly")}</option>
3307
+ <option value="">${O("blankAll")}</option>
3308
+ <option value="empty">${O("emptyOnly")}</option>
3309
+ <option value="non-empty">${O("nonEmptyOnly")}</option>
4028
3310
  </select>
4029
3311
  </div>
4030
3312
  `;
@@ -4100,13 +3382,13 @@ var q = {
4100
3382
  @keydown=${(e) => {
4101
3383
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
4102
3384
  }}>
4103
- <option value="contains">${A("contains")}</option>
4104
- <option value="starts">${A("startsWith")}</option>
4105
- <option value="ends">${A("endsWith")}</option>
4106
- <option value="wildcard">${A("wildcard")}</option>
3385
+ <option value="contains">${O("contains")}</option>
3386
+ <option value="starts">${O("startsWith")}</option>
3387
+ <option value="ends">${O("endsWith")}</option>
3388
+ <option value="wildcard">${O("wildcard")}</option>
4107
3389
  </select>
4108
3390
  </div>
4109
- <input class="ft-filter-input" type="text" placeholder=${A("searchPlaceholder")}
3391
+ <input class="ft-filter-input" type="text" placeholder=${O("searchPlaceholder")}
4110
3392
  .value=${t.value}
4111
3393
  @input=${(t) => {
4112
3394
  let n = t.target.value, r = this._textFilterState.get(e.key) ?? {
@@ -4157,7 +3439,7 @@ var q = {
4157
3439
  }}>
4158
3440
  ${Object.keys(q).map((e) => i`<option value=${e}>${q[e]}</option>`)}
4159
3441
  </select>
4160
- <input class="ft-filter-input ft-num-cond-input" type="number" placeholder=${A("valuePlaceholder")}
3442
+ <input class="ft-filter-input ft-num-cond-input" type="number" placeholder=${O("valuePlaceholder")}
4161
3443
  .value=${n.value == null ? "" : String(n.value)}
4162
3444
  @input=${(n) => {
4163
3445
  let r = n.target.value, i = this._numberFilterState.get(e) ?? this._defaultNumState();
@@ -4218,13 +3500,13 @@ var q = {
4218
3500
  let t = e.type === "datetime" ? "datetime-local" : "date", n = this._dateFilterState.get(e.key) ?? {};
4219
3501
  return i`
4220
3502
  <div class="ft-filter-range">
4221
- <input class="ft-filter-input" type=${t} placeholder=${A("fromPlaceholder")}
3503
+ <input class="ft-filter-input" type=${t} placeholder=${O("fromPlaceholder")}
4222
3504
  .value=${n.from ?? ""}
4223
3505
  @input=${(t) => this._applyDateFilter(e.key, t, "from")}
4224
3506
  @keydown=${(e) => {
4225
3507
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
4226
3508
  }}>
4227
- <input class="ft-filter-input" type=${t} placeholder=${A("toPlaceholder")}
3509
+ <input class="ft-filter-input" type=${t} placeholder=${O("toPlaceholder")}
4228
3510
  .value=${n.to ?? ""}
4229
3511
  @input=${(t) => this._applyDateFilter(e.key, t, "to")}
4230
3512
  @keydown=${(e) => {
@@ -4250,9 +3532,9 @@ var q = {
4250
3532
  @keydown=${(e) => {
4251
3533
  e.key === "Escape" && (this._openFilterKey = null), e.stopPropagation();
4252
3534
  }}>
4253
- <option value="all">${A("all")}</option>
4254
- <option value="true">\u2714 ${A("booleanTrue")}</option>
4255
- <option value="false">\u2718 ${A("booleanFalse")}</option>
3535
+ <option value="all">${O("all")}</option>
3536
+ <option value="true">\u2714 ${O("booleanTrue")}</option>
3537
+ <option value="false">\u2718 ${O("booleanFalse")}</option>
4256
3538
  </select>
4257
3539
  ${this._renderEmptyFilterRow(e.key)}
4258
3540
  `;
@@ -4669,42 +3951,42 @@ var q = {
4669
3951
  this._closeFindPanel();
4670
3952
  return;
4671
3953
  }
4672
- e.key === "Enter" && !G(e) && e.target instanceof HTMLInputElement && e.target.classList.contains("ft-find-input") && (e.shiftKey ? this._findPrev() : this._findNext());
3954
+ e.key === "Enter" && !m(e) && e.target instanceof HTMLInputElement && e.target.classList.contains("ft-find-input") && (e.shiftKey ? this._findPrev() : this._findNext());
4673
3955
  }}>
4674
3956
  <div class="ft-find-row">
4675
- <input class="ft-find-input" type="text" placeholder=${A("findPlaceholder")}
3957
+ <input class="ft-find-input" type="text" placeholder=${O("findPlaceholder")}
4676
3958
  .value=${t}
4677
3959
  @input=${(e) => {
4678
3960
  this._findState.query = e.target.value, this._findSearch();
4679
3961
  }}>
4680
3962
  <span class="ft-find-count">${c > 0 ? `${l}/${c}` : t ? "0 results" : ""}</span>
4681
- <button @click=${() => this._findPrev()} title=${A("findPrevious")}>◀</button>
4682
- <button @click=${() => this._findNext()} title=${A("findNext")}>▶</button>
4683
- <label title=${A("matchCase")}><input type="checkbox" ?checked=${r} @change=${(e) => {
3963
+ <button @click=${() => this._findPrev()} title=${O("findPrevious")}>◀</button>
3964
+ <button @click=${() => this._findNext()} title=${O("findNext")}>▶</button>
3965
+ <label title=${O("matchCase")}><input type="checkbox" ?checked=${r} @change=${(e) => {
4684
3966
  this._findState.matchCase = e.target.checked, this._findSearch();
4685
3967
  }}> Aa</label>
4686
- <label title=${A("wholeCell")}><input type="checkbox" ?checked=${a} @change=${(e) => {
3968
+ <label title=${O("wholeCell")}><input type="checkbox" ?checked=${a} @change=${(e) => {
4687
3969
  this._findState.wholeCell = e.target.checked, this._findSearch();
4688
3970
  }}> [ ]</label>
4689
- <button @click=${() => this._closeFindPanel()} title=${A("closeFind")}>✕</button>
3971
+ <button @click=${() => this._closeFindPanel()} title=${O("closeFind")}>✕</button>
4690
3972
  </div>
4691
3973
  ${e === "replace" ? i`
4692
3974
  <div class="ft-find-row">
4693
- <input class="ft-find-replace-input" type="text" placeholder=${A("replaceWithPlaceholder")}
3975
+ <input class="ft-find-replace-input" type="text" placeholder=${O("replaceWithPlaceholder")}
4694
3976
  .value=${n}
4695
3977
  @input=${(e) => {
4696
3978
  this._findState.replaceWith = e.target.value;
4697
3979
  }}>
4698
- <button @click=${() => this._replaceOne()} ?disabled=${c === 0}>${A("replace")}</button>
4699
- <button @click=${() => this._replaceAll()} ?disabled=${c === 0}>${A("replaceAll")}</button>
3980
+ <button @click=${() => this._replaceOne()} ?disabled=${c === 0}>${O("replace")}</button>
3981
+ <button @click=${() => this._replaceAll()} ?disabled=${c === 0}>${O("replaceAll")}</button>
4700
3982
  </div>
4701
3983
  ` : ""}
4702
3984
  </div>
4703
3985
  `;
4704
3986
  }
4705
3987
  render() {
4706
- let e = this.visibleColumns, t = this.importEnabled && this._isDragOver ? i`<div class="ft-import-overlay">${A("dropFileToImport")}</div>` : a, n = this.loading ? i`<div class="ft-loading-overlay"></div>` : a;
4707
- if (e.length === 0) return i`${t}${n}<div class="ft-empty">${A("noColumnsDefined")}</div>`;
3988
+ let e = this.visibleColumns, t = this.importEnabled && this._isDragOver ? i`<div class="ft-import-overlay">${O("dropFileToImport")}</div>` : a, n = this.loading ? i`<div class="ft-loading-overlay"></div>` : a;
3989
+ if (e.length === 0) return i`${t}${n}<div class="ft-empty">${O("noColumnsDefined")}</div>`;
4708
3990
  let r = this.headerHeight, o = this._totalRowWidth, { start: s, end: c } = this.visibleColRange, l = [];
4709
3991
  for (let t = 0; t < e.length; t++) (e[t].pinned === "left" || e[t].pinned === "right") && (t < s || t >= c) && l.push(t);
4710
3992
  let u = 0, d = this._scrollLeft, f = this.selectable ? i`<div class="ft-checkbox-header"
@@ -4726,7 +4008,7 @@ var q = {
4726
4008
  let e = this.data.length === 0 ? this.emptyMessage : this.noMatchingMessage;
4727
4009
  return i`
4728
4010
  ${n}
4729
- <div class="ft-header" role="row" style="width: ${o}px; height: ${r}px;">
4011
+ <div class="ft-header" role="row" aria-rowindex="1" style="width: ${o}px; height: ${r}px;">
4730
4012
  ${f}${p}
4731
4013
  ${m}
4732
4014
  ${h}
@@ -4741,7 +4023,7 @@ var q = {
4741
4023
  ${t}
4742
4024
  ${n}
4743
4025
  ${this._renderFindPanel()}
4744
- <div class="ft-header" role="row" style="width: ${o}px; height: ${r}px;">
4026
+ <div class="ft-header" role="row" aria-rowindex="1" style="width: ${o}px; height: ${r}px;">
4745
4027
  ${f}${p}
4746
4028
  ${m}
4747
4029
  ${h}
@@ -4788,19 +4070,19 @@ var q = {
4788
4070
  for (let e of n) {
4789
4071
  let t = r[e], n = this._getColWidth(t), o = t.pinned === "right" ? `position: absolute; top: 0; left: ${this._getPinnedRightLeft(e)}px; width: ${n}px; height: ${a}px; z-index: 2;` : `position: absolute; top: 0; left: ${s + this._getPinnedLeft(e)}px; width: ${n}px; height: ${a}px; z-index: 2;`;
4790
4072
  d.push(i`
4791
- <div class="ft-footer-cell ft-pinned" style=${o}>
4073
+ <div class="ft-footer-cell ft-pinned" role="gridcell" aria-colindex=${e + 1} style=${o}>
4792
4074
  ${this.footerData[t.key] ?? ""}</div>
4793
4075
  `);
4794
4076
  }
4795
4077
  for (let n = e; n < t; n++) {
4796
4078
  let e = r[n], t = this._getColWidth(e), o = this._colLeftOffsets[n] ?? 0, c = e.pinned === "left", l = e.pinned === "right", u = c || l, f;
4797
4079
  f = c ? `position: absolute; top: 0; left: ${s + this._getPinnedLeft(n)}px; width: ${t}px; height: ${a}px; z-index: 2;` : l ? `position: absolute; top: 0; right: ${-s + this._getPinnedRight(n)}px; width: ${t}px; height: ${a}px; z-index: 2;` : `left: ${o}px; width: ${t}px; height: ${a}px;`, d.push(i`
4798
- <div class="ft-footer-cell ${u ? "ft-pinned" : ""}" style=${f}>
4080
+ <div class="ft-footer-cell ${u ? "ft-pinned" : ""}" role="gridcell" aria-colindex=${n + 1} style=${f}>
4799
4081
  ${this.footerData[e.key] ?? ""}</div>
4800
4082
  `);
4801
4083
  }
4802
4084
  return i`
4803
- <div class="ft-footer" role="row" style="width: ${o}px; height: ${a}px;">
4085
+ <div class="ft-footer" role="row" aria-rowindex=${this._visibleRowCount + 2} style="width: ${o}px; height: ${a}px;">
4804
4086
  ${l}${u}
4805
4087
  ${d}
4806
4088
  </div>
@@ -4826,7 +4108,7 @@ var q = {
4826
4108
  for (let t of r) y.push(this._renderCell(c, o[t], e, t));
4827
4109
  for (let r = t; r < n; r++) y.push(this._renderCell(c, o[r], e, r));
4828
4110
  return i`
4829
- <div class="ft-row ${f} ${p ? "ft-row-selected" : ""}" role="row"
4111
+ <div class="ft-row ${f} ${p ? "ft-row-selected" : ""}" role="row" aria-rowindex=${e + 2}
4830
4112
  style="top: ${l}px; height: ${u}px; width: ${d}px;">
4831
4113
  ${g}${v}
4832
4114
  ${y}
@@ -4845,6 +4127,7 @@ var q = {
4845
4127
  }
4846
4128
  if (s) return i`
4847
4129
  <div class="ft-cell ft-editing ft-active ${d ? "ft-pinned" : ""}" role="gridcell"
4130
+ aria-colindex=${r + 1}
4848
4131
  data-col-index=${r}
4849
4132
  aria-selected="true"
4850
4133
  aria-readonly=${g ? "true" : a}
@@ -4852,19 +4135,20 @@ var q = {
4852
4135
  ${this._renderEditor(e, t)}
4853
4136
  </div>
4854
4137
  `;
4855
- let _ = o || c, v = this._isCellInvalid(n, r), y = (this._findState?.results ?? []).findIndex((e) => e.row === n && e.col === r), b = y >= 0, x = b && y === this._findState.currentIndex, S = [
4138
+ let _ = o || c, v = this._isCellInvalid(n, r), y = (this._findState?.results ?? []).findIndex((e) => e.row === n && e.col === r), x = y >= 0, S = x && y === this._findState.currentIndex, C = [
4856
4139
  "ft-cell",
4857
4140
  `ft-type-${t.type ?? "text"}`,
4858
- `ft-align-${W(t)}`,
4141
+ `ft-align-${G(t)}`,
4859
4142
  o ? "ft-active" : "",
4860
4143
  c ? "ft-selected" : "",
4861
4144
  d ? "ft-pinned" : "",
4862
4145
  v ? "ft-invalid" : "",
4863
- x ? "ft-find-current" : b ? "ft-find-match" : ""
4864
- ].filter(Boolean).join(" "), C = this._toDataIndex(n), w = this._comments.get(C)?.get(t.key) ?? null, T = w !== null, E = T ? i`<div class="ft-comment-indicator" title=${w}></div>` : a;
4146
+ S ? "ft-find-current" : x ? "ft-find-match" : ""
4147
+ ].filter(Boolean).join(" "), w = this._toDataIndex(n), T = this._comments.get(w)?.get(t.key) ?? null, E = T !== null, D = E ? i`<div class="ft-comment-indicator" title=${T}></div>` : a;
4865
4148
  return i`
4866
- <div class=${T ? S + " ft-has-comment" : S}
4149
+ <div class=${E ? C + " ft-has-comment" : C}
4867
4150
  role="gridcell"
4151
+ aria-colindex=${r + 1}
4868
4152
  data-col-index=${r}
4869
4153
  aria-selected=${_ ? "true" : "false"}
4870
4154
  aria-readonly=${g ? "true" : a}
@@ -4875,8 +4159,8 @@ var q = {
4875
4159
  @mouseenter=${() => this._onCellMouseEnter(n, r)}
4876
4160
  @click=${(e) => this._onCellClickEvent(e, n, r)}
4877
4161
  @dblclick=${() => this._onCellDblClick(n, r)}>
4878
- ${E}
4879
- ${O(e[t.key], e, t)}
4162
+ ${D}
4163
+ ${b(e[t.key], e, t)}
4880
4164
  </div>
4881
4165
  `;
4882
4166
  }
@@ -5014,4 +4298,4 @@ K([s({ type: Array })], $.prototype, "columns", void 0), K([s({
5014
4298
  attribute: "max-undo-size"
5015
4299
  })], $.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")], $);
5016
4300
  //#endregion
5017
- export { j as a, M as i, W as n, k as o, z as r, O as s, $ as t };
4301
+ export { k as a, A as i, G as n, D as o, B as r, b as s, $ as t };