@patternfly/react-core 4.227.7 → 4.228.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/dist/esm/components/Menu/MenuItem.d.ts +3 -1
- package/dist/esm/components/Menu/MenuItem.d.ts.map +1 -1
- package/dist/esm/components/Menu/MenuItem.js +2 -2
- package/dist/esm/components/Menu/MenuItem.js.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggle.d.ts +6 -12
- package/dist/esm/components/MenuToggle/MenuToggle.d.ts.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggle.js +12 -8
- package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
- package/dist/esm/components/Tabs/OverflowTab.d.ts +16 -0
- package/dist/esm/components/Tabs/OverflowTab.d.ts.map +1 -0
- package/dist/esm/components/Tabs/OverflowTab.js +74 -0
- package/dist/esm/components/Tabs/OverflowTab.js.map +1 -0
- package/dist/esm/components/Tabs/Tabs.d.ts +12 -0
- package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/esm/components/Tabs/Tabs.js +36 -13
- package/dist/esm/components/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/TextInputGroup/TextInputGroup.d.ts +2 -0
- package/dist/esm/components/TextInputGroup/TextInputGroup.d.ts.map +1 -1
- package/dist/esm/components/TextInputGroup/TextInputGroup.js +2 -2
- package/dist/esm/components/TextInputGroup/TextInputGroup.js.map +1 -1
- package/dist/esm/components/TextInputGroup/TextInputGroupMain.d.ts +1 -1
- package/dist/esm/components/TextInputGroup/TextInputGroupMain.d.ts.map +1 -1
- package/dist/esm/components/TreeView/TreeView.d.ts +2 -0
- package/dist/esm/components/TreeView/TreeView.d.ts.map +1 -1
- package/dist/esm/components/TreeView/TreeView.js +3 -3
- package/dist/esm/components/TreeView/TreeView.js.map +1 -1
- package/dist/esm/components/TreeView/TreeViewListItem.d.ts +2 -0
- package/dist/esm/components/TreeView/TreeViewListItem.d.ts.map +1 -1
- package/dist/esm/components/TreeView/TreeViewListItem.js +23 -14
- package/dist/esm/components/TreeView/TreeViewListItem.js.map +1 -1
- package/dist/js/components/Menu/MenuItem.d.ts +3 -1
- package/dist/js/components/Menu/MenuItem.d.ts.map +1 -1
- package/dist/js/components/Menu/MenuItem.js +2 -2
- package/dist/js/components/Menu/MenuItem.js.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggle.d.ts +6 -12
- package/dist/js/components/MenuToggle/MenuToggle.d.ts.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggle.js +12 -8
- package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
- package/dist/js/components/Tabs/OverflowTab.d.ts +16 -0
- package/dist/js/components/Tabs/OverflowTab.d.ts.map +1 -0
- package/dist/js/components/Tabs/OverflowTab.js +78 -0
- package/dist/js/components/Tabs/OverflowTab.js.map +1 -0
- package/dist/js/components/Tabs/Tabs.d.ts +12 -0
- package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/js/components/Tabs/Tabs.js +36 -13
- package/dist/js/components/Tabs/Tabs.js.map +1 -1
- package/dist/js/components/TextInputGroup/TextInputGroup.d.ts +2 -0
- package/dist/js/components/TextInputGroup/TextInputGroup.d.ts.map +1 -1
- package/dist/js/components/TextInputGroup/TextInputGroup.js +2 -2
- package/dist/js/components/TextInputGroup/TextInputGroup.js.map +1 -1
- package/dist/js/components/TextInputGroup/TextInputGroupMain.d.ts +1 -1
- package/dist/js/components/TextInputGroup/TextInputGroupMain.d.ts.map +1 -1
- package/dist/js/components/TreeView/TreeView.d.ts +2 -0
- package/dist/js/components/TreeView/TreeView.d.ts.map +1 -1
- package/dist/js/components/TreeView/TreeView.js +3 -3
- package/dist/js/components/TreeView/TreeView.js.map +1 -1
- package/dist/js/components/TreeView/TreeViewListItem.d.ts +2 -0
- package/dist/js/components/TreeView/TreeViewListItem.d.ts.map +1 -1
- package/dist/js/components/TreeView/TreeViewListItem.js +23 -14
- package/dist/js/components/TreeView/TreeViewListItem.js.map +1 -1
- package/dist/styles/base-no-reset.css +9 -0
- package/dist/styles/base.css +9 -0
- package/dist/umd/react-core.css +21 -31
- package/dist/umd/react-core.js +149 -48
- package/dist/umd/react-core.min.css +21 -31
- package/dist/umd/react-core.min.js +5 -5
- package/package.json +6 -6
- package/src/components/Menu/MenuItem.tsx +4 -0
- package/src/components/MenuToggle/MenuToggle.tsx +63 -25
- package/src/components/Page/examples/Page.md +10 -615
- package/src/components/Page/examples/PageCenteredSection.tsx +76 -0
- package/src/components/Page/examples/PageGroupSection.tsx +106 -0
- package/src/components/Page/examples/PageHorizontalNav.tsx +43 -0
- package/src/components/Page/examples/PageMainSectionPadding.tsx +72 -0
- package/src/components/Page/examples/PageTertiaryNav.tsx +42 -0
- package/src/components/Page/examples/PageUncontrolledNav.tsx +53 -0
- package/src/components/Page/examples/PageVerticalNav.tsx +65 -0
- package/src/components/Page/examples/PageVerticalNavUsingPageHeaderComponent.tsx +44 -0
- package/src/components/Page/examples/PageWithOrWithoutFill.tsx +67 -0
- package/src/components/Switch/examples/Switch.md +6 -153
- package/src/components/Switch/examples/SwitchBasic.tsx +20 -0
- package/src/components/Switch/examples/SwitchCheckedWithLabel.tsx +22 -0
- package/src/components/Switch/examples/SwitchDisabled.tsx +28 -0
- package/src/components/Switch/examples/SwitchReversed.tsx +21 -0
- package/src/components/Switch/examples/SwitchUncontrolled.tsx +14 -0
- package/src/components/Switch/examples/SwitchWithoutLabel.tsx +12 -0
- package/src/components/Tabs/OverflowTab.tsx +141 -0
- package/src/components/Tabs/Tabs.tsx +72 -25
- package/src/components/Tabs/examples/Tabs.md +6 -1
- package/src/components/Tabs/examples/TabsHorizontalOverflow.tsx +67 -0
- package/src/components/TextInputGroup/TextInputGroup.tsx +9 -1
- package/src/components/TextInputGroup/TextInputGroupMain.tsx +1 -1
- package/src/components/TreeView/TreeView.tsx +5 -0
- package/src/components/TreeView/TreeViewListItem.tsx +31 -17
- package/src/components/TreeView/__tests__/__snapshots__/TreeView.test.tsx.snap +299 -299
- package/src/components/TreeView/examples/TreeView.md +125 -7
- package/src/demos/ComposableMenu/ComposableMenu.md +8 -0
- package/src/demos/ComposableMenu/examples/ComposableTypeaheadSelect.tsx +196 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Tabs, Tab, TabTitleText, Checkbox } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const TabsHorizontalOverflow: React.FunctionComponent = () => {
|
|
5
|
+
const [activeTabKey, setActiveTabKey] = React.useState<string | number>(0);
|
|
6
|
+
const [showTabCount, setShowTabCount] = React.useState(false);
|
|
7
|
+
|
|
8
|
+
const handleTabClick = (_event: any, tabIndex: string | number) => {
|
|
9
|
+
setActiveTabKey(tabIndex);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<div>
|
|
14
|
+
<Tabs
|
|
15
|
+
activeKey={activeTabKey}
|
|
16
|
+
onSelect={handleTabClick}
|
|
17
|
+
aria-label="Tabs in the horizontal overflow example"
|
|
18
|
+
role="region"
|
|
19
|
+
isOverflowHorizontal={{ showTabCount }}
|
|
20
|
+
>
|
|
21
|
+
<Tab eventKey={0} title={<TabTitleText>Users</TabTitleText>} aria-label="Horizontal overflow content users">
|
|
22
|
+
Users
|
|
23
|
+
</Tab>
|
|
24
|
+
<Tab eventKey={1} title={<TabTitleText>Containers</TabTitleText>}>
|
|
25
|
+
Containers
|
|
26
|
+
</Tab>
|
|
27
|
+
<Tab eventKey={2} title={<TabTitleText>Database</TabTitleText>}>
|
|
28
|
+
Database
|
|
29
|
+
</Tab>
|
|
30
|
+
<Tab eventKey={3} title={<TabTitleText>Server</TabTitleText>}>
|
|
31
|
+
Server
|
|
32
|
+
</Tab>
|
|
33
|
+
<Tab eventKey={4} title={<TabTitleText>System</TabTitleText>}>
|
|
34
|
+
System
|
|
35
|
+
</Tab>
|
|
36
|
+
<Tab eventKey={6} title={<TabTitleText>Network</TabTitleText>}>
|
|
37
|
+
Network
|
|
38
|
+
</Tab>
|
|
39
|
+
<Tab eventKey={7} title={<TabTitleText>Tab item 7</TabTitleText>}>
|
|
40
|
+
Tab 7 section
|
|
41
|
+
</Tab>
|
|
42
|
+
<Tab eventKey={8} title={<TabTitleText>Tab item 8</TabTitleText>}>
|
|
43
|
+
Tab 8 section
|
|
44
|
+
</Tab>
|
|
45
|
+
<Tab eventKey={9} title={<TabTitleText>Tab item 9</TabTitleText>}>
|
|
46
|
+
Tab 9 section
|
|
47
|
+
</Tab>
|
|
48
|
+
<Tab eventKey={10} title={<TabTitleText>Tab item 10</TabTitleText>}>
|
|
49
|
+
Tab 10 section
|
|
50
|
+
</Tab>
|
|
51
|
+
<Tab eventKey={11} title={<TabTitleText>Tab item 11</TabTitleText>}>
|
|
52
|
+
Tab 11 section
|
|
53
|
+
</Tab>
|
|
54
|
+
</Tabs>
|
|
55
|
+
<div style={{ marginTop: '20px' }}>
|
|
56
|
+
<Checkbox
|
|
57
|
+
label="Show overflowing tab count"
|
|
58
|
+
isChecked={showTabCount}
|
|
59
|
+
onChange={() => setShowTabCount(!showTabCount)}
|
|
60
|
+
aria-label="show overflow tab count variation checkbox"
|
|
61
|
+
id="toggle-show-count-overflow"
|
|
62
|
+
name="toggle-show-count-overflow"
|
|
63
|
+
/>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
};
|
|
@@ -9,6 +9,8 @@ export interface TextInputGroupProps extends React.HTMLProps<HTMLDivElement> {
|
|
|
9
9
|
className?: string;
|
|
10
10
|
/** Adds disabled styling and a disabled context value which text input group main hooks into for the input itself */
|
|
11
11
|
isDisabled?: boolean;
|
|
12
|
+
/** Flag to indicate the toggle has no border or background */
|
|
13
|
+
isPlain?: boolean;
|
|
12
14
|
/** @hide A reference object to attach to the input box */
|
|
13
15
|
innerRef?: React.RefObject<any>;
|
|
14
16
|
}
|
|
@@ -21,6 +23,7 @@ export const TextInputGroup: React.FunctionComponent<TextInputGroupProps> = ({
|
|
|
21
23
|
children,
|
|
22
24
|
className,
|
|
23
25
|
isDisabled,
|
|
26
|
+
isPlain,
|
|
24
27
|
innerRef,
|
|
25
28
|
...props
|
|
26
29
|
}: TextInputGroupProps) => {
|
|
@@ -30,7 +33,12 @@ export const TextInputGroup: React.FunctionComponent<TextInputGroupProps> = ({
|
|
|
30
33
|
<TextInputGroupContext.Provider value={{ isDisabled }}>
|
|
31
34
|
<div
|
|
32
35
|
ref={textInputGroupRef}
|
|
33
|
-
className={css(
|
|
36
|
+
className={css(
|
|
37
|
+
styles.textInputGroup,
|
|
38
|
+
isDisabled && styles.modifiers.disabled,
|
|
39
|
+
isPlain && styles.modifiers.plain,
|
|
40
|
+
className
|
|
41
|
+
)}
|
|
34
42
|
{...props}
|
|
35
43
|
>
|
|
36
44
|
{children}
|
|
@@ -37,7 +37,7 @@ export interface TextInputGroupMainProps extends Omit<React.HTMLProps<HTMLDivEle
|
|
|
37
37
|
value?: string | number;
|
|
38
38
|
/** Placeholder value for the input */
|
|
39
39
|
placeholder?: string;
|
|
40
|
-
/**
|
|
40
|
+
/** A reference object to attach to the input box */
|
|
41
41
|
innerRef?: React.RefObject<any>;
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -45,6 +45,8 @@ export interface TreeViewProps {
|
|
|
45
45
|
hasBadges?: boolean;
|
|
46
46
|
/** Flag indicating if tree view has guide lines. */
|
|
47
47
|
hasGuides?: boolean;
|
|
48
|
+
/** Flag indicating that tree nodes should be independently selectable, even when having children */
|
|
49
|
+
hasSelectableNodes?: boolean;
|
|
48
50
|
/** Variant presentation styles for the tree view. */
|
|
49
51
|
variant?: 'default' | 'compact' | 'compactNoBackground';
|
|
50
52
|
/** Icon for all leaf or unexpanded node items */
|
|
@@ -79,6 +81,7 @@ export const TreeView: React.FunctionComponent<TreeViewProps> = ({
|
|
|
79
81
|
hasChecks = false,
|
|
80
82
|
hasBadges = false,
|
|
81
83
|
hasGuides = false,
|
|
84
|
+
hasSelectableNodes = false,
|
|
82
85
|
variant = 'default',
|
|
83
86
|
defaultAllExpanded = false,
|
|
84
87
|
allExpanded,
|
|
@@ -103,6 +106,7 @@ export const TreeView: React.FunctionComponent<TreeViewProps> = ({
|
|
|
103
106
|
title={item.title}
|
|
104
107
|
id={item.id}
|
|
105
108
|
isExpanded={allExpanded}
|
|
109
|
+
isSelectable={hasSelectableNodes}
|
|
106
110
|
defaultExpanded={item.defaultExpanded !== undefined ? item.defaultExpanded : defaultAllExpanded}
|
|
107
111
|
onSelect={onSelect}
|
|
108
112
|
onCheck={onCheck}
|
|
@@ -129,6 +133,7 @@ export const TreeView: React.FunctionComponent<TreeViewProps> = ({
|
|
|
129
133
|
hasChecks={hasChecks}
|
|
130
134
|
hasBadges={hasBadges}
|
|
131
135
|
hasGuides={hasGuides}
|
|
136
|
+
hasSelectableNodes={hasSelectableNodes}
|
|
132
137
|
variant={variant}
|
|
133
138
|
allExpanded={allExpanded}
|
|
134
139
|
defaultAllExpanded={defaultAllExpanded}
|
|
@@ -33,6 +33,8 @@ export interface TreeViewListItemProps {
|
|
|
33
33
|
checkProps?: TreeViewCheckProps;
|
|
34
34
|
/** Flag indicating if a tree view item has a badge */
|
|
35
35
|
hasBadge?: boolean;
|
|
36
|
+
/** Flag indicating that tree nodes should be independently selectable, even when having children */
|
|
37
|
+
isSelectable?: boolean;
|
|
36
38
|
/** Optional prop for custom badge */
|
|
37
39
|
customBadgeContent?: React.ReactNode;
|
|
38
40
|
/** Additional properties of the tree view item badge */
|
|
@@ -73,6 +75,7 @@ const TreeViewListItemBase: React.FunctionComponent<TreeViewListItemProps> = ({
|
|
|
73
75
|
hasBadge = false,
|
|
74
76
|
customBadgeContent,
|
|
75
77
|
badgeProps = { isRead: true },
|
|
78
|
+
isSelectable = false,
|
|
76
79
|
isCompact,
|
|
77
80
|
activeItems = [],
|
|
78
81
|
itemData,
|
|
@@ -93,17 +96,27 @@ const TreeViewListItemBase: React.FunctionComponent<TreeViewListItemProps> = ({
|
|
|
93
96
|
}
|
|
94
97
|
}, [isExpanded, defaultExpanded]);
|
|
95
98
|
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
let Component: 'label' | 'div' | 'button' = 'button';
|
|
100
|
+
if (hasCheck) {
|
|
101
|
+
Component = 'label';
|
|
102
|
+
} else if (isSelectable) {
|
|
103
|
+
Component = 'div';
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const ToggleComponent = hasCheck || isSelectable ? 'button' : 'span';
|
|
107
|
+
|
|
98
108
|
const renderToggle = (randomId: string) => (
|
|
99
109
|
<ToggleComponent
|
|
100
110
|
className={css(styles.treeViewNodeToggle)}
|
|
101
|
-
onClick={() => {
|
|
102
|
-
if (hasCheck) {
|
|
111
|
+
onClick={(evt: React.MouseEvent) => {
|
|
112
|
+
if (isSelectable || hasCheck) {
|
|
103
113
|
setIsExpanded(!internalIsExpanded);
|
|
104
114
|
}
|
|
115
|
+
if (isSelectable) {
|
|
116
|
+
evt.stopPropagation();
|
|
117
|
+
}
|
|
105
118
|
}}
|
|
106
|
-
{...(hasCheck && { 'aria-labelledby': `label-${randomId}` })}
|
|
119
|
+
{...((hasCheck || isSelectable) && { 'aria-labelledby': `label-${randomId}` })}
|
|
107
120
|
tabIndex={-1}
|
|
108
121
|
>
|
|
109
122
|
<span className={css(styles.treeViewNodeToggleIcon)}>
|
|
@@ -131,20 +144,18 @@ const TreeViewListItemBase: React.FunctionComponent<TreeViewListItemProps> = ({
|
|
|
131
144
|
{internalIsExpanded && (expandedIcon || icon)}
|
|
132
145
|
</span>
|
|
133
146
|
);
|
|
134
|
-
const renderNodeContent = (
|
|
147
|
+
const renderNodeContent = () => {
|
|
135
148
|
const content = (
|
|
136
149
|
<>
|
|
137
150
|
{isCompact && title && <span className={css(styles.treeViewNodeTitle)}>{title}</span>}
|
|
138
151
|
{hasCheck ? (
|
|
139
|
-
<
|
|
140
|
-
{name}
|
|
141
|
-
</label>
|
|
152
|
+
<span className={css(styles.treeViewNodeText)}>{name}</span>
|
|
142
153
|
) : (
|
|
143
154
|
<span className={css(styles.treeViewNodeText)}>{name}</span>
|
|
144
155
|
)}
|
|
145
156
|
</>
|
|
146
157
|
);
|
|
147
|
-
return isCompact ? <
|
|
158
|
+
return isCompact ? <span className={css(styles.treeViewNodeContent)}>{content}</span> : content;
|
|
148
159
|
};
|
|
149
160
|
const badgeRendered = (
|
|
150
161
|
<>
|
|
@@ -171,12 +182,13 @@ const TreeViewListItemBase: React.FunctionComponent<TreeViewListItemProps> = ({
|
|
|
171
182
|
tabIndex={-1}
|
|
172
183
|
>
|
|
173
184
|
<div className={css(styles.treeViewContent)}>
|
|
174
|
-
<GenerateId prefix=
|
|
185
|
+
<GenerateId prefix={isSelectable ? 'selectable-id' : 'checkbox-id'}>
|
|
175
186
|
{randomId => (
|
|
176
187
|
<Component
|
|
177
188
|
className={css(
|
|
178
189
|
styles.treeViewNode,
|
|
179
|
-
|
|
190
|
+
children && (isSelectable || hasCheck) && styles.modifiers.selectable,
|
|
191
|
+
(!children || isSelectable) &&
|
|
180
192
|
activeItems &&
|
|
181
193
|
activeItems.length > 0 &&
|
|
182
194
|
activeItems.some(item => compareItems && item && compareItems(item, itemData))
|
|
@@ -186,20 +198,22 @@ const TreeViewListItemBase: React.FunctionComponent<TreeViewListItemProps> = ({
|
|
|
186
198
|
onClick={(evt: React.MouseEvent) => {
|
|
187
199
|
if (!hasCheck) {
|
|
188
200
|
onSelect && onSelect(evt, itemData, parentItem);
|
|
189
|
-
if (children && evt.isDefaultPrevented() !== true) {
|
|
201
|
+
if (!isSelectable && children && evt.isDefaultPrevented() !== true) {
|
|
190
202
|
setIsExpanded(!internalIsExpanded);
|
|
191
203
|
}
|
|
192
204
|
}
|
|
193
205
|
}}
|
|
194
|
-
tabIndex={-1}
|
|
206
|
+
tabIndex={isSelectable ? 0 : -1}
|
|
207
|
+
{...(hasCheck && { htmlFor: randomId })}
|
|
208
|
+
{...((hasCheck || (isSelectable && children)) && { id: `label-${randomId}` })}
|
|
195
209
|
>
|
|
196
|
-
<
|
|
210
|
+
<span className={css(styles.treeViewNodeContainer)}>
|
|
197
211
|
{children && renderToggle(randomId)}
|
|
198
212
|
{hasCheck && renderCheck(randomId)}
|
|
199
213
|
{icon && iconRendered}
|
|
200
|
-
{renderNodeContent(
|
|
214
|
+
{renderNodeContent()}
|
|
201
215
|
{badgeRendered}
|
|
202
|
-
</
|
|
216
|
+
</span>
|
|
203
217
|
</Component>
|
|
204
218
|
)}
|
|
205
219
|
</GenerateId>
|