@wordpress/components 30.6.1-next.ff1cebbba.0 → 30.7.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 +26 -1
- package/build/color-palette/styles.js +2 -12
- package/build/color-palette/styles.js.map +2 -2
- package/build/combobox-control/index.js +1 -2
- package/build/combobox-control/index.js.map +2 -2
- package/build/custom-select-control-v2/custom-select.js +2 -2
- package/build/custom-select-control-v2/custom-select.js.map +2 -2
- package/build/date-time/date/styles.js +9 -9
- package/build/date-time/date/styles.js.map +2 -2
- package/build/focal-point-picker/index.js +21 -10
- package/build/focal-point-picker/index.js.map +3 -3
- package/build/focal-point-picker/styles/focal-point-picker-style.js +20 -11
- package/build/focal-point-picker/styles/focal-point-picker-style.js.map +2 -2
- package/build/font-size-picker/font-size-picker-select.js +20 -19
- package/build/font-size-picker/font-size-picker-select.js.map +3 -3
- package/build/font-size-picker/font-size-picker-toggle-group.js +27 -3
- package/build/font-size-picker/font-size-picker-toggle-group.js.map +2 -2
- package/build/font-size-picker/index.js +23 -11
- package/build/font-size-picker/index.js.map +2 -2
- package/build/font-size-picker/styles.js +30 -13
- package/build/font-size-picker/styles.js.map +3 -3
- package/build/font-size-picker/utils.js +11 -0
- package/build/font-size-picker/utils.js.map +2 -2
- package/build/palette-edit/styles.js +9 -9
- package/build/palette-edit/styles.js.map +2 -2
- package/build/popover/index.js +13 -2
- package/build/popover/index.js.map +2 -2
- package/build/tabs/styles.js +5 -5
- package/build/tabs/styles.js.map +1 -1
- package/build/tools-panel/styles.js +14 -22
- package/build/tools-panel/styles.js.map +2 -2
- package/build/utils/base-label.js +12 -12
- package/build/utils/base-label.js.map +3 -3
- package/build/utils/config-values.js +2 -0
- package/build/utils/config-values.js.map +2 -2
- package/build-module/color-palette/styles.js +2 -12
- package/build-module/color-palette/styles.js.map +2 -2
- package/build-module/combobox-control/index.js +1 -2
- package/build-module/combobox-control/index.js.map +2 -2
- package/build-module/custom-select-control-v2/custom-select.js +1 -1
- package/build-module/custom-select-control-v2/custom-select.js.map +1 -1
- package/build-module/date-time/date/styles.js +9 -9
- package/build-module/date-time/date/styles.js.map +2 -2
- package/build-module/focal-point-picker/index.js +23 -12
- package/build-module/focal-point-picker/index.js.map +2 -2
- package/build-module/focal-point-picker/styles/focal-point-picker-style.js +20 -12
- package/build-module/focal-point-picker/styles/focal-point-picker-style.js.map +2 -2
- package/build-module/font-size-picker/font-size-picker-select.js +21 -10
- package/build-module/font-size-picker/font-size-picker-select.js.map +2 -2
- package/build-module/font-size-picker/font-size-picker-toggle-group.js +27 -3
- package/build-module/font-size-picker/font-size-picker-toggle-group.js.map +2 -2
- package/build-module/font-size-picker/index.js +23 -11
- package/build-module/font-size-picker/index.js.map +2 -2
- package/build-module/font-size-picker/styles.js +28 -12
- package/build-module/font-size-picker/styles.js.map +2 -2
- package/build-module/font-size-picker/utils.js +10 -0
- package/build-module/font-size-picker/utils.js.map +2 -2
- package/build-module/palette-edit/styles.js +9 -9
- package/build-module/palette-edit/styles.js.map +2 -2
- package/build-module/popover/index.js +13 -2
- package/build-module/popover/index.js.map +2 -2
- package/build-module/tabs/styles.js +5 -5
- package/build-module/tabs/styles.js.map +1 -1
- package/build-module/tools-panel/styles.js +14 -22
- package/build-module/tools-panel/styles.js.map +2 -2
- package/build-module/utils/base-label.js +2 -12
- package/build-module/utils/base-label.js.map +2 -2
- package/build-module/utils/config-values.js +2 -0
- package/build-module/utils/config-values.js.map +2 -2
- package/build-style/style-rtl.css +11 -5
- package/build-style/style.css +11 -5
- package/build-types/card/card-body/component.d.ts.map +1 -1
- package/build-types/card/card-body/hook.d.ts.map +1 -1
- package/build-types/card/card-footer/component.d.ts +1 -3
- package/build-types/card/card-footer/component.d.ts.map +1 -1
- package/build-types/card/card-footer/hook.d.ts +6 -0
- package/build-types/card/card-footer/hook.d.ts.map +1 -1
- package/build-types/card/card-header/component.d.ts +1 -1
- package/build-types/card/card-header/component.d.ts.map +1 -1
- package/build-types/card/card-header/hook.d.ts +7 -0
- package/build-types/card/card-header/hook.d.ts.map +1 -1
- package/build-types/card/card-media/hook.d.ts.map +1 -1
- package/build-types/card/types.d.ts +3 -8
- package/build-types/card/types.d.ts.map +1 -1
- package/build-types/color-palette/styles.d.ts.map +1 -1
- package/build-types/combobox-control/index.d.ts.map +1 -1
- package/build-types/combobox-control/stories/index.story.d.ts.map +1 -1
- package/build-types/date-time/date/styles.d.ts.map +1 -1
- package/build-types/focal-point-picker/index.d.ts +1 -1
- package/build-types/focal-point-picker/index.d.ts.map +1 -1
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +253 -0
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts.map +1 -1
- package/build-types/font-size-picker/font-size-picker-select.d.ts +3 -0
- package/build-types/font-size-picker/font-size-picker-select.d.ts.map +1 -1
- package/build-types/font-size-picker/font-size-picker-toggle-group.d.ts.map +1 -1
- package/build-types/font-size-picker/index.d.ts.map +1 -1
- package/build-types/font-size-picker/styles.d.ts +3 -0
- package/build-types/font-size-picker/styles.d.ts.map +1 -1
- package/build-types/font-size-picker/test/font-size-picker-select.d.ts +2 -0
- package/build-types/font-size-picker/test/font-size-picker-select.d.ts.map +1 -0
- package/build-types/font-size-picker/test/font-size-picker-toggle-group.d.ts +2 -0
- package/build-types/font-size-picker/test/font-size-picker-toggle-group.d.ts.map +1 -0
- package/build-types/font-size-picker/types.d.ts +18 -4
- package/build-types/font-size-picker/types.d.ts.map +1 -1
- package/build-types/font-size-picker/utils.d.ts +10 -1
- package/build-types/font-size-picker/utils.d.ts.map +1 -1
- package/build-types/popover/index.d.ts.map +1 -1
- package/build-types/utils/base-label.d.ts.map +1 -1
- package/build-types/utils/config-values.d.ts +1 -0
- package/package.json +20 -20
- package/src/badge/styles.scss +1 -0
- package/src/button/style.scss +4 -1
- package/src/card/types.ts +3 -9
- package/src/color-palette/styles.ts +2 -1
- package/src/combobox-control/index.tsx +1 -4
- package/src/combobox-control/stories/index.story.tsx +0 -1
- package/src/combobox-control/test/index.tsx +20 -7
- package/src/custom-select-control-v2/custom-select.tsx +1 -1
- package/src/date-time/date/styles.ts +1 -0
- package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -4
- package/src/dropdown-menu/style.scss +1 -0
- package/src/focal-point-picker/index.tsx +26 -16
- package/src/focal-point-picker/styles/focal-point-picker-style.ts +11 -1
- package/src/font-size-picker/README.md +10 -0
- package/src/font-size-picker/font-size-picker-select.tsx +44 -11
- package/src/font-size-picker/font-size-picker-toggle-group.tsx +58 -4
- package/src/font-size-picker/index.tsx +44 -19
- package/src/font-size-picker/styles.ts +9 -0
- package/src/font-size-picker/test/font-size-picker-select.tsx +221 -0
- package/src/font-size-picker/test/font-size-picker-toggle-group.tsx +275 -0
- package/src/font-size-picker/test/index.tsx +460 -2
- package/src/font-size-picker/types.ts +24 -4
- package/src/font-size-picker/utils.ts +23 -1
- package/src/menu-group/style.scss +1 -1
- package/src/menu-item/style.scss +1 -0
- package/src/modal/style.scss +1 -1
- package/src/palette-edit/styles.ts +1 -1
- package/src/panel/style.scss +1 -1
- package/src/popover/index.tsx +23 -2
- package/src/tab-panel/style.scss +1 -1
- package/src/tabs/styles.ts +1 -1
- package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +4 -4
- package/src/tools-panel/styles.ts +2 -2
- package/src/utils/base-label.ts +6 -1
- package/src/utils/config-values.js +1 -0
- package/src/validated-form-controls/style.scss +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { screen } from '@testing-library/react';
|
|
5
|
+
import userEvent from '@testing-library/user-event';
|
|
6
|
+
import { render } from '@ariakit/test/react';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Internal dependencies
|
|
10
|
+
*/
|
|
11
|
+
import FontSizePickerToggleGroup from '../font-size-picker-toggle-group';
|
|
12
|
+
import type { FontSize } from '../types';
|
|
13
|
+
|
|
14
|
+
describe( 'FontSizePickerToggleGroup', () => {
|
|
15
|
+
const fontSizes: FontSize[] = [
|
|
16
|
+
{
|
|
17
|
+
slug: 'small',
|
|
18
|
+
name: 'Small',
|
|
19
|
+
size: '12px',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
slug: 'medium',
|
|
23
|
+
name: 'Medium',
|
|
24
|
+
size: '16px',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
slug: 'large',
|
|
28
|
+
name: 'Large',
|
|
29
|
+
size: '20px',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
describe( 'valueMode prop', () => {
|
|
34
|
+
it( 'should find font size by size value when valueMode is literal', async () => {
|
|
35
|
+
const onChange = jest.fn();
|
|
36
|
+
await render(
|
|
37
|
+
<FontSizePickerToggleGroup
|
|
38
|
+
fontSizes={ fontSizes }
|
|
39
|
+
value="16px"
|
|
40
|
+
valueMode="literal"
|
|
41
|
+
onChange={ onChange }
|
|
42
|
+
__next40pxDefaultSize={ false }
|
|
43
|
+
size="default"
|
|
44
|
+
/>
|
|
45
|
+
);
|
|
46
|
+
// Should select the medium option (16px)
|
|
47
|
+
expect(
|
|
48
|
+
screen.getByRole( 'radio', { checked: true } )
|
|
49
|
+
).toHaveAccessibleName( 'Medium' );
|
|
50
|
+
} );
|
|
51
|
+
|
|
52
|
+
it( 'should find font size by slug when valueMode is slug', async () => {
|
|
53
|
+
const onChange = jest.fn();
|
|
54
|
+
await render(
|
|
55
|
+
<FontSizePickerToggleGroup
|
|
56
|
+
fontSizes={ fontSizes }
|
|
57
|
+
value="medium"
|
|
58
|
+
valueMode="slug"
|
|
59
|
+
onChange={ onChange }
|
|
60
|
+
__next40pxDefaultSize={ false }
|
|
61
|
+
size="default"
|
|
62
|
+
/>
|
|
63
|
+
);
|
|
64
|
+
// Should select the medium option
|
|
65
|
+
expect(
|
|
66
|
+
screen.getByRole( 'radio', { checked: true } )
|
|
67
|
+
).toHaveAccessibleName( 'Medium' );
|
|
68
|
+
} );
|
|
69
|
+
|
|
70
|
+
it( 'should handle undefined value', async () => {
|
|
71
|
+
const onChange = jest.fn();
|
|
72
|
+
await render(
|
|
73
|
+
<FontSizePickerToggleGroup
|
|
74
|
+
fontSizes={ fontSizes }
|
|
75
|
+
value={ undefined }
|
|
76
|
+
valueMode="literal"
|
|
77
|
+
onChange={ onChange }
|
|
78
|
+
__next40pxDefaultSize={ false }
|
|
79
|
+
size="default"
|
|
80
|
+
/>
|
|
81
|
+
);
|
|
82
|
+
// Should have no selection
|
|
83
|
+
expect(
|
|
84
|
+
screen.queryByRole( 'radio', { checked: true } )
|
|
85
|
+
).not.toBeInTheDocument();
|
|
86
|
+
} );
|
|
87
|
+
|
|
88
|
+
it( 'should handle empty string value', async () => {
|
|
89
|
+
const onChange = jest.fn();
|
|
90
|
+
await render(
|
|
91
|
+
<FontSizePickerToggleGroup
|
|
92
|
+
fontSizes={ fontSizes }
|
|
93
|
+
value=""
|
|
94
|
+
valueMode="literal"
|
|
95
|
+
onChange={ onChange }
|
|
96
|
+
__next40pxDefaultSize={ false }
|
|
97
|
+
size="default"
|
|
98
|
+
/>
|
|
99
|
+
);
|
|
100
|
+
// Should have no selection
|
|
101
|
+
expect(
|
|
102
|
+
screen.queryByRole( 'radio', { checked: true } )
|
|
103
|
+
).not.toBeInTheDocument();
|
|
104
|
+
} );
|
|
105
|
+
} );
|
|
106
|
+
|
|
107
|
+
describe( 'onChange callback', () => {
|
|
108
|
+
it( 'should call onChange with FontSize object as second parameter', async () => {
|
|
109
|
+
const user = userEvent.setup();
|
|
110
|
+
const onChange = jest.fn();
|
|
111
|
+
await render(
|
|
112
|
+
<FontSizePickerToggleGroup
|
|
113
|
+
fontSizes={ fontSizes }
|
|
114
|
+
onChange={ onChange }
|
|
115
|
+
__next40pxDefaultSize={ false }
|
|
116
|
+
size="default"
|
|
117
|
+
/>
|
|
118
|
+
);
|
|
119
|
+
await user.click( screen.getByRole( 'radio', { name: 'Small' } ) );
|
|
120
|
+
expect( onChange ).toHaveBeenCalledWith( '12px', fontSizes[ 0 ] );
|
|
121
|
+
} );
|
|
122
|
+
|
|
123
|
+
it( 'should call onChange with FontSize object when selecting a different option', async () => {
|
|
124
|
+
const user = userEvent.setup();
|
|
125
|
+
const onChange = jest.fn();
|
|
126
|
+
await render(
|
|
127
|
+
<FontSizePickerToggleGroup
|
|
128
|
+
fontSizes={ fontSizes }
|
|
129
|
+
value="medium"
|
|
130
|
+
onChange={ onChange }
|
|
131
|
+
__next40pxDefaultSize={ false }
|
|
132
|
+
size="default"
|
|
133
|
+
/>
|
|
134
|
+
);
|
|
135
|
+
// Click a different option
|
|
136
|
+
await user.click( screen.getByRole( 'radio', { name: 'Small' } ) );
|
|
137
|
+
expect( onChange ).toHaveBeenCalledWith( '12px', fontSizes[ 0 ] );
|
|
138
|
+
} );
|
|
139
|
+
} );
|
|
140
|
+
|
|
141
|
+
describe( 'edge cases', () => {
|
|
142
|
+
const fontSizesWithDuplicates: FontSize[] = [
|
|
143
|
+
{
|
|
144
|
+
slug: 'small-1',
|
|
145
|
+
name: 'Small 1',
|
|
146
|
+
size: '12px',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
slug: 'small-2',
|
|
150
|
+
name: 'Small 2',
|
|
151
|
+
size: '12px',
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
slug: 'medium',
|
|
155
|
+
name: 'Medium',
|
|
156
|
+
size: '16px',
|
|
157
|
+
},
|
|
158
|
+
];
|
|
159
|
+
|
|
160
|
+
it( 'should handle multiple font sizes with same value in literal mode', async () => {
|
|
161
|
+
const onChange = jest.fn();
|
|
162
|
+
await render(
|
|
163
|
+
<FontSizePickerToggleGroup
|
|
164
|
+
fontSizes={ fontSizesWithDuplicates }
|
|
165
|
+
value="12px"
|
|
166
|
+
valueMode="literal"
|
|
167
|
+
onChange={ onChange }
|
|
168
|
+
__next40pxDefaultSize={ false }
|
|
169
|
+
size="default"
|
|
170
|
+
/>
|
|
171
|
+
);
|
|
172
|
+
// Should have no selection when there are multiple matches
|
|
173
|
+
expect(
|
|
174
|
+
screen.queryByRole( 'radio', { checked: true } )
|
|
175
|
+
).not.toBeInTheDocument();
|
|
176
|
+
} );
|
|
177
|
+
|
|
178
|
+
it( 'should handle multiple font sizes with same value in slug mode', async () => {
|
|
179
|
+
const onChange = jest.fn();
|
|
180
|
+
await render(
|
|
181
|
+
<FontSizePickerToggleGroup
|
|
182
|
+
fontSizes={ fontSizesWithDuplicates }
|
|
183
|
+
value="small-1"
|
|
184
|
+
valueMode="slug"
|
|
185
|
+
onChange={ onChange }
|
|
186
|
+
__next40pxDefaultSize={ false }
|
|
187
|
+
size="default"
|
|
188
|
+
/>
|
|
189
|
+
);
|
|
190
|
+
// Should select the specific font size by slug
|
|
191
|
+
expect(
|
|
192
|
+
screen.getByRole( 'radio', { checked: true } )
|
|
193
|
+
).toHaveAccessibleName( 'Small 1' );
|
|
194
|
+
} );
|
|
195
|
+
} );
|
|
196
|
+
|
|
197
|
+
describe( 'heterogeneous font sizes', () => {
|
|
198
|
+
const heterogeneousFontSizes: FontSize[] = [
|
|
199
|
+
{
|
|
200
|
+
slug: 'small',
|
|
201
|
+
name: 'Small',
|
|
202
|
+
size: '12px',
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
slug: 'medium',
|
|
206
|
+
name: 'Medium',
|
|
207
|
+
size: '1em',
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
slug: 'large',
|
|
211
|
+
name: 'Large',
|
|
212
|
+
size: '2rem',
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
slug: 'x-large',
|
|
216
|
+
name: 'Extra Large',
|
|
217
|
+
size: 'clamp(1.75rem, 3vw, 2.25rem)',
|
|
218
|
+
},
|
|
219
|
+
];
|
|
220
|
+
|
|
221
|
+
it( 'should handle different units in literal mode', async () => {
|
|
222
|
+
const onChange = jest.fn();
|
|
223
|
+
await render(
|
|
224
|
+
<FontSizePickerToggleGroup
|
|
225
|
+
fontSizes={ heterogeneousFontSizes }
|
|
226
|
+
value="1em"
|
|
227
|
+
valueMode="literal"
|
|
228
|
+
onChange={ onChange }
|
|
229
|
+
__next40pxDefaultSize={ false }
|
|
230
|
+
size="default"
|
|
231
|
+
/>
|
|
232
|
+
);
|
|
233
|
+
// Should select the medium option (1em)
|
|
234
|
+
expect(
|
|
235
|
+
screen.getByRole( 'radio', { checked: true } )
|
|
236
|
+
).toHaveAccessibleName( 'Medium' );
|
|
237
|
+
} );
|
|
238
|
+
|
|
239
|
+
it( 'should handle complex font size values in literal mode', async () => {
|
|
240
|
+
const onChange = jest.fn();
|
|
241
|
+
await render(
|
|
242
|
+
<FontSizePickerToggleGroup
|
|
243
|
+
fontSizes={ heterogeneousFontSizes }
|
|
244
|
+
value="clamp(1.75rem, 3vw, 2.25rem)"
|
|
245
|
+
valueMode="literal"
|
|
246
|
+
onChange={ onChange }
|
|
247
|
+
__next40pxDefaultSize={ false }
|
|
248
|
+
size="default"
|
|
249
|
+
/>
|
|
250
|
+
);
|
|
251
|
+
// Should select the extra large option
|
|
252
|
+
expect(
|
|
253
|
+
screen.getByRole( 'radio', { checked: true } )
|
|
254
|
+
).toHaveAccessibleName( 'Extra Large' );
|
|
255
|
+
} );
|
|
256
|
+
|
|
257
|
+
it( 'should handle different units in slug mode', async () => {
|
|
258
|
+
const onChange = jest.fn();
|
|
259
|
+
await render(
|
|
260
|
+
<FontSizePickerToggleGroup
|
|
261
|
+
fontSizes={ heterogeneousFontSizes }
|
|
262
|
+
value="medium"
|
|
263
|
+
valueMode="slug"
|
|
264
|
+
onChange={ onChange }
|
|
265
|
+
__next40pxDefaultSize={ false }
|
|
266
|
+
size="default"
|
|
267
|
+
/>
|
|
268
|
+
);
|
|
269
|
+
// Should select the medium option
|
|
270
|
+
expect(
|
|
271
|
+
screen.getByRole( 'radio', { checked: true } )
|
|
272
|
+
).toHaveAccessibleName( 'Medium' );
|
|
273
|
+
} );
|
|
274
|
+
} );
|
|
275
|
+
} );
|