pixel-react 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. package/lib/components/AddResourceButton/type.d.ts +1 -1
  2. package/lib/components/AllProjectsDropdown/AllProjectsDropdown.d.ts +2 -1
  3. package/lib/components/AllProjectsDropdown/AllProjectsDropdown.stories.d.ts +1 -0
  4. package/lib/components/AllProjectsDropdown/types.d.ts +10 -0
  5. package/lib/components/Button/Button.stories.d.ts +1 -0
  6. package/lib/components/Button/types.d.ts +1 -1
  7. package/lib/components/Drawer/Drawer.stories.d.ts +3 -0
  8. package/lib/components/Drawer/Types.d.ts +25 -1
  9. package/lib/components/Icon/Icon.d.ts +1 -1
  10. package/lib/components/MachineInputField/MachineInputField.d.ts +4 -0
  11. package/lib/components/MachineInputField/MachineInputField.stories.d.ts +6 -0
  12. package/lib/components/MachineInputField/index.d.ts +1 -0
  13. package/lib/components/MachineInputField/types.d.ts +11 -0
  14. package/lib/components/MenuOption/MenuOption.d.ts +1 -1
  15. package/lib/components/MenuOption/MenuOption.stories.d.ts +1 -0
  16. package/lib/components/MenuOption/types.d.ts +7 -0
  17. package/lib/components/Modal/types.d.ts +1 -0
  18. package/lib/components/SequentialConnectingBranch/SequentialConnectingBranch.d.ts +4 -0
  19. package/lib/components/SequentialConnectingBranch/SequentialConnectingBranch.stories.d.ts +6 -0
  20. package/lib/components/SequentialConnectingBranch/components/AddBrowserModal/AddBrowserModal.d.ts +4 -0
  21. package/lib/components/SequentialConnectingBranch/components/AddBrowserModal/types.d.ts +3 -0
  22. package/lib/components/SequentialConnectingBranch/components/Branches/Branches.d.ts +4 -0
  23. package/lib/components/SequentialConnectingBranch/components/Branches/types.d.ts +16 -0
  24. package/lib/components/SequentialConnectingBranch/components/ConnectingBranches/ConnectingBranches.d.ts +4 -0
  25. package/lib/components/SequentialConnectingBranch/components/ConnectingBranches/types.d.ts +9 -0
  26. package/lib/components/SequentialConnectingBranch/components/DatasetListModal/DatasetListModal.d.ts +4 -0
  27. package/lib/components/SequentialConnectingBranch/components/DatasetListModal/types.d.ts +3 -0
  28. package/lib/components/SequentialConnectingBranch/index.d.ts +1 -0
  29. package/lib/components/SequentialConnectingBranch/types.d.ts +32 -0
  30. package/lib/components/Tabs/types.d.ts +1 -0
  31. package/lib/index.d.ts +99 -7
  32. package/lib/index.esm.js +789 -174
  33. package/lib/index.esm.js.map +1 -1
  34. package/lib/index.js +790 -173
  35. package/lib/index.js.map +1 -1
  36. package/lib/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +1 -1
  38. package/src/assets/Themes/BaseTheme.scss +18 -2
  39. package/src/assets/Themes/DarkTheme.scss +11 -3
  40. package/src/assets/icons/add_locator.svg +5 -0
  41. package/src/assets/icons/android.svg +9 -0
  42. package/src/assets/icons/browser_stack.svg +9 -0
  43. package/src/assets/icons/chrome.svg +12 -0
  44. package/src/assets/icons/dataset_list.svg +3 -0
  45. package/src/assets/icons/drag_icon.svg +5 -0
  46. package/src/assets/icons/label_plus.svg +3 -0
  47. package/src/assets/icons/mac.svg +9 -0
  48. package/src/assets/icons/manual_locator.svg +8 -0
  49. package/src/assets/icons/windows.svg +6 -0
  50. package/src/assets/styles/_colors.scss +4 -4
  51. package/src/components/AddResourceButton/type.ts +1 -1
  52. package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +2 -2
  53. package/src/components/AllProjectsDropdown/AllProjectsDropdown.stories.tsx +99 -1
  54. package/src/components/AllProjectsDropdown/AllProjectsDropdown.tsx +30 -56
  55. package/src/components/AllProjectsDropdown/types.ts +10 -0
  56. package/src/components/Button/Button.scss +4 -0
  57. package/src/components/Button/Button.stories.tsx +7 -0
  58. package/src/components/Button/types.ts +2 -2
  59. package/src/components/Drawer/Drawer.scss +22 -11
  60. package/src/components/Drawer/Drawer.stories.tsx +41 -0
  61. package/src/components/Drawer/Drawer.tsx +67 -40
  62. package/src/components/Drawer/Types.ts +25 -1
  63. package/src/components/GridLayout/GridLayout.scss +0 -2
  64. package/src/components/GridLayout/GridLayout.tsx +15 -8
  65. package/src/components/Icon/Icon.tsx +39 -33
  66. package/src/components/Icon/iconList.ts +25 -6
  67. package/src/components/InputWithDropdown/InputWithDropdown.scss +1 -1
  68. package/src/components/InputWithDropdown/InputWithDropdown.tsx +2 -1
  69. package/src/components/MachineInputField/MachineInputField.scss +44 -0
  70. package/src/components/MachineInputField/MachineInputField.stories.tsx +32 -0
  71. package/src/components/MachineInputField/MachineInputField.tsx +71 -0
  72. package/src/components/MachineInputField/index.ts +1 -0
  73. package/src/components/MachineInputField/types.ts +12 -0
  74. package/src/components/MenuOption/MenuOption.scss +14 -0
  75. package/src/components/MenuOption/MenuOption.stories.tsx +21 -0
  76. package/src/components/MenuOption/MenuOption.tsx +5 -3
  77. package/src/components/MenuOption/types.ts +9 -0
  78. package/src/components/MiniModal/MiniModal.tsx +1 -1
  79. package/src/components/Modal/Modal.tsx +2 -0
  80. package/src/components/Modal/modal.scss +2 -2
  81. package/src/components/Modal/types.ts +1 -0
  82. package/src/components/Select/Select.tsx +2 -2
  83. package/src/components/SequentialConnectingBranch/SequentialConnectingBranch.scss +117 -0
  84. package/src/components/SequentialConnectingBranch/SequentialConnectingBranch.stories.tsx +62 -0
  85. package/src/components/SequentialConnectingBranch/SequentialConnectingBranch.tsx +210 -0
  86. package/src/components/SequentialConnectingBranch/components/AddBrowserModal/AddBrowserModal.scss +51 -0
  87. package/src/components/SequentialConnectingBranch/components/AddBrowserModal/AddBrowserModal.tsx +107 -0
  88. package/src/components/SequentialConnectingBranch/components/AddBrowserModal/types.ts +5 -0
  89. package/src/components/SequentialConnectingBranch/components/Branches/Branches.scss +184 -0
  90. package/src/components/SequentialConnectingBranch/components/Branches/Branches.tsx +203 -0
  91. package/src/components/SequentialConnectingBranch/components/Branches/types.ts +18 -0
  92. package/src/components/SequentialConnectingBranch/components/ConnectingBranches/ConnectingBranches.scss +3 -0
  93. package/src/components/SequentialConnectingBranch/components/ConnectingBranches/ConnectingBranches.tsx +66 -0
  94. package/src/components/SequentialConnectingBranch/components/ConnectingBranches/types.ts +10 -0
  95. package/src/components/SequentialConnectingBranch/components/DatasetListModal/DatasetListModal.scss +31 -0
  96. package/src/components/SequentialConnectingBranch/components/DatasetListModal/DatasetListModal.tsx +85 -0
  97. package/src/components/SequentialConnectingBranch/components/DatasetListModal/types.ts +4 -0
  98. package/src/components/SequentialConnectingBranch/index.ts +1 -0
  99. package/src/components/SequentialConnectingBranch/types.ts +42 -0
  100. package/src/components/Tabs/Tabs.stories.tsx +24 -25
  101. package/src/components/Tabs/Tabs.tsx +3 -10
  102. package/src/components/Tabs/types.ts +7 -1
  103. package/src/index.ts +5 -0
