@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.
- package/.babelrc.json +1 -1
- package/README.md +22 -21
- 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.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/Alert/Alert.js +8 -8
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/Alert/Alert.styled.js +26 -26
- package/dist/components/Alert/Alert.styled.js.map +1 -1
- package/dist/components/Alert/Alert.utils.js +9 -9
- package/dist/components/Alert/Alert.utils.js.map +1 -1
- package/dist/components/Alert/index.js +1 -1
- package/dist/components/Button/Button.js +23 -17
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/Button.styled.js +88 -88
- package/dist/components/Button/Button.styled.js.map +1 -1
- package/dist/components/Button/index.js +1 -1
- package/dist/components/Button/utils/getButtonPaddingBySizeAndKind.js +9 -9
- package/dist/components/Button/utils/getButtonPaddingBySizeAndKind.js.map +1 -1
- package/dist/components/Button/utils/getHoverStyle.js +1 -1
- package/dist/components/Button/utils/getHoverStyle.js.map +1 -1
- package/dist/components/Button/utils/getIconButtonPaddingBySizeAndKind.js +6 -12
- package/dist/components/Button/utils/getIconButtonPaddingBySizeAndKind.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.js +9 -9
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/Checkbox/index.js +1 -1
- package/dist/components/Chip/Chip.js +29 -26
- package/dist/components/Chip/Chip.js.map +1 -1
- package/dist/components/Chip/Chip.styled.js +52 -52
- package/dist/components/Chip/Chip.styled.js.map +1 -1
- package/dist/components/Chip/consts.js +5 -5
- package/dist/components/Chip/index.js +1 -1
- package/dist/components/DataTable/DataTable.js +1 -1
- package/dist/components/DataTable/index.js +1 -1
- package/dist/components/DatePicker/DatePicker.js +1 -1
- package/dist/components/DatePicker/index.js +1 -1
- package/dist/components/Dialog/Dialog.js +18 -18
- package/dist/components/Dialog/Dialog.js.map +1 -1
- package/dist/components/Dialog/Dialog.styled.js +90 -90
- package/dist/components/Dialog/Dialog.styled.js.map +1 -1
- package/dist/components/Dialog/components/DialogAction.js +6 -6
- package/dist/components/Dialog/index.js +1 -1
- package/dist/components/Dropdown/Dropdown.js +23 -21
- package/dist/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/components/Dropdown/Dropdown.styled.js +85 -86
- package/dist/components/Dropdown/Dropdown.styled.js.map +1 -1
- package/dist/components/Dropdown/DropdownItem.js +14 -14
- package/dist/components/Dropdown/DropdownItem.js.map +1 -1
- package/dist/components/Dropdown/index.js +2 -2
- package/dist/components/Dropdown/index.js.map +1 -1
- package/dist/components/FormLabel/FormLabel.js +1 -1
- package/dist/components/FormLabel/FormLabel.styled.js +2 -2
- package/dist/components/FormLabel/FormLabel.styled.js.map +1 -1
- package/dist/components/FormLabel/index.js +1 -1
- package/dist/components/Radio/Radio.js +8 -8
- package/dist/components/Radio/Radio.js.map +1 -1
- package/dist/components/Radio/index.js +1 -1
- package/dist/components/RadioGroup/index.js +1 -1
- package/dist/components/TextField/TextField.js +8 -8
- package/dist/components/TextField/TextField.js.map +1 -1
- package/dist/components/TextField/TextField.style.js +112 -112
- package/dist/components/TextField/TextField.style.js.map +1 -1
- package/dist/components/TextField/TextFieldIcon.js +2 -2
- package/dist/components/TextField/TextFieldIcon.js.map +1 -1
- package/dist/components/TextField/index.js +1 -1
- package/dist/components/Toast/Toast.js +13 -13
- package/dist/components/Toast/Toast.js.map +1 -1
- package/dist/components/Toast/Toast.styled.js +26 -26
- package/dist/components/Toast/Toast.utils.js +3 -3
- package/dist/components/Toast/Toast.utils.js.map +1 -1
- package/dist/components/Toast/index.js +1 -1
- package/dist/components/Toggle/Toggle.js +3 -4
- package/dist/components/Toggle/Toggle.js.map +1 -1
- package/dist/components/Toggle/Toggle.styled.js +30 -30
- package/dist/components/Toggle/Toggle.styled.js.map +1 -1
- package/dist/components/Toggle/index.js +1 -1
- package/dist/components/ToggleButton/ToggleButton.js +6 -6
- package/dist/components/ToggleButton/ToggleButton.js.map +1 -1
- package/dist/components/ToggleButton/ToggleButton.styled.js +20 -20
- package/dist/components/ToggleButton/ToggleButton.styled.js.map +1 -1
- package/dist/components/ToggleButton/index.js +1 -1
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.js +2 -2
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.js.map +1 -1
- package/dist/components/ToggleButtonGroup/index.js +1 -1
- package/dist/components/Tooltip/Tooltip.js +1 -1
- package/dist/components/Tooltip/index.js +1 -1
- package/dist/components/Typography/Typography.js +1 -1
- package/dist/components/Typography/Typography.js.map +1 -1
- package/dist/components/Typography/index.js +1 -1
- package/dist/foundation/Elevation/index.js +27 -27
- package/dist/foundation/Elevation/utils.js +1 -1
- package/dist/foundation/Elevation/utils.js.map +1 -1
- package/dist/foundation/Typography/index.js +35 -35
- package/dist/foundation/Typography/index.js.map +1 -1
- package/dist/foundation/Typography/tokens.js +136 -136
- package/dist/foundation/Typography/tokens.js.map +1 -1
- package/dist/foundation/colors/base/blue.js +12 -12
- package/dist/foundation/colors/base/green.js +12 -12
- package/dist/foundation/colors/base/grey.js +28 -28
- package/dist/foundation/colors/base/index.js +11 -11
- package/dist/foundation/colors/base/lunitGreen.js +11 -11
- package/dist/foundation/colors/base/lunitTeal.js +12 -12
- package/dist/foundation/colors/base/magenta.js +12 -12
- package/dist/foundation/colors/base/opacity.js +4 -4
- package/dist/foundation/colors/base/orange.js +12 -12
- package/dist/foundation/colors/base/purple.js +12 -12
- package/dist/foundation/colors/base/red.js +12 -12
- package/dist/foundation/colors/base/yellow.js +12 -12
- package/dist/foundation/colors/index.js +119 -121
- package/dist/foundation/colors/index.js.map +1 -1
- package/dist/foundation/colors/token/component.js +184 -212
- package/dist/foundation/colors/token/component.js.map +1 -1
- package/dist/foundation/colors/token/core.js +112 -133
- package/dist/foundation/colors/token/core.js.map +1 -1
- package/dist/foundation/colors/token/index.js +2 -2
- package/dist/foundation/index.js +5 -5
- package/dist/index.js +20 -20
- package/dist/theme.js +6 -6
- package/dist/types/components/Alert/Alert.d.ts +2 -2
- package/dist/types/components/Alert/Alert.styled.d.ts +1 -2
- package/dist/types/components/Alert/Alert.types.d.ts +2 -2
- package/dist/types/components/Alert/Alert.utils.d.ts +1 -1
- package/dist/types/components/Alert/index.d.ts +1 -1
- package/dist/types/components/Button/Button.d.ts +1 -1
- package/dist/types/components/Button/Button.styled.d.ts +226 -227
- package/dist/types/components/Button/Button.types.d.ts +16 -16
- package/dist/types/components/Button/index.d.ts +1 -1
- package/dist/types/components/Button/utils/getButtonPaddingBySizeAndKind.d.ts +4 -4
- package/dist/types/components/Button/utils/getHoverStyle.d.ts +2 -1
- package/dist/types/components/Button/utils/getIconButtonPaddingBySizeAndKind.d.ts +4 -4
- package/dist/types/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/types/components/Checkbox/index.d.ts +1 -1
- package/dist/types/components/Chip/Chip.d.ts +1 -1
- package/dist/types/components/Chip/Chip.styled.d.ts +6 -7
- package/dist/types/components/Chip/Chip.types.d.ts +15 -14
- package/dist/types/components/Chip/index.d.ts +1 -1
- package/dist/types/components/DataTable/index.d.ts +1 -1
- package/dist/types/components/DatePicker/index.d.ts +1 -1
- package/dist/types/components/Dialog/Dialog.d.ts +11 -11
- package/dist/types/components/Dialog/Dialog.styled.d.ts +3 -4
- package/dist/types/components/Dialog/components/DialogAction.d.ts +2 -2
- package/dist/types/components/Dialog/index.d.ts +2 -2
- package/dist/types/components/Dropdown/Dropdown.d.ts +2 -2
- package/dist/types/components/Dropdown/Dropdown.styled.d.ts +3 -4
- package/dist/types/components/Dropdown/Dropdown.types.d.ts +5 -5
- package/dist/types/components/Dropdown/DropdownItem.d.ts +3 -3
- package/dist/types/components/Dropdown/index.d.ts +3 -3
- package/dist/types/components/FormLabel/FormLabel.d.ts +1 -1
- package/dist/types/components/FormLabel/index.d.ts +1 -1
- package/dist/types/components/Radio/Radio.d.ts +1 -1
- package/dist/types/components/Radio/index.d.ts +1 -1
- package/dist/types/components/RadioGroup/index.d.ts +1 -1
- package/dist/types/components/TextField/TextField.d.ts +2 -2
- package/dist/types/components/TextField/TextField.style.d.ts +3 -4
- package/dist/types/components/TextField/TextField.types.d.ts +6 -6
- package/dist/types/components/TextField/TextFieldIcon.d.ts +2 -2
- package/dist/types/components/TextField/index.d.ts +2 -2
- package/dist/types/components/Toast/Toast.d.ts +2 -2
- package/dist/types/components/Toast/Toast.types.d.ts +3 -3
- package/dist/types/components/Toast/Toast.utils.d.ts +1 -1
- package/dist/types/components/Toast/index.d.ts +2 -2
- package/dist/types/components/Toggle/Toggle.d.ts +1 -1
- package/dist/types/components/Toggle/Toggle.styled.d.ts +2 -2
- package/dist/types/components/Toggle/Toggle.types.d.ts +3 -3
- package/dist/types/components/Toggle/index.d.ts +1 -1
- package/dist/types/components/ToggleButton/ToggleButton.d.ts +1 -1
- package/dist/types/components/ToggleButton/ToggleButton.styled.d.ts +2 -3
- package/dist/types/components/ToggleButton/ToggleButton.types.d.ts +10 -10
- package/dist/types/components/ToggleButton/index.d.ts +1 -1
- package/dist/types/components/ToggleButtonGroup/ToggleButtonGroup.d.ts +1 -1
- package/dist/types/components/ToggleButtonGroup/index.d.ts +1 -1
- package/dist/types/components/Tooltip/index.d.ts +1 -1
- package/dist/types/components/Typography/Typography.d.ts +6 -6
- package/dist/types/components/Typography/index.d.ts +1 -1
- package/dist/types/components/index.d.ts +2 -2
- package/dist/types/foundation/Elevation/index.d.ts +22 -22
- package/dist/types/foundation/Typography/index.d.ts +78 -78
- package/dist/types/foundation/Typography/tokens.d.ts +69 -69
- package/dist/types/foundation/colors/base/index.d.ts +11 -11
- package/dist/types/foundation/colors/index.d.ts +13 -20
- package/dist/types/foundation/colors/token/component.d.ts +1 -1
- package/dist/types/foundation/colors/token/core.d.ts +1 -1
- package/dist/types/foundation/colors/token/index.d.ts +2 -2
- package/dist/types/foundation/colors/types.d.ts +0 -7
- package/dist/types/foundation/index.d.ts +4 -11
- package/dist/types/foundation/spacing.d.ts +1 -1
- package/dist/types/index.d.ts +20 -20
- package/dist/types/theme.d.ts +1 -1
- package/package.json +9 -11
- package/src/components/Alert/Alert.styled.ts +39 -49
- package/src/components/Alert/Alert.tsx +10 -16
- package/src/components/Alert/Alert.types.ts +2 -2
- package/src/components/Alert/Alert.utils.ts +13 -22
- package/src/components/Alert/index.ts +1 -1
- package/src/components/Button/Button.styled.ts +98 -101
- package/src/components/Button/Button.tsx +71 -69
- package/src/components/Button/Button.types.ts +19 -21
- package/src/components/Button/index.ts +1 -1
- package/src/components/Button/utils/getButtonPaddingBySizeAndKind.ts +13 -13
- package/src/components/Button/utils/getHoverStyle.ts +4 -2
- package/src/components/Button/utils/getIconButtonPaddingBySizeAndKind.ts +10 -19
- package/src/components/Checkbox/Checkbox.tsx +13 -25
- package/src/components/Checkbox/index.ts +1 -1
- package/src/components/Chip/Chip.styled.ts +69 -72
- package/src/components/Chip/Chip.tsx +33 -55
- package/src/components/Chip/Chip.types.ts +17 -25
- package/src/components/Chip/consts.ts +5 -5
- package/src/components/Chip/index.ts +1 -1
- package/src/components/DataTable/DataTable.tsx +2 -2
- package/src/components/DataTable/index.ts +1 -1
- package/src/components/DatePicker/DatePicker.tsx +2 -2
- package/src/components/DatePicker/index.ts +1 -1
- package/src/components/Dialog/Dialog.styled.ts +112 -114
- package/src/components/Dialog/Dialog.tsx +41 -46
- package/src/components/Dialog/components/DialogAction.tsx +8 -8
- package/src/components/Dialog/index.ts +3 -3
- package/src/components/Dropdown/Dropdown.styled.tsx +88 -89
- package/src/components/Dropdown/Dropdown.tsx +29 -30
- package/src/components/Dropdown/Dropdown.types.ts +5 -6
- package/src/components/Dropdown/DropdownItem.tsx +18 -29
- package/src/components/Dropdown/index.ts +3 -7
- package/src/components/FormLabel/FormLabel.styled.ts +3 -3
- package/src/components/FormLabel/FormLabel.tsx +3 -3
- package/src/components/FormLabel/index.ts +1 -1
- package/src/components/Radio/Radio.tsx +12 -29
- package/src/components/Radio/index.ts +1 -1
- package/src/components/RadioGroup/index.ts +1 -1
- package/src/components/TextField/TextField.style.ts +123 -132
- package/src/components/TextField/TextField.tsx +50 -62
- package/src/components/TextField/TextField.types.ts +6 -9
- package/src/components/TextField/TextFieldIcon.tsx +4 -7
- package/src/components/TextField/index.ts +2 -2
- package/src/components/Toast/Toast.styled.ts +26 -26
- package/src/components/Toast/Toast.tsx +14 -28
- package/src/components/Toast/Toast.types.ts +3 -8
- package/src/components/Toast/Toast.utils.ts +5 -8
- package/src/components/Toast/index.tsx +2 -2
- package/src/components/Toggle/Toggle.styled.ts +31 -32
- package/src/components/Toggle/Toggle.tsx +5 -11
- package/src/components/Toggle/Toggle.types.ts +3 -3
- package/src/components/Toggle/index.ts +1 -1
- package/src/components/ToggleButton/ToggleButton.styled.ts +47 -49
- package/src/components/ToggleButton/ToggleButton.tsx +91 -97
- package/src/components/ToggleButton/ToggleButton.types.ts +10 -10
- package/src/components/ToggleButton/index.ts +1 -1
- package/src/components/ToggleButtonGroup/ToggleButtonGroup.tsx +3 -8
- package/src/components/ToggleButtonGroup/index.tsx +1 -1
- package/src/components/Tooltip/Tooltip.tsx +2 -2
- package/src/components/Tooltip/index.ts +1 -1
- package/src/components/Typography/Typography.tsx +7 -10
- package/src/components/Typography/index.ts +1 -1
- package/src/components/index.ts +2 -2
- package/src/foundation/Elevation/index.ts +27 -27
- package/src/foundation/Elevation/utils.ts +14 -8
- package/src/foundation/Typography/index.ts +58 -57
- package/src/foundation/Typography/tokens.ts +138 -138
- package/src/foundation/colors/base/blue.ts +12 -12
- package/src/foundation/colors/base/green.ts +12 -12
- package/src/foundation/colors/base/grey.ts +28 -28
- package/src/foundation/colors/base/index.ts +11 -11
- package/src/foundation/colors/base/lunitGreen.ts +11 -11
- package/src/foundation/colors/base/lunitTeal.ts +12 -12
- package/src/foundation/colors/base/magenta.ts +12 -12
- package/src/foundation/colors/base/opacity.ts +4 -4
- package/src/foundation/colors/base/orange.ts +12 -12
- package/src/foundation/colors/base/purple.ts +12 -12
- package/src/foundation/colors/base/red.ts +12 -12
- package/src/foundation/colors/base/yellow.ts +12 -12
- package/src/foundation/colors/index.ts +119 -120
- package/src/foundation/colors/token/component.ts +185 -213
- package/src/foundation/colors/token/core.ts +113 -134
- package/src/foundation/colors/token/index.ts +2 -2
- package/src/foundation/colors/types.ts +0 -7
- package/src/foundation/index.ts +8 -8
- package/src/foundation/spacing.ts +1 -1
- package/src/index.ts +20 -20
- package/src/stories/GettingStarted.mdx +6 -6
- package/src/stories/components/Alert/Alert.stories.tsx +38 -45
- package/src/stories/components/Button/BasicButton.stories.tsx +68 -59
- package/src/stories/components/Button/ButtonDocs.mdx +17 -41
- package/src/stories/components/Button/Color.stories.tsx +28 -51
- package/src/stories/components/Button/IconButton.stories.tsx +40 -47
- package/src/stories/components/Button/Kind.stories.tsx +100 -213
- package/src/stories/components/CheckBox/BasicCheckbox.stories.tsx +52 -71
- package/src/stories/components/CheckBox/CheckboxDocs.mdx +6 -6
- package/src/stories/components/Chip/Chip.stories.tsx +75 -75
- package/src/stories/components/Chip/ChipDocs.mdx +12 -13
- package/src/stories/components/DataTable/DataTable.stories.tsx +4 -4
- package/src/stories/components/DatePicker/DatePicker.stories.tsx +4 -4
- package/src/stories/components/Dialog/Dialog.stories.tsx +103 -135
- package/src/stories/components/Dialog/DialogDocs.mdx +7 -13
- package/src/stories/components/Dropdown/Dropdown.stories.tsx +96 -82
- package/src/stories/components/Dropdown/DropdownDocs.mdx +275 -0
- package/src/stories/components/Dropdown/DropdownExamples.stories.tsx +40 -47
- package/src/stories/components/Dropdown/DropdownItem.stories.tsx +113 -98
- package/src/stories/components/SelectControl/RadioGroup.stories.tsx +17 -30
- package/src/stories/components/SelectControl/RadioStatus.stories.tsx +16 -23
- package/src/stories/components/SelectControl/Toggle.stories.tsx +33 -78
- package/src/stories/components/TextField/BasicTextField.stories.tsx +44 -53
- package/src/stories/components/TextField/TextFieldDocs.mdx +8 -12
- package/src/stories/components/TextField/TextFieldMulti.stories.tsx +39 -55
- package/src/stories/components/TextField/TextFieldSingle.stories.tsx +74 -118
- package/src/stories/components/TextField/TextFieldSize.stories.tsx +35 -55
- package/src/stories/components/Toast/Toast.stories.tsx +35 -50
- package/src/stories/components/ToggleButton/Basic.stories.tsx +115 -152
- package/src/stories/components/ToggleButton/ToggleButtonDocs.mdx +10 -14
- package/src/stories/components/ToggleButton/ToggleButtonKind.stories.tsx +141 -200
- package/src/stories/components/ToggleButton/WithIcon.stories.tsx +87 -107
- package/src/stories/components/Tooltip/Tooltip.stories.tsx +4 -4
- package/src/stories/foundation/Elevation/Elevation.stories.tsx +48 -54
- package/src/stories/foundation/Elevation/styled.ts +3 -3
- package/src/stories/foundation/Typography/Typography.mdx +9 -13
- package/src/stories/foundation/Typography/Typography.stories.tsx +25 -41
- package/src/stories/foundation/Typography/TypographyGroup.tsx +14 -25
- package/src/stories/foundation/Typography/const.ts +13 -19
- package/src/stories/foundation/colors/ColorSystem.tsx +42 -40
- package/src/stories/foundation/colors/Colors.stories.tsx +40 -41
- package/src/stories/foundation/colors/Docs.mdx +73 -77
- package/src/stories/foundation/colors/Mui.stories.tsx +6 -8
- package/src/stories/foundation/colors/Token.inComponent.stories.tsx +81 -71
- package/src/stories/foundation/colors/TokenPaletteTable.stories.tsx +7 -7
- package/src/stories/foundation/colors/TokenPaletteTable.tsx +23 -49
- package/src/stories/foundation/colors/styled.ts +26 -26
- package/src/theme.ts +6 -6
- package/src/types.d.ts +1 -1
- package/tsconfig.build.json +1 -5
|
@@ -1,40 +1,46 @@
|
|
|
1
|
-
import React, { useState } from
|
|
2
|
-
import { StoryFn, Meta, StoryObj } from
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { StoryFn, Meta, StoryObj } from '@storybook/react-webpack5';
|
|
3
3
|
|
|
4
|
-
import Dropdown, { DropdownItem } from
|
|
5
|
-
import { Box, SelectChangeEvent } from
|
|
4
|
+
import Dropdown, { DropdownItem } from '@/components/Dropdown';
|
|
5
|
+
import { Box, SelectChangeEvent } from '@mui/material';
|
|
6
6
|
|
|
7
7
|
export default {
|
|
8
|
-
title:
|
|
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:
|
|
19
|
+
type: 'radio',
|
|
14
20
|
},
|
|
15
|
-
options: [
|
|
16
|
-
description:
|
|
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:
|
|
26
|
+
type: 'radio',
|
|
21
27
|
},
|
|
22
|
-
options: [
|
|
23
|
-
description:
|
|
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:
|
|
33
|
+
type: 'radio',
|
|
28
34
|
},
|
|
29
35
|
options: [true, false],
|
|
30
|
-
description:
|
|
36
|
+
description: 'The error prop toggles the error state.',
|
|
31
37
|
},
|
|
32
38
|
disabled: {
|
|
33
39
|
control: {
|
|
34
|
-
type:
|
|
40
|
+
type: 'radio',
|
|
35
41
|
},
|
|
36
42
|
options: [true, false],
|
|
37
|
-
description:
|
|
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[]>([
|
|
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 ===
|
|
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:
|
|
65
|
-
{...args}
|
|
71
|
+
sx={{ width: '150px' }}
|
|
66
72
|
>
|
|
67
|
-
<DropdownItem value={
|
|
68
|
-
<DropdownItem value={
|
|
69
|
-
<DropdownItem value={
|
|
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[]>([
|
|
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 ===
|
|
100
|
+
typeof value === 'string' ? value.split(',') : (value as string[]),
|
|
95
101
|
);
|
|
96
102
|
};
|
|
97
103
|
|
|
98
104
|
return (
|
|
99
|
-
<Box sx={{ display:
|
|
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:
|
|
107
|
-
{...args}
|
|
113
|
+
sx={{ width: '150px' }}
|
|
108
114
|
>
|
|
109
|
-
<DropdownItem value={
|
|
110
|
-
<DropdownItem value={
|
|
111
|
-
<DropdownItem value={
|
|
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:
|
|
121
|
-
{...args}
|
|
127
|
+
sx={{ width: '150px' }}
|
|
122
128
|
>
|
|
123
|
-
<DropdownItem value={
|
|
124
|
-
<DropdownItem value={
|
|
125
|
-
<DropdownItem value={
|
|
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:
|
|
135
|
-
{...args}
|
|
141
|
+
sx={{ width: '150px' }}
|
|
136
142
|
>
|
|
137
|
-
<DropdownItem value={
|
|
138
|
-
<DropdownItem value={
|
|
139
|
-
<DropdownItem value={
|
|
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>(
|
|
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[]>([
|
|
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 ===
|
|
181
|
+
typeof value === 'string' ? value.split(',') : (value as string[]),
|
|
174
182
|
);
|
|
175
183
|
};
|
|
176
184
|
|
|
177
185
|
return (
|
|
178
|
-
<Box sx={{ display:
|
|
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:
|
|
185
|
-
{...args}
|
|
193
|
+
sx={{ width: '150px' }}
|
|
186
194
|
>
|
|
187
|
-
<DropdownItem value={
|
|
188
|
-
<DropdownItem value={
|
|
189
|
-
<DropdownItem value={
|
|
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:
|
|
199
|
-
{...args}
|
|
207
|
+
sx={{ width: '200px' }}
|
|
200
208
|
>
|
|
201
|
-
<DropdownItem value={
|
|
202
|
-
<DropdownItem value={
|
|
203
|
-
<DropdownItem value={
|
|
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[]>([
|
|
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 ===
|
|
242
|
+
typeof value === 'string' ? value.split(',') : (value as string[]),
|
|
233
243
|
);
|
|
234
244
|
};
|
|
235
245
|
|
|
236
246
|
return (
|
|
237
|
-
<Box sx={{ display:
|
|
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:
|
|
245
|
-
{...args}
|
|
255
|
+
sx={{ width: '150px' }}
|
|
246
256
|
>
|
|
247
|
-
<DropdownItem value={
|
|
248
|
-
<DropdownItem value={
|
|
249
|
-
<DropdownItem value={
|
|
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[]>([
|
|
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 ===
|
|
290
|
+
typeof value === 'string' ? value.split(',') : (value as string[]),
|
|
279
291
|
);
|
|
280
292
|
};
|
|
281
293
|
|
|
282
294
|
return (
|
|
283
|
-
<Box sx={{ display:
|
|
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:
|
|
291
|
-
{...args}
|
|
303
|
+
sx={{ width: '150px' }}
|
|
292
304
|
>
|
|
293
|
-
<DropdownItem value={
|
|
294
|
-
<DropdownItem value={
|
|
295
|
-
<DropdownItem value={
|
|
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
|