@swisspost/design-system-components 10.4.0 → 10.5.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 (329) hide show
  1. package/dist/cjs/breakpoints-Kruvy8Dm.js +47 -0
  2. package/dist/cjs/{create-validator-decorator-BtgLWaMJ.js → create-validator-decorator-u-Byhihe.js} +1 -1
  3. package/dist/cjs/{event-from-CwMw19f8.js → event-from-CTcQxB9-.js} +19 -13
  4. package/dist/cjs/{index-CW10QvjR.js → index-CXnlZiX8.js} +1 -1
  5. package/dist/cjs/{breakpoints-B0Olgvgc.js → index-CggFmZ8n.js} +0 -42
  6. package/dist/cjs/loader.cjs.js +2 -2
  7. package/dist/cjs/{one-of-vJeW7S4_.js → one-of-LGG0uEIi.js} +1 -1
  8. package/dist/cjs/{package-CL8OSAS4.js → package-DdU-rENe.js} +1 -1
  9. package/dist/cjs/{pattern-Zmn3wpyp.js → pattern-B-csvfNt.js} +1 -1
  10. package/dist/cjs/post-accordion_2.cjs.entry.js +7 -7
  11. package/dist/cjs/post-autocomplete.cjs.entry.js +70 -55
  12. package/dist/cjs/post-avatar.cjs.entry.js +7 -7
  13. package/dist/cjs/post-back-to-top.cjs.entry.js +25 -13
  14. package/dist/cjs/post-banner.cjs.entry.js +6 -13
  15. package/dist/cjs/post-breadcrumb-item.cjs.entry.js +18 -10
  16. package/dist/cjs/post-breadcrumbs.cjs.entry.js +118 -67
  17. package/dist/cjs/post-closebutton_14.cjs.entry.js +404 -210
  18. package/dist/cjs/post-collapsible_2.cjs.entry.js +8 -8
  19. package/dist/cjs/post-components.cjs.js +2 -2
  20. package/dist/cjs/post-date-picker.cjs.entry.js +8 -8
  21. package/dist/cjs/post-footer.cjs.entry.js +8 -8
  22. package/dist/cjs/post-linkarea.cjs.entry.js +3 -3
  23. package/dist/cjs/post-listbox-option.cjs.entry.js +4 -4
  24. package/dist/cjs/post-listbox.cjs.entry.js +6 -6
  25. package/dist/cjs/post-number-input.cjs.entry.js +7 -6
  26. package/dist/cjs/post-pagination.cjs.entry.js +6 -6
  27. package/dist/cjs/post-popover-trigger.cjs.entry.js +7 -7
  28. package/dist/cjs/post-popover.cjs.entry.js +10 -10
  29. package/dist/cjs/post-progressbar.cjs.entry.js +5 -5
  30. package/dist/cjs/post-rating.cjs.entry.js +7 -7
  31. package/dist/cjs/post-side-navigation-trigger.cjs.entry.js +8 -8
  32. package/dist/cjs/post-side-navigation.cjs.entry.js +9 -9
  33. package/dist/cjs/post-stepper-item.cjs.entry.js +3 -3
  34. package/dist/cjs/post-stepper.cjs.entry.js +8 -8
  35. package/dist/cjs/post-tab-item.cjs.entry.js +7 -7
  36. package/dist/cjs/post-tab-panel.cjs.entry.js +7 -7
  37. package/dist/cjs/post-tabs.cjs.entry.js +8 -8
  38. package/dist/cjs/post-tooltip-trigger.cjs.entry.js +7 -7
  39. package/dist/cjs/post-tooltip.cjs.entry.js +6 -6
  40. package/dist/cjs/{required-DRnPokVn.js → required-bJzxBV-V.js} +1 -1
  41. package/dist/cjs/{type-CNcU_-B2.js → type-CGPnqGY1.js} +1 -1
  42. package/dist/cjs/{url-DgJ3lXQz.js → url-Dxdd6tWj.js} +1 -1
  43. package/dist/collection/components/post-autocomplete/post-autocomplete.js +65 -50
  44. package/dist/collection/components/post-back-to-top/post-back-to-top.js +19 -7
  45. package/dist/collection/components/post-banner/post-banner.js +2 -17
  46. package/dist/collection/components/post-breadcrumb-item/post-breadcrumb-item.css +1 -1
  47. package/dist/collection/components/post-breadcrumb-item/post-breadcrumb-item.js +29 -1
  48. package/dist/collection/components/post-breadcrumbs/post-breadcrumbs.css +1 -1
  49. package/dist/collection/components/post-breadcrumbs/post-breadcrumbs.js +113 -62
  50. package/dist/collection/components/post-closebutton/post-closebutton.js +7 -8
  51. package/dist/collection/components/post-collapsible/post-collapsible.js +1 -1
  52. package/dist/collection/components/post-collapsible-trigger/post-collapsible-trigger.js +1 -1
  53. package/dist/collection/components/post-date-picker/post-date-picker.js +2 -2
  54. package/dist/collection/components/post-footer/post-footer.js +2 -2
  55. package/dist/collection/components/post-header/post-header.js +2 -2
  56. package/dist/collection/components/post-icon/post-icon.js +1 -1
  57. package/dist/collection/components/post-language-menu/post-language-menu.js +1 -1
  58. package/dist/collection/components/post-linkarea/post-linkarea.js +1 -1
  59. package/dist/collection/components/post-listbox/post-listbox.js +2 -2
  60. package/dist/collection/components/post-listbox-option/post-listbox-option.js +2 -2
  61. package/dist/collection/components/post-logo/post-logo.js +1 -1
  62. package/dist/collection/components/post-mainnavigation/post-mainnavigation.js +1 -1
  63. package/dist/collection/components/post-megadropdown/post-megadropdown.js +1 -1
  64. package/dist/collection/components/post-megadropdown-trigger/post-megadropdown-trigger.js +1 -1
  65. package/dist/collection/components/post-menu/post-menu.js +23 -8
  66. package/dist/collection/components/post-menu-trigger/post-menu-trigger.js +1 -1
  67. package/dist/collection/components/post-number-input/post-number-input.js +2 -2
  68. package/dist/collection/components/post-popover/post-popover.css +1 -1
  69. package/dist/collection/components/post-popover/post-popover.js +3 -3
  70. package/dist/collection/components/post-popover-trigger/post-popover-trigger.js +2 -2
  71. package/dist/collection/components/post-popovercontainer/post-popovercontainer.js +47 -23
  72. package/dist/collection/components/post-progressbar/post-progressbar.js +1 -1
  73. package/dist/collection/components/post-rating/post-rating.js +1 -1
  74. package/dist/collection/components/post-side-navigation/post-side-navigation.css +1 -1
  75. package/dist/collection/components/post-side-navigation/post-side-navigation.js +1 -1
  76. package/dist/collection/components/post-side-navigation-trigger/post-side-navigation-trigger.js +1 -1
  77. package/dist/collection/components/post-stepper/post-stepper.js +1 -1
  78. package/dist/collection/components/post-stepper-item/post-stepper-item.js +1 -1
  79. package/dist/collection/components/post-tab-item/post-tab-item.js +2 -2
  80. package/dist/collection/components/post-tab-panel/post-tab-panel.js +1 -1
  81. package/dist/collection/components/post-tabs/post-tabs.js +2 -2
  82. package/dist/collection/components/post-togglebutton/post-togglebutton.js +1 -1
  83. package/dist/collection/components/post-tooltip/post-tooltip.js +2 -2
  84. package/dist/collection/components/post-tooltip-trigger/post-tooltip-trigger.js +1 -1
  85. package/dist/collection/utils/breakpoints.js +11 -9
  86. package/dist/collection/utils/closable-target.js +38 -0
  87. package/dist/collection/utils/event-from.js +18 -13
  88. package/dist/collection/utils/floating-ui.js +72 -0
  89. package/dist/collection/utils/index.js +1 -0
  90. package/dist/components/breakpoints.js +1 -1
  91. package/dist/components/event-from.js +1 -1
  92. package/dist/components/index2.js +1 -0
  93. package/dist/components/package.js +1 -1
  94. package/dist/components/post-autocomplete.js +1 -1
  95. package/dist/components/post-back-to-top.js +1 -1
  96. package/dist/components/post-banner.js +1 -1
  97. package/dist/components/post-breadcrumb-item.js +1 -1
  98. package/dist/components/post-breadcrumbs.js +1 -1
  99. package/dist/components/post-closebutton2.js +1 -1
  100. package/dist/components/post-collapsible-trigger2.js +1 -1
  101. package/dist/components/post-collapsible2.js +1 -1
  102. package/dist/components/post-date-picker.js +1 -1
  103. package/dist/components/post-footer.js +1 -1
  104. package/dist/components/post-header.js +1 -1
  105. package/dist/components/post-icon2.js +1 -1
  106. package/dist/components/post-linkarea.js +1 -1
  107. package/dist/components/post-listbox-option.js +1 -1
  108. package/dist/components/post-listbox.js +1 -1
  109. package/dist/components/post-logo.js +1 -1
  110. package/dist/components/post-mainnavigation.js +1 -1
  111. package/dist/components/post-megadropdown-trigger.js +1 -1
  112. package/dist/components/post-megadropdown.js +1 -1
  113. package/dist/components/post-menu-trigger2.js +1 -1
  114. package/dist/components/post-menu2.js +1 -1
  115. package/dist/components/post-number-input.js +1 -1
  116. package/dist/components/post-popover-trigger.js +1 -1
  117. package/dist/components/post-popover.js +1 -1
  118. package/dist/components/post-popovercontainer2.js +1 -1
  119. package/dist/components/post-progressbar.js +1 -1
  120. package/dist/components/post-rating.js +1 -1
  121. package/dist/components/post-side-navigation-trigger.js +1 -1
  122. package/dist/components/post-side-navigation.js +1 -1
  123. package/dist/components/post-stepper-item.js +1 -1
  124. package/dist/components/post-stepper.js +1 -1
  125. package/dist/components/post-tab-item.js +1 -1
  126. package/dist/components/post-tab-panel.js +1 -1
  127. package/dist/components/post-tabs.js +1 -1
  128. package/dist/components/post-togglebutton2.js +1 -1
  129. package/dist/components/post-tooltip-trigger.js +1 -1
  130. package/dist/components/post-tooltip.js +1 -1
  131. package/dist/components/react/index.js +1 -1
  132. package/dist/components/react/p-0nNMdSBr.js +1 -0
  133. package/dist/components/react/p-5LuCes5o.js +1 -0
  134. package/dist/components/react/{p-4wtxqxXu.js → p-B2jsM_Ov.js} +1 -1
  135. package/dist/components/react/p-BEcxHjuM.js +1 -0
  136. package/dist/{post-components/p-C-lLRsYC.js → components/react/p-BdLRXQqY.js} +1 -1
  137. package/dist/components/react/{p-Df31eVdi.js → p-C8vlYfD-.js} +1 -1
  138. package/dist/components/react/{p-9RCG8BWM.js → p-CLeWLMJn.js} +1 -1
  139. package/dist/components/react/p-CVVXnYLU.js +1 -0
  140. package/dist/components/react/p-CnN4Jdtv.js +1 -0
  141. package/dist/components/react/{p-Bwko4UKh.js → p-CoCua20S.js} +1 -1
  142. package/dist/components/react/p-CuVhOs8F.js +1 -0
  143. package/dist/components/react/{p-B1kYo1K9.js → p-D3rq_-Qk.js} +1 -1
  144. package/dist/components/react/{p-CSmrQ__L.js → p-DD-Sl3Ji.js} +1 -1
  145. package/dist/components/react/{p-D-imniYA.js → p-DasK590W.js} +1 -1
  146. package/dist/components/react/p-DeO0rZ1T.js +1 -0
  147. package/dist/components/react/p-DiFAKI9o.js +1 -0
  148. package/dist/components/react/p-Ny5VnydI.js +1 -0
  149. package/dist/components/react/{p-BSb74xQy.js → p-PYoaz_Xl.js} +1 -1
  150. package/dist/components/react/{p-CwmQwirr.js → p-SBBBSmJM.js} +1 -1
  151. package/dist/components/react/p-bR8vy6-s.js +1 -0
  152. package/dist/components/react/post-accordion-item.js +1 -1
  153. package/dist/components/react/post-accordion.js +1 -1
  154. package/dist/components/react/post-autocomplete.js +1 -1
  155. package/dist/components/react/post-avatar.js +1 -1
  156. package/dist/components/react/post-back-to-top.js +1 -1
  157. package/dist/components/react/post-banner.js +1 -1
  158. package/dist/components/react/post-breadcrumb-item.js +1 -1
  159. package/dist/components/react/post-breadcrumbs.js +1 -1
  160. package/dist/components/react/post-closebutton.js +1 -1
  161. package/dist/components/react/post-collapsible-trigger.js +1 -1
  162. package/dist/components/react/post-collapsible.js +1 -1
  163. package/dist/components/react/post-date-picker.js +1 -1
  164. package/dist/components/react/post-footer.js +1 -1
  165. package/dist/components/react/post-header.js +1 -1
  166. package/dist/components/react/post-icon.js +1 -1
  167. package/dist/components/react/post-language-menu-item.js +1 -1
  168. package/dist/components/react/post-language-menu.js +1 -1
  169. package/dist/components/react/post-linkarea.js +1 -1
  170. package/dist/components/react/post-listbox-option.js +1 -1
  171. package/dist/components/react/post-listbox.js +1 -1
  172. package/dist/components/react/post-logo.js +1 -1
  173. package/dist/components/react/post-mainnavigation.js +1 -1
  174. package/dist/components/react/post-megadropdown-trigger.js +1 -1
  175. package/dist/components/react/post-megadropdown.js +1 -1
  176. package/dist/components/react/post-menu-item.js +1 -1
  177. package/dist/components/react/post-menu-trigger.js +1 -1
  178. package/dist/components/react/post-menu.js +1 -1
  179. package/dist/components/react/post-number-input.js +1 -1
  180. package/dist/components/react/post-pagination.js +1 -1
  181. package/dist/components/react/post-popover-trigger.js +1 -1
  182. package/dist/components/react/post-popover.js +1 -1
  183. package/dist/components/react/post-popovercontainer.js +1 -1
  184. package/dist/components/react/post-progressbar.js +1 -1
  185. package/dist/components/react/post-rating.js +1 -1
  186. package/dist/components/react/post-side-navigation-trigger.js +1 -1
  187. package/dist/components/react/post-side-navigation.js +1 -1
  188. package/dist/components/react/post-stepper-item.js +1 -1
  189. package/dist/components/react/post-stepper.js +1 -1
  190. package/dist/components/react/post-tab-item.js +1 -1
  191. package/dist/components/react/post-tab-panel.js +1 -1
  192. package/dist/components/react/post-tabs.js +1 -1
  193. package/dist/components/react/post-togglebutton.js +1 -1
  194. package/dist/components/react/post-tooltip-trigger.js +1 -1
  195. package/dist/components/react/post-tooltip.js +1 -1
  196. package/dist/docs.json +62 -16
  197. package/dist/esm/breakpoints-I1j7a0bW.js +45 -0
  198. package/dist/esm/{create-validator-decorator-CNUaQboh.js → create-validator-decorator-CbYxqPSB.js} +1 -1
  199. package/dist/esm/{event-from-rEfV4v4a.js → event-from-BEcxHjuM.js} +19 -14
  200. package/dist/esm/{index-sn7oKSwC.js → index-D3NdvMgy.js} +1 -1
  201. package/dist/esm/{breakpoints-BQ3HlJPr.js → index-bR8vy6-s.js} +1 -42
  202. package/dist/esm/loader.js +3 -3
  203. package/dist/esm/{one-of-C6Ironyj.js → one-of-Mx4vYjem.js} +1 -1
  204. package/dist/esm/{package-tTf1w3A9.js → package-Ny5VnydI.js} +1 -1
  205. package/dist/esm/{pattern-57oD--q3.js → pattern-CqQVrJPN.js} +1 -1
  206. package/dist/esm/post-accordion_2.entry.js +7 -7
  207. package/dist/esm/post-autocomplete.entry.js +70 -55
  208. package/dist/esm/post-avatar.entry.js +7 -7
  209. package/dist/esm/post-back-to-top.entry.js +25 -13
  210. package/dist/esm/post-banner.entry.js +6 -13
  211. package/dist/esm/post-breadcrumb-item.entry.js +18 -10
  212. package/dist/esm/post-breadcrumbs.entry.js +118 -67
  213. package/dist/esm/post-closebutton_14.entry.js +403 -209
  214. package/dist/esm/post-collapsible_2.entry.js +8 -8
  215. package/dist/esm/post-components.js +3 -3
  216. package/dist/esm/post-date-picker.entry.js +8 -8
  217. package/dist/esm/post-footer.entry.js +8 -8
  218. package/dist/esm/post-linkarea.entry.js +3 -3
  219. package/dist/esm/post-listbox-option.entry.js +4 -4
  220. package/dist/esm/post-listbox.entry.js +6 -6
  221. package/dist/esm/post-number-input.entry.js +6 -5
  222. package/dist/esm/post-pagination.entry.js +6 -6
  223. package/dist/esm/post-popover-trigger.entry.js +7 -7
  224. package/dist/esm/post-popover.entry.js +10 -10
  225. package/dist/esm/post-progressbar.entry.js +5 -5
  226. package/dist/esm/post-rating.entry.js +7 -7
  227. package/dist/esm/post-side-navigation-trigger.entry.js +8 -8
  228. package/dist/esm/post-side-navigation.entry.js +9 -9
  229. package/dist/esm/post-stepper-item.entry.js +3 -3
  230. package/dist/esm/post-stepper.entry.js +8 -8
  231. package/dist/esm/post-tab-item.entry.js +7 -7
  232. package/dist/esm/post-tab-panel.entry.js +7 -7
  233. package/dist/esm/post-tabs.entry.js +8 -8
  234. package/dist/esm/post-tooltip-trigger.entry.js +7 -7
  235. package/dist/esm/post-tooltip.entry.js +6 -6
  236. package/dist/esm/{required-D2rl2XZJ.js → required-CxvSCYJj.js} +1 -1
  237. package/dist/esm/{type-CGynDrfh.js → type-CYB7_Yi8.js} +1 -1
  238. package/dist/esm/{url-1wyUfUv-.js → url-DOwgyBfp.js} +1 -1
  239. package/dist/post-components/p-030bfaa1.entry.js +1 -0
  240. package/dist/post-components/p-1d67c427.entry.js +1 -0
  241. package/dist/post-components/{p-212c71e4.entry.js → p-2379e498.entry.js} +1 -1
  242. package/dist/post-components/p-29e6c2a4.entry.js +1 -0
  243. package/dist/post-components/{p-a01ea634.entry.js → p-2cb843f4.entry.js} +1 -1
  244. package/dist/post-components/{p-96bf6b01.entry.js → p-2ee255c1.entry.js} +1 -1
  245. package/dist/post-components/{p-b535fc10.entry.js → p-3a75186d.entry.js} +1 -1
  246. package/dist/post-components/{p-3149d866.entry.js → p-44718c1a.entry.js} +1 -1
  247. package/dist/post-components/{p-167191e5.entry.js → p-4e2bb082.entry.js} +1 -1
  248. package/dist/post-components/p-5a44b217.entry.js +1 -0
  249. package/dist/post-components/p-65e12f2c.entry.js +1 -0
  250. package/dist/post-components/p-665d877f.entry.js +1 -0
  251. package/dist/post-components/p-781efeb8.entry.js +1 -0
  252. package/dist/post-components/p-795eb5ad.entry.js +1 -0
  253. package/dist/post-components/p-894b20dd.entry.js +1 -0
  254. package/dist/post-components/p-9ad2216e.entry.js +1 -0
  255. package/dist/post-components/p-BEcxHjuM.js +1 -0
  256. package/dist/post-components/p-BmpkvdQk.js +1 -0
  257. package/dist/post-components/p-C-FunIfQ.js +1 -0
  258. package/dist/post-components/p-CCciE4QO.js +1 -0
  259. package/dist/post-components/p-D3NdvMgy.js +2 -0
  260. package/dist/post-components/p-I1j7a0bW.js +1 -0
  261. package/dist/post-components/p-Ny5VnydI.js +1 -0
  262. package/dist/post-components/p-X1vWfzMK.js +1 -0
  263. package/dist/post-components/{p-beed9922.entry.js → p-a9223467.entry.js} +1 -1
  264. package/dist/post-components/{p-e8d9723e.entry.js → p-b6e231a8.entry.js} +1 -1
  265. package/dist/post-components/{p-70fbe469.entry.js → p-b856263a.entry.js} +1 -1
  266. package/dist/post-components/p-bR8vy6-s.js +1 -0
  267. package/dist/post-components/{p-58422de1.entry.js → p-c7a39444.entry.js} +1 -1
  268. package/dist/post-components/p-cGcyMrvx.js +1 -0
  269. package/dist/post-components/{p-b99e6621.entry.js → p-cde00944.entry.js} +1 -1
  270. package/dist/post-components/p-cf7493ab.entry.js +1 -0
  271. package/dist/post-components/{p-e08d26f4.entry.js → p-e463e7ac.entry.js} +1 -1
  272. package/dist/post-components/{p-1cf5bc67.entry.js → p-e7f97f6d.entry.js} +1 -1
  273. package/dist/post-components/p-e8268a8d.entry.js +1 -0
  274. package/dist/post-components/{p-cf6eacab.entry.js → p-e8c19f72.entry.js} +1 -1
  275. package/dist/post-components/p-ecfc494e.entry.js +1 -0
  276. package/dist/post-components/p-eda4a376.entry.js +1 -0
  277. package/dist/post-components/{p-da217dbc.entry.js → p-ffec1880.entry.js} +1 -1
  278. package/dist/post-components/{p-DoNhJ2D7.js → p-sgCfAEQU.js} +1 -1
  279. package/dist/post-components/post-components.css +1 -1
  280. package/dist/post-components/post-components.esm.js +1 -1
  281. package/dist/types/components/post-autocomplete/post-autocomplete.d.ts +18 -6
  282. package/dist/types/components/post-back-to-top/post-back-to-top.d.ts +2 -1
  283. package/dist/types/components/post-banner/post-banner.d.ts +0 -1
  284. package/dist/types/components/post-breadcrumb-item/post-breadcrumb-item.d.ts +4 -0
  285. package/dist/types/components/post-breadcrumbs/post-breadcrumbs.d.ts +34 -11
  286. package/dist/types/components/post-closebutton/post-closebutton.d.ts +1 -1
  287. package/dist/types/components/post-menu/post-menu.d.ts +1 -0
  288. package/dist/types/components/post-popovercontainer/post-popovercontainer.d.ts +8 -5
  289. package/dist/types/components.d.ts +20 -0
  290. package/dist/types/utils/breakpoints.d.ts +1 -0
  291. package/dist/types/utils/closable-target.d.ts +5 -0
  292. package/dist/types/utils/event-from.d.ts +8 -0
  293. package/dist/types/utils/floating-ui.d.ts +12 -0
  294. package/dist/types/utils/index.d.ts +1 -0
  295. package/hydrate/index.js +908 -625
  296. package/hydrate/index.mjs +908 -625
  297. package/package.json +7 -6
  298. package/dist/components/react/p-BXqGI600.js +0 -1
  299. package/dist/components/react/p-B_WnO-QF.js +0 -1
  300. package/dist/components/react/p-BaB8wJvk.js +0 -1
  301. package/dist/components/react/p-Bji_4dfL.js +0 -1
  302. package/dist/components/react/p-CX2E_IXB.js +0 -1
  303. package/dist/components/react/p-D17tCsFk.js +0 -1
  304. package/dist/components/react/p-DD1c_IgL.js +0 -1
  305. package/dist/components/react/p-I0dqoE80.js +0 -1
  306. package/dist/components/react/p-rEfV4v4a.js +0 -1
  307. package/dist/components/react/p-tTf1w3A9.js +0 -1
  308. package/dist/post-components/p-0323b0f3.entry.js +0 -1
  309. package/dist/post-components/p-06ddd73b.entry.js +0 -1
  310. package/dist/post-components/p-090e52db.entry.js +0 -1
  311. package/dist/post-components/p-292a9784.entry.js +0 -1
  312. package/dist/post-components/p-2de6fe62.entry.js +0 -1
  313. package/dist/post-components/p-39ff8127.entry.js +0 -1
  314. package/dist/post-components/p-3a968b19.entry.js +0 -1
  315. package/dist/post-components/p-472_tiaS.js +0 -1
  316. package/dist/post-components/p-5873a90c.entry.js +0 -1
  317. package/dist/post-components/p-986fa1c1.entry.js +0 -1
  318. package/dist/post-components/p-BQ3HlJPr.js +0 -1
  319. package/dist/post-components/p-B_FOhVrp.js +0 -1
  320. package/dist/post-components/p-CeNqFJV7.js +0 -1
  321. package/dist/post-components/p-DYDdaLz-.js +0 -1
  322. package/dist/post-components/p-b1d2384a.entry.js +0 -1
  323. package/dist/post-components/p-bf83a3fb.entry.js +0 -1
  324. package/dist/post-components/p-c46bc56f.entry.js +0 -1
  325. package/dist/post-components/p-ce8132a9.entry.js +0 -1
  326. package/dist/post-components/p-d72e830b.entry.js +0 -1
  327. package/dist/post-components/p-rEfV4v4a.js +0 -1
  328. package/dist/post-components/p-sn7oKSwC.js +0 -2
  329. package/dist/post-components/p-tTf1w3A9.js +0 -1
