@wordpress/components 19.7.0-next.e230fbab09.0 → 19.8.1

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 (539) hide show
  1. package/CHANGELOG.md +57 -1
  2. package/README.md +38 -0
  3. package/build/base-control/index.js +41 -32
  4. package/build/base-control/index.js.map +1 -1
  5. package/build/base-control/styles/base-control-styles.js +43 -22
  6. package/build/base-control/styles/base-control-styles.js.map +1 -1
  7. package/build/base-control/types.js +6 -0
  8. package/build/base-control/types.js.map +1 -0
  9. package/build/border-box-control/border-box-control/component.js +124 -0
  10. package/build/border-box-control/border-box-control/component.js.map +1 -0
  11. package/build/border-box-control/border-box-control/hook.js +113 -0
  12. package/build/border-box-control/border-box-control/hook.js.map +1 -0
  13. package/build/border-box-control/border-box-control/index.js +24 -0
  14. package/build/border-box-control/border-box-control/index.js.map +1 -0
  15. package/build/border-box-control/border-box-control-linked-button/component.js +59 -0
  16. package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -0
  17. package/build/border-box-control/border-box-control-linked-button/hook.js +41 -0
  18. package/build/border-box-control/border-box-control-linked-button/hook.js.map +1 -0
  19. package/build/border-box-control/border-box-control-linked-button/index.js +16 -0
  20. package/build/border-box-control/border-box-control-linked-button/index.js.map +1 -0
  21. package/build/border-box-control/border-box-control-split-controls/component.js +93 -0
  22. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -0
  23. package/build/border-box-control/border-box-control-split-controls/hook.js +45 -0
  24. package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -0
  25. package/build/border-box-control/border-box-control-split-controls/index.js +16 -0
  26. package/build/border-box-control/border-box-control-split-controls/index.js.map +1 -0
  27. package/build/border-box-control/border-box-control-visualizer/component.js +40 -0
  28. package/build/border-box-control/border-box-control-visualizer/component.js.map +1 -0
  29. package/build/border-box-control/border-box-control-visualizer/hook.js +43 -0
  30. package/build/border-box-control/border-box-control-visualizer/hook.js.map +1 -0
  31. package/build/border-box-control/border-box-control-visualizer/index.js +16 -0
  32. package/build/border-box-control/border-box-control-visualizer/index.js.map +1 -0
  33. package/build/border-box-control/index.js +44 -0
  34. package/build/border-box-control/index.js.map +1 -0
  35. package/build/border-box-control/styles.js +76 -0
  36. package/build/border-box-control/styles.js.map +1 -0
  37. package/build/border-box-control/types.js +6 -0
  38. package/build/border-box-control/types.js.map +1 -0
  39. package/build/border-box-control/utils.js +161 -0
  40. package/build/border-box-control/utils.js.map +1 -0
  41. package/build/border-control/border-control/component.js +119 -0
  42. package/build/border-control/border-control/component.js.map +1 -0
  43. package/build/border-control/border-control/hook.js +130 -0
  44. package/build/border-control/border-control/hook.js.map +1 -0
  45. package/build/border-control/border-control/index.js +24 -0
  46. package/build/border-control/border-control/index.js.map +1 -0
  47. package/build/border-control/border-control-dropdown/component.js +196 -0
  48. package/build/border-control/border-control-dropdown/component.js.map +1 -0
  49. package/build/border-control/border-control-dropdown/hook.js +105 -0
  50. package/build/border-control/border-control-dropdown/hook.js.map +1 -0
  51. package/build/border-control/border-control-dropdown/index.js +16 -0
  52. package/build/border-control/border-control-dropdown/index.js.map +1 -0
  53. package/build/border-control/border-control-style-picker/component.js +101 -0
  54. package/build/border-control/border-control-style-picker/component.js.map +1 -0
  55. package/build/border-control/border-control-style-picker/hook.js +45 -0
  56. package/build/border-control/border-control-style-picker/hook.js.map +1 -0
  57. package/build/border-control/border-control-style-picker/index.js +16 -0
  58. package/build/border-control/border-control-style-picker/index.js.map +1 -0
  59. package/build/border-control/index.js +24 -0
  60. package/build/border-control/index.js.map +1 -0
  61. package/build/border-control/styles.js +125 -0
  62. package/build/border-control/styles.js.map +1 -0
  63. package/build/border-control/types.js +6 -0
  64. package/build/border-control/types.js.map +1 -0
  65. package/build/box-control/all-input-control.js +3 -7
  66. package/build/box-control/all-input-control.js.map +1 -1
  67. package/build/box-control/axial-input-controls.js +20 -15
  68. package/build/box-control/axial-input-controls.js.map +1 -1
  69. package/build/box-control/input-controls.js +21 -16
  70. package/build/box-control/input-controls.js.map +1 -1
  71. package/build/box-control/utils.js +25 -11
  72. package/build/box-control/utils.js.map +1 -1
  73. package/build/card/styles.js +22 -17
  74. package/build/card/styles.js.map +1 -1
  75. package/build/checkbox-control/index.js +21 -1
  76. package/build/checkbox-control/index.js.map +1 -1
  77. package/build/color-palette/index.js +53 -4
  78. package/build/color-palette/index.js.map +1 -1
  79. package/build/custom-select-control/index.js +12 -4
  80. package/build/custom-select-control/index.js.map +1 -1
  81. package/build/divider/styles.js +28 -16
  82. package/build/divider/styles.js.map +1 -1
  83. package/build/focal-point-picker/controls.js +2 -3
  84. package/build/focal-point-picker/controls.js.map +1 -1
  85. package/build/form-file-upload/index.js +4 -1
  86. package/build/form-file-upload/index.js.map +1 -1
  87. package/build/guide/index.js +14 -8
  88. package/build/guide/index.js.map +1 -1
  89. package/build/index.js +40 -0
  90. package/build/index.js.map +1 -1
  91. package/build/input-control/input-field.js +21 -14
  92. package/build/input-control/input-field.js.map +1 -1
  93. package/build/input-control/reducer/actions.js +1 -3
  94. package/build/input-control/reducer/actions.js.map +1 -1
  95. package/build/input-control/reducer/reducer.js +1 -43
  96. package/build/input-control/reducer/reducer.js.map +1 -1
  97. package/build/item-group/styles.js +14 -14
  98. package/build/item-group/styles.js.map +1 -1
  99. package/build/mobile/picker/index.android.js +0 -3
  100. package/build/mobile/picker/index.android.js.map +1 -1
  101. package/build/number-control/index.js +15 -10
  102. package/build/number-control/index.js.map +1 -1
  103. package/build/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +4 -4
  104. package/build/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js.map +1 -1
  105. package/build/surface/styles.js +8 -8
  106. package/build/surface/styles.js.map +1 -1
  107. package/build/toggle-group-control/index.js +8 -0
  108. package/build/toggle-group-control/index.js.map +1 -1
  109. package/build/toggle-group-control/toggle-group-control/component.js +10 -1
  110. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  111. package/build/toggle-group-control/toggle-group-control/styles.js +14 -3
  112. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  113. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +90 -0
  114. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -0
  115. package/build/toggle-group-control/toggle-group-control-option/component.js +9 -90
  116. package/build/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  117. package/build/toggle-group-control/toggle-group-control-option-base/component.js +127 -0
  118. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -0
  119. package/build/toggle-group-control/toggle-group-control-option-base/index.js +16 -0
  120. package/build/toggle-group-control/toggle-group-control-option-base/index.js.map +1 -0
  121. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +66 -0
  122. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -0
  123. package/build/toggle-group-control/toggle-group-control-option-icon/component.js +55 -0
  124. package/build/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -0
  125. package/build/toggle-group-control/toggle-group-control-option-icon/index.js +16 -0
  126. package/build/toggle-group-control/toggle-group-control-option-icon/index.js.map +1 -0
  127. package/build/toolbar-dropdown-menu/index.js +1 -1
  128. package/build/toolbar-dropdown-menu/index.js.map +1 -1
  129. package/build/tree-grid/index.js +4 -1
  130. package/build/tree-grid/index.js.map +1 -1
  131. package/build/unit-control/index.js +56 -29
  132. package/build/unit-control/index.js.map +1 -1
  133. package/build/unit-control/unit-select-control.js +2 -4
  134. package/build/unit-control/unit-select-control.js.map +1 -1
  135. package/build/utils/colors-values.js +5 -3
  136. package/build/utils/colors-values.js.map +1 -1
  137. package/build/utils/config-values.js +9 -4
  138. package/build/utils/config-values.js.map +1 -1
  139. package/build-module/base-control/index.js +39 -35
  140. package/build-module/base-control/index.js.map +1 -1
  141. package/build-module/base-control/styles/base-control-styles.js +44 -16
  142. package/build-module/base-control/styles/base-control-styles.js.map +1 -1
  143. package/build-module/base-control/types.js +2 -0
  144. package/build-module/base-control/types.js.map +1 -0
  145. package/build-module/border-box-control/border-box-control/component.js +104 -0
  146. package/build-module/border-box-control/border-box-control/component.js.map +1 -0
  147. package/build-module/border-box-control/border-box-control/hook.js +97 -0
  148. package/build-module/border-box-control/border-box-control/hook.js.map +1 -0
  149. package/build-module/border-box-control/border-box-control/index.js +3 -0
  150. package/build-module/border-box-control/border-box-control/index.js.map +1 -0
  151. package/build-module/border-box-control/border-box-control-linked-button/component.js +42 -0
  152. package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -0
  153. package/build-module/border-box-control/border-box-control-linked-button/hook.js +26 -0
  154. package/build-module/border-box-control/border-box-control-linked-button/hook.js.map +1 -0
  155. package/build-module/border-box-control/border-box-control-linked-button/index.js +2 -0
  156. package/build-module/border-box-control/border-box-control-linked-button/index.js.map +1 -0
  157. package/build-module/border-box-control/border-box-control-split-controls/component.js +77 -0
  158. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -0
  159. package/build-module/border-box-control/border-box-control-split-controls/hook.js +30 -0
  160. package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -0
  161. package/build-module/border-box-control/border-box-control-split-controls/index.js +2 -0
  162. package/build-module/border-box-control/border-box-control-split-controls/index.js.map +1 -0
  163. package/build-module/border-box-control/border-box-control-visualizer/component.js +27 -0
  164. package/build-module/border-box-control/border-box-control-visualizer/component.js.map +1 -0
  165. package/build-module/border-box-control/border-box-control-visualizer/hook.js +28 -0
  166. package/build-module/border-box-control/border-box-control-visualizer/hook.js.map +1 -0
  167. package/build-module/border-box-control/border-box-control-visualizer/index.js +2 -0
  168. package/build-module/border-box-control/border-box-control-visualizer/index.js.map +1 -0
  169. package/build-module/border-box-control/index.js +4 -0
  170. package/build-module/border-box-control/index.js.map +1 -0
  171. package/build-module/border-box-control/styles.js +66 -0
  172. package/build-module/border-box-control/styles.js.map +1 -0
  173. package/build-module/border-box-control/types.js +2 -0
  174. package/build-module/border-box-control/types.js.map +1 -0
  175. package/build-module/border-box-control/utils.js +127 -0
  176. package/build-module/border-box-control/utils.js.map +1 -0
  177. package/build-module/border-control/border-control/component.js +100 -0
  178. package/build-module/border-control/border-control/component.js.map +1 -0
  179. package/build-module/border-control/border-control/hook.js +115 -0
  180. package/build-module/border-control/border-control/hook.js.map +1 -0
  181. package/build-module/border-control/border-control/index.js +3 -0
  182. package/build-module/border-control/border-control/index.js.map +1 -0
  183. package/build-module/border-control/border-control-dropdown/component.js +174 -0
  184. package/build-module/border-control/border-control-dropdown/component.js.map +1 -0
  185. package/build-module/border-control/border-control-dropdown/hook.js +89 -0
  186. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -0
  187. package/build-module/border-control/border-control-dropdown/index.js +2 -0
  188. package/build-module/border-control/border-control-dropdown/index.js.map +1 -0
  189. package/build-module/border-control/border-control-style-picker/component.js +81 -0
  190. package/build-module/border-control/border-control-style-picker/component.js.map +1 -0
  191. package/build-module/border-control/border-control-style-picker/hook.js +30 -0
  192. package/build-module/border-control/border-control-style-picker/hook.js.map +1 -0
  193. package/build-module/border-control/border-control-style-picker/index.js +2 -0
  194. package/build-module/border-control/border-control-style-picker/index.js.map +1 -0
  195. package/build-module/border-control/index.js +3 -0
  196. package/build-module/border-control/index.js.map +1 -0
  197. package/build-module/border-control/styles.js +90 -0
  198. package/build-module/border-control/styles.js.map +1 -0
  199. package/build-module/border-control/types.js +2 -0
  200. package/build-module/border-control/types.js.map +1 -0
  201. package/build-module/box-control/all-input-control.js +4 -8
  202. package/build-module/box-control/all-input-control.js.map +1 -1
  203. package/build-module/box-control/axial-input-controls.js +18 -14
  204. package/build-module/box-control/axial-input-controls.js.map +1 -1
  205. package/build-module/box-control/input-controls.js +18 -14
  206. package/build-module/box-control/input-controls.js.map +1 -1
  207. package/build-module/box-control/utils.js +25 -11
  208. package/build-module/box-control/utils.js.map +1 -1
  209. package/build-module/card/styles.js +23 -18
  210. package/build-module/card/styles.js.map +1 -1
  211. package/build-module/checkbox-control/index.js +24 -3
  212. package/build-module/checkbox-control/index.js.map +1 -1
  213. package/build-module/color-palette/index.js +52 -4
  214. package/build-module/color-palette/index.js.map +1 -1
  215. package/build-module/custom-select-control/index.js +12 -4
  216. package/build-module/custom-select-control/index.js.map +1 -1
  217. package/build-module/divider/styles.js +29 -10
  218. package/build-module/divider/styles.js.map +1 -1
  219. package/build-module/focal-point-picker/controls.js +2 -3
  220. package/build-module/focal-point-picker/controls.js.map +1 -1
  221. package/build-module/form-file-upload/index.js +4 -1
  222. package/build-module/form-file-upload/index.js.map +1 -1
  223. package/build-module/guide/index.js +14 -8
  224. package/build-module/guide/index.js.map +1 -1
  225. package/build-module/index.js +3 -1
  226. package/build-module/index.js.map +1 -1
  227. package/build-module/input-control/input-field.js +21 -13
  228. package/build-module/input-control/input-field.js.map +1 -1
  229. package/build-module/input-control/reducer/actions.js +0 -1
  230. package/build-module/input-control/reducer/actions.js.map +1 -1
  231. package/build-module/input-control/reducer/reducer.js +2 -39
  232. package/build-module/input-control/reducer/reducer.js.map +1 -1
  233. package/build-module/item-group/styles.js +14 -14
  234. package/build-module/item-group/styles.js.map +1 -1
  235. package/build-module/mobile/picker/index.android.js +0 -3
  236. package/build-module/mobile/picker/index.android.js.map +1 -1
  237. package/build-module/number-control/index.js +15 -9
  238. package/build-module/number-control/index.js.map +1 -1
  239. package/build-module/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +4 -4
  240. package/build-module/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js.map +1 -1
  241. package/build-module/surface/styles.js +8 -8
  242. package/build-module/surface/styles.js.map +1 -1
  243. package/build-module/toggle-group-control/index.js +1 -0
  244. package/build-module/toggle-group-control/index.js.map +1 -1
  245. package/build-module/toggle-group-control/toggle-group-control/component.js +8 -1
  246. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  247. package/build-module/toggle-group-control/toggle-group-control/styles.js +11 -3
  248. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  249. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +86 -0
  250. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -0
  251. package/build-module/toggle-group-control/toggle-group-control-option/component.js +9 -79
  252. package/build-module/toggle-group-control/toggle-group-control-option/component.js.map +1 -1
  253. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +105 -0
  254. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -0
  255. package/build-module/toggle-group-control/toggle-group-control-option-base/index.js +2 -0
  256. package/build-module/toggle-group-control/toggle-group-control-option-base/index.js.map +1 -0
  257. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +55 -0
  258. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -0
  259. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js +50 -0
  260. package/build-module/toggle-group-control/toggle-group-control-option-icon/component.js.map +1 -0
  261. package/build-module/toggle-group-control/toggle-group-control-option-icon/index.js +2 -0
  262. package/build-module/toggle-group-control/toggle-group-control-option-icon/index.js.map +1 -0
  263. package/build-module/toolbar-dropdown-menu/index.js +1 -1
  264. package/build-module/toolbar-dropdown-menu/index.js.map +1 -1
  265. package/build-module/tree-grid/index.js +4 -1
  266. package/build-module/tree-grid/index.js.map +1 -1
  267. package/build-module/unit-control/index.js +54 -27
  268. package/build-module/unit-control/index.js.map +1 -1
  269. package/build-module/unit-control/unit-select-control.js +2 -3
  270. package/build-module/unit-control/unit-select-control.js.map +1 -1
  271. package/build-module/utils/colors-values.js +5 -3
  272. package/build-module/utils/colors-values.js.map +1 -1
  273. package/build-module/utils/config-values.js +8 -4
  274. package/build-module/utils/config-values.js.map +1 -1
  275. package/build-style/style-rtl.css +33 -185
  276. package/build-style/style.css +33 -185
  277. package/build-types/base-control/index.d.ts +35 -71
  278. package/build-types/base-control/index.d.ts.map +1 -1
  279. package/build-types/base-control/stories/index.d.ts +25 -0
  280. package/build-types/base-control/stories/index.d.ts.map +1 -0
  281. package/build-types/base-control/styles/base-control-styles.d.ts +10 -5
  282. package/build-types/base-control/styles/base-control-styles.d.ts.map +1 -1
  283. package/build-types/base-control/types.d.ts +41 -0
  284. package/build-types/base-control/types.d.ts.map +1 -0
  285. package/build-types/border-box-control/border-box-control/component.d.ts +4 -0
  286. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -0
  287. package/build-types/border-box-control/border-box-control/hook.d.ts +282 -0
  288. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -0
  289. package/build-types/border-box-control/border-box-control/index.d.ts +3 -0
  290. package/build-types/border-box-control/border-box-control/index.d.ts.map +1 -0
  291. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts +4 -0
  292. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -0
  293. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +266 -0
  294. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -0
  295. package/build-types/border-box-control/border-box-control-linked-button/index.d.ts +2 -0
  296. package/build-types/border-box-control/border-box-control-linked-button/index.d.ts.map +1 -0
  297. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +4 -0
  298. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -0
  299. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +274 -0
  300. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -0
  301. package/build-types/border-box-control/border-box-control-split-controls/index.d.ts +2 -0
  302. package/build-types/border-box-control/border-box-control-split-controls/index.d.ts.map +1 -0
  303. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts +4 -0
  304. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts.map +1 -0
  305. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +266 -0
  306. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -0
  307. package/build-types/border-box-control/border-box-control-visualizer/index.d.ts +2 -0
  308. package/build-types/border-box-control/border-box-control-visualizer/index.d.ts.map +1 -0
  309. package/build-types/border-box-control/index.d.ts +4 -0
  310. package/build-types/border-box-control/index.d.ts.map +1 -0
  311. package/build-types/border-box-control/styles.d.ts +8 -0
  312. package/build-types/border-box-control/styles.d.ts.map +1 -0
  313. package/build-types/border-box-control/types.d.ts +91 -0
  314. package/build-types/border-box-control/types.d.ts.map +1 -0
  315. package/build-types/border-box-control/utils.d.ts +24 -0
  316. package/build-types/border-box-control/utils.d.ts.map +1 -0
  317. package/build-types/border-control/border-control/component.d.ts +4 -0
  318. package/build-types/border-control/border-control/component.d.ts.map +1 -0
  319. package/build-types/border-control/border-control/hook.d.ts +285 -0
  320. package/build-types/border-control/border-control/hook.d.ts.map +1 -0
  321. package/build-types/border-control/border-control/index.d.ts +3 -0
  322. package/build-types/border-control/border-control/index.d.ts.map +1 -0
  323. package/build-types/border-control/border-control-dropdown/component.d.ts +4 -0
  324. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -0
  325. package/build-types/border-control/border-control-dropdown/hook.d.ts +280 -0
  326. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -0
  327. package/build-types/border-control/border-control-dropdown/index.d.ts +2 -0
  328. package/build-types/border-control/border-control-dropdown/index.d.ts.map +1 -0
  329. package/build-types/border-control/border-control-style-picker/component.d.ts +4 -0
  330. package/build-types/border-control/border-control-style-picker/component.d.ts.map +1 -0
  331. package/build-types/border-control/border-control-style-picker/hook.d.ts +269 -0
  332. package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -0
  333. package/build-types/border-control/border-control-style-picker/index.d.ts +2 -0
  334. package/build-types/border-control/border-control-style-picker/index.d.ts.map +1 -0
  335. package/build-types/border-control/index.d.ts +3 -0
  336. package/build-types/border-control/index.d.ts.map +1 -0
  337. package/build-types/border-control/styles.d.ts +18 -0
  338. package/build-types/border-control/styles.d.ts.map +1 -0
  339. package/build-types/border-control/types.d.ts +163 -0
  340. package/build-types/border-control/types.d.ts.map +1 -0
  341. package/build-types/card/card-divider/hook.d.ts +1 -1
  342. package/build-types/card/styles.d.ts.map +1 -1
  343. package/build-types/color-indicator/index.d.ts +7 -0
  344. package/build-types/color-indicator/index.d.ts.map +1 -0
  345. package/build-types/color-palette/index.d.ts.map +1 -1
  346. package/build-types/color-picker/styles.d.ts +1 -1
  347. package/build-types/divider/stories/index.d.ts +1 -0
  348. package/build-types/divider/stories/index.d.ts.map +1 -1
  349. package/build-types/divider/styles.d.ts.map +1 -1
  350. package/build-types/divider/types.d.ts +8 -1
  351. package/build-types/divider/types.d.ts.map +1 -1
  352. package/build-types/input-control/input-field.d.ts.map +1 -1
  353. package/build-types/input-control/reducer/actions.d.ts +1 -3
  354. package/build-types/input-control/reducer/actions.d.ts.map +1 -1
  355. package/build-types/input-control/reducer/reducer.d.ts +3 -9
  356. package/build-types/input-control/reducer/reducer.d.ts.map +1 -1
  357. package/build-types/input-control/stories/index.d.ts +17 -0
  358. package/build-types/input-control/stories/index.d.ts.map +1 -0
  359. package/build-types/input-control/types.d.ts +2 -2
  360. package/build-types/input-control/types.d.ts.map +1 -1
  361. package/build-types/item-group/styles.d.ts.map +1 -1
  362. package/build-types/number-control/index.d.ts +3 -3
  363. package/build-types/number-control/index.d.ts.map +1 -1
  364. package/build-types/range-control/styles/range-control-styles.d.ts +1 -1
  365. package/build-types/resizable-box/resize-tooltip/styles/resize-tooltip.styles.d.ts.map +1 -1
  366. package/build-types/spinner/styles/spinner-styles.d.ts +5 -0
  367. package/build-types/spinner/styles/spinner-styles.d.ts.map +1 -0
  368. package/build-types/toggle-group-control/index.d.ts +1 -0
  369. package/build-types/toggle-group-control/index.d.ts.map +1 -1
  370. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  371. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +5 -0
  372. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  373. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts +9 -0
  374. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +1 -0
  375. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +6 -2
  376. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts.map +1 -1
  377. package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts +0 -4
  378. package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts.map +1 -1
  379. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts +25 -0
  380. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -0
  381. package/build-types/toggle-group-control/toggle-group-control-option-base/index.d.ts +2 -0
  382. package/build-types/toggle-group-control/toggle-group-control-option-base/index.d.ts.map +1 -0
  383. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +15 -0
  384. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -0
  385. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +37 -0
  386. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts.map +1 -0
  387. package/build-types/toggle-group-control/toggle-group-control-option-icon/index.d.ts +2 -0
  388. package/build-types/toggle-group-control/toggle-group-control-option-icon/index.d.ts.map +1 -0
  389. package/build-types/toggle-group-control/types.d.ts +24 -8
  390. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  391. package/build-types/ui/form-group/form-group.d.ts +2 -2
  392. package/build-types/unit-control/index.d.ts +12 -5
  393. package/build-types/unit-control/index.d.ts.map +1 -1
  394. package/build-types/unit-control/stories/index.d.ts +33 -0
  395. package/build-types/unit-control/stories/index.d.ts.map +1 -0
  396. package/build-types/unit-control/styles/unit-control-styles.d.ts +1 -1
  397. package/build-types/unit-control/types.d.ts +28 -7
  398. package/build-types/unit-control/types.d.ts.map +1 -1
  399. package/build-types/unit-control/unit-select-control.d.ts.map +1 -1
  400. package/build-types/utils/colors-values.d.ts +78 -18
  401. package/build-types/utils/colors-values.d.ts.map +1 -1
  402. package/build-types/utils/config-values.d.ts +71 -71
  403. package/build-types/utils/config-values.d.ts.map +1 -1
  404. package/package.json +17 -17
  405. package/src/animate/README.md +1 -1
  406. package/src/base-control/README.md +20 -12
  407. package/src/base-control/index.tsx +124 -0
  408. package/src/base-control/stories/index.tsx +80 -0
  409. package/src/base-control/styles/{base-control-styles.js → base-control-styles.ts} +23 -1
  410. package/src/base-control/types.ts +42 -0
  411. package/src/border-box-control/border-box-control/README.md +178 -0
  412. package/src/border-box-control/border-box-control/component.tsx +123 -0
  413. package/src/border-box-control/border-box-control/hook.ts +119 -0
  414. package/src/border-box-control/border-box-control/index.ts +2 -0
  415. package/src/border-box-control/border-box-control-linked-button/component.tsx +50 -0
  416. package/src/border-box-control/border-box-control-linked-button/hook.ts +30 -0
  417. package/src/border-box-control/border-box-control-linked-button/index.ts +1 -0
  418. package/src/border-box-control/border-box-control-split-controls/component.tsx +90 -0
  419. package/src/border-box-control/border-box-control-split-controls/hook.ts +34 -0
  420. package/src/border-box-control/border-box-control-split-controls/index.ts +1 -0
  421. package/src/border-box-control/border-box-control-visualizer/component.tsx +28 -0
  422. package/src/border-box-control/border-box-control-visualizer/hook.ts +30 -0
  423. package/src/border-box-control/border-box-control-visualizer/index.ts +1 -0
  424. package/src/border-box-control/index.ts +3 -0
  425. package/src/border-box-control/stories/index.js +104 -0
  426. package/src/border-box-control/styles.ts +69 -0
  427. package/src/border-box-control/test/index.js +354 -0
  428. package/src/border-box-control/test/utils.js +305 -0
  429. package/src/border-box-control/types.ts +98 -0
  430. package/src/border-box-control/utils.ts +151 -0
  431. package/src/border-control/border-control/README.md +181 -0
  432. package/src/border-control/border-control/component.tsx +112 -0
  433. package/src/border-control/border-control/hook.ts +145 -0
  434. package/src/border-control/border-control/index.ts +2 -0
  435. package/src/border-control/border-control-dropdown/component.tsx +252 -0
  436. package/src/border-control/border-control-dropdown/hook.ts +98 -0
  437. package/src/border-control/border-control-dropdown/index.ts +1 -0
  438. package/src/border-control/border-control-style-picker/component.tsx +89 -0
  439. package/src/border-control/border-control-style-picker/hook.ts +34 -0
  440. package/src/border-control/border-control-style-picker/index.ts +1 -0
  441. package/src/border-control/index.ts +2 -0
  442. package/src/border-control/stories/index.js +118 -0
  443. package/src/border-control/styles.ts +190 -0
  444. package/src/border-control/test/index.js +436 -0
  445. package/src/border-control/types.ts +173 -0
  446. package/src/box-control/all-input-control.js +2 -10
  447. package/src/box-control/axial-input-controls.js +32 -21
  448. package/src/box-control/input-controls.js +30 -19
  449. package/src/box-control/utils.js +29 -12
  450. package/src/card/styles.js +11 -5
  451. package/src/card/test/__snapshots__/index.js.snap +83 -66
  452. package/src/card/test/index.js +7 -5
  453. package/src/checkbox-control/index.js +34 -3
  454. package/src/checkbox-control/stories/index.js +44 -0
  455. package/src/checkbox-control/style.scss +4 -2
  456. package/src/color-palette/README.md +6 -0
  457. package/src/color-palette/index.js +73 -8
  458. package/src/color-palette/stories/index.js +69 -26
  459. package/src/color-palette/style.scss +11 -3
  460. package/src/color-palette/test/__snapshots__/index.js.snap +662 -12
  461. package/src/color-palette/test/index.js +1 -1
  462. package/src/custom-select-control/index.js +15 -3
  463. package/src/custom-select-control/stories/index.js +77 -74
  464. package/src/custom-select-control/style.scss +23 -4
  465. package/src/disabled/README.md +7 -10
  466. package/src/divider/stories/index.tsx +26 -23
  467. package/src/divider/styles.ts +9 -0
  468. package/src/divider/types.ts +11 -1
  469. package/src/flyout/test/__snapshots__/index.js.snap +7 -7
  470. package/src/focal-point-picker/controls.js +2 -3
  471. package/src/font-size-picker/test/index.js +0 -2
  472. package/src/form-file-upload/README.md +18 -0
  473. package/src/form-file-upload/index.js +3 -0
  474. package/src/form-file-upload/test/index.js +73 -11
  475. package/src/form-toggle/README.md +1 -1
  476. package/src/guide/index.js +12 -13
  477. package/src/guide/style.scss +0 -4
  478. package/src/index.js +8 -0
  479. package/src/input-control/input-field.tsx +23 -12
  480. package/src/input-control/reducer/actions.ts +1 -7
  481. package/src/input-control/reducer/reducer.ts +0 -29
  482. package/src/input-control/types.ts +2 -1
  483. package/src/item-group/styles.ts +1 -0
  484. package/src/item-group/test/__snapshots__/index.js.snap +11 -10
  485. package/src/mobile/picker/index.android.js +0 -1
  486. package/src/number-control/README.md +14 -0
  487. package/src/number-control/index.js +13 -12
  488. package/src/number-control/stories/index.js +14 -7
  489. package/src/number-control/test/index.js +79 -1
  490. package/src/range-control/stories/index.js +91 -119
  491. package/src/resizable-box/resize-tooltip/styles/resize-tooltip.styles.js +1 -0
  492. package/src/surface/styles.js +1 -1
  493. package/src/surface/test/__snapshots__/index.js.snap +11 -11
  494. package/src/toggle-group-control/index.ts +1 -0
  495. package/src/toggle-group-control/stories/index.js +37 -7
  496. package/src/toggle-group-control/test/__snapshots__/index.js.snap +269 -32
  497. package/src/toggle-group-control/test/index.js +43 -10
  498. package/src/toggle-group-control/toggle-group-control/component.tsx +10 -0
  499. package/src/toggle-group-control/toggle-group-control/styles.ts +14 -0
  500. package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +86 -0
  501. package/src/toggle-group-control/toggle-group-control-option/README.md +8 -5
  502. package/src/toggle-group-control/toggle-group-control-option/component.tsx +18 -97
  503. package/src/toggle-group-control/toggle-group-control-option-base/README.md +27 -0
  504. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +129 -0
  505. package/src/toggle-group-control/toggle-group-control-option-base/index.ts +1 -0
  506. package/src/toggle-group-control/{toggle-group-control-option → toggle-group-control-option-base}/styles.ts +4 -13
  507. package/src/toggle-group-control/toggle-group-control-option-icon/README.md +56 -0
  508. package/src/toggle-group-control/toggle-group-control-option-icon/component.tsx +56 -0
  509. package/src/toggle-group-control/toggle-group-control-option-icon/index.ts +1 -0
  510. package/src/toggle-group-control/types.ts +33 -8
  511. package/src/toolbar-dropdown-menu/index.js +1 -1
  512. package/src/toolbar-group/style.scss +0 -73
  513. package/src/tools-panel/test/__snapshots__/index.js.snap +8 -8
  514. package/src/tree-grid/README.md +1 -1
  515. package/src/tree-grid/index.js +4 -0
  516. package/src/tree-grid/test/index.js +61 -17
  517. package/src/unit-control/README.md +7 -3
  518. package/src/unit-control/index.tsx +65 -31
  519. package/src/unit-control/stories/index.tsx +170 -0
  520. package/src/unit-control/test/index.js +263 -100
  521. package/src/unit-control/types.ts +65 -42
  522. package/src/unit-control/unit-select-control.tsx +2 -3
  523. package/src/utils/colors-values.js +4 -3
  524. package/src/utils/config-values.js +9 -4
  525. package/tsconfig.json +3 -0
  526. package/tsconfig.tsbuildinfo +1 -1
  527. package/build/guide/finish-button.js +0 -44
  528. package/build/guide/finish-button.js.map +0 -1
  529. package/build/toggle-group-control/toggle-group-control-option/styles.js +0 -73
  530. package/build/toggle-group-control/toggle-group-control-option/styles.js.map +0 -1
  531. package/build-module/guide/finish-button.js +0 -34
  532. package/build-module/guide/finish-button.js.map +0 -1
  533. package/build-module/toggle-group-control/toggle-group-control-option/styles.js +0 -61
  534. package/build-module/toggle-group-control/toggle-group-control-option/styles.js.map +0 -1
  535. package/src/base-control/index.js +0 -111
  536. package/src/base-control/stories/index.js +0 -81
  537. package/src/guide/finish-button.js +0 -26
  538. package/src/guide/test/finish-button.js +0 -49
  539. package/src/unit-control/stories/index.js +0 -127
