@wordpress/ui 0.9.1-next.v.202603161435.0 → 0.11.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 (655) hide show
  1. package/CHANGELOG.md +76 -1
  2. package/CONTRIBUTING.md +180 -0
  3. package/README.md +34 -6
  4. package/build/alert-dialog/context.cjs +39 -0
  5. package/build/alert-dialog/context.cjs.map +7 -0
  6. package/build/alert-dialog/index.cjs +37 -0
  7. package/build/alert-dialog/index.cjs.map +7 -0
  8. package/build/alert-dialog/popup.cjs +165 -0
  9. package/build/alert-dialog/popup.cjs.map +7 -0
  10. package/build/alert-dialog/root.cjs +152 -0
  11. package/build/alert-dialog/root.cjs.map +7 -0
  12. package/build/alert-dialog/trigger.cjs +38 -0
  13. package/build/alert-dialog/trigger.cjs.map +7 -0
  14. package/build/alert-dialog/types.cjs +19 -0
  15. package/build/alert-dialog/types.cjs.map +7 -0
  16. package/build/badge/badge.cjs +14 -14
  17. package/build/badge/badge.cjs.map +2 -2
  18. package/build/button/button.cjs +18 -8
  19. package/build/button/button.cjs.map +3 -3
  20. package/build/card/content.cjs +4 -4
  21. package/build/card/content.cjs.map +2 -2
  22. package/build/card/full-bleed.cjs +4 -4
  23. package/build/card/full-bleed.cjs.map +2 -2
  24. package/build/card/header.cjs +4 -4
  25. package/build/card/header.cjs.map +2 -2
  26. package/build/card/root.cjs +6 -6
  27. package/build/card/root.cjs.map +2 -2
  28. package/build/card/title.cjs +14 -21
  29. package/build/card/title.cjs.map +3 -3
  30. package/build/collapsible-card/content.cjs +24 -3
  31. package/build/collapsible-card/content.cjs.map +4 -4
  32. package/build/collapsible-card/context.cjs +35 -0
  33. package/build/collapsible-card/context.cjs.map +7 -0
  34. package/build/collapsible-card/header-description.cjs +52 -0
  35. package/build/collapsible-card/header-description.cjs.map +7 -0
  36. package/build/collapsible-card/header.cjs +39 -18
  37. package/build/collapsible-card/header.cjs.map +2 -2
  38. package/build/collapsible-card/index.cjs +3 -0
  39. package/build/collapsible-card/index.cjs.map +2 -2
  40. package/build/collapsible-card/types.cjs.map +1 -1
  41. package/build/dialog/action.cjs +4 -2
  42. package/build/dialog/action.cjs.map +2 -2
  43. package/build/dialog/close-icon.cjs +2 -1
  44. package/build/dialog/close-icon.cjs.map +2 -2
  45. package/build/dialog/footer.cjs +3 -3
  46. package/build/dialog/footer.cjs.map +2 -2
  47. package/build/dialog/header.cjs +3 -3
  48. package/build/dialog/header.cjs.map +2 -2
  49. package/build/dialog/popup.cjs +24 -6
  50. package/build/dialog/popup.cjs.map +2 -2
  51. package/build/dialog/title.cjs +10 -19
  52. package/build/dialog/title.cjs.map +3 -3
  53. package/build/dialog/types.cjs.map +1 -1
  54. package/build/empty-state/actions.cjs +66 -0
  55. package/build/empty-state/actions.cjs.map +7 -0
  56. package/build/empty-state/description.cjs +69 -0
  57. package/build/empty-state/description.cjs.map +7 -0
  58. package/build/empty-state/icon.cjs +69 -0
  59. package/build/empty-state/icon.cjs.map +7 -0
  60. package/build/empty-state/index.cjs +46 -0
  61. package/build/empty-state/index.cjs.map +7 -0
  62. package/build/empty-state/root.cjs +66 -0
  63. package/build/empty-state/root.cjs.map +7 -0
  64. package/build/empty-state/title.cjs +71 -0
  65. package/build/empty-state/title.cjs.map +7 -0
  66. package/build/empty-state/types.cjs +19 -0
  67. package/build/empty-state/types.cjs.map +7 -0
  68. package/build/empty-state/visual.cjs +66 -0
  69. package/build/empty-state/visual.cjs.map +7 -0
  70. package/build/form/index.cjs +27 -0
  71. package/build/form/index.cjs.map +7 -0
  72. package/build/form/input-control/index.cjs +31 -0
  73. package/build/form/input-control/index.cjs.map +7 -0
  74. package/build/form/input-control/input-control.cjs +50 -0
  75. package/build/form/input-control/input-control.cjs.map +7 -0
  76. package/build/form/input-control/types.cjs +19 -0
  77. package/build/form/input-control/types.cjs.map +7 -0
  78. package/build/form/primitives/field/description.cjs +17 -4
  79. package/build/form/primitives/field/description.cjs.map +3 -3
  80. package/build/form/primitives/field/details.cjs +4 -4
  81. package/build/form/primitives/field/details.cjs.map +2 -2
  82. package/build/form/primitives/field/label.cjs +8 -8
  83. package/build/form/primitives/field/label.cjs.map +2 -2
  84. package/build/form/primitives/field/root.cjs +2 -2
  85. package/build/form/primitives/field/root.cjs.map +1 -1
  86. package/build/form/primitives/fieldset/description.cjs +20 -4
  87. package/build/form/primitives/fieldset/description.cjs.map +3 -3
  88. package/build/form/primitives/fieldset/details.cjs +3 -3
  89. package/build/form/primitives/fieldset/details.cjs.map +2 -2
  90. package/build/form/primitives/fieldset/legend.cjs +8 -7
  91. package/build/form/primitives/fieldset/legend.cjs.map +2 -2
  92. package/build/form/primitives/fieldset/root.cjs +2 -2
  93. package/build/form/primitives/fieldset/root.cjs.map +1 -1
  94. package/build/form/primitives/input/input.cjs +23 -7
  95. package/build/form/primitives/input/input.cjs.map +3 -3
  96. package/build/form/primitives/input-layout/input-layout.cjs +15 -5
  97. package/build/form/primitives/input-layout/input-layout.cjs.map +3 -3
  98. package/build/form/primitives/input-layout/slot.cjs +6 -5
  99. package/build/form/primitives/input-layout/slot.cjs.map +2 -2
  100. package/build/form/primitives/select/item.cjs +5 -5
  101. package/build/form/primitives/select/item.cjs.map +2 -2
  102. package/build/form/primitives/select/popup.cjs +9 -9
  103. package/build/form/primitives/select/popup.cjs.map +2 -2
  104. package/build/form/primitives/select/trigger.cjs +6 -6
  105. package/build/form/primitives/select/trigger.cjs.map +2 -2
  106. package/build/form/primitives/select/types.cjs.map +1 -1
  107. package/build/form/primitives/textarea/textarea.cjs +23 -4
  108. package/build/form/primitives/textarea/textarea.cjs.map +3 -3
  109. package/build/form/types.cjs +19 -0
  110. package/build/form/types.cjs.map +7 -0
  111. package/build/icon-button/icon-button.cjs +2 -2
  112. package/build/icon-button/icon-button.cjs.map +1 -1
  113. package/build/index.cjs +11 -2
  114. package/build/index.cjs.map +2 -2
  115. package/build/link/link.cjs +18 -8
  116. package/build/link/link.cjs.map +3 -3
  117. package/build/notice/action-button.cjs +3 -3
  118. package/build/notice/action-button.cjs.map +2 -2
  119. package/build/notice/action-link.cjs +3 -3
  120. package/build/notice/action-link.cjs.map +2 -2
  121. package/build/notice/actions.cjs +3 -3
  122. package/build/notice/actions.cjs.map +2 -2
  123. package/build/notice/close-icon.cjs +3 -3
  124. package/build/notice/close-icon.cjs.map +2 -2
  125. package/build/notice/description.cjs +3 -3
  126. package/build/notice/description.cjs.map +2 -2
  127. package/build/notice/index.cjs.map +1 -1
  128. package/build/notice/root.cjs +5 -5
  129. package/build/notice/root.cjs.map +2 -2
  130. package/build/notice/title.cjs +3 -3
  131. package/build/notice/title.cjs.map +2 -2
  132. package/build/popover/arrow.cjs +94 -0
  133. package/build/popover/arrow.cjs.map +7 -0
  134. package/build/popover/close.cjs +45 -0
  135. package/build/popover/close.cjs.map +7 -0
  136. package/build/popover/context.cjs +76 -0
  137. package/build/popover/context.cjs.map +7 -0
  138. package/build/popover/description.cjs +70 -0
  139. package/build/popover/description.cjs.map +7 -0
  140. package/build/popover/index.cjs +49 -0
  141. package/build/popover/index.cjs.map +7 -0
  142. package/build/popover/popup.cjs +138 -0
  143. package/build/popover/popup.cjs.map +7 -0
  144. package/build/popover/root.cjs +35 -0
  145. package/build/popover/root.cjs.map +7 -0
  146. package/build/popover/title.cjs +56 -0
  147. package/build/popover/title.cjs.map +7 -0
  148. package/build/popover/trigger.cjs +38 -0
  149. package/build/popover/trigger.cjs.map +7 -0
  150. package/build/popover/types.cjs +19 -0
  151. package/build/popover/types.cjs.map +7 -0
  152. package/build/stack/stack.cjs +2 -2
  153. package/build/stack/stack.cjs.map +1 -1
  154. package/build/tabs/context.cjs +121 -0
  155. package/build/tabs/context.cjs.map +7 -0
  156. package/build/tabs/list.cjs +3 -4
  157. package/build/tabs/list.cjs.map +2 -2
  158. package/build/tabs/panel.cjs +5 -3
  159. package/build/tabs/panel.cjs.map +2 -2
  160. package/build/tabs/root.cjs +2 -1
  161. package/build/tabs/root.cjs.map +2 -2
  162. package/build/tabs/tab.cjs +5 -3
  163. package/build/tabs/tab.cjs.map +2 -2
  164. package/build/text/text.cjs +20 -5
  165. package/build/text/text.cjs.map +3 -3
  166. package/build/tooltip/popup.cjs +7 -6
  167. package/build/tooltip/popup.cjs.map +2 -2
  168. package/build/tooltip/root.cjs.map +2 -2
  169. package/build/tooltip/types.cjs.map +1 -1
  170. package/build/utils/types.cjs.map +1 -1
  171. package/build/utils/use-deprioritized-initial-focus.cjs +64 -0
  172. package/build/utils/use-deprioritized-initial-focus.cjs.map +7 -0
  173. package/build/visually-hidden/visually-hidden.cjs +2 -2
  174. package/build/visually-hidden/visually-hidden.cjs.map +2 -2
  175. package/build-module/alert-dialog/context.mjs +14 -0
  176. package/build-module/alert-dialog/context.mjs.map +7 -0
  177. package/build-module/alert-dialog/index.mjs +10 -0
  178. package/build-module/alert-dialog/index.mjs.map +7 -0
  179. package/build-module/alert-dialog/popup.mjs +132 -0
  180. package/build-module/alert-dialog/popup.mjs.map +7 -0
  181. package/build-module/alert-dialog/root.mjs +133 -0
  182. package/build-module/alert-dialog/root.mjs.map +7 -0
  183. package/build-module/alert-dialog/trigger.mjs +13 -0
  184. package/build-module/alert-dialog/trigger.mjs.map +7 -0
  185. package/build-module/alert-dialog/types.mjs +1 -0
  186. package/build-module/alert-dialog/types.mjs.map +7 -0
  187. package/build-module/badge/badge.mjs +14 -14
  188. package/build-module/badge/badge.mjs.map +2 -2
  189. package/build-module/button/button.mjs +18 -8
  190. package/build-module/button/button.mjs.map +3 -3
  191. package/build-module/card/content.mjs +4 -4
  192. package/build-module/card/content.mjs.map +2 -2
  193. package/build-module/card/full-bleed.mjs +4 -4
  194. package/build-module/card/full-bleed.mjs.map +2 -2
  195. package/build-module/card/header.mjs +4 -4
  196. package/build-module/card/header.mjs.map +2 -2
  197. package/build-module/card/root.mjs +6 -6
  198. package/build-module/card/root.mjs.map +2 -2
  199. package/build-module/card/title.mjs +14 -21
  200. package/build-module/card/title.mjs.map +3 -3
  201. package/build-module/collapsible-card/content.mjs +24 -3
  202. package/build-module/collapsible-card/content.mjs.map +3 -3
  203. package/build-module/collapsible-card/context.mjs +10 -0
  204. package/build-module/collapsible-card/context.mjs.map +7 -0
  205. package/build-module/collapsible-card/header-description.mjs +27 -0
  206. package/build-module/collapsible-card/header-description.mjs.map +7 -0
  207. package/build-module/collapsible-card/header.mjs +40 -19
  208. package/build-module/collapsible-card/header.mjs.map +2 -2
  209. package/build-module/collapsible-card/index.mjs +2 -0
  210. package/build-module/collapsible-card/index.mjs.map +2 -2
  211. package/build-module/dialog/action.mjs +4 -2
  212. package/build-module/dialog/action.mjs.map +2 -2
  213. package/build-module/dialog/close-icon.mjs +2 -1
  214. package/build-module/dialog/close-icon.mjs.map +2 -2
  215. package/build-module/dialog/footer.mjs +3 -3
  216. package/build-module/dialog/footer.mjs.map +2 -2
  217. package/build-module/dialog/header.mjs +3 -3
  218. package/build-module/dialog/header.mjs.map +2 -2
  219. package/build-module/dialog/popup.mjs +24 -6
  220. package/build-module/dialog/popup.mjs.map +2 -2
  221. package/build-module/dialog/title.mjs +10 -9
  222. package/build-module/dialog/title.mjs.map +2 -2
  223. package/build-module/empty-state/actions.mjs +31 -0
  224. package/build-module/empty-state/actions.mjs.map +7 -0
  225. package/build-module/empty-state/description.mjs +34 -0
  226. package/build-module/empty-state/description.mjs.map +7 -0
  227. package/build-module/empty-state/icon.mjs +34 -0
  228. package/build-module/empty-state/icon.mjs.map +7 -0
  229. package/build-module/empty-state/index.mjs +16 -0
  230. package/build-module/empty-state/index.mjs.map +7 -0
  231. package/build-module/empty-state/root.mjs +31 -0
  232. package/build-module/empty-state/root.mjs.map +7 -0
  233. package/build-module/empty-state/title.mjs +36 -0
  234. package/build-module/empty-state/title.mjs.map +7 -0
  235. package/build-module/empty-state/types.mjs +1 -0
  236. package/build-module/empty-state/types.mjs.map +7 -0
  237. package/build-module/empty-state/visual.mjs +31 -0
  238. package/build-module/empty-state/visual.mjs.map +7 -0
  239. package/build-module/form/index.mjs +4 -0
  240. package/build-module/form/index.mjs.map +7 -0
  241. package/build-module/form/input-control/index.mjs +6 -0
  242. package/build-module/form/input-control/index.mjs.map +7 -0
  243. package/build-module/form/input-control/input-control.mjs +25 -0
  244. package/build-module/form/input-control/input-control.mjs.map +7 -0
  245. package/build-module/form/input-control/types.mjs +1 -0
  246. package/build-module/form/input-control/types.mjs.map +7 -0
  247. package/build-module/form/primitives/field/description.mjs +17 -4
  248. package/build-module/form/primitives/field/description.mjs.map +3 -3
  249. package/build-module/form/primitives/field/details.mjs +4 -4
  250. package/build-module/form/primitives/field/details.mjs.map +2 -2
  251. package/build-module/form/primitives/field/label.mjs +8 -8
  252. package/build-module/form/primitives/field/label.mjs.map +2 -2
  253. package/build-module/form/primitives/field/root.mjs +2 -2
  254. package/build-module/form/primitives/field/root.mjs.map +1 -1
  255. package/build-module/form/primitives/fieldset/description.mjs +20 -4
  256. package/build-module/form/primitives/fieldset/description.mjs.map +3 -3
  257. package/build-module/form/primitives/fieldset/details.mjs +3 -3
  258. package/build-module/form/primitives/fieldset/details.mjs.map +2 -2
  259. package/build-module/form/primitives/fieldset/legend.mjs +8 -7
  260. package/build-module/form/primitives/fieldset/legend.mjs.map +2 -2
  261. package/build-module/form/primitives/fieldset/root.mjs +2 -2
  262. package/build-module/form/primitives/fieldset/root.mjs.map +1 -1
  263. package/build-module/form/primitives/input/input.mjs +23 -7
  264. package/build-module/form/primitives/input/input.mjs.map +3 -3
  265. package/build-module/form/primitives/input-layout/input-layout.mjs +15 -5
  266. package/build-module/form/primitives/input-layout/input-layout.mjs.map +3 -3
  267. package/build-module/form/primitives/input-layout/slot.mjs +6 -5
  268. package/build-module/form/primitives/input-layout/slot.mjs.map +2 -2
  269. package/build-module/form/primitives/select/item.mjs +5 -5
  270. package/build-module/form/primitives/select/item.mjs.map +2 -2
  271. package/build-module/form/primitives/select/popup.mjs +9 -9
  272. package/build-module/form/primitives/select/popup.mjs.map +2 -2
  273. package/build-module/form/primitives/select/trigger.mjs +6 -6
  274. package/build-module/form/primitives/select/trigger.mjs.map +2 -2
  275. package/build-module/form/primitives/textarea/textarea.mjs +23 -4
  276. package/build-module/form/primitives/textarea/textarea.mjs.map +3 -3
  277. package/build-module/form/types.mjs +1 -0
  278. package/build-module/form/types.mjs.map +7 -0
  279. package/build-module/icon-button/icon-button.mjs +2 -2
  280. package/build-module/icon-button/icon-button.mjs.map +1 -1
  281. package/build-module/index.mjs +7 -1
  282. package/build-module/index.mjs.map +2 -2
  283. package/build-module/link/link.mjs +18 -8
  284. package/build-module/link/link.mjs.map +3 -3
  285. package/build-module/notice/action-button.mjs +3 -3
  286. package/build-module/notice/action-button.mjs.map +2 -2
  287. package/build-module/notice/action-link.mjs +3 -3
  288. package/build-module/notice/action-link.mjs.map +2 -2
  289. package/build-module/notice/actions.mjs +3 -3
  290. package/build-module/notice/actions.mjs.map +2 -2
  291. package/build-module/notice/close-icon.mjs +3 -3
  292. package/build-module/notice/close-icon.mjs.map +2 -2
  293. package/build-module/notice/description.mjs +3 -3
  294. package/build-module/notice/description.mjs.map +2 -2
  295. package/build-module/notice/index.mjs.map +1 -1
  296. package/build-module/notice/root.mjs +5 -5
  297. package/build-module/notice/root.mjs.map +2 -2
  298. package/build-module/notice/title.mjs +3 -3
  299. package/build-module/notice/title.mjs.map +2 -2
  300. package/build-module/popover/arrow.mjs +59 -0
  301. package/build-module/popover/arrow.mjs.map +7 -0
  302. package/build-module/popover/close.mjs +20 -0
  303. package/build-module/popover/close.mjs.map +7 -0
  304. package/build-module/popover/context.mjs +57 -0
  305. package/build-module/popover/context.mjs.map +7 -0
  306. package/build-module/popover/description.mjs +35 -0
  307. package/build-module/popover/description.mjs.map +7 -0
  308. package/build-module/popover/index.mjs +18 -0
  309. package/build-module/popover/index.mjs.map +7 -0
  310. package/build-module/popover/popup.mjs +105 -0
  311. package/build-module/popover/popup.mjs.map +7 -0
  312. package/build-module/popover/root.mjs +10 -0
  313. package/build-module/popover/root.mjs.map +7 -0
  314. package/build-module/popover/title.mjs +31 -0
  315. package/build-module/popover/title.mjs.map +7 -0
  316. package/build-module/popover/trigger.mjs +13 -0
  317. package/build-module/popover/trigger.mjs.map +7 -0
  318. package/build-module/popover/types.mjs +1 -0
  319. package/build-module/popover/types.mjs.map +7 -0
  320. package/build-module/stack/stack.mjs +2 -2
  321. package/build-module/stack/stack.mjs.map +1 -1
  322. package/build-module/tabs/context.mjs +101 -0
  323. package/build-module/tabs/context.mjs.map +7 -0
  324. package/build-module/tabs/list.mjs +3 -4
  325. package/build-module/tabs/list.mjs.map +2 -2
  326. package/build-module/tabs/panel.mjs +5 -3
  327. package/build-module/tabs/panel.mjs.map +2 -2
  328. package/build-module/tabs/root.mjs +2 -1
  329. package/build-module/tabs/root.mjs.map +2 -2
  330. package/build-module/tabs/tab.mjs +5 -3
  331. package/build-module/tabs/tab.mjs.map +2 -2
  332. package/build-module/text/text.mjs +20 -5
  333. package/build-module/text/text.mjs.map +3 -3
  334. package/build-module/tooltip/popup.mjs +7 -6
  335. package/build-module/tooltip/popup.mjs.map +2 -2
  336. package/build-module/tooltip/root.mjs.map +2 -2
  337. package/build-module/utils/use-deprioritized-initial-focus.mjs +39 -0
  338. package/build-module/utils/use-deprioritized-initial-focus.mjs.map +7 -0
  339. package/build-module/visually-hidden/visually-hidden.mjs +2 -2
  340. package/build-module/visually-hidden/visually-hidden.mjs.map +2 -2
  341. package/build-types/alert-dialog/context.d.ts +11 -0
  342. package/build-types/alert-dialog/context.d.ts.map +1 -0
  343. package/build-types/alert-dialog/index.d.ts +4 -0
  344. package/build-types/alert-dialog/index.d.ts.map +1 -0
  345. package/build-types/alert-dialog/popup.d.ts +4 -0
  346. package/build-types/alert-dialog/popup.d.ts.map +1 -0
  347. package/build-types/alert-dialog/root.d.ts +18 -0
  348. package/build-types/alert-dialog/root.d.ts.map +1 -0
  349. package/build-types/alert-dialog/stories/index.story.d.ts +56 -0
  350. package/build-types/alert-dialog/stories/index.story.d.ts.map +1 -0
  351. package/build-types/alert-dialog/test/index.test.d.ts +2 -0
  352. package/build-types/alert-dialog/test/index.test.d.ts.map +1 -0
  353. package/build-types/alert-dialog/trigger.d.ts +7 -0
  354. package/build-types/alert-dialog/trigger.d.ts.map +1 -0
  355. package/build-types/alert-dialog/types.d.ts +105 -0
  356. package/build-types/alert-dialog/types.d.ts.map +1 -0
  357. package/build-types/badge/badge.d.ts.map +1 -1
  358. package/build-types/button/button.d.ts.map +1 -1
  359. package/build-types/card/stories/index.story.d.ts.map +1 -1
  360. package/build-types/card/title.d.ts.map +1 -1
  361. package/build-types/collapsible/panel.d.ts +2 -1
  362. package/build-types/collapsible/panel.d.ts.map +1 -1
  363. package/build-types/collapsible/root.d.ts +2 -1
  364. package/build-types/collapsible/root.d.ts.map +1 -1
  365. package/build-types/collapsible/trigger.d.ts +2 -1
  366. package/build-types/collapsible/trigger.d.ts.map +1 -1
  367. package/build-types/collapsible-card/content.d.ts.map +1 -1
  368. package/build-types/collapsible-card/context.d.ts +4 -0
  369. package/build-types/collapsible-card/context.d.ts.map +1 -0
  370. package/build-types/collapsible-card/header-description.d.ts +15 -0
  371. package/build-types/collapsible-card/header-description.d.ts.map +1 -0
  372. package/build-types/collapsible-card/header.d.ts.map +1 -1
  373. package/build-types/collapsible-card/index.d.ts +2 -1
  374. package/build-types/collapsible-card/index.d.ts.map +1 -1
  375. package/build-types/collapsible-card/stories/index.story.d.ts +10 -0
  376. package/build-types/collapsible-card/stories/index.story.d.ts.map +1 -1
  377. package/build-types/collapsible-card/types.d.ts +21 -0
  378. package/build-types/collapsible-card/types.d.ts.map +1 -1
  379. package/build-types/dialog/action.d.ts.map +1 -1
  380. package/build-types/dialog/close-icon.d.ts.map +1 -1
  381. package/build-types/dialog/popup.d.ts.map +1 -1
  382. package/build-types/dialog/stories/index.story.d.ts +8 -6
  383. package/build-types/dialog/stories/index.story.d.ts.map +1 -1
  384. package/build-types/dialog/title.d.ts +12 -2
  385. package/build-types/dialog/title.d.ts.map +1 -1
  386. package/build-types/dialog/types.d.ts +13 -6
  387. package/build-types/dialog/types.d.ts.map +1 -1
  388. package/build-types/empty-state/actions.d.ts +7 -0
  389. package/build-types/empty-state/actions.d.ts.map +1 -0
  390. package/build-types/empty-state/description.d.ts +7 -0
  391. package/build-types/empty-state/description.d.ts.map +1 -0
  392. package/build-types/empty-state/icon.d.ts +7 -0
  393. package/build-types/empty-state/icon.d.ts.map +1 -0
  394. package/build-types/empty-state/index.d.ts +8 -0
  395. package/build-types/empty-state/index.d.ts.map +1 -0
  396. package/build-types/empty-state/root.d.ts +6 -0
  397. package/build-types/empty-state/root.d.ts.map +1 -0
  398. package/build-types/empty-state/stories/index.story.d.ts +8 -0
  399. package/build-types/empty-state/stories/index.story.d.ts.map +1 -0
  400. package/build-types/empty-state/test/actions.test.d.ts +2 -0
  401. package/build-types/empty-state/test/actions.test.d.ts.map +1 -0
  402. package/build-types/empty-state/test/description.test.d.ts +2 -0
  403. package/build-types/empty-state/test/description.test.d.ts.map +1 -0
  404. package/build-types/empty-state/test/icon.test.d.ts +2 -0
  405. package/build-types/empty-state/test/icon.test.d.ts.map +1 -0
  406. package/build-types/empty-state/test/root.test.d.ts +2 -0
  407. package/build-types/empty-state/test/root.test.d.ts.map +1 -0
  408. package/build-types/empty-state/test/title.test.d.ts +2 -0
  409. package/build-types/empty-state/test/title.test.d.ts.map +1 -0
  410. package/build-types/empty-state/test/visual.test.d.ts +2 -0
  411. package/build-types/empty-state/test/visual.test.d.ts.map +1 -0
  412. package/build-types/empty-state/title.d.ts +6 -0
  413. package/build-types/empty-state/title.d.ts.map +1 -0
  414. package/build-types/empty-state/types.d.ts +40 -0
  415. package/build-types/empty-state/types.d.ts.map +1 -0
  416. package/build-types/empty-state/visual.d.ts +7 -0
  417. package/build-types/empty-state/visual.d.ts.map +1 -0
  418. package/build-types/form/index.d.ts +3 -0
  419. package/build-types/form/index.d.ts.map +1 -0
  420. package/build-types/form/input-control/index.d.ts +2 -0
  421. package/build-types/form/input-control/index.d.ts.map +1 -0
  422. package/build-types/form/input-control/input-control.d.ts +6 -0
  423. package/build-types/form/input-control/input-control.d.ts.map +1 -0
  424. package/build-types/form/input-control/stories/index.story.d.ts +16 -0
  425. package/build-types/form/input-control/stories/index.story.d.ts.map +1 -0
  426. package/build-types/form/input-control/test/index.test.d.ts +2 -0
  427. package/build-types/form/input-control/test/index.test.d.ts.map +1 -0
  428. package/build-types/form/input-control/types.d.ts +4 -0
  429. package/build-types/form/input-control/types.d.ts.map +1 -0
  430. package/build-types/form/primitives/field/description.d.ts +2 -1
  431. package/build-types/form/primitives/field/description.d.ts.map +1 -1
  432. package/build-types/form/primitives/field/details.d.ts +2 -1
  433. package/build-types/form/primitives/field/details.d.ts.map +1 -1
  434. package/build-types/form/primitives/field/label.d.ts +2 -1
  435. package/build-types/form/primitives/field/label.d.ts.map +1 -1
  436. package/build-types/form/primitives/field/stories/index.story.d.ts.map +1 -1
  437. package/build-types/form/primitives/fieldset/description.d.ts +2 -1
  438. package/build-types/form/primitives/fieldset/description.d.ts.map +1 -1
  439. package/build-types/form/primitives/fieldset/details.d.ts +2 -1
  440. package/build-types/form/primitives/fieldset/details.d.ts.map +1 -1
  441. package/build-types/form/primitives/fieldset/legend.d.ts +2 -1
  442. package/build-types/form/primitives/fieldset/legend.d.ts.map +1 -1
  443. package/build-types/form/primitives/fieldset/root.d.ts +2 -1
  444. package/build-types/form/primitives/fieldset/root.d.ts.map +1 -1
  445. package/build-types/form/primitives/fieldset/stories/index.story.d.ts.map +1 -1
  446. package/build-types/form/primitives/input/input.d.ts.map +1 -1
  447. package/build-types/form/primitives/input/stories/index.story.d.ts +2 -0
  448. package/build-types/form/primitives/input/stories/index.story.d.ts.map +1 -1
  449. package/build-types/form/primitives/input-layout/input-layout.d.ts.map +1 -1
  450. package/build-types/form/primitives/input-layout/slot.d.ts.map +1 -1
  451. package/build-types/form/primitives/input-layout/stories/index.story.d.ts +5 -0
  452. package/build-types/form/primitives/input-layout/stories/index.story.d.ts.map +1 -1
  453. package/build-types/form/primitives/select/item.d.ts +6 -2
  454. package/build-types/form/primitives/select/item.d.ts.map +1 -1
  455. package/build-types/form/primitives/select/popup.d.ts +11 -1
  456. package/build-types/form/primitives/select/popup.d.ts.map +1 -1
  457. package/build-types/form/primitives/select/trigger.d.ts +12 -2
  458. package/build-types/form/primitives/select/trigger.d.ts.map +1 -1
  459. package/build-types/form/primitives/select/types.d.ts +13 -3
  460. package/build-types/form/primitives/select/types.d.ts.map +1 -1
  461. package/build-types/form/primitives/textarea/textarea.d.ts.map +1 -1
  462. package/build-types/form/stories/shared.d.ts +3 -0
  463. package/build-types/form/stories/shared.d.ts.map +1 -0
  464. package/build-types/form/types.d.ts +30 -0
  465. package/build-types/form/types.d.ts.map +1 -0
  466. package/build-types/index.d.ts +4 -1
  467. package/build-types/index.d.ts.map +1 -1
  468. package/build-types/link/link.d.ts.map +1 -1
  469. package/build-types/notice/index.d.ts +0 -1
  470. package/build-types/notice/index.d.ts.map +1 -1
  471. package/build-types/popover/arrow.d.ts +10 -0
  472. package/build-types/popover/arrow.d.ts.map +1 -0
  473. package/build-types/popover/close.d.ts +11 -0
  474. package/build-types/popover/close.d.ts.map +1 -0
  475. package/build-types/popover/context.d.ts +22 -0
  476. package/build-types/popover/context.d.ts.map +1 -0
  477. package/build-types/popover/description.d.ts +10 -0
  478. package/build-types/popover/description.d.ts.map +1 -0
  479. package/build-types/popover/index.d.ts +9 -0
  480. package/build-types/popover/index.d.ts.map +1 -0
  481. package/build-types/popover/popup.d.ts +11 -0
  482. package/build-types/popover/popup.d.ts.map +1 -0
  483. package/build-types/popover/root.d.ts +37 -0
  484. package/build-types/popover/root.d.ts.map +1 -0
  485. package/build-types/popover/stories/index.story.d.ts +211 -0
  486. package/build-types/popover/stories/index.story.d.ts.map +1 -0
  487. package/build-types/popover/stories/utils.d.ts +25 -0
  488. package/build-types/popover/stories/utils.d.ts.map +1 -0
  489. package/build-types/popover/test/index.test.d.ts +2 -0
  490. package/build-types/popover/test/index.test.d.ts.map +1 -0
  491. package/build-types/popover/title.d.ts +20 -0
  492. package/build-types/popover/title.d.ts.map +1 -0
  493. package/build-types/popover/trigger.d.ts +10 -0
  494. package/build-types/popover/trigger.d.ts.map +1 -0
  495. package/build-types/popover/types.d.ts +83 -0
  496. package/build-types/popover/types.d.ts.map +1 -0
  497. package/build-types/tabs/context.d.ts +26 -0
  498. package/build-types/tabs/context.d.ts.map +1 -0
  499. package/build-types/tabs/list.d.ts +2 -1
  500. package/build-types/tabs/list.d.ts.map +1 -1
  501. package/build-types/tabs/panel.d.ts +2 -1
  502. package/build-types/tabs/panel.d.ts.map +1 -1
  503. package/build-types/tabs/root.d.ts +2 -1
  504. package/build-types/tabs/root.d.ts.map +1 -1
  505. package/build-types/tabs/tab.d.ts +2 -1
  506. package/build-types/tabs/tab.d.ts.map +1 -1
  507. package/build-types/text/stories/index.story.d.ts +4 -0
  508. package/build-types/text/stories/index.story.d.ts.map +1 -1
  509. package/build-types/text/text.d.ts.map +1 -1
  510. package/build-types/tooltip/popup.d.ts.map +1 -1
  511. package/build-types/tooltip/root.d.ts +13 -0
  512. package/build-types/tooltip/root.d.ts.map +1 -1
  513. package/build-types/tooltip/stories/index.story.d.ts.map +1 -1
  514. package/build-types/tooltip/stories/usage-guidelines.story.d.ts +21 -0
  515. package/build-types/tooltip/stories/usage-guidelines.story.d.ts.map +1 -0
  516. package/build-types/tooltip/types.d.ts +4 -0
  517. package/build-types/tooltip/types.d.ts.map +1 -1
  518. package/build-types/utils/test/use-deprioritized-initial-focus.test.d.ts +2 -0
  519. package/build-types/utils/test/use-deprioritized-initial-focus.test.d.ts.map +1 -0
  520. package/build-types/utils/types.d.ts +6 -2
  521. package/build-types/utils/types.d.ts.map +1 -1
  522. package/build-types/utils/use-deprioritized-initial-focus.d.ts +36 -0
  523. package/build-types/utils/use-deprioritized-initial-focus.d.ts.map +1 -0
  524. package/build-types/visually-hidden/stories/index.story.d.ts +7 -0
  525. package/build-types/visually-hidden/stories/index.story.d.ts.map +1 -1
  526. package/build-types/visually-hidden/visually-hidden.d.ts +34 -0
  527. package/build-types/visually-hidden/visually-hidden.d.ts.map +1 -1
  528. package/package.json +17 -16
  529. package/src/alert-dialog/context.tsx +22 -0
  530. package/src/alert-dialog/index.ts +3 -0
  531. package/src/alert-dialog/popup.tsx +116 -0
  532. package/src/alert-dialog/root.tsx +226 -0
  533. package/src/alert-dialog/stories/index.story.tsx +305 -0
  534. package/src/alert-dialog/style.module.css +21 -0
  535. package/src/alert-dialog/test/index.test.tsx +1509 -0
  536. package/src/alert-dialog/trigger.tsx +15 -0
  537. package/src/alert-dialog/types.ts +119 -0
  538. package/src/badge/badge.tsx +11 -14
  539. package/src/badge/style.module.css +0 -4
  540. package/src/button/button.tsx +2 -0
  541. package/src/button/style.module.css +9 -3
  542. package/src/card/stories/index.story.tsx +4 -5
  543. package/src/card/style.module.css +4 -10
  544. package/src/card/test/index.test.tsx +17 -1
  545. package/src/card/title.tsx +14 -12
  546. package/src/collapsible-card/content.tsx +16 -3
  547. package/src/collapsible-card/context.ts +7 -0
  548. package/src/collapsible-card/header-description.tsx +43 -0
  549. package/src/collapsible-card/header.tsx +47 -24
  550. package/src/collapsible-card/index.ts +2 -1
  551. package/src/collapsible-card/stories/index.story.tsx +102 -4
  552. package/src/collapsible-card/style.module.css +34 -2
  553. package/src/collapsible-card/test/index.test.tsx +96 -9
  554. package/src/collapsible-card/types.ts +22 -0
  555. package/src/dialog/action.tsx +8 -2
  556. package/src/dialog/close-icon.tsx +1 -0
  557. package/src/dialog/popup.tsx +23 -3
  558. package/src/dialog/stories/index.story.tsx +33 -28
  559. package/src/dialog/style.module.css +18 -14
  560. package/src/dialog/test/index.test.tsx +180 -4
  561. package/src/dialog/title.tsx +21 -9
  562. package/src/dialog/types.ts +20 -6
  563. package/src/empty-state/actions.tsx +24 -0
  564. package/src/empty-state/description.tsx +31 -0
  565. package/src/empty-state/icon.tsx +24 -0
  566. package/src/empty-state/index.ts +8 -0
  567. package/src/empty-state/root.tsx +23 -0
  568. package/src/empty-state/stories/index.story.tsx +64 -0
  569. package/src/empty-state/style.module.css +53 -0
  570. package/src/empty-state/test/actions.test.tsx +18 -0
  571. package/src/empty-state/test/description.test.tsx +26 -0
  572. package/src/empty-state/test/icon.test.tsx +13 -0
  573. package/src/empty-state/test/root.test.tsx +13 -0
  574. package/src/empty-state/test/title.test.tsx +26 -0
  575. package/src/empty-state/test/visual.test.tsx +17 -0
  576. package/src/empty-state/title.tsx +29 -0
  577. package/src/empty-state/types.ts +45 -0
  578. package/src/empty-state/visual.tsx +24 -0
  579. package/src/form/index.ts +3 -0
  580. package/src/form/input-control/index.ts +1 -0
  581. package/src/form/input-control/input-control.tsx +33 -0
  582. package/src/form/input-control/stories/index.story.tsx +163 -0
  583. package/src/form/input-control/test/index.test.tsx +53 -0
  584. package/src/form/input-control/types.ts +5 -0
  585. package/src/form/primitives/field/description.tsx +6 -1
  586. package/src/form/primitives/field/details.tsx +4 -2
  587. package/src/form/primitives/field/label.tsx +9 -5
  588. package/src/form/primitives/field/stories/index.story.tsx +2 -7
  589. package/src/form/primitives/field/test/index.test.tsx +11 -0
  590. package/src/form/primitives/fieldset/description.tsx +9 -1
  591. package/src/form/primitives/fieldset/legend.tsx +9 -4
  592. package/src/form/primitives/fieldset/stories/index.story.tsx +2 -7
  593. package/src/form/primitives/fieldset/test/index.test.tsx +22 -0
  594. package/src/form/primitives/input/input.tsx +6 -1
  595. package/src/form/primitives/input/stories/index.story.tsx +7 -0
  596. package/src/form/primitives/input/style.module.css +4 -0
  597. package/src/form/primitives/input-layout/input-layout.tsx +2 -0
  598. package/src/form/primitives/input-layout/slot.tsx +6 -2
  599. package/src/form/primitives/input-layout/stories/index.story.tsx +22 -1
  600. package/src/form/primitives/input-layout/style.module.css +3 -3
  601. package/src/form/primitives/select/popup.tsx +5 -2
  602. package/src/form/primitives/select/test/index.test.tsx +60 -1
  603. package/src/form/primitives/select/types.ts +14 -4
  604. package/src/form/primitives/stories/overview.mdx +15 -0
  605. package/src/form/primitives/textarea/textarea.tsx +11 -2
  606. package/src/form/stories/shared.tsx +21 -0
  607. package/src/form/types.ts +34 -0
  608. package/src/index.ts +4 -1
  609. package/src/link/link.tsx +2 -0
  610. package/src/link/style.module.css +11 -1
  611. package/src/notice/index.ts +0 -2
  612. package/src/notice/style.module.css +6 -6
  613. package/src/popover/arrow.tsx +49 -0
  614. package/src/popover/close.tsx +24 -0
  615. package/src/popover/context.tsx +100 -0
  616. package/src/popover/description.tsx +29 -0
  617. package/src/popover/index.ts +9 -0
  618. package/src/popover/popup.tsx +106 -0
  619. package/src/popover/root.tsx +41 -0
  620. package/src/popover/stories/index.story.tsx +1315 -0
  621. package/src/popover/stories/utils.tsx +91 -0
  622. package/src/popover/style.module.css +64 -0
  623. package/src/popover/test/index.test.tsx +727 -0
  624. package/src/popover/title.tsx +47 -0
  625. package/src/popover/trigger.tsx +17 -0
  626. package/src/popover/types.ts +113 -0
  627. package/src/tabs/context.tsx +170 -0
  628. package/src/tabs/list.tsx +0 -1
  629. package/src/tabs/panel.tsx +3 -0
  630. package/src/tabs/root.tsx +6 -1
  631. package/src/tabs/style.module.css +3 -3
  632. package/src/tabs/tab.tsx +3 -0
  633. package/src/tabs/test/index.test.tsx +162 -0
  634. package/src/text/stories/index.story.tsx +4 -2
  635. package/src/text/style.module.css +62 -36
  636. package/src/text/test/index.test.tsx +1 -4
  637. package/src/text/text.tsx +8 -1
  638. package/src/tooltip/popup.tsx +2 -1
  639. package/src/tooltip/root.tsx +13 -0
  640. package/src/tooltip/stories/index.story.tsx +20 -15
  641. package/src/tooltip/stories/usage-guidelines.mdx +91 -0
  642. package/src/tooltip/stories/usage-guidelines.story.tsx +119 -0
  643. package/src/tooltip/style.module.css +2 -2
  644. package/src/tooltip/test/index.test.tsx +61 -0
  645. package/src/tooltip/types.ts +5 -0
  646. package/src/utils/css/field.module.css +12 -9
  647. package/src/utils/css/focus.module.css +7 -5
  648. package/src/utils/css/global-css-defense.module.css +117 -0
  649. package/src/utils/css/item-popup.module.css +3 -2
  650. package/src/utils/css/select-trigger.module.css +1 -0
  651. package/src/utils/test/use-deprioritized-initial-focus.test.tsx +230 -0
  652. package/src/utils/types.ts +7 -2
  653. package/src/utils/use-deprioritized-initial-focus.ts +84 -0
  654. package/src/visually-hidden/stories/index.story.tsx +25 -0
  655. package/src/visually-hidden/visually-hidden.tsx +34 -0
