@wordpress/components 28.8.4 → 28.9.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 (329) hide show
  1. package/CHANGELOG.md +26 -3
  2. package/build/autocomplete/index.js +4 -1
  3. package/build/autocomplete/index.js.map +1 -1
  4. package/build/border-box-control/border-box-control/component.js +3 -14
  5. package/build/border-box-control/border-box-control/component.js.map +1 -1
  6. package/build/border-control/border-control/component.js +1 -2
  7. package/build/border-control/border-control/component.js.map +1 -1
  8. package/build/border-control/border-control-dropdown/component.js +2 -14
  9. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  10. package/build/border-control/styles.js +13 -13
  11. package/build/border-control/styles.js.map +1 -1
  12. package/build/border-control/types.js.map +1 -1
  13. package/build/box-control/index.js +4 -4
  14. package/build/box-control/index.js.map +1 -1
  15. package/build/box-control/types.js.map +1 -1
  16. package/build/composite/group-label.js +7 -1
  17. package/build/composite/group-label.js.map +1 -1
  18. package/build/composite/group.js +7 -1
  19. package/build/composite/group.js.map +1 -1
  20. package/build/composite/hover.js +8 -2
  21. package/build/composite/hover.js.map +1 -1
  22. package/build/composite/index.js +5 -1
  23. package/build/composite/index.js.map +1 -1
  24. package/build/composite/item.js +16 -1
  25. package/build/composite/item.js.map +1 -1
  26. package/build/composite/row.js +7 -1
  27. package/build/composite/row.js.map +1 -1
  28. package/build/composite/typeahead.js +8 -2
  29. package/build/composite/typeahead.js.map +1 -1
  30. package/build/date-time/date/index.js +4 -2
  31. package/build/date-time/date/index.js.map +1 -1
  32. package/build/index.js +36 -5
  33. package/build/index.js.map +1 -1
  34. package/build/navigator/index.js +128 -32
  35. package/build/navigator/index.js.map +1 -1
  36. package/build/navigator/legacy.js +179 -0
  37. package/build/navigator/legacy.js.map +1 -0
  38. package/build/navigator/{navigator-provider → navigator}/component.js +5 -40
  39. package/build/navigator/navigator/component.js.map +1 -0
  40. package/build/navigator/navigator-back-button/component.js +2 -38
  41. package/build/navigator/navigator-back-button/component.js.map +1 -1
  42. package/build/navigator/navigator-back-button/hook.js +1 -1
  43. package/build/navigator/navigator-back-button/hook.js.map +1 -1
  44. package/build/navigator/navigator-button/component.js +2 -37
  45. package/build/navigator/navigator-button/component.js.map +1 -1
  46. package/build/navigator/navigator-button/hook.js +1 -1
  47. package/build/navigator/navigator-button/hook.js.map +1 -1
  48. package/build/navigator/navigator-screen/component.js +40 -62
  49. package/build/navigator/navigator-screen/component.js.map +1 -1
  50. package/build/navigator/navigator-screen/use-screen-animate-presence.js +114 -0
  51. package/build/navigator/navigator-screen/use-screen-animate-presence.js.map +1 -0
  52. package/build/navigator/navigator-to-parent-button/component.js +3 -7
  53. package/build/navigator/navigator-to-parent-button/component.js.map +1 -1
  54. package/build/navigator/styles.js +78 -35
  55. package/build/navigator/styles.js.map +1 -1
  56. package/build/navigator/types.js.map +1 -1
  57. package/build/navigator/use-navigator.js +4 -1
  58. package/build/navigator/use-navigator.js.map +1 -1
  59. package/build/search-control/index.js +5 -2
  60. package/build/search-control/index.js.map +1 -1
  61. package/build/tabs/styles.js +3 -3
  62. package/build/tabs/styles.js.map +1 -1
  63. package/build/tabs/tablist.js +61 -28
  64. package/build/tabs/tablist.js.map +1 -1
  65. package/build/tabs/use-track-overflow.js +73 -0
  66. package/build/tabs/use-track-overflow.js.map +1 -0
  67. package/build/toggle-group-control/toggle-group-control/as-button-group.js +4 -2
  68. package/build/toggle-group-control/toggle-group-control/as-button-group.js.map +1 -1
  69. package/build/toggle-group-control/toggle-group-control/as-radio-group.js +6 -2
  70. package/build/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  71. package/build/toggle-group-control/toggle-group-control/component.js +73 -8
  72. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  73. package/build/toggle-group-control/toggle-group-control/styles.js +7 -7
  74. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  75. package/build/toggle-group-control/toggle-group-control-option-base/component.js +10 -19
  76. package/build/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  77. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +8 -9
  78. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  79. package/build/toggle-group-control/types.js.map +1 -1
  80. package/build/utils/element-rect.js +22 -13
  81. package/build/utils/element-rect.js.map +1 -1
  82. package/build/utils/hooks/use-on-value-update.js +3 -7
  83. package/build/utils/hooks/use-on-value-update.js.map +1 -1
  84. package/build-module/autocomplete/index.js +4 -1
  85. package/build-module/autocomplete/index.js.map +1 -1
  86. package/build-module/border-box-control/border-box-control/component.js +3 -14
  87. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  88. package/build-module/border-control/border-control/component.js +1 -2
  89. package/build-module/border-control/border-control/component.js.map +1 -1
  90. package/build-module/border-control/border-control-dropdown/component.js +2 -14
  91. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  92. package/build-module/border-control/styles.js +13 -13
  93. package/build-module/border-control/styles.js.map +1 -1
  94. package/build-module/border-control/types.js.map +1 -1
  95. package/build-module/box-control/index.js +4 -4
  96. package/build-module/box-control/index.js.map +1 -1
  97. package/build-module/box-control/types.js.map +1 -1
  98. package/build-module/composite/group-label.js +7 -1
  99. package/build-module/composite/group-label.js.map +1 -1
  100. package/build-module/composite/group.js +7 -1
  101. package/build-module/composite/group.js.map +1 -1
  102. package/build-module/composite/hover.js +8 -2
  103. package/build-module/composite/hover.js.map +1 -1
  104. package/build-module/composite/index.js +5 -1
  105. package/build-module/composite/index.js.map +1 -1
  106. package/build-module/composite/item.js +16 -1
  107. package/build-module/composite/item.js.map +1 -1
  108. package/build-module/composite/row.js +7 -1
  109. package/build-module/composite/row.js.map +1 -1
  110. package/build-module/composite/typeahead.js +8 -2
  111. package/build-module/composite/typeahead.js.map +1 -1
  112. package/build-module/date-time/date/index.js +4 -2
  113. package/build-module/date-time/date/index.js.map +1 -1
  114. package/build-module/index.js +14 -4
  115. package/build-module/index.js.map +1 -1
  116. package/build-module/navigator/index.js +130 -5
  117. package/build-module/navigator/index.js.map +1 -1
  118. package/build-module/navigator/legacy.js +167 -0
  119. package/build-module/navigator/legacy.js.map +1 -0
  120. package/build-module/navigator/{navigator-provider → navigator}/component.js +4 -39
  121. package/build-module/navigator/navigator/component.js.map +1 -0
  122. package/build-module/navigator/navigator-back-button/component.js +1 -37
  123. package/build-module/navigator/navigator-back-button/component.js.map +1 -1
  124. package/build-module/navigator/navigator-back-button/hook.js +1 -1
  125. package/build-module/navigator/navigator-back-button/hook.js.map +1 -1
  126. package/build-module/navigator/navigator-button/component.js +1 -36
  127. package/build-module/navigator/navigator-button/component.js.map +1 -1
  128. package/build-module/navigator/navigator-button/hook.js +1 -1
  129. package/build-module/navigator/navigator-button/hook.js.map +1 -1
  130. package/build-module/navigator/navigator-screen/component.js +39 -61
  131. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  132. package/build-module/navigator/navigator-screen/use-screen-animate-presence.js +106 -0
  133. package/build-module/navigator/navigator-screen/use-screen-animate-presence.js.map +1 -0
  134. package/build-module/navigator/navigator-to-parent-button/component.js +2 -6
  135. package/build-module/navigator/navigator-to-parent-button/component.js.map +1 -1
  136. package/build-module/navigator/styles.js +77 -33
  137. package/build-module/navigator/styles.js.map +1 -1
  138. package/build-module/navigator/types.js.map +1 -1
  139. package/build-module/navigator/use-navigator.js +4 -1
  140. package/build-module/navigator/use-navigator.js.map +1 -1
  141. package/build-module/search-control/index.js +5 -2
  142. package/build-module/search-control/index.js.map +1 -1
  143. package/build-module/tabs/styles.js +3 -3
  144. package/build-module/tabs/styles.js.map +1 -1
  145. package/build-module/tabs/tablist.js +62 -29
  146. package/build-module/tabs/tablist.js.map +1 -1
  147. package/build-module/tabs/use-track-overflow.js +67 -0
  148. package/build-module/tabs/use-track-overflow.js.map +1 -0
  149. package/build-module/toggle-group-control/toggle-group-control/as-button-group.js +4 -2
  150. package/build-module/toggle-group-control/toggle-group-control/as-button-group.js.map +1 -1
  151. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js +6 -2
  152. package/build-module/toggle-group-control/toggle-group-control/as-radio-group.js.map +1 -1
  153. package/build-module/toggle-group-control/toggle-group-control/component.js +76 -10
  154. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  155. package/build-module/toggle-group-control/toggle-group-control/styles.js +7 -7
  156. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  157. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js +12 -22
  158. package/build-module/toggle-group-control/toggle-group-control-option-base/component.js.map +1 -1
  159. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +7 -8
  160. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  161. package/build-module/toggle-group-control/types.js.map +1 -1
  162. package/build-module/utils/element-rect.js +22 -12
  163. package/build-module/utils/element-rect.js.map +1 -1
  164. package/build-module/utils/hooks/use-on-value-update.js +3 -6
  165. package/build-module/utils/hooks/use-on-value-update.js.map +1 -1
  166. package/build-style/style-rtl.css +26 -13
  167. package/build-style/style.css +26 -13
  168. package/build-types/autocomplete/index.d.ts.map +1 -1
  169. package/build-types/border-box-control/border-box-control/component.d.ts +5 -15
  170. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  171. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +2 -1
  172. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -1
  173. package/build-types/border-box-control/stories/index.story.d.ts +3 -2
  174. package/build-types/border-box-control/stories/index.story.d.ts.map +1 -1
  175. package/build-types/border-control/border-control/component.d.ts +3 -2
  176. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  177. package/build-types/border-control/border-control-dropdown/component.d.ts +2 -1
  178. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  179. package/build-types/border-control/border-control-style-picker/component.d.ts.map +1 -1
  180. package/build-types/border-control/stories/index.story.d.ts +15 -30
  181. package/build-types/border-control/stories/index.story.d.ts.map +1 -1
  182. package/build-types/border-control/styles.d.ts.map +1 -1
  183. package/build-types/border-control/types.d.ts +12 -7
  184. package/build-types/border-control/types.d.ts.map +1 -1
  185. package/build-types/box-control/index.d.ts +4 -4
  186. package/build-types/box-control/stories/index.story.d.ts.map +1 -1
  187. package/build-types/box-control/types.d.ts +3 -3
  188. package/build-types/composite/group-label.d.ts.map +1 -1
  189. package/build-types/composite/index.d.ts.map +1 -1
  190. package/build-types/composite/item.d.ts.map +1 -1
  191. package/build-types/composite/stories/index.story.d.ts +22 -0
  192. package/build-types/composite/stories/index.story.d.ts.map +1 -1
  193. package/build-types/composite/test/index.d.ts +2 -0
  194. package/build-types/composite/test/index.d.ts.map +1 -0
  195. package/build-types/date-time/date/index.d.ts.map +1 -1
  196. package/build-types/dropdown/stories/index.story.d.ts.map +1 -1
  197. package/build-types/dropdown-menu/stories/index.story.d.ts.map +1 -1
  198. package/build-types/index.d.ts +23 -4
  199. package/build-types/index.d.ts.map +1 -1
  200. package/build-types/navigator/index.d.ts +171 -5
  201. package/build-types/navigator/index.d.ts.map +1 -1
  202. package/build-types/navigator/legacy.d.ts +226 -0
  203. package/build-types/navigator/legacy.d.ts.map +1 -0
  204. package/build-types/navigator/navigator/component.d.ts +3 -0
  205. package/build-types/navigator/navigator/component.d.ts.map +1 -0
  206. package/build-types/navigator/navigator-back-button/component.d.ts +0 -35
  207. package/build-types/navigator/navigator-back-button/component.d.ts.map +1 -1
  208. package/build-types/navigator/navigator-button/component.d.ts +0 -34
  209. package/build-types/navigator/navigator-button/component.d.ts.map +1 -1
  210. package/build-types/navigator/navigator-screen/component.d.ts +0 -35
  211. package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
  212. package/build-types/navigator/navigator-screen/use-screen-animate-presence.d.ts +16 -0
  213. package/build-types/navigator/navigator-screen/use-screen-animate-presence.d.ts.map +1 -0
  214. package/build-types/navigator/navigator-to-parent-button/component.d.ts +0 -4
  215. package/build-types/navigator/navigator-to-parent-button/component.d.ts.map +1 -1
  216. package/build-types/navigator/stories/index.story.d.ts +5 -5
  217. package/build-types/navigator/stories/index.story.d.ts.map +1 -1
  218. package/build-types/navigator/styles.d.ts +20 -7
  219. package/build-types/navigator/styles.d.ts.map +1 -1
  220. package/build-types/navigator/types.d.ts +19 -1
  221. package/build-types/navigator/types.d.ts.map +1 -1
  222. package/build-types/navigator/use-navigator.d.ts +4 -1
  223. package/build-types/navigator/use-navigator.d.ts.map +1 -1
  224. package/build-types/select-control/stories/index.story.d.ts +7 -0
  225. package/build-types/select-control/stories/index.story.d.ts.map +1 -1
  226. package/build-types/tabs/stories/index.story.d.ts +2 -1
  227. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  228. package/build-types/tabs/styles.d.ts.map +1 -1
  229. package/build-types/tabs/tablist.d.ts.map +1 -1
  230. package/build-types/tabs/use-track-overflow.d.ts +17 -0
  231. package/build-types/tabs/use-track-overflow.d.ts.map +1 -0
  232. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +2 -2
  233. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts.map +1 -1
  234. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +2 -2
  235. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts.map +1 -1
  236. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  237. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  238. package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
  239. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +0 -1
  240. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
  241. package/build-types/toggle-group-control/types.d.ts +2 -1
  242. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  243. package/build-types/utils/element-rect.d.ts +8 -0
  244. package/build-types/utils/element-rect.d.ts.map +1 -1
  245. package/build-types/utils/hooks/use-on-value-update.d.ts.map +1 -1
  246. package/package.json +19 -19
  247. package/src/autocomplete/index.tsx +4 -1
  248. package/src/border-box-control/border-box-control/README.md +22 -26
  249. package/src/border-box-control/border-box-control/component.tsx +3 -14
  250. package/src/border-box-control/stories/index.story.tsx +2 -1
  251. package/src/border-control/border-control/README.md +26 -36
  252. package/src/border-control/border-control/component.tsx +1 -2
  253. package/src/border-control/border-control-dropdown/component.tsx +1 -15
  254. package/src/border-control/stories/index.story.tsx +4 -10
  255. package/src/border-control/styles.ts +0 -1
  256. package/src/border-control/test/index.js +2 -15
  257. package/src/border-control/types.ts +12 -7
  258. package/src/box-control/README.md +9 -12
  259. package/src/box-control/index.tsx +4 -4
  260. package/src/box-control/stories/index.story.tsx +1 -1
  261. package/src/box-control/types.ts +3 -3
  262. package/src/composite/group-label.tsx +7 -5
  263. package/src/composite/group.tsx +7 -7
  264. package/src/composite/hover.tsx +7 -7
  265. package/src/composite/index.tsx +6 -1
  266. package/src/composite/item.tsx +19 -1
  267. package/src/composite/legacy/test/index.tsx +22 -21
  268. package/src/composite/row.tsx +7 -7
  269. package/src/composite/stories/index.story.tsx +42 -0
  270. package/src/composite/test/index.tsx +123 -0
  271. package/src/composite/typeahead.tsx +7 -7
  272. package/src/date-time/date/index.tsx +2 -0
  273. package/src/dropdown/stories/index.story.tsx +1 -0
  274. package/src/dropdown/style.scss +10 -13
  275. package/src/dropdown-menu/stories/index.story.tsx +3 -0
  276. package/src/index.ts +19 -1
  277. package/src/menu-group/style.scss +4 -1
  278. package/src/menu-items-choice/style.scss +2 -0
  279. package/src/navigator/README.md +176 -0
  280. package/src/navigator/index.tsx +131 -0
  281. package/src/navigator/legacy.ts +169 -0
  282. package/src/navigator/{navigator-provider → navigator}/component.tsx +6 -44
  283. package/src/navigator/navigator-back-button/component.tsx +1 -37
  284. package/src/navigator/navigator-back-button/hook.ts +1 -1
  285. package/src/navigator/navigator-button/component.tsx +1 -36
  286. package/src/navigator/navigator-button/hook.ts +1 -1
  287. package/src/navigator/navigator-screen/component.tsx +48 -76
  288. package/src/navigator/navigator-screen/use-screen-animate-presence.ts +177 -0
  289. package/src/navigator/navigator-to-parent-button/component.tsx +2 -7
  290. package/src/navigator/stories/index.story.tsx +55 -54
  291. package/src/navigator/styles.ts +112 -41
  292. package/src/navigator/test/index.tsx +47 -47
  293. package/src/navigator/types.ts +19 -1
  294. package/src/navigator/use-navigator.ts +4 -1
  295. package/src/search-control/index.tsx +2 -2
  296. package/src/select-control/stories/index.story.tsx +14 -1
  297. package/src/tabs/stories/index.story.tsx +106 -0
  298. package/src/tabs/styles.ts +54 -20
  299. package/src/tabs/tablist.tsx +60 -26
  300. package/src/tabs/use-track-overflow.ts +76 -0
  301. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +208 -44
  302. package/src/toggle-group-control/toggle-group-control/as-button-group.tsx +18 -10
  303. package/src/toggle-group-control/toggle-group-control/as-radio-group.tsx +19 -9
  304. package/src/toggle-group-control/toggle-group-control/component.tsx +114 -6
  305. package/src/toggle-group-control/toggle-group-control/styles.ts +41 -0
  306. package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +10 -27
  307. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +0 -11
  308. package/src/toggle-group-control/types.ts +3 -1
  309. package/src/tools-panel/tools-panel/README.md +10 -10
  310. package/src/utils/element-rect.ts +32 -15
  311. package/src/utils/hooks/use-on-value-update.ts +3 -6
  312. package/tsconfig.tsbuildinfo +1 -1
  313. package/build/navigator/navigator-provider/component.js.map +0 -1
  314. package/build/utils/hooks/use-event.js +0 -41
  315. package/build/utils/hooks/use-event.js.map +0 -1
  316. package/build-module/navigator/navigator-provider/component.js.map +0 -1
  317. package/build-module/utils/hooks/use-event.js +0 -35
  318. package/build-module/utils/hooks/use-event.js.map +0 -1
  319. package/build-types/navigator/navigator-provider/component.d.ts +0 -37
  320. package/build-types/navigator/navigator-provider/component.d.ts.map +0 -1
  321. package/build-types/utils/hooks/use-event.d.ts +0 -20
  322. package/build-types/utils/hooks/use-event.d.ts.map +0 -1
  323. package/src/navigator/index.ts +0 -6
  324. package/src/navigator/navigator-back-button/README.md +0 -15
  325. package/src/navigator/navigator-button/README.md +0 -38
  326. package/src/navigator/navigator-provider/README.md +0 -94
  327. package/src/navigator/navigator-screen/README.md +0 -33
  328. package/src/navigator/navigator-to-parent-button/README.md +0 -17
  329. package/src/utils/hooks/use-event.ts +0 -38
