@danikokonn/yarik-frontend-lib 2.0.3-3.legacy.test9 → 2.0.5-test1

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.
Files changed (46) hide show
  1. package/dist/components/ActionDialog/ActionDialog.d.ts +19 -0
  2. package/dist/components/ActionDialog/ActionDialog.d.ts.map +1 -1
  3. package/dist/components/ActionDialog/ActionDialog.js +19 -0
  4. package/dist/components/ActionDialog/ActionDialogProps.d.ts +15 -0
  5. package/dist/components/ActionDialog/ActionDialogProps.d.ts.map +1 -1
  6. package/dist/components/ColumnSearchInput/ColumnSearchInput.d.ts +12 -0
  7. package/dist/components/ColumnSearchInput/ColumnSearchInput.d.ts.map +1 -1
  8. package/dist/components/ColumnSearchInput/ColumnSearchInput.js +12 -0
  9. package/dist/components/ColumnSearchInput/ColumnSearchInputProps.d.ts +9 -0
  10. package/dist/components/ColumnSearchInput/ColumnSearchInputProps.d.ts.map +1 -1
  11. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts +1 -1
  12. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.d.ts.map +1 -1
  13. package/dist/components/DateTimeRangePicker/DateTimeRangePicker.js +3 -3
  14. package/dist/components/DateTimeRangePicker/DateTimeRangePickerProps.d.ts +1 -0
  15. package/dist/components/DateTimeRangePicker/DateTimeRangePickerProps.d.ts.map +1 -1
  16. package/dist/components/DatetimeRangeInput/DatetimeRangeInput.d.ts +20 -2
  17. package/dist/components/DatetimeRangeInput/DatetimeRangeInput.d.ts.map +1 -1
  18. package/dist/components/DatetimeRangeInput/DatetimeRangeInput.js +19 -0
  19. package/dist/components/DatetimeRangeInput/DatetimeRangeInputProps.d.ts +30 -0
  20. package/dist/components/DatetimeRangeInput/DatetimeRangeInputProps.d.ts.map +1 -1
  21. package/dist/components/Navigation/Navigation.js +8 -8
  22. package/dist/components/RichFilterTextField/RichFilterTextField.d.ts +1 -1
  23. package/dist/components/RichFilterTextField/RichFilterTextField.d.ts.map +1 -1
  24. package/dist/components/RichFilterTextField/RichFilterTextField.js +93 -78
  25. package/dist/components/RichFilterTextField/RichFilterTextFieldProps.d.ts +4 -0
  26. package/dist/components/RichFilterTextField/RichFilterTextFieldProps.d.ts.map +1 -1
  27. package/dist/components/RichFilterTextField/utils.d.ts.map +1 -1
  28. package/dist/components/RichFilterTextField/utils.js +2 -2
  29. package/dist/components/SmartTable/SmartTable.d.ts +3 -1
  30. package/dist/components/SmartTable/SmartTable.d.ts.map +1 -1
  31. package/dist/components/SmartTable/SmartTable.js +102 -34
  32. package/dist/components/SmartTable/SmartTableProps.d.ts +8 -4
  33. package/dist/components/SmartTable/SmartTableProps.d.ts.map +1 -1
  34. package/dist/components/SortBtn/SortBtn.d.ts.map +1 -1
  35. package/dist/components/SortBtn/SortBtn.js +2 -1
  36. package/dist/components/SubtaskItem/SubtaskItem.d.ts.map +1 -1
  37. package/dist/components/SubtaskItem/SubtaskItem.js +8 -34
  38. package/dist/components/SubtaskItem/SubtaskItemProps.d.ts +1 -1
  39. package/dist/components/SubtaskItem/SubtaskItemProps.d.ts.map +1 -1
  40. package/dist/providers/AirflowProvider.d.ts.map +1 -1
  41. package/dist/providers/AirflowProvider.js +1 -0
  42. package/dist/types.d.ts +5 -2
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/utils.d.ts +1 -1
  45. package/dist/utils.d.ts.map +1 -1
  46. package/package.json +5 -3
@@ -1,4 +1,23 @@
1
1
  import React from "react";
2
2
  import ActionDialogProps from "./ActionDialogProps";
3
+ /**
4
+ * Диалоговое окно с подтверждением действия.
5
+ *
6
+ * Отображает заголовок, основной текст (или массив строк), опциональную форму/элемент ввода,
7
+ * а также кнопки отмены и подтверждения. Кнопка подтверждения может быть отключена и снабжена подсказкой.
8
+ *
9
+ * @param open Открыт ли диалог
10
+ * @param fullWidth Растягивать ли диалог на всю ширину
11
+ * @param maxWidth Максимальная ширина диалога
12
+ * @param title Заголовок диалога
13
+ * @param contentText Основной текст (строка или массив строк)
14
+ * @param contentInputForm Необязательная форма/элемент ввода
15
+ * @param cancelText Текст кнопки отмены
16
+ * @param confirmText Текст кнопки подтверждения
17
+ * @param confirmAllowed Разрешено ли подтверждение
18
+ * @param confirmTooltipTitle Подсказка для кнопки подтверждения при отключении
19
+ * @param onClose Обработчик закрытия диалога
20
+ * @param onConfirm Обработчик подтверждения
21
+ */
3
22
  export default function ActionDialog({ open, fullWidth, maxWidth, title, contentText, contentInputForm, cancelText, confirmText, confirmAllowed, confirmTooltipTitle, onClose, onConfirm, }: ActionDialogProps): React.JSX.Element;
4
23
  //# sourceMappingURL=ActionDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionDialog.d.ts","sourceRoot":"","sources":["../../../src/components/ActionDialog/ActionDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,SAAS,GACV,EAAE,iBAAiB,qBAiDnB"}
