@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
@@ -0,0 +1,15 @@
1
+ import { AlertDialog as _AlertDialog } from '@base-ui/react/alert-dialog';
2
+ import { forwardRef } from '@wordpress/element';
3
+
4
+ import type { TriggerProps } from './types';
5
+
6
+ /**
7
+ * Renders a button that opens the alert dialog when clicked.
8
+ */
9
+ const Trigger = forwardRef< HTMLButtonElement, TriggerProps >(
10
+ function AlertDialogTrigger( props, ref ) {
11
+ return <_AlertDialog.Trigger ref={ ref } { ...props } />;
12
+ }
13
+ );
14
+
15
+ export { Trigger };
@@ -0,0 +1,119 @@
1
+ import type { AlertDialog as _AlertDialog } from '@base-ui/react/alert-dialog';
2
+ import type { ReactNode } from 'react';
3
+
4
+ import type { ComponentProps } from '../utils/types';
5
+
6
+ /**
7
+ * The return type of `onConfirm`. Return `void` (or nothing) to auto-close
8
+ * the dialog after the confirm handler completes. Return `{ close: false }`
9
+ * to keep the dialog open (e.g. for validation errors).
10
+ *
11
+ * Return `{ error: '...' }` to display a built-in error message below the
12
+ * action buttons. When `error` is provided, the dialog stays open
13
+ * regardless of the `close` value.
14
+ */
15
+ export type ConfirmResult = void | { close?: boolean; error?: string };
16
+
17
+ export interface RootProps
18
+ extends Pick<
19
+ _AlertDialog.Root.Props,
20
+ 'open' | 'onOpenChange' | 'defaultOpen'
21
+ > {
22
+ /**
23
+ * The content to be rendered inside the component. Typically includes
24
+ * `AlertDialog.Trigger` and `AlertDialog.Popup`.
25
+ */
26
+ children: ReactNode;
27
+
28
+ /**
29
+ * Callback fired when the user confirms the action.
30
+ *
31
+ * - Synchronous handlers: the dialog closes immediately after the
32
+ * handler returns.
33
+ * - Async handlers: the dialog enters a "pending" state (buttons
34
+ * disabled, spinner shown on the confirm button) until the promise
35
+ * settles.
36
+ *
37
+ * Return `{ close: false }` to keep the dialog open after the handler
38
+ * completes (e.g. for server-side validation). Return `void` or
39
+ * `{ close: true }` to close the dialog (the default).
40
+ *
41
+ * Return `{ error: '...' }` to show a built-in error message below
42
+ * the action buttons. The dialog stays open regardless of the `close`
43
+ * value. The error is announced to screen readers and is automatically
44
+ * cleared on the next confirm attempt or when the dialog reopens.
45
+ *
46
+ * If the promise rejects (or the handler throws) without returning an
47
+ * `error`, the dialog stays open and returns to idle without showing
48
+ * a visible error message. The error is logged to the console.
49
+ * To show a user-facing message on failure, catch the error and
50
+ * return `{ close: false, error: '...' }`.
51
+ */
52
+ onConfirm?: () => ConfirmResult | Promise< ConfirmResult >;
53
+ }
54
+
55
+ export interface TriggerProps extends ComponentProps< 'button' > {
56
+ /**
57
+ * The content to be rendered inside the component.
58
+ */
59
+ children?: ReactNode;
60
+ }
61
+
62
+ export interface PopupProps
63
+ extends ComponentProps< 'div' >,
64
+ Pick< _AlertDialog.Popup.Props, 'initialFocus' | 'finalFocus' > {
65
+ /**
66
+ * A parent element to render the portal into.
67
+ */
68
+ container?: _AlertDialog.Portal.Props[ 'container' ];
69
+
70
+ /**
71
+ * The semantic intent of the dialog, which determines its styling.
72
+ *
73
+ * All intents use `role="alertdialog"`, are always modal, and block
74
+ * backdrop click dismissal. Escape key and the cancel/confirm buttons
75
+ * still dismiss the dialog.
76
+ *
77
+ * - `'default'`: Standard confirmation dialog for reversible actions.
78
+ * - `'irreversible'`: Confirmation dialog for irreversible actions that
79
+ * cannot be undone. The confirm button uses error/danger coloring.
80
+ *
81
+ * @default 'default'
82
+ */
83
+ intent?: 'default' | 'irreversible';
84
+
85
+ /**
86
+ * The title displayed in the dialog header. This serves as both the
87
+ * visible heading and the accessible label (`aria-labelledby`) for the
88
+ * dialog. Must be a plain string to ensure a predictable accessible name.
89
+ */
90
+ title: string;
91
+
92
+ /**
93
+ * An optional description displayed below the title. Rendered using
94
+ * Base UI's `AlertDialog.Description` for proper `aria-describedby`
95
+ * association with the dialog. Must be a plain string to ensure a
96
+ * predictable accessible description.
97
+ */
98
+ description?: string;
99
+
100
+ /**
101
+ * Optional body content displayed between the description and the
102
+ * action buttons. Use for supplementary details or form fields.
103
+ */
104
+ children?: ReactNode;
105
+
106
+ /**
107
+ * Custom text for the confirm button.
108
+ *
109
+ * @default 'OK'
110
+ */
111
+ confirmButtonText?: string;
112
+
113
+ /**
114
+ * Custom text for the cancel button.
115
+ *
116
+ * @default 'Cancel'
117
+ */
118
+ cancelButtonText?: string;
119
+ }
@@ -1,29 +1,26 @@
1
- import { useRender, mergeProps } from '@base-ui/react';
2
1
  import clsx from 'clsx';
