@wordpress/components 25.2.0 → 25.4.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 +34 -0
- package/build/button/index.js +13 -4
- package/build/button/index.js.map +1 -1
- package/build/button/index.native.js +9 -6
- package/build/button/index.native.js.map +1 -1
- package/build/confirm-dialog/component.js +9 -1
- package/build/confirm-dialog/component.js.map +1 -1
- package/build/font-size-picker/index.js +5 -3
- package/build/font-size-picker/index.js.map +1 -1
- package/build/font-size-picker/styles.js +19 -26
- package/build/font-size-picker/styles.js.map +1 -1
- package/build/form-token-field/styles.js +4 -2
- package/build/form-token-field/styles.js.map +1 -1
- package/build/guide/icons.js +2 -5
- package/build/guide/icons.js.map +1 -1
- package/build/guide/index.js +14 -11
- package/build/guide/index.js.map +1 -1
- package/build/guide/page-control.js +1 -3
- package/build/guide/page-control.js.map +1 -1
- package/build/item-group/item/hook.js +1 -1
- package/build/item-group/item/hook.js.map +1 -1
- package/build/item-group/styles.js +13 -10
- package/build/item-group/styles.js.map +1 -1
- package/build/mobile/bottom-sheet/cell.native.js +2 -1
- package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
- package/build/mobile/image/index.native.js +4 -3
- package/build/mobile/image/index.native.js.map +1 -1
- package/build/navigator/navigator-provider/component.js +18 -10
- package/build/navigator/navigator-provider/component.js.map +1 -1
- package/build/number-control/index.js +8 -4
- package/build/number-control/index.js.map +1 -1
- package/build/number-control/styles/number-control-styles.js +9 -15
- package/build/number-control/styles/number-control-styles.js.map +1 -1
- package/build/query-controls/index.js +1 -0
- package/build/query-controls/index.js.map +1 -1
- package/build/query-controls/index.native.js +1 -0
- package/build/query-controls/index.native.js.map +1 -1
- package/build/range-control/index.js +7 -1
- package/build/range-control/index.js.map +1 -1
- package/build/range-control/input-range.js.map +1 -1
- package/build/range-control/styles/range-control-styles.js +35 -36
- package/build/range-control/styles/range-control-styles.js.map +1 -1
- package/build/select-control/index.js +2 -1
- package/build/select-control/index.js.map +1 -1
- package/build/text-control/index.js +2 -2
- package/build/text-control/index.js.map +1 -1
- package/build/toolbar/toolbar-group/toolbar-group-container.native.js +10 -7
- package/build/toolbar/toolbar-group/toolbar-group-container.native.js.map +1 -1
- package/build/unit-control/index.js +4 -2
- package/build/unit-control/index.js.map +1 -1
- package/build/z-stack/component.js +5 -3
- package/build/z-stack/component.js.map +1 -1
- package/build/z-stack/styles.js +23 -42
- package/build/z-stack/styles.js.map +1 -1
- package/build-module/button/index.js +13 -4
- package/build-module/button/index.js.map +1 -1
- package/build-module/button/index.native.js +8 -6
- package/build-module/button/index.native.js.map +1 -1
- package/build-module/confirm-dialog/component.js +10 -2
- package/build-module/confirm-dialog/component.js.map +1 -1
- package/build-module/font-size-picker/index.js +5 -4
- package/build-module/font-size-picker/index.js.map +1 -1
- package/build-module/font-size-picker/styles.js +17 -23
- package/build-module/font-size-picker/styles.js.map +1 -1
- package/build-module/form-token-field/styles.js +3 -2
- package/build-module/form-token-field/styles.js.map +1 -1
- package/build-module/guide/icons.js +2 -5
- package/build-module/guide/icons.js.map +1 -1
- package/build-module/guide/index.js +14 -10
- package/build-module/guide/index.js.map +1 -1
- package/build-module/guide/page-control.js +1 -3
- package/build-module/guide/page-control.js.map +1 -1
- package/build-module/item-group/item/hook.js +1 -1
- package/build-module/item-group/item/hook.js.map +1 -1
- package/build-module/item-group/styles.js +13 -11
- package/build-module/item-group/styles.js.map +1 -1
- package/build-module/mobile/bottom-sheet/cell.native.js +2 -1
- package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
- package/build-module/mobile/image/index.native.js +4 -3
- package/build-module/mobile/image/index.native.js.map +1 -1
- package/build-module/navigator/navigator-provider/component.js +18 -10
- package/build-module/navigator/navigator-provider/component.js.map +1 -1
- package/build-module/number-control/index.js +8 -5
- package/build-module/number-control/index.js.map +1 -1
- package/build-module/number-control/styles/number-control-styles.js +7 -14
- package/build-module/number-control/styles/number-control-styles.js.map +1 -1
- package/build-module/query-controls/index.js +1 -0
- package/build-module/query-controls/index.js.map +1 -1
- package/build-module/query-controls/index.native.js +1 -0
- package/build-module/query-controls/index.native.js.map +1 -1
- package/build-module/range-control/index.js +6 -1
- package/build-module/range-control/index.js.map +1 -1
- package/build-module/range-control/input-range.js.map +1 -1
- package/build-module/range-control/styles/range-control-styles.js +35 -36
- package/build-module/range-control/styles/range-control-styles.js.map +1 -1
- package/build-module/select-control/index.js +2 -1
- package/build-module/select-control/index.js.map +1 -1
- package/build-module/text-control/index.js +2 -2
- package/build-module/text-control/index.js.map +1 -1
- package/build-module/toolbar/toolbar-group/toolbar-group-container.native.js +11 -7
- package/build-module/toolbar/toolbar-group/toolbar-group-container.native.js.map +1 -1
- package/build-module/unit-control/index.js +3 -2
- package/build-module/unit-control/index.js.map +1 -1
- package/build-module/z-stack/component.js +5 -3
- package/build-module/z-stack/component.js.map +1 -1
- package/build-module/z-stack/styles.js +22 -44
- package/build-module/z-stack/styles.js.map +1 -1
- package/build-style/style-rtl.css +22 -35
- package/build-style/style.css +22 -35
- package/build-types/button/deprecated.d.ts +6 -6
- package/build-types/button/index.d.ts.map +1 -1
- package/build-types/button/types.d.ts +16 -9
- package/build-types/button/types.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts +2 -1
- package/build-types/color-picker/styles.d.ts.map +1 -1
- package/build-types/confirm-dialog/component.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 +0 -6
- package/build-types/font-size-picker/styles.d.ts.map +1 -1
- package/build-types/form-token-field/styles.d.ts.map +1 -1
- package/build-types/guide/icons.d.ts +1 -3
- package/build-types/guide/icons.d.ts.map +1 -1
- package/build-types/guide/index.d.ts.map +1 -1
- package/build-types/guide/page-control.d.ts.map +1 -1
- package/build-types/item-group/item/hook.d.ts.map +1 -1
- package/build-types/item-group/stories/index.d.ts.map +1 -1
- package/build-types/item-group/styles.d.ts +1 -1
- package/build-types/item-group/styles.d.ts.map +1 -1
- package/build-types/navigator/navigator-back-button/component.d.ts +1 -1
- package/build-types/navigator/navigator-back-button/hook.d.ts +1 -1
- package/build-types/navigator/navigator-button/component.d.ts +1 -1
- package/build-types/navigator/navigator-button/hook.d.ts +1 -1
- package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
- package/build-types/navigator/navigator-to-parent-button/component.d.ts +1 -1
- package/build-types/navigator/types.d.ts +3 -1
- package/build-types/navigator/types.d.ts.map +1 -1
- package/build-types/number-control/index.d.ts.map +1 -1
- package/build-types/number-control/styles/number-control-styles.d.ts +5 -3
- package/build-types/number-control/styles/number-control-styles.d.ts.map +1 -1
- package/build-types/query-controls/index.d.ts.map +1 -1
- package/build-types/range-control/index.d.ts +15 -2
- package/build-types/range-control/index.d.ts.map +1 -1
- package/build-types/range-control/input-range.d.ts.map +1 -1
- package/build-types/range-control/styles/range-control-styles.d.ts +4 -2
- package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
- package/build-types/range-control/types.d.ts +6 -0
- package/build-types/range-control/types.d.ts.map +1 -1
- package/build-types/select-control/index.d.ts.map +1 -1
- package/build-types/select-control/types.d.ts +6 -0
- package/build-types/select-control/types.d.ts.map +1 -1
- package/build-types/text-control/test/text-control.d.ts +2 -0
- package/build-types/text-control/test/text-control.d.ts.map +1 -0
- package/build-types/toolbar/toolbar-button/index.d.ts +6 -6
- package/build-types/unit-control/index.d.ts.map +1 -1
- package/build-types/z-stack/component.d.ts.map +1 -1
- package/build-types/z-stack/stories/index.d.ts.map +1 -1
- package/build-types/z-stack/styles.d.ts +5 -4
- package/build-types/z-stack/styles.d.ts.map +1 -1
- package/package.json +22 -22
- package/src/button/README.md +15 -0
- package/src/button/index.native.js +9 -3
- package/src/button/index.tsx +11 -4
- package/src/button/style.native.scss +9 -0
- package/src/button/style.scss +13 -12
- package/src/button/test/index.tsx +13 -0
- package/src/button/types.ts +17 -9
- package/src/confirm-dialog/component.tsx +12 -2
- package/src/confirm-dialog/stories/index.js +8 -15
- package/src/confirm-dialog/test/index.js +42 -0
- package/src/dropdown-menu/style.scss +9 -13
- package/src/font-size-picker/index.tsx +9 -5
- package/src/font-size-picker/styles.ts +0 -10
- package/src/form-token-field/styles.ts +2 -0
- package/src/guide/icons.tsx +2 -7
- package/src/guide/index.tsx +14 -13
- package/src/guide/page-control.tsx +1 -5
- package/src/guide/style.scss +8 -24
- package/src/item-group/item/hook.ts +2 -1
- package/src/item-group/stories/index.tsx +8 -3
- package/src/item-group/styles.ts +39 -28
- package/src/mobile/bottom-sheet/cell.native.js +1 -0
- package/src/mobile/image/index.native.js +8 -6
- package/src/mobile/image/style.native.scss +5 -1
- package/src/modal/style.scss +3 -2
- package/src/navigator/navigator-provider/component.tsx +30 -23
- package/src/navigator/types.ts +4 -1
- package/src/number-control/index.tsx +6 -4
- package/src/number-control/styles/number-control-styles.ts +8 -16
- package/src/placeholder/style.scss +5 -0
- package/src/query-controls/index.native.js +1 -0
- package/src/query-controls/index.tsx +1 -0
- package/src/range-control/index.tsx +14 -2
- package/src/range-control/input-range.tsx +0 -1
- package/src/range-control/styles/range-control-styles.ts +12 -3
- package/src/range-control/types.ts +6 -0
- package/src/select-control/index.tsx +1 -0
- package/src/select-control/types.ts +6 -0
- package/src/text-control/index.tsx +2 -2
- package/src/text-control/test/text-control.tsx +61 -0
- package/src/toolbar/toolbar-group/style.native.scss +2 -3
- package/src/toolbar/toolbar-group/toolbar-group-container.native.js +12 -17
- package/src/tooltip/README.md +1 -1
- package/src/unit-control/index.tsx +3 -2
- package/src/unit-control/test/index.tsx +5 -2
- package/src/z-stack/component.tsx +4 -2
- package/src/z-stack/stories/index.tsx +6 -13
- package/src/z-stack/styles.ts +23 -24
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -39,20 +39,25 @@ Default.args = {
|
|
|
39
39
|
children: (
|
|
40
40
|
[
|
|
41
41
|
{
|
|
42
|
-
children: 'First item',
|
|
42
|
+
children: 'First button item',
|
|
43
43
|
// eslint-disable-next-line no-alert
|
|
44
44
|
onClick: () => alert( 'First item clicked' ),
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
|
-
children: 'Second item',
|
|
47
|
+
children: 'Second button item',
|
|
48
48
|
// eslint-disable-next-line no-alert
|
|
49
49
|
onClick: () => alert( 'Second item clicked' ),
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
|
-
children: 'Third item',
|
|
52
|
+
children: 'Third button item',
|
|
53
53
|
// eslint-disable-next-line no-alert
|
|
54
54
|
onClick: () => alert( 'Third item clicked' ),
|
|
55
55
|
},
|
|
56
|
+
{
|
|
57
|
+
children: 'Anchor item',
|
|
58
|
+
as: 'a',
|
|
59
|
+
href: 'https://wordpress.org',
|
|
60
|
+
},
|
|
56
61
|
] as ItemProps[]
|
|
57
62
|
).map( mapPropsToItem ),
|
|
58
63
|
};
|
package/src/item-group/styles.ts
CHANGED
|
@@ -6,34 +6,45 @@ import { css } from '@emotion/react';
|
|
|
6
6
|
/**
|
|
7
7
|
* Internal dependencies
|
|
8
8
|
*/
|
|
9
|
-
import { CONFIG, COLORS } from '../utils';
|
|
10
|
-
|
|
11
|
-
export const unstyledButton =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
9
|
+
import { CONFIG, COLORS, font } from '../utils';
|
|
10
|
+
|
|
11
|
+
export const unstyledButton = ( as: 'a' | 'button' ) => {
|
|
12
|
+
return css`
|
|
13
|
+
font-size: ${ font( 'default.fontSize' ) };
|
|
14
|
+
font-family: inherit;
|
|
15
|
+
appearance: none;
|
|
16
|
+
border: 1px solid transparent;
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
background: none;
|
|
19
|
+
text-align: start;
|
|
20
|
+
text-decoration: ${ as === 'a' ? 'none' : undefined };
|
|
21
|
+
|
|
22
|
+
svg,
|
|
23
|
+
path {
|
|
24
|
+
fill: currentColor;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&:hover {
|
|
28
|
+
color: ${ COLORS.ui.theme };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&:focus {
|
|
32
|
+
box-shadow: none;
|
|
33
|
+
outline: none;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&:focus-visible {
|
|
37
|
+
box-shadow: 0 0 0 var( --wp-admin-border-width-focus )
|
|
38
|
+
var(
|
|
39
|
+
--wp-components-color-accent,
|
|
40
|
+
var( --wp-admin-theme-color, ${ COLORS.ui.theme } )
|
|
41
|
+
);
|
|
42
|
+
// Windows high contrast mode.
|
|
43
|
+
outline: 2px solid transparent;
|
|
44
|
+
outline-offset: 0;
|
|
45
|
+
}
|
|
46
|
+
`;
|
|
47
|
+
};
|
|
37
48
|
|
|
38
49
|
export const itemWrapper = css`
|
|
39
50
|
width: 100%;
|
|
@@ -185,6 +185,13 @@ const ImageComponent = ( {
|
|
|
185
185
|
imageHeight && { height: imageHeight },
|
|
186
186
|
shapeStyle,
|
|
187
187
|
];
|
|
188
|
+
const imageSelectedStyles = [
|
|
189
|
+
usePreferredColorSchemeStyle(
|
|
190
|
+
styles.imageBorder,
|
|
191
|
+
styles.imageBorderDark
|
|
192
|
+
),
|
|
193
|
+
{ height: containerSize?.height },
|
|
194
|
+
];
|
|
188
195
|
|
|
189
196
|
return (
|
|
190
197
|
<View
|
|
@@ -210,12 +217,7 @@ const ImageComponent = ( {
|
|
|
210
217
|
{ isSelected &&
|
|
211
218
|
highlightSelected &&
|
|
212
219
|
! ( isUploadInProgress || isUploadFailed ) && (
|
|
213
|
-
<View
|
|
214
|
-
style={ [
|
|
215
|
-
styles.imageBorder,
|
|
216
|
-
{ height: containerSize?.height },
|
|
217
|
-
] }
|
|
218
|
-
/>
|
|
220
|
+
<View style={ imageSelectedStyles } />
|
|
219
221
|
) }
|
|
220
222
|
|
|
221
223
|
{ ! imageData ? (
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
.imageBorder {
|
|
10
|
-
border-color: $blue-
|
|
10
|
+
border-color: $blue-40;
|
|
11
11
|
border-width: 2px;
|
|
12
12
|
border-style: solid;
|
|
13
13
|
position: absolute;
|
|
@@ -16,6 +16,10 @@
|
|
|
16
16
|
height: 100%;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
.imageBorderDark {
|
|
20
|
+
border-color: $blue-50;
|
|
21
|
+
}
|
|
22
|
+
|
|
19
23
|
.retryIcon {
|
|
20
24
|
width: 80px;
|
|
21
25
|
height: 80px;
|
package/src/modal/style.scss
CHANGED
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
.components-modal__header {
|
|
73
73
|
box-sizing: border-box;
|
|
74
74
|
border-bottom: $border-width solid transparent;
|
|
75
|
-
padding: $grid-unit-30 $grid-unit-40 $grid-unit-
|
|
75
|
+
padding: $grid-unit-30 $grid-unit-40 $grid-unit-10;
|
|
76
76
|
display: flex;
|
|
77
77
|
flex-direction: row;
|
|
78
78
|
justify-content: space-between;
|
|
@@ -130,7 +130,8 @@
|
|
|
130
130
|
.components-modal__content {
|
|
131
131
|
flex: 1;
|
|
132
132
|
margin-top: $header-height + $grid-unit-15;
|
|
133
|
-
padding
|
|
133
|
+
// Small top padding required to avoid cutting off the visible outline when the first child element is focusable.
|
|
134
|
+
padding: $grid-unit-05 $grid-unit-40 $grid-unit-40;
|
|
134
135
|
overflow: auto;
|
|
135
136
|
|
|
136
137
|
&.hide-header {
|
|
@@ -148,6 +148,7 @@ function UnconnectedNavigatorProvider(
|
|
|
148
148
|
focusTargetSelector,
|
|
149
149
|
isBack = false,
|
|
150
150
|
skipFocus = false,
|
|
151
|
+
replace = false,
|
|
151
152
|
...restOptions
|
|
152
153
|
} = options;
|
|
153
154
|
|
|
@@ -172,34 +173,38 @@ function UnconnectedNavigatorProvider(
|
|
|
172
173
|
skipFocus,
|
|
173
174
|
};
|
|
174
175
|
|
|
175
|
-
if ( prevLocationHistory.length
|
|
176
|
-
return [ newLocation ];
|
|
176
|
+
if ( prevLocationHistory.length === 0 ) {
|
|
177
|
+
return replace ? [] : [ newLocation ];
|
|
177
178
|
}
|
|
178
179
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
180
|
+
const newLocationHistory = prevLocationHistory.slice(
|
|
181
|
+
prevLocationHistory.length > MAX_HISTORY_LENGTH - 1 ? 1 : 0,
|
|
182
|
+
-1
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
if ( ! replace ) {
|
|
186
|
+
newLocationHistory.push(
|
|
187
|
+
// Assign `focusTargetSelector` to the previous location in history
|
|
188
|
+
// (the one we just navigated from).
|
|
189
|
+
{
|
|
190
|
+
...prevLocationHistory[
|
|
191
|
+
prevLocationHistory.length - 1
|
|
192
|
+
],
|
|
193
|
+
focusTargetSelector,
|
|
194
|
+
}
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
newLocationHistory.push( newLocation );
|
|
199
|
+
|
|
200
|
+
return newLocationHistory;
|
|
196
201
|
} );
|
|
197
202
|
},
|
|
198
203
|
[ goBack ]
|
|
199
204
|
);
|
|
200
205
|
|
|
201
|
-
const goToParent: NavigatorContextType[ 'goToParent' ] =
|
|
202
|
-
|
|
206
|
+
const goToParent: NavigatorContextType[ 'goToParent' ] = useCallback(
|
|
207
|
+
( options = {} ) => {
|
|
203
208
|
const currentPath =
|
|
204
209
|
currentLocationHistory.current[
|
|
205
210
|
currentLocationHistory.current.length - 1
|
|
@@ -214,8 +219,10 @@ function UnconnectedNavigatorProvider(
|
|
|
214
219
|
if ( parentPath === undefined ) {
|
|
215
220
|
return;
|
|
216
221
|
}
|
|
217
|
-
goTo( parentPath, { isBack: true } );
|
|
218
|
-
},
|
|
222
|
+
goTo( parentPath, { ...options, isBack: true } );
|
|
223
|
+
},
|
|
224
|
+
[ goTo ]
|
|
225
|
+
);
|
|
219
226
|
|
|
220
227
|
const navigatorContextValue: NavigatorContextType = useMemo(
|
|
221
228
|
() => ( {
|
package/src/navigator/types.ts
CHANGED
|
@@ -14,8 +14,11 @@ export type NavigateOptions = {
|
|
|
14
14
|
focusTargetSelector?: string;
|
|
15
15
|
isBack?: boolean;
|
|
16
16
|
skipFocus?: boolean;
|
|
17
|
+
replace?: boolean;
|
|
17
18
|
};
|
|
18
19
|
|
|
20
|
+
export type NavigateToParentOptions = Omit< NavigateOptions, 'isBack' >;
|
|
21
|
+
|
|
19
22
|
export type NavigatorLocation = NavigateOptions & {
|
|
20
23
|
isInitial?: boolean;
|
|
21
24
|
path?: string;
|
|
@@ -28,7 +31,7 @@ export type Navigator = {
|
|
|
28
31
|
params: MatchParams;
|
|
29
32
|
goTo: ( path: string, options?: NavigateOptions ) => void;
|
|
30
33
|
goBack: () => void;
|
|
31
|
-
goToParent: () => void;
|
|
34
|
+
goToParent: ( options?: NavigateToParentOptions ) => void;
|
|
32
35
|
};
|
|
33
36
|
|
|
34
37
|
export type NavigatorContext = Navigator & {
|
|
@@ -16,7 +16,7 @@ import deprecated from '@wordpress/deprecated';
|
|
|
16
16
|
/**
|
|
17
17
|
* Internal dependencies
|
|
18
18
|
*/
|
|
19
|
-
import { Input, SpinButton } from './styles/number-control-styles';
|
|
19
|
+
import { Input, SpinButton, styles } from './styles/number-control-styles';
|
|
20
20
|
import * as inputControlActionTypes from '../input-control/reducer/actions';
|
|
21
21
|
import { add, subtract, roundClamp } from '../utils/math';
|
|
22
22
|
import { ensureNumber, isValueEmpty } from '../utils/values';
|
|
@@ -24,6 +24,7 @@ import type { WordPressComponentProps } from '../ui/context/wordpress-component'
|
|
|
24
24
|
import type { NumberControlProps } from './types';
|
|
25
25
|
import { HStack } from '../h-stack';
|
|
26
26
|
import { Spacer } from '../spacer';
|
|
27
|
+
import { useCx } from '../utils';
|
|
27
28
|
|
|
28
29
|
const noop = () => {};
|
|
29
30
|
|
|
@@ -59,7 +60,6 @@ function UnforwardedNumberControl(
|
|
|
59
60
|
} );
|
|
60
61
|
spinControls = 'none';
|
|
61
62
|
}
|
|
62
|
-
|
|
63
63
|
const inputRef = useRef< HTMLInputElement >();
|
|
64
64
|
const mergedRef = useMergeRefs( [ inputRef, forwardedRef ] );
|
|
65
65
|
|
|
@@ -78,6 +78,8 @@ function UnforwardedNumberControl(
|
|
|
78
78
|
|
|
79
79
|
const autoComplete = typeProp === 'number' ? 'off' : undefined;
|
|
80
80
|
const classes = classNames( 'components-number-control', className );
|
|
81
|
+
const cx = useCx();
|
|
82
|
+
const spinButtonClasses = cx( size === 'small' && styles.smallSpinButtons );
|
|
81
83
|
|
|
82
84
|
const spinValue = (
|
|
83
85
|
value: string | number | undefined,
|
|
@@ -236,6 +238,7 @@ function UnforwardedNumberControl(
|
|
|
236
238
|
<Spacer marginBottom={ 0 } marginRight={ 2 }>
|
|
237
239
|
<HStack spacing={ 1 }>
|
|
238
240
|
<SpinButton
|
|
241
|
+
className={ spinButtonClasses }
|
|
239
242
|
icon={ plusIcon }
|
|
240
243
|
isSmall
|
|
241
244
|
aria-hidden="true"
|
|
@@ -244,9 +247,9 @@ function UnforwardedNumberControl(
|
|
|
244
247
|
onClick={ buildSpinButtonClickHandler(
|
|
245
248
|
'up'
|
|
246
249
|
) }
|
|
247
|
-
size={ size }
|
|
248
250
|
/>
|
|
249
251
|
<SpinButton
|
|
252
|
+
className={ spinButtonClasses }
|
|
250
253
|
icon={ resetIcon }
|
|
251
254
|
isSmall
|
|
252
255
|
aria-hidden="true"
|
|
@@ -255,7 +258,6 @@ function UnforwardedNumberControl(
|
|
|
255
258
|
onClick={ buildSpinButtonClickHandler(
|
|
256
259
|
'down'
|
|
257
260
|
) }
|
|
258
|
-
size={ size }
|
|
259
261
|
/>
|
|
260
262
|
</HStack>
|
|
261
263
|
</Spacer>
|
|
@@ -11,7 +11,6 @@ import InputControl from '../../input-control';
|
|
|
11
11
|
import { COLORS } from '../../utils';
|
|
12
12
|
import Button from '../../button';
|
|
13
13
|
import { space } from '../../ui/utils/space';
|
|
14
|
-
import type { NumberControlProps } from '../types';
|
|
15
14
|
|
|
16
15
|
const htmlArrowStyles = ( { hideHTMLArrows }: { hideHTMLArrows: boolean } ) => {
|
|
17
16
|
if ( ! hideHTMLArrows ) {
|
|
@@ -35,23 +34,16 @@ export const Input = styled( InputControl )`
|
|
|
35
34
|
${ htmlArrowStyles };
|
|
36
35
|
`;
|
|
37
36
|
|
|
38
|
-
const spinButtonSizeStyles = ( {
|
|
39
|
-
size,
|
|
40
|
-
}: Pick< NumberControlProps, 'size' > ) => {
|
|
41
|
-
if ( size !== 'small' ) {
|
|
42
|
-
return ``;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return css`
|
|
46
|
-
width: ${ space( 5 ) };
|
|
47
|
-
min-width: ${ space( 5 ) };
|
|
48
|
-
height: ${ space( 5 ) };
|
|
49
|
-
`;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
37
|
export const SpinButton = styled( Button )`
|
|
53
38
|
&&&&& {
|
|
54
39
|
color: ${ COLORS.ui.theme };
|
|
55
|
-
${ spinButtonSizeStyles }
|
|
56
40
|
}
|
|
57
41
|
`;
|
|
42
|
+
|
|
43
|
+
const smallSpinButtons = css`
|
|
44
|
+
width: ${ space( 5 ) };
|
|
45
|
+
min-width: ${ space( 5 ) };
|
|
46
|
+
height: ${ space( 5 ) };
|
|
47
|
+
`;
|
|
48
|
+
|
|
49
|
+
export const styles = { smallSpinButtons };
|
|
@@ -37,6 +37,7 @@ import {
|
|
|
37
37
|
|
|
38
38
|
import type { RangeControlProps } from './types';
|
|
39
39
|
import type { WordPressComponentProps } from '../ui/context';
|
|
40
|
+
import { space } from '../ui/utils/space';
|
|
40
41
|
|
|
41
42
|
const noop = () => {};
|
|
42
43
|
|
|
@@ -69,6 +70,7 @@ function UnforwardedRangeControl(
|
|
|
69
70
|
railColor,
|
|
70
71
|
renderTooltipContent = ( v ) => v,
|
|
71
72
|
resetFallbackValue,
|
|
73
|
+
__next40pxDefaultSize = false,
|
|
72
74
|
shiftStep = 10,
|
|
73
75
|
showTooltip: showTooltipProp,
|
|
74
76
|
step = 1,
|
|
@@ -208,7 +210,6 @@ function UnforwardedRangeControl(
|
|
|
208
210
|
const offsetStyle = {
|
|
209
211
|
[ isRTL() ? 'right' : 'left' ]: fillValueOffset,
|
|
210
212
|
};
|
|
211
|
-
|
|
212
213
|
return (
|
|
213
214
|
<BaseControl
|
|
214
215
|
__nextHasNoMarginBottom={ __nextHasNoMarginBottom }
|
|
@@ -218,7 +219,10 @@ function UnforwardedRangeControl(
|
|
|
218
219
|
id={ `${ id }` }
|
|
219
220
|
help={ help }
|
|
220
221
|
>
|
|
221
|
-
<Root
|
|
222
|
+
<Root
|
|
223
|
+
className="components-range-control__root"
|
|
224
|
+
__next40pxDefaultSize={ __next40pxDefaultSize }
|
|
225
|
+
>
|
|
222
226
|
{ beforeIcon && (
|
|
223
227
|
<BeforeIconWrapper>
|
|
224
228
|
<Icon icon={ beforeIcon } />
|
|
@@ -305,6 +309,14 @@ function UnforwardedRangeControl(
|
|
|
305
309
|
onBlur={ handleOnInputNumberBlur }
|
|
306
310
|
onChange={ handleOnChange }
|
|
307
311
|
shiftStep={ shiftStep }
|
|
312
|
+
size={
|
|
313
|
+
__next40pxDefaultSize
|
|
314
|
+
? '__unstable-large'
|
|
315
|
+
: 'default'
|
|
316
|
+
}
|
|
317
|
+
__unstableInputWidth={
|
|
318
|
+
__next40pxDefaultSize ? space( 20 ) : space( 16 )
|
|
319
|
+
}
|
|
308
320
|
step={ step }
|
|
309
321
|
// @ts-expect-error TODO: Investigate if the `null` value is necessary
|
|
310
322
|
value={ inputSliderValue }
|
|
@@ -18,6 +18,7 @@ import type {
|
|
|
18
18
|
TooltipProps,
|
|
19
19
|
TrackProps,
|
|
20
20
|
WrapperProps,
|
|
21
|
+
RangeControlProps,
|
|
21
22
|
} from '../types';
|
|
22
23
|
|
|
23
24
|
const rangeHeightValue = 30;
|
|
@@ -26,15 +27,24 @@ const rangeHeight = () =>
|
|
|
26
27
|
css( { height: rangeHeightValue, minHeight: rangeHeightValue } );
|
|
27
28
|
const thumbSize = 12;
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
const deprecatedHeight = ( {
|
|
31
|
+
__next40pxDefaultSize,
|
|
32
|
+
}: Pick< RangeControlProps, '__next40pxDefaultSize' > ) =>
|
|
33
|
+
! __next40pxDefaultSize && css( { minHeight: rangeHeightValue } );
|
|
34
|
+
|
|
35
|
+
type RootProps = Pick< RangeControlProps, '__next40pxDefaultSize' >;
|
|
36
|
+
export const Root = styled.div< RootProps >`
|
|
30
37
|
-webkit-tap-highlight-color: transparent;
|
|
31
|
-
align-items:
|
|
38
|
+
align-items: center;
|
|
32
39
|
display: flex;
|
|
33
40
|
justify-content: flex-start;
|
|
34
41
|
padding: 0;
|
|
35
42
|
position: relative;
|
|
36
43
|
touch-action: none;
|
|
37
44
|
width: 100%;
|
|
45
|
+
min-height: 40px;
|
|
46
|
+
/* TODO: remove after removing the __next40pxDefaultSize prop */
|
|
47
|
+
${ deprecatedHeight };
|
|
38
48
|
`;
|
|
39
49
|
|
|
40
50
|
const wrapperColor = ( { color = COLORS.ui.borderFocus }: WrapperProps ) =>
|
|
@@ -296,7 +306,6 @@ export const InputNumber = styled( NumberControl )`
|
|
|
296
306
|
display: inline-block;
|
|
297
307
|
font-size: 13px;
|
|
298
308
|
margin-top: 0;
|
|
299
|
-
width: ${ space( 16 ) } !important;
|
|
300
309
|
|
|
301
310
|
input[type='number']& {
|
|
302
311
|
${ rangeHeight };
|
|
@@ -203,6 +203,12 @@ export type RangeControlProps = Pick<
|
|
|
203
203
|
* @default 10
|
|
204
204
|
*/
|
|
205
205
|
shiftStep?: number;
|
|
206
|
+
/**
|
|
207
|
+
* Start opting into the larger default height that will become the default size in a future version.
|
|
208
|
+
*
|
|
209
|
+
* @default false
|
|
210
|
+
*/
|
|
211
|
+
__next40pxDefaultSize?: boolean;
|
|
206
212
|
/**
|
|
207
213
|
* Forcing the Tooltip UI to show or hide. This is overridden to `false`
|
|
208
214
|
* when `step` is set to the special string value `any`.
|
|
@@ -40,6 +40,12 @@ type SelectControlBaseProps = Pick<
|
|
|
40
40
|
* @default false
|
|
41
41
|
*/
|
|
42
42
|
disabled?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Whether or not the option should be hidden.
|
|
45
|
+
*
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
48
|
+
hidden?: boolean;
|
|
43
49
|
}[];
|
|
44
50
|
/**
|
|
45
51
|
* As an alternative to the `options` prop, `optgroup`s and `options` can be
|
|
@@ -26,13 +26,13 @@ function UnforwardedTextControl(
|
|
|
26
26
|
hideLabelFromVision,
|
|
27
27
|
value,
|
|
28
28
|
help,
|
|
29
|
+
id: idProp,
|
|
29
30
|
className,
|
|
30
31
|
onChange,
|
|
31
32
|
type = 'text',
|
|
32
33
|
...additionalProps
|
|
33
34
|
} = props;
|
|
34
|
-
const
|
|
35
|
-
const id = `inspector-text-control-${ instanceId }`;
|
|
35
|
+
const id = useInstanceId( TextControl, 'inspector-text-control', idProp );
|
|
36
36
|
const onChangeValue = ( event: ChangeEvent< HTMLInputElement > ) =>
|
|
37
37
|
onChange( event.target.value );
|
|
38
38
|
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { render, screen } from '@testing-library/react';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import TextControl from '..';
|
|
10
|
+
|
|
11
|
+
const noop = () => {};
|
|
12
|
+
|
|
13
|
+
describe( 'TextControl', () => {
|
|
14
|
+
describe( 'When no ID prop is provided', () => {
|
|
15
|
+
it( 'should generate an ID', () => {
|
|
16
|
+
render( <TextControl onChange={ noop } value="" /> );
|
|
17
|
+
|
|
18
|
+
expect( screen.getByRole( 'textbox' ) ).toHaveAttribute(
|
|
19
|
+
'id',
|
|
20
|
+
expect.stringMatching( /^inspector-text-control-/ )
|
|
21
|
+
);
|
|
22
|
+
} );
|
|
23
|
+
|
|
24
|
+
it( 'should be labelled correctly', () => {
|
|
25
|
+
const labelValue = 'Test Label';
|
|
26
|
+
render(
|
|
27
|
+
<TextControl label={ labelValue } onChange={ noop } value="" />
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
expect(
|
|
31
|
+
screen.getByRole( 'textbox', { name: labelValue } )
|
|
32
|
+
).toBeVisible();
|
|
33
|
+
} );
|
|
34
|
+
} );
|
|
35
|
+
|
|
36
|
+
describe( 'When an ID prop is provided', () => {
|
|
37
|
+
const id = 'test-id';
|
|
38
|
+
|
|
39
|
+
it( 'should use the passed ID prop if provided', () => {
|
|
40
|
+
render( <TextControl id={ id } onChange={ noop } value="" /> );
|
|
41
|
+
|
|
42
|
+
expect( screen.getByRole( 'textbox' ) ).toHaveAttribute( 'id', id );
|
|
43
|
+
} );
|
|
44
|
+
|
|
45
|
+
it( 'should be labelled correctly', () => {
|
|
46
|
+
const labelValue = 'Test Label';
|
|
47
|
+
render(
|
|
48
|
+
<TextControl
|
|
49
|
+
label={ labelValue }
|
|
50
|
+
id={ id }
|
|
51
|
+
onChange={ noop }
|
|
52
|
+
value=""
|
|
53
|
+
/>
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
expect(
|
|
57
|
+
screen.getByRole( 'textbox', { name: labelValue } )
|
|
58
|
+
).toBeVisible();
|
|
59
|
+
} );
|
|
60
|
+
} );
|
|
61
|
+
} );
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
.container {
|
|
2
2
|
flex-direction: row;
|
|
3
|
-
border-
|
|
4
|
-
border-color: #e9eff3;
|
|
3
|
+
border-color: $light-quaternary;
|
|
5
4
|
padding-left: 5px;
|
|
6
5
|
padding-right: 5px;
|
|
7
6
|
}
|
|
8
7
|
|
|
9
8
|
.containerDark {
|
|
10
|
-
border-color:
|
|
9
|
+
border-color: $dark-quaternary;
|
|
11
10
|
}
|