@wordpress/components 19.15.0 → 19.16.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 (439) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/build/angle-picker-control/index.js +2 -2
  3. package/build/angle-picker-control/index.js.map +1 -1
  4. package/build/base-control/styles/base-control-styles.js +8 -8
  5. package/build/base-control/styles/base-control-styles.js.map +1 -1
  6. package/build/border-control/border-control/component.js +38 -25
  7. package/build/border-control/border-control/component.js.map +1 -1
  8. package/build/border-control/border-control/hook.js +4 -7
  9. package/build/border-control/border-control/hook.js.map +1 -1
  10. package/build/border-control/border-control-dropdown/component.js +13 -7
  11. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  12. package/build/border-control/border-control-dropdown/hook.js +0 -4
  13. package/build/border-control/border-control-dropdown/hook.js.map +1 -1
  14. package/build/border-control/styles.js +33 -56
  15. package/build/border-control/styles.js.map +1 -1
  16. package/build/box-control/axial-input-controls.js +1 -1
  17. package/build/box-control/axial-input-controls.js.map +1 -1
  18. package/build/box-control/utils.js +2 -8
  19. package/build/box-control/utils.js.map +1 -1
  20. package/build/color-palette/index.js +14 -2
  21. package/build/color-palette/index.js.map +1 -1
  22. package/build/color-picker/hex-input.js +2 -1
  23. package/build/color-picker/hex-input.js.map +1 -1
  24. package/build/color-picker/input-with-slider.js +3 -2
  25. package/build/color-picker/input-with-slider.js.map +1 -1
  26. package/build/color-picker/styles.js +8 -15
  27. package/build/color-picker/styles.js.map +1 -1
  28. package/build/combobox-control/index.js +5 -7
  29. package/build/combobox-control/index.js.map +1 -1
  30. package/build/custom-select-control/index.js +26 -8
  31. package/build/custom-select-control/index.js.map +1 -1
  32. package/build/divider/component.js +0 -1
  33. package/build/divider/component.js.map +1 -1
  34. package/build/divider/index.js.map +1 -1
  35. package/build/divider/styles.js +5 -5
  36. package/build/divider/styles.js.map +1 -1
  37. package/build/dropdown/dropdown-content-wrapper.js +60 -0
  38. package/build/dropdown/dropdown-content-wrapper.js.map +1 -0
  39. package/build/dropdown/styles.js +42 -0
  40. package/build/dropdown/styles.js.map +1 -0
  41. package/build/dropdown/types.js +6 -0
  42. package/build/dropdown/types.js.map +1 -0
  43. package/build/elevation/component.js +15 -15
  44. package/build/elevation/component.js.map +1 -1
  45. package/build/elevation/hook.js +5 -17
  46. package/build/elevation/hook.js.map +1 -1
  47. package/build/elevation/index.js.map +1 -1
  48. package/build/elevation/styles.js +1 -1
  49. package/build/elevation/styles.js.map +1 -1
  50. package/build/flex/flex/component.js +11 -17
  51. package/build/flex/flex/component.js.map +1 -1
  52. package/build/flex/flex-block/component.js +9 -3
  53. package/build/flex/flex-block/component.js.map +1 -1
  54. package/build/flex/flex-item/component.js +9 -3
  55. package/build/flex/flex-item/component.js.map +1 -1
  56. package/build/index.js +24 -0
  57. package/build/index.js.map +1 -1
  58. package/build/input-control/index.js +7 -0
  59. package/build/input-control/index.js.map +1 -1
  60. package/build/input-control/input-base.js +23 -1
  61. package/build/input-control/input-base.js.map +1 -1
  62. package/build/input-control/input-prefix-wrapper.js +54 -0
  63. package/build/input-control/input-prefix-wrapper.js.map +1 -0
  64. package/build/input-control/input-suffix-wrapper.js +54 -0
  65. package/build/input-control/input-suffix-wrapper.js.map +1 -0
  66. package/build/input-control/styles/input-control-styles.js +61 -42
  67. package/build/input-control/styles/input-control-styles.js.map +1 -1
  68. package/build/mobile/image/index.native.js +7 -4
  69. package/build/mobile/image/index.native.js.map +1 -1
  70. package/build/mobile/media-edit/index.native.js +1 -7
  71. package/build/mobile/media-edit/index.native.js.map +1 -1
  72. package/build/popover/index.js +13 -10
  73. package/build/popover/index.js.map +1 -1
  74. package/build/radio-control/index.js +1 -3
  75. package/build/radio-control/index.js.map +1 -1
  76. package/build/range-control/utils.js +1 -1
  77. package/build/range-control/utils.js.map +1 -1
  78. package/build/sandbox/index.native.js +13 -2
  79. package/build/sandbox/index.native.js.map +1 -1
  80. package/build/scroll-lock/index.js +35 -6
  81. package/build/scroll-lock/index.js.map +1 -1
  82. package/build/select-control/index.js +1 -3
  83. package/build/select-control/index.js.map +1 -1
  84. package/build/select-control/styles/select-control-styles.js +31 -11
  85. package/build/select-control/styles/select-control-styles.js.map +1 -1
  86. package/build/shortcut/index.js +4 -13
  87. package/build/shortcut/index.js.map +1 -1
  88. package/build/shortcut/types.js +6 -0
  89. package/build/shortcut/types.js.map +1 -0
  90. package/build/spacer/component.js +3 -1
  91. package/build/spacer/component.js.map +1 -1
  92. package/build/toggle-group-control/toggle-group-control/component.js +4 -1
  93. package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
  94. package/build/toggle-group-control/toggle-group-control/styles.js +20 -4
  95. package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  96. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +7 -9
  97. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  98. package/build/tooltip/index.js +51 -14
  99. package/build/tooltip/index.js.map +1 -1
  100. package/build/tree-select/index.js +2 -2
  101. package/build/tree-select/index.js.map +1 -1
  102. package/build/ui/context/use-context-system.js +7 -2
  103. package/build/ui/context/use-context-system.js.map +1 -1
  104. package/build/ui/utils/space.js +7 -1
  105. package/build/ui/utils/space.js.map +1 -1
  106. package/build/unit-control/styles/unit-control-styles.js +10 -26
  107. package/build/unit-control/styles/unit-control-styles.js.map +1 -1
  108. package/build-module/angle-picker-control/index.js +2 -2
  109. package/build-module/angle-picker-control/index.js.map +1 -1
  110. package/build-module/base-control/styles/base-control-styles.js +8 -8
  111. package/build-module/base-control/styles/base-control-styles.js.map +1 -1
  112. package/build-module/border-control/border-control/component.js +37 -25
  113. package/build-module/border-control/border-control/component.js.map +1 -1
  114. package/build-module/border-control/border-control/hook.js +4 -7
  115. package/build-module/border-control/border-control/hook.js.map +1 -1
  116. package/build-module/border-control/border-control-dropdown/component.js +12 -7
  117. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  118. package/build-module/border-control/border-control-dropdown/hook.js +0 -4
  119. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
  120. package/build-module/border-control/styles.js +33 -49
  121. package/build-module/border-control/styles.js.map +1 -1
  122. package/build-module/box-control/axial-input-controls.js +1 -1
  123. package/build-module/box-control/axial-input-controls.js.map +1 -1
  124. package/build-module/box-control/utils.js +2 -7
  125. package/build-module/box-control/utils.js.map +1 -1
  126. package/build-module/color-palette/index.js +10 -1
  127. package/build-module/color-palette/index.js.map +1 -1
  128. package/build-module/color-picker/hex-input.js +2 -1
  129. package/build-module/color-picker/hex-input.js.map +1 -1
  130. package/build-module/color-picker/input-with-slider.js +3 -2
  131. package/build-module/color-picker/input-with-slider.js.map +1 -1
  132. package/build-module/color-picker/styles.js +9 -16
  133. package/build-module/color-picker/styles.js.map +1 -1
  134. package/build-module/combobox-control/index.js +5 -6
  135. package/build-module/combobox-control/index.js.map +1 -1
  136. package/build-module/custom-select-control/index.js +26 -10
  137. package/build-module/custom-select-control/index.js.map +1 -1
  138. package/build-module/divider/component.js +0 -1
  139. package/build-module/divider/component.js.map +1 -1
  140. package/build-module/divider/index.js.map +1 -1
  141. package/build-module/divider/styles.js +5 -5
  142. package/build-module/divider/styles.js.map +1 -1
  143. package/build-module/dropdown/dropdown-content-wrapper.js +47 -0
  144. package/build-module/dropdown/dropdown-content-wrapper.js.map +1 -0
  145. package/build-module/dropdown/styles.js +31 -0
  146. package/build-module/dropdown/styles.js.map +1 -0
  147. package/build-module/dropdown/types.js +2 -0
  148. package/build-module/dropdown/types.js.map +1 -0
  149. package/build-module/elevation/component.js +15 -15
  150. package/build-module/elevation/component.js.map +1 -1
  151. package/build-module/elevation/hook.js +5 -17
  152. package/build-module/elevation/hook.js.map +1 -1
  153. package/build-module/elevation/index.js.map +1 -1
  154. package/build-module/elevation/styles.js +1 -1
  155. package/build-module/elevation/styles.js.map +1 -1
  156. package/build-module/flex/flex/component.js +11 -17
  157. package/build-module/flex/flex/component.js.map +1 -1
  158. package/build-module/flex/flex-block/component.js +9 -3
  159. package/build-module/flex/flex-block/component.js.map +1 -1
  160. package/build-module/flex/flex-item/component.js +9 -3
  161. package/build-module/flex/flex-item/component.js.map +1 -1
  162. package/build-module/index.js +3 -0
  163. package/build-module/index.js.map +1 -1
  164. package/build-module/input-control/index.js +6 -0
  165. package/build-module/input-control/index.js.map +1 -1
  166. package/build-module/input-control/input-base.js +24 -3
  167. package/build-module/input-control/input-base.js.map +1 -1
  168. package/build-module/input-control/input-prefix-wrapper.js +41 -0
  169. package/build-module/input-control/input-prefix-wrapper.js.map +1 -0
  170. package/build-module/input-control/input-suffix-wrapper.js +41 -0
  171. package/build-module/input-control/input-suffix-wrapper.js.map +1 -0
  172. package/build-module/input-control/styles/input-control-styles.js +57 -41
  173. package/build-module/input-control/styles/input-control-styles.js.map +1 -1
  174. package/build-module/mobile/image/index.native.js +9 -6
  175. package/build-module/mobile/image/index.native.js.map +1 -1
  176. package/build-module/mobile/media-edit/index.native.js +1 -6
  177. package/build-module/mobile/media-edit/index.native.js.map +1 -1
  178. package/build-module/popover/index.js +13 -10
  179. package/build-module/popover/index.js.map +1 -1
  180. package/build-module/radio-control/index.js +1 -2
  181. package/build-module/radio-control/index.js.map +1 -1
  182. package/build-module/range-control/utils.js +1 -1
  183. package/build-module/range-control/utils.js.map +1 -1
  184. package/build-module/sandbox/index.native.js +13 -3
  185. package/build-module/sandbox/index.native.js.map +1 -1
  186. package/build-module/scroll-lock/index.js +32 -6
  187. package/build-module/scroll-lock/index.js.map +1 -1
  188. package/build-module/select-control/index.js +1 -2
  189. package/build-module/select-control/index.js.map +1 -1
  190. package/build-module/select-control/styles/select-control-styles.js +31 -11
  191. package/build-module/select-control/styles/select-control-styles.js.map +1 -1
  192. package/build-module/shortcut/index.js +4 -13
  193. package/build-module/shortcut/index.js.map +1 -1
  194. package/build-module/shortcut/types.js +2 -0
  195. package/build-module/shortcut/types.js.map +1 -0
  196. package/build-module/spacer/component.js +3 -1
  197. package/build-module/spacer/component.js.map +1 -1
  198. package/build-module/toggle-group-control/toggle-group-control/component.js +4 -1
  199. package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
  200. package/build-module/toggle-group-control/toggle-group-control/styles.js +15 -3
  201. package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
  202. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +6 -7
  203. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  204. package/build-module/tooltip/index.js +53 -16
  205. package/build-module/tooltip/index.js.map +1 -1
  206. package/build-module/tree-select/index.js +3 -3
  207. package/build-module/tree-select/index.js.map +1 -1
  208. package/build-module/ui/context/use-context-system.js +7 -2
  209. package/build-module/ui/context/use-context-system.js.map +1 -1
  210. package/build-module/ui/utils/space.js +7 -1
  211. package/build-module/ui/utils/space.js.map +1 -1
  212. package/build-module/unit-control/styles/unit-control-styles.js +10 -27
  213. package/build-module/unit-control/styles/unit-control-styles.js.map +1 -1
  214. package/build-style/style-rtl.css +12 -26
  215. package/build-style/style.css +12 -24
  216. package/build-types/base-control/styles/base-control-styles.d.ts.map +1 -1
  217. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  218. package/build-types/border-control/border-control/hook.d.ts +1 -1
  219. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  220. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  221. package/build-types/border-control/border-control-dropdown/hook.d.ts +0 -1
  222. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  223. package/build-types/border-control/stories/index.d.ts.map +1 -1
  224. package/build-types/border-control/styles.d.ts +1 -4
  225. package/build-types/border-control/styles.d.ts.map +1 -1
  226. package/build-types/card/card-divider/hook.d.ts +1 -1
  227. package/build-types/color-palette/index.d.ts +1 -0
  228. package/build-types/color-palette/index.d.ts.map +1 -1
  229. package/build-types/color-picker/hex-input.d.ts.map +1 -1
  230. package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
  231. package/build-types/color-picker/styles.d.ts.map +1 -1
  232. package/build-types/divider/component.d.ts +2 -3
  233. package/build-types/divider/component.d.ts.map +1 -1
  234. package/build-types/divider/index.d.ts +1 -1
  235. package/build-types/divider/index.d.ts.map +1 -1
  236. package/build-types/divider/styles.d.ts +6 -2
  237. package/build-types/divider/styles.d.ts.map +1 -1
  238. package/build-types/divider/test/index.d.ts +2 -0
  239. package/build-types/divider/test/index.d.ts.map +1 -0
  240. package/build-types/divider/types.d.ts +18 -10
  241. package/build-types/divider/types.d.ts.map +1 -1
  242. package/build-types/dropdown/dropdown-content-wrapper.d.ts +23 -0
  243. package/build-types/dropdown/dropdown-content-wrapper.d.ts.map +1 -0
  244. package/build-types/dropdown/styles.d.ts +7 -0
  245. package/build-types/dropdown/styles.d.ts.map +1 -0
  246. package/build-types/dropdown/types.d.ts +9 -0
  247. package/build-types/dropdown/types.d.ts.map +1 -0
  248. package/build-types/elevation/component.d.ts +11 -10
  249. package/build-types/elevation/component.d.ts.map +1 -1
  250. package/build-types/elevation/hook.d.ts +6 -7
  251. package/build-types/elevation/hook.d.ts.map +1 -1
  252. package/build-types/elevation/index.d.ts +2 -2
  253. package/build-types/elevation/index.d.ts.map +1 -1
  254. package/build-types/elevation/stories/index.d.ts +22 -0
  255. package/build-types/elevation/stories/index.d.ts.map +1 -0
  256. package/build-types/elevation/styles.d.ts +1 -1
  257. package/build-types/elevation/styles.d.ts.map +1 -1
  258. package/build-types/elevation/test/index.d.ts +2 -0
  259. package/build-types/elevation/test/index.d.ts.map +1 -0
  260. package/build-types/elevation/types.d.ts +12 -19
  261. package/build-types/elevation/types.d.ts.map +1 -1
  262. package/build-types/flex/flex/component.d.ts +11 -17
  263. package/build-types/flex/flex/component.d.ts.map +1 -1
  264. package/build-types/flex/flex-block/component.d.ts +9 -3
  265. package/build-types/flex/flex-block/component.d.ts.map +1 -1
  266. package/build-types/flex/flex-item/component.d.ts +9 -3
  267. package/build-types/flex/flex-item/component.d.ts.map +1 -1
  268. package/build-types/flex/types.d.ts +4 -1
  269. package/build-types/flex/types.d.ts.map +1 -1
  270. package/build-types/input-control/index.d.ts +1 -1
  271. package/build-types/input-control/index.d.ts.map +1 -1
  272. package/build-types/input-control/input-base.d.ts +1 -1
  273. package/build-types/input-control/input-base.d.ts.map +1 -1
  274. package/build-types/input-control/input-prefix-wrapper.d.ts +19 -0
  275. package/build-types/input-control/input-prefix-wrapper.d.ts.map +1 -0
  276. package/build-types/input-control/input-suffix-wrapper.d.ts +19 -0
  277. package/build-types/input-control/input-suffix-wrapper.d.ts.map +1 -0
  278. package/build-types/input-control/stories/index.d.ts +10 -0
  279. package/build-types/input-control/stories/index.d.ts.map +1 -1
  280. package/build-types/input-control/styles/input-control-styles.d.ts +21 -0
  281. package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
  282. package/build-types/input-control/types.d.ts +45 -3
  283. package/build-types/input-control/types.d.ts.map +1 -1
  284. package/build-types/popover/index.d.ts.map +1 -1
  285. package/build-types/radio-control/index.d.ts.map +1 -1
  286. package/build-types/range-control/types.d.ts +4 -2
  287. package/build-types/range-control/types.d.ts.map +1 -1
  288. package/build-types/range-control/utils.d.ts.map +1 -1
  289. package/build-types/scroll-lock/index.d.ts +32 -3
  290. package/build-types/scroll-lock/index.d.ts.map +1 -1
  291. package/build-types/scroll-lock/stories/index.d.ts +9 -0
  292. package/build-types/scroll-lock/stories/index.d.ts.map +1 -0
  293. package/build-types/scroll-lock/test/index.d.ts +2 -0
  294. package/build-types/scroll-lock/test/index.d.ts.map +1 -0
  295. package/build-types/select-control/index.d.ts.map +1 -1
  296. package/build-types/select-control/styles/select-control-styles.d.ts +1 -1
  297. package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
  298. package/build-types/select-control/types.d.ts +1 -1
  299. package/build-types/select-control/types.d.ts.map +1 -1
  300. package/build-types/shortcut/index.d.ts +5 -24
  301. package/build-types/shortcut/index.d.ts.map +1 -1
  302. package/build-types/shortcut/test/index.d.ts +2 -0
  303. package/build-types/shortcut/test/index.d.ts.map +1 -0
  304. package/build-types/shortcut/types.d.ts +14 -0
  305. package/build-types/shortcut/types.d.ts.map +1 -0
  306. package/build-types/spacer/component.d.ts +3 -1
  307. package/build-types/spacer/component.d.ts.map +1 -1
  308. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +5 -1
  309. package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
  310. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +0 -1
  311. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
  312. package/build-types/toggle-group-control/types.d.ts +6 -0
  313. package/build-types/toggle-group-control/types.d.ts.map +1 -1
  314. package/build-types/tooltip/index.d.ts.map +1 -1
  315. package/build-types/tree-select/index.d.ts.map +1 -1
  316. package/build-types/tree-select/types.d.ts +1 -0
  317. package/build-types/tree-select/types.d.ts.map +1 -1
  318. package/build-types/ui/context/use-context-system.d.ts.map +1 -1
  319. package/build-types/ui/utils/space.d.ts +7 -1
  320. package/build-types/ui/utils/space.d.ts.map +1 -1
  321. package/build-types/unit-control/index.d.ts +2 -2
  322. package/build-types/unit-control/index.d.ts.map +1 -1
  323. package/build-types/unit-control/styles/unit-control-styles.d.ts +0 -1
  324. package/build-types/unit-control/styles/unit-control-styles.d.ts.map +1 -1
  325. package/build-types/unit-control/types.d.ts +1 -1
  326. package/build-types/unit-control/types.d.ts.map +1 -1
  327. package/package.json +17 -17
  328. package/src/angle-picker-control/index.js +1 -2
  329. package/src/base-control/styles/base-control-styles.ts +5 -0
  330. package/src/border-control/border-control/component.tsx +41 -32
  331. package/src/border-control/border-control/hook.ts +4 -9
  332. package/src/border-control/border-control-dropdown/component.tsx +50 -45
  333. package/src/border-control/border-control-dropdown/hook.ts +0 -5
  334. package/src/border-control/stories/index.tsx +3 -0
  335. package/src/border-control/styles.ts +23 -69
  336. package/src/border-control/test/index.js +19 -8
  337. package/src/box-control/axial-input-controls.js +1 -1
  338. package/src/box-control/utils.js +6 -13
  339. package/src/card/test/__snapshots__/index.js.snap +8 -8
  340. package/src/color-palette/index.js +19 -8
  341. package/src/color-palette/style.scss +5 -0
  342. package/src/color-palette/test/utils.ts +19 -1
  343. package/src/color-picker/hex-input.tsx +2 -1
  344. package/src/color-picker/input-with-slider.tsx +2 -1
  345. package/src/color-picker/styles.ts +0 -11
  346. package/src/combobox-control/index.js +5 -6
  347. package/src/confirm-dialog/README.md +1 -1
  348. package/src/custom-select-control/index.js +44 -26
  349. package/src/custom-select-control/stories/index.js +7 -2
  350. package/src/custom-select-control/style.scss +4 -29
  351. package/src/divider/README.md +12 -5
  352. package/src/divider/component.tsx +2 -3
  353. package/src/divider/index.ts +1 -1
  354. package/src/divider/stories/index.tsx +4 -4
  355. package/src/divider/styles.ts +7 -7
  356. package/src/divider/test/__snapshots__/{index.js.snap → index.tsx.snap} +7 -7
  357. package/src/divider/test/index.tsx +40 -0
  358. package/src/divider/types.ts +21 -15
  359. package/src/draggable/README.md +1 -1
  360. package/src/dropdown/dropdown-content-wrapper.tsx +59 -0
  361. package/src/dropdown/stories/index.js +60 -69
  362. package/src/dropdown/styles.ts +38 -0
  363. package/src/dropdown/types.ts +8 -0
  364. package/src/elevation/README.md +16 -14
  365. package/src/elevation/component.tsx +48 -0
  366. package/src/elevation/{hook.js → hook.ts} +20 -17
  367. package/src/elevation/{index.js → index.ts} +0 -0
  368. package/src/elevation/stories/index.tsx +85 -0
  369. package/src/elevation/{styles.js → styles.ts} +0 -0
  370. package/src/elevation/test/__snapshots__/{index.js.snap → index.tsx.snap} +19 -13
  371. package/src/elevation/test/index.tsx +64 -0
  372. package/src/elevation/types.ts +12 -19
  373. package/src/flex/flex/README.md +1 -5
  374. package/src/flex/flex/component.js +11 -17
  375. package/src/flex/flex-block/README.md +0 -4
  376. package/src/flex/flex-block/component.js +9 -3
  377. package/src/flex/flex-item/README.md +0 -4
  378. package/src/flex/flex-item/component.js +9 -3
  379. package/src/flex/stories/index.js +1 -1
  380. package/src/flex/types.ts +4 -1
  381. package/src/form-token-field/test/index.js +1 -1
  382. package/src/index.js +3 -0
  383. package/src/input-control/index.tsx +6 -0
  384. package/src/input-control/input-base.tsx +28 -12
  385. package/src/input-control/input-prefix-wrapper.tsx +48 -0
  386. package/src/input-control/input-suffix-wrapper.tsx +48 -0
  387. package/src/input-control/stories/index.tsx +15 -2
  388. package/src/input-control/styles/input-control-styles.tsx +25 -11
  389. package/src/input-control/types.ts +52 -3
  390. package/src/mobile/image/index.native.js +12 -7
  391. package/src/mobile/media-edit/index.native.js +2 -7
  392. package/src/modal/style.scss +5 -1
  393. package/src/popover/index.js +13 -9
  394. package/src/popover/stories/index.js +2 -0
  395. package/src/popover/style.scss +1 -1
  396. package/src/radio-control/index.tsx +1 -2
  397. package/src/range-control/README.md +1 -1
  398. package/src/range-control/test/index.tsx +30 -0
  399. package/src/range-control/types.ts +4 -2
  400. package/src/range-control/utils.ts +4 -1
  401. package/src/sandbox/index.native.js +14 -1
  402. package/src/scroll-lock/README.md +1 -1
  403. package/src/scroll-lock/{index.js → index.tsx} +34 -7
  404. package/src/scroll-lock/stories/index.tsx +96 -0
  405. package/src/scroll-lock/test/index.tsx +26 -0
  406. package/src/select-control/index.tsx +1 -2
  407. package/src/select-control/styles/select-control-styles.ts +33 -9
  408. package/src/select-control/types.ts +1 -0
  409. package/src/shortcut/{index.js → index.tsx} +5 -9
  410. package/src/shortcut/test/__snapshots__/index.tsx.snap +15 -0
  411. package/src/shortcut/test/index.tsx +41 -0
  412. package/src/shortcut/types.ts +10 -0
  413. package/src/spacer/component.tsx +3 -1
  414. package/src/toggle-group-control/stories/index.js +19 -3
  415. package/src/toggle-group-control/test/__snapshots__/index.js.snap +4 -4
  416. package/src/toggle-group-control/toggle-group-control/component.tsx +3 -3
  417. package/src/toggle-group-control/toggle-group-control/styles.ts +22 -2
  418. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +0 -4
  419. package/src/toggle-group-control/types.ts +6 -0
  420. package/src/tools-panel/tools-panel/README.md +94 -21
  421. package/src/tooltip/index.js +56 -10
  422. package/src/tooltip/stories/index.js +28 -13
  423. package/src/tooltip/style.scss +1 -1
  424. package/src/tree-select/index.tsx +5 -4
  425. package/src/tree-select/types.ts +4 -0
  426. package/src/ui/context/test/context-system-provider.js +101 -1
  427. package/src/ui/context/use-context-system.js +7 -2
  428. package/src/ui/utils/space.ts +7 -1
  429. package/src/unit-control/styles/unit-control-styles.ts +15 -13
  430. package/src/unit-control/test/__snapshots__/index.tsx.snap +4 -4
  431. package/src/unit-control/types.ts +1 -1
  432. package/tsconfig.tsbuildinfo +1 -1
  433. package/src/divider/test/index.js +0 -41
  434. package/src/elevation/component.js +0 -43
  435. package/src/elevation/stories/index.js +0 -148
  436. package/src/elevation/test/index.js +0 -51
  437. package/src/scroll-lock/stories/index.js +0 -71
  438. package/src/scroll-lock/test/index.js +0 -53
  439. package/src/shortcut/test/index.js +0 -37
