@wordpress/components 28.1.0 → 28.3.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 (451) hide show
  1. package/CHANGELOG.md +179 -120
  2. package/build/animation/index.js.map +1 -1
  3. package/build/autocomplete/autocompleter-ui.js +1 -0
  4. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  5. package/build/autocomplete/index.js.map +1 -1
  6. package/build/base-control/index.js +14 -7
  7. package/build/base-control/index.js.map +1 -1
  8. package/build/border-box-control/border-box-control-visualizer/component.js +0 -4
  9. package/build/border-box-control/border-box-control-visualizer/component.js.map +1 -1
  10. package/build/button/index.js +5 -3
  11. package/build/button/index.js.map +1 -1
  12. package/build/button/types.js.map +1 -1
  13. package/build/combobox-control/index.js +4 -1
  14. package/build/combobox-control/index.js.map +1 -1
  15. package/build/composite/current/index.js.map +1 -1
  16. package/build/custom-select-control-v2/custom-select.js +58 -36
  17. package/build/custom-select-control-v2/custom-select.js.map +1 -1
  18. package/build/custom-select-control-v2/default-component/index.js +0 -1
  19. package/build/custom-select-control-v2/default-component/index.js.map +1 -1
  20. package/build/custom-select-control-v2/item.js +2 -0
  21. package/build/custom-select-control-v2/item.js.map +1 -1
  22. package/build/custom-select-control-v2/legacy-component/index.js +33 -15
  23. package/build/custom-select-control-v2/legacy-component/index.js.map +1 -1
  24. package/build/custom-select-control-v2/styles.js +92 -65
  25. package/build/custom-select-control-v2/styles.js.map +1 -1
  26. package/build/custom-select-control-v2/types.js.map +1 -1
  27. package/build/date-time/date-time/index.js +3 -1
  28. package/build/date-time/date-time/index.js.map +1 -1
  29. package/build/date-time/index.js +7 -0
  30. package/build/date-time/index.js.map +1 -1
  31. package/build/date-time/time/index.js +62 -145
  32. package/build/date-time/time/index.js.map +1 -1
  33. package/build/date-time/time-input/index.js +159 -0
  34. package/build/date-time/time-input/index.js.map +1 -0
  35. package/build/date-time/types.js.map +1 -1
  36. package/build/date-time/utils.js +64 -0
  37. package/build/date-time/utils.js.map +1 -1
  38. package/build/disclosure/index.js +0 -1
  39. package/build/disclosure/index.js.map +1 -1
  40. package/build/divider/component.js +0 -1
  41. package/build/divider/component.js.map +1 -1
  42. package/build/divider/types.js.map +1 -1
  43. package/build/drop-zone/index.js +16 -79
  44. package/build/drop-zone/index.js.map +1 -1
  45. package/build/dropdown-menu/index.js +1 -0
  46. package/build/dropdown-menu/index.js.map +1 -1
  47. package/build/dropdown-menu-v2/index.js +0 -1
  48. package/build/dropdown-menu-v2/index.js.map +1 -1
  49. package/build/dropdown-menu-v2/styles.js +15 -16
  50. package/build/dropdown-menu-v2/styles.js.map +1 -1
  51. package/build/dropdown-menu-v2/types.js.map +1 -1
  52. package/build/font-size-picker/font-size-picker-select.js +2 -2
  53. package/build/font-size-picker/font-size-picker-select.js.map +1 -1
  54. package/build/font-size-picker/index.js +1 -1
  55. package/build/font-size-picker/index.js.map +1 -1
  56. package/build/font-size-picker/utils.js +0 -4
  57. package/build/font-size-picker/utils.js.map +1 -1
  58. package/build/form-token-field/token.js +4 -1
  59. package/build/form-token-field/token.js.map +1 -1
  60. package/build/higher-order/with-spoken-messages/index.js +1 -2
  61. package/build/higher-order/with-spoken-messages/index.js.map +1 -1
  62. package/build/lock-unlock.js +1 -1
  63. package/build/lock-unlock.js.map +1 -1
  64. package/build/menu-items-choice/types.js.map +1 -1
  65. package/build/palette-edit/index.js +30 -38
  66. package/build/palette-edit/index.js.map +1 -1
  67. package/build/palette-edit/types.js.map +1 -1
  68. package/build/popover/index.js +0 -4
  69. package/build/popover/index.js.map +1 -1
  70. package/build/popover/utils.js +0 -1
  71. package/build/popover/utils.js.map +1 -1
  72. package/build/private-apis.js +2 -4
  73. package/build/private-apis.js.map +1 -1
  74. package/build/progress-bar/styles.js +19 -13
  75. package/build/progress-bar/styles.js.map +1 -1
  76. package/build/radio-group/context.js +0 -1
  77. package/build/radio-group/context.js.map +1 -1
  78. package/build/radio-group/index.js +0 -1
  79. package/build/radio-group/index.js.map +1 -1
  80. package/build/radio-group/radio.js +0 -1
  81. package/build/radio-group/radio.js.map +1 -1
  82. package/build/range-control/index.js +4 -1
  83. package/build/range-control/index.js.map +1 -1
  84. package/build/range-control/styles/range-control-styles.js +34 -28
  85. package/build/range-control/styles/range-control-styles.js.map +1 -1
  86. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  87. package/build/select-control/index.js +1 -2
  88. package/build/select-control/index.js.map +1 -1
  89. package/build/select-control/styles/select-control-styles.js +13 -8
  90. package/build/select-control/styles/select-control-styles.js.map +1 -1
  91. package/build/tab-panel/index.js +0 -1
  92. package/build/tab-panel/index.js.map +1 -1
  93. package/build/tabs/index.js +0 -1
  94. package/build/tabs/index.js.map +1 -1
  95. package/build/tabs/styles.js +3 -5
  96. package/build/tabs/styles.js.map +1 -1
  97. package/build/tabs/tablist.js +148 -37
  98. package/build/tabs/tablist.js.map +1 -1
  99. package/build/tabs/types.js.map +1 -1
  100. package/build/toggle-group-control/toggle-group-control/as-radio-group.js +0 -2
  101. package/build/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  102. package/build/toggle-group-control/toggle-group-control/component.js +0 -2
  103. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  104. package/build/toggle-group-control/toggle-group-control-option-base/component.js +0 -4
  105. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  106. package/build/toolbar/toolbar/toolbar-container.js +0 -1
  107. package/build/toolbar/toolbar/toolbar-container.js.map +1 -1
  108. package/build/toolbar/toolbar/types.js.map +1 -1
  109. package/build/toolbar/toolbar-button/index.js +27 -19
  110. package/build/toolbar/toolbar-button/index.js.map +1 -1
  111. package/build/toolbar/toolbar-button/types.js.map +1 -1
  112. package/build/toolbar/toolbar-context/index.js +0 -1
  113. package/build/toolbar/toolbar-context/index.js.map +1 -1
  114. package/build/toolbar/toolbar-item/index.js +1 -1
  115. package/build/toolbar/toolbar-item/index.js.map +1 -1
  116. package/build/tooltip/index.js +3 -2
  117. package/build/tooltip/index.js.map +1 -1
  118. package/build/tooltip/types.js.map +1 -1
  119. package/build/unit-control/index.js +3 -3
  120. package/build/unit-control/index.js.map +1 -1
  121. package/build/unit-control/styles/unit-control-styles.js +7 -7
  122. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  123. package/build/utils/hooks/use-update-effect.js +4 -1
  124. package/build/utils/hooks/use-update-effect.js.map +1 -1
  125. package/build-module/animation/index.js +0 -1
  126. package/build-module/animation/index.js.map +1 -1
  127. package/build-module/autocomplete/autocompleter-ui.js +1 -0
  128. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  129. package/build-module/autocomplete/index.js.map +1 -1
  130. package/build-module/base-control/index.js +13 -6
  131. package/build-module/base-control/index.js.map +1 -1
  132. package/build-module/border-box-control/border-box-control-visualizer/component.js +0 -4
  133. package/build-module/border-box-control/border-box-control-visualizer/component.js.map +1 -1
  134. package/build-module/button/index.js +5 -3
  135. package/build-module/button/index.js.map +1 -1
  136. package/build-module/button/types.js.map +1 -1
  137. package/build-module/combobox-control/index.js +4 -1
  138. package/build-module/combobox-control/index.js.map +1 -1
  139. package/build-module/composite/current/index.js +0 -3
  140. package/build-module/composite/current/index.js.map +1 -1
  141. package/build-module/custom-select-control-v2/custom-select.js +59 -38
  142. package/build-module/custom-select-control-v2/custom-select.js.map +1 -1
  143. package/build-module/custom-select-control-v2/default-component/index.js +0 -1
  144. package/build-module/custom-select-control-v2/default-component/index.js.map +1 -1
  145. package/build-module/custom-select-control-v2/item.js +2 -0
  146. package/build-module/custom-select-control-v2/item.js.map +1 -1
  147. package/build-module/custom-select-control-v2/legacy-component/index.js +33 -16
  148. package/build-module/custom-select-control-v2/legacy-component/index.js.map +1 -1
  149. package/build-module/custom-select-control-v2/styles.js +90 -63
  150. package/build-module/custom-select-control-v2/styles.js.map +1 -1
  151. package/build-module/custom-select-control-v2/types.js.map +1 -1
  152. package/build-module/date-time/date-time/index.js +4 -1
  153. package/build-module/date-time/date-time/index.js.map +1 -1
  154. package/build-module/date-time/index.js +2 -1
  155. package/build-module/date-time/index.js.map +1 -1
  156. package/build-module/date-time/time/index.js +65 -149
  157. package/build-module/date-time/time/index.js.map +1 -1
  158. package/build-module/date-time/time-input/index.js +151 -0
  159. package/build-module/date-time/time-input/index.js.map +1 -0
  160. package/build-module/date-time/types.js.map +1 -1
  161. package/build-module/date-time/utils.js +61 -0
  162. package/build-module/date-time/utils.js.map +1 -1
  163. package/build-module/disclosure/index.js +0 -1
  164. package/build-module/disclosure/index.js.map +1 -1
  165. package/build-module/divider/component.js +0 -1
  166. package/build-module/divider/component.js.map +1 -1
  167. package/build-module/divider/types.js.map +1 -1
  168. package/build-module/drop-zone/index.js +17 -80
  169. package/build-module/drop-zone/index.js.map +1 -1
  170. package/build-module/dropdown-menu/index.js +1 -0
  171. package/build-module/dropdown-menu/index.js.map +1 -1
  172. package/build-module/dropdown-menu-v2/index.js +0 -1
  173. package/build-module/dropdown-menu-v2/index.js.map +1 -1
  174. package/build-module/dropdown-menu-v2/styles.js +14 -15
  175. package/build-module/dropdown-menu-v2/styles.js.map +1 -1
  176. package/build-module/dropdown-menu-v2/types.js.map +1 -1
  177. package/build-module/font-size-picker/font-size-picker-select.js +1 -1
  178. package/build-module/font-size-picker/font-size-picker-select.js.map +1 -1
  179. package/build-module/font-size-picker/index.js +1 -1
  180. package/build-module/font-size-picker/index.js.map +1 -1
  181. package/build-module/font-size-picker/utils.js +0 -4
  182. package/build-module/font-size-picker/utils.js.map +1 -1
  183. package/build-module/form-token-field/token.js +4 -1
  184. package/build-module/form-token-field/token.js.map +1 -1
  185. package/build-module/higher-order/with-spoken-messages/index.js +1 -2
  186. package/build-module/higher-order/with-spoken-messages/index.js.map +1 -1
  187. package/build-module/lock-unlock.js +1 -1
  188. package/build-module/lock-unlock.js.map +1 -1
  189. package/build-module/menu-items-choice/types.js.map +1 -1
  190. package/build-module/palette-edit/index.js +31 -39
  191. package/build-module/palette-edit/index.js.map +1 -1
  192. package/build-module/palette-edit/types.js.map +1 -1
  193. package/build-module/popover/index.js +0 -3
  194. package/build-module/popover/index.js.map +1 -1
  195. package/build-module/popover/utils.js +0 -1
  196. package/build-module/popover/utils.js.map +1 -1
  197. package/build-module/private-apis.js +2 -4
  198. package/build-module/private-apis.js.map +1 -1
  199. package/build-module/progress-bar/styles.js +21 -13
  200. package/build-module/progress-bar/styles.js.map +1 -1
  201. package/build-module/radio-group/context.js +0 -1
  202. package/build-module/radio-group/context.js.map +1 -1
  203. package/build-module/radio-group/index.js +0 -1
  204. package/build-module/radio-group/index.js.map +1 -1
  205. package/build-module/radio-group/radio.js +0 -1
  206. package/build-module/radio-group/radio.js.map +1 -1
  207. package/build-module/range-control/index.js +4 -1
  208. package/build-module/range-control/index.js.map +1 -1
  209. package/build-module/range-control/styles/range-control-styles.js +34 -28
  210. package/build-module/range-control/styles/range-control-styles.js.map +1 -1
  211. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  212. package/build-module/select-control/index.js +2 -3
  213. package/build-module/select-control/index.js.map +1 -1
  214. package/build-module/select-control/styles/select-control-styles.js +12 -7
  215. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  216. package/build-module/tab-panel/index.js +0 -1
  217. package/build-module/tab-panel/index.js.map +1 -1
  218. package/build-module/tabs/index.js +0 -1
  219. package/build-module/tabs/index.js.map +1 -1
  220. package/build-module/tabs/styles.js +3 -4
  221. package/build-module/tabs/styles.js.map +1 -1
  222. package/build-module/tabs/tablist.js +149 -38
  223. package/build-module/tabs/tablist.js.map +1 -1
  224. package/build-module/tabs/types.js.map +1 -1
  225. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js +0 -1
  226. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  227. package/build-module/toggle-group-control/toggle-group-control/component.js +0 -1
  228. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  229. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +0 -2
  230. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  231. package/build-module/toolbar/toolbar/toolbar-container.js +0 -1
  232. package/build-module/toolbar/toolbar/toolbar-container.js.map +1 -1
  233. package/build-module/toolbar/toolbar/types.js.map +1 -1
  234. package/build-module/toolbar/toolbar-button/index.js +27 -19
  235. package/build-module/toolbar/toolbar-button/index.js.map +1 -1
  236. package/build-module/toolbar/toolbar-button/types.js.map +1 -1
  237. package/build-module/toolbar/toolbar-context/index.js +0 -1
  238. package/build-module/toolbar/toolbar-context/index.js.map +1 -1
  239. package/build-module/toolbar/toolbar-item/index.js +1 -1
  240. package/build-module/toolbar/toolbar-item/index.js.map +1 -1
  241. package/build-module/tooltip/index.js +3 -2
  242. package/build-module/tooltip/index.js.map +1 -1
  243. package/build-module/tooltip/types.js.map +1 -1
  244. package/build-module/unit-control/index.js +3 -3
  245. package/build-module/unit-control/index.js.map +1 -1
  246. package/build-module/unit-control/styles/unit-control-styles.js +7 -7
  247. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  248. package/build-module/utils/hooks/use-update-effect.js +4 -1
  249. package/build-module/utils/hooks/use-update-effect.js.map +1 -1
  250. package/build-style/style-rtl.css +46 -6
  251. package/build-style/style.css +46 -6
  252. package/build-types/animation/index.d.ts.map +1 -1
  253. package/build-types/autocomplete/autocompleter-ui.d.ts.map +1 -1
  254. package/build-types/autocomplete/index.d.ts.map +1 -1
  255. package/build-types/base-control/index.d.ts +6 -20
  256. package/build-types/base-control/index.d.ts.map +1 -1
  257. package/build-types/base-control/stories/index.story.d.ts.map +1 -1
  258. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts.map +1 -1
  259. package/build-types/button/deprecated.d.ts +4 -4
  260. package/build-types/button/index.d.ts.map +1 -1
  261. package/build-types/button/stories/e2e/index.story.d.ts.map +1 -1
  262. package/build-types/button/types.d.ts +27 -10
  263. package/build-types/button/types.d.ts.map +1 -1
  264. package/build-types/combobox-control/index.d.ts.map +1 -1
  265. package/build-types/composite/current/index.d.ts.map +1 -1
  266. package/build-types/custom-select-control/stories/index.story.d.ts +15 -0
  267. package/build-types/custom-select-control/stories/index.story.d.ts.map +1 -1
  268. package/build-types/custom-select-control-v2/custom-select.d.ts +2 -2
  269. package/build-types/custom-select-control-v2/custom-select.d.ts.map +1 -1
  270. package/build-types/custom-select-control-v2/default-component/index.d.ts.map +1 -1
  271. package/build-types/custom-select-control-v2/item.d.ts.map +1 -1
  272. package/build-types/custom-select-control-v2/legacy-component/index.d.ts.map +1 -1
  273. package/build-types/custom-select-control-v2/stories/default.story.d.ts +6 -3
  274. package/build-types/custom-select-control-v2/stories/default.story.d.ts.map +1 -1
  275. package/build-types/custom-select-control-v2/styles.d.ts +18 -22
  276. package/build-types/custom-select-control-v2/styles.d.ts.map +1 -1
  277. package/build-types/custom-select-control-v2/types.d.ts +13 -2
  278. package/build-types/custom-select-control-v2/types.d.ts.map +1 -1
  279. package/build-types/date-time/date-time/index.d.ts.map +1 -1
  280. package/build-types/date-time/index.d.ts +2 -1
  281. package/build-types/date-time/index.d.ts.map +1 -1
  282. package/build-types/date-time/stories/time-input.story.d.ts +12 -0
  283. package/build-types/date-time/stories/time-input.story.d.ts.map +1 -0
  284. package/build-types/date-time/time/index.d.ts +1 -1
  285. package/build-types/date-time/time/index.d.ts.map +1 -1
  286. package/build-types/date-time/time-input/index.d.ts +5 -0
  287. package/build-types/date-time/time-input/index.d.ts.map +1 -0
  288. package/build-types/date-time/time-input/test/index.d.ts +2 -0
  289. package/build-types/date-time/time-input/test/index.d.ts.map +1 -0
  290. package/build-types/date-time/types.d.ts +54 -0
  291. package/build-types/date-time/types.d.ts.map +1 -1
  292. package/build-types/date-time/utils.d.ts +40 -0
  293. package/build-types/date-time/utils.d.ts.map +1 -1
  294. package/build-types/disclosure/index.d.ts.map +1 -1
  295. package/build-types/divider/component.d.ts.map +1 -1
  296. package/build-types/divider/types.d.ts.map +1 -1
  297. package/build-types/drop-zone/index.d.ts +3 -0
  298. package/build-types/drop-zone/index.d.ts.map +1 -1
  299. package/build-types/dropdown-menu/index.d.ts.map +1 -1
  300. package/build-types/dropdown-menu-v2/index.d.ts.map +1 -1
  301. package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -1
  302. package/build-types/dropdown-menu-v2/types.d.ts.map +1 -1
  303. package/build-types/font-size-picker/styles.d.ts +1 -1
  304. package/build-types/font-size-picker/utils.d.ts.map +1 -1
  305. package/build-types/form-token-field/token.d.ts.map +1 -1
  306. package/build-types/higher-order/with-spoken-messages/index.d.ts +1 -2
  307. package/build-types/higher-order/with-spoken-messages/index.d.ts.map +1 -1
  308. package/build-types/menu-items-choice/types.d.ts +1 -1
  309. package/build-types/menu-items-choice/types.d.ts.map +1 -1
  310. package/build-types/navigator/navigator-back-button/component.d.ts +1 -1
  311. package/build-types/navigator/navigator-back-button/hook.d.ts +1 -1
  312. package/build-types/navigator/navigator-button/component.d.ts +1 -1
  313. package/build-types/navigator/navigator-button/hook.d.ts +1 -1
  314. package/build-types/navigator/navigator-to-parent-button/component.d.ts +1 -1
  315. package/build-types/palette-edit/index.d.ts.map +1 -1
  316. package/build-types/palette-edit/types.d.ts +1 -3
  317. package/build-types/palette-edit/types.d.ts.map +1 -1
  318. package/build-types/popover/index.d.ts.map +1 -1
  319. package/build-types/popover/utils.d.ts.map +1 -1
  320. package/build-types/private-apis.d.ts.map +1 -1
  321. package/build-types/progress-bar/styles.d.ts.map +1 -1
  322. package/build-types/radio-group/context.d.ts.map +1 -1
  323. package/build-types/radio-group/index.d.ts.map +1 -1
  324. package/build-types/radio-group/radio.d.ts.map +1 -1
  325. package/build-types/range-control/index.d.ts.map +1 -1
  326. package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
  327. package/build-types/resizable-box/resize-tooltip/utils.d.ts +2 -2
  328. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  329. package/build-types/select-control/index.d.ts.map +1 -1
  330. package/build-types/select-control/styles/select-control-styles.d.ts +5 -0
  331. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  332. package/build-types/tab-panel/index.d.ts.map +1 -1
  333. package/build-types/tabs/index.d.ts.map +1 -1
  334. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  335. package/build-types/tabs/styles.d.ts.map +1 -1
  336. package/build-types/tabs/tablist.d.ts.map +1 -1
  337. package/build-types/tabs/types.d.ts.map +1 -1
  338. package/build-types/theme/stories/index.story.d.ts.map +1 -1
  339. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
  340. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  341. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  342. package/build-types/toolbar/toolbar/toolbar-container.d.ts.map +1 -1
  343. package/build-types/toolbar/toolbar/types.d.ts +6 -0
  344. package/build-types/toolbar/toolbar/types.d.ts.map +1 -1
  345. package/build-types/toolbar/toolbar-button/index.d.ts +3 -96
  346. package/build-types/toolbar/toolbar-button/index.d.ts.map +1 -1
  347. package/build-types/toolbar/toolbar-button/types.d.ts +18 -0
  348. package/build-types/toolbar/toolbar-button/types.d.ts.map +1 -1
  349. package/build-types/toolbar/toolbar-context/index.d.ts.map +1 -1
  350. package/build-types/toolbar/toolbar-item/index.d.ts +1 -3
  351. package/build-types/toolbar/toolbar-item/index.d.ts.map +1 -1
  352. package/build-types/tooltip/index.d.ts.map +1 -1
  353. package/build-types/tooltip/types.d.ts +4 -0
  354. package/build-types/tooltip/types.d.ts.map +1 -1
  355. package/build-types/unit-control/index.d.ts.map +1 -1
  356. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  357. package/build-types/utils/hooks/use-update-effect.d.ts +1 -1
  358. package/build-types/utils/hooks/use-update-effect.d.ts.map +1 -1
  359. package/package.json +19 -19
  360. package/src/animation/index.tsx +0 -1
  361. package/src/autocomplete/autocompleter-ui.tsx +1 -0
  362. package/src/autocomplete/index.tsx +0 -1
  363. package/src/base-control/index.tsx +16 -6
  364. package/src/base-control/stories/index.story.tsx +0 -1
  365. package/src/border-box-control/border-box-control-visualizer/component.tsx +0 -5
  366. package/src/button/README.md +13 -0
  367. package/src/button/index.tsx +6 -4
  368. package/src/button/stories/e2e/index.story.tsx +2 -1
  369. package/src/button/test/index.tsx +17 -2
  370. package/src/button/types.ts +27 -10
  371. package/src/combobox-control/index.tsx +2 -0
  372. package/src/composite/current/index.ts +0 -2
  373. package/src/custom-select-control/stories/index.story.tsx +32 -3
  374. package/src/custom-select-control/test/index.js +247 -28
  375. package/src/custom-select-control-v2/custom-select.tsx +58 -23
  376. package/src/custom-select-control-v2/default-component/index.tsx +0 -1
  377. package/src/custom-select-control-v2/item.tsx +5 -1
  378. package/src/custom-select-control-v2/legacy-component/index.tsx +45 -16
  379. package/src/custom-select-control-v2/legacy-component/test/index.tsx +261 -43
  380. package/src/custom-select-control-v2/styles.ts +156 -74
  381. package/src/custom-select-control-v2/test/index.tsx +35 -5
  382. package/src/custom-select-control-v2/types.ts +19 -6
  383. package/src/date-time/README.md +8 -0
  384. package/src/date-time/date-time/index.tsx +2 -1
  385. package/src/date-time/index.ts +2 -1
  386. package/src/date-time/stories/time-input.story.tsx +36 -0
  387. package/src/date-time/time/index.tsx +77 -194
  388. package/src/date-time/time/test/index.tsx +61 -0
  389. package/src/date-time/time-input/index.tsx +196 -0
  390. package/src/date-time/time-input/test/index.tsx +171 -0
  391. package/src/date-time/types.ts +63 -0
  392. package/src/date-time/utils.ts +69 -0
  393. package/src/dimension-control/test/__snapshots__/index.test.js.snap +116 -96
  394. package/src/disclosure/index.tsx +0 -1
  395. package/src/divider/component.tsx +0 -1
  396. package/src/divider/types.ts +0 -1
  397. package/src/drop-zone/index.tsx +17 -76
  398. package/src/drop-zone/style.scss +51 -16
  399. package/src/dropdown-menu/index.tsx +1 -0
  400. package/src/dropdown-menu-v2/index.tsx +0 -1
  401. package/src/dropdown-menu-v2/styles.ts +0 -1
  402. package/src/dropdown-menu-v2/types.ts +0 -1
  403. package/src/font-size-picker/font-size-picker-select.tsx +1 -1
  404. package/src/font-size-picker/index.tsx +1 -1
  405. package/src/font-size-picker/test/index.tsx +6 -6
  406. package/src/font-size-picker/utils.ts +0 -5
  407. package/src/form-token-field/token.tsx +2 -0
  408. package/src/higher-order/navigate-regions/style.scss +25 -13
  409. package/src/higher-order/with-spoken-messages/index.tsx +1 -2
  410. package/src/lock-unlock.js +1 -1
  411. package/src/menu-items-choice/types.ts +2 -1
  412. package/src/palette-edit/index.tsx +33 -45
  413. package/src/palette-edit/test/index.tsx +3 -4
  414. package/src/palette-edit/types.ts +1 -3
  415. package/src/popover/index.tsx +0 -2
  416. package/src/popover/utils.ts +0 -1
  417. package/src/private-apis.ts +2 -5
  418. package/src/progress-bar/styles.ts +18 -9
  419. package/src/radio-group/context.tsx +0 -1
  420. package/src/radio-group/index.tsx +0 -1
  421. package/src/radio-group/radio.tsx +0 -1
  422. package/src/range-control/index.tsx +2 -0
  423. package/src/range-control/styles/range-control-styles.ts +6 -2
  424. package/src/resizable-box/resize-tooltip/utils.ts +1 -1
  425. package/src/select-control/index.tsx +3 -4
  426. package/src/select-control/styles/select-control-styles.ts +17 -6
  427. package/src/tab-panel/index.tsx +0 -1
  428. package/src/tabs/index.tsx +0 -1
  429. package/src/tabs/stories/index.story.tsx +25 -18
  430. package/src/tabs/styles.ts +18 -14
  431. package/src/tabs/tablist.tsx +187 -43
  432. package/src/tabs/types.ts +0 -1
  433. package/src/theme/stories/index.story.tsx +2 -0
  434. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +0 -1
  435. package/src/toggle-group-control/toggle-group-control/component.tsx +0 -2
  436. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +0 -2
  437. package/src/toolbar/toolbar/README.md +9 -0
  438. package/src/toolbar/toolbar/style.scss +7 -0
  439. package/src/toolbar/toolbar/toolbar-container.tsx +0 -1
  440. package/src/toolbar/toolbar/types.ts +6 -0
  441. package/src/toolbar/toolbar-button/index.tsx +30 -17
  442. package/src/toolbar/toolbar-button/types.ts +19 -0
  443. package/src/toolbar/toolbar-context/index.ts +0 -1
  444. package/src/toolbar/toolbar-item/index.tsx +1 -1
  445. package/src/tooltip/index.tsx +3 -2
  446. package/src/tooltip/test/index.tsx +18 -0
  447. package/src/tooltip/types.ts +4 -0
  448. package/src/unit-control/index.tsx +3 -2
  449. package/src/unit-control/styles/unit-control-styles.ts +10 -4
  450. package/src/utils/hooks/use-update-effect.js +8 -1
  451. package/tsconfig.tsbuildinfo +1 -1
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- // eslint-disable-next-line no-restricted-imports
5
4
  import * as Ariakit from '@ariakit/react';
