@salla.sa/twilight-components 2.14.352 → 2.14.354

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 (325) hide show
  1. package/dist/cjs/bell-ring-BfKPinNo.js +13 -0
  2. package/dist/cjs/{interfaces-CX9-6aLf.js → camera-DytepEoK.js} +0 -11
  3. package/dist/cjs/cancel-De6vslRA.js +13 -0
  4. package/dist/cjs/cart-s-x1Fshk.js +13 -0
  5. package/dist/cjs/check-circle2-BDvlT4_n.js +13 -0
  6. package/dist/cjs/{check-CLRvuniI.js → check-x3w3-gpj.js} +2 -2
  7. package/dist/cjs/{filepond-XtsZ6xtH.js → filepond-CuKErtOy.js} +1 -1
  8. package/dist/cjs/{filepond-plugin-file-poster-Bj84Ypvg.js → filepond-plugin-file-poster-d-8BSuST.js} +1 -1
  9. package/dist/cjs/{filepond-plugin-file-validate-size-aYfb4yYH.js → filepond-plugin-file-validate-size-zgI_JcqY.js} +1 -1
  10. package/dist/cjs/{filepond-plugin-file-validate-type-CJsd6rXl.js → filepond-plugin-file-validate-type-Cy8IgG2P.js} +1 -1
  11. package/dist/cjs/{filepond-plugin-image-edit-DRlBSg36.js → filepond-plugin-image-edit-9ZAUzCvh.js} +1 -1
  12. package/dist/cjs/{filepond-plugin-image-exif-orientation-SY8c6DzI.js → filepond-plugin-image-exif-orientation-DzNe_tY2.js} +1 -1
  13. package/dist/cjs/{filepond-plugin-image-preview-iqhJmUmU.js → filepond-plugin-image-preview-Cfna6xTB.js} +1 -1
  14. package/dist/{esm/gift-C0JNGIpa.js → cjs/gift-CJ-3Yw_x.js} +4 -2
  15. package/dist/cjs/image-BoZ6Hums.js +13 -0
  16. package/dist/cjs/{index-Z-cyrNSM.js → index-Ce40E8tZ.js} +136 -12
  17. package/dist/cjs/{index-C7-280f4.js → index-ff-xJfhj.js} +1 -1
  18. package/dist/cjs/interfaces-CRqrf5RX.js +15 -0
  19. package/dist/cjs/keyboard_arrow_down-DHJ3FFZq.js +13 -0
  20. package/dist/cjs/keyboard_arrow_right-BayM_Il2.js +21 -0
  21. package/dist/cjs/loader.cjs.js +2 -2
  22. package/dist/cjs/minus-CCryh1qf.js +21 -0
  23. package/dist/cjs/salla-accordion-body_3.cjs.entry.js +775 -0
  24. package/dist/cjs/salla-accordion_6.cjs.entry.js +768 -0
  25. package/dist/cjs/salla-add-product-button_4.cjs.entry.js +2389 -0
  26. package/dist/cjs/salla-advertisement.cjs.entry.js +1 -1
  27. package/dist/cjs/salla-alert_2.cjs.entry.js +194 -0
  28. package/dist/cjs/salla-app-install-alert.cjs.entry.js +8 -3
  29. package/dist/cjs/salla-apps-icons.cjs.entry.js +1 -1
  30. package/dist/cjs/salla-booking-field_7.cjs.entry.js +1565 -0
  31. package/dist/cjs/{salla-cart-item-offers.cjs.entry.js → salla-cart-item-offers_2.cjs.entry.js} +104 -5
  32. package/dist/cjs/salla-comment-form_8.cjs.entry.js +1661 -0
  33. package/dist/cjs/salla-conditional-offer.cjs.entry.js +1 -1
  34. package/dist/cjs/salla-contacts.cjs.entry.js +3 -3
  35. package/dist/cjs/salla-count-down_2.cjs.entry.js +302 -0
  36. package/dist/cjs/salla-custom-fields.cjs.entry.js +4 -3
  37. package/dist/cjs/salla-filters-widget.cjs.entry.js +1 -1
  38. package/dist/cjs/salla-filters.cjs.entry.js +1 -1
  39. package/dist/cjs/salla-gifting.cjs.entry.js +488 -0
  40. package/dist/cjs/salla-hook.cjs.entry.js +1 -1
  41. package/dist/cjs/salla-infinite-scroll.cjs.entry.js +91 -0
  42. package/dist/cjs/salla-installment.cjs.entry.js +1 -1
  43. package/dist/cjs/salla-list-tile.cjs.entry.js +34 -0
  44. package/dist/cjs/salla-localization-modal.cjs.entry.js +137 -0
  45. package/dist/cjs/salla-login-modal.cjs.entry.js +320 -0
  46. package/dist/cjs/salla-loyalty-prize-item.cjs.entry.js +1 -1
  47. package/dist/cjs/salla-loyalty-program.cjs.entry.js +3 -3
  48. package/dist/cjs/salla-loyalty.cjs.entry.js +211 -0
  49. package/dist/cjs/salla-maintenance-alert.cjs.entry.js +40 -0
  50. package/dist/cjs/salla-menu.cjs.entry.js +139 -0
  51. package/dist/cjs/salla-metadata.cjs.entry.js +1 -1
  52. package/dist/cjs/salla-multiple-bundle-product-cart_2.cjs.entry.js +220 -0
  53. package/dist/cjs/salla-multiple-bundle-product-options-modal_2.cjs.entry.js +598 -0
  54. package/dist/cjs/salla-multiple-bundle-product.cjs.entry.js +69 -0
  55. package/dist/cjs/salla-notification-item.cjs.entry.js +1 -1
  56. package/dist/cjs/salla-notifications.cjs.entry.js +1 -1
  57. package/dist/cjs/salla-offer-modal.cjs.entry.js +206 -0
  58. package/dist/cjs/salla-offer.cjs.entry.js +1 -1
  59. package/dist/cjs/salla-order-details-multiple-bundle-product.cjs.entry.js +1 -1
  60. package/dist/cjs/salla-order-details-options.cjs.entry.js +1 -1
  61. package/dist/cjs/salla-order-details.cjs.entry.js +1 -1
  62. package/dist/cjs/salla-order-summary.cjs.entry.js +3 -3
  63. package/dist/cjs/salla-order-totals-card.cjs.entry.js +1 -1
  64. package/dist/cjs/salla-orders.cjs.entry.js +1 -1
  65. package/dist/cjs/salla-payments.cjs.entry.js +1 -1
  66. package/dist/cjs/salla-placeholder.cjs.entry.js +51 -0
  67. package/dist/cjs/salla-price-range.cjs.entry.js +1 -1
  68. package/dist/cjs/salla-product-size-guide.cjs.entry.js +66 -0
  69. package/dist/cjs/salla-products-list.cjs.entry.js +762 -0
  70. package/dist/cjs/salla-products-slider.cjs.entry.js +115 -0
  71. package/dist/cjs/salla-progress-bar.cjs.entry.js +73 -0
  72. package/dist/cjs/salla-quick-order.cjs.entry.js +239 -0
  73. package/dist/cjs/salla-rating-modal.cjs.entry.js +453 -0
  74. package/dist/cjs/salla-scopes.cjs.entry.js +180 -0
  75. package/dist/cjs/salla-search.cjs.entry.js +153 -0
  76. package/dist/cjs/salla-skeleton.cjs.entry.js +36 -0
  77. package/dist/cjs/salla-slider.cjs.entry.js +10389 -0
  78. package/dist/cjs/salla-social-share.cjs.entry.js +165 -0
  79. package/dist/cjs/salla-social.cjs.entry.js +3 -3
  80. package/dist/cjs/salla-tab-content_3.cjs.entry.js +157 -0
  81. package/dist/cjs/salla-tiered-offer.cjs.entry.js +1 -1
  82. package/dist/cjs/salla-tooltip.cjs.entry.js +1 -1
  83. package/dist/cjs/salla-trust-badges.cjs.entry.js +1 -1
  84. package/dist/cjs/salla-user-menu.cjs.entry.js +275 -0
  85. package/dist/cjs/salla-user-profile.cjs.entry.js +145 -0
  86. package/dist/cjs/salla-user-settings.cjs.entry.js +88 -0
  87. package/dist/cjs/salla-verify.cjs.entry.js +1 -1
  88. package/dist/cjs/salla-wallet.cjs.entry.js +1 -1
  89. package/dist/cjs/search-c7Aa7lM9.js +13 -0
  90. package/dist/cjs/{special-discount-OVG_9Kf9.js → special-discount-DC2oXurL.js} +0 -8
  91. package/dist/cjs/star-DGcH7Yso.js +13 -0
  92. package/dist/cjs/star2-R146a27p.js +13 -0
  93. package/dist/cjs/twilight.cjs.js +2 -2
  94. package/dist/cjs/{vanilla-picker-Dq7F5bE1.js → vanilla-picker-zQsXQIff.js} +1 -1
  95. package/dist/cjs/{whatsapp2-D7Sbg8Ey.js → whatsapp2-BdMd5Gx1.js} +2 -2
  96. package/dist/collection/collection-manifest.json +55 -1
  97. package/dist/collection/components/salla-add-product-button/salla-add-product-button.js +18 -6
  98. package/dist/collection/components/salla-app-install-alert/salla-app-install-alert.js +7 -2
  99. package/dist/collection/components/salla-color-picker/salla-color-picker.js +39 -8
  100. package/dist/collection/components/salla-maintenance-alert/salla-maintenance-alert.js +4 -2
  101. package/dist/collection/components/salla-product-options/salla-product-options.js +36 -3
  102. package/dist/collection/components/salla-products-list/salla-products-list.js +17 -11
  103. package/dist/components/index.js +2 -2
  104. package/dist/components/salla-add-product-button2.js +18 -6
  105. package/dist/components/salla-app-install-alert.js +7 -2
  106. package/dist/components/salla-color-picker2.js +38 -7
  107. package/dist/components/salla-maintenance-alert.js +4 -2
  108. package/dist/components/salla-product-options2.js +19 -2
  109. package/dist/components/salla-products-list2.js +17 -11
  110. package/dist/esm/bell-ring-D3mWkc-3.js +11 -0
  111. package/dist/esm/{interfaces-CBT_Nxny.js → camera-C6jIkM-X.js} +1 -12
  112. package/dist/esm/cancel-BsLF_HK7.js +11 -0
  113. package/dist/esm/cart-DY4LZmNP.js +11 -0
  114. package/dist/esm/{check-uTyAzPSy.js → check-BsXh13x8.js} +2 -2
  115. package/dist/esm/check-circle2-BV4kqbdL.js +11 -0
  116. package/dist/esm/{filepond-Dg4ZKM-u.js → filepond-DEzyRrdH.js} +1 -1
  117. package/dist/esm/{filepond-plugin-file-poster-BUIjdsnA.js → filepond-plugin-file-poster-DyLcCcHM.js} +1 -1
  118. package/dist/esm/{filepond-plugin-file-validate-size-DgZMMqmi.js → filepond-plugin-file-validate-size-Cxp5Yzea.js} +1 -1
  119. package/dist/esm/{filepond-plugin-file-validate-type-DA9tDSFr.js → filepond-plugin-file-validate-type-D2qNOQP4.js} +1 -1
  120. package/dist/esm/{filepond-plugin-image-edit-dotdnN4Z.js → filepond-plugin-image-edit-DndTlA7m.js} +1 -1
  121. package/dist/esm/{filepond-plugin-image-exif-orientation-oSI8aLU-.js → filepond-plugin-image-exif-orientation-CiT1CQoK.js} +1 -1
  122. package/dist/esm/{filepond-plugin-image-preview-DEefQK61.js → filepond-plugin-image-preview-DBG7keFZ.js} +1 -1
  123. package/dist/{cjs/gift-BPDUPIY_.js → esm/gift-BChI23pG.js} +2 -4
  124. package/dist/esm/image-C-tzSDxw.js +11 -0
  125. package/dist/esm/{index-D2-TtAhI.js → index-B74h9G6a.js} +137 -13
  126. package/dist/esm/{index-B7E8Tmgi.js → index-BLw7mdtM.js} +1 -1
  127. package/dist/esm/interfaces-OF8QcbMM.js +15 -0
  128. package/dist/esm/keyboard_arrow_down-DCZbpt2a.js +11 -0
  129. package/dist/esm/keyboard_arrow_right-Vqpj4CWE.js +18 -0
  130. package/dist/esm/loader.js +3 -3
  131. package/dist/esm/minus-DfeagqF1.js +18 -0
  132. package/dist/esm/salla-accordion-body_3.entry.js +771 -0
  133. package/dist/esm/salla-accordion_6.entry.js +761 -0
  134. package/dist/esm/salla-add-product-button_4.entry.js +2384 -0
  135. package/dist/esm/salla-advertisement.entry.js +1 -1
  136. package/dist/esm/salla-alert_2.entry.js +191 -0
  137. package/dist/esm/salla-app-install-alert.entry.js +8 -3
  138. package/dist/esm/salla-apps-icons.entry.js +1 -1
  139. package/dist/esm/salla-booking-field_7.entry.js +1539 -0
  140. package/dist/esm/{salla-cart-item-offers.entry.js → salla-cart-item-offers_2.entry.js} +104 -6
  141. package/dist/esm/salla-comment-form_8.entry.js +1652 -0
  142. package/dist/esm/salla-conditional-offer.entry.js +1 -1
  143. package/dist/esm/salla-contacts.entry.js +3 -3
  144. package/dist/esm/salla-count-down_2.entry.js +299 -0
  145. package/dist/esm/salla-custom-fields.entry.js +3 -2
  146. package/dist/esm/salla-filters-widget.entry.js +1 -1
  147. package/dist/esm/salla-filters.entry.js +1 -1
  148. package/dist/esm/salla-gifting.entry.js +486 -0
  149. package/dist/esm/salla-hook.entry.js +1 -1
  150. package/dist/esm/salla-infinite-scroll.entry.js +89 -0
  151. package/dist/esm/salla-installment.entry.js +1 -1
  152. package/dist/esm/salla-list-tile.entry.js +32 -0
  153. package/dist/esm/salla-localization-modal.entry.js +135 -0
  154. package/dist/esm/salla-login-modal.entry.js +318 -0
  155. package/dist/esm/salla-loyalty-prize-item.entry.js +1 -1
  156. package/dist/esm/salla-loyalty-program.entry.js +3 -3
  157. package/dist/esm/salla-loyalty.entry.js +209 -0
  158. package/dist/esm/salla-maintenance-alert.entry.js +38 -0
  159. package/dist/esm/salla-menu.entry.js +137 -0
  160. package/dist/esm/salla-metadata.entry.js +1 -1
  161. package/dist/esm/salla-multiple-bundle-product-cart_2.entry.js +217 -0
  162. package/dist/esm/salla-multiple-bundle-product-options-modal_2.entry.js +595 -0
  163. package/dist/esm/salla-multiple-bundle-product.entry.js +67 -0
  164. package/dist/esm/salla-notification-item.entry.js +1 -1
  165. package/dist/esm/salla-notifications.entry.js +1 -1
  166. package/dist/esm/salla-offer-modal.entry.js +204 -0
  167. package/dist/esm/salla-offer.entry.js +1 -1
  168. package/dist/esm/salla-order-details-multiple-bundle-product.entry.js +1 -1
  169. package/dist/esm/salla-order-details-options.entry.js +1 -1
  170. package/dist/esm/salla-order-details.entry.js +1 -1
  171. package/dist/esm/salla-order-summary.entry.js +3 -3
  172. package/dist/esm/salla-order-totals-card.entry.js +1 -1
  173. package/dist/esm/salla-orders.entry.js +1 -1
  174. package/dist/esm/salla-payments.entry.js +1 -1
  175. package/dist/esm/salla-placeholder.entry.js +49 -0
  176. package/dist/esm/salla-price-range.entry.js +1 -1
  177. package/dist/esm/salla-product-size-guide.entry.js +64 -0
  178. package/dist/esm/salla-products-list.entry.js +760 -0
  179. package/dist/esm/salla-products-slider.entry.js +113 -0
  180. package/dist/esm/salla-progress-bar.entry.js +71 -0
  181. package/dist/esm/salla-quick-order.entry.js +237 -0
  182. package/dist/esm/salla-rating-modal.entry.js +451 -0
  183. package/dist/esm/salla-scopes.entry.js +178 -0
  184. package/dist/esm/salla-search.entry.js +151 -0
  185. package/dist/esm/salla-skeleton.entry.js +34 -0
  186. package/dist/esm/salla-slider.entry.js +10387 -0
  187. package/dist/esm/salla-social-share.entry.js +163 -0
  188. package/dist/esm/salla-social.entry.js +2 -2
  189. package/dist/esm/salla-tab-content_3.entry.js +153 -0
  190. package/dist/esm/salla-tiered-offer.entry.js +1 -1
  191. package/dist/esm/salla-tooltip.entry.js +1 -1
  192. package/dist/esm/salla-trust-badges.entry.js +1 -1
  193. package/dist/esm/salla-user-menu.entry.js +273 -0
  194. package/dist/esm/salla-user-profile.entry.js +143 -0
  195. package/dist/esm/salla-user-settings.entry.js +86 -0
  196. package/dist/esm/salla-verify.entry.js +1 -1
  197. package/dist/esm/salla-wallet.entry.js +1 -1
  198. package/dist/esm/search-BscTeWDc.js +11 -0
  199. package/dist/esm/{special-discount-yRO-ZESF.js → special-discount-Ctkfc4K-.js} +1 -8
  200. package/dist/esm/star-ZT7ehBBk.js +11 -0
  201. package/dist/esm/star2-D4oPi1Ov.js +11 -0
  202. package/dist/esm/twilight.js +3 -3
  203. package/dist/esm/{vanilla-picker-DkUGzUrx.js → vanilla-picker-CtwkXTap.js} +1 -1
  204. package/dist/esm/{whatsapp2-DWksgowB.js → whatsapp2-CgR-T_ZS.js} +2 -2
  205. package/dist/twilight/{p-7b3ca138.entry.js → p-0134b4fd.entry.js} +1 -1
  206. package/dist/twilight/{p-0effc34b.entry.js → p-01daaaa6.entry.js} +1 -1
  207. package/dist/twilight/p-07da7390.entry.js +4 -0
  208. package/dist/twilight/{p-6ce3f119.entry.js → p-08badc32.entry.js} +1 -1
  209. package/dist/twilight/{p-4a594c06.entry.js → p-0aa5a12a.entry.js} +1 -1
  210. package/dist/twilight/{p-e73c28a8.entry.js → p-10dcd981.entry.js} +1 -1
  211. package/dist/twilight/{p-81df7a2e.entry.js → p-212a0710.entry.js} +1 -1
  212. package/dist/twilight/p-229275db.entry.js +4 -0
  213. package/dist/twilight/{p-fea62668.entry.js → p-232185ec.entry.js} +1 -1
  214. package/dist/twilight/{p-e5c01983.entry.js → p-2a927eac.entry.js} +1 -1
  215. package/dist/twilight/p-2d880232.entry.js +4 -0
  216. package/dist/twilight/p-2de9df64.entry.js +4 -0
  217. package/dist/twilight/p-309a0ba4.entry.js +4 -0
  218. package/dist/twilight/{p-6d886b96.entry.js → p-32732ca7.entry.js} +1 -1
  219. package/dist/twilight/{p-9d35196f.entry.js → p-32ca34ec.entry.js} +1 -1
  220. package/dist/twilight/{p-2aa0a4e2.entry.js → p-33093880.entry.js} +1 -1
  221. package/dist/twilight/p-3cffa4c9.entry.js +4 -0
  222. package/dist/twilight/p-3d0bb451.entry.js +4 -0
  223. package/dist/twilight/p-3e0d814c.entry.js +4 -0
  224. package/dist/twilight/p-4036d5dc.entry.js +4 -0
  225. package/dist/twilight/p-40fe4b01.entry.js +4 -0
  226. package/dist/twilight/p-47ac0ca5.entry.js +4 -0
  227. package/dist/twilight/{p-b9d0212c.entry.js → p-4cd9da44.entry.js} +1 -1
  228. package/dist/twilight/p-5c9281d3.entry.js +4 -0
  229. package/dist/twilight/p-5d044466.entry.js +4 -0
  230. package/dist/twilight/p-5d21334a.entry.js +4 -0
  231. package/dist/twilight/{p-e26cc25b.entry.js → p-654429df.entry.js} +1 -1
  232. package/dist/twilight/p-6b8453be.entry.js +4 -0
  233. package/dist/twilight/p-6be7bbb0.entry.js +4 -0
  234. package/dist/twilight/{p-67c327a8.entry.js → p-6c8f5c94.entry.js} +1 -1
  235. package/dist/twilight/{p-9b8f5399.entry.js → p-6fa02770.entry.js} +1 -1
  236. package/dist/twilight/p-7040ea33.entry.js +4 -0
  237. package/dist/twilight/p-8c189d76.entry.js +4 -0
  238. package/dist/twilight/p-8f1f052c.entry.js +4 -0
  239. package/dist/twilight/{p-6b0a03f6.entry.js → p-9051a540.entry.js} +1 -1
  240. package/dist/twilight/p-9f1c561f.entry.js +4 -0
  241. package/dist/twilight/{p-B0ba6Gec.js → p-B69XOH6h.js} +2 -2
  242. package/dist/twilight/{p-D2-TtAhI.js → p-B74h9G6a.js} +2 -2
  243. package/dist/twilight/{p-C0JNGIpa.js → p-BChI23pG.js} +1 -1
  244. package/dist/twilight/{p-DhcC83-2.js → p-BCxm-ISm.js} +1 -1
  245. package/dist/twilight/{p-Cmkcwiop.js → p-BPqZ249Z.js} +1 -1
  246. package/dist/twilight/p-BV4kqbdL.js +4 -0
  247. package/dist/twilight/p-BsLF_HK7.js +4 -0
  248. package/dist/twilight/{p-uTyAzPSy.js → p-BsXh13x8.js} +1 -1
  249. package/dist/twilight/p-BscTeWDc.js +4 -0
  250. package/dist/twilight/p-C-tzSDxw.js +4 -0
  251. package/dist/twilight/p-C6jIkM-X.js +4 -0
  252. package/dist/twilight/p-CO-PeZ27.js +4 -0
  253. package/dist/twilight/{p-DPqkW1aD.js → p-CQq81yb5.js} +2 -2
  254. package/dist/twilight/{p-DWksgowB.js → p-CgR-T_ZS.js} +1 -1
  255. package/dist/twilight/p-Ctkfc4K-.js +4 -0
  256. package/dist/twilight/p-D3mWkc-3.js +4 -0
  257. package/dist/twilight/p-D4oPi1Ov.js +4 -0
  258. package/dist/twilight/p-DCZbpt2a.js +4 -0
  259. package/dist/twilight/p-DY4LZmNP.js +4 -0
  260. package/dist/twilight/p-DfeagqF1.js +4 -0
  261. package/dist/twilight/{p-DJ557xys.js → p-DpsbV3x1.js} +1 -1
  262. package/dist/twilight/p-OF8QcbMM.js +4 -0
  263. package/dist/twilight/p-Vqpj4CWE.js +4 -0
  264. package/dist/twilight/p-ZT7ehBBk.js +4 -0
  265. package/dist/twilight/{p-q-O0srMP.js → p-_-aXm0Wb.js} +1 -1
  266. package/dist/twilight/p-a100bd38.entry.js +4 -0
  267. package/dist/twilight/{p-cf66ab4d.entry.js → p-a2756650.entry.js} +1 -1
  268. package/dist/twilight/{p-b1af2aca.entry.js → p-aab45a16.entry.js} +1 -1
  269. package/dist/twilight/p-aae761ff.entry.js +4 -0
  270. package/dist/twilight/p-afd61e47.entry.js +4 -0
  271. package/dist/twilight/p-b1fc6dfc.entry.js +4 -0
  272. package/dist/twilight/p-b206a0a1.entry.js +4 -0
  273. package/dist/twilight/p-b2332516.entry.js +4 -0
  274. package/dist/twilight/{p-6c2807c8.entry.js → p-b588ef46.entry.js} +1 -1
  275. package/dist/twilight/p-b71fc1b5.entry.js +4 -0
  276. package/dist/twilight/{p-_JhF_Kvb.js → p-bVqtOl1F.js} +1 -1
  277. package/dist/twilight/{p-a858523c.entry.js → p-bf65b263.entry.js} +1 -1
  278. package/dist/twilight/{p-d4faa0f6.entry.js → p-c56a47b0.entry.js} +1 -1
  279. package/dist/twilight/p-c73189e3.entry.js +4 -0
  280. package/dist/twilight/p-d1203242.entry.js +4 -0
  281. package/dist/twilight/p-d4edfed4.entry.js +4 -0
  282. package/dist/twilight/{p-f6ffc708.entry.js → p-d86ce978.entry.js} +1 -1
  283. package/dist/twilight/{p-8e7fa4a9.entry.js → p-d9e7973d.entry.js} +1 -1
  284. package/dist/twilight/p-e3e33238.entry.js +4 -0
  285. package/dist/twilight/p-e6bb7362.entry.js +4 -0
  286. package/dist/twilight/{p-30403778.entry.js → p-e7813c80.entry.js} +1 -1
  287. package/dist/twilight/p-ec2fd37e.entry.js +4 -0
  288. package/dist/twilight/{p-ed60a726.entry.js → p-ec77c523.entry.js} +1 -1
  289. package/dist/twilight/{p-b208650b.entry.js → p-efc18ce6.entry.js} +1 -1
  290. package/dist/twilight/p-f4039c40.entry.js +4 -0
  291. package/dist/twilight/p-f47b130c.entry.js +4 -0
  292. package/dist/twilight/{p-db526796.entry.js → p-f57ca123.entry.js} +1 -1
  293. package/dist/twilight/{p-933881d3.entry.js → p-f5ad6572.entry.js} +1 -1
  294. package/dist/twilight/p-fc65084f.entry.js +4 -0
  295. package/dist/twilight/p-fd81a311.entry.js +4 -0
  296. package/dist/twilight/{p-9fa5ffcf.entry.js → p-fe983809.entry.js} +1 -1
  297. package/dist/twilight/{p-Czq4p9Qp.js → p-i5J7XGS6.js} +1 -1
  298. package/dist/twilight/{p-C2bMx7q5.js → p-shFpk0H3.js} +1 -1
  299. package/dist/twilight/twilight.esm.js +1 -1
  300. package/dist/types/components/salla-add-product-button/salla-add-product-button.d.ts +5 -0
  301. package/dist/types/components/salla-app-install-alert/salla-app-install-alert.d.ts +3 -1
  302. package/dist/types/components/salla-color-picker/salla-color-picker.d.ts +10 -0
  303. package/dist/types/components/salla-product-options/salla-product-options.d.ts +8 -1
  304. package/dist/types/components/salla-products-list/salla-products-list.d.ts +2 -0
  305. package/dist/types/components.d.ts +4 -0
  306. package/package.json +5 -5
  307. package/dist/cjs/salla-accordion_62.cjs.entry.js +0 -22420
  308. package/dist/cjs/salla-review-card.cjs.entry.js +0 -183
  309. package/dist/cjs/salla-reviews-page.cjs.entry.js +0 -695
  310. package/dist/cjs/salla-reviews.cjs.entry.js +0 -106
  311. package/dist/esm/salla-accordion_62.entry.js +0 -22339
  312. package/dist/esm/salla-review-card.entry.js +0 -181
  313. package/dist/esm/salla-reviews-page.entry.js +0 -693
  314. package/dist/esm/salla-reviews.entry.js +0 -104
  315. package/dist/twilight/p-01bccbf2.entry.js +0 -4
  316. package/dist/twilight/p-22d83528.entry.js +0 -4
  317. package/dist/twilight/p-3a74b551.entry.js +0 -4
  318. package/dist/twilight/p-4e416704.entry.js +0 -4
  319. package/dist/twilight/p-5dbf4cec.entry.js +0 -4
  320. package/dist/twilight/p-CBT_Nxny.js +0 -4
  321. package/dist/twilight/p-Dz7o69vX.js +0 -4
  322. package/dist/twilight/p-a42d626d.entry.js +0 -4
  323. package/dist/twilight/p-yRO-ZESF.js +0 -4
  324. package/dist/cjs/{twitter-pOrUNjXi.js → facebook-DbXua6B9.js} +2 -2
  325. package/dist/esm/{twitter-Dz7o69vX.js → facebook-CO-PeZ27.js} +2 -2
