@wordpress/ui 0.11.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 (660) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +4 -4
  3. package/build/alert-dialog/index.cjs +3 -0
  4. package/build/alert-dialog/index.cjs.map +2 -2
  5. package/build/alert-dialog/popup.cjs +120 -55
  6. package/build/alert-dialog/popup.cjs.map +3 -3
  7. package/build/alert-dialog/portal.cjs +38 -0
  8. package/build/alert-dialog/portal.cjs.map +7 -0
  9. package/build/alert-dialog/types.cjs.map +1 -1
  10. package/build/collapsible-card/content.cjs +9 -5
  11. package/build/collapsible-card/content.cjs.map +2 -2
  12. package/build/collapsible-card/header.cjs +14 -4
  13. package/build/collapsible-card/header.cjs.map +3 -3
  14. package/build/dialog/content.cjs +85 -0
  15. package/build/dialog/content.cjs.map +7 -0
  16. package/build/dialog/context.cjs +12 -44
  17. package/build/dialog/context.cjs.map +2 -2
  18. package/build/dialog/description.cjs +59 -0
  19. package/build/dialog/description.cjs.map +7 -0
  20. package/build/dialog/footer.cjs +5 -4
  21. package/build/dialog/footer.cjs.map +2 -2
  22. package/build/dialog/header.cjs +5 -4
  23. package/build/dialog/header.cjs.map +2 -2
  24. package/build/dialog/index.cjs +9 -0
  25. package/build/dialog/index.cjs.map +2 -2
  26. package/build/dialog/popup.cjs +21 -9
  27. package/build/dialog/popup.cjs.map +2 -2
  28. package/build/dialog/portal.cjs +38 -0
  29. package/build/dialog/portal.cjs.map +7 -0
  30. package/build/dialog/root.cjs +3 -2
  31. package/build/dialog/root.cjs.map +2 -2
  32. package/build/dialog/title.cjs +9 -6
  33. package/build/dialog/title.cjs.map +2 -2
  34. package/build/dialog/types.cjs.map +1 -1
  35. package/build/drawer/action.cjs +48 -0
  36. package/build/drawer/action.cjs.map +7 -0
  37. package/build/drawer/close-icon.cjs +58 -0
  38. package/build/drawer/close-icon.cjs.map +7 -0
  39. package/build/drawer/content.cjs +86 -0
  40. package/build/drawer/content.cjs.map +7 -0
  41. package/build/drawer/context.cjs +44 -0
  42. package/build/drawer/context.cjs.map +7 -0
  43. package/build/drawer/description.cjs +47 -0
  44. package/build/drawer/description.cjs.map +7 -0
  45. package/build/drawer/footer.cjs +65 -0
  46. package/build/drawer/footer.cjs.map +7 -0
  47. package/build/drawer/header.cjs +65 -0
  48. package/build/drawer/header.cjs.map +7 -0
  49. package/build/drawer/index.cjs +61 -0
  50. package/build/drawer/index.cjs.map +7 -0
  51. package/build/drawer/popup.cjs +103 -0
  52. package/build/drawer/popup.cjs.map +7 -0
  53. package/build/drawer/portal.cjs +38 -0
  54. package/build/drawer/portal.cjs.map +7 -0
  55. package/build/drawer/root.cjs +49 -0
  56. package/build/drawer/root.cjs.map +7 -0
  57. package/build/drawer/title.cjs +70 -0
  58. package/build/drawer/title.cjs.map +7 -0
  59. package/build/drawer/trigger.cjs +38 -0
  60. package/build/drawer/trigger.cjs.map +7 -0
  61. package/build/drawer/types.cjs +19 -0
  62. package/build/drawer/types.cjs.map +7 -0
  63. package/build/form/primitives/autocomplete/clear.cjs +62 -0
  64. package/build/form/primitives/autocomplete/clear.cjs.map +7 -0
  65. package/build/form/primitives/autocomplete/collection.cjs +38 -0
  66. package/build/form/primitives/autocomplete/collection.cjs.map +7 -0
  67. package/build/form/primitives/autocomplete/empty.cjs +67 -0
  68. package/build/form/primitives/autocomplete/empty.cjs.map +7 -0
  69. package/build/form/primitives/autocomplete/index.cjs +64 -0
  70. package/build/form/primitives/autocomplete/index.cjs.map +7 -0
  71. package/build/form/primitives/autocomplete/input-group.cjs +36 -0
  72. package/build/form/primitives/autocomplete/input-group.cjs.map +7 -0
  73. package/build/form/primitives/autocomplete/input.cjs +47 -0
  74. package/build/form/primitives/autocomplete/input.cjs.map +7 -0
  75. package/build/form/primitives/autocomplete/item.cjs +81 -0
  76. package/build/form/primitives/autocomplete/item.cjs.map +7 -0
  77. package/build/form/primitives/autocomplete/list-body.cjs +57 -0
  78. package/build/form/primitives/autocomplete/list-body.cjs.map +7 -0
  79. package/build/form/primitives/autocomplete/list.cjs +67 -0
  80. package/build/form/primitives/autocomplete/list.cjs.map +7 -0
  81. package/build/form/primitives/autocomplete/popup.cjs +102 -0
  82. package/build/form/primitives/autocomplete/popup.cjs.map +7 -0
  83. package/build/form/primitives/autocomplete/portal.cjs +38 -0
  84. package/build/form/primitives/autocomplete/portal.cjs.map +7 -0
  85. package/build/form/primitives/autocomplete/root.cjs +35 -0
  86. package/build/form/primitives/autocomplete/root.cjs.map +7 -0
  87. package/build/form/primitives/autocomplete/types.cjs +19 -0
  88. package/build/form/primitives/autocomplete/types.cjs.map +7 -0
  89. package/build/form/primitives/autocomplete/value.cjs +35 -0
  90. package/build/form/primitives/autocomplete/value.cjs.map +7 -0
  91. package/build/form/primitives/index.cjs +3 -0
  92. package/build/form/primitives/index.cjs.map +2 -2
  93. package/build/form/primitives/select/index.cjs +3 -0
  94. package/build/form/primitives/select/index.cjs.map +2 -2
  95. package/build/form/primitives/select/item.cjs +4 -5
  96. package/build/form/primitives/select/item.cjs.map +2 -2
  97. package/build/form/primitives/select/popup.cjs +12 -11
  98. package/build/form/primitives/select/popup.cjs.map +2 -2
  99. package/build/form/primitives/select/portal.cjs +38 -0
  100. package/build/form/primitives/select/portal.cjs.map +7 -0
  101. package/build/form/primitives/select/types.cjs.map +1 -1
  102. package/build/index.cjs +3 -0
  103. package/build/index.cjs.map +2 -2
  104. package/build/link/link.cjs +8 -18
  105. package/build/link/link.cjs.map +2 -2
  106. package/build/link/types.cjs.map +1 -1
  107. package/build/notice/action-button.cjs +3 -3
  108. package/build/notice/action-button.cjs.map +2 -2
  109. package/build/notice/action-link.cjs +8 -7
  110. package/build/notice/action-link.cjs.map +2 -2
  111. package/build/notice/actions.cjs +3 -3
  112. package/build/notice/actions.cjs.map +2 -2
  113. package/build/notice/close-icon.cjs +3 -3
  114. package/build/notice/close-icon.cjs.map +2 -2
  115. package/build/notice/description.cjs +3 -3
  116. package/build/notice/description.cjs.map +2 -2
  117. package/build/notice/root.cjs +3 -3
  118. package/build/notice/root.cjs.map +2 -2
  119. package/build/notice/title.cjs +3 -3
  120. package/build/notice/title.cjs.map +2 -2
  121. package/build/popover/arrow.cjs +4 -4
  122. package/build/popover/arrow.cjs.map +2 -2
  123. package/build/popover/context.cjs +4 -44
  124. package/build/popover/context.cjs.map +2 -2
  125. package/build/popover/description.cjs +1 -24
  126. package/build/popover/description.cjs.map +4 -4
  127. package/build/popover/index.cjs +3 -0
  128. package/build/popover/index.cjs.map +2 -2
  129. package/build/popover/popup.cjs +15 -15
  130. package/build/popover/popup.cjs.map +2 -2
  131. package/build/popover/portal.cjs +38 -0
  132. package/build/popover/portal.cjs.map +7 -0
  133. package/build/popover/root.cjs.map +1 -1
  134. package/build/popover/title.cjs +18 -4
  135. package/build/popover/title.cjs.map +3 -3
  136. package/build/popover/types.cjs.map +1 -1
  137. package/build/tabs/context.cjs +9 -22
  138. package/build/tabs/context.cjs.map +2 -2
  139. package/build/tabs/list.cjs +4 -4
  140. package/build/tabs/list.cjs.map +2 -2
  141. package/build/tabs/panel.cjs +19 -6
  142. package/build/tabs/panel.cjs.map +3 -3
  143. package/build/tabs/tab.cjs +4 -4
  144. package/build/tabs/tab.cjs.map +2 -2
  145. package/build/text/text.cjs +2 -2
  146. package/build/text/text.cjs.map +2 -2
  147. package/build/tooltip/index.cjs +3 -0
  148. package/build/tooltip/index.cjs.map +2 -2
  149. package/build/tooltip/popup.cjs +11 -14
  150. package/build/tooltip/popup.cjs.map +3 -3
  151. package/build/tooltip/portal.cjs +38 -0
  152. package/build/tooltip/portal.cjs.map +7 -0
  153. package/build/tooltip/provider.cjs +2 -2
  154. package/build/tooltip/provider.cjs.map +3 -3
  155. package/build/tooltip/root.cjs.map +3 -3
  156. package/build/tooltip/trigger.cjs +2 -2
  157. package/build/tooltip/trigger.cjs.map +3 -3
  158. package/build/tooltip/types.cjs.map +1 -1
  159. package/build/utils/create-overlay-modal-context.cjs +48 -0
  160. package/build/utils/create-overlay-modal-context.cjs.map +7 -0
  161. package/build/utils/create-overlay-title-validation.cjs +93 -0
  162. package/build/utils/create-overlay-title-validation.cjs.map +7 -0
  163. package/build/utils/render-portal-with-children.cjs +37 -0
  164. package/build/utils/render-portal-with-children.cjs.map +7 -0
  165. package/build/utils/use-deprioritized-initial-focus.cjs +8 -8
  166. package/build/utils/use-deprioritized-initial-focus.cjs.map +2 -2
  167. package/build/utils/use-overlay-scroll-state-attributes.cjs +140 -0
  168. package/build/utils/use-overlay-scroll-state-attributes.cjs.map +7 -0
  169. package/build/utils/use-schedule-validation.cjs +59 -0
  170. package/build/utils/use-schedule-validation.cjs.map +7 -0
  171. package/build/visually-hidden/visually-hidden.cjs +5 -1
  172. package/build/visually-hidden/visually-hidden.cjs.map +2 -2
  173. package/build-module/alert-dialog/index.mjs +2 -0
  174. package/build-module/alert-dialog/index.mjs.map +2 -2
  175. package/build-module/alert-dialog/popup.mjs +124 -56
  176. package/build-module/alert-dialog/popup.mjs.map +3 -3
  177. package/build-module/alert-dialog/portal.mjs +13 -0
  178. package/build-module/alert-dialog/portal.mjs.map +7 -0
  179. package/build-module/collapsible-card/content.mjs +9 -5
  180. package/build-module/collapsible-card/content.mjs.map +2 -2
  181. package/build-module/collapsible-card/header.mjs +14 -4
  182. package/build-module/collapsible-card/header.mjs.map +3 -3
  183. package/build-module/dialog/content.mjs +50 -0
  184. package/build-module/dialog/content.mjs.map +7 -0
  185. package/build-module/dialog/context.mjs +10 -51
  186. package/build-module/dialog/context.mjs.map +2 -2
  187. package/build-module/dialog/description.mjs +34 -0
  188. package/build-module/dialog/description.mjs.map +7 -0
  189. package/build-module/dialog/footer.mjs +5 -4
  190. package/build-module/dialog/footer.mjs.map +2 -2
  191. package/build-module/dialog/header.mjs +5 -4
  192. package/build-module/dialog/header.mjs.map +2 -2
  193. package/build-module/dialog/index.mjs +6 -0
  194. package/build-module/dialog/index.mjs.map +2 -2
  195. package/build-module/dialog/popup.mjs +23 -11
  196. package/build-module/dialog/popup.mjs.map +2 -2
  197. package/build-module/dialog/portal.mjs +13 -0
  198. package/build-module/dialog/portal.mjs.map +7 -0
  199. package/build-module/dialog/root.mjs +3 -2
  200. package/build-module/dialog/root.mjs.map +2 -2
  201. package/build-module/dialog/title.mjs +10 -7
  202. package/build-module/dialog/title.mjs.map +2 -2
  203. package/build-module/drawer/action.mjs +23 -0
  204. package/build-module/drawer/action.mjs.map +7 -0
  205. package/build-module/drawer/close-icon.mjs +33 -0
  206. package/build-module/drawer/close-icon.mjs.map +7 -0
  207. package/build-module/drawer/content.mjs +51 -0
  208. package/build-module/drawer/content.mjs.map +7 -0
  209. package/build-module/drawer/context.mjs +16 -0
  210. package/build-module/drawer/context.mjs.map +7 -0
  211. package/build-module/drawer/description.mjs +22 -0
  212. package/build-module/drawer/description.mjs.map +7 -0
  213. package/build-module/drawer/footer.mjs +30 -0
  214. package/build-module/drawer/footer.mjs.map +7 -0
  215. package/build-module/drawer/header.mjs +30 -0
  216. package/build-module/drawer/header.mjs.map +7 -0
  217. package/build-module/drawer/index.mjs +26 -0
  218. package/build-module/drawer/index.mjs.map +7 -0
  219. package/build-module/drawer/popup.mjs +70 -0
  220. package/build-module/drawer/popup.mjs.map +7 -0
  221. package/build-module/drawer/portal.mjs +13 -0
  222. package/build-module/drawer/portal.mjs.map +7 -0
  223. package/build-module/drawer/root.mjs +24 -0
  224. package/build-module/drawer/root.mjs.map +7 -0
  225. package/build-module/drawer/title.mjs +45 -0
  226. package/build-module/drawer/title.mjs.map +7 -0
  227. package/build-module/drawer/trigger.mjs +13 -0
  228. package/build-module/drawer/trigger.mjs.map +7 -0
  229. package/build-module/drawer/types.mjs +1 -0
  230. package/build-module/form/primitives/autocomplete/clear.mjs +37 -0
  231. package/build-module/form/primitives/autocomplete/clear.mjs.map +7 -0
  232. package/build-module/form/primitives/autocomplete/collection.mjs +13 -0
  233. package/build-module/form/primitives/autocomplete/collection.mjs.map +7 -0
  234. package/build-module/form/primitives/autocomplete/empty.mjs +32 -0
  235. package/build-module/form/primitives/autocomplete/empty.mjs.map +7 -0
  236. package/build-module/form/primitives/autocomplete/index.mjs +28 -0
  237. package/build-module/form/primitives/autocomplete/index.mjs.map +7 -0
  238. package/build-module/form/primitives/autocomplete/input-group.mjs +11 -0
  239. package/build-module/form/primitives/autocomplete/input-group.mjs.map +7 -0
  240. package/build-module/form/primitives/autocomplete/input.mjs +22 -0
  241. package/build-module/form/primitives/autocomplete/input.mjs.map +7 -0
  242. package/build-module/form/primitives/autocomplete/item.mjs +46 -0
  243. package/build-module/form/primitives/autocomplete/item.mjs.map +7 -0
  244. package/build-module/form/primitives/autocomplete/list-body.mjs +32 -0
  245. package/build-module/form/primitives/autocomplete/list-body.mjs.map +7 -0
  246. package/build-module/form/primitives/autocomplete/list.mjs +32 -0
  247. package/build-module/form/primitives/autocomplete/list.mjs.map +7 -0
  248. package/build-module/form/primitives/autocomplete/popup.mjs +69 -0
  249. package/build-module/form/primitives/autocomplete/popup.mjs.map +7 -0
  250. package/build-module/form/primitives/autocomplete/portal.mjs +13 -0
  251. package/build-module/form/primitives/autocomplete/portal.mjs.map +7 -0
  252. package/build-module/form/primitives/autocomplete/root.mjs +10 -0
  253. package/build-module/form/primitives/autocomplete/root.mjs.map +7 -0
  254. package/build-module/form/primitives/autocomplete/types.mjs +1 -0
  255. package/build-module/form/primitives/autocomplete/value.mjs +10 -0
  256. package/build-module/form/primitives/autocomplete/value.mjs.map +7 -0
  257. package/build-module/form/primitives/index.mjs +2 -0
  258. package/build-module/form/primitives/index.mjs.map +2 -2
  259. package/build-module/form/primitives/select/index.mjs +2 -0
  260. package/build-module/form/primitives/select/index.mjs.map +2 -2
  261. package/build-module/form/primitives/select/item.mjs +4 -5
  262. package/build-module/form/primitives/select/item.mjs.map +2 -2
  263. package/build-module/form/primitives/select/popup.mjs +12 -11
  264. package/build-module/form/primitives/select/popup.mjs.map +2 -2
  265. package/build-module/form/primitives/select/portal.mjs +13 -0
  266. package/build-module/form/primitives/select/portal.mjs.map +7 -0
  267. package/build-module/index.mjs +2 -0
  268. package/build-module/index.mjs.map +2 -2
  269. package/build-module/link/link.mjs +8 -18
  270. package/build-module/link/link.mjs.map +2 -2
  271. package/build-module/notice/action-button.mjs +3 -3
  272. package/build-module/notice/action-button.mjs.map +2 -2
  273. package/build-module/notice/action-link.mjs +8 -7
  274. package/build-module/notice/action-link.mjs.map +2 -2
  275. package/build-module/notice/actions.mjs +3 -3
  276. package/build-module/notice/actions.mjs.map +2 -2
  277. package/build-module/notice/close-icon.mjs +3 -3
  278. package/build-module/notice/close-icon.mjs.map +2 -2
  279. package/build-module/notice/description.mjs +3 -3
  280. package/build-module/notice/description.mjs.map +2 -2
  281. package/build-module/notice/root.mjs +3 -3
  282. package/build-module/notice/root.mjs.map +2 -2
  283. package/build-module/notice/title.mjs +3 -3
  284. package/build-module/notice/title.mjs.map +2 -2
  285. package/build-module/popover/arrow.mjs +4 -4
  286. package/build-module/popover/arrow.mjs.map +2 -2
  287. package/build-module/popover/context.mjs +4 -51
  288. package/build-module/popover/context.mjs.map +2 -2
  289. package/build-module/popover/description.mjs +1 -14
  290. package/build-module/popover/description.mjs.map +3 -3
  291. package/build-module/popover/index.mjs +2 -0
  292. package/build-module/popover/index.mjs.map +2 -2
  293. package/build-module/popover/popup.mjs +16 -16
  294. package/build-module/popover/popup.mjs.map +2 -2
  295. package/build-module/popover/portal.mjs +13 -0
  296. package/build-module/popover/portal.mjs.map +7 -0
  297. package/build-module/popover/root.mjs.map +1 -1
  298. package/build-module/popover/title.mjs +19 -5
  299. package/build-module/popover/title.mjs.map +3 -3
  300. package/build-module/tabs/context.mjs +11 -24
  301. package/build-module/tabs/context.mjs.map +2 -2
  302. package/build-module/tabs/list.mjs +4 -4
  303. package/build-module/tabs/list.mjs.map +2 -2
  304. package/build-module/tabs/panel.mjs +19 -6
  305. package/build-module/tabs/panel.mjs.map +3 -3
  306. package/build-module/tabs/tab.mjs +4 -4
  307. package/build-module/tabs/tab.mjs.map +2 -2
  308. package/build-module/text/text.mjs +2 -2
  309. package/build-module/text/text.mjs.map +2 -2
  310. package/build-module/tooltip/index.mjs +2 -0
  311. package/build-module/tooltip/index.mjs.map +2 -2
  312. package/build-module/tooltip/popup.mjs +14 -17
  313. package/build-module/tooltip/popup.mjs.map +2 -2
  314. package/build-module/tooltip/portal.mjs +13 -0
  315. package/build-module/tooltip/portal.mjs.map +7 -0
  316. package/build-module/tooltip/provider.mjs +3 -3
  317. package/build-module/tooltip/provider.mjs.map +2 -2
  318. package/build-module/tooltip/root.mjs +2 -2
  319. package/build-module/tooltip/root.mjs.map +2 -2
  320. package/build-module/tooltip/trigger.mjs +3 -3
  321. package/build-module/tooltip/trigger.mjs.map +2 -2
  322. package/build-module/utils/create-overlay-modal-context.mjs +23 -0
  323. package/build-module/utils/create-overlay-modal-context.mjs.map +7 -0
  324. package/build-module/utils/create-overlay-title-validation.mjs +75 -0
  325. package/build-module/utils/create-overlay-title-validation.mjs.map +7 -0
  326. package/build-module/utils/render-portal-with-children.mjs +12 -0
  327. package/build-module/utils/render-portal-with-children.mjs.map +7 -0
  328. package/build-module/utils/use-deprioritized-initial-focus.mjs +9 -9
  329. package/build-module/utils/use-deprioritized-initial-focus.mjs.map +2 -2
  330. package/build-module/utils/use-overlay-scroll-state-attributes.mjs +114 -0
  331. package/build-module/utils/use-overlay-scroll-state-attributes.mjs.map +7 -0
  332. package/build-module/utils/use-schedule-validation.mjs +34 -0
  333. package/build-module/utils/use-schedule-validation.mjs.map +7 -0
  334. package/build-module/visually-hidden/visually-hidden.mjs +5 -1
  335. package/build-module/visually-hidden/visually-hidden.mjs.map +2 -2
  336. package/build-types/alert-dialog/index.d.ts +1 -0
  337. package/build-types/alert-dialog/index.d.ts.map +1 -1
  338. package/build-types/alert-dialog/popup.d.ts.map +1 -1
  339. package/build-types/alert-dialog/portal.d.ts +9 -0
  340. package/build-types/alert-dialog/portal.d.ts.map +1 -0
  341. package/build-types/alert-dialog/stories/index.story.d.ts +29 -1
  342. package/build-types/alert-dialog/stories/index.story.d.ts.map +1 -1
  343. package/build-types/alert-dialog/types.d.ts +25 -3
  344. package/build-types/alert-dialog/types.d.ts.map +1 -1
  345. package/build-types/badge/stories/index.story.d.ts.map +1 -1
  346. package/build-types/card/stories/index.story.d.ts.map +1 -1
  347. package/build-types/collapsible/stories/index.story.d.ts.map +1 -1
  348. package/build-types/collapsible-card/content.d.ts.map +1 -1
  349. package/build-types/collapsible-card/header.d.ts.map +1 -1
  350. package/build-types/collapsible-card/stories/index.story.d.ts.map +1 -1
  351. package/build-types/dialog/content.d.ts +17 -0
  352. package/build-types/dialog/content.d.ts.map +1 -0
  353. package/build-types/dialog/context.d.ts +11 -16
  354. package/build-types/dialog/context.d.ts.map +1 -1
  355. package/build-types/dialog/description.d.ts +9 -0
  356. package/build-types/dialog/description.d.ts.map +1 -0
  357. package/build-types/dialog/footer.d.ts +8 -1
  358. package/build-types/dialog/footer.d.ts.map +1 -1
  359. package/build-types/dialog/header.d.ts +8 -1
  360. package/build-types/dialog/header.d.ts.map +1 -1
  361. package/build-types/dialog/index.d.ts +4 -1
  362. package/build-types/dialog/index.d.ts.map +1 -1
  363. package/build-types/dialog/popup.d.ts +3 -0
  364. package/build-types/dialog/popup.d.ts.map +1 -1
  365. package/build-types/dialog/portal.d.ts +10 -0
  366. package/build-types/dialog/portal.d.ts.map +1 -0
  367. package/build-types/dialog/root.d.ts +14 -4
  368. package/build-types/dialog/root.d.ts.map +1 -1
  369. package/build-types/dialog/stories/index.story.d.ts +29 -6
  370. package/build-types/dialog/stories/index.story.d.ts.map +1 -1
  371. package/build-types/dialog/title.d.ts.map +1 -1
  372. package/build-types/dialog/types.d.ts +60 -7
  373. package/build-types/dialog/types.d.ts.map +1 -1
  374. package/build-types/drawer/action.d.ts +8 -0
  375. package/build-types/drawer/action.d.ts.map +1 -0
  376. package/build-types/drawer/close-icon.d.ts +8 -0
  377. package/build-types/drawer/close-icon.d.ts.map +1 -0
  378. package/build-types/drawer/content.d.ts +21 -0
  379. package/build-types/drawer/content.d.ts.map +1 -0
  380. package/build-types/drawer/context.d.ts +20 -0
  381. package/build-types/drawer/context.d.ts.map +1 -0
  382. package/build-types/drawer/description.d.ts +9 -0
  383. package/build-types/drawer/description.d.ts.map +1 -0
  384. package/build-types/drawer/footer.d.ts +15 -0
  385. package/build-types/drawer/footer.d.ts.map +1 -0
  386. package/build-types/drawer/header.d.ts +15 -0
  387. package/build-types/drawer/header.d.ts.map +1 -0
  388. package/build-types/drawer/index.d.ts +13 -0
  389. package/build-types/drawer/index.d.ts.map +1 -0
  390. package/build-types/drawer/popup.d.ts +16 -0
  391. package/build-types/drawer/popup.d.ts.map +1 -0
  392. package/build-types/drawer/portal.d.ts +10 -0
  393. package/build-types/drawer/portal.d.ts.map +1 -0
  394. package/build-types/drawer/root.d.ts +21 -0
  395. package/build-types/drawer/root.d.ts.map +1 -0
  396. package/build-types/drawer/stories/index.story.d.ts +63 -0
  397. package/build-types/drawer/stories/index.story.d.ts.map +1 -0
  398. package/build-types/drawer/test/index.test.d.ts +2 -0
  399. package/build-types/drawer/test/index.test.d.ts.map +1 -0
  400. package/build-types/drawer/title.d.ts +22 -0
  401. package/build-types/drawer/title.d.ts.map +1 -0
  402. package/build-types/drawer/trigger.d.ts +7 -0
  403. package/build-types/drawer/trigger.d.ts.map +1 -0
  404. package/build-types/drawer/types.d.ts +146 -0
  405. package/build-types/drawer/types.d.ts.map +1 -0
  406. package/build-types/empty-state/stories/index.story.d.ts +1 -1
  407. package/build-types/empty-state/stories/index.story.d.ts.map +1 -1
  408. package/build-types/form/input-control/stories/index.story.d.ts +1 -1
  409. package/build-types/form/input-control/stories/index.story.d.ts.map +1 -1
  410. package/build-types/form/primitives/autocomplete/clear.d.ts +13 -0
  411. package/build-types/form/primitives/autocomplete/clear.d.ts.map +1 -0
  412. package/build-types/form/primitives/autocomplete/collection.d.ts +3 -0
  413. package/build-types/form/primitives/autocomplete/collection.d.ts.map +1 -0
  414. package/build-types/form/primitives/autocomplete/empty.d.ts +10 -0
  415. package/build-types/form/primitives/autocomplete/empty.d.ts.map +1 -0
  416. package/build-types/form/primitives/autocomplete/index.d.ts +13 -0
  417. package/build-types/form/primitives/autocomplete/index.d.ts.map +1 -0
  418. package/build-types/form/primitives/autocomplete/input-group.d.ts +16 -0
  419. package/build-types/form/primitives/autocomplete/input-group.d.ts.map +1 -0
  420. package/build-types/form/primitives/autocomplete/input.d.ts +3 -0
  421. package/build-types/form/primitives/autocomplete/input.d.ts.map +1 -0
  422. package/build-types/form/primitives/autocomplete/item.d.ts +10 -0
  423. package/build-types/form/primitives/autocomplete/item.d.ts.map +1 -0
  424. package/build-types/form/primitives/autocomplete/list-body.d.ts +13 -0
  425. package/build-types/form/primitives/autocomplete/list-body.d.ts.map +1 -0
  426. package/build-types/form/primitives/autocomplete/list.d.ts +11 -0
  427. package/build-types/form/primitives/autocomplete/list.d.ts.map +1 -0
  428. package/build-types/form/primitives/autocomplete/popup.d.ts +11 -0
  429. package/build-types/form/primitives/autocomplete/popup.d.ts.map +1 -0
  430. package/build-types/form/primitives/autocomplete/portal.d.ts +8 -0
  431. package/build-types/form/primitives/autocomplete/portal.d.ts.map +1 -0
  432. package/build-types/form/primitives/autocomplete/root.d.ts +8 -0
  433. package/build-types/form/primitives/autocomplete/root.d.ts.map +1 -0
  434. package/build-types/form/primitives/autocomplete/stories/fixtures.d.ts +8 -0
  435. package/build-types/form/primitives/autocomplete/stories/fixtures.d.ts.map +1 -0
  436. package/build-types/form/primitives/autocomplete/stories/index.story.d.ts +41 -0
  437. package/build-types/form/primitives/autocomplete/stories/index.story.d.ts.map +1 -0
  438. package/build-types/form/primitives/autocomplete/test/index.test.d.ts +2 -0
  439. package/build-types/form/primitives/autocomplete/test/index.test.d.ts.map +1 -0
  440. package/build-types/form/primitives/autocomplete/types.d.ts +44 -0
  441. package/build-types/form/primitives/autocomplete/types.d.ts.map +1 -0
  442. package/build-types/form/primitives/autocomplete/value.d.ts +3 -0
  443. package/build-types/form/primitives/autocomplete/value.d.ts.map +1 -0
  444. package/build-types/form/primitives/field/stories/index.story.d.ts +1 -1
  445. package/build-types/form/primitives/field/stories/index.story.d.ts.map +1 -1
  446. package/build-types/form/primitives/fieldset/stories/index.story.d.ts +1 -1
  447. package/build-types/form/primitives/fieldset/stories/index.story.d.ts.map +1 -1
  448. package/build-types/form/primitives/index.d.ts +1 -0
  449. package/build-types/form/primitives/index.d.ts.map +1 -1
  450. package/build-types/form/primitives/input/stories/index.story.d.ts +1 -1
  451. package/build-types/form/primitives/input/stories/index.story.d.ts.map +1 -1
  452. package/build-types/form/primitives/input-layout/stories/index.story.d.ts +1 -1
  453. package/build-types/form/primitives/input-layout/stories/index.story.d.ts.map +1 -1
  454. package/build-types/form/primitives/select/index.d.ts +1 -0
  455. package/build-types/form/primitives/select/index.d.ts.map +1 -1
  456. package/build-types/form/primitives/select/item.d.ts.map +1 -1
  457. package/build-types/form/primitives/select/popup.d.ts +1 -2
  458. package/build-types/form/primitives/select/popup.d.ts.map +1 -1
  459. package/build-types/form/primitives/select/portal.d.ts +8 -0
  460. package/build-types/form/primitives/select/portal.d.ts.map +1 -0
  461. package/build-types/form/primitives/select/stories/index.story.d.ts +14 -6
  462. package/build-types/form/primitives/select/stories/index.story.d.ts.map +1 -1
  463. package/build-types/form/primitives/select/types.d.ts +7 -2
  464. package/build-types/form/primitives/select/types.d.ts.map +1 -1
  465. package/build-types/index.d.ts +1 -0
  466. package/build-types/index.d.ts.map +1 -1
  467. package/build-types/link/link.d.ts.map +1 -1
  468. package/build-types/link/stories/index.story.d.ts +2 -3
  469. package/build-types/link/stories/index.story.d.ts.map +1 -1
  470. package/build-types/link/types.d.ts +1 -2
  471. package/build-types/link/types.d.ts.map +1 -1
  472. package/build-types/notice/action-link.d.ts.map +1 -1
  473. package/build-types/popover/context.d.ts +6 -13
  474. package/build-types/popover/context.d.ts.map +1 -1
  475. package/build-types/popover/description.d.ts +0 -1
  476. package/build-types/popover/description.d.ts.map +1 -1
  477. package/build-types/popover/index.d.ts +2 -1
  478. package/build-types/popover/index.d.ts.map +1 -1
  479. package/build-types/popover/popup.d.ts +3 -2
  480. package/build-types/popover/popup.d.ts.map +1 -1
  481. package/build-types/popover/portal.d.ts +9 -0
  482. package/build-types/popover/portal.d.ts.map +1 -0
  483. package/build-types/popover/root.d.ts +2 -2
  484. package/build-types/popover/stories/index.story.d.ts +23 -15
  485. package/build-types/popover/stories/index.story.d.ts.map +1 -1
  486. package/build-types/popover/title.d.ts.map +1 -1
  487. package/build-types/popover/types.d.ts +8 -15
  488. package/build-types/popover/types.d.ts.map +1 -1
  489. package/build-types/stack/stories/index.story.d.ts.map +1 -1
  490. package/build-types/tabs/context.d.ts.map +1 -1
  491. package/build-types/tabs/panel.d.ts.map +1 -1
  492. package/build-types/tabs/stories/index.story.d.ts +1 -1
  493. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  494. package/build-types/text/stories/index.story.d.ts.map +1 -1
  495. package/build-types/tooltip/index.d.ts +2 -1
  496. package/build-types/tooltip/index.d.ts.map +1 -1
  497. package/build-types/tooltip/popup.d.ts.map +1 -1
  498. package/build-types/tooltip/portal.d.ts +8 -0
  499. package/build-types/tooltip/portal.d.ts.map +1 -0
  500. package/build-types/tooltip/provider.d.ts +1 -1
  501. package/build-types/tooltip/provider.d.ts.map +1 -1
  502. package/build-types/tooltip/stories/index.story.d.ts +18 -1
  503. package/build-types/tooltip/stories/index.story.d.ts.map +1 -1
  504. package/build-types/tooltip/stories/usage-guidelines.story.d.ts.map +1 -1
  505. package/build-types/tooltip/trigger.d.ts.map +1 -1
  506. package/build-types/tooltip/types.d.ts +11 -7
  507. package/build-types/tooltip/types.d.ts.map +1 -1
  508. package/build-types/utils/create-overlay-modal-context.d.ts +14 -0
  509. package/build-types/utils/create-overlay-modal-context.d.ts.map +1 -0
  510. package/build-types/utils/create-overlay-title-validation.d.ts +15 -0
  511. package/build-types/utils/create-overlay-title-validation.d.ts.map +1 -0
  512. package/build-types/utils/render-portal-with-children.d.ts +16 -0
  513. package/build-types/utils/render-portal-with-children.d.ts.map +1 -0
  514. package/build-types/utils/use-deprioritized-initial-focus.d.ts +9 -8
  515. package/build-types/utils/use-deprioritized-initial-focus.d.ts.map +1 -1
  516. package/build-types/utils/use-overlay-scroll-state-attributes.d.ts +85 -0
  517. package/build-types/utils/use-overlay-scroll-state-attributes.d.ts.map +1 -0
  518. package/build-types/utils/use-schedule-validation.d.ts +13 -0
  519. package/build-types/utils/use-schedule-validation.d.ts.map +1 -0
  520. package/build-types/visually-hidden/stories/index.story.d.ts.map +1 -1
  521. package/build-types/visually-hidden/visually-hidden.d.ts +4 -20
  522. package/build-types/visually-hidden/visually-hidden.d.ts.map +1 -1
  523. package/package.json +12 -12
  524. package/src/alert-dialog/index.ts +1 -0
  525. package/src/alert-dialog/popup.tsx +114 -45
  526. package/src/alert-dialog/portal.tsx +17 -0
  527. package/src/alert-dialog/stories/index.story.tsx +123 -3
  528. package/src/alert-dialog/style.module.css +13 -4
  529. package/src/alert-dialog/test/index.test.tsx +329 -3
  530. package/src/alert-dialog/types.ts +30 -3
  531. package/src/badge/stories/choosing-intent.story.tsx +1 -1
  532. package/src/badge/stories/index.story.tsx +1 -0
  533. package/src/card/stories/index.story.tsx +1 -0
  534. package/src/collapsible/stories/index.story.tsx +1 -0
  535. package/src/collapsible-card/content.tsx +12 -1
  536. package/src/collapsible-card/header.tsx +2 -0
  537. package/src/collapsible-card/stories/index.story.tsx +1 -0
  538. package/src/collapsible-card/style.module.css +16 -4
  539. package/src/dialog/content.tsx +47 -0
  540. package/src/dialog/context.tsx +14 -98
  541. package/src/dialog/description.tsx +27 -0
  542. package/src/dialog/footer.tsx +10 -2
  543. package/src/dialog/header.tsx +10 -2
  544. package/src/dialog/index.ts +16 -1
  545. package/src/dialog/popup.tsx +28 -8
  546. package/src/dialog/portal.tsx +18 -0
  547. package/src/dialog/root.tsx +22 -5
  548. package/src/dialog/stories/index.story.tsx +195 -51
  549. package/src/dialog/style.module.css +73 -23
  550. package/src/dialog/test/index.test.tsx +849 -149
  551. package/src/dialog/title.tsx +6 -4
  552. package/src/dialog/types.ts +64 -6
  553. package/src/drawer/action.tsx +28 -0
  554. package/src/drawer/close-icon.tsx +33 -0
  555. package/src/drawer/content.tsx +50 -0
  556. package/src/drawer/context.tsx +29 -0
  557. package/src/drawer/description.tsx +25 -0
  558. package/src/drawer/footer.tsx +34 -0
  559. package/src/drawer/header.tsx +34 -0
  560. package/src/drawer/index.ts +25 -0
  561. package/src/drawer/popup.tsx +100 -0
  562. package/src/drawer/portal.tsx +18 -0
  563. package/src/drawer/root.tsx +41 -0
  564. package/src/drawer/stories/index.story.tsx +543 -0
  565. package/src/drawer/style.module.css +324 -0
  566. package/src/drawer/test/index.test.tsx +1097 -0
  567. package/src/drawer/title.tsx +53 -0
  568. package/src/drawer/trigger.tsx +14 -0
  569. package/src/drawer/types.ts +174 -0
  570. package/src/empty-state/stories/index.story.tsx +2 -1
  571. package/src/form/input-control/stories/index.story.tsx +4 -1
  572. package/src/form/primitives/autocomplete/clear.tsx +35 -0
  573. package/src/form/primitives/autocomplete/collection.tsx +13 -0
  574. package/src/form/primitives/autocomplete/empty.tsx +17 -0
  575. package/src/form/primitives/autocomplete/index.ts +12 -0
  576. package/src/form/primitives/autocomplete/input-group.tsx +16 -0
  577. package/src/form/primitives/autocomplete/input.tsx +20 -0
  578. package/src/form/primitives/autocomplete/item.tsx +24 -0
  579. package/src/form/primitives/autocomplete/list-body.tsx +23 -0
  580. package/src/form/primitives/autocomplete/list.tsx +17 -0
  581. package/src/form/primitives/autocomplete/popup.tsx +42 -0
  582. package/src/form/primitives/autocomplete/portal.tsx +16 -0
  583. package/src/form/primitives/autocomplete/root.tsx +11 -0
  584. package/src/form/primitives/autocomplete/stories/fixtures.ts +35 -0
  585. package/src/form/primitives/autocomplete/stories/index.story.tsx +437 -0
  586. package/src/form/primitives/autocomplete/style.module.css +7 -0
  587. package/src/form/primitives/autocomplete/test/index.test.tsx +162 -0
  588. package/src/form/primitives/autocomplete/types.ts +74 -0
  589. package/src/form/primitives/autocomplete/value.tsx +6 -0
  590. package/src/form/primitives/field/stories/index.story.tsx +1 -1
  591. package/src/form/primitives/fieldset/stories/index.story.tsx +1 -1
  592. package/src/form/primitives/index.ts +1 -0
  593. package/src/form/primitives/input/stories/index.story.tsx +2 -1
  594. package/src/form/primitives/input-layout/stories/index.story.tsx +2 -1
  595. package/src/form/primitives/select/index.ts +1 -0
  596. package/src/form/primitives/select/item.tsx +0 -1
  597. package/src/form/primitives/select/popup.tsx +34 -37
  598. package/src/form/primitives/select/portal.tsx +16 -0
  599. package/src/form/primitives/select/stories/index.story.tsx +21 -7
  600. package/src/form/primitives/select/test/index.test.tsx +7 -3
  601. package/src/form/primitives/select/types.ts +9 -2
  602. package/src/index.ts +1 -0
  603. package/src/link/link.tsx +12 -26
  604. package/src/link/stories/index.story.tsx +6 -11
  605. package/src/link/style.module.css +5 -17
  606. package/src/link/test/index.test.tsx +31 -27
  607. package/src/link/types.ts +1 -2
  608. package/src/notice/action-link.tsx +7 -4
  609. package/src/notice/style.module.css +5 -5
  610. package/src/popover/context.tsx +6 -89
  611. package/src/popover/description.tsx +1 -5
  612. package/src/popover/index.ts +2 -1
  613. package/src/popover/popup.tsx +17 -15
  614. package/src/popover/portal.tsx +17 -0
  615. package/src/popover/root.tsx +2 -2
  616. package/src/popover/stories/index.story.tsx +56 -25
  617. package/src/popover/style.module.css +33 -4
  618. package/src/popover/test/index.test.tsx +189 -74
  619. package/src/popover/title.tsx +9 -5
  620. package/src/popover/types.ts +10 -15
  621. package/src/stack/stories/index.story.tsx +1 -0
  622. package/src/tabs/context.tsx +14 -34
  623. package/src/tabs/panel.tsx +7 -2
  624. package/src/tabs/stories/index.story.tsx +2 -1
  625. package/src/tabs/style.module.css +0 -17
  626. package/src/tabs/test/index.test.tsx +7 -3
  627. package/src/text/stories/index.story.tsx +1 -0
  628. package/src/text/text.tsx +2 -2
  629. package/src/tooltip/index.ts +2 -1
  630. package/src/tooltip/popup.tsx +24 -28
  631. package/src/tooltip/portal.tsx +16 -0
  632. package/src/tooltip/provider.tsx +3 -3
  633. package/src/tooltip/root.tsx +2 -2
  634. package/src/tooltip/stories/index.story.tsx +39 -1
  635. package/src/tooltip/stories/usage-guidelines.story.tsx +5 -1
  636. package/src/tooltip/style.module.css +12 -0
  637. package/src/tooltip/test/index.test.tsx +9 -3
  638. package/src/tooltip/trigger.tsx +3 -7
  639. package/src/tooltip/types.ts +13 -7
  640. package/src/utils/create-overlay-modal-context.tsx +34 -0
  641. package/src/utils/create-overlay-title-validation.tsx +116 -0
  642. package/src/utils/css/item-popup.module.css +9 -11
  643. package/src/utils/css/overlay-chrome.module.css +222 -0
  644. package/src/utils/render-portal-with-children.ts +27 -0
  645. package/src/utils/test/use-deprioritized-initial-focus.test.tsx +3 -3
  646. package/src/utils/use-deprioritized-initial-focus.ts +23 -17
  647. package/src/utils/use-overlay-scroll-state-attributes.ts +272 -0
  648. package/src/utils/use-schedule-validation.ts +45 -0
  649. package/src/visually-hidden/stories/index.story.tsx +1 -0
  650. package/src/visually-hidden/visually-hidden.tsx +9 -21
  651. package/build/types/css-modules.d.cjs +0 -2
  652. package/build/types/react.d.cjs +0 -5
  653. package/build/types/react.d.cjs.map +0 -7
  654. package/build-module/types/css-modules.d.mjs +0 -1
  655. package/build-module/types/react.d.mjs +0 -3
  656. package/build-module/types/react.d.mjs.map +0 -7
  657. package/src/types/css-modules.d.ts +0 -4
  658. package/src/types/react.d.ts +0 -7
  659. /package/build-module/{types/css-modules.d.mjs.map → drawer/types.mjs.map} +0 -0
  660. /package/{build/types/css-modules.d.cjs.map → build-module/form/primitives/autocomplete/types.mjs.map} +0 -0