@@ -1,22 +1,61 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-CW10QvjR.js');
4
- var breakpoints = require('./breakpoints-B0Olgvgc.js');
5
- var _package = require('./package-CL8OSAS4.js');
6
- var oneOf = require('./one-of-vJeW7S4_.js');
7
- var required = require('./required-DRnPokVn.js');
3
+ var index = require('./index-CXnlZiX8.js');
4
+ var breakpoints = require('./breakpoints-Kruvy8Dm.js');
5
+ var eventFrom = require('./event-from-CTcQxB9-.js');
6
+ var _package = require('./package-DdU-rENe.js');
7
+ var oneOf = require('./one-of-LGG0uEIi.js');
8
+ var required = require('./required-bJzxBV-V.js');
8
9
  var fade = require('./fade-CPQhl1fP.js');
9
- var eventFrom = require('./event-from-CwMw19f8.js');
10
10
  var getFocusableChildren = require('./get-focusable-children-BGVgg7Te.js');
11
- var type = require('./type-CNcU_-B2.js');
11
+ var index$1 = require('./index-CggFmZ8n.js');
12
+ var type = require('./type-CGPnqGY1.js');
12
13
  var nanoid = require('./nanoid-CmjyF1Cm.js');
13
- var pattern = require('./pattern-Zmn3wpyp.js');
14
- var url = require('./url-DgJ3lXQz.js');
14
+ var pattern = require('./pattern-B-csvfNt.js');
15
+ var url = require('./url-Dxdd6tWj.js');
15
16
  var utils = require('./utils-s05L2ulk.js');
