@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
@@ -1,55 +1,8 @@
1
1
  // packages/ui/src/popover/context.tsx
2
- import {
3
- createContext,
4
- useCallback,
5
- useContext,
6
- useEffect,
7
- useMemo,
8
- useRef
9
- } from "@wordpress/element";
10
- import { Fragment, jsx } from "react/jsx-runtime";
11
- var VALIDATION_ENABLED = process.env.NODE_ENV !== "production";
12
- var PopoverValidationContext = VALIDATION_ENABLED ? createContext(null) : null;
13
- function usePopoverValidationContextDev() {
14
- return useContext(PopoverValidationContext);
15
- }
16
- function usePopoverValidationContextProd() {
17
- return null;
18
- }
19
- var usePopoverValidationContext = VALIDATION_ENABLED ? usePopoverValidationContextDev : usePopoverValidationContextProd;
20
- function PopoverValidationProviderDev({
21
- children
22
- }) {
23
- const titleElementRef = useRef(null);
24
- const registerTitle = useCallback((element) => {
25
- titleElementRef.current = element;
26
- }, []);
27
- const contextValue = useMemo(
28
- () => ({ registerTitle }),
29
- [registerTitle]
30
- );
31
- useEffect(() => {
32
- const titleElement = titleElementRef.current;
33
- if (!titleElement) {
34
- throw new Error(
35
- "Popover: Missing <Popover.Title>. For accessibility, every popover requires a title. If needed, the title can be visually hidden but must not be omitted."
36
- );
37
- }
38
- const textContent = titleElement.textContent?.trim();
39
- if (!textContent) {
40
- throw new Error(
41
- "Popover: <Popover.Title> cannot be empty. Provide meaningful text content for the popover title."
42
- );
43
- }
44
- }, []);
45
- return /* @__PURE__ */ jsx(PopoverValidationContext.Provider, { value: contextValue, children });
46
- }
47
- function PopoverValidationProviderProd({
48
- children
49
- }) {
50
- return /* @__PURE__ */ jsx(Fragment, { children });
51
- }
52
- var PopoverValidationProvider = VALIDATION_ENABLED ? PopoverValidationProviderDev : PopoverValidationProviderProd;
2
+ import { createOverlayTitleValidation } from "../utils/create-overlay-title-validation.mjs";
3
+ var popoverTitleValidation = createOverlayTitleValidation("Popover");
4
+ var usePopoverValidationContext = popoverTitleValidation.useValidationContext;
5
+ var PopoverValidationProvider = popoverTitleValidation.ValidationProvider;
53
6
  export {
54
7
  PopoverValidationProvider,
55
8
  usePopoverValidationContext
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/popover/context.tsx"],
4
- "sourcesContent": ["import {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n} from '@wordpress/element';\n\n/**\n * Whether validation is enabled. This is a build-time constant that allows\n * bundlers to tree-shake all validation code in production builds.\n */\nconst VALIDATION_ENABLED = process.env.NODE_ENV !== 'production';\n\ntype PopoverValidationContextType = {\n\tregisterTitle: ( element: HTMLElement | null ) => void;\n};\n\nconst PopoverValidationContext = VALIDATION_ENABLED\n\t? createContext< PopoverValidationContextType | null >( null )\n\t: ( null as unknown as React.Context< PopoverValidationContextType | null > );\n\nfunction usePopoverValidationContextDev() {\n\treturn useContext( PopoverValidationContext );\n}\n\nfunction usePopoverValidationContextProd() {\n\treturn null;\n}\n\n/**\n * Hook to access the popover validation context.\n * Returns null in production or if not within a Popover.Popup.\n */\nexport const usePopoverValidationContext = VALIDATION_ENABLED\n\t? usePopoverValidationContextDev\n\t: usePopoverValidationContextProd;\n\n/**\n * Development-only provider that tracks whether Popover.Title is rendered.\n */\nfunction PopoverValidationProviderDev( {\n\tchildren,\n}: {\n\tchildren: React.ReactNode;\n} ) {\n\tconst titleElementRef = useRef< HTMLElement | null >( null );\n\n\tconst registerTitle = useCallback( ( element: HTMLElement | null ) => {\n\t\ttitleElementRef.current = element;\n\t}, [] );\n\n\tconst contextValue = useMemo(\n\t\t() => ( { registerTitle } ),\n\t\t[ registerTitle ]\n\t);\n\n\tuseEffect( () => {\n\t\tconst titleElement = titleElementRef.current;\n\n\t\tif ( ! titleElement ) {\n\t\t\tthrow new Error(\n\t\t\t\t'Popover: Missing <Popover.Title>. ' +\n\t\t\t\t\t'For accessibility, every popover requires a title. ' +\n\t\t\t\t\t'If needed, the title can be visually hidden but must not be omitted.'\n\t\t\t);\n\t\t}\n\n\t\tconst textContent = titleElement.textContent?.trim();\n\t\tif ( ! textContent ) {\n\t\t\tthrow new Error(\n\t\t\t\t'Popover: <Popover.Title> cannot be empty. ' +\n\t\t\t\t\t'Provide meaningful text content for the popover title.'\n\t\t\t);\n\t\t}\n\t}, [] );\n\n\treturn (\n\t\t<PopoverValidationContext.Provider value={ contextValue }>\n\t\t\t{ children }\n\t\t</PopoverValidationContext.Provider>\n\t);\n}\n\nfunction PopoverValidationProviderProd( {\n\tchildren,\n}: {\n\tchildren: React.ReactNode;\n} ) {\n\treturn <>{ children }</>;\n}\n\n/**\n * Provider component that validates Popover.Title presence in development mode.\n * In production, this component is a no-op and just renders children.\n */\nexport const PopoverValidationProvider = VALIDATION_ENABLED\n\t? PopoverValidationProviderDev\n\t: PopoverValidationProviderProd;\n"],
5
- "mappings": ";AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAwEL,SAWM,UAXN;AAlEF,IAAM,qBAAqB,QAAQ,IAAI,aAAa;AAMpD,IAAM,2BAA2B,qBAC9B,cAAsD,IAAK,IACzD;AAEL,SAAS,iCAAiC;AACzC,SAAO,WAAY,wBAAyB;AAC7C;AAEA,SAAS,kCAAkC;AAC1C,SAAO;AACR;AAMO,IAAM,8BAA8B,qBACxC,iCACA;AAKH,SAAS,6BAA8B;AAAA,EACtC;AACD,GAEI;AACH,QAAM,kBAAkB,OAA8B,IAAK;AAE3D,QAAM,gBAAgB,YAAa,CAAE,YAAiC;AACrE,oBAAgB,UAAU;AAAA,EAC3B,GAAG,CAAC,CAAE;AAEN,QAAM,eAAe;AAAA,IACpB,OAAQ,EAAE,cAAc;AAAA,IACxB,CAAE,aAAc;AAAA,EACjB;AAEA,YAAW,MAAM;AAChB,UAAM,eAAe,gBAAgB;AAErC,QAAK,CAAE,cAAe;AACrB,YAAM,IAAI;AAAA,QACT;AAAA,MAGD;AAAA,IACD;AAEA,UAAM,cAAc,aAAa,aAAa,KAAK;AACnD,QAAK,CAAE,aAAc;AACpB,YAAM,IAAI;AAAA,QACT;AAAA,MAED;AAAA,IACD;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,SACC,oBAAC,yBAAyB,UAAzB,EAAkC,OAAQ,cACxC,UACH;AAEF;AAEA,SAAS,8BAA+B;AAAA,EACvC;AACD,GAEI;AACH,SAAO,gCAAI,UAAU;AACtB;AAMO,IAAM,4BAA4B,qBACtC,+BACA;",
4
+ "sourcesContent": ["import { createOverlayTitleValidation } from '../utils/create-overlay-title-validation';\n\nconst popoverTitleValidation = createOverlayTitleValidation( 'Popover' );\n\n/**\n * Hook to access the popover validation context.\n * Returns null in production or if not within a Popover.Popup.\n */\nexport const usePopoverValidationContext =\n\tpopoverTitleValidation.useValidationContext;\n\n/**\n * Provider component that validates Popover.Title presence in development mode.\n * In production, this component is a no-op and just renders children.\n */\nexport const PopoverValidationProvider =\n\tpopoverTitleValidation.ValidationProvider;\n"],
5
+ "mappings": ";AAAA,SAAS,oCAAoC;AAE7C,IAAM,yBAAyB,6BAA8B,SAAU;AAMhE,IAAM,8BACZ,uBAAuB;AAMjB,IAAM,4BACZ,uBAAuB;",
6
6
  "names": []
7
7
  }
@@ -1,29 +1,16 @@
1
1
  // packages/ui/src/popover/description.tsx
2
2
  import { Popover as _Popover } from "@base-ui/react/popover";
3
- import clsx from "clsx";
4
3
  import { forwardRef } from "@wordpress/element";
5
4
  import { Text } from "../text/index.mjs";
6
-
7
- // packages/ui/src/popover/style.module.css
8
- if (typeof document !== "undefined" && process.env.NODE_ENV !== "test" && !document.head.querySelector("style[data-wp-hash='3b666a02be']")) {
9
- const style = document.createElement("style");
10
- style.setAttribute("data-wp-hash", "3b666a02be");
11
- style.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._10450722b9676f78__positioner{z-index:var(--wp-ui-popover-z-index,initial)}._84e8f597bcf683b8__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral-weak,#e0e0e0);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-font-size-md,13px);line-height:var(--wpds-font-line-height-md,24px);outline:0;padding:var(--wpds-dimension-padding-lg,16px)}.ca05d3eb89321fcd__arrow{display:flex;&[data-side=top]{bottom:-8px;rotate:180deg}&[data-side=bottom]{rotate:0deg;top:-8px}&[data-side=left]{inset-inline-end:-13px;rotate:90deg}&[data-side=right]{inset-inline-start:-13px;rotate:-90deg}}._12d8edd9eb946b5f__arrow-fill{fill:var(--wpds-color-bg-surface-neutral-strong,#fff)}._6ddab482bd929dad__arrow-stroke{fill:var(--wpds-color-stroke-surface-neutral-weak,#e0e0e0)}._42cb9ed02a2f0782__description{color:var(--wpds-color-fg-content-neutral-weak,#6d6d6d)}.e4d544aa033f05c6__backdrop{background-color:#00000026;inset:0;position:fixed;z-index:var(--wp-ui-popover-z-index,initial)}}'));
12
- document.head.appendChild(style);
13
- }
14
- var style_default = { "positioner": "_10450722b9676f78__positioner", "popup": "_84e8f597bcf683b8__popup", "arrow": "ca05d3eb89321fcd__arrow", "arrow-fill": "_12d8edd9eb946b5f__arrow-fill", "arrow-stroke": "_6ddab482bd929dad__arrow-stroke", "description": "_42cb9ed02a2f0782__description", "backdrop": "e4d544aa033f05c6__backdrop" };
15
-
16
- // packages/ui/src/popover/description.tsx
17
5
  import { jsx } from "react/jsx-runtime";
18
6
  var Description = forwardRef(
19
- function PopoverDescription({ className, children, render, ...props }, ref) {
7
+ function PopoverDescription({ children, ...props }, ref) {
20
8
  return /* @__PURE__ */ jsx(
21
9
  Text,
22
10
  {
23
11
  ref,
24
12
  variant: "body-md",
25
- render: /* @__PURE__ */ jsx(_Popover.Description, { render, ...props }),
26
- className: clsx(style_default.description, className),
13
+ render: /* @__PURE__ */ jsx(_Popover.Description, { ...props }),
27
14
  children
28
15
  }
29
16
  );
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/popover/description.tsx", "../../src/popover/style.module.css"],
4
- "sourcesContent": ["import { Popover as _Popover } from '@base-ui/react/popover';\nimport clsx from 'clsx';\nimport { forwardRef } from '@wordpress/element';\nimport { Text } from '../text';\nimport styles from './style.module.css';\nimport type { DescriptionProps } from './types';\n\n/**\n * Renders an optional paragraph that describes the popover content.\n *\n * The rendered element is linked to the popup via `aria-describedby`.\n * Uses the `body-md` text variant by default.\n */\nconst Description = forwardRef< HTMLParagraphElement, DescriptionProps >(\n\tfunction PopoverDescription(\n\t\t{ className, children, render, ...props },\n\t\tref\n\t) {\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ ref }\n\t\t\t\tvariant=\"body-md\"\n\t\t\t\trender={\n\t\t\t\t\t<_Popover.Description render={ render } { ...props } />\n\t\t\t\t}\n\t\t\t\tclassName={ clsx( styles.description, className ) }\n\t\t\t>\n\t\t\t\t{ children }\n\t\t\t</Text>\n\t\t);\n\t}\n);\n\nexport { Description };\n", "if (typeof document !== 'undefined' && process.env.NODE_ENV !== 'test' && !document.head.querySelector(\"style[data-wp-hash='3b666a02be']\")) {\n\tconst style = document.createElement(\"style\");\n\tstyle.setAttribute(\"data-wp-hash\", \"3b666a02be\");\n\tstyle.appendChild(document.createTextNode(\"@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._10450722b9676f78__positioner{z-index:var(--wp-ui-popover-z-index,initial)}._84e8f597bcf683b8__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral-weak,#e0e0e0);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-font-family-body,-apple-system,system-ui,\\\"Segoe UI\\\",\\\"Roboto\\\",\\\"Oxygen-Sans\\\",\\\"Ubuntu\\\",\\\"Cantarell\\\",\\\"Helvetica Neue\\\",sans-serif);font-size:var(--wpds-font-size-md,13px);line-height:var(--wpds-font-line-height-md,24px);outline:0;padding:var(--wpds-dimension-padding-lg,16px)}.ca05d3eb89321fcd__arrow{display:flex;&[data-side=top]{bottom:-8px;rotate:180deg}&[data-side=bottom]{rotate:0deg;top:-8px}&[data-side=left]{inset-inline-end:-13px;rotate:90deg}&[data-side=right]{inset-inline-start:-13px;rotate:-90deg}}._12d8edd9eb946b5f__arrow-fill{fill:var(--wpds-color-bg-surface-neutral-strong,#fff)}._6ddab482bd929dad__arrow-stroke{fill:var(--wpds-color-stroke-surface-neutral-weak,#e0e0e0)}._42cb9ed02a2f0782__description{color:var(--wpds-color-fg-content-neutral-weak,#6d6d6d)}.e4d544aa033f05c6__backdrop{background-color:#00000026;inset:0;position:fixed;z-index:var(--wp-ui-popover-z-index,initial)}}\"));\n\tdocument.head.appendChild(style);\n}\nexport default {\"positioner\":\"_10450722b9676f78__positioner\",\"popup\":\"_84e8f597bcf683b8__popup\",\"arrow\":\"ca05d3eb89321fcd__arrow\",\"arrow-fill\":\"_12d8edd9eb946b5f__arrow-fill\",\"arrow-stroke\":\"_6ddab482bd929dad__arrow-stroke\",\"description\":\"_42cb9ed02a2f0782__description\",\"backdrop\":\"e4d544aa033f05c6__backdrop\"};\n"],
5
- "mappings": ";AAAA,SAAS,WAAW,gBAAgB;AACpC,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAC3B,SAAS,YAAY;;;ACHrB,IAAI,OAAO,aAAa,eAAe,QAAQ,IAAI,aAAa,UAAU,CAAC,SAAS,KAAK,cAAc,kCAAkC,GAAG;AAC3I,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,aAAa,gBAAgB,YAAY;AAC/C,QAAM,YAAY,SAAS,eAAe,0+CAAs/C,CAAC;AACjiD,WAAS,KAAK,YAAY,KAAK;AAChC;AACA,IAAO,gBAAQ,EAAC,cAAa,iCAAgC,SAAQ,4BAA2B,SAAQ,2BAA0B,cAAa,iCAAgC,gBAAe,mCAAkC,eAAc,kCAAiC,YAAW,6BAA4B;;;ADiBjT;AAVL,IAAM,cAAc;AAAA,EACnB,SAAS,mBACR,EAAE,WAAW,UAAU,QAAQ,GAAG,MAAM,GACxC,KACC;AACD,WACC;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,SAAQ;AAAA,QACR,QACC,oBAAC,SAAS,aAAT,EAAqB,QAAoB,GAAG,OAAQ;AAAA,QAEtD,WAAY,KAAM,cAAO,aAAa,SAAU;AAAA,QAE9C;AAAA;AAAA,IACH;AAAA,EAEF;AACD;",
3
+ "sources": ["../../src/popover/description.tsx"],
4
+ "sourcesContent": ["import { Popover as _Popover } from '@base-ui/react/popover';\nimport { forwardRef } from '@wordpress/element';\nimport { Text } from '../text';\nimport type { DescriptionProps } from './types';\n\n/**\n * Renders an optional paragraph that describes the popover content.\n *\n * The rendered element is linked to the popup via `aria-describedby`.\n */\nconst Description = forwardRef< HTMLParagraphElement, DescriptionProps >(\n\tfunction PopoverDescription( { children, ...props }, ref ) {\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ ref }\n\t\t\t\tvariant=\"body-md\"\n\t\t\t\trender={ <_Popover.Description { ...props } /> }\n\t\t\t>\n\t\t\t\t{ children }\n\t\t\t</Text>\n\t\t);\n\t}\n);\n\nexport { Description };\n"],
5
+ "mappings": ";AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AAcR;AANb,IAAM,cAAc;AAAA,EACnB,SAAS,mBAAoB,EAAE,UAAU,GAAG,MAAM,GAAG,KAAM;AAC1D,WACC;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,SAAQ;AAAA,QACR,QAAS,oBAAC,SAAS,aAAT,EAAuB,GAAG,OAAQ;AAAA,QAE1C;AAAA;AAAA,IACH;AAAA,EAEF;AACD;",
6
6
  "names": []
7
7
  }
@@ -3,6 +3,7 @@ import { Arrow } from "./arrow.mjs";
3
3
  import { Close } from "./close.mjs";
4
4
  import { Description } from "./description.mjs";
5
5
  import { Popup } from "./popup.mjs";
6
+ import { Portal } from "./portal.mjs";
6
7
  import { Root } from "./root.mjs";
7
8
  import { Title } from "./title.mjs";
8
9
  import { Trigger } from "./trigger.mjs";
@@ -11,6 +12,7 @@ export {
11
12
  Close,
12
13
  Description,
13
14
  Popup,
15
+ Portal,
14
16
  Root,
15
17
  Title,
16
18
  Trigger
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/popover/index.ts"],
4
- "sourcesContent": ["import { Arrow } from './arrow';\nimport { Close } from './close';\nimport { Description } from './description';\nimport { Popup } from './popup';\nimport { Root } from './root';\nimport { Title } from './title';\nimport { Trigger } from './trigger';\n\nexport { Arrow, Close, Description, Popup, Root, Title, Trigger };\n"],
5
- "mappings": ";AAAA,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAC5B,SAAS,aAAa;AACtB,SAAS,YAAY;AACrB,SAAS,aAAa;AACtB,SAAS,eAAe;",
4
+ "sourcesContent": ["import { Arrow } from './arrow';\nimport { Close } from './close';\nimport { Description } from './description';\nimport { Popup } from './popup';\nimport { Portal } from './portal';\nimport { Root } from './root';\nimport { Title } from './title';\nimport { Trigger } from './trigger';\n\nexport { Arrow, Close, Description, Portal, Popup, Root, Title, Trigger };\n"],
5
+ "mappings": ";AAAA,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAC5B,SAAS,aAAa;AACtB,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,aAAa;AACtB,SAAS,eAAe;",
6
6
  "names": []
7
7
  }
@@ -19,19 +19,21 @@ var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
19
19
 
20
20
  // packages/ui/src/popover/popup.tsx
21
21
  import { useDeprioritizedInitialFocus } from "../utils/use-deprioritized-initial-focus.mjs";
22
+ import { renderPortalWithChildren } from "../utils/render-portal-with-children.mjs";
22
23
  import { PopoverValidationProvider } from "./context.mjs";
24
+ import { Portal } from "./portal.mjs";
23
25
 
24
26
  // packages/ui/src/popover/style.module.css
25
- if (typeof document !== "undefined" && process.env.NODE_ENV !== "test" && !document.head.querySelector("style[data-wp-hash='3b666a02be']")) {
27
+ if (typeof document !== "undefined" && process.env.NODE_ENV !== "test" && !document.head.querySelector("style[data-wp-hash='cc851ac208']")) {
26
28
  const style = document.createElement("style");
27
- style.setAttribute("data-wp-hash", "3b666a02be");
28
- style.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._10450722b9676f78__positioner{z-index:var(--wp-ui-popover-z-index,initial)}._84e8f597bcf683b8__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral-weak,#e0e0e0);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-font-size-md,13px);line-height:var(--wpds-font-line-height-md,24px);outline:0;padding:var(--wpds-dimension-padding-lg,16px)}.ca05d3eb89321fcd__arrow{display:flex;&[data-side=top]{bottom:-8px;rotate:180deg}&[data-side=bottom]{rotate:0deg;top:-8px}&[data-side=left]{inset-inline-end:-13px;rotate:90deg}&[data-side=right]{inset-inline-start:-13px;rotate:-90deg}}._12d8edd9eb946b5f__arrow-fill{fill:var(--wpds-color-bg-surface-neutral-strong,#fff)}._6ddab482bd929dad__arrow-stroke{fill:var(--wpds-color-stroke-surface-neutral-weak,#e0e0e0)}._42cb9ed02a2f0782__description{color:var(--wpds-color-fg-content-neutral-weak,#6d6d6d)}.e4d544aa033f05c6__backdrop{background-color:#00000026;inset:0;position:fixed;z-index:var(--wp-ui-popover-z-index,initial)}}'));
29
+ style.setAttribute("data-wp-hash", "cc851ac208");
30
+ style.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._10450722b9676f78__positioner{z-index:var(--wp-ui-popover-z-index,initial)}._84e8f597bcf683b8__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--wpds-typography-line-height-md,24px);outline:0;padding:var(--wpds-dimension-padding-lg,16px)}.e4d544aa033f05c6__backdrop~* ._84e8f597bcf683b8__popup{border-color:#0000}@media (forced-colors:active){._84e8f597bcf683b8__popup,.e4d544aa033f05c6__backdrop~* ._84e8f597bcf683b8__popup{border-color:CanvasText}}.ca05d3eb89321fcd__arrow{display:flex;&[data-side=top]{bottom:-8px;rotate:180deg}&[data-side=bottom]{rotate:0deg;top:-8px}&[data-side=left]{inset-inline-end:-13px;rotate:90deg}&[data-side=right]{inset-inline-start:-13px;rotate:-90deg}}._12d8edd9eb946b5f__arrow-fill{fill:var(--wpds-color-bg-surface-neutral-strong,#fff)}._6ddab482bd929dad__arrow-stroke{fill:var(--wpds-color-stroke-surface-neutral,#dbdbdb)}._6d7e4729cd96960e__title{--_gcd-heading-color:var(--wpds-color-fg-content-neutral,#1e1e1e);color:var(--wpds-color-fg-content-neutral,#1e1e1e)}.e4d544aa033f05c6__backdrop{background-color:#00000026;inset:0;position:fixed;z-index:var(--wp-ui-popover-z-index,initial)}}'));
29
31
  document.head.appendChild(style);
30
32
  }
31
- var style_default = { "positioner": "_10450722b9676f78__positioner", "popup": "_84e8f597bcf683b8__popup", "arrow": "ca05d3eb89321fcd__arrow", "arrow-fill": "_12d8edd9eb946b5f__arrow-fill", "arrow-stroke": "_6ddab482bd929dad__arrow-stroke", "description": "_42cb9ed02a2f0782__description", "backdrop": "e4d544aa033f05c6__backdrop" };
33
+ var style_default = { "positioner": "_10450722b9676f78__positioner", "popup": "_84e8f597bcf683b8__popup", "backdrop": "e4d544aa033f05c6__backdrop", "arrow": "ca05d3eb89321fcd__arrow", "arrow-fill": "_12d8edd9eb946b5f__arrow-fill", "arrow-stroke": "_6ddab482bd929dad__arrow-stroke", "title": "_6d7e4729cd96960e__title" };
32
34
 
33
35
  // packages/ui/src/popover/popup.tsx
34
- import { jsx, jsxs } from "react/jsx-runtime";
36
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
35
37
  var ThemeProvider = unlock(themePrivateApis).ThemeProvider;
36
38
  var CLOSE_ATTR = "data-wp-ui-popover-close";
37
39
  var Popup = forwardRef(function PopoverPopup({
@@ -46,19 +48,18 @@ var Popup = forwardRef(function PopoverPopup({
46
48
  collisionAvoidance,
47
49
  collisionBoundary,
48
50
  collisionPadding,
49
- container,
51
+ portal,
50
52
  finalFocus,
51
53
  initialFocus,
52
54
  side = "bottom",
53
55
  sideOffset = 8,
54
56
  sticky,
55
- style,
56
57
  variant = "default",
57
58
  ...props
58
59
  }, ref) {
59
60
  const { resolvedInitialFocus, popupRef } = useDeprioritizedInitialFocus({
60
61
  initialFocus,
61
- deprioritizedAttribute: CLOSE_ATTR
62
+ deprioritizedAttributes: [CLOSE_ATTR]
62
63
  });
63
64
  const mergedPopupRef = useMergeRefs([ref, popupRef]);
64
65
  const backdropElement = backdrop ? /* @__PURE__ */ jsx(_Popover.Backdrop, { className: style_default.backdrop }) : null;
@@ -75,29 +76,28 @@ var Popup = forwardRef(function PopoverPopup({
75
76
  side,
76
77
  sideOffset,
77
78
  sticky,
78
- style,
79
- className: clsx(
80
- resets_default["box-sizing"],
81
- style_default.positioner,
82
- className
83
- ),
79
+ className: clsx(resets_default["box-sizing"], style_default.positioner),
84
80
  children: /* @__PURE__ */ jsx(ThemeProvider, { children: /* @__PURE__ */ jsx(
85
81
  _Popover.Popup,
86
82
  {
87
83
  ref: mergedPopupRef,
88
84
  initialFocus: resolvedInitialFocus,
89
85
  finalFocus,
90
- className: clsx(variant !== "unstyled" && style_default.popup),
86
+ className: clsx(
87
+ variant !== "unstyled" && style_default.popup,
88
+ className
89
+ ),
91
90
  ...props,
92
91
  children: /* @__PURE__ */ jsx(PopoverValidationProvider, { children })
93
92
  }
94
93
  ) })
95
94
  }
96
95
  );
97
- return /* @__PURE__ */ jsxs(_Popover.Portal, { container, children: [
96
+ const portalChildren = /* @__PURE__ */ jsxs(Fragment, { children: [
98
97
  backdropElement,
99
98
  positioner
100
99
  ] });
100
+ return renderPortalWithChildren(portal, /* @__PURE__ */ jsx(Portal, {}), portalChildren);
101
101
  });
102
102
  export {
103
103
  Popup
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/popover/popup.tsx", "../../src/utils/css/resets.module.css", "../../src/popover/style.module.css"],
4
- "sourcesContent": ["import { Popover as _Popover } from '@base-ui/react/popover';\nimport clsx from 'clsx';\nimport { forwardRef } from '@wordpress/element';\nimport { useMergeRefs } from '@wordpress/compose';\nimport {\n\ttype ThemeProvider as ThemeProviderType,\n\tprivateApis as themePrivateApis,\n} from '@wordpress/theme';\nimport { unlock } from '../lock-unlock';\nimport resetStyles from '../utils/css/resets.module.css';\nimport { useDeprioritizedInitialFocus } from '../utils/use-deprioritized-initial-focus';\nimport { PopoverValidationProvider } from './context';\nimport styles from './style.module.css';\nimport type { PopupProps } from './types';\n\nconst ThemeProvider: typeof ThemeProviderType =\n\tunlock( themePrivateApis ).ThemeProvider;\n\nconst CLOSE_ATTR = 'data-wp-ui-popover-close';\n\n/**\n * Renders the floating popup container for the popover content.\n *\n * Handles portal rendering, positioning relative to the anchor, collision\n * avoidance, focus management, and optional backdrop. Supply a `container`\n * element for cross-document scenarios such as iframes.\n */\nconst Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(\n\t{\n\t\talign = 'center',\n\t\talignOffset,\n\t\tanchor,\n\t\t// Matches the popup's border-radius (--wpds-border-radius-md).\n\t\tarrowPadding = 8,\n\t\tbackdrop = false,\n\t\tchildren,\n\t\tclassName,\n\t\tcollisionAvoidance,\n\t\tcollisionBoundary,\n\t\tcollisionPadding,\n\t\tcontainer,\n\t\tfinalFocus,\n\t\tinitialFocus,\n\t\tside = 'bottom',\n\t\tsideOffset = 8,\n\t\tsticky,\n\t\tstyle,\n\t\tvariant = 'default',\n\t\t...props\n\t},\n\tref\n) {\n\tconst { resolvedInitialFocus, popupRef } = useDeprioritizedInitialFocus( {\n\t\tinitialFocus,\n\t\tdeprioritizedAttribute: CLOSE_ATTR,\n\t} );\n\tconst mergedPopupRef = useMergeRefs( [ ref, popupRef ] );\n\n\tconst backdropElement = backdrop ? (\n\t\t<_Popover.Backdrop className={ styles.backdrop } />\n\t) : null;\n\n\tconst positioner = (\n\t\t<_Popover.Positioner\n\t\t\talign={ align }\n\t\t\talignOffset={ alignOffset }\n\t\t\tanchor={ anchor }\n\t\t\tarrowPadding={ arrowPadding }\n\t\t\tcollisionAvoidance={ collisionAvoidance }\n\t\t\tcollisionBoundary={ collisionBoundary }\n\t\t\tcollisionPadding={ collisionPadding }\n\t\t\tside={ side }\n\t\t\tsideOffset={ sideOffset }\n\t\t\tsticky={ sticky }\n\t\t\tstyle={ style }\n\t\t\tclassName={ clsx(\n\t\t\t\tresetStyles[ 'box-sizing' ],\n\t\t\t\tstyles.positioner,\n\t\t\t\tclassName\n\t\t\t) }\n\t\t>\n\t\t\t<ThemeProvider>\n\t\t\t\t<_Popover.Popup\n\t\t\t\t\tref={ mergedPopupRef }\n\t\t\t\t\tinitialFocus={ resolvedInitialFocus }\n\t\t\t\t\tfinalFocus={ finalFocus }\n\t\t\t\t\tclassName={ clsx( variant !== 'unstyled' && styles.popup ) }\n\t\t\t\t\t{ ...props }\n\t\t\t\t>\n\t\t\t\t\t<PopoverValidationProvider>\n\t\t\t\t\t\t{ children }\n\t\t\t\t\t</PopoverValidationProvider>\n\t\t\t\t</_Popover.Popup>\n\t\t\t</ThemeProvider>\n\t\t</_Popover.Positioner>\n\t);\n\n\treturn (\n\t\t<_Popover.Portal container={ container }>\n\t\t\t{ backdropElement }\n\t\t\t{ positioner }\n\t\t</_Popover.Portal>\n\t);\n} );\n\nexport { Popup };\n", "if (typeof document !== 'undefined' && process.env.NODE_ENV !== 'test' && !document.head.querySelector(\"style[data-wp-hash='e3ae230cea']\")) {\n\tconst style = document.createElement(\"style\");\n\tstyle.setAttribute(\"data-wp-hash\", \"e3ae230cea\");\n\tstyle.appendChild(document.createTextNode(\"@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}\"));\n\tdocument.head.appendChild(style);\n}\nexport default {\"box-sizing\":\"_336cd3e4e743482f__box-sizing\"};\n", "if (typeof document !== 'undefined' && process.env.NODE_ENV !== 'test' && !document.head.querySelector(\"style[data-wp-hash='3b666a02be']\")) {\n\tconst style = document.createElement(\"style\");\n\tstyle.setAttribute(\"data-wp-hash\", \"3b666a02be\");\n\tstyle.appendChild(document.createTextNode(\"@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._10450722b9676f78__positioner{z-index:var(--wp-ui-popover-z-index,initial)}._84e8f597bcf683b8__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral-weak,#e0e0e0);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-font-family-body,-apple-system,system-ui,\\\"Segoe UI\\\",\\\"Roboto\\\",\\\"Oxygen-Sans\\\",\\\"Ubuntu\\\",\\\"Cantarell\\\",\\\"Helvetica Neue\\\",sans-serif);font-size:var(--wpds-font-size-md,13px);line-height:var(--wpds-font-line-height-md,24px);outline:0;padding:var(--wpds-dimension-padding-lg,16px)}.ca05d3eb89321fcd__arrow{display:flex;&[data-side=top]{bottom:-8px;rotate:180deg}&[data-side=bottom]{rotate:0deg;top:-8px}&[data-side=left]{inset-inline-end:-13px;rotate:90deg}&[data-side=right]{inset-inline-start:-13px;rotate:-90deg}}._12d8edd9eb946b5f__arrow-fill{fill:var(--wpds-color-bg-surface-neutral-strong,#fff)}._6ddab482bd929dad__arrow-stroke{fill:var(--wpds-color-stroke-surface-neutral-weak,#e0e0e0)}._42cb9ed02a2f0782__description{color:var(--wpds-color-fg-content-neutral-weak,#6d6d6d)}.e4d544aa033f05c6__backdrop{background-color:#00000026;inset:0;position:fixed;z-index:var(--wp-ui-popover-z-index,initial)}}\"));\n\tdocument.head.appendChild(style);\n}\nexport default {\"positioner\":\"_10450722b9676f78__positioner\",\"popup\":\"_84e8f597bcf683b8__popup\",\"arrow\":\"ca05d3eb89321fcd__arrow\",\"arrow-fill\":\"_12d8edd9eb946b5f__arrow-fill\",\"arrow-stroke\":\"_6ddab482bd929dad__arrow-stroke\",\"description\":\"_42cb9ed02a2f0782__description\",\"backdrop\":\"e4d544aa033f05c6__backdrop\"};\n"],
5
- "mappings": ";AAAA,SAAS,WAAW,gBAAgB;AACpC,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B;AAAA,EAEC,eAAe;AAAA,OACT;AACP,SAAS,cAAc;;;ACRvB,IAAI,OAAO,aAAa,eAAe,QAAQ,IAAI,aAAa,UAAU,CAAC,SAAS,KAAK,cAAc,kCAAkC,GAAG;AAC3I,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,aAAa,gBAAgB,YAAY;AAC/C,QAAM,YAAY,SAAS,eAAe,kMAAkM,CAAC;AAC7O,WAAS,KAAK,YAAY,KAAK;AAChC;AACA,IAAO,iBAAQ,EAAC,cAAa,gCAA+B;;;ADI5D,SAAS,oCAAoC;AAC7C,SAAS,iCAAiC;;;AEX1C,IAAI,OAAO,aAAa,eAAe,QAAQ,IAAI,aAAa,UAAU,CAAC,SAAS,KAAK,cAAc,kCAAkC,GAAG;AAC3I,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,aAAa,gBAAgB,YAAY;AAC/C,QAAM,YAAY,SAAS,eAAe,0+CAAs/C,CAAC;AACjiD,WAAS,KAAK,YAAY,KAAK;AAChC;AACA,IAAO,gBAAQ,EAAC,cAAa,iCAAgC,SAAQ,4BAA2B,SAAQ,2BAA0B,cAAa,iCAAgC,gBAAe,mCAAkC,eAAc,kCAAiC,YAAW,6BAA4B;;;AFqDpT,cAuCA,YAvCA;AA5CF,IAAM,gBACL,OAAQ,gBAAiB,EAAE;AAE5B,IAAM,aAAa;AASnB,IAAM,QAAQ,WAA0C,SAAS,aAChE;AAAA,EACC,QAAQ;AAAA,EACR;AAAA,EACA;AAAA;AAAA,EAEA,eAAe;AAAA,EACf,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACJ,GACA,KACC;AACD,QAAM,EAAE,sBAAsB,SAAS,IAAI,6BAA8B;AAAA,IACxE;AAAA,IACA,wBAAwB;AAAA,EACzB,CAAE;AACF,QAAM,iBAAiB,aAAc,CAAE,KAAK,QAAS,CAAE;AAEvD,QAAM,kBAAkB,WACvB,oBAAC,SAAS,UAAT,EAAkB,WAAY,cAAO,UAAW,IAC9C;AAEJ,QAAM,aACL;AAAA,IAAC,SAAS;AAAA,IAAT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAY;AAAA,QACX,eAAa,YAAa;AAAA,QAC1B,cAAO;AAAA,QACP;AAAA,MACD;AAAA,MAEA,8BAAC,iBACA;AAAA,QAAC,SAAS;AAAA,QAAT;AAAA,UACA,KAAM;AAAA,UACN,cAAe;AAAA,UACf;AAAA,UACA,WAAY,KAAM,YAAY,cAAc,cAAO,KAAM;AAAA,UACvD,GAAG;AAAA,UAEL,8BAAC,6BACE,UACH;AAAA;AAAA,MACD,GACD;AAAA;AAAA,EACD;AAGD,SACC,qBAAC,SAAS,QAAT,EAAgB,WACd;AAAA;AAAA,IACA;AAAA,KACH;AAEF,CAAE;",
4
+ "sourcesContent": ["import { Popover as _Popover } from '@base-ui/react/popover';\nimport clsx from 'clsx';\nimport { forwardRef } from '@wordpress/element';\nimport { useMergeRefs } from '@wordpress/compose';\nimport {\n\ttype ThemeProvider as ThemeProviderType,\n\tprivateApis as themePrivateApis,\n} from '@wordpress/theme';\nimport { unlock } from '../lock-unlock';\nimport resetStyles from '../utils/css/resets.module.css';\nimport { useDeprioritizedInitialFocus } from '../utils/use-deprioritized-initial-focus';\nimport { renderPortalWithChildren } from '../utils/render-portal-with-children';\nimport { PopoverValidationProvider } from './context';\nimport { Portal } from './portal';\nimport styles from './style.module.css';\nimport type { PopupProps } from './types';\n\nconst ThemeProvider: typeof ThemeProviderType =\n\tunlock( themePrivateApis ).ThemeProvider;\n\nconst CLOSE_ATTR = 'data-wp-ui-popover-close';\n\n/**\n * Renders the floating popup container for the popover content.\n *\n * Handles portal rendering, positioning relative to the anchor, collision\n * avoidance, focus management, and optional backdrop. Use\n * `portal={ <Popover.Portal container={ ... } /> }` for cross-document\n * scenarios such as iframes.\n */\nconst Popup = forwardRef< HTMLDivElement, PopupProps >( function PopoverPopup(\n\t{\n\t\talign = 'center',\n\t\talignOffset,\n\t\tanchor,\n\t\t// Matches the popup's border-radius (--wpds-border-radius-md).\n\t\tarrowPadding = 8,\n\t\tbackdrop = false,\n\t\tchildren,\n\t\tclassName,\n\t\tcollisionAvoidance,\n\t\tcollisionBoundary,\n\t\tcollisionPadding,\n\t\tportal,\n\t\tfinalFocus,\n\t\tinitialFocus,\n\t\tside = 'bottom',\n\t\tsideOffset = 8,\n\t\tsticky,\n\t\tvariant = 'default',\n\t\t...props\n\t},\n\tref\n) {\n\tconst { resolvedInitialFocus, popupRef } = useDeprioritizedInitialFocus( {\n\t\tinitialFocus,\n\t\tdeprioritizedAttributes: [ CLOSE_ATTR ],\n\t} );\n\tconst mergedPopupRef = useMergeRefs( [ ref, popupRef ] );\n\n\tconst backdropElement = backdrop ? (\n\t\t<_Popover.Backdrop className={ styles.backdrop } />\n\t) : null;\n\n\tconst positioner = (\n\t\t<_Popover.Positioner\n\t\t\talign={ align }\n\t\t\talignOffset={ alignOffset }\n\t\t\tanchor={ anchor }\n\t\t\tarrowPadding={ arrowPadding }\n\t\t\tcollisionAvoidance={ collisionAvoidance }\n\t\t\tcollisionBoundary={ collisionBoundary }\n\t\t\tcollisionPadding={ collisionPadding }\n\t\t\tside={ side }\n\t\t\tsideOffset={ sideOffset }\n\t\t\tsticky={ sticky }\n\t\t\tclassName={ clsx( resetStyles[ 'box-sizing' ], styles.positioner ) }\n\t\t>\n\t\t\t<ThemeProvider>\n\t\t\t\t<_Popover.Popup\n\t\t\t\t\tref={ mergedPopupRef }\n\t\t\t\t\tinitialFocus={ resolvedInitialFocus }\n\t\t\t\t\tfinalFocus={ finalFocus }\n\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\tvariant !== 'unstyled' && styles.popup,\n\t\t\t\t\t\tclassName\n\t\t\t\t\t) }\n\t\t\t\t\t{ ...props }\n\t\t\t\t>\n\t\t\t\t\t<PopoverValidationProvider>\n\t\t\t\t\t\t{ children }\n\t\t\t\t\t</PopoverValidationProvider>\n\t\t\t\t</_Popover.Popup>\n\t\t\t</ThemeProvider>\n\t\t</_Popover.Positioner>\n\t);\n\n\tconst portalChildren = (\n\t\t<>\n\t\t\t{ backdropElement }\n\t\t\t{ positioner }\n\t\t</>\n\t);\n\n\treturn renderPortalWithChildren( portal, <Portal />, portalChildren );\n} );\n\nexport { Popup };\n", "if (typeof document !== 'undefined' && process.env.NODE_ENV !== 'test' && !document.head.querySelector(\"style[data-wp-hash='e3ae230cea']\")) {\n\tconst style = document.createElement(\"style\");\n\tstyle.setAttribute(\"data-wp-hash\", \"e3ae230cea\");\n\tstyle.appendChild(document.createTextNode(\"@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}\"));\n\tdocument.head.appendChild(style);\n}\nexport default {\"box-sizing\":\"_336cd3e4e743482f__box-sizing\"};\n", "if (typeof document !== 'undefined' && process.env.NODE_ENV !== 'test' && !document.head.querySelector(\"style[data-wp-hash='cc851ac208']\")) {\n\tconst style = document.createElement(\"style\");\n\tstyle.setAttribute(\"data-wp-hash\", \"cc851ac208\");\n\tstyle.appendChild(document.createTextNode(\"@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._10450722b9676f78__positioner{z-index:var(--wp-ui-popover-z-index,initial)}._84e8f597bcf683b8__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,\\\"Segoe UI\\\",\\\"Roboto\\\",\\\"Oxygen-Sans\\\",\\\"Ubuntu\\\",\\\"Cantarell\\\",\\\"Helvetica Neue\\\",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--wpds-typography-line-height-md,24px);outline:0;padding:var(--wpds-dimension-padding-lg,16px)}.e4d544aa033f05c6__backdrop~* ._84e8f597bcf683b8__popup{border-color:#0000}@media (forced-colors:active){._84e8f597bcf683b8__popup,.e4d544aa033f05c6__backdrop~* ._84e8f597bcf683b8__popup{border-color:CanvasText}}.ca05d3eb89321fcd__arrow{display:flex;&[data-side=top]{bottom:-8px;rotate:180deg}&[data-side=bottom]{rotate:0deg;top:-8px}&[data-side=left]{inset-inline-end:-13px;rotate:90deg}&[data-side=right]{inset-inline-start:-13px;rotate:-90deg}}._12d8edd9eb946b5f__arrow-fill{fill:var(--wpds-color-bg-surface-neutral-strong,#fff)}._6ddab482bd929dad__arrow-stroke{fill:var(--wpds-color-stroke-surface-neutral,#dbdbdb)}._6d7e4729cd96960e__title{--_gcd-heading-color:var(--wpds-color-fg-content-neutral,#1e1e1e);color:var(--wpds-color-fg-content-neutral,#1e1e1e)}.e4d544aa033f05c6__backdrop{background-color:#00000026;inset:0;position:fixed;z-index:var(--wp-ui-popover-z-index,initial)}}\"));\n\tdocument.head.appendChild(style);\n}\nexport default {\"positioner\":\"_10450722b9676f78__positioner\",\"popup\":\"_84e8f597bcf683b8__popup\",\"backdrop\":\"e4d544aa033f05c6__backdrop\",\"arrow\":\"ca05d3eb89321fcd__arrow\",\"arrow-fill\":\"_12d8edd9eb946b5f__arrow-fill\",\"arrow-stroke\":\"_6ddab482bd929dad__arrow-stroke\",\"title\":\"_6d7e4729cd96960e__title\"};\n"],
5
+ "mappings": ";AAAA,SAAS,WAAW,gBAAgB;AACpC,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B;AAAA,EAEC,eAAe;AAAA,OACT;AACP,SAAS,cAAc;;;ACRvB,IAAI,OAAO,aAAa,eAAe,QAAQ,IAAI,aAAa,UAAU,CAAC,SAAS,KAAK,cAAc,kCAAkC,GAAG;AAC3I,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,aAAa,gBAAgB,YAAY;AAC/C,QAAM,YAAY,SAAS,eAAe,kMAAkM,CAAC;AAC7O,WAAS,KAAK,YAAY,KAAK;AAChC;AACA,IAAO,iBAAQ,EAAC,cAAa,gCAA+B;;;ADI5D,SAAS,oCAAoC;AAC7C,SAAS,gCAAgC;AACzC,SAAS,iCAAiC;AAC1C,SAAS,cAAc;;;AEbvB,IAAI,OAAO,aAAa,eAAe,QAAQ,IAAI,aAAa,UAAU,CAAC,SAAS,KAAK,cAAc,kCAAkC,GAAG;AAC3I,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,aAAa,gBAAgB,YAAY;AAC/C,QAAM,YAAY,SAAS,eAAe,uwDAAmxD,CAAC;AAC9zD,WAAS,KAAK,YAAY,KAAK;AAChC;AACA,IAAO,gBAAQ,EAAC,cAAa,iCAAgC,SAAQ,4BAA2B,YAAW,8BAA6B,SAAQ,2BAA0B,cAAa,iCAAgC,gBAAe,mCAAkC,SAAQ,2BAA0B;;;AFuDxS,SAqCA,UArCA,KAqCA,YArCA;AA5CF,IAAM,gBACL,OAAQ,gBAAiB,EAAE;AAE5B,IAAM,aAAa;AAUnB,IAAM,QAAQ,WAA0C,SAAS,aAChE;AAAA,EACC,QAAQ;AAAA,EACR;AAAA,EACA;AAAA;AAAA,EAEA,eAAe;AAAA,EACf,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,aAAa;AAAA,EACb;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACJ,GACA,KACC;AACD,QAAM,EAAE,sBAAsB,SAAS,IAAI,6BAA8B;AAAA,IACxE;AAAA,IACA,yBAAyB,CAAE,UAAW;AAAA,EACvC,CAAE;AACF,QAAM,iBAAiB,aAAc,CAAE,KAAK,QAAS,CAAE;AAEvD,QAAM,kBAAkB,WACvB,oBAAC,SAAS,UAAT,EAAkB,WAAY,cAAO,UAAW,IAC9C;AAEJ,QAAM,aACL;AAAA,IAAC,SAAS;AAAA,IAAT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAY,KAAM,eAAa,YAAa,GAAG,cAAO,UAAW;AAAA,MAEjE,8BAAC,iBACA;AAAA,QAAC,SAAS;AAAA,QAAT;AAAA,UACA,KAAM;AAAA,UACN,cAAe;AAAA,UACf;AAAA,UACA,WAAY;AAAA,YACX,YAAY,cAAc,cAAO;AAAA,YACjC;AAAA,UACD;AAAA,UACE,GAAG;AAAA,UAEL,8BAAC,6BACE,UACH;AAAA;AAAA,MACD,GACD;AAAA;AAAA,EACD;AAGD,QAAM,iBACL,iCACG;AAAA;AAAA,IACA;AAAA,KACH;AAGD,SAAO,yBAA0B,QAAQ,oBAAC,UAAO,GAAI,cAAe;AACrE,CAAE;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,13 @@
1
+ // packages/ui/src/popover/portal.tsx
2
+ import { Popover as _Popover } from "@base-ui/react/popover";
3
+ import { forwardRef } from "@wordpress/element";
4
+ import { jsx } from "react/jsx-runtime";
5
+ var Portal = forwardRef(
6
+ function PopoverPortal(props, ref) {
7
+ return /* @__PURE__ */ jsx(_Popover.Portal, { ref, ...props });
8
+ }
9
+ );
10
+ export {
11
+ Portal
12
+ };
13
+ //# sourceMappingURL=portal.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/popover/portal.tsx"],
4
+ "sourcesContent": ["import { Popover as _Popover } from '@base-ui/react/popover';\nimport { forwardRef } from '@wordpress/element';\nimport type { PortalProps } from './types';\n\n/**\n * Root element that portals `Popover` floating content. Pass to\n * `Popover.Popup`'s `portal` prop (for example `container` for\n * cross-document rendering). When `portal` is omitted, `Popover.Popup` uses\n * this component with default props.\n */\nconst Portal = forwardRef< HTMLDivElement, PortalProps >(\n\tfunction PopoverPortal( props, ref ) {\n\t\treturn <_Popover.Portal ref={ ref } { ...props } />;\n\t}\n);\n\nexport { Portal };\n"],
5
+ "mappings": ";AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,kBAAkB;AAWlB;AAFT,IAAM,SAAS;AAAA,EACd,SAAS,cAAe,OAAO,KAAM;AACpC,WAAO,oBAAC,SAAS,QAAT,EAAgB,KAAc,GAAG,OAAQ;AAAA,EAClD;AACD;",
6
+ "names": []
7
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/popover/root.tsx"],
4
- "sourcesContent": ["import { Popover as _Popover } from '@base-ui/react/popover';\nimport type { RootProps } from './types';\n\n/**\n * An accessible popup anchored to a trigger element.\n *\n * Popover renders ARIA-compliant floating content that appears next to its\n * trigger. It can contain interactive content such as form controls, menus,\n * and rich descriptions.\n *\n * Compose the compound components to build a popover:\n *\n * - `Popover.Root` \u2014 provides open state and context to all sub-components.\n * - `Popover.Trigger` \u2014 the button that toggles the popup.\n * - `Popover.Popup` \u2014 the floating container (portal, positioning, collision\n * avoidance).\n * - `Popover.Arrow` \u2014 an optional arrow pointing toward the anchor.\n * - `Popover.Title` \u2014 **required** heading that labels the popover for\n * accessibility (can be visually hidden).\n * - `Popover.Description` \u2014 optional paragraph linked via `aria-describedby`.\n * - `Popover.Close` \u2014 a button that closes the popover when clicked.\n * **Required** when `modal` is `true` or `'trap-focus'` so that focus\n * can cycle correctly and the user can dismiss the popover.\n *\n * ```jsx\n * <Popover.Root>\n * <Popover.Trigger>Open</Popover.Trigger>\n * <Popover.Popup>\n * <Popover.Arrow />\n * <Popover.Title>Popover title</Popover.Title>\n * <Popover.Description>Popover description</Popover.Description>\n * <Popover.Close>Close</Popover.Close>\n * </Popover.Popup>\n * </Popover.Root>\n * ```\n */\nfunction Root( props: RootProps ) {\n\treturn <_Popover.Root { ...props } />;\n}\n\nexport { Root };\n"],
4
+ "sourcesContent": ["import { Popover as _Popover } from '@base-ui/react/popover';\nimport type { RootProps } from './types';\n\n/**\n * An accessible popup anchored to a trigger element.\n *\n * Popover renders ARIA-compliant floating content that appears next to its\n * trigger. It can contain interactive content such as form controls, menus,\n * and rich descriptions.\n *\n * Compose the compound components to build a popover:\n *\n * - `Popover.Root` \u2014 provides open state and context to all sub-components.\n * - `Popover.Trigger` \u2014 the button that toggles the popup.\n * - `Popover.Popup` \u2014 the floating container (positioning, collision\n * avoidance); portals by default or via `portal={ <Popover.Portal /> }`.\n * - `Popover.Arrow` \u2014 an optional arrow pointing toward the anchor.\n * - `Popover.Title` \u2014 **required** heading that labels the popover for\n * accessibility (can be visually hidden).\n * - `Popover.Description` \u2014 optional paragraph linked via `aria-describedby`.\n * - `Popover.Close` \u2014 a button that closes the popover when clicked.\n * **Required** when `modal` is `true` or `'trap-focus'` so that focus\n * can cycle correctly and the user can dismiss the popover.\n *\n * ```jsx\n * <Popover.Root>\n * <Popover.Trigger>Open</Popover.Trigger>\n * <Popover.Popup>\n * <Popover.Arrow />\n * <Popover.Title>Popover title</Popover.Title>\n * <Popover.Description>Popover description</Popover.Description>\n * <Popover.Close>Close</Popover.Close>\n * </Popover.Popup>\n * </Popover.Root>\n * ```\n */\nfunction Root( props: RootProps ) {\n\treturn <_Popover.Root { ...props } />;\n}\n\nexport { Root };\n"],
5
5
  "mappings": ";AAAA,SAAS,WAAW,gBAAgB;AAqC5B;AADR,SAAS,KAAM,OAAmB;AACjC,SAAO,oBAAC,SAAS,MAAT,EAAgB,GAAG,OAAQ;AACpC;",
6
6
  "names": []
7
7
  }
@@ -1,25 +1,39 @@
1
1
  // packages/ui/src/popover/title.tsx
2
2
  import { Popover as _Popover } from "@base-ui/react/popover";
3
3
  import { useMergeRefs } from "@wordpress/compose";
4
- import { forwardRef, useLayoutEffect, useRef } from "@wordpress/element";
4
+ import { forwardRef, useEffect, useRef } from "@wordpress/element";
5
5
  import { Text } from "../text/index.mjs";
6
6
  import { usePopoverValidationContext } from "./context.mjs";
7
+
8
+ // packages/ui/src/popover/style.module.css
9
+ if (typeof document !== "undefined" && process.env.NODE_ENV !== "test" && !document.head.querySelector("style[data-wp-hash='cc851ac208']")) {
10
+ const style = document.createElement("style");
11
+ style.setAttribute("data-wp-hash", "cc851ac208");
12
+ style.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._10450722b9676f78__positioner{z-index:var(--wp-ui-popover-z-index,initial)}._84e8f597bcf683b8__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--wpds-typography-line-height-md,24px);outline:0;padding:var(--wpds-dimension-padding-lg,16px)}.e4d544aa033f05c6__backdrop~* ._84e8f597bcf683b8__popup{border-color:#0000}@media (forced-colors:active){._84e8f597bcf683b8__popup,.e4d544aa033f05c6__backdrop~* ._84e8f597bcf683b8__popup{border-color:CanvasText}}.ca05d3eb89321fcd__arrow{display:flex;&[data-side=top]{bottom:-8px;rotate:180deg}&[data-side=bottom]{rotate:0deg;top:-8px}&[data-side=left]{inset-inline-end:-13px;rotate:90deg}&[data-side=right]{inset-inline-start:-13px;rotate:-90deg}}._12d8edd9eb946b5f__arrow-fill{fill:var(--wpds-color-bg-surface-neutral-strong,#fff)}._6ddab482bd929dad__arrow-stroke{fill:var(--wpds-color-stroke-surface-neutral,#dbdbdb)}._6d7e4729cd96960e__title{--_gcd-heading-color:var(--wpds-color-fg-content-neutral,#1e1e1e);color:var(--wpds-color-fg-content-neutral,#1e1e1e)}.e4d544aa033f05c6__backdrop{background-color:#00000026;inset:0;position:fixed;z-index:var(--wp-ui-popover-z-index,initial)}}'));
13
+ document.head.appendChild(style);
14
+ }
15
+ var style_default = { "positioner": "_10450722b9676f78__positioner", "popup": "_84e8f597bcf683b8__popup", "backdrop": "e4d544aa033f05c6__backdrop", "arrow": "ca05d3eb89321fcd__arrow", "arrow-fill": "_12d8edd9eb946b5f__arrow-fill", "arrow-stroke": "_6ddab482bd929dad__arrow-stroke", "title": "_6d7e4729cd96960e__title" };
16
+
17
+ // packages/ui/src/popover/title.tsx
7
18
  import { jsx } from "react/jsx-runtime";
8
19
  var Title = forwardRef(
9
- function PopoverTitle({ className, children, render, ...props }, forwardedRef) {
20
+ function PopoverTitle({ children, ...props }, forwardedRef) {
10
21
  const validationContext = usePopoverValidationContext();
11
22
  const internalRef = useRef(null);
12
23
  const mergedRef = useMergeRefs([internalRef, forwardedRef]);
13
- useLayoutEffect(() => {
14
- validationContext?.registerTitle(internalRef.current);
24
+ useEffect(() => {
25
+ if (validationContext) {
26
+ return validationContext.registerTitle(internalRef.current);
27
+ }
28
+ return void 0;
15
29
  }, [validationContext]);
16
30
  return /* @__PURE__ */ jsx(
17
31
  Text,
18
32
  {
19
33
  ref: mergedRef,
20
34
  variant: "heading-xl",
21
- render: /* @__PURE__ */ jsx(_Popover.Title, { render, ...props }),
22
- className,
35
+ render: /* @__PURE__ */ jsx(_Popover.Title, { ...props }),
36
+ className: style_default.title,
23
37
  children
24
38
  }
25
39
  );
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/popover/title.tsx"],
4
- "sourcesContent": ["import { Popover as _Popover } from '@base-ui/react/popover';\nimport { useMergeRefs } from '@wordpress/compose';\nimport { forwardRef, useLayoutEffect, useRef } from '@wordpress/element';\nimport { Text } from '../text';\nimport { usePopoverValidationContext } from './context';\nimport type { TitleProps } from './types';\n\n/**\n * Renders a heading that labels the popover for accessibility.\n *\n * **Required** \u2014 every popover must include a `Popover.Title`, even if\n * visually hidden. The rendered element is linked to the popup via\n * `aria-labelledby`. Uses the `heading-xl` text variant, matching Dialog.\n *\n * To visually hide the title while keeping it accessible, wrap it with\n * `VisuallyHidden` using the `render` prop:\n *\n * ```jsx\n * <VisuallyHidden render={ <Popover.Title /> }>\n * Accessible title text\n * </VisuallyHidden>\n * ```\n */\nconst Title = forwardRef< HTMLHeadingElement, TitleProps >(\n\tfunction PopoverTitle(\n\t\t{ className, children, render, ...props },\n\t\tforwardedRef\n\t) {\n\t\tconst validationContext = usePopoverValidationContext();\n\t\tconst internalRef = useRef< HTMLHeadingElement >( null );\n\t\tconst mergedRef = useMergeRefs( [ internalRef, forwardedRef ] );\n\n\t\tuseLayoutEffect( () => {\n\t\t\tvalidationContext?.registerTitle( internalRef.current );\n\t\t}, [ validationContext ] );\n\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ mergedRef }\n\t\t\t\tvariant=\"heading-xl\"\n\t\t\t\trender={ <_Popover.Title render={ render } { ...props } /> }\n\t\t\t\tclassName={ className }\n\t\t\t>\n\t\t\t\t{ children }\n\t\t\t</Text>\n\t\t);\n\t}\n);\n\nexport { Title };\n"],
5
- "mappings": ";AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,oBAAoB;AAC7B,SAAS,YAAY,iBAAiB,cAAc;AACpD,SAAS,YAAY;AACrB,SAAS,mCAAmC;AAoC/B;AAjBb,IAAM,QAAQ;AAAA,EACb,SAAS,aACR,EAAE,WAAW,UAAU,QAAQ,GAAG,MAAM,GACxC,cACC;AACD,UAAM,oBAAoB,4BAA4B;AACtD,UAAM,cAAc,OAA8B,IAAK;AACvD,UAAM,YAAY,aAAc,CAAE,aAAa,YAAa,CAAE;AAE9D,oBAAiB,MAAM;AACtB,yBAAmB,cAAe,YAAY,OAAQ;AAAA,IACvD,GAAG,CAAE,iBAAkB,CAAE;AAEzB,WACC;AAAA,MAAC;AAAA;AAAA,QACA,KAAM;AAAA,QACN,SAAQ;AAAA,QACR,QAAS,oBAAC,SAAS,OAAT,EAAe,QAAoB,GAAG,OAAQ;AAAA,QACxD;AAAA,QAEE;AAAA;AAAA,IACH;AAAA,EAEF;AACD;",
3
+ "sources": ["../../src/popover/title.tsx", "../../src/popover/style.module.css"],
4
+ "sourcesContent": ["import { Popover as _Popover } from '@base-ui/react/popover';\nimport { useMergeRefs } from '@wordpress/compose';\nimport { forwardRef, useEffect, useRef } from '@wordpress/element';\nimport { Text } from '../text';\nimport { usePopoverValidationContext } from './context';\nimport styles from './style.module.css';\nimport type { TitleProps } from './types';\n\n/**\n * Renders a heading that labels the popover for accessibility.\n *\n * **Required** \u2014 every popover must include a `Popover.Title`, even if\n * visually hidden. The rendered element is linked to the popup via\n * `aria-labelledby`. Uses the `heading-xl` text variant, matching Dialog.\n *\n * To visually hide the title while keeping it accessible, wrap it with\n * `VisuallyHidden` using the `render` prop:\n *\n * ```jsx\n * <VisuallyHidden render={ <Popover.Title /> }>\n * Accessible title text\n * </VisuallyHidden>\n * ```\n */\nconst Title = forwardRef< HTMLHeadingElement, TitleProps >(\n\tfunction PopoverTitle( { children, ...props }, forwardedRef ) {\n\t\tconst validationContext = usePopoverValidationContext();\n\t\tconst internalRef = useRef< HTMLHeadingElement >( null );\n\t\tconst mergedRef = useMergeRefs( [ internalRef, forwardedRef ] );\n\n\t\tuseEffect( () => {\n\t\t\tif ( validationContext ) {\n\t\t\t\treturn validationContext.registerTitle( internalRef.current );\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}, [ validationContext ] );\n\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ mergedRef }\n\t\t\t\tvariant=\"heading-xl\"\n\t\t\t\trender={ <_Popover.Title { ...props } /> }\n\t\t\t\tclassName={ styles.title }\n\t\t\t>\n\t\t\t\t{ children }\n\t\t\t</Text>\n\t\t);\n\t}\n);\n\nexport { Title };\n", "if (typeof document !== 'undefined' && process.env.NODE_ENV !== 'test' && !document.head.querySelector(\"style[data-wp-hash='cc851ac208']\")) {\n\tconst style = document.createElement(\"style\");\n\tstyle.setAttribute(\"data-wp-hash\", \"cc851ac208\");\n\tstyle.appendChild(document.createTextNode(\"@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._10450722b9676f78__positioner{z-index:var(--wp-ui-popover-z-index,initial)}._84e8f597bcf683b8__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-md,0 2px 3px 0 #0000000d,0 4px 5px 0 #0000000a,0 12px 12px 0 #00000008,0 16px 16px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,\\\"Segoe UI\\\",\\\"Roboto\\\",\\\"Oxygen-Sans\\\",\\\"Ubuntu\\\",\\\"Cantarell\\\",\\\"Helvetica Neue\\\",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--wpds-typography-line-height-md,24px);outline:0;padding:var(--wpds-dimension-padding-lg,16px)}.e4d544aa033f05c6__backdrop~* ._84e8f597bcf683b8__popup{border-color:#0000}@media (forced-colors:active){._84e8f597bcf683b8__popup,.e4d544aa033f05c6__backdrop~* ._84e8f597bcf683b8__popup{border-color:CanvasText}}.ca05d3eb89321fcd__arrow{display:flex;&[data-side=top]{bottom:-8px;rotate:180deg}&[data-side=bottom]{rotate:0deg;top:-8px}&[data-side=left]{inset-inline-end:-13px;rotate:90deg}&[data-side=right]{inset-inline-start:-13px;rotate:-90deg}}._12d8edd9eb946b5f__arrow-fill{fill:var(--wpds-color-bg-surface-neutral-strong,#fff)}._6ddab482bd929dad__arrow-stroke{fill:var(--wpds-color-stroke-surface-neutral,#dbdbdb)}._6d7e4729cd96960e__title{--_gcd-heading-color:var(--wpds-color-fg-content-neutral,#1e1e1e);color:var(--wpds-color-fg-content-neutral,#1e1e1e)}.e4d544aa033f05c6__backdrop{background-color:#00000026;inset:0;position:fixed;z-index:var(--wp-ui-popover-z-index,initial)}}\"));\n\tdocument.head.appendChild(style);\n}\nexport default {\"positioner\":\"_10450722b9676f78__positioner\",\"popup\":\"_84e8f597bcf683b8__popup\",\"backdrop\":\"e4d544aa033f05c6__backdrop\",\"arrow\":\"ca05d3eb89321fcd__arrow\",\"arrow-fill\":\"_12d8edd9eb946b5f__arrow-fill\",\"arrow-stroke\":\"_6ddab482bd929dad__arrow-stroke\",\"title\":\"_6d7e4729cd96960e__title\"};\n"],
5
+ "mappings": ";AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,oBAAoB;AAC7B,SAAS,YAAY,WAAW,cAAc;AAC9C,SAAS,YAAY;AACrB,SAAS,mCAAmC;;;ACJ5C,IAAI,OAAO,aAAa,eAAe,QAAQ,IAAI,aAAa,UAAU,CAAC,SAAS,KAAK,cAAc,kCAAkC,GAAG;AAC3I,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,aAAa,gBAAgB,YAAY;AAC/C,QAAM,YAAY,SAAS,eAAe,uwDAAmxD,CAAC;AAC9zD,WAAS,KAAK,YAAY,KAAK;AAChC;AACA,IAAO,gBAAQ,EAAC,cAAa,iCAAgC,SAAQ,4BAA2B,YAAW,8BAA6B,SAAQ,2BAA0B,cAAa,iCAAgC,gBAAe,mCAAkC,SAAQ,2BAA0B;;;ADmC7R;AAjBb,IAAM,QAAQ;AAAA,EACb,SAAS,aAAc,EAAE,UAAU,GAAG,MAAM,GAAG,cAAe;AAC7D,UAAM,oBAAoB,4BAA4B;AACtD,UAAM,cAAc,OAA8B,IAAK;AACvD,UAAM,YAAY,aAAc,CAAE,aAAa,YAAa,CAAE;AAE9D,cAAW,MAAM;AAChB,UAAK,mBAAoB;AACxB,eAAO,kBAAkB,cAAe,YAAY,OAAQ;AAAA,MAC7D;AACA,aAAO;AAAA,IACR,GAAG,CAAE,iBAAkB,CAAE;AAEzB,WACC;AAAA,MAAC;AAAA;AAAA,QACA,KAAM;AAAA,QACN,SAAQ;AAAA,QACR,QAAS,oBAAC,SAAS,OAAT,EAAiB,GAAG,OAAQ;AAAA,QACtC,WAAY,cAAO;AAAA,QAEjB;AAAA;AAAA,IACH;AAAA,EAEF;AACD;",
6
6
  "names": []
7
7
  }
@@ -3,10 +3,11 @@ import {
3
3
  createContext,
4
4
  useContext,
5
5
  useCallback,
6
+ useEffect,
6
7
  useMemo,
7
- useRef,
8
- useEffect
8
+ useRef
9
9
  } from "@wordpress/element";
10
+ import { useScheduleValidation } from "../utils/use-schedule-validation.mjs";
10
11
  import { Fragment, jsx } from "react/jsx-runtime";
11
12
  var VALIDATION_ENABLED = process.env.NODE_ENV !== "production";
12
13
  var TabsValidationContext = VALIDATION_ENABLED ? createContext(null) : null;
@@ -39,22 +40,15 @@ function TabsValidationProviderDev({
39
40
  }) {
40
41
  const tabCountRef = useRef(0);
41
42
  const panelCountRef = useRef(0);
42
- const validationScheduledRef = useRef(null);
43
- const scheduleValidation = useCallback(() => {
44
- if (validationScheduledRef.current) {
45
- clearTimeout(validationScheduledRef.current);
43
+ const scheduleValidation = useScheduleValidation(() => {
44
+ const tabCount = tabCountRef.current;
45
+ const panelCount = panelCountRef.current;
46
+ if (tabCount !== panelCount) {
47
+ throw new Error(
48
+ `Tabs: Tab/Panel count mismatch (${tabCount} Tabs, ${panelCount} Panels). Each Tab must be associated with exactly one Panel. Mismatched or missing associations can break screen reader navigation and violate WAI-ARIA Tabs pattern requirements.`
49
+ );
46
50
  }
47
- validationScheduledRef.current = setTimeout(() => {
48
- const tabCount = tabCountRef.current;
49
- const panelCount = panelCountRef.current;
50
- if (tabCount !== panelCount) {
51
- throw new Error(
52
- `Tabs: Tab/Panel count mismatch (${tabCount} Tabs, ${panelCount} Panels). Each Tab must be associated with exactly one Panel. Mismatched or missing associations can break screen reader navigation and violate WAI-ARIA Tabs pattern requirements.`
53
- );
54
- }
55
- validationScheduledRef.current = null;
56
- }, 0);
57
- }, []);
51
+ });
58
52
  const registerTab = useCallback(() => {
59
53
  tabCountRef.current += 1;
60
54
  scheduleValidation();
@@ -71,13 +65,6 @@ function TabsValidationProviderDev({
71
65
  scheduleValidation();
72
66
  };
73
67
  }, [scheduleValidation]);
74
- useEffect(() => {
75
- return () => {
76
- if (validationScheduledRef.current) {
77
- clearTimeout(validationScheduledRef.current);
78
- }
79
- };
80
- }, []);
81
68
  const contextValue = useMemo(
82
69
  () => ({
83
70
  registerTab,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/tabs/context.tsx"],
4
- "sourcesContent": ["import {\n\tcreateContext,\n\tuseContext,\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n\tuseEffect,\n} from '@wordpress/element';\n\ntype TabsValidationContextType = {\n\tregisterTab: () => () => void;\n\tregisterPanel: () => () => void;\n};\n\n/**\n * Whether validation is enabled. This is a build-time constant that allows\n * bundlers to tree-shake all validation code in production builds.\n */\nconst VALIDATION_ENABLED = process.env.NODE_ENV !== 'production';\n\nconst TabsValidationContext = VALIDATION_ENABLED\n\t? createContext< TabsValidationContextType | null >( null )\n\t: ( null as unknown as React.Context< TabsValidationContextType | null > );\n\nfunction useRegisterTabDev() {\n\tconst context = useContext( TabsValidationContext );\n\n\tuseEffect( () => {\n\t\tif ( context ) {\n\t\t\treturn context.registerTab();\n\t\t}\n\t\treturn undefined;\n\t}, [ context ] );\n}\n\nfunction useRegisterTabProd() {\n\t// No-op in production.\n}\n\n/**\n * Hook that registers a Tab for count validation in development mode.\n */\nexport const useRegisterTab = VALIDATION_ENABLED\n\t? useRegisterTabDev\n\t: useRegisterTabProd;\n\nfunction useRegisterPanelDev() {\n\tconst context = useContext( TabsValidationContext );\n\n\tuseEffect( () => {\n\t\tif ( context ) {\n\t\t\treturn context.registerPanel();\n\t\t}\n\t\treturn undefined;\n\t}, [ context ] );\n}\n\nfunction useRegisterPanelProd() {\n\t// No-op in production.\n}\n\n/**\n * Hook that registers a Panel for count validation in development mode.\n */\nexport const useRegisterPanel = VALIDATION_ENABLED\n\t? useRegisterPanelDev\n\t: useRegisterPanelProd;\n\n/**\n * Development-only provider that tracks the number of registered tabs and\n * panels, and warns when the counts don't match.\n */\nfunction TabsValidationProviderDev( {\n\tchildren,\n}: {\n\tchildren: React.ReactNode;\n} ) {\n\tconst tabCountRef = useRef( 0 );\n\tconst panelCountRef = useRef( 0 );\n\tconst validationScheduledRef = useRef< ReturnType<\n\t\ttypeof setTimeout\n\t> | null >( null );\n\n\tconst scheduleValidation = useCallback( () => {\n\t\tif ( validationScheduledRef.current ) {\n\t\t\tclearTimeout( validationScheduledRef.current );\n\t\t}\n\n\t\t// Schedule validation for the next tick to allow all\n\t\t// registrations/unregistrations to complete.\n\t\tvalidationScheduledRef.current = setTimeout( () => {\n\t\t\tconst tabCount = tabCountRef.current;\n\t\t\tconst panelCount = panelCountRef.current;\n\n\t\t\tif ( tabCount !== panelCount ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Tabs: Tab/Panel count mismatch (${ tabCount } Tabs, ${ panelCount } Panels). ` +\n\t\t\t\t\t\t`Each Tab must be associated with exactly one Panel. ` +\n\t\t\t\t\t\t`Mismatched or missing associations can break screen reader navigation ` +\n\t\t\t\t\t\t`and violate WAI-ARIA Tabs pattern requirements.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tvalidationScheduledRef.current = null;\n\t\t}, 0 );\n\t}, [] );\n\n\tconst registerTab = useCallback( () => {\n\t\ttabCountRef.current += 1;\n\t\tscheduleValidation();\n\n\t\treturn () => {\n\t\t\ttabCountRef.current -= 1;\n\t\t\tscheduleValidation();\n\t\t};\n\t}, [ scheduleValidation ] );\n\n\tconst registerPanel = useCallback( () => {\n\t\tpanelCountRef.current += 1;\n\t\tscheduleValidation();\n\n\t\treturn () => {\n\t\t\tpanelCountRef.current -= 1;\n\t\t\tscheduleValidation();\n\t\t};\n\t}, [ scheduleValidation ] );\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tif ( validationScheduledRef.current ) {\n\t\t\t\tclearTimeout( validationScheduledRef.current );\n\t\t\t}\n\t\t};\n\t}, [] );\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tregisterTab,\n\t\t\tregisterPanel,\n\t\t} ),\n\t\t[ registerTab, registerPanel ]\n\t);\n\n\treturn (\n\t\t<TabsValidationContext.Provider value={ contextValue }>\n\t\t\t{ children }\n\t\t</TabsValidationContext.Provider>\n\t);\n}\n\n/**\n * Production no-op provider that just renders children.\n */\nfunction TabsValidationProviderProd( {\n\tchildren,\n}: {\n\tchildren: React.ReactNode;\n} ) {\n\treturn <>{ children }</>;\n}\n\n/**\n * Provider component that validates the number of tabs matches the number\n * of panels in development mode.\n *\n * In production, this component is a no-op and just renders children.\n */\nexport const TabsValidationProvider = VALIDATION_ENABLED\n\t? TabsValidationProviderDev\n\t: TabsValidationProviderProd;\n"],
5
- "mappings": ";AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAyIL,SAcM,UAdN;AA9HF,IAAM,qBAAqB,QAAQ,IAAI,aAAa;AAEpD,IAAM,wBAAwB,qBAC3B,cAAmD,IAAK,IACtD;AAEL,SAAS,oBAAoB;AAC5B,QAAM,UAAU,WAAY,qBAAsB;AAElD,YAAW,MAAM;AAChB,QAAK,SAAU;AACd,aAAO,QAAQ,YAAY;AAAA,IAC5B;AACA,WAAO;AAAA,EACR,GAAG,CAAE,OAAQ,CAAE;AAChB;AAEA,SAAS,qBAAqB;AAE9B;AAKO,IAAM,iBAAiB,qBAC3B,oBACA;AAEH,SAAS,sBAAsB;AAC9B,QAAM,UAAU,WAAY,qBAAsB;AAElD,YAAW,MAAM;AAChB,QAAK,SAAU;AACd,aAAO,QAAQ,cAAc;AAAA,IAC9B;AACA,WAAO;AAAA,EACR,GAAG,CAAE,OAAQ,CAAE;AAChB;AAEA,SAAS,uBAAuB;AAEhC;AAKO,IAAM,mBAAmB,qBAC7B,sBACA;AAMH,SAAS,0BAA2B;AAAA,EACnC;AACD,GAEI;AACH,QAAM,cAAc,OAAQ,CAAE;AAC9B,QAAM,gBAAgB,OAAQ,CAAE;AAChC,QAAM,yBAAyB,OAEnB,IAAK;AAEjB,QAAM,qBAAqB,YAAa,MAAM;AAC7C,QAAK,uBAAuB,SAAU;AACrC,mBAAc,uBAAuB,OAAQ;AAAA,IAC9C;AAIA,2BAAuB,UAAU,WAAY,MAAM;AAClD,YAAM,WAAW,YAAY;AAC7B,YAAM,aAAa,cAAc;AAEjC,UAAK,aAAa,YAAa;AAC9B,cAAM,IAAI;AAAA,UACT,mCAAoC,QAAS,UAAW,UAAW;AAAA,QAIpE;AAAA,MACD;AAEA,6BAAuB,UAAU;AAAA,IAClC,GAAG,CAAE;AAAA,EACN,GAAG,CAAC,CAAE;AAEN,QAAM,cAAc,YAAa,MAAM;AACtC,gBAAY,WAAW;AACvB,uBAAmB;AAEnB,WAAO,MAAM;AACZ,kBAAY,WAAW;AACvB,yBAAmB;AAAA,IACpB;AAAA,EACD,GAAG,CAAE,kBAAmB,CAAE;AAE1B,QAAM,gBAAgB,YAAa,MAAM;AACxC,kBAAc,WAAW;AACzB,uBAAmB;AAEnB,WAAO,MAAM;AACZ,oBAAc,WAAW;AACzB,yBAAmB;AAAA,IACpB;AAAA,EACD,GAAG,CAAE,kBAAmB,CAAE;AAE1B,YAAW,MAAM;AAChB,WAAO,MAAM;AACZ,UAAK,uBAAuB,SAAU;AACrC,qBAAc,uBAAuB,OAAQ;AAAA,MAC9C;AAAA,IACD;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,QAAM,eAAe;AAAA,IACpB,OAAQ;AAAA,MACP;AAAA,MACA;AAAA,IACD;AAAA,IACA,CAAE,aAAa,aAAc;AAAA,EAC9B;AAEA,SACC,oBAAC,sBAAsB,UAAtB,EAA+B,OAAQ,cACrC,UACH;AAEF;AAKA,SAAS,2BAA4B;AAAA,EACpC;AACD,GAEI;AACH,SAAO,gCAAI,UAAU;AACtB;AAQO,IAAM,yBAAyB,qBACnC,4BACA;",
4
+ "sourcesContent": ["import {\n\tcreateContext,\n\tuseContext,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n} from '@wordpress/element';\nimport { useScheduleValidation } from '../utils/use-schedule-validation';\n\ntype TabsValidationContextType = {\n\tregisterTab: () => () => void;\n\tregisterPanel: () => () => void;\n};\n\n/**\n * Whether validation is enabled. This is a build-time constant that allows\n * bundlers to tree-shake all validation code in production builds.\n */\nconst VALIDATION_ENABLED = process.env.NODE_ENV !== 'production';\n\nconst TabsValidationContext = VALIDATION_ENABLED\n\t? createContext< TabsValidationContextType | null >( null )\n\t: ( null as unknown as React.Context< TabsValidationContextType | null > );\n\nfunction useRegisterTabDev() {\n\tconst context = useContext( TabsValidationContext );\n\n\tuseEffect( () => {\n\t\tif ( context ) {\n\t\t\treturn context.registerTab();\n\t\t}\n\t\treturn undefined;\n\t}, [ context ] );\n}\n\nfunction useRegisterTabProd() {\n\t// No-op in production.\n}\n\n/**\n * Hook that registers a Tab for count validation in development mode.\n */\nexport const useRegisterTab = VALIDATION_ENABLED\n\t? useRegisterTabDev\n\t: useRegisterTabProd;\n\nfunction useRegisterPanelDev() {\n\tconst context = useContext( TabsValidationContext );\n\n\tuseEffect( () => {\n\t\tif ( context ) {\n\t\t\treturn context.registerPanel();\n\t\t}\n\t\treturn undefined;\n\t}, [ context ] );\n}\n\nfunction useRegisterPanelProd() {\n\t// No-op in production.\n}\n\n/**\n * Hook that registers a Panel for count validation in development mode.\n */\nexport const useRegisterPanel = VALIDATION_ENABLED\n\t? useRegisterPanelDev\n\t: useRegisterPanelProd;\n\n/**\n * Development-only provider that tracks the number of registered tabs and\n * panels, and warns when the counts don't match.\n */\nfunction TabsValidationProviderDev( {\n\tchildren,\n}: {\n\tchildren: React.ReactNode;\n} ) {\n\tconst tabCountRef = useRef( 0 );\n\tconst panelCountRef = useRef( 0 );\n\n\tconst scheduleValidation = useScheduleValidation( () => {\n\t\tconst tabCount = tabCountRef.current;\n\t\tconst panelCount = panelCountRef.current;\n\n\t\tif ( tabCount !== panelCount ) {\n\t\t\tthrow new Error(\n\t\t\t\t`Tabs: Tab/Panel count mismatch (${ tabCount } Tabs, ${ panelCount } Panels). ` +\n\t\t\t\t\t`Each Tab must be associated with exactly one Panel. ` +\n\t\t\t\t\t`Mismatched or missing associations can break screen reader navigation ` +\n\t\t\t\t\t`and violate WAI-ARIA Tabs pattern requirements.`\n\t\t\t);\n\t\t}\n\t} );\n\n\tconst registerTab = useCallback( () => {\n\t\ttabCountRef.current += 1;\n\t\tscheduleValidation();\n\n\t\treturn () => {\n\t\t\ttabCountRef.current -= 1;\n\t\t\tscheduleValidation();\n\t\t};\n\t}, [ scheduleValidation ] );\n\n\tconst registerPanel = useCallback( () => {\n\t\tpanelCountRef.current += 1;\n\t\tscheduleValidation();\n\n\t\treturn () => {\n\t\t\tpanelCountRef.current -= 1;\n\t\t\tscheduleValidation();\n\t\t};\n\t}, [ scheduleValidation ] );\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tregisterTab,\n\t\t\tregisterPanel,\n\t\t} ),\n\t\t[ registerTab, registerPanel ]\n\t);\n\n\treturn (\n\t\t<TabsValidationContext.Provider value={ contextValue }>\n\t\t\t{ children }\n\t\t</TabsValidationContext.Provider>\n\t);\n}\n\n/**\n * Production no-op provider that just renders children.\n */\nfunction TabsValidationProviderProd( {\n\tchildren,\n}: {\n\tchildren: React.ReactNode;\n} ) {\n\treturn <>{ children }</>;\n}\n\n/**\n * Provider component that validates the number of tabs matches the number\n * of panels in development mode.\n *\n * In production, this component is a no-op and just renders children.\n */\nexport const TabsValidationProvider = VALIDATION_ENABLED\n\t? TabsValidationProviderDev\n\t: TabsValidationProviderProd;\n"],
5
+ "mappings": ";AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,6BAA6B;AAoHpC,SAcM,UAdN;AAzGF,IAAM,qBAAqB,QAAQ,IAAI,aAAa;AAEpD,IAAM,wBAAwB,qBAC3B,cAAmD,IAAK,IACtD;AAEL,SAAS,oBAAoB;AAC5B,QAAM,UAAU,WAAY,qBAAsB;AAElD,YAAW,MAAM;AAChB,QAAK,SAAU;AACd,aAAO,QAAQ,YAAY;AAAA,IAC5B;AACA,WAAO;AAAA,EACR,GAAG,CAAE,OAAQ,CAAE;AAChB;AAEA,SAAS,qBAAqB;AAE9B;AAKO,IAAM,iBAAiB,qBAC3B,oBACA;AAEH,SAAS,sBAAsB;AAC9B,QAAM,UAAU,WAAY,qBAAsB;AAElD,YAAW,MAAM;AAChB,QAAK,SAAU;AACd,aAAO,QAAQ,cAAc;AAAA,IAC9B;AACA,WAAO;AAAA,EACR,GAAG,CAAE,OAAQ,CAAE;AAChB;AAEA,SAAS,uBAAuB;AAEhC;AAKO,IAAM,mBAAmB,qBAC7B,sBACA;AAMH,SAAS,0BAA2B;AAAA,EACnC;AACD,GAEI;AACH,QAAM,cAAc,OAAQ,CAAE;AAC9B,QAAM,gBAAgB,OAAQ,CAAE;AAEhC,QAAM,qBAAqB,sBAAuB,MAAM;AACvD,UAAM,WAAW,YAAY;AAC7B,UAAM,aAAa,cAAc;AAEjC,QAAK,aAAa,YAAa;AAC9B,YAAM,IAAI;AAAA,QACT,mCAAoC,QAAS,UAAW,UAAW;AAAA,MAIpE;AAAA,IACD;AAAA,EACD,CAAE;AAEF,QAAM,cAAc,YAAa,MAAM;AACtC,gBAAY,WAAW;AACvB,uBAAmB;AAEnB,WAAO,MAAM;AACZ,kBAAY,WAAW;AACvB,yBAAmB;AAAA,IACpB;AAAA,EACD,GAAG,CAAE,kBAAmB,CAAE;AAE1B,QAAM,gBAAgB,YAAa,MAAM;AACxC,kBAAc,WAAW;AACzB,uBAAmB;AAEnB,WAAO,MAAM;AACZ,oBAAc,WAAW;AACzB,yBAAmB;AAAA,IACpB;AAAA,EACD,GAAG,CAAE,kBAAmB,CAAE;AAE1B,QAAM,eAAe;AAAA,IACpB,OAAQ;AAAA,MACP;AAAA,MACA;AAAA,IACD;AAAA,IACA,CAAE,aAAa,aAAc;AAAA,EAC9B;AAEA,SACC,oBAAC,sBAAsB,UAAtB,EAA+B,OAAQ,cACrC,UACH;AAEF;AAKA,SAAS,2BAA4B;AAAA,EACpC;AACD,GAEI;AACH,SAAO,gCAAI,UAAU;AACtB;AAQO,IAAM,yBAAyB,qBACnC,4BACA;",
6
6
  "names": []
7
7
  }
@@ -5,13 +5,13 @@ import { Tabs as _Tabs } from "@base-ui/react/tabs";
5
5
  import { useMergeRefs } from "@wordpress/compose";
6
6
 
7
7
  // packages/ui/src/tabs/style.module.css
8
- if (typeof document !== "undefined" && process.env.NODE_ENV !== "test" && !document.head.querySelector("style[data-wp-hash='abbf48f53e']")) {
8
+ if (typeof document !== "undefined" && process.env.NODE_ENV !== "test" && !document.head.querySelector("style[data-wp-hash='b8cf8136a5']")) {
9
9
  const style = document.createElement("style");
10
- style.setAttribute("data-wp-hash", "abbf48f53e");
11
- style.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._7313adbc8a112e90__tablist{--direction-factor:1;--direction-start:left;--direction-end:right;align-items:stretch;display:flex;overflow-inline:auto;overscroll-behavior-inline:none;position:relative;&:dir(rtl){--direction-factor:-1;--direction-start:right;--direction-end:left}&[data-orientation=horizontal]{--fade-width:4rem;--fade-gradient-base:#0000 0%,#000 var(--fade-width);--fade-gradient-composed:var(--fade-gradient-base),#000 60%,#0000 50%;width:fit-content;&._9f2ac729c68a735a__is-overflowing-first{mask-image:linear-gradient(to var(--direction-end),var(--fade-gradient-base))}&._81c799c1f3cdd261__is-overflowing-last{mask-image:linear-gradient(to var(--direction-start),var(--fade-gradient-base))}&._9f2ac729c68a735a__is-overflowing-first._81c799c1f3cdd261__is-overflowing-last{mask-image:linear-gradient(to right,var(--fade-gradient-composed)),linear-gradient(to left,var(--fade-gradient-composed))}&._59228b5227f38a99__is-minimal-variant{gap:1rem}}&[data-orientation=vertical]{flex-direction:column}}._1c37dcfaa1ad8cda__indicator{@media not (prefers-reduced-motion){transition-duration:.2s;transition-property:translate,width,height,border-radius,border-block;transition-timing-function:ease-out}outline:2px solid #0000;outline-offset:-1px;pointer-events:none;position:absolute;&[data-orientation=horizontal]{background-color:var(--wpds-color-stroke-interactive-neutral-strong,#6c6c6c);bottom:0;height:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px));left:0;translate:var(--active-tab-left) 0;width:var(--active-tab-width);z-index:1}&[data-orientation=vertical]{background-color:var(--wpds-color-bg-interactive-neutral-weak-active,#eaeaea);border-radius:var(--wpds-border-radius-sm,2px);height:var(--active-tab-height);left:50%;top:0;translate:-50% var(--active-tab-top);width:100%;z-index:0}._7313adbc8a112e90__tablist[data-select-on-move=true]:has(:focus-visible)\n &[data-orientation=vertical]{border:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9));box-sizing:border-box}}.a5fd8814f195aa5e__tab{align-items:center;background:#0000;border:none;border-radius:0;box-shadow:none;color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);cursor:var(--wpds-cursor-control,pointer);display:flex;flex:1 0 auto;font-family:var(--wpds-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-font-size-md,13px);font-weight:400;line-height:1.2;outline:none;padding:0;position:relative;white-space:nowrap;z-index:1;&[data-disabled]{color:var(--wpds-color-fg-interactive-neutral-disabled,#8a8a8a);cursor:default;@media (forced-colors:active){color:GrayText}}&:not([data-disabled]):is(:hover,:focus-visible){color:var(--wpds-color-fg-interactive-neutral-active,#1e1e1e)}&:after{border-radius:var(--wpds-border-radius-sm,2px);opacity:0;outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9));pointer-events:none;position:absolute;z-index:-1;@media not (prefers-reduced-motion){transition:opacity .1s linear}}&:focus-visible:after{opacity:1}[data-orientation=horizontal] &{height:48px;padding-inline:var(--wpds-dimension-padding-lg,16px);scroll-margin:24px;&:after{content:"";inset:var(--wpds-dimension-padding-md,12px)}}._59228b5227f38a99__is-minimal-variant[data-orientation=horizontal] &{padding-inline:0;&:after{inset-inline:round(up,var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)),1px)}}[data-orientation=vertical] &{min-height:40px;padding:var(--wpds-dimension-padding-sm,8px) var(--wpds-dimension-padding-md,12px)}[data-orientation=vertical][data-select-on-move=false] &:after{content:"";inset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}._5dfc77e6edd345d4__tab-children{align-items:center;display:flex;flex-grow:1;[data-orientation=horizontal] &{justify-content:center}[data-orientation=vertical] &{justify-content:start}}._4a20e969d15e5ac1__tab-chevron{flex-shrink:0;margin-inline-end:calc(var(--wpds-dimension-gap-xs, 4px)*-1);opacity:0;[data-orientation=horizontal] &{display:none}[role=tab]:is([aria-selected=true],:focus-visible,:hover) &{opacity:1}@media not (prefers-reduced-motion){[data-select-on-move=true]\n [role=tab]:is([aria-selected=true])\n &{transition:opacity .15s linear .15s}}&:dir(rtl){rotate:180deg}}._49f4bf715948892a__tabpanel{&:focus{box-shadow:none;outline:none}&:focus-visible{box-shadow:0 0 0 var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000;outline-offset:0}}}'));
10
+ style.setAttribute("data-wp-hash", "b8cf8136a5");
11
+ style.appendChild(document.createTextNode('@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{._7313adbc8a112e90__tablist{--direction-factor:1;--direction-start:left;--direction-end:right;align-items:stretch;display:flex;overflow-inline:auto;overscroll-behavior-inline:none;position:relative;&:dir(rtl){--direction-factor:-1;--direction-start:right;--direction-end:left}&[data-orientation=horizontal]{--fade-width:4rem;--fade-gradient-base:#0000 0%,#000 var(--fade-width);--fade-gradient-composed:var(--fade-gradient-base),#000 60%,#0000 50%;width:fit-content;&._9f2ac729c68a735a__is-overflowing-first{mask-image:linear-gradient(to var(--direction-end),var(--fade-gradient-base))}&._81c799c1f3cdd261__is-overflowing-last{mask-image:linear-gradient(to var(--direction-start),var(--fade-gradient-base))}&._9f2ac729c68a735a__is-overflowing-first._81c799c1f3cdd261__is-overflowing-last{mask-image:linear-gradient(to right,var(--fade-gradient-composed)),linear-gradient(to left,var(--fade-gradient-composed))}&._59228b5227f38a99__is-minimal-variant{gap:1rem}}&[data-orientation=vertical]{flex-direction:column}}._1c37dcfaa1ad8cda__indicator{@media not (prefers-reduced-motion){transition-duration:.2s;transition-property:translate,width,height,border-radius,border-block;transition-timing-function:ease-out}outline:2px solid #0000;outline-offset:-1px;pointer-events:none;position:absolute;&[data-orientation=horizontal]{background-color:var(--wpds-color-stroke-interactive-neutral-strong,#6e6e6e);bottom:0;height:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px));left:0;translate:var(--active-tab-left) 0;width:var(--active-tab-width);z-index:1}&[data-orientation=vertical]{background-color:var(--wpds-color-bg-interactive-neutral-weak-active,#ededed);border-radius:var(--wpds-border-radius-sm,2px);height:var(--active-tab-height);left:50%;top:0;translate:-50% var(--active-tab-top);width:100%;z-index:0}._7313adbc8a112e90__tablist[data-select-on-move=true]:has(:focus-visible)\n &[data-orientation=vertical]{border:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9));box-sizing:border-box}}.a5fd8814f195aa5e__tab{align-items:center;background:#0000;border:none;border-radius:0;box-shadow:none;color:var(--wpds-color-fg-interactive-neutral,#1e1e1e);cursor:var(--wpds-cursor-control,pointer);display:flex;flex:1 0 auto;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);font-weight:400;line-height:1.2;outline:none;padding:0;position:relative;white-space:nowrap;z-index:1;&[data-disabled]{color:var(--wpds-color-fg-interactive-neutral-disabled,#8d8d8d);cursor:default;@media (forced-colors:active){color:GrayText}}&:not([data-disabled]):is(:hover,:focus-visible){color:var(--wpds-color-fg-interactive-neutral-active,#1e1e1e)}&:after{border-radius:var(--wpds-border-radius-sm,2px);opacity:0;outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--wpds-color-stroke-focus-brand,var(--wp-admin-theme-color,#3858e9));pointer-events:none;position:absolute;z-index:-1;@media not (prefers-reduced-motion){transition:opacity .1s linear}}&:focus-visible:after{opacity:1}[data-orientation=horizontal] &{height:48px;padding-inline:var(--wpds-dimension-padding-lg,16px);scroll-margin:24px;&:after{content:"";inset:var(--wpds-dimension-padding-md,12px)}}._59228b5227f38a99__is-minimal-variant[data-orientation=horizontal] &{padding-inline:0;&:after{inset-inline:round(up,var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)),1px)}}[data-orientation=vertical] &{min-height:40px;padding:var(--wpds-dimension-padding-sm,8px) var(--wpds-dimension-padding-md,12px)}[data-orientation=vertical][data-select-on-move=false] &:after{content:"";inset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}._5dfc77e6edd345d4__tab-children{align-items:center;display:flex;flex-grow:1;[data-orientation=horizontal] &{justify-content:center}[data-orientation=vertical] &{justify-content:start}}._4a20e969d15e5ac1__tab-chevron{flex-shrink:0;margin-inline-end:calc(var(--wpds-dimension-gap-xs, 4px)*-1);opacity:0;[data-orientation=horizontal] &{display:none}[role=tab]:is([aria-selected=true],:focus-visible,:hover) &{opacity:1}@media not (prefers-reduced-motion){[data-select-on-move=true]\n [role=tab]:is([aria-selected=true])\n &{transition:opacity .15s linear .15s}}&:dir(rtl){rotate:180deg}}}'));
12
12
  document.head.appendChild(style);
13
13
  }
14
- var style_default = { "tablist": "_7313adbc8a112e90__tablist", "is-overflowing-first": "_9f2ac729c68a735a__is-overflowing-first", "is-overflowing-last": "_81c799c1f3cdd261__is-overflowing-last", "is-minimal-variant": "_59228b5227f38a99__is-minimal-variant", "indicator": "_1c37dcfaa1ad8cda__indicator", "tab": "a5fd8814f195aa5e__tab", "tab-children": "_5dfc77e6edd345d4__tab-children", "tab-chevron": "_4a20e969d15e5ac1__tab-chevron", "tabpanel": "_49f4bf715948892a__tabpanel" };
14
+ var style_default = { "tablist": "_7313adbc8a112e90__tablist", "is-overflowing-first": "_9f2ac729c68a735a__is-overflowing-first", "is-overflowing-last": "_81c799c1f3cdd261__is-overflowing-last", "is-minimal-variant": "_59228b5227f38a99__is-minimal-variant", "indicator": "_1c37dcfaa1ad8cda__indicator", "tab": "a5fd8814f195aa5e__tab", "tab-children": "_5dfc77e6edd345d4__tab-children", "tab-chevron": "_4a20e969d15e5ac1__tab-chevron" };
15
15
 
16
16
  // packages/ui/src/tabs/list.tsx
17
17
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -22,7 +22,6 @@ var List = forwardRef(
22
22
  variant = "default",
23
23
  className,
24
24
  activateOnFocus,
25
- render,
26
25
  ...otherProps
27
26
  }, forwardedRef) {
28
27
  const [listEl, setListEl] = useState(null);