@uzum-tech/ui 2.0.5 → 2.0.7

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 (136) hide show
  1. package/dist/index.js +1183 -573
  2. package/dist/index.mjs +1183 -573
  3. package/dist/index.prod.js +2 -2
  4. package/dist/index.prod.mjs +2 -2
  5. package/es/_internal/icons/DragHandleRound.mjs +16 -0
  6. package/es/_internal/icons/index.d.ts +1 -1
  7. package/es/_internal/icons/index.mjs +1 -1
  8. package/es/components.d.ts +99 -30
  9. package/es/data-table/src/DataTable.d.ts +24 -0
  10. package/es/data-table/src/DataTable.mjs +31 -0
  11. package/es/data-table/src/HeaderButton/FilterButton.d.ts +6 -0
  12. package/es/data-table/src/HeaderButton/FilterMenu.d.ts +6 -0
  13. package/es/data-table/src/TableParts/Body.d.ts +17 -9
  14. package/es/data-table/src/TableParts/Body.mjs +81 -274
  15. package/es/data-table/src/TableParts/BodyEmpty.d.ts +3 -0
  16. package/es/data-table/src/TableParts/BodyEmpty.mjs +22 -0
  17. package/es/data-table/src/TableParts/BodyRow.d.ts +3 -0
  18. package/es/data-table/src/TableParts/BodyRow.mjs +257 -0
  19. package/es/data-table/src/TableParts/BodySkeleton.mjs +5 -2
  20. package/es/data-table/src/TableParts/Header.d.ts +6 -0
  21. package/es/data-table/src/TableParts/Header.mjs +5 -1
  22. package/es/data-table/src/TableParts/VirtualListItemWrapper.d.ts +36 -0
  23. package/es/data-table/src/TableParts/VirtualListItemWrapper.mjs +46 -0
  24. package/es/data-table/src/interface.d.ts +161 -2
  25. package/es/data-table/src/styles/index.cssr.mjs +26 -3
  26. package/es/data-table/src/use-group-header.d.ts +3 -3
  27. package/es/data-table/src/use-row-drag.d.ts +2 -0
  28. package/es/data-table/src/use-row-drag.mjs +241 -0
  29. package/es/data-table/src/use-sorter.d.ts +4 -8
  30. package/es/data-table/src/use-sorter.mjs +14 -2
  31. package/es/data-table/src/use-table-data.d.ts +11 -14
  32. package/es/data-table/src/use-table-data.mjs +4 -2
  33. package/es/data-table/src/use-table-storage.d.ts +2 -2
  34. package/es/data-table/src/use-table-storage.mjs +1 -1
  35. package/es/data-table/src/utils/column-utils.d.ts +3 -2
  36. package/es/data-table/src/utils/column-utils.mjs +9 -1
  37. package/es/data-table/src/utils/csv-utils.mjs +1 -1
  38. package/es/data-table/src/utils/flatten-rows.d.ts +2 -0
  39. package/es/data-table/src/utils/flatten-rows.mjs +33 -0
  40. package/es/data-table/src/utils/index.d.ts +1 -0
  41. package/es/data-table/src/utils/index.mjs +1 -0
  42. package/es/data-table/src/utils/resize-orchestrator-utils.d.ts +3 -5
  43. package/es/data-table/src/utils/width-utils.d.ts +2 -2
  44. package/es/data-table/styles/light.d.ts +6 -0
  45. package/es/data-table/styles/light.mjs +3 -0
  46. package/es/mapping-card/src/MappingCard.d.ts +8 -0
  47. package/es/mapping-card/src/MappingCard.mjs +3 -1
  48. package/es/mapping-card/src/MappingCardParts/Header.mjs +31 -10
  49. package/es/mapping-card/src/interface.d.ts +8 -0
  50. package/es/mapping-card/src/interface.mjs +4 -0
  51. package/es/mapping-card/src/styles/index.cssr.mjs +8 -1
  52. package/es/tree/src/Tree.d.ts +49 -24
  53. package/es/tree/src/Tree.mjs +18 -13
  54. package/es/tree/src/TreeNodeCheckbox.d.ts +4 -0
  55. package/es/tree/src/TreeNodeSwitcher.mjs +24 -26
  56. package/es/tree/src/styles/index.cssr.mjs +11 -8
  57. package/es/tree/styles/light.d.ts +4 -0
  58. package/es/tree/styles/light.mjs +2 -0
  59. package/es/tree-select/index.d.ts +1 -1
  60. package/es/tree-select/src/TreeSelect.d.ts +43 -16
  61. package/es/tree-select/src/TreeSelect.mjs +65 -35
  62. package/es/tree-select/src/interface.d.ts +6 -1
  63. package/es/tree-select/src/scroll-option-end.d.ts +3 -0
  64. package/es/tree-select/src/scroll-option-end.mjs +28 -0
  65. package/es/tree-select/styles/light.d.ts +2 -0
  66. package/es/version.d.ts +1 -1
  67. package/es/version.mjs +1 -1
  68. package/lib/_internal/icons/DragHandleRound.js +10 -0
  69. package/lib/_internal/icons/index.d.ts +1 -1
  70. package/lib/_internal/icons/index.js +4 -4
  71. package/lib/components.d.ts +99 -30
  72. package/lib/data-table/src/DataTable.d.ts +24 -0
  73. package/lib/data-table/src/DataTable.js +19 -1
  74. package/lib/data-table/src/HeaderButton/FilterButton.d.ts +6 -0
  75. package/lib/data-table/src/HeaderButton/FilterMenu.d.ts +6 -0
  76. package/lib/data-table/src/TableParts/Body.d.ts +18 -10
  77. package/lib/data-table/src/TableParts/Body.js +65 -237
  78. package/lib/data-table/src/TableParts/BodyEmpty.d.ts +3 -0
  79. package/lib/data-table/src/TableParts/BodyEmpty.js +15 -0
  80. package/lib/data-table/src/TableParts/BodyRow.d.ts +3 -0
  81. package/lib/data-table/src/TableParts/BodyRow.js +210 -0
  82. package/lib/data-table/src/TableParts/BodySkeleton.js +8 -2
  83. package/lib/data-table/src/TableParts/Header.d.ts +6 -0
  84. package/lib/data-table/src/TableParts/Header.js +6 -0
  85. package/lib/data-table/src/TableParts/VirtualListItemWrapper.d.ts +36 -0
  86. package/lib/data-table/src/TableParts/VirtualListItemWrapper.js +29 -0
  87. package/lib/data-table/src/interface.d.ts +161 -2
  88. package/lib/data-table/src/styles/index.cssr.js +26 -3
  89. package/lib/data-table/src/use-group-header.d.ts +3 -3
  90. package/lib/data-table/src/use-row-drag.d.ts +2 -0
  91. package/lib/data-table/src/use-row-drag.js +270 -0
  92. package/lib/data-table/src/use-sorter.d.ts +4 -8
  93. package/lib/data-table/src/use-sorter.js +14 -0
  94. package/lib/data-table/src/use-table-data.d.ts +11 -14
  95. package/lib/data-table/src/use-table-data.js +5 -1
  96. package/lib/data-table/src/use-table-storage.d.ts +2 -2
  97. package/lib/data-table/src/use-table-storage.js +1 -0
  98. package/lib/data-table/src/utils/column-utils.d.ts +3 -2
  99. package/lib/data-table/src/utils/column-utils.js +11 -2
  100. package/lib/data-table/src/utils/csv-utils.js +1 -0
  101. package/lib/data-table/src/utils/flatten-rows.d.ts +2 -0
  102. package/lib/data-table/src/utils/flatten-rows.js +35 -0
  103. package/lib/data-table/src/utils/index.d.ts +1 -0
  104. package/lib/data-table/src/utils/index.js +1 -0
  105. package/lib/data-table/src/utils/resize-orchestrator-utils.d.ts +3 -5
  106. package/lib/data-table/src/utils/width-utils.d.ts +2 -2
  107. package/lib/data-table/styles/light.d.ts +6 -0
  108. package/lib/data-table/styles/light.js +3 -0
  109. package/lib/mapping-card/src/MappingCard.d.ts +8 -0
  110. package/lib/mapping-card/src/MappingCard.js +5 -1
  111. package/lib/mapping-card/src/MappingCardParts/Header.js +29 -5
  112. package/lib/mapping-card/src/interface.d.ts +8 -0
  113. package/lib/mapping-card/src/interface.js +4 -0
  114. package/lib/mapping-card/src/styles/index.cssr.js +8 -1
  115. package/lib/tree/src/Tree.d.ts +49 -24
  116. package/lib/tree/src/Tree.js +16 -15
  117. package/lib/tree/src/TreeNodeCheckbox.d.ts +4 -0
  118. package/lib/tree/src/TreeNodeSwitcher.js +11 -14
  119. package/lib/tree/src/styles/index.cssr.js +11 -8
  120. package/lib/tree/styles/light.d.ts +4 -0
  121. package/lib/tree/styles/light.js +2 -0
  122. package/lib/tree-select/index.d.ts +1 -1
  123. package/lib/tree-select/src/TreeSelect.d.ts +43 -16
  124. package/lib/tree-select/src/TreeSelect.js +66 -40
  125. package/lib/tree-select/src/interface.d.ts +6 -1
  126. package/lib/tree-select/src/scroll-option-end.d.ts +3 -0
  127. package/lib/tree-select/src/scroll-option-end.js +30 -0
  128. package/lib/tree-select/styles/light.d.ts +2 -0
  129. package/lib/version.d.ts +1 -1
  130. package/lib/version.js +1 -1
  131. package/package.json +2 -2
  132. package/web-types.json +21 -1
  133. package/es/_internal/icons/Switcher.mjs +0 -12
  134. package/lib/_internal/icons/Switcher.js +0 -10
  135. /package/es/_internal/icons/{Switcher.d.ts → DragHandleRound.d.ts} +0 -0
  136. /package/lib/_internal/icons/{Switcher.d.ts → DragHandleRound.d.ts} +0 -0
