@wordpress/components 28.9.0 → 28.10.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 (689) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/build/alignment-matrix-control/icon.js.map +1 -1
  3. package/build/alignment-matrix-control/types.js.map +1 -1
  4. package/build/alignment-matrix-control/utils.js.map +1 -1
  5. package/build/angle-picker-control/angle-circle.js.map +1 -1
  6. package/build/autocomplete/autocompleter-ui.js +3 -3
  7. package/build/autocomplete/autocompleter-ui.js.map +1 -1
  8. package/build/autocomplete/get-default-use-items.js.map +1 -1
  9. package/build/autocomplete/index.js +1 -0
  10. package/build/autocomplete/index.js.map +1 -1
  11. package/build/base-control/hooks.js.map +1 -1
  12. package/build/base-control/index.js.map +1 -1
  13. package/build/border-box-control/border-box-control/hook.js.map +1 -1
  14. package/build/border-box-control/styles.js.map +1 -1
  15. package/build/border-box-control/utils.js.map +1 -1
  16. package/build/border-control/border-control/hook.js.map +1 -1
  17. package/build/border-control/styles.js.map +1 -1
  18. package/build/box-control/axial-input-controls.js.map +1 -1
  19. package/build/box-control/icon.js.map +1 -1
  20. package/build/box-control/index.js.map +1 -1
  21. package/build/box-control/input-controls.js.map +1 -1
  22. package/build/button/index.native.js +1 -1
  23. package/build/button/index.native.js.map +1 -1
  24. package/build/card/card/component.js +1 -1
  25. package/build/card/card/component.js.map +1 -1
  26. package/build/card/styles.js.map +1 -1
  27. package/build/color-palette/index.js.map +1 -1
  28. package/build/color-palette/index.native.js +2 -1
  29. package/build/color-palette/index.native.js.map +1 -1
  30. package/build/color-picker/styles.js.map +1 -1
  31. package/build/combobox-control/index.js +1 -1
  32. package/build/combobox-control/index.js.map +1 -1
  33. package/build/composite/legacy/index.js.map +1 -1
  34. package/build/context/context-connect.js +1 -0
  35. package/build/context/context-connect.js.map +1 -1
  36. package/build/context/context-system-provider.js +1 -1
  37. package/build/context/context-system-provider.js.map +1 -1
  38. package/build/context/get-styled-class-name-from-key.js.map +1 -1
  39. package/build/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
  40. package/build/custom-gradient-picker/index.js.map +1 -1
  41. package/build/custom-gradient-picker/serializer.js.map +1 -1
  42. package/build/custom-gradient-picker/utils.js.map +1 -1
  43. package/build/custom-select-control-v2/styles.js.map +1 -1
  44. package/build/dashicon/index.js.map +1 -1
  45. package/build/date-time/date/styles.js.map +1 -1
  46. package/build/date-time/time/timezone.js.map +1 -1
  47. package/build/draggable/index.js.map +1 -1
  48. package/build/drop-zone/index.js +1 -2
  49. package/build/drop-zone/index.js.map +1 -1
  50. package/build/dropdown-menu-v2/styles.js.map +1 -1
  51. package/build/duotone-picker/color-list-picker/index.js.map +1 -1
  52. package/build/duotone-picker/utils.js.map +1 -1
  53. package/build/elevation/hook.js.map +1 -1
  54. package/build/external-link/index.js +20 -23
  55. package/build/external-link/index.js.map +1 -1
  56. package/build/focal-point-picker/index.js.map +1 -1
  57. package/build/focal-point-picker/index.native.js.map +1 -1
  58. package/build/focal-point-picker/styles/focal-point-style.js.map +1 -1
  59. package/build/font-size-picker/index.js.map +1 -1
  60. package/build/form-token-field/index.js +2 -1
  61. package/build/form-token-field/index.js.map +1 -1
  62. package/build/form-token-field/suggestions-list.js.map +1 -1
  63. package/build/form-token-field/token-input.js.map +1 -1
  64. package/build/form-token-field/token.js +1 -1
  65. package/build/form-token-field/token.js.map +1 -1
  66. package/build/gradient-picker/index.js.map +1 -1
  67. package/build/grid/hook.js.map +1 -1
  68. package/build/guide/page-control.js +1 -1
  69. package/build/guide/page-control.js.map +1 -1
  70. package/build/h-stack/hook.js.map +1 -1
  71. package/build/heading/hook.js.map +1 -1
  72. package/build/input-control/index.js.map +1 -1
  73. package/build/input-control/input-base.js.map +1 -1
  74. package/build/input-control/styles/input-control-styles.js.map +1 -1
  75. package/build/item-group/styles.js.map +1 -1
  76. package/build/menu-group/index.js.map +1 -1
  77. package/build/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js.map +1 -1
  78. package/build/mobile/bottom-sheet/cell.native.js +4 -4
  79. package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
  80. package/build/mobile/bottom-sheet/index.native.js.map +1 -1
  81. package/build/mobile/bottom-sheet/range-cell.native.js +1 -1
  82. package/build/mobile/bottom-sheet/range-cell.native.js.map +1 -1
  83. package/build/mobile/bottom-sheet/range-text-input.native.js.map +1 -1
  84. package/build/mobile/bottom-sheet/stepper-cell/index.native.js +1 -1
  85. package/build/mobile/bottom-sheet/stepper-cell/index.native.js.map +1 -1
  86. package/build/mobile/bottom-sheet/switch-cell.native.js +4 -4
  87. package/build/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  88. package/build/mobile/cycle-select-control/index.native.js.map +1 -1
  89. package/build/mobile/gradient/index.native.js.map +1 -1
  90. package/build/mobile/image/index.native.js.map +1 -1
  91. package/build/mobile/link-picker/index.native.js +1 -1
  92. package/build/mobile/link-picker/index.native.js.map +1 -1
  93. package/build/mobile/link-picker/link-picker-results.native.js.map +1 -1
  94. package/build/mobile/picker/index.android.js.map +1 -1
  95. package/build/mobile/segmented-control/index.native.js.map +1 -1
  96. package/build/mobile/utils/get-px-from-css-unit.native.js.map +1 -1
  97. package/build/mobile/utils/use-unit-converter-to-mobile.native.js.map +1 -1
  98. package/build/modal/aria-helper.js +2 -1
  99. package/build/modal/aria-helper.js.map +1 -1
  100. package/build/modal/index.js +2 -1
  101. package/build/modal/index.js.map +1 -1
  102. package/build/modal/use-modal-exit-animation.js.map +1 -1
  103. package/build/navigation/group/index.js.map +1 -1
  104. package/build/navigation/item/base.js.map +1 -1
  105. package/build/navigation/menu/index.js.map +1 -1
  106. package/build/navigation/menu/menu-title-search.js +2 -2
  107. package/build/navigation/menu/menu-title-search.js.map +1 -1
  108. package/build/navigation/menu/menu-title.js.map +1 -1
  109. package/build/navigation/styles/navigation-styles.js.map +1 -1
  110. package/build/navigator/navigator/component.js.map +1 -1
  111. package/build/navigator/navigator-button/hook.js.map +1 -1
  112. package/build/number-control/styles/number-control-styles.js.map +1 -1
  113. package/build/palette-edit/index.js +25 -2
  114. package/build/palette-edit/index.js.map +1 -1
  115. package/build/popover/index.js +1 -1
  116. package/build/popover/index.js.map +1 -1
  117. package/build/popover/overlay-middlewares.js.map +1 -1
  118. package/build/popover/utils.js.map +1 -1
  119. package/build/progress-bar/index.js.map +1 -1
  120. package/build/progress-bar/styles.js.map +1 -1
  121. package/build/query-controls/index.js.map +1 -1
  122. package/build/query-controls/index.native.js.map +1 -1
  123. package/build/radio-control/index.js.map +1 -1
  124. package/build/radio-control/index.native.js.map +1 -1
  125. package/build/range-control/index.js.map +1 -1
  126. package/build/range-control/index.native.js.map +1 -1
  127. package/build/range-control/rail.js.map +1 -1
  128. package/build/range-control/styles/range-control-styles.js +32 -32
  129. package/build/range-control/styles/range-control-styles.js.map +1 -1
  130. package/build/range-control/tooltip.js +1 -1
  131. package/build/range-control/tooltip.js.map +1 -1
  132. package/build/range-control/utils.js.map +1 -1
  133. package/build/resizable-box/resize-tooltip/label.js.map +1 -1
  134. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  135. package/build/responsive-wrapper/index.js.map +1 -1
  136. package/build/sandbox/index.js.map +1 -1
  137. package/build/sandbox/index.native.js.map +1 -1
  138. package/build/search-control/index.js +6 -0
  139. package/build/search-control/index.js.map +1 -1
  140. package/build/search-control/index.native.js.map +1 -1
  141. package/build/search-control/types.js.map +1 -1
  142. package/build/select-control/index.js.map +1 -1
  143. package/build/select-control/index.native.js.map +1 -1
  144. package/build/slot-fill/index.js.map +1 -1
  145. package/build/spinner/styles.js.map +1 -1
  146. package/build/style-provider/index.js +1 -0
  147. package/build/style-provider/index.js.map +1 -1
  148. package/build/surface/hook.js.map +1 -1
  149. package/build/surface/styles.js.map +1 -1
  150. package/build/tab-panel/index.js.map +1 -1
  151. package/build/tabs/index.js.map +1 -1
  152. package/build/tabs/styles.js +30 -12
  153. package/build/tabs/styles.js.map +1 -1
  154. package/build/tabs/tab.js +7 -2
  155. package/build/tabs/tab.js.map +1 -1
  156. package/build/tabs/tablist.js +47 -48
  157. package/build/tabs/tablist.js.map +1 -1
  158. package/build/tabs/tabpanel.js.map +1 -1
  159. package/build/text/get-line-height.js.map +1 -1
  160. package/build/text/styles/text-mixins.native.js.map +1 -1
  161. package/build/text/utils.js.map +1 -1
  162. package/build/text-control/index.native.js.map +1 -1
  163. package/build/text-highlight/index.js.map +1 -1
  164. package/build/textarea-control/index.js.map +1 -1
  165. package/build/theme/color-algorithms.js.map +1 -1
  166. package/build/theme/styles.js.map +1 -1
  167. package/build/toggle-control/index.js.map +1 -1
  168. package/build/toggle-control/index.native.js.map +1 -1
  169. package/build/toggle-group-control/toggle-group-control/as-radio-group.js +9 -1
  170. package/build/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  171. package/build/toggle-group-control/toggle-group-control/component.js +2 -60
  172. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  173. package/build/toggle-group-control/toggle-group-control-option-base/component.js +10 -10
  174. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  175. package/build/toggle-group-control/types.js.map +1 -1
  176. package/build/toolbar/toolbar/index.js.map +1 -1
  177. package/build/tools-panel/styles.js.map +1 -1
  178. package/build/tooltip/index.js +5 -1
  179. package/build/tooltip/index.js.map +1 -1
  180. package/build/unit-control/index.js.map +1 -1
  181. package/build/unit-control/utils.js.map +1 -1
  182. package/build/utils/breakpoint.js.map +1 -1
  183. package/build/utils/colors-values.js.map +1 -1
  184. package/build/utils/config-values.js.map +1 -1
  185. package/build/utils/font-size.js.map +1 -1
  186. package/build/utils/hooks/use-animated-offset-rect.js +80 -0
  187. package/build/utils/hooks/use-animated-offset-rect.js.map +1 -0
  188. package/build/utils/hooks/use-cx.js.map +1 -1
  189. package/build/utils/math.js +2 -2
  190. package/build/utils/math.js.map +1 -1
  191. package/build/utils/space.js.map +1 -1
  192. package/build/utils/unit-values.js.map +1 -1
  193. package/build/utils/use-responsive-value.js.map +1 -1
  194. package/build-module/alignment-matrix-control/cell.js +1 -2
  195. package/build-module/alignment-matrix-control/cell.js.map +1 -1
  196. package/build-module/alignment-matrix-control/icon.js.map +1 -1
  197. package/build-module/alignment-matrix-control/types.js.map +1 -1
  198. package/build-module/alignment-matrix-control/utils.js.map +1 -1
  199. package/build-module/angle-picker-control/angle-circle.js.map +1 -1
  200. package/build-module/angle-picker-control/index.js +1 -2
  201. package/build-module/angle-picker-control/index.js.map +1 -1
  202. package/build-module/autocomplete/autocompleter-ui.js +4 -6
  203. package/build-module/autocomplete/autocompleter-ui.js.map +1 -1
  204. package/build-module/autocomplete/autocompleter-ui.native.js +1 -2
  205. package/build-module/autocomplete/autocompleter-ui.native.js.map +1 -1
  206. package/build-module/autocomplete/get-default-use-items.js.map +1 -1
  207. package/build-module/autocomplete/index.js +2 -3
  208. package/build-module/autocomplete/index.js.map +1 -1
  209. package/build-module/base-control/hooks.js.map +1 -1
  210. package/build-module/base-control/index.js +1 -2
  211. package/build-module/base-control/index.js.map +1 -1
  212. package/build-module/base-control/index.native.js +1 -2
  213. package/build-module/base-control/index.native.js.map +1 -1
  214. package/build-module/border-box-control/border-box-control/component.js +1 -2
  215. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  216. package/build-module/border-box-control/border-box-control/hook.js.map +1 -1
  217. package/build-module/border-box-control/border-box-control-split-controls/component.js +1 -2
  218. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  219. package/build-module/border-box-control/styles.js.map +1 -1
  220. package/build-module/border-box-control/utils.js.map +1 -1
  221. package/build-module/border-control/border-control/component.js +1 -2
  222. package/build-module/border-control/border-control/component.js.map +1 -1
  223. package/build-module/border-control/border-control/hook.js.map +1 -1
  224. package/build-module/border-control/border-control-dropdown/component.js +1 -3
  225. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  226. package/build-module/border-control/styles.js.map +1 -1
  227. package/build-module/box-control/all-input-control.js +1 -3
  228. package/build-module/box-control/all-input-control.js.map +1 -1
  229. package/build-module/box-control/axial-input-controls.js +1 -3
  230. package/build-module/box-control/axial-input-controls.js.map +1 -1
  231. package/build-module/box-control/icon.js +1 -2
  232. package/build-module/box-control/icon.js.map +1 -1
  233. package/build-module/box-control/index.js +1 -2
  234. package/build-module/box-control/index.js.map +1 -1
  235. package/build-module/box-control/input-controls.js +1 -3
  236. package/build-module/box-control/input-controls.js.map +1 -1
  237. package/build-module/button/index.js +1 -3
  238. package/build-module/button/index.js.map +1 -1
  239. package/build-module/button/index.native.js +2 -3
  240. package/build-module/button/index.native.js.map +1 -1
  241. package/build-module/card/card/component.js +2 -3
  242. package/build-module/card/card/component.js.map +1 -1
  243. package/build-module/card/styles.js.map +1 -1
  244. package/build-module/checkbox-control/index.js +1 -2
  245. package/build-module/checkbox-control/index.js.map +1 -1
  246. package/build-module/circular-option-picker/circular-option-picker-option.js +1 -2
  247. package/build-module/circular-option-picker/circular-option-picker-option.js.map +1 -1
  248. package/build-module/circular-option-picker/circular-option-picker.js +1 -2
  249. package/build-module/circular-option-picker/circular-option-picker.js.map +1 -1
  250. package/build-module/color-indicator/index.native.js +1 -2
  251. package/build-module/color-indicator/index.native.js.map +1 -1
  252. package/build-module/color-palette/index.js +1 -2
  253. package/build-module/color-palette/index.js.map +1 -1
  254. package/build-module/color-palette/index.native.js +3 -4
  255. package/build-module/color-palette/index.native.js.map +1 -1
  256. package/build-module/color-picker/component.js +1 -2
  257. package/build-module/color-picker/component.js.map +1 -1
  258. package/build-module/color-picker/hsl-input.js +1 -3
  259. package/build-module/color-picker/hsl-input.js.map +1 -1
  260. package/build-module/color-picker/hsv-color-picker.native.js +1 -2
  261. package/build-module/color-picker/hsv-color-picker.native.js.map +1 -1
  262. package/build-module/color-picker/hue-picker.native.js +1 -2
  263. package/build-module/color-picker/hue-picker.native.js.map +1 -1
  264. package/build-module/color-picker/index.native.js +1 -3
  265. package/build-module/color-picker/index.native.js.map +1 -1
  266. package/build-module/color-picker/input-with-slider.js +1 -2
  267. package/build-module/color-picker/input-with-slider.js.map +1 -1
  268. package/build-module/color-picker/rgb-input.js +1 -3
  269. package/build-module/color-picker/rgb-input.js.map +1 -1
  270. package/build-module/color-picker/saturation-picker.native.js +1 -2
  271. package/build-module/color-picker/saturation-picker.native.js.map +1 -1
  272. package/build-module/color-picker/styles.js.map +1 -1
  273. package/build-module/combobox-control/index.js +2 -3
  274. package/build-module/combobox-control/index.js.map +1 -1
  275. package/build-module/composite/legacy/index.js.map +1 -1
  276. package/build-module/confirm-dialog/component.js +1 -3
  277. package/build-module/confirm-dialog/component.js.map +1 -1
  278. package/build-module/context/context-connect.js +1 -0
  279. package/build-module/context/context-connect.js.map +1 -1
  280. package/build-module/context/context-system-provider.js +1 -1
  281. package/build-module/context/context-system-provider.js.map +1 -1
  282. package/build-module/context/get-styled-class-name-from-key.js.map +1 -1
  283. package/build-module/custom-gradient-picker/gradient-bar/control-points.js +1 -3
  284. package/build-module/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
  285. package/build-module/custom-gradient-picker/gradient-bar/index.js +1 -2
  286. package/build-module/custom-gradient-picker/gradient-bar/index.js.map +1 -1
  287. package/build-module/custom-gradient-picker/index.js +1 -2
  288. package/build-module/custom-gradient-picker/index.js.map +1 -1
  289. package/build-module/custom-gradient-picker/index.native.js +1 -3
  290. package/build-module/custom-gradient-picker/index.native.js.map +1 -1
  291. package/build-module/custom-gradient-picker/serializer.js.map +1 -1
  292. package/build-module/custom-gradient-picker/utils.js.map +1 -1
  293. package/build-module/custom-select-control/index.js +1 -3
  294. package/build-module/custom-select-control/index.js.map +1 -1
  295. package/build-module/custom-select-control-v2/custom-select.js +1 -2
  296. package/build-module/custom-select-control-v2/custom-select.js.map +1 -1
  297. package/build-module/custom-select-control-v2/item.js +1 -2
  298. package/build-module/custom-select-control-v2/item.js.map +1 -1
  299. package/build-module/custom-select-control-v2/styles.js.map +1 -1
  300. package/build-module/dashicon/index.js.map +1 -1
  301. package/build-module/date-time/date/index.js +1 -2
  302. package/build-module/date-time/date/index.js.map +1 -1
  303. package/build-module/date-time/date/styles.js.map +1 -1
  304. package/build-module/date-time/date-time/index.js +1 -3
  305. package/build-module/date-time/date-time/index.js.map +1 -1
  306. package/build-module/date-time/time/index.js +1 -2
  307. package/build-module/date-time/time/index.js.map +1 -1
  308. package/build-module/date-time/time/time-input/index.js +1 -2
  309. package/build-module/date-time/time/time-input/index.js.map +1 -1
  310. package/build-module/date-time/time/timezone.js.map +1 -1
  311. package/build-module/dimension-control/index.js +1 -3
  312. package/build-module/dimension-control/index.js.map +1 -1
  313. package/build-module/draggable/index.js +1 -3
  314. package/build-module/draggable/index.js.map +1 -1
  315. package/build-module/drop-zone/index.js +2 -4
  316. package/build-module/drop-zone/index.js.map +1 -1
  317. package/build-module/dropdown/index.js +1 -2
  318. package/build-module/dropdown/index.js.map +1 -1
  319. package/build-module/dropdown/index.native.js +1 -2
  320. package/build-module/dropdown/index.native.js.map +1 -1
  321. package/build-module/dropdown-menu/index.js +1 -2
  322. package/build-module/dropdown-menu/index.js.map +1 -1
  323. package/build-module/dropdown-menu/index.native.js +1 -2
  324. package/build-module/dropdown-menu/index.native.js.map +1 -1
  325. package/build-module/dropdown-menu-v2/checkbox-item.js +1 -2
  326. package/build-module/dropdown-menu-v2/checkbox-item.js.map +1 -1
  327. package/build-module/dropdown-menu-v2/index.js +1 -3
  328. package/build-module/dropdown-menu-v2/index.js.map +1 -1
  329. package/build-module/dropdown-menu-v2/item.js +1 -2
  330. package/build-module/dropdown-menu-v2/item.js.map +1 -1
  331. package/build-module/dropdown-menu-v2/radio-item.js +1 -2
  332. package/build-module/dropdown-menu-v2/radio-item.js.map +1 -1
  333. package/build-module/dropdown-menu-v2/styles.js.map +1 -1
  334. package/build-module/duotone-picker/color-list-picker/index.js +1 -3
  335. package/build-module/duotone-picker/color-list-picker/index.js.map +1 -1
  336. package/build-module/duotone-picker/duotone-picker.js +1 -2
  337. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  338. package/build-module/duotone-picker/utils.js.map +1 -1
  339. package/build-module/elevation/hook.js.map +1 -1
  340. package/build-module/external-link/index.js +21 -25
  341. package/build-module/external-link/index.js.map +1 -1
  342. package/build-module/external-link/index.native.js +1 -2
  343. package/build-module/external-link/index.native.js.map +1 -1
  344. package/build-module/focal-point-picker/controls.js +1 -2
  345. package/build-module/focal-point-picker/controls.js.map +1 -1
  346. package/build-module/focal-point-picker/focal-point.native.js +1 -2
  347. package/build-module/focal-point-picker/focal-point.native.js.map +1 -1
  348. package/build-module/focal-point-picker/grid.js +1 -2
  349. package/build-module/focal-point-picker/grid.js.map +1 -1
  350. package/build-module/focal-point-picker/index.js +1 -2
  351. package/build-module/focal-point-picker/index.js.map +1 -1
  352. package/build-module/focal-point-picker/index.native.js +1 -2
  353. package/build-module/focal-point-picker/index.native.js.map +1 -1
  354. package/build-module/focal-point-picker/styles/focal-point-style.js.map +1 -1
  355. package/build-module/focal-point-picker/tooltip/index.native.js +1 -2
  356. package/build-module/focal-point-picker/tooltip/index.native.js.map +1 -1
  357. package/build-module/font-size-picker/index.js +1 -2
  358. package/build-module/font-size-picker/index.js.map +1 -1
  359. package/build-module/font-size-picker/index.native.js +1 -3
  360. package/build-module/font-size-picker/index.native.js.map +1 -1
  361. package/build-module/form-file-upload/index.js +1 -2
  362. package/build-module/form-file-upload/index.js.map +1 -1
  363. package/build-module/form-toggle/index.js +1 -2
  364. package/build-module/form-toggle/index.js.map +1 -1
  365. package/build-module/form-token-field/index.js +3 -3
  366. package/build-module/form-token-field/index.js.map +1 -1
  367. package/build-module/form-token-field/suggestions-list.js +1 -2
  368. package/build-module/form-token-field/suggestions-list.js.map +1 -1
  369. package/build-module/form-token-field/token-input.js.map +1 -1
  370. package/build-module/form-token-field/token.js +2 -3
  371. package/build-module/form-token-field/token.js.map +1 -1
  372. package/build-module/gradient-picker/index.js +1 -2
  373. package/build-module/gradient-picker/index.js.map +1 -1
  374. package/build-module/grid/hook.js.map +1 -1
  375. package/build-module/guide/index.js +1 -2
  376. package/build-module/guide/index.js.map +1 -1
  377. package/build-module/guide/page-control.js +1 -1
  378. package/build-module/guide/page-control.js.map +1 -1
  379. package/build-module/h-stack/hook.js.map +1 -1
  380. package/build-module/heading/hook.js.map +1 -1
  381. package/build-module/higher-order/with-fallback-styles/index.js +3 -4
  382. package/build-module/higher-order/with-fallback-styles/index.js.map +1 -1
  383. package/build-module/input-control/index.js.map +1 -1
  384. package/build-module/input-control/input-base.js +1 -2
  385. package/build-module/input-control/input-base.js.map +1 -1
  386. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  387. package/build-module/item-group/styles.js.map +1 -1
  388. package/build-module/keyboard-shortcuts/index.js +1 -3
  389. package/build-module/keyboard-shortcuts/index.js.map +1 -1
  390. package/build-module/menu-group/index.js +1 -2
  391. package/build-module/menu-group/index.js.map +1 -1
  392. package/build-module/menu-item/index.js +1 -2
  393. package/build-module/menu-item/index.js.map +1 -1
  394. package/build-module/menu-items-choice/index.js +1 -2
  395. package/build-module/menu-items-choice/index.js.map +1 -1
  396. package/build-module/mobile/badge/index.native.js +1 -3
  397. package/build-module/mobile/badge/index.native.js.map +1 -1
  398. package/build-module/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js +1 -2
  399. package/build-module/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js.map +1 -1
  400. package/build-module/mobile/bottom-sheet/cell.native.js +5 -6
  401. package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
  402. package/build-module/mobile/bottom-sheet/color-cell.native.js +1 -2
  403. package/build-module/mobile/bottom-sheet/color-cell.native.js.map +1 -1
  404. package/build-module/mobile/bottom-sheet/index.native.js +1 -3
  405. package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
  406. package/build-module/mobile/bottom-sheet/link-suggestion-item-cell.native.js +1 -2
  407. package/build-module/mobile/bottom-sheet/link-suggestion-item-cell.native.js.map +1 -1
  408. package/build-module/mobile/bottom-sheet/nav-bar/back-button.native.js +1 -2
  409. package/build-module/mobile/bottom-sheet/nav-bar/back-button.native.js.map +1 -1
  410. package/build-module/mobile/bottom-sheet/range-cell.native.js +2 -3
  411. package/build-module/mobile/bottom-sheet/range-cell.native.js.map +1 -1
  412. package/build-module/mobile/bottom-sheet/range-text-input.native.js +1 -2
  413. package/build-module/mobile/bottom-sheet/range-text-input.native.js.map +1 -1
  414. package/build-module/mobile/bottom-sheet/stepper-cell/index.native.js +2 -3
  415. package/build-module/mobile/bottom-sheet/stepper-cell/index.native.js.map +1 -1
  416. package/build-module/mobile/bottom-sheet/stepper-cell/stepper.android.js +1 -2
  417. package/build-module/mobile/bottom-sheet/stepper-cell/stepper.android.js.map +1 -1
  418. package/build-module/mobile/bottom-sheet/stepper-cell/stepper.ios.js +1 -2
  419. package/build-module/mobile/bottom-sheet/stepper-cell/stepper.ios.js.map +1 -1
  420. package/build-module/mobile/bottom-sheet/sub-sheet/index.native.js +1 -3
  421. package/build-module/mobile/bottom-sheet/sub-sheet/index.native.js.map +1 -1
  422. package/build-module/mobile/bottom-sheet/switch-cell.native.js +4 -4
  423. package/build-module/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  424. package/build-module/mobile/bottom-sheet-select-control/index.native.js +1 -3
  425. package/build-module/mobile/bottom-sheet-select-control/index.native.js.map +1 -1
  426. package/build-module/mobile/bottom-sheet-text-control/index.native.js +1 -3
  427. package/build-module/mobile/bottom-sheet-text-control/index.native.js.map +1 -1
  428. package/build-module/mobile/color-settings/gradient-picker-screen.native.js +1 -2
  429. package/build-module/mobile/color-settings/gradient-picker-screen.native.js.map +1 -1
  430. package/build-module/mobile/color-settings/index.native.js +1 -2
  431. package/build-module/mobile/color-settings/index.native.js.map +1 -1
  432. package/build-module/mobile/color-settings/palette.screen.native.js +1 -3
  433. package/build-module/mobile/color-settings/palette.screen.native.js.map +1 -1
  434. package/build-module/mobile/cycle-select-control/index.native.js.map +1 -1
  435. package/build-module/mobile/focal-point-settings-panel/index.native.js +1 -2
  436. package/build-module/mobile/focal-point-settings-panel/index.native.js.map +1 -1
  437. package/build-module/mobile/gradient/index.native.js +1 -2
  438. package/build-module/mobile/gradient/index.native.js.map +1 -1
  439. package/build-module/mobile/html-text-input/index.native.js +1 -2
  440. package/build-module/mobile/html-text-input/index.native.js.map +1 -1
  441. package/build-module/mobile/image/icon-retry.native.js +1 -2
  442. package/build-module/mobile/image/icon-retry.native.js.map +1 -1
  443. package/build-module/mobile/image/image-editing-button.native.js +1 -2
  444. package/build-module/mobile/image/image-editing-button.native.js.map +1 -1
  445. package/build-module/mobile/image/index.native.js +1 -3
  446. package/build-module/mobile/image/index.native.js.map +1 -1
  447. package/build-module/mobile/keyboard-avoiding-view/index.ios.js +1 -2
  448. package/build-module/mobile/keyboard-avoiding-view/index.ios.js.map +1 -1
  449. package/build-module/mobile/link-picker/index.native.js +2 -3
  450. package/build-module/mobile/link-picker/index.native.js.map +1 -1
  451. package/build-module/mobile/link-picker/link-picker-results.native.js.map +1 -1
  452. package/build-module/mobile/link-settings/index.native.js +1 -3
  453. package/build-module/mobile/link-settings/index.native.js.map +1 -1
  454. package/build-module/mobile/link-settings/link-settings-navigation.native.js +1 -2
  455. package/build-module/mobile/link-settings/link-settings-navigation.native.js.map +1 -1
  456. package/build-module/mobile/picker/index.android.js +1 -2
  457. package/build-module/mobile/picker/index.android.js.map +1 -1
  458. package/build-module/mobile/segmented-control/index.native.js +1 -2
  459. package/build-module/mobile/segmented-control/index.native.js.map +1 -1
  460. package/build-module/mobile/utils/get-px-from-css-unit.native.js.map +1 -1
  461. package/build-module/mobile/utils/use-unit-converter-to-mobile.native.js.map +1 -1
  462. package/build-module/modal/aria-helper.js +2 -1
  463. package/build-module/modal/aria-helper.js.map +1 -1
  464. package/build-module/modal/index.js +3 -4
  465. package/build-module/modal/index.js.map +1 -1
  466. package/build-module/modal/use-modal-exit-animation.js.map +1 -1
  467. package/build-module/navigation/back-button/index.js +1 -2
  468. package/build-module/navigation/back-button/index.js.map +1 -1
  469. package/build-module/navigation/group/index.js +1 -2
  470. package/build-module/navigation/group/index.js.map +1 -1
  471. package/build-module/navigation/item/base-content.js +1 -3
  472. package/build-module/navigation/item/base-content.js.map +1 -1
  473. package/build-module/navigation/item/base.js.map +1 -1
  474. package/build-module/navigation/item/index.js +1 -2
  475. package/build-module/navigation/item/index.js.map +1 -1
  476. package/build-module/navigation/menu/index.js +1 -2
  477. package/build-module/navigation/menu/index.js.map +1 -1
  478. package/build-module/navigation/menu/menu-title-search.js +2 -2
  479. package/build-module/navigation/menu/menu-title-search.js.map +1 -1
  480. package/build-module/navigation/menu/menu-title.js +1 -2
  481. package/build-module/navigation/menu/menu-title.js.map +1 -1
  482. package/build-module/navigation/menu/search-no-results-found.js +1 -2
  483. package/build-module/navigation/menu/search-no-results-found.js.map +1 -1
  484. package/build-module/navigation/styles/navigation-styles.js.map +1 -1
  485. package/build-module/navigator/navigator/component.js.map +1 -1
  486. package/build-module/navigator/navigator-button/hook.js.map +1 -1
  487. package/build-module/notice/index.js +1 -2
  488. package/build-module/notice/index.js.map +1 -1
  489. package/build-module/notice/index.native.js +1 -3
  490. package/build-module/notice/index.native.js.map +1 -1
  491. package/build-module/number-control/index.js +1 -3
  492. package/build-module/number-control/index.js.map +1 -1
  493. package/build-module/number-control/styles/number-control-styles.js.map +1 -1
  494. package/build-module/palette-edit/index.js +25 -5
  495. package/build-module/palette-edit/index.js.map +1 -1
  496. package/build-module/panel/actions.native.js +1 -2
  497. package/build-module/panel/actions.native.js.map +1 -1
  498. package/build-module/panel/body.js +1 -2
  499. package/build-module/panel/body.js.map +1 -1
  500. package/build-module/panel/body.native.js +1 -2
  501. package/build-module/panel/body.native.js.map +1 -1
  502. package/build-module/panel/header.js +1 -2
  503. package/build-module/panel/header.js.map +1 -1
  504. package/build-module/panel/index.js +1 -2
  505. package/build-module/panel/index.js.map +1 -1
  506. package/build-module/placeholder/index.js +1 -2
  507. package/build-module/placeholder/index.js.map +1 -1
  508. package/build-module/popover/index.js +2 -4
  509. package/build-module/popover/index.js.map +1 -1
  510. package/build-module/popover/overlay-middlewares.js.map +1 -1
  511. package/build-module/popover/utils.js.map +1 -1
  512. package/build-module/progress-bar/index.js +1 -2
  513. package/build-module/progress-bar/index.js.map +1 -1
  514. package/build-module/progress-bar/styles.js.map +1 -1
  515. package/build-module/query-controls/index.js.map +1 -1
  516. package/build-module/query-controls/index.native.js +1 -3
  517. package/build-module/query-controls/index.native.js.map +1 -1
  518. package/build-module/radio-control/index.js +1 -2
  519. package/build-module/radio-control/index.js.map +1 -1
  520. package/build-module/radio-control/index.native.js +1 -2
  521. package/build-module/radio-control/index.native.js.map +1 -1
  522. package/build-module/range-control/index.js +1 -2
  523. package/build-module/range-control/index.js.map +1 -1
  524. package/build-module/range-control/index.native.js.map +1 -1
  525. package/build-module/range-control/mark.js +1 -3
  526. package/build-module/range-control/mark.js.map +1 -1
  527. package/build-module/range-control/rail.js +1 -3
  528. package/build-module/range-control/rail.js.map +1 -1
  529. package/build-module/range-control/styles/range-control-styles.js +32 -32
  530. package/build-module/range-control/styles/range-control-styles.js.map +1 -1
  531. package/build-module/range-control/tooltip.js +1 -1
  532. package/build-module/range-control/tooltip.js.map +1 -1
  533. package/build-module/range-control/utils.js.map +1 -1
  534. package/build-module/resizable-box/index.js +1 -2
  535. package/build-module/resizable-box/index.js.map +1 -1
  536. package/build-module/resizable-box/resize-tooltip/index.js +1 -2
  537. package/build-module/resizable-box/resize-tooltip/index.js.map +1 -1
  538. package/build-module/resizable-box/resize-tooltip/label.js.map +1 -1
  539. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  540. package/build-module/responsive-wrapper/index.js.map +1 -1
  541. package/build-module/sandbox/index.js +1 -2
  542. package/build-module/sandbox/index.js.map +1 -1
  543. package/build-module/sandbox/index.native.js +1 -2
  544. package/build-module/sandbox/index.native.js.map +1 -1
  545. package/build-module/search-control/index.js +6 -0
  546. package/build-module/search-control/index.js.map +1 -1
  547. package/build-module/search-control/index.native.js +1 -2
  548. package/build-module/search-control/index.native.js.map +1 -1
  549. package/build-module/search-control/types.js.map +1 -1
  550. package/build-module/select-control/index.js.map +1 -1
  551. package/build-module/select-control/index.native.js.map +1 -1
  552. package/build-module/slot-fill/index.js +1 -3
  553. package/build-module/slot-fill/index.js.map +1 -1
  554. package/build-module/slot-fill/slot.js +1 -2
  555. package/build-module/slot-fill/slot.js.map +1 -1
  556. package/build-module/snackbar/index.js +1 -2
  557. package/build-module/snackbar/index.js.map +1 -1
  558. package/build-module/snackbar/list.js +1 -2
  559. package/build-module/snackbar/list.js.map +1 -1
  560. package/build-module/spinner/index.js +1 -2
  561. package/build-module/spinner/index.js.map +1 -1
  562. package/build-module/spinner/styles.js.map +1 -1
  563. package/build-module/style-provider/index.js +1 -0
  564. package/build-module/style-provider/index.js.map +1 -1
  565. package/build-module/surface/hook.js.map +1 -1
  566. package/build-module/surface/styles.js.map +1 -1
  567. package/build-module/tab-panel/index.js +1 -2
  568. package/build-module/tab-panel/index.js.map +1 -1
  569. package/build-module/tabs/index.js.map +1 -1
  570. package/build-module/tabs/styles.js +28 -6
  571. package/build-module/tabs/styles.js.map +1 -1
  572. package/build-module/tabs/tab.js +9 -4
  573. package/build-module/tabs/tab.js.map +1 -1
  574. package/build-module/tabs/tablist.js +47 -48
  575. package/build-module/tabs/tablist.js.map +1 -1
  576. package/build-module/tabs/tabpanel.js.map +1 -1
  577. package/build-module/text/get-line-height.js.map +1 -1
  578. package/build-module/text/styles/text-mixins.native.js.map +1 -1
  579. package/build-module/text/utils.js.map +1 -1
  580. package/build-module/text-control/index.native.js.map +1 -1
  581. package/build-module/text-highlight/index.js +1 -2
  582. package/build-module/text-highlight/index.js.map +1 -1
  583. package/build-module/textarea-control/index.js.map +1 -1
  584. package/build-module/theme/color-algorithms.js.map +1 -1
  585. package/build-module/theme/styles.js.map +1 -1
  586. package/build-module/tip/index.js +1 -2
  587. package/build-module/tip/index.js.map +1 -1
  588. package/build-module/toggle-control/index.js +1 -2
  589. package/build-module/toggle-control/index.js.map +1 -1
  590. package/build-module/toggle-control/index.native.js.map +1 -1
  591. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js +10 -2
  592. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  593. package/build-module/toggle-group-control/toggle-group-control/component.js +4 -65
  594. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  595. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +11 -12
  596. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  597. package/build-module/toggle-group-control/types.js.map +1 -1
  598. package/build-module/toolbar/toolbar/index.js.map +1 -1
  599. package/build-module/toolbar/toolbar-button/toolbar-button-container.native.js +2 -2
  600. package/build-module/toolbar/toolbar-button/toolbar-button-container.native.js.map +1 -1
  601. package/build-module/toolbar/toolbar-group/index.js +1 -2
  602. package/build-module/toolbar/toolbar-group/index.js.map +1 -1
  603. package/build-module/tools-panel/styles.js.map +1 -1
  604. package/build-module/tools-panel/tools-panel/component.js +1 -2
  605. package/build-module/tools-panel/tools-panel/component.js.map +1 -1
  606. package/build-module/tools-panel/tools-panel-header/component.js +1 -3
  607. package/build-module/tools-panel/tools-panel-header/component.js.map +1 -1
  608. package/build-module/tooltip/index.js +6 -3
  609. package/build-module/tooltip/index.js.map +1 -1
  610. package/build-module/tooltip/index.native.js +1 -3
  611. package/build-module/tooltip/index.native.js.map +1 -1
  612. package/build-module/tree-grid/cell.js +1 -2
  613. package/build-module/tree-grid/cell.js.map +1 -1
  614. package/build-module/unit-control/index.js.map +1 -1
  615. package/build-module/unit-control/index.native.js +1 -3
  616. package/build-module/unit-control/index.native.js.map +1 -1
  617. package/build-module/unit-control/utils.js.map +1 -1
  618. package/build-module/utils/breakpoint.js.map +1 -1
  619. package/build-module/utils/colors-values.js.map +1 -1
  620. package/build-module/utils/config-values.js.map +1 -1
  621. package/build-module/utils/font-size.js.map +1 -1
  622. package/build-module/utils/hooks/use-animated-offset-rect.js +74 -0
  623. package/build-module/utils/hooks/use-animated-offset-rect.js.map +1 -0
  624. package/build-module/utils/hooks/use-cx.js.map +1 -1
  625. package/build-module/utils/math.js +2 -2
  626. package/build-module/utils/math.js.map +1 -1
  627. package/build-module/utils/space.js.map +1 -1
  628. package/build-module/utils/unit-values.js.map +1 -1
  629. package/build-module/utils/use-responsive-value.js.map +1 -1
  630. package/build-style/style-rtl.css +8 -5
  631. package/build-style/style.css +8 -5
  632. package/build-types/alignment-matrix-control/types.d.ts +2 -0
  633. package/build-types/alignment-matrix-control/types.d.ts.map +1 -1
  634. package/build-types/drop-zone/index.d.ts.map +1 -1
  635. package/build-types/modal/aria-helper.d.ts.map +1 -1
  636. package/build-types/palette-edit/index.d.ts +3 -0
  637. package/build-types/palette-edit/index.d.ts.map +1 -1
  638. package/build-types/range-control/styles/range-control-styles.d.ts +1 -1
  639. package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
  640. package/build-types/search-control/index.d.ts.map +1 -1
  641. package/build-types/search-control/stories/index.story.d.ts +0 -8
  642. package/build-types/search-control/stories/index.story.d.ts.map +1 -1
  643. package/build-types/search-control/types.d.ts +3 -0
  644. package/build-types/search-control/types.d.ts.map +1 -1
  645. package/build-types/tabs/styles.d.ts +7 -0
  646. package/build-types/tabs/styles.d.ts.map +1 -1
  647. package/build-types/tabs/tab.d.ts.map +1 -1
  648. package/build-types/tabs/tablist.d.ts.map +1 -1
  649. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
  650. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  651. package/build-types/toggle-group-control/types.d.ts +1 -0
  652. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  653. package/build-types/tooltip/index.d.ts.map +1 -1
  654. package/build-types/utils/hooks/use-animated-offset-rect.d.ts +62 -0
  655. package/build-types/utils/hooks/use-animated-offset-rect.d.ts.map +1 -0
  656. package/package.json +20 -20
  657. package/schemas/docs-manifest.json +38 -0
  658. package/src/alignment-matrix-control/README.md +46 -36
  659. package/src/alignment-matrix-control/docs-manifest.json +12 -0
  660. package/src/alignment-matrix-control/types.ts +2 -0
  661. package/src/angle-picker-control/README.md +36 -23
  662. package/src/angle-picker-control/docs-manifest.json +5 -0
  663. package/src/button/style.scss +5 -1
  664. package/src/composite/test/index.tsx +629 -38
  665. package/src/drop-zone/index.tsx +1 -2
  666. package/src/drop-zone/style.scss +1 -1
  667. package/src/modal/aria-helper.ts +1 -0
  668. package/src/palette-edit/index.tsx +30 -5
  669. package/src/palette-edit/test/index.tsx +50 -1
  670. package/src/range-control/styles/range-control-styles.ts +19 -10
  671. package/src/range-control/tooltip.tsx +1 -1
  672. package/src/search-control/README.md +2 -0
  673. package/src/search-control/index.tsx +7 -0
  674. package/src/search-control/stories/index.story.tsx +0 -15
  675. package/src/search-control/test/index.tsx +4 -1
  676. package/src/search-control/types.ts +3 -0
  677. package/src/tabs/styles.ts +116 -47
  678. package/src/tabs/tab.tsx +8 -2
  679. package/src/tabs/tablist.tsx +48 -49
  680. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +6 -6
  681. package/src/toggle-group-control/test/index.tsx +39 -0
  682. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +11 -1
  683. package/src/toggle-group-control/toggle-group-control/component.tsx +3 -98
  684. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +15 -15
  685. package/src/toggle-group-control/types.ts +1 -0
  686. package/src/tooltip/index.tsx +8 -1
  687. package/src/tooltip/test/index.tsx +78 -0
  688. package/src/utils/hooks/use-animated-offset-rect.ts +107 -0
  689. package/tsconfig.tsbuildinfo +1 -1
