@shtabapp/ui-kit 1.62.0 → 1.64.0

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 (199) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/SChartBar-BVgwPlYi.js +215 -0
  3. package/dist/SChartBar-CBU1uCuL.cjs +1 -0
  4. package/dist/SChartBurnup-Ch3UMa9w.cjs +1 -0
  5. package/dist/{SChartBurnup-Dxi0MBwo.js → SChartBurnup-DyJHdRlf.js} +75 -75
  6. package/dist/SChartHorizontalBar-Bv90SV6E.cjs +1 -0
  7. package/dist/{SChartHorizontalBar-XNasKzaO.js → SChartHorizontalBar-DDo6TfE8.js} +28 -28
  8. package/dist/{SChartLine-DSQaezYq.js → SChartLine-Cs1JzPEK.js} +29 -29
  9. package/dist/SChartLine-nIGaef_o.cjs +1 -0
  10. package/dist/SChartMultiLine-BzoW4ETf.cjs +1 -0
  11. package/dist/SChartMultiLine-DqCQ7FCv.js +204 -0
  12. package/dist/{SChartPie-bN8rY-y5.js → SChartPie-Bt3o7LZI.js} +55 -55
  13. package/dist/SChartPie-Bv5Obcwb.cjs +1 -0
  14. package/dist/{SChartProgress-BtwqE4xL.js → SChartProgress-uMg4DBpS.js} +30 -30
  15. package/dist/SChartProgress-xxqrj03o.cjs +1 -0
  16. package/dist/SChartStackedArea-BNe6FAg8.cjs +1 -0
  17. package/dist/{SChartStackedArea-BxUex_Di.js → SChartStackedArea-BQGnKp1i.js} +58 -58
  18. package/dist/SChartStackedBar-D1G-VloG.cjs +1 -0
  19. package/dist/SChartStackedBar-fiUU9lNp.js +245 -0
  20. package/dist/SColorPicker-BRSi0Xhm.cjs +1 -0
  21. package/dist/{SColorPicker-BL-zrskU.js → SColorPicker-Djr-R81h.js} +2 -1
  22. package/dist/SDropdownMenu-2koPU6IG.js +38 -0
  23. package/dist/SDropdownMenu-k9SxaFVH.cjs +1 -0
  24. package/dist/SList-D0PDc8VN.cjs +1 -0
  25. package/dist/SList-D2K9dNsj.js +465 -0
  26. package/dist/{SSegmentControl-CAoM03V6.js → SSegmentControl-B9KkAQiG.js} +11 -9
  27. package/dist/SSegmentControl-OXTka86u.cjs +1 -0
  28. package/dist/SSelect-CRlkCLik.cjs +1 -0
  29. package/dist/SSelect-D6taevzT.js +650 -0
  30. package/dist/STable-NbCfen0n.cjs +1 -0
  31. package/dist/STable-aS1eGuVB.js +3445 -0
  32. package/dist/areChartSeriesAligned-DiBX3TTk.cjs +1 -0
  33. package/dist/{buildChartSeriesPoints-D8Xpfwp7.js → areChartSeriesAligned-DjonrIMm.js} +2 -8
  34. package/dist/buildChartSeriesPoints-BTyOpkin.js +10 -0
  35. package/dist/buildChartSeriesPoints-Cqo2ed-n.cjs +1 -0
  36. package/dist/components/SChartBar/SChartBar.types.d.ts +47 -0
  37. package/dist/components/SChartBar/SChartBar.types.d.ts.map +1 -0
  38. package/dist/components/SChartBar/SChartBar.vue.d.ts +11 -0
  39. package/dist/components/SChartBar/SChartBar.vue.d.ts.map +1 -0
  40. package/dist/components/SChartBar/index.d.ts +3 -0
  41. package/dist/components/SChartBar/index.d.ts.map +1 -0
  42. package/dist/components/SChartBar/utils/buildBarChartConfig.d.ts +16 -0
  43. package/dist/components/SChartBar/utils/buildBarChartConfig.d.ts.map +1 -0
  44. package/dist/components/SChartBar/utils/createBarTargetLinePlugin.d.ts +9 -0
  45. package/dist/components/SChartBar/utils/createBarTargetLinePlugin.d.ts.map +1 -0
  46. package/dist/components/SChartBar/utils/demoBarSeries.d.ts +9 -0
  47. package/dist/components/SChartBar/utils/demoBarSeries.d.ts.map +1 -0
  48. package/dist/components/SChartBar/utils/skeletonBarSeries.d.ts +5 -0
  49. package/dist/components/SChartBar/utils/skeletonBarSeries.d.ts.map +1 -0
  50. package/dist/components/SChartMultiLine/SChartMultiLine.types.d.ts +2 -0
  51. package/dist/components/SChartMultiLine/SChartMultiLine.types.d.ts.map +1 -1
  52. package/dist/components/SChartMultiLine/SChartMultiLine.vue.d.ts.map +1 -1
  53. package/dist/components/SChartMultiLine/utils/buildMultiLineChartConfig.d.ts +2 -1
  54. package/dist/components/SChartMultiLine/utils/buildMultiLineChartConfig.d.ts.map +1 -1
  55. package/dist/components/SList/SList.vue.d.ts.map +1 -1
  56. package/dist/components/SList/utils/resolveListItemFields.d.ts +1 -1
  57. package/dist/components/SList/utils/resolveListItemFields.d.ts.map +1 -1
  58. package/dist/components/SSegmentControl/SSegmentControl.types.d.ts +2 -0
  59. package/dist/components/SSegmentControl/SSegmentControl.types.d.ts.map +1 -1
  60. package/dist/components/SSegmentControl/SSegmentControlItem.vue.d.ts.map +1 -1
  61. package/dist/components/STable/STable.types.d.ts +317 -0
  62. package/dist/components/STable/STable.types.d.ts.map +1 -0
  63. package/dist/components/STable/STable.vue.d.ts +154 -0
  64. package/dist/components/STable/STable.vue.d.ts.map +1 -0
  65. package/dist/components/STable/constants/tableSizes.d.ts +76 -0
  66. package/dist/components/STable/constants/tableSizes.d.ts.map +1 -0
  67. package/dist/components/STable/index.d.ts +4 -0
  68. package/dist/components/STable/index.d.ts.map +1 -0
  69. package/dist/components/STable/parts/STableCellText.vue.d.ts +23 -0
  70. package/dist/components/STable/parts/STableCellText.vue.d.ts.map +1 -0
  71. package/dist/components/STable/parts/STableCheckbox.vue.d.ts +17 -0
  72. package/dist/components/STable/parts/STableCheckbox.vue.d.ts.map +1 -0
  73. package/dist/components/STable/parts/STableContentRow.vue.d.ts +41 -0
  74. package/dist/components/STable/parts/STableContentRow.vue.d.ts.map +1 -0
  75. package/dist/components/STable/parts/STableGroupRow.vue.d.ts +55 -0
  76. package/dist/components/STable/parts/STableGroupRow.vue.d.ts.map +1 -0
  77. package/dist/components/STable/parts/STableHeaderCell.vue.d.ts +36 -0
  78. package/dist/components/STable/parts/STableHeaderCell.vue.d.ts.map +1 -0
  79. package/dist/components/STable/parts/STableHint.vue.d.ts +7 -0
  80. package/dist/components/STable/parts/STableHint.vue.d.ts.map +1 -0
  81. package/dist/components/STable/parts/STablePlaceholderRow.vue.d.ts +25 -0
  82. package/dist/components/STable/parts/STablePlaceholderRow.vue.d.ts.map +1 -0
  83. package/dist/components/STable/parts/STableRow.vue.d.ts +67 -0
  84. package/dist/components/STable/parts/STableRow.vue.d.ts.map +1 -0
  85. package/dist/components/STable/parts/STableSkeletonRow.vue.d.ts +27 -0
  86. package/dist/components/STable/parts/STableSkeletonRow.vue.d.ts.map +1 -0
  87. package/dist/components/STable/utils/tableDndShared.d.ts +17 -0
  88. package/dist/components/STable/utils/tableDndShared.d.ts.map +1 -0
  89. package/dist/components/STable/utils/useFlatTableRows.d.ts +62 -0
  90. package/dist/components/STable/utils/useFlatTableRows.d.ts.map +1 -0
  91. package/dist/components/STable/utils/useTableCellPlans.d.ts +48 -0
  92. package/dist/components/STable/utils/useTableCellPlans.d.ts.map +1 -0
  93. package/dist/components/STable/utils/useTableColumnDnd.d.ts +28 -0
  94. package/dist/components/STable/utils/useTableColumnDnd.d.ts.map +1 -0
  95. package/dist/components/STable/utils/useTableColumnResize.d.ts +24 -0
  96. package/dist/components/STable/utils/useTableColumnResize.d.ts.map +1 -0
  97. package/dist/components/STable/utils/useTableColumns.d.ts +86 -0
  98. package/dist/components/STable/utils/useTableColumns.d.ts.map +1 -0
  99. package/dist/components/STable/utils/useTableGridFocus.d.ts +79 -0
  100. package/dist/components/STable/utils/useTableGridFocus.d.ts.map +1 -0
  101. package/dist/components/STable/utils/useTableGridKeyboard.d.ts +36 -0
  102. package/dist/components/STable/utils/useTableGridKeyboard.d.ts.map +1 -0
  103. package/dist/components/STable/utils/useTableRenderEntries.d.ts +56 -0
  104. package/dist/components/STable/utils/useTableRenderEntries.d.ts.map +1 -0
  105. package/dist/components/STable/utils/useTableRowDnd.d.ts +37 -0
  106. package/dist/components/STable/utils/useTableRowDnd.d.ts.map +1 -0
  107. package/dist/components/STable/utils/useTableRowHydration.d.ts +29 -0
  108. package/dist/components/STable/utils/useTableRowHydration.d.ts.map +1 -0
  109. package/dist/components/STable/utils/useTableScrollScale.d.ts +34 -0
  110. package/dist/components/STable/utils/useTableScrollScale.d.ts.map +1 -0
  111. package/dist/components/STable/utils/useTableSelection.d.ts +27 -0
  112. package/dist/components/STable/utils/useTableSelection.d.ts.map +1 -0
  113. package/dist/components/STable/utils/useTableServiceRows.d.ts +57 -0
  114. package/dist/components/STable/utils/useTableServiceRows.d.ts.map +1 -0
  115. package/dist/components/STable/utils/useTableSorting.d.ts +21 -0
  116. package/dist/components/STable/utils/useTableSorting.d.ts.map +1 -0
  117. package/dist/components/STable/utils/useTableStickyRows.d.ts +38 -0
  118. package/dist/components/STable/utils/useTableStickyRows.d.ts.map +1 -0
  119. package/dist/components/STable/utils/useTableStyleVars.d.ts +22 -0
  120. package/dist/components/STable/utils/useTableStyleVars.d.ts.map +1 -0
  121. package/dist/components/STable/utils/useTableVirtualRows.d.ts +56 -0
  122. package/dist/components/STable/utils/useTableVirtualRows.d.ts.map +1 -0
  123. package/dist/composables/treeKeyboardNavigation.d.ts +26 -0
  124. package/dist/composables/treeKeyboardNavigation.d.ts.map +1 -0
  125. package/dist/composables/useFlatTreeList.d.ts +1 -0
  126. package/dist/composables/useFlatTreeList.d.ts.map +1 -1
  127. package/dist/{createChartCrosshairPlugin-DwFOncWI.js → createChartCrosshairPlugin-DU5grSok.js} +2 -2
  128. package/dist/createChartCrosshairPlugin-DfYzBie2.cjs +1 -0
  129. package/dist/entries/chart-bar.cjs +1 -0
  130. package/dist/entries/chart-bar.d.ts +3 -0
  131. package/dist/entries/chart-bar.d.ts.map +1 -0
  132. package/dist/entries/chart-bar.js +2 -0
  133. package/dist/entries/chart-burnup.cjs +1 -1
  134. package/dist/entries/chart-burnup.js +1 -1
  135. package/dist/entries/chart-horizontal-bar.cjs +1 -1
  136. package/dist/entries/chart-horizontal-bar.js +1 -1
  137. package/dist/entries/chart-line.cjs +1 -1
  138. package/dist/entries/chart-line.js +1 -1
  139. package/dist/entries/chart-multi-line.cjs +1 -1
  140. package/dist/entries/chart-multi-line.js +1 -1
  141. package/dist/entries/chart-pie.cjs +1 -1
  142. package/dist/entries/chart-pie.js +1 -1
  143. package/dist/entries/chart-progress.cjs +1 -1
  144. package/dist/entries/chart-progress.js +1 -1
  145. package/dist/entries/chart-stacked-area.cjs +1 -1
  146. package/dist/entries/chart-stacked-area.js +1 -1
  147. package/dist/entries/chart-stacked-bar.cjs +1 -1
  148. package/dist/entries/chart-stacked-bar.js +1 -1
  149. package/dist/entries/color-picker.cjs +1 -1
  150. package/dist/entries/color-picker.js +1 -1
  151. package/dist/entries/list.cjs +1 -1
  152. package/dist/entries/list.js +1 -1
  153. package/dist/entries/segment-control.cjs +1 -1
  154. package/dist/entries/segment-control.js +1 -1
  155. package/dist/entries/select.cjs +1 -1
  156. package/dist/entries/select.js +1 -1
  157. package/dist/entries/table.cjs +1 -0
  158. package/dist/entries/table.d.ts +3 -0
  159. package/dist/entries/table.d.ts.map +1 -0
  160. package/dist/entries/table.js +2 -0
  161. package/dist/index.cjs +1 -1
  162. package/dist/index.d.ts +4 -0
  163. package/dist/index.d.ts.map +1 -1
  164. package/dist/index.js +133 -129
  165. package/dist/resolveBarStackedSeriesColor-HDSkh6Mw.cjs +1 -0
  166. package/dist/resolveBarStackedSeriesColor-LpVh1SvQ.js +11 -0
  167. package/dist/resolveSeriesPaletteColor-B5qoBbXN.cjs +1 -0
  168. package/dist/{resolveSeriesPaletteColor-BdvGT-PI.js → resolveSeriesPaletteColor-DcLSyk-D.js} +1 -1
  169. package/dist/{resolveStackedChartContext-DFre3tt0.js → resolveStackedChartContext-CIKVXkDn.js} +6 -6
  170. package/dist/resolveStackedChartContext-CQbgdV55.cjs +1 -0
  171. package/dist/treeKeyboardNavigation-BOz2SVus.cjs +1 -0
  172. package/dist/treeKeyboardNavigation-SmxTdnDz.js +131 -0
  173. package/dist/uikit-components.css +1 -1
  174. package/dist/{SChartSkeletonHost-BT96eWSF.js → useChartInteractivity-BATdT86l.js} +126 -126
  175. package/dist/useChartInteractivity-CXSdHPOw.cjs +1 -0
  176. package/package.json +19 -3
  177. package/dist/SChartBurnup-C4x5kik6.cjs +0 -1
  178. package/dist/SChartHorizontalBar-4H-lgfO4.cjs +0 -1
  179. package/dist/SChartLine-BF6Klm4j.cjs +0 -1
  180. package/dist/SChartMultiLine-CrMmphFe.js +0 -198
  181. package/dist/SChartMultiLine-Ddvfmf__.cjs +0 -1
  182. package/dist/SChartPie-namQTFla.cjs +0 -1
  183. package/dist/SChartProgress-DsFHotRv.cjs +0 -1
  184. package/dist/SChartSkeletonHost-Dt5EjQr5.cjs +0 -1
  185. package/dist/SChartStackedArea-BLHs3sSH.cjs +0 -1
  186. package/dist/SChartStackedBar-BJ9LOgSP.js +0 -250
  187. package/dist/SChartStackedBar-CWNyvUj9.cjs +0 -1
  188. package/dist/SColorPicker-CvhpJEj1.cjs +0 -1
  189. package/dist/SList-C39LrsoS.js +0 -590
  190. package/dist/SList-Du0gqyFs.cjs +0 -1
  191. package/dist/SSegmentControl-B9jT8Axu.cjs +0 -1
  192. package/dist/SSelect-BkX3VuCr.js +0 -682
  193. package/dist/SSelect-CHWKMbB_.cjs +0 -1
  194. package/dist/buildChartSeriesPoints-Bv3nXvSu.cjs +0 -1
  195. package/dist/components/SList/utils/treeKeyboardNavigation.d.ts +0 -16
  196. package/dist/components/SList/utils/treeKeyboardNavigation.d.ts.map +0 -1
  197. package/dist/createChartCrosshairPlugin-ZZwKUQm8.cjs +0 -1
  198. package/dist/resolveSeriesPaletteColor-hI4YDdUg.cjs +0 -1
  199. package/dist/resolveStackedChartContext-Dsxhhhel.cjs +0 -1