3
2
  import { forwardRef } from '@wordpress/element';
4
3
  import { type BadgeProps } from './types';
5
4
  import styles from './style.module.css';
5
+ import { Text } from '../text';
6
6
 
7
7
  /**
8
8
  * A badge component for displaying labels with semantic intent.
9
9
  */
10
10
  export const Badge = forwardRef< HTMLSpanElement, BadgeProps >( function Badge(
11
- { children, intent = 'none', render, className, ...props },
11
+ { intent = 'none', className, ...props },
12
12
  ref
13
13
  ) {
14
- const element = useRender( {
15
- render,
16
- defaultTagName: 'span',
17
- ref,
18
- props: mergeProps< 'span' >( props, {
19
- className: clsx(
14
+ return (
15
+ <Text
16
+ ref={ ref }
17
+ className={ clsx(
20
18
  styles.badge,
21
19
  styles[ `is-${ intent }-intent` ],
22
20
  className
23
- ),
24
- children,
25
- } ),
26
- } );
27
-
28
- return element;
21
+ ) }
22
+ { ...props }
23
+ variant="body-sm"
24
+ />
25
+ );
29
26
  } );
@@ -5,10 +5,6 @@
5
5
  padding-inline: var(--wpds-dimension-padding-sm);
6
6
  padding-block: var(--wpds-dimension-padding-xs);
7
7
  border-radius: var(--wpds-border-radius-lg);
8
- font-family: var(--wpds-font-family-body);
9
- font-size: var(--wpds-font-size-sm);
10
- font-weight: var(--wpds-font-weight-regular);
11
- line-height: var(--wpds-font-line-height-xs);
12
8
  }
13
9
 