@@ -6,7 +6,7 @@ import { fireEvent, render, screen } from '@testing-library/react';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { LEFT, RIGHT, UP, DOWN } from '@wordpress/keycodes';
9
+ import { LEFT, RIGHT, UP, DOWN, HOME, END } from '@wordpress/keycodes';
10
10
  import { forwardRef } from '@wordpress/element';
11
11
 
12
12
  /**
@@ -68,10 +68,10 @@ describe( 'TreeGrid', () => {
68
68
  level={ 1 }
69
69
  positionInSet={ 1 }
70
70
  setSize={ 3 }
71
- isExpanded={ true }
71
+ isExpanded={ false }
72
72
  >
73
73
  <TreeGridCell withoutGridItem>
74
- <TestButton>Row 1</TestButton>
74
+ <TestButton aria-expanded="false">Row 1</TestButton>
75
75
  </TreeGridCell>
76
76
  </TreeGridRow>
77
77
  <TreeGridRow
@@ -88,7 +88,7 @@ describe( 'TreeGrid', () => {
88
88
  level={ 1 }
89
89
  positionInSet={ 3 }
90
90
  setSize={ 3 }
91
- isExpanded={ true }
91
+ isExpanded={ false }
92
92
  >
93
93
  <TreeGridCell withoutGridItem>
94
94
  <TestButton>Row 3</TestButton>
@@ -97,16 +97,16 @@ describe( 'TreeGrid', () => {
97
97
  </TreeGrid>
98
98
  );
99
99
 
100
- screen.getByText( 'Row 2' ).focus();
101
- const row2Element = screen.getByText( 'Row 2' ).closest( 'tr' );
100
+ screen.getByText( 'Row 1' ).focus();
101
+ const row1Element = screen.getByText( 'Row 1' ).closest( 'tr' );
102
102
 
103
- fireEvent.keyDown( screen.getByText( 'Row 2' ), {
103
+ fireEvent.keyDown( screen.getByText( 'Row 1' ), {
104
104
  key: 'ArrowRight',
105
105
  keyCode: RIGHT,
106
- currentTarget: row2Element,
106
+ currentTarget: row1Element,
107
107
  } );
108
108
 
109
- expect( onExpandRow ).toHaveBeenCalledWith( row2Element );
109
+ expect( onExpandRow ).toHaveBeenCalledWith( row1Element );
110
110
  } );
111
111
  } );
112
112
 
@@ -120,17 +120,17 @@ describe( 'TreeGrid', () => {
120
120
  level={ 1 }
121
121
  positionInSet={ 1 }
122
122
  setSize={ 3 }
123
- isExpanded={ false }
123
+ isExpanded={ true }
124
124
  >
125
125
  <TreeGridCell withoutGridItem>
126
- <TestButton>Row 1</TestButton>
126
+ <TestButton aria-expanded="true">Row 1</TestButton>
127
127
  </TreeGridCell>
128
128
  </TreeGridRow>
129
129
  <TreeGridRow
130
130
  level={ 1 }
131
131
  positionInSet={ 2 }
132
132
  setSize={ 3 }
133
- isExpanded={ true }
133
+ isExpanded={ false }
134
134
  >
135
135
  <TreeGridCell withoutGridItem>
136
136
  <TestButton>Row 2</TestButton>
@@ -149,16 +149,16 @@ describe( 'TreeGrid', () => {
149
149
  </TreeGrid>
150
150
  );
151
151
 
152
- screen.getByText( 'Row 2' ).focus();
153
- const row2Element = screen.getByText( 'Row 2' ).closest( 'tr' );
152
+ screen.getByText( 'Row 1' ).focus();
153
+ const row1Element = screen.getByText( 'Row 1' ).closest( 'tr' );
154
154
 
155
- fireEvent.keyDown( screen.getByText( 'Row 2' ), {
155
+ fireEvent.keyDown( screen.getByText( 'Row 1' ), {
156
156
  key: 'ArrowLeft',
157
157
  keyCode: LEFT,
158
- currentTarget: row2Element,
158
+ currentTarget: row1Element,
159
159
  } );
160
160
 
161
- expect( onCollapseRow ).toHaveBeenCalledWith( row2Element );
161
+ expect( onCollapseRow ).toHaveBeenCalledWith( row1Element );
162
162
  } );
163
163
  } );
164
164
 
@@ -205,6 +205,28 @@ describe( 'TreeGrid', () => {
205
205
  );
206
206
  } );
207
207
 
208
+ it( 'should call onFocusRow with event, start and end nodes when pressing End', () => {
209
+ const onFocusRow = jest.fn();
210
+ render( <TestTree onFocusRow={ onFocusRow } /> );
211
+
212
+ screen.getByText( 'Row 1' ).focus();
213
+
214
+ const row1Element = screen.getByText( 'Row 1' ).closest( 'tr' );
215
+ const row3Element = screen.getByText( 'Row 3' ).closest( 'tr' );
216
+
217
+ fireEvent.keyDown( screen.getByText( 'Row 1' ), {
218
+ key: 'End',
219
+ keyCode: END,
220
+ currentTarget: row1Element,
221
+ } );
222
+
223
+ expect( onFocusRow ).toHaveBeenCalledWith(
224
+ expect.objectContaining( { key: 'End', keyCode: END } ),
225
+ row1Element,
226
+ row3Element
227
+ );
228
+ } );
229
+
208
230
  it( 'should call onFocusRow with event, start and end nodes when pressing Up Arrow', () => {
209
231
  const onFocusRow = jest.fn();
210
232
  render( <TestTree onFocusRow={ onFocusRow } /> );
@@ -227,6 +249,28 @@ describe( 'TreeGrid', () => {
227
249
  );
228
250
  } );
229
251
 
252
+ it( 'should call onFocusRow with event, start and end nodes when pressing Home', () => {
253
+ const onFocusRow = jest.fn();
254
+ render( <TestTree onFocusRow={ onFocusRow } /> );
255
+
256
+ screen.getByText( 'Row 3' ).focus();
257
+
258
+ const row3Element = screen.getByText( 'Row 3' ).closest( 'tr' );
259
+ const row1Element = screen.getByText( 'Row 1' ).closest( 'tr' );
260
+
261
+ fireEvent.keyDown( screen.getByText( 'Row 3' ), {
262
+ key: 'Home',
263
+ keyCode: HOME,
264
+ currentTarget: row3Element,
265
+ } );
266
+
267
+ expect( onFocusRow ).toHaveBeenCalledWith(
268
+ expect.objectContaining( { key: 'Home', keyCode: HOME } ),
269
+ row3Element,
270
+ row1Element
271
+ );
272
+ } );
273
+
230
274
  it( 'should call onFocusRow when shift key is held', () => {
231
275
  const onFocusRow = jest.fn();
232
276
  render( <TestTree onFocusRow={ onFocusRow } /> );
@@ -4,7 +4,7 @@
4
4
  This feature is still experimental. “Experimental” means this is an early implementation subject to drastic and breaking changes.
5
5
  </div>
6
6
 
7
- UnitControl allows the user to set a value as well as a unit (e.g. `px`).
7
+ `UnitControl` allows the user to set a numeric quantity as well as a unit (e.g. `px`).
8
8
 
9
9
  ## Usage
10
10
 
@@ -61,19 +61,23 @@ The position of the label (`top`, `side`, `bottom`, or `edge`).
61
61
 
62
62
  - Required: No
63
63
 
64
+ ### `onBlur`: `FocusEventHandler< HTMLInputElement | HTMLSelectElement >`
65
+
66
+ Callback invoked when either the quantity or unit inputs fire the `blur` event.
67
+
68
+ - Required: No
69
+
64
70
  ### `onChange`: `UnitControlOnChangeCallback`
65
71
 
66
72
  Callback when the `value` changes.
67
73
 
68
74
  - Required: No
69
- - Default: `noop`
70
75
 
71
76
  ### `onUnitChange`: `UnitControlOnChangeCallback`
72
77
 
73
78
  Callback when the `unit` changes.
74
79
 
75
80
  - Required: No
76
- - Default: `noop`
77
81
 
78
82
  ### `size`: `string`
79
83
 
@@ -7,23 +7,23 @@ import type {
7
7
  ForwardedRef,
8
8
  SyntheticEvent,
9
9
  ChangeEvent,
10
+ PointerEvent,
10
11
  } from 'react';
11
- import { noop, omit } from 'lodash';
12
+ import { omit } from 'lodash';
12
13
  import classnames from 'classnames';
13
14
 
14
15
  /**
15
16
  * WordPress dependencies
16
17
  */