@@ -103,6 +103,60 @@
103
103
  "typescriptVersion": "5.5.4"
104
104
  },
105
105
  "collections": [],
106
- "bundles": [],
106
+ "bundles": [
107
+ {
108
+ "components": [
109
+ "salla-cart-item-offers",
110
+ "salla-cart-summary"
111
+ ]
112
+ },
113
+ {
114
+ "components": [
115
+ "salla-alert",
116
+ "salla-bottom-alert"
117
+ ]
118
+ },
119
+ {
120
+ "components": [
121
+ "salla-add-product-button",
122
+ "salla-product-availability",
123
+ "salla-product-options",
124
+ "salla-quick-buy"
125
+ ]
126
+ },
127
+ {
128
+ "components": [
129
+ "salla-accordion",
130
+ "salla-breadcrumb",
131
+ "salla-button",
132
+ "salla-drawer",
133
+ "salla-loading",
134
+ "salla-modal"
135
+ ]
136
+ },
137
+ {
138
+ "components": [
139
+ "salla-booking-field",
140
+ "salla-color-picker",
141
+ "salla-conditional-fields",
142
+ "salla-datetime-picker",
143
+ "salla-file-upload",
144
+ "salla-quantity-input",
145
+ "salla-tel-input"
146
+ ]
147
+ },
148
+ {
149
+ "components": [
150
+ "salla-comment-form",
151
+ "salla-comment-item",
152
+ "salla-comments",
153
+ "salla-rating-stars",
154
+ "salla-review-card",
155
+ "salla-reviews",
156
+ "salla-reviews-page",
157
+ "salla-reviews-summary"
158
+ ]
159
+ }
160
+ ],
107
161
  "global": "global/app.js"
