pixel-react 1.2.2 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. package/lib/components/AddResourceButton/type.d.ts +3 -3
  2. package/lib/components/Form/Forms.d.ts +2 -1
  3. package/lib/components/Icon/types.d.ts +1 -1
  4. package/lib/components/MenuOption/types.d.ts +1 -1
  5. package/lib/components/MiniModal/MiniModal.stories.d.ts +1 -0
  6. package/lib/components/MiniModal/types.d.ts +6 -6
  7. package/lib/index.d.ts +14 -13
  8. package/lib/index.esm.js +91 -27
  9. package/lib/index.esm.js.map +1 -1
  10. package/lib/index.js +91 -27
  11. package/lib/index.js.map +1 -1
  12. package/package.json +1 -1
  13. package/src/StyleGuide/ColorPalette/colorPaletteList.ts +5 -0
  14. package/src/assets/Themes/BaseTheme.scss +1 -0
  15. package/src/assets/Themes/DarkTheme.scss +1 -0
  16. package/src/assets/icons/add_testcase.svg +3 -0
  17. package/src/assets/icons/add_variable_icon.svg +3 -4
  18. package/src/assets/icons/attachment_icon.svg +3 -0
  19. package/src/assets/icons/authorization_icon.svg +3 -0
  20. package/src/assets/icons/automation_testcase.svg +4 -0
  21. package/src/assets/icons/back_icon.svg +3 -0
  22. package/src/assets/icons/browserstack_icon.svg +24 -0
  23. package/src/assets/icons/edge.svg +30 -0
  24. package/src/assets/icons/fire_fox.svg +106 -0
  25. package/src/assets/icons/internet_explorer.svg +3 -0
  26. package/src/assets/icons/lambda_icon.svg +3 -0
  27. package/src/assets/icons/linux.svg +42 -0
  28. package/src/assets/icons/local.svg +3 -0
  29. package/src/assets/icons/manual_testcase.svg +3 -0
  30. package/src/assets/icons/maximize_script.svg +12 -0
  31. package/src/assets/icons/opera.svg +9 -0
  32. package/src/assets/icons/safari_icon.svg +12 -0
  33. package/src/assets/icons/sause_lab.svg +3 -0
  34. package/src/assets/icons/variable_icon.svg +4 -0
  35. package/src/components/AddResourceButton/ArrowsButton/ArrowsButton.scss +1 -0
  36. package/src/components/AddResourceButton/type.ts +3 -3
  37. package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +2 -2
  38. package/src/components/AllProjectsDropdown/AllProjectsDropdown.tsx +1 -1
  39. package/src/components/Button/types.ts +1 -1
  40. package/src/components/Form/Form.scss +18 -1
  41. package/src/components/Form/Form.stories.tsx +86 -13
  42. package/src/components/Form/Forms.tsx +2 -0
  43. package/src/components/Icon/iconList.ts +41 -1
  44. package/src/components/Icon/types.ts +1 -1
  45. package/src/components/IconButton/IconButton.scss +1 -1
  46. package/src/components/IconButton/IconButton.tsx +12 -7
  47. package/src/components/Input/Input.scss +1 -1
  48. package/src/components/MenuOption/MenuOption.tsx +25 -23
  49. package/src/components/MenuOption/types.ts +1 -1
  50. package/src/components/MiniModal/MiniModal.scss +5 -0
  51. package/src/components/MiniModal/MiniModal.stories.tsx +95 -0
  52. package/src/components/MiniModal/MiniModal.tsx +11 -6
  53. package/src/components/MiniModal/types.ts +6 -6
  54. package/src/components/Search/Search.tsx +6 -3
  55. package/src/components/Table/Table.scss +0 -1
  56. package/src/index.ts +2 -2
@@ -5,6 +5,8 @@ import Select from '../Select';
5
5
  import { Meta, StoryObj } from '@storybook/react/*';
6
6
  import Typography from '../Typography';
7
7
  import './Form.scss';
8
+ import Checkbox from '../Checkbox';
9
+ import TextArea from '../TextArea';
8
10
 