@@ -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
 
@@ -256,4 +256,25 @@ export const MenuOptionPlacementRight: Story = {
256
256
  },
257
257
  };
258
258
 
259
+
260
+ export const MenuOptionCustom: Story = {
261
+ args: {
262
+ iconName: 'more',
263
+ dropdownPlacement: 'bottom',
264
+ variant:'dark',
265
+ options: [
266
+ {
267
+ label: 'Option1',
268
+ value: 'opt1',
269
+ icon: 'success',
270
+ },
271
+ {
272
+ label: 'Option2',
273
+ value: 'opt2',
274
+ icon: 'success',
275
+ },
276
+ ],
277
+ },
278
+ };
279
+
259
280
  export default meta;
@@ -51,6 +51,7 @@ const MenuOption = ({
51
51
  iconButtonSize = 20,
52
52
  iconButtonBorderRadius = 7,
53
53
  iconSize = 16,
54
+ variant = 'light',
54
55
  }: MenuOptionProps) => {
55
56
  const [isClicked, setIsClicked] = useState(false);
56
57
  const menuRef = useRef<HTMLDivElement>(null);
@@ -90,6 +91,7 @@ const MenuOption = ({
90
91
  <div
91
92
  className={classNames('ff-menuicon-container', {
92
93
  'ff-menuicon-container-clicked': isClicked,
94
+ dark: variant === 'dark',
93
95
  })}
94
96
  onClick={onIconClickHandler}
95
97
  style={{
@@ -103,9 +105,9 @@ const MenuOption = ({
103
105
  width={iconSize}
104
106
  name={iconName}
105
107
  color={
106
- isClicked
107
- ? 'var(--menu-option-icon-color)'
108
- : 'var(--menu-option-icon-clicked)'
108
+ isClicked === (variant === 'dark')
109
+ ? 'var(--menu-option-icon-clicked)'
110
+ : 'var(--menu-option-icon-color)'
109
111
  }
110
112
  />
111
113
  </div>
@@ -110,6 +110,15 @@ interface MenuOptionProps {
110
110
  * @type {function}
111
111
  * @optional
112
112
  */
113
+
114
+ variant?: 'dark' | 'light';
115
+ /**
116
+ * The variant of the menu option, either 'dark' or 'light'.
117
+ * @type {'dark' | 'light'}
118
+ * @default 'light'
119
+ * @optional
120
+ */
121
+
113
122
  onClick?: () => void;
114
123
 
115
124
  /**
@@ -182,7 +182,7 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
182
182
  }}
183
183
  >
184
184
  {headerProps ? (
185
- <Typography as="p">{headerProps}</Typography>
185
+ <Typography as="div">{headerProps}</Typography>
186
186
  ) : (
187
187
  <Typography as="header">
188
188
  <Typography as="h2">Header text</Typography>
@@ -20,6 +20,7 @@ const Modal: React.FC<ModalProps> = ({
20
20
  customWidth = '660px', // default width
21
21
  customHeight = 'auto', // default height
22
22
  children,
23
+ zIndex = 999,
23
24
  }) => {
24
25
  useEffect(() => {
25
26
  const handleKeyDown = (e: KeyboardEvent) => {
@@ -49,6 +50,7 @@ const Modal: React.FC<ModalProps> = ({
49
50
  return createPortal(
50
51
  <div
51
52
  className={`ff-modal-overlay ${overlayClassName || ''}`}
53
+ style={{ zIndex: zIndex }}
52
54
  onClick={shouldCloseOnOverlayClick ? onClose : undefined}
53
55
  >
54
56
  <div
@@ -15,8 +15,8 @@
15
15
  background: var(--ff-mini-modal-border);
16
16
  position: relative;
17
17
  max-width: 100%;
18
- border-radius: 12px;
19
- padding: 16px;
18
+ border-radius: 12px 12px 0 0;
19
+ padding: 8px;
20
20
 
21
21
  .ff-modal-header {
22
22
  height: 32px;
@@ -36,4 +36,5 @@ export interface ModalProps {
36
36
  isFooterDisplayed: boolean;
37
37
  customWidth: string;
38
38
  customHeight?: string;
39
+ zIndex?: number;
39
40
  }
@@ -283,7 +283,7 @@ const Select = ({
283
283
  >
284
284
  {required && (
285
285
  <Typography
286
- color="var(--$error-light)"
286
+ color="var(--error-light)"
287
287
  className="ff-select-label--required"
288
288
  >
289
289
  *
@@ -327,7 +327,7 @@ const Select = ({
327
327
  {required && (
328
328
  <Typography
329
329
  fontSize={8}
330
- color={'var(--$error-light)'}
330
+ color={'var(--error-light)'}
331
331
  className="ff-select-legend--required"
332
332
  >
333
333
  *
@@ -0,0 +1,117 @@
1
+ .ff-sequential-connecting-branch-wrapper {
2
+ .ff-connecting-select-branch-wrapper {
3
+ height: 66px;
4
+ box-sizing: border-box;
5
+ width: fit-content;
6
+ margin-bottom: 16px;
7
+
8
+ .ff-select-branch-wrapper {
9
+ position: relative;
10
+ display: flex;
11
+ box-sizing: border-box;
12
+
13
+ .ff-sequential-select-branch {
14
+ width: 240px;
15
+ }
16
+
17
+ .ff-select-branch-arrow {
18
+ position: relative;
19
+ display: flex;
20
+ align-items: center;
21
+
22
+ .ff-branch-arrow-wrapper {
23
+ width: 40px;
24
+ border-top: 1px solid var(--ff-connecting-branch-color);
25
+ margin-top: 4px;
26
+ position: relative;
27
+
28
+ .ff-branch-arrow {
29
+ width: 6px;
30
+ height: 6px;
31
+ background-color: var(--ff-connecting-branch-color);
32
+ clip-path: polygon(100% 50%, 0 100%, 0 0);
33
+ position: absolute;
34
+ right: -1px;
35
+ top: -3px;
36
+ }
37
+ }
38
+
39
+ .ff-select-branch-point {
40
+ width: 5px;
41
+ height: 5px;
42
+ border-radius: 50%;
43
+ background-color: var(--ff-connecting-branch-color);
44
+ position: absolute;
45
+ left: -3px;
46
+ z-index: 102;
47
+ top: 50%;
48
+ }
49
+
50
+ .branch-button {
51
+ margin-top: 4px;
52
+ }
53
+ }
54
+
55
+ .ff-select-branch-arrow-down {
56
+ position: absolute;
57
+ height: 38px;
58
+
59
+ .ff-select-branch-point {
60
+ position: absolute;
61
+ height: 5px;
62
+ width: 5px;
63
+ background-color: var(--ff-connecting-branch-color);
64
+ border-radius: 50%;
65
+ top: 50%;
66
+ left: -2px;
67
+ z-index: 102;
68
+ }
69
+
70
+ .ff-select-branch-arrow {
71
+ width: 0px;
72
+ height: 62px;
73
+ top: calc(50% + 1px);
74
+ border-left: 1px solid var(--ff-connecting-branch-color);
75
+ z-index: 102;
76
+ }
77
+ }
78
+ }
79
+
80
+ .ff-select-scope-datalist {
81
+ box-sizing: border-box;
82
+ width: 240px;
83
+ margin-top: 4px;
84
+ padding: 0px 4px;
85
+ display: flex;
86
+ justify-content: space-between;
87
+
88
+ .ff-scope-wrapper {
89
+ display: flex;
90
+
91
+ .ff-scope-text {
92
+ margin-left: 4px;
93
+ }
94
+ }
95
+
96
+ .ff-datalist-wrapper {
97
+ display: flex;
98
+
99
+ .ff-dataset-icon,
100
+ .ff-run-delete-icon,
101
+ .ff-datalist-text {
102
+ cursor: pointer;
103
+ }
104
+
105
+ .ff-datalist-text {
106
+ margin: 0px 12px 0px 4px;
107
+ }
108
+ }
109
+ }
110
+ }
111
+
112
+ .ff-sequential-branches-wrapper {
113
+ box-sizing: border-box;
114
+ width: fit-content;
115
+ height: fit-content;
116
+ }
117
+ }
@@ -0,0 +1,62 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import SequentialConnectingBranch from './SequentialConnectingBranch';
3
+ import {ffid} from '../../utils/ffID/ffid';
4
+
5
+ const meta: Meta<typeof SequentialConnectingBranch> = {
6
+ title: 'Components/SequentialConnectingBranch',
7
+ component: SequentialConnectingBranch,
8
+ parameters: {
9
+ layout: 'centered',
10
+ },
11
+ tags: ['autodocs'],
12
+ };
13
+
14
+ type Story = StoryObj<typeof SequentialConnectingBranch>;
15
+
16
+ export const Primary: Story = {
17
+ args: {
18
+ machineInstances: [
19
+ {
20
+ id: ffid(),
21
+ runCount: 1,
22
+ clientId: 'flinko-client-win-98ddb98f-2349-43ce-869e-c2d5350741a4',
23
+ executionEnv: 'Local',
24
+ browserName: 'Google Chrome',
25
+ browserVersion: '111.0.5563.112',
26
+ systemUrl: '',
27
+ machineInfo: {
28
+ osName: 'Windows 11 Pro',
29
+ osVersion: '10.0.22621',
30
+ hostName: 'TYSS-Kumuda',
31
+ },
32
+ deviceInfo: [],
33
+ headless: false,
34
+ peVariableSetId: 'UUID',
35
+ globalVariableSetId: 'UUID',
36
+ testDataSetId: 'UUID',
37
+ },
38
+ ],
39
+ machineInstance: {
40
+ id: ffid(),
41
+ runCount: 1,
42
+ clientId: 'flinko-client-win-98ddb98f-2349-43ce-869e-c2d5350741a4',
43
+ executionEnv: 'Local',
44
+ browserName: 'Google Chrome',
45
+ browserVersion: '111.0.5563.112',
46
+ systemUrl: '',
47
+ machineInfo: {
48
+ osName: 'Windows 11 Pro',
49
+ osVersion: '10.0.22621',
50
+ hostName: 'TYSS-Kumuda',
51
+ },
52
+ deviceInfo: [],
53
+ headless: false,
54
+ peVariableSetId: 'UUID',
55
+ globalVariableSetId: 'UUID',
56
+ testDataSetId: 'UUID',
57
+ },
58
+ selectedMachine: 'test',
59
+ },
60
+ };
61
+
62
+ export default meta;