@swisspost/design-system-components 10.0.0-next.54 → 10.0.0-next.56

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 (409) hide show
  1. package/dist/{components/react/p-CJ80BZ06.js → cjs/breakpoints-Df03Ct7n.js} +103 -5
  2. package/dist/cjs/debounce-BsIBi_-2.js +13 -0
  3. package/dist/cjs/environment-BQE9Unf_.js +52 -0
  4. package/dist/cjs/{event-from-CLvtSUKf.js → event-from-CwMw19f8.js} +2 -2
  5. package/dist/cjs/fade-CPQhl1fP.js +26 -0
  6. package/dist/cjs/fade-slide-dPhQa-I1.js +38 -0
  7. package/dist/cjs/{get-focusable-children-Bx63XUQg.js → get-focusable-children-ChETM1wK.js} +29 -21
  8. package/dist/cjs/{get-root-CyMf3Vsd.js → get-root-CUAv4k4C.js} +2 -2
  9. package/dist/cjs/{index-Cb8CTrOz.js → index-CKNxhb0S.js} +29 -13
  10. package/dist/cjs/loader.cjs.js +2 -2
  11. package/dist/cjs/{package-CvZxvdTJ.js → package-CY7IOoiw.js} +1 -1
  12. package/dist/cjs/post-accordion_2.cjs.entry.js +12 -12
  13. package/dist/cjs/post-avatar.cjs.entry.js +11 -11
  14. package/dist/cjs/post-back-to-top.cjs.entry.js +16 -40
  15. package/dist/cjs/post-banner.cjs.entry.js +11 -10
  16. package/dist/cjs/post-breadcrumb-item_2.cjs.entry.js +7 -7
  17. package/dist/cjs/post-breadcrumbs.cjs.entry.js +22 -31
  18. package/dist/cjs/post-card-control.cjs.entry.js +16 -16
  19. package/dist/cjs/{post-closebutton_15.cjs.entry.js → post-closebutton_13.cjs.entry.js} +537 -507
  20. package/dist/cjs/post-collapsible_2.cjs.entry.js +39 -38
  21. package/dist/cjs/post-components.cjs.js +2 -2
  22. package/dist/cjs/post-env-test.cjs.entry.js +15 -0
  23. package/dist/cjs/post-footer.cjs.entry.js +21 -19
  24. package/dist/cjs/post-linkarea.cjs.entry.js +3 -3
  25. package/dist/cjs/post-pagination.cjs.entry.js +589 -0
  26. package/dist/cjs/post-popover-trigger.cjs.entry.js +46 -30
  27. package/dist/cjs/post-popover.cjs.entry.js +12 -12
  28. package/dist/cjs/post-rating.cjs.entry.js +13 -13
  29. package/dist/cjs/post-stepper-item.cjs.entry.js +18 -0
  30. package/dist/cjs/post-stepper.cjs.entry.js +109 -0
  31. package/dist/cjs/post-tab-item.cjs.entry.js +49 -0
  32. package/dist/cjs/post-tab-panel.cjs.entry.js +9 -9
  33. package/dist/cjs/post-tabs.cjs.entry.js +191 -38
  34. package/dist/cjs/post-tooltip-trigger.cjs.entry.js +8 -8
  35. package/dist/cjs/post-tooltip.cjs.entry.js +7 -7
  36. package/dist/cjs/utils-s05L2ulk.js +26 -0
  37. package/dist/collection/animations/collapse.js +3 -3
  38. package/dist/collection/animations/fade-slide.js +33 -0
  39. package/dist/collection/animations/fade.js +19 -7
  40. package/dist/collection/animations/index.js +2 -0
  41. package/dist/collection/animations/slide.js +25 -21
  42. package/dist/collection/animations/types.js +14 -0
  43. package/dist/collection/animations/utils.js +8 -0
  44. package/dist/collection/collection-manifest.json +8 -6
  45. package/dist/collection/components/post-accordion/post-accordion.css +1 -1
  46. package/dist/collection/components/post-accordion/post-accordion.js +2 -2
  47. package/dist/collection/components/post-accordion-item/post-accordion-item.css +1 -1
  48. package/dist/collection/components/post-accordion-item/post-accordion-item.js +4 -4
  49. package/dist/collection/components/post-avatar/post-avatar.css +1 -1
  50. package/dist/collection/components/post-avatar/post-avatar.js +1 -1
  51. package/dist/collection/components/post-back-to-top/post-back-to-top.js +14 -14
  52. package/dist/collection/components/post-banner/post-banner.css +4 -1
  53. package/dist/collection/components/post-banner/post-banner.js +3 -3
  54. package/dist/collection/components/post-breadcrumb-item/post-breadcrumb-item.js +1 -1
  55. package/dist/collection/components/post-breadcrumbs/post-breadcrumbs.js +28 -28
  56. package/dist/collection/components/post-card-control/post-card-control.js +3 -3
  57. package/dist/collection/components/post-closebutton/post-closebutton.css +1 -1
  58. package/dist/collection/components/post-closebutton/post-closebutton.js +1 -1
  59. package/dist/collection/components/post-collapsible/post-collapsible.js +27 -27
  60. package/dist/collection/components/post-collapsible-trigger/post-collapsible-trigger.js +6 -5
  61. package/dist/collection/components/post-footer/post-footer.css +1 -1
  62. package/dist/collection/components/post-footer/post-footer.js +18 -16
  63. package/dist/collection/components/post-header/post-header.css +1 -1
  64. package/dist/collection/components/post-header/post-header.js +186 -105
  65. package/dist/collection/components/post-icon/post-icon.js +6 -4
  66. package/dist/collection/components/post-language-menu/post-language-menu.css +1 -0
  67. package/dist/collection/components/{post-language-switch/post-language-switch.js → post-language-menu/post-language-menu.js} +25 -25
  68. package/dist/collection/components/post-language-menu-item/post-language-menu-item.css +1 -0
  69. package/dist/collection/components/{post-language-option/post-language-option.js → post-language-menu-item/post-language-menu-item.js} +14 -14
  70. package/dist/collection/components/post-linkarea/post-linkarea.js +1 -1
  71. package/dist/collection/components/post-logo/post-logo.css +3 -1
  72. package/dist/collection/components/post-logo/post-logo.js +1 -1
  73. package/dist/collection/components/post-mainnavigation/post-mainnavigation.css +1 -1
  74. package/dist/collection/components/post-mainnavigation/post-mainnavigation.js +41 -29
  75. package/dist/collection/components/post-megadropdown/post-megadropdown.css +1 -1
  76. package/dist/collection/components/post-megadropdown/post-megadropdown.js +184 -75
  77. package/dist/collection/components/post-megadropdown-trigger/post-megadropdown-trigger.css +3 -1
  78. package/dist/collection/components/post-megadropdown-trigger/post-megadropdown-trigger.js +80 -74
  79. package/dist/collection/components/post-menu/post-menu.css +1 -1
  80. package/dist/collection/components/post-menu/post-menu.js +35 -35
  81. package/dist/collection/components/post-menu-item/post-menu-item.js +1 -1
  82. package/dist/collection/components/post-menu-trigger/post-menu-trigger.js +1 -1
  83. package/dist/collection/components/post-pagination/post-pagination.css +1 -0
  84. package/dist/collection/components/post-pagination/post-pagination.js +838 -0
  85. package/dist/collection/components/post-popover/post-popover.css +1 -1
  86. package/dist/collection/components/post-popover/post-popover.js +10 -10
  87. package/dist/collection/components/post-popover-trigger/post-popover-trigger.js +43 -27
  88. package/dist/collection/components/post-popovercontainer/post-popovercontainer.css +1 -1
  89. package/dist/collection/components/post-popovercontainer/post-popovercontainer.js +45 -92
  90. package/dist/collection/components/post-rating/post-rating.js +3 -3
  91. package/dist/collection/components/post-stepper/post-stepper.css +1 -0
  92. package/dist/collection/components/post-stepper/post-stepper.js +207 -0
  93. package/dist/collection/components/post-stepper-item/post-stepper-item.css +7 -0
  94. package/dist/collection/components/post-stepper-item/post-stepper-item.js +18 -0
  95. package/dist/collection/components/post-tab-item/post-tab-item.css +1 -0
  96. package/dist/collection/components/post-tab-item/post-tab-item.js +86 -0
  97. package/dist/collection/components/post-tab-panel/post-tab-panel.js +9 -9
  98. package/dist/collection/components/post-tabs/post-tabs.js +230 -57
  99. package/dist/collection/components/post-togglebutton/post-togglebutton.js +1 -1
  100. package/dist/collection/components/post-tooltip/post-tooltip.css +1 -1
  101. package/dist/collection/components/post-tooltip/post-tooltip.js +1 -1
  102. package/dist/collection/components/post-tooltip-trigger/post-tooltip-trigger.js +1 -1
  103. package/dist/collection/utils/environment.js +47 -2
  104. package/dist/collection/utils/event-from.js +2 -2
  105. package/dist/collection/utils/get-focusable-children.js +29 -21
  106. package/dist/collection/utils/is-motion-reduced.js +1 -1
  107. package/dist/collection/utils/tests/environment/hydrate-app-helper.js +16 -0
  108. package/dist/collection/utils/tests/environment/post-env-test.js +9 -0
  109. package/dist/component-names.json +6 -5
  110. package/dist/components/breakpoints.js +90 -3
  111. package/dist/components/debounce.js +11 -0
  112. package/dist/components/environment.js +49 -0
  113. package/dist/components/event-from.js +2 -2
  114. package/dist/components/fade-slide.js +36 -0
  115. package/dist/components/fade.js +21 -8
  116. package/dist/components/get-focusable-children.js +29 -21
  117. package/dist/components/get-root.js +1 -1
  118. package/dist/components/index.d.ts +14 -10
  119. package/dist/components/index.js +7 -5
  120. package/dist/components/package.js +1 -1
  121. package/dist/components/post-accordion-item2.js +4 -5
  122. package/dist/components/post-accordion2.js +4 -5
  123. package/dist/components/post-avatar.js +3 -4
  124. package/dist/components/post-back-to-top.js +14 -40
  125. package/dist/components/post-banner.js +5 -6
  126. package/dist/components/post-breadcrumb-item2.js +2 -3
  127. package/dist/components/post-breadcrumbs.js +24 -34
  128. package/dist/components/post-card-control.js +4 -5
  129. package/dist/components/post-closebutton2.js +3 -4
  130. package/dist/components/post-collapsible-trigger2.js +10 -10
  131. package/dist/components/post-collapsible2.js +25 -25
  132. package/dist/components/{post-list.d.ts → post-env-test.d.ts} +4 -4
  133. package/dist/components/post-env-test.js +31 -0
  134. package/dist/components/post-footer.js +17 -16
  135. package/dist/components/post-header.js +156 -119
  136. package/dist/components/post-icon2.js +8 -6
  137. package/dist/components/post-language-menu-item.d.ts +11 -0
  138. package/dist/components/post-language-menu-item.js +98 -0
  139. package/dist/components/{post-language-switch.d.ts → post-language-menu.d.ts} +4 -4
  140. package/dist/components/post-language-menu.js +156 -0
  141. package/dist/components/post-linkarea.js +1 -1
  142. package/dist/components/post-logo.js +3 -4
  143. package/dist/components/post-mainnavigation.js +21 -32
  144. package/dist/components/post-megadropdown-trigger.js +72 -79
  145. package/dist/components/post-megadropdown.js +183 -78
  146. package/dist/components/post-menu-item2.js +1 -1
  147. package/dist/components/post-menu-trigger2.js +2 -3
  148. package/dist/components/post-menu2.js +35 -36
  149. package/dist/components/post-pagination.d.ts +11 -0
  150. package/dist/components/post-pagination.js +635 -0
  151. package/dist/components/post-popover-trigger.js +41 -26
  152. package/dist/components/post-popover.js +9 -10
  153. package/dist/components/post-popovercontainer2.js +44 -40
  154. package/dist/components/post-rating.js +3 -4
  155. package/dist/components/post-stepper-item.d.ts +11 -0
  156. package/dist/components/post-stepper-item.js +33 -0
  157. package/dist/components/{post-list-item.d.ts → post-stepper.d.ts} +4 -4
  158. package/dist/components/post-stepper.js +136 -0
  159. package/dist/components/{post-tab-header.d.ts → post-tab-item.d.ts} +4 -4
  160. package/dist/components/post-tab-item.js +70 -0
  161. package/dist/components/post-tab-panel.js +8 -9
  162. package/dist/components/post-tabs.js +192 -37
  163. package/dist/components/post-togglebutton.js +1 -51
  164. package/dist/components/post-togglebutton2.js +53 -0
  165. package/dist/components/post-tooltip-trigger.js +3 -3
  166. package/dist/components/post-tooltip.js +3 -4
  167. package/dist/components/react/index.js +1 -1
  168. package/dist/{cjs/breakpoints-CEkeixld.js → components/react/p-B8YiQ3mz.js} +89 -6
  169. package/dist/components/react/{p-2U_BGLjc.js → p-BOLlAY91.js} +9 -7
  170. package/dist/components/react/p-BVCjnh6Q.js +36 -0
  171. package/dist/components/react/{p-CBFgkSgY.js → p-BVGcVycs.js} +1 -1
  172. package/dist/components/react/{p-D4NSCxrX.js → p-BYCGzO-t.js} +13 -13
  173. package/dist/components/react/p-C9hMpmsD.js +11 -0
  174. package/dist/components/react/{p-BVXiQdHq.js → p-CJ13r5fi.js} +29 -21
  175. package/dist/components/react/{p-nSFSgY-P.js → p-CnZWXrbA.js} +40 -41
  176. package/dist/components/react/p-CoDiS_Ik.js +24 -0
  177. package/dist/components/react/p-CyniMNY-.js +54 -0
  178. package/dist/components/react/p-D5knoiyy.js +24 -0
  179. package/dist/components/react/{p-Ccgu_WOx.js → p-DBO6FfHt.js} +4 -5
  180. package/dist/components/react/{p-BfLuYwf7.js → p-DRfa3MOV.js} +26 -26
  181. package/dist/components/react/{p-BUxAs8N5.js → p-DYImHx0e.js} +4 -5
  182. package/dist/components/react/p-DZ5m2Ttg.js +3 -0
  183. package/dist/components/react/p-FxUVQ4Tx.js +49 -0
  184. package/dist/components/react/{p-BK474oMI.js → p-L36-yvgK.js} +2 -2
  185. package/dist/components/react/{p-DVxZMuPW.js → p-NCAcc7ZZ.js} +6 -7
  186. package/dist/components/react/{p-mENtrn2l.js → p-QNPIvxLq.js} +45 -41
  187. package/dist/components/react/{p-D3CFjhAf.js → p-_pLhqTys.js} +5 -6
  188. package/dist/components/react/p-c6yNOQwn.js +113 -0
  189. package/dist/components/react/{p-CzIKqBrS.js → p-rEfV4v4a.js} +2 -2
  190. package/dist/components/react/post-accordion-item.js +1 -1
  191. package/dist/components/react/post-accordion.js +1 -1
  192. package/dist/components/react/post-avatar.js +4 -5
  193. package/dist/components/react/post-back-to-top.js +16 -42
  194. package/dist/components/react/post-banner.js +7 -8
  195. package/dist/components/react/post-breadcrumb-item.js +1 -1
  196. package/dist/components/react/post-breadcrumbs.js +31 -41
  197. package/dist/components/react/post-card-control.js +6 -7
  198. package/dist/components/react/post-closebutton.js +1 -1
  199. package/dist/components/react/post-collapsible-trigger.js +1 -1
  200. package/dist/components/react/post-collapsible.js +1 -1
  201. package/dist/components/react/{post-list.d.ts → post-env-test.d.ts} +4 -4
  202. package/dist/components/react/post-env-test.js +32 -0
  203. package/dist/components/react/post-footer.js +23 -22
  204. package/dist/components/react/post-header.js +158 -121
  205. package/dist/components/react/post-icon.js +1 -1
  206. package/dist/components/react/post-language-menu-item.d.ts +11 -0
  207. package/dist/components/react/post-language-menu-item.js +99 -0
  208. package/dist/components/react/{post-language-option.d.ts → post-language-menu.d.ts} +4 -4
  209. package/dist/components/react/post-language-menu.js +157 -0
  210. package/dist/components/react/post-linkarea.js +2 -2
  211. package/dist/components/react/post-logo.js +4 -5
  212. package/dist/components/react/post-mainnavigation.js +23 -34
  213. package/dist/components/react/post-megadropdown-trigger.js +74 -81
  214. package/dist/components/react/post-megadropdown.js +185 -80
  215. package/dist/components/react/post-menu-item.js +1 -1
  216. package/dist/components/react/post-menu-trigger.js +1 -1
  217. package/dist/components/react/post-menu.js +1 -1
  218. package/dist/components/react/post-pagination.d.ts +11 -0
  219. package/dist/components/react/post-pagination.js +636 -0
  220. package/dist/components/react/post-popover-trigger.js +42 -27
  221. package/dist/components/react/post-popover.js +14 -15
  222. package/dist/components/react/post-popovercontainer.js +1 -1
  223. package/dist/components/react/post-rating.js +5 -6
  224. package/dist/components/react/post-stepper-item.d.ts +11 -0
  225. package/dist/components/react/post-stepper-item.js +34 -0
  226. package/dist/components/react/{post-list-item.d.ts → post-stepper.d.ts} +4 -4
  227. package/dist/components/react/post-stepper.js +137 -0
  228. package/dist/components/react/{post-tab-header.d.ts → post-tab-item.d.ts} +4 -4
  229. package/dist/components/react/post-tab-item.js +71 -0
  230. package/dist/components/react/post-tab-panel.js +9 -10
  231. package/dist/components/react/post-tabs.js +193 -38
  232. package/dist/components/react/post-togglebutton.js +1 -52
  233. package/dist/components/react/post-tooltip-trigger.js +4 -4
  234. package/dist/components/react/post-tooltip.js +5 -6
  235. package/dist/components/utils.js +24 -0
  236. package/dist/docs.json +968 -563
  237. package/dist/esm/{breakpoints-CJ80BZ06.js → breakpoints-DYoSKGHO.js} +90 -3
  238. package/dist/esm/debounce-C9hMpmsD.js +11 -0
  239. package/dist/esm/environment-CEmnRoA6.js +49 -0
  240. package/dist/esm/{event-from-CzIKqBrS.js → event-from-rEfV4v4a.js} +2 -2
  241. package/dist/esm/fade-DsgPYmAa.js +24 -0
  242. package/dist/esm/fade-slide-CvOvauo9.js +36 -0
  243. package/dist/esm/{get-focusable-children-D9ZHp2FP.js → get-focusable-children-BXNs2_sw.js} +29 -21
  244. package/dist/esm/{get-root-BkQ3CrLq.js → get-root-CXfAA093.js} +1 -1
  245. package/dist/esm/{index-CFNKgUjL.js → index-1ReqxAnI.js} +29 -13
  246. package/dist/esm/loader.js +3 -3
  247. package/dist/esm/package-DZ5m2Ttg.js +3 -0
  248. package/dist/esm/post-accordion_2.entry.js +10 -10
  249. package/dist/esm/post-avatar.entry.js +6 -6
  250. package/dist/esm/post-back-to-top.entry.js +16 -40
  251. package/dist/esm/post-banner.entry.js +10 -9
  252. package/dist/esm/post-breadcrumb-item_2.entry.js +6 -6
  253. package/dist/esm/post-breadcrumbs.entry.js +20 -29
  254. package/dist/esm/post-card-control.entry.js +6 -6
  255. package/dist/esm/{post-closebutton_15.entry.js → post-closebutton_13.entry.js} +518 -486
  256. package/dist/esm/post-collapsible_2.entry.js +36 -35
  257. package/dist/esm/post-components.js +3 -3
  258. package/dist/esm/post-env-test.entry.js +13 -0
  259. package/dist/esm/post-footer.entry.js +18 -16
  260. package/dist/esm/post-linkarea.entry.js +3 -3
  261. package/dist/esm/post-pagination.entry.js +587 -0
  262. package/dist/esm/post-popover-trigger.entry.js +44 -28
  263. package/dist/esm/post-popover.entry.js +11 -11
  264. package/dist/esm/post-rating.entry.js +5 -5
  265. package/dist/esm/post-stepper-item.entry.js +16 -0
  266. package/dist/esm/post-stepper.entry.js +107 -0
  267. package/dist/esm/post-tab-item.entry.js +47 -0
  268. package/dist/esm/post-tab-panel.entry.js +9 -9
  269. package/dist/esm/post-tabs.entry.js +191 -38
  270. package/dist/esm/post-tooltip-trigger.entry.js +5 -5
  271. package/dist/esm/post-tooltip.entry.js +6 -6
  272. package/dist/esm/utils-CoDiS_Ik.js +24 -0
  273. package/dist/post-components/{p-8f0fc02a.entry.js → p-130eb074.entry.js} +1 -1
  274. package/dist/post-components/p-13d018fe.entry.js +1 -0
  275. package/dist/post-components/p-143e5a84.entry.js +1 -0
  276. package/dist/post-components/p-1ReqxAnI.js +2 -0
  277. package/dist/post-components/p-2b220851.entry.js +1 -0
  278. package/dist/post-components/{p-96750e25.entry.js → p-390f111f.entry.js} +1 -1
  279. package/dist/post-components/p-3cf09fbd.entry.js +1 -0
  280. package/dist/post-components/p-52e584ca.entry.js +1 -0
  281. package/dist/post-components/p-56a4040c.entry.js +1 -0
  282. package/dist/post-components/p-675dab57.entry.js +1 -0
  283. package/dist/post-components/p-6857fd9d.entry.js +1 -0
  284. package/dist/post-components/p-7cd00e3e.entry.js +1 -0
  285. package/dist/post-components/p-7f5d2487.entry.js +1 -0
  286. package/dist/post-components/{p-bf41fe56.entry.js → p-88201353.entry.js} +1 -1
  287. package/dist/post-components/p-89360cd1.entry.js +1 -0
  288. package/dist/post-components/p-B7ebLhHc.js +1 -0
  289. package/dist/post-components/p-BVCjnh6Q.js +1 -0
  290. package/dist/post-components/p-BXNs2_sw.js +1 -0
  291. package/dist/post-components/p-C9hMpmsD.js +1 -0
  292. package/dist/post-components/p-CEmnRoA6.js +1 -0
  293. package/dist/post-components/p-CoDiS_Ik.js +1 -0
  294. package/dist/post-components/p-D5knoiyy.js +1 -0
  295. package/dist/post-components/p-DI-h_mEL.js +1 -0
  296. package/dist/post-components/p-DZ5m2Ttg.js +1 -0
  297. package/dist/post-components/p-a740eaed.entry.js +1 -0
  298. package/dist/post-components/{p-261b1452.entry.js → p-a79590f5.entry.js} +1 -1
  299. package/dist/post-components/p-b708d96a.entry.js +1 -0
  300. package/dist/post-components/p-bcf5786f.entry.js +1 -0
  301. package/dist/post-components/p-c92512f5.entry.js +1 -0
  302. package/dist/post-components/{p-658b1ccc.entry.js → p-d7cb3a61.entry.js} +1 -1
  303. package/dist/post-components/p-d7f33813.entry.js +1 -0
  304. package/dist/post-components/p-da97ee21.entry.js +1 -0
  305. package/dist/post-components/{p-11c204e0.entry.js → p-ed4db774.entry.js} +1 -1
  306. package/dist/post-components/post-components.css +1 -1
  307. package/dist/post-components/post-components.esm.js +1 -1
  308. package/dist/prebuild.js +46 -0
  309. package/dist/types/animations/collapse.d.ts +1 -0
  310. package/dist/types/animations/fade-slide.d.ts +11 -0
  311. package/dist/types/animations/fade.d.ts +2 -2
  312. package/dist/types/animations/index.d.ts +2 -0
  313. package/dist/types/animations/slide.d.ts +9 -2
  314. package/dist/types/animations/types.d.ts +13 -0
  315. package/dist/types/animations/utils.d.ts +2 -0
  316. package/dist/types/components/post-accordion-item/heading-levels.d.ts +1 -1
  317. package/dist/types/components/post-accordion-item/post-accordion-item.d.ts +2 -2
  318. package/dist/types/components/post-back-to-top/post-back-to-top.d.ts +2 -2
  319. package/dist/types/components/post-breadcrumbs/post-breadcrumbs.d.ts +6 -6
  320. package/dist/types/components/post-collapsible/post-collapsible.d.ts +4 -5
  321. package/dist/types/components/post-collapsible-trigger/post-collapsible-trigger.d.ts +1 -0
  322. package/dist/types/components/post-footer/post-footer.d.ts +4 -4
  323. package/dist/types/components/post-header/post-header.d.ts +28 -19
  324. package/dist/types/components/{post-language-switch/post-language-switch.d.ts → post-language-menu/post-language-menu.d.ts} +6 -6
  325. package/dist/types/components/{post-language-option/post-language-option.d.ts → post-language-menu-item/post-language-menu-item.d.ts} +5 -5
  326. package/dist/types/components/post-mainnavigation/post-mainnavigation.d.ts +6 -5
  327. package/dist/types/components/post-megadropdown/post-megadropdown.d.ts +20 -2
  328. package/dist/types/components/post-megadropdown-trigger/post-megadropdown-trigger.d.ts +17 -23
  329. package/dist/types/components/post-menu/post-menu.d.ts +4 -4
  330. package/dist/types/components/post-pagination/post-pagination.d.ts +224 -0
  331. package/dist/types/components/post-popover/post-popover.d.ts +3 -3
  332. package/dist/types/components/post-popover-trigger/post-popover-trigger.d.ts +2 -1
  333. package/dist/types/components/post-popovercontainer/post-popovercontainer.d.ts +13 -16
  334. package/dist/types/components/post-rating/post-rating.d.ts +1 -1
  335. package/dist/types/components/post-stepper/post-stepper.d.ts +39 -0
  336. package/dist/types/components/post-stepper-item/post-stepper-item.d.ts +3 -0
  337. package/dist/types/components/post-tab-item/post-tab-item.d.ts +19 -0
  338. package/dist/types/components/post-tab-panel/post-tab-panel.d.ts +3 -3
  339. package/dist/types/components/post-tabs/post-tabs.d.ts +33 -12
  340. package/dist/types/components.d.ts +357 -186
  341. package/dist/types/home/runner/work/design-system/design-system/packages/components/.stencil/prebuild.d.ts +9 -0
  342. package/dist/types/types/heading-levels.d.ts +1 -1
  343. package/dist/types/utils/environment.d.ts +25 -1
  344. package/dist/types/utils/get-focusable-children.d.ts +2 -2
  345. package/dist/types/utils/tests/environment/hydrate-app-helper.d.ts +5 -0
  346. package/dist/types/utils/tests/environment/post-env-test.d.ts +3 -0
  347. package/hydrate/index.js +1882 -833
  348. package/hydrate/index.mjs +1882 -833
  349. package/package.json +9 -11
  350. package/dist/cjs/fade-nS5zzDQS.js +0 -14
  351. package/dist/cjs/index-DtvYdwe1.js +0 -96
  352. package/dist/cjs/post-tab-header.cjs.entry.js +0 -31
  353. package/dist/collection/animations/slide-and-fade.js +0 -25
  354. package/dist/collection/components/post-language-option/post-language-option.css +0 -1
  355. package/dist/collection/components/post-language-switch/post-language-switch.css +0 -1
  356. package/dist/collection/components/post-list/post-list.css +0 -1
  357. package/dist/collection/components/post-list/post-list.js +0 -97
  358. package/dist/collection/components/post-list-item/post-list-item.css +0 -1
  359. package/dist/collection/components/post-list-item/post-list-item.js +0 -26
  360. package/dist/collection/components/post-tab-header/post-tab-header.css +0 -1
  361. package/dist/collection/components/post-tab-header/post-tab-header.js +0 -65
  362. package/dist/components/index2.js +0 -88
  363. package/dist/components/post-language-option.d.ts +0 -11
  364. package/dist/components/post-language-option.js +0 -99
  365. package/dist/components/post-language-switch.js +0 -157
  366. package/dist/components/post-list-item.js +0 -38
  367. package/dist/components/post-list.js +0 -61
  368. package/dist/components/post-tab-header.js +0 -52
  369. package/dist/components/react/p-BXRsHuTS.js +0 -3
  370. package/dist/components/react/p-CV7fm1rW.js +0 -88
  371. package/dist/components/react/p-Dj7qWba5.js +0 -114
  372. package/dist/components/react/p-SbIC4aZX.js +0 -11
  373. package/dist/components/react/post-language-option.js +0 -100
  374. package/dist/components/react/post-language-switch.d.ts +0 -11
  375. package/dist/components/react/post-language-switch.js +0 -158
  376. package/dist/components/react/post-list-item.js +0 -39
  377. package/dist/components/react/post-list.js +0 -62
  378. package/dist/components/react/post-tab-header.js +0 -53
  379. package/dist/esm/fade-SbIC4aZX.js +0 -11
  380. package/dist/esm/index-VmK3ABCB.js +0 -88
  381. package/dist/esm/package-BXRsHuTS.js +0 -3
  382. package/dist/esm/post-tab-header.entry.js +0 -29
  383. package/dist/post-components/p-02ea3ec5.entry.js +0 -1
  384. package/dist/post-components/p-0e92dbef.entry.js +0 -1
  385. package/dist/post-components/p-0ec2bdd7.entry.js +0 -1
  386. package/dist/post-components/p-197a0f25.entry.js +0 -1
  387. package/dist/post-components/p-3274ab81.entry.js +0 -1
  388. package/dist/post-components/p-77e43032.entry.js +0 -1
  389. package/dist/post-components/p-BXRsHuTS.js +0 -1
  390. package/dist/post-components/p-CBFgkSgY.js +0 -1
  391. package/dist/post-components/p-CFNKgUjL.js +0 -2
  392. package/dist/post-components/p-CJ80BZ06.js +0 -1
  393. package/dist/post-components/p-D9ZHp2FP.js +0 -1
  394. package/dist/post-components/p-SbIC4aZX.js +0 -1
  395. package/dist/post-components/p-VmK3ABCB.js +0 -1
  396. package/dist/post-components/p-b5b5e4b9.entry.js +0 -1
  397. package/dist/post-components/p-b8059ba1.entry.js +0 -1
  398. package/dist/post-components/p-d6134e24.entry.js +0 -1
  399. package/dist/post-components/p-e7029b9e.entry.js +0 -1
  400. package/dist/post-components/p-e90688ab.entry.js +0 -1
  401. package/dist/post-components/p-ea5da614.entry.js +0 -1
  402. package/dist/post-components/p-f1b815b6.entry.js +0 -1
  403. package/dist/types/animations/slide-and-fade.d.ts +0 -2
  404. package/dist/types/components/post-list/post-list.d.ts +0 -24
  405. package/dist/types/components/post-list-item/post-list-item.d.ts +0 -8
  406. package/dist/types/components/post-tab-header/post-tab-header.d.ts +0 -14
  407. /package/dist/collection/components/{post-language-switch → post-language-menu}/switch-variants.js +0 -0
  408. /package/dist/post-components/{p-CzIKqBrS.js → p-rEfV4v4a.js} +0 -0
  409. /package/dist/types/components/{post-language-switch → post-language-menu}/switch-variants.d.ts +0 -0
