@wordpress/components 19.10.0 → 19.11.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 (420) hide show
  1. package/CHANGELOG.md +24 -6
  2. package/build/border-box-control/border-box-control/component.js +22 -7
  3. package/build/border-box-control/border-box-control/component.js.map +1 -1
  4. package/build/border-box-control/border-box-control-linked-button/hook.js +3 -2
  5. package/build/border-box-control/border-box-control-linked-button/hook.js.map +1 -1
  6. package/build/border-box-control/border-box-control-split-controls/component.js +21 -8
  7. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  8. package/build/border-box-control/border-box-control-visualizer/hook.js +3 -2
  9. package/build/border-box-control/border-box-control-visualizer/hook.js.map +1 -1
  10. package/build/border-box-control/styles.js +11 -15
  11. package/build/border-box-control/styles.js.map +1 -1
  12. package/build/border-control/border-control/component.js +5 -3
  13. package/build/border-control/border-control/component.js.map +1 -1
  14. package/build/border-control/border-control/hook.js +6 -3
  15. package/build/border-control/border-control/hook.js.map +1 -1
  16. package/build/border-control/border-control-dropdown/component.js +6 -2
  17. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  18. package/build/border-control/border-control-dropdown/hook.js +5 -5
  19. package/build/border-control/border-control-dropdown/hook.js.map +1 -1
  20. package/build/border-control/styles.js +58 -29
  21. package/build/border-control/styles.js.map +1 -1
  22. package/build/button/index.native.js +16 -2
  23. package/build/button/index.native.js.map +1 -1
  24. package/build/button-group/index.js +24 -7
  25. package/build/button-group/index.js.map +1 -1
  26. package/build/{flyout → button-group}/types.js +0 -0
  27. package/build/button-group/types.js.map +1 -0
  28. package/build/checkbox-control/index.js +34 -7
  29. package/build/checkbox-control/index.js.map +1 -1
  30. package/build/checkbox-control/types.js +6 -0
  31. package/build/checkbox-control/types.js.map +1 -0
  32. package/build/color-palette/index.js +5 -12
  33. package/build/color-palette/index.js.map +1 -1
  34. package/build/date-time/date.js +43 -19
  35. package/build/date-time/date.js.map +1 -1
  36. package/build/date-time/index.js +28 -3
  37. package/build/date-time/index.js.map +1 -1
  38. package/build/date-time/time.js +42 -40
  39. package/build/date-time/time.js.map +1 -1
  40. package/build/date-time/timezone.js +4 -3
  41. package/build/date-time/timezone.js.map +1 -1
  42. package/build/date-time/types.js +6 -0
  43. package/build/date-time/types.js.map +1 -0
  44. package/build/date-time/utils.js +6 -4
  45. package/build/date-time/utils.js.map +1 -1
  46. package/build/disabled/index.js +1 -1
  47. package/build/disabled/index.js.map +1 -1
  48. package/build/draggable/index.native.js +223 -0
  49. package/build/draggable/index.native.js.map +1 -0
  50. package/build/dropdown/index.js +7 -5
  51. package/build/dropdown/index.js.map +1 -1
  52. package/build/focal-point-picker/index.native.js +3 -3
  53. package/build/focal-point-picker/index.native.js.map +1 -1
  54. package/build/index.js +0 -8
  55. package/build/index.js.map +1 -1
  56. package/build/index.native.js +16 -0
  57. package/build/index.native.js.map +1 -1
  58. package/build/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js +1 -1
  59. package/build/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js.map +1 -1
  60. package/build/mobile/bottom-sheet/index.native.js +1 -1
  61. package/build/mobile/bottom-sheet/index.native.js.map +1 -1
  62. package/build/mobile/bottom-sheet-select-control/index.native.js +3 -2
  63. package/build/mobile/bottom-sheet-select-control/index.native.js.map +1 -1
  64. package/build/mobile/html-text-input/index.native.js +19 -8
  65. package/build/mobile/html-text-input/index.native.js.map +1 -1
  66. package/build/mobile/keyboard-aware-flat-list/index.android.js +28 -5
  67. package/build/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  68. package/build/mobile/keyboard-aware-flat-list/index.ios.js +47 -24
  69. package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  70. package/build/palette-edit/index.js +38 -7
  71. package/build/palette-edit/index.js.map +1 -1
  72. package/build/popover/index.js +223 -277
  73. package/build/popover/index.js.map +1 -1
  74. package/build/resizable-box/resize-tooltip/utils.js +5 -8
  75. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  76. package/build/sandbox/index.native.js +1 -1
  77. package/build/sandbox/index.native.js.map +1 -1
  78. package/build/select-control/styles/select-control-styles.js +14 -11
  79. package/build/select-control/styles/select-control-styles.js.map +1 -1
  80. package/build/toggle-group-control/toggle-group-control/component.js +1 -3
  81. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  82. package/build/tooltip/index.js +2 -2
  83. package/build/tooltip/index.js.map +1 -1
  84. package/build-module/border-box-control/border-box-control/component.js +22 -7
  85. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  86. package/build-module/border-box-control/border-box-control-linked-button/hook.js +3 -2
  87. package/build-module/border-box-control/border-box-control-linked-button/hook.js.map +1 -1
  88. package/build-module/border-box-control/border-box-control-split-controls/component.js +21 -8
  89. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  90. package/build-module/border-box-control/border-box-control-visualizer/hook.js +3 -2
  91. package/build-module/border-box-control/border-box-control-visualizer/hook.js.map +1 -1
  92. package/build-module/border-box-control/styles.js +9 -15
  93. package/build-module/border-box-control/styles.js.map +1 -1
  94. package/build-module/border-control/border-control/component.js +5 -3
  95. package/build-module/border-control/border-control/component.js.map +1 -1
  96. package/build-module/border-control/border-control/hook.js +6 -3
  97. package/build-module/border-control/border-control/hook.js.map +1 -1
  98. package/build-module/border-control/border-control-dropdown/component.js +6 -2
  99. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  100. package/build-module/border-control/border-control-dropdown/hook.js +5 -5
  101. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
  102. package/build-module/border-control/styles.js +56 -29
  103. package/build-module/border-control/styles.js.map +1 -1
  104. package/build-module/button/index.native.js +16 -3
  105. package/build-module/button/index.native.js.map +1 -1
  106. package/build-module/button-group/index.js +27 -7
  107. package/build-module/button-group/index.js.map +1 -1
  108. package/build-module/{flyout → button-group}/types.js +0 -0
  109. package/build-module/{flyout → button-group}/types.js.map +0 -0
  110. package/build-module/checkbox-control/index.js +31 -7
  111. package/build-module/checkbox-control/index.js.map +1 -1
  112. package/build-module/checkbox-control/types.js +2 -0
  113. package/{build/flyout → build-module/checkbox-control}/types.js.map +0 -0
  114. package/build-module/color-palette/index.js +5 -11
  115. package/build-module/color-palette/index.js.map +1 -1
  116. package/build-module/date-time/date.js +44 -19
  117. package/build-module/date-time/date.js.map +1 -1
  118. package/build-module/date-time/index.js +28 -4
  119. package/build-module/date-time/index.js.map +1 -1
  120. package/build-module/date-time/time.js +43 -41
  121. package/build-module/date-time/time.js.map +1 -1
  122. package/build-module/date-time/timezone.js +4 -3
  123. package/build-module/date-time/timezone.js.map +1 -1
  124. package/build-module/date-time/types.js +2 -0
  125. package/build-module/date-time/types.js.map +1 -0
  126. package/build-module/date-time/utils.js +6 -4
  127. package/build-module/date-time/utils.js.map +1 -1
  128. package/build-module/disabled/index.js +1 -1
  129. package/build-module/disabled/index.js.map +1 -1
  130. package/build-module/draggable/index.native.js +206 -0
  131. package/build-module/draggable/index.native.js.map +1 -0
  132. package/build-module/dropdown/index.js +7 -5
  133. package/build-module/dropdown/index.js.map +1 -1
  134. package/build-module/focal-point-picker/index.native.js +3 -3
  135. package/build-module/focal-point-picker/index.native.js.map +1 -1
  136. package/build-module/index.js +0 -1
  137. package/build-module/index.js.map +1 -1
  138. package/build-module/index.native.js +2 -1
  139. package/build-module/index.native.js.map +1 -1
  140. package/build-module/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js +1 -1
  141. package/build-module/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js.map +1 -1
  142. package/build-module/mobile/bottom-sheet/index.native.js +1 -1
  143. package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
  144. package/build-module/mobile/bottom-sheet-select-control/index.native.js +3 -2
  145. package/build-module/mobile/bottom-sheet-select-control/index.native.js.map +1 -1
  146. package/build-module/mobile/html-text-input/index.native.js +20 -9
  147. package/build-module/mobile/html-text-input/index.native.js.map +1 -1
  148. package/build-module/mobile/keyboard-aware-flat-list/index.android.js +21 -5
  149. package/build-module/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
  150. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +42 -25
  151. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  152. package/build-module/palette-edit/index.js +37 -7
  153. package/build-module/palette-edit/index.js.map +1 -1
  154. package/build-module/popover/index.js +225 -279
  155. package/build-module/popover/index.js.map +1 -1
  156. package/build-module/resizable-box/resize-tooltip/utils.js +4 -5
  157. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  158. package/build-module/sandbox/index.native.js +1 -1
  159. package/build-module/sandbox/index.native.js.map +1 -1
  160. package/build-module/select-control/styles/select-control-styles.js +14 -11
  161. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  162. package/build-module/toggle-group-control/toggle-group-control/component.js +2 -3
  163. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  164. package/build-module/tooltip/index.js +2 -2
  165. package/build-module/tooltip/index.js.map +1 -1
  166. package/build-style/style-rtl.css +31 -170
  167. package/build-style/style.css +27 -170
  168. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  169. package/build-types/border-box-control/border-box-control/hook.d.ts +3 -1
  170. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  171. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -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/border-box-control-split-controls/hook.d.ts +3 -1
  174. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
  175. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -1
  176. package/build-types/border-box-control/styles.d.ts +2 -2
  177. package/build-types/border-box-control/styles.d.ts.map +1 -1
  178. package/build-types/border-box-control/types.d.ts +40 -13
  179. package/build-types/border-box-control/types.d.ts.map +1 -1
  180. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  181. package/build-types/border-control/border-control/hook.d.ts +2 -1
  182. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  183. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  184. package/build-types/border-control/border-control-dropdown/hook.d.ts +1 -0
  185. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  186. package/build-types/border-control/styles.d.ts +2 -1
  187. package/build-types/border-control/styles.d.ts.map +1 -1
  188. package/build-types/border-control/types.d.ts +18 -6
  189. package/build-types/border-control/types.d.ts.map +1 -1
  190. package/build-types/button-group/index.d.ts +25 -0
  191. package/build-types/button-group/index.d.ts.map +1 -0
  192. package/build-types/button-group/stories/index.d.ts +12 -0
  193. package/build-types/button-group/stories/index.d.ts.map +1 -0
  194. package/build-types/button-group/types.d.ts +11 -0
  195. package/build-types/button-group/types.d.ts.map +1 -0
  196. package/build-types/checkbox-control/index.d.ts +26 -0
  197. package/build-types/checkbox-control/index.d.ts.map +1 -0
  198. package/build-types/checkbox-control/stories/index.d.ts +13 -0
  199. package/build-types/checkbox-control/stories/index.d.ts.map +1 -0
  200. package/build-types/checkbox-control/types.d.ts +35 -0
  201. package/build-types/checkbox-control/types.d.ts.map +1 -0
  202. package/build-types/color-palette/index.d.ts.map +1 -1
  203. package/build-types/color-picker/styles.d.ts +1 -1
  204. package/build-types/date-time/date.d.ts +24 -0
  205. package/build-types/date-time/date.d.ts.map +1 -0
  206. package/build-types/date-time/index.d.ts +35 -0
  207. package/build-types/date-time/index.d.ts.map +1 -0
  208. package/build-types/date-time/stories/date.d.ts +14 -0
  209. package/build-types/date-time/stories/date.d.ts.map +1 -0
  210. package/build-types/date-time/stories/index.d.ts +14 -0
  211. package/build-types/date-time/stories/index.d.ts.map +1 -0
  212. package/build-types/date-time/stories/time.d.ts +12 -0
  213. package/build-types/date-time/stories/time.d.ts.map +1 -0
  214. package/build-types/date-time/stories/utils.d.ts +3 -0
  215. package/build-types/date-time/stories/utils.d.ts.map +1 -0
  216. package/build-types/date-time/test/date.d.ts +2 -0
  217. package/build-types/date-time/test/date.d.ts.map +1 -0
  218. package/build-types/date-time/test/time.d.ts +2 -0
  219. package/build-types/date-time/test/time.d.ts.map +1 -0
  220. package/build-types/date-time/test/utils.d.ts +2 -0
  221. package/build-types/date-time/test/utils.d.ts.map +1 -0
  222. package/build-types/date-time/time.d.ts +25 -0
  223. package/build-types/date-time/time.d.ts.map +1 -0
  224. package/build-types/date-time/timezone.d.ts +8 -0
  225. package/build-types/date-time/timezone.d.ts.map +1 -0
  226. package/build-types/date-time/types.d.ts +91 -0
  227. package/build-types/date-time/types.d.ts.map +1 -0
  228. package/build-types/date-time/utils.d.ts +15 -0
  229. package/build-types/date-time/utils.d.ts.map +1 -0
  230. package/build-types/dropdown/index.d.ts.map +1 -1
  231. package/build-types/input-control/index.d.ts +1 -1
  232. package/build-types/input-control/stories/index.d.ts +5 -5
  233. package/build-types/number-control/styles/number-control-styles.d.ts +1 -1
  234. package/build-types/popover/index.d.ts +5 -7
  235. package/build-types/popover/index.d.ts.map +1 -1
  236. package/build-types/resizable-box/index.d.ts +1 -1
  237. package/build-types/resizable-box/resize-tooltip/index.d.ts +1 -1
  238. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  239. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  240. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  241. package/build-types/tooltip/index.d.ts.map +1 -1
  242. package/package.json +19 -19
  243. package/src/autocomplete/style.scss +1 -1
  244. package/src/border-box-control/border-box-control/README.md +10 -14
  245. package/src/border-box-control/border-box-control/component.tsx +21 -4
  246. package/src/border-box-control/border-box-control-linked-button/hook.ts +10 -6
  247. package/src/border-box-control/border-box-control-split-controls/component.tsx +24 -7
  248. package/src/border-box-control/border-box-control-visualizer/hook.ts +11 -6
  249. package/src/border-box-control/stories/index.js +1 -0
  250. package/src/border-box-control/styles.ts +15 -8
  251. package/src/border-box-control/types.ts +40 -14
  252. package/src/border-control/border-control/README.md +0 -7
  253. package/src/border-control/border-control/component.tsx +4 -2
  254. package/src/border-control/border-control/hook.ts +5 -2
  255. package/src/border-control/border-control-dropdown/component.tsx +18 -11
  256. package/src/border-control/border-control-dropdown/hook.ts +7 -5
  257. package/src/border-control/stories/index.js +1 -0
  258. package/src/border-control/styles.ts +82 -22
  259. package/src/border-control/types.ts +18 -6
  260. package/src/button/index.native.js +33 -18
  261. package/src/button-group/index.tsx +47 -0
  262. package/src/button-group/stories/index.tsx +41 -0
  263. package/src/button-group/types.ts +11 -0
  264. package/src/checkbox-control/README.md +10 -8
  265. package/src/checkbox-control/{index.js → index.tsx} +49 -14
  266. package/src/checkbox-control/stories/{index.js → index.tsx} +49 -27
  267. package/src/checkbox-control/types.ts +36 -0
  268. package/src/circular-option-picker/style.scss +1 -0
  269. package/src/color-palette/index.js +6 -13
  270. package/src/color-palette/style.scss +3 -18
  271. package/src/date-time/README.md +13 -10
  272. package/src/date-time/{date.js → date.tsx} +49 -20
  273. package/src/date-time/{index.js → index.tsx} +31 -5
  274. package/src/date-time/stories/date.tsx +73 -0
  275. package/src/date-time/stories/index.tsx +75 -0
  276. package/src/date-time/stories/time.tsx +51 -0
  277. package/src/date-time/stories/utils.ts +9 -0
  278. package/src/date-time/test/{date.js → date.tsx} +3 -2
  279. package/src/date-time/test/{time.js → time.tsx} +34 -19
  280. package/src/date-time/test/{utils.js → utils.ts} +1 -1
  281. package/src/date-time/{time.js → time.tsx} +57 -46
  282. package/src/date-time/{timezone.js → timezone.tsx} +4 -3
  283. package/src/date-time/types.ts +106 -0
  284. package/src/date-time/utils.ts +20 -0
  285. package/src/disabled/index.js +1 -1
  286. package/src/draggable/index.native.js +215 -0
  287. package/src/draggable/style.native.scss +3 -0
  288. package/src/dropdown/index.js +9 -4
  289. package/src/dropdown/style.scss +1 -1
  290. package/src/focal-point-picker/index.native.js +3 -3
  291. package/src/form-file-upload/test/index.js +8 -4
  292. package/src/index.js +0 -1
  293. package/src/index.native.js +1 -0
  294. package/src/item-group/stories/index.js +22 -18
  295. package/src/mobile/bottom-sheet/bottom-sheet-navigation/navigation-screen.native.js +1 -1
  296. package/src/mobile/bottom-sheet/bottom-sheet-navigation/test/navigation-container.native.js +1 -1
  297. package/src/mobile/bottom-sheet/index.native.js +1 -1
  298. package/src/mobile/bottom-sheet-select-control/index.native.js +7 -2
  299. package/src/mobile/html-text-input/index.native.js +45 -29
  300. package/src/mobile/html-text-input/style.android.scss +1 -15
  301. package/src/mobile/html-text-input/style.ios.scss +1 -15
  302. package/src/mobile/html-text-input/{style-common.native.scss → style.scss} +16 -0
  303. package/src/mobile/keyboard-aware-flat-list/index.android.js +15 -5
  304. package/src/mobile/keyboard-aware-flat-list/index.ios.js +75 -46
  305. package/src/navigator/stories/index.js +16 -10
  306. package/src/palette-edit/index.js +37 -9
  307. package/src/palette-edit/style.scss +0 -7
  308. package/src/palette-edit/test/index.js +63 -0
  309. package/src/panel/README.md +1 -1
  310. package/src/placeholder/test/index.js +7 -0
  311. package/src/popover/README.md +7 -9
  312. package/src/popover/index.js +242 -371
  313. package/src/popover/style.scss +20 -190
  314. package/src/popover/test/__snapshots__/index.js.snap +6 -18
  315. package/src/resizable-box/resize-tooltip/utils.ts +4 -5
  316. package/src/sandbox/index.native.js +1 -1
  317. package/src/select-control/styles/select-control-styles.ts +6 -3
  318. package/src/tab-panel/style.scss +1 -1
  319. package/src/toggle-group-control/test/__snapshots__/index.js.snap +4 -10
  320. package/src/toggle-group-control/toggle-group-control/component.tsx +7 -3
  321. package/src/tooltip/index.js +8 -2
  322. package/src/tooltip/style.scss +2 -4
  323. package/src/tooltip/test/index.native.js +1 -1
  324. package/src/unit-control/test/index.tsx +84 -4
  325. package/tsconfig.json +6 -2
  326. package/tsconfig.tsbuildinfo +1 -1
  327. package/build/flyout/context.js +0 -23
  328. package/build/flyout/context.js.map +0 -1
  329. package/build/flyout/flyout/component.js +0 -106
  330. package/build/flyout/flyout/component.js.map +0 -1
  331. package/build/flyout/flyout/hook.js +0 -53
  332. package/build/flyout/flyout/hook.js.map +0 -1
  333. package/build/flyout/flyout/index.js +0 -24
  334. package/build/flyout/flyout/index.js.map +0 -1
  335. package/build/flyout/flyout-content/component.js +0 -65
  336. package/build/flyout/flyout-content/component.js.map +0 -1
  337. package/build/flyout/flyout-content/index.js +0 -16
  338. package/build/flyout/flyout-content/index.js.map +0 -1
  339. package/build/flyout/index.js +0 -16
  340. package/build/flyout/index.js.map +0 -1
  341. package/build/flyout/styles.js +0 -46
  342. package/build/flyout/styles.js.map +0 -1
  343. package/build/flyout/utils.js +0 -36
  344. package/build/flyout/utils.js.map +0 -1
  345. package/build/mobile/html-text-input/container.android.js +0 -41
  346. package/build/mobile/html-text-input/container.android.js.map +0 -1
  347. package/build/mobile/html-text-input/container.ios.js +0 -60
  348. package/build/mobile/html-text-input/container.ios.js.map +0 -1
  349. package/build/popover/utils.js +0 -322
  350. package/build/popover/utils.js.map +0 -1
  351. package/build-module/flyout/context.js +0 -11
  352. package/build-module/flyout/context.js.map +0 -1
  353. package/build-module/flyout/flyout/component.js +0 -89
  354. package/build-module/flyout/flyout/component.js.map +0 -1
  355. package/build-module/flyout/flyout/hook.js +0 -44
  356. package/build-module/flyout/flyout/hook.js.map +0 -1
  357. package/build-module/flyout/flyout/index.js +0 -3
  358. package/build-module/flyout/flyout/index.js.map +0 -1
  359. package/build-module/flyout/flyout-content/component.js +0 -51
  360. package/build-module/flyout/flyout-content/component.js.map +0 -1
  361. package/build-module/flyout/flyout-content/index.js +0 -2
  362. package/build-module/flyout/flyout-content/index.js.map +0 -1
  363. package/build-module/flyout/index.js +0 -2
  364. package/build-module/flyout/index.js.map +0 -1
  365. package/build-module/flyout/styles.js +0 -27
  366. package/build-module/flyout/styles.js.map +0 -1
  367. package/build-module/flyout/utils.js +0 -25
  368. package/build-module/flyout/utils.js.map +0 -1
  369. package/build-module/mobile/html-text-input/container.android.js +0 -29
  370. package/build-module/mobile/html-text-input/container.android.js.map +0 -1
  371. package/build-module/mobile/html-text-input/container.ios.js +0 -48
  372. package/build-module/mobile/html-text-input/container.ios.js.map +0 -1
  373. package/build-module/popover/utils.js +0 -308
  374. package/build-module/popover/utils.js.map +0 -1
  375. package/build-types/flyout/context.d.ts +0 -6
  376. package/build-types/flyout/context.d.ts.map +0 -1
  377. package/build-types/flyout/flyout/component.d.ts +0 -21
  378. package/build-types/flyout/flyout/component.d.ts.map +0 -1
  379. package/build-types/flyout/flyout/hook.d.ts +0 -270
  380. package/build-types/flyout/flyout/hook.d.ts.map +0 -1
  381. package/build-types/flyout/flyout/index.d.ts +0 -3
  382. package/build-types/flyout/flyout/index.d.ts.map +0 -1
  383. package/build-types/flyout/flyout-content/component.d.ts +0 -3
  384. package/build-types/flyout/flyout-content/component.d.ts.map +0 -1
  385. package/build-types/flyout/flyout-content/index.d.ts +0 -2
  386. package/build-types/flyout/flyout-content/index.d.ts.map +0 -1
  387. package/build-types/flyout/index.d.ts +0 -2
  388. package/build-types/flyout/index.d.ts.map +0 -1
  389. package/build-types/flyout/styles.d.ts +0 -22
  390. package/build-types/flyout/styles.d.ts.map +0 -1
  391. package/build-types/flyout/types.d.ts +0 -80
  392. package/build-types/flyout/types.d.ts.map +0 -1
  393. package/build-types/flyout/utils.d.ts +0 -8
  394. package/build-types/flyout/utils.d.ts.map +0 -1
  395. package/build-types/popover/utils.d.ts +0 -70
  396. package/build-types/popover/utils.d.ts.map +0 -1
  397. package/src/button-group/index.js +0 -17
  398. package/src/button-group/stories/index.js +0 -21
  399. package/src/date-time/stories/date.js +0 -17
  400. package/src/date-time/stories/index.js +0 -91
  401. package/src/date-time/stories/time.js +0 -32
  402. package/src/date-time/utils.js +0 -18
  403. package/src/flyout/context.js +0 -10
  404. package/src/flyout/flyout/README.md +0 -98
  405. package/src/flyout/flyout/component.js +0 -111
  406. package/src/flyout/flyout/hook.js +0 -45
  407. package/src/flyout/flyout/index.js +0 -2
  408. package/src/flyout/flyout-content/component.js +0 -53
  409. package/src/flyout/flyout-content/index.js +0 -1
  410. package/src/flyout/index.js +0 -1
  411. package/src/flyout/stories/index.js +0 -24
  412. package/src/flyout/styles.ts +0 -41
  413. package/src/flyout/test/__snapshots__/index.js.snap +0 -186
  414. package/src/flyout/test/index.js +0 -103
  415. package/src/flyout/types.ts +0 -84
  416. package/src/flyout/utils.js +0 -23
  417. package/src/mobile/html-text-input/container.android.js +0 -23
  418. package/src/mobile/html-text-input/container.ios.js +0 -50
  419. package/src/popover/test/utils.js +0 -304
  420. package/src/popover/utils.js +0 -396