@@ -1,5 +1,6 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { Input, InputLayout } from '../../../..';
2
+ import { Input } from '../';
3
+ import { InputLayout } from '../../input-layout';
3
4
  import { WithSuffixControl } from '../../input-layout/stories/index.story';
4
5
 
5
6
  const meta: Meta< typeof Input > = {
@@ -1,6 +1,7 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite';
2
2
  import { copy } from '@wordpress/icons';
3
- import { IconButton, InputLayout } from '../../../..';
3
+ import { InputLayout } from '../';
4
+ import { IconButton } from '../../../../icon-button';
4
5
 
5
6
  const meta: Meta< typeof InputLayout > = {
6
7
  title: 'Design System/Components/Form/Primitives/InputLayout',
@@ -1,4 +1,5 @@
1
1
  export { Item } from './item';
2
+ export { Portal } from './portal';
2
3
  export { Popup } from './popup';
3
4
  export { Root } from './root';
4
5
  export { Trigger } from './trigger';
@@ -27,7 +27,6 @@ export const Item = forwardRef< HTMLDivElement, SelectItemProps >(
27
27
  <Icon
28
28
  icon={ check }
29
29
  className={ clsx(
30
- itemPopupStyles[ 'item-indicator' ],
31
30
  itemPopupStyles[ 'item-indicator-icon' ]
32
31
  ) }
33
32
  size={ size === 'small' ? 20 : 24 }
@@ -6,6 +6,8 @@ import {
6
6
  privateApis as themePrivateApis,
7
7
  } from '@wordpress/theme';
8
8
  import { unlock } from '../../../lock-unlock';
9
+ import { Portal } from './portal';
10
+ import { renderPortalWithChildren } from '../../../utils/render-portal-with-children';
9
11
  import itemPopupStyles from '../../../utils/css/item-popup.module.css';
10
12
  import resetStyles from '../../../utils/css/resets.module.css';
11
13
  import styles from './style.module.css';
@@ -16,43 +18,38 @@ const ThemeProvider: typeof ThemeProviderType =
16
18
  unlock( themePrivateApis ).ThemeProvider;
17
19
 
18
20
  export const Popup = forwardRef< HTMLDivElement, SelectPopupProps >(
19
- function Popup(
20
- { className, container, children, style, ...restProps },
21
- ref
22
- ) {
23
- return (
24
- <_Select.Portal container={ container }>
25
- <_Select.Positioner
26
- { ...ITEM_POPUP_POSITIONER_PROPS }
27
- alignItemWithTrigger={ false }
28
- style={ style }
29
- className={ clsx(
30
- resetStyles[ 'box-sizing' ],
31
- styles.positioner,
32
- className
33
- ) }
34
- >
35
- <ThemeProvider>
36
- <_Select.Popup
37
- ref={ ref }
38
- className={ itemPopupStyles.popup }
39
- { ...restProps }
40
- >
41
- <_Select.List className={ itemPopupStyles.list }>
42
- <div
43
- className={
44
- itemPopupStyles[
45
- 'list-scrollable-container'
46
- ]
47
- }
48
- >
49
- { children }
50
- </div>
51
- </_Select.List>
52
- </_Select.Popup>
53
- </ThemeProvider>
54
- </_Select.Positioner>
55
- </_Select.Portal>
21
+ function Popup( { className, portal, children, ...restProps }, ref ) {
22
+ const portalChildren = (
23
+ <_Select.Positioner
24
+ { ...ITEM_POPUP_POSITIONER_PROPS }
25
+ alignItemWithTrigger={ false }
26
+ className={ clsx(
27
+ resetStyles[ 'box-sizing' ],
28
+ styles.positioner
29
+ ) }
30
+ >
31
+ <ThemeProvider>
32
+ <_Select.Popup
33
+ ref={ ref }
34
+ className={ clsx( itemPopupStyles.popup, className ) }
35
+ { ...restProps }
36
+ >
37
+ <_Select.List className={ itemPopupStyles.list }>
38
+ <div
39
+ className={
40
+ itemPopupStyles[
41
+ 'list-scrollable-container'
42
+ ]
43
+ }
44
+ >
45
+ { children }
46
+ </div>
47
+ </_Select.List>
48
+ </_Select.Popup>
49
+ </ThemeProvider>
50
+ </_Select.Positioner>
56
51
  );
52
+
53
+ return renderPortalWithChildren( portal, <Portal />, portalChildren );
57
54
  }
58
55
  );
@@ -0,0 +1,16 @@
1
+ import { Select as _Select } from '@base-ui/react/select';
2
+ import { forwardRef } from '@wordpress/element';
3
+ import type { PortalProps } from './types';
4
+
5
+ /**
6
+ * Root element that portals `Select` listbox content. Pass to
7
+ * `Select.Popup`'s `portal` prop. When `portal` is omitted, `Select.Popup`
8
+ * uses this component with default props.
9
+ */
10
+ const Portal = forwardRef< HTMLDivElement, PortalProps >(
11
+ function SelectPortal( props, ref ) {
12
+ return <_Select.Portal ref={ ref } { ...props } />;
13
+ }
14
+ );
15
+
16
+ export { Portal };
@@ -1,5 +1,5 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import { Select } from '../../../..';
2
+ import * as Select from '../';
3
3
 
4
4
  const meta: Meta< typeof Select.Root > = {
5
5
  title: 'Design System/Components/Form/Primitives/Select',
@@ -251,12 +251,20 @@ export const WithCustomTriggerAndItem: Story = {
251
251
  };
252
252
 
253
253
  /**
254
- * Popovers in Gutenberg are managed with explicit z-index values, which can create
255
- * situations where a popover renders below another popover, when you want it to be rendered above.
254
+ * Popovers in Gutenberg are managed with explicit z-index values, which can
255
+ * create situations where a select popup renders below another popover when
256
+ * you want it above.
256
257
  *
257
- * The `--wp-ui-select-z-index` CSS variable, available on the `Select.Popup` component,
258
- * is an escape hatch that can be used to override the z-index of a given `Select` popover
259
- * on a case-by-case basis.
258
+ * The `--wp-ui-select-z-index` CSS variable controls the z-index of the
259
+ * `Select` positioner. Override it either:
260
+ *
261
+ * - **Globally**, by setting the variable on `:root` or `body` (raises every
262
+ * `Select` popover in the page), or
263
+ * - **Per instance**, by passing a `Select.Portal` with a `style` (or
264
+ * `className`) to `Select.Popup`'s `portal` prop. The variable cascades
265
+ * from the portal wrapper to everything rendered inside it.
266
+ *
267
+ * This story demonstrates the per-instance approach.
260
268
  */
261
269
  export const WithCustomZIndex: Story = {
262
270
  name: 'With Custom z-index',
@@ -264,7 +272,13 @@ export const WithCustomZIndex: Story = {
264
272
  children: (
265
273
  <>
266
274
  <Select.Trigger />
267
- <Select.Popup style={ { '--wp-ui-select-z-index': '1000001' } }>
275
+ <Select.Popup
276
+ portal={
277
+ <Select.Portal
278
+ style={ { '--wp-ui-select-z-index': '9999' } }
279
+ />
280
+ }
281
+ >
268
282
  <Select.Item value="Item 1" />
269
283
  <Select.Item value="Item 2" />
270
284
  </Select.Popup>
@@ -31,8 +31,8 @@ describe( 'Select', () => {
31
31
  expect( itemRef.current ).toBeInstanceOf( HTMLDivElement );
32
32
  } );
33
33
 
34
- describe( 'container', () => {
35
- it( 'should render inside the container when provided', async () => {
34
+ describe( 'portal', () => {
35
+ it( 'should render inside the portal container when a custom target is provided', async () => {
36
36
  const user = userEvent.setup();
37
37
  const containerRef = createRef< HTMLDivElement >();
38
38
 
@@ -44,7 +44,11 @@ describe( 'Select', () => {
44
44
  ref={ containerRef }
45
45
  data-testid="custom-container"
46
46
  />
47
- <Select.Popup container={ containerRef }>
47
+ <Select.Popup
48
+ portal={
49
+ <Select.Portal container={ containerRef } />
50
+ }
51
+ >
48
52
  <Select.Item value="Item 1" />
49
53
  </Select.Popup>
50
54
  </Select.Root>
@@ -1,7 +1,11 @@
1
1
  import type { Select as _Select } from '@base-ui/react/select';
2
+ import type { ComponentPropsWithoutRef, ReactElement } from 'react';
3
+
2
4
  import type { ComponentProps } from '../../../utils/types';
3
5
  import type { InputLayoutProps } from '../input-layout/types';
4
6
 
7
+ export type PortalProps = ComponentPropsWithoutRef< typeof _Select.Portal >;
8
+
5
9
  // The second type parameter is the `multiple` flag (currently disabled).
6
10
  export type SelectRootProps = Omit<
7
11
  _Select.Root.Props< string, false >,
@@ -34,9 +38,12 @@ export type SelectPopupProps = ComponentProps< typeof _Select.Popup > & {
34
38
  */
35
39
  children?: React.ReactNode;
36
40
  /**
37
- * A parent element to render the portal into.
41
+ * Optional portal element, typically `<Select.Portal />` with custom
42
+ * `container`. When omitted, `Select.Popup` uses `Select.Portal` with
43
+ * default props. Do not pass `children` on the portal element; they would
44
+ * be ignored.
38
45
  */
39
- container?: _Select.Portal.Props[ 'container' ];
46
+ portal?: ReactElement< Omit< PortalProps, 'children' > >;
40
47
  };
41
48
 
42
49
  export type SelectItemProps = Omit<
package/src/index.ts CHANGED
@@ -5,6 +5,7 @@ export * as Collapsible from './collapsible';
5
5
  export * as CollapsibleCard from './collapsible-card';
6
6
  export * as AlertDialog from './alert-dialog';
7
7
  export * as Dialog from './dialog';
8
+ export * as Drawer from './drawer';
8
9
  export * as EmptyState from './empty-state';
9
10
  export * from './form';
10
11
  export * from './icon';
package/src/link/link.tsx CHANGED
@@ -20,20 +20,10 @@ export const Link = forwardRef< HTMLAnchorElement, LinkProps >( function Link(
20
20
  openInNewTab = false,
21
21
  render,
22
22
  className,
23
- onClick,
24
23
  ...props
25
24
  },
26
25
  ref
27
26
  ) {
28
- const isInternalAnchor = !! props.href?.startsWith( '#' );
29
-
30
- const handleClick = ( event: React.MouseEvent< HTMLAnchorElement > ) => {
31
- if ( openInNewTab && isInternalAnchor ) {
32
- event.preventDefault();
33
- }
34
- onClick?.( event );
35
- };
36
-
37
27
  const element = useRender( {
38
28
  render,
39
29
  defaultTagName: 'a',
@@ -46,27 +36,23 @@ export const Link = forwardRef< HTMLAnchorElement, LinkProps >( function Link(
46
36
  variant !== 'unstyled' && styles.link,
47
37
  variant !== 'unstyled' && styles[ `is-${ tone }` ],
48
38
  variant === 'unstyled' && styles[ 'is-unstyled' ],
49
- openInNewTab && styles[ 'has-link-icon' ],
50
39
  className
51
40
  ),
52
- onClick: handleClick,
53
41
  target: openInNewTab ? '_blank' : undefined,
54
- children: openInNewTab ? (
42
+ children: (
55
43
  <>
56
- <span className={ styles[ 'link-contents' ] }>
57
- { children }
58
- </span>
59
- <span
60
- className={ styles[ 'link-icon' ] }
61
- role="img"
62
- aria-label={
63
- /* translators: accessibility text appended to link text */
64
- __( '(opens in a new tab)' )
65
- }
66
- />
44
+ { children }
45
+ { openInNewTab && (
46
+ <span
47
+ className={ styles[ 'link-icon' ] }
48
+ role="img"
49
+ aria-label={
50
+ /* translators: accessibility text appended to link text */
51
+ __( '(opens in a new tab)' )
52
+ }
53
+ />
54
+ ) }
67
55
  </>
68
- ) : (
69
- children
70
56
  ),
71
57
  } ),
72
58
  } );
@@ -6,6 +6,7 @@ import { Text } from '../../text';
6
6
  const meta: Meta< typeof Link > = {
7
7
  title: 'Design System/Components/Link',
8
8
  component: Link,
9
+ tags: [ 'manifest' ],
9
10
  };
10
11
  export default meta;
11
12
 
@@ -66,9 +67,8 @@ export const Inline: Story = {
66
67
  };
67
68
 
68
69
  /**
69
- * When composing `Text` and `Link` via the `render` prop, the order matters:
70
- * - `<Text render={ <Link /> } />` renders an `<a>` element (Link's default tag wins).
71
- * - `<Link render={ <Text /> } />` renders a `<span>` element (Text's default tag wins).
70
+ * When composing `Text` and `Link` via the `render` prop, keep `Text` as the
71
+ * host and pass `Link` via `render` so the resulting element stays an `<a>`.
72
72
  */
73
73
  export const Standalone: Story = {
74
74
  args: {
@@ -80,13 +80,8 @@ export const Standalone: Story = {
80
80
  },
81
81
  },
82
82
  render: ( args ) => (
83
- <Stack direction="column" gap="md">
84
- <Text variant="body-md" render={ <Link { ...args } /> }>
85
- A standalone link with body-md typography
86
- </Text>
87
- <Text variant="body-sm" render={ <Link { ...args } /> }>
88
- A standalone link with body-sm typography
89
- </Text>
90
- </Stack>
83
+ <Text variant="body-md" render={ <Link { ...args } /> }>
84
+ A standalone link with body-md typography
85
+ </Text>
91
86
  ),
92
87
  };
@@ -3,7 +3,7 @@
3
3
  @layer wp-ui-components {
4
4
  .link {
5
5
  text-underline-offset: 0.2em;
6
- text-decoration-thickness: 0.5px;
6
+ text-decoration-thickness: from-font;
7
7
  }
8
8
 
9
9
  /* Brand tone */
@@ -46,26 +46,14 @@
46
46
  }
47
47
 
48
48
  /* Link icon pattern — arrow rendered via ::after pseudo-element to avoid
49
- * Twemoji replacement and text-selection issues. Root <a> gets
50
- * text-decoration:none; the link-contents span re-applies it.
51
- * text-underline-offset is inherited and propagates from .link
52
- * automatically. text-decoration-thickness and text-decoration-color
53
- * are NOT inherited, so they are explicitly redeclared on
54
- * .link-contents (the latter via `inherit` to carry the neutral
55
- * tone's custom color token through). */
56
- .has-link-icon {
57
- text-decoration: none;
58
- }
59
-
60
- .link-contents {
61
- text-decoration: underline;
62
- text-decoration-color: inherit;
63
- text-decoration-thickness: 0.5px;
64
- }
49
+ * Twemoji replacement and text-selection issues. The icon is an
50
+ * inline-block so the link underline stays scoped to the text. */
65
51
 
66
52
  .link-icon {
53
+ display: inline-block;
67
54
  margin-inline-start: var(--wpds-dimension-padding-xs);
68
55
  font-weight: var(--wpds-typography-font-weight-regular);
56
+ text-decoration: none;
69
57
  }
70
58
 
71
59
  .link-icon::after {
@@ -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
  }
@@ -64,11 +64,6 @@
64
64
 
65
65
  .action-link {
66
66
  flex-shrink: 0;
67
- font-family: var(--wpds-typography-font-family-body);
68
- font-size: var(--wpds-typography-font-size-md);
69
- font-weight: var(--wpds-typography-font-weight-regular);
70
- line-height: var(--wpds-typography-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,24 +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( { className, children, ...props }, ref ) {
12
+ function PopoverDescription( { children, ...props }, ref ) {
16
13
  return (
17
14
  <Text
18
15
  ref={ ref }
19
16
  variant="body-md"
20
17
  render={ <_Popover.Description { ...props } /> }
21
- className={ clsx( styles.description, className ) }
22
18
  >
23
19
  { children }
24
20
  </Text>