pixel-react-excel-sheet 1.0.10 → 1.0.12

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 (202) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/lib/1fb4472b34e4fe07.css +1 -0
  3. package/lib/components/Accordion/Accordion.d.ts +1 -1
  4. package/lib/components/Accordion/types.d.ts +12 -0
  5. package/lib/components/AddVariables/AddVariables.d.ts +5 -0
  6. package/lib/components/AddVariables/index.d.ts +1 -0
  7. package/lib/components/AddVariables/types.d.ts +35 -0
  8. package/lib/components/AppHeader/types.d.ts +2 -0
  9. package/lib/components/AttachImage/AttachImage.d.ts +1 -6
  10. package/lib/components/AttachImage/types.d.ts +8 -0
  11. package/lib/components/Avatar/types.d.ts +9 -1
  12. package/lib/components/Checkbox/types.d.ts +4 -0
  13. package/lib/components/Comment/Comments.d.ts +4 -0
  14. package/lib/components/Comment/comment/Comment.d.ts +11 -0
  15. package/lib/components/Comment/comment/useNode.d.ts +7 -0
  16. package/lib/components/Comment/index.d.ts +1 -0
  17. package/lib/components/Comment/type.d.ts +25 -0
  18. package/lib/components/CreateVariable/CreateVariableSlider.d.ts +5 -0
  19. package/lib/components/CreateVariable/index.d.ts +1 -0
  20. package/lib/components/CreateVariable/types.d.ts +56 -0
  21. package/lib/components/Drawer/Types.d.ts +13 -0
  22. package/lib/components/Editor/constants.d.ts +1 -1
  23. package/lib/components/Editor/types.d.ts +10 -2
  24. package/lib/components/Excel/ExcelFile/ExcelFileComponents/actions.d.ts +8 -1
  25. package/lib/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.d.ts +2 -0
  26. package/lib/components/Excel/ExcelFile/ExcelFileComponents/types.d.ts +13 -6
  27. package/lib/components/IconButton/IconButton.d.ts +1 -2
  28. package/lib/components/IconButton/types.d.ts +1 -0
  29. package/lib/components/Input/Input.d.ts +1 -1
  30. package/lib/components/MiniModal/types.d.ts +7 -0
  31. package/lib/components/MultiSelect/MultiSelect.d.ts +1 -1
  32. package/lib/components/PhoneInput/PhoneInput.d.ts +6 -0
  33. package/lib/components/PhoneInput/index.d.ts +1 -0
  34. package/lib/components/PhoneInput/types.d.ts +10 -0
  35. package/lib/components/PopUpModal/types.d.ts +1 -0
  36. package/lib/components/Select/components/types.d.ts +1 -0
  37. package/lib/components/Select/types.d.ts +2 -0
  38. package/lib/components/TableTree/Components/TableBody.d.ts +4 -0
  39. package/lib/components/TableTree/Components/TableCell.d.ts +4 -0
  40. package/lib/components/TableTree/Components/TableHead.d.ts +4 -0
  41. package/lib/components/TableTree/Components/TableRow.d.ts +4 -0
  42. package/lib/components/TableTree/Utils/getAllChildIds.d.ts +1 -0
  43. package/lib/components/TableTree/types.d.ts +38 -5
  44. package/lib/components/TableWithAccordion/TableWithAccordion.d.ts +5 -0
  45. package/lib/components/TableWithAccordion/data.d.ts +8 -0
  46. package/lib/components/TableWithAccordion/index.d.ts +1 -0
  47. package/lib/components/TableWithAccordion/types.d.ts +67 -0
  48. package/lib/index.d.ts +303 -17
  49. package/lib/index.esm.js +3372 -747
  50. package/lib/index.esm.js.map +1 -1
  51. package/lib/index.js +3377 -746
  52. package/lib/index.js.map +1 -1
  53. package/lib/tsconfig.tsbuildinfo +1 -1
  54. package/lib/utils/checkDuplicates/checkDuplicates.d.ts +1 -0
  55. package/package.json +2 -1
  56. package/src/assets/Themes/BaseTheme.scss +14 -0
  57. package/src/assets/Themes/DarkTheme.scss +68 -41
  58. package/src/assets/icons/add_file.svg +4 -17
  59. package/src/assets/icons/add_variable.svg +11 -0
  60. package/src/assets/icons/authorization.svg +4 -0
  61. package/src/assets/icons/authorization_icon.svg +1 -0
  62. package/src/assets/icons/backward.svg +10 -0
  63. package/src/assets/icons/capture_icon.svg +3 -0
  64. package/src/assets/icons/depends_on_script.svg +7 -0
  65. package/src/assets/icons/download_file_icon.svg +2 -9
  66. package/src/assets/icons/email_group.svg +3 -0
  67. package/src/assets/icons/executions_icon.svg +3 -0
  68. package/src/assets/icons/forward.svg +3 -0
  69. package/src/assets/icons/labels.svg +8 -0
  70. package/src/assets/icons/machine_disable_icon.svg +18 -0
  71. package/src/assets/icons/machine_enable_icon.svg +10 -0
  72. package/src/assets/icons/parameters.svg +3 -0
  73. package/src/assets/icons/pre_post_condition.svg +8 -0
  74. package/src/assets/icons/program_element.svg +8 -0
  75. package/src/assets/icons/project_status_icon.svg +10 -0
  76. package/src/assets/icons/refresh_icon.svg +4 -0
  77. package/src/assets/icons/rotate_icon.svg +10 -0
  78. package/src/assets/icons/suites_icon.svg +3 -0
  79. package/src/assets/icons/swipe_icon.svg +9 -0
  80. package/src/assets/icons/tap_icon.svg +4 -0
  81. package/src/assets/icons/test_data.svg +5 -0
  82. package/src/assets/icons/test_data_set.svg +7 -0
  83. package/src/assets/icons/variable_set.svg +5 -0
  84. package/src/assets/styles/_colors.scss +0 -1
  85. package/src/components/Accordion/Accordion.stories.tsx +4 -0
  86. package/src/components/Accordion/Accordion.tsx +7 -1
  87. package/src/components/Accordion/types.ts +12 -0
  88. package/src/components/AddVariables/AddVariables.scss +14 -0
  89. package/src/components/AddVariables/AddVariables.stories.tsx +44 -0
  90. package/src/components/AddVariables/AddVariables.tsx +113 -0
  91. package/src/components/AddVariables/index.ts +1 -0
  92. package/src/components/AddVariables/types.ts +36 -0
  93. package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +1 -1
  94. package/src/components/AppHeader/AppHeader.scss +40 -1
  95. package/src/components/AppHeader/AppHeader.stories.tsx +133 -5
  96. package/src/components/AppHeader/AppHeader.tsx +111 -112
  97. package/src/components/AppHeader/types.ts +10 -9
  98. package/src/components/AttachImage/AttachImage.stories.tsx +2 -0
  99. package/src/components/AttachImage/AttachImage.tsx +5 -9
  100. package/src/components/AttachImage/types.ts +25 -18
  101. package/src/components/Avatar/Avatar.scss +4 -0
  102. package/src/components/Avatar/Avatar.stories.tsx +38 -18
  103. package/src/components/Avatar/Avatar.tsx +19 -3
  104. package/src/components/Avatar/types.ts +9 -1
  105. package/src/components/Charts/DonutChart/DonutChart.tsx +8 -3
  106. package/src/components/Charts/RadialChart/RadialChart.scss +4 -0
  107. package/src/components/Charts/RadialChart/RadialChart.tsx +51 -45
  108. package/src/components/Checkbox/Checkbox.scss +57 -0
  109. package/src/components/Checkbox/Checkbox.stories.tsx +91 -15
  110. package/src/components/Checkbox/Checkbox.tsx +4 -1
  111. package/src/components/Checkbox/types.ts +4 -0
  112. package/src/components/Comment/Comments.scss +166 -0
  113. package/src/components/Comment/Comments.stories.tsx +212 -0
  114. package/src/components/Comment/Comments.tsx +51 -0
  115. package/src/components/Comment/comment/Comment.tsx +206 -0
  116. package/src/components/Comment/comment/useNode.ts +51 -0
  117. package/src/components/Comment/index.ts +1 -0
  118. package/src/components/Comment/type.ts +36 -0
  119. package/src/components/CreateVariable/CreateVariableSlider.scss +18 -0
  120. package/src/components/CreateVariable/CreateVariableSlider.stories.tsx +66 -0
  121. package/src/components/CreateVariable/CreateVariableSlider.tsx +95 -0
  122. package/src/components/CreateVariable/index.ts +1 -0
  123. package/src/components/CreateVariable/types.ts +58 -0
  124. package/src/components/Drawer/Drawer.scss +3 -2
  125. package/src/components/Drawer/Drawer.stories.tsx +0 -1
  126. package/src/components/Drawer/Drawer.tsx +4 -1
  127. package/src/components/Drawer/Types.ts +13 -0
  128. package/src/components/Editor/Editor.stories.tsx +2 -2
  129. package/src/components/Editor/Editor.tsx +4 -2
  130. package/src/components/Editor/VariableDropdown.scss +8 -2
  131. package/src/components/Editor/VariableDropdown.tsx +15 -7
  132. package/src/components/Editor/constants.ts +1 -1
  133. package/src/components/Editor/types.ts +12 -2
  134. package/src/components/Excel/ExcelFile/ExcelFile.scss +3 -1
  135. package/src/components/Excel/ExcelFile/ExcelFile.tsx +37 -21
  136. package/src/components/Excel/ExcelFile/ExcelFileComponents/ActiveCell.tsx +12 -0
  137. package/src/components/Excel/ExcelFile/ExcelFileComponents/Cell.tsx +2 -34
  138. package/src/components/Excel/ExcelFile/ExcelFileComponents/FloatingRect.tsx +26 -1
  139. package/src/components/Excel/ExcelFile/ExcelFileComponents/RowIndicator.tsx +1 -1
  140. package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.scss +25 -21
  141. package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.tsx +1 -3
  142. package/src/components/Excel/ExcelFile/ExcelFileComponents/actions.ts +13 -0
  143. package/src/components/Excel/ExcelFile/ExcelFileComponents/reducer.ts +53 -26
  144. package/src/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.ts +81 -14
  145. package/src/components/Excel/ExcelFile/ExcelFileComponents/types.ts +17 -6
  146. package/src/components/Excel/ExcelFile.stories.tsx +4 -4
  147. package/src/components/Excel/ExcelToolBar/ExcelToolBar.tsx +36 -19
  148. package/src/components/Excel/dataConversion.ts +43 -20
  149. package/src/components/FieldSet/FieldSet.scss +2 -1
  150. package/src/components/FieldSet/FieldSet.stories.tsx +2 -1
  151. package/src/components/FileDropzone/FileDropzone.scss +0 -1
  152. package/src/components/Icon/iconList.ts +45 -2
  153. package/src/components/IconButton/IconButton.scss +11 -11
  154. package/src/components/IconButton/IconButton.stories.tsx +1 -0
  155. package/src/components/IconButton/IconButton.tsx +6 -8
  156. package/src/components/IconButton/types.ts +2 -1
  157. package/src/components/IconRadioGroup/IconRadioGroup.scss +2 -1
  158. package/src/components/Input/Input.tsx +99 -88
  159. package/src/components/LabelEditTextField/LabelEditTextField.tsx +1 -1
  160. package/src/components/MiniModal/MiniModal.scss +0 -4
  161. package/src/components/MiniModal/MiniModal.stories.tsx +3 -2
  162. package/src/components/MiniModal/MiniModal.tsx +28 -10
  163. package/src/components/MiniModal/types.ts +7 -0
  164. package/src/components/Modal/Modal.stories.tsx +2 -1
  165. package/src/components/MultiSelect/MultiSelect.scss +29 -0
  166. package/src/components/MultiSelect/MultiSelect.stories.tsx +19 -5
  167. package/src/components/MultiSelect/MultiSelect.tsx +29 -19
  168. package/src/components/PhoneInput/PhoneInput.d.ts +3 -0
  169. package/src/components/PhoneInput/PhoneInput.stories.tsx +95 -0
  170. package/src/components/PhoneInput/PhoneInput.tsx +90 -0
  171. package/src/components/PhoneInput/index.ts +1 -0
  172. package/src/components/PhoneInput/phoneInput.scss +3 -0
  173. package/src/components/PhoneInput/types.ts +10 -0
  174. package/src/components/PopUpModal/PopUpModal.stories.tsx +14 -13
  175. package/src/components/PopUpModal/PopUpModal.tsx +2 -1
  176. package/src/components/PopUpModal/types.ts +14 -13
  177. package/src/components/Select/Select.scss +20 -0
  178. package/src/components/Select/Select.stories.tsx +50 -1
  179. package/src/components/Select/Select.tsx +34 -7
  180. package/src/components/Select/components/Dropdown.scss +9 -0
  181. package/src/components/Select/components/Dropdown.tsx +20 -6
  182. package/src/components/Select/components/types.ts +1 -0
  183. package/src/components/Select/types.ts +12 -2
  184. package/src/components/TableTree/Components/TableBody.tsx +35 -0
  185. package/src/components/TableTree/Components/TableCell.tsx +59 -0
  186. package/src/components/TableTree/Components/TableHead.tsx +39 -0
  187. package/src/components/TableTree/Components/TableRow.tsx +37 -0
  188. package/src/components/TableTree/TableTree.scss +8 -5
  189. package/src/components/TableTree/TableTree.tsx +16 -46
  190. package/src/components/TableTree/Utils/getAllChildIds.ts +12 -0
  191. package/src/components/TableTree/Utils/renderSpaces.ts +0 -0
  192. package/src/components/TableTree/types.ts +43 -5
  193. package/src/components/TableWithAccordion/TableWithAccordion.scss +54 -0
  194. package/src/components/TableWithAccordion/TableWithAccordion.stories.tsx +94 -0
  195. package/src/components/TableWithAccordion/TableWithAccordion.tsx +174 -0
  196. package/src/components/TableWithAccordion/data.ts +37 -0
  197. package/src/components/TableWithAccordion/index.ts +1 -0
  198. package/src/components/TableWithAccordion/types.ts +70 -0
  199. package/src/components/Tabs/Tabs.scss +0 -1
  200. package/src/index.ts +14 -1
  201. package/src/utils/checkDuplicates/CheckDuplicates.stories.tsx +40 -0
  202. package/src/utils/checkDuplicates/checkDuplicates.ts +13 -0
