@swisspost/design-system-components 10.0.0-next.55 → 10.0.0-next.57

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 (443) 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-B4gYpuJF.js → index-B4rc1pqu.js} +2150 -292
  10. package/dist/cjs/loader.cjs.js +2 -2
  11. package/dist/cjs/{package-DkJrv93P.js → package-uQ5oiSiN.js} +1 -1
  12. package/dist/cjs/post-accordion_2.cjs.entry.js +19 -15
  13. package/dist/cjs/post-avatar.cjs.entry.js +27 -17
  14. package/dist/cjs/post-back-to-top.cjs.entry.js +23 -43
  15. package/dist/cjs/post-banner.cjs.entry.js +15 -12
  16. package/dist/cjs/post-breadcrumb-item_2.cjs.entry.js +14 -12
  17. package/dist/cjs/post-breadcrumbs.cjs.entry.js +33 -34
  18. package/dist/cjs/post-card-control.cjs.entry.js +42 -26
  19. package/dist/cjs/{post-closebutton_15.cjs.entry.js → post-closebutton_13.cjs.entry.js} +618 -531
  20. package/dist/cjs/post-collapsible_2.cjs.entry.js +41 -37
  21. package/dist/cjs/post-components.cjs.js +3 -3
  22. package/dist/cjs/post-env-test.cjs.entry.js +15 -0
  23. package/dist/cjs/post-footer.cjs.entry.js +24 -20
  24. package/dist/cjs/post-linkarea.cjs.entry.js +5 -5
  25. package/dist/cjs/post-pagination.cjs.entry.js +615 -0
  26. package/dist/cjs/post-popover-trigger.cjs.entry.js +54 -34
  27. package/dist/cjs/post-popover.cjs.entry.js +26 -17
  28. package/dist/cjs/post-rating.cjs.entry.js +24 -18
  29. package/dist/cjs/post-stepper-item.cjs.entry.js +5 -5
  30. package/dist/cjs/post-stepper.cjs.entry.js +40 -29
  31. package/dist/cjs/post-tab-item.cjs.entry.js +51 -0
  32. package/dist/cjs/post-tab-panel.cjs.entry.js +13 -11
  33. package/dist/cjs/post-tabs.cjs.entry.js +195 -40
  34. package/dist/cjs/post-tooltip-trigger.cjs.entry.js +13 -11
  35. package/dist/cjs/post-tooltip.cjs.entry.js +14 -12
  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 -8
  45. package/dist/collection/components/post-accordion/post-accordion.css +1 -1
  46. package/dist/collection/components/post-accordion/post-accordion.js +5 -4
  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 +9 -8
  49. package/dist/collection/components/post-avatar/post-avatar.js +11 -11
  50. package/dist/collection/components/post-back-to-top/post-back-to-top.js +15 -15
  51. package/dist/collection/components/post-banner/post-banner.css +4 -1
  52. package/dist/collection/components/post-banner/post-banner.js +6 -5
  53. package/dist/collection/components/post-breadcrumb-item/post-breadcrumb-item.js +3 -3
  54. package/dist/collection/components/post-breadcrumbs/post-breadcrumbs.js +29 -29
  55. package/dist/collection/components/post-card-control/post-card-control.js +18 -18
  56. package/dist/collection/components/post-closebutton/post-closebutton.css +1 -1
  57. package/dist/collection/components/post-closebutton/post-closebutton.js +4 -3
  58. package/dist/collection/components/post-collapsible/post-collapsible.js +28 -28
  59. package/dist/collection/components/post-collapsible-trigger/post-collapsible-trigger.js +3 -3
  60. package/dist/collection/components/post-footer/post-footer.css +1 -1
  61. package/dist/collection/components/post-footer/post-footer.js +18 -16
  62. package/dist/collection/components/post-header/post-header.css +1 -1
  63. package/dist/collection/components/post-header/post-header.js +144 -82
  64. package/dist/collection/components/post-icon/post-icon.js +18 -16
  65. package/dist/collection/components/post-language-menu/post-language-menu.css +1 -0
  66. package/dist/collection/components/{post-language-switch/post-language-switch.js → post-language-menu/post-language-menu.js} +45 -36
  67. package/dist/collection/components/post-language-menu-item/post-language-menu-item.css +1 -0
  68. package/dist/collection/components/{post-language-option/post-language-option.js → post-language-menu-item/post-language-menu-item.js} +24 -23
  69. package/dist/collection/components/post-linkarea/post-linkarea.js +1 -1
  70. package/dist/collection/components/post-logo/post-logo.css +3 -1
  71. package/dist/collection/components/post-logo/post-logo.js +3 -3
  72. package/dist/collection/components/post-mainnavigation/post-mainnavigation.css +1 -1
  73. package/dist/collection/components/post-mainnavigation/post-mainnavigation.js +41 -29
  74. package/dist/collection/components/post-megadropdown/post-megadropdown.css +1 -1
  75. package/dist/collection/components/post-megadropdown/post-megadropdown.js +183 -74
  76. package/dist/collection/components/post-megadropdown-trigger/post-megadropdown-trigger.css +3 -1
  77. package/dist/collection/components/post-megadropdown-trigger/post-megadropdown-trigger.js +81 -75
  78. package/dist/collection/components/post-menu/post-menu.css +1 -1
  79. package/dist/collection/components/post-menu/post-menu.js +39 -38
  80. package/dist/collection/components/post-menu-item/post-menu-item.js +1 -1
  81. package/dist/collection/components/post-menu-trigger/post-menu-trigger.js +3 -3
  82. package/dist/collection/components/post-pagination/post-pagination.css +1 -0
  83. package/dist/collection/components/post-pagination/post-pagination.js +838 -0
  84. package/dist/collection/components/post-popover/post-popover.js +22 -16
  85. package/dist/collection/components/post-popover-trigger/post-popover-trigger.js +45 -29
  86. package/dist/collection/components/post-popovercontainer/post-popovercontainer.css +1 -1
  87. package/dist/collection/components/post-popovercontainer/post-popovercontainer.js +82 -131
  88. package/dist/collection/components/post-rating/post-rating.js +7 -7
  89. package/dist/collection/components/post-stepper/post-stepper.js +38 -35
  90. package/dist/collection/components/post-stepper-item/post-stepper-item.css +2 -2
  91. package/dist/collection/components/post-stepper-item/post-stepper-item.js +1 -1
  92. package/dist/collection/components/post-tab-item/post-tab-item.css +1 -0
  93. package/dist/collection/components/post-tab-item/post-tab-item.js +86 -0
  94. package/dist/collection/components/post-tab-panel/post-tab-panel.js +10 -10
  95. package/dist/collection/components/post-tabs/post-tabs.js +232 -59
  96. package/dist/collection/components/post-togglebutton/post-togglebutton.js +2 -2
  97. package/dist/collection/components/post-tooltip/post-tooltip.js +9 -27
  98. package/dist/collection/components/post-tooltip-trigger/post-tooltip-trigger.js +4 -4
  99. package/dist/collection/utils/environment.js +47 -2
  100. package/dist/collection/utils/event-from.js +2 -2
  101. package/dist/collection/utils/get-focusable-children.js +29 -21
  102. package/dist/collection/utils/is-motion-reduced.js +1 -1
  103. package/dist/collection/utils/tests/environment/hydrate-app-helper.js +16 -0
  104. package/dist/collection/utils/tests/environment/post-env-test.js +9 -0
  105. package/dist/component-names.json +4 -5
  106. package/dist/components/breakpoints.js +1 -178
  107. package/dist/components/debounce.js +1 -0
  108. package/dist/components/environment.js +1 -0
  109. package/dist/components/event-from.js +1 -119
  110. package/dist/components/fade-slide.js +1 -0
  111. package/dist/components/fade.js +1 -11
  112. package/dist/components/focusable.js +1 -5018
  113. package/dist/components/get-focusable-children.js +1 -64
  114. package/dist/components/get-root.js +1 -15
  115. package/dist/components/heading-levels.js +1 -3
  116. package/dist/components/index.browser.js +1 -14
  117. package/dist/components/index.d.ts +11 -10
  118. package/dist/components/index.js +1 -39
  119. package/dist/components/long-press-event.js +1 -257
  120. package/dist/components/package.js +1 -3
  121. package/dist/components/post-accordion-item.js +1 -6
  122. package/dist/components/post-accordion-item2.js +1 -113
  123. package/dist/components/post-accordion.js +1 -6
  124. package/dist/components/post-accordion2.js +1 -138
  125. package/dist/components/post-avatar.js +1 -217
  126. package/dist/components/post-back-to-top.js +1 -144
  127. package/dist/components/post-banner.js +1 -98
  128. package/dist/components/post-breadcrumb-item.js +1 -6
  129. package/dist/components/post-breadcrumb-item2.js +1 -79
  130. package/dist/components/post-breadcrumbs.js +1 -196
  131. package/dist/components/post-card-control.js +1 -326
  132. package/dist/components/post-closebutton.js +1 -6
  133. package/dist/components/post-closebutton2.js +1 -77
  134. package/dist/components/post-collapsible-trigger.js +1 -6
  135. package/dist/components/post-collapsible-trigger2.js +1 -136
  136. package/dist/components/post-collapsible.js +1 -6
  137. package/dist/components/post-collapsible2.js +1 -110
  138. package/dist/components/{post-list.d.ts → post-env-test.d.ts} +4 -4
  139. package/dist/components/post-env-test.js +1 -0
  140. package/dist/components/post-footer.js +1 -116
  141. package/dist/components/post-header.js +1 -372
  142. package/dist/components/post-icon.js +1 -6
  143. package/dist/components/post-icon2.js +1 -159
  144. package/dist/components/post-language-menu-item.d.ts +11 -0
  145. package/dist/components/post-language-menu-item.js +1 -0
  146. package/dist/components/{post-language-switch.d.ts → post-language-menu.d.ts} +4 -4
  147. package/dist/components/post-language-menu.js +1 -0
  148. package/dist/components/post-linkarea.js +1 -58
  149. package/dist/components/post-logo.js +1 -58
  150. package/dist/components/post-mainnavigation.js +1 -180
  151. package/dist/components/post-megadropdown-trigger.js +1 -136
  152. package/dist/components/post-megadropdown.js +1 -267
  153. package/dist/components/post-menu-item.js +1 -6
  154. package/dist/components/post-menu-item2.js +1 -30
  155. package/dist/components/post-menu-trigger.js +1 -6
  156. package/dist/components/post-menu-trigger2.js +1 -110
  157. package/dist/components/post-menu.js +1 -6
  158. package/dist/components/post-menu2.js +1 -242
  159. package/dist/components/{post-tab-header.d.ts → post-pagination.d.ts} +4 -4
  160. package/dist/components/post-pagination.js +1 -0
  161. package/dist/components/post-popover-trigger.js +1 -132
  162. package/dist/components/post-popover.js +1 -118
  163. package/dist/components/post-popovercontainer.js +1 -6
  164. package/dist/components/post-popovercontainer2.js +1 -3127
  165. package/dist/components/post-rating.js +1 -148
  166. package/dist/components/post-stepper-item.js +1 -33
  167. package/dist/components/post-stepper.js +1 -134
  168. package/dist/components/{post-list-item.d.ts → post-tab-item.d.ts} +4 -4
  169. package/dist/components/post-tab-item.js +1 -0
  170. package/dist/components/post-tab-panel.js +1 -54
  171. package/dist/components/post-tabs.js +1 -196
  172. package/dist/components/post-togglebutton.js +1 -56
  173. package/dist/components/post-togglebutton2.js +1 -0
  174. package/dist/components/post-tooltip-trigger.js +1 -206
  175. package/dist/components/post-tooltip.js +1 -114
  176. package/dist/components/react/index.d.ts +2 -0
  177. package/dist/components/react/index.js +1 -2315
  178. package/dist/components/react/p-B8YiQ3mz.js +1 -0
  179. package/dist/components/react/p-BC5nlBvn.js +1 -0
  180. package/dist/components/react/p-BLchVpF6.js +1 -14
  181. package/dist/components/react/p-BVCjnh6Q.js +1 -0
  182. package/dist/{post-components/p-CBFgkSgY.js → components/react/p-BVGcVycs.js} +1 -1
  183. package/dist/components/react/p-B_XPj2c8.js +1 -0
  184. package/dist/components/react/p-BllOMLDs.js +1 -0
  185. package/dist/components/react/p-BmRNjQUZ.js +1 -0
  186. package/dist/components/react/p-ByFh05IW.js +1 -0
  187. package/dist/components/react/p-C9hMpmsD.js +1 -0
  188. package/dist/components/react/p-CJ13r5fi.js +1 -0
  189. package/dist/components/react/p-CZvbetqX.js +1 -0
  190. package/dist/components/react/p-C_2k3G1c.js +1 -257
  191. package/dist/components/react/p-CoDiS_Ik.js +1 -0
  192. package/dist/components/react/p-Cou17ld8.js +1 -0
  193. package/dist/components/react/p-D5knoiyy.js +1 -0
  194. package/dist/components/react/p-D9DDtvFM.js +1 -0
  195. package/dist/components/react/p-DY2U5CQt.js +1 -0
  196. package/dist/components/react/p-DjIHLduJ.js +1 -3
  197. package/dist/components/react/p-DpATRD2W.js +1 -0
  198. package/dist/components/react/p-FxUVQ4Tx.js +1 -0
  199. package/dist/components/react/p-HygIVKXC.js +1 -5018
  200. package/dist/components/react/p-YR7U0Z_g.js +1 -0
  201. package/dist/components/react/p-ZeKXASQs.js +1 -0
  202. package/dist/components/react/p-r4txK0AC.js +1 -3
  203. package/dist/components/react/p-sSn0kXFi.js +1 -0
  204. package/dist/components/react/post-accordion-item.js +1 -6
  205. package/dist/components/react/post-accordion.js +1 -6
  206. package/dist/components/react/post-avatar.js +1 -218
  207. package/dist/components/react/post-back-to-top.js +1 -145
  208. package/dist/components/react/post-banner.js +1 -99
  209. package/dist/components/react/post-breadcrumb-item.js +1 -6
  210. package/dist/components/react/post-breadcrumbs.js +1 -197
  211. package/dist/components/react/post-card-control.js +1 -327
  212. package/dist/components/react/post-closebutton.js +1 -6
  213. package/dist/components/react/post-collapsible-trigger.js +1 -6
  214. package/dist/components/react/post-collapsible.js +1 -6
  215. package/dist/components/react/{post-list.d.ts → post-env-test.d.ts} +4 -4
  216. package/dist/components/react/post-env-test.js +1 -0
  217. package/dist/components/react/post-footer.js +1 -117
  218. package/dist/components/react/post-header.js +1 -373
  219. package/dist/components/react/post-icon.js +1 -6
  220. package/dist/components/react/post-language-menu-item.d.ts +11 -0
  221. package/dist/components/react/post-language-menu-item.js +1 -0
  222. package/dist/components/react/{post-language-option.d.ts → post-language-menu.d.ts} +4 -4
  223. package/dist/components/react/post-language-menu.js +1 -0
  224. package/dist/components/react/post-linkarea.js +1 -59
  225. package/dist/components/react/post-logo.js +1 -59
  226. package/dist/components/react/post-mainnavigation.js +1 -181
  227. package/dist/components/react/post-megadropdown-trigger.js +1 -137
  228. package/dist/components/react/post-megadropdown.js +1 -268
  229. package/dist/components/react/post-menu-item.js +1 -6
  230. package/dist/components/react/post-menu-trigger.js +1 -6
  231. package/dist/components/react/post-menu.js +1 -6
  232. package/dist/components/react/{post-tab-header.d.ts → post-pagination.d.ts} +4 -4
  233. package/dist/components/react/post-pagination.js +1 -0
  234. package/dist/components/react/post-popover-trigger.js +1 -133
  235. package/dist/components/react/post-popover.js +1 -119
  236. package/dist/components/react/post-popovercontainer.js +1 -6
  237. package/dist/components/react/post-rating.js +1 -149
  238. package/dist/components/react/post-stepper-item.js +1 -34
  239. package/dist/components/react/post-stepper.js +1 -135
  240. package/dist/components/react/{post-list-item.d.ts → post-tab-item.d.ts} +4 -4
  241. package/dist/components/react/post-tab-item.js +1 -0
  242. package/dist/components/react/post-tab-panel.js +1 -55
  243. package/dist/components/react/post-tabs.js +1 -197
  244. package/dist/components/react/post-togglebutton.js +1 -57
  245. package/dist/components/react/post-tooltip-trigger.js +1 -207
  246. package/dist/components/react/post-tooltip.js +1 -115
  247. package/dist/components/switch-variants.js +1 -3
  248. package/dist/components/utils.js +1 -0
  249. package/dist/docs.d.ts +11 -0
  250. package/dist/docs.json +873 -631
  251. package/dist/{cjs/breakpoints-CEkeixld.js → esm/breakpoints-DYoSKGHO.js} +89 -6
  252. package/dist/esm/debounce-C9hMpmsD.js +11 -0
  253. package/dist/esm/environment-CEmnRoA6.js +49 -0
  254. package/dist/{components/react/p-CzIKqBrS.js → esm/event-from-rEfV4v4a.js} +2 -2
  255. package/dist/esm/fade-DsgPYmAa.js +24 -0
  256. package/dist/esm/fade-slide-CvOvauo9.js +36 -0
  257. package/dist/esm/{get-focusable-children-D9ZHp2FP.js → get-focusable-children-BXNs2_sw.js} +29 -21
  258. package/dist/{components/react/p-CBFgkSgY.js → esm/get-root-CXfAA093.js} +1 -1
  259. package/dist/esm/{index-wEFJ-c34.js → index-CDZBzSdV.js} +2150 -292
  260. package/dist/esm/loader.js +3 -3
  261. package/dist/esm/package-CZvbetqX.js +3 -0
  262. package/dist/esm/post-accordion_2.entry.js +17 -13
  263. package/dist/esm/post-avatar.entry.js +22 -12
  264. package/dist/esm/post-back-to-top.entry.js +23 -43
  265. package/dist/esm/post-banner.entry.js +14 -11
  266. package/dist/esm/post-breadcrumb-item_2.entry.js +13 -11
  267. package/dist/esm/post-breadcrumbs.entry.js +31 -32
  268. package/dist/esm/post-card-control.entry.js +32 -16
  269. package/dist/esm/{post-closebutton_15.entry.js → post-closebutton_13.entry.js} +599 -510
  270. package/dist/esm/post-collapsible_2.entry.js +38 -34
  271. package/dist/esm/post-components.js +4 -4
  272. package/dist/esm/post-env-test.entry.js +13 -0
  273. package/dist/esm/post-footer.entry.js +21 -17
  274. package/dist/esm/post-linkarea.entry.js +5 -5
  275. package/dist/esm/post-pagination.entry.js +613 -0
  276. package/dist/esm/post-popover-trigger.entry.js +52 -32
  277. package/dist/esm/post-popover.entry.js +25 -16
  278. package/dist/esm/post-rating.entry.js +16 -10
  279. package/dist/esm/post-stepper-item.entry.js +5 -5
  280. package/dist/esm/post-stepper.entry.js +39 -28
  281. package/dist/esm/post-tab-item.entry.js +49 -0
  282. package/dist/esm/post-tab-panel.entry.js +13 -11
  283. package/dist/esm/post-tabs.entry.js +195 -40
  284. package/dist/esm/post-tooltip-trigger.entry.js +10 -8
  285. package/dist/esm/post-tooltip.entry.js +13 -11
  286. package/dist/esm/utils-CoDiS_Ik.js +24 -0
  287. package/dist/post-components/p-09ba7cf9.entry.js +1 -0
  288. package/dist/post-components/p-0c091898.entry.js +1 -0
  289. package/dist/post-components/{p-cd03e6f2.entry.js → p-0e97fcfd.entry.js} +1 -1
  290. package/dist/post-components/p-296f1dd5.entry.js +1 -0
  291. package/dist/post-components/p-32ad2b21.entry.js +1 -0
  292. package/dist/post-components/p-366c28cb.entry.js +1 -0
  293. package/dist/post-components/p-41ae68d5.entry.js +1 -0
  294. package/dist/post-components/p-448e7265.entry.js +1 -0
  295. package/dist/post-components/p-554da188.entry.js +1 -0
  296. package/dist/post-components/p-5912f8f1.entry.js +1 -0
  297. package/dist/post-components/p-790f300d.entry.js +1 -0
  298. package/dist/post-components/p-7ed5a493.entry.js +1 -0
  299. package/dist/post-components/p-85bea1b6.entry.js +1 -0
  300. package/dist/post-components/p-8bcff4d2.entry.js +1 -0
  301. package/dist/post-components/p-9dc9c245.entry.js +1 -0
  302. package/dist/post-components/p-B7ebLhHc.js +1 -0
  303. package/dist/post-components/p-BVCjnh6Q.js +1 -0
  304. package/dist/post-components/p-BXNs2_sw.js +1 -0
  305. package/dist/post-components/p-C9hMpmsD.js +1 -0
  306. package/dist/post-components/p-CDZBzSdV.js +2 -0
  307. package/dist/post-components/p-CEmnRoA6.js +1 -0
  308. package/dist/post-components/p-CZvbetqX.js +1 -0
  309. package/dist/post-components/p-CoDiS_Ik.js +1 -0
  310. package/dist/post-components/p-D5knoiyy.js +1 -0
  311. package/dist/post-components/p-DI-h_mEL.js +1 -0
  312. package/dist/post-components/p-a06f9695.entry.js +1 -0
  313. package/dist/post-components/p-a191f1df.entry.js +1 -0
  314. package/dist/post-components/p-c5d19d62.entry.js +1 -0
  315. package/dist/post-components/{p-24dc54d1.entry.js → p-c8c4d05b.entry.js} +1 -1
  316. package/dist/post-components/{p-57288cb2.entry.js → p-d1a5c980.entry.js} +1 -1
  317. package/dist/post-components/p-d4e2c556.entry.js +1 -0
  318. package/dist/post-components/p-f96a310c.entry.js +1 -0
  319. package/dist/post-components/p-fab2327d.entry.js +1 -0
  320. package/dist/post-components/p-rEfV4v4a.js +1 -0
  321. package/dist/post-components/post-components.css +1 -1
  322. package/dist/post-components/post-components.esm.js +1 -1
  323. package/dist/prebuild.js +46 -0
  324. package/dist/types/animations/collapse.d.ts +1 -0
  325. package/dist/types/animations/fade-slide.d.ts +11 -0
  326. package/dist/types/animations/fade.d.ts +2 -2
  327. package/dist/types/animations/index.d.ts +2 -0
  328. package/dist/types/animations/slide.d.ts +9 -2
  329. package/dist/types/animations/types.d.ts +13 -0
  330. package/dist/types/animations/utils.d.ts +2 -0
  331. package/dist/types/components/post-accordion-item/heading-levels.d.ts +1 -1
  332. package/dist/types/components/post-accordion-item/post-accordion-item.d.ts +2 -2
  333. package/dist/types/components/post-back-to-top/post-back-to-top.d.ts +2 -2
  334. package/dist/types/components/post-breadcrumbs/post-breadcrumbs.d.ts +6 -6
  335. package/dist/types/components/post-collapsible/post-collapsible.d.ts +4 -5
  336. package/dist/types/components/post-footer/post-footer.d.ts +4 -4
  337. package/dist/types/components/post-header/post-header.d.ts +23 -13
  338. package/dist/types/components/{post-language-switch/post-language-switch.d.ts → post-language-menu/post-language-menu.d.ts} +12 -11
  339. package/dist/types/components/{post-language-option/post-language-option.d.ts → post-language-menu-item/post-language-menu-item.d.ts} +5 -5
  340. package/dist/types/components/post-mainnavigation/post-mainnavigation.d.ts +6 -5
  341. package/dist/types/components/post-megadropdown/post-megadropdown.d.ts +20 -2
  342. package/dist/types/components/post-megadropdown-trigger/post-megadropdown-trigger.d.ts +17 -23
  343. package/dist/types/components/post-menu/post-menu.d.ts +4 -4
  344. package/dist/types/components/post-pagination/post-pagination.d.ts +224 -0
  345. package/dist/types/components/post-popover/post-popover.d.ts +4 -3
  346. package/dist/types/components/post-popover-trigger/post-popover-trigger.d.ts +2 -1
  347. package/dist/types/components/post-popovercontainer/post-popovercontainer.d.ts +23 -21
  348. package/dist/types/components/post-rating/post-rating.d.ts +1 -1
  349. package/dist/types/components/post-stepper/post-stepper.d.ts +9 -8
  350. package/dist/types/components/post-tab-item/post-tab-item.d.ts +19 -0
  351. package/dist/types/components/post-tab-panel/post-tab-panel.d.ts +3 -3
  352. package/dist/types/components/post-tabs/post-tabs.d.ts +33 -12
  353. package/dist/types/components/post-tooltip/post-tooltip.d.ts +1 -5
  354. package/dist/types/components.d.ts +322 -219
  355. package/dist/types/home/runner/work/design-system/design-system/packages/components/.stencil/prebuild.d.ts +9 -0
  356. package/dist/types/stencil-public-runtime.d.ts +147 -10
  357. package/dist/types/types/heading-levels.d.ts +1 -1
  358. package/dist/types/utils/environment.d.ts +25 -1
  359. package/dist/types/utils/get-focusable-children.d.ts +2 -2
  360. package/dist/types/utils/tests/environment/hydrate-app-helper.d.ts +5 -0
  361. package/dist/types/utils/tests/environment/post-env-test.d.ts +3 -0
  362. package/hydrate/index.d.ts +14 -0
  363. package/hydrate/index.js +7494 -2714
  364. package/hydrate/index.mjs +7493 -2715
  365. package/package.json +7 -8
  366. package/dist/cjs/fade-nS5zzDQS.js +0 -14
  367. package/dist/cjs/index-UFKR6Ok0.js +0 -98
  368. package/dist/cjs/post-tab-header.cjs.entry.js +0 -31
  369. package/dist/collection/animations/slide-and-fade.js +0 -25
  370. package/dist/collection/components/post-language-option/post-language-option.css +0 -1
  371. package/dist/collection/components/post-language-switch/post-language-switch.css +0 -1
  372. package/dist/collection/components/post-list/post-list.css +0 -1
  373. package/dist/collection/components/post-list/post-list.js +0 -97
  374. package/dist/collection/components/post-list-item/post-list-item.css +0 -1
  375. package/dist/collection/components/post-list-item/post-list-item.js +0 -26
  376. package/dist/collection/components/post-tab-header/post-tab-header.css +0 -1
  377. package/dist/collection/components/post-tab-header/post-tab-header.js +0 -65
  378. package/dist/components/index2.js +0 -89
  379. package/dist/components/post-language-option.d.ts +0 -11
  380. package/dist/components/post-language-option.js +0 -99
  381. package/dist/components/post-language-switch.js +0 -157
  382. package/dist/components/post-list-item.js +0 -38
  383. package/dist/components/post-list.js +0 -61
  384. package/dist/components/post-tab-header.js +0 -52
  385. package/dist/components/react/p-BVXiQdHq.js +0 -64
  386. package/dist/components/react/p-BhxZzOEC.js +0 -3
  387. package/dist/components/react/p-CSAMO7iJ.js +0 -243
  388. package/dist/components/react/p-CYkf_7Y5.js +0 -89
  389. package/dist/components/react/p-Ccrl2AQn.js +0 -111
  390. package/dist/components/react/p-CewRvBtg.js +0 -139
  391. package/dist/components/react/p-Cwiv86_f.js +0 -111
  392. package/dist/components/react/p-D2waO0Zc.js +0 -31
  393. package/dist/components/react/p-DBPOV12C.js +0 -160
  394. package/dist/components/react/p-DVGEExot.js +0 -3128
  395. package/dist/components/react/p-Djvj8fd2.js +0 -80
  396. package/dist/components/react/p-LtiDhYis.js +0 -137
  397. package/dist/components/react/p-SbIC4aZX.js +0 -11
  398. package/dist/components/react/p-XrZzCOKT.js +0 -78
  399. package/dist/components/react/p-v3pOrMNQ.js +0 -114
  400. package/dist/components/react/post-language-option.js +0 -100
  401. package/dist/components/react/post-language-switch.d.ts +0 -11
  402. package/dist/components/react/post-language-switch.js +0 -158
  403. package/dist/components/react/post-list-item.js +0 -39
  404. package/dist/components/react/post-list.js +0 -62
  405. package/dist/components/react/post-tab-header.js +0 -53
  406. package/dist/esm/breakpoints-CJ80BZ06.js +0 -178
  407. package/dist/esm/event-from-CzIKqBrS.js +0 -119
  408. package/dist/esm/fade-SbIC4aZX.js +0 -11
  409. package/dist/esm/get-root-BkQ3CrLq.js +0 -15
  410. package/dist/esm/index-Beaz8wEe.js +0 -89
  411. package/dist/esm/package-BhxZzOEC.js +0 -3
  412. package/dist/esm/post-tab-header.entry.js +0 -29
  413. package/dist/post-components/p-01e678c9.entry.js +0 -1
  414. package/dist/post-components/p-034a453f.entry.js +0 -1
  415. package/dist/post-components/p-15a4cdbf.entry.js +0 -1
  416. package/dist/post-components/p-2a2030bf.entry.js +0 -1
  417. package/dist/post-components/p-2ed84cc3.entry.js +0 -1
  418. package/dist/post-components/p-3228968f.entry.js +0 -1
  419. package/dist/post-components/p-3c01ddfe.entry.js +0 -1
  420. package/dist/post-components/p-748b1f01.entry.js +0 -1
  421. package/dist/post-components/p-7745e46e.entry.js +0 -1
  422. package/dist/post-components/p-7f635728.entry.js +0 -1
  423. package/dist/post-components/p-82c178a3.entry.js +0 -1
  424. package/dist/post-components/p-9b5f8319.entry.js +0 -1
  425. package/dist/post-components/p-Beaz8wEe.js +0 -1
  426. package/dist/post-components/p-BhxZzOEC.js +0 -1
  427. package/dist/post-components/p-CJ80BZ06.js +0 -1
  428. package/dist/post-components/p-D9ZHp2FP.js +0 -1
  429. package/dist/post-components/p-SbIC4aZX.js +0 -1
  430. package/dist/post-components/p-a9644e54.entry.js +0 -1
  431. package/dist/post-components/p-af030a3a.entry.js +0 -1
  432. package/dist/post-components/p-b8ba8139.entry.js +0 -1
  433. package/dist/post-components/p-db935e8e.entry.js +0 -1
  434. package/dist/post-components/p-e62e1f57.entry.js +0 -1
  435. package/dist/post-components/p-fb4b1641.entry.js +0 -1
  436. package/dist/post-components/p-wEFJ-c34.js +0 -2
  437. package/dist/types/animations/slide-and-fade.d.ts +0 -2
  438. package/dist/types/components/post-list/post-list.d.ts +0 -24
  439. package/dist/types/components/post-list-item/post-list-item.d.ts +0 -8
  440. package/dist/types/components/post-tab-header/post-tab-header.d.ts +0 -14
  441. /package/dist/collection/components/{post-language-switch → post-language-menu}/switch-variants.js +0 -0
  442. /package/dist/{post-components/p-CzIKqBrS.js → components/react/p-rEfV4v4a.js} +0 -0
  443. /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