@@ -0,0 +1,96 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+ import type { ReactNode } from 'react';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { useState } from '@wordpress/element';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import Button from '../../button';
16
+ import ScrollLock from '..';
17
+
18
+ const meta: ComponentMeta< typeof ScrollLock > = {
19
+ component: ScrollLock,
20
+ title: 'Components/ScrollLock',
21
+ parameters: {
22
+ controls: { hideNoControlsWarning: true },
23
+ docs: { source: { state: 'open' } },
24
+ },
25
+ };
26
+ export default meta;
27
+
28
+ function StripedBackground( props: { children: ReactNode } ) {
29
+ return (
30
+ <div
31
+ style={ {
32
+ backgroundColor: '#fff',
33
+ backgroundImage:
34
+ 'linear-gradient(transparent 50%, rgba(0, 0, 0, 0.05) 50%)',
35
+ backgroundSize: '50px 50px',
36
+ height: 3000,
37
+ position: 'relative',
38
+ } }
39
+ { ...props }
40
+ />
41
+ );
42
+ }
43
+
44
+ function ToggleContainer( props: { children: ReactNode } ) {
45
+ const { children } = props;
46
+ return (
47
+ <div
48
+ style={ {
49
+ position: 'sticky',
50
+ top: 0,
51
+ padding: 40,
52
+ display: 'flex',
53
+ justifyContent: 'center',
54
+ textAlign: 'center',
55
+ } }
56
+ >
57
+ <div>{ children }</div>
58
+ </div>
59
+ );
60
+ }
61
+
62
+ export const Default: ComponentStory< typeof ScrollLock > = () => {
63
+ const [ isScrollLocked, setScrollLocked ] = useState( false );
64
+ const toggleLock = () => setScrollLocked( ! isScrollLocked );
65
+
66
+ return (
67
+ <div style={ { height: 1000 } }>
68
+ <div
69
+ style={ {
70
+ overflow: 'auto',
71
+ height: 240,
72
+ border: '1px solid lightgray',
73
+ } }
74
+ >
75
+ <StripedBackground>
76
+ <div>
77
+ Start scrolling down. Once you scroll to the end of this
78
+ container with the stripes, the rest of the page will
79
+ continue scrolling. <code>ScrollLock</code> prevents
80
+ this &quot;scroll bleed&quot; from happening.
81
+ </div>
82
+ <ToggleContainer>
83
+ <Button variant="primary" onClick={ toggleLock }>
84
+ Toggle Scroll Lock
85
+ </Button>
86
+ { isScrollLocked && <ScrollLock /> }
87
+ <p>
88
+ Scroll locked:{ ' ' }
89
+ <strong>{ isScrollLocked ? 'Yes' : 'No' }</strong>
90
+ </p>
91
+ </ToggleContainer>
92
+ </StripedBackground>
93
+ </div>
94
+ </div>
95
+ );
96
+ };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render } from '@testing-library/react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import ScrollLock from '..';
10
+
11
+ describe( 'scroll-lock', () => {
12
+ const lockingClassName = 'lockscroll';
13
+
14
+ it( 'locks when mounted', () => {
15
+ expect( document.documentElement ).not.toHaveClass( lockingClassName );
16
+ render( <ScrollLock /> );
17
+ expect( document.documentElement ).toHaveClass( lockingClassName );
18
+ } );
19
+
20
+ it( 'unlocks when unmounted', () => {
21
+ const { unmount } = render( <ScrollLock /> );
22
+ expect( document.documentElement ).toHaveClass( lockingClassName );
23
+ unmount();
24
+ expect( document.documentElement ).not.toHaveClass( lockingClassName );
25
+ } );
26
+ } );
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { isEmpty } from 'lodash';
5
4
  import classNames from 'classnames';