@@ -19,11 +19,43 @@ import { useTabsContext } from './context';
19
19
  import { TabListWrapper } from './styles';
20
20
  import type { WordPressComponentProps } from '../context';
21
21
  import clsx from 'clsx';
22
+ import type { ElementOffsetRect } from '../utils/element-rect';
22
23
  import { useTrackElementOffsetRect } from '../utils/element-rect';
23
- import { useOnValueUpdate } from '../utils/hooks/use-on-value-update';
24
24
  import { useTrackOverflow } from './use-track-overflow';
25
+ import { useAnimatedOffsetRect } from '../utils/hooks/use-animated-offset-rect';
25
26
 
26
- const SCROLL_MARGIN = 24;
27
+ const DEFAULT_SCROLL_MARGIN = 24;
28
+
29
+ /**
30
+ * Scrolls a given parent element so that a given rect is visible.
31
+ *
32
+ * The scroll is updated initially and whenever the rect changes.
33
+ */
34
+ function useScrollRectIntoView(
35
+ parent: HTMLElement | undefined,
36
+ rect: ElementOffsetRect,
37
+ { margin = DEFAULT_SCROLL_MARGIN } = {}
38
+ ) {
39
+ useLayoutEffect( () => {
40
+ if ( ! parent || ! rect ) {
41
+ return;
42
+ }
43
+
44
+ const { scrollLeft: parentScroll } = parent;
45
+ const parentWidth = parent.getBoundingClientRect().width;
46
+ const { left: childLeft, width: childWidth } = rect;
47
+
48
+ const parentRightEdge = parentScroll + parentWidth;
49
+ const childRightEdge = childLeft + childWidth;
50
+ const rightOverflow = childRightEdge + margin - parentRightEdge;
51
+ const leftOverflow = parentScroll - ( childLeft - margin );
52
+ if ( leftOverflow > 0 ) {
53
+ parent.scrollLeft = parentScroll - leftOverflow;
54
+ } else if ( rightOverflow > 0 ) {
55
+ parent.scrollLeft = parentScroll + rightOverflow;
56
+ }
57
+ }, [ margin, parent, rect ] );
58
+ }
27
59
 