@@ -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":"AAAA,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,GAAG,EACT,MAAM,KAAK,CAAA;AAEZ,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAEtF,mFAAmF;AACnF,oBAAY,kBAAkB;IAC5B,MAAM,MAAM;IACZ,IAAI,MAAM;IACV,QAAQ,MAAM;IACd,SAAS,MAAM;CAChB;AAED,qGAAqG;AACrG,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,kBAAkB,CAAA;IAC3B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC7B,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,oEAAoE;IACpE,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAMD,oFAAoF;AACpF,eAAO,MAAM,uBAAuB,GAAI,OAAO,MAAM,GAAG,IAAI,mCAE3D,CAAA;AAED,MAAM,WAAW,yBAAyB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9E,gBAAgB,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACzC,YAAY,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACrC,aAAa,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACtC,iBAAiB,EAAE,WAAW,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChE,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9C,QAAQ,EAAE,WAAW,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAA;IACrD,yCAAyC;IACzC,cAAc,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACpD,gDAAgD;IAChD,oBAAoB,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC1D,8CAA8C;IAC9C,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACvD,wCAAwC;IACxC,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACvD,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACzC,eAAe,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC1C,cAAc,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,SAAS,KAAK,OAAO,CAAA;IACvE,qCAAqC;IACrC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAClC,cAAc,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,MAAM,CAAA;IAC5D,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7C;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,sRAkBtE,yBAAyB,CAAC,KAAK,CAAC;;;;;6BAyhBtB,kBAAkB,UACnB,MAAM,GAAG,SAAS,aACf,MAAM;+BAWR,kBAAkB,UACnB,MAAM,GAAG,SAAS,aACf,MAAM;0BAhOU,MAAM,eAAe,MAAM;0BA2B3B,OAAO,GAAG,KAAK;2BAUd,OAAO,GAAG,MAAM;4BAgBf,CAAC,GAAG,CAAC,CAAC;+BApFH,uBAAuB,YAAY,uBAAuB;gCAsOzD,uBAAuB,WAAW,OAAO;;;gCAvFzC,CAAC,GAAG,CAAC,CAAC;;;;CAsJ1C,CAAA"}
@@ -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"}
@@ -0,0 +1,38 @@
1
+ import { type ComputedRef, type MaybeRefOrGetter } from 'vue';
2
+ import type { TSTableFlatRowsSnapshot } from './useFlatTableRows';
3
+ export interface IUseTableStickyRowsOptions<TItem extends Record<string, unknown>> {
4
+ snapshot: ComputedRef<TSTableFlatRowsSnapshot<TItem>>;
5
+ /** Видимый диапазон строк (без overscan) от виртуализатора. */
6
+ visibleRange: ComputedRef<{
7
+ startIndex: number;
8
+ endIndex: number;
9
+ } | undefined>;
10
+ depthFooterSticky: MaybeRefOrGetter<boolean>;
11
+ /**
12
+ * Индекс строки у нижней кромки вьюпорта с поправкой на шапку и прижатые
13
+ * полосы tfoot: `range.endIndex` считает от начала tbody и указывает на
14
+ * строку, которая ниже видимой области на высоту этих полос.
15
+ */
16
+ bottomVisibleRowIndex: ComputedRef<number | undefined>;
17
+ /** Модельные офсеты строк от виртуализатора: запас прижатия футеров считается в px. */
18
+ getRowOffset: (rowIndex: number) => {
19
+ start: number;
20
+ end: number;
21
+ } | undefined;
22
+ }
23
+ /**
24
+ * Выбор «активных» sticky-строк по индексам (вердикт ресёрча sticky-строк):
25
+ * JS решает только, ЧЬИ ячейки получают `position: sticky`, — само прилипание,
26
+ * плавный вход и выход в поток делает CSS. Активный групп-хедер — глубочайшая
27
+ * группа, накрывающая верх вьюпорта; активный depth-футер — футер глубочайшего
28
+ * предка строки у нижней границы (вариант А: прижат, пока поддерево видимо).
29
+ */
30
+ export declare const useTableStickyRows: <TItem extends Record<string, unknown>>({ snapshot, visibleRange, depthFooterSticky, bottomVisibleRowIndex, getRowOffset, }: IUseTableStickyRowsOptions<TItem>) => {
31
+ activeGroupRowIndex: ComputedRef<number | undefined>;
32
+ activeDepthFooterRowIndex: ComputedRef<number | undefined>;
33
+ activeDepthFooterRowIndexes: ComputedRef<number[]>;
34
+ leavingDepthFooterRowIndex: ComputedRef<number | undefined>;
35
+ slidingDepthFooterRowIndexes: ComputedRef<number[]>;
36
+ farDepthFooterRowIndexes: ComputedRef<number[]>;
37
+ };
38
+ //# sourceMappingURL=useTableStickyRows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableStickyRows.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableStickyRows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAOhF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAOjE,MAAM,WAAW,0BAA0B,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/E,QAAQ,EAAE,WAAW,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAA;IACrD,+DAA+D;IAC/D,YAAY,EAAE,WAAW,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;IAC/E,iBAAiB,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC5C;;;;OAIG;IACH,qBAAqB,EAAE,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACtD,uFAAuF;IACvF,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAC/E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,qFAMvE,0BAA0B,CAAC,KAAK,CAAC;;;;;;;CA2LnC,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { type ComputedRef, type CSSProperties, type MaybeRefOrGetter } from 'vue';
2
+ export interface IUseTableStyleVarsOptions {
3
+ /** Суммарная высота прилипших снизу полос tfoot (агрегат + строка создания). */
4
+ tfootBarStackHeight: ComputedRef<number>;
5
+ hasFooterValues: MaybeRefOrGetter<boolean>;
6
+ scrollClientWidth: MaybeRefOrGetter<number>;
7
+ columnCssVars: ComputedRef<Record<string, string>>;
8
+ totalWidth: ComputedRef<number>;
9
+ height: MaybeRefOrGetter<number | string | undefined>;
10
+ maxHeight: MaybeRefOrGetter<number | string | undefined>;
11
+ }
12
+ /**
13
+ * CSS-переменные блока: единственный источник размеров — константы `tableSizes`,
14
+ * поэтому в стилях нет дублей чисел, а ширины и sticky-офсеты колонок приезжают
15
+ * из `useTableColumns` уже посчитанными.
16
+ */
17
+ export declare const useTableStyleVars: ({ tfootBarStackHeight, hasFooterValues, scrollClientWidth, columnCssVars, totalWidth, height, maxHeight, }: IUseTableStyleVarsOptions) => {
18
+ rootStyle: ComputedRef<CSSProperties>;
19
+ scrollStyle: ComputedRef<CSSProperties>;
20
+ tableStyle: ComputedRef<CSSProperties>;
21
+ };
22
+ //# sourceMappingURL=useTableStyleVars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableStyleVars.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableStyleVars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAUpG,MAAM,WAAW,yBAAyB;IACxC,gFAAgF;IAChF,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACxC,eAAe,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC1C,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC3C,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAClD,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC/B,MAAM,EAAE,gBAAgB,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA;IACrD,SAAS,EAAE,gBAAgB,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA;CACzD;AAUD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,4GAQ/B,yBAAyB;;;;CAqC3B,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { type MaybeRefOrGetter, type Ref } from 'vue';
2
+ import { type VirtualItem, type Virtualizer } from '@tanstack/vue-virtual';
3
+ import type { TSTableScrollAlign } from '../STable.types';
4
+ export interface IUseTableVirtualRowsOptions {
5
+ rowCount: MaybeRefOrGetter<number>;
6
+ enabled: MaybeRefOrGetter<boolean>;
7
+ /** Замер фактических высот строк (rowHeightMode auto). */
8
+ autoMeasure: MaybeRefOrGetter<boolean>;
9
+ estimateRowSize: MaybeRefOrGetter<number>;
10
+ /** Оценка высоты конкретной строки (групповые/футерные ниже обычных). */
11
+ estimateRowSizeByIndex?: (rowIndex: number) => number | undefined;
12
+ overscan: MaybeRefOrGetter<number>;
13
+ scrollElement: Ref<HTMLElement | null>;
14
+ /** Ключ строки по индексу: кэш размеров живёт по ключу, а не по позиции. */
15
+ getRowKey: (rowIndex: number) => string | number;
16
+ /** Версия данных: смена (новый массив строк) сбрасывает кэш замеров. */
17
+ rowsVersion: MaybeRefOrGetter<unknown>;
18
+ /** Высота вьюпорта скроллера (clientHeight) — для сжатия прокрутки и выравнивания. */
19
+ viewportHeight: MaybeRefOrGetter<number>;
20
+ /** Шапка и полосы tfoot: входят в scrollHeight, но не в модельную высоту строк. */
21
+ extraHeight: MaybeRefOrGetter<number>;
22
+ }
23
+ /**
24
+ * Оконная математика поверх @tanstack/vue-virtual для спейсерной виртуализации:
25
+ * строки рендерятся in-flow, вырезанное компенсируют два спейсер-`<tr>` (формула
26
+ * TanStack discussion #476). Замер высот — ручной батч offsetHeight → resizeItem
27
+ * в post-flush (DOM-пул строк несовместим со штатным measureElement: ref-каллбек
28
+ * не перевызывается при смене data-index у переиспользованного элемента).
29
+ * resizeItem сам компенсирует scrollTop при перемере строк выше вьюпорта.
30
+ */
31
+ export declare const useTableVirtualRows: ({ rowCount, enabled, autoMeasure, estimateRowSize, estimateRowSizeByIndex, overscan, scrollElement, getRowKey, rowsVersion, viewportHeight, extraHeight, }: IUseTableVirtualRowsOptions) => {
32
+ rowVirtualizer: Ref<Virtualizer<HTMLElement, Element>, Virtualizer<HTMLElement, Element>>;
33
+ virtualItems: import("vue").ComputedRef<VirtualItem[]>;
34
+ windowIndexes: import("vue").ComputedRef<number[]>;
35
+ totalSize: import("vue").ComputedRef<number>;
36
+ uiTotalSize: import("vue").ComputedRef<number>;
37
+ modelScrollOffset: import("vue").ComputedRef<number>;
38
+ scrollCompressed: import("vue").ComputedRef<boolean>;
39
+ measureWindowRows: () => void;
40
+ measureNewRows: () => void;
41
+ scrollToIndex: (rowIndex: number, align?: TSTableScrollAlign) => void;
42
+ visibleRange: import("vue").ComputedRef<{
43
+ startIndex: number;
44
+ endIndex: number;
45
+ } | undefined>;
46
+ getRowOffset: (rowIndex: number) => {
47
+ start: number;
48
+ end: number;
49
+ } | undefined;
50
+ getRowUiOffset: (rowIndex: number) => {
51
+ start: number;
52
+ end: number;
53
+ } | undefined;
54
+ getRowIndexAtOffset: (contentOffset: number) => number | undefined;
55
+ };
56
+ //# sourceMappingURL=useTableVirtualRows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableVirtualRows.d.ts","sourceRoot":"","sources":["../../../../src/components/STable/utils/useTableVirtualRows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,gBAAgB,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAE3F,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAKzD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAClC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAClC,0DAA0D;IAC1D,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACtC,eAAe,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACzC,yEAAyE;IACzE,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IACjE,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAClC,aAAa,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACtC,4EAA4E;IAC5E,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAA;IAChD,wEAAwE;IACxE,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACtC,sFAAsF;IACtF,cAAc,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACxC,mFAAmF;IACnF,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;CACtC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAAI,4JAYjC,2BAA2B;;;;;;;;;;8BA2UK,MAAM,UAAS,kBAAkB;;;;;6BAsDlC,MAAM;;;;+BAWJ,MAAM;;;;yCAxCI,MAAM;CAoEnD,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Структурный минимум строки дерева: и SList, и STable кладут сюда свои плоские строки.
3
+ * Утилита не знает ни про item, ни про вид строки — только про связи родитель/потомки.
4
+ */
5
+ export type TTreeNavigationRow = {
6
+ key: string;
7
+ depth: number;
8
+ hasChildren: boolean;
9
+ expanded: boolean;
10
+ parentKey?: string;
11
+ };
12
+ export type TTreeKeyboardNavigationAction = {
13
+ type: 'select';
14
+ rowKey: string;
15
+ } | {
16
+ type: 'expand';
17
+ rowKey: string;
18
+ } | {
19
+ type: 'collapse';
20
+ rowKey: string;
21
+ };
22
+ export declare const resolveListSelectionAnchorKey: (currentKey: string, selectedKey: string | string[] | undefined) => string;
23
+ export declare const listHasTreeStructure: <TRow extends TTreeNavigationRow>(flatRows: readonly TRow[]) => boolean;
24
+ export declare const resolveTreeKeyboardNavigationAction: <TRow extends TTreeNavigationRow>(key: "ArrowLeft" | "ArrowRight", anchorKey: string, flatRows: readonly TRow[]) => TTreeKeyboardNavigationAction | null;
25
+ export declare const resolveTreeVerticalNavigationTarget: <TRow extends TTreeNavigationRow>(key: "ArrowUp" | "ArrowDown", anchorKey: string, flatRows: readonly TRow[]) => string | null;
26
+ //# sourceMappingURL=treeKeyboardNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treeKeyboardNavigation.d.ts","sourceRoot":"","sources":["../../src/composables/treeKeyboardNavigation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,6BAA6B,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAExC,eAAO,MAAM,6BAA6B,GACxC,YAAY,MAAM,EAClB,aAAa,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,WAW3C,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,IAAI,SAAS,kBAAkB,EAClE,UAAU,SAAS,IAAI,EAAE,YAG1B,CAAA;AAyCD,eAAO,MAAM,mCAAmC,GAAI,IAAI,SAAS,kBAAkB,EACjF,KAAK,WAAW,GAAG,YAAY,EAC/B,WAAW,MAAM,EACjB,UAAU,SAAS,IAAI,EAAE,KACxB,6BAA6B,GAAG,IAUlC,CAAA;AAuBD,eAAO,MAAM,mCAAmC,GAAI,IAAI,SAAS,kBAAkB,EACjF,KAAK,SAAS,GAAG,WAAW,EAC5B,WAAW,MAAM,EACjB,UAAU,SAAS,IAAI,EAAE,kBAoB1B,CAAA"}