108
162
  }
@@ -22,12 +22,19 @@ export class SallaAddProductButton {
22
22
  this.productType = 'product';
23
23
  this.selectedOptions = [];
24
24
  this.buyNowText = salla.lang.get('pages.products.buy_now');
25
+ /** Use matchMedia instead of window.innerWidth to avoid forced reflow (Lighthouse/PageSpeed) */
26
+ this.isDesktopViewport = typeof window !== 'undefined' ? window.matchMedia('(min-width: 768px)').matches : true;
27
+ this.viewportMediaQuery = null;
28
+ this.onViewportChange = (e) => {
29
+ this.isDesktopViewport = e.matches;
30
+ this.btn?.setText((e.matches && !!this.passedLabel) ? this.passedLabel : this.getLabel());
31
+ };
25
32
  salla.lang.onLoaded(() => {
26
33
  this.buyNowText = salla.lang.get('pages.products.buy_now');
27
34
  });
28
35
  }
29
36
  getLabel() {
30
- if (this.productStatus === 'sale' && this.supportStickyBar && window.innerWidth <= 768 && this.showQuickBuy && this.isApplePayActive) {
37
+ if (this.productStatus === 'sale' && this.supportStickyBar && !this.isDesktopViewport && this.showQuickBuy && this.isApplePayActive) {
31
38
  return Cart;
32
39
  }
33
40
  if (this.hasPreOrder) {
@@ -120,7 +127,7 @@ export class SallaAddProductButton {
120
127
  getQuickBuyBtnAttributes() {
121
128
  return {
122
129
  ...this.getBtnAttributes(),
123
- type: this.supportStickyBar && window.innerWidth <= 768 ? 'plain' : this.productType == 'donating' ? 'donate' : 'buy'
130
+ type: this.supportStickyBar && !this.isDesktopViewport ? 'plain' : this.productType == 'donating' ? 'donate' : 'buy'
124
131
  };
125
132
  }
126
133
  miniCheckoutWidget() {
@@ -143,11 +150,12 @@ export class SallaAddProductButton {
143
150
  && salla.config.get('store.settings.payments')?.includes('apple_pay')
144
151
  && salla.config.get('store.settings.is_salla_gateway', false);
145
152
  this.passedLabel = this.host.innerHTML.replace('<!---->', '').trim();
146
- if (!!this.passedLabel && window.innerWidth >= 768) {
153
+ if (!!this.passedLabel && this.isDesktopViewport) {
147
154
  return this.btn?.setText(this.passedLabel);
148
155
  }
149
156
  if (this.host.getAttribute('type') === 'submit' && this.supportStickyBar) {
150
- window.addEventListener('resize', () => this.btn?.setText((window.innerWidth >= 768 && !!this.passedLabel) ? this.passedLabel : this.getLabel()));
157
+ this.viewportMediaQuery = window.matchMedia('(min-width: 768px)');
158
+ this.viewportMediaQuery.addEventListener('change', this.onViewportChange);
151
159
  }
152
160
  });
153
161
  }
@@ -199,7 +207,7 @@ export class SallaAddProductButton {
199
207
  }
200
208
  componentDidRender() {
201
209
  //if label not passed, get label
202
- if (!!this.passedLabel && (!this.supportStickyBar || window.innerWidth >= 768)) {
210
+ if (!!this.passedLabel && (!this.supportStickyBar || this.isDesktopViewport)) {
203
211
  // if passed label, set it
204
212
  this.btn?.setText(this.passedLabel);
205
213
  return;
@@ -207,6 +215,9 @@ export class SallaAddProductButton {
207
215
  this.btn?.setText(this.getLabel());
208
216
  salla.lang.onLoaded(() => this.btn?.setText(this.getLabel()));
209
217
  }
218
+ disconnectedCallback() {
219
+ this.viewportMediaQuery?.removeEventListener('change', this.onViewportChange);
220
+ }
210
221
  static get is() { return "salla-add-product-button"; }
211
222
  static get originalStyleUrls() {
212
223
  return {
@@ -441,7 +452,8 @@ export class SallaAddProductButton {
441
452
  "selectedOptions": {},
442
453
  "showQuickBuy": {},
443
454
  "isApplePayActive": {},
444
- "buyNowText": {}
455
+ "buyNowText": {},
456
+ "isDesktopViewport": {}
445
457
  };
446
458
  }
447
459
  static get events() {
@@ -25,12 +25,17 @@ export class SallaAppInstallAlert {
25
25
  }
26
26
  /**
27
27
  * Check if the website opens from mobile or tablet devices only (android/ios).
28
+ * Uses matchMedia instead of window.innerWidth to avoid forced reflow (Lighthouse/PageSpeed).
29
+ * Guards against SSR/non-browser contexts (window, navigator, document).
28
30
  *
29
- * @param {number} screen the width of the biggest screen to be checked
31
+ * @param {number} screen the width of the biggest screen to be checked (default 1024)
30
32
  * @returns {boolean} true if it is mobile or tablet else false
31
33
  */
32
34
  isMobileOrTabletDevice(screen = 1024) {
33
- const screenWidth = window.innerWidth <= screen;
35
+ if (typeof window === 'undefined' || typeof navigator === 'undefined' || typeof document === 'undefined') {
36
+ return false;
37
+ }
38
+ const screenWidth = window.matchMedia(`(max-width: ${screen}px)`).matches;
34
39
  const userAgentCheck = /Macintosh|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
35
40
  const hasTouch = 'ontouchstart' in window ||
36
41
  'ontouchend' in document ||
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { h, Host } from "@stencil/core";
4
+ import { h, Host, } from "@stencil/core";
5
5
  import ArrowDown from "../../assets/svg/keyboard_arrow_down.svg";
6
6
  export class SallaColorPicker {
7
7
  constructor() {
@@ -33,6 +33,10 @@ export class SallaColorPicker {
33
33
  * Whether to enable adjusting the alpha channel.
34
34
  */
35
35
  this.enableAlpha = false;
36
+ this.updateViewportCache = () => {
37
+ this.cachedViewportWidth = this.getViewportWidthFromBreakpoints();
38
+ };
39
+ this.cachedViewportWidth = 0; // Will be populated in componentDidLoad via requestAnimationFrame
36
40
  }
37
41
  colorChangeHandler(color) {
38
42
  if (this.colorInput)
@@ -50,7 +54,10 @@ export class SallaColorPicker {
50
54
  this.submitted.emit(color);
51
55
  }
52
56
  popupOpenedHandler(color) {
53
- this.setPopInPosition();
57
+ // Double rAF: defer setPopInPosition (getBoundingClientRect) until after paint to avoid forced reflow
58
+ requestAnimationFrame(() => {
59
+ requestAnimationFrame(() => this.setPopInPosition());
60
+ });
54
61
  this.popupOpened.emit(color);
55
62
  }
56
63
  popupClosedHandler(color) {
@@ -123,26 +130,47 @@ export class SallaColorPicker {
123
130
  this.picker = null;
124
131
  this.pickerReady = null;
125
132
  }
133
+ disconnectedCallback() {
134
+ window.removeEventListener('resize', this.updateViewportCache);
135
+ }
126
136
  componentWillLoad() {
127
137
  salla.onReady(() => {
128
138
  this.color = this.color ? this.color : salla.config.get('theme.color.primary', '#5dd5c4');
129
139
  });
130
140
  }
141
+ /**
142
+ * Returns viewport width from matchMedia breakpoints (no layout read).
143
+ * Must match updateViewportCache breakpoints for consistency.
144
+ */
145
+ getViewportWidthFromBreakpoints() {
146
+ if (typeof window === 'undefined')
147
+ return 1024;
148
+ if (window.matchMedia('(min-width: 1200px)').matches)
149
+ return 1200;
150
+ if (window.matchMedia('(min-width: 992px)').matches)
151
+ return 992;
152
+ if (window.matchMedia('(min-width: 768px)').matches)
153
+ return 768;
154
+ return 375;
155
+ }
131
156
  setPopInPosition() {
157
+ // Use cached viewport width – reading innerWidth at popup open causes forced reflow.
158
+ // Fallback: matchMedia-based value when cache is 0 (e.g. SSR before hydration). Same breakpoints as updateViewportCache.
159
+ const viewportWidth = this.cachedViewportWidth || this.getViewportWidthFromBreakpoints();
132
160
  const popup = this.host.querySelector('.picker_wrapper');
133
161
  const widgetEl = this.host.querySelector('.s-color-picker-widget');
134
162
  if (!popup || !widgetEl)
135
163
  return;
136
164
  const widgetPosition = widgetEl.getBoundingClientRect();
137
- const widgetToWindowEq = window.innerWidth / 2 - widgetPosition.width / 2;
165
+ const widgetToWindowEq = viewportWidth / 2 - widgetPosition.width / 2;
138
166
  const widgetInLeft = widgetToWindowEq > widgetPosition.x;
139
167
  const widgetInRight = widgetToWindowEq < widgetPosition.x;
140
168
  const widgetInCenter = widgetToWindowEq === widgetPosition.x;
141
- const isMobile = window.innerWidth < 768;
169
+ const isMobile = !window.matchMedia('(min-width: 768px)').matches;
142
170
  if (isMobile && widgetInLeft) {
143
171
  popup.style.left = '0';
144
172
  }
145
- if (isMobile && (widgetInRight)) {
173
+ if (isMobile && widgetInRight) {
146
174
  popup.style.left = 'auto';
147
175
  }
148
176
  if (!isMobile || (isMobile && ((!widgetInRight && !widgetInLeft) || widgetInCenter))) {
@@ -150,7 +178,7 @@ export class SallaColorPicker {
150
178
  }
151
179
  }
152
180
  initColorPicker() {
153
- this.pickerReady = import('vanilla-picker').then((mod) => {
181
+ this.pickerReady = import('vanilla-picker').then(mod => {
154
182
  const Picker = mod.default;
155
183
  const picker = new Picker({
156
184
  parent: this.host,
@@ -170,14 +198,17 @@ export class SallaColorPicker {
170
198
  });
171
199
  }
172
200
  render() {
173
- return (h(Host, { key: 'f6a001611bf20e8264346028c848490cf94c686a', class: "s-color-picker-main" }, h("slot", { key: '79648d165d81f200e064c8ef56a138f6b66757ed', name: "widget" }, h("div", { key: '95e7a8b7a92f5bb8f6f05b8cd39e6c91710e52a2', class: "s-color-picker-widget" }, h("div", { key: '24813d1de9a5834cfd37edf7affd4be94608f96c', class: "s-color-picker-widget-canvas", ref: dv => this.canvas = dv }), h("span", { key: '5f29f537140bc4b74431fc33229563cb1b7ce231', innerHTML: ArrowDown }))), h("input", { key: '188a9d7233388fca9a25cd5d319c0973448b07bc', class: "s-hidden", name: this.name, required: this.required, value: this.color, ref: color => this.colorInput = color })));
201
+ return (h(Host, { key: 'dc90f101197031b0ec17939dc940b527cbb42764', class: "s-color-picker-main" }, h("slot", { key: '504a93f8bba3130a953dbfc1e03420d622247c0f', name: "widget" }, h("div", { key: '7eb60d1353d1fa6edefc400d7851499d083c3000', class: "s-color-picker-widget" }, h("div", { key: '01361959e0beeecd5c4b9ba0210931f3864b9273', class: "s-color-picker-widget-canvas", ref: dv => (this.canvas = dv) }), h("span", { key: '4091ba421758a3af182e7224ffbd74c5ca58166a', innerHTML: ArrowDown }))), h("input", { key: '5302b4da7dc9beaec6ab469175dee79d5b8c5dc5', class: "s-hidden", name: this.name, required: this.required, value: this.color, ref: color => (this.colorInput = color) })));
174
202
  }
175
203
  componentDidLoad() {
176
204
  if (this.canvas)
177
205
  this.canvas.style.backgroundColor = this.color;
178
206
  this.initColorPicker();
207
+ // Populate viewport cache in next frame (avoids forced reflow during initial render)
208
+ requestAnimationFrame(() => this.updateViewportCache());
209
+ window.addEventListener('resize', this.updateViewportCache);
179
210
  if (this.colorInput) {
180
- this.colorInput.addEventListener('invalid', (e) => {
211
+ this.colorInput.addEventListener('invalid', e => {
181
212
  this.invalidInput.emit(e);
182
213
  });
183
214
  this.colorInput.addEventListener('input', () => {
@@ -7,14 +7,16 @@ export class SallaMaintenanceAlert {
7
7
  componentWillLoad() {
8
8
  this.title = salla.config.get('maintenance_details.title');
9
9
  this.message = salla.config.get('maintenance_details.message');
10
- this.buttonTitle = window.innerWidth <= 768 ? salla.config.get('maintenance_details.button_title') : salla.config.get('maintenance_details.button_full_title');
10
+ // Use matchMedia instead of window.innerWidth to avoid forced reflow (Lighthouse/PageSpeed)
11
+ const isMobile = typeof window !== 'undefined' && !window.matchMedia('(min-width: 768px)').matches;
12
+ this.buttonTitle = isMobile ? salla.config.get('maintenance_details.button_title') : salla.config.get('maintenance_details.button_full_title');
11
13
  }
12
14
  closeAlert() {
13
15
  salla.storage.set('hide_salla-maintenance-alert_at', Date.now());
14
16
  this.host.style.display = 'none';
15
17
  }
16
18
  render() {
17
- return (h(Host, { key: 'f307529d9fa1a3cfdf33cc48dea142e274eb4f72', class: "s-maintenance-alert-wrapper" }, h("button", { key: 'a8a8d3d4c03151f9fe468153d4368ab66de0ba5f', class: "s-maintenance-alert-close", innerHTML: Cancel, onClick: () => this.closeAlert() }), h("div", { key: 'f53e7ab72950f72b68eeb5ff6887203e8f6d0dbd', class: "s-maintenance-alert-content" }, h("div", { key: 'c3c69c738da0417114c87b03c49f0a8d36663558', class: "s-maintenance-alert-container" }, h("div", { key: 'af1ec8ff601873c04de610341f15775e05a5d185', class: "s-maintenance-alert-icon" }, h("img", { key: 'a1b6dd0d161749eff7f6e7d4e92fd161896b593b', src: salla.url.cdn('images/alert.png'), alt: "Alert" })), h("div", { key: 'f1f81302bbaf4d83d50770ff1f40416624bde583', class: "s-maintenance-alert-text" }, h("h2", { key: '79eab40b1cf6cf9d307d1e9bda24fe6dd8c03852' }, this.title), h("p", { key: '5bdbe219346851b9aff8c20fd41075853fe6b981' }, this.message))), h("div", { key: '8e2cd9ad611a551ee7960310f11a9f7f07668811' }, h("a", { key: '9658d9a3e82f9719c35caf362601a12a62475508', class: "s-maintenance-alert-btn", href: salla.config.get('maintenance_details.button_url') }, this.buttonTitle)))));
19
+ return (h(Host, { key: '109e687d7d6ba48ddf89cd3631f5a852d50688fd', class: "s-maintenance-alert-wrapper" }, h("button", { key: 'd70e7e53acc699336e1611589ca3bdfc704504c2', class: "s-maintenance-alert-close", innerHTML: Cancel, onClick: () => this.closeAlert() }), h("div", { key: 'b816c1a9635828c206c792d68203ccfbe8e8235b', class: "s-maintenance-alert-content" }, h("div", { key: '61e91088a5613d943b6f662f5ed44093ecf99237', class: "s-maintenance-alert-container" }, h("div", { key: '1ca223334f52bc5097677dd23433107080567894', class: "s-maintenance-alert-icon" }, h("img", { key: '22e07c7a104267cda2bed74929307d039018698d', src: salla.url.cdn('images/alert.png'), alt: "Alert" })), h("div", { key: '64d37700bc1454f5afadb55b49512bbd5b412d9c', class: "s-maintenance-alert-text" }, h("h2", { key: '7651dcd09a0ba07f14ed744758598015d4b45ecd' }, this.title), h("p", { key: '1f8d057af072466f34d0f3a13396de5144bc967f' }, this.message))), h("div", { key: '34f8471b855011b499c2038b1ac9dd24cc5e2e8b' }, h("a", { key: 'd9c4f4a9fb80ab90c13dc1dde69adcb7c4cd7e9f', class: "s-maintenance-alert-btn", href: salla.config.get('maintenance_details.button_url') }, this.buttonTitle)))));
18
20
  }
19
21
  componentDidLoad() {
20
22
  //auto-hide the alert if close button is clicked before one hour
@@ -26,6 +26,7 @@ export class SallaProductOptions {
26
26
  this.disableCardValue = true;
27
27
  this.availableDigitalCardValues = [];
28
28
  this.userInitiatedValidation = false;
29
+ this.isCartMode = false;
29
30
  this.outSkus = [];
30
31
  /**
31
32
  * Avoid selection of previous default or selected card value option
@@ -507,10 +508,12 @@ export class SallaProductOptions {
507
508
  return acc.concat(mappedDetails);
508
509
  }, []);
509
510
  }
510
- componentDidLoad() {
511
+ async componentDidLoad() {
511
512
  if (!this.optionsData?.length) {
512
513
  return;
513
514
  }
515
+ // Register for hooks — theme can call enterCartMode() here
516
+ await Salla.hooks.registerComponent('salla-product-options', this);
514
517
  // Handle donation options
515
518
  const selectedDonationOption = this.optionsData.find(option => option.type === DisplayType.DONATION)?.details?.find(detail => detail.is_selected);
516
519
  if (selectedDonationOption) {
@@ -522,8 +525,9 @@ export class SallaProductOptions {
522
525
  }, 1000);
523
526
  }
524
527
  // Handle pre-selected options on product page
528
+ // Skip if in cart mode (enterCartMode called by hook) or on cart page
525
529
  // Call salla.product.getPrice() directly to avoid triggering form validation which causes unwanted scroll
526
- if (!salla.url.is_page("cart")) {
530
+ if (!salla.url.is_page("cart") && !this.isCartMode) {
527
531
  const pricingOptionTypes = [
528
532
  DisplayType.SINGLE_OPTION,
529
533
  DisplayType.MULTIPLE_OPTIONS,
@@ -556,6 +560,17 @@ export class SallaProductOptions {
556
560
  }
557
561
  }
558
562
  }
563
+ /**
564
+ * Switch the component to cart-item mode: fill selected options,
565
+ * enable disabled-out-of-stock, and skip product price updates.
566
+ * Used by themes when treating a product page as a cart item editor.
567
+ */
568
+ async enterCartMode() {
569
+ this.isCartMode = true;
570
+ this.disableCardValue = false;
571
+ this.canDisabled = true;
572
+ this.fillSelectedOptions();
573
+ }
559
574
  /**
560
575
  * Enable user-initiated validation mode so invalid fields will scroll into view
561
576
  */
@@ -943,7 +958,8 @@ export class SallaProductOptions {
943
958
  "selectedOutSkus": {},
944
959
  "disableCardValue": {},
945
960
  "availableDigitalCardValues": {},
946
- "userInitiatedValidation": {}
961
+ "userInitiatedValidation": {},
962
+ "isCartMode": {}
947
963
  };
948
964
  }
949
965
  static get events() {
@@ -1105,6 +1121,23 @@ export class SallaProductOptions {
1105
1121
  "tags": []
1106
1122
  }
1107
1123
  },
1124
+ "enterCartMode": {
1125
+ "complexType": {
1126
+ "signature": "() => Promise<void>",
1127
+ "parameters": [],
1128
+ "references": {
1129
+ "Promise": {
1130
+ "location": "global",
1131
+ "id": "global::Promise"
1132
+ }
1133
+ },
1134
+ "return": "Promise<void>"
1135
+ },
1136
+ "docs": {
1137
+ "text": "Switch the component to cart-item mode: fill selected options,\nenable disabled-out-of-stock, and skip product price updates.\nUsed by themes when treating a product page as a cart item editor.",
1138
+ "tags": []
1139
+ }
1140
+ },
1108
1141
  "enableUserInitiatedValidation": {
1109
1142
  "complexType": {
1110
1143
  "signature": "() => Promise<void>",
@@ -34,6 +34,8 @@ export class SallaProductsList {
34
34
  this.prevCategoryIdKey = "prevCategoryId";
35
35
  this.isProcessing = false; // Tracks if we are processing data
36
36
  this.scrollTimeout = null;
37
+ this.boundScrollToLastViewedProduct = () => this.scrollToLastViewedProduct();
38
+ this.boundHandleScroll = () => this.handleScroll();
37
39
  this.specialPagesWithoutIds = {
38
40
  'product.index.latest': 'latest',
39
41
  'product.index.offers': 'offers',
@@ -58,11 +60,12 @@ export class SallaProductsList {
58
60
  if ("scrollRestoration" in history)
59
61
  history.scrollRestoration = "manual";
60
62
  // required for scroll restoration case when the component loads before DOM content is completed (slow internet bandwidth /low device specs)
61
- window.addEventListener('DOMContentLoaded', this.scrollToLastViewedProduct.bind(this));
63
+ window.addEventListener('DOMContentLoaded', this.boundScrollToLastViewedProduct);
62
64
  salla.event.on('salla-filters::changed', filters => this.setFilters(filters));
63
65
  }
64
66
  disconnectedCallback() {
65
- window.removeEventListener('DOMContentLoaded', this.scrollToLastViewedProduct);
67
+ window.removeEventListener('DOMContentLoaded', this.boundScrollToLastViewedProduct);
68
+ window.removeEventListener('scroll', this.boundHandleScroll);
66
69
  }
67
70
  /**
68
71
  * Set parsed filters data from URI
@@ -464,7 +467,7 @@ export class SallaProductsList {
464
467
  this.loading(true, this.autoload ? false : true);
465
468
  });
466
469
  // Manual scroll listener
467
- shouldApplyManualLoad && window.addEventListener('scroll', this.handleScroll.bind(this));
470
+ shouldApplyManualLoad && window.addEventListener('scroll', this.boundHandleScroll);
468
471
  this.infiniteScroll?.on('load', async (response) => {
469
472
  if (this.isProcessing)
470
473
  return;
@@ -517,14 +520,17 @@ export class SallaProductsList {
517
520
  return;
518
521
  this.scrollTimeout = setTimeout(() => {
519
522
  this.scrollTimeout = null;
520
- const wrapperRect = this.wrapper.getBoundingClientRect();
521
- const windowHeight = window.innerHeight;
522
- const distanceToBottom = wrapperRect.bottom - windowHeight;
523
- // Trigger only when the wrapper bottom is within 200px of the viewport bottom
524
- if (distanceToBottom <= 200 && !this.isProcessing && this.nextPage) {
525
- // Reached near the bottom of the wrapper, loading next page...
526
- this.manualLoadNextPage();
527
- }
523
+ // Defer layout reads to next frame to avoid forced reflow (Lighthouse/PageSpeed)
524
+ requestAnimationFrame(() => {
525
+ const wrapperRect = this.wrapper.getBoundingClientRect();
526
+ const windowHeight = window.innerHeight;
527
+ const distanceToBottom = wrapperRect.bottom - windowHeight;
528
+ // Trigger only when the wrapper bottom is within 200px of the viewport bottom
529
+ if (distanceToBottom <= 200 && !this.isProcessing && this.nextPage) {
530
+ // Reached near the bottom of the wrapper, loading next page...
531
+ this.manualLoadNextPage();
532
+ }
533
+ });
528
534
  }, 200);
529
535
  }
530
536
  manualLoadNextPage() {