@wordpress/components 22.1.0 → 23.0.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 (530) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/build/alignment-matrix-control/cell.js.map +1 -1
  3. package/build/alignment-matrix-control/icon.js +4 -2
  4. package/build/alignment-matrix-control/icon.js.map +1 -1
  5. package/build/alignment-matrix-control/index.js +25 -1
  6. package/build/alignment-matrix-control/index.js.map +1 -1
  7. package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
  8. package/build/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
  9. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
  10. package/build/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  11. package/build/alignment-matrix-control/types.js +6 -0
  12. package/build/alignment-matrix-control/types.js.map +1 -0
  13. package/build/alignment-matrix-control/utils.js +9 -8
  14. package/build/alignment-matrix-control/utils.js.map +1 -1
  15. package/build/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
  16. package/build/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  17. package/build/autocomplete/index.js +38 -9
  18. package/build/autocomplete/index.js.map +1 -1
  19. package/build/base-control/hooks.js +52 -0
  20. package/build/base-control/hooks.js.map +1 -0
  21. package/build/base-control/index.js +24 -7
  22. package/build/base-control/index.js.map +1 -1
  23. package/build/base-field/hook.js +0 -14
  24. package/build/base-field/hook.js.map +1 -1
  25. package/build/base-field/index.js.map +1 -1
  26. package/build/base-field/styles.js +5 -5
  27. package/build/base-field/styles.js.map +1 -1
  28. package/build/base-field/types.js +6 -0
  29. package/build/base-field/types.js.map +1 -0
  30. package/build/border-control/border-control/component.js +1 -0
  31. package/build/border-control/border-control/component.js.map +1 -1
  32. package/build/border-control/styles.js +16 -16
  33. package/build/border-control/styles.js.map +1 -1
  34. package/build/box-control/linked-button.js +3 -4
  35. package/build/box-control/linked-button.js.map +1 -1
  36. package/build/color-palette/index.js +2 -7
  37. package/build/color-palette/index.js.map +1 -1
  38. package/build/color-picker/input-with-slider.js +1 -0
  39. package/build/color-picker/input-with-slider.js.map +1 -1
  40. package/build/color-picker/styles.js +8 -8
  41. package/build/color-picker/styles.js.map +1 -1
  42. package/build/custom-select-control/index.js +14 -2
  43. package/build/custom-select-control/index.js.map +1 -1
  44. package/build/dashicon/index.js +1 -4
  45. package/build/dashicon/index.js.map +1 -1
  46. package/build/date-time/date-time/index.js +4 -4
  47. package/build/date-time/date-time/index.js.map +1 -1
  48. package/build/duotone-picker/duotone-picker.js +2 -2
  49. package/build/duotone-picker/duotone-picker.js.map +1 -1
  50. package/build/gradient-picker/index.js +3 -9
  51. package/build/gradient-picker/index.js.map +1 -1
  52. package/build/higher-order/with-fallback-styles/index.js +2 -2
  53. package/build/higher-order/with-fallback-styles/index.js.map +1 -1
  54. package/build/index.js +13 -1
  55. package/build/index.js.map +1 -1
  56. package/build/input-control/index.js +17 -5
  57. package/build/input-control/index.js.map +1 -1
  58. package/build/input-control/input-base.js +2 -0
  59. package/build/input-control/input-base.js.map +1 -1
  60. package/build/mobile/bottom-sheet/cell.native.js +1 -1
  61. package/build/mobile/bottom-sheet/cell.native.js.map +1 -1
  62. package/build/mobile/bottom-sheet/switch-cell.native.js +1 -3
  63. package/build/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  64. package/build/mobile/global-styles-context/index.native.js +8 -8
  65. package/build/mobile/global-styles-context/index.native.js.map +1 -1
  66. package/build/mobile/keyboard-aware-flat-list/index.ios.js +4 -2
  67. package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  68. package/build/modal/index.js +8 -0
  69. package/build/modal/index.js.map +1 -1
  70. package/build/navigator/navigator-provider/component.js +12 -8
  71. package/build/navigator/navigator-provider/component.js.map +1 -1
  72. package/build/number-control/styles/number-control-styles.js +8 -8
  73. package/build/number-control/styles/number-control-styles.js.map +1 -1
  74. package/build/palette-edit/index.js +72 -33
  75. package/build/palette-edit/index.js.map +1 -1
  76. package/build/popover/index.js +10 -2
  77. package/build/popover/index.js.map +1 -1
  78. package/build/query-controls/index.js +1 -0
  79. package/build/query-controls/index.js.map +1 -1
  80. package/build/snackbar/index.js +35 -24
  81. package/build/snackbar/index.js.map +1 -1
  82. package/build/snackbar/list.js +14 -19
  83. package/build/snackbar/list.js.map +1 -1
  84. package/build/snackbar/types.js +6 -0
  85. package/build/snackbar/types.js.map +1 -0
  86. package/build/tab-panel/index.js +10 -5
  87. package/build/tab-panel/index.js.map +1 -1
  88. package/build/theme/color-algorithms.js +118 -0
  89. package/build/theme/color-algorithms.js.map +1 -0
  90. package/build/theme/index.js +21 -18
  91. package/build/theme/index.js.map +1 -1
  92. package/build/theme/styles.js +10 -7
  93. package/build/theme/styles.js.map +1 -1
  94. package/build/toggle-control/index.js +5 -2
  95. package/build/toggle-control/index.js.map +1 -1
  96. package/build/ui/context/context-system-provider.js +3 -1
  97. package/build/ui/context/context-system-provider.js.map +1 -1
  98. package/build/unit-control/index.js +5 -2
  99. package/build/unit-control/index.js.map +1 -1
  100. package/build/utils/colors-values.js +1 -1
  101. package/build/utils/colors-values.js.map +1 -1
  102. package/build/utils/config-values.js +0 -2
  103. package/build/utils/config-values.js.map +1 -1
  104. package/build/utils/hooks/use-controlled-value.js.map +1 -1
  105. package/build-module/alignment-matrix-control/cell.js.map +1 -1
  106. package/build-module/alignment-matrix-control/icon.js +4 -2
  107. package/build-module/alignment-matrix-control/icon.js.map +1 -1
  108. package/build-module/alignment-matrix-control/index.js +23 -1
  109. package/build-module/alignment-matrix-control/index.js.map +1 -1
  110. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js +13 -13
  111. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.js.map +1 -1
  112. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js +16 -16
  113. package/build-module/alignment-matrix-control/styles/alignment-matrix-control-styles.js.map +1 -1
  114. package/build-module/alignment-matrix-control/types.js +2 -0
  115. package/build-module/alignment-matrix-control/types.js.map +1 -0
  116. package/build-module/alignment-matrix-control/utils.js +13 -8
  117. package/build-module/alignment-matrix-control/utils.js.map +1 -1
  118. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js +9 -9
  119. package/build-module/angle-picker-control/styles/angle-picker-control-styles.js.map +1 -1
  120. package/build-module/autocomplete/index.js +38 -9
  121. package/build-module/autocomplete/index.js.map +1 -1
  122. package/build-module/base-control/hooks.js +41 -0
  123. package/build-module/base-control/hooks.js.map +1 -0
  124. package/build-module/base-control/index.js +18 -8
  125. package/build-module/base-control/index.js.map +1 -1
  126. package/build-module/base-field/hook.js +0 -14
  127. package/build-module/base-field/hook.js.map +1 -1
  128. package/build-module/base-field/index.js.map +1 -1
  129. package/build-module/base-field/styles.js +5 -5
  130. package/build-module/base-field/styles.js.map +1 -1
  131. package/build-module/base-field/types.js +2 -0
  132. package/build-module/base-field/types.js.map +1 -0
  133. package/build-module/border-control/border-control/component.js +1 -0
  134. package/build-module/border-control/border-control/component.js.map +1 -1
  135. package/build-module/border-control/styles.js +17 -17
  136. package/build-module/border-control/styles.js.map +1 -1
  137. package/build-module/box-control/linked-button.js +3 -4
  138. package/build-module/box-control/linked-button.js.map +1 -1
  139. package/build-module/color-palette/index.js +2 -7
  140. package/build-module/color-palette/index.js.map +1 -1
  141. package/build-module/color-picker/input-with-slider.js +1 -0
  142. package/build-module/color-picker/input-with-slider.js.map +1 -1
  143. package/build-module/color-picker/styles.js +8 -8
  144. package/build-module/color-picker/styles.js.map +1 -1
  145. package/build-module/custom-select-control/index.js +14 -2
  146. package/build-module/custom-select-control/index.js.map +1 -1
  147. package/build-module/dashicon/index.js +1 -4
  148. package/build-module/dashicon/index.js.map +1 -1
  149. package/build-module/date-time/date-time/index.js +4 -4
  150. package/build-module/date-time/date-time/index.js.map +1 -1
  151. package/build-module/duotone-picker/duotone-picker.js +2 -2
  152. package/build-module/duotone-picker/duotone-picker.js.map +1 -1
  153. package/build-module/gradient-picker/index.js +3 -8
  154. package/build-module/gradient-picker/index.js.map +1 -1
  155. package/build-module/higher-order/with-fallback-styles/index.js +2 -2
  156. package/build-module/higher-order/with-fallback-styles/index.js.map +1 -1
  157. package/build-module/index.js +2 -2
  158. package/build-module/index.js.map +1 -1
  159. package/build-module/input-control/index.js +16 -5
  160. package/build-module/input-control/index.js.map +1 -1
  161. package/build-module/input-control/input-base.js +2 -0
  162. package/build-module/input-control/input-base.js.map +1 -1
  163. package/build-module/mobile/bottom-sheet/cell.native.js +1 -1
  164. package/build-module/mobile/bottom-sheet/cell.native.js.map +1 -1
  165. package/build-module/mobile/bottom-sheet/switch-cell.native.js +1 -2
  166. package/build-module/mobile/bottom-sheet/switch-cell.native.js.map +1 -1
  167. package/build-module/mobile/global-styles-context/index.native.js +8 -7
  168. package/build-module/mobile/global-styles-context/index.native.js.map +1 -1
  169. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
  170. package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
  171. package/build-module/modal/index.js +8 -0
  172. package/build-module/modal/index.js.map +1 -1
  173. package/build-module/navigator/navigator-provider/component.js +12 -8
  174. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  175. package/build-module/number-control/styles/number-control-styles.js +8 -10
  176. package/build-module/number-control/styles/number-control-styles.js.map +1 -1
  177. package/build-module/palette-edit/index.js +73 -34
  178. package/build-module/palette-edit/index.js.map +1 -1
  179. package/build-module/popover/index.js +10 -2
  180. package/build-module/popover/index.js.map +1 -1
  181. package/build-module/query-controls/index.js +1 -0
  182. package/build-module/query-controls/index.js.map +1 -1
  183. package/build-module/snackbar/index.js +33 -23
  184. package/build-module/snackbar/index.js.map +1 -1
  185. package/build-module/snackbar/list.js +14 -22
  186. package/build-module/snackbar/list.js.map +1 -1
  187. package/build-module/snackbar/types.js +2 -0
  188. package/build-module/snackbar/types.js.map +1 -0
  189. package/build-module/tab-panel/index.js +10 -5
  190. package/build-module/tab-panel/index.js.map +1 -1
  191. package/build-module/theme/color-algorithms.js +105 -0
  192. package/build-module/theme/color-algorithms.js.map +1 -0
  193. package/build-module/theme/index.js +21 -17
  194. package/build-module/theme/index.js.map +1 -1
  195. package/build-module/theme/styles.js +8 -6
  196. package/build-module/theme/styles.js.map +1 -1
  197. package/build-module/toggle-control/index.js +4 -2
  198. package/build-module/toggle-control/index.js.map +1 -1
  199. package/build-module/ui/context/context-system-provider.js +3 -2
  200. package/build-module/ui/context/context-system-provider.js.map +1 -1
  201. package/build-module/unit-control/index.js +5 -2
  202. package/build-module/unit-control/index.js.map +1 -1
  203. package/build-module/utils/colors-values.js +1 -1
  204. package/build-module/utils/colors-values.js.map +1 -1
  205. package/build-module/utils/config-values.js +0 -2
  206. package/build-module/utils/config-values.js.map +1 -1
  207. package/build-module/utils/hooks/use-controlled-value.js.map +1 -1
  208. package/build-style/style-rtl.css +92 -75
  209. package/build-style/style.css +92 -75
  210. package/build-types/alignment-matrix-control/cell.d.ts +5 -0
  211. package/build-types/alignment-matrix-control/cell.d.ts.map +1 -0
  212. package/build-types/alignment-matrix-control/icon.d.ts +6 -0
  213. package/build-types/alignment-matrix-control/icon.d.ts.map +1 -0
  214. package/build-types/alignment-matrix-control/index.d.ts +30 -0
  215. package/build-types/alignment-matrix-control/index.d.ts.map +1 -0
  216. package/build-types/alignment-matrix-control/stories/index.d.ts +14 -0
  217. package/build-types/alignment-matrix-control/stories/index.d.ts.map +1 -0
  218. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts +19 -0
  219. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts.map +1 -0
  220. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts +23 -0
  221. package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -0
  222. package/build-types/alignment-matrix-control/test/index.d.ts +2 -0
  223. package/build-types/alignment-matrix-control/test/index.d.ts.map +1 -0
  224. package/build-types/alignment-matrix-control/types.d.ts +39 -0
  225. package/build-types/alignment-matrix-control/types.d.ts.map +1 -0
  226. package/build-types/alignment-matrix-control/utils.d.ts +33 -0
  227. package/build-types/alignment-matrix-control/utils.d.ts.map +1 -0
  228. package/build-types/base-control/hooks.d.ts +23 -0
  229. package/build-types/base-control/hooks.d.ts.map +1 -0
  230. package/build-types/base-control/index.d.ts +17 -7
  231. package/build-types/base-control/index.d.ts.map +1 -1
  232. package/build-types/base-control/stories/index.d.ts.map +1 -1
  233. package/build-types/base-control/test/index.d.ts +2 -0
  234. package/build-types/base-control/test/index.d.ts.map +1 -0
  235. package/build-types/base-control/types.d.ts +8 -2
  236. package/build-types/base-control/types.d.ts.map +1 -1
  237. package/build-types/base-field/hook.d.ts +7 -31
  238. package/build-types/base-field/hook.d.ts.map +1 -1
  239. package/build-types/base-field/index.d.ts +1 -1
  240. package/build-types/base-field/index.d.ts.map +1 -1
  241. package/build-types/base-field/styles.d.ts +5 -5
  242. package/build-types/base-field/styles.d.ts.map +1 -1
  243. package/build-types/base-field/test/index.d.ts +2 -0
  244. package/build-types/base-field/test/index.d.ts.map +1 -0
  245. package/build-types/base-field/types.d.ts +29 -0
  246. package/build-types/base-field/types.d.ts.map +1 -0
  247. package/build-types/border-box-control/border-box-control/hook.d.ts +2 -2
  248. package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +2 -2
  249. package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +2 -2
  250. package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +2 -2
  251. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  252. package/build-types/border-control/border-control/hook.d.ts +2 -2
  253. package/build-types/border-control/border-control-dropdown/hook.d.ts +2 -2
  254. package/build-types/border-control/border-control-style-picker/hook.d.ts +2 -2
  255. package/build-types/border-control/styles.d.ts.map +1 -1
  256. package/build-types/card/card/hook.d.ts +2 -2
  257. package/build-types/card/card-body/hook.d.ts +2 -2
  258. package/build-types/card/card-divider/hook.d.ts +2 -2
  259. package/build-types/card/card-footer/hook.d.ts +2 -2
  260. package/build-types/card/card-header/hook.d.ts +2 -2
  261. package/build-types/card/card-media/hook.d.ts +2 -2
  262. package/build-types/color-palette/index.d.ts +2 -2
  263. package/build-types/color-palette/index.d.ts.map +1 -1
  264. package/build-types/color-palette/stories/index.d.ts +6 -7
  265. package/build-types/color-palette/stories/index.d.ts.map +1 -1
  266. package/build-types/color-palette/styles.d.ts +1 -1
  267. package/build-types/color-palette/types.d.ts +1 -1
  268. package/build-types/color-palette/types.d.ts.map +1 -1
  269. package/build-types/color-picker/input-with-slider.d.ts.map +1 -1
  270. package/build-types/color-picker/styles.d.ts +5 -5
  271. package/build-types/color-picker/styles.d.ts.map +1 -1
  272. package/build-types/custom-select-control/index.d.ts.map +1 -1
  273. package/build-types/dashicon/index.d.ts +6 -20
  274. package/build-types/dashicon/index.d.ts.map +1 -1
  275. package/build-types/dashicon/types.d.ts +14 -0
  276. package/build-types/dashicon/types.d.ts.map +1 -1
  277. package/build-types/date-time/date/styles.d.ts +3 -3
  278. package/build-types/date-time/date-time/styles.d.ts +3 -3
  279. package/build-types/date-time/time/styles.d.ts +8 -8
  280. package/build-types/elevation/hook.d.ts +2 -2
  281. package/build-types/external-link/styles/external-link-styles.d.ts +1 -1
  282. package/build-types/flex/flex/hook.d.ts +2 -2
  283. package/build-types/flex/flex-block/hook.d.ts +2 -2
  284. package/build-types/flex/flex-item/hook.d.ts +2 -2
  285. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +2 -5
  286. package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts.map +1 -1
  287. package/build-types/grid/hook.d.ts +2 -2
  288. package/build-types/h-stack/component.d.ts +1 -1
  289. package/build-types/h-stack/hook.d.ts +2 -2
  290. package/build-types/heading/hook.d.ts +2 -2
  291. package/build-types/input-control/index.d.ts +1 -1
  292. package/build-types/input-control/index.d.ts.map +1 -1
  293. package/build-types/input-control/input-base.d.ts.map +1 -1
  294. package/build-types/input-control/stories/index.d.ts +1 -0
  295. package/build-types/input-control/stories/index.d.ts.map +1 -1
  296. package/build-types/input-control/types.d.ts +2 -1
  297. package/build-types/input-control/types.d.ts.map +1 -1
  298. package/build-types/item-group/item/hook.d.ts +2 -2
  299. package/build-types/item-group/item-group/hook.d.ts +2 -2
  300. package/build-types/modal/index.d.ts.map +1 -1
  301. package/build-types/modal/stories/index.d.ts.map +1 -1
  302. package/build-types/navigator/navigator-back-button/hook.d.ts +3 -3
  303. package/build-types/navigator/navigator-button/hook.d.ts +3 -3
  304. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  305. package/build-types/number-control/index.d.ts +2 -2
  306. package/build-types/number-control/index.d.ts.map +1 -1
  307. package/build-types/number-control/stories/index.d.ts +25 -0
  308. package/build-types/number-control/stories/index.d.ts.map +1 -0
  309. package/build-types/number-control/styles/number-control-styles.d.ts +6 -6
  310. package/build-types/number-control/styles/number-control-styles.d.ts.map +1 -1
  311. package/build-types/number-control/test/index.d.ts +2 -0
  312. package/build-types/number-control/test/index.d.ts.map +1 -0
  313. package/build-types/popover/index.d.ts +1 -1
  314. package/build-types/popover/index.d.ts.map +1 -1
  315. package/build-types/popover/stories/e2e/index.d.ts +1 -1
  316. package/build-types/range-control/index.d.ts +1 -1
  317. package/build-types/range-control/styles/range-control-styles.d.ts +2 -2
  318. package/build-types/resizable-box/resize-tooltip/index.d.ts +15 -19
  319. package/build-types/resizable-box/resize-tooltip/index.d.ts.map +1 -1
  320. package/build-types/resizable-box/resize-tooltip/label.d.ts +4 -3
  321. package/build-types/resizable-box/resize-tooltip/label.d.ts.map +1 -1
  322. package/build-types/scrollable/hook.d.ts +2 -2
  323. package/build-types/search-control/index.d.ts +1 -1
  324. package/build-types/search-control/stories/index.d.ts +2 -2
  325. package/build-types/snackbar/index.d.ts +19 -0
  326. package/build-types/snackbar/index.d.ts.map +1 -0
  327. package/build-types/snackbar/list.d.ts +18 -0
  328. package/build-types/snackbar/list.d.ts.map +1 -0
  329. package/build-types/snackbar/stories/index.d.ts +16 -0
  330. package/build-types/snackbar/stories/index.d.ts.map +1 -0
  331. package/build-types/snackbar/stories/list.d.ts +12 -0
  332. package/build-types/snackbar/stories/list.d.ts.map +1 -0
  333. package/build-types/snackbar/types.d.ts +111 -0
  334. package/build-types/snackbar/types.d.ts.map +1 -0
  335. package/build-types/spacer/hook.d.ts +2 -2
  336. package/build-types/spinner/index.d.ts +1 -1
  337. package/build-types/surface/hook.d.ts +2 -2
  338. package/build-types/tab-panel/index.d.ts +1 -1
  339. package/build-types/tab-panel/index.d.ts.map +1 -1
  340. package/build-types/tab-panel/types.d.ts +19 -1
  341. package/build-types/tab-panel/types.d.ts.map +1 -1
  342. package/build-types/text/hook.d.ts +2 -2
  343. package/build-types/text-control/index.d.ts +2 -2
  344. package/build-types/text-control/stories/index.d.ts.map +1 -1
  345. package/build-types/text-control/types.d.ts +1 -5
  346. package/build-types/text-control/types.d.ts.map +1 -1
  347. package/build-types/theme/color-algorithms.d.ts +20 -0
  348. package/build-types/theme/color-algorithms.d.ts.map +1 -0
  349. package/build-types/theme/index.d.ts +1 -1
  350. package/build-types/theme/index.d.ts.map +1 -1
  351. package/build-types/theme/stories/index.d.ts +4 -0
  352. package/build-types/theme/stories/index.d.ts.map +1 -1
  353. package/build-types/theme/styles.d.ts +3 -2
  354. package/build-types/theme/styles.d.ts.map +1 -1
  355. package/build-types/theme/test/color-algorithms.d.ts +2 -0
  356. package/build-types/theme/test/color-algorithms.d.ts.map +1 -0
  357. package/build-types/theme/types.d.ts +41 -3
  358. package/build-types/theme/types.d.ts.map +1 -1
  359. package/build-types/toggle-control/index.d.ts.map +1 -1
  360. package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +2 -2
  361. package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +2 -2
  362. package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +1 -1
  363. package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
  364. package/build-types/tools-panel/tools-panel/hook.d.ts +2 -2
  365. package/build-types/tools-panel/tools-panel-header/hook.d.ts +2 -2
  366. package/build-types/tools-panel/tools-panel-item/hook.d.ts +2 -2
  367. package/build-types/truncate/hook.d.ts +2 -2
  368. package/build-types/ui/context/context-system-provider.d.ts.map +1 -1
  369. package/build-types/ui/control-group/hook.d.ts +2 -2
  370. package/build-types/ui/control-label/hook.d.ts +2 -2
  371. package/build-types/ui/form-group/form-group.d.ts +2 -2
  372. package/build-types/ui/form-group/use-form-group.d.ts +5 -5
  373. package/build-types/unit-control/index.d.ts +2 -1
  374. package/build-types/unit-control/index.d.ts.map +1 -1
  375. package/build-types/unit-control/styles/unit-control-styles.d.ts +2 -2
  376. package/build-types/unit-control/types.d.ts +4 -0
  377. package/build-types/unit-control/types.d.ts.map +1 -1
  378. package/build-types/utils/config-values.d.ts +0 -2
  379. package/build-types/utils/hooks/use-controlled-value.d.ts +2 -1
  380. package/build-types/utils/hooks/use-controlled-value.d.ts.map +1 -1
  381. package/build-types/v-stack/component.d.ts +2 -2
  382. package/build-types/v-stack/hook.d.ts +2 -2
  383. package/build-types/v-stack/stories/index.d.ts +2 -2
  384. package/package.json +21 -20
  385. package/src/alignment-matrix-control/README.md +7 -7
  386. package/src/alignment-matrix-control/{cell.js → cell.tsx} +7 -1
  387. package/src/alignment-matrix-control/{icon.js → icon.tsx} +6 -3
  388. package/src/alignment-matrix-control/{index.js → index.tsx} +31 -4
  389. package/src/alignment-matrix-control/stories/{index.js → index.tsx} +17 -9
  390. package/src/alignment-matrix-control/styles/{alignment-matrix-control-icon-styles.js → alignment-matrix-control-icon-styles.ts} +11 -3
  391. package/src/alignment-matrix-control/styles/{alignment-matrix-control-styles.js → alignment-matrix-control-styles.ts} +13 -3
  392. package/src/alignment-matrix-control/test/{index.js → index.tsx} +5 -5
  393. package/src/alignment-matrix-control/types.ts +54 -0
  394. package/src/alignment-matrix-control/{utils.js → utils.tsx} +24 -14
  395. package/src/angle-picker-control/styles/angle-picker-control-styles.js +4 -0
  396. package/src/autocomplete/index.js +43 -12
  397. package/src/base-control/README.md +21 -12
  398. package/src/base-control/hooks.ts +45 -0
  399. package/src/base-control/index.tsx +18 -7
  400. package/src/base-control/stories/index.tsx +8 -10
  401. package/src/base-control/test/index.tsx +52 -0
  402. package/src/base-control/types.ts +8 -2
  403. package/src/base-field/README.md +21 -22
  404. package/src/base-field/{hook.js → hook.ts} +5 -15
  405. package/src/base-field/{index.js → index.ts} +0 -0
  406. package/src/base-field/{styles.js → styles.ts} +2 -2
  407. package/src/base-field/test/__snapshots__/{index.js.snap → index.tsx.snap} +4 -4
  408. package/src/base-field/test/{index.js → index.tsx} +10 -5
  409. package/src/base-field/types.ts +29 -0
  410. package/src/border-box-control/border-box-control/README.md +1 -0
  411. package/src/border-box-control/test/index.js +3 -1
  412. package/src/border-control/border-control/component.tsx +1 -0
  413. package/src/border-control/styles.ts +1 -10
  414. package/src/box-control/linked-button.js +8 -11
  415. package/src/box-control/test/index.js +206 -135
  416. package/src/button/stories/index.js +30 -0
  417. package/src/button/style.scss +17 -14
  418. package/src/button/test/index.js +32 -15
  419. package/src/card/test/index.tsx +32 -20
  420. package/src/circular-option-picker/style.scss +1 -0
  421. package/src/color-palette/index.tsx +4 -6
  422. package/src/color-palette/stories/index.tsx +1 -5
  423. package/src/color-palette/test/__snapshots__/index.tsx.snap +4 -4
  424. package/src/color-palette/test/index.tsx +84 -36
  425. package/src/color-palette/types.ts +1 -1
  426. package/src/color-picker/README.md +1 -0
  427. package/src/color-picker/input-with-slider.tsx +1 -0
  428. package/src/color-picker/styles.ts +0 -4
  429. package/src/confirm-dialog/README.md +3 -2
  430. package/src/custom-select-control/README.md +14 -0
  431. package/src/custom-select-control/index.js +14 -2
  432. package/src/dashicon/{index.js → index.tsx} +10 -4
  433. package/src/dashicon/types.ts +17 -0
  434. package/src/date-time/date-time/index.tsx +2 -2
  435. package/src/dimension-control/test/__snapshots__/index.test.js.snap +4 -8
  436. package/src/disabled/test/index.tsx +21 -11
  437. package/src/dropdown/test/index.js +39 -49
  438. package/src/dropdown-menu/test/index.js +18 -12
  439. package/src/duotone-picker/duotone-picker.js +2 -2
  440. package/src/focal-point-picker/test/media.js +26 -21
  441. package/src/form-token-field/style.scss +1 -1
  442. package/src/gradient-picker/index.js +5 -8
  443. package/src/grid/test/grid.tsx +31 -31
  444. package/src/higher-order/navigate-regions/style.scss +2 -22
  445. package/src/higher-order/with-fallback-styles/index.js +4 -2
  446. package/src/higher-order/with-filters/test/index.js +94 -101
  447. package/src/higher-order/with-focus-return/test/index.js +1 -4
  448. package/src/index.js +2 -2
  449. package/src/input-control/index.tsx +42 -28
  450. package/src/input-control/input-base.tsx +8 -1
  451. package/src/input-control/stories/index.tsx +6 -0
  452. package/src/input-control/test/index.js +18 -0
  453. package/src/input-control/types.ts +2 -0
  454. package/src/mobile/bottom-sheet/cell.native.js +1 -1
  455. package/src/mobile/bottom-sheet/switch-cell.native.js +2 -2
  456. package/src/mobile/global-styles-context/index.native.js +9 -11
  457. package/src/mobile/keyboard-aware-flat-list/index.ios.js +2 -2
  458. package/src/mobile/link-settings/test/edit.native.js +68 -124
  459. package/src/modal/index.tsx +11 -0
  460. package/src/modal/stories/index.tsx +3 -0
  461. package/src/modal/test/index.tsx +15 -0
  462. package/src/navigation/stories/index.js +6 -6
  463. package/src/navigation/stories/{controlled-state.js → utils/controlled-state.js} +3 -3
  464. package/src/navigation/stories/{default.js → utils/default.js} +3 -3
  465. package/src/navigation/stories/{group.js → utils/group.js} +4 -4
  466. package/src/navigation/stories/{hide-if-empty.js → utils/hide-if-empty.js} +3 -3
  467. package/src/navigation/stories/{more-examples.js → utils/more-examples.js} +4 -4
  468. package/src/navigation/stories/{search.js → utils/search.js} +5 -5
  469. package/src/navigator/navigator-provider/component.tsx +13 -10
  470. package/src/notice/test/list.js +8 -5
  471. package/src/number-control/stories/{index.js → index.tsx} +24 -7
  472. package/src/number-control/styles/{number-control-styles.js → number-control-styles.ts} +5 -3
  473. package/src/number-control/test/index.tsx +600 -0
  474. package/src/palette-edit/index.js +88 -39
  475. package/src/palette-edit/test/index.js +25 -1
  476. package/src/popover/index.tsx +10 -2
  477. package/src/popover/style.scss +12 -11
  478. package/src/popover/test/index.tsx +25 -15
  479. package/src/query-controls/index.js +1 -0
  480. package/src/range-control/test/index.tsx +57 -60
  481. package/src/resizable-box/style.scss +1 -0
  482. package/src/sandbox/test/index.js +13 -11
  483. package/src/search-control/style.scss +4 -0
  484. package/src/snackbar/README.md +63 -8
  485. package/src/snackbar/{index.js → index.tsx} +46 -28
  486. package/src/snackbar/{list.js → list.tsx} +20 -21
  487. package/src/snackbar/stories/index.tsx +96 -0
  488. package/src/snackbar/stories/list.tsx +98 -0
  489. package/src/snackbar/types.ts +116 -0
  490. package/src/tab-panel/README.md +9 -0
  491. package/src/tab-panel/index.tsx +14 -3
  492. package/src/tab-panel/style.scss +46 -34
  493. package/src/tab-panel/test/index.tsx +111 -0
  494. package/src/tab-panel/types.ts +20 -1
  495. package/src/text/test/__snapshots__/index.tsx.snap +1 -0
  496. package/src/text/test/index.tsx +98 -46
  497. package/src/text-control/stories/index.tsx +0 -1
  498. package/src/text-control/types.ts +1 -6
  499. package/src/theme/README.md +32 -2
  500. package/src/theme/color-algorithms.ts +138 -0
  501. package/src/theme/index.tsx +23 -16
  502. package/src/theme/stories/index.tsx +67 -0
  503. package/src/theme/styles.ts +22 -17
  504. package/src/theme/test/color-algorithms.ts +100 -0
  505. package/src/theme/test/index.tsx +68 -35
  506. package/src/theme/types.ts +43 -3
  507. package/src/toggle-control/index.tsx +4 -2
  508. package/src/toggle-group-control/test/index.tsx +13 -2
  509. package/src/toolbar-group/test/index.js +8 -6
  510. package/src/tools-panel/stories/index.js +1 -1
  511. package/src/tools-panel/stories/{tools-panel-with-item-group-slot.js → utils/tools-panel-with-item-group-slot.js} +14 -11
  512. package/src/tools-panel/test/index.js +20 -14
  513. package/src/tooltip/README.md +7 -0
  514. package/src/tooltip/style.scss +2 -2
  515. package/src/tooltip/test/index.js +109 -18
  516. package/src/ui/context/context-system-provider.js +3 -2
  517. package/src/ui/context/test/context-system-provider.js +5 -4
  518. package/src/ui/control-label/test/index.js +3 -5
  519. package/src/unit-control/README.md +9 -1
  520. package/src/unit-control/index.tsx +3 -0
  521. package/src/unit-control/test/index.tsx +1 -0
  522. package/src/unit-control/types.ts +4 -0
  523. package/src/utils/colors-values.js +1 -1
  524. package/src/utils/config-values.js +0 -2
  525. package/src/utils/hooks/use-controlled-value.ts +2 -2
  526. package/src/utils/theme-variables.scss +20 -0
  527. package/tsconfig.json +2 -4
  528. package/tsconfig.tsbuildinfo +1 -1
  529. package/src/number-control/test/index.js +0 -478
  530. package/src/snackbar/stories/index.js +0 -89
