pixel-react 1.4.3 → 1.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/lib/components/AddResourceButton/type.d.ts +1 -1
  3. package/lib/components/Drawer/Types.d.ts +4 -0
  4. package/lib/components/Excel/ExcelContextMenu/ExcelContextMenu.d.ts +13 -0
  5. package/lib/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.d.ts +0 -13
  6. package/lib/components/Excel/ExcelFile/ExcelFileComponents/actions.d.ts +29 -1
  7. package/lib/components/Excel/ExcelFile/ExcelFileComponents/engine/engine.d.ts +3 -9
  8. package/lib/components/Excel/ExcelFile/ExcelFileComponents/engine/formula.d.ts +2 -10
  9. package/lib/components/Excel/ExcelFile/ExcelFileComponents/engine/point-graph.d.ts +0 -1
  10. package/lib/components/Excel/ExcelFile/ExcelFileComponents/types.d.ts +27 -2
  11. package/lib/components/Form/Forms.d.ts +4 -2
  12. package/lib/components/InputWithDropdown/InputWithDropdown.d.ts +1 -1
  13. package/lib/components/MenuOption/MenuOption.d.ts +1 -1
  14. package/lib/components/MenuOption/types.d.ts +49 -15
  15. package/lib/components/MultiSelect/MultiSelect.d.ts +1 -1
  16. package/lib/components/MultiSelect/MultiSelectTypes.d.ts +4 -5
  17. package/lib/components/MultiSelect/dropdownTypes.d.ts +2 -0
  18. package/lib/components/RadioButton/RadioButton.d.ts +1 -0
  19. package/lib/components/RadioButton/radioButtonTypes.d.ts +3 -1
  20. package/lib/components/Select/components/types.d.ts +4 -2
  21. package/lib/components/Table/Table.d.ts +1 -1
  22. package/lib/components/ToggleSwitch/ToggleSwitch.d.ts +10 -0
  23. package/lib/components/ToggleSwitch/index.d.ts +1 -0
  24. package/lib/index.d.ts +109 -23
  25. package/lib/index.esm.js +5711 -635
  26. package/lib/index.esm.js.map +1 -1
  27. package/lib/index.js +5707 -629
  28. package/lib/index.js.map +1 -1
  29. package/lib/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +11 -11
  31. package/src/StyleGuide/ColorPalette/colorPaletteList.ts +10 -0
  32. package/src/assets/Themes/BaseTheme.scss +17 -23
  33. package/src/assets/Themes/DarkTheme.scss +25 -38
  34. package/src/assets/icons/apk_file_type.svg +4 -0
  35. package/src/assets/icons/compressed_file_type.svg +4 -0
  36. package/src/assets/icons/csv_file_type.svg +4 -0
  37. package/src/assets/icons/excel_corner_menu.svg +3 -0
  38. package/src/assets/icons/formula_icon.svg +3 -0
  39. package/src/assets/icons/gif_file_type.svg +4 -0
  40. package/src/assets/icons/html_file_type.svg +4 -0
  41. package/src/assets/icons/ipk_file_type.svg +4 -0
  42. package/src/assets/icons/jpg_file_type.svg +4 -0
  43. package/src/assets/icons/json_file_type.svg +4 -0
  44. package/src/assets/icons/pdf_file_type.svg +4 -0
  45. package/src/assets/icons/png_file_type.svg +4 -0
  46. package/src/assets/icons/quick_run_setting_icon.svg +5 -0
  47. package/src/assets/icons/run_automation_scripts_icon.svg +33 -0
  48. package/src/assets/icons/run_manual_testcase_icon.svg +4 -0
  49. package/src/assets/icons/search.svg +2 -2
  50. package/src/assets/icons/txt_file_type.svg +4 -0
  51. package/src/assets/icons/xls_file_type.svg +4 -0
  52. package/src/assets/icons/xlsx_file_type.svg +4 -0
  53. package/src/assets/icons/xml_file_type.svg +4 -0
  54. package/src/components/AddResourceButton/AddButton.tsx +7 -7
  55. package/src/components/AddResourceButton/type.ts +1 -1
  56. package/src/components/AttachmentButton/AttachmentButton.scss +1 -1
  57. package/src/components/AttachmentButton/AttachmentButton.stories.tsx +1 -0
  58. package/src/components/Button/Button.scss +22 -20
  59. package/src/components/Button/Button.tsx +8 -1
  60. package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.tsx +2 -2
  61. package/src/components/Drawer/Drawer.scss +4 -3
  62. package/src/components/Drawer/Drawer.tsx +14 -18
  63. package/src/components/Drawer/Types.ts +4 -0
  64. package/src/components/Editor/Editor.tsx +9 -11
  65. package/src/components/Excel/ExcelContextMenu/ExcelContextMenu.scss +39 -0
  66. package/src/components/Excel/ExcelContextMenu/ExcelContextMenu.tsx +51 -0
  67. package/src/components/Excel/ExcelFile/ExcelFile.tsx +7 -8
  68. package/src/components/Excel/ExcelFile/ExcelFileComponents/Cell.tsx +35 -0
  69. package/src/components/Excel/ExcelFile/ExcelFileComponents/ColumnIndicator.tsx +44 -7
  70. package/src/components/Excel/ExcelFile/ExcelFileComponents/CornerIndicator.tsx +8 -1
  71. package/src/components/Excel/ExcelFile/ExcelFileComponents/RowIndicator.tsx +45 -6
  72. package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.scss +37 -2
  73. package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.tsx +69 -24
  74. package/src/components/Excel/ExcelFile/ExcelFileComponents/actions.ts +59 -0
  75. package/src/components/Excel/ExcelFile/ExcelFileComponents/engine/engine.ts +18 -65
  76. package/src/components/Excel/ExcelFile/ExcelFileComponents/engine/formula.ts +5 -110
  77. package/src/components/Excel/ExcelFile/ExcelFileComponents/engine/point-graph.ts +0 -2
  78. package/src/components/Excel/ExcelFile/ExcelFileComponents/reducer.ts +105 -1
  79. package/src/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.ts +670 -673
  80. package/src/components/Excel/ExcelFile/ExcelFileComponents/types.ts +38 -2
  81. package/src/components/Excel/ExcelToolBar/ExcelToolBar.tsx +0 -4
  82. package/src/components/FileDropzone/FileDropzone.scss +4 -2
  83. package/src/components/FileDropzone/FileDropzone.tsx +1 -1
  84. package/src/components/FileDropzone/FilePreview.tsx +3 -1
  85. package/src/components/Form/Form.scss +2 -0
  86. package/src/components/Form/Form.stories.tsx +195 -6
  87. package/src/components/Form/Forms.tsx +15 -8
  88. package/src/components/Icon/iconList.ts +46 -0
  89. package/src/components/IconRadioGroup/IconRadioGroup.scss +3 -0
  90. package/src/components/IconRadioGroup/IconRadioGroup.tsx +20 -17
  91. package/src/components/Input/Input.scss +14 -15
  92. package/src/components/Input/Input.stories.tsx +2 -1
  93. package/src/components/InputWithDropdown/InputWithDropdown.scss +12 -13
  94. package/src/components/InputWithDropdown/InputWithDropdown.stories.tsx +3 -2
  95. package/src/components/InputWithDropdown/InputWithDropdown.tsx +22 -19
  96. package/src/components/MenuOption/MenuOption.scss +11 -10
  97. package/src/components/MenuOption/MenuOption.stories.tsx +51 -232
  98. package/src/components/MenuOption/MenuOption.tsx +131 -52
  99. package/src/components/MenuOption/types.ts +55 -14
  100. package/src/components/MiniModal/MiniModal.stories.tsx +2 -3
  101. package/src/components/MultiSelect/Dropdown.tsx +11 -12
  102. package/src/components/MultiSelect/MultiSelect.scss +1 -0
  103. package/src/components/MultiSelect/MultiSelect.stories.tsx +45 -10
  104. package/src/components/MultiSelect/MultiSelect.tsx +29 -13
  105. package/src/components/MultiSelect/MultiSelectTypes.ts +7 -5
  106. package/src/components/MultiSelect/dropdownTypes.ts +2 -0
  107. package/src/components/RadioButton/RadioButton.scss +3 -1
  108. package/src/components/RadioButton/RadioButton.tsx +3 -1
  109. package/src/components/RadioButton/radioButtonTypes.tsx +5 -1
  110. package/src/components/Search/Search.scss +25 -6
  111. package/src/components/Search/Search.tsx +45 -24
  112. package/src/components/Select/Select.scss +12 -12
  113. package/src/components/Select/Select.stories.tsx +2 -0
  114. package/src/components/Select/Select.tsx +11 -5
  115. package/src/components/Select/components/Dropdown.scss +2 -0
  116. package/src/components/Select/components/Dropdown.tsx +19 -4
  117. package/src/components/Select/components/types.ts +4 -2
  118. package/src/components/StatusButton/StatusButton.tsx +26 -20
  119. package/src/components/Table/Table.scss +1 -3
  120. package/src/components/Table/Table.stories.tsx +1 -0
  121. package/src/components/Table/Table.tsx +7 -3
  122. package/src/components/ToggleSwitch/ToggleSwitch.scss +59 -0
  123. package/src/components/ToggleSwitch/ToggleSwitch.stories.tsx +52 -0
  124. package/src/components/ToggleSwitch/ToggleSwitch.tsx +30 -0
  125. package/src/components/ToggleSwitch/index.ts +1 -0
  126. package/src/hooks/useFileDropzone.tsx +1 -0
  127. package/src/index.ts +4 -2
  128. package/src/components/Excel/ContextMenu/ContextMenu.scss +0 -99
  129. package/src/components/Excel/ContextMenu/ContextMenu.tsx +0 -103
