@serhii.olishevskyi/docs 1.2.26 → 1.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +357 -327
- package/dist/index.d.ts +357 -327
- package/dist/index.js +1104 -393
- package/dist/index.mjs +989 -258
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1157,33 +1157,763 @@ function UrlComponent({
|
|
|
1157
1157
|
] });
|
|
1158
1158
|
}
|
|
1159
1159
|
|
|
1160
|
+
// src/UI/components/inputs/DateTimePickerComponent.tsx
|
|
1161
|
+
import { useState as useState7, useEffect as useEffect4, useMemo as useMemo2 } from "react";
|
|
1162
|
+
import {
|
|
1163
|
+
TextField as TextField4,
|
|
1164
|
+
InputAdornment as InputAdornment6,
|
|
1165
|
+
IconButton as IconButton6,
|
|
1166
|
+
Box as Box6,
|
|
1167
|
+
MenuItem as MenuItem2,
|
|
1168
|
+
Select as Select2,
|
|
1169
|
+
Typography as Typography2,
|
|
1170
|
+
Popover as Popover2,
|
|
1171
|
+
Grid,
|
|
1172
|
+
Button as Button2,
|
|
1173
|
+
Divider
|
|
1174
|
+
} from "@mui/material";
|
|
1175
|
+
import {
|
|
1176
|
+
CalendarMonth as CalendarIcon,
|
|
1177
|
+
AccessTime as TimeIcon,
|
|
1178
|
+
Event as DateTimeIcon,
|
|
1179
|
+
Lock as LockIcon3,
|
|
1180
|
+
ContentCopy as ContentCopyIcon3,
|
|
1181
|
+
Check as CheckIcon3,
|
|
1182
|
+
Clear as ClearIcon3,
|
|
1183
|
+
ChevronLeft as ChevronLeftIcon,
|
|
1184
|
+
ChevronRight as ChevronRightIcon,
|
|
1185
|
+
Today as TodayIcon
|
|
1186
|
+
} from "@mui/icons-material";
|
|
1187
|
+
import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1188
|
+
var LOCALE_CONFIGS = {
|
|
1189
|
+
de: {
|
|
1190
|
+
locale: "de-DE",
|
|
1191
|
+
dateFormat: "DD.MM.YYYY",
|
|
1192
|
+
timeFormat: "24",
|
|
1193
|
+
placeholderDate: "TT.MM.JJJJ",
|
|
1194
|
+
placeholderTime: "HH:MM",
|
|
1195
|
+
placeholderDateTime: "TT.MM.JJJJ HH:MM",
|
|
1196
|
+
weekStartsOn: 1
|
|
1197
|
+
},
|
|
1198
|
+
en: {
|
|
1199
|
+
locale: "en-US",
|
|
1200
|
+
dateFormat: "MM/DD/YYYY",
|
|
1201
|
+
timeFormat: "12",
|
|
1202
|
+
placeholderDate: "MM/DD/YYYY",
|
|
1203
|
+
placeholderTime: "HH:MM AM/PM",
|
|
1204
|
+
placeholderDateTime: "MM/DD/YYYY, HH:MM AM/PM",
|
|
1205
|
+
weekStartsOn: 0
|
|
1206
|
+
},
|
|
1207
|
+
es: {
|
|
1208
|
+
locale: "es-ES",
|
|
1209
|
+
dateFormat: "DD/MM/YYYY",
|
|
1210
|
+
timeFormat: "24",
|
|
1211
|
+
placeholderDate: "DD/MM/AAAA",
|
|
1212
|
+
placeholderTime: "HH:MM",
|
|
1213
|
+
placeholderDateTime: "DD/MM/AAAA HH:MM",
|
|
1214
|
+
weekStartsOn: 1
|
|
1215
|
+
},
|
|
1216
|
+
fr: {
|
|
1217
|
+
locale: "fr-FR",
|
|
1218
|
+
dateFormat: "DD/MM/YYYY",
|
|
1219
|
+
timeFormat: "24",
|
|
1220
|
+
placeholderDate: "JJ/MM/AAAA",
|
|
1221
|
+
placeholderTime: "HH:MM",
|
|
1222
|
+
placeholderDateTime: "JJ/MM/AAAA HH:MM",
|
|
1223
|
+
weekStartsOn: 1
|
|
1224
|
+
},
|
|
1225
|
+
it: {
|
|
1226
|
+
locale: "it-IT",
|
|
1227
|
+
dateFormat: "DD/MM/YYYY",
|
|
1228
|
+
timeFormat: "24",
|
|
1229
|
+
placeholderDate: "GG/MM/AAAA",
|
|
1230
|
+
placeholderTime: "HH:MM",
|
|
1231
|
+
placeholderDateTime: "GG/MM/AAAA HH:MM",
|
|
1232
|
+
weekStartsOn: 1
|
|
1233
|
+
},
|
|
1234
|
+
pl: {
|
|
1235
|
+
locale: "pl-PL",
|
|
1236
|
+
dateFormat: "DD.MM.YYYY",
|
|
1237
|
+
timeFormat: "24",
|
|
1238
|
+
placeholderDate: "DD.MM.RRRR",
|
|
1239
|
+
placeholderTime: "HH:MM",
|
|
1240
|
+
placeholderDateTime: "DD.MM.RRRR HH:MM",
|
|
1241
|
+
weekStartsOn: 1
|
|
1242
|
+
},
|
|
1243
|
+
uk: {
|
|
1244
|
+
locale: "uk-UA",
|
|
1245
|
+
dateFormat: "DD.MM.YYYY",
|
|
1246
|
+
timeFormat: "24",
|
|
1247
|
+
placeholderDate: "\u0414\u0414.\u041C\u041C.\u0420\u0420\u0420\u0420",
|
|
1248
|
+
placeholderTime: "\u0413\u0413:\u0425\u0425",
|
|
1249
|
+
placeholderDateTime: "\u0414\u0414.\u041C\u041C.\u0420\u0420\u0420\u0420 \u0413\u0413:\u0425\u0425",
|
|
1250
|
+
weekStartsOn: 1
|
|
1251
|
+
}
|
|
1252
|
+
};
|
|
1253
|
+
function getLocaleConfig(langCode) {
|
|
1254
|
+
const code = (langCode || "en").toLowerCase().substring(0, 2);
|
|
1255
|
+
return LOCALE_CONFIGS[code] || LOCALE_CONFIGS.en;
|
|
1256
|
+
}
|
|
1257
|
+
function getMonthNames(langCode) {
|
|
1258
|
+
const config = getLocaleConfig(langCode);
|
|
1259
|
+
const formatter = new Intl.DateTimeFormat(config.locale, { month: "long" });
|
|
1260
|
+
return Array.from({ length: 12 }, (_, i) => {
|
|
1261
|
+
const d = new Date(2026, i, 15);
|
|
1262
|
+
const name = formatter.format(d);
|
|
1263
|
+
return name.charAt(0).toUpperCase() + name.slice(1);
|
|
1264
|
+
});
|
|
1265
|
+
}
|
|
1266
|
+
function getDayOfWeekShortNames(langCode) {
|
|
1267
|
+
const config = getLocaleConfig(langCode);
|
|
1268
|
+
const formatter = new Intl.DateTimeFormat(config.locale, { weekday: "short" });
|
|
1269
|
+
const baseSunday = new Date(2026, 4, 10);
|
|
1270
|
+
const days = [];
|
|
1271
|
+
for (let i = 0; i < 7; i++) {
|
|
1272
|
+
const d = new Date(baseSunday);
|
|
1273
|
+
d.setDate(baseSunday.getDate() + i);
|
|
1274
|
+
const dayStr = formatter.format(d);
|
|
1275
|
+
days.push(dayStr.charAt(0).toUpperCase() + dayStr.slice(1, 3));
|
|
1276
|
+
}
|
|
1277
|
+
if (config.weekStartsOn === 1) {
|
|
1278
|
+
const sunday = days.shift();
|
|
1279
|
+
days.push(sunday);
|
|
1280
|
+
}
|
|
1281
|
+
return days;
|
|
1282
|
+
}
|
|
1283
|
+
function applyInputMask(val, langCode, mode) {
|
|
1284
|
+
const config = getLocaleConfig(langCode);
|
|
1285
|
+
const isSlash = config.dateFormat.includes("/");
|
|
1286
|
+
const dateSep = isSlash ? "/" : ".";
|
|
1287
|
+
const digits = val.replace(/\D/g, "");
|
|
1288
|
+
if (mode === "date") {
|
|
1289
|
+
const d = digits.slice(0, 8);
|
|
1290
|
+
let res = "";
|
|
1291
|
+
if (d.length > 0) res += d.slice(0, 2);
|
|
1292
|
+
if (d.length >= 2) res += dateSep;
|
|
1293
|
+
if (d.length > 2) res += d.slice(2, 4);
|
|
1294
|
+
if (d.length >= 4) res += dateSep;
|
|
1295
|
+
if (d.length > 4) res += d.slice(4, 8);
|
|
1296
|
+
return res;
|
|
1297
|
+
} else if (mode === "time") {
|
|
1298
|
+
const t = digits.slice(0, 4);
|
|
1299
|
+
let res = "";
|
|
1300
|
+
if (t.length > 0) res += t.slice(0, 2);
|
|
1301
|
+
if (t.length >= 2) res += ":";
|
|
1302
|
+
if (t.length > 2) res += t.slice(2, 4);
|
|
1303
|
+
return res;
|
|
1304
|
+
} else {
|
|
1305
|
+
const dt = digits.slice(0, 12);
|
|
1306
|
+
let res = "";
|
|
1307
|
+
if (dt.length > 0) res += dt.slice(0, 2);
|
|
1308
|
+
if (dt.length >= 2) res += dateSep;
|
|
1309
|
+
if (dt.length > 2) res += dt.slice(2, 4);
|
|
1310
|
+
if (dt.length >= 4) res += dateSep;
|
|
1311
|
+
if (dt.length > 4) res += dt.slice(4, 8);
|
|
1312
|
+
if (dt.length > 8) res += " " + dt.slice(8, 10);
|
|
1313
|
+
if (dt.length >= 10) res += ":";
|
|
1314
|
+
if (dt.length > 10) res += dt.slice(10, 12);
|
|
1315
|
+
return res;
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
function parseDateFromMask(maskedStr, langCode, mode) {
|
|
1319
|
+
const config = getLocaleConfig(langCode);
|
|
1320
|
+
const digits = maskedStr.replace(/\D/g, "");
|
|
1321
|
+
if (mode === "date" && digits.length !== 8) return null;
|
|
1322
|
+
if (mode === "time" && digits.length !== 4) return null;
|
|
1323
|
+
if (mode === "datetime" && digits.length !== 12) return null;
|
|
1324
|
+
try {
|
|
1325
|
+
let day = 1, month = 0, year = 2026, hours = 0, minutes = 0;
|
|
1326
|
+
if (mode === "date" || mode === "datetime") {
|
|
1327
|
+
const isMMDD = config.dateFormat.startsWith("MM");
|
|
1328
|
+
if (isMMDD) {
|
|
1329
|
+
month = parseInt(digits.slice(0, 2), 10) - 1;
|
|
1330
|
+
day = parseInt(digits.slice(2, 4), 10);
|
|
1331
|
+
} else {
|
|
1332
|
+
day = parseInt(digits.slice(0, 2), 10);
|
|
1333
|
+
month = parseInt(digits.slice(2, 4), 10) - 1;
|
|
1334
|
+
}
|
|
1335
|
+
year = parseInt(digits.slice(4, 8), 10);
|
|
1336
|
+
if (month < 0 || month > 11) return null;
|
|
1337
|
+
if (day < 1 || day > 31) return null;
|
|
1338
|
+
if (year < 1900 || year > 2100) return null;
|
|
1339
|
+
}
|
|
1340
|
+
if (mode === "time") {
|
|
1341
|
+
hours = parseInt(digits.slice(0, 2), 10);
|
|
1342
|
+
minutes = parseInt(digits.slice(2, 4), 10);
|
|
1343
|
+
if (hours < 0 || hours > 23) return null;
|
|
1344
|
+
if (minutes < 0 || minutes > 59) return null;
|
|
1345
|
+
} else if (mode === "datetime") {
|
|
1346
|
+
hours = parseInt(digits.slice(8, 10), 10);
|
|
1347
|
+
minutes = parseInt(digits.slice(10, 12), 10);
|
|
1348
|
+
if (hours < 0 || hours > 23) return null;
|
|
1349
|
+
if (minutes < 0 || minutes > 59) return null;
|
|
1350
|
+
}
|
|
1351
|
+
const d = new Date(year, month, day, hours, minutes, 0);
|
|
1352
|
+
if (isNaN(d.getTime())) return null;
|
|
1353
|
+
if (mode !== "time" && (d.getDate() !== day || d.getMonth() !== month)) return null;
|
|
1354
|
+
return d;
|
|
1355
|
+
} catch {
|
|
1356
|
+
return null;
|
|
1357
|
+
}
|
|
1358
|
+
}
|
|
1359
|
+
function formatDateByLocale(date, langCode, mode) {
|
|
1360
|
+
if (!date || isNaN(date.getTime())) return "";
|
|
1361
|
+
const config = getLocaleConfig(langCode);
|
|
1362
|
+
try {
|
|
1363
|
+
if (mode === "date") {
|
|
1364
|
+
return new Intl.DateTimeFormat(config.locale, {
|
|
1365
|
+
day: "2-digit",
|
|
1366
|
+
month: "2-digit",
|
|
1367
|
+
year: "numeric"
|
|
1368
|
+
}).format(date);
|
|
1369
|
+
} else if (mode === "time") {
|
|
1370
|
+
return new Intl.DateTimeFormat(config.locale, {
|
|
1371
|
+
hour: "2-digit",
|
|
1372
|
+
minute: "2-digit",
|
|
1373
|
+
hour12: config.timeFormat === "12"
|
|
1374
|
+
}).format(date);
|
|
1375
|
+
} else {
|
|
1376
|
+
return new Intl.DateTimeFormat(config.locale, {
|
|
1377
|
+
day: "2-digit",
|
|
1378
|
+
month: "2-digit",
|
|
1379
|
+
year: "numeric",
|
|
1380
|
+
hour: "2-digit",
|
|
1381
|
+
minute: "2-digit",
|
|
1382
|
+
hour12: config.timeFormat === "12"
|
|
1383
|
+
}).format(date);
|
|
1384
|
+
}
|
|
1385
|
+
} catch (err) {
|
|
1386
|
+
return date.toISOString();
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
var DateTimePickerComponent = ({
|
|
1390
|
+
overrideNamespace,
|
|
1391
|
+
value = null,
|
|
1392
|
+
mode = "datetime",
|
|
1393
|
+
onDateChange,
|
|
1394
|
+
onChange,
|
|
1395
|
+
disabled = false,
|
|
1396
|
+
slotProps,
|
|
1397
|
+
copyTooltip = "Copy",
|
|
1398
|
+
copiedTooltip = "Copied!",
|
|
1399
|
+
clearTooltip = "Clear",
|
|
1400
|
+
lockTooltip = "Field is read-only",
|
|
1401
|
+
showLock = false,
|
|
1402
|
+
hideCopyButton = false,
|
|
1403
|
+
hideClearButton = false,
|
|
1404
|
+
error: customError,
|
|
1405
|
+
helperText: customHelperText,
|
|
1406
|
+
label,
|
|
1407
|
+
...props
|
|
1408
|
+
}) => {
|
|
1409
|
+
const namespace = "form_components";
|
|
1410
|
+
const { languages, currentLang } = useLocalization();
|
|
1411
|
+
const [isFocused, setIsFocused] = useState7(false);
|
|
1412
|
+
const [selectedDate, setSelectedDate] = useState7(() => {
|
|
1413
|
+
if (!value) return null;
|
|
1414
|
+
const d = typeof value === "string" ? new Date(value) : value;
|
|
1415
|
+
return isNaN(d.getTime()) ? null : d;
|
|
1416
|
+
});
|
|
1417
|
+
const activeLang = useMemo2(() => {
|
|
1418
|
+
return languages.find((l) => l.code.toLowerCase() === currentLang.toLowerCase()) || languages[0];
|
|
1419
|
+
}, [currentLang]);
|
|
1420
|
+
const [inputValue, setInputValue] = useState7(() => {
|
|
1421
|
+
return selectedDate ? formatDateByLocale(selectedDate, activeLang.code, mode) : "";
|
|
1422
|
+
});
|
|
1423
|
+
useEffect4(() => {
|
|
1424
|
+
if (value === null || value === "") {
|
|
1425
|
+
setSelectedDate(null);
|
|
1426
|
+
setInputValue("");
|
|
1427
|
+
} else {
|
|
1428
|
+
const parsed = typeof value === "string" ? new Date(value) : value;
|
|
1429
|
+
if (!isNaN(parsed.getTime())) {
|
|
1430
|
+
setSelectedDate(parsed);
|
|
1431
|
+
if (!isFocused) {
|
|
1432
|
+
setInputValue(formatDateByLocale(parsed, activeLang.code, mode));
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1435
|
+
}
|
|
1436
|
+
}, [value, activeLang.code, mode, isFocused]);
|
|
1437
|
+
const [anchorEl, setAnchorEl] = useState7(null);
|
|
1438
|
+
const [copied, setCopied] = useState7(false);
|
|
1439
|
+
const [inputError, setInputError] = useState7(false);
|
|
1440
|
+
const [viewDate, setViewDate] = useState7(() => selectedDate || /* @__PURE__ */ new Date());
|
|
1441
|
+
const localeConfig = useMemo2(() => getLocaleConfig(activeLang.code), [activeLang]);
|
|
1442
|
+
const placeholderText = useMemo2(() => {
|
|
1443
|
+
if (mode === "date") return localeConfig.placeholderDate;
|
|
1444
|
+
if (mode === "time") return localeConfig.placeholderTime;
|
|
1445
|
+
return localeConfig.placeholderDateTime;
|
|
1446
|
+
}, [mode, localeConfig]);
|
|
1447
|
+
const isReadOnly = Boolean(slotProps?.htmlInput?.readOnly);
|
|
1448
|
+
const isLocked = disabled || isReadOnly;
|
|
1449
|
+
const notifyChanges = (newDate, updateText = true) => {
|
|
1450
|
+
setSelectedDate(newDate);
|
|
1451
|
+
const formatted = formatDateByLocale(newDate, activeLang.code, mode);
|
|
1452
|
+
if (updateText) {
|
|
1453
|
+
setInputValue(formatted);
|
|
1454
|
+
}
|
|
1455
|
+
setInputError(false);
|
|
1456
|
+
const iso = newDate ? newDate.toISOString() : "";
|
|
1457
|
+
if (onDateChange) {
|
|
1458
|
+
onDateChange({
|
|
1459
|
+
date: newDate,
|
|
1460
|
+
formatted,
|
|
1461
|
+
iso,
|
|
1462
|
+
mode
|
|
1463
|
+
});
|
|
1464
|
+
}
|
|
1465
|
+
if (onChange) {
|
|
1466
|
+
const syntheticEvent = {
|
|
1467
|
+
target: { value: iso },
|
|
1468
|
+
currentTarget: { value: iso }
|
|
1469
|
+
};
|
|
1470
|
+
onChange(syntheticEvent);
|
|
1471
|
+
}
|
|
1472
|
+
};
|
|
1473
|
+
const handleManualInput = (e) => {
|
|
1474
|
+
const rawVal = e.target.value;
|
|
1475
|
+
const masked = applyInputMask(rawVal, activeLang.code, mode);
|
|
1476
|
+
setInputValue(masked);
|
|
1477
|
+
if (onChange) {
|
|
1478
|
+
onChange(e);
|
|
1479
|
+
}
|
|
1480
|
+
if (!masked.trim()) {
|
|
1481
|
+
notifyChanges(null, false);
|
|
1482
|
+
setInputError(false);
|
|
1483
|
+
return;
|
|
1484
|
+
}
|
|
1485
|
+
const parsedDate = parseDateFromMask(masked, activeLang.code, mode);
|
|
1486
|
+
if (parsedDate) {
|
|
1487
|
+
setInputError(false);
|
|
1488
|
+
notifyChanges(parsedDate, false);
|
|
1489
|
+
} else {
|
|
1490
|
+
const digits = masked.replace(/\D/g, "");
|
|
1491
|
+
const expectedDigits = mode === "date" ? 8 : mode === "time" ? 4 : 12;
|
|
1492
|
+
if (digits.length === expectedDigits) {
|
|
1493
|
+
setInputError(true);
|
|
1494
|
+
} else {
|
|
1495
|
+
setInputError(false);
|
|
1496
|
+
}
|
|
1497
|
+
if (onDateChange) {
|
|
1498
|
+
onDateChange({
|
|
1499
|
+
date: null,
|
|
1500
|
+
formatted: masked,
|
|
1501
|
+
iso: "",
|
|
1502
|
+
mode
|
|
1503
|
+
});
|
|
1504
|
+
}
|
|
1505
|
+
}
|
|
1506
|
+
};
|
|
1507
|
+
const handleOpenPicker = (event) => {
|
|
1508
|
+
if (isLocked) return;
|
|
1509
|
+
setViewDate(selectedDate || /* @__PURE__ */ new Date());
|
|
1510
|
+
setAnchorEl(event.currentTarget);
|
|
1511
|
+
};
|
|
1512
|
+
const handleClosePicker = () => {
|
|
1513
|
+
setAnchorEl(null);
|
|
1514
|
+
};
|
|
1515
|
+
const handleClear = (e) => {
|
|
1516
|
+
e.stopPropagation();
|
|
1517
|
+
notifyChanges(null, true);
|
|
1518
|
+
};
|
|
1519
|
+
const handleCopy = async (e) => {
|
|
1520
|
+
e.stopPropagation();
|
|
1521
|
+
if (!inputValue || copied) return;
|
|
1522
|
+
let success = false;
|
|
1523
|
+
if (navigator.clipboard && window.isSecureContext) {
|
|
1524
|
+
try {
|
|
1525
|
+
await navigator.clipboard.writeText(inputValue);
|
|
1526
|
+
success = true;
|
|
1527
|
+
} catch {
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
if (!success) {
|
|
1531
|
+
try {
|
|
1532
|
+
const textArea = document.createElement("textarea");
|
|
1533
|
+
textArea.value = inputValue;
|
|
1534
|
+
textArea.style.position = "fixed";
|
|
1535
|
+
textArea.style.left = "-999999px";
|
|
1536
|
+
document.body.appendChild(textArea);
|
|
1537
|
+
textArea.focus();
|
|
1538
|
+
textArea.select();
|
|
1539
|
+
success = document.execCommand("copy");
|
|
1540
|
+
document.body.removeChild(textArea);
|
|
1541
|
+
} catch (err) {
|
|
1542
|
+
console.warn("Copy fallback error", err);
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
if (success) {
|
|
1546
|
+
setCopied(true);
|
|
1547
|
+
setTimeout(() => setCopied(false), 2e3);
|
|
1548
|
+
}
|
|
1549
|
+
};
|
|
1550
|
+
const monthNames = useMemo2(() => getMonthNames(activeLang.code), [activeLang.code]);
|
|
1551
|
+
const dayShortNames = useMemo2(() => getDayOfWeekShortNames(activeLang.code), [activeLang.code]);
|
|
1552
|
+
const calendarGrid = useMemo2(() => {
|
|
1553
|
+
const year = viewDate.getFullYear();
|
|
1554
|
+
const month = viewDate.getMonth();
|
|
1555
|
+
const firstDayOfMonth = new Date(year, month, 1);
|
|
1556
|
+
const lastDayOfMonth = new Date(year, month + 1, 0);
|
|
1557
|
+
let startDayOfWeek = firstDayOfMonth.getDay();
|
|
1558
|
+
if (localeConfig.weekStartsOn === 1) {
|
|
1559
|
+
startDayOfWeek = (startDayOfWeek + 6) % 7;
|
|
1560
|
+
}
|
|
1561
|
+
const daysInMonth = lastDayOfMonth.getDate();
|
|
1562
|
+
const grid = [];
|
|
1563
|
+
for (let i = 0; i < startDayOfWeek; i++) {
|
|
1564
|
+
grid.push(null);
|
|
1565
|
+
}
|
|
1566
|
+
for (let d = 1; d <= daysInMonth; d++) {
|
|
1567
|
+
grid.push(new Date(year, month, d));
|
|
1568
|
+
}
|
|
1569
|
+
return grid;
|
|
1570
|
+
}, [viewDate, localeConfig.weekStartsOn]);
|
|
1571
|
+
const handleSelectDay = (day) => {
|
|
1572
|
+
const base = selectedDate ? new Date(selectedDate) : /* @__PURE__ */ new Date();
|
|
1573
|
+
base.setFullYear(day.getFullYear(), day.getMonth(), day.getDate());
|
|
1574
|
+
notifyChanges(base, true);
|
|
1575
|
+
if (mode === "date") {
|
|
1576
|
+
handleClosePicker();
|
|
1577
|
+
}
|
|
1578
|
+
};
|
|
1579
|
+
const handleTimeChange = (hours, minutes) => {
|
|
1580
|
+
const base = selectedDate ? new Date(selectedDate) : /* @__PURE__ */ new Date();
|
|
1581
|
+
base.setHours(hours);
|
|
1582
|
+
base.setMinutes(minutes);
|
|
1583
|
+
base.setSeconds(0);
|
|
1584
|
+
notifyChanges(base, true);
|
|
1585
|
+
};
|
|
1586
|
+
const isToday = (d) => {
|
|
1587
|
+
if (!d) return false;
|
|
1588
|
+
const now = /* @__PURE__ */ new Date();
|
|
1589
|
+
return d.getDate() === now.getDate() && d.getMonth() === now.getMonth() && d.getFullYear() === now.getFullYear();
|
|
1590
|
+
};
|
|
1591
|
+
const isSelected = (d) => {
|
|
1592
|
+
if (!d || !selectedDate) return false;
|
|
1593
|
+
return d.getDate() === selectedDate.getDate() && d.getMonth() === selectedDate.getMonth() && d.getFullYear() === selectedDate.getFullYear();
|
|
1594
|
+
};
|
|
1595
|
+
const getModeIcon = () => {
|
|
1596
|
+
if (mode === "date") return /* @__PURE__ */ jsx9(CalendarIcon, { fontSize: "small", color: "action" });
|
|
1597
|
+
if (mode === "time") return /* @__PURE__ */ jsx9(TimeIcon, { fontSize: "small", color: "action" });
|
|
1598
|
+
return /* @__PURE__ */ jsx9(DateTimeIcon, { fontSize: "small", color: "action" });
|
|
1599
|
+
};
|
|
1600
|
+
return /* @__PURE__ */ jsxs6(Box6, { sx: { width: "100%" }, children: [
|
|
1601
|
+
/* @__PURE__ */ jsx9(
|
|
1602
|
+
TextField4,
|
|
1603
|
+
{
|
|
1604
|
+
value: inputValue,
|
|
1605
|
+
onChange: handleManualInput,
|
|
1606
|
+
onFocus: (e) => {
|
|
1607
|
+
setIsFocused(true);
|
|
1608
|
+
if (props.onFocus) props.onFocus(e);
|
|
1609
|
+
},
|
|
1610
|
+
onBlur: (e) => {
|
|
1611
|
+
setIsFocused(false);
|
|
1612
|
+
if (selectedDate) {
|
|
1613
|
+
setInputValue(formatDateByLocale(selectedDate, activeLang.code, mode));
|
|
1614
|
+
}
|
|
1615
|
+
if (props.onBlur) props.onBlur(e);
|
|
1616
|
+
},
|
|
1617
|
+
disabled,
|
|
1618
|
+
placeholder: placeholderText,
|
|
1619
|
+
label,
|
|
1620
|
+
error: customError || inputError,
|
|
1621
|
+
margin: "dense",
|
|
1622
|
+
helperText: customHelperText || (inputError ? /* @__PURE__ */ jsx9(TranslateText, { overrideNamespace, children: "Invalid date or time format" }) : ""),
|
|
1623
|
+
sx: {
|
|
1624
|
+
"& .MuiInputLabel-asterisk": {
|
|
1625
|
+
color: "red",
|
|
1626
|
+
fontSize: "1.5rem"
|
|
1627
|
+
},
|
|
1628
|
+
"& .MuiInputBase-input": {
|
|
1629
|
+
color: isReadOnly ? "text.disabled" : void 0,
|
|
1630
|
+
fontWeight: 500,
|
|
1631
|
+
letterSpacing: "0.02em"
|
|
1632
|
+
}
|
|
1633
|
+
},
|
|
1634
|
+
...props,
|
|
1635
|
+
slotProps: {
|
|
1636
|
+
...slotProps,
|
|
1637
|
+
input: {
|
|
1638
|
+
...slotProps?.input || {},
|
|
1639
|
+
readOnly: isReadOnly,
|
|
1640
|
+
/* END ADORNMENT: Action Icons (Clear, Animated Copy, Lock, Trigger) */
|
|
1641
|
+
endAdornment: /* @__PURE__ */ jsxs6(InputAdornment6, { position: "end", sx: { gap: 0.5 }, children: [
|
|
1642
|
+
inputValue && !isLocked && !hideClearButton && /* @__PURE__ */ jsx9(TranslatableTooltipComponent, { title: clearTooltip, children: /* @__PURE__ */ jsx9(
|
|
1643
|
+
IconButton6,
|
|
1644
|
+
{
|
|
1645
|
+
size: "small",
|
|
1646
|
+
onClick: handleClear,
|
|
1647
|
+
edge: "end",
|
|
1648
|
+
"aria-label": "clear date input",
|
|
1649
|
+
children: /* @__PURE__ */ jsx9(ClearIcon3, { fontSize: "small" })
|
|
1650
|
+
}
|
|
1651
|
+
) }),
|
|
1652
|
+
inputValue && !hideCopyButton && /* @__PURE__ */ jsx9(TranslatableTooltipComponent, { title: copied ? copiedTooltip : copyTooltip, children: /* @__PURE__ */ jsx9(
|
|
1653
|
+
IconButton6,
|
|
1654
|
+
{
|
|
1655
|
+
size: "small",
|
|
1656
|
+
onClick: handleCopy,
|
|
1657
|
+
edge: "end",
|
|
1658
|
+
"aria-label": "copy date value",
|
|
1659
|
+
color: copied ? "success" : "default",
|
|
1660
|
+
children: /* @__PURE__ */ jsxs6(
|
|
1661
|
+
Box6,
|
|
1662
|
+
{
|
|
1663
|
+
sx: {
|
|
1664
|
+
display: "flex",
|
|
1665
|
+
alignItems: "center",
|
|
1666
|
+
justifyContent: "center",
|
|
1667
|
+
position: "relative",
|
|
1668
|
+
width: 20,
|
|
1669
|
+
height: 20
|
|
1670
|
+
},
|
|
1671
|
+
children: [
|
|
1672
|
+
/* @__PURE__ */ jsx9(
|
|
1673
|
+
ContentCopyIcon3,
|
|
1674
|
+
{
|
|
1675
|
+
fontSize: "small",
|
|
1676
|
+
sx: {
|
|
1677
|
+
position: "absolute",
|
|
1678
|
+
transition: "all 0.25s cubic-bezier(0.4, 0, 0.2, 1)",
|
|
1679
|
+
opacity: copied ? 0 : 1,
|
|
1680
|
+
transform: copied ? "scale(0.5) rotate(-45deg)" : "scale(1) rotate(0deg)"
|
|
1681
|
+
}
|
|
1682
|
+
}
|
|
1683
|
+
),
|
|
1684
|
+
/* @__PURE__ */ jsx9(
|
|
1685
|
+
CheckIcon3,
|
|
1686
|
+
{
|
|
1687
|
+
fontSize: "small",
|
|
1688
|
+
color: "success",
|
|
1689
|
+
sx: {
|
|
1690
|
+
position: "absolute",
|
|
1691
|
+
transition: "all 0.25s cubic-bezier(0.4, 0, 0.2, 1)",
|
|
1692
|
+
opacity: copied ? 1 : 0,
|
|
1693
|
+
transform: copied ? "scale(1) rotate(0deg)" : "scale(0.5) rotate(45deg)"
|
|
1694
|
+
}
|
|
1695
|
+
}
|
|
1696
|
+
)
|
|
1697
|
+
]
|
|
1698
|
+
}
|
|
1699
|
+
)
|
|
1700
|
+
}
|
|
1701
|
+
) }),
|
|
1702
|
+
!isLocked && /* @__PURE__ */ jsx9(
|
|
1703
|
+
IconButton6,
|
|
1704
|
+
{
|
|
1705
|
+
size: "small",
|
|
1706
|
+
onClick: handleOpenPicker,
|
|
1707
|
+
edge: "end",
|
|
1708
|
+
color: Boolean(anchorEl) ? "primary" : "default",
|
|
1709
|
+
children: getModeIcon()
|
|
1710
|
+
}
|
|
1711
|
+
),
|
|
1712
|
+
isLocked && showLock && /* @__PURE__ */ jsx9(TranslatableTooltipComponent, { title: lockTooltip, children: /* @__PURE__ */ jsx9(
|
|
1713
|
+
IconButton6,
|
|
1714
|
+
{
|
|
1715
|
+
size: "small",
|
|
1716
|
+
disabled: true,
|
|
1717
|
+
edge: "end",
|
|
1718
|
+
"aria-label": "locked input",
|
|
1719
|
+
sx: {
|
|
1720
|
+
"&.Mui-disabled": {
|
|
1721
|
+
color: "text.secondary"
|
|
1722
|
+
}
|
|
1723
|
+
},
|
|
1724
|
+
children: /* @__PURE__ */ jsx9(LockIcon3, { fontSize: "small" })
|
|
1725
|
+
}
|
|
1726
|
+
) }),
|
|
1727
|
+
slotProps?.input?.endAdornment
|
|
1728
|
+
] })
|
|
1729
|
+
}
|
|
1730
|
+
}
|
|
1731
|
+
}
|
|
1732
|
+
),
|
|
1733
|
+
/* @__PURE__ */ jsx9(
|
|
1734
|
+
Popover2,
|
|
1735
|
+
{
|
|
1736
|
+
open: Boolean(anchorEl),
|
|
1737
|
+
anchorEl,
|
|
1738
|
+
onClose: handleClosePicker,
|
|
1739
|
+
anchorOrigin: {
|
|
1740
|
+
vertical: "bottom",
|
|
1741
|
+
horizontal: "left"
|
|
1742
|
+
},
|
|
1743
|
+
transformOrigin: {
|
|
1744
|
+
vertical: "top",
|
|
1745
|
+
horizontal: "left"
|
|
1746
|
+
},
|
|
1747
|
+
slotProps: {
|
|
1748
|
+
paper: {
|
|
1749
|
+
elevation: 6,
|
|
1750
|
+
sx: {
|
|
1751
|
+
p: 2,
|
|
1752
|
+
width: 320,
|
|
1753
|
+
//borderRadius: 3,
|
|
1754
|
+
mt: 1,
|
|
1755
|
+
border: "1px solid",
|
|
1756
|
+
borderColor: "divider"
|
|
1757
|
+
}
|
|
1758
|
+
}
|
|
1759
|
+
},
|
|
1760
|
+
children: /* @__PURE__ */ jsxs6(Box6, { children: [
|
|
1761
|
+
mode !== "time" && /* @__PURE__ */ jsxs6(Box6, { children: [
|
|
1762
|
+
/* @__PURE__ */ jsxs6(Box6, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", mb: 1 }, children: [
|
|
1763
|
+
/* @__PURE__ */ jsx9(
|
|
1764
|
+
IconButton6,
|
|
1765
|
+
{
|
|
1766
|
+
size: "small",
|
|
1767
|
+
onClick: () => setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1)),
|
|
1768
|
+
children: /* @__PURE__ */ jsx9(ChevronLeftIcon, {})
|
|
1769
|
+
}
|
|
1770
|
+
),
|
|
1771
|
+
/* @__PURE__ */ jsxs6(Typography2, { variant: "body2", sx: { fontWeight: 700 }, children: [
|
|
1772
|
+
monthNames[viewDate.getMonth()],
|
|
1773
|
+
" ",
|
|
1774
|
+
viewDate.getFullYear()
|
|
1775
|
+
] }),
|
|
1776
|
+
/* @__PURE__ */ jsx9(
|
|
1777
|
+
IconButton6,
|
|
1778
|
+
{
|
|
1779
|
+
size: "small",
|
|
1780
|
+
onClick: () => setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1)),
|
|
1781
|
+
children: /* @__PURE__ */ jsx9(ChevronRightIcon, {})
|
|
1782
|
+
}
|
|
1783
|
+
)
|
|
1784
|
+
] }),
|
|
1785
|
+
/* @__PURE__ */ jsx9(Grid, { container: true, columns: 7, sx: { mb: 0.5, textAlign: "center" }, children: dayShortNames.map((dayName, idx) => /* @__PURE__ */ jsx9(Grid, { size: { xs: 1 }, children: /* @__PURE__ */ jsx9(
|
|
1786
|
+
Typography2,
|
|
1787
|
+
{
|
|
1788
|
+
variant: "caption",
|
|
1789
|
+
color: "secondary",
|
|
1790
|
+
sx: { fontSize: "0.7rem", fontWeight: 700 },
|
|
1791
|
+
children: dayName
|
|
1792
|
+
}
|
|
1793
|
+
) }, idx)) }),
|
|
1794
|
+
/* @__PURE__ */ jsx9(Grid, { container: true, columns: 7, spacing: 0.5, sx: { textAlign: "center", mb: 2 }, children: calendarGrid.map((day, idx) => /* @__PURE__ */ jsx9(Grid, { size: { xs: 1 }, children: day ? /* @__PURE__ */ jsx9(
|
|
1795
|
+
Button2,
|
|
1796
|
+
{
|
|
1797
|
+
size: "small",
|
|
1798
|
+
onClick: () => handleSelectDay(day),
|
|
1799
|
+
sx: {
|
|
1800
|
+
minWidth: 0,
|
|
1801
|
+
width: "100%",
|
|
1802
|
+
height: 32,
|
|
1803
|
+
p: 0,
|
|
1804
|
+
borderRadius: "50%",
|
|
1805
|
+
fontSize: "0.8rem",
|
|
1806
|
+
fontWeight: isSelected(day) || isToday(day) ? 700 : 400,
|
|
1807
|
+
bgcolor: isSelected(day) ? "primary.main" : isToday(day) ? "action.hover" : "transparent",
|
|
1808
|
+
color: isSelected(day) ? "primary.contrastText" : isToday(day) ? "primary.main" : "text.primary",
|
|
1809
|
+
border: isToday(day) && !isSelected(day) ? "1px solid" : "none",
|
|
1810
|
+
borderColor: "primary.main",
|
|
1811
|
+
"&:hover": {
|
|
1812
|
+
bgcolor: isSelected(day) ? "primary.dark" : "action.selected"
|
|
1813
|
+
}
|
|
1814
|
+
},
|
|
1815
|
+
children: day.getDate()
|
|
1816
|
+
}
|
|
1817
|
+
) : /* @__PURE__ */ jsx9(Box6, { sx: { height: 32 } }) }, idx)) })
|
|
1818
|
+
] }),
|
|
1819
|
+
mode !== "date" && /* @__PURE__ */ jsxs6(Box6, { sx: { pt: mode === "datetime" ? 1.5 : 0, borderTop: mode === "datetime" ? "1px solid" : "none", borderColor: "divider" }, children: [
|
|
1820
|
+
/* @__PURE__ */ jsxs6(Typography2, { variant: "caption", color: "secondary", sx: { fontWeight: 700, display: "block", mb: 1 }, children: [
|
|
1821
|
+
/* @__PURE__ */ jsx9(TranslateText, { overrideNamespace, children: `Time Selection (${localeConfig.timeFormat === "12" ? "12-hour AM/PM" : "24-hour format"})` }),
|
|
1822
|
+
":"
|
|
1823
|
+
] }),
|
|
1824
|
+
/* @__PURE__ */ jsxs6(Box6, { sx: { display: "flex", alignItems: "center", justifyContent: "center", gap: 1, my: 1 }, children: [
|
|
1825
|
+
/* @__PURE__ */ jsx9(
|
|
1826
|
+
Select2,
|
|
1827
|
+
{
|
|
1828
|
+
size: "small",
|
|
1829
|
+
value: (selectedDate || /* @__PURE__ */ new Date()).getHours(),
|
|
1830
|
+
onChange: (e) => handleTimeChange(Number(e.target.value), (selectedDate || /* @__PURE__ */ new Date()).getMinutes()),
|
|
1831
|
+
sx: { minWidth: 70 },
|
|
1832
|
+
children: Array.from({ length: 24 }, (_, i) => {
|
|
1833
|
+
let labelStr = i.toString().padStart(2, "0");
|
|
1834
|
+
if (localeConfig.timeFormat === "12") {
|
|
1835
|
+
const period = i >= 12 ? "PM" : "AM";
|
|
1836
|
+
const h12 = i % 12 || 12;
|
|
1837
|
+
labelStr = `${h12} ${period}`;
|
|
1838
|
+
}
|
|
1839
|
+
return /* @__PURE__ */ jsx9(MenuItem2, { value: i, children: labelStr }, i);
|
|
1840
|
+
})
|
|
1841
|
+
}
|
|
1842
|
+
),
|
|
1843
|
+
/* @__PURE__ */ jsx9(Typography2, { variant: "h6", sx: { fontWeight: 700 }, children: ":" }),
|
|
1844
|
+
/* @__PURE__ */ jsx9(
|
|
1845
|
+
Select2,
|
|
1846
|
+
{
|
|
1847
|
+
size: "small",
|
|
1848
|
+
value: Math.floor((selectedDate || /* @__PURE__ */ new Date()).getMinutes() / 5) * 5,
|
|
1849
|
+
onChange: (e) => handleTimeChange((selectedDate || /* @__PURE__ */ new Date()).getHours(), Number(e.target.value)),
|
|
1850
|
+
sx: { minWidth: 70 },
|
|
1851
|
+
children: Array.from({ length: 12 }, (_, i) => i * 5).map((m) => /* @__PURE__ */ jsx9(MenuItem2, { value: m, children: m.toString().padStart(2, "0") }, m))
|
|
1852
|
+
}
|
|
1853
|
+
)
|
|
1854
|
+
] })
|
|
1855
|
+
] }),
|
|
1856
|
+
/* @__PURE__ */ jsx9(Divider, { sx: { my: 1.5 } }),
|
|
1857
|
+
/* @__PURE__ */ jsxs6(Box6, { sx: { display: "flex", flexWrap: "wrap", gap: 1, justifyContent: "space-between" }, children: [
|
|
1858
|
+
/* @__PURE__ */ jsx9(
|
|
1859
|
+
Button2,
|
|
1860
|
+
{
|
|
1861
|
+
size: "small",
|
|
1862
|
+
variant: "outlined",
|
|
1863
|
+
startIcon: /* @__PURE__ */ jsx9(TodayIcon, { fontSize: "inherit" }),
|
|
1864
|
+
onClick: () => {
|
|
1865
|
+
const now = /* @__PURE__ */ new Date();
|
|
1866
|
+
notifyChanges(now, true);
|
|
1867
|
+
if (mode === "date") handleClosePicker();
|
|
1868
|
+
},
|
|
1869
|
+
sx: { fontSize: "0.72rem", py: 0.3 },
|
|
1870
|
+
children: /* @__PURE__ */ jsx9(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Now" })
|
|
1871
|
+
}
|
|
1872
|
+
),
|
|
1873
|
+
/* @__PURE__ */ jsx9(
|
|
1874
|
+
Button2,
|
|
1875
|
+
{
|
|
1876
|
+
size: "small",
|
|
1877
|
+
variant: "contained",
|
|
1878
|
+
onClick: handleClosePicker,
|
|
1879
|
+
sx: { fontSize: "0.72rem", py: 0.3 },
|
|
1880
|
+
children: /* @__PURE__ */ jsx9(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Done" })
|
|
1881
|
+
}
|
|
1882
|
+
)
|
|
1883
|
+
] })
|
|
1884
|
+
] })
|
|
1885
|
+
}
|
|
1886
|
+
)
|
|
1887
|
+
] });
|
|
1888
|
+
};
|
|
1889
|
+
|
|
1160
1890
|
// src/UI/components/buttons/ButtonComponent.tsx
|
|
1161
1891
|
import { forwardRef } from "react";
|
|
1162
|
-
import { Button as
|
|
1163
|
-
import { jsx as
|
|
1892
|
+
import { Button as Button3 } from "@mui/material";
|
|
1893
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
1164
1894
|
var ButtonComponent = forwardRef(
|
|
1165
1895
|
({ label, children, overrideNamespace, ...props }, ref) => {
|
|
1166
1896
|
const renderContent = (content) => {
|
|
1167
1897
|
if (typeof content === "string") {
|
|
1168
|
-
return /* @__PURE__ */
|
|
1898
|
+
return /* @__PURE__ */ jsx10(TranslateText, { overrideNamespace, children: content });
|
|
1169
1899
|
}
|
|
1170
1900
|
return content;
|
|
1171
1901
|
};
|
|
1172
1902
|
const contentToRender = label !== void 0 ? label : children;
|
|
1173
|
-
return /* @__PURE__ */
|
|
1903
|
+
return /* @__PURE__ */ jsx10(Button3, { ref, ...props, children: renderContent(contentToRender) });
|
|
1174
1904
|
}
|
|
1175
1905
|
);
|
|
1176
1906
|
ButtonComponent.displayName = "ButtonComponent";
|
|
1177
1907
|
|
|
1178
1908
|
// src/UI/components/buttons/RefreshButtonComponent.tsx
|
|
1179
|
-
import { useState as
|
|
1909
|
+
import { useState as useState8 } from "react";
|
|
1180
1910
|
import {
|
|
1181
|
-
Button as
|
|
1911
|
+
Button as Button4,
|
|
1182
1912
|
Fab,
|
|
1183
1913
|
styled
|
|
1184
1914
|
} from "@mui/material";
|
|
1185
1915
|
import RefreshIconMui from "@mui/icons-material/Refresh";
|
|
1186
|
-
import { Fragment as Fragment5, jsx as
|
|
1916
|
+
import { Fragment as Fragment5, jsx as jsx11 } from "react/jsx-runtime";
|
|
1187
1917
|
var AnimatedRefreshIcon = styled(RefreshIconMui, {
|
|
1188
1918
|
shouldForwardProp: (prop) => prop !== "isSpinning"
|
|
1189
1919
|
})(({ isSpinning }) => ({
|
|
@@ -1211,7 +1941,7 @@ var RefreshButtonComponent = ({
|
|
|
1211
1941
|
hideTooltipOnDesktop
|
|
1212
1942
|
}) => {
|
|
1213
1943
|
const { displayState } = useAppTheme();
|
|
1214
|
-
const [internalLoading, setInternalLoading] =
|
|
1944
|
+
const [internalLoading, setInternalLoading] = useState8(false);
|
|
1215
1945
|
const isLoading = externalLoading !== void 0 ? externalLoading : internalLoading;
|
|
1216
1946
|
const handleClick = async (event) => {
|
|
1217
1947
|
if (!onClick || isLoading || disabled) return;
|
|
@@ -1222,9 +1952,9 @@ var RefreshButtonComponent = ({
|
|
|
1222
1952
|
setInternalLoading(false);
|
|
1223
1953
|
}
|
|
1224
1954
|
};
|
|
1225
|
-
const renderIcon = () => /* @__PURE__ */
|
|
1955
|
+
const renderIcon = () => /* @__PURE__ */ jsx11(AnimatedRefreshIcon, { fontSize: size, isSpinning: isLoading });
|
|
1226
1956
|
if (displayState.isMobile && !disableMobileView || mobileViewOnly) {
|
|
1227
|
-
return /* @__PURE__ */
|
|
1957
|
+
return /* @__PURE__ */ jsx11(TranslatableTooltipComponent, { title: hideTooltipOnMobile ? /* @__PURE__ */ jsx11(Fragment5, {}) : tooltip || /* @__PURE__ */ jsx11(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), children: /* @__PURE__ */ jsx11("span", { children: /* @__PURE__ */ jsx11(
|
|
1228
1958
|
Fab,
|
|
1229
1959
|
{
|
|
1230
1960
|
size,
|
|
@@ -1236,8 +1966,8 @@ var RefreshButtonComponent = ({
|
|
|
1236
1966
|
}
|
|
1237
1967
|
) }) });
|
|
1238
1968
|
}
|
|
1239
|
-
return /* @__PURE__ */
|
|
1240
|
-
|
|
1969
|
+
return /* @__PURE__ */ jsx11(TranslatableTooltipComponent, { title: hideTooltipOnDesktop ? /* @__PURE__ */ jsx11(Fragment5, {}) : tooltip || /* @__PURE__ */ jsx11(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), children: /* @__PURE__ */ jsx11(
|
|
1970
|
+
Button4,
|
|
1241
1971
|
{
|
|
1242
1972
|
variant: "contained",
|
|
1243
1973
|
color: "inherit",
|
|
@@ -1246,15 +1976,15 @@ var RefreshButtonComponent = ({
|
|
|
1246
1976
|
disabled: disabled || isLoading,
|
|
1247
1977
|
fullWidth,
|
|
1248
1978
|
startIcon: renderIcon(),
|
|
1249
|
-
children: /* @__PURE__ */
|
|
1979
|
+
children: /* @__PURE__ */ jsx11(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" })
|
|
1250
1980
|
}
|
|
1251
1981
|
) });
|
|
1252
1982
|
};
|
|
1253
1983
|
|
|
1254
1984
|
// src/UI/components/data.display/UserAvatarComponent.tsx
|
|
1255
|
-
import { useState as
|
|
1256
|
-
import { Avatar, Tooltip as Tooltip5, Typography as
|
|
1257
|
-
import { Fragment as Fragment6, jsx as
|
|
1985
|
+
import { useState as useState9, useEffect as useEffect5, lazy, Suspense } from "react";
|
|
1986
|
+
import { Avatar, Tooltip as Tooltip5, Typography as Typography3 } from "@mui/material";
|
|
1987
|
+
import { Fragment as Fragment6, jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1258
1988
|
var LazyUserPopover = lazy(() => import("./UserPopoverComponent-VFSZ5ZO2.mjs"));
|
|
1259
1989
|
var getInitials = (name) => {
|
|
1260
1990
|
if (!name) return "?";
|
|
@@ -1277,11 +2007,11 @@ var UserAvatarComponent = ({
|
|
|
1277
2007
|
sx = {}
|
|
1278
2008
|
}) => {
|
|
1279
2009
|
const supabase = useSupabase();
|
|
1280
|
-
const [anchorEl, setAnchorEl] =
|
|
1281
|
-
const [hasInteracted, setHasInteracted] =
|
|
1282
|
-
const [resolvedAvatarUrl, setResolvedAvatarUrl] =
|
|
2010
|
+
const [anchorEl, setAnchorEl] = useState9(null);
|
|
2011
|
+
const [hasInteracted, setHasInteracted] = useState9(false);
|
|
2012
|
+
const [resolvedAvatarUrl, setResolvedAvatarUrl] = useState9(null);
|
|
1283
2013
|
const canShowPopover = !disablePopover && Boolean(userId);
|
|
1284
|
-
|
|
2014
|
+
useEffect5(() => {
|
|
1285
2015
|
let isMounted = true;
|
|
1286
2016
|
const resolveAvatar = async () => {
|
|
1287
2017
|
if (!avatarUrl) {
|
|
@@ -1326,12 +2056,12 @@ var UserAvatarComponent = ({
|
|
|
1326
2056
|
};
|
|
1327
2057
|
const isPopoverOpen = Boolean(anchorEl);
|
|
1328
2058
|
const initials = getInitials(displayName || "");
|
|
1329
|
-
const getTooltip = /* @__PURE__ */
|
|
1330
|
-
/* @__PURE__ */
|
|
1331
|
-
displayName && employeePost && /* @__PURE__ */
|
|
2059
|
+
const getTooltip = /* @__PURE__ */ jsxs7(Fragment6, { children: [
|
|
2060
|
+
/* @__PURE__ */ jsx12(Typography3, { component: "div", variant: "caption", children: displayName }),
|
|
2061
|
+
displayName && employeePost && /* @__PURE__ */ jsx12(Typography3, { component: "div", variant: "caption", children: employeePost })
|
|
1332
2062
|
] });
|
|
1333
|
-
return /* @__PURE__ */
|
|
1334
|
-
/* @__PURE__ */
|
|
2063
|
+
return /* @__PURE__ */ jsxs7(Fragment6, { children: [
|
|
2064
|
+
/* @__PURE__ */ jsx12(Tooltip5, { title: disableTooltip || isPopoverOpen ? "" : getTooltip, children: /* @__PURE__ */ jsx12(
|
|
1335
2065
|
Avatar,
|
|
1336
2066
|
{
|
|
1337
2067
|
src: resolvedAvatarUrl || void 0,
|
|
@@ -1357,7 +2087,7 @@ var UserAvatarComponent = ({
|
|
|
1357
2087
|
children: !resolvedAvatarUrl && initials
|
|
1358
2088
|
}
|
|
1359
2089
|
) }),
|
|
1360
|
-
canShowPopover && hasInteracted && /* @__PURE__ */
|
|
2090
|
+
canShowPopover && hasInteracted && /* @__PURE__ */ jsx12(Suspense, { fallback: null, children: /* @__PURE__ */ jsx12(
|
|
1361
2091
|
LazyUserPopover,
|
|
1362
2092
|
{
|
|
1363
2093
|
userId,
|
|
@@ -1370,9 +2100,9 @@ var UserAvatarComponent = ({
|
|
|
1370
2100
|
};
|
|
1371
2101
|
|
|
1372
2102
|
// src/UI/components/data.display/MyAvatarComponent.tsx
|
|
1373
|
-
import { useState as
|
|
1374
|
-
import { Avatar as Avatar2, Box as
|
|
1375
|
-
import { Fragment as Fragment7, jsx as
|
|
2103
|
+
import { useState as useState10 } from "react";
|
|
2104
|
+
import { Avatar as Avatar2, Box as Box7, Popover as Popover3, Typography as Typography4, Skeleton } from "@mui/material";
|
|
2105
|
+
import { Fragment as Fragment7, jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1376
2106
|
var getInitials2 = (name) => {
|
|
1377
2107
|
if (!name) return "?";
|
|
1378
2108
|
const parts = name.trim().split(" ");
|
|
@@ -1389,7 +2119,7 @@ var MyAvatarComponent = ({
|
|
|
1389
2119
|
sx = {}
|
|
1390
2120
|
}) => {
|
|
1391
2121
|
const { profile: userProfile, loading: isLoading } = useAuth();
|
|
1392
|
-
const [anchorEl, setAnchorEl] =
|
|
2122
|
+
const [anchorEl, setAnchorEl] = useState10(null);
|
|
1393
2123
|
const handlePopoverOpen = (event) => {
|
|
1394
2124
|
if (!disablePopover) {
|
|
1395
2125
|
setAnchorEl(event.currentTarget);
|
|
@@ -1400,7 +2130,7 @@ var MyAvatarComponent = ({
|
|
|
1400
2130
|
};
|
|
1401
2131
|
const isPopoverOpen = Boolean(anchorEl);
|
|
1402
2132
|
if (isLoading) {
|
|
1403
|
-
return /* @__PURE__ */
|
|
2133
|
+
return /* @__PURE__ */ jsx13(
|
|
1404
2134
|
Skeleton,
|
|
1405
2135
|
{
|
|
1406
2136
|
variant: "circular",
|
|
@@ -1411,8 +2141,8 @@ var MyAvatarComponent = ({
|
|
|
1411
2141
|
);
|
|
1412
2142
|
}
|
|
1413
2143
|
const initials = getInitials2(userProfile?.display_name || "");
|
|
1414
|
-
return /* @__PURE__ */
|
|
1415
|
-
/* @__PURE__ */
|
|
2144
|
+
return /* @__PURE__ */ jsxs8(Fragment7, { children: [
|
|
2145
|
+
/* @__PURE__ */ jsx13(
|
|
1416
2146
|
Avatar2,
|
|
1417
2147
|
{
|
|
1418
2148
|
src: userProfile?.avatar_url || void 0,
|
|
@@ -1439,8 +2169,8 @@ var MyAvatarComponent = ({
|
|
|
1439
2169
|
children: !userProfile?.avatar_url && initials
|
|
1440
2170
|
}
|
|
1441
2171
|
),
|
|
1442
|
-
!disablePopover && /* @__PURE__ */
|
|
1443
|
-
|
|
2172
|
+
!disablePopover && /* @__PURE__ */ jsx13(
|
|
2173
|
+
Popover3,
|
|
1444
2174
|
{
|
|
1445
2175
|
id: `avatar-popover-${userProfile?.id}`,
|
|
1446
2176
|
open: isPopoverOpen,
|
|
@@ -1470,9 +2200,9 @@ var MyAvatarComponent = ({
|
|
|
1470
2200
|
}
|
|
1471
2201
|
}
|
|
1472
2202
|
},
|
|
1473
|
-
children: /* @__PURE__ */
|
|
1474
|
-
/* @__PURE__ */
|
|
1475
|
-
userProfile?.email && /* @__PURE__ */
|
|
2203
|
+
children: /* @__PURE__ */ jsxs8(Box7, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 0.5 }, children: [
|
|
2204
|
+
/* @__PURE__ */ jsx13(Typography4, { variant: "subtitle2", sx: { fontWeight: 600 }, children: userProfile?.display_name }),
|
|
2205
|
+
userProfile?.email && /* @__PURE__ */ jsx13(Typography4, { variant: "caption", color: "text.secondary", children: userProfile.email })
|
|
1476
2206
|
] })
|
|
1477
2207
|
}
|
|
1478
2208
|
)
|
|
@@ -1480,9 +2210,9 @@ var MyAvatarComponent = ({
|
|
|
1480
2210
|
};
|
|
1481
2211
|
|
|
1482
2212
|
// src/UI/components/data.display/ExpandableNoteComponent.tsx
|
|
1483
|
-
import { useState as
|
|
1484
|
-
import { Typography as
|
|
1485
|
-
import { Fragment as Fragment8, jsx as
|
|
2213
|
+
import { useState as useState11 } from "react";
|
|
2214
|
+
import { Typography as Typography5, Link } from "@mui/material";
|
|
2215
|
+
import { Fragment as Fragment8, jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1486
2216
|
var ExpandableNoteComponent = ({
|
|
1487
2217
|
overrideNamespace,
|
|
1488
2218
|
text,
|
|
@@ -1491,7 +2221,7 @@ var ExpandableNoteComponent = ({
|
|
|
1491
2221
|
sx,
|
|
1492
2222
|
...restProps
|
|
1493
2223
|
}) => {
|
|
1494
|
-
const [isExpanded, setIsExpanded] =
|
|
2224
|
+
const [isExpanded, setIsExpanded] = useState11(false);
|
|
1495
2225
|
if (!text) return null;
|
|
1496
2226
|
const isLong = text.length > maxLength;
|
|
1497
2227
|
const displayedText = isExpanded || !isLong ? text : `${text.slice(0, maxLength).trim()}...`;
|
|
@@ -1499,8 +2229,8 @@ var ExpandableNoteComponent = ({
|
|
|
1499
2229
|
e.stopPropagation();
|
|
1500
2230
|
setIsExpanded((prev) => !prev);
|
|
1501
2231
|
};
|
|
1502
|
-
return /* @__PURE__ */
|
|
1503
|
-
|
|
2232
|
+
return /* @__PURE__ */ jsxs9(
|
|
2233
|
+
Typography5,
|
|
1504
2234
|
{
|
|
1505
2235
|
variant: "caption",
|
|
1506
2236
|
sx: {
|
|
@@ -1511,14 +2241,14 @@ var ExpandableNoteComponent = ({
|
|
|
1511
2241
|
},
|
|
1512
2242
|
...restProps,
|
|
1513
2243
|
children: [
|
|
1514
|
-
label !== void 0 ? label : /* @__PURE__ */
|
|
1515
|
-
/* @__PURE__ */
|
|
2244
|
+
label !== void 0 ? label : /* @__PURE__ */ jsxs9(Fragment8, { children: [
|
|
2245
|
+
/* @__PURE__ */ jsx14(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Note" }),
|
|
1516
2246
|
": "
|
|
1517
2247
|
] }),
|
|
1518
2248
|
" ",
|
|
1519
2249
|
displayedText,
|
|
1520
2250
|
" ",
|
|
1521
|
-
isLong && /* @__PURE__ */
|
|
2251
|
+
isLong && /* @__PURE__ */ jsx14(
|
|
1522
2252
|
Link,
|
|
1523
2253
|
{
|
|
1524
2254
|
component: "button",
|
|
@@ -1533,8 +2263,8 @@ var ExpandableNoteComponent = ({
|
|
|
1533
2263
|
cursor: "pointer",
|
|
1534
2264
|
verticalAlign: "baseline"
|
|
1535
2265
|
},
|
|
1536
|
-
children: isExpanded ? /* @__PURE__ */
|
|
1537
|
-
/* @__PURE__ */
|
|
2266
|
+
children: isExpanded ? /* @__PURE__ */ jsx14(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "less" }) : /* @__PURE__ */ jsxs9(Fragment8, { children: [
|
|
2267
|
+
/* @__PURE__ */ jsx14(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "more" }),
|
|
1538
2268
|
"..."
|
|
1539
2269
|
] })
|
|
1540
2270
|
}
|
|
@@ -1545,15 +2275,15 @@ var ExpandableNoteComponent = ({
|
|
|
1545
2275
|
};
|
|
1546
2276
|
|
|
1547
2277
|
// src/UI/components/data.display/ErrorAlertComponent.tsx
|
|
1548
|
-
import { Alert, Box as
|
|
2278
|
+
import { Alert, Box as Box8, Button as Button5, Typography as Typography6, useTheme } from "@mui/material";
|
|
1549
2279
|
import ReplayIcon from "@mui/icons-material/Replay";
|
|
1550
|
-
import { jsx as
|
|
2280
|
+
import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1551
2281
|
var ErrorIllustration = ({ size = 64 }) => {
|
|
1552
2282
|
const theme = useTheme();
|
|
1553
2283
|
const mainColor = theme.palette.error.main;
|
|
1554
2284
|
const lightColor = theme.palette.error.light;
|
|
1555
|
-
return /* @__PURE__ */
|
|
1556
|
-
|
|
2285
|
+
return /* @__PURE__ */ jsx15(
|
|
2286
|
+
Box8,
|
|
1557
2287
|
{
|
|
1558
2288
|
sx: {
|
|
1559
2289
|
display: "flex",
|
|
@@ -1561,7 +2291,7 @@ var ErrorIllustration = ({ size = 64 }) => {
|
|
|
1561
2291
|
justifyContent: "center",
|
|
1562
2292
|
flexShrink: 0
|
|
1563
2293
|
},
|
|
1564
|
-
children: /* @__PURE__ */
|
|
2294
|
+
children: /* @__PURE__ */ jsxs10(
|
|
1565
2295
|
"svg",
|
|
1566
2296
|
{
|
|
1567
2297
|
width: size,
|
|
@@ -1570,7 +2300,7 @@ var ErrorIllustration = ({ size = 64 }) => {
|
|
|
1570
2300
|
fill: "none",
|
|
1571
2301
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1572
2302
|
children: [
|
|
1573
|
-
/* @__PURE__ */
|
|
2303
|
+
/* @__PURE__ */ jsxs10(
|
|
1574
2304
|
"circle",
|
|
1575
2305
|
{
|
|
1576
2306
|
cx: "50",
|
|
@@ -1579,7 +2309,7 @@ var ErrorIllustration = ({ size = 64 }) => {
|
|
|
1579
2309
|
fill: lightColor,
|
|
1580
2310
|
fillOpacity: "0.25",
|
|
1581
2311
|
children: [
|
|
1582
|
-
/* @__PURE__ */
|
|
2312
|
+
/* @__PURE__ */ jsx15(
|
|
1583
2313
|
"animate",
|
|
1584
2314
|
{
|
|
1585
2315
|
attributeName: "r",
|
|
@@ -1588,7 +2318,7 @@ var ErrorIllustration = ({ size = 64 }) => {
|
|
|
1588
2318
|
repeatCount: "indefinite"
|
|
1589
2319
|
}
|
|
1590
2320
|
),
|
|
1591
|
-
/* @__PURE__ */
|
|
2321
|
+
/* @__PURE__ */ jsx15(
|
|
1592
2322
|
"animate",
|
|
1593
2323
|
{
|
|
1594
2324
|
attributeName: "fill-opacity",
|
|
@@ -1600,8 +2330,8 @@ var ErrorIllustration = ({ size = 64 }) => {
|
|
|
1600
2330
|
]
|
|
1601
2331
|
}
|
|
1602
2332
|
),
|
|
1603
|
-
/* @__PURE__ */
|
|
1604
|
-
/* @__PURE__ */
|
|
2333
|
+
/* @__PURE__ */ jsx15("circle", { cx: "50", cy: "50", r: "34", fill: lightColor, fillOpacity: "0.35" }),
|
|
2334
|
+
/* @__PURE__ */ jsx15(
|
|
1605
2335
|
"path",
|
|
1606
2336
|
{
|
|
1607
2337
|
d: "M50 20L80 72H20L50 20Z",
|
|
@@ -1611,7 +2341,7 @@ var ErrorIllustration = ({ size = 64 }) => {
|
|
|
1611
2341
|
strokeLinejoin: "round"
|
|
1612
2342
|
}
|
|
1613
2343
|
),
|
|
1614
|
-
/* @__PURE__ */
|
|
2344
|
+
/* @__PURE__ */ jsx15(
|
|
1615
2345
|
"path",
|
|
1616
2346
|
{
|
|
1617
2347
|
d: "M50 36V54",
|
|
@@ -1620,10 +2350,10 @@ var ErrorIllustration = ({ size = 64 }) => {
|
|
|
1620
2350
|
strokeLinecap: "round"
|
|
1621
2351
|
}
|
|
1622
2352
|
),
|
|
1623
|
-
/* @__PURE__ */
|
|
1624
|
-
/* @__PURE__ */
|
|
1625
|
-
/* @__PURE__ */
|
|
1626
|
-
/* @__PURE__ */
|
|
2353
|
+
/* @__PURE__ */ jsx15("circle", { cx: "50", cy: "62", r: "2.5", fill: "#FFFFFF" }),
|
|
2354
|
+
/* @__PURE__ */ jsx15("circle", { cx: "16", cy: "30", r: "3", fill: mainColor, opacity: "0.4" }),
|
|
2355
|
+
/* @__PURE__ */ jsx15("circle", { cx: "84", cy: "30", r: "2", fill: mainColor, opacity: "0.6" }),
|
|
2356
|
+
/* @__PURE__ */ jsx15("circle", { cx: "88", cy: "68", r: "3", fill: mainColor, opacity: "0.3" })
|
|
1627
2357
|
]
|
|
1628
2358
|
}
|
|
1629
2359
|
)
|
|
@@ -1638,7 +2368,7 @@ var ErrorAlertComponent = ({
|
|
|
1638
2368
|
retryText = "Retry",
|
|
1639
2369
|
isRetrying = false
|
|
1640
2370
|
}) => {
|
|
1641
|
-
return /* @__PURE__ */
|
|
2371
|
+
return /* @__PURE__ */ jsx15(
|
|
1642
2372
|
Alert,
|
|
1643
2373
|
{
|
|
1644
2374
|
severity: "error",
|
|
@@ -1656,8 +2386,8 @@ var ErrorAlertComponent = ({
|
|
|
1656
2386
|
p: 0
|
|
1657
2387
|
}
|
|
1658
2388
|
},
|
|
1659
|
-
children: /* @__PURE__ */
|
|
1660
|
-
|
|
2389
|
+
children: /* @__PURE__ */ jsxs10(
|
|
2390
|
+
Box8,
|
|
1661
2391
|
{
|
|
1662
2392
|
sx: {
|
|
1663
2393
|
display: "flex",
|
|
@@ -1666,34 +2396,34 @@ var ErrorAlertComponent = ({
|
|
|
1666
2396
|
gap: 2
|
|
1667
2397
|
},
|
|
1668
2398
|
children: [
|
|
1669
|
-
/* @__PURE__ */
|
|
1670
|
-
/* @__PURE__ */
|
|
1671
|
-
typeof title === "string" ? /* @__PURE__ */
|
|
1672
|
-
|
|
2399
|
+
/* @__PURE__ */ jsx15(ErrorIllustration, { size: 68 }),
|
|
2400
|
+
/* @__PURE__ */ jsxs10(Box8, { sx: { flexGrow: 1 }, children: [
|
|
2401
|
+
typeof title === "string" ? /* @__PURE__ */ jsx15(
|
|
2402
|
+
Typography6,
|
|
1673
2403
|
{
|
|
1674
2404
|
variant: "subtitle1",
|
|
1675
2405
|
sx: { fontWeight: 600, color: "error.main", mb: 0.5 },
|
|
1676
|
-
children: /* @__PURE__ */
|
|
2406
|
+
children: /* @__PURE__ */ jsx15(TranslateText, { overrideNamespace, children: title })
|
|
1677
2407
|
}
|
|
1678
2408
|
) : title,
|
|
1679
|
-
typeof message === "string" ? /* @__PURE__ */
|
|
2409
|
+
typeof message === "string" ? /* @__PURE__ */ jsx15(Typography6, { variant: "body2", color: "text.secondary", children: /* @__PURE__ */ jsx15(TranslateText, { overrideNamespace, children: message }) }) : message
|
|
1680
2410
|
] }),
|
|
1681
|
-
onRetry && /* @__PURE__ */
|
|
1682
|
-
|
|
2411
|
+
onRetry && /* @__PURE__ */ jsx15(
|
|
2412
|
+
Box8,
|
|
1683
2413
|
{
|
|
1684
2414
|
sx: {
|
|
1685
2415
|
alignSelf: { xs: "flex-end", sm: "center" },
|
|
1686
2416
|
mt: { xs: 1, sm: 0 }
|
|
1687
2417
|
},
|
|
1688
|
-
children: /* @__PURE__ */
|
|
1689
|
-
|
|
2418
|
+
children: /* @__PURE__ */ jsx15(
|
|
2419
|
+
Button5,
|
|
1690
2420
|
{
|
|
1691
2421
|
variant: "outlined",
|
|
1692
2422
|
color: "error",
|
|
1693
2423
|
size: "small",
|
|
1694
2424
|
disabled: isRetrying,
|
|
1695
2425
|
onClick: onRetry,
|
|
1696
|
-
startIcon: /* @__PURE__ */
|
|
2426
|
+
startIcon: /* @__PURE__ */ jsx15(
|
|
1697
2427
|
ReplayIcon,
|
|
1698
2428
|
{
|
|
1699
2429
|
sx: {
|
|
@@ -1725,11 +2455,11 @@ var ErrorAlertComponent = ({
|
|
|
1725
2455
|
);
|
|
1726
2456
|
};
|
|
1727
2457
|
|
|
1728
|
-
// src/UI/components/data.display/
|
|
1729
|
-
import { useRef, useState as
|
|
1730
|
-
import { Typography as
|
|
1731
|
-
import { jsx as
|
|
1732
|
-
var
|
|
2458
|
+
// src/UI/components/data.display/TruncatedTypographyComponent.tsx
|
|
2459
|
+
import { useRef, useState as useState12, useEffect as useEffect6 } from "react";
|
|
2460
|
+
import { Typography as Typography7 } from "@mui/material";
|
|
2461
|
+
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
2462
|
+
var TruncatedTypographyComponent = ({
|
|
1733
2463
|
children,
|
|
1734
2464
|
lines = 1,
|
|
1735
2465
|
tooltipProps,
|
|
@@ -1738,7 +2468,7 @@ var TruncatedTypography = ({
|
|
|
1738
2468
|
...typographyProps
|
|
1739
2469
|
}) => {
|
|
1740
2470
|
const textRef = useRef(null);
|
|
1741
|
-
const [isTruncated, setIsTruncated] =
|
|
2471
|
+
const [isTruncated, setIsTruncated] = useState12(false);
|
|
1742
2472
|
const checkOverflow = () => {
|
|
1743
2473
|
const element = textRef.current;
|
|
1744
2474
|
if (!element) return;
|
|
@@ -1748,7 +2478,7 @@ var TruncatedTypography = ({
|
|
|
1748
2478
|
setIsTruncated(element.scrollHeight > element.clientHeight);
|
|
1749
2479
|
}
|
|
1750
2480
|
};
|
|
1751
|
-
|
|
2481
|
+
useEffect6(() => {
|
|
1752
2482
|
checkOverflow();
|
|
1753
2483
|
window.addEventListener("resize", checkOverflow);
|
|
1754
2484
|
return () => window.removeEventListener("resize", checkOverflow);
|
|
@@ -1766,14 +2496,14 @@ var TruncatedTypography = ({
|
|
|
1766
2496
|
whiteSpace: "nowrap"
|
|
1767
2497
|
};
|
|
1768
2498
|
const textContent = typeof children === "string" ? children : void 0;
|
|
1769
|
-
return /* @__PURE__ */
|
|
2499
|
+
return /* @__PURE__ */ jsx16(
|
|
1770
2500
|
TranslatableTooltipComponent,
|
|
1771
2501
|
{
|
|
1772
2502
|
title: alwaysShowTooltip || isTruncated ? textContent || children : "",
|
|
1773
2503
|
disableHoverListener: !alwaysShowTooltip && !isTruncated,
|
|
1774
2504
|
...tooltipProps,
|
|
1775
|
-
children: /* @__PURE__ */
|
|
1776
|
-
|
|
2505
|
+
children: /* @__PURE__ */ jsx16(
|
|
2506
|
+
Typography7,
|
|
1777
2507
|
{
|
|
1778
2508
|
ref: textRef,
|
|
1779
2509
|
sx: {
|
|
@@ -1789,17 +2519,17 @@ var TruncatedTypography = ({
|
|
|
1789
2519
|
};
|
|
1790
2520
|
|
|
1791
2521
|
// src/UI/components/layout/PageComponent.tsx
|
|
1792
|
-
import
|
|
2522
|
+
import React12, { useState as useState13 } from "react";
|
|
1793
2523
|
import {
|
|
1794
|
-
Box as
|
|
1795
|
-
Typography as
|
|
1796
|
-
Button as
|
|
1797
|
-
IconButton as
|
|
2524
|
+
Box as Box9,
|
|
2525
|
+
Typography as Typography8,
|
|
2526
|
+
Button as Button6,
|
|
2527
|
+
IconButton as IconButton7,
|
|
1798
2528
|
Menu,
|
|
1799
|
-
MenuItem as
|
|
2529
|
+
MenuItem as MenuItem3,
|
|
1800
2530
|
ListItemIcon,
|
|
1801
2531
|
ListItemText as ListItemText2,
|
|
1802
|
-
Divider,
|
|
2532
|
+
Divider as Divider2,
|
|
1803
2533
|
Tooltip as Tooltip6,
|
|
1804
2534
|
useTheme as useTheme2,
|
|
1805
2535
|
useMediaQuery,
|
|
@@ -1809,7 +2539,7 @@ import {
|
|
|
1809
2539
|
import MoreVertIcon from "@mui/icons-material/MoreVert";
|
|
1810
2540
|
import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown";
|
|
1811
2541
|
import { Refresh as RefreshIcon } from "@mui/icons-material";
|
|
1812
|
-
import { Fragment as Fragment9, jsx as
|
|
2542
|
+
import { Fragment as Fragment9, jsx as jsx17, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1813
2543
|
var getTruncateStyles = (mode = "truncate") => {
|
|
1814
2544
|
switch (mode) {
|
|
1815
2545
|
case "truncate":
|
|
@@ -1840,7 +2570,7 @@ var PageHeader = ({
|
|
|
1840
2570
|
const theme = useTheme2();
|
|
1841
2571
|
const mediaIsMobile = useMediaQuery(theme.breakpoints.down(mobileBreakpoint));
|
|
1842
2572
|
const isMobile = forceMobileView ?? mediaIsMobile;
|
|
1843
|
-
const [anchorEl, setAnchorEl] =
|
|
2573
|
+
const [anchorEl, setAnchorEl] = useState13(null);
|
|
1844
2574
|
const isMenuOpen = Boolean(anchorEl);
|
|
1845
2575
|
const handleOpenMenu = (e) => setAnchorEl(e.currentTarget);
|
|
1846
2576
|
const handleCloseMenu = () => setAnchorEl(null);
|
|
@@ -1850,8 +2580,8 @@ var PageHeader = ({
|
|
|
1850
2580
|
};
|
|
1851
2581
|
const hasSecondaryActions = secondaryActions.length > 0;
|
|
1852
2582
|
const hasActions = Boolean(primaryAction || hasSecondaryActions || refreshAction);
|
|
1853
|
-
return /* @__PURE__ */
|
|
1854
|
-
|
|
2583
|
+
return /* @__PURE__ */ jsxs11(
|
|
2584
|
+
Box9,
|
|
1855
2585
|
{
|
|
1856
2586
|
sx: [
|
|
1857
2587
|
{
|
|
@@ -1869,9 +2599,9 @@ var PageHeader = ({
|
|
|
1869
2599
|
...Array.isArray(sx) ? sx : [sx]
|
|
1870
2600
|
],
|
|
1871
2601
|
children: [
|
|
1872
|
-
/* @__PURE__ */
|
|
1873
|
-
icon && /* @__PURE__ */
|
|
1874
|
-
|
|
2602
|
+
/* @__PURE__ */ jsxs11(Box9, { sx: { display: "flex", alignItems: "center", gap: { xs: 1.5, sm: 2 }, minWidth: 0, flex: 1 }, children: [
|
|
2603
|
+
icon && /* @__PURE__ */ jsx17(
|
|
2604
|
+
Box9,
|
|
1875
2605
|
{
|
|
1876
2606
|
sx: {
|
|
1877
2607
|
display: "flex",
|
|
@@ -1890,10 +2620,10 @@ var PageHeader = ({
|
|
|
1890
2620
|
children: icon
|
|
1891
2621
|
}
|
|
1892
2622
|
),
|
|
1893
|
-
/* @__PURE__ */
|
|
1894
|
-
tag && /* @__PURE__ */
|
|
1895
|
-
/* @__PURE__ */
|
|
1896
|
-
|
|
2623
|
+
/* @__PURE__ */ jsxs11(Box9, { sx: { minWidth: 0, flex: 1 }, children: [
|
|
2624
|
+
tag && /* @__PURE__ */ jsx17(Box9, { sx: { mb: 0.5, display: "flex", alignItems: "center" }, children: tag }),
|
|
2625
|
+
/* @__PURE__ */ jsx17(Tooltip6, { title: titleTruncateMode === "truncate" ? /* @__PURE__ */ jsx17(TranslateText, { children: title }) : void 0, arrow: true, placement: "top", children: /* @__PURE__ */ jsx17(
|
|
2626
|
+
Typography8,
|
|
1897
2627
|
{
|
|
1898
2628
|
variant: "h5",
|
|
1899
2629
|
component: "h1",
|
|
@@ -1904,11 +2634,11 @@ var PageHeader = ({
|
|
|
1904
2634
|
lineHeight: 1.3,
|
|
1905
2635
|
...getTruncateStyles(titleTruncateMode)
|
|
1906
2636
|
},
|
|
1907
|
-
children: /* @__PURE__ */
|
|
2637
|
+
children: /* @__PURE__ */ jsx17(TranslateText, { children: title })
|
|
1908
2638
|
}
|
|
1909
2639
|
) }),
|
|
1910
|
-
subtitle && /* @__PURE__ */
|
|
1911
|
-
|
|
2640
|
+
subtitle && /* @__PURE__ */ jsx17(Tooltip6, { title: subtitleTruncateMode === "truncate" ? /* @__PURE__ */ jsx17(TranslateText, { children: subtitle }) : void 0, arrow: true, placement: "top", children: /* @__PURE__ */ jsx17(
|
|
2641
|
+
Typography8,
|
|
1912
2642
|
{
|
|
1913
2643
|
variant: "body2",
|
|
1914
2644
|
sx: {
|
|
@@ -1918,23 +2648,23 @@ var PageHeader = ({
|
|
|
1918
2648
|
lineHeight: 1.4,
|
|
1919
2649
|
...getTruncateStyles(subtitleTruncateMode)
|
|
1920
2650
|
},
|
|
1921
|
-
children: /* @__PURE__ */
|
|
2651
|
+
children: /* @__PURE__ */ jsx17(TranslateText, { children: subtitle })
|
|
1922
2652
|
}
|
|
1923
2653
|
) })
|
|
1924
2654
|
] })
|
|
1925
2655
|
] }),
|
|
1926
|
-
hasActions && /* @__PURE__ */
|
|
2656
|
+
hasActions && /* @__PURE__ */ jsx17(Box9, { sx: { flexShrink: 0, display: "flex", alignItems: "center", gap: 1 }, children: isMobile ? (
|
|
1927
2657
|
/* MOBILE: IconButton with MoreVertIcon showing ALL actions inside Menu */
|
|
1928
|
-
/* @__PURE__ */
|
|
1929
|
-
/* @__PURE__ */
|
|
1930
|
-
|
|
2658
|
+
/* @__PURE__ */ jsxs11(Fragment9, { children: [
|
|
2659
|
+
/* @__PURE__ */ jsx17(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx17(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Actions" }), children: /* @__PURE__ */ jsx17(
|
|
2660
|
+
IconButton7,
|
|
1931
2661
|
{
|
|
1932
2662
|
onClick: handleOpenMenu,
|
|
1933
2663
|
sx: { border: "1px solid", borderColor: "divider", borderRadius: 2, p: 1 },
|
|
1934
|
-
children: /* @__PURE__ */
|
|
2664
|
+
children: /* @__PURE__ */ jsx17(MoreVertIcon, {})
|
|
1935
2665
|
}
|
|
1936
2666
|
) }),
|
|
1937
|
-
/* @__PURE__ */
|
|
2667
|
+
/* @__PURE__ */ jsxs11(
|
|
1938
2668
|
Menu,
|
|
1939
2669
|
{
|
|
1940
2670
|
anchorEl,
|
|
@@ -1944,9 +2674,9 @@ var PageHeader = ({
|
|
|
1944
2674
|
anchorOrigin: { horizontal: "right", vertical: "bottom" },
|
|
1945
2675
|
slotProps: { paper: { elevation: 4, sx: { minWidth: 200, borderRadius: 2, mt: 1, p: 0.5 } } },
|
|
1946
2676
|
children: [
|
|
1947
|
-
primaryAction && /* @__PURE__ */
|
|
1948
|
-
/* @__PURE__ */
|
|
1949
|
-
|
|
2677
|
+
primaryAction && /* @__PURE__ */ jsxs11(Fragment9, { children: [
|
|
2678
|
+
/* @__PURE__ */ jsxs11(
|
|
2679
|
+
MenuItem3,
|
|
1950
2680
|
{
|
|
1951
2681
|
onClick: () => handleMenuAction(primaryAction.onClick),
|
|
1952
2682
|
disabled: primaryAction.disabled,
|
|
@@ -1959,32 +2689,32 @@ var PageHeader = ({
|
|
|
1959
2689
|
px: 1.5
|
|
1960
2690
|
},
|
|
1961
2691
|
children: [
|
|
1962
|
-
primaryAction.icon && /* @__PURE__ */
|
|
1963
|
-
/* @__PURE__ */
|
|
2692
|
+
primaryAction.icon && /* @__PURE__ */ jsx17(ListItemIcon, { sx: { color: "inherit", minWidth: 32 }, children: primaryAction.icon }),
|
|
2693
|
+
/* @__PURE__ */ jsx17(ListItemText2, { primary: /* @__PURE__ */ jsx17(TranslateText, { children: primaryAction.label }), slotProps: { primary: { sx: { fontWeight: 700, fontSize: "0.9rem" } } } })
|
|
1964
2694
|
]
|
|
1965
2695
|
}
|
|
1966
2696
|
),
|
|
1967
|
-
hasSecondaryActions && /* @__PURE__ */
|
|
2697
|
+
hasSecondaryActions && /* @__PURE__ */ jsx17(Divider2, { sx: { my: 0.75 } })
|
|
1968
2698
|
] }),
|
|
1969
|
-
secondaryActions.map((action) => /* @__PURE__ */
|
|
1970
|
-
action.divider && /* @__PURE__ */
|
|
1971
|
-
/* @__PURE__ */
|
|
1972
|
-
|
|
2699
|
+
secondaryActions.map((action) => /* @__PURE__ */ jsxs11(React12.Fragment, { children: [
|
|
2700
|
+
action.divider && /* @__PURE__ */ jsx17(Divider2, { sx: { my: 0.5 } }),
|
|
2701
|
+
/* @__PURE__ */ jsxs11(
|
|
2702
|
+
MenuItem3,
|
|
1973
2703
|
{
|
|
1974
2704
|
onClick: () => handleMenuAction(action.onClick),
|
|
1975
2705
|
disabled: action.disabled,
|
|
1976
2706
|
sx: { borderRadius: 1, py: 1, px: 1.5, color: action.color ? `${action.color}.main` : "text.primary" },
|
|
1977
2707
|
children: [
|
|
1978
|
-
action.icon && /* @__PURE__ */
|
|
1979
|
-
/* @__PURE__ */
|
|
2708
|
+
action.icon && /* @__PURE__ */ jsx17(ListItemIcon, { sx: { color: action.color ? `${action.color}.main` : "text.secondary", minWidth: 32 }, children: action.icon }),
|
|
2709
|
+
/* @__PURE__ */ jsx17(ListItemText2, { primary: action.label, slotProps: { primary: { sx: { fontSize: "0.875rem" } } } })
|
|
1980
2710
|
]
|
|
1981
2711
|
}
|
|
1982
2712
|
)
|
|
1983
2713
|
] }, action.id)),
|
|
1984
|
-
refreshAction && /* @__PURE__ */
|
|
1985
|
-
/* @__PURE__ */
|
|
1986
|
-
/* @__PURE__ */
|
|
1987
|
-
|
|
2714
|
+
refreshAction && /* @__PURE__ */ jsxs11(Fragment9, { children: [
|
|
2715
|
+
/* @__PURE__ */ jsx17(Divider2, { sx: { my: 0.5 } }),
|
|
2716
|
+
/* @__PURE__ */ jsxs11(
|
|
2717
|
+
MenuItem3,
|
|
1988
2718
|
{
|
|
1989
2719
|
onClick: () => handleMenuAction(refreshAction.onClick),
|
|
1990
2720
|
disabled: refreshAction.disabled,
|
|
@@ -1996,8 +2726,8 @@ var PageHeader = ({
|
|
|
1996
2726
|
px: 1.5
|
|
1997
2727
|
},
|
|
1998
2728
|
children: [
|
|
1999
|
-
/* @__PURE__ */
|
|
2000
|
-
/* @__PURE__ */
|
|
2729
|
+
/* @__PURE__ */ jsx17(ListItemIcon, { sx: { color: "inherit", minWidth: 32 }, children: /* @__PURE__ */ jsx17(RefreshIcon, {}) }),
|
|
2730
|
+
/* @__PURE__ */ jsx17(ListItemText2, { primary: /* @__PURE__ */ jsx17(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), slotProps: { primary: { sx: { fontWeight: 700, fontSize: "0.9rem" } } } })
|
|
2001
2731
|
]
|
|
2002
2732
|
}
|
|
2003
2733
|
)
|
|
@@ -2008,10 +2738,10 @@ var PageHeader = ({
|
|
|
2008
2738
|
] })
|
|
2009
2739
|
) : (
|
|
2010
2740
|
/* DESKTOP: Primary Action Button + Secondary Actions Dropdown Button */
|
|
2011
|
-
/* @__PURE__ */
|
|
2012
|
-
(primaryAction || refreshAction) && /* @__PURE__ */
|
|
2013
|
-
primaryAction && /* @__PURE__ */
|
|
2014
|
-
|
|
2741
|
+
/* @__PURE__ */ jsxs11(Box9, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
|
|
2742
|
+
(primaryAction || refreshAction) && /* @__PURE__ */ jsxs11(Stack, { direction: "row", spacing: 2, children: [
|
|
2743
|
+
primaryAction && /* @__PURE__ */ jsx17(
|
|
2744
|
+
Button6,
|
|
2015
2745
|
{
|
|
2016
2746
|
variant: primaryAction.variant || "contained",
|
|
2017
2747
|
color: primaryAction.color || "primary",
|
|
@@ -2019,10 +2749,10 @@ var PageHeader = ({
|
|
|
2019
2749
|
disabled: primaryAction.disabled,
|
|
2020
2750
|
startIcon: primaryAction.icon,
|
|
2021
2751
|
sx: { borderRadius: 2, textTransform: "none", fontWeight: 600, px: 2, py: 0.85 },
|
|
2022
|
-
children: /* @__PURE__ */
|
|
2752
|
+
children: /* @__PURE__ */ jsx17(TranslateText, { children: primaryAction.label })
|
|
2023
2753
|
}
|
|
2024
2754
|
),
|
|
2025
|
-
refreshAction && /* @__PURE__ */
|
|
2755
|
+
refreshAction && /* @__PURE__ */ jsx17(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx17(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), children: /* @__PURE__ */ jsx17(
|
|
2026
2756
|
Fab2,
|
|
2027
2757
|
{
|
|
2028
2758
|
color: "default",
|
|
@@ -2030,20 +2760,20 @@ var PageHeader = ({
|
|
|
2030
2760
|
disabled: refreshAction.disabled,
|
|
2031
2761
|
"aria-label": "refresh",
|
|
2032
2762
|
size: "small",
|
|
2033
|
-
children: /* @__PURE__ */
|
|
2763
|
+
children: /* @__PURE__ */ jsx17(RefreshIcon, {})
|
|
2034
2764
|
}
|
|
2035
2765
|
) })
|
|
2036
2766
|
] }),
|
|
2037
|
-
hasSecondaryActions && /* @__PURE__ */
|
|
2038
|
-
/* @__PURE__ */
|
|
2039
|
-
|
|
2767
|
+
hasSecondaryActions && /* @__PURE__ */ jsxs11(Fragment9, { children: [
|
|
2768
|
+
/* @__PURE__ */ jsx17(
|
|
2769
|
+
IconButton7,
|
|
2040
2770
|
{
|
|
2041
2771
|
onClick: handleOpenMenu,
|
|
2042
2772
|
sx: { border: "1px solid", borderColor: "divider", borderRadius: 2, p: 1 },
|
|
2043
|
-
children: /* @__PURE__ */
|
|
2773
|
+
children: /* @__PURE__ */ jsx17(KeyboardArrowDownIcon, {})
|
|
2044
2774
|
}
|
|
2045
2775
|
),
|
|
2046
|
-
/* @__PURE__ */
|
|
2776
|
+
/* @__PURE__ */ jsx17(
|
|
2047
2777
|
Menu,
|
|
2048
2778
|
{
|
|
2049
2779
|
anchorEl,
|
|
@@ -2052,17 +2782,17 @@ var PageHeader = ({
|
|
|
2052
2782
|
transformOrigin: { horizontal: "right", vertical: "top" },
|
|
2053
2783
|
anchorOrigin: { horizontal: "right", vertical: "bottom" },
|
|
2054
2784
|
slotProps: { paper: { elevation: 4, sx: { minWidth: 180, borderRadius: 2, mt: 1, p: 0.5 } } },
|
|
2055
|
-
children: secondaryActions.map((action) => /* @__PURE__ */
|
|
2056
|
-
action.divider && /* @__PURE__ */
|
|
2057
|
-
/* @__PURE__ */
|
|
2058
|
-
|
|
2785
|
+
children: secondaryActions.map((action) => /* @__PURE__ */ jsxs11(React12.Fragment, { children: [
|
|
2786
|
+
action.divider && /* @__PURE__ */ jsx17(Divider2, { sx: { my: 0.5 } }),
|
|
2787
|
+
/* @__PURE__ */ jsxs11(
|
|
2788
|
+
MenuItem3,
|
|
2059
2789
|
{
|
|
2060
2790
|
onClick: () => handleMenuAction(action.onClick),
|
|
2061
2791
|
disabled: action.disabled,
|
|
2062
2792
|
sx: { borderRadius: 1, py: 0.85, color: action.color ? `${action.color}.main` : "text.primary" },
|
|
2063
2793
|
children: [
|
|
2064
|
-
action.icon && /* @__PURE__ */
|
|
2065
|
-
/* @__PURE__ */
|
|
2794
|
+
action.icon && /* @__PURE__ */ jsx17(ListItemIcon, { sx: { color: action.color ? `${action.color}.main` : "text.secondary", minWidth: 32 }, children: action.icon }),
|
|
2795
|
+
/* @__PURE__ */ jsx17(ListItemText2, { primary: action.label, slotProps: { primary: { sx: { fontSize: "0.875rem" } } } })
|
|
2066
2796
|
]
|
|
2067
2797
|
}
|
|
2068
2798
|
)
|
|
@@ -2072,14 +2802,14 @@ var PageHeader = ({
|
|
|
2072
2802
|
] })
|
|
2073
2803
|
] })
|
|
2074
2804
|
) }),
|
|
2075
|
-
customFragment && /* @__PURE__ */
|
|
2805
|
+
customFragment && /* @__PURE__ */ jsx17(Fragment9, { children: customFragment })
|
|
2076
2806
|
]
|
|
2077
2807
|
}
|
|
2078
2808
|
);
|
|
2079
2809
|
};
|
|
2080
2810
|
var PageContainer = ({ children }) => {
|
|
2081
|
-
return /* @__PURE__ */
|
|
2082
|
-
|
|
2811
|
+
return /* @__PURE__ */ jsx17(
|
|
2812
|
+
Box9,
|
|
2083
2813
|
{
|
|
2084
2814
|
sx: {
|
|
2085
2815
|
width: "100%",
|
|
@@ -2095,8 +2825,8 @@ var PageComponent = ({
|
|
|
2095
2825
|
header,
|
|
2096
2826
|
children
|
|
2097
2827
|
}) => {
|
|
2098
|
-
return /* @__PURE__ */
|
|
2099
|
-
|
|
2828
|
+
return /* @__PURE__ */ jsx17(
|
|
2829
|
+
Box9,
|
|
2100
2830
|
{
|
|
2101
2831
|
sx: {
|
|
2102
2832
|
//pt: 2,
|
|
@@ -2105,8 +2835,8 @@ var PageComponent = ({
|
|
|
2105
2835
|
overflowY: "auto",
|
|
2106
2836
|
boxSizing: "border-box"
|
|
2107
2837
|
},
|
|
2108
|
-
children: /* @__PURE__ */
|
|
2109
|
-
header && /* @__PURE__ */
|
|
2838
|
+
children: /* @__PURE__ */ jsxs11(PageContainer, { children: [
|
|
2839
|
+
header && /* @__PURE__ */ jsx17(PageHeader, { ...header }),
|
|
2110
2840
|
children
|
|
2111
2841
|
] })
|
|
2112
2842
|
}
|
|
@@ -2114,15 +2844,15 @@ var PageComponent = ({
|
|
|
2114
2844
|
};
|
|
2115
2845
|
|
|
2116
2846
|
// src/UI/components/layout/FilterContainerComponent.tsx
|
|
2117
|
-
import
|
|
2118
|
-
import { Grid, Paper } from "@mui/material";
|
|
2119
|
-
import { jsx as
|
|
2847
|
+
import React13 from "react";
|
|
2848
|
+
import { Grid as Grid2, Paper } from "@mui/material";
|
|
2849
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
2120
2850
|
var FilterContainerComponent = ({
|
|
2121
2851
|
sections,
|
|
2122
2852
|
children,
|
|
2123
2853
|
sx
|
|
2124
2854
|
}) => {
|
|
2125
|
-
return /* @__PURE__ */
|
|
2855
|
+
return /* @__PURE__ */ jsx18(
|
|
2126
2856
|
Paper,
|
|
2127
2857
|
{
|
|
2128
2858
|
variant: "outlined",
|
|
@@ -2130,7 +2860,7 @@ var FilterContainerComponent = ({
|
|
|
2130
2860
|
{ p: 2, mb: 3 },
|
|
2131
2861
|
...Array.isArray(sx) ? sx : [sx]
|
|
2132
2862
|
],
|
|
2133
|
-
children: /* @__PURE__ */
|
|
2863
|
+
children: /* @__PURE__ */ jsx18(Grid2, { container: true, spacing: 2, sx: { alignItems: "center" }, children: sections ? sections.map((sec, idx) => /* @__PURE__ */ jsx18(React13.Fragment, { children: sec }, idx)) : children })
|
|
2134
2864
|
}
|
|
2135
2865
|
);
|
|
2136
2866
|
};
|
|
@@ -2138,22 +2868,22 @@ var FilterContainerComponent = ({
|
|
|
2138
2868
|
// src/UI/components/layout/PageLinkComponent.tsx
|
|
2139
2869
|
import { ArrowRight, Settings } from "@mui/icons-material";
|
|
2140
2870
|
import {
|
|
2141
|
-
Button as
|
|
2871
|
+
Button as Button7,
|
|
2142
2872
|
Card,
|
|
2143
2873
|
CardActions,
|
|
2144
2874
|
CardContent,
|
|
2145
2875
|
CardHeader,
|
|
2146
|
-
Divider as
|
|
2876
|
+
Divider as Divider3,
|
|
2147
2877
|
List,
|
|
2148
2878
|
ListItem,
|
|
2149
2879
|
ListItemIcon as ListItemIcon2,
|
|
2150
2880
|
ListItemText as ListItemText3,
|
|
2151
|
-
Typography as
|
|
2881
|
+
Typography as Typography9,
|
|
2152
2882
|
Link as MuiLink
|
|
2153
2883
|
} from "@mui/material";
|
|
2154
|
-
import
|
|
2884
|
+
import React14 from "react";
|
|
2155
2885
|
import { Link as RouterLink, useNavigate } from "react-router-dom";
|
|
2156
|
-
import { jsx as
|
|
2886
|
+
import { jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
2157
2887
|
var PageLinkComponent = ({
|
|
2158
2888
|
overrideNamespace,
|
|
2159
2889
|
title,
|
|
@@ -2166,7 +2896,7 @@ var PageLinkComponent = ({
|
|
|
2166
2896
|
bgcolor
|
|
2167
2897
|
}) => {
|
|
2168
2898
|
const navigate = useNavigate();
|
|
2169
|
-
return /* @__PURE__ */
|
|
2899
|
+
return /* @__PURE__ */ jsxs12(
|
|
2170
2900
|
Card,
|
|
2171
2901
|
{
|
|
2172
2902
|
sx: (theme) => ({
|
|
@@ -2180,20 +2910,20 @@ var PageLinkComponent = ({
|
|
|
2180
2910
|
) : typeof bgcolor === "function" ? theme.palette.getContrastText(bgcolor(theme)) : theme.palette.getContrastText(bgcolor) : "text.primary"
|
|
2181
2911
|
}),
|
|
2182
2912
|
children: [
|
|
2183
|
-
/* @__PURE__ */
|
|
2913
|
+
/* @__PURE__ */ jsx19(
|
|
2184
2914
|
CardHeader,
|
|
2185
2915
|
{
|
|
2186
|
-
avatar: icon ?
|
|
2916
|
+
avatar: icon ? React14.cloneElement(icon, {
|
|
2187
2917
|
sx: { color: bgcolor ? "inherit" : "primary", ...icon.props.sx }
|
|
2188
|
-
}) : /* @__PURE__ */
|
|
2189
|
-
title: /* @__PURE__ */
|
|
2190
|
-
subheader: subheader && /* @__PURE__ */
|
|
2918
|
+
}) : /* @__PURE__ */ jsx19(Settings, { color: bgcolor ? "inherit" : "primary" }),
|
|
2919
|
+
title: /* @__PURE__ */ jsx19(Typography9, { variant: "h6", component: "div", color: "inherit", children: typeof title === "string" ? /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace, children: title }) : title }),
|
|
2920
|
+
subheader: subheader && /* @__PURE__ */ jsx19(Typography9, { variant: "body2", sx: { opacity: 0.8, color: "inherit" }, children: typeof subheader === "string" ? /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace, children: subheader }) : subheader })
|
|
2191
2921
|
}
|
|
2192
2922
|
),
|
|
2193
|
-
/* @__PURE__ */
|
|
2194
|
-
/* @__PURE__ */
|
|
2195
|
-
/* @__PURE__ */
|
|
2196
|
-
links && links.length > 0 && /* @__PURE__ */
|
|
2923
|
+
/* @__PURE__ */ jsx19(Divider3, { sx: { borderColor: "inherit", opacity: 0.2 } }),
|
|
2924
|
+
/* @__PURE__ */ jsxs12(CardContent, { sx: { flexGrow: 1 }, children: [
|
|
2925
|
+
/* @__PURE__ */ jsx19(Typography9, { variant: "body2", sx: { opacity: 0.85, color: "inherit" }, children: typeof description === "string" ? /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace, children: description }) : description }),
|
|
2926
|
+
links && links.length > 0 && /* @__PURE__ */ jsx19(List, { dense: true, disablePadding: true, children: links.filter((f) => !f.hidden).map((link, index) => /* @__PURE__ */ jsxs12(
|
|
2197
2927
|
ListItem,
|
|
2198
2928
|
{
|
|
2199
2929
|
disablePadding: true,
|
|
@@ -2205,18 +2935,18 @@ var PageLinkComponent = ({
|
|
|
2205
2935
|
}
|
|
2206
2936
|
},
|
|
2207
2937
|
children: [
|
|
2208
|
-
/* @__PURE__ */
|
|
2938
|
+
/* @__PURE__ */ jsx19(
|
|
2209
2939
|
ListItemIcon2,
|
|
2210
2940
|
{
|
|
2211
2941
|
sx: { minWidth: 30, cursor: "pointer", color: "inherit" },
|
|
2212
2942
|
onClick: () => {
|
|
2213
2943
|
if (link?.href) navigate(link.href);
|
|
2214
2944
|
},
|
|
2215
|
-
children: /* @__PURE__ */
|
|
2945
|
+
children: /* @__PURE__ */ jsx19(ArrowRight, { fontSize: "small", color: "inherit" })
|
|
2216
2946
|
}
|
|
2217
2947
|
),
|
|
2218
|
-
/* @__PURE__ */
|
|
2219
|
-
|
|
2948
|
+
/* @__PURE__ */ jsx19(ListItemText3, { children: link.onClick ? /* @__PURE__ */ jsx19(
|
|
2949
|
+
Button7,
|
|
2220
2950
|
{
|
|
2221
2951
|
size: "small",
|
|
2222
2952
|
variant: "text",
|
|
@@ -2239,9 +2969,9 @@ var PageLinkComponent = ({
|
|
|
2239
2969
|
// Эффект подчеркивания, как у ссылки
|
|
2240
2970
|
}
|
|
2241
2971
|
},
|
|
2242
|
-
children: typeof link.text === "string" ? /* @__PURE__ */
|
|
2972
|
+
children: typeof link.text === "string" ? /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace, children: link.text }) : link.text
|
|
2243
2973
|
}
|
|
2244
|
-
) : link.href ? /* @__PURE__ */
|
|
2974
|
+
) : link.href ? /* @__PURE__ */ jsx19(
|
|
2245
2975
|
MuiLink,
|
|
2246
2976
|
{
|
|
2247
2977
|
component: RouterLink,
|
|
@@ -2259,15 +2989,15 @@ var PageLinkComponent = ({
|
|
|
2259
2989
|
backgroundColor: "transparent"
|
|
2260
2990
|
}
|
|
2261
2991
|
},
|
|
2262
|
-
children: typeof link.text === "string" ? /* @__PURE__ */
|
|
2992
|
+
children: typeof link.text === "string" ? /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace, children: link.text }) : link.text
|
|
2263
2993
|
}
|
|
2264
|
-
) : /* @__PURE__ */
|
|
2994
|
+
) : /* @__PURE__ */ jsx19(Typography9, { variant: "body2", sx: { fontWeight: 500, color: "inherit" }, children: typeof link.text === "string" ? /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace, children: link.text }) : link.text }) })
|
|
2265
2995
|
]
|
|
2266
2996
|
},
|
|
2267
2997
|
index
|
|
2268
2998
|
)) })
|
|
2269
2999
|
] }),
|
|
2270
|
-
actionButtonText && onActionButtonClick && /* @__PURE__ */
|
|
3000
|
+
actionButtonText && onActionButtonClick && /* @__PURE__ */ jsx19(CardActions, { sx: { justifyContent: "flex-end", padding: 2 }, children: /* @__PURE__ */ jsx19(Button7, { size: "small", variant: "contained", onClick: onActionButtonClick, children: typeof actionButtonText === "string" ? /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace, children: actionButtonText }) : actionButtonText }) })
|
|
2271
3001
|
]
|
|
2272
3002
|
}
|
|
2273
3003
|
);
|
|
@@ -2275,12 +3005,12 @@ var PageLinkComponent = ({
|
|
|
2275
3005
|
|
|
2276
3006
|
// src/UI/components/layout/CollapsedContainerComponent.tsx
|
|
2277
3007
|
import { ExpandMore as ExpandMoreIcon } from "@mui/icons-material";
|
|
2278
|
-
import { Avatar as Avatar3, Box as
|
|
2279
|
-
import { useState as
|
|
2280
|
-
import { jsx as
|
|
3008
|
+
import { Avatar as Avatar3, Box as Box10, Card as Card2, CardContent as CardContent2, CardHeader as CardHeader2, Collapse, Divider as Divider4, IconButton as IconButton8, styled as styled2, Tooltip as Tooltip7, Typography as Typography10 } from "@mui/material";
|
|
3009
|
+
import { useState as useState14 } from "react";
|
|
3010
|
+
import { jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
2281
3011
|
var ExpandMore = styled2((props) => {
|
|
2282
3012
|
const { expand, ...other } = props;
|
|
2283
|
-
return /* @__PURE__ */
|
|
3013
|
+
return /* @__PURE__ */ jsx20(IconButton8, { size: "small", ...other, children: /* @__PURE__ */ jsx20(ExpandMoreIcon, {}) });
|
|
2284
3014
|
})(({ theme, expand }) => ({
|
|
2285
3015
|
transform: !expand ? "rotate(0deg)" : "rotate(180deg)",
|
|
2286
3016
|
transition: theme.transitions.create("transform", {
|
|
@@ -2295,14 +3025,14 @@ var ExpandMore = styled2((props) => {
|
|
|
2295
3025
|
}));
|
|
2296
3026
|
var CollapsedContainerComponent = (props) => {
|
|
2297
3027
|
const { displayState } = useAppTheme();
|
|
2298
|
-
const [expanded, setExpanded] =
|
|
3028
|
+
const [expanded, setExpanded] = useState14(props.expanded === void 0 ? false : props.expanded);
|
|
2299
3029
|
const handleExpandClick = () => {
|
|
2300
3030
|
setExpanded(!expanded);
|
|
2301
3031
|
props.onExpanded && props.onExpanded(!expanded);
|
|
2302
3032
|
};
|
|
2303
|
-
return /* @__PURE__ */
|
|
2304
|
-
/* @__PURE__ */
|
|
2305
|
-
|
|
3033
|
+
return /* @__PURE__ */ jsxs13(Card2, { sx: { width: "100%", overflow: "hidden", mb: 2, boxShadow: displayState.isMobile ? "none" : props.disableShadow ? "none" : "0 20px 25px -5px rgb(0 0 0 / 0.1)", borderRadius: displayState.isMobile ? 0 : 1 }, children: [
|
|
3034
|
+
/* @__PURE__ */ jsxs13(
|
|
3035
|
+
Box10,
|
|
2306
3036
|
{
|
|
2307
3037
|
onClick: () => handleExpandClick(),
|
|
2308
3038
|
sx: {
|
|
@@ -2313,16 +3043,16 @@ var CollapsedContainerComponent = (props) => {
|
|
|
2313
3043
|
pr: 2
|
|
2314
3044
|
},
|
|
2315
3045
|
children: [
|
|
2316
|
-
/* @__PURE__ */
|
|
3046
|
+
/* @__PURE__ */ jsx20(
|
|
2317
3047
|
CardHeader2,
|
|
2318
3048
|
{
|
|
2319
3049
|
sx: { flexGrow: 1 },
|
|
2320
|
-
avatar: /* @__PURE__ */
|
|
2321
|
-
title: typeof props.title === "string" ? /* @__PURE__ */
|
|
2322
|
-
subheader: typeof props.subtitle === "string" ? /* @__PURE__ */
|
|
3050
|
+
avatar: /* @__PURE__ */ jsx20(Avatar3, { sx: { bgcolor: "primary.main" }, children: props.icon }),
|
|
3051
|
+
title: typeof props.title === "string" ? /* @__PURE__ */ jsx20(Typography10, { variant: "subtitle1", sx: { fontWeight: "700" }, children: /* @__PURE__ */ jsx20(TranslateText, { overrideNamespace: props.overrideNamespace, children: props.title }) }) : props.title,
|
|
3052
|
+
subheader: typeof props.subtitle === "string" ? /* @__PURE__ */ jsx20(TranslateText, { overrideNamespace: props.overrideNamespace, children: props.subtitle }) : props.subtitle
|
|
2323
3053
|
}
|
|
2324
3054
|
),
|
|
2325
|
-
/* @__PURE__ */
|
|
3055
|
+
/* @__PURE__ */ jsx20(Tooltip7, { title: expanded ? "Show Less" : "Show More", children: /* @__PURE__ */ jsx20(Box10, { sx: { ml: 1 }, children: /* @__PURE__ */ jsx20(
|
|
2326
3056
|
ExpandMore,
|
|
2327
3057
|
{
|
|
2328
3058
|
expand: expanded,
|
|
@@ -2333,36 +3063,36 @@ var CollapsedContainerComponent = (props) => {
|
|
|
2333
3063
|
]
|
|
2334
3064
|
}
|
|
2335
3065
|
),
|
|
2336
|
-
/* @__PURE__ */
|
|
2337
|
-
/* @__PURE__ */
|
|
2338
|
-
/* @__PURE__ */
|
|
3066
|
+
/* @__PURE__ */ jsxs13(Collapse, { in: expanded, timeout: "auto", children: [
|
|
3067
|
+
/* @__PURE__ */ jsx20(Divider4, { variant: "middle" }),
|
|
3068
|
+
/* @__PURE__ */ jsx20(CardContent2, { children: props.children })
|
|
2339
3069
|
] })
|
|
2340
3070
|
] });
|
|
2341
3071
|
};
|
|
2342
3072
|
|
|
2343
3073
|
// src/i18n/LanguageSelector.tsx
|
|
2344
|
-
import { useEffect as
|
|
3074
|
+
import { useEffect as useEffect7, useState as useState15 } from "react";
|
|
2345
3075
|
import { useTranslation as useTranslation3 } from "react-i18next";
|
|
2346
3076
|
import {
|
|
2347
|
-
Box as
|
|
2348
|
-
Typography as
|
|
3077
|
+
Box as Box11,
|
|
3078
|
+
Typography as Typography11,
|
|
2349
3079
|
CircularProgress,
|
|
2350
|
-
IconButton as
|
|
3080
|
+
IconButton as IconButton9,
|
|
2351
3081
|
Menu as Menu2,
|
|
2352
|
-
MenuItem as
|
|
3082
|
+
MenuItem as MenuItem4,
|
|
2353
3083
|
Tooltip as Tooltip8
|
|
2354
3084
|
} from "@mui/material";
|
|
2355
|
-
import { Fragment as Fragment10, jsx as
|
|
3085
|
+
import { Fragment as Fragment10, jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2356
3086
|
var LanguageSelector = () => {
|
|
2357
3087
|
const supabase = useSupabase();
|
|
2358
3088
|
const { i18n } = useTranslation3();
|
|
2359
|
-
const [languages, setLanguages] =
|
|
2360
|
-
const [loading, setLoading] =
|
|
3089
|
+
const [languages, setLanguages] = useState15([]);
|
|
3090
|
+
const [loading, setLoading] = useState15(true);
|
|
2361
3091
|
const { changeLanguage } = useLocalization();
|
|
2362
3092
|
const { settings: userSettings, setLanguage } = useUserSettings();
|
|
2363
|
-
const [anchorEl, setAnchorEl] =
|
|
3093
|
+
const [anchorEl, setAnchorEl] = useState15(null);
|
|
2364
3094
|
const open = Boolean(anchorEl);
|
|
2365
|
-
|
|
3095
|
+
useEffect7(() => {
|
|
2366
3096
|
const fetchLanguages = async () => {
|
|
2367
3097
|
try {
|
|
2368
3098
|
const { data, error } = await supabase.from("languages").select("code, name, svg_flag").eq("enabled", true);
|
|
@@ -2389,14 +3119,14 @@ var LanguageSelector = () => {
|
|
|
2389
3119
|
handleClose();
|
|
2390
3120
|
};
|
|
2391
3121
|
if (loading) {
|
|
2392
|
-
return /* @__PURE__ */
|
|
3122
|
+
return /* @__PURE__ */ jsx21(CircularProgress, { size: 20, color: "inherit", sx: { mx: 1 } });
|
|
2393
3123
|
}
|
|
2394
3124
|
const rawCurrentLang = i18n.language || "uk";
|
|
2395
3125
|
const currentLangCode = rawCurrentLang.split("-")[0];
|
|
2396
3126
|
const currentLang = languages.find((l) => l.code === currentLangCode) || languages[0];
|
|
2397
|
-
return /* @__PURE__ */
|
|
2398
|
-
/* @__PURE__ */
|
|
2399
|
-
|
|
3127
|
+
return /* @__PURE__ */ jsxs14(Fragment10, { children: [
|
|
3128
|
+
/* @__PURE__ */ jsx21(Tooltip8, { title: currentLang ? currentLang.name : "\u041C\u043E\u0432\u0430", arrow: true, placement: "bottom", children: /* @__PURE__ */ jsx21(
|
|
3129
|
+
IconButton9,
|
|
2400
3130
|
{
|
|
2401
3131
|
onClick: handleClick,
|
|
2402
3132
|
size: "small",
|
|
@@ -2411,8 +3141,8 @@ var LanguageSelector = () => {
|
|
|
2411
3141
|
backgroundColor: "action.hover"
|
|
2412
3142
|
}
|
|
2413
3143
|
},
|
|
2414
|
-
children: currentLang?.svg_flag && /* @__PURE__ */
|
|
2415
|
-
|
|
3144
|
+
children: currentLang?.svg_flag && /* @__PURE__ */ jsx21(
|
|
3145
|
+
Box11,
|
|
2416
3146
|
{
|
|
2417
3147
|
sx: {
|
|
2418
3148
|
width: 24,
|
|
@@ -2431,7 +3161,7 @@ var LanguageSelector = () => {
|
|
|
2431
3161
|
)
|
|
2432
3162
|
}
|
|
2433
3163
|
) }),
|
|
2434
|
-
/* @__PURE__ */
|
|
3164
|
+
/* @__PURE__ */ jsx21(
|
|
2435
3165
|
Menu2,
|
|
2436
3166
|
{
|
|
2437
3167
|
id: "language-menu",
|
|
@@ -2452,8 +3182,8 @@ var LanguageSelector = () => {
|
|
|
2452
3182
|
anchorOrigin: { horizontal: "right", vertical: "bottom" },
|
|
2453
3183
|
children: languages.map((lang) => {
|
|
2454
3184
|
const isSelected = lang.code === currentLangCode;
|
|
2455
|
-
return /* @__PURE__ */
|
|
2456
|
-
|
|
3185
|
+
return /* @__PURE__ */ jsxs14(
|
|
3186
|
+
MenuItem4,
|
|
2457
3187
|
{
|
|
2458
3188
|
selected: isSelected,
|
|
2459
3189
|
onClick: () => handleSelectLanguage(lang.code),
|
|
@@ -2465,8 +3195,8 @@ var LanguageSelector = () => {
|
|
|
2465
3195
|
px: 2
|
|
2466
3196
|
},
|
|
2467
3197
|
children: [
|
|
2468
|
-
/* @__PURE__ */
|
|
2469
|
-
|
|
3198
|
+
/* @__PURE__ */ jsx21(
|
|
3199
|
+
Box11,
|
|
2470
3200
|
{
|
|
2471
3201
|
sx: {
|
|
2472
3202
|
width: 22,
|
|
@@ -2480,7 +3210,7 @@ var LanguageSelector = () => {
|
|
|
2480
3210
|
dangerouslySetInnerHTML: { __html: lang.svg_flag }
|
|
2481
3211
|
}
|
|
2482
3212
|
),
|
|
2483
|
-
/* @__PURE__ */
|
|
3213
|
+
/* @__PURE__ */ jsx21(Typography11, { variant: "body2", sx: { fontWeight: isSelected ? 600 : 400 }, children: lang.name })
|
|
2484
3214
|
]
|
|
2485
3215
|
},
|
|
2486
3216
|
lang.code
|
|
@@ -2494,11 +3224,11 @@ var PublicLanguageSelector = () => {
|
|
|
2494
3224
|
const supabase = useSupabase();
|
|
2495
3225
|
const { i18n } = useTranslation3();
|
|
2496
3226
|
const { changeLanguage } = useLocalization();
|
|
2497
|
-
const [languages, setLanguages] =
|
|
2498
|
-
const [loading, setLoading] =
|
|
2499
|
-
const [anchorEl, setAnchorEl] =
|
|
3227
|
+
const [languages, setLanguages] = useState15([]);
|
|
3228
|
+
const [loading, setLoading] = useState15(true);
|
|
3229
|
+
const [anchorEl, setAnchorEl] = useState15(null);
|
|
2500
3230
|
const open = Boolean(anchorEl);
|
|
2501
|
-
|
|
3231
|
+
useEffect7(() => {
|
|
2502
3232
|
const fetchLanguages = async () => {
|
|
2503
3233
|
try {
|
|
2504
3234
|
const { data, error } = await supabase.from("languages").select("code, name, svg_flag").eq("enabled", true);
|
|
@@ -2523,14 +3253,14 @@ var PublicLanguageSelector = () => {
|
|
|
2523
3253
|
handleClose();
|
|
2524
3254
|
};
|
|
2525
3255
|
if (loading) {
|
|
2526
|
-
return /* @__PURE__ */
|
|
3256
|
+
return /* @__PURE__ */ jsx21(CircularProgress, { size: 20, color: "inherit", sx: { mx: 1 } });
|
|
2527
3257
|
}
|
|
2528
3258
|
const rawCurrentLang = i18n.language || "uk";
|
|
2529
3259
|
const currentLangCode = rawCurrentLang.split("-")[0];
|
|
2530
3260
|
const currentLang = languages.find((l) => l.code === currentLangCode) || languages[0];
|
|
2531
|
-
return /* @__PURE__ */
|
|
2532
|
-
/* @__PURE__ */
|
|
2533
|
-
|
|
3261
|
+
return /* @__PURE__ */ jsxs14(Fragment10, { children: [
|
|
3262
|
+
/* @__PURE__ */ jsx21(Tooltip8, { title: currentLang ? currentLang.name : "\u041C\u043E\u0432\u0430", arrow: true, placement: "bottom", children: /* @__PURE__ */ jsx21(
|
|
3263
|
+
IconButton9,
|
|
2534
3264
|
{
|
|
2535
3265
|
onClick: handleClick,
|
|
2536
3266
|
size: "small",
|
|
@@ -2545,8 +3275,8 @@ var PublicLanguageSelector = () => {
|
|
|
2545
3275
|
backgroundColor: "action.hover"
|
|
2546
3276
|
}
|
|
2547
3277
|
},
|
|
2548
|
-
children: currentLang?.svg_flag && /* @__PURE__ */
|
|
2549
|
-
|
|
3278
|
+
children: currentLang?.svg_flag && /* @__PURE__ */ jsx21(
|
|
3279
|
+
Box11,
|
|
2550
3280
|
{
|
|
2551
3281
|
sx: {
|
|
2552
3282
|
width: 24,
|
|
@@ -2565,7 +3295,7 @@ var PublicLanguageSelector = () => {
|
|
|
2565
3295
|
)
|
|
2566
3296
|
}
|
|
2567
3297
|
) }),
|
|
2568
|
-
/* @__PURE__ */
|
|
3298
|
+
/* @__PURE__ */ jsx21(
|
|
2569
3299
|
Menu2,
|
|
2570
3300
|
{
|
|
2571
3301
|
id: "language-menu",
|
|
@@ -2586,8 +3316,8 @@ var PublicLanguageSelector = () => {
|
|
|
2586
3316
|
anchorOrigin: { horizontal: "right", vertical: "bottom" },
|
|
2587
3317
|
children: languages.map((lang) => {
|
|
2588
3318
|
const isSelected = lang.code === currentLangCode;
|
|
2589
|
-
return /* @__PURE__ */
|
|
2590
|
-
|
|
3319
|
+
return /* @__PURE__ */ jsxs14(
|
|
3320
|
+
MenuItem4,
|
|
2591
3321
|
{
|
|
2592
3322
|
selected: isSelected,
|
|
2593
3323
|
onClick: () => handleSelectLanguage(lang.code),
|
|
@@ -2599,8 +3329,8 @@ var PublicLanguageSelector = () => {
|
|
|
2599
3329
|
px: 2
|
|
2600
3330
|
},
|
|
2601
3331
|
children: [
|
|
2602
|
-
/* @__PURE__ */
|
|
2603
|
-
|
|
3332
|
+
/* @__PURE__ */ jsx21(
|
|
3333
|
+
Box11,
|
|
2604
3334
|
{
|
|
2605
3335
|
sx: {
|
|
2606
3336
|
width: 22,
|
|
@@ -2614,7 +3344,7 @@ var PublicLanguageSelector = () => {
|
|
|
2614
3344
|
dangerouslySetInnerHTML: { __html: lang.svg_flag }
|
|
2615
3345
|
}
|
|
2616
3346
|
),
|
|
2617
|
-
/* @__PURE__ */
|
|
3347
|
+
/* @__PURE__ */ jsx21(Typography11, { variant: "body2", sx: { fontWeight: isSelected ? 600 : 400 }, children: lang.name })
|
|
2618
3348
|
]
|
|
2619
3349
|
},
|
|
2620
3350
|
lang.code
|
|
@@ -2627,15 +3357,15 @@ var PublicLanguageSelector = () => {
|
|
|
2627
3357
|
|
|
2628
3358
|
// src/UI/components/tables/TablePaginationComponent.tsx
|
|
2629
3359
|
import {
|
|
2630
|
-
Box as
|
|
2631
|
-
IconButton as
|
|
3360
|
+
Box as Box12,
|
|
3361
|
+
IconButton as IconButton10,
|
|
2632
3362
|
TablePagination
|
|
2633
3363
|
} from "@mui/material";
|
|
2634
3364
|
import FirstPageIcon from "@mui/icons-material/FirstPage";
|
|
2635
3365
|
import KeyboardArrowLeft from "@mui/icons-material/KeyboardArrowLeft";
|
|
2636
3366
|
import KeyboardArrowRight from "@mui/icons-material/KeyboardArrowRight";
|
|
2637
3367
|
import LastPageIcon from "@mui/icons-material/LastPage";
|
|
2638
|
-
import { Fragment as Fragment11, jsx as
|
|
3368
|
+
import { Fragment as Fragment11, jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2639
3369
|
var CustomPaginationActions = (props) => {
|
|
2640
3370
|
const {
|
|
2641
3371
|
count,
|
|
@@ -2653,11 +3383,11 @@ var CustomPaginationActions = (props) => {
|
|
|
2653
3383
|
const handleLast = (e) => onPageChange(e, Math.max(0, Math.ceil(count / rowsPerPage) - 1));
|
|
2654
3384
|
const isFirstDisabled = page === 0;
|
|
2655
3385
|
const isLastDisabled = page >= Math.ceil(count / rowsPerPage) - 1;
|
|
2656
|
-
return /* @__PURE__ */
|
|
2657
|
-
showFirstButton && /* @__PURE__ */
|
|
2658
|
-
/* @__PURE__ */
|
|
2659
|
-
/* @__PURE__ */
|
|
2660
|
-
showLastButton && /* @__PURE__ */
|
|
3386
|
+
return /* @__PURE__ */ jsxs15(Box12, { sx: { flexShrink: 0, ml: 2, display: "flex", alignItems: "center" }, children: [
|
|
3387
|
+
showFirstButton && /* @__PURE__ */ jsx22(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx22(TranslateText, { overrideNamespace: ns, children: "First page" }), children: /* @__PURE__ */ jsx22("span", { children: /* @__PURE__ */ jsx22(IconButton10, { onClick: handleFirstPage, disabled: isFirstDisabled, size: "small", children: /* @__PURE__ */ jsx22(FirstPageIcon, {}) }) }) }),
|
|
3388
|
+
/* @__PURE__ */ jsx22(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx22(TranslateText, { overrideNamespace: ns, children: "Previous page" }), children: /* @__PURE__ */ jsx22("span", { children: /* @__PURE__ */ jsx22(IconButton10, { onClick: handleBack, disabled: isFirstDisabled, size: "small", children: /* @__PURE__ */ jsx22(KeyboardArrowLeft, {}) }) }) }),
|
|
3389
|
+
/* @__PURE__ */ jsx22(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx22(TranslateText, { overrideNamespace: ns, children: "Next page" }), children: /* @__PURE__ */ jsx22("span", { children: /* @__PURE__ */ jsx22(IconButton10, { onClick: handleNext, disabled: isLastDisabled, size: "small", children: /* @__PURE__ */ jsx22(KeyboardArrowRight, {}) }) }) }),
|
|
3390
|
+
showLastButton && /* @__PURE__ */ jsx22(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx22(TranslateText, { overrideNamespace: ns, children: "Last page" }), children: /* @__PURE__ */ jsx22("span", { children: /* @__PURE__ */ jsx22(IconButton10, { onClick: handleLast, disabled: isLastDisabled, size: "small", children: /* @__PURE__ */ jsx22(LastPageIcon, {}) }) }) })
|
|
2661
3391
|
] });
|
|
2662
3392
|
};
|
|
2663
3393
|
var TablePaginationComponent = ({
|
|
@@ -2671,7 +3401,7 @@ var TablePaginationComponent = ({
|
|
|
2671
3401
|
}) => {
|
|
2672
3402
|
const { displayState } = useAppTheme();
|
|
2673
3403
|
const activeNamespace = overrideNamespace || "form_components";
|
|
2674
|
-
return /* @__PURE__ */
|
|
3404
|
+
return /* @__PURE__ */ jsx22(
|
|
2675
3405
|
TablePagination,
|
|
2676
3406
|
{
|
|
2677
3407
|
rowsPerPageOptions,
|
|
@@ -2683,8 +3413,8 @@ var TablePaginationComponent = ({
|
|
|
2683
3413
|
onRowsPerPageChange,
|
|
2684
3414
|
showFirstButton: true,
|
|
2685
3415
|
showLastButton: true,
|
|
2686
|
-
labelRowsPerPage: displayState.isMobile ? /* @__PURE__ */
|
|
2687
|
-
/* @__PURE__ */
|
|
3416
|
+
labelRowsPerPage: displayState.isMobile ? /* @__PURE__ */ jsx22(Fragment11, {}) : /* @__PURE__ */ jsxs15(Fragment11, { children: [
|
|
3417
|
+
/* @__PURE__ */ jsx22(TranslateText, { overrideNamespace: activeNamespace, children: "Rows per page" }),
|
|
2688
3418
|
":"
|
|
2689
3419
|
] }),
|
|
2690
3420
|
ActionsComponent: CustomPaginationActions,
|
|
@@ -2712,13 +3442,13 @@ var Services = {
|
|
|
2712
3442
|
};
|
|
2713
3443
|
|
|
2714
3444
|
// src/hooks/useUserStatus.ts
|
|
2715
|
-
import { useEffect as
|
|
3445
|
+
import { useEffect as useEffect8, useRef as useRef2, useState as useState16 } from "react";
|
|
2716
3446
|
var ONLINE_THRESHOLD_MINUTES = 2;
|
|
2717
3447
|
var AWAY_THRESHOLD_MINUTES = 15;
|
|
2718
3448
|
var useUserStatus = (userId, initialLastSeenAt, currentAuthUserId) => {
|
|
2719
3449
|
const supabase = useSupabase();
|
|
2720
|
-
const [status, setStatus] =
|
|
2721
|
-
const [lastSeen, setLastSeen] =
|
|
3450
|
+
const [status, setStatus] = useState16("offline");
|
|
3451
|
+
const [lastSeen, setLastSeen] = useState16(initialLastSeenAt ?? null);
|
|
2722
3452
|
const lastSeenRef = useRef2(initialLastSeenAt ?? null);
|
|
2723
3453
|
lastSeenRef.current = lastSeen;
|
|
2724
3454
|
const calculateStatus = (isOnline, lastSeenIso) => {
|
|
@@ -2735,7 +3465,7 @@ var useUserStatus = (userId, initialLastSeenAt, currentAuthUserId) => {
|
|
|
2735
3465
|
}
|
|
2736
3466
|
return "offline";
|
|
2737
3467
|
};
|
|
2738
|
-
|
|
3468
|
+
useEffect8(() => {
|
|
2739
3469
|
if (!userId) return;
|
|
2740
3470
|
let isMounted = true;
|
|
2741
3471
|
const isSelf = currentAuthUserId && userId === currentAuthUserId;
|
|
@@ -2841,6 +3571,7 @@ export {
|
|
|
2841
3571
|
CollapsedContainerComponent,
|
|
2842
3572
|
ConfirmationProvider,
|
|
2843
3573
|
CopyClipboardButtonComponent,
|
|
3574
|
+
DateTimePickerComponent,
|
|
2844
3575
|
EmailInputComponent,
|
|
2845
3576
|
ErrorAlertComponent,
|
|
2846
3577
|
ExpandableNoteComponent,
|
|
@@ -2868,7 +3599,7 @@ export {
|
|
|
2868
3599
|
TranslateProvider,
|
|
2869
3600
|
TranslateText,
|
|
2870
3601
|
TranslationEditProvider,
|
|
2871
|
-
|
|
3602
|
+
TruncatedTypographyComponent,
|
|
2872
3603
|
UrlComponent,
|
|
2873
3604
|
UserAvatarComponent,
|
|
2874
3605
|
UserPopoverComponent,
|