28
60
  export const TabList = forwardRef<
29
61
  HTMLDivElement,
@@ -35,44 +67,27 @@ export const TabList = forwardRef<
35
67
  const activeId = useStoreState( store, 'activeId' );
36
68
  const selectOnMove = useStoreState( store, 'selectOnMove' );
37
69
  const items = useStoreState( store, 'items' );
38
- const [ parent, setParent ] = useState< HTMLElement | null >();
70
+ const [ parent, setParent ] = useState< HTMLElement >();
39
71
  const refs = useMergeRefs( [ ref, setParent ] );
72
+ const selectedRect = useTrackElementOffsetRect(
73
+ store?.item( selectedId )?.element
74
+ );
75
+
76
+ // Track overflow to show scroll hints.
40
77
  const overflow = useTrackOverflow( parent, {
41
78
  first: items?.at( 0 )?.element,
42
79
  last: items?.at( -1 )?.element,
43
80
  } );
44
81
 
45
- const selectedTabPosition = useTrackElementOffsetRect(
46
- store?.item( selectedId )?.element
47
- );
48
-
49
- const [ animationEnabled, setAnimationEnabled ] = useState( false );
50
- useOnValueUpdate( selectedId, ( { previousValue } ) => {
51
- if ( previousValue ) {
52
- setAnimationEnabled( true );
53
- }
82
+ // Size, position, and animate the indicator.
83
+ useAnimatedOffsetRect( parent, selectedRect, {
84
+ prefix: 'selected',
85
+ dataAttribute: 'indicator-animated',
86
+ transitionEndFilter: ( event ) => event.pseudoElement === '::before',
54
87
  } );
55
88
 
56
89
  // Make sure selected tab is scrolled into view.
57
- useLayoutEffect( () => {
58
- if ( ! parent || ! selectedTabPosition ) {
59
- return;
60
- }
61
-
62
- const { scrollLeft: parentScroll } = parent;
63
- const parentWidth = parent.getBoundingClientRect().width;
64
- const { left: childLeft, width: childWidth } = selectedTabPosition;
65
-
66
- const parentRightEdge = parentScroll + parentWidth;
67
- const childRightEdge = childLeft + childWidth;
68
- const rightOverflow = childRightEdge + SCROLL_MARGIN - parentRightEdge;
69
- const leftOverflow = parentScroll - ( childLeft - SCROLL_MARGIN );
70
- if ( leftOverflow > 0 ) {
71
- parent.scrollLeft = parentScroll - leftOverflow;
72
- } else if ( rightOverflow > 0 ) {
73
- parent.scrollLeft = parentScroll + rightOverflow;
74
- }
75
- }, [ parent, selectedTabPosition ] );
90
+ useScrollRectIntoView( parent, selectedRect );
76
91
 
77
92
  const onBlur = () => {
78
93
  if ( ! selectOnMove ) {
@@ -97,30 +112,14 @@ export const TabList = forwardRef<
97
112
  <Ariakit.TabList
98
113
  ref={ refs }
99
114
  store={ store }
100
- render={
101
- <TabListWrapper
102
- onTransitionEnd={ ( event ) => {
103
- if ( event.pseudoElement === '::before' ) {
104
- setAnimationEnabled( false );
105
- }
106
- } }
107
- />
108
- }
115
+ render={ <TabListWrapper /> }
109
116
  onBlur={ onBlur }
110
117
  tabIndex={ -1 }
118
+ data-select-on-move={ selectOnMove ? 'true' : 'false' }
111
119
  { ...otherProps }
112
- style={ {
113
- '--indicator-top': selectedTabPosition.top,
114
- '--indicator-right': selectedTabPosition.right,
115
- '--indicator-left': selectedTabPosition.left,
116
- '--indicator-width': selectedTabPosition.width,
117
- '--indicator-height': selectedTabPosition.height,
118
- ...otherProps.style,
119
- } }
120
120
  className={ clsx(
121
121
  overflow.first && 'is-overflowing-first',
122
122
  overflow.last && 'is-overflowing-last',
123
- animationEnabled && 'is-animation-enabled',
124
123
  otherProps.className
125
124
  ) }
126
125
  >
@@ -283,7 +283,7 @@ exports[`ToggleGroupControl controlled should render correctly with icons 1`] =
283
283
  class="components-toggle-group-control emotion-8 emotion-9"
284
284
  data-wp-c16t="true"
285
285
  data-wp-component="ToggleGroupControl"
286
- id="toggle-group-control-as-radio-group-11"
286
+ id="toggle-group-control-as-radio-group-12"
287
287
  role="radiogroup"
288
288
  >
289
289
  <div
@@ -297,7 +297,7 @@ exports[`ToggleGroupControl controlled should render correctly with icons 1`] =
297
297
  data-value="uppercase"
298
298
  data-wp-c16t="true"
299
299
  data-wp-component="ToggleGroupControlOptionBase"
300
- id="toggle-group-control-as-radio-group-11-30"
300
+ id="toggle-group-control-as-radio-group-12-32"
301
301
  role="radio"
302
302
  type="button"
303
303
  value="uppercase"
@@ -330,7 +330,7 @@ exports[`ToggleGroupControl controlled should render correctly with icons 1`] =
330
330
  data-value="lowercase"
331
331
  data-wp-c16t="true"
332
332
  data-wp-component="ToggleGroupControlOptionBase"
333
- id="toggle-group-control-as-radio-group-11-31"
333
+ id="toggle-group-control-as-radio-group-12-33"
334
334
  role="radio"
335
335
  type="button"
336
336
  value="lowercase"
@@ -575,7 +575,7 @@ exports[`ToggleGroupControl controlled should render correctly with text options
575
575
  class="components-toggle-group-control emotion-8 emotion-9"
576
576
  data-wp-c16t="true"
577
577
  data-wp-component="ToggleGroupControl"
578
- id="toggle-group-control-as-radio-group-10"
578
+ id="toggle-group-control-as-radio-group-11"
579
579
  role="radiogroup"
580
580
  >
581
581
  <div
@@ -588,7 +588,7 @@ exports[`ToggleGroupControl controlled should render correctly with text options
588
588
  data-value="rigas"
589
589
  data-wp-c16t="true"
590
590
  data-wp-component="ToggleGroupControlOptionBase"
591
- id="toggle-group-control-as-radio-group-10-28"
591
+ id="toggle-group-control-as-radio-group-11-30"
592
592
  role="radio"
593
593
  type="button"
594
594
  value="rigas"
@@ -610,7 +610,7 @@ exports[`ToggleGroupControl controlled should render correctly with text options
610
610
  data-value="jack"
611
611
  data-wp-c16t="true"
612
612
  data-wp-component="ToggleGroupControlOptionBase"
613
- id="toggle-group-control-as-radio-group-10-29"
613
+ id="toggle-group-control-as-radio-group-11-31"
614
614
  role="radio"
615
615
  type="button"
616
616
  value="jack"
@@ -162,6 +162,45 @@ describe.each( [
162
162
  expect( mockOnChange ).toHaveBeenCalledWith( 'rigas' );
163
163
  } );
164
164
 
165
+ it( 'should not set a value on focus', async () => {
166
+ render(
167
+ <Component label="Test Toggle Group Control">{ options }</Component>
168
+ );
169
+
170
+ const radio = screen.getByRole( 'radio', { name: 'R' } );
171
+ expect( radio ).not.toBeChecked();
172
+
173
+ await press.Tab();
174
+ expect( radio ).toHaveFocus();
175
+ expect( radio ).not.toBeChecked();
176
+ } );
177
+
178
+ if ( mode === 'controlled' ) {
179
+ it( 'should not set a value on focus, after the value is reset', async () => {
180
+ render(
181
+ <Component label="Test Toggle Group Control" value="jack">
182
+ { options }
183
+ </Component>
184
+ );
185
+
186
+ expect( screen.getByRole( 'radio', { name: 'J' } ) ).toBeChecked();
187
+
188
+ await click( screen.getByRole( 'button', { name: 'Reset' } ) );
189
+
190
+ expect(
191
+ screen.getByRole( 'radio', { name: 'J' } )
192
+ ).not.toBeChecked();
193
+
194
+ await press.ShiftTab();
195
+ expect(
196
+ screen.getByRole( 'radio', { name: 'R' } )
197
+ ).not.toBeChecked();
198
+ expect(
199
+ screen.getByRole( 'radio', { name: 'J' } )
200
+ ).not.toBeChecked();
201
+ } );
202
+ }
203
+
165
204
  it( 'should render tooltip where `showTooltip` === `true`', async () => {
166
205
  render(
167
206
  <Component label="Test Toggle Group Control">
@@ -9,7 +9,7 @@ import { useStoreState } from '@ariakit/react';
9
9
  * WordPress dependencies
10
10
  */
11
11
  import { useInstanceId } from '@wordpress/compose';
12
- import { forwardRef, useMemo } from '@wordpress/element';
12
+ import { forwardRef, useEffect, useMemo } from '@wordpress/element';
13
13
  import { isRTL } from '@wordpress/i18n';
14
14
 
15
15
  /**
@@ -73,8 +73,17 @@ function UnforwardedToggleGroupControlAsRadioGroup(
73
73
  const selectedValue = useStoreState( radio, 'value' );
74
74
  const setValue = radio.setValue;
75
75
 
76
+ // Ensures that the active id is also reset after the value is "reset" by the consumer.
77
+ useEffect( () => {
78
+ if ( selectedValue === '' ) {
79
+ radio.setActiveId( undefined );
80
+ }
81
+ }, [ radio, selectedValue ] );
82
+
76
83
  const groupContextValue = useMemo(
77
84
  (): ToggleGroupControlContextProps => ( {
85
+ activeItemIsNotFirstItem: () =>
86
+ radio.getState().activeId !== radio.first(),
78
87
  baseId,
79
88
  isBlock: ! isAdaptiveWidth,
80
89
  size,
@@ -87,6 +96,7 @@ function UnforwardedToggleGroupControlAsRadioGroup(
87
96
  [
88
97
  baseId,
89
98
  isAdaptiveWidth,
99
+ radio,
90
100
  selectedValue,
91
101
  setSelectedElement,
92
102
  setValue,
@@ -6,7 +6,7 @@ import type { ForwardedRef } from 'react';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useLayoutEffect, useMemo, useState } from '@wordpress/element';
9
+ import { useMemo, useState } from '@wordpress/element';
10
10
 
11
11
  /**
12
12
  * Internal dependencies
@@ -20,104 +20,9 @@ import { VisualLabelWrapper } from './styles';
20
20
  import * as styles from './styles';
21
21
  import { ToggleGroupControlAsRadioGroup } from './as-radio-group';
22
22
  import { ToggleGroupControlAsButtonGroup } from './as-button-group';
23
- import type { ElementOffsetRect } from '../../utils/element-rect';
24
23
  import { useTrackElementOffsetRect } from '../../utils/element-rect';
25
- import { useOnValueUpdate } from '../../utils/hooks/use-on-value-update';
26
- import { useEvent, useMergeRefs } from '@wordpress/compose';
27
-
28
- /**
29
- * A utility used to animate something in a container component based on the "offset
30
- * rect" (position relative to the container and size) of a subelement. For example,
31
- * this is useful to render an indicator for the selected option of a component, and
32
- * to animate it when the selected option changes.
33
- *
34
- * Takes in a container element and the up-to-date "offset rect" of the target
35
- * subelement, obtained with `useTrackElementOffsetRect`. Then it does the following:
36
- *
37
- * - Adds CSS variables with rect information to the container, so that the indicator
38
- * can be rendered and animated with them. These are kept up-to-date, enabling CSS
39
- * transitions on change.
40
- * - Sets an attribute (`data-subelement-animated` by default) when the tracked
41
- * element changes, so that the target (e.g. the indicator) can be animated to its
42
- * new size and position.
43
- * - Removes the attribute when the animation is done.
44
- *
45
- * The need for the attribute is due to the fact that the rect might update in
46
- * situations other than when the tracked element changes, e.g. the tracked element
47
- * might be resized. In such cases, there is no need to animate the indicator, and
48
- * the change in size or position of the indicator needs to be reflected immediately.
49
- */
50
- function useAnimatedOffsetRect(
51
- /**
52
- * The container element.
53
- */
54
- container: HTMLElement | undefined,
55
- /**
56
- * The rect of the tracked element.
57
- */
58
- rect: ElementOffsetRect,
59
- {
60
- prefix = 'subelement',
61
- dataAttribute = `${ prefix }-animated`,
62
- transitionEndFilter = () => true,
63
- }: {
64
- /**
65
- * The prefix used for the CSS variables, e.g. if `prefix` is `selected`, the
66
- * CSS variables will be `--selected-top`, `--selected-left`, etc.
67
- * @default 'subelement'
68
- */
69
- prefix?: string;
70
- /**
71
- * The name of the data attribute used to indicate that the animation is in
72
- * progress. The `data-` prefix is added automatically.
73
- *
74
- * For example, if `dataAttribute` is `indicator-animated`, the attribute will
75
- * be `data-indicator-animated`.
76
- * @default `${ prefix }-animated`
77
- */
78
- dataAttribute?: string;
79
- /**
80
- * A function that is called with the transition event and returns a boolean
81
- * indicating whether the animation should be stopped. The default is a function
82
- * that always returns `true`.
83
- *
84
- * For example, if the animated element is the `::before` pseudo-element, the
85
- * function can be written as `( event ) => event.pseudoElement === '::before'`.
86
- * @default () => true
87
- */
88
- transitionEndFilter?: ( event: TransitionEvent ) => boolean;
89
- } = {}
90
- ) {
91
- const setProperties = useEvent( () => {
92
- ( Object.keys( rect ) as Array< keyof typeof rect > ).forEach(
93
- ( property ) =>
94
- property !== 'element' &&
95
- container?.style.setProperty(
96
- `--${ prefix }-${ property }`,
97
- String( rect[ property ] )
98
- )
99
- );
100
- } );
101
- useLayoutEffect( () => {
102
- setProperties();
103
- }, [ rect, setProperties ] );
104
- useOnValueUpdate( rect.element, ( { previousValue } ) => {
105
- // Only enable the animation when moving from one element to another.
106
- if ( rect.element && previousValue ) {
107
- container?.setAttribute( `data-${ dataAttribute }`, '' );
108
- }
109
- } );
110
- useLayoutEffect( () => {
111
- function onTransitionEnd( event: TransitionEvent ) {
112
- if ( transitionEndFilter( event ) ) {
113
- container?.removeAttribute( `data-${ dataAttribute }` );
114
- }
115
- }
116
- container?.addEventListener( 'transitionend', onTransitionEnd );
117
- return () =>
118
- container?.removeEventListener( 'transitionend', onTransitionEnd );
119
- }, [ dataAttribute, container, transitionEndFilter ] );
120
- }
24
+ import { useMergeRefs } from '@wordpress/compose';
25
+ import { useAnimatedOffsetRect } from '../../utils/hooks/use-animated-offset-rect';
121
26
 
122
27
  function UnconnectedToggleGroupControl(
123
28
  props: WordPressComponentProps< ToggleGroupControlProps, 'div', false >,
@@ -75,7 +75,6 @@ function ToggleGroupControlOptionBase(
75
75
  value,
76
76
  children,
77
77
  showTooltip = false,
78
- onFocus: onFocusProp,
79
78
  disabled,
80
79
  ...otherButtonProps
81
80
  } = buttonProps;
@@ -132,7 +131,6 @@ function ToggleGroupControlOptionBase(
132
131
  <button
133
132
  { ...commonProps }
134
133
  disabled={ disabled }
135
- onFocus={ onFocusProp }
136
134
  aria-pressed={ isPressed }
137
135
  type="button"
138
136
  onClick={ buttonOnClick }
@@ -142,19 +140,21 @@ function ToggleGroupControlOptionBase(
142
140
  ) : (
143
141
  <Ariakit.Radio
144
142
  disabled={ disabled }
145
- render={
146
- <button
147
- type="button"
148
- { ...commonProps }
149
- onFocus={ ( event ) => {
150
- onFocusProp?.( event );
151
- if ( event.defaultPrevented ) {
152
- return;
153
- }
154
- toggleGroupControlContext.setValue( value );
155
- } }
156
- />
157
- }
143
+ onFocusVisible={ () => {
144
+ const selectedValueIsEmpty =
145
+ toggleGroupControlContext.value === null ||
146
+ toggleGroupControlContext.value === '';
147
+
148
+ // Conditions ensure that the first visible focus to a radio group
149
+ // without a selected option will not automatically select the option.
150
+ if (
151
+ ! selectedValueIsEmpty ||
152
+ toggleGroupControlContext.activeItemIsNotFirstItem?.()
153
+ ) {
154
+ toggleGroupControlContext.setValue( value );
155
+ }
156
+ } }
157
+ render={ <button type="button" { ...commonProps } /> }
158
158
  value={ value }
159
159
  >
160
160
  <ButtonContentView>{ children }</ButtonContentView>
@@ -131,6 +131,7 @@ export type ToggleGroupControlProps = Pick<
131
131
  };
132
132
 
133
133
  export type ToggleGroupControlContextProps = {
134
+ activeItemIsNotFirstItem?: () => boolean;
134
135
  isDeselectable?: boolean;
135
136
  baseId: string;
136
137
  isBlock: ToggleGroupControlProps[ 'isBlock' ];
@@ -107,9 +107,16 @@ function UnforwardedTooltip(
107
107
  // TODO: this is a temporary workaround to minimize the effects of the
108
108
  // Ariakit upgrade. Ariakit doesn't pass the `aria-describedby` prop to
109
109
  // the tooltip anchor anymore since 0.4.0, so we need to add it manually.
110
+ // The `aria-describedby` attribute is added only if the anchor doesn't have
111
+ // one already, and if the tooltip text is not the same as the anchor's
112
+ // `aria-label`
110
113
  // See: https://github.com/WordPress/gutenberg/pull/64066
114
+ // See: https://github.com/WordPress/gutenberg/pull/65989
111
115
  function addDescribedById( element: React.ReactElement ) {
112
- return describedById && mounted
116
+ return describedById &&
117
+ mounted &&
118
+ element.props[ 'aria-describedby' ] === undefined &&
119
+ element.props[ 'aria-label' ] !== text
113
120
  ? cloneElement( element, { 'aria-describedby': describedById } )
114
121
  : element;
115
122
  }
@@ -516,4 +516,82 @@ describe( 'Tooltip', () => {
516
516
  ).not.toHaveClass( 'components-tooltip' );
517
517
  } );
518
518
  } );
519
+
520
+ describe( 'aria-describedby', () => {
521
+ it( "should not override the anchor's aria-describedby attribute if specified", async () => {
522
+ render(
523
+ <>
524
+ <Tooltip { ...props }>
525
+ <button aria-describedby="tooltip-test-description">
526
+ Tooltip anchor
527
+ </button>
528
+ </Tooltip>
529
+ { /* eslint-disable-next-line no-restricted-syntax */ }
530
+ <p id="tooltip-test-description">Tooltip description</p>
531
+ <button>focus trap outside</button>
532
+ </>
533
+ );
534
+
535
+ expect(
536
+ screen.getByRole( 'button', { name: 'Tooltip anchor' } )
537
+ ).toHaveAccessibleDescription( 'Tooltip description' );
538
+
539
+ // Focus the anchor, tooltip should show
540
+ await press.Tab();
541
+ expect(
542
+ screen.getByRole( 'button', { name: 'Tooltip anchor' } )
543
+ ).toHaveFocus();
544
+ await waitExpectTooltipToShow();
545
+
546
+ // The anchors should retain its previous accessible description,
547
+ // since the tooltip shouldn't override it.
548
+ expect(
549
+ screen.getByRole( 'button', { name: 'Tooltip anchor' } )
550
+ ).toHaveAccessibleDescription( 'Tooltip description' );
551
+
552
+ // Focus the other button, tooltip should hide
553
+ await press.Tab();
554
+ expect(
555
+ screen.getByRole( 'button', { name: 'focus trap outside' } )
556
+ ).toHaveFocus();
557
+ await waitExpectTooltipToHide();
558
+ } );
559
+
560
+ it( "should not add the aria-describedby attribute to the anchor if the tooltip text matches the anchor's aria-label", async () => {
561
+ render(
562
+ <>
563
+ <Tooltip { ...props }>
564
+ <button aria-label={ props.text }>
565
+ Tooltip anchor
566
+ </button>
567
+ </Tooltip>
568
+ <button>focus trap outside</button>
569
+ </>
570
+ );
571
+
572
+ expect(
573
+ screen.getByRole( 'button', { name: props.text } )
574
+ ).not.toHaveAccessibleDescription();
575
+
576
+ // Focus the anchor, tooltip should show
577
+ await press.Tab();
578
+ expect(
579
+ screen.getByRole( 'button', { name: props.text } )
580
+ ).toHaveFocus();
581
+ await waitExpectTooltipToShow();
582
+
583
+ // The anchor shouldn't have an aria-describedby prop
584
+ // because its aria-label matches the tooltip text.
585
+ expect(
586
+ screen.getByRole( 'button', { name: props.text } )
587
+ ).not.toHaveAccessibleDescription();
588
+
589
+ // Focus the other button, tooltip should hide
590
+ await press.Tab();
591
+ expect(
592
+ screen.getByRole( 'button', { name: 'focus trap outside' } )
593
+ ).toHaveFocus();
594
+ await waitExpectTooltipToHide();
595
+ } );
596
+ } );
519
597
  } );
@@ -0,0 +1,107 @@
1
+ /* eslint-disable jsdoc/require-param */
2
+
3
+ /**
4
+ * WordPress dependencies
5
+ */
6
+ import { useEvent } from '@wordpress/compose';
7
+ import { useLayoutEffect } from '@wordpress/element';
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import type { ElementOffsetRect } from '../element-rect';
12
+ import { useOnValueUpdate } from './use-on-value-update';
13
+
14
+ /**
15
+ * A utility used to animate something in a container component based on the "offset
16
+ * rect" (position relative to the container and size) of a subelement. For example,
17
+ * this is useful to render an indicator for the selected option of a component, and
18
+ * to animate it when the selected option changes.
19
+ *
20
+ * Takes in a container element and the up-to-date "offset rect" of the target
21
+ * subelement, obtained with `useTrackElementOffsetRect`. Then it does the following:
22
+ *
23
+ * - Adds CSS variables with rect information to the container, so that the indicator
24
+ * can be rendered and animated with them. These are kept up-to-date, enabling CSS
25
+ * transitions on change.
26
+ * - Sets an attribute (`data-subelement-animated` by default) when the tracked
27
+ * element changes, so that the target (e.g. the indicator) can be animated to its
28
+ * new size and position.
29
+ * - Removes the attribute when the animation is done.
30
+ *
31
+ * The need for the attribute is due to the fact that the rect might update in
32
+ * situations other than when the tracked element changes, e.g. the tracked element
33
+ * might be resized. In such cases, there is no need to animate the indicator, and
34
+ * the change in size or position of the indicator needs to be reflected immediately.
35
+ */
36
+ export function useAnimatedOffsetRect(
37
+ /**
38
+ * The container element.
39
+ */
40
+ container: HTMLElement | undefined,
41
+ /**
42
+ * The rect of the tracked element.
43
+ */
44
+ rect: ElementOffsetRect,
45
+ {
46
+ prefix = 'subelement',
47
+ dataAttribute = `${ prefix }-animated`,
48
+ transitionEndFilter = () => true,
49
+ }: {
50
+ /**
51
+ * The prefix used for the CSS variables, e.g. if `prefix` is `selected`, the
52
+ * CSS variables will be `--selected-top`, `--selected-left`, etc.
53
+ * @default 'subelement'
54
+ */
55
+ prefix?: string;
56
+ /**
57
+ * The name of the data attribute used to indicate that the animation is in
58
+ * progress. The `data-` prefix is added automatically.
59
+ *
60
+ * For example, if `dataAttribute` is `indicator-animated`, the attribute will
61
+ * be `data-indicator-animated`.
62
+ * @default `${ prefix }-animated`
63
+ */
64
+ dataAttribute?: string;
65
+ /**
66
+ * A function that is called with the transition event and returns a boolean
67
+ * indicating whether the animation should be stopped. The default is a function
68
+ * that always returns `true`.
69
+ *
70
+ * For example, if the animated element is the `::before` pseudo-element, the
71
+ * function can be written as `( event ) => event.pseudoElement === '::before'`.
72
+ * @default () => true
73
+ */
74
+ transitionEndFilter?: ( event: TransitionEvent ) => boolean;
75
+ } = {}
76
+ ) {
77
+ const setProperties = useEvent( () => {
78
+ ( Object.keys( rect ) as Array< keyof typeof rect > ).forEach(
79
+ ( property ) =>
80
+ property !== 'element' &&
81
+ container?.style.setProperty(
82
+ `--${ prefix }-${ property }`,
83
+ String( rect[ property ] )
84
+ )
85
+ );
86
+ } );
87
+ useLayoutEffect( () => {
88
+ setProperties();
89
+ }, [ rect, setProperties ] );
90
+ useOnValueUpdate( rect.element, ( { previousValue } ) => {
91
+ // Only enable the animation when moving from one element to another.
92
+ if ( rect.element && previousValue ) {
93
+ container?.setAttribute( `data-${ dataAttribute }`, '' );
94
+ }
95
+ } );
96
+ useLayoutEffect( () => {
97
+ function onTransitionEnd( event: TransitionEvent ) {
98
+ if ( transitionEndFilter( event ) ) {
99
+ container?.removeAttribute( `data-${ dataAttribute }` );
100
+ }
101
+ }
102
+ container?.addEventListener( 'transitionend', onTransitionEnd );
103
+ return () =>
104
+ container?.removeEventListener( 'transitionend', onTransitionEnd );
105
+ }, [ dataAttribute, container, transitionEndFilter ] );
106
+ }
107
+ /* eslint-enable jsdoc/require-param */