pixel-react-excel-sheet 1.0.32 → 1.0.33

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 (92) hide show
  1. package/lib/components/Accordion/Accordion.d.ts +1 -1
  2. package/lib/components/Accordion/types.d.ts +4 -0
  3. package/lib/components/AllProjectsDropdown/types.d.ts +2 -0
  4. package/lib/components/Button/Button.d.ts +2 -2
  5. package/lib/components/Button/types.d.ts +17 -0
  6. package/lib/components/Charts/DashboardDonutChart/types.d.ts +1 -0
  7. package/lib/components/Charts/MultiRadialChart/types.d.ts +3 -0
  8. package/lib/components/ChooseFile/ChooseFile.d.ts +3 -0
  9. package/lib/components/ChooseFile/types.d.ts +68 -0
  10. package/lib/components/ConditionalDropdown/ConditionalDropdown.d.ts +1 -2
  11. package/lib/components/ConditionalDropdown/types.d.ts +3 -3
  12. package/lib/components/LabelEditTextField/types.d.ts +3 -1
  13. package/lib/components/ScriptSwitchButton/ScriptSwitchButton.d.ts +9 -0
  14. package/lib/components/ScriptSwitchButton/index.d.ts +1 -0
  15. package/lib/components/StatusCard/types.d.ts +2 -0
  16. package/lib/components/TableTree/Components/TableCell.d.ts +1 -1
  17. package/lib/components/TableTree/Components/TableRow.d.ts +1 -1
  18. package/lib/components/TableTree/data.d.ts +115 -1
  19. package/lib/components/TableTree/types.d.ts +4 -0
  20. package/lib/index.d.ts +218 -65
  21. package/lib/index.esm.js +721 -419
  22. package/lib/index.esm.js.map +1 -1
  23. package/lib/index.js +767 -418
  24. package/lib/index.js.map +1 -1
  25. package/lib/tsconfig.tsbuildinfo +1 -1
  26. package/lib/validations/regex.d.ts +46 -0
  27. package/package.json +1 -1
  28. package/src/StyleGuide/ColorPalette/colorPaletteList.ts +5 -0
  29. package/src/assets/Themes/BaseTheme.scss +1 -1
  30. package/src/assets/Themes/BlueTheme.scss +1 -1
  31. package/src/assets/Themes/DarkTheme.scss +1 -1
  32. package/src/assets/icons/failed_status_icon.svg +1 -1
  33. package/src/assets/icons/flaky_status_icon.svg +1 -1
  34. package/src/assets/icons/settings.svg +3 -0
  35. package/src/assets/icons/skipped_status_icon.svg +1 -1
  36. package/src/assets/icons/warning_status_icon.svg +1 -1
  37. package/src/components/Accordion/Accordion.stories.tsx +13 -0
  38. package/src/components/Accordion/Accordion.tsx +2 -1
  39. package/src/components/Accordion/types.ts +4 -0
  40. package/src/components/AllProjectsDropdown/types.ts +2 -0
  41. package/src/components/AppHeader/AppHeader.scss +6 -2
  42. package/src/components/Button/Button.scss +12 -0
  43. package/src/components/Button/Button.tsx +29 -11
  44. package/src/components/Button/types.ts +21 -0
  45. package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.scss +83 -30
  46. package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.stories.tsx +2 -0
  47. package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.tsx +38 -17
  48. package/src/components/Charts/DashboardDonutChart/types.ts +1 -0
  49. package/src/components/Charts/MultiRadialChart/MultiRadialChart.scss +0 -1
  50. package/src/components/Charts/MultiRadialChart/MultiRadialChart.stories.tsx +2 -1
  51. package/src/components/Charts/MultiRadialChart/MultiRadialChart.tsx +18 -4
  52. package/src/components/Charts/MultiRadialChart/types.ts +4 -1
  53. package/src/components/ChooseFile/ChooseFile.stories.tsx +190 -0
  54. package/src/components/ChooseFile/ChooseFile.tsx +46 -0
  55. package/src/components/ChooseFile/types.ts +78 -0
  56. package/src/components/ConditionalDropdown/ConditionalDropdown.stories.tsx +8 -5
  57. package/src/components/ConditionalDropdown/ConditionalDropdown.tsx +133 -135
  58. package/src/components/ConditionalDropdown/types.ts +8 -8
  59. package/src/components/ConnectingBranch/ConnectingBranch.scss +171 -169
  60. package/src/components/ConnectingBranch/ConnectingBranch.tsx +108 -107
  61. package/src/components/DatePicker/DatePicker.scss +310 -0
  62. package/src/components/Excel/ExcelFile/ExcelFile.tsx +4 -4
  63. package/src/components/Excel/ExcelFile/ExcelFileComponents/ActiveCell.tsx +22 -12
  64. package/src/components/Excel/ExcelFile/ExcelFileComponents/ColumnIndicator.tsx +2 -2
  65. package/src/components/Excel/ExcelFile/ExcelFileComponents/DataEditor.tsx +4 -1
  66. package/src/components/Excel/ExcelFile/ExcelFileComponents/RowIndicator.tsx +2 -2
  67. package/src/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.ts +77 -10
  68. package/src/components/Icon/iconList.ts +2 -0
  69. package/src/components/LabelEditTextField/LabelEditTextField.scss +4 -0
  70. package/src/components/LabelEditTextField/LabelEditTextField.stories.tsx +8 -3
  71. package/src/components/LabelEditTextField/LabelEditTextField.tsx +42 -18
  72. package/src/components/LabelEditTextField/types.ts +3 -1
  73. package/src/components/MachineInputField/MachineInputField.tsx +2 -2
  74. package/src/components/NLPInput/components/NlpDropDown/NlpDropdown.scss +1 -1
  75. package/src/components/ScriptSwitchButton/ScriptSwitchButton.scss +33 -0
  76. package/src/components/ScriptSwitchButton/ScriptSwitchButton.stories.tsx +48 -0
  77. package/src/components/ScriptSwitchButton/ScriptSwitchButton.tsx +65 -0
  78. package/src/components/ScriptSwitchButton/index.ts +1 -0
  79. package/src/components/Select/Select.tsx +4 -4
  80. package/src/components/StatusCard/StatusCard.scss +2 -1
  81. package/src/components/StatusCard/StatusCard.stories.tsx +59 -1
  82. package/src/components/StatusCard/StatusCard.tsx +10 -2
  83. package/src/components/StatusCard/types.ts +2 -0
  84. package/src/components/TableTree/Components/TableBody.tsx +20 -16
  85. package/src/components/TableTree/Components/TableCell.tsx +47 -31
  86. package/src/components/TableTree/Components/TableRow.tsx +4 -0
  87. package/src/components/TableTree/TableTree.scss +121 -109
  88. package/src/components/TableTree/data.ts +48 -2
  89. package/src/components/TableTree/types.ts +4 -0
  90. package/src/index.ts +97 -0
  91. package/src/validations/regex.stories.tsx +362 -0
  92. package/src/validations/regex.ts +194 -0
