@wordpress/components 19.12.0 → 19.13.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 (717) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/CONTRIBUTING.md +94 -12
  3. package/build/alignment-matrix-control/index.js +3 -3
  4. package/build/alignment-matrix-control/index.js.map +1 -1
  5. package/build/angle-picker-control/index.js +2 -2
  6. package/build/angle-picker-control/index.js.map +1 -1
  7. package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -1
  8. package/build/border-box-control/utils.js.map +1 -1
  9. package/build/border-control/border-control/hook.js.map +1 -1
  10. package/build/box-control/all-input-control.js +6 -10
  11. package/build/box-control/all-input-control.js.map +1 -1
  12. package/build/box-control/axial-input-controls.js.map +1 -1
  13. package/build/box-control/index.js +3 -7
  14. package/build/box-control/index.js.map +1 -1
  15. package/build/box-control/input-controls.js +6 -10
  16. package/build/box-control/input-controls.js.map +1 -1
  17. package/build/box-control/unit-control.js +4 -4
  18. package/build/box-control/unit-control.js.map +1 -1
  19. package/build/button/index.native.js +1 -3
  20. package/build/button/index.native.js.map +1 -1
  21. package/build/checkbox-control/index.js.map +1 -1
  22. package/build/color-picker/index.native.js.map +1 -1
  23. package/build/combobox-control/index.js +4 -2
  24. package/build/combobox-control/index.js.map +1 -1
  25. package/build/confirm-dialog/component.js.map +1 -1
  26. package/build/custom-gradient-bar/constants.js +1 -3
  27. package/build/custom-gradient-bar/constants.js.map +1 -1
  28. package/build/custom-gradient-bar/control-points.js +15 -8
  29. package/build/custom-gradient-bar/control-points.js.map +1 -1
  30. package/build/custom-gradient-bar/index.js +5 -5
  31. package/build/custom-gradient-bar/index.js.map +1 -1
  32. package/build/custom-gradient-bar/utils.js +5 -7
  33. package/build/custom-gradient-bar/utils.js.map +1 -1
  34. package/build/custom-gradient-picker/utils.js.map +1 -1
  35. package/build/custom-select-control/index.js.map +1 -1
  36. package/build/date-time/date/index.js +4 -4
  37. package/build/date-time/date/index.js.map +1 -1
  38. package/build/date-time/date-time/index.js +3 -3
  39. package/build/date-time/date-time/index.js.map +1 -1
  40. package/build/dimension-control/index.js +1 -3
  41. package/build/dimension-control/index.js.map +1 -1
  42. package/build/divider/styles.js +5 -5
  43. package/build/divider/styles.js.map +1 -1
  44. package/build/draggable/index.js.map +1 -1
  45. package/build/draggable/index.native.js +6 -1
  46. package/build/draggable/index.native.js.map +1 -1
  47. package/build/drop-zone/provider.js.map +1 -1
  48. package/build/dropdown/index.js +2 -2
  49. package/build/dropdown/index.js.map +1 -1
  50. package/build/dropdown-menu/index.js +13 -2
  51. package/build/dropdown-menu/index.js.map +1 -1
  52. package/build/dropdown-menu/index.native.js +13 -2
  53. package/build/dropdown-menu/index.native.js.map +1 -1
  54. package/build/external-link/index.js +20 -8
  55. package/build/external-link/index.js.map +1 -1
  56. package/build/external-link/styles/external-link-styles.js +3 -3
  57. package/build/external-link/styles/external-link-styles.js.map +1 -1
  58. package/build/external-link/types.js +6 -0
  59. package/build/external-link/types.js.map +1 -0
  60. package/build/flex/flex/hook.js +9 -5
  61. package/build/flex/flex/hook.js.map +1 -1
  62. package/build/focal-point-picker/controls.js +3 -7
  63. package/build/focal-point-picker/controls.js.map +1 -1
  64. package/build/focal-point-picker/index.js.map +1 -1
  65. package/build/focal-point-picker/media.js +4 -8
  66. package/build/focal-point-picker/media.js.map +1 -1
  67. package/build/font-size-picker/index.js +1 -1
  68. package/build/font-size-picker/index.js.map +1 -1
  69. package/build/form-toggle/index.js +6 -4
  70. package/build/form-toggle/index.js.map +1 -1
  71. package/build/form-token-field/index.js +328 -359
  72. package/build/form-token-field/index.js.map +1 -1
  73. package/build/form-token-field/suggestions-list.js +26 -20
  74. package/build/form-token-field/suggestions-list.js.map +1 -1
  75. package/build/form-token-field/token-input.js +39 -53
  76. package/build/form-token-field/token-input.js.map +1 -1
  77. package/build/form-token-field/token.js +3 -3
  78. package/build/form-token-field/token.js.map +1 -1
  79. package/build/form-token-field/types.js +6 -0
  80. package/build/form-token-field/types.js.map +1 -0
  81. package/build/gradient-picker/index.js.map +1 -1
  82. package/build/heading/hook.js.map +1 -1
  83. package/build/higher-order/navigate-regions/index.js.map +1 -1
  84. package/build/higher-order/with-focus-return/index.js.map +1 -1
  85. package/build/higher-order/with-spoken-messages/index.js.map +1 -1
  86. package/build/icon/index.js.map +1 -1
  87. package/build/input-control/index.js +5 -5
  88. package/build/input-control/index.js.map +1 -1
  89. package/build/input-control/input-field.js +10 -10
  90. package/build/input-control/input-field.js.map +1 -1
  91. package/build/input-control/reducer/reducer.js.map +1 -1
  92. package/build/input-control/utils.js +1 -1
  93. package/build/input-control/utils.js.map +1 -1
  94. package/build/menu-items-choice/index.js +3 -7
  95. package/build/menu-items-choice/index.js.map +1 -1
  96. package/build/mobile/bottom-sheet/bottom-sheet-context.native.js.map +1 -1
  97. package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
  98. package/build/mobile/bottom-sheet/cycle-picker-cell.native.js +1 -7
  99. package/build/mobile/bottom-sheet/cycle-picker-cell.native.js.map +1 -1
  100. package/build/mobile/bottom-sheet/index.native.js.map +1 -1
  101. package/build/mobile/bottom-sheet/picker-cell.native.js.map +1 -1
  102. package/build/mobile/bottom-sheet/stepper-cell/index.native.js.map +1 -1
  103. package/build/mobile/color-settings/index.native.js.map +1 -1
  104. package/build/mobile/global-styles-context/index.native.js.map +1 -1
  105. package/build/mobile/gradient/index.native.js.map +1 -1
  106. package/build/mobile/html-text-input/index.native.js.map +1 -1
  107. package/build/mobile/inserter-button/index.native.js.map +1 -1
  108. package/build/mobile/link-settings/image-link-destinations-screen.native.js.map +1 -1
  109. package/build/mobile/media-edit/index.native.js.map +1 -1
  110. package/build/mobile/segmented-control/index.native.js +1 -1
  111. package/build/mobile/segmented-control/index.native.js.map +1 -1
  112. package/build/modal/index.js +1 -1
  113. package/build/modal/index.js.map +1 -1
  114. package/build/navigable-container/container.js +4 -2
  115. package/build/navigable-container/container.js.map +1 -1
  116. package/build/navigation/context.js +12 -16
  117. package/build/navigation/context.js.map +1 -1
  118. package/build/navigation/index.js +3 -3
  119. package/build/navigation/index.js.map +1 -1
  120. package/build/navigation/item/index.js +3 -3
  121. package/build/navigation/item/index.js.map +1 -1
  122. package/build/navigator/navigator-back-button/hook.js.map +1 -1
  123. package/build/navigator/navigator-button/hook.js.map +1 -1
  124. package/build/navigator/navigator-provider/component.js +1 -1
  125. package/build/navigator/navigator-provider/component.js.map +1 -1
  126. package/build/navigator/navigator-screen/component.js +1 -1
  127. package/build/navigator/navigator-screen/component.js.map +1 -1
  128. package/build/notice/index.js +5 -5
  129. package/build/notice/index.js.map +1 -1
  130. package/build/notice/list.js +4 -2
  131. package/build/notice/list.js.map +1 -1
  132. package/build/panel/body.js +3 -3
  133. package/build/panel/body.js.map +1 -1
  134. package/build/placeholder/index.js +26 -12
  135. package/build/placeholder/index.js.map +1 -1
  136. package/build/radio-control/index.js +43 -7
  137. package/build/radio-control/index.js.map +1 -1
  138. package/build/radio-control/types.js +6 -0
  139. package/build/radio-control/types.js.map +1 -0
  140. package/build/range-control/index.js +8 -6
  141. package/build/range-control/index.js.map +1 -1
  142. package/build/range-control/input-range.js +6 -10
  143. package/build/range-control/input-range.js.map +1 -1
  144. package/build/range-control/utils.js +7 -5
  145. package/build/range-control/utils.js.map +1 -1
  146. package/build/resizable-box/resize-tooltip/index.js +3 -3
  147. package/build/resizable-box/resize-tooltip/index.js.map +1 -1
  148. package/build/resizable-box/resize-tooltip/utils.js +4 -7
  149. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  150. package/build/responsive-wrapper/index.js.map +1 -1
  151. package/build/select-control/index.js +5 -3
  152. package/build/select-control/index.js.map +1 -1
  153. package/build/slot-fill/fill.js +1 -7
  154. package/build/slot-fill/fill.js.map +1 -1
  155. package/build/slot-fill/slot.js +14 -3
  156. package/build/slot-fill/slot.js.map +1 -1
  157. package/build/snackbar/index.js +7 -7
  158. package/build/snackbar/index.js.map +1 -1
  159. package/build/snackbar/list.js +3 -1
  160. package/build/snackbar/list.js.map +1 -1
  161. package/build/tab-panel/index.js +3 -1
  162. package/build/tab-panel/index.js.map +1 -1
  163. package/build/text/hook.js +4 -4
  164. package/build/text/hook.js.map +1 -1
  165. package/build/text/utils.js.map +1 -1
  166. package/build/toggle-control/index.js +1 -3
  167. package/build/toggle-control/index.js.map +1 -1
  168. package/build/toggle-control/index.native.js +1 -7
  169. package/build/toggle-control/index.native.js.map +1 -1
  170. package/build/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -1
  171. package/build/toolbar/index.js.map +1 -1
  172. package/build/tools-panel/tools-panel/hook.js.map +1 -1
  173. package/build/tools-panel/tools-panel-header/hook.js.map +1 -1
  174. package/build/tooltip/index.js +2 -1
  175. package/build/tooltip/index.js.map +1 -1
  176. package/build/tree-grid/roving-tab-index-item.js.map +1 -1
  177. package/build/tree-select/index.js +57 -4
  178. package/build/tree-select/index.js.map +1 -1
  179. package/build/tree-select/types.js +6 -0
  180. package/build/tree-select/types.js.map +1 -0
  181. package/build/ui/form-group/form-group-content.js.map +1 -1
  182. package/build/unit-control/index.js.map +1 -1
  183. package/build/utils/unit-values.js.map +1 -1
  184. package/build/utils/values.js.map +1 -1
  185. package/build/z-stack/component.js +22 -3
  186. package/build/z-stack/component.js.map +1 -1
  187. package/build/z-stack/types.js +6 -0
  188. package/build/z-stack/types.js.map +1 -0
  189. package/build-module/alignment-matrix-control/index.js +2 -1
  190. package/build-module/alignment-matrix-control/index.js.map +1 -1
  191. package/build-module/angle-picker-control/index.js +1 -1
  192. package/build-module/angle-picker-control/index.js.map +1 -1
  193. package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -1
  194. package/build-module/border-box-control/utils.js.map +1 -1
  195. package/build-module/border-control/border-control/hook.js.map +1 -1
  196. package/build-module/box-control/all-input-control.js +3 -5
  197. package/build-module/box-control/all-input-control.js.map +1 -1
  198. package/build-module/box-control/axial-input-controls.js.map +1 -1
  199. package/build-module/box-control/index.js +2 -5
  200. package/build-module/box-control/index.js.map +1 -1
  201. package/build-module/box-control/input-controls.js +3 -5
  202. package/build-module/box-control/input-controls.js.map +1 -1
  203. package/build-module/box-control/unit-control.js +3 -1
  204. package/build-module/box-control/unit-control.js.map +1 -1
  205. package/build-module/button/index.native.js +1 -2
  206. package/build-module/button/index.native.js.map +1 -1
  207. package/build-module/checkbox-control/index.js.map +1 -1
  208. package/build-module/color-picker/index.native.js.map +1 -1
  209. package/build-module/combobox-control/index.js +5 -2
  210. package/build-module/combobox-control/index.js.map +1 -1
  211. package/build-module/confirm-dialog/component.js.map +1 -1
  212. package/build-module/custom-gradient-bar/constants.js +0 -1
  213. package/build-module/custom-gradient-bar/constants.js.map +1 -1
  214. package/build-module/custom-gradient-bar/control-points.js +16 -9
  215. package/build-module/custom-gradient-bar/control-points.js.map +1 -1
  216. package/build-module/custom-gradient-bar/index.js +6 -6
  217. package/build-module/custom-gradient-bar/index.js.map +1 -1
  218. package/build-module/custom-gradient-bar/utils.js +6 -8
  219. package/build-module/custom-gradient-bar/utils.js.map +1 -1
  220. package/build-module/custom-gradient-picker/utils.js.map +1 -1
  221. package/build-module/custom-select-control/index.js.map +1 -1
  222. package/build-module/date-time/date/index.js +4 -3
  223. package/build-module/date-time/date/index.js.map +1 -1
  224. package/build-module/date-time/date-time/index.js +2 -1
  225. package/build-module/date-time/date-time/index.js.map +1 -1
  226. package/build-module/dimension-control/index.js +1 -2
  227. package/build-module/dimension-control/index.js.map +1 -1
  228. package/build-module/divider/styles.js +5 -5
  229. package/build-module/divider/styles.js.map +1 -1
  230. package/build-module/draggable/index.js.map +1 -1
  231. package/build-module/draggable/index.native.js +6 -1
  232. package/build-module/draggable/index.native.js.map +1 -1
  233. package/build-module/drop-zone/provider.js.map +1 -1
  234. package/build-module/dropdown/index.js +2 -2
  235. package/build-module/dropdown/index.js.map +1 -1
  236. package/build-module/dropdown-menu/index.js +12 -1
  237. package/build-module/dropdown-menu/index.js.map +1 -1
  238. package/build-module/dropdown-menu/index.native.js +12 -1
  239. package/build-module/dropdown-menu/index.native.js.map +1 -1
  240. package/build-module/external-link/index.js +22 -7
  241. package/build-module/external-link/index.js.map +1 -1
  242. package/build-module/external-link/styles/external-link-styles.js +3 -3
  243. package/build-module/external-link/styles/external-link-styles.js.map +1 -1
  244. package/build-module/external-link/types.js +2 -0
  245. package/build-module/external-link/types.js.map +1 -0
  246. package/build-module/flex/flex/hook.js +7 -5
  247. package/build-module/flex/flex/hook.js.map +1 -1
  248. package/build-module/focal-point-picker/controls.js +3 -5
  249. package/build-module/focal-point-picker/controls.js.map +1 -1
  250. package/build-module/focal-point-picker/index.js.map +1 -1
  251. package/build-module/focal-point-picker/media.js +3 -5
  252. package/build-module/focal-point-picker/media.js.map +1 -1
  253. package/build-module/font-size-picker/index.js +1 -1
  254. package/build-module/font-size-picker/index.js.map +1 -1
  255. package/build-module/form-toggle/index.js +1 -1
  256. package/build-module/form-toggle/index.js.map +1 -1
  257. package/build-module/form-token-field/index.js +329 -361
  258. package/build-module/form-token-field/index.js.map +1 -1
  259. package/build-module/form-token-field/suggestions-list.js +32 -23
  260. package/build-module/form-token-field/suggestions-list.js.map +1 -1
  261. package/build-module/form-token-field/token-input.js +43 -58
  262. package/build-module/form-token-field/token-input.js.map +1 -1
  263. package/build-module/form-token-field/token.js +3 -1
  264. package/build-module/form-token-field/token.js.map +1 -1
  265. package/build-module/form-token-field/types.js +2 -0
  266. package/build-module/form-token-field/types.js.map +1 -0
  267. package/build-module/gradient-picker/index.js.map +1 -1
  268. package/build-module/heading/hook.js.map +1 -1
  269. package/build-module/higher-order/navigate-regions/index.js.map +1 -1
  270. package/build-module/higher-order/with-focus-return/index.js.map +1 -1
  271. package/build-module/higher-order/with-spoken-messages/index.js.map +1 -1
  272. package/build-module/icon/index.js.map +1 -1
  273. package/build-module/input-control/index.js +2 -1
  274. package/build-module/input-control/index.js.map +1 -1
  275. package/build-module/input-control/input-field.js +2 -1
  276. package/build-module/input-control/input-field.js.map +1 -1
  277. package/build-module/input-control/reducer/reducer.js.map +1 -1
  278. package/build-module/input-control/utils.js +1 -1
  279. package/build-module/input-control/utils.js.map +1 -1
  280. package/build-module/menu-items-choice/index.js +3 -5
  281. package/build-module/menu-items-choice/index.js.map +1 -1
  282. package/build-module/mobile/bottom-sheet/bottom-sheet-context.native.js.map +1 -1
  283. package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
  284. package/build-module/mobile/bottom-sheet/cycle-picker-cell.native.js +1 -6
  285. package/build-module/mobile/bottom-sheet/cycle-picker-cell.native.js.map +1 -1
  286. package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
  287. package/build-module/mobile/bottom-sheet/picker-cell.native.js.map +1 -1
  288. package/build-module/mobile/bottom-sheet/stepper-cell/index.native.js.map +1 -1
  289. package/build-module/mobile/color-settings/index.native.js.map +1 -1
  290. package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
  291. package/build-module/mobile/gradient/index.native.js.map +1 -1
  292. package/build-module/mobile/html-text-input/index.native.js.map +1 -1
  293. package/build-module/mobile/inserter-button/index.native.js.map +1 -1
  294. package/build-module/mobile/link-settings/image-link-destinations-screen.native.js.map +1 -1
  295. package/build-module/mobile/media-edit/index.native.js.map +1 -1
  296. package/build-module/mobile/segmented-control/index.native.js +2 -2
  297. package/build-module/mobile/segmented-control/index.native.js.map +1 -1
  298. package/build-module/modal/index.js +1 -1
  299. package/build-module/modal/index.js.map +1 -1
  300. package/build-module/navigable-container/container.js +5 -2
  301. package/build-module/navigable-container/container.js.map +1 -1
  302. package/build-module/navigation/context.js +3 -5
  303. package/build-module/navigation/context.js.map +1 -1
  304. package/build-module/navigation/index.js +3 -1
  305. package/build-module/navigation/index.js.map +1 -1
  306. package/build-module/navigation/item/index.js +3 -1
  307. package/build-module/navigation/item/index.js.map +1 -1
  308. package/build-module/navigator/navigator-back-button/hook.js.map +1 -1
  309. package/build-module/navigator/navigator-button/hook.js.map +1 -1
  310. package/build-module/navigator/navigator-provider/component.js +1 -1
  311. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  312. package/build-module/navigator/navigator-screen/component.js +1 -1
  313. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  314. package/build-module/notice/index.js +2 -1
  315. package/build-module/notice/index.js.map +1 -1
  316. package/build-module/notice/list.js +4 -1
  317. package/build-module/notice/list.js.map +1 -1
  318. package/build-module/panel/body.js +3 -1
  319. package/build-module/panel/body.js.map +1 -1
  320. package/build-module/placeholder/index.js +24 -11
  321. package/build-module/placeholder/index.js.map +1 -1
  322. package/build-module/radio-control/index.js +40 -7
  323. package/build-module/radio-control/index.js.map +1 -1
  324. package/build-module/radio-control/types.js +2 -0
  325. package/build-module/radio-control/types.js.map +1 -0
  326. package/build-module/range-control/index.js +4 -2
  327. package/build-module/range-control/index.js.map +1 -1
  328. package/build-module/range-control/input-range.js +2 -5
  329. package/build-module/range-control/input-range.js.map +1 -1
  330. package/build-module/range-control/utils.js +4 -1
  331. package/build-module/range-control/utils.js.map +1 -1
  332. package/build-module/resizable-box/resize-tooltip/index.js +2 -1
  333. package/build-module/resizable-box/resize-tooltip/index.js.map +1 -1
  334. package/build-module/resizable-box/resize-tooltip/utils.js +3 -5
  335. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  336. package/build-module/responsive-wrapper/index.js.map +1 -1
  337. package/build-module/select-control/index.js +3 -1
  338. package/build-module/select-control/index.js.map +1 -1
  339. package/build-module/slot-fill/fill.js +1 -6
  340. package/build-module/slot-fill/fill.js.map +1 -1
  341. package/build-module/slot-fill/slot.js +12 -2
  342. package/build-module/slot-fill/slot.js.map +1 -1
  343. package/build-module/snackbar/index.js +3 -1
  344. package/build-module/snackbar/index.js.map +1 -1
  345. package/build-module/snackbar/list.js +4 -1
  346. package/build-module/snackbar/list.js.map +1 -1
  347. package/build-module/tab-panel/index.js +3 -1
  348. package/build-module/tab-panel/index.js.map +1 -1
  349. package/build-module/text/hook.js +4 -4
  350. package/build-module/text/hook.js.map +1 -1
  351. package/build-module/text/utils.js.map +1 -1
  352. package/build-module/toggle-control/index.js +1 -2
  353. package/build-module/toggle-control/index.js.map +1 -1
  354. package/build-module/toggle-control/index.native.js +1 -6
  355. package/build-module/toggle-control/index.native.js.map +1 -1
  356. package/build-module/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.js.map +1 -1
  357. package/build-module/toolbar/index.js.map +1 -1
  358. package/build-module/tools-panel/tools-panel/hook.js.map +1 -1
  359. package/build-module/tools-panel/tools-panel-header/hook.js.map +1 -1
  360. package/build-module/tooltip/index.js +2 -1
  361. package/build-module/tooltip/index.js.map +1 -1
  362. package/build-module/tree-grid/roving-tab-index-item.js.map +1 -1
  363. package/build-module/tree-select/index.js +53 -3
  364. package/build-module/tree-select/index.js.map +1 -1
  365. package/build-module/tree-select/types.js +2 -0
  366. package/build-module/tree-select/types.js.map +1 -0
  367. package/build-module/ui/form-group/form-group-content.js.map +1 -1
  368. package/build-module/unit-control/index.js.map +1 -1
  369. package/build-module/utils/unit-values.js.map +1 -1
  370. package/build-module/utils/values.js.map +1 -1
  371. package/build-module/z-stack/component.js +21 -2
  372. package/build-module/z-stack/component.js.map +1 -1
  373. package/build-module/z-stack/types.js +2 -0
  374. package/build-module/z-stack/types.js.map +1 -0
  375. package/build-style/style-rtl.css +32 -3
  376. package/build-style/style.css +32 -4
  377. package/build-types/base-control/stories/index.d.ts.map +1 -1
  378. package/build-types/base-field/hook.d.ts +0 -1
  379. package/build-types/base-field/hook.d.ts.map +1 -1
  380. package/build-types/border-box-control/border-box-control/hook.d.ts +0 -1
  381. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  382. package/build-types/border-box-control/border-box-control-linked-button/component.d.ts.map +1 -1
  383. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +0 -1
  384. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts.map +1 -1
  385. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +0 -1
  386. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
  387. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +0 -1
  388. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts.map +1 -1
  389. package/build-types/border-box-control/utils.d.ts.map +1 -1
  390. package/build-types/border-control/border-control/hook.d.ts +0 -1
  391. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  392. package/build-types/border-control/border-control-dropdown/hook.d.ts +0 -1
  393. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  394. package/build-types/border-control/border-control-style-picker/hook.d.ts +0 -1
  395. package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -1
  396. package/build-types/button-group/index.d.ts +1 -1
  397. package/build-types/button-group/index.d.ts.map +1 -1
  398. package/build-types/card/card/hook.d.ts +0 -1
  399. package/build-types/card/card/hook.d.ts.map +1 -1
  400. package/build-types/card/card-body/hook.d.ts +0 -1
  401. package/build-types/card/card-body/hook.d.ts.map +1 -1
  402. package/build-types/card/card-divider/hook.d.ts +0 -1
  403. package/build-types/card/card-divider/hook.d.ts.map +1 -1
  404. package/build-types/card/card-footer/hook.d.ts +0 -1
  405. package/build-types/card/card-footer/hook.d.ts.map +1 -1
  406. package/build-types/card/card-header/hook.d.ts +0 -1
  407. package/build-types/card/card-header/hook.d.ts.map +1 -1
  408. package/build-types/card/card-media/hook.d.ts +0 -1
  409. package/build-types/card/card-media/hook.d.ts.map +1 -1
  410. package/build-types/checkbox-control/index.d.ts.map +1 -1
  411. package/build-types/checkbox-control/stories/index.d.ts.map +1 -1
  412. package/build-types/color-picker/styles.d.ts +7 -7
  413. package/build-types/confirm-dialog/component.d.ts.map +1 -1
  414. package/build-types/date-time/date/index.d.ts.map +1 -1
  415. package/build-types/date-time/date-time/index.d.ts.map +1 -1
  416. package/build-types/date-time/stories/date-time.d.ts.map +1 -1
  417. package/build-types/date-time/stories/date.d.ts.map +1 -1
  418. package/build-types/date-time/time/styles.d.ts +1 -1
  419. package/build-types/divider/styles.d.ts.map +1 -1
  420. package/build-types/dropdown-menu/index.d.ts.map +1 -1
  421. package/build-types/elevation/hook.d.ts +0 -1
  422. package/build-types/elevation/hook.d.ts.map +1 -1
  423. package/build-types/external-link/index.d.ts +17 -0
  424. package/build-types/external-link/index.d.ts.map +1 -0
  425. package/build-types/external-link/stories/index.d.ts +12 -0
  426. package/build-types/external-link/stories/index.d.ts.map +1 -0
  427. package/build-types/external-link/styles/external-link-styles.d.ts +10 -0
  428. package/build-types/external-link/styles/external-link-styles.d.ts.map +1 -0
  429. package/build-types/external-link/types.d.ts +15 -0
  430. package/build-types/external-link/types.d.ts.map +1 -0
  431. package/build-types/flex/flex/hook.d.ts +0 -1
  432. package/build-types/flex/flex/hook.d.ts.map +1 -1
  433. package/build-types/flex/flex-block/hook.d.ts +0 -1
  434. package/build-types/flex/flex-block/hook.d.ts.map +1 -1
  435. package/build-types/flex/flex-item/hook.d.ts +0 -1
  436. package/build-types/flex/flex-item/hook.d.ts.map +1 -1
  437. package/build-types/form-token-field/index.d.ts +15 -0
  438. package/build-types/form-token-field/index.d.ts.map +1 -0
  439. package/build-types/form-token-field/stories/index.d.ts +13 -0
  440. package/build-types/form-token-field/stories/index.d.ts.map +1 -0
  441. package/build-types/form-token-field/suggestions-list.d.ts +10 -0
  442. package/build-types/form-token-field/suggestions-list.d.ts.map +1 -0
  443. package/build-types/form-token-field/test/lib/fixtures.d.ts +26 -0
  444. package/build-types/form-token-field/test/lib/fixtures.d.ts.map +1 -0
  445. package/build-types/form-token-field/test/lib/token-field-wrapper.d.ts +18 -0
  446. package/build-types/form-token-field/test/lib/token-field-wrapper.d.ts.map +1 -0
  447. package/build-types/form-token-field/token-input.d.ts +12 -0
  448. package/build-types/form-token-field/token-input.d.ts.map +1 -0
  449. package/build-types/form-token-field/token.d.ts +4 -0
  450. package/build-types/form-token-field/token.d.ts.map +1 -0
  451. package/build-types/form-token-field/types.d.ts +176 -0
  452. package/build-types/form-token-field/types.d.ts.map +1 -0
  453. package/build-types/grid/hook.d.ts +0 -1
  454. package/build-types/grid/hook.d.ts.map +1 -1
  455. package/build-types/h-stack/hook.d.ts +0 -1
  456. package/build-types/h-stack/hook.d.ts.map +1 -1
  457. package/build-types/heading/hook.d.ts +0 -1
  458. package/build-types/heading/hook.d.ts.map +1 -1
  459. package/build-types/higher-order/with-focus-outside/index.d.ts +1 -1
  460. package/build-types/input-control/index.d.ts +1 -1
  461. package/build-types/input-control/index.d.ts.map +1 -1
  462. package/build-types/input-control/input-field.d.ts +1 -1
  463. package/build-types/input-control/input-field.d.ts.map +1 -1
  464. package/build-types/input-control/reducer/reducer.d.ts.map +1 -1
  465. package/build-types/input-control/stories/index.d.ts +5 -5
  466. package/build-types/input-control/stories/index.d.ts.map +1 -1
  467. package/build-types/item-group/item/hook.d.ts +0 -1
  468. package/build-types/item-group/item/hook.d.ts.map +1 -1
  469. package/build-types/item-group/item-group/hook.d.ts +0 -1
  470. package/build-types/item-group/item-group/hook.d.ts.map +1 -1
  471. package/build-types/navigator/navigator-back-button/hook.d.ts +0 -1
  472. package/build-types/navigator/navigator-back-button/hook.d.ts.map +1 -1
  473. package/build-types/navigator/navigator-button/hook.d.ts +0 -1
  474. package/build-types/navigator/navigator-button/hook.d.ts.map +1 -1
  475. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  476. package/build-types/number-control/styles/number-control-styles.d.ts +1 -1
  477. package/build-types/radio-control/index.d.ts +31 -0
  478. package/build-types/radio-control/index.d.ts.map +1 -0
  479. package/build-types/radio-control/stories/index.d.ts +12 -0
  480. package/build-types/radio-control/stories/index.d.ts.map +1 -0
  481. package/build-types/radio-control/types.d.ts +29 -0
  482. package/build-types/radio-control/types.d.ts.map +1 -0
  483. package/build-types/range-control/index.d.ts +5 -5
  484. package/build-types/range-control/index.d.ts.map +1 -1
  485. package/build-types/range-control/input-range.d.ts +4 -4
  486. package/build-types/range-control/input-range.d.ts.map +1 -1
  487. package/build-types/range-control/utils.d.ts.map +1 -1
  488. package/build-types/resizable-box/resize-tooltip/index.d.ts.map +1 -1
  489. package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
  490. package/build-types/scrollable/hook.d.ts +0 -1
  491. package/build-types/scrollable/hook.d.ts.map +1 -1
  492. package/build-types/select-control/index.d.ts +1 -1
  493. package/build-types/select-control/index.d.ts.map +1 -1
  494. package/build-types/select-control/stories/index.d.ts +3 -3
  495. package/build-types/select-control/stories/index.d.ts.map +1 -1
  496. package/build-types/slot-fill/fill.d.ts.map +1 -1
  497. package/build-types/slot-fill/slot.d.ts.map +1 -1
  498. package/build-types/spacer/hook.d.ts +0 -1
  499. package/build-types/spacer/hook.d.ts.map +1 -1
  500. package/build-types/surface/hook.d.ts +0 -1
  501. package/build-types/surface/hook.d.ts.map +1 -1
  502. package/build-types/text/hook.d.ts +0 -1
  503. package/build-types/text/hook.d.ts.map +1 -1
  504. package/build-types/text/utils.d.ts.map +1 -1
  505. package/build-types/text-control/index.d.ts +1 -1
  506. package/build-types/text-control/index.d.ts.map +1 -1
  507. package/build-types/text-control/stories/index.d.ts.map +1 -1
  508. package/build-types/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.d.ts.map +1 -1
  509. package/build-types/tools-panel/tools-panel/hook.d.ts +0 -1
  510. package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
  511. package/build-types/tools-panel/tools-panel-header/hook.d.ts +0 -1
  512. package/build-types/tools-panel/tools-panel-header/hook.d.ts.map +1 -1
  513. package/build-types/tools-panel/tools-panel-item/hook.d.ts +0 -1
  514. package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
  515. package/build-types/tooltip/index.d.ts.map +1 -1
  516. package/build-types/tree-select/index.d.ts +53 -0
  517. package/build-types/tree-select/index.d.ts.map +1 -0
  518. package/build-types/tree-select/stories/index.d.ts +12 -0
  519. package/build-types/tree-select/stories/index.d.ts.map +1 -0
  520. package/build-types/tree-select/types.d.ts +30 -0
  521. package/build-types/tree-select/types.d.ts.map +1 -0
  522. package/build-types/truncate/hook.d.ts +0 -1
  523. package/build-types/truncate/hook.d.ts.map +1 -1
  524. package/build-types/ui/context/wordpress-component.d.ts.map +1 -1
  525. package/build-types/ui/control-group/hook.d.ts +0 -1
  526. package/build-types/ui/control-group/hook.d.ts.map +1 -1
  527. package/build-types/ui/control-label/hook.d.ts +0 -1
  528. package/build-types/ui/control-label/hook.d.ts.map +1 -1
  529. package/build-types/ui/form-group/use-form-group.d.ts +0 -2
  530. package/build-types/ui/form-group/use-form-group.d.ts.map +1 -1
  531. package/build-types/unit-control/index.d.ts +1 -1
  532. package/build-types/unit-control/index.d.ts.map +1 -1
  533. package/build-types/unit-control/stories/index.d.ts.map +1 -1
  534. package/build-types/utils/unit-values.d.ts.map +1 -1
  535. package/build-types/utils/values.d.ts.map +1 -1
  536. package/build-types/v-stack/hook.d.ts +0 -1
  537. package/build-types/v-stack/hook.d.ts.map +1 -1
  538. package/build-types/z-stack/component.d.ts +18 -28
  539. package/build-types/z-stack/component.d.ts.map +1 -1
  540. package/build-types/z-stack/stories/index.d.ts +6 -0
  541. package/build-types/z-stack/stories/index.d.ts.map +1 -0
  542. package/build-types/z-stack/types.d.ts +33 -0
  543. package/build-types/z-stack/types.d.ts.map +1 -0
  544. package/package.json +17 -17
  545. package/src/alignment-matrix-control/index.js +2 -1
  546. package/src/angle-picker-control/index.js +1 -1
  547. package/src/base-control/stories/index.tsx +2 -3
  548. package/src/border-box-control/border-box-control-linked-button/component.tsx +2 -5
  549. package/src/border-box-control/utils.ts +5 -2
  550. package/src/border-control/border-control/hook.ts +2 -3
  551. package/src/box-control/all-input-control.js +2 -4
  552. package/src/box-control/axial-input-controls.js +4 -6
  553. package/src/box-control/index.js +2 -5
  554. package/src/box-control/input-controls.js +33 -36
  555. package/src/box-control/unit-control.js +2 -1
  556. package/src/button/index.native.js +1 -2
  557. package/src/card/stories/index.js +10 -5
  558. package/src/checkbox-control/index.tsx +2 -3
  559. package/src/checkbox-control/stories/index.tsx +2 -3
  560. package/src/checkbox-control/test/index.tsx +2 -1
  561. package/src/color-picker/index.native.js +7 -4
  562. package/src/combobox-control/index.js +4 -2
  563. package/src/confirm-dialog/component.tsx +7 -8
  564. package/src/custom-gradient-bar/constants.js +2 -2
  565. package/src/custom-gradient-bar/control-points.js +20 -16
  566. package/src/custom-gradient-bar/index.js +11 -11
  567. package/src/custom-gradient-bar/test/utils.js +79 -0
  568. package/src/custom-gradient-bar/utils.js +6 -18
  569. package/src/custom-gradient-picker/style.scss +1 -3
  570. package/src/custom-gradient-picker/utils.js +4 -3
  571. package/src/custom-select-control/index.js +2 -1
  572. package/src/custom-select-control/stories/index.js +1 -2
  573. package/src/date-time/date/index.tsx +2 -2
  574. package/src/date-time/date/style.scss +10 -0
  575. package/src/date-time/date/test/index.tsx +1 -1
  576. package/src/date-time/date-time/index.tsx +6 -8
  577. package/src/date-time/stories/date-time.tsx +4 -6
  578. package/src/date-time/stories/date.tsx +2 -3
  579. package/src/date-time/time/test/index.tsx +12 -12
  580. package/src/dimension-control/index.js +1 -2
  581. package/src/divider/styles.ts +2 -3
  582. package/src/draggable/index.js +3 -3
  583. package/src/draggable/index.native.js +12 -4
  584. package/src/drop-zone/provider.js +1 -2
  585. package/src/dropdown/index.js +2 -2
  586. package/src/dropdown-menu/index.js +11 -1
  587. package/src/dropdown-menu/index.native.js +11 -1
  588. package/src/external-link/README.md +18 -0
  589. package/src/external-link/{index.js → index.tsx} +26 -6
  590. package/src/external-link/stories/index.tsx +36 -0
  591. package/src/external-link/styles/{external-link-styles.js → external-link-styles.ts} +0 -0
  592. package/src/external-link/types.ts +15 -0
  593. package/src/flex/flex/hook.js +4 -1
  594. package/src/focal-point-picker/controls.js +1 -5
  595. package/src/focal-point-picker/index.js +2 -8
  596. package/src/focal-point-picker/media.js +2 -5
  597. package/src/font-size-picker/index.js +3 -1
  598. package/src/form-toggle/index.js +2 -1
  599. package/src/form-toggle/test/index.js +1 -2
  600. package/src/form-token-field/index.tsx +694 -0
  601. package/src/form-token-field/stories/index.tsx +103 -0
  602. package/src/form-token-field/style.scss +2 -1
  603. package/src/form-token-field/{suggestions-list.js → suggestions-list.tsx} +45 -29
  604. package/src/form-token-field/test/index.js +64 -31
  605. package/src/form-token-field/test/lib/{token-field-wrapper.js → token-field-wrapper.tsx} +24 -9
  606. package/src/form-token-field/token-input.tsx +76 -0
  607. package/src/form-token-field/{token.js → token.tsx} +4 -2
  608. package/src/form-token-field/types.ts +178 -0
  609. package/src/gradient-picker/index.js +4 -3
  610. package/src/heading/hook.ts +5 -4
  611. package/src/higher-order/navigate-regions/index.js +7 -5
  612. package/src/higher-order/with-filters/test/index.js +43 -36
  613. package/src/higher-order/with-focus-return/index.js +14 -13
  614. package/src/higher-order/with-spoken-messages/index.js +8 -7
  615. package/src/higher-order/with-spoken-messages/test/index.js +1 -1
  616. package/src/icon/index.tsx +2 -2
  617. package/src/input-control/index.tsx +2 -1
  618. package/src/input-control/input-field.tsx +2 -1
  619. package/src/input-control/reducer/reducer.ts +23 -21
  620. package/src/input-control/utils.ts +1 -1
  621. package/src/item-group/stories/index.js +2 -1
  622. package/src/menu-item/test/index.js +2 -1
  623. package/src/menu-items-choice/index.js +2 -5
  624. package/src/mobile/bottom-sheet/bottom-sheet-context.native.js +2 -4
  625. package/src/mobile/bottom-sheet/cell.native.js +2 -3
  626. package/src/mobile/bottom-sheet/cycle-picker-cell.native.js +3 -5
  627. package/src/mobile/bottom-sheet/index.native.js +14 -17
  628. package/src/mobile/bottom-sheet/picker-cell.native.js +2 -7
  629. package/src/mobile/bottom-sheet/stepper-cell/index.native.js +4 -6
  630. package/src/mobile/color-settings/index.native.js +2 -4
  631. package/src/mobile/global-styles-context/index.native.js +8 -7
  632. package/src/mobile/gradient/index.native.js +12 -9
  633. package/src/mobile/gradient/test/index.native.js +1 -3
  634. package/src/mobile/html-text-input/index.native.js +2 -3
  635. package/src/mobile/inserter-button/index.native.js +2 -6
  636. package/src/mobile/link-settings/image-link-destinations-screen.native.js +6 -2
  637. package/src/mobile/media-edit/index.native.js +2 -3
  638. package/src/mobile/segmented-control/index.native.js +4 -5
  639. package/src/mobile/utils/test/index.native.js +3 -12
  640. package/src/modal/index.js +1 -1
  641. package/src/navigable-container/container.js +3 -2
  642. package/src/navigable-container/test/menu.js +1 -2
  643. package/src/navigable-container/test/tabbable.js +1 -2
  644. package/src/navigation/context.js +2 -5
  645. package/src/navigation/index.js +2 -1
  646. package/src/navigation/item/index.js +2 -1
  647. package/src/navigation/stories/controlled-state.js +1 -1
  648. package/src/navigation/stories/more-examples.js +2 -3
  649. package/src/navigation/test/index.js +252 -52
  650. package/src/navigator/navigator-back-button/hook.ts +14 -12
  651. package/src/navigator/navigator-button/hook.ts +14 -13
  652. package/src/navigator/navigator-provider/component.tsx +2 -6
  653. package/src/navigator/navigator-screen/component.tsx +3 -3
  654. package/src/notice/index.js +2 -1
  655. package/src/notice/list.js +3 -1
  656. package/src/panel/body.js +2 -1
  657. package/src/placeholder/README.md +7 -6
  658. package/src/placeholder/index.js +27 -10
  659. package/src/placeholder/style.scss +23 -0
  660. package/src/radio-control/README.md +17 -23
  661. package/src/radio-control/index.tsx +107 -0
  662. package/src/radio-control/stories/index.tsx +72 -0
  663. package/src/radio-control/types.ts +32 -0
  664. package/src/range-control/index.js +4 -2
  665. package/src/range-control/input-range.js +2 -5
  666. package/src/range-control/utils.js +3 -1
  667. package/src/resizable-box/resize-tooltip/index.tsx +2 -1
  668. package/src/resizable-box/resize-tooltip/utils.ts +1 -5
  669. package/src/responsive-wrapper/index.js +2 -4
  670. package/src/sandbox/test/index.js +4 -6
  671. package/src/select-control/index.tsx +3 -1
  672. package/src/select-control/stories/index.tsx +3 -4
  673. package/src/slot-fill/fill.js +1 -5
  674. package/src/slot-fill/slot.js +12 -2
  675. package/src/snackbar/index.js +1 -1
  676. package/src/snackbar/list.js +2 -1
  677. package/src/tab-panel/index.js +3 -1
  678. package/src/text/hook.js +4 -1
  679. package/src/text/utils.js +2 -3
  680. package/src/text-control/stories/index.tsx +4 -6
  681. package/src/toggle-control/index.js +1 -2
  682. package/src/toggle-control/index.native.js +2 -6
  683. package/src/toggle-group-control/toggle-group-control/toggle-group-control-backdrop.tsx +2 -4
  684. package/src/toolbar/index.js +1 -2
  685. package/src/tools-panel/tools-panel/hook.ts +2 -4
  686. package/src/tools-panel/tools-panel-header/hook.ts +2 -5
  687. package/src/tooltip/index.js +1 -0
  688. package/src/tree-grid/roving-tab-index-item.js +2 -4
  689. package/src/tree-grid/test/index.js +2 -3
  690. package/src/tree-select/README.md +2 -2
  691. package/src/tree-select/index.tsx +99 -0
  692. package/src/tree-select/stories/index.tsx +80 -0
  693. package/src/tree-select/types.ts +35 -0
  694. package/src/ui/context/wordpress-component.ts +4 -5
  695. package/src/ui/form-group/form-group-content.js +4 -4
  696. package/src/unit-control/index.tsx +7 -9
  697. package/src/unit-control/stories/index.tsx +8 -12
  698. package/src/unit-control/test/index.tsx +4 -7
  699. package/src/utils/hooks/stories/use-cx.js +8 -7
  700. package/src/utils/hooks/test/use-controlled-state.js +2 -1
  701. package/src/utils/unit-values.ts +2 -1
  702. package/src/utils/values.js +2 -3
  703. package/src/z-stack/README.md +14 -3
  704. package/src/z-stack/component.tsx +24 -29
  705. package/src/z-stack/stories/index.tsx +76 -0
  706. package/src/z-stack/types.ts +33 -0
  707. package/tsconfig.json +5 -0
  708. package/tsconfig.tsbuildinfo +1 -1
  709. package/src/external-link/stories/index.js +0 -23
  710. package/src/form-token-field/index.js +0 -725
  711. package/src/form-token-field/stories/index.js +0 -102
  712. package/src/form-token-field/token-input.js +0 -81
  713. package/src/radio-control/index.js +0 -69
  714. package/src/radio-control/stories/index.js +0 -41
  715. package/src/tree-select/index.js +0 -48
  716. package/src/tree-select/stories/index.js +0 -80
  717. package/src/z-stack/stories/index.js +0 -70
