@patternfly/react-templates 6.0.0-alpha.2 → 6.0.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +4 -17
  3. package/components/package.json +1 -1
  4. package/dist/dynamic/components/Dropdown/package.json +1 -0
  5. package/dist/dynamic/components/Select/package.json +1 -1
  6. package/dist/dynamic-modules.json +15 -0
  7. package/dist/esm/components/Dropdown/DropdownSimple.d.ts +43 -0
  8. package/dist/esm/components/Dropdown/DropdownSimple.d.ts.map +1 -0
  9. package/dist/esm/components/Dropdown/DropdownSimple.js +27 -0
  10. package/dist/esm/components/Dropdown/DropdownSimple.js.map +1 -0
  11. package/dist/esm/components/Dropdown/index.d.ts +2 -0
  12. package/dist/esm/components/Dropdown/index.d.ts.map +1 -0
  13. package/dist/esm/components/Dropdown/index.js +2 -0
  14. package/dist/esm/components/Dropdown/index.js.map +1 -0
  15. package/dist/esm/components/Select/CheckboxSelect.js.map +1 -1
  16. package/dist/esm/components/Select/SelectTypeahead.d.ts +29 -0
  17. package/dist/esm/components/Select/SelectTypeahead.d.ts.map +1 -0
  18. package/dist/esm/components/Select/SelectTypeahead.js +179 -0
  19. package/dist/esm/components/Select/SelectTypeahead.js.map +1 -0
  20. package/dist/esm/components/Select/index.d.ts +1 -0
  21. package/dist/esm/components/Select/index.d.ts.map +1 -1
  22. package/dist/esm/components/Select/index.js +1 -0
  23. package/dist/esm/components/Select/index.js.map +1 -1
  24. package/dist/esm/components/index.d.ts +1 -0
  25. package/dist/esm/components/index.d.ts.map +1 -1
  26. package/dist/esm/components/index.js +1 -0
  27. package/dist/esm/components/index.js.map +1 -1
  28. package/dist/js/components/Dropdown/DropdownSimple.d.ts +43 -0
  29. package/dist/js/components/Dropdown/DropdownSimple.d.ts.map +1 -0
  30. package/dist/js/components/Dropdown/DropdownSimple.js +30 -0
  31. package/dist/js/components/Dropdown/DropdownSimple.js.map +1 -0
  32. package/dist/js/components/Dropdown/index.d.ts +2 -0
  33. package/dist/js/components/Dropdown/index.d.ts.map +1 -0
  34. package/dist/js/components/Dropdown/index.js +5 -0
  35. package/dist/js/components/Dropdown/index.js.map +1 -0
  36. package/dist/js/components/Select/CheckboxSelect.js.map +1 -1
  37. package/dist/js/components/Select/SelectSimple.js.map +1 -1
  38. package/dist/js/components/Select/SelectTypeahead.d.ts +29 -0
  39. package/dist/js/components/Select/SelectTypeahead.d.ts.map +1 -0
  40. package/dist/js/components/Select/SelectTypeahead.js +183 -0
  41. package/dist/js/components/Select/SelectTypeahead.js.map +1 -0
  42. package/dist/js/components/Select/index.d.ts +1 -0
  43. package/dist/js/components/Select/index.d.ts.map +1 -1
  44. package/dist/js/components/Select/index.js +1 -0
  45. package/dist/js/components/Select/index.js.map +1 -1
  46. package/dist/js/components/index.d.ts +1 -0
  47. package/dist/js/components/index.d.ts.map +1 -1
  48. package/dist/js/components/index.js +1 -0
  49. package/dist/js/components/index.js.map +1 -1
  50. package/dist/umd/assets/output-BQEbKtD2.css +24359 -0
  51. package/dist/umd/react-templates.min.js +1 -1
  52. package/package.json +7 -11
  53. package/rollup.config.mjs +8 -0
  54. package/src/components/Dropdown/DropdownSimple.tsx +122 -0
  55. package/src/components/Dropdown/__tests__/DropdownSimple.test.tsx +254 -0
  56. package/src/components/Dropdown/__tests__/__snapshots__/DropdownSimple.test.tsx.snap +147 -0
  57. package/src/components/Dropdown/examples/DropdownSimpleExample.tsx +53 -0
  58. package/src/components/Dropdown/examples/DropdownTemplates.md +36 -0
  59. package/src/components/Dropdown/index.ts +1 -0
  60. package/src/components/Select/SelectTypeahead.tsx +321 -0
  61. package/src/components/Select/__snapshots__/CheckboxSelectSnapshots.test.tsx.snap +4 -4
  62. package/src/components/Select/examples/SelectTemplates.md +9 -2
  63. package/src/components/Select/examples/SelectTypeaheadDemo.tsx +21 -0
  64. package/src/components/Select/index.ts +1 -0
  65. package/src/components/index.ts +1 -0
