pixel-react 1.1.8 → 1.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. package/lib/components/AddButton/AddButton.d.ts +5 -0
  2. package/lib/components/AddButton/AddButton.stories.d.ts +6 -0
  3. package/lib/components/AddButton/index.d.ts +1 -0
  4. package/lib/components/AddButton/types.d.ts +4 -0
  5. package/lib/components/ExcelFile/ChangeExcelStyles.d.ts +14 -0
  6. package/lib/components/ExcelFile/ColorBarSelector/ColorBarSelector.d.ts +8 -0
  7. package/lib/components/ExcelFile/ContextMenu/ContextMenu.d.ts +4 -0
  8. package/lib/components/ExcelFile/ExcelFile/Excel/ActiveCell.d.ts +7 -0
  9. package/lib/components/ExcelFile/ExcelFile/Excel/Cell.d.ts +4 -0
  10. package/lib/components/ExcelFile/ExcelFile/Excel/ColumnIndicator.d.ts +5 -0
  11. package/lib/components/ExcelFile/ExcelFile/Excel/Copied.d.ts +3 -0
  12. package/lib/components/ExcelFile/ExcelFile/Excel/CornerIndicator.d.ts +5 -0
  13. package/lib/components/ExcelFile/ExcelFile/Excel/DataEditor.d.ts +5 -0
  14. package/lib/components/ExcelFile/ExcelFile/Excel/DataViewer.d.ts +8 -0
  15. package/lib/components/ExcelFile/ExcelFile/Excel/FloatingRect.d.ts +10 -0
  16. package/lib/components/ExcelFile/ExcelFile/Excel/HeaderRow.d.ts +3 -0
  17. package/lib/components/ExcelFile/ExcelFile/Excel/Row.d.ts +3 -0
  18. package/lib/components/ExcelFile/ExcelFile/Excel/RowIndicator.d.ts +5 -0
  19. package/lib/components/ExcelFile/ExcelFile/Excel/Selected.d.ts +3 -0
  20. package/lib/components/ExcelFile/ExcelFile/Excel/Spreadsheet.d.ts +81 -0
  21. package/lib/components/ExcelFile/ExcelFile/Excel/Table.d.ts +3 -0
  22. package/lib/components/ExcelFile/ExcelFile/Excel/actions.d.ts +130 -0
  23. package/lib/components/ExcelFile/ExcelFile/Excel/areModelsEqual.d.ts +1 -0
  24. package/lib/components/ExcelFile/ExcelFile/Excel/context.d.ts +8 -0
  25. package/lib/components/ExcelFile/ExcelFile/Excel/engine/engine.d.ts +22 -0
  26. package/lib/components/ExcelFile/ExcelFile/Excel/engine/formula.d.ts +17 -0
  27. package/lib/components/ExcelFile/ExcelFile/Excel/engine/index.d.ts +2 -0
  28. package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-graph.d.ts +21 -0
  29. package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-hash.d.ts +3 -0
  30. package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-set.d.ts +24 -0
  31. package/lib/components/ExcelFile/ExcelFile/Excel/index.d.ts +13 -0
  32. package/lib/components/ExcelFile/ExcelFile/Excel/matrix.d.ts +67 -0
  33. package/lib/components/ExcelFile/ExcelFile/Excel/point-range.d.ts +22 -0
  34. package/lib/components/ExcelFile/ExcelFile/Excel/point.d.ts +11 -0
  35. package/lib/components/ExcelFile/ExcelFile/Excel/reducer.d.ts +27 -0
  36. package/lib/components/ExcelFile/ExcelFile/Excel/selection.d.ts +95 -0
  37. package/lib/components/ExcelFile/ExcelFile/Excel/types.d.ts +215 -0
  38. package/lib/components/ExcelFile/ExcelFile/Excel/use-dispatch.d.ts +3 -0
  39. package/lib/components/ExcelFile/ExcelFile/Excel/use-selector.d.ts +3 -0
  40. package/lib/components/ExcelFile/ExcelFile/Excel/util.d.ts +45 -0
  41. package/lib/components/ExcelFile/ExcelFile/ExcelFile.d.ts +3 -0
  42. package/lib/components/ExcelFile/ExcelFile.stories.d.ts +6 -0
  43. package/lib/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.d.ts +15 -0
  44. package/lib/components/ExcelFile/ExcelToolBar/ExcelToolBar.d.ts +3 -0
  45. package/lib/components/ExcelFile/ImportExcelStyles.d.ts +24 -0
  46. package/lib/components/ExcelFile/Types.d.ts +176 -0
  47. package/lib/components/ExcelFile/index.d.ts +1 -0
  48. package/lib/components/IconRadioGroup/IconRadioGroup.d.ts +5 -0
  49. package/lib/components/IconRadioGroup/IconRadioGroup.stories.d.ts +7 -0
  50. package/lib/components/IconRadioGroup/index.d.ts +1 -0
  51. package/lib/components/IconRadioGroup/type.d.ts +41 -0
  52. package/lib/index.d.ts +45 -1
  53. package/lib/index.esm.js +682 -244
  54. package/lib/index.esm.js.map +1 -1
  55. package/lib/index.js +682 -243
  56. package/lib/index.js.map +1 -1
  57. package/lib/tsconfig.tsbuildinfo +1 -1
  58. package/lib/utils/find/findAndInsert.d.ts +7 -0
  59. package/lib/utils/find/findAndInsert.stories.d.ts +7 -0
  60. package/package.json +4 -2
  61. package/src/assets/Themes/BaseTheme.scss +1 -0
  62. package/src/assets/Themes/DarkTheme.scss +1 -0
  63. package/src/assets/icons/all_borders.svg +3 -0
  64. package/src/assets/icons/bold.svg +3 -0
  65. package/src/assets/icons/border_bottom.svg +3 -0
  66. package/src/assets/icons/border_left.svg +3 -0
  67. package/src/assets/icons/border_right.svg +3 -0
  68. package/src/assets/icons/border_top.svg +3 -0
  69. package/src/assets/icons/clone_icon.svg +3 -0
  70. package/src/assets/icons/double_underline.svg +5 -0
  71. package/src/assets/icons/fill_color.svg +7 -0
  72. package/src/assets/icons/formate_painter.svg +5 -0
  73. package/src/assets/icons/full_access_icon.svg +4 -0
  74. package/src/assets/icons/history_icon.svg +19 -0
  75. package/src/assets/icons/italic.svg +3 -0
  76. package/src/assets/icons/jira.svg +3 -0
  77. package/src/assets/icons/linked_defects.svg +11 -0
  78. package/src/assets/icons/move_icon.svg +5 -0
  79. package/src/assets/icons/no_access_icon.svg +4 -0
  80. package/src/assets/icons/no_border.svg +3 -0
  81. package/src/assets/icons/strike_through.svg +3 -0
  82. package/src/assets/icons/text_align_center.svg +3 -0
  83. package/src/assets/icons/text_align_left.svg +3 -0
  84. package/src/assets/icons/text_align_right.svg +3 -0
  85. package/src/assets/icons/text_color.svg +3 -0
  86. package/src/assets/icons/underline.svg +4 -0
  87. package/src/assets/icons/view_access_icon.svg +4 -0
  88. package/src/components/AppHeader/AppHeader.scss +14 -9
  89. package/src/components/AppHeader/AppHeader.stories.tsx +1 -0
  90. package/src/components/AppHeader/AppHeader.tsx +7 -5
  91. package/src/components/ExcelFile/ChangeExcelStyles.tsx +78 -0
  92. package/src/components/ExcelFile/ColorBarselector/ColorBarSelector.scss +13 -0
  93. package/src/components/ExcelFile/ColorBarselector/ColorBarSelector.tsx +43 -0
  94. package/src/components/ExcelFile/ContextMenu/ContextMenu.scss +102 -0
  95. package/src/components/ExcelFile/ContextMenu/ContextMenu.tsx +104 -0
  96. package/src/components/ExcelFile/ExcelFile/Excel/ActiveCell.tsx +131 -0
  97. package/src/components/ExcelFile/ExcelFile/Excel/Cell.tsx +201 -0
  98. package/src/components/ExcelFile/ExcelFile/Excel/ColumnIndicator.tsx +123 -0
  99. package/src/components/ExcelFile/ExcelFile/Excel/Copied.tsx +25 -0
  100. package/src/components/ExcelFile/ExcelFile/Excel/CornerIndicator.tsx +49 -0
  101. package/src/components/ExcelFile/ExcelFile/Excel/DataEditor.tsx +37 -0
  102. package/src/components/ExcelFile/ExcelFile/Excel/DataViewer.tsx +46 -0
  103. package/src/components/ExcelFile/ExcelFile/Excel/FloatingRect.tsx +31 -0
  104. package/src/components/ExcelFile/ExcelFile/Excel/HeaderRow.tsx +5 -0
  105. package/src/components/ExcelFile/ExcelFile/Excel/Row.tsx +5 -0
  106. package/src/components/ExcelFile/ExcelFile/Excel/RowIndicator.tsx +102 -0
  107. package/src/components/ExcelFile/ExcelFile/Excel/Selected.tsx +32 -0
  108. package/src/components/ExcelFile/ExcelFile/Excel/Spreadsheet.css +144 -0
  109. package/src/components/ExcelFile/ExcelFile/Excel/Spreadsheet.tsx +494 -0
  110. package/src/components/ExcelFile/ExcelFile/Excel/Table.tsx +19 -0
  111. package/src/components/ExcelFile/ExcelFile/Excel/actions.ts +302 -0
  112. package/src/components/ExcelFile/ExcelFile/Excel/areModelsEqual.ts +18 -0
  113. package/src/components/ExcelFile/ExcelFile/Excel/context.ts +12 -0
  114. package/src/components/ExcelFile/ExcelFile/Excel/engine/engine.ts +200 -0
  115. package/src/components/ExcelFile/ExcelFile/Excel/engine/formula.ts +137 -0
  116. package/src/components/ExcelFile/ExcelFile/Excel/engine/index.ts +2 -0
  117. package/src/components/ExcelFile/ExcelFile/Excel/engine/point-graph.ts +154 -0
  118. package/src/components/ExcelFile/ExcelFile/Excel/engine/point-hash.ts +10 -0
  119. package/src/components/ExcelFile/ExcelFile/Excel/engine/point-set.ts +69 -0
  120. package/src/components/ExcelFile/ExcelFile/Excel/index.ts +48 -0
  121. package/src/components/ExcelFile/ExcelFile/Excel/matrix.ts +388 -0
  122. package/src/components/ExcelFile/ExcelFile/Excel/point-range.ts +82 -0
  123. package/src/components/ExcelFile/ExcelFile/Excel/point.ts +15 -0
  124. package/src/components/ExcelFile/ExcelFile/Excel/reducer.ts +682 -0
  125. package/src/components/ExcelFile/ExcelFile/Excel/selection.ts +257 -0
  126. package/src/components/ExcelFile/ExcelFile/Excel/types.ts +269 -0
  127. package/src/components/ExcelFile/ExcelFile/Excel/typings/fast-formula-parser.d.ts +58 -0
  128. package/src/components/ExcelFile/ExcelFile/Excel/use-dispatch.ts +8 -0
  129. package/src/components/ExcelFile/ExcelFile/Excel/use-selector.ts +9 -0
  130. package/src/components/ExcelFile/ExcelFile/Excel/util.ts +173 -0
  131. package/src/components/ExcelFile/ExcelFile/ExcelFile.scss +27 -0
  132. package/src/components/ExcelFile/ExcelFile/ExcelFile.tsx +520 -0
  133. package/src/components/ExcelFile/ExcelFile.stories.tsx +132 -0
  134. package/src/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.scss +16 -0
  135. package/src/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.tsx +79 -0
  136. package/src/components/ExcelFile/ExcelToolBar/ExcelToolBar.scss +22 -0
  137. package/src/components/ExcelFile/ExcelToolBar/ExcelToolBar.tsx +271 -0
  138. package/src/components/ExcelFile/ImportExcelStyles.tsx +86 -0
  139. package/src/components/ExcelFile/Types.ts +241 -0
  140. package/src/components/ExcelFile/index.ts +1 -0
  141. package/src/components/Icon/Icons.scss +2 -3
  142. package/src/components/Icon/iconList.ts +50 -1
  143. package/src/components/IconRadioGroup/IconRadioGroup.scss +60 -0
  144. package/src/components/IconRadioGroup/IconRadioGroup.stories.tsx +108 -0
  145. package/src/components/IconRadioGroup/IconRadioGroup.tsx +72 -0
  146. package/src/components/IconRadioGroup/index.ts +1 -0
  147. package/src/components/IconRadioGroup/type.ts +50 -0
  148. package/src/index.ts +2 -0