16
17
  var fadeSlide = require('./fade-slide-dPhQa-I1.js');
17
18
  var placement = require('./placement-qEFR9hmI.js');
18
19
  var getRoot = require('./get-root-B1FnQ50K.js');
19
- require('./create-validator-decorator-BtgLWaMJ.js');
20
+ require('./create-validator-decorator-u-Byhihe.js');
21
+
22
+ const CLOSABLE_TARGETS = [
23
+ {
24
+ predicate: el => el.localName === 'post-banner',
25
+ close: el => void el.dismiss(),
26
+ },
27
+ {
28
+ predicate: el => el.localName === 'post-popover',
29
+ close: el => void el.hide(),
30
+ },
31
+ {
32
+ predicate: el => el.localName === 'post-popovercontainer',
33
+ close: el => void el.hide(),
34
+ },
35
+ {
36
+ predicate: el => el.localName === 'post-collapsible',
37
+ close: el => void el.toggle(false),
38
+ },
39
+ {
40
+ predicate: el => el.localName === 'post-accordion-item',
41
+ close: el => void el.toggle(false),
42
+ },
43
+ {
44
+ predicate: el => el.localName === 'dialog',
45
+ close: el => el.close(),
46
+ },
47
+ {
48
+ predicate: el => el.hasAttribute('popover'),
49
+ close: el => el.togglePopover(false),
50
+ },
51
+ ];
52
+ function findClosableTarget(start) {
53
+ const el = eventFrom.findClosestAcrossShadow(start, (el) => CLOSABLE_TARGETS.some(t => t.predicate(el)));
54
+ if (!el)
55
+ return null;
56
+ const match = CLOSABLE_TARGETS.find(t => t.predicate(el));
57
+ return { element: el, close: () => match.close(el) };
58
+ }
20
59
 
21
60
  const BUTTON_TYPES = ['button', 'reset'];
22
61
  const PLACEMENT = ['manual', 'auto'];
@@ -46,7 +85,7 @@ const PostClosebutton = class {
46
85
  }
47
86
  /**
48
87
  * The "type" attribute used for the close button
49
-
88
+
50
89
  */
51
90
  this.buttonType = 'button';
52
91
  /**
@@ -57,6 +96,10 @@ const PostClosebutton = class {
57
96
  * The size of the close button.
58
97
  */
59
98
  this.size = 'default';
99
+ this.handleClick = () => {
100
+ const target = findClosableTarget(this.host);
101
+ target?.close();
102
+ };
60
103
  }
