@wordpress/components 22.1.0 → 23.0.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 (530) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/build/alignment-matrix-control/cell.js.map +1 -1
  3. package/build/alignment-matrix-control/icon.js +4 -2
  4. package/build/alignment-matrix-control/icon.js.map +1 -1
  5. package/build/alignment-matrix-control/index.js +25 -1
  6. package/build/alignment-matrix-control/index.js.map +1 -1
  7. package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
  8. package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
  9. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
  10. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  11. package/build/alignment-matrix-control/types.js +6 -0
  12. package/build/alignment-matrix-control/types.js.map +1 -0
  13. package/build/alignment-matrix-control/utils.js +9 -8
  14. package/build/alignment-matrix-control/utils.js.map +1 -1
  15. package/build/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
  16. package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  17. package/build/autocomplete/index.js +38 -9
  18. package/build/autocomplete/index.js.map +1 -1
  19. package/build/base-control/hooks.js +52 -0
  20. package/build/base-control/hooks.js.map +1 -0
  21. package/build/base-control/index.js +24 -7
  22. package/build/base-control/index.js.map +1 -1
  23. package/build/base-field/hook.js +0 -14
  24. package/build/base-field/hook.js.map +1 -1
  25. package/build/base-field/index.js.map +1 -1
  26. package/build/base-field/styles.js +5 -5
  27. package/build/base-field/styles.js.map +1 -1
  28. package/build/base-field/types.js +6 -0
  29. package/build/base-field/types.js.map +1 -0
  30. package/build/border-control/border-control/component.js +1 -0
  31. package/build/border-control/border-control/component.js.map +1 -1
  32. package/build/border-control/styles.js +16 -16
  33. package/build/border-control/styles.js.map +1 -1
  34. package/build/box-control/linked-button.js +3 -4
  35. package/build/box-control/linked-button.js.map +1 -1
  36. package/build/color-palette/index.js +2 -7
  37. package/build/color-palette/index.js.map +1 -1
  38. package/build/color-picker/input-with-slider.js +1 -0
  39. package/build/color-picker/input-with-slider.js.map +1 -1
  40. package/build/color-picker/styles.js +8 -8
  41. package/build/color-picker/styles.js.map +1 -1
  42. package/build/custom-select-control/index.js +14 -2
  43. package/build/custom-select-control/index.js.map +1 -1
  44. package/build/dashicon/index.js +1 -4
  45. package/build/dashicon/index.js.map +1 -1
  46. package/build/date-time/date-time/index.js +4 -4
  47. package/build/date-time/date-time/index.js.map +1 -1
  48. package/build/duotone-picker/duotone-picker.js +2 -2
  49. package/build/duotone-picker/duotone-picker.js.map +1 -1
  50. package/build/gradient-picker/index.js +3 -9
  51. package/build/gradient-picker/index.js.map +1 -1
  52. package/build/higher-order/with-fallback-styles/index.js +2 -2
  53. package/build/higher-order/with-fallback-styles/index.js.map +1 -1
  54. package/build/index.js +13 -1
  55. package/build/index.js.map +1 -1
  56. package/build/input-control/index.js +17 -5
  57. package/build/input-control/index.js.map +1 -1
  58. package/build/input-control/input-base.js +2 -0
  59. package/build/input-control/input-base.js.map +1 -1
  60. package/build/mobile/bottom-sheet/cell.native.js +1 -1
  61. package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
  62. package/build/mobile/bottom-sheet/switch-cell.native.js +1 -3
  63. package/build/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  64. package/build/mobile/global-styles-context/index.native.js +8 -8
  65. package/build/mobile/global-styles-context/index.native.js.map +1 -1
  66. package/build/mobile/keyboard-aware-flat-list/index.ios.js +4 -2
  67. package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  68. package/build/modal/index.js +8 -0
  69. package/build/modal/index.js.map +1 -1
  70. package/build/navigator/navigator-provider/component.js +12 -8
  71. package/build/navigator/navigator-provider/component.js.map +1 -1
  72. package/build/number-control/styles/number-control-styles.js +8 -8
  73. package/build/number-control/styles/number-control-styles.js.map +1 -1
  74. package/build/palette-edit/index.js +72 -33
  75. package/build/palette-edit/index.js.map +1 -1
  76. package/build/popover/index.js +10 -2
  77. package/build/popover/index.js.map +1 -1
  78. package/build/query-controls/index.js +1 -0
  79. package/build/query-controls/index.js.map +1 -1
  80. package/build/snackbar/index.js +35 -24
  81. package/build/snackbar/index.js.map +1 -1
  82. package/build/snackbar/list.js +14 -19
  83. package/build/snackbar/list.js.map +1 -1
  84. package/build/snackbar/types.js +6 -0
  85. package/build/snackbar/types.js.map +1 -0
  86. package/build/tab-panel/index.js +10 -5
  87. package/build/tab-panel/index.js.map +1 -1
  88. package/build/theme/color-algorithms.js +118 -0
  89. package/build/theme/color-algorithms.js.map +1 -0
  90. package/build/theme/index.js +21 -18
  91. package/build/theme/index.js.map +1 -1
  92. package/build/theme/styles.js +10 -7
  93. package/build/theme/styles.js.map +1 -1
  94. package/build/toggle-control/index.js +5 -2
  95. package/build/toggle-control/index.js.map +1 -1
  96. package/build/ui/context/context-system-provider.js +3 -1
  97. package/build/ui/context/context-system-provider.js.map +1 -1
  98. package/build/unit-control/index.js +5 -2
  99. package/build/unit-control/index.js.map +1 -1
  100. package/build/utils/colors-values.js +1 -1
  101. package/build/utils/colors-values.js.map +1 -1
  102. package/build/utils/config-values.js +0 -2
  103. package/build/utils/config-values.js.map +1 -1
  104. package/build/utils/hooks/use-controlled-value.js.map +1 -1
  105. package/build-module/alignment-matrix-control/cell.js.map +1 -1
  106. package/build-module/alignment-matrix-control/icon.js +4 -2
  107. package/build-module/alignment-matrix-control/icon.js.map +1 -1
  108. package/build-module/alignment-matrix-control/index.js +23 -1
  109. package/build-module/alignment-matrix-control/index.js.map +1 -1
  110. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
  111. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
  112. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
  113. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  114. package/build-module/alignment-matrix-control/types.js +2 -0
  115. package/build-module/alignment-matrix-control/types.js.map +1 -0
  116. package/build-module/alignment-matrix-control/utils.js +13 -8
  117. package/build-module/alignment-matrix-control/utils.js.map +1 -1
  118. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
  119. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  120. package/build-module/autocomplete/index.js +38 -9
  121. package/build-module/autocomplete/index.js.map +1 -1
  122. package/build-module/base-control/hooks.js +41 -0
  123. package/build-module/base-control/hooks.js.map +1 -0
  124. package/build-module/base-control/index.js +18 -8
  125. package/build-module/base-control/index.js.map +1 -1
  126. package/build-module/base-field/hook.js +0 -14
  127. package/build-module/base-field/hook.js.map +1 -1
  128. package/build-module/base-field/index.js.map +1 -1
  129. package/build-module/base-field/styles.js +5 -5
  130. package/build-module/base-field/styles.js.map +1 -1
  131. package/build-module/base-field/types.js +2 -0
  132. package/build-module/base-field/types.js.map +1 -0
  133. package/build-module/border-control/border-control/component.js +1 -0
  134. package/build-module/border-control/border-control/component.js.map +1 -1
  135. package/build-module/border-control/styles.js +17 -17
  136. package/build-module/border-control/styles.js.map +1 -1
  137. package/build-module/box-control/linked-button.js +3 -4
  138. package/build-module/box-control/linked-button.js.map +1 -1
  139. package/build-module/color-palette/index.js +2 -7
  140. package/build-module/color-palette/index.js.map +1 -1
  141. package/build-module/color-picker/input-with-slider.js +1 -0
  142. package/build-module/color-picker/input-with-slider.js.map +1 -1
  143. package/build-module/color-picker/styles.js +8 -8
  144. package/build-module/color-picker/styles.js.map +1 -1
  145. package/build-module/custom-select-control/index.js +14 -2
  146. package/build-module/custom-select-control/index.js.map +1 -1
  147. package/build-module/dashicon/index.js +1 -4
  148. package/build-module/dashicon/index.js.map +1 -1
  149. package/build-module/date-time/date-time/index.js +4 -4
  150. package/build-module/date-time/date-time/index.js.map +1 -1
  151. package/build-module/duotone-picker/duotone-picker.js +2 -2
  152. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  153. package/build-module/gradient-picker/index.js +3 -8
  154. package/build-module/gradient-picker/index.js.map +1 -1
  155. package/build-module/higher-order/with-fallback-styles/index.js +2 -2
  156. package/build-module/higher-order/with-fallback-styles/index.js.map +1 -1
  157. package/build-module/index.js +2 -2
  158. package/build-module/index.js.map +1 -1
  159. package/build-module/input-control/index.js +16 -5
  160. package/build-module/input-control/index.js.map +1 -1
  161. package/build-module/input-control/input-base.js +2 -0
  162. package/build-module/input-control/input-base.js.map +1 -1
  163. package/build-module/mobile/bottom-sheet/cell.native.js +1 -1
  164. package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
  165. package/build-module/mobile/bottom-sheet/switch-cell.native.js +1 -2
  166. package/build-module/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  167. package/build-module/mobile/global-styles-context/index.native.js +8 -7
  168. package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
  169. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
  170. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  171. package/build-module/modal/index.js +8 -0
  172. package/build-module/modal/index.js.map +1 -1
  173. package/build-module/navigator/navigator-provider/component.js +12 -8
  174. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  175. package/build-module/number-control/styles/number-control-styles.js +8 -10
  176. package/build-module/number-control/styles/number-control-styles.js.map +1 -1
  177. package/build-module/palette-edit/index.js +73 -34
  178. package/build-module/palette-edit/index.js.map +1 -1
  179. package/build-module/popover/index.js +10 -2
  180. package/build-module/popover/index.js.map +1 -1
  181. package/build-module/query-controls/index.js +1 -0
  182. package/build-module/query-controls/index.js.map +1 -1
  183. package/build-module/snackbar/index.js +33 -23
  184. package/build-module/snackbar/index.js.map +1 -1
  185. package/build-module/snackbar/list.js +14 -22
  186. package/build-module/snackbar/list.js.map +1 -1
  187. package/build-module/snackbar/types.js +2 -0
  188. package/build-module/snackbar/types.js.map +1 -0
  189. package/build-module/tab-panel/index.js +10 -5
  190. package/build-module/tab-panel/index.js.map +1 -1
  191. package/build-module/theme/color-algorithms.js +105 -0
  192. package/build-module/theme/color-algorithms.js.map +1 -0
  193. package/build-module/theme/index.js +21 -17
  194. package/build-module/theme/index.js.map +1 -1
  195. package/build-module/theme/styles.js +8 -6
  196. package/build-module/theme/styles.js.map +1 -1
  197. package/build-module/toggle-control/index.js +4 -2
  198. package/build-module/toggle-control/index.js.map +1 -1
  199. package/build-module/ui/context/context-system-provider.js +3 -2
  200. package/build-module/ui/context/context-system-provider.js.map +1 -1
  201. package/build-module/unit-control/index.js +5 -2
  202. package/build-module/unit-control/index.js.map +1 -1
  203. package/build-module/utils/colors-values.js +1 -1
  204. package/build-module/utils/colors-values.js.map +1 -1
  205. package/build-module/utils/config-values.js +0 -2
  206. package/build-module/utils/config-values.js.map +1 -1
  207. package/build-module/utils/hooks/use-controlled-value.js.map +1 -1
  208. package/build-style/style-rtl.css +92 -75
  209. package/build-style/style.css +92 -75
  210. package/build-types/alignment-matrix-control/cell.d.ts +5 -0
  211. package/build-types/alignment-matrix-control/cell.d.ts.map +1 -0
  212. package/build-types/alignment-matrix-control/icon.d.ts +6 -0
  213. package/build-types/alignment-matrix-control/icon.d.ts.map +1 -0
  214. package/build-types/alignment-matrix-control/index.d.ts +30 -0
  215. package/build-types/alignment-matrix-control/index.d.ts.map +1 -0
  216. package/build-types/alignment-matrix-control/stories/index.d.ts +14 -0
  217. package/build-types/alignment-matrix-control/stories/index.d.ts.map +1 -0
  218. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts +19 -0
  219. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts.map +1 -0
  220. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts +23 -0
  221. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -0
  222. package/build-types/alignment-matrix-control/test/index.d.ts +2 -0
  223. package/build-types/alignment-matrix-control/test/index.d.ts.map +1 -0
  224. package/build-types/alignment-matrix-control/types.d.ts +39 -0
  225. package/build-types/alignment-matrix-control/types.d.ts.map +1 -0
  226. package/build-types/alignment-matrix-control/utils.d.ts +33 -0
  227. package/build-types/alignment-matrix-control/utils.d.ts.map +1 -0
  228. package/build-types/base-control/hooks.d.ts +23 -0
  229. package/build-types/base-control/hooks.d.ts.map +1 -0
  230. package/build-types/base-control/index.d.ts +17 -7
  231. package/build-types/base-control/index.d.ts.map +1 -1
  232. package/build-types/base-control/stories/index.d.ts.map +1 -1
  233. package/build-types/base-control/test/index.d.ts +2 -0
  234. package/build-types/base-control/test/index.d.ts.map +1 -0
  235. package/build-types/base-control/types.d.ts +8 -2
  236. package/build-types/base-control/types.d.ts.map +1 -1
  237. package/build-types/base-field/hook.d.ts +7 -31
  238. package/build-types/base-field/hook.d.ts.map +1 -1
  239. package/build-types/base-field/index.d.ts +1 -1
  240. package/build-types/base-field/index.d.ts.map +1 -1
  241. package/build-types/base-field/styles.d.ts +5 -5
  242. package/build-types/base-field/styles.d.ts.map +1 -1
  243. package/build-types/base-field/test/index.d.ts +2 -0
  244. package/build-types/base-field/test/index.d.ts.map +1 -0
  245. package/build-types/base-field/types.d.ts +29 -0
  246. package/build-types/base-field/types.d.ts.map +1 -0
  247. package/build-types/border-box-control/border-box-control/hook.d.ts +2 -2
  248. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +2 -2
  249. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +2 -2
  250. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +2 -2
  251. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  252. package/build-types/border-control/border-control/hook.d.ts +2 -2
  253. package/build-types/border-control/border-control-dropdown/hook.d.ts +2 -2
  254. package/build-types/border-control/border-control-style-picker/hook.d.ts +2 -2
  255. package/build-types/border-control/styles.d.ts.map +1 -1
  256. package/build-types/card/card/hook.d.ts +2 -2
  257. package/build-types/card/card-body/hook.d.ts +2 -2
  258. package/build-types/card/card-divider/hook.d.ts +2 -2
  259. package/build-types/card/card-footer/hook.d.ts +2 -2
  260. package/build-types/card/card-header/hook.d.ts +2 -2
  261. package/build-types/card/card-media/hook.d.ts +2 -2
  262. package/build-types/color-palette/index.d.ts +2 -2
  263. package/build-types/color-palette/index.d.ts.map +1 -1
  264. package/build-types/color-palette/stories/index.d.ts +6 -7
  265. package/build-types/color-palette/stories/index.d.ts.map +1 -1
  266. package/build-types/color-palette/styles.d.ts +1 -1
  267. package/build-types/color-palette/types.d.ts +1 -1
  268. package/build-types/color-palette/types.d.ts.map +1 -1
  269. package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
  270. package/build-types/color-picker/styles.d.ts +5 -5
  271. package/build-types/color-picker/styles.d.ts.map +1 -1
  272. package/build-types/custom-select-control/index.d.ts.map +1 -1
  273. package/build-types/dashicon/index.d.ts +6 -20
  274. package/build-types/dashicon/index.d.ts.map +1 -1
  275. package/build-types/dashicon/types.d.ts +14 -0
  276. package/build-types/dashicon/types.d.ts.map +1 -1
  277. package/build-types/date-time/date/styles.d.ts +3 -3
  278. package/build-types/date-time/date-time/styles.d.ts +3 -3
  279. package/build-types/date-time/time/styles.d.ts +8 -8
  280. package/build-types/elevation/hook.d.ts +2 -2
  281. package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
  282. package/build-types/flex/flex/hook.d.ts +2 -2
  283. package/build-types/flex/flex-block/hook.d.ts +2 -2
  284. package/build-types/flex/flex-item/hook.d.ts +2 -2
  285. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +2 -5
  286. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts.map +1 -1
  287. package/build-types/grid/hook.d.ts +2 -2
  288. package/build-types/h-stack/component.d.ts +1 -1
  289. package/build-types/h-stack/hook.d.ts +2 -2
  290. package/build-types/heading/hook.d.ts +2 -2
  291. package/build-types/input-control/index.d.ts +1 -1
  292. package/build-types/input-control/index.d.ts.map +1 -1
  293. package/build-types/input-control/input-base.d.ts.map +1 -1
  294. package/build-types/input-control/stories/index.d.ts +1 -0
  295. package/build-types/input-control/stories/index.d.ts.map +1 -1
  296. package/build-types/input-control/types.d.ts +2 -1
  297. package/build-types/input-control/types.d.ts.map +1 -1
  298. package/build-types/item-group/item/hook.d.ts +2 -2
  299. package/build-types/item-group/item-group/hook.d.ts +2 -2
  300. package/build-types/modal/index.d.ts.map +1 -1
  301. package/build-types/modal/stories/index.d.ts.map +1 -1
  302. package/build-types/navigator/navigator-back-button/hook.d.ts +3 -3
  303. package/build-types/navigator/navigator-button/hook.d.ts +3 -3
  304. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  305. package/build-types/number-control/index.d.ts +2 -2
  306. package/build-types/number-control/index.d.ts.map +1 -1
  307. package/build-types/number-control/stories/index.d.ts +25 -0
  308. package/build-types/number-control/stories/index.d.ts.map +1 -0
  309. package/build-types/number-control/styles/number-control-styles.d.ts +6 -6
  310. package/build-types/number-control/styles/number-control-styles.d.ts.map +1 -1
  311. package/build-types/number-control/test/index.d.ts +2 -0
  312. package/build-types/number-control/test/index.d.ts.map +1 -0
  313. package/build-types/popover/index.d.ts +1 -1
  314. package/build-types/popover/index.d.ts.map +1 -1
  315. package/build-types/popover/stories/e2e/index.d.ts +1 -1
  316. package/build-types/range-control/index.d.ts +1 -1
  317. package/build-types/range-control/styles/range-control-styles.d.ts +2 -2
  318. package/build-types/resizable-box/resize-tooltip/index.d.ts +15 -19
  319. package/build-types/resizable-box/resize-tooltip/index.d.ts.map +1 -1
  320. package/build-types/resizable-box/resize-tooltip/label.d.ts +4 -3
  321. package/build-types/resizable-box/resize-tooltip/label.d.ts.map +1 -1
  322. package/build-types/scrollable/hook.d.ts +2 -2
  323. package/build-types/search-control/index.d.ts +1 -1
  324. package/build-types/search-control/stories/index.d.ts +2 -2
  325. package/build-types/snackbar/index.d.ts +19 -0
  326. package/build-types/snackbar/index.d.ts.map +1 -0
  327. package/build-types/snackbar/list.d.ts +18 -0
  328. package/build-types/snackbar/list.d.ts.map +1 -0
  329. package/build-types/snackbar/stories/index.d.ts +16 -0
  330. package/build-types/snackbar/stories/index.d.ts.map +1 -0
  331. package/build-types/snackbar/stories/list.d.ts +12 -0
  332. package/build-types/snackbar/stories/list.d.ts.map +1 -0
  333. package/build-types/snackbar/types.d.ts +111 -0
  334. package/build-types/snackbar/types.d.ts.map +1 -0
  335. package/build-types/spacer/hook.d.ts +2 -2
  336. package/build-types/spinner/index.d.ts +1 -1
  337. package/build-types/surface/hook.d.ts +2 -2
  338. package/build-types/tab-panel/index.d.ts +1 -1
  339. package/build-types/tab-panel/index.d.ts.map +1 -1
  340. package/build-types/tab-panel/types.d.ts +19 -1
  341. package/build-types/tab-panel/types.d.ts.map +1 -1
  342. package/build-types/text/hook.d.ts +2 -2
  343. package/build-types/text-control/index.d.ts +2 -2
  344. package/build-types/text-control/stories/index.d.ts.map +1 -1
  345. package/build-types/text-control/types.d.ts +1 -5
  346. package/build-types/text-control/types.d.ts.map +1 -1
  347. package/build-types/theme/color-algorithms.d.ts +20 -0
  348. package/build-types/theme/color-algorithms.d.ts.map +1 -0
  349. package/build-types/theme/index.d.ts +1 -1
  350. package/build-types/theme/index.d.ts.map +1 -1
  351. package/build-types/theme/stories/index.d.ts +4 -0
  352. package/build-types/theme/stories/index.d.ts.map +1 -1
  353. package/build-types/theme/styles.d.ts +3 -2
  354. package/build-types/theme/styles.d.ts.map +1 -1
  355. package/build-types/theme/test/color-algorithms.d.ts +2 -0
  356. package/build-types/theme/test/color-algorithms.d.ts.map +1 -0
  357. package/build-types/theme/types.d.ts +41 -3
  358. package/build-types/theme/types.d.ts.map +1 -1
  359. package/build-types/toggle-control/index.d.ts.map +1 -1
  360. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +2 -2
  361. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +2 -2
  362. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +1 -1
  363. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
  364. package/build-types/tools-panel/tools-panel/hook.d.ts +2 -2
  365. package/build-types/tools-panel/tools-panel-header/hook.d.ts +2 -2
  366. package/build-types/tools-panel/tools-panel-item/hook.d.ts +2 -2
  367. package/build-types/truncate/hook.d.ts +2 -2
  368. package/build-types/ui/context/context-system-provider.d.ts.map +1 -1
  369. package/build-types/ui/control-group/hook.d.ts +2 -2
  370. package/build-types/ui/control-label/hook.d.ts +2 -2
  371. package/build-types/ui/form-group/form-group.d.ts +2 -2
  372. package/build-types/ui/form-group/use-form-group.d.ts +5 -5
  373. package/build-types/unit-control/index.d.ts +2 -1
  374. package/build-types/unit-control/index.d.ts.map +1 -1
  375. package/build-types/unit-control/styles/unit-control-styles.d.ts +2 -2
  376. package/build-types/unit-control/types.d.ts +4 -0
  377. package/build-types/unit-control/types.d.ts.map +1 -1
  378. package/build-types/utils/config-values.d.ts +0 -2
  379. package/build-types/utils/hooks/use-controlled-value.d.ts +2 -1
  380. package/build-types/utils/hooks/use-controlled-value.d.ts.map +1 -1
  381. package/build-types/v-stack/component.d.ts +2 -2
  382. package/build-types/v-stack/hook.d.ts +2 -2
  383. package/build-types/v-stack/stories/index.d.ts +2 -2
  384. package/package.json +21 -20
  385. package/src/alignment-matrix-control/README.md +7 -7
  386. package/src/alignment-matrix-control/{cell.js → cell.tsx} +7 -1
  387. package/src/alignment-matrix-control/{icon.js → icon.tsx} +6 -3
  388. package/src/alignment-matrix-control/{index.js → index.tsx} +31 -4
  389. package/src/alignment-matrix-control/stories/{index.js → index.tsx} +17 -9
  390. package/src/alignment-matrix-control/styles/{alignment-matrix-control-icon-styles.js → alignment-matrix-control-icon-styles.ts} +11 -3
  391. package/src/alignment-matrix-control/styles/{alignment-matrix-control-styles.js → alignment-matrix-control-styles.ts} +13 -3
  392. package/src/alignment-matrix-control/test/{index.js → index.tsx} +5 -5
  393. package/src/alignment-matrix-control/types.ts +54 -0
  394. package/src/alignment-matrix-control/{utils.js → utils.tsx} +24 -14
  395. package/src/angle-picker-control/styles/angle-picker-control-styles.js +4 -0
  396. package/src/autocomplete/index.js +43 -12
  397. package/src/base-control/README.md +21 -12
  398. package/src/base-control/hooks.ts +45 -0
  399. package/src/base-control/index.tsx +18 -7
  400. package/src/base-control/stories/index.tsx +8 -10
  401. package/src/base-control/test/index.tsx +52 -0
  402. package/src/base-control/types.ts +8 -2
  403. package/src/base-field/README.md +21 -22
  404. package/src/base-field/{hook.js → hook.ts} +5 -15
  405. package/src/base-field/{index.js → index.ts} +0 -0
  406. package/src/base-field/{styles.js → styles.ts} +2 -2
  407. package/src/base-field/test/__snapshots__/{index.js.snap → index.tsx.snap} +4 -4
  408. package/src/base-field/test/{index.js → index.tsx} +10 -5
  409. package/src/base-field/types.ts +29 -0
  410. package/src/border-box-control/border-box-control/README.md +1 -0
  411. package/src/border-box-control/test/index.js +3 -1
  412. package/src/border-control/border-control/component.tsx +1 -0
  413. package/src/border-control/styles.ts +1 -10
  414. package/src/box-control/linked-button.js +8 -11
  415. package/src/box-control/test/index.js +206 -135
  416. package/src/button/stories/index.js +30 -0
  417. package/src/button/style.scss +17 -14
  418. package/src/button/test/index.js +32 -15
  419. package/src/card/test/index.tsx +32 -20
  420. package/src/circular-option-picker/style.scss +1 -0
  421. package/src/color-palette/index.tsx +4 -6
  422. package/src/color-palette/stories/index.tsx +1 -5
  423. package/src/color-palette/test/__snapshots__/index.tsx.snap +4 -4
  424. package/src/color-palette/test/index.tsx +84 -36
  425. package/src/color-palette/types.ts +1 -1
  426. package/src/color-picker/README.md +1 -0
  427. package/src/color-picker/input-with-slider.tsx +1 -0
  428. package/src/color-picker/styles.ts +0 -4
  429. package/src/confirm-dialog/README.md +3 -2
  430. package/src/custom-select-control/README.md +14 -0
  431. package/src/custom-select-control/index.js +14 -2
  432. package/src/dashicon/{index.js → index.tsx} +10 -4
  433. package/src/dashicon/types.ts +17 -0
  434. package/src/date-time/date-time/index.tsx +2 -2
  435. package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -8
  436. package/src/disabled/test/index.tsx +21 -11
  437. package/src/dropdown/test/index.js +39 -49
  438. package/src/dropdown-menu/test/index.js +18 -12
  439. package/src/duotone-picker/duotone-picker.js +2 -2
  440. package/src/focal-point-picker/test/media.js +26 -21
  441. package/src/form-token-field/style.scss +1 -1
  442. package/src/gradient-picker/index.js +5 -8
  443. package/src/grid/test/grid.tsx +31 -31
  444. package/src/higher-order/navigate-regions/style.scss +2 -22
  445. package/src/higher-order/with-fallback-styles/index.js +4 -2
  446. package/src/higher-order/with-filters/test/index.js +94 -101
  447. package/src/higher-order/with-focus-return/test/index.js +1 -4
  448. package/src/index.js +2 -2
  449. package/src/input-control/index.tsx +42 -28
  450. package/src/input-control/input-base.tsx +8 -1
  451. package/src/input-control/stories/index.tsx +6 -0
  452. package/src/input-control/test/index.js +18 -0
  453. package/src/input-control/types.ts +2 -0
  454. package/src/mobile/bottom-sheet/cell.native.js +1 -1
  455. package/src/mobile/bottom-sheet/switch-cell.native.js +2 -2
  456. package/src/mobile/global-styles-context/index.native.js +9 -11
  457. package/src/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
  458. package/src/mobile/link-settings/test/edit.native.js +68 -124
  459. package/src/modal/index.tsx +11 -0
  460. package/src/modal/stories/index.tsx +3 -0
  461. package/src/modal/test/index.tsx +15 -0
  462. package/src/navigation/stories/index.js +6 -6
  463. package/src/navigation/stories/{controlled-state.js → utils/controlled-state.js} +3 -3
  464. package/src/navigation/stories/{default.js → utils/default.js} +3 -3
  465. package/src/navigation/stories/{group.js → utils/group.js} +4 -4
  466. package/src/navigation/stories/{hide-if-empty.js → utils/hide-if-empty.js} +3 -3
  467. package/src/navigation/stories/{more-examples.js → utils/more-examples.js} +4 -4
  468. package/src/navigation/stories/{search.js → utils/search.js} +5 -5
  469. package/src/navigator/navigator-provider/component.tsx +13 -10
  470. package/src/notice/test/list.js +8 -5
  471. package/src/number-control/stories/{index.js → index.tsx} +24 -7
  472. package/src/number-control/styles/{number-control-styles.js → number-control-styles.ts} +5 -3
  473. package/src/number-control/test/index.tsx +600 -0
  474. package/src/palette-edit/index.js +88 -39
  475. package/src/palette-edit/test/index.js +25 -1
  476. package/src/popover/index.tsx +10 -2
  477. package/src/popover/style.scss +12 -11
  478. package/src/popover/test/index.tsx +25 -15
  479. package/src/query-controls/index.js +1 -0
  480. package/src/range-control/test/index.tsx +57 -60
  481. package/src/resizable-box/style.scss +1 -0
  482. package/src/sandbox/test/index.js +13 -11
  483. package/src/search-control/style.scss +4 -0
  484. package/src/snackbar/README.md +63 -8
  485. package/src/snackbar/{index.js → index.tsx} +46 -28
  486. package/src/snackbar/{list.js → list.tsx} +20 -21
  487. package/src/snackbar/stories/index.tsx +96 -0
  488. package/src/snackbar/stories/list.tsx +98 -0
  489. package/src/snackbar/types.ts +116 -0
  490. package/src/tab-panel/README.md +9 -0
  491. package/src/tab-panel/index.tsx +14 -3
  492. package/src/tab-panel/style.scss +46 -34
  493. package/src/tab-panel/test/index.tsx +111 -0
  494. package/src/tab-panel/types.ts +20 -1
  495. package/src/text/test/__snapshots__/index.tsx.snap +1 -0
  496. package/src/text/test/index.tsx +98 -46
  497. package/src/text-control/stories/index.tsx +0 -1
  498. package/src/text-control/types.ts +1 -6
  499. package/src/theme/README.md +32 -2
  500. package/src/theme/color-algorithms.ts +138 -0
  501. package/src/theme/index.tsx +23 -16
  502. package/src/theme/stories/index.tsx +67 -0
  503. package/src/theme/styles.ts +22 -17
  504. package/src/theme/test/color-algorithms.ts +100 -0
  505. package/src/theme/test/index.tsx +68 -35
  506. package/src/theme/types.ts +43 -3
  507. package/src/toggle-control/index.tsx +4 -2
  508. package/src/toggle-group-control/test/index.tsx +13 -2
  509. package/src/toolbar-group/test/index.js +8 -6
  510. package/src/tools-panel/stories/index.js +1 -1
  511. package/src/tools-panel/stories/{tools-panel-with-item-group-slot.js → utils/tools-panel-with-item-group-slot.js} +14 -11
  512. package/src/tools-panel/test/index.js +20 -14
  513. package/src/tooltip/README.md +7 -0
  514. package/src/tooltip/style.scss +2 -2
  515. package/src/tooltip/test/index.js +109 -18
  516. package/src/ui/context/context-system-provider.js +3 -2
  517. package/src/ui/context/test/context-system-provider.js +5 -4
  518. package/src/ui/control-label/test/index.js +3 -5
  519. package/src/unit-control/README.md +9 -1
  520. package/src/unit-control/index.tsx +3 -0
  521. package/src/unit-control/test/index.tsx +1 -0
  522. package/src/unit-control/types.ts +4 -0
  523. package/src/utils/colors-values.js +1 -1
  524. package/src/utils/config-values.js +0 -2
  525. package/src/utils/hooks/use-controlled-value.ts +2 -2
  526. package/src/utils/theme-variables.scss +20 -0
  527. package/tsconfig.json +2 -4
  528. package/tsconfig.tsbuildinfo +1 -1
  529. package/src/number-control/test/index.js +0 -478
  530. package/src/snackbar/stories/index.js +0 -89
