@lunit/design-system 2.0.2 → 2.2.0
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/README.md +107 -7
- package/dist/cjs/components/Alert/index.js +1 -1
- package/dist/cjs/components/Alert/index.js.map +1 -1
- package/dist/cjs/components/Button/index.js +1 -1
- package/dist/cjs/components/Button/index.js.map +1 -1
- package/dist/cjs/components/Checkbox/index.js +1 -1
- package/dist/cjs/components/Checkbox/index.js.map +1 -1
- package/dist/cjs/components/Chip/index.js +1 -1
- package/dist/cjs/components/Chip/index.js.map +1 -1
- package/dist/cjs/components/DataTable/index.js.map +1 -1
- package/dist/cjs/components/DatePicker/index.js.map +1 -1
- package/dist/cjs/components/Dialog/index.js +1 -1
- package/dist/cjs/components/Dialog/index.js.map +1 -1
- package/dist/cjs/components/Dropdown/index.js +1 -1
- package/dist/cjs/components/Dropdown/index.js.map +1 -1
- package/dist/cjs/components/FormLabel/index.js +1 -1
- package/dist/cjs/components/FormLabel/index.js.map +1 -1
- package/dist/cjs/components/Radio/index.js +1 -1
- package/dist/cjs/components/Radio/index.js.map +1 -1
- package/dist/cjs/components/RadioGroup/index.js.map +1 -1
- package/dist/cjs/components/TextField/index.js +1 -1
- package/dist/cjs/components/TextField/index.js.map +1 -1
- package/dist/cjs/components/Toggle/index.js +1 -1
- package/dist/cjs/components/Toggle/index.js.map +1 -1
- package/dist/cjs/components/ToggleButton/index.js +1 -1
- package/dist/cjs/components/ToggleButton/index.js.map +1 -1
- package/dist/cjs/components/Tooltip/index.js.map +1 -1
- package/dist/cjs/components/Typography/index.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/components/Chip/Chip.styled.js +9 -16
- package/dist/components/Chip/Chip.styled.js.map +1 -1
- package/dist/components/Dialog/Dialog.js +0 -6
- package/dist/components/Dialog/Dialog.js.map +1 -1
- package/dist/components/Dropdown/Dropdown.js +37 -4
- package/dist/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/components/Dropdown/Dropdown.styled.js +161 -0
- package/dist/components/Dropdown/Dropdown.styled.js.map +1 -0
- package/dist/components/Dropdown/Dropdown.types.js +2 -0
- package/dist/components/Dropdown/Dropdown.types.js.map +1 -0
- package/dist/components/Dropdown/DropdownItem.js +36 -0
- package/dist/components/Dropdown/DropdownItem.js.map +1 -0
- package/dist/components/Dropdown/index.js +1 -0
- package/dist/components/Dropdown/index.js.map +1 -1
- package/dist/components/TextField/TextField.js +1 -1
- package/dist/components/TextField/TextField.js.map +1 -1
- package/dist/components/TextField/TextField.style.js +27 -3
- package/dist/components/TextField/TextField.style.js.map +1 -1
- package/dist/foundation/Typography/index.js +5 -0
- package/dist/foundation/Typography/index.js.map +1 -1
- package/dist/foundation/Typography/tokens.js +44 -0
- package/dist/foundation/Typography/tokens.js.map +1 -1
- package/dist/foundation/colors/base/blue.js +12 -10
- package/dist/foundation/colors/base/blue.js.map +1 -1
- package/dist/foundation/colors/base/green.js +11 -9
- package/dist/foundation/colors/base/green.js.map +1 -1
- package/dist/foundation/colors/base/grey.js +30 -15
- package/dist/foundation/colors/base/grey.js.map +1 -1
- package/dist/foundation/colors/base/lunitTeal.js +2 -0
- package/dist/foundation/colors/base/lunitTeal.js.map +1 -1
- package/dist/foundation/colors/base/magenta.js +3 -1
- package/dist/foundation/colors/base/magenta.js.map +1 -1
- package/dist/foundation/colors/base/orange.js +11 -9
- package/dist/foundation/colors/base/orange.js.map +1 -1
- package/dist/foundation/colors/base/purple.js +3 -1
- package/dist/foundation/colors/base/purple.js.map +1 -1
- package/dist/foundation/colors/base/red.js +5 -3
- package/dist/foundation/colors/base/red.js.map +1 -1
- package/dist/foundation/colors/base/yellow.js +12 -10
- package/dist/foundation/colors/base/yellow.js.map +1 -1
- package/dist/foundation/colors/index.js +3 -0
- package/dist/foundation/colors/index.js.map +1 -1
- package/dist/foundation/colors/token/component.js +26 -22
- package/dist/foundation/colors/token/component.js.map +1 -1
- package/dist/foundation/colors/token/core.js +21 -0
- package/dist/foundation/colors/token/core.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/components/Button/Button.styled.d.ts +35 -50
- package/dist/types/components/Chip/Chip.styled.d.ts +4 -76
- package/dist/types/components/Chip/Chip.types.d.ts +1 -1
- package/dist/types/components/Dialog/Dialog.d.ts +0 -3
- package/dist/types/components/Dropdown/Dropdown.d.ts +3 -1
- package/dist/types/components/Dropdown/Dropdown.styled.d.ts +7 -0
- package/dist/types/components/Dropdown/Dropdown.types.d.ts +11 -0
- package/dist/types/components/Dropdown/DropdownItem.d.ts +13 -0
- package/dist/types/components/Dropdown/index.d.ts +2 -0
- package/dist/types/components/TextField/TextField.types.d.ts +1 -1
- package/dist/types/components/TextField/TextFieldIcon.d.ts +1 -1
- package/dist/types/components/ToggleButton/ToggleButton.styled.d.ts +1 -32
- package/dist/types/components/Typography/Typography.d.ts +1 -1
- package/dist/types/foundation/Typography/index.d.ts +21 -1
- package/dist/types/foundation/Typography/tokens.d.ts +15 -0
- package/dist/types/foundation/colors/base/blue.d.ts +2 -0
- package/dist/types/foundation/colors/base/green.d.ts +2 -0
- package/dist/types/foundation/colors/base/grey.d.ts +15 -0
- package/dist/types/foundation/colors/base/lunitTeal.d.ts +2 -0
- package/dist/types/foundation/colors/base/magenta.d.ts +2 -0
- package/dist/types/foundation/colors/base/orange.d.ts +2 -0
- package/dist/types/foundation/colors/base/purple.d.ts +2 -0
- package/dist/types/foundation/colors/base/red.d.ts +2 -0
- package/dist/types/foundation/colors/base/yellow.d.ts +2 -0
- package/dist/types/foundation/colors/index.d.ts +3 -0
- package/dist/types/foundation/colors/types.d.ts +3 -0
- package/dist/types/foundation/index.d.ts +3 -0
- package/dist/types/index.d.ts +1 -1
- package/package.json +20 -22
- package/src/components/Chip/Chip.styled.ts +9 -16
- package/src/components/Chip/Chip.types.ts +2 -0
- package/src/components/Dialog/Dialog.tsx +0 -8
- package/src/components/Dropdown/Dropdown.styled.tsx +170 -0
- package/src/components/Dropdown/Dropdown.tsx +59 -8
- package/src/components/Dropdown/Dropdown.types.ts +17 -0
- package/src/components/Dropdown/DropdownItem.tsx +107 -0
- package/src/components/Dropdown/index.ts +6 -0
- package/src/components/TextField/TextField.style.ts +28 -3
- package/src/components/TextField/TextField.tsx +1 -7
- package/src/components/TextField/TextField.types.ts +2 -0
- package/src/components/TextField/TextFieldIcon.tsx +1 -1
- package/src/foundation/Typography/index.ts +10 -0
- package/src/foundation/Typography/tokens.ts +45 -0
- package/src/foundation/colors/base/blue.ts +12 -10
- package/src/foundation/colors/base/green.ts +11 -9
- package/src/foundation/colors/base/grey.ts +30 -15
- package/src/foundation/colors/base/lunitTeal.ts +2 -0
- package/src/foundation/colors/base/magenta.ts +3 -1
- package/src/foundation/colors/base/orange.ts +11 -9
- package/src/foundation/colors/base/purple.ts +3 -1
- package/src/foundation/colors/base/red.ts +5 -3
- package/src/foundation/colors/base/yellow.ts +12 -10
- package/src/foundation/colors/index.ts +3 -0
- package/src/foundation/colors/token/component.ts +26 -22
- package/src/foundation/colors/token/core.ts +21 -0
- package/src/foundation/colors/types.ts +3 -0
- package/src/index.ts +6 -1
- package/src/stories/GettingStarted.mdx +10 -16
- package/src/stories/components/Alert/Alert.stories.tsx +3 -3
- package/src/stories/components/Button/BasicButton.stories.tsx +2 -2
- package/src/stories/components/Button/ButtonDocs.mdx +1 -1
- package/src/stories/components/Button/Color.stories.tsx +2 -2
- package/src/stories/components/Button/IconButton.stories.tsx +2 -2
- package/src/stories/components/Button/Kind.stories.tsx +2 -2
- package/src/stories/components/CheckBox/BasicCheckbox.stories.tsx +2 -2
- package/src/stories/components/CheckBox/CheckboxDocs.mdx +1 -1
- package/src/stories/components/Chip/Chip.stories.tsx +20 -2
- package/src/stories/components/Chip/ChipDocs.mdx +21 -1
- package/src/stories/components/DataTable/DataTable.stories.tsx +1 -1
- package/src/stories/components/DatePicker/DatePicker.stories.tsx +1 -1
- package/src/stories/components/Dialog/Dialog.stories.tsx +19 -8
- package/src/stories/components/Dialog/DialogDocs.mdx +3 -11
- package/src/stories/components/Dropdown/Dropdown.stories.tsx +299 -10
- package/src/stories/components/Dropdown/DropdownExamples.stories.tsx +221 -0
- package/src/stories/components/Dropdown/DropdownItem.stories.tsx +360 -0
- package/src/stories/components/SelectControl/RadioGroup.stories.tsx +1 -1
- package/src/stories/components/SelectControl/RadioStatus.stories.tsx +1 -1
- package/src/stories/components/SelectControl/Toggle.stories.tsx +2 -2
- package/src/stories/components/TextField/BasicTextField.stories.tsx +37 -16
- package/src/stories/components/TextField/TextFieldDocs.mdx +13 -1
- package/src/stories/components/TextField/TextFieldMulti.stories.tsx +8 -11
- package/src/stories/components/TextField/TextFieldSingle.stories.tsx +8 -11
- package/src/stories/components/TextField/TextFieldSize.stories.tsx +7 -8
- package/src/stories/components/Toast/Toast.stories.tsx +8 -3
- package/src/stories/components/ToggleButton/Basic.stories.tsx +152 -113
- package/src/stories/components/ToggleButton/ToggleButtonDocs.mdx +1 -1
- package/src/stories/components/ToggleButton/ToggleButtonKind.stories.tsx +5 -5
- package/src/stories/components/ToggleButton/WithIcon.stories.tsx +2 -2
- package/src/stories/components/Tooltip/Tooltip.stories.tsx +1 -1
- package/src/stories/foundation/Elevation/Elevation.stories.tsx +1 -20
- package/src/stories/foundation/Typography/Typography.mdx +1 -1
- package/src/stories/foundation/Typography/Typography.stories.tsx +14 -1
- package/src/stories/foundation/Typography/const.ts +6 -1
- package/src/stories/foundation/colors/Colors.stories.tsx +2 -2
- package/src/stories/foundation/colors/Docs.mdx +1 -1
- package/src/stories/foundation/colors/Mui.stories.tsx +1 -1
- package/src/stories/foundation/colors/Token.inComponent.stories.tsx +1 -1
- package/src/stories/foundation/colors/TokenPaletteTable.stories.tsx +1 -1
- package/src/stories/foundation/colors/TokenPaletteTable.tsx +19 -1
- package/tsconfig.json +0 -1
- package/dist/cjs/components/Modal/index.js +0 -2
- package/dist/cjs/components/Modal/index.js.map +0 -1
- package/dist/components/Modal/Modal.js +0 -7
- package/dist/components/Modal/Modal.js.map +0 -1
- package/dist/components/Modal/index.js +0 -2
- package/dist/components/Modal/index.js.map +0 -1
- package/dist/types/components/Modal/Modal.d.ts +0 -2
- package/dist/types/components/Modal/index.d.ts +0 -1
- package/src/stories/components/ToggleButton/Group.stories.tsx +0 -221
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { StoryFn, Meta, StoryObj } from "@storybook/react-webpack5";
|
|
3
|
+
|
|
4
|
+
import Dropdown, { DropdownItem } from "@/components/Dropdown";
|
|
5
|
+
import {
|
|
6
|
+
Box,
|
|
7
|
+
SelectChangeEvent,
|
|
8
|
+
Table,
|
|
9
|
+
TableBody,
|
|
10
|
+
TableCell,
|
|
11
|
+
TableHead,
|
|
12
|
+
TableRow,
|
|
13
|
+
} from "@mui/material";
|
|
14
|
+
import Button from "@/components/Button";
|
|
15
|
+
|
|
16
|
+
export default {
|
|
17
|
+
title: "Components/Dropdown",
|
|
18
|
+
component: Dropdown,
|
|
19
|
+
argTypes: {
|
|
20
|
+
size: {
|
|
21
|
+
control: {
|
|
22
|
+
type: "radio",
|
|
23
|
+
},
|
|
24
|
+
options: ["small", "medium", "large"],
|
|
25
|
+
description: "The size of the dropdown. Default is medium.",
|
|
26
|
+
},
|
|
27
|
+
select: {
|
|
28
|
+
control: {
|
|
29
|
+
type: "radio",
|
|
30
|
+
},
|
|
31
|
+
options: ["single", "multiple"],
|
|
32
|
+
description: "The select type of the dropdown. Default is single.",
|
|
33
|
+
},
|
|
34
|
+
error: {
|
|
35
|
+
control: {
|
|
36
|
+
type: "radio",
|
|
37
|
+
},
|
|
38
|
+
options: [true, false],
|
|
39
|
+
description: "The error prop toggles the error state.",
|
|
40
|
+
},
|
|
41
|
+
disabled: {
|
|
42
|
+
control: {
|
|
43
|
+
type: "radio",
|
|
44
|
+
},
|
|
45
|
+
options: [true, false],
|
|
46
|
+
description: "If true, the text field will be disabled.",
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
} as Meta<typeof Dropdown>;
|
|
50
|
+
|
|
51
|
+
const dropdownContent = {
|
|
52
|
+
test1: "Conquer cancer through AI",
|
|
53
|
+
test2: "test item 2",
|
|
54
|
+
test3: "test item 3",
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const DropdownExampleTemplate: StoryFn<typeof Dropdown> = (args, context) => {
|
|
58
|
+
const classNameFromGlobal = context.globals.theme;
|
|
59
|
+
|
|
60
|
+
const [ex1selectedValue, setEx1SelectedValue] = useState<string>("");
|
|
61
|
+
const handleEx1SelectedValueChange = (event: SelectChangeEvent<unknown>) => {
|
|
62
|
+
const {
|
|
63
|
+
target: { value },
|
|
64
|
+
} = event;
|
|
65
|
+
setEx1SelectedValue(value as string);
|
|
66
|
+
};
|
|
67
|
+
const [ex2selectedValue, setEx2SelectedValue] = useState<string[]>([]);
|
|
68
|
+
const handleEx2SelectedValueChange = (event: SelectChangeEvent<unknown>) => {
|
|
69
|
+
const {
|
|
70
|
+
target: { value },
|
|
71
|
+
} = event;
|
|
72
|
+
setEx2SelectedValue(
|
|
73
|
+
// On autofill we get a stringified value.
|
|
74
|
+
typeof value === "string" ? value.split(",") : (value as string[]),
|
|
75
|
+
);
|
|
76
|
+
};
|
|
77
|
+
const [ex3selectedValue, setEx3SelectedValue] = useState<string>("test1");
|
|
78
|
+
const handleEx3SelectedValueChange = (event: SelectChangeEvent<unknown>) => {
|
|
79
|
+
const {
|
|
80
|
+
target: { value },
|
|
81
|
+
} = event;
|
|
82
|
+
setEx3SelectedValue(value as string);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const [open, setOpen] = useState(false);
|
|
86
|
+
const handleClose = () => {
|
|
87
|
+
setOpen(false);
|
|
88
|
+
};
|
|
89
|
+
const handleOpen = () => {
|
|
90
|
+
setOpen(true);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<Table sx={{ maxWidth: "1200px" }}>
|
|
95
|
+
<TableHead>
|
|
96
|
+
<TableRow>
|
|
97
|
+
<TableCell sx={{ typography: "body2_14_medium", color: "inherit" }}>
|
|
98
|
+
Using placeholder Example
|
|
99
|
+
</TableCell>
|
|
100
|
+
<TableCell sx={{ typography: "body2_14_medium", color: "inherit" }}>
|
|
101
|
+
Dropdown with Button Example
|
|
102
|
+
</TableCell>
|
|
103
|
+
</TableRow>
|
|
104
|
+
</TableHead>
|
|
105
|
+
<TableBody>
|
|
106
|
+
<TableRow>
|
|
107
|
+
<TableCell>
|
|
108
|
+
{/* This placeholder examples are referenced from MUI demo https://v5.mui.com/material-ui/react-select/#placeholder */}
|
|
109
|
+
{/* Example 1 (Placeholder with Single select) */}
|
|
110
|
+
<Dropdown
|
|
111
|
+
className={classNameFromGlobal}
|
|
112
|
+
sx={{ width: "200px" }}
|
|
113
|
+
value={ex1selectedValue}
|
|
114
|
+
onChange={handleEx1SelectedValueChange}
|
|
115
|
+
displayEmpty // to make the placeholder visible. Refer to the following URL: https://v5.mui.com/material-ui/api/select/#select-prop-displayEmpty
|
|
116
|
+
renderValue={(selected) => {
|
|
117
|
+
if (!selected) {
|
|
118
|
+
return (
|
|
119
|
+
<Box
|
|
120
|
+
sx={{
|
|
121
|
+
color: (theme) =>
|
|
122
|
+
theme.palette.lunit_token.core.text_light,
|
|
123
|
+
}}
|
|
124
|
+
>
|
|
125
|
+
Placeholder Single
|
|
126
|
+
</Box>
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
return dropdownContent[
|
|
130
|
+
selected as keyof typeof dropdownContent
|
|
131
|
+
];
|
|
132
|
+
}}
|
|
133
|
+
>
|
|
134
|
+
{Object.entries(dropdownContent).map(([key, text]) => (
|
|
135
|
+
<DropdownItem key={key} value={key}>
|
|
136
|
+
{text}
|
|
137
|
+
</DropdownItem>
|
|
138
|
+
))}
|
|
139
|
+
</Dropdown>
|
|
140
|
+
|
|
141
|
+
{/* Example 2 (Placeholder with Multiple select) */}
|
|
142
|
+
<Dropdown
|
|
143
|
+
className={classNameFromGlobal}
|
|
144
|
+
sx={{ width: "200px" }}
|
|
145
|
+
value={ex2selectedValue}
|
|
146
|
+
onChange={handleEx2SelectedValueChange}
|
|
147
|
+
select="multiple"
|
|
148
|
+
displayEmpty
|
|
149
|
+
renderValue={(selected) => {
|
|
150
|
+
if ((selected as string[]).length === 0) {
|
|
151
|
+
return (
|
|
152
|
+
<Box
|
|
153
|
+
sx={{
|
|
154
|
+
color: (theme) =>
|
|
155
|
+
theme.palette.lunit_token.core.text_light,
|
|
156
|
+
}}
|
|
157
|
+
>
|
|
158
|
+
Placeholder multiple
|
|
159
|
+
</Box>
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
return (selected as string[])
|
|
163
|
+
.map(
|
|
164
|
+
(value) =>
|
|
165
|
+
dropdownContent[value as keyof typeof dropdownContent],
|
|
166
|
+
)
|
|
167
|
+
.join(", ");
|
|
168
|
+
}}
|
|
169
|
+
>
|
|
170
|
+
{Object.entries(dropdownContent).map(([key, text]) => (
|
|
171
|
+
<DropdownItem key={key} value={key}>
|
|
172
|
+
{text}
|
|
173
|
+
</DropdownItem>
|
|
174
|
+
))}
|
|
175
|
+
</Dropdown>
|
|
176
|
+
</TableCell>
|
|
177
|
+
<TableCell>
|
|
178
|
+
{/* Example 3 (Button dropdown) */}
|
|
179
|
+
<Box sx={{ position: "relative" }}>
|
|
180
|
+
<Button onClick={handleOpen}>Dropdown Button</Button>
|
|
181
|
+
<Dropdown
|
|
182
|
+
value={ex3selectedValue}
|
|
183
|
+
onChange={handleEx3SelectedValueChange}
|
|
184
|
+
open={open}
|
|
185
|
+
onClose={handleClose}
|
|
186
|
+
onOpen={handleOpen}
|
|
187
|
+
sx={{
|
|
188
|
+
clip: "rect(0 0 0 0)",
|
|
189
|
+
clipPath: "inset(50%)",
|
|
190
|
+
height: "1px",
|
|
191
|
+
overflow: "hidden",
|
|
192
|
+
position: "absolute",
|
|
193
|
+
bottom: 0,
|
|
194
|
+
left: 0,
|
|
195
|
+
whiteSpace: "nowrap",
|
|
196
|
+
width: "1px",
|
|
197
|
+
}}
|
|
198
|
+
>
|
|
199
|
+
{Object.entries(dropdownContent).map(([key, text]) => (
|
|
200
|
+
<DropdownItem key={key} value={key}>
|
|
201
|
+
{text}
|
|
202
|
+
</DropdownItem>
|
|
203
|
+
))}
|
|
204
|
+
</Dropdown>
|
|
205
|
+
</Box>
|
|
206
|
+
</TableCell>
|
|
207
|
+
</TableRow>
|
|
208
|
+
</TableBody>
|
|
209
|
+
</Table>
|
|
210
|
+
);
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
export const DropdownExamples: StoryObj<typeof Dropdown> = {
|
|
214
|
+
render: DropdownExampleTemplate,
|
|
215
|
+
parameters: {
|
|
216
|
+
controls: {
|
|
217
|
+
include: [],
|
|
218
|
+
},
|
|
219
|
+
chromatic: { disableSnapshot: true },
|
|
220
|
+
},
|
|
221
|
+
};
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { StoryFn, Meta, StoryObj } from "@storybook/react-webpack5";
|
|
3
|
+
|
|
4
|
+
import Dropdown, {
|
|
5
|
+
DropdownDivider,
|
|
6
|
+
DropdownItem,
|
|
7
|
+
DropdownSubtitle,
|
|
8
|
+
} from "@/components/Dropdown";
|
|
9
|
+
import {
|
|
10
|
+
Box,
|
|
11
|
+
SelectChangeEvent,
|
|
12
|
+
Table,
|
|
13
|
+
TableBody,
|
|
14
|
+
TableCell,
|
|
15
|
+
TableHead,
|
|
16
|
+
TableRow,
|
|
17
|
+
} from "@mui/material";
|
|
18
|
+
import Demo from "@lunit/design-system-icons/Demo";
|
|
19
|
+
import ViewfinderT1 from "@lunit/design-system-icons/ViewfinderT1";
|
|
20
|
+
import RulerT2 from "@lunit/design-system-icons/RulerT2";
|
|
21
|
+
|
|
22
|
+
export default {
|
|
23
|
+
title: "Components/Dropdown",
|
|
24
|
+
component: DropdownItem,
|
|
25
|
+
argTypes: {
|
|
26
|
+
leftIcon: {
|
|
27
|
+
control: false,
|
|
28
|
+
description: `Use this prop when you want to add icon.
|
|
29
|
+
\n It is added to the left of the text criteria`,
|
|
30
|
+
table: {
|
|
31
|
+
defaultValue: { summary: "undefined" },
|
|
32
|
+
type: { summary: "JSX.Element" },
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
rightText: {
|
|
36
|
+
description: "Use this prop when you want to add text.",
|
|
37
|
+
table: {
|
|
38
|
+
defaultValue: { summary: "undefined" },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
isFilledStyle: {
|
|
42
|
+
control: {
|
|
43
|
+
type: "radio",
|
|
44
|
+
},
|
|
45
|
+
options: [true, false],
|
|
46
|
+
description: "Only for GNB or few situations of single select type.",
|
|
47
|
+
table: {
|
|
48
|
+
defaultValue: { summary: "false" },
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
disabled: {
|
|
52
|
+
control: {
|
|
53
|
+
type: "radio",
|
|
54
|
+
},
|
|
55
|
+
options: [true, false],
|
|
56
|
+
description: "If true, the component will be disabled.",
|
|
57
|
+
table: {
|
|
58
|
+
defaultValue: { summary: "false" },
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
parameters: {
|
|
63
|
+
controls: {
|
|
64
|
+
include: ["leftIcon", "rightText", "isFilledStyle", "disabled"],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
} as Meta<typeof DropdownItem>;
|
|
68
|
+
|
|
69
|
+
const BasicDropdownItemTemplate: StoryFn<typeof DropdownItem> = (
|
|
70
|
+
args,
|
|
71
|
+
context,
|
|
72
|
+
) => {
|
|
73
|
+
const classNameFromGlobal = context.globals.theme;
|
|
74
|
+
|
|
75
|
+
const [selectedValue, setSelectedValue] = useState<string>("test1");
|
|
76
|
+
const handleSelectedValueChange = (event: SelectChangeEvent<unknown>) => {
|
|
77
|
+
const {
|
|
78
|
+
target: { value },
|
|
79
|
+
} = event;
|
|
80
|
+
setSelectedValue(value as string);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
return (
|
|
84
|
+
<Box>
|
|
85
|
+
<Dropdown
|
|
86
|
+
className={classNameFromGlobal}
|
|
87
|
+
value={selectedValue}
|
|
88
|
+
onChange={handleSelectedValueChange}
|
|
89
|
+
sx={{ width: "150px" }}
|
|
90
|
+
open={true}
|
|
91
|
+
>
|
|
92
|
+
<DropdownItem value={"test1"} {...args}>
|
|
93
|
+
Conquer cancer through AI
|
|
94
|
+
</DropdownItem>
|
|
95
|
+
<DropdownItem value={"test2"} {...args}>
|
|
96
|
+
test item 2
|
|
97
|
+
</DropdownItem>
|
|
98
|
+
<DropdownItem value={"test3"} {...args}>
|
|
99
|
+
test item 3
|
|
100
|
+
</DropdownItem>
|
|
101
|
+
</Dropdown>
|
|
102
|
+
</Box>
|
|
103
|
+
);
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export const BasicDropdownItem: StoryObj<typeof DropdownItem> = {
|
|
107
|
+
render: BasicDropdownItemTemplate,
|
|
108
|
+
name: "Basic DropdownItem",
|
|
109
|
+
parameters: {
|
|
110
|
+
chromatic: { disableSnapshot: true },
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const DropdownItemSelectStyleTemplate: StoryFn<typeof DropdownItem> = (
|
|
115
|
+
args,
|
|
116
|
+
context,
|
|
117
|
+
) => {
|
|
118
|
+
const classNameFromGlobal = context.globals.theme;
|
|
119
|
+
|
|
120
|
+
const [selectedValue, setSelectedValue] = useState<string>("test1");
|
|
121
|
+
const handleSelectedValueChange = (event: SelectChangeEvent<unknown>) => {
|
|
122
|
+
const {
|
|
123
|
+
target: { value },
|
|
124
|
+
} = event;
|
|
125
|
+
setSelectedValue(value as string);
|
|
126
|
+
};
|
|
127
|
+
const [selectedValue2, setSelectedValue2] = useState<string[]>(["test1"]);
|
|
128
|
+
const handleSelectedValueChange2 = (event: SelectChangeEvent<unknown>) => {
|
|
129
|
+
const {
|
|
130
|
+
target: { value },
|
|
131
|
+
} = event;
|
|
132
|
+
setSelectedValue2(
|
|
133
|
+
// On autofill we get a stringified value.
|
|
134
|
+
typeof value === "string" ? value.split(",") : (value as string[]),
|
|
135
|
+
);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
return (
|
|
139
|
+
<Table sx={{ maxWidth: "1200px" }}>
|
|
140
|
+
<TableHead>
|
|
141
|
+
<TableRow>
|
|
142
|
+
<TableCell sx={{ typography: "body2_14_medium", color: "inherit" }}>
|
|
143
|
+
Single select
|
|
144
|
+
</TableCell>
|
|
145
|
+
<TableCell sx={{ typography: "body2_14_medium", color: "inherit" }}>
|
|
146
|
+
Single select(Filled Style)
|
|
147
|
+
</TableCell>
|
|
148
|
+
<TableCell sx={{ typography: "body2_14_medium", color: "inherit" }}>
|
|
149
|
+
Multiple select
|
|
150
|
+
</TableCell>
|
|
151
|
+
</TableRow>
|
|
152
|
+
</TableHead>
|
|
153
|
+
<TableBody>
|
|
154
|
+
<TableRow>
|
|
155
|
+
<TableCell>
|
|
156
|
+
<Dropdown
|
|
157
|
+
className={classNameFromGlobal}
|
|
158
|
+
value={selectedValue}
|
|
159
|
+
onChange={handleSelectedValueChange}
|
|
160
|
+
sx={{ width: "150px" }}
|
|
161
|
+
>
|
|
162
|
+
<DropdownItem value={"test1"} {...args}>
|
|
163
|
+
Conquer cancer through AI
|
|
164
|
+
</DropdownItem>
|
|
165
|
+
<DropdownItem value={"test2"} {...args}>
|
|
166
|
+
test item 2
|
|
167
|
+
</DropdownItem>
|
|
168
|
+
<DropdownItem value={"test3"} {...args}>
|
|
169
|
+
test item 3
|
|
170
|
+
</DropdownItem>
|
|
171
|
+
</Dropdown>
|
|
172
|
+
</TableCell>
|
|
173
|
+
<TableCell>
|
|
174
|
+
<Dropdown
|
|
175
|
+
className={classNameFromGlobal}
|
|
176
|
+
value={selectedValue}
|
|
177
|
+
onChange={handleSelectedValueChange}
|
|
178
|
+
sx={{ width: "150px" }}
|
|
179
|
+
>
|
|
180
|
+
<DropdownItem value={"test1"} isFilledStyle {...args}>
|
|
181
|
+
Conquer cancer through AI
|
|
182
|
+
</DropdownItem>
|
|
183
|
+
<DropdownItem value={"test2"} isFilledStyle {...args}>
|
|
184
|
+
test item 2
|
|
185
|
+
</DropdownItem>
|
|
186
|
+
<DropdownItem value={"test3"} isFilledStyle {...args}>
|
|
187
|
+
test item 3
|
|
188
|
+
</DropdownItem>
|
|
189
|
+
</Dropdown>
|
|
190
|
+
</TableCell>
|
|
191
|
+
<TableCell>
|
|
192
|
+
<Dropdown
|
|
193
|
+
className={classNameFromGlobal}
|
|
194
|
+
select="multiple"
|
|
195
|
+
value={selectedValue2}
|
|
196
|
+
onChange={handleSelectedValueChange2}
|
|
197
|
+
sx={{ width: "230px" }}
|
|
198
|
+
>
|
|
199
|
+
<DropdownItem value={"test1"} {...args}>
|
|
200
|
+
test item1
|
|
201
|
+
</DropdownItem>
|
|
202
|
+
<DropdownItem value={"test2"} {...args}>
|
|
203
|
+
test item 2
|
|
204
|
+
</DropdownItem>
|
|
205
|
+
<DropdownItem value={"test3"} {...args}>
|
|
206
|
+
test item 3
|
|
207
|
+
</DropdownItem>
|
|
208
|
+
</Dropdown>
|
|
209
|
+
</TableCell>
|
|
210
|
+
</TableRow>
|
|
211
|
+
</TableBody>
|
|
212
|
+
</Table>
|
|
213
|
+
);
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
export const DropdownItemSelectStyle: StoryObj<typeof DropdownItem> = {
|
|
217
|
+
render: DropdownItemSelectStyleTemplate,
|
|
218
|
+
name: "DropdownItem : Style by Select Type",
|
|
219
|
+
parameters: {
|
|
220
|
+
controls: {
|
|
221
|
+
include: [],
|
|
222
|
+
},
|
|
223
|
+
chromatic: { disableSnapshot: true },
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
const DropdownItemWithIconTextTemplate: StoryFn<typeof DropdownItem> = (
|
|
228
|
+
args,
|
|
229
|
+
context,
|
|
230
|
+
) => {
|
|
231
|
+
const classNameFromGlobal = context.globals.theme;
|
|
232
|
+
|
|
233
|
+
const [selectedValue, setSelectedValue] = useState<string>("test1");
|
|
234
|
+
const handleSelectedValueChange = (event: SelectChangeEvent<unknown>) => {
|
|
235
|
+
const {
|
|
236
|
+
target: { value },
|
|
237
|
+
} = event;
|
|
238
|
+
setSelectedValue(value as string);
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
return (
|
|
242
|
+
<Box>
|
|
243
|
+
<Dropdown
|
|
244
|
+
className={classNameFromGlobal}
|
|
245
|
+
value={selectedValue}
|
|
246
|
+
onChange={handleSelectedValueChange}
|
|
247
|
+
sx={{ width: "150px" }}
|
|
248
|
+
open={true}
|
|
249
|
+
>
|
|
250
|
+
<DropdownItem
|
|
251
|
+
value={"test1"}
|
|
252
|
+
leftIcon={<Demo fontSize="small" />}
|
|
253
|
+
rightText="lunit"
|
|
254
|
+
{...args}
|
|
255
|
+
>
|
|
256
|
+
Conquer cancer through AI
|
|
257
|
+
</DropdownItem>
|
|
258
|
+
<DropdownItem
|
|
259
|
+
value={"test2"}
|
|
260
|
+
leftIcon={<RulerT2 fontSize="small" />}
|
|
261
|
+
rightText="design"
|
|
262
|
+
{...args}
|
|
263
|
+
>
|
|
264
|
+
test item 2
|
|
265
|
+
</DropdownItem>
|
|
266
|
+
<DropdownItem
|
|
267
|
+
value={"test3"}
|
|
268
|
+
leftIcon={<ViewfinderT1 fontSize="small" />}
|
|
269
|
+
rightText="system"
|
|
270
|
+
{...args}
|
|
271
|
+
>
|
|
272
|
+
test item 3
|
|
273
|
+
</DropdownItem>
|
|
274
|
+
</Dropdown>
|
|
275
|
+
</Box>
|
|
276
|
+
);
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
export const DropdownItemWithIconText: StoryObj<typeof DropdownItem> = {
|
|
280
|
+
render: DropdownItemWithIconTextTemplate,
|
|
281
|
+
name: "DropdownItem : With Left Icon, Right Text",
|
|
282
|
+
parameters: {
|
|
283
|
+
controls: {
|
|
284
|
+
include: [],
|
|
285
|
+
},
|
|
286
|
+
chromatic: { disableSnapshot: true },
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
const DropdownItemDividerSubtitleTemplate: StoryFn<typeof DropdownItem> = (
|
|
291
|
+
args,
|
|
292
|
+
context,
|
|
293
|
+
) => {
|
|
294
|
+
const classNameFromGlobal = context.globals.theme;
|
|
295
|
+
|
|
296
|
+
const [selectedValue, setSelectedValue] = useState<string>("test1");
|
|
297
|
+
const handleSelectedValueChange = (event: SelectChangeEvent<unknown>) => {
|
|
298
|
+
const {
|
|
299
|
+
target: { value },
|
|
300
|
+
} = event;
|
|
301
|
+
setSelectedValue(value as string);
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
return (
|
|
305
|
+
<Box>
|
|
306
|
+
<Dropdown
|
|
307
|
+
className={classNameFromGlobal}
|
|
308
|
+
value={selectedValue}
|
|
309
|
+
onChange={handleSelectedValueChange}
|
|
310
|
+
sx={{ width: "150px" }}
|
|
311
|
+
open={true}
|
|
312
|
+
>
|
|
313
|
+
<DropdownSubtitle title="Subtitle 1" />
|
|
314
|
+
<DropdownItem
|
|
315
|
+
value={"test1"}
|
|
316
|
+
leftIcon={<Demo fontSize="small" />}
|
|
317
|
+
{...args}
|
|
318
|
+
>
|
|
319
|
+
Conquer cancer through AI
|
|
320
|
+
</DropdownItem>
|
|
321
|
+
<DropdownItem
|
|
322
|
+
value={"test2"}
|
|
323
|
+
leftIcon={<RulerT2 fontSize="small" />}
|
|
324
|
+
{...args}
|
|
325
|
+
>
|
|
326
|
+
test item 2
|
|
327
|
+
</DropdownItem>
|
|
328
|
+
<DropdownItem
|
|
329
|
+
value={"test3"}
|
|
330
|
+
leftIcon={<ViewfinderT1 fontSize="small" />}
|
|
331
|
+
{...args}
|
|
332
|
+
>
|
|
333
|
+
test item 3
|
|
334
|
+
</DropdownItem>
|
|
335
|
+
<DropdownDivider />
|
|
336
|
+
<DropdownSubtitle title="Subtitle 2" />
|
|
337
|
+
<DropdownItem value={"test4"} {...args}>
|
|
338
|
+
Example 1
|
|
339
|
+
</DropdownItem>
|
|
340
|
+
<DropdownItem value={"test5"} {...args}>
|
|
341
|
+
Example 2
|
|
342
|
+
</DropdownItem>
|
|
343
|
+
<DropdownItem value={"test6"} {...args}>
|
|
344
|
+
Example 3
|
|
345
|
+
</DropdownItem>
|
|
346
|
+
</Dropdown>
|
|
347
|
+
</Box>
|
|
348
|
+
);
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
export const DropdownItemDividerSubtitle: StoryObj<typeof DropdownItem> = {
|
|
352
|
+
render: DropdownItemDividerSubtitleTemplate,
|
|
353
|
+
name: "DropdownItem : Divider, Subtitle",
|
|
354
|
+
parameters: {
|
|
355
|
+
controls: {
|
|
356
|
+
include: [],
|
|
357
|
+
},
|
|
358
|
+
chromatic: { disableSnapshot: true },
|
|
359
|
+
},
|
|
360
|
+
};
|
|
@@ -2,7 +2,7 @@ import React, { useEffect } from "react";
|
|
|
2
2
|
import Radio from "@/components/Radio";
|
|
3
3
|
import RadioGroup from "@/components/RadioGroup";
|
|
4
4
|
import FormLabel from "@/components/FormLabel";
|
|
5
|
-
import { Meta, StoryFn } from "@storybook/react";
|
|
5
|
+
import { Meta, StoryFn } from "@storybook/react-webpack5";
|
|
6
6
|
|
|
7
7
|
export default {
|
|
8
8
|
title: "Components/Radio",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useState } from "react";
|
|
2
|
-
import { StoryFn, Meta } from "@storybook/react";
|
|
2
|
+
import { StoryFn, Meta } from "@storybook/react-webpack5";
|
|
3
3
|
import Toggle from "@/components/Toggle/Toggle";
|
|
4
4
|
import {
|
|
5
5
|
Box,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
TextField,
|
|
12
12
|
} from "@mui/material";
|
|
13
13
|
import FormLabel from "@/components/FormLabel";
|
|
14
|
-
import { action } from "
|
|
14
|
+
import { action } from "storybook/actions";
|
|
15
15
|
|
|
16
16
|
export default {
|
|
17
17
|
title: "Components/Toggle",
|
|
@@ -4,7 +4,7 @@ import { Bell } from "@lunit/design-system-icons";
|
|
|
4
4
|
|
|
5
5
|
import TextField from "@/components/TextField/TextField";
|
|
6
6
|
|
|
7
|
-
import type { StoryObj, Meta, StoryFn } from "@storybook/react";
|
|
7
|
+
import type { StoryObj, Meta, StoryFn } from "@storybook/react-webpack5";
|
|
8
8
|
|
|
9
9
|
export default {
|
|
10
10
|
title: "Components/TextField",
|
|
@@ -19,40 +19,33 @@ export default {
|
|
|
19
19
|
},
|
|
20
20
|
argTypes: {
|
|
21
21
|
multiline: {
|
|
22
|
-
control: {
|
|
23
|
-
type: "radio",
|
|
24
|
-
},
|
|
22
|
+
control: { type: "radio" },
|
|
25
23
|
options: [true, false],
|
|
26
24
|
description:
|
|
27
25
|
"The multiline prop transforms the text field into a TextareaAutosize element.",
|
|
28
26
|
},
|
|
29
27
|
error: {
|
|
30
|
-
control: {
|
|
31
|
-
type: "radio",
|
|
32
|
-
},
|
|
28
|
+
control: { type: "radio" },
|
|
33
29
|
options: [true, false],
|
|
34
30
|
description:
|
|
35
31
|
"The error prop toggles the error state. The helperText prop can then be used to provide feedback to the user about the error.",
|
|
36
32
|
},
|
|
37
33
|
disabled: {
|
|
38
|
-
control: {
|
|
39
|
-
type: "radio",
|
|
40
|
-
},
|
|
34
|
+
control: { type: "radio" },
|
|
41
35
|
options: [true, false],
|
|
42
36
|
description: "If true, the text field will be disabled.",
|
|
43
37
|
table: {
|
|
44
|
-
defaultValue: { summary: false },
|
|
45
|
-
type: { summary:
|
|
38
|
+
defaultValue: { summary: "false" },
|
|
39
|
+
type: { summary: "boolean" },
|
|
46
40
|
},
|
|
47
41
|
},
|
|
48
42
|
size: {
|
|
49
|
-
control: {
|
|
50
|
-
|
|
51
|
-
},
|
|
43
|
+
control: { type: "radio" },
|
|
44
|
+
options: ["small", "medium", "large"],
|
|
52
45
|
description: "The size of the text field.",
|
|
53
46
|
table: {
|
|
54
47
|
defaultValue: { summary: "small" },
|
|
55
|
-
type: { summary:
|
|
48
|
+
type: { summary: "string" },
|
|
56
49
|
},
|
|
57
50
|
},
|
|
58
51
|
placeholder: {
|
|
@@ -140,6 +133,34 @@ export const Disabled: StoryObj<typeof TextField> = {
|
|
|
140
133
|
},
|
|
141
134
|
};
|
|
142
135
|
|
|
136
|
+
const ReadOnlyTemplate: StoryFn<typeof TextField> = (args) => {
|
|
137
|
+
return (
|
|
138
|
+
<Box sx={{ display: "flex", gap: 2 }}>
|
|
139
|
+
<TextField
|
|
140
|
+
{...args}
|
|
141
|
+
inputProps={{ readOnly: true }}
|
|
142
|
+
defaultValue="Conquer Cancer through AI."
|
|
143
|
+
/>
|
|
144
|
+
<TextField
|
|
145
|
+
{...args}
|
|
146
|
+
multiline={true}
|
|
147
|
+
inputProps={{ readOnly: true }}
|
|
148
|
+
defaultValue="Conquer Cancer through AI. We develop AI that detects early-stage cancer and optimizes cancer treatment."
|
|
149
|
+
/>
|
|
150
|
+
</Box>
|
|
151
|
+
);
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
export const ReadOnly: StoryObj<typeof TextField> = {
|
|
155
|
+
render: ReadOnlyTemplate,
|
|
156
|
+
parameters: {
|
|
157
|
+
controls: {
|
|
158
|
+
include: ["size", "helperText", "error", "disabled"],
|
|
159
|
+
},
|
|
160
|
+
chromatic: { disableSnapshot: true },
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
|
|
143
164
|
const ErrorTemplate: StoryFn<typeof TextField> = (args) => {
|
|
144
165
|
return (
|
|
145
166
|
<Box sx={{ display: "flex", gap: 2 }}>
|