@wordpress/components 22.0.0 → 22.1.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 (356) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/build/angle-picker-control/index.js +3 -1
  3. package/build/angle-picker-control/index.js.map +1 -1
  4. package/build/autocomplete/index.js +7 -3
  5. package/build/autocomplete/index.js.map +1 -1
  6. package/build/border-box-control/border-box-control/component.js +1 -1
  7. package/build/border-box-control/border-box-control/component.js.map +1 -1
  8. package/build/border-box-control/border-box-control/hook.js +13 -1
  9. package/build/border-box-control/border-box-control/hook.js.map +1 -1
  10. package/build/border-box-control/border-box-control-split-controls/hook.js +11 -1
  11. package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  12. package/build/border-control/border-control/component.js +2 -2
  13. package/build/border-control/border-control/component.js.map +1 -1
  14. package/build/border-control/border-control/hook.js +11 -1
  15. package/build/border-control/border-control/hook.js.map +1 -1
  16. package/build/border-control/border-control-dropdown/component.js +1 -1
  17. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  18. package/build/border-control/border-control-dropdown/hook.js +10 -2
  19. package/build/border-control/border-control-dropdown/hook.js.map +1 -1
  20. package/build/color-palette/index.js +1 -1
  21. package/build/color-palette/index.js.map +1 -1
  22. package/build/color-picker/input-with-slider.js +17 -3
  23. package/build/color-picker/input-with-slider.js.map +1 -1
  24. package/build/custom-select-control/index.js +5 -2
  25. package/build/custom-select-control/index.js.map +1 -1
  26. package/build/dashicon/index.js +17 -2
  27. package/build/dashicon/index.js.map +1 -1
  28. package/build/draggable/index.js +58 -38
  29. package/build/draggable/index.js.map +1 -1
  30. package/build/draggable/types.js +6 -0
  31. package/build/draggable/types.js.map +1 -0
  32. package/build/flex/flex/hook.js +2 -3
  33. package/build/flex/flex/hook.js.map +1 -1
  34. package/build/focal-point-picker/focal-point.js +2 -12
  35. package/build/focal-point-picker/focal-point.js.map +1 -1
  36. package/build/focal-point-picker/styles/focal-point-style.js +11 -51
  37. package/build/focal-point-picker/styles/focal-point-style.js.map +1 -1
  38. package/build/font-size-picker/constants.js +41 -0
  39. package/build/font-size-picker/constants.js.map +1 -0
  40. package/build/font-size-picker/font-size-picker-select.js +97 -0
  41. package/build/font-size-picker/font-size-picker-select.js.map +1 -0
  42. package/build/font-size-picker/font-size-picker-toggle-group.js +50 -0
  43. package/build/font-size-picker/font-size-picker-toggle-group.js.map +1 -0
  44. package/build/font-size-picker/index.js +39 -76
  45. package/build/font-size-picker/index.js.map +1 -1
  46. package/build/font-size-picker/utils.js +17 -89
  47. package/build/font-size-picker/utils.js.map +1 -1
  48. package/build/form-token-field/index.js +9 -6
  49. package/build/form-token-field/index.js.map +1 -1
  50. package/build/higher-order/navigate-regions/index.js +3 -0
  51. package/build/higher-order/navigate-regions/index.js.map +1 -1
  52. package/build/icon/index.js +3 -2
  53. package/build/icon/index.js.map +1 -1
  54. package/build/index.js +8 -0
  55. package/build/index.js.map +1 -1
  56. package/build/menu-group/index.js +17 -3
  57. package/build/menu-group/index.js.map +1 -1
  58. package/build/menu-group/types.js +6 -0
  59. package/build/menu-group/types.js.map +1 -0
  60. package/build/navigator/navigator-screen/component.js +9 -5
  61. package/build/navigator/navigator-screen/component.js.map +1 -1
  62. package/build/palette-edit/index.js +3 -1
  63. package/build/palette-edit/index.js.map +1 -1
  64. package/build/popover/index.js +8 -4
  65. package/build/popover/index.js.map +1 -1
  66. package/build/range-control/styles/range-control-styles.js +47 -57
  67. package/build/range-control/styles/range-control-styles.js.map +1 -1
  68. package/build/spinner/styles.js +4 -4
  69. package/build/spinner/styles.js.map +1 -1
  70. package/build/tab-panel/index.js +3 -4
  71. package/build/tab-panel/index.js.map +1 -1
  72. package/build/toggle-group-control/toggle-group-control/component.js +1 -0
  73. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  74. package/build/toggle-group-control/toggle-group-control/styles.js +11 -6
  75. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  76. package/build/tools-panel/styles.js +14 -14
  77. package/build/tools-panel/styles.js.map +1 -1
  78. package/build/tools-panel/tools-panel-item/hook.js +9 -5
  79. package/build/tools-panel/tools-panel-item/hook.js.map +1 -1
  80. package/build/utils/colors-values.js +3 -2
  81. package/build/utils/colors-values.js.map +1 -1
  82. package/build/utils/input/base.js +2 -2
  83. package/build/utils/input/base.js.map +1 -1
  84. package/build/view/index.js.map +1 -1
  85. package/build-module/angle-picker-control/index.js +2 -1
  86. package/build-module/angle-picker-control/index.js.map +1 -1
  87. package/build-module/autocomplete/index.js +7 -3
  88. package/build-module/autocomplete/index.js.map +1 -1
  89. package/build-module/border-box-control/border-box-control/component.js +1 -1
  90. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  91. package/build-module/border-box-control/border-box-control/hook.js +13 -1
  92. package/build-module/border-box-control/border-box-control/hook.js.map +1 -1
  93. package/build-module/border-box-control/border-box-control-split-controls/hook.js +11 -1
  94. package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  95. package/build-module/border-control/border-control/component.js +2 -2
  96. package/build-module/border-control/border-control/component.js.map +1 -1
  97. package/build-module/border-control/border-control/hook.js +11 -1
  98. package/build-module/border-control/border-control/hook.js.map +1 -1
  99. package/build-module/border-control/border-control-dropdown/component.js +1 -1
  100. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  101. package/build-module/border-control/border-control-dropdown/hook.js +10 -2
  102. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
  103. package/build-module/color-palette/index.js +1 -1
  104. package/build-module/color-palette/index.js.map +1 -1
  105. package/build-module/color-picker/input-with-slider.js +17 -3
  106. package/build-module/color-picker/input-with-slider.js.map +1 -1
  107. package/build-module/custom-select-control/index.js +5 -2
  108. package/build-module/custom-select-control/index.js.map +1 -1
  109. package/build-module/dashicon/index.js +17 -2
  110. package/build-module/dashicon/index.js.map +1 -1
  111. package/build-module/draggable/index.js +59 -38
  112. package/build-module/draggable/index.js.map +1 -1
  113. package/build-module/draggable/types.js +2 -0
  114. package/build-module/draggable/types.js.map +1 -0
  115. package/build-module/flex/flex/hook.js +2 -3
  116. package/build-module/flex/flex/hook.js.map +1 -1
  117. package/build-module/focal-point-picker/focal-point.js +3 -13
  118. package/build-module/focal-point-picker/focal-point.js.map +1 -1
  119. package/build-module/focal-point-picker/styles/focal-point-style.js +6 -52
  120. package/build-module/focal-point-picker/styles/focal-point-style.js.map +1 -1
  121. package/build-module/font-size-picker/constants.js +31 -0
  122. package/build-module/font-size-picker/constants.js.map +1 -0
  123. package/build-module/font-size-picker/font-size-picker-select.js +83 -0
  124. package/build-module/font-size-picker/font-size-picker-select.js.map +1 -0
  125. package/build-module/font-size-picker/font-size-picker-toggle-group.js +40 -0
  126. package/build-module/font-size-picker/font-size-picker-toggle-group.js.map +1 -0
  127. package/build-module/font-size-picker/index.js +38 -76
  128. package/build-module/font-size-picker/index.js.map +1 -1
  129. package/build-module/font-size-picker/utils.js +15 -86
  130. package/build-module/font-size-picker/utils.js.map +1 -1
  131. package/build-module/form-token-field/index.js +9 -6
  132. package/build-module/form-token-field/index.js.map +1 -1
  133. package/build-module/higher-order/navigate-regions/index.js +3 -0
  134. package/build-module/higher-order/navigate-regions/index.js.map +1 -1
  135. package/build-module/icon/index.js +3 -2
  136. package/build-module/icon/index.js.map +1 -1
  137. package/build-module/index.js +1 -0
  138. package/build-module/index.js.map +1 -1
  139. package/build-module/menu-group/index.js +20 -2
  140. package/build-module/menu-group/index.js.map +1 -1
  141. package/build-module/menu-group/types.js +2 -0
  142. package/build-module/menu-group/types.js.map +1 -0
  143. package/build-module/navigator/navigator-screen/component.js +9 -5
  144. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  145. package/build-module/palette-edit/index.js +3 -1
  146. package/build-module/palette-edit/index.js.map +1 -1
  147. package/build-module/popover/index.js +8 -4
  148. package/build-module/popover/index.js.map +1 -1
  149. package/build-module/range-control/styles/range-control-styles.js +47 -57
  150. package/build-module/range-control/styles/range-control-styles.js.map +1 -1
  151. package/build-module/spinner/styles.js +4 -4
  152. package/build-module/spinner/styles.js.map +1 -1
  153. package/build-module/tab-panel/index.js +4 -5
  154. package/build-module/tab-panel/index.js.map +1 -1
  155. package/build-module/toggle-group-control/toggle-group-control/component.js +1 -0
  156. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  157. package/build-module/toggle-group-control/toggle-group-control/styles.js +12 -6
  158. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  159. package/build-module/tools-panel/styles.js +14 -14
  160. package/build-module/tools-panel/styles.js.map +1 -1
  161. package/build-module/tools-panel/tools-panel-item/hook.js +9 -5
  162. package/build-module/tools-panel/tools-panel-item/hook.js.map +1 -1
  163. package/build-module/utils/colors-values.js +3 -2
  164. package/build-module/utils/colors-values.js.map +1 -1
  165. package/build-module/utils/input/base.js +2 -2
  166. package/build-module/utils/input/base.js.map +1 -1
  167. package/build-module/view/index.js.map +1 -1
  168. package/build-style/style-rtl.css +72 -44
  169. package/build-style/style.css +72 -44
  170. package/build-types/border-box-control/border-box-control/component.d.ts +4 -4
  171. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  172. package/build-types/border-box-control/border-box-control/hook.d.ts +6 -6
  173. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  174. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts +4 -2
  175. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -1
  176. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +3 -3
  177. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +5 -5
  178. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
  179. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts +3 -2
  180. package/build-types/border-box-control/border-box-control-visualizer/component.d.ts.map +1 -1
  181. package/build-types/border-box-control/stories/index.d.ts +3 -3
  182. package/build-types/border-box-control/types.d.ts +5 -38
  183. package/build-types/border-box-control/types.d.ts.map +1 -1
  184. package/build-types/border-control/border-control/component.d.ts +4 -2
  185. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  186. package/build-types/border-control/border-control/hook.d.ts +5 -5
  187. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  188. package/build-types/border-control/border-control-dropdown/component.d.ts +3 -3
  189. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  190. package/build-types/border-control/border-control-dropdown/hook.d.ts +5 -5
  191. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  192. package/build-types/border-control/stories/index.d.ts +24 -12
  193. package/build-types/border-control/stories/index.d.ts.map +1 -1
  194. package/build-types/border-control/types.d.ts +10 -51
  195. package/build-types/border-control/types.d.ts.map +1 -1
  196. package/build-types/color-palette/index.d.ts +16 -2
  197. package/build-types/color-palette/index.d.ts.map +1 -1
  198. package/build-types/color-palette/stories/index.d.ts +31 -2
  199. package/build-types/color-palette/stories/index.d.ts.map +1 -1
  200. package/build-types/color-palette/types.d.ts +14 -10
  201. package/build-types/color-palette/types.d.ts.map +1 -1
  202. package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
  203. package/build-types/custom-select-control/index.d.ts.map +1 -1
  204. package/build-types/dashicon/index.d.ts +6 -1
  205. package/build-types/dashicon/index.d.ts.map +1 -1
  206. package/build-types/date-time/types.d.ts +0 -16
  207. package/build-types/date-time/types.d.ts.map +1 -1
  208. package/build-types/draggable/index.d.ts +42 -66
  209. package/build-types/draggable/index.d.ts.map +1 -1
  210. package/build-types/draggable/stories/index.d.ts +12 -0
  211. package/build-types/draggable/stories/index.d.ts.map +1 -0
  212. package/build-types/draggable/types.d.ts +58 -0
  213. package/build-types/draggable/types.d.ts.map +1 -0
  214. package/build-types/flex/flex/hook.d.ts.map +1 -1
  215. package/build-types/focal-point-picker/focal-point.d.ts.map +1 -1
  216. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +1 -1
  217. package/build-types/focal-point-picker/styles/focal-point-style.d.ts +1 -12
  218. package/build-types/focal-point-picker/styles/focal-point-style.d.ts.map +1 -1
  219. package/build-types/font-size-picker/constants.d.ts +15 -0
  220. package/build-types/font-size-picker/constants.d.ts.map +1 -0
  221. package/build-types/font-size-picker/font-size-picker-select.d.ts +5 -0
  222. package/build-types/font-size-picker/font-size-picker-select.d.ts.map +1 -0
  223. package/build-types/font-size-picker/font-size-picker-toggle-group.d.ts +5 -0
  224. package/build-types/font-size-picker/font-size-picker-toggle-group.d.ts.map +1 -0
  225. package/build-types/font-size-picker/index.d.ts.map +1 -1
  226. package/build-types/font-size-picker/types.d.ts +13 -13
  227. package/build-types/font-size-picker/types.d.ts.map +1 -1
  228. package/build-types/font-size-picker/utils.d.ts +6 -18
  229. package/build-types/font-size-picker/utils.d.ts.map +1 -1
  230. package/build-types/form-token-field/index.d.ts.map +1 -1
  231. package/build-types/icon/index.d.ts +1 -1
  232. package/build-types/icon/index.d.ts.map +1 -1
  233. package/build-types/menu-group/index.d.ts +21 -1
  234. package/build-types/menu-group/index.d.ts.map +1 -1
  235. package/build-types/menu-group/test/index.d.ts +2 -0
  236. package/build-types/menu-group/test/index.d.ts.map +1 -0
  237. package/build-types/menu-group/types.d.ts +23 -0
  238. package/build-types/menu-group/types.d.ts.map +1 -0
  239. package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
  240. package/build-types/popover/index.d.ts.map +1 -1
  241. package/build-types/tab-panel/index.d.ts.map +1 -1
  242. package/build-types/toggle-group-control/stories/index.d.ts.map +1 -1
  243. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +1 -2
  244. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  245. package/build-types/toggle-group-control/types.d.ts +2 -1
  246. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  247. package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
  248. package/build-types/unit-control/index.d.ts +1 -1
  249. package/build-types/utils/colors-values.d.ts +1 -0
  250. package/build-types/utils/colors-values.d.ts.map +1 -1
  251. package/build-types/view/index.d.ts +1 -1
  252. package/build-types/view/index.d.ts.map +1 -1
  253. package/package.json +17 -17
  254. package/src/angle-picker-control/index.js +2 -1
  255. package/src/autocomplete/index.js +12 -3
  256. package/src/autocomplete/style.scss +1 -1
  257. package/src/base-field/test/__snapshots__/index.js.snap +9 -7
  258. package/src/base-field/test/index.js +27 -15
  259. package/src/border-box-control/border-box-control/README.md +5 -17
  260. package/src/border-box-control/border-box-control/component.tsx +1 -1
  261. package/src/border-box-control/border-box-control/hook.ts +18 -4
  262. package/src/border-box-control/border-box-control-split-controls/hook.ts +10 -0
  263. package/src/border-box-control/types.ts +32 -58
  264. package/src/border-control/border-control/README.md +4 -17
  265. package/src/border-control/border-control/component.tsx +2 -2
  266. package/src/border-control/border-control/hook.ts +10 -0
  267. package/src/border-control/border-control-dropdown/component.tsx +7 -6
  268. package/src/border-control/border-control-dropdown/hook.ts +9 -1
  269. package/src/border-control/types.ts +43 -80
  270. package/src/card/test/__snapshots__/index.tsx.snap +64 -368
  271. package/src/card/test/index.tsx +2 -2
  272. package/src/checkbox-control/style.scss +3 -3
  273. package/src/color-palette/README.md +12 -16
  274. package/src/color-palette/index.tsx +1 -1
  275. package/src/color-palette/style.scss +1 -1
  276. package/src/color-palette/types.ts +14 -10
  277. package/src/color-picker/input-with-slider.tsx +13 -2
  278. package/src/custom-select-control/index.js +7 -0
  279. package/src/custom-select-control/stories/index.js +1 -0
  280. package/src/custom-select-control/style.scss +6 -1
  281. package/src/custom-select-control/test/index.js +39 -0
  282. package/src/dashicon/index.js +21 -2
  283. package/src/date-time/date/test/index.tsx +2 -2
  284. package/src/date-time/types.ts +0 -19
  285. package/src/divider/test/index.tsx +4 -4
  286. package/src/draggable/README.md +13 -18
  287. package/src/draggable/{index.js → index.tsx} +71 -47
  288. package/src/draggable/stories/index.tsx +83 -0
  289. package/src/draggable/types.ts +58 -0
  290. package/src/drop-zone/style.scss +1 -1
  291. package/src/flex/flex/hook.ts +0 -3
  292. package/src/flex/test/index.tsx +29 -3
  293. package/src/focal-point-picker/focal-point.tsx +2 -24
  294. package/src/focal-point-picker/styles/focal-point-style.ts +8 -32
  295. package/src/font-size-picker/constants.ts +37 -0
  296. package/src/font-size-picker/font-size-picker-select.tsx +98 -0
  297. package/src/font-size-picker/font-size-picker-toggle-group.tsx +41 -0
  298. package/src/font-size-picker/index.tsx +55 -118
  299. package/src/font-size-picker/test/index.tsx +253 -44
  300. package/src/font-size-picker/test/utils.ts +58 -98
  301. package/src/font-size-picker/types.ts +25 -16
  302. package/src/font-size-picker/utils.ts +16 -102
  303. package/src/form-toggle/style.scss +3 -3
  304. package/src/form-token-field/index.tsx +13 -5
  305. package/src/form-token-field/style.scss +2 -2
  306. package/src/form-token-field/test/index.tsx +6 -6
  307. package/src/higher-order/navigate-regions/index.js +4 -0
  308. package/src/higher-order/navigate-regions/style.scss +72 -20
  309. package/src/higher-order/with-notices/test/index.js +1 -1
  310. package/src/icon/index.tsx +3 -2
  311. package/src/icon/test/index.js +10 -0
  312. package/src/index.js +1 -0
  313. package/src/item-group/stories/index.js +1 -1
  314. package/src/menu-group/{index.js → index.tsx} +22 -3
  315. package/src/menu-group/test/{index.js → index.tsx} +0 -0
  316. package/src/menu-group/types.ts +23 -0
  317. package/src/menu-item/style.scss +1 -1
  318. package/src/mobile/bottom-sheet/test/range-cell.native.js +4 -4
  319. package/src/mobile/html-text-input/test/index.native.js +2 -2
  320. package/src/mobile/link-settings/test/edit.native.js +29 -29
  321. package/src/mobile/link-settings/test/link-settings-navigation.native.js +5 -5
  322. package/src/navigator/navigator-screen/component.tsx +8 -3
  323. package/src/notice/README.md +2 -1
  324. package/src/notice/style.scss +1 -1
  325. package/src/palette-edit/index.js +3 -0
  326. package/src/panel/style.scss +1 -1
  327. package/src/popover/index.tsx +18 -7
  328. package/src/range-control/styles/range-control-styles.ts +2 -2
  329. package/src/resizable-box/style.scss +2 -2
  330. package/src/scrollable/test/index.tsx +7 -3
  331. package/src/search-control/style.scss +1 -1
  332. package/src/snackbar/style.scss +2 -2
  333. package/src/spacer/test/index.tsx +33 -3
  334. package/src/spinner/styles.ts +1 -1
  335. package/src/surface/test/index.tsx +12 -12
  336. package/src/tab-panel/index.tsx +9 -6
  337. package/src/tab-panel/style.scss +4 -5
  338. package/src/text/test/index.tsx +4 -4
  339. package/src/toggle-group-control/stories/index.tsx +2 -0
  340. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +6 -8
  341. package/src/toggle-group-control/test/index.tsx +29 -17
  342. package/src/toggle-group-control/toggle-group-control/README.md +8 -1
  343. package/src/toggle-group-control/toggle-group-control/component.tsx +1 -1
  344. package/src/toggle-group-control/toggle-group-control/styles.ts +22 -16
  345. package/src/toggle-group-control/types.ts +2 -1
  346. package/src/tools-panel/styles.ts +1 -1
  347. package/src/tools-panel/tools-panel-item/hook.ts +6 -1
  348. package/src/tree-grid/test/index.js +12 -12
  349. package/src/truncate/test/index.tsx +9 -9
  350. package/src/ui/form-group/test/index.js +16 -17
  351. package/src/utils/colors-values.js +4 -2
  352. package/src/utils/hooks/stories/use-cx.js +1 -1
  353. package/src/utils/input/base.js +2 -2
  354. package/src/view/{index.js → index.ts} +0 -0
  355. package/tsconfig.tsbuildinfo +1 -1
  356. package/src/draggable/stories/index.js +0 -72
