pixel-react-excel-sheet 1.0.38 → 1.0.40
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.
- package/lib/components/Button/Button.d.ts +2 -2
- package/lib/components/Charts/DashboardDonutChart/types.d.ts +3 -0
- package/lib/components/Charts/LineChart/types.d.ts +1 -0
- package/lib/components/ChooseFile/ChooseFile.d.ts +3 -2
- package/lib/components/Comment/Comments.d.ts +1 -1
- package/lib/components/Comment/type.d.ts +3 -3
- package/lib/components/ConditionalDropdown/types.d.ts +4 -0
- package/lib/components/DatePicker/types.d.ts +2 -0
- package/lib/components/Drawer/Types.d.ts +3 -0
- package/lib/components/Excel/ExcelFile/ExcelFile.d.ts +11 -10
- package/lib/components/Excel/ExcelFile/ExcelFileComponents/ActiveCell.d.ts +10 -0
- package/lib/components/Excel/ExcelFile/ExcelFileComponents/DataViewer.d.ts +1 -1
- package/lib/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.d.ts +9 -0
- package/lib/components/Excel/ExcelFile/ExcelFileComponents/types.d.ts +0 -3
- package/lib/components/Excel/Types.d.ts +15 -11
- package/lib/components/FF_Captcha/Recaptcha.d.ts +2 -1
- package/lib/components/FF_Captcha/types.d.ts +11 -2
- package/lib/components/Input/types.d.ts +4 -0
- package/lib/components/LabelEditTextField/types.d.ts +2 -0
- package/lib/components/MobileSkin/MobileSkin.d.ts +5 -0
- package/lib/components/MobileSkin/MobileSkinInterface.d.ts +13 -0
- package/lib/components/MobileSkin/index.d.ts +1 -0
- package/lib/components/MobileSkin/types.d.ts +32 -0
- package/lib/components/Search/Search.d.ts +1 -1
- package/lib/components/Search/types.d.ts +1 -0
- package/lib/components/Select/components/types.d.ts +3 -2
- package/lib/components/Select/types.d.ts +10 -2
- package/lib/components/SequentialConnectingBranch/components/Branches/Branches.d.ts +1 -1
- package/lib/components/SequentialConnectingBranch/components/Branches/types.d.ts +1 -0
- package/lib/components/SequentialConnectingBranch/components/ConnectingBranches/ConnectingBranches.d.ts +1 -1
- package/lib/components/SequentialConnectingBranch/components/ConnectingBranches/types.d.ts +1 -0
- package/lib/components/SequentialConnectingBranch/types.d.ts +1 -0
- package/lib/components/TableTree/types.d.ts +4 -4
- package/lib/components/Tabs/types.d.ts +1 -0
- package/lib/index.d.ts +96 -40
- package/lib/index.esm.js +4816 -1669
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +4829 -1669
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/formData/ConvertFormDataToObject.d.ts +1 -0
- package/lib/utils/keyBoardActionUtil/UseKeyboardActions.d.ts +2 -0
- package/lib/utils/keyBoardActionUtil/types.d.ts +4 -0
- package/lib/validations/regex.d.ts +11 -1
- package/package.json +6 -1
- package/src/assets/Themes/BaseTheme.scss +3 -1
- package/src/assets/Themes/DarkTheme.scss +10 -1
- package/src/assets/icons/clear_cache.svg +5 -0
- package/src/assets/icons/external_user.svg +13 -0
- package/src/assets/icons/group_user.svg +12 -0
- package/src/assets/icons/single_user.svg +12 -0
- package/src/assets/icons/test_freshers_logo.svg +8 -0
- package/src/assets/icons/unfollow_icon.svg +3 -0
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +7 -45
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.stories.tsx +5 -0
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.tsx +76 -64
- package/src/components/Button/Button.scss +0 -1
- package/src/components/Button/Button.tsx +3 -4
- package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.stories.tsx +38 -6
- package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.tsx +10 -4
- package/src/components/Charts/DashboardDonutChart/types.ts +4 -1
- package/src/components/Charts/LineChart/LineChart.stories.tsx +27 -88
- package/src/components/Charts/LineChart/LineChart.tsx +138 -42
- package/src/components/Charts/LineChart/types.ts +1 -0
- package/src/components/Charts/MultiRadialChart/MultiRadialChart.scss +3 -3
- package/src/components/Charts/MultiRadialChart/MultiRadialChart.tsx +47 -43
- package/src/components/ChooseFile/ChooseFile.tsx +3 -4
- package/src/components/Comment/Comments.scss +0 -1
- package/src/components/Comment/Comments.stories.tsx +22 -4
- package/src/components/Comment/Comments.tsx +20 -1
- package/src/components/Comment/type.ts +3 -3
- package/src/components/ConditionalDropdown/ConditionalDropdown.stories.tsx +1 -0
- package/src/components/ConditionalDropdown/ConditionalDropdown.tsx +2 -1
- package/src/components/ConditionalDropdown/types.ts +4 -0
- package/src/components/DatePicker/DatePicker.scss +307 -2
- package/src/components/DatePicker/DatePicker.tsx +27 -19
- package/src/components/DatePicker/types.ts +4 -0
- package/src/components/Drawer/Drawer.stories.tsx +1 -1
- package/src/components/Drawer/Types.ts +4 -2
- package/src/components/Editor/Editor.scss +23 -18
- package/src/components/Editor/Editor.tsx +2 -2
- package/src/components/Excel/ExcelContextMenu/ExcelContextMenu.tsx +6 -3
- package/src/components/Excel/ExcelFile/ExcelFile.scss +45 -41
- package/src/components/Excel/ExcelFile/ExcelFile.tsx +70 -64
- package/src/components/Excel/ExcelFile/ExcelFileComponents/ActiveCell.tsx +29 -1
- package/src/components/Excel/ExcelFile/ExcelFileComponents/Cell.tsx +1 -37
- package/src/components/Excel/ExcelFile/ExcelFileComponents/DataViewer.tsx +1 -40
- package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.scss +3 -3
- package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.tsx +14 -1
- package/src/components/Excel/ExcelFile/ExcelFileComponents/reducer.ts +3 -0
- package/src/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.ts +8 -74
- package/src/components/Excel/ExcelFile/ExcelFileComponents/types.ts +0 -5
- package/src/components/Excel/ExcelFile.stories.tsx +116 -125
- package/src/components/Excel/ExcelToolBar/ExcelToolBar.tsx +10 -11
- package/src/components/Excel/Types.ts +18 -16
- package/src/components/FF_Captcha/Recaptcha.tsx +19 -9
- package/src/components/FF_Captcha/types.ts +12 -4
- package/src/components/Icon/Icon.stories.tsx +56 -8
- package/src/components/Icon/iconList.ts +13 -1
- package/src/components/Input/Input.stories.tsx +12 -0
- package/src/components/Input/Input.tsx +3 -1
- package/src/components/Input/types.ts +4 -0
- package/src/components/InputWithDropdown/types.ts +1 -1
- package/src/components/LabelEditTextField/LabelEditTextField.scss +4 -0
- package/src/components/LabelEditTextField/LabelEditTextField.stories.tsx +2 -1
- package/src/components/LabelEditTextField/LabelEditTextField.tsx +14 -10
- package/src/components/LabelEditTextField/types.ts +2 -0
- package/src/components/LazyLoad/LazyLoad.stories.tsx +1 -0
- package/src/components/LazyLoad/LazyLoading.tsx +10 -1
- package/src/components/MachineInputField/MachineInputField.scss +5 -1
- package/src/components/MachineInputField/MachineInputField.tsx +1 -0
- package/src/components/MobileSkin/MobileSkin.scss +67 -0
- package/src/components/MobileSkin/MobileSkin.stories.tsx +93 -0
- package/src/components/MobileSkin/MobileSkin.tsx +89 -0
- package/src/components/MobileSkin/MobileSkinInterface.ts +13 -0
- package/src/components/MobileSkin/index.ts +1 -0
- package/src/components/MobileSkin/types.ts +32 -0
- package/src/components/Modal/Modal.stories.tsx +7 -0
- package/src/components/Modal/Modal.tsx +17 -20
- package/src/components/Search/Search.scss +8 -0
- package/src/components/Search/Search.tsx +17 -6
- package/src/components/Search/types.ts +1 -0
- package/src/components/Select/Select.stories.tsx +85 -0
- package/src/components/Select/Select.tsx +10 -2
- package/src/components/Select/components/Dropdown.tsx +23 -15
- package/src/components/Select/components/types.ts +3 -2
- package/src/components/Select/types.ts +12 -2
- package/src/components/SequentialConnectingBranch/SequentialConnectingBranch.tsx +2 -0
- package/src/components/SequentialConnectingBranch/components/Branches/Branches.tsx +65 -57
- package/src/components/SequentialConnectingBranch/components/Branches/types.ts +1 -0
- package/src/components/SequentialConnectingBranch/components/ConnectingBranches/ConnectingBranches.tsx +2 -0
- package/src/components/SequentialConnectingBranch/components/ConnectingBranches/types.ts +1 -0
- package/src/components/SequentialConnectingBranch/types.ts +5 -1
- package/src/components/TableTree/Components/TableCell.tsx +3 -3
- package/src/components/TableTree/TableTree.scss +0 -7
- package/src/components/TableTree/TableTree.tsx +3 -22
- package/src/components/TableTree/types.ts +4 -4
- package/src/components/Tabs/Tabs.scss +19 -0
- package/src/components/Tabs/Tabs.tsx +9 -0
- package/src/components/Tabs/types.ts +1 -0
- package/src/index.ts +27 -0
- package/src/utils/formData/ConvertFormDataToObject.stories.tsx +27 -0
- package/src/utils/formData/ConvertFormDataToObject.ts +14 -0
- package/src/utils/getExtension/getExtension.stories.tsx +1 -0
- package/src/utils/keyBoardActionUtil/UseKeyboardAction.stories.tsx +53 -0
- package/src/utils/keyBoardActionUtil/UseKeyboardActions.tsx +20 -0
- package/src/utils/keyBoardActionUtil/types.ts +4 -0
- package/src/validations/regex.stories.tsx +63 -0
- package/src/validations/regex.ts +34 -0
- package/src/assets/images/photo.png +0 -0
|
@@ -31,7 +31,7 @@ interface WorkData {
|
|
|
31
31
|
value: string;
|
|
32
32
|
|
|
33
33
|
/** Styling options for the cell */
|
|
34
|
-
|
|
34
|
+
styles: BackendStyle; //TODO remove 's' for Style
|
|
35
35
|
type?: boolean;
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -43,7 +43,7 @@ type BackendStyle = {
|
|
|
43
43
|
color: string;
|
|
44
44
|
backgroundColor: string;
|
|
45
45
|
borderColor: string;
|
|
46
|
-
underline:string;
|
|
46
|
+
underline: string;
|
|
47
47
|
border: {
|
|
48
48
|
top: string;
|
|
49
49
|
bottom: string;
|
|
@@ -79,20 +79,6 @@ interface ContextOption {
|
|
|
79
79
|
value: ContextAction[];
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
interface ContextMenuState {
|
|
83
|
-
/** Whether the context menu is visible */
|
|
84
|
-
visible: boolean;
|
|
85
|
-
|
|
86
|
-
/** X-coordinate position for the context menu */
|
|
87
|
-
x: number;
|
|
88
|
-
|
|
89
|
-
/** Y-coordinate position for the context menu */
|
|
90
|
-
y: number;
|
|
91
|
-
|
|
92
|
-
/** Type of the context menu ('cell', 'row', 'column', or 'sheet_options') */
|
|
93
|
-
type: 'cell' | 'row' | 'column' | 'sheet_options' | null;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
82
|
interface SelectedCell {
|
|
97
83
|
/** The row index of the selected cell */
|
|
98
84
|
row: number;
|
|
@@ -112,6 +98,22 @@ interface ColorContainer {
|
|
|
112
98
|
borderColor: string;
|
|
113
99
|
}
|
|
114
100
|
|
|
101
|
+
interface ContextMenuState {
|
|
102
|
+
open: boolean;
|
|
103
|
+
position: {
|
|
104
|
+
x: number;
|
|
105
|
+
y: number;
|
|
106
|
+
};
|
|
107
|
+
options: optionsType[];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
interface optionsType {
|
|
111
|
+
label: string;
|
|
112
|
+
value: string;
|
|
113
|
+
iconName: string;
|
|
114
|
+
action: () => void;
|
|
115
|
+
}
|
|
116
|
+
|
|
115
117
|
interface SelectedValue {
|
|
116
118
|
/** The value inside the selected cell */
|
|
117
119
|
value: string;
|
|
@@ -1,14 +1,27 @@
|
|
|
1
|
-
import { useState, forwardRef } from 'react';
|
|
1
|
+
import React, { useState, forwardRef, ComponentType, Ref } from 'react';
|
|
2
2
|
import ReCAPTCHA from 'react-google-recaptcha';
|
|
3
3
|
import { RecaptchaProps } from './types';
|
|
4
4
|
import './Recaptcha.scss';
|
|
5
5
|
import classNames from 'classnames';
|
|
6
6
|
import Typography from '../Typography';
|
|
7
|
-
|
|
7
|
+
// Extend the props to include React.RefAttributes
|
|
8
|
+
const FixedReCAPTCHA = ReCAPTCHA as unknown as ComponentType<
|
|
9
|
+
{
|
|
10
|
+
sitekey: string;
|
|
11
|
+
onChange: (token: string | null) => void;
|
|
12
|
+
className?: string;
|
|
13
|
+
theme?: 'light' | 'dark';
|
|
14
|
+
size?: 'compact' | 'normal' | 'invisible';
|
|
15
|
+
tabindex?: number;
|
|
16
|
+
badge?: 'bottomright' | 'bottomleft' | 'inline';
|
|
17
|
+
} & React.RefAttributes<ReCAPTCHA>
|
|
18
|
+
>;
|
|
8
19
|
const Recaptcha = forwardRef<ReCAPTCHA, RecaptchaProps>(
|
|
9
|
-
(
|
|
20
|
+
(
|
|
21
|
+
{ onVerify, className = '', error: externalError, sitekey, ...props },
|
|
22
|
+
ref: Ref<ReCAPTCHA>
|
|
23
|
+
) => {
|
|
10
24
|
const [internalError, setInternalError] = useState<string | null>(null);
|
|
11
|
-
|
|
12
25
|
const handleChange = (token: string | null) => {
|
|
13
26
|
if (token) {
|
|
14
27
|
setInternalError(null);
|
|
@@ -17,12 +30,10 @@ const Recaptcha = forwardRef<ReCAPTCHA, RecaptchaProps>(
|
|
|
17
30
|
setInternalError('Please complete the CAPTCHA');
|
|
18
31
|
}
|
|
19
32
|
};
|
|
20
|
-
|
|
21
33
|
const error = externalError || internalError;
|
|
22
|
-
|
|
23
34
|
return (
|
|
24
35
|
<div className={classNames('ff-recaptcha-wrapper', className)}>
|
|
25
|
-
<
|
|
36
|
+
<FixedReCAPTCHA
|
|
26
37
|
ref={ref}
|
|
27
38
|
sitekey={sitekey}
|
|
28
39
|
onChange={handleChange}
|
|
@@ -37,5 +48,4 @@ const Recaptcha = forwardRef<ReCAPTCHA, RecaptchaProps>(
|
|
|
37
48
|
);
|
|
38
49
|
}
|
|
39
50
|
);
|
|
40
|
-
|
|
41
|
-
export default Recaptcha;
|
|
51
|
+
export default Recaptcha;
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { ComponentProps } from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
// Fix ReCAPTCHA type by casting to a compatible type
|
|
3
|
+
type FixedReCAPTCHA = React.ComponentType<{
|
|
4
|
+
sitekey: string;
|
|
5
|
+
onChange: (token: string | null) => void;
|
|
6
|
+
className?: string;
|
|
7
|
+
theme?: 'light' | 'dark';
|
|
8
|
+
size?: 'compact' | 'normal' | 'invisible';
|
|
9
|
+
tabindex?: number;
|
|
10
|
+
badge?: 'bottomright' | 'bottomleft' | 'inline';
|
|
11
|
+
}>;
|
|
12
|
+
export interface RecaptchaProps
|
|
13
|
+
extends Omit<ComponentProps<FixedReCAPTCHA>, 'onChange'> {
|
|
5
14
|
/**
|
|
6
15
|
* Callback function that receives the verification token
|
|
7
16
|
*/
|
|
@@ -19,4 +28,3 @@ export interface RecaptchaProps extends Omit<ComponentProps<typeof ReCAPTCHA>, '
|
|
|
19
28
|
*/
|
|
20
29
|
sitekey: string;
|
|
21
30
|
}
|
|
22
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import Icon from './Icon';
|
|
3
3
|
import Components from './iconList';
|
|
4
|
+
import React, { useState } from 'react';
|
|
4
5
|
|
|
5
6
|
const meta: Meta<typeof Icon> = {
|
|
6
7
|
title: 'Components/Icon',
|
|
@@ -25,16 +26,63 @@ export const Icons: Story = {
|
|
|
25
26
|
|
|
26
27
|
export const AllIcons: Story = {
|
|
27
28
|
render: () => {
|
|
29
|
+
const [searchTerm, setSearchTerm] = useState('');
|
|
30
|
+
|
|
31
|
+
const filteredIcons = Object.keys(Components).filter((iconName) =>
|
|
32
|
+
iconName.toLowerCase().includes(searchTerm.toLowerCase())
|
|
33
|
+
);
|
|
34
|
+
|
|
28
35
|
return (
|
|
29
|
-
<div
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
36
|
+
<div>
|
|
37
|
+
<input
|
|
38
|
+
type="text"
|
|
39
|
+
placeholder="Search icons..."
|
|
40
|
+
value={searchTerm}
|
|
41
|
+
onChange={(e) => setSearchTerm(e.target.value)}
|
|
42
|
+
style={{
|
|
43
|
+
marginBottom: '16px',
|
|
44
|
+
padding: '8px',
|
|
45
|
+
width: '100%',
|
|
46
|
+
boxSizing: 'border-box',
|
|
47
|
+
}}
|
|
48
|
+
/>
|
|
49
|
+
<div
|
|
50
|
+
className="group-icons"
|
|
51
|
+
style={{
|
|
52
|
+
display: 'flex',
|
|
53
|
+
gap: 8,
|
|
54
|
+
flexWrap: 'wrap',
|
|
55
|
+
alignItems: 'center',
|
|
56
|
+
justifyContent: 'center',
|
|
57
|
+
}}
|
|
58
|
+
>
|
|
59
|
+
{filteredIcons.map((iconName) => (
|
|
60
|
+
<div
|
|
61
|
+
key={iconName}
|
|
62
|
+
style={{
|
|
63
|
+
border: '1px solid var(--brand-color)',
|
|
64
|
+
width: '30%',
|
|
65
|
+
display: 'flex',
|
|
66
|
+
alignItems: 'center',
|
|
67
|
+
justifyContent: 'center',
|
|
68
|
+
flexDirection: 'column',
|
|
69
|
+
}}
|
|
70
|
+
>
|
|
33
71
|
<Icon name={iconName} height={40} width={40} />
|
|
34
|
-
<
|
|
72
|
+
<p
|
|
73
|
+
style={{
|
|
74
|
+
whiteSpace: 'nowrap',
|
|
75
|
+
textOverflow: 'ellipsis',
|
|
76
|
+
overflow: 'hidden',
|
|
77
|
+
width: '160px',
|
|
78
|
+
}}
|
|
79
|
+
title={iconName}
|
|
80
|
+
>
|
|
81
|
+
{iconName}
|
|
82
|
+
</p>
|
|
35
83
|
</div>
|
|
36
|
-
)
|
|
37
|
-
|
|
84
|
+
))}
|
|
85
|
+
</div>
|
|
38
86
|
</div>
|
|
39
87
|
);
|
|
40
88
|
},
|
|
@@ -62,4 +110,4 @@ export const DarkVariantIcons: Story = {
|
|
|
62
110
|
},
|
|
63
111
|
};
|
|
64
112
|
|
|
65
|
-
export default meta;
|
|
113
|
+
export default meta;
|
|
@@ -127,6 +127,7 @@ import LabelPlusIcon from '../../assets/icons/label_plus.svg?react';
|
|
|
127
127
|
import Drag from '../../assets/icons/drag_icon.svg?react';
|
|
128
128
|
import BackwardIcon from '../../assets/icons/backward_icon.svg?react';
|
|
129
129
|
import ForwardIcon from '../../assets/icons/forward_icon.svg?react';
|
|
130
|
+
import ClearCache from '../../assets/icons/clear_cache.svg?react';
|
|
130
131
|
import Reload from '../../assets/icons/reload.svg?react';
|
|
131
132
|
import WindowMaximize from '../../assets/icons/window_maximize.svg?react';
|
|
132
133
|
import WindowRestore from '../../assets/icons/window_restore.svg?react';
|
|
@@ -253,6 +254,11 @@ import suitesIcon from '../../assets/icons/suites_icon.svg?react';
|
|
|
253
254
|
import executionsIcon from '../../assets/icons/executions_icon.svg?react';
|
|
254
255
|
import ImportIcon from '../../assets/icons/import_icon.svg?react';
|
|
255
256
|
import Settings from '../../assets/icons/settings.svg?react';
|
|
257
|
+
import UnfollowIcon from '../../assets/icons/unfollow_icon.svg?react';
|
|
258
|
+
import ExternalUser from '../../assets/icons/external_user.svg?react';
|
|
259
|
+
import SingleUser from '../../assets/icons/single_user.svg?react';
|
|
260
|
+
import GroupUser from '../../assets/icons/group_user.svg?react';
|
|
261
|
+
import TestFreshersLogo from '../../assets/icons/test_freshers_logo.svg?react';
|
|
256
262
|
|
|
257
263
|
Components['success'] = ToastSuccessIcon;
|
|
258
264
|
Components['alert'] = Alert;
|
|
@@ -379,6 +385,7 @@ Components['browser_stack_icon'] = BrowserStack;
|
|
|
379
385
|
Components['run_icon'] = Run;
|
|
380
386
|
Components['backward_icon'] = BackwardIcon;
|
|
381
387
|
Components['forward_icon'] = ForwardIcon;
|
|
388
|
+
Components['clear_cache'] = ClearCache;
|
|
382
389
|
Components['reload'] = Reload;
|
|
383
390
|
Components['window_maximize'] = WindowMaximize;
|
|
384
391
|
Components['window_restore'] = WindowRestore;
|
|
@@ -500,6 +507,11 @@ Components['machine_disable_icon'] = machineDisableIcon;
|
|
|
500
507
|
Components['executions_icon'] = executionsIcon;
|
|
501
508
|
Components['suites_icon'] = suitesIcon;
|
|
502
509
|
Components['import_icon'] = ImportIcon;
|
|
503
|
-
Components['settings'] = Settings
|
|
510
|
+
Components['settings'] = Settings;
|
|
511
|
+
Components['test_freshers_logo']=TestFreshersLogo;
|
|
512
|
+
Components['unfollow_icon']=UnfollowIcon
|
|
513
|
+
Components['external_user'] = ExternalUser;
|
|
514
|
+
Components['single_user'] = SingleUser;
|
|
515
|
+
Components['group_user'] = GroupUser;
|
|
504
516
|
|
|
505
517
|
export default Components;
|
|
@@ -51,6 +51,18 @@ export const DisabledWithValue: Story = {
|
|
|
51
51
|
},
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
+
export const AutoFocusInput: Story = {
|
|
55
|
+
args: {
|
|
56
|
+
...defaultArgs,
|
|
57
|
+
label: 'Name',
|
|
58
|
+
variant: 'primary',
|
|
59
|
+
type: 'text',
|
|
60
|
+
value: '',
|
|
61
|
+
required: true,
|
|
62
|
+
autoFocus: true,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
|
|
54
66
|
export const WithoutLabel: Story = {
|
|
55
67
|
render: () => {
|
|
56
68
|
const [value, setValue] = useState('');
|
|
@@ -23,6 +23,7 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
|
|
|
23
23
|
onBlur,
|
|
24
24
|
onFocus,
|
|
25
25
|
autoComplete = 'off',
|
|
26
|
+
autoFocus = false,
|
|
26
27
|
minValue = -Infinity,
|
|
27
28
|
maxValue = Infinity,
|
|
28
29
|
transparentBackground = false,
|
|
@@ -48,13 +49,13 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
|
|
|
48
49
|
>
|
|
49
50
|
{isLabelRequired && (
|
|
50
51
|
<label
|
|
51
|
-
htmlFor={name}
|
|
52
52
|
className={classNames(
|
|
53
53
|
`ff-input-label-container ff-input-label-container--${size}`,
|
|
54
54
|
{
|
|
55
55
|
'ff-input-label-container--danger': !!error,
|
|
56
56
|
}
|
|
57
57
|
)}
|
|
58
|
+
htmlFor={name}
|
|
58
59
|
>
|
|
59
60
|
{required && <span className="required-asterisk">*</span>}
|
|
60
61
|
<span
|
|
@@ -97,6 +98,7 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
|
|
|
97
98
|
onFocus={onFocus}
|
|
98
99
|
onBlur={onBlur}
|
|
99
100
|
autoComplete={autoComplete}
|
|
101
|
+
autoFocus={autoFocus}
|
|
100
102
|
min={minValue}
|
|
101
103
|
max={maxValue}
|
|
102
104
|
{...props}
|
|
@@ -65,6 +65,10 @@ export interface InputProps {
|
|
|
65
65
|
* if on, suggestion popup will be displayed
|
|
66
66
|
*/
|
|
67
67
|
autoComplete?: 'on' | 'off';
|
|
68
|
+
/**
|
|
69
|
+
* if true, input field is in autofocus state
|
|
70
|
+
*/
|
|
71
|
+
autoFocus?: boolean;
|
|
68
72
|
/**
|
|
69
73
|
* minimum and maximum values for the number type input field and their functions
|
|
70
74
|
*/
|
|
@@ -187,11 +187,12 @@ export const openLabelEditTextField: Story = {
|
|
|
187
187
|
confirmAction={handleConfirmAction}
|
|
188
188
|
onInputChange={handleInputChange}
|
|
189
189
|
isOpen={true}
|
|
190
|
+
className="custom-edit-text-field"
|
|
191
|
+
showText={false}
|
|
190
192
|
customError="text is too long"
|
|
191
193
|
customErrorCondition={demoText?.length > 10}
|
|
192
194
|
/>
|
|
193
195
|
);
|
|
194
196
|
},
|
|
195
197
|
};
|
|
196
|
-
|
|
197
198
|
export default meta;
|
|
@@ -30,6 +30,7 @@ const LabelEditTextField: FC<LabelEditTextFieldTypes> = ({
|
|
|
30
30
|
label,
|
|
31
31
|
placeholder,
|
|
32
32
|
text,
|
|
33
|
+
showText = true,
|
|
33
34
|
highlightText,
|
|
34
35
|
customError,
|
|
35
36
|
confirmIcon,
|
|
@@ -39,6 +40,7 @@ const LabelEditTextField: FC<LabelEditTextFieldTypes> = ({
|
|
|
39
40
|
onInputChange,
|
|
40
41
|
dropdownData = [],
|
|
41
42
|
// width,
|
|
43
|
+
className,
|
|
42
44
|
height,
|
|
43
45
|
isOpen = false,
|
|
44
46
|
confirmAction,
|
|
@@ -182,7 +184,7 @@ const LabelEditTextField: FC<LabelEditTextFieldTypes> = ({
|
|
|
182
184
|
placeholder={placeholder ? placeholder : ''}
|
|
183
185
|
value={inputValue}
|
|
184
186
|
onChange={handleTextFieldChange}
|
|
185
|
-
className={
|
|
187
|
+
className={`${className}
|
|
186
188
|
|
|
187
189
|
${isTextFieldModified ? 'modified' : ''}`}
|
|
188
190
|
/>
|
|
@@ -203,7 +205,7 @@ const LabelEditTextField: FC<LabelEditTextFieldTypes> = ({
|
|
|
203
205
|
placeholder={placeholder ? placeholder : ''}
|
|
204
206
|
value={inputValue}
|
|
205
207
|
onChange={handleTextFieldChange}
|
|
206
|
-
className={
|
|
208
|
+
className={`${className}
|
|
207
209
|
|
|
208
210
|
${isTextFieldModified ? 'modified' : ''}`}
|
|
209
211
|
/>
|
|
@@ -241,14 +243,16 @@ const LabelEditTextField: FC<LabelEditTextFieldTypes> = ({
|
|
|
241
243
|
title={tooltip?.tooltipTitle ? tooltip?.tooltipTitle : ''}
|
|
242
244
|
placement={'bottom'}
|
|
243
245
|
>
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
246
|
+
{showText && (
|
|
247
|
+
<span
|
|
248
|
+
className="display-text"
|
|
249
|
+
onDoubleClick={handleDoubleClick}
|
|
250
|
+
role="button"
|
|
251
|
+
onClick={handleClick}
|
|
252
|
+
>
|
|
253
|
+
<HighlightText text={inputValue} highlight={highlightText} />
|
|
254
|
+
</span>
|
|
255
|
+
)}
|
|
252
256
|
</Tooltip>
|
|
253
257
|
)}
|
|
254
258
|
{showError && isEditing && (
|
|
@@ -17,6 +17,7 @@ export interface LabelEditTextFieldTypes {
|
|
|
17
17
|
label?: string;
|
|
18
18
|
/** Initial text displayed in the input field. */
|
|
19
19
|
text?: string;
|
|
20
|
+
showText?: boolean;
|
|
20
21
|
/** Text to be highlighted within the displayed text, if provided. */
|
|
21
22
|
highlightText?: string;
|
|
22
23
|
/** Custom error message to be displayed, if applicable. */
|
|
@@ -42,6 +43,7 @@ export interface LabelEditTextFieldTypes {
|
|
|
42
43
|
onClick?: () => void;
|
|
43
44
|
/** Function called when every input character got changed */
|
|
44
45
|
onInputChange?: (newInputValue: string) => void;
|
|
46
|
+
className?: string;
|
|
45
47
|
tooltip?: {
|
|
46
48
|
tooltipTitle?: string;
|
|
47
49
|
tooltipPlacement?: string;
|
|
@@ -1,5 +1,14 @@
|
|
|
1
|
+
import React, { ComponentType } from 'react';
|
|
1
2
|
import LazyLoad from './LazyLoad';
|
|
2
|
-
const { FixedSizeList } = LazyLoad;
|
|
3
|
+
const { FixedSizeList: _FixedSizeList } = LazyLoad;
|
|
4
|
+
|
|
5
|
+
const FixedSizeList = _FixedSizeList as unknown as ComponentType<{
|
|
6
|
+
height: number;
|
|
7
|
+
itemCount: number;
|
|
8
|
+
itemSize: number;
|
|
9
|
+
width: number;
|
|
10
|
+
children: (props: { index: number; style: React.CSSProperties }) => JSX.Element;
|
|
11
|
+
}>;
|
|
3
12
|
const Row = ({
|
|
4
13
|
index,
|
|
5
14
|
style,
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
align-items: center;
|
|
16
16
|
justify-content: space-between;
|
|
17
17
|
|
|
18
|
+
&:hover {
|
|
19
|
+
border-color: var(--ff-connecting-branch-color);
|
|
20
|
+
}
|
|
21
|
+
|
|
18
22
|
.ff-machine-icon-text-wrapper,
|
|
19
23
|
.ff-machine-icon-text-wrapper-reverse {
|
|
20
24
|
display: flex;
|
|
@@ -47,7 +51,7 @@
|
|
|
47
51
|
position: absolute;
|
|
48
52
|
top: -6px;
|
|
49
53
|
left: 8px;
|
|
50
|
-
background-color: var(--ff-machine-input-field-
|
|
54
|
+
background-color: var(--ff-machine-input-field-label-color);
|
|
51
55
|
border-radius: 4px;
|
|
52
56
|
padding: 1px 2px;
|
|
53
57
|
height: 12px;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
@use '../../assets/styles/fonts';
|
|
2
|
+
@use '../../assets/styles/mixins' as *;
|
|
3
|
+
|
|
4
|
+
.ff-mobileskin-wrapper {
|
|
5
|
+
@include center-content;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
|
|
8
|
+
&.portrait {
|
|
9
|
+
gap: 30px;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
&.landscape {
|
|
13
|
+
gap: 38px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.ff-mobileskin-container {
|
|
17
|
+
@extend .ff-mobileskin-wrapper;
|
|
18
|
+
.ff-mobile-container {
|
|
19
|
+
@include center-content;
|
|
20
|
+
border: 8px solid var(--text-color);
|
|
21
|
+
border-radius: 30px;
|
|
22
|
+
position: relative;
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
|
|
25
|
+
&::-webkit-scrollbar {
|
|
26
|
+
width: 0;
|
|
27
|
+
height: 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&::-webkit-scrollbar-thumb {
|
|
31
|
+
background-color: transparent;
|
|
32
|
+
}
|
|
33
|
+
.ff-mobile-image-container {
|
|
34
|
+
@include center-content;
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.ff-notch {
|
|
41
|
+
background-color: var(--text-color);
|
|
42
|
+
border-radius: 24px;
|
|
43
|
+
position: absolute;
|
|
44
|
+
&.android-notch {
|
|
45
|
+
border-radius: 50%;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
.ff-nav-bar {
|
|
49
|
+
height: 32px;
|
|
50
|
+
padding: 8px;
|
|
51
|
+
display: flex;
|
|
52
|
+
justify-content: space-evenly;
|
|
53
|
+
align-items: center;
|
|
54
|
+
border: 1px solid var(--brand-color);
|
|
55
|
+
border-radius: 24px;
|
|
56
|
+
}
|
|
57
|
+
.ff-nav-bar-icon {
|
|
58
|
+
height: 16px;
|
|
59
|
+
padding: 8px;
|
|
60
|
+
border-right: 1px solid var(--brand-color);
|
|
61
|
+
@include center-content;
|
|
62
|
+
|
|
63
|
+
&.last-icon {
|
|
64
|
+
border-right: none;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import MobileSkin from './MobileSkin';
|
|
3
|
+
|
|
4
|
+
const meta: Meta<typeof MobileSkin> = {
|
|
5
|
+
title: 'Components/MobileSkin',
|
|
6
|
+
component: MobileSkin,
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: 'padded',
|
|
9
|
+
},
|
|
10
|
+
tags: ['autodocs'],
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const navBarIcons = [
|
|
14
|
+
{
|
|
15
|
+
title: 'Forward',
|
|
16
|
+
name: 'right_arrow_icon',
|
|
17
|
+
onClick: () => {},
|
|
18
|
+
height: 16,
|
|
19
|
+
width: 16,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
title: 'Backward',
|
|
23
|
+
name: 'left_arrow_icon',
|
|
24
|
+
onClick: () => {},
|
|
25
|
+
height: 16,
|
|
26
|
+
width: 16,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
title: 'Refresh',
|
|
30
|
+
name: 'refresh_icon',
|
|
31
|
+
onClick: () => {},
|
|
32
|
+
height: 16,
|
|
33
|
+
width: 16,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
title: 'Capture',
|
|
37
|
+
name: 'minimize_script',
|
|
38
|
+
onClick: () => {},
|
|
39
|
+
height: 16,
|
|
40
|
+
width: 16,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
title: 'Rotate',
|
|
44
|
+
name: 'replace_icon',
|
|
45
|
+
onClick: () => {},
|
|
46
|
+
height: 16,
|
|
47
|
+
width: 16,
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
const randomImage: string =
|
|
51
|
+
'https://plus.unsplash.com/premium_photo-1664303228186-a61e7dc91597?q=80&w=1384&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D';
|
|
52
|
+
|
|
53
|
+
type Story = StoryObj<typeof MobileSkin>;
|
|
54
|
+
|
|
55
|
+
const defaultArgs = {
|
|
56
|
+
navBarIcons: navBarIcons,
|
|
57
|
+
mobileWidth: 220,
|
|
58
|
+
mobileHeight: 448,
|
|
59
|
+
children: randomImage,
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const iosPortraitView: Story = {
|
|
63
|
+
args: {
|
|
64
|
+
...defaultArgs,
|
|
65
|
+
orientation: 'portrait',
|
|
66
|
+
type: 'ios',
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export const iosLandscapeView: Story = {
|
|
71
|
+
args: {
|
|
72
|
+
...defaultArgs,
|
|
73
|
+
orientation: 'landscape',
|
|
74
|
+
type: 'ios',
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export const androidPortraitView: Story = {
|
|
79
|
+
args: {
|
|
80
|
+
...defaultArgs,
|
|
81
|
+
orientation: 'portrait',
|
|
82
|
+
type: 'android',
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const androidLandscapeView: Story = {
|
|
87
|
+
args: {
|
|
88
|
+
...defaultArgs,
|
|
89
|
+
orientation: 'landscape',
|
|
90
|
+
type: 'android',
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
export default meta;
|