@wordpress/components 23.6.0 → 23.8.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 (484) hide show
  1. package/CHANGELOG.md +43 -4
  2. package/build/angle-picker-control/angle-circle.js +1 -4
  3. package/build/angle-picker-control/angle-circle.js.map +1 -1
  4. package/build/angle-picker-control/index.js +10 -22
  5. package/build/angle-picker-control/index.js.map +1 -1
  6. package/build/angle-picker-control/styles/angle-picker-control-styles.js +24 -15
  7. package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  8. package/build/animate/index.js +27 -19
  9. package/build/animate/index.js.map +1 -1
  10. package/build/animate/types.js.map +1 -0
  11. package/build/box-control/axial-input-controls.js.map +1 -1
  12. package/build/color-picker/color-input.js +0 -4
  13. package/build/color-picker/color-input.js.map +1 -1
  14. package/build/color-picker/component.js +5 -4
  15. package/build/color-picker/component.js.map +1 -1
  16. package/build/color-picker/hex-input.js.map +1 -1
  17. package/build/color-picker/hsl-input.js.map +1 -1
  18. package/build/color-picker/input-with-slider.js.map +1 -1
  19. package/build/color-picker/legacy-adapter.js.map +1 -1
  20. package/build/color-picker/picker.js.map +1 -1
  21. package/build/color-picker/rgb-input.js.map +1 -1
  22. package/build/color-picker/use-deprecated-props.js.map +1 -1
  23. package/build/custom-gradient-picker/constants.js +1 -1
  24. package/build/custom-gradient-picker/constants.js.map +1 -1
  25. package/build/custom-gradient-picker/gradient-bar/constants.js.map +1 -1
  26. package/build/custom-gradient-picker/gradient-bar/control-points.js +9 -5
  27. package/build/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
  28. package/build/custom-gradient-picker/gradient-bar/index.js +14 -9
  29. package/build/custom-gradient-picker/gradient-bar/index.js.map +1 -1
  30. package/build/custom-gradient-picker/gradient-bar/utils.js +34 -54
  31. package/build/custom-gradient-picker/gradient-bar/utils.js.map +1 -1
  32. package/build/custom-gradient-picker/index.js +45 -16
  33. package/build/custom-gradient-picker/index.js.map +1 -1
  34. package/build/custom-gradient-picker/serializer.js +10 -4
  35. package/build/custom-gradient-picker/serializer.js.map +1 -1
  36. package/build/custom-gradient-picker/styles/custom-gradient-picker-styles.js +6 -6
  37. package/build/custom-gradient-picker/styles/custom-gradient-picker-styles.js.map +1 -1
  38. package/build/custom-gradient-picker/types.js +6 -0
  39. package/build/custom-gradient-picker/types.js.map +1 -0
  40. package/build/custom-gradient-picker/utils.js +17 -12
  41. package/build/custom-gradient-picker/utils.js.map +1 -1
  42. package/build/drop-zone/index.js +8 -8
  43. package/build/drop-zone/index.js.map +1 -1
  44. package/build/{color-list-picker → duotone-picker/color-list-picker}/index.js +5 -5
  45. package/build/duotone-picker/color-list-picker/index.js.map +1 -0
  46. package/build/duotone-picker/color-list-picker/types.js +6 -0
  47. package/build/duotone-picker/color-list-picker/types.js.map +1 -0
  48. package/build/duotone-picker/custom-duotone-bar.js.map +1 -1
  49. package/build/duotone-picker/duotone-picker.js +39 -2
  50. package/build/duotone-picker/duotone-picker.js.map +1 -1
  51. package/build/duotone-picker/duotone-swatch.js.map +1 -1
  52. package/build/duotone-picker/index.js.map +1 -1
  53. package/build/duotone-picker/types.js +6 -0
  54. package/build/duotone-picker/types.js.map +1 -0
  55. package/build/duotone-picker/utils.js +13 -11
  56. package/build/duotone-picker/utils.js.map +1 -1
  57. package/build/form-token-field/index.js +9 -3
  58. package/build/form-token-field/index.js.map +1 -1
  59. package/build/gradient-picker/index.js +61 -9
  60. package/build/gradient-picker/index.js.map +1 -1
  61. package/build/gradient-picker/types.js +6 -0
  62. package/build/gradient-picker/types.js.map +1 -0
  63. package/build/index.js.map +1 -1
  64. package/build/mobile/keyboard-aware-flat-list/index.android.js +0 -4
  65. package/build/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  66. package/build/mobile/keyboard-aware-flat-list/index.ios.js +100 -55
  67. package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  68. package/build/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js +82 -0
  69. package/build/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js.map +1 -0
  70. package/build/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js +85 -0
  71. package/build/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js.map +1 -0
  72. package/build/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js +44 -0
  73. package/build/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js.map +1 -0
  74. package/build/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js +53 -0
  75. package/build/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js.map +1 -0
  76. package/build/navigator/navigator-provider/component.js +4 -2
  77. package/build/navigator/navigator-provider/component.js.map +1 -1
  78. package/build/navigator/navigator-screen/component.js +4 -3
  79. package/build/navigator/navigator-screen/component.js.map +1 -1
  80. package/build/palette-edit/index.js +1 -2
  81. package/build/palette-edit/index.js.map +1 -1
  82. package/build/private-apis.js.map +1 -1
  83. package/build/query-controls/author-select.js +2 -1
  84. package/build/query-controls/author-select.js.map +1 -1
  85. package/build/query-controls/category-select.js +3 -1
  86. package/build/query-controls/category-select.js.map +1 -1
  87. package/build/query-controls/index.js +7 -1
  88. package/build/query-controls/index.js.map +1 -1
  89. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  90. package/build/sandbox/index.native.js +129 -93
  91. package/build/sandbox/index.native.js.map +1 -1
  92. package/build/tab-panel/index.js +1 -1
  93. package/build/tab-panel/index.js.map +1 -1
  94. package/build/tools-panel/tools-panel/hook.js +45 -6
  95. package/build/tools-panel/tools-panel/hook.js.map +1 -1
  96. package/build/utils/input/input-control.js +1 -1
  97. package/build/utils/input/input-control.js.map +1 -1
  98. package/build-module/angle-picker-control/angle-circle.js +1 -4
  99. package/build-module/angle-picker-control/angle-circle.js.map +1 -1
  100. package/build-module/angle-picker-control/index.js +12 -21
  101. package/build-module/angle-picker-control/index.js.map +1 -1
  102. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +20 -13
  103. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  104. package/build-module/animate/index.js +25 -17
  105. package/build-module/animate/index.js.map +1 -1
  106. package/build-module/box-control/axial-input-controls.js.map +1 -1
  107. package/build-module/color-picker/color-input.js +0 -4
  108. package/build-module/color-picker/color-input.js.map +1 -1
  109. package/build-module/color-picker/component.js +3 -3
  110. package/build-module/color-picker/component.js.map +1 -1
  111. package/build-module/color-picker/hex-input.js.map +1 -1
  112. package/build-module/color-picker/hsl-input.js.map +1 -1
  113. package/build-module/color-picker/input-with-slider.js.map +1 -1
  114. package/build-module/color-picker/legacy-adapter.js.map +1 -1
  115. package/build-module/color-picker/picker.js +4 -0
  116. package/build-module/color-picker/picker.js.map +1 -1
  117. package/build-module/color-picker/rgb-input.js.map +1 -1
  118. package/build-module/color-picker/use-deprecated-props.js.map +1 -1
  119. package/build-module/custom-gradient-picker/constants.js +1 -1
  120. package/build-module/custom-gradient-picker/constants.js.map +1 -1
  121. package/build-module/custom-gradient-picker/gradient-bar/constants.js.map +1 -1
  122. package/build-module/custom-gradient-picker/gradient-bar/control-points.js +9 -4
  123. package/build-module/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
  124. package/build-module/custom-gradient-picker/gradient-bar/index.js +14 -8
  125. package/build-module/custom-gradient-picker/gradient-bar/index.js.map +1 -1
  126. package/build-module/custom-gradient-picker/gradient-bar/utils.js +34 -54
  127. package/build-module/custom-gradient-picker/gradient-bar/utils.js.map +1 -1
  128. package/build-module/custom-gradient-picker/index.js +44 -17
  129. package/build-module/custom-gradient-picker/index.js.map +1 -1
  130. package/build-module/custom-gradient-picker/serializer.js +10 -4
  131. package/build-module/custom-gradient-picker/serializer.js.map +1 -1
  132. package/build-module/custom-gradient-picker/styles/custom-gradient-picker-styles.js +6 -6
  133. package/build-module/custom-gradient-picker/styles/custom-gradient-picker-styles.js.map +1 -1
  134. package/build-module/custom-gradient-picker/types.js +2 -0
  135. package/build-module/custom-gradient-picker/utils.js +17 -12
  136. package/build-module/custom-gradient-picker/utils.js.map +1 -1
  137. package/build-module/drop-zone/index.js +8 -8
  138. package/build-module/drop-zone/index.js.map +1 -1
  139. package/build-module/{color-list-picker → duotone-picker/color-list-picker}/index.js +5 -5
  140. package/build-module/duotone-picker/color-list-picker/index.js.map +1 -0
  141. package/build-module/duotone-picker/color-list-picker/types.js +2 -0
  142. package/build-module/duotone-picker/color-list-picker/types.js.map +1 -0
  143. package/build-module/duotone-picker/custom-duotone-bar.js.map +1 -1
  144. package/build-module/duotone-picker/duotone-picker.js +38 -2
  145. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  146. package/build-module/duotone-picker/duotone-swatch.js.map +1 -1
  147. package/build-module/duotone-picker/index.js.map +1 -1
  148. package/build-module/duotone-picker/types.js +2 -0
  149. package/build-module/duotone-picker/types.js.map +1 -0
  150. package/build-module/duotone-picker/utils.js +17 -11
  151. package/build-module/duotone-picker/utils.js.map +1 -1
  152. package/build-module/form-token-field/index.js +9 -4
  153. package/build-module/form-token-field/index.js.map +1 -1
  154. package/build-module/gradient-picker/index.js +61 -10
  155. package/build-module/gradient-picker/index.js.map +1 -1
  156. package/build-module/gradient-picker/types.js +2 -0
  157. package/build-module/gradient-picker/types.js.map +1 -0
  158. package/build-module/index.js.map +1 -1
  159. package/build-module/mobile/keyboard-aware-flat-list/index.android.js +0 -4
  160. package/build-module/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  161. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +97 -54
  162. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  163. package/build-module/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js +73 -0
  164. package/build-module/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js.map +1 -0
  165. package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js +76 -0
  166. package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js.map +1 -0
  167. package/build-module/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js +33 -0
  168. package/build-module/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js.map +1 -0
  169. package/build-module/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js +40 -0
  170. package/build-module/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js.map +1 -0
  171. package/build-module/navigator/navigator-provider/component.js +4 -2
  172. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  173. package/build-module/navigator/navigator-screen/component.js +4 -3
  174. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  175. package/build-module/palette-edit/index.js +1 -2
  176. package/build-module/palette-edit/index.js.map +1 -1
  177. package/build-module/private-apis.js.map +1 -1
  178. package/build-module/query-controls/author-select.js +2 -1
  179. package/build-module/query-controls/author-select.js.map +1 -1
  180. package/build-module/query-controls/category-select.js +3 -1
  181. package/build-module/query-controls/category-select.js.map +1 -1
  182. package/build-module/query-controls/index.js +7 -2
  183. package/build-module/query-controls/index.js.map +1 -1
  184. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  185. package/build-module/sandbox/index.native.js +121 -87
  186. package/build-module/sandbox/index.native.js.map +1 -1
  187. package/build-module/tab-panel/index.js +2 -2
  188. package/build-module/tab-panel/index.js.map +1 -1
  189. package/build-module/tools-panel/tools-panel/hook.js +45 -6
  190. package/build-module/tools-panel/tools-panel/hook.js.map +1 -1
  191. package/build-module/utils/input/input-control.js +1 -1
  192. package/build-module/utils/input/input-control.js.map +1 -1
  193. package/build-style/style-rtl.css +41 -29
  194. package/build-style/style.css +43 -29
  195. package/build-types/angle-picker-control/angle-circle.d.ts.map +1 -1
  196. package/build-types/angle-picker-control/index.d.ts.map +1 -1
  197. package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts +6 -1
  198. package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts.map +1 -1
  199. package/build-types/animate/index.d.ts +27 -22
  200. package/build-types/animate/index.d.ts.map +1 -1
  201. package/build-types/animate/stories/index.d.ts +18 -0
  202. package/build-types/animate/stories/index.d.ts.map +1 -0
  203. package/build-types/animate/types.d.ts +30 -0
  204. package/build-types/animate/types.d.ts.map +1 -0
  205. package/build-types/border-box-control/border-box-control/hook.d.ts +2 -2
  206. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +2 -2
  207. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +2 -2
  208. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +2 -2
  209. package/build-types/border-control/border-control/hook.d.ts +2 -2
  210. package/build-types/border-control/border-control-dropdown/hook.d.ts +2 -2
  211. package/build-types/border-control/border-control-style-picker/hook.d.ts +2 -2
  212. package/build-types/box-control/styles/box-control-styles.d.ts +5 -5
  213. package/build-types/button/deprecated.d.ts +2 -2
  214. package/build-types/card/card/hook.d.ts +2 -2
  215. package/build-types/card/card-body/hook.d.ts +2 -2
  216. package/build-types/card/card-divider/hook.d.ts +2 -2
  217. package/build-types/card/card-footer/hook.d.ts +2 -2
  218. package/build-types/card/card-header/hook.d.ts +2 -2
  219. package/build-types/card/card-media/hook.d.ts +2 -2
  220. package/build-types/color-palette/styles.d.ts +1 -1
  221. package/build-types/color-picker/color-input.d.ts +1 -11
  222. package/build-types/color-picker/color-input.d.ts.map +1 -1
  223. package/build-types/color-picker/component.d.ts +8 -9
  224. package/build-types/color-picker/component.d.ts.map +1 -1
  225. package/build-types/color-picker/hex-input.d.ts +1 -10
  226. package/build-types/color-picker/hex-input.d.ts.map +1 -1
  227. package/build-types/color-picker/hsl-input.d.ts +1 -10
  228. package/build-types/color-picker/hsl-input.d.ts.map +1 -1
  229. package/build-types/color-picker/input-with-slider.d.ts +1 -9
  230. package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
  231. package/build-types/color-picker/legacy-adapter.d.ts +1 -3
  232. package/build-types/color-picker/legacy-adapter.d.ts.map +1 -1
  233. package/build-types/color-picker/picker.d.ts +4 -7
  234. package/build-types/color-picker/picker.d.ts.map +1 -1
  235. package/build-types/color-picker/rgb-input.d.ts +1 -10
  236. package/build-types/color-picker/rgb-input.d.ts.map +1 -1
  237. package/build-types/color-picker/stories/index.d.ts +19 -0
  238. package/build-types/color-picker/stories/index.d.ts.map +1 -0
  239. package/build-types/color-picker/styles.d.ts +5 -5
  240. package/build-types/color-picker/test/index.d.ts +2 -0
  241. package/build-types/color-picker/test/index.d.ts.map +1 -0
  242. package/build-types/color-picker/types.d.ts +105 -1
  243. package/build-types/color-picker/types.d.ts.map +1 -1
  244. package/build-types/color-picker/use-deprecated-props.d.ts +1 -44
  245. package/build-types/color-picker/use-deprecated-props.d.ts.map +1 -1
  246. package/build-types/combobox-control/styles.d.ts +1 -1
  247. package/build-types/custom-gradient-picker/constants.d.ts +8 -8
  248. package/build-types/custom-gradient-picker/constants.d.ts.map +1 -1
  249. package/build-types/custom-gradient-picker/gradient-bar/constants.d.ts +7 -7
  250. package/build-types/custom-gradient-picker/gradient-bar/constants.d.ts.map +1 -1
  251. package/build-types/custom-gradient-picker/gradient-bar/control-points.d.ts +5 -22
  252. package/build-types/custom-gradient-picker/gradient-bar/control-points.d.ts.map +1 -1
  253. package/build-types/custom-gradient-picker/gradient-bar/index.d.ts +3 -9
  254. package/build-types/custom-gradient-picker/gradient-bar/index.d.ts.map +1 -1
  255. package/build-types/custom-gradient-picker/gradient-bar/test/utils.d.ts +2 -0
  256. package/build-types/custom-gradient-picker/gradient-bar/test/utils.d.ts.map +1 -0
  257. package/build-types/custom-gradient-picker/gradient-bar/utils.d.ts +44 -92
  258. package/build-types/custom-gradient-picker/gradient-bar/utils.d.ts.map +1 -1
  259. package/build-types/custom-gradient-picker/index.d.ts +27 -6
  260. package/build-types/custom-gradient-picker/index.d.ts.map +1 -1
  261. package/build-types/custom-gradient-picker/serializer.d.ts +9 -16
  262. package/build-types/custom-gradient-picker/serializer.d.ts.map +1 -1
  263. package/build-types/custom-gradient-picker/stories/index.d.ts +12 -0
  264. package/build-types/custom-gradient-picker/stories/index.d.ts.map +1 -0
  265. package/build-types/custom-gradient-picker/styles/custom-gradient-picker-styles.d.ts +3 -2
  266. package/build-types/custom-gradient-picker/styles/custom-gradient-picker-styles.d.ts.map +1 -1
  267. package/build-types/custom-gradient-picker/test/serializer.d.ts +2 -0
  268. package/build-types/custom-gradient-picker/test/serializer.d.ts.map +1 -0
  269. package/build-types/custom-gradient-picker/types.d.ts +118 -0
  270. package/build-types/custom-gradient-picker/types.d.ts.map +1 -0
  271. package/build-types/custom-gradient-picker/utils.d.ts +12 -4
  272. package/build-types/custom-gradient-picker/utils.d.ts.map +1 -1
  273. package/build-types/date-time/date/styles.d.ts +2 -2
  274. package/build-types/date-time/date-time/styles.d.ts +1 -1
  275. package/build-types/date-time/time/styles.d.ts +8 -8
  276. package/build-types/drop-zone/index.d.ts.map +1 -1
  277. package/build-types/duotone-picker/color-list-picker/index.d.ts.map +1 -0
  278. package/build-types/{color-list-picker → duotone-picker/color-list-picker}/types.d.ts +2 -2
  279. package/build-types/duotone-picker/color-list-picker/types.d.ts.map +1 -0
  280. package/build-types/duotone-picker/custom-duotone-bar.d.ts +6 -0
  281. package/build-types/duotone-picker/custom-duotone-bar.d.ts.map +1 -0
  282. package/build-types/duotone-picker/duotone-picker.d.ts +38 -0
  283. package/build-types/duotone-picker/duotone-picker.d.ts.map +1 -0
  284. package/build-types/duotone-picker/duotone-swatch.d.ts +5 -0
  285. package/build-types/duotone-picker/duotone-swatch.d.ts.map +1 -0
  286. package/build-types/duotone-picker/index.d.ts +3 -0
  287. package/build-types/duotone-picker/index.d.ts.map +1 -0
  288. package/build-types/duotone-picker/stories/duotone-picker.d.ts +12 -0
  289. package/build-types/duotone-picker/stories/duotone-picker.d.ts.map +1 -0
  290. package/build-types/duotone-picker/stories/duotone-swatch.d.ts +14 -0
  291. package/build-types/duotone-picker/stories/duotone-swatch.d.ts.map +1 -0
  292. package/build-types/duotone-picker/types.d.ts +60 -0
  293. package/build-types/duotone-picker/types.d.ts.map +1 -0
  294. package/build-types/duotone-picker/utils.d.ts +52 -0
  295. package/build-types/duotone-picker/utils.d.ts.map +1 -0
  296. package/build-types/elevation/hook.d.ts +2 -2
  297. package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
  298. package/build-types/flex/flex/hook.d.ts +2 -2
  299. package/build-types/flex/flex-block/hook.d.ts +2 -2
  300. package/build-types/flex/flex-item/hook.d.ts +2 -2
  301. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +2 -2
  302. package/build-types/form-token-field/index.d.ts.map +1 -1
  303. package/build-types/form-token-field/styles.d.ts +1 -1
  304. package/build-types/form-token-field/types.d.ts +6 -0
  305. package/build-types/form-token-field/types.d.ts.map +1 -1
  306. package/build-types/gradient-picker/index.d.ts +49 -11
  307. package/build-types/gradient-picker/index.d.ts.map +1 -1
  308. package/build-types/gradient-picker/stories/index.d.ts +14 -0
  309. package/build-types/gradient-picker/stories/index.d.ts.map +1 -0
  310. package/build-types/gradient-picker/types.d.ts +87 -0
  311. package/build-types/gradient-picker/types.d.ts.map +1 -0
  312. package/build-types/grid/hook.d.ts +2 -2
  313. package/build-types/h-stack/hook.d.ts +2 -2
  314. package/build-types/heading/hook.d.ts +2 -2
  315. package/build-types/index.d.ts +128 -0
  316. package/build-types/index.d.ts.map +1 -0
  317. package/build-types/input-control/styles/input-control-styles.d.ts +2 -2
  318. package/build-types/item-group/item/hook.d.ts +2 -2
  319. package/build-types/item-group/item-group/hook.d.ts +2 -2
  320. package/build-types/navigation/styles/navigation-styles.d.ts +2 -2
  321. package/build-types/navigator/navigator-back-button/hook.d.ts +2 -2
  322. package/build-types/navigator/navigator-button/hook.d.ts +2 -2
  323. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  324. package/build-types/navigator/navigator-screen/component.d.ts +1 -1
  325. package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
  326. package/build-types/navigator/stories/index.d.ts +1 -0
  327. package/build-types/navigator/stories/index.d.ts.map +1 -1
  328. package/build-types/navigator/types.d.ts +2 -2
  329. package/build-types/navigator/types.d.ts.map +1 -1
  330. package/build-types/number-control/index.d.ts +2 -2
  331. package/build-types/number-control/stories/index.d.ts +2 -2
  332. package/build-types/palette-edit/index.d.ts.map +1 -1
  333. package/build-types/palette-edit/styles.d.ts +3 -3
  334. package/build-types/popover/index.d.ts +1 -1
  335. package/build-types/popover/stories/e2e/index.d.ts +1 -1
  336. package/build-types/private-apis.d.ts +2 -3
  337. package/build-types/private-apis.d.ts.map +1 -1
  338. package/build-types/query-controls/author-select.d.ts.map +1 -1
  339. package/build-types/query-controls/category-select.d.ts.map +1 -1
  340. package/build-types/query-controls/index.d.ts.map +1 -1
  341. package/build-types/range-control/index.d.ts +1 -1
  342. package/build-types/range-control/styles/range-control-styles.d.ts +2 -2
  343. package/build-types/resizable-box/index.d.ts +1 -1
  344. package/build-types/resizable-box/resize-tooltip/index.d.ts +1 -1
  345. package/build-types/resizable-box/resize-tooltip/utils.d.ts +1 -1
  346. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  347. package/build-types/resizable-box/stories/index.d.ts +2 -2
  348. package/build-types/scrollable/hook.d.ts +2 -2
  349. package/build-types/search-control/index.d.ts +1 -1
  350. package/build-types/search-control/stories/index.d.ts +2 -2
  351. package/build-types/spacer/hook.d.ts +2 -2
  352. package/build-types/spinner/index.d.ts +1 -1
  353. package/build-types/surface/hook.d.ts +2 -2
  354. package/build-types/tab-panel/index.d.ts.map +1 -1
  355. package/build-types/text/hook.d.ts +2 -2
  356. package/build-types/text-control/index.d.ts +1 -1
  357. package/build-types/toolbar/toolbar-button/index.d.ts +2 -2
  358. package/build-types/tools-panel/tools-panel/hook.d.ts +2 -2
  359. package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
  360. package/build-types/tools-panel/tools-panel-header/hook.d.ts +2 -2
  361. package/build-types/tools-panel/tools-panel-item/hook.d.ts +2 -2
  362. package/build-types/tools-panel/types.d.ts +1 -0
  363. package/build-types/tools-panel/types.d.ts.map +1 -1
  364. package/build-types/truncate/hook.d.ts +2 -2
  365. package/build-types/ui/control-group/hook.d.ts +2 -2
  366. package/build-types/ui/control-label/hook.d.ts +2 -2
  367. package/build-types/ui/form-group/form-group.d.ts +2 -2
  368. package/build-types/ui/form-group/use-form-group.d.ts +2 -2
  369. package/build-types/unit-control/index.d.ts +1 -1
  370. package/build-types/unit-control/styles/unit-control-styles.d.ts +2 -2
  371. package/build-types/utils/input/input-control.d.ts.map +1 -1
  372. package/build-types/v-stack/hook.d.ts +2 -2
  373. package/package.json +20 -19
  374. package/src/angle-picker-control/angle-circle.tsx +0 -1
  375. package/src/angle-picker-control/index.tsx +14 -27
  376. package/src/angle-picker-control/styles/angle-picker-control-styles.tsx +16 -9
  377. package/src/animate/index.tsx +75 -0
  378. package/src/animate/stories/index.tsx +102 -0
  379. package/src/animate/types.ts +32 -0
  380. package/src/border-box-control/stories/index.tsx +1 -1
  381. package/src/box-control/axial-input-controls.tsx +1 -1
  382. package/src/circular-option-picker/style.scss +10 -0
  383. package/src/color-indicator/style.scss +1 -0
  384. package/src/color-picker/README.md +2 -2
  385. package/src/color-picker/color-input.tsx +1 -12
  386. package/src/color-picker/component.tsx +9 -18
  387. package/src/color-picker/hex-input.tsx +2 -7
  388. package/src/color-picker/hsl-input.tsx +2 -7
  389. package/src/color-picker/input-with-slider.tsx +1 -9
  390. package/src/color-picker/legacy-adapter.tsx +1 -2
  391. package/src/color-picker/picker.tsx +5 -6
  392. package/src/color-picker/rgb-input.tsx +2 -7
  393. package/src/color-picker/stories/index.tsx +51 -0
  394. package/src/color-picker/test/{index.js → index.tsx} +36 -18
  395. package/src/color-picker/types.ts +128 -1
  396. package/src/color-picker/use-deprecated-props.ts +2 -53
  397. package/src/combobox-control/stories/index.tsx +1 -1
  398. package/src/custom-gradient-picker/{constants.js → constants.ts} +2 -2
  399. package/src/custom-gradient-picker/gradient-bar/{control-points.js → control-points.tsx} +171 -134
  400. package/src/custom-gradient-picker/gradient-bar/{index.js → index.tsx} +32 -10
  401. package/src/custom-gradient-picker/gradient-bar/test/{utils.js → utils.ts} +58 -31
  402. package/src/custom-gradient-picker/gradient-bar/utils.ts +193 -0
  403. package/src/custom-gradient-picker/{index.js → index.tsx} +63 -22
  404. package/src/custom-gradient-picker/serializer.ts +78 -0
  405. package/src/custom-gradient-picker/stories/index.tsx +45 -0
  406. package/src/custom-gradient-picker/style.scss +25 -4
  407. package/src/custom-gradient-picker/test/{serializer.js → serializer.ts} +39 -33
  408. package/src/custom-gradient-picker/types.ts +119 -0
  409. package/src/custom-gradient-picker/{utils.js → utils.ts} +37 -22
  410. package/src/custom-select-control/test/index.js +6 -4
  411. package/src/drop-zone/index.tsx +12 -8
  412. package/src/drop-zone/style.scss +1 -1
  413. package/src/{color-list-picker → duotone-picker/color-list-picker}/index.tsx +7 -6
  414. package/src/{color-list-picker → duotone-picker/color-list-picker}/types.ts +2 -2
  415. package/src/duotone-picker/{custom-duotone-bar.js → custom-duotone-bar.tsx} +7 -1
  416. package/src/duotone-picker/{duotone-picker.js → duotone-picker.tsx} +39 -2
  417. package/src/duotone-picker/{duotone-swatch.js → duotone-swatch.tsx} +2 -1
  418. package/src/duotone-picker/stories/{duotone-picker.js → duotone-picker.tsx} +15 -8
  419. package/src/duotone-picker/stories/{duotone-swatch.js → duotone-swatch.tsx} +9 -3
  420. package/src/duotone-picker/types.ts +61 -0
  421. package/src/duotone-picker/{utils.js → utils.ts} +29 -14
  422. package/src/flex/flex-item/README.md +1 -1
  423. package/src/form-token-field/README.md +1 -0
  424. package/src/form-token-field/index.tsx +10 -3
  425. package/src/form-token-field/style.scss +0 -7
  426. package/src/form-token-field/test/index.tsx +1 -0
  427. package/src/form-token-field/types.ts +6 -0
  428. package/src/gradient-picker/README.md +16 -23
  429. package/src/gradient-picker/{index.js → index.tsx} +70 -16
  430. package/src/gradient-picker/stories/{index.js → index.tsx} +19 -8
  431. package/src/gradient-picker/types.ts +89 -0
  432. package/src/item-group/test/index.js +5 -3
  433. package/src/mobile/keyboard-aware-flat-list/index.android.js +0 -4
  434. package/src/mobile/keyboard-aware-flat-list/index.ios.js +118 -67
  435. package/src/mobile/keyboard-aware-flat-list/test/use-keyboard-offset.native.js +203 -0
  436. package/src/mobile/keyboard-aware-flat-list/test/use-scroll-to-text-input.native.js +140 -0
  437. package/src/mobile/keyboard-aware-flat-list/test/use-text-input-caret-position.native.js +82 -0
  438. package/src/mobile/keyboard-aware-flat-list/test/use-text-input-offset.native.js +147 -0
  439. package/src/mobile/keyboard-aware-flat-list/use-keyboard-offset.native.js +87 -0
  440. package/src/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js +105 -0
  441. package/src/mobile/keyboard-aware-flat-list/use-text-input-caret-position.native.js +36 -0
  442. package/src/mobile/keyboard-aware-flat-list/use-text-input-offset.native.js +54 -0
  443. package/src/navigator/navigator-provider/component.tsx +2 -0
  444. package/src/navigator/navigator-screen/component.tsx +5 -2
  445. package/src/navigator/stories/index.tsx +68 -0
  446. package/src/navigator/test/index.tsx +52 -0
  447. package/src/navigator/types.ts +2 -1
  448. package/src/palette-edit/index.tsx +4 -5
  449. package/src/query-controls/author-select.tsx +1 -0
  450. package/src/query-controls/category-select.tsx +1 -0
  451. package/src/query-controls/index.tsx +4 -2
  452. package/src/resizable-box/resize-tooltip/utils.ts +1 -1
  453. package/src/sandbox/index.native.js +139 -112
  454. package/src/slot-fill/test/slot.js +8 -6
  455. package/src/style.scss +1 -1
  456. package/src/tab-panel/index.tsx +7 -2
  457. package/src/tools-panel/test/index.tsx +86 -0
  458. package/src/tools-panel/tools-panel/hook.ts +44 -4
  459. package/src/tools-panel/types.ts +1 -0
  460. package/src/tooltip/test/index.js +251 -301
  461. package/src/utils/input/input-control.js +1 -0
  462. package/tsconfig.json +1 -3
  463. package/tsconfig.tsbuildinfo +1 -1
  464. package/build/color-list-picker/index.js.map +0 -1
  465. package/build-module/color-list-picker/index.js.map +0 -1
  466. package/build-types/color-list-picker/index.d.ts.map +0 -1
  467. package/build-types/color-list-picker/types.d.ts.map +0 -1
  468. package/src/animate/index.js +0 -60
  469. package/src/animate/stories/index.js +0 -53
  470. package/src/color-picker/stories/index.js +0 -41
  471. package/src/custom-gradient-picker/gradient-bar/utils.js +0 -189
  472. package/src/custom-gradient-picker/serializer.js +0 -48
  473. package/src/custom-gradient-picker/stories/index.js +0 -33
  474. /package/build/{color-list-picker → animate}/types.js +0 -0
  475. /package/build-module/{color-list-picker → animate}/types.js +0 -0
  476. /package/build-module/{color-list-picker → animate}/types.js.map +0 -0
  477. /package/{build/color-list-picker → build-module/custom-gradient-picker}/types.js.map +0 -0
  478. /package/build-types/{color-list-picker → duotone-picker/color-list-picker}/index.d.ts +0 -0
  479. /package/src/custom-gradient-picker/gradient-bar/{constants.js → constants.ts} +0 -0
  480. /package/src/custom-gradient-picker/styles/{custom-gradient-picker-styles.js → custom-gradient-picker-styles.tsx} +0 -0
  481. /package/src/{color-list-picker → duotone-picker/color-list-picker}/style.scss +0 -0
  482. /package/src/duotone-picker/{index.js → index.ts} +0 -0
  483. /package/src/{index.js → index.ts} +0 -0
  484. /package/src/{private-apis.js → private-apis.ts} +0 -0
