@wordpress/components 22.1.0 → 23.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (660) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/CONTRIBUTING.md +0 -21
  3. package/build/alignment-matrix-control/cell.js.map +1 -1
  4. package/build/alignment-matrix-control/icon.js +4 -2
  5. package/build/alignment-matrix-control/icon.js.map +1 -1
  6. package/build/alignment-matrix-control/index.js +25 -1
  7. package/build/alignment-matrix-control/index.js.map +1 -1
  8. package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
  9. package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
  10. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
  11. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  12. package/build/alignment-matrix-control/types.js +6 -0
  13. package/build/alignment-matrix-control/types.js.map +1 -0
  14. package/build/alignment-matrix-control/utils.js +9 -8
  15. package/build/alignment-matrix-control/utils.js.map +1 -1
  16. package/build/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
  17. package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  18. package/build/autocomplete/index.js +39 -12
  19. package/build/autocomplete/index.js.map +1 -1
  20. package/build/base-control/hooks.js +52 -0
  21. package/build/base-control/hooks.js.map +1 -0
  22. package/build/base-control/index.js +24 -7
  23. package/build/base-control/index.js.map +1 -1
  24. package/build/base-field/hook.js +0 -14
  25. package/build/base-field/hook.js.map +1 -1
  26. package/build/base-field/index.js.map +1 -1
  27. package/build/base-field/styles.js +5 -5
  28. package/build/base-field/styles.js.map +1 -1
  29. package/build/base-field/types.js +6 -0
  30. package/build/base-field/types.js.map +1 -0
  31. package/build/border-box-control/border-box-control/component.js +0 -3
  32. package/build/border-box-control/border-box-control/component.js.map +1 -1
  33. package/build/border-box-control/border-box-control/hook.js +0 -2
  34. package/build/border-box-control/border-box-control/hook.js.map +1 -1
  35. package/build/border-box-control/border-box-control-split-controls/component.js +0 -2
  36. package/build/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  37. package/build/border-box-control/border-box-control-split-controls/hook.js +0 -2
  38. package/build/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  39. package/build/border-control/border-control/component.js +1 -2
  40. package/build/border-control/border-control/component.js.map +1 -1
  41. package/build/border-control/border-control/hook.js +0 -2
  42. package/build/border-control/border-control/hook.js.map +1 -1
  43. package/build/border-control/border-control-dropdown/component.js +6 -11
  44. package/build/border-control/border-control-dropdown/component.js.map +1 -1
  45. package/build/border-control/border-control-dropdown/hook.js +0 -2
  46. package/build/border-control/border-control-dropdown/hook.js.map +1 -1
  47. package/build/border-control/styles.js +16 -16
  48. package/build/border-control/styles.js.map +1 -1
  49. package/build/box-control/linked-button.js +3 -4
  50. package/build/box-control/linked-button.js.map +1 -1
  51. package/build/color-palette/index.js +7 -15
  52. package/build/color-palette/index.js.map +1 -1
  53. package/build/color-picker/input-with-slider.js +1 -0
  54. package/build/color-picker/input-with-slider.js.map +1 -1
  55. package/build/color-picker/styles.js +8 -8
  56. package/build/color-picker/styles.js.map +1 -1
  57. package/build/custom-select-control/index.js +14 -2
  58. package/build/custom-select-control/index.js.map +1 -1
  59. package/build/dashicon/index.js +1 -4
  60. package/build/dashicon/index.js.map +1 -1
  61. package/build/date-time/date-time/index.js +4 -4
  62. package/build/date-time/date-time/index.js.map +1 -1
  63. package/build/dimension-control/index.js.map +1 -1
  64. package/build/dropdown/index.js +45 -10
  65. package/build/dropdown/index.js.map +1 -1
  66. package/build/duotone-picker/duotone-picker.js +2 -2
  67. package/build/duotone-picker/duotone-picker.js.map +1 -1
  68. package/build/gradient-picker/index.js +4 -11
  69. package/build/gradient-picker/index.js.map +1 -1
  70. package/build/higher-order/navigate-regions/index.js +4 -3
  71. package/build/higher-order/navigate-regions/index.js.map +1 -1
  72. package/build/higher-order/with-fallback-styles/index.js +2 -2
  73. package/build/higher-order/with-fallback-styles/index.js.map +1 -1
  74. package/build/index.js +13 -9
  75. package/build/index.js.map +1 -1
  76. package/build/input-control/index.js +17 -5
  77. package/build/input-control/index.js.map +1 -1
  78. package/build/input-control/input-base.js +2 -0
  79. package/build/input-control/input-base.js.map +1 -1
  80. package/build/mobile/bottom-sheet/cell.native.js +1 -1
  81. package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
  82. package/build/mobile/bottom-sheet/picker-cell.native.js +1 -9
  83. package/build/mobile/bottom-sheet/picker-cell.native.js.map +1 -1
  84. package/build/mobile/bottom-sheet/switch-cell.native.js +1 -3
  85. package/build/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  86. package/build/mobile/global-styles-context/index.native.js +8 -8
  87. package/build/mobile/global-styles-context/index.native.js.map +1 -1
  88. package/build/mobile/global-styles-context/utils.native.js +30 -12
  89. package/build/mobile/global-styles-context/utils.native.js.map +1 -1
  90. package/build/mobile/keyboard-aware-flat-list/index.ios.js +4 -2
  91. package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  92. package/build/modal/index.js +8 -0
  93. package/build/modal/index.js.map +1 -1
  94. package/build/navigator/navigator-provider/component.js +12 -8
  95. package/build/navigator/navigator-provider/component.js.map +1 -1
  96. package/build/number-control/styles/number-control-styles.js +8 -8
  97. package/build/number-control/styles/number-control-styles.js.map +1 -1
  98. package/build/palette-edit/index.js +72 -33
  99. package/build/palette-edit/index.js.map +1 -1
  100. package/build/popover/index.js +10 -2
  101. package/build/popover/index.js.map +1 -1
  102. package/build/query-controls/index.js +1 -0
  103. package/build/query-controls/index.js.map +1 -1
  104. package/build/snackbar/index.js +35 -24
  105. package/build/snackbar/index.js.map +1 -1
  106. package/build/snackbar/list.js +14 -19
  107. package/build/snackbar/list.js.map +1 -1
  108. package/build/snackbar/types.js +6 -0
  109. package/build/snackbar/types.js.map +1 -0
  110. package/build/tab-panel/index.js +15 -9
  111. package/build/tab-panel/index.js.map +1 -1
  112. package/build/theme/color-algorithms.js +118 -0
  113. package/build/theme/color-algorithms.js.map +1 -0
  114. package/build/theme/index.js +21 -18
  115. package/build/theme/index.js.map +1 -1
  116. package/build/theme/styles.js +10 -7
  117. package/build/theme/styles.js.map +1 -1
  118. package/build/toggle-control/index.js +5 -2
  119. package/build/toggle-control/index.js.map +1 -1
  120. package/build/ui/context/context-system-provider.js +3 -1
  121. package/build/ui/context/context-system-provider.js.map +1 -1
  122. package/build/unit-control/index.js +5 -2
  123. package/build/unit-control/index.js.map +1 -1
  124. package/build/utils/colors-values.js +1 -1
  125. package/build/utils/colors-values.js.map +1 -1
  126. package/build/utils/config-values.js +0 -2
  127. package/build/utils/config-values.js.map +1 -1
  128. package/build/utils/hooks/use-controlled-value.js.map +1 -1
  129. package/build-module/alignment-matrix-control/cell.js.map +1 -1
  130. package/build-module/alignment-matrix-control/icon.js +4 -2
  131. package/build-module/alignment-matrix-control/icon.js.map +1 -1
  132. package/build-module/alignment-matrix-control/index.js +23 -1
  133. package/build-module/alignment-matrix-control/index.js.map +1 -1
  134. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
  135. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
  136. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
  137. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  138. package/build-module/alignment-matrix-control/types.js +2 -0
  139. package/build-module/alignment-matrix-control/types.js.map +1 -0
  140. package/build-module/alignment-matrix-control/utils.js +13 -8
  141. package/build-module/alignment-matrix-control/utils.js.map +1 -1
  142. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
  143. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  144. package/build-module/autocomplete/index.js +39 -11
  145. package/build-module/autocomplete/index.js.map +1 -1
  146. package/build-module/base-control/hooks.js +41 -0
  147. package/build-module/base-control/hooks.js.map +1 -0
  148. package/build-module/base-control/index.js +18 -8
  149. package/build-module/base-control/index.js.map +1 -1
  150. package/build-module/base-field/hook.js +0 -14
  151. package/build-module/base-field/hook.js.map +1 -1
  152. package/build-module/base-field/index.js.map +1 -1
  153. package/build-module/base-field/styles.js +5 -5
  154. package/build-module/base-field/styles.js.map +1 -1
  155. package/build-module/base-field/types.js +2 -0
  156. package/build-module/base-field/types.js.map +1 -0
  157. package/build-module/border-box-control/border-box-control/component.js +0 -3
  158. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  159. package/build-module/border-box-control/border-box-control/hook.js +0 -2
  160. package/build-module/border-box-control/border-box-control/hook.js.map +1 -1
  161. package/build-module/border-box-control/border-box-control-split-controls/component.js +0 -2
  162. package/build-module/border-box-control/border-box-control-split-controls/component.js.map +1 -1
  163. package/build-module/border-box-control/border-box-control-split-controls/hook.js +0 -2
  164. package/build-module/border-box-control/border-box-control-split-controls/hook.js.map +1 -1
  165. package/build-module/border-control/border-control/component.js +1 -2
  166. package/build-module/border-control/border-control/component.js.map +1 -1
  167. package/build-module/border-control/border-control/hook.js +0 -2
  168. package/build-module/border-control/border-control/hook.js.map +1 -1
  169. package/build-module/border-control/border-control-dropdown/component.js +6 -11
  170. package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
  171. package/build-module/border-control/border-control-dropdown/hook.js +0 -2
  172. package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
  173. package/build-module/border-control/styles.js +17 -17
  174. package/build-module/border-control/styles.js.map +1 -1
  175. package/build-module/box-control/linked-button.js +3 -4
  176. package/build-module/box-control/linked-button.js.map +1 -1
  177. package/build-module/color-palette/index.js +7 -15
  178. package/build-module/color-palette/index.js.map +1 -1
  179. package/build-module/color-picker/input-with-slider.js +1 -0
  180. package/build-module/color-picker/input-with-slider.js.map +1 -1
  181. package/build-module/color-picker/styles.js +8 -8
  182. package/build-module/color-picker/styles.js.map +1 -1
  183. package/build-module/custom-select-control/index.js +14 -2
  184. package/build-module/custom-select-control/index.js.map +1 -1
  185. package/build-module/dashicon/index.js +1 -4
  186. package/build-module/dashicon/index.js.map +1 -1
  187. package/build-module/date-time/date-time/index.js +4 -4
  188. package/build-module/date-time/date-time/index.js.map +1 -1
  189. package/build-module/dimension-control/index.js +1 -2
  190. package/build-module/dimension-control/index.js.map +1 -1
  191. package/build-module/dropdown/index.js +44 -10
  192. package/build-module/dropdown/index.js.map +1 -1
  193. package/build-module/duotone-picker/duotone-picker.js +2 -2
  194. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  195. package/build-module/gradient-picker/index.js +4 -10
  196. package/build-module/gradient-picker/index.js.map +1 -1
  197. package/build-module/higher-order/navigate-regions/index.js +4 -3
  198. package/build-module/higher-order/navigate-regions/index.js.map +1 -1
  199. package/build-module/higher-order/with-fallback-styles/index.js +2 -2
  200. package/build-module/higher-order/with-fallback-styles/index.js.map +1 -1
  201. package/build-module/index.js +2 -3
  202. package/build-module/index.js.map +1 -1
  203. package/build-module/input-control/index.js +16 -5
  204. package/build-module/input-control/index.js.map +1 -1
  205. package/build-module/input-control/input-base.js +2 -0
  206. package/build-module/input-control/input-base.js.map +1 -1
  207. package/build-module/mobile/bottom-sheet/cell.native.js +1 -1
  208. package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
  209. package/build-module/mobile/bottom-sheet/picker-cell.native.js +1 -8
  210. package/build-module/mobile/bottom-sheet/picker-cell.native.js.map +1 -1
  211. package/build-module/mobile/bottom-sheet/switch-cell.native.js +1 -2
  212. package/build-module/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  213. package/build-module/mobile/global-styles-context/index.native.js +8 -7
  214. package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
  215. package/build-module/mobile/global-styles-context/utils.native.js +31 -13
  216. package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
  217. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
  218. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  219. package/build-module/modal/index.js +8 -0
  220. package/build-module/modal/index.js.map +1 -1
  221. package/build-module/navigator/navigator-provider/component.js +12 -8
  222. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  223. package/build-module/number-control/styles/number-control-styles.js +8 -10
  224. package/build-module/number-control/styles/number-control-styles.js.map +1 -1
  225. package/build-module/palette-edit/index.js +73 -34
  226. package/build-module/palette-edit/index.js.map +1 -1
  227. package/build-module/popover/index.js +10 -2
  228. package/build-module/popover/index.js.map +1 -1
  229. package/build-module/query-controls/index.js +1 -0
  230. package/build-module/query-controls/index.js.map +1 -1
  231. package/build-module/snackbar/index.js +33 -23
  232. package/build-module/snackbar/index.js.map +1 -1
  233. package/build-module/snackbar/list.js +14 -22
  234. package/build-module/snackbar/list.js.map +1 -1
  235. package/build-module/snackbar/types.js +2 -0
  236. package/build-module/snackbar/types.js.map +1 -0
  237. package/build-module/tab-panel/index.js +15 -8
  238. package/build-module/tab-panel/index.js.map +1 -1
  239. package/build-module/theme/color-algorithms.js +105 -0
  240. package/build-module/theme/color-algorithms.js.map +1 -0
  241. package/build-module/theme/index.js +21 -17
  242. package/build-module/theme/index.js.map +1 -1
  243. package/build-module/theme/styles.js +8 -6
  244. package/build-module/theme/styles.js.map +1 -1
  245. package/build-module/toggle-control/index.js +4 -2
  246. package/build-module/toggle-control/index.js.map +1 -1
  247. package/build-module/ui/context/context-system-provider.js +3 -2
  248. package/build-module/ui/context/context-system-provider.js.map +1 -1
  249. package/build-module/unit-control/index.js +5 -2
  250. package/build-module/unit-control/index.js.map +1 -1
  251. package/build-module/utils/colors-values.js +1 -1
  252. package/build-module/utils/colors-values.js.map +1 -1
  253. package/build-module/utils/config-values.js +0 -2
  254. package/build-module/utils/config-values.js.map +1 -1
  255. package/build-module/utils/hooks/use-controlled-value.js.map +1 -1
  256. package/build-style/style-rtl.css +108 -104
  257. package/build-style/style.css +108 -104
  258. package/build-types/alignment-matrix-control/cell.d.ts +5 -0
  259. package/build-types/alignment-matrix-control/cell.d.ts.map +1 -0
  260. package/build-types/alignment-matrix-control/icon.d.ts +6 -0
  261. package/build-types/alignment-matrix-control/icon.d.ts.map +1 -0
  262. package/build-types/alignment-matrix-control/index.d.ts +30 -0
  263. package/build-types/alignment-matrix-control/index.d.ts.map +1 -0
  264. package/build-types/alignment-matrix-control/stories/index.d.ts +14 -0
  265. package/build-types/alignment-matrix-control/stories/index.d.ts.map +1 -0
  266. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts +19 -0
  267. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts.map +1 -0
  268. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts +23 -0
  269. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -0
  270. package/build-types/alignment-matrix-control/test/index.d.ts +2 -0
  271. package/build-types/alignment-matrix-control/test/index.d.ts.map +1 -0
  272. package/build-types/alignment-matrix-control/types.d.ts +39 -0
  273. package/build-types/alignment-matrix-control/types.d.ts.map +1 -0
  274. package/build-types/alignment-matrix-control/utils.d.ts +33 -0
  275. package/build-types/alignment-matrix-control/utils.d.ts.map +1 -0
  276. package/build-types/base-control/hooks.d.ts +23 -0
  277. package/build-types/base-control/hooks.d.ts.map +1 -0
  278. package/build-types/base-control/index.d.ts +17 -7
  279. package/build-types/base-control/index.d.ts.map +1 -1
  280. package/build-types/base-control/stories/index.d.ts.map +1 -1
  281. package/build-types/base-control/test/index.d.ts +2 -0
  282. package/build-types/base-control/test/index.d.ts.map +1 -0
  283. package/build-types/base-control/types.d.ts +8 -2
  284. package/build-types/base-control/types.d.ts.map +1 -1
  285. package/build-types/base-field/hook.d.ts +7 -31
  286. package/build-types/base-field/hook.d.ts.map +1 -1
  287. package/build-types/base-field/index.d.ts +1 -1
  288. package/build-types/base-field/index.d.ts.map +1 -1
  289. package/build-types/base-field/styles.d.ts +5 -5
  290. package/build-types/base-field/styles.d.ts.map +1 -1
  291. package/build-types/base-field/test/index.d.ts +2 -0
  292. package/build-types/base-field/test/index.d.ts.map +1 -0
  293. package/build-types/base-field/types.d.ts +29 -0
  294. package/build-types/base-field/types.d.ts.map +1 -0
  295. package/build-types/border-box-control/border-box-control/component.d.ts +1 -1
  296. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  297. package/build-types/border-box-control/border-box-control/hook.d.ts +2 -3
  298. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  299. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +2 -2
  300. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts +1 -1
  301. package/build-types/border-box-control/border-box-control-split-controls/component.d.ts.map +1 -1
  302. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +2 -3
  303. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts.map +1 -1
  304. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +2 -2
  305. package/build-types/border-box-control/stories/index.d.ts +1 -1
  306. package/build-types/border-control/border-control/component.d.ts +1 -1
  307. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  308. package/build-types/border-control/border-control/hook.d.ts +2 -3
  309. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  310. package/build-types/border-control/border-control-dropdown/component.d.ts +1 -1
  311. package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
  312. package/build-types/border-control/border-control-dropdown/hook.d.ts +2 -3
  313. package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
  314. package/build-types/border-control/border-control-style-picker/hook.d.ts +2 -2
  315. package/build-types/border-control/stories/index.d.ts +6 -6
  316. package/build-types/border-control/stories/index.d.ts.map +1 -1
  317. package/build-types/border-control/styles.d.ts.map +1 -1
  318. package/build-types/border-control/types.d.ts +1 -1
  319. package/build-types/border-control/types.d.ts.map +1 -1
  320. package/build-types/card/card/hook.d.ts +2 -2
  321. package/build-types/card/card-body/hook.d.ts +2 -2
  322. package/build-types/card/card-divider/hook.d.ts +2 -2
  323. package/build-types/card/card-footer/hook.d.ts +2 -2
  324. package/build-types/card/card-header/hook.d.ts +2 -2
  325. package/build-types/card/card-media/hook.d.ts +2 -2
  326. package/build-types/color-palette/index.d.ts +3 -4
  327. package/build-types/color-palette/index.d.ts.map +1 -1
  328. package/build-types/color-palette/stories/index.d.ts +6 -14
  329. package/build-types/color-palette/stories/index.d.ts.map +1 -1
  330. package/build-types/color-palette/styles.d.ts +1 -1
  331. package/build-types/color-palette/types.d.ts +4 -17
  332. package/build-types/color-palette/types.d.ts.map +1 -1
  333. package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
  334. package/build-types/color-picker/styles.d.ts +5 -5
  335. package/build-types/color-picker/styles.d.ts.map +1 -1
  336. package/build-types/custom-select-control/index.d.ts.map +1 -1
  337. package/build-types/dashicon/index.d.ts +6 -20
  338. package/build-types/dashicon/index.d.ts.map +1 -1
  339. package/build-types/dashicon/types.d.ts +14 -0
  340. package/build-types/dashicon/types.d.ts.map +1 -1
  341. package/build-types/date-time/date/styles.d.ts +3 -3
  342. package/build-types/date-time/date-time/styles.d.ts +3 -3
  343. package/build-types/date-time/time/styles.d.ts +8 -8
  344. package/build-types/disabled/stories/index.d.ts.map +1 -1
  345. package/build-types/dropdown/index.d.ts +29 -1
  346. package/build-types/dropdown/index.d.ts.map +1 -1
  347. package/build-types/dropdown/stories/index.d.ts +23 -0
  348. package/build-types/dropdown/stories/index.d.ts.map +1 -0
  349. package/build-types/dropdown/test/index.d.ts +2 -0
  350. package/build-types/dropdown/test/index.d.ts.map +1 -0
  351. package/build-types/dropdown/types.d.ts +101 -0
  352. package/build-types/dropdown/types.d.ts.map +1 -1
  353. package/build-types/elevation/hook.d.ts +2 -2
  354. package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
  355. package/build-types/flex/flex/hook.d.ts +2 -2
  356. package/build-types/flex/flex-block/hook.d.ts +2 -2
  357. package/build-types/flex/flex-item/hook.d.ts +2 -2
  358. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +2 -5
  359. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts.map +1 -1
  360. package/build-types/grid/hook.d.ts +2 -2
  361. package/build-types/h-stack/component.d.ts +1 -1
  362. package/build-types/h-stack/hook.d.ts +2 -2
  363. package/build-types/heading/hook.d.ts +2 -2
  364. package/build-types/icon/stories/index.d.ts +22 -0
  365. package/build-types/icon/stories/index.d.ts.map +1 -0
  366. package/build-types/input-control/index.d.ts +1 -1
  367. package/build-types/input-control/index.d.ts.map +1 -1
  368. package/build-types/input-control/input-base.d.ts.map +1 -1
  369. package/build-types/input-control/stories/index.d.ts +1 -0
  370. package/build-types/input-control/stories/index.d.ts.map +1 -1
  371. package/build-types/input-control/types.d.ts +2 -1
  372. package/build-types/input-control/types.d.ts.map +1 -1
  373. package/build-types/item-group/item/hook.d.ts +2 -2
  374. package/build-types/item-group/item-group/hook.d.ts +2 -2
  375. package/build-types/modal/index.d.ts.map +1 -1
  376. package/build-types/modal/stories/index.d.ts.map +1 -1
  377. package/build-types/navigator/navigator-back-button/hook.d.ts +3 -3
  378. package/build-types/navigator/navigator-button/hook.d.ts +3 -3
  379. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  380. package/build-types/number-control/index.d.ts +2 -2
  381. package/build-types/number-control/index.d.ts.map +1 -1
  382. package/build-types/number-control/stories/index.d.ts +25 -0
  383. package/build-types/number-control/stories/index.d.ts.map +1 -0
  384. package/build-types/number-control/styles/number-control-styles.d.ts +6 -6
  385. package/build-types/number-control/styles/number-control-styles.d.ts.map +1 -1
  386. package/build-types/number-control/test/index.d.ts +2 -0
  387. package/build-types/number-control/test/index.d.ts.map +1 -0
  388. package/build-types/popover/index.d.ts +1 -1
  389. package/build-types/popover/index.d.ts.map +1 -1
  390. package/build-types/popover/stories/e2e/index.d.ts +1 -1
  391. package/build-types/range-control/index.d.ts +1 -1
  392. package/build-types/range-control/styles/range-control-styles.d.ts +2 -2
  393. package/build-types/resizable-box/resize-tooltip/index.d.ts +15 -19
  394. package/build-types/resizable-box/resize-tooltip/index.d.ts.map +1 -1
  395. package/build-types/resizable-box/resize-tooltip/label.d.ts +4 -3
  396. package/build-types/resizable-box/resize-tooltip/label.d.ts.map +1 -1
  397. package/build-types/scrollable/hook.d.ts +2 -2
  398. package/build-types/search-control/index.d.ts +1 -1
  399. package/build-types/search-control/stories/index.d.ts +2 -2
  400. package/build-types/snackbar/index.d.ts +19 -0
  401. package/build-types/snackbar/index.d.ts.map +1 -0
  402. package/build-types/snackbar/list.d.ts +18 -0
  403. package/build-types/snackbar/list.d.ts.map +1 -0
  404. package/build-types/snackbar/stories/index.d.ts +16 -0
  405. package/build-types/snackbar/stories/index.d.ts.map +1 -0
  406. package/build-types/snackbar/stories/list.d.ts +12 -0
  407. package/build-types/snackbar/stories/list.d.ts.map +1 -0
  408. package/build-types/snackbar/types.d.ts +111 -0
  409. package/build-types/snackbar/types.d.ts.map +1 -0
  410. package/build-types/spacer/hook.d.ts +2 -2
  411. package/build-types/spinner/index.d.ts +1 -1
  412. package/build-types/surface/hook.d.ts +2 -2
  413. package/build-types/tab-panel/index.d.ts +1 -1
  414. package/build-types/tab-panel/index.d.ts.map +1 -1
  415. package/build-types/tab-panel/types.d.ts +19 -1
  416. package/build-types/tab-panel/types.d.ts.map +1 -1
  417. package/build-types/text/hook.d.ts +2 -2
  418. package/build-types/text-control/index.d.ts +2 -2
  419. package/build-types/text-control/stories/index.d.ts.map +1 -1
  420. package/build-types/text-control/types.d.ts +1 -5
  421. package/build-types/text-control/types.d.ts.map +1 -1
  422. package/build-types/theme/color-algorithms.d.ts +20 -0
  423. package/build-types/theme/color-algorithms.d.ts.map +1 -0
  424. package/build-types/theme/index.d.ts +1 -1
  425. package/build-types/theme/index.d.ts.map +1 -1
  426. package/build-types/theme/stories/index.d.ts +4 -0
  427. package/build-types/theme/stories/index.d.ts.map +1 -1
  428. package/build-types/theme/styles.d.ts +3 -2
  429. package/build-types/theme/styles.d.ts.map +1 -1
  430. package/build-types/theme/test/color-algorithms.d.ts +2 -0
  431. package/build-types/theme/test/color-algorithms.d.ts.map +1 -0
  432. package/build-types/theme/types.d.ts +41 -3
  433. package/build-types/theme/types.d.ts.map +1 -1
  434. package/build-types/toggle-control/index.d.ts.map +1 -1
  435. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +2 -2
  436. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +2 -2
  437. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +1 -1
  438. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
  439. package/build-types/tools-panel/tools-panel/hook.d.ts +2 -2
  440. package/build-types/tools-panel/tools-panel-header/hook.d.ts +2 -2
  441. package/build-types/tools-panel/tools-panel-item/hook.d.ts +2 -2
  442. package/build-types/truncate/hook.d.ts +2 -2
  443. package/build-types/ui/context/context-system-provider.d.ts.map +1 -1
  444. package/build-types/ui/control-group/hook.d.ts +2 -2
  445. package/build-types/ui/control-label/hook.d.ts +2 -2
  446. package/build-types/ui/form-group/form-group.d.ts +2 -2
  447. package/build-types/ui/form-group/use-form-group.d.ts +5 -5
  448. package/build-types/unit-control/index.d.ts +2 -1
  449. package/build-types/unit-control/index.d.ts.map +1 -1
  450. package/build-types/unit-control/styles/unit-control-styles.d.ts +2 -2
  451. package/build-types/unit-control/types.d.ts +4 -0
  452. package/build-types/unit-control/types.d.ts.map +1 -1
  453. package/build-types/utils/config-values.d.ts +0 -2
  454. package/build-types/utils/hooks/use-controlled-value.d.ts +2 -1
  455. package/build-types/utils/hooks/use-controlled-value.d.ts.map +1 -1
  456. package/build-types/v-stack/component.d.ts +2 -2
  457. package/build-types/v-stack/hook.d.ts +2 -2
  458. package/build-types/v-stack/stories/index.d.ts +2 -2
  459. package/package.json +21 -20
  460. package/src/alignment-matrix-control/README.md +7 -7
  461. package/src/alignment-matrix-control/{cell.js → cell.tsx} +7 -1
  462. package/src/alignment-matrix-control/{icon.js → icon.tsx} +6 -3
  463. package/src/alignment-matrix-control/{index.js → index.tsx} +31 -4
  464. package/src/alignment-matrix-control/stories/{index.js → index.tsx} +17 -9
  465. package/src/alignment-matrix-control/styles/{alignment-matrix-control-icon-styles.js → alignment-matrix-control-icon-styles.ts} +11 -3
  466. package/src/alignment-matrix-control/styles/{alignment-matrix-control-styles.js → alignment-matrix-control-styles.ts} +13 -3
  467. package/src/alignment-matrix-control/test/{index.js → index.tsx} +5 -5
  468. package/src/alignment-matrix-control/types.ts +54 -0
  469. package/src/alignment-matrix-control/{utils.js → utils.tsx} +24 -14
  470. package/src/angle-picker-control/styles/angle-picker-control-styles.js +4 -0
  471. package/src/autocomplete/index.js +44 -15
  472. package/src/autocomplete/test/index.js +2 -0
  473. package/src/base-control/README.md +21 -12
  474. package/src/base-control/hooks.ts +45 -0
  475. package/src/base-control/index.tsx +18 -7
  476. package/src/base-control/stories/index.tsx +8 -10
  477. package/src/base-control/test/index.tsx +53 -0
  478. package/src/base-control/types.ts +8 -2
  479. package/src/base-field/README.md +21 -22
  480. package/src/base-field/{hook.js → hook.ts} +5 -15
  481. package/src/base-field/{index.js → index.ts} +0 -0
  482. package/src/base-field/{styles.js → styles.ts} +2 -2
  483. package/src/base-field/test/__snapshots__/{index.js.snap → index.tsx.snap} +4 -4
  484. package/src/base-field/test/{index.js → index.tsx} +10 -5
  485. package/src/base-field/types.ts +29 -0
  486. package/src/border-box-control/border-box-control/README.md +1 -0
  487. package/src/border-box-control/border-box-control/component.tsx +0 -7
  488. package/src/border-box-control/border-box-control/hook.ts +0 -2
  489. package/src/border-box-control/border-box-control-split-controls/component.tsx +0 -2
  490. package/src/border-box-control/border-box-control-split-controls/hook.ts +0 -2
  491. package/src/border-box-control/test/index.js +5 -1
  492. package/src/border-control/border-control/component.tsx +1 -4
  493. package/src/border-control/border-control/hook.ts +0 -2
  494. package/src/border-control/border-control-dropdown/component.tsx +11 -17
  495. package/src/border-control/border-control-dropdown/hook.ts +0 -2
  496. package/src/border-control/stories/index.tsx +0 -1
  497. package/src/border-control/styles.ts +1 -10
  498. package/src/border-control/test/index.js +70 -67
  499. package/src/border-control/types.ts +1 -4
  500. package/src/box-control/linked-button.js +8 -11
  501. package/src/box-control/test/index.js +207 -134
  502. package/src/button/stories/index.js +30 -0
  503. package/src/button/style.scss +17 -14
  504. package/src/button/test/index.js +32 -15
  505. package/src/card/test/index.tsx +32 -20
  506. package/src/checkbox-control/test/index.tsx +2 -0
  507. package/src/circular-option-picker/style.scss +1 -0
  508. package/src/color-palette/index.tsx +16 -18
  509. package/src/color-palette/stories/index.tsx +1 -18
  510. package/src/color-palette/test/__snapshots__/index.tsx.snap +4 -4
  511. package/src/color-palette/test/index.tsx +86 -36
  512. package/src/color-palette/types.ts +4 -18
  513. package/src/color-picker/README.md +1 -0
  514. package/src/color-picker/input-with-slider.tsx +1 -0
  515. package/src/color-picker/styles.ts +0 -4
  516. package/src/color-picker/test/index.js +2 -0
  517. package/src/combobox-control/test/index.js +2 -0
  518. package/src/confirm-dialog/README.md +3 -2
  519. package/src/confirm-dialog/test/index.js +2 -0
  520. package/src/custom-select-control/README.md +14 -0
  521. package/src/custom-select-control/index.js +14 -2
  522. package/src/dashicon/{index.js → index.tsx} +10 -4
  523. package/src/dashicon/types.ts +17 -0
  524. package/src/date-time/date/test/index.tsx +2 -0
  525. package/src/date-time/date-time/index.tsx +2 -2
  526. package/src/date-time/time/test/index.tsx +2 -0
  527. package/src/dimension-control/index.js +2 -3
  528. package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -8
  529. package/src/dimension-control/test/index.test.js +2 -0
  530. package/src/disabled/stories/index.tsx +6 -2
  531. package/src/disabled/test/index.tsx +23 -11
  532. package/src/dropdown/README.md +41 -46
  533. package/src/dropdown/{index.js → index.tsx} +57 -13
  534. package/src/dropdown/stories/{index.js → index.tsx} +21 -8
  535. package/src/dropdown/test/index.tsx +88 -0
  536. package/src/dropdown/types.ts +107 -0
  537. package/src/dropdown-menu/README.md +2 -3
  538. package/src/dropdown-menu/test/index.js +20 -12
  539. package/src/duotone-picker/duotone-picker.js +2 -2
  540. package/src/external-link/test/index.tsx +2 -0
  541. package/src/focal-point-picker/test/index.js +2 -0
  542. package/src/focal-point-picker/test/media.js +26 -21
  543. package/src/font-size-picker/test/index.tsx +2 -0
  544. package/src/form-file-upload/test/index.tsx +2 -0
  545. package/src/form-toggle/test/index.tsx +2 -0
  546. package/src/form-token-field/style.scss +1 -1
  547. package/src/form-token-field/test/index.tsx +3 -0
  548. package/src/gradient-picker/index.js +6 -10
  549. package/src/gradient-picker/stories/index.js +0 -1
  550. package/src/grid/test/grid.tsx +31 -31
  551. package/src/guide/test/index.js +2 -0
  552. package/src/higher-order/navigate-regions/index.js +5 -2
  553. package/src/higher-order/navigate-regions/style.scss +13 -59
  554. package/src/higher-order/with-fallback-styles/index.js +4 -2
  555. package/src/higher-order/with-filters/test/index.js +32 -43
  556. package/src/higher-order/with-focus-outside/test/index.js +2 -0
  557. package/src/higher-order/with-focus-return/test/index.js +3 -4
  558. package/src/higher-order/with-notices/test/index.js +1 -0
  559. package/src/icon/stories/index.tsx +103 -0
  560. package/src/index.js +2 -3
  561. package/src/input-control/index.tsx +42 -28
  562. package/src/input-control/input-base.tsx +8 -1
  563. package/src/input-control/stories/index.tsx +6 -0
  564. package/src/input-control/test/index.js +21 -0
  565. package/src/input-control/types.ts +2 -0
  566. package/src/isolated-event-container/test/index.js +2 -0
  567. package/src/mobile/bottom-sheet/cell.native.js +1 -1
  568. package/src/mobile/bottom-sheet/picker-cell.native.js +1 -6
  569. package/src/mobile/bottom-sheet/switch-cell.native.js +2 -2
  570. package/src/mobile/global-styles-context/index.native.js +9 -11
  571. package/src/mobile/global-styles-context/utils.native.js +17 -16
  572. package/src/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
  573. package/src/mobile/link-settings/test/edit.native.js +68 -124
  574. package/src/modal/index.tsx +11 -0
  575. package/src/modal/stories/index.tsx +3 -0
  576. package/src/modal/test/index.tsx +13 -0
  577. package/src/navigable-container/test/navigable-menu.js +2 -0
  578. package/src/navigable-container/test/tababble-container.js +2 -0
  579. package/src/navigation/stories/index.js +6 -6
  580. package/src/navigation/stories/{controlled-state.js → utils/controlled-state.js} +3 -3
  581. package/src/navigation/stories/{default.js → utils/default.js} +3 -3
  582. package/src/navigation/stories/{group.js → utils/group.js} +4 -4
  583. package/src/navigation/stories/{hide-if-empty.js → utils/hide-if-empty.js} +3 -3
  584. package/src/navigation/stories/{more-examples.js → utils/more-examples.js} +4 -4
  585. package/src/navigation/stories/{search.js → utils/search.js} +5 -5
  586. package/src/navigation/test/index.js +2 -0
  587. package/src/navigator/navigator-provider/component.tsx +13 -10
  588. package/src/navigator/test/index.tsx +2 -0
  589. package/src/notice/test/index.js +8 -3
  590. package/src/notice/test/list.js +8 -5
  591. package/src/number-control/stories/{index.js → index.tsx} +24 -7
  592. package/src/number-control/styles/{number-control-styles.js → number-control-styles.ts} +5 -3
  593. package/src/number-control/test/index.tsx +602 -0
  594. package/src/palette-edit/index.js +88 -39
  595. package/src/palette-edit/test/index.js +25 -1
  596. package/src/panel/test/__snapshots__/body.js.snap +9 -0
  597. package/src/panel/test/body.js +71 -62
  598. package/src/placeholder/test/index.tsx +3 -0
  599. package/src/popover/index.tsx +10 -2
  600. package/src/popover/style.scss +12 -11
  601. package/src/popover/test/index.tsx +25 -15
  602. package/src/query-controls/index.js +1 -0
  603. package/src/range-control/test/index.tsx +57 -60
  604. package/src/resizable-box/style.scss +1 -0
  605. package/src/sandbox/test/index.js +13 -11
  606. package/src/search-control/style.scss +4 -0
  607. package/src/select-control/test/select-control.tsx +2 -0
  608. package/src/snackbar/README.md +63 -8
  609. package/src/snackbar/{index.js → index.tsx} +46 -28
  610. package/src/snackbar/{list.js → list.tsx} +20 -21
  611. package/src/snackbar/stories/index.tsx +96 -0
  612. package/src/snackbar/stories/list.tsx +98 -0
  613. package/src/snackbar/types.ts +116 -0
  614. package/src/tab-panel/README.md +9 -0
  615. package/src/tab-panel/index.tsx +15 -5
  616. package/src/tab-panel/style.scss +46 -34
  617. package/src/tab-panel/test/index.tsx +113 -0
  618. package/src/tab-panel/types.ts +20 -1
  619. package/src/text/test/__snapshots__/index.tsx.snap +1 -0
  620. package/src/text/test/index.tsx +98 -46
  621. package/src/text-control/stories/index.tsx +0 -1
  622. package/src/text-control/types.ts +1 -6
  623. package/src/text-highlight/test/index.tsx +1 -0
  624. package/src/theme/README.md +32 -2
  625. package/src/theme/color-algorithms.ts +138 -0
  626. package/src/theme/index.tsx +23 -16
  627. package/src/theme/stories/index.tsx +67 -0
  628. package/src/theme/styles.ts +22 -17
  629. package/src/theme/test/color-algorithms.ts +100 -0
  630. package/src/theme/test/index.tsx +68 -35
  631. package/src/theme/types.ts +43 -3
  632. package/src/toggle-control/index.tsx +4 -2
  633. package/src/toggle-group-control/test/index.tsx +15 -2
  634. package/src/toolbar/style.scss +1 -1
  635. package/src/toolbar-group/test/index.js +10 -6
  636. package/src/tools-panel/stories/index.js +1 -1
  637. package/src/tools-panel/stories/{tools-panel-with-item-group-slot.js → utils/tools-panel-with-item-group-slot.js} +14 -11
  638. package/src/tools-panel/test/index.js +20 -14
  639. package/src/tooltip/README.md +7 -0
  640. package/src/tooltip/stories/index.js +68 -78
  641. package/src/tooltip/style.scss +2 -2
  642. package/src/tooltip/test/index.js +111 -18
  643. package/src/ui/context/context-system-provider.js +3 -2
  644. package/src/ui/context/test/context-system-provider.js +5 -4
  645. package/src/ui/control-label/test/index.js +3 -5
  646. package/src/unit-control/README.md +9 -1
  647. package/src/unit-control/index.tsx +3 -0
  648. package/src/unit-control/test/index.tsx +4 -0
  649. package/src/unit-control/types.ts +4 -0
  650. package/src/utils/colors-values.js +1 -1
  651. package/src/utils/config-values.js +0 -2
  652. package/src/utils/hooks/test/use-latest-ref.js +2 -0
  653. package/src/utils/hooks/use-controlled-value.ts +2 -2
  654. package/src/utils/theme-variables.scss +20 -0
  655. package/tsconfig.json +2 -4
  656. package/tsconfig.tsbuildinfo +1 -1
  657. package/src/dropdown/test/index.js +0 -98
  658. package/src/icon/stories/index.js +0 -128
  659. package/src/number-control/test/index.js +0 -478
  660. package/src/snackbar/stories/index.js +0 -89
