@wordpress/components 21.1.2-next.4d3b314fd5.0 → 21.3.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 (401) hide show
  1. package/CHANGELOG.md +48 -3
  2. package/CONTRIBUTING.md +20 -0
  3. package/build/border-box-control/border-box-control/component.js +2 -0
  4. package/build/border-box-control/border-box-control/component.js.map +1 -1
  5. package/build/border-box-control/border-box-control/hook.js +4 -1
  6. package/build/border-box-control/border-box-control/hook.js.map +1 -1
  7. package/build/border-box-control/utils.js +42 -2
  8. package/build/border-box-control/utils.js.map +1 -1
  9. package/build/border-control/border-control/component.js +2 -0
  10. package/build/border-control/border-control/component.js.map +1 -1
  11. package/build/combobox-control/index.js +0 -1
  12. package/build/combobox-control/index.js.map +1 -1
  13. package/build/custom-select-control/index.js +4 -2
  14. package/build/custom-select-control/index.js.map +1 -1
  15. package/build/disabled/index.js +6 -26
  16. package/build/disabled/index.js.map +1 -1
  17. package/build/font-size-picker/index.js +47 -56
  18. package/build/font-size-picker/index.js.map +1 -1
  19. package/build/font-size-picker/styles.js +65 -0
  20. package/build/font-size-picker/styles.js.map +1 -0
  21. package/build/font-size-picker/types.js +6 -0
  22. package/build/font-size-picker/types.js.map +1 -0
  23. package/build/font-size-picker/utils.js +18 -16
  24. package/build/font-size-picker/utils.js.map +1 -1
  25. package/build/form-token-field/suggestions-list.js +5 -5
  26. package/build/form-token-field/suggestions-list.js.map +1 -1
  27. package/build/form-token-field/token-input.js +20 -1
  28. package/build/form-token-field/token-input.js.map +1 -1
  29. package/build/higher-order/with-fallback-styles/index.js +1 -1
  30. package/build/higher-order/with-fallback-styles/index.js.map +1 -1
  31. package/build/index.js +14 -6
  32. package/build/index.js.map +1 -1
  33. package/build/modal/aria-helper.js +2 -3
  34. package/build/modal/aria-helper.js.map +1 -1
  35. package/build/modal/index.js +42 -11
  36. package/build/modal/index.js.map +1 -1
  37. package/build/modal/types.js +6 -0
  38. package/build/modal/types.js.map +1 -0
  39. package/build/navigator/index.js +8 -8
  40. package/build/navigator/index.js.map +1 -1
  41. package/build/navigator/navigator-back-button/component.js +5 -4
  42. package/build/navigator/navigator-back-button/component.js.map +1 -1
  43. package/build/navigator/navigator-back-button/index.js +1 -1
  44. package/build/navigator/navigator-back-button/index.js.map +1 -1
  45. package/build/navigator/navigator-button/component.js +5 -4
  46. package/build/navigator/navigator-button/component.js.map +1 -1
  47. package/build/navigator/navigator-button/index.js +1 -1
  48. package/build/navigator/navigator-button/index.js.map +1 -1
  49. package/build/navigator/navigator-provider/component.js +10 -7
  50. package/build/navigator/navigator-provider/component.js.map +1 -1
  51. package/build/navigator/navigator-provider/index.js +1 -1
  52. package/build/navigator/navigator-provider/index.js.map +1 -1
  53. package/build/navigator/navigator-screen/component.js +30 -26
  54. package/build/navigator/navigator-screen/component.js.map +1 -1
  55. package/build/navigator/navigator-screen/index.js +1 -1
  56. package/build/navigator/navigator-screen/index.js.map +1 -1
  57. package/build/resizable-box/resize-tooltip/utils.js +12 -14
  58. package/build/resizable-box/resize-tooltip/utils.js.map +1 -1
  59. package/build/sandbox/index.js +68 -67
  60. package/build/sandbox/index.js.map +1 -1
  61. package/build/sandbox/index.native.js +66 -63
  62. package/build/sandbox/index.native.js.map +1 -1
  63. package/build/search-control/index.native.js +6 -2
  64. package/build/search-control/index.native.js.map +1 -1
  65. package/build/slot-fill/bubbles-virtually/slot-fill-context.js +8 -2
  66. package/build/slot-fill/bubbles-virtually/slot-fill-context.js.map +1 -1
  67. package/build/slot-fill/bubbles-virtually/slot-fill-provider.js +31 -41
  68. package/build/slot-fill/bubbles-virtually/slot-fill-provider.js.map +1 -1
  69. package/build/slot-fill/bubbles-virtually/use-slot-fills.js +39 -0
  70. package/build/slot-fill/bubbles-virtually/use-slot-fills.js.map +1 -0
  71. package/build/slot-fill/bubbles-virtually/use-slot.js +13 -4
  72. package/build/slot-fill/bubbles-virtually/use-slot.js.map +1 -1
  73. package/build/slot-fill/index.js +8 -0
  74. package/build/slot-fill/index.js.map +1 -1
  75. package/build/tab-panel/index.js +4 -4
  76. package/build/tab-panel/index.js.map +1 -1
  77. package/build/theme/index.js +62 -0
  78. package/build/theme/index.js.map +1 -0
  79. package/build/theme/styles.js +33 -0
  80. package/build/theme/styles.js.map +1 -0
  81. package/build/theme/types.js +6 -0
  82. package/build/theme/types.js.map +1 -0
  83. package/build/toggle-group-control/toggle-group-control-option-base/styles.js +8 -8
  84. package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  85. package/build/tools-panel/tools-panel/hook.js +3 -3
  86. package/build/tools-panel/tools-panel/hook.js.map +1 -1
  87. package/build/tools-panel/tools-panel-item/hook.js +6 -6
  88. package/build/tools-panel/tools-panel-item/hook.js.map +1 -1
  89. package/build/tooltip/index.js +4 -1
  90. package/build/tooltip/index.js.map +1 -1
  91. package/build/tooltip/index.native.js +17 -4
  92. package/build/tooltip/index.native.js.map +1 -1
  93. package/build-module/border-box-control/border-box-control/component.js +2 -0
  94. package/build-module/border-box-control/border-box-control/component.js.map +1 -1
  95. package/build-module/border-box-control/border-box-control/hook.js +4 -1
  96. package/build-module/border-box-control/border-box-control/hook.js.map +1 -1
  97. package/build-module/border-box-control/utils.js +36 -1
  98. package/build-module/border-box-control/utils.js.map +1 -1
  99. package/build-module/border-control/border-control/component.js +2 -0
  100. package/build-module/border-control/border-control/component.js.map +1 -1
  101. package/build-module/combobox-control/index.js +0 -1
  102. package/build-module/combobox-control/index.js.map +1 -1
  103. package/build-module/custom-select-control/index.js +2 -1
  104. package/build-module/custom-select-control/index.js.map +1 -1
  105. package/build-module/disabled/index.js +7 -26
  106. package/build-module/disabled/index.js.map +1 -1
  107. package/build-module/font-size-picker/index.js +46 -54
  108. package/build-module/font-size-picker/index.js.map +1 -1
  109. package/build-module/font-size-picker/styles.js +54 -0
  110. package/build-module/font-size-picker/styles.js.map +1 -0
  111. package/build-module/font-size-picker/types.js +2 -0
  112. package/build-module/font-size-picker/types.js.map +1 -0
  113. package/build-module/font-size-picker/utils.js +22 -16
  114. package/build-module/font-size-picker/utils.js.map +1 -1
  115. package/build-module/form-token-field/suggestions-list.js +5 -5
  116. package/build-module/form-token-field/suggestions-list.js.map +1 -1
  117. package/build-module/form-token-field/token-input.js +21 -2
  118. package/build-module/form-token-field/token-input.js.map +1 -1
  119. package/build-module/higher-order/with-fallback-styles/index.js +2 -2
  120. package/build-module/higher-order/with-fallback-styles/index.js.map +1 -1
  121. package/build-module/index.js +3 -2
  122. package/build-module/index.js.map +1 -1
  123. package/build-module/modal/aria-helper.js +2 -3
  124. package/build-module/modal/aria-helper.js.map +1 -1
  125. package/build-module/modal/index.js +44 -12
  126. package/build-module/modal/index.js.map +1 -1
  127. package/build-module/modal/types.js +2 -0
  128. package/build-module/modal/types.js.map +1 -0
  129. package/build-module/navigator/index.js +4 -4
  130. package/build-module/navigator/index.js.map +1 -1
  131. package/build-module/navigator/navigator-back-button/component.js +3 -3
  132. package/build-module/navigator/navigator-back-button/component.js.map +1 -1
  133. package/build-module/navigator/navigator-back-button/index.js +1 -1
  134. package/build-module/navigator/navigator-back-button/index.js.map +1 -1
  135. package/build-module/navigator/navigator-button/component.js +3 -3
  136. package/build-module/navigator/navigator-button/component.js.map +1 -1
  137. package/build-module/navigator/navigator-button/index.js +1 -1
  138. package/build-module/navigator/navigator-button/index.js.map +1 -1
  139. package/build-module/navigator/navigator-provider/component.js +8 -6
  140. package/build-module/navigator/navigator-provider/component.js.map +1 -1
  141. package/build-module/navigator/navigator-provider/index.js +1 -1
  142. package/build-module/navigator/navigator-provider/index.js.map +1 -1
  143. package/build-module/navigator/navigator-screen/component.js +18 -25
  144. package/build-module/navigator/navigator-screen/component.js.map +1 -1
  145. package/build-module/navigator/navigator-screen/index.js +1 -1
  146. package/build-module/navigator/navigator-screen/index.js.map +1 -1
  147. package/build-module/resizable-box/resize-tooltip/utils.js +13 -15
  148. package/build-module/resizable-box/resize-tooltip/utils.js.map +1 -1
  149. package/build-module/sandbox/index.js +69 -67
  150. package/build-module/sandbox/index.js.map +1 -1
  151. package/build-module/sandbox/index.native.js +57 -53
  152. package/build-module/sandbox/index.native.js.map +1 -1
  153. package/build-module/search-control/index.native.js +6 -2
  154. package/build-module/search-control/index.native.js.map +1 -1
  155. package/build-module/slot-fill/bubbles-virtually/slot-fill-context.js +7 -2
  156. package/build-module/slot-fill/bubbles-virtually/slot-fill-context.js.map +1 -1
  157. package/build-module/slot-fill/bubbles-virtually/slot-fill-provider.js +30 -42
  158. package/build-module/slot-fill/bubbles-virtually/slot-fill-provider.js.map +1 -1
  159. package/build-module/slot-fill/bubbles-virtually/use-slot-fills.js +27 -0
  160. package/build-module/slot-fill/bubbles-virtually/use-slot-fills.js.map +1 -0
  161. package/build-module/slot-fill/bubbles-virtually/use-slot.js +13 -5
  162. package/build-module/slot-fill/bubbles-virtually/use-slot.js.map +1 -1
  163. package/build-module/slot-fill/index.js +1 -0
  164. package/build-module/slot-fill/index.js.map +1 -1
  165. package/build-module/tab-panel/index.js +4 -4
  166. package/build-module/tab-panel/index.js.map +1 -1
  167. package/build-module/theme/index.js +52 -0
  168. package/build-module/theme/index.js.map +1 -0
  169. package/build-module/theme/styles.js +25 -0
  170. package/build-module/theme/styles.js.map +1 -0
  171. package/build-module/theme/types.js +2 -0
  172. package/build-module/theme/types.js.map +1 -0
  173. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +7 -7
  174. package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
  175. package/build-module/tools-panel/tools-panel/hook.js +3 -3
  176. package/build-module/tools-panel/tools-panel/hook.js.map +1 -1
  177. package/build-module/tools-panel/tools-panel-item/hook.js +6 -6
  178. package/build-module/tools-panel/tools-panel-item/hook.js.map +1 -1
  179. package/build-module/tooltip/index.js +4 -1
  180. package/build-module/tooltip/index.js.map +1 -1
  181. package/build-module/tooltip/index.native.js +17 -4
  182. package/build-module/tooltip/index.native.js.map +1 -1
  183. package/build-style/style-rtl.css +27 -120
  184. package/build-style/style.css +27 -120
  185. package/build-types/border-box-control/border-box-control/component.d.ts.map +1 -1
  186. package/build-types/border-box-control/border-box-control/hook.d.ts +1 -0
  187. package/build-types/border-box-control/border-box-control/hook.d.ts.map +1 -1
  188. package/build-types/border-box-control/utils.d.ts +1 -3
  189. package/build-types/border-box-control/utils.d.ts.map +1 -1
  190. package/build-types/border-control/border-control/component.d.ts +1 -0
  191. package/build-types/border-control/border-control/component.d.ts.map +1 -1
  192. package/build-types/border-control/border-control/hook.d.ts +1 -0
  193. package/build-types/border-control/border-control/hook.d.ts.map +1 -1
  194. package/build-types/border-control/stories/index.d.ts +6 -0
  195. package/build-types/border-control/stories/index.d.ts.map +1 -1
  196. package/build-types/border-control/types.d.ts +4 -0
  197. package/build-types/border-control/types.d.ts.map +1 -1
  198. package/build-types/confirm-dialog/types.d.ts +5 -1
  199. package/build-types/confirm-dialog/types.d.ts.map +1 -1
  200. package/build-types/custom-select-control/index.d.ts +13 -0
  201. package/build-types/custom-select-control/index.d.ts.map +1 -0
  202. package/build-types/custom-select-control/styles.d.ts +9 -0
  203. package/build-types/custom-select-control/styles.d.ts.map +1 -0
  204. package/build-types/disabled/index.d.ts.map +1 -1
  205. package/build-types/font-size-picker/index.d.ts +5 -0
  206. package/build-types/font-size-picker/index.d.ts.map +1 -0
  207. package/build-types/font-size-picker/stories/e2e/index.d.ts +16 -0
  208. package/build-types/font-size-picker/stories/e2e/index.d.ts.map +1 -0
  209. package/build-types/font-size-picker/stories/index.d.ts +31 -0
  210. package/build-types/font-size-picker/stories/index.d.ts.map +1 -0
  211. package/build-types/font-size-picker/styles.d.ts +27 -0
  212. package/build-types/font-size-picker/styles.d.ts.map +1 -0
  213. package/build-types/font-size-picker/test/index.d.ts +2 -0
  214. package/build-types/font-size-picker/test/index.d.ts.map +1 -0
  215. package/build-types/font-size-picker/test/utils.d.ts +2 -0
  216. package/build-types/font-size-picker/test/utils.d.ts.map +1 -0
  217. package/build-types/font-size-picker/types.d.ts +93 -0
  218. package/build-types/font-size-picker/types.d.ts.map +1 -0
  219. package/build-types/font-size-picker/utils.d.ts +41 -0
  220. package/build-types/font-size-picker/utils.d.ts.map +1 -0
  221. package/build-types/form-token-field/token-input.d.ts.map +1 -1
  222. package/build-types/modal/aria-helper.d.ts +4 -4
  223. package/build-types/modal/aria-helper.d.ts.map +1 -1
  224. package/build-types/modal/index.d.ts +35 -2
  225. package/build-types/modal/index.d.ts.map +1 -1
  226. package/build-types/modal/stories/index.d.ts +9 -0
  227. package/build-types/modal/stories/index.d.ts.map +1 -0
  228. package/build-types/modal/test/aria-helper.d.ts +2 -0
  229. package/build-types/modal/test/aria-helper.d.ts.map +1 -0
  230. package/build-types/modal/test/index.d.ts +2 -0
  231. package/build-types/modal/test/index.d.ts.map +1 -0
  232. package/build-types/modal/types.d.ts +134 -0
  233. package/build-types/modal/types.d.ts.map +1 -0
  234. package/build-types/navigator/index.d.ts +4 -4
  235. package/build-types/navigator/index.d.ts.map +1 -1
  236. package/build-types/navigator/navigator-back-button/component.d.ts +4 -2
  237. package/build-types/navigator/navigator-back-button/component.d.ts.map +1 -1
  238. package/build-types/navigator/navigator-back-button/hook.d.ts +1 -0
  239. package/build-types/navigator/navigator-back-button/hook.d.ts.map +1 -1
  240. package/build-types/navigator/navigator-back-button/index.d.ts +1 -1
  241. package/build-types/navigator/navigator-back-button/index.d.ts.map +1 -1
  242. package/build-types/navigator/navigator-button/component.d.ts +4 -2
  243. package/build-types/navigator/navigator-button/component.d.ts.map +1 -1
  244. package/build-types/navigator/navigator-button/hook.d.ts +1 -0
  245. package/build-types/navigator/navigator-button/hook.d.ts.map +1 -1
  246. package/build-types/navigator/navigator-button/index.d.ts +1 -1
  247. package/build-types/navigator/navigator-button/index.d.ts.map +1 -1
  248. package/build-types/navigator/navigator-provider/component.d.ts +2 -2
  249. package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
  250. package/build-types/navigator/navigator-provider/index.d.ts +1 -1
  251. package/build-types/navigator/navigator-provider/index.d.ts.map +1 -1
  252. package/build-types/navigator/navigator-screen/component.d.ts +2 -2
  253. package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
  254. package/build-types/navigator/navigator-screen/index.d.ts +1 -1
  255. package/build-types/navigator/navigator-screen/index.d.ts.map +1 -1
  256. package/build-types/navigator/stories/index.d.ts +9 -0
  257. package/build-types/navigator/stories/index.d.ts.map +1 -0
  258. package/build-types/navigator/test/index.d.ts +2 -0
  259. package/build-types/navigator/test/index.d.ts.map +1 -0
  260. package/build-types/navigator/types.d.ts +4 -1
  261. package/build-types/navigator/types.d.ts.map +1 -1
  262. package/build-types/slot-fill/bubbles-virtually/slot-fill-context.d.ts +2 -2
  263. package/build-types/slot-fill/bubbles-virtually/slot-fill-context.d.ts.map +1 -1
  264. package/build-types/slot-fill/bubbles-virtually/slot-fill-provider.d.ts.map +1 -1
  265. package/build-types/slot-fill/bubbles-virtually/use-slot-fills.d.ts +2 -0
  266. package/build-types/slot-fill/bubbles-virtually/use-slot-fills.d.ts.map +1 -0
  267. package/build-types/slot-fill/bubbles-virtually/use-slot.d.ts.map +1 -1
  268. package/build-types/slot-fill/index.d.ts +1 -0
  269. package/build-types/slot-fill/index.d.ts.map +1 -1
  270. package/build-types/tab-panel/index.d.ts.map +1 -1
  271. package/build-types/theme/index.d.ts +31 -0
  272. package/build-types/theme/index.d.ts.map +1 -0
  273. package/build-types/theme/stories/index.d.ts +13 -0
  274. package/build-types/theme/stories/index.d.ts.map +1 -0
  275. package/build-types/theme/styles.d.ts +10 -0
  276. package/build-types/theme/styles.d.ts.map +1 -0
  277. package/build-types/theme/test/index.d.ts +2 -0
  278. package/build-types/theme/test/index.d.ts.map +1 -0
  279. package/build-types/theme/types.d.ts +21 -0
  280. package/build-types/theme/types.d.ts.map +1 -0
  281. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts +1 -1
  282. package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
  283. package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
  284. package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
  285. package/build-types/tooltip/index.d.ts.map +1 -1
  286. package/package.json +19 -18
  287. package/src/alignment-matrix-control/test/index.js +17 -62
  288. package/src/base-field/test/index.js +4 -6
  289. package/src/border-box-control/border-box-control/component.tsx +2 -0
  290. package/src/border-box-control/border-box-control/hook.ts +4 -0
  291. package/src/border-box-control/test/index.js +7 -2
  292. package/src/border-box-control/test/utils.js +48 -0
  293. package/src/border-box-control/utils.ts +44 -1
  294. package/src/border-control/border-control/README.md +6 -0
  295. package/src/border-control/border-control/component.tsx +2 -0
  296. package/src/border-control/types.ts +4 -0
  297. package/src/button/style.scss +25 -25
  298. package/src/button/test/index.js +3 -5
  299. package/src/combobox-control/index.js +0 -5
  300. package/src/combobox-control/test/index.js +1 -1
  301. package/src/confirm-dialog/types.ts +6 -0
  302. package/src/custom-select-control/index.js +2 -1
  303. package/src/date-time/time/test/index.tsx +2 -6
  304. package/src/disabled/index.tsx +11 -33
  305. package/src/disabled/test/index.tsx +14 -82
  306. package/src/dropdown/test/index.js +4 -3
  307. package/src/font-size-picker/{index.js → index.tsx} +114 -80
  308. package/src/font-size-picker/stories/e2e/{index.js → index.tsx} +13 -4
  309. package/src/font-size-picker/stories/{index.js → index.tsx} +42 -36
  310. package/src/font-size-picker/styles.ts +46 -0
  311. package/src/font-size-picker/test/{index.js → index.tsx} +3 -3
  312. package/src/font-size-picker/test/{utils.js → utils.ts} +11 -7
  313. package/src/font-size-picker/types.ts +98 -0
  314. package/src/font-size-picker/{utils.js → utils.ts} +52 -28
  315. package/src/form-file-upload/test/index.tsx +1 -1
  316. package/src/form-token-field/suggestions-list.tsx +5 -5
  317. package/src/form-token-field/test/index.tsx +22 -1
  318. package/src/form-token-field/token-input.tsx +25 -3
  319. package/src/higher-order/with-fallback-styles/index.js +6 -2
  320. package/src/higher-order/with-focus-outside/test/index.js +44 -45
  321. package/src/higher-order/with-focus-return/test/index.js +34 -30
  322. package/src/higher-order/with-notices/test/index.js +1 -1
  323. package/src/index.js +3 -1
  324. package/src/input-control/test/index.js +2 -2
  325. package/src/item-group/test/index.js +2 -2
  326. package/src/menu-item/test/index.js +0 -3
  327. package/src/mobile/bottom-sheet/test/range-cell.native.js +16 -14
  328. package/src/modal/README.md +53 -54
  329. package/src/modal/{aria-helper.js → aria-helper.ts} +5 -7
  330. package/src/modal/{index.js → index.tsx} +48 -12
  331. package/src/modal/stories/{index.js → index.tsx} +47 -42
  332. package/src/modal/test/{aria-helper.js → aria-helper.ts} +0 -0
  333. package/src/modal/test/{index.js → index.tsx} +13 -3
  334. package/src/modal/types.ts +144 -0
  335. package/src/navigation/test/index.js +1 -1
  336. package/src/navigator/index.ts +4 -4
  337. package/src/navigator/navigator-back-button/component.tsx +4 -4
  338. package/src/navigator/navigator-back-button/index.ts +1 -1
  339. package/src/navigator/navigator-button/component.tsx +4 -4
  340. package/src/navigator/navigator-button/index.ts +1 -1
  341. package/src/navigator/navigator-provider/component.tsx +6 -4
  342. package/src/navigator/navigator-provider/index.ts +1 -1
  343. package/src/navigator/navigator-screen/component.tsx +27 -26
  344. package/src/navigator/navigator-screen/index.ts +1 -1
  345. package/src/navigator/stories/index.tsx +210 -0
  346. package/src/navigator/test/index.tsx +509 -0
  347. package/src/navigator/types.ts +2 -0
  348. package/src/notice/test/__snapshots__/index.js.snap +39 -38
  349. package/src/notice/test/index.js +15 -36
  350. package/src/notice/test/list.js +6 -14
  351. package/src/number-control/test/index.js +3 -2
  352. package/src/panel/test/body.js +2 -2
  353. package/src/placeholder/style.scss +7 -2
  354. package/src/resizable-box/resize-tooltip/utils.ts +13 -13
  355. package/src/sandbox/index.js +75 -54
  356. package/src/sandbox/index.native.js +75 -52
  357. package/src/sandbox/test/index.js +7 -10
  358. package/src/search-control/index.native.js +6 -0
  359. package/src/shortcut/test/index.tsx +1 -1
  360. package/src/slot-fill/bubbles-virtually/slot-fill-context.js +6 -2
  361. package/src/slot-fill/bubbles-virtually/slot-fill-provider.js +53 -58
  362. package/src/slot-fill/bubbles-virtually/use-slot-fills.js +24 -0
  363. package/src/slot-fill/bubbles-virtually/use-slot.js +11 -6
  364. package/src/slot-fill/index.js +1 -0
  365. package/src/style.scss +4 -1
  366. package/src/tab-panel/index.tsx +4 -7
  367. package/src/text-highlight/test/index.tsx +1 -3
  368. package/src/theme/README.md +34 -0
  369. package/src/theme/index.tsx +51 -0
  370. package/src/theme/stories/index.tsx +47 -0
  371. package/src/theme/styles.ts +28 -0
  372. package/src/theme/test/index.tsx +101 -0
  373. package/src/theme/types.ts +21 -0
  374. package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +1 -0
  375. package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +9 -7
  376. package/src/toolbar/test/index.js +2 -2
  377. package/src/toolbar-group/test/index.js +6 -10
  378. package/src/tools-panel/test/index.js +4 -6
  379. package/src/tools-panel/tools-panel/hook.ts +2 -9
  380. package/src/tools-panel/tools-panel-item/hook.ts +17 -3
  381. package/src/tooltip/index.js +3 -0
  382. package/src/tooltip/index.native.js +15 -0
  383. package/src/tooltip/test/index.native.js +1 -2
  384. package/src/tree-grid/test/__snapshots__/cell.js.snap +1 -3
  385. package/src/tree-grid/test/__snapshots__/roving-tab-index-item.js.snap +17 -15
  386. package/src/tree-grid/test/__snapshots__/row.js.snap +25 -21
  387. package/src/tree-grid/test/cell.js +4 -4
  388. package/src/tree-grid/test/roving-tab-index-item.js +8 -8
  389. package/src/tree-grid/test/roving-tab-index.js +3 -3
  390. package/src/tree-grid/test/row.js +20 -16
  391. package/src/truncate/test/index.tsx +4 -4
  392. package/src/ui/shortcut/test/index.js +2 -1
  393. package/src/ui/spinner/test/index.js +14 -13
  394. package/src/ui/tooltip/test/index.js +16 -14
  395. package/src/utils/theme-variables.scss +8 -0
  396. package/src/visually-hidden/README.md +4 -0
  397. package/tsconfig.json +0 -2
  398. package/tsconfig.tsbuildinfo +1 -1
  399. package/src/font-size-picker/style.scss +0 -78
  400. package/src/navigator/stories/index.js +0 -194
  401. package/src/navigator/test/index.js +0 -407
