@wordpress/components 19.9.0 → 19.10.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.
Files changed (185) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/CONTRIBUTING.md +80 -7
  3. package/build/angle-picker-control/angle-circle.js +5 -7
  4. package/build/angle-picker-control/angle-circle.js.map +1 -1
  5. package/build/box-control/index.js +0 -21
  6. package/build/box-control/index.js.map +1 -1
  7. package/build/box-control/utils.js +1 -8
  8. package/build/box-control/utils.js.map +1 -1
  9. package/build/button/index.js +3 -5
  10. package/build/button/index.js.map +1 -1
  11. package/build/circular-option-picker/index.js +1 -2
  12. package/build/circular-option-picker/index.js.map +1 -1
  13. package/build/disabled/index.js +4 -76
  14. package/build/disabled/index.js.map +1 -1
  15. package/build/input-control/index.js +3 -2
  16. package/build/input-control/index.js.map +1 -1
  17. package/build/input-control/styles/input-control-styles.js +42 -30
  18. package/build/input-control/styles/input-control-styles.js.map +1 -1
  19. package/build/mobile/bottom-sheet-select-control/index.native.js +1 -0
  20. package/build/mobile/bottom-sheet-select-control/index.native.js.map +1 -1
  21. package/build/popover/index.js +6 -52
  22. package/build/popover/index.js.map +1 -1
  23. package/build/select-control/index.js +31 -4
  24. package/build/select-control/index.js.map +1 -1
  25. package/build/select-control/styles/select-control-styles.js +8 -8
  26. package/build/select-control/styles/select-control-styles.js.map +1 -1
  27. package/build/text-control/index.js +35 -28
  28. package/build/text-control/index.js.map +1 -1
  29. package/build/text-control/types.js +6 -0
  30. package/build/text-control/types.js.map +1 -0
  31. package/build/toggle-group-control/toggle-group-control-option-icon/component.js +6 -4
  32. package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
  33. package/build/tools-panel/tools-panel-header/component.js +52 -36
  34. package/build/tools-panel/tools-panel-header/component.js.map +1 -1
  35. package/build/unit-control/index.js +3 -3
  36. package/build/unit-control/index.js.map +1 -1
  37. package/build/unit-control/styles/unit-control-styles.js +11 -20
  38. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  39. package/build/unit-control/utils.js.map +1 -1
  40. package/build-module/angle-picker-control/angle-circle.js +5 -7
  41. package/build-module/angle-picker-control/angle-circle.js.map +1 -1
  42. package/build-module/box-control/index.js +1 -20
  43. package/build-module/box-control/index.js.map +1 -1
  44. package/build-module/box-control/utils.js +0 -6
  45. package/build-module/box-control/utils.js.map +1 -1
  46. package/build-module/button/index.js +3 -4
  47. package/build-module/button/index.js.map +1 -1
  48. package/build-module/circular-option-picker/index.js +1 -2
  49. package/build-module/circular-option-picker/index.js.map +1 -1
  50. package/build-module/disabled/index.js +5 -76
  51. package/build-module/disabled/index.js.map +1 -1
  52. package/build-module/input-control/index.js +3 -2
  53. package/build-module/input-control/index.js.map +1 -1
  54. package/build-module/input-control/styles/input-control-styles.js +42 -30
  55. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  56. package/build-module/mobile/bottom-sheet-select-control/index.native.js +1 -0
  57. package/build-module/mobile/bottom-sheet-select-control/index.native.js.map +1 -1
  58. package/build-module/popover/index.js +6 -52
  59. package/build-module/popover/index.js.map +1 -1
  60. package/build-module/select-control/index.js +29 -3
  61. package/build-module/select-control/index.js.map +1 -1
  62. package/build-module/select-control/styles/select-control-styles.js +8 -8
  63. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  64. package/build-module/text-control/index.js +35 -27
  65. package/build-module/text-control/index.js.map +1 -1
  66. package/build-module/text-control/types.js +2 -0
  67. package/build-module/text-control/types.js.map +1 -0
  68. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +1 -5
  69. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -1
  70. package/build-module/tools-panel/tools-panel-header/component.js +51 -36
  71. package/build-module/tools-panel/tools-panel-header/component.js.map +1 -1
  72. package/build-module/unit-control/index.js +3 -3
  73. package/build-module/unit-control/index.js.map +1 -1
  74. package/build-module/unit-control/styles/unit-control-styles.js +11 -20
  75. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  76. package/build-module/unit-control/utils.js.map +1 -1
  77. package/build-style/style-rtl.css +7 -0
  78. package/build-style/style.css +7 -0
  79. package/build-types/button/index.d.ts.map +1 -1
  80. package/build-types/circular-option-picker/index.d.ts.map +1 -1
  81. package/build-types/color-picker/styles.d.ts +3 -3
  82. package/build-types/disabled/index.d.ts.map +1 -1
  83. package/build-types/input-control/index.d.ts +4 -3
  84. package/build-types/input-control/index.d.ts.map +1 -1
  85. package/build-types/input-control/stories/index.d.ts +5 -5
  86. package/build-types/input-control/stories/index.d.ts.map +1 -1
  87. package/build-types/input-control/styles/input-control-styles.d.ts +1 -0
  88. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  89. package/build-types/input-control/types.d.ts +6 -0
  90. package/build-types/input-control/types.d.ts.map +1 -1
  91. package/build-types/number-control/styles/number-control-styles.d.ts +1 -1
  92. package/build-types/popover/index.d.ts +0 -1
  93. package/build-types/popover/index.d.ts.map +1 -1
  94. package/build-types/select-control/index.d.ts +30 -26
  95. package/build-types/select-control/index.d.ts.map +1 -1
  96. package/build-types/select-control/stories/index.d.ts +23 -0
  97. package/build-types/select-control/stories/index.d.ts.map +1 -0
  98. package/build-types/select-control/styles/select-control-styles.d.ts +3 -4
  99. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  100. package/build-types/select-control/test/select-control.d.ts +2 -0
  101. package/build-types/select-control/test/select-control.d.ts.map +1 -0
  102. package/build-types/select-control/types.d.ts +52 -1
  103. package/build-types/select-control/types.d.ts.map +1 -1
  104. package/build-types/text-control/index.d.ts +32 -0
  105. package/build-types/text-control/index.d.ts.map +1 -0
  106. package/build-types/text-control/stories/index.d.ts +13 -0
  107. package/build-types/text-control/stories/index.d.ts.map +1 -0
  108. package/build-types/text-control/types.d.ts +25 -0
  109. package/build-types/text-control/types.d.ts.map +1 -0
  110. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -1
  111. package/build-types/tools-panel/tools-panel-header/component.d.ts.map +1 -1
  112. package/build-types/tools-panel/types.d.ts +0 -1
  113. package/build-types/tools-panel/types.d.ts.map +1 -1
  114. package/build-types/unit-control/index.d.ts +2 -2
  115. package/build-types/unit-control/index.d.ts.map +1 -1
  116. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  117. package/build-types/unit-control/test/index.d.ts +2 -0
  118. package/build-types/unit-control/test/index.d.ts.map +1 -0
  119. package/build-types/unit-control/test/utils.d.ts +2 -0
  120. package/build-types/unit-control/test/utils.d.ts.map +1 -0
  121. package/build-types/unit-control/types.d.ts +1 -1
  122. package/build-types/unit-control/types.d.ts.map +1 -1
  123. package/build-types/unit-control/utils.d.ts +3 -3
  124. package/build-types/unit-control/utils.d.ts.map +1 -1
  125. package/package.json +17 -17
  126. package/src/angle-picker-control/angle-circle.js +3 -3
  127. package/src/box-control/README.md +0 -74
  128. package/src/box-control/index.js +0 -15
  129. package/src/box-control/stories/index.js +0 -29
  130. package/src/box-control/utils.js +0 -7
  131. package/src/button/index.js +2 -4
  132. package/src/button/test/index.js +16 -1
  133. package/src/circular-option-picker/index.js +1 -2
  134. package/src/color-palette/README.md +0 -1
  135. package/src/color-palette/test/__snapshots__/index.js.snap +2 -3
  136. package/src/confirm-dialog/stories/index.js +87 -99
  137. package/src/date-time/stories/index.js +19 -0
  138. package/src/date-time/test/date.js +107 -78
  139. package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -4
  140. package/src/disabled/index.js +5 -90
  141. package/src/form-file-upload/test/index.js +15 -12
  142. package/src/input-control/README.md +1 -1
  143. package/src/input-control/index.tsx +3 -2
  144. package/src/input-control/stories/index.tsx +1 -1
  145. package/src/input-control/styles/input-control-styles.tsx +19 -5
  146. package/src/input-control/types.ts +6 -0
  147. package/src/menu-item/style.scss +10 -0
  148. package/src/mobile/bottom-sheet/bottom-sheet-navigation/test/navigation-container.native.js +8 -1
  149. package/src/mobile/bottom-sheet-select-control/index.native.js +1 -0
  150. package/src/mobile/html-text-input/style.android.scss +1 -0
  151. package/src/mobile/html-text-input/style.ios.scss +1 -0
  152. package/src/mobile/link-settings/test/link-settings-navigation.native.js +9 -1
  153. package/src/popover/index.js +5 -51
  154. package/src/select-control/README.md +2 -2
  155. package/src/select-control/index.tsx +30 -29
  156. package/src/select-control/stories/index.tsx +90 -0
  157. package/src/select-control/styles/select-control-styles.ts +9 -8
  158. package/src/select-control/test/{select-control.js → select-control.tsx} +2 -2
  159. package/src/select-control/types.ts +66 -1
  160. package/src/text-control/index.tsx +84 -0
  161. package/src/text-control/stories/index.tsx +66 -0
  162. package/src/text-control/types.ts +29 -0
  163. package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +1 -5
  164. package/src/tools-panel/test/__snapshots__/index.js.snap +1 -1
  165. package/src/tools-panel/test/index.js +71 -18
  166. package/src/tools-panel/tools-panel-header/component.tsx +75 -33
  167. package/src/tools-panel/types.ts +0 -1
  168. package/src/tooltip/test/index.js +6 -0
  169. package/src/unit-control/index.tsx +2 -5
  170. package/src/unit-control/styles/unit-control-styles.ts +3 -13
  171. package/src/unit-control/test/__snapshots__/index.tsx.snap +33 -0
  172. package/src/unit-control/test/{index.js → index.tsx} +214 -165
  173. package/src/unit-control/test/{utils.js → utils.ts} +38 -19
  174. package/src/unit-control/types.ts +4 -1
  175. package/src/unit-control/utils.ts +5 -3
  176. package/tsconfig.json +2 -1
  177. package/tsconfig.tsbuildinfo +1 -1
  178. package/build/box-control/visualizer.js +0 -165
  179. package/build/box-control/visualizer.js.map +0 -1
  180. package/build-module/box-control/visualizer.js +0 -154
  181. package/build-module/box-control/visualizer.js.map +0 -1
  182. package/src/box-control/visualizer.js +0 -116
  183. package/src/select-control/stories/index.js +0 -104
  184. package/src/text-control/index.js +0 -72
  185. package/src/text-control/stories/index.js +0 -46