@@ -9,6 +9,8 @@ import { render, screen } from '@testing-library/react';
9
9
  import Disabled from '../';
10
10
  import userEvent from '@testing-library/user-event';
11
11
 
12
+ jest.useFakeTimers();
13
+
12
14
  describe( 'Disabled', () => {
13
15
  const Form = () => (
14
16
  <form title="form">
@@ -18,48 +20,58 @@ describe( 'Disabled', () => {
18
20
  );
19
21
 
20
22
  it( 'will disable all fields', () => {
21
- const { container } = render(
22
- <Disabled>
23
+ render(
24
+ <Disabled data-testid="disabled-wrapper">
23
25
  <Form />
24
26
  </Disabled>
25
27
  );
26
28
 
27
- expect( container.firstChild ).toHaveAttribute( 'inert' );
29
+ expect( screen.getByTestId( 'disabled-wrapper' ) ).toHaveAttribute(
30
+ 'inert'
31
+ );
28
32
  } );
29
33
 
30
34
  it( 'should cleanly un-disable via reconciliation', () => {
31
35
  const MaybeDisable = ( { isDisabled = true } ) =>
32
36
  isDisabled ? (
33
- <Disabled>
37
+ <Disabled data-testid="disabled-wrapper">
34
38
  <Form />
35
39
  </Disabled>
36
40
  ) : (
37
41
  <Form />
38
42
  );
39
43
 
40
- const { container, rerender } = render( <MaybeDisable /> );
44
+ const { rerender } = render( <MaybeDisable /> );
41
45
 
42
- expect( container.firstChild ).toHaveAttribute( 'inert' );
46
+ expect( screen.getByTestId( 'disabled-wrapper' ) ).toHaveAttribute(
47
+ 'inert'
48
+ );
43
49
 
44
50
  rerender( <MaybeDisable isDisabled={ false } /> );
45
51
 
46
- expect( container.firstChild ).not.toHaveAttribute( 'inert' );
52
+ expect(
53
+ screen.queryByTestId( 'disabled-wrapper' )
54
+ ).not.toBeInTheDocument();
47
55
  } );
48
56
 
49
57
  it( 'will disable or enable descendant fields based on the isDisabled prop value', () => {
50
58
  const MaybeDisable = ( { isDisabled = true } ) => (
51
- <Disabled isDisabled={ isDisabled }>
59
+ <Disabled isDisabled={ isDisabled } data-testid="disabled-wrapper">
52
60
  <Form />
53
61
  </Disabled>
54
62
  );
55
63
 
56
- const { rerender, container } = render( <MaybeDisable /> );
64
+ const { rerender } = render( <MaybeDisable /> );
57
65
 
58
- expect( container.firstChild ).toHaveAttribute( 'inert' );
66
+ expect( screen.getByTestId( 'disabled-wrapper' ) ).toHaveAttribute(
67
+ 'inert'
68
+ );
59
69
 
60
70
  rerender( <MaybeDisable isDisabled={ false } /> );
61
71
 
62
- expect( container.firstChild ).not.toHaveAttribute( 'inert' );
72
+ expect( screen.getByTestId( 'disabled-wrapper' ) ).not.toHaveAttribute(
73
+ 'inert'
74
+ );
63
75
  } );
64
76
 
65
77
  it( 'should preserve input values when toggling the isDisabled prop', async () => {
@@ -32,96 +32,91 @@ const MyDropdown = () => (
32
32
 
33
33
  The component accepts the following props. Props not included in this set will be applied to the element wrapping Popover content.
34
34
 
35
- ### className
35
+ ### `className`: `string`
36
36
 
37
37
  className of the global container
38
38
 
39
- - Type: `String`
40
39
  - Required: No
41
40
 
42
- ### contentClassName
41
+ ### `contentClassName`: `string`
43
42
 
44
43
  If you want to target the dropdown menu for styling purposes, you need to provide a contentClassName because it's not being rendered as a child of the container node.
45
44
 
46
- - Type: `String`
47
45
  - Required: No
48
46
 
49
- ### position
47
+ ### `expandOnMobile`: `boolean`
50
48
 
51
- The direction in which the popover should open relative to its parent node. Specify a y- and an x-axis as a space-separated string. Supports `"top"`, `"bottom"` y-axis, and `"left"`, `"center"`, `"right"` x-axis.
49
+ Opt-in prop to show popovers fullscreen on mobile.
52
50
 
53
- - Type: `String`
54
51
  - Required: No
55
- - Default: `"top center"`
56
-
57
- ### renderToggle
58
-
59
- A callback invoked to render the Dropdown Toggle Button.
60
-
61
- - Type: `Function`
62
- - Required: Yes
52
+ - Default: `false`
63
53
 
64
- The first argument of the callback is an object containing the following properties:
54
+ ### `focusOnMount`: `'firstElement' | boolean`
65
55
 
66
- - `isOpen`: whether the dropdown menu is opened or not
67
- - `onToggle`: A function switching the dropdown menu's state from open to closed and vice versa
68
- - `onClose`: A function that closes the menu if invoked
56
+ By default, the _first tabbable element_ in the popover will receive focus when it mounts. This is the same as setting this prop to `"firstElement"`.
69
57
 
70
- ### renderContent
58
+ Specifying a `true` value will focus the container instead.
71
59
 
72
- A callback invoked to render the content of the dropdown menu. Its first argument is the same as the `renderToggle` prop.
60
+ Specifying a `false` value disables the focus handling entirely (this should only be done when an appropriately accessible substitute behavior exists).
73
61
 
74
- - Type: `Function`
75
- - Required: Yes
62
+ - Required: No
63
+ - Default: `"firstElement"`
76
64
 
77
- ### expandOnMobile
65
+ ### `headerTitle`: `string`
78
66
 
79
- Opt-in prop to show popovers fullscreen on mobile.
67
+ Set this to customize the text that is shown in the dropdown's header when it is fullscreen on mobile.
80
68
 
81
- - Type: `Boolean`
82
69
  - Required: No
83
- - Default: `false`
84
70
 
85
- ### headerTitle
71
+ ### `onClose`: `() => void`
86
72
 
87
- Set this to customize the text that is shown in the dropdown's header when it is fullscreen on mobile.
73
+ A callback invoked when the popover should be closed.
88
74
 
89
- - Type: `String`
90
75
  - Required: No
91
76
 
92
- ### focusOnMount
93
-
94
- By default, the _first tabbable element_ in the popover will receive focus when it mounts. This is the same as setting this prop to `"firstElement"`.
77
+ ### `onToggle`: `( willOpen: boolean ) => void`
95
78
 
96
- Specifying a `true` value will focus the container instead.
79
+ A callback invoked when the state of the popover changes from open to closed and vice versa.
97
80
 
98
- Specifying a `false` value disables the focus handling entirely (this should only be done when an appropriately accessible substitute behavior exists).
81
+ The callback receives a boolean as a parameter. If `true`, the popover will open. If `false`, the popover will close.
99
82
 
100
- - Type: `'firstElement' | boolean`
101
83
  - Required: No
102
- - Default: `"firstElement"`
103
84
 
104
- ### popoverProps
85
+ ### `popoverProps`: `WordPressComponentProps< Omit< PopoverProps, 'children' > 'div', false >`
105
86
 
106
87
  Properties of popoverProps object will be passed as props to the `Popover` component.
107
88
 
108
89
  Use this object to access properties/features of the `Popover` component that are not already exposed in the `Dropdown` component, e.g.: the ability to have the popover without an arrow.
109
90
 
110
- - Type: `Object`
111
91
  - Required: No
112
92
 
113
- ### onClose
93
+ ### `position`: `PopoverProps[ 'position' ]`
114
94
 
115
- A callback invoked when the popover should be closed.
95
+ The direction in which the popover should open relative to its parent node. Specify a y- and an x-axis as a space-separated string. Supports `"top"`, `"bottom"` y-axis, and `"left"`, `"center"`, `"right"` x-axis.
116
96
 
117
- - Type: `Function`
118
97
  - Required: No
98
+ - Default: `"top center"`
119
99
 
120
- ### onToggle
100
+ ### `renderContent`: `( props: CallbackProps ) => ReactNode`
121
101
 
122
- A callback invoked when the state of the popover changes from open to closed and vice versa.
102
+ A callback invoked to render the content of the dropdown menu.
123
103
 
124
- The callback receives a boolean as a parameter. If `true`, the popover will open. If `false`, the popover will close.
104
+ - `isOpen`: whether the dropdown menu is opened or not
105
+ - `onToggle`: A function switching the dropdown menu's state from open to closed and vice versa
106
+ - `onClose`: A function that closes the menu if invoked
107
+
108
+ - Required: Yes
109
+
110
+ ### `renderToggle`: `( props: CallbackProps ) => ReactNode`
111
+
112
+ A callback invoked to render the Dropdown Toggle Button.
113
+
114
+ Its props are the same as the `renderContent` props.
115
+
116
+ - Required: Yes
117
+
118
+ ### `style`: `React.CSSProperties`
119
+
120
+ The style of the global container
125
121
 
126
- - Type: `Function`
127
122
  - Required: No
@@ -1,35 +1,39 @@
1
- // @ts-nocheck
2
1
  /**
3
2
  * External dependencies
4
3
  */
5
4
  import classnames from 'classnames';
5
+ import type { ForwardedRef } from 'react';
6
6
 
7
7
  /**
8
8
  * WordPress dependencies
9
9
  */
10
- import { useRef, useEffect, useState } from '@wordpress/element';
10
+ import { forwardRef, useEffect, useRef, useState } from '@wordpress/element';
11
11
  import { useMergeRefs } from '@wordpress/compose';
12
12
 
13
13
  /**
14
14
  * Internal dependencies
15
15
  */
16
16
  import Popover from '../popover';
17
+ import type { DropdownProps } from './types';
17
18
 
18
- function useObservableState( initialState, onStateChange ) {
19
+ function useObservableState(
20
+ initialState: boolean,
21
+ onStateChange?: ( newState: boolean ) => void
22
+ ) {
19
23
  const [ state, setState ] = useState( initialState );
20
24
  return [
21
25
  state,
22
- ( value ) => {
26
+ ( value: boolean ) => {
23
27
  setState( value );
24
28
  if ( onStateChange ) {
25
29
  onStateChange( value );
26
30
  }
27
31
  },
28
- ];
32
+ ] as const;
29
33
  }
30
34
 
31
- export default function Dropdown( props ) {
32
- const {
35
+ function UnforwardedDropdown(
36
+ {
33
37
  renderContent,
34
38
  renderToggle,
35
39
  className,
@@ -42,12 +46,14 @@ export default function Dropdown( props ) {
42
46
  onClose,
43
47
  onToggle,
44
48
  style,
45
- } = props;
49
+ }: DropdownProps,
50
+ forwardedRef: ForwardedRef< any >
51
+ ) {
46
52
  // Use internal state instead of a ref to make sure that the component
47
53
  // re-renders when the popover's anchor updates.
48
54
  const [ fallbackPopoverAnchor, setFallbackPopoverAnchor ] =
49
- useState( null );
50
- const containerRef = useRef();
55
+ useState< HTMLDivElement | null >( null );
56
+ const containerRef = useRef< HTMLDivElement >();
51
57
  const [ isOpen, setIsOpen ] = useObservableState( false, onToggle );
52
58
 
53
59
  useEffect(
@@ -70,8 +76,13 @@ export default function Dropdown( props ) {
70
76
  * case a dialog has opened, allowing focus to return when it's dismissed.
71
77
  */
72
78
  function closeIfFocusOutside() {
79
+ if ( ! containerRef.current ) {
80
+ return;
81
+ }
82
+
73
83
  const { ownerDocument } = containerRef.current;
74
- const dialog = ownerDocument.activeElement.closest( '[role="dialog"]' );
84
+ const dialog =
85
+ ownerDocument?.activeElement?.closest( '[role="dialog"]' );
75
86
  if (
76
87
  ! containerRef.current.contains( ownerDocument.activeElement ) &&
77
88
  ( ! dialog || dialog.contains( containerRef.current ) )
@@ -99,11 +110,15 @@ export default function Dropdown( props ) {
99
110
  return (
100
111
  <div
101
112
  className={ classnames( 'components-dropdown', className ) }
102
- ref={ useMergeRefs( [ setFallbackPopoverAnchor, containerRef ] ) }
113
+ ref={ useMergeRefs( [
114
+ containerRef,
115
+ forwardedRef,
116
+ setFallbackPopoverAnchor,
117
+ ] ) }
103
118
  // Some UAs focus the closest focusable parent when the toggle is
104
119
  // clicked. Making this div focusable ensures such UAs will focus
105
120
  // it and `closeIfFocusOutside` can tell if the toggle was clicked.
106
- tabIndex="-1"
121
+ tabIndex={ -1 }
107
122
  style={ style }
108
123
  >
109
124
  { renderToggle( args ) }
@@ -136,3 +151,32 @@ export default function Dropdown( props ) {
136
151
  </div>
137
152
  );
138
153
  }
154
+
155
+ /**
156
+ * Renders a button that opens a floating content modal when clicked.
157
+ *
158
+ * ```jsx
159
+ * import { Button, Dropdown } from '@wordpress/components';
160
+ *
161
+ * const MyDropdown = () => (
162
+ * <Dropdown
163
+ * className="my-container-class-name"
164
+ * contentClassName="my-popover-content-classname"
165
+ * position="bottom right"
166
+ * renderToggle={ ( { isOpen, onToggle } ) => (
167
+ * <Button
168
+ * variant="primary"
169
+ * onClick={ onToggle }
170
+ * aria-expanded={ isOpen }
171
+ * >
172
+ * Toggle Popover!
173
+ * </Button>
174
+ * ) }
175
+ * renderContent={ () => <div>This is the content of the popover.</div> }
176
+ * />
177
+ * );
178
+ * ```
179
+ */
180
+ export const Dropdown = forwardRef( UnforwardedDropdown );
181
+
182
+ export default Dropdown;
@@ -1,29 +1,38 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+
1
6
  /**
2
7
  * Internal dependencies
3
8
  */
4
- import Dropdown from '../';
9
+ import Dropdown from '..';
5
10
  import Button from '../../button';
6
11
  import { DropdownContentWrapper } from '../dropdown-content-wrapper';
7
12
 
8
- export default {
13
+ const meta: ComponentMeta< typeof Dropdown > = {
9
14
  title: 'Components/Dropdown',
10
15
  component: Dropdown,
11
16
  subcomponents: { DropdownContentWrapper },
12
17
  argTypes: {
13
- expandOnMobile: { control: { type: 'boolean' } },
14
18
  focusOnMount: {
15
19
  control: {
16
20
  type: 'radio',
17
21
  options: [ 'firstElement', true, false ],
18
22
  },
19
23
  },
20
- headerTitle: { control: { type: 'text' } },
21
24
  renderContent: { control: { type: null } },
22
25
  renderToggle: { control: { type: null } },
23
26
  },
27
+ parameters: {
28
+ controls: {
29
+ expanded: true,
30
+ },
31
+ },
24
32
  };
33
+ export default meta;
25
34
 
26
- const Template = ( args ) => {
35
+ const Template: ComponentStory< typeof Dropdown > = ( args ) => {
27
36
  return (
28
37
  <div style={ { height: 150 } }>
29
38
  <Dropdown { ...args } />
@@ -31,7 +40,7 @@ const Template = ( args ) => {
31
40
  );
32
41
  };
33
42
 
34
- export const Default = Template.bind( {} );
43
+ export const Default: ComponentStory< typeof Dropdown > = Template.bind( {} );
35
44
  Default.args = {
36
45
  position: 'bottom right',
37
46
  renderToggle: ( { isOpen, onToggle } ) => (
@@ -46,7 +55,9 @@ Default.args = {
46
55
  * To apply more padding to the dropdown content, use the provided `<DropdownContentWrapper>`
47
56
  * convenience wrapper. A `paddingSize` of `"medium"` is suitable for relatively larger dropdowns (default is `"small"`).
48
57
  */
49
- export const WithMorePadding = Template.bind( {} );
58
+ export const WithMorePadding: ComponentStory< typeof Dropdown > = Template.bind(
59
+ {}
60
+ );
50
61
  WithMorePadding.args = {
51
62
  ...Default.args,
52
63
  renderContent: () => (
@@ -61,7 +72,9 @@ WithMorePadding.args = {
61
72
  * with a `paddingSize` of `"none"`. This can also serve as a clean foundation to add arbitrary
62
73
  * paddings, for example when child components already have padding on their own.
63
74
  */
64
- export const WithNoPadding = Template.bind( {} );
75
+ export const WithNoPadding: ComponentStory< typeof Dropdown > = Template.bind(
76
+ {}
77
+ );
65
78
  WithNoPadding.args = {
66
79
  ...Default.args,
67
80
  renderContent: () => (
@@ -0,0 +1,88 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen, waitFor } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import Dropdown from '..';
11
+
12
+ jest.useFakeTimers();
13
+
14
+ describe( 'Dropdown', () => {
15
+ it( 'should toggle the dropdown properly', async () => {
16
+ const user = userEvent.setup( {
17
+ advanceTimers: jest.advanceTimersByTime,
18
+ } );
19
+ const { unmount } = render(
20
+ <Dropdown
21
+ className="container"
22
+ contentClassName="content"
23
+ renderToggle={ ( { isOpen, onToggle } ) => (
24
+ <button aria-expanded={ isOpen } onClick={ onToggle }>
25
+ Toggle
26
+ </button>
27
+ ) }
28
+ renderContent={ () => <span>test</span> }
29
+ />
30
+ );
31
+
32
+ const button = screen.getByRole( 'button', { expanded: false } );
33
+
34
+ expect( button ).toBeVisible();
35
+ expect( screen.queryByText( 'test' ) ).not.toBeInTheDocument();
36
+
37
+ await user.click( button );
38
+
39
+ expect(
40
+ screen.getByRole( 'button', { expanded: true } )
41
+ ).toBeVisible();
42
+
43
+ await waitFor( () =>
44
+ expect( screen.queryByText( 'test' ) ).toBeVisible()
45
+ );
46
+
47
+ // Cleanup remaining effects, like the delayed popover positioning
48
+ unmount();
49
+ } );
50
+
51
+ it( 'should close the dropdown when calling onClose', async () => {
52
+ const user = userEvent.setup( {
53
+ advanceTimers: jest.advanceTimersByTime,
54
+ } );
55
+ render(
56
+ <Dropdown
57
+ className="container"
58
+ contentClassName="content"
59
+ renderToggle={ ( { isOpen, onToggle, onClose } ) => [
60
+ <button
61
+ key="open"
62
+ className="open"
63
+ aria-expanded={ isOpen }
64
+ onClick={ onToggle }
65
+ >
66
+ Toggle
67
+ </button>,
68
+ <button key="close" className="close" onClick={ onClose }>
69
+ close
70
+ </button>,
71
+ ] }
72
+ renderContent={ () => <span>test</span> }
73
+ />
74
+ );
75
+
76
+ expect( screen.queryByText( 'test' ) ).not.toBeInTheDocument();
77
+
78
+ await user.click( screen.getByRole( 'button', { name: 'Toggle' } ) );
79
+
80
+ await waitFor( () =>
81
+ expect( screen.getByText( 'test' ) ).toBeVisible()
82
+ );
83
+
84
+ await user.click( screen.getByRole( 'button', { name: 'close' } ) );
85
+
86
+ expect( screen.queryByText( 'test' ) ).not.toBeInTheDocument();
87
+ } );
88
+ } );
@@ -1,3 +1,20 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentPropsWithoutRef, CSSProperties, ReactNode } from 'react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import type Popover from '../popover';
10
+ import type { PopoverProps } from '../popover/types';
11
+
12
+ type CallbackProps = {
13
+ isOpen: boolean;
14
+ onToggle: () => void;
15
+ onClose: () => void;
16
+ };
17
+
1
18
  export type DropdownContentWrapperProps = {
2
19
  /**
3
20
  * Amount of padding to apply on the dropdown content.
@@ -6,3 +23,93 @@ export type DropdownContentWrapperProps = {
6
23
  */
7
24
  paddingSize?: 'none' | 'small' | 'medium';
8
25
  };
26
+
27
+ export type DropdownProps = {
28
+ /**
29
+ * The className of the global container.
30
+ */
31
+ className?: string;
32
+ /**
33
+ * If you want to target the dropdown menu for styling purposes,
34
+ * you need to provide a contentClassName because it's not being rendered
35
+ * as a child of the container node.
36
+ */
37
+ contentClassName?: string;
38
+ /**
39
+ * Opt-in prop to show popovers fullscreen on mobile.
40
+ *
41
+ * @default false
42
+ */
43
+ expandOnMobile?: boolean;
44
+ /**
45
+ * By default, the first tabbable element in the popover will receive focus
46
+ * when it mounts. This is the same as setting this prop to "firstElement".
47
+ * Specifying a true value will focus the container instead.
48
+ * Specifying a false value disables the focus handling entirely
49
+ * (this should only be done when an appropriately accessible
50
+ * substitute behavior exists).
51
+ *
52
+ * @default 'firstElement'
53
+ */
54
+ focusOnMount?: 'firstElement' | boolean;
55
+ /**
56
+ * Set this to customize the text that is shown in the dropdown's header
57
+ * when it is fullscreen on mobile.
58
+ */
59
+ headerTitle?: string;
60
+ /**
61
+ * A callback invoked when the popover should be closed.
62
+ */
63
+ onClose?: () => void;
64
+ /**
65
+ * A callback invoked when the state of the popover changes
66
+ * from open to closed and vice versa.
67
+ * The callback receives a boolean as a parameter.
68
+ * If true, the popover will open.
69
+ * If false, the popover will close.
70
+ */
71
+ onToggle?: ( willOpen: boolean ) => void;
72
+ /**
73
+ * Properties of popoverProps object will be passed as props
74
+ * to the Popover component.
75
+ * Use this object to access properties/features
76
+ * of the Popover component that are not already exposed
77
+ * in the Dropdown component,
78
+ * e.g.: the ability to have the popover without an arrow.
79
+ */
80
+ popoverProps?: Omit<
81
+ ComponentPropsWithoutRef< typeof Popover >,
82
+ 'children'
83
+ >;
84
+ /**
85
+ * The direction in which the popover should open
86
+ * relative to its parent node.
87
+ * Specify a y- and an x-axis as a space-separated string.
88
+ * Supports "top", "bottom" y-axis,
89
+ * and "left", "center", "right" x-axis.
90
+ *
91
+ * @default 'top center'
92
+ */
93
+ position?: PopoverProps[ 'position' ];
94
+ /**
95
+ * A callback invoked to render the content of the dropdown menu.
96
+ * Its first argument is the same as the renderToggle prop.
97
+ */
98
+ renderContent: ( props: CallbackProps ) => ReactNode;
99
+ /**
100
+ * A callback invoked to render the Dropdown Toggle Button.
101
+ *
102
+ * The first argument of the callback is an object
103
+ * containing the following properties:
104
+ *
105
+ * - isOpen: whether the dropdown menu is opened or not
106
+ * - onToggle: A function switching the dropdown menu's state
107
+ * from open to closed and vice versa
108
+ * - onClose: A function that closes the menu if invoked
109
+ */
110
+ renderToggle: ( props: CallbackProps ) => ReactNode;
111
+ /**
112
+ * The style of the global container.
113
+ */
114
+ style?: CSSProperties;
115
+ };
@@ -101,14 +101,13 @@ const MyDropdownMenu = () => (
101
101
  Alternatively, specify a `children` function which returns elements valid for use in a DropdownMenu: `MenuItem`, `MenuItemsChoice`, or `MenuGroup`.
102
102
 
103
103
  ```jsx
104
- import { Fragment } from '@wordpress/element';
105
104
  import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
106
105
  import { more, arrowUp, arrowDown, trash } from '@wordpress/icons';
107
106
 
108
107
  const MyDropdownMenu = () => (
109
108
  <DropdownMenu icon={ more } label="Select a direction">
110
109
  { ( { onClose } ) => (
111
- <Fragment>
110
+ <>
112
111
  <MenuGroup>
113
112
  <MenuItem icon={ arrowUp } onClick={ onClose }>
114
113
  Move Up
@@ -122,7 +121,7 @@ const MyDropdownMenu = () => (
122
121
  Remove
123
122
  </MenuItem>
124
123
  </MenuGroup>
125
- </Fragment>
124
+ </>
126
125
  ) }
127
126
  </DropdownMenu>
128
127
  );