pixel-react 1.2.1 → 1.2.3
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/AppHeader/types.d.ts +11 -2
- package/lib/components/Avatar/Avatar.d.ts +5 -0
- package/lib/components/Avatar/Avatar.stories.d.ts +10 -0
- package/lib/components/Avatar/index.d.ts +1 -0
- package/lib/components/Avatar/types.d.ts +26 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/ActiveCell.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/ColumnIndicator.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/Copied.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/CornerIndicator.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/DataEditor.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/DataViewer.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/FloatingRect.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/HeaderRow.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/Row.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/RowIndicator.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/Selected.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/Spreadsheet.d.ts +6 -7
- package/lib/components/ExcelFile/ExcelFile/Excel/Table.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/actions.d.ts +49 -5
- package/lib/components/ExcelFile/ExcelFile/Excel/context.d.ts +3 -3
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/engine.d.ts +5 -5
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/formula.d.ts +6 -6
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/index.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-graph.d.ts +2 -2
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-hash.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-set.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/index.d.ts +11 -11
- package/lib/components/ExcelFile/ExcelFile/Excel/matrix.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/point-range.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/reducer.d.ts +5 -5
- package/lib/components/ExcelFile/ExcelFile/Excel/selection.d.ts +3 -3
- package/lib/components/ExcelFile/ExcelFile/Excel/types.d.ts +11 -48
- package/lib/components/ExcelFile/ExcelFile/Excel/use-dispatch.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/use-selector.d.ts +1 -1
- package/lib/components/ExcelFile/ExcelFile/Excel/util.d.ts +11 -12
- package/lib/components/ExcelFile/ExcelFile/ExcelFile.d.ts +16 -0
- package/lib/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.d.ts +0 -3
- package/lib/components/ExcelFile/ExcelToolBar/ExcelToolBar.d.ts +12 -0
- package/lib/components/ExcelFile/Types.d.ts +2 -49
- package/lib/components/Form/Form.d.ts +1 -15
- package/lib/components/Form/Form.stories.d.ts +6 -5
- package/lib/components/Form/Forms.d.ts +8 -0
- package/lib/components/Form/index.d.ts +1 -1
- package/lib/components/Icon/types.d.ts +1 -1
- package/lib/components/MenuOption/types.d.ts +7 -7
- package/lib/components/MiniModal/MiniModal.stories.d.ts +1 -0
- package/lib/components/MiniModal/types.d.ts +6 -6
- package/lib/components/ModulesChip/ModuleChip.d.ts +4 -0
- package/lib/components/ModulesChip/ModuleChip.stories.d.ts +6 -0
- package/lib/components/ModulesChip/index.d.ts +1 -0
- package/lib/components/ModulesChip/types.d.ts +14 -0
- package/lib/components/MultiSelect/MultiSelectTypes.d.ts +1 -0
- package/lib/components/Toastify/Toastify.d.ts +8 -0
- package/lib/components/Toastify/Toastify.stories.d.ts +6 -0
- package/lib/components/Toastify/index.d.ts +1 -0
- package/lib/components/Toastify/types.d.ts +7 -0
- package/lib/components/Tooltip/types.d.ts +6 -0
- package/lib/components/Typography/types.d.ts +1 -0
- package/lib/index.d.ts +84 -31
- package/lib/index.esm.js +26720 -881
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +26718 -875
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/StyleGuide/ColorPalette/colorPaletteList.ts +10 -0
- package/src/assets/Themes/BaseTheme.scss +2 -0
- package/src/assets/Themes/DarkTheme.scss +2 -0
- package/src/assets/icons/add_testcase.svg +3 -0
- package/src/assets/icons/add_variable_icon.svg +3 -4
- package/src/assets/icons/attachment_icon.svg +3 -0
- package/src/assets/icons/authorization_icon.svg +3 -0
- package/src/assets/icons/automation_testcase.svg +4 -0
- package/src/assets/icons/back_icon.svg +3 -0
- package/src/assets/icons/client_profile.svg +4 -0
- package/src/assets/icons/fireflink_finder_logo.svg +7 -0
- package/src/assets/icons/fireflink_platform.svg +4 -0
- package/src/assets/icons/license_expired.svg +20 -0
- package/src/assets/icons/manual_testcase.svg +3 -0
- package/src/assets/icons/variable_icon.svg +4 -0
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +2 -2
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.tsx +1 -1
- package/src/components/AppHeader/AppHeader.stories.tsx +24 -3
- package/src/components/AppHeader/AppHeader.tsx +29 -11
- package/src/components/AppHeader/types.ts +11 -3
- package/src/components/Avatar/Avatar.scss +24 -0
- package/src/components/Avatar/Avatar.stories.tsx +56 -0
- package/src/components/Avatar/Avatar.tsx +25 -0
- package/src/components/Avatar/index.ts +1 -0
- package/src/components/Avatar/types.ts +27 -0
- package/src/components/Button/types.ts +1 -1
- package/src/components/ExcelFile/ColorBarselector/ColorBarSelector.scss +0 -2
- package/src/components/ExcelFile/ContextMenu/ContextMenu.scss +1 -4
- package/src/components/ExcelFile/ContextMenu/ContextMenu.tsx +0 -1
- package/src/components/ExcelFile/ExcelFile/Excel/ActiveCell.tsx +13 -13
- package/src/components/ExcelFile/ExcelFile/Excel/Cell.tsx +13 -12
- package/src/components/ExcelFile/ExcelFile/Excel/ColumnIndicator.tsx +40 -32
- package/src/components/ExcelFile/ExcelFile/Excel/Copied.tsx +4 -4
- package/src/components/ExcelFile/ExcelFile/Excel/CornerIndicator.tsx +10 -10
- package/src/components/ExcelFile/ExcelFile/Excel/DataEditor.tsx +5 -5
- package/src/components/ExcelFile/ExcelFile/Excel/DataViewer.tsx +10 -10
- package/src/components/ExcelFile/ExcelFile/Excel/FloatingRect.tsx +6 -6
- package/src/components/ExcelFile/ExcelFile/Excel/HeaderRow.tsx +1 -1
- package/src/components/ExcelFile/ExcelFile/Excel/Row.tsx +1 -1
- package/src/components/ExcelFile/ExcelFile/Excel/RowIndicator.tsx +34 -27
- package/src/components/ExcelFile/ExcelFile/Excel/Selected.tsx +5 -5
- package/src/components/ExcelFile/ExcelFile/Excel/{Spreadsheet.css → Spreadsheet.scss} +21 -37
- package/src/components/ExcelFile/ExcelFile/Excel/Spreadsheet.tsx +87 -78
- package/src/components/ExcelFile/ExcelFile/Excel/Table.tsx +2 -2
- package/src/components/ExcelFile/ExcelFile/Excel/actions.ts +121 -31
- package/src/components/ExcelFile/ExcelFile/Excel/areModelsEqual.ts +1 -1
- package/src/components/ExcelFile/ExcelFile/Excel/context.ts +4 -4
- package/src/components/ExcelFile/ExcelFile/Excel/engine/engine.ts +7 -7
- package/src/components/ExcelFile/ExcelFile/Excel/engine/formula.ts +11 -11
- package/src/components/ExcelFile/ExcelFile/Excel/engine/index.ts +2 -2
- package/src/components/ExcelFile/ExcelFile/Excel/engine/point-graph.ts +3 -3
- package/src/components/ExcelFile/ExcelFile/Excel/engine/point-hash.ts +2 -2
- package/src/components/ExcelFile/ExcelFile/Excel/engine/point-set.ts +2 -2
- package/src/components/ExcelFile/ExcelFile/Excel/index.ts +12 -11
- package/src/components/ExcelFile/ExcelFile/Excel/matrix.ts +18 -24
- package/src/components/ExcelFile/ExcelFile/Excel/point-range.ts +1 -1
- package/src/components/ExcelFile/ExcelFile/Excel/reducer.ts +311 -41
- package/src/components/ExcelFile/ExcelFile/Excel/selection.ts +5 -5
- package/src/components/ExcelFile/ExcelFile/Excel/types.ts +14 -66
- package/src/components/ExcelFile/ExcelFile/Excel/typings/fast-formula-parser.d.ts +8 -8
- package/src/components/ExcelFile/ExcelFile/Excel/use-dispatch.ts +2 -2
- package/src/components/ExcelFile/ExcelFile/Excel/use-selector.ts +3 -3
- package/src/components/ExcelFile/ExcelFile/Excel/util.ts +21 -22
- package/src/components/ExcelFile/ExcelFile/ExcelFile.scss +0 -3
- package/src/components/ExcelFile/ExcelFile/ExcelFile.tsx +45 -403
- package/src/components/ExcelFile/ExcelFile.stories.tsx +10 -29
- package/src/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.tsx +1 -12
- package/src/components/ExcelFile/ExcelToolBar/ExcelToolBar.scss +0 -3
- package/src/components/ExcelFile/ExcelToolBar/ExcelToolBar.tsx +147 -127
- package/src/components/ExcelFile/Types.ts +3 -70
- package/src/components/ExcelFile/index.ts +1 -1
- package/src/components/Form/Form.d.ts +3 -0
- package/src/components/Form/Form.scss +48 -4
- package/src/components/Form/Form.stories.tsx +244 -137
- package/src/components/Form/Form.ts +2 -0
- package/src/components/Form/Forms.tsx +25 -0
- package/src/components/Form/index.ts +1 -1
- package/src/components/Icon/iconList.ts +23 -0
- package/src/components/Icon/types.ts +1 -1
- package/src/components/IconButton/IconButton.scss +1 -1
- package/src/components/MenuOption/types.ts +7 -6
- package/src/components/MiniModal/MiniModal.scss +5 -0
- package/src/components/MiniModal/MiniModal.stories.tsx +95 -0
- package/src/components/MiniModal/MiniModal.tsx +11 -6
- package/src/components/MiniModal/types.ts +6 -6
- package/src/components/ModulesChip/ModuleChip.scss +20 -0
- package/src/components/ModulesChip/ModuleChip.stories.tsx +41 -0
- package/src/components/ModulesChip/ModuleChip.tsx +31 -0
- package/src/components/ModulesChip/index.ts +1 -0
- package/src/components/ModulesChip/types.ts +14 -0
- package/src/components/MultiSelect/Dropdown.tsx +6 -1
- package/src/components/MultiSelect/MultiSelect.scss +17 -10
- package/src/components/MultiSelect/MultiSelect.stories.tsx +16 -4
- package/src/components/MultiSelect/MultiSelect.tsx +11 -4
- package/src/components/MultiSelect/MultiSelectTypes.ts +4 -3
- package/src/components/Select/Select.scss +4 -0
- package/src/components/Select/Select.tsx +2 -2
- package/src/components/Toastify/Toastify.stories.tsx +52 -0
- package/src/components/Toastify/Toastify.tsx +66 -0
- package/src/components/Toastify/index.ts +1 -0
- package/src/components/Toastify/types.ts +8 -0
- package/src/components/Tooltip/Tooltip.tsx +2 -1
- package/src/components/Tooltip/types.ts +6 -0
- package/src/components/Typography/Typography.scss +12 -4
- package/src/components/Typography/Typography.stories.tsx +2 -0
- package/src/components/Typography/Typography.tsx +2 -0
- package/src/components/Typography/types.ts +1 -0
- package/src/index.ts +9 -1
- package/src/components/ExcelFile/ChangeExcelStyles.tsx +0 -78
- package/src/components/ExcelFile/ImportExcelStyles.tsx +0 -86
- package/src/components/Form/Form.tsx +0 -57
|
@@ -14,8 +14,8 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
|
|
|
14
14
|
anchorRef,
|
|
15
15
|
headerProps,
|
|
16
16
|
childContent,
|
|
17
|
-
cancelButtonProps,
|
|
18
|
-
proceedButtonProps,
|
|
17
|
+
cancelButtonProps = () => {},
|
|
18
|
+
proceedButtonProps = () => {},
|
|
19
19
|
footerContent,
|
|
20
20
|
isWrapped = false,
|
|
21
21
|
isAnimated = false,
|
|
@@ -29,6 +29,7 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
|
|
|
29
29
|
extraTopSpace,
|
|
30
30
|
extraRightSpace,
|
|
31
31
|
extraLeftSpace,
|
|
32
|
+
isIconModel,
|
|
32
33
|
},
|
|
33
34
|
ref
|
|
34
35
|
) => {
|
|
@@ -144,8 +145,8 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
|
|
|
144
145
|
//specifying the modal's escape and enter functionality
|
|
145
146
|
const handleEsc = useEscapeKey('Escape');
|
|
146
147
|
const handleEnter = useEscapeKey('Enter');
|
|
147
|
-
handleEsc(cancelButtonProps
|
|
148
|
-
handleEnter(proceedButtonProps
|
|
148
|
+
handleEsc(cancelButtonProps?.onClick);
|
|
149
|
+
handleEnter(proceedButtonProps?.onClick);
|
|
149
150
|
useClickOutside(modalRef, cancelButtonProps.onClick);
|
|
150
151
|
|
|
151
152
|
//calculate the modal position
|
|
@@ -227,6 +228,8 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
|
|
|
227
228
|
>
|
|
228
229
|
{headerProps ? (
|
|
229
230
|
<Typography as="div">{headerProps}</Typography>
|
|
231
|
+
) : isIconModel ? (
|
|
232
|
+
<></>
|
|
230
233
|
) : (
|
|
231
234
|
<Typography as="header">
|
|
232
235
|
<Typography as="h2">Header text</Typography>
|
|
@@ -236,13 +239,15 @@ const MiniModal = forwardRef<HTMLDivElement, MiniEditModalProps>(
|
|
|
236
239
|
<div className="modal-content">{childContent}</div>
|
|
237
240
|
{footerContent ? (
|
|
238
241
|
<Typography as="footer">{footerContent}</Typography>
|
|
242
|
+
) : isIconModel ? (
|
|
243
|
+
<></>
|
|
239
244
|
) : (
|
|
240
245
|
<footer className="modal-footer">
|
|
241
246
|
<Button
|
|
242
247
|
variant="primary"
|
|
243
248
|
className="btn-cancel"
|
|
244
|
-
onClick={cancelButtonProps
|
|
245
|
-
label={cancelButtonProps
|
|
249
|
+
onClick={cancelButtonProps?.onClick}
|
|
250
|
+
label={cancelButtonProps?.text}
|
|
246
251
|
/>
|
|
247
252
|
<Button
|
|
248
253
|
variant="secondary"
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { ReactNode, RefObject } from 'react';
|
|
2
|
-
interface ButtonProps {
|
|
3
|
-
text: string;
|
|
4
|
-
onClick: () => void;
|
|
5
|
-
}
|
|
6
2
|
interface ModalDimensions {
|
|
7
3
|
width?: number;
|
|
8
4
|
height?: number;
|
|
@@ -23,11 +19,11 @@ export interface MiniEditModalProps {
|
|
|
23
19
|
/**
|
|
24
20
|
* Props for the cancel button inside the modal
|
|
25
21
|
*/
|
|
26
|
-
cancelButtonProps
|
|
22
|
+
cancelButtonProps?: any;
|
|
27
23
|
/**
|
|
28
24
|
* Props for the proceed button inside the modal.
|
|
29
25
|
*/
|
|
30
|
-
proceedButtonProps
|
|
26
|
+
proceedButtonProps?: any;
|
|
31
27
|
/**
|
|
32
28
|
* Optional content for the footer of the modal.
|
|
33
29
|
*/
|
|
@@ -44,6 +40,10 @@ export interface MiniEditModalProps {
|
|
|
44
40
|
* Specifies if the modal should behave as a popover with an arrow.
|
|
45
41
|
*/
|
|
46
42
|
isPopOver?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Specifies if the modal should behave as a popover with an arrow.
|
|
45
|
+
*/
|
|
46
|
+
isIconModel?: boolean;
|
|
47
47
|
/**
|
|
48
48
|
* Sets the position of the modal relative to its anchor.
|
|
49
49
|
* bottom: The modal appears below the anchor.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
@use '../../assets/styles/fonts';
|
|
2
|
+
@use '../../assets/styles/mixins';
|
|
3
|
+
|
|
4
|
+
.ff-expandable-chip-menu {
|
|
5
|
+
width: 75px;
|
|
6
|
+
height: 32px;
|
|
7
|
+
border: 0.5px solid;
|
|
8
|
+
border-radius: 16px;
|
|
9
|
+
color: var(--brand-color);
|
|
10
|
+
cursor: pointer;
|
|
11
|
+
@include mixins.center-content();
|
|
12
|
+
.ff-label-chip {
|
|
13
|
+
&--active {
|
|
14
|
+
color: var(--ff-header-text-color);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
&--active {
|
|
18
|
+
background: var(--brand-color);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import ModuleChip from './ModuleChip';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
|
|
5
|
+
const meta: Meta<typeof ModuleChip> = {
|
|
6
|
+
title: 'Components/ModuleChip',
|
|
7
|
+
component: ModuleChip,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'center',
|
|
10
|
+
},
|
|
11
|
+
argTypes: {
|
|
12
|
+
isActive: Boolean,
|
|
13
|
+
},
|
|
14
|
+
tags: ['autodocs'],
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
type Story = StoryObj<typeof ModuleChip>;
|
|
18
|
+
|
|
19
|
+
const defaultArgs = {
|
|
20
|
+
label: 'Modules',
|
|
21
|
+
isActive: false,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const Controlled: Story = {
|
|
25
|
+
render: () => {
|
|
26
|
+
const [selectedMenu, setSelectedMenu] = useState<boolean>(true);
|
|
27
|
+
const handleChipClick = () => {
|
|
28
|
+
setSelectedMenu(!selectedMenu);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<ModuleChip
|
|
33
|
+
{...defaultArgs}
|
|
34
|
+
isActive={selectedMenu}
|
|
35
|
+
onClick={handleChipClick}
|
|
36
|
+
/>
|
|
37
|
+
);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export default meta;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import './ModuleChip.scss';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { ModuleChipProps } from './types';
|
|
4
|
+
import Typography from '../Typography';
|
|
5
|
+
|
|
6
|
+
const ModuleChip: React.FC<ModuleChipProps> = ({
|
|
7
|
+
label = '',
|
|
8
|
+
isActive = true,
|
|
9
|
+
onClick = () => {},
|
|
10
|
+
}) => {
|
|
11
|
+
return (
|
|
12
|
+
<div
|
|
13
|
+
className={classNames('ff-expandable-chip-menu', {
|
|
14
|
+
'ff-expandable-chip-menu--active': isActive,
|
|
15
|
+
})}
|
|
16
|
+
onClick={onClick}
|
|
17
|
+
>
|
|
18
|
+
<div
|
|
19
|
+
className={classNames(`ff-label-chip `, {
|
|
20
|
+
'ff-label-chip--active': isActive,
|
|
21
|
+
})}
|
|
22
|
+
>
|
|
23
|
+
<Typography fontSize={'14px'} fontWeight="regular" lineHeight="21px">
|
|
24
|
+
{label}
|
|
25
|
+
</Typography>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export default ModuleChip;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './ModuleChip';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ModuleChipProps {
|
|
2
|
+
/**
|
|
3
|
+
* mandatory | label for the ModuleChip component
|
|
4
|
+
*/
|
|
5
|
+
label: string;
|
|
6
|
+
/**
|
|
7
|
+
* mandatory | isActive for the ModuleChip component
|
|
8
|
+
*/
|
|
9
|
+
isActive: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* mandatory | onClick for the ModuleChip component
|
|
12
|
+
*/
|
|
13
|
+
onClick: () => void;
|
|
14
|
+
}
|
|
@@ -5,6 +5,7 @@ import './Dropdown.scss';
|
|
|
5
5
|
import { ThemeContext } from '../ThemeProvider/ThemeProvider';
|
|
6
6
|
import classNames from 'classnames';
|
|
7
7
|
import Button from '../Button';
|
|
8
|
+
import Typography from '../Typography';
|
|
8
9
|
|
|
9
10
|
const Dropdown = forwardRef<HTMLDivElement, DropdownProps>(
|
|
10
11
|
(
|
|
@@ -82,7 +83,11 @@ const Dropdown = forwardRef<HTMLDivElement, DropdownProps>(
|
|
|
82
83
|
onClick={() => handleOptionChange(info, !info.isChecked)}
|
|
83
84
|
>
|
|
84
85
|
<input type="checkbox" checked={info.isChecked} readOnly />
|
|
85
|
-
<
|
|
86
|
+
<Typography
|
|
87
|
+
as="span"
|
|
88
|
+
className="dropdown-option-label"
|
|
89
|
+
children={info.label}
|
|
90
|
+
/>
|
|
86
91
|
</div>
|
|
87
92
|
))
|
|
88
93
|
)}
|
|
@@ -38,16 +38,16 @@
|
|
|
38
38
|
cursor: pointer;
|
|
39
39
|
position: relative;
|
|
40
40
|
border: 1px solid var(--default-icon-color);
|
|
41
|
-
border-radius:
|
|
41
|
+
border-radius: 4px;
|
|
42
42
|
background: var(--drawer-footer-bg);
|
|
43
43
|
min-width: 150px;
|
|
44
44
|
width: 100%;
|
|
45
45
|
height: 32px;
|
|
46
46
|
.ff-multiselect {
|
|
47
47
|
position: relative;
|
|
48
|
-
padding:
|
|
48
|
+
padding: 3px;
|
|
49
49
|
border: none;
|
|
50
|
-
border-radius:
|
|
50
|
+
border-radius: 4px;
|
|
51
51
|
@include flex-center;
|
|
52
52
|
&__main {
|
|
53
53
|
display: flex;
|
|
@@ -61,6 +61,8 @@
|
|
|
61
61
|
|
|
62
62
|
.active-default-label {
|
|
63
63
|
@extend .font-size-8;
|
|
64
|
+
font-size: 8px !important;
|
|
65
|
+
height: 8px;
|
|
64
66
|
@include label-styles;
|
|
65
67
|
background-color: var(--multi-select-label-bg);
|
|
66
68
|
line-height: 12px;
|
|
@@ -87,6 +89,9 @@
|
|
|
87
89
|
@extend .fontXs;
|
|
88
90
|
line-height: 14px;
|
|
89
91
|
color: var(--tooltip-bg-color);
|
|
92
|
+
&.pr-2 {
|
|
93
|
+
padding: 5px 2px;
|
|
94
|
+
}
|
|
90
95
|
}
|
|
91
96
|
.ff-multiselect-chip-close-icon {
|
|
92
97
|
cursor: pointer;
|
|
@@ -108,13 +113,15 @@
|
|
|
108
113
|
}
|
|
109
114
|
}
|
|
110
115
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
}
|
|
117
|
+
.ff-multiselect-more-chip {
|
|
118
|
+
display: flex;
|
|
119
|
+
align-items: center;
|
|
120
|
+
width: 1.2rem;
|
|
121
|
+
@extend .fontSm;
|
|
122
|
+
font-weight: 600;
|
|
123
|
+
line-height: 16px;
|
|
124
|
+
color: var(--brand-color);
|
|
118
125
|
}
|
|
119
126
|
}
|
|
120
127
|
&__toggle {
|
|
@@ -55,13 +55,25 @@ export const Default3: Story = {
|
|
|
55
55
|
export const EmailGroup: Story = {
|
|
56
56
|
render: () => {
|
|
57
57
|
const [options] = useState([
|
|
58
|
-
{
|
|
58
|
+
{
|
|
59
|
+
label: 'Sample1@gmail.com',
|
|
60
|
+
value: 'sample1@gmail.com',
|
|
61
|
+
isDisabled: true,
|
|
62
|
+
},
|
|
59
63
|
{ label: 'Sample2@gmail.com', value: 'sample2@gmail.com' },
|
|
60
64
|
]);
|
|
61
65
|
const [selectedOptions, setSelectedOptions] = useState<
|
|
62
|
-
{ label?: string; value?: string }[]
|
|
63
|
-
>([
|
|
64
|
-
|
|
66
|
+
{ label?: string; value?: string; isDisabled?: boolean }[]
|
|
67
|
+
>([
|
|
68
|
+
{
|
|
69
|
+
label: 'Sample1@gmail.com',
|
|
70
|
+
value: 'sample1@gmail.com',
|
|
71
|
+
isDisabled: true,
|
|
72
|
+
},
|
|
73
|
+
]);
|
|
74
|
+
const onChange = (
|
|
75
|
+
options: { label?: string; value?: string; isDisabled?: boolean }[]
|
|
76
|
+
) => {
|
|
65
77
|
setSelectedOptions(options);
|
|
66
78
|
};
|
|
67
79
|
return (
|
|
@@ -5,6 +5,7 @@ import './MultiSelect.scss';
|
|
|
5
5
|
import Dropdown from './Dropdown';
|
|
6
6
|
import Icon from '../Icon';
|
|
7
7
|
import { MultiSelectProps, Option } from './MultiSelectTypes';
|
|
8
|
+
import Typography from '../Typography';
|
|
8
9
|
|
|
9
10
|
const ChipElement = ({
|
|
10
11
|
label,
|
|
@@ -22,6 +23,8 @@ const ChipElement = ({
|
|
|
22
23
|
className="ff-multiselect-chip-close-icon"
|
|
23
24
|
onClick={onChipCloseClick}
|
|
24
25
|
name="close_pill"
|
|
26
|
+
height={13} //as per the latest chnages in icon container we have to give this
|
|
27
|
+
width={13}
|
|
25
28
|
/>
|
|
26
29
|
</div>
|
|
27
30
|
);
|
|
@@ -46,6 +49,9 @@ const MultiSelect = ({
|
|
|
46
49
|
}: MultiSelectProps) => {
|
|
47
50
|
const [isOpen, setIsOpen] = useState<boolean>(false);
|
|
48
51
|
const [allOptions, setAllOptions] = useState(options);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
setAllOptions(options);
|
|
54
|
+
}, [options]);
|
|
49
55
|
|
|
50
56
|
const [searchedKeyword, setSearchedKeyword] = useState('');
|
|
51
57
|
const [isSelectFocusedOnce, setIsSelectFocusedOnce] =
|
|
@@ -236,7 +242,8 @@ const MultiSelect = ({
|
|
|
236
242
|
>
|
|
237
243
|
<div className="ff-multiselect" onClick={handleClick}>
|
|
238
244
|
<div className="ff-multiselect__main">
|
|
239
|
-
<
|
|
245
|
+
<Typography
|
|
246
|
+
as="span"
|
|
240
247
|
className={classNames({
|
|
241
248
|
'active-default-label':
|
|
242
249
|
isOpen ||
|
|
@@ -244,9 +251,9 @@ const MultiSelect = ({
|
|
|
244
251
|
(isFieldSkipped && required),
|
|
245
252
|
'default-label': !isOpen && !selectedOptions?.length,
|
|
246
253
|
})}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
254
|
+
children={label}
|
|
255
|
+
/>
|
|
256
|
+
|
|
250
257
|
<div className="ff-multiselect-chip-container">
|
|
251
258
|
{displayCount ? (
|
|
252
259
|
<>
|
|
@@ -3,10 +3,11 @@ interface Option {
|
|
|
3
3
|
value?: string;
|
|
4
4
|
accessor?: string;
|
|
5
5
|
isChecked?: boolean;
|
|
6
|
+
isDisabled?: boolean;
|
|
6
7
|
}
|
|
7
8
|
interface MultiSelectProps {
|
|
8
9
|
options: Option[];
|
|
9
|
-
type
|
|
10
|
+
type?: 'email' | 'text';
|
|
10
11
|
label: string;
|
|
11
12
|
selectedOptions?: Option[];
|
|
12
13
|
disabled?: boolean;
|
|
@@ -18,7 +19,7 @@ interface MultiSelectProps {
|
|
|
18
19
|
errorMessage?: string;
|
|
19
20
|
withSelectButton?: boolean;
|
|
20
21
|
onSelect?: () => void;
|
|
21
|
-
displayCount?:boolean;
|
|
22
|
+
displayCount?: boolean;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
export { Option, MultiSelectProps };
|
|
25
|
+
export { Option, MultiSelectProps };
|
|
@@ -254,8 +254,8 @@ const Select = ({
|
|
|
254
254
|
const applyActiveOptionClasses = !isInputFocused && Boolean(option);
|
|
255
255
|
|
|
256
256
|
return (
|
|
257
|
-
<div className={classNames(`ff-select-wrapper
|
|
258
|
-
<div className=
|
|
257
|
+
<div className={classNames(`ff-select-wrapper`)}>
|
|
258
|
+
<div className={`ff-select ${className}`}>
|
|
259
259
|
<input
|
|
260
260
|
type="text"
|
|
261
261
|
className={classNames('ff-select-input', {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Toastify, toast } from './Toastify';
|
|
3
|
+
import Button from '../Button';
|
|
4
|
+
|
|
5
|
+
const meta: Meta<typeof Toastify> = {
|
|
6
|
+
title: 'Components/Toastify',
|
|
7
|
+
component: Toastify,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'centered',
|
|
10
|
+
},
|
|
11
|
+
tags: ['autodocs'],
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
type Story = StoryObj<typeof Toastify>;
|
|
15
|
+
|
|
16
|
+
const defaultArgs = {
|
|
17
|
+
isOpen: false,
|
|
18
|
+
toastTitle: 'Success',
|
|
19
|
+
toastMessage: 'Variable name Requested for Review successfully',
|
|
20
|
+
closeButtonLabel: 'x',
|
|
21
|
+
displayDuration: 3000,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const Controlled: Story = {
|
|
25
|
+
args: {
|
|
26
|
+
...defaultArgs,
|
|
27
|
+
},
|
|
28
|
+
// import { Toastify, toast } from 'pixel-react';
|
|
29
|
+
render: () => (
|
|
30
|
+
<>
|
|
31
|
+
{/* Render Toastify to allow toast notifications */}
|
|
32
|
+
<Toastify />
|
|
33
|
+
|
|
34
|
+
{/* Button to trigger a toast notification */}
|
|
35
|
+
<Button
|
|
36
|
+
variant="primary"
|
|
37
|
+
onClick={() => toast.success('Your request was successful!')}
|
|
38
|
+
>
|
|
39
|
+
Show Success Toast
|
|
40
|
+
</Button>
|
|
41
|
+
<br/>
|
|
42
|
+
<Button
|
|
43
|
+
variant="delete"
|
|
44
|
+
onClick={() => toast.error('Something went wrong!')}
|
|
45
|
+
>
|
|
46
|
+
Show Error Toast
|
|
47
|
+
</Button>
|
|
48
|
+
</>
|
|
49
|
+
),
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export default meta;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { useState, useRef } from 'react';
|
|
2
|
+
import Toaster from '../Toast/Toast';
|
|
3
|
+
import { Variant, ToastProps } from './types';
|
|
4
|
+
|
|
5
|
+
let openToast: (variant: Variant, message: string) => void;
|
|
6
|
+
|
|
7
|
+
export const Toastify = () => {
|
|
8
|
+
const [toastProps, setToastProps] = useState<ToastProps>({
|
|
9
|
+
isOpen: false,
|
|
10
|
+
variant: 'info',
|
|
11
|
+
toastTitle: '',
|
|
12
|
+
toastMessage: '',
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
16
|
+
|
|
17
|
+
openToast = (variant: Variant, message: string) => {
|
|
18
|
+
// Clear the previous timeout if it exists
|
|
19
|
+
if (timeoutRef.current) {
|
|
20
|
+
clearTimeout(timeoutRef.current);
|
|
21
|
+
timeoutRef.current = null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const title =
|
|
25
|
+
variant === 'danger'
|
|
26
|
+
? 'Error!'
|
|
27
|
+
: variant.charAt(0).toUpperCase() + variant.slice(1);
|
|
28
|
+
// Close the existing toast if open, and then immediately show the new one
|
|
29
|
+
setToastProps((prev) => ({
|
|
30
|
+
...prev,
|
|
31
|
+
isOpen: false,
|
|
32
|
+
}));
|
|
33
|
+
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
setToastProps({
|
|
36
|
+
isOpen: true,
|
|
37
|
+
variant,
|
|
38
|
+
toastTitle: `${title}!`,
|
|
39
|
+
toastMessage: message,
|
|
40
|
+
});
|
|
41
|
+
}, 10);
|
|
42
|
+
|
|
43
|
+
timeoutRef.current = setTimeout(() => {
|
|
44
|
+
setToastProps((prev) => ({ ...prev, isOpen: false }));
|
|
45
|
+
}, 3000);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<Toaster
|
|
50
|
+
isOpen={toastProps.isOpen}
|
|
51
|
+
variant={toastProps.variant}
|
|
52
|
+
toastTitle={toastProps.toastTitle}
|
|
53
|
+
toastMessage={toastProps.toastMessage}
|
|
54
|
+
/>
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default Toastify;
|
|
59
|
+
|
|
60
|
+
// Utility to trigger toast messages outside of the Toastify component
|
|
61
|
+
export const toast = {
|
|
62
|
+
success: (message: string) => openToast('success', message),
|
|
63
|
+
error: (message: string) => openToast('danger', message),
|
|
64
|
+
warning: (message: string) => openToast('warning', message),
|
|
65
|
+
info: (message: string) => openToast('info', message),
|
|
66
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './Toastify';
|
|
@@ -17,6 +17,7 @@ const Tooltip: React.FC<TooltipProps> = ({
|
|
|
17
17
|
children,
|
|
18
18
|
placement = 'bottom',
|
|
19
19
|
disabled = false,
|
|
20
|
+
zIndex = 99,
|
|
20
21
|
}) => {
|
|
21
22
|
const [isVisible, setIsVisible] = useState(false);
|
|
22
23
|
const titleRef: TitleRef = useRef(null);
|
|
@@ -178,7 +179,7 @@ const Tooltip: React.FC<TooltipProps> = ({
|
|
|
178
179
|
createPortal(
|
|
179
180
|
<div
|
|
180
181
|
ref={titleRef}
|
|
181
|
-
style={styles[placement]}
|
|
182
|
+
style={{ ...styles[placement], zIndex }}
|
|
182
183
|
className={classNames('ff-tooltip', currentTheme, {
|
|
183
184
|
'ff-tooltip--visible': isVisible,
|
|
184
185
|
})}
|
|
@@ -6,28 +6,32 @@
|
|
|
6
6
|
@font-face {
|
|
7
7
|
font-family: 'Poppins';
|
|
8
8
|
font-weight: 400;
|
|
9
|
-
src:
|
|
9
|
+
src:
|
|
10
|
+
local('Poppins-Regular'),
|
|
10
11
|
url(../../fonts/Poppins/Poppins-Regular.ttf) format('truetype');
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
@font-face {
|
|
14
15
|
font-family: 'Poppins';
|
|
15
16
|
font-weight: 500;
|
|
16
|
-
src:
|
|
17
|
+
src:
|
|
18
|
+
local('Poppins-Medium'),
|
|
17
19
|
url(../../fonts/Poppins/Poppins-Medium.ttf) format('truetype');
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
@font-face {
|
|
21
23
|
font-family: 'Poppins';
|
|
22
24
|
font-weight: 600;
|
|
23
|
-
src:
|
|
25
|
+
src:
|
|
26
|
+
local('Poppins-SemiBold'),
|
|
24
27
|
url(../../fonts/Poppins/Poppins-SemiBold.ttf) format('truetype');
|
|
25
28
|
}
|
|
26
29
|
|
|
27
30
|
@font-face {
|
|
28
31
|
font-family: 'Poppins';
|
|
29
32
|
font-weight: 700;
|
|
30
|
-
src:
|
|
33
|
+
src:
|
|
34
|
+
local('Poppins-Bold'),
|
|
31
35
|
url(../../fonts/Poppins/Poppins-Bold.ttf) format('truetype');
|
|
32
36
|
}
|
|
33
37
|
|
|
@@ -46,4 +50,8 @@
|
|
|
46
50
|
&--bold {
|
|
47
51
|
font-weight: 700;
|
|
48
52
|
}
|
|
53
|
+
.required-asterisk {
|
|
54
|
+
color: var(--input-error-text-color);
|
|
55
|
+
padding-right: 4px;
|
|
56
|
+
}
|
|
49
57
|
}
|
|
@@ -14,6 +14,7 @@ type Story = StoryObj<typeof Typography>;
|
|
|
14
14
|
|
|
15
15
|
export const Docs: Story = {
|
|
16
16
|
args: {
|
|
17
|
+
required: false,
|
|
17
18
|
children: 'Typography',
|
|
18
19
|
},
|
|
19
20
|
};
|
|
@@ -51,6 +52,7 @@ export const Bold14px: Story = {
|
|
|
51
52
|
fontSize: '16px',
|
|
52
53
|
as: 'h2',
|
|
53
54
|
children: 'This is Bold text with 700 font weight and 16px font size.',
|
|
55
|
+
required: true,
|
|
54
56
|
},
|
|
55
57
|
};
|
|
56
58
|
|
|
@@ -14,6 +14,7 @@ const Typography: React.FC<TypographyProps> = ({
|
|
|
14
14
|
children,
|
|
15
15
|
htmlFor = '',
|
|
16
16
|
onClick = () => {},
|
|
17
|
+
required = false,
|
|
17
18
|
}) => {
|
|
18
19
|
const fontSizeValue =
|
|
19
20
|
typeof fontSize === 'number' ? `${fontSize}px` : fontSize;
|
|
@@ -31,6 +32,7 @@ const Typography: React.FC<TypographyProps> = ({
|
|
|
31
32
|
}}
|
|
32
33
|
onClick={onClick}
|
|
33
34
|
>
|
|
35
|
+
{required && <span className="required-asterisk">*</span>}
|
|
34
36
|
{children}
|
|
35
37
|
</Element>
|
|
36
38
|
);
|