@wordpress/components 23.0.0 → 23.2.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 (457) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/CONTRIBUTING.md +0 -21
  3. package/LICENSE.md +1 -1
  4. package/build/autocomplete/index.js +1 -3
  5. package/build/autocomplete/index.js.map +1 -1
  6. package/build/border-box-control/border-box-control/component.js +0 -3
  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 +0 -2
  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/component.js +0 -2
  11. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  12. package/build/border-box-control/border-box-control-split-controls/hook.js +0 -2
  13. package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  14. package/build/border-control/border-control/component.js +0 -2
  15. package/build/border-control/border-control/component.js.map +1 -1
  16. package/build/border-control/border-control/hook.js +0 -2
  17. package/build/border-control/border-control/hook.js.map +1 -1
  18. package/build/border-control/border-control-dropdown/component.js +6 -11
  19. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  20. package/build/border-control/border-control-dropdown/hook.js +0 -2
  21. package/build/border-control/border-control-dropdown/hook.js.map +1 -1
  22. package/build/color-palette/index.js +5 -8
  23. package/build/color-palette/index.js.map +1 -1
  24. package/build/color-picker/component.js +1 -0
  25. package/build/color-picker/component.js.map +1 -1
  26. package/build/color-picker/styles.js +8 -10
  27. package/build/color-picker/styles.js.map +1 -1
  28. package/build/combobox-control/index.js +5 -1
  29. package/build/combobox-control/index.js.map +1 -1
  30. package/build/dimension-control/index.js.map +1 -1
  31. package/build/dropdown/index.js +45 -10
  32. package/build/dropdown/index.js.map +1 -1
  33. package/build/focal-point-picker/utils.js +1 -1
  34. package/build/focal-point-picker/utils.js.map +1 -1
  35. package/build/gradient-picker/index.js +1 -2
  36. package/build/gradient-picker/index.js.map +1 -1
  37. package/build/higher-order/navigate-regions/index.js +4 -3
  38. package/build/higher-order/navigate-regions/index.js.map +1 -1
  39. package/build/index.js +7 -25
  40. package/build/index.js.map +1 -1
  41. package/build/index.native.js +8 -18
  42. package/build/index.native.js.map +1 -1
  43. package/build/item-group/item/component.js +27 -3
  44. package/build/item-group/item/component.js.map +1 -1
  45. package/build/item-group/item-group/component.js +26 -3
  46. package/build/item-group/item-group/component.js.map +1 -1
  47. package/build/item-group/styles.js +14 -14
  48. package/build/item-group/styles.js.map +1 -1
  49. package/build/mobile/bottom-sheet/picker-cell.native.js +1 -9
  50. package/build/mobile/bottom-sheet/picker-cell.native.js.map +1 -1
  51. package/build/mobile/global-styles-context/utils.native.js +30 -12
  52. package/build/mobile/global-styles-context/utils.native.js.map +1 -1
  53. package/build/panel/row.js +5 -3
  54. package/build/panel/row.js.map +1 -1
  55. package/build/query-controls/index.js +1 -0
  56. package/build/query-controls/index.js.map +1 -1
  57. package/build/resizable-box/index.js +5 -4
  58. package/build/resizable-box/index.js.map +1 -1
  59. package/build/responsive-wrapper/index.js +18 -1
  60. package/build/responsive-wrapper/index.js.map +1 -1
  61. package/build/responsive-wrapper/types.js +6 -0
  62. package/build/responsive-wrapper/types.js.map +1 -0
  63. package/build/sandbox/index.js +35 -24
  64. package/build/sandbox/index.js.map +1 -1
  65. package/build/sandbox/types.js +6 -0
  66. package/build/sandbox/types.js.map +1 -0
  67. package/build/tab-panel/index.js +15 -9
  68. package/build/tab-panel/index.js.map +1 -1
  69. package/build/toolbar/index.js +42 -60
  70. package/build/toolbar/index.js.map +1 -1
  71. package/build/toolbar/toolbar/index.js +74 -0
  72. package/build/toolbar/toolbar/index.js.map +1 -0
  73. package/build/toolbar/{toolbar-container.js → toolbar/toolbar-container.js} +0 -0
  74. package/build/toolbar/toolbar/toolbar-container.js.map +1 -0
  75. package/build/toolbar/{toolbar-container.native.js → toolbar/toolbar-container.native.js} +0 -0
  76. package/build/toolbar/toolbar/toolbar-container.native.js.map +1 -0
  77. package/build/{toolbar-button → toolbar/toolbar-button}/index.js +1 -1
  78. package/build/toolbar/toolbar-button/index.js.map +1 -0
  79. package/build/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.js +0 -0
  80. package/build/toolbar/toolbar-button/toolbar-button-container.js.map +1 -0
  81. package/build/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.native.js +0 -0
  82. package/build/toolbar/toolbar-button/toolbar-button-container.native.js.map +1 -0
  83. package/build/{toolbar-context → toolbar/toolbar-context}/index.js +0 -0
  84. package/build/toolbar/toolbar-context/index.js.map +1 -0
  85. package/build/{toolbar-dropdown-menu → toolbar/toolbar-dropdown-menu}/index.js +1 -1
  86. package/build/toolbar/toolbar-dropdown-menu/index.js.map +1 -0
  87. package/build/{toolbar-group → toolbar/toolbar-group}/index.js +0 -0
  88. package/build/toolbar/toolbar-group/index.js.map +1 -0
  89. package/build/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.js +1 -1
  90. package/build/toolbar/toolbar-group/toolbar-group-collapsed.js.map +1 -0
  91. package/build/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.native.js +1 -1
  92. package/build/toolbar/toolbar-group/toolbar-group-collapsed.native.js.map +1 -0
  93. package/build/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.js +0 -0
  94. package/build/toolbar/toolbar-group/toolbar-group-container.js.map +1 -0
  95. package/build/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.native.js +0 -0
  96. package/build/toolbar/toolbar-group/toolbar-group-container.native.js.map +1 -0
  97. package/build/{toolbar-item → toolbar/toolbar-item}/index.js +0 -0
  98. package/build/toolbar/toolbar-item/index.js.map +1 -0
  99. package/build/{toolbar-item → toolbar/toolbar-item}/index.native.js +0 -0
  100. package/build/toolbar/toolbar-item/index.native.js.map +1 -0
  101. package/build/tree-grid/index.js +3 -3
  102. package/build/tree-grid/index.js.map +1 -1
  103. package/build-module/autocomplete/index.js +1 -2
  104. package/build-module/autocomplete/index.js.map +1 -1
  105. package/build-module/border-box-control/border-box-control/component.js +0 -3
  106. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  107. package/build-module/border-box-control/border-box-control/hook.js +0 -2
  108. package/build-module/border-box-control/border-box-control/hook.js.map +1 -1
  109. package/build-module/border-box-control/border-box-control-split-controls/component.js +0 -2
  110. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  111. package/build-module/border-box-control/border-box-control-split-controls/hook.js +0 -2
  112. package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  113. package/build-module/border-control/border-control/component.js +0 -2
  114. package/build-module/border-control/border-control/component.js.map +1 -1
  115. package/build-module/border-control/border-control/hook.js +0 -2
  116. package/build-module/border-control/border-control/hook.js.map +1 -1
  117. package/build-module/border-control/border-control-dropdown/component.js +6 -11
  118. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  119. package/build-module/border-control/border-control-dropdown/hook.js +0 -2
  120. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
  121. package/build-module/color-palette/index.js +5 -8
  122. package/build-module/color-palette/index.js.map +1 -1
  123. package/build-module/color-picker/component.js +1 -0
  124. package/build-module/color-picker/component.js.map +1 -1
  125. package/build-module/color-picker/styles.js +8 -9
  126. package/build-module/color-picker/styles.js.map +1 -1
  127. package/build-module/combobox-control/index.js +5 -1
  128. package/build-module/combobox-control/index.js.map +1 -1
  129. package/build-module/dimension-control/index.js +1 -2
  130. package/build-module/dimension-control/index.js.map +1 -1
  131. package/build-module/dropdown/index.js +44 -10
  132. package/build-module/dropdown/index.js.map +1 -1
  133. package/build-module/focal-point-picker/utils.js +1 -1
  134. package/build-module/focal-point-picker/utils.js.map +1 -1
  135. package/build-module/gradient-picker/index.js +1 -2
  136. package/build-module/gradient-picker/index.js.map +1 -1
  137. package/build-module/higher-order/navigate-regions/index.js +4 -3
  138. package/build-module/higher-order/navigate-regions/index.js.map +1 -1
  139. package/build-module/index.js +1 -7
  140. package/build-module/index.js.map +1 -1
  141. package/build-module/index.native.js +1 -6
  142. package/build-module/index.native.js.map +1 -1
  143. package/build-module/item-group/item/component.js +26 -2
  144. package/build-module/item-group/item/component.js.map +1 -1
  145. package/build-module/item-group/item-group/component.js +25 -2
  146. package/build-module/item-group/item-group/component.js.map +1 -1
  147. package/build-module/item-group/styles.js +14 -14
  148. package/build-module/item-group/styles.js.map +1 -1
  149. package/build-module/mobile/bottom-sheet/picker-cell.native.js +1 -8
  150. package/build-module/mobile/bottom-sheet/picker-cell.native.js.map +1 -1
  151. package/build-module/mobile/global-styles-context/utils.native.js +31 -13
  152. package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
  153. package/build-module/panel/row.js +5 -3
  154. package/build-module/panel/row.js.map +1 -1
  155. package/build-module/query-controls/index.js +1 -0
  156. package/build-module/query-controls/index.js.map +1 -1
  157. package/build-module/resizable-box/index.js +3 -2
  158. package/build-module/resizable-box/index.js.map +1 -1
  159. package/build-module/responsive-wrapper/index.js +20 -1
  160. package/build-module/responsive-wrapper/index.js.map +1 -1
  161. package/build-module/responsive-wrapper/types.js +2 -0
  162. package/build-module/responsive-wrapper/types.js.map +1 -0
  163. package/build-module/sandbox/index.js +37 -23
  164. package/build-module/sandbox/index.js.map +1 -1
  165. package/build-module/sandbox/types.js +2 -0
  166. package/build-module/sandbox/types.js.map +1 -0
  167. package/build-module/tab-panel/index.js +15 -8
  168. package/build-module/tab-panel/index.js.map +1 -1
  169. package/build-module/toolbar/index.js +6 -58
  170. package/build-module/toolbar/index.js.map +1 -1
  171. package/build-module/toolbar/toolbar/index.js +59 -0
  172. package/build-module/toolbar/toolbar/index.js.map +1 -0
  173. package/build-module/toolbar/{toolbar-container.js → toolbar/toolbar-container.js} +0 -0
  174. package/{build → build-module/toolbar}/toolbar/toolbar-container.js.map +1 -1
  175. package/build-module/toolbar/{toolbar-container.native.js → toolbar/toolbar-container.native.js} +0 -0
  176. package/build-module/toolbar/toolbar/toolbar-container.native.js.map +1 -0
  177. package/build-module/{toolbar-button → toolbar/toolbar-button}/index.js +1 -1
  178. package/build-module/toolbar/toolbar-button/index.js.map +1 -0
  179. package/build-module/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.js +0 -0
  180. package/build-module/toolbar/toolbar-button/toolbar-button-container.js.map +1 -0
  181. package/build-module/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.native.js +0 -0
  182. package/build-module/toolbar/toolbar-button/toolbar-button-container.native.js.map +1 -0
  183. package/build-module/{toolbar-context → toolbar/toolbar-context}/index.js +0 -0
  184. package/build-module/toolbar/toolbar-context/index.js.map +1 -0
  185. package/build-module/{toolbar-dropdown-menu → toolbar/toolbar-dropdown-menu}/index.js +1 -1
  186. package/build-module/toolbar/toolbar-dropdown-menu/index.js.map +1 -0
  187. package/build-module/{toolbar-group → toolbar/toolbar-group}/index.js +0 -0
  188. package/build-module/toolbar/toolbar-group/index.js.map +1 -0
  189. package/build-module/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.js +1 -1
  190. package/build-module/toolbar/toolbar-group/toolbar-group-collapsed.js.map +1 -0
  191. package/build-module/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.native.js +1 -1
  192. package/build-module/toolbar/toolbar-group/toolbar-group-collapsed.native.js.map +1 -0
  193. package/build-module/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.js +0 -0
  194. package/build-module/toolbar/toolbar-group/toolbar-group-container.js.map +1 -0
  195. package/build-module/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.native.js +0 -0
  196. package/build-module/toolbar/toolbar-group/toolbar-group-container.native.js.map +1 -0
  197. package/build-module/{toolbar-item → toolbar/toolbar-item}/index.js +0 -0
  198. package/build-module/toolbar/toolbar-item/index.js.map +1 -0
  199. package/build-module/{toolbar-item → toolbar/toolbar-item}/index.native.js +0 -0
  200. package/build-module/toolbar/toolbar-item/index.native.js.map +1 -0
  201. package/build-module/tree-grid/index.js +3 -3
  202. package/build-module/tree-grid/index.js.map +1 -1
  203. package/build-style/style-rtl.css +19 -32
  204. package/build-style/style.css +19 -32
  205. package/build-types/border-box-control/border-box-control/component.d.ts +1 -1
  206. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  207. package/build-types/border-box-control/border-box-control/hook.d.ts +0 -1
  208. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  209. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +1 -1
  210. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -1
  211. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +0 -1
  212. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
  213. package/build-types/border-box-control/stories/index.d.ts +1 -1
  214. package/build-types/border-control/border-control/component.d.ts +1 -1
  215. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  216. package/build-types/border-control/border-control/hook.d.ts +0 -1
  217. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  218. package/build-types/border-control/border-control-dropdown/component.d.ts +1 -1
  219. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  220. package/build-types/border-control/border-control-dropdown/hook.d.ts +0 -1
  221. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  222. package/build-types/border-control/stories/index.d.ts +6 -6
  223. package/build-types/border-control/stories/index.d.ts.map +1 -1
  224. package/build-types/border-control/types.d.ts +1 -1
  225. package/build-types/border-control/types.d.ts.map +1 -1
  226. package/build-types/color-palette/index.d.ts +2 -3
  227. package/build-types/color-palette/index.d.ts.map +1 -1
  228. package/build-types/color-palette/stories/index.d.ts +2 -9
  229. package/build-types/color-palette/stories/index.d.ts.map +1 -1
  230. package/build-types/color-palette/types.d.ts +3 -16
  231. package/build-types/color-palette/types.d.ts.map +1 -1
  232. package/build-types/color-picker/component.d.ts.map +1 -1
  233. package/build-types/color-picker/styles.d.ts.map +1 -1
  234. package/build-types/dashicon/types.d.ts +0 -4
  235. package/build-types/dashicon/types.d.ts.map +1 -1
  236. package/build-types/disabled/stories/index.d.ts.map +1 -1
  237. package/build-types/dropdown/index.d.ts +29 -1
  238. package/build-types/dropdown/index.d.ts.map +1 -1
  239. package/build-types/dropdown/stories/index.d.ts +23 -0
  240. package/build-types/dropdown/stories/index.d.ts.map +1 -0
  241. package/build-types/dropdown/test/index.d.ts +2 -0
  242. package/build-types/dropdown/test/index.d.ts.map +1 -0
  243. package/build-types/dropdown/types.d.ts +101 -0
  244. package/build-types/dropdown/types.d.ts.map +1 -1
  245. package/build-types/focal-point-picker/utils.d.ts.map +1 -1
  246. package/build-types/icon/stories/index.d.ts +22 -0
  247. package/build-types/icon/stories/index.d.ts.map +1 -0
  248. package/build-types/item-group/item/component.d.ts +24 -2
  249. package/build-types/item-group/item/component.d.ts.map +1 -1
  250. package/build-types/item-group/item-group/component.d.ts +23 -2
  251. package/build-types/item-group/item-group/component.d.ts.map +1 -1
  252. package/build-types/item-group/stories/index.d.ts +15 -0
  253. package/build-types/item-group/stories/index.d.ts.map +1 -0
  254. package/build-types/item-group/styles.d.ts.map +1 -1
  255. package/build-types/radio-context/index.d.ts +6 -0
  256. package/build-types/radio-context/index.d.ts.map +1 -0
  257. package/build-types/resizable-box/index.d.ts +6 -7
  258. package/build-types/resizable-box/index.d.ts.map +1 -1
  259. package/build-types/resizable-box/stories/index.d.ts +61 -0
  260. package/build-types/resizable-box/stories/index.d.ts.map +1 -0
  261. package/build-types/responsive-wrapper/index.d.ts +24 -0
  262. package/build-types/responsive-wrapper/index.d.ts.map +1 -0
  263. package/build-types/responsive-wrapper/stories/index.d.ts +12 -0
  264. package/build-types/responsive-wrapper/stories/index.d.ts.map +1 -0
  265. package/build-types/responsive-wrapper/types.d.ts +22 -0
  266. package/build-types/responsive-wrapper/types.d.ts.map +1 -0
  267. package/build-types/sandbox/index.d.ts +19 -0
  268. package/build-types/sandbox/index.d.ts.map +1 -0
  269. package/build-types/sandbox/stories/index.d.ts +12 -0
  270. package/build-types/sandbox/stories/index.d.ts.map +1 -0
  271. package/build-types/sandbox/test/index.d.ts +2 -0
  272. package/build-types/sandbox/test/index.d.ts.map +1 -0
  273. package/build-types/sandbox/types.d.ts +36 -0
  274. package/build-types/sandbox/types.d.ts.map +1 -0
  275. package/build-types/tab-panel/index.d.ts.map +1 -1
  276. package/build-types/tab-panel/stories/index.d.ts +1 -0
  277. package/build-types/tab-panel/stories/index.d.ts.map +1 -1
  278. package/build-types/tab-panel/types.d.ts +10 -4
  279. package/build-types/tab-panel/types.d.ts.map +1 -1
  280. package/package.json +17 -17
  281. package/src/autocomplete/index.js +1 -3
  282. package/src/autocomplete/test/index.js +2 -0
  283. package/src/base-control/test/index.tsx +1 -0
  284. package/src/border-box-control/border-box-control/component.tsx +0 -7
  285. package/src/border-box-control/border-box-control/hook.ts +0 -2
  286. package/src/border-box-control/border-box-control-split-controls/component.tsx +0 -2
  287. package/src/border-box-control/border-box-control-split-controls/hook.ts +0 -2
  288. package/src/border-box-control/test/index.js +2 -0
  289. package/src/border-control/border-control/component.tsx +0 -4
  290. package/src/border-control/border-control/hook.ts +0 -2
  291. package/src/border-control/border-control-dropdown/component.tsx +11 -17
  292. package/src/border-control/border-control-dropdown/hook.ts +0 -2
  293. package/src/border-control/stories/index.tsx +0 -1
  294. package/src/border-control/test/index.js +70 -67
  295. package/src/border-control/types.ts +1 -4
  296. package/src/box-control/test/index.js +2 -0
  297. package/src/checkbox-control/test/index.tsx +2 -0
  298. package/src/color-palette/index.tsx +12 -12
  299. package/src/color-palette/stories/index.tsx +0 -13
  300. package/src/color-palette/test/index.tsx +2 -0
  301. package/src/color-palette/types.ts +3 -17
  302. package/src/color-picker/component.tsx +1 -0
  303. package/src/color-picker/stories/index.js +20 -60
  304. package/src/color-picker/styles.ts +0 -5
  305. package/src/color-picker/test/index.js +2 -0
  306. package/src/combobox-control/index.js +9 -1
  307. package/src/combobox-control/test/index.js +2 -0
  308. package/src/confirm-dialog/test/index.js +2 -0
  309. package/src/dashicon/types.ts +0 -6
  310. package/src/date-time/date/test/index.tsx +2 -0
  311. package/src/date-time/time/test/index.tsx +2 -0
  312. package/src/dimension-control/index.js +2 -3
  313. package/src/dimension-control/test/index.test.js +2 -0
  314. package/src/disabled/stories/index.tsx +6 -2
  315. package/src/disabled/test/index.tsx +2 -0
  316. package/src/dropdown/README.md +41 -46
  317. package/src/dropdown/{index.js → index.tsx} +57 -13
  318. package/src/dropdown/stories/{index.js → index.tsx} +21 -8
  319. package/src/dropdown/test/{index.js → index.tsx} +9 -9
  320. package/src/dropdown/types.ts +107 -0
  321. package/src/dropdown-menu/README.md +2 -3
  322. package/src/dropdown-menu/test/index.js +2 -0
  323. package/src/external-link/test/index.tsx +2 -0
  324. package/src/focal-point-picker/stories/index.tsx +1 -1
  325. package/src/focal-point-picker/test/index.js +2 -0
  326. package/src/focal-point-picker/utils.ts +4 -1
  327. package/src/font-size-picker/test/index.tsx +2 -0
  328. package/src/form-file-upload/test/index.tsx +2 -0
  329. package/src/form-toggle/test/index.tsx +2 -0
  330. package/src/form-token-field/test/index.tsx +3 -0
  331. package/src/gradient-picker/index.js +1 -2
  332. package/src/gradient-picker/stories/index.js +0 -1
  333. package/src/guide/stories/index.js +14 -41
  334. package/src/guide/test/index.js +2 -0
  335. package/src/higher-order/navigate-regions/index.js +5 -2
  336. package/src/higher-order/navigate-regions/style.scss +13 -39
  337. package/src/higher-order/with-filters/test/index.js +70 -74
  338. package/src/higher-order/with-focus-outside/test/index.js +2 -0
  339. package/src/higher-order/with-focus-return/test/index.js +2 -0
  340. package/src/higher-order/with-notices/test/index.js +1 -0
  341. package/src/icon/stories/index.tsx +103 -0
  342. package/src/index.js +8 -7
  343. package/src/index.native.js +8 -6
  344. package/src/input-control/test/index.js +3 -0
  345. package/src/isolated-event-container/test/index.js +2 -0
  346. package/src/item-group/item/component.tsx +26 -2
  347. package/src/item-group/item-group/component.tsx +25 -2
  348. package/src/item-group/stories/index.tsx +103 -0
  349. package/src/item-group/styles.ts +1 -0
  350. package/src/item-group/test/__snapshots__/index.js.snap +11 -10
  351. package/src/mobile/bottom-sheet/picker-cell.native.js +1 -6
  352. package/src/mobile/global-styles-context/utils.native.js +17 -16
  353. package/src/modal/test/index.tsx +1 -3
  354. package/src/navigable-container/test/navigable-menu.js +2 -0
  355. package/src/navigable-container/test/tababble-container.js +2 -0
  356. package/src/navigation/test/index.js +2 -0
  357. package/src/navigator/test/index.tsx +2 -0
  358. package/src/notice/stories/index.js +30 -58
  359. package/src/notice/test/index.js +8 -3
  360. package/src/number-control/test/index.tsx +2 -0
  361. package/src/panel/row.js +3 -3
  362. package/src/panel/stories/index.js +62 -80
  363. package/src/panel/test/__snapshots__/body.js.snap +9 -0
  364. package/src/panel/test/body.js +71 -62
  365. package/src/placeholder/style.scss +1 -1
  366. package/src/placeholder/test/index.tsx +3 -0
  367. package/src/query-controls/index.js +1 -0
  368. package/src/resizable-box/README.md +2 -2
  369. package/src/resizable-box/index.tsx +7 -6
  370. package/src/resizable-box/stories/index.tsx +92 -0
  371. package/src/responsive-wrapper/README.md +29 -0
  372. package/src/responsive-wrapper/{index.js → index.tsx} +23 -2
  373. package/src/responsive-wrapper/stories/index.tsx +38 -0
  374. package/src/responsive-wrapper/types.ts +20 -0
  375. package/src/sandbox/README.md +45 -2
  376. package/src/sandbox/{index.js → index.tsx} +47 -24
  377. package/src/sandbox/stories/index.tsx +32 -0
  378. package/src/sandbox/test/{index.js → index.tsx} +9 -4
  379. package/src/sandbox/types.ts +34 -0
  380. package/src/select-control/test/select-control.tsx +2 -0
  381. package/src/slot-fill/stories/index.js +12 -17
  382. package/src/style.scss +3 -3
  383. package/src/tab-panel/README.md +1 -0
  384. package/src/tab-panel/index.tsx +20 -7
  385. package/src/tab-panel/stories/index.tsx +20 -0
  386. package/src/tab-panel/test/index.tsx +91 -0
  387. package/src/tab-panel/types.ts +10 -4
  388. package/src/text-highlight/test/index.tsx +1 -0
  389. package/src/toggle-group-control/test/index.tsx +2 -0
  390. package/src/toolbar/index.js +6 -52
  391. package/src/toolbar/stories/index.js +2 -9
  392. package/src/{toolbar-button/stories/index.js → toolbar/stories/toolbar-button.js} +1 -2
  393. package/src/{toolbar-group/stories/index.js → toolbar/stories/toolbar-group.js} +1 -1
  394. package/src/toolbar/test/index.js +1 -2
  395. package/src/{toolbar-group/test/index.js → toolbar/test/toolbar-group.js} +3 -1
  396. package/src/toolbar/{README.md → toolbar/README.md} +0 -0
  397. package/src/toolbar/toolbar/index.js +52 -0
  398. package/src/toolbar/{style.native.scss → toolbar/style.native.scss} +0 -0
  399. package/src/toolbar/{style.scss → toolbar/style.scss} +1 -1
  400. package/src/toolbar/{toolbar-container.js → toolbar/toolbar-container.js} +0 -0
  401. package/src/toolbar/{toolbar-container.native.js → toolbar/toolbar-container.native.js} +0 -0
  402. package/src/{toolbar-button → toolbar/toolbar-button}/README.md +0 -0
  403. package/src/{toolbar-button → toolbar/toolbar-button}/index.js +1 -1
  404. package/src/{toolbar-button → toolbar/toolbar-button}/style.scss +0 -0
  405. package/src/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.js +0 -0
  406. package/src/{toolbar-button → toolbar/toolbar-button}/toolbar-button-container.native.js +0 -0
  407. package/src/{toolbar-context → toolbar/toolbar-context}/index.js +0 -0
  408. package/src/{toolbar-dropdown-menu → toolbar/toolbar-dropdown-menu}/README.md +0 -0
  409. package/src/{toolbar-dropdown-menu → toolbar/toolbar-dropdown-menu}/index.js +1 -1
  410. package/src/{toolbar-group → toolbar/toolbar-group}/README.md +0 -0
  411. package/src/{toolbar-group → toolbar/toolbar-group}/index.js +0 -0
  412. package/src/{toolbar-group → toolbar/toolbar-group}/style.native.scss +0 -0
  413. package/src/{toolbar-group → toolbar/toolbar-group}/style.scss +0 -0
  414. package/src/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.js +1 -1
  415. package/src/{toolbar-group → toolbar/toolbar-group}/toolbar-group-collapsed.native.js +1 -1
  416. package/src/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.js +0 -0
  417. package/src/{toolbar-group → toolbar/toolbar-group}/toolbar-group-container.native.js +0 -0
  418. package/src/{toolbar-item → toolbar/toolbar-item}/README.md +0 -0
  419. package/src/{toolbar-item → toolbar/toolbar-item}/index.js +0 -0
  420. package/src/{toolbar-item → toolbar/toolbar-item}/index.native.js +0 -0
  421. package/src/tooltip/stories/index.js +68 -78
  422. package/src/tooltip/test/index.js +2 -0
  423. package/src/tree-grid/index.js +2 -4
  424. package/src/unit-control/test/index.tsx +3 -0
  425. package/src/utils/hooks/test/use-latest-ref.js +2 -0
  426. package/tsconfig.json +0 -7
  427. package/tsconfig.tsbuildinfo +1 -1
  428. package/build/toolbar/toolbar-container.native.js.map +0 -1
  429. package/build/toolbar-button/index.js.map +0 -1
  430. package/build/toolbar-button/toolbar-button-container.js.map +0 -1
  431. package/build/toolbar-button/toolbar-button-container.native.js.map +0 -1
  432. package/build/toolbar-context/index.js.map +0 -1
  433. package/build/toolbar-dropdown-menu/index.js.map +0 -1
  434. package/build/toolbar-group/index.js.map +0 -1
  435. package/build/toolbar-group/toolbar-group-collapsed.js.map +0 -1
  436. package/build/toolbar-group/toolbar-group-collapsed.native.js.map +0 -1
  437. package/build/toolbar-group/toolbar-group-container.js.map +0 -1
  438. package/build/toolbar-group/toolbar-group-container.native.js.map +0 -1
  439. package/build/toolbar-item/index.js.map +0 -1
  440. package/build/toolbar-item/index.native.js.map +0 -1
  441. package/build-module/toolbar/toolbar-container.js.map +0 -1
  442. package/build-module/toolbar/toolbar-container.native.js.map +0 -1
  443. package/build-module/toolbar-button/index.js.map +0 -1
  444. package/build-module/toolbar-button/toolbar-button-container.js.map +0 -1
  445. package/build-module/toolbar-button/toolbar-button-container.native.js.map +0 -1
  446. package/build-module/toolbar-context/index.js.map +0 -1
  447. package/build-module/toolbar-dropdown-menu/index.js.map +0 -1
  448. package/build-module/toolbar-group/index.js.map +0 -1
  449. package/build-module/toolbar-group/toolbar-group-collapsed.js.map +0 -1
  450. package/build-module/toolbar-group/toolbar-group-collapsed.native.js.map +0 -1
  451. package/build-module/toolbar-group/toolbar-group-container.js.map +0 -1
  452. package/build-module/toolbar-group/toolbar-group-container.native.js.map +0 -1
  453. package/build-module/toolbar-item/index.js.map +0 -1
  454. package/build-module/toolbar-item/index.native.js.map +0 -1
  455. package/src/icon/stories/index.js +0 -128
  456. package/src/item-group/stories/index.js +0 -270
  457. package/src/resizable-box/stories/index.js +0 -97