@@ -6,6 +6,7 @@ import type { ForwardedRef } from 'react';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
+ import { speak } from '@wordpress/a11y';
9
10
  import { check, reset, moreVertical, plus } from '@wordpress/icons';
10
11
  import { __, _x, sprintf } from '@wordpress/i18n';
11
12
 
@@ -24,11 +25,8 @@ import type {
24
25
  ToolsPanelHeaderProps,
25
26
  } from '../types';
26
27
 
27
- const noop = () => {};
28
-
29
28
  const DefaultControlsGroup = ( {
30
29
  items,
31
- onClose,
32
30
  toggleItem,
33
31
  }: ToolsPanelControlsGroupProps ) => {
34
32
  if ( ! items.length ) {
@@ -38,27 +36,41 @@ const DefaultControlsGroup = ( {
38
36
  return (
39
37
  <MenuGroup>
40
38
  { items.map( ( [ label, hasValue ] ) => {
41
- const icon = hasValue ? reset : check;
42
- const itemLabel = hasValue
43
- ? sprintf(
44
- // translators: %s: The name of the control being reset e.g. "Padding".
45
- __( 'Reset %s' ),
46
- label
47
- )
48
- : undefined;
39
+ if ( hasValue ) {
40
+ return (
41
+ <MenuItem
42
+ key={ label }
43
+ role="menuitem"
44
+ icon={ reset }
45
+ label={ sprintf(
46
+ // translators: %s: The name of the control being reset e.g. "Padding".
47
+ __( 'Reset %s' ),
48
+ label
49
+ ) }
50
+ onClick={ () => {
51
+ toggleItem( label );
52
+ speak(
53
+ sprintf(
54
+ // translators: %s: The name of the control being reset e.g. "Padding".
55
+ __( '%s reset to default' ),
56
+ label
57
+ ),
58
+ 'assertive'
59
+ );
60
+ } }
61
+ >
62
+ { label }
63
+ </MenuItem>
64
+ );
65
+ }
49
66
 
50
67
  return (
51
68
  <MenuItem
52
69
  key={ label }
53
- icon={ icon }
54
- isSelected={ true }
55
- disabled={ ! hasValue }
56
- label={ itemLabel }
57
- onClick={ () => {
58
- toggleItem( label );
59
- onClose();
60
- } }
61
70
  role="menuitemcheckbox"
71
+ icon={ check }
72
+ isSelected
73
+ aria-disabled
62
74
  >
63
75
  { label }
64
76
  </MenuItem>
@@ -70,7 +82,6 @@ const DefaultControlsGroup = ( {
70
82
 
71
83
  const OptionalControlsGroup = ( {
72
84
  items,
73
- onClose,
74
85
  toggleItem,
75
86
  }: ToolsPanelControlsGroupProps ) => {
76
87
  if ( ! items.length ) {
@@ -99,8 +110,26 @@ const OptionalControlsGroup = ( {
99
110
  isSelected={ isSelected }
100
111
  label={ itemLabel }
101
112
  onClick={ () => {
113
+ if ( isSelected ) {
114
+ speak(
115
+ sprintf(
116
+ // translators: %s: The name of the control being reset e.g. "Padding".
117
+ __( '%s hidden and reset to default' ),
118
+ label
119
+ ),
120
+ 'assertive'
121
+ );
122
+ } else {
123
+ speak(
124
+ sprintf(
125
+ // translators: %s: The name of the control being reset e.g. "Padding".
126
+ __( '%s is now visible' ),
127
+ label
128
+ ),
129
+ 'assertive'
130
+ );
131
+ }
102
132
  toggleItem( label );
103
- onClose();
104
133
  } }
105
134
  role="menuitemcheckbox"
106
135
  >
@@ -135,12 +164,18 @@ const ToolsPanelHeader = (
135
164
  const defaultItems = Object.entries( menuItems?.default || {} );
136
165
  const optionalItems = Object.entries( menuItems?.optional || {} );
137
166
  const dropDownMenuIcon = areAllOptionalControlsHidden ? plus : moreVertical;
138
- const dropDownMenuLabelText = areAllOptionalControlsHidden
139
- ? _x(
140
- 'View and add options',
141
- 'Button label to reveal tool panel options'
142
- )
143
- : _x( 'View options', 'Button label to reveal tool panel options' );
167
+ const dropDownMenuLabelText = sprintf(
168
+ // translators: %s: The name of the tool e.g. "Color" or "Typography".
169
+ _x( '%s options', 'Button label to reveal tool panel options' ),
170
+ labelText
171
+ );
172
+ const dropdownMenuDescriptionText = areAllOptionalControlsHidden
173
+ ? __( 'All options are currently hidden' )
174
+ : undefined;
175
+
176
+ const canResetAll = [ ...defaultItems, ...optionalItems ].some(
177
+ ( [ , isSelected ] ) => isSelected
178
+ );
144
179
 
145
180
  return (
146
181
  <HStack { ...headerProps } ref={ forwardedRef }>
@@ -152,26 +187,33 @@ const ToolsPanelHeader = (
152
187
  icon={ dropDownMenuIcon }
153
188
  label={ dropDownMenuLabelText }
154
189
  menuProps={ { className: dropdownMenuClassName } }
155
- toggleProps={ { isSmall: true } }
190
+ toggleProps={ {
191
+ isSmall: true,
192
+ describedBy: dropdownMenuDescriptionText,
193
+ } }
156
194
  >
157
- { ( { onClose = noop } ) => (
195
+ { () => (
158
196
  <>
159
197
  <DefaultControlsGroup
160
198
  items={ defaultItems }
161
- onClose={ onClose }
162
199
  toggleItem={ toggleItem }
163
200
  />
164
201
  <OptionalControlsGroup
165
202
  items={ optionalItems }
166
- onClose={ onClose }
167
203
  toggleItem={ toggleItem }
168
204
  />
169
205
  <MenuGroup>
170
206
  <MenuItem
207
+ aria-disabled={ ! canResetAll }
171
208
  variant={ 'tertiary' }
172
209
  onClick={ () => {
173
- resetAll();
174
- onClose();
210
+ if ( canResetAll ) {
211
+ resetAll();
212
+ speak(
213
+ __( 'All options reset' ),
214
+ 'assertive'
215
+ );
216
+ }
175
217
  } }
176
218
  >
177
219
  { __( 'Reset all' ) }
@@ -148,7 +148,6 @@ export type ToolsPanelContext = {
148
148
 
149
149
  export type ToolsPanelControlsGroupProps = {
150
150
  items: [ string, boolean ][];
151
- onClose: () => void;
152
151
  toggleItem: ( label: string ) => void;
153
152
  };
154
153
 
@@ -149,6 +149,9 @@ describe( 'Tooltip', () => {
149
149
  setTimeout( () => {
150
150
  const popoverAfterTimeout = wrapper.find( 'Popover' );
151
151
  expect( popoverAfterTimeout ).toHaveLength( 1 );
152
+
153
+ jest.runOnlyPendingTimers();
154
+ jest.useRealTimers();
152
155
  }, TOOLTIP_DELAY );
153
156
  } );
154
157
 
@@ -183,6 +186,9 @@ describe( 'Tooltip', () => {
183
186
  setTimeout( () => {
184
187
  const popoverAfterTimeout = wrapper.find( 'Popover' );
185
188
  expect( popoverAfterTimeout ).toHaveLength( 1 );
189
+
190
+ jest.runOnlyPendingTimers();
191
+ jest.useRealTimers();
186
192
  }, 2000 );
187
193
  } );
188
194
 
@@ -88,7 +88,7 @@ function UnforwardedUnitControl(
88
88
  );
89
89
 
90
90
  const [ unit, setUnit ] = useControlledState< string | undefined >(
91
- unitProp,
91
+ units.length === 1 ? units[ 0 ].value : unitProp,
92
92
  {
93
93
  initial: parsedUnit,
94
94
  fallback: '',
@@ -178,10 +178,7 @@ function UnforwardedUnitControl(
178
178
  : undefined;
179
179
  const changeProps = { event, data };
180
180
 
181
- onChangeProp?.(
182
- `${ validParsedQuantity ?? '' }${ validParsedUnit }`,
183
- changeProps
184
- );
181
+ // The `onChange` callback already gets called, no need to call it explicitely.
185
182
  onUnitChange?.( validParsedUnit, changeProps );
186
183
 
187
184
  setUnit( validParsedUnit );
@@ -26,21 +26,11 @@ export const Root = styled.div`
26
26
  position: relative;
27
27
  `;
28
28
 
29
- const paddingStyles = ( { disableUnits, size }: InputProps ) => {
30
- const paddings = {
31
- default: {
32
- paddingRight: 8,
33
- },
34
- small: {
35
- paddingRight: 8,
36
- },
37
- '__unstable-large': {
38
- paddingRight: disableUnits ? 16 : 8,
39
- },
40
- };
29
+ const paddingStyles = ( { disableUnits }: InputProps ) => {
30
+ if ( disableUnits ) return '';
41
31
 
42
32
  return css`
43
- ${ rtl( paddings[ size ] )() };
33
+ ${ rtl( { paddingRight: 8 } )() };
44
34
  `;
45
35
  };
46
36
 
@@ -0,0 +1,33 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`UnitControl Basic rendering should render custom className 1`] = `
4
+ Snapshot Diff:
5
+ - First value
6
+ + Second value
7
+
8
+ @@ -1,10 +1,10 @@
9
+ <div
10
+ class="components-unit-control-wrapper css-aa2xc3-Root e1bagdl33"
11
+ >
12
+ <div
13
+ - class="components-flex components-input-control components-number-control components-unit-control e1bagdl32 ep48uk90 em5sgkm7 css-18wzek1-View-Flex-sx-Base-sx-Items-ItemsColumn-Root-rootLabelPositionStyles-Input-ValueInput-arrowStyles-paddingStyles em57xhy0"
14
+ + class="components-flex components-input-control components-number-control components-unit-control hello e1bagdl32 ep48uk90 em5sgkm7 css-18wzek1-View-Flex-sx-Base-sx-Items-ItemsColumn-Root-rootLabelPositionStyles-Input-ValueInput-arrowStyles-paddingStyles em57xhy0"
15
+ data-wp-c16t="true"
16
+ data-wp-component="Flex"
17
+ >
18
+ <div
19
+ class="components-flex-item em5sgkm3 css-1fmchc6-View-Item-sx-Base-LabelWrapper em57xhy0"
20
+ @@ -15,11 +15,11 @@
21
+ class="components-input-control__container css-1sy20aj-Container-containerDisabledStyles-containerMarginStyles-containerWidthStyles em5sgkm6"
22
+ >
23
+ <input
24
+ autocomplete="off"
25
+ class="components-input-control__input css-gzm6eu-Input-dragStyles-fontSizeStyles-sizeStyles em5sgkm5"
26
+ - id="inspector-input-control-1"
27
+ + id="inspector-input-control-2"
28
+ inputmode="numeric"
29
+ max="Infinity"
30
+ min="-Infinity"
31
+ step="1"
32
+ type="number"
33
+ `;