@wordpress/components 23.6.0 → 23.7.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 (328) hide show
  1. package/CHANGELOG.md +32 -4
  2. package/build/angle-picker-control/angle-circle.js +1 -4
  3. package/build/angle-picker-control/angle-circle.js.map +1 -1
  4. package/build/angle-picker-control/index.js +10 -22
  5. package/build/angle-picker-control/index.js.map +1 -1
  6. package/build/angle-picker-control/styles/angle-picker-control-styles.js +24 -15
  7. package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  8. package/build/animate/index.js +27 -19
  9. package/build/animate/index.js.map +1 -1
  10. package/build/animate/types.js.map +1 -0
  11. package/build/box-control/axial-input-controls.js.map +1 -1
  12. package/build/color-picker/color-input.js +0 -4
  13. package/build/color-picker/color-input.js.map +1 -1
  14. package/build/color-picker/component.js +5 -4
  15. package/build/color-picker/component.js.map +1 -1
  16. package/build/color-picker/hex-input.js.map +1 -1
  17. package/build/color-picker/hsl-input.js.map +1 -1
  18. package/build/color-picker/input-with-slider.js.map +1 -1
  19. package/build/color-picker/legacy-adapter.js.map +1 -1
  20. package/build/color-picker/picker.js.map +1 -1
  21. package/build/color-picker/rgb-input.js.map +1 -1
  22. package/build/color-picker/use-deprecated-props.js.map +1 -1
  23. package/build/custom-gradient-picker/constants.js +1 -1
  24. package/build/custom-gradient-picker/constants.js.map +1 -1
  25. package/build/custom-gradient-picker/gradient-bar/constants.js.map +1 -1
  26. package/build/custom-gradient-picker/gradient-bar/control-points.js +9 -5
  27. package/build/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
  28. package/build/custom-gradient-picker/gradient-bar/index.js +14 -9
  29. package/build/custom-gradient-picker/gradient-bar/index.js.map +1 -1
  30. package/build/custom-gradient-picker/gradient-bar/utils.js +34 -54
  31. package/build/custom-gradient-picker/gradient-bar/utils.js.map +1 -1
  32. package/build/custom-gradient-picker/index.js +45 -16
  33. package/build/custom-gradient-picker/index.js.map +1 -1
  34. package/build/custom-gradient-picker/serializer.js +14 -4
  35. package/build/custom-gradient-picker/serializer.js.map +1 -1
  36. package/build/custom-gradient-picker/styles/custom-gradient-picker-styles.js +6 -6
  37. package/build/custom-gradient-picker/styles/custom-gradient-picker-styles.js.map +1 -1
  38. package/build/custom-gradient-picker/types.js +6 -0
  39. package/build/custom-gradient-picker/types.js.map +1 -0
  40. package/build/custom-gradient-picker/utils.js +17 -12
  41. package/build/custom-gradient-picker/utils.js.map +1 -1
  42. package/build/{color-list-picker → duotone-picker/color-list-picker}/index.js +5 -5
  43. package/build/duotone-picker/color-list-picker/index.js.map +1 -0
  44. package/build/duotone-picker/color-list-picker/types.js +6 -0
  45. package/build/duotone-picker/color-list-picker/types.js.map +1 -0
  46. package/build/duotone-picker/custom-duotone-bar.js.map +1 -1
  47. package/build/duotone-picker/duotone-picker.js +39 -2
  48. package/build/duotone-picker/duotone-picker.js.map +1 -1
  49. package/build/duotone-picker/duotone-swatch.js.map +1 -1
  50. package/build/duotone-picker/index.js.map +1 -1
  51. package/build/duotone-picker/types.js +6 -0
  52. package/build/duotone-picker/types.js.map +1 -0
  53. package/build/duotone-picker/utils.js +13 -11
  54. package/build/duotone-picker/utils.js.map +1 -1
  55. package/build/form-token-field/index.js +9 -3
  56. package/build/form-token-field/index.js.map +1 -1
  57. package/build/gradient-picker/index.js +61 -9
  58. package/build/gradient-picker/index.js.map +1 -1
  59. package/build/gradient-picker/types.js +6 -0
  60. package/build/gradient-picker/types.js.map +1 -0
  61. package/build/palette-edit/index.js +1 -2
  62. package/build/palette-edit/index.js.map +1 -1
  63. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  64. package/build/sandbox/index.native.js +80 -67
  65. package/build/sandbox/index.native.js.map +1 -1
  66. package/build/tab-panel/index.js +1 -1
  67. package/build/tab-panel/index.js.map +1 -1
  68. package/build/tools-panel/tools-panel/hook.js +45 -6
  69. package/build/tools-panel/tools-panel/hook.js.map +1 -1
  70. package/build/utils/input/input-control.js +1 -1
  71. package/build/utils/input/input-control.js.map +1 -1
  72. package/build-module/angle-picker-control/angle-circle.js +1 -4
  73. package/build-module/angle-picker-control/angle-circle.js.map +1 -1
  74. package/build-module/angle-picker-control/index.js +12 -21
  75. package/build-module/angle-picker-control/index.js.map +1 -1
  76. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +20 -13
  77. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  78. package/build-module/animate/index.js +25 -17
  79. package/build-module/animate/index.js.map +1 -1
  80. package/build-module/box-control/axial-input-controls.js.map +1 -1
  81. package/build-module/color-picker/color-input.js +0 -4
  82. package/build-module/color-picker/color-input.js.map +1 -1
  83. package/build-module/color-picker/component.js +3 -3
  84. package/build-module/color-picker/component.js.map +1 -1
  85. package/build-module/color-picker/hex-input.js.map +1 -1
  86. package/build-module/color-picker/hsl-input.js.map +1 -1
  87. package/build-module/color-picker/input-with-slider.js.map +1 -1
  88. package/build-module/color-picker/legacy-adapter.js.map +1 -1
  89. package/build-module/color-picker/picker.js +4 -0
  90. package/build-module/color-picker/picker.js.map +1 -1
  91. package/build-module/color-picker/rgb-input.js.map +1 -1
  92. package/build-module/color-picker/use-deprecated-props.js.map +1 -1
  93. package/build-module/custom-gradient-picker/constants.js +1 -1
  94. package/build-module/custom-gradient-picker/constants.js.map +1 -1
  95. package/build-module/custom-gradient-picker/gradient-bar/constants.js.map +1 -1
  96. package/build-module/custom-gradient-picker/gradient-bar/control-points.js +9 -4
  97. package/build-module/custom-gradient-picker/gradient-bar/control-points.js.map +1 -1
  98. package/build-module/custom-gradient-picker/gradient-bar/index.js +14 -8
  99. package/build-module/custom-gradient-picker/gradient-bar/index.js.map +1 -1
  100. package/build-module/custom-gradient-picker/gradient-bar/utils.js +34 -54
  101. package/build-module/custom-gradient-picker/gradient-bar/utils.js.map +1 -1
  102. package/build-module/custom-gradient-picker/index.js +44 -17
  103. package/build-module/custom-gradient-picker/index.js.map +1 -1
  104. package/build-module/custom-gradient-picker/serializer.js +14 -4
  105. package/build-module/custom-gradient-picker/serializer.js.map +1 -1
  106. package/build-module/custom-gradient-picker/styles/custom-gradient-picker-styles.js +6 -6
  107. package/build-module/custom-gradient-picker/styles/custom-gradient-picker-styles.js.map +1 -1
  108. package/build-module/custom-gradient-picker/types.js +2 -0
  109. package/build-module/custom-gradient-picker/utils.js +17 -12
  110. package/build-module/custom-gradient-picker/utils.js.map +1 -1
  111. package/build-module/{color-list-picker → duotone-picker/color-list-picker}/index.js +5 -5
  112. package/build-module/duotone-picker/color-list-picker/index.js.map +1 -0
  113. package/build-module/duotone-picker/color-list-picker/types.js +2 -0
  114. package/build-module/duotone-picker/color-list-picker/types.js.map +1 -0
  115. package/build-module/duotone-picker/custom-duotone-bar.js.map +1 -1
  116. package/build-module/duotone-picker/duotone-picker.js +38 -2
  117. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  118. package/build-module/duotone-picker/duotone-swatch.js.map +1 -1
  119. package/build-module/duotone-picker/index.js.map +1 -1
  120. package/build-module/duotone-picker/types.js +2 -0
  121. package/build-module/duotone-picker/types.js.map +1 -0
  122. package/build-module/duotone-picker/utils.js +17 -11
  123. package/build-module/duotone-picker/utils.js.map +1 -1
  124. package/build-module/form-token-field/index.js +9 -4
  125. package/build-module/form-token-field/index.js.map +1 -1
  126. package/build-module/gradient-picker/index.js +61 -10
  127. package/build-module/gradient-picker/index.js.map +1 -1
  128. package/build-module/gradient-picker/types.js +2 -0
  129. package/build-module/gradient-picker/types.js.map +1 -0
  130. package/build-module/palette-edit/index.js +1 -2
  131. package/build-module/palette-edit/index.js.map +1 -1
  132. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  133. package/build-module/sandbox/index.native.js +70 -58
  134. package/build-module/sandbox/index.native.js.map +1 -1
  135. package/build-module/tab-panel/index.js +2 -2
  136. package/build-module/tab-panel/index.js.map +1 -1
  137. package/build-module/tools-panel/tools-panel/hook.js +45 -6
  138. package/build-module/tools-panel/tools-panel/hook.js.map +1 -1
  139. package/build-module/utils/input/input-control.js +1 -1
  140. package/build-module/utils/input/input-control.js.map +1 -1
  141. package/build-style/style-rtl.css +40 -28
  142. package/build-style/style.css +42 -28
  143. package/build-types/angle-picker-control/angle-circle.d.ts.map +1 -1
  144. package/build-types/angle-picker-control/index.d.ts.map +1 -1
  145. package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts +5 -0
  146. package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts.map +1 -1
  147. package/build-types/animate/index.d.ts +27 -22
  148. package/build-types/animate/index.d.ts.map +1 -1
  149. package/build-types/animate/stories/index.d.ts +18 -0
  150. package/build-types/animate/stories/index.d.ts.map +1 -0
  151. package/build-types/animate/types.d.ts +30 -0
  152. package/build-types/animate/types.d.ts.map +1 -0
  153. package/build-types/color-picker/color-input.d.ts +1 -11
  154. package/build-types/color-picker/color-input.d.ts.map +1 -1
  155. package/build-types/color-picker/component.d.ts +8 -9
  156. package/build-types/color-picker/component.d.ts.map +1 -1
  157. package/build-types/color-picker/hex-input.d.ts +1 -10
  158. package/build-types/color-picker/hex-input.d.ts.map +1 -1
  159. package/build-types/color-picker/hsl-input.d.ts +1 -10
  160. package/build-types/color-picker/hsl-input.d.ts.map +1 -1
  161. package/build-types/color-picker/input-with-slider.d.ts +1 -9
  162. package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
  163. package/build-types/color-picker/legacy-adapter.d.ts +1 -3
  164. package/build-types/color-picker/legacy-adapter.d.ts.map +1 -1
  165. package/build-types/color-picker/picker.d.ts +4 -7
  166. package/build-types/color-picker/picker.d.ts.map +1 -1
  167. package/build-types/color-picker/rgb-input.d.ts +1 -10
  168. package/build-types/color-picker/rgb-input.d.ts.map +1 -1
  169. package/build-types/color-picker/stories/index.d.ts +19 -0
  170. package/build-types/color-picker/stories/index.d.ts.map +1 -0
  171. package/build-types/color-picker/test/index.d.ts +2 -0
  172. package/build-types/color-picker/test/index.d.ts.map +1 -0
  173. package/build-types/color-picker/types.d.ts +105 -1
  174. package/build-types/color-picker/types.d.ts.map +1 -1
  175. package/build-types/color-picker/use-deprecated-props.d.ts +1 -44
  176. package/build-types/color-picker/use-deprecated-props.d.ts.map +1 -1
  177. package/build-types/custom-gradient-picker/constants.d.ts +8 -8
  178. package/build-types/custom-gradient-picker/constants.d.ts.map +1 -1
  179. package/build-types/custom-gradient-picker/gradient-bar/constants.d.ts +7 -7
  180. package/build-types/custom-gradient-picker/gradient-bar/constants.d.ts.map +1 -1
  181. package/build-types/custom-gradient-picker/gradient-bar/control-points.d.ts +5 -22
  182. package/build-types/custom-gradient-picker/gradient-bar/control-points.d.ts.map +1 -1
  183. package/build-types/custom-gradient-picker/gradient-bar/index.d.ts +3 -9
  184. package/build-types/custom-gradient-picker/gradient-bar/index.d.ts.map +1 -1
  185. package/build-types/custom-gradient-picker/gradient-bar/test/utils.d.ts +2 -0
  186. package/build-types/custom-gradient-picker/gradient-bar/test/utils.d.ts.map +1 -0
  187. package/build-types/custom-gradient-picker/gradient-bar/utils.d.ts +44 -92
  188. package/build-types/custom-gradient-picker/gradient-bar/utils.d.ts.map +1 -1
  189. package/build-types/custom-gradient-picker/index.d.ts +27 -6
  190. package/build-types/custom-gradient-picker/index.d.ts.map +1 -1
  191. package/build-types/custom-gradient-picker/serializer.d.ts +13 -16
  192. package/build-types/custom-gradient-picker/serializer.d.ts.map +1 -1
  193. package/build-types/custom-gradient-picker/stories/index.d.ts +12 -0
  194. package/build-types/custom-gradient-picker/stories/index.d.ts.map +1 -0
  195. package/build-types/custom-gradient-picker/styles/custom-gradient-picker-styles.d.ts +3 -2
  196. package/build-types/custom-gradient-picker/styles/custom-gradient-picker-styles.d.ts.map +1 -1
  197. package/build-types/custom-gradient-picker/test/serializer.d.ts +2 -0
  198. package/build-types/custom-gradient-picker/test/serializer.d.ts.map +1 -0
  199. package/build-types/custom-gradient-picker/types.d.ts +120 -0
  200. package/build-types/custom-gradient-picker/types.d.ts.map +1 -0
  201. package/build-types/custom-gradient-picker/utils.d.ts +12 -4
  202. package/build-types/custom-gradient-picker/utils.d.ts.map +1 -1
  203. package/build-types/duotone-picker/color-list-picker/index.d.ts.map +1 -0
  204. package/build-types/{color-list-picker → duotone-picker/color-list-picker}/types.d.ts +2 -2
  205. package/build-types/duotone-picker/color-list-picker/types.d.ts.map +1 -0
  206. package/build-types/duotone-picker/custom-duotone-bar.d.ts +6 -0
  207. package/build-types/duotone-picker/custom-duotone-bar.d.ts.map +1 -0
  208. package/build-types/duotone-picker/duotone-picker.d.ts +38 -0
  209. package/build-types/duotone-picker/duotone-picker.d.ts.map +1 -0
  210. package/build-types/duotone-picker/duotone-swatch.d.ts +5 -0
  211. package/build-types/duotone-picker/duotone-swatch.d.ts.map +1 -0
  212. package/build-types/duotone-picker/index.d.ts +3 -0
  213. package/build-types/duotone-picker/index.d.ts.map +1 -0
  214. package/build-types/duotone-picker/stories/duotone-picker.d.ts +12 -0
  215. package/build-types/duotone-picker/stories/duotone-picker.d.ts.map +1 -0
  216. package/build-types/duotone-picker/stories/duotone-swatch.d.ts +14 -0
  217. package/build-types/duotone-picker/stories/duotone-swatch.d.ts.map +1 -0
  218. package/build-types/duotone-picker/types.d.ts +60 -0
  219. package/build-types/duotone-picker/types.d.ts.map +1 -0
  220. package/build-types/duotone-picker/utils.d.ts +52 -0
  221. package/build-types/duotone-picker/utils.d.ts.map +1 -0
  222. package/build-types/form-token-field/index.d.ts.map +1 -1
  223. package/build-types/form-token-field/types.d.ts +6 -0
  224. package/build-types/form-token-field/types.d.ts.map +1 -1
  225. package/build-types/gradient-picker/index.d.ts +49 -11
  226. package/build-types/gradient-picker/index.d.ts.map +1 -1
  227. package/build-types/gradient-picker/stories/index.d.ts +14 -0
  228. package/build-types/gradient-picker/stories/index.d.ts.map +1 -0
  229. package/build-types/gradient-picker/types.d.ts +87 -0
  230. package/build-types/gradient-picker/types.d.ts.map +1 -0
  231. package/build-types/palette-edit/index.d.ts.map +1 -1
  232. package/build-types/resizable-box/resize-tooltip/utils.d.ts +1 -1
  233. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  234. package/build-types/tab-panel/index.d.ts.map +1 -1
  235. package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
  236. package/build-types/tools-panel/types.d.ts +1 -0
  237. package/build-types/tools-panel/types.d.ts.map +1 -1
  238. package/build-types/utils/input/input-control.d.ts.map +1 -1
  239. package/package.json +19 -19
  240. package/src/angle-picker-control/angle-circle.tsx +0 -1
  241. package/src/angle-picker-control/index.tsx +14 -27
  242. package/src/angle-picker-control/styles/angle-picker-control-styles.tsx +16 -9
  243. package/src/animate/index.tsx +75 -0
  244. package/src/animate/stories/index.tsx +102 -0
  245. package/src/animate/types.ts +32 -0
  246. package/src/border-box-control/stories/index.tsx +1 -1
  247. package/src/box-control/axial-input-controls.tsx +1 -1
  248. package/src/circular-option-picker/style.scss +10 -0
  249. package/src/color-indicator/style.scss +1 -0
  250. package/src/color-picker/README.md +2 -2
  251. package/src/color-picker/color-input.tsx +1 -12
  252. package/src/color-picker/component.tsx +9 -18
  253. package/src/color-picker/hex-input.tsx +2 -7
  254. package/src/color-picker/hsl-input.tsx +2 -7
  255. package/src/color-picker/input-with-slider.tsx +1 -9
  256. package/src/color-picker/legacy-adapter.tsx +1 -2
  257. package/src/color-picker/picker.tsx +5 -6
  258. package/src/color-picker/rgb-input.tsx +2 -7
  259. package/src/color-picker/stories/index.tsx +51 -0
  260. package/src/color-picker/test/{index.js → index.tsx} +36 -18
  261. package/src/color-picker/types.ts +128 -1
  262. package/src/color-picker/use-deprecated-props.ts +2 -53
  263. package/src/combobox-control/stories/index.tsx +1 -1
  264. package/src/custom-gradient-picker/{constants.js → constants.ts} +2 -2
  265. package/src/custom-gradient-picker/gradient-bar/{control-points.js → control-points.tsx} +171 -134
  266. package/src/custom-gradient-picker/gradient-bar/{index.js → index.tsx} +32 -10
  267. package/src/custom-gradient-picker/gradient-bar/test/{utils.js → utils.ts} +58 -31
  268. package/src/custom-gradient-picker/gradient-bar/utils.ts +193 -0
  269. package/src/custom-gradient-picker/{index.js → index.tsx} +63 -22
  270. package/src/custom-gradient-picker/serializer.ts +82 -0
  271. package/src/custom-gradient-picker/stories/index.tsx +45 -0
  272. package/src/custom-gradient-picker/style.scss +25 -4
  273. package/src/custom-gradient-picker/test/{serializer.js → serializer.ts} +39 -33
  274. package/src/custom-gradient-picker/types.ts +137 -0
  275. package/src/custom-gradient-picker/{utils.js → utils.ts} +37 -22
  276. package/src/custom-select-control/test/index.js +6 -4
  277. package/src/{color-list-picker → duotone-picker/color-list-picker}/index.tsx +7 -6
  278. package/src/{color-list-picker → duotone-picker/color-list-picker}/types.ts +2 -2
  279. package/src/duotone-picker/{custom-duotone-bar.js → custom-duotone-bar.tsx} +7 -1
  280. package/src/duotone-picker/{duotone-picker.js → duotone-picker.tsx} +39 -2
  281. package/src/duotone-picker/{duotone-swatch.js → duotone-swatch.tsx} +2 -1
  282. package/src/duotone-picker/stories/{duotone-picker.js → duotone-picker.tsx} +15 -8
  283. package/src/duotone-picker/stories/{duotone-swatch.js → duotone-swatch.tsx} +9 -3
  284. package/src/duotone-picker/types.ts +61 -0
  285. package/src/duotone-picker/{utils.js → utils.ts} +29 -14
  286. package/src/flex/flex-item/README.md +1 -1
  287. package/src/form-token-field/README.md +1 -0
  288. package/src/form-token-field/index.tsx +10 -3
  289. package/src/form-token-field/style.scss +0 -7
  290. package/src/form-token-field/test/index.tsx +1 -0
  291. package/src/form-token-field/types.ts +6 -0
  292. package/src/gradient-picker/README.md +16 -23
  293. package/src/gradient-picker/{index.js → index.tsx} +70 -16
  294. package/src/gradient-picker/stories/{index.js → index.tsx} +19 -8
  295. package/src/gradient-picker/types.ts +89 -0
  296. package/src/item-group/test/index.js +5 -3
  297. package/src/palette-edit/index.tsx +4 -5
  298. package/src/resizable-box/resize-tooltip/utils.ts +1 -1
  299. package/src/sandbox/index.native.js +71 -78
  300. package/src/slot-fill/test/slot.js +8 -6
  301. package/src/style.scss +1 -1
  302. package/src/tab-panel/index.tsx +7 -2
  303. package/src/tools-panel/test/index.tsx +86 -0
  304. package/src/tools-panel/tools-panel/hook.ts +44 -4
  305. package/src/tools-panel/types.ts +1 -0
  306. package/src/tooltip/test/index.js +251 -301
  307. package/src/utils/input/input-control.js +1 -0
  308. package/tsconfig.json +1 -2
  309. package/tsconfig.tsbuildinfo +1 -1
  310. package/build/color-list-picker/index.js.map +0 -1
  311. package/build-module/color-list-picker/index.js.map +0 -1
  312. package/build-types/color-list-picker/index.d.ts.map +0 -1
  313. package/build-types/color-list-picker/types.d.ts.map +0 -1
  314. package/src/animate/index.js +0 -60
  315. package/src/animate/stories/index.js +0 -53
  316. package/src/color-picker/stories/index.js +0 -41
  317. package/src/custom-gradient-picker/gradient-bar/utils.js +0 -189
  318. package/src/custom-gradient-picker/serializer.js +0 -48
  319. package/src/custom-gradient-picker/stories/index.js +0 -33
  320. /package/build/{color-list-picker → animate}/types.js +0 -0
  321. /package/build-module/{color-list-picker → animate}/types.js +0 -0
  322. /package/build-module/{color-list-picker → animate}/types.js.map +0 -0
  323. /package/{build/color-list-picker → build-module/custom-gradient-picker}/types.js.map +0 -0
  324. /package/build-types/{color-list-picker → duotone-picker/color-list-picker}/index.d.ts +0 -0
  325. /package/src/custom-gradient-picker/gradient-bar/{constants.js → constants.ts} +0 -0
  326. /package/src/custom-gradient-picker/styles/{custom-gradient-picker-styles.js → custom-gradient-picker-styles.tsx} +0 -0
  327. /package/src/{color-list-picker → duotone-picker/color-list-picker}/style.scss +0 -0
  328. /package/src/duotone-picker/{index.js → index.ts} +0 -0