14
10
  .is-high-intent {
@@ -7,6 +7,7 @@ import { type ButtonProps } from './types';
7
7
  import styles from './style.module.css';
8
8
  import resetStyles from '../utils/css/resets.module.css';
9
9
  import focusStyles from '../utils/css/focus.module.css';
10
+ import defenseStyles from '../utils/css/global-css-defense.module.css';
10
11
 
11
12
  export const Button = forwardRef< HTMLButtonElement, ButtonProps >(
12
13
  function Button(
@@ -25,6 +26,7 @@ export const Button = forwardRef< HTMLButtonElement, ButtonProps >(
25
26
  ref
26
27
  ) {
27
28
  const mergedClassName = clsx(
29
+ defenseStyles.button,
28
30
  resetStyles[ 'box-sizing' ],
29
31
  focusStyles[ 'outset-ring--focus-except-active' ],
30
32
  variant !== 'unstyled' && styles.button,
@@ -20,7 +20,7 @@
20
20
  --wp-ui-button-padding-inline: var(--wpds-dimension-padding-md);
21
21
  --wp-ui-button-height: 40px;
22
22
  --wp-ui-button-aspect-ratio: auto; /* Useful for overrides such as icon buttons */
23
- --wp-ui-button-font-size: var(--wpds-font-size-md);
23
+ --wp-ui-button-font-size: var(--wpds-typography-font-size-md);
24
24
  --wp-ui-button-min-width: calc(4ch + 2 * var(--wp-ui-button-padding-inline));
25
25
 
26
26
  /* by default, borders have the same color as the background */
@@ -28,6 +28,10 @@
28
28
  --wp-ui-button-border-color-active: var(--wp-ui-button-background-color-active);
29
29
  --wp-ui-button-border-color-disabled: var(--wp-ui-button-background-color-disabled);
30
30
 
31
+ --_gcd-button-font-family: var(--wpds-typography-font-family-body);
32
+ --_gcd-button-font-size: var(--wp-ui-button-font-size);
33
+ --_gcd-button-font-weight: var(--wp-ui-button-font-weight);
34
+
31
35
  /* Styles */
32
36
  position: relative;
33
37
  display: inline-flex;
@@ -44,12 +48,13 @@
44
48
  border-radius: var(--wpds-border-radius-sm);
45
49
  background-color: var(--wp-ui-button-background-color);
46
50
  background-clip: padding-box;
47
- font-family: var(--wpds-font-family-body);
51
+ font-family: var(--wpds-typography-font-family-body);
48
52
  font-size: var(--wp-ui-button-font-size);
49
53
  font-weight: var(--wp-ui-button-font-weight);
50
- line-height: var(--wpds-font-line-height-sm);
54
+ line-height: var(--wpds-typography-line-height-sm);
51
55
  text-decoration: none;
52
56
  color: var(--wp-ui-button-foreground-color);
57
+ cursor: var(--wpds-cursor-control);
53
58
 
54
59
  @media not ( prefers-reduced-motion ) {
55
60
  transition: color 0.1s ease-out;
@@ -61,6 +66,7 @@
61
66
 
62
67
  /* Use pointer cursor for buttons that are links */
63
68
  &[href] {
69
+ /* stylelint-disable-next-line declaration-property-value-disallowed-list -- Links should always use pointer. */
64
70
  cursor: pointer;
65
71
  }
66
72
 
@@ -10,10 +10,10 @@ function Text( { children }: { children: React.ReactNode } ) {
10
10
  <p
11
11
  style={ {
12
12
  margin: 0,
13
- fontFamily: [ 'var(--wp', 'ds-font-family-body)' ].join( '' ),
14
- fontSize: 'var(--wpds-font-size-md)',
15
- fontWeight: 'var(--wpds-font-weight-regular)',
16
- lineHeight: 'var(--wpds-font-line-height-sm)',
13
+ fontFamily: 'var(--wpds-typography-font-family-body)',
14
+ fontSize: 'var(--wpds-typography-font-size-md)',
15
+ fontWeight: 'var(--wpds-typography-font-weight-regular)',
16
+ lineHeight: 'var(--wpds-typography-line-height-sm)',
17
17
  textWrap: 'pretty',
18
18
  color: 'var(--wpds-color-fg-content-neutral-weak)',
19
19
  } }
@@ -116,7 +116,6 @@ export const CustomSemantics: Story = {
116
116
  children: (
117
117
  <>
118
118
  <Card.Header>
119
- { /* eslint-disable-next-line jsx-a11y/heading-has-content -- content provided via render prop */ }
120
119
  <Card.Title render={ <h2 /> }>Section heading</Card.Title>
121
120
  </Card.Header>
122
121
  <Card.Content>
@@ -4,12 +4,15 @@
4
4
  .root {
5
5
  --wp-ui-card-padding: var(--wpds-dimension-padding-2xl);
6
6
  --wp-ui-card-header-content-gap: var(--wpds-dimension-gap-xl);
7
+ --wp-ui-card-header-content-margin: calc(var(--wp-ui-card-header-content-gap) - var(--wp-ui-card-padding));
7
8
 
8
9
  display: flex;
9
10
  flex-direction: column;
10
11
  border: 1px solid var(--wpds-color-stroke-surface-neutral-weak);
11
12
  border-radius: var(--wpds-border-radius-lg);
13
+ overflow: clip;
12
14
  background-color: var(--wpds-color-bg-surface-neutral-strong);
15
+ color: var(--wpds-color-fg-content-neutral);
13
16
  }
14
17
 
15
18
  /* Padding is applied to the individual header/content elements to enable
@@ -28,20 +31,11 @@
28
31
  /* Custom vertical gap between header and content */
29
32
  .header + .content {
30
33
  padding-block-start: 0;
31
- margin-block-start: calc(var(--wp-ui-card-header-content-gap) - var(--wp-ui-card-padding));
34
+ margin-block-start: var(--wp-ui-card-header-content-margin);
32
35
  }
33
36
 
34
37
  .fullbleed {
35
38
  margin-inline: calc(-1 * var(--wp-ui-card-padding));
36
39
  width: calc(100% + 2 * var(--wp-ui-card-padding));
37
40
  }
38
-
39
- .title {
40
- margin: 0;
41
- font-family: var(--wpds-font-family-heading);
42
- font-size: var(--wpds-font-size-lg);
43
- font-weight: var(--wpds-font-weight-medium);
44
- line-height: var(--wpds-font-line-height-sm);
45
- color: var(--wpds-color-fg-content-neutral);
46
- }
47
41
  }
@@ -82,7 +82,6 @@ describe( 'Card', () => {
82
82
  render(
83
83
  <Card.Root>
84
84
  <Card.Header>
85
- { /* eslint-disable-next-line jsx-a11y/heading-has-content -- content provided via render prop */ }
86
85
  <Card.Title render={ <h2 /> }>Heading</Card.Title>
87
86
  </Card.Header>
88
87
  </Card.Root>
@@ -92,5 +91,22 @@ describe( 'Card', () => {
92
91
  screen.getByRole( 'heading', { level: 2, name: 'Heading' } )
93
92
  ).toBeVisible();
94
93
  } );
94
+
95
+ it( 'forwards ref to custom Title render element', () => {
96
+ const titleRef = createRef< HTMLHeadingElement >();
97
+
98
+ render(
99
+ <Card.Root>
100
+ <Card.Header>
101
+ <Card.Title ref={ titleRef } render={ <h3 /> }>
102
+ Heading
103
+ </Card.Title>
104
+ </Card.Header>
105
+ </Card.Root>
106
+ );
107
+
108
+ expect( titleRef.current ).toBeInstanceOf( HTMLHeadingElement );
109
+ expect( titleRef.current?.tagName ).toBe( 'H3' );
110
+ } );
95
111
  } );
96
112
  } );
@@ -1,22 +1,24 @@
1
- import { mergeProps, useRender } from '@base-ui/react';
2
1
  import { forwardRef } from '@wordpress/element';
3
- import styles from './style.module.css';
2
+ import { Text } from '../text';
4
3
  import type { TitleProps } from './types';
5
4
 
5
+ const DEFAULT_TAG = <div />;
6
+
6
7
  /**
7
8
  * The title for a card. Renders as a `<div>` by default — use the `render`
8
9
  * prop to swap in a semantic heading element when appropriate.
9
10
  */
10
11
  export const Title = forwardRef< HTMLDivElement, TitleProps >(
11
- function CardTitle( { render, ...props }, ref ) {
12
- const element = useRender( {
13
- defaultTagName: 'div',
14
- render,
15
- ref,
16
- // TODO: use `Text` component instead, when ready
17
- props: mergeProps< 'div' >( { className: styles.title }, props ),
18
- } );
19
-
20
- return element;
12
+ function CardTitle( { render = DEFAULT_TAG, children, ...props }, ref ) {
13
+ return (
14
+ <Text
15
+ ref={ ref }
16
+ variant="heading-lg"
17
+ render={ render }
18
+ { ...props }
19
+ >
20
+ { children }
21
+ </Text>
22
+ );
21
23
  }
22
24
  );
@@ -1,6 +1,8 @@
1
1
  import { forwardRef } from '@wordpress/element';
2
+ import clsx from 'clsx';
2
3
  import * as Card from '../card';
3
4
  import * as Collapsible from '../collapsible';
5
+ import styles from './style.module.css';
4
6
  import type { ContentProps } from './types';
5
7
 
6
8
  /**
@@ -8,13 +10,24 @@ import type { ContentProps } from './types';
8
10
  * visible when expanded.
9
11
  */
10
12
  export const Content = forwardRef< HTMLDivElement, ContentProps >(
11
- function CollapsibleCardContent( { render, ...restProps }, ref ) {
13
+ function CollapsibleCardContent(
14
+ { className, render, children, hiddenUntilFound = true, ...restProps },
15
+ ref
16
+ ) {
12
17
  return (
13
18
  <Collapsible.Panel
14
19
  ref={ ref }
15
- render={ <Card.Content render={ render } /> }
20
+ className={ clsx( styles.content, className ) }
21
+ hiddenUntilFound={ hiddenUntilFound }
16
22
  { ...restProps }
17
- />
23
+ >
24
+ <Card.Content
25
+ className={ styles[ 'content-inner' ] }
26
+ render={ render }
27
+ >
28
+ { children }
29
+ </Card.Content>
30
+ </Collapsible.Panel>
18
31
  );
19
32
  }
20
33
  );
@@ -0,0 +1,7 @@
1
+ import { createContext } from '@wordpress/element';
2
+
3
+ export const HeaderDescriptionIdContext = createContext< {
4
+ setDescriptionId: ( id: string | undefined ) => void;
5
+ } >( {
6
+ setDescriptionId: () => {},
7
+ } );
@@ -0,0 +1,43 @@
1
+ import { forwardRef, useContext, useEffect, useId } from '@wordpress/element';
2
+ import { HeaderDescriptionIdContext } from './context';
3
+ import type { HeaderDescriptionProps } from './types';
4
+
5
+ /**
6
+ * Secondary content placed in the collapsible card header that describes
7
+ * the trigger button via `aria-describedby`. Use it for supplementary
8
+ * information such as status badges or summary values.
9
+ *
10
+ * The content is visually rendered but marked `aria-hidden` so that
11
+ * assistive technologies consume it only through the `aria-describedby`
12
+ * relationship on the trigger, avoiding double announcements.
13
+ *
14
+ * Avoid interactive elements (buttons, links, inputs) inside this
15
+ * component — the entire header is the toggle trigger.
16
+ */
17
+ export const HeaderDescription = forwardRef<
18
+ HTMLDivElement,
19
+ HeaderDescriptionProps
20
+ >( function CollapsibleCardHeaderDescription(
21
+ { children, className, ...restProps },
22
+ ref
23
+ ) {
24
+ const descriptionId = useId();
25
+ const { setDescriptionId } = useContext( HeaderDescriptionIdContext );
26
+
27
+ useEffect( () => {
28
+ setDescriptionId( descriptionId );
29
+ return () => setDescriptionId( undefined );
30
+ }, [ descriptionId, setDescriptionId ] );
31
+
32
+ return (
33
+ <div
34
+ ref={ ref }
35
+ id={ descriptionId }
36
+ aria-hidden="true"
37
+ className={ className }
38
+ { ...restProps }
39
+ >
40
+ { children }
41
+ </div>
42
+ );
43
+ } );
@@ -1,11 +1,12 @@
1
1
  import clsx from 'clsx';
2
- import { forwardRef } from '@wordpress/element';
2
+ import { forwardRef, useMemo, useState } from '@wordpress/element';
3
3
  import { chevronDown } from '@wordpress/icons';
4
4
  import * as Card from '../card';
5
5
  import * as Collapsible from '../collapsible';
6
6
  import { Icon } from '../icon';
7
7
  import styles from './style.module.css';
8
8
  import focusStyles from '../utils/css/focus.module.css';
9
+ import { HeaderDescriptionIdContext } from './context';
9
10
  import type { HeaderProps } from './types';
10
11
 
11
12
  /**
@@ -22,32 +23,54 @@ export const Header = forwardRef< HTMLDivElement, HeaderProps >(
22
23
  { children, className, render, ...restProps },
23
24
  ref
24
25
  ) {
26
+ const [ descriptionId, setDescriptionId ] = useState< string >();
27
+
28
+ const contextValue = useMemo(
29
+ () => ( { setDescriptionId } ),
30
+ [ setDescriptionId ]
31
+ );
32
+
25
33
  return (
26
- <Collapsible.Trigger
27
- className={ clsx( styles.header, className ) }
28
- render={
29
- <Card.Header
30
- ref={ ref }
31
- render={ render }
32
- { ...restProps }
33
- />
34
- }
35
- nativeButton={ false }
36
- >
37
- <div className={ styles[ 'header-content' ] }>{ children }</div>
38
- <div className={ styles[ 'header-trigger-wrapper' ] }>
39
- <Icon
40
- icon={ chevronDown }
34
+ <HeaderDescriptionIdContext.Provider value={ contextValue }>
35
+ <Collapsible.Trigger
36
+ className={ clsx( styles.header, className ) }
37
+ render={
38
+ <Card.Header
39
+ ref={ ref }
40
+ render={ render }
41
+ { ...restProps }
42
+ />
43
+ }
44
+ nativeButton={ false }
45
+ aria-describedby={ descriptionId }
46
+ >
47
+ <div className={ styles[ 'header-content' ] }>
48
+ { children }
49
+ </div>
50
+ <div
41
51
  className={ clsx(
42
- styles[ 'header-trigger' ],
43
- // While the interactive trigger element is the whole header,
44
- // the focus ring will be displayed only on the icon to visually
45
- // emulate it being the button.
46
- focusStyles[ 'outset-ring--focus-parent-visible' ]
52
+ styles[ 'header-trigger-positioner' ]
47
53
  ) }
48
- />
49
- </div>
50
- </Collapsible.Trigger>
54
+ >
55
+ <div
56
+ className={ clsx(
57
+ styles[ 'header-trigger-wrapper' ],
58
+ // While the interactive trigger element is the whole header,
59
+ // the focus ring will be displayed only on the icon to visually
60
+ // emulate it being the button.
61
+ focusStyles[
62
+ 'outset-ring--focus-parent-visible'
63
+ ]
64
+ ) }
65
+ >
66
+ <Icon
67
+ icon={ chevronDown }
68
+ className={ styles[ 'header-trigger' ] }
69
+ />
70
+ </div>
71
+ </div>
72
+ </Collapsible.Trigger>
73
+ </HeaderDescriptionIdContext.Provider>
51
74
  );
52
75
  }
53
76
  );
@@ -1,5 +1,6 @@
1
1
  import { Root } from './root';
2
2
  import { Header } from './header';
3
+ import { HeaderDescription } from './header-description';
3
4
  import { Content } from './content';
4
5
 
5
- export { Root, Header, Content };
6
+ export { Root, Header, HeaderDescription, Content };