pixel-react 1.2.7 → 1.2.8
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/.yarn/install-state.gz +0 -0
- package/lib/components/Drawer/Types.d.ts +23 -12
- package/lib/components/{ExcelFile → Excel}/ExcelFile/ExcelFile.d.ts +1 -0
- package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/actions.d.ts +39 -10
- package/lib/components/Excel/ExcelFile/ExcelFileComponents/reducer.d.ts +4 -0
- package/lib/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.d.ts +40 -0
- package/lib/components/{ExcelFile → Excel}/ExcelToolBar/ExcelToolBar.d.ts +7 -3
- package/lib/components/MenuOption/MenuOption.d.ts +1 -1
- package/lib/components/MenuOption/types.d.ts +4 -0
- package/lib/components/Select/Select.stories.d.ts +1 -0
- package/lib/components/Toastify/Toastify.d.ts +5 -4
- package/lib/components/Toastify/types.d.ts +1 -0
- package/lib/index.d.ts +68 -18
- package/lib/index.esm.js +1512 -1089
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +1513 -1089
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/getSequentialPayload/getSequentialPayload.d.ts +2 -0
- package/lib/utils/getSequentialPayload/getSequentialPayload.stories.d.ts +10 -0
- package/lib/utils/getSequentialPayload/types.d.ts +30 -0
- package/package.json +3 -3
- package/src/assets/Themes/BaseTheme.scss +4 -0
- package/src/assets/icons/maximize_icon.svg +5 -0
- package/src/assets/styles/_fonts.scss +1 -1
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +15 -6
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.stories.tsx +0 -5
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.tsx +20 -10
- package/src/components/Drawer/Drawer.scss +1 -0
- package/src/components/Drawer/Types.ts +24 -13
- package/src/components/Excel/ExcelFile/ExcelFile.scss +62 -0
- package/src/components/Excel/ExcelFile/ExcelFile.tsx +312 -0
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/ActiveCell.tsx +2 -2
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Cell.tsx +3 -3
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/ColumnIndicator.tsx +4 -4
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/CornerIndicator.tsx +2 -2
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/DataEditor.tsx +1 -1
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/DataViewer.tsx +3 -3
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/FloatingRect.tsx +4 -4
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/RowIndicator.tsx +4 -4
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Spreadsheet.scss +26 -24
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Spreadsheet.tsx +13 -45
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Table.tsx +1 -1
- package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/actions.ts +88 -20
- package/src/components/Excel/ExcelFile/ExcelFileComponents/reducer.ts +495 -0
- package/src/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.ts +758 -0
- package/src/components/{ExcelFile → Excel}/ExcelFile.stories.tsx +45 -0
- package/src/components/Excel/ExcelToolBar/ExcelToolBar.scss +36 -0
- package/src/components/Excel/ExcelToolBar/ExcelToolBar.tsx +346 -0
- package/src/components/Form/Form.scss +54 -35
- package/src/components/Form/Form.stories.tsx +264 -225
- package/src/components/Icon/iconList.ts +2 -1
- package/src/components/Input/Input.tsx +0 -1
- package/src/components/MenuOption/MenuOption.scss +0 -1
- package/src/components/MenuOption/MenuOption.stories.tsx +3 -0
- package/src/components/MenuOption/MenuOption.tsx +5 -4
- package/src/components/MenuOption/types.ts +4 -0
- package/src/components/MultiSelect/MultiSelect.scss +5 -1
- package/src/components/MultiSelect/MultiSelect.stories.tsx +17 -13
- package/src/components/MultiSelect/MultiSelect.tsx +27 -14
- package/src/components/Select/Select.stories.tsx +161 -18
- package/src/components/Select/Select.tsx +41 -33
- package/src/components/Table/Table.scss +6 -5
- package/src/components/Table/Table.stories.tsx +0 -9
- package/src/components/Table/Table.tsx +2 -2
- package/src/components/TableTree/TableTree.scss +1 -1
- package/src/components/TableTree/TableTree.tsx +3 -1
- package/src/components/Toastify/Toastify.stories.tsx +29 -10
- package/src/components/Toastify/Toastify.tsx +42 -16
- package/src/components/Toastify/types.ts +2 -0
- package/src/index.ts +4 -2
- package/src/utils/getSequentialPayload/getSequentialPayload.stories.tsx +75 -0
- package/src/utils/getSequentialPayload/getSequentialPayload.ts +29 -0
- package/src/utils/getSequentialPayload/types.ts +35 -0
- package/lib/components/AddButton/AddButton.d.ts +0 -5
- package/lib/components/AddButton/AddButton.stories.d.ts +0 -6
- package/lib/components/AddButton/index.d.ts +0 -1
- package/lib/components/AddButton/types.d.ts +0 -4
- package/lib/components/ExcelFile/ChangeExcelStyles.d.ts +0 -14
- package/lib/components/ExcelFile/ExcelFile/Excel/reducer.d.ts +0 -27
- package/lib/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.d.ts +0 -12
- package/lib/components/ExcelFile/ImportExcelStyles.d.ts +0 -24
- package/lib/utils/find/findAndInsert.d.ts +0 -7
- package/lib/utils/find/findAndInsert.stories.d.ts +0 -7
- package/src/components/ExcelFile/ExcelFile/Excel/reducer.ts +0 -952
- package/src/components/ExcelFile/ExcelFile/ExcelFile.scss +0 -24
- package/src/components/ExcelFile/ExcelFile/ExcelFile.tsx +0 -162
- package/src/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.scss +0 -16
- package/src/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.tsx +0 -68
- package/src/components/ExcelFile/ExcelToolBar/ExcelToolBar.scss +0 -19
- package/src/components/ExcelFile/ExcelToolBar/ExcelToolBar.tsx +0 -291
- package/src/fonts/Montserrat/Montserrat-Medium.ttf +0 -0
- package/src/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/src/fonts/Montserrat/Montserrat-SemiBold.ttf +0 -0
- package/src/fonts/Poppins/Poppins-Black.ttf +0 -0
- package/src/fonts/Poppins/Poppins-BlackItalic.ttf +0 -0
- package/src/fonts/Poppins/Poppins-BoldItalic.ttf +0 -0
- package/src/fonts/Poppins/Poppins-ExtraBold.ttf +0 -0
- package/src/fonts/Poppins/Poppins-ExtraBoldItalic.ttf +0 -0
- package/src/fonts/Poppins/Poppins-ExtraLight.ttf +0 -0
- package/src/fonts/Poppins/Poppins-ExtraLightItalic.ttf +0 -0
- package/src/fonts/Poppins/Poppins-Italic.ttf +0 -0
- package/src/fonts/Poppins/Poppins-Light.ttf +0 -0
- package/src/fonts/Poppins/Poppins-LightItalic.ttf +0 -0
- package/src/fonts/Poppins/Poppins-MediumItalic.ttf +0 -0
- package/src/fonts/Poppins/Poppins-SemiBoldItalic.ttf +0 -0
- package/src/fonts/Poppins/Poppins-Thin.ttf +0 -0
- package/src/fonts/Poppins/Poppins-ThinItalic.ttf +0 -0
- /package/lib/components/{ExcelFile → Excel}/ColorBarSelector/ColorBarSelector.d.ts +0 -0
- /package/lib/components/{ExcelFile → Excel}/ContextMenu/ContextMenu.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/ActiveCell.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Cell.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/ColumnIndicator.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Copied.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/CornerIndicator.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/DataEditor.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/DataViewer.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/FloatingRect.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/HeaderRow.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Row.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/RowIndicator.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Selected.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Spreadsheet.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Table.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/areModelsEqual.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/context.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/engine.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/formula.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/index.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/point-graph.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/point-hash.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/point-set.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/index.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/matrix.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/point-range.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/point.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/selection.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/types.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/use-dispatch.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/use-selector.d.ts +0 -0
- /package/lib/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/util.d.ts +0 -0
- /package/lib/components/{ExcelFile → Excel}/ExcelFile.stories.d.ts +0 -0
- /package/lib/components/{ExcelFile → Excel}/Types.d.ts +0 -0
- /package/lib/components/{ExcelFile → Excel}/index.d.ts +0 -0
- /package/src/components/{ExcelFile/ColorBarselector → Excel/ColorBarSelector}/ColorBarSelector.scss +0 -0
- /package/src/components/{ExcelFile/ColorBarselector → Excel/ColorBarSelector}/ColorBarSelector.tsx +0 -0
- /package/src/components/{ExcelFile → Excel}/ContextMenu/ContextMenu.scss +0 -0
- /package/src/components/{ExcelFile → Excel}/ContextMenu/ContextMenu.tsx +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Copied.tsx +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/HeaderRow.tsx +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Row.tsx +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/Selected.tsx +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/areModelsEqual.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/context.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/engine.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/formula.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/index.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/point-graph.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/point-hash.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/engine/point-set.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/index.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/matrix.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/point-range.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/point.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/selection.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/types.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/typings/fast-formula-parser.d.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/use-dispatch.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/use-selector.ts +0 -0
- /package/src/components/{ExcelFile/ExcelFile/Excel → Excel/ExcelFile/ExcelFileComponents}/util.ts +0 -0
- /package/src/components/{ExcelFile → Excel}/Types.ts +0 -0
- /package/src/components/{ExcelFile → Excel}/index.ts +0 -0
@@ -0,0 +1,758 @@
|
|
1
|
+
import { PointRange } from './point-range';
|
2
|
+
import * as Matrix from './matrix';
|
3
|
+
import * as Types from './types';
|
4
|
+
import * as Point from './point';
|
5
|
+
import {
|
6
|
+
Selection,
|
7
|
+
EmptySelection,
|
8
|
+
RangeSelection,
|
9
|
+
EntireColumnsSelection,
|
10
|
+
EntireRowsSelection,
|
11
|
+
} from './selection';
|
12
|
+
import { Model, createFormulaParser } from './engine';
|
13
|
+
|
14
|
+
export function applyBoldToCells(
|
15
|
+
currentData: Matrix.Matrix<Types.CellBase<any>>,
|
16
|
+
selectedRange: PointRange
|
17
|
+
): Matrix.Matrix<Types.CellBase<any>> {
|
18
|
+
if (!selectedRange) {
|
19
|
+
return currentData;
|
20
|
+
}
|
21
|
+
|
22
|
+
const { start, end } = selectedRange;
|
23
|
+
|
24
|
+
let updatedData = currentData;
|
25
|
+
|
26
|
+
for (let row = start.row; row <= end.row; row++) {
|
27
|
+
for (let col = start.column; col <= end.column; col++) {
|
28
|
+
const currentCell = Matrix.get({ row, column: col }, updatedData);
|
29
|
+
|
30
|
+
if (!currentCell) {
|
31
|
+
continue;
|
32
|
+
}
|
33
|
+
|
34
|
+
const updatedCell = {
|
35
|
+
...currentCell,
|
36
|
+
style: {
|
37
|
+
...currentCell.style,
|
38
|
+
fontWeight: 'bold',
|
39
|
+
},
|
40
|
+
};
|
41
|
+
|
42
|
+
updatedData = Matrix.set({ row, column: col }, updatedCell, updatedData);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
return updatedData;
|
47
|
+
}
|
48
|
+
|
49
|
+
export function applyItalicToCells(
|
50
|
+
currentData: Matrix.Matrix<Types.CellBase<any>>,
|
51
|
+
selectedRange: PointRange
|
52
|
+
): Matrix.Matrix<Types.CellBase<any>> {
|
53
|
+
if (!selectedRange) {
|
54
|
+
return currentData;
|
55
|
+
}
|
56
|
+
|
57
|
+
const { start, end } = selectedRange;
|
58
|
+
|
59
|
+
let updatedData = currentData;
|
60
|
+
|
61
|
+
for (let row = start.row; row <= end.row; row++) {
|
62
|
+
for (let col = start.column; col <= end.column; col++) {
|
63
|
+
const currentCell = Matrix.get({ row, column: col }, updatedData);
|
64
|
+
|
65
|
+
if (!currentCell) {
|
66
|
+
continue;
|
67
|
+
}
|
68
|
+
|
69
|
+
const updatedCell = {
|
70
|
+
...currentCell,
|
71
|
+
style: {
|
72
|
+
...currentCell.style,
|
73
|
+
fontStyle: 'italic',
|
74
|
+
},
|
75
|
+
};
|
76
|
+
|
77
|
+
updatedData = Matrix.set({ row, column: col }, updatedCell, updatedData);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
return updatedData;
|
82
|
+
}
|
83
|
+
|
84
|
+
export function applyFontFamily(
|
85
|
+
currentData: Matrix.Matrix<Types.CellBase<any>>,
|
86
|
+
selectedRange: PointRange,
|
87
|
+
value: string
|
88
|
+
): Matrix.Matrix<Types.CellBase<any>> {
|
89
|
+
if (!selectedRange) {
|
90
|
+
return currentData;
|
91
|
+
}
|
92
|
+
|
93
|
+
const { start, end } = selectedRange;
|
94
|
+
|
95
|
+
let updatedData = currentData;
|
96
|
+
|
97
|
+
for (let row = start.row; row <= end.row; row++) {
|
98
|
+
for (let col = start.column; col <= end.column; col++) {
|
99
|
+
const currentCell = Matrix.get({ row, column: col }, updatedData);
|
100
|
+
|
101
|
+
if (!currentCell) {
|
102
|
+
continue;
|
103
|
+
}
|
104
|
+
|
105
|
+
let updatedCell = {
|
106
|
+
...currentCell,
|
107
|
+
style: {
|
108
|
+
...currentCell.style,
|
109
|
+
fontFamily: value,
|
110
|
+
},
|
111
|
+
};
|
112
|
+
|
113
|
+
updatedData = Matrix.set({ row, column: col }, updatedCell, updatedData);
|
114
|
+
}
|
115
|
+
}
|
116
|
+
|
117
|
+
return updatedData;
|
118
|
+
}
|
119
|
+
|
120
|
+
export function applyFontSize(
|
121
|
+
currentData: Matrix.Matrix<Types.CellBase<any>>,
|
122
|
+
selectedRange: PointRange,
|
123
|
+
value: string
|
124
|
+
): Matrix.Matrix<Types.CellBase<any>> {
|
125
|
+
const conversion = Number(value);
|
126
|
+
|
127
|
+
if (isNaN(conversion)) {
|
128
|
+
return currentData;
|
129
|
+
}
|
130
|
+
|
131
|
+
const fontSizeInPx = convertPtToPx(conversion);
|
132
|
+
|
133
|
+
if (!selectedRange) {
|
134
|
+
return currentData;
|
135
|
+
}
|
136
|
+
|
137
|
+
const { start, end } = selectedRange;
|
138
|
+
|
139
|
+
let updatedData = currentData;
|
140
|
+
|
141
|
+
for (let row = start.row; row <= end.row; row++) {
|
142
|
+
for (let col = start.column; col <= end.column; col++) {
|
143
|
+
const currentCell = Matrix.get({ row, column: col }, updatedData);
|
144
|
+
|
145
|
+
if (!currentCell) {
|
146
|
+
continue;
|
147
|
+
}
|
148
|
+
|
149
|
+
let updatedCell = {
|
150
|
+
...currentCell,
|
151
|
+
style: {
|
152
|
+
...currentCell.style,
|
153
|
+
fontSize: fontSizeInPx,
|
154
|
+
},
|
155
|
+
};
|
156
|
+
|
157
|
+
updatedData = Matrix.set({ row, column: col }, updatedCell, updatedData);
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
return updatedData;
|
162
|
+
}
|
163
|
+
|
164
|
+
export function applyBorderToCells(
|
165
|
+
currentData: Matrix.Matrix<Types.CellBase<any>>,
|
166
|
+
selectedRange: PointRange,
|
167
|
+
value: string,
|
168
|
+
color: string
|
169
|
+
): Matrix.Matrix<Types.CellBase<any>> {
|
170
|
+
if (!selectedRange) {
|
171
|
+
return currentData;
|
172
|
+
}
|
173
|
+
|
174
|
+
const { start, end } = selectedRange;
|
175
|
+
|
176
|
+
let updatedData = currentData;
|
177
|
+
|
178
|
+
for (let row = start.row; row <= end.row; row++) {
|
179
|
+
for (let col = start.column; col <= end.column; col++) {
|
180
|
+
const currentCell = Matrix.get({ row, column: col }, updatedData);
|
181
|
+
|
182
|
+
if (!currentCell) {
|
183
|
+
continue;
|
184
|
+
}
|
185
|
+
|
186
|
+
let updatedCell = { ...currentCell };
|
187
|
+
|
188
|
+
switch (value) {
|
189
|
+
case 'border-all-sides':
|
190
|
+
updatedCell.style = {
|
191
|
+
...currentCell.style,
|
192
|
+
border: `2px solid ${color}`,
|
193
|
+
};
|
194
|
+
break;
|
195
|
+
case 'border-none':
|
196
|
+
updatedCell.style = {
|
197
|
+
...currentCell.style,
|
198
|
+
border: `1px solid var(--toggle-strip-color)`,
|
199
|
+
};
|
200
|
+
break;
|
201
|
+
case 'border-right':
|
202
|
+
updatedCell.style = {
|
203
|
+
...currentCell.style,
|
204
|
+
borderRight: `2px solid ${color}`,
|
205
|
+
};
|
206
|
+
break;
|
207
|
+
case 'border-left':
|
208
|
+
updatedCell.style = {
|
209
|
+
...currentCell.style,
|
210
|
+
borderLeft: `2px solid ${color}`,
|
211
|
+
};
|
212
|
+
break;
|
213
|
+
case 'border-top':
|
214
|
+
updatedCell.style = {
|
215
|
+
...currentCell.style,
|
216
|
+
borderTop: `2px solid ${color}`,
|
217
|
+
};
|
218
|
+
break;
|
219
|
+
case 'border-bottom':
|
220
|
+
updatedCell.style = {
|
221
|
+
...currentCell.style,
|
222
|
+
borderBottom: `2px solid ${color}`,
|
223
|
+
};
|
224
|
+
break;
|
225
|
+
default:
|
226
|
+
break;
|
227
|
+
}
|
228
|
+
|
229
|
+
updatedData = Matrix.set({ row, column: col }, updatedCell, updatedData);
|
230
|
+
}
|
231
|
+
}
|
232
|
+
|
233
|
+
return updatedData;
|
234
|
+
}
|
235
|
+
|
236
|
+
export function applyTextAlign(
|
237
|
+
currentData: Matrix.Matrix<Types.CellBase<any>>,
|
238
|
+
selectedRange: PointRange,
|
239
|
+
value: string
|
240
|
+
): Matrix.Matrix<Types.CellBase<any>> {
|
241
|
+
if (!selectedRange) {
|
242
|
+
return currentData;
|
243
|
+
}
|
244
|
+
|
245
|
+
const { start, end } = selectedRange;
|
246
|
+
|
247
|
+
let updatedData = currentData;
|
248
|
+
|
249
|
+
for (let row = start.row; row <= end.row; row++) {
|
250
|
+
for (let col = start.column; col <= end.column; col++) {
|
251
|
+
const currentCell = Matrix.get({ row, column: col }, updatedData);
|
252
|
+
|
253
|
+
if (!currentCell) {
|
254
|
+
continue;
|
255
|
+
}
|
256
|
+
|
257
|
+
let updatedCell = {
|
258
|
+
...currentCell,
|
259
|
+
style: {
|
260
|
+
...currentCell.style,
|
261
|
+
textAlign: value as TextAlign,
|
262
|
+
},
|
263
|
+
};
|
264
|
+
|
265
|
+
updatedData = Matrix.set({ row, column: col }, updatedCell, updatedData);
|
266
|
+
}
|
267
|
+
}
|
268
|
+
|
269
|
+
return updatedData;
|
270
|
+
}
|
271
|
+
|
272
|
+
export function applyUnderlineToCells(
|
273
|
+
currentData: Matrix.Matrix<Types.CellBase<any>>,
|
274
|
+
selectedRange: PointRange,
|
275
|
+
value: string,
|
276
|
+
active: boolean
|
277
|
+
): Matrix.Matrix<Types.CellBase<any>> {
|
278
|
+
const { start, end } = selectedRange;
|
279
|
+
|
280
|
+
let updatedData = currentData;
|
281
|
+
|
282
|
+
for (let row = start.row; row <= end.row; row++) {
|
283
|
+
for (let col = start.column; col <= end.column; col++) {
|
284
|
+
const currentCell = Matrix.get({ row, column: col }, updatedData);
|
285
|
+
|
286
|
+
if (!currentCell) {
|
287
|
+
continue;
|
288
|
+
}
|
289
|
+
|
290
|
+
let updatedCell;
|
291
|
+
if (!active) {
|
292
|
+
updatedCell = {
|
293
|
+
...currentCell,
|
294
|
+
style: {
|
295
|
+
...currentCell.style,
|
296
|
+
textDecoration: 'none',
|
297
|
+
textDecorationStyle: 'none' as TextDecorationStyle,
|
298
|
+
},
|
299
|
+
};
|
300
|
+
} else {
|
301
|
+
updatedCell = {
|
302
|
+
...currentCell,
|
303
|
+
style: {
|
304
|
+
...currentCell.style,
|
305
|
+
textDecoration: value === 'double_border' ? 'underline' : value,
|
306
|
+
textDecorationStyle:
|
307
|
+
value === 'double_border'
|
308
|
+
? 'double'
|
309
|
+
: ('none' as TextDecorationStyle),
|
310
|
+
},
|
311
|
+
};
|
312
|
+
}
|
313
|
+
|
314
|
+
updatedData = Matrix.set({ row, column: col }, updatedCell, updatedData);
|
315
|
+
}
|
316
|
+
}
|
317
|
+
|
318
|
+
return updatedData;
|
319
|
+
}
|
320
|
+
|
321
|
+
export function isValidHexColor(color: string): boolean {
|
322
|
+
if (color.length !== 6) {
|
323
|
+
return false;
|
324
|
+
}
|
325
|
+
|
326
|
+
const hexChars = '0123456789ABCDEFabcdef';
|
327
|
+
for (let i = 1; i < color.length; i++) {
|
328
|
+
if (!hexChars.includes(color[i] as string)) {
|
329
|
+
return false;
|
330
|
+
}
|
331
|
+
}
|
332
|
+
|
333
|
+
return true;
|
334
|
+
}
|
335
|
+
|
336
|
+
export function applyColorToCells(
|
337
|
+
currentData: Matrix.Matrix<Types.CellBase<any>>,
|
338
|
+
selectedRange: PointRange | null,
|
339
|
+
color: string
|
340
|
+
): Matrix.Matrix<Types.CellBase<any>> {
|
341
|
+
if (!selectedRange) {
|
342
|
+
return currentData;
|
343
|
+
}
|
344
|
+
|
345
|
+
const { start, end } = selectedRange;
|
346
|
+
|
347
|
+
let updatedData = currentData;
|
348
|
+
|
349
|
+
const isHex = isValidHexColor(color);
|
350
|
+
|
351
|
+
const applyColor = isHex ? `#${color}` : color;
|
352
|
+
|
353
|
+
for (let row = start.row; row <= end.row; row++) {
|
354
|
+
for (let col = start.column; col <= end.column; col++) {
|
355
|
+
const currentCell = Matrix.get({ row, column: col }, updatedData);
|
356
|
+
|
357
|
+
if (!currentCell) {
|
358
|
+
continue;
|
359
|
+
}
|
360
|
+
|
361
|
+
const updatedCell = {
|
362
|
+
...currentCell,
|
363
|
+
style: {
|
364
|
+
...currentCell.style,
|
365
|
+
color: applyColor,
|
366
|
+
},
|
367
|
+
};
|
368
|
+
|
369
|
+
updatedData = Matrix.set({ row, column: col }, updatedCell, updatedData);
|
370
|
+
}
|
371
|
+
}
|
372
|
+
|
373
|
+
return updatedData;
|
374
|
+
}
|
375
|
+
|
376
|
+
export function applyBackgroundColorToCells(
|
377
|
+
currentData: Matrix.Matrix<Types.CellBase<any>>,
|
378
|
+
selectedRange: PointRange | null,
|
379
|
+
backgroundColor: string
|
380
|
+
): Matrix.Matrix<Types.CellBase<any>> {
|
381
|
+
if (selectedRange) {
|
382
|
+
const { start, end } = selectedRange;
|
383
|
+
|
384
|
+
let updatedData = currentData;
|
385
|
+
|
386
|
+
const isHex = isValidHexColor(backgroundColor);
|
387
|
+
|
388
|
+
const applyColor = isHex ? `#${backgroundColor}` : backgroundColor;
|
389
|
+
|
390
|
+
for (let row = start.row; row <= end.row; row++) {
|
391
|
+
for (let col = start.column; col <= end.column; col++) {
|
392
|
+
const currentCell = Matrix.get({ row, column: col }, updatedData);
|
393
|
+
|
394
|
+
if (!currentCell) {
|
395
|
+
continue;
|
396
|
+
}
|
397
|
+
|
398
|
+
const updatedCell = {
|
399
|
+
...currentCell,
|
400
|
+
style: {
|
401
|
+
...currentCell.style,
|
402
|
+
backgroundColor: applyColor,
|
403
|
+
},
|
404
|
+
};
|
405
|
+
|
406
|
+
updatedData = Matrix.set(
|
407
|
+
{ row, column: col },
|
408
|
+
updatedCell,
|
409
|
+
updatedData
|
410
|
+
);
|
411
|
+
}
|
412
|
+
}
|
413
|
+
|
414
|
+
return updatedData;
|
415
|
+
}
|
416
|
+
return currentData;
|
417
|
+
}
|
418
|
+
|
419
|
+
export function edit(state: Types.StoreState): Types.StoreState {
|
420
|
+
if (isActiveReadOnly(state)) {
|
421
|
+
return state;
|
422
|
+
}
|
423
|
+
return { ...state, mode: 'edit' };
|
424
|
+
}
|
425
|
+
|
426
|
+
export function clear(state: Types.StoreState): Types.StoreState {
|
427
|
+
if (!state.active) {
|
428
|
+
return state;
|
429
|
+
}
|
430
|
+
|
431
|
+
const canClearCell = (cell: Types.CellBase | undefined) =>
|
432
|
+
cell && !cell.readOnly;
|
433
|
+
const clearCell = (cell: Types.CellBase | undefined) => {
|
434
|
+
if (!canClearCell(cell)) {
|
435
|
+
return cell;
|
436
|
+
}
|
437
|
+
return Object.assign({}, cell, { value: undefined });
|
438
|
+
};
|
439
|
+
|
440
|
+
const selectedRange = state.selected.toRange(state.model.data);
|
441
|
+
|
442
|
+
const changes: Types.CommitChanges = [];
|
443
|
+
let newData = state.model.data;
|
444
|
+
|
445
|
+
for (const point of selectedRange || []) {
|
446
|
+
const cell = Matrix.get(point, state.model.data);
|
447
|
+
const clearedCell = clearCell(cell);
|
448
|
+
changes.push({
|
449
|
+
prevCell: cell || null,
|
450
|
+
nextCell: clearedCell || null,
|
451
|
+
});
|
452
|
+
newData = Matrix.set(point, clearedCell, newData);
|
453
|
+
}
|
454
|
+
|
455
|
+
return {
|
456
|
+
...state,
|
457
|
+
model: new Model(createFormulaParser, newData),
|
458
|
+
...commit(changes),
|
459
|
+
};
|
460
|
+
}
|
461
|
+
|
462
|
+
export function blur(state: Types.StoreState): Types.StoreState {
|
463
|
+
return { ...state, active: null, selected: new EmptySelection() };
|
464
|
+
}
|
465
|
+
|
466
|
+
export function view(state: Types.StoreState): Types.StoreState {
|
467
|
+
return { ...state, mode: 'view' };
|
468
|
+
}
|
469
|
+
|
470
|
+
export function commit(changes: Types.CommitChanges): Partial<Types.StoreState> {
|
471
|
+
return { lastCommit: changes };
|
472
|
+
}
|
473
|
+
|
474
|
+
// Utility
|
475
|
+
|
476
|
+
export const go =
|
477
|
+
(rowDelta: number, columnDelta: number): KeyDownHandler =>
|
478
|
+
(state) => {
|
479
|
+
if (!state.active) {
|
480
|
+
return;
|
481
|
+
}
|
482
|
+
const size = Matrix.getSize(state.model.data);
|
483
|
+
const newColumn = state.active.column + columnDelta;
|
484
|
+
const shouldWrap = newColumn >= size.columns;
|
485
|
+
const nextActive = {
|
486
|
+
row: state.active.row + rowDelta + (shouldWrap ? 1 : 0),
|
487
|
+
column: (state.active.column + columnDelta) % size.columns,
|
488
|
+
};
|
489
|
+
if (!Matrix.has(nextActive, state.model.data)) {
|
490
|
+
return { ...state, mode: 'view' };
|
491
|
+
}
|
492
|
+
return {
|
493
|
+
...state,
|
494
|
+
active: nextActive,
|
495
|
+
selected: new RangeSelection(new PointRange(nextActive, nextActive)),
|
496
|
+
mode: 'view',
|
497
|
+
};
|
498
|
+
};
|
499
|
+
|
500
|
+
function convertPtToPx(pt: number): string {
|
501
|
+
const px = pt * 1.33;
|
502
|
+
return `${Math.round(px)}px`;
|
503
|
+
}
|
504
|
+
|
505
|
+
// Key Bindings
|
506
|
+
|
507
|
+
type TextDecorationStyle = 'solid' | 'double' | 'dotted' | 'dashed' | 'wavy';
|
508
|
+
|
509
|
+
type TextAlign = 'left' | 'center' | 'right';
|
510
|
+
|
511
|
+
export type KeyDownHandler = (
|
512
|
+
state: Types.StoreState,
|
513
|
+
event: React.KeyboardEvent
|
514
|
+
) => Types.StoreState | void;
|
515
|
+
|
516
|
+
type KeyDownHandlers = {
|
517
|
+
[K in string]: KeyDownHandler | undefined;
|
518
|
+
};
|
519
|
+
|
520
|
+
const keyDownHandlers: KeyDownHandlers = {
|
521
|
+
ArrowUp: go(-1, 0),
|
522
|
+
ArrowDown: go(+1, 0),
|
523
|
+
ArrowLeft: go(0, -1),
|
524
|
+
ArrowRight: go(0, +1),
|
525
|
+
Tab: go(0, +1),
|
526
|
+
Enter: edit,
|
527
|
+
Backspace: clear,
|
528
|
+
Delete: clear,
|
529
|
+
Escape: blur,
|
530
|
+
};
|
531
|
+
|
532
|
+
const editKeyDownHandlers: KeyDownHandlers = {
|
533
|
+
Escape: view,
|
534
|
+
Tab: keyDownHandlers.Tab,
|
535
|
+
Enter: keyDownHandlers.ArrowDown,
|
536
|
+
};
|
537
|
+
|
538
|
+
const editShiftKeyDownHandlers: KeyDownHandlers = {
|
539
|
+
Tab: go(0, -1),
|
540
|
+
};
|
541
|
+
|
542
|
+
export enum Direction {
|
543
|
+
Left = 'Left',
|
544
|
+
Right = 'Right',
|
545
|
+
Top = 'Top',
|
546
|
+
Bottom = 'Bottom',
|
547
|
+
}
|
548
|
+
|
549
|
+
const shiftKeyDownHandlers: KeyDownHandlers = {
|
550
|
+
ArrowUp: (state) => ({
|
551
|
+
...state,
|
552
|
+
selected: modifyEdge(
|
553
|
+
state.selected,
|
554
|
+
state.active,
|
555
|
+
state.model.data,
|
556
|
+
Direction.Top
|
557
|
+
),
|
558
|
+
}),
|
559
|
+
ArrowDown: (state) => ({
|
560
|
+
...state,
|
561
|
+
selected: modifyEdge(
|
562
|
+
state.selected,
|
563
|
+
state.active,
|
564
|
+
state.model.data,
|
565
|
+
Direction.Bottom
|
566
|
+
),
|
567
|
+
}),
|
568
|
+
ArrowLeft: (state) => ({
|
569
|
+
...state,
|
570
|
+
selected: modifyEdge(
|
571
|
+
state.selected,
|
572
|
+
state.active,
|
573
|
+
state.model.data,
|
574
|
+
Direction.Left
|
575
|
+
),
|
576
|
+
}),
|
577
|
+
ArrowRight: (state) => ({
|
578
|
+
...state,
|
579
|
+
selected: modifyEdge(
|
580
|
+
state.selected,
|
581
|
+
state.active,
|
582
|
+
state.model.data,
|
583
|
+
Direction.Right
|
584
|
+
),
|
585
|
+
}),
|
586
|
+
Tab: go(0, -1),
|
587
|
+
};
|
588
|
+
|
589
|
+
const shiftMetaKeyDownHandlers: KeyDownHandlers = {};
|
590
|
+
const metaKeyDownHandlers: KeyDownHandlers = {};
|
591
|
+
|
592
|
+
export function getKeyDownHandler(
|
593
|
+
state: Types.StoreState,
|
594
|
+
event: React.KeyboardEvent
|
595
|
+
): KeyDownHandler | undefined {
|
596
|
+
const { key } = event;
|
597
|
+
let handlers;
|
598
|
+
// Order matters
|
599
|
+
if (state.mode === 'edit') {
|
600
|
+
if (event.shiftKey) {
|
601
|
+
handlers = editShiftKeyDownHandlers;
|
602
|
+
} else {
|
603
|
+
handlers = editKeyDownHandlers;
|
604
|
+
}
|
605
|
+
} else if (event.shiftKey && event.metaKey) {
|
606
|
+
handlers = shiftMetaKeyDownHandlers;
|
607
|
+
} else if (event.shiftKey) {
|
608
|
+
handlers = shiftKeyDownHandlers;
|
609
|
+
} else if (event.metaKey) {
|
610
|
+
handlers = metaKeyDownHandlers;
|
611
|
+
} else {
|
612
|
+
handlers = keyDownHandlers;
|
613
|
+
}
|
614
|
+
|
615
|
+
return handlers[key];
|
616
|
+
}
|
617
|
+
|
618
|
+
/** Returns whether the reducer has a handler for the given keydown event */
|
619
|
+
export function hasKeyDownHandler(
|
620
|
+
state: Types.StoreState,
|
621
|
+
event: React.KeyboardEvent
|
622
|
+
): boolean {
|
623
|
+
return getKeyDownHandler(state, event) !== undefined;
|
624
|
+
}
|
625
|
+
|
626
|
+
/** Returns whether the active cell is read only */
|
627
|
+
export function isActiveReadOnly(state: Types.StoreState): boolean {
|
628
|
+
const activeCell = getActive(state);
|
629
|
+
return Boolean(activeCell?.readOnly);
|
630
|
+
}
|
631
|
+
|
632
|
+
/** Gets active cell from given state */
|
633
|
+
export function getActive(state: Types.StoreState): Types.CellBase | null {
|
634
|
+
const activeCell = state.active && Matrix.get(state.active, state.model.data);
|
635
|
+
return activeCell || null;
|
636
|
+
}
|
637
|
+
|
638
|
+
/** Modify given edge according to given active point and data */
|
639
|
+
export function modifyEdge<T extends Selection>(
|
640
|
+
selection: T,
|
641
|
+
active: Point.Point | null,
|
642
|
+
data: Matrix.Matrix<unknown>,
|
643
|
+
direction: Direction
|
644
|
+
): T {
|
645
|
+
if (!active) {
|
646
|
+
return selection;
|
647
|
+
}
|
648
|
+
if (selection instanceof RangeSelection) {
|
649
|
+
const nextSelection = modifyRangeSelectionEdge(
|
650
|
+
selection,
|
651
|
+
active,
|
652
|
+
data,
|
653
|
+
direction
|
654
|
+
);
|
655
|
+
// @ts-expect-error
|
656
|
+
return nextSelection;
|
657
|
+
}
|
658
|
+
if (selection instanceof EntireColumnsSelection) {
|
659
|
+
// @ts-expect-error
|
660
|
+
return modifyEntireColumnsSelection(selection, active, data, direction);
|
661
|
+
}
|
662
|
+
if (selection instanceof EntireRowsSelection) {
|
663
|
+
// @ts-expect-error
|
664
|
+
return modifyEntireRowsSelection(selection, active, data, direction);
|
665
|
+
}
|
666
|
+
return selection;
|
667
|
+
}
|
668
|
+
|
669
|
+
export function modifyRangeSelectionEdge(
|
670
|
+
rangeSelection: RangeSelection,
|
671
|
+
active: Point.Point,
|
672
|
+
data: Matrix.Matrix<unknown>,
|
673
|
+
edge: Direction
|
674
|
+
): RangeSelection {
|
675
|
+
const field =
|
676
|
+
edge === Direction.Left || edge === Direction.Right ? 'column' : 'row';
|
677
|
+
|
678
|
+
const key =
|
679
|
+
edge === Direction.Left || edge === Direction.Top ? 'start' : 'end';
|
680
|
+
const delta = key === 'start' ? -1 : 1;
|
681
|
+
|
682
|
+
const edgeOffsets = rangeSelection.range.has({
|
683
|
+
...active,
|
684
|
+
[field]: active[field] + delta * -1,
|
685
|
+
});
|
686
|
+
|
687
|
+
const keyToModify = edgeOffsets ? (key === 'start' ? 'end' : 'start') : key;
|
688
|
+
|
689
|
+
const nextRange = new PointRange(
|
690
|
+
rangeSelection.range.start,
|
691
|
+
rangeSelection.range.end
|
692
|
+
);
|
693
|
+
|
694
|
+
nextRange[keyToModify][field] += delta;
|
695
|
+
|
696
|
+
const nextSelection = new RangeSelection(nextRange).normalizeTo(data);
|
697
|
+
|
698
|
+
return nextSelection;
|
699
|
+
}
|
700
|
+
|
701
|
+
export function modifyEntireRowsSelection(
|
702
|
+
selection: EntireRowsSelection,
|
703
|
+
active: Point.Point,
|
704
|
+
data: Matrix.Matrix<unknown>,
|
705
|
+
edge: Direction
|
706
|
+
): EntireRowsSelection {
|
707
|
+
if (edge === Direction.Left || edge === Direction.Right) {
|
708
|
+
return selection;
|
709
|
+
}
|
710
|
+
const delta = edge === Direction.Top ? -1 : 1;
|
711
|
+
const property = edge === Direction.Top ? 'start' : 'end';
|
712
|
+
const oppositeProperty = property === 'start' ? 'end' : 'start';
|
713
|
+
const newSelectionData = { ...selection };
|
714
|
+
if (
|
715
|
+
edge === Direction.Top
|
716
|
+
? selection.end > active.row
|
717
|
+
: selection.start < active.row
|
718
|
+
) {
|
719
|
+
newSelectionData[oppositeProperty] = selection[oppositeProperty] + delta;
|
720
|
+
} else {
|
721
|
+
newSelectionData[property] = selection[property] + delta;
|
722
|
+
}
|
723
|
+
const nextSelection = new EntireRowsSelection(
|
724
|
+
Math.max(newSelectionData.start, 0),
|
725
|
+
Math.max(newSelectionData.end, 0)
|
726
|
+
);
|
727
|
+
return nextSelection.normalizeTo(data);
|
728
|
+
}
|
729
|
+
|
730
|
+
export function modifyEntireColumnsSelection(
|
731
|
+
selection: EntireColumnsSelection,
|
732
|
+
active: Point.Point,
|
733
|
+
data: Matrix.Matrix<unknown>,
|
734
|
+
edge: Direction
|
735
|
+
): EntireColumnsSelection {
|
736
|
+
if (edge === Direction.Top || edge === Direction.Bottom) {
|
737
|
+
return selection;
|
738
|
+
}
|
739
|
+
const delta = edge === Direction.Left ? -1 : 1;
|
740
|
+
const property = edge === Direction.Left ? 'start' : 'end';
|
741
|
+
const oppositeProperty = property === 'start' ? 'end' : 'start';
|
742
|
+
const newSelectionData = { ...selection };
|
743
|
+
if (
|
744
|
+
edge === Direction.Left
|
745
|
+
? selection.end > active.row
|
746
|
+
: selection.start < active.row
|
747
|
+
) {
|
748
|
+
newSelectionData[oppositeProperty] = selection[oppositeProperty] + delta;
|
749
|
+
} else {
|
750
|
+
newSelectionData[property] = selection[property] + delta;
|
751
|
+
}
|
752
|
+
const nextSelection = new EntireColumnsSelection(
|
753
|
+
Math.max(newSelectionData.start, 0),
|
754
|
+
Math.max(newSelectionData.end, 0)
|
755
|
+
);
|
756
|
+
return nextSelection.normalizeTo(data);
|
757
|
+
}
|
758
|
+
|