pixel-react 1.2.1 → 1.2.3
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/lib/components/AppHeader/types.d.ts +11 -2
- package/lib/components/Avatar/Avatar.d.ts +5 -0
- package/lib/components/Avatar/Avatar.stories.d.ts +10 -0
- package/lib/components/Avatar/index.d.ts +1 -0
- package/lib/components/Avatar/types.d.ts +26 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/ActiveCell.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/ColumnIndicator.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/Copied.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/CornerIndicator.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/DataEditor.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/DataViewer.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/FloatingRect.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/HeaderRow.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/Row.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/RowIndicator.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/Selected.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/Spreadsheet.d.ts +6 -7
- package/lib/components/ExcelFile/ExcelFile/Excel/Table.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/actions.d.ts +49 -5
- package/lib/components/ExcelFile/ExcelFile/Excel/context.d.ts +3 -3
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/engine.d.ts +5 -5
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/formula.d.ts +6 -6
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/index.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-graph.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-hash.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-set.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/index.d.ts +11 -11
- package/lib/components/ExcelFile/ExcelFile/Excel/matrix.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/point-range.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/reducer.d.ts +5 -5
- package/lib/components/ExcelFile/ExcelFile/Excel/selection.d.ts +3 -3
- package/lib/components/ExcelFile/ExcelFile/Excel/types.d.ts +11 -48
- package/lib/components/ExcelFile/ExcelFile/Excel/use-dispatch.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/use-selector.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/util.d.ts +11 -12
- package/lib/components/ExcelFile/ExcelFile/ExcelFile.d.ts +16 -0
- package/lib/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.d.ts +0 -3
- package/lib/components/ExcelFile/ExcelToolBar/ExcelToolBar.d.ts +12 -0
- package/lib/components/ExcelFile/Types.d.ts +2 -49
- package/lib/components/Form/Form.d.ts +1 -15
- package/lib/components/Form/Form.stories.d.ts +6 -5
- package/lib/components/Form/Forms.d.ts +8 -0
- package/lib/components/Form/index.d.ts +1 -1
- package/lib/components/Icon/types.d.ts +1 -1
- package/lib/components/MenuOption/types.d.ts +7 -7
- package/lib/components/MiniModal/MiniModal.stories.d.ts +1 -0
- package/lib/components/MiniModal/types.d.ts +6 -6
- package/lib/components/ModulesChip/ModuleChip.d.ts +4 -0
- package/lib/components/ModulesChip/ModuleChip.stories.d.ts +6 -0
- package/lib/components/ModulesChip/index.d.ts +1 -0
- package/lib/components/ModulesChip/types.d.ts +14 -0
- package/lib/components/MultiSelect/MultiSelectTypes.d.ts +1 -0
- package/lib/components/Toastify/Toastify.d.ts +8 -0
- package/lib/components/Toastify/Toastify.stories.d.ts +6 -0
- package/lib/components/Toastify/index.d.ts +1 -0
- package/lib/components/Toastify/types.d.ts +7 -0
- package/lib/components/Tooltip/types.d.ts +6 -0
- package/lib/components/Typography/types.d.ts +1 -0
- package/lib/index.d.ts +84 -31
- package/lib/index.esm.js +26720 -881
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +26718 -875
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/StyleGuide/ColorPalette/colorPaletteList.ts +10 -0
- package/src/assets/Themes/BaseTheme.scss +2 -0
- package/src/assets/Themes/DarkTheme.scss +2 -0
- package/src/assets/icons/add_testcase.svg +3 -0
- package/src/assets/icons/add_variable_icon.svg +3 -4
- package/src/assets/icons/attachment_icon.svg +3 -0
- package/src/assets/icons/authorization_icon.svg +3 -0
- package/src/assets/icons/automation_testcase.svg +4 -0
- package/src/assets/icons/back_icon.svg +3 -0
- package/src/assets/icons/client_profile.svg +4 -0
- package/src/assets/icons/fireflink_finder_logo.svg +7 -0
- package/src/assets/icons/fireflink_platform.svg +4 -0
- package/src/assets/icons/license_expired.svg +20 -0
- package/src/assets/icons/manual_testcase.svg +3 -0
- package/src/assets/icons/variable_icon.svg +4 -0
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +2 -2
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.tsx +1 -1
- package/src/components/AppHeader/AppHeader.stories.tsx +24 -3
- package/src/components/AppHeader/AppHeader.tsx +29 -11
- package/src/components/AppHeader/types.ts +11 -3
- package/src/components/Avatar/Avatar.scss +24 -0
- package/src/components/Avatar/Avatar.stories.tsx +56 -0
- package/src/components/Avatar/Avatar.tsx +25 -0
- package/src/components/Avatar/index.ts +1 -0
- package/src/components/Avatar/types.ts +27 -0
- package/src/components/Button/types.ts +1 -1
- package/src/components/ExcelFile/ColorBarselector/ColorBarSelector.scss +0 -2
- package/src/components/ExcelFile/ContextMenu/ContextMenu.scss +1 -4
- package/src/components/ExcelFile/ContextMenu/ContextMenu.tsx +0 -1
- package/src/components/ExcelFile/ExcelFile/Excel/ActiveCell.tsx +13 -13
- package/src/components/ExcelFile/ExcelFile/Excel/Cell.tsx +13 -12
- package/src/components/ExcelFile/ExcelFile/Excel/ColumnIndicator.tsx +40 -32
- package/src/components/ExcelFile/ExcelFile/Excel/Copied.tsx +4 -4
- package/src/components/ExcelFile/ExcelFile/Excel/CornerIndicator.tsx +10 -10
- package/src/components/ExcelFile/ExcelFile/Excel/DataEditor.tsx +5 -5
- package/src/components/ExcelFile/ExcelFile/Excel/DataViewer.tsx +10 -10
- package/src/components/ExcelFile/ExcelFile/Excel/FloatingRect.tsx +6 -6
- package/src/components/ExcelFile/ExcelFile/Excel/HeaderRow.tsx +1 -1
- package/src/components/ExcelFile/ExcelFile/Excel/Row.tsx +1 -1
- package/src/components/ExcelFile/ExcelFile/Excel/RowIndicator.tsx +34 -27
- package/src/components/ExcelFile/ExcelFile/Excel/Selected.tsx +5 -5
- package/src/components/ExcelFile/ExcelFile/Excel/{Spreadsheet.css → Spreadsheet.scss} +21 -37
- package/src/components/ExcelFile/ExcelFile/Excel/Spreadsheet.tsx +87 -78
- package/src/components/ExcelFile/ExcelFile/Excel/Table.tsx +2 -2
- package/src/components/ExcelFile/ExcelFile/Excel/actions.ts +121 -31
- package/src/components/ExcelFile/ExcelFile/Excel/areModelsEqual.ts +1 -1
- package/src/components/ExcelFile/ExcelFile/Excel/context.ts +4 -4
- package/src/components/ExcelFile/ExcelFile/Excel/engine/engine.ts +7 -7
- package/src/components/ExcelFile/ExcelFile/Excel/engine/formula.ts +11 -11
- package/src/components/ExcelFile/ExcelFile/Excel/engine/index.ts +2 -2
- package/src/components/ExcelFile/ExcelFile/Excel/engine/point-graph.ts +3 -3
- package/src/components/ExcelFile/ExcelFile/Excel/engine/point-hash.ts +2 -2
- package/src/components/ExcelFile/ExcelFile/Excel/engine/point-set.ts +2 -2
- package/src/components/ExcelFile/ExcelFile/Excel/index.ts +12 -11
- package/src/components/ExcelFile/ExcelFile/Excel/matrix.ts +18 -24
- package/src/components/ExcelFile/ExcelFile/Excel/point-range.ts +1 -1
- package/src/components/ExcelFile/ExcelFile/Excel/reducer.ts +311 -41
- package/src/components/ExcelFile/ExcelFile/Excel/selection.ts +5 -5
- package/src/components/ExcelFile/ExcelFile/Excel/types.ts +14 -66
- package/src/components/ExcelFile/ExcelFile/Excel/typings/fast-formula-parser.d.ts +8 -8
- package/src/components/ExcelFile/ExcelFile/Excel/use-dispatch.ts +2 -2
- package/src/components/ExcelFile/ExcelFile/Excel/use-selector.ts +3 -3
- package/src/components/ExcelFile/ExcelFile/Excel/util.ts +21 -22
- package/src/components/ExcelFile/ExcelFile/ExcelFile.scss +0 -3
- package/src/components/ExcelFile/ExcelFile/ExcelFile.tsx +45 -403
- package/src/components/ExcelFile/ExcelFile.stories.tsx +10 -29
- package/src/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.tsx +1 -12
- package/src/components/ExcelFile/ExcelToolBar/ExcelToolBar.scss +0 -3
- package/src/components/ExcelFile/ExcelToolBar/ExcelToolBar.tsx +147 -127
- package/src/components/ExcelFile/Types.ts +3 -70
- package/src/components/ExcelFile/index.ts +1 -1
- package/src/components/Form/Form.d.ts +3 -0
- package/src/components/Form/Form.scss +48 -4
- package/src/components/Form/Form.stories.tsx +244 -137
- package/src/components/Form/Form.ts +2 -0
- package/src/components/Form/Forms.tsx +25 -0
- package/src/components/Form/index.ts +1 -1
- package/src/components/Icon/iconList.ts +23 -0
- package/src/components/Icon/types.ts +1 -1
- package/src/components/IconButton/IconButton.scss +1 -1
- package/src/components/MenuOption/types.ts +7 -6
- package/src/components/MiniModal/MiniModal.scss +5 -0
- package/src/components/MiniModal/MiniModal.stories.tsx +95 -0
- package/src/components/MiniModal/MiniModal.tsx +11 -6
- package/src/components/MiniModal/types.ts +6 -6
- package/src/components/ModulesChip/ModuleChip.scss +20 -0
- package/src/components/ModulesChip/ModuleChip.stories.tsx +41 -0
- package/src/components/ModulesChip/ModuleChip.tsx +31 -0
- package/src/components/ModulesChip/index.ts +1 -0
- package/src/components/ModulesChip/types.ts +14 -0
- package/src/components/MultiSelect/Dropdown.tsx +6 -1
- package/src/components/MultiSelect/MultiSelect.scss +17 -10
- package/src/components/MultiSelect/MultiSelect.stories.tsx +16 -4
- package/src/components/MultiSelect/MultiSelect.tsx +11 -4
- package/src/components/MultiSelect/MultiSelectTypes.ts +4 -3
- package/src/components/Select/Select.scss +4 -0
- package/src/components/Select/Select.tsx +2 -2
- package/src/components/Toastify/Toastify.stories.tsx +52 -0
- package/src/components/Toastify/Toastify.tsx +66 -0
- package/src/components/Toastify/index.ts +1 -0
- package/src/components/Toastify/types.ts +8 -0
- package/src/components/Tooltip/Tooltip.tsx +2 -1
- package/src/components/Tooltip/types.ts +6 -0
- package/src/components/Typography/Typography.scss +12 -4
- package/src/components/Typography/Typography.stories.tsx +2 -0
- package/src/components/Typography/Typography.tsx +2 -0
- package/src/components/Typography/types.ts +1 -0
- package/src/index.ts +9 -1
- package/src/components/ExcelFile/ChangeExcelStyles.tsx +0 -78
- package/src/components/ExcelFile/ImportExcelStyles.tsx +0 -86
- package/src/components/Form/Form.tsx +0 -57
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import classNames from
|
|
3
|
-
import * as Actions from
|
|
4
|
-
import * as Types from
|
|
5
|
-
import useDispatch from
|
|
6
|
-
import useSelector from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import * as Actions from './actions';
|
|
4
|
+
import * as Types from './types';
|
|
5
|
+
import useDispatch from './use-dispatch';
|
|
6
|
+
import useSelector from './use-selector';
|
|
7
7
|
|
|
8
8
|
const RowIndicator: Types.RowIndicatorComponent = ({
|
|
9
9
|
row,
|
|
@@ -12,7 +12,7 @@ const RowIndicator: Types.RowIndicatorComponent = ({
|
|
|
12
12
|
onSelect,
|
|
13
13
|
}) => {
|
|
14
14
|
const [height, setHeight] = React.useState(0);
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
// Function to handle the start of the resize (mouse down)
|
|
17
17
|
const onMouseDown = (e: React.MouseEvent) => {
|
|
18
18
|
const startY = e.clientY;
|
|
@@ -22,25 +22,32 @@ const RowIndicator: Types.RowIndicatorComponent = ({
|
|
|
22
22
|
const newHeight = height + (moveEvent.clientY - startY);
|
|
23
23
|
setHeight(newHeight);
|
|
24
24
|
// Fetch the floating rectangle element from the DOM
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
const selectedAllRow = document.querySelector(
|
|
26
|
+
'.Spreadsheet__floating-rect--selected'
|
|
27
|
+
);
|
|
28
|
+
const selectedSingleRow = document.querySelector(
|
|
29
|
+
'.Spreadsheet__active-cell'
|
|
30
|
+
);
|
|
27
31
|
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
// If the element exists, update its height
|
|
33
|
+
if (
|
|
34
|
+
selectedAllRow instanceof HTMLElement &&
|
|
35
|
+
selectedSingleRow instanceof HTMLElement
|
|
36
|
+
) {
|
|
37
|
+
selectedAllRow.style.height = `${newHeight}px`;
|
|
38
|
+
selectedSingleRow.style.height = `${newHeight}px`;
|
|
39
|
+
}
|
|
33
40
|
};
|
|
34
41
|
|
|
35
42
|
// Function to stop the resizing (mouse up)
|
|
36
43
|
const onMouseUp = () => {
|
|
37
|
-
document.removeEventListener(
|
|
38
|
-
document.removeEventListener(
|
|
44
|
+
document.removeEventListener('mousemove', onMouseMove);
|
|
45
|
+
document.removeEventListener('mouseup', onMouseUp);
|
|
39
46
|
};
|
|
40
47
|
|
|
41
48
|
// Add event listeners for mouse move and mouse up
|
|
42
|
-
document.addEventListener(
|
|
43
|
-
document.addEventListener(
|
|
49
|
+
document.addEventListener('mousemove', onMouseMove);
|
|
50
|
+
document.addEventListener('mouseup', onMouseUp);
|
|
44
51
|
};
|
|
45
52
|
|
|
46
53
|
const handleClick = React.useCallback(
|
|
@@ -52,9 +59,9 @@ const RowIndicator: Types.RowIndicatorComponent = ({
|
|
|
52
59
|
|
|
53
60
|
return (
|
|
54
61
|
<th
|
|
55
|
-
|
|
56
|
-
className={classNames(
|
|
57
|
-
|
|
62
|
+
style={{ height: `${height}px`, minWidth: '60px', position: 'relative' }}
|
|
63
|
+
className={classNames('Spreadsheet__header', {
|
|
64
|
+
'Spreadsheet__header--selected': selected,
|
|
58
65
|
})}
|
|
59
66
|
onClick={handleClick}
|
|
60
67
|
tabIndex={0}
|
|
@@ -63,13 +70,13 @@ const RowIndicator: Types.RowIndicatorComponent = ({
|
|
|
63
70
|
<div
|
|
64
71
|
onMouseDown={onMouseDown}
|
|
65
72
|
style={{
|
|
66
|
-
zIndex:
|
|
67
|
-
height:
|
|
68
|
-
position:
|
|
73
|
+
zIndex: 'inherit',
|
|
74
|
+
height: '2px',
|
|
75
|
+
position: 'absolute',
|
|
69
76
|
right: 0,
|
|
70
77
|
bottom: 0,
|
|
71
|
-
width:
|
|
72
|
-
cursor:
|
|
78
|
+
width: '100%',
|
|
79
|
+
cursor: 'ns-resize',
|
|
73
80
|
}}
|
|
74
81
|
/>
|
|
75
82
|
</th>
|
|
@@ -80,7 +87,7 @@ export default RowIndicator;
|
|
|
80
87
|
|
|
81
88
|
export const enhance = (
|
|
82
89
|
RowIndicatorComponent: Types.RowIndicatorComponent
|
|
83
|
-
): React.FC<Omit<Types.RowIndicatorProps,
|
|
90
|
+
): React.FC<Omit<Types.RowIndicatorProps, 'selected' | 'onSelect'>> => {
|
|
84
91
|
return function RowIndicatorWrapper(props) {
|
|
85
92
|
const dispatch = useDispatch();
|
|
86
93
|
const selected = useSelector((state) =>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { getSelectedDimensions } from
|
|
3
|
-
import FloatingRect from
|
|
4
|
-
import useSelector from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { getSelectedDimensions } from './util';
|
|
3
|
+
import FloatingRect from './FloatingRect';
|
|
4
|
+
import useSelector from './use-selector';
|
|
5
5
|
|
|
6
6
|
const Selected: React.FC = () => {
|
|
7
|
-
const selected = useSelector((state) => state.selected);
|
|
7
|
+
const selected = useSelector((state) => state.selected);
|
|
8
8
|
const dimensions = useSelector(
|
|
9
9
|
(state) =>
|
|
10
10
|
selected &&
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
.Spreadsheet {
|
|
2
|
-
--background-color:
|
|
3
|
-
--text-color:
|
|
4
|
-
--readonly-text-color:
|
|
5
|
-
--outline-color:
|
|
6
|
-
--outline-background-color:
|
|
7
|
-
--border-color:
|
|
8
|
-
--header-background-color:
|
|
9
|
-
--elevation:
|
|
2
|
+
--background-color: var(--drawer-footer-bg);
|
|
3
|
+
--text-color: var(--text-color);
|
|
4
|
+
--readonly-text-color: var(--toggle-strip-active);
|
|
5
|
+
--outline-color: var(--toggle-strip-active);
|
|
6
|
+
--outline-background-color: var(--overlay-bg);
|
|
7
|
+
--border-color: var(--toggle-strip-color);
|
|
8
|
+
--header-background-color: var(--pop-up-background-blur);
|
|
9
|
+
--elevation: var(--brand-color);
|
|
10
10
|
|
|
11
11
|
position: relative;
|
|
12
12
|
overflow: visible;
|
|
@@ -15,14 +15,6 @@
|
|
|
15
15
|
display: inline-block;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
.Spreadsheet--dark-mode {
|
|
19
|
-
--background-color: black;
|
|
20
|
-
--text-color: white;
|
|
21
|
-
--readonly-text-color: rgba(255, 255, 255, 0.4);
|
|
22
|
-
--header-background-color: rgba(255, 255, 255, 0.04);
|
|
23
|
-
--border-color: hsl(2deg, 0%, 19%);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
18
|
.Spreadsheet__active-cell {
|
|
27
19
|
position: absolute;
|
|
28
20
|
border: 2px solid var(--outline-color);
|
|
@@ -39,32 +31,26 @@
|
|
|
39
31
|
table-layout: fixed;
|
|
40
32
|
}
|
|
41
33
|
|
|
42
|
-
.Spreadsheet__cell,
|
|
43
|
-
.Spreadsheet__active-cell {
|
|
44
|
-
cursor: cell;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
34
|
.Spreadsheet__cell {
|
|
48
35
|
outline: none;
|
|
49
36
|
position: relative;
|
|
50
|
-
|
|
51
37
|
}
|
|
52
38
|
|
|
53
|
-
|
|
54
|
-
background-color:
|
|
55
|
-
height:7px;
|
|
56
|
-
width:7px;
|
|
57
|
-
border-radius:50%;
|
|
58
|
-
position:absolute;
|
|
59
|
-
right
|
|
39
|
+
.Spreadsheet__active-cell .Selection_dot {
|
|
40
|
+
background-color: var(--elevation);
|
|
41
|
+
height: 7px;
|
|
42
|
+
width: 7px;
|
|
43
|
+
border-radius: 50%;
|
|
44
|
+
position: absolute;
|
|
45
|
+
right: -3px;
|
|
60
46
|
z-index: 10;
|
|
61
|
-
bottom
|
|
47
|
+
bottom: -3px;
|
|
62
48
|
cursor: crosshair;
|
|
63
|
-
}
|
|
49
|
+
}
|
|
64
50
|
|
|
65
|
-
|
|
51
|
+
.Spreadsheet__cell--readonly {
|
|
66
52
|
color: var(--readonly-text-color);
|
|
67
|
-
}
|
|
53
|
+
}
|
|
68
54
|
|
|
69
55
|
.Spreadsheet__cell,
|
|
70
56
|
.Spreadsheet__header {
|
|
@@ -75,19 +61,17 @@
|
|
|
75
61
|
text-align: left;
|
|
76
62
|
box-sizing: border-box;
|
|
77
63
|
user-select: none;
|
|
78
|
-
|
|
79
64
|
}
|
|
80
65
|
|
|
81
66
|
.Spreadsheet__header {
|
|
82
67
|
background: var(--header-background-color);
|
|
83
68
|
color: var(--readonly-text-color);
|
|
84
69
|
text-align: center;
|
|
85
|
-
font: inherit;
|
|
86
70
|
}
|
|
87
71
|
|
|
88
72
|
.Spreadsheet__header--selected {
|
|
89
|
-
background:
|
|
90
|
-
color:
|
|
73
|
+
background: var(--brand-color);
|
|
74
|
+
color: var(--tooltip-text-color);
|
|
91
75
|
}
|
|
92
76
|
|
|
93
77
|
.Spreadsheet__header,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import classNames from
|
|
3
|
-
import * as Types from
|
|
4
|
-
import * as Actions from
|
|
5
|
-
import * as Matrix from
|
|
6
|
-
import * as Point from
|
|
7
|
-
import { Selection } from
|
|
8
|
-
import reducer, { INITIAL_STATE, hasKeyDownHandler } from
|
|
9
|
-
import context from
|
|
10
|
-
import { Model, createFormulaParser } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import * as Types from './types';
|
|
4
|
+
import * as Actions from './actions';
|
|
5
|
+
import * as Matrix from './matrix';
|
|
6
|
+
import * as Point from './point';
|
|
7
|
+
import { Selection } from './selection';
|
|
8
|
+
import reducer, { INITIAL_STATE, hasKeyDownHandler } from './reducer';
|
|
9
|
+
import context from './context';
|
|
10
|
+
import { Model, createFormulaParser } from './engine';
|
|
11
11
|
import {
|
|
12
12
|
range,
|
|
13
13
|
readTextFromClipboard,
|
|
@@ -16,27 +16,28 @@ import {
|
|
|
16
16
|
getCSV,
|
|
17
17
|
shouldHandleClipboardEvent,
|
|
18
18
|
isFocusedWithin,
|
|
19
|
-
} from
|
|
19
|
+
} from './util';
|
|
20
20
|
|
|
21
|
-
import DefaultTable from
|
|
22
|
-
import DefaultRow from
|
|
23
|
-
import DefaultHeaderRow from
|
|
21
|
+
import DefaultTable from './Table';
|
|
22
|
+
import DefaultRow from './Row';
|
|
23
|
+
import DefaultHeaderRow from './HeaderRow';
|
|
24
24
|
import DefaultCornerIndicator, {
|
|
25
25
|
enhance as enhanceCornerIndicator,
|
|
26
|
-
} from
|
|
26
|
+
} from './CornerIndicator';
|
|
27
27
|
import DefaultColumnIndicator, {
|
|
28
28
|
enhance as enhanceColumnIndicator,
|
|
29
|
-
} from
|
|
29
|
+
} from './ColumnIndicator';
|
|
30
30
|
import DefaultRowIndicator, {
|
|
31
31
|
enhance as enhanceRowIndicator,
|
|
32
|
-
} from
|
|
33
|
-
import { Cell as DefaultCell, enhance as enhanceCell } from
|
|
34
|
-
import DefaultDataViewer from
|
|
35
|
-
import DefaultDataEditor from
|
|
36
|
-
import ActiveCell from
|
|
37
|
-
import Selected from
|
|
38
|
-
import Copied from
|
|
39
|
-
import
|
|
32
|
+
} from './RowIndicator';
|
|
33
|
+
import { Cell as DefaultCell, enhance as enhanceCell } from './Cell';
|
|
34
|
+
import DefaultDataViewer from './DataViewer';
|
|
35
|
+
import DefaultDataEditor from './DataEditor';
|
|
36
|
+
import ActiveCell from './ActiveCell';
|
|
37
|
+
import Selected from './Selected';
|
|
38
|
+
import Copied from './Copied';
|
|
39
|
+
import './Spreadsheet.scss';
|
|
40
|
+
import ExcelToolBar from '../../ExcelToolBar/ExcelToolBar';
|
|
40
41
|
|
|
41
42
|
/** The Spreadsheet component props */
|
|
42
43
|
export type Props<CellType extends Types.CellBase> = {
|
|
@@ -48,7 +49,6 @@ export type Props<CellType extends Types.CellBase> = {
|
|
|
48
49
|
* Use dark colors that complement dark mode
|
|
49
50
|
* @defaultValue `false`
|
|
50
51
|
*/
|
|
51
|
-
darkMode?: boolean;
|
|
52
52
|
/**
|
|
53
53
|
* Function used to create the formula parser (instance of
|
|
54
54
|
* "fast-formula-parser") used by the Spreadsheet by getting the spreadsheet's
|
|
@@ -119,7 +119,6 @@ const Spreadsheet = <CellType extends Types.CellBase>(
|
|
|
119
119
|
): React.ReactElement => {
|
|
120
120
|
const {
|
|
121
121
|
className,
|
|
122
|
-
darkMode,
|
|
123
122
|
columnLabels,
|
|
124
123
|
rowLabels,
|
|
125
124
|
// hideColumnIndicators,
|
|
@@ -185,8 +184,13 @@ const Spreadsheet = <CellType extends Types.CellBase>(
|
|
|
185
184
|
const setData = useAction(Actions.setData);
|
|
186
185
|
const setCreateFormulaParser = useAction(Actions.setCreateFormulaParser);
|
|
187
186
|
const setSelection = useAction(Actions.setSelection);
|
|
187
|
+
const onBold = useAction(Actions.bold);
|
|
188
|
+
const onItalic = useAction(Actions.italic);
|
|
189
|
+
const onUnderline = useAction(Actions.underline);
|
|
190
|
+
const setColor = useAction(Actions.color);
|
|
191
|
+
const setBackgroundColor = useAction(Actions.backgroundStyle);
|
|
192
|
+
const setFormatePainter = useAction(Actions.formatePainter);
|
|
188
193
|
|
|
189
|
-
// Track active
|
|
190
194
|
const prevActiveRef = React.useRef<Point.Point | null>(state.active);
|
|
191
195
|
React.useEffect(() => {
|
|
192
196
|
if (state.active !== prevActiveRef.current) {
|
|
@@ -214,7 +218,6 @@ const Spreadsheet = <CellType extends Types.CellBase>(
|
|
|
214
218
|
prevEvaluatedDataRef.current = state.model.evaluatedData;
|
|
215
219
|
}, [state?.model?.evaluatedData, onEvaluatedDataChange]);
|
|
216
220
|
|
|
217
|
-
// Listen to selection changes
|
|
218
221
|
const prevSelectedRef = React.useRef<Selection>(state.selected);
|
|
219
222
|
React.useEffect(() => {
|
|
220
223
|
if (!state.selected.equals(prevSelectedRef.current)) {
|
|
@@ -243,7 +246,7 @@ const Spreadsheet = <CellType extends Types.CellBase>(
|
|
|
243
246
|
}, [props.selected, setSelection]);
|
|
244
247
|
|
|
245
248
|
// Update data when props.data changes
|
|
246
|
-
|
|
249
|
+
let prevDataPropRef = React.useRef<Matrix.Matrix<CellType> | undefined>(
|
|
247
250
|
props.data
|
|
248
251
|
);
|
|
249
252
|
React.useEffect(() => {
|
|
@@ -338,14 +341,14 @@ const Spreadsheet = <CellType extends Types.CellBase>(
|
|
|
338
341
|
|
|
339
342
|
const handleMouseUp = React.useCallback(() => {
|
|
340
343
|
onDragEnd();
|
|
341
|
-
document.removeEventListener(
|
|
344
|
+
document.removeEventListener('mouseup', handleMouseUp);
|
|
342
345
|
}, [onDragEnd]);
|
|
343
346
|
|
|
344
347
|
const handleMouseMove = React.useCallback(
|
|
345
348
|
(event: React.MouseEvent) => {
|
|
346
349
|
if (!state.dragging && event.buttons === 1) {
|
|
347
350
|
onDragStart();
|
|
348
|
-
document.addEventListener(
|
|
351
|
+
document.addEventListener('mouseup', handleMouseUp);
|
|
349
352
|
}
|
|
350
353
|
},
|
|
351
354
|
[state, onDragStart, handleMouseUp]
|
|
@@ -374,14 +377,14 @@ const Spreadsheet = <CellType extends Types.CellBase>(
|
|
|
374
377
|
);
|
|
375
378
|
|
|
376
379
|
React.useEffect(() => {
|
|
377
|
-
document.addEventListener(
|
|
378
|
-
document.addEventListener(
|
|
379
|
-
document.addEventListener(
|
|
380
|
+
document.addEventListener('cut', handleCut);
|
|
381
|
+
document.addEventListener('copy', handleCopy);
|
|
382
|
+
document.addEventListener('paste', handlePaste);
|
|
380
383
|
|
|
381
384
|
return () => {
|
|
382
|
-
document.removeEventListener(
|
|
383
|
-
document.removeEventListener(
|
|
384
|
-
document.removeEventListener(
|
|
385
|
+
document.removeEventListener('cut', handleCut);
|
|
386
|
+
document.removeEventListener('copy', handleCopy);
|
|
387
|
+
document.removeEventListener('paste', handlePaste);
|
|
385
388
|
};
|
|
386
389
|
}, [handleCut, handleCopy, handlePaste]);
|
|
387
390
|
|
|
@@ -390,35 +393,33 @@ const Spreadsheet = <CellType extends Types.CellBase>(
|
|
|
390
393
|
<Table columns={size.columns}>
|
|
391
394
|
<HeaderRow>
|
|
392
395
|
{<CornerIndicator />}
|
|
393
|
-
{
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
)}
|
|
396
|
+
{range(size.columns).map((columnNumber) =>
|
|
397
|
+
columnLabels ? (
|
|
398
|
+
<ColumnIndicator
|
|
399
|
+
key={columnNumber}
|
|
400
|
+
column={columnNumber}
|
|
401
|
+
label={
|
|
402
|
+
columnNumber in columnLabels
|
|
403
|
+
? columnLabels[columnNumber]
|
|
404
|
+
: null
|
|
405
|
+
}
|
|
406
|
+
/>
|
|
407
|
+
) : (
|
|
408
|
+
<ColumnIndicator key={columnNumber} column={columnNumber} />
|
|
409
|
+
)
|
|
410
|
+
)}
|
|
409
411
|
</HeaderRow>
|
|
410
412
|
{range(size.rows).map((rowNumber) => (
|
|
411
413
|
<Row key={rowNumber} row={rowNumber}>
|
|
412
|
-
{
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
))}
|
|
414
|
+
{rowLabels ? (
|
|
415
|
+
<RowIndicator
|
|
416
|
+
key={rowNumber}
|
|
417
|
+
row={rowNumber}
|
|
418
|
+
label={rowNumber in rowLabels ? rowLabels[rowNumber] : null}
|
|
419
|
+
/>
|
|
420
|
+
) : (
|
|
421
|
+
<RowIndicator key={rowNumber} row={rowNumber} />
|
|
422
|
+
)}
|
|
422
423
|
{range(size.columns).map((columnNumber) => (
|
|
423
424
|
<Cell
|
|
424
425
|
key={columnNumber}
|
|
@@ -460,24 +461,32 @@ const Spreadsheet = <CellType extends Types.CellBase>(
|
|
|
460
461
|
|
|
461
462
|
const rootNode = React.useMemo(
|
|
462
463
|
() => (
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
464
|
+
<>
|
|
465
|
+
<ExcelToolBar
|
|
466
|
+
data={props.data}
|
|
467
|
+
onBold={onBold}
|
|
468
|
+
onItalic={onItalic}
|
|
469
|
+
onUnderline={onUnderline}
|
|
470
|
+
setColor={setColor}
|
|
471
|
+
setBackgroundColor={setBackgroundColor}
|
|
472
|
+
setFormatePainter={setFormatePainter}
|
|
473
|
+
/>
|
|
474
|
+
<div
|
|
475
|
+
ref={rootRef}
|
|
476
|
+
className={classNames('Spreadsheet', className)}
|
|
477
|
+
onKeyPress={onKeyPress}
|
|
478
|
+
onKeyDown={handleKeyDown}
|
|
479
|
+
onMouseMove={handleMouseMove}
|
|
480
|
+
>
|
|
481
|
+
{tableNode}
|
|
482
|
+
{activeCellNode}
|
|
483
|
+
<Selected />
|
|
484
|
+
<Copied />
|
|
485
|
+
</div>
|
|
486
|
+
</>
|
|
477
487
|
),
|
|
478
488
|
[
|
|
479
489
|
className,
|
|
480
|
-
darkMode,
|
|
481
490
|
onKeyPress,
|
|
482
491
|
handleKeyDown,
|
|
483
492
|
handleMouseMove,
|