@@ -24,8 +24,6 @@ export const Cell: React.FC<Types.CellComponentProps> = ({
24
24
  setCellData,
25
25
  setContextMenu,
26
26
  }): React.ReactElement => {
27
- const [isDotDragging, setIsDotDragging] = React.useState(false);
28
- const [first, setFirst] = React.useState(true);
29
27
  const rootRef = React.useRef<HTMLTableCellElement | null>(null);
30
28
  const point = React.useMemo(
31
29
  (): Point.Point => ({
@@ -69,37 +67,12 @@ export const Cell: React.FC<Types.CellComponentProps> = ({
69
67
 
70
68
  const handleMouseOver = React.useCallback(
71
69
  (event: React.MouseEvent<HTMLTableCellElement>) => {
72
- if (dragging && first && !isDotDragging) {
70
+ if (dragging) {
73
71
  setCellDimensions(point, getOffsetRect(event.currentTarget));
74
72
  select(point);
75
73
  }
76
74
  },
77
- [setCellDimensions, select, dragging, point, first, isDotDragging]
78
- );
79
-
80
- const handleDotDown = React.useCallback(
81
- (event: React.MouseEvent<HTMLTableCellElement>) => {
82
- setIsDotDragging(true);
83
- setCellDimensions(point, getOffsetRect(event.currentTarget));
84
-
85
- if (event.shiftKey) {
86
- select(point);
87
- } else {
88
- activate(point);
89
- }
90
- },
91
- [setCellDimensions, point, select, activate]
92
- );
93
-
94
- const handleDotOver = React.useCallback(
95
- (event: React.MouseEvent<HTMLTableCellElement>) => {
96
- setFirst(false);
97
- if (dragging && isDotDragging) {
98
- setCellDimensions(point, getOffsetRect(event.currentTarget));
99
- select(point);
100
- }
101
- },
102
- [setCellDimensions, select, dragging, point, isDotDragging]
75
+ [setCellDimensions, select, dragging, point]
103
76
  );
104
77
 
105
78
  const contextClick = React.useCallback(
@@ -153,11 +126,6 @@ export const Cell: React.FC<Types.CellComponentProps> = ({
153
126
  evaluatedCell={evaluatedData}
154
127
  setCellData={setCellData}
155
128
  />
156
- <div
157
- // className="Selection_dot" TODO
158
- onMouseOver={handleDotOver}
159
- onMouseDown={handleDotDown}
160
- ></div>
161
129
  </td>
162
130
  );
163
131
  };
@@ -1,6 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import classnames from 'classnames';
3
3
  import * as Types from './types';
4
+ import useSelector from './use-selector';
5
+ import { getCellDimensions } from './util';
4
6
 
5
7
  export type Props = {
6
8
  variant?: string;
@@ -15,7 +17,30 @@ const FloatingRect: React.FC<Props> = ({
15
17
  hidden,
16
18
  variant,
17
19
  }) => {
20
+ const active = useSelector((state) => state.active);
21
+ const autoFill = useSelector((state) => state.autoFill);
22
+ const FixedVal = useSelector((state) =>
23
+ active
24
+ ? getCellDimensions(active, state.rowDimensions, state.columnDimensions)
25
+ : undefined
26
+ );
27
+
18
28
  const { width, height, top, left } = dimensions || {};
29
+
30
+ let sampleHeight = FixedVal?.height ?? 0;
31
+ let sampleWidth = FixedVal?.width ?? 0;
32
+ let adjustedWidth = width;
33
+ let adjustedHeight = height;
34
+ if (autoFill.open && width && height && FixedVal) {
35
+ if (width - sampleWidth > height - sampleHeight) {
36
+ adjustedWidth = width;
37
+ adjustedHeight = FixedVal.height;
38
+ } else {
39
+ adjustedHeight = height;
40
+ adjustedWidth = FixedVal.width;
41
+ }
42
+ }
43
+
19
44
  return (
20
45
  <div
21
46
  className={classnames('ff-spreadsheet-floating-rect', {
@@ -23,7 +48,7 @@ const FloatingRect: React.FC<Props> = ({
23
48
  'ff-spreadsheet-floating-rect--dragging': dragging,
24
49
  'ff-spreadsheet-floating-rect--hidden': hidden,
25
50
  })}
26
- style={{ width, height, top, left }}
51
+ style={{ width: adjustedWidth, height: adjustedHeight, top, left }}
27
52
  />
28
53
  );
29
54
  };
@@ -102,7 +102,7 @@ const RowIndicator: Types.RowIndicatorComponent = ({
102
102
 
103
103
  return (
104
104
  <th
105
- style={{ height: `${rowHeight}px` ,minWidth:'60px' }} //Dynamic value, Inline Styling required
105
+ style={{ height: `${rowHeight}px` ,minWidth:'60px' ,position:'relative' }} //Dynamic value, Inline Styling required
106
106
  className={classNames('ff-spreadsheet-header', {
107
107
  'ff-spreadsheet-header--selected': selected,
108
108
  })}
@@ -4,23 +4,26 @@
4
4
  display: flex;
5
5
  flex-direction: column;
6
6
 
7
- .ff-excel-toolbar{
7
+ .ff-excel-toolbar-container{
8
8
  position: static;
9
9
  top: 0;
10
+ background-color:var( --excel-toolbar-bg);
11
+ padding: 4px 8px;
10
12
  }
11
13
 
12
- .ff-spreadsheet {
13
- --background-color: var(--drawer-footer-bg);
14
- --text-color: var(--text-color);
15
- --readonly-text-color: var(--toggle-strip-active);
16
- --outline-color: var(--toggle-strip-active);
17
- --outline-background-color: var(--overlay-bg);
18
- --border-color: var(--toggle-strip-color);
19
- --header-background-color: var(--excel-sheet-header-background-color);
20
- --elevation: var(--brand-color);
14
+ .ff-spreadsheet {
15
+ --background-color: var(--drawer-footer-bg);
16
+ --text-color: var(--text-color);
17
+ --readonly-text-color: var(--toggle-strip-active);
18
+ --outline-color: var(--toggle-strip-active);
19
+ --outline-background-color: var(--overlay-bg);
20
+ --border-color: var(--excel-sheet-border);
21
+ --header-background-color: var(--pop-up-background-blur);
22
+ --elevation: var(--brand-color);
21
23
 
22
24
  position: relative;
23
25
  overflow: scroll;
26
+ max-height: calc(100vh - 70px);
24
27
  background: var(--background-color);
25
28
  color: var(--text-color);
26
29
  scrollbar-width: none;
@@ -58,17 +61,17 @@
58
61
  z-index: 0;
59
62
  }
60
63
 
61
- .ff-spreadsheet-active-cell .Selection_dot {
62
- background-color: var(--elevation);
63
- height: 7px;
64
- width: 7px;
65
- border-radius: 50%;
66
- position: absolute;
67
- right: -3px;
68
- z-index: 10;
69
- bottom: -3px;
70
- cursor: crosshair;
71
- }
64
+ .ff-spreadsheet-active-cell .select_dot {
65
+ background-color: var(--elevation);
66
+ height: 10px;
67
+ width: 10px;
68
+ border-radius: 50%;
69
+ position: absolute;
70
+ bottom: -5px;
71
+ right: -5px;
72
+ cursor: crosshair;
73
+ z-index: 1000;
74
+ }
72
75
 
73
76
  .ff-spreadsheet-cell--readonly {
74
77
  color: var(--readonly-text-color);
@@ -86,6 +89,7 @@
86
89
  }
87
90
 
88
91
  .ff-spreadsheet-header {
92
+ border: 0.1px solid var(--border-color);
89
93
  background-color: var(--header-background-color);
90
94
  color: var(--readonly-text-color);
91
95
  text-align: center;
@@ -443,9 +443,7 @@ const Spreadsheet = <CellType extends Types.CellBase>(
443
443
  const rootNode = React.useMemo(
444
444
  () => (
445
445
  <div className="ff-excel">
446
- <div className="ff-excel-toolbar">
447
-
448
-
446
+ <div className="ff-excel-toolbar-container">
449
447
  <ExcelToolBar
450
448
  onBold={onBold}
451
449
  onItalic={onItalic}
@@ -46,11 +46,23 @@ export const DELETE_ROW = 'DELETE_ROW';
46
46
  export const DELETE_COLUMN = 'DELETE_COLUMN';
47
47
  export const SET_ROW_HEIGHT = 'SET_ROW_HEIGHT';
48
48
  export const SET_COLUMN_POSITION = 'SET_COLUMN_POSITION';
49
+ export const SET_AUTO_FILL = 'SET_AUTO_FILL';
49
50
 
50
51
  export type BaseAction<T extends string> = {
51
52
  type: T;
52
53
  };
53
54
 
55
+ export type SetAutoFill = BaseAction<typeof SET_AUTO_FILL> & {
56
+ payload: { autofill: boolean };
57
+ };
58
+
59
+ export function autoFill(autofill: boolean): SetAutoFill {
60
+ return {
61
+ type: SET_AUTO_FILL,
62
+ payload: { autofill },
63
+ };
64
+ }
65
+
54
66
  export type SetRowHeight = BaseAction<typeof SET_ROW_HEIGHT> & {
55
67
  payload: { row: number; height: number };
56
68
  };
@@ -545,4 +557,5 @@ export type Action =
545
557
  | DeleteColumn
546
558
  | SetRowHeight
547
559
  | SetColumnPosition
560
+ | SetAutoFill
548
561
  | BlurAction;
@@ -26,6 +26,8 @@ import {
26
26
  blur,
27
27
  clear,
28
28
  commit,
29
+ dragEndAutoFill,
30
+ dragEndFormatePainter,
29
31
  edit,
30
32
  getKeyDownHandler,
31
33
  isActiveReadOnly,
@@ -41,6 +43,7 @@ export const INITIAL_STATE: Types.StoreState = {
41
43
  lastChanged: null,
42
44
  hasPasted: false,
43
45
  cut: false,
46
+ autoFill: { open: false, cellValue: { value: '', style: {} } },
44
47
  dragging: false,
45
48
  model: new Model(createFormulaParser, []),
46
49
  selected: new EmptySelection(),
@@ -56,6 +59,23 @@ export default function reducer(
56
59
  action: Actions.Action
57
60
  ): Types.StoreState {
58
61
  switch (action.type) {
62
+ case Actions.SET_AUTO_FILL: {
63
+ const { autofill } = action.payload;
64
+ const activeCell = state.active;
65
+ let currentCell: Types.CellBase<any> = { value: '', style: {} };
66
+ if (activeCell) {
67
+ currentCell =
68
+ Matrix.get(
69
+ { row: activeCell.row, column: activeCell.column },
70
+ state.model.data
71
+ ) || currentCell;
72
+ }
73
+ return {
74
+ ...state,
75
+ autoFill: { open: autofill, cellValue: currentCell },
76
+ };
77
+ }
78
+
59
79
  case Actions.ADD_ROW_TOP: {
60
80
  let { selectedRow, selectedColumn, model } = state;
61
81
  if (checkEmpty(selectedRow)) {
@@ -610,41 +630,48 @@ export default function reducer(
610
630
 
611
631
  case Actions.DRAG_END: {
612
632
  const selectedRange = state.selected.toRange(state.model.data);
613
- let currentData = state.model.data;
614
-
615
- if (!state.formattedStyle.open || !selectedRange) {
633
+ const activeCell = state.active;
634
+ let updatedData = state.model.data;
635
+ if (state.formattedStyle.open) {
636
+ updatedData = dragEndFormatePainter(
637
+ state.model.data,
638
+ selectedRange as PointRange,
639
+ state.formattedStyle
640
+ );
641
+ }
642
+ if (state.autoFill.open) {
643
+ updatedData = dragEndAutoFill(
644
+ state.model.data,
645
+ selectedRange as PointRange,
646
+ state.autoFill.cellValue,
647
+ activeCell
648
+ );
649
+ let { start, end } = selectedRange as PointRange;
650
+ const rowCount = start.row - end.row;
651
+ const columnCount = start.column - end.column;
652
+ let startPoint = { row: 0, column: 0 };
653
+ let endPoint = { row: 0, column: 0 };
654
+
655
+ if (rowCount > columnCount) {
656
+ startPoint = { row: activeCell?.row ?? 0, column: start.column };
657
+ endPoint = { row: activeCell?.row ?? 0, column: end.column };
658
+ } else {
659
+ startPoint = { row: start.row, column: activeCell?.column ?? 0 };
660
+ endPoint = { row: end.row, column: activeCell?.column ?? 0 };
661
+ }
616
662
  return {
617
663
  ...state,
618
664
  dragging: false,
665
+ autoFill: { open: false, cellValue: { value: '', style: {} } },
619
666
  formattedStyle: { open: false, style: undefined },
667
+ model: new Model(state.model.createFormulaParser, updatedData),
668
+ selected: new RangeSelection(new PointRange(startPoint, endPoint)),
620
669
  };
621
670
  }
622
-
623
- const { start, end } = selectedRange;
624
-
625
- let updatedData = currentData;
626
-
627
- for (let row = start.row; row <= end.row; row++) {
628
- for (let col = start.column; col <= end.column; col++) {
629
- const currentCell = Matrix.get({ row, column: col }, updatedData);
630
- if (!currentCell) {
631
- continue;
632
- }
633
- const updatedCell = {
634
- ...currentCell,
635
- style: state.formattedStyle.style,
636
- };
637
-
638
- updatedData = Matrix.set(
639
- { row, column: col },
640
- updatedCell,
641
- updatedData
642
- );
643
- }
644
- }
645
671
  return {
646
672
  ...state,
647
673
  dragging: false,
674
+ autoFill: { open: false, cellValue: { value: '', style: {} } },
648
675
  formattedStyle: { open: false, style: undefined },
649
676
  model: new Model(state.model.createFormulaParser, updatedData),
650
677
  };
@@ -12,7 +12,7 @@ import {
12
12
 
13
13
  export function applyBoldToCells(
14
14
  currentData: Matrix.Matrix<Types.CellBase<any>>,
15
- selectedRange: PointRange,
15
+ selectedRange: PointRange
16
16
  ): Matrix.Matrix<Types.CellBase<any>> {
17
17
  if (!selectedRange) {
18
18
  return currentData;
@@ -217,10 +217,10 @@ export function applyBorderToCells(
217
217
  case 'border-none':
218
218
  updatedCell.style = {
219
219
  ...currentCell.style,
220
- borderRight: `1px solid var(--toggle-strip-color)`,
221
- borderLeft: `1px solid var(--toggle-strip-color)`,
222
- borderTop: `1px solid var(--toggle-strip-color)`,
223
- borderBottom: `1px solid var(--toggle-strip-color)`,
220
+ borderRight: `1px solid var(--excel-sheet-border)`,
221
+ borderLeft: `1px solid var(--excel-sheet-border)`,
222
+ borderTop: `1px solid var(--excel-sheet-border)`,
223
+ borderBottom: `1px solid var(--excel-sheet-border)`,
224
224
  };
225
225
  break;
226
226
  case 'border-right':
@@ -333,8 +333,7 @@ export function applyUnderlineToCells(
333
333
  ...currentCell,
334
334
  style: {
335
335
  ...currentCell.style,
336
- textDecoration: 'none',
337
- textDecorationStyle: 'solid' as TextDecorationStyle,
336
+ textDecoration: 'none solid',
338
337
  },
339
338
  };
340
339
  } else {
@@ -342,11 +341,8 @@ export function applyUnderlineToCells(
342
341
  ...currentCell,
343
342
  style: {
344
343
  ...currentCell.style,
345
- textDecoration: value === 'double_border' ? 'underline' : value,
346
- textDecorationStyle:
347
- value === 'double_border'
348
- ? 'double'
349
- : ('none' as TextDecorationStyle),
344
+ textDecoration:
345
+ value === 'double_border' ? 'underline double' : value,
350
346
  },
351
347
  };
352
348
  }
@@ -480,6 +476,79 @@ export function applyFormatePainter(
480
476
  return undefined;
481
477
  }
482
478
 
479
+ export function dragEndFormatePainter(
480
+ currentData: Matrix.Matrix<Types.CellBase<any>>,
481
+ selectedRange: PointRange | null,
482
+ formattedStyle: Types.formattedStyle
483
+ ): Matrix.Matrix<Types.CellBase<any>> {
484
+ if (!selectedRange || !formattedStyle.open) {
485
+ return currentData;
486
+ }
487
+
488
+ const { start, end } = selectedRange;
489
+ let updatedData = currentData;
490
+
491
+ for (let row = start.row; row <= end.row; row++) {
492
+ for (let col = start.column; col <= end.column; col++) {
493
+ const currentCell = Matrix.get({ row, column: col }, updatedData);
494
+ if (!currentCell) {
495
+ continue;
496
+ }
497
+ const updatedCell = {
498
+ ...currentCell,
499
+ style: formattedStyle.style,
500
+ };
501
+ updatedData = Matrix.set({ row, column: col }, updatedCell, updatedData);
502
+ }
503
+ }
504
+ return updatedData;
505
+ }
506
+
507
+ export function dragEndAutoFill(
508
+ currentData: Matrix.Matrix<Types.CellBase<any>>,
509
+ selectedRange: PointRange | null,
510
+ cellValue: Types.CellBase,
511
+ activeCell: Point.Point | null
512
+ ): Matrix.Matrix<Types.CellBase<any>> {
513
+ if (!selectedRange) {
514
+ return currentData;
515
+ }
516
+ const { start, end } = selectedRange;
517
+ const rowCount = start.row - end.row;
518
+ const columnCount = start.column - end.column;
519
+ let startPoint = { row: 0, column: 0 };
520
+ let endPoint = { row: 0, column: 0 };
521
+
522
+ if (rowCount > columnCount) {
523
+ startPoint = { row: activeCell?.row ?? 0, column: start.column };
524
+ endPoint = { row: activeCell?.row ?? 0, column: end.column };
525
+ } else {
526
+ startPoint = { row: start.row, column: activeCell?.column ?? 0 };
527
+ endPoint = { row: end.row, column: activeCell?.column ?? 0 };
528
+ }
529
+
530
+ let updatedData = currentData;
531
+
532
+ for (let row = startPoint.row; row <= endPoint.row; row++) {
533
+ for (let col = startPoint.column; col <= endPoint.column; col++) {
534
+ const currentCell = Matrix.get({ row, column: col }, updatedData);
535
+
536
+ if (!currentCell) {
537
+ continue;
538
+ }
539
+
540
+ const updatedCell = {
541
+ ...currentCell,
542
+ style: cellValue.style,
543
+ value: cellValue.value,
544
+ };
545
+
546
+ updatedData = Matrix.set({ row, column: col }, updatedCell, updatedData);
547
+ }
548
+ }
549
+ return updatedData;
550
+ }
551
+
483
552
  export function edit(state: Types.StoreState): Types.StoreState {
484
553
  if (isActiveReadOnly(state)) {
485
554
  return state;
@@ -567,8 +636,6 @@ function convertPtToPx(pt: number): string {
567
636
 
568
637
  // Key Bindings
569
638
 
570
- type TextDecorationStyle = 'solid' | 'double' | 'dotted' | 'dashed' | 'wavy';
571
-
572
639
  type TextAlign = 'left' | 'center' | 'right';
573
640
 
574
641
  export type KeyDownHandler = (
@@ -55,19 +55,30 @@ export type StoreState<Cell extends CellBase = CellBase> = {
55
55
  copied: PointRange | null;
56
56
  hasPasted: boolean;
57
57
  cut: boolean;
58
+ autoFill: { open: boolean; cellValue: Cell };
58
59
  active: Point | null;
59
60
  mode: Mode;
60
- rowDimensions: Record<number, Pick<Dimensions, 'height' | 'top'> | undefined>;
61
- columnDimensions: Record<
62
- number,
63
- Pick<Dimensions, 'width' | 'left'> | undefined
64
- >;
61
+ rowDimensions: rowDimensions;
62
+ columnDimensions: columnDimensions;
65
63
  dragging: boolean;
66
64
  lastChanged: Point | null;
67
65
  lastCommit: null | CellChange<Cell>[];
68
66
  selectedRow: null | number;
69
67
  selectedColumn: null | number;
70
- formattedStyle: { open: boolean; style: undefined | React.CSSProperties };
68
+ formattedStyle: formattedStyle;
69
+ };
70
+
71
+ export type rowDimensions = Record<
72
+ number,
73
+ Pick<Dimensions, 'height' | 'top'> | undefined
74
+ >;
75
+ export type columnDimensions = Record<
76
+ number,
77
+ Pick<Dimensions, 'width' | 'left'> | undefined
78
+ >;
79
+ export type formattedStyle = {
80
+ open: boolean;
81
+ style: undefined | React.CSSProperties;
71
82
  };
72
83
 
73
84
  export type CellChange<Cell extends CellBase = CellBase> = {
@@ -115,10 +115,10 @@ export const Default: Story = {
115
115
  backgroundColor: 'C6E7FF', // Sample data from backend without #
116
116
  borderColor: 'F2F2F2', // Sample data from backend without #
117
117
  border: {
118
- top: 'NONE',
119
- bottom: 'NONE',
120
- left: 'NONE',
121
- right: 'NONE',
118
+ top: 'THIN',
119
+ bottom: 'THIN',
120
+ left: 'THIN',
121
+ right: 'THIN',
122
122
  },
123
123
  alignment: {
124
124
  horizontal: 'GENERAL',
@@ -51,22 +51,27 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
51
51
  const data = useSelector((state) => state.model.data);
52
52
  const formattedStyle = useSelector((state) => state.formattedStyle.open);
53
53
 
54
- const [cellStyle, setCellStyle] = useState(
55
- cell?.style || {
56
- color: 'var(--text-color)',
57
- backgroundColor: 'var(--drawer-footer-bg)',
58
- borderColor: 'var(--toggle-strip-color)',
59
- }
60
- );
54
+ // Default style to Excel
55
+ const basicStyle: React.CSSProperties = {
56
+ color: 'var(--input-hover-border-color)',
57
+ backgroundColor: 'var(--drawer-footer-bg)',
58
+ borderColor: 'var(--excel-sheet-border)',
59
+ textDecoration: 'none solid',
60
+ borderRight: `1px solid var(--excel-sheet-border)`,
61
+ borderLeft: `1px solid var(--excel-sheet-border)`,
62
+ borderTop: `1px solid var(--excel-sheet-border)`,
63
+ borderBottom: `1px solid var(--excel-sheet-border)`,
64
+ fontSize: '15px',
65
+ fontWeight: 'normal',
66
+ fontStyle: 'normal',
67
+ fontFamily: 'Times New Roman',
68
+ textAlign: 'center',
69
+ };
70
+
71
+ const [cellStyle, setCellStyle] = useState(cell?.style || basicStyle);
61
72
 
62
73
  useEffect(() => {
63
- setCellStyle(
64
- cell?.style || {
65
- color: 'var(--text-color)',
66
- backgroundColor: 'var(--drawer-footer-bg)',
67
- borderColor: 'var(--toggle-strip-color)',
68
- }
69
- );
74
+ setCellStyle(cell?.style || basicStyle);
70
75
  }, [cell]);
71
76
 
72
77
  useEffect(() => {
@@ -79,8 +84,6 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
79
84
  }, [cell]);
80
85
 
81
86
  const styleBackend = convertStyleToBackend(cellStyle);
82
-
83
-
84
87
  const [border, setBorder] = useState<string>('border-none');
85
88
  const [underLine, setUnderLine] = useState<string>('underline');
86
89
  const [selectedFontFamily, setSelectedFontFamily] = useState<{
@@ -93,7 +96,7 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
93
96
  const [colorContainer, setColorPicker] = useState<ColorContainer>({
94
97
  color: 'var(--error-light)',
95
98
  backgroundColor: 'var(--error-light)',
96
- borderColor: 'var(--text-color)',
99
+ borderColor: 'var(--input-hover-border-color)',
97
100
  });
98
101
 
99
102
  const borderTypeIcon = [
@@ -124,6 +127,18 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
124
127
  label: 'Arial',
125
128
  value: 'Arial',
126
129
  },
130
+ {
131
+ label: 'fantasy',
132
+ value: 'fantasy',
133
+ },
134
+ {
135
+ label: 'cursive',
136
+ value: 'cursive',
137
+ },
138
+ {
139
+ label: 'Poppins',
140
+ value: 'Poppins',
141
+ },
127
142
  {
128
143
  label: 'Courier New',
129
144
  value: '"Courier New"',
@@ -283,7 +298,9 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
283
298
  <Tooltip placement="top" title={'Underline Type'}>
284
299
  <div className="ff-excel-toolbar-icon-underline">
285
300
  <Icon
286
- variant={cellStyle.textDecoration===underLine?'dark' : 'light'}
301
+ variant={
302
+ cellStyle.textDecoration === underLine ? 'dark' : 'light'
303
+ }
287
304
  hoverEffect
288
305
  disabled={toolbar === 'disable'}
289
306
  onClick={() => setUnderlineType(data, underLine, true)}
@@ -308,7 +325,7 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
308
325
  <div className="ff-excel-toolbar-icon">
309
326
  <Tooltip placement="top" title={'Format Painter'}>
310
327
  <Icon
311
- variant={formattedStyle?'dark':'light'}
328
+ variant={formattedStyle ? 'dark' : 'light'}
312
329
  hoverEffect
313
330
  disabled={toolbar === 'disable'}
314
331
  onClick={() => {