6
5
 
7
6
  /**
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- // eslint-disable-next-line no-restricted-imports
5
4
  import * as Ariakit from '@ariakit/react';
6
5
  import type { ForwardedRef } from 'react';
7
6
 
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- // eslint-disable-next-line no-restricted-imports
5
4
  import type { SeparatorProps } from '@ariakit/react';
6
5
 
7
6
  /**
@@ -10,86 +10,14 @@ import { __ } from '@wordpress/i18n';
10
10
  import { useState } from '@wordpress/element';
11
11
  import { upload, Icon } from '@wordpress/icons';
12
12
  import { getFilesFromDataTransfer } from '@wordpress/dom';
13
- import {
14
- __experimentalUseDropZone as useDropZone,
15
- useReducedMotion,
16
- } from '@wordpress/compose';
13
+ import { __experimentalUseDropZone as useDropZone } from '@wordpress/compose';
17
14
 
18
15
  /**
19
16
  * Internal dependencies
20
17
  */
21
- import {
22
- __unstableMotion as motion,
23
- __unstableAnimatePresence as AnimatePresence,
24
- } from '../animation';
25
18
  import type { DropType, DropZoneProps } from './types';
26
19
  import type { WordPressComponentProps } from '../context';
27
20
 
28
- const backdrop = {
29
- hidden: { opacity: 0 },
30
- show: {
31
- opacity: 1,
32
- transition: {
33
- type: 'tween',
34
- duration: 0.2,
35
- delay: 0,
36
- delayChildren: 0.1,
37
- },
38
- },
39
- exit: {
40
- opacity: 0,
41
- transition: {
42
- duration: 0.2,
43
- delayChildren: 0,
44
- },
45
- },
46
- };
47
-
48
- const foreground = {
49
- hidden: { opacity: 0, scale: 0.9 },
50
- show: {
51
- opacity: 1,
52
- scale: 1,
53
- transition: {
54
- duration: 0.1,
55
- },
56
- },
57
- exit: { opacity: 0, scale: 0.9 },
58
- };
59
-
60
- function DropIndicator( { label }: { label?: string } ) {
61
- const disableMotion = useReducedMotion();
62
- const children = (
63
- <motion.div
64
- variants={ backdrop }
65
- initial={ disableMotion ? 'show' : 'hidden' }
66
- animate="show"
67
- exit={ disableMotion ? 'show' : 'exit' }
68
- className="components-drop-zone__content"
69
- // Without this, when this div is shown,
70
- // Safari calls a onDropZoneLeave causing a loop because of this bug
71
- // https://bugs.webkit.org/show_bug.cgi?id=66547
72
- style={ { pointerEvents: 'none' } }
73
- >
74
- <motion.div variants={ foreground }>
75
- <Icon
76
- icon={ upload }
77
- className="components-drop-zone__content-icon"
78
- />
79
- <span className="components-drop-zone__content-text">
80
- { label ? label : __( 'Drop files to upload' ) }
81
- </span>
82
- </motion.div>
83
- </motion.div>
84
- );
85
-
86
- if ( disableMotion ) {
87
- return children;
88
- }
89
-
90
- return <AnimatePresence>{ children }</AnimatePresence>;
91
- }
92
-
93
21
  /**
94
22
  * `DropZone` is a component creating a drop zone area taking the full size of its parent element. It supports dropping files, HTML content or any other HTML drop event.
95
23
  *
@@ -135,7 +63,7 @@ export function DropZoneComponent( {
135
63
 
136
64
  /**
137
65
  * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.
138
- * The order of the checks is important to recognise the HTML drop.
66
+ * The order of the checks is important to recognize the HTML drop.
139
67
  */
