Info alert:Beta feature
This Beta component is currently under review and is still open for further evolution. It is available for use in product. Beta components are considered for promotion on a quarterly basis. Please join in and give us your feedback or submit any questions on the PatternFly forum or via Slack. To learn more go to our Beta components page on GitHub.
Examples
Using more complex options with actions
Available options
0 of 4 items selected
Chosen options
0 of 0 items selected
Composable dual list selector
For more flexibility, a Dual list selector can be built using sub components. When doing so, the intended component relationships are arranged as follows:
import React from 'react';
import { DualListSelector, DualListSelectorPane, DualListSelectorList, DualListSelectorListItem, DualListSelectorControlsWrapper, DualListSelectorControl } from '@patternfly/react-core';
<DualListSelector>
<DualListSelectorPane>
<DualListSelectorList>
<DualListSelectorListItem/>
</DualListSelectorList>
</DualListSelectorPane>
<DualListSelectorControlsWrapper>
<DualListSelectorControl/> {/* The standard Dual list selector has 4 controls */}
</DualListSelectorControlsWrapper>
<DualListSelectorPane isChosen>
<DualListSelectorList>
<DualListSelectorListItem/>
</DualListSelectorList>
</DualListSelectorPane>
</DualListSelector>
Note: Keyboard accessibility and screen reader accessibility for the DragDrop
component are still in development.
Available
0 of 7 options selected
Chosen
0 of 0 options selected
Reordering lists using drag and drop
To make a pane able to be reordered:
- wrap the
DualListSelectorPane
in aDragDrop
component - wrap the
DualListSelectorList
in aDroppable
component - wrap the
DualListSelectorListItem
components in aDraggable
component - define an
onDrop
callback which reorders the sortable options.- The
onDrop
function provides the starting location and destination location for a dragged item. It should return true to enable the 'drop' animation in the new location and false to enable the 'drop' animation back to the item's old position. - define an
onDrag
callback which ensures that the drag event will not cross hairs with theonOptionSelect
click event set on the option. Note: theignoreNextOptionSelect
state value is used to prevent selection while dragging.
- The
Available
0 of 3 options selected
Chosen
0 of 4 options selected
Props
DualListSelector
Name | Type | Default | Description |
---|---|---|---|
addAll | (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void | Optional callback for the dynamically built add all button | |
addAllAriaLabel | string | 'Add all' | Accessible label for the dynamically built add all button |
addAllTooltip | React.ReactNode | Tooltip content for the dynamically built add all button | |
addAllTooltipProps | any | Additonal tooltip properties for the dynamically built add all tooltip | |
addSelected | (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void | Optional callback for the dynamically built add selected button | |
addSelectedAriaLabel | string | 'Add selected' | Accessible label for the dynamically built add selected button |
addSelectedTooltip | React.ReactNode | Tooltip content for the dynamically built add selected button | |
addSelectedTooltipProps | any | Additonal tooltip properties for the dynamically built add selected tooltip | |
availableOptions | React.ReactNode[] | DualListSelectorTreeItemData[] | [] | Options to display in the dynamically built available options pane. When using trees, the options should be in the DualListSelectorTreeItemData[] format. |
availableOptionsActions | React.ReactNode[] | Actions to be displayed above the dynamically built available options pane. | |
availableOptionsSearchAriaLabel | string | 'Available search input' | Accessible label for the search input on the dynamically built available options pane. |
availableOptionsStatus | string | Status message to display above the dynamically built available options pane. | |
availableOptionsTitle | string | 'Available options' | Title applied to the dynamically built available options pane. |
children | React.ReactNode | '' | Content to be rendered in the dual list selector. Panes & controls will not be built dynamically when children are provided. |
chosenOptions | React.ReactNode[] | DualListSelectorTreeItemData[] | [] | Options to display in the dynamically built chosen options pane. When using trees, the options should be in the DualListSelectorTreeItemData[] format. |
chosenOptionsActions | React.ReactNode[] | Actions to be displayed above the dynamically built chosen options pane. | |
chosenOptionsSearchAriaLabel | string | 'Chosen search input' | Accessible label for the search input on the dynamically built chosen options pane. |
chosenOptionsStatus | string | Status message to display above the dynamically built chosen options pane. | |
chosenOptionsTitle | string | 'Chosen options' | Title applied to the dynamically built chosen options pane. |
className | string | Additional classes applied to the dual list selector. | |
controlsAriaLabel | string | 'Selector controls' | Accessible label for the dynamically built controls between the two panes. |
filterOption | (option: React.ReactNode, input: string) => boolean | Optional filter function for custom filtering based on search string. Used with a dynamically built search input. | |
id | string | getUniqueId('dual-list-selector') | Id of the dual list selector. |
isDisabled | boolean | false | Flag indicating if the dual list selector is in a disabled state |
isSearchable | boolean | Flag indicating a search bar should be included above both the dynamically built available and chosen panes. | |
isTree | boolean | false | Flag indicating if the dual list selector uses trees instead of simple lists |
onAvailableOptionsSearchInputChanged | (value: string, event: React.FormEvent<HTMLInputElement>) => void | A callback for when the search input value for the dynamically built available options changes. | |
onChosenOptionsSearchInputChanged | (value: string, event: React.FormEvent<HTMLInputElement>) => void | A callback for when the search input value for the dynamically built chosen options changes. | |
onListChange | (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void | Callback fired every time dynamically built options are chosen or removed | |
onOptionCheck | ( e: React.MouseEvent | React.ChangeEvent<HTMLInputElement> | React.KeyboardEvent, checked: boolean, checkedId: string, newCheckedItems: string[] ) => void | Optional callback fired when a dynamically built option is checked | |
onOptionSelect | ( e: React.MouseEvent | React.ChangeEvent | React.KeyboardEvent, index: number, isChosen: boolean, id: string, itemData: any, parentData: any ) => void | Optional callback fired when a dynamically built option is selected | |
removeAll | (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void | Optional callback for the dynamically built remove all button | |
removeAllAriaLabel | string | 'Remove all' | Accessible label for the dynamically built remove all button |
removeAllTooltip | React.ReactNode | Tooltip content for the dynamically built remove all button | |
removeAllTooltipProps | any | Additonal tooltip properties for the dynamically built remove all tooltip | |
removeSelected | (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void | Optional callback for the dynamically built remove selected button | |
removeSelectedAriaLabel | string | 'Remove selected' | Accessible label for the dynamically built remove selected button |
removeSelectedTooltip | React.ReactNode | Tooltip content for the dynamically built remove selected button | |
removeSelectedTooltipProps | any | Additonal tooltip properties for the dynamically built remove selected tooltip |
DualListSelectorPane
Name | Type | Default | Description |
---|---|---|---|
actions | React.ReactNode[] | Actions to place above the pane. | |
children | React.ReactNode | A dual list selector list or dual list selector tree to be rendered in the pane. | |
className | string | '' | Additional classes applied to the dual list selector pane. |
id | string | getUniqueId('dual-list-selector-pane') | Id of the pane. |
isChosen | boolean | false | Flag indicating if this pane is the chosen pane. |
isDisabled | boolean | false | Flag indicating whether the component is disabled. |
onSearch | (event: React.ChangeEvent<HTMLInputElement>) => void | Callback for search input. To be used when isSearchable is true. | |
searchInput | React.ReactNode | A search input placed above the list at the top of the pane, before actions. | |
status | string | '' | Status to display above the pane. |
title | React.ReactNode | '' | Title of the pane. |
DualListSelectorControl
Name | Type | Default | Description |
---|---|---|---|
aria-label | string | Accessible label for the dual list selector control. | |
children | React.ReactNode | Content to be rendered in the dual list selector control. | |
className | string | Additional classes applied to the dual list selector control. | |
isDisabled | boolean | Flag indicating the control is disabled. | |
onClick | (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void | Callback fired when dual list selector control is selected. | |
tooltipContent | React.ReactNode | Content to be displayed in a tooltip on hover of control. | |
tooltipProps | any | Additional tooltip properties passed to the tooltip. |
DualListSelectorControlsWrapper
Name | Type | Default | Description |
---|---|---|---|
aria-label | string | Accessible label for the dual list selector controls wrapper. | |
children | React.ReactNode | Anything that can be rendered inside of the wrapper. | |
className | string | Additional classes added to the wrapper. |
DualListSelectorTree
Name | Type | Default | Description |
---|---|---|---|
datarequired | DualListSelectorTreeItemData[] | (() => DualListSelectorTreeItemData[]) | Data of the tree view | |
defaultAllExpanded | boolean | false | Sets the default expanded behavior |
hasBadges | boolean | false | Flag indicating if all options should have badges |
id | string | ID of the tree view | |
isDisabled | boolean | false | Callback fired when an option is checked |
onOptionCheck | ( event: React.MouseEvent | React.ChangeEvent<HTMLInputElement> | React.KeyboardEvent, isChecked: boolean, itemData: DualListSelectorTreeItemData ) => void |
DualListSelectorTreeItemData
Name | Type | Default | Description |
---|---|---|---|
idrequired | string | ID of the option | |
isCheckedrequired | boolean | Checked state of the option | |
textrequired | string | Text of the option | |
badgeProps | any | Additional properties to pass to the option badge | |
checkProps | any | Additional properties to pass to the option checkbox | |
children | DualListSelectorTreeItemData[] | Content rendered inside the dual list selector. | |
className | string | Additional classes applied to the dual list selector. | |
defaultExpanded | boolean | Flag indicating this option is expanded by default. | |
hasBadge | boolean | Flag indicating this option has a badge | |
isDisabled | boolean | Flag indicating whether the component is disabled. | |
onOptionCheck | ( event: React.MouseEvent | React.ChangeEvent<HTMLInputElement> | React.KeyboardEvent, isChecked: boolean, isChosen: boolean, itemData: DualListSelectorTreeItemData ) => void | Callback fired when an option is checked | |
parentId | string | Parent id of an option |
CSS variables
.pf-c-dual-list-selector | --pf-c-dual-list-selector__header--GridArea | pane-header | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__tools--GridArea | pane-tools | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__status--GridArea | pane-status | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__menu--GridArea | pane-menu | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__controls--GridArea | controls | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector--m-chosen__header--GridArea | pane-header-c | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector--m-chosen__tools--GridArea | pane-tools-c | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector--m-chosen__status--GridArea | pane-status-c | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector--m-chosen__menu--GridArea | pane-menu-c | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--min | 12.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--max | 28.125rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__header--MarginBottom | 0.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__title-text--FontWeight | 700 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__tools--MarginBottom | 1rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__tools-filter--tools-actions--MarginLeft | 0.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__menu--BorderWidth | 1px | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__menu--BorderColor | #d2d2d2 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__menu--MinHeight | 12.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__menu--MaxHeight | 20rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item-row--FontSize | 0.875rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item-row--BackgroundColor | transparent | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item-row--hover--BackgroundColor | #f0f0f0 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item-row--focus-within--BackgroundColor | #f0f0f0 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item-row--m-selected--BackgroundColor | #f0f0f0 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item--m-ghost-row--BackgroundColor | #fff | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item--m-ghost-row--Opacity | .4 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item--PaddingTop | 0.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item--PaddingRight | 1rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item--PaddingBottom | 0.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item--PaddingLeft | 1rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item--m-expandable--PaddingLeft | 0 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item--indent--base | calc(1rem + 0.5rem + 0.875rem) | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item--nested-indent--base | calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__draggable--item--PaddingLeft | 0.25rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-text--Color | #151515 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item-row--m-selected__text--Color | #06c | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item-row--m-selected__text--FontWeight | 700 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item--m-disabled__item-text--Color | #6a6e73 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__status--MarginBottom | 0.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__status-text--FontSize | 0.875rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__status-text--Color | #6a6e73 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__controls--PaddingRight | 1rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__controls--PaddingLeft | 1rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-toggle--PaddingTop | 0.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-toggle--PaddingRight | 0.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-toggle--PaddingBottom | 0.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-toggle--PaddingLeft | 1rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-toggle--MarginTop | calc(0.5rem * -1) | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-toggle--MarginBottom | calc(0.5rem * -1) | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list__list__item-toggle--Left | 0 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list__list__item-toggle--TranslateX | -100% | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-check--MarginRight | 0.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-count--Marginleft | 0.5rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item--c-badge--m-read--BackgroundColor | #d2d2d2 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-toggle-icon--Rotate | 0 | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item--m-expanded__item-toggle-icon--Rotate | 90deg | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-toggle-icon--Transition | all 250ms cubic-bezier(.42, 0, .58, 1) | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__item-toggle-icon--MinWidth | 0.875rem | |
.pf-c-dual-list-selector | --pf-c-dual-list-selector__list-item--m-disabled__item-toggle-icon--Color | #d2d2d2 | |
.pf-c-dual-list-selector__pane.pf-m-chosen | --pf-c-dual-list-selector__header--GridArea | pane-header-c | |
.pf-c-dual-list-selector__pane.pf-m-chosen | --pf-c-dual-list-selector__tools--GridArea | pane-tools-c | |
.pf-c-dual-list-selector__pane.pf-m-chosen | --pf-c-dual-list-selector__status--GridArea | pane-status-c | |
.pf-c-dual-list-selector__pane.pf-m-chosen | --pf-c-dual-list-selector__menu--GridArea | pane-menu-c | |
.pf-c-dual-list-selector__list | --pf-c-dual-list-selector__item-toggle-icon--Rotate | 0 | |
.pf-c-dual-list-selector__list .pf-c-dual-list-selector__list | --pf-c-dual-list-selector__item-toggle--MarginTop | 0 | |
.pf-c-dual-list-selector__list .pf-c-dual-list-selector__list | --pf-c-dual-list-selector__item-toggle--MarginBottom | 0 | |
.pf-c-dual-list-selector__list-item:focus | --pf-c-dual-list-selector__list-item-row--BackgroundColor | #f0f0f0 | |
.pf-c-dual-list-selector__list-item.pf-m-expandable | --pf-c-dual-list-selector__item--PaddingLeft | 0 | |
.pf-c-dual-list-selector__list-item.pf-m-expanded | --pf-c-dual-list-selector__item-toggle-icon--Rotate | 90deg | |
.pf-c-dual-list-selector__list-item.pf-m-disabled | --pf-c-dual-list-selector__item-text--Color | #6a6e73 | |
.pf-c-dual-list-selector__list-item.pf-m-disabled | --pf-c-dual-list-selector__item-toggle-icon--Color | #d2d2d2 | |
.pf-c-dual-list-selector__list-item-row:hover | --pf-c-dual-list-selector__list-item-row--BackgroundColor | #f0f0f0 | |
.pf-c-dual-list-selector__list-item-row.pf-m-selected | --pf-c-dual-list-selector__list-item-row--BackgroundColor | #f0f0f0 | |
.pf-c-dual-list-selector__list-item-row.pf-m-selected .pf-c-dual-list-selector__item-text | --pf-c-dual-list-selector__item-text--Color | #06c | |
.pf-c-dual-list-selector__list-item-row.pf-m-check | --pf-c-dual-list-selector__list-item-row--m-selected--BackgroundColor | transparent | |
.pf-c-dual-list-selector__list-item-row.pf-m-ghost-row | --pf-c-dual-list-selector__list-item-row--BackgroundColor | #fff | |
.pf-c-dual-list-selector__draggable + .pf-c-dual-list-selector__item | --pf-c-dual-list-selector__item--PaddingLeft | 0.25rem | |
.pf-c-dual-list-selector__draggable .pf-c-button | --pf-c-button--FontSize | inherit | |
.pf-c-dual-list-selector__item-count .pf-c-badge.pf-m-read | --pf-c-badge--m-read--BackgroundColor | #d2d2d2 | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__item--PaddingLeft | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 1 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__list__list__item-toggle--Left | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 1 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__item--PaddingLeft | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 2 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__list__list__item-toggle--Left | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 2 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__item--PaddingLeft | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 3 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__list__list__item-toggle--Left | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 3 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__item--PaddingLeft | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 4 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__list__list__item-toggle--Left | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 4 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__item--PaddingLeft | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 5 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__list__list__item-toggle--Left | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 5 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__item--PaddingLeft | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 6 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__list__list__item-toggle--Left | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 6 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__item--PaddingLeft | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 7 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__list__list__item-toggle--Left | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 7 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__item--PaddingLeft | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 8 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__list__list__item-toggle--Left | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 8 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__item--PaddingLeft | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 9 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__list__list__item-toggle--Left | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 9 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__item--PaddingLeft | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 10 + calc(1rem + 0.5rem + 0.875rem)) | |
.pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item .pf-c-dual-list-selector__list-item | --pf-c-dual-list-selector__list__list__item-toggle--Left | calc(calc(calc(1rem + 0.5rem + 0.875rem) - 1rem) * 10 + calc(1rem + 0.5rem + 0.875rem)) | |
View source on GitHub