pixel-react 1.1.3 → 1.1.5

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 (116) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/lib/components/AddButton/AddButton.d.ts +5 -0
  3. package/lib/components/AddButton/AddButton.stories.d.ts +6 -0
  4. package/lib/components/AddButton/index.d.ts +1 -0
  5. package/lib/components/AddButton/types.d.ts +4 -0
  6. package/lib/components/AddResourceButton/type.d.ts +1 -1
  7. package/lib/components/AllProjectsDropdown/AllProjectsDropdown.d.ts +2 -1
  8. package/lib/components/AllProjectsDropdown/AllProjectsDropdown.stories.d.ts +1 -0
  9. package/lib/components/AllProjectsDropdown/types.d.ts +10 -0
  10. package/lib/components/AppHeader/types.d.ts +14 -10
  11. package/lib/components/Button/Button.stories.d.ts +1 -0
  12. package/lib/components/Button/types.d.ts +1 -1
  13. package/lib/components/Drawer/Drawer.stories.d.ts +3 -0
  14. package/lib/components/Drawer/Types.d.ts +25 -1
  15. package/lib/components/Icon/Icon.d.ts +1 -1
  16. package/lib/components/MachineInputField/MachineInputField.d.ts +4 -0
  17. package/lib/components/MachineInputField/MachineInputField.stories.d.ts +6 -0
  18. package/lib/components/MachineInputField/index.d.ts +1 -0
  19. package/lib/components/MachineInputField/types.d.ts +11 -0
  20. package/lib/components/MenuOption/MenuOption.d.ts +1 -1
  21. package/lib/components/MenuOption/MenuOption.stories.d.ts +1 -0
  22. package/lib/components/MenuOption/types.d.ts +7 -0
  23. package/lib/components/Modal/types.d.ts +1 -0
  24. package/lib/components/SequentialConnectingBranch/SequentialConnectingBranch.d.ts +4 -0
  25. package/lib/components/SequentialConnectingBranch/SequentialConnectingBranch.stories.d.ts +6 -0
  26. package/lib/components/SequentialConnectingBranch/components/AddBrowserModal/AddBrowserModal.d.ts +4 -0
  27. package/lib/components/SequentialConnectingBranch/components/AddBrowserModal/types.d.ts +3 -0
  28. package/lib/components/SequentialConnectingBranch/components/Branches/Branches.d.ts +4 -0
  29. package/lib/components/SequentialConnectingBranch/components/Branches/types.d.ts +16 -0
  30. package/lib/components/SequentialConnectingBranch/components/ConnectingBranches/ConnectingBranches.d.ts +4 -0
  31. package/lib/components/SequentialConnectingBranch/components/ConnectingBranches/types.d.ts +9 -0
  32. package/lib/components/SequentialConnectingBranch/components/DatasetListModal/DatasetListModal.d.ts +4 -0
  33. package/lib/components/SequentialConnectingBranch/components/DatasetListModal/types.d.ts +3 -0
  34. package/lib/components/SequentialConnectingBranch/index.d.ts +1 -0
  35. package/lib/components/SequentialConnectingBranch/types.d.ts +32 -0
  36. package/lib/components/Tabs/types.d.ts +1 -0
  37. package/lib/index.d.ts +113 -17
  38. package/lib/index.esm.js +1244 -312
  39. package/lib/index.esm.js.map +1 -1
  40. package/lib/index.js +1245 -311
  41. package/lib/index.js.map +1 -1
  42. package/lib/tsconfig.tsbuildinfo +1 -1
  43. package/package.json +1 -1
  44. package/rollup.config.mjs +2 -8
  45. package/src/assets/Themes/BaseTheme.scss +18 -2
  46. package/src/assets/Themes/DarkTheme.scss +11 -3
  47. package/src/assets/icons/add_locator.svg +5 -0
  48. package/src/assets/icons/android.svg +9 -0
  49. package/src/assets/icons/browser_stack.svg +9 -0
  50. package/src/assets/icons/chrome.svg +12 -0
  51. package/src/assets/icons/dataset_list.svg +3 -0
  52. package/src/assets/icons/drag_icon.svg +5 -0
  53. package/src/assets/icons/label_plus.svg +3 -0
  54. package/src/assets/icons/mac.svg +9 -0
  55. package/src/assets/icons/manual_locator.svg +8 -0
  56. package/src/assets/icons/windows.svg +6 -0
  57. package/src/assets/styles/_colors.scss +4 -4
  58. package/src/components/AddResourceButton/type.ts +1 -1
  59. package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +2 -2
  60. package/src/components/AllProjectsDropdown/AllProjectsDropdown.stories.tsx +99 -1
  61. package/src/components/AllProjectsDropdown/AllProjectsDropdown.tsx +30 -56
  62. package/src/components/AllProjectsDropdown/types.ts +10 -0
  63. package/src/components/AppHeader/AppHeader.stories.tsx +20 -10
  64. package/src/components/AppHeader/AppHeader.tsx +24 -17
  65. package/src/components/AppHeader/types.ts +17 -13
  66. package/src/components/Button/Button.scss +4 -0
  67. package/src/components/Button/Button.stories.tsx +7 -0
  68. package/src/components/Button/index.ts +1 -1
  69. package/src/components/Button/types.ts +2 -2
  70. package/src/components/Drawer/Drawer.scss +22 -11
  71. package/src/components/Drawer/Drawer.stories.tsx +41 -0
  72. package/src/components/Drawer/Drawer.tsx +67 -40
  73. package/src/components/Drawer/Types.ts +25 -1
  74. package/src/components/GridLayout/GridLayout.scss +0 -2
  75. package/src/components/GridLayout/GridLayout.tsx +15 -8
  76. package/src/components/Icon/Icon.tsx +39 -33
  77. package/src/components/Icon/iconList.ts +25 -6
  78. package/src/components/InputWithDropdown/InputWithDropdown.scss +1 -1
  79. package/src/components/InputWithDropdown/InputWithDropdown.tsx +2 -1
  80. package/src/components/MachineInputField/MachineInputField.scss +44 -0
  81. package/src/components/MachineInputField/MachineInputField.stories.tsx +32 -0
  82. package/src/components/MachineInputField/MachineInputField.tsx +71 -0
  83. package/src/components/MachineInputField/index.ts +1 -0
  84. package/src/components/MachineInputField/types.ts +12 -0
  85. package/src/components/MenuOption/MenuOption.scss +14 -0
  86. package/src/components/MenuOption/MenuOption.stories.tsx +21 -0
  87. package/src/components/MenuOption/MenuOption.tsx +5 -3
  88. package/src/components/MenuOption/types.ts +9 -0
  89. package/src/components/MiniModal/MiniModal.tsx +1 -1
  90. package/src/components/Modal/Modal.tsx +2 -0
  91. package/src/components/Modal/modal.scss +2 -2
  92. package/src/components/Modal/types.ts +1 -0
  93. package/src/components/Select/Select.tsx +2 -2
  94. package/src/components/SequentialConnectingBranch/SequentialConnectingBranch.scss +117 -0
  95. package/src/components/SequentialConnectingBranch/SequentialConnectingBranch.stories.tsx +62 -0
  96. package/src/components/SequentialConnectingBranch/SequentialConnectingBranch.tsx +210 -0
  97. package/src/components/SequentialConnectingBranch/components/AddBrowserModal/AddBrowserModal.scss +51 -0
  98. package/src/components/SequentialConnectingBranch/components/AddBrowserModal/AddBrowserModal.tsx +107 -0
  99. package/src/components/SequentialConnectingBranch/components/AddBrowserModal/types.ts +5 -0
  100. package/src/components/SequentialConnectingBranch/components/Branches/Branches.scss +184 -0
  101. package/src/components/SequentialConnectingBranch/components/Branches/Branches.tsx +203 -0
  102. package/src/components/SequentialConnectingBranch/components/Branches/types.ts +18 -0
  103. package/src/components/SequentialConnectingBranch/components/ConnectingBranches/ConnectingBranches.scss +3 -0
  104. package/src/components/SequentialConnectingBranch/components/ConnectingBranches/ConnectingBranches.tsx +66 -0
  105. package/src/components/SequentialConnectingBranch/components/ConnectingBranches/types.ts +10 -0
  106. package/src/components/SequentialConnectingBranch/components/DatasetListModal/DatasetListModal.scss +31 -0
  107. package/src/components/SequentialConnectingBranch/components/DatasetListModal/DatasetListModal.tsx +85 -0
  108. package/src/components/SequentialConnectingBranch/components/DatasetListModal/types.ts +4 -0
  109. package/src/components/SequentialConnectingBranch/index.ts +1 -0
  110. package/src/components/SequentialConnectingBranch/types.ts +42 -0
  111. package/src/components/Tabs/Tabs.stories.tsx +24 -25
  112. package/src/components/Tabs/Tabs.tsx +3 -10
  113. package/src/components/Tabs/types.ts +7 -1
  114. package/src/index.ts +5 -0
  115. package/lib/index.css +0 -404
  116. package/lib/index.esm.css +0 -404