@@ -1,67 +1,93 @@
1
1
  @layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;
2
2
 
3
3
  @layer wp-ui-components {
4
+ .text {
5
+ margin: 0;
6
+ }
7
+
4
8
  .heading-2xl {
5
- font-family: var(--wpds-font-family-heading);
6
- font-size: var(--wpds-font-size-2xl);
7
- line-height: var(--wpds-font-line-height-2xl);
8
- font-weight: var(--wpds-font-weight-medium);
9
+ --_gcd-heading-font-size: var(--wpds-typography-font-size-2xl);
10
+
11
+ font-family: var(--wpds-typography-font-family-heading);
12
+ font-size: var(--wpds-typography-font-size-2xl);
13
+ line-height: var(--wpds-typography-line-height-2xl);
14
+ font-weight: var(--wpds-typography-font-weight-medium);
9
15
  }
10
16
 
11
17
  .heading-xl {
12
- font-family: var(--wpds-font-family-heading);
13
- font-size: var(--wpds-font-size-xl);
14
- line-height: var(--wpds-font-line-height-md);
15
- font-weight: var(--wpds-font-weight-medium);
18
+ --_gcd-heading-font-size: var(--wpds-typography-font-size-xl);
19
+
20
+ font-family: var(--wpds-typography-font-family-heading);
21
+ font-size: var(--wpds-typography-font-size-xl);
22
+ line-height: var(--wpds-typography-line-height-md);
23
+ font-weight: var(--wpds-typography-font-weight-medium);
16
24
  }
17
25
 
18
26
  .heading-lg {
19
- font-family: var(--wpds-font-family-heading);
20
- font-size: var(--wpds-font-size-lg);
21
- line-height: var(--wpds-font-line-height-sm);
22
- font-weight: var(--wpds-font-weight-medium);
27
+ --_gcd-heading-font-size: var(--wpds-typography-font-size-lg);
28
+
29
+ font-family: var(--wpds-typography-font-family-heading);
30
+ font-size: var(--wpds-typography-font-size-lg);
31
+ line-height: var(--wpds-typography-line-height-sm);
32
+ font-weight: var(--wpds-typography-font-weight-medium);
23
33
  }
24
34
 
25
35
  .heading-md {
26
- font-family: var(--wpds-font-family-heading);
27
- font-size: var(--wpds-font-size-md);
28
- line-height: var(--wpds-font-line-height-sm);
29
- font-weight: var(--wpds-font-weight-medium);
36
+ --_gcd-heading-font-size: var(--wpds-typography-font-size-md);
37
+
38
+ font-family: var(--wpds-typography-font-family-heading);
39
+ font-size: var(--wpds-typography-font-size-md);
40
+ line-height: var(--wpds-typography-line-height-sm);
41
+ font-weight: var(--wpds-typography-font-weight-medium);
30
42
  }
31
43
 
32
44
  .heading-sm {
33
- font-family: var(--wpds-font-family-heading);
34
- font-size: var(--wpds-font-size-xs);
35
- line-height: var(--wpds-font-line-height-xs);
36
- font-weight: var(--wpds-font-weight-medium);
45
+ --_gcd-heading-font-size: var(--wpds-typography-font-size-xs);
46
+
47
+ font-family: var(--wpds-typography-font-family-heading);
48
+ font-size: var(--wpds-typography-font-size-xs);
49
+ line-height: var(--wpds-typography-line-height-xs);
50
+ font-weight: var(--wpds-typography-font-weight-medium);
37
51
  text-transform: uppercase;
38
52
  }
39
53
 
40
54
  .body-xl {
41
- font-family: var(--wpds-font-family-body);
42
- font-size: var(--wpds-font-size-xl);
43
- line-height: var(--wpds-font-line-height-xl);
44
- font-weight: var(--wpds-font-weight-regular);
55
+ --_gcd-p-font-size: var(--wpds-typography-font-size-xl);
56
+ --_gcd-p-line-height: var(--wpds-typography-line-height-xl);
57
+
58
+ font-family: var(--wpds-typography-font-family-body);
59
+ font-size: var(--wpds-typography-font-size-xl);
60
+ line-height: var(--wpds-typography-line-height-xl);
61
+ font-weight: var(--wpds-typography-font-weight-regular);
45
62
  }
46
63
 
47
64
  .body-lg {
48
- font-family: var(--wpds-font-family-body);
49
- font-size: var(--wpds-font-size-lg);
50
- line-height: var(--wpds-font-line-height-md);
51
- font-weight: var(--wpds-font-weight-regular);
65
+ --_gcd-p-font-size: var(--wpds-typography-font-size-lg);
66
+ --_gcd-p-line-height: var(--wpds-typography-line-height-md);
67
+
68
+ font-family: var(--wpds-typography-font-family-body);
69
+ font-size: var(--wpds-typography-font-size-lg);
70
+ line-height: var(--wpds-typography-line-height-md);
71
+ font-weight: var(--wpds-typography-font-weight-regular);
52
72
  }
53
73
 
54
74
  .body-md {
55
- font-family: var(--wpds-font-family-body);
56
- font-size: var(--wpds-font-size-md);
57
- line-height: var(--wpds-font-line-height-sm);
58
- font-weight: var(--wpds-font-weight-regular);
75
+ --_gcd-p-font-size: var(--wpds-typography-font-size-md);
76
+ --_gcd-p-line-height: var(--wpds-typography-line-height-sm);
77
+
78
+ font-family: var(--wpds-typography-font-family-body);
79
+ font-size: var(--wpds-typography-font-size-md);
80
+ line-height: var(--wpds-typography-line-height-sm);
81
+ font-weight: var(--wpds-typography-font-weight-regular);
59
82
  }
60
83
 
61
84
  .body-sm {
62
- font-family: var(--wpds-font-family-body);
63
- font-size: var(--wpds-font-size-sm);
64
- line-height: var(--wpds-font-line-height-xs);
65
- font-weight: var(--wpds-font-weight-regular);
85
+ --_gcd-p-font-size: var(--wpds-typography-font-size-sm);
86
+ --_gcd-p-line-height: var(--wpds-typography-line-height-xs);
87
+
88
+ font-family: var(--wpds-typography-font-family-body);
89
+ font-size: var(--wpds-typography-font-size-sm);
90
+ line-height: var(--wpds-typography-line-height-xs);
91
+ font-weight: var(--wpds-typography-font-weight-regular);
66
92
  }
67
93
  }
