@wordpress/components 25.7.0 → 25.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (630) hide show
  1. package/CHANGELOG.md +66 -1
  2. package/build/animation/index.js +6 -0
  3. package/build/animation/index.js.map +1 -1
  4. package/build/border-control/border-control-dropdown/component.js +1 -1
  5. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  6. package/build/border-control/styles.js +20 -20
  7. package/build/border-control/styles.js.map +1 -1
  8. package/build/box-control/unit-control.js +1 -1
  9. package/build/box-control/unit-control.js.map +1 -1
  10. package/build/button/index.js +9 -1
  11. package/build/button/index.js.map +1 -1
  12. package/build/button/types.js.map +1 -1
  13. package/build/circular-option-picker/circular-option-picker-actions.js +53 -0
  14. package/build/circular-option-picker/circular-option-picker-actions.js.map +1 -0
  15. package/build/circular-option-picker/circular-option-picker-context.js +14 -0
  16. package/build/circular-option-picker/circular-option-picker-context.js.map +1 -0
  17. package/build/circular-option-picker/circular-option-picker-option-group.js +26 -0
  18. package/build/circular-option-picker/circular-option-picker-option-group.js.map +1 -0
  19. package/build/circular-option-picker/circular-option-picker-option.js +122 -0
  20. package/build/circular-option-picker/circular-option-picker-option.js.map +1 -0
  21. package/build/circular-option-picker/circular-option-picker.js +172 -0
  22. package/build/circular-option-picker/circular-option-picker.js.map +1 -0
  23. package/build/circular-option-picker/index.js +29 -137
  24. package/build/circular-option-picker/index.js.map +1 -1
  25. package/build/circular-option-picker/types.js.map +1 -1
  26. package/build/color-palette/index.js +58 -19
  27. package/build/color-palette/index.js.map +1 -1
  28. package/build/color-palette/types.js.map +1 -1
  29. package/build/combobox-control/index.js +0 -3
  30. package/build/combobox-control/index.js.map +1 -1
  31. package/build/composite/index.js.map +1 -1
  32. package/build/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
  33. package/build/date-time/time/index.js +6 -1
  34. package/build/date-time/time/index.js.map +1 -1
  35. package/build/date-time/time/timezone.js +1 -1
  36. package/build/date-time/time/timezone.js.map +1 -1
  37. package/build/dropdown/index.js +11 -23
  38. package/build/dropdown/index.js.map +1 -1
  39. package/build/dropdown/types.js.map +1 -1
  40. package/build/dropdown-menu/index.js +7 -1
  41. package/build/dropdown-menu/index.js.map +1 -1
  42. package/build/dropdown-menu/types.js.map +1 -1
  43. package/build/dropdown-menu-v2/styles.js +16 -16
  44. package/build/dropdown-menu-v2/styles.js.map +1 -1
  45. package/build/duotone-picker/color-list-picker/index.js +18 -3
  46. package/build/duotone-picker/color-list-picker/index.js.map +1 -1
  47. package/build/duotone-picker/duotone-picker.js +33 -1
  48. package/build/duotone-picker/duotone-picker.js.map +1 -1
  49. package/build/duotone-picker/types.js.map +1 -1
  50. package/build/focusable-iframe/index.js +0 -4
  51. package/build/focusable-iframe/index.js.map +1 -1
  52. package/build/focusable-iframe/types.js +6 -0
  53. package/build/focusable-iframe/types.js.map +1 -0
  54. package/build/form-token-field/index.js +6 -2
  55. package/build/form-token-field/index.js.map +1 -1
  56. package/build/form-token-field/types.js.map +1 -1
  57. package/build/gradient-picker/index.js +57 -15
  58. package/build/gradient-picker/index.js.map +1 -1
  59. package/build/gradient-picker/types.js.map +1 -1
  60. package/build/higher-order/navigate-regions/index.js.map +1 -1
  61. package/build/higher-order/with-focus-outside/index.js +1 -2
  62. package/build/higher-order/with-focus-outside/index.js.map +1 -1
  63. package/build/higher-order/with-spoken-messages/index.js.map +1 -1
  64. package/build/index.js +6 -0
  65. package/build/index.js.map +1 -1
  66. package/build/input-control/styles/input-control-styles.js +22 -22
  67. package/build/input-control/styles/input-control-styles.js.map +1 -1
  68. package/build/mobile/bottom-sheet/index.native.js +1 -0
  69. package/build/mobile/bottom-sheet/index.native.js.map +1 -1
  70. package/build/mobile/global-styles-context/index.native.js.map +1 -1
  71. package/build/modal/index.js +12 -3
  72. package/build/modal/index.js.map +1 -1
  73. package/build/modal/types.js.map +1 -1
  74. package/build/navigation/use-navigation-tree-nodes.js.map +1 -1
  75. package/build/notice/index.js +19 -7
  76. package/build/notice/index.js.map +1 -1
  77. package/build/palette-edit/styles.js +10 -10
  78. package/build/palette-edit/styles.js.map +1 -1
  79. package/build/placeholder/index.js +10 -4
  80. package/build/placeholder/index.js.map +1 -1
  81. package/build/popover/index.js +37 -83
  82. package/build/popover/index.js.map +1 -1
  83. package/build/popover/types.js.map +1 -1
  84. package/build/popover/utils.js +9 -41
  85. package/build/popover/utils.js.map +1 -1
  86. package/build/search-control/index.js +12 -3
  87. package/build/search-control/index.js.map +1 -1
  88. package/build/search-control/types.js.map +1 -1
  89. package/build/text/styles.js +7 -7
  90. package/build/text/styles.js.map +1 -1
  91. package/build/toggle-group-control/toggle-group-control/as-button-group.js +30 -45
  92. package/build/toggle-group-control/toggle-group-control/as-button-group.js.map +1 -1
  93. package/build/toggle-group-control/toggle-group-control/as-radio-group.js +40 -41
  94. package/build/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  95. package/build/toggle-group-control/toggle-group-control/component.js +10 -5
  96. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  97. package/build/toggle-group-control/toggle-group-control/styles.js +9 -16
  98. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  99. package/build/toggle-group-control/toggle-group-control/utils.js +44 -0
  100. package/build/toggle-group-control/toggle-group-control/utils.js.map +1 -0
  101. package/build/toggle-group-control/toggle-group-control-option-base/component.js +36 -17
  102. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  103. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +10 -8
  104. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  105. package/build/toggle-group-control/types.js.map +1 -1
  106. package/build/toolbar/toolbar/index.js +7 -1
  107. package/build/toolbar/toolbar/index.js.map +1 -1
  108. package/build/toolbar/toolbar-dropdown-menu/index.js +1 -3
  109. package/build/toolbar/toolbar-dropdown-menu/index.js.map +1 -1
  110. package/build/toolbar/toolbar-group/index.js +16 -12
  111. package/build/toolbar/toolbar-group/index.js.map +1 -1
  112. package/build/toolbar/toolbar-group/toolbar-group-collapsed.js +0 -2
  113. package/build/toolbar/toolbar-group/toolbar-group-collapsed.js.map +1 -1
  114. package/build/toolbar/toolbar-group/toolbar-group-container.js +3 -1
  115. package/build/toolbar/toolbar-group/toolbar-group-container.js.map +1 -1
  116. package/build/toolbar/toolbar-group/types.js +6 -0
  117. package/build/toolbar/toolbar-group/types.js.map +1 -0
  118. package/build/toolbar/toolbar-item/index.js +1 -1
  119. package/build/toolbar/toolbar-item/index.js.map +1 -1
  120. package/build/tooltip/index.js +51 -225
  121. package/build/tooltip/index.js.map +1 -1
  122. package/build/tooltip/types.js +6 -0
  123. package/build/tooltip/types.js.map +1 -0
  124. package/build/ui/context/context-connect.js.map +1 -1
  125. package/build/ui/context/wordpress-component.js.map +1 -1
  126. package/build/unit-control/index.js.map +1 -1
  127. package/build/unit-control/styles/unit-control-styles.js +7 -7
  128. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  129. package/build/utils/colors-values.js +1 -1
  130. package/build/utils/colors-values.js.map +1 -1
  131. package/build/utils/use-deprecated-props.js.map +1 -1
  132. package/build-module/animation/index.js +1 -1
  133. package/build-module/animation/index.js.map +1 -1
  134. package/build-module/border-control/border-control-dropdown/component.js +1 -1
  135. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  136. package/build-module/border-control/styles.js +20 -20
  137. package/build-module/border-control/styles.js.map +1 -1
  138. package/build-module/box-control/unit-control.js +1 -1
  139. package/build-module/box-control/unit-control.js.map +1 -1
  140. package/build-module/button/index.js +9 -1
  141. package/build-module/button/index.js.map +1 -1
  142. package/build-module/button/types.js.map +1 -1
  143. package/build-module/circular-option-picker/circular-option-picker-actions.js +44 -0
  144. package/build-module/circular-option-picker/circular-option-picker-actions.js.map +1 -0
  145. package/build-module/circular-option-picker/circular-option-picker-context.js +11 -0
  146. package/build-module/circular-option-picker/circular-option-picker-context.js.map +1 -0
  147. package/build-module/circular-option-picker/circular-option-picker-option-group.js +23 -0
  148. package/build-module/circular-option-picker/circular-option-picker-option-group.js.map +1 -0
  149. package/build-module/circular-option-picker/circular-option-picker-option.js +114 -0
  150. package/build-module/circular-option-picker/circular-option-picker-option.js.map +1 -0
  151. package/build-module/circular-option-picker/circular-option-picker.js +165 -0
  152. package/build-module/circular-option-picker/circular-option-picker.js.map +1 -0
  153. package/build-module/circular-option-picker/index.js +4 -132
  154. package/build-module/circular-option-picker/index.js.map +1 -1
  155. package/build-module/circular-option-picker/types.js.map +1 -1
  156. package/build-module/color-palette/index.js +58 -19
  157. package/build-module/color-palette/index.js.map +1 -1
  158. package/build-module/color-palette/types.js.map +1 -1
  159. package/build-module/combobox-control/index.js +0 -3
  160. package/build-module/combobox-control/index.js.map +1 -1
  161. package/build-module/composite/index.js +2 -0
  162. package/build-module/composite/index.js.map +1 -1
  163. package/build-module/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
  164. package/build-module/date-time/time/index.js +6 -1
  165. package/build-module/date-time/time/index.js.map +1 -1
  166. package/build-module/date-time/time/timezone.js +1 -1
  167. package/build-module/date-time/time/timezone.js.map +1 -1
  168. package/build-module/dropdown/index.js +12 -24
  169. package/build-module/dropdown/index.js.map +1 -1
  170. package/build-module/dropdown/types.js.map +1 -1
  171. package/build-module/dropdown-menu/index.js +7 -1
  172. package/build-module/dropdown-menu/index.js.map +1 -1
  173. package/build-module/dropdown-menu/types.js.map +1 -1
  174. package/build-module/dropdown-menu-v2/styles.js +16 -16
  175. package/build-module/dropdown-menu-v2/styles.js.map +1 -1
  176. package/build-module/duotone-picker/color-list-picker/index.js +18 -3
  177. package/build-module/duotone-picker/color-list-picker/index.js.map +1 -1
  178. package/build-module/duotone-picker/duotone-picker.js +33 -1
  179. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  180. package/build-module/duotone-picker/types.js.map +1 -1
  181. package/build-module/focusable-iframe/index.js +2 -3
  182. package/build-module/focusable-iframe/index.js.map +1 -1
  183. package/build-module/focusable-iframe/types.js +2 -0
  184. package/build-module/focusable-iframe/types.js.map +1 -0
  185. package/build-module/form-token-field/index.js +6 -2
  186. package/build-module/form-token-field/index.js.map +1 -1
  187. package/build-module/form-token-field/types.js.map +1 -1
  188. package/build-module/gradient-picker/index.js +57 -15
  189. package/build-module/gradient-picker/index.js.map +1 -1
  190. package/build-module/gradient-picker/types.js.map +1 -1
  191. package/build-module/higher-order/navigate-regions/index.js.map +1 -1
  192. package/build-module/higher-order/with-focus-outside/index.js +1 -3
  193. package/build-module/higher-order/with-focus-outside/index.js.map +1 -1
  194. package/build-module/higher-order/with-spoken-messages/index.js.map +1 -1
  195. package/build-module/index.js +1 -1
  196. package/build-module/index.js.map +1 -1
  197. package/build-module/input-control/styles/input-control-styles.js +23 -23
  198. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  199. package/build-module/mobile/bottom-sheet/index.native.js +1 -0
  200. package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
  201. package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
  202. package/build-module/modal/index.js +12 -3
  203. package/build-module/modal/index.js.map +1 -1
  204. package/build-module/modal/types.js.map +1 -1
  205. package/build-module/navigation/use-navigation-tree-nodes.js.map +1 -1
  206. package/build-module/notice/index.js +19 -7
  207. package/build-module/notice/index.js.map +1 -1
  208. package/build-module/palette-edit/styles.js +10 -10
  209. package/build-module/palette-edit/styles.js.map +1 -1
  210. package/build-module/placeholder/index.js +11 -4
  211. package/build-module/placeholder/index.js.map +1 -1
  212. package/build-module/popover/index.js +38 -84
  213. package/build-module/popover/index.js.map +1 -1
  214. package/build-module/popover/types.js.map +1 -1
  215. package/build-module/popover/utils.js +8 -39
  216. package/build-module/popover/utils.js.map +1 -1
  217. package/build-module/search-control/index.js +12 -3
  218. package/build-module/search-control/index.js.map +1 -1
  219. package/build-module/search-control/types.js.map +1 -1
  220. package/build-module/text/styles.js +7 -7
  221. package/build-module/text/styles.js.map +1 -1
  222. package/build-module/toggle-group-control/toggle-group-control/as-button-group.js +32 -47
  223. package/build-module/toggle-group-control/toggle-group-control/as-button-group.js.map +1 -1
  224. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js +41 -42
  225. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  226. package/build-module/toggle-group-control/toggle-group-control/component.js +10 -6
  227. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  228. package/build-module/toggle-group-control/toggle-group-control/styles.js +8 -14
  229. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  230. package/build-module/toggle-group-control/toggle-group-control/utils.js +42 -0
  231. package/build-module/toggle-group-control/toggle-group-control/utils.js.map +1 -0
  232. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +35 -16
  233. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  234. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +8 -7
  235. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  236. package/build-module/toggle-group-control/types.js.map +1 -1
  237. package/build-module/toolbar/toolbar/index.js +7 -1
  238. package/build-module/toolbar/toolbar/index.js.map +1 -1
  239. package/build-module/toolbar/toolbar-dropdown-menu/index.js +5 -3
  240. package/build-module/toolbar/toolbar-dropdown-menu/index.js.map +1 -1
  241. package/build-module/toolbar/toolbar-group/index.js +15 -12
  242. package/build-module/toolbar/toolbar-group/index.js.map +1 -1
  243. package/build-module/toolbar/toolbar-group/toolbar-group-collapsed.js +0 -2
  244. package/build-module/toolbar/toolbar-group/toolbar-group-collapsed.js.map +1 -1
  245. package/build-module/toolbar/toolbar-group/toolbar-group-container.js +3 -1
  246. package/build-module/toolbar/toolbar-group/toolbar-group-container.js.map +1 -1
  247. package/build-module/toolbar/toolbar-group/types.js +2 -0
  248. package/build-module/toolbar/toolbar-group/types.js.map +1 -0
  249. package/build-module/toolbar/toolbar-item/index.js +1 -1
  250. package/build-module/toolbar/toolbar-item/index.js.map +1 -1
  251. package/build-module/tooltip/index.js +53 -224
  252. package/build-module/tooltip/index.js.map +1 -1
  253. package/build-module/tooltip/types.js +2 -0
  254. package/build-module/tooltip/types.js.map +1 -0
  255. package/build-module/ui/context/context-connect.js.map +1 -1
  256. package/build-module/ui/context/wordpress-component.js.map +1 -1
  257. package/build-module/unit-control/index.js.map +1 -1
  258. package/build-module/unit-control/styles/unit-control-styles.js +7 -7
  259. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  260. package/build-module/utils/colors-values.js +1 -1
  261. package/build-module/utils/colors-values.js.map +1 -1
  262. package/build-module/utils/use-deprecated-props.js.map +1 -1
  263. package/build-style/style-rtl.css +35 -73
  264. package/build-style/style.css +35 -73
  265. package/build-types/animation/index.d.ts +1 -1
  266. package/build-types/animation/index.d.ts.map +1 -1
  267. package/build-types/base-control/hooks.d.ts +1 -1
  268. package/build-types/border-box-control/border-box-control/component.d.ts +1 -1
  269. package/build-types/border-box-control/border-box-control/hook.d.ts +46 -46
  270. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +51 -51
  271. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +1 -1
  272. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +46 -46
  273. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +46 -46
  274. package/build-types/border-box-control/stories/index.story.d.ts +2 -2
  275. package/build-types/border-control/border-control/hook.d.ts +45 -45
  276. package/build-types/border-control/border-control-dropdown/hook.d.ts +45 -45
  277. package/build-types/border-control/border-control-style-picker/hook.d.ts +45 -45
  278. package/build-types/border-control/stories/index.story.d.ts +6 -6
  279. package/build-types/box-control/styles/box-control-styles.d.ts +1 -1
  280. package/build-types/button/deprecated.d.ts +16 -22
  281. package/build-types/button/deprecated.d.ts.map +1 -1
  282. package/build-types/button/index.d.ts.map +1 -1
  283. package/build-types/button/types.d.ts +0 -4
  284. package/build-types/button/types.d.ts.map +1 -1
  285. package/build-types/card/card/hook.d.ts +46 -46
  286. package/build-types/card/card-body/hook.d.ts +46 -46
  287. package/build-types/card/card-divider/hook.d.ts +47 -47
  288. package/build-types/card/card-footer/hook.d.ts +46 -46
  289. package/build-types/card/card-header/hook.d.ts +46 -46
  290. package/build-types/card/card-media/hook.d.ts +46 -46
  291. package/build-types/card/stories/index.story.d.ts +2 -2
  292. package/build-types/circular-option-picker/circular-option-picker-actions.d.ts +7 -0
  293. package/build-types/circular-option-picker/circular-option-picker-actions.d.ts.map +1 -0
  294. package/build-types/circular-option-picker/circular-option-picker-context.d.ts +7 -0
  295. package/build-types/circular-option-picker/circular-option-picker-context.d.ts.map +1 -0
  296. package/build-types/circular-option-picker/circular-option-picker-option-group.d.ts +7 -0
  297. package/build-types/circular-option-picker/circular-option-picker-option-group.d.ts.map +1 -0
  298. package/build-types/circular-option-picker/circular-option-picker-option.d.ts +4 -0
  299. package/build-types/circular-option-picker/circular-option-picker-option.d.ts.map +1 -0
  300. package/build-types/circular-option-picker/circular-option-picker.d.ts +11 -0
  301. package/build-types/circular-option-picker/circular-option-picker.d.ts.map +1 -0
  302. package/build-types/circular-option-picker/index.d.ts +5 -56
  303. package/build-types/circular-option-picker/index.d.ts.map +1 -1
  304. package/build-types/circular-option-picker/stories/index.story.d.ts +3 -1
  305. package/build-types/circular-option-picker/stories/index.story.d.ts.map +1 -1
  306. package/build-types/circular-option-picker/test/index.d.ts +2 -0
  307. package/build-types/circular-option-picker/test/index.d.ts.map +1 -0
  308. package/build-types/circular-option-picker/types.d.ts +53 -1
  309. package/build-types/circular-option-picker/types.d.ts.map +1 -1
  310. package/build-types/color-palette/index.d.ts +3 -19
  311. package/build-types/color-palette/index.d.ts.map +1 -1
  312. package/build-types/color-palette/stories/index.story.d.ts +3 -36
  313. package/build-types/color-palette/stories/index.story.d.ts.map +1 -1
  314. package/build-types/color-palette/styles.d.ts +1 -1
  315. package/build-types/color-palette/types.d.ts +31 -1
  316. package/build-types/color-palette/types.d.ts.map +1 -1
  317. package/build-types/color-picker/component.d.ts +1 -1
  318. package/build-types/color-picker/stories/index.story.d.ts +1 -1
  319. package/build-types/color-picker/styles.d.ts +6 -6
  320. package/build-types/combobox-control/index.d.ts.map +1 -1
  321. package/build-types/combobox-control/stories/index.story.d.ts +2 -2
  322. package/build-types/composite/index.d.ts +14 -1
  323. package/build-types/composite/index.d.ts.map +1 -1
  324. package/build-types/custom-gradient-picker/styles/custom-gradient-picker-styles.d.ts +2 -2
  325. package/build-types/date-time/date/styles.d.ts +3 -3
  326. package/build-types/date-time/date-time/styles.d.ts +2 -2
  327. package/build-types/date-time/time/index.d.ts.map +1 -1
  328. package/build-types/date-time/time/styles.d.ts +12 -12
  329. package/build-types/dropdown/index.d.ts.map +1 -1
  330. package/build-types/dropdown/stories/index.story.d.ts.map +1 -1
  331. package/build-types/dropdown/types.d.ts +12 -4
  332. package/build-types/dropdown/types.d.ts.map +1 -1
  333. package/build-types/dropdown-menu/index.d.ts.map +1 -1
  334. package/build-types/dropdown-menu/stories/index.story.d.ts.map +1 -1
  335. package/build-types/dropdown-menu/types.d.ts +22 -5
  336. package/build-types/dropdown-menu/types.d.ts.map +1 -1
  337. package/build-types/duotone-picker/color-list-picker/index.d.ts.map +1 -1
  338. package/build-types/duotone-picker/duotone-picker.d.ts +1 -1
  339. package/build-types/duotone-picker/duotone-picker.d.ts.map +1 -1
  340. package/build-types/duotone-picker/types.d.ts +31 -1
  341. package/build-types/duotone-picker/types.d.ts.map +1 -1
  342. package/build-types/elevation/hook.d.ts +46 -46
  343. package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
  344. package/build-types/flex/flex/hook.d.ts +46 -46
  345. package/build-types/flex/flex-block/hook.d.ts +46 -46
  346. package/build-types/flex/flex-item/hook.d.ts +46 -46
  347. package/build-types/focal-point-picker/stories/index.story.d.ts +8 -8
  348. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +1 -1
  349. package/build-types/focusable-iframe/index.d.ts +4 -5
  350. package/build-types/focusable-iframe/index.d.ts.map +1 -1
  351. package/build-types/focusable-iframe/types.d.ts +8 -0
  352. package/build-types/focusable-iframe/types.d.ts.map +1 -0
  353. package/build-types/font-size-picker/styles.d.ts +2 -2
  354. package/build-types/form-token-field/index.d.ts.map +1 -1
  355. package/build-types/form-token-field/types.d.ts +6 -0
  356. package/build-types/form-token-field/types.d.ts.map +1 -1
  357. package/build-types/gradient-picker/index.d.ts +1 -1
  358. package/build-types/gradient-picker/index.d.ts.map +1 -1
  359. package/build-types/gradient-picker/stories/index.story.d.ts +3 -36
  360. package/build-types/gradient-picker/stories/index.story.d.ts.map +1 -1
  361. package/build-types/gradient-picker/types.d.ts +31 -1
  362. package/build-types/gradient-picker/types.d.ts.map +1 -1
  363. package/build-types/grid/hook.d.ts +46 -46
  364. package/build-types/h-stack/component.d.ts +1 -1
  365. package/build-types/h-stack/hook.d.ts +46 -46
  366. package/build-types/heading/hook.d.ts +45 -45
  367. package/build-types/higher-order/navigate-regions/index.d.ts.map +1 -1
  368. package/build-types/higher-order/with-focus-outside/index.d.ts +1 -0
  369. package/build-types/higher-order/with-focus-outside/index.d.ts.map +1 -1
  370. package/build-types/higher-order/with-focus-outside/test/index.d.ts +2 -0
  371. package/build-types/higher-order/with-focus-outside/test/index.d.ts.map +1 -0
  372. package/build-types/higher-order/with-spoken-messages/index.d.ts.map +1 -1
  373. package/build-types/index.d.ts +1 -1
  374. package/build-types/index.d.ts.map +1 -1
  375. package/build-types/isolated-event-container/test/index.d.ts +2 -0
  376. package/build-types/isolated-event-container/test/index.d.ts.map +1 -0
  377. package/build-types/item-group/item/hook.d.ts +46 -46
  378. package/build-types/item-group/item-group/hook.d.ts +46 -46
  379. package/build-types/menu-item/index.d.ts +1 -1
  380. package/build-types/menu-item/stories/index.story.d.ts +4 -4
  381. package/build-types/modal/index.d.ts.map +1 -1
  382. package/build-types/modal/stories/index.story.d.ts.map +1 -1
  383. package/build-types/modal/types.d.ts +1 -1
  384. package/build-types/modal/types.d.ts.map +1 -1
  385. package/build-types/navigable-container/menu.d.ts +1 -1
  386. package/build-types/navigation/back-button/index.d.ts +1 -1
  387. package/build-types/navigation/styles/navigation-styles.d.ts +5 -3
  388. package/build-types/navigation/styles/navigation-styles.d.ts.map +1 -1
  389. package/build-types/navigator/navigator-back-button/component.d.ts +2 -3
  390. package/build-types/navigator/navigator-back-button/component.d.ts.map +1 -1
  391. package/build-types/navigator/navigator-back-button/hook.d.ts +53 -54
  392. package/build-types/navigator/navigator-back-button/hook.d.ts.map +1 -1
  393. package/build-types/navigator/navigator-button/component.d.ts +2 -3
  394. package/build-types/navigator/navigator-button/component.d.ts.map +1 -1
  395. package/build-types/navigator/navigator-button/hook.d.ts +53 -54
  396. package/build-types/navigator/navigator-button/hook.d.ts.map +1 -1
  397. package/build-types/navigator/navigator-to-parent-button/component.d.ts +2 -3
  398. package/build-types/navigator/navigator-to-parent-button/component.d.ts.map +1 -1
  399. package/build-types/notice/index.d.ts.map +1 -1
  400. package/build-types/number-control/index.d.ts +3 -3
  401. package/build-types/number-control/stories/index.story.d.ts +3 -3
  402. package/build-types/palette-edit/styles.d.ts +4 -4
  403. package/build-types/palette-edit/styles.d.ts.map +1 -1
  404. package/build-types/placeholder/index.d.ts.map +1 -1
  405. package/build-types/popover/index.d.ts +1 -1
  406. package/build-types/popover/index.d.ts.map +1 -1
  407. package/build-types/popover/overlay-middlewares.d.ts +1 -1
  408. package/build-types/popover/stories/e2e/index.story.d.ts +1 -1
  409. package/build-types/popover/types.d.ts +0 -4
  410. package/build-types/popover/types.d.ts.map +1 -1
  411. package/build-types/popover/utils.d.ts +2 -6
  412. package/build-types/popover/utils.d.ts.map +1 -1
  413. package/build-types/range-control/index.d.ts +1 -1
  414. package/build-types/range-control/styles/range-control-styles.d.ts +3 -3
  415. package/build-types/resizable-box/index.d.ts +1 -1
  416. package/build-types/resizable-box/resize-tooltip/index.d.ts +1 -1
  417. package/build-types/resizable-box/resize-tooltip/label.d.ts +1 -1
  418. package/build-types/resizable-box/stories/index.story.d.ts +2 -2
  419. package/build-types/scrollable/hook.d.ts +46 -46
  420. package/build-types/search-control/index.d.ts +4 -2
  421. package/build-types/search-control/index.d.ts.map +1 -1
  422. package/build-types/search-control/stories/index.story.d.ts +8 -4
  423. package/build-types/search-control/stories/index.story.d.ts.map +1 -1
  424. package/build-types/search-control/types.d.ts +12 -0
  425. package/build-types/search-control/types.d.ts.map +1 -1
  426. package/build-types/spacer/hook.d.ts +46 -46
  427. package/build-types/spinner/index.d.ts +1 -1
  428. package/build-types/surface/hook.d.ts +46 -46
  429. package/build-types/text/hook.d.ts +46 -46
  430. package/build-types/text/styles.d.ts.map +1 -1
  431. package/build-types/text-control/index.d.ts +3 -3
  432. package/build-types/toggle-control/stories/index.story.d.ts +2 -2
  433. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +2 -4
  434. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts.map +1 -1
  435. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +2 -4
  436. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
  437. package/build-types/toggle-group-control/toggle-group-control/component.d.ts +2 -2
  438. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  439. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +1 -5
  440. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  441. package/build-types/toggle-group-control/toggle-group-control/utils.d.ts +18 -0
  442. package/build-types/toggle-group-control/toggle-group-control/utils.d.ts.map +1 -0
  443. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +1 -1
  444. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts +5 -1
  445. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  446. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +1 -0
  447. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
  448. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
  449. package/build-types/toggle-group-control/types.d.ts +13 -24
  450. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  451. package/build-types/toolbar/stories/index.story.d.ts.map +1 -1
  452. package/build-types/toolbar/toolbar/index.d.ts.map +1 -1
  453. package/build-types/toolbar/toolbar-button/index.d.ts +16 -22
  454. package/build-types/toolbar/toolbar-button/index.d.ts.map +1 -1
  455. package/build-types/toolbar/toolbar-dropdown-menu/index.d.ts +3 -1
  456. package/build-types/toolbar/toolbar-dropdown-menu/index.d.ts.map +1 -1
  457. package/build-types/toolbar/toolbar-group/index.d.ts +10 -14
  458. package/build-types/toolbar/toolbar-group/index.d.ts.map +1 -1
  459. package/build-types/toolbar/toolbar-group/toolbar-group-collapsed.d.ts +3 -5
  460. package/build-types/toolbar/toolbar-group/toolbar-group-collapsed.d.ts.map +1 -1
  461. package/build-types/toolbar/toolbar-group/toolbar-group-container.d.ts +7 -5
  462. package/build-types/toolbar/toolbar-group/toolbar-group-container.d.ts.map +1 -1
  463. package/build-types/toolbar/toolbar-group/types.d.ts +77 -0
  464. package/build-types/toolbar/toolbar-group/types.d.ts.map +1 -0
  465. package/build-types/toolbar/toolbar-item/index.d.ts.map +1 -1
  466. package/build-types/tools-panel/tools-panel/hook.d.ts +46 -46
  467. package/build-types/tools-panel/tools-panel-header/hook.d.ts +46 -46
  468. package/build-types/tools-panel/tools-panel-item/hook.d.ts +46 -46
  469. package/build-types/tooltip/index.d.ts +8 -5
  470. package/build-types/tooltip/index.d.ts.map +1 -1
  471. package/build-types/tooltip/stories/index.story.d.ts +13 -0
  472. package/build-types/tooltip/stories/index.story.d.ts.map +1 -0
  473. package/build-types/tooltip/test/index.d.ts +2 -0
  474. package/build-types/tooltip/test/index.d.ts.map +1 -0
  475. package/build-types/tooltip/test/utils/index.d.ts +11 -0
  476. package/build-types/tooltip/test/utils/index.d.ts.map +1 -0
  477. package/build-types/tooltip/types.d.ts +61 -0
  478. package/build-types/tooltip/types.d.ts.map +1 -0
  479. package/build-types/truncate/hook.d.ts +46 -46
  480. package/build-types/ui/tooltip/content.d.ts +1 -1
  481. package/build-types/unit-control/index.d.ts +1 -1
  482. package/build-types/unit-control/index.d.ts.map +1 -1
  483. package/build-types/unit-control/styles/unit-control-styles.d.ts +3 -3
  484. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  485. package/build-types/unit-control/unit-select-control.d.ts +1 -1
  486. package/build-types/utils/use-deprecated-props.d.ts +1 -1
  487. package/build-types/v-stack/component.d.ts +1 -1
  488. package/build-types/v-stack/hook.d.ts +46 -46
  489. package/build-types/v-stack/stories/index.story.d.ts +2 -2
  490. package/package.json +20 -20
  491. package/src/animation/index.tsx +1 -0
  492. package/src/border-control/border-control/README.md +2 -2
  493. package/src/border-control/border-control-dropdown/component.tsx +1 -1
  494. package/src/border-control/styles.ts +7 -7
  495. package/src/border-control/test/index.js +79 -69
  496. package/src/box-control/unit-control.tsx +1 -1
  497. package/src/button/README.md +0 -6
  498. package/src/button/index.tsx +9 -1
  499. package/src/button/test/index.tsx +19 -0
  500. package/src/button/types.ts +0 -4
  501. package/src/circular-option-picker/README.md +14 -0
  502. package/src/circular-option-picker/circular-option-picker-actions.tsx +60 -0
  503. package/src/circular-option-picker/circular-option-picker-context.tsx +12 -0
  504. package/src/circular-option-picker/circular-option-picker-option-group.tsx +34 -0
  505. package/src/circular-option-picker/circular-option-picker-option.tsx +139 -0
  506. package/src/circular-option-picker/circular-option-picker.tsx +202 -0
  507. package/src/circular-option-picker/index.tsx +7 -174
  508. package/src/circular-option-picker/stories/index.story.tsx +34 -9
  509. package/src/circular-option-picker/style.scss +11 -7
  510. package/src/circular-option-picker/test/index.tsx +133 -0
  511. package/src/circular-option-picker/types.ts +64 -1
  512. package/src/color-palette/README.md +14 -0
  513. package/src/color-palette/index.tsx +69 -28
  514. package/src/color-palette/stories/index.story.tsx +16 -2
  515. package/src/color-palette/test/index.tsx +32 -30
  516. package/src/color-palette/types.ts +34 -1
  517. package/src/combobox-control/index.tsx +7 -5
  518. package/src/composite/{index.js → index.ts} +3 -0
  519. package/src/confirm-dialog/stories/index.story.js +13 -14
  520. package/src/confirm-dialog/test/index.js +10 -18
  521. package/src/custom-gradient-picker/gradient-bar/control-points.tsx +1 -1
  522. package/src/custom-gradient-picker/gradient-bar/test/utils.ts +5 -5
  523. package/src/date-time/time/index.tsx +8 -1
  524. package/src/date-time/time/timezone.tsx +1 -1
  525. package/src/dropdown/README.md +13 -3
  526. package/src/dropdown/index.tsx +16 -34
  527. package/src/dropdown/stories/index.story.tsx +10 -7
  528. package/src/dropdown/types.ts +12 -4
  529. package/src/dropdown-menu/README.md +18 -0
  530. package/src/dropdown-menu/index.tsx +8 -1
  531. package/src/dropdown-menu/stories/index.story.tsx +5 -0
  532. package/src/dropdown-menu/types.ts +23 -6
  533. package/src/dropdown-menu-v2/styles.ts +1 -1
  534. package/src/duotone-picker/README.md +14 -0
  535. package/src/duotone-picker/color-list-picker/index.tsx +28 -12
  536. package/src/duotone-picker/duotone-picker.tsx +33 -0
  537. package/src/duotone-picker/types.ts +34 -1
  538. package/src/focusable-iframe/{index.js → index.tsx} +7 -4
  539. package/src/focusable-iframe/types.ts +9 -0
  540. package/src/form-token-field/README.md +1 -0
  541. package/src/form-token-field/index.tsx +5 -1
  542. package/src/form-token-field/style.scss +5 -9
  543. package/src/form-token-field/test/index.tsx +36 -1
  544. package/src/form-token-field/types.ts +7 -1
  545. package/src/gradient-picker/README.md +14 -0
  546. package/src/gradient-picker/index.tsx +60 -11
  547. package/src/gradient-picker/types.ts +34 -1
  548. package/src/higher-order/navigate-regions/index.tsx +5 -6
  549. package/src/higher-order/with-filters/test/index.tsx +36 -43
  550. package/src/higher-order/with-focus-outside/{index.js → index.tsx} +8 -5
  551. package/src/higher-order/with-focus-outside/test/{index.js → index.tsx} +13 -11
  552. package/src/higher-order/with-notices/test/index.tsx +1 -1
  553. package/src/higher-order/with-spoken-messages/index.tsx +7 -8
  554. package/src/index.ts +5 -1
  555. package/src/input-control/styles/input-control-styles.tsx +2 -2
  556. package/src/isolated-event-container/test/{index.js → index.tsx} +1 -1
  557. package/src/mobile/bottom-sheet/index.native.js +1 -0
  558. package/src/mobile/global-styles-context/index.native.js +7 -8
  559. package/src/modal/README.md +7 -1
  560. package/src/modal/index.tsx +27 -3
  561. package/src/modal/stories/index.story.tsx +2 -1
  562. package/src/modal/test/index.tsx +231 -0
  563. package/src/modal/types.ts +3 -1
  564. package/src/navigation/use-navigation-tree-nodes.tsx +1 -1
  565. package/src/notice/index.tsx +18 -6
  566. package/src/notice/style.scss +0 -1
  567. package/src/notice/test/__snapshots__/index.tsx.snap +9 -1
  568. package/src/palette-edit/styles.js +2 -1
  569. package/src/placeholder/index.tsx +16 -8
  570. package/src/placeholder/style.scss +2 -16
  571. package/src/placeholder/test/index.tsx +34 -15
  572. package/src/popover/index.tsx +47 -110
  573. package/src/popover/test/index.tsx +3 -3
  574. package/src/popover/types.ts +0 -5
  575. package/src/popover/utils.ts +19 -67
  576. package/src/search-control/README.md +7 -0
  577. package/src/search-control/index.tsx +10 -1
  578. package/src/search-control/style.scss +14 -7
  579. package/src/search-control/types.ts +12 -0
  580. package/src/tab-panel/test/index.tsx +5 -0
  581. package/src/text/styles.js +2 -1
  582. package/src/theme/README.md +5 -5
  583. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +567 -59
  584. package/src/toggle-group-control/test/index.tsx +110 -56
  585. package/src/toggle-group-control/toggle-group-control/README.md +0 -1
  586. package/src/toggle-group-control/toggle-group-control/as-button-group.tsx +39 -57
  587. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +52 -48
  588. package/src/toggle-group-control/toggle-group-control/component.tsx +12 -6
  589. package/src/toggle-group-control/toggle-group-control/styles.ts +2 -19
  590. package/src/toggle-group-control/toggle-group-control/utils.ts +50 -0
  591. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +70 -20
  592. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +17 -3
  593. package/src/toggle-group-control/types.ts +14 -32
  594. package/src/toolbar/stories/index.story.tsx +3 -5
  595. package/src/toolbar/test/toolbar-group.tsx +13 -7
  596. package/src/toolbar/toolbar/index.tsx +9 -1
  597. package/src/toolbar/toolbar-dropdown-menu/{index.js → index.tsx} +11 -4
  598. package/src/toolbar/toolbar-group/README.md +2 -2
  599. package/src/toolbar/toolbar-group/{index.js → index.tsx} +19 -14
  600. package/src/toolbar/toolbar-group/{toolbar-group-collapsed.js → toolbar-group-collapsed.tsx} +10 -4
  601. package/src/toolbar/toolbar-group/toolbar-group-container.tsx +16 -0
  602. package/src/toolbar/toolbar-group/types.ts +92 -0
  603. package/src/toolbar/toolbar-item/index.tsx +3 -1
  604. package/src/tooltip/README.md +31 -28
  605. package/src/tooltip/index.tsx +106 -0
  606. package/src/tooltip/stories/index.story.tsx +59 -0
  607. package/src/tooltip/style.scss +2 -27
  608. package/src/tooltip/test/index.tsx +335 -0
  609. package/src/tooltip/test/utils/index.tsx +20 -0
  610. package/src/tooltip/types.ts +61 -0
  611. package/src/ui/context/context-connect.ts +3 -3
  612. package/src/ui/context/wordpress-component.ts +4 -4
  613. package/src/unit-control/index.tsx +9 -4
  614. package/src/unit-control/styles/unit-control-styles.ts +3 -1
  615. package/src/unit-control/test/utils.ts +1 -1
  616. package/src/utils/colors-values.js +1 -1
  617. package/src/utils/use-deprecated-props.ts +1 -1
  618. package/tsconfig.tsbuildinfo +1 -1
  619. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +0 -78
  620. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +0 -1
  621. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +0 -76
  622. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +0 -1
  623. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts +0 -9
  624. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +0 -1
  625. package/src/color-palette/test/__snapshots__/index.tsx.snap +0 -288
  626. package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +0 -84
  627. package/src/toolbar/toolbar-group/toolbar-group-container.js +0 -8
  628. package/src/tooltip/index.js +0 -293
  629. package/src/tooltip/stories/index.story.js +0 -85
  630. package/src/tooltip/test/index.js +0 -323