@@ -0,0 +1,78 @@
1
+ import { DynamicObj } from '../CreateVariable/types';
2
+
3
+ export interface ChooseFileProps {
4
+ /**
5
+ * Variant of the button
6
+ */
7
+ variant: 'primary' | 'secondary' | 'tertiary' | 'delete' | 'warning';
8
+ /**
9
+ * What background color to use
10
+ */
11
+ backgroundColor?: string;
12
+
13
+ /**
14
+ * Width in string format can be sent for needed width
15
+ */
16
+ buttonWidth?: string;
17
+
18
+ /**
19
+ * How large should the button be?
20
+ */
21
+ size?: 'small' | 'medium' | 'large';
22
+ /**
23
+ * Button contents
24
+ */
25
+ label?: string;
26
+ /**
27
+ * Type of the button
28
+ */
29
+
30
+ type?: 'button' | 'submit';
31
+
32
+ disabled?: boolean;
33
+ /**
34
+ * Optional click handler
35
+ */
36
+ onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
37
+
38
+ /**
39
+ * Button id
40
+ */
41
+ id?: string;
42
+ /**
43
+ * onSubmit function handler
44
+ */
45
+ onSubmit?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
46
+ /**
47
+ * react ref for the button
48
+ */
49
+ ref?: any;
50
+ /**
51
+ * Classname for the button
52
+ */
53
+ className?: string;
54
+ /**
55
+ * Additional styles for the button
56
+ */
57
+ style?: React.CSSProperties;
58
+
59
+ /**
60
+ * Give icon name availble in storybook that to be on left side of button
61
+ */
62
+ iconName?: string;
63
+
64
+ /**
65
+ * isChooseFile is a Boolean prop
66
+ */
67
+ isChooseFile?: boolean;
68
+
69
+ /**
70
+ * selectedfile object will be send.
71
+ */
72
+ selectedFile?: File | DynamicObj | null;
73
+
74
+ /**
75
+ * handleCloseIcon function will set to the initial state .
76
+ */
77
+ handleCloseIcon?: () => void;
78
+ }
@@ -1,4 +1,4 @@
1
- import React, { useState } from 'react';
1
+ import React, { useRef, useState } from 'react';
2
2
  import { Meta, StoryFn, StoryObj } from '@storybook/react';
