@lunit/design-system 2.2.0 → 2.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/.babelrc.json +1 -1
  2. package/README.md +22 -21
  3. package/dist/cjs/components/Alert/index.js +1 -1
  4. package/dist/cjs/components/Alert/index.js.map +1 -1
  5. package/dist/cjs/components/Button/index.js +1 -1
  6. package/dist/cjs/components/Button/index.js.map +1 -1
  7. package/dist/cjs/components/Checkbox/index.js +1 -1
  8. package/dist/cjs/components/Checkbox/index.js.map +1 -1
  9. package/dist/cjs/components/Chip/index.js +1 -1
  10. package/dist/cjs/components/Chip/index.js.map +1 -1
  11. package/dist/cjs/components/DataTable/index.js.map +1 -1
  12. package/dist/cjs/components/DatePicker/index.js.map +1 -1
  13. package/dist/cjs/components/Dialog/index.js +1 -1
  14. package/dist/cjs/components/Dialog/index.js.map +1 -1
  15. package/dist/cjs/components/Dropdown/index.js +1 -1
  16. package/dist/cjs/components/Dropdown/index.js.map +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/Alert/Alert.js +8 -8
  32. package/dist/components/Alert/Alert.js.map +1 -1
  33. package/dist/components/Alert/Alert.styled.js +26 -26
  34. package/dist/components/Alert/Alert.styled.js.map +1 -1
  35. package/dist/components/Alert/Alert.utils.js +9 -9
  36. package/dist/components/Alert/Alert.utils.js.map +1 -1
  37. package/dist/components/Alert/index.js +1 -1
  38. package/dist/components/Button/Button.js +23 -17
  39. package/dist/components/Button/Button.js.map +1 -1
  40. package/dist/components/Button/Button.styled.js +88 -88
  41. package/dist/components/Button/Button.styled.js.map +1 -1
  42. package/dist/components/Button/index.js +1 -1
  43. package/dist/components/Button/utils/getButtonPaddingBySizeAndKind.js +9 -9
  44. package/dist/components/Button/utils/getButtonPaddingBySizeAndKind.js.map +1 -1
  45. package/dist/components/Button/utils/getHoverStyle.js +1 -1
  46. package/dist/components/Button/utils/getHoverStyle.js.map +1 -1
  47. package/dist/components/Button/utils/getIconButtonPaddingBySizeAndKind.js +6 -12
  48. package/dist/components/Button/utils/getIconButtonPaddingBySizeAndKind.js.map +1 -1
  49. package/dist/components/Checkbox/Checkbox.js +9 -9
  50. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  51. package/dist/components/Checkbox/index.js +1 -1
  52. package/dist/components/Chip/Chip.js +29 -26
  53. package/dist/components/Chip/Chip.js.map +1 -1
  54. package/dist/components/Chip/Chip.styled.js +52 -52
  55. package/dist/components/Chip/Chip.styled.js.map +1 -1
  56. package/dist/components/Chip/consts.js +5 -5
  57. package/dist/components/Chip/index.js +1 -1
  58. package/dist/components/DataTable/DataTable.js +1 -1
  59. package/dist/components/DataTable/index.js +1 -1
  60. package/dist/components/DatePicker/DatePicker.js +1 -1
  61. package/dist/components/DatePicker/index.js +1 -1
  62. package/dist/components/Dialog/Dialog.js +18 -18
  63. package/dist/components/Dialog/Dialog.js.map +1 -1
  64. package/dist/components/Dialog/Dialog.styled.js +90 -90
  65. package/dist/components/Dialog/Dialog.styled.js.map +1 -1
  66. package/dist/components/Dialog/components/DialogAction.js +6 -6
  67. package/dist/components/Dialog/index.js +1 -1
  68. package/dist/components/Dropdown/Dropdown.js +23 -21
  69. package/dist/components/Dropdown/Dropdown.js.map +1 -1
  70. package/dist/components/Dropdown/Dropdown.styled.js +85 -86
  71. package/dist/components/Dropdown/Dropdown.styled.js.map +1 -1
  72. package/dist/components/Dropdown/DropdownItem.js +14 -14
  73. package/dist/components/Dropdown/DropdownItem.js.map +1 -1
  74. package/dist/components/Dropdown/index.js +2 -2
  75. package/dist/components/Dropdown/index.js.map +1 -1
  76. package/dist/components/FormLabel/FormLabel.js +1 -1
  77. package/dist/components/FormLabel/FormLabel.styled.js +2 -2
  78. package/dist/components/FormLabel/FormLabel.styled.js.map +1 -1
  79. package/dist/components/FormLabel/index.js +1 -1
  80. package/dist/components/Radio/Radio.js +8 -8
  81. package/dist/components/Radio/Radio.js.map +1 -1
  82. package/dist/components/Radio/index.js +1 -1
  83. package/dist/components/RadioGroup/index.js +1 -1
  84. package/dist/components/TextField/TextField.js +8 -8
  85. package/dist/components/TextField/TextField.js.map +1 -1
  86. package/dist/components/TextField/TextField.style.js +112 -112
  87. package/dist/components/TextField/TextField.style.js.map +1 -1
  88. package/dist/components/TextField/TextFieldIcon.js +2 -2
  89. package/dist/components/TextField/TextFieldIcon.js.map +1 -1
  90. package/dist/components/TextField/index.js +1 -1
  91. package/dist/components/Toast/Toast.js +13 -13
  92. package/dist/components/Toast/Toast.js.map +1 -1
  93. package/dist/components/Toast/Toast.styled.js +26 -26
  94. package/dist/components/Toast/Toast.utils.js +3 -3
  95. package/dist/components/Toast/Toast.utils.js.map +1 -1
  96. package/dist/components/Toast/index.js +1 -1
  97. package/dist/components/Toggle/Toggle.js +3 -4
  98. package/dist/components/Toggle/Toggle.js.map +1 -1
  99. package/dist/components/Toggle/Toggle.styled.js +30 -30
  100. package/dist/components/Toggle/Toggle.styled.js.map +1 -1
  101. package/dist/components/Toggle/index.js +1 -1
  102. package/dist/components/ToggleButton/ToggleButton.js +6 -6
  103. package/dist/components/ToggleButton/ToggleButton.js.map +1 -1
  104. package/dist/components/ToggleButton/ToggleButton.styled.js +20 -20
  105. package/dist/components/ToggleButton/ToggleButton.styled.js.map +1 -1
  106. package/dist/components/ToggleButton/index.js +1 -1
  107. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.js +2 -2
  108. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.js.map +1 -1
  109. package/dist/components/ToggleButtonGroup/index.js +1 -1
  110. package/dist/components/Tooltip/Tooltip.js +1 -1
  111. package/dist/components/Tooltip/index.js +1 -1
  112. package/dist/components/Typography/Typography.js +1 -1
  113. package/dist/components/Typography/Typography.js.map +1 -1
  114. package/dist/components/Typography/index.js +1 -1
  115. package/dist/foundation/Elevation/index.js +27 -27
  116. package/dist/foundation/Elevation/utils.js +1 -1
  117. package/dist/foundation/Elevation/utils.js.map +1 -1
  118. package/dist/foundation/Typography/index.js +35 -35
  119. package/dist/foundation/Typography/index.js.map +1 -1
  120. package/dist/foundation/Typography/tokens.js +136 -136
  121. package/dist/foundation/Typography/tokens.js.map +1 -1
  122. package/dist/foundation/colors/base/blue.js +12 -12
  123. package/dist/foundation/colors/base/green.js +12 -12
  124. package/dist/foundation/colors/base/grey.js +28 -28
  125. package/dist/foundation/colors/base/index.js +11 -11
  126. package/dist/foundation/colors/base/lunitGreen.js +11 -11
  127. package/dist/foundation/colors/base/lunitTeal.js +12 -12
  128. package/dist/foundation/colors/base/magenta.js +12 -12
  129. package/dist/foundation/colors/base/opacity.js +4 -4
  130. package/dist/foundation/colors/base/orange.js +12 -12
  131. package/dist/foundation/colors/base/purple.js +12 -12
  132. package/dist/foundation/colors/base/red.js +12 -12
  133. package/dist/foundation/colors/base/yellow.js +12 -12
  134. package/dist/foundation/colors/index.js +119 -121
  135. package/dist/foundation/colors/index.js.map +1 -1
  136. package/dist/foundation/colors/token/component.js +184 -212
  137. package/dist/foundation/colors/token/component.js.map +1 -1
  138. package/dist/foundation/colors/token/core.js +112 -133
  139. package/dist/foundation/colors/token/core.js.map +1 -1
  140. package/dist/foundation/colors/token/index.js +2 -2
  141. package/dist/foundation/index.js +5 -5
  142. package/dist/index.js +20 -20
  143. package/dist/theme.js +6 -6
  144. package/dist/types/components/Alert/Alert.d.ts +2 -2
  145. package/dist/types/components/Alert/Alert.styled.d.ts +1 -2
  146. package/dist/types/components/Alert/Alert.types.d.ts +2 -2
  147. package/dist/types/components/Alert/Alert.utils.d.ts +1 -1
  148. package/dist/types/components/Alert/index.d.ts +1 -1
  149. package/dist/types/components/Button/Button.d.ts +1 -1
  150. package/dist/types/components/Button/Button.styled.d.ts +226 -227
  151. package/dist/types/components/Button/Button.types.d.ts +16 -16
  152. package/dist/types/components/Button/index.d.ts +1 -1
  153. package/dist/types/components/Button/utils/getButtonPaddingBySizeAndKind.d.ts +4 -4
  154. package/dist/types/components/Button/utils/getHoverStyle.d.ts +2 -1
  155. package/dist/types/components/Button/utils/getIconButtonPaddingBySizeAndKind.d.ts +4 -4
  156. package/dist/types/components/Checkbox/Checkbox.d.ts +1 -1
  157. package/dist/types/components/Checkbox/index.d.ts +1 -1
  158. package/dist/types/components/Chip/Chip.d.ts +1 -1
  159. package/dist/types/components/Chip/Chip.styled.d.ts +6 -7
  160. package/dist/types/components/Chip/Chip.types.d.ts +15 -14
  161. package/dist/types/components/Chip/index.d.ts +1 -1
  162. package/dist/types/components/DataTable/index.d.ts +1 -1
  163. package/dist/types/components/DatePicker/index.d.ts +1 -1
  164. package/dist/types/components/Dialog/Dialog.d.ts +11 -11
  165. package/dist/types/components/Dialog/Dialog.styled.d.ts +3 -4
  166. package/dist/types/components/Dialog/components/DialogAction.d.ts +2 -2
  167. package/dist/types/components/Dialog/index.d.ts +2 -2
  168. package/dist/types/components/Dropdown/Dropdown.d.ts +2 -2
  169. package/dist/types/components/Dropdown/Dropdown.styled.d.ts +3 -4
  170. package/dist/types/components/Dropdown/Dropdown.types.d.ts +5 -5
  171. package/dist/types/components/Dropdown/DropdownItem.d.ts +3 -3
  172. package/dist/types/components/Dropdown/index.d.ts +3 -3
  173. package/dist/types/components/FormLabel/FormLabel.d.ts +1 -1
  174. package/dist/types/components/FormLabel/index.d.ts +1 -1
  175. package/dist/types/components/Radio/Radio.d.ts +1 -1
  176. package/dist/types/components/Radio/index.d.ts +1 -1
  177. package/dist/types/components/RadioGroup/index.d.ts +1 -1
  178. package/dist/types/components/TextField/TextField.d.ts +2 -2
  179. package/dist/types/components/TextField/TextField.style.d.ts +3 -4
  180. package/dist/types/components/TextField/TextField.types.d.ts +6 -6
  181. package/dist/types/components/TextField/TextFieldIcon.d.ts +2 -2
  182. package/dist/types/components/TextField/index.d.ts +2 -2
  183. package/dist/types/components/Toast/Toast.d.ts +2 -2
  184. package/dist/types/components/Toast/Toast.types.d.ts +3 -3
  185. package/dist/types/components/Toast/Toast.utils.d.ts +1 -1
  186. package/dist/types/components/Toast/index.d.ts +2 -2
  187. package/dist/types/components/Toggle/Toggle.d.ts +1 -1
  188. package/dist/types/components/Toggle/Toggle.styled.d.ts +2 -2
  189. package/dist/types/components/Toggle/Toggle.types.d.ts +3 -3
  190. package/dist/types/components/Toggle/index.d.ts +1 -1
  191. package/dist/types/components/ToggleButton/ToggleButton.d.ts +1 -1
  192. package/dist/types/components/ToggleButton/ToggleButton.styled.d.ts +2 -3
  193. package/dist/types/components/ToggleButton/ToggleButton.types.d.ts +10 -10
  194. package/dist/types/components/ToggleButton/index.d.ts +1 -1
  195. package/dist/types/components/ToggleButtonGroup/ToggleButtonGroup.d.ts +1 -1
  196. package/dist/types/components/ToggleButtonGroup/index.d.ts +1 -1
  197. package/dist/types/components/Tooltip/index.d.ts +1 -1
  198. package/dist/types/components/Typography/Typography.d.ts +6 -6
  199. package/dist/types/components/Typography/index.d.ts +1 -1
  200. package/dist/types/components/index.d.ts +2 -2
  201. package/dist/types/foundation/Elevation/index.d.ts +22 -22
  202. package/dist/types/foundation/Typography/index.d.ts +78 -78
  203. package/dist/types/foundation/Typography/tokens.d.ts +69 -69
  204. package/dist/types/foundation/colors/base/index.d.ts +11 -11
  205. package/dist/types/foundation/colors/index.d.ts +13 -20
  206. package/dist/types/foundation/colors/token/component.d.ts +1 -1
  207. package/dist/types/foundation/colors/token/core.d.ts +1 -1
  208. package/dist/types/foundation/colors/token/index.d.ts +2 -2
  209. package/dist/types/foundation/colors/types.d.ts +0 -7
  210. package/dist/types/foundation/index.d.ts +4 -11
  211. package/dist/types/foundation/spacing.d.ts +1 -1
  212. package/dist/types/index.d.ts +20 -20
  213. package/dist/types/theme.d.ts +1 -1
  214. package/package.json +9 -11
  215. package/src/components/Alert/Alert.styled.ts +39 -49
  216. package/src/components/Alert/Alert.tsx +10 -16
  217. package/src/components/Alert/Alert.types.ts +2 -2
  218. package/src/components/Alert/Alert.utils.ts +13 -22
  219. package/src/components/Alert/index.ts +1 -1
  220. package/src/components/Button/Button.styled.ts +98 -101
  221. package/src/components/Button/Button.tsx +71 -69
  222. package/src/components/Button/Button.types.ts +19 -21
  223. package/src/components/Button/index.ts +1 -1
  224. package/src/components/Button/utils/getButtonPaddingBySizeAndKind.ts +13 -13
  225. package/src/components/Button/utils/getHoverStyle.ts +4 -2
  226. package/src/components/Button/utils/getIconButtonPaddingBySizeAndKind.ts +10 -19
  227. package/src/components/Checkbox/Checkbox.tsx +13 -25
  228. package/src/components/Checkbox/index.ts +1 -1
  229. package/src/components/Chip/Chip.styled.ts +69 -72
  230. package/src/components/Chip/Chip.tsx +33 -55
  231. package/src/components/Chip/Chip.types.ts +17 -25
  232. package/src/components/Chip/consts.ts +5 -5
  233. package/src/components/Chip/index.ts +1 -1
  234. package/src/components/DataTable/DataTable.tsx +2 -2
  235. package/src/components/DataTable/index.ts +1 -1
  236. package/src/components/DatePicker/DatePicker.tsx +2 -2
  237. package/src/components/DatePicker/index.ts +1 -1
  238. package/src/components/Dialog/Dialog.styled.ts +112 -114
  239. package/src/components/Dialog/Dialog.tsx +41 -46
  240. package/src/components/Dialog/components/DialogAction.tsx +8 -8
  241. package/src/components/Dialog/index.ts +3 -3
  242. package/src/components/Dropdown/Dropdown.styled.tsx +88 -89
  243. package/src/components/Dropdown/Dropdown.tsx +29 -30
  244. package/src/components/Dropdown/Dropdown.types.ts +5 -6
  245. package/src/components/Dropdown/DropdownItem.tsx +18 -29
  246. package/src/components/Dropdown/index.ts +3 -7
  247. package/src/components/FormLabel/FormLabel.styled.ts +3 -3
  248. package/src/components/FormLabel/FormLabel.tsx +3 -3
  249. package/src/components/FormLabel/index.ts +1 -1
  250. package/src/components/Radio/Radio.tsx +12 -29
  251. package/src/components/Radio/index.ts +1 -1
  252. package/src/components/RadioGroup/index.ts +1 -1
  253. package/src/components/TextField/TextField.style.ts +123 -132
  254. package/src/components/TextField/TextField.tsx +50 -62
  255. package/src/components/TextField/TextField.types.ts +6 -9
  256. package/src/components/TextField/TextFieldIcon.tsx +4 -7
  257. package/src/components/TextField/index.ts +2 -2
  258. package/src/components/Toast/Toast.styled.ts +26 -26
  259. package/src/components/Toast/Toast.tsx +14 -28
  260. package/src/components/Toast/Toast.types.ts +3 -8
  261. package/src/components/Toast/Toast.utils.ts +5 -8
  262. package/src/components/Toast/index.tsx +2 -2
  263. package/src/components/Toggle/Toggle.styled.ts +31 -32
  264. package/src/components/Toggle/Toggle.tsx +5 -11
  265. package/src/components/Toggle/Toggle.types.ts +3 -3
  266. package/src/components/Toggle/index.ts +1 -1
  267. package/src/components/ToggleButton/ToggleButton.styled.ts +47 -49
  268. package/src/components/ToggleButton/ToggleButton.tsx +91 -97
  269. package/src/components/ToggleButton/ToggleButton.types.ts +10 -10
  270. package/src/components/ToggleButton/index.ts +1 -1
  271. package/src/components/ToggleButtonGroup/ToggleButtonGroup.tsx +3 -8
  272. package/src/components/ToggleButtonGroup/index.tsx +1 -1
  273. package/src/components/Tooltip/Tooltip.tsx +2 -2
  274. package/src/components/Tooltip/index.ts +1 -1
  275. package/src/components/Typography/Typography.tsx +7 -10
  276. package/src/components/Typography/index.ts +1 -1
  277. package/src/components/index.ts +2 -2
  278. package/src/foundation/Elevation/index.ts +27 -27
  279. package/src/foundation/Elevation/utils.ts +14 -8
  280. package/src/foundation/Typography/index.ts +58 -57
  281. package/src/foundation/Typography/tokens.ts +138 -138
  282. package/src/foundation/colors/base/blue.ts +12 -12
  283. package/src/foundation/colors/base/green.ts +12 -12
  284. package/src/foundation/colors/base/grey.ts +28 -28
  285. package/src/foundation/colors/base/index.ts +11 -11
  286. package/src/foundation/colors/base/lunitGreen.ts +11 -11
  287. package/src/foundation/colors/base/lunitTeal.ts +12 -12
  288. package/src/foundation/colors/base/magenta.ts +12 -12
  289. package/src/foundation/colors/base/opacity.ts +4 -4
  290. package/src/foundation/colors/base/orange.ts +12 -12
  291. package/src/foundation/colors/base/purple.ts +12 -12
  292. package/src/foundation/colors/base/red.ts +12 -12
  293. package/src/foundation/colors/base/yellow.ts +12 -12
  294. package/src/foundation/colors/index.ts +119 -120
  295. package/src/foundation/colors/token/component.ts +185 -213
  296. package/src/foundation/colors/token/core.ts +113 -134
  297. package/src/foundation/colors/token/index.ts +2 -2
  298. package/src/foundation/colors/types.ts +0 -7
  299. package/src/foundation/index.ts +8 -8
  300. package/src/foundation/spacing.ts +1 -1
  301. package/src/index.ts +20 -20
  302. package/src/stories/GettingStarted.mdx +6 -6
  303. package/src/stories/components/Alert/Alert.stories.tsx +38 -45
  304. package/src/stories/components/Button/BasicButton.stories.tsx +68 -59
  305. package/src/stories/components/Button/ButtonDocs.mdx +17 -41
  306. package/src/stories/components/Button/Color.stories.tsx +28 -51
  307. package/src/stories/components/Button/IconButton.stories.tsx +40 -47
  308. package/src/stories/components/Button/Kind.stories.tsx +100 -213
  309. package/src/stories/components/CheckBox/BasicCheckbox.stories.tsx +52 -71
  310. package/src/stories/components/CheckBox/CheckboxDocs.mdx +6 -6
  311. package/src/stories/components/Chip/Chip.stories.tsx +75 -75
  312. package/src/stories/components/Chip/ChipDocs.mdx +12 -13
  313. package/src/stories/components/DataTable/DataTable.stories.tsx +4 -4
  314. package/src/stories/components/DatePicker/DatePicker.stories.tsx +4 -4
  315. package/src/stories/components/Dialog/Dialog.stories.tsx +103 -135
  316. package/src/stories/components/Dialog/DialogDocs.mdx +7 -13
  317. package/src/stories/components/Dropdown/Dropdown.stories.tsx +96 -82
  318. package/src/stories/components/Dropdown/DropdownDocs.mdx +275 -0
  319. package/src/stories/components/Dropdown/DropdownExamples.stories.tsx +40 -47
  320. package/src/stories/components/Dropdown/DropdownItem.stories.tsx +113 -98
  321. package/src/stories/components/SelectControl/RadioGroup.stories.tsx +17 -30
  322. package/src/stories/components/SelectControl/RadioStatus.stories.tsx +16 -23
  323. package/src/stories/components/SelectControl/Toggle.stories.tsx +33 -78
  324. package/src/stories/components/TextField/BasicTextField.stories.tsx +44 -53
  325. package/src/stories/components/TextField/TextFieldDocs.mdx +8 -12
  326. package/src/stories/components/TextField/TextFieldMulti.stories.tsx +39 -55
  327. package/src/stories/components/TextField/TextFieldSingle.stories.tsx +74 -118
  328. package/src/stories/components/TextField/TextFieldSize.stories.tsx +35 -55
  329. package/src/stories/components/Toast/Toast.stories.tsx +35 -50
  330. package/src/stories/components/ToggleButton/Basic.stories.tsx +115 -152
  331. package/src/stories/components/ToggleButton/ToggleButtonDocs.mdx +10 -14
  332. package/src/stories/components/ToggleButton/ToggleButtonKind.stories.tsx +141 -200
  333. package/src/stories/components/ToggleButton/WithIcon.stories.tsx +87 -107
  334. package/src/stories/components/Tooltip/Tooltip.stories.tsx +4 -4
  335. package/src/stories/foundation/Elevation/Elevation.stories.tsx +48 -54
  336. package/src/stories/foundation/Elevation/styled.ts +3 -3
  337. package/src/stories/foundation/Typography/Typography.mdx +9 -13
  338. package/src/stories/foundation/Typography/Typography.stories.tsx +25 -41
  339. package/src/stories/foundation/Typography/TypographyGroup.tsx +14 -25
  340. package/src/stories/foundation/Typography/const.ts +13 -19
  341. package/src/stories/foundation/colors/ColorSystem.tsx +42 -40
  342. package/src/stories/foundation/colors/Colors.stories.tsx +40 -41
  343. package/src/stories/foundation/colors/Docs.mdx +73 -77
  344. package/src/stories/foundation/colors/Mui.stories.tsx +6 -8
  345. package/src/stories/foundation/colors/Token.inComponent.stories.tsx +81 -71
  346. package/src/stories/foundation/colors/TokenPaletteTable.stories.tsx +7 -7
  347. package/src/stories/foundation/colors/TokenPaletteTable.tsx +23 -49
  348. package/src/stories/foundation/colors/styled.ts +26 -26
  349. package/src/theme.ts +6 -6
  350. package/src/types.d.ts +1 -1
  351. package/tsconfig.build.json +1 -5
