pixel-react-excel-sheet 1.0.37 → 1.0.39

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 (150) hide show
  1. package/lib/components/Button/Button.d.ts +2 -2
  2. package/lib/components/Charts/DashboardDonutChart/types.d.ts +3 -0
  3. package/lib/components/Charts/LineChart/types.d.ts +1 -0
  4. package/lib/components/ChooseFile/ChooseFile.d.ts +3 -2
  5. package/lib/components/Comment/Comments.d.ts +1 -1
  6. package/lib/components/Comment/type.d.ts +3 -3
  7. package/lib/components/ConditionalDropdown/types.d.ts +4 -0
  8. package/lib/components/DatePicker/types.d.ts +2 -0
  9. package/lib/components/Drawer/Types.d.ts +4 -1
  10. package/lib/components/Excel/ExcelFile/ExcelFile.d.ts +11 -10
  11. package/lib/components/Excel/ExcelFile/ExcelFileComponents/ActiveCell.d.ts +10 -0
  12. package/lib/components/Excel/ExcelFile/ExcelFileComponents/DataViewer.d.ts +1 -1
  13. package/lib/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.d.ts +9 -0
  14. package/lib/components/Excel/ExcelFile/ExcelFileComponents/types.d.ts +0 -2
  15. package/lib/components/Excel/Types.d.ts +14 -10
  16. package/lib/components/FF_Captcha/Recaptcha.d.ts +2 -1
  17. package/lib/components/FF_Captcha/types.d.ts +11 -2
  18. package/lib/components/Input/types.d.ts +4 -0
  19. package/lib/components/LabelEditTextField/types.d.ts +2 -0
  20. package/lib/components/MobileSkin/MobileSkin.d.ts +5 -0
  21. package/lib/components/MobileSkin/MobileSkinInterface.d.ts +13 -0
  22. package/lib/components/MobileSkin/index.d.ts +1 -0
  23. package/lib/components/MobileSkin/types.d.ts +32 -0
  24. package/lib/components/Search/Search.d.ts +1 -1
  25. package/lib/components/Search/types.d.ts +1 -0
  26. package/lib/components/Select/components/types.d.ts +3 -2
  27. package/lib/components/Select/types.d.ts +10 -2
  28. package/lib/components/SequentialConnectingBranch/components/Branches/Branches.d.ts +1 -1
  29. package/lib/components/SequentialConnectingBranch/components/Branches/types.d.ts +1 -0
  30. package/lib/components/SequentialConnectingBranch/components/ConnectingBranches/ConnectingBranches.d.ts +1 -1
  31. package/lib/components/SequentialConnectingBranch/components/ConnectingBranches/types.d.ts +1 -0
  32. package/lib/components/SequentialConnectingBranch/types.d.ts +1 -0
  33. package/lib/components/TableTree/types.d.ts +4 -4
  34. package/lib/components/Tabs/types.d.ts +1 -0
  35. package/lib/index.d.ts +97 -41
  36. package/lib/index.esm.js +4817 -1673
  37. package/lib/index.esm.js.map +1 -1
  38. package/lib/index.js +4830 -1673
  39. package/lib/index.js.map +1 -1
  40. package/lib/tsconfig.tsbuildinfo +1 -1
  41. package/lib/utils/formData/ConvertFormDataToObject.d.ts +1 -0
  42. package/lib/utils/keyBoardActionUtil/UseKeyboardActions.d.ts +2 -0
  43. package/lib/utils/keyBoardActionUtil/types.d.ts +4 -0
  44. package/lib/validations/regex.d.ts +11 -1
  45. package/package.json +6 -1
  46. package/src/assets/Themes/BaseTheme.scss +3 -1
  47. package/src/assets/Themes/DarkTheme.scss +10 -1
  48. package/src/assets/icons/clear_cache.svg +5 -0
  49. package/src/assets/icons/external_user.svg +13 -0
  50. package/src/assets/icons/group_user.svg +12 -0
  51. package/src/assets/icons/single_user.svg +12 -0
  52. package/src/assets/icons/test_freshers_logo.svg +8 -0
  53. package/src/assets/icons/unfollow_icon.svg +3 -0
  54. package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +7 -45
  55. package/src/components/AllProjectsDropdown/AllProjectsDropdown.stories.tsx +5 -0
  56. package/src/components/AllProjectsDropdown/AllProjectsDropdown.tsx +76 -64
  57. package/src/components/Button/Button.scss +0 -1
  58. package/src/components/Button/Button.tsx +3 -4
  59. package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.stories.tsx +38 -6
  60. package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.tsx +10 -4
  61. package/src/components/Charts/DashboardDonutChart/types.ts +4 -1
  62. package/src/components/Charts/LineChart/LineChart.stories.tsx +27 -88
  63. package/src/components/Charts/LineChart/LineChart.tsx +138 -42
  64. package/src/components/Charts/LineChart/types.ts +1 -0
  65. package/src/components/Charts/MultiRadialChart/MultiRadialChart.scss +3 -3
  66. package/src/components/Charts/MultiRadialChart/MultiRadialChart.tsx +47 -43
  67. package/src/components/ChooseFile/ChooseFile.tsx +3 -4
  68. package/src/components/Comment/Comments.scss +0 -1
  69. package/src/components/Comment/Comments.stories.tsx +22 -4
  70. package/src/components/Comment/Comments.tsx +20 -1
  71. package/src/components/Comment/type.ts +3 -3
  72. package/src/components/ConditionalDropdown/ConditionalDropdown.stories.tsx +1 -0
  73. package/src/components/ConditionalDropdown/ConditionalDropdown.tsx +2 -1
  74. package/src/components/ConditionalDropdown/types.ts +4 -0
  75. package/src/components/DatePicker/DatePicker.scss +307 -2
  76. package/src/components/DatePicker/DatePicker.tsx +27 -19
  77. package/src/components/DatePicker/types.ts +4 -0
  78. package/src/components/Drawer/Drawer.stories.tsx +1 -1
  79. package/src/components/Drawer/Drawer.tsx +5 -4
  80. package/src/components/Drawer/Types.ts +4 -2
  81. package/src/components/Editor/Editor.scss +23 -18
  82. package/src/components/Editor/Editor.tsx +2 -2
  83. package/src/components/Excel/ExcelContextMenu/ExcelContextMenu.tsx +6 -3
  84. package/src/components/Excel/ExcelFile/ExcelFile.scss +45 -41
  85. package/src/components/Excel/ExcelFile/ExcelFile.tsx +68 -64
  86. package/src/components/Excel/ExcelFile/ExcelFileComponents/ActiveCell.tsx +29 -1
  87. package/src/components/Excel/ExcelFile/ExcelFileComponents/Cell.tsx +0 -38
  88. package/src/components/Excel/ExcelFile/ExcelFileComponents/DataViewer.tsx +1 -40
  89. package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.scss +3 -3
  90. package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.tsx +12 -1
  91. package/src/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.ts +8 -74
  92. package/src/components/Excel/ExcelFile/ExcelFileComponents/types.ts +0 -3
  93. package/src/components/Excel/ExcelFile.stories.tsx +112 -125
  94. package/src/components/Excel/ExcelToolBar/ExcelToolBar.tsx +10 -11
  95. package/src/components/Excel/Types.ts +17 -15
  96. package/src/components/FF_Captcha/Recaptcha.tsx +19 -9
  97. package/src/components/FF_Captcha/types.ts +12 -4
  98. package/src/components/Icon/Icon.stories.tsx +56 -8
  99. package/src/components/Icon/iconList.ts +13 -1
  100. package/src/components/Input/Input.stories.tsx +12 -0
  101. package/src/components/Input/Input.tsx +3 -1
  102. package/src/components/Input/types.ts +4 -0
  103. package/src/components/InputWithDropdown/types.ts +1 -1
  104. package/src/components/LabelEditTextField/LabelEditTextField.scss +4 -0
  105. package/src/components/LabelEditTextField/LabelEditTextField.stories.tsx +2 -1
  106. package/src/components/LabelEditTextField/LabelEditTextField.tsx +14 -10
  107. package/src/components/LabelEditTextField/types.ts +2 -0
  108. package/src/components/LazyLoad/LazyLoad.stories.tsx +1 -0
  109. package/src/components/LazyLoad/LazyLoading.tsx +10 -1
  110. package/src/components/MachineInputField/MachineInputField.scss +5 -1
  111. package/src/components/MachineInputField/MachineInputField.tsx +1 -0
  112. package/src/components/MobileSkin/MobileSkin.scss +67 -0
  113. package/src/components/MobileSkin/MobileSkin.stories.tsx +93 -0
  114. package/src/components/MobileSkin/MobileSkin.tsx +89 -0
  115. package/src/components/MobileSkin/MobileSkinInterface.ts +13 -0
  116. package/src/components/MobileSkin/index.ts +1 -0
  117. package/src/components/MobileSkin/types.ts +32 -0
  118. package/src/components/Modal/Modal.stories.tsx +7 -0
  119. package/src/components/Modal/Modal.tsx +17 -20
  120. package/src/components/Search/Search.scss +8 -0
  121. package/src/components/Search/Search.tsx +17 -6
  122. package/src/components/Search/types.ts +1 -0
  123. package/src/components/Select/Select.stories.tsx +85 -0
  124. package/src/components/Select/Select.tsx +10 -2
  125. package/src/components/Select/components/Dropdown.tsx +23 -15
  126. package/src/components/Select/components/types.ts +3 -2
  127. package/src/components/Select/types.ts +12 -2
  128. package/src/components/SequentialConnectingBranch/SequentialConnectingBranch.tsx +2 -0
  129. package/src/components/SequentialConnectingBranch/components/Branches/Branches.tsx +65 -57
  130. package/src/components/SequentialConnectingBranch/components/Branches/types.ts +1 -0
  131. package/src/components/SequentialConnectingBranch/components/ConnectingBranches/ConnectingBranches.tsx +2 -0
  132. package/src/components/SequentialConnectingBranch/components/ConnectingBranches/types.ts +1 -0
  133. package/src/components/SequentialConnectingBranch/types.ts +5 -1
  134. package/src/components/TableTree/Components/TableCell.tsx +3 -3
  135. package/src/components/TableTree/TableTree.scss +0 -7
  136. package/src/components/TableTree/TableTree.tsx +3 -22
  137. package/src/components/TableTree/types.ts +4 -4
  138. package/src/components/Tabs/Tabs.scss +19 -0
  139. package/src/components/Tabs/Tabs.tsx +9 -0
  140. package/src/components/Tabs/types.ts +1 -0
  141. package/src/index.ts +27 -0
  142. package/src/utils/formData/ConvertFormDataToObject.stories.tsx +27 -0
  143. package/src/utils/formData/ConvertFormDataToObject.ts +14 -0
  144. package/src/utils/getExtension/getExtension.stories.tsx +1 -0
  145. package/src/utils/keyBoardActionUtil/UseKeyboardAction.stories.tsx +53 -0
  146. package/src/utils/keyBoardActionUtil/UseKeyboardActions.tsx +20 -0
  147. package/src/utils/keyBoardActionUtil/types.ts +4 -0
  148. package/src/validations/regex.stories.tsx +63 -0
  149. package/src/validations/regex.ts +34 -0
  150. package/src/assets/images/photo.png +0 -0