@@ -1,5 +1,3 @@
1
- // @ts-nocheck
2
-
3
1
  /**
4
2
  * External dependencies
5
3
  */
@@ -36,8 +34,21 @@ import {
36
34
  MINIMUM_SIGNIFICANT_MOVE,
37
35
  KEYBOARD_CONTROL_POINT_VARIATION,
38
36
  } from './constants';
37
+ import type { WordPressComponentProps } from '../../ui/context';
38
+ import type {
39
+ ControlPointButtonProps,
40
+ ControlPointMoveState,
41
+ ControlPointsProps,
42
+ InsertPointProps,
43
+ } from '../types';
44
+ import type { CustomColorPickerDropdownProps } from '../../color-palette/types';
39
45
 
40
- function ControlPointButton( { isOpen, position, color, ...additionalProps } ) {
46
+ function ControlPointButton( {
47
+ isOpen,
48
+ position,
49
+ color,
50
+ ...additionalProps
51
+ }: WordPressComponentProps< ControlPointButtonProps, 'button', true > ) {
41
52
  const instanceId = useInstanceId( ControlPointButton );
42
53
  const descriptionId = `components-custom-gradient-picker__control-point-button-description-${ instanceId }`;
43
54
  return (
@@ -75,13 +86,14 @@ function GradientColorPickerDropdown( {
75
86
  isRenderedInSidebar,
76
87
  className,
77
88
  ...props
78
- } ) {
89
+ }: CustomColorPickerDropdownProps ) {
79
90
  // Open the popover below the gradient control/insertion point
80
91
  const popoverProps = useMemo(
81
- () => ( {
82
- placement: 'bottom',
83
- offset: 8,
84
- } ),
92
+ () =>
93
+ ( {
94
+ placement: 'bottom',
95
+ offset: 8,
96
+ } as const ),
85
97
  []
86
98
  );
87
99
 
@@ -110,16 +122,25 @@ function ControlPoints( {
110
122
  onStartControlPointChange,
111
123
  onStopControlPointChange,
112
124
  __experimentalIsRenderedInSidebar,
113
- } ) {
114
- const controlPointMoveState = useRef();
125
+ }: ControlPointsProps ) {
126
+ const controlPointMoveState = useRef< ControlPointMoveState >();
127
+
128
+ const onMouseMove = ( event: MouseEvent ) => {
129
+ if (
130
+ controlPointMoveState.current === undefined ||
131
+ gradientPickerDomRef.current === null
132
+ ) {
133
+ return;
134
+ }
115
135
 
116
- const onMouseMove = ( event ) => {
117
136
  const relativePosition = getHorizontalRelativeGradientPosition(
118
137
  event.clientX,
119
138
  gradientPickerDomRef.current
120
139
  );
140
+
121
141
  const { initialPosition, index, significantMoveHappened } =
122
142
  controlPointMoveState.current;
143
+
123
144
  if (
124
145
  ! significantMoveHappened &&
125
146
  Math.abs( initialPosition - relativePosition ) >=
@@ -150,142 +171,158 @@ function ControlPoints( {
150
171
  // Adding `cleanEventListeners` to the dependency array below requires the function itself to be wrapped in a `useCallback`
151
172
  // This memoization would prevent the event listeners from being properly cleaned.
152
173
  // Instead, we'll pass a ref to the function in our `useEffect` so `cleanEventListeners` itself is no longer a dependency.
153
- const cleanEventListenersRef = useRef();
174
+ const cleanEventListenersRef = useRef< () => void >();
154
175
  cleanEventListenersRef.current = cleanEventListeners;
155
176
 
156
177
  useEffect( () => {
157
178
  return () => {
158
- cleanEventListenersRef.current();
179
+ cleanEventListenersRef.current?.();
159
180
  };
160
181
  }, [] );
161
182
 
162
- return controlPoints.map( ( point, index ) => {
163
- const initialPosition = point?.position;
164
- return (
165
- ignoreMarkerPosition !== initialPosition && (
166
- <GradientColorPickerDropdown
167
- isRenderedInSidebar={ __experimentalIsRenderedInSidebar }
168
- key={ index }
169
- onClose={ onStopControlPointChange }
170
- renderToggle={ ( { isOpen, onToggle } ) => (
171
- <ControlPointButton
183
+ return (
184
+ <>
185
+ { controlPoints.map( ( point, index ) => {
186
+ const initialPosition = point?.position;
187
+ return (
188
+ ignoreMarkerPosition !== initialPosition && (
189
+ <GradientColorPickerDropdown
190
+ isRenderedInSidebar={
191
+ __experimentalIsRenderedInSidebar
192
+ }
172
193
  key={ index }
173
- onClick={ () => {
174
- if (
175
- controlPointMoveState.current &&
176
- controlPointMoveState.current
177
- .significantMoveHappened
178
- ) {
179
- return;
180
- }
181
- if ( isOpen ) {
182
- onStopControlPointChange();
183
- } else {
184
- onStartControlPointChange();
185
- }
186
- onToggle();
187
- } }
188
- onMouseDown={ () => {
189
- if ( window && window.addEventListener ) {
190
- controlPointMoveState.current = {
191
- initialPosition,
192
- index,
193
- significantMoveHappened: false,
194
- listenersActivated: true,
195
- };
196
- onStartControlPointChange();
197
- window.addEventListener(
198
- 'mousemove',
199
- onMouseMove
200
- );
201
- window.addEventListener(
202
- 'mouseup',
203
- cleanEventListeners
204
- );
205
- }
206
- } }
207
- onKeyDown={ ( event ) => {
208
- if ( event.code === 'ArrowLeft' ) {
209
- // Stop propagation of the key press event to avoid focus moving
210
- // to another editor area.
211
- event.stopPropagation();
212
- onChange(
213
- updateControlPointPosition(
214
- controlPoints,
215
- index,
216
- clampPercent(
217
- point.position -
218
- KEYBOARD_CONTROL_POINT_VARIATION
219
- )
220
- )
221
- );
222
- } else if ( event.code === 'ArrowRight' ) {
223
- // Stop propagation of the key press event to avoid focus moving
224
- // to another editor area.
225
- event.stopPropagation();
226
- onChange(
227
- updateControlPointPosition(
228
- controlPoints,
229
- index,
230
- clampPercent(
231
- point.position +
232
- KEYBOARD_CONTROL_POINT_VARIATION
233
- )
234
- )
235
- );
236
- }
237
- } }
238
- isOpen={ isOpen }
239
- position={ point.position }
240
- color={ point.color }
241
- />
242
- ) }
243
- renderContent={ ( { onClose } ) => (
244
- <>
245
- <ColorPicker
246
- enableAlpha={ ! disableAlpha }
247
- color={ point.color }
248
- onChange={ ( color ) => {
249
- onChange(
250
- updateControlPointColor(
251
- controlPoints,
252
- index,
253
- colord( color ).toRgbString()
254
- )
255
- );
256
- } }
257
- />
258
- { ! disableRemove && controlPoints.length > 2 && (
259
- <HStack
260
- className="components-custom-gradient-picker__remove-control-point-wrapper"
261
- alignment="center"
262
- >
263
- <Button
264
- onClick={ () => {
194
+ onClose={ onStopControlPointChange }
195
+ renderToggle={ ( { isOpen, onToggle } ) => (
196
+ <ControlPointButton
197
+ key={ index }
198
+ onClick={ () => {
199
+ if (
200
+ controlPointMoveState.current &&
201
+ controlPointMoveState.current
202
+ .significantMoveHappened
203
+ ) {
204
+ return;
205
+ }
206
+ if ( isOpen ) {
207
+ onStopControlPointChange();
208
+ } else {
209
+ onStartControlPointChange();
210
+ }
211
+ onToggle();
212
+ } }
213
+ onMouseDown={ () => {
214
+ if (
215
+ window &&
216
+ window.addEventListener
217
+ ) {
218
+ controlPointMoveState.current = {
219
+ initialPosition,
220
+ index,
221
+ significantMoveHappened: false,
222
+ listenersActivated: true,
223
+ };
224
+ onStartControlPointChange();
225
+ window.addEventListener(
226
+ 'mousemove',
227
+ onMouseMove
228
+ );
229
+ window.addEventListener(
230
+ 'mouseup',
231
+ cleanEventListeners
232
+ );
233
+ }
234
+ } }
235
+ onKeyDown={ ( event ) => {
236
+ if ( event.code === 'ArrowLeft' ) {
237
+ // Stop propagation of the key press event to avoid focus moving
238
+ // to another editor area.
239
+ event.stopPropagation();
265
240
  onChange(
266
- removeControlPoint(
241
+ updateControlPointPosition(
267
242
  controlPoints,
268
- index
243
+ index,
244
+ clampPercent(
245
+ point.position -
246
+ KEYBOARD_CONTROL_POINT_VARIATION
247
+ )
248
+ )
249
+ );
250
+ } else if (
251
+ event.code === 'ArrowRight'
252
+ ) {
253
+ // Stop propagation of the key press event to avoid focus moving
254
+ // to another editor area.
255
+ event.stopPropagation();
256
+ onChange(
257
+ updateControlPointPosition(
258
+ controlPoints,
259
+ index,
260
+ clampPercent(
261
+ point.position +
262
+ KEYBOARD_CONTROL_POINT_VARIATION
263
+ )
264
+ )
265
+ );
266
+ }
267
+ } }
268
+ isOpen={ isOpen }
269
+ position={ point.position }
270
+ color={ point.color }
271
+ />
272
+ ) }
273
+ renderContent={ ( { onClose } ) => (
274
+ <>
275
+ <ColorPicker
276
+ enableAlpha={ ! disableAlpha }
277
+ color={ point.color }
278
+ onChange={ ( color ) => {
279
+ onChange(
280
+ updateControlPointColor(
281
+ controlPoints,
282
+ index,
283
+ colord(
284
+ color
285
+ ).toRgbString()
269
286
  )
270
287
  );
271
- onClose();
272
288
  } }
273
- variant="link"
274
- >
275
- { __( 'Remove Control Point' ) }
276
- </Button>
277
- </HStack>
289
+ />
290
+ { ! disableRemove &&
291
+ controlPoints.length > 2 && (
292
+ <HStack
293
+ className="components-custom-gradient-picker__remove-control-point-wrapper"
294
+ alignment="center"
295
+ >
296
+ <Button
297
+ onClick={ () => {
298
+ onChange(
299
+ removeControlPoint(
300
+ controlPoints,
301
+ index
302
+ )
303
+ );
304
+ onClose();
305
+ } }
306
+ variant="link"
307
+ >
308
+ { __(
309
+ 'Remove Control Point'
310
+ ) }
311
+ </Button>
312
+ </HStack>
313
+ ) }
314
+ </>
278
315
  ) }
279
- </>
280
- ) }
281
- style={ {
282
- left: `${ point.position }%`,
283
- transform: 'translateX( -50% )',
284
- } }
285
- />
286
- )
287
- );
288
- } );
316
+ style={ {
317
+ left: `${ point.position }%`,
318
+ transform: 'translateX( -50% )',
319
+ } }
320
+ />
321
+ )
322
+ );
323
+ } ) }
324
+ </>
325
+ );
289
326
  }
290
327
 
291
328
  function InsertPoint( {
@@ -296,7 +333,7 @@ function InsertPoint( {
296
333
  insertPosition,
297
334
  disableAlpha,
298
335
  __experimentalIsRenderedInSidebar,
299
- } ) {
336
+ }: InsertPointProps ) {
300
337
  const [ alreadyInsertedPoint, setAlreadyInsertedPoint ] = useState( false );
301
338
  return (
302
339
  <GradientColorPickerDropdown
@@ -1,5 +1,3 @@
1
- // @ts-nocheck
2
-
3
1
  /**
4
2
  * External dependencies
5
3
  */
@@ -16,8 +14,18 @@ import { useRef, useReducer } from '@wordpress/element';
16
14
  import ControlPoints from './control-points';
17
15
  import { getHorizontalRelativeGradientPosition } from './utils';
18
16
  import { MINIMUM_DISTANCE_BETWEEN_INSERTER_AND_POINT } from './constants';
17
+ import type {
18
+ CustomGradientBarProps,
19
+ CustomGradientBarReducerState,
20
+ CustomGradientBarReducerAction,
21
+ CustomGradientBarIdleState,
22
+ } from '../types';
23
+ import type { MouseEventHandler } from 'react';
19
24
 
20
- function customGradientBarReducer( state, action ) {
25
+ const customGradientBarReducer = (
26
+ state: CustomGradientBarReducerState,
27
+ action: CustomGradientBarReducerAction
28
+ ): CustomGradientBarReducerState => {
21
29
  switch ( action.type ) {
22
30
  case 'MOVE_INSERTER':
23
31
  if ( state.id === 'IDLE' || state.id === 'MOVING_INSERTER' ) {
@@ -65,8 +73,10 @@ function customGradientBarReducer( state, action ) {
65
73
  break;
66
74
  }
67
75
  return state;
68
- }
69
- const customGradientBarReducerInitialState = { id: 'IDLE' };
76
+ };
77
+ const customGradientBarReducerInitialState: CustomGradientBarIdleState = {
78
+ id: 'IDLE',
79
+ };
70
80
 
71
81
  export default function CustomGradientBar( {
72
82
  background,
@@ -75,15 +85,21 @@ export default function CustomGradientBar( {
75
85
  onChange,
76
86
  disableInserter = false,
77
87
  disableAlpha = false,
78
- __experimentalIsRenderedInSidebar,
79
- } ) {
80
- const gradientMarkersContainerDomRef = useRef();
88
+ __experimentalIsRenderedInSidebar = false,
89
+ }: CustomGradientBarProps ) {
90
+ const gradientMarkersContainerDomRef = useRef< HTMLDivElement >( null );
81
91
 
82
92
  const [ gradientBarState, gradientBarStateDispatch ] = useReducer(
83
93
  customGradientBarReducer,
84
94
  customGradientBarReducerInitialState
85
95
  );
86
- const onMouseEnterAndMove = ( event ) => {
96
+ const onMouseEnterAndMove: MouseEventHandler< HTMLDivElement > = (
97
+ event
98
+ ) => {
99
+ if ( ! gradientMarkersContainerDomRef.current ) {
100
+ return;
101
+ }
102
+
87
103
  const insertPosition = getHorizontalRelativeGradientPosition(
88
104
  event.clientX,
89
105
  gradientMarkersContainerDomRef.current
@@ -123,9 +139,15 @@ export default function CustomGradientBar( {
123
139
  ) }
124
140
  onMouseEnter={ onMouseEnterAndMove }
125
141
  onMouseMove={ onMouseEnterAndMove }
126
- style={ { background } }
127
142
  onMouseLeave={ onMouseLeave }
128
143
  >
144
+ <div
145
+ className="components-custom-gradient-picker__gradient-bar-background"
146
+ style={ {
147
+ background,
148
+ opacity: hasGradient ? 1 : 0.4,
149
+ } }
150
+ />
129
151
  <div
130
152
  ref={ gradientMarkersContainerDomRef }
131
153
  className="components-custom-gradient-picker__markers-container"
@@ -5,38 +5,54 @@ import { getHorizontalRelativeGradientPosition } from '../utils';
5
5
 
6
6
  describe( 'getHorizontalRelativeGradientPosition', () => {
7
7
  it( 'should return relative percentage position', () => {
8
- const containerElement = {
9
- getBoundingClientRect: () => ( {
10
- x: 0,
11
- width: 1000,
12
- } ),
13
- };
8
+ jest.spyOn(
9
+ window.HTMLElement.prototype,
10
+ 'getBoundingClientRect'
11
+ ).mockImplementationOnce(
12
+ () =>
13
+ ( {
14
+ x: 0,
15
+ width: 1000,
16
+ } as DOMRect )
17
+ );
14
18
 
19
+ const containerElement = document.createElement( 'div' );
15
20
  expect(
16
21
  getHorizontalRelativeGradientPosition( 500, containerElement )
17
22
  ).toBe( 50 );
18
23
  } );
19
24
 
20
25
  it( 'should subtract the x position of the container from the mouse position', () => {
21
- const containerElement = {
22
- getBoundingClientRect: () => ( {
23
- x: 50,
24
- width: 1000,
25
- } ),
26
- };
26
+ jest.spyOn(
27
+ window.HTMLElement.prototype,
28
+ 'getBoundingClientRect'
29
+ ).mockImplementationOnce(
30
+ () =>
31
+ ( {
32
+ x: 50,
33
+ width: 1000,
34
+ } as DOMRect )
35
+ );
27
36
 
37
+ const containerElement = document.createElement( 'div' );
28
38
  expect(
29
39
  getHorizontalRelativeGradientPosition( 550, containerElement )
30
40
  ).toBe( 50 );
31
41
  } );
32
42
 
33
43
  it( 'should clamp to a whole percentage number', () => {
34
- const containerElement = {
35
- getBoundingClientRect: () => ( {
36
- x: 0,
37
- width: 1000,
38
- } ),
39
- };
44
+ jest.spyOn(
45
+ window.HTMLElement.prototype,
46
+ 'getBoundingClientRect'
47
+ ).mockImplementationOnce(
48
+ () =>
49
+ ( {
50
+ x: 0,
51
+ width: 1000,
52
+ } as DOMRect )
53
+ );
54
+
55
+ const containerElement = document.createElement( 'div' );
40
56
 
41
57
  expect(
42
58
  getHorizontalRelativeGradientPosition( 333, containerElement )
@@ -44,12 +60,17 @@ describe( 'getHorizontalRelativeGradientPosition', () => {
44
60
  } );
45
61
 
46
62
  it( 'should clamp to zero when mouse position is less the x position', () => {
47
- const containerElement = {
48
- getBoundingClientRect: () => ( {
49
- x: 50,
50
- width: 1000,
51
- } ),
52
- };
63
+ jest.spyOn(
64
+ window.HTMLElement.prototype,
65
+ 'getBoundingClientRect'
66
+ ).mockImplementationOnce(
67
+ () =>
68
+ ( {
69
+ x: 50,
70
+ width: 1000,
71
+ } as DOMRect )
72
+ );
73
+ const containerElement = document.createElement( 'div' );
53
74
 
54
75
  expect(
55
76
  getHorizontalRelativeGradientPosition( 2, containerElement )
@@ -57,12 +78,18 @@ describe( 'getHorizontalRelativeGradientPosition', () => {
57
78
  } );
58
79
 
59
80
  it( 'should clamp to 100 when mouse position is greater than width', () => {
60
- const containerElement = {
61
- getBoundingClientRect: () => ( {
62
- x: 0,
63
- width: 1000,
64
- } ),
65
- };
81
+ jest.spyOn(
82
+ window.HTMLElement.prototype,
83
+ 'getBoundingClientRect'
84
+ ).mockImplementationOnce(
85
+ () =>
86
+ ( {
87
+ x: 50,
88
+ width: 1000,
89
+ } as DOMRect )
90
+ );
91
+
92
+ const containerElement = document.createElement( 'div' );
66
93
 
67
94
  expect(
68
95
  getHorizontalRelativeGradientPosition( 1500, containerElement )
@@ -70,7 +97,7 @@ describe( 'getHorizontalRelativeGradientPosition', () => {
70
97
  } );
71
98
 
72
99
  it( 'should return undefined if no containerElement is provided', () => {
73
- const containerElement = undefined;
100
+ const containerElement = null;
74
101
 
75
102
  expect(
76
103
  getHorizontalRelativeGradientPosition( 1500, containerElement )