@@ -0,0 +1,509 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ReactNode, ForwardedRef, ComponentPropsWithoutRef } from 'react';
5
+ import { render, screen } from '@testing-library/react';
6
+ import userEvent from '@testing-library/user-event';
7
+
8
+ /**
9
+ * WordPress dependencies
10
+ */
11
+ import { useState } from '@wordpress/element';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import {
17
+ NavigatorProvider,
18
+ NavigatorScreen,
19
+ NavigatorButton,
20
+ NavigatorBackButton,
21
+ } from '..';
22
+
23
+ jest.mock( 'framer-motion', () => {
24
+ const actual = jest.requireActual( 'framer-motion' );
25
+ return {
26
+ __esModule: true,
27
+ ...actual,
28
+ AnimatePresence:
29
+ ( { children }: { children?: ReactNode } ) =>
30
+ () =>
31
+ <div>{ children }</div>,
32
+ motion: {
33
+ ...actual.motion,
34
+ div: require( 'react' ).forwardRef(
35
+ (
36
+ { children }: { children?: ReactNode },
37
+ ref: ForwardedRef< HTMLDivElement >
38
+ ) => <div ref={ ref }>{ children }</div>
39
+ ),
40
+ },
41
+ };
42
+ } );
43
+
44
+ const INVALID_HTML_ATTRIBUTE = {
45
+ raw: ' "\'><=invalid_path',
46
+ escaped: " &quot;'&gt;<=invalid_path",
47
+ };
48
+
49
+ const PATHS = {
50
+ HOME: '/',
51
+ CHILD: '/child',
52
+ NESTED: '/child/nested',
53
+ INVALID_HTML_ATTRIBUTE: INVALID_HTML_ATTRIBUTE.raw,
54
+ NOT_FOUND: '/not-found',
55
+ };
56
+
57
+ const SCREEN_TEXT = {
58
+ home: 'This is the home screen.',
59
+ child: 'This is the child screen.',
60
+ nested: 'This is the nested screen.',
61
+ invalidHtmlPath: 'This is the screen with an invalid HTML value as a path.',
62
+ };
63
+
64
+ const BUTTON_TEXT = {
65
+ toNonExistingScreen: 'Navigate to non-existing screen.',
66
+ toChildScreen: 'Navigate to child screen.',
67
+ toNestedScreen: 'Navigate to nested screen.',
68
+ toInvalidHtmlPathScreen:
69
+ 'Navigate to screen with an invalid HTML value as a path.',
70
+ back: 'Go back',
71
+ };
72
+
73
+ type CustomTestOnClickHandler = (
74
+ args:
75
+ | {
76
+ type: 'goTo';
77
+ path: string;
78
+ }
79
+ | { type: 'goBack' }
80
+ ) => void;
81
+
82
+ function CustomNavigatorButton( {
83
+ path,
84
+ onClick,
85
+ ...props
86
+ }: Omit< ComponentPropsWithoutRef< typeof NavigatorButton >, 'onClick' > & {
87
+ onClick?: CustomTestOnClickHandler;
88
+ } ) {
89
+ return (
90
+ <NavigatorButton
91
+ onClick={ () => {
92
+ // Used to spy on the values passed to `navigator.goTo`.
93
+ onClick?.( { type: 'goTo', path } );
94
+ } }
95
+ path={ path }
96
+ { ...props }
97
+ />
98
+ );
99
+ }
100
+
101
+ function CustomNavigatorButtonWithFocusRestoration( {
102
+ path,
103
+ onClick,
104
+ ...props
105
+ }: Omit< ComponentPropsWithoutRef< typeof NavigatorButton >, 'onClick' > & {
106
+ onClick?: CustomTestOnClickHandler;
107
+ } ) {
108
+ return (
109
+ <NavigatorButton
110
+ onClick={ () => {
111
+ // Used to spy on the values passed to `navigator.goTo`.
112
+ onClick?.( { type: 'goTo', path } );
113
+ } }
114
+ path={ path }
115
+ { ...props }
116
+ />
117
+ );
118
+ }
119
+
120
+ function CustomNavigatorBackButton( {
121
+ onClick,
122
+ ...props
123
+ }: Omit< ComponentPropsWithoutRef< typeof NavigatorBackButton >, 'onClick' > & {
124
+ onClick?: CustomTestOnClickHandler;
125
+ } ) {
126
+ return (
127
+ <NavigatorBackButton
128
+ onClick={ () => {
129
+ // Used to spy on the values passed to `navigator.goBack`.
130
+ onClick?.( { type: 'goBack' } );
131
+ } }
132
+ { ...props }
133
+ />
134
+ );
135
+ }
136
+
137
+ const MyNavigation = ( {
138
+ initialPath = PATHS.HOME,
139
+ onNavigatorButtonClick,
140
+ }: {
141
+ initialPath?: string;
142
+ onNavigatorButtonClick?: CustomTestOnClickHandler;
143
+ } ) => {
144
+ const [ innerInputValue, setInnerInputValue ] = useState( '' );
145
+ const [ outerInputValue, setOuterInputValue ] = useState( '' );
146
+ return (
147
+ <>
148
+ <NavigatorProvider initialPath={ initialPath }>
149
+ <NavigatorScreen path={ PATHS.HOME }>
150
+ <p>{ SCREEN_TEXT.home }</p>
151
+ <CustomNavigatorButton
152
+ path={ PATHS.NOT_FOUND }
153
+ onClick={ onNavigatorButtonClick }
154
+ >
155
+ { BUTTON_TEXT.toNonExistingScreen }
156
+ </CustomNavigatorButton>
157
+ <CustomNavigatorButton
158
+ path={ PATHS.CHILD }
159
+ onClick={ onNavigatorButtonClick }
160
+ >
161
+ { BUTTON_TEXT.toChildScreen }
162
+ </CustomNavigatorButton>
163
+ <CustomNavigatorButton
164
+ path={ PATHS.INVALID_HTML_ATTRIBUTE }
165
+ onClick={ onNavigatorButtonClick }
166
+ >
167
+ { BUTTON_TEXT.toInvalidHtmlPathScreen }
168
+ </CustomNavigatorButton>
169
+ </NavigatorScreen>
170
+
171
+ <NavigatorScreen path={ PATHS.CHILD }>
172
+ <p>{ SCREEN_TEXT.child }</p>
173
+ <CustomNavigatorButtonWithFocusRestoration
174
+ path={ PATHS.NESTED }
175
+ onClick={ onNavigatorButtonClick }
176
+ >
177
+ { BUTTON_TEXT.toNestedScreen }
178
+ </CustomNavigatorButtonWithFocusRestoration>
179
+ <CustomNavigatorBackButton
180
+ onClick={ onNavigatorButtonClick }
181
+ >
182
+ { BUTTON_TEXT.back }
183
+ </CustomNavigatorBackButton>
184
+
185
+ <label htmlFor="test-input-inner">Inner input</label>
186
+ <input
187
+ name="test-input-inner"
188
+ // eslint-disable-next-line no-restricted-syntax
189
+ id="test-input-inner"
190
+ onChange={ ( e ) => {
191
+ setInnerInputValue( e.target.value );
192
+ } }
193
+ value={ innerInputValue }
194
+ />
195
+ </NavigatorScreen>
196
+
197
+ <NavigatorScreen path={ PATHS.NESTED }>
198
+ <p>{ SCREEN_TEXT.nested }</p>
199
+ <CustomNavigatorBackButton
200
+ onClick={ onNavigatorButtonClick }
201
+ >
202
+ { BUTTON_TEXT.back }
203
+ </CustomNavigatorBackButton>
204
+ </NavigatorScreen>
205
+
206
+ <NavigatorScreen path={ PATHS.INVALID_HTML_ATTRIBUTE }>
207
+ <p>{ SCREEN_TEXT.invalidHtmlPath }</p>
208
+ <CustomNavigatorBackButton
209
+ onClick={ onNavigatorButtonClick }
210
+ >
211
+ { BUTTON_TEXT.back }
212
+ </CustomNavigatorBackButton>
213
+ </NavigatorScreen>
214
+
215
+ { /* A `NavigatorScreen` with `path={ PATHS.NOT_FOUND }` is purposefully not included. */ }
216
+ </NavigatorProvider>
217
+
218
+ <label htmlFor="test-input-outer">Outer input</label>
219
+ <input
220
+ name="test-input-outer"
221
+ // eslint-disable-next-line no-restricted-syntax
222
+ id="test-input-outer"
223
+ onChange={ ( e ) => {
224
+ setOuterInputValue( e.target.value );
225
+ } }
226
+ value={ outerInputValue }
227
+ />
228
+ </>
229
+ );
230
+ };
231
+
232
+ const getScreen = ( screenKey: keyof typeof SCREEN_TEXT ) =>
233
+ screen.getByText( SCREEN_TEXT[ screenKey ] );
234
+ const queryScreen = ( screenKey: keyof typeof SCREEN_TEXT ) =>
235
+ screen.queryByText( SCREEN_TEXT[ screenKey ] );
236
+ const getNavigationButton = ( buttonKey: keyof typeof BUTTON_TEXT ) =>
237
+ screen.getByRole( 'button', { name: BUTTON_TEXT[ buttonKey ] } );
238
+
239
+ describe( 'Navigator', () => {
240
+ const originalGetClientRects = window.Element.prototype.getClientRects;
241
+
242
+ // `getClientRects` needs to be mocked so that `isVisible` from the `@wordpress/dom`
243
+ // `focusable` module can pass, in a JSDOM env where the DOM elements have no width/height.
244
+ const mockedGetClientRects = jest.fn( () => [
245
+ {
246
+ x: 0,
247
+ y: 0,
248
+ width: 100,
249
+ height: 100,
250
+ },
251
+ ] );
252
+
253
+ beforeAll( () => {
254
+ // @ts-expect-error There's no need for an exact mock, this is just needed
255
+ // for the tests to pass (see `mockedGetClientRects` inline comments).
256
+ window.Element.prototype.getClientRects =
257
+ jest.fn( mockedGetClientRects );
258
+ } );
259
+
260
+ afterAll( () => {
261
+ window.Element.prototype.getClientRects = originalGetClientRects;
262
+ } );
263
+
264
+ it( 'should render', () => {
265
+ render( <MyNavigation /> );
266
+
267
+ expect( getScreen( 'home' ) ).toBeInTheDocument();
268
+ expect( queryScreen( 'child' ) ).not.toBeInTheDocument();
269
+ expect( queryScreen( 'nested' ) ).not.toBeInTheDocument();
270
+ } );
271
+
272
+ it( 'should show a different screen on the first render depending on the value of `initialPath`', () => {
273
+ render( <MyNavigation initialPath={ PATHS.CHILD } /> );
274
+
275
+ expect( queryScreen( 'home' ) ).not.toBeInTheDocument();
276
+ expect( getScreen( 'child' ) ).toBeInTheDocument();
277
+ expect( queryScreen( 'nested' ) ).not.toBeInTheDocument();
278
+ } );
279
+
280
+ it( 'should ignore changes to `initialPath` after the first render', () => {
281
+ const { rerender } = render( <MyNavigation /> );
282
+
283
+ expect( getScreen( 'home' ) ).toBeInTheDocument();
284
+ expect( queryScreen( 'child' ) ).not.toBeInTheDocument();
285
+ expect( queryScreen( 'nested' ) ).not.toBeInTheDocument();
286
+
287
+ rerender( <MyNavigation initialPath={ PATHS.CHILD } /> );
288
+
289
+ expect( getScreen( 'home' ) ).toBeInTheDocument();
290
+ expect( queryScreen( 'child' ) ).not.toBeInTheDocument();
291
+ expect( queryScreen( 'nested' ) ).not.toBeInTheDocument();
292
+ } );
293
+
294
+ it( 'should not rended anything if the `initialPath` does not match any available screen', () => {
295
+ render( <MyNavigation initialPath={ PATHS.NOT_FOUND } /> );
296
+
297
+ expect( queryScreen( 'home' ) ).not.toBeInTheDocument();
298
+ expect( queryScreen( 'child' ) ).not.toBeInTheDocument();
299
+ expect( queryScreen( 'nested' ) ).not.toBeInTheDocument();
300
+ } );
301
+
302
+ it( 'should navigate across screens', async () => {
303
+ const spy = jest.fn();
304
+
305
+ const user = userEvent.setup( {
306
+ advanceTimers: jest.advanceTimersByTime,
307
+ } );
308
+
309
+ render( <MyNavigation onNavigatorButtonClick={ spy } /> );
310
+
311
+ expect( getScreen( 'home' ) ).toBeInTheDocument();
312
+ expect( getNavigationButton( 'toChildScreen' ) ).toBeInTheDocument();
313
+
314
+ // Navigate to child screen.
315
+ await user.click( getNavigationButton( 'toChildScreen' ) );
316
+
317
+ expect( getScreen( 'child' ) ).toBeInTheDocument();
318
+ expect( getNavigationButton( 'back' ) ).toBeInTheDocument();
319
+
320
+ // Navigate back to home screen.
321
+ await user.click( getNavigationButton( 'back' ) );
322
+ expect( getScreen( 'home' ) ).toBeInTheDocument();
323
+ expect( getNavigationButton( 'toChildScreen' ) ).toBeInTheDocument();
324
+
325
+ // Navigate again to child screen.
326
+ await user.click( getNavigationButton( 'toChildScreen' ) );
327
+
328
+ expect( getScreen( 'child' ) ).toBeInTheDocument();
329
+ expect( getNavigationButton( 'toNestedScreen' ) ).toBeInTheDocument();
330
+
331
+ // Navigate to nested screen.
332
+ await user.click( getNavigationButton( 'toNestedScreen' ) );
333
+
334
+ expect( getScreen( 'nested' ) ).toBeInTheDocument();
335
+ expect( getNavigationButton( 'back' ) ).toBeInTheDocument();
336
+
337
+ // Navigate back to child screen.
338
+ await user.click( getNavigationButton( 'back' ) );
339
+
340
+ expect( getScreen( 'child' ) ).toBeInTheDocument();
341
+ expect( getNavigationButton( 'toNestedScreen' ) ).toBeInTheDocument();
342
+
343
+ // Navigate back to home screen.
344
+ await user.click( getNavigationButton( 'back' ) );
345
+
346
+ expect( getScreen( 'home' ) ).toBeInTheDocument();
347
+ expect( getNavigationButton( 'toChildScreen' ) ).toBeInTheDocument();
348
+
349
+ // Check the values passed to `navigator.goTo()`.
350
+ expect( spy ).toHaveBeenCalledTimes( 6 );
351
+ expect( spy ).toHaveBeenNthCalledWith( 1, {
352
+ path: PATHS.CHILD,
353
+ type: 'goTo',
354
+ } );
355
+ expect( spy ).toHaveBeenNthCalledWith( 2, {
356
+ type: 'goBack',
357
+ } );
358
+ expect( spy ).toHaveBeenNthCalledWith( 3, {
359
+ path: PATHS.CHILD,
360
+ type: 'goTo',
361
+ } );
362
+ expect( spy ).toHaveBeenNthCalledWith( 4, {
363
+ path: PATHS.NESTED,
364
+ type: 'goTo',
365
+ } );
366
+ expect( spy ).toHaveBeenNthCalledWith( 5, {
367
+ type: 'goBack',
368
+ } );
369
+ expect( spy ).toHaveBeenNthCalledWith( 6, {
370
+ type: 'goBack',
371
+ } );
372
+ } );
373
+
374
+ it( 'should not rended anything if the path does not match any available screen', async () => {
375
+ const spy = jest.fn();
376
+
377
+ const user = userEvent.setup( {
378
+ advanceTimers: jest.advanceTimersByTime,
379
+ } );
380
+
381
+ render( <MyNavigation onNavigatorButtonClick={ spy } /> );
382
+
383
+ expect(
384
+ getNavigationButton( 'toNonExistingScreen' )
385
+ ).toBeInTheDocument();
386
+
387
+ // Attempt to navigate to non-existing screen. No screens get rendered.
388
+ await user.click( getNavigationButton( 'toNonExistingScreen' ) );
389
+
390
+ expect( queryScreen( 'home' ) ).not.toBeInTheDocument();
391
+ expect( queryScreen( 'child' ) ).not.toBeInTheDocument();
392
+ expect( queryScreen( 'nested' ) ).not.toBeInTheDocument();
393
+
394
+ // Check the values passed to `navigator.goTo()`.
395
+ expect( spy ).toHaveBeenCalledTimes( 1 );
396
+ expect( spy ).toHaveBeenNthCalledWith( 1, {
397
+ path: PATHS.NOT_FOUND,
398
+ type: 'goTo',
399
+ } );
400
+ } );
401
+
402
+ it( 'should escape the value of the `path` prop', async () => {
403
+ const user = userEvent.setup( {
404
+ advanceTimers: jest.advanceTimersByTime,
405
+ } );
406
+
407
+ render( <MyNavigation /> );
408
+
409
+ expect( getScreen( 'home' ) ).toBeInTheDocument();
410
+ expect(
411
+ getNavigationButton( 'toInvalidHtmlPathScreen' )
412
+ ).toBeInTheDocument();
413
+
414
+ // The following line tests the implementation details, but it's necessary
415
+ // as this would be otherwise transparent to the user.
416
+ expect(
417
+ getNavigationButton( 'toInvalidHtmlPathScreen' )
418
+ ).toHaveAttribute( 'id', INVALID_HTML_ATTRIBUTE.escaped );
419
+
420
+ // Navigate to screen with an invalid HTML value for its `path`.
421
+ await user.click( getNavigationButton( 'toInvalidHtmlPathScreen' ) );
422
+
423
+ expect( getScreen( 'invalidHtmlPath' ) ).toBeInTheDocument();
424
+ expect( getNavigationButton( 'back' ) ).toBeInTheDocument();
425
+
426
+ // Navigate back to home screen, check that the focus restoration selector
427
+ // worked correctly despite the escaping.
428
+ await user.click( getNavigationButton( 'back' ) );
429
+
430
+ expect( getScreen( 'home' ) ).toBeInTheDocument();
431
+ expect(
432
+ getNavigationButton( 'toInvalidHtmlPathScreen' )
433
+ ).toHaveFocus();
434
+ } );
435
+
436
+ describe( 'focus management', () => {
437
+ it( 'should restore focus correctly', async () => {
438
+ const user = userEvent.setup( {
439
+ advanceTimers: jest.advanceTimersByTime,
440
+ } );
441
+
442
+ render( <MyNavigation /> );
443
+
444
+ // Navigate to child screen.
445
+ await user.click( getNavigationButton( 'toChildScreen' ) );
446
+
447
+ // The first tabbable element receives focus.
448
+ expect( getNavigationButton( 'toNestedScreen' ) ).toHaveFocus();
449
+
450
+ // Navigate to nested screen.
451
+ await user.click( getNavigationButton( 'toNestedScreen' ) );
452
+
453
+ // The first tabbable element receives focus.
454
+ expect( getNavigationButton( 'back' ) ).toHaveFocus();
455
+
456
+ // Navigate back to child screen.
457
+ await user.click( getNavigationButton( 'back' ) );
458
+
459
+ // The first tabbable element receives focus.
460
+ expect( getNavigationButton( 'toNestedScreen' ) ).toHaveFocus();
461
+
462
+ // Navigate back to home screen, check that focus was correctly restored.
463
+ await user.click( getNavigationButton( 'back' ) );
464
+
465
+ // The first tabbable element receives focus.
466
+ expect( getNavigationButton( 'toChildScreen' ) ).toHaveFocus();
467
+ } );
468
+
469
+ it( 'should keep focus on an active element inside navigator, while re-rendering', async () => {
470
+ const user = userEvent.setup( {
471
+ advanceTimers: jest.advanceTimersByTime,
472
+ } );
473
+
474
+ render( <MyNavigation /> );
475
+
476
+ // Navigate to child screen.
477
+ await user.click( getNavigationButton( 'toChildScreen' ) );
478
+
479
+ // The first tabbable element receives focus.
480
+ expect( getNavigationButton( 'toNestedScreen' ) ).toHaveFocus();
481
+
482
+ // Interact with the inner input.
483
+ // The focus should stay on the input element.
484
+ const innerInput = screen.getByLabelText( 'Inner input' );
485
+ await user.type( innerInput, 'd' );
486
+ expect( innerInput ).toHaveFocus();
487
+ } );
488
+
489
+ it( 'should keep focus on an active element outside navigator, while re-rendering', async () => {
490
+ const user = userEvent.setup( {
491
+ advanceTimers: jest.advanceTimersByTime,
492
+ } );
493
+
494
+ render( <MyNavigation /> );
495
+
496
+ // Navigate to child screen.
497
+ await user.click( getNavigationButton( 'toChildScreen' ) );
498
+
499
+ // The first tabbable element receives focus.
500
+ expect( getNavigationButton( 'toNestedScreen' ) ).toHaveFocus();
501
+
502
+ // Interact with the outer input.
503
+ // The focus should stay on the input element.
504
+ const outerInput = screen.getByLabelText( 'Outer input' );
505
+ await user.type( outerInput, 'd' );
506
+ expect( outerInput ).toHaveFocus();
507
+ } );
508
+ } );
509
+ } );
@@ -11,6 +11,7 @@ export type NavigatorLocation = NavigateOptions & {
11
11
  isInitial?: boolean;
12
12
  isBack?: boolean;
13
13
  path?: string;
14
+ hasRestoredFocus?: boolean;
14
15
  };