@@ -1,7 +1,13 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, screen, fireEvent } from '@testing-library/react';
4
+ import { render, screen } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
6
+
7
+ /**
8
+ * WordPress dependencies
9
+ */
10
+ import { useState } from '@wordpress/element';
5
11
 
6
12
  /**
7
13
  * Internal dependencies
@@ -10,7 +16,7 @@ import Navigation from '..';
10
16
  import NavigationItem from '../item';
11
17
  import NavigationMenu from '../menu';
12
18
 
13
- const testNavigation = ( { activeItem, rootTitle, showBadge } = {} ) => (
19
+ const TestNavigation = ( { activeItem, rootTitle, showBadge } = {} ) => (
14
20
  <Navigation activeItem={ activeItem }>
15
21
  <NavigationMenu title={ rootTitle }>
16
22
  <NavigationItem
@@ -45,92 +51,286 @@ const testNavigation = ( { activeItem, rootTitle, showBadge } = {} ) => (
45
51
  </Navigation>
46
52
  );
47
53
 
54
+ const TestNavigationControlled = () => {
55
+ const [ activeItem, setActiveItem ] = useState( 'item-1' );
56
+ const [ activeMenu, setActiveMenu ] = useState( 'root' );
57
+
58
+ const onMockLinkClick = ( event ) => {
59
+ event.preventDefault();
60
+ const item = event.target.href.replace( 'https://example.com/', '' );
61
+ setActiveItem( item );
62
+ };
63
+
64
+ return (
65
+ <>
66
+ <Navigation
67
+ activeItem={ activeItem }
68
+ activeMenu={ activeMenu }
69
+ className="navigation-story"
70
+ onActivateMenu={ setActiveMenu }
71
+ >
72
+ <NavigationMenu title="Home">
73
+ <NavigationItem
74
+ item="item-1"
75
+ title="Item 1"
76
+ href="https://example.com/item-1"
77
+ onClick={ onMockLinkClick }
78
+ />
79
+ <NavigationItem
80
+ item="item-2"
81
+ title="Item 2"
82
+ href="https://example.com/item-2"
83
+ onClick={ onMockLinkClick }
84
+ />
85
+ <NavigationItem
86
+ item="item-sub-menu"
87
+ navigateToMenu="sub-menu"
88
+ title="Sub-Menu"
89
+ />
90
+ </NavigationMenu>
91
+ <NavigationMenu
92
+ menu="sub-menu"
93
+ parentMenu="root"
94
+ title="Sub-Menu"
95
+ >
96
+ <NavigationItem
97
+ item="child-1"
98
+ onClick={ () => setActiveItem( 'child-1' ) }
99
+ title="Child 1"
100
+ />
101
+ <NavigationItem
102
+ item="child-2"
103
+ onClick={ () => setActiveItem( 'child-2' ) }
104
+ title="Child 2"
105
+ />
106
+ <NavigationItem
107
+ item="child-nested-sub-menu"
108
+ navigateToMenu="nested-sub-menu"
109
+ title="Nested Sub-Menu"
110
+ />
111
+ </NavigationMenu>
112
+ <NavigationMenu
113
+ menu="nested-sub-menu"
114
+ parentMenu="sub-menu"
115
+ title="Nested Sub-Menu"
116
+ >
117
+ <NavigationItem
118
+ item="sub-child-1"
119
+ onClick={ () => setActiveItem( 'sub-child-1' ) }
120
+ title="Sub-Child 1"
121
+ />
122
+ <NavigationItem
123
+ item="sub-child-2"
124
+ onClick={ () => setActiveItem( 'sub-child-2' ) }
125
+ title="Sub-Child 2"
126
+ />
127
+ </NavigationMenu>
128
+ </Navigation>
129
+
130
+ <div className="navigation-story__aside">
131
+ <p>
132
+ Menu <code>{ activeMenu }</code> is active.
133
+ <br />
134
+ Item <code>{ activeItem }</code> is active.
135
+ </p>
136
+ <p>
137
+ <button
138
+ onClick={ () => {
139
+ setActiveMenu( 'nested-sub-menu' );
140
+ } }
141
+ >
142
+ Open the Nested Sub-Menu menu
143
+ </button>
144
+ </p>
145
+ <p>
146
+ <button
147
+ onClick={ () => {
148
+ setActiveItem( 'child-2' );
149
+ setActiveMenu( 'sub-menu' );
150
+ } }
151
+ >
152
+ Navigate to Child 2 item
153
+ </button>
154
+ </p>
155
+ </div>
156
+ </>
157
+ );
158
+ };
159
+
48
160
  describe( 'Navigation', () => {
49
161
  it( 'should render the panes and active item', async () => {
50
- render( testNavigation( { activeItem: 'item-2' } ) );
162
+ render( <TestNavigation activeItem="item-2" /> );
51
163
 
52
164
  const menuItems = screen.getAllByRole( 'listitem' );
53
165
 
54
- expect( menuItems.length ).toBe( 4 );
55
- expect( menuItems[ 0 ].textContent ).toBe( 'Item 1' );
56
- expect( menuItems[ 1 ].textContent ).toBe( 'Item 2' );
57
- expect( menuItems[ 2 ].textContent ).toBe( 'Category' );
58
- expect( menuItems[ 3 ].textContent ).toBe( 'customize me' );
59
- expect( menuItems[ 0 ].classList.contains( 'is-active' ) ).toBe(
60
- false
61
- );
62
- expect( menuItems[ 1 ].classList.contains( 'is-active' ) ).toBe( true );
166
+ expect( menuItems ).toHaveLength( 4 );
167
+ expect( menuItems[ 0 ] ).toHaveTextContent( 'Item 1' );
168
+ expect( menuItems[ 1 ] ).toHaveTextContent( 'Item 2' );
169
+ expect( menuItems[ 2 ] ).toHaveTextContent( 'Category' );
170
+ expect( menuItems[ 3 ] ).toHaveTextContent( 'customize me' );
171
+
172
+ expect(
173
+ screen.getByRole( 'link', { current: 'page' } )
174
+ ).toHaveTextContent( 'Item 2' );
63
175
  } );
64
176
 
65
- it( 'should render anchor links when menu item supplies an href', async () => {
66
- render( testNavigation() );
177
+ it( 'should render anchor links when menu item supplies an href', () => {
178
+ render( <TestNavigation /> );
67
179
 
68
180
  const linkItem = screen.getByRole( 'link', { name: 'Item 2' } );
69
181
 
70
- expect( linkItem ).toBeDefined();
71
- expect( linkItem.target ).toBe( '_blank' );
182
+ expect( linkItem ).toBeInTheDocument();
183
+ expect( linkItem ).toHaveAttribute( 'target', '_blank' );
72
184
  } );
73
185
 
74
- it( 'should render a custom component when menu item supplies one', async () => {
75
- render( testNavigation() );
186
+ it( 'should render a custom component when menu item supplies one', () => {
187
+ render( <TestNavigation /> );
76
188
 
77
- const customItem = screen.getByText( 'customize me' );
78
-
79
- expect( customItem ).toBeDefined();
189
+ expect( screen.getByText( 'customize me' ) ).toBeInTheDocument();
80
190
  } );
81
191
 
82
192
  it( 'should set an active category on click', async () => {
83
- render( testNavigation() );
193
+ const user = userEvent.setup( {
194
+ advanceTimers: jest.advanceTimersByTime,
195
+ } );
84
196
 
85
- fireEvent.click( screen.getByRole( 'button', { name: 'Category' } ) );
86
- const categoryTitle = screen.getByRole( 'heading' );
87
- const menuItems = screen.getAllByRole( 'listitem' );
197
+ render( <TestNavigation /> );
198
+
199
+ await user.click( screen.getByRole( 'button', { name: 'Category' } ) );
88
200
 
89
- expect( categoryTitle.textContent ).toBe( 'Category' );
90
- expect( menuItems.length ).toBe( 2 );
91
- expect( menuItems[ 0 ].textContent ).toBe( 'Child 1' );
92
- expect( menuItems[ 1 ].textContent ).toBe( 'Child 2' );
201
+ expect( screen.getByRole( 'heading' ) ).toHaveTextContent( 'Category' );
202
+ const menuItems = screen.getAllByRole( 'listitem' );
203
+ expect( menuItems ).toHaveLength( 2 );
204
+ expect( menuItems[ 0 ] ).toHaveTextContent( 'Child 1' );
205
+ expect( menuItems[ 1 ] ).toHaveTextContent( 'Child 2' );
93
206
  } );
94
207
 
95
- it( 'should render the root title', async () => {
96
- const { rerender } = render( testNavigation() );
208
+ it( 'should render the root title', () => {
209
+ const { rerender } = render( <TestNavigation /> );
97
210
 
98
- const emptyTitle = screen.queryByRole( 'heading' );
99
- expect( emptyTitle ).toBeNull();
211
+ expect( screen.queryByRole( 'heading' ) ).not.toBeInTheDocument();
100
212
 
101
- rerender( testNavigation( { rootTitle: 'Home' } ) );
213
+ rerender( <TestNavigation rootTitle="Home" /> );
102
214
 
103
- const rootTitle = screen.getByRole( 'heading' );
104
- expect( rootTitle.textContent ).toBe( 'Home' );
215
+ expect( screen.getByRole( 'heading' ) ).toBeInTheDocument();
216
+ expect( screen.getByRole( 'heading' ) ).toHaveTextContent( 'Home' );
105
217
  } );
106
218
 
107
- it( 'should render badges', async () => {
108
- render( testNavigation( { showBadge: true } ) );
219
+ it( 'should render badges', () => {
220
+ render( <TestNavigation showBadge /> );
109
221
 
110
222
  const menuItem = screen.getAllByRole( 'listitem' );
111
223
  expect( menuItem[ 0 ].textContent ).toBe( 'Item 1' + '21' );
112
224
  } );
113
225
 
114
- it( 'should render menu titles when items exist', async () => {
226
+ it( 'should render menu titles when items exist', () => {
115
227
  const { rerender } = render( <Navigation></Navigation> );
116
228
 
117
- const emptyMenu = screen.queryByText( 'Menu title' );
118
- expect( emptyMenu ).toBeNull();
229
+ expect( screen.queryByText( 'Menu title' ) ).not.toBeInTheDocument();
119
230
 
120
- rerender( testNavigation( { rootTitle: 'Menu title' } ) );
231
+ rerender( <TestNavigation rootTitle="Menu title" /> );
121
232
 
122
- const menuTitle = screen.queryByText( 'Menu title' );
123
- expect( menuTitle ).not.toBeNull();
233
+ expect( screen.getByText( 'Menu title' ) ).toBeInTheDocument();
124
234
  } );
125
235
 
126
236
  it( 'should navigate up a level when clicking the back button', async () => {
127
- render( testNavigation( { rootTitle: 'Home' } ) );
128
-
129
- fireEvent.click( screen.getByRole( 'button', { name: 'Category' } ) );
130
- let menuTitle = screen.getByRole( 'heading' );
131
- expect( menuTitle.textContent ).toBe( 'Category' );
132
- fireEvent.click( screen.getByRole( 'button', { name: 'Home' } ) );
133
- menuTitle = screen.getByRole( 'heading' );
134
- expect( menuTitle.textContent ).toBe( 'Home' );
237
+ const user = userEvent.setup( {
238
+ advanceTimers: jest.advanceTimersByTime,
239
+ } );
240
+
241
+ render( <TestNavigation rootTitle="Home" /> );
242
+
243
+ await user.click( screen.getByRole( 'button', { name: 'Category' } ) );
244
+
245
+ expect( screen.getByRole( 'heading' ) ).toHaveTextContent( 'Category' );
246
+
247
+ await user.click( screen.getByRole( 'button', { name: 'Home' } ) );
248
+
249
+ expect( screen.getByRole( 'heading' ) ).toHaveTextContent( 'Home' );
250
+ } );
251
+
252
+ it( 'should navigate correctly when controlled', async () => {
253
+ const user = userEvent.setup( {
254
+ advanceTimers: jest.advanceTimersByTime,
255
+ } );
256
+
257
+ render( <TestNavigationControlled /> );
258
+
259
+ // check root menu is shown and item 1 is selected
260
+ expect(
261
+ screen.getByRole( 'heading', { name: 'Home' } )
262
+ ).toBeInTheDocument();
263
+ expect(
264
+ screen.getByRole( 'link', { current: 'page' } )
265
+ ).toHaveTextContent( 'Item 1' );
266
+
267
+ // click Item 2, check it's selected
268
+ await user.click( screen.getByRole( 'link', { name: 'Item 2' } ) );
269
+ expect(
270
+ screen.getByRole( 'link', { current: 'page' } )
271
+ ).toHaveTextContent( 'Item 2' );
272
+
273
+ // click sub-menu, check new menu is shown
274
+ await user.click( screen.getByRole( 'button', { name: 'Sub-Menu' } ) );
275
+ expect(
276
+ screen.getByRole( 'heading', { name: 'Sub-Menu' } )
277
+ ).toBeInTheDocument();
278
+
279
+ // click Child 1, check it's selected
280
+ await user.click( screen.getByRole( 'button', { name: 'Child 1' } ) );
281
+ expect(
282
+ screen.getByRole( 'button', { current: 'page' } )
283
+ ).toHaveTextContent( 'Child 1' );
284
+
285
+ // click nested sub-menu, check nested sub-menu is shown
286
+ await user.click(
287
+ screen.getByRole( 'button', { name: 'Nested Sub-Menu' } )
288
+ );
289
+ expect(
290
+ screen.getByRole( 'heading', { name: 'Nested Sub-Menu' } )
291
+ ).toBeInTheDocument();
292
+
293
+ // click Sub Child 2, check it's selected
294
+ await user.click(
295
+ screen.getByRole( 'button', { name: 'Sub-Child 2' } )
296
+ );
297
+ expect(
298
+ screen.getByRole( 'button', { current: 'page' } )
299
+ ).toHaveTextContent( 'Sub-Child 2' );
300
+
301
+ // click back, check sub-menu is shown
302
+ await user.click( screen.getByRole( 'button', { name: 'Sub-Menu' } ) );
303
+ expect(
304
+ screen.getByRole( 'heading', { name: 'Sub-Menu' } )
305
+ ).toBeInTheDocument();
306
+
307
+ // click back, check root menu is shown
308
+ await user.click( screen.getByRole( 'button', { name: 'Home' } ) );
309
+ expect(
310
+ screen.getByRole( 'heading', { name: 'Home' } )
311
+ ).toBeInTheDocument();
312
+
313
+ // click the programmatic nested sub-menu button, check nested sub menu is shown
314
+ await user.click(
315
+ screen.getByRole( 'button', {
316
+ name: 'Open the Nested Sub-Menu menu',
317
+ } )
318
+ );
319
+ expect(
320
+ screen.getByRole( 'heading', { name: 'Nested Sub-Menu' } )
321
+ ).toBeInTheDocument();
322
+
323
+ // click navigate to child2 item button, check the correct menu is shown and the item is selected
324
+ await user.click(
325
+ screen.getByRole( 'button', {
326
+ name: 'Navigate to Child 2 item',
327
+ } )
328
+ );
329
+ expect(
330
+ screen.getByRole( 'heading', { name: 'Sub-Menu' } )
331
+ ).toBeInTheDocument();
332
+ expect(
333
+ screen.getByRole( 'button', { current: 'page' } )
334
+ ).toHaveTextContent( 'Child 2' );
135
335
  } );
136
336
  } );
@@ -17,20 +17,22 @@ import type { NavigatorBackButtonProps } from '../types';
17
17
  export function useNavigatorBackButton(
18
18
  props: WordPressComponentProps< NavigatorBackButtonProps, 'button' >
19
19
  ) {
20
- const { onClick, as = Button, ...otherProps } = useContextSystem(
21
- props,
22
- 'NavigatorBackButton'
23
- );
20
+ const {
21
+ onClick,
22
+ as = Button,
23
+ ...otherProps
24
+ } = useContextSystem( props, 'NavigatorBackButton' );
24
25
 
25
26
  const { goBack } = useNavigator();
26
- const handleClick: React.MouseEventHandler< HTMLButtonElement > = useCallback(
27
- ( e ) => {
28
- e.preventDefault();
29
- goBack();
30
- onClick?.( e );
31
- },
32
- [ goBack, onClick ]
33
- );
27
+ const handleClick: React.MouseEventHandler< HTMLButtonElement > =
28
+ useCallback(
29
+ ( e ) => {
30
+ e.preventDefault();
31
+ goBack();
32
+ onClick?.( e );
33
+ },
34
+ [ goBack, onClick ]
35
+ );
34
36
 
35
37
  return {
36
38
  as,
@@ -32,19 +32,20 @@ export function useNavigatorButton(
32
32
  const escapedPath = escapeAttribute( path );
33
33
 
34
34
  const { goTo } = useNavigator();
35
- const handleClick: React.MouseEventHandler< HTMLButtonElement > = useCallback(
36
- ( e ) => {
37
- e.preventDefault();
38
- goTo( escapedPath, {
39
- focusTargetSelector: cssSelectorForAttribute(
40
- attributeName,
41
- escapedPath
42
- ),
43
- } );
44
- onClick?.( e );
45
- },
46
- [ goTo, onClick ]
47
- );
35
+ const handleClick: React.MouseEventHandler< HTMLButtonElement > =
36
+ useCallback(
37
+ ( e ) => {
38
+ e.preventDefault();
39
+ goTo( escapedPath, {
40
+ focusTargetSelector: cssSelectorForAttribute(
41
+ attributeName,
42
+ escapedPath
43
+ ),
44
+ } );
45
+ onClick?.( e );
46
+ },
47
+ [ goTo, onClick ]
48
+ );
48
49
 
49
50
  return {
50
51
  as,
@@ -30,12 +30,8 @@ function NavigatorProvider(
30
30
  props: WordPressComponentProps< NavigatorProviderProps, 'div' >,
31
31
  forwardedRef: ForwardedRef< any >
32
32
  ) {
33
- const {
34
- initialPath,
35
- children,
36
- className,
37
- ...otherProps
38
- } = useContextSystem( props, 'NavigatorProvider' );
33
+ const { initialPath, children, className, ...otherProps } =
34
+ useContextSystem( props, 'NavigatorProvider' );
39
35
 
40
36
  const [ locationHistory, setLocationHistory ] = useState<
41
37
  NavigatorLocation[]
@@ -96,9 +96,9 @@ function NavigatorScreen( props: Props, forwardedRef: ForwardedRef< any > ) {
96
96
  // If the previous query didn't run or find any element to focus, fallback
97
97
  // to the first tabbable element in the screen (or the screen itself).
98
98
  if ( ! elementToFocus ) {
99
- const firstTabbable = ( focus.tabbable.find(
100
- wrapperRef.current
101
- ) as HTMLElement[] )[ 0 ];
99
+ const firstTabbable = (
100
+ focus.tabbable.find( wrapperRef.current ) as HTMLElement[]
101
+ )[ 0 ];
102
102
 
103
103
  elementToFocus = firstTabbable ?? wrapperRef.current;
104
104
  }
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { noop } from 'lodash';
5
4
  import classnames from 'classnames';
6
5
 
7
6
  /**
@@ -19,6 +18,8 @@ import { Button } from '../';
19
18
 
20
19
  /** @typedef {import('@wordpress/element').WPElement} WPElement */
