@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.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 Button2 } from "@mui/material";
1163
- import { jsx as jsx9 } from "react/jsx-runtime";
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__ */ jsx9(TranslateText, { overrideNamespace, children: content });
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__ */ jsx9(Button2, { ref, ...props, children: renderContent(contentToRender) });
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 useState7 } from "react";
1909
+ import { useState as useState8 } from "react";
1180
1910
  import {
1181
- Button as Button3,
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 jsx10 } from "react/jsx-runtime";
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] = useState7(false);
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__ */ jsx10(AnimatedRefreshIcon, { fontSize: size, isSpinning: isLoading });
1955
+ const renderIcon = () => /* @__PURE__ */ jsx11(AnimatedRefreshIcon, { fontSize: size, isSpinning: isLoading });
1226
1956
  if (displayState.isMobile && !disableMobileView || mobileViewOnly) {
1227
- return /* @__PURE__ */ jsx10(TranslatableTooltipComponent, { title: hideTooltipOnMobile ? /* @__PURE__ */ jsx10(Fragment5, {}) : tooltip || /* @__PURE__ */ jsx10(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), children: /* @__PURE__ */ jsx10("span", { children: /* @__PURE__ */ jsx10(
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__ */ jsx10(TranslatableTooltipComponent, { title: hideTooltipOnDesktop ? /* @__PURE__ */ jsx10(Fragment5, {}) : tooltip || /* @__PURE__ */ jsx10(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), children: /* @__PURE__ */ jsx10(
1240
- Button3,
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__ */ jsx10(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" })
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 useState8, useEffect as useEffect4, lazy, Suspense } from "react";
1256
- import { Avatar, Tooltip as Tooltip5, Typography as Typography2 } from "@mui/material";
1257
- import { Fragment as Fragment6, jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
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] = useState8(null);
1281
- const [hasInteracted, setHasInteracted] = useState8(false);
1282
- const [resolvedAvatarUrl, setResolvedAvatarUrl] = useState8(null);
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
- useEffect4(() => {
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__ */ jsxs6(Fragment6, { children: [
1330
- /* @__PURE__ */ jsx11(Typography2, { component: "div", variant: "caption", children: displayName }),
1331
- displayName && employeePost && /* @__PURE__ */ jsx11(Typography2, { component: "div", variant: "caption", children: employeePost })
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__ */ jsxs6(Fragment6, { children: [
1334
- /* @__PURE__ */ jsx11(Tooltip5, { title: disableTooltip || isPopoverOpen ? "" : getTooltip, children: /* @__PURE__ */ jsx11(
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__ */ jsx11(Suspense, { fallback: null, children: /* @__PURE__ */ jsx11(
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 useState9 } from "react";
1374
- import { Avatar as Avatar2, Box as Box6, Popover as Popover2, Typography as Typography3, Skeleton } from "@mui/material";
1375
- import { Fragment as Fragment7, jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
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] = useState9(null);
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__ */ jsx12(
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__ */ jsxs7(Fragment7, { children: [
1415
- /* @__PURE__ */ jsx12(
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__ */ jsx12(
1443
- Popover2,
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__ */ jsxs7(Box6, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 0.5 }, children: [
1474
- /* @__PURE__ */ jsx12(Typography3, { variant: "subtitle2", sx: { fontWeight: 600 }, children: userProfile?.display_name }),
1475
- userProfile?.email && /* @__PURE__ */ jsx12(Typography3, { variant: "caption", color: "text.secondary", children: userProfile.email })
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 useState10 } from "react";
1484
- import { Typography as Typography4, Link } from "@mui/material";
1485
- import { Fragment as Fragment8, jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
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] = useState10(false);
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__ */ jsxs8(
1503
- Typography4,
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__ */ jsxs8(Fragment8, { children: [
1515
- /* @__PURE__ */ jsx13(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Note" }),
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__ */ jsx13(
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__ */ jsx13(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "less" }) : /* @__PURE__ */ jsxs8(Fragment8, { children: [
1537
- /* @__PURE__ */ jsx13(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "more" }),
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 Box7, Button as Button4, Typography as Typography5, useTheme } from "@mui/material";
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 jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
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__ */ jsx14(
1556
- Box7,
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__ */ jsxs9(
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__ */ jsxs9(
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__ */ jsx14(
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__ */ jsx14(
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__ */ jsx14("circle", { cx: "50", cy: "50", r: "34", fill: lightColor, fillOpacity: "0.35" }),
1604
- /* @__PURE__ */ jsx14(
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__ */ jsx14(
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__ */ jsx14("circle", { cx: "50", cy: "62", r: "2.5", fill: "#FFFFFF" }),
1624
- /* @__PURE__ */ jsx14("circle", { cx: "16", cy: "30", r: "3", fill: mainColor, opacity: "0.4" }),
1625
- /* @__PURE__ */ jsx14("circle", { cx: "84", cy: "30", r: "2", fill: mainColor, opacity: "0.6" }),
1626
- /* @__PURE__ */ jsx14("circle", { cx: "88", cy: "68", r: "3", fill: mainColor, opacity: "0.3" })
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__ */ jsx14(
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__ */ jsxs9(
1660
- Box7,
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__ */ jsx14(ErrorIllustration, { size: 68 }),
1670
- /* @__PURE__ */ jsxs9(Box7, { sx: { flexGrow: 1 }, children: [
1671
- typeof title === "string" ? /* @__PURE__ */ jsx14(
1672
- Typography5,
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__ */ jsx14(TranslateText, { overrideNamespace, children: title })
2406
+ children: /* @__PURE__ */ jsx15(TranslateText, { overrideNamespace, children: title })
1677
2407
  }
1678
2408
  ) : title,
1679
- typeof message === "string" ? /* @__PURE__ */ jsx14(Typography5, { variant: "body2", color: "text.secondary", children: /* @__PURE__ */ jsx14(TranslateText, { overrideNamespace, children: message }) }) : message
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__ */ jsx14(
1682
- Box7,
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__ */ jsx14(
1689
- Button4,
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__ */ jsx14(
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/TruncatedTypography.tsx
1729
- import { useRef, useState as useState11, useEffect as useEffect5 } from "react";
1730
- import { Typography as Typography6 } from "@mui/material";
1731
- import { jsx as jsx15 } from "react/jsx-runtime";
1732
- var TruncatedTypography = ({
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] = useState11(false);
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
- useEffect5(() => {
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__ */ jsx15(
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__ */ jsx15(
1776
- Typography6,
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 React11, { useState as useState12 } from "react";
2522
+ import React12, { useState as useState13 } from "react";
1793
2523
  import {
1794
- Box as Box8,
1795
- Typography as Typography7,
1796
- Button as Button5,
1797
- IconButton as IconButton6,
2524
+ Box as Box9,
2525
+ Typography as Typography8,
2526
+ Button as Button6,
2527
+ IconButton as IconButton7,
1798
2528
  Menu,
1799
- MenuItem as MenuItem2,
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 jsx16, jsxs as jsxs10 } from "react/jsx-runtime";
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] = useState12(null);
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__ */ jsxs10(
1854
- Box8,
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__ */ jsxs10(Box8, { sx: { display: "flex", alignItems: "center", gap: { xs: 1.5, sm: 2 }, minWidth: 0, flex: 1 }, children: [
1873
- icon && /* @__PURE__ */ jsx16(
1874
- Box8,
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__ */ jsxs10(Box8, { sx: { minWidth: 0, flex: 1 }, children: [
1894
- tag && /* @__PURE__ */ jsx16(Box8, { sx: { mb: 0.5, display: "flex", alignItems: "center" }, children: tag }),
1895
- /* @__PURE__ */ jsx16(Tooltip6, { title: titleTruncateMode === "truncate" ? /* @__PURE__ */ jsx16(TranslateText, { children: title }) : void 0, arrow: true, placement: "top", children: /* @__PURE__ */ jsx16(
1896
- Typography7,
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__ */ jsx16(TranslateText, { children: title })
2637
+ children: /* @__PURE__ */ jsx17(TranslateText, { children: title })
1908
2638
  }
1909
2639
  ) }),
1910
- subtitle && /* @__PURE__ */ jsx16(Tooltip6, { title: subtitleTruncateMode === "truncate" ? /* @__PURE__ */ jsx16(TranslateText, { children: subtitle }) : void 0, arrow: true, placement: "top", children: /* @__PURE__ */ jsx16(
1911
- Typography7,
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__ */ jsx16(TranslateText, { children: subtitle })
2651
+ children: /* @__PURE__ */ jsx17(TranslateText, { children: subtitle })
1922
2652
  }
1923
2653
  ) })
1924
2654
  ] })
1925
2655
  ] }),
1926
- hasActions && /* @__PURE__ */ jsx16(Box8, { sx: { flexShrink: 0, display: "flex", alignItems: "center", gap: 1 }, children: isMobile ? (
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__ */ jsxs10(Fragment9, { children: [
1929
- /* @__PURE__ */ jsx16(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx16(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Actions" }), children: /* @__PURE__ */ jsx16(
1930
- IconButton6,
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__ */ jsx16(MoreVertIcon, {})
2664
+ children: /* @__PURE__ */ jsx17(MoreVertIcon, {})
1935
2665
  }
1936
2666
  ) }),
1937
- /* @__PURE__ */ jsxs10(
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__ */ jsxs10(Fragment9, { children: [
1948
- /* @__PURE__ */ jsxs10(
1949
- MenuItem2,
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__ */ jsx16(ListItemIcon, { sx: { color: "inherit", minWidth: 32 }, children: primaryAction.icon }),
1963
- /* @__PURE__ */ jsx16(ListItemText2, { primary: /* @__PURE__ */ jsx16(TranslateText, { children: primaryAction.label }), slotProps: { primary: { sx: { fontWeight: 700, fontSize: "0.9rem" } } } })
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__ */ jsx16(Divider, { sx: { my: 0.75 } })
2697
+ hasSecondaryActions && /* @__PURE__ */ jsx17(Divider2, { sx: { my: 0.75 } })
1968
2698
  ] }),
1969
- secondaryActions.map((action) => /* @__PURE__ */ jsxs10(React11.Fragment, { children: [
1970
- action.divider && /* @__PURE__ */ jsx16(Divider, { sx: { my: 0.5 } }),
1971
- /* @__PURE__ */ jsxs10(
1972
- MenuItem2,
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__ */ jsx16(ListItemIcon, { sx: { color: action.color ? `${action.color}.main` : "text.secondary", minWidth: 32 }, children: action.icon }),
1979
- /* @__PURE__ */ jsx16(ListItemText2, { primary: action.label, slotProps: { primary: { sx: { fontSize: "0.875rem" } } } })
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__ */ jsxs10(Fragment9, { children: [
1985
- /* @__PURE__ */ jsx16(Divider, { sx: { my: 0.5 } }),
1986
- /* @__PURE__ */ jsxs10(
1987
- MenuItem2,
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__ */ jsx16(ListItemIcon, { sx: { color: "inherit", minWidth: 32 }, children: /* @__PURE__ */ jsx16(RefreshIcon, {}) }),
2000
- /* @__PURE__ */ jsx16(ListItemText2, { primary: /* @__PURE__ */ jsx16(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), slotProps: { primary: { sx: { fontWeight: 700, fontSize: "0.9rem" } } } })
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__ */ jsxs10(Box8, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
2012
- (primaryAction || refreshAction) && /* @__PURE__ */ jsxs10(Stack, { direction: "row", spacing: 2, children: [
2013
- primaryAction && /* @__PURE__ */ jsx16(
2014
- Button5,
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__ */ jsx16(TranslateText, { children: primaryAction.label })
2752
+ children: /* @__PURE__ */ jsx17(TranslateText, { children: primaryAction.label })
2023
2753
  }
2024
2754
  ),
2025
- refreshAction && /* @__PURE__ */ jsx16(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx16(TranslateText, { overrideNamespace: overrideNamespace || "form_components", children: "Refresh" }), children: /* @__PURE__ */ jsx16(
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__ */ jsx16(RefreshIcon, {})
2763
+ children: /* @__PURE__ */ jsx17(RefreshIcon, {})
2034
2764
  }
2035
2765
  ) })
2036
2766
  ] }),
2037
- hasSecondaryActions && /* @__PURE__ */ jsxs10(Fragment9, { children: [
2038
- /* @__PURE__ */ jsx16(
2039
- IconButton6,
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__ */ jsx16(KeyboardArrowDownIcon, {})
2773
+ children: /* @__PURE__ */ jsx17(KeyboardArrowDownIcon, {})
2044
2774
  }
2045
2775
  ),
2046
- /* @__PURE__ */ jsx16(
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__ */ jsxs10(React11.Fragment, { children: [
2056
- action.divider && /* @__PURE__ */ jsx16(Divider, { sx: { my: 0.5 } }),
2057
- /* @__PURE__ */ jsxs10(
2058
- MenuItem2,
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__ */ jsx16(ListItemIcon, { sx: { color: action.color ? `${action.color}.main` : "text.secondary", minWidth: 32 }, children: action.icon }),
2065
- /* @__PURE__ */ jsx16(ListItemText2, { primary: action.label, slotProps: { primary: { sx: { fontSize: "0.875rem" } } } })
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__ */ jsx16(Fragment9, { children: customFragment })
2805
+ customFragment && /* @__PURE__ */ jsx17(Fragment9, { children: customFragment })
2076
2806
  ]
2077
2807
  }
2078
2808
  );
2079
2809
  };
2080
2810
  var PageContainer = ({ children }) => {
2081
- return /* @__PURE__ */ jsx16(
2082
- Box8,
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__ */ jsx16(
2099
- Box8,
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__ */ jsxs10(PageContainer, { children: [
2109
- header && /* @__PURE__ */ jsx16(PageHeader, { ...header }),
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 React12 from "react";
2118
- import { Grid, Paper } from "@mui/material";
2119
- import { jsx as jsx17 } from "react/jsx-runtime";
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__ */ jsx17(
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__ */ jsx17(Grid, { container: true, spacing: 2, sx: { alignItems: "center" }, children: sections ? sections.map((sec, idx) => /* @__PURE__ */ jsx17(React12.Fragment, { children: sec }, idx)) : children })
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 Button6,
2871
+ Button as Button7,
2142
2872
  Card,
2143
2873
  CardActions,
2144
2874
  CardContent,
2145
2875
  CardHeader,
2146
- Divider as Divider2,
2876
+ Divider as Divider3,
2147
2877
  List,
2148
2878
  ListItem,
2149
2879
  ListItemIcon as ListItemIcon2,
2150
2880
  ListItemText as ListItemText3,
2151
- Typography as Typography8,
2881
+ Typography as Typography9,
2152
2882
  Link as MuiLink
2153
2883
  } from "@mui/material";
2154
- import React13 from "react";
2884
+ import React14 from "react";
2155
2885
  import { Link as RouterLink, useNavigate } from "react-router-dom";
2156
- import { jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
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__ */ jsxs11(
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__ */ jsx18(
2913
+ /* @__PURE__ */ jsx19(
2184
2914
  CardHeader,
2185
2915
  {
2186
- avatar: icon ? React13.cloneElement(icon, {
2916
+ avatar: icon ? React14.cloneElement(icon, {
2187
2917
  sx: { color: bgcolor ? "inherit" : "primary", ...icon.props.sx }
2188
- }) : /* @__PURE__ */ jsx18(Settings, { color: bgcolor ? "inherit" : "primary" }),
2189
- title: /* @__PURE__ */ jsx18(Typography8, { variant: "h6", component: "div", color: "inherit", children: typeof title === "string" ? /* @__PURE__ */ jsx18(TranslateText, { overrideNamespace, children: title }) : title }),
2190
- subheader: subheader && /* @__PURE__ */ jsx18(Typography8, { variant: "body2", sx: { opacity: 0.8, color: "inherit" }, children: typeof subheader === "string" ? /* @__PURE__ */ jsx18(TranslateText, { overrideNamespace, children: subheader }) : subheader })
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__ */ jsx18(Divider2, { sx: { borderColor: "inherit", opacity: 0.2 } }),
2194
- /* @__PURE__ */ jsxs11(CardContent, { sx: { flexGrow: 1 }, children: [
2195
- /* @__PURE__ */ jsx18(Typography8, { variant: "body2", sx: { opacity: 0.85, color: "inherit" }, children: typeof description === "string" ? /* @__PURE__ */ jsx18(TranslateText, { overrideNamespace, children: description }) : description }),
2196
- links && links.length > 0 && /* @__PURE__ */ jsx18(List, { dense: true, disablePadding: true, children: links.filter((f) => !f.hidden).map((link, index) => /* @__PURE__ */ jsxs11(
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__ */ jsx18(
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__ */ jsx18(ArrowRight, { fontSize: "small", color: "inherit" })
2945
+ children: /* @__PURE__ */ jsx19(ArrowRight, { fontSize: "small", color: "inherit" })
2216
2946
  }
2217
2947
  ),
2218
- /* @__PURE__ */ jsx18(ListItemText3, { children: link.onClick ? /* @__PURE__ */ jsx18(
2219
- Button6,
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__ */ jsx18(TranslateText, { overrideNamespace, children: link.text }) : link.text
2972
+ children: typeof link.text === "string" ? /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace, children: link.text }) : link.text
2243
2973
  }
2244
- ) : link.href ? /* @__PURE__ */ jsx18(
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__ */ jsx18(TranslateText, { overrideNamespace, children: link.text }) : link.text
2992
+ children: typeof link.text === "string" ? /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace, children: link.text }) : link.text
2263
2993
  }
2264
- ) : /* @__PURE__ */ jsx18(Typography8, { variant: "body2", sx: { fontWeight: 500, color: "inherit" }, children: typeof link.text === "string" ? /* @__PURE__ */ jsx18(TranslateText, { overrideNamespace, children: link.text }) : link.text }) })
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__ */ jsx18(CardActions, { sx: { justifyContent: "flex-end", padding: 2 }, children: /* @__PURE__ */ jsx18(Button6, { size: "small", variant: "contained", onClick: onActionButtonClick, children: typeof actionButtonText === "string" ? /* @__PURE__ */ jsx18(TranslateText, { overrideNamespace, children: actionButtonText }) : actionButtonText }) })
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 Box9, Card as Card2, CardContent as CardContent2, CardHeader as CardHeader2, Collapse, Divider as Divider3, IconButton as IconButton7, styled as styled2, Tooltip as Tooltip7, Typography as Typography9 } from "@mui/material";
2279
- import { useState as useState13 } from "react";
2280
- import { jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
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__ */ jsx19(IconButton7, { size: "small", ...other, children: /* @__PURE__ */ jsx19(ExpandMoreIcon, {}) });
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] = useState13(props.expanded === void 0 ? false : props.expanded);
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__ */ jsxs12(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: [
2304
- /* @__PURE__ */ jsxs12(
2305
- Box9,
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__ */ jsx19(
3046
+ /* @__PURE__ */ jsx20(
2317
3047
  CardHeader2,
2318
3048
  {
2319
3049
  sx: { flexGrow: 1 },
2320
- avatar: /* @__PURE__ */ jsx19(Avatar3, { sx: { bgcolor: "primary.main" }, children: props.icon }),
2321
- title: typeof props.title === "string" ? /* @__PURE__ */ jsx19(Typography9, { variant: "subtitle1", sx: { fontWeight: "700" }, children: /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace: props.overrideNamespace, children: props.title }) }) : props.title,
2322
- subheader: typeof props.subtitle === "string" ? /* @__PURE__ */ jsx19(TranslateText, { overrideNamespace: props.overrideNamespace, children: props.subtitle }) : props.subtitle
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__ */ jsx19(Tooltip7, { title: expanded ? "Show Less" : "Show More", children: /* @__PURE__ */ jsx19(Box9, { sx: { ml: 1 }, children: /* @__PURE__ */ jsx19(
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__ */ jsxs12(Collapse, { in: expanded, timeout: "auto", children: [
2337
- /* @__PURE__ */ jsx19(Divider3, { variant: "middle" }),
2338
- /* @__PURE__ */ jsx19(CardContent2, { children: props.children })
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 useEffect6, useState as useState14 } from "react";
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 Box10,
2348
- Typography as Typography10,
3077
+ Box as Box11,
3078
+ Typography as Typography11,
2349
3079
  CircularProgress,
2350
- IconButton as IconButton8,
3080
+ IconButton as IconButton9,
2351
3081
  Menu as Menu2,
2352
- MenuItem as MenuItem3,
3082
+ MenuItem as MenuItem4,
2353
3083
  Tooltip as Tooltip8
2354
3084
  } from "@mui/material";
2355
- import { Fragment as Fragment10, jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
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] = useState14([]);
2360
- const [loading, setLoading] = useState14(true);
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] = useState14(null);
3093
+ const [anchorEl, setAnchorEl] = useState15(null);
2364
3094
  const open = Boolean(anchorEl);
2365
- useEffect6(() => {
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__ */ jsx20(CircularProgress, { size: 20, color: "inherit", sx: { mx: 1 } });
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__ */ jsxs13(Fragment10, { children: [
2398
- /* @__PURE__ */ jsx20(Tooltip8, { title: currentLang ? currentLang.name : "\u041C\u043E\u0432\u0430", arrow: true, placement: "bottom", children: /* @__PURE__ */ jsx20(
2399
- IconButton8,
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__ */ jsx20(
2415
- Box10,
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__ */ jsx20(
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__ */ jsxs13(
2456
- MenuItem3,
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__ */ jsx20(
2469
- Box10,
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__ */ jsx20(Typography10, { variant: "body2", sx: { fontWeight: isSelected ? 600 : 400 }, children: lang.name })
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] = useState14([]);
2498
- const [loading, setLoading] = useState14(true);
2499
- const [anchorEl, setAnchorEl] = useState14(null);
3227
+ const [languages, setLanguages] = useState15([]);
3228
+ const [loading, setLoading] = useState15(true);
3229
+ const [anchorEl, setAnchorEl] = useState15(null);
2500
3230
  const open = Boolean(anchorEl);
2501
- useEffect6(() => {
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__ */ jsx20(CircularProgress, { size: 20, color: "inherit", sx: { mx: 1 } });
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__ */ jsxs13(Fragment10, { children: [
2532
- /* @__PURE__ */ jsx20(Tooltip8, { title: currentLang ? currentLang.name : "\u041C\u043E\u0432\u0430", arrow: true, placement: "bottom", children: /* @__PURE__ */ jsx20(
2533
- IconButton8,
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__ */ jsx20(
2549
- Box10,
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__ */ jsx20(
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__ */ jsxs13(
2590
- MenuItem3,
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__ */ jsx20(
2603
- Box10,
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__ */ jsx20(Typography10, { variant: "body2", sx: { fontWeight: isSelected ? 600 : 400 }, children: lang.name })
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 Box11,
2631
- IconButton as IconButton9,
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 jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
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__ */ jsxs14(Box11, { sx: { flexShrink: 0, ml: 2, display: "flex", alignItems: "center" }, children: [
2657
- showFirstButton && /* @__PURE__ */ jsx21(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx21(TranslateText, { overrideNamespace: ns, children: "First page" }), children: /* @__PURE__ */ jsx21("span", { children: /* @__PURE__ */ jsx21(IconButton9, { onClick: handleFirstPage, disabled: isFirstDisabled, size: "small", children: /* @__PURE__ */ jsx21(FirstPageIcon, {}) }) }) }),
2658
- /* @__PURE__ */ jsx21(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx21(TranslateText, { overrideNamespace: ns, children: "Previous page" }), children: /* @__PURE__ */ jsx21("span", { children: /* @__PURE__ */ jsx21(IconButton9, { onClick: handleBack, disabled: isFirstDisabled, size: "small", children: /* @__PURE__ */ jsx21(KeyboardArrowLeft, {}) }) }) }),
2659
- /* @__PURE__ */ jsx21(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx21(TranslateText, { overrideNamespace: ns, children: "Next page" }), children: /* @__PURE__ */ jsx21("span", { children: /* @__PURE__ */ jsx21(IconButton9, { onClick: handleNext, disabled: isLastDisabled, size: "small", children: /* @__PURE__ */ jsx21(KeyboardArrowRight, {}) }) }) }),
2660
- showLastButton && /* @__PURE__ */ jsx21(TranslatableTooltipComponent, { title: /* @__PURE__ */ jsx21(TranslateText, { overrideNamespace: ns, children: "Last page" }), children: /* @__PURE__ */ jsx21("span", { children: /* @__PURE__ */ jsx21(IconButton9, { onClick: handleLast, disabled: isLastDisabled, size: "small", children: /* @__PURE__ */ jsx21(LastPageIcon, {}) }) }) })
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__ */ jsx21(
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__ */ jsx21(Fragment11, {}) : /* @__PURE__ */ jsxs14(Fragment11, { children: [
2687
- /* @__PURE__ */ jsx21(TranslateText, { overrideNamespace: activeNamespace, children: "Rows per page" }),
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 useEffect7, useRef as useRef2, useState as useState15 } from "react";
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] = useState15("offline");
2721
- const [lastSeen, setLastSeen] = useState15(initialLastSeenAt ?? null);
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
- useEffect7(() => {
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
- TruncatedTypography,
3602
+ TruncatedTypographyComponent,
2872
3603
  UrlComponent,
2873
3604
  UserAvatarComponent,
2874
3605
  UserPopoverComponent,