@@ -0,0 +1,133 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import CircularOptionPicker from '..';
11
+
12
+ const SINGLE_OPTION = [ <CircularOptionPicker.Option key={ 'option' } /> ];
13
+
14
+ const MULTIPLE_OPTIONS = [
15
+ <CircularOptionPicker.Option
16
+ key={ 'option-1' }
17
+ aria-label={ 'Option One' }
18
+ />,
19
+ <CircularOptionPicker.Option
20
+ key={ 'option-2' }
21
+ aria-label={ 'Option Two' }
22
+ />,
23
+ ];
24
+
25
+ const DEFAULT_PROPS = {
26
+ 'aria-label': 'Circular Option Picker',
27
+ options: SINGLE_OPTION,
28
+ };
29
+
30
+ function getOption( name: string ) {
31
+ return screen.getByRole( 'option', { name } );
32
+ }
33
+
34
+ describe( 'CircularOptionPicker', () => {
35
+ describe( 'when `asButtons` is not set', () => {
36
+ it( 'should render as a listbox', async () => {
37
+ render( <CircularOptionPicker { ...DEFAULT_PROPS } /> );
38
+
39
+ expect( screen.getByRole( 'listbox' ) ).toBeInTheDocument();
40
+ expect( screen.getByRole( 'option' ) ).toBeInTheDocument();
41
+ expect( screen.queryByRole( 'button' ) ).not.toBeInTheDocument();
42
+ } );
43
+ } );
44
+
45
+ describe( 'when `asButtons` is false', () => {
46
+ it( 'should render as a listbox', async () => {
47
+ render(
48
+ <CircularOptionPicker
49
+ { ...DEFAULT_PROPS }
50
+ asButtons={ false }
51
+ />
52
+ );
53
+
54
+ expect( screen.getByRole( 'listbox' ) ).toBeInTheDocument();
55
+ expect( screen.getByRole( 'option' ) ).toBeInTheDocument();
56
+ expect( screen.queryByRole( 'button' ) ).not.toBeInTheDocument();
57
+ } );
58
+ } );
59
+
60
+ describe( 'when `asButtons` is true', () => {
61
+ it( 'should render as buttons', async () => {
62
+ render(
63
+ <CircularOptionPicker { ...DEFAULT_PROPS } asButtons={ true } />
64
+ );
65
+
66
+ expect( screen.queryByRole( 'listbox' ) ).not.toBeInTheDocument();
67
+ expect( screen.queryByRole( 'option' ) ).not.toBeInTheDocument();
68
+ expect( screen.getByRole( 'button' ) ).toBeInTheDocument();
69
+ } );
70
+ } );
71
+
72
+ describe( 'when `loop` is not set', () => {
73
+ it( 'should loop', async () => {
74
+ const user = userEvent.setup();
75
+
76
+ render(
77
+ <CircularOptionPicker
78
+ { ...DEFAULT_PROPS }
79
+ options={ MULTIPLE_OPTIONS }
80
+ />
81
+ );
82
+
83
+ await user.tab();
84
+ expect( getOption( 'Option One' ) ).toHaveFocus();
85
+ await user.keyboard( '[ArrowRight]' );
86
+ expect( getOption( 'Option Two' ) ).toHaveFocus();
87
+ await user.keyboard( '[ArrowRight]' );
88
+ expect( getOption( 'Option One' ) ).toHaveFocus();
89
+ } );
90
+ } );
91
+
92
+ describe( 'when `loop` is true', () => {
93
+ it( 'should loop', async () => {
94
+ const user = userEvent.setup();
95
+
96
+ render(
97
+ <CircularOptionPicker
98
+ { ...DEFAULT_PROPS }
99
+ options={ MULTIPLE_OPTIONS }
100
+ loop={ true }
101
+ />
102
+ );
103
+
104
+ await user.tab();
105
+ expect( getOption( 'Option One' ) ).toHaveFocus();
106
+ await user.keyboard( '[ArrowRight]' );
107
+ expect( getOption( 'Option Two' ) ).toHaveFocus();
108
+ await user.keyboard( '[ArrowRight]' );
109
+ expect( getOption( 'Option One' ) ).toHaveFocus();
110
+ } );
111
+ } );
112
+
113
+ describe( 'when `loop` is false', () => {
114
+ it( 'should not loop', async () => {
115
+ const user = userEvent.setup();
116
+
117
+ render(
118
+ <CircularOptionPicker
119
+ { ...DEFAULT_PROPS }
120
+ loop={ false }
121
+ options={ MULTIPLE_OPTIONS }
122
+ />
123
+ );
124
+
125
+ await user.tab();
126
+ expect( getOption( 'Option One' ) ).toHaveFocus();
127
+ await user.keyboard( '[ArrowRight]' );
128
+ expect( getOption( 'Option Two' ) ).toHaveFocus();
129
+ await user.keyboard( '[ArrowRight]' );
130
+ expect( getOption( 'Option Two' ) ).toHaveFocus();
131
+ } );
132
+ } );
133
+ } );
@@ -14,8 +14,13 @@ import type { Icon } from '@wordpress/icons';
14
14
  import type { ButtonAsButtonProps } from '../button/types';