6
5
  import type { ChangeEvent, FocusEvent, ForwardedRef } from 'react';
7
6
 
@@ -59,7 +58,7 @@ function UnforwardedSelectControl(
59
58
  const helpId = help ? `${ id }__help` : undefined;
60
59
 
61
60
  // Disable reason: A select with an onchange throws a warning.
62
- if ( isEmpty( options ) && ! children ) return null;
61
+ if ( ! options?.length && ! children ) return null;
63
62
 
64
63
  const handleOnBlur = ( event: FocusEvent< HTMLSelectElement > ) => {
65
64
  onBlur( event );
@@ -10,7 +10,8 @@ import styled from '@emotion/styled';
10
10
  import { COLORS, rtl } from '../../utils';
11
11
  import type { SelectControlProps } from '../types';
12
12
 
13
- interface SelectProps extends Pick< SelectControlProps, 'disabled' > {
13
+ interface SelectProps
14
+ extends Pick< SelectControlProps, '__next36pxDefaultSize' | 'disabled' > {
14
15
  // Using `selectSize` instead of `size` to avoid a type conflict with the
15
16
  // `size` HTML attribute of the `select` element.
16
17
  selectSize?: SelectControlProps[ 'size' ];
@@ -45,11 +46,14 @@ const fontSizeStyles = ( { selectSize = 'default' }: SelectProps ) => {
45
46
  `;
46
47
  };
47
48
 
48
- const sizeStyles = ( { selectSize = 'default' }: SelectProps ) => {
49
+ const sizeStyles = ( {
50
+ __next36pxDefaultSize,
51
+ selectSize = 'default',
52
+ }: SelectProps ) => {
49
53
  const sizes = {
50
54
  default: {
51
- height: 30,
52
- minHeight: 30,
55
+ height: 36,
56
+ minHeight: 36,
53
57
  paddingTop: 0,
54
58
  paddingBottom: 0,
55
59
  },
@@ -67,16 +71,28 @@ const sizeStyles = ( { selectSize = 'default' }: SelectProps ) => {
67
71
  },
68
72
  };
69
73
 
70
- const style = sizes[ selectSize ];
74
+ if ( ! __next36pxDefaultSize ) {
75
+ sizes.default = {
76
+ height: 30,
77
+ minHeight: 30,
78
+ paddingTop: 0,
79
+ paddingBottom: 0,
80
+ };
81
+ }
82
+
83
+ const style = sizes[ selectSize ] || sizes.default;
71
84
 
72
85
  return css( style );
73
86
  };
74
87
 
75
- const sizePaddings = ( { selectSize = 'default' }: SelectProps ) => {
88
+ const sizePaddings = ( {
89
+ __next36pxDefaultSize,
90
+ selectSize = 'default',
91
+ }: SelectProps ) => {
76
92
  const sizes = {
77
93
  default: {
78
- paddingLeft: 8,
79
- paddingRight: 24,
94
+ paddingLeft: 16,
95
+ paddingRight: 32,
80
96
  },
81
97
  small: {
82
98
  paddingLeft: 8,
@@ -87,7 +103,15 @@ const sizePaddings = ( { selectSize = 'default' }: SelectProps ) => {
87
103
  paddingRight: 32,
88
104
  },
89
105
  };
90
- return rtl( sizes[ selectSize ] );
106
+
107
+ if ( ! __next36pxDefaultSize ) {
108
+ sizes.default = {
109
+ paddingLeft: 8,
110
+ paddingRight: 24,
111
+ };
112
+ }
113
+
114
+ return rtl( sizes[ selectSize ] || sizes.default );
91
115
  };
92
116
 
93
117
  // TODO: Resolve need to use &&& to increase specificity
@@ -12,6 +12,7 @@ import type { BaseControlProps } from '../base-control/types';
12
12
  export interface SelectControlProps
13
13
  extends Pick<
14
14
  InputBaseProps,
15
+ | '__next36pxDefaultSize'
15
16
  | 'disabled'
16
17
  | 'hideLabelFromVision'
17
18
  | 'label'
@@ -1,15 +1,11 @@
1
- /** @typedef {string | { display: string, ariaLabel: string }} Shortcut */
2
1
  /**
3
- * @typedef Props
4
- * @property {Shortcut} shortcut Shortcut configuration
5
- * @property {string} [className] Classname
2
+ * Internal dependencies
6
3
  */
4
+ import type { ShortcutProps } from './types';
5
+
6
+ function Shortcut( props: ShortcutProps ) {
7
+ const { shortcut, className } = props;
7
8
 
8
- /**
9
- * @param {Props} props Props
10
- * @return {JSX.Element | null} Element
11
- */
12
- function Shortcut( { shortcut, className } ) {
13
9
  if ( ! shortcut ) {
14
10
  return null;
15
11
  }
@@ -0,0 +1,15 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Shortcut renders passed className 1`] = `
4
+ <span
5
+ class="my-class"
6
+ >
7
+ shortcut text
8
+ </span>
9
+ `;
10
+
11
+ exports[`Shortcut renders the shortcut display text when a string is passed as the shortcut 1`] = `
12
+ <span>
13
+ shortcut text
14
+ </span>
15
+ `;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import Shortcut from '..';
10
+
11
+ describe( 'Shortcut', () => {
12
+ it( 'does not render anything if no shortcut prop is provided', () => {
13
+ const { container } = render( <Shortcut /> );
14
+ expect( container.firstChild ).toBe( null );
15
+ } );
16
+
17
+ it( 'renders the shortcut display text when a string is passed as the shortcut', () => {
18
+ render( <Shortcut shortcut="shortcut text" /> );
19
+ expect( screen.getByText( 'shortcut text' ) ).toMatchSnapshot();
20
+ } );
21
+
22
+ it( 'renders the shortcut display text and aria-label when an object is passed as the shortcut with the correct properties', () => {
23
+ render(
24
+ <Shortcut
25
+ shortcut={ {
26
+ display: 'shortcut text',
27
+ ariaLabel: 'shortcut label',
28
+ } }
29
+ />
30
+ );
31
+
32
+ expect( screen.getByLabelText( 'shortcut label' ) ).toHaveTextContent(
33
+ 'shortcut text'
34
+ );
35
+ } );
36
+
37
+ it( 'renders passed className', () => {
38
+ render( <Shortcut shortcut="shortcut text" className="my-class" /> );
39
+ expect( screen.getByText( 'shortcut text' ) ).toMatchSnapshot();
40
+ } );
41
+ } );
@@ -0,0 +1,10 @@
1
+ export type ShortcutProps = {
2
+ /**
3
+ * Classname to apply to the shortcut.
4
+ */
5
+ className?: string;
6
+ /**
7
+ * Shortcut configuration
8
+ */
9
+ shortcut?: string | { display: string; ariaLabel: string };
10
+ };
@@ -23,7 +23,9 @@ function UnconnectedSpacer(
23
23
  /**
24
24
  * `Spacer` is a primitive layout component that providers inner (`padding`) or outer (`margin`) space in-between components. It can also be used to adaptively provide space within an `HStack` or `VStack`.
25
25
  *
26
- * `Spacer` comes with a bunch of shorthand props to adjust `margin` and `padding`. The values of these props work as a multiplier to the library's grid system (base of `4px`).
26
+ * `Spacer` comes with a bunch of shorthand props to adjust `margin` and `padding`. The values of these props
27
+ * can either be a number (which will act as a multiplier to the library's grid system base of 4px),
28
+ * or a literal CSS value string.
27
29
  *
28
30
  * ```jsx
29
31
  * import { Spacer } from `@wordpress/components`
@@ -23,6 +23,12 @@ import Button from '../../button';
23
23
  export default {
24
24
  component: ToggleGroupControl,
25
25
  title: 'Components (Experimental)/ToggleGroupControl',
26
+ argTypes: {
27
+ size: {
28
+ control: 'select',
29
+ options: [ 'default', '__unstable-large' ],
30
+ },
31
+ },
26
32
  parameters: {
27
33
  knobs: { disable: false },
28
34
  },
@@ -33,7 +39,7 @@ const KNOBS_GROUPS = {
33
39
  ToggleGroupControlOption: 'ToggleGroupControlOption',
34
40
  };
35
41
 
36
- const _default = ( { options } ) => {
42
+ const _default = ( { options, ...props } ) => {
37
43
  const [ value, setValue ] = useState( options[ 0 ].value );
38
44
  const label = text(
39
45
  `${ KNOBS_GROUPS.ToggleGroupControl }: label`,
@@ -87,6 +93,7 @@ const _default = ( { options } ) => {
87
93
  return (
88
94
  <View>
89
95
  <ToggleGroupControl
96
+ { ...props }
90
97
  onChange={ setValue }
91
98
  value={ value }
92
99
  label={ label }
@@ -109,6 +116,7 @@ Default.args = {
109
116
  { value: 'right', label: 'Right' },
110
117
  { value: 'justify', label: 'Justify' },
111
118
  ],
119
+ size: 'default',
112
120
  };
113
121
 
114
122
  export const WithTooltip = _default.bind( {} );
@@ -130,10 +138,11 @@ WithAriaLabel.args = {
130
138
  ],
131
139
  };
132
140
 
133
- export const WithIcons = () => {
141
+ export const WithIcons = ( props ) => {
134
142
  const [ state, setState ] = useState();
135
143
  return (
136
144
  <ToggleGroupControl
145
+ { ...props }
137
146
  onChange={ setState }
138
147
  value={ state }
139
148
  label={ 'With icons' }
@@ -154,8 +163,11 @@ export const WithIcons = () => {
154
163
  </ToggleGroupControl>
155
164
  );
156
165
  };
166
+ WithIcons.args = {
167
+ ...Default.args,
168
+ };
157
169
 
158
- export const WithReset = () => {
170
+ export const WithReset = ( props ) => {
159
171
  const [ alignState, setAlignState ] = useState();
160
172
  const aligns = [ 'Left', 'Center', 'Right' ];
161
173
  const alignOptions = aligns.map( ( key, index ) => (
@@ -172,6 +184,7 @@ export const WithReset = () => {
172
184
  return (
173
185
  <View>
174
186
  <ToggleGroupControl
187
+ { ...props }
175
188
  onChange={ setAlignState }
176
189
  value={ alignState }
177
190
  label={ 'Toggle Group Control' }
@@ -185,3 +198,6 @@ export const WithReset = () => {
185
198
  </View>
186
199
  );
187
200
  };
201
+ WithReset.args = {
202
+ ...Default.args,
203
+ };
@@ -28,12 +28,12 @@ exports[`ToggleGroupControl should render correctly with icons 1`] = `
28
28
  display: -webkit-inline-flex;
29
29
  display: -ms-inline-flexbox;
30
30
  display: inline-flex;
31
- min-height: 36px;
32
31
  min-width: 0;
33
32
  padding: 2px;
34
33
  position: relative;
35
34
  -webkit-transition: -webkit-transform 100ms linear;
36
35
  transition: transform 100ms linear;
36
+ min-height: 36px;
37
37
  }
38
38
 
39
39
  @media ( prefers-reduced-motion: reduce ) {
@@ -167,7 +167,7 @@ exports[`ToggleGroupControl should render correctly with icons 1`] = `
167
167
  </div>
168
168
  <div
169
169
  aria-label="Test Toggle Group Control"
170
- class="medium components-toggle-group-control emotion-6 emotion-7"
170
+ class="components-toggle-group-control emotion-6 emotion-7"
171
171
  data-wp-c16t="true"
172
172
  data-wp-component="ToggleGroupControl"
173
173
  id="toggle-group-control-1"
@@ -281,12 +281,12 @@ exports[`ToggleGroupControl should render correctly with text options 1`] = `
281
281
  display: -webkit-inline-flex;
282
282
  display: -ms-inline-flexbox;
283
283
  display: inline-flex;
284
- min-height: 36px;
285
284
  min-width: 0;
286
285
  padding: 2px;
287
286
  position: relative;
288
287
  -webkit-transition: -webkit-transform 100ms linear;
289
288
  transition: transform 100ms linear;
289
+ min-height: 36px;
290
290
  }
291
291
 
292
292
  @media ( prefers-reduced-motion: reduce ) {
@@ -393,7 +393,7 @@ exports[`ToggleGroupControl should render correctly with text options 1`] = `
393
393
  </div>
394
394
  <div
395
395
  aria-label="Test Toggle Group Control"
396
- class="medium components-toggle-group-control emotion-6 emotion-7"
396
+ class="components-toggle-group-control emotion-6 emotion-7"
397
397
  data-wp-c16t="true"
398
398
  data-wp-component="ToggleGroupControl"
399
399
  id="toggle-group-control-0"
@@ -47,6 +47,7 @@ function ToggleGroupControl(
47
47
  hideLabelFromVision = false,
48
48
  help,
49
49
  onChange = noop,
50
+ size = 'default',
50
51
  value,
51
52
  children,
52
53
  ...otherProps
@@ -83,12 +84,11 @@ function ToggleGroupControl(
83
84
  const classes = useMemo(
84
85
  () =>
85
86
  cx(
86
- styles.ToggleGroupControl,
87
+ styles.ToggleGroupControl( { size } ),
87
88
  isBlock && styles.block,
88
- 'medium',
89
89
  className
90
90
  ),
91
- [ className, cx, isBlock ]
91
+ [ className, cx, isBlock, size ]
92
92
  );
93
93
  return (
94
94
  <BaseControl help={ help }>
@@ -8,19 +8,26 @@ import styled from '@emotion/styled';
8
8
  * Internal dependencies
9
9
  */
10
10
  import { CONFIG, COLORS, reduceMotion } from '../../utils';
11
+ import type { ToggleGroupControlProps } from '../types';
11
12
 
12
- export const ToggleGroupControl = css`
13
+ export const ToggleGroupControl = ( {
14
+ size,
15
+ }: {
16
+ size: NonNullable< ToggleGroupControlProps[ 'size' ] >;
17
+ } ) => css`
13
18
  background: ${ COLORS.ui.background };
14
19
  border: 1px solid;
15
20
  border-color: ${ COLORS.ui.border };
16
21
  border-radius: ${ CONFIG.controlBorderRadius };
17
22
  display: inline-flex;
18
- min-height: ${ CONFIG.controlHeight };
19
23
  min-width: 0;
20
24
  padding: 2px;
21
25
  position: relative;
22
26
  transition: transform ${ CONFIG.transitionDurationFastest } linear;
23
27
  ${ reduceMotion( 'transition' ) }
28
+
29
+ ${ toggleGroupControlSize( size ) }
30
+
24
31
  &:hover {
25
32
  border-color: ${ COLORS.ui.borderHover };
26
33
  }
@@ -33,6 +40,19 @@ export const ToggleGroupControl = css`
33
40
  }
34
41
  `;
35
42
 
43
+ export const toggleGroupControlSize = (
44
+ size: NonNullable< ToggleGroupControlProps[ 'size' ] >
45
+ ) => {
46
+ const heights = {
47
+ default: '36px',
48
+ '__unstable-large': '40px',
49
+ };
50
+
51
+ return css`
52
+ min-height: ${ heights[ size ] };
53
+ `;
54
+ };
55
+
36
56
  export const block = css`
37
57
  display: flex;
38
58
  width: 100%;
@@ -69,7 +69,3 @@ export const ButtonContentView = styled.div`
69
69
  export const separatorActive = css`
70
70
  background: transparent;
71
71
  `;
72
-
73
- export const medium = css`
74
- min-height: ${ CONFIG.controlHeight };
75
- `;
@@ -104,6 +104,12 @@ export type ToggleGroupControlProps = Omit<
104
104
  * using help property as the content.
105
105
  */
106
106
  help?: ReactNode;
107
+ /**
108
+ * The size variant of the control.
109
+ *
110
+ * @default 'default'
111
+ */
112
+ size?: 'default' | '__unstable-large';
107
113
  };
108
114
 
109
115
  export type ToggleGroupControlContextProps = RadioStateReturn & {
@@ -30,45 +30,118 @@ however they will not be represented within, or controlled by, the `ToolsPanel`
30
30
  menu. An example scenario that benefits from this could be displaying
31
31
  introduction or help text within a panel.
32
32
 
33
+ ### ToolsPanel Layout
34
+
35
+ The `ToolsPanel` has a two-column grid layout. By default, `ToolsPanelItem`
36
+ components within the panel are styled to span both columns as this fits the
37
+ majority of use-cases. Most non-control elements, such as help text, will be
38
+ rendered as children of the related control's `ToolsPanelItem` and not require
39
+ additional styling.
40
+
41
+ Suppose an element is related to multiple controls (e.g. a contrast checker), or
42
+ the panel itself (e.g. a panel description). In that case, these will be
43
+ rendered into the panel without a wrapping `ToolsPanelItem`. They'll then only
44
+ span a single column by default. If this is undesirable, those elements will
45
+ likely need a small style tweak, e.g. `grid-column: 1 / -1;`
46
+
47
+ The usage example below will illustrate a non-`ToolsPanelItem` description
48
+ paragraph, controls that should display in a single row, and others spanning
49
+ both columns.
50
+
33
51
  ## Usage
34
52
 
35
53
  ```jsx
54
+ /**
55
+ * External dependencies
56
+ */
57
+ import styled from '@emotion/styled';
58
+
59
+ /**
60
+ * WordPress dependencies
61
+ */
36
62
  import {
63
+ __experimentalBoxControl as BoxControl,
37
64
  __experimentalToolsPanel as ToolsPanel,
38
65
  __experimentalToolsPanelItem as ToolsPanelItem,
66
+ __experimentalUnitControl as UnitControl,
39
67
  } from '@wordpress/components';
40
68
  import { __ } from '@wordpress/i18n';
41
69
 
42
- import {
43
- PaddingEdit,
44
- hasPaddingValue,
45
- resetPadding,
46
- useIsPaddingDisabled,
47
- } from './padding';
70
+ const PanelDescription = styled.div`
71
+ grid-column: span 2;
72
+ `;
48
73
 
74
+ const SingleColumnItem = styled( ToolsPanelItem )`
75
+ grid-column: span 1;
76
+ `;
49
77
 
50
- export function DimensionPanel( props ) {
51
- const isPaddingDisabled = useIsPaddingDisabled( props );
78
+ export function DimensionPanel() {
79
+ const [ height, setHeight ] = useState();
80
+ const [ width, setWidth ] = useState();
81
+ const [ padding, setPadding ] = useState();
82
+ const [ margin, setMargin ] = useState();
52
83
 
53
84
  const resetAll = () => {
54
- // Reset attributes for all block support features in this panel.
85
+ setHeight( undefined );
86
+ setWidth( undefined );
87
+ setPadding( undefined );
88
+ setMargin( undefined );
55
89
  };
56
90
 
57
91
  return (
58
92
  <ToolsPanel label={ __( 'Dimensions' ) } resetAll={ resetAll }>
59
- <p>
60
- Select dimensions or spacing related settings from the menu for
61
- additional controls.
62
- </p>
63
- { ! isPaddingDisabled && (
64
- <ToolsPanelItem
65
- hasValue={ () => hasPaddingValue( props ) }
93
+ <PanelDescription>
94
+ Select dimensions or spacing related settings from the
95
+ menu for additional controls.
96
+ </PanelDescription>
97
+ <SingleColumnItem
98
+ hasValue={ () => !! height }
99
+ label={ __( 'Height' ) }
100
+ onDeselect={ () => setHeight( undefined ) }
101
+ isShownByDefault
102
+ >
103
+ <UnitControl
104
+ label={ __( 'Height' ) }
105
+ onChange={ setHeight }
106
+ value={ height }
107
+ />
108
+ </SingleColumnItem>
109
+ <SingleColumnItem
110
+ hasValue={ () => !! width }
111
+ label={ __( 'Width' ) }
112
+ onDeselect={ () => setWidth( undefined ) }
113
+ isShownByDefault
114
+ >
115
+ <UnitControl
116
+ label={ __( 'Width' ) }
117
+ onChange={ setWidth }
118
+ value={ width }
119
+ />
120
+ </SingleColumnItem>
121
+ <ToolsPanelItem
122
+ hasValue={ () => !! padding }
123
+ label={ __( 'Padding' ) }
124
+ onDeselect={ () => setPadding( undefined ) }
125
+ >
126
+ <BoxControl
66
127
  label={ __( 'Padding' ) }
67
- onDeselect={ () => resetPadding( props ) }
68
- >
69
- <PaddingEdit { ...props } />
70
- </ToolsPanelItem>
71
- ) }
128
+ onChange={ setPadding }
129
+ values={ padding }
130
+ allowReset={ false }
131
+ />
132
+ </ToolsPanelItem>
133
+ <ToolsPanelItem
134
+ hasValue={ () => !! margin }
135
+ label={ __( 'Margin' ) }
136
+ onDeselect={ () => setMargin( undefined ) }
137
+ >
138
+ <BoxControl
139
+ label={ __( 'Margin' ) }
140
+ onChange={ setMargin }
141
+ values={ margin }
142
+ allowReset={ false }
143
+ />
144
+ </ToolsPanelItem>
72
145
  </ToolsPanel>
73
146
  );
74
147
  }