@@ -3,31 +3,39 @@
3
3
  * External dependencies
4
4
  */
5
5
  import classnames from 'classnames';
6
+ import {
7
+ useFloating,
8
+ flip,
9
+ shift,
10
+ autoUpdate,
11
+ arrow,
12
+ offset as offsetMiddleware,
13
+ limitShift,
14
+ size,
15
+ } from '@floating-ui/react-dom';
6
16
 
7
17
  /**
8
18
  * WordPress dependencies
9
19
  */
10
20
  import {
11
21
  useRef,
12
- useState,
13
22
  useLayoutEffect,
14
23
  forwardRef,
15
24
  createContext,
16
25
  useContext,
26
+ useMemo,
17
27
  } from '@wordpress/element';
18
- import { getRectangleFromRange } from '@wordpress/dom';
19
28
  import {
20
29
  useViewportMatch,
21
- useResizeObserver,
22
30
  useMergeRefs,
23
31
  __experimentalUseDialog as useDialog,
24
32
  } from '@wordpress/compose';
25
33
  import { close } from '@wordpress/icons';
34
+ import deprecated from '@wordpress/deprecated';
26
35
 
27
36
  /**
28
37
  * Internal dependencies
29
38
  */
30
- import { computePopoverPosition, offsetIframe } from './utils';
31
39
  import Button from '../button';