@@ -3,13 +3,12 @@
3
3
  */
4
4
  import type { ForwardedRef } from 'react';
5
5
  import * as Ariakit from '@ariakit/react';
6
- import { motion } from 'framer-motion';
7
6
 
8
7
  /**
9
8
  * WordPress dependencies
10
9
  */
11
- import { useReducedMotion, useInstanceId } from '@wordpress/compose';
12
- import { useMemo } from '@wordpress/element';
10
+ import { useInstanceId } from '@wordpress/compose';
11
+ import { useLayoutEffect, useMemo, useRef } from '@wordpress/element';
13
12
 
14
13
  /**
15
14
  * Internal dependencies
@@ -27,12 +26,6 @@ import Tooltip from '../../tooltip';
27
26
 
28
27
  const { ButtonContentView, LabelView } = styles;
29
28
 
30
- const REDUCED_MOTION_TRANSITION_CONFIG = {
31
- duration: 0,
32
- };
33
-
34
- const LAYOUT_ID = 'toggle-group-backdrop-shared-layout-id';
35
-
36
29
  const WithToolTip = ( { showTooltip, text, children }: WithToolTipProps ) => {
37
30
  if ( showTooltip && text ) {
38
31
  return (
@@ -58,7 +51,6 @@ function ToggleGroupControlOptionBase(
58
51
  >,
59
52
  forwardedRef: ForwardedRef< any >
60
53
  ) {
61
- const shouldReduceMotion = useReducedMotion();
62
54
  const toggleGroupControlContext = useToggleGroupControlContext();
63
55
 
64
56
  const id = useInstanceId(
@@ -107,7 +99,6 @@ function ToggleGroupControlOptionBase(
107
99
  ),
108
100
  [ cx, isDeselectable, isIcon, isPressed, size, className ]
109
101
  );
110
- const backdropClasses = useMemo( () => cx( styles.backdropView ), [ cx ] );
111
102
 
112
103
  const buttonOnClick = () => {
113
104
  if ( isDeselectable && isPressed ) {
@@ -124,8 +115,15 @@ function ToggleGroupControlOptionBase(
124
115
  ref: forwardedRef,
125
116
  };
126
117
 
118
+ const labelRef = useRef< HTMLDivElement | null >( null );
119
+ useLayoutEffect( () => {
120
+ if ( isPressed && labelRef.current ) {
121
+ toggleGroupControlContext.setSelectedElement( labelRef.current );
122
+ }
123
+ }, [ isPressed, toggleGroupControlContext ] );
124
+
127
125
  return (
128
- <LabelView className={ labelViewClasses }>
126
+ <LabelView ref={ labelRef } className={ labelViewClasses }>
129
127
  <WithToolTip
130
128
  showTooltip={ showTooltip }
131
129
  text={ otherButtonProps[ 'aria-label' ] }
@@ -163,21 +161,6 @@ function ToggleGroupControlOptionBase(
163
161
  </Ariakit.Radio>
164
162
  ) }
165
163
  </WithToolTip>
166
- { /* Animated backdrop using framer motion's shared layout animation */ }
167
- { isPressed ? (
168
- <motion.div layout layoutRoot>
169
- <motion.div
170
- className={ backdropClasses }
171
- transition={
172
- shouldReduceMotion
173
- ? REDUCED_MOTION_TRANSITION_CONFIG
174
- : undefined
175
- }
176
- role="presentation"
177
- layoutId={ LAYOUT_ID }
178
- />
179
- </motion.div>
180
- ) : null }
181
164
  </LabelView>