@@ -0,0 +1,838 @@
1
+ import { Host, h, } from "@stencil/core";
2
+ import { version } from "../../../../package";
3
+ import { nanoid } from "nanoid";
4
+ import { checkEmptyOrType, checkRequiredAndType, debounce } from "../../utils/index";
5
+ const ELLIPSIS = '...';
6
+ const MEASUREMENT_DEBOUNCE_MS = 50;
7
+ const RESIZE_DEBOUNCE_MS = 150;
8
+ const MIN_VISIBLE_PAGES = 3;
9
+ const EDGE_ITEM_COUNT = 2; // Always show first and last page
10
+ const MAX_ELLIPSIS_COUNT = 2; // Maximum ellipsis elements
11
+ const GAP_THRESHOLD_FOR_PAGE = 2; // Show page number instead of ellipsis when gap is this value
12
+ const MIDDLE_RANGE_START = 2; // Middle range starts from page 2 (page 1 is always shown separately)
13
+ export class PostPagination {
14
+ constructor() {
15
+ this.items = [];
16
+ this.lastWindowWidth = window.innerWidth;
17
+ this.loaded = false;
18
+ this.debouncedResize = debounce(this.handleResizeInternal.bind(this), RESIZE_DEBOUNCE_MS);
19
+ this.measurementTimeoutId = null;
20
+ }
21
+ validatePage() {
22
+ this.validateProp('page', 'number', false);
23
+ }
24
+ validatePageSize() {
25
+ this.validateProp('pageSize', 'number', true);
26
+ }
27
+ validateCollectionSize() {
28
+ this.validateProp('collectionSize', 'number', true);
29
+ }
30
+ validateLabel() {
31
+ this.validateProp('label', 'string', true);
32
+ }
33
+ validateTextPrevious() {
34
+ this.validateProp('textPrevious', 'string', true);
35
+ }
36
+ validateTextNext() {
37
+ this.validateProp('textNext', 'string', true);
38
+ }
39
+ validateTextPage() {
40
+ this.validateProp('textPage', 'string', true);
41
+ }
42
+ validateTextFirst() {
43
+ this.validateProp('textFirst', 'string', true);
44
+ }
45
+ validateTextLast() {
46
+ this.validateProp('textLast', 'string', true);
47
+ }
48
+ validateDisabled() {
49
+ this.validateProp('disabled', 'boolean', false);
50
+ }
51
+ handlePropsChange() {
52
+ this.updatePagesWithValidation();
53
+ }
54
+ componentWillLoad() {
55
+ this.paginationId = `pagination-${this.host.id || nanoid(6)}`;
56
+ if (this.page == null) {
57
+ this.page = 1;
58
+ }
59
+ }
60
+ connectedCallback() {
61
+ window.addEventListener('resize', this.debouncedResize);
62
+ }
63
+ componentDidLoad() {
64
+ this.loaded = true;
65
+ this.runAllValidations();
66
+ this.scheduleMeasurement();
67
+ }
68
+ disconnectedCallback() {
69
+ this.loaded = false;
70
+ window.removeEventListener('resize', this.debouncedResize);
71
+ if (this.measurementTimeoutId !== null) {
72
+ clearTimeout(this.measurementTimeoutId);
73
+ this.measurementTimeoutId = null;
74
+ }
75
+ }
76
+ /**
77
+ * Validate a prop with the appropriate check function
78
+ */
79
+ validateProp(propName, type, required = true) {
80
+ if (required) {
81
+ checkRequiredAndType(this, propName, type);
82
+ }
83
+ else {
84
+ checkEmptyOrType(this, propName, type);
85
+ }
86
+ }
87
+ /**
88
+ * Run all prop validations
89
+ */
90
+ runAllValidations() {
91
+ this.validateProp('page', 'number', false);
92
+ this.validateProp('pageSize', 'number', true);
93
+ this.validateProp('collectionSize', 'number', true);
94
+ this.validateProp('label', 'string', true);
95
+ this.validateProp('textPrevious', 'string', true);
96
+ this.validateProp('textNext', 'string', true);
97
+ this.validateProp('textPage', 'string', true);
98
+ this.validateProp('textFirst', 'string', true);
99
+ this.validateProp('textLast', 'string', true);
100
+ this.validateProp('disabled', 'boolean', false);
101
+ }
102
+ /**
103
+ * Schedule measurement attempt with timeout
104
+ */
105
+ scheduleMeasurement() {
106
+ if (!this.loaded)
107
+ return;
108
+ this.measurementTimeoutId = window.setTimeout(() => {
109
+ const canMeasure = this.navRef?.clientWidth > 0 && this.hiddenItemsRef;
110
+ if (canMeasure) {
111
+ this.measureAndCalculateVisiblePages();
112
+ }
113
+ else {
114
+ this.scheduleMeasurement();
115
+ }
116
+ }, MEASUREMENT_DEBOUNCE_MS);
117
+ }
118
+ /**
119
+ * Internal resize handler
120
+ */
121
+ handleResizeInternal() {
122
+ if (!this.loaded)
123
+ return;
124
+ if (window.innerWidth === this.lastWindowWidth)
125
+ return;
126
+ this.lastWindowWidth = window.innerWidth;
127
+ this.measureAndCalculateVisiblePages();
128
+ }
129
+ /**
130
+ * Calculates gap between two elements
131
+ */
132
+ calculateGap(first, second) {
133
+ const firstRect = first.getBoundingClientRect();
134
+ const secondRect = second.getBoundingClientRect();
135
+ return secondRect.left - firstRect.right;
136
+ }
137
+ /**
138
+ * Measures actual rendered elements to determine how many pages can fit
139
+ */
140
+ measureAndCalculateVisiblePages() {
141
+ if (!this.navRef || !this.hiddenItemsRef || !this.loaded)
142
+ return;
143
+ const totalPages = this.getTotalPages();
144
+ if (totalPages <= 1)
145
+ return;
146
+ const paginationPadding = this.getPaginationPadding();
147
+ const availableWidth = this.getAvailableWidth();
148
+ const netWidth = availableWidth - paginationPadding;
149
+ const controlButtonsWidth = this.getControlButtonsWidth();
150
+ const pageButton = this.hiddenItemsRef.querySelector('.hidden-page-button');
151
+ const ellipsis = this.hiddenItemsRef.querySelector('.hidden-ellipsis');
152
+ if (!pageButton)
153
+ return;
154
+ const singleButtonWidth = pageButton.getBoundingClientRect().width;
155
+ const gap = pageButton && ellipsis ? this.calculateGap(pageButton, ellipsis) : 0;
156
+ const controlButtonGaps = gap * 2; // Gap after prev and before next
157
+ const widthForPages = netWidth - controlButtonsWidth - controlButtonGaps;
158
+ // Calculate how many page buttons can fit
159
+ const maxPages = Math.floor((widthForPages + gap) / (singleButtonWidth + gap));
160
+ const clampedMaxPages = Math.max(MIN_VISIBLE_PAGES, Math.min(maxPages, totalPages));
161
+ this.maxVisiblePages = clampedMaxPages;
162
+ this.updatePagesWithValidation();
163
+ }
164
+ /**
165
+ * Gets total width of control buttons (prev/next)
166
+ */
167
+ getControlButtonsWidth() {
168
+ if (!this.hiddenItemsRef)
169
+ return 0;
170
+ const controlButtons = Array.from(this.hiddenItemsRef.querySelectorAll('.hidden-control-button'));
171
+ const totalWidth = controlButtons.reduce((sum, el) => sum + el.getBoundingClientRect().width, 0);
172
+ return totalWidth;
173
+ }
174
+ /**
175
+ * Gets the horizontal padding of the pagination container
176
+ */
177
+ getPaginationPadding() {
178
+ if (!this.navRef)
179
+ return 0;
180
+ const computedStyle = window.getComputedStyle(this.navRef);
181
+ const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;
182
+ const paddingRight = parseFloat(computedStyle.paddingRight) || 0;
183
+ return paddingLeft + paddingRight;
184
+ }
185
+ /**
186
+ * Gets available width from parent container
187
+ */
188
+ getAvailableWidth() {
189
+ if (!this.navRef)
190
+ return 0;
191
+ return this.host.parentElement?.clientWidth ?? window.innerWidth;
192
+ }
193
+ /**
194
+ * Returns true if collection size or page size is invalid
195
+ */
196
+ get invalidSize() {
197
+ return this.collectionSize === 0 || this.pageSize === 0;
198
+ }
199
+ /**
200
+ * Clamps the page number to valid range
201
+ */
202
+ clampPageToValidRange(totalPages) {
203
+ const invalidTotalPages = totalPages === 0 || this.invalidSize || isNaN(totalPages);
204
+ const invalidPage = !this.page || this.page < 1 || isNaN(this.page);
205
+ const pageExceedsTotal = this.page > totalPages;
206
+ if (invalidTotalPages || invalidPage) {
207
+ return 1;
208
+ }
209
+ else if (pageExceedsTotal) {
210
+ return totalPages;
211
+ }
212
+ else {
213
+ return this.page;
214
+ }
215
+ }
216
+ /**
217
+ * Validates and updates pages with clamped page number
218
+ */
219
+ updatePagesWithValidation() {
220
+ const totalPages = this.getTotalPages();
221
+ this.page = this.clampPageToValidRange(totalPages);
222
+ this.generatePages(totalPages);
223
+ }
224
+ /**
225
+ * Calculates the total number of pages.
226
+ */
227
+ getTotalPages() {
228
+ if (this.invalidSize)
229
+ return 1;
230
+ return Math.ceil(this.collectionSize / this.pageSize);
231
+ }
232
+ /**
233
+ * Convert numeric gap to a section type
234
+ */
235
+ sectionForGap(gap) {
236
+ if (gap <= 1)
237
+ return 'none';
238
+ return gap === GAP_THRESHOLD_FOR_PAGE ? 'page' : 'ellipsis';
239
+ }
240
+ /**
241
+ * Compute the left/right sections and numeric gaps for a given range
242
+ */
243
+ getSections(startPage, endPage, totalPages) {
244
+ const leftGap = startPage - 1;
245
+ const rightGap = totalPages - endPage;
246
+ return {
247
+ leftSection: this.sectionForGap(leftGap),
248
+ rightSection: this.sectionForGap(rightGap),
249
+ leftGap,
250
+ rightGap,
251
+ };
252
+ }
253
+ /**
254
+ * Compute total items that would be rendered for a given range
255
+ */
256
+ computeTotalItems(startPage, endPage, totalPages) {
257
+ const { leftSection, rightSection } = this.getSections(startPage, endPage, totalPages);
258
+ const middle = Math.max(0, endPage - startPage + 1);
259
+ const leftCount = leftSection === 'none' ? 0 : 1;
260
+ const rightCount = rightSection === 'none' ? 0 : 1;
261
+ // Always include first page (1) and last page (totalPages) = EDGE_ITEM_COUNT pages
262
+ // Plus any left/right sections (ellipsis or pages) and middle pages
263
+ return EDGE_ITEM_COUNT + leftCount + rightCount + middle;
264
+ }
265
+ /**
266
+ * Build a full list of pages (1..totalPages)
267
+ */
268
+ buildAllPages(totalPages) {
269
+ const items = [];
270
+ for (let i = 1; i <= totalPages; i++) {
271
+ items.push({ type: 'page', page: i });
272
+ }
273
+ return items;
274
+ }
275
+ /**
276
+ * Adjust start/end pages to avoid gap=2 scenarios
277
+ */
278
+ adjustForGapTwo(startPage, endPage, totalPages, middleSlots) {
279
+ const adjusted = { startPage, endPage };
280
+ // Fix rightGap=GAP_THRESHOLD_FOR_PAGE to maintain visual consistency
281
+ const rightGap = totalPages - endPage;
282
+ if (rightGap === GAP_THRESHOLD_FOR_PAGE) {
283
+ adjusted.endPage = totalPages - 1;
284
+ adjusted.startPage = Math.max(MIDDLE_RANGE_START, adjusted.endPage - middleSlots + 1);
285
+ }
286
+ // Fix leftGap=GAP_THRESHOLD_FOR_PAGE to maintain symmetry
287
+ const leftGap = adjusted.startPage - 1;
288
+ if (leftGap === GAP_THRESHOLD_FOR_PAGE) {
289
+ adjusted.startPage = MIDDLE_RANGE_START;
290
+ adjusted.endPage = Math.min(totalPages - 1, adjusted.startPage + middleSlots - 1);
291
+ }
292
+ return adjusted;
293
+ }
294
+ /**
295
+ * Ensure we have the desired number of middle slots
296
+ */
297
+ ensureMiddleSlots(startPage, endPage, totalPages, middleSlots) {
298
+ const adjusted = { startPage, endPage };
299
+ const actualSlots = endPage - startPage + 1;
300
+ if (actualSlots < middleSlots && endPage < totalPages - 1) {
301
+ adjusted.endPage = Math.min(totalPages - 1, startPage + middleSlots - 1);
302
+ }
303
+ if (actualSlots < middleSlots && startPage > MIDDLE_RANGE_START) {
304
+ adjusted.startPage = Math.max(MIDDLE_RANGE_START, endPage - middleSlots + 1);
305
+ }
306
+ return adjusted;
307
+ }
308
+ /**
309
+ * Trim excess items by shrinking the range away from current page
310
+ */
311
+ trimExcessItems(startPage, endPage, totalPages, maxVisible, currentPage) {
312
+ const adjusted = { startPage, endPage };
313
+ let totalItems = this.computeTotalItems(adjusted.startPage, adjusted.endPage, totalPages);
314
+ while (totalItems > maxVisible) {
315
+ const distLeft = currentPage - adjusted.startPage;
316
+ const distRight = adjusted.endPage - currentPage;
317
+ if (distRight >= distLeft && adjusted.endPage > adjusted.startPage) {
318
+ adjusted.endPage = Math.max(adjusted.startPage - 1, adjusted.endPage - 1);
319
+ }
320
+ else if (adjusted.startPage < adjusted.endPage) {
321
+ adjusted.startPage = Math.min(adjusted.endPage + 1, adjusted.startPage + 1);
322
+ }
323
+ else {
324
+ break;
325
+ }
326
+ const newTotal = this.computeTotalItems(adjusted.startPage, adjusted.endPage, totalPages);
327
+ if (newTotal === totalItems)
328
+ break;
329
+ totalItems = newTotal;
330
+ }
331
+ return adjusted;
332
+ }
333
+ /**
334
+ * Expand range to fill available slots
335
+ */
336
+ expandToFillSlots(startPage, endPage, totalPages, maxVisible) {
337
+ const adjusted = { startPage, endPage };
338
+ let totalItems = this.computeTotalItems(adjusted.startPage, adjusted.endPage, totalPages);
339
+ while (totalItems < maxVisible) {
340
+ const canExpandLeft = adjusted.startPage > MIDDLE_RANGE_START;
341
+ const canExpandRight = adjusted.endPage < totalPages - 1;
342
+ if (canExpandLeft) {
343
+ adjusted.startPage = Math.max(MIDDLE_RANGE_START, adjusted.startPage - 1);
344
+ }
345
+ else if (canExpandRight) {
346
+ adjusted.endPage = Math.min(totalPages - 1, adjusted.endPage + 1);
347
+ }
348
+ else {
349
+ break;
350
+ }
351
+ const newTotal = this.computeTotalItems(adjusted.startPage, adjusted.endPage, totalPages);
352
+ if (newTotal === totalItems)
353
+ break;
354
+ totalItems = newTotal;
355
+ }
356
+ return adjusted;
357
+ }
358
+ /**
359
+ * Balance total items to match maxVisible by trimming or expanding
360
+ */
361
+ balanceTotalItems(startPage, endPage, totalPages, maxVisible, currentPage) {
362
+ const trimmed = this.trimExcessItems(startPage, endPage, totalPages, maxVisible, currentPage);
363
+ return this.expandToFillSlots(trimmed.startPage, trimmed.endPage, totalPages, maxVisible);
364
+ }
365
+ /**
366
+ * Calculate optimal page range centered around current page
367
+ */
368
+ calculatePageRange(currentPage, totalPages, maxVisible) {
369
+ // Reserve slots for first, last, and potential ellipses
370
+ const middleSlots = Math.max(0, maxVisible - EDGE_ITEM_COUNT - MAX_ELLIPSIS_COUNT);
371
+ if (middleSlots <= 0) {
372
+ return { startPage: MIDDLE_RANGE_START, endPage: 1 };
373
+ }
374
+ // Center around current page
375
+ const halfMiddle = Math.floor(middleSlots / 2);
376
+ let startPage = currentPage - halfMiddle;
377
+ let endPage = startPage + middleSlots - 1;
378
+ // Clamp to valid range
379
+ if (startPage < MIDDLE_RANGE_START) {
380
+ startPage = MIDDLE_RANGE_START;
381
+ endPage = startPage + middleSlots - 1;
382
+ }
383
+ if (endPage > totalPages - 1) {
384
+ endPage = totalPages - 1;
385
+ startPage = endPage - middleSlots + 1;
386
+ }
387
+ startPage = Math.max(MIDDLE_RANGE_START, startPage);
388
+ endPage = Math.min(totalPages - 1, endPage);
389
+ // Adjust for gap=2 scenarios and balance items
390
+ const gapAdjusted = this.adjustForGapTwo(startPage, endPage, totalPages, middleSlots);
391
+ const slotAdjusted = this.ensureMiddleSlots(gapAdjusted.startPage, gapAdjusted.endPage, totalPages, middleSlots);
392
+ return this.balanceTotalItems(slotAdjusted.startPage, slotAdjusted.endPage, totalPages, maxVisible, currentPage);
393
+ }
394
+ /**
395
+ * Build pagination items with ellipsis
396
+ */
397
+ buildPaginationItems(startPage, endPage, totalPages) {
398
+ const items = [];
399
+ const hasMiddlePages = startPage <= endPage;
400
+ // First page
401
+ items.push({ type: 'page', page: 1 });
402
+ if (hasMiddlePages) {
403
+ const { leftSection, rightSection } = this.getSections(startPage, endPage, totalPages);
404
+ // Left section (ellipsis or page 2)
405
+ if (leftSection === 'page') {
406
+ items.push({ type: 'page', page: 2 });
407
+ }
408
+ else if (leftSection === 'ellipsis') {
409
+ items.push({ type: 'ellipsis' });
410
+ }
411
+ // Middle pages
412
+ for (let i = startPage; i <= endPage; i++) {
413
+ items.push({ type: 'page', page: i });
414
+ }
415
+ // Right section (ellipsis or second-to-last page)
416
+ if (rightSection === 'page') {
417
+ items.push({ type: 'page', page: totalPages - 1 });
418
+ }
419
+ else if (rightSection === 'ellipsis') {
420
+ items.push({ type: 'ellipsis' });
421
+ }
422
+ // Last page
423
+ items.push({ type: 'page', page: totalPages });
424
+ return items;
425
+ }
426
+ }
427
+ /**
428
+ * Generates pagination items for small slot counts (3 or 4 items).
429
+ * Ensures current page is always visible.
430
+ */
431
+ generateSmallPagination(currentPage, totalPages) {
432
+ if (currentPage === 1 || currentPage === totalPages) {
433
+ return [{ type: 'page', page: 1 }, { type: 'ellipsis' }, { type: 'page', page: totalPages }];
434
+ }
435
+ return [{ type: 'ellipsis' }, { type: 'page', page: currentPage }, { type: 'ellipsis' }];
436
+ }
437
+ /**
438
+ * Generates the page numbers array with ellipsis based on available space.
439
+ */
440
+ generatePages(totalPages) {
441
+ const maxVisible = this.maxVisiblePages;
442
+ const currentPage = this.page || 1;
443
+ if (totalPages <= maxVisible) {
444
+ this.items = this.buildAllPages(totalPages);
445
+ return;
446
+ }
447
+ // Use simplified logic for small slot counts
448
+ if (maxVisible <= 4) {
449
+ this.items = this.generateSmallPagination(currentPage, totalPages);
450
+ return;
451
+ }
452
+ // Use full algorithm for larger slot counts
453
+ const { startPage, endPage } = this.calculatePageRange(currentPage, totalPages, maxVisible);
454
+ this.items = this.buildPaginationItems(startPage, endPage, totalPages);
455
+ }
456
+ /**
457
+ * Emit page change event and update page
458
+ */
459
+ emitPageChange(newPage) {
460
+ this.page = newPage;
461
+ this.postChange.emit(newPage);
462
+ }
463
+ /**
464
+ * Handles page change when a page button is clicked.
465
+ */
466
+ handlePageClick(pageNumber) {
467
+ if (this.disabled || pageNumber === this.page)
468
+ return;
469
+ this.emitPageChange(pageNumber);
470
+ }
471
+ /**
472
+ * Handles previous button click.
473
+ */
474
+ handlePrevious() {
475
+ if (this.disabled || this.page <= 1)
476
+ return;
477
+ this.emitPageChange(this.page - 1);
478
+ }
479
+ /**
480
+ * Handles next button click.
481
+ */
482
+ handleNext() {
483
+ const totalPages = this.getTotalPages();
484
+ if (this.disabled || this.page >= totalPages)
485
+ return;
486
+ this.emitPageChange(this.page + 1);
487
+ }
488
+ /**
489
+ * Handles keyboard navigation
490
+ */
491
+ handleKeyDown(event, action) {
492
+ if (event.key === 'Enter' || event.key === ' ') {
493
+ event.preventDefault();
494
+ action();
495
+ }
496
+ }
497
+ /**
498
+ * Builds accessible label for a page button.
499
+ */
500
+ buildPageLabel(pageNumber) {
501
+ const totalPages = this.getTotalPages();
502
+ if (pageNumber === 1) {
503
+ return `${this.textFirst}, ${this.textPage} ${pageNumber}`;
504
+ }
505
+ if (pageNumber === totalPages) {
506
+ return `${this.textLast}, ${this.textPage} ${pageNumber}`;
507
+ }
508
+ return `${this.textPage} ${pageNumber}`;
509
+ }
510
+ /**
511
+ * Renders an ellipsis item.
512
+ */
513
+ renderEllipsis(key) {
514
+ return (h("li", { class: "pagination-item pagination-ellipsis", key: key }, h("span", { class: "pagination-ellipsis-content", "aria-hidden": "true" }, ELLIPSIS)));
515
+ }
516
+ /**
517
+ * Renders a page button.
518
+ */
519
+ renderPageButton(pageNumber) {
520
+ const isCurrent = pageNumber === this.page;
521
+ return (h("li", { class: "pagination-item", key: `page-${pageNumber}` }, h("button", { type: "button", class: {
522
+ 'pagination-link': true,
523
+ 'pagination-link-active': isCurrent,
524
+ }, "aria-label": this.buildPageLabel(pageNumber), "aria-current": isCurrent ? 'page' : undefined, onClick: () => this.handlePageClick(pageNumber), onKeyDown: e => this.handleKeyDown(e, () => this.handlePageClick(pageNumber)), disabled: this.disabled ? true : undefined, tabIndex: this.disabled ? -1 : 0 }, h("span", { "aria-hidden": "true" }, pageNumber))));
525
+ }
526
+ /**
527
+ * Renders a pagination item.
528
+ */
529
+ renderItem(item, index) {
530
+ return item.type === 'ellipsis'
531
+ ? this.renderEllipsis(`ellipsis-${index}`)
532
+ : this.renderPageButton(item.page);
533
+ }
534
+ /**
535
+ * Renders control button (prev/next)
536
+ */
537
+ renderControlButton(iconName, label, isDisabled, onClick, rotateIcon = false) {
538
+ return (h("li", { class: "pagination-item pagination-control" }, h("button", { type: "button", class: {
539
+ 'pagination-link': true,
540
+ 'pagination-control-button': true,
541
+ 'pagination-link-disabled': isDisabled,
542
+ }, "aria-label": label, onClick: onClick, onKeyDown: e => this.handleKeyDown(e, onClick), disabled: isDisabled, tabIndex: isDisabled ? -1 : 0 }, h("post-icon", { name: iconName, class: rotateIcon ? 'pagination-icon-rotated' : undefined, "aria-hidden": "true" }), h("span", { class: "visually-hidden" }, label))));
543
+ }
544
+ /**
545
+ * Renders minimal hidden items for measurement
546
+ */
547
+ renderHiddenItems(totalPages) {
548
+ return [
549
+ h("button", { class: "pagination-link pagination-control-button hidden-control-button", disabled: true }, h("post-icon", { name: "chevronleft", "aria-hidden": "true" })),
550
+ h("button", { class: "pagination-link pagination-control-button hidden-page-button", "aria-label": this.buildPageLabel(totalPages), disabled: true }, h("span", { "aria-hidden": "true" }, totalPages)),
551
+ h("span", { class: "pagination-ellipsis-content hidden-ellipsis", "aria-hidden": "true" }, ELLIPSIS),
552
+ h("button", { class: "pagination-link pagination-control-button hidden-control-button", disabled: true }, h("post-icon", { name: "chevronleft", class: "pagination-icon-rotated", "aria-hidden": "true" })),
553
+ ];
554
+ }
555
+ render() {
556
+ const totalPages = this.getTotalPages();
557
+ if (totalPages <= 1) {
558
+ return null;
559
+ }
560
+ const isPrevDisabled = this.disabled || this.page <= 1;
561
+ const isNextDisabled = this.disabled || this.page >= totalPages;
562
+ return (h(Host, { slot: "post-pagination", "data-version": version }, h("nav", { class: "pagination", "aria-label": this.label, id: this.paginationId, ref: el => (this.navRef = el) }, h("ul", { class: "pagination-list", role: "list" }, this.renderControlButton('chevronleft', this.textPrevious, isPrevDisabled, () => this.handlePrevious()), this.items.map((item, index) => this.renderItem(item, index)), this.renderControlButton('chevronleft', this.textNext, isNextDisabled, () => this.handleNext(), true)), h("div", { class: "hidden-items", "aria-hidden": "true", ref: el => (this.hiddenItemsRef = el) }, this.renderHiddenItems(totalPages)))));
563
+ }
564
+ static get is() { return "post-pagination"; }
565
+ static get encapsulation() { return "shadow"; }
566
+ static get originalStyleUrls() {
567
+ return {
568
+ "$": ["./post-pagination.scss"]
569
+ };
570
+ }
571
+ static get styleUrls() {
572
+ return {
573
+ "$": ["post-pagination.css"]
574
+ };
575
+ }
576
+ static get properties() {
577
+ return {
578
+ "page": {
579
+ "type": "number",
580
+ "attribute": "page",
581
+ "mutable": true,
582
+ "complexType": {
583
+ "original": "number",
584
+ "resolved": "number",
585
+ "references": {}
586
+ },
587
+ "required": false,
588
+ "optional": true,
589
+ "docs": {
590
+ "tags": [],
591
+ "text": "The current active page number.\n\n**If not specified, defaults to the first page.**"
592
+ },
593
+ "getter": false,
594
+ "setter": false,
595
+ "reflect": false
596
+ },
597
+ "pageSize": {
598
+ "type": "number",
599
+ "attribute": "page-size",
600
+ "mutable": false,
601
+ "complexType": {
602
+ "original": "number",
603
+ "resolved": "number",
604
+ "references": {}
605
+ },
606
+ "required": true,
607
+ "optional": false,
608
+ "docs": {
609
+ "tags": [],
610
+ "text": "The number of items per page."
611
+ },
612
+ "getter": false,
613
+ "setter": false,
614
+ "reflect": true
615
+ },
616
+ "collectionSize": {
617
+ "type": "number",
618
+ "attribute": "collection-size",
619
+ "mutable": false,
620
+ "complexType": {
621
+ "original": "number",
622
+ "resolved": "number",
623
+ "references": {}
624
+ },
625
+ "required": true,
626
+ "optional": false,
627
+ "docs": {
628
+ "tags": [],
629
+ "text": "The total number of items in the collection."
630
+ },
631
+ "getter": false,
632
+ "setter": false,
633
+ "reflect": true
634
+ },
635
+ "label": {
636
+ "type": "string",
637
+ "attribute": "label",
638
+ "mutable": false,
639
+ "complexType": {
640
+ "original": "string",
641
+ "resolved": "string",
642
+ "references": {}
643
+ },
644
+ "required": true,
645
+ "optional": false,
646
+ "docs": {
647
+ "tags": [],
648
+ "text": "A descriptive label for the pagination navigation, used by assistive technologies."
649
+ },
650
+ "getter": false,
651
+ "setter": false,
652
+ "reflect": true
653
+ },
654
+ "textPrevious": {
655
+ "type": "string",
656
+ "attribute": "text-previous",
657
+ "mutable": false,
658
+ "complexType": {
659
+ "original": "string",
660
+ "resolved": "string",
661
+ "references": {}
662
+ },
663
+ "required": true,
664
+ "optional": false,
665
+ "docs": {
666
+ "tags": [],
667
+ "text": "Accessible label for the previous page button."
668
+ },
669
+ "getter": false,
670
+ "setter": false,
671
+ "reflect": true
672
+ },
673
+ "textNext": {
674
+ "type": "string",
675
+ "attribute": "text-next",
676
+ "mutable": false,
677
+ "complexType": {
678
+ "original": "string",
679
+ "resolved": "string",
680
+ "references": {}
681
+ },
682
+ "required": true,
683
+ "optional": false,
684
+ "docs": {
685
+ "tags": [],
686
+ "text": "Accessible label for the next page button."
687
+ },
688
+ "getter": false,
689
+ "setter": false,
690
+ "reflect": true
691
+ },
692
+ "textPage": {
693
+ "type": "string",
694
+ "attribute": "text-page",
695
+ "mutable": false,
696
+ "complexType": {
697
+ "original": "string",
698
+ "resolved": "string",
699
+ "references": {}
700
+ },
701
+ "required": true,
702
+ "optional": false,
703
+ "docs": {
704
+ "tags": [],
705
+ "text": "Prefix text for page number labels."
706
+ },
707
+ "getter": false,
708
+ "setter": false,
709
+ "reflect": true
710
+ },
711
+ "textFirst": {
712
+ "type": "string",
713
+ "attribute": "text-first",
714
+ "mutable": false,
715
+ "complexType": {
716
+ "original": "string",
717
+ "resolved": "string",
718
+ "references": {}
719
+ },
720
+ "required": true,
721
+ "optional": false,
722
+ "docs": {
723
+ "tags": [],
724
+ "text": "Prefix text for the first page label."
725
+ },
726
+ "getter": false,
727
+ "setter": false,
728
+ "reflect": true
729
+ },
730
+ "textLast": {
731
+ "type": "string",
732
+ "attribute": "text-last",
733
+ "mutable": false,
734
+ "complexType": {
735
+ "original": "string",
736
+ "resolved": "string",
737
+ "references": {}
738
+ },
739
+ "required": true,
740
+ "optional": false,
741
+ "docs": {
742
+ "tags": [],
743
+ "text": "Prefix text for the last page label."
744
+ },
745
+ "getter": false,
746
+ "setter": false,
747
+ "reflect": true
748
+ },
749
+ "disabled": {
750
+ "type": "boolean",
751
+ "attribute": "disabled",
752
+ "mutable": false,
753
+ "complexType": {
754
+ "original": "boolean",
755
+ "resolved": "boolean",
756
+ "references": {}
757
+ },
758
+ "required": false,
759
+ "optional": true,
760
+ "docs": {
761
+ "tags": [],
762
+ "text": "If true, the pagination is disabled."
763
+ },
764
+ "getter": false,
765
+ "setter": false,
766
+ "reflect": false
767
+ }
768
+ };
769
+ }
770
+ static get states() {
771
+ return {
772
+ "paginationId": {},
773
+ "maxVisiblePages": {},
774
+ "items": {}
775
+ };
776
+ }
777
+ static get events() {
778
+ return [{
779
+ "method": "postChange",
780
+ "name": "postChange",
781
+ "bubbles": true,
782
+ "cancelable": true,
783
+ "composed": true,
784
+ "docs": {
785
+ "tags": [],
786
+ "text": "Event emitted when the page changes."
787
+ },
788
+ "complexType": {
789
+ "original": "number",
790
+ "resolved": "number",
791
+ "references": {}
792
+ }
793
+ }];
794
+ }
795
+ static get elementRef() { return "host"; }
796
+ static get watchers() {
797
+ return [{
798
+ "propName": "page",
799
+ "methodName": "validatePage"
800
+ }, {
801
+ "propName": "pageSize",
802
+ "methodName": "validatePageSize"
803
+ }, {
804
+ "propName": "collectionSize",
805
+ "methodName": "validateCollectionSize"
806
+ }, {
807
+ "propName": "label",
808
+ "methodName": "validateLabel"
809
+ }, {
810
+ "propName": "textPrevious",
811
+ "methodName": "validateTextPrevious"
812
+ }, {
813
+ "propName": "textNext",
814
+ "methodName": "validateTextNext"
815
+ }, {
816
+ "propName": "textPage",
817
+ "methodName": "validateTextPage"
818
+ }, {
819
+ "propName": "textFirst",
820
+ "methodName": "validateTextFirst"
821
+ }, {
822
+ "propName": "textLast",
823
+ "methodName": "validateTextLast"
824
+ }, {
825
+ "propName": "disabled",
826
+ "methodName": "validateDisabled"
827
+ }, {
828
+ "propName": "page",
829
+ "methodName": "handlePropsChange"
830
+ }, {
831
+ "propName": "pageSize",
832
+ "methodName": "handlePropsChange"
833
+ }, {
834
+ "propName": "collectionSize",
835
+ "methodName": "handlePropsChange"
836
+ }];
837
+ }
838
+ }