@@ -1,154 +1,163 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, fireEvent } from '@testing-library/react';
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
5
6
 
6
7
  /**
7
8
  * Internal dependencies
8
9
  */
9
10
  import { PanelBody } from '../body';
10
11
 
11
- const getPanelBody = ( container ) =>
12
- container.querySelector( '.components-panel__body' );
13
- const getPanelBodyContent = ( container ) =>
14
- container.querySelector( '.components-panel__body > div' );
15
- const getPanelToggle = ( container ) =>
16
- container.querySelector( '.components-panel__body-toggle' );
12
+ jest.useFakeTimers();
17
13
 
18
14
  describe( 'PanelBody', () => {
19
15
  describe( 'basic rendering', () => {
20
16
  it( 'should render an empty div with the matching className', () => {
21
17
  const { container } = render( <PanelBody /> );
22
- const panelBody = getPanelBody( container );
23
18
 
24
- expect( panelBody ).toBeTruthy();
25
- expect( panelBody.tagName ).toBe( 'DIV' );
19
+ expect( container ).toMatchSnapshot();
26
20
  } );
27
21
 
28
22
  it( 'should render inner content, if opened', () => {
29
- const { container } = render(
30
- <PanelBody opened={ true }>
31
- <div className="inner-content">Content</div>
23
+ render(
24
+ <PanelBody opened>
25
+ <div data-testid="inner-content">Content</div>
32
26
  </PanelBody>
33
27
  );
34
- const panelContent = getPanelBodyContent( container );
35
28
 
36
- expect( panelContent ).toBeTruthy();
29
+ expect( screen.getByTestId( 'inner-content' ) ).toBeVisible();
37
30
  } );
38
31
 
39
32
  it( 'should be opened by default', () => {
40
- const { container } = render(
33
+ render(
41
34
  <PanelBody>
42
- <div>Content</div>
35
+ <div data-testid="inner-content">Content</div>
43
36
  </PanelBody>
44
37
  );
45
- const panelContent = getPanelBodyContent( container );
46
38
 
47
- expect( panelContent ).toBeTruthy();
39
+ expect( screen.getByTestId( 'inner-content' ) ).toBeVisible();
48
40
  } );
49
41
 
50
42
  it( 'should render as initially opened, if specified', () => {
51
- const { container } = render(
52
- <PanelBody initialOpen={ true }>
53
- <div>Content</div>
43
+ render(
44
+ <PanelBody initialOpen>
45
+ <div data-testid="inner-content">Content</div>
54
46
  </PanelBody>
55
47
  );
56
- const panelContent = getPanelBodyContent( container );
57
48
 
58
- expect( panelContent ).toBeTruthy();
49
+ expect( screen.getByTestId( 'inner-content' ) ).toBeVisible();
59
50
  } );
60
51
 
61
52
  it( 'should call the children function, if specified', () => {
62
- const { container, rerender } = render(
63
- <PanelBody opened={ true }>
64
- { ( { opened } ) => <div hidden={ opened }>Content</div> }
53
+ const { rerender } = render(
54
+ <PanelBody opened>
55
+ { ( { opened } ) => (
56
+ <div hidden={ opened } data-testid="inner-content">
57
+ Content
58
+ </div>
59
+ ) }
65
60
  </PanelBody>
66
61
  );
67
- let panelContent = getPanelBodyContent( container );
68
62
 
69
- expect( panelContent ).toBeTruthy();
63
+ let panelContent = screen.getByTestId( 'inner-content' );
64
+
65
+ expect( panelContent ).toBeInTheDocument();
66
+ expect( panelContent ).not.toBeVisible();
70
67
  expect( panelContent ).toHaveAttribute( 'hidden', '' );
71
68
 
72
69
  rerender(
73
70
  <PanelBody opened={ false }>
74
- { ( { opened } ) => <div hidden={ opened }>Content</div> }
71
+ { ( { opened } ) => (
72
+ <div hidden={ opened } data-testid="inner-content">
73
+ Content
74
+ </div>
75
+ ) }
75
76
  </PanelBody>
76
77
  );
77
- panelContent = getPanelBodyContent( container );
78
78
 
79
- expect( panelContent ).toBeTruthy();
79
+ panelContent = screen.getByTestId( 'inner-content' );
80
+
81
+ expect( panelContent ).toBeVisible();
80
82
  expect( panelContent ).not.toHaveAttribute( 'hidden' );
81
83
  } );
82
84
  } );
83
85
 
84
86
  describe( 'toggling', () => {
85
87
  it( 'should toggle collapse with opened prop', () => {
86
- const { container, rerender } = render(
87
- <PanelBody opened={ true }>
88
- <div>Content</div>
88
+ const { rerender } = render(
89
+ <PanelBody opened>
90
+ <div data-testid="inner-content">Content</div>
89
91
  </PanelBody>
90
92
  );
91
- let panelContent = getPanelBodyContent( container );
92
93
 
93
- expect( panelContent ).toBeTruthy();
94
+ let panelContent = screen.getByTestId( 'inner-content' );
95
+
96
+ expect( panelContent ).toBeVisible();
94
97
 
95
98
  rerender(
96
99
  <PanelBody opened={ false }>
97
- <div>Content</div>
100
+ <div data-testid="inner-content">Content</div>
98
101
  </PanelBody>
99
102
  );
100
103
 
101
- panelContent = getPanelBodyContent( container );
104
+ panelContent = screen.queryByTestId( 'inner-content' );
102
105
 
103
- expect( panelContent ).toBeFalsy();
106
+ expect( panelContent ).not.toBeInTheDocument();
104
107
 
105
108
  rerender(
106
- <PanelBody opened={ true }>
107
- <div>Content</div>
109
+ <PanelBody opened>
110
+ <div data-testid="inner-content">Content</div>
108
111
  </PanelBody>
109
112
  );
110
113
 
111
- panelContent = getPanelBodyContent( container );
114
+ panelContent = screen.getByTestId( 'inner-content' );
112
115
 
113
- expect( panelContent ).toBeTruthy();
116
+ expect( panelContent ).toBeVisible();
114
117
  } );
115
118
 
116
- it( 'should toggle when clicking header', () => {
117
- const { container } = render(
119
+ it( 'should toggle when clicking header', async () => {
120
+ const user = userEvent.setup( {
121
+ advanceTimers: jest.advanceTimersByTime,
122
+ } );
123
+
124
+ render(
118
125
  <PanelBody title="Panel" initialOpen={ false }>
119
- <div>Content</div>
126
+ <div data-testid="inner-content">Content</div>
120
127
  </PanelBody>
121
128
  );
122
- let panelContent = getPanelBodyContent( container );
123
- const panelToggle = getPanelToggle( container );
124
129
 
125
- expect( panelContent ).toBeFalsy();
130
+ let panelContent = screen.queryByTestId( 'inner-content' );
131
+ const panelToggle = screen.getByRole( 'button', { name: 'Panel' } );
132
+
133
+ expect( panelContent ).not.toBeInTheDocument();
126
134
 
127
- fireEvent.click( panelToggle );
135
+ await user.click( panelToggle );
128
136
 
129
- panelContent = getPanelBodyContent( container );
137
+ panelContent = screen.getByTestId( 'inner-content' );
130
138
 
131
- expect( panelContent ).toBeTruthy();
139
+ expect( panelContent ).toBeVisible();
132
140
 
133
- fireEvent.click( panelToggle );
141
+ await user.click( panelToggle );
134
142
 
135
- panelContent = getPanelBodyContent( container );
143
+ panelContent = screen.queryByTestId( 'inner-content' );
136
144
 
137
- expect( panelContent ).toBeFalsy();
145
+ expect( panelContent ).not.toBeInTheDocument();
138
146
  } );
139
147
 
140
- it( 'should pass button props to panel title', () => {
148
+ it( 'should pass button props to panel title', async () => {
149
+ const user = userEvent.setup( {
150
+ advanceTimers: jest.advanceTimersByTime,
151
+ } );
141
152
  const mock = jest.fn();
142
153
 
143
- const { container } = render(
154
+ render(
144
155
  <PanelBody title="Panel" buttonProps={ { onClick: mock } }>
145
- <div>Content</div>
156
+ <div data-testid="inner-content">Content</div>
146
157
  </PanelBody>
147
158
  );
148
159
 
149
- const panelToggle = getPanelToggle( container );
150
-
151
- fireEvent.click( panelToggle );
160
+ await user.click( screen.getByRole( 'button', { name: 'Panel' } ) );
152
161
 
153
162
  expect( mock ).toHaveBeenCalled();
154
163
  } );
@@ -45,7 +45,7 @@
45
45
  > svg,
46
46
  .dashicon,
47
47
  .block-editor-block-icon {
48
- margin-right: 1ch;
48
+ margin-right: $grid-unit-15;
49
49
  fill: currentColor;
50
50
  // Optimizate for high contrast modes.
51
51
  // See also https://blogs.windows.com/msedgedev/2020/09/17/styling-for-windows-high-contrast-with-new-standards-for-forced-colors/.
@@ -59,6 +59,7 @@ describe( 'Placeholder', () => {
59
59
 
60
60
  // Test for empty label. When the label is empty, the only way to
61
61
  // query the div is with `querySelector`.
62
+ // eslint-disable-next-line testing-library/no-node-access
62
63
  const label = placeholder.querySelector(
63
64
  '.components-placeholder__label'
64
65
  );
@@ -67,6 +68,7 @@ describe( 'Placeholder', () => {
67
68
 
68
69
  // Test for non existent instructions. When the instructions is
69
70
  // empty, the only way to query the div is with `querySelector`.
71
+ // eslint-disable-next-line testing-library/no-node-access
70
72
  const placeholderInstructions = placeholder.querySelector(
71
73
  '.components-placeholder__instructions'
72
74
  );
@@ -84,6 +86,7 @@ describe( 'Placeholder', () => {
84
86
 
85
87
  const placeholder = getPlaceholder();
86
88
  const icon = within( placeholder ).getByTestId( 'icon' );
89
+ // eslint-disable-next-line testing-library/no-node-access
87
90
  expect( icon.parentNode ).toHaveClass(
88
91
  'components-placeholder__label'
89
92
  );
@@ -35,6 +35,7 @@ export default function QueryControls( {
35
35
  return [
36
36
  onOrderChange && onOrderByChange && (
37
37
  <SelectControl
38
+ __nextHasNoMarginBottom
38
39
  key="query-controls-order-select"
39
40
  label={ __( 'Order by' ) }
40
41
  value={ `${ orderBy }/${ order }` }
@@ -38,8 +38,8 @@ const Edit = ( props ) => {
38
38
  } }
39
39
  onResizeStop={ ( event, direction, elt, delta ) => {
40
40
  setAttributes( {
41
- height: parseInt( height + delta.height, 10 ),
42
- width: parseInt( width + delta.width, 10 ),
41
+ height: height + delta.height,
42
+ width: width + delta.width,
43
43
  } );
44
44
  toggleSelection( true );
45
45
  } }
@@ -88,14 +88,13 @@ const HANDLE_STYLES = {
88
88
  };
89
89
 
90
90
  type ResizableBoxProps = ResizableProps & {
91
- className: string;
92
91
  children: ReactNode;
93
- showHandle: boolean;
94
- __experimentalShowTooltip: boolean;
95
- __experimentalTooltipProps: Parameters< typeof ResizeTooltip >[ 0 ];
92
+ showHandle?: boolean;
93
+ __experimentalShowTooltip?: boolean;
94
+ __experimentalTooltipProps?: Parameters< typeof ResizeTooltip >[ 0 ];
96
95
  };
97
96
 
98
- function ResizableBox(
97
+ function UnforwardedResizableBox(
99
98
  {
100
99
  className,
101
100
  children,
@@ -124,4 +123,6 @@ function ResizableBox(
124
123
  );
125
124
  }
126
125
 
127
- export default forwardRef( ResizableBox );
126
+ export const ResizableBox = forwardRef( UnforwardedResizableBox );
127
+
128
+ export default ResizableBox;
@@ -0,0 +1,92 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import ResizableBox from '..';
10
+
11
+ /**
12
+ * WordPress dependencies
13
+ */
14
+ import { useState } from '@wordpress/element';
15
+
16
+ const meta: ComponentMeta< typeof ResizableBox > = {
17
+ title: 'Components/ResizableBox',
18
+ component: ResizableBox,
19
+ argTypes: {
20
+ children: { control: { type: null } },
21
+ enable: { control: 'object' },
22
+ onResizeStop: { action: 'onResizeStop' },
23
+ },
24
+ parameters: {
25
+ controls: { expanded: true },
26
+ docs: { source: { state: 'open' } },
27
+ },
28
+ };
29
+ export default meta;
30
+
31
+ const Template: ComponentStory< typeof ResizableBox > = ( {
32
+ onResizeStop,
33
+ ...props
34
+ } ) => {
35
+ const [ { height, width }, setAttributes ] = useState( {
36
+ height: 200,
37
+ width: 400,
38
+ } );
39
+
40
+ return (
41
+ <ResizableBox
42
+ { ...props }
43
+ size={ {
44
+ height,
45
+ width,
46
+ } }
47
+ onResizeStop={ ( event, direction, elt, delta ) => {
48
+ onResizeStop?.( event, direction, elt, delta );
49
+ setAttributes( {
50
+ height: height + delta.height,
51
+ width: width + delta.width,
52
+ } );
53
+ } }
54
+ />
55
+ );
56
+ };
57
+
58
+ export const Default = Template.bind( {} );
59
+ Default.args = {
60
+ children: (
61
+ <div
62
+ style={ {
63
+ background: '#eee',
64
+ display: 'flex',
65
+ height: '100%',
66
+ width: '100%',
67
+ alignItems: 'center',
68
+ justifyContent: 'center',
69
+ } }
70
+ >
71
+ Resize
72
+ </div>
73
+ ),
74
+ };
75
+
76
+ /**
77
+ * The `enable` prop can be used to disable resizing in specific directions.
78
+ */
79
+ export const DisabledDirections = Template.bind( {} );
80
+ DisabledDirections.args = {
81
+ ...Default.args,
82
+ enable: {
83
+ top: false,
84
+ right: true,
85
+ bottom: true,
86
+ left: false,
87
+ topRight: false,
88
+ bottomRight: true,
89
+ bottomLeft: false,
90
+ topLeft: false,
91
+ },
92
+ };
@@ -1,5 +1,7 @@
1
1
  # ResponsiveWrapper
2
2
 
3
+ A wrapper component that maintains its aspect ratio when resized.
4
+
3
5
  ## Usage
4
6
 
5
7
  ```jsx
@@ -14,3 +16,30 @@ const MyResponsiveWrapper = () => (
14
16
  </ResponsiveWrapper>
15
17
  );
16
18
  ```
19
+
20
+ ## Props
21
+
22
+ ### `children`: `React.ReactElement`
23
+
24
+ The element to wrap.
25
+
26
+ - Required: Yes
27
+
28
+ ### `isInline`: `boolean`
29
+
30
+ If true, the wrapper will be `span` instead of `div`.
31
+
32
+ - Required: No
33
+ - Default: `false`
34
+
35
+ ### `naturalHeight`: `number`
36
+
37
+ The intrinsic height of the element to wrap. Will be used to determine the aspect ratio.
38
+
39
+ - Required: Yes
40
+
41
+ ### `naturalWidth`: `number`
42
+
43
+ The intrinsic width of the element to wrap. Will be used to determine the aspect ratio.
44
+
45
+ - Required: Yes
@@ -9,12 +9,33 @@ import classnames from 'classnames';
9
9
  import { cloneElement, Children } from '@wordpress/element';
10
10
  import { useResizeObserver } from '@wordpress/compose';
11
11
 
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import type { ResponsiveWrapperProps } from './types';
16
+
17
+ /**
18
+ * A wrapper component that maintains its aspect ratio when resized.
19
+ *
20
+ * ```jsx
21
+ * import { ResponsiveWrapper } from '@wordpress/components';
22
+ *
23
+ * const MyResponsiveWrapper = () => (
24
+ * <ResponsiveWrapper naturalWidth={ 2000 } naturalHeight={ 680 }>
25
+ * <img
26
+ * src="https://s.w.org/style/images/about/WordPress-logotype-standard.png"
27
+ * alt="WordPress"
28
+ * />
29
+ * </ResponsiveWrapper>
30
+ * );
31
+ * ```
32
+ */
12
33
  function ResponsiveWrapper( {
13
34
  naturalWidth,
14
35
  naturalHeight,
15
36
  children,
16
37
  isInline = false,
17
- } ) {
38
+ }: ResponsiveWrapperProps ) {
18
39
  const [ containerResizeListener, { width: containerWidth } ] =
19
40
  useResizeObserver();
20
41
  if ( Children.count( children ) !== 1 ) {
@@ -22,7 +43,7 @@ function ResponsiveWrapper( {
22
43
  }
23
44
  const imageStyle = {
24
45
  paddingBottom:
25
- naturalWidth < containerWidth
46
+ naturalWidth < ( containerWidth ?? 0 )
26
47
  ? naturalHeight
27
48
  : ( naturalHeight / naturalWidth ) * 100 + '%',
28
49
  };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import ResponsiveWrapper from '..';
10
+
11
+ const meta: ComponentMeta< typeof ResponsiveWrapper > = {
12
+ component: ResponsiveWrapper,
13
+ title: 'Components/ResponsiveWrapper',
14
+ argTypes: {
15
+ children: { control: { type: null } },
16
+ },
17
+ parameters: {
18
+ controls: { expanded: true },
19
+ docs: { source: { state: 'open' } },
20
+ },
21
+ };
22
+ export default meta;
23
+
24
+ const Template: ComponentStory< typeof ResponsiveWrapper > = ( args ) => (
25
+ <ResponsiveWrapper { ...args } />
26
+ );
27
+
28
+ export const Default = Template.bind( {} );
29
+ Default.args = {
30
+ naturalWidth: 2000,
31
+ naturalHeight: 680,
32
+ children: (
33
+ <img
34
+ src="https://s.w.org/style/images/about/WordPress-logotype-standard.png"
35
+ alt="WordPress"
36
+ />
37
+ ),
38
+ };
@@ -0,0 +1,20 @@
1
+ export type ResponsiveWrapperProps = {
2
+ /**
3
+ * The intrinsic width of the element to wrap. Will be used to determine the aspect ratio.
4
+ */
5
+ naturalWidth: number;
6
+ /**
7
+ * The intrinsic height of the element to wrap. Will be used to determine the aspect ratio.
8
+ */
9
+ naturalHeight: number;
10
+ /**
11
+ * The element to wrap.
12
+ */
13
+ children: React.ReactElement;
14
+ /**
15
+ * If true, the wrapper will be `span` instead of `div`.
16
+ *
17
+ * @default false
18
+ */
19
+ isInline?: boolean;
20
+ };
@@ -1,4 +1,4 @@
1
- # Sandbox
1
+ # SandBox
2
2
 
3
3
  This component provides an isolated environment for arbitrary HTML via iframes.
4
4
 
@@ -8,6 +8,49 @@ This component provides an isolated environment for arbitrary HTML via iframes.
8
8
  import { SandBox } from '@wordpress/components';
9
9
 
10
10
  const MySandBox = () => (
11
- <SandBox html="<p>Content</p>" title="Sandbox" type="embed" />
11
+ <SandBox html="<p>Content</p>" title="SandBox" type="embed" />
12
12
  );
13
13
  ```
14
+
15
+ ## Props
16
+
17
+ ### `html`: `string`
18
+
19
+ The HTML to render in the body of the iframe document.
20
+
21
+ - Required: No
22
+ - Default: ""
23
+
24
+ ### `onFocus`: `React.DOMAttributes< HTMLIFrameElement >[ 'onFocus' ]`
25
+
26
+ The `onFocus` callback for the iframe.
27
+
28
+ - Required: No
29
+
30
+ ### `scripts`: `string[]`
31
+
32
+ An array of script URLs to inject as `<script>` tags into the bottom of the `<body>` of the iframe document.
33
+
34
+ - Required: No
35
+ - Default: []
36
+
37
+ ### `styles`: `string[]`
38
+
39
+ An array of CSS strings to inject into the `<head>` of the iframe document.
40
+
41
+ - Required: No
42
+ - Default: []
43
+
44
+ ### `title`: `string`
45
+
46
+ The `<title>` of the iframe document.
47
+
48
+ - Required: No
49
+ - Default: ""
50
+
51
+ ### `type`: `string`
52
+
53
+ The CSS class name to apply to the `<html>` and `<body>` elements of the iframe.
54
+
55
+ - Required: No
56
+ - Default: ""