@@ -34,10 +34,7 @@ describe( 'Text', () => {
34
34
  } );
35
35
 
36
36
  it( 'supports the render prop', () => {
37
- render(
38
- // eslint-disable-next-line jsx-a11y/heading-has-content
39
- <Text render={ <h2 /> }>Section title</Text>
40
- );
37
+ render( <Text render={ <h2 /> }>Section title</Text> );
41
38
 
42
39
  expect(
43
40
  screen.getByRole( 'heading', { level: 2, name: 'Section title' } )
package/src/text/text.tsx CHANGED
@@ -3,6 +3,7 @@ import clsx from 'clsx';
3
3
  import { forwardRef } from '@wordpress/element';
4
4
  import { type TextProps } from './types';
5
5
  import styles from './style.module.css';
6
+ import defenseStyles from '../utils/css/global-css-defense.module.css';
6
7
 
7
8
  /**
8
9
  * A text component for rendering content with predefined typographic variants.
@@ -17,7 +18,13 @@ export const Text = forwardRef< HTMLSpanElement, TextProps >( function Text(
17
18
  defaultTagName: 'span',
18
19
  ref,
19
20
  props: mergeProps< 'span' >( props, {
20
- className: clsx( styles[ variant ], className ),
21
+ className: clsx(
22
+ styles.text,
23
+ variant.startsWith( 'heading-' ) && defenseStyles.heading,
24
+ variant.startsWith( 'body-' ) && defenseStyles.p,
25
+ styles[ variant ],
26
+ className
27
+ ),
21
28
  } ),
22
29
  } );
23
30
 
@@ -16,6 +16,7 @@ const ThemeProvider: typeof ThemeProviderType =
16
16
  const Popup = forwardRef< HTMLDivElement, PopupProps >( function TooltipPopup(
17
17
  {
18
18
  align = 'center',
19
+ container,
19
20
  side = 'top',
20
21
  sideOffset = 4,
21
22
  children,
@@ -26,7 +27,7 @@ const Popup = forwardRef< HTMLDivElement, PopupProps >( function TooltipPopup(
26
27
  ref
27
28
  ) {
28
29
  return (
29
- <Tooltip.Portal>
30
+ <Tooltip.Portal container={ container }>
30
31
  <Tooltip.Positioner
31
32
  align={ align }
32
33
  side={ side }
@@ -1,6 +1,19 @@
1
1
  import { Tooltip } from '@base-ui/react/tooltip';
2
2
  import type { RootProps } from './types';
3
3
 
4
+ /**
5
+ * `Tooltip` is used to visually show the label of an icon button, or other such
6
+ * interactive controls that don't have a visual text label.
7
+ *
8
+ * Tooltip popups are visual-only and not exposed to assistive technologies.
9
+ * The trigger's accessible name (e.g. `aria-label`) is the source of truth
10
+ * for screen reader users. Tooltips are not available on touch devices,
11
+ * and thus should not be used for infotips, descriptions, or dynamic status
12
+ * messages.
13
+ *
14
+ * @see {@link https://wordpress.github.io/gutenberg/?path=/docs/design-system-components-tooltip-usage-guidelines--docs Usage Guidelines}
15
+ * @see {@link https://wordpress.github.io/gutenberg/?path=/docs/design-system-components-iconbutton--docs IconButton}
16
+ */
4
17
  function Root( props: RootProps ) {
5
18
  return <Tooltip.Root { ...props } />;
6
19
  }
@@ -1,5 +1,6 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { Tooltip } from '../..';
2
+ import { formatBold, formatItalic } from '@wordpress/icons';
3
+ import { Icon, Tooltip } from '../..';
3
4
 
4
5
  const meta: Meta< typeof Tooltip.Root > = {
5
6
  title: 'Design System/Components/Tooltip',
@@ -16,8 +17,8 @@ export const Default: StoryObj< typeof Tooltip.Root > = {
16
17
  args: {
17
18
  children: (
18
19
  <>
19
- <Tooltip.Trigger>Hover me</Tooltip.Trigger>
20
- <Tooltip.Popup>Tooltip text</Tooltip.Popup>
20
+ <Tooltip.Trigger aria-label="Save">💾</Tooltip.Trigger>
21
+ <Tooltip.Popup>Save</Tooltip.Popup>
21
22
  </>
22
23
  ),
23
24
  },
@@ -51,23 +52,23 @@ export const Positioning: StoryObj< typeof Tooltip.Root > = {
51
52
  } }
52
53
  >
53
54
  <Tooltip.Root>
54
- <Tooltip.Trigger>Top</Tooltip.Trigger>
55
- <Tooltip.Popup side="top">Tooltip on top</Tooltip.Popup>
55
+ <Tooltip.Trigger aria-label="Up">⬆️</Tooltip.Trigger>
56
+ <Tooltip.Popup side="top">Up</Tooltip.Popup>
56
57
  </Tooltip.Root>
57
58
 
58
59
  <Tooltip.Root>
59
- <Tooltip.Trigger>Right</Tooltip.Trigger>
60
- <Tooltip.Popup side="right">Tooltip on right</Tooltip.Popup>
60
+ <Tooltip.Trigger aria-label="Forward">➡️</Tooltip.Trigger>
61
+ <Tooltip.Popup side="right">Forward</Tooltip.Popup>
61
62
  </Tooltip.Root>
62
63
 
63
64
  <Tooltip.Root>
64
- <Tooltip.Trigger>Bottom</Tooltip.Trigger>
65
- <Tooltip.Popup side="bottom">Tooltip on bottom</Tooltip.Popup>
65
+ <Tooltip.Trigger aria-label="Down">⬇️</Tooltip.Trigger>
66
+ <Tooltip.Popup side="bottom">Down</Tooltip.Popup>
66
67
  </Tooltip.Root>
67
68
 
68
69
  <Tooltip.Root>
69
- <Tooltip.Trigger>Left</Tooltip.Trigger>
70
- <Tooltip.Popup side="left">Tooltip on left</Tooltip.Popup>
70
+ <Tooltip.Trigger aria-label="Back">⬅️</Tooltip.Trigger>
71
+ <Tooltip.Popup side="left">Back</Tooltip.Popup>
71
72
  </Tooltip.Root>
72
73
  </div>
73
74
  ),
@@ -83,13 +84,17 @@ export const WithProvider: StoryObj< typeof Tooltip.Root > = {
83
84
  <Tooltip.Provider delay={ 0 }>
84
85
  <div style={ { display: 'flex', gap: '1rem' } }>
85
86
  <Tooltip.Root>
86
- <Tooltip.Trigger>First</Tooltip.Trigger>
87
- <Tooltip.Popup>First tooltip</Tooltip.Popup>
87
+ <Tooltip.Trigger aria-label="Bold">
88
+ <Icon icon={ formatBold } />
89
+ </Tooltip.Trigger>
90
+ <Tooltip.Popup>Bold</Tooltip.Popup>
88
91
  </Tooltip.Root>
89
92
 
90
93
  <Tooltip.Root>
91
- <Tooltip.Trigger>Second</Tooltip.Trigger>
92
- <Tooltip.Popup>Second tooltip</Tooltip.Popup>
94
+ <Tooltip.Trigger aria-label="Italic">
95
+ <Icon icon={ formatItalic } />
96
+ </Tooltip.Trigger>
97
+ <Tooltip.Popup>Italic</Tooltip.Popup>
93
98
  </Tooltip.Root>
94
99
  </div>
95
100
  </Tooltip.Provider>
@@ -0,0 +1,91 @@
1
+ import { Canvas, Meta } from '@storybook/addon-docs/blocks';
2
+ import * as UsageGuidelinesStories from './usage-guidelines.story';
3
+
4
+ <Meta of={ UsageGuidelinesStories } />
5
+
6
+ # Tooltip usage guidelines
7
+
8
+ ## Usage guidelines
9
+
10
+ - **Use tooltips as visual labels only.** Tooltips should act as
11
+ supplementary visual labels for sighted mouse and keyboard users.
12
+ Tooltip popups are not exposed to assistive technologies — the
13
+ trigger's accessible name (e.g. `aria-label`) is what provides the
14
+ label for screen reader users.
15
+ See [_Alternatives to tooltips_](#alternatives-to-tooltips) below for
16
+ more details.
17
+ - **Provide an accessible name for the trigger.** Tooltips are visual-only
18
+ elements and are not a replacement for labeling the trigger. The
19
+ tooltip's trigger must have an `aria-label` that matches or is a concise
20
+ equivalent of the tooltip's content to ensure consistency for screen
21
+ reader users. If the tooltip also displays a keyboard shortcut, use
22
+ `aria-keyshortcuts` on the trigger.
23
+
24
+ <Canvas of={ UsageGuidelinesStories.RecommendedUsage } />
25
+
26
+ `IconButton` has built-in tooltip support via the `label` prop, making it
27
+ the easiest way to provide a tooltip for icon-only actions.
28
+
29
+ <Canvas of={ UsageGuidelinesStories.IconButtonWithTooltip } />
30
+
31
+ ## Alternatives to tooltips
32
+
33
+ Tooltips should be supplementary popups that provide non-essential clarity in
34
+ high-density UIs. A user should not miss critical information if they never
35
+ see a tooltip.
36
+
37
+ Tooltips don't work well with touch input. Unlike mouse pointers with hover
38
+ capability, there's no easily discoverable way to reveal a tooltip before
39
+ tapping its trigger on a touch device.
40
+
41
+ iOS doesn't provide a system-standard, touch-friendly tooltip affordance,
42
+ while Android may show a tooltip on long press. However, on the web,
43
+ long press is often used to trigger contextual menus in the browser, which
44
+ can lead to potential conflicts. For this reason, tooltips are disabled on
45
+ touch devices.
46
+
47
+ ### Infotips
48
+
49
+ Popups that open when hovering an info icon should use
50
+ [Popover](?path=/docs/design-system-components-popover--docs) with the
51
+ `openOnHover` prop on the trigger instead of a tooltip. This way, touch
52
+ users and screen reader users can access the content.
53
+
54
+ To know when to reach for a popover instead of a tooltip, consider the
55
+ **purpose** of the trigger element: if the trigger's purpose is to open the
56
+ popup itself, it's a popover. If the trigger's purpose is unrelated to
57
+ opening the popup, it's a tooltip.
58
+
59
+ <Canvas of={ UsageGuidelinesStories.InfotipWithPopover } />
60
+
61
+ See also the [Popover Infotip story](?path=/story/design-system-components-popover--infotip).
62
+
63
+ Infotips opened on hover can be dismissed by pressing `Escape`.
64
+
65
+ ### Description text
66
+
67
+ Tooltips are designed for sighted mouse and keyboard users and are not a reliable way to deliver
68
+ important information to touch users or assistive technologies. If the
69
+ description is important to understanding the element, don't hide it behind a
70
+ tooltip — use inline text or
71
+ [Popover](?path=/docs/design-system-components-popover--docs) if space is
72
+ limited, so the information is accessible to everyone.
73
+
74
+ Since tooltips serve sighted mouse and keyboard users, iconography should
75
+ clearly communicate the purpose of icon-only triggers, especially on mobile
76
+ where the text label may not be visible.
77
+
78
+ If the description is not critical, a tooltip can still be used to provide
79
+ extra clarity for sighted mouse or keyboard users.
80
+
81
+ ### Contextual feedback messages
82
+
83
+ For contextual feedback after an action (e.g. "Copied!"), prefer a pattern
84
+ that ensures the message is announced to screen readers and supports complex
85
+ content, such as a
86
+ [Notice](?path=/docs/design-system-components-notice--docs).
87
+
88
+ ## References
89
+
90
+ - [WCAG 1.4.13: Content on Hover or Focus](https://www.w3.org/WAI/WCAG21/Understanding/content-on-hover-or-focus.html) — tooltips must be dismissible (Escape), hoverable, and persistent.
91
+ - [WAI-ARIA APG: Tooltip pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/) — note that this component intentionally diverges from the traditional `role="tooltip"` + `aria-describedby` pattern. The trigger's `aria-label` is the source of truth for assistive technologies, and the tooltip popup is a visual-only supplement.
@@ -0,0 +1,119 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import {
3
+ formatBold,
4
+ formatItalic,
5
+ formatUnderline,
6
+ info,
7
+ } from '@wordpress/icons';
8
+ import { Icon, IconButton, Popover, Tooltip, VisuallyHidden } from '../..';
9
+
10
+ const meta: Meta = {
11
+ title: 'Design System/Components/Tooltip/Usage Guidelines',
12
+ parameters: {
13
+ controls: { disable: true },
14
+ },
15
+ tags: [ '!dev' ],
16
+ };
17
+ export default meta;
18
+
19
+ type Story = StoryObj;
20
+
21
+ /**
22
+ * Tooltips work best as visual labels for icon-only controls. Each trigger
23
+ * must have its own accessible name via `aria-label`.
24
+ */
25
+ export const RecommendedUsage: Story = {
26
+ render: () => (
27
+ <Tooltip.Provider delay={ 0 }>
28
+ <div style={ { display: 'flex', gap: '0.25rem' } }>
29
+ <Tooltip.Root>
30
+ <Tooltip.Trigger aria-label="Bold">
31
+ <Icon icon={ formatBold } />
32
+ </Tooltip.Trigger>
33
+ <Tooltip.Popup>Bold</Tooltip.Popup>
34
+ </Tooltip.Root>
35
+
36
+ <Tooltip.Root>
37
+ <Tooltip.Trigger aria-label="Italic">
38
+ <Icon icon={ formatItalic } />
39
+ </Tooltip.Trigger>
40
+ <Tooltip.Popup>Italic</Tooltip.Popup>
41
+ </Tooltip.Root>
42
+
43
+ <Tooltip.Root>
44
+ <Tooltip.Trigger aria-label="Underline">
45
+ <Icon icon={ formatUnderline } />
46
+ </Tooltip.Trigger>
47
+ <Tooltip.Popup>Underline</Tooltip.Popup>
48
+ </Tooltip.Root>
49
+ </div>
50
+ </Tooltip.Provider>
51
+ ),
52
+ };
53
+
54
+ /**
55
+ * Popups that open when hovering an info icon should use `Popover` with
56
+ * `openOnHover` instead of a Tooltip. This ensures the content is accessible
57
+ * to touch and screen reader users.
58
+ */
59
+ export const InfotipWithPopover: Story = {
60
+ render: () => (
61
+ <div
62
+ style={ {
63
+ display: 'flex',
64
+ alignItems: 'center',
65
+ gap: 'var(--wpds-dimension-gap-xs)',
66
+ } }
67
+ >
68
+ <span>Label</span>
69
+ <Popover.Root>
70
+ <Popover.Trigger
71
+ openOnHover
72
+ delay={ 200 }
73
+ closeDelay={ 200 }
74
+ aria-label="More information"
75
+ style={ {
76
+ background: 'none',
77
+ border: 'none',
78
+ padding: 0,
79
+ cursor: 'var(--wpds-cursor-control)',
80
+ display: 'inline-flex',
81
+ alignItems: 'center',
82
+ borderRadius: 'var(--wpds-border-radius-sm)',
83
+ } }
84
+ >
85
+ <Icon icon={ info } size={ 20 } />
86
+ </Popover.Trigger>
87
+ <Popover.Popup>
88
+ <Popover.Arrow />
89
+ <VisuallyHidden render={ <Popover.Title /> }>
90
+ More information
91
+ </VisuallyHidden>
92
+ <Popover.Description>
93
+ This is additional context about the label. Unlike
94
+ tooltips, this content is accessible to touch and screen
95
+ reader users.
96
+ </Popover.Description>
97
+ </Popover.Popup>
98
+ </Popover.Root>
99
+ </div>
100
+ ),
101
+ };
102
+
103
+ /**
104
+ * `IconButton` has built-in tooltip support via the `label` prop,
105
+ * making it the easiest way to provide a tooltip for icon-only actions.
106
+ */
107
+ export const IconButtonWithTooltip: Story = {
108
+ render: () => (
109
+ <div style={ { display: 'flex', gap: '0.25rem' } }>
110
+ <IconButton icon={ formatBold } label="Bold" size="compact" />
111
+ <IconButton icon={ formatItalic } label="Italic" size="compact" />
112
+ <IconButton
113
+ icon={ formatUnderline }
114
+ label="Underline"
115
+ size="compact"
116
+ />
117
+ </div>
118
+ ),
119
+ };
@@ -11,8 +11,8 @@
11
11
  var(--wpds-dimension-padding-xs)
12
12
  var(--wpds-dimension-padding-sm);
13
13
  border-radius: var(--wpds-border-radius-sm);
14
- font-family: var(--wpds-font-family-body);
15
- font-size: var(--wpds-font-size-sm);
14
+ font-family: var(--wpds-typography-font-family-body);
15
+ font-size: var(--wpds-typography-font-size-sm);
16
16
  line-height: 1.4; /* TODO: use DS token for line height */
17
17
  color: var(--wpds-color-fg-content-neutral);
18
18
  box-shadow: var(--wpds-elevation-sm);
@@ -84,4 +84,65 @@ describe( 'Tooltip', () => {
84
84
  screen.queryByText( 'Tooltip content' )
85
85
  ).not.toBeInTheDocument();
86
86
  } );
87
+
88
+ describe( 'container', () => {
89
+ it( 'should render inside the container when provided', async () => {
90
+ const user = userEvent.setup();
91
+ const containerRef = createRef< HTMLDivElement >();
92
+
93
+ render(
94
+ <TestProvider>
95
+ <div data-testid="wrapper">
96
+ <Tooltip.Root>
97
+ <Tooltip.Trigger>Hover me</Tooltip.Trigger>
98
+ <div
99
+ ref={ containerRef }
100
+ data-testid="custom-container"
101
+ />
102
+ <Tooltip.Popup container={ containerRef }>
103
+ Tooltip content
104
+ </Tooltip.Popup>
105
+ </Tooltip.Root>
106
+ </div>
107
+ </TestProvider>
108
+ );
109
+
110
+ await user.hover(
111
+ screen.getByRole( 'button', { name: 'Hover me' } )
112
+ );
113
+
114
+ const content = await screen.findByText( 'Tooltip content' );
115
+ expect( content ).toBeVisible();
116
+
117
+ expect( screen.getByTestId( 'custom-container' ) ).toContainElement(
118
+ content
119
+ );
120
+ } );
121
+
122
+ it( 'should render with a portal by default', async () => {
123
+ const user = userEvent.setup();
124
+
125
+ render(
126
+ <TestProvider>
127
+ <div data-testid="wrapper">
128
+ <Tooltip.Root>
129
+ <Tooltip.Trigger>Hover me</Tooltip.Trigger>
130
+ <Tooltip.Popup>Tooltip content</Tooltip.Popup>
131
+ </Tooltip.Root>
132
+ </div>
133
+ </TestProvider>
134
+ );
135
+
136
+ await user.hover(
137
+ screen.getByRole( 'button', { name: 'Hover me' } )
138
+ );
139
+
140
+ const content = await screen.findByText( 'Tooltip content' );
141
+ expect( content ).toBeVisible();
142
+
143
+ expect( screen.getByTestId( 'wrapper' ) ).not.toContainElement(
144
+ content
145
+ );
146
+ } );
147
+ } );
87
148
  } );
@@ -23,4 +23,9 @@ export interface PopupProps
23
23
  * The content to be rendered inside the component.
24
24
  */
25
25
  children?: ReactNode;
26
+
27
+ /**
28
+ * A parent element to render the portal into.
29
+ */
30
+ container?: Tooltip.Portal.Props[ 'container' ];
26
31
  }
@@ -2,26 +2,29 @@
2
2
 
3
3
  @layer wp-ui-utilities {
4
4
  .label {
5
- --wp-ui-field-label-line-height: var(--wpds-font-line-height-xs);
5
+ --wp-ui-field-label-line-height: var(--wpds-typography-line-height-xs);
6
6
 
7
- font-family: var(--wpds-font-family-body);
8
- font-size: var(--wpds-font-size-xs);
7
+ font-family: var(--wpds-typography-font-family-body);
8
+ font-size: var(--wpds-typography-font-size-xs);
9
9
  line-height: var(--wp-ui-field-label-line-height);
10
- font-weight: var(--wpds-font-weight-medium);
10
+ font-weight: var(--wpds-typography-font-weight-medium);
11
11
  text-transform: uppercase;
12
12
  color: var(--wpds-color-fg-content-neutral);
13
13
 
14
14
  &.is-plain {
15
- font-size: var(--wpds-font-size-md);
15
+ font-size: var(--wpds-typography-font-size-md);
16
16
  text-transform: none;
17
17
  }
18
18
  }
19
19
 
20
20
  .description {
21
- margin: 0;
22
- font-family: var(--wpds-font-family-body);
23
- font-size: var(--wpds-font-size-sm);
24
- line-height: var(--wpds-font-line-height-xs);
21
+ --_gcd-p-font-size: var(--wpds-typography-font-size-sm);
22
+ --_gcd-p-line-height: var(--wpds-typography-line-height-xs);
23
+ --_gcd-p-margin: 0;
24
+
25
+ font-family: var(--wpds-typography-font-family-body);
26
+ font-size: var(--wpds-typography-font-size-sm);
27
+ line-height: var(--wpds-typography-line-height-xs);
25
28
  color: var(--wpds-color-fg-content-neutral-weak);
26
29
  }
27
30
  }
@@ -9,14 +9,14 @@
9
9
  .outset-ring--focus-within-visible,
10
10
  .outset-ring--focus-parent-visible {
11
11
  @media not ( prefers-reduced-motion ) {
12
+ --_gcd-a-transition: outline 0.1s ease-out;
13
+
12
14
  transition: outline 0.1s ease-out;
13
15
  }
14
16
 
15
17
  /* Outline width must be kept at 0 even with a transparent color,
16
18
  or else the outline will be visible in forced-colors mode. */
17
- outline-width: 0;
18
- outline-style: solid;
19
- outline-color: transparent;
19
+ outline: 0 solid transparent;
20
20
  outline-offset: 1px;
21
21
  }
22
22
 
@@ -27,7 +27,9 @@
27
27
  .outset-ring--focus-within-except-active:focus-within:not(:has(:active)),
28
28
  .outset-ring--focus-within-visible:focus-within:has(:focus-visible),
29
29
  :focus-visible .outset-ring--focus-parent-visible {
30
- outline-width: var(--wpds-border-width-focus);
31
- outline-color: var(--wpds-color-stroke-focus-brand);
30
+ --_gcd-a-outline: var(--wpds-border-width-focus) solid var(--wpds-color-stroke-focus-brand);
31
+ --_gcd-div-outline: var(--wpds-border-width-focus) solid var(--wpds-color-stroke-focus-brand);
32
+
33
+ outline: var(--wpds-border-width-focus) solid var(--wpds-color-stroke-focus-brand);
32
34
  }
33
35
  }