@@ -22,6 +22,7 @@ import {
22
22
  NavigatorToParentButton,
23
23
  useNavigator,
24
24
  } from '..';
25
+ import type { NavigateOptions } from '../types';
25
26
 
26
27
  const INVALID_HTML_ATTRIBUTE = {
27
28
  raw: ' "\'><=invalid_path',
@@ -57,6 +58,7 @@ const BUTTON_TEXT = {
57
58
  'Navigate to screen with an invalid HTML value as a path.',
58
59
  back: 'Go back',
59
60
  backUsingGoTo: 'Go back using goTo',
61
+ goToWithSkipFocus: 'Go to with skipFocus',
60
62
  };
61
63
 
62
64
  type CustomTestOnClickHandler = (
@@ -64,6 +66,7 @@ type CustomTestOnClickHandler = (
64
66
  | {
65
67
  type: 'goTo';
66
68
  path: string;
69
+ options?: NavigateOptions;
67
70
  }
68
71
  | { type: 'goBack' }
69
72
  | { type: 'goToParent' }
@@ -108,6 +111,26 @@ function CustomNavigatorGoToBackButton( {
108
111
  );
109
112
  }
110
113
 
114
+ function CustomNavigatorGoToSkipFocusButton( {
115
+ path,
116
+ onClick,
117
+ ...props
118
+ }: Omit< ComponentPropsWithoutRef< typeof NavigatorButton >, 'onClick' > & {
119
+ onClick?: CustomTestOnClickHandler;
120
+ } ) {
121
+ const { goTo } = useNavigator();
122
+ return (
123
+ <Button
124
+ onClick={ () => {
125
+ goTo( path, { skipFocus: true } );
126
+ // Used to spy on the values passed to `navigator.goTo`.
127
+ onClick?.( { type: 'goTo', path } );
128
+ } }
129
+ { ...props }
130
+ />
131
+ );
132
+ }
133
+
111
134
  function CustomNavigatorBackButton( {
112
135
  onClick,
113
136
  ...props
@@ -342,6 +365,12 @@ const MyHierarchicalNavigation = ( {
342
365
  { BUTTON_TEXT.backUsingGoTo }
343
366
  </CustomNavigatorGoToBackButton>
344
367
  </NavigatorScreen>
368
+ <CustomNavigatorGoToSkipFocusButton
369
+ path={ PATHS.NESTED }
370
+ onClick={ onNavigatorButtonClick }
371
+ >
372
+ { BUTTON_TEXT.goToWithSkipFocus }
373
+ </CustomNavigatorGoToSkipFocusButton>
345
374
  </NavigatorProvider>
346
375
  </>
347
376
  );
@@ -716,6 +745,29 @@ describe( 'Navigator', () => {
716
745
  await user.click( getNavigationButton( 'back' ) );
717
746
  expect( getNavigationButton( 'toChildScreen' ) ).toHaveFocus();
718
747
  } );
748
+
749
+ it( 'should skip focus based on location `skipFocus` option', async () => {
750
+ const user = userEvent.setup();
751
+ render( <MyHierarchicalNavigation /> );
752
+
753
+ // Navigate to child screen with skipFocus.
754
+ await user.click( getNavigationButton( 'goToWithSkipFocus' ) );
755
+ expect( queryScreen( 'home' ) ).not.toBeInTheDocument();
756
+ expect( getScreen( 'nested' ) ).toBeInTheDocument();
757
+
758
+ // The clicked button should remain focused.
759
+ expect( getNavigationButton( 'goToWithSkipFocus' ) ).toHaveFocus();
760
+
761
+ // Navigate back to parent screen.
762
+ await user.click( getNavigationButton( 'back' ) );
763
+ expect( getScreen( 'child' ) ).toBeInTheDocument();
764
+ // The first tabbable element receives focus.
765
+ expect(
766
+ screen.getByRole( 'button', {
767
+ name: 'First tabbable child screen button',
768
+ } )
769
+ ).toHaveFocus();
770
+ } );
719
771
  } );
720
772
 
721
773
  describe( 'animation', () => {
@@ -10,9 +10,10 @@ import type { ButtonAsButtonProps } from '../button/types';
10
10
 
11
11
  export type MatchParams = Record< string, string | string[] >;
12
12
 
13
- type NavigateOptions = {
13
+ export type NavigateOptions = {
14
14
  focusTargetSelector?: string;
15
15
  isBack?: boolean;
16
+ skipFocus?: boolean;
16
17
  };
17
18
 
18
19
  export type NavigatorLocation = NavigateOptions & {
@@ -133,7 +133,7 @@ function ColorPickerPopover< T extends Color | Gradient >( {
133
133
  __nextHasNoMargin
134
134
  __experimentalIsRenderedInSidebar
135
135
  value={ element.gradient }
136
- onChange={ ( newGradient: Gradient[ 'gradient' ] ) => {
136
+ onChange={ ( newGradient ) => {
137
137
  onChange( {
138
138
  ...element,
139
139
  gradient: newGradient,
@@ -532,7 +532,7 @@ export function PaletteEdit( {
532
532
  { hasElements && (
533
533
  <>
534
534
  { isEditing && (
535
- <PaletteEditListView< typeof elements[ number ] >
535
+ <PaletteEditListView< ( typeof elements )[ number ] >
536
536
  canOnlyChangeValues={ canOnlyChangeValues }
537
537
  elements={ elements }
538
538
  // @ts-expect-error TODO: Don't know how to resolve
@@ -548,13 +548,13 @@ export function PaletteEdit( {
548
548
  isGradient={ isGradient }
549
549
  onClose={ () => setEditingElement( null ) }
550
550
  onChange={ (
551
- newElement: typeof elements[ number ]
551
+ newElement: ( typeof elements )[ number ]
552
552
  ) => {
553
553
  debounceOnChange(
554
554
  // @ts-expect-error TODO: Don't know how to resolve
555
555
  elements.map(
556
556
  (
557
- currentElement: typeof elements[ number ],
557
+ currentElement: ( typeof elements )[ number ],
558
558
  currentIndex: number
559
559
  ) => {
560
560
  if (
@@ -572,7 +572,6 @@ export function PaletteEdit( {
572
572
  ) }
573
573
  { ! isEditing &&
574
574
  ( isGradient ? (
575
- // @ts-expect-error TODO: Remove when GradientPicker is typed.
576
575
  <GradientPicker
577
576
  __nextHasNoMargin
578
577
  gradients={ gradients }
@@ -27,6 +27,7 @@ export default function AuthorSelect( {
27
27
  ? String( selectedAuthorId )
28
28
  : undefined
29
29
  }
30
+ __nextHasNoMarginBottom
30
31
  />
31
32
  );
32
33
  }
@@ -36,6 +36,7 @@ export default function CategorySelect( {
36
36
  : undefined
37
37
  }
38
38
  { ...props }
39
+ __nextHasNoMarginBottom
39
40
  />
40
41
  );
41
42
  }
@@ -11,6 +11,7 @@ import CategorySelect from './category-select';
11
11
  import FormTokenField from '../form-token-field';
12
12
  import RangeControl from '../range-control';
13
13
  import SelectControl from '../select-control';
14
+ import { VStack } from '../v-stack';
14
15
  import type {
15
16
  QueryControlsProps,
16
17
  QueryControlsWithMultipleCategorySelectionProps,
@@ -75,7 +76,7 @@ export function QueryControls( {
75
76
  ...props
76
77
  }: QueryControlsProps ) {
77
78
  return (
78
- <>
79
+ <VStack spacing="4" className="components-query-controls">
79
80
  { [
80
81
  onOrderChange && onOrderByChange && (
81
82
  <SelectControl
@@ -142,6 +143,7 @@ export function QueryControls( {
142
143
  props.categorySuggestions &&
143
144
  props.onCategoryChange && (
144
145
  <FormTokenField
146
+ __nextHasNoMarginBottom
145
147
  key="query-controls-categories-select"
146
148
  label={ __( 'Categories' ) }
147
149
  value={
@@ -185,7 +187,7 @@ export function QueryControls( {
185
187
  />
186
188
  ),
187
189
  ] }
188
- </>
190
+ </VStack>
189
191
  );
190
192
  }
191
193
 
@@ -13,7 +13,7 @@ export const POSITIONS = {
13
13
  corner: 'corner',
14
14
  } as const;
15
15
 
16
- export type Position = typeof POSITIONS[ keyof typeof POSITIONS ];
16
+ export type Position = ( typeof POSITIONS )[ keyof typeof POSITIONS ];
17
17
 
18
18
  interface UseResizeLabelProps {
19
19
  /** The label value. */
@@ -14,6 +14,8 @@ import {
14
14
  useRef,
15
15
  useState,
16
16
  useEffect,
17
+ forwardRef,
18
+ useCallback,
17
19
  } from '@wordpress/element';
18
20
  import { usePreferredColorScheme } from '@wordpress/compose';
19
21
 
@@ -22,85 +24,84 @@ import { usePreferredColorScheme } from '@wordpress/compose';
22
24
  */
23
25
  import sandboxStyles from './style.scss';
24
26
 
25
- const observeAndResizeJS = function () {
26
- // Hermes requires a special directive to preserve the original source code
27
- // when using `Function.prototype.toString()` below.
28
- // https://github.com/facebook/hermes/issues/114#issuecomment-887106990
29
- 'show source';
30
- const { MutationObserver } = window;
27
+ const observeAndResizeJS = `
28
+ (function() {
29
+ const { MutationObserver } = window;
31
30
 
32
- if ( ! MutationObserver || ! document.body || ! window.parent ) {
33
- return;
34
- }
35
-
36
- function sendResize() {
37
- const clientBoundingRect = document.body.getBoundingClientRect();
38
-
39
- // The function postMessage is exposed by the react-native-webview library
40
- // to communicate between React Native and the WebView, in this case,
41
- // we use it for notifying resize changes.
42
- window.ReactNativeWebView.postMessage(
43
- JSON.stringify( {
44
- action: 'resize',
45
- width: clientBoundingRect.width,
46
- height: clientBoundingRect.height,
47
- } )
48
- );
49
- }
31
+ if ( ! MutationObserver || ! document.body || ! window.parent ) {
32
+ return;
33
+ }
50
34
 
51
- const observer = new MutationObserver( sendResize );
52
- observer.observe( document.body, {
53
- attributes: true,
54
- attributeOldValue: false,
55
- characterData: true,
56
- characterDataOldValue: false,
57
- childList: true,
58
- subtree: true,
59
- } );
35
+ function sendResize() {
36
+ const clientBoundingRect = document.body.getBoundingClientRect();
37
+
38
+ // The function postMessage is exposed by the react-native-webview library
39
+ // to communicate between React Native and the WebView, in this case,
40
+ // we use it for notifying resize changes.
41
+ window.ReactNativeWebView.postMessage(
42
+ JSON.stringify( {
43
+ action: 'resize',
44
+ width: clientBoundingRect.width,
45
+ height: clientBoundingRect.height,
46
+ } )
47
+ );
48
+ }
60
49
 
61
- window.addEventListener( 'load', sendResize, true );
62
-
63
- // Hack: Remove viewport unit styles, as these are relative
64
- // the iframe root and interfere with our mechanism for
65
- // determining the unconstrained page bounds.
66
- function removeViewportStyles( ruleOrNode ) {
67
- if ( ruleOrNode.style ) {
68
- [ 'width', 'height', 'minHeight', 'maxHeight' ].forEach( function (
69
- style
70
- ) {
71
- if (
72
- /^\\d+(vmin|vmax|vh|vw)$/.test( ruleOrNode.style[ style ] )
50
+ const observer = new MutationObserver( sendResize );
51
+ observer.observe( document.body, {
52
+ attributes: true,
53
+ attributeOldValue: false,
54
+ characterData: true,
55
+ characterDataOldValue: false,
56
+ childList: true,
57
+ subtree: true,
58
+ } );
59
+
60
+ window.addEventListener( 'load', sendResize, true );
61
+
62
+ // Hack: Remove viewport unit styles, as these are relative
63
+ // the iframe root and interfere with our mechanism for
64
+ // determining the unconstrained page bounds.
65
+ function removeViewportStyles( ruleOrNode ) {
66
+ if ( ruleOrNode.style ) {
67
+ [ 'width', 'height', 'minHeight', 'maxHeight' ].forEach( function (
68
+ style
73
69
  ) {
74
- ruleOrNode.style[ style ] = '';
75
- }
76
- } );
70
+ if (
71
+ /^\\d+(vmin|vmax|vh|vw)$/.test( ruleOrNode.style[ style ] )
72
+ ) {
73
+ ruleOrNode.style[ style ] = '';
74
+ }
75
+ } );
76
+ }
77
77
  }
78
- }
79
78
 
80
- Array.prototype.forEach.call(
81
- document.querySelectorAll( '[style]' ),
82
- removeViewportStyles
83
- );
84
- Array.prototype.forEach.call(
85
- document.styleSheets,
86
- function ( stylesheet ) {
87
- Array.prototype.forEach.call(
88
- stylesheet.cssRules || stylesheet.rules,
89
- removeViewportStyles
90
- );
91
- }
92
- );
79
+ Array.prototype.forEach.call(
80
+ document.querySelectorAll( '[style]' ),
81
+ removeViewportStyles
82
+ );
83
+ Array.prototype.forEach.call(
84
+ document.styleSheets,
85
+ function ( stylesheet ) {
86
+ Array.prototype.forEach.call(
87
+ stylesheet.cssRules || stylesheet.rules,
88
+ removeViewportStyles
89
+ );
90
+ }
91
+ );
93
92
 
94
- document.body.style.position = 'absolute';
95
- document.body.style.width = '100%';
96
- document.body.setAttribute( 'data-resizable-iframe-connected', '' );
93
+ document.body.style.position = 'absolute';
94
+ document.body.style.width = '100%';
95
+ document.body.setAttribute( 'data-resizable-iframe-connected', '' );
97
96
 
98
- sendResize();
97
+ sendResize();
99
98
 
100
- // Resize events can change the width of elements with 100% width, but we don't
101
- // get an DOM mutations for that, so do the resize when the window is resized, too.
102
- window.addEventListener( 'resize', sendResize, true );
103
- };
99
+ // Resize events can change the width of elements with 100% width, but we don't
100
+ // get an DOM mutations for that, so do the resize when the window is resized, too.
101
+ window.addEventListener( 'resize', sendResize, true );
102
+ window.addEventListener( 'orientationchange', sendResize, true );
103
+ })();
104
+ `;
104
105
 
105
106
  const style = `
106
107
  body {
@@ -171,20 +172,23 @@ const style = `
171
172
 
172
173
  const EMPTY_ARRAY = [];
173
174
 
174
- function Sandbox( {
175
- containerStyle,
176
- customJS,
177
- html = '',
178
- lang = 'en',
179
- providerUrl = '',
180
- scripts = EMPTY_ARRAY,
181
- styles = EMPTY_ARRAY,
182
- title = '',
183
- type,
184
- url,
185
- } ) {
175
+ const Sandbox = forwardRef( function Sandbox(
176
+ {
177
+ containerStyle,
178
+ customJS,
179
+ html = '',
180
+ lang = 'en',
181
+ providerUrl = '',
182
+ scripts = EMPTY_ARRAY,
183
+ styles = EMPTY_ARRAY,
184
+ title = '',
185
+ type,
186
+ url,
187
+ onWindowEvents = {},
188
+ },
189
+ ref
190
+ ) {
186
191
  const colorScheme = usePreferredColorScheme();
187
- const ref = useRef();
188
192
  const [ height, setHeight ] = useState( 0 );
189
193
  const [ contentHtml, setContentHtml ] = useState( getHtmlDoc() );
190
194
 
@@ -230,14 +234,6 @@ function Sandbox( {
230
234
  className={ type }
231
235
  >
232
236
  <div dangerouslySetInnerHTML={ { __html: html } } />
233
- <script
234
- type="text/javascript"
235
- dangerouslySetInnerHTML={ {
236
- __html:
237
- customJS ||
238
- `(${ observeAndResizeJS.toString() })();`,
239
- } }
240
- />
241
237
  { scripts.map( ( src ) => (
242
238
  <script key={ src } src={ src } />
243
239
  ) ) }
@@ -247,6 +243,21 @@ function Sandbox( {
247
243
  return '<!DOCTYPE html>' + renderToString( htmlDoc );
248
244
  }
249
245
 
246
+ const getInjectedJavaScript = useCallback( () => {
247
+ // Allow parent to override the resize observers with prop.customJS (legacy support)
248
+ let injectedJS = customJS || observeAndResizeJS;
249
+
250
+ // Add any event listeners that were passed in.
251
+ Object.keys( onWindowEvents ).forEach( ( eventType ) => {
252
+ injectedJS += `
253
+ window.addEventListener( '${ eventType }', function( event ) {
254
+ window.ReactNativeWebView.postMessage( JSON.stringify( { type: '${ eventType }', ...event.data } ) );
255
+ });`;
256
+ } );
257
+
258
+ return injectedJS;
259
+ }, [ customJS, onWindowEvents ] );
260
+
250
261
  function updateContentHtml( forceRerender = false ) {
251
262
  const newContentHtml = getHtmlDoc();
252
263
 
@@ -261,25 +272,6 @@ function Sandbox( {
261
272
  }
262
273
  }
263
274
 
264
- function checkMessageForResize( event ) {
265
- // Attempt to parse the message data as JSON if passed as string.
266
- let data = event.nativeEvent.data || {};
267
-
268
- if ( 'string' === typeof data ) {
269
- try {
270
- data = JSON.parse( data );
271
- } catch ( e ) {}
272
- }
273
-
274
- // Update the state only if the message is formatted as we expect,
275
- // i.e. as an object with a 'resize' action.
276
- if ( 'resize' !== data.action ) {
277
- return;
278
- }
279
-
280
- setHeight( data.height );
281
- }
282
-
283
275
  function getSizeStyle() {
284
276
  const contentHeight = Math.ceil( height );
285
277
 
@@ -290,6 +282,39 @@ function Sandbox( {
290
282
  setIsLandscape( dimensions.window.width >= dimensions.window.height );
291
283
  }
292
284
 
285
+ const onMessage = useCallback(
286
+ ( message ) => {
287
+ let data = message?.nativeEvent?.data;
288
+
289
+ try {
290
+ data = JSON.parse( data );
291
+ } catch ( e ) {
292
+ return;
293
+ }
294
+
295
+ // check for resize event
296
+ if ( 'resize' === data?.action ) {
297
+ setHeight( data.height );
298
+ }
299
+
300
+ // Forward the event to parent event listeners
301
+ Object.keys( onWindowEvents ).forEach( ( eventType ) => {
302
+ if ( data?.type === eventType ) {
303
+ try {
304
+ onWindowEvents[ eventType ]( data );
305
+ } catch ( e ) {
306
+ // eslint-disable-next-line no-console
307
+ console.warn(
308
+ `Error handling event ${ eventType }`,
309
+ e
310
+ );
311
+ }
312
+ }
313
+ } );
314
+ },
315
+ [ onWindowEvents ]
316
+ );
317
+
293
318
  useEffect( () => {
294
319
  const dimensionsChangeSubscription = Dimensions.addEventListener(
295
320
  'change',
@@ -322,6 +347,7 @@ function Sandbox( {
322
347
  sandboxStyles[ 'sandbox-webview__container' ],
323
348
  containerStyle,
324
349
  ] }
350
+ injectedJavaScript={ getInjectedJavaScript() }
325
351
  key={ key }
326
352
  ref={ ref }
327
353
  source={ { baseUrl: providerUrl, html: contentHtml } }
@@ -333,14 +359,15 @@ function Sandbox( {
333
359
  getSizeStyle(),
334
360
  Platform.isAndroid && workaroundStyles.webView,
335
361
  ] }
336
- onMessage={ checkMessageForResize }
362
+ onMessage={ onMessage }
337
363
  scrollEnabled={ false }
338
364
  setBuiltInZoomControls={ false }
339
365
  showsHorizontalScrollIndicator={ false }
340
366
  showsVerticalScrollIndicator={ false }
367
+ mediaPlaybackRequiresUserAction={ false }
341
368
  />
342
369
  );
343
- }
370
+ } );
344
371
 
345
372
  const workaroundStyles = StyleSheet.create( {
346
373
  webView: {
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, fireEvent, screen } from '@testing-library/react';
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
5
6
 
6
7
  /**
7
8
  * Internal dependencies
@@ -92,9 +93,9 @@ describe( 'Slot', () => {
92
93
  expect( container ).toMatchSnapshot();
93
94
  } );
94
95
 
95
- it( 'calls the functions passed as the Slot’s fillProps in the Fill', () => {
96
+ it( 'calls the functions passed as the Slot’s fillProps in the Fill', async () => {
96
97
  const onClose = jest.fn();
97
-
98
+ const user = userEvent.setup();
98
99
  render(
99
100
  <Provider>
100
101
  <Slot name="chicken" fillProps={ { onClose } } />
@@ -108,7 +109,7 @@ describe( 'Slot', () => {
108
109
  </Provider>
109
110
  );
110
111
 
111
- fireEvent.click( screen.getByText( 'Click me' ) );
112
+ await user.click( screen.getByText( 'Click me' ) );
112
113
 
113
114
  expect( onClose ).toHaveBeenCalledTimes( 1 );
114
115
  } );
@@ -149,7 +150,8 @@ describe( 'Slot', () => {
149
150
  expect( container ).toMatchSnapshot();
150
151
  } );
151
152
 
152
- it( 'should re-render Slot when not bubbling virtually', () => {
153
+ it( 'should re-render Slot when not bubbling virtually', async () => {
154
+ const user = userEvent.setup();
153
155
  const { container } = render(
154
156
  <Provider>
155
157
  <div>
@@ -161,7 +163,7 @@ describe( 'Slot', () => {
161
163
 
162
164
  expect( container ).toMatchSnapshot();
163
165
 
164
- fireEvent.click( screen.getByRole( 'button' ) );
166
+ await user.click( screen.getByRole( 'button' ) );
165
167
 
166
168
  expect( container ).toMatchSnapshot();
167
169
  } );
package/src/style.scss CHANGED
@@ -11,7 +11,6 @@
11
11
  @import "./palette-edit/style.scss";
12
12
  @import "./color-indicator/style.scss";
13
13
  @import "./combobox-control/style.scss";
14
- @import "./color-list-picker/style.scss";
15
14
  @import "./color-palette/style.scss";
16
15
  @import "./custom-gradient-picker/style.scss";
17
16
  @import "./custom-select-control/style.scss";
@@ -21,6 +20,7 @@
21
20
  @import "./dropdown/style.scss";
22
21
  @import "./dropdown-menu/style.scss";
23
22
  @import "./duotone-picker/style.scss";
23
+ @import "./duotone-picker/color-list-picker/style.scss";
24
24
  @import "./form-toggle/style.scss";
25
25
  @import "./form-token-field/style.scss";
26
26
  @import "./guide/style.scss";
@@ -6,7 +6,12 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useState, useEffect, useCallback } from '@wordpress/element';
9
+ import {
10
+ useState,
11
+ useEffect,
12
+ useLayoutEffect,
13
+ useCallback,
14
+ } from '@wordpress/element';
10
15
  import { useInstanceId } from '@wordpress/compose';
11
16
 
12
17
  /**
@@ -104,7 +109,7 @@ export function TabPanel( {
104
109
  const selectedId = `${ instanceId }-${ selectedTab?.name ?? 'none' }`;
105
110
 
106
111
  // Handle selecting the initial tab.
107
- useEffect( () => {
112
+ useLayoutEffect( () => {
108
113
  // If there's a selected tab, don't override it.
109
114
  if ( selectedTab ) {
110
115
  return;