@@ -123,7 +123,7 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
123
123
  value: 'double_border',
124
124
  label: 'Double Underline',
125
125
  icon: 'double_underline',
126
- }
126
+ },
127
127
  ];
128
128
 
129
129
  const fontFamily = [
@@ -259,7 +259,7 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
259
259
  <Tooltip placement="top" title={'Text Left'}>
260
260
  <Icon
261
261
  variant={cellStyle.textAlign === 'left' ? 'dark' : 'light'}
262
- hoverEffect
262
+ hoverEffect={cellStyle.textAlign === 'left' ? false : true}
263
263
  disabled={toolbar === 'disable'}
264
264
  onClick={() => setTextAlign(data, 'left')}
265
265
  name="text_align_left"
@@ -268,7 +268,7 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
268
268
  <Tooltip placement="top" title={'Text Center'}>
269
269
  <Icon
270
270
  variant={cellStyle.textAlign === 'center' ? 'dark' : 'light'}
271
- hoverEffect
271
+ hoverEffect={cellStyle.textAlign === 'center' ? false : true}
272
272
  disabled={toolbar === 'disable'}
273
273
  onClick={() => setTextAlign(data, 'center')}
274
274
  name="text_align_center"
@@ -278,7 +278,7 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
278
278
  <Tooltip placement="top" title={'Text Right'}>
279
279
  <Icon
280
280
  variant={cellStyle.textAlign === 'right' ? 'dark' : 'light'}
281
- hoverEffect
281
+ hoverEffect={cellStyle.textAlign === 'right' ? false : true}
282
282
  disabled={toolbar === 'disable'}
283
283
  onClick={() => setTextAlign(data, 'right')}
284
284
  name="text_align_right"
@@ -290,7 +290,7 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
290
290
  <Tooltip placement="top" title={'Bold'}>
291
291
  <Icon
292
292
  variant={styleBackend.bold ? 'dark' : 'light'}
293
- hoverEffect
293
+ hoverEffect={styleBackend.bold ? false : true}
294
294
  disabled={toolbar === 'disable'}
295
295
  onClick={() => onBold(data)}
296
296
  name="bold"
@@ -298,8 +298,8 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
298
298
  </Tooltip>
299
299
  <Tooltip placement="top" title={'Italic'}>
300
300
  <Icon
301
- hoverEffect
302
301
  variant={styleBackend.italic ? 'dark' : 'light'}
302
+ hoverEffect={styleBackend.italic ? false : true}
303
303
  disabled={toolbar === 'disable'}
304
304
  onClick={() => onItalic(data)}
305
305
  name="italic"
@@ -311,7 +311,9 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
311
311
  variant={
312
312
  cellStyle.textDecoration === underLine ? 'dark' : 'light'
313
313
  }
314
- hoverEffect
314
+ hoverEffect={
315
+ cellStyle.textDecoration === underLine ? false : true
316
+ }
315
317
  disabled={toolbar === 'disable'}
316
318
  onClick={() => setUnderlineType(data, underLine, true)}
317
319
  name={getUnderlineIcon()}
@@ -324,7 +326,6 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
324
326
  iconSize={12}
325
327
  options={underlineTypeIcon}
326
328
  tooltipPlacement="top"
327
- variant="light"
328
329
  onOptionClick={(e) => {
329
330
  let selectedValue = e.value as string;
330
331
  setUnderlineType(data, selectedValue, true);
@@ -340,7 +341,7 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
340
341
  <Tooltip placement="top" title={'Format Painter'}>
341
342
  <Icon
342
343
  variant={formattedStyle ? 'dark' : 'light'}
343
- hoverEffect
344
+ hoverEffect={formattedStyle ? false : true}
344
345
  disabled={toolbar === 'disable'}
345
346
  onClick={() => {
346
347
  setFormatePainter(data);
@@ -403,7 +404,6 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
403
404
  zIndex={1000}
404
405
  options={borderTypeIcon}
405
406
  tooltipPlacement="top"
406
- variant="light"
407
407
  onOptionClick={(e) => {
408
408
  let selectedValue = e.value as string;
409
409
  setBorderType(data, selectedValue, 'black');
@@ -415,7 +415,6 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
415
415
  </Tooltip>
416
416
  </div>
417
417
 
418
-
419
418
  {/* <div className="ff-excel-toolbar-divider"></div> TODO */}
420
419
  {/* <div className="ff-excel-toolbar-menu">
421
420
  <Tooltip placement="top" title={'Formula'}>
@@ -43,7 +43,7 @@ type BackendStyle = {
43
43
  color: string;
44
44
  backgroundColor: string;
45
45
  borderColor: string;
46
- underline:string;
46
+ underline: string;
47
47
  border: {
48
48
  top: string;
49
49
  bottom: string;
@@ -79,20 +79,6 @@ interface ContextOption {
79
79
  value: ContextAction[];
80
80
  }
81
81
 
82
- interface ContextMenuState {
83
- /** Whether the context menu is visible */
84
- visible: boolean;
85
-
86
- /** X-coordinate position for the context menu */
87
- x: number;
88
-
89
- /** Y-coordinate position for the context menu */
90
- y: number;
91
-
92
- /** Type of the context menu ('cell', 'row', 'column', or 'sheet_options') */
93
- type: 'cell' | 'row' | 'column' | 'sheet_options' | null;
94
- }
95
-
96
82
  interface SelectedCell {
97
83
  /** The row index of the selected cell */
98
84
  row: number;
@@ -112,6 +98,22 @@ interface ColorContainer {
112
98
  borderColor: string;
113
99
  }
114
100
 
101
+ interface ContextMenuState {
102
+ open: boolean;
103
+ position: {
104
+ x: number;
105
+ y: number;
106
+ };
107
+ options: optionsType[];
108
+ }
109
+
110
+ interface optionsType {
111
+ label: string;
112
+ value: string;
113
+ iconName: string;
114
+ action: () => void;
115
+ }
116
+
115
117
  interface SelectedValue {
116
118
  /** The value inside the selected cell */
117
119
  value: string;
@@ -1,14 +1,27 @@
1
- import { useState, forwardRef } from 'react';
1
+ import React, { useState, forwardRef, ComponentType, Ref } from 'react';
2
2
  import ReCAPTCHA from 'react-google-recaptcha';
3
3
  import { RecaptchaProps } from './types';
4
4
  import './Recaptcha.scss';
5
5
  import classNames from 'classnames';
6
6
  import Typography from '../Typography';
7
-
7
+ // Extend the props to include React.RefAttributes
8
+ const FixedReCAPTCHA = ReCAPTCHA as unknown as ComponentType<
9
+ {
10
+ sitekey: string;
11
+ onChange: (token: string | null) => void;
12
+ className?: string;
13
+ theme?: 'light' | 'dark';
14
+ size?: 'compact' | 'normal' | 'invisible';
15
+ tabindex?: number;
16
+ badge?: 'bottomright' | 'bottomleft' | 'inline';
17
+ } & React.RefAttributes<ReCAPTCHA>
18
+ >;
8
19
  const Recaptcha = forwardRef<ReCAPTCHA, RecaptchaProps>(
9
- ({ onVerify, className = '', error: externalError, sitekey, ...props }, ref) => {
20
+ (
21
+ { onVerify, className = '', error: externalError, sitekey, ...props },
22
+ ref: Ref<ReCAPTCHA>
23
+ ) => {
10
24
  const [internalError, setInternalError] = useState<string | null>(null);
11
-
12
25
  const handleChange = (token: string | null) => {
13
26
  if (token) {
14
27
  setInternalError(null);
@@ -17,12 +30,10 @@ const Recaptcha = forwardRef<ReCAPTCHA, RecaptchaProps>(
17
30
  setInternalError('Please complete the CAPTCHA');
18
31
  }
19
32
  };
20
-
21
33
  const error = externalError || internalError;
22
-
23
34
  return (
24
35
  <div className={classNames('ff-recaptcha-wrapper', className)}>
25
- <ReCAPTCHA
36
+ <FixedReCAPTCHA
26
37
  ref={ref}
27
38
  sitekey={sitekey}
28
39
  onChange={handleChange}
@@ -37,5 +48,4 @@ const Recaptcha = forwardRef<ReCAPTCHA, RecaptchaProps>(
37
48
  );
38
49
  }
39
50
  );
40
-
41
- export default Recaptcha;
51
+ export default Recaptcha;
@@ -1,7 +1,16 @@
1
1
  import { ComponentProps } from 'react';
2
- import ReCAPTCHA from 'react-google-recaptcha';
3
-
4
- export interface RecaptchaProps extends Omit<ComponentProps<typeof ReCAPTCHA>, 'onChange'> {
2
+ // Fix ReCAPTCHA type by casting to a compatible type
3
+ type FixedReCAPTCHA = React.ComponentType<{
4
+ sitekey: string;
5
+ onChange: (token: string | null) => void;
6
+ className?: string;
7
+ theme?: 'light' | 'dark';
8
+ size?: 'compact' | 'normal' | 'invisible';
9
+ tabindex?: number;
10
+ badge?: 'bottomright' | 'bottomleft' | 'inline';
11
+ }>;
12
+ export interface RecaptchaProps
13
+ extends Omit<ComponentProps<FixedReCAPTCHA>, 'onChange'> {
5
14
  /**
6
15
  * Callback function that receives the verification token
7
16
  */
@@ -19,4 +28,3 @@ export interface RecaptchaProps extends Omit<ComponentProps<typeof ReCAPTCHA>, '
19
28
  */
20
29
  sitekey: string;
21
30
  }
22
-
@@ -1,6 +1,7 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import Icon from './Icon';
3
3
  import Components from './iconList';
4
+ import React, { useState } from 'react';
4
5
 
5
6
  const meta: Meta<typeof Icon> = {
6
7
  title: 'Components/Icon',
@@ -25,16 +26,63 @@ export const Icons: Story = {
25
26
 
26
27
  export const AllIcons: Story = {
27
28
  render: () => {
29
+ const [searchTerm, setSearchTerm] = useState('');
30
+
31
+ const filteredIcons = Object.keys(Components).filter((iconName) =>
32
+ iconName.toLowerCase().includes(searchTerm.toLowerCase())
33
+ );
34
+
28
35
  return (
29
- <div className="group-icons">
30
- {Object.keys(Components).map((iconName) => {
31
- return (
32
- <div key={iconName}>
36
+ <div>
37
+ <input
38
+ type="text"
39
+ placeholder="Search icons..."
40
+ value={searchTerm}
41
+ onChange={(e) => setSearchTerm(e.target.value)}
42
+ style={{
43
+ marginBottom: '16px',
44
+ padding: '8px',
45
+ width: '100%',
46
+ boxSizing: 'border-box',
47
+ }}
48
+ />
49
+ <div
50
+ className="group-icons"
51
+ style={{
52
+ display: 'flex',
53
+ gap: 8,
54
+ flexWrap: 'wrap',
55
+ alignItems: 'center',
56
+ justifyContent: 'center',
57
+ }}
58
+ >
59
+ {filteredIcons.map((iconName) => (
60
+ <div
61
+ key={iconName}
62
+ style={{
63
+ border: '1px solid var(--brand-color)',
64
+ width: '30%',
65
+ display: 'flex',
66
+ alignItems: 'center',
67
+ justifyContent: 'center',
68
+ flexDirection: 'column',
69
+ }}
70
+ >
33
71
  <Icon name={iconName} height={40} width={40} />
34
- <center title={iconName}>{iconName}</center>
72
+ <p
73
+ style={{
74
+ whiteSpace: 'nowrap',
75
+ textOverflow: 'ellipsis',
76
+ overflow: 'hidden',
77
+ width: '160px',
78
+ }}
79
+ title={iconName}
80
+ >
81
+ {iconName}
82
+ </p>
35
83
  </div>
36
- );
37
- })}
84
+ ))}
85
+ </div>
38
86
  </div>
39
87
  );
40
88
  },
@@ -62,4 +110,4 @@ export const DarkVariantIcons: Story = {
62
110
  },
63
111
  };
64
112
 
65
- export default meta;
113
+ export default meta;
@@ -127,6 +127,7 @@ import LabelPlusIcon from '../../assets/icons/label_plus.svg?react';
127
127
  import Drag from '../../assets/icons/drag_icon.svg?react';
128
128
  import BackwardIcon from '../../assets/icons/backward_icon.svg?react';
129
129
  import ForwardIcon from '../../assets/icons/forward_icon.svg?react';
130
+ import ClearCache from '../../assets/icons/clear_cache.svg?react';
130
131
  import Reload from '../../assets/icons/reload.svg?react';
131
132
  import WindowMaximize from '../../assets/icons/window_maximize.svg?react';
132
133
  import WindowRestore from '../../assets/icons/window_restore.svg?react';
@@ -253,6 +254,11 @@ import suitesIcon from '../../assets/icons/suites_icon.svg?react';
253
254
  import executionsIcon from '../../assets/icons/executions_icon.svg?react';
254
255
  import ImportIcon from '../../assets/icons/import_icon.svg?react';
255
256
  import Settings from '../../assets/icons/settings.svg?react';
257
+ import UnfollowIcon from '../../assets/icons/unfollow_icon.svg?react';
258
+ import ExternalUser from '../../assets/icons/external_user.svg?react';
259
+ import SingleUser from '../../assets/icons/single_user.svg?react';
260
+ import GroupUser from '../../assets/icons/group_user.svg?react';
261
+ import TestFreshersLogo from '../../assets/icons/test_freshers_logo.svg?react';
256
262
 
257
263
  Components['success'] = ToastSuccessIcon;
258
264
  Components['alert'] = Alert;
@@ -379,6 +385,7 @@ Components['browser_stack_icon'] = BrowserStack;
379
385
  Components['run_icon'] = Run;
380
386
  Components['backward_icon'] = BackwardIcon;
381
387
  Components['forward_icon'] = ForwardIcon;
388
+ Components['clear_cache'] = ClearCache;
382
389
  Components['reload'] = Reload;
383
390
  Components['window_maximize'] = WindowMaximize;
384
391
  Components['window_restore'] = WindowRestore;
@@ -500,6 +507,11 @@ Components['machine_disable_icon'] = machineDisableIcon;
500
507
  Components['executions_icon'] = executionsIcon;
501
508
  Components['suites_icon'] = suitesIcon;
502
509
  Components['import_icon'] = ImportIcon;
503
- Components['settings'] = Settings
510
+ Components['settings'] = Settings;
511
+ Components['test_freshers_logo']=TestFreshersLogo;
512
+ Components['unfollow_icon']=UnfollowIcon
513
+ Components['external_user'] = ExternalUser;
514
+ Components['single_user'] = SingleUser;
515
+ Components['group_user'] = GroupUser;
504
516
 
505
517
  export default Components;
@@ -51,6 +51,18 @@ export const DisabledWithValue: Story = {
51
51
  },
52
52
  };
53
53
 
54
+ export const AutoFocusInput: Story = {
55
+ args: {
56
+ ...defaultArgs,
57
+ label: 'Name',
58
+ variant: 'primary',
59
+ type: 'text',
60
+ value: '',
61
+ required: true,
62
+ autoFocus: true,
63
+ },
64
+ };
65
+
54
66
  export const WithoutLabel: Story = {
55
67
  render: () => {
56
68
  const [value, setValue] = useState('');
@@ -23,6 +23,7 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
23
23
  onBlur,
24
24
  onFocus,
25
25
  autoComplete = 'off',
26
+ autoFocus = false,
26
27
  minValue = -Infinity,
27
28
  maxValue = Infinity,
28
29
  transparentBackground = false,
@@ -48,13 +49,13 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
48
49
  >
49
50
  {isLabelRequired && (
50
51
  <label
51
- htmlFor={name}
52
52
  className={classNames(
53
53
  `ff-input-label-container ff-input-label-container--${size}`,
54
54
  {
55
55
  'ff-input-label-container--danger': !!error,
56
56
  }
57
57
  )}
58
+ htmlFor={name}
58
59
  >
59
60
  {required && <span className="required-asterisk">*</span>}
60
61
  <span
@@ -97,6 +98,7 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
97
98
  onFocus={onFocus}
98
99
  onBlur={onBlur}
99
100
  autoComplete={autoComplete}
101
+ autoFocus={autoFocus}
100
102
  min={minValue}
101
103
  max={maxValue}
102
104
  {...props}
@@ -65,6 +65,10 @@ export interface InputProps {
65
65
  * if on, suggestion popup will be displayed
66
66
  */
67
67
  autoComplete?: 'on' | 'off';
68
+ /**
69
+ * if true, input field is in autofocus state
70
+ */
71
+ autoFocus?: boolean;
68
72
  /**
69
73
  * minimum and maximum values for the number type input field and their functions
70
74
  */
@@ -15,7 +15,7 @@ export interface InputWithDropdownProps {
15
15
  * Label | field label to be displayed
16
16
  */
17
17
  label?: string;
18
-
18
+
19
19
  /**
20
20
  * value | input field value
21
21
  */
@@ -88,3 +88,7 @@
88
88
  color: var(--label-edit-error-text);
89
89
  }
90
90
  }
91
+ .custom-edit-text-field {
92
+ height: 10px;
93
+ width: 100px;
94
+ }
@@ -187,11 +187,12 @@ export const openLabelEditTextField: Story = {
187
187
  confirmAction={handleConfirmAction}
188
188
  onInputChange={handleInputChange}
189
189
  isOpen={true}
190
+ className="custom-edit-text-field"
191
+ showText={false}
190
192
  customError="text is too long"
191
193
  customErrorCondition={demoText?.length > 10}
192
194
  />
193
195
  );
194
196
  },
195
197
  };
196
-
197
198
  export default meta;
@@ -30,6 +30,7 @@ const LabelEditTextField: FC<LabelEditTextFieldTypes> = ({
30
30
  label,
31
31
  placeholder,
32
32
  text,
33
+ showText = true,
33
34
  highlightText,
34
35
  customError,
35
36
  confirmIcon,
@@ -39,6 +40,7 @@ const LabelEditTextField: FC<LabelEditTextFieldTypes> = ({
39
40
  onInputChange,
40
41
  dropdownData = [],
41
42
  // width,
43
+ className,
42
44
  height,
43
45
  isOpen = false,
44
46
  confirmAction,
@@ -182,7 +184,7 @@ const LabelEditTextField: FC<LabelEditTextFieldTypes> = ({
182
184
  placeholder={placeholder ? placeholder : ''}
183
185
  value={inputValue}
184
186
  onChange={handleTextFieldChange}
185
- className={`
187
+ className={`${className}
186
188
 
187
189
  ${isTextFieldModified ? 'modified' : ''}`}
188
190
  />
@@ -203,7 +205,7 @@ const LabelEditTextField: FC<LabelEditTextFieldTypes> = ({
203
205
  placeholder={placeholder ? placeholder : ''}
204
206
  value={inputValue}
205
207
  onChange={handleTextFieldChange}
206
- className={`
208
+ className={`${className}
207
209
 
208
210
  ${isTextFieldModified ? 'modified' : ''}`}
209
211
  />
@@ -241,14 +243,16 @@ const LabelEditTextField: FC<LabelEditTextFieldTypes> = ({
241
243
  title={tooltip?.tooltipTitle ? tooltip?.tooltipTitle : ''}
242
244
  placement={'bottom'}
243
245
  >
244
- <span
245
- className="display-text"
246
- onDoubleClick={handleDoubleClick}
247
- role="button"
248
- onClick={handleClick}
249
- >
250
- <HighlightText text={inputValue} highlight={highlightText} />
251
- </span>
246
+ {showText && (
247
+ <span
248
+ className="display-text"
249
+ onDoubleClick={handleDoubleClick}
250
+ role="button"
251
+ onClick={handleClick}
252
+ >
253
+ <HighlightText text={inputValue} highlight={highlightText} />
254
+ </span>
255
+ )}
252
256
  </Tooltip>
253
257
  )}
254
258
  {showError && isEditing && (
@@ -17,6 +17,7 @@ export interface LabelEditTextFieldTypes {
17
17
  label?: string;
18
18
  /** Initial text displayed in the input field. */
19
19
  text?: string;
20
+ showText?: boolean;
20
21
  /** Text to be highlighted within the displayed text, if provided. */
21
22
  highlightText?: string;
22
23
  /** Custom error message to be displayed, if applicable. */
@@ -42,6 +43,7 @@ export interface LabelEditTextFieldTypes {
42
43
  onClick?: () => void;
43
44
  /** Function called when every input character got changed */
44
45
  onInputChange?: (newInputValue: string) => void;
46
+ className?: string;
45
47
  tooltip?: {
46
48
  tooltipTitle?: string;
47
49
  tooltipPlacement?: string;
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { Meta, StoryObj } from '@storybook/react';
2
3
  import LazyLoading from './LazyLoading';
3
4
 
@@ -1,5 +1,14 @@
1
+ import React, { ComponentType } from 'react';
1
2
  import LazyLoad from './LazyLoad';
2
- const { FixedSizeList } = LazyLoad;
3
+ const { FixedSizeList: _FixedSizeList } = LazyLoad;
4
+
5
+ const FixedSizeList = _FixedSizeList as unknown as ComponentType<{
6
+ height: number;
7
+ itemCount: number;
8
+ itemSize: number;
9
+ width: number;
10
+ children: (props: { index: number; style: React.CSSProperties }) => JSX.Element;
11
+ }>;
3
12
  const Row = ({
4
13
  index,
5
14
  style,
@@ -15,6 +15,10 @@
15
15
  align-items: center;
16
16
  justify-content: space-between;
17
17
 
18
+ &:hover {
19
+ border-color: var(--ff-connecting-branch-color);
20
+ }
21
+
18
22
  .ff-machine-icon-text-wrapper,
19
23
  .ff-machine-icon-text-wrapper-reverse {
20
24
  display: flex;
@@ -47,7 +51,7 @@
47
51
  position: absolute;
48
52
  top: -6px;
49
53
  left: 8px;
50
- background-color: var(--ff-machine-input-field-border-color);
54
+ background-color: var(--ff-machine-input-field-label-color);
51
55
  border-radius: 4px;
52
56
  padding: 1px 2px;
53
57
  height: 12px;
@@ -20,6 +20,7 @@ const MachineInputField = ({
20
20
  sauceLabs: 'sause_lab',
21
21
  lambdaTest: 'lambda_icon',
22
22
  mac: 'mac_icon',
23
+ mac_icon: 'mac_icon',
23
24
  android: 'android_icon',
24
25
  linux: 'linux',
25
26
  'google chrome': 'chrome_icon',
@@ -0,0 +1,67 @@
1
+ @use '../../assets/styles/fonts';
2
+ @use '../../assets/styles/mixins' as *;
3
+
4
+ .ff-mobileskin-wrapper {
5
+ @include center-content;
6
+ flex-direction: column;
7
+
8
+ &.portrait {
9
+ gap: 30px;
10
+ }
11
+
12
+ &.landscape {
13
+ gap: 38px;
14
+ }
15
+
16
+ .ff-mobileskin-container {
17
+ @extend .ff-mobileskin-wrapper;
18
+ .ff-mobile-container {
19
+ @include center-content;
20
+ border: 8px solid var(--text-color);
21
+ border-radius: 30px;
22
+ position: relative;
23
+ overflow: hidden;
24
+
25
+ &::-webkit-scrollbar {
26
+ width: 0;
27
+ height: 0;
28
+ }
29
+
30
+ &::-webkit-scrollbar-thumb {
31
+ background-color: transparent;
32
+ }
33
+ .ff-mobile-image-container {
34
+ @include center-content;
35
+ overflow: hidden;
36
+ }
37
+ }
38
+ }
39
+
40
+ .ff-notch {
41
+ background-color: var(--text-color);
42
+ border-radius: 24px;
43
+ position: absolute;
44
+ &.android-notch {
45
+ border-radius: 50%;
46
+ }
47
+ }
48
+ .ff-nav-bar {
49
+ height: 32px;
50
+ padding: 8px;
51
+ display: flex;
52
+ justify-content: space-evenly;
53
+ align-items: center;
54
+ border: 1px solid var(--brand-color);
55
+ border-radius: 24px;
56
+ }
57
+ .ff-nav-bar-icon {
58
+ height: 16px;
59
+ padding: 8px;
60
+ border-right: 1px solid var(--brand-color);
61
+ @include center-content;
62
+
63
+ &.last-icon {
64
+ border-right: none;
65
+ }
66
+ }
67
+ }