@@ -1,40 +1,46 @@
1
- import React, { useState } from "react";
2
- import { StoryFn, Meta, StoryObj } from "@storybook/react-webpack5";
1
+ import React, { useState } from 'react';
2
+ import { StoryFn, Meta, StoryObj } from '@storybook/react-webpack5';
3
3
 
4
- import Dropdown, { DropdownItem } from "@/components/Dropdown";
5
- import { Box, SelectChangeEvent } from "@mui/material";
4
+ import Dropdown, { DropdownItem } from '@/components/Dropdown';
5
+ import { Box, SelectChangeEvent } from '@mui/material';
6
6
 
7
7
  export default {
8
- title: "Components/Dropdown",
8
+ title: 'Components/Dropdown',
9
9
  component: Dropdown,
10
+ args: {
11
+ size: 'medium',
12
+ select: 'single',
13
+ error: false,
14
+ disabled: false,
15
+ },
10
16
  argTypes: {
11
17
  size: {
12
18
  control: {
13
- type: "radio",
19
+ type: 'radio',
14
20
  },
15
- options: ["small", "medium", "large"],
16
- description: "The size of the dropdown. Default is medium.",
21
+ options: ['small', 'medium', 'large'],
22
+ description: 'The size of the dropdown. Default is medium.',
17
23
  },
18
24
  select: {
19
25
  control: {
20
- type: "radio",
26
+ type: 'radio',
21
27
  },
22
- options: ["single", "multiple"],
23
- description: "The select type of the dropdown. Default is single.",
28
+ options: ['single', 'multiple'],
29
+ description: 'The select type of the dropdown. Default is single.',
24
30
  },
25
31
  error: {
26
32
  control: {
27
- type: "radio",
33
+ type: 'radio',
28
34
  },
29
35
  options: [true, false],
30
- description: "The error prop toggles the error state.",
36
+ description: 'The error prop toggles the error state.',
31
37
  },
32
38
  disabled: {
33
39
  control: {
34
- type: "radio",
40
+ type: 'radio',
35
41
  },
36
42
  options: [true, false],
37
- description: "If true, the text field will be disabled.",
43
+ description: 'If true, the text field will be disabled.',
38
44
  },
39
45
  },
40
46
  } as Meta<typeof Dropdown>;