@@ -0,0 +1,123 @@
1
+ import * as React from "react";
2
+ import classNames from "classnames";
3
+ import * as Types from "./types";
4
+ import * as Point from "./point";
5
+ import * as Actions from "./actions";
6
+ import useDispatch from "./use-dispatch";
7
+ import useSelector from "./use-selector";
8
+
9
+ const ColumnIndicator: Types.ColumnIndicatorComponent = ({
10
+ column,
11
+ label,
12
+ selected,
13
+ onSelect,
14
+ }) => {
15
+ const dispatch = useDispatch();
16
+ const [width, setWidth] = React.useState(100);
17
+
18
+ // Function to handle the start of the resize (mouse down)
19
+ const onMouseDown = (e: React.MouseEvent) => {
20
+ const startX = e.clientX;
21
+
22
+ // Function to handle mouse movement (resize)
23
+ const onMouseMove = (moveEvent: MouseEvent) => {
24
+ const newWidth = width + (moveEvent.clientX - startX);
25
+ setWidth(newWidth);
26
+
27
+ // const selectedAllRow = document.querySelector(".Spreadsheet__floating-rect--selected");
28
+ // const selectedSingleRow = document.querySelector(".Spreadsheet__active-cell");
29
+
30
+ // // If the element exists, update its height
31
+ // if (selectedAllRow instanceof HTMLElement&&selectedSingleRow instanceof HTMLElement) {
32
+ // selectedAllRow.style.width = `${newWidth}px`; // Set the width
33
+ // selectedSingleRow.style.width = `${newWidth}px`; // Set the width
34
+ // }
35
+ };
36
+
37
+ // Function to stop the resizing (mouse up)
38
+ const onMouseUp = () => {
39
+ document.removeEventListener("mousemove", onMouseMove);
40
+ document.removeEventListener("mouseup", onMouseUp);
41
+ };
42
+
43
+ // Add event listeners for mouse move and mouse up
44
+ document.addEventListener("mousemove", onMouseMove);
45
+ document.addEventListener("mouseup", onMouseUp);
46
+ };
47
+
48
+ const activate = React.useCallback(
49
+ (point: Point.Point) => dispatch(Actions.activate(point)),
50
+ [dispatch]
51
+ );
52
+
53
+ // Handle column header click
54
+ const handleClick = React.useCallback(
55
+ (event: React.MouseEvent) => {
56
+ onSelect(column, event.shiftKey);
57
+ },
58
+ [onSelect, column]
59
+ );
60
+
61
+
62
+ return (
63
+ <th
64
+ style={{ minWidth: `${width}px`, position: "relative" }} // Use dynamic width
65
+ className={classNames("Spreadsheet__header", {
66
+ "Spreadsheet__header--selected": selected,
67
+ })}
68
+ onClick={handleClick}
69
+ tabIndex={0}
70
+ >
71
+ {label !== undefined ? label : columnIndexToLabel(column)}
72
+ <div
73
+ onMouseDown={onMouseDown}
74
+ onClick={()=>{activate}}
75
+ style={{
76
+ zIndex: "inherit",
77
+ width: "2px",
78
+ position: "absolute",
79
+ right: 0,
80
+ top: 0,
81
+ height: "100%",
82
+ cursor: "ew-resize",
83
+ }}
84
+ />
85
+ </th>
86
+ );
87
+ };
88
+
89
+ export default ColumnIndicator;
90
+
91
+ export const enhance = (
92
+ ColumnIndicatorComponent: Types.ColumnIndicatorComponent
93
+ ): React.FC<Omit<Types.ColumnIndicatorProps, "selected" | "onSelect">> => {
94
+ return function ColumnIndicatorWrapper(props) {
95
+ const dispatch = useDispatch();
96
+ const selectEntireColumn = React.useCallback(
97
+ (column: number, extend: boolean) =>
98
+ dispatch(Actions.selectEntireColumn(column, extend)),
99
+ [dispatch]
100
+ );
101
+ const selected = useSelector((state) =>
102
+ state.selected.hasEntireColumn(props.column)
103
+ );
104
+ return (
105
+ <ColumnIndicatorComponent
106
+ {...props}
107
+ selected={selected}
108
+ onSelect={selectEntireColumn}
109
+ />
110
+ );
111
+ };
112
+ };
113
+
114
+ // Utility function to convert column index to label (e.g., 0 -> A, 1 -> B, etc.)
115
+ function columnIndexToLabel(column: number): string {
116
+ let label = "";
117
+ let index = column;
118
+ while (index >= 0) {
119
+ label = String.fromCharCode(65 + (index % 26)) + label;
120
+ index = Math.floor(index / 26) - 1;
121
+ }
122
+ return label;
123
+ }
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ import FloatingRect from "./FloatingRect";
3
+ import { getRangeDimensions } from "./util";
4
+ import useSelector from "./use-selector";
5
+
6
+ const Copied: React.FC = () => {
7
+ const range = useSelector((state) => state.copied);
8
+ const dimensions = useSelector(
9
+ (state) =>
10
+ range &&
11
+ getRangeDimensions(state.rowDimensions, state.columnDimensions, range)
12
+ );
13
+ const hidden = range === null;
14
+
15
+ return (
16
+ <FloatingRect
17
+ variant="copied"
18
+ dimensions={dimensions}
19
+ hidden={hidden}
20
+ dragging={false}
21
+ />
22
+ );
23
+ };
24
+
25
+ export default Copied;
@@ -0,0 +1,49 @@
1
+ import * as React from "react";
2
+ import classNames from "classnames";
3
+ import * as Actions from "./actions";
4
+ import { EntireWorksheetSelection } from "./selection";
5
+ import * as Types from "./types";
6
+ import useDispatch from "./use-dispatch";
7
+ import useSelector from "./use-selector";
8
+
9
+ const CornerIndicator: Types.CornerIndicatorComponent = ({
10
+ selected,
11
+ onSelect,
12
+ }) => {
13
+ const handleClick = React.useCallback(() => {
14
+ onSelect();
15
+ }, [onSelect]);
16
+ return (
17
+ <th
18
+ className={classNames("Spreadsheet__header", {
19
+ "Spreadsheet__header--selected": selected,
20
+ })}
21
+ onClick={handleClick}
22
+ tabIndex={0}
23
+ />
24
+ );
25
+ };
26
+
27
+ export default CornerIndicator;
28
+
29
+ export const enhance = (
30
+ CornerIndicatorComponent: Types.CornerIndicatorComponent
31
+ ): React.FC<Omit<Types.CornerIndicatorProps, "selected" | "onSelect">> => {
32
+ return function CornerIndicatorWrapper(props) {
33
+ const dispatch = useDispatch();
34
+ const selectEntireWorksheet = React.useCallback(
35
+ () => dispatch(Actions.selectEntireWorksheet()),
36
+ [dispatch]
37
+ );
38
+ const selected = useSelector(
39
+ (state) => state.selected instanceof EntireWorksheetSelection
40
+ );
41
+ return (
42
+ <CornerIndicatorComponent
43
+ {...props}
44
+ selected={selected}
45
+ onSelect={selectEntireWorksheet}
46
+ />
47
+ );
48
+ };
49
+ };
@@ -0,0 +1,37 @@
1
+ import * as React from "react";
2
+ import * as Types from "./types";
3
+ import { moveCursorToEnd } from "./util";
4
+
5
+ /** The default Spreadsheet DataEditor component */
6
+ const DataEditor: React.FC<Types.DataEditorProps> = ({ onChange, cell }) => {
7
+ const inputRef = React.useRef<HTMLInputElement>(null);
8
+
9
+ const handleChange = React.useCallback(
10
+ (event: React.ChangeEvent<HTMLInputElement>) => {
11
+ onChange({ ...cell, value: event.target.value,style:cell?.style});
12
+ },
13
+ [onChange, cell]
14
+ );
15
+
16
+ React.useEffect(() => {
17
+ if (inputRef.current) {
18
+ moveCursorToEnd(inputRef.current);
19
+ }
20
+ }, [inputRef]);
21
+
22
+ const value = cell?.value ?? "";
23
+
24
+ return (
25
+ <div className="Spreadsheet__data-editor">
26
+ <input
27
+ ref={inputRef}
28
+ type="text"
29
+ onChange={handleChange}
30
+ value={value}
31
+ autoFocus
32
+ />
33
+ </div>
34
+ );
35
+ };
36
+
37
+ export default DataEditor;
@@ -0,0 +1,46 @@
1
+ import * as React from "react";
2
+ import classNames from "classnames";
3
+ import * as Types from "./types";
4
+ import { hasLineBreaker } from "./util";
5
+
6
+ export const TRUE_TEXT = "TRUE";
7
+ export const FALSE_TEXT = "FALSE";
8
+
9
+ /** The default Spreadsheet DataViewer component */
10
+ const DataViewer = <Cell extends Types.CellBase<Value>, Value>({
11
+ cell,
12
+ evaluatedCell,
13
+ }: Types.DataViewerProps<Cell>): React.ReactElement => {
14
+ const value = getValue(cell, evaluatedCell);
15
+
16
+ return typeof value === "boolean" ? (
17
+ <span className="Spreadsheet__data-viewer Spreadsheet__data-viewer--boolean">
18
+ {convertBooleanToText(value)}
19
+ </span>
20
+ ) : (
21
+ <span
22
+ className={classNames("Spreadsheet__data-viewer", {
23
+ "Spreadsheet__data-viewer--preserve-breaks": hasLineBreaker(value),
24
+ })}
25
+ >
26
+ {value}
27
+ </span>
28
+ );
29
+ };
30
+
31
+ export default DataViewer;
32
+
33
+ function getValue(
34
+ cell: Types.CellBase | undefined,
35
+ evaluatedCell: Types.CellBase | undefined
36
+ ) {
37
+ const baseValue = evaluatedCell?.value ?? cell?.value;
38
+ if (baseValue && typeof baseValue === "object") {
39
+ return baseValue.toString();
40
+ }
41
+ return baseValue;
42
+ }
43
+
44
+ export function convertBooleanToText(value: boolean): string {
45
+ return value ? TRUE_TEXT : FALSE_TEXT;
46
+ }
@@ -0,0 +1,31 @@
1
+ import * as React from "react";
2
+ import classnames from "classnames";
3
+ import * as Types from "./types";
4
+
5
+ export type Props = {
6
+ variant?: string;
7
+ dimensions?: Types.Dimensions | null | undefined;
8
+ hidden?: boolean;
9
+ dragging?: boolean;
10
+ };
11
+
12
+ const FloatingRect: React.FC<Props> = ({
13
+ dimensions,
14
+ dragging,
15
+ hidden,
16
+ variant,
17
+ }) => {
18
+ const { width, height, top, left } = dimensions || {};
19
+ return (
20
+ <div
21
+ className={classnames("Spreadsheet__floating-rect", {
22
+ [`Spreadsheet__floating-rect--${variant}`]: variant,
23
+ "Spreadsheet__floating-rect--dragging": dragging,
24
+ "Spreadsheet__floating-rect--hidden": hidden,
25
+ })}
26
+ style={{ width, height, top, left }}
27
+ />
28
+ );
29
+ };
30
+
31
+ export default FloatingRect;
@@ -0,0 +1,5 @@
1
+ import * as Types from "./types";
2
+
3
+ const HeaderRow: Types.HeaderRowComponent = (props) => <tr {...props} />;
4
+
5
+ export default HeaderRow;
@@ -0,0 +1,5 @@
1
+ import * as Types from "./types";
2
+
3
+ const Row: Types.RowComponent = (props) => <tr {...props} />;
4
+
5
+ export default Row;
@@ -0,0 +1,102 @@
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
+
8
+ const RowIndicator: Types.RowIndicatorComponent = ({
9
+ row,
10
+ label,
11
+ selected,
12
+ onSelect,
13
+ }) => {
14
+ const [height, setHeight] = React.useState(0);
15
+
16
+ // Function to handle the start of the resize (mouse down)
17
+ const onMouseDown = (e: React.MouseEvent) => {
18
+ const startY = e.clientY;
19
+
20
+ // Function to handle mouse movement (resize)
21
+ const onMouseMove = (moveEvent: MouseEvent) => {
22
+ const newHeight = height + (moveEvent.clientY - startY);
23
+ setHeight(newHeight);
24
+ // Fetch the floating rectangle element from the DOM
25
+ // const selectedAllRow = document.querySelector(".Spreadsheet__floating-rect--selected");
26
+ // const selectedSingleRow = document.querySelector(".Spreadsheet__active-cell");
27
+
28
+ // // If the element exists, update its height
29
+ // if (selectedAllRow instanceof HTMLElement&&selectedSingleRow instanceof HTMLElement) {
30
+ // selectedAllRow.style.height = `${newHeight}px`; // Set the height
31
+ // selectedSingleRow.style.height = `${newHeight}px`; // Set the height
32
+ // }
33
+ };
34
+
35
+ // Function to stop the resizing (mouse up)
36
+ const onMouseUp = () => {
37
+ document.removeEventListener("mousemove", onMouseMove);
38
+ document.removeEventListener("mouseup", onMouseUp);
39
+ };
40
+
41
+ // Add event listeners for mouse move and mouse up
42
+ document.addEventListener("mousemove", onMouseMove);
43
+ document.addEventListener("mouseup", onMouseUp);
44
+ };
45
+
46
+ const handleClick = React.useCallback(
47
+ (event: React.MouseEvent) => {
48
+ onSelect(row, event.shiftKey);
49
+ },
50
+ [onSelect, row]
51
+ );
52
+
53
+ return (
54
+ <th
55
+ style={{ height: `${height}px`,minWidth:'60px', position: "relative" }}
56
+ className={classNames("Spreadsheet__header", {
57
+ "Spreadsheet__header--selected": selected,
58
+ })}
59
+ onClick={handleClick}
60
+ tabIndex={0}
61
+ >
62
+ {label !== undefined ? label : row + 1}
63
+ <div
64
+ onMouseDown={onMouseDown}
65
+ style={{
66
+ zIndex: "inherit",
67
+ height: "2px",
68
+ position: "absolute",
69
+ right: 0,
70
+ bottom: 0,
71
+ width: "100%",
72
+ cursor: "ns-resize",
73
+ }}
74
+ />
75
+ </th>
76
+ );
77
+ };
78
+
79
+ export default RowIndicator;
80
+
81
+ export const enhance = (
82
+ RowIndicatorComponent: Types.RowIndicatorComponent
83
+ ): React.FC<Omit<Types.RowIndicatorProps, "selected" | "onSelect">> => {
84
+ return function RowIndicatorWrapper(props) {
85
+ const dispatch = useDispatch();
86
+ const selected = useSelector((state) =>
87
+ state.selected.hasEntireRow(props.row)
88
+ );
89
+ const selectEntireRow = React.useCallback(
90
+ (row: number, extend: boolean) =>
91
+ dispatch(Actions.selectEntireRow(row, extend)),
92
+ [dispatch]
93
+ );
94
+ return (
95
+ <RowIndicatorComponent
96
+ {...props}
97
+ selected={selected}
98
+ onSelect={selectEntireRow}
99
+ />
100
+ );
101
+ };
102
+ };
@@ -0,0 +1,32 @@
1
+ import * as React from "react";
2
+ import { getSelectedDimensions } from "./util";
3
+ import FloatingRect from "./FloatingRect";
4
+ import useSelector from "./use-selector";
5
+
6
+ const Selected: React.FC = () => {
7
+ const selected = useSelector((state) => state.selected);
8
+ const dimensions = useSelector(
9
+ (state) =>
10
+ selected &&
11
+ getSelectedDimensions(
12
+ state.rowDimensions,
13
+ state.columnDimensions,
14
+ state.model.data,
15
+ state.selected
16
+ )
17
+ );
18
+ const dragging = useSelector((state) => state.dragging);
19
+ const hidden = useSelector(
20
+ (state) => state.selected.size(state.model.data) < 2
21
+ );
22
+ return (
23
+ <FloatingRect
24
+ variant="selected"
25
+ dimensions={dimensions}
26
+ dragging={dragging}
27
+ hidden={hidden}
28
+ />
29
+ );
30
+ };
31
+
32
+ export default Selected;
@@ -0,0 +1,144 @@
1
+ .Spreadsheet {
2
+ --background-color: white;
3
+ --text-color: black;
4
+ --readonly-text-color: rgba(0, 0, 0, 0.4);
5
+ --outline-color: #4285f4;
6
+ --outline-background-color: rgba(160, 195, 255, 0.2);
7
+ --border-color: hsl(2deg, 0%, 91%);
8
+ --header-background-color: rgba(0, 0, 0, 0.04);
9
+ --elevation: 0 2px 5px rgba(0, 0, 0, 0.4);
10
+
11
+ position: relative;
12
+ overflow: visible;
13
+ background: var(--background-color);
14
+ color: var(--text-color);
15
+ display: inline-block;
16
+ }
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
+ .Spreadsheet__active-cell {
27
+ position: absolute;
28
+ border: 2px solid var(--outline-color);
29
+ box-sizing: border-box;
30
+ }
31
+
32
+ .Spreadsheet__active-cell--edit {
33
+ background: var(--background-color);
34
+ box-shadow: var(--elevation);
35
+ }
36
+
37
+ .Spreadsheet__table {
38
+ border-collapse: collapse;
39
+ table-layout: fixed;
40
+ }
41
+
42
+ .Spreadsheet__cell,
43
+ .Spreadsheet__active-cell {
44
+ cursor: cell;
45
+ }
46
+
47
+ .Spreadsheet__cell {
48
+ outline: none;
49
+ position: relative;
50
+
51
+ }
52
+
53
+ /* .Spreadsheet__active-cell .Selection_dot{
54
+ background-color:red;
55
+ height:7px;
56
+ width:7px;
57
+ border-radius:50%;
58
+ position:absolute;
59
+ right:-3px;
60
+ z-index: 10;
61
+ bottom:-3px;
62
+ cursor: crosshair;
63
+ } */
64
+
65
+ /* .Spreadsheet__cell--readonly {
66
+ color: var(--readonly-text-color);
67
+ } */
68
+
69
+ .Spreadsheet__cell,
70
+ .Spreadsheet__header {
71
+ border: 0.1px solid var(--border-color);
72
+ overflow: hidden;
73
+ word-break: keep-all;
74
+ white-space: nowrap;
75
+ text-align: left;
76
+ box-sizing: border-box;
77
+ user-select: none;
78
+
79
+ }
80
+
81
+ .Spreadsheet__header {
82
+ background: var(--header-background-color);
83
+ color: var(--readonly-text-color);
84
+ text-align: center;
85
+ font: inherit;
86
+ }
87
+
88
+ .Spreadsheet__header--selected {
89
+ background: #5f6268;
90
+ color: #fff;
91
+ }
92
+
93
+ .Spreadsheet__header,
94
+ .Spreadsheet__data-viewer,
95
+ .Spreadsheet__data-editor input {
96
+ padding: 4px;
97
+ box-sizing: border-box;
98
+ }
99
+
100
+ .Spreadsheet__data-viewer--preserve-breaks {
101
+ white-space: pre-wrap;
102
+ }
103
+
104
+ .Spreadsheet__data-editor,
105
+ .Spreadsheet__data-editor input {
106
+ width: 100%;
107
+ height: 100%;
108
+ }
109
+
110
+ .Spreadsheet__data-editor input {
111
+ font: inherit;
112
+ color: inherit;
113
+ background: none;
114
+ border: none;
115
+ outline: none;
116
+ margin: 0;
117
+ }
118
+
119
+ .Spreadsheet__data-viewer--boolean {
120
+ text-align: center;
121
+ }
122
+
123
+ .Spreadsheet__floating-rect {
124
+ position: absolute;
125
+ pointer-events: none;
126
+ box-sizing: border-box;
127
+ }
128
+
129
+ .Spreadsheet__floating-rect--hidden {
130
+ display: none;
131
+ }
132
+
133
+ .Spreadsheet__floating-rect--selected {
134
+ background: var(--outline-background-color);
135
+ border: 2px var(--outline-color) solid;
136
+ }
137
+
138
+ .Spreadsheet__floating-rect--dragging {
139
+ border: none;
140
+ }
141
+
142
+ .Spreadsheet__floating-rect--copied {
143
+ border: 2px var(--outline-color) dashed;
144
+ }