@@ -6,7 +6,7 @@ import { kebabCase } from 'lodash';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useState, useRef, useEffect } from '@wordpress/element';
9
+ import { useState, useRef, useEffect, useCallback } from '@wordpress/element';
10
10
  import { __, sprintf } from '@wordpress/i18n';
11
11
  import { lineSolid, moreVertical, plus } from '@wordpress/icons';
12
12
  import {
@@ -89,6 +89,50 @@ export function getNameForPosition( elements, slugPrefix ) {
89
89
  );
90
90
  }
91
91
 
92
+ function ColorPickerPopover( {
93
+ isGradient,
94
+ element,
95
+ onChange,
96
+ onClose = () => {},
97
+ } ) {
98
+ return (
99
+ <Popover
100
+ placement="left-start"
101
+ offset={ 20 }
102
+ className="components-palette-edit__popover"
103
+ onClose={ onClose }
104
+ >
105
+ { ! isGradient && (
106
+ <ColorPicker
107
+ color={ element.color }
108
+ enableAlpha
109
+ onChange={ ( newColor ) =>
110
+ onChange( {
111
+ ...element,
112
+ color: newColor,
113
+ } )
114
+ }
115
+ />
116
+ ) }
117
+ { isGradient && (
118
+ <div className="components-palette-edit__popover-gradient-picker">
119
+ <CustomGradientPicker
120
+ __nextHasNoMargin
121
+ __experimentalIsRenderedInSidebar
122
+ value={ element.gradient }
123
+ onChange={ ( newGradient ) =>
124
+ onChange( {
125
+ ...element,
126
+ gradient: newGradient,
127
+ } )
128
+ }
129
+ />
130
+ </div>
131
+ ) }
132
+ </Popover>
133
+ );
134
+ }
135
+
92
136
  function Option( {
93
137
  canOnlyChangeValues,
94
138
  element,
@@ -155,39 +199,11 @@ function Option( {
155
199
  ) }
156
200
  </HStack>
157
201
  { isEditing && (
158
- <Popover
159
- placement="left-start"
160
- offset={ 20 }
161
- className="components-palette-edit__popover"
162
- >
163
- { ! isGradient && (
164
- <ColorPicker
165
- color={ value }
166
- enableAlpha
167
- onChange={ ( newColor ) =>
168
- onChange( {
169
- ...element,
170
- color: newColor,
171
- } )
172
- }
173
- />
174
- ) }
175
- { isGradient && (
176
- <div className="components-palette-edit__popover-gradient-picker">
177
- <CustomGradientPicker
178
- __nextHasNoMargin
179
- __experimentalIsRenderedInSidebar
180
- value={ value }
181
- onChange={ ( newGradient ) =>
182
- onChange( {
183
- ...element,
184
- gradient: newGradient,
185
- } )
186
- }
187
- />
188
- </div>
189
- ) }
190
- </Popover>
202
+ <ColorPickerPopover
203
+ isGradient={ isGradient }
204
+ onChange={ onChange }
205
+ element={ element }
206
+ />
191
207
  ) }
192
208
  </PaletteItem>
193
209
  );
@@ -313,6 +329,20 @@ export default function PaletteEdit( {
313
329
  ! elements[ editingElement ].slug;
314
330
  const elementsLength = elements.length;
315
331
  const hasElements = elementsLength > 0;
332
+ const debounceOnChange = useDebounce( onChange, 100 );
333
+ const onSelectPaletteItem = useCallback(
334
+ ( value, newEditingElementIndex ) => {
335
+ const selectedElement = elements[ newEditingElementIndex ];
336
+ const key = isGradient ? 'gradient' : 'color';
337
+ // Ensures that the index returned matches a known element value.
338
+ if ( !! selectedElement && selectedElement[ key ] === value ) {
339
+ setEditingElement( newEditingElementIndex );
340
+ } else {
341
+ setIsEditing( true );
342
+ }
343
+ },
344
+ [ isGradient, elements ]
345
+ );
316
346
 
317
347
  return (
318
348
  <PaletteEditStyles>
@@ -391,9 +421,7 @@ export default function PaletteEdit( {
391
421
  } }
392
422
  className="components-palette-edit__menu-button"
393
423
  >
394
- { isGradient
395
- ? __( 'Edit gradients' )
396
- : __( 'Edit colors' ) }
424
+ { __( 'Show details' ) }
397
425
  </Button>
398
426
  ) }
399
427
  { ! canOnlyChangeValues && (
@@ -454,19 +482,40 @@ export default function PaletteEdit( {
454
482
  isGradient={ isGradient }
455
483
  />
456
484
  ) }
485
+ { ! isEditing && editingElement !== null && (
486
+ <ColorPickerPopover
487
+ isGradient={ isGradient }
488
+ onClose={ () => setEditingElement( null ) }
489
+ onChange={ ( newElement ) => {
490
+ debounceOnChange(
491
+ elements.map(
492
+ ( currentElement, currentIndex ) => {
493
+ if (
494
+ currentIndex === editingElement
495
+ ) {
496
+ return newElement;
497
+ }
498
+ return currentElement;
499
+ }
500
+ )
501
+ );
502
+ } }
503
+ element={ elements[ editingElement ] }
504
+ />
505
+ ) }
457
506
  { ! isEditing &&
458
507
  ( isGradient ? (
459
508
  <GradientPicker
460
509
  __nextHasNoMargin
461
510
  gradients={ gradients }
462
- onChange={ () => {} }
511
+ onChange={ onSelectPaletteItem }
463
512
  clearable={ false }
464
513
  disableCustomGradients={ true }
465
514
  />
466
515
  ) : (
467
516
  <ColorPalette
468
517
  colors={ colors }
469
- onChange={ () => {} }
518
+ onChange={ onSelectPaletteItem }
470
519
  clearable={ false }
471
520
  disableCustomColors={ true }
472
521
  />
@@ -1,7 +1,12 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, fireEvent, screen } from '@testing-library/react';
5
+
1
6
  /**
2
7
  * Internal dependencies
3
8
  */
4
- import { getNameForPosition } from '../';
9
+ import PaletteEdit, { getNameForPosition } from '../';
5
10
 
6
11
  describe( 'getNameForPosition', () => {
7
12
  test( 'should return 1 by default', () => {
@@ -61,3 +66,22 @@ describe( 'getNameForPosition', () => {
61
66
  );
62
67
  } );
63
68
  } );
69
+
70
+ describe( 'PaletteEdit', () => {
71
+ const defaultProps = {
72
+ gradients: false,
73
+ colors: [ { color: '#ffffff', name: 'Base', slug: 'base' } ],
74
+ onChange: jest.fn(),
75
+ paletteLabel: 'Test label',
76
+ emptyMessage: 'Test empty message',
77
+ canOnlyChangeValues: true,
78
+ canReset: true,
79
+ slugPrefix: '',
80
+ };
81
+
82
+ it( 'opens color selector for color palettes', () => {
83
+ render( <PaletteEdit { ...defaultProps } /> );
84
+ fireEvent.click( screen.getByLabelText( 'Color: Base' ) );
85
+ expect( screen.getByLabelText( 'Hex color' ) ).toBeInTheDocument();
86
+ } );
87
+ } );
@@ -472,6 +472,7 @@ const UnforwardedPopover = (
472
472
  placement={ computedPlacement }
473
473
  className={ classnames( 'components-popover', className, {
474
474
  'is-expanded': isExpanded,
475
+ 'is-positioned': x !== null && y !== null,
475
476
  // Use the 'alternate' classname for 'toolbar' variant for back compat.
476
477
  [ `is-${
477
478
  computedVariant === 'toolbar'
@@ -488,8 +489,15 @@ const UnforwardedPopover = (
488
489
  ? undefined
489
490
  : {
490
491
  position: strategy,
491
- left: Number.isNaN( x ) ? 0 : x ?? undefined,
492
- top: Number.isNaN( y ) ? 0 : y ?? undefined,
492
+ top: 0,
493
+ left: 0,
494
+ // `x` and `y` are framer-motion specific props and are shorthands
495
+ // for `translateX` and `translateY`. Currently it is not possible
496
+ // to use `translateX` and `translateY` because those values would
497
+ // be overridden by the return value of the
498
+ // `placementToMotionAnimationProps` function in `AnimatedWrapper`
499
+ x: Math.round( x ?? 0 ) || undefined,
500
+ y: Math.round( y ?? 0 ) || undefined,
493
501
  }
494
502
  }
495
503
  >
@@ -1,7 +1,13 @@
1
1
  $arrow-triangle-base-size: 14px;
2
2
 
3
+ $shadow-popover-border-default: 0 0 0 $border-width $gray-400;
4
+ $shadow-popover-border-default-alternate: 0 0 0 $border-width $gray-900;
5
+ $shadow-popover-border-top-only: 0 #{-$border-width} 0 0 $gray-400;
6
+ $shadow-popover-border-top-only-alternate: 0 #{-$border-width} 0 $gray-900;
7
+
3
8
  .components-popover {
4
9
  z-index: z-index(".components-popover");
10
+ will-change: transform;
5
11
 
6
12
  &.is-expanded {
7
13
  position: fixed;
@@ -15,26 +21,20 @@ $arrow-triangle-base-size: 14px;
15
21
 
16
22
  .components-popover__content {
17
23
  background: $white;
18
- // Using outline instead of border to avoid impacting
19
- // popover computations.
20
- outline: $border-width solid $gray-400;
21
- box-shadow: $shadow-popover;
24
+ box-shadow: $shadow-popover-border-default, $shadow-popover;
22
25
  border-radius: $radius-block-ui;
23
26
  box-sizing: border-box;
24
27
  width: min-content;
25
28
 
26
29
  // Alternate treatment for popovers that put them at elevation zero with high contrast.
27
30
  .is-alternate & {
28
- outline: $border-width solid $gray-900;
29
- box-shadow: none;
31
+ box-shadow: $shadow-popover-border-default-alternate;
30
32
  }
31
33
 
32
34
  // A style that gives the popover no visible ui.
33
35
  .is-unstyled & {
34
36
  background: none;
35
- border: none;
36
37
  border-radius: 0;
37
- outline: none;
38
38
  box-shadow: none;
39
39
  }
40
40
 
@@ -43,9 +43,10 @@ $arrow-triangle-base-size: 14px;
43
43
  height: calc(100% - #{ $panel-header-height });
44
44
  overflow-y: visible;
45
45
  width: auto;
46
- border: none;
47
- outline: none;
48
- border-top: $border-width solid $gray-900;
46
+ box-shadow: $shadow-popover-border-top-only;
47
+ }
48
+ .components-popover.is-expanded.is-alternate & {
49
+ box-shadow: $shadow-popover-border-top-only-alternate;
49
50
  }
50
51
  }
51
52
 
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, screen } from '@testing-library/react';
5
- import type { CSSProperties } from 'react';
4
+ import { act, render, screen } from '@testing-library/react';
5
+ import type { CSSProperties, ReactElement } from 'react';
6
6
 
7
7
  /**
8
8
  * WordPress dependencies
@@ -91,22 +91,30 @@ const ALL_POSITIONS_TO_EXPECTED_PLACEMENTS: PositionToPlacementTuple[] = [
91
91
 
92
92
  describe( 'Popover', () => {
93
93
  describe( 'Component', () => {
94
+ // Render UI and then wait for the `floating-ui` effects inside `Popover` to finish running
95
+ // See also: https://floating-ui.com/docs/react-dom#testing
96
+ async function renderAsync( ui: ReactElement ) {
97
+ const view = render( ui );
98
+ await act( () => Promise.resolve() );
99
+ return view;
100
+ }
101
+
94
102
  describe( 'basic behavior', () => {
95
- it( 'should render content', () => {
96
- render( <Popover>Hello</Popover> );
103
+ it( 'should render content', async () => {
104
+ await renderAsync( <Popover>Hello</Popover> );
97
105
 
98
106
  expect( screen.getByText( 'Hello' ) ).toBeInTheDocument();
99
107
  } );
100
108
 
101
- it( 'should forward additional props to portaled element', () => {
102
- render( <Popover role="tooltip">Hello</Popover> );
109
+ it( 'should forward additional props to portaled element', async () => {
110
+ await renderAsync( <Popover role="tooltip">Hello</Popover> );
103
111
 
104
112
  expect( screen.getByRole( 'tooltip' ) ).toBeInTheDocument();
105
113
  } );
106
114
  } );
107
115
 
108
116
  describe( 'anchor', () => {
109
- it( 'should render correctly when anchor is provided', () => {
117
+ it( 'should render correctly when anchor is provided', async () => {
110
118
  const PopoverWithAnchor = ( args: PopoverProps ) => {
111
119
  // Use internal state instead of a ref to make sure that the component
112
120
  // re-renders when the popover's anchor updates.
@@ -121,7 +129,7 @@ describe( 'Popover', () => {
121
129
  );
122
130
  };
123
131
 
124
- render(
132
+ await renderAsync(
125
133
  <PopoverWithAnchor>Popover content</PopoverWithAnchor>
126
134
  );
127
135
 
@@ -132,16 +140,18 @@ describe( 'Popover', () => {
132
140
  } );
133
141
 
134
142
  describe( 'focus behavior', () => {
135
- it( 'should focus the popover by default when opened', () => {
136
- render( <Popover>Popover content</Popover> );
143
+ it( 'should focus the popover by default when opened', async () => {
144
+ await renderAsync(
145
+ <Popover data-testid="popover-element">
146
+ Popover content
147
+ </Popover>
148
+ );
137
149
 
138
- expect(
139
- screen.getByText( 'Popover content' ).parentElement
140
- ).toHaveFocus();
150
+ expect( screen.getByTestId( 'popover-element' ) ).toHaveFocus();
141
151
  } );
142
152
 
143
- it( 'should allow focus-on-open behavior to be disabled', () => {
144
- render(
153
+ it( 'should allow focus-on-open behavior to be disabled', async () => {
154
+ await renderAsync(
145
155
  <Popover focusOnMount={ false }>Popover content</Popover>
146
156
  );
147
157
 
@@ -107,6 +107,7 @@ export default function QueryControls( {
107
107
  ),
108
108
  onNumberOfItemsChange && (
109
109
  <RangeControl
110
+ __nextHasNoMarginBottom
110
111
  key="query-controls-range-control"
111
112
  label={ __( 'Number of items' ) }
112
113
  value={ numberOfItems }
@@ -1,24 +1,19 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { fireEvent, render, screen } from '@testing-library/react';
4
+ import { act, fireEvent, render, screen } from '@testing-library/react';
5
5
 
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
9
  import RangeControl from '../';
10
10
 
11
- const getRangeInput = (): HTMLInputElement | null =>
12
- screen.getByRole( 'slider' ) as HTMLInputElement;
13
- const getNumberInput = (): HTMLInputElement | null =>
14
- screen.getByRole( 'spinbutton' ) as HTMLInputElement;
15
- const getResetButton = (): HTMLButtonElement | null =>
16
- screen.getByRole( 'button' ) as HTMLButtonElement;
11
+ const getRangeInput = (): HTMLInputElement => screen.getByRole( 'slider' );
12
+ const getNumberInput = (): HTMLInputElement => screen.getByRole( 'spinbutton' );
13
+ const getResetButton = (): HTMLButtonElement => screen.getByRole( 'button' );
17
14
 
18
- const fireChangeEvent = (
19
- input: HTMLInputElement | null,
20
- value?: number | string
21
- ) => fireEvent.change( input as Element, { target: { value } } );
15
+ const fireChangeEvent = ( input: HTMLInputElement, value?: number | string ) =>
16
+ fireEvent.change( input, { target: { value } } );
22
17
 
23
18
  describe( 'RangeControl', () => {
24
19
  describe( '#render()', () => {
@@ -30,10 +25,10 @@ describe( 'RangeControl', () => {
30
25
  const rangeInput = getRangeInput();
31
26
  const numberInput = getNumberInput();
32
27
 
33
- rangeInput?.focus();
28
+ act( () => rangeInput.focus() );
34
29
  fireChangeEvent( rangeInput, '5' );
35
30
 
36
- numberInput?.focus();
31
+ act( () => numberInput.focus() );
37
32
  fireChangeEvent( numberInput, '10' );
38
33
 
39
34
  expect( onChange ).toHaveBeenCalledWith( 5 );
@@ -48,9 +43,11 @@ describe( 'RangeControl', () => {
48
43
  />
49
44
  );
50
45
 
46
+ // eslint-disable-next-line testing-library/no-container, testing-library/no-node-access
51
47
  const beforeIcon = container.querySelector(
52
48
  '.dashicons-format-image'
53
49
  );
50
+ // eslint-disable-next-line testing-library/no-container, testing-library/no-node-access
54
51
  const afterIcon = container.querySelector(
55
52
  '.dashicons-format-video'
56
53
  );
@@ -68,9 +65,9 @@ describe( 'RangeControl', () => {
68
65
  const numberInput = getNumberInput();
69
66
 
70
67
  fireChangeEvent( numberInput, '10' );
71
- fireEvent.blur( numberInput as Element );
68
+ fireEvent.blur( numberInput );
72
69
 
73
- expect( rangeInput?.value ).not.toBe( '10' );
70
+ expect( rangeInput.value ).not.toBe( '10' );
74
71
  } );
75
72
 
76
73
  it( 'should not apply if new value is greater than maximum', () => {
@@ -80,9 +77,9 @@ describe( 'RangeControl', () => {
80
77
  const numberInput = getNumberInput();
81
78
 
82
79
  fireChangeEvent( numberInput, '21' );
83
- fireEvent.blur( numberInput as Element );
80
+ fireEvent.blur( numberInput );
84
81
 
85
- expect( rangeInput?.value ).not.toBe( '21' );
82
+ expect( rangeInput.value ).not.toBe( '21' );
86
83
  } );
87
84
 
88
85
  it( 'should not call onChange if new value is invalid', () => {
@@ -93,7 +90,7 @@ describe( 'RangeControl', () => {
93
90
 
94
91
  const numberInput = getNumberInput();
95
92
 
96
- numberInput?.focus();
93
+ act( () => numberInput.focus() );
97
94
  fireChangeEvent( numberInput, '25e' );
98
95
 
99
96
  expect( onChange ).not.toHaveBeenCalled();
@@ -108,15 +105,15 @@ describe( 'RangeControl', () => {
108
105
  const rangeInput = getRangeInput();
109
106
  const numberInput = getNumberInput();
110
107
 
111
- numberInput?.focus();
108
+ act( () => numberInput.focus() );
112
109
  fireChangeEvent( numberInput, '-1.1' );
113
110
 
114
- expect( numberInput?.value ).toBe( '-1.1' );
115
- expect( rangeInput?.value ).toBe( '-1' );
111
+ expect( numberInput.value ).toBe( '-1.1' );
112
+ expect( rangeInput.value ).toBe( '-1' );
116
113
 
117
- fireEvent.blur( numberInput as Element );
114
+ fireEvent.blur( numberInput );
118
115
  expect( onChange ).toHaveBeenCalledWith( -1 );
119
- expect( numberInput?.value ).toBe( '-1' );
116
+ expect( numberInput.value ).toBe( '-1' );
120
117
  } );
121
118
 
122
119
  it( 'should validate when provided a max or min of zero', () => {
@@ -125,11 +122,11 @@ describe( 'RangeControl', () => {
125
122
  const rangeInput = getRangeInput();
126
123
  const numberInput = getNumberInput();
127
124
 
128
- numberInput?.focus();
125
+ act( () => numberInput.focus() );
129
126
  fireChangeEvent( numberInput, '1' );
130
- fireEvent.blur( numberInput as Element );
127
+ fireEvent.blur( numberInput );
131
128
 
132
- expect( rangeInput?.value ).toBe( '0' );
129
+ expect( rangeInput.value ).toBe( '0' );
133
130
  } );
134
131
 
135
132
  it( 'should validate when min and max are negative', () => {
@@ -138,16 +135,16 @@ describe( 'RangeControl', () => {
138
135
  const rangeInput = getRangeInput();
139
136
  const numberInput = getNumberInput();
140
137
 
141
- numberInput?.focus();
138
+ act( () => numberInput.focus() );
142
139
 
143
140
  fireChangeEvent( numberInput, '-101' );
144
- expect( rangeInput?.value ).toBe( '-100' );
141
+ expect( rangeInput.value ).toBe( '-100' );
145
142
 
146
143
  fireChangeEvent( numberInput, '-49' );
147
- expect( rangeInput?.value ).toBe( '-50' );
144
+ expect( rangeInput.value ).toBe( '-50' );
148
145
 
149
146
  fireChangeEvent( numberInput, '-50' );
150
- expect( rangeInput?.value ).toBe( '-50' );
147
+ expect( rangeInput.value ).toBe( '-50' );
151
148
  } );
152
149
 
153
150
  it( 'should take into account the step starting from min', () => {
@@ -163,16 +160,16 @@ describe( 'RangeControl', () => {
163
160
  const rangeInput = getRangeInput();
164
161
  const numberInput = getNumberInput();
165
162
 
166
- numberInput?.focus();
163
+ act( () => numberInput.focus() );
167
164
  fireChangeEvent( numberInput, '0.125' );
168
165
 
169
166
  expect( onChange ).toHaveBeenCalledWith( 0.125 );
170
- expect( rangeInput?.value ).toBe( '0.125' );
167
+ expect( rangeInput.value ).toBe( '0.125' );
171
168
 
172
169
  fireChangeEvent( numberInput, '0.225' );
173
170
 
174
171
  expect( onChange ).toHaveBeenCalledWith( 0.225 );
175
- expect( rangeInput?.value ).toBe( '0.225' );
172
+ expect( rangeInput.value ).toBe( '0.225' );
176
173
  } );
177
174
  } );
178
175
 
@@ -182,7 +179,7 @@ describe( 'RangeControl', () => {
182
179
 
183
180
  const rangeInput = getRangeInput();
184
181
 
185
- expect( rangeInput?.value ).toBe( '5' );
182
+ expect( rangeInput.value ).toBe( '5' );
186
183
  } );
187
184
 
188
185
  it( 'should render initialPosition if no value is provided', () => {
@@ -190,7 +187,7 @@ describe( 'RangeControl', () => {
190
187
 
191
188
  const rangeInput = getRangeInput();
192
189
 
193
- expect( rangeInput?.value ).toBe( '50' );
190
+ expect( rangeInput.value ).toBe( '50' );
194
191
  } );
195
192
 
196
193
  it( 'should render value instead of initialPosition is provided', () => {
@@ -198,7 +195,7 @@ describe( 'RangeControl', () => {
198
195
 
199
196
  const rangeInput = getRangeInput();
200
197
 
201
- expect( rangeInput?.value ).toBe( '10' );
198
+ expect( rangeInput.value ).toBe( '10' );
202
199
  } );
203
200
 
204
201
  it( 'should clamp initialPosition between min and max on first render, and on reset', () => {
@@ -216,19 +213,19 @@ describe( 'RangeControl', () => {
216
213
  const resetButton = getResetButton();
217
214
 
218
215
  // Value should be clamped on initial load
219
- expect( numberInput?.value ).toBe( '100' );
220
- expect( rangeInput?.value ).toBe( '100' );
216
+ expect( numberInput.value ).toBe( '100' );
217
+ expect( rangeInput.value ).toBe( '100' );
221
218
 
222
219
  fireChangeEvent( numberInput, '50' );
223
220
 
224
- expect( numberInput?.value ).toBe( '50' );
225
- expect( rangeInput?.value ).toBe( '50' );
221
+ expect( numberInput.value ).toBe( '50' );
222
+ expect( rangeInput.value ).toBe( '50' );
226
223
 
227
224
  // Value should be clamped after resetting
228
- fireEvent.click( resetButton as Element );
225
+ fireEvent.click( resetButton );
229
226
 
230
- expect( numberInput?.value ).toBe( '100' );
231
- expect( rangeInput?.value ).toBe( '100' );
227
+ expect( numberInput.value ).toBe( '100' );
228
+ expect( rangeInput.value ).toBe( '100' );
232
229
  } );
233
230
  } );
234
231
 
@@ -255,8 +252,8 @@ describe( 'RangeControl', () => {
255
252
  const rangeInput = getRangeInput();
256
253
  const numberInput = getNumberInput();
257
254
 
258
- expect( rangeInput?.value ).toBe( '0' );
259
- expect( numberInput?.value ).toBe( '0' );
255
+ expect( rangeInput.value ).toBe( '0' );
256
+ expect( numberInput.value ).toBe( '0' );
260
257
  } );
261
258
 
262
259
  it( 'should update both field and range on change', () => {
@@ -265,17 +262,17 @@ describe( 'RangeControl', () => {
265
262
  const rangeInput = getRangeInput();
266
263
  const numberInput = getNumberInput();
267
264
 
268
- rangeInput?.focus();
265
+ act( () => rangeInput.focus() );
269
266
  fireChangeEvent( rangeInput, 13 );
270
267
 
271
- expect( rangeInput?.value ).toBe( '13' );
272
- expect( numberInput?.value ).toBe( '13' );
268
+ expect( rangeInput.value ).toBe( '13' );
269
+ expect( numberInput.value ).toBe( '13' );
273
270
 
274
- numberInput?.focus();
271
+ act( () => numberInput.focus() );
275
272
  fireChangeEvent( numberInput, 7 );
276
273
 
277
- expect( rangeInput?.value ).toBe( '7' );
278
- expect( numberInput?.value ).toBe( '7' );
274
+ expect( rangeInput.value ).toBe( '7' );
275
+ expect( numberInput.value ).toBe( '7' );
279
276
  } );
280
277
 
281
278
  it( 'should reset input values if next value is removed', () => {
@@ -285,12 +282,12 @@ describe( 'RangeControl', () => {
285
282
  const numberInput = getNumberInput();
286
283
 
287
284
  fireChangeEvent( numberInput, '' );
288
- fireEvent.blur( numberInput as Element );
285
+ fireEvent.blur( numberInput );
289
286
 
290
287
  // Reset to 50. Median value of min: 0, max: 100.
291
- expect( rangeInput?.value ).toBe( '50' );
288
+ expect( rangeInput.value ).toBe( '50' );
292
289
  // Input field should be blank.
293
- expect( numberInput?.value ).toBe( '' );
290
+ expect( numberInput.value ).toBe( '' );
294
291
  } );
295
292
  } );
296
293
 
@@ -310,10 +307,10 @@ describe( 'RangeControl', () => {
310
307
  const rangeInput = getRangeInput();
311
308
  const numberInput = getNumberInput();
312
309
 
313
- fireEvent.click( resetButton as Element );
310
+ fireEvent.click( resetButton );
314
311
 
315
- expect( rangeInput?.value ).toBe( '33' );
316
- expect( numberInput?.value ).toBe( '33' );
312
+ expect( rangeInput.value ).toBe( '33' );
313
+ expect( numberInput.value ).toBe( '33' );
317
314
  expect( spy ).toHaveBeenCalledWith( 33 );
318
315
  } );
319
316
 
@@ -332,10 +329,10 @@ describe( 'RangeControl', () => {
332
329
  const rangeInput = getRangeInput();
333
330
  const numberInput = getNumberInput();
334
331
 
335
- fireEvent.click( resetButton as Element );
332
+ fireEvent.click( resetButton );
336
333
 
337
- expect( rangeInput?.value ).toBe( '50' );
338
- expect( numberInput?.value ).toBe( '' );
334
+ expect( rangeInput.value ).toBe( '50' );
335
+ expect( numberInput.value ).toBe( '' );
339
336
  } );
340
337
  } );
341
338
  } );