15
15
  import type { DropdownProps } from '../dropdown/types';
16
16
  import type { WordPressComponentProps } from '../ui/context';
17
+ import type { CompositeState } from '../composite';
17
18
 
18
- export type CircularOptionPickerProps = {
19
+ type CommonCircularOptionPickerProps = {
20
+ /**
21
+ * An ID to apply to the component.
22
+ */
23
+ id?: string;
19
24
  /**
20
25
  * A CSS class to apply to the wrapper element.
21
26
  */
@@ -38,6 +43,54 @@ export type CircularOptionPickerProps = {
38
43
  children?: ReactNode;
39
44
  };
40
45
 
46
+ type WithBaseId = {
47
+ baseId: string;
48
+ };
49
+
50
+ type FullListboxCircularOptionPickerProps = CommonCircularOptionPickerProps & {
51
+ /**
52
+ * Whether the control should present as a set of buttons,
53
+ * each with its own tab stop.
54
+ */
55
+ asButtons?: false;
56
+ /**
57
+ * Prevents keyboard interaction from wrapping around.
58
+ * Only used when `asButtons` is not true.
59
+ *
60
+ * @default true
61
+ */
62
+ loop?: boolean;
63
+ } & (
64
+ | {
65
+ 'aria-label': string;
66
+ 'aria-labelledby'?: never;
67
+ }
68
+ | {
69
+ 'aria-label'?: never;
70
+ 'aria-labelledby': string;
71
+ }
72
+ );
73
+
74
+ export type ListboxCircularOptionPickerProps = WithBaseId &
75
+ Omit< FullListboxCircularOptionPickerProps, 'asButtons' >;
76
+
77
+ type FullButtonsCircularOptionPickerProps = CommonCircularOptionPickerProps & {
78
+ /**
79
+ * Whether the control should present as a set of buttons,
80
+ * each with its own tab stop.
81
+ *
82
+ * @default false
83
+ */
84
+ asButtons: true;
85
+ };
86
+
87
+ export type ButtonsCircularOptionPickerProps = WithBaseId &
88
+ Omit< FullButtonsCircularOptionPickerProps, 'asButtons' >;
89
+
90
+ export type CircularOptionPickerProps =
91
+ | FullListboxCircularOptionPickerProps
92
+ | FullButtonsCircularOptionPickerProps;
93
+
41
94
  export type DropdownLinkActionProps = {
42
95
  buttonProps?: Omit<
43
96
  WordPressComponentProps< ButtonAsButtonProps, 'button', false >,
@@ -48,6 +101,11 @@ export type DropdownLinkActionProps = {
48
101
  className?: string;
49
102
  };
50
103
 
104
+ export type OptionGroupProps = {
105
+ className?: string;
106
+ options: ReactNode;
107
+ };
108
+
51
109
  export type OptionProps = Omit<
52
110
  WordPressComponentProps< ButtonAsButtonProps, 'button', false >,
53
111
  'isPressed' | 'className'
@@ -64,3 +122,8 @@ export type OptionProps = Omit<
64
122
  'icon' | 'size'
65
123
  >;
66
124
  };
125
+
126
+ export type CircularOptionPickerCompositeState = CompositeState;
127
+ export type CircularOptionPickerContextProps =
128
+ | { isComposite?: false; baseId?: string }
129
+ | ( { isComposite: true } & CircularOptionPickerCompositeState );
@@ -84,3 +84,17 @@ Currently active value.
84
84
  Callback called when a color is selected.
85
85
 
86
86
  - Required: Yes
87
+
88
+ ### `asButtons`: `boolean`
89
+
90
+ Whether the control should present as a set of buttons, each with its own tab stop.
91
+
92
+ - Required: No
93
+ - Default: `false`
94
+
95
+ ### `loop`: `boolean`
96
+
97
+ Prevents keyboard interaction from wrapping around. Only used when `asButtons` is not true.
98
+
99
+ - Required: No
100
+ - Default: `true`
@@ -10,6 +10,7 @@ import classnames from 'classnames';
10
10
  /**
11
11
  * WordPress dependencies
12
12
  */
13
+ import { useInstanceId } from '@wordpress/compose';
13
14
  import { __, sprintf } from '@wordpress/i18n';
14
15
  import { useCallback, useMemo, useState, forwardRef } from '@wordpress/element';
15
16
 
@@ -47,7 +48,7 @@ function SinglePalette( {
47
48
  colors,
48
49
  onChange,
49
50
  value,
50
- actions,
51
+ ...additionalProps
51
52
  }: SinglePaletteProps ) {
52
53
  const colorOptions = useMemo( () => {
53
54
  return colors.map( ( { color, name }, index ) => {
@@ -91,10 +92,10 @@ function SinglePalette( {
91
92
  }, [ colors, value, onChange, clearColor ] );
92
93
 
93
94
  return (
94
- <CircularOptionPicker
95
+ <CircularOptionPicker.OptionGroup
95
96
  className={ className }
96
97
  options={ colorOptions }
97
- actions={ actions }
98
+ { ...additionalProps }
98
99
  />
99
100
  );
100
101
  }
@@ -105,9 +106,10 @@ function MultiplePalettes( {
105
106
  colors,
106
107
  onChange,
107
108
  value,
108
- actions,
109
109
  headingLevel,
110
110
  }: MultiplePalettesProps ) {
111
+ const instanceId = useInstanceId( MultiplePalettes, 'color-palette' );
112
+
111
113
  if ( colors.length === 0 ) {
112
114
  return null;
113
115
  }
@@ -115,9 +117,10 @@ function MultiplePalettes( {
115
117
  return (
116
118
  <VStack spacing={ 3 } className={ className }>
117
119
  { colors.map( ( { name, colors: colorPalette }, index ) => {
120
+ const id = `${ instanceId }-${ index }`;
118
121
  return (
119
122
  <VStack spacing={ 2 } key={ index }>
120
- <ColorHeading level={ headingLevel }>
123
+ <ColorHeading id={ id } level={ headingLevel }>
121
124
  { name }
122
125
  </ColorHeading>
123
126
  <SinglePalette
@@ -127,9 +130,7 @@ function MultiplePalettes( {
127
130
  onChange( newColor, index )
128
131
  }
129
132
  value={ value }
130
- actions={
131
- colors.length === index + 1 ? actions : null
132
- }
133
+ aria-labelledby={ id }
133
134
  />
134
135
  </VStack>
135
136
  );
@@ -177,6 +178,8 @@ function UnforwardedColorPalette(
177
178
  forwardedRef: ForwardedRef< any >
178
179
  ) {
179
180
  const {
181
+ asButtons,
182
+ loop,
180
183
  clearable = true,
181
184
  colors = [],
182
185
  disableCustomColors = false,
@@ -185,7 +188,9 @@ function UnforwardedColorPalette(
185
188
  value,
186
189
  __experimentalIsRenderedInSidebar = false,
187
190
  headingLevel = 2,
188
- ...otherProps
191
+ 'aria-label': ariaLabel,
192
+ 'aria-labelledby': ariaLabelledby,
193
+ ...additionalProps
189
194
  } = props;
190
195
  const [ normalizedColorValue, setNormalizedColorValue ] = useState( value );
191
196
 
@@ -234,20 +239,47 @@ function UnforwardedColorPalette(
234
239
  : __( 'Custom color picker.' );
235
240
 
236
241
  const paletteCommonProps = {
237
- clearable,
238
242
  clearColor,
239
243
  onChange,
240
244
  value,
241
- actions: !! clearable && (
242
- <CircularOptionPicker.ButtonAction onClick={ clearColor }>
243
- { __( 'Clear' ) }
244
- </CircularOptionPicker.ButtonAction>
245
- ),
246
- headingLevel,
247
245
  };
248
246
 
247
+ const actions = !! clearable && (
248
+ <CircularOptionPicker.ButtonAction onClick={ clearColor }>
249
+ { __( 'Clear' ) }
250
+ </CircularOptionPicker.ButtonAction>
251
+ );
252
+
253
+ let metaProps:
254
+ | { asButtons: false; loop?: boolean; 'aria-label': string }
255
+ | { asButtons: false; loop?: boolean; 'aria-labelledby': string }
256
+ | { asButtons: true };
257
+
258
+ if ( asButtons ) {
259
+ metaProps = { asButtons: true };
260
+ } else {
261
+ const _metaProps: { asButtons: false; loop?: boolean } = {
262
+ asButtons: false,
263
+ loop,
264
+ };
265
+
266
+ if ( ariaLabel ) {
267
+ metaProps = { ..._metaProps, 'aria-label': ariaLabel };
268
+ } else if ( ariaLabelledby ) {
269
+ metaProps = {
270
+ ..._metaProps,
271
+ 'aria-labelledby': ariaLabelledby,
272
+ };
273
+ } else {
274
+ metaProps = {
275
+ ..._metaProps,
276
+ 'aria-label': __( 'Custom color picker.' ),
277
+ };
278
+ }
279
+ }
280
+
249
281
  return (
250
- <VStack spacing={ 3 } ref={ forwardedRef } { ...otherProps }>
282
+ <VStack spacing={ 3 } ref={ forwardedRef } { ...additionalProps }>
251
283
  { ! disableCustomColors && (
252
284
  <CustomColorPickerDropdown
253
285
  isRenderedInSidebar={ __experimentalIsRenderedInSidebar }
@@ -298,17 +330,26 @@ function UnforwardedColorPalette(
298
330
  ) }
299
331
  />
300
332
  ) }
301
- { hasMultipleColorOrigins ? (
302
- <MultiplePalettes
303
- { ...paletteCommonProps }
304
- colors={ colors as PaletteObject[] }
305
- />
306
- ) : (
307
- <SinglePalette
308
- { ...paletteCommonProps }
309
- colors={ colors as ColorObject[] }
310
- />
311
- ) }
333
+ <CircularOptionPicker
334
+ { ...metaProps }
335
+ actions={ actions }
336
+ options={
337
+ hasMultipleColorOrigins ? (
338
+ <MultiplePalettes
339
+ { ...paletteCommonProps }
340
+ headingLevel={ headingLevel }
341
+ colors={ colors as PaletteObject[] }
342
+ value={ value }
343
+ />
344
+ ) : (
345
+ <SinglePalette
346
+ { ...paletteCommonProps }
347
+ colors={ colors as ColorObject[] }
348
+ value={ value }
349
+ />
350
+ )
351
+ }
352
+ />
312
353
  </VStack>
313
354
  );
314
355
  }
@@ -29,8 +29,12 @@ const meta: Meta< typeof ColorPalette > = {
29
29
  };
30
30
  export default meta;
31
31
 
32
- const Template: StoryFn< typeof ColorPalette > = ( { onChange, ...args } ) => {
33
- const [ color, setColor ] = useState< string | undefined >();
32
+ const Template: StoryFn< typeof ColorPalette > = ( {
33
+ onChange,
34
+ value,
35
+ ...args
36
+ } ) => {
37
+ const [ color, setColor ] = useState< string | undefined >( value );
34
38
 
35
39
  return (
36
40
  <ColorPalette
@@ -53,6 +57,16 @@ Default.args = {
53
57
  ],
54
58
  };
55
59
 
60
+ export const InitialValue = Template.bind( {} );
61
+ InitialValue.args = {
62
+ colors: [
63
+ { name: 'Red', color: '#f00' },
64
+ { name: 'White', color: '#fff' },
65
+ { name: 'Blue', color: '#00f' },
66
+ ],
67
+ value: '#00f',
68
+ };
69
+
56
70
  export const MultipleOrigins = Template.bind( {} );
57
71
  MultipleOrigins.args = {
58
72
  colors: [
@@ -19,10 +19,6 @@ const EXAMPLE_COLORS = [
19
19
  ];
20
20
  const INITIAL_COLOR = EXAMPLE_COLORS[ 0 ].color;
21
21
 
22
- function getWrappingPopoverElement( element: HTMLElement ) {
23
- return element.closest( '.components-popover' );
24
- }
25
-
26
22
  const ControlledColorPalette = ( {
27
23
  onChange,
28
24
  }: {
@@ -43,20 +39,6 @@ const ControlledColorPalette = ( {
43
39
  };
44
40
 
45
41
  describe( 'ColorPalette', () => {
46
- it( 'should render a dynamic toolbar of colors', () => {
47
- const onChange = jest.fn();
48
-
49
- const { container } = render(
50
- <ColorPalette
51
- colors={ EXAMPLE_COLORS }
52
- value={ INITIAL_COLOR }
53
- onChange={ onChange }
54
- />
55
- );
56
-
57
- expect( container ).toMatchSnapshot();
58
- } );
59
-
60
42
  it( 'should render three color button options', () => {
61
43
  const onChange = jest.fn();
62
44
 
@@ -69,7 +51,7 @@ describe( 'ColorPalette', () => {
69
51
  );
70
52
 
71
53
  expect(
72
- screen.getAllByRole( 'button', { name: /^Color:/ } )
54
+ screen.getAllByRole( 'option', { name: /^Color:/ } )
73
55
  ).toHaveLength( 3 );
74
56
  } );
75
57
 
@@ -86,7 +68,7 @@ describe( 'ColorPalette', () => {
86
68
  );
87
69
 
88
70
  await user.click(
89
- screen.getByRole( 'button', { name: /^Color:/, pressed: true } )
71
+ screen.getByRole( 'option', { name: /^Color:/, selected: true } )
90
72
  );
91
73
 
92
74
  expect( onChange ).toHaveBeenCalledTimes( 1 );
@@ -108,9 +90,9 @@ describe( 'ColorPalette', () => {
108
90
  // Click the first unpressed button
109
91
  // (i.e. a button representing a color that is not the current color)
110
92
  await user.click(
111
- screen.getAllByRole( 'button', {
93
+ screen.getAllByRole( 'option', {
112
94
  name: /^Color:/,
113
- pressed: false,
95
+ selected: false,
114
96
  } )[ 0 ]
115
97
  );
116
98
 
@@ -137,10 +119,26 @@ describe( 'ColorPalette', () => {
137
119
  expect( onChange ).toHaveBeenCalledWith( undefined );
138
120
  } );
139
121
 
122
+ it( 'should render custom color picker', () => {
123
+ const onChange = jest.fn();
124
+
125
+ render(
126
+ <ColorPalette
127
+ colors={ EXAMPLE_COLORS }
128
+ value={ INITIAL_COLOR }
129
+ onChange={ onChange }
130
+ />
131
+ );
132
+
133
+ expect(
134
+ screen.getByRole( 'button', { name: /^Custom color picker\./ } )
135
+ ).toBeInTheDocument();
136
+ } );
137
+
140
138
  it( 'should allow disabling custom color picker', () => {
141
139
  const onChange = jest.fn();
142
140
 
143
- const { container } = render(
141
+ render(
144
142
  <ColorPalette
145
143
  colors={ EXAMPLE_COLORS }
146
144
  disableCustomColors
@@ -149,7 +147,9 @@ describe( 'ColorPalette', () => {
149
147
  />
150
148
  );
151
149
 
152
- expect( container ).toMatchSnapshot();
150
+ expect(
151
+ screen.queryByRole( 'button', { name: /^Custom color picker\./ } )
152
+ ).not.toBeInTheDocument();
153
153
  } );
154
154
 
155
155
  it( 'should render dropdown and its content', async () => {
@@ -188,9 +188,7 @@ describe( 'ColorPalette', () => {
188
188
  const dropdownColorInput = screen.getByLabelText( 'Hex color' );
189
189
 
190
190
  await waitFor( () =>
191
- expect(
192
- getWrappingPopoverElement( dropdownColorInput )
193
- ).toBePositionedPopover()
191
+ expect( dropdownColorInput ).toBePositionedPopover()
194
192
  );
195
193
  } );
196
194
 
@@ -231,9 +229,9 @@ describe( 'ColorPalette', () => {
231
229
 
232
230
  // Click the first unpressed button
233
231
  await user.click(
234
- screen.getAllByRole( 'button', {
232
+ screen.getAllByRole( 'option', {
235
233
  name: /^Color:/,
236
- pressed: false,
234
+ selected: false,
237
235
  } )[ 0 ]
238
236
  );
239
237
 
@@ -258,7 +256,11 @@ describe( 'ColorPalette', () => {
258
256
  // Clear the color, confirm that the relative values are cleared/updated.
259
257
  await user.click( screen.getByRole( 'button', { name: 'Clear' } ) );
260
258
  expect( screen.getByText( 'No color selected' ) ).toBeVisible();
261
- expect( screen.queryByText( colorName ) ).not.toBeInTheDocument();
259
+ expect(
260
+ screen.queryByText( colorName, {
261
+ selector: '.components-color-palette__custom-color-name',
262
+ } )
263
+ ).not.toBeInTheDocument();
262
264
  expect( screen.queryByText( colorCode ) ).not.toBeInTheDocument();
263
265
  expect(
264
266
  screen.getByRole( 'button', {
@@ -82,10 +82,43 @@ export type ColorPaletteProps = Pick< PaletteProps, 'onChange' > & {
82
82
  * Currently active value.
83
83
  */
84
84
  value?: string;
85
+ /**
86
+ * Whether the control should present as a set of buttons,
87
+ * each with its own tab stop.
88
+ *
89
+ * @default false
90
+ */
91
+ asButtons?: boolean;
92
+ /**
93
+ * Prevents keyboard interaction from wrapping around.
94
+ * Only used when `asButtons` is not true.
95
+ *
96
+ * @default true
97
+ */
98
+ loop?: boolean;
85
99
  /**
86
100
  * Whether this is rendered in the sidebar.
87
101
  *
88
102
  * @default false
89
103
  */
90
104
  __experimentalIsRenderedInSidebar?: boolean;
91
- };
105
+ } & (
106
+ | {
107
+ /**
108
+ * A label to identify the purpose of the control.
109
+ *
110
+ * @todo [#54055] Either this or `aria-labelledby` should be required
111
+ */
112
+ 'aria-label'?: string;
113
+ 'aria-labelledby'?: never;
114
+ }
115
+ | {
116
+ /**
117
+ * An ID of an element to provide a label for the control.
118
+ *
119
+ * @todo [#54055] Either this or `aria-label` should be required
120
+ */
121
+ 'aria-labelledby'?: string;
122
+ 'aria-label'?: never;
123
+ }
124
+ );
@@ -36,16 +36,18 @@ import { useDeprecated36pxDefaultSizeProp } from '../utils/use-deprecated-props'
36
36
 
37
37
  const noop = () => {};
38
38
 
39
+ interface DetectOutsideComponentProps {
40
+ onFocusOutside: ( event: React.FocusEvent ) => void;
41
+ children?: React.ReactNode;
42
+ }
43
+
39
44
  const DetectOutside = withFocusOutside(
40
- class extends Component {
41
- // @ts-expect-error - TODO: Should be resolved when `withFocusOutside` is refactored to TypeScript
42
- handleFocusOutside( event ) {
43
- // @ts-expect-error - TODO: Should be resolved when `withFocusOutside` is refactored to TypeScript
45
+ class extends Component< DetectOutsideComponentProps > {
46
+ handleFocusOutside( event: React.FocusEvent ) {
44
47
  this.props.onFocusOutside( event );
45
48
  }
46
49
 
47
50
  render() {
48
- // @ts-expect-error - TODO: Should be resolved when `withFocusOutside` is refactored to TypeScript
49
51
  return this.props.children;
50
52
  }
51
53
  }
@@ -17,3 +17,6 @@ export {
17
17
  CompositeItem,
18
18
  useCompositeState,
19
19
  } from 'reakit';
20
+
21
+ /* eslint-disable-next-line no-restricted-imports */
22
+ export type { CompositeStateReturn as CompositeState } from 'reakit';