@evergis/react 4.0.143 → 4.0.145

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 (27) hide show
  1. package/dist/components/Dashboard/components/ResizeHandle/constants.d.ts +15 -0
  2. package/dist/components/Dashboard/components/ResizeHandle/index.d.ts +3 -0
  3. package/dist/components/Dashboard/components/ResizeHandle/styled.d.ts +17 -0
  4. package/dist/components/Dashboard/components/ResizeHandle/types.d.ts +2 -0
  5. package/dist/components/Dashboard/components/index.d.ts +1 -0
  6. package/dist/components/Dashboard/containers/StructuredDataContainer/types.d.ts +12 -1
  7. package/dist/components/Dashboard/elements/ElementTable/components/AttachmentsCell.d.ts +9 -0
  8. package/dist/components/Dashboard/elements/ElementTable/components/TableColumnResizer.d.ts +9 -0
  9. package/dist/components/Dashboard/elements/ElementTable/components/TableHeadRow.d.ts +9 -0
  10. package/dist/components/Dashboard/elements/ElementTable/constants.d.ts +2 -0
  11. package/dist/components/Dashboard/elements/ElementTable/hooks/useAttachmentsCell.d.ts +26 -0
  12. package/dist/components/Dashboard/elements/ElementTable/hooks/useColumnResize.d.ts +19 -0
  13. package/dist/components/Dashboard/elements/ElementTable/hooks/useTableView.d.ts +5 -0
  14. package/dist/components/Dashboard/elements/ElementTable/styled.d.ts +31 -3
  15. package/dist/components/Dashboard/elements/ElementTable/types.d.ts +16 -0
  16. package/dist/components/Dashboard/elements/ElementTable/utils/columnStyle.d.ts +19 -0
  17. package/dist/components/Dashboard/grid/constants.d.ts +0 -14
  18. package/dist/components/Dashboard/grid/hooks/useGridHeightResize.d.ts +2 -2
  19. package/dist/components/Dashboard/grid/hooks/useGridResize.d.ts +6 -10
  20. package/dist/components/Dashboard/hooks/index.d.ts +1 -0
  21. package/dist/components/Dashboard/hooks/useResizeDrag.d.ts +29 -0
  22. package/dist/components/Dashboard/types.d.ts +19 -0
  23. package/dist/index.js +409 -145
  24. package/dist/index.js.map +1 -1
  25. package/dist/react.esm.js +408 -145
  26. package/dist/react.esm.js.map +1 -1
  27. package/package.json +2 -2
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Заход зоны захвата на содержимое с каждой стороны границы, px.
3
+ *
4
+ * Без него попасть курсором ровно в границу невозможно: у таблицы её толщина — один пиксель,
5
+ * а у сетки зазора может не быть вовсе. Ручка абсолютная и в раскладке не участвует, поэтому
6
+ * расширение ничего не сдвигает.
7
+ */
8
+ export declare const HANDLE_BLEED_PX = 3;
9
+ /**
10
+ * Маркер ручки: нажатие на ней тянет границу, а не ячейку сетки.
11
+ *
12
+ * Ставит его сам компонент. Ручка колонки таблицы, оказавшейся внутри ячейки сетки, обязана
13
+ * помечаться так же — иначе нажатие на ней начинало бы перетаскивание всей ячейки.
14
+ */
15
+ export declare const RESIZE_HANDLE_ATTR = "data-grid-handle";
@@ -0,0 +1,3 @@
1
+ export * from './constants';
2
+ export * from './styled';
3
+ export * from './types';
@@ -0,0 +1,17 @@
1
+ import { ResizeAxis } from './types';
2
+ /**
3
+ * Ручка перетаскивания границы. Общая для сетки дашборда и колонок таблицы: жест один и тот же,
4
+ * и выглядеть он обязан одинаково.
5
+ *
6
+ * Абсолютная и целиком лежит в зазоре, поэтому включение режима редактирования не сдвигает
7
+ * раскладку ни на пиксель. Сам ползунок (`::after`) появляется только при наведении и во время
8
+ * перетаскивания — в покое раскладка выглядит как обычно.
9
+ *
10
+ * Ширину зазора берёт из переменной: у сетки её объявляет тело сетки, у таблицы зазора нет вовсе,
11
+ * и зона захвата сжимается до одного захода на содержимое с каждой стороны.
12
+ */
13
+ export declare const ResizeHandle: import('styled-components').StyledComponent<"div", any, {
14
+ "data-grid-handle": boolean;
15
+ } & {
16
+ $axis: ResizeAxis;
17
+ }, "data-grid-handle">;
@@ -0,0 +1,2 @@
1
+ /** Ось перетаскивания: колонка тянется по горизонтали, строка — по вертикали. */
2
+ export type ResizeAxis = "row" | "column";
@@ -17,6 +17,7 @@ export * from './HiddenTitleItems';
17
17
  export * from './Loading';
