pixel-react 1.1.4 → 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 (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
@@ -0,0 +1,210 @@
1
+ import classNames from 'classnames';
2
+ import { checkEmpty } from '../../utils/checkEmpty/checkEmpty';
3
+ import Button from '../Button';
4
+ import Icon from '../Icon';
5
+ import Select from '../Select';
6
+ import Typography from '../Typography';
7
+ import './SequentialConnectingBranch.scss';
8
+ import { useEffect, useRef, useState } from 'react';
9
+ import ConnectingBranches from './components/ConnectingBranches/ConnectingBranches';
10
+ import DatasetListModal from './components/DatasetListModal/DatasetListModal';
11
+ import AddBrowserModal from './components/AddBrowserModal/AddBrowserModal';
12
+ import { ExecutionContext, SequentialConnectingBranchProps } from './types';
13
+ import { Option } from '../Select/types';
14
+ import { ffid } from '../../utils/ffID/ffid';
15
+
16
+ const SequentialConnectingBranch = ({
17
+ machineInstances = [],
18
+ machineColumnWidth = 180,
19
+ machineColumnCount = 1,
20
+ machineInstance,
21
+ selectedMachine = '',
22
+ machineOptionsList = [],
23
+ onMachineSelectionChange = () => {},
24
+ }: SequentialConnectingBranchProps) => {
25
+ const dataListRef = useRef<HTMLButtonElement>(null);
26
+ const selectButtonRef = useRef<HTMLButtonElement>(null);
27
+ const defaultMachineColumnCount = Math.max(machineColumnCount, 1);
28
+ const defaultMachineColumnWidth = Math.max(machineColumnWidth, 180);
29
+
30
+ const isBrowserDetails = checkEmpty(machineInstances);
31
+ const [datasetListModal, setDatasetListModal] = useState(
32
+ !!selectedMachine && isBrowserDetails
33
+ );
34
+ const [addBrowserModal, setAddBrowserModal] = useState(false);
35
+ const [machineBranchInstances, setMachineBranchInstances] = useState<
36
+ ExecutionContext[] | {}[]
37
+ >(machineInstances);
38
+
39
+ // TODO: DEMO PURPOSE AND WILL BE REMOVED IN THE FUTURE
40
+ const onHandleSelect = (option: Option) => {
41
+ setDatasetListModal(true);
42
+ onMachineSelectionChange(option);
43
+ };
44
+
45
+ // TODO: DEMO PURPOSE AND WILL BE REMOVED IN THE FUTURE
46
+ const onUpdateDatasetList = () => {
47
+ setDatasetListModal(false);
48
+ setAddBrowserModal(true);
49
+ };
50
+
51
+ // TODO: DEMO PURPOSE AND WILL BE REMOVED IN THE FUTURE
52
+ const onUpdateAddBrowser = () => {
53
+ setAddBrowserModal(false);
54
+ setDatasetListModal(false);
55
+ };
56
+
57
+ // TODO: DEMO PURPOSE AND WILL BE REMOVED IN THE FUTURE
58
+ const onAddBrowser = () => {
59
+ const newMachineInstance = { ...machineInstance, id: ffid() };
60
+ console.log(newMachineInstance);
61
+ setMachineBranchInstances((prevInstances) => [
62
+ ...prevInstances.slice(0, -1),
63
+ newMachineInstance,
64
+ {},
65
+ ]);
66
+ };
67
+
68
+ // TODO: DEMO PURPOSE AND WILL BE REMOVED IN THE FUTURE
69
+ const onDeleteBrowser = (id: string, runCount: number) => {
70
+ const machineInstance = machineBranchInstances.filter((instance) => {
71
+ if ('id' in instance && 'runCount' in instance) {
72
+ return instance.id !== id || instance.runCount !== runCount;
73
+ }
74
+ return true;
75
+ });
76
+ setMachineBranchInstances(machineInstance);
77
+ };
78
+
79
+ // TODO: DEMO PURPOSE AND WILL BE REMOVED IN THE FUTURE
80
+ const onAddRunBrowser = (id: string) => {
81
+ const index = machineBranchInstances.findLastIndex(
82
+ (instance) => 'id' in instance && instance.id === id
83
+ );
84
+
85
+ if (index !== -1) {
86
+ const existingMachineInstance = machineBranchInstances[index];
87
+
88
+ if (existingMachineInstance && 'runCount' in existingMachineInstance) {
89
+ const newRunInstance = {
90
+ ...existingMachineInstance,
91
+ runCount: (existingMachineInstance.runCount ?? 0) + 1,
92
+ };
93
+
94
+ setMachineBranchInstances((prevInstances) => [
95
+ ...prevInstances.slice(0, index + 1),
96
+ newRunInstance,
97
+ ...prevInstances.slice(index + 1),
98
+ ]);
99
+ }
100
+ }
101
+ };
102
+
103
+ useEffect(() => {
104
+ setMachineBranchInstances([...machineBranchInstances, {}]);
105
+ }, []);
106
+
107
+ return (
108
+ <div className="ff-sequential-connecting-branch-wrapper">
109
+ <div className="ff-connecting-select-branch-wrapper">
110
+ <div className="ff-select-branch-wrapper">
111
+ <Select
112
+ onChange={onHandleSelect}
113
+ optionsList={machineOptionsList}
114
+ required={true}
115
+ label="Choose Machine"
116
+ showLabel={true}
117
+ className="ff-sequential-select-branch"
118
+ />
119
+ {/* {isBrowserDetails && !!selectedMachine && ( */}
120
+ {!!selectedMachine && (
121
+ <div
122
+ className={classNames({
123
+ 'ff-select-branch-arrow': isBrowserDetails,
124
+ 'ff-select-branch-arrow-down': !isBrowserDetails,
125
+ })}
126
+ >
127
+ <div className="ff-select-branch-point"></div>
128
+ <div className="ff-select-branch-arrow">
129
+ <div className="ff-branch-arrow-wrapper">
130
+ {isBrowserDetails && <div className="ff-branch-arrow"></div>}
131
+ </div>
132
+ {addBrowserModal && (
133
+ <>
134
+ <Button
135
+ variant="tertiary"
136
+ label="Browser / Device"
137
+ size="small"
138
+ className="branch-button"
139
+ ref={selectButtonRef}
140
+ onClick={onAddBrowser}
141
+ />
142
+
143
+ <AddBrowserModal
144
+ ref={selectButtonRef}
145
+ onUpdateAddBrowser={onUpdateAddBrowser}
146
+ />
147
+ </>
148
+ )}
149
+ </div>
150
+ </div>
151
+ )}
152
+ </div>
153
+ <div className="ff-select-scope-datalist">
154
+ <div className="ff-scope-wrapper">
155
+ <Icon name="windows" />
156
+ <Typography
157
+ as="span"
158
+ fontSize={12}
159
+ color="var(--ff-connecting-branch-scope-color)"
160
+ className="ff-scope-text"
161
+ >
162
+ Private
163
+ </Typography>
164
+ </div>
165
+
166
+ <div className="ff-datalist-wrapper">
167
+ <Icon
168
+ name="datalist_icon"
169
+ className="ff-dataset-icon"
170
+ ref={dataListRef}
171
+ />
172
+ {datasetListModal && (
173
+ <DatasetListModal
174
+ ref={dataListRef}
175
+ onUpdateDatasetList={onUpdateDatasetList}
176
+ />
177
+ )}
178
+ <Typography
179
+ as="span"
180
+ fontSize={12}
181
+ color="var(--ff-connecting-branch-color)"
182
+ className="ff-datalist-text"
183
+ >
184
+ Dataset List
185
+ </Typography>
186
+ <Icon
187
+ name="delete"
188
+ className="ff-run-delete-icon"
189
+ color="var(--ff-connecting-branch-delete-color)"
190
+ />
191
+ </div>
192
+ </div>
193
+ </div>
194
+ <div className="ff-sequential-branches-wrapper">
195
+ {!isBrowserDetails && (
196
+ <ConnectingBranches
197
+ machineBranchInstances={machineBranchInstances}
198
+ machineColumnCount={defaultMachineColumnCount}
199
+ machineColumnWidth={defaultMachineColumnWidth}
200
+ onAddBrowser={onAddBrowser}
201
+ onDeleteBrowser={onDeleteBrowser}
202
+ onAddRunBrowser={onAddRunBrowser}
203
+ />
204
+ )}
205
+ </div>
206
+ </div>
207
+ );
208
+ };
209
+
210
+ export default SequentialConnectingBranch;
@@ -0,0 +1,51 @@
1
+ .ff-connecting-datalist-modal-header-wrapper,
2
+ .ff-connecting-modal-child-wrapper {
3
+ width: 534px;
4
+ padding: 0 4px;
5
+ }
6
+
7
+ .ff-connecting-datalist-modal-header-wrapper {
8
+ border-bottom: 1px solid var(--ff-connecting-branch-modal-border);
9
+ margin-bottom: 4px;
10
+ }
11
+
12
+ .ff-connecting-modal-child-wrapper {
13
+ .ff-branch-select-input-wrapper {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 8px;
17
+
18
+ .ff-select-browser {
19
+ width: 263px;
20
+ }
21
+
22
+ .ff-branch-input-wrapper {
23
+ display: flex;
24
+ align-items: flex-end;
25
+ height: 38px;
26
+
27
+ .ff-input-browser {
28
+ width: 245px;
29
+ }
30
+ }
31
+ }
32
+ }
33
+
34
+ .ff-connecting-modal-footer-wrapper {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: space-between;
38
+ padding: 0 8px;
39
+ margin-top: 8px;
40
+ border-top: 1px solid var(--ff-connecting-branch-modal-border);
41
+
42
+ .ff-branch-toggle-wrapper,
43
+ .ff-datalist-button-wrapper {
44
+ display: flex;
45
+ gap: 8px;
46
+ }
47
+
48
+ .ff-branch-toggle-wrapper {
49
+ gap: 4px;
50
+ }
51
+ }
@@ -0,0 +1,107 @@
1
+ import { forwardRef, RefObject } from 'react';
2
+ import MiniModal from '../../../MiniModal';
3
+ import Typography from '../../../Typography';
4
+ import './AddBrowserModal.scss';
5
+ import Select from '../../../Select';
6
+ import Button from '../../../Button';
7
+ import Toggle from '../../../Toggle';
8
+ import Input from '../../../Input/Input';
9
+ import { AddBrowserModalProps } from './types';
10
+
11
+ const AddBrowserModal = forwardRef<HTMLButtonElement, AddBrowserModalProps>(
12
+ (props, ref) => {
13
+ // TODO: WILL BE REMOVE IN THE FUTURE
14
+ const selectOptions = [
15
+ { label: 'Execution Environment', inputName: 'number of runs' },
16
+ { label: 'Browser', inputName: 'Browser Version' },
17
+ { label: 'Android Device', inputName: 'os version' },
18
+ { label: 'IOS Device', inputName: 'os version-1' },
19
+ ];
20
+
21
+ const renderSelectOptions = () => (
22
+ <div>
23
+ {selectOptions.map(({ label, inputName }, index) => (
24
+ <div className="ff-branch-select-input-wrapper" key={index}>
25
+ <Select
26
+ optionsList={[]}
27
+ onChange={() => {}}
28
+ label={label}
29
+ className="ff-select-browser"
30
+ />
31
+ <div className="ff-branch-input-wrapper">
32
+ <Input
33
+ value="0"
34
+ label="Number of Runs"
35
+ type="number"
36
+ onChange={() => {}}
37
+ name={inputName}
38
+ className="ff-input-browser"
39
+ />
40
+ </div>
41
+ </div>
42
+ ))}
43
+ </div>
44
+ );
45
+
46
+ const renderFooterContent = () => (
47
+ <div className="ff-connecting-modal-footer-wrapper">
48
+ <div className="ff-branch-toggle-wrapper">
49
+ <Typography as="span" lineHeight="32px">
50
+ Run in Headless Mode
51
+ </Typography>
52
+ <Toggle />
53
+ </div>
54
+ <div className="ff-datalist-button-wrapper">
55
+ <Button label="Cancel" variant="tertiary" />
56
+ <Button label="Update" variant="primary" />
57
+ </div>
58
+ </div>
59
+ );
60
+
61
+ return (
62
+ <div>
63
+ <MiniModal
64
+ anchorRef={ref as RefObject<HTMLButtonElement>}
65
+ headerProps={
66
+ <div className="ff-connecting-datalist-modal-header-wrapper">
67
+ <Typography
68
+ as="span"
69
+ color="var(--ff-connecting-branch-modal-header)"
70
+ fontWeight="semi-bold"
71
+ fontSize={12}
72
+ lineHeight="38px"
73
+ >
74
+ Add Browser / Device
75
+ </Typography>
76
+ </div>
77
+ }
78
+ childContent={
79
+ <div className="ff-connecting-modal-child-wrapper">
80
+ {renderSelectOptions()}
81
+ </div>
82
+ }
83
+ footerContent={renderFooterContent()}
84
+ cancelButtonProps={{
85
+ text: 'Cancel',
86
+
87
+ // TODO: DEMO PURPOSE AND WILL BE REMOVED IN THE FUTURE
88
+ onClick: props.onUpdateAddBrowser,
89
+ }}
90
+ proceedButtonProps={{
91
+ text: 'Proceed',
92
+ // TODO: DEMO PURPOSE AND WILL BE REMOVED IN THE FUTURE
93
+ onClick: props.onUpdateAddBrowser,
94
+ }}
95
+ modalPosition="right"
96
+ isPopOver
97
+ leftTopArrow
98
+ extraRightSpace={{ leftTopArrow: 45 }}
99
+ extraLeftSpace={{ rightAlignModal: 115 }}
100
+ {...props}
101
+ />
102
+ </div>
103
+ );
104
+ }
105
+ );
106
+
107
+ export default AddBrowserModal;
@@ -0,0 +1,5 @@
1
+ export interface AddBrowserModalProps {
2
+
3
+ // TODO: DEMO PURPOSE AND WILL BE REMOVED IN THE FUTURE
4
+ onUpdateAddBrowser: () => void;
5
+ }
@@ -0,0 +1,184 @@
1
+ @mixin arrow-style(
2
+ $size: 7px,
3
+ $color: var(--ff-connecting-branch-color),
4
+ $z-index: 2
5
+ ) {
6
+ position: absolute;
7
+ height: $size;
8
+ width: $size;
9
+ background-color: $color;
10
+ z-index: $z-index;
11
+ }
12
+
13
+ @mixin container-style(
14
+ $width: 100%,
15
+ $height: 25%,
16
+ $color: var(--ff-connecting-branch-color)
17
+ ) {
18
+ width: $width;
19
+ height: $height;
20
+ border: 1px solid $color;
21
+ border-top: none;
22
+ }
23
+
24
+ @mixin branch-point(
25
+ $size: 5px,
26
+ $color: var(--ff-connecting-branch-color),
27
+ $position: right,
28
+ $offset: -4px
29
+ ) {
30
+ position: absolute;
31
+ height: $size;
32
+ width: $size;
33
+ background-color: $color;
34
+ border-radius: 50%;
35
+ z-index: 2;
36
+ #{$position}: $offset;
37
+ top: calc(50% - 1px);
38
+ }
39
+
40
+ @mixin branch-arrow(
41
+ $clip: polygon(0 0, 0% 100%, 100% 50%),
42
+ $horizontal-pos: right,
43
+ $offset: -1px
44
+ ) {
45
+ position: absolute;
46
+ height: 7px;
47
+ width: 7px;
48
+ background-color: var(--ff-connecting-branch-color);
49
+ clip-path: $clip;
50
+ top: calc(25% - 4px);
51
+ #{$horizontal-pos}: $offset;
52
+ z-index: 2;
53
+ }
54
+
55
+ @mixin datalist-style($reverse: false) {
56
+ display: flex;
57
+ padding-top: 4px;
58
+ height: 24px;
59
+ justify-content: flex-end;
60
+ width: 100%;
61
+ align-items: center;
62
+ flex-direction: if($reverse, row-reverse, row);
63
+
64
+ .ff-connecting-icon {
65
+ margin-right: 4px;
66
+ cursor: pointer;
67
+ }
68
+
69
+ .ff-connecting-text {
70
+ margin-right: 8px;
71
+ }
72
+
73
+ .ff-connecting-delete-icon {
74
+ cursor: pointer;
75
+ }
76
+ }
77
+
78
+ @mixin end-arrow-styles($direction: right) {
79
+ width: 100%;
80
+ height: 100%;
81
+ margin-top: 17px;
82
+ border-top: 1px solid var(--ff-connecting-branch-color);
83
+ border-#{$direction}: 1px solid var(--ff-connecting-branch-color);
84
+ }
85
+
86
+ .ff-connecting-branch-grid,
87
+ .ff-connecting-branch-grid-reverse {
88
+ box-sizing: border-box;
89
+ display: grid;
90
+ grid-template-columns: 24px 180px 40px 180px 24px;
91
+ height: 66px;
92
+ margin-bottom: 16px;
93
+ position: relative;
94
+
95
+ .ff-connecting-branch-start-wrapper {
96
+ position: relative;
97
+
98
+ .ff-connecting-branch-arrow {
99
+ @include arrow-style();
100
+ clip-path: polygon(0 0, 0% 100%, 100% 50%);
101
+ top: calc(25% - 3px);
102
+ right: -2px;
103
+ }
104
+
105
+ .ff-connecting-branch-arrow-reverse {
106
+ @include arrow-style();
107
+ left: -2px;
108
+ top: calc(25% - 3px);
109
+ clip-path: polygon(0 50%, 100% 100%, 100% 0);
110
+ }
111
+
112
+ .ff-connecting-branch-container {
113
+ @include container-style();
114
+ border-right: none;
115
+ border-bottom-left-radius: 8px;
116
+ }
117
+
118
+ .ff-connecting-branch-container-reverse {
119
+ @include container-style();
120
+ border-left: none;
121
+ border-bottom-right-radius: 8px;
122
+ }
123
+ }
124
+
125
+ .ff-connecting-branch-datalist {
126
+ @include datalist-style();
127
+ }
128
+
129
+ .ff-connecting-branch-datalist-reverse {
130
+ @include datalist-style(true);
131
+ }
132
+
133
+ .ff-connecting-branch-input-point-wrapper {
134
+ position: relative;
135
+
136
+ .ff-connecting-branch-point {
137
+ @include branch-point();
138
+ }
139
+
140
+ .ff-connecting-branch-point-reverse {
141
+ @include branch-point($position: left, $offset: -4px);
142
+ }
143
+ }
144
+
145
+ .ff-connecting-branch-middle-arrow {
146
+ height: 0px;
147
+ width: 100%;
148
+ margin-top: calc(50% - 3px);
149
+ position: relative;
150
+
151
+ .ff-connecting-branch-arrow {
152
+ @include branch-arrow();
153
+ }
154
+
155
+ .ff-connecting-branch-arrow-reverse {
156
+ @include branch-arrow(
157
+ $clip: polygon(0 50%, 100% 100%, 100% 0),
158
+ $horizontal-pos: left,
159
+ $offset: -1px
160
+ );
161
+ }
162
+ }
163
+
164
+ .ff-connecting-branch-end-arrow {
165
+ @include end-arrow-styles(right);
166
+ border-top-right-radius: 8px;
167
+ }
168
+
169
+ .ff-connecting-branch-end-arrow-reverse {
170
+ @include end-arrow-styles(left);
171
+ border-top-left-radius: 8px;
172
+ }
173
+
174
+ .ff-connecting-branch-browser-button {
175
+ height: 32px;
176
+ display: flex;
177
+ align-items: center;
178
+ }
179
+ }
180
+
181
+ .ff-connecting-branch-grid-reverse {
182
+ direction: rtl;
183
+ margin-left: 1px;
184
+ }