21
20
 
21
+ const noop = () => {};
22
+
22
23
  /**
23
24
  * Custom hook which announces the message with the given politeness, if a
24
25
  * valid message is provided.
@@ -2,13 +2,15 @@
2
2
  * External dependencies
3
3
  */
4
4
  import classnames from 'classnames';
5
- import { noop, omit } from 'lodash';
5
+ import { omit } from 'lodash';
6
6
 
7
7
  /**
8
8
  * Internal dependencies
9
9
  */
10
10
  import Notice from './';
11
11
 
12
+ const noop = () => {};
13
+
12
14
  /**
13
15
  * Renders a list of notices.
14
16
  *
package/src/panel/body.js CHANGED
@@ -2,7 +2,6 @@
2
2
  * External dependencies
3
3
  */
4
4
  import classnames from 'classnames';
5
- import { noop } from 'lodash';
6
5
 
7
6
  /**
8
7
  * WordPress dependencies
@@ -18,6 +17,8 @@ import Button from '../button';
18
17
  import Icon from '../icon';
19
18
  import { useControlledState, useUpdateEffect } from '../utils';
20
19
 
20
+ const noop = () => {};
21
+
21
22
  export function PanelBody(
22
23
  {
23
24
  buttonProps = {},
@@ -11,9 +11,10 @@ const MyPlaceholder = () => <Placeholder icon={ more } label="Placeholder" />;
11
11
 
12
12
  ### Props
13
13
 
14
- | Name | Type | Default | Description |
15
- | ---------------- | ------------------- | ----------- | ----------------------------------------------------------------- |
16
- | `icon` | `string, WPElement` | `undefined` | If provided, renders an icon next to the label. |
17
- | `label` | `string` | `undefined` | Renders a label for the placeholder. |
18
- | `instructions` | `string` | `undefined` | Renders instruction text below label. |
19
- | `isColumnLayout` | `bool` | `false` | Changes placeholder children layout from flex-row to flex-column. |
14
+ | Name | Type | Default | Description |
15
+ | ---------------- | ------------------- | ----------- | ----------------------------------------------------------------- |
16
+ | `icon` | `string, WPElement` | `undefined` | If provided, renders an icon next to the label. |
17
+ | `label` | `string` | `undefined` | Renders a label for the placeholder. |
18
+ | `instructions` | `string` | `undefined` | Renders instruction text below label. |
19
+ | `isColumnLayout` | `bool` | `false` | Changes placeholder children layout from flex-row to flex-column. |
20
+ | `withIllustration`| `bool` | `false` | Outputs a placeholder illustration. |
@@ -7,24 +7,38 @@ import classnames from 'classnames';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import { useResizeObserver } from '@wordpress/compose';
10
+ import { SVG, Path } from '@wordpress/primitives';
10
11
 
11
12
  /**
12
13
  * Internal dependencies
13
14
  */