@@ -44,29 +50,29 @@ const BasicDropdownTemplate: StoryFn<typeof Dropdown> = (args, context) => {
44
50
 
45
51
  // In a single select, selectedValue can be used as a string type instead of an array.
46
52
  // In the current Storybook Template, we use selectedValue as a string[] in order to also use it as multiple depending on the control selection.
47
- const [selectedValue, setSelectedValue] = useState<string[]>(["test1"]);
53
+ const [selectedValue, setSelectedValue] = useState<string[]>(['test1']);
48
54
  const handleSelectedValueChange = (event: SelectChangeEvent<unknown>) => {
49
55
  const {
50
56
  target: { value },
51
57
  } = event;
52
58
  setSelectedValue(
53
59
  // On autofill we get a stringified value.
54
- typeof value === "string" ? value.split(",") : (value as string[]),
60
+ typeof value === 'string' ? value.split(',') : (value as string[]),
55
61
  );
56
62
  };
57
63
 
58
64
  return (
59
65
  <Box>
60
66
  <Dropdown
67
+ {...args}
61
68
  className={classNameFromGlobal}
62
69
  value={selectedValue}
63
70
  onChange={handleSelectedValueChange}
64
- sx={{ width: "150px" }}
65
- {...args}
71
+ sx={{ width: '150px' }}
66
72
  >
67
- <DropdownItem value={"test1"}>Conquer cancer through AI</DropdownItem>
68
- <DropdownItem value={"test2"}>test item 2</DropdownItem>
69
- <DropdownItem value={"test3"}>test item 3</DropdownItem>
73
+ <DropdownItem value={'test1'}>Conquer cancer through AI</DropdownItem>
74
+ <DropdownItem value={'test2'}>test item 2</DropdownItem>
75
+ <DropdownItem value={'test3'}>test item 3</DropdownItem>
70
76
  </Dropdown>
71
77
  </Box>
72
78
  );
@@ -84,59 +90,59 @@ const SizeTemplate: StoryFn<typeof Dropdown> = (args, context) => {
84
90
 
85
91
  // In a single select, selectedValue can be used as a string type instead of an array.
86
92
  // In the current Storybook Template, we use selectedValue as a string[] in order to also use it as multiple depending on the control selection.
87
- const [selectedValue, setSelectedValue] = useState<string[]>(["test1"]);
93
+ const [selectedValue, setSelectedValue] = useState<string[]>(['test1']);
88
94
  const handleSelectedValueChange = (event: SelectChangeEvent<unknown>) => {
89
95
  const {
90
96
  target: { value },
91
97
  } = event;
92
98
  setSelectedValue(
93
99
  // On autofill we get a stringified value.
94
- typeof value === "string" ? value.split(",") : (value as string[]),
100
+ typeof value === 'string' ? value.split(',') : (value as string[]),
95
101
  );
96
102
  };
97
103
 
98
104
  return (
99
- <Box sx={{ display: "flex", alignItems: "center", gap: 4 }}>
105
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 4 }}>
100
106
  <Box>
101
107
  <Dropdown
108
+ {...args}
102
109
  className={classNameFromGlobal}
103
110
  value={selectedValue}
104
111
  onChange={handleSelectedValueChange}
105
112
  size="small"
106
- sx={{ width: "150px" }}
107
- {...args}
113
+ sx={{ width: '150px' }}
108
114
  >
109
- <DropdownItem value={"test1"}>Small item 1</DropdownItem>
110
- <DropdownItem value={"test2"}>Small item 2</DropdownItem>
111
- <DropdownItem value={"test3"}>Small item 3</DropdownItem>
115
+ <DropdownItem value={'test1'}>Small item 1</DropdownItem>
116
+ <DropdownItem value={'test2'}>Small item 2</DropdownItem>
117
+ <DropdownItem value={'test3'}>Small item 3</DropdownItem>
112
118
  </Dropdown>
113
119
  </Box>
114
120
  <Box>
115
121
  <Dropdown
122
+ {...args}
116
123
  className={classNameFromGlobal}
117
124
  value={selectedValue}
118
125
  onChange={handleSelectedValueChange}
119
126
  size="medium"
120
- sx={{ width: "150px" }}
121
- {...args}
127
+ sx={{ width: '150px' }}
122
128
  >
123
- <DropdownItem value={"test1"}>Medium item 1</DropdownItem>
124
- <DropdownItem value={"test2"}>Medium item 2</DropdownItem>
125
- <DropdownItem value={"test3"}>Medium item 3</DropdownItem>
129
+ <DropdownItem value={'test1'}>Medium item 1</DropdownItem>
130
+ <DropdownItem value={'test2'}>Medium item 2</DropdownItem>
131
+ <DropdownItem value={'test3'}>Medium item 3</DropdownItem>
126
132
  </Dropdown>
127
133
  </Box>
128
134
  <Box>
129
135
  <Dropdown
136
+ {...args}
130
137
  className={classNameFromGlobal}
131
138
  value={selectedValue}
132
139
  onChange={handleSelectedValueChange}
133
140
  size="large"
134
- sx={{ width: "150px" }}
135
- {...args}
141
+ sx={{ width: '150px' }}
136
142
  >
137
- <DropdownItem value={"test1"}>Large item 1</DropdownItem>
138
- <DropdownItem value={"test2"}>Large item 2</DropdownItem>
139
- <DropdownItem value={"test3"}>Large item 3</DropdownItem>
143
+ <DropdownItem value={'test1'}>Large item 1</DropdownItem>
144
+ <DropdownItem value={'test2'}>Large item 2</DropdownItem>
145
+ <DropdownItem value={'test3'}>Large item 3</DropdownItem>
140
146
  </Dropdown>
141
147
  </Box>
142
148
  </Box>
@@ -146,61 +152,63 @@ const SizeTemplate: StoryFn<typeof Dropdown> = (args, context) => {
146
152
  export const Size: StoryObj<typeof Dropdown> = {
147
153
  render: SizeTemplate,
148
154
  parameters: {
149
- controls: {
150
- include: ["select", "error", "disabled"],
151
- },
152
155
  chromatic: { disableSnapshot: true },
153
156
  },
157
+ argTypes: {
158
+ size: {
159
+ control: false,
160
+ },
161
+ },
154
162
  };
155
163
 
156
164
  const SelectTypeTemplate: StoryFn<typeof Dropdown> = (args, context) => {
157
165
  const classNameFromGlobal = context.globals.theme;
158
166
 
159
- const [selectedValue, setSelectedValue] = useState<string>("single1");
167
+ const [selectedValue, setSelectedValue] = useState<string>('single1');
160
168
  const handleSelectedValueChange = (event: SelectChangeEvent<unknown>) => {
161
169
  const {
162
170
  target: { value },
163
171
  } = event;
164
172
  setSelectedValue(value as string);
165
173
  };
166
- const [selectedValue2, setSelectedValue2] = useState<string[]>(["multiple1"]);
174
+ const [selectedValue2, setSelectedValue2] = useState<string[]>(['multiple1']);
167
175
  const handleSelectedValueChange2 = (event: SelectChangeEvent<unknown>) => {
168
176
  const {
169
177
  target: { value },
170
178
  } = event;
171
179
  setSelectedValue2(
172
180
  // On autofill we get a stringified value.
173
- typeof value === "string" ? value.split(",") : (value as string[]),
181
+ typeof value === 'string' ? value.split(',') : (value as string[]),
174
182
  );
175
183
  };
176
184
 
177
185
  return (
178
- <Box sx={{ display: "flex", alignItems: "center", gap: 4 }}>
186
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 4 }}>
179
187
  <Box>
180
188
  <Dropdown
189
+ {...args}
181
190
  className={classNameFromGlobal}
182
191
  value={selectedValue}
183
192
  onChange={handleSelectedValueChange}
184
- sx={{ width: "150px" }}
185
- {...args}
193
+ sx={{ width: '150px' }}
186
194
  >
187
- <DropdownItem value={"single1"}>Single item 1</DropdownItem>
188
- <DropdownItem value={"single2"}>Single item 2</DropdownItem>
189
- <DropdownItem value={"single3"}>Single item 3</DropdownItem>
195
+ <DropdownItem value={'single1'}>Single item 1</DropdownItem>
196
+ <DropdownItem value={'single2'}>Single item 2</DropdownItem>
197
+ <DropdownItem value={'single3'}>Single item 3</DropdownItem>
190
198
  </Dropdown>
191
199
  </Box>
192
200
  <Box>
193
201
  <Dropdown
202
+ {...args}
194
203
  className={classNameFromGlobal}
195
204
  value={selectedValue2}
196
205
  onChange={handleSelectedValueChange2}
197
206
  select="multiple"
198
- sx={{ width: "200px" }}
199
- {...args}
207
+ sx={{ width: '200px' }}
200
208
  >
201
- <DropdownItem value={"multiple1"}>Multiple item 1</DropdownItem>
202
- <DropdownItem value={"multiple2"}>Multiple item 2</DropdownItem>
203
- <DropdownItem value={"multiple3"}>Multiple item 3</DropdownItem>
209
+ <DropdownItem value={'multiple1'}>Multiple item 1</DropdownItem>
210
+ <DropdownItem value={'multiple2'}>Multiple item 2</DropdownItem>
211
+ <DropdownItem value={'multiple3'}>Multiple item 3</DropdownItem>
204
212
  </Dropdown>
205
213
  </Box>
206
214
  </Box>
@@ -210,11 +218,13 @@ const SelectTypeTemplate: StoryFn<typeof Dropdown> = (args, context) => {
210
218
  export const SelectType: StoryObj<typeof Dropdown> = {
211
219
  render: SelectTypeTemplate,
212
220
  parameters: {
213
- controls: {
214
- include: ["size", "error", "disabled"],
215
- },
216
221
  chromatic: { disableSnapshot: true },
217
222
  },
223
+ argTypes: {
224
+ select: {
225
+ control: false,
226
+ },
227
+ },
218
228
  };
219
229
 
220
230
  const ErrorTemplate: StoryFn<typeof Dropdown> = (args, context) => {
@@ -222,31 +232,31 @@ const ErrorTemplate: StoryFn<typeof Dropdown> = (args, context) => {
222
232
 
223
233
  // In a single select, selectedValue can be used as a string type instead of an array.
224
234
  // In the current Storybook Template, we use selectedValue as a string[] in order to also use it as multiple depending on the control selection.
225
- const [selectedValue, setSelectedValue] = useState<string[]>(["test1"]);
235
+ const [selectedValue, setSelectedValue] = useState<string[]>(['test1']);
226
236
  const handleSelectedValueChange = (event: SelectChangeEvent<unknown>) => {
227
237
  const {
228
238
  target: { value },
229
239
  } = event;
230
240
  setSelectedValue(
231
241
  // On autofill we get a stringified value.
232
- typeof value === "string" ? value.split(",") : (value as string[]),
242
+ typeof value === 'string' ? value.split(',') : (value as string[]),
233
243
  );
234
244
  };
235
245
 
236
246
  return (
237
- <Box sx={{ display: "flex", alignItems: "center", gap: 4 }}>
247
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 4 }}>
238
248
  <Box>
239
249
  <Dropdown
250
+ {...args}
240
251
  className={classNameFromGlobal}
241
252
  value={selectedValue}
242
253
  onChange={handleSelectedValueChange}
243
254
  error
244
- sx={{ width: "150px" }}
245
- {...args}
255
+ sx={{ width: '150px' }}
246
256
  >
247
- <DropdownItem value={"test1"}>Small item 1</DropdownItem>
248
- <DropdownItem value={"test2"}>Small item 2</DropdownItem>
249
- <DropdownItem value={"test3"}>Small item 3</DropdownItem>
257
+ <DropdownItem value={'test1'}>Small item 1</DropdownItem>
258
+ <DropdownItem value={'test2'}>Small item 2</DropdownItem>
259
+ <DropdownItem value={'test3'}>Small item 3</DropdownItem>
250
260
  </Dropdown>
251
261
  </Box>
252
262
  </Box>
@@ -256,11 +266,13 @@ const ErrorTemplate: StoryFn<typeof Dropdown> = (args, context) => {
256
266
  export const Error: StoryObj<typeof Dropdown> = {
257
267
  render: ErrorTemplate,
258
268
  parameters: {
259
- controls: {
260
- include: [],
261
- },
262
269
  chromatic: { disableSnapshot: true },
263
270
  },
271
+ argTypes: {
272
+ error: {
273
+ control: false,
274
+ },
275
+ },
264
276
  };
265
277
 
266
278
  const DisabledTemplate: StoryFn<typeof Dropdown> = (args, context) => {
@@ -268,31 +280,31 @@ const DisabledTemplate: StoryFn<typeof Dropdown> = (args, context) => {
268
280
 
269
281
  // In a single select, selectedValue can be used as a string type instead of an array.
270
282
  // In the current Storybook Template, we use selectedValue as a string[] in order to also use it as multiple depending on the control selection.
271
- const [selectedValue, setSelectedValue] = useState<string[]>(["test1"]);
283
+ const [selectedValue, setSelectedValue] = useState<string[]>(['test1']);
272
284
  const handleSelectedValueChange = (event: SelectChangeEvent<unknown>) => {
273
285
  const {
274
286
  target: { value },
275
287
  } = event;
276
288
  setSelectedValue(
277
289
  // On autofill we get a stringified value.
278
- typeof value === "string" ? value.split(",") : (value as string[]),
290
+ typeof value === 'string' ? value.split(',') : (value as string[]),
279
291
  );
280
292
  };
281
293
 
282
294
  return (
283
- <Box sx={{ display: "flex", alignItems: "center", gap: 4 }}>
295
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 4 }}>
284
296
  <Box>
285
297
  <Dropdown
298
+ {...args}
286
299
  className={classNameFromGlobal}
287
300
  value={selectedValue}
288
301
  onChange={handleSelectedValueChange}
289
302
  disabled
290
- sx={{ width: "150px" }}
291
- {...args}
303
+ sx={{ width: '150px' }}
292
304
  >
293
- <DropdownItem value={"test1"}>Small item 1</DropdownItem>
294
- <DropdownItem value={"test2"}>Small item 2</DropdownItem>
295
- <DropdownItem value={"test3"}>Small item 3</DropdownItem>
305
+ <DropdownItem value={'test1'}>Small item 1</DropdownItem>
306
+ <DropdownItem value={'test2'}>Small item 2</DropdownItem>
307
+ <DropdownItem value={'test3'}>Small item 3</DropdownItem>
296
308
  </Dropdown>
297
309
  </Box>
298
310
  </Box>
@@ -302,9 +314,11 @@ const DisabledTemplate: StoryFn<typeof Dropdown> = (args, context) => {
302
314
  export const Disabled: StoryObj<typeof Dropdown> = {
303
315
  render: DisabledTemplate,
304
316
  parameters: {
305
- controls: {
306
- include: [],
307
- },
308
317
  chromatic: { disableSnapshot: true },
309
318
  },
319
+ argTypes: {
320
+ disabled: {
321
+ control: false,
322
+ },
323
+ },
310
324
  };
@@ -0,0 +1,275 @@
1
+ import { Canvas, Stories, Controls, Meta, Story } from '@storybook/addon-docs/blocks';
2
+ import Box from '@mui/material/Box';
3
+ import Demo from '@lunit/design-system-icons/Demo';
4
+ import ViewfinderT1 from '@lunit/design-system-icons/ViewfinderT1';
5
+ import RulerT2 from '@lunit/design-system-icons/RulerT2';
6
+
7
+ import Dropdown, { DropdownItem, DropdownDivider, DropdownSubtitle } from '@/components/Dropdown';
8
+ import * as DropdownStories from './Dropdown.stories';
9
+ import * as DropdownExampleStories from './DropdownExamples.stories';
10
+ import * as DropdownItemStories from './DropdownItem.stories';
11
+
12
+ <Meta name="Dropdown Docs" of={DropdownStories} />
13
+
14
+ # Dropdown
15
+
16
+ Dropdowns allow users to select one or multiple options from a list of choices.
17
+
18
+ ## Usage
19
+
20
+ ### Basic Dropdown
21
+
22
+ ```tsx
23
+ import { Dropdown, DropdownItem } from '@lunit/design-system';
24
+ // or
25
+ import Dropdown, { DropdownItem } from '@lunit/design-system/Dropdown';
26
+
27
+ <Dropdown value={selectedValue} onChange={handleChange}>
28
+ <DropdownItem value="option1">Option 1</DropdownItem>
29
+ <DropdownItem value="option2">Option 2</DropdownItem>
30
+ </Dropdown>;
31
+ ```
32
+
33
+ ### Demo
34
+
35
+ <Canvas of={DropdownStories.BasicDropdown} sourceState="none" />
36
+
37
+ <Controls />
38
+
39
+ ### Size
40
+
41
+ The Dropdown has three sizes: `small`, `medium` and `large`.<br />
42
+ Using the `size` prop, you can change the size of the Dropdown.<br />
43
+ Default size is `medium`.
44
+
45
+ <Canvas of={DropdownStories.Size} meta={DropdownStories} sourceState="none" />
46
+
47
+ ```tsx
48
+ <Dropdown size="small" value={selectedValue} onChange={handleChange}>
49
+ <DropdownItem value="option1">Small Option 1</DropdownItem>
50
+ <DropdownItem value="option2">Small Option 2</DropdownItem>
51
+ </Dropdown>
52
+
53
+ <Dropdown size="medium" value={selectedValue} onChange={handleChange}>
54
+ <DropdownItem value="option1">Medium Option 1</DropdownItem>
55
+ <DropdownItem value="option2">Medium Option 2</DropdownItem>
56
+ </Dropdown>
57
+
58
+ <Dropdown size="large" value={selectedValue} onChange={handleChange}>
59
+ <DropdownItem value="option1">Large Option 1</DropdownItem>
60
+ <DropdownItem value="option2">Large Option 2</DropdownItem>
61
+ </Dropdown>
62
+ ```
63
+
64
+ ### Select Type
65
+
66
+ The Dropdown has two select types: `single` and `multiple`.<br />
67
+ Using the `select` prop, you can change the select type of the Dropdown.<br />
68
+ Default select type is `single`.
69
+
70
+ <Canvas of={DropdownStories.SelectType} meta={DropdownStories} sourceState="none" />
71
+
72
+ ```tsx
73
+ // Single select
74
+ <Dropdown select="single" value={selectedValue} onChange={handleChange}>
75
+ <DropdownItem value="option1">Single Option 1</DropdownItem>
76
+ <DropdownItem value="option2">Single Option 2</DropdownItem>
77
+ </Dropdown>
78
+
79
+ // Multiple select
80
+ <Dropdown select="multiple" value={selectedValues} onChange={handleChange}>
81
+ <DropdownItem value="option1">Multiple Option 1</DropdownItem>
82
+ <DropdownItem value="option2">Multiple Option 2</DropdownItem>
83
+ </Dropdown>
84
+ ```
85
+
86
+ ### Error State
87
+
88
+ If you want to show an error state, you can use the `error` prop.<br />
89
+ Default error is `false`.
90
+
91
+ <Canvas of={DropdownStories.Error} sourceState="none" />
92
+
93
+ ```tsx
94
+ <Dropdown error value={selectedValue} onChange={handleChange}>
95
+ <DropdownItem value="option1">Option 1</DropdownItem>
96
+ <DropdownItem value="option2">Option 2</DropdownItem>
97
+ </Dropdown>
98
+ ```
99
+
100
+ ### Disabled
101
+
102
+ If you want to disable the Dropdown, you can use the `disabled` prop.<br />
103
+ Default disabled is `false`.
104
+
105
+ <Canvas of={DropdownStories.Disabled} sourceState="none" />
106
+
107
+ ```tsx
108
+ <Dropdown disabled value={selectedValue} onChange={handleChange}>
109
+ <DropdownItem value="option1">Option 1</DropdownItem>
110
+ <DropdownItem value="option2">Option 2</DropdownItem>
111
+ </Dropdown>
112
+ ```
113
+
114
+ ## DropdownItem
115
+
116
+ ### Basic DropdownItem
117
+
118
+ <Canvas of={DropdownItemStories.BasicDropdownItem} sourceState="none" />
119
+
120
+ ```tsx
121
+ <DropdownItem value="option1">Basic Option</DropdownItem>
122
+ ```
123
+
124
+ ### DropdownItem Filled Style
125
+
126
+ For GNB or specific single select situations, you can use the `isFilledStyle` prop.<br />
127
+ Default isFilledStyle is `false`.
128
+
129
+ <Canvas
130
+ of={DropdownItemStories.DropdownItemSelectStyle}
131
+ meta={DropdownItemStories}
132
+ sourceState="none"
133
+ />
134
+
135
+ ```tsx
136
+ // Filled Style DropdownItem in GNB
137
+ <DropdownItem value="option1" isFilledStyle>
138
+ Filled Style Option
139
+ </DropdownItem>
140
+ ```
141
+
142
+ ### DropdownItem with Left Icon and Right Text
143
+
144
+ DropdownItem can have a left icon and right text using the `leftIcon` and `rightText` props.
145
+
146
+ <Canvas
147
+ of={DropdownItemStories.DropdownItemWithIconText}
148
+ meta={DropdownItemStories}
149
+ sourceState="none"
150
+ />
151
+
152
+ ```tsx
153
+ <DropdownItem value="option1" leftIcon={<Demo fontSize="small" />} rightText="shortcut">
154
+ Option with Icon
155
+ </DropdownItem>
156
+ ```
157
+
158
+ ### DropdownItem with Divider and Subtitle
159
+
160
+ You can organize dropdown items using `DropdownDivider` and `DropdownSubtitle` components.
161
+
162
+ <Canvas
163
+ of={DropdownItemStories.DropdownItemDividerSubtitle}
164
+ meta={DropdownItemStories}
165
+ sourceState="none"
166
+ />
167
+
168
+ ```tsx
169
+ <Dropdown value={selectedValue} onChange={handleChange}>
170
+ <DropdownSubtitle title="Category 1" />
171
+ <DropdownItem value="option1">Option 1</DropdownItem>
172
+ <DropdownItem value="option2">Option 2</DropdownItem>
173
+ <DropdownDivider />
174
+ <DropdownSubtitle title="Category 2" />
175
+ <DropdownItem value="option3">Option 3</DropdownItem>
176
+ <DropdownItem value="option4">Option 4</DropdownItem>
177
+ </Dropdown>
178
+ ```
179
+
180
+ ## Advanced Examples
181
+
182
+ <Canvas
183
+ of={DropdownExampleStories.DropdownExamples}
184
+ meta={DropdownExampleStories}
185
+ sourceState="none"
186
+ />
187
+
188
+ ### Placeholder
189
+
190
+ You can implement placeholder functionality using the `displayEmpty` and `renderValue` props.<br /><br />
191
+ This example is simplified for demonstration purposes and may not fully match the default component behavior.<br />
192
+ For multiple select, the selected items in this example are shown in the order the user selected them.
193
+ However, the default Dropdown component displays selected items based on their order in the option list.
194
+
195
+ ```tsx
196
+ // Single select with placeholder
197
+ <Dropdown
198
+ value={selectedValue}
199
+ onChange={handleChange}
200
+ displayEmpty
201
+ renderValue={(selected) => {
202
+ if (!selected) {
203
+ // This code applies styling to the placeholder text
204
+ return <Box sx={{ color: 'text.secondary' }}>Select an option</Box>;
205
+ }
206
+ return selected;
207
+ }}
208
+ >
209
+ <DropdownItem value="option1">Option 1</DropdownItem>
210
+ <DropdownItem value="option2">Option 2</DropdownItem>
211
+ </Dropdown>
212
+
213
+ // Multiple select with placeholder
214
+ <Dropdown
215
+ select="multiple"
216
+ value={selectedValues}
217
+ onChange={handleChange}
218
+ displayEmpty
219
+ renderValue={(selected) => {
220
+ if ((selected as string[]).length === 0) {
221
+ // This code applies styling to the placeholder text
222
+ return <Box sx={{ color: 'text.secondary' }}>Select options</Box>;
223
+ }
224
+ return (selected as string[]).join(', ');
225
+ }}
226
+ >
227
+ <DropdownItem value="option1">Option 1</DropdownItem>
228
+ <DropdownItem value="option2">Option 2</DropdownItem>
229
+ </Dropdown>
230
+ ```
231
+
232
+ ### Button Dropdown
233
+
234
+ You can create a button-triggered dropdown by controlling the `open`, `onClose`, and `onOpen` props.<br /><br />
235
+ In most cases, you don’t need to manage the `open` state manually, as the Dropdown handles it internally.
236
+ This example explicitly defines the `open` state to demonstrate how a dropdown can be controlled using an external trigger, such as a button.
237
+
238
+ ```tsx
239
+ const [open, setOpen] = useState(false);
240
+
241
+ <Box sx={{ position: 'relative' }}>
242
+ <Button onClick={() => setOpen(true)}>Dropdown Button</Button>
243
+ <Dropdown
244
+ value={selectedValue}
245
+ onChange={handleChange}
246
+ open={open}
247
+ onClose={() => setOpen(false)}
248
+ onOpen={() => setOpen(true)}
249
+ sx={{
250
+ position: 'absolute',
251
+ clip: 'rect(0 0 0 0)',
252
+ clipPath: 'inset(50%)',
253
+ height: '1px',
254
+ overflow: 'hidden',
255
+ whiteSpace: 'nowrap',
256
+ width: '1px',
257
+ }}
258
+ >
259
+ <DropdownItem value="option1">Option 1</DropdownItem>
260
+ <DropdownItem value="option2">Option 2</DropdownItem>
261
+ </Dropdown>
262
+ </Box>;
263
+ ```
264
+
265
+ ## Reference
266
+
267
+ - [Material-UI Select](https://mui.com/material-ui/react-select/)
268
+ - [Material-UI Select API](https://mui.com/material-ui/api/select/)
269
+ - [Material-UI MenuItem API](https://mui.com/material-ui/api/menu-item/)
270
+ - [Lunit Design System Dropdown Figma](https://www.figma.com/design/9CoirIDPof6exynJosiGXi/Design-System_2.0.0_Latest?node-id=474-56086&m=dev)
271
+
272
+ ## Support
273
+
274
+ - Github: [Create a new issue](https://github.com/lunit-io/design-system/issues/new)
275
+ - Slack: #tf_design_system