@shtabapp/ui-kit 1.63.0 → 1.64.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -2
- package/dist/{SAvatar-DTG0odWX.cjs → SAvatar-ClmtSIFg.cjs} +1 -1
- package/dist/{SAvatar-BK8cEzGY.js → SAvatar-hWbsODUa.js} +1 -1
- package/dist/{SAvatarGroup-CTC_esUv.cjs → SAvatarGroup-By8oMNTe.cjs} +1 -1
- package/dist/{SAvatarGroup-F5w88NGf.js → SAvatarGroup-CSSCQKdH.js} +1 -1
- package/dist/SColorPicker-BRSi0Xhm.cjs +1 -0
- package/dist/{SColorPicker-BL-zrskU.js → SColorPicker-Djr-R81h.js} +2 -1
- package/dist/SDropdownMenu-2koPU6IG.js +38 -0
- package/dist/SDropdownMenu-k9SxaFVH.cjs +1 -0
- package/dist/SList-D0PDc8VN.cjs +1 -0
- package/dist/SList-D2K9dNsj.js +465 -0
- package/dist/SSelect-CRlkCLik.cjs +1 -0
- package/dist/SSelect-D6taevzT.js +650 -0
- package/dist/STable-NbCfen0n.cjs +1 -0
- package/dist/STable-aS1eGuVB.js +3445 -0
- package/dist/components/SList/SList.vue.d.ts.map +1 -1
- package/dist/components/SList/utils/resolveListItemFields.d.ts +1 -1
- package/dist/components/SList/utils/resolveListItemFields.d.ts.map +1 -1
- package/dist/components/STable/STable.types.d.ts +317 -0
- package/dist/components/STable/STable.types.d.ts.map +1 -0
- package/dist/components/STable/STable.vue.d.ts +154 -0
- package/dist/components/STable/STable.vue.d.ts.map +1 -0
- package/dist/components/STable/constants/tableSizes.d.ts +76 -0
- package/dist/components/STable/constants/tableSizes.d.ts.map +1 -0
- package/dist/components/STable/index.d.ts +4 -0
- package/dist/components/STable/index.d.ts.map +1 -0
- package/dist/components/STable/parts/STableCellText.vue.d.ts +23 -0
- package/dist/components/STable/parts/STableCellText.vue.d.ts.map +1 -0
- package/dist/components/STable/parts/STableCheckbox.vue.d.ts +17 -0
- package/dist/components/STable/parts/STableCheckbox.vue.d.ts.map +1 -0
- package/dist/components/STable/parts/STableContentRow.vue.d.ts +41 -0
- package/dist/components/STable/parts/STableContentRow.vue.d.ts.map +1 -0
- package/dist/components/STable/parts/STableGroupRow.vue.d.ts +55 -0
- package/dist/components/STable/parts/STableGroupRow.vue.d.ts.map +1 -0
- package/dist/components/STable/parts/STableHeaderCell.vue.d.ts +36 -0
- package/dist/components/STable/parts/STableHeaderCell.vue.d.ts.map +1 -0
- package/dist/components/STable/parts/STableHint.vue.d.ts +7 -0
- package/dist/components/STable/parts/STableHint.vue.d.ts.map +1 -0
- package/dist/components/STable/parts/STablePlaceholderRow.vue.d.ts +25 -0
- package/dist/components/STable/parts/STablePlaceholderRow.vue.d.ts.map +1 -0
- package/dist/components/STable/parts/STableRow.vue.d.ts +67 -0
- package/dist/components/STable/parts/STableRow.vue.d.ts.map +1 -0
- package/dist/components/STable/parts/STableSkeletonRow.vue.d.ts +27 -0
- package/dist/components/STable/parts/STableSkeletonRow.vue.d.ts.map +1 -0
- package/dist/components/STable/utils/tableDndShared.d.ts +17 -0
- package/dist/components/STable/utils/tableDndShared.d.ts.map +1 -0
- package/dist/components/STable/utils/useFlatTableRows.d.ts +62 -0
- package/dist/components/STable/utils/useFlatTableRows.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableCellPlans.d.ts +48 -0
- package/dist/components/STable/utils/useTableCellPlans.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableColumnDnd.d.ts +28 -0
- package/dist/components/STable/utils/useTableColumnDnd.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableColumnResize.d.ts +24 -0
- package/dist/components/STable/utils/useTableColumnResize.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableColumns.d.ts +86 -0
- package/dist/components/STable/utils/useTableColumns.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableGridFocus.d.ts +79 -0
- package/dist/components/STable/utils/useTableGridFocus.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableGridKeyboard.d.ts +36 -0
- package/dist/components/STable/utils/useTableGridKeyboard.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableRenderEntries.d.ts +56 -0
- package/dist/components/STable/utils/useTableRenderEntries.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableRowDnd.d.ts +37 -0
- package/dist/components/STable/utils/useTableRowDnd.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableRowHydration.d.ts +29 -0
- package/dist/components/STable/utils/useTableRowHydration.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableScrollScale.d.ts +34 -0
- package/dist/components/STable/utils/useTableScrollScale.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableSelection.d.ts +27 -0
- package/dist/components/STable/utils/useTableSelection.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableServiceRows.d.ts +57 -0
- package/dist/components/STable/utils/useTableServiceRows.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableSorting.d.ts +21 -0
- package/dist/components/STable/utils/useTableSorting.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableStickyRows.d.ts +38 -0
- package/dist/components/STable/utils/useTableStickyRows.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableStyleVars.d.ts +22 -0
- package/dist/components/STable/utils/useTableStyleVars.d.ts.map +1 -0
- package/dist/components/STable/utils/useTableVirtualRows.d.ts +56 -0
- package/dist/components/STable/utils/useTableVirtualRows.d.ts.map +1 -0
- package/dist/composables/treeKeyboardNavigation.d.ts +26 -0
- package/dist/composables/treeKeyboardNavigation.d.ts.map +1 -0
- package/dist/composables/useFlatTreeList.d.ts +1 -0
- package/dist/composables/useFlatTreeList.d.ts.map +1 -1
- package/dist/entries/avatar-group.cjs +1 -1
- package/dist/entries/avatar-group.js +1 -1
- package/dist/entries/avatar.cjs +1 -1
- package/dist/entries/avatar.js +1 -1
- package/dist/entries/color-picker.cjs +1 -1
- package/dist/entries/color-picker.js +1 -1
- package/dist/entries/list.cjs +1 -1
- package/dist/entries/list.js +1 -1
- package/dist/entries/select.cjs +1 -1
- package/dist/entries/select.js +1 -1
- package/dist/entries/table.cjs +1 -0
- package/dist/entries/table.d.ts +3 -0
- package/dist/entries/table.d.ts.map +1 -0
- package/dist/entries/table.js +2 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +113 -110
- package/dist/treeKeyboardNavigation-BOz2SVus.cjs +1 -0
- package/dist/treeKeyboardNavigation-SmxTdnDz.js +131 -0
- package/dist/uikit-components.css +1 -1
- package/package.json +14 -3
- package/dist/SColorPicker-CvhpJEj1.cjs +0 -1
- package/dist/SList-C39LrsoS.js +0 -590
- package/dist/SList-Du0gqyFs.cjs +0 -1
- package/dist/SSelect-BkX3VuCr.js +0 -682
- package/dist/SSelect-CHWKMbB_.cjs +0 -1
- package/dist/components/SList/utils/treeKeyboardNavigation.d.ts +0 -16
- package/dist/components/SList/utils/treeKeyboardNavigation.d.ts.map +0 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type ComputedRef, type CSSProperties, type MaybeRefOrGetter, type Ref } from 'vue';
|
|
2
|
+
import type { TSTableColumnDescriptor } from './useTableColumns';
|
|
3
|
+
type TSTableColumnDropIndicator = {
|
|
4
|
+
targetKey: string;
|
|
5
|
+
edge: 'left' | 'right';
|
|
6
|
+
};
|
|
7
|
+
export interface IUseTableColumnDndOptions<TItem extends Record<string, unknown>> {
|
|
8
|
+
tableId: string;
|
|
9
|
+
/** Корень блока: линия дропа позиционируется относительно него. */
|
|
10
|
+
tableRootElement: Ref<HTMLElement | null>;
|
|
11
|
+
enabled: MaybeRefOrGetter<boolean>;
|
|
12
|
+
columnDescriptors: ComputedRef<TSTableColumnDescriptor<TItem>[]>;
|
|
13
|
+
/** Итоговый порядок видимых data-колонок → коммит модели columnOrder. */
|
|
14
|
+
onReorder: (columnKey: string, targetKey: string, edge: 'left' | 'right') => void;
|
|
15
|
+
isResizing: MaybeRefOrGetter<boolean>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* DnD колонок: draggable + dropTarget на th, closest-edge left/right,
|
|
19
|
+
* кастомное превью-бейдж. Sticky-колонки переносятся только внутри своей зоны.
|
|
20
|
+
*/
|
|
21
|
+
export declare const useTableColumnDnd: <TItem extends Record<string, unknown>>({ tableId, tableRootElement, enabled, columnDescriptors, onReorder, isResizing, }: IUseTableColumnDndOptions<TItem>) => {
|
|
22
|
+
registerColumnHeaderElement: (columnKey: string, headerElement: Element | null) => void;
|
|
23
|
+
draggingColumnKey: import("vue").ShallowRef<string | undefined, string | undefined>;
|
|
24
|
+
dropIndicator: import("vue").ShallowRef<TSTableColumnDropIndicator | undefined, TSTableColumnDropIndicator | undefined>;
|
|
25
|
+
dropLineStyle: import("vue").ShallowRef<CSSProperties | undefined, CSSProperties | undefined>;
|
|
26
|
+
};
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=useTableColumnDnd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableColumnDnd.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableColumnDnd.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,GAAG,EACT,MAAM,KAAK,CAAA;AAeZ,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAEhE,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,WAAW,yBAAyB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9E,OAAO,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,gBAAgB,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACzC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAClC,iBAAiB,EAAE,WAAW,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChE,yEAAyE;IACzE,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,KAAK,IAAI,CAAA;IACjF,UAAU,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;CACtC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,mFAOtE,yBAAyB,CAAC,KAAK,CAAC;6CAyBe,MAAM,iBAAiB,OAAO,GAAG,IAAI;;;;CAmKtF,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter, type Ref } from 'vue';
|
|
2
|
+
import type { TSTableColumnDescriptor } from './useTableColumns';
|
|
3
|
+
export interface IUseTableColumnResizeOptions<TItem extends Record<string, unknown>> {
|
|
4
|
+
tableRootElement: Ref<HTMLElement | null>;
|
|
5
|
+
scrollElement: Ref<HTMLElement | null>;
|
|
6
|
+
columnDescriptors: ComputedRef<TSTableColumnDescriptor<TItem>[]>;
|
|
7
|
+
columnWidths: Ref<Record<string, number> | undefined>;
|
|
8
|
+
enabled: MaybeRefOrGetter<boolean>;
|
|
9
|
+
onResizeEnd: (columnKey: string, width: number) => void;
|
|
10
|
+
/** Точечный перемер смонтированных строк после коммита (auto-высоты). */
|
|
11
|
+
remeasureRows: () => void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Live-ресайз колонок: во время драга пишутся только CSS-переменные ширины и
|
|
15
|
+
* sticky-офсетов (без vdom); модель коммитится на pointerup. Перемер строк
|
|
16
|
+
* заморожен до коммита (окно не меняется — замер сам не срабатывает).
|
|
17
|
+
*/
|
|
18
|
+
export declare const useTableColumnResize: <TItem extends Record<string, unknown>>({ tableRootElement, scrollElement, columnDescriptors, columnWidths, enabled, onResizeEnd, remeasureRows, }: IUseTableColumnResizeOptions<TItem>) => {
|
|
19
|
+
resizingColumnKey: ComputedRef<string | undefined>;
|
|
20
|
+
handleResizeHandlePointerdown: (event: PointerEvent, columnKey: string) => void;
|
|
21
|
+
handleResizeHandleKeydown: (event: KeyboardEvent, columnKey: string) => void;
|
|
22
|
+
handleResizeHandleDblclick: (columnKey: string) => void;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=useTableColumnResize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableColumnResize.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableColumnResize.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAS/F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAEhE,MAAM,WAAW,4BAA4B,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjF,gBAAgB,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACzC,aAAa,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACtC,iBAAiB,EAAE,WAAW,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAAA;IACrD,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAClC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,yEAAyE;IACzE,aAAa,EAAE,MAAM,IAAI,CAAA;CAC1B;AAUD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,4GAQzE,4BAA4B,CAAC,KAAK,CAAC;;2CAiGU,YAAY,aAAa,MAAM;uCA+EnC,aAAa,aAAa,MAAM;4CAwB3B,MAAM;CAyCtD,CAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { type MaybeRefOrGetter, type Ref } from 'vue';
|
|
2
|
+
import { ESTableColumnAlign, ESTableColumnSticky, type ISTableColumn } from '../STable.types';
|
|
3
|
+
export declare enum ESTableServiceColumn {
|
|
4
|
+
INDICATOR = "indicator",
|
|
5
|
+
CHECKBOX = "checkbox",
|
|
6
|
+
RIGHT_EDGE = "rightEdge",
|
|
7
|
+
/** Кнопка управления колонками в шапке; в строках ячейки пустые. */
|
|
8
|
+
COLUMNS_MANAGER = "columnsManager"
|
|
9
|
+
}
|
|
10
|
+
/** Kebab-имена служебных колонок для BEM-модификаторов. */
|
|
11
|
+
export declare const TABLE_SERVICE_COLUMN_CSS_NAME: Record<ESTableServiceColumn, string>;
|
|
12
|
+
export type TSTableColumnDescriptor<TItem extends Record<string, unknown> = Record<string, unknown>> = {
|
|
13
|
+
key: string;
|
|
14
|
+
column?: ISTableColumn<TItem>;
|
|
15
|
+
service?: ESTableServiceColumn;
|
|
16
|
+
/** Рендеримая ширина: `baseWidth` плюс доля излишка вьюпорта у гибкой колонки. */
|
|
17
|
+
width: number;
|
|
18
|
+
/** Ширина из модели / конфига / дефолта — до раздачи излишка вьюпорта. */
|
|
19
|
+
baseWidth: number;
|
|
20
|
+
/** Без явной ширины и не sticky-right: добирает свободную ширину вьюпорта. */
|
|
21
|
+
flexible: boolean;
|
|
22
|
+
minWidth: number;
|
|
23
|
+
maxWidth?: number;
|
|
24
|
+
sticky?: ESTableColumnSticky;
|
|
25
|
+
align: ESTableColumnAlign;
|
|
26
|
+
primary: boolean;
|
|
27
|
+
resizable: boolean;
|
|
28
|
+
draggable: boolean;
|
|
29
|
+
sortable: boolean;
|
|
30
|
+
hideable: boolean;
|
|
31
|
+
/** aria-colindex, с 1, включая служебные колонки. */
|
|
32
|
+
colIndex: number;
|
|
33
|
+
/** CSS-переменная ширины (модельная). */
|
|
34
|
+
widthVar: string;
|
|
35
|
+
/** Live-переменная ширины жеста ресайза (fallback — модельная). */
|
|
36
|
+
liveWidthVar: string;
|
|
37
|
+
/** CSS-переменная sticky-офсета (left или right по `sticky`). */
|
|
38
|
+
stickyOffsetVar?: string;
|
|
39
|
+
/** Live-переменная sticky-офсета жеста ресайза. */
|
|
40
|
+
liveStickyOffsetVar?: string;
|
|
41
|
+
/** Последняя sticky-left колонка — правый край прилипшей зоны. */
|
|
42
|
+
lastStickyLeft: boolean;
|
|
43
|
+
/** Первая sticky-right колонка — левый край прилипшей зоны. */
|
|
44
|
+
firstStickyRight: boolean;
|
|
45
|
+
};
|
|
46
|
+
/** Пер-колоночный план рендера ячейки: классы/стили считаются один раз, не на строку. */
|
|
47
|
+
export type TSTableCellRenderPlan<TItem extends Record<string, unknown> = Record<string, unknown>> = {
|
|
48
|
+
descriptor: TSTableColumnDescriptor<TItem>;
|
|
49
|
+
cellClass: string;
|
|
50
|
+
style?: {
|
|
51
|
+
left?: string;
|
|
52
|
+
right?: string;
|
|
53
|
+
};
|
|
54
|
+
/** В этой колонке рисуются шеврон дерева и отступ уровня. */
|
|
55
|
+
chevron: boolean;
|
|
56
|
+
};
|
|
57
|
+
/** Запись ячейки строки в едином цикле: без `cellPlan` — колонка-филлер между sticky-зонами. */
|
|
58
|
+
export type TSTableRowCellEntry<TItem extends Record<string, unknown> = Record<string, unknown>> = {
|
|
59
|
+
key: string;
|
|
60
|
+
cellPlan?: TSTableCellRenderPlan<TItem>;
|
|
61
|
+
};
|
|
62
|
+
export interface IUseTableColumnsOptions<TItem extends Record<string, unknown>> {
|
|
63
|
+
columns: MaybeRefOrGetter<readonly ISTableColumn<TItem>[]>;
|
|
64
|
+
columnOrder: Ref<string[] | undefined>;
|
|
65
|
+
columnWidths: Ref<Record<string, number> | undefined>;
|
|
66
|
+
hiddenColumns: Ref<string[] | undefined>;
|
|
67
|
+
hasIndicator: MaybeRefOrGetter<boolean>;
|
|
68
|
+
hasCheckbox: MaybeRefOrGetter<boolean>;
|
|
69
|
+
hasRightEdge: MaybeRefOrGetter<boolean>;
|
|
70
|
+
/** Крайняя правая служебная колонка с кнопкой управления колонками в шапке. */
|
|
71
|
+
hasColumnsManager: MaybeRefOrGetter<boolean>;
|
|
72
|
+
columnsResizable: MaybeRefOrGetter<boolean>;
|
|
73
|
+
columnsDraggable: MaybeRefOrGetter<boolean>;
|
|
74
|
+
/** Ширина вьюпорта скроллера (content-box, без скроллбара) — излишек уходит гибким колонкам. */
|
|
75
|
+
viewportWidth: MaybeRefOrGetter<number>;
|
|
76
|
+
}
|
|
77
|
+
export declare const useTableColumns: <TItem extends Record<string, unknown>>({ columns, columnOrder, columnWidths, hiddenColumns, hasIndicator, hasCheckbox, hasRightEdge, hasColumnsManager, columnsResizable, columnsDraggable, viewportWidth, }: IUseTableColumnsOptions<TItem>) => {
|
|
78
|
+
primaryColumnKey: import("vue").ComputedRef<string | undefined>;
|
|
79
|
+
orderedDataColumns: import("vue").ComputedRef<ISTableColumn<TItem>[]>;
|
|
80
|
+
columnDescriptors: import("vue").ComputedRef<TSTableColumnDescriptor<TItem>[]>;
|
|
81
|
+
dataColumnDescriptors: import("vue").ComputedRef<TSTableColumnDescriptor<TItem>[]>;
|
|
82
|
+
columnCssVars: import("vue").ComputedRef<Record<string, string>>;
|
|
83
|
+
totalWidth: import("vue").ComputedRef<number>;
|
|
84
|
+
columnCount: import("vue").ComputedRef<number>;
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=useTableColumns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableColumns.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableColumns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter, type Ref } from 'vue';
|
|
2
|
+
import { type TSTableFlatRow } from '../STable.types';
|
|
3
|
+
import type { TSTableFlatRowsSnapshot } from './useFlatTableRows';
|
|
4
|
+
import { type TSTableColumnDescriptor } from './useTableColumns';
|
|
5
|
+
/** Секции грида по вертикальной оси; значения совпадают с `data-section` в DOM. */
|
|
6
|
+
export declare enum ESTableGridSection {
|
|
7
|
+
HEADER = "h",
|
|
8
|
+
BODY = "b",
|
|
9
|
+
CREATION = "c",
|
|
10
|
+
AGGREGATE = "a"
|
|
11
|
+
}
|
|
12
|
+
/** Адрес roving-фокуса. Тело адресуется КЛЮЧОМ строки: индекс переживает не всякую правку данных. */
|
|
13
|
+
export type TSTableGridFocusAddress = {
|
|
14
|
+
section: ESTableGridSection;
|
|
15
|
+
/** Ключ строки тела; у шапки и полос tfoot отсутствует. */
|
|
16
|
+
rowKey?: string;
|
|
17
|
+
columnKey: string;
|
|
18
|
+
};
|
|
19
|
+
type TSTableGridFocusOptions = {
|
|
20
|
+
/** Доскроллить тело к строке адреса. */
|
|
21
|
+
scroll?: boolean;
|
|
22
|
+
/** Перенести DOM-фокус на ячейку (false — только смена roving-адреса). */
|
|
23
|
+
focusElement?: boolean;
|
|
24
|
+
/** Обновить память колонки (вертикальные переходы её сохраняют). */
|
|
25
|
+
updateDesired?: boolean;
|
|
26
|
+
};
|
|
27
|
+
/** Разбор `data-section` из DOM: значение приходит строкой, поэтому нужен guard. */
|
|
28
|
+
export declare const resolveTableGridSection: (value: string | null) => ESTableGridSection | undefined;
|
|
29
|
+
export interface IUseTableGridFocusOptions<TItem extends Record<string, unknown>> {
|
|
30
|
+
tableRootElement: Ref<HTMLElement | null>;
|
|
31
|
+
tableElement: Ref<HTMLElement | null>;
|
|
32
|
+
scrollElement: Ref<HTMLElement | null>;
|
|
33
|
+
columnDescriptors: ComputedRef<TSTableColumnDescriptor<TItem>[]>;
|
|
34
|
+
flatRows: ComputedRef<TSTableFlatRow<TItem>[]>;
|
|
35
|
+
snapshot: ComputedRef<TSTableFlatRowsSnapshot<TItem>>;
|
|
36
|
+
/** Колонка контента групповой строки. */
|
|
37
|
+
groupColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
38
|
+
/** Колонка контента строки-футера поддерева. */
|
|
39
|
+
depthFooterColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
40
|
+
/** Колонка контента строки «Показать ещё». */
|
|
41
|
+
loadMoreColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
42
|
+
/** Колонка контента строки создания. */
|
|
43
|
+
creationColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
44
|
+
hasCreationRow: MaybeRefOrGetter<boolean>;
|
|
45
|
+
hasAggregateRow: MaybeRefOrGetter<boolean>;
|
|
46
|
+
isRowNavigable: (flatRow: TSTableFlatRow<TItem> | undefined) => boolean;
|
|
47
|
+
/** Шаг PageUp/PageDown в строках. */
|
|
48
|
+
pageSize: MaybeRefOrGetter<number>;
|
|
49
|
+
buildCellDomId: (address: TSTableGridFocusAddress) => string;
|
|
50
|
+
onBodyRowFocused: (rowKey: string) => void;
|
|
51
|
+
scrollToRowIndex: (rowIndex: number) => void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Геометрия грида и DOM-фокус модели WAI-ARIA Grid: одна roving-ячейка на всю
|
|
55
|
+
* таблицу, порядковая ось строк «шапка → тело → строка создания → агрегат».
|
|
56
|
+
* Семантики клавиш здесь нет — её держит таблица.
|
|
57
|
+
*/
|
|
58
|
+
export declare const useTableGridFocus: <TItem extends Record<string, unknown>>({ tableRootElement, tableElement, scrollElement, columnDescriptors, flatRows, snapshot, groupColumnKey, depthFooterColumnKey, loadMoreColumnKey, creationColumnKey, hasCreationRow, hasAggregateRow, isRowNavigable, pageSize, buildCellDomId, onBodyRowFocused, scrollToRowIndex, }: IUseTableGridFocusOptions<TItem>) => {
|
|
59
|
+
focusAddress: ComputedRef<TSTableGridFocusAddress>;
|
|
60
|
+
focusedBodyRowKey: ComputedRef<string | undefined>;
|
|
61
|
+
focusBodyRowIndex: ComputedRef<number | undefined>;
|
|
62
|
+
cellEntered: import("vue").ShallowRef<boolean, boolean>;
|
|
63
|
+
isCellFocused: (section: ESTableGridSection, rowKey: string | undefined, columnKey: string) => boolean;
|
|
64
|
+
getCellTabIndex: (section: ESTableGridSection, rowKey: string | undefined, columnKey: string) => 0 | -1;
|
|
65
|
+
moveFocus: (rowDelta: number, columnDelta: number) => void;
|
|
66
|
+
moveToRowEdge: (edge: "start" | "end") => void;
|
|
67
|
+
moveToGridEdge: (edge: "first" | "last") => void;
|
|
68
|
+
moveByPage: (direction: 1 | -1) => void;
|
|
69
|
+
focusAddressNow: (address: TSTableGridFocusAddress, options?: TSTableGridFocusOptions) => void;
|
|
70
|
+
syncFocusAddress: (address: TSTableGridFocusAddress, entered: boolean) => void;
|
|
71
|
+
enterCell: () => boolean;
|
|
72
|
+
exitCell: () => void;
|
|
73
|
+
cycleCellFocus: (direction: 1 | -1) => void;
|
|
74
|
+
restoreFocusAfterUnmount: () => void;
|
|
75
|
+
ensureFocusedCellVisibleHorizontally: () => void;
|
|
76
|
+
queryFocusedCellElement: () => HTMLElement | undefined;
|
|
77
|
+
};
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=useTableGridFocus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableGridFocus.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableGridFocus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter } from 'vue';
|
|
2
|
+
import { type TSTableFlatRow } from '../STable.types';
|
|
3
|
+
import type { TSTableColumnDescriptor } from './useTableColumns';
|
|
4
|
+
import { type useTableGridFocus } from './useTableGridFocus';
|
|
5
|
+
type TGridFocus<TItem extends Record<string, unknown>> = ReturnType<typeof useTableGridFocus<TItem>>;
|
|
6
|
+
export interface IUseTableGridKeyboardOptions<TItem extends Record<string, unknown>> {
|
|
7
|
+
gridFocus: TGridFocus<TItem>;
|
|
8
|
+
columnDescriptors: ComputedRef<TSTableColumnDescriptor<TItem>[]>;
|
|
9
|
+
flatRows: ComputedRef<TSTableFlatRow<TItem>[]>;
|
|
10
|
+
/** Колонка дерева обычной строки: проп `expandColumnKey`, иначе главная колонка. */
|
|
11
|
+
expandColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
12
|
+
primaryColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
13
|
+
/** У групповой строки контент живёт в одной колонке — она же колонка дерева. */
|
|
14
|
+
groupColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
15
|
+
selectable: MaybeRefOrGetter<boolean>;
|
|
16
|
+
openMenuColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
17
|
+
toggleExpanded: (rowKey: string) => void;
|
|
18
|
+
toggleRowSelected: (rowKey: string) => void;
|
|
19
|
+
applySortCycle: (columnKey: string, append: boolean) => void;
|
|
20
|
+
setColumnMenuOpen: (columnKey: string, open: boolean) => void;
|
|
21
|
+
resizeColumnByKeyboard: (descriptor: TSTableColumnDescriptor<TItem>, direction: 1 | -1) => void;
|
|
22
|
+
onDepthFooterActivate: (flatRow: TSTableFlatRow<TItem>) => void;
|
|
23
|
+
onLoadMoreActivate: (flatRow: TSTableFlatRow<TItem>) => void;
|
|
24
|
+
onRowActivate: (flatRow: TSTableFlatRow<TItem>, event: KeyboardEvent) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Клавиатурный диспетчер грида: разбирает событие и переводит его в вызовы
|
|
28
|
+
* `useTableGridFocus` и коллбэки таблицы. Собственного состояния не держит —
|
|
29
|
+
* адрес фокуса и режим «внутри ячейки» живут в `useTableGridFocus`.
|
|
30
|
+
*/
|
|
31
|
+
export declare const useTableGridKeyboard: <TItem extends Record<string, unknown>>({ gridFocus, columnDescriptors, flatRows, expandColumnKey, primaryColumnKey, groupColumnKey, selectable, openMenuColumnKey, toggleExpanded, toggleRowSelected, applySortCycle, setColumnMenuOpen, resizeColumnByKeyboard, onDepthFooterActivate, onLoadMoreActivate, onRowActivate, }: IUseTableGridKeyboardOptions<TItem>) => {
|
|
32
|
+
handleGridFocusIn: (event: FocusEvent) => void;
|
|
33
|
+
handleGridKeydown: (event: KeyboardEvent) => void;
|
|
34
|
+
};
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=useTableGridKeyboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableGridKeyboard.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableGridKeyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAGtE,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAA;AAE5B,KAAK,UAAU,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAA;AAEpG,MAAM,WAAW,4BAA4B,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjF,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;IAC5B,iBAAiB,EAAE,WAAW,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChE,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9C,oFAAoF;IACpF,eAAe,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACrD,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACtD,gFAAgF;IAChF,cAAc,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACpD,UAAU,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACrC,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACvD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5D,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7D,sBAAsB,EAAE,CAAC,UAAU,EAAE,uBAAuB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAA;IAC/F,qBAAqB,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI,CAAA;IAC/D,kBAAkB,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI,CAAA;IAC5D,aAAa,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;CAC9E;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,uRAiBzE,4BAA4B,CAAC,KAAK,CAAC;+BAoBF,UAAU;+BA+JV,aAAa;CAgGhD,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter } from 'vue';
|
|
2
|
+
import type { TSTableFlatRow } from '../STable.types';
|
|
3
|
+
export type TSTableRenderEntry<TItem extends Record<string, unknown> = Record<string, unknown>> = {
|
|
4
|
+
row?: TSTableFlatRow<TItem>;
|
|
5
|
+
/** Ключ рендера: идентичность строки или позиция спейсера. */
|
|
6
|
+
renderKey: string;
|
|
7
|
+
spacer?: boolean;
|
|
8
|
+
spacerHeight?: number;
|
|
9
|
+
stuckTop?: boolean;
|
|
10
|
+
stuckBottom?: boolean;
|
|
11
|
+
/** Уходящий sticky-футер: прижат вместе со следующим и рисуется поверх него. */
|
|
12
|
+
stuckBottomLeaving?: boolean;
|
|
13
|
+
/** Выезжающий sticky-футер: уже отпущен CSS, но держится поверх всех до выхода из слота. */
|
|
14
|
+
stuckBottomSliding?: boolean;
|
|
15
|
+
/** Высота уходящего футера для следующего под ним: обрезка, чтобы не выглядывал. */
|
|
16
|
+
stuckBottomCoverHeight?: number;
|
|
17
|
+
/** Прижат дальше следующего: под ним, ниже по z. */
|
|
18
|
+
stuckBottomFar?: boolean;
|
|
19
|
+
/** Измеренная высота строки — держит геометрию в режиме плейсхолдеров. */
|
|
20
|
+
rowHeight?: number;
|
|
21
|
+
};
|
|
22
|
+
type TRowOffset = {
|
|
23
|
+
start: number;
|
|
24
|
+
end: number;
|
|
25
|
+
} | undefined;
|
|
26
|
+
export interface IUseTableRenderEntriesOptions<TItem extends Record<string, unknown>> {
|
|
27
|
+
flatRows: ComputedRef<TSTableFlatRow<TItem>[]>;
|
|
28
|
+
virtualEnabled: MaybeRefOrGetter<boolean>;
|
|
29
|
+
/** Индексы строк окна виртуализации; вне виртуального режима не читаются. */
|
|
30
|
+
windowIndexes: ComputedRef<number[]>;
|
|
31
|
+
/** Высота tbody в UI-координатах: при сжатии прокрутки меньше модельной. */
|
|
32
|
+
uiTotalSize: ComputedRef<number>;
|
|
33
|
+
/** Офсет строки в UI-координатах tbody. */
|
|
34
|
+
getRowUiOffset: (rowIndex: number) => TRowOffset;
|
|
35
|
+
/** Прилипшая сверху групповая строка и прилипшие снизу футеры поддеревьев. */
|
|
36
|
+
activeGroupRowIndex: ComputedRef<number | undefined>;
|
|
37
|
+
activeDepthFooterRowIndexes: ComputedRef<number[]>;
|
|
38
|
+
leavingDepthFooterRowIndex: ComputedRef<number | undefined>;
|
|
39
|
+
slidingDepthFooterRowIndexes: ComputedRef<number[]>;
|
|
40
|
+
farDepthFooterRowIndexes: ComputedRef<number[]>;
|
|
41
|
+
/** Активная строка навигации: на ней стоит DOM-фокус грида. */
|
|
42
|
+
activeRowIndex: ComputedRef<number | undefined>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Единый поток рендера tbody: блоки строк (окно плюс форс-строки вне окна),
|
|
46
|
+
* разделённые спейсерами по фактическим виртуальным офсетам.
|
|
47
|
+
*
|
|
48
|
+
* Ключ рендера — всегда идентичность строки. Роль (прилипшая, активная) на ключ не
|
|
49
|
+
* влияет: она меняется в рантайме, и ключ, зависящий от роли, размонтировал бы живой
|
|
50
|
+
* DOM вместе с фокусом, начатым кликом и незавершённым перетаскиванием.
|
|
51
|
+
*/
|
|
52
|
+
export declare const useTableRenderEntries: <TItem extends Record<string, unknown>>({ flatRows, virtualEnabled, windowIndexes, uiTotalSize, getRowUiOffset, activeGroupRowIndex, activeDepthFooterRowIndexes, leavingDepthFooterRowIndex, slidingDepthFooterRowIndexes, farDepthFooterRowIndexes, activeRowIndex, }: IUseTableRenderEntriesOptions<TItem>) => {
|
|
53
|
+
renderEntries: ComputedRef<TSTableRenderEntry<TItem>[]>;
|
|
54
|
+
};
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=useTableRenderEntries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableRenderEntries.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableRenderEntries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IAChG,GAAG,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;IAC3B,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,oFAAoF;IACpF,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,oDAAoD;IACpD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,KAAK,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAA;AAE5D,MAAM,WAAW,6BAA6B,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClF,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9C,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACzC,6EAA6E;IAC7E,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IACpC,4EAA4E;IAC5E,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAChC,2CAA2C;IAC3C,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,UAAU,CAAA;IAChD,8EAA8E;IAC9E,mBAAmB,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACpD,2BAA2B,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IAClD,0BAA0B,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC3D,4BAA4B,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IACnD,wBAAwB,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IAC/C,+DAA+D;IAC/D,cAAc,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAChD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,iOAY1E,6BAA6B,CAAC,KAAK,CAAC;;CA6JtC,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter, type Ref } from 'vue';
|
|
2
|
+
import { ESTableDropAction, ESTableRowsDragMode, type ISTableRowsDropPayload, type ISTableRowsReorderPayload, type TSTableFlatRow } from '../STable.types';
|
|
3
|
+
import type { TSTableFlatRowsSnapshot } from './useFlatTableRows';
|
|
4
|
+
type TSTableRowDropIndicator = {
|
|
5
|
+
targetKey: string;
|
|
6
|
+
action: ESTableDropAction;
|
|
7
|
+
depth: number;
|
|
8
|
+
};
|
|
9
|
+
export interface IUseTableRowDndOptions<TItem extends Record<string, unknown>> {
|
|
10
|
+
tableId: string;
|
|
11
|
+
enabled: MaybeRefOrGetter<boolean>;
|
|
12
|
+
dragMode: MaybeRefOrGetter<ESTableRowsDragMode>;
|
|
13
|
+
snapshot: ComputedRef<TSTableFlatRowsSnapshot<TItem>>;
|
|
14
|
+
scrollElement: Ref<HTMLElement | null>;
|
|
15
|
+
isRowDraggable: MaybeRefOrGetter<((item: TItem) => boolean) | undefined>;
|
|
16
|
+
dragExpandDelayMs: MaybeRefOrGetter<number>;
|
|
17
|
+
isExpanded: (rowKey: string) => boolean;
|
|
18
|
+
onHoverExpand: (rowKey: string) => void;
|
|
19
|
+
onReorder: (payload: ISTableRowsReorderPayload<TItem>) => void;
|
|
20
|
+
onTreeDrop: (payload: ISTableRowsDropPayload<TItem>) => void;
|
|
21
|
+
/** Заголовок строки для драг-превью. */
|
|
22
|
+
resolveRowPreviewTitle: (flatRow: TSTableFlatRow<TItem>) => string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* DnD строк: draggable/dropTarget регистрируются на `<tr>` из DOM-пула, данные
|
|
26
|
+
* строки читаются лениво из data-index на момент жеста — переиспользование
|
|
27
|
+
* элементов пула безопасно. Payload переживает размонтирование источника
|
|
28
|
+
* (monitorForElements). Tree: edges top/bottom + drop-inside центральной зоной
|
|
29
|
+
* (у групп мгновенно, у строк с задержкой), hover-раскрытие веток.
|
|
30
|
+
*/
|
|
31
|
+
export declare const useTableRowDnd: <TItem extends Record<string, unknown>>({ tableId, enabled, dragMode, snapshot, scrollElement, isRowDraggable, dragExpandDelayMs, isExpanded, onHoverExpand, onReorder, onTreeDrop, resolveRowPreviewTitle, }: IUseTableRowDndOptions<TItem>) => {
|
|
32
|
+
registerRowElement: (rowElement: Element | null) => void;
|
|
33
|
+
draggingRowKey: import("vue").ShallowRef<string | undefined, string | undefined>;
|
|
34
|
+
dropIndicator: import("vue").ShallowRef<TSTableRowDropIndicator | undefined, TSTableRowDropIndicator | undefined>;
|
|
35
|
+
};
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=useTableRowDnd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableRowDnd.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableRowDnd.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,GAAG,EACT,MAAM,KAAK,CAAA;AAqBZ,OAAO,EACL,iBAAiB,EAEjB,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAEjE,KAAK,uBAAuB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,iBAAiB,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,WAAW,sBAAsB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3E,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAClC,QAAQ,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,CAAA;IAC/C,QAAQ,EAAE,WAAW,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAA;IACrD,aAAa,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACtC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC,CAAA;IACxE,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC3C,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IACvC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,SAAS,EAAE,CAAC,OAAO,EAAE,yBAAyB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAA;IAC9D,UAAU,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAA;IAC5D,wCAAwC;IACxC,sBAAsB,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAA;CACnE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,uKAanE,sBAAsB,CAAC,KAAK,CAAC;qCA6MU,OAAO,GAAG,IAAI;;;CAgOvD,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter } from 'vue';
|
|
2
|
+
export interface IUseTableRowHydrationOptions {
|
|
3
|
+
/** Индексы строк окна виртуализации. */
|
|
4
|
+
windowIndexes: ComputedRef<number[]>;
|
|
5
|
+
/** Видимый диапазон без overscan: ближние к нему строки гидрируются первыми. */
|
|
6
|
+
visibleRange: ComputedRef<{
|
|
7
|
+
startIndex: number;
|
|
8
|
+
endIndex: number;
|
|
9
|
+
} | undefined>;
|
|
10
|
+
getRowKey: (rowIndex: number) => string | undefined;
|
|
11
|
+
/** Строка, которая гидрируется первой и вне бюджета (активная строка навигации). */
|
|
12
|
+
pinnedRowKey?: MaybeRefOrGetter<string | undefined>;
|
|
13
|
+
/** Выключено — все строки окна рендерятся полностью и сразу. */
|
|
14
|
+
enabled: MaybeRefOrGetter<boolean>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Прогрессивная гидрация строк окна. Виртуализатор меняет окно на каждый кадр прокрутки,
|
|
18
|
+
* а монтирование строки с компонентами в ячейках стоит миллисекунды: при быстрой
|
|
19
|
+
* прокрутке кадр не укладывается в 16 мс — отсюда подвисания и пустые полосы (окно
|
|
20
|
+
* отстаёт от композитора). Новые строки окна получают полный рендер порциями: не больше
|
|
21
|
+
* бюджета за кадр, остальные ждут плашками и добираются следующими кадрами, ближние к
|
|
22
|
+
* видимой области — первыми. Бюджет подстраивается под фактическое время кадра, поэтому
|
|
23
|
+
* на лёгких ячейках плашки не появляются вовсе. Строки, вышедшие из окна, гидрацию теряют.
|
|
24
|
+
*/
|
|
25
|
+
export declare const useTableRowHydration: ({ windowIndexes, visibleRange, getRowKey, pinnedRowKey, enabled, }: IUseTableRowHydrationOptions) => {
|
|
26
|
+
isRowHydrated: (rowKey: string) => boolean;
|
|
27
|
+
hydratedKeys: import("vue").ShallowRef<ReadonlySet<string>, ReadonlySet<string>>;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=useTableRowHydration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableRowHydration.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableRowHydration.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAYzF,MAAM,WAAW,4BAA4B;IAC3C,wCAAwC;IACxC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IACpC,gFAAgF;IAChF,YAAY,EAAE,WAAW,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;IAC/E,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IACnD,oFAAoF;IACpF,YAAY,CAAC,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACnD,gEAAgE;IAChE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;CACnC;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAAI,oEAMlC,4BAA4B;4BA6KE,MAAM;;CAKtC,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type MaybeRefOrGetter, type Ref } from 'vue';
|
|
2
|
+
export interface IUseTableScrollScaleOptions {
|
|
3
|
+
scrollElement: Ref<HTMLElement | null>;
|
|
4
|
+
/** Модельная высота tbody — сумма высот всех строк. */
|
|
5
|
+
totalSize: MaybeRefOrGetter<number>;
|
|
6
|
+
/** Высота вьюпорта скроллера (clientHeight). */
|
|
7
|
+
viewportHeight: MaybeRefOrGetter<number>;
|
|
8
|
+
/** Шапка и полосы tfoot: они тоже входят в scrollHeight. */
|
|
9
|
+
extraHeight: MaybeRefOrGetter<number>;
|
|
10
|
+
/**
|
|
11
|
+
* Масштаб сменился при активном сжатии, scrollTop переписан под прежний модельный
|
|
12
|
+
* офсет. Перезапись обычно округляется в то же число и scroll-события не даёт —
|
|
13
|
+
* потребитель сообщает офсет виртуализатору сам.
|
|
14
|
+
*/
|
|
15
|
+
onRescale?: (modelOffset: number) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Сжатие прокрутки для таблиц выше лимита браузера (ag-grid-style): высота tbody в DOM
|
|
19
|
+
* ограничена потолком, scrollTop скроллера («UI») переводится в модельный офсет, а строки
|
|
20
|
+
* раскладываются по UI-координатам как `модель − uiShift`. Карта кусочная: краевые зоны
|
|
21
|
+
* один к одному, середина — пропорционально. Пока таблица ниже потолка — тождество.
|
|
22
|
+
*/
|
|
23
|
+
export declare const useTableScrollScale: ({ scrollElement, totalSize, viewportHeight, extraHeight, onRescale, }: IUseTableScrollScaleOptions) => {
|
|
24
|
+
uiScrollTop: import("vue").ShallowRef<number, number>;
|
|
25
|
+
modelScrollOffset: import("vue").ComputedRef<number>;
|
|
26
|
+
uiShift: import("vue").ComputedRef<number>;
|
|
27
|
+
uiTotalSize: import("vue").ComputedRef<number>;
|
|
28
|
+
maxModelScrollTop: import("vue").ComputedRef<number>;
|
|
29
|
+
active: import("vue").ComputedRef<boolean>;
|
|
30
|
+
uiToModel: (uiOffset: number) => number;
|
|
31
|
+
modelToUi: (modelOffset: number) => number;
|
|
32
|
+
setScrollTop: (container: HTMLElement, uiOffset: number) => void;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=useTableScrollScale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableScrollScale.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableScrollScale.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,GAAG,EACT,MAAM,KAAK,CAAA;AAWZ,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACtC,uDAAuD;IACvD,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACnC,gDAAgD;IAChD,cAAc,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACxC,4DAA4D;IAC5D,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACrC;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C;AA+GD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,uEAMjC,2BAA2B;;;;;;;0BAmBC,MAAM;6BAIH,MAAM;8BAuDL,WAAW,YAAY,MAAM;CAsG/D,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ComputedRef, type MaybeRefOrGetter, type Ref } from 'vue';
|
|
2
|
+
import { ESTableCheckState, type TSTableFieldResolver } from '../STable.types';
|
|
3
|
+
import { type TSTableTreeIndex } from './useFlatTableRows';
|
|
4
|
+
export interface IUseTableSelectionOptions<TItem extends Record<string, unknown>> {
|
|
5
|
+
selected: Ref<string[]>;
|
|
6
|
+
cascade: MaybeRefOrGetter<boolean>;
|
|
7
|
+
treeIndex: ComputedRef<TSTableTreeIndex<TItem>>;
|
|
8
|
+
groupRow: MaybeRefOrGetter<TSTableFieldResolver<TItem, boolean> | undefined>;
|
|
9
|
+
disabledKey: MaybeRefOrGetter<(keyof TItem & string) | undefined>;
|
|
10
|
+
isItemSelectable?: MaybeRefOrGetter<((item: TItem) => boolean) | undefined>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Выбор строк с опциональным каскадом (tri-state):
|
|
14
|
+
* - в `selected` живут только selectable-узлы (группы и disabled исключены);
|
|
15
|
+
* - checked = сам узел в наборе; indeterminate = узел не в наборе, но есть выбранные потомки;
|
|
16
|
+
* - каскадный клик кладёт/убирает всё selectable-поддерево, авто-подъём достраивает предков.
|
|
17
|
+
*/
|
|
18
|
+
export declare const useTableSelection: <TItem extends Record<string, unknown>>({ selected, cascade, treeIndex, groupRow, disabledKey, isItemSelectable, }: IUseTableSelectionOptions<TItem>) => {
|
|
19
|
+
isSelected: (rowKey: string) => boolean;
|
|
20
|
+
isNodeSelectable: (rowKey: string) => boolean;
|
|
21
|
+
getCheckState: (rowKey: string) => ESTableCheckState;
|
|
22
|
+
toggleRow: (rowKey: string) => void;
|
|
23
|
+
headerCheckState: ComputedRef<ESTableCheckState>;
|
|
24
|
+
toggleSelectAll: () => void;
|
|
25
|
+
clearSelection: () => void;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=useTableSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableSelection.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAEnG,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEpF,MAAM,WAAW,yBAAyB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9E,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;IACvB,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAClC,SAAS,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/C,QAAQ,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAA;IAC5E,WAAW,EAAE,gBAAgB,CAAC,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC,CAAA;IACjE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC,CAAA;CAC5E;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,4EAOtE,yBAAyB,CAAC,KAAK,CAAC;yBAyDL,MAAM;+BAhDA,MAAM;4BAoDT,MAAM;wBAmEV,MAAM;;;;CAiFlC,CAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type ComputedRef, type CSSProperties, type MaybeRefOrGetter } from 'vue';
|
|
2
|
+
import type { ISTableColumn, ISTableDepthFooterConfig, ISTableFooterValue, TSTableDepthFooterSlotScope, TSTableFlatRow, TSTableLoadMoreSlotScope } from '../STable.types';
|
|
3
|
+
import { type TSTableTreeNode } from './useFlatTableRows';
|
|
4
|
+
export interface IUseTableServiceRowsOptions<TItem extends Record<string, unknown>> {
|
|
5
|
+
columns: MaybeRefOrGetter<readonly ISTableColumn<TItem>[]>;
|
|
6
|
+
primaryColumnKey: ComputedRef<string | undefined>;
|
|
7
|
+
/** Узлы индекса дерева: размер поддерева идёт в счётчик «загружено/всего» группы. */
|
|
8
|
+
treeNodeByKey: ComputedRef<ReadonlyMap<string, TSTableTreeNode<TItem>>>;
|
|
9
|
+
groupTotalKey: MaybeRefOrGetter<(keyof TItem & string) | undefined>;
|
|
10
|
+
depthFooter: MaybeRefOrGetter<ISTableDepthFooterConfig<TItem> | undefined>;
|
|
11
|
+
groupContentColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
12
|
+
creationContentColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
13
|
+
loadMoreContentColumnKey: MaybeRefOrGetter<string | undefined>;
|
|
14
|
+
treeIndent: MaybeRefOrGetter<number>;
|
|
15
|
+
loadingMoreChildrenKeys: MaybeRefOrGetter<readonly string[] | undefined>;
|
|
16
|
+
footerValues: MaybeRefOrGetter<Readonly<Record<string, ISTableFooterValue>> | undefined>;
|
|
17
|
+
/** Индекс футера, видимого прижатым у нижней кромки: слот должен знать своё состояние. */
|
|
18
|
+
stuckDepthFooterRowIndex: ComputedRef<number | undefined>;
|
|
19
|
+
onDepthFooterClick: (payload: {
|
|
20
|
+
parentKey: string;
|
|
21
|
+
parentItem: TItem;
|
|
22
|
+
depth: number;
|
|
23
|
+
}) => void;
|
|
24
|
+
onLoadMoreChildren: (payload: {
|
|
25
|
+
key: string;
|
|
26
|
+
item: TItem;
|
|
27
|
+
}) => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Служебные строки (группа, футер поддерева, «Показать ещё») и агрегатный футер.
|
|
31
|
+
*
|
|
32
|
+
* Общий принцип: контент такой строки живёт в конкретной колонке, а не растягивается
|
|
33
|
+
* через `colspan` — колоночная структура сохраняется, и при горизонтальном скролле
|
|
34
|
+
* контент не уезжает, потому что колонка по умолчанию главная и всегда sticky-left.
|
|
35
|
+
*/
|
|
36
|
+
export declare const useTableServiceRows: <TItem extends Record<string, unknown>>({ columns, primaryColumnKey, treeNodeByKey, groupTotalKey, depthFooter, groupContentColumnKey, creationContentColumnKey, loadMoreContentColumnKey, treeIndent, loadingMoreChildrenKeys, footerValues, stuckDepthFooterRowIndex, onDepthFooterClick, onLoadMoreChildren, }: IUseTableServiceRowsOptions<TItem>) => {
|
|
37
|
+
depthFooterColumnKey: ComputedRef<string | undefined>;
|
|
38
|
+
groupColumnKey: ComputedRef<string | undefined>;
|
|
39
|
+
creationColumnKey: ComputedRef<string | undefined>;
|
|
40
|
+
loadMoreColumnKey: ComputedRef<string | undefined>;
|
|
41
|
+
getGroupCount: (flatRow: TSTableFlatRow<TItem>) => number;
|
|
42
|
+
getGroupTotal: (flatRow: TSTableFlatRow<TItem>) => number | undefined;
|
|
43
|
+
getGroupTitle: (flatRow: TSTableFlatRow<TItem>) => string | undefined;
|
|
44
|
+
getDepthIndentStyle: (depth: number) => CSSProperties;
|
|
45
|
+
emitDepthFooterClick: (flatRow: TSTableFlatRow<TItem>) => void;
|
|
46
|
+
getDepthFooterSlotScope: (flatRow: TSTableFlatRow<TItem>) => TSTableDepthFooterSlotScope<TItem>;
|
|
47
|
+
isLoadMoreRowLoading: (flatRow: TSTableFlatRow<TItem>) => boolean;
|
|
48
|
+
emitLoadMoreChildren: (flatRow: TSTableFlatRow<TItem>) => void;
|
|
49
|
+
getLoadMoreSlotScope: (flatRow: TSTableFlatRow<TItem>) => TSTableLoadMoreSlotScope<TItem>;
|
|
50
|
+
getFooterValueText: (columnKey: string) => string;
|
|
51
|
+
getFooterToneClass: (columnKey: string) => string | undefined;
|
|
52
|
+
getFooterSlotScope: (columnKey: string) => {
|
|
53
|
+
column: ISTableColumn<TItem>;
|
|
54
|
+
footerValue: ISTableFooterValue | undefined;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=useTableServiceRows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableServiceRows.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableServiceRows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAEpG,OAAO,KAAK,EACV,aAAa,EACb,wBAAwB,EACxB,kBAAkB,EAClB,2BAA2B,EAC3B,cAAc,EACd,wBAAwB,EACzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,WAAW,2BAA2B,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAChF,OAAO,EAAE,gBAAgB,CAAC,SAAS,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1D,gBAAgB,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACjD,qFAAqF;IACrF,aAAa,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACvE,aAAa,EAAE,gBAAgB,CAAC,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC,CAAA;IACnE,WAAW,EAAE,gBAAgB,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAA;IAC1E,qBAAqB,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC3D,wBAAwB,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC9D,wBAAwB,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC9D,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACpC,uBAAuB,EAAE,gBAAgB,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;IACxE,YAAY,EAAE,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;IACxF,0FAA0F;IAC1F,wBAAwB,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACzD,kBAAkB,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC9F,kBAAkB,EAAE,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAA;KAAE,KAAK,IAAI,CAAA;CACpE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,2QAexE,2BAA2B,CAAC,KAAK,CAAC;;;;;6BAsBH,cAAc,CAAC,KAAK,CAAC;6BAIrB,cAAc,CAAC,KAAK,CAAC;6BAIrB,cAAc,CAAC,KAAK,CAAC;iCAUjB,MAAM,KAAG,aAAa;oCAMnB,cAAc,CAAC,KAAK,CAAC;uCASjD,cAAc,CAAC,KAAK,CAAC,KAC7B,2BAA2B,CAAC,KAAK,CAAC;oCAgBE,cAAc,CAAC,KAAK,CAAC;oCAQrB,cAAc,CAAC,KAAK,CAAC;oCASjD,cAAc,CAAC,KAAK,CAAC,KAC7B,wBAAwB,CAAC,KAAK,CAAC;oCAgBK,MAAM;oCAeN,MAAM;oCAMN,MAAM;;;;CA2B9C,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
2
|
+
import { ESTableSortDirection, type TSTableHeaderSlotScope, type TSTableSortEntry } from '../STable.types';
|
|
3
|
+
import type { TSTableColumnDescriptor } from './useTableColumns';
|
|
4
|
+
export interface IUseTableSortingOptions {
|
|
5
|
+
sortState: Ref<TSTableSortEntry[]>;
|
|
6
|
+
onSortChange: (sortEntries: TSTableSortEntry[]) => void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Сортировка как намерение: кит не трогает данные, а держит индикаторы
|
|
10
|
+
* (`sortState`) и сообщает о смене наружу. Порядок записей в `sortState` — это
|
|
11
|
+
* порядок мультисортировки, он же даёт номера бейджей в шапке.
|
|
12
|
+
*/
|
|
13
|
+
export declare const useTableSorting: <TItem extends Record<string, unknown>>({ sortState, onSortChange, }: IUseTableSortingOptions) => {
|
|
14
|
+
getColumnSortDirection: (columnKey: string) => ESTableSortDirection | undefined;
|
|
15
|
+
getColumnSortIndex: (columnKey: string) => number | undefined;
|
|
16
|
+
applySortCycle: (columnKey: string, append: boolean) => void;
|
|
17
|
+
applySortExact: (columnKey: string, direction: ESTableSortDirection | undefined) => void;
|
|
18
|
+
getHeaderAriaSort: (descriptor: TSTableColumnDescriptor<TItem>) => "descending" | "ascending" | undefined;
|
|
19
|
+
getHeaderSlotScope: (descriptor: TSTableColumnDescriptor<TItem>) => TSTableHeaderSlotScope<TItem>;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=useTableSorting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableSorting.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableSorting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAExC,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAEhE,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAClC,YAAY,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAA;CACxD;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,8BAGpE,uBAAuB;wCAKmB,MAAM;oCAIV,MAAM;gCAgBV,MAAM,UAAU,OAAO;gCA+BvB,MAAM,aAAa,oBAAoB,GAAG,SAAS;oCAwB/C,uBAAuB,CAAC,KAAK,CAAC;qCAevD,uBAAuB,CAAC,KAAK,CAAC,KACzC,sBAAsB,CAAC,KAAK,CAAC;CAoBjC,CAAA"}
|