@wordpress/components 19.1.2 → 19.2.1-next.33ec3857e2.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 (418) hide show
  1. package/CHANGELOG.md +53 -4
  2. package/README.md +0 -1
  3. package/build/angle-picker-control/index.js +2 -0
  4. package/build/angle-picker-control/index.js.map +1 -1
  5. package/build/button/index.native.js +13 -3
  6. package/build/button/index.native.js.map +1 -1
  7. package/build/checkbox-control/index.js +1 -1
  8. package/build/checkbox-control/index.js.map +1 -1
  9. package/build/clipboard-button/index.js +1 -2
  10. package/build/clipboard-button/index.js.map +1 -1
  11. package/build/color-palette/index.js +36 -9
  12. package/build/color-palette/index.js.map +1 -1
  13. package/build/color-picker/color-display.js +4 -2
  14. package/build/color-picker/color-display.js.map +1 -1
  15. package/build/color-picker/hex-input.js +3 -1
  16. package/build/color-picker/hex-input.js.map +1 -1
  17. package/build/color-picker/input-with-slider.js +3 -1
  18. package/build/color-picker/input-with-slider.js.map +1 -1
  19. package/build/confirm-dialog/component.js +103 -0
  20. package/build/confirm-dialog/component.js.map +1 -0
  21. package/build/confirm-dialog/index.js +16 -0
  22. package/build/confirm-dialog/index.js.map +1 -0
  23. package/build/confirm-dialog/types.js +6 -0
  24. package/build/confirm-dialog/types.js.map +1 -0
  25. package/build/custom-gradient-bar/constants.js +1 -6
  26. package/build/custom-gradient-bar/constants.js.map +1 -1
  27. package/build/custom-gradient-bar/control-points.js +52 -21
  28. package/build/custom-gradient-bar/control-points.js.map +1 -1
  29. package/build/custom-gradient-bar/index.js +5 -1
  30. package/build/custom-gradient-bar/index.js.map +1 -1
  31. package/build/custom-gradient-picker/index.js +4 -1
  32. package/build/custom-gradient-picker/index.js.map +1 -1
  33. package/build/date-time/date.js +63 -86
  34. package/build/date-time/date.js.map +1 -1
  35. package/build/date-time/utils.js +32 -0
  36. package/build/date-time/utils.js.map +1 -0
  37. package/build/divider/component.js +8 -7
  38. package/build/divider/component.js.map +1 -1
  39. package/build/divider/styles.js +38 -13
  40. package/build/divider/styles.js.map +1 -1
  41. package/build/drop-zone/index.js +14 -6
  42. package/build/drop-zone/index.js.map +1 -1
  43. package/build/drop-zone/provider.js +1 -0
  44. package/build/drop-zone/provider.js.map +1 -1
  45. package/build/flyout/styles.js +2 -2
  46. package/build/flyout/styles.js.map +1 -1
  47. package/build/focusable-iframe/index.js +1 -0
  48. package/build/focusable-iframe/index.js.map +1 -1
  49. package/build/font-size-picker/index.js +10 -9
  50. package/build/font-size-picker/index.js.map +1 -1
  51. package/build/font-size-picker/utils.js +28 -17
  52. package/build/font-size-picker/utils.js.map +1 -1
  53. package/build/gradient-picker/index.js +3 -1
  54. package/build/gradient-picker/index.js.map +1 -1
  55. package/build/higher-order/with-focus-outside/index.js +2 -0
  56. package/build/higher-order/with-focus-outside/index.js.map +1 -1
  57. package/build/index.js +8 -0
  58. package/build/index.js.map +1 -1
  59. package/build/input-control/styles/input-control-styles.js +44 -32
  60. package/build/input-control/styles/input-control-styles.js.map +1 -1
  61. package/build/mobile/bottom-sheet/link-suggestion-item-cell.native.js +10 -3
  62. package/build/mobile/bottom-sheet/link-suggestion-item-cell.native.js.map +1 -1
  63. package/build/mobile/color-settings/index.native.js +4 -2
  64. package/build/mobile/color-settings/index.native.js.map +1 -1
  65. package/build/mobile/color-settings/palette.screen.native.js +7 -6
  66. package/build/mobile/color-settings/palette.screen.native.js.map +1 -1
  67. package/build/mobile/global-styles-context/utils.native.js +1 -1
  68. package/build/mobile/global-styles-context/utils.native.js.map +1 -1
  69. package/build/mobile/gridicons/index.native.js +3 -1
  70. package/build/mobile/gridicons/index.native.js.map +1 -1
  71. package/build/mobile/link-picker/index.native.js +45 -4
  72. package/build/mobile/link-picker/index.native.js.map +1 -1
  73. package/build/mobile/link-settings/index.native.js +10 -0
  74. package/build/mobile/link-settings/index.native.js.map +1 -1
  75. package/build/modal/aria-helper.js +2 -0
  76. package/build/modal/aria-helper.js.map +1 -1
  77. package/build/modal/index.js +17 -8
  78. package/build/modal/index.js.map +1 -1
  79. package/build/palette-edit/index.js +13 -11
  80. package/build/palette-edit/index.js.map +1 -1
  81. package/build/select-control/styles/select-control-styles.js +33 -9
  82. package/build/select-control/styles/select-control-styles.js.map +1 -1
  83. package/build/style-provider/index.js +2 -0
  84. package/build/style-provider/index.js.map +1 -1
  85. package/build/toggle-group-control/toggle-group-control/component.js +7 -2
  86. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  87. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +25 -14
  88. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -1
  89. package/build/toggle-group-control/toggle-group-control-option/styles.js +8 -8
  90. package/build/toggle-group-control/toggle-group-control-option/styles.js.map +1 -1
  91. package/build/tools-panel/styles.js +12 -10
  92. package/build/tools-panel/styles.js.map +1 -1
  93. package/build/tools-panel/tools-panel/component.js +6 -8
  94. package/build/tools-panel/tools-panel/component.js.map +1 -1
  95. package/build/tools-panel/tools-panel/hook.js +48 -17
  96. package/build/tools-panel/tools-panel/hook.js.map +1 -1
  97. package/build/tools-panel/tools-panel-item/hook.js +5 -1
  98. package/build/tools-panel/tools-panel-item/hook.js.map +1 -1
  99. package/build/unit-control/styles/unit-control-styles.js +23 -41
  100. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  101. package/build/z-stack/component.js.map +1 -1
  102. package/build/z-stack/styles.js +10 -8
  103. package/build/z-stack/styles.js.map +1 -1
  104. package/build-module/angle-picker-control/index.js +2 -0
  105. package/build-module/angle-picker-control/index.js.map +1 -1
  106. package/build-module/button/index.native.js +13 -3
  107. package/build-module/button/index.native.js.map +1 -1
  108. package/build-module/checkbox-control/index.js +1 -1
  109. package/build-module/checkbox-control/index.js.map +1 -1
  110. package/build-module/clipboard-button/index.js +1 -2
  111. package/build-module/clipboard-button/index.js.map +1 -1
  112. package/build-module/color-palette/index.js +34 -10
  113. package/build-module/color-palette/index.js.map +1 -1
  114. package/build-module/color-picker/color-display.js +3 -2
  115. package/build-module/color-picker/color-display.js.map +1 -1
  116. package/build-module/color-picker/hex-input.js +2 -1
  117. package/build-module/color-picker/hex-input.js.map +1 -1
  118. package/build-module/color-picker/input-with-slider.js +2 -1
  119. package/build-module/color-picker/input-with-slider.js.map +1 -1
  120. package/build-module/confirm-dialog/component.js +84 -0
  121. package/build-module/confirm-dialog/component.js.map +1 -0
  122. package/build-module/confirm-dialog/index.js +6 -0
  123. package/build-module/confirm-dialog/index.js.map +1 -0
  124. package/build-module/confirm-dialog/types.js +2 -0
  125. package/build-module/confirm-dialog/types.js.map +1 -0
  126. package/build-module/custom-gradient-bar/constants.js +0 -4
  127. package/build-module/custom-gradient-bar/constants.js.map +1 -1
  128. package/build-module/custom-gradient-bar/control-points.js +54 -23
  129. package/build-module/custom-gradient-bar/control-points.js.map +1 -1
  130. package/build-module/custom-gradient-bar/index.js +5 -1
  131. package/build-module/custom-gradient-bar/index.js.map +1 -1
  132. package/build-module/custom-gradient-picker/index.js +4 -1
  133. package/build-module/custom-gradient-picker/index.js.map +1 -1
  134. package/build-module/date-time/date.js +63 -87
  135. package/build-module/date-time/date.js.map +1 -1
  136. package/build-module/date-time/utils.js +20 -0
  137. package/build-module/date-time/utils.js.map +1 -0
  138. package/build-module/divider/component.js +8 -7
  139. package/build-module/divider/component.js.map +1 -1
  140. package/build-module/divider/styles.js +37 -13
  141. package/build-module/divider/styles.js.map +1 -1
  142. package/build-module/drop-zone/index.js +14 -6
  143. package/build-module/drop-zone/index.js.map +1 -1
  144. package/build-module/drop-zone/provider.js +1 -0
  145. package/build-module/drop-zone/provider.js.map +1 -1
  146. package/build-module/flyout/styles.js +2 -2
  147. package/build-module/flyout/styles.js.map +1 -1
  148. package/build-module/focusable-iframe/index.js +1 -0
  149. package/build-module/focusable-iframe/index.js.map +1 -1
  150. package/build-module/font-size-picker/index.js +10 -9
  151. package/build-module/font-size-picker/index.js.map +1 -1
  152. package/build-module/font-size-picker/utils.js +28 -17
  153. package/build-module/font-size-picker/utils.js.map +1 -1
  154. package/build-module/gradient-picker/index.js +3 -1
  155. package/build-module/gradient-picker/index.js.map +1 -1
  156. package/build-module/higher-order/with-focus-outside/index.js +1 -0
  157. package/build-module/higher-order/with-focus-outside/index.js.map +1 -1
  158. package/build-module/index.js +1 -0
  159. package/build-module/index.js.map +1 -1
  160. package/build-module/input-control/styles/input-control-styles.js +44 -32
  161. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  162. package/build-module/mobile/bottom-sheet/link-suggestion-item-cell.native.js +10 -4
  163. package/build-module/mobile/bottom-sheet/link-suggestion-item-cell.native.js.map +1 -1
  164. package/build-module/mobile/color-settings/index.native.js +4 -2
  165. package/build-module/mobile/color-settings/index.native.js.map +1 -1
  166. package/build-module/mobile/color-settings/palette.screen.native.js +7 -6
  167. package/build-module/mobile/color-settings/palette.screen.native.js.map +1 -1
  168. package/build-module/mobile/global-styles-context/utils.native.js +1 -1
  169. package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
  170. package/build-module/mobile/gridicons/index.native.js +1 -0
  171. package/build-module/mobile/gridicons/index.native.js.map +1 -1
  172. package/build-module/mobile/link-picker/index.native.js +50 -8
  173. package/build-module/mobile/link-picker/index.native.js.map +1 -1
  174. package/build-module/mobile/link-settings/index.native.js +10 -0
  175. package/build-module/mobile/link-settings/index.native.js.map +1 -1
  176. package/build-module/modal/aria-helper.js +2 -0
  177. package/build-module/modal/aria-helper.js.map +1 -1
  178. package/build-module/modal/index.js +15 -8
  179. package/build-module/modal/index.js.map +1 -1
  180. package/build-module/palette-edit/index.js +13 -11
  181. package/build-module/palette-edit/index.js.map +1 -1
  182. package/build-module/select-control/styles/select-control-styles.js +33 -9
  183. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  184. package/build-module/style-provider/index.js +1 -0
  185. package/build-module/style-provider/index.js.map +1 -1
  186. package/build-module/toggle-group-control/toggle-group-control/component.js +8 -3
  187. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  188. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js +25 -14
  189. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -1
  190. package/build-module/toggle-group-control/toggle-group-control-option/styles.js +8 -8
  191. package/build-module/toggle-group-control/toggle-group-control-option/styles.js.map +1 -1
  192. package/build-module/tools-panel/styles.js +12 -11
  193. package/build-module/tools-panel/styles.js.map +1 -1
  194. package/build-module/tools-panel/tools-panel/component.js +5 -8
  195. package/build-module/tools-panel/tools-panel/component.js.map +1 -1
  196. package/build-module/tools-panel/tools-panel/hook.js +48 -17
  197. package/build-module/tools-panel/tools-panel/hook.js.map +1 -1
  198. package/build-module/tools-panel/tools-panel-item/hook.js +5 -1
  199. package/build-module/tools-panel/tools-panel-item/hook.js.map +1 -1
  200. package/build-module/unit-control/styles/unit-control-styles.js +23 -41
  201. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  202. package/build-module/z-stack/component.js.map +1 -1
  203. package/build-module/z-stack/styles.js +13 -8
  204. package/build-module/z-stack/styles.js.map +1 -1
  205. package/build-style/style-rtl.css +34 -12
  206. package/build-style/style.css +34 -12
  207. package/build-types/base-field/hook.d.ts +16 -16
  208. package/build-types/card/card/hook.d.ts +16 -16
  209. package/build-types/card/card-body/hook.d.ts +16 -16
  210. package/build-types/card/card-divider/hook.d.ts +18 -18
  211. package/build-types/card/card-footer/hook.d.ts +17 -17
  212. package/build-types/card/card-header/hook.d.ts +16 -16
  213. package/build-types/card/card-media/hook.d.ts +16 -16
  214. package/build-types/divider/component.d.ts +8 -7
  215. package/build-types/divider/component.d.ts.map +1 -1
  216. package/build-types/divider/styles.d.ts +2 -2
  217. package/build-types/divider/styles.d.ts.map +1 -1
  218. package/build-types/divider/types.d.ts +5 -5
  219. package/build-types/divider/types.d.ts.map +1 -1
  220. package/build-types/elevation/hook.d.ts +15 -15
  221. package/build-types/flex/flex/hook.d.ts +16 -16
  222. package/build-types/flex/flex-block/hook.d.ts +16 -16
  223. package/build-types/flex/flex-item/hook.d.ts +16 -16
  224. package/build-types/flyout/flyout/hook.d.ts +17 -17
  225. package/build-types/flyout/styles.d.ts +7 -9
  226. package/build-types/flyout/styles.d.ts.map +1 -1
  227. package/build-types/grid/hook.d.ts +16 -16
  228. package/build-types/h-stack/hook.d.ts +16 -16
  229. package/build-types/heading/hook.d.ts +16 -16
  230. package/build-types/input-control/index.d.ts +1 -1
  231. package/build-types/input-control/index.d.ts.map +1 -1
  232. package/build-types/input-control/input-field.d.ts +1 -1
  233. package/build-types/input-control/input-field.d.ts.map +1 -1
  234. package/build-types/input-control/styles/input-control-styles.d.ts +1 -2
  235. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  236. package/build-types/input-control/types.d.ts +2 -1
  237. package/build-types/input-control/types.d.ts.map +1 -1
  238. package/build-types/item-group/item/hook.d.ts +16 -16
  239. package/build-types/item-group/item-group/hook.d.ts +16 -16
  240. package/build-types/number-control/styles/number-control-styles.d.ts +1 -1
  241. package/build-types/scrollable/hook.d.ts +16 -16
  242. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  243. package/build-types/select-control/types.d.ts +1 -1
  244. package/build-types/select-control/types.d.ts.map +1 -1
  245. package/build-types/spacer/hook.d.ts +16 -16
  246. package/build-types/surface/hook.d.ts +16 -16
  247. package/build-types/text/hook.d.ts +16 -16
  248. package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
  249. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +1 -1
  250. package/build-types/toggle-group-control/toggle-group-control-option/styles.d.ts.map +1 -1
  251. package/build-types/tools-panel/styles.d.ts.map +1 -1
  252. package/build-types/tools-panel/tools-panel/component.d.ts.map +1 -1
  253. package/build-types/tools-panel/tools-panel/hook.d.ts +16 -16
  254. package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
  255. package/build-types/tools-panel/tools-panel-header/hook.d.ts +16 -16
  256. package/build-types/tools-panel/tools-panel-item/hook.d.ts +16 -16
  257. package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
  258. package/build-types/tools-panel/types.d.ts +2 -1
  259. package/build-types/tools-panel/types.d.ts.map +1 -1
  260. package/build-types/truncate/hook.d.ts +16 -16
  261. package/build-types/ui/control-group/hook.d.ts +18 -18
  262. package/build-types/ui/control-label/hook.d.ts +16 -16
  263. package/build-types/ui/form-group/form-group.d.ts +4 -4
  264. package/build-types/ui/form-group/use-form-group.d.ts +55 -55
  265. package/build-types/unit-control/index.d.ts +1 -1
  266. package/build-types/unit-control/index.d.ts.map +1 -1
  267. package/build-types/unit-control/styles/unit-control-styles.d.ts +1 -0
  268. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  269. package/build-types/unit-control/types.d.ts +2 -2
  270. package/build-types/unit-control/types.d.ts.map +1 -1
  271. package/build-types/v-stack/hook.d.ts +16 -16
  272. package/build-types/z-stack/component.d.ts +1 -1
  273. package/build-types/z-stack/styles.d.ts.map +1 -1
  274. package/package.json +21 -23
  275. package/src/alignment-matrix-control/stories/index.js +1 -1
  276. package/src/angle-picker-control/index.js +2 -0
  277. package/src/base-control/stories/index.js +1 -1
  278. package/src/button/index.native.js +15 -1
  279. package/src/button/stories/index.js +1 -1
  280. package/src/button/style.scss +14 -0
  281. package/src/card/card/README.md +3 -3
  282. package/src/card/stories/index.js +1 -1
  283. package/src/card/test/__snapshots__/index.js.snap +6 -6
  284. package/src/checkbox-control/index.js +1 -1
  285. package/src/checkbox-control/stories/index.js +1 -1
  286. package/src/clipboard-button/index.js +1 -2
  287. package/src/color-indicator/stories/index.js +1 -1
  288. package/src/color-indicator/style.scss +5 -8
  289. package/src/color-palette/index.js +37 -9
  290. package/src/color-palette/stories/index.js +1 -1
  291. package/src/color-palette/style.scss +10 -1
  292. package/src/color-palette/test/__snapshots__/index.js.snap +30 -21
  293. package/src/color-picker/color-display.tsx +3 -2
  294. package/src/color-picker/hex-input.tsx +2 -1
  295. package/src/color-picker/input-with-slider.tsx +2 -1
  296. package/src/color-picker/stories/index.js +1 -1
  297. package/src/combobox-control/README.md +2 -2
  298. package/src/confirm-dialog/README.md +128 -0
  299. package/src/confirm-dialog/component.tsx +114 -0
  300. package/src/confirm-dialog/index.tsx +6 -0
  301. package/src/confirm-dialog/stories/index.js +120 -0
  302. package/src/confirm-dialog/test/index.js +302 -0
  303. package/src/confirm-dialog/types.ts +26 -0
  304. package/src/custom-gradient-bar/constants.js +0 -5
  305. package/src/custom-gradient-bar/control-points.js +40 -9
  306. package/src/custom-gradient-bar/index.js +8 -0
  307. package/src/custom-gradient-picker/index.js +9 -1
  308. package/src/custom-gradient-picker/style.scss +0 -4
  309. package/src/date-time/README.md +7 -0
  310. package/src/date-time/date.js +67 -84
  311. package/src/date-time/stories/index.js +1 -1
  312. package/src/date-time/stories/time.js +1 -1
  313. package/src/date-time/test/date.js +3 -29
  314. package/src/date-time/test/utils.js +32 -0
  315. package/src/date-time/utils.js +18 -0
  316. package/src/dimension-control/README.md +1 -1
  317. package/src/divider/README.md +33 -5
  318. package/src/divider/component.tsx +8 -7
  319. package/src/divider/stories/index.js +43 -17
  320. package/src/divider/styles.ts +53 -16
  321. package/src/divider/test/__snapshots__/index.js.snap +11 -11
  322. package/src/divider/test/index.js +4 -4
  323. package/src/divider/types.ts +5 -5
  324. package/src/drop-zone/index.js +14 -6
  325. package/src/drop-zone/provider.js +1 -0
  326. package/src/dropdown-menu/stories/index.js +1 -1
  327. package/src/duotone-picker/README.md +1 -1
  328. package/src/elevation/stories/index.js +1 -1
  329. package/src/external-link/stories/index.js +1 -1
  330. package/src/flyout/styles.ts +4 -2
  331. package/src/focusable-iframe/index.js +1 -0
  332. package/src/font-size-picker/index.js +27 -13
  333. package/src/font-size-picker/stories/index.js +63 -1
  334. package/src/font-size-picker/test/index.js +87 -0
  335. package/src/font-size-picker/test/util.js +74 -0
  336. package/src/font-size-picker/utils.js +31 -17
  337. package/src/form-token-field/stories/index.js +1 -1
  338. package/src/gradient-picker/index.js +4 -0
  339. package/src/gradient-picker/stories/index.js +1 -1
  340. package/src/grid/stories/index.js +1 -1
  341. package/src/guide/stories/index.js +1 -1
  342. package/src/higher-order/with-focus-outside/index.js +2 -0
  343. package/src/icon/stories/index.js +1 -1
  344. package/src/index.js +1 -0
  345. package/src/input-control/stories/index.js +2 -1
  346. package/src/input-control/styles/input-control-styles.tsx +16 -6
  347. package/src/input-control/types.ts +3 -1
  348. package/src/item-group/stories/index.js +84 -2
  349. package/src/menu-item/README.md +2 -2
  350. package/src/mobile/bottom-sheet/link-suggestion-item-cell.native.js +6 -2
  351. package/src/mobile/color-settings/index.native.js +2 -0
  352. package/src/mobile/color-settings/palette.screen.native.js +8 -5
  353. package/src/mobile/color-settings/style.native.scss +1 -1
  354. package/src/mobile/global-styles-context/utils.native.js +1 -1
  355. package/src/mobile/gridicons/index.native.js +3 -3
  356. package/src/mobile/inserter-button/style.native.scss +1 -0
  357. package/src/mobile/link-picker/index.native.js +41 -7
  358. package/src/mobile/link-settings/index.native.js +11 -0
  359. package/src/mobile/link-settings/test/edit.native.js +432 -0
  360. package/src/modal/README.md +10 -0
  361. package/src/modal/aria-helper.js +2 -0
  362. package/src/modal/index.js +72 -55
  363. package/src/modal/stories/index.js +6 -1
  364. package/src/modal/style.scss +9 -0
  365. package/src/modal/test/index.js +11 -0
  366. package/src/navigation/README.md +0 -9
  367. package/src/notice/stories/index.js +1 -1
  368. package/src/number-control/stories/index.js +1 -1
  369. package/src/palette-edit/index.js +15 -16
  370. package/src/palette-edit/style.scss +5 -0
  371. package/src/panel/stories/index.js +1 -1
  372. package/src/placeholder/stories/index.js +1 -1
  373. package/src/popover/stories/index.js +1 -1
  374. package/src/query-controls/README.md +138 -6
  375. package/src/radio-group/README.md +4 -1
  376. package/src/range-control/stories/index.js +1 -1
  377. package/src/resizable-box/stories/index.js +1 -1
  378. package/src/scrollable/stories/index.js +1 -1
  379. package/src/search-control/stories/index.js +1 -1
  380. package/src/select-control/stories/index.js +2 -1
  381. package/src/select-control/styles/select-control-styles.ts +25 -2
  382. package/src/select-control/types.ts +1 -1
  383. package/src/slot-fill/stories/index.js +1 -1
  384. package/src/snackbar/stories/index.js +1 -1
  385. package/src/spacer/stories/index.js +1 -1
  386. package/src/style-provider/index.js +2 -0
  387. package/src/surface/stories/index.js +1 -1
  388. package/src/tab-panel/stories/index.js +1 -1
  389. package/src/text-control/stories/index.js +1 -1
  390. package/src/text-highlight/stories/index.js +1 -1
  391. package/src/textarea-control/stories/index.js +1 -1
  392. package/src/tip/stories/index.js +1 -1
  393. package/src/toggle-control/stories/index.js +1 -1
  394. package/src/toggle-group-control/stories/index.js +1 -1
  395. package/src/toggle-group-control/toggle-group-control/component.tsx +7 -2
  396. package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +24 -9
  397. package/src/toggle-group-control/toggle-group-control-option/styles.ts +3 -0
  398. package/src/toolbar-button/stories/index.js +1 -1
  399. package/src/tools-panel/stories/index.js +237 -0
  400. package/src/tools-panel/styles.ts +41 -1
  401. package/src/tools-panel/test/index.js +234 -1
  402. package/src/tools-panel/tools-panel/README.md +9 -0
  403. package/src/tools-panel/tools-panel/component.tsx +2 -5
  404. package/src/tools-panel/tools-panel/hook.ts +50 -18
  405. package/src/tools-panel/tools-panel-item/hook.ts +5 -1
  406. package/src/tools-panel/types.ts +5 -1
  407. package/src/tooltip/stories/index.js +1 -1
  408. package/src/tree-select/stories/index.js +1 -1
  409. package/src/truncate/stories/index.js +1 -1
  410. package/src/unit-control/stories/index.js +19 -1
  411. package/src/unit-control/styles/unit-control-styles.ts +33 -46
  412. package/src/unit-control/types.ts +5 -2
  413. package/src/z-stack/README.md +1 -1
  414. package/src/z-stack/component.tsx +1 -1
  415. package/src/z-stack/stories/index.js +1 -1
  416. package/src/z-stack/styles.ts +7 -2
  417. package/tsconfig.json +6 -2
  418. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,114 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ // eslint-disable-next-line no-restricted-imports
