@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.
Files changed (187) hide show
  1. package/README.md +107 -7
  2. package/dist/cjs/components/Alert/index.js +1 -1
  3. package/dist/cjs/components/Alert/index.js.map +1 -1
  4. package/dist/cjs/components/Button/index.js +1 -1
  5. package/dist/cjs/components/Button/index.js.map +1 -1
  6. package/dist/cjs/components/Checkbox/index.js +1 -1
  7. package/dist/cjs/components/Checkbox/index.js.map +1 -1
  8. package/dist/cjs/components/Chip/index.js +1 -1
  9. package/dist/cjs/components/Chip/index.js.map +1 -1
  10. package/dist/cjs/components/DataTable/index.js.map +1 -1
  11. package/dist/cjs/components/DatePicker/index.js.map +1 -1
  12. package/dist/cjs/components/Dialog/index.js +1 -1
  13. package/dist/cjs/components/Dialog/index.js.map +1 -1
  14. package/dist/cjs/components/Dropdown/index.js +1 -1
  15. package/dist/cjs/components/Dropdown/index.js.map +1 -1
  16. package/dist/cjs/components/FormLabel/index.js +1 -1
  17. package/dist/cjs/components/FormLabel/index.js.map +1 -1
  18. package/dist/cjs/components/Radio/index.js +1 -1
  19. package/dist/cjs/components/Radio/index.js.map +1 -1
  20. package/dist/cjs/components/RadioGroup/index.js.map +1 -1
  21. package/dist/cjs/components/TextField/index.js +1 -1
  22. package/dist/cjs/components/TextField/index.js.map +1 -1
  23. package/dist/cjs/components/Toggle/index.js +1 -1
  24. package/dist/cjs/components/Toggle/index.js.map +1 -1
  25. package/dist/cjs/components/ToggleButton/index.js +1 -1
  26. package/dist/cjs/components/ToggleButton/index.js.map +1 -1
  27. package/dist/cjs/components/Tooltip/index.js.map +1 -1
  28. package/dist/cjs/components/Typography/index.js.map +1 -1
  29. package/dist/cjs/index.js +1 -1
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/components/Chip/Chip.styled.js +9 -16
  32. package/dist/components/Chip/Chip.styled.js.map +1 -1
  33. package/dist/components/Dialog/Dialog.js +0 -6
  34. package/dist/components/Dialog/Dialog.js.map +1 -1
  35. package/dist/components/Dropdown/Dropdown.js +37 -4
  36. package/dist/components/Dropdown/Dropdown.js.map +1 -1
  37. package/dist/components/Dropdown/Dropdown.styled.js +161 -0
  38. package/dist/components/Dropdown/Dropdown.styled.js.map +1 -0
  39. package/dist/components/Dropdown/Dropdown.types.js +2 -0
  40. package/dist/components/Dropdown/Dropdown.types.js.map +1 -0
  41. package/dist/components/Dropdown/DropdownItem.js +36 -0
  42. package/dist/components/Dropdown/DropdownItem.js.map +1 -0
  43. package/dist/components/Dropdown/index.js +1 -0
  44. package/dist/components/Dropdown/index.js.map +1 -1
  45. package/dist/components/TextField/TextField.js +1 -1
  46. package/dist/components/TextField/TextField.js.map +1 -1
  47. package/dist/components/TextField/TextField.style.js +27 -3
  48. package/dist/components/TextField/TextField.style.js.map +1 -1
  49. package/dist/foundation/Typography/index.js +5 -0
  50. package/dist/foundation/Typography/index.js.map +1 -1
  51. package/dist/foundation/Typography/tokens.js +44 -0
  52. package/dist/foundation/Typography/tokens.js.map +1 -1
  53. package/dist/foundation/colors/base/blue.js +12 -10
  54. package/dist/foundation/colors/base/blue.js.map +1 -1
  55. package/dist/foundation/colors/base/green.js +11 -9
  56. package/dist/foundation/colors/base/green.js.map +1 -1
  57. package/dist/foundation/colors/base/grey.js +30 -15
  58. package/dist/foundation/colors/base/grey.js.map +1 -1
  59. package/dist/foundation/colors/base/lunitTeal.js +2 -0
  60. package/dist/foundation/colors/base/lunitTeal.js.map +1 -1
  61. package/dist/foundation/colors/base/magenta.js +3 -1
  62. package/dist/foundation/colors/base/magenta.js.map +1 -1
  63. package/dist/foundation/colors/base/orange.js +11 -9
  64. package/dist/foundation/colors/base/orange.js.map +1 -1
  65. package/dist/foundation/colors/base/purple.js +3 -1
  66. package/dist/foundation/colors/base/purple.js.map +1 -1
  67. package/dist/foundation/colors/base/red.js +5 -3
  68. package/dist/foundation/colors/base/red.js.map +1 -1
  69. package/dist/foundation/colors/base/yellow.js +12 -10
  70. package/dist/foundation/colors/base/yellow.js.map +1 -1
  71. package/dist/foundation/colors/index.js +3 -0
  72. package/dist/foundation/colors/index.js.map +1 -1
  73. package/dist/foundation/colors/token/component.js +26 -22
  74. package/dist/foundation/colors/token/component.js.map +1 -1
  75. package/dist/foundation/colors/token/core.js +21 -0
  76. package/dist/foundation/colors/token/core.js.map +1 -1
  77. package/dist/index.js +1 -1
  78. package/dist/index.js.map +1 -1
  79. package/dist/types/components/Button/Button.styled.d.ts +35 -50
  80. package/dist/types/components/Chip/Chip.styled.d.ts +4 -76
  81. package/dist/types/components/Chip/Chip.types.d.ts +1 -1
  82. package/dist/types/components/Dialog/Dialog.d.ts +0 -3
  83. package/dist/types/components/Dropdown/Dropdown.d.ts +3 -1
  84. package/dist/types/components/Dropdown/Dropdown.styled.d.ts +7 -0
  85. package/dist/types/components/Dropdown/Dropdown.types.d.ts +11 -0
  86. package/dist/types/components/Dropdown/DropdownItem.d.ts +13 -0
  87. package/dist/types/components/Dropdown/index.d.ts +2 -0
  88. package/dist/types/components/TextField/TextField.types.d.ts +1 -1
  89. package/dist/types/components/TextField/TextFieldIcon.d.ts +1 -1
  90. package/dist/types/components/ToggleButton/ToggleButton.styled.d.ts +1 -32
  91. package/dist/types/components/Typography/Typography.d.ts +1 -1
  92. package/dist/types/foundation/Typography/index.d.ts +21 -1
  93. package/dist/types/foundation/Typography/tokens.d.ts +15 -0
  94. package/dist/types/foundation/colors/base/blue.d.ts +2 -0
  95. package/dist/types/foundation/colors/base/green.d.ts +2 -0
  96. package/dist/types/foundation/colors/base/grey.d.ts +15 -0
  97. package/dist/types/foundation/colors/base/lunitTeal.d.ts +2 -0
  98. package/dist/types/foundation/colors/base/magenta.d.ts +2 -0
  99. package/dist/types/foundation/colors/base/orange.d.ts +2 -0
  100. package/dist/types/foundation/colors/base/purple.d.ts +2 -0
  101. package/dist/types/foundation/colors/base/red.d.ts +2 -0
  102. package/dist/types/foundation/colors/base/yellow.d.ts +2 -0
  103. package/dist/types/foundation/colors/index.d.ts +3 -0
  104. package/dist/types/foundation/colors/types.d.ts +3 -0
  105. package/dist/types/foundation/index.d.ts +3 -0
  106. package/dist/types/index.d.ts +1 -1
  107. package/package.json +20 -22
  108. package/src/components/Chip/Chip.styled.ts +9 -16
  109. package/src/components/Chip/Chip.types.ts +2 -0
  110. package/src/components/Dialog/Dialog.tsx +0 -8
  111. package/src/components/Dropdown/Dropdown.styled.tsx +170 -0
  112. package/src/components/Dropdown/Dropdown.tsx +59 -8
  113. package/src/components/Dropdown/Dropdown.types.ts +17 -0
  114. package/src/components/Dropdown/DropdownItem.tsx +107 -0
  115. package/src/components/Dropdown/index.ts +6 -0
  116. package/src/components/TextField/TextField.style.ts +28 -3
  117. package/src/components/TextField/TextField.tsx +1 -7
  118. package/src/components/TextField/TextField.types.ts +2 -0
  119. package/src/components/TextField/TextFieldIcon.tsx +1 -1
  120. package/src/foundation/Typography/index.ts +10 -0
  121. package/src/foundation/Typography/tokens.ts +45 -0
  122. package/src/foundation/colors/base/blue.ts +12 -10
  123. package/src/foundation/colors/base/green.ts +11 -9
  124. package/src/foundation/colors/base/grey.ts +30 -15
  125. package/src/foundation/colors/base/lunitTeal.ts +2 -0
  126. package/src/foundation/colors/base/magenta.ts +3 -1
  127. package/src/foundation/colors/base/orange.ts +11 -9
  128. package/src/foundation/colors/base/purple.ts +3 -1
  129. package/src/foundation/colors/base/red.ts +5 -3
  130. package/src/foundation/colors/base/yellow.ts +12 -10
  131. package/src/foundation/colors/index.ts +3 -0
  132. package/src/foundation/colors/token/component.ts +26 -22
  133. package/src/foundation/colors/token/core.ts +21 -0
  134. package/src/foundation/colors/types.ts +3 -0
  135. package/src/index.ts +6 -1
  136. package/src/stories/GettingStarted.mdx +10 -16
  137. package/src/stories/components/Alert/Alert.stories.tsx +3 -3
  138. package/src/stories/components/Button/BasicButton.stories.tsx +2 -2
  139. package/src/stories/components/Button/ButtonDocs.mdx +1 -1
  140. package/src/stories/components/Button/Color.stories.tsx +2 -2
  141. package/src/stories/components/Button/IconButton.stories.tsx +2 -2
  142. package/src/stories/components/Button/Kind.stories.tsx +2 -2
  143. package/src/stories/components/CheckBox/BasicCheckbox.stories.tsx +2 -2
  144. package/src/stories/components/CheckBox/CheckboxDocs.mdx +1 -1
  145. package/src/stories/components/Chip/Chip.stories.tsx +20 -2
  146. package/src/stories/components/Chip/ChipDocs.mdx +21 -1
  147. package/src/stories/components/DataTable/DataTable.stories.tsx +1 -1
  148. package/src/stories/components/DatePicker/DatePicker.stories.tsx +1 -1
  149. package/src/stories/components/Dialog/Dialog.stories.tsx +19 -8
  150. package/src/stories/components/Dialog/DialogDocs.mdx +3 -11
  151. package/src/stories/components/Dropdown/Dropdown.stories.tsx +299 -10
  152. package/src/stories/components/Dropdown/DropdownExamples.stories.tsx +221 -0
  153. package/src/stories/components/Dropdown/DropdownItem.stories.tsx +360 -0
  154. package/src/stories/components/SelectControl/RadioGroup.stories.tsx +1 -1
  155. package/src/stories/components/SelectControl/RadioStatus.stories.tsx +1 -1
  156. package/src/stories/components/SelectControl/Toggle.stories.tsx +2 -2
  157. package/src/stories/components/TextField/BasicTextField.stories.tsx +37 -16
  158. package/src/stories/components/TextField/TextFieldDocs.mdx +13 -1
  159. package/src/stories/components/TextField/TextFieldMulti.stories.tsx +8 -11
  160. package/src/stories/components/TextField/TextFieldSingle.stories.tsx +8 -11
  161. package/src/stories/components/TextField/TextFieldSize.stories.tsx +7 -8
  162. package/src/stories/components/Toast/Toast.stories.tsx +8 -3
  163. package/src/stories/components/ToggleButton/Basic.stories.tsx +152 -113
  164. package/src/stories/components/ToggleButton/ToggleButtonDocs.mdx +1 -1
  165. package/src/stories/components/ToggleButton/ToggleButtonKind.stories.tsx +5 -5
  166. package/src/stories/components/ToggleButton/WithIcon.stories.tsx +2 -2
  167. package/src/stories/components/Tooltip/Tooltip.stories.tsx +1 -1
  168. package/src/stories/foundation/Elevation/Elevation.stories.tsx +1 -20
  169. package/src/stories/foundation/Typography/Typography.mdx +1 -1
  170. package/src/stories/foundation/Typography/Typography.stories.tsx +14 -1
  171. package/src/stories/foundation/Typography/const.ts +6 -1
  172. package/src/stories/foundation/colors/Colors.stories.tsx +2 -2
  173. package/src/stories/foundation/colors/Docs.mdx +1 -1
  174. package/src/stories/foundation/colors/Mui.stories.tsx +1 -1
  175. package/src/stories/foundation/colors/Token.inComponent.stories.tsx +1 -1
  176. package/src/stories/foundation/colors/TokenPaletteTable.stories.tsx +1 -1
  177. package/src/stories/foundation/colors/TokenPaletteTable.tsx +19 -1
  178. package/tsconfig.json +0 -1
  179. package/dist/cjs/components/Modal/index.js +0 -2
  180. package/dist/cjs/components/Modal/index.js.map +0 -1
  181. package/dist/components/Modal/Modal.js +0 -7
  182. package/dist/components/Modal/Modal.js.map +0 -1
  183. package/dist/components/Modal/index.js +0 -2
  184. package/dist/components/Modal/index.js.map +0 -1
  185. package/dist/types/components/Modal/Modal.d.ts +0 -2
  186. package/dist/types/components/Modal/index.d.ts +0 -1
  187. 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
+ &nbsp;&nbsp;
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",
@@ -8,7 +8,7 @@ import {
8
8
  TableCell,
9
9
  } from "@mui/material";
10
10
  import Radio from "@/components/Radio";
11
- import { Meta, StoryFn } from "@storybook/react";
11
+ import { Meta, StoryFn } from "@storybook/react-webpack5";
12
12
 
13
13
  export default {
14
14
  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 "@storybook/addon-actions";
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: [true, false] },
38
+ defaultValue: { summary: "false" },
39
+ type: { summary: "boolean" },
46
40
  },
47
41
  },
48
42
  size: {
49
- control: {
50
- type: "radio",
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: ["small", "medium", "large"] },
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 }}>