@@ -0,0 +1,254 @@
1
+ import * as React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import userEvent from '@testing-library/user-event';
4
+ import { DropdownSimple } from '../DropdownSimple';
5
+ import styles from '@patternfly/react-styles/css/components/MenuToggle/menu-toggle';
6
+
7
+ describe('Dropdown toggle', () => {
8
+ test('Renders dropdown toggle as not disabled when isDisabled is not true', () => {
9
+ render(<DropdownSimple toggleContent="Dropdown" />);
10
+
11
+ expect(screen.getByRole('button', { name: 'Dropdown' })).not.toBeDisabled();
12
+ });
13
+
14
+ test('Renders dropdown toggle as disabled when isDisabled is true', () => {
15
+ render(<DropdownSimple toggleContent="Dropdown" isDisabled />);
16
+
17
+ expect(screen.getByRole('button', { name: 'Dropdown' })).toBeDisabled();
18
+ });
19
+
20
+ test('Passes toggleVariant', () => {
21
+ render(<DropdownSimple toggleContent="Dropdown" toggleVariant="plain" />);
22
+
23
+ expect(screen.getByRole('button', { name: 'Dropdown' })).toHaveClass(styles.modifiers.plain);
24
+ });
25
+
26
+ test('Passes toggleAriaLabel', () => {
27
+ render(<DropdownSimple toggleContent="Dropdown" toggleAriaLabel="Aria label content" />);
28
+
29
+ expect(screen.getByRole('button')).toHaveAccessibleName('Aria label content');
30
+ });
31
+
32
+ test('Calls onToggle with next isOpen state when dropdown toggle is clicked', async () => {
33
+ const onToggle = jest.fn();
34
+ const user = userEvent.setup();
35
+ render(<DropdownSimple onToggle={onToggle} toggleContent="Dropdown" />);
36
+
37
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
38
+ await user.click(toggle);
39
+ expect(onToggle).toHaveBeenCalledWith(true);
40
+ });
41
+
42
+ test('Does not call onToggle when dropdown toggle is not clicked', async () => {
43
+ const onToggle = jest.fn();
44
+ const items = [{ content: 'Action', value: 1 }];
45
+ const user = userEvent.setup();
46
+ render(
47
+ <div>
48
+ <button>Actual</button>
49
+ <DropdownSimple initialItems={items} onToggle={onToggle} toggleContent="Dropdown" />
50
+ </div>
51
+ );
52
+
53
+ const btn = screen.getByRole('button', { name: 'Actual' });
54
+ await user.click(btn);
55
+ expect(onToggle).not.toHaveBeenCalled();
56
+ });
57
+
58
+ test('Calls toggle onSelect when item is clicked', async () => {
59
+ const onSelect = jest.fn();
60
+ const items = [{ content: 'Action', value: 1 }];
61
+ const user = userEvent.setup();
62
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" onSelect={onSelect} />);
63
+
64
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
65
+ await user.click(toggle);
66
+
67
+ const actionItem = screen.getByRole('menuitem', { name: 'Action' });
68
+ await user.click(actionItem);
69
+ expect(onSelect).toHaveBeenCalledTimes(1);
70
+ });
71
+
72
+ test('Does not call toggle onSelect when item is not clicked', async () => {
73
+ const onSelect = jest.fn();
74
+ const items = [{ content: 'Action', value: 1 }];
75
+ const user = userEvent.setup();
76
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" onSelect={onSelect} />);
77
+
78
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
79
+ await user.click(toggle);
80
+ await user.click(toggle);
81
+ expect(onSelect).not.toHaveBeenCalled();
82
+ });
83
+
84
+ test('Does not pass isToggleFullWidth to menu toggle by default', () => {
85
+ render(<DropdownSimple toggleContent="Dropdown" />);
86
+
87
+ expect(screen.getByRole('button', { name: 'Dropdown' })).not.toHaveClass(styles.modifiers.fullWidth);
88
+ });
89
+
90
+ test('Passes isToggleFullWidth to menu toggle when passed in', () => {
91
+ render(<DropdownSimple isToggleFullWidth toggleContent="Dropdown" />);
92
+
93
+ expect(screen.getByRole('button', { name: 'Dropdown' })).toHaveClass(styles.modifiers.fullWidth);
94
+ });
95
+
96
+ test('Does not focus toggle on item select by default', async () => {
97
+ const items = [{ content: 'Action', value: 1 }];
98
+ const user = userEvent.setup();
99
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
100
+
101
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
102
+ await user.click(toggle);
103
+ const actionItem = screen.getByRole('menuitem', { name: 'Action' });
104
+ await user.click(actionItem);
105
+
106
+ expect(toggle).not.toHaveFocus();
107
+ });
108
+
109
+ test('Focuses toggle on item select when shouldFocusToggleOnSelect is true', async () => {
110
+ const items = [{ content: 'Action', value: 1 }];
111
+ const user = userEvent.setup();
112
+ render(<DropdownSimple shouldFocusToggleOnSelect initialItems={items} toggleContent="Dropdown" />);
113
+
114
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
115
+ await user.click(toggle);
116
+ const actionItem = screen.getByRole('menuitem', { name: 'Action' });
117
+ await user.click(actionItem);
118
+
119
+ expect(toggle).toHaveFocus();
120
+ });
121
+
122
+ test('Matches snapshot', () => {
123
+ const { asFragment } = render(<DropdownSimple toggleContent="Dropdown" />);
124
+
125
+ expect(asFragment()).toMatchSnapshot();
126
+ });
127
+ });
128
+
129
+ describe('Dropdown items', () => {
130
+ test('Renders with items', async () => {
131
+ const items = [
132
+ { content: 'Action', value: 1 },
133
+ { value: 'separator', isDivider: true }
134
+ ];
135
+ const user = userEvent.setup();
136
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
137
+
138
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
139
+ await user.click(toggle);
140
+
141
+ const actionItem = screen.getByRole('menuitem', { name: 'Action' });
142
+ const dividerItem = screen.getByRole('separator');
143
+ expect(actionItem).toBeInTheDocument();
144
+ expect(dividerItem).toBeInTheDocument();
145
+ });
146
+
147
+ test('Renders with a link item', async () => {
148
+ const items = [{ content: 'Link', value: 1, to: '#' }];
149
+ const user = userEvent.setup();
150
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
151
+
152
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
153
+ await user.click(toggle);
154
+
155
+ const linkItem = screen.getByRole('menuitem', { name: 'Link' });
156
+ expect(linkItem.getAttribute('href')).toBe('#');
157
+ });
158
+
159
+ test('Renders with items not disabled by default', async () => {
160
+ const items = [{ content: 'Action', value: 1 }];
161
+ const user = userEvent.setup();
162
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
163
+
164
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
165
+ await user.click(toggle);
166
+
167
+ const actionItem = screen.getByRole('menuitem', { name: 'Action' });
168
+ expect(actionItem).not.toBeDisabled();
169
+ });
170
+
171
+ test('Renders with a disabled item', async () => {
172
+ const items = [{ content: 'Action', value: 1, isDisabled: true }];
173
+ const user = userEvent.setup();
174
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
175
+
176
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
177
+ await user.click(toggle);
178
+
179
+ const actionItem = screen.getByRole('menuitem', { name: 'Action' });
180
+ expect(actionItem).toBeDisabled();
181
+ });
182
+
183
+ test('Spreads props on item', async () => {
184
+ const items = [{ content: 'Action', value: 1, id: 'Test' }];
185
+ const user = userEvent.setup();
186
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
187
+
188
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
189
+ await user.click(toggle);
190
+
191
+ const actionItem = screen.getByRole('menuitem', { name: 'Action' });
192
+ expect(actionItem.getAttribute('id')).toBe('Test');
193
+ });
194
+
195
+ test('Calls item onClick when clicked', async () => {
196
+ const onClick = jest.fn();
197
+ const items = [{ content: 'Action', value: 1, onClick }];
198
+ const user = userEvent.setup();
199
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
200
+
201
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
202
+ await user.click(toggle);
203
+
204
+ const actionItem = screen.getByRole('menuitem', { name: 'Action' });
205
+ await user.click(actionItem);
206
+ expect(onClick).toHaveBeenCalledTimes(1);
207
+ });
208
+
209
+ test('Does not call item onClick when not clicked', async () => {
210
+ const onClick = jest.fn();
211
+ const items = [
212
+ { content: 'Action', value: 1, onClick },
213
+ { content: 'Action 2', value: 2 }
214
+ ];
215
+ const user = userEvent.setup();
216
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
217
+
218
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
219
+ await user.click(toggle);
220
+
221
+ const actionItem = screen.getByRole('menuitem', { name: 'Action 2' });
222
+ await user.click(actionItem);
223
+ expect(onClick).not.toHaveBeenCalled();
224
+ });
225
+
226
+ test('Does not call item onClick when clicked and item is disabled', async () => {
227
+ const onClick = jest.fn();
228
+ const items = [{ content: 'Action', value: 1, onClick, isDisabled: true }];
229
+ const user = userEvent.setup();
230
+ render(<DropdownSimple initialItems={items} toggleContent="Dropdown" />);
231
+
232
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
233
+ await user.click(toggle);
234
+
235
+ const actionItem = screen.getByRole('menuitem', { name: 'Action' });
236
+ await user.click(actionItem);
237
+ expect(onClick).not.toHaveBeenCalled();
238
+ });
239
+
240
+ test('Matches snapshot', async () => {
241
+ const items = [
242
+ { content: 'Action', value: 1, ouiaId: '1' },
243
+ { value: 'separator', isDivider: true, ouiaId: '2' },
244
+ { content: 'Link', value: 'separator', to: '#', ouiaId: '3' }
245
+ ];
246
+ const user = userEvent.setup();
247
+ const { asFragment } = render(<DropdownSimple ouiaId={4} initialItems={items} toggleContent="Dropdown" />);
248
+
249
+ const toggle = screen.getByRole('button', { name: 'Dropdown' });
250
+ await user.click(toggle);
251
+
252
+ expect(asFragment()).toMatchSnapshot();
253
+ });
254
+ });
@@ -0,0 +1,147 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Dropdown items Matches snapshot 1`] = `
4
+ <DocumentFragment>
5
+ <button
6
+ aria-expanded="true"
7
+ class="pf-v6-c-menu-toggle pf-m-expanded"
8
+ type="button"
9
+ >
10
+ <span
11
+ class="pf-v6-c-menu-toggle__text"
12
+ >
13
+ Dropdown
14
+ </span>
15
+ <span
16
+ class="pf-v6-c-menu-toggle__controls"
17
+ >
18
+ <span
19
+ class="pf-v6-c-menu-toggle__toggle-icon"
20
+ >
21
+ <svg
22
+ aria-hidden="true"
23
+ class="pf-v6-svg"
24
+ fill="currentColor"
25
+ height="1em"
26
+ role="img"
27
+ viewBox="0 0 320 512"
28
+ width="1em"
29
+ >
30
+ <path
31
+ d="M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"
32
+ />
33
+ </svg>
34
+ </span>
35
+ </span>
36
+ </button>
37
+ <div
38
+ class="pf-v6-c-menu"
39
+ data-ouia-component-id="4"
40
+ data-ouia-component-type="PF6/Dropdown"
41
+ data-ouia-safe="true"
42
+ data-popper-escaped="true"
43
+ data-popper-placement="bottom-start"
44
+ data-popper-reference-hidden="true"
45
+ style="position: absolute; left: 0px; top: 0px; z-index: 9999; opacity: 1; transition: opacity 0ms cubic-bezier(.54, 1.5, .38, 1.11); min-width: 0px; transform: translate(0px, 0px);"
46
+ >
47
+ <div
48
+ class="pf-v6-c-menu__content"
49
+ >
50
+ <ul
51
+ class="pf-v6-c-menu__list"
52
+ role="menu"
53
+ >
54
+ <li
55
+ class="pf-v6-c-menu__list-item"
56
+ data-ouia-component-id="1"
57
+ data-ouia-component-type="PF6/DropdownItem"
58
+ data-ouia-safe="true"
59
+ role="none"
60
+ >
61
+ <button
62
+ class="pf-v6-c-menu__item"
63
+ role="menuitem"
64
+ tabindex="0"
65
+ type="button"
66
+ >
67
+ <span
68
+ class="pf-v6-c-menu__item-main"
69
+ >
70
+ <span
71
+ class="pf-v6-c-menu__item-text"
72
+ >
73
+ Action
74
+ </span>
75
+ </span>
76
+ </button>
77
+ </li>
78
+ <li
79
+ class="pf-v6-c-divider"
80
+ role="separator"
81
+ />
82
+ <li
83
+ class="pf-v6-c-menu__list-item"
84
+ data-ouia-component-id="3"
85
+ data-ouia-component-type="PF6/DropdownItem"
86
+ data-ouia-safe="true"
87
+ role="none"
88
+ >
89
+ <a
90
+ class="pf-v6-c-menu__item"
91
+ href="#"
92
+ role="menuitem"
93
+ tabindex="-1"
94
+ >
95
+ <span
96
+ class="pf-v6-c-menu__item-main"
97
+ >
98
+ <span
99
+ class="pf-v6-c-menu__item-text"
100
+ >
101
+ Link
102
+ </span>
103
+ </span>
104
+ </a>
105
+ </li>
106
+ </ul>
107
+ </div>
108
+ </div>
109
+ </DocumentFragment>
110
+ `;
111
+
112
+ exports[`Dropdown toggle Matches snapshot 1`] = `
113
+ <DocumentFragment>
114
+ <button
115
+ aria-expanded="false"
116
+ class="pf-v6-c-menu-toggle"
117
+ type="button"
118
+ >
119
+ <span
120
+ class="pf-v6-c-menu-toggle__text"
121
+ >
122
+ Dropdown
123
+ </span>
124
+ <span
125
+ class="pf-v6-c-menu-toggle__controls"
126
+ >
127
+ <span
128
+ class="pf-v6-c-menu-toggle__toggle-icon"
129
+ >
130
+ <svg
131
+ aria-hidden="true"
132
+ class="pf-v6-svg"
133
+ fill="currentColor"
134
+ height="1em"
135
+ role="img"
136
+ viewBox="0 0 320 512"
137
+ width="1em"
138
+ >
139
+ <path
140
+ d="M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"
141
+ />
142
+ </svg>
143
+ </span>
144
+ </span>
145
+ </button>
146
+ </DocumentFragment>
147
+ `;
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import { Checkbox, Flex, FlexItem } from '@patternfly/react-core';
3
+ import { DropdownSimple, DropdownSimpleItem } from '@patternfly/react-templates';
4
+ import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
5
+
6
+ export const DropdownSimpleExample: React.FunctionComponent = () => {
7
+ const [isDisabled, setIsDisabled] = React.useState(false);
8
+
9
+ const items: DropdownSimpleItem[] = [
10
+ // eslint-disable-next-line no-console
11
+ { content: 'Action', value: 1, onClick: () => console.log('Action clicked') },
12
+ // Prevent default click behavior on link for example purposes
13
+ { content: 'Link', value: 2, to: '#', onClick: (event: any) => event.preventDefault() },
14
+ { content: 'Disabled Action', value: 3, isDisabled: true },
15
+ { value: 'separator', isDivider: true },
16
+ // eslint-disable-next-line no-console
17
+ { content: 'Second action', value: 4, onClick: () => console.log('Second action clicked') }
18
+ ];
19
+
20
+ return (
21
+ <React.Fragment>
22
+ <Checkbox
23
+ id="simple-example-disabled-toggle"
24
+ label="Disable dropdown simple toggles"
25
+ isChecked={isDisabled}
26
+ onChange={(_event: React.FormEvent<HTMLInputElement>, checked: boolean) => setIsDisabled(checked)}
27
+ style={{ marginBottom: 20 }}
28
+ />
29
+ <Flex gap={{ default: 'gapLg' }}>
30
+ <FlexItem>
31
+ <DropdownSimple initialItems={items} isDisabled={isDisabled} toggleContent="Dropdown" />
32
+ </FlexItem>
33
+ <FlexItem>
34
+ <DropdownSimple
35
+ toggleVariant="plainText"
36
+ initialItems={items}
37
+ isDisabled={isDisabled}
38
+ toggleContent="Dropdown with plainText styling"
39
+ />
40
+ </FlexItem>
41
+ <FlexItem>
42
+ <DropdownSimple
43
+ toggleVariant="plain"
44
+ initialItems={items}
45
+ isDisabled={isDisabled}
46
+ toggleContent={<EllipsisVIcon aria-hidden="true" />}
47
+ toggleAriaLabel="Plain dropdown toggle"
48
+ />
49
+ </FlexItem>
50
+ </Flex>
51
+ </React.Fragment>
52
+ );
53
+ };
@@ -0,0 +1,36 @@
1
+ ---
2
+ id: Dropdown
3
+ section: components
4
+ subsection: menus
5
+ template: true
6
+ beta: true
7
+ propComponents: ['DropdownSimple', 'DropdownSimpleItem']
8
+ ---
9
+
10
+ Note: Templates live in their own package at [@patternfly/react-templates](https://www.npmjs.com/package/@patternfly/react-templates)!
11
+
12
+ For custom use cases, please see the dropdown component suite from [@patternfly/react-core](https://www.npmjs.com/package/@patternfly/react-core).
13
+
14
+ import {
15
+ Checkbox,
16
+ Divider,
17
+ Dropdown,
18
+ DropdownItem,
19
+ DropdownList,
20
+ DropdownItemProps,
21
+ Flex,
22
+ FlexItem,
23
+ MenuToggle,
24
+ MenuToggleElement,
25
+ OUIAProps
26
+ } from '@patternfly/react-core';
27
+ import { DropdownSimple, DropdownSimpleItem } from '@patternfly/react-templates';
28
+ import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
29
+
30
+ ## Examples
31
+
32
+ ### Simple
33
+
34
+ ```ts file="./DropdownSimpleExample.tsx"
35
+
36
+ ```
@@ -0,0 +1 @@
1
+ export * from './DropdownSimple';