3
3
  import ConditionalDropdown from './ConditionalDropdown';
4
4
  import { ConditionalDropdownProps, dynamicObject } from './types';
@@ -23,6 +23,7 @@ export default {
23
23
  type Story = StoryObj<typeof ConditionalDropdown>;
24
24
 
25
25
  const Template: StoryFn<ConditionalDropdownProps> = (args) => {
26
+ const inputRef = useRef<HTMLInputElement>(null);
26
27
  const [inputValue, setInputValue] = useState<string>('');
27
28
  const [openCreateVariable, setOpenCreateVariable] = useState<boolean>(false);
28
29
  const [variableName, setVariableName] = useState<string>('');
@@ -37,9 +38,12 @@ const Template: StoryFn<ConditionalDropdownProps> = (args) => {
37
38
  <>
38
39
  <ConditionalDropdown
39
40
  {...args}
40
- onChange={(value: string) => setInputValue(value)}
41
+ onChange={(event: React.ChangeEvent<HTMLInputElement>) =>
42
+ setInputValue(event.target.value)
43
+ }
41
44
  value={inputValue}
42
45
  onCreateVariableClick={() => setOpenCreateVariable(true)}
46
+ ref={inputRef}
43
47
  />
44
48
  {openCreateVariable && (
45
49
  <CreateVariableSlider
@@ -83,9 +87,8 @@ WithInitialValue.args = {
83
87
 
84
88
  export const DropdownOnHash: Story = {
85
89
  render: () => {
86
- const [hashInputValue, setHashInputValue] = useState<
87
- dynamicObject | null
88
- >();
90
+ const [hashInputValue, setHashInputValue] =
91
+ useState<dynamicObject | null>();
89
92
  const testData = [
90
93
  {
91
94
  _id: '1',
@@ -1,158 +1,156 @@
1
+ import {
2
+ useState,
3
+ useEffect,
4
+ forwardRef,
5
+ useImperativeHandle,
6
+ useRef,
7
+ } from 'react';
1
8
  import { checkEmpty } from '../../utils/checkEmpty/checkEmpty';
2
9
  import VariableDropdown from '../Editor/VariableDropdown';
3
10
  import Icon from '../Icon';
4
11
  import Input from '../Input';
5
12
  import { ConditionalDropdownProps, dynamicObject } from './types';
6
13
  import './ConditionalDropdown.scss';
7
- import React, { useState, useRef, useEffect } from 'react';
8
14
  import OptionsDropdown from './OptionsDropdown';
9
15
 
10
- const ConditionalDropdown: React.FC<ConditionalDropdownProps> = ({
11
- label = '',
12
- hashInputValue = '',
13
- setHashInputValue,
14
- variableList = [],
15
- placeholder = 'Enter text',
16
- onChange,
17
- onCreateVariableClick,
18
- value = '',
19
- dropdownWidth = 'inherit',
20
- isHash = false,
21
- dataFiles = [],
22
- ...props
23
- }) => {
24
- const [inputValue, setInputValue] = useState<string>(value);
25
- const [showDropdown, setShowDropdown] = useState<boolean>(false);
26
- const [cursorPosition, setCursorPosition] = useState<number | null>(null);
27
- const [showCreateVariableIcon, setShowCreateVariableIcon] =
28
- useState<boolean>(false);
29
- const [filteredOptions, setFilteredOptions] = useState<dynamicObject[]>([]);
30
- const inputRef = useRef<HTMLInputElement>(null);
16
+ const ConditionalDropdown = forwardRef<
17
+ HTMLInputElement,
18
+ ConditionalDropdownProps
19
+ >(
20
+ (
21
+ {
22
+ label = '',
23
+ hashInputValue = '',
24
+ setHashInputValue,
25
+ variableList = [],
26
+ placeholder = 'Enter text',
27
+ onChange,
28
+ onCreateVariableClick,
29
+ value = '',
30
+ dropdownWidth = 'inherit',
31
+ isHash = false,
32
+ dataFiles = [],
33
+ ...props
34
+ },
35
+ ref
36
+ ) => {
37
+ const [showDropdown, setShowDropdown] = useState<boolean>(false);
38
+ const [cursorPosition, setCursorPosition] = useState<number | null>(null);
39
+ const [showCreateVariableIcon, setShowCreateVariableIcon] =
40
+ useState<boolean>(false);
41
+ const [filteredOptions, setFilteredOptions] = useState<dynamicObject[]>([]);
42
+ const inputRef = useRef<HTMLInputElement>(null);
31
43
 
32
- useEffect(() => {
33
- if (cursorPosition !== null && inputRef.current) {
34
- inputRef.current.setSelectionRange(cursorPosition, cursorPosition);
35
- inputRef.current.focus();
36
- }
37
- }, [cursorPosition]);
44
+ // Expose the `inputRef` to the parent via `ref`
45
+ useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);
38
46
 
39
- useEffect(() => {
40
- if (inputValue.startsWith('#') && isHash) {
41
- const searchQuery = inputValue.slice(1).toLowerCase();
42
- const filtered = dataFiles.filter((file) =>
43
- file.name.toLowerCase().includes(searchQuery)
44
- );
45
-
46
- setFilteredOptions(filtered);
47
- setShowDropdown(filtered.length > 0);
48
- } else if (!isHash) {
49
- const newPayload = replaceVariablesWithIds(inputValue);
50
- onChange?.(newPayload);
51
- }
52
- }, [inputValue]);
53
-
54
- const replaceVariablesWithIds = (input: string): string => {
55
- return input.replace(/\${.*?_(.*?)}/g, (_, variableName) => {
56
- const foundVariable = variableList.find(
57
- (varaible) => varaible.name === variableName.trim()
58
- );
59
- return foundVariable ? `\${${foundVariable.id}}` : `\${${variableName}}`;
60
- });
61
- };
62
-
63
- const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
64
- const fieldValue = event.target.value;
65
- setInputValue(fieldValue);
66
- const cursorPos = inputRef.current?.selectionStart || 0;
67
- const isDollarTyped = fieldValue[cursorPos - 1] === '$';
47
+ useEffect(() => {
48
+ if (cursorPosition !== null && inputRef.current) {
49
+ inputRef.current.setSelectionRange(cursorPosition, cursorPosition);
50
+ inputRef.current.focus();
51
+ }
52
+ }, [cursorPosition]);
68
53
 
69
- if (isHash) {
70
- setShowDropdown(fieldValue.startsWith('#'));
71
- } else {
72
- if (isDollarTyped) {
73
- setShowDropdown(true);
54
+ useEffect(() => {
55
+ const cursorPos = inputRef.current?.selectionStart || 0;
56
+ const isDollarTyped = value[cursorPos - 1] === '$';
57
+ if (isHash) {
58
+ setShowDropdown(value.startsWith('#'));
74
59
  } else {
75
- setShowDropdown(false);
60
+ setShowDropdown(isDollarTyped);
61
+ setShowCreateVariableIcon(!value?.includes('$'));
76
62
  }
77
- if (fieldValue?.includes('$')) {
78
- setShowCreateVariableIcon(false);
79
- } else {
80
- setShowCreateVariableIcon(true);
63
+ if (value.startsWith('#') && isHash) {
64
+ const searchQuery = value.slice(1).toLowerCase();
65
+ const filtered = dataFiles.filter((file) =>
66
+ file.name.toLowerCase().includes(searchQuery)
67
+ );
68
+ setFilteredOptions(filtered);
69
+ setShowDropdown(filtered.length > 0);
81
70
  }
82
- }
83
- };
71
+ }, [value]);
84
72
 
85
- const handleDropdownClick = (item: dynamicObject) => {
86
- if (inputRef.current) {
87
- const { selectionStart, selectionEnd } = inputRef.current;
88
- const dollarSyntax = `{${
89
- item.type === 'LOCAL'
90
- ? 'LV'
91
- : item.type === 'GLOBAL'
92
- ? 'GV'
93
- : item.type === 'GROUP'
94
- ? 'SG'
95
- : 'PEV'
96
- }_${item.name}}`;
73
+ const handleDropdownClick = (item: dynamicObject) => {
74
+ if (inputRef.current) {
75
+ const { selectionStart, selectionEnd } = inputRef.current;
76
+ const dollarSyntax = `{${
77
+ item.type === 'LOCAL'
78
+ ? 'LV'
79
+ : item.type === 'GLOBAL'
80
+ ? 'GV'
81
+ : item.type === 'GROUP'
82
+ ? 'SG'
83
+ : 'PEV'
84
+ }_${item.name}}`;
97
85
 
98
- let newValue;
99
- if (isHash && inputValue[0] === '#') {
100
- newValue = item.name + inputValue.slice(selectionEnd || 1);
101
- } else {
102
- newValue =
103
- inputValue.slice(0, selectionStart || 0) +
104
- dollarSyntax +
105
- inputValue.slice(selectionEnd || 0);
86
+ let newValue;
87
+ if (isHash && value[0] === '#') {
88
+ newValue = item.name + value.slice(selectionEnd || 1);
89
+ } else {
90
+ newValue =
91
+ value.slice(0, selectionStart || 0) +
92
+ dollarSyntax +
93
+ value.slice(selectionEnd || 0);
94
+ }
95
+
96
+ if (onChange) {
97
+ const event = {
98
+ target: {
99
+ value: newValue,
100
+ },
101
+ } as React.ChangeEvent<HTMLInputElement>;
102
+ onChange(event);
103
+ }
104
+ inputRef.current.value = newValue;
105
+ setHashInputValue?.(item);
106
+ setCursorPosition((selectionStart || 0) + dollarSyntax.length);
107
+ setShowDropdown(false);
106
108
  }
107
- setHashInputValue?.(item);
108
- setInputValue(newValue);
109
- setCursorPosition((selectionStart || 0) + dollarSyntax.length);
110
- setShowDropdown(false);
111
- }
112
- };
109
+ };
113
110
 
114
- return (
115
- <div className="ff-add-variable-container">
116
- <div className="ff-add-variable-input">
117
- <Input
118
- {...props}
119
- name="add_variable"
120
- ref={inputRef}
121
- type="text"
122
- value={inputValue}
123
- onChange={handleChange}
124
- variant="primary"
125
- label={label}
126
- placeholder={placeholder}
127
- />
128
- {!checkEmpty(value) && !isHash && showCreateVariableIcon && (
129
- <Icon
130
- onClick={onCreateVariableClick}
111
+ return (
112
+ <div className="ff-add-variable-container">
113
+ <div className="ff-add-variable-input">
114
+ <Input
115
+ {...props}
131
116
  name="add_variable"
132
- width={24}
133
- height={24}
134
- hoverEffect
117
+ ref={inputRef}
118
+ type="text"
119
+ value={value}
120
+ onChange={onChange}
121
+ variant="primary"
122
+ label={label}
123
+ placeholder={placeholder}
135
124
  />
136
- )}
125
+ {!checkEmpty(value) && !isHash && showCreateVariableIcon && (
126
+ <Icon
127
+ onClick={onCreateVariableClick}
128
+ name="add_variable"
129
+ width={24}
130
+ height={24}
131
+ hoverEffect
132
+ />
133
+ )}
134
+ </div>
135
+ {showDropdown &&
136
+ (isHash ? (
137
+ <OptionsDropdown
138
+ position="relative"
139
+ width={dropdownWidth}
140
+ filteredOptions={filteredOptions}
141
+ onSelectVariable={handleDropdownClick}
142
+ />
143
+ ) : (
144
+ <VariableDropdown
145
+ position="absolute"
146
+ width={dropdownWidth}
147
+ optionsList={variableList}
148
+ onSelectVariable={handleDropdownClick}
149
+ />
150
+ ))}
137
151
  </div>
138
- {showDropdown &&
139
- (isHash ? (
140
- <OptionsDropdown
141
- position="relative"
142
- width={dropdownWidth}
143
- filteredOptions={filteredOptions}
144
- onSelectVariable={handleDropdownClick}
145
- />
146
- ) : (
147
- <VariableDropdown
148
- position="absolute"
149
- width={dropdownWidth}
150
- optionsList={variableList}
151
- onSelectVariable={handleDropdownClick}
152
- />
153
- ))}
154
- </div>
155
- );
156
- };
152
+ );
153
+ }
154
+ );
157
155
 
158
156
  export default ConditionalDropdown;
@@ -26,7 +26,7 @@ export interface ConditionalDropdownProps {
26
26
  /**
27
27
  * Function storing and updating the inputValue state
28
28
  */
29
- setHashInputValue?:(value: File |dynamicObject | null) => void;
29
+ setHashInputValue?: (value: File | dynamicObject | null) => void;
30
30
 
31
31
  /**
32
32
  * List of variables
@@ -41,7 +41,7 @@ export interface ConditionalDropdownProps {
41
41
  * @param value
42
42
  * @returns
43
43
  */
44
- onChange?: (value: string) => void;
44
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
45
45
  /**
46
46
  * Function to handle create variable icon click
47
47
  */
@@ -122,14 +122,14 @@ export interface ConditionalDropdownProps {
122
122
  */
123
123
  isLabelRequired?: boolean;
124
124
 
125
- /**
125
+ /**
126
126
  * If true, dropdown opens when '#' is entered at the first position.
127
127
  */
128
- isHash?: boolean;
129
- /**
130
- * Options for the dropdown when `isHash` is true.
131
- */
132
- dataFiles?: dynamicObject[];
128
+ isHash?: boolean;
129
+ /**
130
+ * Options for the dropdown when `isHash` is true.
131
+ */
132
+ dataFiles?: dynamicObject[];
133
133
  }
134
134
 
135
135
  export interface OptionsDropdownProps {