@swisspost/design-system-components 9.0.0-next.18 → 9.0.0-next.19

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 (257) hide show
  1. package/dist/cjs/{check-url-1ff4cf75.js → check-url-4c524d85.js} +1 -1
  2. package/dist/cjs/{index-f2eedfeb.js → index-d4222dcb.js} +1 -1
  3. package/dist/cjs/index.cjs.js +22 -22
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/{package-5e20c234.js → package-1403e51d.js} +1 -1
  6. package/dist/cjs/{post-accordion-75c0c474.js → post-accordion-e84c9d23.js} +1 -1
  7. package/dist/cjs/{post-accordion-item-1157ea24.js → post-accordion-item-d1ef00c3.js} +3 -3
  8. package/dist/cjs/post-accordion-item.cjs.entry.js +4 -4
  9. package/dist/cjs/post-accordion.cjs.entry.js +2 -2
  10. package/dist/cjs/{post-avatar-35dcad67.js → post-avatar-7a8860df.js} +1 -1
  11. package/dist/cjs/post-avatar.cjs.entry.js +2 -2
  12. package/dist/cjs/{post-back-to-top-4de4041e.js → post-back-to-top-6c7057f9.js} +2 -2
  13. package/dist/cjs/post-back-to-top.cjs.entry.js +2 -2
  14. package/dist/cjs/{post-banner-2114b7e3.js → post-banner-ecc46714.js} +3 -3
  15. package/dist/cjs/post-banner.cjs.entry.js +4 -4
  16. package/dist/cjs/{post-breadcrumb-5bfcf477.js → post-breadcrumb-dbb85db9.js} +2 -2
  17. package/dist/cjs/post-breadcrumb-item_2.cjs.entry.js +4 -4
  18. package/dist/cjs/post-breadcrumb.cjs.entry.js +3 -3
  19. package/dist/cjs/{post-card-control-404ee898.js → post-card-control-76f6a5b3.js} +1 -1
  20. package/dist/cjs/post-card-control.cjs.entry.js +2 -2
  21. package/dist/cjs/post-closebutton_15.cjs.entry.js +4 -4
  22. package/dist/cjs/{post-collapsible-trigger-476cb22d.js → post-collapsible-trigger-8b242323.js} +2 -2
  23. package/dist/cjs/post-collapsible_2.cjs.entry.js +4 -4
  24. package/dist/cjs/post-components.cjs.js +1 -1
  25. package/dist/cjs/{post-footer-4318962c.js → post-footer-eeec84e0.js} +1 -1
  26. package/dist/cjs/post-footer.cjs.entry.js +2 -2
  27. package/dist/cjs/post-linkarea-61dbfe5d.js +30 -0
  28. package/dist/cjs/post-linkarea.cjs.entry.js +2 -2
  29. package/dist/cjs/{post-menu-item-bce515b2.js → post-menu-item-12639f7c.js} +2 -2
  30. package/dist/cjs/{post-popover-5363267c.js → post-popover-9569b144.js} +2 -2
  31. package/dist/cjs/post-popover.cjs.entry.js +2 -2
  32. package/dist/cjs/{post-rating-a3f7c5df.js → post-rating-5645cae4.js} +2 -2
  33. package/dist/cjs/post-rating.cjs.entry.js +2 -2
  34. package/dist/cjs/{post-tab-header-68fcb0ed.js → post-tab-header-82e8ccd0.js} +3 -3
  35. package/dist/cjs/post-tab-header.cjs.entry.js +2 -2
  36. package/dist/cjs/{post-tab-panel-909efe62.js → post-tab-panel-ef3df53e.js} +2 -2
  37. package/dist/cjs/post-tab-panel.cjs.entry.js +2 -2
  38. package/dist/cjs/{post-tabs-8515f7a8.js → post-tabs-8f1e74d9.js} +2 -2
  39. package/dist/cjs/post-tabs.cjs.entry.js +2 -2
  40. package/dist/cjs/{post-tag-f66f6506.js → post-tag-c353e30c.js} +2 -2
  41. package/dist/cjs/post-tag.cjs.entry.js +2 -2
  42. package/dist/cjs/{post-togglebutton-c773c4f5.js → post-togglebutton-8949d278.js} +341 -171
  43. package/dist/cjs/{post-tooltip-dc0fef88.js → post-tooltip-cf18ac29.js} +4 -4
  44. package/dist/cjs/post-tooltip.cjs.entry.js +4 -4
  45. package/dist/collection/components/post-accordion-item/post-accordion-item.css +1 -1
  46. package/dist/collection/components/post-back-to-top/post-back-to-top.css +1 -1
  47. package/dist/collection/components/post-banner/post-banner.css +1 -1
  48. package/dist/collection/components/post-header/post-header.css +1 -1
  49. package/dist/collection/components/post-header/post-header.js +10 -2
  50. package/dist/collection/components/post-icon/post-icon.js +41 -37
  51. package/dist/collection/components/post-language-option/post-language-option.css +1 -1
  52. package/dist/collection/components/post-language-option/post-language-option.js +1 -25
  53. package/dist/collection/components/post-language-switch/post-language-switch.css +1 -1
  54. package/dist/collection/components/post-language-switch/post-language-switch.js +8 -40
  55. package/dist/collection/components/post-language-switch/switch-variants.js +0 -1
  56. package/dist/collection/components/post-linkarea/post-linkarea.js +12 -14
  57. package/dist/collection/components/post-list/post-list.js +2 -2
  58. package/dist/collection/components/post-mainnavigation/post-mainnavigation.css +1 -1
  59. package/dist/collection/components/post-mainnavigation/post-mainnavigation.js +55 -34
  60. package/dist/collection/components/post-megadropdown/post-megadropdown.css +1 -1
  61. package/dist/collection/components/post-megadropdown/post-megadropdown.js +64 -21
  62. package/dist/collection/components/post-megadropdown-trigger/post-megadropdown-trigger.js +24 -2
  63. package/dist/collection/components/post-menu/post-menu.js +17 -13
  64. package/dist/collection/components/post-menu-trigger/post-menu-trigger.js +13 -7
  65. package/dist/collection/components/post-popover/post-popover.css +1 -1
  66. package/dist/collection/components/post-popovercontainer/post-popovercontainer.css +1 -1
  67. package/dist/collection/components/post-popovercontainer/post-popovercontainer.js +141 -33
  68. package/dist/collection/components/post-rating/post-rating.js +1 -1
  69. package/dist/collection/components/post-tab-header/post-tab-header.css +1 -1
  70. package/dist/collection/components/post-tab-header/post-tab-header.js +1 -1
  71. package/dist/collection/components/post-tab-panel/post-tab-panel.js +1 -1
  72. package/dist/collection/components/post-tabs/post-tabs.js +1 -1
  73. package/dist/collection/components/post-tag/post-tag.js +1 -1
  74. package/dist/collection/components/post-togglebutton/post-togglebutton.js +1 -1
  75. package/dist/collection/components/post-tooltip/post-tooltip.css +1 -1
  76. package/dist/collection/components/post-tooltip/post-tooltip.js +1 -1
  77. package/dist/collection/utils/property-checkers/check-url.js +1 -1
  78. package/dist/components/index2.js +1 -1
  79. package/dist/components/package.js +1 -1
  80. package/dist/components/post-accordion-item2.js +1 -1
  81. package/dist/components/post-back-to-top2.js +1 -1
  82. package/dist/components/post-banner2.js +1 -1
  83. package/dist/components/post-header2.js +11 -3
  84. package/dist/components/post-icon2.js +41 -37
  85. package/dist/components/post-language-option2.js +2 -4
  86. package/dist/components/post-language-switch2.js +10 -19
  87. package/dist/components/post-linkarea2.js +11 -13
  88. package/dist/components/post-list2.js +2 -2
  89. package/dist/components/post-mainnavigation2.js +57 -36
  90. package/dist/components/post-megadropdown-trigger2.js +24 -2
  91. package/dist/components/post-megadropdown2.js +42 -19
  92. package/dist/components/post-menu-trigger2.js +13 -7
  93. package/dist/components/post-menu2.js +17 -13
  94. package/dist/components/post-popover2.js +1 -1
  95. package/dist/components/post-popovercontainer2.js +125 -33
  96. package/dist/components/post-rating2.js +1 -1
  97. package/dist/components/post-tab-header2.js +2 -2
  98. package/dist/components/post-tab-panel2.js +1 -1
  99. package/dist/components/post-tabs2.js +1 -1
  100. package/dist/components/post-tag2.js +1 -1
  101. package/dist/components/post-togglebutton2.js +1 -1
  102. package/dist/components/post-tooltip2.js +2 -2
  103. package/dist/docs.json +69 -79
  104. package/dist/esm/{check-url-8ab230de.js → check-url-f84034b1.js} +1 -1
  105. package/dist/esm/{index-0aec278f.js → index-1b263a63.js} +1 -1
  106. package/dist/esm/index.js +22 -22
  107. package/dist/esm/loader.js +1 -1
  108. package/dist/esm/package-21cb9eb8.js +3 -0
  109. package/dist/esm/{post-accordion-e5330c72.js → post-accordion-db14e23a.js} +1 -1
  110. package/dist/esm/{post-accordion-item-4e13a044.js → post-accordion-item-c1f42c05.js} +3 -3
  111. package/dist/esm/post-accordion-item.entry.js +4 -4
  112. package/dist/esm/post-accordion.entry.js +2 -2
  113. package/dist/esm/{post-avatar-d6612e0e.js → post-avatar-ccda94eb.js} +1 -1
  114. package/dist/esm/post-avatar.entry.js +2 -2
  115. package/dist/esm/{post-back-to-top-d5b3d5f5.js → post-back-to-top-f038d599.js} +2 -2
  116. package/dist/esm/post-back-to-top.entry.js +2 -2
  117. package/dist/esm/{post-banner-ae45a03b.js → post-banner-a24ccf11.js} +3 -3
  118. package/dist/esm/post-banner.entry.js +4 -4
  119. package/dist/esm/{post-breadcrumb-c7caf609.js → post-breadcrumb-e3e4b50c.js} +2 -2
  120. package/dist/esm/post-breadcrumb-item_2.entry.js +4 -4
  121. package/dist/esm/post-breadcrumb.entry.js +3 -3
  122. package/dist/esm/{post-card-control-c51f4406.js → post-card-control-0a4497d8.js} +1 -1
  123. package/dist/esm/post-card-control.entry.js +2 -2
  124. package/dist/esm/post-closebutton_15.entry.js +4 -4
  125. package/dist/esm/{post-collapsible-trigger-e086c018.js → post-collapsible-trigger-6b0253d8.js} +2 -2
  126. package/dist/esm/post-collapsible_2.entry.js +4 -4
  127. package/dist/esm/post-components.js +1 -1
  128. package/dist/esm/{post-footer-fac4e9a3.js → post-footer-fa4a2a32.js} +1 -1
  129. package/dist/esm/post-footer.entry.js +2 -2
  130. package/dist/esm/post-linkarea-1458faa8.js +28 -0
  131. package/dist/esm/post-linkarea.entry.js +2 -2
  132. package/dist/esm/{post-menu-item-bdfe59ae.js → post-menu-item-b9af8b46.js} +2 -2
  133. package/dist/esm/{post-popover-15208f18.js → post-popover-425eb5c9.js} +2 -2
  134. package/dist/esm/post-popover.entry.js +2 -2
  135. package/dist/esm/{post-rating-261def37.js → post-rating-4057a5b5.js} +2 -2
  136. package/dist/esm/post-rating.entry.js +2 -2
  137. package/dist/esm/{post-tab-header-f2e84ba5.js → post-tab-header-602eb0cb.js} +3 -3
  138. package/dist/esm/post-tab-header.entry.js +2 -2
  139. package/dist/esm/{post-tab-panel-389e0709.js → post-tab-panel-fccea5b6.js} +2 -2
  140. package/dist/esm/post-tab-panel.entry.js +2 -2
  141. package/dist/esm/{post-tabs-79ea5b62.js → post-tabs-b9f41051.js} +2 -2
  142. package/dist/esm/post-tabs.entry.js +2 -2
  143. package/dist/esm/{post-tag-887d422c.js → post-tag-54b70906.js} +2 -2
  144. package/dist/esm/post-tag.entry.js +2 -2
  145. package/dist/esm/{post-togglebutton-70b0f44e.js → post-togglebutton-f6746062.js} +341 -171
  146. package/dist/esm/{post-tooltip-1be020fd.js → post-tooltip-eccf3d93.js} +4 -4
  147. package/dist/esm/post-tooltip.entry.js +4 -4
  148. package/dist/post-components/index.esm.js +1 -1
  149. package/dist/post-components/p-0337eb03.entry.js +1 -0
  150. package/dist/post-components/p-0470d5af.entry.js +1 -0
  151. package/dist/post-components/p-07b75b18.entry.js +1 -0
  152. package/dist/post-components/{p-5171e02f.js → p-0d879e8b.js} +1 -1
  153. package/dist/post-components/{p-6c3ac622.js → p-0f6fee8f.js} +1 -1
  154. package/dist/post-components/p-114bb8ba.js +1 -0
  155. package/dist/post-components/{p-99502c06.js → p-18fa847f.js} +1 -1
  156. package/dist/post-components/{p-fb8f5195.js → p-1c1a614d.js} +1 -1
  157. package/dist/post-components/p-202156ad.js +1 -0
  158. package/dist/post-components/p-2f5425e2.entry.js +1 -0
  159. package/dist/post-components/p-39586235.js +1 -0
  160. package/dist/post-components/p-3b1c2b8a.entry.js +1 -0
  161. package/dist/post-components/{p-5f1f7b49.js → p-46accc5f.js} +1 -1
  162. package/dist/post-components/{p-eb8b3ffa.js → p-470c7464.js} +1 -1
  163. package/dist/post-components/{p-9b179f0f.js → p-509fc6e6.js} +1 -1
  164. package/dist/post-components/{p-898d9196.js → p-541c7be9.js} +2 -2
  165. package/dist/post-components/p-54c98790.js +1 -0
  166. package/dist/post-components/p-5afa25c7.entry.js +1 -0
  167. package/dist/post-components/{p-a2ae208a.js → p-5b1c57d5.js} +1 -1
  168. package/dist/post-components/p-5cf79fe3.entry.js +1 -0
  169. package/dist/post-components/p-5d9c1fc3.entry.js +1 -0
  170. package/dist/post-components/p-608ba689.entry.js +1 -0
  171. package/dist/post-components/p-64776810.entry.js +1 -0
  172. package/dist/post-components/{p-bff8004e.js → p-6651164c.js} +1 -1
  173. package/dist/post-components/p-7085e0e7.entry.js +1 -0
  174. package/dist/post-components/{p-76257bba.entry.js → p-7bf39758.entry.js} +1 -1
  175. package/dist/post-components/p-7dc1ccf0.entry.js +1 -0
  176. package/dist/post-components/p-81eac2e5.entry.js +1 -0
  177. package/dist/post-components/p-8a31b2fc.entry.js +1 -0
  178. package/dist/post-components/p-8e7e9942.entry.js +1 -0
  179. package/dist/post-components/p-a24bf798.js +1 -0
  180. package/dist/post-components/p-a621090d.js +1 -0
  181. package/dist/post-components/p-a926c755.js +1 -0
  182. package/dist/post-components/{p-e7bec3de.js → p-b27b7d03.js} +1 -1
  183. package/dist/post-components/{p-74122649.js → p-b8100b63.js} +1 -1
  184. package/dist/post-components/p-c48553bd.entry.js +1 -0
  185. package/dist/post-components/{p-dc8af283.js → p-cb472e20.js} +1 -1
  186. package/dist/post-components/p-cea81e00.entry.js +1 -0
  187. package/dist/post-components/p-d2d2681a.js +1 -0
  188. package/dist/post-components/{p-ce34c58e.js → p-d8b179fb.js} +1 -1
  189. package/dist/post-components/p-f405f29e.entry.js +1 -0
  190. package/dist/post-components/post-components.esm.js +1 -1
  191. package/dist/types/components/post-header/post-header.d.ts +1 -0
  192. package/dist/types/components/post-icon/post-icon.d.ts +5 -0
  193. package/dist/types/components/post-language-option/post-language-option.d.ts +1 -5
  194. package/dist/types/components/post-language-switch/post-language-switch.d.ts +2 -7
  195. package/dist/types/components/post-language-switch/switch-variants.d.ts +0 -2
  196. package/dist/types/components/post-linkarea/post-linkarea.d.ts +2 -2
  197. package/dist/types/components/post-mainnavigation/post-mainnavigation.d.ts +2 -5
  198. package/dist/types/components/post-megadropdown/post-megadropdown.d.ts +12 -5
  199. package/dist/types/components/post-megadropdown-trigger/post-megadropdown-trigger.d.ts +6 -0
  200. package/dist/types/components/post-menu-trigger/post-menu-trigger.d.ts +2 -1
  201. package/dist/types/components/post-popovercontainer/post-popovercontainer.d.ts +15 -1
  202. package/dist/types/components.d.ts +17 -24
  203. package/loaders/index2.js +1 -1
  204. package/loaders/package.js +1 -1
  205. package/loaders/post-accordion-item2.js +1 -1
  206. package/loaders/post-back-to-top.js +1 -1
  207. package/loaders/post-banner.js +1 -1
  208. package/loaders/post-header.js +11 -3
  209. package/loaders/post-icon2.js +41 -37
  210. package/loaders/post-language-option.js +2 -4
  211. package/loaders/post-language-switch.js +10 -19
  212. package/loaders/post-linkarea.js +11 -13
  213. package/loaders/post-list.js +2 -2
  214. package/loaders/post-mainnavigation.js +57 -36
  215. package/loaders/post-megadropdown-trigger.js +24 -2
  216. package/loaders/post-megadropdown.js +42 -19
  217. package/loaders/post-menu-trigger2.js +13 -7
  218. package/loaders/post-menu2.js +17 -13
  219. package/loaders/post-popover.js +1 -1
  220. package/loaders/post-popovercontainer2.js +125 -33
  221. package/loaders/post-rating.js +1 -1
  222. package/loaders/post-tab-header.js +2 -2
  223. package/loaders/post-tab-panel.js +1 -1
  224. package/loaders/post-tabs.js +1 -1
  225. package/loaders/post-tag.js +1 -1
  226. package/loaders/post-togglebutton.js +1 -1
  227. package/loaders/post-tooltip.js +2 -2
  228. package/package.json +3 -3
  229. package/dist/cjs/post-linkarea-abe3848a.js +0 -32
  230. package/dist/esm/package-52c62831.js +0 -3
  231. package/dist/esm/post-linkarea-12db6e2a.js +0 -30
  232. package/dist/post-components/p-14312d05.entry.js +0 -1
  233. package/dist/post-components/p-19aa8e97.entry.js +0 -1
  234. package/dist/post-components/p-19d9ae56.entry.js +0 -1
  235. package/dist/post-components/p-3a8aa86c.entry.js +0 -1
  236. package/dist/post-components/p-4575b6be.js +0 -1
  237. package/dist/post-components/p-47e21420.js +0 -1
  238. package/dist/post-components/p-4f608797.entry.js +0 -1
  239. package/dist/post-components/p-59373941.js +0 -1
  240. package/dist/post-components/p-5c5b1fc0.entry.js +0 -1
  241. package/dist/post-components/p-7a7ce5d1.js +0 -1
  242. package/dist/post-components/p-7ed1123b.entry.js +0 -1
  243. package/dist/post-components/p-7ff34767.js +0 -1
  244. package/dist/post-components/p-82e405cc.entry.js +0 -1
  245. package/dist/post-components/p-98c7bec2.entry.js +0 -1
  246. package/dist/post-components/p-9f202ea3.entry.js +0 -1
  247. package/dist/post-components/p-a24295d5.entry.js +0 -1
  248. package/dist/post-components/p-bac3cb12.js +0 -1
  249. package/dist/post-components/p-bd85e141.js +0 -1
  250. package/dist/post-components/p-c9c86df8.entry.js +0 -1
  251. package/dist/post-components/p-d3c4e8ea.entry.js +0 -1
  252. package/dist/post-components/p-d72abd74.entry.js +0 -1
  253. package/dist/post-components/p-dfcee8dc.entry.js +0 -1
  254. package/dist/post-components/p-e0c0467e.entry.js +0 -1
  255. package/dist/post-components/p-f41b0150.entry.js +0 -1
  256. package/dist/post-components/p-f580d6dd.entry.js +0 -1
  257. package/dist/post-components/p-ff065ad4.js +0 -1