140
68
  if ( html && onHTMLDrop ) {
141
69
  onHTMLDrop( html );
@@ -152,7 +80,7 @@ export function DropZoneComponent( {
152
80
 
153
81
  /**
154
82
  * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.
155
- * The order of the checks is important to recognise the HTML drop.
83
+ * The order of the checks is important to recognize the HTML drop.
156
84
  */
157
85
  if ( event.dataTransfer?.types.includes( 'text/html' ) ) {
158
86
  _type = 'html';
@@ -181,12 +109,15 @@ export function DropZoneComponent( {
181
109
  setIsDraggingOverElement( false );
182
110
  },
183
111
  } );
112
+
184
113
  const classes = clsx( 'components-drop-zone', className, {
185
114
  'is-active':
186
115
  ( isDraggingOverDocument || isDraggingOverElement ) &&
187
116
  ( ( type === 'file' && onFilesDrop ) ||
188
117
  ( type === 'html' && onHTMLDrop ) ||
189
118
  ( type === 'default' && onDrop ) ),
119
+ 'has-dragged-out': ! isDraggingOverElement,
120
+ // Keeping the following classnames for legacy purposes
190
121
  'is-dragging-over-document': isDraggingOverDocument,
191
122
  'is-dragging-over-element': isDraggingOverElement,
192
123
  [ `is-dragging-${ type }` ]: !! type,
@@ -194,7 +125,17 @@ export function DropZoneComponent( {
194
125
 
195
126
  return (
196
127
  <div { ...restProps } ref={ ref } className={ classes }>
197
- { isDraggingOverElement && <DropIndicator label={ label } /> }
128
+ <div className="components-drop-zone__content">
129
+ <div className="components-drop-zone__content-inner">
130
+ <Icon
131
+ icon={ upload }
132
+ className="components-drop-zone__content-icon"
133
+ />
134
+ <span className="components-drop-zone__content-text">
135
+ { label ? label : __( 'Drop files to upload' ) }
136
+ </span>
137
+ </div>
138
+ </div>
198
139
  </div>
199
140
  );
200
141
  }
@@ -13,23 +13,58 @@
13
13
  opacity: 1;
14
14
  visibility: visible;
15
15
  }
16
- }
17
16
 
18
- .components-drop-zone__content {
19
- position: absolute;
20
- top: 0;
21
- bottom: 0;
22
- left: 0;
23
- right: 0;
24
- height: 100%;
25
- width: 100%;
26
- display: flex;
27
- background-color: $components-color-accent;
28
- align-items: center;
29
- justify-content: center;
30
- z-index: z-index(".components-drop-zone__content");
31
- text-align: center;
32
- color: $white;
17
+ .components-drop-zone__content {
18
+ position: absolute;
19
+ top: 0;
20
+ bottom: 0;
21
+ left: 0;
22
+ right: 0;
23
+ height: 100%;
24
+ width: 100%;
25
+ display: flex;
26
+ background-color: $components-color-accent;
27
+ align-items: center;
28
+ justify-content: center;
29
+ z-index: z-index(".components-drop-zone__content");
30
+ text-align: center;
31
+ color: $white;
32
+ opacity: 0;
33
+
34
+ // Without this, when this div is shown,
35
+ // Safari calls a onDropZoneLeave causing a loop because of this bug
36
+ // https://bugs.webkit.org/show_bug.cgi?id=66547
37
+ pointer-events: none;
38
+ }
39
+
40
+ .components-drop-zone__content-inner {
41
+ opacity: 0;
42
+ transform: scale(0.9);
43
+ }
44
+
45
+ &.is-active:not(.has-dragged-out) {
46
+ .components-drop-zone__content {
47
+ opacity: 1;
48
+
49
+ transition: opacity 0.2s ease-in-out;
50
+ @media (prefers-reduced-motion) {
51
+ transition: none;
52
+ }
53
+ }
54
+
55
+ .components-drop-zone__content-inner {
56
+ opacity: 1;
57
+ transform: scale(1);
58
+
59
+ transition:
60
+ opacity 0.1s ease-in-out 0.1s,
61
+ transform 0.1s ease-in-out 0.1s;
62
+
63
+ @media (prefers-reduced-motion) {
64
+ transition: none;
65
+ }
66
+ }
67
+ }
33
68
  }
34
69
 
35
70
  .components-drop-zone__content-icon,
@@ -199,6 +199,7 @@ function UnconnectedDropdownMenu( dropdownMenuProps: DropdownMenuProps ) {
199
199
  ? control.role
200
200
  : 'menuitem'
201
201
  }
202
+ accessibleWhenDisabled
202
203
  disabled={ control.isDisabled }
203
204
  >
204
205
  { control.title }
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- // eslint-disable-next-line no-restricted-imports
5
4
  import * as Ariakit from '@ariakit/react';
6
5
 
7
6
  /**
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- // eslint-disable-next-line no-restricted-imports
5
4
  import * as Ariakit from '@ariakit/react';
6
5
  import { css, keyframes } from '@emotion/react';
7
6
  import styled from '@emotion/styled';
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- // eslint-disable-next-line no-restricted-imports
5
4
  import type * as Ariakit from '@ariakit/react';
6
5
  import type { Placement } from '@floating-ui/react-dom';
7
6
 
@@ -6,7 +6,7 @@ import { __, sprintf } from '@wordpress/i18n';
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
- import CustomSelectControl from '../custom-select-control';
9
+ import CustomSelectControl from '../custom-select-control-v2/legacy-component';
10
10
  import { parseQuantityAndUnitFromRawValue } from '../unit-control';
11
11
  import type {
12
12
  FontSizePickerSelectProps,
@@ -262,7 +262,7 @@ const UnforwardedFontSizePicker = (
262
262
  <FlexItem>
263
263
  <Button
264
264
  disabled={ isDisabled }
265
- __experimentalIsFocusable
265
+ accessibleWhenDisabled
266
266
  onClick={ () => {
267
267
  onChange?.( undefined );
268
268
  } }
@@ -94,7 +94,7 @@ describe( 'FontSizePicker', () => {
94
94
  const user = userEvent.setup();
95
95
  render( <FontSizePicker fontSizes={ fontSizes } /> );
96
96
  await user.click(
97
- screen.getByRole( 'button', { name: 'Font size' } )
97
+ screen.getByRole( 'combobox', { name: 'Font size' } )
98
98
  );
99
99
  const options = screen.getAllByRole( 'option' );
100
100
  expect( options ).toHaveLength( 8 );
@@ -148,7 +148,7 @@ describe( 'FontSizePicker', () => {
148
148
  />
149
149
  );
150
150
  await user.click(
151
- screen.getByRole( 'button', { name: 'Font size' } )
151
+ screen.getByRole( 'combobox', { name: 'Font size' } )
152
152
  );
153
153
  await user.click(
154
154
  screen.getByRole( 'option', { name: option } )
@@ -200,7 +200,7 @@ describe( 'FontSizePicker', () => {
200
200
  const user = userEvent.setup();
201
201
  render( <FontSizePicker fontSizes={ fontSizes } /> );
202
202
  await user.click(
203
- screen.getByRole( 'button', { name: 'Font size' } )
203
+ screen.getByRole( 'combobox', { name: 'Font size' } )
204
204
  );
205
205
  const options = screen.getAllByRole( 'option' );
206
206
  expect( options ).toHaveLength( 8 );
@@ -225,7 +225,7 @@ describe( 'FontSizePicker', () => {
225
225
  <FontSizePicker fontSizes={ fontSizes } value={ value } />
226
226
  );
227
227
  expect(
228
- screen.getByRole( 'button', { name: 'Font size' } )
228
+ screen.getByRole( 'combobox', { name: 'Font size' } )
229
229
  ).toHaveTextContent( option );
230
230
  }
231
231
  );
@@ -291,7 +291,7 @@ describe( 'FontSizePicker', () => {
291
291
  />
292
292
  );
293
293
  await user.click(
294
- screen.getByRole( 'button', { name: 'Font size' } )
294
+ screen.getByRole( 'combobox', { name: 'Font size' } )
295
295
  );
296
296
  await user.click(
297
297
  screen.getByRole( 'option', { name: option } )
@@ -509,7 +509,7 @@ describe( 'FontSizePicker', () => {
509
509
  <FontSizePicker fontSizes={ fontSizes } onChange={ onChange } />
510
510
  );
511
511
  await user.click(
512
- screen.getByRole( 'button', { name: 'Font size' } )
512
+ screen.getByRole( 'combobox', { name: 'Font size' } )
513
513
  );
514
514
  await user.click(
515
515
  screen.getByRole( 'option', { name: 'Custom' } )
@@ -1,8 +1,3 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
-
6
1
  /**
7
2
  * Internal dependencies
8
3
  */
@@ -74,6 +74,8 @@ export default function Token( {
74
74
  className="components-form-token-field__remove-token"
75
75
  icon={ closeSmall }
76
76
  onClick={ ! disabled ? onClick : undefined }
77
+ // Disable reason: Even when FormTokenField itself is accessibly disabled, token reset buttons shouldn't be in the tab sequence.
78
+ // eslint-disable-next-line no-restricted-syntax
77
79
  disabled={ disabled }
78
80
  label={ messages.remove }
79
81
  aria-describedby={ `components-form-token-field__token-text-${ instanceId }` }
@@ -1,22 +1,35 @@
1
1
  // Allow the position to be easily overridden to e.g. fixed.
2
+
3
+ @mixin region-selection-outline {
4
+ outline: 4px solid $components-color-accent;
5
+ outline-offset: -4px;
6
+ }
7
+
8
+ @mixin region-selection-focus {
9
+ position: absolute;
10
+ top: 0;
11
+ left: 0;
12
+ right: 0;
13
+ bottom: 0;
14
+ content: "";
15
+ pointer-events: none;
16
+ @include region-selection-outline;
17
+ z-index: z-index(".is-focusing-regions {region} :focus::after");
18
+ }
19
+
2
20
  [role="region"] {
3
21
  position: relative;
22
+
23
+ // Handles the focus when we programatically send focus to this region
24
+ &.interface-interface-skeleton__content:focus-visible::after {
25
+ @include region-selection-focus;
26
+ }
4
27
  }
5
28
 
6
29
  .is-focusing-regions {
7
30
  [role="region"]:focus::after {
8
- position: absolute;
9
- top: 0;
10
- left: 0;
11
- right: 0;
12
- bottom: 0;
13
- content: "";
14
- pointer-events: none;
15
- outline: 4px solid $components-color-accent;
16
- outline-offset: -4px;
17
- z-index: z-index(".is-focusing-regions {region} :focus::after");
31
+ @include region-selection-focus;
18
32
  }
19
-
20
33
  // Fixes for edge cases.
21
34
  // Some of the regions are currently used for layout purposes as 'interface skeleton'
22
35
  // items. When they're absolutely positioned or when they contain absolutely
@@ -33,7 +46,6 @@
33
46
  .interface-interface-skeleton__actions .editor-layout__toggle-publish-panel,
34
47
  .interface-interface-skeleton__actions .editor-layout__toggle-entities-saved-states-panel,
35
48
  .editor-post-publish-panel {
36
- outline: 4px solid $components-color-accent;
37
- outline-offset: -4px;
49
+ @include region-selection-outline;
38
50
  }
39
51
  }
@@ -7,8 +7,7 @@ import { speak } from '@wordpress/a11y';
7
7
  /** @typedef {import('react').ComponentType} ComponentType */
8
8
 
9
9
  /**
10
- * A Higher Order Component used to be provide speak and debounced speak
11
- * functions.
10
+ * A Higher Order Component used to provide speak and debounced speak functions.
12
11
  *
13
12
  * @see https://developer.wordpress.org/block-editor/packages/packages-a11y/#speak
14
13
  *
@@ -5,6 +5,6 @@ import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/pri
5
5
 
6
6
  export const { lock, unlock } =
7
7
  __dangerousOptInToUnstableAPIsOnlyForCoreModules(
8
- 'I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.',
8
+ 'I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.',
9
9
  '@wordpress/components'
10
10
  );
@@ -20,7 +20,8 @@ export type MenuItemsChoiceProps = {
20
20
  * Callback function to be called with the selected choice when user
21
21
  * selects a new choice.
22
22
  */
23
- onSelect( value: string ): void;
23
+ onSelect: ( value: string ) => void;
24
+
24
25
  /**
25
26
  * Callback function to be called with a choice when user
26
27
  * hovers over a new choice (will be empty on mouse leave).
@@ -15,10 +15,7 @@ import {
15
15
  } from '@wordpress/element';
16
16
  import { __, sprintf } from '@wordpress/i18n';
17
17
  import { lineSolid, moreVertical, plus } from '@wordpress/icons';
18
- import {
19
- __experimentalUseFocusOutside as useFocusOutside,
20
- useDebounce,
21
- } from '@wordpress/compose';
18
+ import { useDebounce } from '@wordpress/compose';
22
19
 
23
20
  /**
24
21
  * Internal dependencies
@@ -174,16 +171,13 @@ function Option< T extends Color | Gradient >( {
174
171
  canOnlyChangeValues,
175
172
  element,
176
173
  onChange,
177
- isEditing,
178
- onStartEditing,
179
174
  onRemove,
180
- onStopEditing,
181
175
  popoverProps: receivedPopoverProps,
182
176
  slugPrefix,
183
177
  isGradient,
184
178
  }: OptionProps< T > ) {
185
- const focusOutsideProps = useFocusOutside( onStopEditing );
186
179
  const value = isGradient ? element.gradient : element.color;
180
+ const [ isEditingColor, setIsEditingColor ] = useState( false );
187
181
 
188
182
  // Use internal state instead of a ref to make sure that the component
189
183
  // re-renders when the popover's anchor updates.
@@ -198,26 +192,23 @@ function Option< T extends Color | Gradient >( {
198
192
  );
199
193
 
200
194
  return (
201
- <PaletteItem
202
- className={ isEditing ? 'is-selected' : undefined }
203
- as={ isEditing ? 'div' : 'button' }
204
- onClick={ onStartEditing }
205
- aria-label={
206
- isEditing
207
- ? undefined
208
- : sprintf(
209
- // translators: %s is a color or gradient name, e.g. "Red".
210
- __( 'Edit: %s' ),
211
- element.name.trim().length ? element.name : value
212
- )
213
- }
214
- ref={ setPopoverAnchor }
215
- { ...( isEditing ? { ...focusOutsideProps } : {} ) }
216
- >
195
+ <PaletteItem ref={ setPopoverAnchor } as="div">
217
196
  <HStack justify="flex-start">
218
- <IndicatorStyled colorValue={ value } />
197
+ <Button
198
+ onClick={ () => {
199
+ setIsEditingColor( true );
200
+ } }
201
+ aria-label={ sprintf(
202
+ // translators: %s is a color or gradient name, e.g. "Red".
203
+ __( 'Edit: %s' ),
204
+ element.name.trim().length ? element.name : value
205
+ ) }
206
+ style={ { padding: 0 } }
207
+ >
208
+ <IndicatorStyled colorValue={ value } />
209
+ </Button>
219
210
  <FlexItem>
220
- { isEditing && ! canOnlyChangeValues ? (
211
+ { ! canOnlyChangeValues ? (
221
212
  <NameInput
222
213
  label={
223
214
  isGradient
@@ -244,23 +235,30 @@ function Option< T extends Color | Gradient >( {
244
235
  </NameContainer>
245
236
  ) }
246
237
  </FlexItem>
247
- { isEditing && ! canOnlyChangeValues && (
238
+ { ! canOnlyChangeValues && (
248
239
  <FlexItem>
249
240
  <RemoveButton
250
241
  size="small"
251
242
  icon={ lineSolid }
252
- label={ __( 'Remove color' ) }
243
+ label={ sprintf(
244
+ // translators: %s is a color or gradient name, e.g. "Red".
245
+ __( 'Remove color: %s' ),
246
+ element.name.trim().length
247
+ ? element.name
248
+ : value
249
+ ) }
253
250
  onClick={ onRemove }
254
251
  />
255
252
  </FlexItem>
256
253
  ) }
257
254
  </HStack>
258
- { isEditing && (
255
+ { isEditingColor && (
259
256
  <ColorPickerPopover
260
257
  isGradient={ isGradient }
261
258
  onChange={ onChange }
262
259
  element={ element }
263
260
  popoverProps={ popoverProps }
261
+ onClose={ () => setIsEditingColor( false ) }
264
262
  />
265
263
  ) }
266
264
  </PaletteItem>
@@ -270,12 +268,11 @@ function Option< T extends Color | Gradient >( {
270
268
  function PaletteEditListView< T extends Color | Gradient >( {
271
269
  elements,
272
270
  onChange,
273
- editingElement,
274
- setEditingElement,
275
271
  canOnlyChangeValues,
276
272
  slugPrefix,
277
273
  isGradient,
278
274
  popoverProps,
275
+ addColorRef,
279
276
  }: PaletteEditListViewProps< T > ) {
280
277
  // When unmounting the component if there are empty elements (the user did not complete the insertion) clean them.
281
278
  const elementsReference = useRef< typeof elements >();
@@ -294,11 +291,6 @@ function PaletteEditListView< T extends Color | Gradient >( {
294
291
  canOnlyChangeValues={ canOnlyChangeValues }
295
292
  key={ index }
296
293
  element={ element }
297
- onStartEditing={ () => {
298
- if ( editingElement !== index ) {
299
- setEditingElement( index );
300
- }
301
- } }
302
294
  onChange={ ( newElement ) => {
303
295
  debounceOnChange(
304
296
  elements.map(
@@ -312,7 +304,6 @@ function PaletteEditListView< T extends Color | Gradient >( {
312
304
  );
313
305
  } }
314
306
  onRemove={ () => {
315
- setEditingElement( null );
316
307
  const newElements = elements.filter(
317
308
  ( _currentElement, currentIndex ) => {
318
309
  if ( currentIndex === index ) {
@@ -324,12 +315,7 @@ function PaletteEditListView< T extends Color | Gradient >( {
324
315
  onChange(
325
316
  newElements.length ? newElements : undefined
326
317
  );
327
- } }
328
- isEditing={ index === editingElement }
329
- onStopEditing={ () => {
330
- if ( index === editingElement ) {
331
- setEditingElement( null );
332
- }
318
+ addColorRef.current?.focus();
333
319
  } }
334
320
  slugPrefix={ slugPrefix }
335
321
  popoverProps={ popoverProps }
@@ -408,6 +394,8 @@ export function PaletteEdit( {
408
394
  [ isGradient, elements ]
409
395
  );
410
396
 
397
+ const addColorRef = useRef< HTMLButtonElement | null >( null );
398
+
411
399
  return (
412
400
  <PaletteEditStyles>
413
401
  <HStack>
@@ -428,6 +416,7 @@ export function PaletteEdit( {
428
416
  ) }
429
417
  { ! canOnlyChangeValues && (
430
418
  <Button
419
+ ref={ addColorRef }
431
420
  size="small"
432
421
  isPressed={ isAdding }
433
422
  icon={ plus }
@@ -551,11 +540,10 @@ export function PaletteEdit( {
551
540
  elements={ elements }
552
541
  // @ts-expect-error TODO: Don't know how to resolve
553
542
  onChange={ onChange }
554
- editingElement={ editingElement }
555
- setEditingElement={ setEditingElement }
556
543
  slugPrefix={ slugPrefix }
557
544
  isGradient={ isGradient }
558
545
  popoverProps={ popoverProps }
546
+ addColorRef={ addColorRef }
559
547
  />
560
548
  ) }
561
549
  { ! isEditing && editingElement !== null && (
@@ -16,6 +16,7 @@ async function clearInput( input: HTMLInputElement ) {
16
16
  await click( input );
17
17
 
18
18
  // Press backspace as many times as the input's current value
19
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
19
20
  for ( const _ of Array( input.value.length ) ) {
20
21
  await press.Backspace();
21
22
  }
@@ -306,7 +307,7 @@ describe( 'PaletteEdit', () => {
306
307
  await click( screen.getByRole( 'button', { name: 'Edit: Primary' } ) );
307
308
  await click(
308
309
  screen.getByRole( 'button', {
309
- name: 'Remove color',
310
+ name: 'Remove color: Primary',
310
311
  } )
311
312
  );
312
313
 
@@ -337,9 +338,7 @@ describe( 'PaletteEdit', () => {
337
338
  } )
338
339
  );
339
340
  await click( screen.getByRole( 'button', { name: 'Edit: Primary' } ) );
340
- const nameInput = screen.getByRole( 'textbox', {
341
- name: 'Color name',
342
- } );
341
+ const nameInput = screen.getByDisplayValue( 'Primary' );
343
342
 
344
343
  await clearInput( nameInput as HTMLInputElement );
345
344