9
11
  type FormValues = {
10
12
  username: string;
@@ -12,6 +14,8 @@ type FormValues = {
12
14
  password: string;
13
15
  gender: string;
14
16
  language: string;
17
+ check: boolean;
18
+ description: string;
15
19
  };
16
20
 
17
21
  const meta: Meta<typeof Forms> = {
@@ -33,6 +37,8 @@ export const WithDefaultValues: Story = {
33
37
  password: '',
34
38
  gender: '',
35
39
  language: '',
40
+ check: false,
41
+ description: '',
36
42
  };
37
43
 
38
44
  const onSubmit = (data: FormValues) => {
@@ -56,8 +62,12 @@ export const WithDefaultValues: Story = {
56
62
  <Typography as="label">username</Typography>
57
63
  <Input
58
64
  type="text"
65
+ disabled={false}
59
66
  {...register('username', {
60
- required: 'Username is required',
67
+ required: {
68
+ value: true,
69
+ message: 'Username is required',
70
+ },
61
71
  minLength: {
62
72
  value: 3,
63
73
  message: 'Username must be at least 3 characters',
@@ -72,7 +82,7 @@ export const WithDefaultValues: Story = {
72
82
  value={watch('username')}
73
83
  onChange={(e) =>
74
84
  setValue('username', e.target.value, {
75
- shouldValidate: false,
85
+ shouldValidate: true,
76
86
  })
77
87
  }
78
88
  onBlur={() => {
@@ -87,8 +97,9 @@ export const WithDefaultValues: Story = {
87
97
 
88
98
  <Input
89
99
  type="email"
100
+ disabled={false}
90
101
  {...register('email', {
91
- required: 'Email is required',
102
+ required: { value: true, message: 'Email is required' },
92
103
  pattern: {
93
104
  value: /^\S+@\S+\.\S+$/,
94
105
  message: 'Please enter a valid email',
@@ -98,7 +109,7 @@ export const WithDefaultValues: Story = {
98
109
  helperText={errors.email?.message}
99
110
  value={watch('email')}
100
111
  onChange={(e) =>
101
- setValue('email', e.target.value, { shouldValidate: false })
112
+ setValue('email', e.target.value, { shouldValidate: true })
102
113
  }
103
114
  onBlur={() => {
104
115
  trigger('email');
@@ -109,11 +120,14 @@ export const WithDefaultValues: Story = {
109
120
  {/* Password Field */}
110
121
  <div>
111
122
  <Typography as="label">Password</Typography>
112
-
113
123
  <Input
124
+ disabled={false}
114
125
  type="password"
115
126
  {...register('password', {
116
- required: 'Password is required',
127
+ required: {
128
+ value: true,
129
+ message: 'Password is required',
130
+ },
117
131
  minLength: {
118
132
  value: 6,
119
133
  message: 'Password must be at least 6 characters',
@@ -134,9 +148,8 @@ export const WithDefaultValues: Story = {
134
148
  </div>
135
149
 
136
150
  {/* Gender Field */}
137
- <div>
151
+ <div className="ff-radio">
138
152
  <Typography as="label">Gender</Typography>
139
-
140
153
  <RadioGroup
141
154
  options={[
142
155
  {
@@ -152,14 +165,23 @@ export const WithDefaultValues: Story = {
152
165
  value: 'other',
153
166
  },
154
167
  ]}
168
+ {...register('gender', {
169
+ required: {
170
+ value: true,
171
+ message: 'select the Gender',
172
+ },
173
+ })}
155
174
  selectedValue={watch('gender')}
156
175
  onChange={(option) => {
157
- setValue('gender', option.value);
176
+ setValue('gender', option.value, {
177
+ shouldValidate: true,
178
+ });
158
179
  }}
159
- name="gender"
160
180
  />
161
181
  {errors?.gender && (
162
- <span className="ff-error">{errors.gender.message}</span>
182
+ <Typography className="ff-error">
183
+ {errors.gender.message}
184
+ </Typography>
163
185
  )}
164
186
  </div>
165
187
 
@@ -177,17 +199,68 @@ export const WithDefaultValues: Story = {
177
199
  value: watch('language') || '',
178
200
  }}
179
201
  {...register('language', {
180
- required: 'Programming language is required',
202
+ required: {
203
+ value: true,
204
+ message: 'language is required',
205
+ },
181
206
  })}
182
207
  onChange={(option) =>
183
208
  setValue('language', option.value, { shouldValidate: true })
184
209
  }
185
210
  />
186
211
  {errors?.gender && (
187
- <span className="ff-error">{errors?.language?.message}</span>
212
+ <Typography className="ff-error">
213
+ {errors?.language?.message}
214
+ </Typography>
188
215
  )}
189
216
  </div>
190
217
 
218
+ {/* TextArea Field */}
219
+ <div className="ff-textarea">
220
+ <TextArea
221
+ label="Description"
222
+ value={watch('description')}
223
+ {...register('description', {
224
+ required: 'Description is required',
225
+ maxLength: {
226
+ value: 30,
227
+ message: 'Maximum length is 200 characters',
228
+ },
229
+ })}
230
+ error={!!errors?.description?.message}
231
+ onChange={(e) => {
232
+ setValue('description', e.target.value, {
233
+ shouldValidate: true,
234
+ });
235
+ }}
236
+ onBlur={() => {
237
+ trigger('description');
238
+ }}
239
+ />
240
+ </div>
241
+ {/* check box Field */}
242
+ <div className="ff-check">
243
+ <Checkbox
244
+ label="terms condition"
245
+ disabled={false}
246
+ {...register('check', {
247
+ required: {
248
+ value: true,
249
+ message: 'Please select the checkbox',
250
+ },
251
+ })}
252
+ onChange={(e) => {
253
+ setValue('check', e.target.checked, {
254
+ shouldValidate: true,
255
+ });
256
+ }}
257
+ />
258
+ {errors?.check && (
259
+ <Typography className="ff-error">
260
+ {errors.check.message}
261
+ </Typography>
262
+ )}
263
+ </div>
191
264
  {/* Buttons */}
192
265
  <div className="ff-button-layout">
193
266
  <button type="submit">Submit</button>
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import Form from './Form';
3
3
 
4
4
  interface FormProps<T extends Form.FieldValues> extends Form.UseFormProps<T> {
5
+ id?:'string',
5
6
  onSubmit: Form.SubmitHandler<T>;
6
7
  children: (methods: ReturnType<typeof Form.useForm<T>>) => React.ReactNode;
7
8
  }
@@ -9,6 +10,7 @@ interface FormProps<T extends Form.FieldValues> extends Form.UseFormProps<T> {
9
10
  const Forms = <T extends Form.FieldValues>({
10
11
  onSubmit,
11
12
  children,
13
+ id,
12
14
  ...rest
13
15
  }: FormProps<T>) => {
14
16
  const methods = Form.useForm<T>(rest);
@@ -114,6 +114,9 @@ import NLPHelpIcon from '../../assets/icons/nlp_help_icon.svg?react';
114
114
  import UpdateIcon from '../../assets/icons/update_icon.svg?react';
115
115
  import AddFile from '../../assets/icons/add_file.svg?react';
116
116
  import EyeClosed from '../../assets/icons/eye_closed.svg?react';
117
+ import AttachmentIcon from '../../assets/icons/attachment_icon.svg?react';
118
+ import VariableIcon from '../../assets/icons/variable_icon.svg?react';
119
+ import AuthorizationIcon from '../../assets/icons/authorization_icon.svg?react';
117
120
 
118
121
  import CloneIcon from '../../assets/icons/clone_icon.svg?react';
119
122
  import MoveIcon from '../../assets/icons/move_icon.svg?react';
@@ -122,8 +125,24 @@ import HistoryIcon from '../../assets//icons/history_icon.svg?react';
122
125
  import LinkedDefects from '../../assets//icons/linked_defects.svg?react';
123
126
  import FireflinkPlatform from '../../assets//icons/fireflink_platform.svg?react';
124
127
  import FireflinkFinder from '../../assets//icons/fireflink_finder_logo.svg?react';
125
- import ClientProfile from '../../assets//icons/client_profile.svg?react'
128
+ import ClientProfile from '../../assets//icons/client_profile.svg?react';
126
129
  import LicenseExpired from '../../assets//icons/license_expired.svg?react';
130
+ import AddTestCaseIcon from '../../assets/icons/add_testcase.svg?react';
131
+ import AutomationTestCaseIcon from '../../assets/icons/automation_testcase.svg?react';
132
+ import ManualTestCaseIcon from '../../assets/icons/manual_testcase.svg?react';
133
+ import BackIcon from '../../assets/icons/back_icon.svg?react';
134
+
135
+ import SauseLabIcon from '../../assets/icons/sause_lab.svg?react';
136
+ import LocalIcon from '../../assets/icons/local.svg?react';
137
+ import InternetExplorerIcon from '../../assets/icons/internet_explorer.svg?react';
138
+ import BrowserstackIcon from '../../assets/icons/browserstack_icon.svg?react';
139
+ import EdgeIcon from '../../assets/icons/edge.svg?react';
140
+ import FirefoxIcon from '../../assets/icons/fire_fox.svg?react';
141
+ import LambdaIcon from '../../assets/icons/lambda_icon.svg?react';
142
+ import LinuxIcon from '../../assets/icons/linux.svg?react';
143
+ import OperaIcon from '../../assets/icons/opera.svg?react';
144
+ import SafariIcon from '../../assets/icons/safari_icon.svg?react';
145
+ import MaximizeScript from '../../assets/icons/maximize_script.svg?react';
127
146
 
128
147
  Components['delete_info'] = DeleteInfoIcon;
129
148
  Components['success'] = ToastSuccessIcon;
@@ -242,9 +261,30 @@ Components['no_access_icon'] = NoAccessIcon;
242
261
  Components['full_access_icon'] = FullAccessIcon;
243
262
  Components['view_access_icon'] = ViewAccessIcon;
244
263
  Components['eye_closed'] = EyeClosed;
264
+ Components['attachment_icon'] = AttachmentIcon;
265
+ Components['variable_icon'] = VariableIcon;
266
+ Components['authorization_icon'] = AuthorizationIcon;
267
+
245
268
  Components['fireflink_platform_logo'] = FireflinkPlatform;
246
269
  Components['fireflink_finder_logo'] = FireflinkFinder;
247
270
  Components['client_profile'] = ClientProfile;
248
271
  Components['license_expired'] = LicenseExpired;
272
+ Components['add_testcase'] = AddTestCaseIcon;
273
+ Components['automation_testcase'] = AutomationTestCaseIcon;
274
+ Components['manual_testcass'] = ManualTestCaseIcon;
275
+ Components['back_icon'] = BackIcon;
276
+
277
+ Components['sause_lab'] = SauseLabIcon;
278
+ Components['local'] = LocalIcon;
279
+ Components['internet_explorer'] = InternetExplorerIcon;
280
+ Components['browserstack_icon'] = BrowserstackIcon;
281
+ Components['edge'] = EdgeIcon;
282
+ Components['fire_fox'] = FirefoxIcon;
283
+ Components['lambda_icon'] = LambdaIcon;
284
+ Components['linux'] = LinuxIcon;
285
+ Components['opera'] = OperaIcon;
286
+ Components['safari_icon'] = SafariIcon;
287
+ Components['maximize_script'] = MaximizeScript;
288
+
249
289
 
250
290
  export default Components;
@@ -7,5 +7,5 @@ export interface IconProps {
7
7
  onClick?: (data?: any) => void;
8
8
  hoverEffect?: boolean;
9
9
  disabled?: boolean;
10
- variant?: "dark" | "light";
10
+ variant?: 'dark' | 'light';
11
11
  }
@@ -33,7 +33,7 @@
33
33
  border: 1px solid var(--secondary-icon-color);
34
34
  background-color: var(--hover-color);
35
35
  .icon-name {
36
- font-weight: 400;
36
+ font-weight: 600;
37
37
  color: var(--secondary-icon-color);
38
38
  @include mixins.center-content();
39
39
  }
@@ -13,14 +13,19 @@ const IconButton: React.FC<IconButtonProps> = ({
13
13
  return (
14
14
  <button onClick={onClick} className={classNames('ff-plus-icon')}>
15
15
  <div className={classNames('button-icon')}>
16
- <Icon
17
- height={12}
18
- width={12}
19
- name={iconName}
20
- className={'ff-icon-color'}
21
- />
16
+ <Icon
17
+ height={12}
18
+ width={12}
19
+ name={iconName}
20
+ className={'ff-icon-color'}
21
+ />
22
22
  </div>
23
- <Typography as="div" textAlign="center" className="icon-name">
23
+ <Typography
24
+ as="div"
25
+ textAlign="center"
26
+ className="icon-name"
27
+ fontWeight="semi-bold"
28
+ >
24
29
  {label}
25
30
  </Typography>
26
31
  </button>
@@ -79,7 +79,7 @@
79
79
  }
80
80
  }
81
81
  .ff-input {
82
- border-color: var(--input-hover-border-color);
82
+ border-color: var(--brand-color);
83
83
  &--no-hover {
84
84
  border-color: var(--input-default-border-color);
85
85
  }
@@ -19,7 +19,7 @@ const Option = ({ option, onClick }: OptionProps) => (
19
19
  })}
20
20
  onClick={() => !option.disable && onClick(option)}
21
21
  >
22
- <Icon name={option.icon} height={16} width={16} />
22
+ {option.icon && <Icon name={option.icon} height={16} width={16} />}
23
23
  <Typography
24
24
  as="label"
25
25
  color={option.icon === 'delete' ? 'var(--delete-text-color)' : ''}
@@ -88,28 +88,30 @@ const MenuOption = ({
88
88
  <div className="ff-menu-option-container" ref={menuRef}>
89
89
  <Tooltip title={tooltipTitle} placement={tooltipPlacement}>
90
90
  <div className="ff-icon-label">
91
- <div
92
- className={classNames('ff-menuicon-container', {
93
- 'ff-menuicon-container-clicked': isClicked,
94
- dark: variant === 'dark',
95
- })}
96
- onClick={onIconClickHandler}
97
- style={{
98
- width: `${iconButtonSize}px`,
99
- height: `${iconButtonSize}px`,
100
- borderRadius: `${iconButtonBorderRadius}px`,
101
- }}
102
- >
103
- <Icon
104
- height={iconSize}
105
- width={iconSize}
106
- name={iconName}
107
- color={
108
- isClicked === (variant === 'dark')
109
- ? 'var(--menu-option-icon-clicked)'
110
- : 'var(--menu-option-icon-color)'
111
- }
112
- />
91
+ <div
92
+ className={classNames('ff-menuicon-container', {
93
+ 'ff-menuicon-container-clicked': isClicked,
94
+ dark: variant === 'dark',
95
+ })}
96
+ onClick={onIconClickHandler}
97
+ style={{
98
+ width: `${iconButtonSize}px`,
99
+ height: `${iconButtonSize}px`,
100
+ borderRadius: `${iconButtonBorderRadius}px`,
101
+ display: 'flex',
102
+ flexDirection: 'column',
103
+ }}
104
+ >
105
+ <Icon
106
+ height={iconSize}
107
+ width={iconSize}
108
+ name={iconName}
109
+ color={
110
+ isClicked === (variant === 'dark')
111
+ ? 'var(--menu-option-icon-clicked)'
112
+ : 'var(--menu-option-icon-color)'
113
+ }
114
+ />
113
115
  </div>
114
116
  {labelName && <Typography as="label">{labelName} </Typography>}
115
117
  </div>
@@ -20,7 +20,7 @@ interface OptionType extends OptionClick {
20
20
  * @type {string}
21
21
  * @required
22
22
  */
23
- icon: string;
23
+ icon?: string;
24
24
 
25
25
  /**
26
26
  * Indicates whether the option is disabled.
@@ -168,3 +168,8 @@
168
168
  .ff-mini-modal-gap-10 {
169
169
  gap: 10px;
170
170
  }
171
+ .ff-mini-edit-model-icon {
172
+ color: var(--ff-mini-modal-box-shadow);
173
+ border: 2px solid var(--ff-mini-modal-box-shadow);
174
+ border-radius: 4px;
175
+ }
@@ -4,6 +4,7 @@ import MiniModal from './MiniModal';
4
4
  import Button from '../Button/Button';
5
5
  import './MiniModal.scss';
6
6
  import Typography from '../Typography';
7
+ import Icon from '../Icon';
7
8
 
8
9
  const meta: Meta<typeof MiniModal> = {
9
10
  title: 'Components/MiniModal',
@@ -595,5 +596,99 @@ export const CustomModalWithWrapper = () => {
595
596
  </div>
596
597
  );
597
598
  };
599
+ export const normalModalFollowedByIcon = () => {
600
+ const iconRef1 = useRef<HTMLButtonElement>(null);
601
+ const iconRef2 = useRef<HTMLButtonElement>(null);
602
+ const iconRef3 = useRef<HTMLButtonElement>(null);
603
+ const { currentModal, openModal } = useModal();
604
+
605
+ return (
606
+ <div className="ff-mini-modal-buttons-flex ff-mini-modal-gap-10">
607
+ <Icon
608
+ className="ff-mini-edit-model-icon"
609
+ width={16}
610
+ height={16}
611
+ onClick={() => openModal(1)}
612
+ ref={iconRef1}
613
+ name="user_profile"
614
+ />
615
+
616
+ {currentModal === 1 && (
617
+ <MiniModal
618
+ anchorRef={iconRef1}
619
+ modalProperties={{ width: 168, height: 108 }}
620
+ childContent={
621
+ <>
622
+ <Typography as="p">
623
+ This is some content inside the first modal.
624
+ </Typography>
625
+ </>
626
+ }
627
+ isIconModel={true}
628
+ isAnimated={true}
629
+ firstAnchorRef={iconRef1}
630
+ anchorLeftDistanceForWrapper={0}
631
+ extraTopSpace={{ normalModal: 5 }}
632
+ />
633
+ )}
634
+
635
+ <Icon
636
+ className="ff-mini-edit-model-icon"
637
+ width={16}
638
+ height={16}
639
+ onClick={() => openModal(2)}
640
+ ref={iconRef2}
641
+ name="user_profile"
642
+ />
643
+
644
+ {currentModal === 2 && (
645
+ <MiniModal
646
+ anchorRef={iconRef2}
647
+ modalProperties={{ width: 193, height: 128 }}
648
+ childContent={
649
+ <>
650
+ <Typography as="p">
651
+ This is some content inside the Second modal.
652
+ </Typography>
653
+ </>
654
+ }
655
+ isIconModel={true}
656
+ isAnimated={true}
657
+ firstAnchorRef={iconRef2}
658
+ anchorLeftDistanceForWrapper={20}
659
+ extraTopSpace={{ normalModal: 15 }}
660
+ />
661
+ )}
662
+
663
+ <Icon
664
+ className="ff-mini-edit-model-icon"
665
+ width={16}
666
+ height={16}
667
+ onClick={() => openModal(3)}
668
+ ref={iconRef3}
669
+ name="user_profile"
670
+ />
671
+
672
+ {currentModal === 3 && (
673
+ <MiniModal
674
+ anchorRef={iconRef3}
675
+ modalProperties={{ width: 168, height: 108 }}
676
+ childContent={
677
+ <>
678
+ <Typography as="p">
679
+ This is some content inside the third modal.
680
+ </Typography>
681
+ </>
682
+ }
683
+ isIconModel={true}
684
+ isAnimated={true}
685
+ firstAnchorRef={iconRef3}
686
+ anchorLeftDistanceForWrapper={10}
687
+ extraTopSpace={{ normalModal: 10 }}
688
+ />
689
+ )}
690
+ </div>
691
+ );
692
+ };
598
693
 
599
694
  export default meta;
@@ -14,8 +14,8 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
14
14
  anchorRef,
15
15
  headerProps,
16
16
  childContent,
17
- cancelButtonProps,
18
- proceedButtonProps,
17
+ cancelButtonProps = () => {},
18
+ proceedButtonProps = () => {},
19
19
  footerContent,
20
20
  isWrapped = false,
21
21
  isAnimated = false,
@@ -29,6 +29,7 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
29
29
  extraTopSpace,
30
30
  extraRightSpace,
31
31
  extraLeftSpace,
32
+ isIconModel,
32
33
  },
33
34
  ref
34
35
  ) => {
@@ -144,8 +145,8 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
144
145
  //specifying the modal's escape and enter functionality
145
146
  const handleEsc = useEscapeKey('Escape');
146
147
  const handleEnter = useEscapeKey('Enter');
147
- handleEsc(cancelButtonProps.onClick);
148
- handleEnter(proceedButtonProps.onClick);
148
+ handleEsc(cancelButtonProps?.onClick);
149
+ handleEnter(proceedButtonProps?.onClick);
149
150
  useClickOutside(modalRef, cancelButtonProps.onClick);
150
151
 
151
152
  //calculate the modal position
@@ -227,6 +228,8 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
227
228
  >
228
229
  {headerProps ? (
229
230
  <Typography as="div">{headerProps}</Typography>
231
+ ) : isIconModel ? (
232
+ <></>
230
233
  ) : (
231
234
  <Typography as="header">
232
235
  <Typography as="h2">Header text</Typography>
@@ -236,13 +239,15 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
236
239
  <div className="modal-content">{childContent}</div>
237
240
  {footerContent ? (
238
241
  <Typography as="footer">{footerContent}</Typography>
242
+ ) : isIconModel ? (
243
+ <></>
239
244
  ) : (
240
245
  <footer className="modal-footer">
241
246
  <Button
242
247
  variant="primary"
243
248
  className="btn-cancel"
244
- onClick={cancelButtonProps.onClick}
245
- label={cancelButtonProps.text}
249
+ onClick={cancelButtonProps?.onClick}
250
+ label={cancelButtonProps?.text}
246
251
  />
247
252
  <Button
248
253
  variant="secondary"
@@ -1,8 +1,4 @@
1
1
  import { ReactNode, RefObject } from 'react';
2
- interface ButtonProps {
3
- text: string;
4
- onClick: () => void;
5
- }
6
2
  interface ModalDimensions {
7
3
  width?: number;
8
4
  height?: number;
@@ -23,11 +19,11 @@ export interface MiniEditModalProps {
23
19
  /**
24
20
  * Props for the cancel button inside the modal
25
21
  */
26
- cancelButtonProps: ButtonProps;
22
+ cancelButtonProps?: any;
27
23
  /**
28
24
  * Props for the proceed button inside the modal.
29
25
  */
30
- proceedButtonProps: ButtonProps;
26
+ proceedButtonProps?: any;
31
27
  /**
32
28
  * Optional content for the footer of the modal.
33
29
  */
@@ -44,6 +40,10 @@ export interface MiniEditModalProps {
44
40
  * Specifies if the modal should behave as a popover with an arrow.
45
41
  */
46
42
  isPopOver?: boolean;
43
+ /**
44
+ * Specifies if the modal should behave as a popover with an arrow.
45
+ */
46
+ isIconModel?: boolean;
47
47
  /**
48
48
  * Sets the position of the modal relative to its anchor.
49
49
  * bottom: The modal appears below the anchor.
@@ -5,6 +5,7 @@ import Icon from '../Icon';
5
5
  import { SearchProps } from './types';
6
6
  import { checkEmpty } from '../../utils/checkEmpty/checkEmpty';
7
7
  import Typography from '../Typography';
8
+ import Tooltip from '../Tooltip';
8
9
 
9
10
  const Search = ({
10
11
  placeholder = 'Search',
@@ -45,9 +46,11 @@ const Search = ({
45
46
  disabled: disabled,
46
47
  })}
47
48
  >
48
- <div className="ff-search-icon" onClick={handleIconClick}>
49
- <Icon name="search" height={14} width={14} />
50
- </div>
49
+ <Tooltip placement="top" title="Search">
50
+ <div className="ff-search-icon" onClick={handleIconClick}>
51
+ <Icon name="search" height={14} width={14} />
52
+ </div>
53
+ </Tooltip>
51
54
  <div
52
55
  className={classNames('ff-vertical-line', {
53
56
  expanded: isExpanded,
@@ -28,7 +28,6 @@
28
28
  }
29
29
  th:first-child {
30
30
  div {
31
- display: flex;
32
31
  align-items: center;
33
32
  .ff-table-checkbox {
34
33
  padding-right: 8px;
package/src/index.ts CHANGED
@@ -23,7 +23,7 @@ import LazyLoad from './components/LazyLoad/LazyLoad';
23
23
  import ThemeProvider from './components/ThemeProvider';
24
24
  import Typography from './components/Typography';
25
25
  import useTheme from './hooks/useTheme';
26
- import Forms from './components/Form/Forms';
26
+ import Form from './components/Form/Forms';
27
27
  import InputWithDropdown from './components/InputWithDropdown';
28
28
  import RadioButton from './components/RadioButton';
29
29
  import RadioGroup from './components/RadioGroup';
@@ -98,7 +98,7 @@ export {
98
98
  Table,
99
99
  RadioButton,
100
100
  RadioGroup,
101
- Forms,
101
+ Form,
102
102
  MiniModal,
103
103
  Container,
104
104
  Row,