5
+ import React, { useEffect, useState } from 'react';
6
+ // eslint-disable-next-line no-restricted-imports
7
+ import type { Ref, KeyboardEvent } from 'react';
8
+
9
+ /**
10
+ * WordPress dependencies
11
+ */
12
+ import { __ } from '@wordpress/i18n';
13
+ import { useCallback } from '@wordpress/element';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import Modal from '../modal';
19
+ import type { OwnProps, DialogInputEvent } from './types';
20
+ import {
21
+ useContextSystem,
22
+ contextConnect,
23
+ WordPressComponentProps,
24
+ } from '../ui/context';
25
+ import { Flex } from '../flex';
26
+ import Button from '../button';
27
+ import { Text } from '../text';
28
+ import { VStack } from '../v-stack';
29
+
30
+ function ConfirmDialog(
31
+ props: WordPressComponentProps< OwnProps, 'div', false >,
32
+ forwardedRef: Ref< any >
33
+ ) {
34
+ const {
35
+ isOpen: isOpenProp,
36
+ onConfirm,
37
+ onCancel,
38
+ children,
39
+ ...otherProps
40
+ } = useContextSystem( props, 'ConfirmDialog' );
41
+
42
+ const [ isOpen, setIsOpen ] = useState< boolean >();
43
+ const [ shouldSelfClose, setShouldSelfClose ] = useState< boolean >();
44
+
45
+ useEffect( () => {
46
+ // We only allow the dialog to close itself if `isOpenProp` is *not* set.
47
+ // If `isOpenProp` is set, then it (probably) means it's controlled by a
48
+ // parent component. In that case, `shouldSelfClose` might do more harm than
49
+ // good, so we disable it.
50
+ const isIsOpenSet = typeof isOpenProp !== 'undefined';
51
+ setIsOpen( isIsOpenSet ? isOpenProp : true );
52
+ setShouldSelfClose( ! isIsOpenSet );
53
+ }, [ isOpenProp ] );
54
+
55
+ const handleEvent = useCallback(
56
+ ( callback?: ( event: DialogInputEvent ) => void ) => (
57
+ event: DialogInputEvent
58
+ ) => {
59
+ callback?.( event );
60
+ if ( shouldSelfClose ) {
61
+ setIsOpen( false );
62
+ }
63
+ },
64
+ [ shouldSelfClose, setIsOpen ]
65
+ );
66
+
67
+ const handleEnter = useCallback(
68
+ ( event: KeyboardEvent< HTMLDivElement > ) => {
69
+ if ( event.key === 'Enter' ) {
70
+ handleEvent( onConfirm )( event );
71
+ }
72
+ },
73
+ [ handleEvent, onConfirm ]
74
+ );
75
+
76
+ const cancelLabel = __( 'Cancel' );
77
+ const confirmLabel = __( 'OK' );
78
+
79
+ return (
80
+ <>
81
+ { isOpen && (
82
+ <Modal
83
+ onRequestClose={ handleEvent( onCancel ) }
84
+ onKeyDown={ handleEnter }
85
+ closeButtonLabel={ cancelLabel }
86
+ isDismissible={ true }
87
+ ref={ forwardedRef }
88
+ __experimentalHideHeader
89
+ { ...otherProps }
90
+ >
91
+ <VStack spacing={ 8 }>
92
+ <Text>{ children }</Text>
93
+ <Flex direction="row" justify="flex-end">
94
+ <Button
95
+ variant="tertiary"
96
+ onClick={ handleEvent( onCancel ) }
97
+ >
98
+ { cancelLabel }
99
+ </Button>
100
+ <Button
101
+ variant="primary"
102
+ onClick={ handleEvent( onConfirm ) }
103
+ >
104
+ { confirmLabel }
105
+ </Button>
106
+ </Flex>
107
+ </VStack>
108
+ </Modal>
109
+ ) }
110
+ </>
111
+ );
112
+ }
113
+
114
+ export default contextConnect( ConfirmDialog, 'ConfirmDialog' );
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import ConfirmDialog from './component';
5
+
6
+ export { ConfirmDialog };
@@ -0,0 +1,120 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ // eslint-disable-next-line no-restricted-imports
5
+ import React, { useState } from 'react';
6
+ import { text } from '@storybook/addon-knobs';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import Button from '../../button';
12
+ import { Heading } from '../../heading';
13
+ import { ConfirmDialog } from '..';
14
+
15
+ export default {
16
+ component: ConfirmDialog,
17
+ title: 'Components (Experimental)/ConfirmDialog',
18
+ parameters: {
19
+ knobs: { disable: false },
20
+ },
21
+ };
22
+
23
+ const daText = () =>
24
+ text( 'message', 'Would you like to privately publish the post now?' );
25
+
26
+ // Simplest usage: just declare the component with the required `onConfirm` prop.
27
+ export const _default = () => {
28
+ const [ confirmVal, setConfirmVal ] = useState( "Hasn't confirmed yet" );
29
+
30
+ return (
31
+ <>
32
+ <ConfirmDialog onConfirm={ () => setConfirmVal( 'Confirmed!' ) }>
33
+ { daText() }
34
+ </ConfirmDialog>
35
+ <Heading level={ 1 }>{ confirmVal }</Heading>
36
+ </>
37
+ );
38
+ };
39
+
40
+ export const WithJSXMessage = () => {
41
+ const [ confirmVal, setConfirmVal ] = useState( "Hasn't confirmed yet" );
42
+
43
+ return (
44
+ <>
45
+ <ConfirmDialog onConfirm={ () => setConfirmVal( 'Confirmed!' ) }>
46
+ <Heading level={ 2 }>{ daText() }</Heading>
47
+ </ConfirmDialog>
48
+ <Heading level={ 1 }>{ confirmVal }</Heading>
49
+ </>
50
+ );
51
+ };
52
+
53
+ export const VeeeryLongMessage = () => {
54
+ const [ confirmVal, setConfirmVal ] = useState( "Hasn't confirmed yet" );
55
+
56
+ return (
57
+ <>
58
+ <ConfirmDialog onConfirm={ () => setConfirmVal( 'Confirmed!' ) }>
59
+ { daText().repeat( 20 ) }
60
+ </ConfirmDialog>
61
+ <Heading level={ 1 }>{ confirmVal }</Heading>
62
+ </>
63
+ );
64
+ };
65
+
66
+ export const UncontrolledAndWithExplicitOnCancel = () => {
67
+ const [ confirmVal, setConfirmVal ] = useState(
68
+ "Hasn't confirmed or cancelled yet"
69
+ );
70
+
71
+ return (
72
+ <>
73
+ <ConfirmDialog
74
+ onConfirm={ () => setConfirmVal( 'Confirmed!' ) }
75
+ onCancel={ () => setConfirmVal( 'Cancelled' ) }
76
+ >
77
+ { daText() }
78
+ </ConfirmDialog>
79
+ <Heading level={ 1 }>{ confirmVal }</Heading>
80
+ </>
81
+ );
82
+ };
83
+
84
+ // Controlled `ConfirmDialog`s require both `onConfirm` *and* `onCancel to be passed
85
+ // It's expected that the user will then use it to hide the dialog, too (see the
86
+ // `setIsOpen` calls below).
87
+ export const Controlled = () => {
88
+ const [ isOpen, setIsOpen ] = useState( false );
89
+ const [ confirmVal, setConfirmVal ] = useState(
90
+ "Hasn't confirmed or cancelled yet"
91
+ );
92
+
93
+ const handleConfirm = () => {
94
+ setConfirmVal( 'Confirmed!' );
95
+ setIsOpen( false );
96
+ };
97
+
98
+ const handleCancel = () => {
99
+ setConfirmVal( 'Cancelled' );
100
+ setIsOpen( false );
101
+ };
102
+
103
+ return (
104
+ <>
105
+ <ConfirmDialog
106
+ isOpen={ isOpen }
107
+ onConfirm={ handleConfirm }
108
+ onCancel={ handleCancel }
109
+ >
110
+ { daText() }
111
+ </ConfirmDialog>
112
+
113
+ <Heading level={ 1 }>{ confirmVal }</Heading>
114
+
115
+ <Button variant="primary" onClick={ () => setIsOpen( true ) }>
116
+ Open ConfirmDialog
117
+ </Button>
118
+ </>
119
+ );
120
+ };
@@ -0,0 +1,302 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ render,
6
+ fireEvent,
7
+ waitForElementToBeRemoved,
8
+ } from '@testing-library/react';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import { ConfirmDialog } from '..';
14
+
15
+ const noop = () => {};
16
+
17
+ describe( 'Confirm', () => {
18
+ describe( 'Confirm component', () => {
19
+ describe( 'Structure', () => {
20
+ it( 'should render correctly', () => {
21
+ const wrapper = render(
22
+ <ConfirmDialog onConfirm={ noop } onCancel={ noop }>
23
+ Are you sure?
24
+ </ConfirmDialog>
25
+ );
26
+
27
+ const dialog = wrapper.getByRole( 'dialog' );
28
+ const elementsTexts = [ 'Are you sure?', 'OK', 'Cancel' ];
29
+
30
+ expect( dialog ).toBeInTheDocument();
31
+
32
+ elementsTexts.forEach( ( txt ) => {
33
+ const el = wrapper.getByText( txt );
34
+ expect( el ).toBeInTheDocument();
35
+ } );
36
+ } );
37
+ } );
38
+
39
+ describe( 'When uncontrolled', () => {
40
+ it( 'should render', () => {
41
+ const wrapper = render(
42
+ <ConfirmDialog onConfirm={ noop } onCancel={ noop }>
43
+ Are you sure?
44
+ </ConfirmDialog>
45
+ );
46
+
47
+ const confirmDialog = wrapper.getByRole( 'dialog' );
48
+
49
+ expect( confirmDialog ).toBeInTheDocument();
50
+ } );
51
+
52
+ it( 'should not render if closed by clicking `OK`, and the `onConfirm` callback should be called', async () => {
53
+ const onConfirm = jest.fn().mockName( 'onConfirm()' );
54
+
55
+ const wrapper = render(
56
+ <ConfirmDialog onConfirm={ onConfirm }>
57
+ Are you sure?
58
+ </ConfirmDialog>
59
+ );
60
+
61
+ const confirmDialog = wrapper.getByRole( 'dialog' );
62
+ const button = wrapper.getByText( 'OK' );
63
+
64
+ fireEvent.click( button );
65
+
66
+ expect( confirmDialog ).not.toBeInTheDocument();
67
+ expect( onConfirm ).toHaveBeenCalled();
68
+ } );
69
+
70
+ it( 'should not render if closed by clicking `Cancel`, and the `onCancel` callback should be called', async () => {
71
+ const onCancel = jest.fn().mockName( 'onCancel()' );
72
+
73
+ const wrapper = render(
74
+ <ConfirmDialog onConfirm={ noop } onCancel={ onCancel }>
75
+ Are you sure?
76
+ </ConfirmDialog>
77
+ );
78
+
79
+ const confirmDialog = wrapper.getByRole( 'dialog' );
80
+ const button = wrapper.getByText( 'Cancel' );
81
+
82
+ fireEvent.click( button );
83
+
84
+ expect( confirmDialog ).not.toBeInTheDocument();
85
+ expect( onCancel ).toHaveBeenCalled();
86
+ } );
87
+
88
+ it( 'should be dismissable even if an `onCancel` callback is not provided', async () => {
89
+ const wrapper = render(
90
+ <ConfirmDialog onConfirm={ noop }>
91
+ Are you sure?
92
+ </ConfirmDialog>
93
+ );
94
+
95
+ const confirmDialog = wrapper.getByRole( 'dialog' );
96
+ const button = wrapper.getByText( 'Cancel' );
97
+
98
+ fireEvent.click( button );
99
+
100
+ expect( confirmDialog ).not.toBeInTheDocument();
101
+ } );
102
+
103
+ it( 'should not render if dialog is closed by clicking the overlay, and the `onCancel` callback should be called', async () => {
104
+ const onCancel = jest.fn().mockName( 'onCancel()' );
105
+
106
+ const wrapper = render(
107
+ <ConfirmDialog onConfirm={ noop } onCancel={ onCancel }>
108
+ Are you sure?
109
+ </ConfirmDialog>
110
+ );
111
+
112
+ const confirmDialog = wrapper.getByRole( 'dialog' );
113
+
114
+ //The overlay click is handled by detecting an onBlur from the modal frame.
115
+ fireEvent.blur( confirmDialog );
116
+
117
+ await waitForElementToBeRemoved( confirmDialog );
118
+
119
+ expect( confirmDialog ).not.toBeInTheDocument();
120
+ expect( onCancel ).toHaveBeenCalled();
121
+ } );
122
+
123
+ it( 'should not render if dialog is closed by pressing `Escape`, and the `onCancel` callback should be called', async () => {
124
+ const onCancel = jest.fn().mockName( 'onCancel()' );
125
+
126
+ const wrapper = render(
127
+ <ConfirmDialog onConfirm={ noop } onCancel={ onCancel }>
128
+ Are you sure?
129
+ </ConfirmDialog>
130
+ );
131
+
132
+ const confirmDialog = wrapper.getByRole( 'dialog' );
133
+
134
+ fireEvent.keyDown( confirmDialog, { keyCode: 27 } );
135
+
136
+ expect( confirmDialog ).not.toBeInTheDocument();
137
+ expect( onCancel ).toHaveBeenCalled();
138
+ } );
139
+
140
+ it( 'should not render if dialog is closed by pressing `Enter`, and the `onConfirm` callback should be called', async () => {
141
+ const onConfirm = jest.fn().mockName( 'onConfirm()' );
142
+
143
+ const wrapper = render(
144
+ <ConfirmDialog onConfirm={ onConfirm }>
145
+ Are you sure?
146
+ </ConfirmDialog>
147
+ );
148
+
149
+ const confirmDialog = wrapper.getByRole( 'dialog' );
150
+
151
+ fireEvent.keyDown( confirmDialog, { keyCode: 13 } );
152
+
153
+ expect( confirmDialog ).not.toBeInTheDocument();
154
+ expect( onConfirm ).toHaveBeenCalled();
155
+ } );
156
+ } );
157
+ } );
158
+
159
+ describe( 'When controlled (isOpen is not `undefined`)', () => {
160
+ it( 'should render when `isOpen` is set to `true`', async () => {
161
+ const wrapper = render(
162
+ <ConfirmDialog
163
+ isOpen={ true }
164
+ onConfirm={ noop }
165
+ onCancel={ noop }
166
+ >
167
+ Are you sure?
168
+ </ConfirmDialog>
169
+ );
170
+
171
+ const confirmDialog = wrapper.getByRole( 'dialog' );
172
+
173
+ expect( confirmDialog ).toBeInTheDocument();
174
+ } );
175
+
176
+ it( 'should not render if `isOpen` is set to false', async () => {
177
+ const wrapper = render(
178
+ <ConfirmDialog
179
+ isOpen={ false }
180
+ onConfirm={ noop }
181
+ onCancel={ noop }
182
+ >
183
+ Are you sure?
184
+ </ConfirmDialog>
185
+ );
186
+
187
+ // `queryByRole` needs to be used here because in this scenario the
188
+ // dialog is never rendered.
189
+ const confirmDialog = wrapper.queryByRole( 'dialog' );
190
+
191
+ expect( confirmDialog ).not.toBeInTheDocument();
192
+ } );
193
+
194
+ it( 'should call the `onConfirm` callback if `OK`', async () => {
195
+ const onConfirm = jest.fn().mockName( 'onConfirm()' );
196
+
197
+ const wrapper = render(
198
+ <ConfirmDialog isOpen={ true } onConfirm={ onConfirm }>
199
+ Are you sure?
200
+ </ConfirmDialog>
201
+ );
202
+
203
+ const button = wrapper.getByText( 'OK' );
204
+
205
+ fireEvent.click( button );
206
+
207
+ expect( onConfirm ).toHaveBeenCalled();
208
+ } );
209
+
210
+ it( 'should call the `onCancel` callback if `Cancel` is clicked', async () => {
211
+ const onCancel = jest.fn().mockName( 'onCancel()' );
212
+
213
+ const wrapper = render(
214
+ <ConfirmDialog
215
+ isOpen={ true }
216
+ onConfirm={ noop }
217
+ onCancel={ onCancel }
218
+ >
219
+ Are you sure?
220
+ </ConfirmDialog>
221
+ );
222
+
223
+ const button = wrapper.getByText( 'Cancel' );
224
+
225
+ fireEvent.click( button );
226
+
227
+ expect( onCancel ).toHaveBeenCalled();
228
+ } );
229
+
230
+ it( 'should call the `onCancel` callback if the overlay is clicked', async () => {
231
+ jest.useFakeTimers();
232
+
233
+ const onCancel = jest.fn().mockName( 'onCancel()' );
234
+
235
+ const wrapper = render(
236
+ <ConfirmDialog
237
+ isOpen={ true }
238
+ onConfirm={ noop }
239
+ onCancel={ onCancel }
240
+ >
241
+ Are you sure?
242
+ </ConfirmDialog>
243
+ );
244
+
245
+ const frame = wrapper.baseElement.querySelector(
246
+ '.components-modal__frame'
247
+ );
248
+
249
+ //The overlay click is handled by detecting an onBlur from the modal frame.
250
+ fireEvent.blur( frame );
251
+
252
+ // We don't wait for a DOM side effect here, so we need to fake the timers
253
+ // and "advance" it so that the `queueBlurCheck` in the `useFocusOutside` hook
254
+ // properly executes its timeout task.
255
+ jest.advanceTimersByTime( 0 );
256
+
257
+ expect( onCancel ).toHaveBeenCalled();
258
+
259
+ jest.useRealTimers();
260
+ } );
261
+
262
+ it( 'should call the `onCancel` callback if the `Escape` key is pressed', async () => {
263
+ const onCancel = jest.fn().mockName( 'onCancel()' );
264
+
265
+ const wrapper = render(
266
+ <ConfirmDialog onConfirm={ noop } onCancel={ onCancel }>
267
+ Are you sure?
268
+ </ConfirmDialog>
269
+ );
270
+
271
+ const frame = wrapper.baseElement.querySelector(
272
+ '.components-modal__frame'
273
+ );
274
+
275
+ fireEvent.keyDown( frame, { keyCode: 27 } );
276
+
277
+ expect( onCancel ).toHaveBeenCalled();
278
+ } );
279
+
280
+ it( 'should call the `onConfirm` callback if the `Enter` key is pressed', async () => {
281
+ const onConfirm = jest.fn().mockName( 'onConfirm()' );
282
+
283
+ const wrapper = render(
284
+ <ConfirmDialog
285
+ isOpen={ true }
286
+ onConfirm={ onConfirm }
287
+ onCancel={ noop }
288
+ >
289
+ Are you sure?
290
+ </ConfirmDialog>
291
+ );
292
+
293
+ const frame = wrapper.baseElement.querySelector(
294
+ '.components-modal__frame'
295
+ );
296
+
297
+ fireEvent.keyDown( frame, { keyCode: 13 } );
298
+
299
+ expect( onConfirm ).toHaveBeenCalled();
300
+ } );
301
+ } );
302
+ } );
@@ -0,0 +1,26 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ // eslint-disable-next-line no-restricted-imports
5
+ import type { MouseEvent, KeyboardEvent, ReactNode } from 'react';
6
+
7
+ export type DialogInputEvent =
8
+ | KeyboardEvent< HTMLDivElement >
9
+ | MouseEvent< HTMLButtonElement >;
10
+
11
+ type BaseProps = {
12
+ children: ReactNode;
13
+ onConfirm: ( event: DialogInputEvent ) => void;
14
+ };
15
+
16
+ type ControlledProps = BaseProps & {
17
+ onCancel: ( event: DialogInputEvent ) => void;
18
+ isOpen: boolean;
19
+ };
20
+
21
+ type UncontrolledProps = BaseProps & {
22
+ onCancel?: ( event: DialogInputEvent ) => void;
23
+ isOpen?: never;
24
+ };
25
+
26
+ export type OwnProps = ControlledProps | UncontrolledProps;
@@ -1,8 +1,3 @@
1
- export const COLOR_POPOVER_PROPS = {
2
- className: 'components-custom-gradient-picker__color-picker-popover',
3
- position: 'top',
4
- };
5
-
6
1
  export const GRADIENT_MARKERS_WIDTH = 16;