+ "mutable": true,
581
+ "complexType": {
582
+ "original": "number",
583
+ "resolved": "number",
584
+ "references": {}
585
+ },
586
+ "required": false,
587
+ "optional": true,
588
+ "docs": {
589
+ "tags": [],
590
+ "text": "The current active page number.\n\n**If not specified, defaults to the first page.**"
591
+ },
592
+ "getter": false,
593
+ "setter": false,
594
+ "reflect": false,
595
+ "attribute": "page"
596
+ },
597
+ "pageSize": {
598
+ "type": "number",
599
+ "mutable": false,
600
+ "complexType": {
601
+ "original": "number",
602
+ "resolved": "number",
603
+ "references": {}
604
+ },
605
+ "required": true,
606
+ "optional": false,
607
+ "docs": {
608
+ "tags": [],
609
+ "text": "The number of items per page."
610
+ },
611
+ "getter": false,
612
+ "setter": false,
613
+ "reflect": true,
614
+ "attribute": "page-size"
615
+ },
616
+ "collectionSize": {
617
+ "type": "number",
618
+ "mutable": false,
619
+ "complexType": {
620
+ "original": "number",
621
+ "resolved": "number",
622
+ "references": {}
623
+ },
624
+ "required": true,
625
+ "optional": false,
626
+ "docs": {
627
+ "tags": [],
628
+ "text": "The total number of items in the collection."
629
+ },
630
+ "getter": false,
631
+ "setter": false,
632
+ "reflect": true,
633
+ "attribute": "collection-size"
634
+ },
635
+ "label": {
636
+ "type": "string",
637
+ "mutable": false,
638
+ "complexType": {
639
+ "original": "string",
640
+ "resolved": "string",
641
+ "references": {}
642
+ },
643
+ "required": true,
644
+ "optional": false,
645
+ "docs": {
646
+ "tags": [],
647
+ "text": "A descriptive label for the pagination navigation, used by assistive technologies."
648
+ },
649
+ "getter": false,
650
+ "setter": false,
651
+ "reflect": true,
652
+ "attribute": "label"
653
+ },
654
+ "textPrevious": {
655
+ "type": "string",
656
+ "mutable": false,
657
+ "complexType": {
658
+ "original": "string",
659
+ "resolved": "string",
660
+ "references": {}
661
+ },
662
+ "required": true,
663
+ "optional": false,
664
+ "docs": {
665
+ "tags": [],
666
+ "text": "Accessible label for the previous page button."
667
+ },
668
+ "getter": false,
669
+ "setter": false,
670
+ "reflect": true,
671
+ "attribute": "text-previous"
672
+ },
673
+ "textNext": {
674
+ "type": "string",
675
+ "mutable": false,
676
+ "complexType": {
677
+ "original": "string",
678
+ "resolved": "string",
679
+ "references": {}
680
+ },
681
+ "required": true,
682
+ "optional": false,
683
+ "docs": {
684
+ "tags": [],
685
+ "text": "Accessible label for the next page button."
686
+ },
687
+ "getter": false,
688
+ "setter": false,
689
+ "reflect": true,
690
+ "attribute": "text-next"
691
+ },
692
+ "textPage": {
693
+ "type": "string",
694
+ "mutable": false,
695
+ "complexType": {
696
+ "original": "string",
697
+ "resolved": "string",
698
+ "references": {}
699
+ },
700
+ "required": true,
701
+ "optional": false,
702
+ "docs": {
703
+ "tags": [],
704
+ "text": "Prefix text for page number labels."
705
+ },
706
+ "getter": false,
707
+ "setter": false,
708
+ "reflect": true,
709
+ "attribute": "text-page"
710
+ },
711
+ "textFirst": {
712
+ "type": "string",
713
+ "mutable": false,
714
+ "complexType": {
715
+ "original": "string",
716
+ "resolved": "string",
717
+ "references": {}
718
+ },
719
+ "required": true,
720
+ "optional": false,
721
+ "docs": {
722
+ "tags": [],
723
+ "text": "Prefix text for the first page label."
724
+ },
725
+ "getter": false,
726
+ "setter": false,
727
+ "reflect": true,
728
+ "attribute": "text-first"
729
+ },
730
+ "textLast": {
731
+ "type": "string",
732
+ "mutable": false,
733
+ "complexType": {
734
+ "original": "string",
735
+ "resolved": "string",
736
+ "references": {}
737
+ },
738
+ "required": true,
739
+ "optional": false,
740
+ "docs": {
741
+ "tags": [],
742
+ "text": "Prefix text for the last page label."
743
+ },
744
+ "getter": false,
745
+ "setter": false,
746
+ "reflect": true,
747
+ "attribute": "text-last"
748
+ },
749
+ "disabled": {
750
+ "type": "boolean",
751
+ "mutable": false,
752
+ "complexType": {
753
+ "original": "boolean",
754
+ "resolved": "boolean",
755
+ "references": {}
756
+ },
757
+ "required": false,
758
+ "optional": true,
759
+ "docs": {
760
+ "tags": [],
761
+ "text": "If true, the pagination is disabled."
762
+ },
763
+ "getter": false,
764
+ "setter": false,
765
+ "reflect": false,
766
+ "attribute": "disabled"
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
+ }