@@ -1 +1 @@
1
- post-mainnavigation{flex:0 0 auto}post-mainnavigation post-list-item>a{text-decoration:none;border-radius:0}post-mainnavigation post-list-item post-megadropdown-trigger button{padding:0;overflow:visible;border:0;background:none;color:inherit;font:inherit;-webkit-user-select:none;user-select:none;appearance:button;text-align:start}post-mainnavigation post-list-item post-megadropdown-trigger button{outline-offset:var(--post-device-spacing-padding-2) !important;outline:var(--post-scheme-color-interactive-focus-stroke) none var(--post-device-border-width-focus) !important}post-mainnavigation post-list-item post-megadropdown-trigger button:is(:focus-visible,:has(:focus-visible),.pretend-focus){outline-style:var(--post-core-border-style-solid) !important}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){post-mainnavigation post-list-item post-megadropdown-trigger button:is(:focus-visible,:has(:focus-visible),.pretend-focus){outline-color:Highlight !important}}@supports not selector(:has(:focus-visible)){post-mainnavigation post-list-item post-megadropdown-trigger button:is(:focus-visible,:focus-within,.pretend-focus){outline-style:var(--post-core-border-style-solid) !important}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){post-mainnavigation post-list-item post-megadropdown-trigger button:is(:focus-visible,:focus-within,.pretend-focus){outline-color:Highlight !important}}}post-mainnavigation post-list-item>a,post-mainnavigation post-list-item post-megadropdown-trigger button{flex:0 0 fit-content;white-space:nowrap;display:flex;align-items:center;justify-content:space-between}post-mainnavigation post-list-item>a:hover,post-mainnavigation post-list-item post-megadropdown-trigger button:hover{color:var(--post-scheme-color-interactive-primary-hover-fg1)}post-mainnavigation post-list-item>a:focus-visible,post-mainnavigation post-list-item post-megadropdown-trigger button:focus-visible{border-radius:var(--post-core-dimension-4)}post-mainnavigation .back-button post-icon{transform:rotate(180deg)}@media screen and (max-width: 1023.98px){post-mainnavigation .back-button{font-size:var(--post-core-font-size-16)}}@media screen and (max-width: 599.98px){post-mainnavigation .back-button{font-size:var(--post-core-font-size-14)}}post-mainnavigation>button::after,post-mainnavigation post-megadropdown-trigger button::after{content:"";mask-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m23.6 13.2-7.5 7.6-7.6-7.6.9-.9 6.6 6.6 6.6-6.6z'/%3E%3C/svg%3E");background-color:currentColor;color:currentColor;forced-color-adjust:preserve-parent-color;height:var(--post-core-dimension-24);width:var(--post-core-dimension-24)}@media screen and (min-width: 1024px){post-mainnavigation{display:block}post-mainnavigation nav{max-width:100vw;background:var(--post-core-color-brand-white);max-height:var(--main-navigation-height);user-select:none;transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1)}post-mainnavigation .left-scroll-button,post-mainnavigation .right-scroll-button{position:absolute;inset-block:0;overflow:hidden}post-mainnavigation .left-scroll-button button,post-mainnavigation .right-scroll-button button{padding:0;overflow:visible;border:0;background:none;color:inherit;font:inherit;-webkit-user-select:none;user-select:none;appearance:button;background:var(--post-core-color-brand-white);padding:var(--post-core-dimension-16);box-shadow:var(--post-core-elevation-5);line-height:var(--post-core-line-height-100);height:100%}post-mainnavigation .left-scroll-button button post-icon,post-mainnavigation .right-scroll-button button post-icon{font-size:1rem}post-mainnavigation .left-scroll-button{inset-inline-start:0;padding-inline-end:2rem}post-mainnavigation .right-scroll-button{inset-inline-end:0;padding-inline-start:2rem}post-mainnavigation post-list{margin-inline:var(--post-core-dimension-4)}post-mainnavigation post-list>[role=list]{flex-direction:row;max-width:100vw;transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1)}post-mainnavigation post-list-item>a,post-mainnavigation post-list-item>button,post-mainnavigation post-list-item post-megadropdown-trigger button{position:sticky;padding-inline:var(--post-core-dimension-12);height:var(--main-navigation-height);gap:var(--post-core-dimension-4);font-size:var(--post-core-font-size-16)}}@media screen and (min-width: 1024px)and (max-width: 1023.98px){post-mainnavigation post-list-item>a,post-mainnavigation post-list-item>button,post-mainnavigation post-list-item post-megadropdown-trigger button{z-index:3}}@media screen and (min-width: 1024px)and (min-width: 1024px){post-mainnavigation post-list-item>a,post-mainnavigation post-list-item>button,post-mainnavigation post-list-item post-megadropdown-trigger button{z-index:4}}@media screen and (min-width: 1024px){post-mainnavigation post-list-item>a.selected,post-mainnavigation post-list-item>a[aria-expanded=true],post-mainnavigation post-list-item>button.selected,post-mainnavigation post-list-item>button[aria-expanded=true],post-mainnavigation post-list-item post-megadropdown-trigger button.selected,post-mainnavigation post-list-item post-megadropdown-trigger button[aria-expanded=true]{background-color:#050400;color:#fff;font-weight:var(--post-core-font-weight-700)}}@media screen and (min-width: 1024px){post-mainnavigation post-list-item>a:hover,post-mainnavigation post-list-item>button:hover,post-mainnavigation post-list-item post-megadropdown-trigger button:hover{background-color:#504f4b;color:#fff}}@media screen and (min-width: 1024px)and (max-width: 599.98px){post-mainnavigation post-list-item>a,post-mainnavigation post-list-item>button,post-mainnavigation post-list-item post-megadropdown-trigger button{font-size:var(--post-core-font-size-14)}}@media screen and (min-width: 1024px){post-mainnavigation post-list-item>button,post-mainnavigation post-list-item post-megadropdown-trigger button{padding-inline-end:var(--post-core-dimension-12);transition:border-block-end-color 250ms cubic-bezier(0.4, 0, 0.2, 1)}post-mainnavigation post-list-item>button::after,post-mainnavigation post-list-item post-megadropdown-trigger button::after{transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1)}post-mainnavigation post-list-item>button.selected::after,post-mainnavigation post-list-item>button[aria-expanded=true]::after,post-mainnavigation post-list-item post-megadropdown-trigger button.selected::after,post-mainnavigation post-list-item post-megadropdown-trigger button[aria-expanded=true]::after{transform:rotate(180deg)}}@media screen and (min-width: 1024px){post-mainnavigation post-megadropdown button:not(.btn-icon-close),post-mainnavigation post-megadropdown a{width:100%;min-width:100%;height:var(--post-core-dimension-48);padding-inline:8px 12px;gap:var(--post-core-dimension-16);font-weight:var(--post-core-font-weight-400);position:relative}post-mainnavigation post-megadropdown button:not(.btn-icon-close)::before,post-mainnavigation post-megadropdown a::before{content:"";background-color:#050400;bottom:0;width:100%;height:var(--post-core-dimension-1);position:absolute;left:0}post-mainnavigation post-megadropdown button:not(.btn-icon-close).selected,post-mainnavigation post-megadropdown button:not(.btn-icon-close)[aria-expanded=true],post-mainnavigation post-megadropdown a.selected,post-mainnavigation post-megadropdown a[aria-expanded=true]{background-color:#050400;color:#fff}post-mainnavigation post-megadropdown button:not(.btn-icon-close):hover,post-mainnavigation post-megadropdown a:hover{background-color:#504f4b;color:#fff}post-mainnavigation post-megadropdown button:not(.btn-icon-close):hover::before,post-mainnavigation post-megadropdown a:hover::before{background-color:#504f4b}}@media screen and (min-width: 1024px){post-mainnavigation [slot=back-button]{display:none}}@media screen and (max-width: 1023.98px){post-mainnavigation nav{transform:none !important}post-mainnavigation .left-scroll-button,post-mainnavigation .right-scroll-button{display:none}post-mainnavigation post-list-item>a,post-mainnavigation post-list-item>button,post-mainnavigation post-list-item post-megadropdown-trigger button{width:100%;min-width:100%;height:var(--post-core-dimension-48);padding-inline:8px 12px;gap:var(--post-core-dimension-16);font-weight:var(--post-core-font-weight-400);position:relative}post-mainnavigation post-list-item>a::before,post-mainnavigation post-list-item>button::before,post-mainnavigation post-list-item post-megadropdown-trigger button::before{content:"";background-color:#050400;bottom:0;width:100%;height:var(--post-core-dimension-1);position:absolute;left:0}post-mainnavigation post-list-item>a.selected,post-mainnavigation post-list-item>a[aria-expanded=true],post-mainnavigation post-list-item>button.selected,post-mainnavigation post-list-item>button[aria-expanded=true],post-mainnavigation post-list-item post-megadropdown-trigger button.selected,post-mainnavigation post-list-item post-megadropdown-trigger button[aria-expanded=true]{background-color:#050400;color:#fff}post-mainnavigation post-list-item>a:hover,post-mainnavigation post-list-item>button:hover,post-mainnavigation post-list-item post-megadropdown-trigger button:hover{background-color:#504f4b;color:#fff}post-mainnavigation post-list-item>a:hover::before,post-mainnavigation post-list-item>button:hover::before,post-mainnavigation post-list-item post-megadropdown-trigger button:hover::before{background-color:#504f4b}post-mainnavigation>button::after,post-mainnavigation post-megadropdown-trigger button::after{transform:rotate(-90deg)}}post-mainnavigation .back-button .btn{padding-inline:0}
1
+ post-mainnavigation post-list-item>a{text-decoration:none;border-radius:0}post-mainnavigation post-list-item post-megadropdown-trigger button{padding:0;overflow:visible;border:0;background:none;color:var(--post-scheme-color-interactive-button-secondary-enabled-fg);font:inherit;-webkit-user-select:none;user-select:none;appearance:button;text-align:start}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){post-mainnavigation post-list-item post-megadropdown-trigger button{background-color:ButtonFace !important}post-mainnavigation post-list-item post-megadropdown-trigger button:hover{background-color:Highlight !important}}post-mainnavigation post-list-item post-megadropdown-trigger button{outline-offset:var(--post-device-spacing-padding-2) !important;outline:var(--post-scheme-color-interactive-focus-stroke) none var(--post-device-border-width-focus) !important}post-mainnavigation post-list-item post-megadropdown-trigger button:is(:focus-visible,:has(:focus-visible),.pretend-focus){outline-style:var(--post-core-border-style-solid) !important}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){post-mainnavigation post-list-item post-megadropdown-trigger button:is(:focus-visible,:has(:focus-visible),.pretend-focus){outline-color:Highlight !important}}@supports not selector(:has(:focus-visible)){post-mainnavigation post-list-item post-megadropdown-trigger button:is(:focus-visible,:focus-within,.pretend-focus){outline-style:var(--post-core-border-style-solid) !important}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){post-mainnavigation post-list-item post-megadropdown-trigger button:is(:focus-visible,:focus-within,.pretend-focus){outline-color:Highlight !important}}}post-mainnavigation post-list-item>a,post-mainnavigation post-list-item post-megadropdown-trigger button{flex:0 0 fit-content;white-space:nowrap;display:flex;align-items:center;justify-content:space-between}post-mainnavigation post-list-item>a:hover,post-mainnavigation post-list-item post-megadropdown-trigger button:hover{color:var(--post-scheme-color-interactive-primary-hover-fg1)}post-mainnavigation post-list-item>a:focus-visible,post-mainnavigation post-list-item post-megadropdown-trigger button:focus-visible{border-radius:4px}post-mainnavigation .back-button post-icon{transform:rotate(180deg)}@media screen and (max-width: 1023.98px){post-mainnavigation .back-button{font-size:16px}}@media screen and (max-width: 599.98px){post-mainnavigation .back-button{font-size:14px}}post-mainnavigation>button::after,post-mainnavigation post-megadropdown-trigger button::after{content:"";mask-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m23.6 13.2-7.5 7.6-7.6-7.6.9-.9 6.6 6.6 6.6-6.6z'/%3E%3C/svg%3E");background-color:currentColor;color:currentColor;forced-color-adjust:preserve-parent-color;height:24px;width:24px}@media screen and (min-width: 1024px){post-mainnavigation{display:block}post-mainnavigation nav{max-width:100vw;background:#fff;max-height:var(--main-navigation-height);user-select:none;transition:margin 250ms cubic-bezier(0.4, 0, 0.2, 1)}post-mainnavigation .left-scroll-button,post-mainnavigation .right-scroll-button{z-index:4;position:absolute;inset-block-end:0;overflow:hidden}post-mainnavigation .left-scroll-button button,post-mainnavigation .right-scroll-button button{padding:0;overflow:visible;border:0;background:none;color:var(--post-scheme-color-interactive-button-secondary-enabled-fg);font:inherit;-webkit-user-select:none;user-select:none;appearance:button;background:#fff;padding:16px;box-shadow:var(--post-device-elevation-500);line-height:100%;height:var(--main-navigation-height)}}@media screen and (min-width: 1024px)and (forced-colors: active),screen and (min-width: 1024px)and (-ms-high-contrast: active),screen and (min-width: 1024px)and (-ms-high-contrast: white-on-black){post-mainnavigation .left-scroll-button button,post-mainnavigation .right-scroll-button button{background-color:ButtonFace !important}post-mainnavigation .left-scroll-button button:hover,post-mainnavigation .right-scroll-button button:hover{background-color:Highlight !important}}@media screen and (min-width: 1024px){post-mainnavigation .left-scroll-button button post-icon,post-mainnavigation .right-scroll-button button post-icon{font-size:1rem}}@media screen and (min-width: 1024px){post-mainnavigation .left-scroll-button{inset-inline-start:0;padding-inline-end:2rem}}@media screen and (min-width: 1024px){post-mainnavigation .right-scroll-button{inset-inline-end:0;padding-inline-start:2rem}}@media screen and (min-width: 1024px){post-mainnavigation post-list>[role=list]{flex-direction:row;max-width:100vw;margin-inline:4px}}@media screen and (min-width: 1024px){post-mainnavigation post-list-item>a,post-mainnavigation post-list-item>button,post-mainnavigation post-list-item post-megadropdown-trigger button{position:sticky;padding-inline:12px;height:var(--main-navigation-height);gap:4px;font-size:16px;z-index:4}post-mainnavigation post-list-item>a .nav-el-active,post-mainnavigation post-list-item>button .nav-el-active,post-mainnavigation post-list-item post-megadropdown-trigger button .nav-el-active{font-weight:700;text-align:center;opacity:0}post-mainnavigation post-list-item>a .nav-el-inactive,post-mainnavigation post-list-item>button .nav-el-inactive,post-mainnavigation post-list-item post-megadropdown-trigger button .nav-el-inactive{position:absolute;opacity:1;text-align:center;width:100%;left:0}post-mainnavigation post-list-item>a.selected,post-mainnavigation post-list-item>a[aria-expanded=true],post-mainnavigation post-list-item>button.selected,post-mainnavigation post-list-item>button[aria-expanded=true],post-mainnavigation post-list-item post-megadropdown-trigger button.selected,post-mainnavigation post-list-item post-megadropdown-trigger button[aria-expanded=true]{background-color:#050400;color:#fff;font-weight:700}post-mainnavigation post-list-item>a.selected .nav-el-active,post-mainnavigation post-list-item>a[aria-expanded=true] .nav-el-active,post-mainnavigation post-list-item>button.selected .nav-el-active,post-mainnavigation post-list-item>button[aria-expanded=true] .nav-el-active,post-mainnavigation post-list-item post-megadropdown-trigger button.selected .nav-el-active,post-mainnavigation post-list-item post-megadropdown-trigger button[aria-expanded=true] .nav-el-active{opacity:1}post-mainnavigation post-list-item>a.selected .nav-el-inactive,post-mainnavigation post-list-item>a[aria-expanded=true] .nav-el-inactive,post-mainnavigation post-list-item>button.selected .nav-el-inactive,post-mainnavigation post-list-item>button[aria-expanded=true] .nav-el-inactive,post-mainnavigation post-list-item post-megadropdown-trigger button.selected .nav-el-inactive,post-mainnavigation post-list-item post-megadropdown-trigger button[aria-expanded=true] .nav-el-inactive{opacity:0}post-mainnavigation post-list-item>a:hover,post-mainnavigation post-list-item>button:hover,post-mainnavigation post-list-item post-megadropdown-trigger button:hover{background-color:#504f4b;color:#fff}}@media screen and (min-width: 1024px)and (max-width: 599.98px){post-mainnavigation post-list-item>a,post-mainnavigation post-list-item>button,post-mainnavigation post-list-item post-megadropdown-trigger button{font-size:14px}}@media screen and (min-width: 1024px){post-mainnavigation post-list-item>button,post-mainnavigation post-list-item post-megadropdown-trigger button{padding-inline-end:12px;transition:border-block-end-color 250ms cubic-bezier(0.4, 0, 0.2, 1)}post-mainnavigation post-list-item>button .nav-el-inactive,post-mainnavigation post-list-item post-megadropdown-trigger button .nav-el-inactive{width:calc(100% - 28px)}post-mainnavigation post-list-item>button::after,post-mainnavigation post-list-item post-megadropdown-trigger button::after{transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1)}post-mainnavigation post-list-item>button.selected::after,post-mainnavigation post-list-item>button[aria-expanded=true]::after,post-mainnavigation post-list-item post-megadropdown-trigger button.selected::after,post-mainnavigation post-list-item post-megadropdown-trigger button[aria-expanded=true]::after{transform:rotate(180deg)}}@media screen and (min-width: 1024px){post-mainnavigation post-megadropdown button:not(.btn-icon-close),post-mainnavigation post-megadropdown a{width:100%;min-width:100%;height:48px;padding-inline:8px 12px;gap:16px;font-weight:400;position:relative}post-mainnavigation post-megadropdown button:not(.btn-icon-close)::before,post-mainnavigation post-megadropdown a::before{content:"";background-color:#050400;bottom:0;width:100%;height:1px;position:absolute;left:0}post-mainnavigation post-megadropdown button:not(.btn-icon-close).selected,post-mainnavigation post-megadropdown button:not(.btn-icon-close)[aria-expanded=true],post-mainnavigation post-megadropdown a.selected,post-mainnavigation post-megadropdown a[aria-expanded=true]{background-color:#050400;color:#fff}post-mainnavigation post-megadropdown button:not(.btn-icon-close):hover,post-mainnavigation post-megadropdown a:hover{background-color:#504f4b;color:#fff}post-mainnavigation post-megadropdown button:not(.btn-icon-close):hover::before,post-mainnavigation post-megadropdown a:hover::before{background-color:#504f4b}}@media screen and (min-width: 1024px){post-mainnavigation [slot=back-button]{display:none}}@media screen and (max-width: 1023.98px){post-mainnavigation nav{transform:none !important}post-mainnavigation .left-scroll-button,post-mainnavigation .right-scroll-button{display:none}post-mainnavigation post-list-item>a,post-mainnavigation post-list-item>button,post-mainnavigation post-list-item post-megadropdown-trigger button{width:100%;min-width:100%;height:48px;padding-inline:8px 12px;gap:16px;font-weight:400;position:relative}post-mainnavigation post-list-item>a::before,post-mainnavigation post-list-item>button::before,post-mainnavigation post-list-item post-megadropdown-trigger button::before{content:"";background-color:#050400;bottom:0;width:100%;height:1px;position:absolute;left:0}post-mainnavigation post-list-item>a.selected,post-mainnavigation post-list-item>a[aria-expanded=true],post-mainnavigation post-list-item>button.selected,post-mainnavigation post-list-item>button[aria-expanded=true],post-mainnavigation post-list-item post-megadropdown-trigger button.selected,post-mainnavigation post-list-item post-megadropdown-trigger button[aria-expanded=true]{background-color:#050400;color:#fff}post-mainnavigation post-list-item>a:hover,post-mainnavigation post-list-item>button:hover,post-mainnavigation post-list-item post-megadropdown-trigger button:hover{background-color:#504f4b;color:#fff}post-mainnavigation post-list-item>a:hover::before,post-mainnavigation post-list-item>button:hover::before,post-mainnavigation post-list-item post-megadropdown-trigger button:hover::before{background-color:#504f4b}post-mainnavigation post-list-item>a .nav-el-inactive,post-mainnavigation post-list-item>button .nav-el-inactive,post-mainnavigation post-list-item post-megadropdown-trigger button .nav-el-inactive{display:none}post-mainnavigation>button::after,post-mainnavigation post-megadropdown-trigger button::after{transform:rotate(-90deg)}}post-mainnavigation .back-button .btn{padding-inline:0}
@@ -2,13 +2,13 @@ import { Host, h } from "@stencil/core";
2
2
  import { throttle } from "throttle-debounce";
3
3
  const SCROLL_REPEAT_INTERVAL = 100; // Interval for repeated scrolling when holding down scroll button
4
4
  const NAVBAR_DISABLE_DURATION = 400; // Duration to temporarily disable navbar interactions during scrolling
5
- const NAVIGATION_LIST_SELECTOR = 'post-list:not(post-megadropdown *) > [role="list"]';
6
- const NAVIGATION_ITEM_SELECTOR = ':is(post-list-item > a, post-list-item > post-megadropdown-trigger > button):not(post-megadropdown *)';
5
+ const NAVIGATION_LIST_SELECTOR = 'post-list > [role="list"]:not(post-megadropdown *)';
6
+ const NAVIGATION_ITEM_SELECTOR = 'post-list-item :is(a, button):not(post-megadropdown *)';
7
7
  export class PostMainnavigation {
8
8
  constructor() {
9
9
  this.canScrollLeft = false;
10
10
  this.canScrollRight = false;
11
- this.translateAmount = 0;
11
+ this.translationAmount = 0;
12
12
  }
13
13
  header;
14
14
  navbar;
@@ -29,7 +29,7 @@ export class PostMainnavigation {
29
29
  * Update navbar translation when 'translateAmount' changes and recalculate scrollability
30
30
  */
31
31
  onTranslateAmountChanges(value) {
32
- this.navbar.style.transform = `translateX(-${value}px)`;
32
+ this.navbar.style.marginInlineStart = `-${value}px`;
33
33
  this.checkScrollability();
34
34
  }
35
35
  /**
@@ -49,11 +49,19 @@ export class PostMainnavigation {
49
49
  componentDidLoad() {
50
50
  setTimeout(() => this.checkScrollability()); // Initial check to determine if scrolling is needed
51
51
  this.mutationObserver.observe(this.navigationList, { subtree: true, childList: true }); // Recheck scrollability when navigation list changes
52
+ this.fixLayoutShift();
52
53
  window.addEventListener('resize', // Recheck scrollability on window resize
53
54
  throttle(100, () => this.checkScrollability()));
54
55
  // Handle focus changes and adjust scroll as needed
55
56
  this.navbar.addEventListener('focusin', e => this.adjustTranslation(e));
56
57
  }
58
+ // Hack that duplicates navigation elements to fix the layout shift on active elements
59
+ fixLayoutShift() {
60
+ // Select first level of main navigation elements, both the links and the megadropdown trigger buttons
61
+ const children = this.host.querySelectorAll('nav > post-list > div > post-list-item > a, nav > post-list > div > post-list-item > post-megadropdown-trigger > button');
62
+ // Update HTML so that the content is duplicated
63
+ children.forEach(child => (child.innerHTML = `<span class="nav-el-active">${child.innerHTML}</span><span class="nav-el-inactive"aria-hidden="true">${child.innerHTML}</span>`));
64
+ }
57
65
  handleBackButtonClick() {
58
66
  if (this.header)
59
67
  this.header.toggleMobileMenu();
@@ -85,11 +93,11 @@ export class PostMainnavigation {
85
93
  this.canScrollLeft = this.canScrollRight = false;
86
94
  }
87
95
  else {
88
- this.canScrollLeft = this.translateAmount !== 0; // Scrolling left is possible if not at the start
89
- this.canScrollRight = clientWidth + this.translateAmount !== scrollWidth; // Scrolling right is possible if not at the end
96
+ this.canScrollLeft = this.translationAmount > 0; // Scrolling left is possible if not at the start
97
+ this.canScrollRight = clientWidth + this.translationAmount < scrollWidth; // Scrolling right is possible if not at the end
90
98
  }
91
99
  if (couldScroll && !this.canScroll) {
92
- this.withoutTransition(() => (this.translateAmount = 0));
100
+ this.withoutTransition(() => (this.translationAmount = 0));
93
101
  }
94
102
  }
95
103
  /**
@@ -125,40 +133,53 @@ export class PostMainnavigation {
125
133
  if (direction === 'left')
126
134
  navigationItems.reverse();
127
135
  for (const item of navigationItems) {
128
- const couldScroll = direction === 'left' ? this.translateLeftTo(item) : this.translateRightTo(item);
136
+ const couldScroll = direction === 'left' ? this.translateLeftTo(item, true) : this.translateRightTo(item, true);
129
137
  if (couldScroll)
130
138
  break;
131
139
  }
132
140
  }
133
- translateRightTo(navigationItem) {
134
- const itemRightEdgePosition = navigationItem.offsetLeft + navigationItem.offsetWidth + this.getFocusMargin(navigationItem);
135
- const lastVisiblePosition = this.navbar.clientWidth + this.translateAmount;
136
- // If the item is already fully visible, don't scroll
137
- if (itemRightEdgePosition < lastVisiblePosition)
141
+ translateRightTo(navigationItem, skipSmallTranslation = false) {
142
+ const listItem = navigationItem.closest('post-list-item');
143
+ // Calculate the right edge position of the list item relative to the left of the screen
144
+ const rightEdgePosition = listItem.offsetLeft + listItem.offsetWidth;
145
+ // Calculate the last visible position on the screen, right before the right scroll button
146
+ const lastVisiblePosition = this.host.clientWidth - this.rightScrollButton.clientWidth;
147
+ // If the item is already fully visible, no translation is needed
148
+ if (rightEdgePosition < lastVisiblePosition)
149
+ return false;
150
+ const translationIncrease = rightEdgePosition - lastVisiblePosition + 1; // + 1 because offset values are rounded
151
+ // If the required scroll distance is too small (less than half the width of the item), avoid unnecessary scroll
152
+ if (skipSmallTranslation && translationIncrease < listItem.clientWidth / 2)
138
153
  return false;
139
- const maxTranslateAmount = this.navbar.scrollWidth - this.navbar.clientWidth;
140
- const newRightEdgePosition = itemRightEdgePosition + this.rightScrollButton.clientWidth - this.navbar.clientWidth;
141
- this.translateAmount = Math.min(maxTranslateAmount, newRightEdgePosition);
154
+ // Calculate the maximum translation amount to prevent scrolling past the end of the content
155
+ const maximumTranslation = this.navbar.scrollWidth - this.host.clientWidth;
156
+ // Adjust the translation amount, ensuring it doesn't exceed the maximum scrollable area
157
+ const { marginRight } = getComputedStyle(this.navigationList);
158
+ this.translationAmount =
159
+ Math.min(this.translationAmount + translationIncrease, maximumTranslation) +
160
+ parseInt(marginRight);
142
161
  return true;
143
162
  }
144
- translateLeftTo(navigationItem) {
145
- const itemLeftEdgePosition = navigationItem.offsetLeft - this.getFocusMargin(navigationItem);
146
- const firstVisiblePosition = this.translateAmount;
147
- // If the item is already fully visible, don't scroll
148
- if (itemLeftEdgePosition > firstVisiblePosition)
163
+ translateLeftTo(navigationItem, skipSmallTranslation = false) {
164
+ const listItem = navigationItem.closest('post-list-item');
165
+ // Get the left edge position of the list item relative to the left of the screen
166
+ const leftEdgePosition = listItem.offsetLeft;
167
+ // Calculate the first visible position on the screen to the left, right after the left scroll button
168
+ const firstVisiblePosition = this.leftScrollButton.clientWidth;
169
+ // If the item is already fully visible, no translation is needed
170
+ if (leftEdgePosition > firstVisiblePosition)
171
+ return false;
172
+ const translationDecrease = firstVisiblePosition - leftEdgePosition + 1; // + 1 because offset values are rounded
173
+ // If the required scroll distance is too small (less than half the width of the item), don't perform the scroll
174
+ if (skipSmallTranslation && translationDecrease < listItem.clientWidth / 2)
149
175
  return false;
150
- const minTranslateAmount = 0;
151
- const newRightEdgePosition = itemLeftEdgePosition - this.leftScrollButton.clientWidth;
152
- this.translateAmount = Math.max(minTranslateAmount, newRightEdgePosition);
176
+ // Calculate the minimum allowed translation amount (no negative scrolling allowed)
177
+ const minimumTranslation = 0;
178
+ // Adjust the translation amount, ensuring it doesn't go below the minimum scrollable area
179
+ const { marginLeft } = getComputedStyle(this.navigationList);
180
+ this.translationAmount = Math.max(this.translationAmount - translationDecrease - parseInt(marginLeft), minimumTranslation);
153
181
  return true;
154
182
  }
155
- /**
156
- * Calculate the margin required for focus outline around navigation items
157
- */
158
- getFocusMargin(navigationItem) {
159
- const { outlineWidth, outlineOffset } = getComputedStyle(navigationItem);
160
- return parseInt(outlineWidth) + parseInt(outlineOffset) + 1;
161
- }
162
183
  /**
163
184
  * Returns the navigation list container element
164
185
  */
@@ -195,7 +216,7 @@ export class PostMainnavigation {
195
216
  });
196
217
  }
197
218
  render() {
198
- return (h(Host, { key: '3280c55d0f8e7aec6e1dc3f59744114b2557cb04', slot: "post-mainnavigation" }, h("div", { key: '446ede19ef62a21022a771edb8a6e8eb30a5c5d3', onClick: () => this.handleBackButtonClick(), class: "back-button" }, h("slot", { key: '5e923b62133d3452676445349624157fd7d3d957', name: "back-button" })), h("nav", { key: 'd67723ba6b42ec2b083197091ec7226dc258897e', ref: el => (this.navbar = el) }, h("slot", { key: 'ea1a0fd7f76e02b89789713a49fc4d7fd6e8a022' })), h("div", { key: '1a3d640acfe23ae5c5f9ab26a7bca9c3c2bc4434', class: `left-scroll-button${this.canScrollLeft ? '' : ' d-none'}`, "aria-hidden": "true" }, h("button", { key: 'a3260bba8104bf9155120e04fed6ba0aa102e529', type: "button", tabindex: "-1", ref: el => (this.leftScrollButton = el), onMouseDown: () => this.handleScrollButtonClick('left') }, h("post-icon", { key: '0bba0a76f93098267be8432636391641f55d5df8', "aria-hidden": "true", name: "chevronleft" }))), h("div", { key: '401ef6821f258737d17ed54ae1c577cc4783a3f9', class: `right-scroll-button${this.canScrollRight ? '' : ' d-none'}`, "aria-hidden": "true" }, h("button", { key: 'd964f4b74ad8fef86115b12fcda12cc54da936f3', type: "button", tabindex: "-1", ref: el => (this.rightScrollButton = el), onMouseDown: () => this.handleScrollButtonClick('right') }, h("post-icon", { key: '5758f48df24b4a3ea241f43464b448878e31977d', "aria-hidden": "true", name: "chevronright" })))));
219
+ return (h(Host, { key: 'd9be56167f714c041eb05283832986ec38c451cd', slot: "post-mainnavigation" }, h("div", { key: '5852c66b93a6eb9697fd7c7b1379e748804c6917', onClick: () => this.handleBackButtonClick(), class: "back-button" }, h("slot", { key: '0d4d98897fb5a8f8cf1c0871037ac01023c41cc2', name: "back-button" })), h("nav", { key: 'c60635b5db5a54b9e7661b92eeec29ed6d453cfe', ref: el => (this.navbar = el) }, h("slot", { key: 'd83facd6cb8c2a892ad432e42357123660c647ed' })), h("div", { key: 'e9afc48596b3e877d9efb9a4189abb8c84aadb6d', class: `left-scroll-button${this.canScrollLeft ? '' : ' d-none'}`, "aria-hidden": "true" }, h("button", { key: 'ef11720ec4f6d7811eb10027871a336e46ba6b84', type: "button", tabindex: "-1", ref: el => (this.leftScrollButton = el), onMouseDown: () => this.handleScrollButtonClick('left') }, h("post-icon", { key: 'f85ff2ef87841409f4b4f6c33e6d0dca4c764cc6', "aria-hidden": "true", name: "chevronleft" }))), h("div", { key: '181dc100ddedcba3f07b5f0ff9aedf165499f74f', class: `right-scroll-button${this.canScrollRight ? '' : ' d-none'}`, "aria-hidden": "true" }, h("button", { key: '83a8a824fcfe499207f6030e11381e68d530c67d', type: "button", tabindex: "-1", ref: el => (this.rightScrollButton = el), onMouseDown: () => this.handleScrollButtonClick('right') }, h("post-icon", { key: '52caec8a9a8c15e97ea5702ec3fe30bd4777c728', "aria-hidden": "true", name: "chevronright" })))));
199
220
  }
200
221
  static get is() { return "post-mainnavigation"; }
201
222
  static get originalStyleUrls() {
@@ -212,13 +233,13 @@ export class PostMainnavigation {
212
233
  return {
213
234
  "canScrollLeft": {},
214
235
  "canScrollRight": {},
215
- "translateAmount": {}
236
+ "translationAmount": {}
216
237
  };
217
238
  }
218
239
  static get elementRef() { return "host"; }
219
240
  static get watchers() {
220
241
  return [{
221
- "propName": "translateAmount",
242
+ "propName": "translationAmount",
222
243
  "methodName": "onTranslateAmountChanges"
223
244
  }];
224
245
  }
@@ -1 +1 @@
1
- @keyframes slide-in{0%{transform:translateX(100%)}100%{transform:translateX(0%)}}@keyframes slide-out{from{transform:translateX(0%)}to{transform:translateX(100%)}}@keyframes slide-down{from{transform:translateY(-100%)}to{transform:translateY(0%)}}@keyframes slide-up{0%{transform:translateY(0%)}100%{transform:translateY(-100%)}}*,::before,::after{box-sizing:border-box}.megadropdown-container{--post-main-header-height: 56px;--post-global-header-height: 72px;--post-header-height: calc(var(--post-global-header-height) + var(--post-main-header-height));box-shadow:0 8px 6px rgba(0,0,0,.16);position:absolute;background-color:#fafafa;border:none;z-index:1;border-top:1px solid #e1e0dc;width:100%;top:100%;left:0;border-radius:0}.megadropdown-container.slide-in{animation:slide-down 350ms forwards}.megadropdown-container.slide-out{animation:slide-up 350ms forwards}@media screen and (max-width: 1023.98px){.megadropdown-container{--post-global-header-height: 64px;z-index:4;top:0 !important;left:0;width:100%;position:fixed;height:calc(100vh - var(--post-header-height));max-height:calc(100vh - var(--header-height));border-top:unset;overflow:auto}.megadropdown-container.slide-in{animation:slide-in 350ms forwards}.megadropdown-container.slide-out{animation:slide-out 350ms forwards}}.megadropdown{padding:31px 40px 40px;background-color:#fafafa}@media screen and (max-width: 1023.98px){.megadropdown{padding:16px 32px 24px}}@media screen and (max-width: 599.98px){.megadropdown{padding-inline:16px}}.megadropdown .megadropdown-content{gap:1.5rem;display:grid;grid-template-columns:repeat(auto-fit, minmax(min(15vw, 100%), 1fr));grid-auto-rows:1fr auto;grid-auto-flow:dense}@media screen and (max-width: 1023.98px){.megadropdown .megadropdown-content{grid-template-columns:repeat(auto-fit, minmax(min(35vw, 100%), 1fr))}}@media screen and (max-width: 599.98px){.megadropdown .megadropdown-content{grid-template-columns:1fr}}.megadropdown h2{display:none;margin-top:0;margin-bottom:8px;font-weight:900}.megadropdown h2 a{text-decoration:none;font-weight:inherit;border-bottom:0;border-top:0}@media screen and (max-width: 1023.98px){.megadropdown h2{display:block;font-size:1.25rem}}@media screen and (max-width: 599.98px){.megadropdown h2{font-size:1.125rem}}.megadropdown post-list{display:grid;grid-row:span 2;grid-template-rows:subgrid;row-gap:0px}.megadropdown post-list>[role=list]{flex-direction:unset;display:unset}.megadropdown post-list>*{width:100%}.megadropdown post-list .list-title{display:flex;flex-direction:column-reverse;height:100%}.megadropdown post-list .list-title h3{font-size:20px;display:block;font-weight:900}.megadropdown post-list .list-title h3:not(:has(a)),.megadropdown post-list .list-title h3 a{padding:16px 12px 14px 8px}.megadropdown post-list .list-title h3:not(:has(a)){position:relative}.megadropdown post-list .list-title h3:not(:has(a))::before{content:"";background-color:#050400;bottom:0;width:100%;height:2px;position:absolute;left:0}.megadropdown post-list .list-title h3 a{border-radius:0;text-decoration:none;font-size:inherit;display:flex;align-items:center;justify-content:space-between;min-height:53px;width:100%;min-width:100%;height:var(--post-core-dimension-48);padding-inline:8px 12px;gap:var(--post-core-dimension-16);font-weight:var(--post-core-font-weight-400);position:relative;height:unset;font-weight:900}.megadropdown post-list .list-title h3 a::before{content:"";background-color:#050400;bottom:0;width:100%;height:var(--post-core-dimension-1);position:absolute;left:0}.megadropdown post-list .list-title h3 a.selected,.megadropdown post-list .list-title h3 a[aria-expanded=true]{background-color:#050400;color:#fff}.megadropdown post-list .list-title h3 a:hover{background-color:#504f4b;color:#fff}.megadropdown post-list .list-title h3 a:hover::before{background-color:#504f4b}.megadropdown post-list .list-title h3 a::before{height:2px}@media screen and (max-width: 1023.98px){.megadropdown post-list .list-title h3{font-size:1rem}.megadropdown post-list .list-title h3:not(:has(a)),.megadropdown post-list .list-title h3 a{padding:14px 12px 12px 8px}}@media screen and (max-width: 599.98px){.megadropdown post-list .list-title h3{font-size:.875rem}}.megadropdown post-list-item>a{padding-block:13px 12px;padding-inline-start:8px;display:flex;text-decoration:none;width:100%;min-width:100%;height:auto;min-height:48px}.megadropdown post-list-item>a:hover{border-block-width:0}@media screen and (min-width: 1024px){.megadropdown post-list-item>a{font-size:1.25rem}}@media screen and (max-width: 1023.98px){.megadropdown post-list-item>a{padding-block:12px 11px}}@media screen and (max-width: 599.98px){.megadropdown post-list-item>a{font-size:.875rem}}.megadropdown .back-button{display:none;margin-bottom:2rem}.megadropdown .back-button .btn{width:auto}@media screen and (max-width: 1023.98px){.megadropdown .back-button{display:block}}.megadropdown .close-button{position:absolute;top:1rem;right:1rem}@media screen and (max-width: 1023.98px){.megadropdown .close-button{display:none}}
1
+ @keyframes slide-in{0%{transform:translateX(100%)}100%{transform:translateX(0%)}}@keyframes slide-out{from{transform:translateX(0%)}to{transform:translateX(100%)}}@keyframes slide-down{from{transform:translateY(-100%)}to{transform:translateY(0%)}}@keyframes slide-up{0%{transform:translateY(0%)}100%{transform:translateY(-100%)}}*,::before,::after{box-sizing:border-box}.megadropdown-container{box-shadow:0 8px 6px rgba(0,0,0,.16);position:absolute;background-color:#fafafa;border:none;z-index:1;border-top:1px solid #e1e0dc;width:100%;top:100%;left:0;border-radius:0}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.megadropdown-container{border-block-end:1px solid CanvasText}}.megadropdown-container.slide-in{animation:slide-down 350ms forwards}.megadropdown-container.slide-out{animation:slide-up 350ms forwards}@media screen and (max-width: 1023.98px){.megadropdown-container{z-index:4;top:0 !important;left:0;width:100%;position:fixed;height:calc(100vh - var(--header-height));max-height:calc(100vh - var(--header-height));border-top:unset;overflow:auto}.megadropdown-container.slide-in{animation:slide-in 350ms forwards}.megadropdown-container.slide-out{animation:slide-out 350ms forwards}}.megadropdown{padding:31px 40px 40px;background-color:#fafafa}@media screen and (max-width: 1023.98px){.megadropdown{display:flex;flex-direction:column;width:inherit;padding:16px 32px 24px}}@media screen and (max-width: 599.98px){.megadropdown{padding-inline:16px}}.megadropdown .megadropdown-content{gap:1.5rem;display:grid;grid-template-columns:repeat(auto-fit, minmax(min(15vw, 100%), 1fr));grid-auto-rows:1fr auto;grid-auto-flow:dense}@media screen and (max-width: 1023.98px){.megadropdown .megadropdown-content{grid-template-columns:repeat(auto-fit, minmax(min(35vw, 100%), 1fr))}}@media screen and (max-width: 599.98px){.megadropdown .megadropdown-content{grid-template-columns:1fr}}.megadropdown h2{display:none;margin-top:0;margin-bottom:8px;font-weight:900}.megadropdown h2 a{text-decoration:none;display:none;font-weight:inherit;border-bottom:0;border-top:0}@media screen and (max-width: 1023.98px){.megadropdown h2{display:block;font-size:1.25rem}}@media screen and (max-width: 599.98px){.megadropdown h2{font-size:1.125rem}}.megadropdown post-list{display:grid;grid-row:span 2;grid-template-rows:subgrid;row-gap:0px}.megadropdown post-list>[role=list]{flex-direction:unset;display:unset}.megadropdown post-list>*{width:100%}.megadropdown post-list .list-title{display:flex;flex-direction:column-reverse;height:100%}.megadropdown post-list .list-title h3{font-size:20px;display:block;font-weight:900}.megadropdown post-list .list-title h3:not(:has(a)),.megadropdown post-list .list-title h3 a{padding:16px 12px 14px 8px}.megadropdown post-list .list-title h3:not(:has(a)){position:relative}.megadropdown post-list .list-title h3:not(:has(a))::before{content:"";background-color:#050400;bottom:0;width:100%;height:2px;position:absolute;left:0}.megadropdown post-list .list-title h3 a{border-radius:0;text-decoration:none;font-size:inherit;display:flex;align-items:center;justify-content:space-between;min-height:53px;width:100%;min-width:100%;height:48px;padding-inline:8px 12px;gap:16px;font-weight:400;position:relative;height:unset;font-weight:900}.megadropdown post-list .list-title h3 a::before{content:"";background-color:#050400;bottom:0;width:100%;height:1px;position:absolute;left:0}.megadropdown post-list .list-title h3 a.selected,.megadropdown post-list .list-title h3 a[aria-expanded=true]{background-color:#050400;color:#fff}.megadropdown post-list .list-title h3 a:hover{background-color:#504f4b;color:#fff}.megadropdown post-list .list-title h3 a:hover::before{background-color:#504f4b}.megadropdown post-list .list-title h3 a::before{height:2px}@media screen and (max-width: 1023.98px){.megadropdown post-list .list-title h3{font-size:1rem}.megadropdown post-list .list-title h3:not(:has(a)),.megadropdown post-list .list-title h3 a{padding:14px 12px 12px 8px}}@media screen and (max-width: 599.98px){.megadropdown post-list .list-title h3{font-size:.875rem}}.megadropdown post-list-item>a{padding-block:13px 12px;padding-inline-start:8px;display:flex;text-decoration:none;width:100%;min-width:100%;height:auto;min-height:48px}.megadropdown post-list-item>a:hover{border-block-width:0}@media screen and (min-width: 1024px){.megadropdown post-list-item>a{font-size:1.25rem}}@media screen and (max-width: 1023.98px){.megadropdown post-list-item>a{padding-block:12px 11px}}@media screen and (max-width: 599.98px){.megadropdown post-list-item>a{font-size:.875rem}}.megadropdown .back-button{display:none;margin-bottom:2rem}.megadropdown .back-button .btn{width:auto}@media screen and (max-width: 1023.98px){.megadropdown .back-button{order:-1;display:block}}.megadropdown .close-button{position:absolute;top:1rem;right:1rem}@media screen and (max-width: 1023.98px){.megadropdown .close-button{display:none}}
@@ -14,11 +14,13 @@ export class PostMegadropdown {
14
14
  static activeDropdown = null;
15
15
  /**
16
16
  * Emits when the dropdown is shown or hidden.
17
- * The event payload is a boolean: `true` when the dropdown was opened, `false` when it was closed.
17
+ * The event payload is an object.
18
+ * `isVisible` is true when the dropdown gets opened and false when it gets closed
19
+ * `focusParent` determines whether after the closing of the mega dropdown, the focus should go back to the trigger parent or naturally go to the next focusable element in the page
18
20
  **/
19
21
  postToggleMegadropdown;
20
22
  disconnectedCallback() {
21
- this.removeOutsideClickListener();
23
+ this.removeListeners();
22
24
  if (PostMegadropdown.activeDropdown === this) {
23
25
  PostMegadropdown.activeDropdown = null;
24
26
  }
@@ -49,23 +51,32 @@ export class PostMegadropdown {
49
51
  this.animationClass = 'slide-in';
50
52
  }
51
53
  this.isVisible = true;
52
- this.host.addEventListener('keydown', e => this.keyboardHandler(e));
53
54
  PostMegadropdown.activeDropdown = this;
54
- this.postToggleMegadropdown.emit(this.isVisible);
55
- this.addOutsideClickListener();
55
+ this.postToggleMegadropdown.emit({ isVisible: this.isVisible });
56
+ requestAnimationFrame(() => {
57
+ if (this.firstFocusableEl &&
58
+ window.getComputedStyle(this.firstFocusableEl).display !== 'none') {
59
+ this.firstFocusableEl.focus();
60
+ }
61
+ });
62
+ this.addListeners();
56
63
  }
57
64
  /**
58
65
  * Hides the dropdown with an animation.
59
66
  */
60
- async hide() {
67
+ async hide(focusParent = true) {
68
+ this.postToggleMegadropdown.emit({ isVisible: false, focusParent: focusParent });
61
69
  this.animationClass = 'slide-out';
62
- PostMegadropdown.activeDropdown = null;
63
- this.host.removeEventListener('keydown', e => this.keyboardHandler(e));
70
+ }
71
+ async focusFirst() {
72
+ this.firstFocusableEl?.focus();
64
73
  }
65
74
  connectedCallback() {
66
75
  this.header = this.host.closest('post-header');
67
76
  if (this.header) {
68
- this.header.addEventListener('postUpdateDevice', (event) => (this.device = event.detail));
77
+ this.header.addEventListener('postUpdateDevice', (event) => {
78
+ this.device = event.detail;
79
+ });
69
80
  }
70
81
  }
71
82
  /**
@@ -74,15 +85,15 @@ export class PostMegadropdown {
74
85
  forceClose() {
75
86
  this.isVisible = false;
76
87
  this.animationClass = null;
77
- this.postToggleMegadropdown.emit(this.isVisible);
78
- this.removeOutsideClickListener();
88
+ this.postToggleMegadropdown.emit({ isVisible: this.isVisible, focusParent: false });
89
+ this.removeListeners();
79
90
  }
80
91
  handleAnimationEnd() {
81
92
  if (this.animationClass === 'slide-out') {
82
93
  this.isVisible = false;
83
94
  this.animationClass = null;
84
- this.postToggleMegadropdown.emit(this.isVisible);
85
- this.removeOutsideClickListener();
95
+ PostMegadropdown.activeDropdown = null;
96
+ this.removeListeners();
86
97
  }
87
98
  }
88
99
  handleClickOutside = (event) => {
@@ -99,12 +110,16 @@ export class PostMegadropdown {
99
110
  }
100
111
  }
101
112
  }
102
- this.hide();
113
+ this.hide(false);
103
114
  };
104
- addOutsideClickListener() {
115
+ addListeners() {
116
+ this.host.addEventListener('keydown', e => this.keyboardHandler(e));
117
+ document.addEventListener('keyup', e => this.handleTabOutside(e));
105
118
  document.addEventListener('mousedown', this.handleClickOutside);
106
119
  }
107
- removeOutsideClickListener() {
120
+ removeListeners() {
121
+ this.host.removeEventListener('keydown', e => this.keyboardHandler(e));
122
+ document.removeEventListener('keyup', e => this.handleTabOutside(e));
108
123
  document.removeEventListener('mousedown', this.handleClickOutside);
109
124
  }
110
125
  getFocusableElements() {
@@ -128,9 +143,16 @@ export class PostMegadropdown {
128
143
  }
129
144
  }
130
145
  }
146
+ handleTabOutside(e) {
147
+ if (e.key === 'Tab' && this.device === 'desktop') {
148
+ if (!this.host.contains(e.target)) {
149
+ this.hide(false);
150
+ }
151
+ }
152
+ }
131
153
  render() {
132
154
  const containerStyle = this.isVisible ? {} : { display: 'none' };
133
- return (h(Host, { key: '11be74da0c6d35e1a50c954735a6b1f079cd0eb6' }, h("div", { key: '202023b2495012f78ba761f20aef1ba0325a98f0', class: `megadropdown-container ${this.animationClass || ''}`, style: containerStyle, onAnimationEnd: () => this.handleAnimationEnd() }, h("div", { key: '87ac87a83de7ce798f5d9057b992893bfc00f2e1', class: "megadropdown" }, h("div", { key: '650738a55e5007b9ae0c3ee30fb2f1ae53152744', onClick: () => this.hide(), class: "back-button" }, h("slot", { key: 'a7b70ce1fbc7090807b8d60efce6cb83eb06674e', name: "back-button" })), h("div", { key: '812d3458649669e867d7d761079299b64d9e4e4d', onClick: () => this.hide(), class: "close-button" }, h("slot", { key: '2ee2df463dfd6667b729fd1b47987ea40e8d9d5f', name: "close-button" })), h("slot", { key: 'a5d0029319e34b652923d07fcddd5cb647912b03', name: "megadropdown-title" }), h("div", { key: 'c563cf50e3d9a1a466b9aec386982c80569ac094', class: "megadropdown-content" }, h("slot", { key: 'a05eeceb8fdbfc4373ee7d42d4f583475b44b4dc' }))))));
155
+ return (h(Host, { key: '83c6439c9f8b225a4252b2c9c525589bfe6d72b9' }, h("div", { key: 'fa59247d65f5c47699ae2ccca2cbb70706c22582', class: `megadropdown-container ${this.animationClass || ''}`, style: containerStyle, onAnimationEnd: () => this.handleAnimationEnd() }, h("div", { key: '937d784bb303920d1e44337eb5a3d5bb8971f276', class: "megadropdown" }, h("slot", { key: '5b5196fd0427f52390d7d07505d03090b3e240cf', name: "megadropdown-title" }), h("div", { key: '8e339d051513396b24247c21b5e6d21bee1ba5d8', class: "megadropdown-content" }, h("slot", { key: '57209bb8428ebc4b6273a1442e96cb88d6af86d1' })), h("div", { key: '3aa4e57e7b523ed5c21108ac53d6664d81351c6c', onClick: () => this.hide(true), class: "back-button" }, h("slot", { key: '44584be04f555e288dfa2cc9078010b7bfc93b97', name: "back-button" })), h("div", { key: '67e1aa1ac0d0071f46705608f9a965d5258c0263', onClick: () => this.hide(true), class: "close-button" }, h("slot", { key: '7b3198f9581b725d9b43608a3d903e8c09689217', name: "close-button" }))))));
134
156
  }
135
157
  static get is() { return "post-megadropdown"; }
136
158
  static get originalStyleUrls() {
@@ -159,11 +181,11 @@ export class PostMegadropdown {
159
181
  "composed": true,
160
182
  "docs": {
161
183
  "tags": [],
162
- "text": "Emits when the dropdown is shown or hidden.\nThe event payload is a boolean: `true` when the dropdown was opened, `false` when it was closed."
184
+ "text": "Emits when the dropdown is shown or hidden.\nThe event payload is an object.\n`isVisible` is true when the dropdown gets opened and false when it gets closed\n`focusParent` determines whether after the closing of the mega dropdown, the focus should go back to the trigger parent or naturally go to the next focusable element in the page"
163
185
  },
164
186
  "complexType": {
165
- "original": "boolean",
166
- "resolved": "boolean",
187
+ "original": "{ isVisible: boolean; focusParent?: boolean }",
188
+ "resolved": "{ isVisible: boolean; focusParent?: boolean; }",
167
189
  "references": {}
168
190
  }
169
191
  }];
@@ -205,6 +227,27 @@ export class PostMegadropdown {
205
227
  }
206
228
  },
207
229
  "hide": {
230
+ "complexType": {
231
+ "signature": "(focusParent?: boolean) => Promise<void>",
232
+ "parameters": [{
233
+ "name": "focusParent",
234
+ "type": "boolean",
235
+ "docs": ""
236
+ }],
237
+ "references": {
238
+ "Promise": {
239
+ "location": "global",
240
+ "id": "global::Promise"
241
+ }
242
+ },
243
+ "return": "Promise<void>"
244
+ },
245
+ "docs": {
246
+ "text": "Hides the dropdown with an animation.",
247
+ "tags": []
248
+ }
249
+ },
250
+ "focusFirst": {
208
251
  "complexType": {
209
252
  "signature": "() => Promise<void>",
210
253
  "parameters": [],
@@ -217,7 +260,7 @@ export class PostMegadropdown {
217
260
  "return": "Promise<void>"
218
261
  },
219
262
  "docs": {
220
- "text": "Hides the dropdown with an animation.",
263
+ "text": "",
221
264
  "tags": []
222
265
  }
223
266
  }
@@ -12,6 +12,11 @@ export class PostMegadropdownTrigger {
12
12
  * Used to manage click and key events for mega dropdown control.
13
13
  */
14
14
  slottedButton = null;
15
+ /**
16
+ * Tracks whether this trigger's dropdown was expanded before a state change.
17
+ * Used to determine if this trigger should handle focus when its dropdown closes.
18
+ */
19
+ wasExpanded = false;
15
20
  /**
16
21
  * Watch for changes to the `for` property to validate its type and ensure it is a string.
17
22
  * @param forValue - The new value of the `for` property.
@@ -33,12 +38,28 @@ export class PostMegadropdownTrigger {
33
38
  console.warn(`No post-megadropdown found with ID: ${this.for}`);
34
39
  }
35
40
  }
41
+ handleKeyDown = (event) => {
42
+ if (event.key === 'Enter') {
43
+ event.preventDefault();
44
+ this.handleToggle();
45
+ if (this.megadropdown && !this.ariaExpanded) {
46
+ setTimeout(() => this.megadropdown.focusFirst(), 100);
47
+ }
48
+ }
49
+ };
36
50
  componentDidLoad() {
37
51
  this.validateControlFor();
38
52
  // Check if the mega dropdown attached to the trigger is expanded or not
39
53
  document.addEventListener('postToggleMegadropdown', (event) => {
40
54
  if (event.target.id === this.for) {
41
- this.ariaExpanded = event.detail;
55
+ this.ariaExpanded = event.detail.isVisible;
56
+ // Focus on the trigger parent of the dropdown after it's closed if close button had been clicked
57
+ if (this.wasExpanded && !this.ariaExpanded && event.detail.focusParent) {
58
+ setTimeout(() => {
59
+ this.slottedButton?.focus();
60
+ }, 100);
61
+ }
62
+ this.wasExpanded = this.ariaExpanded;
42
63
  if (this.slottedButton) {
43
64
  this.slottedButton.setAttribute('aria-expanded', this.ariaExpanded.toString());
44
65
  }
@@ -50,13 +71,14 @@ export class PostMegadropdownTrigger {
50
71
  this.slottedButton.addEventListener('click', () => {
51
72
  this.handleToggle();
52
73
  });
74
+ this.slottedButton.addEventListener('keydown', this.handleKeyDown);
53
75
  }
54
76
  else {
55
77
  console.warn('No button found within post-megadropdown-trigger');
56
78
  }
57
79
  }
58
80
  render() {
59
- return (h(Host, { key: '2e009cb0dbfd81785d3a8ce5802a4fab0e84a52e', "data-version": version, "tab-index": "-1" }, h("button", { key: 'd77d9a5eb5786a63cf7453c639647adc705892bc' }, h("slot", { key: '19f4b17dc2d073b0770c33d6acfb763c1e47735a' }))));
81
+ return (h(Host, { key: '108c3703a2abb21bda4e907e3dfbbaf7a572ff0a', "data-version": version, "tab-index": "-1" }, h("button", { key: 'd7ab70fef0db1dcaa908fdc75b8d751e94d04bb9' }, h("slot", { key: 'c2c4c633794da7777849bc1e6380e98a4bf0f1b5' }))));
60
82
  }
61
83
  static get is() { return "post-megadropdown-trigger"; }
62
84
  static get originalStyleUrls() {
@@ -39,17 +39,29 @@ export class PostMenu {
39
39
  this.popoverRef.addEventListener('postToggle', (event) => {
40
40
  this.isVisible = event.detail;
41
41
  this.toggleMenu.emit(this.isVisible);
42
+ requestAnimationFrame(() => {
43
+ if (this.isVisible) {
44
+ this.lastFocusedElement = this.root.activeElement;
45
+ const menuItems = this.getSlottedItems();
46
+ if (menuItems.length > 0) {
47
+ menuItems[0].focus();
48
+ }
49
+ }
50
+ else if (this.lastFocusedElement) {
51
+ this.lastFocusedElement.focus();
52
+ }
53
+ });
42
54
  });
43
55
  }
44
56
  /**
45
57
  * Toggles the menu visibility based on its current state.
46
58
  */
47
59
  async toggle(target) {
48
- if (this.isVisible) {
49
- await this.hide();
60
+ if (this.popoverRef) {
61
+ await this.popoverRef.toggle(target);
50
62
  }
51
63
  else {
52
- await this.show(target);
64
+ console.error('toggle: popoverRef is null or undefined');
53
65
  }
54
66
  }
55
67
  /**
@@ -60,11 +72,6 @@ export class PostMenu {
60
72
  async show(target) {
61
73
  if (this.popoverRef) {
62
74
  await this.popoverRef.show(target);
63
- this.lastFocusedElement = this.root.activeElement; // Use root's activeElement
64
- const menuItems = this.getSlottedItems();
65
- if (menuItems.length > 0) {
66
- menuItems[0].focus();
67
- }
68
75
  }
69
76
  else {
70
77
  console.error('show: popoverRef is null or undefined');
@@ -76,9 +83,6 @@ export class PostMenu {
76
83
  async hide() {
77
84
  if (this.popoverRef) {
78
85
  await this.popoverRef.hide();
79
- if (this.lastFocusedElement) {
80
- this.lastFocusedElement.focus();
81
- }
82
86
  }
83
87
  else {
84
88
  console.error('hide: popoverRef is null or undefined');
@@ -122,10 +126,10 @@ export class PostMenu {
122
126
  currentIndex = 0;
123
127
  break;
124
128
  case this.KEYCODES.END:
129
+ e.preventDefault();
125
130
  currentIndex = menuItems.length - 1;
126
131
  break;
127
132
  case this.KEYCODES.SPACE:
128
- case this.KEYCODES.ENTER:
129
133
  this.toggle(this.host);
130
134
  return;
131
135
  case this.KEYCODES.TAB:
@@ -150,7 +154,7 @@ export class PostMenu {
150
154
  .flatMap(el => Array.from(getFocusableChildren(el))));
151
155
  }
152
156
  render() {
153
- return (h(Host, { key: '071532c327f80197dda662f77e5cb2444281087d', "data-version": version }, h("post-popovercontainer", { key: '9f70ca4009139e0547026b26be610a02f4f1a95a', placement: this.placement, ref: e => (this.popoverRef = e) }, h("div", { key: '3ff1048a8fb27402a82cedc3dc300366063c9601', class: "popover-container", part: "popover-container" }, h("slot", { key: 'bed6c96b7502e0032b746ac6fdf8c3dd6d782e48' })))));
157
+ return (h(Host, { key: '3a79b9df5a5d4c121aa9ca36883d6e17cbf2a66e', "data-version": version }, h("post-popovercontainer", { key: '9c8a37a2c70b98ff9a960f467ab951af10c34726', placement: this.placement, ref: e => (this.popoverRef = e) }, h("div", { key: '0cda7fc8df3f201d4b4e0170bb8a94e72e123814', class: "popover-container", part: "popover-container" }, h("slot", { key: 'ac20e448dededb6ea79715c2c29122dccf0d7309' })))));
154
158
  }
155
159
  static get is() { return "post-menu"; }
156
160
  static get encapsulation() { return "shadow"; }
@@ -25,11 +25,8 @@ export class PostMenuTrigger {
25
25
  return ref && ref.localName === 'post-menu' ? ref : null;
26
26
  }
27
27
  handleToggle() {
28
- const menu = this.menu;
29
- if (menu && this.slottedButton) {
30
- this.ariaExpanded = !this.ariaExpanded;
31
- this.slottedButton.setAttribute('aria-expanded', this.ariaExpanded.toString());
32
- menu.toggle(this.host);
28
+ if (this.menu) {
29
+ this.menu.toggle(this.host);
33
30
  }
34
31
  else {
35
32
  console.warn(`No post-menu found with ID: ${this.for}`);
@@ -41,8 +38,10 @@ export class PostMenuTrigger {
41
38
  this.handleToggle();
42
39
  }
43
40
  };
44
- componentDidLoad() {
41
+ connectedCallback() {
45
42
  this.root = getRoot(this.host);
43
+ }
44
+ componentDidLoad() {
46
45
  this.validateControlFor();
47
46
  this.slottedButton = this.host.querySelector('button');
48
47
  // Check if the slottedButton is within a web component
@@ -57,6 +56,13 @@ export class PostMenuTrigger {
57
56
  }
58
57
  if (this.slottedButton) {
59
58
  this.slottedButton.setAttribute('aria-haspopup', 'menu');
59
+ // Listen to the `toggleMenu` event emitted by the `post-menu` component
60
+ if (this.menu && this.slottedButton) {
61
+ this.menu.addEventListener('toggleMenu', (event) => {
62
+ this.ariaExpanded = event.detail;
63
+ this.slottedButton.setAttribute('aria-expanded', this.ariaExpanded.toString());
64
+ });
65
+ }
60
66
  this.slottedButton.addEventListener('click', () => {
61
67
  this.handleToggle();
62
68
  });
@@ -67,7 +73,7 @@ export class PostMenuTrigger {
67
73
  }
68
74
  }
69
75
  render() {
70
- return (h(Host, { key: 'a0fff619978087ce0c67d7d327982424e3784ff0', "data-version": version, "tab-index": "-1" }, h("slot", { key: '93e26150b59e9a01275a6815096e09ff5fac146b' })));
76
+ return (h(Host, { key: '39bea077fd4d85f442b7b1d56969a203c470a269', "data-version": version, "tab-index": "-1" }, h("slot", { key: '9f7777a4167cdfbf9f1ab2dfe7c3d6e759c8a83b' })));
71
77
  }
72
78
  static get is() { return "post-menu-trigger"; }
73
79
  static get originalStyleUrls() {
@@ -1,3 +1,3 @@
1
1
  /*!
2
2
  * Copyright 2021 by Swiss Post, Information Technology
3
- */.btn-close{padding:0;overflow:visible;border:0;background:none;color:inherit;font:inherit;-webkit-user-select:none;user-select:none;appearance:button;border-radius:var(--post-device-border-radius-round);color:#000;transition:opacity 250ms,border-color 250ms,background-color 250ms,color 250ms;cursor:pointer}.btn-close{outline-offset:var(--post-device-spacing-padding-2) !important;outline:var(--post-scheme-color-interactive-focus-stroke) none var(--post-device-border-width-focus) !important}.btn-close:is(:focus-visible,:has(:focus-visible),.pretend-focus){outline-style:var(--post-core-border-style-solid) !important;border-radius:4px}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.btn-close:is(:focus-visible,:has(:focus-visible),.pretend-focus){outline-color:Highlight !important}}@supports not selector(:has(:focus-visible)){.btn-close:is(:focus-visible,:focus-within,.pretend-focus){outline-style:var(--post-core-border-style-solid) !important;border-radius:4px}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.btn-close:is(:focus-visible,:focus-within,.pretend-focus){outline-color:Highlight !important}}}.btn-close::before{mask-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m16.267 16.667 6.667-6.533-.933-1.067-6.667 6.667-6.667-6.667-.933 1.067 6.667 6.533-6.667 6.667 1.067.933 6.533-6.667 6.667 6.667.933-1.067z'/%3E%3C/svg%3E");background-color:currentColor;color:currentColor;forced-color-adjust:preserve-parent-color;content:"";display:block;height:var(--post-core-dimension-24);width:var(--post-core-dimension-24)}.btn-close:focus,.btn-close:not(:disabled):hover,.pretend-hover.btn-close{color:#000}.btn-close:disabled{color:#999}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.btn-close{color:CanvasText;forced-color-adjust:none}.btn-close:focus,.btn-close:not(:disabled):hover,.pretend-hover.btn-close{color:Highlight}}.btn-close-white{color:#e6e6e6}.btn-close-white:focus,.btn-close-white:not(:disabled):hover,.btn-close-white.pretend-hover{color:#fff}.btn-close-white:disabled{color:#999}*{box-sizing:border-box}:host{display:block}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0}.popover-container{display:flex;align-items:self-start;padding:.5em;min-width:160px;max-width:280px;max-width:100%}.popover-content{padding:.5em;flex-grow:1}.btn-close{color:inherit}
3
+ */.btn-close{padding:0;overflow:visible;border:0;background:none;color:var(--post-scheme-color-interactive-button-secondary-enabled-fg);font:inherit;-webkit-user-select:none;user-select:none;appearance:button;border-radius:var(--post-device-border-radius-round);color:#000;transition:opacity 250ms,border-color 250ms,background-color 250ms,color 250ms;cursor:pointer}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.btn-close{background-color:ButtonFace !important}.btn-close:hover{background-color:Highlight !important}}.btn-close{outline-offset:var(--post-device-spacing-padding-2) !important;outline:var(--post-scheme-color-interactive-focus-stroke) none var(--post-device-border-width-focus) !important}.btn-close:is(:focus-visible,:has(:focus-visible),.pretend-focus){outline-style:var(--post-core-border-style-solid) !important;border-radius:4px}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.btn-close:is(:focus-visible,:has(:focus-visible),.pretend-focus){outline-color:Highlight !important}}@supports not selector(:has(:focus-visible)){.btn-close:is(:focus-visible,:focus-within,.pretend-focus){outline-style:var(--post-core-border-style-solid) !important;border-radius:4px}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.btn-close:is(:focus-visible,:focus-within,.pretend-focus){outline-color:Highlight !important}}}.btn-close::before{mask-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m16.267 16.667 6.667-6.533-.933-1.067-6.667 6.667-6.667-6.667-.933 1.067 6.667 6.533-6.667 6.667 1.067.933 6.533-6.667 6.667 6.667.933-1.067z'/%3E%3C/svg%3E");background-color:currentColor;color:currentColor;forced-color-adjust:preserve-parent-color;content:"";display:block;height:var(--post-core-dimension-24);width:var(--post-core-dimension-24)}.btn-close:focus,.btn-close:not(:disabled):hover,.pretend-hover.btn-close{color:#000}.btn-close:disabled{color:#999}@media(forced-colors: active),(-ms-high-contrast: active),(-ms-high-contrast: white-on-black){.btn-close{color:CanvasText;forced-color-adjust:none}.btn-close:focus,.btn-close:not(:disabled):hover,.pretend-hover.btn-close{color:Highlight}}.btn-close-white{color:#e6e6e6}.btn-close-white:focus,.btn-close-white:not(:disabled):hover,.btn-close-white.pretend-hover{color:#fff}.btn-close-white:disabled{color:#999}*{box-sizing:border-box}:host{display:block}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0}.popover-container{display:flex;align-items:self-start;padding:.5em;min-width:160px;max-width:280px;max-width:100%}.popover-content{padding:.5em;flex-grow:1}.btn-close{color:inherit}
@@ -1 +1 @@
1
- @layer polyfill{@supports not selector(:popover-open){[popover]:not(.\:popover-open){display:none}}}:where(post-popovercontainer){box-shadow:var(--post-device-elevation-300);background:var(--post-current-palette-bg);color:var(--post-current-palette-fg);position:fixed;z-index:1060;width:max-content;margin:0;padding:0;box-sizing:border-box;border:2px solid rgba(0,0,0,0);border-radius:4px;overflow:visible}:where(post-popovercontainer)[tooltip]{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0}:where(post-popovercontainer):not(:has(.arrow)){box-shadow:var(--post-device-elevation-300)}:where(post-popovercontainer):has(.arrow){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))}:where(post-popovercontainer):has(.arrow.top){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))}:where(post-popovercontainer):has(.arrow.left){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))}:where(post-popovercontainer):has(.arrow.right){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))}:where(post-popovercontainer) .arrow{position:absolute;width:.5825rem;height:.5825rem;background-color:inherit;rotate:45deg;pointer-events:none;z-index:-1}:where(post-popovercontainer) .arrow.top{border-left:2px solid rgba(0,0,0,0);border-top:2px solid rgba(0,0,0,0)}:where(post-popovercontainer) .arrow.right{border-right:2px solid rgba(0,0,0,0);border-top:2px solid rgba(0,0,0,0)}:where(post-popovercontainer) .arrow.left{border-left:2px solid rgba(0,0,0,0);border-bottom:2px solid rgba(0,0,0,0)}:where(post-popovercontainer) .arrow.bottom{border-right:2px solid rgba(0,0,0,0);border-bottom:2px solid rgba(0,0,0,0)}
1
+ @layer polyfill{@supports not selector(:popover-open){[popover]:not(.\:popover-open){display:none}}}:where(post-popovercontainer){background-color:rgba(0,0,0,0);border:rgba(0,0,0,0);position:fixed;z-index:1060;margin:0;padding:0;overflow:visible}:where(post-popovercontainer)>div{box-shadow:var(--post-device-elevation-300);width:max-content;color:var(--post-current-palette-fg);background-color:var(--post-current-palette-bg);border:2px solid rgba(0,0,0,0);border-radius:4px}:where(post-popovercontainer)[tooltip]{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0}:where(post-popovercontainer)[safe-space]::after{content:"";position:fixed;inset:0;z-index:-1;pointer-events:auto}:where(post-popovercontainer)[safe-space=triangle]::after{clip-path:polygon(var(--safe-space-cursor-x, 0) var(--safe-space-cursor-y, 0), var(--safe-space-popover-x-start, var(--safe-space-popover-x, 0)) var(--safe-space-popover-y, var(--safe-space-popover-y-start, 0)), var(--safe-space-popover-x-end, var(--safe-space-popover-x, 0)) var(--safe-space-popover-y, var(--safe-space-popover-y-end, 0)))}:where(post-popovercontainer)[safe-space=trapezoid]::after{clip-path:polygon(var(--safe-space-trigger-x-start, var(--safe-space-trigger-x, 0)) var(--safe-space-trigger-y, var(--safe-space-trigger-y-start, 0)), var(--safe-space-trigger-x-end, var(--safe-space-trigger-x, 0)) var(--safe-space-trigger-y, var(--safe-space-trigger-y-end, 0)), var(--safe-space-popover-x-end, var(--safe-space-popover-x, 0)) var(--safe-space-popover-y, var(--safe-space-popover-y-end, 0)), var(--safe-space-popover-x-start, var(--safe-space-popover-x, 0)) var(--safe-space-popover-y, var(--safe-space-popover-y-start, 0)))}:where(post-popovercontainer):not(:has(.arrow))>div{box-shadow:var(--post-device-elevation-300)}:where(post-popovercontainer):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))}:where(post-popovercontainer):has(.arrow.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))}:where(post-popovercontainer):has(.arrow.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))}:where(post-popovercontainer):has(.arrow.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))}:where(post-popovercontainer) .arrow{position:absolute;width:.5825rem;height:.5825rem;background-color:inherit;rotate:45deg;pointer-events:none;z-index:-1}:where(post-popovercontainer) .arrow.top{border-left:2px solid rgba(0,0,0,0);border-top:2px solid rgba(0,0,0,0)}:where(post-popovercontainer) .arrow.right{border-right:2px solid rgba(0,0,0,0);border-top:2px solid rgba(0,0,0,0)}:where(post-popovercontainer) .arrow.left{border-left:2px solid rgba(0,0,0,0);border-bottom:2px solid rgba(0,0,0,0)}:where(post-popovercontainer) .arrow.bottom{border-right:2px solid rgba(0,0,0,0);border-bottom:2px solid rgba(0,0,0,0)}