14
15
  import Icon from '../icon';
15
16
 
17
+ const PlaceholderIllustration = (
18
+ <SVG
19
+ className="components-placeholder__illustration"
20
+ fill="none"
21
+ xmlns="http://www.w3.org/2000/svg"
22
+ viewBox="0 0 60 60"
23
+ preserveAspectRatio="none"
24
+ >
25
+ <Path vectorEffect="non-scaling-stroke" d="M60 60 0 0" />
26
+ </SVG>
27
+ );
28
+
16
29
  /**
17
30
  * Renders a placeholder. Normally used by blocks to render their empty state.
18
31
  *
19
- * @param {Object} props The component props.
20
- * @param {WPIcon} props.icon An icon rendered before the label.
21
- * @param {WPElement} props.children Children to be rendered.
22
- * @param {string} props.label Title of the placeholder.
23
- * @param {string} props.instructions Instructions of the placeholder.
24
- * @param {string} props.className Class to set on the container div.
25
- * @param {Object} props.notices A rendered notices list.
26
- * @param {Object} props.preview Preview to be rendered in the placeholder.
27
- * @param {boolean} props.isColumnLayout Whether a column layout should be used.
32
+ * @param {Object} props The component props.
33
+ * @param {WPIcon} props.icon An icon rendered before the label.
34
+ * @param {WPElement} props.children Children to be rendered.
35
+ * @param {string} props.label Title of the placeholder.
36
+ * @param {string} props.instructions Instructions of the placeholder.
37
+ * @param {string} props.className Class to set on the container div.
38
+ * @param {Object} props.notices A rendered notices list.
39
+ * @param {Object} props.preview Preview to be rendered in the placeholder.
40
+ * @param {boolean} props.isColumnLayout Whether a column layout should be used.
41
+ * @param {boolean} props.withIllustration Whether to add an illustration to the placeholder.
28
42
  *
29
43
  * @return {Object} The rendered placeholder.
30
44
  */
