@wordpress/ui 0.12.1-next.v.202604201441.0 → 0.13.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 (857) hide show
  1. package/CHANGELOG.md +59 -2
  2. package/CONTRIBUTING.md +34 -0
  3. package/build/alert-dialog/index.cjs +3 -0
  4. package/build/alert-dialog/index.cjs.map +2 -2
  5. package/build/alert-dialog/popup.cjs +194 -59
  6. package/build/alert-dialog/popup.cjs.map +3 -3
  7. package/build/alert-dialog/portal.cjs +38 -0
  8. package/build/alert-dialog/portal.cjs.map +7 -0
  9. package/build/alert-dialog/types.cjs.map +1 -1
  10. package/build/badge/badge.cjs +84 -5
  11. package/build/badge/badge.cjs.map +3 -3
  12. package/build/button/button.cjs +90 -20
  13. package/build/button/button.cjs.map +3 -3
  14. package/build/button/icon.cjs.map +2 -2
  15. package/build/button/index.cjs +1 -0
  16. package/build/button/index.cjs.map +3 -3
  17. package/build/button/types.cjs.map +1 -1
  18. package/build/card/content.cjs +84 -5
  19. package/build/card/content.cjs.map +3 -3
  20. package/build/card/full-bleed.cjs +84 -5
  21. package/build/card/full-bleed.cjs.map +3 -3
  22. package/build/card/header.cjs +84 -5
  23. package/build/card/header.cjs.map +3 -3
  24. package/build/card/root.cjs +86 -10
  25. package/build/card/root.cjs.map +3 -3
  26. package/build/collapsible-card/content.cjs +90 -7
  27. package/build/collapsible-card/content.cjs.map +3 -3
  28. package/build/collapsible-card/header.cjs +131 -52
  29. package/build/collapsible-card/header.cjs.map +3 -3
  30. package/build/dialog/content.cjs +161 -0
  31. package/build/dialog/content.cjs.map +7 -0
  32. package/build/dialog/context.cjs +12 -56
  33. package/build/dialog/context.cjs.map +2 -2
  34. package/build/dialog/description.cjs +138 -0
  35. package/build/dialog/description.cjs.map +7 -0
  36. package/build/dialog/footer.cjs +86 -6
  37. package/build/dialog/footer.cjs.map +3 -3
  38. package/build/dialog/header.cjs +86 -6
  39. package/build/dialog/header.cjs.map +3 -3
  40. package/build/dialog/index.cjs +9 -0
  41. package/build/dialog/index.cjs.map +2 -2
  42. package/build/dialog/popup.cjs +102 -11
  43. package/build/dialog/popup.cjs.map +3 -3
  44. package/build/dialog/portal.cjs +38 -0
  45. package/build/dialog/portal.cjs.map +7 -0
  46. package/build/dialog/root.cjs +3 -2
  47. package/build/dialog/root.cjs.map +2 -2
  48. package/build/dialog/title.cjs +85 -6
  49. package/build/dialog/title.cjs.map +3 -3
  50. package/build/dialog/types.cjs.map +1 -1
  51. package/build/drawer/action.cjs +48 -0
  52. package/build/drawer/action.cjs.map +7 -0
  53. package/build/drawer/close-icon.cjs +58 -0
  54. package/build/drawer/close-icon.cjs.map +7 -0
  55. package/build/drawer/content.cjs +170 -0
  56. package/build/drawer/content.cjs.map +7 -0
  57. package/build/drawer/context.cjs +44 -0
  58. package/build/drawer/context.cjs.map +7 -0
  59. package/build/drawer/description.cjs +47 -0
  60. package/build/drawer/description.cjs.map +7 -0
  61. package/build/drawer/footer.cjs +144 -0
  62. package/build/drawer/footer.cjs.map +7 -0
  63. package/build/drawer/header.cjs +144 -0
  64. package/build/drawer/header.cjs.map +7 -0
  65. package/build/drawer/index.cjs +61 -0
  66. package/build/drawer/index.cjs.map +7 -0
  67. package/build/drawer/popup.cjs +182 -0
  68. package/build/drawer/popup.cjs.map +7 -0
  69. package/build/drawer/portal.cjs +38 -0
  70. package/build/drawer/portal.cjs.map +7 -0
  71. package/build/drawer/root.cjs +49 -0
  72. package/build/drawer/root.cjs.map +7 -0
  73. package/build/drawer/title.cjs +149 -0
  74. package/build/drawer/title.cjs.map +7 -0
  75. package/build/drawer/trigger.cjs +38 -0
  76. package/build/drawer/trigger.cjs.map +7 -0
  77. package/build/drawer/types.cjs +19 -0
  78. package/build/drawer/types.cjs.map +7 -0
  79. package/build/empty-state/actions.cjs +84 -5
  80. package/build/empty-state/actions.cjs.map +3 -3
  81. package/build/empty-state/description.cjs +84 -5
  82. package/build/empty-state/description.cjs.map +3 -3
  83. package/build/empty-state/icon.cjs +84 -5
  84. package/build/empty-state/icon.cjs.map +3 -3
  85. package/build/empty-state/root.cjs +84 -5
  86. package/build/empty-state/root.cjs.map +3 -3
  87. package/build/empty-state/title.cjs +84 -5
  88. package/build/empty-state/title.cjs.map +3 -3
  89. package/build/empty-state/visual.cjs +84 -5
  90. package/build/empty-state/visual.cjs.map +3 -3
  91. package/build/form/index.cjs +3 -1
  92. package/build/form/index.cjs.map +2 -2
  93. package/build/form/primitives/autocomplete/clear.cjs +62 -0
  94. package/build/form/primitives/autocomplete/clear.cjs.map +7 -0
  95. package/build/form/primitives/autocomplete/collection.cjs +38 -0
  96. package/build/form/primitives/autocomplete/collection.cjs.map +7 -0
  97. package/build/form/primitives/autocomplete/empty.cjs +146 -0
  98. package/build/form/primitives/autocomplete/empty.cjs.map +7 -0
  99. package/build/form/primitives/autocomplete/index.cjs +64 -0
  100. package/build/form/primitives/autocomplete/index.cjs.map +7 -0
  101. package/build/form/primitives/autocomplete/input-group.cjs +36 -0
  102. package/build/form/primitives/autocomplete/input-group.cjs.map +7 -0
  103. package/build/form/primitives/autocomplete/input.cjs +47 -0
  104. package/build/form/primitives/autocomplete/input.cjs.map +7 -0
  105. package/build/form/primitives/autocomplete/item.cjs +157 -0
  106. package/build/form/primitives/autocomplete/item.cjs.map +7 -0
  107. package/build/form/primitives/autocomplete/list-body.cjs +136 -0
  108. package/build/form/primitives/autocomplete/list-body.cjs.map +7 -0
  109. package/build/form/primitives/autocomplete/list.cjs +146 -0
  110. package/build/form/primitives/autocomplete/list.cjs.map +7 -0
  111. package/build/form/primitives/autocomplete/popup.cjs +175 -0
  112. package/build/form/primitives/autocomplete/popup.cjs.map +7 -0
  113. package/build/form/primitives/autocomplete/portal.cjs +38 -0
  114. package/build/form/primitives/autocomplete/portal.cjs.map +7 -0
  115. package/build/form/primitives/autocomplete/root.cjs +35 -0
  116. package/build/form/primitives/autocomplete/root.cjs.map +7 -0
  117. package/build/form/primitives/autocomplete/types.cjs +19 -0
  118. package/build/form/primitives/autocomplete/types.cjs.map +7 -0
  119. package/build/form/primitives/autocomplete/value.cjs +35 -0
  120. package/build/form/primitives/autocomplete/value.cjs.map +7 -0
  121. package/build/form/primitives/field/description.cjs +86 -10
  122. package/build/form/primitives/field/description.cjs.map +3 -3
  123. package/build/form/primitives/field/details.cjs +84 -5
  124. package/build/form/primitives/field/details.cjs.map +3 -3
  125. package/build/form/primitives/field/label.cjs +84 -5
  126. package/build/form/primitives/field/label.cjs.map +3 -3
  127. package/build/form/primitives/field/root.cjs +84 -5
  128. package/build/form/primitives/field/root.cjs.map +3 -3
  129. package/build/form/primitives/fieldset/description.cjs +86 -10
  130. package/build/form/primitives/fieldset/description.cjs.map +3 -3
  131. package/build/form/primitives/fieldset/details.cjs +84 -5
  132. package/build/form/primitives/fieldset/details.cjs.map +3 -3
  133. package/build/form/primitives/fieldset/legend.cjs +84 -5
  134. package/build/form/primitives/fieldset/legend.cjs.map +3 -3
  135. package/build/form/primitives/fieldset/root.cjs +84 -5
  136. package/build/form/primitives/fieldset/root.cjs.map +3 -3
  137. package/build/form/primitives/index.cjs +3 -0
  138. package/build/form/primitives/index.cjs.map +2 -2
  139. package/build/form/primitives/input/input.cjs +88 -15
  140. package/build/form/primitives/input/input.cjs.map +3 -3
  141. package/build/form/primitives/input-layout/input-layout.cjs +88 -15
  142. package/build/form/primitives/input-layout/input-layout.cjs.map +3 -3
  143. package/build/form/primitives/input-layout/slot.cjs +84 -5
  144. package/build/form/primitives/input-layout/slot.cjs.map +3 -3
  145. package/build/form/primitives/select/index.cjs +3 -0
  146. package/build/form/primitives/select/index.cjs.map +2 -2
  147. package/build/form/primitives/select/item.cjs +88 -13
  148. package/build/form/primitives/select/item.cjs.map +3 -3
  149. package/build/form/primitives/select/popup.cjs +97 -23
  150. package/build/form/primitives/select/popup.cjs.map +3 -3
  151. package/build/form/primitives/select/portal.cjs +38 -0
  152. package/build/form/primitives/select/portal.cjs.map +7 -0
  153. package/build/form/primitives/select/root.cjs.map +2 -2
  154. package/build/form/primitives/select/trigger.cjs +98 -16
  155. package/build/form/primitives/select/trigger.cjs.map +3 -3
  156. package/build/form/primitives/select/types.cjs.map +1 -1
  157. package/build/form/primitives/textarea/textarea.cjs +86 -10
  158. package/build/form/primitives/textarea/textarea.cjs.map +3 -3
  159. package/build/form/select-control/context.cjs +37 -0
  160. package/build/form/select-control/context.cjs.map +7 -0
  161. package/build/form/select-control/index.cjs +39 -0
  162. package/build/form/select-control/index.cjs.map +7 -0
  163. package/build/form/select-control/item.cjs +41 -0
  164. package/build/form/select-control/item.cjs.map +7 -0
  165. package/build/form/select-control/select-control.cjs +75 -0
  166. package/build/form/select-control/select-control.cjs.map +7 -0
  167. package/build/form/select-control/types.cjs +19 -0
  168. package/build/form/select-control/types.cjs.map +7 -0
  169. package/build/form/types.cjs.map +1 -1
  170. package/build/icon-button/icon-button.cjs +86 -6
  171. package/build/icon-button/icon-button.cjs.map +3 -3
  172. package/build/icon-button/types.cjs.map +1 -1
  173. package/build/index.cjs +3 -0
  174. package/build/index.cjs.map +2 -2
  175. package/build/link/link.cjs +90 -20
  176. package/build/link/link.cjs.map +3 -3
  177. package/build/notice/action-button.cjs +84 -5
  178. package/build/notice/action-button.cjs.map +3 -3
  179. package/build/notice/action-link.cjs +84 -5
  180. package/build/notice/action-link.cjs.map +3 -3
  181. package/build/notice/actions.cjs +84 -5
  182. package/build/notice/actions.cjs.map +3 -3
  183. package/build/notice/close-icon.cjs +84 -5
  184. package/build/notice/close-icon.cjs.map +3 -3
  185. package/build/notice/description.cjs +84 -5
  186. package/build/notice/description.cjs.map +3 -3
  187. package/build/notice/root.cjs +86 -10
  188. package/build/notice/root.cjs.map +3 -3
  189. package/build/notice/title.cjs +84 -5
  190. package/build/notice/title.cjs.map +3 -3
  191. package/build/popover/arrow.cjs +85 -6
  192. package/build/popover/arrow.cjs.map +3 -3
  193. package/build/popover/context.cjs +4 -56
  194. package/build/popover/context.cjs.map +2 -2
  195. package/build/popover/description.cjs +1 -24
  196. package/build/popover/description.cjs.map +4 -4
  197. package/build/popover/index.cjs +3 -0
  198. package/build/popover/index.cjs.map +2 -2
  199. package/build/popover/popup.cjs +96 -23
  200. package/build/popover/popup.cjs.map +3 -3
  201. package/build/popover/portal.cjs +38 -0
  202. package/build/popover/portal.cjs.map +7 -0
  203. package/build/popover/root.cjs.map +1 -1
  204. package/build/popover/title.cjs +92 -2
  205. package/build/popover/title.cjs.map +3 -3
  206. package/build/popover/types.cjs.map +1 -1
  207. package/build/stack/stack.cjs +84 -5
  208. package/build/stack/stack.cjs.map +3 -3
  209. package/build/tabs/list.cjs +84 -5
  210. package/build/tabs/list.cjs.map +3 -3
  211. package/build/tabs/panel.cjs +86 -10
  212. package/build/tabs/panel.cjs.map +3 -3
  213. package/build/tabs/tab.cjs +84 -5
  214. package/build/tabs/tab.cjs.map +3 -3
  215. package/build/text/text.cjs +88 -12
  216. package/build/text/text.cjs.map +3 -3
  217. package/build/tooltip/index.cjs +6 -0
  218. package/build/tooltip/index.cjs.map +2 -2
  219. package/build/tooltip/popup.cjs +114 -46
  220. package/build/tooltip/popup.cjs.map +4 -4
  221. package/build/tooltip/portal.cjs +38 -0
  222. package/build/tooltip/portal.cjs.map +7 -0
  223. package/build/tooltip/positioner.cjs +159 -0
  224. package/build/tooltip/positioner.cjs.map +7 -0
  225. package/build/tooltip/provider.cjs +2 -2
  226. package/build/tooltip/provider.cjs.map +3 -3
  227. package/build/tooltip/root.cjs.map +3 -3
  228. package/build/tooltip/trigger.cjs +2 -2
  229. package/build/tooltip/trigger.cjs.map +3 -3
  230. package/build/tooltip/types.cjs.map +1 -1
  231. package/build/utils/create-overlay-modal-context.cjs +48 -0
  232. package/build/utils/create-overlay-modal-context.cjs.map +7 -0
  233. package/build/utils/create-overlay-title-validation.cjs +93 -0
  234. package/build/utils/create-overlay-title-validation.cjs.map +7 -0
  235. package/build/utils/render-slot-with-children.cjs +34 -0
  236. package/build/utils/render-slot-with-children.cjs.map +7 -0
  237. package/build/utils/use-deprioritized-initial-focus.cjs +8 -8
  238. package/build/utils/use-deprioritized-initial-focus.cjs.map +2 -2
  239. package/build/utils/use-overlay-scroll-state-attributes.cjs +140 -0
  240. package/build/utils/use-overlay-scroll-state-attributes.cjs.map +7 -0
  241. package/build/visually-hidden/visually-hidden.cjs +89 -6
  242. package/build/visually-hidden/visually-hidden.cjs.map +3 -3
  243. package/build-module/alert-dialog/index.mjs +2 -0
  244. package/build-module/alert-dialog/index.mjs.map +2 -2
  245. package/build-module/alert-dialog/popup.mjs +198 -60
  246. package/build-module/alert-dialog/popup.mjs.map +3 -3
  247. package/build-module/alert-dialog/portal.mjs +13 -0
  248. package/build-module/alert-dialog/portal.mjs.map +7 -0
  249. package/build-module/badge/badge.mjs +84 -5
  250. package/build-module/badge/badge.mjs.map +3 -3
  251. package/build-module/button/button.mjs +90 -20
  252. package/build-module/button/button.mjs.map +3 -3
  253. package/build-module/button/icon.mjs.map +2 -2
  254. package/build-module/button/index.mjs +3 -2
  255. package/build-module/button/index.mjs.map +2 -2
  256. package/build-module/card/content.mjs +84 -5
  257. package/build-module/card/content.mjs.map +3 -3
  258. package/build-module/card/full-bleed.mjs +84 -5
  259. package/build-module/card/full-bleed.mjs.map +3 -3
  260. package/build-module/card/header.mjs +84 -5
  261. package/build-module/card/header.mjs.map +3 -3
  262. package/build-module/card/root.mjs +86 -10
  263. package/build-module/card/root.mjs.map +3 -3
  264. package/build-module/collapsible-card/content.mjs +90 -7
  265. package/build-module/collapsible-card/content.mjs.map +3 -3
  266. package/build-module/collapsible-card/header.mjs +131 -52
  267. package/build-module/collapsible-card/header.mjs.map +3 -3
  268. package/build-module/dialog/content.mjs +126 -0
  269. package/build-module/dialog/content.mjs.map +7 -0
  270. package/build-module/dialog/context.mjs +10 -63
  271. package/build-module/dialog/context.mjs.map +2 -2
  272. package/build-module/dialog/description.mjs +113 -0
  273. package/build-module/dialog/description.mjs.map +7 -0
  274. package/build-module/dialog/footer.mjs +86 -6
  275. package/build-module/dialog/footer.mjs.map +3 -3
  276. package/build-module/dialog/header.mjs +86 -6
  277. package/build-module/dialog/header.mjs.map +3 -3
  278. package/build-module/dialog/index.mjs +6 -0
  279. package/build-module/dialog/index.mjs.map +2 -2
  280. package/build-module/dialog/popup.mjs +104 -13
  281. package/build-module/dialog/popup.mjs.map +3 -3
  282. package/build-module/dialog/portal.mjs +13 -0
  283. package/build-module/dialog/portal.mjs.map +7 -0
  284. package/build-module/dialog/root.mjs +3 -2
  285. package/build-module/dialog/root.mjs.map +2 -2
  286. package/build-module/dialog/title.mjs +85 -6
  287. package/build-module/dialog/title.mjs.map +3 -3
  288. package/build-module/drawer/action.mjs +23 -0
  289. package/build-module/drawer/action.mjs.map +7 -0
  290. package/build-module/drawer/close-icon.mjs +33 -0
  291. package/build-module/drawer/close-icon.mjs.map +7 -0
  292. package/build-module/drawer/content.mjs +135 -0
  293. package/build-module/drawer/content.mjs.map +7 -0
  294. package/build-module/drawer/context.mjs +16 -0
  295. package/build-module/drawer/context.mjs.map +7 -0
  296. package/build-module/drawer/description.mjs +22 -0
  297. package/build-module/drawer/description.mjs.map +7 -0
  298. package/build-module/drawer/footer.mjs +109 -0
  299. package/build-module/drawer/footer.mjs.map +7 -0
  300. package/build-module/drawer/header.mjs +109 -0
  301. package/build-module/drawer/header.mjs.map +7 -0
  302. package/build-module/drawer/index.mjs +26 -0
  303. package/build-module/drawer/index.mjs.map +7 -0
  304. package/build-module/drawer/popup.mjs +149 -0
  305. package/build-module/drawer/popup.mjs.map +7 -0
  306. package/build-module/drawer/portal.mjs +13 -0
  307. package/build-module/drawer/portal.mjs.map +7 -0
  308. package/build-module/drawer/root.mjs +24 -0
  309. package/build-module/drawer/root.mjs.map +7 -0
  310. package/build-module/drawer/title.mjs +124 -0
  311. package/build-module/drawer/title.mjs.map +7 -0
  312. package/build-module/drawer/trigger.mjs +13 -0
  313. package/build-module/drawer/trigger.mjs.map +7 -0
  314. package/build-module/drawer/types.mjs +1 -0
  315. package/build-module/drawer/types.mjs.map +7 -0
  316. package/build-module/empty-state/actions.mjs +84 -5
  317. package/build-module/empty-state/actions.mjs.map +3 -3
  318. package/build-module/empty-state/description.mjs +84 -5
  319. package/build-module/empty-state/description.mjs.map +3 -3
  320. package/build-module/empty-state/icon.mjs +84 -5
  321. package/build-module/empty-state/icon.mjs.map +3 -3
  322. package/build-module/empty-state/root.mjs +84 -5
  323. package/build-module/empty-state/root.mjs.map +3 -3
  324. package/build-module/empty-state/title.mjs +84 -5
  325. package/build-module/empty-state/title.mjs.map +3 -3
  326. package/build-module/empty-state/visual.mjs +84 -5
  327. package/build-module/empty-state/visual.mjs.map +3 -3
  328. package/build-module/form/index.mjs +1 -0
  329. package/build-module/form/index.mjs.map +2 -2
  330. package/build-module/form/primitives/autocomplete/clear.mjs +37 -0
  331. package/build-module/form/primitives/autocomplete/clear.mjs.map +7 -0
  332. package/build-module/form/primitives/autocomplete/collection.mjs +13 -0
  333. package/build-module/form/primitives/autocomplete/collection.mjs.map +7 -0
  334. package/build-module/form/primitives/autocomplete/empty.mjs +111 -0
  335. package/build-module/form/primitives/autocomplete/empty.mjs.map +7 -0
  336. package/build-module/form/primitives/autocomplete/index.mjs +28 -0
  337. package/build-module/form/primitives/autocomplete/index.mjs.map +7 -0
  338. package/build-module/form/primitives/autocomplete/input-group.mjs +11 -0
  339. package/build-module/form/primitives/autocomplete/input-group.mjs.map +7 -0
  340. package/build-module/form/primitives/autocomplete/input.mjs +22 -0
  341. package/build-module/form/primitives/autocomplete/input.mjs.map +7 -0
  342. package/build-module/form/primitives/autocomplete/item.mjs +122 -0
  343. package/build-module/form/primitives/autocomplete/item.mjs.map +7 -0
  344. package/build-module/form/primitives/autocomplete/list-body.mjs +111 -0
  345. package/build-module/form/primitives/autocomplete/list-body.mjs.map +7 -0
  346. package/build-module/form/primitives/autocomplete/list.mjs +111 -0
  347. package/build-module/form/primitives/autocomplete/list.mjs.map +7 -0
  348. package/build-module/form/primitives/autocomplete/popup.mjs +142 -0
  349. package/build-module/form/primitives/autocomplete/popup.mjs.map +7 -0
  350. package/build-module/form/primitives/autocomplete/portal.mjs +13 -0
  351. package/build-module/form/primitives/autocomplete/portal.mjs.map +7 -0
  352. package/build-module/form/primitives/autocomplete/root.mjs +10 -0
  353. package/build-module/form/primitives/autocomplete/root.mjs.map +7 -0
  354. package/build-module/form/primitives/autocomplete/types.mjs +1 -0
  355. package/build-module/form/primitives/autocomplete/types.mjs.map +7 -0
  356. package/build-module/form/primitives/autocomplete/value.mjs +10 -0
  357. package/build-module/form/primitives/autocomplete/value.mjs.map +7 -0
  358. package/build-module/form/primitives/field/description.mjs +86 -10
  359. package/build-module/form/primitives/field/description.mjs.map +3 -3
  360. package/build-module/form/primitives/field/details.mjs +84 -5
  361. package/build-module/form/primitives/field/details.mjs.map +3 -3
  362. package/build-module/form/primitives/field/label.mjs +84 -5
  363. package/build-module/form/primitives/field/label.mjs.map +3 -3
  364. package/build-module/form/primitives/field/root.mjs +84 -5
  365. package/build-module/form/primitives/field/root.mjs.map +3 -3
  366. package/build-module/form/primitives/fieldset/description.mjs +86 -10
  367. package/build-module/form/primitives/fieldset/description.mjs.map +3 -3
  368. package/build-module/form/primitives/fieldset/details.mjs +84 -5
  369. package/build-module/form/primitives/fieldset/details.mjs.map +3 -3
  370. package/build-module/form/primitives/fieldset/legend.mjs +84 -5
  371. package/build-module/form/primitives/fieldset/legend.mjs.map +3 -3
  372. package/build-module/form/primitives/fieldset/root.mjs +84 -5
  373. package/build-module/form/primitives/fieldset/root.mjs.map +3 -3
  374. package/build-module/form/primitives/index.mjs +2 -0
  375. package/build-module/form/primitives/index.mjs.map +2 -2
  376. package/build-module/form/primitives/input/input.mjs +88 -15
  377. package/build-module/form/primitives/input/input.mjs.map +3 -3
  378. package/build-module/form/primitives/input-layout/input-layout.mjs +88 -15
  379. package/build-module/form/primitives/input-layout/input-layout.mjs.map +3 -3
  380. package/build-module/form/primitives/input-layout/slot.mjs +84 -5
  381. package/build-module/form/primitives/input-layout/slot.mjs.map +3 -3
  382. package/build-module/form/primitives/select/index.mjs +2 -0
  383. package/build-module/form/primitives/select/index.mjs.map +2 -2
  384. package/build-module/form/primitives/select/item.mjs +88 -13
  385. package/build-module/form/primitives/select/item.mjs.map +3 -3
  386. package/build-module/form/primitives/select/popup.mjs +97 -23
  387. package/build-module/form/primitives/select/popup.mjs.map +3 -3
  388. package/build-module/form/primitives/select/portal.mjs +13 -0
  389. package/build-module/form/primitives/select/portal.mjs.map +7 -0
  390. package/build-module/form/primitives/select/root.mjs.map +2 -2
  391. package/build-module/form/primitives/select/trigger.mjs +98 -16
  392. package/build-module/form/primitives/select/trigger.mjs.map +3 -3
  393. package/build-module/form/primitives/textarea/textarea.mjs +86 -10
  394. package/build-module/form/primitives/textarea/textarea.mjs.map +3 -3
  395. package/build-module/form/select-control/context.mjs +11 -0
  396. package/build-module/form/select-control/context.mjs.map +7 -0
  397. package/build-module/form/select-control/index.mjs +14 -0
  398. package/build-module/form/select-control/index.mjs.map +7 -0
  399. package/build-module/form/select-control/item.mjs +16 -0
  400. package/build-module/form/select-control/item.mjs.map +7 -0
  401. package/build-module/form/select-control/select-control.mjs +50 -0
  402. package/build-module/form/select-control/select-control.mjs.map +7 -0
  403. package/build-module/form/select-control/types.mjs +1 -0
  404. package/build-module/form/select-control/types.mjs.map +7 -0
  405. package/build-module/icon-button/icon-button.mjs +86 -6
  406. package/build-module/icon-button/icon-button.mjs.map +3 -3
  407. package/build-module/index.mjs +2 -0
  408. package/build-module/index.mjs.map +2 -2
  409. package/build-module/link/link.mjs +90 -20
  410. package/build-module/link/link.mjs.map +3 -3
  411. package/build-module/notice/action-button.mjs +84 -5
  412. package/build-module/notice/action-button.mjs.map +3 -3
  413. package/build-module/notice/action-link.mjs +84 -5
  414. package/build-module/notice/action-link.mjs.map +3 -3
  415. package/build-module/notice/actions.mjs +84 -5
  416. package/build-module/notice/actions.mjs.map +3 -3
  417. package/build-module/notice/close-icon.mjs +84 -5
  418. package/build-module/notice/close-icon.mjs.map +3 -3
  419. package/build-module/notice/description.mjs +84 -5
  420. package/build-module/notice/description.mjs.map +3 -3
  421. package/build-module/notice/root.mjs +86 -10
  422. package/build-module/notice/root.mjs.map +3 -3
  423. package/build-module/notice/title.mjs +84 -5
  424. package/build-module/notice/title.mjs.map +3 -3
  425. package/build-module/popover/arrow.mjs +85 -6
  426. package/build-module/popover/arrow.mjs.map +3 -3
  427. package/build-module/popover/context.mjs +4 -63
  428. package/build-module/popover/context.mjs.map +2 -2
  429. package/build-module/popover/description.mjs +1 -14
  430. package/build-module/popover/description.mjs.map +3 -3
  431. package/build-module/popover/index.mjs +2 -0
  432. package/build-module/popover/index.mjs.map +2 -2
  433. package/build-module/popover/popup.mjs +97 -24
  434. package/build-module/popover/popup.mjs.map +3 -3
  435. package/build-module/popover/portal.mjs +13 -0
  436. package/build-module/popover/portal.mjs.map +7 -0
  437. package/build-module/popover/root.mjs.map +1 -1
  438. package/build-module/popover/title.mjs +92 -2
  439. package/build-module/popover/title.mjs.map +3 -3
  440. package/build-module/stack/stack.mjs +84 -5
  441. package/build-module/stack/stack.mjs.map +3 -3
  442. package/build-module/tabs/list.mjs +84 -5
  443. package/build-module/tabs/list.mjs.map +3 -3
  444. package/build-module/tabs/panel.mjs +86 -10
  445. package/build-module/tabs/panel.mjs.map +3 -3
  446. package/build-module/tabs/tab.mjs +84 -5
  447. package/build-module/tabs/tab.mjs.map +3 -3
  448. package/build-module/text/text.mjs +88 -12
  449. package/build-module/text/text.mjs.map +3 -3
  450. package/build-module/tooltip/index.mjs +4 -0
  451. package/build-module/tooltip/index.mjs.map +2 -2
  452. package/build-module/tooltip/popup.mjs +115 -47
  453. package/build-module/tooltip/popup.mjs.map +3 -3
  454. package/build-module/tooltip/portal.mjs +13 -0
  455. package/build-module/tooltip/portal.mjs.map +7 -0
  456. package/build-module/tooltip/positioner.mjs +124 -0
  457. package/build-module/tooltip/positioner.mjs.map +7 -0
  458. package/build-module/tooltip/provider.mjs +3 -3
  459. package/build-module/tooltip/provider.mjs.map +2 -2
  460. package/build-module/tooltip/root.mjs +2 -2
  461. package/build-module/tooltip/root.mjs.map +2 -2
  462. package/build-module/tooltip/trigger.mjs +3 -3
  463. package/build-module/tooltip/trigger.mjs.map +2 -2
  464. package/build-module/utils/create-overlay-modal-context.mjs +23 -0
  465. package/build-module/utils/create-overlay-modal-context.mjs.map +7 -0
  466. package/build-module/utils/create-overlay-title-validation.mjs +75 -0
  467. package/build-module/utils/create-overlay-title-validation.mjs.map +7 -0
  468. package/build-module/utils/render-slot-with-children.mjs +9 -0
  469. package/build-module/utils/render-slot-with-children.mjs.map +7 -0
  470. package/build-module/utils/use-deprioritized-initial-focus.mjs +9 -9
  471. package/build-module/utils/use-deprioritized-initial-focus.mjs.map +2 -2
  472. package/build-module/utils/use-overlay-scroll-state-attributes.mjs +114 -0
  473. package/build-module/utils/use-overlay-scroll-state-attributes.mjs.map +7 -0
  474. package/build-module/visually-hidden/visually-hidden.mjs +89 -6
  475. package/build-module/visually-hidden/visually-hidden.mjs.map +3 -3
  476. package/build-types/alert-dialog/index.d.ts +1 -0
  477. package/build-types/alert-dialog/index.d.ts.map +1 -1
  478. package/build-types/alert-dialog/popup.d.ts.map +1 -1
  479. package/build-types/alert-dialog/portal.d.ts +9 -0
  480. package/build-types/alert-dialog/portal.d.ts.map +1 -0
  481. package/build-types/alert-dialog/root.d.ts +1 -1
  482. package/build-types/alert-dialog/root.d.ts.map +1 -1
  483. package/build-types/alert-dialog/stories/index.story.d.ts +28 -0
  484. package/build-types/alert-dialog/stories/index.story.d.ts.map +1 -1
  485. package/build-types/alert-dialog/types.d.ts +25 -3
  486. package/build-types/alert-dialog/types.d.ts.map +1 -1
  487. package/build-types/badge/stories/choosing-intent.story.d.ts.map +1 -1
  488. package/build-types/badge/stories/index.story.d.ts.map +1 -1
  489. package/build-types/button/button.d.ts +3 -0
  490. package/build-types/button/button.d.ts.map +1 -1
  491. package/build-types/button/icon.d.ts +1 -8
  492. package/build-types/button/icon.d.ts.map +1 -1
  493. package/build-types/button/index.d.ts +6 -5
  494. package/build-types/button/index.d.ts.map +1 -1
  495. package/build-types/button/stories/index.story.d.ts.map +1 -1
  496. package/build-types/button/types.d.ts +7 -0
  497. package/build-types/button/types.d.ts.map +1 -1
  498. package/build-types/card/stories/index.story.d.ts.map +1 -1
  499. package/build-types/collapsible/panel.d.ts +1 -1
  500. package/build-types/collapsible/root.d.ts +1 -1
  501. package/build-types/collapsible/stories/index.story.d.ts.map +1 -1
  502. package/build-types/collapsible/trigger.d.ts +1 -1
  503. package/build-types/collapsible-card/content.d.ts.map +1 -1
  504. package/build-types/collapsible-card/header.d.ts +6 -0
  505. package/build-types/collapsible-card/header.d.ts.map +1 -1
  506. package/build-types/collapsible-card/stories/index.story.d.ts +8 -0
  507. package/build-types/collapsible-card/stories/index.story.d.ts.map +1 -1
  508. package/build-types/dialog/content.d.ts +17 -0
  509. package/build-types/dialog/content.d.ts.map +1 -0
  510. package/build-types/dialog/context.d.ts +11 -16
  511. package/build-types/dialog/context.d.ts.map +1 -1
  512. package/build-types/dialog/description.d.ts +9 -0
  513. package/build-types/dialog/description.d.ts.map +1 -0
  514. package/build-types/dialog/footer.d.ts +8 -1
  515. package/build-types/dialog/footer.d.ts.map +1 -1
  516. package/build-types/dialog/header.d.ts +8 -1
  517. package/build-types/dialog/header.d.ts.map +1 -1
  518. package/build-types/dialog/index.d.ts +4 -1
  519. package/build-types/dialog/index.d.ts.map +1 -1
  520. package/build-types/dialog/popup.d.ts +2 -0
  521. package/build-types/dialog/popup.d.ts.map +1 -1
  522. package/build-types/dialog/portal.d.ts +10 -0
  523. package/build-types/dialog/portal.d.ts.map +1 -0
  524. package/build-types/dialog/root.d.ts +14 -4
  525. package/build-types/dialog/root.d.ts.map +1 -1
  526. package/build-types/dialog/stories/index.story.d.ts +29 -6
  527. package/build-types/dialog/stories/index.story.d.ts.map +1 -1
  528. package/build-types/dialog/types.d.ts +60 -7
  529. package/build-types/dialog/types.d.ts.map +1 -1
  530. package/build-types/drawer/action.d.ts +8 -0
  531. package/build-types/drawer/action.d.ts.map +1 -0
  532. package/build-types/drawer/close-icon.d.ts +8 -0
  533. package/build-types/drawer/close-icon.d.ts.map +1 -0
  534. package/build-types/drawer/content.d.ts +24 -0
  535. package/build-types/drawer/content.d.ts.map +1 -0
  536. package/build-types/drawer/context.d.ts +20 -0
  537. package/build-types/drawer/context.d.ts.map +1 -0
  538. package/build-types/drawer/description.d.ts +9 -0
  539. package/build-types/drawer/description.d.ts.map +1 -0
  540. package/build-types/drawer/footer.d.ts +15 -0
  541. package/build-types/drawer/footer.d.ts.map +1 -0
  542. package/build-types/drawer/header.d.ts +15 -0
  543. package/build-types/drawer/header.d.ts.map +1 -0
  544. package/build-types/drawer/index.d.ts +13 -0
  545. package/build-types/drawer/index.d.ts.map +1 -0
  546. package/build-types/drawer/popup.d.ts +15 -0
  547. package/build-types/drawer/popup.d.ts.map +1 -0
  548. package/build-types/drawer/portal.d.ts +10 -0
  549. package/build-types/drawer/portal.d.ts.map +1 -0
  550. package/build-types/drawer/root.d.ts +21 -0
  551. package/build-types/drawer/root.d.ts.map +1 -0
  552. package/build-types/drawer/stories/index.story.d.ts +63 -0
  553. package/build-types/drawer/stories/index.story.d.ts.map +1 -0
  554. package/build-types/drawer/test/index.test.d.ts +2 -0
  555. package/build-types/drawer/test/index.test.d.ts.map +1 -0
  556. package/build-types/drawer/title.d.ts +22 -0
  557. package/build-types/drawer/title.d.ts.map +1 -0
  558. package/build-types/drawer/trigger.d.ts +7 -0
  559. package/build-types/drawer/trigger.d.ts.map +1 -0
  560. package/build-types/drawer/types.d.ts +146 -0
  561. package/build-types/drawer/types.d.ts.map +1 -0
  562. package/build-types/empty-state/stories/index.story.d.ts.map +1 -1
  563. package/build-types/form/index.d.ts +1 -0
  564. package/build-types/form/index.d.ts.map +1 -1
  565. package/build-types/form/input-control/stories/index.story.d.ts.map +1 -1
  566. package/build-types/form/primitives/autocomplete/clear.d.ts +13 -0
  567. package/build-types/form/primitives/autocomplete/clear.d.ts.map +1 -0
  568. package/build-types/form/primitives/autocomplete/collection.d.ts +3 -0
  569. package/build-types/form/primitives/autocomplete/collection.d.ts.map +1 -0
  570. package/build-types/form/primitives/autocomplete/empty.d.ts +10 -0
  571. package/build-types/form/primitives/autocomplete/empty.d.ts.map +1 -0
  572. package/build-types/form/primitives/autocomplete/index.d.ts +13 -0
  573. package/build-types/form/primitives/autocomplete/index.d.ts.map +1 -0
  574. package/build-types/form/primitives/autocomplete/input-group.d.ts +16 -0
  575. package/build-types/form/primitives/autocomplete/input-group.d.ts.map +1 -0
  576. package/build-types/form/primitives/autocomplete/input.d.ts +3 -0
  577. package/build-types/form/primitives/autocomplete/input.d.ts.map +1 -0
  578. package/build-types/form/primitives/autocomplete/item.d.ts +10 -0
  579. package/build-types/form/primitives/autocomplete/item.d.ts.map +1 -0
  580. package/build-types/form/primitives/autocomplete/list-body.d.ts +13 -0
  581. package/build-types/form/primitives/autocomplete/list-body.d.ts.map +1 -0
  582. package/build-types/form/primitives/autocomplete/list.d.ts +11 -0
  583. package/build-types/form/primitives/autocomplete/list.d.ts.map +1 -0
  584. package/build-types/form/primitives/autocomplete/popup.d.ts +11 -0
  585. package/build-types/form/primitives/autocomplete/popup.d.ts.map +1 -0
  586. package/build-types/form/primitives/autocomplete/portal.d.ts +8 -0
  587. package/build-types/form/primitives/autocomplete/portal.d.ts.map +1 -0
  588. package/build-types/form/primitives/autocomplete/root.d.ts +8 -0
  589. package/build-types/form/primitives/autocomplete/root.d.ts.map +1 -0
  590. package/build-types/form/primitives/autocomplete/stories/fixtures.d.ts +8 -0
  591. package/build-types/form/primitives/autocomplete/stories/fixtures.d.ts.map +1 -0
  592. package/build-types/form/primitives/autocomplete/stories/index.story.d.ts +41 -0
  593. package/build-types/form/primitives/autocomplete/stories/index.story.d.ts.map +1 -0
  594. package/build-types/form/primitives/autocomplete/test/index.test.d.ts +2 -0
  595. package/build-types/form/primitives/autocomplete/test/index.test.d.ts.map +1 -0
  596. package/build-types/form/primitives/autocomplete/types.d.ts +44 -0
  597. package/build-types/form/primitives/autocomplete/types.d.ts.map +1 -0
  598. package/build-types/form/primitives/autocomplete/value.d.ts +3 -0
  599. package/build-types/form/primitives/autocomplete/value.d.ts.map +1 -0
  600. package/build-types/form/primitives/field/control.d.ts +2 -2
  601. package/build-types/form/primitives/field/description.d.ts +1 -1
  602. package/build-types/form/primitives/field/details.d.ts +1 -1
  603. package/build-types/form/primitives/field/label.d.ts +3 -3
  604. package/build-types/form/primitives/field/root.d.ts +3 -3
  605. package/build-types/form/primitives/field/stories/index.story.d.ts.map +1 -1
  606. package/build-types/form/primitives/fieldset/description.d.ts +1 -1
  607. package/build-types/form/primitives/fieldset/details.d.ts +1 -1
  608. package/build-types/form/primitives/fieldset/legend.d.ts +1 -1
  609. package/build-types/form/primitives/fieldset/root.d.ts +1 -1
  610. package/build-types/form/primitives/fieldset/stories/index.story.d.ts.map +1 -1
  611. package/build-types/form/primitives/index.d.ts +1 -0
  612. package/build-types/form/primitives/index.d.ts.map +1 -1
  613. package/build-types/form/primitives/input/input.d.ts +5 -5
  614. package/build-types/form/primitives/input/stories/index.story.d.ts.map +1 -1
  615. package/build-types/form/primitives/input-layout/stories/index.story.d.ts.map +1 -1
  616. package/build-types/form/primitives/select/index.d.ts +1 -0
  617. package/build-types/form/primitives/select/index.d.ts.map +1 -1
  618. package/build-types/form/primitives/select/item.d.ts +3 -3
  619. package/build-types/form/primitives/select/item.d.ts.map +1 -1
  620. package/build-types/form/primitives/select/popup.d.ts +2 -3
  621. package/build-types/form/primitives/select/popup.d.ts.map +1 -1
  622. package/build-types/form/primitives/select/portal.d.ts +8 -0
  623. package/build-types/form/primitives/select/portal.d.ts.map +1 -0
  624. package/build-types/form/primitives/select/root.d.ts +12 -1
  625. package/build-types/form/primitives/select/root.d.ts.map +1 -1
  626. package/build-types/form/primitives/select/stories/index.story.d.ts +22 -11
  627. package/build-types/form/primitives/select/stories/index.story.d.ts.map +1 -1
  628. package/build-types/form/primitives/select/trigger.d.ts +5 -4
  629. package/build-types/form/primitives/select/trigger.d.ts.map +1 -1
  630. package/build-types/form/primitives/select/types.d.ts +19 -6
  631. package/build-types/form/primitives/select/types.d.ts.map +1 -1
  632. package/build-types/form/primitives/textarea/stories/index.story.d.ts.map +1 -1
  633. package/build-types/form/primitives/textarea/textarea.d.ts +2 -2
  634. package/build-types/form/select-control/context.d.ts +3 -0
  635. package/build-types/form/select-control/context.d.ts.map +1 -0
  636. package/build-types/form/select-control/index.d.ts +20 -0
  637. package/build-types/form/select-control/index.d.ts.map +1 -0
  638. package/build-types/form/select-control/item.d.ts +6 -0
  639. package/build-types/form/select-control/item.d.ts.map +1 -0
  640. package/build-types/form/select-control/select-control.d.ts +11 -0
  641. package/build-types/form/select-control/select-control.d.ts.map +1 -0
  642. package/build-types/form/select-control/stories/index.story.d.ts +40 -0
  643. package/build-types/form/select-control/stories/index.story.d.ts.map +1 -0
  644. package/build-types/form/select-control/test/index.test.d.ts +2 -0
  645. package/build-types/form/select-control/test/index.test.d.ts.map +1 -0
  646. package/build-types/form/select-control/types.d.ts +40 -0
  647. package/build-types/form/select-control/types.d.ts.map +1 -0
  648. package/build-types/form/types.d.ts +1 -1
  649. package/build-types/form/types.d.ts.map +1 -1
  650. package/build-types/icon/stories/index.story.d.ts.map +1 -1
  651. package/build-types/icon-button/icon-button.d.ts +2 -1
  652. package/build-types/icon-button/icon-button.d.ts.map +1 -1
  653. package/build-types/icon-button/stories/index.story.d.ts +5 -0
  654. package/build-types/icon-button/stories/index.story.d.ts.map +1 -1
  655. package/build-types/icon-button/types.d.ts +8 -0
  656. package/build-types/icon-button/types.d.ts.map +1 -1
  657. package/build-types/index.d.ts +1 -0
  658. package/build-types/index.d.ts.map +1 -1
  659. package/build-types/link/stories/index.story.d.ts +2 -3
  660. package/build-types/link/stories/index.story.d.ts.map +1 -1
  661. package/build-types/notice/stories/index.story.d.ts.map +1 -1
  662. package/build-types/popover/context.d.ts +6 -13
  663. package/build-types/popover/context.d.ts.map +1 -1
  664. package/build-types/popover/description.d.ts +0 -1
  665. package/build-types/popover/description.d.ts.map +1 -1
  666. package/build-types/popover/index.d.ts +2 -1
  667. package/build-types/popover/index.d.ts.map +1 -1
  668. package/build-types/popover/popup.d.ts +3 -2
  669. package/build-types/popover/popup.d.ts.map +1 -1
  670. package/build-types/popover/portal.d.ts +9 -0
  671. package/build-types/popover/portal.d.ts.map +1 -0
  672. package/build-types/popover/root.d.ts +2 -2
  673. package/build-types/popover/stories/index.story.d.ts +22 -14
  674. package/build-types/popover/stories/index.story.d.ts.map +1 -1
  675. package/build-types/popover/title.d.ts.map +1 -1
  676. package/build-types/popover/types.d.ts +8 -15
  677. package/build-types/popover/types.d.ts.map +1 -1
  678. package/build-types/stack/stories/index.story.d.ts.map +1 -1
  679. package/build-types/tabs/context.d.ts +1 -1
  680. package/build-types/tabs/context.d.ts.map +1 -1
  681. package/build-types/tabs/list.d.ts +2 -2
  682. package/build-types/tabs/panel.d.ts +1 -1
  683. package/build-types/tabs/root.d.ts +1 -1
  684. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  685. package/build-types/tabs/tab.d.ts +1 -1
  686. package/build-types/text/stories/index.story.d.ts.map +1 -1
  687. package/build-types/tooltip/index.d.ts +3 -1
  688. package/build-types/tooltip/index.d.ts.map +1 -1
  689. package/build-types/tooltip/popup.d.ts.map +1 -1
  690. package/build-types/tooltip/portal.d.ts +8 -0
  691. package/build-types/tooltip/portal.d.ts.map +1 -0
  692. package/build-types/tooltip/positioner.d.ts +9 -0
  693. package/build-types/tooltip/positioner.d.ts.map +1 -0
  694. package/build-types/tooltip/provider.d.ts +1 -1
  695. package/build-types/tooltip/provider.d.ts.map +1 -1
  696. package/build-types/tooltip/stories/index.story.d.ts +28 -2
  697. package/build-types/tooltip/stories/index.story.d.ts.map +1 -1
  698. package/build-types/tooltip/stories/usage-guidelines.story.d.ts.map +1 -1
  699. package/build-types/tooltip/trigger.d.ts.map +1 -1
  700. package/build-types/tooltip/types.d.ts +20 -7
  701. package/build-types/tooltip/types.d.ts.map +1 -1
  702. package/build-types/utils/create-overlay-modal-context.d.ts +14 -0
  703. package/build-types/utils/create-overlay-modal-context.d.ts.map +1 -0
  704. package/build-types/utils/create-overlay-title-validation.d.ts +15 -0
  705. package/build-types/utils/create-overlay-title-validation.d.ts.map +1 -0
  706. package/build-types/utils/render-slot-with-children.d.ts +24 -0
  707. package/build-types/utils/render-slot-with-children.d.ts.map +1 -0
  708. package/build-types/utils/use-deprioritized-initial-focus.d.ts +9 -8
  709. package/build-types/utils/use-deprioritized-initial-focus.d.ts.map +1 -1
  710. package/build-types/utils/use-overlay-scroll-state-attributes.d.ts +85 -0
  711. package/build-types/utils/use-overlay-scroll-state-attributes.d.ts.map +1 -0
  712. package/build-types/visually-hidden/stories/index.story.d.ts.map +1 -1
  713. package/build-types/visually-hidden/visually-hidden.d.ts +4 -20
  714. package/build-types/visually-hidden/visually-hidden.d.ts.map +1 -1
  715. package/package.json +14 -13
  716. package/src/alert-dialog/index.ts +1 -0
  717. package/src/alert-dialog/popup.tsx +114 -45
  718. package/src/alert-dialog/portal.tsx +17 -0
  719. package/src/alert-dialog/stories/index.story.tsx +129 -1
  720. package/src/alert-dialog/style.module.css +13 -4
  721. package/src/alert-dialog/test/index.test.tsx +329 -3
  722. package/src/alert-dialog/types.ts +30 -3
  723. package/src/badge/stories/index.story.tsx +6 -0
  724. package/src/button/button.tsx +3 -0
  725. package/src/button/icon.tsx +1 -8
  726. package/src/button/index.ts +5 -6
  727. package/src/button/stories/index.story.tsx +10 -0
  728. package/src/button/types.ts +8 -0
  729. package/src/card/stories/index.story.tsx +7 -0
  730. package/src/collapsible/stories/index.story.tsx +7 -0
  731. package/src/collapsible-card/content.tsx +12 -1
  732. package/src/collapsible-card/header.tsx +55 -42
  733. package/src/collapsible-card/stories/index.story.tsx +62 -0
  734. package/src/collapsible-card/style.module.css +36 -4
  735. package/src/collapsible-card/test/index.test.tsx +60 -1
  736. package/src/dialog/content.tsx +47 -0
  737. package/src/dialog/context.tsx +14 -111
  738. package/src/dialog/description.tsx +27 -0
  739. package/src/dialog/footer.tsx +10 -2
  740. package/src/dialog/header.tsx +10 -2
  741. package/src/dialog/index.ts +16 -1
  742. package/src/dialog/popup.tsx +27 -8
  743. package/src/dialog/portal.tsx +18 -0
  744. package/src/dialog/root.tsx +22 -5
  745. package/src/dialog/stories/index.story.tsx +200 -48
  746. package/src/dialog/style.module.css +76 -44
  747. package/src/dialog/test/index.test.tsx +632 -12
  748. package/src/dialog/types.ts +64 -6
  749. package/src/drawer/action.tsx +28 -0
  750. package/src/drawer/close-icon.tsx +33 -0
  751. package/src/drawer/content.tsx +65 -0
  752. package/src/drawer/context.tsx +29 -0
  753. package/src/drawer/description.tsx +25 -0
  754. package/src/drawer/footer.tsx +34 -0
  755. package/src/drawer/header.tsx +34 -0
  756. package/src/drawer/index.ts +25 -0
  757. package/src/drawer/popup.tsx +99 -0
  758. package/src/drawer/portal.tsx +18 -0
  759. package/src/drawer/root.tsx +41 -0
  760. package/src/drawer/stories/index.story.tsx +550 -0
  761. package/src/drawer/style.module.css +356 -0
  762. package/src/drawer/test/index.test.tsx +1153 -0
  763. package/src/drawer/title.tsx +53 -0
  764. package/src/drawer/trigger.tsx +14 -0
  765. package/src/drawer/types.ts +174 -0
  766. package/src/empty-state/stories/index.story.tsx +7 -0
  767. package/src/form/index.ts +1 -0
  768. package/src/form/input-control/stories/index.story.tsx +7 -0
  769. package/src/form/primitives/autocomplete/clear.tsx +35 -0
  770. package/src/form/primitives/autocomplete/collection.tsx +13 -0
  771. package/src/form/primitives/autocomplete/empty.tsx +17 -0
  772. package/src/form/primitives/autocomplete/index.ts +12 -0
  773. package/src/form/primitives/autocomplete/input-group.tsx +16 -0
  774. package/src/form/primitives/autocomplete/input.tsx +20 -0
  775. package/src/form/primitives/autocomplete/item.tsx +24 -0
  776. package/src/form/primitives/autocomplete/list-body.tsx +23 -0
  777. package/src/form/primitives/autocomplete/list.tsx +17 -0
  778. package/src/form/primitives/autocomplete/popup.tsx +42 -0
  779. package/src/form/primitives/autocomplete/portal.tsx +16 -0
  780. package/src/form/primitives/autocomplete/root.tsx +11 -0
  781. package/src/form/primitives/autocomplete/stories/fixtures.ts +35 -0
  782. package/src/form/primitives/autocomplete/stories/index.story.tsx +445 -0
  783. package/src/form/primitives/autocomplete/style.module.css +7 -0
  784. package/src/form/primitives/autocomplete/test/index.test.tsx +162 -0
  785. package/src/form/primitives/autocomplete/types.ts +74 -0
  786. package/src/form/primitives/autocomplete/value.tsx +6 -0
  787. package/src/form/primitives/field/stories/index.story.tsx +12 -5
  788. package/src/form/primitives/fieldset/stories/index.story.tsx +10 -3
  789. package/src/form/primitives/index.ts +1 -0
  790. package/src/form/primitives/input/stories/index.story.tsx +7 -0
  791. package/src/form/primitives/input-layout/stories/index.story.tsx +8 -1
  792. package/src/form/primitives/select/index.ts +1 -0
  793. package/src/form/primitives/select/item.tsx +1 -2
  794. package/src/form/primitives/select/popup.tsx +34 -37
  795. package/src/form/primitives/select/portal.tsx +16 -0
  796. package/src/form/primitives/select/root.tsx +13 -2
  797. package/src/form/primitives/select/stories/index.story.tsx +152 -67
  798. package/src/form/primitives/select/test/index.test.tsx +130 -8
  799. package/src/form/primitives/select/trigger.tsx +11 -8
  800. package/src/form/primitives/select/types.ts +22 -7
  801. package/src/form/primitives/textarea/stories/index.story.tsx +7 -0
  802. package/src/form/select-control/context.tsx +9 -0
  803. package/src/form/select-control/index.ts +14 -0
  804. package/src/form/select-control/item.tsx +13 -0
  805. package/src/form/select-control/select-control.tsx +65 -0
  806. package/src/form/select-control/stories/index.story.tsx +220 -0
  807. package/src/form/select-control/test/index.test.tsx +196 -0
  808. package/src/form/select-control/types.ts +50 -0
  809. package/src/form/types.ts +1 -1
  810. package/src/icon/stories/index.story.tsx +7 -0
  811. package/src/icon-button/icon-button.tsx +2 -1
  812. package/src/icon-button/stories/index.story.tsx +20 -0
  813. package/src/icon-button/types.ts +9 -0
  814. package/src/index.ts +1 -0
  815. package/src/link/stories/index.story.tsx +12 -11
  816. package/src/link/style.module.css +2 -1
  817. package/src/notice/stories/index.story.tsx +7 -0
  818. package/src/popover/context.tsx +6 -105
  819. package/src/popover/description.tsx +1 -5
  820. package/src/popover/index.ts +2 -1
  821. package/src/popover/popup.tsx +15 -16
  822. package/src/popover/portal.tsx +17 -0
  823. package/src/popover/root.tsx +2 -2
  824. package/src/popover/stories/index.story.tsx +61 -24
  825. package/src/popover/style.module.css +34 -27
  826. package/src/popover/test/index.test.tsx +46 -7
  827. package/src/popover/title.tsx +3 -2
  828. package/src/popover/types.ts +10 -15
  829. package/src/stack/stories/index.story.tsx +6 -0
  830. package/src/tabs/stories/index.story.tsx +15 -1
  831. package/src/text/stories/index.story.tsx +6 -0
  832. package/src/text/style.module.css +25 -0
  833. package/src/text/text.tsx +2 -2
  834. package/src/tooltip/index.ts +3 -1
  835. package/src/tooltip/popup.tsx +32 -44
  836. package/src/tooltip/portal.tsx +16 -0
  837. package/src/tooltip/positioner.tsx +36 -0
  838. package/src/tooltip/provider.tsx +3 -3
  839. package/src/tooltip/root.tsx +2 -2
  840. package/src/tooltip/stories/index.story.tsx +97 -9
  841. package/src/tooltip/stories/usage-guidelines.story.tsx +5 -0
  842. package/src/tooltip/style.module.css +12 -12
  843. package/src/tooltip/test/index.test.tsx +9 -3
  844. package/src/tooltip/trigger.tsx +3 -7
  845. package/src/tooltip/types.ts +26 -9
  846. package/src/utils/create-overlay-modal-context.tsx +34 -0
  847. package/src/utils/create-overlay-title-validation.tsx +116 -0
  848. package/src/utils/css/dropdown-motion.module.css +3 -3
  849. package/src/utils/css/item-popup.module.css +14 -24
  850. package/src/utils/css/overlay-chrome.module.css +239 -0
  851. package/src/utils/css/select-trigger.module.css +5 -2
  852. package/src/utils/render-slot-with-children.ts +31 -0
  853. package/src/utils/test/use-deprioritized-initial-focus.test.tsx +3 -3
  854. package/src/utils/use-deprioritized-initial-focus.ts +23 -17
  855. package/src/utils/use-overlay-scroll-state-attributes.ts +272 -0
  856. package/src/visually-hidden/stories/index.story.tsx +7 -0
  857. package/src/visually-hidden/visually-hidden.tsx +9 -21
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/ui/src/utils/create-overlay-modal-context.tsx
21
+ var create_overlay_modal_context_exports = {};
22
+ __export(create_overlay_modal_context_exports, {
23
+ createOverlayModalContext: () => createOverlayModalContext
24
+ });
25
+ module.exports = __toCommonJS(create_overlay_modal_context_exports);
26
+ var import_element = require("@wordpress/element");
27
+ var import_jsx_runtime = require("react/jsx-runtime");
28
+ function createOverlayModalContext(initialValue) {
29
+ const OverlayModalContext = (0, import_element.createContext)(initialValue);
30
+ function OverlayModalProvider({
31
+ modal,
32
+ children
33
+ }) {
34
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OverlayModalContext.Provider, { value: modal, children });
35
+ }
36
+ function useOverlayModal() {
37
+ return (0, import_element.useContext)(OverlayModalContext);
38
+ }
39
+ return {
40
+ Provider: OverlayModalProvider,
41
+ useModal: useOverlayModal
42
+ };
43
+ }
44
+ // Annotate the CommonJS export names for ESM import in node:
45
+ 0 && (module.exports = {
46
+ createOverlayModalContext
47
+ });
48
+ //# sourceMappingURL=create-overlay-modal-context.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/create-overlay-modal-context.tsx"],
4
+ "sourcesContent": ["import { createContext, useContext } from '@wordpress/element';\n\ntype OverlayModalProviderProps< Modal > = {\n\tmodal: Modal;\n\tchildren: React.ReactNode;\n};\n\n/**\n * Creates a modal context pair (`Provider` + `useModal`) for overlay\n * primitives like Dialog and Drawer.\n */\nexport function createOverlayModalContext< Modal >( initialValue: Modal ) {\n\tconst OverlayModalContext = createContext< Modal >( initialValue );\n\n\tfunction OverlayModalProvider( {\n\t\tmodal,\n\t\tchildren,\n\t}: OverlayModalProviderProps< Modal > ) {\n\t\treturn (\n\t\t\t<OverlayModalContext.Provider value={ modal }>\n\t\t\t\t{ children }\n\t\t\t</OverlayModalContext.Provider>\n\t\t);\n\t}\n\n\tfunction useOverlayModal() {\n\t\treturn useContext( OverlayModalContext );\n\t}\n\n\treturn {\n\t\tProvider: OverlayModalProvider,\n\t\tuseModal: useOverlayModal,\n\t};\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA0C;AAmBvC;AARI,SAAS,0BAAoC,cAAsB;AACzE,QAAM,0BAAsB,8BAAwB,YAAa;AAEjE,WAAS,qBAAsB;AAAA,IAC9B;AAAA,IACA;AAAA,EACD,GAAwC;AACvC,WACC,4CAAC,oBAAoB,UAApB,EAA6B,OAAQ,OACnC,UACH;AAAA,EAEF;AAEA,WAAS,kBAAkB;AAC1B,eAAO,2BAAY,mBAAoB;AAAA,EACxC;AAEA,SAAO;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,EACX;AACD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/ui/src/utils/create-overlay-title-validation.tsx
21
+ var create_overlay_title_validation_exports = {};
22
+ __export(create_overlay_title_validation_exports, {
23
+ createOverlayTitleValidation: () => createOverlayTitleValidation
24
+ });
25
+ module.exports = __toCommonJS(create_overlay_title_validation_exports);
26
+ var import_element = require("@wordpress/element");
27
+ var import_use_schedule_validation = require("./use-schedule-validation.cjs");
28
+ var import_jsx_runtime = require("react/jsx-runtime");
29
+ var VALIDATION_ENABLED = process.env.NODE_ENV !== "production";
30
+ function createOverlayTitleValidation(componentName) {
31
+ const componentNameLowerCase = componentName.toLowerCase();
32
+ const OverlayValidationContext = VALIDATION_ENABLED ? (0, import_element.createContext)(null) : null;
33
+ function useValidationContextDev() {
34
+ return (0, import_element.useContext)(OverlayValidationContext);
35
+ }
36
+ function useValidationContextProd() {
37
+ return null;
38
+ }
39
+ const useValidationContext = VALIDATION_ENABLED ? useValidationContextDev : useValidationContextProd;
40
+ function ValidationProviderDev({
41
+ children
42
+ }) {
43
+ const titleElementRef = (0, import_element.useRef)(null);
44
+ const scheduleValidation = (0, import_use_schedule_validation.useScheduleValidation)(() => {
45
+ const titleElement = titleElementRef.current;
46
+ if (!titleElement) {
47
+ throw new Error(
48
+ `${componentName}: Missing <${componentName}.Title>. For accessibility, every ${componentNameLowerCase} requires a title. If needed, the title can be visually hidden but must not be omitted.`
49
+ );
50
+ }
51
+ const textContent = titleElement.textContent?.trim();
52
+ if (!textContent) {
53
+ throw new Error(
54
+ `${componentName}: <${componentName}.Title> cannot be empty. Provide meaningful text content for the ${componentNameLowerCase} title.`
55
+ );
56
+ }
57
+ });
58
+ const registerTitle = (0, import_element.useCallback)(
59
+ (element) => {
60
+ titleElementRef.current = element;
61
+ scheduleValidation();
62
+ return () => {
63
+ titleElementRef.current = null;
64
+ scheduleValidation();
65
+ };
66
+ },
67
+ [scheduleValidation]
68
+ );
69
+ const contextValue = (0, import_element.useMemo)(
70
+ () => ({ registerTitle }),
71
+ [registerTitle]
72
+ );
73
+ (0, import_element.useEffect)(() => {
74
+ scheduleValidation();
75
+ }, [scheduleValidation]);
76
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OverlayValidationContext.Provider, { value: contextValue, children });
77
+ }
78
+ function ValidationProviderProd({
79
+ children
80
+ }) {
81
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children });
82
+ }
83
+ const ValidationProvider = VALIDATION_ENABLED ? ValidationProviderDev : ValidationProviderProd;
84
+ return {
85
+ ValidationProvider,
86
+ useValidationContext
87
+ };
88
+ }
89
+ // Annotate the CommonJS export names for ESM import in node:
90
+ 0 && (module.exports = {
91
+ createOverlayTitleValidation
92
+ });
93
+ //# sourceMappingURL=create-overlay-title-validation.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/create-overlay-title-validation.tsx"],
4
+ "sourcesContent": ["import {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n} from '@wordpress/element';\nimport { useScheduleValidation } from './use-schedule-validation';\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 OverlayValidationContextType = {\n\tregisterTitle: ( element: HTMLElement | null ) => () => void;\n};\n\ntype OverlayValidationProviderProps = {\n\tchildren: React.ReactNode;\n};\n\n/**\n * Creates development-only title validation helpers for overlay primitives.\n */\nexport function createOverlayTitleValidation( componentName: string ) {\n\tconst componentNameLowerCase = componentName.toLowerCase();\n\tconst OverlayValidationContext = VALIDATION_ENABLED\n\t\t? createContext< OverlayValidationContextType | null >( null )\n\t\t: ( null as unknown as React.Context< OverlayValidationContextType | null > );\n\n\tfunction useValidationContextDev() {\n\t\treturn useContext( OverlayValidationContext );\n\t}\n\n\tfunction useValidationContextProd() {\n\t\treturn null;\n\t}\n\n\tconst useValidationContext = VALIDATION_ENABLED\n\t\t? useValidationContextDev\n\t\t: useValidationContextProd;\n\n\tfunction ValidationProviderDev( {\n\t\tchildren,\n\t}: OverlayValidationProviderProps ) {\n\t\tconst titleElementRef = useRef< HTMLElement | null >( null );\n\n\t\tconst scheduleValidation = useScheduleValidation( () => {\n\t\t\tconst titleElement = titleElementRef.current;\n\n\t\t\tif ( ! titleElement ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${ componentName }: Missing <${ componentName }.Title>. ` +\n\t\t\t\t\t\t`For accessibility, every ${ componentNameLowerCase } requires a title. ` +\n\t\t\t\t\t\t'If needed, the title can be visually hidden but must not be omitted.'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst textContent = titleElement.textContent?.trim();\n\t\t\tif ( ! textContent ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${ componentName }: <${ componentName }.Title> cannot be empty. ` +\n\t\t\t\t\t\t`Provide meaningful text content for the ${ componentNameLowerCase } title.`\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t\tconst registerTitle = useCallback(\n\t\t\t( element: HTMLElement | null ) => {\n\t\t\t\ttitleElementRef.current = element;\n\t\t\t\tscheduleValidation();\n\n\t\t\t\treturn () => {\n\t\t\t\t\ttitleElementRef.current = null;\n\t\t\t\t\tscheduleValidation();\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ scheduleValidation ]\n\t\t);\n\n\t\tconst contextValue = useMemo(\n\t\t\t() => ( { registerTitle } ),\n\t\t\t[ registerTitle ]\n\t\t);\n\n\t\t// Schedule an initial validation on mount to catch missing titles\n\t\t// (when no Title component is rendered, registerTitle is never called).\n\t\tuseEffect( () => {\n\t\t\tscheduleValidation();\n\t\t}, [ scheduleValidation ] );\n\n\t\treturn (\n\t\t\t<OverlayValidationContext.Provider value={ contextValue }>\n\t\t\t\t{ children }\n\t\t\t</OverlayValidationContext.Provider>\n\t\t);\n\t}\n\n\tfunction ValidationProviderProd( {\n\t\tchildren,\n\t}: OverlayValidationProviderProps ) {\n\t\treturn <>{ children }</>;\n\t}\n\n\tconst ValidationProvider = VALIDATION_ENABLED\n\t\t? ValidationProviderDev\n\t\t: ValidationProviderProd;\n\n\treturn {\n\t\tValidationProvider,\n\t\tuseValidationContext,\n\t};\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAOO;AACP,qCAAsC;AAuFnC;AAjFH,IAAM,qBAAqB,QAAQ,IAAI,aAAa;AAa7C,SAAS,6BAA8B,eAAwB;AACrE,QAAM,yBAAyB,cAAc,YAAY;AACzD,QAAM,2BAA2B,yBAC9B,8BAAsD,IAAK,IACzD;AAEL,WAAS,0BAA0B;AAClC,eAAO,2BAAY,wBAAyB;AAAA,EAC7C;AAEA,WAAS,2BAA2B;AACnC,WAAO;AAAA,EACR;AAEA,QAAM,uBAAuB,qBAC1B,0BACA;AAEH,WAAS,sBAAuB;AAAA,IAC/B;AAAA,EACD,GAAoC;AACnC,UAAM,sBAAkB,uBAA8B,IAAK;AAE3D,UAAM,yBAAqB,sDAAuB,MAAM;AACvD,YAAM,eAAe,gBAAgB;AAErC,UAAK,CAAE,cAAe;AACrB,cAAM,IAAI;AAAA,UACT,GAAI,aAAc,cAAe,aAAc,qCACjB,sBAAuB;AAAA,QAEtD;AAAA,MACD;AAEA,YAAM,cAAc,aAAa,aAAa,KAAK;AACnD,UAAK,CAAE,aAAc;AACpB,cAAM,IAAI;AAAA,UACT,GAAI,aAAc,MAAO,aAAc,oEACM,sBAAuB;AAAA,QACrE;AAAA,MACD;AAAA,IACD,CAAE;AAEF,UAAM,oBAAgB;AAAA,MACrB,CAAE,YAAiC;AAClC,wBAAgB,UAAU;AAC1B,2BAAmB;AAEnB,eAAO,MAAM;AACZ,0BAAgB,UAAU;AAC1B,6BAAmB;AAAA,QACpB;AAAA,MACD;AAAA,MACA,CAAE,kBAAmB;AAAA,IACtB;AAEA,UAAM,mBAAe;AAAA,MACpB,OAAQ,EAAE,cAAc;AAAA,MACxB,CAAE,aAAc;AAAA,IACjB;AAIA,kCAAW,MAAM;AAChB,yBAAmB;AAAA,IACpB,GAAG,CAAE,kBAAmB,CAAE;AAE1B,WACC,4CAAC,yBAAyB,UAAzB,EAAkC,OAAQ,cACxC,UACH;AAAA,EAEF;AAEA,WAAS,uBAAwB;AAAA,IAChC;AAAA,EACD,GAAoC;AACnC,WAAO,2EAAI,UAAU;AAAA,EACtB;AAEA,QAAM,qBAAqB,qBACxB,wBACA;AAEH,SAAO;AAAA,IACN;AAAA,IACA;AAAA,EACD;AACD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/ui/src/utils/render-slot-with-children.ts
21
+ var render_slot_with_children_exports = {};
22
+ __export(render_slot_with_children_exports, {
23
+ renderSlotWithChildren: () => renderSlotWithChildren
24
+ });
25
+ module.exports = __toCommonJS(render_slot_with_children_exports);
26
+ var import_element = require("@wordpress/element");
27
+ function renderSlotWithChildren(slot, defaultSlot, children) {
28
+ return (0, import_element.cloneElement)(slot ?? defaultSlot, { children });
29
+ }
30
+ // Annotate the CommonJS export names for ESM import in node:
31
+ 0 && (module.exports = {
32
+ renderSlotWithChildren
33
+ });
34
+ //# sourceMappingURL=render-slot-with-children.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/render-slot-with-children.ts"],
4
+ "sourcesContent": ["import { cloneElement } from '@wordpress/element';\nimport type { ReactElement, ReactNode } from 'react';\n\n/**\n * Fills an optional \"slot\" element prop with content by cloning it and\n * injecting the given `children`. When `slot` is undefined, the provided\n * `defaultSlot` is used in its place.\n *\n * Shared by overlay `Popup` components for their slot-shaped customization\n * props (e.g. `portal`, `positioner`), so the merge behavior \u2014 defaults,\n * children injection \u2014 stays consistent across all of them.\n *\n * Callers should type the slot prop as `ReactElement<Omit<Props, 'children'>>`:\n * any subtree passed on the slot element is overwritten by `children`.\n *\n * @param slot Optional element from the slot prop (e.g. `<Tooltip.Portal \u2026 />`\n * or `<Tooltip.Positioner \u2026 />`). When omitted, `defaultSlot`\n * is used. Injected `children` replace any subtree the caller\n * may have passed on the slot element.\n * @param defaultSlot Unpopulated default element used when `slot` is omitted\n * (e.g. `<Tooltip.Portal />`).\n * @param children Content to inject as the slot's children (backdrop,\n * positioner, popup subtree, etc.).\n */\nexport function renderSlotWithChildren(\n\tslot: ReactElement | undefined,\n\tdefaultSlot: ReactElement,\n\tchildren: ReactNode\n): ReactElement {\n\treturn cloneElement( slot ?? defaultSlot, { children } );\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA6B;AAwBtB,SAAS,uBACf,MACA,aACA,UACe;AACf,aAAO,6BAAc,QAAQ,aAAa,EAAE,SAAS,CAAE;AACxD;",
6
+ "names": []
7
+ }
@@ -31,14 +31,12 @@ var getTabbableOptions = () => ({
31
31
  });
32
32
  function useDeprioritizedInitialFocus({
33
33
  initialFocus,
34
- deprioritizedAttribute
34
+ deprioritizedAttributes
35
35
  }) {
36
36
  const popupRef = (0, import_element.useRef)(null);
37
- const resolvedInitialFocus = (0, import_element.useMemo)(() => {
38
- if (initialFocus !== void 0 && initialFocus !== true) {
39
- return initialFocus;
40
- }
41
- return (interactionType) => {
37
+ let resolvedInitialFocus = initialFocus;
38
+ if (initialFocus === void 0 || initialFocus === true) {
39
+ resolvedInitialFocus = (interactionType) => {
42
40
  if (interactionType === "touch") {
43
41
  return popupRef.current ?? true;
44
42
  }
@@ -48,13 +46,15 @@ function useDeprioritizedInitialFocus({
48
46
  }
49
47
  const tabbables = (0, import_tabbable.tabbable)(popup, getTabbableOptions());
50
48
  for (const el of tabbables) {
51
- if (el instanceof HTMLElement && !el.hasAttribute(deprioritizedAttribute)) {
49
+ if (el instanceof HTMLElement && !deprioritizedAttributes.some(
50
+ (attr) => el.hasAttribute(attr)
51
+ )) {
52
52
  return el;
53
53
  }
54
54
  }
55
55
  return true;
56
56
  };
57
- }, [initialFocus, deprioritizedAttribute]);
57
+ }
58
58
  return { resolvedInitialFocus, popupRef };
59
59
  }
60
60
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/use-deprioritized-initial-focus.ts"],
4
- "sourcesContent": ["import type { Popover as _Popover } from '@base-ui/react/popover';\nimport { useMemo, useRef } from '@wordpress/element';\nimport { tabbable } from 'tabbable';\n\n/**\n * The `initialFocus` type shared by Base UI overlay popups (Dialog, Popover,\n * AlertDialog, etc.). We derive it from `Popover.Popup.Props` here, but it\n * is identical across all overlay components.\n */\ntype InitialFocus = _Popover.Popup.Props[ 'initialFocus' ];\n\n/**\n * Options matching Base UI's internal tabbable configuration.\n * @see https://github.com/floating-ui/floating-ui/blob/master/packages/react/src/utils/tabbable.ts\n */\nconst getTabbableOptions = () => ( {\n\tgetShadowRoot: true,\n\tdisplayCheck:\n\t\ttypeof ResizeObserver === 'function' &&\n\t\tResizeObserver.toString().includes( '[native code]' )\n\t\t\t? ( 'full' as const )\n\t\t\t: ( 'none' as const ),\n} );\n\n/**\n * Returns a resolved `initialFocus` value that deprioritizes elements\n * marked with a given data attribute (e.g. a close icon), and an internal\n * ref that must be merged onto the popup element.\n *\n * When `initialFocus` is `undefined` or `true` (the default behavior),\n * the hook replaces it with a callback that:\n * 1. On touch interactions \u2014 focuses the popup element itself (preventing\n * the virtual keyboard on Android), matching Base UI's default.\n * 2. On other interactions \u2014 returns the first tabbable element that does\n * *not* carry `deprioritizedAttribute`. Falls back to Base UI's default\n * when the deprioritized element is the only tabbable element.\n *\n * All other `initialFocus` values (`false`, `RefObject`, callback) pass\n * through unchanged.\n *\n * @param props\n * @param props.initialFocus The consumer-provided `initialFocus` value.\n * @param props.deprioritizedAttribute The data attribute whose elements should be deprioritized.\n */\nexport function useDeprioritizedInitialFocus( {\n\tinitialFocus,\n\tdeprioritizedAttribute,\n}: {\n\tinitialFocus: InitialFocus;\n\tdeprioritizedAttribute: string;\n} ) {\n\tconst popupRef = useRef< HTMLDivElement >( null );\n\n\tconst resolvedInitialFocus = useMemo( (): InitialFocus => {\n\t\tif ( initialFocus !== undefined && initialFocus !== true ) {\n\t\t\treturn initialFocus;\n\t\t}\n\n\t\treturn ( interactionType ): HTMLElement | boolean | null => {\n\t\t\tif ( interactionType === 'touch' ) {\n\t\t\t\treturn popupRef.current ?? true;\n\t\t\t}\n\n\t\t\tconst popup = popupRef.current;\n\t\t\tif ( ! popup ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst tabbables = tabbable( popup, getTabbableOptions() );\n\t\t\tfor ( const el of tabbables ) {\n\t\t\t\tif (\n\t\t\t\t\tel instanceof HTMLElement &&\n\t\t\t\t\t! el.hasAttribute( deprioritizedAttribute )\n\t\t\t\t) {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\t}, [ initialFocus, deprioritizedAttribute ] );\n\n\treturn { resolvedInitialFocus, popupRef };\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAgC;AAChC,sBAAyB;AAazB,IAAM,qBAAqB,OAAQ;AAAA,EAClC,eAAe;AAAA,EACf,cACC,OAAO,mBAAmB,cAC1B,eAAe,SAAS,EAAE,SAAU,eAAgB,IAC/C,SACA;AACP;AAsBO,SAAS,6BAA8B;AAAA,EAC7C;AAAA,EACA;AACD,GAGI;AACH,QAAM,eAAW,uBAA0B,IAAK;AAEhD,QAAM,2BAAuB,wBAAS,MAAoB;AACzD,QAAK,iBAAiB,UAAa,iBAAiB,MAAO;AAC1D,aAAO;AAAA,IACR;AAEA,WAAO,CAAE,oBAAmD;AAC3D,UAAK,oBAAoB,SAAU;AAClC,eAAO,SAAS,WAAW;AAAA,MAC5B;AAEA,YAAM,QAAQ,SAAS;AACvB,UAAK,CAAE,OAAQ;AACd,eAAO;AAAA,MACR;AAEA,YAAM,gBAAY,0BAAU,OAAO,mBAAmB,CAAE;AACxD,iBAAY,MAAM,WAAY;AAC7B,YACC,cAAc,eACd,CAAE,GAAG,aAAc,sBAAuB,GACzC;AACD,iBAAO;AAAA,QACR;AAAA,MACD;AAEA,aAAO;AAAA,IACR;AAAA,EACD,GAAG,CAAE,cAAc,sBAAuB,CAAE;AAE5C,SAAO,EAAE,sBAAsB,SAAS;AACzC;",
4
+ "sourcesContent": ["import type { Popover as _Popover } from '@base-ui/react/popover';\nimport { useRef } from '@wordpress/element';\nimport { tabbable } from 'tabbable';\n\n/**\n * The `initialFocus` type shared by Base UI overlay popups (Dialog, Popover,\n * AlertDialog, etc.). We derive it from `Popover.Popup.Props` here, but it\n * is identical across all overlay components.\n */\ntype InitialFocus = _Popover.Popup.Props[ 'initialFocus' ];\n\n/**\n * Options matching Base UI's internal tabbable configuration.\n * @see https://github.com/floating-ui/floating-ui/blob/master/packages/react/src/utils/tabbable.ts\n */\nconst getTabbableOptions = () => ( {\n\tgetShadowRoot: true,\n\tdisplayCheck:\n\t\ttypeof ResizeObserver === 'function' &&\n\t\tResizeObserver.toString().includes( '[native code]' )\n\t\t\t? ( 'full' as const )\n\t\t\t: ( 'none' as const ),\n} );\n\n/**\n * Returns a resolved `initialFocus` value that deprioritizes elements\n * marked with any of the given data attributes (e.g. a close icon, a\n * library-managed scroll container), and an internal ref that must be\n * merged onto the popup element.\n *\n * When `initialFocus` is `undefined` or `true` (the default behavior),\n * the hook replaces it with a callback that:\n * 1. On touch interactions \u2014 focuses the popup element itself (preventing\n * the virtual keyboard on Android), matching Base UI's default.\n * 2. On other interactions \u2014 returns the first tabbable element that does\n * *not* carry any of `deprioritizedAttributes`. Falls back to Base\n * UI's default when every tabbable element is deprioritized.\n *\n * All other `initialFocus` values (`false`, `RefObject`, callback) pass\n * through unchanged.\n *\n * @param props\n * @param props.initialFocus The consumer-provided `initialFocus` value.\n * @param props.deprioritizedAttributes The data attributes whose elements should be deprioritized.\n */\nexport function useDeprioritizedInitialFocus( {\n\tinitialFocus,\n\tdeprioritizedAttributes,\n}: {\n\tinitialFocus: InitialFocus;\n\tdeprioritizedAttributes: string[];\n} ) {\n\tconst popupRef = useRef< HTMLDivElement >( null );\n\n\t// Returning a fresh callback on every render is intentional. Base UI\n\t// stores `initialFocus` via `useValueAsRef` (see its FloatingFocusManager\n\t// source) and reads it through `ref.current` only at open time, so\n\t// reference identity doesn't affect behavior. Skipping `useMemo` also\n\t// avoids either forcing callers to memoize their attributes array or\n\t// fighting the React Compiler with a stringified dep key.\n\tlet resolvedInitialFocus: InitialFocus = initialFocus;\n\tif ( initialFocus === undefined || initialFocus === true ) {\n\t\tresolvedInitialFocus = ( interactionType ) => {\n\t\t\tif ( interactionType === 'touch' ) {\n\t\t\t\treturn popupRef.current ?? true;\n\t\t\t}\n\n\t\t\tconst popup = popupRef.current;\n\t\t\tif ( ! popup ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst tabbables = tabbable( popup, getTabbableOptions() );\n\t\t\tfor ( const el of tabbables ) {\n\t\t\t\tif (\n\t\t\t\t\tel instanceof HTMLElement &&\n\t\t\t\t\t! deprioritizedAttributes.some( ( attr ) =>\n\t\t\t\t\t\tel.hasAttribute( attr )\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\t}\n\n\treturn { resolvedInitialFocus, popupRef };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAuB;AACvB,sBAAyB;AAazB,IAAM,qBAAqB,OAAQ;AAAA,EAClC,eAAe;AAAA,EACf,cACC,OAAO,mBAAmB,cAC1B,eAAe,SAAS,EAAE,SAAU,eAAgB,IAC/C,SACA;AACP;AAuBO,SAAS,6BAA8B;AAAA,EAC7C;AAAA,EACA;AACD,GAGI;AACH,QAAM,eAAW,uBAA0B,IAAK;AAQhD,MAAI,uBAAqC;AACzC,MAAK,iBAAiB,UAAa,iBAAiB,MAAO;AAC1D,2BAAuB,CAAE,oBAAqB;AAC7C,UAAK,oBAAoB,SAAU;AAClC,eAAO,SAAS,WAAW;AAAA,MAC5B;AAEA,YAAM,QAAQ,SAAS;AACvB,UAAK,CAAE,OAAQ;AACd,eAAO;AAAA,MACR;AAEA,YAAM,gBAAY,0BAAU,OAAO,mBAAmB,CAAE;AACxD,iBAAY,MAAM,WAAY;AAC7B,YACC,cAAc,eACd,CAAE,wBAAwB;AAAA,UAAM,CAAE,SACjC,GAAG,aAAc,IAAK;AAAA,QACvB,GACC;AACD,iBAAO;AAAA,QACR;AAAA,MACD;AAEA,aAAO;AAAA,IACR;AAAA,EACD;AAEA,SAAO,EAAE,sBAAsB,SAAS;AACzC;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // packages/ui/src/utils/use-overlay-scroll-state-attributes.ts
21
+ var use_overlay_scroll_state_attributes_exports = {};
22
+ __export(use_overlay_scroll_state_attributes_exports, {
23
+ SCROLL_CONTAINER_ATTR: () => SCROLL_CONTAINER_ATTR,
24
+ useOverlayScrollStateAttributes: () => useOverlayScrollStateAttributes
25
+ });
26
+ module.exports = __toCommonJS(use_overlay_scroll_state_attributes_exports);
27
+ var import_element = require("@wordpress/element");
28
+ var SCROLL_CONTAINER_ATTR = "data-wp-ui-overlay-scroll-container";
29
+ var SCROLLED_FROM_TOP_ATTR = "data-wp-ui-overlay-scrolled-from-top";
30
+ var SCROLLED_FROM_BOTTOM_ATTR = "data-wp-ui-overlay-scrolled-from-bottom";
31
+ var SCROLL_TABBABLE_FLAG_ATTR = "data-wp-ui-overlay-scroll-tabbable";
32
+ var SCROLL_END_EPSILON = 1;
33
+ function reconcileTabbableFlag(el) {
34
+ if (el.hasAttribute(SCROLL_TABBABLE_FLAG_ATTR) && el.getAttribute("tabindex") !== "0") {
35
+ el.removeAttribute(SCROLL_TABBABLE_FLAG_ATTR);
36
+ }
37
+ }
38
+ function updateScrollAttributes(el) {
39
+ const { scrollTop, clientHeight, scrollHeight } = el;
40
+ const overflows = scrollHeight - clientHeight > SCROLL_END_EPSILON;
41
+ el.toggleAttribute(SCROLLED_FROM_TOP_ATTR, scrollTop > 0);
42
+ el.toggleAttribute(
43
+ SCROLLED_FROM_BOTTOM_ATTR,
44
+ scrollTop + clientHeight < scrollHeight - SCROLL_END_EPSILON
45
+ );
46
+ reconcileTabbableFlag(el);
47
+ if (overflows) {
48
+ if (!el.hasAttribute(SCROLL_TABBABLE_FLAG_ATTR) && el.getAttribute("tabindex") === null) {
49
+ el.setAttribute("tabindex", "0");
50
+ el.setAttribute(SCROLL_TABBABLE_FLAG_ATTR, "");
51
+ }
52
+ } else if (el.hasAttribute(SCROLL_TABBABLE_FLAG_ATTR)) {
53
+ el.removeAttribute("tabindex");
54
+ el.removeAttribute(SCROLL_TABBABLE_FLAG_ATTR);
55
+ }
56
+ }
57
+ var HOOK_OWNED_ATTRS = [
58
+ SCROLL_CONTAINER_ATTR,
59
+ SCROLLED_FROM_TOP_ATTR,
60
+ SCROLLED_FROM_BOTTOM_ATTR
61
+ ];
62
+ function cleanupScrollAttributes(el) {
63
+ for (const attr of HOOK_OWNED_ATTRS) {
64
+ el.removeAttribute(attr);
65
+ }
66
+ reconcileTabbableFlag(el);
67
+ if (el.hasAttribute(SCROLL_TABBABLE_FLAG_ATTR)) {
68
+ el.removeAttribute("tabindex");
69
+ el.removeAttribute(SCROLL_TABBABLE_FLAG_ATTR);
70
+ }
71
+ }
72
+ function useOverlayScrollStateAttributes(onScroll) {
73
+ const [node, setNode] = (0, import_element.useState)(null);
74
+ const ref = (0, import_element.useCallback)((el) => {
75
+ setNode(el);
76
+ }, []);
77
+ (0, import_element.useLayoutEffect)(() => {
78
+ if (!node) {
79
+ return;
80
+ }
81
+ node.setAttribute(SCROLL_CONTAINER_ATTR, "");
82
+ updateScrollAttributes(node);
83
+ if (typeof ResizeObserver === "undefined") {
84
+ return () => {
85
+ cleanupScrollAttributes(node);
86
+ };
87
+ }
88
+ const resizeObserver = new ResizeObserver(() => {
89
+ updateScrollAttributes(node);
90
+ });
91
+ resizeObserver.observe(node);
92
+ for (const child of Array.from(node.children)) {
93
+ resizeObserver.observe(child);
94
+ }
95
+ let mutationObserver;
96
+ if (typeof MutationObserver !== "undefined") {
97
+ mutationObserver = new MutationObserver((records) => {
98
+ for (const record of records) {
99
+ if (record.target === node) {
100
+ for (const added of Array.from(record.addedNodes)) {
101
+ if (added instanceof Element) {
102
+ resizeObserver.observe(added);
103
+ }
104
+ }
105
+ for (const removed of Array.from(
106
+ record.removedNodes
107
+ )) {
108
+ if (removed instanceof Element) {
109
+ resizeObserver.unobserve(removed);
110
+ }
111
+ }
112
+ }
113
+ }
114
+ updateScrollAttributes(node);
115
+ });
116
+ mutationObserver.observe(node, {
117
+ childList: true
118
+ });
119
+ }
120
+ return () => {
121
+ resizeObserver.disconnect();
122
+ mutationObserver?.disconnect();
123
+ cleanupScrollAttributes(node);
124
+ };
125
+ }, [node]);
126
+ const handleScroll = (0, import_element.useCallback)(
127
+ (event) => {
128
+ updateScrollAttributes(event.currentTarget);
129
+ onScroll?.(event);
130
+ },
131
+ [onScroll]
132
+ );
133
+ return { ref, onScroll: handleScroll };
134
+ }
135
+ // Annotate the CommonJS export names for ESM import in node:
136
+ 0 && (module.exports = {
137
+ SCROLL_CONTAINER_ATTR,
138
+ useOverlayScrollStateAttributes
139
+ });
140
+ //# sourceMappingURL=use-overlay-scroll-state-attributes.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/use-overlay-scroll-state-attributes.ts"],
4
+ "sourcesContent": ["import type { UIEvent, UIEventHandler } from 'react';\nimport { useCallback, useLayoutEffect, useState } from '@wordpress/element';\n\nexport const SCROLL_CONTAINER_ATTR = 'data-wp-ui-overlay-scroll-container';\nconst SCROLLED_FROM_TOP_ATTR = 'data-wp-ui-overlay-scrolled-from-top';\nconst SCROLLED_FROM_BOTTOM_ATTR = 'data-wp-ui-overlay-scrolled-from-bottom';\n/**\n * Marks a `tabindex` that this hook installed, so subsequent runs can tell\n * a hook-managed tabindex apart from one the consumer set on the element\n * themselves.\n *\n * Internal: the constant is not exported, but the literal string is named\n * in the public JSDoc on `useOverlayScrollStateAttributes` so consumers\n * grepping for \"why does this element have a `tabindex='0'` I didn't set?\"\n * can find the breadcrumb. If this string changes, update the JSDoc too.\n */\nconst SCROLL_TABBABLE_FLAG_ATTR = 'data-wp-ui-overlay-scroll-tabbable';\n\n/**\n * Allow fractional-pixel rounding when comparing scroll offsets. Browsers can\n * report `scrollTop + clientHeight` as slightly less than `scrollHeight` even\n * when fully scrolled to the bottom.\n */\nconst SCROLL_END_EPSILON = 1;\n\n/**\n * Detect consumer takeover of a previously hook-managed `tabindex` after the\n * hook had already installed its own: if the flag is set but the current\n * `tabindex` is no longer `\"0\"`, the consumer has overridden our value. Drop\n * the flag so subsequent ticks treat the `tabindex` as consumer-owned and\n * never touch it again.\n *\n * Limitation: the heuristic compares the DOM attribute, so a consumer who\n * passes `tabIndex={ 0 }` explicitly is indistinguishable from our own\n * managed `\"0\"` and would still be cleaned up on the next non-overflow\n * tick. See the contract paragraph on `useOverlayScrollStateAttributes`.\n *\n * @param el The scroll container.\n */\nfunction reconcileTabbableFlag( el: HTMLElement ) {\n\tif (\n\t\tel.hasAttribute( SCROLL_TABBABLE_FLAG_ATTR ) &&\n\t\tel.getAttribute( 'tabindex' ) !== '0'\n\t) {\n\t\tel.removeAttribute( SCROLL_TABBABLE_FLAG_ATTR );\n\t}\n}\n\nfunction updateScrollAttributes( el: HTMLElement ) {\n\tconst { scrollTop, clientHeight, scrollHeight } = el;\n\tconst overflows = scrollHeight - clientHeight > SCROLL_END_EPSILON;\n\n\tel.toggleAttribute( SCROLLED_FROM_TOP_ATTR, scrollTop > 0 );\n\tel.toggleAttribute(\n\t\tSCROLLED_FROM_BOTTOM_ATTR,\n\t\tscrollTop + clientHeight < scrollHeight - SCROLL_END_EPSILON\n\t);\n\n\t// Keyboard-scrollable regions must be reachable via Tab (WCAG 2.1.1),\n\t// but adding a stray tab stop to a non-scrolling `<div>` is an\n\t// anti-pattern. Toggle `tabindex=\"0\"` only while the element actually\n\t// overflows. The flag attribute guards against clobbering a\n\t// consumer-supplied tabindex: we only touch attributes we installed.\n\n\t// Takeover-after-install: detect a consumer who started overriding\n\t// our managed `\"0\"` *after* the hook installed it (e.g. a re-render\n\t// passing `tabIndex={ -1 }`). The flag is dropped so the install /\n\t// cleanup branches below leave the consumer's value untouched.\n\treconcileTabbableFlag( el );\n\n\tif ( overflows ) {\n\t\t// Pre-install opt-out: a consumer-supplied `tabindex` (including\n\t\t// `tabindex=\"-1\"` to hide the region from Tab order) keeps its\n\t\t// value because the flag is never installed in the first place.\n\t\t// If that consumer-supplied value is later *removed*, the hook\n\t\t// will install its own on the next overflow tick \u2014 the DOM\n\t\t// attribute alone can't distinguish a prior explicit opt-out\n\t\t// from an unconfigured state.\n\t\tif (\n\t\t\t! el.hasAttribute( SCROLL_TABBABLE_FLAG_ATTR ) &&\n\t\t\tel.getAttribute( 'tabindex' ) === null\n\t\t) {\n\t\t\tel.setAttribute( 'tabindex', '0' );\n\t\t\tel.setAttribute( SCROLL_TABBABLE_FLAG_ATTR, '' );\n\t\t}\n\t} else if ( el.hasAttribute( SCROLL_TABBABLE_FLAG_ATTR ) ) {\n\t\tel.removeAttribute( 'tabindex' );\n\t\tel.removeAttribute( SCROLL_TABBABLE_FLAG_ATTR );\n\t}\n}\n\nconst HOOK_OWNED_ATTRS = [\n\tSCROLL_CONTAINER_ATTR,\n\tSCROLLED_FROM_TOP_ATTR,\n\tSCROLLED_FROM_BOTTOM_ATTR,\n] as const;\n\nfunction cleanupScrollAttributes( el: HTMLElement ) {\n\tfor ( const attr of HOOK_OWNED_ATTRS ) {\n\t\tel.removeAttribute( attr );\n\t}\n\t// Reconcile first so a flag left over from a consumer-takeover never\n\t// causes us to clobber the consumer's `tabindex` here.\n\treconcileTabbableFlag( el );\n\t// After reconciliation the flag is set only when the current\n\t// `tabindex` is still `\"0\"` (i.e. ours). Any other value belongs to\n\t// the consumer and is left alone.\n\tif ( el.hasAttribute( SCROLL_TABBABLE_FLAG_ATTR ) ) {\n\t\tel.removeAttribute( 'tabindex' );\n\t\tel.removeAttribute( SCROLL_TABBABLE_FLAG_ATTR );\n\t}\n}\n\n/**\n * Keeps `data-wp-ui-overlay-scrolled-from-top` and\n * `data-wp-ui-overlay-scrolled-from-bottom` attributes in sync with a\n * scrollable overlay element's scroll position, and marks the element with\n * `data-wp-ui-overlay-scroll-container` so shared CSS (see\n * `overlay-chrome.module.css`) can target it without coupling to a specific\n * class name. Descendant selectors (e.g. sticky header/footer chrome) read\n * these attributes to toggle their separator border without forcing a React\n * re-render on every scroll frame.\n *\n * When the element overflows, a `tabindex=\"0\"` is also installed so keyboard\n * users can focus the region and arrow-scroll it (WCAG 2.1.1). The tabindex\n * is removed again as soon as the element no longer overflows \u2014 a stray tab\n * stop on a non-scrolling region is an anti-pattern. An internal flag\n * attribute (`data-wp-ui-overlay-scroll-tabbable`) marks tabindex values\n * the hook installed, so a consumer-supplied `tabindex` is never\n * overwritten.\n *\n * Tabindex contract:\n * - **Pre-install opt-out**: a `tabindex` set on the element before the\n * first overflow is detected is left alone forever. The flag is never\n * installed, so the hook never owns the attribute. (This means\n * `tabIndex={ -1 }` on `Dialog.Content` / `Drawer.Content` reliably\n * suppresses the auto tab stop.)\n * - **Takeover after install**: if the consumer overrides the hook's\n * `\"0\"` with a *different* value after the fact, the flag is dropped\n * on the next tick (`reconcileTabbableFlag`) and the consumer's value\n * is preserved through subsequent overflow / non-overflow transitions\n * and through cleanup.\n * - **Indistinguishable case**: a consumer who passes `tabIndex={ 0 }`\n * explicitly while the hook also has `\"0\"` installed cannot be\n * detected \u2014 the DOM attribute is identical to the hook-managed\n * value, so the hook will still strip it on the next non-overflow\n * tick. This is rarely intentional (the consumer's `0` matches the\n * hook's behavior anyway), but consumers needing a guaranteed\n * sticky `0` should avoid relying on it across overflow flips.\n *\n * Overflow detection is block-axis-only. Overlay popups are expected to\n * constrain content width (`overlay-chrome.module.css` clips `.content`\n * with `overflow-inline: hidden`); horizontal scrolling is intentionally\n * not supported, so this hook doesn't toggle tabindex on inline-axis\n * overflow and the scroll-state attributes don't track it.\n *\n * Returns a callback `ref` that the caller must attach to the scroll\n * container, and an `onScroll` handler to wire up to the same element. A\n * callback ref (not a `RefObject`) is used because overlay libraries like\n * Base UI mount the popup DOM lazily when the overlay opens, so the\n * attributes must be initialized the moment the node is attached, not when\n * the host component first renders. `useState` also absorbs repeated\n * attachments of the same node (Strict Mode remount, stable refs) without\n * re-running the effect.\n *\n * Change detection combines a `ResizeObserver` scoped to the container\n * and its direct children (to catch flex-layout growth) with a\n * `MutationObserver` on direct-child additions/removals only (to keep\n * the resize-observer set in sync as direct children come and go).\n *\n * Deeper subtree mutations are intentionally not observed: in practice,\n * any descendant whose growth changes the scroll size also propagates a\n * resize up the layout tree, so the existing `ResizeObserver` on direct\n * children catches it. Watching the full subtree would fan out the\n * mutation callback over every text-node insertion in content-heavy\n * overlays (rich-text editors, virtualized lists), which isn't worth\n * the cost of the rare deep-mutation-without-resize case. Revisit\n * (and consider rAF-coalescing the callback) if a real consumer hits\n * an attribute-staleness regression.\n *\n * Once CSS scroll-state container queries are supported across target\n * browsers, both the data attributes and this hook can be replaced with\n * `@container scroll-state(scrollable: top)` / `(scrollable: bottom)`.\n * See: https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Conditional_rules/Container_scroll-state_queries\n *\n * @param onScroll Optional `onScroll` from the parent; invoked after the\n * overlay scroll-state attributes are updated, so by the\n * time this handler runs, `data-wp-ui-overlay-scrolled-*`\n * on `event.currentTarget` already reflect the post-scroll\n * state.\n */\nexport function useOverlayScrollStateAttributes<\n\tT extends HTMLElement = HTMLElement,\n>( onScroll?: UIEventHandler< T > | undefined ) {\n\tconst [ node, setNode ] = useState< T | null >( null );\n\n\tconst ref = useCallback( ( el: T | null ) => {\n\t\tsetNode( el );\n\t}, [] );\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! node ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnode.setAttribute( SCROLL_CONTAINER_ATTR, '' );\n\t\tupdateScrollAttributes( node );\n\n\t\tif ( typeof ResizeObserver === 'undefined' ) {\n\t\t\treturn () => {\n\t\t\t\tcleanupScrollAttributes( node );\n\t\t\t};\n\t\t}\n\n\t\tconst resizeObserver = new ResizeObserver( () => {\n\t\t\tupdateScrollAttributes( node );\n\t\t} );\n\t\tresizeObserver.observe( node );\n\t\tfor ( const child of Array.from( node.children ) ) {\n\t\t\tresizeObserver.observe( child );\n\t\t}\n\n\t\tlet mutationObserver: MutationObserver | undefined;\n\t\tif ( typeof MutationObserver !== 'undefined' ) {\n\t\t\tmutationObserver = new MutationObserver( ( records ) => {\n\t\t\t\tfor ( const record of records ) {\n\t\t\t\t\t// Only direct-child additions/removals affect what the\n\t\t\t\t\t// ResizeObserver is observing; deeper descendant changes\n\t\t\t\t\t// reach us through this callback for attribute refresh,\n\t\t\t\t\t// but we don't observe them individually to keep the\n\t\t\t\t\t// cost bounded on large subtrees.\n\t\t\t\t\tif ( record.target === node ) {\n\t\t\t\t\t\tfor ( const added of Array.from( record.addedNodes ) ) {\n\t\t\t\t\t\t\tif ( added instanceof Element ) {\n\t\t\t\t\t\t\t\tresizeObserver.observe( added );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor ( const removed of Array.from(\n\t\t\t\t\t\t\trecord.removedNodes\n\t\t\t\t\t\t) ) {\n\t\t\t\t\t\t\tif ( removed instanceof Element ) {\n\t\t\t\t\t\t\t\tresizeObserver.unobserve( removed );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tupdateScrollAttributes( node );\n\t\t\t} );\n\t\t\t// Direct children only \u2014 see the JSDoc above for why we\n\t\t\t// intentionally don't observe the full subtree.\n\t\t\tmutationObserver.observe( node, {\n\t\t\t\tchildList: true,\n\t\t\t} );\n\t\t}\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t\tmutationObserver?.disconnect();\n\t\t\tcleanupScrollAttributes( node );\n\t\t};\n\t}, [ node ] );\n\n\tconst handleScroll = useCallback(\n\t\t( event: UIEvent< T > ) => {\n\t\t\tupdateScrollAttributes( event.currentTarget );\n\t\t\tonScroll?.( event );\n\t\t},\n\t\t[ onScroll ]\n\t);\n\n\treturn { ref, onScroll: handleScroll };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAuD;AAEhD,IAAM,wBAAwB;AACrC,IAAM,yBAAyB;AAC/B,IAAM,4BAA4B;AAWlC,IAAM,4BAA4B;AAOlC,IAAM,qBAAqB;AAgB3B,SAAS,sBAAuB,IAAkB;AACjD,MACC,GAAG,aAAc,yBAA0B,KAC3C,GAAG,aAAc,UAAW,MAAM,KACjC;AACD,OAAG,gBAAiB,yBAA0B;AAAA,EAC/C;AACD;AAEA,SAAS,uBAAwB,IAAkB;AAClD,QAAM,EAAE,WAAW,cAAc,aAAa,IAAI;AAClD,QAAM,YAAY,eAAe,eAAe;AAEhD,KAAG,gBAAiB,wBAAwB,YAAY,CAAE;AAC1D,KAAG;AAAA,IACF;AAAA,IACA,YAAY,eAAe,eAAe;AAAA,EAC3C;AAYA,wBAAuB,EAAG;AAE1B,MAAK,WAAY;AAQhB,QACC,CAAE,GAAG,aAAc,yBAA0B,KAC7C,GAAG,aAAc,UAAW,MAAM,MACjC;AACD,SAAG,aAAc,YAAY,GAAI;AACjC,SAAG,aAAc,2BAA2B,EAAG;AAAA,IAChD;AAAA,EACD,WAAY,GAAG,aAAc,yBAA0B,GAAI;AAC1D,OAAG,gBAAiB,UAAW;AAC/B,OAAG,gBAAiB,yBAA0B;AAAA,EAC/C;AACD;AAEA,IAAM,mBAAmB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACD;AAEA,SAAS,wBAAyB,IAAkB;AACnD,aAAY,QAAQ,kBAAmB;AACtC,OAAG,gBAAiB,IAAK;AAAA,EAC1B;AAGA,wBAAuB,EAAG;AAI1B,MAAK,GAAG,aAAc,yBAA0B,GAAI;AACnD,OAAG,gBAAiB,UAAW;AAC/B,OAAG,gBAAiB,yBAA0B;AAAA,EAC/C;AACD;AAgFO,SAAS,gCAEb,UAA6C;AAC/C,QAAM,CAAE,MAAM,OAAQ,QAAI,yBAAsB,IAAK;AAErD,QAAM,UAAM,4BAAa,CAAE,OAAkB;AAC5C,YAAS,EAAG;AAAA,EACb,GAAG,CAAC,CAAE;AAEN,sCAAiB,MAAM;AACtB,QAAK,CAAE,MAAO;AACb;AAAA,IACD;AAEA,SAAK,aAAc,uBAAuB,EAAG;AAC7C,2BAAwB,IAAK;AAE7B,QAAK,OAAO,mBAAmB,aAAc;AAC5C,aAAO,MAAM;AACZ,gCAAyB,IAAK;AAAA,MAC/B;AAAA,IACD;AAEA,UAAM,iBAAiB,IAAI,eAAgB,MAAM;AAChD,6BAAwB,IAAK;AAAA,IAC9B,CAAE;AACF,mBAAe,QAAS,IAAK;AAC7B,eAAY,SAAS,MAAM,KAAM,KAAK,QAAS,GAAI;AAClD,qBAAe,QAAS,KAAM;AAAA,IAC/B;AAEA,QAAI;AACJ,QAAK,OAAO,qBAAqB,aAAc;AAC9C,yBAAmB,IAAI,iBAAkB,CAAE,YAAa;AACvD,mBAAY,UAAU,SAAU;AAM/B,cAAK,OAAO,WAAW,MAAO;AAC7B,uBAAY,SAAS,MAAM,KAAM,OAAO,UAAW,GAAI;AACtD,kBAAK,iBAAiB,SAAU;AAC/B,+BAAe,QAAS,KAAM;AAAA,cAC/B;AAAA,YACD;AACA,uBAAY,WAAW,MAAM;AAAA,cAC5B,OAAO;AAAA,YACR,GAAI;AACH,kBAAK,mBAAmB,SAAU;AACjC,+BAAe,UAAW,OAAQ;AAAA,cACnC;AAAA,YACD;AAAA,UACD;AAAA,QACD;AACA,+BAAwB,IAAK;AAAA,MAC9B,CAAE;AAGF,uBAAiB,QAAS,MAAM;AAAA,QAC/B,WAAW;AAAA,MACZ,CAAE;AAAA,IACH;AAEA,WAAO,MAAM;AACZ,qBAAe,WAAW;AAC1B,wBAAkB,WAAW;AAC7B,8BAAyB,IAAK;AAAA,IAC/B;AAAA,EACD,GAAG,CAAE,IAAK,CAAE;AAEZ,QAAM,mBAAe;AAAA,IACpB,CAAE,UAAyB;AAC1B,6BAAwB,MAAM,aAAc;AAC5C,iBAAY,KAAM;AAAA,IACnB;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,SAAO,EAAE,KAAK,UAAU,aAAa;AACtC;",
6
+ "names": []
7
+ }
@@ -26,12 +26,91 @@ module.exports = __toCommonJS(visually_hidden_exports);
26
26
  var import_react = require("@base-ui/react");
27
27
  var import_element = require("@wordpress/element");
28
28
 
29
+ // packages/style-runtime/src/index.ts
30
+ var STYLE_HASH_ATTRIBUTE = "data-wp-hash";
31
+ function getRuntime() {
32
+ const globalScope = globalThis;
33
+ if (globalScope.__wpStyleRuntime) {
34
+ return globalScope.__wpStyleRuntime;
35
+ }
36
+ globalScope.__wpStyleRuntime = {
37
+ documents: /* @__PURE__ */ new Map(),
38
+ styles: /* @__PURE__ */ new Map(),
39
+ injectedStyles: /* @__PURE__ */ new WeakMap()
40
+ };
41
+ if (typeof document !== "undefined") {
42
+ registerDocument(document);
43
+ }
44
+ return globalScope.__wpStyleRuntime;
45
+ }
46
+ function documentContainsStyleHash(targetDocument, hash) {
47
+ if (!targetDocument.head) {
48
+ return false;
49
+ }
50
+ for (const style of targetDocument.head.querySelectorAll(
51
+ `style[${STYLE_HASH_ATTRIBUTE}]`
52
+ )) {
53
+ if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) {
54
+ return true;
55
+ }
56
+ }
57
+ return false;
58
+ }
59
+ function injectStyle(targetDocument, hash, css) {
60
+ if (!targetDocument.head) {
61
+ return;
62
+ }
63
+ const runtime = getRuntime();
64
+ let injectedStyles = runtime.injectedStyles.get(targetDocument);
65
+ if (!injectedStyles) {
66
+ injectedStyles = /* @__PURE__ */ new Set();
67
+ runtime.injectedStyles.set(targetDocument, injectedStyles);
68
+ }
69
+ if (injectedStyles.has(hash)) {
70
+ return;
71
+ }
72
+ if (documentContainsStyleHash(targetDocument, hash)) {
73
+ injectedStyles.add(hash);
74
+ return;
75
+ }
76
+ const style = targetDocument.createElement("style");
77
+ style.setAttribute(STYLE_HASH_ATTRIBUTE, hash);
78
+ style.appendChild(targetDocument.createTextNode(css));
79
+ targetDocument.head.appendChild(style);
80
+ injectedStyles.add(hash);
81
+ }
82
+ function registerDocument(targetDocument) {
83
+ const runtime = getRuntime();
84
+ runtime.documents.set(
85
+ targetDocument,
86
+ (runtime.documents.get(targetDocument) ?? 0) + 1
87
+ );
88
+ for (const [hash, css] of runtime.styles) {
89
+ injectStyle(targetDocument, hash, css);
90
+ }
91
+ return () => {
92
+ const count = runtime.documents.get(targetDocument);
93
+ if (count === void 0) {
94
+ return;
95
+ }
96
+ if (count <= 1) {
97
+ runtime.documents.delete(targetDocument);
98
+ return;
99
+ }
100
+ runtime.documents.set(targetDocument, count - 1);
101
+ };
102
+ }
103
+ function registerStyle(hash, css) {
104
+ const runtime = getRuntime();
105
+ runtime.styles.set(hash, css);
106
+ for (const targetDocument of runtime.documents.keys()) {
107
+ injectStyle(targetDocument, hash, css);
108
+ }
109
+ }
110
+
29
111
  // packages/ui/src/visually-hidden/style.module.css
30
- if (typeof document !== "undefined" && process.env.NODE_ENV !== "test" && !document.head.querySelector("style[data-wp-hash='c46e8cb841']")) {
31
- const style = document.createElement("style");
32
- style.setAttribute("data-wp-hash", "c46e8cb841");
33
- style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{.f37b9e2e191ebd66__visually-hidden{word-wrap:normal;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal}}"));
34
- document.head.appendChild(style);
112
+ if (typeof process === "undefined" || process.env.NODE_ENV !== "test") {
113
+ registerStyle("c46e8cb841", "@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{.f37b9e2e191ebd66__visually-hidden{word-wrap:normal;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal}}");
35
114
  }
36
115
  var style_default = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" };
37
116
 
@@ -43,7 +122,11 @@ var VisuallyHidden = (0, import_element.forwardRef)(
43
122
  ref,
44
123
  props: (0, import_react.mergeProps)(
45
124
  { className: style_default["visually-hidden"] },
46
- restProps
125
+ restProps,
126
+ {
127
+ // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it.
128
+ "data-visually-hidden": ""
129
+ }
47
130
  )
48
131
  });
49
132
  return element;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/visually-hidden/visually-hidden.tsx", "../../src/visually-hidden/style.module.css"],
4
- "sourcesContent": ["import { mergeProps, useRender } from '@base-ui/react';\nimport { forwardRef } from '@wordpress/element';\nimport type { VisuallyHiddenProps } from './types';\nimport styles from './style.module.css';\n\n/**\n * Visually hides content while keeping it accessible to screen readers.\n * Useful when providing context that's only meaningful to assistive technology.\n *\n * Renders a `<div>` by default. Use the `render` prop to swap the\n * underlying element while preserving the visually-hidden behavior.\n *\n * ## Composing with other components\n *\n * When composing with another component that uses the `render` prop\n * pattern, there are two directions \u2014 and they produce different results.\n *\n * Most of the time you'll want `VisuallyHidden` as the **host** (outer\n * component) and pass the other component via `render`. This keeps the\n * other component's HTML element and semantics intact, while\n * `VisuallyHidden` only adds its hiding styles:\n *\n * ```jsx\n * // OtherComponent keeps its semantic element (e.g. <h2>).\n * <VisuallyHidden render={ <OtherComponent /> }>\n * Accessible text\n * </VisuallyHidden>\n * ```\n *\n * The opposite direction is also possible, but be aware that it replaces\n * the other component's element with VisuallyHidden's default `<div>`:\n *\n * ```jsx\n * // OtherComponent's element becomes a <div>.\n * <OtherComponent render={ <VisuallyHidden /> }>\n * Accessible text\n * </OtherComponent>\n * ```\n *\n * Choose based on what you need: if the other component's semantic\n * element matters (e.g. `<label>`, `<legend>`, `<h2>`), keep\n * `VisuallyHidden` as the host so the element is preserved.\n */\nexport const VisuallyHidden = forwardRef< HTMLDivElement, VisuallyHiddenProps >(\n\tfunction VisuallyHidden( { render, ...restProps }, ref ) {\n\t\tconst element = useRender( {\n\t\t\trender,\n\t\t\tref,\n\t\t\tprops: mergeProps< 'div' >(\n\t\t\t\t{ className: styles[ 'visually-hidden' ] },\n\t\t\t\trestProps\n\t\t\t),\n\t\t} );\n\n\t\treturn element;\n\t}\n);\n", "if (typeof document !== 'undefined' && process.env.NODE_ENV !== 'test' && !document.head.querySelector(\"style[data-wp-hash='c46e8cb841']\")) {\n\tconst style = document.createElement(\"style\");\n\tstyle.setAttribute(\"data-wp-hash\", \"c46e8cb841\");\n\tstyle.appendChild(document.createTextNode(\"@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{.f37b9e2e191ebd66__visually-hidden{word-wrap:normal;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal}}\"));\n\tdocument.head.appendChild(style);\n}\nexport default {\"visually-hidden\":\"f37b9e2e191ebd66__visually-hidden\"};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsC;AACtC,qBAA2B;;;ACD3B,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,0RAA0R,CAAC;AACrU,WAAS,KAAK,YAAY,KAAK;AAChC;AACA,IAAO,gBAAQ,EAAC,mBAAkB,oCAAmC;;;ADqC9D,IAAM,qBAAiB;AAAA,EAC7B,SAASA,gBAAgB,EAAE,QAAQ,GAAG,UAAU,GAAG,KAAM;AACxD,UAAM,cAAU,wBAAW;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,WAAO;AAAA,QACN,EAAE,WAAW,cAAQ,iBAAkB,EAAE;AAAA,QACzC;AAAA,MACD;AAAA,IACD,CAAE;AAEF,WAAO;AAAA,EACR;AACD;",
3
+ "sources": ["../../src/visually-hidden/visually-hidden.tsx", "../../../style-runtime/src/index.ts", "../../src/visually-hidden/style.module.css"],
4
+ "sourcesContent": ["import { mergeProps, useRender } from '@base-ui/react';\nimport { forwardRef } from '@wordpress/element';\nimport type { VisuallyHiddenProps } from './types';\nimport styles from './style.module.css';\n\n/**\n * Visually hides content while keeping it accessible to screen readers.\n * Useful when providing context that's only meaningful to assistive technology.\n *\n * Renders a `<div>` by default. Use the `render` prop to swap the\n * underlying element while preserving the visually-hidden behavior.\n *\n * ## Composing with other components\n *\n * When composing with another component that uses the `render` prop\n * pattern, keep `VisuallyHidden` as the **host** (outer component) and\n * pass the other component via `render`. This keeps the other\n * component's HTML element and semantics intact, while `VisuallyHidden`\n * only adds its hiding styles:\n *\n * ```jsx\n * // OtherComponent keeps its semantic element (e.g. <h2>).\n * <VisuallyHidden render={ <OtherComponent /> }>\n * Accessible text\n * </VisuallyHidden>\n * ```\n */\nexport const VisuallyHidden = forwardRef< HTMLDivElement, VisuallyHiddenProps >(\n\tfunction VisuallyHidden( { render, ...restProps }, ref ) {\n\t\tconst element = useRender( {\n\t\t\trender,\n\t\t\tref,\n\t\t\tprops: mergeProps< 'div' >(\n\t\t\t\t{ className: styles[ 'visually-hidden' ] },\n\t\t\t\trestProps,\n\t\t\t\t{\n\t\t\t\t\t// @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it.\n\t\t\t\t\t'data-visually-hidden': '',\n\t\t\t\t}\n\t\t\t),\n\t\t} );\n\n\t\treturn element;\n\t}\n);\n", "type GlobalScopeWithStyleRuntime = typeof globalThis & {\n\t// This global is shared by separately bundled copies of this package.\n\t// Keep its shape backward compatible after release.\n\t__wpStyleRuntime?: {\n\t\tdocuments: Map< Document, number >;\n\t\tstyles: Map< string, string >;\n\t\tinjectedStyles: WeakMap< Document, Set< string > >;\n\t};\n};\n\nconst STYLE_HASH_ATTRIBUTE = 'data-wp-hash';\n\n/**\n * Returns the shared style runtime registry.\n *\n * The registry is stored on `globalThis` so separately bundled copies of this\n * package can coordinate through the same document and style maps.\n *\n * @return The shared runtime registry.\n */\nfunction getRuntime() {\n\tconst globalScope = globalThis as GlobalScopeWithStyleRuntime;\n\n\tif ( globalScope.__wpStyleRuntime ) {\n\t\treturn globalScope.__wpStyleRuntime;\n\t}\n\n\tglobalScope.__wpStyleRuntime = {\n\t\tdocuments: new Map(),\n\t\tstyles: new Map(),\n\t\tinjectedStyles: new WeakMap(),\n\t};\n\n\tif ( typeof document !== 'undefined' ) {\n\t\tregisterDocument( document );\n\t}\n\n\treturn globalScope.__wpStyleRuntime;\n}\n\n/**\n * Checks whether a document already contains a style tag for a hash.\n *\n * @param targetDocument Document to inspect.\n * @param hash Stable hash for the transformed CSS.\n *\n * @return Whether the style hash already exists in the document.\n */\nfunction documentContainsStyleHash(\n\ttargetDocument: Document,\n\thash: string\n): boolean {\n\tif ( ! targetDocument.head ) {\n\t\treturn false;\n\t}\n\n\tfor ( const style of targetDocument.head.querySelectorAll(\n\t\t`style[${ STYLE_HASH_ATTRIBUTE }]`\n\t) ) {\n\t\tif ( style.getAttribute( STYLE_HASH_ATTRIBUTE ) === hash ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Injects a registered style into a document, unless that document already\n * contains a style tag for the same hash.\n *\n * @param targetDocument Document to inject the style into.\n * @param hash Stable hash for the transformed CSS.\n * @param css CSS text to inject.\n */\nfunction injectStyle( targetDocument: Document, hash: string, css: string ) {\n\tif ( ! targetDocument.head ) {\n\t\treturn;\n\t}\n\n\tconst runtime = getRuntime();\n\tlet injectedStyles = runtime.injectedStyles.get( targetDocument );\n\n\tif ( ! injectedStyles ) {\n\t\tinjectedStyles = new Set();\n\t\truntime.injectedStyles.set( targetDocument, injectedStyles );\n\t}\n\n\tif ( injectedStyles.has( hash ) ) {\n\t\treturn;\n\t}\n\n\t// Older generated CSS module output can still inject matching style tags\n\t// after this document's cache is created, so keep the DOM as the fallback\n\t// source of truth on cache misses.\n\tif ( documentContainsStyleHash( targetDocument, hash ) ) {\n\t\tinjectedStyles.add( hash );\n\t\treturn;\n\t}\n\n\tconst style = targetDocument.createElement( 'style' );\n\tstyle.setAttribute( STYLE_HASH_ATTRIBUTE, hash );\n\tstyle.appendChild( targetDocument.createTextNode( css ) );\n\ttargetDocument.head.appendChild( style );\n\tinjectedStyles.add( hash );\n}\n\n/**\n * Registers a document as a style injection target.\n *\n * Existing registered styles are replayed into the document immediately.\n * Documents are reference-counted so multiple providers can safely register the\n * same document without one cleanup removing it while another registration is\n * still active.\n *\n * @param targetDocument Document to receive registered styles.\n * @return Cleanup function that unregisters this document registration.\n */\nexport function registerDocument( targetDocument: Document ) {\n\tconst runtime = getRuntime();\n\n\truntime.documents.set(\n\t\ttargetDocument,\n\t\t( runtime.documents.get( targetDocument ) ?? 0 ) + 1\n\t);\n\n\tfor ( const [ hash, css ] of runtime.styles ) {\n\t\tinjectStyle( targetDocument, hash, css );\n\t}\n\n\treturn () => {\n\t\tconst count = runtime.documents.get( targetDocument );\n\n\t\tif ( count === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( count <= 1 ) {\n\t\t\truntime.documents.delete( targetDocument );\n\t\t\treturn;\n\t\t}\n\n\t\truntime.documents.set( targetDocument, count - 1 );\n\t};\n}\n\n/**\n * Registers a style and injects it into all registered documents.\n *\n * The hash is used as the deduplication key, so calling this repeatedly with\n * the same hash will not add duplicate style tags to a document.\n * Registered styles are retained for the lifetime of the page so they can be\n * replayed into documents that are registered later.\n *\n * @param hash Stable hash for the transformed CSS.\n * @param css CSS text to inject.\n */\nexport function registerStyle( hash: string, css: string ) {\n\tconst runtime = getRuntime();\n\n\truntime.styles.set( hash, css );\n\n\tfor ( const targetDocument of runtime.documents.keys() ) {\n\t\tinjectStyle( targetDocument, hash, css );\n\t}\n}\n", "import { registerStyle } from '@wordpress/style-runtime';\nif (typeof process === 'undefined' || process.env.NODE_ENV !== 'test') {\n\tregisterStyle(\"c46e8cb841\", \"@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{.f37b9e2e191ebd66__visually-hidden{word-wrap:normal;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal}}\");\n}\nexport default {\"visually-hidden\":\"f37b9e2e191ebd66__visually-hidden\"};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsC;AACtC,qBAA2B;;;ACS3B,IAAM,uBAAuB;AAU7B,SAAS,aAAa;AACrB,QAAM,cAAc;AAEpB,MAAK,YAAY,kBAAmB;AACnC,WAAO,YAAY;AAAA,EACpB;AAEA,cAAY,mBAAmB;AAAA,IAC9B,WAAW,oBAAI,IAAI;AAAA,IACnB,QAAQ,oBAAI,IAAI;AAAA,IAChB,gBAAgB,oBAAI,QAAQ;AAAA,EAC7B;AAEA,MAAK,OAAO,aAAa,aAAc;AACtC,qBAAkB,QAAS;AAAA,EAC5B;AAEA,SAAO,YAAY;AACpB;AAUA,SAAS,0BACR,gBACA,MACU;AACV,MAAK,CAAE,eAAe,MAAO;AAC5B,WAAO;AAAA,EACR;AAEA,aAAY,SAAS,eAAe,KAAK;AAAA,IACxC,SAAU,oBAAqB;AAAA,EAChC,GAAI;AACH,QAAK,MAAM,aAAc,oBAAqB,MAAM,MAAO;AAC1D,aAAO;AAAA,IACR;AAAA,EACD;AAEA,SAAO;AACR;AAUA,SAAS,YAAa,gBAA0B,MAAc,KAAc;AAC3E,MAAK,CAAE,eAAe,MAAO;AAC5B;AAAA,EACD;AAEA,QAAM,UAAU,WAAW;AAC3B,MAAI,iBAAiB,QAAQ,eAAe,IAAK,cAAe;AAEhE,MAAK,CAAE,gBAAiB;AACvB,qBAAiB,oBAAI,IAAI;AACzB,YAAQ,eAAe,IAAK,gBAAgB,cAAe;AAAA,EAC5D;AAEA,MAAK,eAAe,IAAK,IAAK,GAAI;AACjC;AAAA,EACD;AAKA,MAAK,0BAA2B,gBAAgB,IAAK,GAAI;AACxD,mBAAe,IAAK,IAAK;AACzB;AAAA,EACD;AAEA,QAAM,QAAQ,eAAe,cAAe,OAAQ;AACpD,QAAM,aAAc,sBAAsB,IAAK;AAC/C,QAAM,YAAa,eAAe,eAAgB,GAAI,CAAE;AACxD,iBAAe,KAAK,YAAa,KAAM;AACvC,iBAAe,IAAK,IAAK;AAC1B;AAaO,SAAS,iBAAkB,gBAA2B;AAC5D,QAAM,UAAU,WAAW;AAE3B,UAAQ,UAAU;AAAA,IACjB;AAAA,KACE,QAAQ,UAAU,IAAK,cAAe,KAAK,KAAM;AAAA,EACpD;AAEA,aAAY,CAAE,MAAM,GAAI,KAAK,QAAQ,QAAS;AAC7C,gBAAa,gBAAgB,MAAM,GAAI;AAAA,EACxC;AAEA,SAAO,MAAM;AACZ,UAAM,QAAQ,QAAQ,UAAU,IAAK,cAAe;AAEpD,QAAK,UAAU,QAAY;AAC1B;AAAA,IACD;AAEA,QAAK,SAAS,GAAI;AACjB,cAAQ,UAAU,OAAQ,cAAe;AACzC;AAAA,IACD;AAEA,YAAQ,UAAU,IAAK,gBAAgB,QAAQ,CAAE;AAAA,EAClD;AACD;AAaO,SAAS,cAAe,MAAc,KAAc;AAC1D,QAAM,UAAU,WAAW;AAE3B,UAAQ,OAAO,IAAK,MAAM,GAAI;AAE9B,aAAY,kBAAkB,QAAQ,UAAU,KAAK,GAAI;AACxD,gBAAa,gBAAgB,MAAM,GAAI;AAAA,EACxC;AACD;;;ACpKA,IAAI,OAAO,YAAY,eAAe,QAAQ,IAAI,aAAa,QAAQ;AACtE,gBAAc,cAAc,0RAA0R;AACvT;AACA,IAAO,gBAAQ,EAAC,mBAAkB,oCAAmC;;;AFuB9D,IAAM,qBAAiB;AAAA,EAC7B,SAASA,gBAAgB,EAAE,QAAQ,GAAG,UAAU,GAAG,KAAM;AACxD,UAAM,cAAU,wBAAW;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,WAAO;AAAA,QACN,EAAE,WAAW,cAAQ,iBAAkB,EAAE;AAAA,QACzC;AAAA,QACA;AAAA;AAAA,UAEC,wBAAwB;AAAA,QACzB;AAAA,MACD;AAAA,IACD,CAAE;AAEF,WAAO;AAAA,EACR;AACD;",
6
6
  "names": ["VisuallyHidden"]
7
7
  }
@@ -2,8 +2,10 @@
2
2
  import { Root } from "./root.mjs";
3
3
  import { Trigger } from "./trigger.mjs";
4
4
  import { Popup } from "./popup.mjs";
5
+ import { Portal } from "./portal.mjs";
5
6
  export {
6
7
  Popup,
8
+ Portal,
7
9
  Root,
8
10
  Trigger
9
11
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/alert-dialog/index.ts"],
4
- "sourcesContent": ["export { Root } from './root';\nexport { Trigger } from './trigger';\nexport { Popup } from './popup';\n"],
5
- "mappings": ";AAAA,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,SAAS,aAAa;",
4
+ "sourcesContent": ["export { Root } from './root';\nexport { Trigger } from './trigger';\nexport { Popup } from './popup';\nexport { Portal } from './portal';\n"],
5
+ "mappings": ";AAAA,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,SAAS,aAAa;AACtB,SAAS,cAAc;",
6
6
  "names": []
7
7
  }