18
18
  export * from './LogTerminal';
19
19
  export * from './Pagination';
20
+ export * from './ResizeHandle';
20
21
  export * from './Pagination/styled';
21
22
  export * from './StackBar';
22
23
  export * from './SvgImage';
@@ -1,4 +1,5 @@
1
- import { AttributeType } from '@evergis/api';
1
+ import { CSSProperties } from 'react';
2
+ import { AttributeType, StringSubType } from '@evergis/api';
2
3
  import { FeatureAttributeValue } from '../../../../types';
3
4
  import { ConfigAttributeDescription } from '../../types';
4
5
  /** Состояние строки черновика относительно последнего сохранения. */
@@ -22,10 +23,20 @@ export interface DraftRow {
22
23
  export interface StructuredDataAttribute {
23
24
  attributeName: string;
24
25
  type: AttributeType;
26
+ /** Уточнение строкового типа из конфига: у источника такого поля нет. */
27
+ subType?: StringSubType;
25
28
  alias: string;
26
29
  description?: string;
27
30
  isEditable: boolean;
28
31
  stringFormat?: ConfigAttributeDescription["stringFormat"];
32
+ /** Ширина колонки в пикселах из конфига. Ниже её колонку не ужимает и раскладка таблицы. */
33
+ width?: number;
34
+ /** Ширину колонки разрешено тянуть мышью. */
35
+ resizable?: boolean;
36
+ /** Значение переносится по словам, а не режется многоточием. */
37
+ multiline?: boolean;
38
+ /** Стиль значений колонки из конфига. */
39
+ style?: CSSProperties;
29
40
  }
30
41
  /**
31
42
  * Значение {@link StructuredDataContext} — всё, что нужно представлению (`ElementTable`)
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { TableCellProps } from '../types';
3
+ /**
4
+ * Колонка со вложениями: список файлов прямо в ячейке.
5
+ *
6
+ * Тип у атрибута строковый, вложениями его делает `subType: "Attachments"` в схеме контейнера —
7
+ * поэтому ветка стоит раньше разбора типа и обычных редакторов ячейки.
8
+ */
9
+ export declare const AttachmentsCell: FC<TableCellProps>;
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { TableColumnResizerProps } from '../types';
3
+ /**
4
+ * Ручка ширины колонки на правой границе заголовка.
5
+ *
6
+ * Тот же компонент и тот же жест, что двигают границы ячеек сетки дашборда: пользователю это одно
7
+ * и то же действие, и выглядеть оно обязано одинаково.
8
+ */
9
+ export declare const TableColumnResizer: FC<TableColumnResizerProps>;
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { TableHeadRowProps } from '../types';
3
+ /**
4
+ * Шапка таблицы: заголовки колонок, сортировка кликом и захват границы для ручной ширины.
5
+ *
6
+ * Захват рисуется по разрешению атрибута (`resizable`) и не смотрит на режим правки контейнера:
7
+ * ширина колонки — это вид, а не данные.
8
+ */
9
+ export declare const TableHeadRow: FC<TableHeadRowProps>;
@@ -16,3 +16,5 @@ export declare const TIME_FORMAT: RegExp;
16
16
  * закрытие редактора по клику снаружи обязано этот контейнер пропускать.
17
17
  */
18
18
  export declare const PORTAL_ROOT_SELECTOR = "#portal-root";
19
+ /** Ниже этой ширины колонку не ужать мышью: уже неё в ячейке не остаётся места под значение. */
20
+ export declare const MIN_COLUMN_WIDTH = 48;
@@ -0,0 +1,26 @@
1
+ import { IPreviewImage } from '@evergis/uilib-gl';
2
+ import { Attachment } from '../../../containers/AttachmentContainer/types';
3
+ import { TableCellProps } from '../types';
4
+ /**
5
+ * Ячейка с вложениями: разбор значения, просмотр, скачивание и правка списка.
6
+ *
7
+ * Значение атрибута — строка: файлы приезжают в ней списком JSON, поэтому и обратно в черновик
8
+ * кладём строку, а не массив — иначе тип ячейки менялся бы от самой правки.
9
+ *
10
+ * Добавление здесь только по ссылке. Загрузка с диска требует ресурса-родителя и файлового
11
+ * api контейнера вложений, а у колонки таблицы ни того, ни другого нет.
12
+ */
13
+ export declare const useAttachmentsCell: ({ attribute, row, canEdit, onChange }: TableCellProps) => {
14
+ items: Attachment[];
15
+ editable: boolean;
16
+ previewIndex: number;
17
+ previewImages: IPreviewImage[];
18
+ isLinkDialogOpen: boolean;
19
+ onPreview: (link: string) => void;
20
+ onClosePreview: () => void;
21
+ onDownload: (_image: IPreviewImage, index: number) => void;
22
+ onDelete: (link: string) => void;
23
+ onOpenLinkDialog: () => void;
24
+ onCloseLinkDialog: () => void;
25
+ onAddByLink: (url: string) => void;
26
+ };
@@ -0,0 +1,19 @@
1
+ import { ResizeDrag } from '../../../hooks/useResizeDrag';
2
+ interface UseColumnResizeParams {
3
+ /** Позиция колонки: по ней собрано имя переменной, которой колонка задаёт свою ширину. */
4
+ index: number;
5
+ onCommit: (width: number) => void;
6
+ }
7
+ /**
8
+ * Перетаскивание правой границы колонки.
9
+ *
10
+ * Жест — общий {@link useResizeDrag}, тот же, что двигает границы ячеек сетки дашборда. Здесь
11
+ * остаётся только табличное: во время жеста ширина рисуется переменной на самой таблице, а в
12
+ * состояние уходит один раз, на отпускание мыши. Так шаг жеста меняет одно свойство одного узла,
13
+ * а не перерисовывает таблицу целиком.
14
+ *
15
+ * Стартовая ширина берётся с самой ячейки заголовка: у колонки без `width` её выбрала раскладка
16
+ * таблицы, и тянуть надо от того, что видно.
17
+ */
18
+ export declare const useColumnResize: ({ index, onCommit }: UseColumnResizeParams) => ResizeDrag;
19
+ export {};
@@ -12,6 +12,9 @@ import { TableSort } from '../types';
12
12
  *
13
13
  * `width`/`height` — размер собственного бокса таблицы: он ограничивает её саму и прокручивает
14
14
  * то, что не влезло. Место, отведённое контейнеру, задаётся его же опциями и живёт отдельно.
15
+ *
16
+ * Ширины колонок — тоже вид: конфиг задаёт стартовую, растянутая мышью живёт здесь и в конфиг
17
+ * не возвращается.
15
18
  */
16
19
  export declare const useTableView: (elementConfig?: ElementTableConfig) => {
17
20
  context: import('../../../containers/StructuredDataContainer/types').StructuredDataContextValue;
@@ -21,5 +24,7 @@ export declare const useTableView: (elementConfig?: ElementTableConfig) => {
21
24
  sortEnabled: boolean;
22
25
  sizeCss: import('styled-components').CSSObject;
23
26
  contentWidth: boolean;
27
+ columnWidths: Record<string, number>;
24
28
  onSortToggle: (attributeName: string) => void;
29
+ onColumnResize: (attributeName: string, nextWidth: number) => void;
25
30
  };
@@ -34,6 +34,10 @@ export declare const TableHead: import('styled-components').StyledComponent<"the
34
34
  export declare const TableHeadCell: import('styled-components').StyledComponent<"th", any, {
35
35
  $sortable?: boolean;
36
36
  }, never>;
37
+ /**
38
+ * Содержимое заголовка. Псевдоним обрезается многоточием, значок сортировки не сжимается:
39
+ * у колонки с заданной шириной длинный псевдоним иначе выдавил бы значок за край ячейки.
40
+ */
37
41
  export declare const TableHeadContent: import('styled-components').StyledComponent<"span", any, {}, never>;
38
42
  /**
39
43
  * Место под значок сортировки. Занято всегда, пока сортировка включена, а сам значок только
@@ -58,7 +62,19 @@ export declare const TableRow: import('styled-components').StyledComponent<"tr",
58
62
  export declare const TableCellWrapper: import('styled-components').StyledComponent<"td", any, {}, never>;
59
63
  /** Колонка действий: узкая, не растягивается содержимым. */
60
64
  export declare const TableActionsCell: import('styled-components').StyledComponent<"td", any, {}, never>;
61
- export declare const CellText: import('styled-components').StyledComponent<"div", any, {}, never>;
65
+ /**
66
+ * Как значение ведёт себя, когда не помещается в колонку: режется многоточием в одну строку
67
+ * или переносится по словам, растягивая строку таблицы вниз (`multiline` атрибута).
68
+ *
69
+ * Перенос разрешаем и посреди слова: колонка бывает уже одного длинного слова (ссылка, артикул),
70
+ * и без этого оно вылезло бы за заданную ширину, сделав её бессмысленной.
71
+ */
72
+ export declare const cellWrapMixin: import('styled-components').FlattenInterpolation<import('styled-components').ThemedStyledProps<{
73
+ $multiline?: boolean;
74
+ }, any>>;
75
+ export declare const CellText: import('styled-components').StyledComponent<"div", any, {
76
+ $multiline?: boolean;
77
+ }, never>;
62
78
  /**
63
79
  * Редактируемая ячейка вне фокуса. Показывает значение по `stringFormat`, а редактор
64
80
  * подставляется на фокус — иначе форматирование пришлось бы дублировать внутри инпута.
@@ -66,7 +82,9 @@ export declare const CellText: import('styled-components').StyledComponent<"div"
66
82
  * Кнопка, а не просто текст, именно ради фокуса: она — таб-стоп ячейки, и Tab по таблице
67
83
  * открывает редактор с курсором внутри.
68
84
  */
69
- export declare const CellButton: import('styled-components').StyledComponent<"button", any, {}, never>;
85
+ export declare const CellButton: import('styled-components').StyledComponent<"button", any, {
86
+ $multiline?: boolean;
87
+ }, never>;
70
88
  export declare const CellPlaceholder: import('styled-components').StyledComponent<"span", any, {}, never>;
71
89
  /**
72
90
  * Ячейка в режиме правки: редактор лежит поверх невидимой копии значения.
@@ -75,6 +93,16 @@ export declare const CellPlaceholder: import('styled-components').StyledComponen
75
93
  * иначе таблица дёргалась бы на каждый вход в правку и выход из неё.
76
94
  */
77
95
  export declare const CellEditor: import('styled-components').StyledComponent<"div", any, {}, never>;
78
- export declare const CellGhost: import('styled-components').StyledComponent<"span", any, {}, never>;
96
+ export declare const CellGhost: import('styled-components').StyledComponent<"span", any, {
97
+ $multiline?: boolean;
98
+ }, never>;
79
99
  export declare const CellField: import('styled-components').StyledComponent<"div", any, {}, never>;
100
+ /**
101
+ * Ячейка со вложениями. Список идёт колонкой, кнопка добавления — под ним, поэтому строка растёт
102
+ * ровно на столько, сколько файлов в ней лежит.
103
+ *
104
+ * Отступы те же, что у текстовой ячейки (`CellText`): в одном ряду с обычными колонками значения
105
+ * обязаны стоять на одной линии.
106
+ */
107
+ export declare const AttachmentsCellBox: import('styled-components').StyledComponent<"div", any, {}, never>;
80
108
  export declare const TableEmpty: import('styled-components').StyledComponent<"div", any, {}, never>;
@@ -18,3 +18,19 @@ export interface TableCellProps {
18
18
  canEdit: boolean;
19
19
  onChange: (key: string, attributeName: string, value: FeatureAttributeValue) => void;
20
20
  }
21
+ export interface TableColumnResizerProps {
22
+ /** Позиция колонки: по ней собрано имя переменной, которой колонка задаёт свою ширину. */
23
+ index: number;
24
+ onCommit: (width: number) => void;
25
+ }
26
+ export interface TableHeadRowProps {
27
+ columns: StructuredDataAttribute[];
28
+ sort: TableSort | null;
29
+ sortEnabled: boolean;
30
+ /** Ширина каждой колонки: растянутая мышью, иначе из конфига. `undefined` — на усмотрение раскладки. */
31
+ columnWidths: Record<string, number | undefined>;
32
+ /** У таблицы есть колонка действий — шапке нужна пустая ячейка над ней. */
33
+ withActionsColumn: boolean;
34
+ onSortToggle: (attributeName: string) => void;
35
+ onColumnResize: (attributeName: string, width: number) => void;
36
+ }
@@ -0,0 +1,19 @@
1
+ import { CSSProperties } from 'react';
2
+ /**
3
+ * Имя переменной ширины колонки.
4
+ *
5
+ * Через неё идёт и предпросмотр перетаскивания, и итоговая ширина: пока переменная не задана,
6
+ * работает запасное значение из стиля ячейки, а жест на время перетаскивания объявляет её на
7
+ * самой таблице — одним свойством на один узел, как сетка меняет свой шаблон треков.
8
+ */
9
+ export declare const getColumnWidthVariable: (index: number) => string;
10
+ /**
11
+ * Инлайн-размер ячейки колонки с заданной или изменяемой шириной.
12
+ *
13
+ * Раскладка таблицы автоматическая (ширину колонок выбирает содержимое), и одной `width` ей мало —
14
+ * она для неё лишь пожелание. Жёстко колонку держат все три предела сразу, поэтому и ставим их
15
+ * втроём, на каждую ячейку колонки.
16
+ *
17
+ * Ни ширины, ни разрешения тянуть — стиля нет: колонка остаётся на попечении раскладки, как и была.
18
+ */
19
+ export declare const getColumnStyle: (index: number, width?: number, resizable?: boolean) => CSSProperties | undefined;
@@ -34,14 +34,6 @@ export declare const GRID_AUTO_FILL_DEFAULTS: CSSObject;
34
34
  * раскладки, поэтому задаётся явно через `options.gap`, а не навязывается всем сеткам.
35
35
  */
36
36
  export declare const DEFAULT_GRID_GAP = 0;
37
- /**
38
- * Насколько ручка ресайза заходит на содержимое с каждой стороны, px.
39
- *
40
- * По умолчанию зазора нет вовсе, так что попасть курсором ровно в границу невозможно — зона
41
- * захвата всегда шире зазора на эту величину с каждой стороны. Ручка абсолютная и в раскладке
42
- * не участвует, поэтому расширение ничего не сдвигает.
43
- */
44
- export declare const HANDLE_BLEED_PX = 3;
45
37
  /**
46
38
  * Сдвиг курсора, после которого нажатие на ячейке считается перетаскиванием, px.
47
39
  *
@@ -51,12 +43,6 @@ export declare const HANDLE_BLEED_PX = 3;
51
43
  export declare const DRAG_THRESHOLD_PX = 4;
52
44
  /** Маркер ячейки в DOM: по нему ищется цель перетаскивания под курсором. */
53
45
  export declare const GRID_CELL_ATTR = "data-grid-cell";
54
- /** Маркер ручки ресайза: нажатие на ней тянет границу, а не ячейку. */
55
- export declare const GRID_HANDLE_ATTR = "data-grid-handle";
56
- /** Тот же маркер пропсами: имя атрибута вычисляемое, а в JSX такое подставляется только спредом. */
57
- export declare const GRID_HANDLE_PROPS: {
58
- "data-grid-handle": boolean;
59
- };
60
46
  /**
61
47
  * Нажатия, которые перетаскиванием ячейки не считаются.
62
48
  *
@@ -1,4 +1,4 @@
1
- import { GridResize } from './useGridResize';
1
+ import { ResizeDrag } from '../../hooks/useResizeDrag';
2
2
  interface UseGridHeightResizeParams {
3
3
  /** Доли всех строк сетки — их сумма сохраняется при пересчёте. */
4
4
  sizes: number[];
@@ -23,5 +23,5 @@ interface UseGridHeightResizeParams {
23
23
  * ради чего режим включают: под курсором сетка садилась бы на заданные пиксели, а после отпускания
24
24
  * снова раздувалась содержимым.
25
25
  */
26
- export declare const useGridHeightResize: ({ sizes, autoHeight, getGrid, onCommit, }: UseGridHeightResizeParams) => GridResize;
26
+ export declare const useGridHeightResize: ({ sizes, autoHeight, getGrid, onCommit, }: UseGridHeightResizeParams) => ResizeDrag;
27
27
  export {};
@@ -1,3 +1,4 @@
1
+ import { ResizeDrag } from '../../hooks/useResizeDrag';
1
2
  import { GridAxis } from '../types';
2
3
  interface UseGridResizeParams {
3
4
  axis: GridAxis;
@@ -8,20 +9,15 @@ interface UseGridResizeParams {
8
9
  getGrid: () => HTMLElement | null;
9
10
  onCommit: (index: number, sizes: [number, number]) => void;
10
11
  }
11
- export interface GridResize {
12
- /** Callback-ref для ручки: `useDragAndDropEffect` принимает элемент, а не ref. */
13
- setHandle: (element: HTMLElement | null) => void;
14
- dragging: boolean;
15
- }
16
12
  /**
17
13
  * Перетаскивание границы между двумя соседними треками.
18
14
  *
19
- * Во время жеста раскладка меняется ИНЛАЙН-стилем на самом гриде, без обновления состояния:
20
- * каждый `mousemove` иначе перерисовывал бы всё поддерево сетки. В конфиг доли уходят один раз,
21
- * на отпускание мыши.
15
+ * Сам жест общий {@link useResizeDrag}: он же двигает и границы колонок таблицы, поэтому
16
+ * ощущаются они одинаково. Здесь остаётся только грид-специфичное: во время жеста раскладка
17
+ * меняется ИНЛАЙН-стилем на самом гриде, а в конфиг доли уходят один раз, на отпускание мыши.
22
18
  *
23
- * Пиксельный снимок треков берётся однократно на `mousedown` — если пересчитывать его на каждом
19
+ * Пиксельный снимок треков берётся однократно на нажатии — если пересчитывать его на каждом
24
20
  * шаге уже после применения новых долей, округление `fr → px → fr` даёт дрейф границы.
25
21
  */
26
- export declare const useGridResize: ({ axis, index, sizes, getGrid, onCommit }: UseGridResizeParams) => GridResize;
22
+ export declare const useGridResize: ({ axis, index, sizes, getGrid, onCommit }: UseGridResizeParams) => ResizeDrag;
27
23
  export {};
@@ -28,6 +28,7 @@ export * from './useGlobalContext';
28
28
  export * from './useHeaderRender';
29
29
  export * from './useHideIfEmptyDataSource';
30
30
  export * from './useProjectDashboardInit';
31
+ export * from './useResizeDrag';
31
32
  export * from './useRelatedDataSourceAttributes';
32
33
  export * from './useRenderElement';
33
34
  export * from './useResizeBox';
@@ -0,0 +1,29 @@
1
+ interface UseResizeDragParams<TState> {
2
+ /**
3
+ * Снимок на нажатии: всё, от чего считается жест. Возвращает `null` — жест не начинается
4
+ * (например, тянуть нечего).
5
+ *
6
+ * Снимок берётся один раз именно здесь: пересчёт на каждом шаге уже по применённым размерам
7
+ * копит округление и уводит границу от курсора.
8
+ */
9
+ onStart: (event: MouseEvent) => TState | null;
10
+ /** Шаг жеста. Рисует предпросмотр прямо в DOM — состояние на каждое движение не трогаем. */
11
+ onMove: (state: TState, event: MouseEvent) => void;
12
+ /** Конец жеста: снять предпросмотр и записать результат один раз. */
13
+ onEnd: (state: TState, event: MouseEvent) => void;
14
+ }
15
+ export interface ResizeDrag {
16
+ /** Callback-ref для ручки: `useDragAndDropEffect` принимает элемент, а не ref. */
17
+ setHandle: (element: HTMLElement | null) => void;
18
+ dragging: boolean;
19
+ }
20
+ /**
21
+ * Перетаскивание границы: подписка на ручку, снимок на старте, предпросмотр на движении,
22
+ * запись результата на отпускании.
23
+ *
24
+ * Общий для сетки дашборда и колонок таблицы. Различаются они только тем, что именно меряют и
25
+ * куда пишут; сам жест обязан ощущаться одинаково — включая то, что мышь ведут по документу, а
26
+ * не по самой ручке, и отпускание за пределами окна тоже завершает жест.
27
+ */
28
+ export declare const useResizeDrag: <TState>({ onStart, onMove, onEnd }: UseResizeDragParams<TState>) => ResizeDrag;
29
+ export {};
@@ -499,11 +499,30 @@ export interface ConfigDataSourceAttribute {
499
499
  export interface ConfigAttributeDescription {
500
500
  attributeName: string;
501
501
  type?: AttributeType;
502
+ /**
503
+ * Уточнение строкового типа. Отдельного `AttributeType` под вложения нет: файлы приходят
504
+ * строкой, и разбирать её как список вложений велит именно `subType: "Attachments"`.
505
+ */
506
+ subType?: StringSubType;
502
507
  alias?: string;
503
508
  description?: string;
504
509
  /** Значение атрибута правится в ячейке. `false` — только чтение, в features-API не передаётся. */
505
510
  isEditable?: boolean;
506
511
  stringFormat?: AttributeFormatConfiguration;
512
+ /**
513
+ * Ширина колонки в пикселах. Задана — колонка её и занимает; не задана — ширину выбирает
514
+ * раскладка таблицы по содержимому.
515
+ */
516
+ width?: number;
517
+ /** Ширину колонки можно тянуть мышью. Не зависит от `options.editMode` контейнера. */
518
+ resizable?: boolean;
519
+ /** Значение переносится на следующую строку вместо обрезки многоточием, высота строки растёт. */
520
+ multiline?: boolean;
521
+ /**
522
+ * Стиль значений колонки: семейство, размер, цвет и начертание шрифта. Своего узла-элемента
523
+ * у колонки нет, поэтому стиль живёт прямо у описания атрибута.
524
+ */
525
+ style?: CSSProperties;
507
526
  }
508
527
  export interface ConfigDataSource {
509
528
  name: string;