@@ -37,6 +51,7 @@ function Placeholder( {
37
51
  notices,
38
52
  preview,
39
53
  isColumnLayout,
54
+ withIllustration,
40
55
  ...additionalProps
41
56
  } ) {
42
57
  const [ resizeListener, { width } ] = useResizeObserver();
@@ -55,13 +70,15 @@ function Placeholder( {
55
70
  const classes = classnames(
56
71
  'components-placeholder',
57
72
  className,
58
- modifierClassNames
73
+ modifierClassNames,
74
+ withIllustration ? 'has-illustration' : null
59
75
  );
60
76
  const fieldsetClasses = classnames( 'components-placeholder__fieldset', {
61
77
  'is-column-layout': isColumnLayout,
62
78
  } );
63
79
  return (
64
80
  <div { ...additionalProps } className={ classes }>
81
+ { withIllustration ? PlaceholderIllustration : null }
65
82
  { resizeListener }
66
83
  { notices }
67
84
  { preview && (
@@ -30,6 +30,13 @@
30
30
  .components-base-control__label {
31
31
  font-size: $default-font-size;
32
32
  }
33
+
34
+ &.has-illustration {
35
+ background: none;
36
+ border: none;
37
+ box-shadow: none;
38
+ min-width: 100px;
39
+ }
33
40
  }
34
41
 
35
42
  .components-placeholder__error,
@@ -171,3 +178,19 @@
171
178
  }
172
179
  }
173
180
  }
181
+
182
+ // Style the placeholder illustration.
183
+ .components-placeholder__illustration {
184
+ border: $border-width dashed currentColor;
185
+ box-sizing: border-box;
186
+ position: absolute;
187
+ top: 0;
188
+ right: 0;
189
+ bottom: 0;
190
+ left: 0;
191
+ width: 100%;
192
+ height: 100%;
193
+ stroke: currentColor;
194
+ stroke-dasharray: 3;
195
+ opacity: 0.4;
196
+ }