pixel-react 1.1.8 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }