@wordpress/ui 0.11.1-next.v.202604091042.0 → 0.12.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 (827) hide show
  1. package/CHANGELOG.md +58 -1
  2. package/CONTRIBUTING.md +124 -0
  3. package/README.md +17 -9
  4. package/build/alert-dialog/index.cjs +3 -0
  5. package/build/alert-dialog/index.cjs.map +2 -2
  6. package/build/alert-dialog/popup.cjs +120 -55
  7. package/build/alert-dialog/popup.cjs.map +3 -3
  8. package/build/alert-dialog/portal.cjs +38 -0
  9. package/build/alert-dialog/portal.cjs.map +7 -0
  10. package/build/alert-dialog/types.cjs.map +1 -1
  11. package/build/badge/badge.cjs +14 -14
  12. package/build/badge/badge.cjs.map +2 -2
  13. package/build/button/button.cjs +6 -6
  14. package/build/button/button.cjs.map +2 -2
  15. package/build/card/content.cjs +4 -4
  16. package/build/card/content.cjs.map +2 -2
  17. package/build/card/full-bleed.cjs +4 -4
  18. package/build/card/full-bleed.cjs.map +2 -2
  19. package/build/card/header.cjs +4 -4
  20. package/build/card/header.cjs.map +2 -2
  21. package/build/card/root.cjs +4 -4
  22. package/build/card/root.cjs.map +2 -2
  23. package/build/card/title.cjs +5 -25
  24. package/build/card/title.cjs.map +4 -4
  25. package/build/collapsible-card/content.cjs +9 -5
  26. package/build/collapsible-card/content.cjs.map +2 -2
  27. package/build/collapsible-card/header.cjs +14 -4
  28. package/build/collapsible-card/header.cjs.map +3 -3
  29. package/build/dialog/content.cjs +85 -0
  30. package/build/dialog/content.cjs.map +7 -0
  31. package/build/dialog/context.cjs +12 -44
  32. package/build/dialog/context.cjs.map +2 -2
  33. package/build/dialog/description.cjs +59 -0
  34. package/build/dialog/description.cjs.map +7 -0
  35. package/build/dialog/footer.cjs +5 -4
  36. package/build/dialog/footer.cjs.map +2 -2
  37. package/build/dialog/header.cjs +5 -4
  38. package/build/dialog/header.cjs.map +2 -2
  39. package/build/dialog/index.cjs +9 -0
  40. package/build/dialog/index.cjs.map +2 -2
  41. package/build/dialog/popup.cjs +21 -8
  42. package/build/dialog/popup.cjs.map +2 -2
  43. package/build/dialog/portal.cjs +38 -0
  44. package/build/dialog/portal.cjs.map +7 -0
  45. package/build/dialog/root.cjs +3 -2
  46. package/build/dialog/root.cjs.map +2 -2
  47. package/build/dialog/title.cjs +16 -22
  48. package/build/dialog/title.cjs.map +3 -3
  49. package/build/dialog/types.cjs.map +1 -1
  50. package/build/drawer/action.cjs +48 -0
  51. package/build/drawer/action.cjs.map +7 -0
  52. package/build/drawer/close-icon.cjs +58 -0
  53. package/build/drawer/close-icon.cjs.map +7 -0
  54. package/build/drawer/content.cjs +86 -0
  55. package/build/drawer/content.cjs.map +7 -0
  56. package/build/drawer/context.cjs +44 -0
  57. package/build/drawer/context.cjs.map +7 -0
  58. package/build/drawer/description.cjs +47 -0
  59. package/build/drawer/description.cjs.map +7 -0
  60. package/build/drawer/footer.cjs +65 -0
  61. package/build/drawer/footer.cjs.map +7 -0
  62. package/build/drawer/header.cjs +65 -0
  63. package/build/drawer/header.cjs.map +7 -0
  64. package/build/drawer/index.cjs +61 -0
  65. package/build/drawer/index.cjs.map +7 -0
  66. package/build/drawer/popup.cjs +103 -0
  67. package/build/drawer/popup.cjs.map +7 -0
  68. package/build/drawer/portal.cjs +38 -0
  69. package/build/drawer/portal.cjs.map +7 -0
  70. package/build/drawer/root.cjs +49 -0
  71. package/build/drawer/root.cjs.map +7 -0
  72. package/build/drawer/title.cjs +70 -0
  73. package/build/drawer/title.cjs.map +7 -0
  74. package/build/drawer/trigger.cjs +38 -0
  75. package/build/drawer/trigger.cjs.map +7 -0
  76. package/build/drawer/types.cjs +19 -0
  77. package/build/drawer/types.cjs.map +7 -0
  78. package/build/empty-state/actions.cjs +3 -3
  79. package/build/empty-state/actions.cjs.map +2 -2
  80. package/build/empty-state/description.cjs +8 -5
  81. package/build/empty-state/description.cjs.map +2 -2
  82. package/build/empty-state/icon.cjs +3 -3
  83. package/build/empty-state/icon.cjs.map +2 -2
  84. package/build/empty-state/root.cjs +3 -3
  85. package/build/empty-state/root.cjs.map +2 -2
  86. package/build/empty-state/title.cjs +8 -5
  87. package/build/empty-state/title.cjs.map +2 -2
  88. package/build/empty-state/visual.cjs +3 -3
  89. package/build/empty-state/visual.cjs.map +2 -2
  90. package/build/form/primitives/autocomplete/clear.cjs +62 -0
  91. package/build/form/primitives/autocomplete/clear.cjs.map +7 -0
  92. package/build/form/primitives/autocomplete/collection.cjs +38 -0
  93. package/build/form/primitives/autocomplete/collection.cjs.map +7 -0
  94. package/build/form/primitives/autocomplete/empty.cjs +67 -0
  95. package/build/form/primitives/autocomplete/empty.cjs.map +7 -0
  96. package/build/form/primitives/autocomplete/index.cjs +64 -0
  97. package/build/form/primitives/autocomplete/index.cjs.map +7 -0
  98. package/build/form/primitives/autocomplete/input-group.cjs +36 -0
  99. package/build/form/primitives/autocomplete/input-group.cjs.map +7 -0
  100. package/build/form/primitives/autocomplete/input.cjs +47 -0
  101. package/build/form/primitives/autocomplete/input.cjs.map +7 -0
  102. package/build/form/primitives/autocomplete/item.cjs +81 -0
  103. package/build/form/primitives/autocomplete/item.cjs.map +7 -0
  104. package/build/form/primitives/autocomplete/list-body.cjs +57 -0
  105. package/build/form/primitives/autocomplete/list-body.cjs.map +7 -0
  106. package/build/form/primitives/autocomplete/list.cjs +67 -0
  107. package/build/form/primitives/autocomplete/list.cjs.map +7 -0
  108. package/build/form/primitives/autocomplete/popup.cjs +102 -0
  109. package/build/form/primitives/autocomplete/popup.cjs.map +7 -0
  110. package/build/form/primitives/autocomplete/portal.cjs +38 -0
  111. package/build/form/primitives/autocomplete/portal.cjs.map +7 -0
  112. package/build/form/primitives/autocomplete/root.cjs +35 -0
  113. package/build/form/primitives/autocomplete/root.cjs.map +7 -0
  114. package/build/form/primitives/autocomplete/types.cjs +19 -0
  115. package/build/form/primitives/autocomplete/types.cjs.map +7 -0
  116. package/build/form/primitives/autocomplete/value.cjs +35 -0
  117. package/build/form/primitives/autocomplete/value.cjs.map +7 -0
  118. package/build/form/primitives/field/description.cjs +6 -6
  119. package/build/form/primitives/field/description.cjs.map +2 -2
  120. package/build/form/primitives/field/details.cjs +4 -4
  121. package/build/form/primitives/field/details.cjs.map +2 -2
  122. package/build/form/primitives/field/label.cjs +8 -8
  123. package/build/form/primitives/field/label.cjs.map +2 -2
  124. package/build/form/primitives/field/root.cjs +2 -2
  125. package/build/form/primitives/field/root.cjs.map +2 -2
  126. package/build/form/primitives/fieldset/description.cjs +6 -6
  127. package/build/form/primitives/fieldset/description.cjs.map +2 -2
  128. package/build/form/primitives/fieldset/details.cjs +3 -3
  129. package/build/form/primitives/fieldset/details.cjs.map +2 -2
  130. package/build/form/primitives/fieldset/legend.cjs +8 -7
  131. package/build/form/primitives/fieldset/legend.cjs.map +2 -2
  132. package/build/form/primitives/index.cjs +3 -0
  133. package/build/form/primitives/index.cjs.map +2 -2
  134. package/build/form/primitives/input/input.cjs +6 -6
  135. package/build/form/primitives/input/input.cjs.map +2 -2
  136. package/build/form/primitives/input-layout/input-layout.cjs +6 -6
  137. package/build/form/primitives/input-layout/input-layout.cjs.map +2 -2
  138. package/build/form/primitives/input-layout/slot.cjs +3 -3
  139. package/build/form/primitives/input-layout/slot.cjs.map +2 -2
  140. package/build/form/primitives/select/index.cjs +3 -0
  141. package/build/form/primitives/select/index.cjs.map +2 -2
  142. package/build/form/primitives/select/item.cjs +4 -5
  143. package/build/form/primitives/select/item.cjs.map +2 -2
  144. package/build/form/primitives/select/popup.cjs +12 -11
  145. package/build/form/primitives/select/popup.cjs.map +2 -2
  146. package/build/form/primitives/select/portal.cjs +38 -0
  147. package/build/form/primitives/select/portal.cjs.map +7 -0
  148. package/build/form/primitives/select/trigger.cjs +3 -3
  149. package/build/form/primitives/select/trigger.cjs.map +1 -1
  150. package/build/form/primitives/select/types.cjs.map +1 -1
  151. package/build/form/primitives/textarea/textarea.cjs +3 -3
  152. package/build/form/primitives/textarea/textarea.cjs.map +2 -2
  153. package/build/index.cjs +3 -0
  154. package/build/index.cjs.map +2 -2
  155. package/build/link/link.cjs +11 -21
  156. package/build/link/link.cjs.map +2 -2
  157. package/build/link/types.cjs.map +1 -1
  158. package/build/notice/action-button.cjs +3 -3
  159. package/build/notice/action-button.cjs.map +2 -2
  160. package/build/notice/action-link.cjs +8 -7
  161. package/build/notice/action-link.cjs.map +2 -2
  162. package/build/notice/actions.cjs +3 -3
  163. package/build/notice/actions.cjs.map +2 -2
  164. package/build/notice/close-icon.cjs +3 -3
  165. package/build/notice/close-icon.cjs.map +2 -2
  166. package/build/notice/description.cjs +3 -3
  167. package/build/notice/description.cjs.map +2 -2
  168. package/build/notice/root.cjs +3 -3
  169. package/build/notice/root.cjs.map +2 -2
  170. package/build/notice/title.cjs +3 -3
  171. package/build/notice/title.cjs.map +2 -2
  172. package/build/popover/arrow.cjs +4 -4
  173. package/build/popover/arrow.cjs.map +2 -2
  174. package/build/popover/context.cjs +4 -44
  175. package/build/popover/context.cjs.map +2 -2
  176. package/build/popover/description.cjs +2 -25
  177. package/build/popover/description.cjs.map +4 -4
  178. package/build/popover/index.cjs +3 -0
  179. package/build/popover/index.cjs.map +2 -2
  180. package/build/popover/popup.cjs +15 -15
  181. package/build/popover/popup.cjs.map +2 -2
  182. package/build/popover/portal.cjs +38 -0
  183. package/build/popover/portal.cjs.map +7 -0
  184. package/build/popover/root.cjs.map +1 -1
  185. package/build/popover/title.cjs +19 -5
  186. package/build/popover/title.cjs.map +3 -3
  187. package/build/popover/types.cjs.map +1 -1
  188. package/build/tabs/context.cjs +9 -22
  189. package/build/tabs/context.cjs.map +2 -2
  190. package/build/tabs/list.cjs +4 -5
  191. package/build/tabs/list.cjs.map +2 -2
  192. package/build/tabs/panel.cjs +19 -6
  193. package/build/tabs/panel.cjs.map +3 -3
  194. package/build/tabs/tab.cjs +4 -4
  195. package/build/tabs/tab.cjs.map +2 -2
  196. package/build/text/text.cjs +8 -8
  197. package/build/text/text.cjs.map +2 -2
  198. package/build/tooltip/index.cjs +3 -0
  199. package/build/tooltip/index.cjs.map +2 -2
  200. package/build/tooltip/popup.cjs +11 -13
  201. package/build/tooltip/popup.cjs.map +3 -3
  202. package/build/tooltip/portal.cjs +38 -0
  203. package/build/tooltip/portal.cjs.map +7 -0
  204. package/build/tooltip/provider.cjs +2 -2
  205. package/build/tooltip/provider.cjs.map +3 -3
  206. package/build/tooltip/root.cjs.map +3 -3
  207. package/build/tooltip/trigger.cjs +2 -2
  208. package/build/tooltip/trigger.cjs.map +3 -3
  209. package/build/tooltip/types.cjs.map +1 -1
  210. package/build/utils/create-overlay-modal-context.cjs +48 -0
  211. package/build/utils/create-overlay-modal-context.cjs.map +7 -0
  212. package/build/utils/create-overlay-title-validation.cjs +93 -0
  213. package/build/utils/create-overlay-title-validation.cjs.map +7 -0
  214. package/build/utils/render-portal-with-children.cjs +37 -0
  215. package/build/utils/render-portal-with-children.cjs.map +7 -0
  216. package/build/utils/types.cjs.map +1 -1
  217. package/build/utils/use-deprioritized-initial-focus.cjs +8 -8
  218. package/build/utils/use-deprioritized-initial-focus.cjs.map +2 -2
  219. package/build/utils/use-overlay-scroll-state-attributes.cjs +140 -0
  220. package/build/utils/use-overlay-scroll-state-attributes.cjs.map +7 -0
  221. package/build/utils/use-schedule-validation.cjs +59 -0
  222. package/build/utils/use-schedule-validation.cjs.map +7 -0
  223. package/build/visually-hidden/visually-hidden.cjs +5 -1
  224. package/build/visually-hidden/visually-hidden.cjs.map +2 -2
  225. package/build-module/alert-dialog/index.mjs +2 -0
  226. package/build-module/alert-dialog/index.mjs.map +2 -2
  227. package/build-module/alert-dialog/popup.mjs +124 -56
  228. package/build-module/alert-dialog/popup.mjs.map +3 -3
  229. package/build-module/alert-dialog/portal.mjs +13 -0
  230. package/build-module/alert-dialog/portal.mjs.map +7 -0
  231. package/build-module/badge/badge.mjs +14 -14
  232. package/build-module/badge/badge.mjs.map +2 -2
  233. package/build-module/button/button.mjs +6 -6
  234. package/build-module/button/button.mjs.map +2 -2
  235. package/build-module/card/content.mjs +4 -4
  236. package/build-module/card/content.mjs.map +2 -2
  237. package/build-module/card/full-bleed.mjs +4 -4
  238. package/build-module/card/full-bleed.mjs.map +2 -2
  239. package/build-module/card/header.mjs +4 -4
  240. package/build-module/card/header.mjs.map +2 -2
  241. package/build-module/card/root.mjs +4 -4
  242. package/build-module/card/root.mjs.map +2 -2
  243. package/build-module/card/title.mjs +5 -15
  244. package/build-module/card/title.mjs.map +3 -3
  245. package/build-module/collapsible-card/content.mjs +9 -5
  246. package/build-module/collapsible-card/content.mjs.map +2 -2
  247. package/build-module/collapsible-card/header.mjs +14 -4
  248. package/build-module/collapsible-card/header.mjs.map +3 -3
  249. package/build-module/dialog/content.mjs +50 -0
  250. package/build-module/dialog/content.mjs.map +7 -0
  251. package/build-module/dialog/context.mjs +10 -51
  252. package/build-module/dialog/context.mjs.map +2 -2
  253. package/build-module/dialog/description.mjs +34 -0
  254. package/build-module/dialog/description.mjs.map +7 -0
  255. package/build-module/dialog/footer.mjs +5 -4
  256. package/build-module/dialog/footer.mjs.map +2 -2
  257. package/build-module/dialog/header.mjs +5 -4
  258. package/build-module/dialog/header.mjs.map +2 -2
  259. package/build-module/dialog/index.mjs +6 -0
  260. package/build-module/dialog/index.mjs.map +2 -2
  261. package/build-module/dialog/popup.mjs +23 -10
  262. package/build-module/dialog/popup.mjs.map +2 -2
  263. package/build-module/dialog/portal.mjs +13 -0
  264. package/build-module/dialog/portal.mjs.map +7 -0
  265. package/build-module/dialog/root.mjs +3 -2
  266. package/build-module/dialog/root.mjs.map +2 -2
  267. package/build-module/dialog/title.mjs +17 -13
  268. package/build-module/dialog/title.mjs.map +2 -2
  269. package/build-module/drawer/action.mjs +23 -0
  270. package/build-module/drawer/action.mjs.map +7 -0
  271. package/build-module/drawer/close-icon.mjs +33 -0
  272. package/build-module/drawer/close-icon.mjs.map +7 -0
  273. package/build-module/drawer/content.mjs +51 -0
  274. package/build-module/drawer/content.mjs.map +7 -0
  275. package/build-module/drawer/context.mjs +16 -0
  276. package/build-module/drawer/context.mjs.map +7 -0
  277. package/build-module/drawer/description.mjs +22 -0
  278. package/build-module/drawer/description.mjs.map +7 -0
  279. package/build-module/drawer/footer.mjs +30 -0
  280. package/build-module/drawer/footer.mjs.map +7 -0
  281. package/build-module/drawer/header.mjs +30 -0
  282. package/build-module/drawer/header.mjs.map +7 -0
  283. package/build-module/drawer/index.mjs +26 -0
  284. package/build-module/drawer/index.mjs.map +7 -0
  285. package/build-module/drawer/popup.mjs +70 -0
  286. package/build-module/drawer/popup.mjs.map +7 -0
  287. package/build-module/drawer/portal.mjs +13 -0
  288. package/build-module/drawer/portal.mjs.map +7 -0
  289. package/build-module/drawer/root.mjs +24 -0
  290. package/build-module/drawer/root.mjs.map +7 -0
  291. package/build-module/drawer/title.mjs +45 -0
  292. package/build-module/drawer/title.mjs.map +7 -0
  293. package/build-module/drawer/trigger.mjs +13 -0
  294. package/build-module/drawer/trigger.mjs.map +7 -0
  295. package/build-module/drawer/types.mjs +1 -0
  296. package/build-module/empty-state/actions.mjs +3 -3
  297. package/build-module/empty-state/actions.mjs.map +2 -2
  298. package/build-module/empty-state/description.mjs +8 -5
  299. package/build-module/empty-state/description.mjs.map +2 -2
  300. package/build-module/empty-state/icon.mjs +3 -3
  301. package/build-module/empty-state/icon.mjs.map +2 -2
  302. package/build-module/empty-state/root.mjs +3 -3
  303. package/build-module/empty-state/root.mjs.map +2 -2
  304. package/build-module/empty-state/title.mjs +8 -5
  305. package/build-module/empty-state/title.mjs.map +2 -2
  306. package/build-module/empty-state/visual.mjs +3 -3
  307. package/build-module/empty-state/visual.mjs.map +2 -2
  308. package/build-module/form/primitives/autocomplete/clear.mjs +37 -0
  309. package/build-module/form/primitives/autocomplete/clear.mjs.map +7 -0
  310. package/build-module/form/primitives/autocomplete/collection.mjs +13 -0
  311. package/build-module/form/primitives/autocomplete/collection.mjs.map +7 -0
  312. package/build-module/form/primitives/autocomplete/empty.mjs +32 -0
  313. package/build-module/form/primitives/autocomplete/empty.mjs.map +7 -0
  314. package/build-module/form/primitives/autocomplete/index.mjs +28 -0
  315. package/build-module/form/primitives/autocomplete/index.mjs.map +7 -0
  316. package/build-module/form/primitives/autocomplete/input-group.mjs +11 -0
  317. package/build-module/form/primitives/autocomplete/input-group.mjs.map +7 -0
  318. package/build-module/form/primitives/autocomplete/input.mjs +22 -0
  319. package/build-module/form/primitives/autocomplete/input.mjs.map +7 -0
  320. package/build-module/form/primitives/autocomplete/item.mjs +46 -0
  321. package/build-module/form/primitives/autocomplete/item.mjs.map +7 -0
  322. package/build-module/form/primitives/autocomplete/list-body.mjs +32 -0
  323. package/build-module/form/primitives/autocomplete/list-body.mjs.map +7 -0
  324. package/build-module/form/primitives/autocomplete/list.mjs +32 -0
  325. package/build-module/form/primitives/autocomplete/list.mjs.map +7 -0
  326. package/build-module/form/primitives/autocomplete/popup.mjs +69 -0
  327. package/build-module/form/primitives/autocomplete/popup.mjs.map +7 -0
  328. package/build-module/form/primitives/autocomplete/portal.mjs +13 -0
  329. package/build-module/form/primitives/autocomplete/portal.mjs.map +7 -0
  330. package/build-module/form/primitives/autocomplete/root.mjs +10 -0
  331. package/build-module/form/primitives/autocomplete/root.mjs.map +7 -0
  332. package/build-module/form/primitives/autocomplete/types.mjs +1 -0
  333. package/build-module/form/primitives/autocomplete/value.mjs +10 -0
  334. package/build-module/form/primitives/autocomplete/value.mjs.map +7 -0
  335. package/build-module/form/primitives/field/description.mjs +6 -6
  336. package/build-module/form/primitives/field/description.mjs.map +2 -2
  337. package/build-module/form/primitives/field/details.mjs +4 -4
  338. package/build-module/form/primitives/field/details.mjs.map +2 -2
  339. package/build-module/form/primitives/field/label.mjs +8 -8
  340. package/build-module/form/primitives/field/label.mjs.map +2 -2
  341. package/build-module/form/primitives/field/root.mjs +2 -2
  342. package/build-module/form/primitives/field/root.mjs.map +2 -2
  343. package/build-module/form/primitives/fieldset/description.mjs +6 -6
  344. package/build-module/form/primitives/fieldset/description.mjs.map +2 -2
  345. package/build-module/form/primitives/fieldset/details.mjs +3 -3
  346. package/build-module/form/primitives/fieldset/details.mjs.map +2 -2
  347. package/build-module/form/primitives/fieldset/legend.mjs +8 -7
  348. package/build-module/form/primitives/fieldset/legend.mjs.map +2 -2
  349. package/build-module/form/primitives/index.mjs +2 -0
  350. package/build-module/form/primitives/index.mjs.map +2 -2
  351. package/build-module/form/primitives/input/input.mjs +6 -6
  352. package/build-module/form/primitives/input/input.mjs.map +2 -2
  353. package/build-module/form/primitives/input-layout/input-layout.mjs +6 -6
  354. package/build-module/form/primitives/input-layout/input-layout.mjs.map +2 -2
  355. package/build-module/form/primitives/input-layout/slot.mjs +3 -3
  356. package/build-module/form/primitives/input-layout/slot.mjs.map +2 -2
  357. package/build-module/form/primitives/select/index.mjs +2 -0
  358. package/build-module/form/primitives/select/index.mjs.map +2 -2
  359. package/build-module/form/primitives/select/item.mjs +4 -5
  360. package/build-module/form/primitives/select/item.mjs.map +2 -2
  361. package/build-module/form/primitives/select/popup.mjs +12 -11
  362. package/build-module/form/primitives/select/popup.mjs.map +2 -2
  363. package/build-module/form/primitives/select/portal.mjs +13 -0
  364. package/build-module/form/primitives/select/portal.mjs.map +7 -0
  365. package/build-module/form/primitives/select/trigger.mjs +3 -3
  366. package/build-module/form/primitives/select/trigger.mjs.map +1 -1
  367. package/build-module/form/primitives/textarea/textarea.mjs +3 -3
  368. package/build-module/form/primitives/textarea/textarea.mjs.map +2 -2
  369. package/build-module/index.mjs +2 -0
  370. package/build-module/index.mjs.map +2 -2
  371. package/build-module/link/link.mjs +11 -21
  372. package/build-module/link/link.mjs.map +2 -2
  373. package/build-module/notice/action-button.mjs +3 -3
  374. package/build-module/notice/action-button.mjs.map +2 -2
  375. package/build-module/notice/action-link.mjs +8 -7
  376. package/build-module/notice/action-link.mjs.map +2 -2
  377. package/build-module/notice/actions.mjs +3 -3
  378. package/build-module/notice/actions.mjs.map +2 -2
  379. package/build-module/notice/close-icon.mjs +3 -3
  380. package/build-module/notice/close-icon.mjs.map +2 -2
  381. package/build-module/notice/description.mjs +3 -3
  382. package/build-module/notice/description.mjs.map +2 -2
  383. package/build-module/notice/root.mjs +3 -3
  384. package/build-module/notice/root.mjs.map +2 -2
  385. package/build-module/notice/title.mjs +3 -3
  386. package/build-module/notice/title.mjs.map +2 -2
  387. package/build-module/popover/arrow.mjs +4 -4
  388. package/build-module/popover/arrow.mjs.map +2 -2
  389. package/build-module/popover/context.mjs +4 -51
  390. package/build-module/popover/context.mjs.map +2 -2
  391. package/build-module/popover/description.mjs +2 -15
  392. package/build-module/popover/description.mjs.map +3 -3
  393. package/build-module/popover/index.mjs +2 -0
  394. package/build-module/popover/index.mjs.map +2 -2
  395. package/build-module/popover/popup.mjs +16 -16
  396. package/build-module/popover/popup.mjs.map +2 -2
  397. package/build-module/popover/portal.mjs +13 -0
  398. package/build-module/popover/portal.mjs.map +7 -0
  399. package/build-module/popover/root.mjs.map +1 -1
  400. package/build-module/popover/title.mjs +20 -6
  401. package/build-module/popover/title.mjs.map +3 -3
  402. package/build-module/tabs/context.mjs +11 -24
  403. package/build-module/tabs/context.mjs.map +2 -2
  404. package/build-module/tabs/list.mjs +4 -5
  405. package/build-module/tabs/list.mjs.map +2 -2
  406. package/build-module/tabs/panel.mjs +19 -6
  407. package/build-module/tabs/panel.mjs.map +3 -3
  408. package/build-module/tabs/tab.mjs +4 -4
  409. package/build-module/tabs/tab.mjs.map +2 -2
  410. package/build-module/text/text.mjs +8 -8
  411. package/build-module/text/text.mjs.map +2 -2
  412. package/build-module/tooltip/index.mjs +2 -0
  413. package/build-module/tooltip/index.mjs.map +2 -2
  414. package/build-module/tooltip/popup.mjs +14 -16
  415. package/build-module/tooltip/popup.mjs.map +2 -2
  416. package/build-module/tooltip/portal.mjs +13 -0
  417. package/build-module/tooltip/portal.mjs.map +7 -0
  418. package/build-module/tooltip/provider.mjs +3 -3
  419. package/build-module/tooltip/provider.mjs.map +2 -2
  420. package/build-module/tooltip/root.mjs +2 -2
  421. package/build-module/tooltip/root.mjs.map +2 -2
  422. package/build-module/tooltip/trigger.mjs +3 -3
  423. package/build-module/tooltip/trigger.mjs.map +2 -2
  424. package/build-module/utils/create-overlay-modal-context.mjs +23 -0
  425. package/build-module/utils/create-overlay-modal-context.mjs.map +7 -0
  426. package/build-module/utils/create-overlay-title-validation.mjs +75 -0
  427. package/build-module/utils/create-overlay-title-validation.mjs.map +7 -0
  428. package/build-module/utils/render-portal-with-children.mjs +12 -0
  429. package/build-module/utils/render-portal-with-children.mjs.map +7 -0
  430. package/build-module/utils/use-deprioritized-initial-focus.mjs +9 -9
  431. package/build-module/utils/use-deprioritized-initial-focus.mjs.map +2 -2
  432. package/build-module/utils/use-overlay-scroll-state-attributes.mjs +114 -0
  433. package/build-module/utils/use-overlay-scroll-state-attributes.mjs.map +7 -0
  434. package/build-module/utils/use-schedule-validation.mjs +34 -0
  435. package/build-module/utils/use-schedule-validation.mjs.map +7 -0
  436. package/build-module/visually-hidden/visually-hidden.mjs +5 -1
  437. package/build-module/visually-hidden/visually-hidden.mjs.map +2 -2
  438. package/build-types/alert-dialog/index.d.ts +1 -0
  439. package/build-types/alert-dialog/index.d.ts.map +1 -1
  440. package/build-types/alert-dialog/popup.d.ts.map +1 -1
  441. package/build-types/alert-dialog/portal.d.ts +9 -0
  442. package/build-types/alert-dialog/portal.d.ts.map +1 -0
  443. package/build-types/alert-dialog/stories/index.story.d.ts +29 -1
  444. package/build-types/alert-dialog/stories/index.story.d.ts.map +1 -1
  445. package/build-types/alert-dialog/types.d.ts +27 -1
  446. package/build-types/alert-dialog/types.d.ts.map +1 -1
  447. package/build-types/badge/badge.d.ts.map +1 -1
  448. package/build-types/badge/stories/index.story.d.ts.map +1 -1
  449. package/build-types/card/stories/index.story.d.ts.map +1 -1
  450. package/build-types/card/title.d.ts.map +1 -1
  451. package/build-types/collapsible/panel.d.ts +2 -1
  452. package/build-types/collapsible/panel.d.ts.map +1 -1
  453. package/build-types/collapsible/root.d.ts +2 -1
  454. package/build-types/collapsible/root.d.ts.map +1 -1
  455. package/build-types/collapsible/stories/index.story.d.ts.map +1 -1
  456. package/build-types/collapsible/trigger.d.ts +2 -1
  457. package/build-types/collapsible/trigger.d.ts.map +1 -1
  458. package/build-types/collapsible-card/content.d.ts.map +1 -1
  459. package/build-types/collapsible-card/header.d.ts.map +1 -1
  460. package/build-types/collapsible-card/stories/index.story.d.ts.map +1 -1
  461. package/build-types/dialog/content.d.ts +17 -0
  462. package/build-types/dialog/content.d.ts.map +1 -0
  463. package/build-types/dialog/context.d.ts +11 -16
  464. package/build-types/dialog/context.d.ts.map +1 -1
  465. package/build-types/dialog/description.d.ts +9 -0
  466. package/build-types/dialog/description.d.ts.map +1 -0
  467. package/build-types/dialog/footer.d.ts +8 -1
  468. package/build-types/dialog/footer.d.ts.map +1 -1
  469. package/build-types/dialog/header.d.ts +8 -1
  470. package/build-types/dialog/header.d.ts.map +1 -1
  471. package/build-types/dialog/index.d.ts +4 -1
  472. package/build-types/dialog/index.d.ts.map +1 -1
  473. package/build-types/dialog/popup.d.ts +3 -0
  474. package/build-types/dialog/popup.d.ts.map +1 -1
  475. package/build-types/dialog/portal.d.ts +10 -0
  476. package/build-types/dialog/portal.d.ts.map +1 -0
  477. package/build-types/dialog/root.d.ts +14 -4
  478. package/build-types/dialog/root.d.ts.map +1 -1
  479. package/build-types/dialog/stories/index.story.d.ts +37 -6
  480. package/build-types/dialog/stories/index.story.d.ts.map +1 -1
  481. package/build-types/dialog/title.d.ts +12 -2
  482. package/build-types/dialog/title.d.ts.map +1 -1
  483. package/build-types/dialog/types.d.ts +66 -6
  484. package/build-types/dialog/types.d.ts.map +1 -1
  485. package/build-types/drawer/action.d.ts +8 -0
  486. package/build-types/drawer/action.d.ts.map +1 -0
  487. package/build-types/drawer/close-icon.d.ts +8 -0
  488. package/build-types/drawer/close-icon.d.ts.map +1 -0
  489. package/build-types/drawer/content.d.ts +21 -0
  490. package/build-types/drawer/content.d.ts.map +1 -0
  491. package/build-types/drawer/context.d.ts +20 -0
  492. package/build-types/drawer/context.d.ts.map +1 -0
  493. package/build-types/drawer/description.d.ts +9 -0
  494. package/build-types/drawer/description.d.ts.map +1 -0
  495. package/build-types/drawer/footer.d.ts +15 -0
  496. package/build-types/drawer/footer.d.ts.map +1 -0
  497. package/build-types/drawer/header.d.ts +15 -0
  498. package/build-types/drawer/header.d.ts.map +1 -0
  499. package/build-types/drawer/index.d.ts +13 -0
  500. package/build-types/drawer/index.d.ts.map +1 -0
  501. package/build-types/drawer/popup.d.ts +16 -0
  502. package/build-types/drawer/popup.d.ts.map +1 -0
  503. package/build-types/drawer/portal.d.ts +10 -0
  504. package/build-types/drawer/portal.d.ts.map +1 -0
  505. package/build-types/drawer/root.d.ts +21 -0
  506. package/build-types/drawer/root.d.ts.map +1 -0
  507. package/build-types/drawer/stories/index.story.d.ts +63 -0
  508. package/build-types/drawer/stories/index.story.d.ts.map +1 -0
  509. package/build-types/drawer/test/index.test.d.ts +2 -0
  510. package/build-types/drawer/test/index.test.d.ts.map +1 -0
  511. package/build-types/drawer/title.d.ts +22 -0
  512. package/build-types/drawer/title.d.ts.map +1 -0
  513. package/build-types/drawer/trigger.d.ts +7 -0
  514. package/build-types/drawer/trigger.d.ts.map +1 -0
  515. package/build-types/drawer/types.d.ts +146 -0
  516. package/build-types/drawer/types.d.ts.map +1 -0
  517. package/build-types/empty-state/description.d.ts.map +1 -1
  518. package/build-types/empty-state/stories/index.story.d.ts +1 -1
  519. package/build-types/empty-state/stories/index.story.d.ts.map +1 -1
  520. package/build-types/empty-state/title.d.ts.map +1 -1
  521. package/build-types/form/input-control/stories/index.story.d.ts +1 -1
  522. package/build-types/form/input-control/stories/index.story.d.ts.map +1 -1
  523. package/build-types/form/primitives/autocomplete/clear.d.ts +13 -0
  524. package/build-types/form/primitives/autocomplete/clear.d.ts.map +1 -0
  525. package/build-types/form/primitives/autocomplete/collection.d.ts +3 -0
  526. package/build-types/form/primitives/autocomplete/collection.d.ts.map +1 -0
  527. package/build-types/form/primitives/autocomplete/empty.d.ts +10 -0
  528. package/build-types/form/primitives/autocomplete/empty.d.ts.map +1 -0
  529. package/build-types/form/primitives/autocomplete/index.d.ts +13 -0
  530. package/build-types/form/primitives/autocomplete/index.d.ts.map +1 -0
  531. package/build-types/form/primitives/autocomplete/input-group.d.ts +16 -0
  532. package/build-types/form/primitives/autocomplete/input-group.d.ts.map +1 -0
  533. package/build-types/form/primitives/autocomplete/input.d.ts +3 -0
  534. package/build-types/form/primitives/autocomplete/input.d.ts.map +1 -0
  535. package/build-types/form/primitives/autocomplete/item.d.ts +10 -0
  536. package/build-types/form/primitives/autocomplete/item.d.ts.map +1 -0
  537. package/build-types/form/primitives/autocomplete/list-body.d.ts +13 -0
  538. package/build-types/form/primitives/autocomplete/list-body.d.ts.map +1 -0
  539. package/build-types/form/primitives/autocomplete/list.d.ts +11 -0
  540. package/build-types/form/primitives/autocomplete/list.d.ts.map +1 -0
  541. package/build-types/form/primitives/autocomplete/popup.d.ts +11 -0
  542. package/build-types/form/primitives/autocomplete/popup.d.ts.map +1 -0
  543. package/build-types/form/primitives/autocomplete/portal.d.ts +8 -0
  544. package/build-types/form/primitives/autocomplete/portal.d.ts.map +1 -0
  545. package/build-types/form/primitives/autocomplete/root.d.ts +8 -0
  546. package/build-types/form/primitives/autocomplete/root.d.ts.map +1 -0
  547. package/build-types/form/primitives/autocomplete/stories/fixtures.d.ts +8 -0
  548. package/build-types/form/primitives/autocomplete/stories/fixtures.d.ts.map +1 -0
  549. package/build-types/form/primitives/autocomplete/stories/index.story.d.ts +41 -0
  550. package/build-types/form/primitives/autocomplete/stories/index.story.d.ts.map +1 -0
  551. package/build-types/form/primitives/autocomplete/test/index.test.d.ts +2 -0
  552. package/build-types/form/primitives/autocomplete/test/index.test.d.ts.map +1 -0
  553. package/build-types/form/primitives/autocomplete/types.d.ts +44 -0
  554. package/build-types/form/primitives/autocomplete/types.d.ts.map +1 -0
  555. package/build-types/form/primitives/autocomplete/value.d.ts +3 -0
  556. package/build-types/form/primitives/autocomplete/value.d.ts.map +1 -0
  557. package/build-types/form/primitives/field/description.d.ts +2 -1
  558. package/build-types/form/primitives/field/description.d.ts.map +1 -1
  559. package/build-types/form/primitives/field/details.d.ts +2 -1
  560. package/build-types/form/primitives/field/details.d.ts.map +1 -1
  561. package/build-types/form/primitives/field/label.d.ts +2 -1
  562. package/build-types/form/primitives/field/label.d.ts.map +1 -1
  563. package/build-types/form/primitives/field/stories/index.story.d.ts +1 -1
  564. package/build-types/form/primitives/field/stories/index.story.d.ts.map +1 -1
  565. package/build-types/form/primitives/fieldset/description.d.ts +2 -1
  566. package/build-types/form/primitives/fieldset/description.d.ts.map +1 -1
  567. package/build-types/form/primitives/fieldset/details.d.ts +2 -1
  568. package/build-types/form/primitives/fieldset/details.d.ts.map +1 -1
  569. package/build-types/form/primitives/fieldset/legend.d.ts +2 -1
  570. package/build-types/form/primitives/fieldset/legend.d.ts.map +1 -1
  571. package/build-types/form/primitives/fieldset/root.d.ts +2 -1
  572. package/build-types/form/primitives/fieldset/root.d.ts.map +1 -1
  573. package/build-types/form/primitives/fieldset/stories/index.story.d.ts +1 -1
  574. package/build-types/form/primitives/fieldset/stories/index.story.d.ts.map +1 -1
  575. package/build-types/form/primitives/index.d.ts +1 -0
  576. package/build-types/form/primitives/index.d.ts.map +1 -1
  577. package/build-types/form/primitives/input/stories/index.story.d.ts +1 -1
  578. package/build-types/form/primitives/input/stories/index.story.d.ts.map +1 -1
  579. package/build-types/form/primitives/input-layout/stories/index.story.d.ts +1 -1
  580. package/build-types/form/primitives/input-layout/stories/index.story.d.ts.map +1 -1
  581. package/build-types/form/primitives/select/index.d.ts +1 -0
  582. package/build-types/form/primitives/select/index.d.ts.map +1 -1
  583. package/build-types/form/primitives/select/item.d.ts +6 -2
  584. package/build-types/form/primitives/select/item.d.ts.map +1 -1
  585. package/build-types/form/primitives/select/popup.d.ts +10 -1
  586. package/build-types/form/primitives/select/popup.d.ts.map +1 -1
  587. package/build-types/form/primitives/select/portal.d.ts +8 -0
  588. package/build-types/form/primitives/select/portal.d.ts.map +1 -0
  589. package/build-types/form/primitives/select/stories/index.story.d.ts +14 -6
  590. package/build-types/form/primitives/select/stories/index.story.d.ts.map +1 -1
  591. package/build-types/form/primitives/select/trigger.d.ts +12 -2
  592. package/build-types/form/primitives/select/trigger.d.ts.map +1 -1
  593. package/build-types/form/primitives/select/types.d.ts +18 -3
  594. package/build-types/form/primitives/select/types.d.ts.map +1 -1
  595. package/build-types/index.d.ts +1 -0
  596. package/build-types/index.d.ts.map +1 -1
  597. package/build-types/link/link.d.ts.map +1 -1
  598. package/build-types/link/stories/index.story.d.ts +2 -3
  599. package/build-types/link/stories/index.story.d.ts.map +1 -1
  600. package/build-types/link/types.d.ts +1 -2
  601. package/build-types/link/types.d.ts.map +1 -1
  602. package/build-types/notice/action-link.d.ts.map +1 -1
  603. package/build-types/popover/context.d.ts +6 -13
  604. package/build-types/popover/context.d.ts.map +1 -1
  605. package/build-types/popover/description.d.ts +0 -1
  606. package/build-types/popover/description.d.ts.map +1 -1
  607. package/build-types/popover/index.d.ts +2 -1
  608. package/build-types/popover/index.d.ts.map +1 -1
  609. package/build-types/popover/popup.d.ts +3 -2
  610. package/build-types/popover/popup.d.ts.map +1 -1
  611. package/build-types/popover/portal.d.ts +9 -0
  612. package/build-types/popover/portal.d.ts.map +1 -0
  613. package/build-types/popover/root.d.ts +2 -2
  614. package/build-types/popover/stories/index.story.d.ts +24 -16
  615. package/build-types/popover/stories/index.story.d.ts.map +1 -1
  616. package/build-types/popover/title.d.ts.map +1 -1
  617. package/build-types/popover/types.d.ts +8 -15
  618. package/build-types/popover/types.d.ts.map +1 -1
  619. package/build-types/stack/stories/index.story.d.ts.map +1 -1
  620. package/build-types/tabs/context.d.ts.map +1 -1
  621. package/build-types/tabs/list.d.ts +2 -1
  622. package/build-types/tabs/list.d.ts.map +1 -1
  623. package/build-types/tabs/panel.d.ts +2 -1
  624. package/build-types/tabs/panel.d.ts.map +1 -1
  625. package/build-types/tabs/root.d.ts +2 -1
  626. package/build-types/tabs/root.d.ts.map +1 -1
  627. package/build-types/tabs/stories/index.story.d.ts +1 -1
  628. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  629. package/build-types/tabs/tab.d.ts +2 -1
  630. package/build-types/tabs/tab.d.ts.map +1 -1
  631. package/build-types/text/stories/index.story.d.ts.map +1 -1
  632. package/build-types/tooltip/index.d.ts +2 -1
  633. package/build-types/tooltip/index.d.ts.map +1 -1
  634. package/build-types/tooltip/popup.d.ts.map +1 -1
  635. package/build-types/tooltip/portal.d.ts +8 -0
  636. package/build-types/tooltip/portal.d.ts.map +1 -0
  637. package/build-types/tooltip/provider.d.ts +1 -1
  638. package/build-types/tooltip/provider.d.ts.map +1 -1
  639. package/build-types/tooltip/root.d.ts +9 -8
  640. package/build-types/tooltip/root.d.ts.map +1 -1
  641. package/build-types/tooltip/stories/index.story.d.ts +18 -1
  642. package/build-types/tooltip/stories/index.story.d.ts.map +1 -1
  643. package/build-types/tooltip/stories/usage-guidelines.story.d.ts +21 -0
  644. package/build-types/tooltip/stories/usage-guidelines.story.d.ts.map +1 -0
  645. package/build-types/tooltip/trigger.d.ts.map +1 -1
  646. package/build-types/tooltip/types.d.ts +13 -5
  647. package/build-types/tooltip/types.d.ts.map +1 -1
  648. package/build-types/utils/create-overlay-modal-context.d.ts +14 -0
  649. package/build-types/utils/create-overlay-modal-context.d.ts.map +1 -0
  650. package/build-types/utils/create-overlay-title-validation.d.ts +15 -0
  651. package/build-types/utils/create-overlay-title-validation.d.ts.map +1 -0
  652. package/build-types/utils/render-portal-with-children.d.ts +16 -0
  653. package/build-types/utils/render-portal-with-children.d.ts.map +1 -0
  654. package/build-types/utils/types.d.ts +6 -2
  655. package/build-types/utils/types.d.ts.map +1 -1
  656. package/build-types/utils/use-deprioritized-initial-focus.d.ts +9 -8
  657. package/build-types/utils/use-deprioritized-initial-focus.d.ts.map +1 -1
  658. package/build-types/utils/use-overlay-scroll-state-attributes.d.ts +85 -0
  659. package/build-types/utils/use-overlay-scroll-state-attributes.d.ts.map +1 -0
  660. package/build-types/utils/use-schedule-validation.d.ts +13 -0
  661. package/build-types/utils/use-schedule-validation.d.ts.map +1 -0
  662. package/build-types/visually-hidden/stories/index.story.d.ts +7 -0
  663. package/build-types/visually-hidden/stories/index.story.d.ts.map +1 -1
  664. package/build-types/visually-hidden/visually-hidden.d.ts +18 -0
  665. package/build-types/visually-hidden/visually-hidden.d.ts.map +1 -1
  666. package/package.json +12 -12
  667. package/src/alert-dialog/index.ts +1 -0
  668. package/src/alert-dialog/popup.tsx +114 -45
  669. package/src/alert-dialog/portal.tsx +17 -0
  670. package/src/alert-dialog/stories/index.story.tsx +123 -3
  671. package/src/alert-dialog/style.module.css +13 -4
  672. package/src/alert-dialog/test/index.test.tsx +380 -0
  673. package/src/alert-dialog/types.ts +33 -1
  674. package/src/badge/badge.tsx +11 -14
  675. package/src/badge/stories/choosing-intent.story.tsx +1 -1
  676. package/src/badge/stories/index.story.tsx +1 -0
  677. package/src/badge/style.module.css +0 -4
  678. package/src/button/style.module.css +4 -4
  679. package/src/card/stories/index.story.tsx +5 -4
  680. package/src/card/style.module.css +0 -4
  681. package/src/card/test/index.test.tsx +17 -0
  682. package/src/card/title.tsx +6 -5
  683. package/src/collapsible/stories/index.story.tsx +1 -0
  684. package/src/collapsible-card/content.tsx +12 -1
  685. package/src/collapsible-card/header.tsx +2 -0
  686. package/src/collapsible-card/stories/index.story.tsx +6 -5
  687. package/src/collapsible-card/style.module.css +16 -4
  688. package/src/dialog/content.tsx +47 -0
  689. package/src/dialog/context.tsx +14 -98
  690. package/src/dialog/description.tsx +27 -0
  691. package/src/dialog/footer.tsx +10 -2
  692. package/src/dialog/header.tsx +10 -2
  693. package/src/dialog/index.ts +16 -1
  694. package/src/dialog/popup.tsx +28 -7
  695. package/src/dialog/portal.tsx +18 -0
  696. package/src/dialog/root.tsx +22 -5
  697. package/src/dialog/stories/index.story.tsx +224 -47
  698. package/src/dialog/style.module.css +78 -24
  699. package/src/dialog/test/index.test.tsx +907 -148
  700. package/src/dialog/title.tsx +27 -13
  701. package/src/dialog/types.ts +71 -5
  702. package/src/drawer/action.tsx +28 -0
  703. package/src/drawer/close-icon.tsx +33 -0
  704. package/src/drawer/content.tsx +50 -0
  705. package/src/drawer/context.tsx +29 -0
  706. package/src/drawer/description.tsx +25 -0
  707. package/src/drawer/footer.tsx +34 -0
  708. package/src/drawer/header.tsx +34 -0
  709. package/src/drawer/index.ts +25 -0
  710. package/src/drawer/popup.tsx +100 -0
  711. package/src/drawer/portal.tsx +18 -0
  712. package/src/drawer/root.tsx +41 -0
  713. package/src/drawer/stories/index.story.tsx +543 -0
  714. package/src/drawer/style.module.css +324 -0
  715. package/src/drawer/test/index.test.tsx +1097 -0
  716. package/src/drawer/title.tsx +53 -0
  717. package/src/drawer/trigger.tsx +14 -0
  718. package/src/drawer/types.ts +174 -0
  719. package/src/empty-state/description.tsx +6 -2
  720. package/src/empty-state/stories/index.story.tsx +2 -1
  721. package/src/empty-state/style.module.css +1 -1
  722. package/src/empty-state/test/description.test.tsx +13 -0
  723. package/src/empty-state/test/title.test.tsx +13 -0
  724. package/src/empty-state/title.tsx +9 -2
  725. package/src/form/input-control/stories/index.story.tsx +4 -1
  726. package/src/form/primitives/autocomplete/clear.tsx +35 -0
  727. package/src/form/primitives/autocomplete/collection.tsx +13 -0
  728. package/src/form/primitives/autocomplete/empty.tsx +17 -0
  729. package/src/form/primitives/autocomplete/index.ts +12 -0
  730. package/src/form/primitives/autocomplete/input-group.tsx +16 -0
  731. package/src/form/primitives/autocomplete/input.tsx +20 -0
  732. package/src/form/primitives/autocomplete/item.tsx +24 -0
  733. package/src/form/primitives/autocomplete/list-body.tsx +23 -0
  734. package/src/form/primitives/autocomplete/list.tsx +17 -0
  735. package/src/form/primitives/autocomplete/popup.tsx +42 -0
  736. package/src/form/primitives/autocomplete/portal.tsx +16 -0
  737. package/src/form/primitives/autocomplete/root.tsx +11 -0
  738. package/src/form/primitives/autocomplete/stories/fixtures.ts +35 -0
  739. package/src/form/primitives/autocomplete/stories/index.story.tsx +437 -0
  740. package/src/form/primitives/autocomplete/style.module.css +7 -0
  741. package/src/form/primitives/autocomplete/test/index.test.tsx +162 -0
  742. package/src/form/primitives/autocomplete/types.ts +74 -0
  743. package/src/form/primitives/autocomplete/value.tsx +6 -0
  744. package/src/form/primitives/field/details.tsx +4 -2
  745. package/src/form/primitives/field/label.tsx +9 -5
  746. package/src/form/primitives/field/root.tsx +2 -2
  747. package/src/form/primitives/field/stories/index.story.tsx +1 -1
  748. package/src/form/primitives/field/test/index.test.tsx +11 -0
  749. package/src/form/primitives/fieldset/legend.tsx +9 -4
  750. package/src/form/primitives/fieldset/stories/index.story.tsx +1 -1
  751. package/src/form/primitives/fieldset/test/index.test.tsx +22 -0
  752. package/src/form/primitives/index.ts +1 -0
  753. package/src/form/primitives/input/stories/index.story.tsx +2 -1
  754. package/src/form/primitives/input-layout/stories/index.story.tsx +2 -1
  755. package/src/form/primitives/input-layout/style.module.css +3 -3
  756. package/src/form/primitives/select/index.ts +1 -0
  757. package/src/form/primitives/select/item.tsx +0 -1
  758. package/src/form/primitives/select/popup.tsx +34 -34
  759. package/src/form/primitives/select/portal.tsx +16 -0
  760. package/src/form/primitives/select/stories/index.story.tsx +21 -7
  761. package/src/form/primitives/select/test/index.test.tsx +64 -1
  762. package/src/form/primitives/select/types.ts +21 -4
  763. package/src/index.ts +1 -0
  764. package/src/link/link.tsx +12 -26
  765. package/src/link/stories/index.story.tsx +6 -11
  766. package/src/link/style.module.css +6 -18
  767. package/src/link/test/index.test.tsx +31 -27
  768. package/src/link/types.ts +1 -2
  769. package/src/notice/action-link.tsx +7 -4
  770. package/src/notice/style.module.css +6 -6
  771. package/src/popover/context.tsx +6 -89
  772. package/src/popover/description.tsx +2 -11
  773. package/src/popover/index.ts +2 -1
  774. package/src/popover/popup.tsx +17 -15
  775. package/src/popover/portal.tsx +17 -0
  776. package/src/popover/root.tsx +2 -2
  777. package/src/popover/stories/index.story.tsx +57 -26
  778. package/src/popover/style.module.css +36 -7
  779. package/src/popover/test/index.test.tsx +189 -74
  780. package/src/popover/title.tsx +10 -9
  781. package/src/popover/types.ts +10 -15
  782. package/src/stack/stories/index.story.tsx +1 -0
  783. package/src/tabs/context.tsx +14 -34
  784. package/src/tabs/list.tsx +0 -1
  785. package/src/tabs/panel.tsx +7 -2
  786. package/src/tabs/stories/index.story.tsx +2 -1
  787. package/src/tabs/style.module.css +2 -19
  788. package/src/tabs/test/index.test.tsx +7 -3
  789. package/src/text/stories/index.story.tsx +1 -0
  790. package/src/text/style.module.css +49 -49
  791. package/src/text/text.tsx +2 -2
  792. package/src/tooltip/index.ts +2 -1
  793. package/src/tooltip/popup.tsx +24 -27
  794. package/src/tooltip/portal.tsx +16 -0
  795. package/src/tooltip/provider.tsx +3 -3
  796. package/src/tooltip/root.tsx +11 -10
  797. package/src/tooltip/stories/index.story.tsx +39 -1
  798. package/src/tooltip/stories/usage-guidelines.mdx +91 -0
  799. package/src/tooltip/stories/usage-guidelines.story.tsx +123 -0
  800. package/src/tooltip/style.module.css +14 -2
  801. package/src/tooltip/test/index.test.tsx +67 -0
  802. package/src/tooltip/trigger.tsx +3 -7
  803. package/src/tooltip/types.ts +16 -5
  804. package/src/utils/create-overlay-modal-context.tsx +34 -0
  805. package/src/utils/create-overlay-title-validation.tsx +116 -0
  806. package/src/utils/css/field.module.css +10 -10
  807. package/src/utils/css/global-css-defense.module.css +1 -1
  808. package/src/utils/css/item-popup.module.css +11 -13
  809. package/src/utils/css/overlay-chrome.module.css +222 -0
  810. package/src/utils/render-portal-with-children.ts +27 -0
  811. package/src/utils/test/use-deprioritized-initial-focus.test.tsx +3 -3
  812. package/src/utils/types.ts +7 -2
  813. package/src/utils/use-deprioritized-initial-focus.ts +23 -17
  814. package/src/utils/use-overlay-scroll-state-attributes.ts +272 -0
  815. package/src/utils/use-schedule-validation.ts +45 -0
  816. package/src/visually-hidden/stories/index.story.tsx +26 -0
  817. package/src/visually-hidden/visually-hidden.tsx +23 -1
  818. package/build/types/css-modules.d.cjs +0 -2
  819. package/build/types/react.d.cjs +0 -5
  820. package/build/types/react.d.cjs.map +0 -7
  821. package/build-module/types/css-modules.d.mjs +0 -1
  822. package/build-module/types/react.d.mjs +0 -3
  823. package/build-module/types/react.d.mjs.map +0 -7
  824. package/src/types/css-modules.d.ts +0 -4
  825. package/src/types/react.d.ts +0 -7
  826. /package/build-module/{types/css-modules.d.mjs.map → drawer/types.mjs.map} +0 -0
  827. /package/{build/types/css-modules.d.cjs.map → build-module/form/primitives/autocomplete/types.mjs.map} +0 -0
@@ -16,6 +16,24 @@ describe( 'Link', () => {
16
16
  expect( ref.current ).toBeInstanceOf( HTMLAnchorElement );
17
17
  } );
18
18
 
19
+ it( 'calls onClick when clicked (often used for analytics tracking)', async () => {
20
+ const user = userEvent.setup();
21
+ const onClick = jest.fn(
22
+ ( event: React.MouseEvent< HTMLAnchorElement > ) =>
23
+ event.preventDefault()
24
+ );
25
+
26
+ render(
27
+ <Link href="/page" onClick={ onClick }>
28
+ Go to page
29
+ </Link>
30
+ );
31
+
32
+ await user.click( screen.getByRole( 'link', { name: 'Go to page' } ) );
33
+
34
+ expect( onClick ).toHaveBeenCalledTimes( 1 );
35
+ } );
36
+
19
37
  describe( 'openInNewTab', () => {
20
38
  it( 'sets target="_blank" when true', () => {
21
39
  render(
@@ -47,47 +65,33 @@ describe( 'Link', () => {
47
65
 
48
66
  expect(
49
67
  screen.getByLabelText( '(opens in a new tab)' )
50
- ).toBeInTheDocument();
68
+ ).toBeVisible();
51
69
  } );
52
70
 
53
- it( 'prevents default for internal anchor links', async () => {
54
- const user = userEvent.setup();
55
- const onClick = jest.fn();
56
-
71
+ it( 'keeps the link text on the anchor element', () => {
57
72
  render(
58
- <Link href="#section" openInNewTab onClick={ onClick }>
59
- Jump
73
+ <Link href="https://example.com" openInNewTab>
74
+ External
60
75
  </Link>
61
76
  );
62
77
 
63
- await user.click( screen.getByRole( 'link' ) );
64
-
65
- expect( onClick ).toHaveBeenCalledTimes( 1 );
66
- expect( onClick.mock.calls[ 0 ][ 0 ].defaultPrevented ).toBe(
67
- true
78
+ expect( screen.getByText( 'External' ) ).toBe(
79
+ screen.getByRole( 'link' )
68
80
  );
69
81
  } );
70
82
 
71
- it( 'does not prevent default for external links', async () => {
72
- const user = userEvent.setup();
73
- const onClick = jest.fn();
74
-
83
+ it( 'includes the new tab notice in the link name', () => {
75
84
  render(
76
- <Link
77
- href="https://example.com"
78
- openInNewTab
79
- onClick={ onClick }
80
- >
85
+ <Link href="https://example.com" openInNewTab>
81
86
  External
82
87
  </Link>
83
88
  );
84
89
 
85
- await user.click( screen.getByRole( 'link' ) );
86
-
87
- expect( onClick ).toHaveBeenCalledTimes( 1 );
88
- expect( onClick.mock.calls[ 0 ][ 0 ].defaultPrevented ).toBe(
89
- false
90
- );
90
+ expect(
91
+ screen.getByRole( 'link', {
92
+ name: 'External (opens in a new tab)',
93
+ } )
94
+ ).toBeVisible();
91
95
  } );
92
96
  } );
93
97
  } );
package/src/link/types.ts CHANGED
@@ -22,8 +22,7 @@ export interface LinkProps extends Omit< ComponentProps< 'a' >, 'target' > {
22
22
 
23
23
  /**
24
24
  * Whether to open the link in a new browser tab.
25
- * When true, sets `target="_blank"`, appends a visual arrow indicator,
26
- * and prevents navigation for internal anchors (`#`-prefixed hrefs).
25
+ * When true, sets `target="_blank"` and appends a visual arrow indicator.
27
26
  *
28
27
  * @default false
29
28
  */
@@ -1,6 +1,7 @@
1
1
  import clsx from 'clsx';
2
2
  import { forwardRef } from '@wordpress/element';
3
3
  import { Link } from '../link';
4
+ import { Text } from '../text';
4
5
  import type { ActionLinkProps } from './types';
5
6
  import styles from './style.module.css';
6
7
 
@@ -8,14 +9,16 @@ import styles from './style.module.css';
8
9
  * An action link for use within Notice.Actions.
9
10
  */
10
11
  export const ActionLink = forwardRef< HTMLAnchorElement, ActionLinkProps >(
11
- function NoticeActionLink( { className, ...props }, ref ) {
12
+ function NoticeActionLink( { className, render, ...props }, ref ) {
12
13
  return (
13
- <Link
14
+ <Text
14
15
  ref={ ref }
15
16
  className={ clsx( styles[ 'action-link' ], className ) }
16
17
  { ...props }
17
- tone="neutral"
18
- variant="default"
18
+ variant="body-md"
19
+ render={
20
+ <Link tone="neutral" variant="default" render={ render } />
21
+ }
19
22
  />
20
23
  );
21
24
  }
@@ -3,7 +3,7 @@
3
3
  @layer wp-ui-components {
4
4
  .notice {
5
5
  --icon-height: 24px;
6
- --text-vertical-padding: calc((var(--icon-height) - var(--wpds-font-line-height-sm)) / 2);
6
+ --text-vertical-padding: calc((var(--icon-height) - var(--wpds-typography-line-height-sm)) / 2);
7
7
 
8
8
  --wp-ui-notice-background-color: var(--wpds-color-bg-surface-neutral-weak);
9
9
  --wp-ui-notice-border-color: var(--wpds-color-stroke-surface-neutral);
@@ -64,11 +64,6 @@
64
64
 
65
65
  .action-link {
66
66
  flex-shrink: 0;
67
- font-family: var(--wpds-font-family-body);
68
- font-size: var(--wpds-font-size-md);
69
- font-weight: var(--wpds-font-weight-regular);
70
- line-height: var(--wpds-font-line-height-sm);
71
- margin-block: auto;
72
67
 
73
68
  /* Add more horizontal space when following another action link/button */
74
69
  &:not(:first-child) {
@@ -125,6 +120,11 @@
125
120
  }
126
121
 
127
122
  @layer wp-ui-compositions {
123
+ /* Override `Text` margin */
124
+ .action-link {
125
+ margin-block: auto;
126
+ }
127
+
128
128
  /* Add partial transparency to CloseIcon and outline/minimal ActionButton
129
129
  * for a better look over tinted backgrounds */
130
130
  .close-icon,
@@ -1,100 +1,17 @@
1
- import {
2
- createContext,
3
- useCallback,
4
- useContext,
5
- useEffect,
6
- useMemo,
7
- useRef,
8
- } from '@wordpress/element';
1
+ import { createOverlayTitleValidation } from '../utils/create-overlay-title-validation';
9
2
 
10
- /**
11
- * Whether validation is enabled. This is a build-time constant that allows
12
- * bundlers to tree-shake all validation code in production builds.
13
- */
14
- const VALIDATION_ENABLED = process.env.NODE_ENV !== 'production';
15
-
16
- type PopoverValidationContextType = {
17
- registerTitle: ( element: HTMLElement | null ) => void;
18
- };
19
-
20
- const PopoverValidationContext = VALIDATION_ENABLED
21
- ? createContext< PopoverValidationContextType | null >( null )
22
- : ( null as unknown as React.Context< PopoverValidationContextType | null > );
23
-
24
- function usePopoverValidationContextDev() {
25
- return useContext( PopoverValidationContext );
26
- }
27
-
28
- function usePopoverValidationContextProd() {
29
- return null;
30
- }
3
+ const popoverTitleValidation = createOverlayTitleValidation( 'Popover' );
31
4
 
32
5
  /**
33
6
  * Hook to access the popover validation context.
34
7
  * Returns null in production or if not within a Popover.Popup.
35
8
  */
36
- export const usePopoverValidationContext = VALIDATION_ENABLED
37
- ? usePopoverValidationContextDev
38
- : usePopoverValidationContextProd;
39
-
40
- /**
41
- * Development-only provider that tracks whether Popover.Title is rendered.
42
- */
43
- function PopoverValidationProviderDev( {
44
- children,
45
- }: {
46
- children: React.ReactNode;
47
- } ) {
48
- const titleElementRef = useRef< HTMLElement | null >( null );
49
-
50
- const registerTitle = useCallback( ( element: HTMLElement | null ) => {
51
- titleElementRef.current = element;
52
- }, [] );
53
-
54
- const contextValue = useMemo(
55
- () => ( { registerTitle } ),
56
- [ registerTitle ]
57
- );
58
-
59
- useEffect( () => {
60
- const titleElement = titleElementRef.current;
61
-
62
- if ( ! titleElement ) {
63
- throw new Error(
64
- 'Popover: Missing <Popover.Title>. ' +
65
- 'For accessibility, every popover requires a title. ' +
66
- 'If needed, the title can be visually hidden but must not be omitted.'
67
- );
68
- }
69
-
70
- const textContent = titleElement.textContent?.trim();
71
- if ( ! textContent ) {
72
- throw new Error(
73
- 'Popover: <Popover.Title> cannot be empty. ' +
74
- 'Provide meaningful text content for the popover title.'
75
- );
76
- }
77
- }, [] );
78
-
79
- return (
80
- <PopoverValidationContext.Provider value={ contextValue }>
81
- { children }
82
- </PopoverValidationContext.Provider>
83
- );
84
- }
85
-
86
- function PopoverValidationProviderProd( {
87
- children,
88
- }: {
89
- children: React.ReactNode;
90
- } ) {
91
- return <>{ children }</>;
92
- }
9
+ export const usePopoverValidationContext =
10
+ popoverTitleValidation.useValidationContext;
93
11
 
94
12
  /**
95
13
  * Provider component that validates Popover.Title presence in development mode.
96
14
  * In production, this component is a no-op and just renders children.
97
15
  */
98
- export const PopoverValidationProvider = VALIDATION_ENABLED
99
- ? PopoverValidationProviderDev
100
- : PopoverValidationProviderProd;
16
+ export const PopoverValidationProvider =
17
+ popoverTitleValidation.ValidationProvider;
@@ -1,29 +1,20 @@
1
1
  import { Popover as _Popover } from '@base-ui/react/popover';
2
- import clsx from 'clsx';
3
2
  import { forwardRef } from '@wordpress/element';
4
3
  import { Text } from '../text';
5
- import styles from './style.module.css';
6
4
  import type { DescriptionProps } from './types';
7
5
 
8
6
  /**
9
7
  * Renders an optional paragraph that describes the popover content.
10
8
  *
11
9
  * The rendered element is linked to the popup via `aria-describedby`.
12
- * Uses the `body-md` text variant by default.
13
10
  */
14
11
  const Description = forwardRef< HTMLParagraphElement, DescriptionProps >(
15
- function PopoverDescription(
16
- { className, children, render, ...props },
17
- ref
18
- ) {
12
+ function PopoverDescription( { children, ...props }, ref ) {
19
13
  return (
20
14
  <Text
21
15
  ref={ ref }
22
16
  variant="body-md"
23
- render={
24
- <_Popover.Description render={ render } { ...props } />
25
- }
26
- className={ clsx( styles.description, className ) }
17
+ render={ <_Popover.Description { ...props } /> }
27
18
  >
28
19
  { children }
29
20
  </Text>
@@ -2,8 +2,9 @@ import { Arrow } from './arrow';
2
2
  import { Close } from './close';
3
3
  import { Description } from './description';
4
4
  import { Popup } from './popup';
5
+ import { Portal } from './portal';
5
6
  import { Root } from './root';
6
7
  import { Title } from './title';
7
8
  import { Trigger } from './trigger';
8
9
 
9
- export { Arrow, Close, Description, Popup, Root, Title, Trigger };
10
+ export { Arrow, Close, Description, Portal, Popup, Root, Title, Trigger };
@@ -9,7 +9,9 @@ import {
9
9
  import { unlock } from '../lock-unlock';
10
10
  import resetStyles from '../utils/css/resets.module.css';
11
11
  import { useDeprioritizedInitialFocus } from '../utils/use-deprioritized-initial-focus';
12
+ import { renderPortalWithChildren } from '../utils/render-portal-with-children';
12
13
  import { PopoverValidationProvider } from './context';
14
+ import { Portal } from './portal';
13
15
  import styles from './style.module.css';
14
16
  import type { PopupProps } from './types';
15
17
 
@@ -22,8 +24,9 @@ const CLOSE_ATTR = 'data-wp-ui-popover-close';
22
24
  * Renders the floating popup container for the popover content.
23
25
  *
24
26
  * Handles portal rendering, positioning relative to the anchor, collision
25
- * avoidance, focus management, and optional backdrop. Supply a `container`
26
- * element for cross-document scenarios such as iframes.
27
+ * avoidance, focus management, and optional backdrop. Use
28
+ * `portal={ <Popover.Portal container={ ... } /> }` for cross-document
29
+ * scenarios such as iframes.
27
30
  */
28
31
  const Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(
29
32
  {
@@ -38,13 +41,12 @@ const Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(
38
41
  collisionAvoidance,
39
42
  collisionBoundary,
40
43
  collisionPadding,
41
- container,
44
+ portal,
42
45
  finalFocus,
43
46
  initialFocus,
44
47
  side = 'bottom',
45
48
  sideOffset = 8,
46
49
  sticky,
47
- style,
48
50
  variant = 'default',
49
51
  ...props
50
52
  },
@@ -52,7 +54,7 @@ const Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(
52
54
  ) {
53
55
  const { resolvedInitialFocus, popupRef } = useDeprioritizedInitialFocus( {
54
56
  initialFocus,
55
- deprioritizedAttribute: CLOSE_ATTR,
57
+ deprioritizedAttributes: [ CLOSE_ATTR ],
56
58
  } );
57
59
  const mergedPopupRef = useMergeRefs( [ ref, popupRef ] );
58
60
 
@@ -72,19 +74,17 @@ const Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(
72
74
  side={ side }
73
75
  sideOffset={ sideOffset }
74
76
  sticky={ sticky }
75
- style={ style }
76
- className={ clsx(
77
- resetStyles[ 'box-sizing' ],
78
- styles.positioner,
79
- className
80
- ) }
77
+ className={ clsx( resetStyles[ 'box-sizing' ], styles.positioner ) }
81
78
  >
82
79
  <ThemeProvider>
83
80
  <_Popover.Popup
84
81
  ref={ mergedPopupRef }
85
82
  initialFocus={ resolvedInitialFocus }
86
83
  finalFocus={ finalFocus }
87
- className={ clsx( variant !== 'unstyled' && styles.popup ) }
84
+ className={ clsx(
85
+ variant !== 'unstyled' && styles.popup,
86
+ className
87
+ ) }
88
88
  { ...props }
89
89
  >
90
90
  <PopoverValidationProvider>
@@ -95,12 +95,14 @@ const Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(
95
95
  </_Popover.Positioner>
96
96
  );
97
97
 
98
- return (
99
- <_Popover.Portal container={ container }>
98
+ const portalChildren = (
99
+ <>
100
100
  { backdropElement }
101
101
  { positioner }
102
- </_Popover.Portal>
102
+ </>
103
103
  );
104
+
105
+ return renderPortalWithChildren( portal, <Portal />, portalChildren );
104
106
  } );
105
107
 
106
108
  export { Popup };
@@ -0,0 +1,17 @@
1
+ import { Popover as _Popover } from '@base-ui/react/popover';
2
+ import { forwardRef } from '@wordpress/element';
3
+ import type { PortalProps } from './types';
4
+
5
+ /**
6
+ * Root element that portals `Popover` floating content. Pass to
7
+ * `Popover.Popup`'s `portal` prop (for example `container` for
8
+ * cross-document rendering). When `portal` is omitted, `Popover.Popup` uses
9
+ * this component with default props.
10
+ */
11
+ const Portal = forwardRef< HTMLDivElement, PortalProps >(
12
+ function PopoverPortal( props, ref ) {
13
+ return <_Popover.Portal ref={ ref } { ...props } />;
14
+ }
15
+ );
16
+
17
+ export { Portal };
@@ -12,8 +12,8 @@ import type { RootProps } from './types';
12
12
  *
13
13
  * - `Popover.Root` — provides open state and context to all sub-components.
14
14
  * - `Popover.Trigger` — the button that toggles the popup.
15
- * - `Popover.Popup` — the floating container (portal, positioning, collision
16
- * avoidance).
15
+ * - `Popover.Popup` — the floating container (positioning, collision
16
+ * avoidance); portals by default or via `portal={ <Popover.Portal /> }`.
17
17
  * - `Popover.Arrow` — an optional arrow pointing toward the anchor.
18
18
  * - `Popover.Title` — **required** heading that labels the popover for
19
19
  * accessibility (can be visually hidden).
@@ -2,7 +2,8 @@ import type { Meta, StoryObj } from '@storybook/react-vite';
2
2
  import { useId, useRef, useState } from '@wordpress/element';
3
3
  import { SlotFillProvider, Slot } from '@wordpress/components';
4
4
  import { close, info } from '@wordpress/icons';
5
- import { Popover, VisuallyHidden } from '../..';
5
+ import * as Popover from '../';
6
+ import { VisuallyHidden } from '../../visually-hidden';
6
7
  import { Icon } from '../../icon';
7
8
  import { IconButton } from '../../icon-button';
8
9
  import { GenericIframe, useMeasure } from './utils';
@@ -12,6 +13,7 @@ const meta: Meta< typeof Popover.Root > = {
12
13
  component: Popover.Root,
13
14
  subcomponents: {
14
15
  'Popover.Trigger': Popover.Trigger,
16
+ 'Popover.Portal': Popover.Portal,
15
17
  'Popover.Popup': Popover.Popup,
16
18
  'Popover.Arrow': Popover.Arrow,
17
19
  'Popover.Title': Popover.Title,
@@ -442,10 +444,11 @@ export const OverlayPlacement: Story = {
442
444
  };
443
445
 
444
446
  /**
445
- * To render the popup inline (without a portal), create a local ref to a
446
- * `<span>` with `display: contents` and pass it as the `container` prop.
447
- * The popup will render inside the span rather than being portaled to
448
- * `document.body`, while retaining all positioning behavior.
447
+ * To keep the floating layer **in page flow** next to surrounding layout,
448
+ * create a local ref to a `<span>` with `display: contents` and pass
449
+ * `portal={ <Popover.Portal container={ ref } /> }`. The popup still uses a
450
+ * portal, but the portal **mounts** into that subtree instead of
451
+ * `document.body`, while retaining positioning behavior.
449
452
  *
450
453
  * **Note:** `backdrop` will not cover the full viewport in this mode.
451
454
  */
@@ -462,7 +465,11 @@ export const Inline: Story = {
462
465
  ref={ inlineContainerRef }
463
466
  style={ { display: 'contents' } }
464
467
  />
465
- <Popover.Popup container={ inlineContainerRef }>
468
+ <Popover.Popup
469
+ portal={
470
+ <Popover.Portal container={ inlineContainerRef } />
471
+ }
472
+ >
466
473
  <Popover.Arrow />
467
474
  <Popover.Title
468
475
  style={ {
@@ -472,8 +479,10 @@ export const Inline: Story = {
472
479
  Inline Popover
473
480
  </Popover.Title>
474
481
  <Popover.Description>
475
- This popup is rendered in place — no portal is used.
476
- Inspect the DOM to see it lives inside its parent.
482
+ This example still uses `Popover.Portal`, but the
483
+ portal `container` is the in-tree span above, so the
484
+ portal node mounts inside the wrapper instead of
485
+ `document.body`.
477
486
  </Popover.Description>
478
487
  </Popover.Popup>
479
488
  </Popover.Root>
@@ -571,8 +580,8 @@ export const CollisionAvoidance: Story = {
571
580
 
572
581
  /**
573
582
  * When the popover's trigger lives inside an iframe but the popover should
574
- * render in the parent document, pass a parent-document element to the
575
- * `container` prop on `Popover.Popup`.
583
+ * render in the parent document, pass a parent-document element through
584
+ * `portal={ <Popover.Portal container={ ... } /> }` on `Popover.Popup`.
576
585
  *
577
586
  * This technique is used in Gutenberg where the block editor canvas is an
578
587
  * iframe but toolbars and menus must appear outside it.
@@ -623,8 +632,12 @@ export const CrossIframe: Story = {
623
632
  Popover&apos;s anchor (inside iframe)
624
633
  </Popover.Trigger>
625
634
  <Popover.Popup
626
- container={
627
- portalContainerRef as React.RefObject< HTMLElement >
635
+ portal={
636
+ <Popover.Portal
637
+ container={
638
+ portalContainerRef as React.RefObject< HTMLElement >
639
+ }
640
+ />
628
641
  }
629
642
  collisionBoundary={
630
643
  iframeBoundary ?? undefined
@@ -660,9 +673,9 @@ export const CrossIframe: Story = {
660
673
  * `@wordpress/components` as the render target.
661
674
  *
662
675
  * The `Slot` renders a `div` in the parent document, and its forwarded ref
663
- * is passed to `Popover.Popup`'s `container` prop so the popup portals into
664
- * the slot element. This mirrors the legacy Popover's `WithSlotOutsideIframe`
665
- * pattern.
676
+ * is passed to `Popover.Portal`'s `container` prop (via `Popover.Popup`'s
677
+ * `portal` prop) so the popup portals into the slot element. This mirrors the
678
+ * legacy Popover's `WithSlotOutsideIframe` pattern.
666
679
  */
667
680
  export const CrossIframeWithSlotFill: Story = {
668
681
  name: 'Cross-Iframe (SlotFill)',
@@ -712,8 +725,12 @@ export const CrossIframeWithSlotFill: Story = {
712
725
  Popover&apos;s anchor (inside iframe)
713
726
  </Popover.Trigger>
714
727
  <Popover.Popup
715
- container={
716
- slotRef as React.RefObject< HTMLElement >
728
+ portal={
729
+ <Popover.Portal
730
+ container={
731
+ slotRef as React.RefObject< HTMLElement >
732
+ }
733
+ />
717
734
  }
718
735
  collisionBoundary={
719
736
  iframeBoundary ?? undefined
@@ -745,12 +762,19 @@ export const CrossIframeWithSlotFill: Story = {
745
762
 
746
763
  /**
747
764
  * Popovers in Gutenberg are managed with explicit z-index values, which can
748
- * create situations where a popover renders below another popover, when you
749
- * want it to be rendered above.
765
+ * create situations where a popover renders below another popover when you
766
+ * want it above.
767
+ *
768
+ * The `--wp-ui-popover-z-index` CSS variable controls the z-index of the
769
+ * popover's positioner (and its optional backdrop). Override it either:
770
+ *
771
+ * - **Globally**, by setting the variable on `:root` or `body` (raises every
772
+ * popover in the page), or
773
+ * - **Per instance**, by passing a `Popover.Portal` with a `style` (or
774
+ * `className`) to `Popover.Popup`'s `portal` prop. The variable cascades
775
+ * from the portal wrapper to everything rendered inside it.
750
776
  *
751
- * The `--wp-ui-popover-z-index` CSS variable, available on the
752
- * `Popover.Popup` component, is an escape hatch that can be used to override
753
- * the z-index of a given popover on a case-by-case basis.
777
+ * This story demonstrates the per-instance approach.
754
778
  */
755
779
  export const WithCustomZIndex: Story = {
756
780
  name: 'With Custom z-index',
@@ -758,7 +782,13 @@ export const WithCustomZIndex: Story = {
758
782
  children: (
759
783
  <>
760
784
  <Popover.Trigger>Open Popover</Popover.Trigger>
761
- <Popover.Popup style={ { '--wp-ui-popover-z-index': '9999' } }>
785
+ <Popover.Popup
786
+ portal={
787
+ <Popover.Portal
788
+ style={ { '--wp-ui-popover-z-index': '9999' } }
789
+ />
790
+ }
791
+ >
762
792
  <Popover.Arrow />
763
793
  <Popover.Title
764
794
  style={ {
@@ -768,8 +798,9 @@ export const WithCustomZIndex: Story = {
768
798
  Custom z-index
769
799
  </Popover.Title>
770
800
  <Popover.Description>
771
- This popover&apos;s positioner has z-index: 9999 via the
772
- `--wp-ui-popover-z-index` CSS custom property.
801
+ This popover renders at `z-index: 9999` via the
802
+ `--wp-ui-popover-z-index` CSS custom property, set on
803
+ `Popover.Portal` through the `portal` prop.
773
804
  </Popover.Description>
774
805
  </Popover.Popup>
775
806
  </>
@@ -1267,7 +1298,7 @@ export const HoverTrigger: Story = {
1267
1298
  * popup itself, it's a popover. If the trigger's purpose is unrelated to
1268
1299
  * opening the popup, it's a tooltip.
1269
1300
  */
1270
- export const InfoTip: Story = {
1301
+ export const Infotip: Story = {
1271
1302
  parameters: { controls: { disable: true } },
1272
1303
  render: function Render( args ) {
1273
1304
  return (
@@ -9,15 +9,43 @@
9
9
  background-color: var(--wpds-color-bg-surface-neutral-strong);
10
10
  padding: var(--wpds-dimension-padding-lg);
11
11
  border-radius: var(--wpds-border-radius-md);
12
- border: var(--wpds-border-width-xs) solid var(--wpds-color-stroke-surface-neutral-weak);
12
+ border: var(--wpds-border-width-xs) solid var(--wpds-color-stroke-surface-neutral);
13
13
  box-shadow: var(--wpds-elevation-md);
14
- font-family: var(--wpds-font-family-body);
15
- font-size: var(--wpds-font-size-md);
16
- line-height: var(--wpds-font-line-height-md);
14
+ font-family: var(--wpds-typography-font-family-body);
15
+ font-size: var(--wpds-typography-font-size-md);
16
+ line-height: var(--wpds-typography-line-height-md);
17
17
  color: var(--wpds-color-fg-content-neutral);
18
18
  outline: 0;
19
19
  }
20
20
 
21
+ /*
22
+ * When a backdrop is rendered alongside the popup, hide the
23
+ * regular-mode border. The backdrop already provides visual
24
+ * containment, so the border becomes redundant noise.
25
+ * `transparent` (not `none`) keeps popup geometry identical
26
+ * regardless of the `backdrop` prop — `box-sizing: border-box`
27
+ * absorbs the 1px into the existing box.
28
+ */
29
+ .backdrop ~ * .popup {
30
+ border-color: transparent;
31
+ }
32
+
33
+ /*
34
+ * Forced-colors mode strips `box-shadow` and substitutes
35
+ * `background-color` with `Canvas` (the page background), so the
36
+ * boundary depends entirely on the border. Set `CanvasText`
37
+ * explicitly for both backdrop and non-backdrop popups:
38
+ * `transparent` is not substituted by the UA, and being
39
+ * explicit also removes any reliance on UA color-substitution
40
+ * behavior for the non-backdrop case.
41
+ */
42
+ @media (forced-colors: active) {
43
+ .popup,
44
+ .backdrop ~ * .popup {
45
+ border-color: CanvasText;
46
+ }
47
+ }
48
+
21
49
  .arrow {
22
50
  display: flex;
23
51
 
@@ -47,11 +75,12 @@
47
75
  }
48
76
 
49
77
  .arrow-stroke {
50
- fill: var(--wpds-color-stroke-surface-neutral-weak);
78
+ fill: var(--wpds-color-stroke-surface-neutral);
51
79
  }
52
80
 
53
- .description {
54
- color: var(--wpds-color-fg-content-neutral-weak);
81
+ .title {
82
+ color: var(--wpds-color-fg-content-neutral);
83
+ --_gcd-heading-color: var(--wpds-color-fg-content-neutral);
55
84
  }
56
85
 
57
86
  .backdrop {