@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
@@ -2,20 +2,25 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
+ /**
6
+ * Internal dependencies
7
+ */
8
+ import type { AlignmentMatrixControlValue } from './types';
5
9
 
6
- export const GRID = [
10
+ export const GRID: AlignmentMatrixControlValue[][] = [
7
11
  [ 'top left', 'top center', 'top right' ],
8
12
  [ 'center left', 'center center', 'center right' ],
9
13
  [ 'bottom left', 'bottom center', 'bottom right' ],
10
14
  ];
11
15
 
12
16
  // Stored as map as i18n __() only accepts strings (not variables)
13
- export const ALIGNMENT_LABEL = {
17
+ export const ALIGNMENT_LABEL: Record< AlignmentMatrixControlValue, string > = {
14
18
  'top left': __( 'Top Left' ),
15
19
  'top center': __( 'Top Center' ),
16
20
  'top right': __( 'Top Right' ),
17
21
  'center left': __( 'Center Left' ),
18
22
  'center center': __( 'Center Center' ),
23
+ center: __( 'Center Center' ),
19
24
  'center right': __( 'Center Right' ),
20
25
  'bottom left': __( 'Bottom Left' ),
21
26
  'bottom center': __( 'Bottom Center' ),
@@ -28,25 +33,28 @@ export const ALIGNMENTS = GRID.flat();
28
33
  /**
29
34
  * Parses and transforms an incoming value to better match the alignment values
30
35
  *
31
- * @param {string} value An alignment value to parse.
36
+ * @param value An alignment value to parse.
32
37
  *
33
- * @return {string} The parsed value.
38
+ * @return The parsed value.
34
39
  */
35
- export function transformValue( value ) {
40
+ export function transformValue( value: AlignmentMatrixControlValue ) {
36
41
  const nextValue = value === 'center' ? 'center center' : value;
37
42
 
38
- return nextValue.replace( '-', ' ' );
43
+ return nextValue.replace( '-', ' ' ) as AlignmentMatrixControlValue;
39
44
  }
40
45
 
41
46
  /**
42
47
  * Creates an item ID based on a prefix ID and an alignment value.
43
48
  *
44
- * @param {string} prefixId An ID to prefix.
45
- * @param {string} value An alignment value.
49
+ * @param prefixId An ID to prefix.
50
+ * @param value An alignment value.
46
51
  *
47
- * @return {string} The item id.
52
+ * @return The item id.
48
53
  */
49
- export function getItemId( prefixId, value ) {
54
+ export function getItemId(
55
+ prefixId: string,
56
+ value: AlignmentMatrixControlValue
57
+ ) {
50
58
  const valueId = transformValue( value ).replace( ' ', '-' );
51
59
 
52
60
  return `${ prefixId }-${ valueId }`;
@@ -55,12 +63,14 @@ export function getItemId( prefixId, value ) {
55
63
  /**
56
64
  * Retrieves the alignment index from a value.
57
65
  *
58
- * @param {string} alignment Value to check.
66
+ * @param alignment Value to check.
59
67
  *
60
- * @return {number} The index of a matching alignment.
68
+ * @return The index of a matching alignment.
61
69
  */
62
- export function getAlignmentIndex( alignment = 'center' ) {
63
- const item = transformValue( alignment ).replace( '-', ' ' );
70
+ export function getAlignmentIndex(
71
+ alignment: AlignmentMatrixControlValue = 'center'
72
+ ) {
73
+ const item = transformValue( alignment );
64
74
  const index = ALIGNMENTS.indexOf( item );
65
75
 
66
76
  return index > -1 ? index : undefined;
@@ -42,6 +42,10 @@ export const CircleIndicatorWrapper = styled.div`
42
42
  position: relative;
43
43
  width: 100%;
44
44
  height: 100%;
45
+
46
+ :focus-visible {
47
+ outline: none;
48
+ }
45
49
  `;
46
50
 
47
51
  export const CircleIndicator = styled.div`
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { find } from 'lodash';
5
4
  import removeAccents from 'remove-accents';
6
5
 
7
6
  /**
@@ -290,8 +289,7 @@ function useAutocomplete( {
290
289
  const textAfterSelection = getTextContent(
291
290
  slice( record, undefined, getTextContent( record ).length )
292
291
  );
293
- const completer = find(
294
- completers,
292
+ const completer = completers?.find(
295
293
  ( { triggerPrefix, allowContext } ) => {
296
294
  const index = text.lastIndexOf( triggerPrefix );
297
295
 
@@ -415,26 +413,57 @@ function useAutocomplete( {
415
413
  }
416
414
 
417
415
  export function useAutocompleteProps( options ) {
416
+ const [ isVisible, setIsVisible ] = useState( false );
418
417
  const ref = useRef();
418
+ const recordAfterInput = useRef();
419
419
  const onKeyDownRef = useRef();
420
420
  const { popover, listBoxId, activeId, onKeyDown } = useAutocomplete( {
421
421
  ...options,
422
422
  contentRef: ref,
423
423
  } );
424
424
  onKeyDownRef.current = onKeyDown;
425
+
426
+ useEffect( () => {
427
+ if ( isVisible ) {
428
+ if ( ! recordAfterInput.current ) {
429
+ recordAfterInput.current = options.record;
430
+ } else if (
431
+ recordAfterInput.current.start !== options.record.start ||
432
+ recordAfterInput.current.end !== options.record.end
433
+ ) {
434
+ setIsVisible( false );
435
+ recordAfterInput.current = null;
436
+ }
437
+ }
438
+ // eslint-disable-next-line react-hooks/exhaustive-deps
439
+ }, [ options.record ] );
440
+
441
+ const mergedRefs = useMergeRefs( [
442
+ ref,
443
+ useRefEffect( ( element ) => {
444
+ function _onKeyDown( event ) {
445
+ onKeyDownRef.current( event );
446
+ }
447
+ function _onInput() {
448
+ // Only show auto complete UI if the user is inputting text.
449
+ setIsVisible( true );
450
+ recordAfterInput.current = null;
451
+ }
452
+ element.addEventListener( 'keydown', _onKeyDown );
453
+ element.addEventListener( 'input', _onInput );
454
+ return () => {
455
+ element.removeEventListener( 'keydown', _onKeyDown );
456
+ element.removeEventListener( 'input', _onInput );
457
+ };
458
+ }, [] ),
459
+ ] );
460
+
461
+ if ( ! isVisible ) {
462
+ return { ref: mergedRefs };
463
+ }
464
+
425
465
  return {
426
- ref: useMergeRefs( [
427
- ref,
428
- useRefEffect( ( element ) => {
429
- function _onKeyDown( event ) {
430
- onKeyDownRef.current( event );
431
- }
432
- element.addEventListener( 'keydown', _onKeyDown );
433
- return () => {
434
- element.removeEventListener( 'keydown', _onKeyDown );
435
- };
436
- }, [] ),
437
- ] ),
466
+ ref: mergedRefs,
438
467
  children: popover,
439
468
  'aria-autocomplete': listBoxId ? 'list' : undefined,
440
469
  'aria-owns': listBoxId,
@@ -14,6 +14,8 @@ import { useRef } from '@wordpress/element';
14
14
  */
15
15
  import { getAutoCompleterUI } from '../autocompleter-ui';
16
16
 
17
+ jest.useFakeTimers();
18
+
17
19
  describe( 'AutocompleterUI', () => {
18
20
  describe( 'click outside behavior', () => {
19
21
  it( 'should call reset function when a click on another element occurs', async () => {
@@ -4,16 +4,23 @@
4
4
 
5
5
  ## Usage
6
6
 
7
- Render a `BaseControl` for a textarea input:
8
-
9
7
  ```jsx
10
- import { BaseControl } from '@wordpress/components';
11
-
12
- // The `id` prop is necessary to accessibly associate the label with the textarea
13
- const MyBaseControl = () => (
14
- <BaseControl id="textarea-1" label="Text" help="Enter some text" __nextHasNoMarginBottom={ true }>
15
- <textarea id="textarea-1" />
16
- </BaseControl>
8
+ import { BaseControl, useBaseControlProps } from '@wordpress/components';
9
+
10
+ // Render a `BaseControl` for a textarea input
11
+ const MyCustomTextareaControl = ({ children, ...baseProps }) => (
12
+ // `useBaseControlProps` is a convenience hook to get the props for the `BaseControl`
13
+ // and the inner control itself. Namely, it takes care of generating a unique `id`,
14
+ // properly associating it with the `label` and `help` elements.
15
+ const { baseControlProps, controlProps } = useBaseControlProps( baseProps );
16
+
17
+ return (
18
+ <BaseControl { ...baseControlProps } __nextHasNoMarginBottom={ true }>
19
+ <textarea { ...controlProps }>
20
+ { children }
21
+ </textarea>
22
+ </BaseControl>
23
+ );
17
24
  );
18
25
  ```
19
26
 
@@ -23,7 +30,9 @@ The component accepts the following props:
23
30
 
24
31
  ### id
25
32
 
26
- The HTML `id` of the element (passed in as a child to `BaseControl`) to which labels and help text are being generated. This is necessary to accessibly associate the label with that element.
33
+ The HTML `id` of the control element (passed in as a child to `BaseControl`) to which labels and help text are being generated. This is necessary to accessibly associate the label with that element.
34
+
35
+ The recommended way is to use the `useBaseControlProps` hook, which takes care of generating a unique `id` for you. Otherwise, if you choose to pass an explicit `id` to this prop, you are responsible for ensuring the uniqueness of the `id`.
27
36
 
28
37
  - Type: `String`
29
38
  - Required: No
@@ -44,9 +53,9 @@ If true, the label will only be visible to screen readers.
44
53
 
45
54
  ### help
46
55
 
47
- If this property is added, a help text will be generated using help property as the content.
56
+ Additional description for the control. It is preferable to use plain text for `help`, as it can be accessibly associated with the control using `aria-describedby`. When the `help` contains links, or otherwise non-plain text content, it will be associated with the control using `aria-details`.
48
57
 
49
- - Type: `String|WPElement`
58
+ - Type: `ReactNode`
50
59
  - Required: No
51
60
 
52
61
  ### className
@@ -0,0 +1,45 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useInstanceId } from '@wordpress/compose';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import BaseControl from '.';
10
+ import type { BaseControlProps } from './types';
11
+
12
+ /**
13
+ * Generate props for the `BaseControl` and the inner control itself.
14
+ *
15
+ * Namely, it takes care of generating a unique `id`, properly associating it with the `label` and `help` elements.
16
+ *
17
+ * @param props
18
+ */
19
+ export function useBaseControlProps(
20
+ props: Omit< BaseControlProps, 'children' >
21
+ ) {
22
+ const { help, id: preferredId, ...restProps } = props;
23
+
24
+ const uniqueId = useInstanceId(
25
+ BaseControl,
26
+ 'wp-components-base-control',
27
+ preferredId
28
+ );
29
+
30
+ // ARIA descriptions can only contain plain text, so fall back to aria-details if not.
31
+ const helpPropName =
32
+ typeof help === 'string' ? 'aria-describedby' : 'aria-details';
33
+
34
+ return {
35
+ baseControlProps: {
36
+ id: uniqueId,
37
+ help,
38
+ ...restProps,
39
+ },
40
+ controlProps: {
41
+ id: uniqueId,
42
+ ...( !! help ? { [ helpPropName ]: `${ uniqueId }__help` } : {} ),
43
+ },
44
+ };
45
+ }
@@ -17,19 +17,30 @@ import {
17
17
  } from './styles/base-control-styles';
18
18
  import type { WordPressComponentProps } from '../ui/context';
19
19
 
20
+ export { useBaseControlProps } from './hooks';
21
+
20
22
  /**
21
23
  * `BaseControl` is a component used to generate labels and help text for components handling user inputs.
22
24
  *
23
- * @example
25
+ * ```jsx
26
+ * import { BaseControl, useBaseControlProps } from '@wordpress/components';
27
+ *
24
28
  * // Render a `BaseControl` for a textarea input
25
- * import { BaseControl } from '@wordpress/components';
29
+ * const MyCustomTextareaControl = ({ children, ...baseProps }) => (
30
+ * // `useBaseControlProps` is a convenience hook to get the props for the `BaseControl`
31
+ * // and the inner control itself. Namely, it takes care of generating a unique `id`,
32
+ * // properly associating it with the `label` and `help` elements.
33
+ * const { baseControlProps, controlProps } = useBaseControlProps( baseProps );
26
34
  *
27
- * // The `id` prop is necessary to accessibly associate the label with the textarea
28
- * const MyBaseControl = () => (
29
- * <BaseControl id="textarea-1" label="Text" help="Enter some text" __nextHasNoMarginBottom={ true }>
30
- * <textarea id="textarea-1" />
31
- * </BaseControl>
35
+ * return (
36
+ * <BaseControl { ...baseControlProps } __nextHasNoMarginBottom={ true }>
37
+ * <textarea { ...controlProps }>
38
+ * { children }
39
+ * </textarea>
40
+ * </BaseControl>
41
+ * );
32
42
  * );
43
+ * ```
33
44
  */
34
45
  export const BaseControl = ( {
35
46
  __nextHasNoMarginBottom = false,
@@ -6,7 +6,7 @@ import type { ComponentMeta, ComponentStory } from '@storybook/react';
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
- import BaseControl from '..';
9
+ import BaseControl, { useBaseControlProps } from '..';
10
10
  import Button from '../../button';
11
11
 
12
12
  const meta: ComponentMeta< typeof BaseControl > = {
@@ -24,13 +24,14 @@ const meta: ComponentMeta< typeof BaseControl > = {
24
24
  };
25
25
  export default meta;
26
26
 
27
- const BaseControlWithTextarea: ComponentStory< typeof BaseControl > = ( {
28
- id,
29
- ...props
30
- } ) => {
27
+ const BaseControlWithTextarea: ComponentStory< typeof BaseControl > = (
28
+ props
29
+ ) => {
30
+ const { baseControlProps, controlProps } = useBaseControlProps( props );
31
+
31
32
  return (
32
- <BaseControl id={ id } { ...props }>
33
- <textarea style={ { display: 'block' } } id={ id } />
33
+ <BaseControl { ...baseControlProps }>
34
+ <textarea style={ { display: 'block' } } { ...controlProps } />
34
35
  </BaseControl>
35
36
  );
36
37
  };
@@ -39,14 +40,12 @@ export const Default: ComponentStory< typeof BaseControl > =
39
40
  BaseControlWithTextarea.bind( {} );
40
41
  Default.args = {
41
42
  __nextHasNoMarginBottom: true,
42
- id: 'textarea-default-1',
43
43
  label: 'Label text',
44
44
  };
45
45
 
46
46
  export const WithHelpText = BaseControlWithTextarea.bind( {} );
47
47
  WithHelpText.args = {
48
48
  ...Default.args,
49
- id: 'textarea-with-help-text-1',
50
49
  help: 'Help text adds more explanation.',
51
50
  };
52
51
 
@@ -75,6 +74,5 @@ export const WithVisualLabel: ComponentStory< typeof BaseControl > = (
75
74
  WithVisualLabel.args = {
76
75
  ...Default.args,
77
76
  help: 'This button is already accessibly labeled.',
78
- id: undefined,
79
77
  label: undefined,
80
78
  };
@@ -0,0 +1,53 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { render, screen } from '@testing-library/react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import BaseControl from '..';
10
+ import { useBaseControlProps } from '../hooks';
11
+ import type { BaseControlProps } from '../types';
12
+
13
+ const MyBaseControl = ( props: Omit< BaseControlProps, 'children' > ) => {
14
+ const { baseControlProps, controlProps } = useBaseControlProps( props );
15
+
16
+ return (
17
+ <BaseControl { ...baseControlProps } __nextHasNoMarginBottom={ true }>
18
+ <textarea { ...controlProps } />
19
+ </BaseControl>
20
+ );
21
+ };
22
+
23
+ describe( 'BaseControl', () => {
24
+ it( 'should render help text as description', () => {
25
+ render( <MyBaseControl label="Text" help="My help text" /> );
26
+
27
+ expect(
28
+ screen.getByRole( 'textbox', {
29
+ description: 'My help text',
30
+ } )
31
+ ).toBeInTheDocument();
32
+ } );
33
+
34
+ it( 'should render help as aria-details when not plain text', () => {
35
+ render(
36
+ <MyBaseControl
37
+ label="Text"
38
+ help={ <a href="/foo">My help text</a> }
39
+ />
40
+ );
41
+
42
+ const textarea = screen.getByRole( 'textbox' );
43
+ const help = screen.getByRole( 'link', {
44
+ name: 'My help text',
45
+ } );
46
+
47
+ expect( textarea ).toHaveAttribute( 'aria-details' );
48
+ expect(
49
+ // eslint-disable-next-line testing-library/no-node-access
50
+ help.closest( `#${ textarea.getAttribute( 'aria-details' ) }` )
51
+ ).toBeVisible();
52
+ } );
53
+ } );
@@ -11,12 +11,18 @@ export type BaseControlProps = {
11
11
  */
12
12
  __nextHasNoMarginBottom?: boolean;
13
13
  /**
14
- * The HTML `id` of the element (passed in as a child to `BaseControl`) to which labels and help text are being generated.
14
+ * The HTML `id` of the control element (passed in as a child to `BaseControl`) to which labels and help text are being generated.
15
15
  * This is necessary to accessibly associate the label with that element.
16
+ *
17
+ * The recommended way is to use the `useBaseControlProps` hook, which takes care of generating a unique `id` for you.
18
+ * Otherwise, if you choose to pass an explicit `id` to this prop, you are responsible for ensuring the uniqueness of the `id`.
16
19
  */
17
20
  id?: string;
18
21
  /**
19
- * If this property is added, a help text will be generated using help property as the content.
22
+ * Additional description for the control.
23
+ *
24
+ * It is preferable to use plain text for `help`, as it can be accessibly associated with the control using `aria-describedby`.
25
+ * When the `help` contains links, or otherwise non-plain text content, it will be associated with the control using `aria-details`.
20
26
  */
21
27
  help?: ReactNode;
22
28
  /**
@@ -12,37 +12,25 @@ This feature is still experimental. “Experimental” means this is an early im
12
12
 
13
13
  ```js
14
14
  function useExampleField( props ) {
15
- const {
16
- as = 'input',
17
- ...baseProps,
18
- } = useBaseField( props );
15
+ const { as = 'input', ...baseProps } = useBaseField( props );
19
16
 
20
17
  const inputProps = {
21
18
  as,
22
19
  // more cool stuff here
23
- }
20
+ };
24
21
 
25
22
  return { inputProps, ...baseProps };
26
23
  }
27
24
 
28
25
  function ExampleField( props, forwardRef ) {
29
- const {
30
- preFix,
31
- affix,
32
- disabled,
33
- inputProps,
34
- ...baseProps
35
- } = useExampleField( props );
26
+ const { preFix, affix, disabled, inputProps, ...baseProps } =
27
+ useExampleField( props );
36
28
 
37
29
  return (
38
30
  <View { ...baseProps } disabled={ disabled }>
39
- {preFix}
40
- <View
41
- autocomplete="off"
42
- { ...inputProps }
43
- disabled={ disabled }
44
- />
45
- {affix}
31
+ { preFix }
32
+ <View autocomplete="off" { ...inputProps } disabled={ disabled } />
33
+ { affix }
46
34
  </View>
47
35
  );
48
36
  }
@@ -50,18 +38,29 @@ function ExampleField( props, forwardRef ) {
50
38
 
51
39
  ## Props
52
40
 
41
+ ### `disabled`: `boolean`
42
+
43
+ Whether the field is disabled.
44
+
45
+ - Required: No
46
+
53
47
  ### `hasError`: `boolean`
54
48
 
55
49
  Renders an error style around the component.
56
50
 
57
- ### `disabled`: `boolean`
58
-
59
- Whether the field is disabled.
51
+ - Required: No
52
+ - Default: `false`
60
53
 
61
54
  ### `isInline`: `boolean`
62
55
 
63
56
  Renders a component that can be inlined in some text.
64
57
 
58
+ - Required: No
59
+ - Default: `false`
60
+
65
61
  ### `isSubtle`: `boolean`
66
62
 
67
63
  Renders a subtle variant of the component.
64
+
65
+ - Required: No
66
+ - Default: `false`
@@ -6,26 +6,16 @@ import { useMemo } from '@wordpress/element';
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
- import { useContextSystem } from '../ui/context';
9
+ import { useContextSystem, WordPressComponentProps } from '../ui/context';
10
10
  import { useControlGroupContext } from '../ui/control-group';
11
11
  import { useFlex } from '../flex';
12
12
  import * as styles from './styles';
13
13
  import { useCx } from '../utils/hooks/use-cx';
14
+ import type { BaseFieldProps } from './types';
14
15
 
15
- /**
16
- * @typedef OwnProps
17
- * @property {boolean} [hasError=false] Renders an error.
18
- * @property {boolean} [disabled] Whether the field is disabled.
19
- * @property {boolean} [isInline=false] Renders as an inline element (layout).
20
- * @property {boolean} [isSubtle=false] Renders a subtle variant.
21
- */
22
-
23
- /** @typedef {import('../flex/types').FlexProps & OwnProps} Props */
24
-
25
- /**
26
- * @param {import('../ui/context').WordPressComponentProps<Props, 'div'>} props
27
- */
28
- export function useBaseField( props ) {
16
+ export function useBaseField(
17
+ props: WordPressComponentProps< BaseFieldProps, 'div' >
18
+ ) {
29
19
  const {
30
20
  className,
31
21
  hasError = false,
File without changes
@@ -13,7 +13,7 @@ export const BaseField = css`
13
13
  background: ${ CONFIG.controlBackgroundColor };
14
14
  border-radius: ${ CONFIG.controlBorderRadius };
15
15
  border: 1px solid;
16
- border-color: ${ CONFIG.controlBorderColor };
16
+ border-color: ${ COLORS.ui.border };
17
17
  box-shadow: ${ CONFIG.controlBoxShadow };
18
18
  display: flex;
19
19
  flex: 1;
@@ -30,7 +30,7 @@ export const BaseField = css`
30
30
  }
31
31
 
32
32
  &:hover {
33
- border-color: ${ CONFIG.controlBorderColorHover };
33
+ border-color: ${ COLORS.ui.borderHover };
34
34
  }
35
35
 
36
36
  &:focus,
@@ -12,7 +12,7 @@ Snapshot Diff:
12
12
  "background": "#fff",
13
13
  "border": "1px solid",
14
14
  - "border-color": "#d94f4f",
15
- + "border-color": "#757575",
15
+ + "border-color": "#949494",
16
16
  "border-radius": "2px",
17
17
  "box-shadow": "transparent",
18
18
  "display": "flex",
@@ -28,7 +28,7 @@ Snapshot Diff:
28
28
  @@ -14,19 +14,18 @@
29
29
  "background": "#fff",
30
30
  "border": "1px solid",
31
- "border-color": "#757575",
31
+ "border-color": "#949494",
32
32
  "border-radius": "2px",
33
33
  "box-shadow": "transparent",
34
34
  - "display": "inline-flex",
@@ -62,7 +62,7 @@ Snapshot Diff:
62
62
  "background": "#fff",
63
63
  - "background-color": "transparent",
64
64
  "border": "1px solid",
65
- "border-color": "#757575",
65
+ "border-color": "#949494",
66
66
  "border-radius": "2px",
67
67
  "box-shadow": "transparent",
68
68
  "display": "flex",
@@ -89,7 +89,7 @@ exports[`base field should render correctly 1`] = `
89
89
  background: #fff;
90
90
  border-radius: 2px;
91
91
  border: 1px solid;
92
- border-color: #757575;
92
+ border-color: #949494;
93
93
  box-shadow: transparent;
94
94
  display: -webkit-box;
95
95
  display: -webkit-flex;
@@ -8,9 +8,10 @@ import { render, screen } from '@testing-library/react';
8
8
  */
9
9
  import { useBaseField } from '../index';
10
10
  import { View } from '../../view';
11
+ import type { BaseFieldProps } from '../types';
11
12
 
12
- const TestField = ( props ) => {
13
- return <View { ...useBaseField( props ) } />;
13
+ const TestField = ( props: Omit< BaseFieldProps, 'children' > ) => {
14
+ return <View { ...useBaseField( { ...props, children: '' } ) } />;
14
15
  };
15
16
 
16
17
  describe( 'base field', () => {
@@ -62,10 +63,14 @@ describe( 'base field', () => {
62
63
  // wrap this in a component so that `useContext` calls don't fail inside the hook
63
64
  // assertions will still run as normal when we `render` the component :)
64
65
  const Component = () => {
65
- const disabled = Symbol.for( 'disabled' );
66
- const defaultValue = Symbol.for( 'defaultValue' );
66
+ const disabled = true;
67
+ const defaultValue = 'Lorem ipsum';
67
68
 
68
- const result = useBaseField( { disabled, defaultValue } );
69
+ const result = useBaseField( {
70
+ disabled,
71
+ defaultValue,
72
+ children: '',
73
+ } );
69
74
 
70
75
  expect( result.disabled ).toBe( disabled );
71
76
  expect( result.defaultValue ).toBe( defaultValue );