@revolist/revogrid 4.23.7 → 4.23.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{cell-renderer-Dcz022q7.js → cell-renderer-Dl9kKeKp.js} +1 -1
- package/dist/cjs/{column.drag.plugin-yUSx3qoN.js → column.drag.plugin-BRraLvz3.js} +34 -5
- package/dist/cjs/{column.service-C1Qvcf5l.js → column.service-BNWNiJW3.js} +62 -23
- package/dist/cjs/{header-cell-renderer-vVr4IWNV.js → header-cell-renderer-DyjOxArm.js} +1 -1
- package/dist/cjs/index.cjs.js +5 -4
- package/dist/cjs/revo-grid.cjs.entry.js +5 -5
- package/dist/cjs/revogr-attribution_7.cjs.entry.js +40 -4
- package/dist/cjs/revogr-data_4.cjs.entry.js +3 -3
- package/dist/cjs/revogr-filter-panel.cjs.entry.js +2 -2
- package/dist/collection/components/data/column.service.js +62 -23
- package/dist/collection/components/overlay/clipboard.utils.js +26 -0
- package/dist/collection/components/overlay/revogr-overlay-selection.js +27 -7
- package/dist/collection/components/revoGrid/revo-grid.js +14 -7
- package/dist/collection/plugins/filter/filter.panel.js +2 -2
- package/dist/collection/plugins/filter/filter.plugin.js +1 -1
- package/dist/collection/plugins/moveColumn/column.drag.plugin.js +30 -2
- package/dist/collection/serve/controller.js +1 -0
- package/dist/esm/{cell-renderer-BtN-NGCk.js → cell-renderer-CdF2Jm3B.js} +1 -1
- package/dist/esm/{column.drag.plugin-Cg2U-91C.js → column.drag.plugin-V9DDE3mU.js} +34 -6
- package/dist/esm/{column.service-CC_SD8W3.js → column.service-C6hByxPy.js} +62 -23
- package/dist/esm/{header-cell-renderer-B-LX2sgu.js → header-cell-renderer-BMmXRsd_.js} +1 -1
- package/dist/esm/index.js +5 -5
- package/dist/esm/revo-grid.entry.js +5 -5
- package/dist/esm/revogr-attribution_7.entry.js +40 -4
- package/dist/esm/revogr-data_4.entry.js +3 -3
- package/dist/esm/revogr-filter-panel.entry.js +2 -2
- package/dist/revo-grid/{cell-renderer-BtN-NGCk.js → cell-renderer-CdF2Jm3B.js} +1 -1
- package/dist/revo-grid/{column.drag.plugin-Cg2U-91C.js → column.drag.plugin-V9DDE3mU.js} +34 -6
- package/dist/revo-grid/{column.service-CC_SD8W3.js → column.service-C6hByxPy.js} +62 -23
- package/dist/revo-grid/{header-cell-renderer-B-LX2sgu.js → header-cell-renderer-BMmXRsd_.js} +1 -1
- package/dist/revo-grid/index.esm.js +5 -5
- package/dist/revo-grid/revo-grid.entry.js +5 -5
- package/dist/revo-grid/revogr-attribution_7.entry.js +40 -4
- package/dist/revo-grid/revogr-data_4.entry.js +3 -3
- package/dist/revo-grid/revogr-filter-panel.entry.js +2 -2
- package/dist/types/components/data/column.service.d.ts +10 -1
- package/dist/types/components/overlay/clipboard.utils.d.ts +3 -0
- package/dist/types/components/overlay/revogr-overlay-selection.d.ts +4 -3
- package/dist/types/components/revoGrid/revo-grid.d.ts +4 -4
- package/dist/types/components.d.ts +14 -14
- package/dist/types/plugins/filter/filter.plugin.d.ts +1 -0
- package/dist/types/plugins/filter/filter.types.d.ts +1 -0
- package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +4 -0
- package/dist/types/types/interfaces.d.ts +8 -0
- package/hydrate/index.js +136 -33
- package/hydrate/index.mjs +136 -33
- package/package.json +1 -1
- package/readme.md +20 -1
- package/standalone/column.service.js +1 -1
- package/standalone/index.js +1 -1
- package/standalone/revo-grid.js +1 -1
- package/standalone/revogr-filter-panel.js +1 -1
- package/standalone/revogr-overlay-selection2.js +1 -1
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* It contains typing information for all components that exist in this project.
|
|
6
6
|
*/
|
|
7
7
|
import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
|
|
8
|
-
import { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PluginProviders, PositionItem, ProvidersColumns, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
|
|
8
|
+
import { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ClipboardConfig, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PluginProviders, PositionItem, ProvidersColumns, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
|
|
9
9
|
import { GridPlugin } from "./plugins/base.plugin";
|
|
10
10
|
import { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
|
|
11
11
|
import { ColumnFilterConfig, FilterCaptions, FilterCollectionItem, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
|
|
@@ -21,7 +21,7 @@ import { ResizeProps } from "./components/header/resizable.directive";
|
|
|
21
21
|
import { HeaderRenderProps } from "./components/header/header-renderer";
|
|
22
22
|
import { HeaderGroupRendererProps } from "./components/header/header-group-renderer";
|
|
23
23
|
import { EventData } from "./components/overlay/selection.utils";
|
|
24
|
-
export { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PluginProviders, PositionItem, ProvidersColumns, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
|
|
24
|
+
export { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ClipboardConfig, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PluginProviders, PositionItem, ProvidersColumns, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
|
|
25
25
|
export { GridPlugin } from "./plugins/base.plugin";
|
|
26
26
|
export { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
|
|
27
27
|
export { ColumnFilterConfig, FilterCaptions, FilterCollectionItem, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
|
|
@@ -225,7 +225,7 @@ export namespace Components {
|
|
|
225
225
|
*/
|
|
226
226
|
"plugins": GridPlugin[];
|
|
227
227
|
/**
|
|
228
|
-
* When true, user can range
|
|
228
|
+
* When true, user can select a cell range. Required for range-based clipboard fill.
|
|
229
229
|
* @default false
|
|
230
230
|
*/
|
|
231
231
|
"range": boolean;
|
|
@@ -344,10 +344,10 @@ export namespace Components {
|
|
|
344
344
|
*/
|
|
345
345
|
"updateColumns": (cols: ColumnRegular[]) => Promise<void>;
|
|
346
346
|
/**
|
|
347
|
-
* When true enable clipboard.
|
|
347
|
+
* When true enable clipboard. Can be boolean or clipboard config.
|
|
348
348
|
* @default true
|
|
349
349
|
*/
|
|
350
|
-
"useClipboard": boolean;
|
|
350
|
+
"useClipboard": boolean | ClipboardConfig;
|
|
351
351
|
}
|
|
352
352
|
interface RevogrAttribution {
|
|
353
353
|
}
|
|
@@ -685,9 +685,9 @@ export namespace Components {
|
|
|
685
685
|
*/
|
|
686
686
|
"selectionStore": Observable<SelectionStoreState>;
|
|
687
687
|
/**
|
|
688
|
-
* Enable revogr-clipboard component (read more in revogr-clipboard component). Allows copy/paste.
|
|
688
|
+
* Enable revogr-clipboard component (read more in revogr-clipboard component). Allows copy/paste. Can be boolean or clipboard config.
|
|
689
689
|
*/
|
|
690
|
-
"useClipboard": boolean;
|
|
690
|
+
"useClipboard": boolean | ClipboardConfig;
|
|
691
691
|
}
|
|
692
692
|
/**
|
|
693
693
|
* Row headers component
|
|
@@ -1687,7 +1687,7 @@ declare namespace LocalJSX {
|
|
|
1687
1687
|
*/
|
|
1688
1688
|
"plugins"?: GridPlugin[];
|
|
1689
1689
|
/**
|
|
1690
|
-
* When true, user can range
|
|
1690
|
+
* When true, user can select a cell range. Required for range-based clipboard fill.
|
|
1691
1691
|
* @default false
|
|
1692
1692
|
*/
|
|
1693
1693
|
"range"?: boolean;
|
|
@@ -1758,10 +1758,10 @@ declare namespace LocalJSX {
|
|
|
1758
1758
|
*/
|
|
1759
1759
|
"trimmedRows"?: Record<number, boolean>;
|
|
1760
1760
|
/**
|
|
1761
|
-
* When true enable clipboard.
|
|
1761
|
+
* When true enable clipboard. Can be boolean or clipboard config.
|
|
1762
1762
|
* @default true
|
|
1763
1763
|
*/
|
|
1764
|
-
"useClipboard"?: boolean;
|
|
1764
|
+
"useClipboard"?: boolean | ClipboardConfig;
|
|
1765
1765
|
}
|
|
1766
1766
|
interface RevogrAttribution {
|
|
1767
1767
|
}
|
|
@@ -2343,9 +2343,9 @@ declare namespace LocalJSX {
|
|
|
2343
2343
|
*/
|
|
2344
2344
|
"selectionStore": Observable<SelectionStoreState>;
|
|
2345
2345
|
/**
|
|
2346
|
-
* Enable revogr-clipboard component (read more in revogr-clipboard component). Allows copy/paste.
|
|
2346
|
+
* Enable revogr-clipboard component (read more in revogr-clipboard component). Allows copy/paste. Can be boolean or clipboard config.
|
|
2347
2347
|
*/
|
|
2348
|
-
"useClipboard"?: boolean;
|
|
2348
|
+
"useClipboard"?: boolean | ClipboardConfig;
|
|
2349
2349
|
}
|
|
2350
2350
|
/**
|
|
2351
2351
|
* Row headers component
|
|
@@ -2498,7 +2498,7 @@ declare namespace LocalJSX {
|
|
|
2498
2498
|
"resize": boolean;
|
|
2499
2499
|
"noHorizontalScrollTransfer": boolean;
|
|
2500
2500
|
"canFocus": boolean;
|
|
2501
|
-
"useClipboard": boolean;
|
|
2501
|
+
"useClipboard": boolean | ClipboardConfig;
|
|
2502
2502
|
"applyOnClose": boolean;
|
|
2503
2503
|
"theme": Theme;
|
|
2504
2504
|
"rowClass": string;
|
|
@@ -2552,7 +2552,7 @@ declare namespace LocalJSX {
|
|
|
2552
2552
|
"readonly": boolean;
|
|
2553
2553
|
"range": boolean;
|
|
2554
2554
|
"canDrag": boolean;
|
|
2555
|
-
"useClipboard": boolean;
|
|
2555
|
+
"useClipboard": boolean | ClipboardConfig;
|
|
2556
2556
|
"applyChangesOnClose": boolean;
|
|
2557
2557
|
"additionalData": string;
|
|
2558
2558
|
"isMobileDevice": boolean;
|
|
@@ -47,6 +47,7 @@ export declare class FilterPlugin extends BasePlugin {
|
|
|
47
47
|
filterFunctionsIndexedByType: Record<string, LogicFunction>;
|
|
48
48
|
filterProp: string;
|
|
49
49
|
extraHyperContent?: (data: ShowData) => VNode | VNode[];
|
|
50
|
+
extraBottomHyperContent?: (data: ShowData) => VNode | VNode[];
|
|
50
51
|
constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders, config?: ColumnFilterConfig | undefined);
|
|
51
52
|
beforeshow(_: ShowData): void;
|
|
52
53
|
extraContent(): any;
|
|
@@ -53,8 +53,11 @@ declare global {
|
|
|
53
53
|
}
|
|
54
54
|
export declare class ColumnMovePlugin extends BasePlugin {
|
|
55
55
|
protected moveFunc: import("lodash").DebouncedFunc<(e: MouseEvent) => void>;
|
|
56
|
+
protected preventHeaderClickAfterDrag: (event: Event) => void;
|
|
56
57
|
protected staticDragData: StaticData | null;
|
|
57
58
|
protected dragData: ColumnDragEventData | null;
|
|
59
|
+
protected columnDragMoved: boolean;
|
|
60
|
+
protected preventNextHeaderClick: boolean;
|
|
58
61
|
readonly orderUi: ColumnOrderHandler;
|
|
59
62
|
readonly localSubscriptions: LocalSubscriptions;
|
|
60
63
|
constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders);
|
|
@@ -73,4 +76,5 @@ export declare class ColumnMovePlugin extends BasePlugin {
|
|
|
73
76
|
protected getDimension(type: MultiDimensionType): DimensionSettingsState;
|
|
74
77
|
}
|
|
75
78
|
export declare function getLeftRelative(absoluteX: number, gridPos: number, offset: number): number;
|
|
79
|
+
export declare function getColumnDragPosition(targetItem: PositionItem, startItem: PositionItem, renderOffset: number, scrollOffset: number): number;
|
|
76
80
|
export {};
|
|
@@ -788,6 +788,14 @@ export interface RangeClipboardCopyEventProps<T = any> extends AllDimensionType
|
|
|
788
788
|
range: RangeArea;
|
|
789
789
|
mapping: OldNewRangeMapping;
|
|
790
790
|
}
|
|
791
|
+
/** Clipboard behavior configuration. */
|
|
792
|
+
export interface ClipboardConfig {
|
|
793
|
+
/**
|
|
794
|
+
* When true, pasting a single clipboard cell fills the selected range.
|
|
795
|
+
* Requires range selection to be enabled on the grid.
|
|
796
|
+
*/
|
|
797
|
+
rangeFill?: boolean;
|
|
798
|
+
}
|
|
791
799
|
export interface AdditionalData {
|
|
792
800
|
/**
|
|
793
801
|
* Additional data for grid and plugins
|
package/hydrate/index.js
CHANGED
|
@@ -7725,7 +7725,7 @@ class FilterPanel {
|
|
|
7725
7725
|
} }));
|
|
7726
7726
|
}
|
|
7727
7727
|
render() {
|
|
7728
|
-
var _a, _b, _c;
|
|
7728
|
+
var _a, _b, _c, _d, _e;
|
|
7729
7729
|
if (!this.changes) {
|
|
7730
7730
|
return hAsync(Host, { style: { display: 'none' } });
|
|
7731
7731
|
}
|
|
@@ -7742,7 +7742,7 @@ class FilterPanel {
|
|
|
7742
7742
|
hAsync("label", null, capts.title),
|
|
7743
7743
|
hAsync("div", { class: "filter-holder" }, this.getFilterItemsList()),
|
|
7744
7744
|
hAsync("div", { class: "add-filter" }, hAsync("select", { id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType)))
|
|
7745
|
-
]), hAsync("slot", null), hAsync("div", { class: "filter-actions" }, this.disableDynamicFiltering && [
|
|
7745
|
+
]), hAsync("slot", null), ((_e = (_d = this.changes).extraBottomContent) === null || _e === void 0 ? void 0 : _e.call(_d, this.changes)) || '', hAsync("div", { class: "filter-actions" }, this.disableDynamicFiltering && [
|
|
7746
7746
|
hAsync("button", { id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
|
|
7747
7747
|
hAsync("button", { id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
|
|
7748
7748
|
], !this.disableDynamicFiltering && [
|
|
@@ -13048,43 +13048,82 @@ class ColumnService {
|
|
|
13048
13048
|
mapping,
|
|
13049
13049
|
};
|
|
13050
13050
|
}
|
|
13051
|
-
getTransformedDataToApply(start, data) {
|
|
13051
|
+
getTransformedDataToApply({ start, data, targetRange, }) {
|
|
13052
13052
|
const changed = {};
|
|
13053
13053
|
const copyRowLength = data.length;
|
|
13054
|
+
if (!copyRowLength) {
|
|
13055
|
+
return {
|
|
13056
|
+
changed,
|
|
13057
|
+
range: null,
|
|
13058
|
+
};
|
|
13059
|
+
}
|
|
13054
13060
|
const colLength = this.columns.length;
|
|
13055
13061
|
const rowLength = this.dataStore.get('items').length;
|
|
13062
|
+
const bounds = this.getDataApplyBounds(start, targetRange, copyRowLength, rowLength, colLength);
|
|
13063
|
+
if (!bounds) {
|
|
13064
|
+
return {
|
|
13065
|
+
changed,
|
|
13066
|
+
range: null,
|
|
13067
|
+
};
|
|
13068
|
+
}
|
|
13069
|
+
const { startRow, startCol, endRow } = bounds;
|
|
13070
|
+
let maxCol = startCol - 1;
|
|
13071
|
+
let lastRow = startRow - 1;
|
|
13056
13072
|
// rows
|
|
13057
|
-
let rowIndex =
|
|
13058
|
-
let maxCol = 0;
|
|
13059
|
-
for (let i = 0; rowIndex < rowLength && i < copyRowLength; rowIndex++, i++) {
|
|
13073
|
+
for (let rowIndex = startRow, i = 0; rowIndex <= endRow; rowIndex++, i++) {
|
|
13060
13074
|
// copy original data link
|
|
13061
13075
|
const copyRow = data[i % copyRowLength];
|
|
13062
13076
|
const copyColLength = (copyRow === null || copyRow === void 0 ? void 0 : copyRow.length) || 0;
|
|
13063
|
-
|
|
13064
|
-
|
|
13065
|
-
for (let j = 0; colIndex < colLength && j < copyColLength; colIndex++, j++) {
|
|
13066
|
-
const p = this.columns[colIndex].prop;
|
|
13067
|
-
const currentCol = j % colLength;
|
|
13068
|
-
/** if can write */
|
|
13069
|
-
if (!this.isReadOnly(rowIndex, colIndex)) {
|
|
13070
|
-
/** to show before save */
|
|
13071
|
-
if (!changed[rowIndex]) {
|
|
13072
|
-
changed[rowIndex] = {};
|
|
13073
|
-
}
|
|
13074
|
-
changed[rowIndex][p] = copyRow[currentCol];
|
|
13075
|
-
}
|
|
13077
|
+
if (!copyColLength) {
|
|
13078
|
+
continue;
|
|
13076
13079
|
}
|
|
13077
|
-
maxCol = Math.max(maxCol,
|
|
13080
|
+
maxCol = Math.max(maxCol, this.applyClipboardRow(changed, {
|
|
13081
|
+
bounds,
|
|
13082
|
+
copyColLength,
|
|
13083
|
+
copyRow,
|
|
13084
|
+
rowIndex,
|
|
13085
|
+
start,
|
|
13086
|
+
targetRange,
|
|
13087
|
+
}));
|
|
13088
|
+
lastRow = rowIndex;
|
|
13078
13089
|
}
|
|
13079
|
-
const range = getRange(start, {
|
|
13080
|
-
y: rowIndex - 1,
|
|
13081
|
-
x: maxCol,
|
|
13082
|
-
});
|
|
13083
13090
|
return {
|
|
13084
13091
|
changed,
|
|
13085
|
-
range,
|
|
13092
|
+
range: this.getAppliedRange(bounds, lastRow, maxCol),
|
|
13086
13093
|
};
|
|
13087
13094
|
}
|
|
13095
|
+
getDataApplyBounds(start, targetRange, copyRowLength, rowLength, colLength) {
|
|
13096
|
+
var _a, _b, _c;
|
|
13097
|
+
const startRow = (_a = targetRange === null || targetRange === void 0 ? void 0 : targetRange.y) !== null && _a !== void 0 ? _a : start.y;
|
|
13098
|
+
const startCol = (_b = targetRange === null || targetRange === void 0 ? void 0 : targetRange.x) !== null && _b !== void 0 ? _b : start.x;
|
|
13099
|
+
const endRow = Math.min(rowLength - 1, (_c = targetRange === null || targetRange === void 0 ? void 0 : targetRange.y1) !== null && _c !== void 0 ? _c : start.y + copyRowLength - 1);
|
|
13100
|
+
if (endRow < startRow || startCol >= colLength) {
|
|
13101
|
+
return null;
|
|
13102
|
+
}
|
|
13103
|
+
return { startRow, startCol, endRow, colLength };
|
|
13104
|
+
}
|
|
13105
|
+
applyClipboardRow(changed, { bounds, copyColLength, copyRow, rowIndex, start, targetRange, }) {
|
|
13106
|
+
var _a;
|
|
13107
|
+
const endCol = Math.min(bounds.colLength - 1, (_a = targetRange === null || targetRange === void 0 ? void 0 : targetRange.x1) !== null && _a !== void 0 ? _a : start.x + copyColLength - 1);
|
|
13108
|
+
for (let colIndex = bounds.startCol, j = 0; colIndex <= endCol; colIndex++, j++) {
|
|
13109
|
+
if (this.isReadOnly(rowIndex, colIndex)) {
|
|
13110
|
+
continue;
|
|
13111
|
+
}
|
|
13112
|
+
const prop = this.columns[colIndex].prop;
|
|
13113
|
+
changed[rowIndex] = changed[rowIndex] || {};
|
|
13114
|
+
changed[rowIndex][prop] = copyRow[j % copyColLength];
|
|
13115
|
+
}
|
|
13116
|
+
return endCol;
|
|
13117
|
+
}
|
|
13118
|
+
getAppliedRange({ startRow, startCol }, lastRow, maxCol) {
|
|
13119
|
+
if (lastRow < startRow || maxCol < startCol) {
|
|
13120
|
+
return null;
|
|
13121
|
+
}
|
|
13122
|
+
return getRange({ x: startCol, y: startRow }, {
|
|
13123
|
+
y: lastRow,
|
|
13124
|
+
x: maxCol,
|
|
13125
|
+
});
|
|
13126
|
+
}
|
|
13088
13127
|
getRangeStaticData(d, value) {
|
|
13089
13128
|
const changed = {};
|
|
13090
13129
|
// rows
|
|
@@ -13751,6 +13790,30 @@ class AutoFillService {
|
|
|
13751
13790
|
}
|
|
13752
13791
|
}
|
|
13753
13792
|
|
|
13793
|
+
function getRangeFillClipboardData(data, useClipboard) {
|
|
13794
|
+
var _a;
|
|
13795
|
+
if (!isClipboardRangeFillEnabled(useClipboard)) {
|
|
13796
|
+
return null;
|
|
13797
|
+
}
|
|
13798
|
+
const normalized = trimTrailingEmptyClipboardRows(data);
|
|
13799
|
+
return normalized.length === 1 && ((_a = normalized[0]) === null || _a === void 0 ? void 0 : _a.length) === 1
|
|
13800
|
+
? normalized
|
|
13801
|
+
: null;
|
|
13802
|
+
}
|
|
13803
|
+
function isClipboardRangeFillEnabled(useClipboard) {
|
|
13804
|
+
return (typeof useClipboard === 'object' && useClipboard.rangeFill === true);
|
|
13805
|
+
}
|
|
13806
|
+
function trimTrailingEmptyClipboardRows(data) {
|
|
13807
|
+
const rows = [...data];
|
|
13808
|
+
while (rows.length > 1 && isEmptyClipboardRow(rows[rows.length - 1])) {
|
|
13809
|
+
rows.pop();
|
|
13810
|
+
}
|
|
13811
|
+
return rows;
|
|
13812
|
+
}
|
|
13813
|
+
function isEmptyClipboardRow(row) {
|
|
13814
|
+
return !row || row.every(cell => cell === '');
|
|
13815
|
+
}
|
|
13816
|
+
|
|
13754
13817
|
const revogrOverlayStyleCss = () => `revogr-overlay-selection{display:block;position:relative;width:100%}revogr-overlay-selection .autofill-handle{position:absolute;width:14px;height:14px;margin-left:-13px;margin-top:-13px;z-index:10;cursor:crosshair}revogr-overlay-selection .autofill-handle::before{content:"";position:absolute;right:0;bottom:0;width:10px;height:10px;background:#0d63e8;border:1px solid white;box-sizing:border-box}revogr-overlay-selection.mobile .autofill-handle{position:absolute;width:30px;height:30px;margin-left:-29px;margin-top:-29px;z-index:10;cursor:crosshair}revogr-overlay-selection.mobile .autofill-handle::before{content:"";position:absolute;right:0;bottom:0;width:12px;height:12px;background:#0d63e8;border:1px solid white;box-sizing:border-box}revogr-overlay-selection .selection-border-range{position:absolute;pointer-events:none;z-index:9;box-shadow:-1px 0 0 #0d63e8 inset, 1px 0 0 #0d63e8 inset, 0 -1px 0 #0d63e8 inset, 0 1px 0 #0d63e8 inset}revogr-overlay-selection .selection-border-range .range-handlers{height:100%;background-color:transparent;width:75%;max-width:50px;min-width:20px;left:50%;transform:translateX(-50%);position:absolute}revogr-overlay-selection .selection-border-range .range-handlers>span{pointer-events:auto;height:20px;width:20px;position:absolute;left:50%;transform:translateX(-50%)}revogr-overlay-selection .selection-border-range .range-handlers>span:before,revogr-overlay-selection .selection-border-range .range-handlers>span:after{position:absolute;border-radius:5px;width:15px;height:5px;left:50%;transform:translateX(-50%);background-color:rgba(0, 0, 0, 0.2)}revogr-overlay-selection .selection-border-range .range-handlers>span:first-child{top:-7px}revogr-overlay-selection .selection-border-range .range-handlers>span:first-child:before{content:"";top:0}revogr-overlay-selection .selection-border-range .range-handlers>span:last-child{bottom:-7px}revogr-overlay-selection .selection-border-range .range-handlers>span:last-child:after{content:"";bottom:0}revogr-overlay-selection revogr-edit{z-index:10}`;
|
|
13755
13818
|
|
|
13756
13819
|
/**
|
|
@@ -14001,9 +14064,9 @@ class OverlaySelection {
|
|
|
14001
14064
|
nodes.push(hAsync("revogr-order-editor", { ref: e => (this.orderEditor = e), dataStore: this.dataStore, dimensionRow: this.dimensionRow, dimensionCol: this.dimensionCol, parent: this.element, rowType: this.types.rowType, onRowdragstartinit: e => this.rowDragStart(e) }));
|
|
14002
14065
|
}
|
|
14003
14066
|
}
|
|
14004
|
-
return (hAsync(Host, { key: '
|
|
14067
|
+
return (hAsync(Host, { key: 'ff303c39d59e4ef217421fa11b9a80de07311b07', class: { mobile: this.isMobileDevice }, onDblClick: (e) => this.onElementDblClick(e), onMouseDown: (e) => this.onElementMouseDown(e), onTouchStart: (e) => this.onElementMouseDown(e, true), onCloseedit: (e) => this.closeEdit(e),
|
|
14005
14068
|
// it's done to be able to throw events from different levels, not just from editor
|
|
14006
|
-
onCelledit: (e) => this.onEditCell(e) }, nodes, hAsync("slot", { key: '
|
|
14069
|
+
onCelledit: (e) => this.onEditCell(e) }, nodes, hAsync("slot", { key: '3cbe4c3ad7d447f779e9e20f73eec2e3107275e0', name: "data" })));
|
|
14007
14070
|
}
|
|
14008
14071
|
/**
|
|
14009
14072
|
* Executes the focus operation on the specified range of cells.
|
|
@@ -14168,13 +14231,25 @@ class OverlaySelection {
|
|
|
14168
14231
|
if (!focus || isEditing) {
|
|
14169
14232
|
return;
|
|
14170
14233
|
}
|
|
14171
|
-
|
|
14234
|
+
const rangeFillData = getRangeFillClipboardData(data, this.useClipboard);
|
|
14235
|
+
const targetRange = rangeFillData
|
|
14236
|
+
? this.getClipboardPasteTargetRange()
|
|
14237
|
+
: null;
|
|
14238
|
+
let { changed, range } = this.columnService.getTransformedDataToApply({
|
|
14239
|
+
start: focus,
|
|
14240
|
+
data: rangeFillData || data,
|
|
14241
|
+
targetRange,
|
|
14242
|
+
});
|
|
14172
14243
|
const { defaultPrevented: canPaste } = this.rangeClipboardPaste.emit(Object.assign({ data: changed, models: collectModelsOfRange(changed, this.dataStore), range }, this.types));
|
|
14173
14244
|
if (canPaste) {
|
|
14174
14245
|
return;
|
|
14175
14246
|
}
|
|
14176
14247
|
(_a = this.autoFillService) === null || _a === void 0 ? void 0 : _a.onRangeApply(changed, range, range);
|
|
14177
14248
|
}
|
|
14249
|
+
getClipboardPasteTargetRange() {
|
|
14250
|
+
const range = this.selectionStore.get('range');
|
|
14251
|
+
return range && !isRangeSingleCell(range) ? range : null;
|
|
14252
|
+
}
|
|
14178
14253
|
async focusNext() {
|
|
14179
14254
|
var _a;
|
|
14180
14255
|
const canFocus = await ((_a = this.keyboardService) === null || _a === void 0 ? void 0 : _a.keyChangeSelection(new KeyboardEvent('keydown', {
|
|
@@ -15722,7 +15797,7 @@ class FilterPlugin extends BasePlugin {
|
|
|
15722
15797
|
// filter button clicked, open filter dialog
|
|
15723
15798
|
const gridPos = this.revogrid.getBoundingClientRect();
|
|
15724
15799
|
const buttonPos = el.getBoundingClientRect();
|
|
15725
|
-
const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent });
|
|
15800
|
+
const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent, extraBottomContent: this.extraBottomHyperContent });
|
|
15726
15801
|
(_b = this.beforeshow) === null || _b === void 0 ? void 0 : _b.call(this, data);
|
|
15727
15802
|
this.pop.show(data);
|
|
15728
15803
|
}
|
|
@@ -18487,8 +18562,17 @@ class ColumnMovePlugin extends BasePlugin {
|
|
|
18487
18562
|
constructor(revogrid, providers) {
|
|
18488
18563
|
super(revogrid, providers);
|
|
18489
18564
|
this.moveFunc = debounce$1((e) => this.doMove(e), 5);
|
|
18565
|
+
this.preventHeaderClickAfterDrag = (event) => {
|
|
18566
|
+
if (!this.preventNextHeaderClick) {
|
|
18567
|
+
return;
|
|
18568
|
+
}
|
|
18569
|
+
this.preventNextHeaderClick = false;
|
|
18570
|
+
event.preventDefault();
|
|
18571
|
+
};
|
|
18490
18572
|
this.staticDragData = null;
|
|
18491
18573
|
this.dragData = null;
|
|
18574
|
+
this.columnDragMoved = false;
|
|
18575
|
+
this.preventNextHeaderClick = false;
|
|
18492
18576
|
this.localSubscriptions = {};
|
|
18493
18577
|
this.orderUi = new ColumnOrderHandler();
|
|
18494
18578
|
revogrid.appendChild(this.orderUi.render());
|
|
@@ -18507,11 +18591,13 @@ class ColumnMovePlugin extends BasePlugin {
|
|
|
18507
18591
|
callback: (e) => this.move(e),
|
|
18508
18592
|
};
|
|
18509
18593
|
this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));
|
|
18594
|
+
this.revogrid.addEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
|
|
18510
18595
|
}
|
|
18511
18596
|
dragStart({ event, data }) {
|
|
18512
18597
|
if (event.defaultPrevented) {
|
|
18513
18598
|
return;
|
|
18514
18599
|
}
|
|
18600
|
+
this.preventNextHeaderClick = false;
|
|
18515
18601
|
const { defaultPrevented } = dispatch(this.revogrid, COLUMN_DRAG_START_EVENT, data);
|
|
18516
18602
|
// check if allowed to drag particulat column
|
|
18517
18603
|
if (defaultPrevented) {
|
|
@@ -18533,7 +18619,8 @@ class ColumnMovePlugin extends BasePlugin {
|
|
|
18533
18619
|
const cols = this.getDimension(data.pin || 'rgCol');
|
|
18534
18620
|
const gridRect = this.revogrid.getBoundingClientRect();
|
|
18535
18621
|
const elRect = dataEl.getBoundingClientRect();
|
|
18536
|
-
const startItem = getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) +
|
|
18622
|
+
const startItem = getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) +
|
|
18623
|
+
(cols.renderOffset || 0));
|
|
18537
18624
|
this.staticDragData = {
|
|
18538
18625
|
startPos: event.x,
|
|
18539
18626
|
startItem,
|
|
@@ -18564,10 +18651,14 @@ class ColumnMovePlugin extends BasePlugin {
|
|
|
18564
18651
|
if (rgCol.itemIndex >= this.staticDragData.cols.count) {
|
|
18565
18652
|
return;
|
|
18566
18653
|
}
|
|
18567
|
-
this.orderUi.showHandler(rgCol.
|
|
18654
|
+
this.orderUi.showHandler(getColumnDragPosition(rgCol, this.staticDragData.startItem, this.staticDragData.cols.renderOffset || 0, dragData.scrollOffset), dragData.gridRect.width);
|
|
18568
18655
|
}
|
|
18569
18656
|
}
|
|
18570
18657
|
move(e) {
|
|
18658
|
+
if (this.staticDragData &&
|
|
18659
|
+
Math.abs(this.staticDragData.startPos - e.x) > 10) {
|
|
18660
|
+
this.columnDragMoved = true;
|
|
18661
|
+
}
|
|
18571
18662
|
dispatch(this.revogrid, COLUMN_DRAG_MOVE_EVENT, e);
|
|
18572
18663
|
// then do move
|
|
18573
18664
|
this.moveFunc(e);
|
|
@@ -18576,6 +18667,7 @@ class ColumnMovePlugin extends BasePlugin {
|
|
|
18576
18667
|
this.clearOrder();
|
|
18577
18668
|
}
|
|
18578
18669
|
onMouseUp(e) {
|
|
18670
|
+
const suppressClick = this.columnDragMoved;
|
|
18579
18671
|
// apply new positions
|
|
18580
18672
|
if (this.dragData && this.staticDragData) {
|
|
18581
18673
|
let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);
|
|
@@ -18598,6 +18690,9 @@ class ColumnMovePlugin extends BasePlugin {
|
|
|
18598
18690
|
}
|
|
18599
18691
|
dispatch(this.revogrid, COLUMN_DRAG_END_EVENT, this.getData(this.staticDragData, newItems, source));
|
|
18600
18692
|
}
|
|
18693
|
+
if (suppressClick) {
|
|
18694
|
+
this.preventNextHeaderClick = !!e.target.closest('revogr-header');
|
|
18695
|
+
}
|
|
18601
18696
|
this.clearOrder();
|
|
18602
18697
|
}
|
|
18603
18698
|
clearLocalSubscriptions() {
|
|
@@ -18606,6 +18701,7 @@ class ColumnMovePlugin extends BasePlugin {
|
|
|
18606
18701
|
clearOrder() {
|
|
18607
18702
|
this.staticDragData = null;
|
|
18608
18703
|
this.dragData = null;
|
|
18704
|
+
this.columnDragMoved = false;
|
|
18609
18705
|
this.clearLocalSubscriptions();
|
|
18610
18706
|
this.orderUi.stop(this.revogrid);
|
|
18611
18707
|
}
|
|
@@ -18615,6 +18711,7 @@ class ColumnMovePlugin extends BasePlugin {
|
|
|
18615
18711
|
clearSubscriptions() {
|
|
18616
18712
|
super.clearSubscriptions();
|
|
18617
18713
|
this.clearLocalSubscriptions();
|
|
18714
|
+
this.revogrid.removeEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
|
|
18618
18715
|
}
|
|
18619
18716
|
getData({ gridEl, dataEl, pin }, order, source = []) {
|
|
18620
18717
|
const gridRect = gridEl.getBoundingClientRect();
|
|
@@ -18636,6 +18733,12 @@ class ColumnMovePlugin extends BasePlugin {
|
|
|
18636
18733
|
function getLeftRelative(absoluteX, gridPos, offset) {
|
|
18637
18734
|
return absoluteX - gridPos - offset;
|
|
18638
18735
|
}
|
|
18736
|
+
function getColumnDragPosition(targetItem, startItem, renderOffset, scrollOffset) {
|
|
18737
|
+
const insertionEdge = startItem.itemIndex > targetItem.itemIndex
|
|
18738
|
+
? targetItem.start
|
|
18739
|
+
: targetItem.end;
|
|
18740
|
+
return insertionEdge - renderOffset + scrollOffset;
|
|
18741
|
+
}
|
|
18639
18742
|
|
|
18640
18743
|
function isMobileDevice() {
|
|
18641
18744
|
return /Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent) || navigator.maxTouchPoints > 0;
|
|
@@ -18985,7 +19088,7 @@ class RevoGridComponent {
|
|
|
18985
19088
|
this.rowSize = 0;
|
|
18986
19089
|
/** Indicates default column size. */
|
|
18987
19090
|
this.colSize = 100;
|
|
18988
|
-
/** When true, user can range
|
|
19091
|
+
/** When true, user can select a cell range. Required for range-based clipboard fill. */
|
|
18989
19092
|
this.range = false;
|
|
18990
19093
|
/** When true, grid in read only mode. */
|
|
18991
19094
|
this.readonly = false;
|
|
@@ -18997,7 +19100,7 @@ class RevoGridComponent {
|
|
|
18997
19100
|
this.noHorizontalScrollTransfer = false;
|
|
18998
19101
|
/** When true cell focus appear. */
|
|
18999
19102
|
this.canFocus = true;
|
|
19000
|
-
/** When true enable clipboard. */
|
|
19103
|
+
/** When true enable clipboard. Can be boolean or clipboard config. */
|
|
19001
19104
|
this.useClipboard = true;
|
|
19002
19105
|
/**
|
|
19003
19106
|
* Columns - defines an array of grid columns.
|