pixel-react 1.1.7 → 1.1.9
Sign up to get free protection for your applications and to get access to all the features.
- package/.yarn/install-state.gz +0 -0
- package/lib/components/AttachmentButton/AttachmentButton.d.ts +5 -0
- package/lib/components/AttachmentButton/AttachmentButton.stories.d.ts +9 -0
- package/lib/components/AttachmentButton/index.d.ts +1 -0
- package/lib/components/AttachmentButton/types.d.ts +8 -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/components/RadioButton/radioButtonTypes.d.ts +15 -0
- package/lib/components/RadioGroup/RadioGroup.stories.d.ts +2 -1
- package/lib/components/RadioGroup/radioGroupTypes.d.ts +15 -0
- package/lib/components/Select/Select.d.ts +1 -1
- package/lib/components/Select/types.d.ts +4 -0
- package/lib/components/Table/Table.d.ts +1 -1
- package/lib/components/Table/Types.d.ts +8 -0
- package/lib/components/TableTree/TableTree.d.ts +1 -0
- package/lib/index.d.ts +71 -3
- package/lib/index.esm.js +408 -151
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +409 -150
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -2
- package/src/assets/Themes/BaseTheme.scss +11 -0
- package/src/assets/Themes/DarkTheme.scss +10 -0
- package/src/assets/icons/add_file.svg +14 -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/nlp_help_icon.svg +3 -0
- package/src/assets/icons/no_access_icon.svg +4 -0
- package/src/assets/icons/no_border.svg +3 -0
- package/src/assets/icons/notification_icon.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/update_icon.svg +3 -0
- package/src/assets/icons/view_access_icon.svg +4 -0
- package/src/components/AppHeader/AppHeader.scss +65 -4
- package/src/components/AppHeader/AppHeader.stories.tsx +1 -0
- package/src/components/AppHeader/AppHeader.tsx +7 -5
- package/src/components/AttachmentButton/AttachmentButton.scss +9 -0
- package/src/components/AttachmentButton/AttachmentButton.stories.tsx +76 -0
- package/src/components/AttachmentButton/AttachmentButton.tsx +113 -0
- package/src/components/AttachmentButton/index.ts +1 -0
- package/src/components/AttachmentButton/types.ts +8 -0
- package/src/components/Drawer/Drawer.scss +0 -1
- 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 +59 -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/components/Modal/modal.scss +1 -1
- package/src/components/MultiSelect/MultiSelect.scss +2 -2
- package/src/components/RadioButton/RadioButton.scss +74 -68
- package/src/components/RadioButton/RadioButton.tsx +22 -15
- package/src/components/RadioButton/radioButtonTypes.tsx +18 -0
- package/src/components/RadioGroup/RadioGroup.stories.tsx +42 -1
- package/src/components/RadioGroup/RadioGroup.tsx +3 -0
- package/src/components/RadioGroup/radioGroupTypes.tsx +18 -0
- package/src/components/Select/Select.scss +1 -2
- package/src/components/Select/Select.tsx +3 -2
- package/src/components/Select/types.ts +5 -0
- package/src/components/SequentialConnectingBranch/components/Branches/Branches.scss +5 -5
- package/src/components/SequentialConnectingBranch/components/Branches/Branches.tsx +1 -1
- package/src/components/Table/Table.scss +1 -0
- package/src/components/Table/Table.tsx +28 -13
- package/src/components/Table/Types.ts +8 -0
- package/src/components/TableTree/TableTree.scss +18 -2
- package/src/components/TableTree/TableTree.stories.tsx +9 -51
- package/src/components/TableTree/TableTree.tsx +15 -2
- package/src/index.ts +4 -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
|
|
@@ -89,8 +109,17 @@ import AppSwitchIcon from '../../assets/icons/app_switch.svg?react';
|
|
89
109
|
import UserProfile from '../../assets/icons/user_profile.svg?react';
|
90
110
|
import ContinueSignIn from '../../assets/icons/continue_without_sign.svg?react';
|
91
111
|
import CloudServerHost from '../../assets/icons/cloud_server_host_icon.svg?react';
|
112
|
+
import NotificationIcon from '../../assets/icons/notification_icon.svg?react';
|
113
|
+
import NLPHelpIcon from '../../assets/icons/nlp_help_icon.svg?react';
|
114
|
+
import UpdateIcon from '../../assets/icons/update_icon.svg?react';
|
115
|
+
import AddFile from '../../assets/icons/add_file.svg?react';
|
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';
|
92
122
|
|
93
|
-
//icons
|
94
123
|
Components['delete_info'] = DeleteInfoIcon;
|
95
124
|
Components['success'] = ToastSuccessIcon;
|
96
125
|
Components['warning'] = WarningIcon;
|
@@ -133,6 +162,23 @@ Components['delete'] = DeleteIcon;
|
|
133
162
|
Components['details'] = DetailsIcon;
|
134
163
|
Components['impactList'] = ImpactListIcon;
|
135
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;
|
136
182
|
Components['info'] = InfoIcon;
|
137
183
|
Components['calendar_icon'] = CalendarIcon;
|
138
184
|
Components['hide_icon'] = HideIcon;
|
@@ -178,5 +224,17 @@ Components['app_switch'] = AppSwitchIcon;
|
|
178
224
|
Components['user_profile'] = UserProfile;
|
179
225
|
Components['continue_without_signin'] = ContinueSignIn;
|
180
226
|
Components['cloud_server_host'] = CloudServerHost;
|
227
|
+
Components['notification_icon'] = NotificationIcon;
|
228
|
+
Components['nlp_help_icon'] = NLPHelpIcon;
|
229
|
+
Components['update_icon'] = UpdateIcon;
|
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;
|
181
239
|
|
182
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
|
+
|
@@ -12,87 +12,93 @@
|
|
12
12
|
transition: $properties $duration;
|
13
13
|
}
|
14
14
|
|
15
|
-
.ff-radio {
|
16
|
-
@extend .fontSm;
|
17
|
-
position: relative;
|
18
|
-
color: var(--text-color);
|
15
|
+
.ff-radio-wrapper {
|
19
16
|
display: flex;
|
20
17
|
align-items: center;
|
21
|
-
|
22
|
-
.ff-radio-input {
|
23
|
-
display: none;
|
24
|
-
}
|
25
|
-
.ff-radio-custom {
|
26
|
-
box-sizing: content-box;
|
27
|
-
@include circle(14px, 1px solid var(--radio-button-border)); //todo
|
28
|
-
position: relative;
|
29
|
-
margin-right: 8px;
|
30
|
-
@include transition(border-color, background-color);
|
18
|
+
gap: 4px;
|
31
19
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
20
|
+
.ff-radio {
|
21
|
+
@extend .fontSm;
|
22
|
+
position: relative;
|
23
|
+
color: var(--text-color);
|
24
|
+
display: flex;
|
25
|
+
align-items: center;
|
26
|
+
cursor: pointer;
|
27
|
+
.ff-radio-input {
|
28
|
+
display: none;
|
41
29
|
}
|
30
|
+
.ff-radio-custom {
|
31
|
+
box-sizing: content-box;
|
32
|
+
@include circle(14px, 1px solid var(--radio-button-border)); //todo
|
33
|
+
position: relative;
|
34
|
+
margin-right: 8px;
|
35
|
+
@include transition(border-color, background-color);
|
42
36
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
}
|
37
|
+
&::before {
|
38
|
+
content: '';
|
39
|
+
@include circle(12px);
|
40
|
+
background: #fbfdff; //todo
|
41
|
+
position: absolute;
|
42
|
+
top: 50%;
|
43
|
+
left: 50%;
|
44
|
+
transform: translate(-50%, -50%);
|
45
|
+
@include transition(background-color);
|
46
|
+
}
|
54
47
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
48
|
+
&::after {
|
49
|
+
content: '';
|
50
|
+
@include circle(16px, 4px solid #f7edff); //todo
|
51
|
+
position: absolute;
|
52
|
+
top: 50%;
|
53
|
+
left: 50%;
|
54
|
+
transform: translate(-50%, -50%);
|
55
|
+
opacity: 0;
|
56
|
+
@include transition(opacity);
|
57
|
+
}
|
63
58
|
}
|
64
|
-
}
|
65
|
-
.ff-radio-input:checked + .ff-radio-custom {
|
66
|
-
border-color: var(--brand-color);
|
67
59
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
60
|
+
&:hover .ff-radio-custom {
|
61
|
+
border: 1px solid var(--brand-color);
|
62
|
+
&::before {
|
63
|
+
background-color: var(--drawer-footer-bg);
|
64
|
+
}
|
65
|
+
&::after {
|
66
|
+
opacity: 1;
|
67
|
+
@include transition(opacity);
|
68
|
+
}
|
72
69
|
}
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
70
|
+
.ff-radio-input:checked + .ff-radio-custom {
|
71
|
+
border-color: var(--brand-color);
|
72
|
+
|
73
|
+
&::before {
|
74
|
+
background: var(--brand-color);
|
75
|
+
height: 12px;
|
76
|
+
width: 12px;
|
77
|
+
}
|
78
78
|
}
|
79
|
+
.ff-radio-input:disabled + .ff-radio-custom {
|
80
|
+
border: 1px solid var(--radio-button-border);
|
81
|
+
&::before {
|
82
|
+
background: var(--drawer-footer-bg);
|
83
|
+
}
|
79
84
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
85
|
+
&::after {
|
86
|
+
border: 4px solid var(--radio-button-hover);
|
87
|
+
opacity: 0;
|
88
|
+
@include transition(opacity);
|
89
|
+
}
|
84
90
|
}
|
85
|
-
}
|
86
91
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
+
.ff-radio-input:checked:disabled + .ff-radio-custom {
|
93
|
+
border-color: var(--brand-color);
|
94
|
+
background-color: var(--drawer-footer-bg);
|
95
|
+
&::before {
|
96
|
+
background: var(--brand-color);
|
97
|
+
}
|
98
|
+
}
|
99
|
+
&--disabled {
|
100
|
+
cursor: default;
|
101
|
+
opacity: 0.5;
|
92
102
|
}
|
93
|
-
}
|
94
|
-
&--disabled {
|
95
|
-
cursor: default;
|
96
|
-
opacity: 0.5;
|
97
103
|
}
|
98
104
|
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import './RadioButton.scss';
|
3
3
|
import classNames from 'classnames';
|
4
|
+
import Tooltip from '../Tooltip';
|
4
5
|
|
5
6
|
const RadioButton: React.FC<RadioButtonProps> = ({
|
6
7
|
label,
|
@@ -9,23 +10,29 @@ const RadioButton: React.FC<RadioButtonProps> = ({
|
|
9
10
|
onChange,
|
10
11
|
value,
|
11
12
|
disabled = false,
|
13
|
+
showTooltip = false,
|
14
|
+
tooltipChildren = 'Custom JSX',
|
15
|
+
tooltipTitle = 'Custom JSX',
|
12
16
|
}) => {
|
13
17
|
return (
|
14
|
-
<
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
18
|
+
<div className="ff-radio-wrapper">
|
19
|
+
<label
|
20
|
+
className={classNames('ff-radio', { 'ff-radio--disabled': disabled })}
|
21
|
+
>
|
22
|
+
<input
|
23
|
+
disabled={disabled}
|
24
|
+
type="radio"
|
25
|
+
name={name}
|
26
|
+
value={value}
|
27
|
+
checked={checked}
|
28
|
+
onChange={onChange}
|
29
|
+
className="ff-radio-input"
|
30
|
+
/>
|
31
|
+
<span className="ff-radio-custom" />
|
32
|
+
{label}
|
33
|
+
</label>
|
34
|
+
{showTooltip && <Tooltip title={tooltipTitle}>{tooltipChildren}</Tooltip>}
|
35
|
+
</div>
|
29
36
|
);
|
30
37
|
};
|
31
38
|
|
@@ -37,4 +37,22 @@ interface RadioButtonProps {
|
|
37
37
|
* Optional.
|
38
38
|
*/
|
39
39
|
disabled?: boolean;
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Indicates whether the radio button show the tooltip.
|
43
|
+
* Optional.
|
44
|
+
*/
|
45
|
+
showTooltip?: boolean;
|
46
|
+
|
47
|
+
/**
|
48
|
+
* The content of the tooltip.
|
49
|
+
* Optional.
|
50
|
+
*/
|
51
|
+
tooltipChildren?: React.ReactNode;
|
52
|
+
|
53
|
+
/**
|
54
|
+
* The content of the tooltip.
|
55
|
+
* Optional.
|
56
|
+
*/
|
57
|
+
tooltipTitle?: React.ReactNode;
|
40
58
|
}
|