18
+ import deprecated from '@wordpress/deprecated';
17
19
  import { forwardRef, useMemo, useRef, useEffect } from '@wordpress/element';
18
20
  import { __ } from '@wordpress/i18n';
19
- import { ENTER } from '@wordpress/keycodes';
20
21
 
21
22
  /**
22
23
  * Internal dependencies
23
24
  */
24
25
  import type { WordPressComponentProps } from '../ui/context';
25
26
  import * as inputControlActionTypes from '../input-control/reducer/actions';
26
- import { composeStateReducers } from '../input-control/reducer/reducer';
27
27
  import { Root, ValueInput } from './styles/unit-control-styles';
28
28
  import UnitSelectControl from './unit-select-control';
29
29
  import {
@@ -36,9 +36,16 @@ import { useControlledState } from '../utils/hooks';
36
36
  import type { UnitControlProps, UnitControlOnChangeCallback } from './types';
37
37
  import type { StateReducer } from '../input-control/reducer/state';
38
38
 
39
- function UnitControl(
40
- {
41
- __unstableStateReducer: stateReducer = ( state ) => state,
39
+ function UnforwardedUnitControl(
40
+ unitControlProps: WordPressComponentProps<
41
+ UnitControlProps,
42
+ 'input',
43
+ false
44
+ >,
45
+ forwardedRef: ForwardedRef< any >
46
+ ) {
47
+ const {
48
+ __unstableStateReducer: stateReducerProp,
42
49
  autoComplete = 'off',
43
50
  className,
44
51
  disabled = false,
@@ -47,17 +54,25 @@ function UnitControl(
47
54
  isResetValueOnUnitChange = false,
48
55
  isUnitSelectTabbable = true,
49
56
  label,
50
- onChange = noop,
51
- onUnitChange = noop,
57
+ onChange: onChangeProp,
58
+ onUnitChange,
52
59
  size = 'default',
53
60
  style,
54
61
  unit: unitProp,
55
62
  units: unitsProp = CSS_UNITS,
56
63
  value: valueProp,
64
+ onBlur: onBlurProp,
57
65
  ...props
58
- }: WordPressComponentProps< UnitControlProps, 'input', false >,
59
- forwardedRef: ForwardedRef< any >
60
- ) {
66
+ } = unitControlProps;
67
+
68
+ if ( 'unit' in unitControlProps ) {
69
+ deprecated( 'UnitControl unit prop', {
70
+ since: '5.6',
71
+ hint: 'The unit should be provided within the `value` prop.',
72
+ version: '6.2',
73
+ } );
74
+ }
75
+
61
76
  // The `value` prop, in theory, should not be `null`, but the following line
62
77
  // ensures it fallback to `undefined` in case a consumer of `UnitControl`
63
78
  // still passes `null` as a `value`.
@@ -81,7 +96,9 @@ function UnitControl(
81
96
  );
82
97
 
83
98
  useEffect( () => {
84
- setUnit( parsedUnit );
99
+ if ( parsedUnit !== undefined ) {
100
+ setUnit( parsedUnit );
101
+ }
85
102
  }, [ parsedUnit ] );
86
103
 
87
104
  // Stores parsed value for hand-off in state reducer.
@@ -91,14 +108,18 @@ function UnitControl(
91
108
 
92
109
  const handleOnQuantityChange = (
93
110
  nextQuantityValue: number | string | undefined,
94
- changeProps: { event: ChangeEvent< HTMLInputElement > }
111
+ changeProps: {
112
+ event:
113
+ | ChangeEvent< HTMLInputElement >
114
+ | PointerEvent< HTMLInputElement >;
115
+ }
95
116
  ) => {
96
117
  if (
97
118
  nextQuantityValue === '' ||
98
119
  typeof nextQuantityValue === 'undefined' ||
99
120
  nextQuantityValue === null
100
121
  ) {
101
- onChange( '', changeProps );
122
+ onChangeProp?.( '', changeProps );
102
123
  return;
103
124
  }
104
125
 
@@ -113,7 +134,7 @@ function UnitControl(
113
134
  unit
114
135
  ).join( '' );
115
136
 
116
- onChange( onChangeValue, changeProps );
137
+ onChangeProp?.( onChangeValue, changeProps );
117
138
  };
118
139
 
119
140
  const handleOnUnitChange: UnitControlOnChangeCallback = (
@@ -128,8 +149,8 @@ function UnitControl(
128
149
  nextValue = `${ data.default }${ nextUnitValue }`;
129
150
  }
130
151
 
131
- onChange( nextValue, changeProps );
132
- onUnitChange( nextUnitValue, changeProps );
152
+ onChangeProp?.( nextValue, changeProps );
153
+ onUnitChange?.( nextUnitValue, changeProps );
133
154
 
134
155
  setUnit( nextUnitValue );
135
156
  };
@@ -157,21 +178,24 @@ function UnitControl(
157
178
  : undefined;
158
179
  const changeProps = { event, data };
159
180
 
160
- onChange(
181
+ onChangeProp?.(
161
182
  `${ validParsedQuantity ?? '' }${ validParsedUnit }`,
162
183
  changeProps
163
184
  );
164
- onUnitChange( validParsedUnit, changeProps );
185
+ onUnitChange?.( validParsedUnit, changeProps );
165
186
 
166
187
  setUnit( validParsedUnit );
167
188
  }
168
189
  };
169
190
 
170
- const handleOnBlur: FocusEventHandler< HTMLInputElement > = mayUpdateUnit;
191
+ const handleOnBlur: FocusEventHandler< HTMLInputElement > = ( event ) => {
192
+ mayUpdateUnit( event );
193
+ onBlurProp?.( event );
194
+ };
171
195
 
172
196
  const handleOnKeyDown = ( event: KeyboardEvent< HTMLInputElement > ) => {
173
- const { keyCode } = event;
174
- if ( keyCode === ENTER ) {
197
+ const { key } = event;
198
+ if ( key === 'Enter' ) {
175
199
  mayUpdateUnit( event );
176
200
  }
177
201
  };
@@ -186,6 +210,8 @@ function UnitControl(
186
210
  * @return The updated state to apply to InputControl
187
211
  */
188
212
  const unitControlStateReducer: StateReducer = ( state, action ) => {
213
+ const nextState = { ...state };
214
+
189
215
  /*
190
216
  * On commits (when pressing ENTER and on blur if
191
217
  * isPressEnterToChange is true), if a parse has been performed
@@ -193,14 +219,24 @@ function UnitControl(
193
219
  */
194
220
  if ( action.type === inputControlActionTypes.COMMIT ) {
195
221
  if ( refParsedQuantity.current !== undefined ) {
196
- state.value = ( refParsedQuantity.current ?? '' ).toString();
222
+ nextState.value = (
223
+ refParsedQuantity.current ?? ''
224
+ ).toString();
197
225
  refParsedQuantity.current = undefined;
198
226
  }
199
227
  }
200
228
 
201
- return state;
229
+ return nextState;
202
230
  };
203
231
 
232
+ let stateReducer: StateReducer = unitControlStateReducer;
233
+ if ( stateReducerProp ) {
234
+ stateReducer = ( state, action ) => {
235
+ const baseState = unitControlStateReducer( state, action );
236
+ return stateReducerProp( baseState, action );
237
+ };
238
+ }
239
+
204
240
  const inputSuffix = ! disableUnits ? (
205
241
  <UnitSelectControl
206
242
  aria-label={ __( 'Select unit' ) }
@@ -210,6 +246,7 @@ function UnitControl(
210
246
  size={ size }
211
247
  unit={ unit }
212
248
  units={ units }
249
+ onBlur={ onBlurProp }
213
250
  />
214
251
  ) : null;
215
252
 
@@ -244,17 +281,14 @@ function UnitControl(
244
281
  suffix={ inputSuffix }
245
282
  value={ parsedQuantity ?? '' }
246
283
  step={ step }
247
- __unstableStateReducer={ composeStateReducers(
248
- unitControlStateReducer,
249
- stateReducer
250
- ) }
284
+ __unstableStateReducer={ stateReducer }
251
285
  />
252
286
  </Root>
253
287
  );
254
288
  }
255
289
 
256
290
  /**
257
- * `UnitControl` allows the user to set a value as well as a unit (e.g. `px`).
291
+ * `UnitControl` allows the user to set a numeric quantity as well as a unit (e.g. `px`).
258
292
  *
259
293
  *
260
294
  * @example
@@ -269,7 +303,7 @@ function UnitControl(
269
303
  * };
270
304
  * ```
271
305
  */
272
- const ForwardedUnitControl = forwardRef( UnitControl );
306
+ export const UnitControl = forwardRef( UnforwardedUnitControl );
273
307
 
274
308
  export { parseQuantityAndUnitFromRawValue, useCustomUnits } from './utils';
275
- export default ForwardedUnitControl;
309
+ export default UnitControl;
@@ -0,0 +1,170 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useState } from '@wordpress/element';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import { UnitControl } from '../';
15
+ import { CSS_UNITS } from '../utils';
16
+
17
+ const meta: ComponentMeta< typeof UnitControl > = {
18
+ component: UnitControl,
19
+ title: 'Components (Experimental)/UnitControl',
20
+ argTypes: {
21
+ __unstableInputWidth: {
22
+ control: { type: 'text' },
23
+ },
24
+ __unstableStateReducer: {
25
+ control: { type: null },
26
+ },
27
+ size: {
28
+ control: { type: 'select' },
29
+ },
30
+ onChange: {
31
+ action: 'onChange',
32
+ control: { type: null },
33
+ },
34
+ onUnitChange: {
35
+ control: { type: null },
36
+ },
37
+ value: {
38
+ control: { type: null },
39
+ },
40
+ },
41
+ parameters: {
42
+ controls: {
43
+ expanded: true,
44
+ },
45
+ docs: { source: { state: 'open' } },
46
+ },
47
+ };
48
+ export default meta;
49
+
50
+ const DefaultTemplate: ComponentStory< typeof UnitControl > = ( {
51
+ onChange,
52
+ ...args
53
+ } ) => {
54
+ const [ value, setValue ] = useState< string | undefined >( '10px' );
55
+
56
+ return (
57
+ <div style={ { maxWidth: '100px' } }>
58
+ <UnitControl
59
+ { ...args }
60
+ value={ value }
61
+ onChange={ ( v, extra ) => {
62
+ setValue( v );
63
+ onChange?.( v, extra );
64
+ } }
65
+ />
66
+ </div>
67
+ );
68
+ };
69
+
70
+ export const Default: ComponentStory<
71
+ typeof UnitControl
72
+ > = DefaultTemplate.bind( {} );
73
+ Default.args = {
74
+ label: 'Label',
75
+ };
76
+
77
+ /**
78
+ * If the `isPressEnterToChange` prop is set to `true`, the `onChange` callback
79
+ * will not fire while a new value is typed in the input field (you can verify this
80
+ * behavior by inspecting the console's output).
81
+ */
82
+ export const PressEnterToChange: ComponentStory<
83
+ typeof UnitControl
84
+ > = DefaultTemplate.bind( {} );
85
+ PressEnterToChange.args = {
86
+ ...Default.args,
87
+ isPressEnterToChange: true,
88
+ onChange: ( v ) => {
89
+ // eslint-disable-next-line no-console
90
+ console.log( v );
91
+ },
92
+ };
93
+
94
+ /**
95
+ * Most of `NumberControl`'s props can be passed to `UnitControl`, and they will
96
+ * affect its numeric input field.
97
+ */
98
+ export const TweakingTheNumberInput: ComponentStory<
99
+ typeof UnitControl
100
+ > = DefaultTemplate.bind( {} );
101
+ TweakingTheNumberInput.args = {
102
+ ...Default.args,
103
+ min: 0,
104
+ max: 100,
105
+ step: 'any',
106
+ label: 'Custom label',
107
+ };
108
+
109
+ /**
110
+ * When only one unit is available, the unit selection dropdown becomes static text.
111
+ */
112
+ export const WithSingleUnit: ComponentStory<
113
+ typeof UnitControl
114
+ > = DefaultTemplate.bind( {} );
115
+ WithSingleUnit.args = {
116
+ ...Default.args,
117
+ units: CSS_UNITS.slice( 0, 1 ),
118
+ };
119
+
120
+ /**
121
+ * It is possible to pass a custom list of units. Every time the unit changes,
122
+ * if the `isResetValueOnUnitChange` is set to `true`, the input's quantity is
123
+ * reset to the new unit's default value.
124
+ */
125
+ export const WithCustomUnits: ComponentStory< typeof UnitControl > = ( {
126
+ onChange,
127
+ ...args
128
+ } ) => {
129
+ const [ value, setValue ] = useState< string | undefined >( '80km' );
130
+
131
+ return (
132
+ <div style={ { maxWidth: '100px' } }>
133
+ <UnitControl
134
+ { ...args }
135
+ value={ value }
136
+ onChange={ ( v, extra ) => {
137
+ setValue( v );
138
+ onChange?.( v, extra );
139
+ } }
140
+ />
141
+ </div>
142
+ );
143
+ };
144
+ WithCustomUnits.args = {
145
+ ...Default.args,
146
+ isResetValueOnUnitChange: true,
147
+ min: 0,
148
+ units: [
149
+ {
150
+ value: 'km',
151
+ label: 'km',
152
+ default: 1,
153
+ },
154
+ {
155
+ value: 'mi',
156
+ label: 'mi',
157
+ default: 1,
158
+ },
159
+ {
160
+ value: 'm',
161
+ label: 'm',
162
+ default: 1000,
163
+ },
164
+ {
165
+ value: 'yd',
166
+ label: 'yd',
167
+ default: 1760,
168
+ },
169
+ ],
170
+ };