pixel-react 1.1.8 → 1.1.9
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/components/AddButton/AddButton.d.ts +5 -0
- package/lib/components/AddButton/AddButton.stories.d.ts +6 -0
- package/lib/components/AddButton/index.d.ts +1 -0
- package/lib/components/AddButton/types.d.ts +4 -0
- package/lib/components/ExcelFile/ChangeExcelStyles.d.ts +14 -0
- package/lib/components/ExcelFile/ColorBarSelector/ColorBarSelector.d.ts +8 -0
- package/lib/components/ExcelFile/ContextMenu/ContextMenu.d.ts +4 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/ActiveCell.d.ts +7 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/Cell.d.ts +4 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/ColumnIndicator.d.ts +5 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/Copied.d.ts +3 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/CornerIndicator.d.ts +5 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/DataEditor.d.ts +5 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/DataViewer.d.ts +8 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/FloatingRect.d.ts +10 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/HeaderRow.d.ts +3 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/Row.d.ts +3 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/RowIndicator.d.ts +5 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/Selected.d.ts +3 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/Spreadsheet.d.ts +81 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/Table.d.ts +3 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/actions.d.ts +130 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/areModelsEqual.d.ts +1 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/context.d.ts +8 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/engine.d.ts +22 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/formula.d.ts +17 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/index.d.ts +2 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-graph.d.ts +21 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-hash.d.ts +3 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/engine/point-set.d.ts +24 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/index.d.ts +13 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/matrix.d.ts +67 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/point-range.d.ts +22 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/point.d.ts +11 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/reducer.d.ts +27 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/selection.d.ts +95 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/types.d.ts +215 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/use-dispatch.d.ts +3 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/use-selector.d.ts +3 -0
- package/lib/components/ExcelFile/ExcelFile/Excel/util.d.ts +45 -0
- package/lib/components/ExcelFile/ExcelFile/ExcelFile.d.ts +3 -0
- package/lib/components/ExcelFile/ExcelFile.stories.d.ts +6 -0
- package/lib/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.d.ts +15 -0
- package/lib/components/ExcelFile/ExcelToolBar/ExcelToolBar.d.ts +3 -0
- package/lib/components/ExcelFile/ImportExcelStyles.d.ts +24 -0
- package/lib/components/ExcelFile/Types.d.ts +176 -0
- package/lib/components/ExcelFile/index.d.ts +1 -0
- package/lib/components/IconRadioGroup/IconRadioGroup.d.ts +5 -0
- package/lib/components/IconRadioGroup/IconRadioGroup.stories.d.ts +7 -0
- package/lib/components/IconRadioGroup/index.d.ts +1 -0
- package/lib/components/IconRadioGroup/type.d.ts +41 -0
- package/lib/index.d.ts +45 -1
- package/lib/index.esm.js +682 -244
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +682 -243
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/find/findAndInsert.d.ts +7 -0
- package/lib/utils/find/findAndInsert.stories.d.ts +7 -0
- package/package.json +4 -2
- package/src/assets/Themes/BaseTheme.scss +1 -0
- package/src/assets/Themes/DarkTheme.scss +1 -0
- package/src/assets/icons/all_borders.svg +3 -0
- package/src/assets/icons/bold.svg +3 -0
- package/src/assets/icons/border_bottom.svg +3 -0
- package/src/assets/icons/border_left.svg +3 -0
- package/src/assets/icons/border_right.svg +3 -0
- package/src/assets/icons/border_top.svg +3 -0
- package/src/assets/icons/clone_icon.svg +3 -0
- package/src/assets/icons/double_underline.svg +5 -0
- package/src/assets/icons/fill_color.svg +7 -0
- package/src/assets/icons/formate_painter.svg +5 -0
- package/src/assets/icons/full_access_icon.svg +4 -0
- package/src/assets/icons/history_icon.svg +19 -0
- package/src/assets/icons/italic.svg +3 -0
- package/src/assets/icons/jira.svg +3 -0
- package/src/assets/icons/linked_defects.svg +11 -0
- package/src/assets/icons/move_icon.svg +5 -0
- package/src/assets/icons/no_access_icon.svg +4 -0
- package/src/assets/icons/no_border.svg +3 -0
- package/src/assets/icons/strike_through.svg +3 -0
- package/src/assets/icons/text_align_center.svg +3 -0
- package/src/assets/icons/text_align_left.svg +3 -0
- package/src/assets/icons/text_align_right.svg +3 -0
- package/src/assets/icons/text_color.svg +3 -0
- package/src/assets/icons/underline.svg +4 -0
- package/src/assets/icons/view_access_icon.svg +4 -0
- package/src/components/AppHeader/AppHeader.scss +14 -9
- package/src/components/AppHeader/AppHeader.stories.tsx +1 -0
- package/src/components/AppHeader/AppHeader.tsx +7 -5
- package/src/components/ExcelFile/ChangeExcelStyles.tsx +78 -0
- package/src/components/ExcelFile/ColorBarselector/ColorBarSelector.scss +13 -0
- package/src/components/ExcelFile/ColorBarselector/ColorBarSelector.tsx +43 -0
- package/src/components/ExcelFile/ContextMenu/ContextMenu.scss +102 -0
- package/src/components/ExcelFile/ContextMenu/ContextMenu.tsx +104 -0
- package/src/components/ExcelFile/ExcelFile/Excel/ActiveCell.tsx +131 -0
- package/src/components/ExcelFile/ExcelFile/Excel/Cell.tsx +201 -0
- package/src/components/ExcelFile/ExcelFile/Excel/ColumnIndicator.tsx +123 -0
- package/src/components/ExcelFile/ExcelFile/Excel/Copied.tsx +25 -0
- package/src/components/ExcelFile/ExcelFile/Excel/CornerIndicator.tsx +49 -0
- package/src/components/ExcelFile/ExcelFile/Excel/DataEditor.tsx +37 -0
- package/src/components/ExcelFile/ExcelFile/Excel/DataViewer.tsx +46 -0
- package/src/components/ExcelFile/ExcelFile/Excel/FloatingRect.tsx +31 -0
- package/src/components/ExcelFile/ExcelFile/Excel/HeaderRow.tsx +5 -0
- package/src/components/ExcelFile/ExcelFile/Excel/Row.tsx +5 -0
- package/src/components/ExcelFile/ExcelFile/Excel/RowIndicator.tsx +102 -0
- package/src/components/ExcelFile/ExcelFile/Excel/Selected.tsx +32 -0
- package/src/components/ExcelFile/ExcelFile/Excel/Spreadsheet.css +144 -0
- package/src/components/ExcelFile/ExcelFile/Excel/Spreadsheet.tsx +494 -0
- package/src/components/ExcelFile/ExcelFile/Excel/Table.tsx +19 -0
- package/src/components/ExcelFile/ExcelFile/Excel/actions.ts +302 -0
- package/src/components/ExcelFile/ExcelFile/Excel/areModelsEqual.ts +18 -0
- package/src/components/ExcelFile/ExcelFile/Excel/context.ts +12 -0
- package/src/components/ExcelFile/ExcelFile/Excel/engine/engine.ts +200 -0
- package/src/components/ExcelFile/ExcelFile/Excel/engine/formula.ts +137 -0
- package/src/components/ExcelFile/ExcelFile/Excel/engine/index.ts +2 -0
- package/src/components/ExcelFile/ExcelFile/Excel/engine/point-graph.ts +154 -0
- package/src/components/ExcelFile/ExcelFile/Excel/engine/point-hash.ts +10 -0
- package/src/components/ExcelFile/ExcelFile/Excel/engine/point-set.ts +69 -0
- package/src/components/ExcelFile/ExcelFile/Excel/index.ts +48 -0
- package/src/components/ExcelFile/ExcelFile/Excel/matrix.ts +388 -0
- package/src/components/ExcelFile/ExcelFile/Excel/point-range.ts +82 -0
- package/src/components/ExcelFile/ExcelFile/Excel/point.ts +15 -0
- package/src/components/ExcelFile/ExcelFile/Excel/reducer.ts +682 -0
- package/src/components/ExcelFile/ExcelFile/Excel/selection.ts +257 -0
- package/src/components/ExcelFile/ExcelFile/Excel/types.ts +269 -0
- package/src/components/ExcelFile/ExcelFile/Excel/typings/fast-formula-parser.d.ts +58 -0
- package/src/components/ExcelFile/ExcelFile/Excel/use-dispatch.ts +8 -0
- package/src/components/ExcelFile/ExcelFile/Excel/use-selector.ts +9 -0
- package/src/components/ExcelFile/ExcelFile/Excel/util.ts +173 -0
- package/src/components/ExcelFile/ExcelFile/ExcelFile.scss +27 -0
- package/src/components/ExcelFile/ExcelFile/ExcelFile.tsx +520 -0
- package/src/components/ExcelFile/ExcelFile.stories.tsx +132 -0
- package/src/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.scss +16 -0
- package/src/components/ExcelFile/ExcelSheetBar/ExcelSheetBar.tsx +79 -0
- package/src/components/ExcelFile/ExcelToolBar/ExcelToolBar.scss +22 -0
- package/src/components/ExcelFile/ExcelToolBar/ExcelToolBar.tsx +271 -0
- package/src/components/ExcelFile/ImportExcelStyles.tsx +86 -0
- package/src/components/ExcelFile/Types.ts +241 -0
- package/src/components/ExcelFile/index.ts +1 -0
- package/src/components/Icon/Icons.scss +2 -3
- package/src/components/Icon/iconList.ts +50 -1
- package/src/components/IconRadioGroup/IconRadioGroup.scss +60 -0
- package/src/components/IconRadioGroup/IconRadioGroup.stories.tsx +108 -0
- package/src/components/IconRadioGroup/IconRadioGroup.tsx +72 -0
- package/src/components/IconRadioGroup/index.ts +1 -0
- package/src/components/IconRadioGroup/type.ts +50 -0
- package/src/index.ts +2 -0
@@ -10,9 +10,8 @@
|
|
10
10
|
padding: 4px;
|
11
11
|
box-sizing: content-box;
|
12
12
|
&:hover {
|
13
|
-
border-radius:
|
14
|
-
background-color: var(--
|
15
|
-
box-shadow: 0px 0px 16px var(--toggle-strip-shadow);
|
13
|
+
border-radius: 4px;
|
14
|
+
background-color: var(--ff-icon-hover-fill-color);
|
16
15
|
& > svg {
|
17
16
|
color: var(--brand-color);
|
18
17
|
}
|
@@ -43,6 +43,23 @@ 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';
|
45
45
|
import ImpactListIcon from '../../assets/icons/impactList.svg?react';
|
46
|
+
import FormatePainter from '../../assets/icons/formate_painter.svg?react';
|
47
|
+
import Bold from '../../assets/icons/bold.svg?react';
|
48
|
+
import Italic from '../../assets/icons/italic.svg?react';
|
49
|
+
import StrikeThrough from '../../assets/icons/strike_through.svg?react';
|
50
|
+
import Underline from '../../assets/icons/underline.svg?react';
|
51
|
+
import DoubleUnderline from '../../assets/icons/double_underline.svg?react';
|
52
|
+
import AllBorders from '../../assets/icons/all_borders.svg?react';
|
53
|
+
import BorderBottom from '../../assets/icons/border_bottom.svg?react';
|
54
|
+
import BorderLeft from '../../assets/icons/border_left.svg?react';
|
55
|
+
import BorderRight from '../../assets/icons/border_right.svg?react';
|
56
|
+
import BorderTop from '../../assets/icons/border_top.svg?react';
|
57
|
+
import NoBorder from '../../assets/icons/no_border.svg?react';
|
58
|
+
import TextAlignCenter from '../../assets/icons/text_align_center.svg?react';
|
59
|
+
import TextAlignLeft from '../../assets/icons/text_align_left.svg?react';
|
60
|
+
import TextAlignRight from '../../assets/icons/text_align_right.svg?react';
|
61
|
+
import TextColor from '../../assets/icons/text_color.svg?react';
|
62
|
+
import FillColor from '../../assets/icons/fill_color.svg?react';
|
46
63
|
import InfoIcon from '../../assets/icons/info_icon.svg?react';
|
47
64
|
import CalendarIcon from '../../assets/icons/calendar_icon.svg?react';
|
48
65
|
import HideIcon from '../../assets/icons/hide_icon.svg?react';
|
@@ -70,6 +87,9 @@ import SalesForceIcon from '../../assets/icons/sales_force.svg?react';
|
|
70
87
|
import MSDynamicIcon from '../../assets/icons/ms_dynamic.svg?react';
|
71
88
|
import AllProjectsIcon from '../../assets/icons/all_projects.svg?react';
|
72
89
|
import AndroidIcon from '../../assets/icons/android_icon.svg?react';
|
90
|
+
import NoAccessIcon from '../../assets/icons/no_access_icon.svg?react';
|
91
|
+
import FullAccessIcon from '../../assets/icons/full_access_icon.svg?react';
|
92
|
+
import ViewAccessIcon from '../../assets/icons/view_access_icon.svg?react';
|
73
93
|
import AddLocator from '../../assets/icons/add_locator.svg?react';
|
74
94
|
import PlusUserIcon from '../../assets/icons/plus_user_icon.svg?react';
|
75
95
|
|
@@ -94,8 +114,12 @@ import NLPHelpIcon from '../../assets/icons/nlp_help_icon.svg?react';
|
|
94
114
|
import UpdateIcon from '../../assets/icons/update_icon.svg?react';
|
95
115
|
import AddFile from '../../assets/icons/add_file.svg?react';
|
96
116
|
|
117
|
+
import CloneIcon from '../../assets/icons/clone_icon.svg?react';
|
118
|
+
import MoveIcon from '../../assets/icons/move_icon.svg?react';
|
119
|
+
import Jira from '../../assets/icons/jira.svg?react';
|
120
|
+
import HistoryIcon from '../../assets//icons/history_icon.svg?react';
|
121
|
+
import LinkedDefects from '../../assets//icons/linked_defects.svg?react';
|
97
122
|
|
98
|
-
//icons
|
99
123
|
Components['delete_info'] = DeleteInfoIcon;
|
100
124
|
Components['success'] = ToastSuccessIcon;
|
101
125
|
Components['warning'] = WarningIcon;
|
@@ -138,6 +162,23 @@ Components['delete'] = DeleteIcon;
|
|
138
162
|
Components['details'] = DetailsIcon;
|
139
163
|
Components['impactList'] = ImpactListIcon;
|
140
164
|
Components['add_variable'] = AddVariable;
|
165
|
+
Components['formate_painter'] = FormatePainter;
|
166
|
+
Components['bold'] = Bold;
|
167
|
+
Components['italic'] = Italic;
|
168
|
+
Components['strike_through'] = StrikeThrough;
|
169
|
+
Components['underline'] = Underline;
|
170
|
+
Components['double_underline'] = DoubleUnderline;
|
171
|
+
Components['border_left'] = BorderLeft;
|
172
|
+
Components['border_right'] = BorderRight;
|
173
|
+
Components['border_bottom'] = BorderBottom;
|
174
|
+
Components['border_top'] = BorderTop;
|
175
|
+
Components['all_borders'] = AllBorders;
|
176
|
+
Components['no_border'] = NoBorder;
|
177
|
+
Components['text_align_center'] = TextAlignCenter;
|
178
|
+
Components['text_align_left'] = TextAlignLeft;
|
179
|
+
Components['text_align_right'] = TextAlignRight;
|
180
|
+
Components['text_color'] = TextColor;
|
181
|
+
Components['fill_color'] = FillColor;
|
141
182
|
Components['info'] = InfoIcon;
|
142
183
|
Components['calendar_icon'] = CalendarIcon;
|
143
184
|
Components['hide_icon'] = HideIcon;
|
@@ -187,5 +228,13 @@ Components['notification_icon'] = NotificationIcon;
|
|
187
228
|
Components['nlp_help_icon'] = NLPHelpIcon;
|
188
229
|
Components['update_icon'] = UpdateIcon;
|
189
230
|
Components['add_file'] = AddFile;
|
231
|
+
Components['clone_icon'] = CloneIcon;
|
232
|
+
Components['move_icon'] = MoveIcon;
|
233
|
+
Components['jira'] = Jira;
|
234
|
+
Components['history'] = HistoryIcon;
|
235
|
+
Components['linked_defects'] = LinkedDefects;
|
236
|
+
Components['no_access_icon'] = NoAccessIcon;
|
237
|
+
Components['full_access_icon'] = FullAccessIcon;
|
238
|
+
Components['view_access_icon'] = ViewAccessIcon;
|
190
239
|
|
191
240
|
export default Components;
|
@@ -0,0 +1,60 @@
|
|
1
|
+
.ff-icon-radio-group {
|
2
|
+
width: 237px;
|
3
|
+
height: 24px;
|
4
|
+
display: flex;
|
5
|
+
align-items: center;
|
6
|
+
gap: 47px;
|
7
|
+
position: relative;
|
8
|
+
}
|
9
|
+
|
10
|
+
.ff-icon-radio-button {
|
11
|
+
width: 24px;
|
12
|
+
height: 24px;
|
13
|
+
border-radius: 4px;
|
14
|
+
display: flex;
|
15
|
+
justify-content: center;
|
16
|
+
align-items: center;
|
17
|
+
cursor: pointer;
|
18
|
+
position: relative;
|
19
|
+
|
20
|
+
&.selected {
|
21
|
+
background-color: var(--brand-color);
|
22
|
+
}
|
23
|
+
|
24
|
+
&.disabled {
|
25
|
+
opacity: 50%;
|
26
|
+
cursor: not-allowed;
|
27
|
+
}
|
28
|
+
|
29
|
+
.icon-container {
|
30
|
+
width: 24px;
|
31
|
+
height: 24px;
|
32
|
+
border-radius: 4px;
|
33
|
+
display: flex;
|
34
|
+
justify-content: center;
|
35
|
+
align-items: center;
|
36
|
+
border: 1px solid var(--border-color);
|
37
|
+
background: var(--drawer-footer-bg);
|
38
|
+
|
39
|
+
&.selected {
|
40
|
+
background-color: var(--brand-color);
|
41
|
+
}
|
42
|
+
|
43
|
+
.icon {
|
44
|
+
width: 14px;
|
45
|
+
height: 14px;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
.line-connector {
|
51
|
+
position: absolute;
|
52
|
+
top: 50%;
|
53
|
+
left: 0;
|
54
|
+
right: 0;
|
55
|
+
height: 1px;
|
56
|
+
background-color: var(--border-color);
|
57
|
+
z-index: -1;
|
58
|
+
border-radius: 2px 0px 0px 0px;
|
59
|
+
opacity: 0px;
|
60
|
+
}
|
@@ -0,0 +1,108 @@
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
2
|
+
import IconRadioGroup from './IconRadioGroup';
|
3
|
+
import { useState } from 'react';
|
4
|
+
|
5
|
+
const meta: Meta<typeof IconRadioGroup> = {
|
6
|
+
title: 'Components/IconRadioGroup',
|
7
|
+
component: IconRadioGroup,
|
8
|
+
parameters: {
|
9
|
+
layout: 'centered',
|
10
|
+
},
|
11
|
+
tags: ['autodocs'],
|
12
|
+
};
|
13
|
+
|
14
|
+
type Story = StoryObj<typeof IconRadioGroup>;
|
15
|
+
|
16
|
+
export const Default: Story = {
|
17
|
+
render: () => {
|
18
|
+
const radioOptions = [
|
19
|
+
{
|
20
|
+
iconName: 'no_access_icon',
|
21
|
+
iconLabel: 'No Access',
|
22
|
+
disabled: false,
|
23
|
+
disableMessage: '',
|
24
|
+
},
|
25
|
+
{
|
26
|
+
iconName: 'view_access_icon',
|
27
|
+
iconLabel: 'View',
|
28
|
+
disabled: false,
|
29
|
+
disableMessage: '',
|
30
|
+
},
|
31
|
+
{
|
32
|
+
iconName: 'edit',
|
33
|
+
iconLabel: 'Edit',
|
34
|
+
disabled: false,
|
35
|
+
disableMessage: '',
|
36
|
+
},
|
37
|
+
{
|
38
|
+
iconName: 'full_access_icon',
|
39
|
+
iconLabel: 'Full Access',
|
40
|
+
disabled: false,
|
41
|
+
disableMessage: '',
|
42
|
+
},
|
43
|
+
];
|
44
|
+
|
45
|
+
const [selectedOption, setSelectedOption] = useState<string | null>(null);
|
46
|
+
|
47
|
+
const handleOptionChange = (selected: string | null) => {
|
48
|
+
setSelectedOption(selected);
|
49
|
+
};
|
50
|
+
|
51
|
+
return (
|
52
|
+
<IconRadioGroup
|
53
|
+
items={radioOptions}
|
54
|
+
onButtonClick={(selectedItem) => console.log('Selected:', selectedItem)}
|
55
|
+
onChange={handleOptionChange}
|
56
|
+
selectedValue={selectedOption}
|
57
|
+
/>
|
58
|
+
);
|
59
|
+
},
|
60
|
+
};
|
61
|
+
|
62
|
+
export const WithDisabledOption: Story = {
|
63
|
+
render: () => {
|
64
|
+
const radioOptions = [
|
65
|
+
{
|
66
|
+
iconName: 'no_access_icon',
|
67
|
+
iconLabel: 'No Access',
|
68
|
+
disabled: true,
|
69
|
+
disableMessage: 'user dont have access',
|
70
|
+
},
|
71
|
+
{
|
72
|
+
iconName: 'view_access_icon',
|
73
|
+
iconLabel: 'View',
|
74
|
+
disabled: false,
|
75
|
+
disableMessage: '',
|
76
|
+
},
|
77
|
+
{
|
78
|
+
iconName: 'edit',
|
79
|
+
iconLabel: 'Edit',
|
80
|
+
disabled: false,
|
81
|
+
disableMessage: '',
|
82
|
+
},
|
83
|
+
{
|
84
|
+
iconName: 'full_access_icon',
|
85
|
+
iconLabel: 'Full Access',
|
86
|
+
disabled: false,
|
87
|
+
disableMessage: '',
|
88
|
+
},
|
89
|
+
];
|
90
|
+
|
91
|
+
const [selectedOption, setSelectedOption] = useState<string | null>(null);
|
92
|
+
|
93
|
+
const handleOptionChange = (selected: string | null) => {
|
94
|
+
setSelectedOption(selected);
|
95
|
+
};
|
96
|
+
|
97
|
+
return (
|
98
|
+
<IconRadioGroup
|
99
|
+
items={radioOptions}
|
100
|
+
onButtonClick={() => {}}
|
101
|
+
onChange={handleOptionChange}
|
102
|
+
selectedValue={selectedOption}
|
103
|
+
/>
|
104
|
+
);
|
105
|
+
},
|
106
|
+
};
|
107
|
+
|
108
|
+
export default meta;
|
@@ -0,0 +1,72 @@
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
2
|
+
import classNames from 'classnames';
|
3
|
+
import './IconRadioGroup.scss';
|
4
|
+
import Icon from '../Icon/Icon';
|
5
|
+
import { IconRadioItem, IconRadioGroupProps } from './type';
|
6
|
+
|
7
|
+
const IconRadioGroup: React.FC<IconRadioGroupProps> = ({
|
8
|
+
items,
|
9
|
+
onButtonClick,
|
10
|
+
selectedValue: initialSelectedValue = null,
|
11
|
+
onChange,
|
12
|
+
className = '',
|
13
|
+
}) => {
|
14
|
+
const [selectedValue, setSelectedValue] = useState<string | null>(
|
15
|
+
initialSelectedValue
|
16
|
+
);
|
17
|
+
|
18
|
+
useEffect(() => {
|
19
|
+
if (initialSelectedValue !== selectedValue) {
|
20
|
+
setSelectedValue(initialSelectedValue);
|
21
|
+
}
|
22
|
+
}, [initialSelectedValue, selectedValue]);
|
23
|
+
|
24
|
+
const handleButtonClick = (item: IconRadioItem) => {
|
25
|
+
if (item.disabled) return;
|
26
|
+
|
27
|
+
const newSelectedValue = item.iconName;
|
28
|
+
setSelectedValue(newSelectedValue);
|
29
|
+
|
30
|
+
if (onChange) {
|
31
|
+
onChange(newSelectedValue);
|
32
|
+
}
|
33
|
+
|
34
|
+
onButtonClick(item);
|
35
|
+
};
|
36
|
+
|
37
|
+
return (
|
38
|
+
<div className={classNames('ff-icon-radio-group', className)}>
|
39
|
+
{items.map((item) => (
|
40
|
+
<div
|
41
|
+
key={item.iconName}
|
42
|
+
className={classNames('ff-icon-radio-button', {
|
43
|
+
selected: selectedValue === item.iconName,
|
44
|
+
disabled: item.disabled,
|
45
|
+
})}
|
46
|
+
onClick={() => handleButtonClick(item)}
|
47
|
+
>
|
48
|
+
<div
|
49
|
+
className={classNames('icon-container', {
|
50
|
+
selected: selectedValue === item.iconName,
|
51
|
+
})}
|
52
|
+
>
|
53
|
+
<Icon
|
54
|
+
name={item.iconName}
|
55
|
+
height={14}
|
56
|
+
width={14}
|
57
|
+
hoverEffect={false}
|
58
|
+
color={
|
59
|
+
selectedValue === item.iconName
|
60
|
+
? 'var(--drawer-footer-bg)'
|
61
|
+
: 'var(--brand-color)'
|
62
|
+
}
|
63
|
+
/>
|
64
|
+
</div>
|
65
|
+
</div>
|
66
|
+
))}
|
67
|
+
<div className="line-connector"></div>
|
68
|
+
</div>
|
69
|
+
);
|
70
|
+
};
|
71
|
+
|
72
|
+
export default IconRadioGroup;
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default } from './IconRadioGroup';
|
@@ -0,0 +1,50 @@
|
|
1
|
+
export interface IconRadioItem {
|
2
|
+
/**
|
3
|
+
* The unique name for the icon, used to load the corresponding icon.
|
4
|
+
*/
|
5
|
+
iconName: string;
|
6
|
+
|
7
|
+
/**
|
8
|
+
* The display label for the icon. This can be used for accessibility purposes.
|
9
|
+
*/
|
10
|
+
iconLabel: string;
|
11
|
+
|
12
|
+
/**
|
13
|
+
* Flag to determine if the icon option is disabled.
|
14
|
+
*/
|
15
|
+
disabled?: boolean;
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Message to display when the option is disabled.
|
19
|
+
*/
|
20
|
+
disableMessage?: string;
|
21
|
+
}
|
22
|
+
|
23
|
+
export interface IconRadioGroupProps {
|
24
|
+
/**
|
25
|
+
* Array of icon items that make up the radio button group.
|
26
|
+
*/
|
27
|
+
items: IconRadioItem[];
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Callback function called when a button/icon is clicked.
|
31
|
+
* It returns the selected item.
|
32
|
+
*/
|
33
|
+
onButtonClick: (selectedItem: IconRadioItem) => void;
|
34
|
+
|
35
|
+
/**
|
36
|
+
* The currently selected icon value
|
37
|
+
*/
|
38
|
+
selectedValue?: string | null;
|
39
|
+
|
40
|
+
/**
|
41
|
+
* Callback function to notify parent of selection change.
|
42
|
+
*/
|
43
|
+
onChange?: (selected: string | null) => void;
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Optional className for custom styling
|
47
|
+
*/
|
48
|
+
className?: string;
|
49
|
+
}
|
50
|
+
|
package/src/index.ts
CHANGED
@@ -46,6 +46,7 @@ import Paper from './components/Paper';
|
|
46
46
|
import DashboardDonutChart from './components/Charts/DashboardDonutChart';
|
47
47
|
import Recaptcha from './components/FF_Captcha/Recaptcha';
|
48
48
|
import NLPInput from './components/NLPInput';
|
49
|
+
import IconRadioGroup from './components/IconRadioGroup';
|
49
50
|
import MachineInputField from './components/MachineInputField';
|
50
51
|
import SequentialConnectingBranch from './components/SequentialConnectingBranch';
|
51
52
|
import AttachmentButton from './components/AttachmentButton';
|
@@ -119,6 +120,7 @@ export {
|
|
119
120
|
MachineInputField,
|
120
121
|
SequentialConnectingBranch,
|
121
122
|
AttachmentButton,
|
123
|
+
IconRadioGroup,
|
122
124
|
|
123
125
|
// utils exports
|
124
126
|
checkEmpty,
|