@@ -54,6 +54,7 @@ $resize-handler-container-size: $resize-handler-size + ($grid-unit-05 * 2); // M
54
54
  right: calc(50% - 1px);
55
55
  transition: transform 0.1s ease-in;
56
56
  @include reduce-motion("transition");
57
+ will-change: transform;
57
58
  opacity: 0;
58
59
  }
59
60
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { fireEvent, render, screen } from '@testing-library/react';
4
+ import { fireEvent, render, screen, within } from '@testing-library/react';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -16,15 +16,15 @@ import Sandbox from '../';
16
16
  describe( 'Sandbox', () => {
17
17
  const TestWrapper = () => {
18
18
  const [ html, setHtml ] = useState(
19
- // MuatationObserver implementation from JSDom does not work as intended
19
+ // MutationObserver implementation from JSDom does not work as intended
20
20
  // with iframes so we need to ignore it for the time being.
21
21
  '<script type="text/javascript">window.MutationObserver = null;</script>' +
22
- '<iframe class="mock-iframe" src="https://super.embed"></iframe>'
22
+ '<iframe title="Mock Iframe" src="https://super.embed"></iframe>'
23
23
  );
24
24
 
25
25
  const updateHtml = () => {
26
26
  setHtml(
27
- '<iframe class="mock-iframe" src="https://another.super.embed"></iframe>'
27
+ '<iframe title="Mock Iframe" src="https://another.super.embed"></iframe>'
28
28
  );
29
29
  };
30
30
 
@@ -33,18 +33,19 @@ describe( 'Sandbox', () => {
33
33
  <button onClick={ updateHtml } className="mock-button">
34
34
  Mock Button
35
35
  </button>
36
- <Sandbox html={ html } />
36
+ <Sandbox html={ html } title="Sandbox Title" />
37
37
  </div>
38
38
  );
39
39
  };
40
40
 
41
41
  it( 'should rerender with new emdeded content if html prop changes', () => {
42
- const { container } = render( <TestWrapper /> );
42
+ render( <TestWrapper /> );
43
43
 
44
- const iframe = container.querySelector( '.components-sandbox' );
44
+ const iframe = screen.getByTitle( 'Sandbox Title' );
45
45
 
46
- let sandboxedIframe =
47
- iframe.contentWindow.document.body.querySelector( '.mock-iframe' );
46
+ let sandboxedIframe = within(
47
+ iframe.contentWindow.document.body
48
+ ).getByTitle( 'Mock Iframe' );
48
49
 
49
50
  expect( sandboxedIframe ).toHaveAttribute(
50
51
  'src',
@@ -53,8 +54,9 @@ describe( 'Sandbox', () => {
53
54
 
54
55
  fireEvent.click( screen.getByRole( 'button' ) );
55
56
 
56
- sandboxedIframe =
57
- iframe.contentWindow.document.body.querySelector( '.mock-iframe' );
57
+ sandboxedIframe = within(
58
+ iframe.contentWindow.document.body
59
+ ).getByTitle( 'Mock Iframe' );
58
60
 
59
61
  expect( sandboxedIframe ).toHaveAttribute(
60
62
  'src',
@@ -10,6 +10,10 @@
10
10
  width: 100%;
11
11
  height: $grid-unit-60;
12
12
 
13
+ // Unset inherited values.
14
+ margin-left: 0;
15
+ margin-right: 0;
16
+
13
17
  /* Fonts smaller than 16px causes mobile safari to zoom. */
14
18
  font-size: $mobile-text-min-font-size;
15
19
  @include break-small {
@@ -36,17 +36,72 @@ const MySnackbarNotice = () => (
36
36
  );
37
37
  ```
38
38
 
39
- #### Props
39
+ ### Props
40
40
 
41
41
  The following props are used to control the display of the component.
42
42
 
43
- - `children`: (string) The displayed message of a notice. Also used as the spoken message for assistive technology, unless `spokenMessage` is provided as an alternative message.
44
- - `spokenMessage`: (string) Used to provide a custom spoken message in place of the `children` default.
45
- - `politeness`: (string) A politeness level for the notice's spoken message. Should be provided as one of the valid options for [an `aria-live` attribute value](https://www.w3.org/TR/wai-aria-1.1/#aria-live). Defaults to `"polite"`. Note that this value should be considered a suggestion; assistive technologies may override it based on internal heuristics.
46
- - A value of `'assertive'` is to be used for important, and usually time-sensitive, information. It will interrupt anything else the screen reader is announcing in that moment.
47
- - A value of `'polite'` is to be used for advisory information. It should not interrupt what the screen reader is announcing in that moment (the "speech queue") or interrupt the current task.
48
- - `onRemove`: function called when dismissing the notice.
49
- - `actions`: (array) an array of action objects. Each member object should contain a `label` and either a `url` link string or `onClick` callback function.
43
+ #### `actions`: `NoticeAction[]`
44
+
45
+ An array of action objects. Each member object should contain a `label` and either a `url` link string or `onClick` callback function.
46
+
47
+ - Required: No
48
+ - Default: `[]`
49
+
50
+ #### `children`: `string`
51
+
52
+ The displayed message of a notice. Also used as the spoken message for assistive technology, unless `spokenMessage` is provided as an alternative message.
53
+
54
+ - Required: Yes
55
+
56
+ #### `explicitDismiss`: `boolean`
57
+
58
+ Whether to require user action to dismiss the snackbar. By default, this is dismissed on a timeout, without user interaction.
59
+
60
+ - Required: No
61
+ - Default: `false`
62
+
63
+ #### `icon`: `ReactNode`
64
+
65
+ The icon to render in the snackbar.
66
+
67
+ - Required: No
68
+ - Default: `null`
69
+
70
+ #### `listRef`: `MutableRefObject< HTMLDivElement | null >`
71
+
72
+ A ref to the list that contains the snackbar.
73
+
74
+ - Required: No
75
+
76
+ #### `onDismiss`: `() => void`
77
+
78
+ A callback executed when the snackbar is dismissed. It is distinct from onRemove, which _looks_ like a callback but is actually the function to call to remove the snackbar from the UI.
79
+
80
+ - Required: No
81
+
82
+ #### `onRemove`: `() => void`
83
+
84
+ Function called when dismissing the notice.
85
+
86
+ - Required: No
87
+
88
+ #### `politeness`: `'polite' | 'assertive'`
89
+
90
+ A politeness level for the notice's spoken message. Should be provided as one of the valid options for [an `aria-live` attribute value](https://www.w3.org/TR/wai-aria-1.1/#aria-live). Note that this value should be considered a suggestion; assistive technologies may override it based on internal heuristics.
91
+
92
+ A value of `'assertive'` is to be used for important, and usually time-sensitive, information. It will interrupt anything else the screen reader is announcing in that moment.
93
+
94
+ A value of `'polite'` is to be used for advisory information. It should not interrupt what the screen reader is announcing in that moment (the "speech queue") or interrupt the current task.
95
+
96
+ - Required: No
97
+ - Default: `'polite'`
98
+
99
+ #### `spokenMessage`: `string`
100
+
101
+ Used to provide a custom spoken message.
102
+
103
+ - Required: No
104
+ - Default: `children`
50
105
 
51
106
  ## Related components
52
107
 
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
+ import type { ForwardedRef, KeyboardEvent, MouseEvent } from 'react';
4
5
  import classnames from 'classnames';
5
6
 
6
7
  /**
@@ -14,21 +15,23 @@ import warning from '@wordpress/warning';
14
15
  /**
15
16
  * Internal dependencies
16
17
  */
17
- import { Button } from '../';
18
+ import Button from '../button';
19
+ import type { NoticeAction, SnackbarProps } from './types';
20
+ import type { WordPressComponentProps } from '../ui/context';
18
21
 
19
- const noop = () => {};
20
22
  const NOTICE_TIMEOUT = 10000;
21
23
 
22
- /** @typedef {import('@wordpress/element').WPElement} WPElement */
23
-
24
24
  /**
25
25
  * Custom hook which announces the message with the given politeness, if a
26
26
  * valid message is provided.
27
27
  *
28
- * @param {string|WPElement} [message] Message to announce.
29
- * @param {'polite'|'assertive'} politeness Politeness to announce.
28
+ * @param message Message to announce.
29
+ * @param politeness Politeness to announce.
30
30
  */
31
- function useSpokenMessage( message, politeness ) {
31
+ function useSpokenMessage(
32
+ message: SnackbarProps[ 'spokenMessage' ],
33
+ politeness: NonNullable< SnackbarProps[ 'politeness' ] >
34
+ ) {
32
35
  const spokenMessage =
33
36
  typeof message === 'string' ? message : renderToString( message );
34
37
 
@@ -39,42 +42,43 @@ function useSpokenMessage( message, politeness ) {
39
42
  }, [ spokenMessage, politeness ] );
40
43
  }
41
44
 
42
- function Snackbar(
45
+ function UnforwardedSnackbar(
43
46
  {
44
47
  className,
45
48
  children,
46
49
  spokenMessage = children,
47
50
  politeness = 'polite',
48
51
  actions = [],
49
- onRemove = noop,
52
+ onRemove,
50
53
  icon = null,
51
54
  explicitDismiss = false,
52
55
  // onDismiss is a callback executed when the snackbar is dismissed.
53
56
  // It is distinct from onRemove, which _looks_ like a callback but is
54
57
  // actually the function to call to remove the snackbar from the UI.
55
- onDismiss = noop,
58
+ onDismiss,
56
59
  listRef,
57
- },
58
- ref
60
+ }: WordPressComponentProps< SnackbarProps, 'div' >,
61
+ ref: ForwardedRef< any >
59
62
  ) {
60
- onDismiss = onDismiss || noop;
61
-
62
- function dismissMe( event ) {
63
+ function dismissMe( event: KeyboardEvent | MouseEvent ) {
63
64
  if ( event && event.preventDefault ) {
64
65
  event.preventDefault();
65
66
  }
66
67
 
67
68
  // Prevent focus loss by moving it to the list element.
68
- listRef.current.focus();
69
+ listRef?.current?.focus();
69
70
 
70
- onDismiss();
71
- onRemove();
71
+ onDismiss?.();
72
+ onRemove?.();
72
73
  }
73
74
 
74
- function onActionClick( event, onClick ) {
75
+ function onActionClick(
76
+ event: MouseEvent,
77
+ onClick: NoticeAction[ 'onClick' ]
78
+ ) {
75
79
  event.stopPropagation();
76
80
 
77
- onRemove();
81
+ onRemove?.();
78
82
 
79
83
  if ( onClick ) {
80
84
  onClick( event );
@@ -87,8 +91,8 @@ function Snackbar(
87
91
  useEffect( () => {
88
92
  const timeoutHandle = setTimeout( () => {
89
93
  if ( ! explicitDismiss ) {
90
- onDismiss();
91
- onRemove();
94
+ onDismiss?.();
95
+ onRemove?.();
92
96
  }
93
97
  }, NOTICE_TIMEOUT );
94
98
 
@@ -118,10 +122,10 @@ function Snackbar(
118
122
  <div
119
123
  ref={ ref }
120
124
  className={ classes }
121
- onClick={ ! explicitDismiss ? dismissMe : noop }
122
- tabIndex="0"
125
+ onClick={ ! explicitDismiss ? dismissMe : undefined }
126
+ tabIndex={ 0 }
123
127
  role={ ! explicitDismiss ? 'button' : '' }
124
- onKeyPress={ ! explicitDismiss ? dismissMe : noop }
128
+ onKeyPress={ ! explicitDismiss ? dismissMe : undefined }
125
129
  aria-label={ ! explicitDismiss ? __( 'Dismiss this notice' ) : '' }
126
130
  >
127
131
  <div className={ snackbarContentClassnames }>
@@ -135,7 +139,7 @@ function Snackbar(
135
139
  key={ index }
136
140
  href={ url }
137
141
  variant="tertiary"
138
- onClick={ ( event ) =>
142
+ onClick={ ( event: MouseEvent ) =>
139
143
  onActionClick( event, onClick )
140
144
  }
141
145
  className="components-snackbar__action"
@@ -148,7 +152,7 @@ function Snackbar(
148
152
  <span
149
153
  role="button"
150
154
  aria-label="Dismiss this notice"
151
- tabIndex="0"
155
+ tabIndex={ 0 }
152
156
  className="components-snackbar__dismiss-button"
153
157
  onClick={ dismissMe }
154
158
  onKeyPress={ dismissMe }
@@ -161,4 +165,18 @@ function Snackbar(
161
165
  );
162
166
  }
163
167
 
164
- export default forwardRef( Snackbar );
168
+ /**
169
+ * A Snackbar displays a succinct message that is cleared out after a small delay.
170
+ *
171
+ * It can also offer the user options, like viewing a published post.
172
+ * But these options should also be available elsewhere in the UI.
173
+ *
174
+ * ```jsx
175
+ * const MySnackbarNotice = () => (
176
+ * <Snackbar>Post published successfully.</Snackbar>
177
+ * );
178
+ * ```
179
+ */
180
+ export const Snackbar = forwardRef( UnforwardedSnackbar );
181
+
182
+ export default Snackbar;
@@ -12,13 +12,14 @@ import { useRef } from '@wordpress/element';
12
12
  /**
13
13
  * Internal dependencies
14
14
  */
15
- import Snackbar from './';
15
+ import Snackbar from '.';
16
16
  import {
17
17
  __unstableMotion as motion,
18
18
  __unstableAnimatePresence as AnimatePresence,
19
19
  } from '../animation';
20
+ import type { Notice, SnackbarListProps } from './types';
21
+ import type { WordPressComponentProps } from '../ui/context';
20
22
 
21
- const noop = () => {};
22
23
  const SNACKBAR_VARIANTS = {
23
24
  init: {
24
25
  height: 0,
@@ -39,28 +40,28 @@ const SNACKBAR_VARIANTS = {
39
40
  },
40
41
  };
41
42
 
42
- const SNACKBAR_REDUCE_MOTION_VARIANTS = {
43
- init: false,
44
- open: false,
45
- exit: false,
46
- };
47
-
48
43
  /**
49
44
  * Renders a list of notices.
50
45
  *
51
- * @param {Object} $0 Props passed to the component.
52
- * @param {Array} $0.notices Array of notices to render.
53
- * @param {Function} $0.onRemove Function called when a notice should be removed / dismissed.
54
- * @param {Object} $0.className Name of the class used by the component.
55
- * @param {Object} $0.children Array of children to be rendered inside the notice list.
56
- *
57
- * @return {Object} The rendered notices list.
46
+ * ```jsx
47
+ * const MySnackbarListNotice = () => (
48
+ * <SnackbarList
49
+ * notices={ notices }
50
+ * onRemove={ removeNotice }
51
+ * />
52
+ * );
53
+ * ```
58
54
  */
59
- function SnackbarList( { notices, className, children, onRemove = noop } ) {
60
- const listRef = useRef();
55
+ export function SnackbarList( {
56
+ notices,
57
+ className,
58
+ children,
59
+ onRemove,
60
+ }: WordPressComponentProps< SnackbarListProps, 'div' > ) {
61
+ const listRef = useRef< HTMLDivElement | null >( null );
61
62
  const isReducedMotion = useReducedMotion();
62
63
  className = classnames( 'components-snackbar-list', className );
63
- const removeNotice = ( notice ) => () => onRemove( notice.id );
64
+ const removeNotice = ( notice: Notice ) => () => onRemove?.( notice.id );
64
65
  return (
65
66
  <div className={ className } tabIndex={ -1 } ref={ listRef }>
66
67
  { children }
@@ -76,9 +77,7 @@ function SnackbarList( { notices, className, children, onRemove = noop } ) {
76
77
  exit={ 'exit' }
77
78
  key={ notice.id }
78
79
  variants={
79
- isReducedMotion
80
- ? SNACKBAR_REDUCE_MOTION_VARIANTS
81
- : SNACKBAR_VARIANTS
80
+ isReducedMotion ? undefined : SNACKBAR_VARIANTS
82
81
  }
83
82
  >
84
83
  <div className="components-snackbar-list__notice-container">
@@ -0,0 +1,96 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import Snackbar from '..';
10
+
11
+ const meta: ComponentMeta< typeof Snackbar > = {
12
+ title: 'Components/Snackbar',
13
+ component: Snackbar,
14
+ argTypes: {
15
+ as: { control: { type: null } },
16
+ onRemove: {
17
+ action: 'onRemove',
18
+ control: { type: null },
19
+ },
20
+ onDismiss: {
21
+ action: 'onDismiss',
22
+ control: { type: null },
23
+ },
24
+ listRef: {
25
+ control: { type: null },
26
+ },
27
+ },
28
+ parameters: {
29
+ controls: {
30
+ expanded: true,
31
+ },
32
+ docs: { source: { state: 'open' } },
33
+ },
34
+ };
35
+ export default meta;
36
+
37
+ const DefaultTemplate: ComponentStory< typeof Snackbar > = ( {
38
+ children,
39
+ ...props
40
+ } ) => {
41
+ return <Snackbar { ...props }>{ children }</Snackbar>;
42
+ };
43
+
44
+ export const Default: ComponentStory< typeof Snackbar > = DefaultTemplate.bind(
45
+ {}
46
+ );
47
+ Default.args = {
48
+ children:
49
+ 'Use Snackbars to communicate low priority, non-interruptive messages to the user.',
50
+ };
51
+
52
+ export const WithActions: ComponentStory< typeof Snackbar > =
53
+ DefaultTemplate.bind( {} );
54
+ WithActions.args = {
55
+ actions: [
56
+ {
57
+ label: 'Open WP.org',
58
+ url: 'https://wordpress.org',
59
+ },
60
+ ],
61
+ children: 'Use Snackbars with an action link to an external page.',
62
+ };
63
+
64
+ export const WithIcon: ComponentStory< typeof Snackbar > = DefaultTemplate.bind(
65
+ {}
66
+ );
67
+ WithIcon.args = {
68
+ children: 'Add an icon to make your snackbar stand out',
69
+ icon: (
70
+ <span role="img" aria-label="Icon" style={ { fontSize: 21 } }>
71
+ 🌮
72
+ </span>
73
+ ),
74
+ };
75
+
76
+ export const WithExplicitDismiss: ComponentStory< typeof Snackbar > =
77
+ DefaultTemplate.bind( {} );
78
+ WithExplicitDismiss.args = {
79
+ children:
80
+ 'Add a cross to explicitly close the snackbar, and do not hide it automatically',
81
+ explicitDismiss: true,
82
+ };
83
+
84
+ export const WithActionAndExplicitDismiss: ComponentStory< typeof Snackbar > =
85
+ DefaultTemplate.bind( {} );
86
+ WithActionAndExplicitDismiss.args = {
87
+ actions: [
88
+ {
89
+ label: 'Open WP.org',
90
+ url: 'https://wordpress.org',
91
+ },
92
+ ],
93
+ children:
94
+ 'Add an action and a cross to explicitly close the snackbar, and do not hide it automatically',
95
+ explicitDismiss: true,
96
+ };
@@ -0,0 +1,98 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentMeta, ComponentStory } from '@storybook/react';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useState } from '@wordpress/element';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import SnackbarList from '../list';
15
+
16
+ const meta: ComponentMeta< typeof SnackbarList > = {
17
+ title: 'Components/SnackbarList',
18
+ component: SnackbarList,
19
+ argTypes: {
20
+ as: { control: { type: null } },
21
+ onRemove: {
22
+ action: 'onRemove',
23
+ control: { type: null },
24
+ },
25
+ },
26
+ parameters: {
27
+ controls: {
28
+ expanded: true,
29
+ },
30
+ docs: { source: { state: 'open' } },
31
+ },
32
+ };
33
+ export default meta;
34
+
35
+ export const Default: ComponentStory< typeof SnackbarList > = ( {
36
+ children,
37
+ notices: noticesProp,
38
+ ...props
39
+ } ) => {
40
+ const [ notices, setNotices ] = useState( noticesProp );
41
+
42
+ const onRemove = ( id: string ) => {
43
+ const matchIndex = notices.findIndex( ( n ) => n.id === id );
44
+ if ( matchIndex > -1 ) {
45
+ setNotices( [
46
+ ...notices.slice( 0, matchIndex ),
47
+ ...notices.slice( matchIndex + 1 ),
48
+ ] );
49
+ }
50
+ };
51
+
52
+ return (
53
+ <SnackbarList { ...props } notices={ notices } onRemove={ onRemove }>
54
+ { children }
55
+ </SnackbarList>
56
+ );
57
+ };
58
+
59
+ Default.args = {
60
+ children:
61
+ 'Use SnackbarList to communicate multiple low priority, non-interruptive messages to the user.',
62
+ notices: [
63
+ {
64
+ id: 'SAVE_POST_NOTICE_ID_1',
65
+ spokenMessage: 'Post published.',
66
+ actions: [
67
+ {
68
+ label: 'View Post',
69
+ url: 'https://example.com/?p=522',
70
+ },
71
+ ],
72
+ content: 'Post published.',
73
+ isDismissible: true,
74
+ explicitDismiss: false,
75
+ },
76
+ {
77
+ id: 'SAVE_POST_NOTICE_ID_2',
78
+ spokenMessage: 'Post updated',
79
+ actions: [
80
+ {
81
+ label: 'View Post',
82
+ url: 'https://example.com/?p=522',
83
+ },
84
+ ],
85
+ content: 'Post updated.',
86
+ isDismissible: true,
87
+ explicitDismiss: false,
88
+ },
89
+ {
90
+ id: 'global1',
91
+ spokenMessage: 'All content copied.',
92
+ actions: [],
93
+ content: 'All content copied.',
94
+ isDismissible: true,
95
+ explicitDismiss: false,
96
+ },
97
+ ],
98
+ };