@@ -15,6 +15,8 @@ const interface_1 = require("../interface");
15
15
  const utils_1 = require("../utils");
16
16
  const SelectionMenu_1 = __importDefault(require("./SelectionMenu"));
17
17
  function renderTitle(column) {
18
+ if (column.type === 'draggable')
19
+ return null;
18
20
  return typeof column.title === 'function'
19
21
  ? column.title(column)
20
22
  : column.title;
@@ -147,6 +149,9 @@ exports.default = (0, vue_1.defineComponent)({
147
149
  const { ellipsis } = column;
148
150
  const ellipsisEnabled = (0, utils_1.isColumnEllipsisEnabled)(column);
149
151
  const createColumnVNode = () => {
152
+ if (column.type === 'draggable') {
153
+ return null;
154
+ }
150
155
  if (column.type === 'selection') {
151
156
  return column.multiple !== false ? ((0, vue_1.h)(vue_1.Fragment, null,
152
157
  (0, vue_1.h)(checkbox_1.UCheckbox, { key: currentPage, privateInsideTable: true, checked: allRowsChecked, indeterminate: someRowsChecked, disabled: headerCheckboxDisabled, onUpdateChecked: handleCheckboxUpdateChecked, size: sizeRef }),
@@ -187,6 +192,7 @@ exports.default = (0, vue_1.defineComponent)({
187
192
  column.className
188
193
  ], onClick: column.type !== 'selection'
189
194
  && column.type !== 'expand'
195
+ && column.type !== 'draggable'
190
196
  && !('children' in column)
191
197
  ? (e) => {
192
198
  handleColHeaderClick(e, column);
@@ -0,0 +1,36 @@
1
+ import type { PropType } from 'vue';
2
+ import type { ColItem } from '../use-group-header';
3
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ clsPrefix: {
5
+ type: StringConstructor;
6
+ required: true;
7
+ };
8
+ id: {
9
+ type: StringConstructor;
10
+ required: true;
11
+ };
12
+ cols: {
13
+ type: PropType<ColItem[]>;
14
+ required: true;
15
+ };
16
+ tableWidth: StringConstructor;
17
+ onMouseenter: PropType<(e: MouseEvent) => void>;
18
+ onMouseleave: PropType<(e: MouseEvent) => void>;
19
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
20
+ clsPrefix: {
21
+ type: StringConstructor;
22
+ required: true;
23
+ };
24
+ id: {
25
+ type: StringConstructor;
26
+ required: true;
27
+ };
28
+ cols: {
29
+ type: PropType<ColItem[]>;
30
+ required: true;
31
+ };
32
+ tableWidth: StringConstructor;
33
+ onMouseenter: PropType<(e: MouseEvent) => void>;
34
+ onMouseleave: PropType<(e: MouseEvent) => void>;
35
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
36
+ export default _default;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vue_1 = require("vue");
4
+ exports.default = (0, vue_1.defineComponent)({
5
+ name: 'VirtualListItemWrapper',
6
+ props: {
7
+ clsPrefix: {
8
+ type: String,
9
+ required: true
10
+ },
11
+ id: {
12
+ type: String,
13
+ required: true
14
+ },
15
+ cols: {
16
+ type: Array,
17
+ required: true
18
+ },
19
+ tableWidth: String,
20
+ onMouseenter: Function,
21
+ onMouseleave: Function
22
+ },
23
+ render() {
24
+ const { clsPrefix, id, cols, tableWidth, onMouseenter, onMouseleave } = this;
25
+ return ((0, vue_1.h)("table", { style: { tableLayout: 'fixed', width: tableWidth }, class: `${clsPrefix}-data-table-table`, onMouseenter: onMouseenter, onMouseleave: onMouseleave },
26
+ (0, vue_1.h)("colgroup", null, cols.map(col => ((0, vue_1.h)("col", { key: col.key, style: col.style })))),
27
+ (0, vue_1.h)("tbody", { "data-u-id": id, class: `${clsPrefix}-data-table-tbody` }, this.$slots)));
28
+ }
29
+ });
@@ -1,5 +1,5 @@
1
1
  import type { TreeMate, TreeNode } from 'treemate';
2
- import type { CSSProperties, ExtractPropTypes, HTMLAttributes, PropType, Ref, Slots, VNode, VNodeChild } from 'vue';
2
+ import type { ComputedRef, CSSProperties, ExtractPropTypes, HTMLAttributes, PropType, Ref, Slots, VNode, VNodeChild } from 'vue';
3
3
  import type { BaseLoadingExposedProps } from '../../_internal';
4
4
  import type { MergedTheme } from '../../_mixins';
5
5
  import type { ExtractPublicPropTypes, MaybeArray } from '../../_utils';
@@ -178,6 +178,9 @@ export declare const dataTableProps: {
178
178
  thButtonColorHover: string;
179
179
  thIconColor: string;
180
180
  thIconColorActive: string;
181
+ dropMarkColor: string;
182
+ dragGhostOpacity: string;
183
+ dragGhostFilter: string;
181
184
  borderColorModal: string;
182
185
  tdColorHoverModal: string;
183
186
  tdColorStripedModal: string;
@@ -1133,6 +1136,9 @@ export declare const dataTableProps: {
1133
1136
  thButtonColorHover: string;
1134
1137
  thIconColor: string;
1135
1138
  thIconColorActive: string;
1139
+ dropMarkColor: string;
1140
+ dragGhostOpacity: string;
1141
+ dragGhostFilter: string;
1136
1142
  borderColorModal: string;
1137
1143
  tdColorHoverModal: string;
1138
1144
  tdColorStripedModal: string;
@@ -2088,6 +2094,9 @@ export declare const dataTableProps: {
2088
2094
  thButtonColorHover: string;
2089
2095
  thIconColor: string;
2090
2096
  thIconColorActive: string;
2097
+ dropMarkColor: string;
2098
+ dragGhostOpacity: string;
2099
+ dragGhostFilter: string;
2091
2100
  borderColorModal: string;
2092
2101
  tdColorHoverModal: string;
2093
2102
  tdColorStripedModal: string;
@@ -3016,6 +3025,7 @@ export interface DataTableSlots {
3016
3025
  default?: () => VNode[];
3017
3026
  empty?: () => VNode[];
3018
3027
  loading?: () => VNode[];
3028
+ 'drag-handle'?: () => VNode[];
3019
3029
  }
3020
3030
  export type RowData = Record<string, any>;
3021
3031
  export type InternalRowData = Record<string, unknown>;
@@ -3134,8 +3144,123 @@ export interface TableExpandColumn<T = InternalRowData> extends Omit<TableSelect
3134
3144
  renderExpand: RenderExpand<T>;
3135
3145
  expandable?: Expandable<T>;
3136
3146
  }
3137
- export type TableColumn<T = InternalRowData> = TableColumnGroup<T> | TableBaseColumn<T> | TableSelectionColumn<T> | TableExpandColumn<T>;
3147
+ export interface RowDragEndOptions {
3148
+ index: number;
3149
+ oldOrder: number;
3150
+ newOrder: number;
3151
+ }
3152
+ export interface UseTableDataDeps {
3153
+ dataRelatedColsRef: ComputedRef<DataRelatedColumn[]>;
3154
+ }
3155
+ export interface UseSorterDeps {
3156
+ dataRelatedColsRef: ComputedRef<DataRelatedColumn[]>;
3157
+ filteredDataRef: ComputedRef<TmNode[]>;
3158
+ }
3159
+ export interface UseRowDragDeps {
3160
+ paginatedDataRef: ComputedRef<TmNode[]>;
3161
+ mergedCheckedRowKeySetRef: Ref<Set<RowKey>>;
3162
+ mergedClsPrefixRef: Ref<string>;
3163
+ }
3164
+ export interface UseRowDragReturn {
3165
+ draggableColumnRef: Ref<TableDraggableColumn | null>;
3166
+ draggingRowKeySetRef: Ref<Set<RowKey>>;
3167
+ droppingRowKeyRef: Ref<RowKey | null>;
3168
+ droppingPositionRef: Ref<RowDropPosition | null>;
3169
+ handleRowDragStart: (event: DragEvent, rowKey: RowKey) => void;
3170
+ handleRowDragOver: (event: DragEvent, rowKey: RowKey) => void;
3171
+ handleRowDragLeave: (event: DragEvent, rowKey: RowKey) => void;
3172
+ handleRowDragEnd: () => void;
3173
+ handleRowDrop: (event: DragEvent, rowKey: RowKey) => void;
3174
+ }
3175
+ export interface BodyRowRenderContext {
3176
+ mergedClsPrefix: string;
3177
+ cols: ColItem[];
3178
+ colCount: number;
3179
+ rowCount: number;
3180
+ hasChildren: boolean;
3181
+ childTriggerColIndex: number;
3182
+ indentStyle: {
3183
+ width: string;
3184
+ } | undefined;
3185
+ rowClassName: string | CreateRowClassName | undefined;
3186
+ rowProps: CreateRowProps | undefined;
3187
+ mergedSortState: SortState[];
3188
+ mergedExpandedRowKeySet: Set<RowKey>;
3189
+ fixedColumnLeftMap: Record<ColumnKey, {
3190
+ start: number;
3191
+ end: number;
3192
+ } | undefined>;
3193
+ fixedColumnRightMap: Record<ColumnKey, {
3194
+ start: number;
3195
+ end: number;
3196
+ } | undefined>;
3197
+ currentPage: number;
3198
+ loadingKeySet: Set<RowKey>;
3199
+ stickyExpandedRows: boolean;
3200
+ bodyWidthPx: string | undefined;
3201
+ renderExpand: RenderExpand | undefined;
3202
+ renderExpandIcon: RenderExpandIcon | undefined;
3203
+ renderCell: ((value: any, rowData: object, column: TableBaseColumn) => VNodeChild) | undefined;
3204
+ defaultEmptyValue: string | (() => VNodeChild) | undefined;
3205
+ mergedTheme: MergedTheme<DataTableTheme>;
3206
+ rowIndexToKey: Record<number, RowKey>;
3207
+ cordToPass: Record<number, number[]>;
3208
+ cordKey: Record<number, Record<number, RowKey[]>>;
3209
+ draggableColumn: TableDraggableColumn | null;
3210
+ droppingRowKey: RowKey | null;
3211
+ droppingPosition: RowDropPosition | null;
3212
+ draggingRowKeySet: Set<RowKey>;
3213
+ hoverKey: RowKey | null;
3214
+ dataTableSlots: Slots;
3215
+ setHoverKey: (key: RowKey) => void;
3216
+ handleCheckboxUpdateChecked: (tmNode: {
3217
+ key: RowKey;
3218
+ }, checked: boolean, shiftKey: boolean) => void;
3219
+ handleRadioUpdateChecked: (tmNode: {
3220
+ key: RowKey;
3221
+ }) => void;
3222
+ handleUpdateExpanded: (key: RowKey, tmNode: TmNode | null) => void;
3223
+ handleRowDragStart: (event: DragEvent, rowKey: RowKey) => void;
3224
+ handleRowDragOver: (event: DragEvent, rowKey: RowKey) => void;
3225
+ handleRowDragLeave: (event: DragEvent, rowKey: RowKey) => void;
3226
+ handleRowDragEnd: () => void;
3227
+ handleRowDrop: (event: DragEvent, rowKey: RowKey) => void;
3228
+ emitEdit: (value: any, row: any, key: any) => void;
3229
+ }
3230
+ export interface BodyEmptyDeps {
3231
+ clsPrefix: string;
3232
+ loading: boolean;
3233
+ bodyStyle: CSSProperties | undefined;
3234
+ dataTableSlots: Slots;
3235
+ mergedTheme: MergedTheme<DataTableTheme>;
3236
+ emptyProps: Partial<EmptyProps> | undefined;
3237
+ }
3238
+ export interface FixedShadowStyleProps {
3239
+ leftActiveFixedColKey: ColumnKey | null;
3240
+ leftActiveFixedChildrenColKeys: ColumnKey[];
3241
+ rightActiveFixedColKey: ColumnKey | null;
3242
+ rightActiveFixedChildrenColKeys: ColumnKey[];
3243
+ componentId: string;
3244
+ }
3245
+ export type RowDropPosition = 'before' | 'after';
3246
+ export type TableDraggableColumn<T = InternalRowData> = {
3247
+ type: 'draggable';
3248
+ key: ColumnKey;
3249
+ draggable?: (row: T) => boolean;
3250
+ onDragEnd?: (row: T, options: RowDragEndOptions) => void;
3251
+ sortByKey?: boolean;
3252
+ sorter?: never;
3253
+ filter?: never;
3254
+ filterOptions?: never;
3255
+ filterOptionValues?: never;
3256
+ filterOptionValue?: never;
3257
+ resizable?: never;
3258
+ colSpan?: never;
3259
+ rowSpan?: never;
3260
+ } & CommonColumnInfo<T>;
3261
+ export type TableColumn<T = InternalRowData> = TableColumnGroup<T> | TableBaseColumn<T> | TableSelectionColumn<T> | TableExpandColumn<T> | TableDraggableColumn<T>;
3138
3262
  export type TableColumns<T = InternalRowData> = Array<TableColumn<T>>;
3263
+ export type DataRelatedColumn<T = InternalRowData> = TableSelectionColumn<T> | TableBaseColumn<T> | TableExpandColumn<T> | TableDraggableColumn<T>;
3139
3264
  export type DataTableSelectionOptions<T = InternalRowData> = Array<DataTableSelectionOption | {
3140
3265
  label: string;
3141
3266
  key: string | number;
@@ -3226,6 +3351,15 @@ export interface DataTableInjection {
3226
3351
  defaultEmptyValueRef: Ref<string | (() => VNodeChild) | undefined>;
3227
3352
  emptyPropsRef: Ref<Partial<EmptyProps> | undefined>;
3228
3353
  handleEdit: (value: any, row: any, key: string) => void;
3354
+ draggableColumnRef: UseRowDragReturn['draggableColumnRef'];
3355
+ draggingRowKeySetRef: UseRowDragReturn['draggingRowKeySetRef'];
3356
+ droppingRowKeyRef: UseRowDragReturn['droppingRowKeyRef'];
3357
+ droppingPositionRef: UseRowDragReturn['droppingPositionRef'];
3358
+ handleRowDragStart: UseRowDragReturn['handleRowDragStart'];
3359
+ handleRowDragOver: UseRowDragReturn['handleRowDragOver'];
3360
+ handleRowDragLeave: UseRowDragReturn['handleRowDragLeave'];
3361
+ handleRowDragEnd: UseRowDragReturn['handleRowDragEnd'];
3362
+ handleRowDrop: UseRowDragReturn['handleRowDrop'];
3229
3363
  }
3230
3364
  export declare const dataTableInjectionKey: import("vue").InjectionKey<DataTableInjection>;
3231
3365
  export interface MainTableInjection {
@@ -3314,5 +3448,30 @@ export interface CsvOptionsType {
3314
3448
  fileName?: string;
3315
3449
  keepOriginalData?: boolean;
3316
3450
  }
3451
+ export interface NormalRowRenderInfo {
3452
+ striped: boolean;
3453
+ tmNode: TmNode;
3454
+ key: RowKey;
3455
+ index: number;
3456
+ }
3457
+ export interface WidthConstraintSignal {
3458
+ systemMinWidth: number | string;
3459
+ systemMaxWidth?: number | string;
3460
+ }
3461
+ export type RowRenderInfo = {
3462
+ isSummaryRow: true;
3463
+ key: RowKey;
3464
+ tmNode: {
3465
+ rawNode: SummaryRowData;
3466
+ disabled: boolean;
3467
+ };
3468
+ index: number;
3469
+ } | NormalRowRenderInfo | {
3470
+ isExpandedRow: true;
3471
+ tmNode: TmNode;
3472
+ key: RowKey;
3473
+ index: number;
3474
+ };
3475
+ export type ResizeReconcileReason = 'topology/capability' | 'mode' | 'environment' | 'width-state';
3317
3476
  export type DataTableProps = ExtractPublicPropTypes<typeof dataTableProps>;
3318
3477
  export type DataTableSetupProps = ExtractPropTypes<typeof dataTableProps>;
@@ -145,7 +145,11 @@ exports.default = (0, cssr_1.c)([(0, cssr_1.cB)('data-table', `
145
145
  margin: calc(var(--u-th-padding) * -1);
146
146
  padding: var(--u-th-padding);
147
147
  box-sizing: border-box;
148
- `), (0, cssr_1.cM)('disabled', null, [(0, cssr_1.cB)('data-table-td', 'color: var(--u-td-opacity-disabled);')]), (0, cssr_1.cM)('striped', 'background-color: var(--u-merged-td-color-striped);', [(0, cssr_1.cB)('data-table-td', 'background-color: var(--u-merged-td-color-striped);')]), (0, cssr_1.c)('&:hover', 'background-color: var(--u-merged-td-color-hover);', [(0, cssr_1.c)('>', [(0, cssr_1.cB)('data-table-td', 'background-color: var(--u-merged-td-color-hover);')])]), (0, cssr_1.c)('&:has(.u-data-table-td--editable:hover)', [(0, cssr_1.c)('>', [(0, cssr_1.cB)('data-table-td', 'background-color: var(--u-merged-td-color);', [(0, cssr_1.cM)('editable', [(0, cssr_1.c)('&:hover', 'background-color: var(--u-merged-td-color-hover);')])])])])]), (0, cssr_1.cB)('data-table-th', `
148
+ `), (0, cssr_1.cM)('disabled', null, [(0, cssr_1.cB)('data-table-td', 'color: var(--u-td-opacity-disabled);')]), (0, cssr_1.cM)('dragging', 'opacity: 0.4;'), (0, cssr_1.cM)('drop-before', null, [(0, cssr_1.c)('>', [(0, cssr_1.cB)('data-table-td', `
149
+ box-shadow: inset 0 2px 0 0 var(--u-drop-mark-color);
150
+ `)])]), (0, cssr_1.cM)('drop-after', null, [(0, cssr_1.c)('>', [(0, cssr_1.cB)('data-table-td', `
151
+ box-shadow: inset 0 -2px 0 0 var(--u-drop-mark-color);
152
+ `)])]), (0, cssr_1.cM)('striped', 'background-color: var(--u-merged-td-color-striped);', [(0, cssr_1.cB)('data-table-td', 'background-color: var(--u-merged-td-color-striped);')]), (0, cssr_1.c)('&:hover', 'background-color: var(--u-merged-td-color-hover);', [(0, cssr_1.c)('>', [(0, cssr_1.cB)('data-table-td', 'background-color: var(--u-merged-td-color-hover);')])]), (0, cssr_1.c)('&:has(.u-data-table-td--editable:hover)', [(0, cssr_1.c)('>', [(0, cssr_1.cB)('data-table-td', 'background-color: var(--u-merged-td-color);', [(0, cssr_1.cM)('editable', [(0, cssr_1.c)('&:hover', 'background-color: var(--u-merged-td-color-hover);')])])])])]), (0, cssr_1.cB)('data-table-th', `
149
153
  padding: var(--u-th-padding);
150
154
  position: relative;
151
155
  height: var(--u-th-height);
@@ -298,7 +302,22 @@ exports.default = (0, cssr_1.c)([(0, cssr_1.cB)('data-table', `
298
302
  `), (0, cssr_1.cM)('selection, expand', `
299
303
  text-align: center;
300
304
  line-height: 0;
301
- `), (0, cssr_1.cM)('editable', `
305
+ `), (0, cssr_1.cM)('draggable', `
306
+ text-align: center;
307
+ line-height: 0;
308
+ cursor: grab;
309
+ `, [(0, cssr_1.c)('&:active', `
310
+ cursor: grabbing;
311
+ `), (0, cssr_1.c)('&:hover', [(0, cssr_1.cE)('drag-handle', `
312
+ color: var(--u-th-icon-color-active);
313
+ `)]), (0, cssr_1.cE)('drag-handle', `
314
+ display: inline-flex;
315
+ align-items: center;
316
+ justify-content: center;
317
+ color: var(--u-th-icon-color);
318
+ line-height: 0;
319
+ pointer-events: none;
320
+ `)]), (0, cssr_1.cM)('editable', `
302
321
  cursor: pointer;
303
322
  position: relative;
304
323
  padding: 0;
@@ -317,7 +336,11 @@ exports.default = (0, cssr_1.c)([(0, cssr_1.cB)('data-table', `
317
336
  height: 100%;
318
337
  width: 100%;
319
338
  }
320
- `), fixedColumnStyle]), (0, cssr_1.cB)('data-table-empty', `
339
+ `), fixedColumnStyle]), (0, cssr_1.cB)('data-table-drag-ghost', `
340
+ opacity: var(--u-drag-ghost-opacity);
341
+ filter: var(--u-drag-ghost-filter);
342
+ pointer-events: none;
343
+ `), (0, cssr_1.cB)('data-table-empty', `
321
344
  box-sizing: border-box;
322
345
  padding: var(--u-empty-padding);
323
346
  flex-grow: 1;
@@ -1,5 +1,5 @@
1
1
  import type { ComputedRef, CSSProperties } from 'vue';
2
- import type { ColumnKey, DataTableSetupProps, TableBaseColumn, TableColumn, TableExpandColumn, TableSelectionColumn } from './interface';
2
+ import type { ColumnKey, DataRelatedColumn, DataTableSetupProps, TableColumn } from './interface';
3
3
  export interface RowItem {
4
4
  colSpan: number;
5
5
  rowSpan: number;
@@ -9,11 +9,11 @@ export interface RowItem {
9
9
  export interface ColItem {
10
10
  key: string | number;
11
11
  style: CSSProperties;
12
- column: TableSelectionColumn | TableExpandColumn | TableBaseColumn;
12
+ column: DataRelatedColumn;
13
13
  }
14
14
  export declare function useGroupHeader(props: DataTableSetupProps, getResizableWidth: (key: ColumnKey) => number | undefined): {
15
15
  rowsRef: ComputedRef<RowItem[][]>;
16
16
  colsRef: ComputedRef<ColItem[]>;
17
17
  hasEllipsisRef: ComputedRef<boolean>;
18
- dataRelatedColsRef: ComputedRef<Array<TableSelectionColumn | TableBaseColumn | TableExpandColumn>>;
18
+ dataRelatedColsRef: ComputedRef<DataRelatedColumn[]>;
19
19
  };
@@ -0,0 +1,2 @@
1
+ import type { DataTableSetupProps, UseRowDragDeps, UseRowDragReturn } from './interface';
2
+ export declare function useRowDrag(props: DataTableSetupProps, { paginatedDataRef, mergedCheckedRowKeySetRef, mergedClsPrefixRef }: UseRowDragDeps): UseRowDragReturn;
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useRowDrag = useRowDrag;
4
+ const vooks_1 = require("vooks");
5
+ const vue_1 = require("vue");
6
+ const DROP_HALF_DIVISOR = 2;
7
+ const DROP_STEP_BIAS = 1;
8
+ const FALLBACK_ORDER = 0;
9
+ const SINGLE_ROW_DRAG_SIZE = 1;
10
+ const DRAG_IMAGE_OFFSET = 0;
11
+ const GHOST_OFFSCREEN_TOP_PX = -10000;
12
+ const GHOST_CLEANUP_DELAY_MS = 0;
13
+ function useRowDrag(props, { paginatedDataRef, mergedCheckedRowKeySetRef, mergedClsPrefixRef }) {
14
+ const draggableColumnRef = (0, vooks_1.useMemo)(() => {
15
+ const findDraggableColumn = (columns) => {
16
+ for (const column of columns) {
17
+ if ('children' in column) {
18
+ const nested = findDraggableColumn(column.children);
19
+ if (nested)
20
+ return nested;
21
+ }
22
+ else if (column.type === 'draggable') {
23
+ return column;
24
+ }
25
+ }
26
+ return null;
27
+ };
28
+ return findDraggableColumn(props.columns);
29
+ });
30
+ const draggingRowKeysRef = (0, vue_1.ref)([]);
31
+ const draggingRowKeySetRef = (0, vue_1.computed)(() => new Set(draggingRowKeysRef.value));
32
+ const droppingRowKeyRef = (0, vue_1.ref)(null);
33
+ const droppingPositionRef = (0, vue_1.ref)(null);
34
+ function resetDropState() {
35
+ droppingRowKeyRef.value = null;
36
+ droppingPositionRef.value = null;
37
+ }
38
+ function isRowDraggable(rowData) {
39
+ const column = draggableColumnRef.value;
40
+ if (!column)
41
+ return false;
42
+ if (typeof column.draggable === 'function') {
43
+ return column.draggable(rowData);
44
+ }
45
+ return true;
46
+ }
47
+ function getRowByKey(targetKey) {
48
+ var _a;
49
+ return (_a = paginatedDataRef.value.find(node => node.key === targetKey)) === null || _a === void 0 ? void 0 : _a.rawNode;
50
+ }
51
+ function resolveDragKeys(initialRowKey) {
52
+ const checkedSet = mergedCheckedRowKeySetRef.value;
53
+ if (!checkedSet.has(initialRowKey))
54
+ return [initialRowKey];
55
+ const keysInOrder = [];
56
+ for (const node of paginatedDataRef.value) {
57
+ if (checkedSet.has(node.key) && isRowDraggable(node.rawNode)) {
58
+ keysInOrder.push(node.key);
59
+ }
60
+ }
61
+ return keysInOrder.length ? keysInOrder : [initialRowKey];
62
+ }
63
+ function applyDragImage(event) {
64
+ if (!event.dataTransfer
65
+ || typeof event.dataTransfer.setDragImage !== 'function') {
66
+ return;
67
+ }
68
+ const cellElement = event.currentTarget;
69
+ const rowElement = cellElement === null || cellElement === void 0 ? void 0 : cellElement.closest('tr');
70
+ if (!rowElement)
71
+ return;
72
+ const draggedSet = draggingRowKeySetRef.value;
73
+ if (draggedSet.size <= SINGLE_ROW_DRAG_SIZE) {
74
+ event.dataTransfer.setDragImage(rowElement, DRAG_IMAGE_OFFSET, DRAG_IMAGE_OFFSET);
75
+ return;
76
+ }
77
+ const tableElement = rowElement.closest('table');
78
+ if (!tableElement) {
79
+ event.dataTransfer.setDragImage(rowElement, DRAG_IMAGE_OFFSET, DRAG_IMAGE_OFFSET);
80
+ return;
81
+ }
82
+ const mergedClsPrefix = mergedClsPrefixRef.value;
83
+ const keyStringSet = new Set(Array.from(draggedSet).map(String));
84
+ const ghost = tableElement.cloneNode(true);
85
+ ghost.classList.add(`${mergedClsPrefix}-data-table-drag-ghost`);
86
+ ghost
87
+ .querySelectorAll('thead')
88
+ .forEach(headElement => headElement.remove());
89
+ ghost.querySelectorAll('tbody > tr').forEach((rowChild) => {
90
+ const childKey = rowChild.getAttribute('data-row-key');
91
+ if (childKey === null || !keyStringSet.has(childKey))
92
+ rowChild.remove();
93
+ });
94
+ ghost.style.position = 'fixed';
95
+ ghost.style.top = `${GHOST_OFFSCREEN_TOP_PX}px`;
96
+ ghost.style.left = '0';
97
+ ghost.style.pointerEvents = 'none';
98
+ ghost.style.width = `${tableElement.offsetWidth}px`;
99
+ const hostElement = tableElement.closest(`.${mergedClsPrefix}-data-table`) || document.body;
100
+ hostElement.appendChild(ghost);
101
+ event.dataTransfer.setDragImage(ghost, DRAG_IMAGE_OFFSET, DRAG_IMAGE_OFFSET);
102
+ setTimeout(() => {
103
+ if (ghost.parentNode)
104
+ ghost.parentNode.removeChild(ghost);
105
+ }, GHOST_CLEANUP_DELAY_MS);
106
+ }
107
+ function handleRowDragStart(event, rowKey) {
108
+ const row = getRowByKey(rowKey);
109
+ if (!row || !isRowDraggable(row)) {
110
+ event.preventDefault();
111
+ return;
112
+ }
113
+ draggingRowKeysRef.value = resolveDragKeys(rowKey);
114
+ if (event.dataTransfer) {
115
+ event.dataTransfer.effectAllowed = 'move';
116
+ event.dataTransfer.setData('text/plain', draggingRowKeysRef.value.map(String).join(','));
117
+ }
118
+ applyDragImage(event);
119
+ }
120
+ function handleRowDragOver(event, rowKey) {
121
+ if (!draggableColumnRef.value)
122
+ return;
123
+ if (!draggingRowKeysRef.value.length)
124
+ return;
125
+ event.preventDefault();
126
+ if (event.dataTransfer) {
127
+ event.dataTransfer.dropEffect = 'move';
128
+ }
129
+ if (draggingRowKeySetRef.value.has(rowKey)) {
130
+ resetDropState();
131
+ return;
132
+ }
133
+ const target = event.currentTarget;
134
+ if (!target)
135
+ return;
136
+ const rect = target.getBoundingClientRect();
137
+ const offset = event.clientY - rect.top;
138
+ const position = offset < rect.height / DROP_HALF_DIVISOR ? 'before' : 'after';
139
+ droppingRowKeyRef.value = rowKey;
140
+ droppingPositionRef.value = position;
141
+ }
142
+ function handleRowDragLeave(event, rowKey) {
143
+ if (droppingRowKeyRef.value !== rowKey)
144
+ return;
145
+ const related = event.relatedTarget;
146
+ const current = event.currentTarget;
147
+ if (related && current && current.contains(related)) {
148
+ return;
149
+ }
150
+ resetDropState();
151
+ }
152
+ function handleRowDragEnd() {
153
+ draggingRowKeysRef.value = [];
154
+ resetDropState();
155
+ }
156
+ function readOrder(row, orderKey) {
157
+ const value = row === null || row === void 0 ? void 0 : row[orderKey];
158
+ return typeof value === 'number' ? value : Number(value) || FALLBACK_ORDER;
159
+ }
160
+ function computeNewOrders(draggedKeys, dropIndex, position, orderKey) {
161
+ var _a, _b, _c;
162
+ const rows = paginatedDataRef.value;
163
+ if (!rows.length)
164
+ return null;
165
+ const draggedSet = new Set(draggedKeys);
166
+ const draggedIndexes = rows
167
+ .map((node, index) => (draggedSet.has(node.key) ? index : -1))
168
+ .filter(index => index >= 0);
169
+ if (!draggedIndexes.length)
170
+ return null;
171
+ const filtered = rows.filter(node => !draggedSet.has(node.key));
172
+ const targetIndex = position === 'before' ? dropIndex : dropIndex + 1;
173
+ const removedBefore = draggedIndexes.filter(index => index < targetIndex).length;
174
+ const insertAt = Math.max(0, targetIndex - removedBefore);
175
+ const prev = (_a = filtered[insertAt - 1]) === null || _a === void 0 ? void 0 : _a.rawNode;
176
+ const next = (_b = filtered[insertAt]) === null || _b === void 0 ? void 0 : _b.rawNode;
177
+ const draggedCount = draggedKeys.length;
178
+ const orders = [];
179
+ if (prev && next) {
180
+ const prevOrder = readOrder(prev, orderKey);
181
+ const nextOrder = readOrder(next, orderKey);
182
+ const step = (nextOrder - prevOrder) / (draggedCount + DROP_STEP_BIAS);
183
+ for (let index = 0; index < draggedCount; index++) {
184
+ orders.push(prevOrder + step * (index + DROP_STEP_BIAS));
185
+ }
186
+ }
187
+ else if (!prev && next) {
188
+ const nextOrder = readOrder(next, orderKey);
189
+ for (let index = 0; index < draggedCount; index++) {
190
+ orders.push(nextOrder - (draggedCount - index));
191
+ }
192
+ }
193
+ else if (prev && !next) {
194
+ const prevOrder = readOrder(prev, orderKey);
195
+ for (let index = 0; index < draggedCount; index++) {
196
+ orders.push(prevOrder + (index + DROP_STEP_BIAS));
197
+ }
198
+ }
199
+ else {
200
+ for (const key of draggedKeys) {
201
+ const row = (_c = rows.find(node => node.key === key)) === null || _c === void 0 ? void 0 : _c.rawNode;
202
+ orders.push(readOrder(row, orderKey));
203
+ }
204
+ }
205
+ return orders;
206
+ }
207
+ function handleRowDrop(event, rowKey) {
208
+ event.preventDefault();
209
+ const column = draggableColumnRef.value;
210
+ const draggedKeys = draggingRowKeysRef.value;
211
+ const position = droppingPositionRef.value;
212
+ if (!column
213
+ || !draggedKeys.length
214
+ || position === null
215
+ || draggingRowKeySetRef.value.has(rowKey)) {
216
+ handleRowDragEnd();
217
+ return;
218
+ }
219
+ const rows = paginatedDataRef.value;
220
+ const dropIndex = rows.findIndex(node => node.key === rowKey);
221
+ if (dropIndex < 0) {
222
+ handleRowDragEnd();
223
+ return;
224
+ }
225
+ const orderKey = column.key;
226
+ const newOrders = computeNewOrders(draggedKeys, dropIndex, position, orderKey);
227
+ const dispatchPlan = draggedKeys.map((key, index) => {
228
+ var _a;
229
+ const row = (_a = rows.find(node => node.key === key)) === null || _a === void 0 ? void 0 : _a.rawNode;
230
+ return row
231
+ ? {
232
+ row,
233
+ oldOrder: readOrder(row, orderKey),
234
+ newOrder: newOrders ? newOrders[index] : readOrder(row, orderKey)
235
+ }
236
+ : null;
237
+ });
238
+ const targetIndex = position === 'before' ? dropIndex : dropIndex + 1;
239
+ const draggedSet = draggingRowKeySetRef.value;
240
+ const draggedIndexes = rows
241
+ .map((node, index) => (draggedSet.has(node.key) ? index : -1))
242
+ .filter(index => index >= 0);
243
+ const removedBefore = draggedIndexes.filter(index => index < targetIndex).length;
244
+ const baseIndex = Math.max(0, targetIndex - removedBefore);
245
+ handleRowDragEnd();
246
+ if (!newOrders)
247
+ return;
248
+ dispatchPlan.forEach((entry, index) => {
249
+ var _a;
250
+ if (!entry)
251
+ return;
252
+ (_a = column.onDragEnd) === null || _a === void 0 ? void 0 : _a.call(column, entry.row, {
253
+ index: baseIndex + index,
254
+ oldOrder: entry.oldOrder,
255
+ newOrder: entry.newOrder
256
+ });
257
+ });
258
+ }
259
+ return {
260
+ draggableColumnRef,
261
+ draggingRowKeySetRef,
262
+ droppingRowKeyRef,
263
+ droppingPositionRef,
264
+ handleRowDragStart,
265
+ handleRowDragOver,
266
+ handleRowDragLeave,
267
+ handleRowDragEnd,
268
+ handleRowDrop
269
+ };
270
+ }
@@ -1,13 +1,9 @@
1
- import type { ComputedRef } from 'vue';
2
- import type { ColumnKey, CompareFn, DataTableSetupProps, InternalRowData, SortOrder, SortState, TableBaseColumn, TableExpandColumn, TableSelectionColumn, TmNode } from './interface';
3
- export declare function useSorter(props: DataTableSetupProps, { dataRelatedColsRef, filteredDataRef }: {
4
- dataRelatedColsRef: ComputedRef<Array<TableSelectionColumn | TableBaseColumn | TableExpandColumn>>;
5
- filteredDataRef: ComputedRef<TmNode[]>;
6
- }): {
1
+ import type { ColumnKey, CompareFn, DataTableSetupProps, InternalRowData, SortOrder, SortState, TmNode, UseSorterDeps } from './interface';
2
+ export declare function useSorter(props: DataTableSetupProps, { dataRelatedColsRef, filteredDataRef }: UseSorterDeps): {
7
3
  clearSorter: () => void;
8
4
  sort: (columnKey: ColumnKey, order?: SortOrder) => void;
9
- sortedDataRef: ComputedRef<TmNode[]>;
10
- mergedSortStateRef: ComputedRef<{
5
+ sortedDataRef: import("vue").ComputedRef<TmNode[]>;
6
+ mergedSortStateRef: import("vue").ComputedRef<{
11
7
  columnKey: ColumnKey;
12
8
  order: SortOrder;
13
9
  sorter: boolean | "default" | CompareFn<InternalRowData> | {