@@ -1,10 +1,10 @@
1
1
  import * as React from 'react';
2
- import FormulaParser from 'fast-formula-parser';
3
2
  import { Point } from './point';
4
3
  import { Selection } from './selection';
5
4
  import { Model } from './engine';
6
5
  import { PointRange } from './point-range';
7
6
  import { Matrix } from './matrix';
7
+ import * as MatrixValue from './matrix';
8
8
 
9
9
  /** The base type of cell data in Spreadsheet */
10
10
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -65,6 +65,8 @@ export type StoreState<Cell extends CellBase = CellBase> = {
65
65
  dragging: boolean;
66
66
  lastChanged: Point | null;
67
67
  lastCommit: null | CellChange<Cell>[];
68
+ selectedRow: null | number;
69
+ selectedColumn: null | number;
68
70
  };
69
71
 
70
72
  export type CellChange<Cell extends CellBase = CellBase> = {
@@ -102,6 +104,8 @@ export type CellComponentProps<Cell extends CellBase = CellBase> = {
102
104
  setCellDimensions: (point: Point, dimensions: Dimensions) => void;
103
105
  /** Set data of the cell */
104
106
  setCellData: (cell: Cell) => void;
107
+
108
+ setContextMenu: React.Dispatch<React.SetStateAction<ContextMenuState>>;
105
109
  };
106
110
 
107
111
  /** Type of the Spreadsheet Cell component */
@@ -174,6 +178,30 @@ export type RowIndicatorProps = {
174
178
  selected: boolean;
175
179
  /** Callback to be called when the row is selected */
176
180
  onSelect: (row: number, extend: boolean) => void;
181
+
182
+ setContextMenu: React.Dispatch<React.SetStateAction<ContextMenuState>>;
183
+
184
+ deleteRow: (data: MatrixValue.Matrix<CellBase>) => void;
185
+
186
+ addRowTop: (data: MatrixValue.Matrix<CellBase>) => void;
187
+
188
+ data: MatrixValue.Matrix<CellBase>;
189
+ };
190
+
191
+ export type ContextMenuState = {
192
+ open: boolean;
193
+ position: {
194
+ x: number;
195
+ y: number;
196
+ };
197
+ options: optionsType[];
198
+ };
199
+
200
+ type optionsType = {
201
+ label: string;
202
+ value: string;
203
+ iconName: string;
204
+ action: () => void;
177
205
  };
178
206
 
179
207
  /** Type of the RowIndicator component */
@@ -191,6 +219,14 @@ export type ColumnIndicatorProps = {
191
219
  fixed?: boolean;
192
220
  /** Callback to be called when the column is selected */
193
221
  onSelect: (column: number, extend: boolean) => void;
222
+
223
+ setContextMenu: React.Dispatch<React.SetStateAction<ContextMenuState>>;
224
+
225
+ deleteColumn: (data: MatrixValue.Matrix<CellBase>) => void;
226
+
227
+ addColumnLeft: (data: MatrixValue.Matrix<CellBase>) => void;
228
+
229
+ data: MatrixValue.Matrix<CellBase>;
194
230
  };
195
231
 
196
232
  /** Type of the ColumnIndicator component */
@@ -214,4 +250,4 @@ export type CommitChanges<Cell extends CellBase = CellBase> = Array<{
214
250
  nextCell: Cell | null;
215
251
  }>;
216
252
 
217
- export type CreateFormulaParser = (data: Matrix<CellBase>) => FormulaParser;
253
+ export type CreateFormulaParser = (data: Matrix<CellBase>) =>void;
@@ -169,10 +169,6 @@ const ExcelToolBar: React.FC<ExcelToolBarProps> = ({
169
169
  setFontSize(data, e.value as string);
170
170
  }}
171
171
  optionsList={fontSize}
172
- selectedOption={{
173
- label: '11',
174
- value: '11',
175
- }}
176
172
  />
177
173
  </div>
178
174
  </Col>
@@ -29,8 +29,9 @@
29
29
  flex-direction: column;
30
30
  text-align: center;
31
31
  gap: 8px;
32
-
33
- &--active {
32
+ transition: background-color 0.2s ease;
33
+
34
+ &:hover, &--active {
34
35
  background-color: var(--file-dropzone-selected-color);
35
36
  }
36
37
 
@@ -121,6 +122,7 @@
121
122
  .ff-file-actions {
122
123
  display: flex;
123
124
  align-items: center;
125
+ gap: 8px;
124
126
  &__icon-replace,
125
127
  &__icon-remove {
126
128
  @include icon-container;
@@ -8,7 +8,7 @@ import Dropzone from './Dropzone';
8
8
  import FilePreview from './FilePreview';
9
9
 
10
10
  const FileDropzone: React.FC<FileDropzoneProps> = ({
11
- icon = <Icon name="dropzone_icon" height={80} width={80} />,
11
+ icon = <Icon name="dropzone_icon" height={80} width={80} hoverEffect={false} />,
12
12
  primaryLabel = 'Drag & drop your file to upload',
13
13
  secondaryLabel = 'Or',
14
14
  buttonLabel = 'Choose File to upload',
@@ -52,6 +52,7 @@ const FilePreview: React.FC<FilePreviewProps> = ({
52
52
  color={'var(--icons-default-color)'}
53
53
  height={16}
54
54
  width={16}
55
+ hoverEffect
55
56
  onClick={() => onReplaceClick(file)}
56
57
  />
57
58
  </Tooltip>
@@ -59,9 +60,10 @@ const FilePreview: React.FC<FilePreviewProps> = ({
59
60
  <div className="ff-file-actions__icon-remove">
60
61
  <Tooltip title="Remove">
61
62
  <Icon
62
- name="remove"
63
+ name="close"
63
64
  height={16}
64
65
  width={16}
66
+ hoverEffect
65
67
  color={'var(--default-icon-color)'}
66
68
  onClick={() => onRemoveClick(file)}
67
69
  />
@@ -8,6 +8,8 @@
8
8
  padding: 20px;
9
9
  width: 400px;
10
10
  margin: 0 auto;
11
+ display: grid;
12
+ gap: 8px;
11
13
 
12
14
  .ff-form-group {
13
15
  margin-bottom: 16px;
@@ -1,8 +1,9 @@
1
+ import React, { useRef } from 'react';
1
2
  import Forms from './Forms';
2
3
  import Input from '../Input';
3
4
  import RadioGroup from '../RadioGroup';
4
5
  import Select from '../Select';
5
- import { Meta, StoryObj } from '@storybook/react/*';
6
+ import { Meta, StoryObj } from '@storybook/react';
6
7
  import Typography from '../Typography';
7
8
  import './Form.scss';
8
9
  import Checkbox from '../Checkbox';
@@ -10,6 +11,7 @@ import TextArea from '../TextArea';
10
11
  import Drawer from '../Drawer';
11
12
  import { useState } from 'react';
12
13
  import { Container } from '../GridLayout/GridLayout';
14
+ import Button from '../Button/Button';
13
15
 
14
16
  type FormValues = {
15
17
  username: string;
@@ -73,7 +75,7 @@ export const WithDefaultValues: Story = {
73
75
  primaryButtonProps={pageDrawerPrimaryButton}
74
76
  secondaryButtonProps={pageDrawerSecondaryButton}
75
77
  >
76
- <Container fluid className='ff-forms-container'>
78
+ <Container fluid className="ff-forms-container">
77
79
  <Forms<FormValues>
78
80
  onSubmit={onSubmit}
79
81
  id="element"
@@ -91,9 +93,9 @@ export const WithDefaultValues: Story = {
91
93
  <div className="ff-main">
92
94
  {/* Username Field */}
93
95
  <div>
94
- <Typography as="label">username</Typography>
95
96
  <Input
96
97
  type="text"
98
+ label='Username'
97
99
  disabled={false}
98
100
  {...register('username', {
99
101
  required: {
@@ -125,10 +127,9 @@ export const WithDefaultValues: Story = {
125
127
 
126
128
  {/* Email Field */}
127
129
  <div>
128
- <Typography as="label">Email</Typography>
129
-
130
130
  <Input
131
131
  type="email"
132
+ label="Email"
132
133
  disabled={false}
133
134
  {...register('email', {
134
135
  required: { value: true, message: 'Email is required' },
@@ -153,8 +154,8 @@ export const WithDefaultValues: Story = {
153
154
 
154
155
  {/* Password Field */}
155
156
  <div>
156
- <Typography as="label">Password</Typography>
157
157
  <Input
158
+ label="Password"
158
159
  disabled={false}
159
160
  type="password"
160
161
  {...register('password', {
@@ -320,4 +321,192 @@ export const WithDefaultValues: Story = {
320
321
  },
321
322
  };
322
323
 
324
+ export const WithSubmissionOutside: Story = {
325
+ render: () => {
326
+ const [isDrawerOpen, setIsDrawerOpen] = useState(true);
327
+ type FormValues = {
328
+ username: string;
329
+ email: string;
330
+ password: string;
331
+ check: boolean;
332
+ };
333
+
334
+ const initialFormState: FormValues = {
335
+ username: '',
336
+ email: '',
337
+ password: '',
338
+ check: false,
339
+ };
340
+
341
+ const formRef = useRef<any>(null);
342
+
343
+ const handleSubmit = (data: FormValues) => {
344
+ alert('Form submitted with: ' + JSON.stringify(data));
345
+ };
346
+
347
+ const submitForm = () => {
348
+ formRef.current.submit();
349
+ };
350
+
351
+ const handleCreateAndContinue = () => {
352
+ formRef.current.submit();
353
+ formRef.current.reset();
354
+ formRef.current.clearErrors();
355
+ };
356
+
357
+ const handleReset = () => {
358
+ formRef.current.reset();
359
+ formRef.current.clearErrors();
360
+ }
361
+
362
+ const footerContent = (
363
+ <>
364
+ <Checkbox
365
+ label="Copy to shared"
366
+ disabled={false}
367
+ checked={formRef.current?.watch('check')}
368
+ {...formRef.current?.register('check', {
369
+ required: {
370
+ value: true,
371
+ message: 'Please select the checkbox',
372
+ },
373
+ })}
374
+ onChange={(e) => {
375
+ formRef.current?.setValue('check', e.target.checked, {
376
+ shouldValidate: true,
377
+ });
378
+ }}
379
+ />
380
+ <Button
381
+ variant="secondary"
382
+ onClick={() => setIsDrawerOpen(false)}
383
+ label="Cancel"
384
+ />
385
+ <Button
386
+ variant="secondary"
387
+ onClick={handleReset}
388
+ label="Reset"
389
+ />
390
+ <Button
391
+ variant="secondary"
392
+ onClick={handleCreateAndContinue}
393
+ label="Create and continue"
394
+ />
395
+ <Button variant="primary" onClick={submitForm} label="Submit" />
396
+ </>
397
+ );
398
+
399
+ return (
400
+ <div>
401
+ <Drawer
402
+ overlay
403
+ isOpen={isDrawerOpen}
404
+ title="Select Page"
405
+ onClose={() => setIsDrawerOpen(false)}
406
+ footerContent={footerContent}
407
+ >
408
+ <Forms
409
+ ref={formRef}
410
+ onSubmit={handleSubmit}
411
+ defaultValues={initialFormState}
412
+ >
413
+ {({
414
+ watch,
415
+ register,
416
+ setValue,
417
+ trigger,
418
+ formState: { errors },
419
+ }) => (
420
+ <div className="ff-form-container">
421
+ <div>
422
+ <Input
423
+ type="text"
424
+ label="Username"
425
+ value={watch('username')}
426
+ {...register('username', {
427
+ required: 'Username is required',
428
+ minLength: {
429
+ value: 3,
430
+ message: 'Username must be at least 3 characters',
431
+ },
432
+ })}
433
+ onChange={(e) =>
434
+ setValue('username', e.target.value, {
435
+ shouldValidate: true,
436
+ })
437
+ }
438
+ onBlur={() => {
439
+ trigger('username');
440
+ }}
441
+ error={!!errors.username}
442
+ helperText={errors.username?.message}
443
+ />
444
+ </div>
445
+
446
+ {/* Email Field */}
447
+ <div>
448
+ <Input
449
+ type="email"
450
+ label="Email"
451
+ value={watch('email')}
452
+ {...register('email', {
453
+ required: 'Email is required',
454
+ pattern: {
455
+ value: /^\S+@\S+\.\S+$/,
456
+ message: 'Please enter a valid email',
457
+ },
458
+ })}
459
+ onChange={(e) =>
460
+ setValue('email', e.target.value, {
461
+ shouldValidate: true,
462
+ })
463
+ }
464
+ onBlur={() => {
465
+ trigger('email');
466
+ }}
467
+ error={!!errors.email}
468
+ helperText={errors.email?.message}
469
+ />
470
+ </div>
471
+
472
+ {/* Password Field */}
473
+ <div>
474
+ <Input
475
+ label="Password"
476
+ value={watch('password')}
477
+ {...register('password', {
478
+ required: 'Password is required',
479
+ minLength: {
480
+ value: 6,
481
+ message: 'Password must be at least 6 characters',
482
+ },
483
+ })}
484
+ onChange={(e) =>
485
+ setValue('password', e.target.value, {
486
+ shouldValidate: true,
487
+ })
488
+ }
489
+ onBlur={() => {
490
+ trigger('password');
491
+ }}
492
+ placeholder="Enter your password"
493
+ type="password"
494
+ error={!!errors.password}
495
+ helperText={errors.password?.message}
496
+ />
497
+ </div>
498
+ </div>
499
+ )}
500
+ </Forms>
501
+ </Drawer>
502
+
503
+ {/* Submit Button Outside the Form */}
504
+ <Button onClick={submitForm} variant="primary">
505
+ Submit Form
506
+ </Button>
507
+ </div>
508
+ );
509
+ },
510
+ };
511
+
323
512
  export default meta;
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { forwardRef, useImperativeHandle } from 'react';
2
2
  import Form from './Form';
3
3
 
4
4
  interface FormProps<T extends Form.FieldValues> extends Form.UseFormProps<T> {
@@ -7,16 +7,19 @@ interface FormProps<T extends Form.FieldValues> extends Form.UseFormProps<T> {
7
7
  children: (methods: ReturnType<typeof Form.useForm<T>>) => React.ReactNode;
8
8
  }
9
9
 
10
- const Forms = <T extends Form.FieldValues>({
11
- onSubmit,
12
- children,
13
- id,
14
- ...rest
15
- }: FormProps<T>) => {
10
+ const Forms = <T extends Form.FieldValues>(
11
+ { onSubmit, children, id, ...rest }: FormProps<T>,
12
+ ref: React.Ref<any>
13
+ ) => {
16
14
  const methods = Form.useForm<T>(rest);
17
15
 
18
16
  const { handleSubmit } = methods;
19
17
 
18
+ useImperativeHandle(ref, () => ({
19
+ submit: handleSubmit(onSubmit),
20
+ ...methods,
21
+ }));
22
+
20
23
  return (
21
24
  <form id={id} onSubmit={handleSubmit(onSubmit)}>
22
25
  {children(methods)}
@@ -24,4 +27,8 @@ const Forms = <T extends Form.FieldValues>({
24
27
  );
25
28
  };
26
29
 
27
- export default Forms;
30
+ const ForwardedForms = forwardRef(Forms) as <T extends Form.FieldValues>(
31
+ props: FormProps<T> & { ref?: React.Ref<any> }
32
+ ) => JSX.Element;
33
+
34
+ export default ForwardedForms;
@@ -44,6 +44,7 @@ import LicenseIcon from '../../assets/icons/active_license_icon.svg?react';
44
44
  import DeleteIcon from '../../assets/icons/delete.svg?react';
45
45
  import DetailsIcon from '../../assets/icons/details.svg?react';
46
46
  import ImpactListIcon from '../../assets/icons/impactList.svg?react';
47
+
47
48
  import FormatePainter from '../../assets/icons/formate_painter.svg?react';
48
49
  import Bold from '../../assets/icons/bold.svg?react';
49
50
  import Italic from '../../assets/icons/italic.svg?react';
@@ -61,6 +62,24 @@ import TextAlignLeft from '../../assets/icons/text_align_left.svg?react';
61
62
  import TextAlignRight from '../../assets/icons/text_align_right.svg?react';
62
63
  import TextColor from '../../assets/icons/text_color.svg?react';
63
64
  import FillColor from '../../assets/icons/fill_color.svg?react';
65
+ import FormulaIcon from '../../assets/icons/formula_icon.svg?react';
66
+ import ExcelCornerMenu from '../../assets/icons/excel_corner_menu.svg?react';
67
+
68
+ import ApkFileType from '../../assets/icons/apk_file_type.svg?react';
69
+ import CsvFileType from '../../assets/icons/csv_file_type.svg?react';
70
+ import CompressedFileType from '../../assets/icons/compressed_file_type.svg?react';
71
+ import HtmlFileType from '../../assets/icons/html_file_type.svg?react';
72
+ import JsonFileType from '../../assets/icons/json_file_type.svg?react';
73
+ import PdfFileType from '../../assets/icons/pdf_file_type.svg?react';
74
+ import PngFileType from '../../assets/icons/png_file_type.svg?react';
75
+ import XlsxFileType from '../../assets/icons/xlsx_file_type.svg?react';
76
+ import XmlFileType from '../../assets/icons/xml_file_type.svg?react';
77
+ import XlsFileType from '../../assets/icons/xls_file_type.svg?react';
78
+ import IpkFileType from '../../assets/icons/ipk_file_type.svg?react';
79
+ import TxtFileType from '../../assets/icons/txt_file_type.svg?react';
80
+ import GifFileType from '../../assets/icons/gif_file_type.svg?react';
81
+ import JpgFileType from '../../assets/icons/jpg_file_type.svg?react';
82
+
64
83
  import InfoIcon from '../../assets/icons/info_icon.svg?react';
65
84
  import CalendarIcon from '../../assets/icons/calendar_icon.svg?react';
66
85
  import HideIcon from '../../assets/icons/hide_icon.svg?react';
@@ -180,6 +199,9 @@ import MinimizeScript from '../../assets/icons/minimize_script.svg?react';
180
199
  import MaximizeTree from '../../assets/icons/maximize_tree.svg?react';
181
200
  import LabelIcon from '../../assets/icons/label_icon.svg?react';
182
201
  import AddLabelIcon from '../../assets/icons/add_label_icon.svg?react';
202
+ import QuickRunSettingIcon from '../../assets/icons/quick_run_setting_icon.svg?react';
203
+ import RunManualTestcaseIcon from '../../assets/icons/run_manual_testcase_icon.svg?react';
204
+ import RunAutomationScriptsIcon from '../../assets/icons/run_automation_scripts_icon.svg?react';
183
205
 
184
206
  Components['delete_info'] = DeleteInfoIcon;
185
207
  Components['success'] = ToastSuccessIcon;
@@ -224,6 +246,8 @@ Components['details'] = DetailsIcon;
224
246
  Components['impactList'] = ImpactListIcon;
225
247
  Components['beautify_icon'] = BeautifyIcon;
226
248
  Components['add_variable'] = AddVariable;
249
+
250
+
227
251
  Components['formate_painter'] = FormatePainter;
228
252
  Components['bold'] = Bold;
229
253
  Components['italic'] = Italic;
@@ -241,6 +265,24 @@ Components['text_align_left'] = TextAlignLeft;
241
265
  Components['text_align_right'] = TextAlignRight;
242
266
  Components['text_color'] = TextColor;
243
267
  Components['fill_color'] = FillColor;
268
+ Components['formula_icon'] = FormulaIcon;
269
+ Components['excel_corner_menu'] = ExcelCornerMenu;
270
+
271
+ Components['apk_file_type'] = ApkFileType;
272
+ Components['csv_file_type'] = CsvFileType;
273
+ Components['compressed_file_type'] = CompressedFileType;
274
+ Components['html_file_type'] = HtmlFileType;
275
+ Components['json_file_type'] = JsonFileType;
276
+ Components['pdf_file_type'] = PdfFileType;
277
+ Components['png_file_type'] = PngFileType;
278
+ Components['xlsx_file_type'] = XlsxFileType;
279
+ Components['xml_file_type'] = XmlFileType;
280
+ Components['xls_file_type'] = XlsFileType;
281
+ Components['ipk_file_type'] = IpkFileType;
282
+ Components['txt_file_type'] = TxtFileType;
283
+ Components['gif_file_type'] = GifFileType;
284
+ Components['jpg_file_type'] = JpgFileType;
285
+
244
286
  Components['info'] = InfoIcon;
245
287
  Components['calendar_icon'] = CalendarIcon;
246
288
  Components['hide_icon'] = HideIcon;
@@ -357,5 +399,9 @@ Components['minimize_script'] = MinimizeScript;
357
399
  Components['maximize_tree'] = MaximizeTree;
358
400
  Components['label_icon'] = LabelIcon;
359
401
  Components['add_label_icon'] = AddLabelIcon;
402
+ Components['quick_run_setting'] = QuickRunSettingIcon;
403
+ Components['run_manual_testcase'] = RunManualTestcaseIcon;
404
+ Components['run_automation_scripts'] = RunAutomationScriptsIcon;
405
+
360
406
 
361
407
  export default Components;
@@ -35,6 +35,9 @@
35
35
  align-items: center;
36
36
  border: 1px solid var(--border-color);
37
37
  background: var(--drawer-footer-bg);
38
+ &:hover {
39
+ background: var(--border-color);
40
+ }
38
41
 
39
42
  &.selected {
40
43
  background-color: var(--brand-color);
@@ -3,6 +3,7 @@ import classNames from 'classnames';
3
3
  import './IconRadioGroup.scss';
4
4
  import Icon from '../Icon/Icon';
5
5
  import { IconRadioItem, IconRadioGroupProps } from './type';
6
+ import Tooltip from '../Tooltip';
6
7
 
7
8
  const IconRadioGroup: React.FC<IconRadioGroupProps> = ({
8
9
  items,
@@ -45,23 +46,25 @@ const IconRadioGroup: React.FC<IconRadioGroupProps> = ({
45
46
  })}
46
47
  onClick={() => handleButtonClick(item)}
47
48
  >
48
- <div
49
- className={classNames('icon-container', {
50
- selected: selectedValue === item.iconName,
51
- })}
52
- >
53
- <Icon
54
- name={item.iconName}
55
- height={14}
56
- width={14}
57
- hoverEffect={false}
58
- color={
59
- selectedValue === item.iconName
60
- ? 'var(--drawer-footer-bg)'
61
- : 'var(--brand-color)'
62
- }
63
- />
64
- </div>
49
+ <Tooltip title={item.iconLabel}>
50
+ <div
51
+ className={classNames('icon-container', {
52
+ selected: selectedValue === item.iconName,
53
+ })}
54
+ >
55
+ <Icon
56
+ name={item.iconName}
57
+ height={14}
58
+ width={14}
59
+ hoverEffect={false}
60
+ color={
61
+ selectedValue === item.iconName
62
+ ? 'var(--drawer-footer-bg)'
63
+ : 'var(--brand-color)'
64
+ }
65
+ />
66
+ </div>
67
+ </Tooltip>
65
68
  </div>
66
69
  ))}
67
70
  <div className="line-connector"></div>
@@ -11,16 +11,17 @@
11
11
  border-radius: 4px;
12
12
  outline: none;
13
13
  line-height: 18px;
14
+ @extend .fontSm;
14
15
  &--medium {
15
16
  padding: 10px 9px;
16
17
  }
17
- @extend .fontSm;
18
18
  &:disabled {
19
19
  cursor: not-allowed;
20
20
  }
21
21
  &::placeholder {
22
22
  opacity: 0;
23
- line-height: 18px;
23
+ @extend .fontXs;
24
+ line-height: 15px;
24
25
  }
25
26
  &--disabled {
26
27
  background: transparent;
@@ -67,7 +68,7 @@
67
68
  }
68
69
  &:hover {
69
70
  .ff-input-label {
70
- color: var(--input-hover-border-color);
71
+ color: var(--input-default-label-color);
71
72
  &--no-hover {
72
73
  color: var(--input-default-label-color);
73
74
  }
@@ -94,10 +95,10 @@
94
95
  }
95
96
  &:focus-within {
96
97
  .ff-input-label-container {
97
- top: -6px;
98
- @extend .font-size-8;
98
+ top: -9px;
99
+ @extend .fontXs;
99
100
  background-color: var(--input-label-bg-color);
100
- line-height: 12px;
101
+ line-height: 15px;
101
102
  padding: 0px 2px;
102
103
  margin-left: 10px;
103
104
  }
@@ -110,9 +111,8 @@
110
111
  }
111
112
  }
112
113
  .ff-input {
113
- &--primary {
114
- border-color: var(--brand-color);
115
- }
114
+ border-color: var(--brand-color);
115
+
116
116
  &--danger {
117
117
  border-color: var(--input-error-text-color);
118
118
  }
@@ -120,16 +120,15 @@
120
120
  &::placeholder {
121
121
  opacity: 1;
122
122
  margin-bottom: 1px;
123
- @extend .font-size-8;
124
123
  }
125
124
  }
126
125
  }
127
126
 
128
127
  .ff-input-message {
129
- @extend .font-size-8;
128
+ @extend .fontXs;
130
129
  padding: 0px 4px;
131
130
  margin-left: 8px;
132
- line-height: 12px;
131
+ line-height: 15px;
133
132
  &--danger {
134
133
  color: var(--input-error-text-color);
135
134
  }
@@ -138,10 +137,10 @@
138
137
  &--float {
139
138
  .ff-input-label-container {
140
139
  //re-written label container code to place it at on border
141
- top: -6px;
142
- @extend .font-size-8;
140
+ top: -9px;
141
+ font-size: 10px;
143
142
  background-color: var(--input-label-bg-color);
144
- line-height: 12px;
143
+ line-height: 15px;
145
144
  padding: 0px 2px;
146
145
  margin-left: 10px;
147
146
  }