182
165
  );
183
166
  }
@@ -119,14 +119,3 @@ const isIconStyles = ( {
119
119
  padding-right: 0;
120
120
  `;
121
121
  };
122
-
123
- export const backdropView = css`
124
- background: ${ COLORS.gray[ 900 ] };
125
- border-radius: ${ CONFIG.radiusXSmall };
126
- position: absolute;
127
- inset: 0;
128
- z-index: 1;
129
- // Windows High Contrast mode will show this outline, but not the box-shadow.
130
- outline: 2px solid transparent;
131
- outline-offset: -3px;
132
- `;
@@ -137,9 +137,11 @@ export type ToggleGroupControlContextProps = {
137
137
  size: ToggleGroupControlProps[ 'size' ];
138
138
  value: ToggleGroupControlProps[ 'value' ];
139
139
  setValue: ( newValue: string | number | undefined ) => void;
140
+ setSelectedElement: ( element: HTMLElement | undefined ) => void;
140
141
  };
141
142
 
142
143
  export type ToggleGroupControlMainControlProps = Pick<
143
144
  ToggleGroupControlProps,
144
145
  'children' | 'isAdaptiveWidth' | 'label' | 'size' | 'onChange' | 'value'
145
- >;
146
+ > &
147
+ Pick< ToggleGroupControlContextProps, 'setSelectedElement' >;
@@ -60,7 +60,7 @@ import styled from '@emotion/styled';
60
60
  * WordPress dependencies
61
61
  */
62
62
  import {
63
- __experimentalBoxControl as BoxControl,
63
+ BoxControl,
64
64
  __experimentalToolsPanel as ToolsPanel,
65
65
  __experimentalToolsPanelItem as ToolsPanelItem,
66
66
  __experimentalUnitControl as UnitControl,
@@ -91,8 +91,8 @@ export function DimensionPanel() {
91
91
  return (
92
92
  <ToolsPanel label={ __( 'Dimensions' ) } resetAll={ resetAll }>
93
93
  <PanelDescription>
94
- Select dimensions or spacing related settings from the
95
- menu for additional controls.
94
+ Select dimensions or spacing related settings from the menu for
95
+ additional controls.
96
96
  </PanelDescription>
97
97
  <SingleColumnItem
98
98
  hasValue={ () => !! height }
@@ -154,8 +154,8 @@ export function DimensionPanel() {
154
154
  Flags that the items in this ToolsPanel will be contained within an inner
155
155
  wrapper element allowing the panel to lay them out accordingly.
156
156
 
157
- - Required: No
158
- - Default: `false`
157
+ - Required: No
158
+ - Default: `false`
159
159
 
160
160
  ### `dropdownMenuProps`: `{}`
161
161
 
@@ -176,7 +176,7 @@ The heading level of the panel's header.
176
176
  Text to be displayed within the panel's header and as the `aria-label` for the
177
177
  panel's dropdown menu.
178
178
 
179
- - Required: Yes
179
+ - Required: Yes
180
180
 
181
181
  ### `panelId`: `string | null`
182
182
 
@@ -185,13 +185,13 @@ to restrict panel items. When a `panelId` is set, items can only register
185
185
  themselves if the `panelId` is explicitly `null` or the item's `panelId` matches
186
186
  exactly.
187
187
 
188
- - Required: No
188
+ - Required: No
189
189
 
190
190
  ### `resetAll`: `( filters?: ResetAllFilter[] ) => void`
191
191
 
192
192
  A function to call when the `Reset all` menu option is selected. As an argument, it receives an array containing the `resetAllFilter` callbacks of all the valid registered `ToolsPanelItems`.
193
193
 
194
- - Required: Yes
194
+ - Required: Yes
195
195
 
196
196
  ### `shouldRenderPlaceholderItems`: `boolean`
197
197
 
@@ -201,5 +201,5 @@ placeholder content (instead of `null`) when they are toggled off and hidden.
201
201
  Note that placeholder items won't apply the `className` that would be
202
202
  normally applied to a visible `ToolsPanelItem` via the `className` prop.
203
203
 
204
- - Required: No
205
- - Default: `false`
204
+ - Required: No
205
+ - Default: `false`
@@ -3,16 +3,16 @@
3
3
  * WordPress dependencies
4
4
  */
5
5
  import { useLayoutEffect, useRef, useState } from '@wordpress/element';
6
- import { useResizeObserver } from '@wordpress/compose';
7
- /**
8
- * Internal dependencies
9
- */
10
- import { useEvent } from './hooks/use-event';
6
+ import { useEvent, useResizeObserver } from '@wordpress/compose';
11
7
 
12
8
  /**
13
9
  * The position and dimensions of an element, relative to its offset parent.
14
10
  */
15
11
  export type ElementOffsetRect = {
12
+ /**
13
+ * The element the rect belongs to.
14
+ */
15
+ element: HTMLElement | undefined;
16
16
  /**
17
17
  * The distance from the top edge of the offset parent to the top edge of
18
18
  * the element.
@@ -47,6 +47,7 @@ export type ElementOffsetRect = {
47
47
  * An `ElementOffsetRect` object with all values set to zero.
48
48
  */
49
49
  export const NULL_ELEMENT_OFFSET_RECT = {
50
+ element: undefined,
50
51
  top: 0,
51
52
  right: 0,
52
53
  bottom: 0,
@@ -79,9 +80,11 @@ export function getElementOffsetRect(
79
80
  if ( rect.width === 0 || rect.height === 0 ) {
80
81
  return;
81
82
  }
83
+ const offsetParent = element.offsetParent;
82
84
  const offsetParentRect =
83
- element.offsetParent?.getBoundingClientRect() ??
84
- NULL_ELEMENT_OFFSET_RECT;
85
+ offsetParent?.getBoundingClientRect() ?? NULL_ELEMENT_OFFSET_RECT;
86
+ const offsetParentScrollX = offsetParent?.scrollLeft ?? 0;
87
+ const offsetParentScrollY = offsetParent?.scrollTop ?? 0;
85
88
 
86
89
  // Computed widths and heights have subpixel precision, and are not affected
87
90
  // by distortions.
@@ -94,13 +97,22 @@ export function getElementOffsetRect(
94
97
  const scaleY = computedHeight / rect.height;
95
98
 
96
99
  return {
100
+ element,
97
101
  // To obtain the adjusted values for the position:
98
102
  // 1. Compute the element's position relative to the offset parent.
99
103
  // 2. Correct for the scale factor.
100
- top: ( rect.top - offsetParentRect?.top ) * scaleY,
101
- right: ( offsetParentRect?.right - rect.right ) * scaleX,
102
- bottom: ( offsetParentRect?.bottom - rect.bottom ) * scaleY,
103
- left: ( rect.left - offsetParentRect?.left ) * scaleX,
104
+ // 3. Adjust for the scroll position of the offset parent.
105
+ top:
106
+ ( rect.top - offsetParentRect?.top ) * scaleY + offsetParentScrollY,
107
+ right:
108
+ ( offsetParentRect?.right - rect.right ) * scaleX -
109
+ offsetParentScrollX,
110
+ bottom:
111
+ ( offsetParentRect?.bottom - rect.bottom ) * scaleY -
112
+ offsetParentScrollY,
113
+ left:
114
+ ( rect.left - offsetParentRect?.left ) * scaleX +
115
+ offsetParentScrollX,
104
116
  // Computed dimensions don't need any adjustments.
105
117
  width: computedWidth,
106
118
  height: computedHeight,
@@ -113,6 +125,9 @@ const POLL_RATE = 100;
113
125
  * Tracks the position and dimensions of an element, relative to its offset
114
126
  * parent. The element can be changed dynamically.
115
127
  *
128
+ * When no element is provided (`null` or `undefined`), the hook will return
129
+ * a "null" rect, in which all values are `0` and `element` is `undefined`.
130
+ *
116
131
  * **Note:** sometimes, the measurement will fail (see `getElementOffsetRect`'s
117
132
  * documentation for more details). When that happens, this hook will attempt
118
133
  * to measure again after a frame, and if that fails, it will poll every 100
@@ -149,10 +164,12 @@ export function useTrackElementOffsetRect(
149
164
  }
150
165
  } );
151
166
 
152
- useLayoutEffect(
153
- () => setElement( targetElement ),
154
- [ setElement, targetElement ]
155
- );
167
+ useLayoutEffect( () => {
168
+ setElement( targetElement );
169
+ if ( ! targetElement ) {
170
+ setIndicatorPosition( NULL_ELEMENT_OFFSET_RECT );
171
+ }
172
+ }, [ setElement, targetElement ] );
156
173
 
157
174
  return indicatorPosition;
158
175
  }
@@ -2,11 +2,8 @@
2
2
  /**
3
3
  * WordPress dependencies
4
4
  */
5
- import { useRef, useEffect } from '@wordpress/element';
6
- /**
7
- * Internal dependencies
8
- */
9
- import { useEvent } from './use-event';
5
+ import { useEvent } from '@wordpress/compose';
6
+ import { useRef, useLayoutEffect } from '@wordpress/element';
10
7
 
11
8
  /**
12
9
  * Context object for the `onUpdate` callback of `useOnValueUpdate`.
@@ -30,7 +27,7 @@ export function useOnValueUpdate< T >(
30
27
  ) {
31
28
  const previousValueRef = useRef( value );
32
29
  const updateCallbackEvent = useEvent( onUpdate );
33
- useEffect( () => {
30
+ useLayoutEffect( () => {
34
31
  if ( previousValueRef.current !== value ) {
35
32
  updateCallbackEvent( {
36
33
  previousValue: previousValueRef.current,