@redis-ui/components 42.8.0 → 43.2.1
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/dist/AutoCompleteSelect/AutoCompleteSelect.cjs +7 -1
- package/dist/AutoCompleteSelect/AutoCompleteSelect.js +7 -1
- package/dist/AutoCompleteSelect/hooks/useAutoCompleteSelect.cjs +7 -1
- package/dist/AutoCompleteSelect/hooks/useAutoCompleteSelect.d.ts +8 -1
- package/dist/AutoCompleteSelect/hooks/useAutoCompleteSelect.js +7 -1
- package/dist/BoxSelectionGroup/components/Item/components/BoxStateIndicator/BoxStateIndicator.cjs +8 -4
- package/dist/BoxSelectionGroup/components/Item/components/BoxStateIndicator/BoxStateIndicator.js +8 -4
- package/dist/BoxSelectionGroup/components/Item/components/Compose/Compose.style.cjs +18 -4
- package/dist/BoxSelectionGroup/components/Item/components/Compose/Compose.style.js +18 -4
- package/dist/BoxSelectionGroup/hooks/useBoxSelectionGroup.cjs +3 -1
- package/dist/BoxSelectionGroup/hooks/useBoxSelectionGroup.js +3 -1
- package/dist/Button/Button.style.cjs +4 -1
- package/dist/Button/Button.style.js +4 -1
- package/dist/Button/Button.style.utils.cjs +16 -1
- package/dist/Button/Button.style.utils.js +16 -1
- package/dist/Button/Button.types.cjs +1 -1
- package/dist/Button/Button.types.d.ts +1 -1
- package/dist/Button/Button.types.js +1 -1
- package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.cjs +59 -0
- package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.d.ts +4 -0
- package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.js +57 -0
- package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.style.cjs +40 -0
- package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.style.d.ts +8 -0
- package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.style.js +38 -0
- package/dist/Button/CopyToClipboardButton/CopyToClipboardButton.types.d.ts +5 -0
- package/dist/Button/TextButton/TextButton.style.cjs +4 -1
- package/dist/Button/TextButton/TextButton.style.js +4 -1
- package/dist/Button/TextButton/TextButton.types.cjs +1 -1
- package/dist/Button/TextButton/TextButton.types.d.ts +1 -1
- package/dist/Button/TextButton/TextButton.types.js +1 -1
- package/dist/Button/index.d.ts +2 -0
- package/dist/Checkbox/components/Label/Label.style.cjs +15 -3
- package/dist/Checkbox/components/Label/Label.style.js +15 -3
- package/dist/Chip/components/CloseButton/CloseButton.cjs +3 -1
- package/dist/Chip/components/CloseButton/CloseButton.js +3 -1
- package/dist/Chip/components/Compose/Compose.style.cjs +4 -1
- package/dist/Chip/components/Compose/Compose.style.js +4 -1
- package/dist/Drawer/components/Description/Description.cjs +3 -1
- package/dist/Drawer/components/Description/Description.js +3 -1
- package/dist/Helpers/contexts/Popper/PopperCollisionBoundaryManager.cjs +3 -1
- package/dist/Helpers/contexts/Popper/PopperCollisionBoundaryManager.js +3 -1
- package/dist/Helpers/contexts/PrimitiveContextState.cjs +28 -16
- package/dist/Helpers/contexts/PrimitiveContextState.js +28 -16
- package/dist/Helpers/contexts/SharedId.context.cjs +9 -5
- package/dist/Helpers/contexts/SharedId.context.js +9 -5
- package/dist/Helpers/css.utils.cjs +18 -4
- package/dist/Helpers/css.utils.d.ts +15 -3
- package/dist/Helpers/css.utils.js +18 -4
- package/dist/Helpers/hooks/useScrollable.cjs +3 -1
- package/dist/Helpers/hooks/useScrollable.js +3 -1
- package/dist/Helpers/react.utils.cjs +6 -2
- package/dist/Helpers/react.utils.js +6 -2
- package/dist/HighlightedIcon/HighlightedIcon.cjs +26 -0
- package/dist/HighlightedIcon/HighlightedIcon.d.ts +3 -0
- package/dist/HighlightedIcon/HighlightedIcon.js +26 -0
- package/dist/HighlightedIcon/HighlightedIcon.style.cjs +49 -0
- package/dist/HighlightedIcon/HighlightedIcon.style.d.ts +5 -0
- package/dist/HighlightedIcon/HighlightedIcon.style.js +47 -0
- package/dist/HighlightedIcon/HighlightedIcon.types.d.ts +8 -0
- package/dist/HighlightedIcon/index.d.ts +3 -0
- package/dist/Inputs/QuantityCounter/components/InputGroup/components/ValueLabel/ValueLabel.cjs +9 -5
- package/dist/Inputs/QuantityCounter/components/InputGroup/components/ValueLabel/ValueLabel.js +9 -5
- package/dist/Inputs/components/Compose/Compose.style.cjs +29 -6
- package/dist/Inputs/components/Compose/Compose.style.js +29 -6
- package/dist/Inputs/hooks/numericInput/numericInput.utils.cjs +12 -4
- package/dist/Inputs/hooks/numericInput/numericInput.utils.js +12 -4
- package/dist/Inputs/hooks/numericInput/useNumericInput.cjs +15 -3
- package/dist/Inputs/hooks/numericInput/useNumericInput.js +15 -3
- package/dist/Loader/Loader.cjs +1 -0
- package/dist/Loader/Loader.js +1 -0
- package/dist/Menu/components/Content/components/Item/Components/Compose/Compose.style.cjs +19 -4
- package/dist/Menu/components/Content/components/Item/Components/Compose/Compose.style.js +19 -4
- package/dist/Menu/components/Content/components/Label/components/Compose/Compose.style.cjs +4 -1
- package/dist/Menu/components/Content/components/Label/components/Compose/Compose.style.js +4 -1
- package/dist/Modal/components/Content/components/Compose/Compose.cjs +3 -1
- package/dist/Modal/components/Content/components/Compose/Compose.js +3 -1
- package/dist/Modal/components/Content/components/Description/Description.cjs +3 -1
- package/dist/Modal/components/Content/components/Description/Description.js +3 -1
- package/dist/MultiSelect/components/Compose/hooks/useMultiSelectContextApi.cjs +3 -1
- package/dist/MultiSelect/components/Compose/hooks/useMultiSelectContextApi.js +3 -1
- package/dist/MultiSelect/components/Trigger/components/MultiValue/MultiValue.cjs +3 -1
- package/dist/MultiSelect/components/Trigger/components/MultiValue/MultiValue.js +3 -1
- package/dist/Overflow/Overflow.cjs +3 -1
- package/dist/Overflow/Overflow.js +3 -1
- package/dist/Overflow/Overflow.utils.cjs +15 -6
- package/dist/Overflow/Overflow.utils.js +15 -6
- package/dist/Overflow/components/OverflowContainer/OverflowContainer.cjs +3 -1
- package/dist/Overflow/components/OverflowContainer/OverflowContainer.js +3 -1
- package/dist/Pagination/components/PageSizeSelect.cjs +3 -1
- package/dist/Pagination/components/PageSizeSelect.js +3 -1
- package/dist/Popover/components/Content/Content.cjs +3 -1
- package/dist/Popover/components/Content/Content.js +3 -1
- package/dist/Popover/components/Content/components/Footer/Footer.cjs +3 -1
- package/dist/Popover/components/Content/components/Footer/Footer.js +3 -1
- package/dist/RadioGroup/components/Item/components/Label/Label.style.cjs +15 -3
- package/dist/RadioGroup/components/Item/components/Label/Label.style.js +15 -3
- package/dist/ScreenReaderAnnounce/ScreenReaderAnnounce.cjs +3 -1
- package/dist/ScreenReaderAnnounce/ScreenReaderAnnounce.js +3 -1
- package/dist/Section/components/Header/components/CollapseButton/CollapseButton.cjs +3 -1
- package/dist/Section/components/Header/components/CollapseButton/CollapseButton.js +3 -1
- package/dist/Select/components/Content/components/Option/components/Compose/Compose.style.cjs +16 -4
- package/dist/Select/components/Content/components/Option/components/Compose/Compose.style.js +16 -4
- package/dist/Select/components/Content/components/OptionList/OptionList.cjs +6 -4
- package/dist/Select/components/Content/components/OptionList/OptionList.js +6 -4
- package/dist/Select/components/Content/components/OptionList/Virtual.cjs +9 -5
- package/dist/Select/components/Content/components/OptionList/Virtual.js +9 -5
- package/dist/Select/components/Context/hooks/useSearch.cjs +3 -1
- package/dist/Select/components/Context/hooks/useSearch.js +3 -1
- package/dist/Select/components/Trigger/components/Compose/Compose.style.cjs +33 -7
- package/dist/Select/components/Trigger/components/Compose/Compose.style.js +33 -7
- package/dist/SideBar/components/Item/Item.style.cjs +14 -3
- package/dist/SideBar/components/Item/Item.style.js +14 -3
- package/dist/Skeleton/components/Circle/Circle.cjs +1 -1
- package/dist/Skeleton/components/Circle/Circle.js +1 -1
- package/dist/Skeleton/components/Square/Square.cjs +1 -1
- package/dist/Skeleton/components/Square/Square.js +1 -1
- package/dist/Slider/components/Label/Compose/Compose.cjs +3 -1
- package/dist/Slider/components/Label/Compose/Compose.js +3 -1
- package/dist/Slider/components/Mark/Compose/Compose.cjs +3 -1
- package/dist/Slider/components/Mark/Compose/Compose.js +3 -1
- package/dist/Slider/hooks/useOffset.cjs +3 -1
- package/dist/Slider/hooks/useOffset.js +3 -1
- package/dist/Stepper/Stepper.cjs +14 -5
- package/dist/Stepper/Stepper.d.ts +2 -0
- package/dist/Stepper/Stepper.js +14 -5
- package/dist/Stepper/Stepper.utils.cjs +12 -0
- package/dist/Stepper/Stepper.utils.d.ts +2 -0
- package/dist/Stepper/Stepper.utils.js +12 -0
- package/dist/Stepper/components/Compose/Compose.d.ts +1 -0
- package/dist/Stepper/components/Step/Step.cjs +2 -0
- package/dist/Stepper/components/Step/Step.d.ts +1 -0
- package/dist/Stepper/components/Step/Step.js +2 -0
- package/dist/Stepper/components/Step/components/Compose/Compose.cjs +5 -10
- package/dist/Stepper/components/Step/components/Compose/Compose.js +5 -10
- package/dist/Stepper/components/Step/components/Separator/Separator.cjs +15 -0
- package/dist/Stepper/components/Step/components/Separator/Separator.d.ts +3 -0
- package/dist/Stepper/components/Step/components/Separator/Separator.js +15 -0
- package/dist/Stepper/components/Step/components/Separator/Separator.style.cjs +24 -0
- package/dist/Stepper/components/Step/components/Separator/Separator.style.d.ts +1 -0
- package/dist/Stepper/components/Step/components/Separator/Separator.style.js +22 -0
- package/dist/Stepper/components/Step/components/Separator/Separator.types.d.ts +5 -0
- package/dist/Stepper/hooks/useStepperInteractive.cjs +12 -4
- package/dist/Stepper/hooks/useStepperInteractive.js +12 -4
- package/dist/Switch/components/Switcher/Switcher.cjs +3 -1
- package/dist/Switch/components/Switcher/Switcher.js +3 -1
- package/dist/Switch/components/Switcher/Switcher.style.cjs +31 -8
- package/dist/Switch/components/Switcher/Switcher.style.js +31 -8
- package/dist/Tabs/components/TabBar/components/Trigger/components/Marker/Marker.style.cjs +24 -5
- package/dist/Tabs/components/TabBar/components/Trigger/components/Marker/Marker.style.js +24 -5
- package/dist/Tabs/components/TabBar/components/Trigger/components/Tab/Tab.style.cjs +24 -5
- package/dist/Tabs/components/TabBar/components/Trigger/components/Tab/Tab.style.js +24 -5
- package/dist/ThemeModeSwitch/useThemeModeSwitch.cjs +6 -2
- package/dist/ThemeModeSwitch/useThemeModeSwitch.js +6 -2
- package/dist/Toast/core/content.helper.cjs +8 -4
- package/dist/Toast/core/content.helper.js +8 -4
- package/dist/Tooltip/components/Content/Content.cjs +3 -1
- package/dist/Tooltip/components/Content/Content.js +3 -1
- package/dist/TreeView/TreeView.cjs +3 -1
- package/dist/TreeView/TreeView.js +3 -1
- package/dist/TreeView/components/TreeItem/components/Compose/Compose.cjs +6 -4
- package/dist/TreeView/components/TreeItem/components/Compose/Compose.js +6 -4
- package/dist/Typography/Typography.types.cjs +4 -0
- package/dist/Typography/Typography.types.d.ts +2 -1
- package/dist/Typography/Typography.types.js +4 -0
- package/dist/index.cjs +8 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +98 -90
- package/package.json +10 -9
- package/skills/redis-ui-components/SKILL.md +126 -0
- package/skills/redis-ui-components/references/ActionIconButton.md +96 -0
- package/skills/redis-ui-components/references/AppBar.md +161 -0
- package/skills/redis-ui-components/references/AppSelectionMenu.md +184 -0
- package/skills/redis-ui-components/references/AutoCompleteSelect.md +193 -0
- package/skills/redis-ui-components/references/Badge.md +77 -0
- package/skills/redis-ui-components/references/Banner.md +563 -0
- package/skills/redis-ui-components/references/BoxSelectionGroup.md +487 -0
- package/skills/redis-ui-components/references/Breadcrumbs.md +214 -0
- package/skills/redis-ui-components/references/Button.md +169 -0
- package/skills/redis-ui-components/references/ButtonGroup.md +126 -0
- package/skills/redis-ui-components/references/Card.md +56 -0
- package/skills/redis-ui-components/references/Checkbox.md +171 -0
- package/skills/redis-ui-components/references/Chip.md +154 -0
- package/skills/redis-ui-components/references/ChipList.md +307 -0
- package/skills/redis-ui-components/references/CopyToClipboardButton.md +47 -0
- package/skills/redis-ui-components/references/CountryFlag.md +57 -0
- package/skills/redis-ui-components/references/Drawer.md +298 -0
- package/skills/redis-ui-components/references/Filters.md +162 -0
- package/skills/redis-ui-components/references/FlexDivider.md +152 -0
- package/skills/redis-ui-components/references/FlexGroup.md +149 -0
- package/skills/redis-ui-components/references/FlexItem.md +58 -0
- package/skills/redis-ui-components/references/FlexSplit.md +37 -0
- package/skills/redis-ui-components/references/FormField.md +678 -0
- package/skills/redis-ui-components/references/IconButton.md +63 -0
- package/skills/redis-ui-components/references/Input.md +295 -0
- package/skills/redis-ui-components/references/KeyValueList.md +501 -0
- package/skills/redis-ui-components/references/Label.md +238 -0
- package/skills/redis-ui-components/references/Link.md +402 -0
- package/skills/redis-ui-components/references/Loader.md +100 -0
- package/skills/redis-ui-components/references/Menu.md +988 -0
- package/skills/redis-ui-components/references/MidBar.md +358 -0
- package/skills/redis-ui-components/references/Modal.md +525 -0
- package/skills/redis-ui-components/references/MoreInfoIcon.md +119 -0
- package/skills/redis-ui-components/references/MultiSelect.md +558 -0
- package/skills/redis-ui-components/references/NumericInput.md +322 -0
- package/skills/redis-ui-components/references/Overflow.md +127 -0
- package/skills/redis-ui-components/references/Pagination.md +151 -0
- package/skills/redis-ui-components/references/PasswordInput.md +262 -0
- package/skills/redis-ui-components/references/Popover.md +868 -0
- package/skills/redis-ui-components/references/ProfileIcon.md +65 -0
- package/skills/redis-ui-components/references/ProgressBar.md +103 -0
- package/skills/redis-ui-components/references/QuantityCounter.md +555 -0
- package/skills/redis-ui-components/references/RadioGroup.md +265 -0
- package/skills/redis-ui-components/references/ScreenReaderAnnounce.md +147 -0
- package/skills/redis-ui-components/references/SearchBar.md +242 -0
- package/skills/redis-ui-components/references/SearchInput.md +213 -0
- package/skills/redis-ui-components/references/Section.md +349 -0
- package/skills/redis-ui-components/references/Select.md +517 -0
- package/skills/redis-ui-components/references/SideBar.md +468 -0
- package/skills/redis-ui-components/references/Slider.md +398 -0
- package/skills/redis-ui-components/references/Stepper.md +288 -0
- package/skills/redis-ui-components/references/Switch.md +193 -0
- package/skills/redis-ui-components/references/Tabs.md +383 -0
- package/skills/redis-ui-components/references/TextArea.md +139 -0
- package/skills/redis-ui-components/references/TextButton.md +217 -0
- package/skills/redis-ui-components/references/Toast.md +399 -0
- package/skills/redis-ui-components/references/ToggleButton.md +163 -0
- package/skills/redis-ui-components/references/Tooltip.md +636 -0
- package/skills/redis-ui-components/references/Typography.md +323 -0
|
@@ -0,0 +1,988 @@
|
|
|
1
|
+
# Menu
|
|
2
|
+
|
|
3
|
+
Dropdown menu with customizable placement and content.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Menu } from '@redislabsdev/redis-ui-components';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Props
|
|
12
|
+
|
|
13
|
+
### Menu
|
|
14
|
+
|
|
15
|
+
| Prop | Type | Default | Description |
|
|
16
|
+
|------|------|---------|-------------|
|
|
17
|
+
| children | `React.ReactNode` | required | Trigger and content nodes rendered inside the menu |
|
|
18
|
+
| open | `boolean` | - | Controlled open state |
|
|
19
|
+
| defaultOpen | `boolean` | - | Uncontrolled initial open state |
|
|
20
|
+
| onOpenChange | `(open: boolean) => void` | - | Called when the menu open state changes |
|
|
21
|
+
| modal | `boolean` | `false` | Whether the dropdown behaves as a modal menu |
|
|
22
|
+
| disabled | `boolean` | `undefined` | Disables the menu and forces it closed through menu context |
|
|
23
|
+
|
|
24
|
+
### Menu.Trigger
|
|
25
|
+
|
|
26
|
+
| Prop | Type | Default | Description |
|
|
27
|
+
|------|------|---------|-------------|
|
|
28
|
+
| withButton | `boolean` | `false` | Renders an invisible button wrapper for multi-element or custom trigger content |
|
|
29
|
+
|
|
30
|
+
`Menu.Trigger` also accepts the button-element props from `ComposeElementProps<HTMLButtonElement>`.
|
|
31
|
+
|
|
32
|
+
### Menu.Trigger.Arrow
|
|
33
|
+
|
|
34
|
+
`Menu.Trigger.Arrow` inherits `MonochromeIconProps`. It renders the chevron icon used in the trigger and rotates with menu state. The icon defaults to a down chevron and uses size `M`.
|
|
35
|
+
|
|
36
|
+
### Menu.Content
|
|
37
|
+
|
|
38
|
+
| Prop | Type | Default | Description |
|
|
39
|
+
|------|------|---------|-------------|
|
|
40
|
+
| children | `React.ReactNode` | required | Menu items and composition blocks rendered inside the dropdown panel |
|
|
41
|
+
| sideOffset | `number` | `5` | Offset from the trigger on the placement side |
|
|
42
|
+
| placement | `'top' \| 'bottom' \| 'left' \| 'right'` | `'bottom'` | Preferred menu side relative to the trigger |
|
|
43
|
+
| align | `'start' \| 'center' \| 'end'` | `'center'` | Alignment of the dropdown panel on the placement axis |
|
|
44
|
+
| alignOffset | `number` | - | Extra alignment offset |
|
|
45
|
+
| portal | `HTMLElement` | `document.body` | Portal container used for rendering the dropdown panel |
|
|
46
|
+
| onFocusOutside | `(event: Event) => void` | - | Called when focus leaves the dropdown content |
|
|
47
|
+
| onCloseAutoFocus | `(event: Event) => void` | - | Called before Radix restores focus after closing |
|
|
48
|
+
| onInteractOutside | `(event: Event) => void` | - | Called when the user interacts outside the dropdown |
|
|
49
|
+
| collisionBoundary | `DropdownMenu.DropdownMenuContentProps['collisionBoundary']` | - | Collision boundary forwarded to Radix positioning |
|
|
50
|
+
|
|
51
|
+
`Menu.Content` also accepts native `HTMLAttributes<HTMLDivElement>` props.
|
|
52
|
+
|
|
53
|
+
### Menu.Content.Item
|
|
54
|
+
|
|
55
|
+
| Prop | Type | Default | Description |
|
|
56
|
+
|------|------|---------|-------------|
|
|
57
|
+
| text | `React.ReactNode` | required for regular items | Main item text; optional when `subHead` is used |
|
|
58
|
+
| subHead | `React.ReactNode` | - | Left-side header text that switches the item layout |
|
|
59
|
+
| icon | `IconType` | - | Leading icon for the item |
|
|
60
|
+
| description | `React.ReactNode` | - | Trailing description text |
|
|
61
|
+
| selected | `boolean` | `false` | Marks the item as selected and non-clickable |
|
|
62
|
+
| isSelected | `boolean` | `false` | Deprecated alias for `selected` |
|
|
63
|
+
| variant | `'primary' \| 'destructive'` | `'primary'` | Visual variant for the item |
|
|
64
|
+
| shift | `number \| string` | `0` | Adds left padding using the menu level offset |
|
|
65
|
+
| disabled | `boolean` | `false` | Disables the item |
|
|
66
|
+
| onSelect | `() => void` | - | Called when the menu item is selected |
|
|
67
|
+
|
|
68
|
+
`Menu.Content.Item` also accepts native `HTMLAttributes<HTMLDivElement>` props.
|
|
69
|
+
|
|
70
|
+
### Menu.Content.Item.Compose
|
|
71
|
+
|
|
72
|
+
| Prop | Type | Default | Description |
|
|
73
|
+
|------|------|---------|-------------|
|
|
74
|
+
| children | `React.ReactNode` | required | Building blocks that compose the custom item layout |
|
|
75
|
+
| disabled | `boolean` | `false` | Disables the composed item |
|
|
76
|
+
| onSelect | `() => void` | - | Called when the item is selected |
|
|
77
|
+
| selected | `boolean` | `false` | Marks the item as selected and prevents interaction |
|
|
78
|
+
| isSelected | `boolean` | `false` | Deprecated alias for `selected` |
|
|
79
|
+
| variant | `'primary' \| 'destructive'` | `'primary'` | Visual variant for the item container |
|
|
80
|
+
| shift | `number \| string` | `0` | Adds left padding using the menu level offset |
|
|
81
|
+
|
|
82
|
+
`Menu.Content.Item.Compose` also accepts native `HTMLAttributes<HTMLDivElement>` props.
|
|
83
|
+
|
|
84
|
+
### Menu.Content.Item.Text
|
|
85
|
+
|
|
86
|
+
`Menu.Content.Item.Text` inherits `Typography.Body` props.
|
|
87
|
+
|
|
88
|
+
### Menu.Content.Item.Icon
|
|
89
|
+
|
|
90
|
+
| Prop | Type | Default | Description |
|
|
91
|
+
|------|------|---------|-------------|
|
|
92
|
+
| icon | `IconType` | required | Icon rendered inside the item |
|
|
93
|
+
|
|
94
|
+
`Menu.Content.Item.Icon` also accepts monochrome icon props such as `title`, `color`, and `customSize`.
|
|
95
|
+
|
|
96
|
+
### Menu.Content.Item.SubHead
|
|
97
|
+
|
|
98
|
+
`Menu.Content.Item.SubHead` uses the same props as `Menu.Content.Item.Text`, but renders the text with semi-bold body typography.
|
|
99
|
+
|
|
100
|
+
### Menu.Content.Item.Check
|
|
101
|
+
|
|
102
|
+
| Prop | Type | Default | Description |
|
|
103
|
+
|------|------|---------|-------------|
|
|
104
|
+
| icon | `IconType` | `CheckBoldIcon` | Icon rendered for the selected-state check mark |
|
|
105
|
+
|
|
106
|
+
`Menu.Content.Item.Check` also accepts monochrome icon props.
|
|
107
|
+
|
|
108
|
+
### Menu.Content.Item.Split
|
|
109
|
+
|
|
110
|
+
| Prop | Type | Default | Description |
|
|
111
|
+
|------|------|---------|-------------|
|
|
112
|
+
| minWidth | `string \| number \| undefined` | - | Optional minimum width used when splitting item content |
|
|
113
|
+
|
|
114
|
+
`Menu.Content.Item.Split` also accepts native `HTMLAttributes<HTMLDivElement>` props.
|
|
115
|
+
|
|
116
|
+
### Menu.Content.Label
|
|
117
|
+
|
|
118
|
+
| Prop | Type | Default | Description |
|
|
119
|
+
|------|------|---------|-------------|
|
|
120
|
+
| text | `React.ReactNode` | `children` | Label text; strings are rendered with the label text style |
|
|
121
|
+
| icon | `IconType` | - | Leading icon for the label |
|
|
122
|
+
| variant | `'header' \| 'sub'` | `'header'` | Label variant |
|
|
123
|
+
| shift | `number \| string` | `0` | Adds left padding using the menu label level offset |
|
|
124
|
+
| children | `React.ReactNode` | deprecated | Deprecated alias for `text` |
|
|
125
|
+
|
|
126
|
+
### Menu.Content.Label.Compose
|
|
127
|
+
|
|
128
|
+
| Prop | Type | Default | Description |
|
|
129
|
+
|------|------|---------|-------------|
|
|
130
|
+
| children | `React.ReactNode` | required | Building blocks that compose the custom label layout |
|
|
131
|
+
| variant | `'header' \| 'sub'` | `'header'` | Label variant |
|
|
132
|
+
| shift | `number \| string` | `0` | Adds left padding using the menu label level offset |
|
|
133
|
+
|
|
134
|
+
`Menu.Content.Label.Compose` also accepts the shared `ComposeElementProps` surface.
|
|
135
|
+
|
|
136
|
+
### Menu.Content.Label.Text
|
|
137
|
+
|
|
138
|
+
`Menu.Content.Label.Text` inherits `Typography.Body` props.
|
|
139
|
+
|
|
140
|
+
### Menu.Content.Label.Icon
|
|
141
|
+
|
|
142
|
+
| Prop | Type | Default | Description |
|
|
143
|
+
|------|------|---------|-------------|
|
|
144
|
+
| icon | `IconType` | required | Icon rendered inside the label |
|
|
145
|
+
|
|
146
|
+
`Menu.Content.Label.Icon` also accepts monochrome icon props.
|
|
147
|
+
|
|
148
|
+
### Menu.Content.Separator
|
|
149
|
+
|
|
150
|
+
| Prop | Type | Default | Description |
|
|
151
|
+
|------|------|---------|-------------|
|
|
152
|
+
| className | `string` | - | Optional class name for styling the separator |
|
|
153
|
+
|
|
154
|
+
`Menu.Content.Separator` also accepts native `HTMLAttributes<HTMLHRElement>` props, excluding `children`.
|
|
155
|
+
|
|
156
|
+
### Menu.Content.DropdownArrow
|
|
157
|
+
|
|
158
|
+
| Prop | Type | Default | Description |
|
|
159
|
+
|------|------|---------|-------------|
|
|
160
|
+
| className | `string` | - | Optional class name for styling the arrow |
|
|
161
|
+
|
|
162
|
+
`Menu.Content.DropdownArrow` renders the menu panel arrow used inside `Menu.Content`.
|
|
163
|
+
|
|
164
|
+
## Sub-components
|
|
165
|
+
|
|
166
|
+
- `Menu.Trigger` - Trigger wrapper that can render as a regular trigger or as an invisible button wrapper
|
|
167
|
+
- `Menu.Trigger.Arrow` - Chevron icon that indicates the open state of the trigger
|
|
168
|
+
- `Menu.Content` - Dropdown panel container and Radix portal wrapper
|
|
169
|
+
- `Menu.Content.Item` - Standard menu item with icon, description, selection, and `subHead` support
|
|
170
|
+
- `Menu.Content.Item.Compose` - Low-level item container for building custom item layouts
|
|
171
|
+
- `Menu.Content.Item.Text` - Typography body text used inside item compositions
|
|
172
|
+
- `Menu.Content.Item.Icon` - Monochrome icon building block used inside item compositions
|
|
173
|
+
- `Menu.Content.Item.SubHead` - Semi-bold text building block used for item sub-head layouts
|
|
174
|
+
- `Menu.Content.Item.Check` - Selected-state check mark building block
|
|
175
|
+
- `Menu.Content.Item.Split` - Spacer/split building block used between item content segments
|
|
176
|
+
- `Menu.Content.Label` - Menu label block with text, icon, variant, and shift support
|
|
177
|
+
- `Menu.Content.Label.Compose` - Low-level label container for custom label layouts
|
|
178
|
+
- `Menu.Content.Label.Text` - Typography body text used inside label compositions
|
|
179
|
+
- `Menu.Content.Label.Icon` - Monochrome icon building block used inside label compositions
|
|
180
|
+
- `Menu.Content.Separator` - Horizontal separator used between menu groups
|
|
181
|
+
- `Menu.Content.DropdownArrow` - Radix dropdown arrow rendered inside the menu panel
|
|
182
|
+
|
|
183
|
+
## Examples
|
|
184
|
+
|
|
185
|
+
### Menu
|
|
186
|
+
|
|
187
|
+
#### Standard
|
|
188
|
+
|
|
189
|
+
```tsx
|
|
190
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
191
|
+
import { CopyIcon, MoreactionsIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
192
|
+
|
|
193
|
+
<Menu defaultOpen>
|
|
194
|
+
<Menu.Trigger>
|
|
195
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
196
|
+
</Menu.Trigger>
|
|
197
|
+
<Menu.Content placement="right" align="start">
|
|
198
|
+
<Menu.Content.Label text="Menu Label" />
|
|
199
|
+
<Menu.Content.Item disabled text="Disabled item" />
|
|
200
|
+
<Menu.Content.Separator />
|
|
201
|
+
<Menu.Content.Item text="Item, which is very long and we want to verify that it does not break to multi-line and instead will be shortened with ellipsis" />
|
|
202
|
+
<Menu.Content.Separator />
|
|
203
|
+
<Menu.Content.Item text="Item with description" description="description" />
|
|
204
|
+
<Menu.Content.Item text="Item with icon" icon={CopyIcon} />
|
|
205
|
+
<Menu.Content.Item text="Selected item" icon={StarsIcon} selected />
|
|
206
|
+
<Menu.Content.Separator />
|
|
207
|
+
<Menu.Content.Item subHead="Subhead" text="with text and icon" icon={StarsIcon} />
|
|
208
|
+
<Menu.Content.Item subHead="Subhead with icon" icon={CopyIcon} />
|
|
209
|
+
<Menu.Content.Item subHead="Subhead with description" description="description" />
|
|
210
|
+
<Menu.Content.DropdownArrow />
|
|
211
|
+
</Menu.Content>
|
|
212
|
+
</Menu>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Menu.Trigger
|
|
216
|
+
|
|
217
|
+
#### WithButton
|
|
218
|
+
|
|
219
|
+
> Menu Trigger has property `withButton` which allows wrapping trigger elements with invisible button. Use this property if you have multiple elements or your element doesn't work as trigger.
|
|
220
|
+
>
|
|
221
|
+
> Make sure you correctly styled disabled state for custom trigger components.
|
|
222
|
+
|
|
223
|
+
```tsx
|
|
224
|
+
import { Menu, Typography } from '@redislabsdev/redis-ui-components';
|
|
225
|
+
import { CopyIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
226
|
+
|
|
227
|
+
<Menu>
|
|
228
|
+
<Menu.Trigger withButton>
|
|
229
|
+
<Typography.Body size="L">Click to open</Typography.Body>
|
|
230
|
+
<Menu.Trigger.Arrow color="neutral800" />
|
|
231
|
+
</Menu.Trigger>
|
|
232
|
+
<Menu.Content>
|
|
233
|
+
<Menu.Content.Item text="Item 1" icon={CopyIcon} />
|
|
234
|
+
<Menu.Content.Item text="Item 2" icon={StarsIcon} />
|
|
235
|
+
<Menu.Content.DropdownArrow />
|
|
236
|
+
</Menu.Content>
|
|
237
|
+
</Menu>
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
#### WithoutButton
|
|
241
|
+
|
|
242
|
+
> For a single element that correctly works as a trigger, `withButton` can be omitted and the trigger will render only that element.
|
|
243
|
+
|
|
244
|
+
```tsx
|
|
245
|
+
import { Button, Menu } from '@redislabsdev/redis-ui-components';
|
|
246
|
+
import { CopyIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
247
|
+
|
|
248
|
+
<Menu>
|
|
249
|
+
<Menu.Trigger>
|
|
250
|
+
<Button>
|
|
251
|
+
Click to open
|
|
252
|
+
<Menu.Trigger.Arrow color="neutral100" />
|
|
253
|
+
</Button>
|
|
254
|
+
</Menu.Trigger>
|
|
255
|
+
<Menu.Content>
|
|
256
|
+
<Menu.Content.Item text="Item 1" icon={CopyIcon} />
|
|
257
|
+
<Menu.Content.Item text="Item 2" icon={StarsIcon} />
|
|
258
|
+
<Menu.Content.DropdownArrow />
|
|
259
|
+
</Menu.Content>
|
|
260
|
+
</Menu>
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### Menu.Content
|
|
264
|
+
|
|
265
|
+
#### Playground
|
|
266
|
+
|
|
267
|
+
```tsx
|
|
268
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
269
|
+
import { CopyIcon, MoreactionsIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
270
|
+
|
|
271
|
+
<Menu open>
|
|
272
|
+
<Menu.Trigger>
|
|
273
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
274
|
+
</Menu.Trigger>
|
|
275
|
+
<Menu.Content>
|
|
276
|
+
<Menu.Content.Item text="Item 1" icon={CopyIcon} />
|
|
277
|
+
<Menu.Content.Item text="Item 2" icon={StarsIcon} />
|
|
278
|
+
<Menu.Content.DropdownArrow />
|
|
279
|
+
</Menu.Content>
|
|
280
|
+
</Menu>
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
#### Placement
|
|
284
|
+
|
|
285
|
+
> Use `placement` prop to define the preferred side of the trigger for the menu. It can be reversed if collision occurs.
|
|
286
|
+
|
|
287
|
+
```tsx
|
|
288
|
+
import { Button, Menu } from '@redislabsdev/redis-ui-components';
|
|
289
|
+
|
|
290
|
+
<>
|
|
291
|
+
<Menu defaultOpen>
|
|
292
|
+
<Menu.Trigger>
|
|
293
|
+
<Button>Left</Button>
|
|
294
|
+
</Menu.Trigger>
|
|
295
|
+
<Menu.Content placement="left">
|
|
296
|
+
<Menu.Content.Item text="Left" />
|
|
297
|
+
<Menu.Content.DropdownArrow />
|
|
298
|
+
</Menu.Content>
|
|
299
|
+
</Menu>
|
|
300
|
+
<Menu defaultOpen>
|
|
301
|
+
<Menu.Trigger>
|
|
302
|
+
<Button>Top</Button>
|
|
303
|
+
</Menu.Trigger>
|
|
304
|
+
<Menu.Content placement="top">
|
|
305
|
+
<Menu.Content.Item text="Top" />
|
|
306
|
+
<Menu.Content.DropdownArrow />
|
|
307
|
+
</Menu.Content>
|
|
308
|
+
</Menu>
|
|
309
|
+
<Menu defaultOpen>
|
|
310
|
+
<Menu.Trigger>
|
|
311
|
+
<Button>Bottom</Button>
|
|
312
|
+
</Menu.Trigger>
|
|
313
|
+
<Menu.Content placement="bottom">
|
|
314
|
+
<Menu.Content.Item text="Bottom" />
|
|
315
|
+
<Menu.Content.DropdownArrow />
|
|
316
|
+
</Menu.Content>
|
|
317
|
+
</Menu>
|
|
318
|
+
<Menu defaultOpen>
|
|
319
|
+
<Menu.Trigger>
|
|
320
|
+
<Button>Right</Button>
|
|
321
|
+
</Menu.Trigger>
|
|
322
|
+
<Menu.Content placement="right">
|
|
323
|
+
<Menu.Content.Item text="Right" />
|
|
324
|
+
<Menu.Content.DropdownArrow />
|
|
325
|
+
</Menu.Content>
|
|
326
|
+
</Menu>
|
|
327
|
+
</>
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
#### DropdownArrow
|
|
331
|
+
|
|
332
|
+
> Add `<Menu.Content.DropdownArrow />` inside `Menu.Content` to add the arrow.
|
|
333
|
+
|
|
334
|
+
```tsx
|
|
335
|
+
import { Button, Menu } from '@redislabsdev/redis-ui-components';
|
|
336
|
+
import { CopyIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
337
|
+
|
|
338
|
+
<>
|
|
339
|
+
<Menu defaultOpen>
|
|
340
|
+
<Menu.Trigger>
|
|
341
|
+
<Button>With arrow</Button>
|
|
342
|
+
</Menu.Trigger>
|
|
343
|
+
<Menu.Content>
|
|
344
|
+
<Menu.Content.Item text="Item 1" icon={CopyIcon} />
|
|
345
|
+
<Menu.Content.Item text="Item 2" icon={StarsIcon} />
|
|
346
|
+
<Menu.Content.DropdownArrow />
|
|
347
|
+
</Menu.Content>
|
|
348
|
+
</Menu>
|
|
349
|
+
<Menu defaultOpen>
|
|
350
|
+
<Menu.Trigger>
|
|
351
|
+
<Button>Without arrow</Button>
|
|
352
|
+
</Menu.Trigger>
|
|
353
|
+
<Menu.Content>
|
|
354
|
+
<Menu.Content.Item text="Item 1" icon={CopyIcon} />
|
|
355
|
+
<Menu.Content.Item text="Item 2" icon={StarsIcon} />
|
|
356
|
+
</Menu.Content>
|
|
357
|
+
</Menu>
|
|
358
|
+
</>
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### Menu.Content.Item
|
|
362
|
+
|
|
363
|
+
#### Playground
|
|
364
|
+
|
|
365
|
+
```tsx
|
|
366
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
367
|
+
import { MoreactionsIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
368
|
+
|
|
369
|
+
<Menu open>
|
|
370
|
+
<Menu.Trigger>
|
|
371
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
372
|
+
</Menu.Trigger>
|
|
373
|
+
<Menu.Content placement="right" align="center">
|
|
374
|
+
<Menu.Content.Item text="Item" icon={StarsIcon} />
|
|
375
|
+
<Menu.Content.DropdownArrow />
|
|
376
|
+
</Menu.Content>
|
|
377
|
+
</Menu>
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
#### ItemGroupsComposition
|
|
381
|
+
|
|
382
|
+
> Groups can be composed using `Menu.Content.Label` and `Menu.Content.Separator`.
|
|
383
|
+
|
|
384
|
+
```tsx
|
|
385
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
386
|
+
import { MoreactionsIcon } from '@redislabsdev/redis-ui-icons';
|
|
387
|
+
|
|
388
|
+
<Menu defaultOpen>
|
|
389
|
+
<Menu.Trigger>
|
|
390
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
391
|
+
</Menu.Trigger>
|
|
392
|
+
<Menu.Content placement="right" align="center">
|
|
393
|
+
<Menu.Content.Label text="Group Label" />
|
|
394
|
+
<Menu.Content.Item text="Item 1" />
|
|
395
|
+
<Menu.Content.Item text="Item 2" />
|
|
396
|
+
<Menu.Content.Separator />
|
|
397
|
+
<Menu.Content.Label text="Other Label" />
|
|
398
|
+
<Menu.Content.Item text="Item 3" selected />
|
|
399
|
+
<Menu.Content.Item text="Item 4" />
|
|
400
|
+
<Menu.Content.Separator />
|
|
401
|
+
<Menu.Content.Item text="Item 5" />
|
|
402
|
+
<Menu.Content.DropdownArrow />
|
|
403
|
+
</Menu.Content>
|
|
404
|
+
</Menu>
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
#### RegularItemExamples
|
|
408
|
+
|
|
409
|
+
> `Menu.Content.Item` regular items can use `icon`, `text`, `description` and the selected check mark. Text is mandatory for regular items. Description and the check mark align to the right.
|
|
410
|
+
|
|
411
|
+
```tsx
|
|
412
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
413
|
+
import { MoreactionsIcon, CopyIcon, ShardIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
414
|
+
|
|
415
|
+
<Menu defaultOpen>
|
|
416
|
+
<Menu.Trigger>
|
|
417
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
418
|
+
</Menu.Trigger>
|
|
419
|
+
<Menu.Content placement="right" align="center">
|
|
420
|
+
<Menu.Content.Label text="Regular Items:" />
|
|
421
|
+
<Menu.Content.Separator />
|
|
422
|
+
<Menu.Content.Item text="Item with text" />
|
|
423
|
+
<Menu.Content.Item text="Item with text and icon" icon={StarsIcon} />
|
|
424
|
+
<Menu.Content.Item text="Item with text, icon and" icon={ShardIcon} description="description" />
|
|
425
|
+
<Menu.Content.Item text="Item with check mark" icon={CopyIcon} selected />
|
|
426
|
+
<Menu.Content.DropdownArrow />
|
|
427
|
+
</Menu.Content>
|
|
428
|
+
</Menu>
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
#### ItemWithSubheadExamples
|
|
432
|
+
|
|
433
|
+
> `Menu.Content.Item` items with `subHead` can use `subHead`, `icon`, `text` and `description`. All fields are optional if `subHead` is present. Description and icon align to the right.
|
|
434
|
+
|
|
435
|
+
```tsx
|
|
436
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
437
|
+
import { MoreactionsIcon, RocketIcon, ShardIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
438
|
+
|
|
439
|
+
<Menu defaultOpen>
|
|
440
|
+
<Menu.Trigger>
|
|
441
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
442
|
+
</Menu.Trigger>
|
|
443
|
+
<Menu.Content placement="right" align="center">
|
|
444
|
+
<Menu.Content.Label text="Items with SubHead:" />
|
|
445
|
+
<Menu.Content.Separator />
|
|
446
|
+
<Menu.Content.Item subHead="SubHead only" />
|
|
447
|
+
<Menu.Content.Item subHead="SubHead with" icon={StarsIcon} />
|
|
448
|
+
<Menu.Content.Item subHead="SubHead with" text="text" />
|
|
449
|
+
<Menu.Content.Item subHead="SubHead with" text="text" icon={ShardIcon} />
|
|
450
|
+
<Menu.Content.Item subHead="SubHead with" text="text" description="description" />
|
|
451
|
+
<Menu.Content.Item
|
|
452
|
+
subHead="SubHead with"
|
|
453
|
+
text="text"
|
|
454
|
+
description="description"
|
|
455
|
+
icon={RocketIcon}
|
|
456
|
+
/>
|
|
457
|
+
<Menu.Content.DropdownArrow />
|
|
458
|
+
</Menu.Content>
|
|
459
|
+
</Menu>
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
#### ItemVariants
|
|
463
|
+
|
|
464
|
+
> Menu items support `primary` and `destructive` variants.
|
|
465
|
+
|
|
466
|
+
```tsx
|
|
467
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
468
|
+
import { MoreactionsIcon, ShardIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
469
|
+
|
|
470
|
+
<Menu defaultOpen>
|
|
471
|
+
<Menu.Trigger>
|
|
472
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
473
|
+
</Menu.Trigger>
|
|
474
|
+
<Menu.Content placement="right" align="center">
|
|
475
|
+
<Menu.Content.Label text="Regular Items" />
|
|
476
|
+
<Menu.Content.Item text="Variant: primary" icon={StarsIcon} variant="primary" />
|
|
477
|
+
<Menu.Content.Item text="Variant: destructive" icon={ShardIcon} variant="destructive" />
|
|
478
|
+
<Menu.Content.Separator />
|
|
479
|
+
<Menu.Content.Label text="Items with SubHead" />
|
|
480
|
+
<Menu.Content.Item subHead="Variant:" text="primary" icon={StarsIcon} variant="primary" />
|
|
481
|
+
<Menu.Content.Item
|
|
482
|
+
subHead="Variant:"
|
|
483
|
+
text="destructive"
|
|
484
|
+
icon={ShardIcon}
|
|
485
|
+
variant="destructive"
|
|
486
|
+
/>
|
|
487
|
+
<Menu.Content.Separator />
|
|
488
|
+
<Menu.Content.Label text="Disabled Items" />
|
|
489
|
+
<Menu.Content.Item text="Variant: primary" icon={StarsIcon} variant="primary" disabled />
|
|
490
|
+
<Menu.Content.Item
|
|
491
|
+
text="Variant: destructive"
|
|
492
|
+
icon={ShardIcon}
|
|
493
|
+
variant="destructive"
|
|
494
|
+
disabled
|
|
495
|
+
/>
|
|
496
|
+
<Menu.Content.Item
|
|
497
|
+
subHead="Variant:"
|
|
498
|
+
text="primary"
|
|
499
|
+
icon={StarsIcon}
|
|
500
|
+
variant="primary"
|
|
501
|
+
disabled
|
|
502
|
+
/>
|
|
503
|
+
<Menu.Content.Item
|
|
504
|
+
subHead="Variant:"
|
|
505
|
+
text="destructive"
|
|
506
|
+
icon={ShardIcon}
|
|
507
|
+
variant="destructive"
|
|
508
|
+
disabled
|
|
509
|
+
/>
|
|
510
|
+
<Menu.Content.DropdownArrow />
|
|
511
|
+
</Menu.Content>
|
|
512
|
+
</Menu>
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
#### Shift
|
|
516
|
+
|
|
517
|
+
> Items can use `shift` to add left padding to the content. Shift can be a number for the standard menu-level offset or a string for a custom CSS unit.
|
|
518
|
+
|
|
519
|
+
```tsx
|
|
520
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
521
|
+
import { MoreactionsIcon, StarsIcon, WandIcon } from '@redislabsdev/redis-ui-icons';
|
|
522
|
+
|
|
523
|
+
<Menu defaultOpen>
|
|
524
|
+
<Menu.Trigger>
|
|
525
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
526
|
+
</Menu.Trigger>
|
|
527
|
+
<Menu.Content placement="right" align="center">
|
|
528
|
+
<Menu.Content.Item text="no shift" />
|
|
529
|
+
<Menu.Content.Item text="shift: 1" shift={1} />
|
|
530
|
+
<Menu.Content.Item text="shift: 2" shift={2} />
|
|
531
|
+
<Menu.Content.Item text="shift: 3" shift={3} />
|
|
532
|
+
<Menu.Content.Item text='shift: "1rem"' shift="1rem" />
|
|
533
|
+
<Menu.Content.Item text='shift: "1rem"' icon={WandIcon} shift="1rem" />
|
|
534
|
+
<Menu.Content.DropdownArrow />
|
|
535
|
+
</Menu.Content>
|
|
536
|
+
</Menu>
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
#### SelectedItems
|
|
540
|
+
|
|
541
|
+
> Menu items can be selected.
|
|
542
|
+
|
|
543
|
+
```tsx
|
|
544
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
545
|
+
import { MoreactionsIcon, ShardIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
546
|
+
|
|
547
|
+
<Menu defaultOpen>
|
|
548
|
+
<Menu.Trigger>
|
|
549
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
550
|
+
</Menu.Trigger>
|
|
551
|
+
<Menu.Content placement="right" align="center">
|
|
552
|
+
<Menu.Content.Label text="Regular Items" />
|
|
553
|
+
<Menu.Content.Item text="Variant: primary" icon={StarsIcon} variant="primary" />
|
|
554
|
+
<Menu.Content.Item text="Variant: destructive" icon={ShardIcon} variant="destructive" />
|
|
555
|
+
<Menu.Content.Separator />
|
|
556
|
+
<Menu.Content.Label text="Selected Items" />
|
|
557
|
+
<Menu.Content.Item text="Variant: primary" icon={StarsIcon} variant="primary" selected />
|
|
558
|
+
<Menu.Content.Item text="Variant: destructive" icon={ShardIcon} variant="destructive" selected />
|
|
559
|
+
<Menu.Content.Separator />
|
|
560
|
+
<Menu.Content.Label text="Disabled Selected Items" />
|
|
561
|
+
<Menu.Content.Item
|
|
562
|
+
text="Variant: primary"
|
|
563
|
+
icon={StarsIcon}
|
|
564
|
+
variant="primary"
|
|
565
|
+
selected
|
|
566
|
+
disabled
|
|
567
|
+
/>
|
|
568
|
+
<Menu.Content.Item
|
|
569
|
+
text="Variant: destructive"
|
|
570
|
+
icon={ShardIcon}
|
|
571
|
+
variant="destructive"
|
|
572
|
+
selected
|
|
573
|
+
disabled
|
|
574
|
+
/>
|
|
575
|
+
<Menu.Content.DropdownArrow />
|
|
576
|
+
</Menu.Content>
|
|
577
|
+
</Menu>
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
### Menu.Content.Item.Compose
|
|
581
|
+
|
|
582
|
+
#### RegularItemComposition
|
|
583
|
+
|
|
584
|
+
> This example shows how regular items can be composed from the building blocks.
|
|
585
|
+
|
|
586
|
+
```tsx
|
|
587
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
588
|
+
import { MoreactionsIcon, CopyIcon, ShardIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
589
|
+
|
|
590
|
+
<Menu defaultOpen>
|
|
591
|
+
<Menu.Trigger>
|
|
592
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
593
|
+
</Menu.Trigger>
|
|
594
|
+
<Menu.Content placement="right" align="center">
|
|
595
|
+
<Menu.Content.Label text="Custom composed Regular Items:" />
|
|
596
|
+
<Menu.Content.Separator />
|
|
597
|
+
<Menu.Content.Item.Compose>
|
|
598
|
+
<Menu.Content.Item.Text>Item with text</Menu.Content.Item.Text>
|
|
599
|
+
</Menu.Content.Item.Compose>
|
|
600
|
+
<Menu.Content.Item.Compose>
|
|
601
|
+
<Menu.Content.Item.Icon icon={StarsIcon} />
|
|
602
|
+
<Menu.Content.Item.Text>Item with text and icon</Menu.Content.Item.Text>
|
|
603
|
+
</Menu.Content.Item.Compose>
|
|
604
|
+
<Menu.Content.Item.Compose>
|
|
605
|
+
<Menu.Content.Item.Icon icon={ShardIcon} />
|
|
606
|
+
<Menu.Content.Item.Text>Item with text, icon and</Menu.Content.Item.Text>
|
|
607
|
+
<Menu.Content.Item.Split />
|
|
608
|
+
<Menu.Content.Item.Text>description</Menu.Content.Item.Text>
|
|
609
|
+
</Menu.Content.Item.Compose>
|
|
610
|
+
<Menu.Content.Item.Compose selected>
|
|
611
|
+
<Menu.Content.Item.Icon icon={CopyIcon} />
|
|
612
|
+
<Menu.Content.Item.Text>Item with check mark</Menu.Content.Item.Text>
|
|
613
|
+
<Menu.Content.Item.Split />
|
|
614
|
+
<Menu.Content.Item.Check />
|
|
615
|
+
</Menu.Content.Item.Compose>
|
|
616
|
+
<Menu.Content.DropdownArrow />
|
|
617
|
+
</Menu.Content>
|
|
618
|
+
</Menu>
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
#### ItemWithSubheadComposition
|
|
622
|
+
|
|
623
|
+
> This example shows how items with `SubHead` can be composed from the building blocks.
|
|
624
|
+
|
|
625
|
+
```tsx
|
|
626
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
627
|
+
import { MoreactionsIcon, RocketIcon, ShardIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
628
|
+
|
|
629
|
+
<Menu defaultOpen>
|
|
630
|
+
<Menu.Trigger>
|
|
631
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
632
|
+
</Menu.Trigger>
|
|
633
|
+
<Menu.Content placement="right" align="center">
|
|
634
|
+
<Menu.Content.Label text="Custom composed Items with SubHead:" />
|
|
635
|
+
<Menu.Content.Separator />
|
|
636
|
+
<Menu.Content.Item.Compose>
|
|
637
|
+
<Menu.Content.Item.SubHead>SubHead only</Menu.Content.Item.SubHead>
|
|
638
|
+
</Menu.Content.Item.Compose>
|
|
639
|
+
<Menu.Content.Item.Compose>
|
|
640
|
+
<Menu.Content.Item.SubHead>SubHead with</Menu.Content.Item.SubHead>
|
|
641
|
+
<Menu.Content.Item.Split />
|
|
642
|
+
<Menu.Content.Item.Icon icon={StarsIcon} />
|
|
643
|
+
</Menu.Content.Item.Compose>
|
|
644
|
+
<Menu.Content.Item.Compose>
|
|
645
|
+
<Menu.Content.Item.SubHead>SubHead with</Menu.Content.Item.SubHead>
|
|
646
|
+
<Menu.Content.Item.Text>text</Menu.Content.Item.Text>
|
|
647
|
+
</Menu.Content.Item.Compose>
|
|
648
|
+
<Menu.Content.Item.Compose>
|
|
649
|
+
<Menu.Content.Item.SubHead>SubHead with</Menu.Content.Item.SubHead>
|
|
650
|
+
<Menu.Content.Item.Text>text</Menu.Content.Item.Text>
|
|
651
|
+
<Menu.Content.Item.Split />
|
|
652
|
+
<Menu.Content.Item.Icon icon={ShardIcon} />
|
|
653
|
+
</Menu.Content.Item.Compose>
|
|
654
|
+
<Menu.Content.Item.Compose>
|
|
655
|
+
<Menu.Content.Item.SubHead>SubHead with</Menu.Content.Item.SubHead>
|
|
656
|
+
<Menu.Content.Item.Text>text</Menu.Content.Item.Text>
|
|
657
|
+
<Menu.Content.Item.Split />
|
|
658
|
+
<Menu.Content.Item.Text>description</Menu.Content.Item.Text>
|
|
659
|
+
</Menu.Content.Item.Compose>
|
|
660
|
+
<Menu.Content.Item.Compose>
|
|
661
|
+
<Menu.Content.Item.SubHead>SubHead with</Menu.Content.Item.SubHead>
|
|
662
|
+
<Menu.Content.Item.Text>text</Menu.Content.Item.Text>
|
|
663
|
+
<Menu.Content.Item.Split />
|
|
664
|
+
<Menu.Content.Item.Text>description</Menu.Content.Item.Text>
|
|
665
|
+
<Menu.Content.Item.Icon icon={RocketIcon} />
|
|
666
|
+
</Menu.Content.Item.Compose>
|
|
667
|
+
<Menu.Content.DropdownArrow />
|
|
668
|
+
</Menu.Content>
|
|
669
|
+
</Menu>
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
#### ItemPropsAndComposition
|
|
673
|
+
|
|
674
|
+
> Composed items work with `disabled`, `selected` and `variant` props.
|
|
675
|
+
|
|
676
|
+
```tsx
|
|
677
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
678
|
+
import { MoreactionsIcon, ModulesGeneralIcon, RocketIcon, ShardIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
679
|
+
|
|
680
|
+
<Menu defaultOpen>
|
|
681
|
+
<Menu.Trigger>
|
|
682
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
683
|
+
</Menu.Trigger>
|
|
684
|
+
<Menu.Content placement="right" align="center">
|
|
685
|
+
<Menu.Content.Item.Compose>
|
|
686
|
+
<Menu.Content.Item.Icon icon={ModulesGeneralIcon} />
|
|
687
|
+
<Menu.Content.Item.Text>Normal Item</Menu.Content.Item.Text>
|
|
688
|
+
</Menu.Content.Item.Compose>
|
|
689
|
+
<Menu.Content.Item.Compose disabled>
|
|
690
|
+
<Menu.Content.Item.Icon icon={StarsIcon} />
|
|
691
|
+
<Menu.Content.Item.Text>Disabled Item</Menu.Content.Item.Text>
|
|
692
|
+
</Menu.Content.Item.Compose>
|
|
693
|
+
<Menu.Content.Item.Compose variant="destructive">
|
|
694
|
+
<Menu.Content.Item.Icon icon={ShardIcon} />
|
|
695
|
+
<Menu.Content.Item.Text>Item variant: destructive</Menu.Content.Item.Text>
|
|
696
|
+
</Menu.Content.Item.Compose>
|
|
697
|
+
<Menu.Content.Item.Compose selected>
|
|
698
|
+
<Menu.Content.Item.Icon icon={RocketIcon} />
|
|
699
|
+
<Menu.Content.Item.Text>Item with check mark</Menu.Content.Item.Text>
|
|
700
|
+
<Menu.Content.Item.Split />
|
|
701
|
+
<Menu.Content.Item.Check />
|
|
702
|
+
</Menu.Content.Item.Compose>
|
|
703
|
+
<Menu.Content.DropdownArrow />
|
|
704
|
+
</Menu.Content>
|
|
705
|
+
</Menu>
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
#### WildLayouts
|
|
709
|
+
|
|
710
|
+
> Examples of custom item layouts using building blocks or user-defined styles and components.
|
|
711
|
+
|
|
712
|
+
```tsx
|
|
713
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
714
|
+
import {
|
|
715
|
+
MoreactionsIcon,
|
|
716
|
+
ModulesGeneralIcon,
|
|
717
|
+
StarsIcon,
|
|
718
|
+
ToastDangerIcon,
|
|
719
|
+
ToastInfoIcon,
|
|
720
|
+
ToastNotificationIcon
|
|
721
|
+
} from '@redislabsdev/redis-ui-icons';
|
|
722
|
+
|
|
723
|
+
<Menu defaultOpen>
|
|
724
|
+
<Menu.Trigger>
|
|
725
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
726
|
+
</Menu.Trigger>
|
|
727
|
+
<Menu.Content placement="right" align="center">
|
|
728
|
+
<Menu.Content.Label text="With building blocks" />
|
|
729
|
+
<Menu.Content.Item.Compose>
|
|
730
|
+
<Menu.Content.Item.Icon icon={ModulesGeneralIcon} />
|
|
731
|
+
<Menu.Content.Item.Text>Info item</Menu.Content.Item.Text>
|
|
732
|
+
<Menu.Content.Item.Icon
|
|
733
|
+
icon={ToastInfoIcon}
|
|
734
|
+
title="Item information tooltip"
|
|
735
|
+
customSize="1.7rem"
|
|
736
|
+
color="neutral500"
|
|
737
|
+
/>
|
|
738
|
+
</Menu.Content.Item.Compose>
|
|
739
|
+
<Menu.Content.Item.Compose>
|
|
740
|
+
<Menu.Content.Item.Icon icon={StarsIcon} />
|
|
741
|
+
<Menu.Content.Item.Text>Danger</Menu.Content.Item.Text>
|
|
742
|
+
<Menu.Content.Item.Split />
|
|
743
|
+
<Menu.Content.Item.Icon
|
|
744
|
+
icon={ToastNotificationIcon}
|
|
745
|
+
color="attention300"
|
|
746
|
+
title="Something happened be careful"
|
|
747
|
+
/>
|
|
748
|
+
</Menu.Content.Item.Compose>
|
|
749
|
+
<Menu.Content.Item.Compose variant="destructive">
|
|
750
|
+
<Menu.Content.Item.Icon icon={ToastDangerIcon} />
|
|
751
|
+
<Menu.Content.Item.Text>Alert</Menu.Content.Item.Text>
|
|
752
|
+
<Menu.Content.Item.Split />
|
|
753
|
+
<Menu.Content.Item.Icon icon={ToastDangerIcon} />
|
|
754
|
+
<Menu.Content.Item.Text>Alert</Menu.Content.Item.Text>
|
|
755
|
+
<Menu.Content.Item.Split />
|
|
756
|
+
<Menu.Content.Item.Icon icon={ToastDangerIcon} />
|
|
757
|
+
<Menu.Content.Item.Text>Alert</Menu.Content.Item.Text>
|
|
758
|
+
<Menu.Content.Item.Split />
|
|
759
|
+
</Menu.Content.Item.Compose>
|
|
760
|
+
<Menu.Content.Separator />
|
|
761
|
+
<Menu.Content.Label text="With user defined styles and components" />
|
|
762
|
+
<Menu.Content.Item.Compose>
|
|
763
|
+
<div style={{ flex: 1, display: 'flex', alignItems: 'center' }}>
|
|
764
|
+
<StarsIcon customColor="currentColor" />
|
|
765
|
+
<span style={{ marginLeft: 10 }}>Danger</span>
|
|
766
|
+
</div>
|
|
767
|
+
<ToastNotificationIcon color="attention300" title="Something happened be careful" />
|
|
768
|
+
</Menu.Content.Item.Compose>
|
|
769
|
+
<Menu.Content.Item.Compose>
|
|
770
|
+
<div
|
|
771
|
+
style={{
|
|
772
|
+
flex: 1,
|
|
773
|
+
display: 'flex',
|
|
774
|
+
alignItems: 'center',
|
|
775
|
+
justifyContent: 'space-evenly'
|
|
776
|
+
}}
|
|
777
|
+
>
|
|
778
|
+
<StarsIcon customColor="red" />
|
|
779
|
+
<StarsIcon customColor="blue" />
|
|
780
|
+
<StarsIcon customColor="orange" />
|
|
781
|
+
<StarsIcon customColor="green" />
|
|
782
|
+
<StarsIcon customColor="magenta" />
|
|
783
|
+
</div>
|
|
784
|
+
</Menu.Content.Item.Compose>
|
|
785
|
+
<Menu.Content.DropdownArrow />
|
|
786
|
+
</Menu.Content>
|
|
787
|
+
</Menu>
|
|
788
|
+
```
|
|
789
|
+
|
|
790
|
+
### Menu.Content.Label
|
|
791
|
+
|
|
792
|
+
#### Playground
|
|
793
|
+
|
|
794
|
+
```tsx
|
|
795
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
796
|
+
import { MoreactionsIcon } from '@redislabsdev/redis-ui-icons';
|
|
797
|
+
|
|
798
|
+
<Menu open>
|
|
799
|
+
<Menu.Trigger>
|
|
800
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
801
|
+
</Menu.Trigger>
|
|
802
|
+
<Menu.Content placement="right" align="center">
|
|
803
|
+
<Menu.Content.Label text="Label" />
|
|
804
|
+
<Menu.Content.DropdownArrow />
|
|
805
|
+
</Menu.Content>
|
|
806
|
+
</Menu>
|
|
807
|
+
```
|
|
808
|
+
|
|
809
|
+
#### TextAndIcon
|
|
810
|
+
|
|
811
|
+
> Use the `text` and `icon` props to provide the label content.
|
|
812
|
+
|
|
813
|
+
```tsx
|
|
814
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
815
|
+
import { ContractIcon, MoreactionsIcon, WandIcon } from '@redislabsdev/redis-ui-icons';
|
|
816
|
+
|
|
817
|
+
<Menu defaultOpen>
|
|
818
|
+
<Menu.Trigger>
|
|
819
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
820
|
+
</Menu.Trigger>
|
|
821
|
+
<Menu.Content placement="right" align="center">
|
|
822
|
+
<Menu.Content.Label text="Label with text and icon" icon={ContractIcon} />
|
|
823
|
+
<Menu.Content.Label text="Label with text only" />
|
|
824
|
+
<Menu.Content.Label icon={WandIcon} title="Label with icon only" />
|
|
825
|
+
<Menu.Content.DropdownArrow />
|
|
826
|
+
</Menu.Content>
|
|
827
|
+
</Menu>
|
|
828
|
+
```
|
|
829
|
+
|
|
830
|
+
#### Variants
|
|
831
|
+
|
|
832
|
+
> Labels support `header` and `sub` variants.
|
|
833
|
+
|
|
834
|
+
```tsx
|
|
835
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
836
|
+
import { ContractIcon, MoreactionsIcon, WandIcon } from '@redislabsdev/redis-ui-icons';
|
|
837
|
+
|
|
838
|
+
<Menu defaultOpen>
|
|
839
|
+
<Menu.Trigger>
|
|
840
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
841
|
+
</Menu.Trigger>
|
|
842
|
+
<Menu.Content placement="right" align="center">
|
|
843
|
+
<Menu.Content.Label text="variant:header" icon={ContractIcon} />
|
|
844
|
+
<Menu.Content.Label text="variant:sub" icon={WandIcon} variant="sub" />
|
|
845
|
+
<Menu.Content.DropdownArrow />
|
|
846
|
+
</Menu.Content>
|
|
847
|
+
</Menu>
|
|
848
|
+
```
|
|
849
|
+
|
|
850
|
+
#### Shift
|
|
851
|
+
|
|
852
|
+
> Labels can use `shift` to add left padding to the content. Shift can be a number for the standard menu-level offset or a string for a custom CSS unit.
|
|
853
|
+
|
|
854
|
+
```tsx
|
|
855
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
856
|
+
import { MoreactionsIcon, WandIcon } from '@redislabsdev/redis-ui-icons';
|
|
857
|
+
|
|
858
|
+
<Menu defaultOpen>
|
|
859
|
+
<Menu.Trigger>
|
|
860
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
861
|
+
</Menu.Trigger>
|
|
862
|
+
<Menu.Content placement="right" align="center">
|
|
863
|
+
<Menu.Content.Label text="no shift" />
|
|
864
|
+
<Menu.Content.Label text="shift: 1" shift={1} />
|
|
865
|
+
<Menu.Content.Label text="shift: 2" shift={2} />
|
|
866
|
+
<Menu.Content.Label text="shift: 3" shift={3} />
|
|
867
|
+
<Menu.Content.Label text='shift: "1rem"' shift="1rem" />
|
|
868
|
+
<Menu.Content.Label text='shift: "1rem"' icon={WandIcon} shift="1rem" />
|
|
869
|
+
<Menu.Content.DropdownArrow />
|
|
870
|
+
</Menu.Content>
|
|
871
|
+
</Menu>
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
#### LabelComposition
|
|
875
|
+
|
|
876
|
+
> This example shows how labels can be composed from the building blocks.
|
|
877
|
+
|
|
878
|
+
```tsx
|
|
879
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
880
|
+
import { MoreactionsIcon, StarsIcon } from '@redislabsdev/redis-ui-icons';
|
|
881
|
+
|
|
882
|
+
<Menu defaultOpen>
|
|
883
|
+
<Menu.Trigger>
|
|
884
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
885
|
+
</Menu.Trigger>
|
|
886
|
+
<Menu.Content placement="right" align="center">
|
|
887
|
+
<Menu.Content.Label text="Custom composed Labels:" />
|
|
888
|
+
<Menu.Content.Separator />
|
|
889
|
+
<Menu.Content.Label.Compose>
|
|
890
|
+
<Menu.Content.Label.Text>Label with text</Menu.Content.Label.Text>
|
|
891
|
+
</Menu.Content.Label.Compose>
|
|
892
|
+
<Menu.Content.Label.Compose>
|
|
893
|
+
<Menu.Content.Label.Icon icon={StarsIcon} />
|
|
894
|
+
<Menu.Content.Label.Text>Label with text and icon</Menu.Content.Label.Text>
|
|
895
|
+
</Menu.Content.Label.Compose>
|
|
896
|
+
<Menu.Content.Label.Compose>
|
|
897
|
+
<Menu.Content.Label.Text>Label with text</Menu.Content.Label.Text>
|
|
898
|
+
<Menu.Content.Item.Split />
|
|
899
|
+
<Menu.Content.Label.Text variant="italic">and other text</Menu.Content.Label.Text>
|
|
900
|
+
</Menu.Content.Label.Compose>
|
|
901
|
+
<Menu.Content.DropdownArrow />
|
|
902
|
+
</Menu.Content>
|
|
903
|
+
</Menu>
|
|
904
|
+
```
|
|
905
|
+
|
|
906
|
+
#### WildLayouts
|
|
907
|
+
|
|
908
|
+
> Examples of custom label layouts using building blocks or user-defined styles and components.
|
|
909
|
+
|
|
910
|
+
```tsx
|
|
911
|
+
import { ActionIconButton, Menu } from '@redislabsdev/redis-ui-components';
|
|
912
|
+
import {
|
|
913
|
+
MoreactionsIcon,
|
|
914
|
+
ModulesGeneralIcon,
|
|
915
|
+
StarsIcon,
|
|
916
|
+
ToastInfoIcon,
|
|
917
|
+
ToastNotificationIcon
|
|
918
|
+
} from '@redislabsdev/redis-ui-icons';
|
|
919
|
+
|
|
920
|
+
<Menu defaultOpen>
|
|
921
|
+
<Menu.Trigger>
|
|
922
|
+
<ActionIconButton size="L" variant="primary" icon={MoreactionsIcon} />
|
|
923
|
+
</Menu.Trigger>
|
|
924
|
+
<Menu.Content placement="right" align="center">
|
|
925
|
+
<Menu.Content.Label text="With building blocks" />
|
|
926
|
+
<Menu.Content.Label.Compose>
|
|
927
|
+
<Menu.Content.Label.Icon icon={ModulesGeneralIcon} />
|
|
928
|
+
<Menu.Content.Label.Text>Info label</Menu.Content.Label.Text>
|
|
929
|
+
<Menu.Content.Label.Icon
|
|
930
|
+
icon={ToastInfoIcon}
|
|
931
|
+
title="Label information tooltip"
|
|
932
|
+
customSize="1.7rem"
|
|
933
|
+
color="neutral500"
|
|
934
|
+
/>
|
|
935
|
+
</Menu.Content.Label.Compose>
|
|
936
|
+
<Menu.Content.Label.Compose>
|
|
937
|
+
<Menu.Content.Label.Icon icon={StarsIcon} />
|
|
938
|
+
<Menu.Content.Label.Text>Danger</Menu.Content.Label.Text>
|
|
939
|
+
<Menu.Content.Item.Split />
|
|
940
|
+
<Menu.Content.Label.Icon
|
|
941
|
+
icon={ToastNotificationIcon}
|
|
942
|
+
color="attention300"
|
|
943
|
+
title="Something happened be careful"
|
|
944
|
+
/>
|
|
945
|
+
</Menu.Content.Label.Compose>
|
|
946
|
+
<Menu.Content.Separator />
|
|
947
|
+
<Menu.Content.Label text="With user defined styles and components" />
|
|
948
|
+
<Menu.Content.Label.Compose>
|
|
949
|
+
<div style={{ flex: 1, display: 'flex', alignItems: 'center' }}>
|
|
950
|
+
<StarsIcon customColor="currentColor" />
|
|
951
|
+
<span style={{ marginLeft: 10 }}>Danger</span>
|
|
952
|
+
</div>
|
|
953
|
+
<ToastNotificationIcon color="attention300" title="Something happened be careful" />
|
|
954
|
+
</Menu.Content.Label.Compose>
|
|
955
|
+
<Menu.Content.Label.Compose
|
|
956
|
+
style={{
|
|
957
|
+
flex: 1,
|
|
958
|
+
display: 'flex',
|
|
959
|
+
alignItems: 'center',
|
|
960
|
+
justifyContent: 'space-evenly'
|
|
961
|
+
}}
|
|
962
|
+
>
|
|
963
|
+
<StarsIcon customColor="red" />
|
|
964
|
+
<StarsIcon customColor="blue" />
|
|
965
|
+
<StarsIcon customColor="orange" />
|
|
966
|
+
<StarsIcon customColor="green" />
|
|
967
|
+
<StarsIcon customColor="magenta" />
|
|
968
|
+
</Menu.Content.Label.Compose>
|
|
969
|
+
<Menu.Content.DropdownArrow />
|
|
970
|
+
</Menu.Content>
|
|
971
|
+
</Menu>
|
|
972
|
+
```
|
|
973
|
+
|
|
974
|
+
## Notes
|
|
975
|
+
|
|
976
|
+
- `Menu` wraps the dropdown root in a disabled-field context; when `disabled` is set, the menu is forced closed and `onOpenChange` is suppressed.
|
|
977
|
+
- `Menu.Content` defaults to `placement="bottom"`, `align="center"`, `sideOffset={5}`, and `portal={document.body}`.
|
|
978
|
+
- `Menu.Trigger` can render as an invisible button wrapper when `withButton` is enabled.
|
|
979
|
+
- `Menu.Trigger.Arrow` uses a down-chevron icon that rotates with the menu open state.
|
|
980
|
+
- `Menu.Content.Item` regular items require `text`; `subHead` switches the layout and makes the text optional.
|
|
981
|
+
- `Menu.Content.Item` selection is handled through `selected` and `isSelected` is deprecated.
|
|
982
|
+
- `Menu.Content.Item.Compose` disables click handling when the item is selected.
|
|
983
|
+
- `Menu.Content.Item.Text` and `Menu.Content.Label.Text` inherit `Typography.Body` and render with ellipsis.
|
|
984
|
+
- `Menu.Content.Item.SubHead` renders the same text surface with semi-bold typography.
|
|
985
|
+
- `Menu.Content.Item.Check` defaults to `CheckBoldIcon`.
|
|
986
|
+
- `Menu.Content.Label` uses `text` as the preferred content prop and keeps `children` only as a deprecated alias.
|
|
987
|
+
- `Menu.Content.Label.Compose` defaults to the `header` variant.
|
|
988
|
+
- `Menu.Content.DropdownArrow` is optional and only needed when the menu should render the Radix arrow.
|