32
40
  import ScrollLock from '../scroll-lock';
33
41
  import { Slot, Fill, useSlot } from '../slot-fill';
@@ -42,405 +50,156 @@ const SLOT_NAME = 'Popover';
42
50
 
43
51
  const slotNameContext = createContext();
44
52
 
45
- function computeAnchorRect(
46
- anchorRefFallback,
47
- anchorRect,
48
- getAnchorRect,
49
- anchorRef = false,
50
- container
51
- ) {
52
- if ( anchorRect ) {
53
- return anchorRect;
54
- }
55
-
56
- if ( getAnchorRect ) {
57
- if ( ! anchorRefFallback.current ) {
58
- return;
59
- }
60
-
61
- const rect = getAnchorRect( anchorRefFallback.current );
62
- return offsetIframe(
63
- rect,
64
- rect.ownerDocument || anchorRefFallback.current.ownerDocument,
65
- container
66
- );
67
- }
53
+ const positionToPlacement = ( position ) => {
54
+ const [ x, y, z ] = position.split( ' ' );
68
55
 
69
- if ( anchorRef !== false ) {
70
- if (
71
- ! anchorRef ||
72
- ! window.Range ||
73
- ! window.Element ||
74
- ! window.DOMRect
75
- ) {
76
- return;
56
+ if ( [ 'top', 'bottom' ].includes( x ) ) {
57
+ let suffix = '';
58
+ if ( ( !! z && z === 'left' ) || y === 'right' ) {
59
+ suffix = '-start';
60
+ } else if ( ( !! z && z === 'right' ) || y === 'left' ) {
61
+ suffix = '-end';
77
62
  }
78
-
79
- // Duck-type to check if `anchorRef` is an instance of Range
80
- // `anchorRef instanceof window.Range` checks will break across document boundaries
81
- // such as in an iframe.
82
- if ( typeof anchorRef?.cloneRange === 'function' ) {
83
- return offsetIframe(
84
- getRectangleFromRange( anchorRef ),
85
- anchorRef.endContainer.ownerDocument,
86
- container
87
- );
88
- }
89
-
90
- // Duck-type to check if `anchorRef` is an instance of Element
91
- // `anchorRef instanceof window.Element` checks will break across document boundaries
92
- // such as in an iframe.
93
- if ( typeof anchorRef?.getBoundingClientRect === 'function' ) {
94
- const rect = offsetIframe(
95
- anchorRef.getBoundingClientRect(),
96
- anchorRef.ownerDocument,
97
- container
98
- );
99
-
100
- return rect;
101
- }
102
-
103
- const { top, bottom } = anchorRef;
104
- const topRect = top.getBoundingClientRect();
105
- const bottomRect = bottom.getBoundingClientRect();
106
-
107
- return offsetIframe(
108
- new window.DOMRect(
109
- topRect.left,
110
- topRect.top,
111
- topRect.width,
112
- bottomRect.bottom - topRect.top
113
- ),
114
- top.ownerDocument,
115
- container
116
- );
117
- }
118
-
119
- if ( ! anchorRefFallback.current ) {
120
- return;
63
+ return x + suffix;
121
64
  }
122
65
 
123
- const { parentNode } = anchorRefFallback.current;
124
-
125
- return offsetIframe(
126
- parentNode.getBoundingClientRect(),
127
- parentNode.ownerDocument,
128
- container
129
- );
130
- }
66
+ return y;
67
+ };
131
68
 
132
- /**
133
- * Sets or removes an element attribute.
134
- *
135
- * @param {Element} element The element to modify.
136
- * @param {string} name The attribute name to set or remove.
137
- * @param {?string} value The value to set. A falsy value will remove the
138
- * attribute.
139
- */
140
- function setAttribute( element, name, value ) {
141
- if ( ! value ) {
142
- if ( element.hasAttribute( name ) ) {
143
- element.removeAttribute( name );
69
+ const placementToAnimationOrigin = ( placement ) => {
70
+ const [ a, b ] = placement.split( '-' );
71
+
72
+ let x, y;
73
+ if ( a === 'top' || a === 'bottom' ) {
74
+ x = a === 'top' ? 'bottom' : 'top';
75
+ y = 'middle';
76
+ if ( b === 'start' ) {
77
+ y = 'left';
78
+ } else if ( b === 'end' ) {
79
+ y = 'right';
144
80
  }
145
- } else if ( element.getAttribute( name ) !== value ) {
146
- element.setAttribute( name, value );
147
81
  }
148
- }
149
-
150
- /**
151
- * Sets or removes an element style property.
152
- *
153
- * @param {Element} element The element to modify.
154
- * @param {string} property The property to set or remove.
155
- * @param {?string} value The value to set. A falsy value will remove the
156
- * property.
157
- */
158
- function setStyle( element, property, value = '' ) {
159
- if ( element.style[ property ] !== value ) {
160
- element.style[ property ] = value;
161
- }
162
- }
163
82
 
164
- /**
165
- * Sets or removes an element class.
166
- *
167
- * @param {Element} element The element to modify.
168
- * @param {string} name The class to set or remove.
169
- * @param {boolean} toggle True to set the class, false to remove.
170
- */
171
- function setClass( element, name, toggle ) {
172
- if ( toggle ) {
173
- if ( ! element.classList.contains( name ) ) {
174
- element.classList.add( name );
83
+ if ( a === 'left' || a === 'right' ) {
84
+ x = 'center';
85
+ y = a === 'left' ? 'right' : 'left';
86
+ if ( b === 'start' ) {
87
+ x = 'top';
88
+ } else if ( b === 'end' ) {
89
+ x = 'bottom';
175
90
  }
176
- } else if ( element.classList.contains( name ) ) {
177
- element.classList.remove( name );
178
- }
179
- }
180
-
181
- function getAnchorDocument( anchor ) {
182
- if ( ! anchor ) {
183
- return;
184
- }
185
-
186
- if ( anchor.endContainer ) {
187
- return anchor.endContainer.ownerDocument;
188
91
  }
189
92
 
190
- if ( anchor.top ) {
191
- return anchor.top.ownerDocument;
192
- }
193
-
194
- return anchor.ownerDocument;
195
- }
93
+ return x + ' ' + y;
94
+ };
196
95
 
197
96
  const Popover = (
198
97
  {
98
+ range,
99
+ animate = true,
199
100
  headerTitle,
200
101
  onClose,
201
102
  children,
202
103
  className,
203
104
  noArrow = true,
204
105
  isAlternate,
205
- // Disable reason: We generate the `...contentProps` rest as remainder
206
- // of props which aren't explicitly handled by this component.
207
- /* eslint-disable no-unused-vars */
208
- position = 'bottom right',
209
- range,
106
+ position,
107
+ placement = 'bottom-start',
108
+ offset,
210
109
  focusOnMount = 'firstElement',
211
110
  anchorRef,
212
111
  anchorRect,
213
112
  getAnchorRect,
214
113
  expandOnMobile,
215
- animate = true,
216
114
  onFocusOutside,
217
- __unstableStickyBoundaryElement,
218
115
  __unstableSlotName = SLOT_NAME,
219
116
  __unstableObserveElement,
220
- __unstableBoundaryParent,
221
117
  __unstableForcePosition,
222
- __unstableForceXAlignment,
223
- __unstableEditorCanvasWrapper,
224
- /* eslint-enable no-unused-vars */
225
118
  ...contentProps
226
119
  },
227
120
  ref
228
121
  ) => {
229
- const anchorRefFallback = useRef( null );
230
- const contentRef = useRef( null );
231
- const containerRef = useRef();
122
+ if ( range ) {
123
+ deprecated( 'range prop in Popover component', {
124
+ since: '6.1',
125
+ version: '6.3',
126
+ } );
127
+ }
128
+
129
+ const arrowRef = useRef( null );
232
130
  const isMobileViewport = useViewportMatch( 'medium', '<' );
233
- const [ animateOrigin, setAnimateOrigin ] = useState();
234
- const slotName = useContext( slotNameContext ) || __unstableSlotName;
235
- const slot = useSlot( slotName );
236
131
  const isExpanded = expandOnMobile && isMobileViewport;
237
- const [ containerResizeListener, contentSize ] = useResizeObserver();
238
- noArrow = isExpanded || noArrow;
239
-
240
- useLayoutEffect( () => {
241
- if ( isExpanded ) {
242
- setClass( containerRef.current, 'is-without-arrow', noArrow );
243
- setClass( containerRef.current, 'is-alternate', isAlternate );
244
- setAttribute( containerRef.current, 'data-x-axis' );
245
- setAttribute( containerRef.current, 'data-y-axis' );
246
- setStyle( containerRef.current, 'top' );
247
- setStyle( containerRef.current, 'left' );
248
- setStyle( contentRef.current, 'maxHeight' );
249
- setStyle( contentRef.current, 'maxWidth' );
250
- return;
132
+ const hasArrow = ! isExpanded && ! noArrow;
133
+ const usedPlacement = position
134
+ ? positionToPlacement( position )
135
+ : placement;
136
+
137
+ /**
138
+ * Offsets the the position of the popover when the anchor is inside an iframe.
139
+ */
140
+ const frameOffset = useMemo( () => {
141
+ let ownerDocument = document;
142
+ if ( anchorRef?.top ) {
143
+ ownerDocument = anchorRef?.top.ownerDocument;
144
+ } else if ( anchorRef?.startContainer ) {
145
+ ownerDocument = anchorRef.startContainer.ownerDocument;
146
+ } else if ( anchorRef?.current ) {
147
+ ownerDocument = anchorRef.current.ownerDocument;
148
+ } else if ( anchorRef ) {
149
+ // This one should be deprecated.
150
+ ownerDocument = anchorRef.ownerDocument;
151
+ } else if ( anchorRect && anchorRect?.ownerDocument ) {
152
+ ownerDocument = anchorRect.ownerDocument;
153
+ } else if ( getAnchorRect ) {
154
+ ownerDocument = getAnchorRect()?.ownerDocument ?? document;
251
155
  }
252
156
 
253
- const refresh = () => {
254
- if ( ! containerRef.current || ! contentRef.current ) {
255
- return;
256
- }
257
-
258
- let anchor = computeAnchorRect(
259
- anchorRefFallback,
260
- anchorRect,
261
- getAnchorRect,
262
- anchorRef,
263
- containerRef.current
264
- );
265
-
266
- if ( ! anchor ) {
267
- return;
268
- }
269
-
270
- const { offsetParent, ownerDocument } = containerRef.current;
271
-
272
- let relativeOffsetTop = 0;
273
-
274
- // If there is a positioned ancestor element that is not the body,
275
- // subtract the position from the anchor rect. If the position of
276
- // the popover is fixed, the offset parent is null or the body
277
- // element, in which case the position is relative to the viewport.
278
- // See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent
279
- if ( offsetParent && offsetParent !== ownerDocument.body ) {
280
- const offsetParentRect = offsetParent.getBoundingClientRect();
281
-
282
- relativeOffsetTop = offsetParentRect.top;
283
- anchor = new window.DOMRect(
284
- anchor.left - offsetParentRect.left,
285
- anchor.top - offsetParentRect.top,
286
- anchor.width,
287
- anchor.height
288
- );
289
- }
290
-
291
- let boundaryElement;
292
- if ( __unstableBoundaryParent ) {
293
- boundaryElement = containerRef.current.parentElement;
294
- }
295
-
296
- const usedContentSize = ! contentSize.height
297
- ? contentRef.current.getBoundingClientRect()
298
- : contentSize;
299
-
300
- const {
301
- popoverTop,
302
- popoverLeft,
303
- xAxis,
304
- yAxis,
305
- contentHeight,
306
- contentWidth,
307
- } = computePopoverPosition(
308
- anchor,
309
- usedContentSize,
310
- position,
311
- __unstableStickyBoundaryElement,
312
- containerRef.current,
313
- relativeOffsetTop,
314
- boundaryElement,
315
- __unstableForcePosition,
316
- __unstableForceXAlignment,
317
- __unstableEditorCanvasWrapper
318
- );
319
-
320
- if (
321
- typeof popoverTop === 'number' &&
322
- typeof popoverLeft === 'number'
323
- ) {
324
- setStyle( containerRef.current, 'top', popoverTop + 'px' );
325
- setStyle( containerRef.current, 'left', popoverLeft + 'px' );
326
- }
327
-
328
- setClass(
329
- containerRef.current,
330
- 'is-without-arrow',
331
- noArrow || ( xAxis === 'center' && yAxis === 'middle' )
332
- );
333
- setClass( containerRef.current, 'is-alternate', isAlternate );
334
- setAttribute( containerRef.current, 'data-x-axis', xAxis );
335
- setAttribute( containerRef.current, 'data-y-axis', yAxis );
336
- setStyle(
337
- contentRef.current,
338
- 'maxHeight',
339
- typeof contentHeight === 'number' ? contentHeight + 'px' : ''
340
- );
341
- setStyle(
342
- contentRef.current,
343
- 'maxWidth',
344
- typeof contentWidth === 'number' ? contentWidth + 'px' : ''
345
- );
346
-
347
- // Compute the animation position.
348
- const yAxisMapping = {
349
- top: 'bottom',
350
- bottom: 'top',
351
- };
352
- const xAxisMapping = {
353
- left: 'right',
354
- right: 'left',
355
- };
356
- const animateYAxis = yAxisMapping[ yAxis ] || 'middle';
357
- const animateXAxis = xAxisMapping[ xAxis ] || 'center';
358
-
359
- setAnimateOrigin( animateXAxis + ' ' + animateYAxis );
360
- };
361
-
362
- refresh();
363
-
364
- const { ownerDocument } = containerRef.current;
365
157
  const { defaultView } = ownerDocument;
158
+ const { frameElement } = defaultView;
366
159
 
367
- /*
368
- * There are sometimes we need to reposition or resize the popover that
369
- * are not handled by the resize/scroll window events (i.e. CSS changes
370
- * in the layout that changes the position of the anchor).
371
- *
372
- * For these situations, we refresh the popover every 0.5s
373
- */
374
- const intervalHandle = defaultView.setInterval( refresh, 500 );
375
-
376
- let rafId;
377
-
378
- const refreshOnAnimationFrame = () => {
379
- defaultView.cancelAnimationFrame( rafId );
380
- rafId = defaultView.requestAnimationFrame( refresh );
381
- };
382
-
383
- // Sometimes a click trigger a layout change that affects the popover
384
- // position. This is an opportunity to immediately refresh rather than
385
- // at the interval.
386
- defaultView.addEventListener( 'click', refreshOnAnimationFrame );
387
- defaultView.addEventListener( 'resize', refresh );
388
- defaultView.addEventListener( 'scroll', refresh, true );
389
-
390
- const anchorDocument = getAnchorDocument( anchorRef );
391
-
392
- // If the anchor is within an iframe, the popover position also needs
393
- // to refrest when the iframe content is scrolled or resized.
394
- if ( anchorDocument && anchorDocument !== ownerDocument ) {
395
- anchorDocument.defaultView.addEventListener( 'resize', refresh );
396
- anchorDocument.defaultView.addEventListener(
397
- 'scroll',
398
- refresh,
399
- true
400
- );
160
+ if ( ! frameElement || ownerDocument === document ) {
161
+ return undefined;
401
162
  }
402
163
 
403
- let observer;
404
-
405
- if ( __unstableObserveElement ) {
406
- observer = new defaultView.MutationObserver( refresh );
407
- observer.observe( __unstableObserveElement, { attributes: true } );
408
- }
409
-
410
- return () => {
411
- defaultView.clearInterval( intervalHandle );
412
- defaultView.removeEventListener( 'resize', refresh );
413
- defaultView.removeEventListener( 'scroll', refresh, true );
414
- defaultView.removeEventListener( 'click', refreshOnAnimationFrame );
415
- defaultView.cancelAnimationFrame( rafId );
416
-
417
- if ( anchorDocument && anchorDocument !== ownerDocument ) {
418
- anchorDocument.defaultView?.removeEventListener(
419
- 'resize',
420
- refresh
421
- );
422
- anchorDocument.defaultView?.removeEventListener(
423
- 'scroll',
424
- refresh,
425
- true
426
- );
427
- }
428
-
429
- if ( observer ) {
430
- observer.disconnect();
431
- }
164
+ const iframeRect = frameElement.getBoundingClientRect();
165
+ return {
166
+ name: 'iframeOffset',
167
+ fn( { x, y } ) {
168
+ return {
169
+ x: x + iframeRect.left,
170
+ y: y + iframeRect.top,
171
+ };
172
+ },
432
173
  };
433
- }, [
434
- isExpanded,
435
- anchorRect,
436
- getAnchorRect,
437
- anchorRef,
438
- position,
439
- contentSize,
440
- __unstableStickyBoundaryElement,
441
- __unstableObserveElement,
442
- __unstableBoundaryParent,
443
- ] );
174
+ }, [ anchorRef, anchorRect, getAnchorRect ] );
175
+
176
+ const middlewares = [
177
+ frameOffset,
178
+ offset ? offsetMiddleware( offset ) : undefined,
179
+ __unstableForcePosition ? undefined : flip(),
180
+ __unstableForcePosition
181
+ ? undefined
182
+ : size( {
183
+ apply( { width, height } ) {
184
+ if ( ! refs.floating.current ) return;
185
+
186
+ Object.assign( refs.floating.current.firstChild.style, {
187
+ maxWidth: `${ width }px`,
188
+ maxHeight: `${ height }px`,
189
+ overflow: 'auto',
190
+ } );
191
+ },
192
+ } ),
193
+ ,
194
+ shift( {
195
+ crossAxis: true,
196
+ limiter: limitShift(),
197
+ } ),
198
+ hasArrow ? arrow( { element: arrowRef } ) : undefined,
199
+ ].filter( ( m ) => !! m );
200
+ const anchorRefFallback = useRef( null );
201
+ const slotName = useContext( slotNameContext ) || __unstableSlotName;
202
+ const slot = useSlot( slotName );
444
203
 
445
204
  const onDialogClose = ( type, event ) => {
446
205
  // Ideally the popover should have just a single onClose prop and
@@ -458,14 +217,104 @@ const Popover = (
458
217
  onClose: onDialogClose,
459
218
  } );
460
219
 
461
- const mergedRefs = useMergeRefs( [ containerRef, dialogRef, ref ] );
220
+ const {
221
+ x,
222
+ y,
223
+ reference,
224
+ floating,
225
+ strategy,
226
+ refs,
227
+ update,
228
+ placement: placementData,
229
+ middlewareData: { arrow: arrowData = {} },
230
+ } = useFloating( {
231
+ placement: usedPlacement,
232
+ middleware: middlewares,
233
+ } );
234
+ const staticSide = {
235
+ top: 'bottom',
236
+ right: 'left',
237
+ bottom: 'top',
238
+ left: 'right',
239
+ }[ placementData.split( '-' )[ 0 ] ];
240
+ const mergedRefs = useMergeRefs( [ floating, dialogRef, ref ] );
241
+
242
+ // Updates references
243
+ useLayoutEffect( () => {
244
+ // No ref or position have been passed
245
+ let usedRef;
246
+ if ( anchorRef?.top ) {
247
+ usedRef = {
248
+ getBoundingClientRect() {
249
+ const topRect = anchorRef.top.getBoundingClientRect();
250
+ const bottomRect = anchorRef.bottom.getBoundingClientRect();
251
+ return new window.DOMRect(
252
+ topRect.x,
253
+ topRect.y,
254
+ topRect.width,
255
+ bottomRect.bottom - topRect.top
256
+ );
257
+ },
258
+ };
259
+ } else if ( anchorRef?.current ) {
260
+ usedRef = anchorRef.current;
261
+ } else if ( anchorRef ) {
262
+ usedRef = anchorRef;
263
+ } else if ( anchorRect ) {
264
+ usedRef = {
265
+ getBoundingClientRect() {
266
+ return anchorRect;
267
+ },
268
+ };
269
+ } else if ( getAnchorRect ) {
270
+ usedRef = {
271
+ getBoundingClientRect() {
272
+ const rect = getAnchorRect();
273
+ return {
274
+ ...rect,
275
+ x: rect.x ?? rect.left,
276
+ y: rect.y ?? rect.top,
277
+ height: rect.height ?? rect.bottom - rect.top,
278
+ width: rect.width ?? rect.right - rect.left,
279
+ };
280
+ },
281
+ };
282
+ } else if ( anchorRefFallback.current ) {
283
+ usedRef = anchorRefFallback.current;
284
+ }
285
+
286
+ if ( ! usedRef ) {
287
+ return;
288
+ }
289
+
290
+ reference( usedRef );
291
+
292
+ if ( ! refs.floating.current ) {
293
+ return;
294
+ }
295
+
296
+ return autoUpdate( usedRef, refs.floating.current, update );
297
+ }, [ anchorRef, anchorRect, getAnchorRect ] );
298
+
299
+ // This is only needed for a smoth transition when moving blocks.
300
+ useLayoutEffect( () => {
301
+ if ( ! __unstableObserveElement ) {
302
+ return;
303
+ }
304
+ const observer = new window.MutationObserver( update );
305
+ observer.observe( __unstableObserveElement, { attributes: true } );
306
+
307
+ return () => {
308
+ observer.disconnect();
309
+ };
310
+ }, [ __unstableObserveElement ] );
462
311
 
463
312
  /** @type {false | string} */
464
313
  const animateClassName =
465
- Boolean( animate && animateOrigin ) &&
314
+ !! animate &&
466
315
  getAnimateClassName( {
467
316
  type: 'appear',
468
- origin: animateOrigin,
317
+ origin: placementToAnimationOrigin( placementData ),
469
318
  } );
470
319
 
471
320
  // Disable reason: We care to capture the _bubbled_ events from inputs
@@ -481,7 +330,6 @@ const Popover = (
481
330
  animateClassName,
482
331
  {
483
332
  'is-expanded': isExpanded,
484
- 'is-without-arrow': noArrow,
485
333
  'is-alternate': isAlternate,
486
334
  }
487
335
  ) }
@@ -489,6 +337,15 @@ const Popover = (
489
337
  ref={ mergedRefs }
490
338
  { ...dialogProps }
491
339
  tabIndex="-1"
340
+ style={
341
+ isExpanded
342
+ ? undefined
343
+ : {
344
+ position: strategy,
345
+ left: Number.isNaN( x ) ? 0 : x,
346
+ top: Number.isNaN( y ) ? 0 : y,
347
+ }
348
+ }
492
349
  >
493
350
  { isExpanded && <ScrollLock /> }
494
351
  { isExpanded && (
@@ -503,12 +360,26 @@ const Popover = (
503
360
  />
504
361
  </div>
505
362
  ) }
506
- <div ref={ contentRef } className="components-popover__content">
507
- <div style={ { position: 'relative' } }>
508
- { containerResizeListener }
509
- { children }
510
- </div>
511
- </div>
363
+ <div className="components-popover__content">{ children }</div>
364
+ { hasArrow && (
365
+ <div
366
+ className="components-popover__arrow"
367
+ ref={ arrowRef }
368
+ style={ {
369
+ left:
370
+ ! arrowData?.x || Number.isNaN( arrowData?.x )
371
+ ? 0
372
+ : arrowData.x,
373
+ top:
374
+ ! arrowData?.y || Number.isNaN( arrowData?.y )
375
+ ? 0
376
+ : arrowData.y,
377
+ right: undefined,
378
+ bottom: undefined,
379
+ [ staticSide ]: '-4px',
380
+ } }
381
+ />
382
+ ) }
512
383
  </div>
513
384
  );
514
385