15
16
 
16
17
  export type NavigatorContext = {
@@ -47,6 +48,7 @@ export type NavigatorScreenProps = {
47
48
  type ButtonProps = {
48
49
  // TODO: should also extend `Button` prop types once the `Button` component
49
50
  // is refactored to TypeScript.
51
+ variant?: 'primary' | 'secondary' | 'tertiary' | 'link';
50
52
  };
51
53
  export type NavigatorBackButtonProps = Omit< ButtonProps, 'href' > & {
52
54
  /**
@@ -1,54 +1,55 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`Notice should match snapshot 1`] = `
4
- <div
5
- className="components-notice is-success is-dismissible"
6
- >
4
+ <div>
7
5
  <div
8
- className="components-notice__content"
6
+ class="components-notice is-success is-dismissible"
9
7
  >
10
- Example
11
8
  <div
12
- className="components-notice__actions"
9
+ class="components-notice__content"
13
10
  >
14
- <ForwardRef(Button)
15
- className="components-notice__action"
16
- href="https://example.com"
17
- variant="link"
11
+ Example
12
+ <div
13
+ class="components-notice__actions"
18
14
  >
19
- More information
20
- </ForwardRef(Button)>
21
- <ForwardRef(Button)
22
- className="components-notice__action"
23
- onClick={[Function]}
24
- variant="secondary"
25
- >
26
- Cancel
27
- </ForwardRef(Button)>
28
- <ForwardRef(Button)
29
- className="components-notice__action"
30
- onClick={[Function]}
31
- variant="primary"
32
- >
33
- Submit
34
- </ForwardRef(Button)>
15
+ <a
16
+ class="components-button components-notice__action is-link"
17
+ href="https://example.com"
18
+ >
19
+ More information
20
+ </a>
21
+ <button
22
+ class="components-button components-notice__action is-secondary"
23
+ type="button"
24
+ >
25
+ Cancel
26
+ </button>
27
+ <button
28
+ class="components-button components-notice__action is-primary"
29
+ type="button"
30
+ >
31
+ Submit
32
+ </button>
33
+ </div>
35
34
  </div>
36
- </div>
37
- <ForwardRef(Button)
38
- className="components-notice__dismiss"
39
- icon={
40
- <SVG
35
+ <button
36
+ aria-label="Dismiss this notice"
37
+ class="components-button components-notice__dismiss has-icon"
38
+ type="button"
39
+ >
40
+ <svg
41
+ aria-hidden="true"
42
+ focusable="false"
43
+ height="24"
41
44
  viewBox="0 0 24 24"
45
+ width="24"
42
46
  xmlns="http://www.w3.org/2000/svg"
43
47
  >
44
- <Path
48
+ <path
45
49
  d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"
46
50
  />
47
- </SVG>
48
- }
49
- label="Dismiss this notice"
50
- onClick={[Function]}
51
- showTooltip={false}
52
- />
51
+ </svg>
52
+ </button>
53
+ </div>
53
54
  </div>
54
55
  `;