@@ -9,6 +9,11 @@
9
9
  outline: 0; // focus ring is handled elsewhere
10
10
  }
11
11
 
12
+ .components-custom-select-control__hint {
13
+ color: $gray-600;
14
+ margin-left: 10px;
15
+ }
16
+
12
17
  .components-custom-select-control__menu {
13
18
  // Hide when collapsed.
14
19
  &[aria-hidden="true"] {
@@ -50,7 +55,7 @@
50
55
  background: $gray-300;
51
56
  }
52
57
  .components-custom-select-control__item-hint {
53
- color: $gray-700;
58
+ color: $gray-600;
54
59
  text-align: right;
55
60
  padding-right: $grid-unit-05;
56
61
  }
@@ -46,4 +46,43 @@ describe( 'CustomSelectControl', () => {
46
46
 
47
47
  expect( onKeyDown ).toHaveBeenCalledTimes( 0 );
48
48
  } );
49
+
50
+ it( 'does not show selected hint by default', () => {
51
+ render(
52
+ <CustomSelectControl
53
+ label="Custom select"
54
+ options={ [
55
+ {
56
+ key: 'one',
57
+ name: 'One',
58
+ __experimentalHint: 'Hint',
59
+ },
60
+ ] }
61
+ __nextUnconstrainedWidth
62
+ />
63
+ );
64
+ expect(
65
+ screen.getByRole( 'button', { name: 'Custom select' } )
66
+ ).not.toHaveTextContent( 'Hint' );
67
+ } );
68
+
69
+ it( 'shows selected hint when __experimentalShowSelectedHint is set', () => {
70
+ render(
71
+ <CustomSelectControl
72
+ label="Custom select"
73
+ options={ [
74
+ {
75
+ key: 'one',
76
+ name: 'One',
77
+ __experimentalHint: 'Hint',
78
+ },
79
+ ] }
80
+ __experimentalShowSelectedHint
81
+ __nextUnconstrainedWidth
82
+ />
83
+ );
84
+ expect(
85
+ screen.getByRole( 'button', { name: 'Custom select' } )
86
+ ).toHaveTextContent( 'Hint' );
87
+ } );
49
88
  } );
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * @property {import('./types').IconKey} icon Icon name
5
5
  * @property {string} [className] Class name
