@wordpress/components 28.4.0 → 28.5.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 +31 -1
- package/build/autocomplete/autocompleter-ui.js +2 -0
- package/build/autocomplete/autocompleter-ui.js.map +1 -1
- package/build/base-control/styles/base-control-styles.js +8 -8
- package/build/base-control/styles/base-control-styles.js.map +1 -1
- package/build/border-control/styles.js +18 -24
- package/build/border-control/styles.js.map +1 -1
- package/build/color-palette/index.js +1 -1
- package/build/color-palette/index.js.map +1 -1
- package/build/custom-select-control/index.js +37 -14
- package/build/custom-select-control/index.js.map +1 -1
- package/build/custom-select-control/types.js.map +1 -1
- package/build/custom-select-control-v2/styles.js +9 -9
- package/build/custom-select-control-v2/styles.js.map +1 -1
- package/build/date-time/index.js +0 -7
- package/build/date-time/index.js.map +1 -1
- package/build/date-time/time/index.js +66 -38
- package/build/date-time/time/index.js.map +1 -1
- package/build/date-time/time/styles.js +11 -11
- package/build/date-time/time/styles.js.map +1 -1
- package/build/date-time/{time-input → time/time-input}/index.js +7 -7
- package/build/date-time/time/time-input/index.js.map +1 -0
- package/build/dropdown-menu-v2/styles.js +14 -14
- package/build/dropdown-menu-v2/styles.js.map +1 -1
- package/build/form-toggle/index.js +24 -24
- package/build/form-toggle/index.js.map +1 -1
- package/build/guide/index.js +2 -0
- package/build/guide/index.js.map +1 -1
- package/build/heading/types.js.map +1 -1
- package/build/modal/index.js +18 -11
- package/build/modal/index.js.map +1 -1
- package/build/query-controls/index.js +1 -1
- package/build/query-controls/index.js.map +1 -1
- package/build/radio-control/index.js +35 -8
- package/build/radio-control/index.js.map +1 -1
- package/build/radio-control/types.js.map +1 -1
- package/build/select-control/index.js +20 -8
- package/build/select-control/index.js.map +1 -1
- package/build/select-control/types.js.map +1 -1
- package/build/text-control/index.js +1 -0
- package/build/text-control/index.js.map +1 -1
- package/build/toggle-control/index.js +27 -25
- package/build/toggle-control/index.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/component.js +6 -1
- package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option/component.js +6 -1
- package/build/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option-icon/component.js +14 -14
- package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
- package/build/tooltip/index.js +12 -1
- package/build/tooltip/index.js.map +1 -1
- package/build/tree-select/index.js +1 -2
- package/build/tree-select/index.js.map +1 -1
- package/build/utils/config-values.js +6 -0
- package/build/utils/config-values.js.map +1 -1
- package/build-module/autocomplete/autocompleter-ui.js +2 -0
- package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
- package/build-module/base-control/styles/base-control-styles.js +8 -8
- package/build-module/base-control/styles/base-control-styles.js.map +1 -1
- package/build-module/border-control/styles.js +13 -23
- package/build-module/border-control/styles.js.map +1 -1
- package/build-module/color-palette/index.js +1 -1
- package/build-module/color-palette/index.js.map +1 -1
- package/build-module/custom-select-control/index.js +38 -14
- package/build-module/custom-select-control/index.js.map +1 -1
- package/build-module/custom-select-control/types.js.map +1 -1
- package/build-module/custom-select-control-v2/styles.js +9 -9
- package/build-module/custom-select-control-v2/styles.js.map +1 -1
- package/build-module/date-time/index.js +1 -2
- package/build-module/date-time/index.js.map +1 -1
- package/build-module/date-time/time/index.js +66 -38
- package/build-module/date-time/time/index.js.map +1 -1
- package/build-module/date-time/time/styles.js +11 -11
- package/build-module/date-time/time/styles.js.map +1 -1
- package/build-module/date-time/{time-input → time/time-input}/index.js +7 -7
- package/build-module/date-time/time/time-input/index.js.map +1 -0
- package/build-module/dropdown-menu-v2/styles.js +14 -14
- package/build-module/dropdown-menu-v2/styles.js.map +1 -1
- package/build-module/form-toggle/index.js +23 -22
- package/build-module/form-toggle/index.js.map +1 -1
- package/build-module/guide/index.js +2 -0
- package/build-module/guide/index.js.map +1 -1
- package/build-module/heading/types.js.map +1 -1
- package/build-module/modal/index.js +17 -11
- package/build-module/modal/index.js.map +1 -1
- package/build-module/query-controls/index.js +1 -1
- package/build-module/query-controls/index.js.map +1 -1
- package/build-module/radio-control/index.js +36 -10
- package/build-module/radio-control/index.js.map +1 -1
- package/build-module/radio-control/types.js.map +1 -1
- package/build-module/select-control/index.js +20 -8
- package/build-module/select-control/index.js.map +1 -1
- package/build-module/select-control/types.js.map +1 -1
- package/build-module/text-control/index.js +1 -0
- package/build-module/text-control/index.js.map +1 -1
- package/build-module/toggle-control/index.js +26 -24
- package/build-module/toggle-control/index.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/component.js +6 -1
- package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option/component.js +6 -1
- package/build-module/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +14 -14
- package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
- package/build-module/tooltip/index.js +13 -2
- package/build-module/tooltip/index.js.map +1 -1
- package/build-module/tree-select/index.js +1 -2
- package/build-module/tree-select/index.js.map +1 -1
- package/build-module/utils/config-values.js +6 -0
- package/build-module/utils/config-values.js.map +1 -1
- package/build-style/style-rtl.css +60 -24
- package/build-style/style.css +60 -24
- package/build-types/autocomplete/autocompleter-ui.d.ts.map +1 -1
- package/build-types/border-control/styles.d.ts.map +1 -1
- package/build-types/button/stories/e2e/index.story.d.ts.map +1 -1
- package/build-types/color-palette/index.d.ts.map +1 -1
- package/build-types/color-palette/styles.d.ts +2 -2
- package/build-types/color-picker/styles.d.ts +3 -1
- package/build-types/color-picker/styles.d.ts.map +1 -1
- package/build-types/custom-select-control/index.d.ts +2 -2
- package/build-types/custom-select-control/index.d.ts.map +1 -1
- package/build-types/custom-select-control/stories/index.story.d.ts +3 -3
- package/build-types/custom-select-control/stories/index.story.d.ts.map +1 -1
- package/build-types/custom-select-control/types.d.ts +7 -7
- package/build-types/custom-select-control/types.d.ts.map +1 -1
- package/build-types/custom-select-control-v2/styles.d.ts +16 -28
- package/build-types/custom-select-control-v2/styles.d.ts.map +1 -1
- package/build-types/date-time/date/styles.d.ts +2 -2
- package/build-types/date-time/index.d.ts +1 -2
- package/build-types/date-time/index.d.ts.map +1 -1
- package/build-types/date-time/stories/time.story.d.ts +5 -0
- package/build-types/date-time/stories/time.story.d.ts.map +1 -1
- package/build-types/date-time/time/index.d.ts +3 -0
- package/build-types/date-time/time/index.d.ts.map +1 -1
- package/build-types/date-time/time/styles.d.ts.map +1 -1
- package/build-types/date-time/{time-input → time/time-input}/index.d.ts +1 -1
- package/build-types/date-time/time/time-input/index.d.ts.map +1 -0
- package/build-types/date-time/time/time-input/test/index.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2/styles.d.ts +24 -42
- package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -1
- package/build-types/form-toggle/index.d.ts +2 -5
- package/build-types/form-toggle/index.d.ts.map +1 -1
- package/build-types/guide/index.d.ts.map +1 -1
- package/build-types/heading/component.d.ts +1 -1
- package/build-types/heading/types.d.ts +1 -1
- package/build-types/heading/types.d.ts.map +1 -1
- package/build-types/modal/index.d.ts.map +1 -1
- package/build-types/navigation/styles/navigation-styles.d.ts +2 -2
- package/build-types/palette-edit/styles.d.ts +2 -2
- package/build-types/query-controls/index.d.ts.map +1 -1
- package/build-types/radio-control/index.d.ts.map +1 -1
- package/build-types/radio-control/stories/index.story.d.ts +1 -0
- package/build-types/radio-control/stories/index.story.d.ts.map +1 -1
- package/build-types/radio-control/test/index.d.ts +2 -0
- package/build-types/radio-control/test/index.d.ts.map +1 -0
- package/build-types/radio-control/types.d.ts +4 -0
- package/build-types/radio-control/types.d.ts.map +1 -1
- package/build-types/select-control/index.d.ts +4 -1
- package/build-types/select-control/index.d.ts.map +1 -1
- package/build-types/select-control/stories/index.story.d.ts +9 -3
- package/build-types/select-control/stories/index.story.d.ts.map +1 -1
- package/build-types/select-control/types.d.ts +27 -27
- package/build-types/select-control/types.d.ts.map +1 -1
- package/build-types/tabs/styles.d.ts +8 -14
- package/build-types/tabs/styles.d.ts.map +1 -1
- package/build-types/text-control/index.d.ts +1 -0
- package/build-types/text-control/index.d.ts.map +1 -1
- package/build-types/toggle-control/index.d.ts +3 -9
- package/build-types/toggle-control/index.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/component.d.ts +6 -1
- package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +6 -1
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +14 -14
- package/build-types/tooltip/index.d.ts.map +1 -1
- package/build-types/tooltip/test/utils/index.d.ts +1 -5
- package/build-types/tooltip/test/utils/index.d.ts.map +1 -1
- package/build-types/tree-select/index.d.ts +1 -1
- package/build-types/tree-select/index.d.ts.map +1 -1
- package/build-types/utils/config-values.d.ts +6 -0
- package/package.json +20 -20
- package/src/alignment-matrix-control/test/index.tsx +1 -3
- package/src/autocomplete/autocompleter-ui.tsx +2 -0
- package/src/autocomplete/style.scss +0 -6
- package/src/base-control/styles/base-control-styles.ts +1 -1
- package/src/border-control/styles.ts +0 -5
- package/src/button/stories/e2e/index.story.tsx +103 -21
- package/src/button/style.scss +49 -21
- package/src/button/test/index.tsx +18 -40
- package/src/circular-option-picker/test/index.tsx +1 -4
- package/src/color-palette/index.tsx +22 -20
- package/src/composite/legacy/test/index.tsx +2 -18
- package/src/custom-select-control/index.tsx +55 -25
- package/src/custom-select-control/test/index.tsx +47 -30
- package/src/custom-select-control/types.ts +7 -7
- package/src/custom-select-control-v2/styles.ts +7 -6
- package/src/custom-select-control-v2/test/index.tsx +15 -19
- package/src/date-time/index.ts +1 -2
- package/src/date-time/stories/time.story.tsx +17 -0
- package/src/date-time/time/index.tsx +46 -16
- package/src/date-time/time/styles.ts +1 -0
- package/src/date-time/{time-input → time/time-input}/index.tsx +9 -9
- package/src/dropdown-menu-v2/styles.ts +18 -17
- package/src/dropdown-menu-v2/test/index.tsx +1 -4
- package/src/font-size-picker/test/index.tsx +50 -43
- package/src/form-toggle/index.tsx +23 -21
- package/src/guide/index.tsx +2 -0
- package/src/heading/types.ts +1 -4
- package/src/modal/index.tsx +21 -20
- package/src/placeholder/style.scss +11 -2
- package/src/query-controls/index.tsx +5 -1
- package/src/radio-control/index.tsx +48 -7
- package/src/radio-control/stories/index.story.tsx +23 -0
- package/src/radio-control/style.scss +26 -2
- package/src/radio-control/test/index.tsx +274 -0
- package/src/radio-control/types.ts +4 -0
- package/src/select-control/README.md +8 -1
- package/src/select-control/index.tsx +33 -22
- package/src/select-control/test/select-control.tsx +148 -4
- package/src/select-control/types.ts +70 -65
- package/src/tab-panel/test/index.tsx +1 -8
- package/src/tabs/test/index.tsx +68 -84
- package/src/text-control/README.md +1 -0
- package/src/text-control/index.tsx +1 -0
- package/src/text-control/style.scss +5 -0
- package/src/toggle-control/README.md +9 -0
- package/src/toggle-control/index.tsx +25 -22
- package/src/toggle-control/style.scss +2 -1
- package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +6 -6
- package/src/toggle-group-control/test/index.tsx +0 -6
- package/src/toggle-group-control/toggle-group-control/README.md +13 -1
- package/src/toggle-group-control/toggle-group-control/component.tsx +6 -1
- package/src/toggle-group-control/toggle-group-control-option/README.md +6 -1
- package/src/toggle-group-control/toggle-group-control-option/component.tsx +6 -1
- package/src/toggle-group-control/toggle-group-control-option-icon/README.md +1 -1
- package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +14 -14
- package/src/tooltip/index.tsx +15 -2
- package/src/tooltip/test/index.tsx +0 -5
- package/src/tooltip/test/utils/index.tsx +5 -5
- package/src/tree-select/index.tsx +1 -2
- package/src/utils/config-values.js +6 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/build/date-time/time-input/index.js.map +0 -1
- package/build-module/date-time/time-input/index.js.map +0 -1
- package/build-types/date-time/stories/time-input.story.d.ts +0 -12
- package/build-types/date-time/stories/time-input.story.d.ts.map +0 -1
- package/build-types/date-time/time-input/index.d.ts.map +0 -1
- package/build-types/date-time/time-input/test/index.d.ts.map +0 -1
- package/src/date-time/stories/time-input.story.tsx +0 -36
- /package/build-types/date-time/{time-input → time/time-input}/test/index.d.ts +0 -0
- /package/src/date-time/{time-input → time/time-input}/test/index.tsx +0 -0
|
@@ -17,8 +17,8 @@ describe( 'SelectControl', () => {
|
|
|
17
17
|
expect( screen.queryByRole( 'combobox' ) ).not.toBeInTheDocument();
|
|
18
18
|
} );
|
|
19
19
|
|
|
20
|
-
it( 'should
|
|
21
|
-
const user =
|
|
20
|
+
it( 'should render its children', async () => {
|
|
21
|
+
const user = userEvent.setup();
|
|
22
22
|
const handleChangeMock = jest.fn();
|
|
23
23
|
|
|
24
24
|
render(
|
|
@@ -46,8 +46,8 @@ describe( 'SelectControl', () => {
|
|
|
46
46
|
);
|
|
47
47
|
} );
|
|
48
48
|
|
|
49
|
-
it( 'should
|
|
50
|
-
const user =
|
|
49
|
+
it( 'should render its options', async () => {
|
|
50
|
+
const user = userEvent.setup();
|
|
51
51
|
const handleChangeMock = jest.fn();
|
|
52
52
|
|
|
53
53
|
render(
|
|
@@ -81,4 +81,148 @@ describe( 'SelectControl', () => {
|
|
|
81
81
|
expect.anything()
|
|
82
82
|
);
|
|
83
83
|
} );
|
|
84
|
+
|
|
85
|
+
it( 'should pass through options props', () => {
|
|
86
|
+
render(
|
|
87
|
+
<SelectControl
|
|
88
|
+
label="Select"
|
|
89
|
+
options={ [
|
|
90
|
+
{
|
|
91
|
+
value: 'value',
|
|
92
|
+
label: 'label',
|
|
93
|
+
'aria-label': 'Aria label',
|
|
94
|
+
},
|
|
95
|
+
] }
|
|
96
|
+
/>
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
expect(
|
|
100
|
+
screen.getByRole( 'option', { name: 'Aria label' } )
|
|
101
|
+
).toBeInTheDocument();
|
|
102
|
+
} );
|
|
103
|
+
|
|
104
|
+
/* eslint-disable jest/expect-expect */
|
|
105
|
+
describe( 'static typing', () => {
|
|
106
|
+
describe( 'single', () => {
|
|
107
|
+
it( 'should infer the value type from available `options`, but not the `value` or `onChange` prop', () => {
|
|
108
|
+
const onChange: ( value: 'foo' | 'bar' ) => void = () => {};
|
|
109
|
+
|
|
110
|
+
<SelectControl
|
|
111
|
+
value="narrow"
|
|
112
|
+
options={ [
|
|
113
|
+
{
|
|
114
|
+
value: 'narrow',
|
|
115
|
+
label: 'Narrow',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
value: 'value',
|
|
119
|
+
label: 'Value',
|
|
120
|
+
},
|
|
121
|
+
] }
|
|
122
|
+
// @ts-expect-error onChange type is not compatible with inferred value type
|
|
123
|
+
onChange={ onChange }
|
|
124
|
+
/>;
|
|
125
|
+
|
|
126
|
+
<SelectControl
|
|
127
|
+
// @ts-expect-error "string" is not "narrow" or "value"
|
|
128
|
+
value="string"
|
|
129
|
+
options={ [
|
|
130
|
+
{
|
|
131
|
+
value: 'narrow',
|
|
132
|
+
label: 'Narrow',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
value: 'value',
|
|
136
|
+
label: 'Value',
|
|
137
|
+
},
|
|
138
|
+
] }
|
|
139
|
+
// @ts-expect-error "string" is not "narrow" or "value"
|
|
140
|
+
onChange={ ( value ) => value === 'string' }
|
|
141
|
+
/>;
|
|
142
|
+
} );
|
|
143
|
+
|
|
144
|
+
it( 'should accept an explicit type argument', () => {
|
|
145
|
+
<SelectControl< 'narrow' | 'value' >
|
|
146
|
+
// @ts-expect-error "string" is not "narrow" or "value"
|
|
147
|
+
value="string"
|
|
148
|
+
options={ [
|
|
149
|
+
{
|
|
150
|
+
value: 'narrow',
|
|
151
|
+
label: 'Narrow',
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
// @ts-expect-error "string" is not "narrow" or "value"
|
|
155
|
+
value: 'string',
|
|
156
|
+
label: 'String',
|
|
157
|
+
},
|
|
158
|
+
] }
|
|
159
|
+
/>;
|
|
160
|
+
} );
|
|
161
|
+
} );
|
|
162
|
+
|
|
163
|
+
describe( 'multiple', () => {
|
|
164
|
+
it( 'should infer the value type from available `options`, but not the `value` or `onChange` prop', () => {
|
|
165
|
+
const onChange: (
|
|
166
|
+
value: ( 'foo' | 'bar' )[]
|
|
167
|
+
) => void = () => {};
|
|
168
|
+
|
|
169
|
+
<SelectControl
|
|
170
|
+
multiple
|
|
171
|
+
value={ [ 'narrow' ] }
|
|
172
|
+
options={ [
|
|
173
|
+
{
|
|
174
|
+
value: 'narrow',
|
|
175
|
+
label: 'Narrow',
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
value: 'value',
|
|
179
|
+
label: 'Value',
|
|
180
|
+
},
|
|
181
|
+
] }
|
|
182
|
+
// @ts-expect-error onChange type is not compatible with inferred value type
|
|
183
|
+
onChange={ onChange }
|
|
184
|
+
/>;
|
|
185
|
+
|
|
186
|
+
<SelectControl
|
|
187
|
+
multiple
|
|
188
|
+
// @ts-expect-error "string" is not "narrow" or "value"
|
|
189
|
+
value={ [ 'string' ] }
|
|
190
|
+
options={ [
|
|
191
|
+
{
|
|
192
|
+
value: 'narrow',
|
|
193
|
+
label: 'Narrow',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
value: 'value',
|
|
197
|
+
label: 'Value',
|
|
198
|
+
},
|
|
199
|
+
] }
|
|
200
|
+
onChange={ ( value ) =>
|
|
201
|
+
// @ts-expect-error "string" is not "narrow" or "value"
|
|
202
|
+
value.forEach( ( v ) => v === 'string' )
|
|
203
|
+
}
|
|
204
|
+
/>;
|
|
205
|
+
} );
|
|
206
|
+
|
|
207
|
+
it( 'should accept an explicit type argument', () => {
|
|
208
|
+
<SelectControl< 'narrow' | 'value' >
|
|
209
|
+
multiple
|
|
210
|
+
// @ts-expect-error "string" is not "narrow" or "value"
|
|
211
|
+
value={ [ 'string' ] }
|
|
212
|
+
options={ [
|
|
213
|
+
{
|
|
214
|
+
value: 'narrow',
|
|
215
|
+
label: 'Narrow',
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
// @ts-expect-error "string" is not "narrow" or "value"
|
|
219
|
+
value: 'string',
|
|
220
|
+
label: 'String',
|
|
221
|
+
},
|
|
222
|
+
] }
|
|
223
|
+
/>;
|
|
224
|
+
} );
|
|
225
|
+
} );
|
|
226
|
+
} );
|
|
227
|
+
/* eslint-enable jest/expect-expect */
|
|
84
228
|
} );
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import type { ChangeEvent,
|
|
4
|
+
import type { ChangeEvent, ReactNode } from 'react';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Internal dependencies
|
|
@@ -9,7 +9,7 @@ import type { ChangeEvent, FocusEvent, ReactNode } from 'react';
|
|
|
9
9
|
import type { InputBaseProps } from '../input-control/types';
|
|
10
10
|
import type { BaseControlProps } from '../base-control/types';
|
|
11
11
|
|
|
12
|
-
type SelectControlBaseProps = Pick<
|
|
12
|
+
type SelectControlBaseProps< V extends string > = Pick<
|
|
13
13
|
InputBaseProps,
|
|
14
14
|
| '__next36pxDefaultSize'
|
|
15
15
|
| '__next40pxDefaultSize'
|
|
@@ -22,9 +22,12 @@ type SelectControlBaseProps = Pick<
|
|
|
22
22
|
| 'suffix'
|
|
23
23
|
> &
|
|
24
24
|
Pick< BaseControlProps, 'help' | '__nextHasNoMarginBottom' > & {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
/**
|
|
26
|
+
* An array of option property objects to be rendered,
|
|
27
|
+
* each with a `label` and `value` property, as well as any other
|
|
28
|
+
* `<option>` attributes.
|
|
29
|
+
*/
|
|
30
|
+
options?: readonly ( {
|
|
28
31
|
/**
|
|
29
32
|
* The label to be shown to the user.
|
|
30
33
|
*/
|
|
@@ -33,21 +36,11 @@ type SelectControlBaseProps = Pick<
|
|
|
33
36
|
* The internal value used to choose the selected value.
|
|
34
37
|
* This is also the value passed to `onChange` when the option is selected.
|
|
35
38
|
*/
|
|
36
|
-
value:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
* @default false
|
|
42
|
-
*/
|
|
43
|
-
disabled?: boolean;
|
|
44
|
-
/**
|
|
45
|
-
* Whether or not the option should be hidden.
|
|
46
|
-
*
|
|
47
|
-
* @default false
|
|
48
|
-
*/
|
|
49
|
-
hidden?: boolean;
|
|
50
|
-
}[];
|
|
39
|
+
value: V;
|
|
40
|
+
} & Omit<
|
|
41
|
+
React.OptionHTMLAttributes< HTMLOptionElement >,
|
|
42
|
+
'label' | 'value'
|
|
43
|
+
> )[];
|
|
51
44
|
/**
|
|
52
45
|
* As an alternative to the `options` prop, `optgroup`s and `options` can be
|
|
53
46
|
* passed in as `children` for more customizability.
|
|
@@ -61,50 +54,62 @@ type SelectControlBaseProps = Pick<
|
|
|
61
54
|
variant?: 'default' | 'minimal';
|
|
62
55
|
};
|
|
63
56
|
|
|
64
|
-
export type SelectControlSingleSelectionProps =
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
57
|
+
export type SelectControlSingleSelectionProps< V extends string = string > =
|
|
58
|
+
SelectControlBaseProps< V > & {
|
|
59
|
+
/**
|
|
60
|
+
* If this property is added, multiple values can be selected. The `value` passed should be an array.
|
|
61
|
+
*
|
|
62
|
+
* In most cases, it is preferable to use the `FormTokenField` or `CheckboxControl` components instead.
|
|
63
|
+
*
|
|
64
|
+
* @default false
|
|
65
|
+
*/
|
|
66
|
+
multiple?: false;
|
|
67
|
+
/**
|
|
68
|
+
* The value of the selected option.
|
|
69
|
+
*
|
|
70
|
+
* If `multiple` is true, the `value` should be an array with the values of the selected options.
|
|
71
|
+
*/
|
|
72
|
+
value?: NoInfer< V >;
|
|
73
|
+
/**
|
|
74
|
+
* A function that receives the value of the new option that is being selected as input.
|
|
75
|
+
*
|
|
76
|
+
* If `multiple` is `true`, the value received is an array of the selected value.
|
|
77
|
+
* Otherwise, the value received is a single value with the new selected value.
|
|
78
|
+
*/
|
|
79
|
+
onChange?: (
|
|
80
|
+
value: NoInfer< V >,
|
|
81
|
+
extra?: { event?: ChangeEvent< HTMLSelectElement > }
|
|
82
|
+
) => void;
|
|
83
|
+
};
|
|
85
84
|
|
|
86
|
-
export type SelectControlMultipleSelectionProps
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
85
|
+
export type SelectControlMultipleSelectionProps< V extends string > =
|
|
86
|
+
SelectControlBaseProps< V > & {
|
|
87
|
+
/**
|
|
88
|
+
* If this property is added, multiple values can be selected. The `value` passed should be an array.
|
|
89
|
+
*
|
|
90
|
+
* In most cases, it is preferable to use the `FormTokenField` or `CheckboxControl` components instead.
|
|
91
|
+
*
|
|
92
|
+
* @default false
|
|
93
|
+
*/
|
|
94
|
+
multiple: true;
|
|
95
|
+
/**
|
|
96
|
+
* The value of the selected option.
|
|
97
|
+
*
|
|
98
|
+
* If `multiple` is true, the `value` should be an array with the values of the selected options.
|
|
99
|
+
*/
|
|
100
|
+
value?: NoInfer< V >[];
|
|
101
|
+
/**
|
|
102
|
+
* A function that receives the value of the new option that is being selected as input.
|
|
103
|
+
*
|
|
104
|
+
* If `multiple` is `true`, the value received is an array of the selected value.
|
|
105
|
+
* Otherwise, the value received is a single value with the new selected value.
|
|
106
|
+
*/
|
|
107
|
+
onChange?: (
|
|
108
|
+
value: NoInfer< V >[],
|
|
109
|
+
extra?: { event?: ChangeEvent< HTMLSelectElement > }
|
|
110
|
+
) => void;
|
|
111
|
+
};
|
|
107
112
|
|
|
108
|
-
export type SelectControlProps =
|
|
109
|
-
| SelectControlSingleSelectionProps
|
|
110
|
-
| SelectControlMultipleSelectionProps
|
|
113
|
+
export type SelectControlProps< V extends string = string > =
|
|
114
|
+
| SelectControlSingleSelectionProps< V >
|
|
115
|
+
| SelectControlMultipleSelectionProps< V >;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { render, screen, waitFor } from '@testing-library/react';
|
|
5
|
-
import { press, hover, click
|
|
5
|
+
import { press, hover, click } from '@ariakit/test';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* WordPress dependencies
|
|
@@ -155,7 +155,6 @@ describe.each( [
|
|
|
155
155
|
// Tab to focus the tablist. Make sure alpha is focused, and that the
|
|
156
156
|
// corresponding tooltip is shown.
|
|
157
157
|
expect( screen.queryByText( 'Alpha' ) ).not.toBeInTheDocument();
|
|
158
|
-
await sleep();
|
|
159
158
|
await press.Tab();
|
|
160
159
|
expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
|
|
161
160
|
expect( screen.getByText( 'Alpha' ) ).toBeInTheDocument();
|
|
@@ -627,7 +626,6 @@ describe.each( [
|
|
|
627
626
|
// Tab to focus the tablist. Make sure alpha is focused.
|
|
628
627
|
expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
|
|
629
628
|
expect( await getSelectedTab() ).not.toHaveFocus();
|
|
630
|
-
await sleep();
|
|
631
629
|
await press.Tab();
|
|
632
630
|
expect( await getSelectedTab() ).toHaveFocus();
|
|
633
631
|
|
|
@@ -665,7 +663,6 @@ describe.each( [
|
|
|
665
663
|
// Tab to focus the tablist. Make sure Alpha is focused.
|
|
666
664
|
expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
|
|
667
665
|
expect( await getSelectedTab() ).not.toHaveFocus();
|
|
668
|
-
await sleep();
|
|
669
666
|
await press.Tab();
|
|
670
667
|
expect( await getSelectedTab() ).toHaveFocus();
|
|
671
668
|
|
|
@@ -703,7 +700,6 @@ describe.each( [
|
|
|
703
700
|
// Tab to focus the tablist. Make sure alpha is focused.
|
|
704
701
|
expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
|
|
705
702
|
expect( await getSelectedTab() ).not.toHaveFocus();
|
|
706
|
-
await sleep();
|
|
707
703
|
await press.Tab();
|
|
708
704
|
expect( await getSelectedTab() ).toHaveFocus();
|
|
709
705
|
|
|
@@ -799,7 +795,6 @@ describe.each( [
|
|
|
799
795
|
// Tab to focus the tablist. Make sure Alpha is focused.
|
|
800
796
|
expect( await getSelectedTab() ).toHaveTextContent( 'Alpha' );
|
|
801
797
|
expect( await getSelectedTab() ).not.toHaveFocus();
|
|
802
|
-
await sleep();
|
|
803
798
|
await press.Tab();
|
|
804
799
|
expect( await getSelectedTab() ).toHaveFocus();
|
|
805
800
|
expect( mockOnSelect ).toHaveBeenCalledTimes( 1 );
|
|
@@ -841,7 +836,6 @@ describe.each( [
|
|
|
841
836
|
|
|
842
837
|
// Tab should initially focus the first tab in the tablist, which
|
|
843
838
|
// is Alpha.
|
|
844
|
-
await sleep();
|
|
845
839
|
await press.Tab();
|
|
846
840
|
expect(
|
|
847
841
|
await screen.findByRole( 'tab', { name: 'Alpha' } )
|
|
@@ -849,7 +843,6 @@ describe.each( [
|
|
|
849
843
|
|
|
850
844
|
// Because all other tabs should have `tabindex=-1`, pressing Tab
|
|
851
845
|
// should NOT move the focus to the next tab, which is Beta.
|
|
852
|
-
await sleep();
|
|
853
846
|
await press.Tab();
|
|
854
847
|
expect(
|
|
855
848
|
await screen.findByRole( 'tab', { name: 'Beta' } )
|