@@ -2,6 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react';
2
2
  import Drawer from './Drawer';
3
3
  import { useState } from 'react';
4
4
  import Button from '../Button';
5
+ import Icon from '../Icon';
5
6
 
6
7
  const meta: Meta<typeof Drawer> = {
7
8
  title: 'Components/Drawer',
@@ -20,6 +21,7 @@ const defaultArgs = {
20
21
  title: 'Drawer Title',
21
22
  showEditButton: false,
22
23
  _isExpanded: false,
24
+ showHeader: true,
23
25
  onClose: () => {},
24
26
  primaryButtonProps: {
25
27
  label: 'Create',
@@ -49,12 +51,51 @@ const defaultArgs = {
49
51
  overlay: false,
50
52
  isFooterRequired: true,
51
53
  footerContent: null,
54
+ backButtonIcon: <Icon name="error" height={16} width={16} />,
55
+ onCloseIconClick: () => alert('Close icon clicked!'),
52
56
  };
53
57
 
54
58
  export const Default: Story = {
55
59
  args: {
56
60
  ...defaultArgs,
57
61
  size: 'medium',
62
+ showHeader: true,
63
+ },
64
+ };
65
+ export const WithoutHeader: Story = {
66
+ args: {
67
+ ...defaultArgs,
68
+ showHeader: false,
69
+ size: 'medium',
70
+ },
71
+ parameters: {
72
+ docs: { disable: true },
73
+ },
74
+ };
75
+ export const WithCustomHeader: Story = {
76
+ args: {
77
+ ...defaultArgs,
78
+ customHeader: (
79
+ <div>
80
+ <h3>My Custom Header</h3>
81
+ </div>
82
+ ),
83
+ },
84
+ parameters: {
85
+ docs: { disable: true },
86
+ },
87
+ };
88
+ export const WithCustomFooter: Story = {
89
+ args: {
90
+ ...defaultArgs,
91
+ customFooter: (
92
+ <div>
93
+ <h3>My Custom Footer</h3>
94
+ </div>
95
+ ),
96
+ },
97
+ parameters: {
98
+ docs: { disable: true },
58
99
  },
59
100
  };
60
101
 
@@ -25,6 +25,11 @@ const Drawer: FC<DrawerProps> = ({
25
25
  _isExpanded = false,
26
26
  isBackButtonVisible = false,
27
27
  _isCloseModalButtonVisible = true,
28
+ showHeader = true,
29
+ backButtonIcon,
30
+ onCloseIconClick,
31
+ customHeader,
32
+ customFooter,
28
33
  }: DrawerProps) => {
29
34
  const [isExpanded, setIsExpanded] = useState(_isExpanded);
30
35
 
@@ -68,45 +73,69 @@ const Drawer: FC<DrawerProps> = ({
68
73
  'ff-drawer--open': isOpen,
69
74
  })}
70
75
  >
71
- <div className="ff-drawer-header">
72
- <div className="ff-drawer-action-section">
73
- <div className="ff-action-button">
74
- {showEditButton && (
75
- <button className="ff-expand-collapse-button" onClick={onEdit}>
76
- {/* icons are not provided yet so using dummy icons */}
77
- <Icon name="logo" height={16} width={16} />
78
- Edit
79
- </button>
80
- )}
81
- {_isExpanded && (
82
- <button
83
- className="ff-expand-collapse-button"
84
- onClick={toggleExpand}
85
- >
86
- <Icon
87
- name={isExpanded ? 'logo' : 'logo'}
88
- height={16}
89
- width={16}
90
- />
91
- </button>
92
- )}
93
- {isBackButtonVisible && (
94
- <button className="ff-expand-collapse-button" onClick={onClose}>
95
- <Icon
96
- name="error"
97
- height={16}
98
- width={16}
99
- hoverEffect={false}
100
- />
101
- </button>
102
- )}
103
- <div className="ff-drawer-title">{title}</div>
104
- </div>
105
- {_isCloseModalButtonVisible && (
106
- <Icon name="close" hoverEffect={false} onClick={onClose} />
76
+ {showHeader && (
77
+ <div className="ff-drawer-header">
78
+ {customHeader ? (
79
+ customHeader
80
+ ) : (
81
+ <div className="ff-drawer-action-section">
82
+ <div className="ff-action-button">
83
+ {showEditButton && (
84
+ <button
85
+ className="ff-expand-collapse-button"
86
+ onClick={onEdit}
87
+ >
88
+ <Icon name="logo" height={16} width={16} />
89
+ Edit
90
+ </button>
91
+ )}
92
+ {_isExpanded && (
93
+ <button
94
+ className="ff-expand-collapse-button"
95
+ onClick={toggleExpand}
96
+ >
97
+ <Icon
98
+ name={isExpanded ? 'logo' : 'logo'}
99
+ height={16}
100
+ width={16}
101
+ />
102
+ </button>
103
+ )}
104
+ {isBackButtonVisible && (
105
+ <button
106
+ className="ff-expand-collapse-button"
107
+ onClick={onClose}
108
+ >
109
+ {backButtonIcon ? (
110
+ backButtonIcon
111
+ ) : (
112
+ <Icon
113
+ name="error"
114
+ height={16}
115
+ width={16}
116
+ hoverEffect={false}
117
+ />
118
+ )}
119
+ </button>
120
+ )}
121
+ {title && <div className="ff-drawer-title">{title}</div>}
122
+ </div>
123
+ {_isCloseModalButtonVisible && (
124
+ <div className="ff-close-icon">
125
+ <Icon
126
+ name="close"
127
+ hoverEffect={false}
128
+ onClick={onCloseIconClick || onClose}
129
+ height={6}
130
+ width={6}
131
+ color="var(--tabs-label-active-color)"
132
+ />
133
+ </div>
134
+ )}
135
+ </div>
107
136
  )}
108
137
  </div>
109
- </div>
138
+ )}
110
139
 
111
140
  <div
112
141
  className={classNames('ff-drawer-body', {
@@ -118,9 +147,7 @@ const Drawer: FC<DrawerProps> = ({
118
147
 
119
148
  {isFooterRequired && (
120
149
  <div className="ff-drawer-footer">
121
- {footerContent ? (
122
- footerContent
123
- ) : (
150
+ {customFooter || footerContent || (
124
151
  <>
125
152
  <div className="button-container">
126
153
  {leftSecondaryButtonProps.label && (
@@ -48,7 +48,7 @@ export interface DrawerProps {
48
48
  /**
49
49
  * Header title for the drawer
50
50
  */
51
- title: string | ReactNode;
51
+ title?: string | ReactNode;
52
52
  /**
53
53
  * To show the edit button on the header
54
54
  */
@@ -85,4 +85,28 @@ export interface DrawerProps {
85
85
  * footer Content
86
86
  */
87
87
  footerContent?: ReactNode;
88
+ /**
89
+ * To show or hide the header
90
+ */
91
+ showHeader?: boolean;
92
+ /**
93
+ * Custom back button icon
94
+ * The icon to display for the back button.
95
+ * If not provided, a default icon will be used.
96
+ */
97
+ backButtonIcon?: ReactNode;
98
+ /**
99
+ * Callback function when the close icon is clicked
100
+ */
101
+ onCloseIconClick?: () => void;
102
+ /**
103
+ * Custom header for the drawer, replacing the default header.
104
+ * If provided, this will render in place of the default header.
105
+ */
106
+ customHeader?: ReactNode;
107
+ /**
108
+ * Custom footer for the drawer, replacing the default footer.
109
+ * If provided, this will render in place of the default footer.
110
+ */
111
+ customFooter?: ReactNode;
88
112
  }
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  /* Container */
4
2
  .ff-container {
5
3
  margin-right: auto;
@@ -1,32 +1,39 @@
1
-
2
1
  import React from 'react';
3
2
  import './GridLayout.scss';
4
3
  import { ContainerProps, RowProps, ColProps } from './types';
5
- import cx from 'classnames'
4
+ import cx from 'classnames';
6
5
 
7
6
  export const Container: React.FC<ContainerProps> = ({
8
7
  children,
9
8
  fluid = false,
10
9
  gap = '0px',
11
- className=''
10
+ className = '',
12
11
  }) => {
13
12
  const containerClassName = fluid ? 'ff-container-fluid' : 'ff-container';
14
13
  return (
15
- <div className={cx(containerClassName,className)} style={{ gap }}>
14
+ <div className={cx(containerClassName, className)} style={{ gap }}>
16
15
  {children}
17
16
  </div>
18
17
  );
19
18
  };
20
19
 
21
- export const Row: React.FC<RowProps> = ({ children, gap = '0px',className='' }) => {
20
+ export const Row: React.FC<RowProps> = ({
21
+ children,
22
+ gap = '0px',
23
+ className = '',
24
+ }) => {
22
25
  return (
23
- <div className={cx("ff-row",className)} style={{ gap }}>
26
+ <div className={cx('ff-row', className)} style={{ gap }}>
24
27
  {children}
25
28
  </div>
26
29
  );
27
30
  };
28
31
 
29
- export const Col: React.FC<ColProps> = ({ children, size = 12,className='' }) => {
32
+ export const Col: React.FC<ColProps> = ({
33
+ children,
34
+ size = 12,
35
+ className = '',
36
+ }) => {
30
37
  const colClassName = `ff-col-${size}`;
31
- return <div className={cx(colClassName,className)}>{children}</div>;
38
+ return <div className={cx(colClassName, className)}>{children}</div>;
32
39
  };
@@ -1,43 +1,49 @@
1
+ import { forwardRef } from 'react';
1
2
  import classNames from 'classnames';
2
3
  import Components from './iconList';
3
4
  import './Icons.scss';
4
5
  import { IconProps } from './types';
5
6
 
6
- const Icon = ({
7
- name,
8
- height,
9
- width,
10
- onClick = () => {},
11
- color = '#808080',
12
- hoverEffect = false,
13
- className = '',
14
- disabled = false,
15
- ...props
16
- }: IconProps) => {
17
- const IconComponent = Components[name];
7
+ const Icon = forwardRef<HTMLSpanElement, IconProps>(
8
+ (
9
+ {
10
+ name,
11
+ height,
12
+ width,
13
+ onClick = () => {},
14
+ color = 'var(--brand-color)', // Default color
15
+ hoverEffect = false,
16
+ className = '',
17
+ disabled = false,
18
+ ...props
19
+ },
20
+ ref
21
+ ) => {
22
+ const IconComponent = Components[name];
18
23
 
19
- const iconHeight = height ? height : 16;
20
- const iconWidth = width ? width : 16;
21
-
22
- if (!IconComponent) {
23
- return null;
24
- }
24
+ const iconHeight = height || 16;
25
+ const iconWidth = width || 16;
25
26
 
27
+ if (!IconComponent) {
28
+ return null;
29
+ }
26
30
 
27
- return (
28
- <span
29
- onClick={disabled ? () => {} : onClick}
30
- style={{ height: `${iconHeight}px`, width: `${iconWidth}px` }}
31
- className={classNames('ff-icon-container', {
32
- 'ff-icon-click': !!hoverEffect,
33
- 'ff-icon-disabled': disabled,
34
- [className]: !!className,
35
- })}
36
- {...props}
37
- >
38
- <IconComponent height="100%" width="100%" style={{ color: color }} />
39
- </span>
40
- );
41
- };
31
+ return (
32
+ <span
33
+ ref={ref}
34
+ onClick={disabled ? () => {} : onClick}
35
+ style={{ height: `${iconHeight}px`, width: `${iconWidth}px` }}
36
+ className={classNames('ff-icon-container', {
37
+ 'ff-icon-click': !!hoverEffect,
38
+ 'ff-icon-disabled': disabled,
39
+ [className]: !!className,
40
+ })}
41
+ {...props}
42
+ >
43
+ <IconComponent height="100%" width="100%" style={{ color: color }} />
44
+ </span>
45
+ );
46
+ }
47
+ );
42
48
 
43
49
  export default Icon;
@@ -38,7 +38,7 @@ import ViewIcon from '../../assets/icons/view_icon.svg?react';
38
38
  import ExportCollection from '../../assets/icons/export_collection_icon.svg?react';
39
39
  import RunIcon from '../../assets/icons/run_icon.svg?react';
40
40
  import AddVariable from '../../assets/icons/add_variable_icon.svg?react';
41
-
41
+ import ManualLocator from '../../assets/icons/manual_locator.svg?react';
42
42
  import LicenseIcon from '../../assets/icons/active_license_icon.svg?react';
43
43
  import DeleteIcon from '../../assets/icons/delete.svg?react';
44
44
  import DetailsIcon from '../../assets/icons/details.svg?react';
@@ -54,6 +54,14 @@ import DownloadFile from '../../assets/icons/download-icon.svg?react';
54
54
  import RefreshIcon from '../../assets/icons/refresh-icon.svg?react';
55
55
  import LicenseInfo from '../../assets/icons/license_info.svg?react';
56
56
  import LicenseWarning from '../../assets/icons/license_warning.svg?react';
57
+ import Windows from '../../assets/icons/windows.svg?react';
58
+ import DataListIcon from '../../assets/icons/dataset_list.svg?react';
59
+ import Mac from '../../assets/icons/mac.svg?react';
60
+ import Android from '../../assets/icons/android.svg?react';
61
+ import Chrome from '../../assets/icons/chrome.svg?react';
62
+ import BrowserStack from '../../assets/icons/browser_stack.svg?react';
63
+ import Run from '../../assets/icons/run_icon.svg?react';
64
+
57
65
  import DownloadIcon from '../../assets/icons/download_icon.svg?react';
58
66
  import WebIcon from '../../assets/icons/web_icon.svg?react';
59
67
  import WebMobileIcon from '../../assets/icons/web&mobile_icon.svg?react';
@@ -62,12 +70,13 @@ import SalesForceIcon from '../../assets/icons/sales_force.svg?react';
62
70
  import MSDynamicIcon from '../../assets/icons/ms_dynamic.svg?react';
63
71
  import AllProjectsIcon from '../../assets/icons/all_projects.svg?react';
64
72
  import AndroidIcon from '../../assets/icons/android_icon.svg?react';
65
-
73
+ import AddLocator from '../../assets/icons/add_locator.svg?react';
66
74
  import SwitchLicenseIcon from '../../assets/icons/switch_license_icon.svg?react';
67
75
  import FireflinkLogo from '../../assets/icons/fireflink_logo.svg?react';
68
- import WSWBDeleteIcon from '../../assets/icons/wswb_delete_icon.svg?react'
69
- import WSWBPlusIcon from '../../assets/icons/wswb_plus_icon.svg?react'
70
-
76
+ import WSWBDeleteIcon from '../../assets/icons/wswb_delete_icon.svg?react';
77
+ import WSWBPlusIcon from '../../assets/icons/wswb_plus_icon.svg?react';
78
+ import LabelPlusIcon from '../../assets/icons/label_plus.svg?react';
79
+ import Drag from '../../assets/icons/drag_icon.svg?react';
71
80
 
72
81
  //icons
73
82
  Components['delete_info'] = DeleteInfoIcon;
@@ -131,10 +140,20 @@ Components['sales_force'] = SalesForceIcon;
131
140
  Components['ms_dynamic'] = MSDynamicIcon;
132
141
  Components['all_projects'] = AllProjectsIcon;
133
142
  Components['android_icon'] = AndroidIcon;
134
-
143
+ Components['label_plus'] = LabelPlusIcon;
144
+ Components['manual_locator'] = ManualLocator;
135
145
  Components['select_license'] = SwitchLicenseIcon;
136
146
  Components['fireflink-logo'] = FireflinkLogo;
137
147
  Components['wswb_delete_icon'] = WSWBDeleteIcon;
138
148
  Components['wswb_plus_icon'] = WSWBPlusIcon;
149
+ Components['add_locator'] = AddLocator;
150
+ Components['drag'] = Drag;
151
+ Components['windows'] = Windows;
152
+ Components['datalist_icon'] = DataListIcon;
153
+ Components['mac_icon'] = Mac;
154
+ Components['android_icon'] = Android;
155
+ Components['chrome_icon'] = Chrome;
156
+ Components['browser_stack_icon'] = BrowserStack;
157
+ Components['run_icon'] = Run;
139
158
 
140
159
  export default Components;
@@ -133,7 +133,7 @@
133
133
  }
134
134
 
135
135
  .ff-floating-label {
136
- top: -6.5px;
136
+ top: -6px;
137
137
  background-color: var(--input-label-bg-color);
138
138
  padding: 0px 2px;
139
139
  color: var(--input-active-text-color);
@@ -3,6 +3,7 @@ import './InputWithDropdown.scss';
3
3
  import { InputWithDropdownProps } from './types';
4
4
  import Select from '../Select/Select';
5
5
  import Typography from '../Typography';
6
+ import { checkEmpty } from '../../utils/checkEmpty/checkEmpty';
6
7
 
7
8
  const InputWithDropdown = ({
8
9
  name = '',
@@ -20,7 +21,7 @@ const InputWithDropdown = ({
20
21
  onInputBlurHandler,
21
22
  optionsRequired = true,
22
23
  }: InputWithDropdownProps) => {
23
- const isValueFilled = value !== undefined && value >= 0;
24
+ const isValueFilled = !checkEmpty(value);
24
25
  return (
25
26
  <div
26
27
  className={classNames('ff-input-with-dropdown-container', {
@@ -0,0 +1,44 @@
1
+ .ff-machine-input-field-wrapper {
2
+ min-width: 100px;
3
+ height: 32px;
4
+ position: relative;
5
+ cursor: pointer;
6
+
7
+ .ff-machine-input-field,
8
+ .ff-machine-input-field-reverse {
9
+ height: 100%;
10
+ width: 100%;
11
+ border: 1px solid var(--ff-machine-input-field-border-color);
12
+ border-radius: 4px;
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: space-around;
16
+
17
+ .ff-machine-icon-text-wrapper,
18
+ .ff-machine-icon-text-wrapper-reverse {
19
+ display: flex;
20
+
21
+ .ff-machine-icon {
22
+ margin-right: 8px;
23
+ }
24
+ }
25
+
26
+ .ff-machine-icon-text-wrapper-reverse {
27
+ flex-direction: row-reverse;
28
+ }
29
+ }
30
+
31
+ .ff-machine-input-field-reverse {
32
+ flex-direction: row-reverse;
33
+ }
34
+
35
+ .ff-machine-input-label {
36
+ position: absolute;
37
+ top: -6px;
38
+ left: 8px;
39
+ background-color: var(--ff-machine-input-field-border-color);
40
+ border-radius: 4px;
41
+ padding: 1px 2px;
42
+ height: 10px;
43
+ }
44
+ }
@@ -0,0 +1,32 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import MachineInputField from './MachineInputField';
3
+ import { MachineType } from './types';
4
+
5
+ const meta: Meta<typeof MachineInputField> = {
6
+ title: 'Components/MachineInputField',
7
+ component: MachineInputField,
8
+ parameters: {
9
+ layout: 'centered',
10
+ },
11
+ tags: ['autodocs'],
12
+ };
13
+
14
+ type Story = StoryObj<typeof MachineInputField>;
15
+
16
+ // Sample data for the MachineInputField
17
+ const sampleOptions: MachineType[] = [
18
+ { label: 'Local', type: 'Local' },
19
+ { label: '121.25.36', type: 'Google Chrome' },
20
+ { label: '17, iPhone 15', type: 'mac' },
21
+ { label: 'Samsung Galaxy S23', type: 'android' },
22
+ ];
23
+
24
+ export const Primary: Story = {
25
+ args: {
26
+ width: '410px', // Example width
27
+ options: sampleOptions,
28
+ runCount: 1,
29
+ },
30
+ };
31
+
32
+ export default meta;
@@ -0,0 +1,71 @@
1
+ import { forwardRef } from 'react';
2
+ import './MachineInputField.scss';
3
+ import Typography from '../Typography';
4
+ import Icon from '../Icon';
5
+ import { MachineInputFieldProps, MachineType } from './types';
6
+ import classNames from 'classnames';
7
+
8
+ const MachineInputField = forwardRef<HTMLDivElement, MachineInputFieldProps>(
9
+ (
10
+ {
11
+ width = '',
12
+ options = [],
13
+ runCount = 0,
14
+ className = '',
15
+ contentReverse = false,
16
+ },
17
+ ref
18
+ ) => {
19
+ const getIcon: Record<MachineType['type'], string> = {
20
+ Local: 'browser_stack_icon',
21
+ mac: 'mac_icon',
22
+ android: 'android_icon',
23
+ 'Google Chrome': 'chrome_icon',
24
+ };
25
+
26
+ return (
27
+ <div
28
+ ref={ref}
29
+ style={{ width: width }}
30
+ className={classNames('ff-machine-input-field-wrapper', className)}
31
+ >
32
+ <Typography
33
+ as="span"
34
+ color="var(--ff-machine-input-field-text-color)"
35
+ fontSize={8}
36
+ textAlign="center"
37
+ className="ff-machine-input-label"
38
+ >
39
+ Run {runCount}
40
+ </Typography>
41
+
42
+ <div
43
+ className={classNames('ff-machine-input-field', {
44
+ 'ff-machine-input-field-reverse': contentReverse,
45
+ })}
46
+ >
47
+ {options.map(({ label, type }) => (
48
+ <div
49
+ key={type}
50
+ className={classNames('ff-machine-icon-text-wrapper', {
51
+ 'ff-machine-icon-text-wrapper-reverse': contentReverse,
52
+ })}
53
+ >
54
+ <Icon name={getIcon[type]} className="ff-machine-icon" />
55
+ <Typography
56
+ className="ff-machine-text"
57
+ color="var(--ff-machine-input-field-text-color)"
58
+ >
59
+ {label}
60
+ </Typography>
61
+ </div>
62
+ ))}
63
+ </div>
64
+ </div>
65
+ );
66
+ }
67
+ );
68
+
69
+ MachineInputField.displayName = 'MachineInputField';
70
+
71
+ export default MachineInputField;
@@ -0,0 +1 @@
1
+ export { default } from './MachineInputField';
@@ -0,0 +1,12 @@
1
+ export interface MachineType {
2
+ type: 'Local' | 'mac' | 'android' | 'Google Chrome';
3
+ label: string;
4
+ }
5
+
6
+ export interface MachineInputFieldProps {
7
+ width: string;
8
+ options: MachineType[];
9
+ runCount: number;
10
+ className?: string;
11
+ contentReverse?: boolean;
12
+ }
@@ -16,6 +16,17 @@
16
16
  &:hover {
17
17
  background-color: var(--hover-color);
18
18
  }
19
+ &.dark {
20
+ background-color: var(--brand-color);
21
+ &:hover {
22
+ background-color: var(--menu-variant-dark-icon-color);
23
+ svg {
24
+ path {
25
+ fill: var(--brand-color);
26
+ }
27
+ }
28
+ }
29
+ }
19
30
  }
20
31
 
21
32
  .ff-menuicon-container-clicked {
@@ -27,6 +38,9 @@
27
38
  &:hover {
28
39
  background-color: var(--brand-color);
29
40
  }
41
+ &.dark {
42
+ background-color: var(--menu-variant-dark-icon-color);
43
+ }
30
44
  }
31
45
  }
32
46