7
2
  export const INSERT_POINT_WIDTH = 16;
8
3
  export const MINIMUM_ABSOLUTE_LEFT_POSITION = 5;
@@ -8,8 +8,8 @@ import { colord } from 'colord';
8
8
  * WordPress dependencies
9
9
  */
10
10
  import { useInstanceId } from '@wordpress/compose';
11
- import { useEffect, useRef, useState } from '@wordpress/element';
12
- import { __, sprintf } from '@wordpress/i18n';
11
+ import { useEffect, useRef, useState, useMemo } from '@wordpress/element';
12
+ import { __, sprintf, isRTL } from '@wordpress/i18n';
13
13
  import { plus } from '@wordpress/icons';
14
14
  import { LEFT, RIGHT } from '@wordpress/keycodes';
15
15
 
@@ -18,8 +18,8 @@ import { LEFT, RIGHT } from '@wordpress/keycodes';
18
18
  */
19
19
  import Button from '../button';
20
20
  import { ColorPicker } from '../color-picker';
21
- import Dropdown from '../dropdown';
22
21
  import { VisuallyHidden } from '../visually-hidden';
22
+ import { CustomColorPickerDropdown } from '../color-palette';
23
23
 
24
24
  import {
25
25
  addControlPoint,
@@ -31,7 +31,6 @@ import {
31
31
  getHorizontalRelativeGradientPosition,
32
32
  } from './utils';
33
33
  import {
34
- COLOR_POPOVER_PROPS,
35
34
  GRADIENT_MARKERS_WIDTH,
36
35
  MINIMUM_SIGNIFICANT_MOVE,
37
36
  KEYBOARD_CONTROL_POINT_VARIATION,
@@ -74,6 +73,33 @@ function ControlPointButton( { isOpen, position, color, ...additionalProps } ) {
74
73
  );
75
74
  }
76
75
 
76
+ function GradientColorPickerDropdown( {
77
+ isRenderedInSidebar,
78
+ gradientPickerDomRef,
79
+ ...props
80
+ } ) {
81
+ const popoverProps = useMemo( () => {
82
+ const result = {
83
+ className:
84
+ 'components-custom-gradient-picker__color-picker-popover',
85
+ position: 'top',
86
+ };
87
+ if ( isRenderedInSidebar ) {
88
+ result.anchorRef = gradientPickerDomRef.current;
89
+ result.position = isRTL() ? 'bottom right' : 'bottom left';
90
+ result.__unstableForcePosition = true;
91
+ }
92
+ return result;
93
+ }, [ gradientPickerDomRef.current, isRenderedInSidebar ] );
94
+ return (
95
+ <CustomColorPickerDropdown
96
+ isRenderedInSidebar={ isRenderedInSidebar }
97
+ popoverProps={ popoverProps }
98
+ { ...props }
99
+ />
100
+ );
101
+ }
102
+
77
103
  function ControlPoints( {
78
104
  disableRemove,
79
105
  disableAlpha,
@@ -83,6 +109,7 @@ function ControlPoints( {
83
109
  onChange,
84
110
  onStartControlPointChange,
85
111
  onStopControlPointChange,
112
+ __experimentalIsRenderedInSidebar,
86
113
  } ) {
87
114
  const controlPointMoveState = useRef();
88
115
 
@@ -134,7 +161,9 @@ function ControlPoints( {
134
161
  const initialPosition = point?.position;
135
162
  return (
136
163
  ignoreMarkerPosition !== initialPosition && (
137
- <Dropdown
164
+ <GradientColorPickerDropdown
165
+ gradientPickerDomRef={ gradientPickerDomRef }
166
+ isRenderedInSidebar={ __experimentalIsRenderedInSidebar }
138
167
  key={ index }
139
168
  onClose={ onStopControlPointChange }
140
169
  renderToggle={ ( { isOpen, onToggle } ) => (
@@ -225,7 +254,7 @@ function ControlPoints( {
225
254
  );
226
255
  } }
227
256
  />
228
- { ! disableRemove && (
257
+ { ! disableRemove && controlPoints.length > 2 && (
229
258
  <Button
230
259
  className="components-custom-gradient-picker__remove-control-point"
231
260
  onClick={ () => {
@@ -244,7 +273,6 @@ function ControlPoints( {
244
273
  ) }
245
274
  </>
246
275
  ) }
247
- popoverProps={ COLOR_POPOVER_PROPS }
248
276
  />
249
277
  )
250
278
  );
@@ -258,10 +286,14 @@ function InsertPoint( {
258
286
  onCloseInserter,
259
287
  insertPosition,
260
288
  disableAlpha,
289
+ __experimentalIsRenderedInSidebar,
290
+ gradientPickerDomRef,
261
291
  } ) {
262
292
  const [ alreadyInsertedPoint, setAlreadyInsertedPoint ] = useState( false );
263
293
  return (
264
- <Dropdown
294
+ <GradientColorPickerDropdown
295
+ gradientPickerDomRef={ gradientPickerDomRef }
296
+ isRenderedInSidebar={ __experimentalIsRenderedInSidebar }
265
297
  className="components-custom-gradient-picker__inserter"
266
298
  onClose={ () => {
267
299
  onCloseInserter();
@@ -314,7 +346,6 @@ function InsertPoint( {
314
346
  } }
315
347
  />
316
348
  ) }
317
- popoverProps={ COLOR_POPOVER_PROPS }
318
349
  />
319
350
  );
320
351
  }