1
+ {"version":3,"file":"ActionDialog.d.ts","sourceRoot":"","sources":["../../../src/components/ActionDialog/ActionDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,SAAS,GACV,EAAE,iBAAiB,qBAiDnB"}
@@ -8,6 +8,25 @@ import DialogContentText from "@mui/material/DialogContentText";
8
8
  import DialogTitle from "@mui/material/DialogTitle";
9
9
  import IconButton from "@mui/material/IconButton";
10
10
  import Tooltip from "@mui/material/Tooltip";
11
+ /**
12
+ * Диалоговое окно с подтверждением действия.
13
+ *
14
+ * Отображает заголовок, основной текст (или массив строк), опциональную форму/элемент ввода,
15
+ * а также кнопки отмены и подтверждения. Кнопка подтверждения может быть отключена и снабжена подсказкой.
16
+ *
17
+ * @param open Открыт ли диалог
18
+ * @param fullWidth Растягивать ли диалог на всю ширину
19
+ * @param maxWidth Максимальная ширина диалога
20
+ * @param title Заголовок диалога
21
+ * @param contentText Основной текст (строка или массив строк)
22
+ * @param contentInputForm Необязательная форма/элемент ввода
23
+ * @param cancelText Текст кнопки отмены
24
+ * @param confirmText Текст кнопки подтверждения
25
+ * @param confirmAllowed Разрешено ли подтверждение
26
+ * @param confirmTooltipTitle Подсказка для кнопки подтверждения при отключении
27
+ * @param onClose Обработчик закрытия диалога
28
+ * @param onConfirm Обработчик подтверждения
29
+ */
11
30
  export default function ActionDialog({ open, fullWidth, maxWidth, title, contentText, contentInputForm, cancelText, confirmText, confirmAllowed, confirmTooltipTitle, onClose, onConfirm, }) {
12
31
  return (React.createElement(Dialog, { open: open, onClose: onClose, maxWidth: maxWidth, fullWidth: fullWidth },
13
32
  React.createElement(DialogTitle, null, title),
@@ -1,17 +1,32 @@
1
1
  import { ReactNode } from "react";
2
2
  import { Breakpoint } from "@mui/material";
3
+ /**
4
+ * Пропсы для компонента ActionDialog.
5
+ */
3
6
  export default interface ActionDialogProps {
7
+ /** Открыт ли диалог */
4
8
  open: boolean;
9
+ /** Растягивать ли диалог на всю ширину */
5
10
  fullWidth?: boolean;
11
+ /** Максимальная ширина диалога (MUI Breakpoint) */
6
12
  maxWidth?: Breakpoint;
13
+ /** Заголовок диалога */
7
14
  title: string;
15
+ /** Основной текст диалога (строка или массив строк) */
8
16
  contentText: string | string[];
17
+ /** Необязательная форма или элемент ввода для отображения в диалоге */
9
18
  contentInputForm?: ReactNode;
19
+ /** Текст для кнопки отмены */
10
20
  cancelText: string;
21
+ /** Текст для кнопки подтверждения */
11
22
  confirmText: string;
23
+ /** Разрешено ли подтверждение (включает/отключает кнопку подтверждения) */
12
24
  confirmAllowed: boolean;
25
+ /** Необязательная подсказка для кнопки подтверждения при отключении */
13
26
  confirmTooltipTitle?: string;
27
+ /** Обработчик подтверждения */
14
28
  onConfirm(): void;
29
+ /** Обработчик закрытия диалога */
15
30
  onClose(): void;
16
31
  }
17
32
  //# sourceMappingURL=ActionDialogProps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionDialogProps.d.ts","sourceRoot":"","sources":["../../../src/components/ActionDialog/ActionDialogProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,OAAO,WAAW,iBAAiB;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,IAAI,IAAI,CAAC;IAClB,OAAO,IAAI,IAAI,CAAC;CACjB"}
1
+ {"version":3,"file":"ActionDialogProps.d.ts","sourceRoot":"","sources":["../../../src/components/ActionDialog/ActionDialogProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,iBAAiB;IACxC,uBAAuB;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;IACxB,uEAAuE;IACvE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+BAA+B;IAC/B,SAAS,IAAI,IAAI,CAAC;IAClB,kCAAkC;IAClC,OAAO,IAAI,IAAI,CAAC;CACjB"}
@@ -1,4 +1,16 @@
1
1
  import React from "react";
2
2
  import ColumnSearchInputProps from "./ColumnSearchInputProps";
3
+ /**
4
+ * Компонент поля поиска для таблицы или списка.
5
+ *
6
+ * Позволяет пользователю вводить строку поиска для определённого поля с отображением иконки поиска.
7
+ *
8
+ * @param {Object} props - Свойства компонента
9
+ * @param {string} props.field - Имя поля, по которому осуществляется поиск
10
+ * @param {string|function} [props.searchStr] - Начальное значение строки поиска или функция, возвращающая строку
11
+ * @param {function} props.onInputSearch - Колбэк, вызываемый при изменении строки поиска. Получает массив объектов с полем и строкой поиска
12
+ *
13
+ * @returns {JSX.Element} Элемент поля поиска
14
+ */
3
15
  export default function ColumnSearchInput({ field, searchStr, onInputSearch, }: ColumnSearchInputProps): React.JSX.Element;
4
16
  //# sourceMappingURL=ColumnSearchInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnSearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnSearchInput/ColumnSearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAMrD,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAE9D,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,KAAK,EACL,SAAS,EACT,aAAa,GACd,EAAE,sBAAsB,qBA4BxB"}
1
+ {"version":3,"file":"ColumnSearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnSearchInput/ColumnSearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAMrD,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,KAAK,EACL,SAAS,EACT,aAAa,GACd,EAAE,sBAAsB,qBA4BxB"}
@@ -2,6 +2,18 @@ import React, { useState } from "react";
2
2
  import InputAdornment from "@mui/material/InputAdornment";
3
3
  import TextField from "@mui/material/TextField";
4
4
  import SearchIcon from "@mui/icons-material/Search";
5
+ /**
6
+ * Компонент поля поиска для таблицы или списка.
7
+ *
8
+ * Позволяет пользователю вводить строку поиска для определённого поля с отображением иконки поиска.
9
+ *
10
+ * @param {Object} props - Свойства компонента
11
+ * @param {string} props.field - Имя поля, по которому осуществляется поиск
12
+ * @param {string|function} [props.searchStr] - Начальное значение строки поиска или функция, возвращающая строку
13
+ * @param {function} props.onInputSearch - Колбэк, вызываемый при изменении строки поиска. Получает массив объектов с полем и строкой поиска
14
+ *
15
+ * @returns {JSX.Element} Элемент поля поиска
16
+ */
5
17
  export default function ColumnSearchInput({ field, searchStr, onInputSearch, }) {
6
18
  const [search, setSearch] = useState(searchStr || "");
7
19
  function handleChange(event) {
@@ -1,6 +1,15 @@
1
1
  export default interface ColumnSearchInputProps {
2
+ /**
3
+ * Имя поля, по которому будет производиться поиск.
4
+ */
2
5
  field: string;
6
+ /**
7
+ * Начальная строка поиска или функция, возвращающая строку поиска (опционально).
8
+ */
3
9
  searchStr?: string | (() => string);
10
+ /**
11
+ * Колбэк, вызываемый при изменении строки поиска. Получает массив объектов с полем и строкой поиска.
12
+ */
4
13
  onInputSearch(options: {
5
14
  field: string;
6
15
  search: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnSearchInputProps.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnSearchInput/ColumnSearchInputProps.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,sBAAsB;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACpC,aAAa,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;CACnE"}
1
+ {"version":3,"file":"ColumnSearchInputProps.d.ts","sourceRoot":"","sources":["../../../src/components/ColumnSearchInput/ColumnSearchInputProps.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,sBAAsB;IAC7C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACpC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;CACnE"}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
2
  import DateTimeRangePickerProps from "./DateTimeRangePickerProps";
3
3
  import "moment/locale/ru";
4
- export default function DateTimeRangePicker({ disableFuture, disabled, fromDatetime, toDateTime, required, onStartDateSet, onEndDateSet, }: DateTimeRangePickerProps): React.JSX.Element;
4
+ export default function DateTimeRangePicker({ disableFuture, disabled, fromDatetime, toDateTime, required, error, onStartDateSet, onEndDateSet, }: DateTimeRangePickerProps): React.JSX.Element;
5
5
  //# sourceMappingURL=DateTimeRangePicker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeRangePicker.d.ts","sourceRoot":"","sources":["../../../src/components/DateTimeRangePicker/DateTimeRangePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,kBAAkB,CAAC;AAU1B,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,YAAY,GACb,EAAE,wBAAwB,qBAmF1B"}
1
+ {"version":3,"file":"DateTimeRangePicker.d.ts","sourceRoot":"","sources":["../../../src/components/DateTimeRangePicker/DateTimeRangePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,kBAAkB,CAAC;AAU1B,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,KAAK,EACL,cAAc,EACd,YAAY,GACb,EAAE,wBAAwB,qBAmF1B"}
@@ -5,7 +5,7 @@ import Stack from "@mui/material/Stack";
5
5
  import { DesktopDateTimePicker, LocalizationProvider, } from "@mui/x-date-pickers";
6
6
  import { AdapterMoment } from "@mui/x-date-pickers/AdapterMoment";
7
7
  import { useDebounce } from "../../utils";
8
- export default function DateTimeRangePicker({ disableFuture, disabled, fromDatetime, toDateTime, required, onStartDateSet, onEndDateSet, }) {
8
+ export default function DateTimeRangePicker({ disableFuture, disabled, fromDatetime, toDateTime, required, error, onStartDateSet, onEndDateSet, }) {
9
9
  const [fromDatetimePickerOpen, setFromDatetimePickerOpen] = useState(false);
10
10
  const [toDatetimePickerOpen, setToDatetimePickerOpen] = useState(false);
11
11
  const fromDttm = fromDatetime.length > 0 ? moment(fromDatetime) : null;
@@ -23,7 +23,7 @@ export default function DateTimeRangePicker({ disableFuture, disabled, fromDatet
23
23
  variant: "standard",
24
24
  required: required,
25
25
  helperText: required && fromDttm == null && "Введите дату начала интервала",
26
- error: required ? fromDttm == null : false,
26
+ error: error || (required && toDttm == null),
27
27
  },
28
28
  inputAdornment: {
29
29
  position: "start",
@@ -41,7 +41,7 @@ export default function DateTimeRangePicker({ disableFuture, disabled, fromDatet
41
41
  variant: "standard",
42
42
  required: required,
43
43
  helperText: required && toDttm == null && "Введите дату конца интервала",
44
- error: required ? toDttm == null : false,
44
+ error: error || (required && toDttm == null),
45
45
  },
46
46
  inputAdornment: {
47
47
  onClick: () => setToDatetimePickerOpen(true),
@@ -4,6 +4,7 @@ export default interface DateTimeRangePickerProps {
4
4
  fromDatetime: string;
5
5
  toDateTime: string;
6
6
  required?: boolean;
7
+ error?: boolean;
7
8
  onStartDateSet(startDate: string): void;
8
9
  onEndDateSet(endDate: string): void;
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeRangePickerProps.d.ts","sourceRoot":"","sources":["../../../src/components/DateTimeRangePicker/DateTimeRangePickerProps.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC"}
1
+ {"version":3,"file":"DateTimeRangePickerProps.d.ts","sourceRoot":"","sources":["../../../src/components/DateTimeRangePicker/DateTimeRangePickerProps.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC"}
@@ -1,5 +1,23 @@
1
- import React from "react";
2
1
  import "moment/locale/ru";
3
2
  import DatetimeRangeInputProps from "./DatetimeRangeInputProps";
4
- export default function DatetimeRangeInput({ onDateRangeSet, from, to, variant, sx, placeholder, size, disabled, required, }: DatetimeRangeInputProps): React.JSX.Element;
3
+ /**
4
+ * Компонент выбора диапазона дат и времени.
5
+ *
6
+ * Позволяет пользователю выбрать начальную и конечную дату/время с помощью всплывающего календаря.
7
+ * Поддерживает очистку выбранного диапазона и отображение выбранных дат в текстовом поле.
8
+ *
9
+ * @param {Object} props - Свойства компонента
10
+ * @param {string} [props.from] - Начальная дата диапазона
11
+ * @param {string} [props.to] - Конечная дата диапазона
12
+ * @param {SxProps} [props.sx] - Стили оформления
13
+ * @param {boolean} [props.required] - Обязательное ли поле
14
+ * @param {boolean} [props.disabled] - Отключение компонента
15
+ * @param {('outlined'|'standard'|'filled')} [props.variant] - Вариант оформления поля
16
+ * @param {string} [props.placeholder] - Текст-подсказка
17
+ * @param {('small'|'medium')} [props.size] - Размер поля
18
+ * @param {(start: string, end: string) => void} props.onDateRangeSet - Колбэк при выборе диапазона дат
19
+ *
20
+ * @returns {JSX.Element} Элемент выбора диапазона дат и времени
21
+ */
22
+ export default function DatetimeRangeInput({ onDateRangeSet, from, to, variant, sx, placeholder, size, disabled, required, }: DatetimeRangeInputProps): JSX.Element;
5
23
  //# sourceMappingURL=DatetimeRangeInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatetimeRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/DatetimeRangeInput/DatetimeRangeInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAGhE,OAAO,kBAAkB,CAAC;AAQ1B,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAMhE,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,cAAc,EACd,IAAI,EACJ,EAAE,EACF,OAAO,EACP,EAAE,EACF,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE,uBAAuB,qBAiHzB"}
1
+ {"version":3,"file":"DatetimeRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/DatetimeRangeInput/DatetimeRangeInput.tsx"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAQ1B,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAQhE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,cAAc,EACd,IAAI,EACJ,EAAE,EACF,OAAO,EACP,EAAE,EACF,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAiHvC"}
@@ -9,6 +9,25 @@ import ClearIcon from "@mui/icons-material/Clear";
9
9
  const DateTimeRangePicker = lazy(() => import("../DateTimeRangePicker/DateTimeRangePicker"));
10
10
  import { prettyDatetime } from "../../utils";
11
11
  import { Skeleton, Stack } from "@mui/material";
12
+ /**
13
+ * Компонент выбора диапазона дат и времени.
14
+ *
15
+ * Позволяет пользователю выбрать начальную и конечную дату/время с помощью всплывающего календаря.
16
+ * Поддерживает очистку выбранного диапазона и отображение выбранных дат в текстовом поле.
17
+ *
18
+ * @param {Object} props - Свойства компонента
19
+ * @param {string} [props.from] - Начальная дата диапазона
20
+ * @param {string} [props.to] - Конечная дата диапазона
21
+ * @param {SxProps} [props.sx] - Стили оформления
22
+ * @param {boolean} [props.required] - Обязательное ли поле
23
+ * @param {boolean} [props.disabled] - Отключение компонента
24
+ * @param {('outlined'|'standard'|'filled')} [props.variant] - Вариант оформления поля
25
+ * @param {string} [props.placeholder] - Текст-подсказка
26
+ * @param {('small'|'medium')} [props.size] - Размер поля
27
+ * @param {(start: string, end: string) => void} props.onDateRangeSet - Колбэк при выборе диапазона дат
28
+ *
29
+ * @returns {JSX.Element} Элемент выбора диапазона дат и времени
30
+ */
12
31
  export default function DatetimeRangeInput({ onDateRangeSet, from, to, variant, sx, placeholder, size, disabled, required, }) {
13
32
  const [datetimeRangePickerOpen, setDatetimeRangePickerOpen] = useState(false);
14
33
  const [fromDatetime, setFromDatetime] = useState(from || "");
@@ -1,13 +1,43 @@
1
1
  import { SxProps } from "@mui/material";
2
+ /**
3
+ * Интерфейс для пропсов компонента выбора диапазона дат.
4
+ */
2
5
  export default interface DatetimeRangeInputProps {
6
+ /**
7
+ * Начальная дата диапазона (опционально).
8
+ */
3
9
  from?: string;
10
+ /**
11
+ * Конечная дата диапазона (опционально).
12
+ */
4
13
  to?: string;
14
+ /**
15
+ * Стили оформления компонента (опционально).
16
+ */
5
17
  sx?: SxProps;
18
+ /**
19
+ * Обязательное ли заполнение поля (опционально).
20
+ */
6
21
  required?: boolean;
22
+ /**
23
+ * Отключение компонента (опционально).
24
+ */
7
25
  disabled?: boolean;
26
+ /**
27
+ * Вариант оформления поля: outlined, standard или filled (опционально).
28
+ */
8
29
  variant?: "outlined" | "standard" | "filled";
30
+ /**
31
+ * Текст-подсказка (placeholder) (опционально).
32
+ */
9
33
  placeholder?: string;
34
+ /**
35
+ * Размер поля: small или medium (опционально).
36
+ */
10
37
  size?: "small" | "medium";
38
+ /**
39
+ * Колбэк, вызываемый при выборе диапазона дат. Принимает начальную и конечную дату.
40
+ */
11
41
  onDateRangeSet(start: string, end: string): void;
12
42
  }
13
43
  //# sourceMappingURL=DatetimeRangeInputProps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatetimeRangeInputProps.d.ts","sourceRoot":"","sources":["../../../src/components/DatetimeRangeInput/DatetimeRangeInputProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,OAAO,WAAW,uBAAuB;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD"}
1
+ {"version":3,"file":"DatetimeRangeInputProps.d.ts","sourceRoot":"","sources":["../../../src/components/DatetimeRangeInput/DatetimeRangeInputProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,uBAAuB;IAC9C;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,EAAE,CAAC,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC7C;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD"}
@@ -1,4 +1,12 @@
1
1
  import React from "react";
2
+ import ArrowDropDownRoundedIcon from "@mui/icons-material/ArrowDropDownRounded";
3
+ import ArrowRightRoundedIcon from "@mui/icons-material/ArrowRightRounded";
4
+ import DarkModeIcon from "@mui/icons-material/DarkMode";
5
+ import HubIcon from "@mui/icons-material/Hub";
6
+ import LightModeIcon from "@mui/icons-material/LightMode";
7
+ import LogoutIcon from "@mui/icons-material/Logout";
8
+ import ManageAccountsIcon from "@mui/icons-material/ManageAccounts";
9
+ import MenuIcon from "@mui/icons-material/Menu";
2
10
  import AppBar from "@mui/material/AppBar";
3
11
  import Box from "@mui/material/Box";
4
12
  import Container from "@mui/material/Container";
@@ -7,14 +15,6 @@ import Menu from "@mui/material/Menu";
7
15
  import MenuItem from "@mui/material/MenuItem";
8
16
  import Toolbar from "@mui/material/Toolbar";
9
17
  import Typography from "@mui/material/Typography";
10
- import LogoutIcon from "@mui/icons-material/Logout";
11
- import MenuIcon from "@mui/icons-material/Menu";
12
- import LightModeIcon from "@mui/icons-material/LightMode";
13
- import DarkModeIcon from "@mui/icons-material/DarkMode";
14
- import HubIcon from "@mui/icons-material/Hub";
15
- import ManageAccountsIcon from "@mui/icons-material/ManageAccounts";
16
- import ArrowDropDownRoundedIcon from "@mui/icons-material/ArrowDropDownRounded";
17
- import ArrowRightRoundedIcon from "@mui/icons-material/ArrowRightRounded";
18
18
  import Avatar from "@mui/material/Avatar";
19
19
  import ListItemIcon from "@mui/material/ListItemIcon";
20
20
  import ListItemText from "@mui/material/ListItemText";
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
2
  import RichFilterTextFieldProps from "./RichFilterTextFieldProps";
3
- declare const RichFilterTextField: ({ filterExpr, filterExprHist, fields, operators, onChange, }: RichFilterTextFieldProps) => React.JSX.Element;
3
+ declare const RichFilterTextField: ({ filterExpr, filterExprHist: searchHist, fields, operators, additionalComponents, instant: _instant, onChange, onSelectFromHistory, }: RichFilterTextFieldProps) => React.JSX.Element;
4
4
  export default RichFilterTextField;
5
5
  //# sourceMappingURL=RichFilterTextField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RichFilterTextField.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/RichFilterTextField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAoBf,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAIlE,QAAA,MAAM,mBAAmB,GAAI,8DAM1B,wBAAwB,sBA+P1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"RichFilterTextField.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/RichFilterTextField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AAUf,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAKlE,QAAA,MAAM,mBAAmB,GAAI,wIAS1B,wBAAwB,sBA6R1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1,53 +1,45 @@
1
- import React, { useEffect, useRef, useState, } from "react";
2
- import Stack from "@mui/material/Stack";
1
+ import React, { useRef, useState, } from "react";
3
2
  import IconButton from "@mui/material/IconButton";
4
3
  import InputAdornment from "@mui/material/InputAdornment";
5
4
  import TextField from "@mui/material/TextField";
6
5
  import ClearIcon from "@mui/icons-material/Clear";
7
- import FilterListIcon from "@mui/icons-material/FilterList";
8
- import HistoryIcon from "@mui/icons-material/History";
9
- import ContentCopy from "@mui/icons-material/ContentCopy";
10
- import Divider from "@mui/material/Divider";
11
- import ListItemIcon from "@mui/material/ListItemIcon";
12
- import ListItemText from "@mui/material/ListItemText";
13
- import Menu from "@mui/material/Menu";
14
- import MenuItem from "@mui/material/MenuItem";
15
- import Typography from "@mui/material/Typography";
6
+ import SearchRoundedIcon from "@mui/icons-material/SearchRounded";
16
7
  import HintOptionsMenu from "./HintOptionsMenu";
17
8
  import { getHints, insertInStrPos } from "./utils";
18
9
  import { useSnackbarContext } from "../../providers";
19
- import { useDebounce } from "../../utils";
20
- const RichFilterTextField = ({ filterExpr, filterExprHist, fields, operators, onChange, }) => {
10
+ import FilterHistoryMenu from "./FilterHistoryMenu";
11
+ import { Stack } from "@mui/material";
12
+ const RichFilterTextField = ({ filterExpr, filterExprHist: searchHist, fields, operators, additionalComponents, instant: _instant, onChange, onSelectFromHistory, }) => {
21
13
  const { enqueueSnackbar } = useSnackbarContext();
22
14
  const [search, setSearch] = useState(filterExpr);
23
- const [searchHist, setSearchHist] = useState(filterExprHist);
24
- const [searchHistMenuAnchor, setSearchHistMenuAnchor] = useState(null);
25
- const [inputAnchor, setInputAnchor] = useState(null);
26
15
  const [cursorPos, setCursorPos] = useState(null);
27
- const [currentHintOptions, setCurrentHintOptions] = useState(() => new Map());
28
16
  const [focusIdx, setFocusIdx] = useState(0);
29
17
  const inputRef = useRef(null);
30
18
  const textFieldRef = useRef(null);
31
- const updateHints = useDebounce(() => {
32
- if (cursorPos == null)
33
- return;
34
- const hints = getHints(search, cursorPos, fields, operators);
35
- setCurrentHintOptions(hints);
19
+ const prevFilterExpr = useRef(filterExpr);
20
+ const instant = _instant ?? true;
21
+ const currentHintOptions = (cursorPos != null
22
+ ? getHints(search, cursorPos, fields, operators)
23
+ : null) ?? new Map();
24
+ const inputAnchor = currentHintOptions?.size > 0 ? textFieldRef.current : null;
25
+ if (prevFilterExpr.current !== filterExpr && filterExpr !== search) {
26
+ setSearch(filterExpr);
27
+ setCursorPos(null);
36
28
  setFocusIdx(0);
37
- setInputAnchor(hints?.size > 0 ? textFieldRef.current : null);
38
- }, 20);
39
- useEffect(() => {
40
- if (cursorPos == null)
41
- return;
42
- if (inputRef.current && cursorPos !== inputRef.current.selectionStart) {
43
- inputRef.current.selectionStart = cursorPos;
44
- inputRef.current.selectionEnd = cursorPos;
45
- }
46
- updateHints();
47
- }, [cursorPos]);
48
- const handleChange = (value) => {
29
+ prevFilterExpr.current = filterExpr;
30
+ }
31
+ if (cursorPos != null &&
32
+ inputRef.current &&
33
+ cursorPos !== inputRef.current.selectionStart) {
34
+ inputRef.current.selectionStart = cursorPos;
35
+ inputRef.current.selectionEnd = cursorPos;
36
+ }
37
+ const handleChange = (value, _idx) => {
49
38
  setSearch(value);
50
- onChange(value, (v) => setSearchHist(v));
39
+ if (cursorPos &&
40
+ getHints(value, cursorPos, fields, operators) !== currentHintOptions)
41
+ setFocusIdx(0);
42
+ onChange(value /*(v: unknown) => setSearchHist(v as string[])*/);
51
43
  };
52
44
  const insertHint = (hint) => {
53
45
  if (cursorPos == null)
@@ -62,13 +54,18 @@ const RichFilterTextField = ({ filterExpr, filterExprHist, fields, operators, on
62
54
  hint = hint.replace("regex", "");
63
55
  }
64
56
  const { newSearch, newPos } = insertInStrPos(search, cursorPos, hint, fields);
65
- handleChange(newSearch);
57
+ setSearch(newSearch);
58
+ if (instant)
59
+ onChange(newSearch);
60
+ let newCursorPos = newPos;
66
61
  if (hint.includes("[") || hint.includes("(") || hint.includes("/")) {
67
- setCursorPos(newPos - 1);
68
- }
69
- else {
70
- setCursorPos(newPos);
62
+ newCursorPos--;
71
63
  }
64
+ setCursorPos(newCursorPos);
65
+ if (newCursorPos &&
66
+ getHints(newSearch, newCursorPos, fields, operators) !==
67
+ currentHintOptions)
68
+ setFocusIdx(0);
72
69
  };
73
70
  const handleKeyUp = (e) => {
74
71
  switch (e.code) {
@@ -86,16 +83,24 @@ const RichFilterTextField = ({ filterExpr, filterExprHist, fields, operators, on
86
83
  const focusedHint = currentHintOptions.entries().toArray()[focusIdx][0];
87
84
  insertHint(focusedHint);
88
85
  }
86
+ else {
87
+ onChange(search);
88
+ inputRef.current?.blur();
89
+ }
89
90
  break;
90
91
  }
91
92
  case "Escape":
92
93
  case "Tab": {
93
- setInputAnchor(null);
94
94
  setCursorPos(null);
95
95
  break;
96
96
  }
97
97
  default: {
98
- setCursorPos(inputRef.current?.selectionStart ?? null);
98
+ const newCursorPos = inputRef.current?.selectionStart ?? null;
99
+ setCursorPos(newCursorPos);
100
+ if (newCursorPos &&
101
+ getHints(search, newCursorPos, fields, operators) !==
102
+ currentHintOptions)
103
+ setFocusIdx(0);
99
104
  }
100
105
  }
101
106
  };
@@ -105,8 +110,12 @@ const RichFilterTextField = ({ filterExpr, filterExprHist, fields, operators, on
105
110
  case "ArrowRight":
106
111
  case "Space":
107
112
  case "Backspace": {
108
- setInputAnchor(null);
109
- setCursorPos(inputRef.current?.selectionStart ?? null);
113
+ const newCursorPos = inputRef.current?.selectionStart ?? null;
114
+ setCursorPos(newCursorPos);
115
+ if (newCursorPos &&
116
+ getHints(search, newCursorPos, fields, operators) !==
117
+ currentHintOptions)
118
+ setFocusIdx(0);
110
119
  return;
111
120
  }
112
121
  case "ArrowDown": {
@@ -139,57 +148,63 @@ const RichFilterTextField = ({ filterExpr, filterExprHist, fields, operators, on
139
148
  }
140
149
  case "Escape":
141
150
  case "Tab": {
142
- setInputAnchor(null);
143
151
  setCursorPos(null);
152
+ setFocusIdx(0);
144
153
  break;
145
154
  }
146
155
  default: {
147
- setCursorPos(inputRef.current?.selectionStart ?? null);
156
+ const newCursorPos = inputRef.current?.selectionStart ?? null;
157
+ setCursorPos(newCursorPos);
158
+ if (newCursorPos &&
159
+ getHints(search, newCursorPos, fields, operators) !==
160
+ currentHintOptions)
161
+ setFocusIdx(0);
148
162
  }
149
163
  }
150
164
  };
151
165
  return (React.createElement(React.Fragment, null,
152
- React.createElement(TextField, { ref: textFieldRef, inputRef: inputRef, fullWidth: true, size: "small", value: search, title: search, multiline: true, maxRows: 1, onChange: (e) => handleChange(e.target.value), onClick: () => setCursorPos(inputRef.current?.selectionStart ?? null), onKeyUp: handleKeyUp, onKeyDown: handleKeyDown, slotProps: {
166
+ React.createElement(TextField, { ref: textFieldRef, inputRef: inputRef, fullWidth: true, size: "small", value: search, title: search, multiline: true, maxRows: 1, onChange: (e) => {
167
+ (instant ? handleChange : setSearch)(e.target.value);
168
+ const newCursorPos = inputRef.current?.selectionStart ?? null;
169
+ setCursorPos(newCursorPos);
170
+ if (newCursorPos &&
171
+ getHints(e.target.value, newCursorPos, fields, operators) !==
172
+ currentHintOptions)
173
+ setFocusIdx(0);
174
+ }, onKeyUp: handleKeyUp, onKeyDown: handleKeyDown, slotProps: {
175
+ htmlInput: {
176
+ onClick: (e) => {
177
+ if (Object(e).target !== Object(e).currentTarget)
178
+ return;
179
+ const newCursorPos = inputRef.current?.selectionStart ?? null;
180
+ setCursorPos(newCursorPos);
181
+ if (newCursorPos &&
182
+ getHints(search, newCursorPos, fields, operators) !==
183
+ currentHintOptions)
184
+ setFocusIdx(0);
185
+ },
186
+ },
153
187
  input: {
188
+ startAdornment: (React.createElement(InputAdornment, { position: "start" },
189
+ React.createElement(Stack, { direction: "row", sx: { alignItems: "center" } },
190
+ !instant && (React.createElement(IconButton, { onClick: (e) => {
191
+ onChange(search);
192
+ e.stopPropagation();
193
+ }, title: "\u041F\u043E\u0438\u0441\u043A" },
194
+ React.createElement(SearchRoundedIcon, null))),
195
+ React.createElement(FilterHistoryMenu, { searchHist: searchHist, onChange: onSelectFromHistory || handleChange, onCopy: () => enqueueSnackbar("Предустановка фильтра скопирована в буфер обмена", "default") }),
196
+ additionalComponents))),
154
197
  endAdornment: (React.createElement(InputAdornment, { position: "end" },
155
198
  React.createElement(IconButton, { title: "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440\u044B", disabled: !search, onClick: (e) => {
156
- setSearch("");
157
- onChange("", (v) => setSearchHist(v));
199
+ handleChange("");
158
200
  e.stopPropagation();
159
201
  } },
160
202
  React.createElement(ClearIcon, null)))),
161
- startAdornment: (React.createElement(InputAdornment, { position: "start" },
162
- React.createElement(IconButton, { color: "secondary", title: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E \u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432", disabled: searchHist.length === 0, onClick: (e) => {
163
- setSearchHistMenuAnchor(e.currentTarget);
164
- e.stopPropagation();
165
- } },
166
- React.createElement(FilterListIcon, null)))),
167
203
  },
168
204
  } }),
169
205
  React.createElement(HintOptionsMenu, { inputAnchor: inputAnchor, inputRef: inputRef, textFieldRef: textFieldRef, options: currentHintOptions, focusIdx: focusIdx, onSelectHint: insertHint, onClose: () => {
170
- setInputAnchor(null);
171
206
  setCursorPos(null);
172
- } }),
173
- React.createElement(Menu, { anchorEl: searchHistMenuAnchor, open: Boolean(searchHistMenuAnchor), onClose: () => setSearchHistMenuAnchor(null), onClick: () => setSearchHistMenuAnchor(null) },
174
- React.createElement(Stack, { direction: "row", spacing: 1, sx: {
175
- px: 2,
176
- py: 1,
177
- alignItems: "center",
178
- } },
179
- React.createElement(HistoryIcon, null),
180
- React.createElement(Typography, { variant: "h5" }, "\u0418\u0441\u0442\u043E\u0440\u0438\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0445 \u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432")),
181
- React.createElement(Divider, null),
182
- searchHist.map((el, idx) => (React.createElement(MenuItem, { key: idx + 1, onClick: () => handleChange(el), title: el },
183
- React.createElement(ListItemText, { sx: { overflow: "hidden" } },
184
- idx + 1,
185
- ". ",
186
- el),
187
- React.createElement(ListItemIcon, null,
188
- React.createElement(IconButton, { onClick: (e) => {
189
- navigator.clipboard.writeText(el);
190
- e.stopPropagation();
191
- enqueueSnackbar("Предустановка фильтра скопирована в буфер обмена", "default");
192
- } },
193
- React.createElement(ContentCopy, { fontSize: "small" })))))))));
207
+ setFocusIdx(0);
208
+ } })));
194
209
  };
195
210
  export default RichFilterTextField;
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  export interface FilterField {
2
3
  /**
3
4
  * Название поля. Используется при подстановке. Должно оканчиваться двоеточием
@@ -62,6 +63,9 @@ export default interface RichFilterTextFieldProps {
62
63
  * Список операторов фильтрации
63
64
  */
64
65
  operators: FilterOperator[];
66
+ instant?: boolean;
67
+ additionalComponents?: React.JSX.Element[];
65
68
  onChange(value: string, onSuccess?: (v: unknown) => void): void;
69
+ onSelectFromHistory?(value: string, idx: number): void;
66
70
  }
67
71
  //# sourceMappingURL=RichFilterTextFieldProps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RichFilterTextFieldProps.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/RichFilterTextFieldProps.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAC/C;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CACjE"}
1
+ {"version":3,"file":"RichFilterTextFieldProps.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/RichFilterTextFieldProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAC/C;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAChE,mBAAmB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EAEf,MAAM,4BAA4B,CAAC;AAapC,eAAO,MAAM,QAAQ,GACnB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,QAAQ,WAAW,EAAE,EACrB,WAAW,cAAc,EAAE,oCAqE5B,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,MAAM,MAAM,EACZ,QAAQ,WAAW,EAAE;;;CAoFtB,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/RichFilterTextField/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EAEf,MAAM,4BAA4B,CAAC;AAepC,eAAO,MAAM,QAAQ,GACnB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,QAAQ,WAAW,EAAE,EACrB,WAAW,cAAc,EAAE,oCAyE5B,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,MAAM,MAAM,EACZ,QAAQ,WAAW,EAAE;;;CAoFtB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  const getSingleMatch = (token, fields) => {
2
- const matchedFields = fields.filter((v) => v.name.startsWith(token));
2
+ const matchedFields = fields.filter((v) => v.name.toLowerCase().startsWith(token.toLowerCase()));
3
3
  if (matchedFields.length !== 1)
4
4
  return undefined;
5
5
  return matchedFields[0];
@@ -52,7 +52,7 @@ export const getHints = (search, cursorPos, fields, operators) => {
52
52
  if (fieldHasValues && validToken) {
53
53
  return getMapOf(matchedField?.values || []);
54
54
  }
55
- return getMapOf(fields.filter((v) => v.name.startsWith(token)));
55
+ return getMapOf(fields.filter((v) => v.name.toLowerCase().startsWith(token.toLowerCase())));
56
56
  }
57
57
  }
58
58
  }
@@ -1,4 +1,6 @@
1
1
  import React from "react";
2
2
  import SmartTableProps from "./SmartTableProps";
3
- export default function SmartTable<T>({ rows, columns, pageN, numPages, perPage, loading, minWidth, width, rowStyles, selectable, selectedRow, sx, disablePerPageSelector, globalSearch, columnAutoWidth, globalSearchComponent, ContentWrapper, onRowDoubleClick, onSelectRow, controlComponent: ControlComponent, onToggleSort, onInputSearch, onPageSelect, onChangePerPage, controlComponentColSx, }: SmartTableProps<T>): React.JSX.Element;
3
+ export default function SmartTable<T extends {
4
+ id: string | number;
5
+ }>({ rows, columns, pageN, numPages, perPage, loading, minWidth, width, rowStyles, selectable, selectedRow, sx, disablePerPageSelector, globalSearch, columnAutoWidth, error, globalSearchComponent, ContentWrapper, onRowDoubleClick, onSelectRow, controlComponent: ControlComponent, onToggleSort, onInputSearch, onPageSelect, onChangePerPage, controlComponentColSx, perPageOptions, }: SmartTableProps<T>): React.JSX.Element;
4
6
  //# sourceMappingURL=SmartTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SmartTable.d.ts","sourceRoot":"","sources":["../../../src/components/SmartTable/SmartTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAiBxD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAMhD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,CAAC,EAAE,EACpC,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,EACR,KAAK,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,EAAE,EACF,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,qBAAqB,GACtB,EAAE,eAAe,CAAC,CAAC,CAAC,qBAgQpB"}
1
+ {"version":3,"file":"SmartTable.d.ts","sourceRoot":"","sources":["../../../src/components/SmartTable/SmartTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AA2BlD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AA4GhD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CAAE,EAAE,EACrE,IAAI,EACJ,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,EACR,KAAK,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,EAAE,EACF,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,KAAK,EACL,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,cAAc,GACf,EAAE,eAAe,CAAC,CAAC,CAAC,qBA4TpB"}
@@ -1,4 +1,5 @@
1
- import React, { lazy, Suspense } from "react";
1
+ import React, { Fragment, Suspense } from "react";
2
+ import { CircularProgress, Skeleton, Stack, Typography, useTheme, } from "@mui/material";
2
3
  import FormControl from "@mui/material/FormControl";
3
4
  import InputLabel from "@mui/material/InputLabel";
4
5
  import MenuItem from "@mui/material/MenuItem";
@@ -8,15 +9,58 @@ import Select from "@mui/material/Select";
8
9
  import Table from "@mui/material/Table";
9
10
  import TableBody from "@mui/material/TableBody";
10
11
  import TableCell from "@mui/material/TableCell";
12
+ import TableContainer from "@mui/material/TableContainer";
11
13
  import TableFooter from "@mui/material/TableFooter";
12
- import TableHead from "@mui/material/TableHead";
13
14
  import TableRow from "@mui/material/TableRow";
14
- import TableContainer from "@mui/material/TableContainer";
15
- import { useTheme, Stack, CircularProgress } from "@mui/material";
16
- import SortBtn from "../SortBtn/SortBtn";
15
+ import { TableVirtuoso } from "react-virtuoso";
17
16
  import ColumnSearchInput from "../ColumnSearchInput/ColumnSearchInput";
18
- const RuleRow = lazy(() => import("./RuleRow"));
19
- export default function SmartTable({ rows, columns, pageN, numPages, perPage, loading, minWidth, width, rowStyles, selectable, selectedRow, sx, disablePerPageSelector, globalSearch, columnAutoWidth, globalSearchComponent, ContentWrapper, onRowDoubleClick, onSelectRow, controlComponent: ControlComponent, onToggleSort, onInputSearch, onPageSelect, onChangePerPage, controlComponentColSx, }) {
17
+ import SortBtn from "../SortBtn/SortBtn";
18
+ import RowContent from "./RowContent";
19
+ import TableHeader from "./TableHeader";
20
+ // eslint-disable-next-line react/display-name
21
+ const Scroller = React.forwardRef((props, ref) => (React.createElement(TableContainer, { component: Paper, ...props, ref: ref, sx: {
22
+ minWidth: Object(props).context.minWidth || "100%",
23
+ flexGrow: 1,
24
+ overflowX: "auto",
25
+ } },
26
+ Object(props).children,
27
+ Object(props).context.placeholder)));
28
+ const TableHead =
29
+ // eslint-disable-next-line react/display-name
30
+ React.forwardRef((props, ref) => (React.createElement(TableHeader, { ...props, ref: ref })));
31
+ const TableBodyWrapper =
32
+ // eslint-disable-next-line react/display-name
33
+ React.forwardRef((props, ref) => (React.createElement(TableBody, { ...props, ref: ref })));
34
+ const Row = (props) => {
35
+ const ContentWrapper = Object(props).context.ContentWrapper;
36
+ const selectedRow = Object(props).context.selectedRow;
37
+ const rowStyles = Object(props).context.rowStyles;
38
+ const selectable = Object(props).context.selectable;
39
+ return ContentWrapper ? (React.createElement(ContentWrapper, { dagId: Object(props).item.id, rowProps: {
40
+ selected: Object(props).item.id === selectedRow,
41
+ ...props,
42
+ }, ...props })) : (React.createElement(TableRow, { hover: true, sx: {
43
+ height: "3rem",
44
+ overflowY: "hidden",
45
+ ...rowStyles,
46
+ cursor: selectable ? "pointer" : "default",
47
+ }, selected: Object(props).item.id === selectedRow, ...props }));
48
+ };
49
+ const TableWrapper = (props) => (React.createElement(Table, { ...props, stickyHeader: true, sx: {
50
+ ...Object(props).context.tableStyle,
51
+ minWidth: Object(props).context.minWidth || "100%",
52
+ } }));
53
+ const ItemContent = (_index, row, context) => (React.createElement(RowContent, { key: row.id, row: row, columns: Object(context).columns, controlComponent: Object(context).ControlComponent, onDoubleClick: Object(context).onRowDoubleClick, onSelectRow: Object(context).selectable ? Object(context).handleSelectRow : () => { } }));
54
+ const ScrollSeekPlaceholder = (props) => (
55
+ // eslint-disable-next-line react/prop-types
56
+ React.createElement(TableRow, { sx: { height: Object(props).height } }, Object(props).context.columns.map((col, i) => (React.createElement(TableCell, { sx: {
57
+ paddingTop: "0.25rem",
58
+ paddingBottom: "0.25rem",
59
+ py: 0,
60
+ ...col.colSx,
61
+ }, key: i },
62
+ React.createElement(Skeleton, { variant: "rectangular", width: "100%" }))))));
63
+ export default function SmartTable({ rows, columns, pageN, numPages, perPage, loading, minWidth, width, rowStyles, selectable, selectedRow, sx, disablePerPageSelector, globalSearch, columnAutoWidth, error, globalSearchComponent, ContentWrapper, onRowDoubleClick, onSelectRow, controlComponent: ControlComponent, onToggleSort, onInputSearch, onPageSelect, onChangePerPage, controlComponentColSx, perPageOptions, }) {
20
64
  const theme = useTheme();
21
65
  const tableStyle = {
22
66
  width: columnAutoWidth ? "auto" : "100%",
@@ -39,16 +83,48 @@ export default function SmartTable({ rows, columns, pageN, numPages, perPage, lo
39
83
  ...col.colSx,
40
84
  } }, col.sortable ? (React.createElement(SortBtn, { field: col.fieldName, order: col.order || "none", onToggleSort: onToggleSort }, col.displayName)) : (col.displayName)))),
41
85
  ControlComponent && (React.createElement(TableCell, { sx: { ...controlComponentColSx }, scope: "col" }))));
42
- const headerSearchRow = (React.createElement(TableRow, { key: 1 }, globalSearch && globalSearchComponent ? (React.createElement(TableCell, { scope: "col", colSpan: columns.length + 1 }, globalSearchComponent())) : (React.createElement(React.Fragment, null,
86
+ const headerSearchRow = (React.createElement(TableRow, { key: 1 }, globalSearch && globalSearchComponent ? (React.createElement(TableCell, { scope: "col", colSpan: columns.length + 1 }, globalSearchComponent)) : (React.createElement(React.Fragment, null,
43
87
  hasSearchableColumns ? searchCols() : React.createElement(React.Fragment, null),
44
88
  ControlComponent && (React.createElement(TableCell, { sx: { ...controlComponentColSx }, scope: "col" }))))));
45
- const tableHeader = (rows) => (React.createElement(TableHead, { sx: {
46
- top: "0",
47
- zIndex: 600,
48
- position: "sticky",
49
- backgroundColor: theme.palette.background.default,
50
- } }, rows));
89
+ const centerStyle = {
90
+ position: "absolute",
91
+ left: "50%",
92
+ top: "50%",
93
+ transform: "translate(-50%, -50%)",
94
+ };
51
95
  const headerRows = [headerTitleRow, headerSearchRow];
96
+ let placeholder = React.createElement(React.Fragment, null);
97
+ if (error && rows.length === 0) {
98
+ placeholder = (React.createElement(Typography, { variant: "h6", color: "textSecondary", sx: centerStyle }, "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0434\u0430\u043D\u043D\u044B\u0435"));
99
+ }
100
+ else if (loading) {
101
+ placeholder = React.createElement(CircularProgress, { sx: centerStyle });
102
+ }
103
+ else if (rows.length === 0) {
104
+ placeholder = (React.createElement(Typography, { variant: "h6", color: "textSecondary", sx: centerStyle }, "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E"));
105
+ }
106
+ const fixedHeaderContent = () => (React.createElement(Fragment, null, hasGlobalSearch ? headerRows[0] : headerRows));
107
+ const tableContext = {
108
+ columns: columns,
109
+ minWidth: minWidth,
110
+ rowStyles: rowStyles,
111
+ selectable: selectable,
112
+ tableStyle: tableStyle,
113
+ placeholder: placeholder,
114
+ selectedRow: selectedRow,
115
+ ContentWrapper: ContentWrapper,
116
+ ControlComponent: ControlComponent,
117
+ onRowDoubleClick: onRowDoubleClick,
118
+ handleSelectRow: handleSelectRow,
119
+ };
120
+ const VirtuosoTableComponents = {
121
+ Scroller: Scroller,
122
+ Table: TableWrapper,
123
+ TableRow: Row,
124
+ TableHead: TableHead,
125
+ TableBody: TableBodyWrapper,
126
+ ScrollSeekPlaceholder: ScrollSeekPlaceholder,
127
+ };
52
128
  return (React.createElement(Paper, { sx: {
53
129
  height: "74vh",
54
130
  position: "relative",
@@ -63,18 +139,17 @@ export default function SmartTable({ rows, columns, pageN, numPages, perPage, lo
63
139
  overflowX: "auto",
64
140
  width: "100%",
65
141
  } },
66
- hasGlobalSearch && (React.createElement(Table, { size: "small", className: "rulesTable", stickyHeader: true, sx: { ...tableStyle, minWidth: minWidth || "100%", height: "auto" } }, tableHeader(headerRows[1]))),
67
- React.createElement(TableContainer, { sx: { minWidth: minWidth || "100%", flexGrow: 1, overflowX: "unset" } },
68
- React.createElement(Suspense, { fallback: React.createElement(CircularProgress, { sx: { position: "absolute", left: "50%", top: "50%" } }) },
69
- React.createElement(Table, { sx: { ...tableStyle, minWidth: minWidth || "100%" }, stickyHeader: true },
70
- tableHeader(hasGlobalSearch ? headerRows[0] : headerRows),
71
- React.createElement(TableBody, null, rows.map((row, idx) => {
72
- return (React.createElement(RuleRow, { ContentWrapper: ContentWrapper, key: idx, row: row, columns: columns, controlComponent: ControlComponent, onDoubleClick: onRowDoubleClick, sx: {
73
- ...rowStyles,
74
- cursor: selectable ? "pointer" : "default",
75
- }, selectedRow: selectedRow, onSelectRow: selectable ? handleSelectRow : () => { } }));
76
- })))),
77
- loading ? (React.createElement(CircularProgress, { sx: { position: "absolute", left: "50%", top: "50%" } })) : (React.createElement(React.Fragment, null)))),
142
+ hasGlobalSearch && (React.createElement(Table, { size: "small", className: "rulesTable", stickyHeader: true, sx: { ...tableStyle, minWidth: minWidth || "100%", height: "auto" } },
143
+ React.createElement(TableHeader, null, headerRows[1]))),
144
+ React.createElement(Suspense, { fallback: React.createElement(CircularProgress, { sx: { position: "absolute", left: "50%", top: "50%" } }) },
145
+ React.createElement(TableVirtuoso, { style: { height: "100%" }, totalCount: rows.length, data: rows, components: VirtuosoTableComponents, fixedHeaderContent: fixedHeaderContent, itemContent: (ItemContent), context: tableContext,
146
+ // scrollSeekConfiguration={{
147
+ // // «входим» в режим плейсхолдеров при скорости >200px/фрейм
148
+ // enter: (velocity) => Math.abs(velocity) > 50,
149
+ // // «выходим» обратно, когда скорость опустилась ниже 30px/фрейм
150
+ // exit: (velocity) => Math.abs(velocity) < 10,
151
+ // }}
152
+ increaseViewportBy: { top: 800, bottom: 800 } }))),
78
153
  React.createElement(Table, { sx: { ...tableStyle, height: "auto", minWidth: minWidth || "100%" } },
79
154
  React.createElement(TableFooter, { sx: {
80
155
  bottom: "0%",
@@ -98,12 +173,5 @@ export default function SmartTable({ rows, columns, pageN, numPages, perPage, lo
98
173
  disablePerPageSelector ? (React.createElement(React.Fragment, null)) : (React.createElement(FormControl, { size: "small" },
99
174
  React.createElement(InputLabel, { id: "perPageInputLabel" }, "\u0421\u0442\u0440\u043E\u043A"),
100
175
  React.createElement(Select, { label: "\u0421\u0442\u0440\u043E\u043A", labelId: "perPageInputLabel", value: String(perPage), autoWidth: true, onChange: (e) => onChangePerPage &&
101
- onChangePerPage(Number(e.target.value)), sx: { minWidth: "2rem" } },
102
- React.createElement(MenuItem, { value: 5 }, "5"),
103
- React.createElement(MenuItem, { value: 10 }, "10"),
104
- React.createElement(MenuItem, { value: 15 }, "15"),
105
- React.createElement(MenuItem, { value: 20 }, "20"),
106
- React.createElement(MenuItem, { value: 25 }, "25"),
107
- React.createElement(MenuItem, { value: 50 }, "50"),
108
- React.createElement(MenuItem, { value: 100 }, "100")))))))))));
176
+ onChangePerPage(Number(e.target.value)), sx: { minWidth: "2rem" } }, (perPageOptions || [5, 10, 15, 20, 25, 50, 100]).map((v, idx) => (React.createElement(MenuItem, { key: idx, value: v }, v)))))))))))));
109
177
  }
@@ -1,7 +1,9 @@
1
- import { ReactNode } from "react";
2
- import { Column } from "../../types";
3
1
  import { SxProps, TableRowProps, Theme } from "@mui/material";
4
- export default interface SmartTableProps<T> {
2
+ import { ReactElement, ReactNode } from "react";
3
+ import { Column } from "../../types";
4
+ export default interface SmartTableProps<T extends {
5
+ id: string | number;
6
+ }> {
5
7
  rows: T[];
6
8
  columns: Column<T>[];
7
9
  pageN: number;
@@ -17,7 +19,7 @@ export default interface SmartTableProps<T> {
17
19
  sx?: SxProps<Theme>;
18
20
  disablePerPageSelector?: boolean;
19
21
  globalSearch?: boolean;
20
- globalSearchComponent?(): ReactNode;
22
+ globalSearchComponent?: ReactElement;
21
23
  ContentWrapper?({ children, dagId, rowProps, }: {
22
24
  children?: ReactNode;
23
25
  dagId: string;
@@ -34,5 +36,7 @@ export default interface SmartTableProps<T> {
34
36
  onPageSelect(pageN: number): void;
35
37
  onChangePerPage?(perPage: number): void;
36
38
  controlComponentColSx?: SxProps<Theme>;
39
+ error?: boolean;
40
+ perPageOptions?: number[];
37
41
  }
38
42
  //# sourceMappingURL=SmartTableProps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SmartTableProps.d.ts","sourceRoot":"","sources":["../../../src/components/SmartTable/SmartTableProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,CAAC,OAAO,WAAW,eAAe,CAAC,CAAC;IACxC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,IAAI,SAAS,CAAC;IACpC,cAAc,CAAC,CAAC,EACd,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE;QACD,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,aAAa,CAAC;KACzB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IACtB,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;IACrC,gBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClE,aAAa,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IAClE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;CACxC"}
1
+ {"version":3,"file":"SmartTableProps.d.ts","sourceRoot":"","sources":["../../../src/components/SmartTable/SmartTableProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,CAAC,OAAO,WAAW,eAAe,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CAAE;IACzE,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,YAAY,CAAC;IACrC,cAAc,CAAC,CAAC,EACd,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE;QACD,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,aAAa,CAAC;KACzB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IACtB,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;IACrC,gBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClE,aAAa,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,EAAE,GAAG,IAAI,CAAC;IACnE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"SortBtn.d.ts","sourceRoot":"","sources":["../../../src/components/SortBtn/SortBtn.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAG1C,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,QAAQ,EACR,KAAK,EACL,KAAK,EAAE,MAAM,EACb,YAAY,GACb,EAAE,YAAY,qBA4Bd"}
1
+ {"version":3,"file":"SortBtn.d.ts","sourceRoot":"","sources":["../../../src/components/SortBtn/SortBtn.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAG1C,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,QAAQ,EACR,KAAK,EACL,KAAK,EAAE,MAAM,EACb,YAAY,GACb,EAAE,YAAY,qBAgCd"}
@@ -1,7 +1,8 @@
1
- import React, { useState } from "react";
1
+ import React, { useEffect, useState } from "react";
2
2
  import { TableSortLabel } from "@mui/material";
3
3
  export default function SortBtn({ children, field, order: _order, onToggleSort, }) {
4
4
  const [order, setOrder] = useState(_order || "none");
5
+ useEffect(() => setOrder(_order), [_order]);
5
6
  function handleToggleSort() {
6
7
  let newOrder;
7
8
  switch (order) {
@@ -1 +1 @@
1
- {"version":3,"file":"SubtaskItem.d.ts","sourceRoot":"","sources":["../../../src/components/SubtaskItem/SubtaskItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAe1B,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,uBAAuB,GACxB,EAAE,gBAAgB,qBA0HlB"}
1
+ {"version":3,"file":"SubtaskItem.d.ts","sourceRoot":"","sources":["../../../src/components/SubtaskItem/SubtaskItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAIlD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,uBAAuB,GACxB,EAAE,gBAAgB,qBAkFlB"}
@@ -1,15 +1,15 @@
1
- import moment from "moment";
2
1
  import React from "react";
3
- import AccessTimeSharpIcon from "@mui/icons-material/AccessTimeSharp";
4
- import BlockSharpIcon from "@mui/icons-material/BlockSharp";
5
- import CheckCircleOutlineRoundedIcon from "@mui/icons-material/CheckCircleOutlineRounded";
6
- import ErrorOutlineSharpIcon from "@mui/icons-material/ErrorOutlineSharp";
7
- import ExpandMore from "@mui/icons-material/ExpandMore";
8
- import { Chip, useTheme } from "@mui/material";
2
+ import moment from "moment";
9
3
  import Accordion from "@mui/material/Accordion";
10
4
  import AccordionDetails from "@mui/material/AccordionDetails";
11
5
  import AccordionSummary from "@mui/material/AccordionSummary";
12
6
  import CircularProgress from "@mui/material/CircularProgress";
7
+ import CheckCircleOutlineRoundedIcon from "@mui/icons-material/CheckCircleOutlineRounded";
8
+ import ErrorOutlineSharpIcon from "@mui/icons-material/ErrorOutlineSharp";
9
+ import AccessTimeSharpIcon from "@mui/icons-material/AccessTimeSharp";
10
+ import BlockSharpIcon from "@mui/icons-material/BlockSharp";
11
+ import ExpandMore from "@mui/icons-material/ExpandMore";
12
+ import { useTheme } from "@mui/material";
13
13
  import { taskStateText } from "../../utils";
14
14
  export default function SubtaskItem({ taskInstance, logs, expanded, onShowLogs, expandedLogContainerRef, }) {
15
15
  const theme = useTheme();
@@ -56,33 +56,7 @@ export default function SubtaskItem({ taskInstance, logs, expanded, onShowLogs,
56
56
  " за " +
57
57
  formatTaskDuration
58
58
  : ""))),
59
- React.createElement(AccordionDetails, { ref: expandedLogContainerRef, contentEditable: true, onKeyDown: (e) => {
60
- if (e.ctrlKey && e.key.toLowerCase() === "a") {
61
- e.preventDefault();
62
- if (e.currentTarget) {
63
- const range = document.createRange();
64
- range.selectNodeContents(e.currentTarget);
65
- const selection = window.getSelection();
66
- if (selection != null) {
67
- selection.removeAllRanges();
68
- selection.addRange(range);
69
- }
70
- }
71
- }
72
- if (e.key.toLowerCase() === "backspace") {
73
- e.preventDefault();
74
- }
75
- }, suppressContentEditableWarning: true, onBeforeInput: (e) => e.preventDefault(), onPaste: (e) => e.preventDefault(), onDrop: (e) => e.preventDefault(), sx: {
76
- maxHeight: "32vh",
77
- overflow: "auto",
78
- position: "relative",
79
- } },
80
- React.createElement(Chip, { label: "\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C", size: "small", variant: "outlined", onClick: () => { }, sx: {
81
- position: "absolute",
82
- top: "10%",
83
- right: "10%",
84
- opacity: "0.75",
85
- } }),
59
+ React.createElement(AccordionDetails, { style: { maxHeight: "32vh", overflow: "auto" }, ref: expandedLogContainerRef },
86
60
  React.createElement("article", { style: {
87
61
  padding: "1.5rem",
88
62
  backgroundColor: theme.palette.background.paper,
@@ -4,7 +4,7 @@ export default interface SubtaskItemProps {
4
4
  taskInstance: TaskInstance;
5
5
  logs: string;
6
6
  expanded: boolean;
7
- expandedLogContainerRef?: RefObject<HTMLDivElement | null>;
7
+ expandedLogContainerRef?: RefObject<HTMLDivElement>;
8
8
  onShowLogs(taskId: string, tryNum: number): void;
9
9
  }
10
10
  //# sourceMappingURL=SubtaskItemProps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubtaskItemProps.d.ts","sourceRoot":"","sources":["../../../src/components/SubtaskItem/SubtaskItemProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,OAAO,WAAW,gBAAgB;IACvC,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD"}
1
+ {"version":3,"file":"SubtaskItemProps.d.ts","sourceRoot":"","sources":["../../../src/components/SubtaskItem/SubtaskItemProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,OAAO,WAAW,gBAAgB;IACvC,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACpD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD"}
@@ -1 +1 @@
1
- {"version":3,"file":"AirflowProvider.d.ts","sourceRoot":"","sources":["../../src/providers/AirflowProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAgBf,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,eAAe,GAAI,8BAG7B,oBAAoB,sBAsFtB,CAAC;AAEF,eAAO,MAAM,iBAAiB;sBA3GV,OAAO;WAClB,MAAM;yBACQ,MAAM,GAAG,IAAI;wBACd,IAAI;CA0GzB,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"AirflowProvider.d.ts","sourceRoot":"","sources":["../../src/providers/AirflowProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAgBf,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,eAAe,GAAI,8BAG7B,oBAAoB,sBAuFtB,CAAC;AAEF,eAAO,MAAM,iBAAiB;sBA5GV,OAAO;WAClB,MAAM;yBACQ,MAAM,GAAG,IAAI;wBACd,IAAI;CA2GzB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -26,6 +26,7 @@ export const AirflowProvider = ({ children, dagId: _dagId, }) => {
26
26
  setAirflowAvailable(true);
27
27
  if (firstRun) {
28
28
  setFirstRun(false);
29
+ setChannelBusy(false);
29
30
  return;
30
31
  }
31
32
  enqueueSnackbar("Соединение с Airflow установлено!", "info");
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ReactNode } from "react";
2
1
  import { SxProps } from "@mui/material";
2
+ import { ReactNode } from "react";
3
3
  export type DagState = "queued" | "running" | "success" | "failed";
4
4
  export type TaskState = "success" | "running" | "failed" | "upstream_failed" | "skipped" | "up_for_retry" | "up_for_reschedule" | "queued" | "none" | "scheduled" | "deferred" | "removed" | "restarting";
5
5
  export interface Dag {
@@ -63,7 +63,9 @@ export interface Logs {
63
63
  continuationToken: string;
64
64
  content: string;
65
65
  }
66
- export interface Column<T> {
66
+ export interface Column<T extends {
67
+ id: string | number;
68
+ }> {
67
69
  name: string;
68
70
  displayName: string;
69
71
  fieldName: string;
@@ -74,6 +76,7 @@ export interface Column<T> {
74
76
  searchStr?: string | (() => string);
75
77
  colSx?: SxProps;
76
78
  resizable?: boolean;
79
+ type?: "datetime" | "bool" | "text" | "number";
77
80
  searchComponent?(): ReactNode;
78
81
  cellContentComponent?(row: T): ReactNode;
79
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -12,7 +12,7 @@ export declare const getSlugTableName: (name: string) => string;
12
12
  export declare const getShiftedColor: (colorHex: string, shift: number) => string;
13
13
  export declare const getSQLLabHref: (supersetURL: string, tableName: string, schema: string, dbName: string, autorun?: boolean, queryLimit?: number) => string;
14
14
  export declare const getDashboardHref: (supersetURL: string, tableName: string) => string;
15
- export declare function useDebounce(callback: CallableFunction, delay: number): (...args: unknown[]) => void;
15
+ export declare function useDebounce<Args extends unknown[]>(callback: (...args: Args) => void, delay: number): (...args: Args) => void;
16
16
  export declare const getResponsiveAnchorOrigin: (anchorEl: HTMLElement, elementHeight: number) => PopoverOrigin;
17
17
  export declare const getResponsiveTransformOrigin: (anchorEl: HTMLElement, elementHeight: number) => PopoverOrigin;
18
18
  export declare const gettextTS: (msgid: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,wBAAwB,CAAC;AAChC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,wBAAgB,YAAY,WAI3B;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,QAI5C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,UAM9C;AAED,eAAO,MAAM,aAAa,GACxB,WAAW,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,2EAc5D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,WAUtC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,WAK9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,WAyC5C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,EAAE,OAAO,MAAM,WAkB9D,CAAC;AACF,eAAO,MAAM,aAAa,GACxB,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,UAAU,OAAO,EACjB,aAAa,MAAM,WAWpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,EAAE,WAAW,MAAM,WACR,CAAC;AAEhE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,aAIvD,OAAO,EAAE,UAUtB;AAED,eAAO,MAAM,yBAAyB,GACpC,UAAU,WAAW,EACrB,eAAe,MAAM,KAOhB,aACN,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,UAAU,WAAW,EACrB,eAAe,MAAM,KAOhB,aACN,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,OAAO,MAAM,KACZ,MAMF,CAAC;AACF,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,KAAG,MAM3D,CAAC;AACF,eAAO,MAAM,WAAW,GACtB,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,OAAO,MAAM,KACZ,MAMF,CAAC;AACF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,MAM7C,CAAC;AACF,eAAO,MAAM,aAAa,GACxB,KAAK,MAAM,EAEX,KAAK,GAAG,EACR,QAAQ,OAAO,KACd,MAKF,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG,MAKhD,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAK3C,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,wBAAwB,CAAC;AAChC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,wBAAgB,YAAY,WAI3B;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,QAI5C;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,UAM9C;AAED,eAAO,MAAM,aAAa,GACxB,WAAW,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,2EAc5D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,WAUtC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,WAK9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,WAyC5C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,EAAE,OAAO,MAAM,WAkB9D,CAAC;AACF,eAAO,MAAM,aAAa,GACxB,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,UAAU,OAAO,EACjB,aAAa,MAAM,WAWpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,EAAE,WAAW,MAAM,WACR,CAAC;AAEhE,wBAAgB,WAAW,CAAC,IAAI,SAAS,OAAO,EAAE,EAChD,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,EACjC,KAAK,EAAE,MAAM,aAKD,IAAI,UAUjB;AAED,eAAO,MAAM,yBAAyB,GACpC,UAAU,WAAW,EACrB,eAAe,MAAM,KAOhB,aACN,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,UAAU,WAAW,EACrB,eAAe,MAAM,KAOhB,aACN,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,OAAO,MAAM,KACZ,MAMF,CAAC;AACF,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,KAAG,MAM3D,CAAC;AACF,eAAO,MAAM,WAAW,GACtB,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,OAAO,MAAM,KACZ,MAMF,CAAC;AACF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,MAM7C,CAAC;AACF,eAAO,MAAM,aAAa,GACxB,KAAK,MAAM,EAEX,KAAK,GAAG,EACR,QAAQ,OAAO,KACd,MAKF,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG,MAKhD,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAK3C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danikokonn/yarik-frontend-lib",
3
- "version": "2.0.33.legacy.test9",
3
+ "version": "2.0.5-test1",
4
4
  "license": "Apache-2.0",
5
5
  "description": "",
6
6
  "author": "",
@@ -28,8 +28,8 @@
28
28
  "dependencies": {
29
29
  "@emotion/react": "^11.14.0",
30
30
  "@emotion/styled": "^11.14.0",
31
- "@mui/icons-material": "^6.4.3",
32
- "@mui/material": "^6.4.3",
31
+ "@mui/icons-material": "^7.3.2",
32
+ "@mui/material": "^7.3.2",
33
33
  "@mui/x-date-pickers": "^7.25.0",
34
34
  "@types/react": "^18.3.18",
35
35
  "@types/react-dom": "^18.3.5",
@@ -41,6 +41,8 @@
41
41
  "react": "^18.3.1",
42
42
  "react-dom": "^18.3.1",
43
43
  "react-imask": "^7.6.1",
44
+ "react-json-tree": "^0.20.0",
45
+ "react-virtuoso": "^4.13.0",
44
46
  "style-loader": "^4.0.0",
45
47
  "transliteration": "^2.3.5"
46
48
  },