6
+ * @property {number} [size] Size of the icon
6
7
  */
7
8
  /** @typedef {import('react').ComponentPropsWithoutRef<'span'> & OwnProps} Props */
8
9
 
@@ -10,7 +11,8 @@
10
11
  * @param {Props} props
11
12
  * @return {JSX.Element} Element
12
13
  */
13
- function Dashicon( { icon, className, ...extraProps } ) {
14
+
15
+ function Dashicon( { icon, className, size = 20, style = {}, ...extraProps } ) {
14
16
  const iconClass = [
15
17
  'dashicon',
16
18
  'dashicons',
@@ -20,7 +22,24 @@ function Dashicon( { icon, className, ...extraProps } ) {
20
22
  .filter( Boolean )
21
23
  .join( ' ' );
22
24
 
23
- return <span className={ iconClass } { ...extraProps } />;
25
+ // For retro-compatibility reasons (for example if people are overriding icon size with CSS), we add inline styles just if the size is different to the default
26
+ const sizeStyles =
27
+ // using `!=` to catch both 20 and "20"
28
+ // eslint-disable-next-line eqeqeq
29
+ 20 != size
30
+ ? {
31
+ fontSize: `${ size }px`,
32
+ width: `${ size }px`,
33
+ height: `${ size }px`,
34
+ }
35
+ : {};
36
+
37
+ const styles = {
38
+ ...sizeStyles,
39
+ ...style,
40
+ };
41
+
42
+ return <span className={ iconClass } style={ styles } { ...extraProps } />;
24
43
  }
25
44
 
26
45
  export default Dashicon;
@@ -16,7 +16,7 @@ describe( 'DatePicker', () => {
16
16
 
17
17
  expect(
18
18
  screen.getByRole( 'button', { name: 'May 2, 2022. Selected' } )
19
- ).not.toBeNull();
19
+ ).toBeInTheDocument();
20
20
  } );
21
21
 
22
22
  it( "should highlight today's date when not provided a currentDate", () => {
@@ -27,7 +27,7 @@ describe( 'DatePicker', () => {
27
27
  screen.getByRole( 'button', {
28
28
  name: `${ todayDescription }. Selected`,
29
29
  } )
30
- ).not.toBeNull();
30
+ ).toBeInTheDocument();
31
31
  } );
32
32
 
33
33
  it( 'should call onChange when a day is selected', async () => {
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import type { Moment } from 'moment';
5
-
6
1
  export type TimePickerProps = {
7
2
  /**
8
3
  * The initial current time the time picker should render.
@@ -30,20 +25,6 @@ export type DatePickerEvent = {
30
25
  date: Date;
31
26
  };
32
27
 
33
- export type DatePickerDayProps = {
34
- /**
35
- * The day to display.
36
- */
37
- day: Moment;
38
-
39
- /**
40
- * List of events to show on this day.
41
- *
42
- * @default []
43
- */
44
- events?: DatePickerEvent[];
45
- };
46
-
47
28
  export type DatePickerProps = {
48
29
  /**
49
30
  * The current date and time at initialization. Optionally pass in a `null`
@@ -9,15 +9,13 @@ import { render, screen } from '@testing-library/react';
9
9
  import { Divider } from '..';
10
10
 
11
11
  describe( 'props', () => {
12
- beforeEach( () => {
13
- render( <Divider /> );
14
- } );
15
-
16
12
  test( 'should render correctly', () => {
13
+ render( <Divider /> );
17
14
  expect( screen.getByRole( 'separator' ) ).toMatchSnapshot();
18
15
  } );
19
16
 
20
17
  test( 'should render marginStart', () => {
18
+ render( <Divider /> );
21
19
  render( <Divider marginStart={ 5 } /> );
22
20
 
23
21
  const dividers = screen.getAllByRole( 'separator' );
@@ -25,6 +23,7 @@ describe( 'props', () => {
25
23
  } );
26
24
 
27
25
  test( 'should render marginEnd', () => {
26
+ render( <Divider /> );
28
27
  render( <Divider marginEnd={ 5 } /> );
29
28
 
30
29
  const dividers = screen.getAllByRole( 'separator' );
@@ -32,6 +31,7 @@ describe( 'props', () => {
32
31
  } );
33
32
 
34
33
  test( 'should render margin', () => {
34
+ render( <Divider /> );
35
35
  render( <Divider margin={ 7 } /> );
36
36
 
37
37
  const dividers = screen.getAllByRole( 'separator' );
@@ -1,6 +1,6 @@
1
1
  # Draggable
2
2
 
3
- `Draggable` is a Component that provides a way to set up a cross-browser (including IE) customisable drag image and the transfer data for the drag event. It decouples the drag handle and the element to drag: use it by wrapping the component that will become the drag handle and providing the DOM ID of the element to drag.
3
+ `Draggable` is a Component that provides a way to set up a cross-browser (including IE) customizable drag image and the transfer data for the drag event. It decouples the drag handle and the element to drag: use it by wrapping the component that will become the drag handle and providing the DOM ID of the element to drag.
4
4
 
5
5
  Note that the drag handle needs to declare the `draggable="true"` property and bind the `Draggable`s `onDraggableStart` and `onDraggableEnd` event handlers to its own `onDragStart` and `onDragEnd` respectively. `Draggable` takes care of the logic to setup the drag image and the transfer data, but is not concerned with creating an actual DOM element that is draggable.
6
6
 
@@ -8,44 +8,39 @@ Note that the drag handle needs to declare the `draggable="true"` property and b
8
8
 
9
9
  The component accepts the following props:
10
10
 
11
- ### elementId
11
+ ### `elementId`: `string`
12
12
 
13
13
  The HTML id of the element to clone on drag
14
14
 
15
- - Type: `string`
16
15
  - Required: Yes
17
16
 
18
- ### transferData
17
+ ### `onDragEnd`: `( event: DragEvent ) => void`
19
18
 
20
- Arbitrary data object attached to the drag and drop event.
21
-
22
- - Type: `Object`
23
- - Required: Yes
24
-
25
- ### onDragStart
26
-
27
- A function called when dragging starts. This callback receives the `event` object from the `dragstart` event as its first parameter.
19
+ A function called when dragging ends. This callback receives the `event` object from the `dragend` event as its first parameter.
28
20
 
29
- - Type: `Function`
30
21
  - Required: No
31
22
  - Default: `noop`
32
23
 
33
- ### onDragOver
24
+ ### `onDragOver`: `( event: DragEvent ) => void`
34
25
 
35
26
  A function called when the element being dragged is dragged over a valid drop target. This callback receives the `event` object from the `dragover` event as its first parameter.
36
27
 
37
- - Type: `Function`
38
28
  - Required: No
39
29
  - Default: `noop`
40
30
 
41
- ### onDragEnd
31
+ ### `onDragStart`: `( event: DragEvent ) => void`
42
32
 
43
- A function called when dragging ends. This callback receives the `event` object from the `dragend` event as its first parameter.
33
+ A function called when dragging starts. This callback receives the `event` object from the `dragstart` event as its first parameter.
44
34
 
45
- - Type: `Function`
46
35
  - Required: No
47
36
  - Default: `noop`
48
37
 
38
+ ### `transferData`: `unknown`
39
+
40
+ Arbitrary data object attached to the drag and drop event.
41
+
42
+ - Required: Yes
43
+
49
44
  ## Usage
50
45
 
51
46
  ```jsx
@@ -1,38 +1,64 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { DragEvent } from 'react';
5
+
1
6
  /**
2
7
  * WordPress dependencies
3
8
  */
4
9
  import { throttle } from '@wordpress/compose';
5
10
  import { useEffect, useRef } from '@wordpress/element';
6
11
 
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import type { DraggableProps } from './types';
16
+
7
17
  const dragImageClass = 'components-draggable__invisible-drag-image';
8
18
  const cloneWrapperClass = 'components-draggable__clone';
9
19
  const clonePadding = 0;
10
20
  const bodyClass = 'is-dragging-components-draggable';
11
21
 
12
22
  /**
13
- * @typedef RenderProp
14
- * @property {(event: import('react').DragEvent) => void} onDraggableStart `onDragStart` handler.
15
- * @property {(event: import('react').DragEvent) => void} onDraggableEnd `onDragEnd` handler.
23
+ * `Draggable` is a Component that provides a way to set up a cross-browser
24
+ * (including IE) customizable drag image and the transfer data for the drag
25
+ * event. It decouples the drag handle and the element to drag: use it by
26
+ * wrapping the component that will become the drag handle and providing the DOM
27
+ * ID of the element to drag.
28
+ *
29
+ * Note that the drag handle needs to declare the `draggable="true"` property
30
+ * and bind the `Draggable`s `onDraggableStart` and `onDraggableEnd` event
31
+ * handlers to its own `onDragStart` and `onDragEnd` respectively. `Draggable`
32
+ * takes care of the logic to setup the drag image and the transfer data, but is
33
+ * not concerned with creating an actual DOM element that is draggable.
34
+ *
35
+ * ```jsx
36
+ * import { Draggable, Panel, PanelBody } from '@wordpress/components';
37
+ * import { Icon, more } from '@wordpress/icons';
38
+ *
39
+ * const MyDraggable = () => (
40
+ * <div id="draggable-panel">
41
+ * <Panel header="Draggable panel">
42
+ * <PanelBody>
43
+ * <Draggable elementId="draggable-panel" transferData={ {} }>
44
+ * { ( { onDraggableStart, onDraggableEnd } ) => (
45
+ * <div
46
+ * className="example-drag-handle"
47
+ * draggable
48
+ * onDragStart={ onDraggableStart }
49
+ * onDragEnd={ onDraggableEnd }
50
+ * >
51
+ * <Icon icon={ more } />
52
+ * </div>
53
+ * ) }
54
+ * </Draggable>
55
+ * </PanelBody>
56
+ * </Panel>
57
+ * </div>
58
+ * );
59
+ * ```
16
60
  */
17
-
18
- /**
19
- * @typedef Props
20
- * @property {(props: RenderProp) => JSX.Element | null} children Children.
21
- * @property {(event: import('react').DragEvent) => void} [onDragStart] Callback when dragging starts.
22
- * @property {(event: import('react').DragEvent) => void} [onDragOver] Callback when dragging happens over the document.
23
- * @property {(event: import('react').DragEvent) => void} [onDragEnd] Callback when dragging ends.
24
- * @property {string} [cloneClassname] Classname for the cloned element.
25
- * @property {string} [elementId] ID for the element.
26
- * @property {any} [transferData] Transfer data for the drag event.
27
- * @property {string} [__experimentalTransferDataType] The transfer data type to set.
28
- * @property {import('react').ReactNode} __experimentalDragComponent Component to show when dragging.
29
- */
30
-
31
- /**
32
- * @param {Props} props
33
- * @return {JSX.Element} A draggable component.
34
- */
35
- export default function Draggable( {
61
+ export function Draggable( {
36
62
  children,
37
63
  onDragStart,
38
64
  onDragOver,
@@ -42,17 +68,16 @@ export default function Draggable( {
42
68
  transferData,
43
69
  __experimentalTransferDataType: transferDataType = 'text',
44
70
  __experimentalDragComponent: dragComponent,
45
- } ) {
46
- /** @type {import('react').MutableRefObject<HTMLDivElement | null>} */
47
- const dragComponentRef = useRef( null );
71
+ }: DraggableProps ) {
72
+ const dragComponentRef = useRef< HTMLDivElement >( null );
48
73
  const cleanup = useRef( () => {} );
49
74
 
50
75
  /**
51
76
  * Removes the element clone, resets cursor, and removes drag listener.
52
77
  *
53
- * @param {import('react').DragEvent} event The non-custom DragEvent.
78
+ * @param event The non-custom DragEvent.
54
79
  */
55
- function end( event ) {
80
+ function end( event: DragEvent ) {
56
81
  event.preventDefault();
57
82
  cleanup.current();
58
83
 
@@ -69,11 +94,10 @@ export default function Draggable( {
69
94
  * - Sets transfer data.
70
95
  * - Adds dragover listener.
71
96
  *
72
- * @param {import('react').DragEvent} event The non-custom DragEvent.
97
+ * @param event The non-custom DragEvent.
73
98
  */
74
- function start( event ) {
75
- // @ts-ignore We know that ownerDocument does exist on an Element
76
- const { ownerDocument } = event.target;
99
+ function start( event: DragEvent ) {
100
+ const { ownerDocument } = event.target as HTMLElement;
77
101
 
78
102
  event.dataTransfer.setData(
79
103
  transferDataType,
@@ -82,8 +106,8 @@ export default function Draggable( {
82
106
 
83
107
  const cloneWrapper = ownerDocument.createElement( 'div' );
84
108
  // Reset position to 0,0. Natural stacking order will position this lower, even with a transform otherwise.
85
- cloneWrapper.style.top = 0;
86
- cloneWrapper.style.left = 0;
109
+ cloneWrapper.style.top = '0';
110
+ cloneWrapper.style.left = '0';
87
111
 
88
112
  const dragImage = ownerDocument.createElement( 'div' );
89
113
 
@@ -119,19 +143,21 @@ export default function Draggable( {
119
143
  // Inject the cloneWrapper into the DOM.
120
144
  ownerDocument.body.appendChild( cloneWrapper );
121
145
  } else {
122
- const element = ownerDocument.getElementById( elementId );
146
+ const element = ownerDocument.getElementById(
147
+ elementId
148
+ ) as HTMLElement;
123
149
 
124
150
  // Prepare element clone and append to element wrapper.
125
151
  const elementRect = element.getBoundingClientRect();
126
152
  const elementWrapper = element.parentNode;
127
- const elementTopOffset = parseInt( elementRect.top, 10 );
128
- const elementLeftOffset = parseInt( elementRect.left, 10 );
153
+ const elementTopOffset = elementRect.top;
154
+ const elementLeftOffset = elementRect.left;
129
155
 
130
156
  cloneWrapper.style.width = `${
131
157
  elementRect.width + clonePadding * 2
132
158
  }px`;
133
159
 
134
- const clone = element.cloneNode( true );
160
+ const clone = element.cloneNode( true ) as HTMLElement;
135
161
  clone.id = `clone-${ elementId }`;
136
162
 
137
163
  // Position clone right over the original element (20px padding).
@@ -140,24 +166,21 @@ export default function Draggable( {
140
166
  cloneWrapper.style.transform = `translate( ${ x }px, ${ y }px )`;
141
167
 
142
168
  // Hack: Remove iFrames as it's causing the embeds drag clone to freeze.
143
- Array.from( clone.querySelectorAll( 'iframe' ) ).forEach(
144
- ( child ) => child.parentNode.removeChild( child )
145
- );
169
+ Array.from< HTMLIFrameElement >(
170
+ clone.querySelectorAll( 'iframe' )
171
+ ).forEach( ( child ) => child.parentNode?.removeChild( child ) );
146
172
 
147
173
  cloneWrapper.appendChild( clone );
148
174
 
149
175
  // Inject the cloneWrapper into the DOM.
150
- elementWrapper.appendChild( cloneWrapper );
176
+ elementWrapper?.appendChild( cloneWrapper );
151
177
  }
152
178
 
153
179
  // Mark the current cursor coordinates.
154
180
  let cursorLeft = event.clientX;
155
181
  let cursorTop = event.clientY;
156
182
 
157
- /**
158
- * @param {import('react').DragEvent<Element>} e
159
- */
160
- function over( e ) {
183
+ function over( e: DragEvent ) {
161
184
  // Skip doing any work if mouse has not moved.
162
185
  if ( cursorLeft === e.clientX && cursorTop === e.clientY ) {
163
186
  return;
@@ -188,8 +211,7 @@ export default function Draggable( {
188
211
  // https://reactjs.org/docs/events.html#event-pooling
189
212
  event.persist();
190
213
 
191
- /** @type {number | undefined} */
192
- let timerId;
214
+ let timerId: number | undefined;
193
215
 
194
216
  if ( onDragStart ) {
195
217
  timerId = setTimeout( () => onDragStart( event ) );
@@ -239,3 +261,5 @@ export default function Draggable( {
239
261
  </>
240
262
  );
241
263
  }
264
+
265
+ export default Draggable;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+ import type { DragEvent } from 'react';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { useState } from '@wordpress/element';
11
+ import { Icon, more } from '@wordpress/icons';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import Draggable from '..';
17
+
18
+ const meta: ComponentMeta< typeof Draggable > = {
19
+ component: Draggable,
20
+ title: 'Components/Draggable',
21
+ argTypes: {
22
+ elementId: { control: { type: null } },
23
+ __experimentalDragComponent: { control: { type: null } },
24
+ },
25
+ parameters: {
26
+ actions: { argTypesRegex: '^on.*' },
27
+ controls: { expanded: true },
28
+ docs: { source: { code: '' } },
29
+ },
30
+ };
31
+ export default meta;
32
+
33
+ const DefaultTemplate: ComponentStory< typeof Draggable > = ( args ) => {
34
+ const [ isDragging, setDragging ] = useState( false );
35
+
36
+ // Allow for the use of ID in the example.
37
+ return (
38
+ <div>
39
+ <p>Is Dragging? { isDragging ? 'Yes' : 'No!' }</p>
40
+ <div
41
+ /* eslint-disable no-restricted-syntax, eslint-comments/disable-enable-pair */
42
+ id="draggable-example-box"
43
+ style={ { display: 'inline-flex' } }
44
+ >
45
+ <Draggable { ...args } elementId="draggable-example-box">
46
+ { ( { onDraggableStart, onDraggableEnd } ) => {
47
+ const handleOnDragStart = ( event: DragEvent ) => {
48
+ setDragging( true );
49
+ onDraggableStart( event );
50
+ };
51
+ const handleOnDragEnd = ( event: DragEvent ) => {
52
+ setDragging( false );
53
+ onDraggableEnd( event );
54
+ };
55
+
56
+ return (
57
+ <div
58
+ onDragStart={ handleOnDragStart }
59
+ onDragEnd={ handleOnDragEnd }
60
+ draggable
61
+ style={ {
62
+ alignItems: 'center',
63
+ display: 'flex',
64
+ justifyContent: 'center',
65
+ width: 100,
66
+ height: 100,
67
+ background: '#ddd',
68
+ } }
69
+ >
70
+ <Icon icon={ more } />
71
+ </div>
72
+ );
73
+ } }
74
+ </Draggable>
75
+ </div>
76
+ </div>
77
+ );
78
+ };
79
+
80
+ export const Default: ComponentStory< typeof Draggable > = DefaultTemplate.bind(
81
+ {}
82
+ );
83
+ Default.args = {};
@@ -0,0 +1,58 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { DragEvent, ReactNode } from 'react';
5
+
6
+ export type DraggableProps = {
7
+ /**
8
+ * Children.
9
+ */
10
+ children: ( props: {
11
+ /**
12
+ * `onDragStart` handler.
13
+ */
14
+ onDraggableStart: ( event: DragEvent ) => void;
15
+ /**
16
+ * `onDragEnd` handler.
17
+ */
18
+ onDraggableEnd: ( event: DragEvent ) => void;
19
+ } ) => JSX.Element | null;
20
+ /**
21
+ * Classname for the cloned element.
22
+ */
23
+ cloneClassname?: string;
24
+ /**
25
+ * The HTML id of the element to clone on drag
26
+ */
27
+ elementId: string;
28
+ /**
29
+ * A function called when dragging ends. This callback receives the `event`
30
+ * object from the `dragend` event as its first parameter.
31
+ */
32
+ onDragEnd?: ( event: DragEvent ) => void;
33
+ /**
34
+ * A function called when the element being dragged is dragged over a valid
35
+ * drop target. This callback receives the `event` object from the
36
+ * `dragover` event as its first parameter.
37
+ */
38
+ onDragOver?: ( event: DragEvent ) => void;
39
+ /**
40
+ * A function called when dragging starts. This callback receives the
41
+ * `event` object from the `dragstart` event as its first parameter.
42
+ */
43
+ onDragStart?: ( event: DragEvent ) => void;
44
+ /**
45
+ * Arbitrary data object attached to the drag and drop event.
46
+ */
47
+ transferData: unknown;
48
+ /**
49
+ * The transfer data type to set.
50
+ *
51
+ * @default 'text'
52
+ */
53
+ __experimentalTransferDataType?: string;
54
+ /**
55
+ * Component to show when dragging.
56
+ */
57
+ __experimentalDragComponent?: ReactNode;
58
+ };
@@ -24,7 +24,7 @@
24
24
  height: 100%;
25
25
  width: 100%;
26
26
  display: flex;
27
- background-color: var(--wp-admin-theme-color);
27
+ background-color: $components-color-accent;
28
28
  align-items: center;
29
29
  justify-content: center;
30
30
  z-index: z-index(".components-drop-zone__content");
@@ -57,8 +57,6 @@ export function useFlex( props: WordPressComponentProps< FlexProps, 'div' > ) {
57
57
 
58
58
  const isColumn =
59
59
  typeof direction === 'string' && !! direction.includes( 'column' );
60
- const isReverse =
61
- typeof direction === 'string' && direction.includes( 'reverse' );
62
60
 
63
61
  const cx = useCx();
64
62
 
@@ -87,7 +85,6 @@ export function useFlex( props: WordPressComponentProps< FlexProps, 'div' > ) {
87
85
  expanded,
88
86
  gap,
89
87
  isColumn,
90
- isReverse,
91
88
  justify,
92
89
  wrap,
93
90
  ] );