61
104
  componentDidLoad() {
62
105
  if (globalThis.MutationObserver) {
@@ -81,13 +124,8 @@ const PostClosebutton = class {
81
124
  console.error(`The \`${this.host.localName}\` component requires content for accessibility.`);
82
125
  }
83
126
  }
84
- handleClick() {
85
- if (this.buttonType === 'reset')
86
- this.internals.form?.reset();
87
- this.host.closest('dialog')?.close();
88
- }
89
127
  render() {
90
- return (index.h(index.Host, { key: '22ac2b07e9a8a8f8d157423fea1bcedb2c4f9b11', "data-version": _package.version }, index.h("button", { key: '91eb413a2546f131e4c97c28340374addbf2c7a7', type: this.buttonType, class: "btn btn-icon btn-secondary btn-sm", onClick: () => this.handleClick() }, index.h("post-icon", { key: '02202b3df2e5830aeb267921c924c1e75508d546', "aria-hidden": "true", name: "closex" }), index.h("span", { key: 'c691c845dd58b4f975c33791d29518428ade6ee8', ref: el => (this.visuallyHidden = el), class: "visually-hidden" }, index.h("slot", { key: '3fd42b82ef1d1ea76343e0c69f421a2916c26006' })))));
128
+ return (index.h(index.Host, { key: 'f46ba6cbd82793b2a3d3a72c2f89236f0904eb68', "data-version": _package.version }, index.h("button", { key: 'd014e76ccce88a087f8dd9caaac002eb09f64699', type: this.buttonType, class: "btn btn-icon btn-secondary btn-sm", onClick: this.handleClick }, index.h("post-icon", { key: '442305b327aabe61f259b98694118ec1b4ed2f09', "aria-hidden": "true", name: "closex" }), index.h("span", { key: '530149339a2a983d1e5d23c149abd0faf6f912b5', ref: el => (this.visuallyHidden = el), class: "visually-hidden" }, index.h("slot", { key: 'b90d5bea08c70c6df33dc5fc74bcf06eb2b6cd14' })))));
91
129
  }
92
130
  static get formAssociated() { return true; }
93
131
  get host() { return index.getElement(this); }
@@ -176,7 +214,7 @@ const PostHeader = class {
176
214
  }
177
215
  constructor(hostRef) {
178
216
  index.registerInstance(this, hostRef);
179
- this.throttledResize = breakpoints.throttle(50, () => this.updateLocalHeaderHeight());
217
+ this.throttledResize = index$1.throttle(50, () => this.updateLocalHeaderHeight());
180
218
  this.animationOptions = {
181
219
  duration: 350,
182
220
  easing: 'headerEase',
@@ -434,10 +472,10 @@ const PostHeader = class {
434
472
  render() {
435
473
  const onDesktop = this.device === 'desktop';
436
474
  const onTabletAndMobile = this.device !== 'desktop';
437
- return (index.h(index.Host, { key: 'cdd9dc28893d6b4707e70cc4c8fd0940903e9062', "data-version": _package.version, "data-color-scheme": "light", "data-burger-menu": this.hasBurgerMenu, "data-menu-extended": this.burgerMenuExtended }, index.h("header", { key: '528563b69ff8f0452775b386a98de59e934c802d' }, index.h("div", { key: '1f0ab8f7288a63bdd8070bebc5651ffdc9ebfd42', class: "global-header" }, index.h("div", { key: 'd25d70eddb6d4edeb3be26b313b57980761979bf', class: "section" }, index.h("div", { key: 'fe284d8015bff65be10e2231147523640c4910d4', class: "logo" }, index.h("slot", { key: '0c6854d79f4e9695e99961481337b327af8c142c', name: "post-logo" })), index.h("div", { key: '6d0b33a967dc32760f3d3cf74fc794a1cb622327', class: "sliding-controls" }, onDesktop && (index.h("div", { key: '6ae13d6b39c19d3953fc719b0fca5cfbfa1c57b7', class: "audience" }, index.h("slot", { key: '49d3954b3c54d898ad473a0bf7d2566f2764638c', name: "audience" }))), index.h("slot", { key: 'c19c56d0b5c56c278b33c16ded66473fb44bfa3d', name: "global-nav-primary" }), (onDesktop || !this.hasMainNav) && [
475
+ return (index.h(index.Host, { key: '4ae4873c57cd307d3a4073f3d712bcf975528a90', "data-version": _package.version, "data-color-scheme": "light", "data-burger-menu": this.hasBurgerMenu, "data-menu-extended": this.burgerMenuExtended }, index.h("header", { key: 'cbc743a8981f4bbc3d42807244d88edba88e6a6c' }, index.h("div", { key: 'f39c122246336d0de803353d9abb9e573459073e', class: "global-header" }, index.h("div", { key: 'a76628c6501851bbfd597e0106847da12dc0b705', class: "section" }, index.h("div", { key: 'b703c54159955ae272378aab5172f0bcd1b638d1', class: "logo" }, index.h("slot", { key: 'a55336f3bee22b2c9a2cb0426b5e04ba5c8f29c4', name: "post-logo" })), index.h("div", { key: '9b6db729465dae5c503d461a115af296730b2ce6', class: "sliding-controls" }, onDesktop && (index.h("div", { key: 'cf4124ae4aaf47c2445499ce08ebb15076ac4bf2', class: "audience" }, index.h("slot", { key: '830003c8b3b50abeb9d82bdfde83212f20a4da3d', name: "audience" }))), index.h("slot", { key: '458afb2da52853fbc9bc066fc487fcf77df0d2a0', name: "global-nav-primary" }), (onDesktop || !this.hasMainNav) && [
438
476
  index.h("slot", { key: "global-nav-secondary", name: "global-nav-secondary" }),
439
477
  index.h("slot", { key: "language-menu", name: "language-menu" }),
440
- ], index.h("slot", { key: 'a7c75b4628234c282ea9556b7965a4e469783913', name: "post-login" }), onTabletAndMobile && this.hasMainNav && (index.h("post-togglebutton", { key: 'e120687caa66facfb9721b6b6a8bc8691966a429', class: "burger-button", ref: el => (this.burgerMenuButton = el), onClick: () => this.toggleBurgerMenu() }, index.h("span", { key: '43fd450ae79386d2c9bf29eb546cc66c399564e4' }, this.textMenu), index.h("post-icon", { key: '863c5284f9f8b38e8e72390ead96eb7cccda9dd5', "aria-hidden": "true", name: "burger", "data-showwhen": "untoggled" }), index.h("post-icon", { key: 'f4ed6301b1836c51b0dbf9ee51040bb62dd06beb', "aria-hidden": "true", name: "closex", "data-showwhen": "toggled" })))))), index.h("div", { key: 'e5c314eae3e25b9bfb23fcbe95684ea7bc99be41', ref: el => (this.localHeader = el), class: { 'local-header': true, 'megadropdown-open': this.megadropdownOpen } }, index.h("div", { key: '60dd8029f12ec03493b5ce81bc3e3b8338cd80e6', class: "section" }, index.h("slot", { key: '8bbaa11f39bdf2ceb513fe698913c0350ca78776', name: "side-nav" }), index.h("slot", { key: '0c1d5da1e42a1d96005c66de9c675c91dc2c8518', name: "title" }), this.hasTitle && index.h("slot", { key: '8a2bb6822ba8033545e76b8f9a96f9bc7f498c9c', name: "local-nav" }), onDesktop && index.h("slot", { key: '9c8df8ae91ad85ab58f9ee0bfef6a661fee59814', name: "main-nav" }), onDesktop && !this.hasTitle && index.h("slot", { key: '85197bf72379b567c782bb54dbf77e6c17060895', name: "local-nav" }))), this.hasBurgerMenu && this.renderBurgerMenu())));
478
+ ], index.h("slot", { key: 'ffab20101950b7472c97ff0675f36903a6a66ebd', name: "post-login" }), onTabletAndMobile && this.hasMainNav && (index.h("post-togglebutton", { key: 'd1cb44efb5ae024bc225487be4e592a406acf138', class: "burger-button", ref: el => (this.burgerMenuButton = el), onClick: () => this.toggleBurgerMenu() }, index.h("span", { key: 'c33d2bb5c415f58829ad10026b9811684eac3d35' }, this.textMenu), index.h("post-icon", { key: '7acb3d93aec23ef1c1efd9c9d52832395e66abf0', "aria-hidden": "true", name: "burger", "data-showwhen": "untoggled" }), index.h("post-icon", { key: '7b6fb17d50df4474ddd282d7e202a43c324c3b87', "aria-hidden": "true", name: "closex", "data-showwhen": "toggled" })))))), index.h("div", { key: 'c7e6d91a0cd4a286b7186d0f41abdf9dc1e9ffd4', ref: el => (this.localHeader = el), class: { 'local-header': true, 'megadropdown-open': this.megadropdownOpen } }, index.h("div", { key: '670d00fb0a79ecc1f2bb45645887db13c7ea500f', class: "section" }, index.h("slot", { key: '5d3b0c9b97be561875fc908b2b7bf4d558513318', name: "side-nav" }), index.h("slot", { key: '39348fb8869f5623da026ed08ce69f727d9de7e6', name: "title" }), this.hasTitle && index.h("slot", { key: '883097731548de45adec9cbbf7df1c80a37b76b5', name: "local-nav" }), onDesktop && index.h("slot", { key: 'fbc77dee6ed73d8a13da75d3d695af80ce32c3af', name: "main-nav" }), onDesktop && !this.hasTitle && index.h("slot", { key: '94a989295ae04cd8259ba22e583d41bcb4701881', name: "local-nav" }))), this.hasBurgerMenu && this.renderBurgerMenu())));
441
479
  }
442
480
  get host() { return index.getElement(this); }
443
481
  static get watchers() { return {
@@ -567,7 +605,7 @@ const PostIcon = class {
567
605
  }).filter(([_key, value]) => value !== null));
568
606
  }
569
607
  render() {
570
- return (index.h(index.Host, { key: 'ce81db69bf77d09a0a331bac48cdaede7ff3cb8e', "data-version": _package.version }, index.h("span", { key: '211f999da845687289fd991421f4315a090a67ba', style: this.getStyles() })));
608
+ return (index.h(index.Host, { key: '917a78dbe4db46244348298b08a2176c9028048e', "data-version": _package.version }, index.h("span", { key: '06f07755212e2b6a9a5957d7fd37751c62343be6', style: this.getStyles() })));
571
609
  }
572
610
  get host() { return index.getElement(this); }
573
611
  };
@@ -632,7 +670,7 @@ const PostLanguageMenu = class {
632
670
  }
633
671
  componentDidLoad() {
634
672
  // Initially set variants and active language
635
- // Handles cases where the language-menu is rendered after the language-options have been rendered
673
+ // Handles cases where the language-menu is rendered after the language-menu-items have been rendered
636
674
  this.updateChildrenVariant();
637
675
  }
638
676
  /**
@@ -800,7 +838,7 @@ const PostLogo = class {
800
838
  render() {
801
839
  const logoLink = this.url && (typeof this.url === 'string' ? this.url : this.url.href);
802
840
  const LogoTag = logoLink ? 'a' : 'span';
803
- return (index.h(index.Host, { key: 'b9d1a0fcdbbb7789863bd89d0cb1154f432d7749', "data-version": _package.version }, index.h(LogoTag, { key: 'e9e5f76950b4e95a9dc8d8f961c75f635007b61f', class: `logo ${logoLink ? 'logo-link' : ''}`, ...(logoLink ? { href: logoLink } : {}) }, index.h("span", { key: '7f9647d7fc00d1e79e544cbdd11fce5313b2bc83', class: "description" }, index.h("slot", { key: '8eb8bb0385b14a98aadf1cd956d74972179bee6b', onSlotchange: () => this.checkDescription() })), index.h("svg", { key: '1bc78071d7ee521a249452af9f8b34108297205c', xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 72 72", "aria-hidden": "true" }, index.h("g", { key: '9d10890ce19c40c38a976dbbbcb9e3939611f765', id: "Logo" }, index.h("rect", { key: 'c0f9312024721329e2427a623c78658d094d039c', fill: "#ffcc00", x: "0", y: "0", width: "72", height: "72" }), index.h("polygon", { key: '36f41cc32b0a1d92ba4c1b8cb56e9c6f2b454a4f', fill: "#ff0000", points: "34,32.3 34,19 19.7,19 19.7,29.1 10,29.1 10,42.9 19.7,42.9 19.7,53 34,53 34,39.7 30.6,39.7 30.6,49.8 23.1,49.8 23.1,39.7 13.4,39.7 13.4,32.3 23.1,32.3 23.1,22.2 30.6,22.2 30.6,32.3" }), index.h("path", { key: 'e32537010333ac42f7614203062b424c4feb819f', d: "M53.56234,31.10526c0,2.41272-1.99154,4.29475-4.51723,4.29475H45.2v-8.3h3.84511C51.66802,27.1,53.56234,28.78889,53.56234,31.10526z M50.69666,19H36v34h9.2V42.9h5.49666c6.75131,0,11.9971-5.15137,11.9971-11.8057C62.69376,24.39136,57.35099,19,50.69666,19z" }))))));
841
+ return (index.h(index.Host, { key: 'dd8ddb0dcbed8062ee5adecf2a26ad98b42c94b1', "data-version": _package.version }, index.h(LogoTag, { key: 'f4d8ad34cdd455c3e2096ce26db7bc775d7e05c3', class: `logo ${logoLink ? 'logo-link' : ''}`, ...(logoLink ? { href: logoLink } : {}) }, index.h("span", { key: '87a58c2904f3dae5406b5652787ca1d99dbda0dc', class: "description" }, index.h("slot", { key: 'ae69c86c4bfed42b25aafa948f13989c31833466', onSlotchange: () => this.checkDescription() })), index.h("svg", { key: 'e51164151a1a53971414ea37af5085f99575fc36', xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 72 72", "aria-hidden": "true" }, index.h("g", { key: 'fa946d3ded62128ca4469b160103b464eb59329b', id: "Logo" }, index.h("rect", { key: '18424ee0ca3256f9169d8dac6223df3d49cb09b9', fill: "#ffcc00", x: "0", y: "0", width: "72", height: "72" }), index.h("polygon", { key: '96381aeedbc8536fd551ec8ac4161db842b3bfc9', fill: "#ff0000", points: "34,32.3 34,19 19.7,19 19.7,29.1 10,29.1 10,42.9 19.7,42.9 19.7,53 34,53 34,39.7 30.6,39.7 30.6,49.8 23.1,49.8 23.1,39.7 13.4,39.7 13.4,32.3 23.1,32.3 23.1,22.2 30.6,22.2 30.6,32.3" }), index.h("path", { key: 'c1bbdb1bb687390d59ec2e6dcf83e80d1606582f', d: "M53.56234,31.10526c0,2.41272-1.99154,4.29475-4.51723,4.29475H45.2v-8.3h3.84511C51.66802,27.1,53.56234,28.78889,53.56234,31.10526z M50.69666,19H36v34h9.2V42.9h5.49666c6.75131,0,11.9971-5.15137,11.9971-11.8057C62.69376,24.39136,57.35099,19,50.69666,19z" }))))));
804
842
  }
805
843
  get host() { return index.getElement(this); }
806
844
  };
@@ -940,7 +978,7 @@ const PostMainnavigation = class {
940
978
  }, NAVBAR_DISABLE_DURATION);
941
979
  }
942
980
  render() {
943
- return (index.h(index.Host, { key: '374379b09ad5578002153a0a80afaf9308f1c964', version: _package.version, class: this.canScroll ? 'scrollable' : '' }, index.h("div", { key: 'b78537cec32cd23c7908482d73b7624e4662b1c8', "aria-hidden": "true", class: { 'scroll-control scroll-left': true, 'd-none': !this.canScrollLeft }, onMouseDown: e => this.handleScrollButtonClick(e, 'left') }, index.h("post-icon", { key: 'd196c0f3b480f5ede486945c684afe4a06a96af0', "aria-hidden": "true", name: "chevronleft" })), index.h("nav", { key: '5ee27a1b6cfc8aa59820514708485b334837c09d', ref: el => (this.navbar = el), "aria-label": this.textMain }, index.h("slot", { key: 'e0a1719713e59899ec4fd1ff057ab5e3c13f7069' })), index.h("div", { key: 'd1e2b456cadec20bb9c857fee23a3955ab20a2b2', "aria-hidden": "true", class: { 'scroll-control scroll-right': true, 'd-none': !this.canScrollRight }, onMouseDown: e => this.handleScrollButtonClick(e, 'right') }, index.h("post-icon", { key: 'dec56cf1fb67c5afb597936d0f99e6389517819f', "aria-hidden": "true", name: "chevronright" }))));
981
+ return (index.h(index.Host, { key: '9fe43f86cab360591a15a033e0dc657096a69c00', version: _package.version, class: this.canScroll ? 'scrollable' : '' }, index.h("div", { key: 'f68ea70e332336e99c0b51b19e33647b40fcfbb4', "aria-hidden": "true", class: { 'scroll-control scroll-left': true, 'd-none': !this.canScrollLeft }, onMouseDown: e => this.handleScrollButtonClick(e, 'left') }, index.h("post-icon", { key: 'fac01a93fd7cbfe2548a4d049d59f0bc6d01af63', "aria-hidden": "true", name: "chevronleft" })), index.h("nav", { key: '7787a27e76350e9e86a97a58a20abe1286786ff7', ref: el => (this.navbar = el), "aria-label": this.textMain }, index.h("slot", { key: '357a8f5fe1e7b6bea5ae67d87c979f785ea24b82' })), index.h("div", { key: 'ce6091a9466fcd17aca39fcb5d6c204e1782c95d', "aria-hidden": "true", class: { 'scroll-control scroll-right': true, 'd-none': !this.canScrollRight }, onMouseDown: e => this.handleScrollButtonClick(e, 'right') }, index.h("post-icon", { key: '92d35b38a453326701a0837e6187abf82fa37bf4', "aria-hidden": "true", name: "chevronright" }))));
944
982
  }
945
983
  get host() { return index.getElement(this); }
946
984
  };
@@ -1244,7 +1282,7 @@ const PostMegadropdown = class {
1244
1282
  }
1245
1283
  render() {
1246
1284
  const containerStyle = this.isVisible ? {} : { display: 'none' };
1247
- return (index.h(index.Host, { key: 'd181a65a25eafbbc645c717ee2f447caf1ab040a', version: _package.version }, index.h("div", { key: '7bd6003c2e696e64a14b98a94e6c67d66d143192', ref: el => (this.animatedContainer = el), class: "megadropdown", style: containerStyle }, index.h("div", { key: 'c79d10e279a37d94c2849ce4cac7bf4d260a0ca3', class: "section" }, this.device !== 'desktop' && this.megadropdownTitle && (index.h("p", { key: '7e7769acb5391cb33958b1bd9739583e25def2cc', class: "megadropdown-title" }, this.megadropdownTitle)), index.h("div", { key: 'fe7b63bd6b9daff336e599cd9ca43338a36fa595', class: "megadropdown-content" }, index.h("slot", { key: 'cc19bcec12adee943391ec818bcfa8cd8290cb49' })), this.device === 'desktop' ? (index.h("post-closebutton", { onClick: () => this.hide(true), class: "close-button", size: "small", placement: "manual" }, this.textClose)) : (index.h("button", { onClick: () => this.hide(true), class: "back-button" }, index.h("post-icon", { name: "arrowleft" }), this.textBack))))));
1285
+ return (index.h(index.Host, { key: '2cc8228a628b2a0380acf4fcac8daa1ef1a7bf2f', version: _package.version }, index.h("div", { key: '709fe50f23fd355bd97add916b451d5abf653780', ref: el => (this.animatedContainer = el), class: "megadropdown", style: containerStyle }, index.h("div", { key: 'e2bac29e70e39800ee55c8454f78b6889b241121', class: "section" }, this.device !== 'desktop' && this.megadropdownTitle && (index.h("p", { key: '6c28bc5d3e3b8c8dab385f13a4b9b8a7b7ba70b9', class: "megadropdown-title" }, this.megadropdownTitle)), index.h("div", { key: 'bf71d0d7b4a84ae1238f27373d195403d8a1f812', class: "megadropdown-content" }, index.h("slot", { key: '9812bec733ca678b1a3681d90859082e57fbd64a' })), this.device === 'desktop' ? (index.h("post-closebutton", { onClick: () => this.hide(true), class: "close-button", size: "small", placement: "manual" }, this.textClose)) : (index.h("button", { onClick: () => this.hide(true), class: "back-button" }, index.h("post-icon", { name: "arrowleft" }), this.textBack))))));
1248
1286
  }
1249
1287
  get host() { return index.getElement(this); }
1250
1288
  };
@@ -1331,7 +1369,7 @@ const PostMegadropdownTrigger = class {
1331
1369
  this.megadropdown.toggle();
1332
1370
  }
1333
1371
  render() {
1334
- return (index.h(index.Host, { key: '7dea071ab1a606e7427631e45a1521aef0be85fe', "data-version": _package.version }, index.h("button", { key: '4486549cfbad6f00de4a44c7af550dac428b9450', ref: el => (this.interactiveButton = el), type: "button", "aria-haspopup": "menu", "aria-expanded": this.isMegadropdownExpanded.toString(), onClick: this.onClick.bind(this), onKeyDown: this.onKeyDown.bind(this), class: { active: this.active } }, index.h("span", { key: '566388f5cc5fd7eb4227de6fcd0205a3c3c0d54d' }, index.h("span", { key: 'e874004dc5a3d8bf3a422c9b783c24dd6968cf74', innerHTML: this.slottedContent }), index.h("span", { key: 'd89b1f6867f2b41934edb4a0865aebbdb21741a9', "aria-hidden": "true" }, index.h("slot", { key: 'fed72c4e9ad605db0d65c1c32e91976ae3147a4b' }))), index.h("post-icon", { key: '882e65fd30695db2b8a74be8258e69eed90b8f78', name: "chevrondown" }))));
1372
+ return (index.h(index.Host, { key: 'd5242fd9126f3486f731ed6f369f3a6c38a5d1e9', "data-version": _package.version }, index.h("button", { key: '6af086a50a9c788b35ba542531950b69a5e249da', ref: el => (this.interactiveButton = el), type: "button", "aria-haspopup": "menu", "aria-expanded": this.isMegadropdownExpanded.toString(), onClick: this.onClick.bind(this), onKeyDown: this.onKeyDown.bind(this), class: { active: this.active } }, index.h("span", { key: 'dacf0bd6dc576fa7c70353c98eacb3d81ddf83e5' }, index.h("span", { key: '0c7b950ea9bfcae62b367900d78f155edc49de72', innerHTML: this.slottedContent }), index.h("span", { key: '999325546eb3196f6e704ebeb18f436ff3d53756', "aria-hidden": "true" }, index.h("slot", { key: '08fa107b944a87edf156ea7d5e12692eba64952d' }))), index.h("post-icon", { key: 'eb32199b1ff6951b6025c1e4919674f5419f7d49', name: "chevrondown" }))));
1335
1373
  }
1336
1374
  get host() { return index.getElement(this); }
1337
1375
  };
@@ -1462,17 +1500,32 @@ const PostMenu = class {
1462
1500
  this.toggleMenu.emit(this.isVisible);
1463
1501
  if (this.isVisible) {
1464
1502
  this.lastFocusedElement = this.root?.activeElement;
1465
- requestAnimationFrame(() => {
1466
- const menuItems = this.getSlottedItems();
1467
- if (menuItems.length > 0) {
1468
- menuItems[0].focus();
1469
- }
1470
- });
1503
+ // Only focus the first item if the trigger was keyboard-focus-visible
1504
+ // that's the browser's own signal for a keyboard-driven interaction.
1505
+ if (this.wasFocusVisible(this.lastFocusedElement)) {
1506
+ requestAnimationFrame(() => {
1507
+ const menuItems = this.getSlottedItems();
1508
+ if (menuItems.length > 0) {
1509
+ menuItems[0].focus();
1510
+ }
1511
+ });
1512
+ }
1471
1513
  }
1472
1514
  else if (this.lastFocusedElement) {
1473
1515
  this.lastFocusedElement.focus();
1474
1516
  }
1475
1517
  }
1518
+ wasFocusVisible(element) {
1519
+ if (!element)
1520
+ return false;
1521
+ try {
1522
+ return element.matches(':focus-visible');
1523
+ }
1524
+ catch {
1525
+ // Not supported, fall back to always focusing
1526
+ return true;
1527
+ }
1528
+ }
1476
1529
  controlKeyDownHandler(e) {
1477
1530
  const menuItems = this.getSlottedItems();
1478
1531
  if (menuItems.length === 0) {
@@ -1524,7 +1577,7 @@ const PostMenu = class {
1524
1577
  ]));
1525
1578
  }
1526
1579
  render() {
1527
- return (index.h(index.Host, { key: 'ec2d0c28803ab242f28e942c52d03b38d40f3704', "data-version": _package.version }, index.h("post-popovercontainer", { key: 'c2bbf5c95e200aecbdc55b94676ab1b1b0a32d13', onPostShow: this.handlePostShown.bind(this), onPostBeforeToggle: this.handlePostBeforeToggle.bind(this), placement: this.placement, ref: e => (this.popoverRef = e) }, index.h("div", { key: '80e56e976e944955f72b504b33ee3a16117f4551', part: "post-menu" }, index.h("slot", { key: 'cab13b8104f0be049e31fe5b3eca3af85bec0869', name: "header" }), index.h("slot", { key: 'acbbd8565bb90c91dad4713fbc4e8c50d10390e8' })))));
1580
+ return (index.h(index.Host, { key: 'cc6ede4cdacb722006475de88385b041d7e42dcb', "data-version": _package.version }, index.h("post-popovercontainer", { key: '3931f604aad477441112fd0b5a4800c8f034abbb', onPostShow: this.handlePostShown.bind(this), onPostBeforeToggle: this.handlePostBeforeToggle.bind(this), placement: this.placement, ref: e => (this.popoverRef = e) }, index.h("div", { key: '1b0adb12bb1369d14a6bcfac3c956090eb66572a', part: "post-menu" }, index.h("slot", { key: '9c2518e7e9e6ccaa64d486a90b5fc7eec15c24b8', name: "header" }), index.h("slot", { key: 'd28df1e411010aabe083255cd5e5ece4bd62424d' })))));
1528
1581
  }
1529
1582
  get host() { return index.getElement(this); }
1530
1583
  };
@@ -1623,7 +1676,7 @@ const PostMenuTrigger = class {
1623
1676
  return null;
1624
1677
  }
1625
1678
  render() {
1626
- return (index.h(index.Host, { key: '2e0560835a4202f9a84990a60305bf7dc8adbc98', "data-version": _package.version }, index.h("slot", { key: 'd175e8bc5ddb253476f9795d7b0b2df2797c46aa' })));
1679
+ return (index.h(index.Host, { key: 'fcdfd58ba24cd5269461477ac3d00a53ccf2ea1b', "data-version": _package.version }, index.h("slot", { key: 'b3a6b137bf61accd32eb1bec5af5e39e68ec6613' })));
1627
1680
  }
1628
1681
  get host() { return index.getElement(this); }
1629
1682
  };
@@ -1638,6 +1691,7 @@ PostMenuTrigger.style = postMenuTriggerCss();
1638
1691
  * @see https://floating-ui.com/docs/virtual-elements
1639
1692
  */
1640
1693
 
1694
+ const sides = ['top', 'right', 'bottom', 'left'];
1641
1695
  const min = Math.min;
1642
1696
  const max = Math.max;
1643
1697
  const round = Math.round;
@@ -1730,12 +1784,12 @@ function getOppositePlacement(placement) {
1730
1784
  return oppositeSideMap[side] + placement.slice(side.length);
1731
1785
  }
1732
1786
  function expandPaddingObject(padding) {
1787
+ var _padding$top, _padding$right, _padding$bottom, _padding$left;
1733
1788
  return {
1734
- top: 0,
1735
- right: 0,
1736
- bottom: 0,
1737
- left: 0,
1738
- ...padding
1789
+ top: (_padding$top = padding.top) != null ? _padding$top : 0,
1790
+ right: (_padding$right = padding.right) != null ? _padding$right : 0,
1791
+ bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0,
1792
+ left: (_padding$left = padding.left) != null ? _padding$left : 0
1739
1793
  };
1740
1794
  }
1741
1795
  function getPaddingObject(padding) {
@@ -1810,13 +1864,9 @@ function computeCoordsFromPlacement(_ref, placement, rtl) {
1810
1864
  y: reference.y
1811
1865
  };
1812
1866
  }
1813
- switch (getAlignment(placement)) {
1814
- case 'start':
1815
- coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
1816
- break;
1817
- case 'end':
1818
- coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
1819
- break;
1867
+ const alignment = getAlignment(placement);
1868
+ if (alignment) {
1869
+ coords[alignmentAxis] += commonAlign * (alignment === 'end' ? 1 : -1) * (rtl && isVertical ? -1 : 1);
1820
1870
  }
1821
1871
  return coords;
1822
1872
  }
@@ -1865,10 +1915,7 @@ async function detectOverflow(state, options) {
1865
1915
  height: rects.floating.height
1866
1916
  } : rects.reference;
1867
1917
  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));
1868
- const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {
1869
- x: 1,
1870
- y: 1
1871
- } : {
1918
+ const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) && (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {
1872
1919
  x: 1,
1873
1920
  y: 1
1874
1921
  };
@@ -2041,17 +2088,16 @@ const arrow$1 = options => ({
2041
2088
 
2042
2089
  // Make sure the arrow doesn't overflow the floating element if the center
2043
2090
  // point is outside the floating element's bounds.
2044
- const min$1 = minPadding;
2045
2091
  const max = clientSize - arrowDimensions[length] - maxPadding;
2046
2092
  const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
2047
- const offset = clamp(min$1, center, max);
2093
+ const offset = clamp(minPadding, center, max);
2048
2094
 
2049
2095
  // If the reference is small enough that the arrow's padding causes it to
2050
2096
  // to point to nothing for an aligned placement, adjust the offset of the
2051
2097
  // floating element itself. To ensure `shift()` continues to take action,
2052
2098
  // a single reset is performed when this is true.
2053
- const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
2054
- const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;
2099
+ const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < minPadding ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
2100
+ const alignmentOffset = shouldAddOffset ? center < minPadding ? center - minPadding : center - max : 0;
2055
2101
  return {
2056
2102
  [axis]: coords[axis] + alignmentOffset,
2057
2103
  data: {
@@ -2198,6 +2244,76 @@ const flip$1 = function (options) {
2198
2244
  };
2199
2245
  };
2200
2246
 
2247
+ function getSideOffsets(overflow, rect) {
2248
+ return {
2249
+ top: overflow.top - rect.height,
2250
+ right: overflow.right - rect.width,
2251
+ bottom: overflow.bottom - rect.height,
2252
+ left: overflow.left - rect.width
2253
+ };
2254
+ }
2255
+ function isAnySideFullyClipped(overflow) {
2256
+ return sides.some(side => overflow[side] >= 0);
2257
+ }
2258
+ /**
2259
+ * Provides data to hide the floating element in applicable situations, such as
2260
+ * when it is not in the same clipping context as the reference element.
2261
+ * @see https://floating-ui.com/docs/hide
2262
+ */
2263
+ const hide$1 = function (options) {
2264
+ if (options === void 0) {
2265
+ options = {};
2266
+ }
2267
+ return {
2268
+ name: 'hide',
2269
+ options,
2270
+ async fn(state) {
2271
+ const {
2272
+ rects,
2273
+ platform
2274
+ } = state;
2275
+ const {
2276
+ strategy = 'referenceHidden',
2277
+ ...detectOverflowOptions
2278
+ } = evaluate(options, state);
2279
+ switch (strategy) {
2280
+ case 'referenceHidden':
2281
+ {
2282
+ const overflow = await platform.detectOverflow(state, {
2283
+ ...detectOverflowOptions,
2284
+ elementContext: 'reference'
2285
+ });
2286
+ const offsets = getSideOffsets(overflow, rects.reference);
2287
+ return {
2288
+ data: {
2289
+ referenceHiddenOffsets: offsets,
2290
+ referenceHidden: isAnySideFullyClipped(offsets)
2291
+ }
2292
+ };
2293
+ }
2294
+ case 'escaped':
2295
+ {
2296
+ const overflow = await platform.detectOverflow(state, {
2297
+ ...detectOverflowOptions,
2298
+ altBoundary: true
2299
+ });
2300
+ const offsets = getSideOffsets(overflow, rects.floating);
2301
+ return {
2302
+ data: {
2303
+ escapedOffsets: offsets,
2304
+ escaped: isAnySideFullyClipped(offsets)
2305
+ }
2306
+ };
2307
+ }
2308
+ default:
2309
+ {
2310
+ return {};
2311
+ }
2312
+ }
2313
+ }
2314
+ };
2315
+ };
2316
+
2201
2317
  function getBoundingRect(rects) {
2202
2318
  const minX = min(...rects.map(rect => rect.left));
2203
2319
  const minY = min(...rects.map(rect => rect.top));
@@ -2254,12 +2370,19 @@ const inline$1 = function (options) {
2254
2370
  y
2255
2371
  } = evaluate(options, state);
2256
2372
  const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);
2373
+
2374
+ // No rects (e.g. a hidden or detached reference, or a collapsed range) —
2375
+ // keep the existing reference rect rather than resetting to an invalid
2376
+ // one with non-finite values.
2377
+ if (!nativeClientRects.length) {
2378
+ return {};
2379
+ }
2257
2380
  const clientRects = getRectsByLine(nativeClientRects);
2258
2381
  const fallback = rectToClientRect(getBoundingRect(nativeClientRects));
2259
2382
  const paddingObject = getPaddingObject(padding);
2260
2383
  function getBoundingClientRect() {
2261
2384
  // There are two rects and they are disjoined.
2262
- if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {
2385
+ if (clientRects.length === 2 && (clientRects[0].left > clientRects[1].right || clientRects[1].left > clientRects[0].right) && x != null && y != null) {
2263
2386
  // Find the first rect in which the point is fully inside.
2264
2387
  return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;
2265
2388
  }
@@ -2274,18 +2397,12 @@ const inline$1 = function (options) {
2274
2397
  const bottom = lastRect.bottom;
2275
2398
  const left = isTop ? firstRect.left : lastRect.left;
2276
2399
  const right = isTop ? firstRect.right : lastRect.right;
2277
- const width = right - left;
2278
- const height = bottom - top;
2279
- return {
2280
- top,
2281
- bottom,
2282
- left,
2283
- right,
2284
- width,
2285
- height,
2400
+ return rectToClientRect({
2286
2401
  x: left,
2287
- y: top
2288
- };
2402
+ y: top,
2403
+ width: right - left,
2404
+ height: bottom - top
2405
+ });
2289
2406
  }
2290
2407
  const isLeftSide = getSide(placement) === 'left';
2291
2408
  const maxRight = max(...clientRects.map(rect => rect.right));
@@ -2293,20 +2410,12 @@ const inline$1 = function (options) {
2293
2410
  const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);
2294
2411
  const top = measureRects[0].top;
2295
2412
  const bottom = measureRects[measureRects.length - 1].bottom;
2296
- const left = minLeft;
2297
- const right = maxRight;
2298
- const width = right - left;
2299
- const height = bottom - top;
2300
- return {
2301
- top,
2302
- bottom,
2303
- left,
2304
- right,
2305
- width,
2306
- height,
2307
- x: left,
2308
- y: top
2309
- };
2413
+ return rectToClientRect({
2414
+ x: minLeft,
2415
+ y: top,
2416
+ width: maxRight - minLeft,
2417
+ height: bottom - top
2418
+ });
2310
2419
  }
2311
2420
  return fallback;
2312
2421
  }
@@ -2456,23 +2565,16 @@ const shift$1 = function (options) {
2456
2565
  y
2457
2566
  };
2458
2567
  const overflow = await platform.detectOverflow(state, detectOverflowOptions);
2459
- const crossAxis = getSideAxis(getSide(placement));
2568
+ const crossAxis = getSideAxis(placement);
2460
2569
  const mainAxis = getOppositeAxis(crossAxis);
2461
2570
  let mainAxisCoord = coords[mainAxis];
2462
2571
  let crossAxisCoord = coords[crossAxis];
2572
+ const clampCoord = (axis, coord) => clamp(coord + overflow[axis === 'y' ? 'top' : 'left'], coord, coord - overflow[axis === 'y' ? 'bottom' : 'right']);
2463
2573
  if (checkMainAxis) {
2464
- const minSide = mainAxis === 'y' ? 'top' : 'left';
2465
- const maxSide = mainAxis === 'y' ? 'bottom' : 'right';
2466
- const min = mainAxisCoord + overflow[minSide];
2467
- const max = mainAxisCoord - overflow[maxSide];
2468
- mainAxisCoord = clamp(min, mainAxisCoord, max);
2574
+ mainAxisCoord = clampCoord(mainAxis, mainAxisCoord);
2469
2575
  }
2470
2576
  if (checkCrossAxis) {
2471
- const minSide = crossAxis === 'y' ? 'top' : 'left';
2472
- const maxSide = crossAxis === 'y' ? 'bottom' : 'right';
2473
- const min = crossAxisCoord + overflow[minSide];
2474
- const max = crossAxisCoord - overflow[maxSide];
2475
- crossAxisCoord = clamp(min, crossAxisCoord, max);
2577
+ crossAxisCoord = clampCoord(crossAxis, crossAxisCoord);
2476
2578
  }
2477
2579
  const limitedCoords = limiter.fn({
2478
2580
  ...state,
@@ -2503,6 +2605,7 @@ const limitShift$1 = function (options) {
2503
2605
  return {
2504
2606
  options,
2505
2607
  fn(state) {
2608
+ var _rawOffset$mainAxis, _rawOffset$crossAxis;
2506
2609
  const {
2507
2610
  x,
2508
2611
  y,
@@ -2528,9 +2631,8 @@ const limitShift$1 = function (options) {
2528
2631
  mainAxis: rawOffset,
2529
2632
  crossAxis: 0
2530
2633
  } : {
2531
- mainAxis: 0,
2532
- crossAxis: 0,
2533
- ...rawOffset
2634
+ mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0,
2635
+ crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0
2534
2636
  };
2535
2637
  if (checkMainAxis) {
2536
2638
  const len = mainAxis === 'y' ? 'height' : 'width';
@@ -2562,6 +2664,12 @@ const limitShift$1 = function (options) {
2562
2664
  };
2563
2665
  };
2564
2666
 
2667
+ // Method syntax keeps callback parameters bivariant, but expressing the
2668
+ // explicit `| undefined` required by `exactOptionalPropertyTypes` needs
2669
+ // property syntax, which is contravariant under `strictFunctionTypes`.
2670
+ // Extracting the function from a method position restores that bivariance so
2671
+ // consumers can still assign callbacks with narrower parameter types.
2672
+
2565
2673
  /**
2566
2674
  * Provides data that allows you to change the size of the floating element —
2567
2675
  * for instance, prevent it from overflowing the clipping boundary or match the
@@ -2576,7 +2684,6 @@ const size$1 = function (options) {
2576
2684
  name: 'size',
2577
2685
  options,
2578
2686
  async fn(state) {
2579
- var _state$middlewareData, _state$middlewareData2;
2580
2687
  const {
2581
2688
  placement,
2582
2689
  rects,
@@ -2608,24 +2715,21 @@ const size$1 = function (options) {
2608
2715
  const maximumClippingWidth = width - overflow.left - overflow.right;
2609
2716
  const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);
2610
2717
  const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);
2611
- const noShift = !state.middlewareData.shift;
2718
+ const shiftData = state.middlewareData.shift;
2719
+ const noShift = !shiftData;
2612
2720
  let availableHeight = overflowAvailableHeight;
2613
2721
  let availableWidth = overflowAvailableWidth;
2614
- if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {
2722
+ if (shiftData != null && shiftData.enabled.x) {
2615
2723
  availableWidth = maximumClippingWidth;
2616
2724
  }
2617
- if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {
2725
+ if (shiftData != null && shiftData.enabled.y) {
2618
2726
  availableHeight = maximumClippingHeight;
2619
2727
  }
2620
2728
  if (noShift && !alignment) {
2621
- const xMin = max(overflow.left, 0);
2622
- const xMax = max(overflow.right, 0);
2623
- const yMin = max(overflow.top, 0);
2624
- const yMax = max(overflow.bottom, 0);
2625
2729
  if (isYAxis) {
2626
- availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));
2730
+ availableWidth = width - 2 * max(overflow.left, overflow.right);
2627
2731
  } else {
2628
- availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));
2732
+ availableHeight = height - 2 * max(overflow.top, overflow.bottom);
2629
2733
  }
2630
2734
  }
2631
2735
  await apply({
@@ -2781,7 +2885,7 @@ function getParentNode(node) {
2781
2885
  function getNearestOverflowAncestor(node) {
2782
2886
  const parentNode = getParentNode(node);
2783
2887
  if (isLastTraversableNode(parentNode)) {
2784
- return node.ownerDocument ? node.ownerDocument.body : node.body;
2888
+ return (node.ownerDocument || node).body;
2785
2889
  }
2786
2890
  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
2787
2891
  return parentNode;
@@ -2878,10 +2982,7 @@ function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
2878
2982
  if (isFixed === void 0) {
2879
2983
  isFixed = false;
2880
2984
  }
2881
- if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {
2882
- return false;
2883
- }
2884
- return isFixed;
2985
+ return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element);
2885
2986
  }
2886
2987
 
2887
2988
  function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
@@ -2908,12 +3009,12 @@ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetPar
2908
3009
  let y = (clientRect.top + visualOffsets.y) / scale.y;
2909
3010
  let width = clientRect.width / scale.x;
2910
3011
  let height = clientRect.height / scale.y;
2911
- if (domElement) {
3012
+ if (domElement && offsetParent) {
2912
3013
  const win = getWindow(domElement);
2913
- const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
3014
+ const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
2914
3015
  let currentWin = win;
2915
3016
  let currentIFrame = getFrameElement(currentWin);
2916
- while (currentIFrame && offsetParent && offsetWin !== currentWin) {
3017
+ while (currentIFrame && offsetWin !== currentWin) {
2917
3018
  const iframeScale = getScale(currentIFrame);
2918
3019
  const iframeRect = currentIFrame.getBoundingClientRect();
2919
3020
  const css = getComputedStyle$1(currentIFrame);
@@ -2977,7 +3078,7 @@ function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
2977
3078
  let scale = createCoords(1);
2978
3079
  const offsets = createCoords(0);
2979
3080
  const isOffsetParentAnElement = isHTMLElement(offsetParent);
2980
- if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
3081
+ if (isOffsetParentAnElement || !isFixed) {
2981
3082
  if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
2982
3083
  scroll = getNodeScroll(offsetParent);
2983
3084
  }
@@ -2998,18 +3099,17 @@ function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
2998
3099
  }
2999
3100
 
3000
3101
  function getClientRects(element) {
3001
- return Array.from(element.getClientRects());
3102
+ return element.getClientRects ? Array.from(element.getClientRects()) : [];
3002
3103
  }
3003
3104
 
3004
3105
  // Gets the entire size of the scrollable document area, even extending outside
3005
3106
  // of the `<html>` and `<body>` rect bounds if horizontally scrollable.
3006
- function getDocumentRect(element) {
3007
- const html = getDocumentElement(element);
3008
- const scroll = getNodeScroll(element);
3009
- const body = element.ownerDocument.body;
3107
+ function getDocumentRect(html) {
3108
+ const scroll = getNodeScroll(html);
3109
+ const body = html.ownerDocument.body;
3010
3110
  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
3011
3111
  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
3012
- let x = -scroll.scrollLeft + getWindowScrollBarX(element);
3112
+ let x = -scroll.scrollLeft + getWindowScrollBarX(html);
3013
3113
  const y = -scroll.scrollTop;
3014
3114
  if (getComputedStyle$1(body).direction === 'rtl') {
3015
3115
  x += max(html.clientWidth, body.clientWidth) - width;
@@ -3026,7 +3126,11 @@ function getDocumentRect(element) {
3026
3126
  // calculation is affected by unusual styles.
3027
3127
  // Most scrollbars leave 15-18px of space.
3028
3128
  const SCROLLBAR_MAX = 25;
3029
- function getViewportRect(element, strategy) {
3129
+ function getViewportRect(element, strategy, rootBoundary) {
3130
+ if (rootBoundary === void 0) {
3131
+ rootBoundary = 'viewport';
3132
+ }
3133
+ const isLayoutViewport = rootBoundary === 'layoutViewport';
3030
3134
  const win = getWindow(element);
3031
3135
  const html = getDocumentElement(element);
3032
3136
  const visualViewport = win.visualViewport;
@@ -3035,31 +3139,42 @@ function getViewportRect(element, strategy) {
3035
3139
  let x = 0;
3036
3140
  let y = 0;
3037
3141
  if (visualViewport) {
3038
- width = visualViewport.width;
3039
- height = visualViewport.height;
3040
- const visualViewportBased = isWebKit();
3041
- if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {
3042
- x = visualViewport.offsetLeft;
3043
- y = visualViewport.offsetTop;
3142
+ // Client coordinates are relative to the layout viewport, except in
3143
+ // WebKit with an `absolute` strategy, where they are relative to the
3144
+ // visual viewport.
3145
+ const layoutRelativeClientCoords = !isWebKit() || strategy === 'fixed';
3146
+ if (isLayoutViewport) {
3147
+ if (!layoutRelativeClientCoords) {
3148
+ x = -visualViewport.offsetLeft;
3149
+ y = -visualViewport.offsetTop;
3150
+ }
3151
+ } else {
3152
+ width = visualViewport.width;
3153
+ height = visualViewport.height;
3154
+ if (layoutRelativeClientCoords) {
3155
+ x = visualViewport.offsetLeft;
3156
+ y = visualViewport.offsetTop;
3157
+ }
3044
3158
  }
3045
3159
  }
3046
3160
  const windowScrollbarX = getWindowScrollBarX(html);
3047
- // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the
3048
- // visual width of the <html> but this is not considered in the size
3049
- // of `html.clientWidth`.
3161
+ // `scrollbar-gutter: stable` on the <html> reserves gutter space that shrinks
3162
+ // the visual width but isn't reflected in `html.clientWidth`, so subtract it.
3163
+ // Only the inline-end (right) gutter can hold the scrollbar; `both-edges` also
3164
+ // reserves an empty inline-start gutter that clips nothing, so exclude just
3165
+ // the one scrollbar-side gutter — halve the measured (two-gutter) total. A
3166
+ // left-side scrollbar (`windowScrollbarX > 0`) is already handled by
3167
+ // `getHTMLOffset`/`visualViewport.width`; skip it here.
3050
3168
  if (windowScrollbarX <= 0) {
3051
3169
  const doc = html.ownerDocument;
3052
3170
  const body = doc.body;
3053
3171
  const bodyStyles = getComputedStyle(body);
3054
3172
  const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
3055
- const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
3056
- if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {
3057
- width -= clippingStableScrollbarWidth;
3173
+ const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
3174
+ const gutter = getComputedStyle(html).scrollbarGutter === 'stable both-edges' ? reservedWidth / 2 : reservedWidth;
3175
+ if (gutter <= SCROLLBAR_MAX) {
3176
+ width -= gutter;
3058
3177
  }
3059
- } else if (windowScrollbarX <= SCROLLBAR_MAX) {
3060
- // If the <body> scrollbar is on the left, the width needs to be extended
3061
- // by the scrollbar amount so there isn't extra space on the right.
3062
- width += windowScrollbarX;
3063
3178
  }
3064
3179
  return {
3065
3180
  width,
@@ -3074,7 +3189,7 @@ function getInnerBoundingClientRect(element, strategy) {
3074
3189
  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');
3075
3190
  const top = clientRect.top + element.clientTop;
3076
3191
  const left = clientRect.left + element.clientLeft;
3077
- const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
3192
+ const scale = getScale(element);
3078
3193
  const width = element.clientWidth * scale.x;
3079
3194
  const height = element.clientHeight * scale.y;
3080
3195
  const x = left * scale.x;
@@ -3088,8 +3203,8 @@ function getInnerBoundingClientRect(element, strategy) {
3088
3203
  }
3089
3204
  function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
3090
3205
  let rect;
3091
- if (clippingAncestor === 'viewport') {
3092
- rect = getViewportRect(element, strategy);
3206
+ if (clippingAncestor === 'viewport' || clippingAncestor === 'layoutViewport') {
3207
+ rect = getViewportRect(element, strategy, clippingAncestor);
3093
3208
  } else if (clippingAncestor === 'document') {
3094
3209
  rect = getDocumentRect(getDocumentElement(element));
3095
3210
  } else if (isElement(clippingAncestor)) {
@@ -3105,13 +3220,6 @@ function getClientRectFromClippingAncestor(element, clippingAncestor, strategy)
3105
3220
  }
3106
3221
  return rectToClientRect(rect);
3107
3222
  }
3108
- function hasFixedPositionAncestor(element, stopNode) {
3109
- const parentNode = getParentNode(element);
3110
- if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {
3111
- return false;
3112
- }
3113
- return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);
3114
- }
3115
3223
 
3116
3224
  // A "clipping ancestor" is an `overflow` element with the characteristic of
3117
3225
  // clipping (or hiding) child elements. This returns all clipping ancestors
@@ -3122,7 +3230,7 @@ function getClippingElementAncestors(element, cache) {
3122
3230
  return cachedResult;
3123
3231
  }
3124
3232
  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');
3125
- let currentContainingBlockComputedStyle = null;
3233
+ let lastKeptComputedStyle = null;
3126
3234
  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';
3127
3235
  let currentNode = elementIsFixed ? getParentNode(element) : element;
3128
3236
 
@@ -3130,16 +3238,20 @@ function getClippingElementAncestors(element, cache) {
3130
3238
  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
3131
3239
  const computedStyle = getComputedStyle$1(currentNode);
3132
3240
  const currentNodeIsContaining = isContainingBlock(currentNode);
3133
- if (!currentNodeIsContaining && computedStyle.position === 'fixed') {
3134
- currentContainingBlockComputedStyle = null;
3135
- }
3136
- const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
3241
+ // Position of the containing block chain below the current node. A fixed
3242
+ // element whose containing block hasn't been found yet is a fixed chain.
3243
+ const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? 'fixed' : '';
3244
+
3245
+ // A non-containing ancestor does not clip the element when the chain
3246
+ // below it escapes it: a fixed chain escapes all ancestors up to the
3247
+ // next containing block, an absolute chain escapes static ancestors.
3248
+ const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === 'fixed' || lastPosition === 'absolute' && computedStyle.position === 'static');
3137
3249
  if (shouldDropCurrentNode) {
3138
3250
  // Drop non-containing blocks.
3139
3251
  result = result.filter(ancestor => ancestor !== currentNode);
3140
3252
  } else {
3141
- // Record last containing block for next iteration.
3142
- currentContainingBlockComputedStyle = computedStyle;
3253
+ // The kept node carries the chain position for the next iteration.
3254
+ lastKeptComputedStyle = computedStyle;
3143
3255
  }
3144
3256
  currentNode = getParentNode(currentNode);
3145
3257
  }
@@ -3149,7 +3261,7 @@ function getClippingElementAncestors(element, cache) {
3149
3261
 
3150
3262
  // Gets the maximum area that the element is visible in due to any number of
3151
3263
  // clipping ancestors.
3152
- function getClippingRect(_ref) {
3264
+ function getClippingRect$1(_ref) {
3153
3265
  let {
3154
3266
  element,
3155
3267
  boundary,
@@ -3199,13 +3311,7 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
3199
3311
  scrollTop: 0
3200
3312
  };
3201
3313
  const offsets = createCoords(0);
3202
-
3203
- // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
3204
- // Firefox with layout.scrollbar.side = 3 in about:config to test this.
3205
- function setLeftRTLScrollbarOffset() {
3206
- offsets.x = getWindowScrollBarX(documentElement);
3207
- }
3208
- if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
3314
+ if (isOffsetParentAnElement || !isFixed) {
3209
3315
  if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
3210
3316
  scroll = getNodeScroll(offsetParent);
3211
3317
  }
@@ -3213,12 +3319,13 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
3213
3319
  const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
3214
3320
  offsets.x = offsetRect.x + offsetParent.clientLeft;
3215
3321
  offsets.y = offsetRect.y + offsetParent.clientTop;
3216
- } else if (documentElement) {
3217
- setLeftRTLScrollbarOffset();
3218
3322
  }
3219
3323
  }
3220
- if (isFixed && !isOffsetParentAnElement && documentElement) {
3221
- setLeftRTLScrollbarOffset();
3324
+
3325
+ // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
3326
+ // Firefox with layout.scrollbar.side = 3 in about:config to test this.
3327
+ if (!isOffsetParentAnElement && documentElement) {
3328
+ offsets.x = getWindowScrollBarX(documentElement);
3222
3329
  }
3223
3330
  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
3224
3331
  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
@@ -3303,7 +3410,7 @@ function isRTL(element) {
3303
3410
  const platform = {
3304
3411
  convertOffsetParentRelativeRectToViewportRelativeRect,
3305
3412
  getDocumentElement,
3306
- getClippingRect,
3413
+ getClippingRect: getClippingRect$1,
3307
3414
  getOffsetParent,
3308
3415
  getElementRects,
3309
3416
  getClientRects,
@@ -3318,7 +3425,7 @@ function rectsAreEqual(a, b) {
3318
3425
  }
3319
3426
 
3320
3427
  // https://samthor.au/2021/observing-dom/
3321
- function observeMove(element, onMove) {
3428
+ function observeMove(element, onMove, ancestorResize) {
3322
3429
  let io = null;
3323
3430
  let timeoutId;
3324
3431
  const root = getDocumentElement(element);
@@ -3361,13 +3468,22 @@ function observeMove(element, onMove) {
3361
3468
  let isFirstUpdate = true;
3362
3469
  function handleObserve(entries) {
3363
3470
  const ratio = entries[0].intersectionRatio;
3471
+
3472
+ // The entry is a snapshot, so the reference may have moved since the
3473
+ // intersection was computed (under performance constraints, or between
3474
+ // consecutive frames of a multi-frame layout shift). The reported ratio
3475
+ // and the observed area are stale in that case and cannot be trusted to
3476
+ // detect subsequent movement, so refresh regardless of the ratio.
3477
+ if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
3478
+ return refresh();
3479
+ }
3364
3480
  if (ratio !== threshold) {
3365
3481
  if (!isFirstUpdate) {
3366
3482
  return refresh();
3367
3483
  }
3368
3484
  if (!ratio) {
3369
- // If the reference is clipped, the ratio is 0. Throttle the refresh
3370
- // to prevent an infinite loop of updates.
3485
+ // If the reference is clipped in place, the ratio is 0. Throttle
3486
+ // the refresh to prevent an infinite loop of updates.
3371
3487
  timeoutId = setTimeout(() => {
3372
3488
  refresh(false, 1e-7);
3373
3489
  }, 1000);
@@ -3375,16 +3491,6 @@ function observeMove(element, onMove) {
3375
3491
  refresh(false, ratio);
3376
3492
  }
3377
3493
  }
3378
- if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
3379
- // It's possible that even though the ratio is reported as 1, the
3380
- // element is not actually fully within the IntersectionObserver's root
3381
- // area anymore. This can happen under performance constraints. This may
3382
- // be a bug in the browser's IntersectionObserver implementation. To
3383
- // work around this, we compare the element's bounding rect now with
3384
- // what it was at the time we created the IntersectionObserver. If they
3385
- // are not equal then the element moved, so we refresh.
3386
- refresh();
3387
- }
3388
3494
  isFirstUpdate = false;
3389
3495
  }
3390
3496
 
@@ -3401,8 +3507,18 @@ function observeMove(element, onMove) {
3401
3507
  }
3402
3508
  io.observe(element);
3403
3509
  }
3510
+ const win = getWindow(element);
3511
+ // The window is a resize ancestor, so when `ancestorResize` is enabled its
3512
+ // listener already runs the update on resize. Here we only need to rebuild
3513
+ // the `IntersectionObserver` for the new root size, skipping a redundant
3514
+ // update. When `ancestorResize` is disabled, this becomes the sole update.
3515
+ const handleResize = () => refresh(ancestorResize);
3516
+ win.addEventListener('resize', handleResize);
3404
3517
  refresh(true);
3405
- return cleanup;
3518
+ return () => {
3519
+ win.removeEventListener('resize', handleResize);
3520
+ cleanup();
3521
+ };
3406
3522
  }
3407
3523
 
3408
3524
  /**
@@ -3427,12 +3543,10 @@ function autoUpdate(reference, floating, update, options) {
3427
3543
  const referenceEl = unwrapElement(reference);
3428
3544
  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];
3429
3545
  ancestors.forEach(ancestor => {
3430
- ancestorScroll && ancestor.addEventListener('scroll', update, {
3431
- passive: true
3432
- });
3546
+ ancestorScroll && ancestor.addEventListener('scroll', update);
3433
3547
  ancestorResize && ancestor.addEventListener('resize', update);
3434
3548
  });
3435
- const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;
3549
+ const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update, ancestorResize) : null;
3436
3550
  let reobserveFrame = -1;
3437
3551
  let resizeObserver = null;
3438
3552
  if (elementResize) {
@@ -3518,6 +3632,13 @@ const flip = flip$1;
3518
3632
  */
3519
3633
  const size = size$1;
3520
3634
 
3635
+ /**
3636
+ * Provides data to hide the floating element in applicable situations, such as
3637
+ * when it is not in the same clipping context as the reference element.
3638
+ * @see https://floating-ui.com/docs/hide
3639
+ */
3640
+ const hide = hide$1;
3641
+
3521
3642
  /**
3522
3643
  * Provides data to position an inner element of the floating element so that it
3523
3644
  * appears centered to the reference element.
@@ -3546,11 +3667,9 @@ const computePosition = (reference, floating, options) => {
3546
3667
  // multiple lifecycle resets re-use the same result. It only lives for a
3547
3668
  // single call. If other functions become expensive, we can add them as well.
3548
3669
  const cache = new Map();
3549
- const mergedOptions = {
3550
- platform,
3551
- ...options
3552
- };
3670
+ const mergedOptions = options != null ? options : {};
3553
3671
  const platformWithCache = {
3672
+ ...platform,
3554
3673
  ...mergedOptions.platform,
3555
3674
  _c: cache
3556
3675
  };
@@ -4367,6 +4486,77 @@ function apply() {
4367
4486
  injectStyles(document);
4368
4487
  }
4369
4488
 
4489
+ /**
4490
+ * This utility is covered by the end-to-end tests under 'clipping' in `popovercontainer.cy.ts`.
4491
+ */
4492
+ const CLIPPING_RECT_CACHE = Symbol('Clipping Rect Cache');
4493
+ /**
4494
+ * A custom floating UI platform that restricts clipping rectangles to the safe area.
4495
+ */
4496
+ const safeAreaPlatform = { ...platform, getClippingRect };
4497
+ /**
4498
+ * Computes the clipping rectangle of an element while accounting for the safe area.
4499
+ */
4500
+ async function getClippingRect(...args) {
4501
+ const element = args[0].element;
4502
+ // Check whether the clipping rectangle of the given element has already been computed during
4503
+ // this pass.
4504
+ const hit = this[CLIPPING_RECT_CACHE].get(element);
4505
+ if (hit)
4506
+ return hit;
4507
+ // Compute the clipping rectangle with the Floating UI DOM platform, then restrict it to the safe
4508
+ // area.
4509
+ const clippingRect = await platform.getClippingRect.apply(this, args);
4510
+ applySafeArea(clippingRect, element);
4511
+ this[CLIPPING_RECT_CACHE].set(element, clippingRect);
4512
+ return clippingRect;
4513
+ }
4514
+ /**
4515
+ * Restricts the `clippingRect` computed for `element` to the safe area, modifying it in place.
4516
+ *
4517
+ * The safe area only applies to elements that the header can actually cover, which excludes
4518
+ * elements without a header on their page, elements on a top layer and elements within the header.
4519
+ */
4520
+ function applySafeArea(clippingRect, element) {
4521
+ const headerElement = element.ownerDocument.querySelector('post-header');
4522
+ if (headerElement === null)
4523
+ return;
4524
+ let parent = element;
4525
+ while (!isLastTraversableNode(parent)) {
4526
+ parent = getParentNode(parent);
4527
+ if (!isHTMLElement(parent))
4528
+ continue;
4529
+ // Do not apply the safe area of the header to
4530
+ // - elements that are on a top layer, such as a dialog.
4531
+ // - elements that are located within the header itself.
4532
+ if (isTopLayer(parent) || parent === headerElement)
4533
+ return;
4534
+ }
4535
+ const headerRect = headerElement.getBoundingClientRect();
4536
+ const top = Math.max(clippingRect.y, headerRect.bottom);
4537
+ clippingRect.height -= top - clippingRect.y;
4538
+ clippingRect.y = top;
4539
+ }
4540
+ /**
4541
+ * Computes the coordinates that will position the `floating` element next to a given `reference`
4542
+ * element while accounting for the safe area.
4543
+ *
4544
+ * The safe area is the part of the viewport that the header does not cover. Restricting the
4545
+ * clipping rectangles to it makes floating elements behave as if they were clipped by the header.
4546
+ */
4547
+ const computePositionWithSafeArea = (reference, floating, options) => {
4548
+ // Adapted from https://github.com/floating-ui/floating-ui/blob/27629b74ba36ab8ceb2a968051927b9b69511a3b/packages/dom/src/index.ts#L15
4549
+ options ?? (options = {});
4550
+ return computePosition(reference, floating, {
4551
+ ...options,
4552
+ platform: {
4553
+ ...safeAreaPlatform,
4554
+ ...options.platform,
4555
+ [CLIPPING_RECT_CACHE]: new Map(),
4556
+ },
4557
+ });
4558
+ };
4559
+
4370
4560
  const postPopovercontainerCss = () => `@layer polyfill{@supports not selector(:popover-open){:host([popover]:not(.\\:popover-open)){display:none}}}:host{background-color:rgba(0,0,0,0);border:rgba(0,0,0,0);position:fixed;margin:0;padding:0;overflow:visible}:host>div{box-shadow:var(--post-device-elevation-300);width:max-content;max-width:100%;color:var(--post-current-fg);background-color:var(--post-current-bg);border-radius:4px;position:relative}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){:host>div{border:2px solid rgba(0,0,0,0)}}:host [part=post-popovercontainer-border-mask]{display:none;position:absolute;inset:0;border-radius:4px;pointer-events:none}:host .arrow{--post-popovercontainer-arrow-border: var(--post-popovercontainer-arrow-border-width, 0px) solid var(--post-popovercontainer-arrow-border-color, transparent);position:absolute;width:.5825rem;height:.5825rem;background-color:inherit;rotate:45deg;pointer-events:none;z-index:-1}:host .arrow[dynamic-placement=top]{border-bottom-right-radius:2px;border-bottom:var(--post-popovercontainer-arrow-border);border-right:var(--post-popovercontainer-arrow-border)}:host .arrow[dynamic-placement=right]{border-bottom-left-radius:2px;border-bottom:var(--post-popovercontainer-arrow-border);border-left:var(--post-popovercontainer-arrow-border)}:host .arrow[dynamic-placement=bottom]{border-top-left-radius:2px;border-top:var(--post-popovercontainer-arrow-border);border-left:var(--post-popovercontainer-arrow-border)}:host .arrow[dynamic-placement=left]{border-top-right-radius:2px;border-top:var(--post-popovercontainer-arrow-border);border-right:var(--post-popovercontainer-arrow-border)}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){:host .arrow[dynamic-placement=top]{border-block-end:2px solid rgba(0,0,0,0);border-inline-end:2px solid rgba(0,0,0,0);bottom:-0.3796735336rem !important}:host .arrow[dynamic-placement=left]{border-block-start:2px solid rgba(0,0,0,0);border-inline-end:2px solid rgba(0,0,0,0);right:-0.3796735336rem !important}:host .arrow[dynamic-placement=right]{border-block-end:2px solid rgba(0,0,0,0);border-inline-start:2px solid rgba(0,0,0,0);left:-0.3796735336rem !important}:host .arrow[dynamic-placement=bottom]{border-block-start:2px solid rgba(0,0,0,0);border-inline-start:2px solid rgba(0,0,0,0);top:-0.3796735336rem !important}}:host([tooltip]){position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0}:host([safe-space])::after{content:"";position:fixed;inset:0;z-index:-1;pointer-events:auto}:host([safe-space=triangle])::after{clip-path:polygon(var(--post-safe-space-cursor-x, 0) var(--post-safe-space-cursor-y, 0), var(--post-safe-space-popover-x-start, var(--post-safe-space-popover-x, 0)) var(--post-safe-space-popover-y, var(--post-safe-space-popover-y-start, 0)), var(--post-safe-space-popover-x-end, var(--post-safe-space-popover-x, 0)) var(--post-safe-space-popover-y, var(--post-safe-space-popover-y-end, 0)))}:host([safe-space=trapezoid])::after{clip-path:polygon(var(--post-safe-space-trigger-x-start, var(--post-safe-space-trigger-x, 0)) var(--post-safe-space-trigger-y, var(--post-safe-space-trigger-y-start, 0)), var(--post-safe-space-trigger-x-end, var(--post-safe-space-trigger-x, 0)) var(--post-safe-space-trigger-y, var(--post-safe-space-trigger-y-end, 0)), var(--post-safe-space-popover-x-end, var(--post-safe-space-popover-x, 0)) var(--post-safe-space-popover-y, var(--post-safe-space-popover-y-end, 0)), var(--post-safe-space-popover-x-start, var(--post-safe-space-popover-x, 0)) var(--post-safe-space-popover-y, var(--post-safe-space-popover-y-start, 0)))}:host(:not(:has(.arrow)))>div{box-shadow:var(--post-device-elevation-300)}:host(:has(.arrow))>div{filter:drop-shadow(1px 2px 3px hsla(216, 9%, 11%, 0.15)) drop-shadow(2px 4px 6px hsla(225, 17%, 9%, 0.15)) drop-shadow(4px 8px 12px hsla(225, 7%, 11%, 0.15))}:host(:has(.arrow[dynamic-placement=top]))>div{filter:drop-shadow(0px -2px 3px hsla(216, 9%, 11%, 0.15)) drop-shadow(0px -4px 6px hsla(225, 17%, 9%, 0.15)) drop-shadow(0px -8px 12px hsla(225, 7%, 11%, 0.15))}:host(:has(.arrow[dynamic-placement=left]))>div{filter:drop-shadow(-2px 0px 3px hsla(216, 9%, 11%, 0.15)) drop-shadow(-4px 0px 6px hsla(225, 17%, 9%, 0.15)) drop-shadow(-8px 0px 12px hsla(225, 7%, 11%, 0.15))}:host(:has(.arrow[dynamic-placement=right]))>div{filter:drop-shadow(2px 0px 3px hsla(216, 9%, 11%, 0.15)) drop-shadow(4px 0px 6px hsla(225, 17%, 9%, 0.15)) drop-shadow(8px 0px 12px hsla(225, 7%, 11%, 0.15))}`;
4371
4561
 
4372
4562
  var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
@@ -4444,7 +4634,7 @@ const PostPopovercontainer = class {
4444
4634
  if (this.toggleTimeoutId || !target)
4445
4635
  return;
4446
4636
  this.eventTarget = target;
4447
- this.calculatePosition();
4637
+ this.updatePosition();
4448
4638
  this.host.showPopover();
4449
4639
  }
4450
4640
  /**
@@ -4470,7 +4660,7 @@ const PostPopovercontainer = class {
4470
4660
  this.eventTarget = target;
4471
4661
  // Prevent instant double toggle
4472
4662
  if (!this.toggleTimeoutId) {
4473
- this.calculatePosition();
4663
+ this.updatePosition();
4474
4664
  this.host.togglePopover(force);
4475
4665
  this.toggleTimeoutId = null;
4476
4666
  }
@@ -4582,17 +4772,14 @@ const PostPopovercontainer = class {
4582
4772
  startAutoupdates() {
4583
4773
  if (!this.eventTarget || !this.host)
4584
4774
  return;
4585
- this.clearAutoUpdate = autoUpdate(this.eventTarget, this.host, this.calculatePosition.bind(this));
4586
- }
4587
- /**
4588
- * Retrieves the dynamic height of the header
4589
- */
4590
- getHeaderHeight() {
4591
- const header = document.querySelector('post-header');
4592
- return header ? Number.parseFloat(getComputedStyle(header).height) : 0;
4775
+ this.clearAutoUpdate = autoUpdate(this.eventTarget, this.host, this.updatePosition.bind(this));
4593
4776
  }
4594
- async calculatePosition() {
4595
- const { x, y, middlewareData, placement } = await this.computeMainPosition();
4777
+ async updatePosition() {
4778
+ const { x, y, middlewareData, placement } = await this.calculatePosition();
4779
+ // Hide the popover if the target is outside the viewport
4780
+ if (middlewareData.hide?.referenceHidden) {
4781
+ this.host.hidePopover();
4782
+ }
4596
4783
  const currentPlacement = placement.split('-')[0];
4597
4784
  this.dynamicPlacement = currentPlacement;
4598
4785
  // Position popover
@@ -4617,13 +4804,15 @@ const PostPopovercontainer = class {
4617
4804
  await this.updateSafeSpaceBoundaries(currentPlacement);
4618
4805
  }
4619
4806
  }
4620
- async computeMainPosition() {
4807
+ async calculatePosition() {
4621
4808
  const gap = this.edgeGap;
4622
4809
  const isAligned = (this.placement || 'top').includes('-');
4623
- const flipMiddleware = flip({
4624
- padding: this.getHeaderHeight(),
4625
- crossAxis: false,
4626
- });
4810
+ const flipMiddleware = [
4811
+ // Flip the popover if the target moves outside the viewport
4812
+ flip({ elementContext: 'reference', crossAxis: false }),
4813
+ // Flip the popover if the popover itself moves outside the viewport
4814
+ flip({ elementContext: 'floating', crossAxis: false }),
4815
+ ];
4627
4816
  const shiftMiddleware = shift({
4628
4817
  padding: gap,
4629
4818
  limiter: limitShift({
@@ -4635,7 +4824,7 @@ const PostPopovercontainer = class {
4635
4824
  inline(),
4636
4825
  // Per floating-ui docs: for aligned placements (e.g. bottom-end),
4637
4826
  // flip should come before shift. For non-aligned, shift before flip.
4638
- ...(isAligned ? [flipMiddleware, shiftMiddleware] : [shiftMiddleware, flipMiddleware]),
4827
+ ...(isAligned ? [...flipMiddleware, shiftMiddleware] : [shiftMiddleware, ...flipMiddleware]),
4639
4828
  size({
4640
4829
  apply({ availableWidth, elements }) {
4641
4830
  Object.assign(elements.floating.style, {
@@ -4647,7 +4836,12 @@ const PostPopovercontainer = class {
4647
4836
  if (this.arrow) {
4648
4837
  middleware.push(arrow({ element: this.arrowRef, padding: gap }));
4649
4838
  }
4650
- return computePosition(this.eventTarget, this.host, {
4839
+ // Automatically hide the popover if the target moves outside the scrollport.
4840
+ if (this.autoHide) {
4841
+ // Per floating-ui docs: hide should generally be placed at the end.
4842
+ middleware.push(hide({ strategy: 'referenceHidden' }));
4843
+ }
4844
+ return computePositionWithSafeArea(this.eventTarget, this.host, {
4651
4845
  placement: this.placement || 'top',
4652
4846
  strategy: 'fixed',
4653
4847
  middleware,
@@ -4714,9 +4908,9 @@ const PostPopovercontainer = class {
4714
4908
  }
4715
4909
  }
4716
4910
  render() {
4717
- return (index.h(index.Host, { key: 'bffef7c8067f21aa99c45deaaf2bc122ea455191', "data-version": _package.version, popover: "auto" }, index.h("div", { key: '023339edd5b36827e0051179bee464236bccc62a', part: "post-popovercontainer-content", class: "popover-content" }, this.arrow && (index.h("span", { key: 'ae921c38aa8c33ad8b37453a56d22ee7b4b9950c', "dynamic-placement": this.dynamicPlacement, class: "arrow", ref: el => {
4911
+ return (index.h(index.Host, { key: 'a6f41ad3ef982f9e9ec0d6450837d1cfdca73d16', "data-version": _package.version, popover: "auto" }, index.h("div", { key: '40afab436d5550fda44c8995139080161eab5b09', part: "post-popovercontainer-content", class: "popover-content" }, this.arrow && (index.h("span", { key: '580bd8fcaecb89334aca05001137a4d7cccd254a', "dynamic-placement": this.dynamicPlacement, class: "arrow", ref: el => {
4718
4912
  this.arrowRef = el;
4719
- } })), index.h("span", { key: 'f7c2720a3bedb808855628482c5b1f377e2719a8', part: "post-popovercontainer-border-mask" }), index.h("slot", { key: 'e0fee3fded9fea41bc0260f45be0375e236463f9' }))));
4913
+ } })), index.h("span", { key: '61a6e4e8026832afc188edd5a74535716db65945', part: "post-popovercontainer-border-mask" }), index.h("slot", { key: 'd79cb69a77dbba13ffa3c30e0393db4f3a669a12' }))));
4720
4914
  }
4721
4915
  get host() { return index.getElement(this); }
4722
4916
  };
@@ -4780,7 +4974,7 @@ const PostTogglebutton = class {
4780
4974
  });
4781
4975
  }
4782
4976
  render() {
4783
- return (index.h(index.Host, { key: '7b935b808aa1ebbe97ac37bed25bfc215513097f', "data-version": _package.version, role: "button", tabindex: "0", "aria-pressed": this.toggled.toString() }, index.h("slot", { key: 'd06f112049850f8d7bdffd5e0b70440bae41010b' })));
4977
+ return (index.h(index.Host, { key: 'ae46e9fcd82766abcf76c4b37d0341cfd29f2f4f', "data-version": _package.version, role: "button", tabindex: "0", "aria-pressed": this.toggled.toString() }, index.h("slot", { key: '9c71c065225f0f5c68e76fa2cec6d75bdf29fed0' })));
4784
4978
  }
4785
4979
  get host() { return index.getElement(this); }
4786
4980
  };