@salla.sa/twilight-components 2.14.591 → 2.14.593

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 (384) hide show
  1. package/dist/cjs/{apple-pay-order-options-B036Wu4O.js → apple-pay-order-options-CA8IYRTb.js} +1 -0
  2. package/dist/cjs/{filepond-DkObEO32.js → filepond-Dh9Ih7bu.js} +1 -1
  3. package/dist/cjs/{filepond-plugin-file-poster-wXgeY5cU.js → filepond-plugin-file-poster-C6Sx5vF0.js} +1 -1
  4. package/dist/cjs/{filepond-plugin-file-validate-size-CWleid1C.js → filepond-plugin-file-validate-size-DdzdetN6.js} +1 -1
  5. package/dist/cjs/{filepond-plugin-file-validate-type-CJLl2hbe.js → filepond-plugin-file-validate-type-DRWFKOpQ.js} +1 -1
  6. package/dist/cjs/{filepond-plugin-image-edit-Bp6AxXM9.js → filepond-plugin-image-edit-B4vaf2kZ.js} +1 -1
  7. package/dist/cjs/{filepond-plugin-image-exif-orientation-abWKSX9-.js → filepond-plugin-image-exif-orientation-BXfm40Ut.js} +1 -1
  8. package/dist/cjs/{filepond-plugin-image-preview-DxprNycS.js → filepond-plugin-image-preview-DQLCCOAs.js} +1 -1
  9. package/dist/cjs/{helpers-DBynEhOO.js → helpers-DSseNQ1K.js} +1 -1
  10. package/dist/cjs/{index-DBN0LueR.js → index-CLrjVXN1.js} +3 -3
  11. package/dist/cjs/{intlTelInput-B6H18Td2.js → intlTelInput-o62W18dw.js} +1 -1
  12. package/dist/cjs/loader.cjs.js +2 -2
  13. package/dist/cjs/salla-accordion-body_2.cjs.entry.js +1 -1
  14. package/dist/cjs/salla-accordion_6.cjs.entry.js +1 -1
  15. package/dist/cjs/salla-add-product-button_5.cjs.entry.js +152 -7
  16. package/dist/cjs/salla-advertisement.cjs.entry.js +1 -1
  17. package/dist/cjs/salla-alert_2.cjs.entry.js +1 -1
  18. package/dist/cjs/salla-app-install-alert.cjs.entry.js +1 -1
  19. package/dist/cjs/salla-applied-filters.cjs.entry.js +1 -1
  20. package/dist/cjs/salla-apps-icons.cjs.entry.js +1 -1
  21. package/dist/cjs/salla-attachment-view_9.cjs.entry.js +11 -11
  22. package/dist/cjs/salla-badge.cjs.entry.js +1 -1
  23. package/dist/cjs/salla-basket-gap.cjs.entry.js +1 -1
  24. package/dist/cjs/salla-bullet-delivery_3.cjs.entry.js +45 -34
  25. package/dist/cjs/salla-cart-coupons.cjs.entry.js +1 -1
  26. package/dist/cjs/salla-cart-item-offers_2.cjs.entry.js +1 -1
  27. package/dist/cjs/salla-cart-summary-card.cjs.entry.js +1 -1
  28. package/dist/cjs/salla-cashback-banner.cjs.entry.js +1 -1
  29. package/dist/cjs/salla-comment-factors.cjs.entry.js +1 -1
  30. package/dist/cjs/salla-comment-form_9.cjs.entry.js +3 -3
  31. package/dist/cjs/salla-conditional-offer.cjs.entry.js +1 -1
  32. package/dist/cjs/salla-contacts.cjs.entry.js +1 -1
  33. package/dist/cjs/salla-cookies-bar.cjs.entry.js +1 -1
  34. package/dist/cjs/salla-count-down.cjs.entry.js +1 -1
  35. package/dist/cjs/salla-custom-fields.cjs.entry.js +1 -1
  36. package/dist/cjs/salla-delivery-promise.cjs.entry.js +2 -2
  37. package/dist/cjs/salla-edit-order-button.cjs.entry.js +1 -1
  38. package/dist/cjs/salla-filters-widget.cjs.entry.js +1 -1
  39. package/dist/cjs/salla-filters.cjs.entry.js +1 -1
  40. package/dist/cjs/salla-fulfillment-methods.cjs.entry.js +1 -1
  41. package/dist/cjs/salla-gift-card-redeem_2.cjs.entry.js +2 -2
  42. package/dist/cjs/salla-gifting.cjs.entry.js +2 -2
  43. package/dist/cjs/salla-hook.cjs.entry.js +1 -1
  44. package/dist/cjs/salla-infinite-scroll.cjs.entry.js +1 -1
  45. package/dist/cjs/salla-installment.cjs.entry.js +1 -1
  46. package/dist/cjs/salla-list-tile.cjs.entry.js +1 -1
  47. package/dist/cjs/salla-localization-modal.cjs.entry.js +1 -1
  48. package/dist/cjs/salla-login-modal.cjs.entry.js +1 -1
  49. package/dist/cjs/salla-loyalty-banner_10.cjs.entry.js +1 -1
  50. package/dist/cjs/salla-loyalty-exchange-product-card.cjs.entry.js +1 -1
  51. package/dist/cjs/salla-loyalty-points-banner.cjs.entry.js +1 -1
  52. package/dist/cjs/salla-loyalty-points-history.cjs.entry.js +1 -1
  53. package/dist/cjs/salla-loyalty-prize-item.cjs.entry.js +1 -1
  54. package/dist/cjs/salla-loyalty.cjs.entry.js +1 -1
  55. package/dist/cjs/salla-maintenance-alert.cjs.entry.js +1 -1
  56. package/dist/cjs/salla-map_3.cjs.entry.js +1 -1
  57. package/dist/cjs/salla-menu.cjs.entry.js +1 -1
  58. package/dist/cjs/salla-metadata.cjs.entry.js +1 -1
  59. package/dist/cjs/salla-multiple-bundle-product-cart_2.cjs.entry.js +1 -1
  60. package/dist/cjs/salla-multiple-bundle-product-options-modal_2.cjs.entry.js +1 -1
  61. package/dist/cjs/salla-multiple-bundle-product.cjs.entry.js +1 -1
  62. package/dist/cjs/salla-next-order-coupon.cjs.entry.js +1 -1
  63. package/dist/cjs/salla-notification-item_2.cjs.entry.js +1 -1
  64. package/dist/cjs/salla-offer-modal.cjs.entry.js +1 -1
  65. package/dist/cjs/salla-offer.cjs.entry.js +1 -1
  66. package/dist/cjs/salla-order-branch.cjs.entry.js +1 -1
  67. package/dist/cjs/salla-order-cancel.cjs.entry.js +1 -1
  68. package/dist/cjs/salla-order-details-multiple-bundle-product.cjs.entry.js +1 -1
  69. package/dist/cjs/salla-order-details-options.cjs.entry.js +1 -1
  70. package/dist/cjs/salla-order-details.cjs.entry.js +1 -1
  71. package/dist/cjs/salla-order-edit-item.cjs.entry.js +1 -1
  72. package/dist/cjs/salla-order-edit-product-card.cjs.entry.js +1 -1
  73. package/dist/cjs/salla-order-edit.cjs.entry.js +1 -1
  74. package/dist/cjs/salla-order-options-modal.cjs.entry.js +1 -1
  75. package/dist/cjs/salla-order-shipments.cjs.entry.js +1 -1
  76. package/dist/cjs/salla-order-summary.cjs.entry.js +1 -1
  77. package/dist/cjs/salla-order-totals-card.cjs.entry.js +1 -1
  78. package/dist/cjs/salla-orders.cjs.entry.js +1 -1
  79. package/dist/cjs/salla-payments.cjs.entry.js +1 -1
  80. package/dist/cjs/salla-placeholder.cjs.entry.js +1 -1
  81. package/dist/cjs/salla-price-range.cjs.entry.js +1 -1
  82. package/dist/cjs/salla-product-card-embed.cjs.entry.js +1 -1
  83. package/dist/cjs/salla-product-card.cjs.entry.js +1 -1
  84. package/dist/cjs/salla-product-size-guide.cjs.entry.js +1 -1
  85. package/dist/cjs/salla-products-list.cjs.entry.js +1 -1
  86. package/dist/cjs/salla-products-slider.cjs.entry.js +1 -1
  87. package/dist/cjs/salla-quick-order.cjs.entry.js +1 -1
  88. package/dist/cjs/salla-rating-modal-v2.cjs.entry.js +1 -1
  89. package/dist/cjs/salla-rating-modal.cjs.entry.js +1 -1
  90. package/dist/cjs/salla-review-factors-tags.cjs.entry.js +2 -2
  91. package/dist/cjs/salla-review-order-item.cjs.entry.js +1 -1
  92. package/dist/cjs/salla-scopes.cjs.entry.js +1 -1
  93. package/dist/cjs/salla-search-product-card.cjs.entry.js +3 -3
  94. package/dist/cjs/salla-search.cjs.entry.js +2 -2
  95. package/dist/cjs/salla-skeleton.cjs.entry.js +2 -2
  96. package/dist/cjs/salla-social-share.cjs.entry.js +2 -2
  97. package/dist/cjs/salla-social.cjs.entry.js +2 -2
  98. package/dist/cjs/salla-tab-content_3.cjs.entry.js +4 -4
  99. package/dist/cjs/salla-tiered-offer.cjs.entry.js +1 -1
  100. package/dist/cjs/salla-trust-badges.cjs.entry.js +1 -1
  101. package/dist/cjs/salla-user-menu.cjs.entry.js +1 -1
  102. package/dist/cjs/salla-user-profile.cjs.entry.js +1 -1
  103. package/dist/cjs/salla-user-settings.cjs.entry.js +2 -2
  104. package/dist/cjs/salla-verify.cjs.entry.js +1 -1
  105. package/dist/cjs/salla-wallet.cjs.entry.js +1 -1
  106. package/dist/cjs/salla-wishlist-actions.cjs.entry.js +2 -2
  107. package/dist/cjs/salla-wishlist-summary.cjs.entry.js +1 -1
  108. package/dist/cjs/twilight.cjs.js +2 -2
  109. package/dist/cjs/{vanilla-picker-Cm71HMBs.js → vanilla-picker-FCNrUTtN.js} +1 -1
  110. package/dist/collection/components/salla-add-product-button/salla-add-product-button.css +58 -36
  111. package/dist/collection/components/salla-add-product-button/salla-add-product-button.js +120 -2
  112. package/dist/collection/components/salla-bullet-delivery/helpers.js +1 -1
  113. package/dist/collection/components/salla-bullet-delivery/salla-bullet-delivery.js +39 -28
  114. package/dist/collection/components/salla-order-options-modal/apple-pay-order-options.js +1 -1
  115. package/dist/collection/components/salla-quick-buy/salla-quick-buy.js +17 -4
  116. package/dist/collection/components/salla-review-card/salla-review-card.js +1 -1
  117. package/dist/collection/components/salla-review-factors-tags/salla-review-factors-tags.js +1 -1
  118. package/dist/collection/components/salla-reviews-page/salla-reviews-page.js +1 -1
  119. package/dist/collection/components/salla-search/salla-search.js +1 -1
  120. package/dist/collection/components/salla-search-product-card/salla-search-product-card.js +2 -2
  121. package/dist/collection/components/salla-searchable-dropdown/salla-searchable-dropdown.js +4 -4
  122. package/dist/collection/components/salla-skeleton/salla-skeleton.js +1 -1
  123. package/dist/collection/components/salla-social/salla-social.js +1 -1
  124. package/dist/collection/components/salla-social-share/salla-social-share.js +1 -1
  125. package/dist/collection/components/salla-tabs/salla-tab-content.js +1 -1
  126. package/dist/collection/components/salla-tabs/salla-tab-header.js +1 -1
  127. package/dist/collection/components/salla-tabs/salla-tabs.js +1 -1
  128. package/dist/collection/components/salla-tel-input/salla-tel-input.js +1 -1
  129. package/dist/collection/components/salla-tooltip/salla-tooltip.js +1 -1
  130. package/dist/collection/components/salla-user-settings/salla-user-settings.js +1 -1
  131. package/dist/collection/components/salla-wishlist-actions/salla-wishlist-actions.js +1 -1
  132. package/dist/components/apple-pay-order-options.js +1 -1
  133. package/dist/components/helpers.js +2 -2
  134. package/dist/components/index.js +3 -3
  135. package/dist/components/salla-add-product-button2.js +120 -3
  136. package/dist/components/salla-bullet-delivery.js +40 -29
  137. package/dist/components/salla-delivery-promise.js +1 -1
  138. package/dist/components/salla-gifting.js +1 -1
  139. package/dist/components/salla-quick-buy2.js +35 -5
  140. package/dist/components/salla-review-card2.js +1 -1
  141. package/dist/components/salla-review-factors-tags2.js +1 -1
  142. package/dist/components/salla-reviews-page.js +1 -1
  143. package/dist/components/salla-search-product-card2.js +2 -2
  144. package/dist/components/salla-search.js +1 -1
  145. package/dist/components/salla-searchable-dropdown2.js +4 -4
  146. package/dist/components/salla-skeleton2.js +1 -1
  147. package/dist/components/salla-social-share2.js +1 -1
  148. package/dist/components/salla-social.js +1 -1
  149. package/dist/components/salla-tab-content2.js +1 -1
  150. package/dist/components/salla-tab-header2.js +1 -1
  151. package/dist/components/salla-tabs2.js +1 -1
  152. package/dist/components/salla-tel-input2.js +1 -1
  153. package/dist/components/salla-tooltip2.js +1 -1
  154. package/dist/components/salla-user-settings.js +1 -1
  155. package/dist/components/salla-wishlist-actions.js +1 -1
  156. package/dist/docs.json +29 -13
  157. package/dist/esm/{apple-pay-order-options-s0kn7yr8.js → apple-pay-order-options-BS2iQKah.js} +1 -1
  158. package/dist/esm/{filepond-Cstf5r6K.js → filepond-DTcw03Zq.js} +1 -1
  159. package/dist/esm/{filepond-plugin-file-poster-GibBgGHW.js → filepond-plugin-file-poster-Csk5cMw9.js} +1 -1
  160. package/dist/esm/{filepond-plugin-file-validate-size-CLc6zco6.js → filepond-plugin-file-validate-size-FFrf5LrW.js} +1 -1
  161. package/dist/esm/{filepond-plugin-file-validate-type-Ca3dc8p0.js → filepond-plugin-file-validate-type-DeZP4xXd.js} +1 -1
  162. package/dist/esm/{filepond-plugin-image-edit-CNGBLi7d.js → filepond-plugin-image-edit-DRKyd_1I.js} +1 -1
  163. package/dist/esm/{filepond-plugin-image-exif-orientation-Dmmu9-UQ.js → filepond-plugin-image-exif-orientation-CxVz7OAy.js} +1 -1
  164. package/dist/esm/{filepond-plugin-image-preview-KX15tx60.js → filepond-plugin-image-preview-CsKN7em3.js} +1 -1
  165. package/dist/esm/{helpers-BJxBnTgv.js → helpers-DgRxTSyJ.js} +2 -2
  166. package/dist/esm/{index-UnmOIma5.js → index-0Tl_yZW8.js} +3 -3
  167. package/dist/esm/{intlTelInput-C-F-rxZ3.js → intlTelInput-CBN9egFg.js} +1 -1
  168. package/dist/esm/loader.js +3 -3
  169. package/dist/esm/salla-accordion-body_2.entry.js +1 -1
  170. package/dist/esm/salla-accordion_6.entry.js +1 -1
  171. package/dist/esm/salla-add-product-button_5.entry.js +152 -7
  172. package/dist/esm/salla-advertisement.entry.js +1 -1
  173. package/dist/esm/salla-alert_2.entry.js +1 -1
  174. package/dist/esm/salla-app-install-alert.entry.js +1 -1
  175. package/dist/esm/salla-applied-filters.entry.js +1 -1
  176. package/dist/esm/salla-apps-icons.entry.js +1 -1
  177. package/dist/esm/salla-attachment-view_9.entry.js +11 -11
  178. package/dist/esm/salla-badge.entry.js +1 -1
  179. package/dist/esm/salla-basket-gap.entry.js +1 -1
  180. package/dist/esm/salla-bullet-delivery_3.entry.js +45 -34
  181. package/dist/esm/salla-cart-coupons.entry.js +1 -1
  182. package/dist/esm/salla-cart-item-offers_2.entry.js +1 -1
  183. package/dist/esm/salla-cart-summary-card.entry.js +1 -1
  184. package/dist/esm/salla-cashback-banner.entry.js +1 -1
  185. package/dist/esm/salla-comment-factors.entry.js +1 -1
  186. package/dist/esm/salla-comment-form_9.entry.js +3 -3
  187. package/dist/esm/salla-conditional-offer.entry.js +1 -1
  188. package/dist/esm/salla-contacts.entry.js +1 -1
  189. package/dist/esm/salla-cookies-bar.entry.js +1 -1
  190. package/dist/esm/salla-count-down.entry.js +1 -1
  191. package/dist/esm/salla-custom-fields.entry.js +1 -1
  192. package/dist/esm/salla-delivery-promise.entry.js +2 -2
  193. package/dist/esm/salla-edit-order-button.entry.js +1 -1
  194. package/dist/esm/salla-filters-widget.entry.js +1 -1
  195. package/dist/esm/salla-filters.entry.js +1 -1
  196. package/dist/esm/salla-fulfillment-methods.entry.js +1 -1
  197. package/dist/esm/salla-gift-card-redeem_2.entry.js +2 -2
  198. package/dist/esm/salla-gifting.entry.js +2 -2
  199. package/dist/esm/salla-hook.entry.js +1 -1
  200. package/dist/esm/salla-infinite-scroll.entry.js +1 -1
  201. package/dist/esm/salla-installment.entry.js +1 -1
  202. package/dist/esm/salla-list-tile.entry.js +1 -1
  203. package/dist/esm/salla-localization-modal.entry.js +1 -1
  204. package/dist/esm/salla-login-modal.entry.js +1 -1
  205. package/dist/esm/salla-loyalty-banner_10.entry.js +1 -1
  206. package/dist/esm/salla-loyalty-exchange-product-card.entry.js +1 -1
  207. package/dist/esm/salla-loyalty-points-banner.entry.js +1 -1
  208. package/dist/esm/salla-loyalty-points-history.entry.js +1 -1
  209. package/dist/esm/salla-loyalty-prize-item.entry.js +1 -1
  210. package/dist/esm/salla-loyalty.entry.js +1 -1
  211. package/dist/esm/salla-maintenance-alert.entry.js +1 -1
  212. package/dist/esm/salla-map_3.entry.js +1 -1
  213. package/dist/esm/salla-menu.entry.js +1 -1
  214. package/dist/esm/salla-metadata.entry.js +1 -1
  215. package/dist/esm/salla-multiple-bundle-product-cart_2.entry.js +1 -1
  216. package/dist/esm/salla-multiple-bundle-product-options-modal_2.entry.js +1 -1
  217. package/dist/esm/salla-multiple-bundle-product.entry.js +1 -1
  218. package/dist/esm/salla-next-order-coupon.entry.js +1 -1
  219. package/dist/esm/salla-notification-item_2.entry.js +1 -1
  220. package/dist/esm/salla-offer-modal.entry.js +1 -1
  221. package/dist/esm/salla-offer.entry.js +1 -1
  222. package/dist/esm/salla-order-branch.entry.js +1 -1
  223. package/dist/esm/salla-order-cancel.entry.js +1 -1
  224. package/dist/esm/salla-order-details-multiple-bundle-product.entry.js +1 -1
  225. package/dist/esm/salla-order-details-options.entry.js +1 -1
  226. package/dist/esm/salla-order-details.entry.js +1 -1
  227. package/dist/esm/salla-order-edit-item.entry.js +1 -1
  228. package/dist/esm/salla-order-edit-product-card.entry.js +1 -1
  229. package/dist/esm/salla-order-edit.entry.js +1 -1
  230. package/dist/esm/salla-order-options-modal.entry.js +1 -1
  231. package/dist/esm/salla-order-shipments.entry.js +1 -1
  232. package/dist/esm/salla-order-summary.entry.js +1 -1
  233. package/dist/esm/salla-order-totals-card.entry.js +1 -1
  234. package/dist/esm/salla-orders.entry.js +1 -1
  235. package/dist/esm/salla-payments.entry.js +1 -1
  236. package/dist/esm/salla-placeholder.entry.js +1 -1
  237. package/dist/esm/salla-price-range.entry.js +1 -1
  238. package/dist/esm/salla-product-card-embed.entry.js +1 -1
  239. package/dist/esm/salla-product-card.entry.js +1 -1
  240. package/dist/esm/salla-product-size-guide.entry.js +1 -1
  241. package/dist/esm/salla-products-list.entry.js +1 -1
  242. package/dist/esm/salla-products-slider.entry.js +1 -1
  243. package/dist/esm/salla-quick-order.entry.js +1 -1
  244. package/dist/esm/salla-rating-modal-v2.entry.js +1 -1
  245. package/dist/esm/salla-rating-modal.entry.js +1 -1
  246. package/dist/esm/salla-review-factors-tags.entry.js +2 -2
  247. package/dist/esm/salla-review-order-item.entry.js +1 -1
  248. package/dist/esm/salla-scopes.entry.js +1 -1
  249. package/dist/esm/salla-search-product-card.entry.js +3 -3
  250. package/dist/esm/salla-search.entry.js +2 -2
  251. package/dist/esm/salla-skeleton.entry.js +2 -2
  252. package/dist/esm/salla-social-share.entry.js +2 -2
  253. package/dist/esm/salla-social.entry.js +2 -2
  254. package/dist/esm/salla-tab-content_3.entry.js +4 -4
  255. package/dist/esm/salla-tiered-offer.entry.js +1 -1
  256. package/dist/esm/salla-trust-badges.entry.js +1 -1
  257. package/dist/esm/salla-user-menu.entry.js +1 -1
  258. package/dist/esm/salla-user-profile.entry.js +1 -1
  259. package/dist/esm/salla-user-settings.entry.js +2 -2
  260. package/dist/esm/salla-verify.entry.js +1 -1
  261. package/dist/esm/salla-wallet.entry.js +1 -1
  262. package/dist/esm/salla-wishlist-actions.entry.js +2 -2
  263. package/dist/esm/salla-wishlist-summary.entry.js +1 -1
  264. package/dist/esm/twilight.js +3 -3
  265. package/dist/esm/{vanilla-picker-DMAcm04D.js → vanilla-picker-CiLp9ysz.js} +1 -1
  266. package/dist/twilight/{p-e6de2f79.entry.js → p-01b4b05f.entry.js} +1 -1
  267. package/dist/twilight/{p-c1eab306.entry.js → p-0433773a.entry.js} +1 -1
  268. package/dist/twilight/p-0Tl_yZW8.js +5 -0
  269. package/dist/twilight/{p-5c313f74.entry.js → p-0c26bedf.entry.js} +1 -1
  270. package/dist/twilight/{p-f92f10c7.entry.js → p-0cc42e36.entry.js} +1 -1
  271. package/dist/twilight/{p-4b175320.entry.js → p-0fe961e0.entry.js} +1 -1
  272. package/dist/twilight/{p-fa3c4bcf.entry.js → p-14c9ed90.entry.js} +1 -1
  273. package/dist/twilight/{p-2f1c8e60.entry.js → p-179595d9.entry.js} +1 -1
  274. package/dist/twilight/{p-e3c46eea.entry.js → p-17f2114f.entry.js} +1 -1
  275. package/dist/twilight/{p-9d0658a0.entry.js → p-183e02ac.entry.js} +1 -1
  276. package/dist/twilight/{p-a5c693c1.entry.js → p-1892ea42.entry.js} +1 -1
  277. package/dist/twilight/{p-6dcfc119.entry.js → p-1abcc81d.entry.js} +1 -1
  278. package/dist/twilight/p-1bf7cce7.entry.js +4 -0
  279. package/dist/twilight/{p-9b01e5c2.entry.js → p-220338b4.entry.js} +1 -1
  280. package/dist/twilight/{p-9c284764.entry.js → p-253a352c.entry.js} +1 -1
  281. package/dist/twilight/{p-46ef2b4e.entry.js → p-26adf02d.entry.js} +1 -1
  282. package/dist/twilight/{p-78d1e145.entry.js → p-288627a2.entry.js} +1 -1
  283. package/dist/twilight/{p-8e938bfa.entry.js → p-299e7413.entry.js} +1 -1
  284. package/dist/twilight/{p-49f2ad4a.entry.js → p-2ac1eac9.entry.js} +1 -1
  285. package/dist/twilight/{p-426ac7ab.entry.js → p-2cbed601.entry.js} +1 -1
  286. package/dist/twilight/{p-ff65be76.entry.js → p-2d2db627.entry.js} +1 -1
  287. package/dist/twilight/{p-71372771.entry.js → p-2da1eb61.entry.js} +1 -1
  288. package/dist/twilight/{p-3d535509.entry.js → p-31253c2d.entry.js} +1 -1
  289. package/dist/twilight/{p-caec4a90.entry.js → p-35d5e339.entry.js} +1 -1
  290. package/dist/twilight/{p-170a29db.entry.js → p-3b5fe2ef.entry.js} +1 -1
  291. package/dist/twilight/{p-bb4a95d9.entry.js → p-3d533d87.entry.js} +1 -1
  292. package/dist/twilight/{p-18b786f4.entry.js → p-40be8baa.entry.js} +1 -1
  293. package/dist/twilight/{p-acd9c538.entry.js → p-42426756.entry.js} +1 -1
  294. package/dist/twilight/{p-1a7bee69.entry.js → p-4432411c.entry.js} +1 -1
  295. package/dist/twilight/{p-4b135194.entry.js → p-449eae1d.entry.js} +1 -1
  296. package/dist/twilight/{p-1aaed68f.entry.js → p-44afcd79.entry.js} +1 -1
  297. package/dist/twilight/{p-2e971549.entry.js → p-4701a008.entry.js} +1 -1
  298. package/dist/twilight/{p-0bee12ba.entry.js → p-4d852a57.entry.js} +1 -1
  299. package/dist/twilight/{p-a1d251d4.entry.js → p-4d879cd3.entry.js} +1 -1
  300. package/dist/twilight/{p-c1eaf8c3.entry.js → p-52e7b4f6.entry.js} +1 -1
  301. package/dist/twilight/{p-3d7fdd11.entry.js → p-5cc28510.entry.js} +1 -1
  302. package/dist/twilight/{p-42d6eb6b.entry.js → p-636ffc46.entry.js} +1 -1
  303. package/dist/twilight/{p-9d680306.entry.js → p-6561d5d3.entry.js} +1 -1
  304. package/dist/twilight/{p-d11b211f.entry.js → p-65665ee3.entry.js} +1 -1
  305. package/dist/twilight/{p-06268aeb.entry.js → p-6db61be2.entry.js} +1 -1
  306. package/dist/twilight/{p-a0e1d5f7.entry.js → p-75fc9b99.entry.js} +1 -1
  307. package/dist/twilight/{p-f5605df6.entry.js → p-775f9b02.entry.js} +1 -1
  308. package/dist/twilight/{p-36ac5a06.entry.js → p-7bee2390.entry.js} +1 -1
  309. package/dist/twilight/{p-7f23b98d.entry.js → p-7c038d9d.entry.js} +1 -1
  310. package/dist/twilight/{p-51d7a9f2.entry.js → p-7c06ad6a.entry.js} +1 -1
  311. package/dist/twilight/{p-e34ff202.entry.js → p-7f59893d.entry.js} +1 -1
  312. package/dist/twilight/{p-40a7f8c6.entry.js → p-80f27669.entry.js} +1 -1
  313. package/dist/twilight/{p-ce0c6667.entry.js → p-821e9049.entry.js} +1 -1
  314. package/dist/twilight/{p-a32fb61e.entry.js → p-85ab4182.entry.js} +1 -1
  315. package/dist/twilight/{p-398e864d.entry.js → p-8d369871.entry.js} +1 -1
  316. package/dist/twilight/{p-fb8395de.entry.js → p-8e013db1.entry.js} +1 -1
  317. package/dist/twilight/{p-e3066c95.entry.js → p-918fa44a.entry.js} +1 -1
  318. package/dist/twilight/{p-8ec3b9f0.entry.js → p-933807d7.entry.js} +1 -1
  319. package/dist/twilight/{p-da14ac3f.entry.js → p-9434c23f.entry.js} +1 -1
  320. package/dist/twilight/{p-2d983198.entry.js → p-95b89c32.entry.js} +1 -1
  321. package/dist/twilight/{p-2059ac26.entry.js → p-99e615a1.entry.js} +1 -1
  322. package/dist/twilight/{p-833fb416.entry.js → p-9a818822.entry.js} +1 -1
  323. package/dist/twilight/{p-CtQLzZ1X.js → p-BABHygiN.js} +1 -1
  324. package/dist/twilight/{p-D_C0F9n5.js → p-BDO2BBmv.js} +1 -1
  325. package/dist/twilight/p-BS2iQKah.js +4 -0
  326. package/dist/twilight/{p-C3HaKgMG.js → p-BZHrTB2v.js} +1 -1
  327. package/dist/twilight/{p-BOWrmsKT.js → p-CZkK9lyS.js} +1 -1
  328. package/dist/twilight/{p-xX3a9YdQ.js → p-Cbnu3aaI.js} +1 -1
  329. package/dist/twilight/{p-CjeoBv5q.js → p-CxpHph5p.js} +1 -1
  330. package/dist/twilight/{p-BJxBnTgv.js → p-DgRxTSyJ.js} +1 -1
  331. package/dist/twilight/{p-Dq91sWJh.js → p-MugjBhYh.js} +1 -1
  332. package/dist/twilight/p-YTWgVZ0u.js +9 -0
  333. package/dist/twilight/{p-f08ff103.entry.js → p-a263bdbb.entry.js} +1 -1
  334. package/dist/twilight/{p-a192abb7.entry.js → p-a735c70e.entry.js} +1 -1
  335. package/dist/twilight/{p-52b99743.entry.js → p-a764bfe7.entry.js} +1 -1
  336. package/dist/twilight/{p-ca47204f.entry.js → p-ad9dcb47.entry.js} +1 -1
  337. package/dist/twilight/{p-6b277129.entry.js → p-ae22bfeb.entry.js} +1 -1
  338. package/dist/twilight/{p-635cf0ae.entry.js → p-aec2d723.entry.js} +1 -1
  339. package/dist/twilight/{p-f69a3e84.entry.js → p-aee17b8b.entry.js} +1 -1
  340. package/dist/twilight/{p-ce7450a9.entry.js → p-af12fce1.entry.js} +1 -1
  341. package/dist/twilight/{p-13215fa2.entry.js → p-b01764d0.entry.js} +1 -1
  342. package/dist/twilight/{p-b7399739.entry.js → p-b0d66765.entry.js} +1 -1
  343. package/dist/twilight/{p-62842639.entry.js → p-b566bc10.entry.js} +1 -1
  344. package/dist/twilight/p-b81474c4.entry.js +4 -0
  345. package/dist/twilight/{p-e0ce5d4c.entry.js → p-b9d2ae8a.entry.js} +1 -1
  346. package/dist/twilight/{p-6a68c551.entry.js → p-bc3ad6d2.entry.js} +1 -1
  347. package/dist/twilight/{p-35163279.entry.js → p-bf3fdf6d.entry.js} +1 -1
  348. package/dist/twilight/{p-47e519e4.entry.js → p-c394f30a.entry.js} +1 -1
  349. package/dist/twilight/{p-d62c6529.entry.js → p-cc7c4469.entry.js} +1 -1
  350. package/dist/twilight/{p-81294230.entry.js → p-ce9b6ac6.entry.js} +1 -1
  351. package/dist/twilight/{p-21358994.entry.js → p-d05e1bfd.entry.js} +1 -1
  352. package/dist/twilight/{p-b70cdf88.entry.js → p-d744234e.entry.js} +1 -1
  353. package/dist/twilight/{p-f7b65338.entry.js → p-d851751c.entry.js} +1 -1
  354. package/dist/twilight/{p-540992c1.entry.js → p-dc129d7a.entry.js} +1 -1
  355. package/dist/twilight/{p-adfc54e4.entry.js → p-ddc61bff.entry.js} +1 -1
  356. package/dist/twilight/{p-efb67446.entry.js → p-deb1139c.entry.js} +1 -1
  357. package/dist/twilight/{p-a1d0c650.entry.js → p-e429b1e5.entry.js} +1 -1
  358. package/dist/twilight/{p-2e204cbc.entry.js → p-e8cb4cd9.entry.js} +1 -1
  359. package/dist/twilight/{p-2308e70c.entry.js → p-e8fa4bd0.entry.js} +1 -1
  360. package/dist/twilight/{p-27366663.entry.js → p-e9372ca0.entry.js} +1 -1
  361. package/dist/twilight/{p-7f93ea69.entry.js → p-e955b287.entry.js} +1 -1
  362. package/dist/twilight/{p-ea07afaa.entry.js → p-eb590773.entry.js} +1 -1
  363. package/dist/twilight/{p-1762cfe3.entry.js → p-f176c43e.entry.js} +1 -1
  364. package/dist/twilight/p-f445e7a3.entry.js +4 -0
  365. package/dist/twilight/{p-6e7a12dd.entry.js → p-f4cff5cf.entry.js} +1 -1
  366. package/dist/twilight/{p-700cf9fc.entry.js → p-f828fefc.entry.js} +1 -1
  367. package/dist/twilight/{p-48f9cd45.entry.js → p-f92d1971.entry.js} +1 -1
  368. package/dist/twilight/{p-DVatlmKV.js → p-fP9RBas5.js} +1 -1
  369. package/dist/twilight/{p-e1d59b7e.entry.js → p-fb527b4d.entry.js} +1 -1
  370. package/dist/twilight/{p-efb9f953.entry.js → p-fe27963f.entry.js} +1 -1
  371. package/dist/twilight/{p-328e352d.entry.js → p-fea37c8c.entry.js} +1 -1
  372. package/dist/twilight/{p-1dc68727.entry.js → p-fef5c118.entry.js} +1 -1
  373. package/dist/twilight/twilight.esm.js +1 -1
  374. package/dist/types/components/salla-add-product-button/salla-add-product-button.d.ts +16 -0
  375. package/dist/types/components/salla-bullet-delivery/salla-bullet-delivery.d.ts +12 -0
  376. package/dist/types/components/salla-order-options-modal/apple-pay-order-options.d.ts +2 -0
  377. package/dist/types/components/salla-search/search-response.d.ts +1 -0
  378. package/package.json +5 -5
  379. package/dist/twilight/p-3845541d.entry.js +0 -4
  380. package/dist/twilight/p-38956156.entry.js +0 -4
  381. package/dist/twilight/p-UnmOIma5.js +0 -5
  382. package/dist/twilight/p-b5d6ddd7.entry.js +0 -4
  383. package/dist/twilight/p-iC3SM6Ji.js +0 -9
  384. package/dist/twilight/p-s0kn7yr8.js +0 -4
@@ -7,36 +7,88 @@ salla-add-product-button[width=wide] {
7
7
  }
8
8
 
9
9
 
10
+ /* Buy-now redirect button: copy of salla-mini-checkout-widget's button CSS, same theme vars. */
11
+ .s-add-product-button-buy-now {
12
+ display: block;
13
+ font-family: 'PingARLT';
14
+ font-weight: normal;
15
+ }
16
+
17
+ .s-add-product-button-buy-now .s-fast-checkout-button {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ height: var(--salla-fast-checkout-button-height, 2.5rem);
22
+ width: var(--salla-fast-checkout-button-width, 100%);
23
+ border-radius: var(--salla-fast-checkout-button-border-radius, 0.375rem);
24
+ font-size: 0.875rem;
25
+ font-weight: bold;
26
+ text-transform: uppercase;
27
+ cursor: pointer;
28
+ transition: all 0.3s ease-in-out;
29
+ border: none;
30
+ font-family: 'PingARLT';
31
+ gap: 5px;
32
+ direction: ltr;
33
+ border-width: 1px;
34
+ border-color: var(--color-primary);
35
+ background-color: var(--color-primary);
36
+ color: var(--color-primary-reverse);
37
+ /* The widget's button sits in shadow DOM, out of the theme's preflight reset; keep the browser defaults it gets. */
38
+ padding: 1px 6px;
39
+ line-height: normal;
40
+ letter-spacing: normal;
41
+ /* The theme's Tailwind `.outline` utility (outline-style: solid) hits the `outline` class; the widget is shielded by shadow DOM. */
42
+ outline: none;
43
+ }
44
+
45
+ .s-add-product-button-buy-now .s-fast-checkout-button:focus-visible {
46
+ outline: auto;
47
+ }
48
+
49
+ .s-add-product-button-buy-now .s-fast-checkout-button:hover {
50
+ background-color: var(--color-primary);
51
+ }
52
+
53
+ .s-add-product-button-buy-now .s-fast-checkout-button.outline {
54
+ background-color: transparent;
55
+ border: 1px solid var(--color-primary);
56
+ color: var(--color-primary);
57
+ }
58
+
59
+ .s-add-product-button-buy-now .s-fast-checkout-button.rtl {
60
+ flex-direction: row-reverse;
61
+ }
62
+
63
+ .s-add-product-button-buy-now .s-fast-checkout-button:disabled {
64
+ cursor: progress;
65
+ opacity: 0.7;
66
+ }
67
+
10
68
  .sticky {
11
69
  position: sticky;
12
70
  }
13
71
 
14
-
15
72
  .hidden {
16
73
  display: none;
17
74
  }
18
75
 
19
-
20
76
  .w-full {
21
77
  width: 100%;
22
78
  }
23
79
 
24
-
25
80
  .outline {
26
81
  outline-style: solid;
27
82
  }
28
83
 
29
-
30
84
  .filter {
31
85
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
32
86
  }
33
87
 
34
-
35
88
  .s-hidden {
36
89
  display: none;
37
90
  }
38
91
 
39
-
40
92
  .btn {
41
93
  display: inline-flex;
42
94
  flex: 1 1 0%;
@@ -56,17 +108,14 @@ salla-add-product-button[width=wide] {
56
108
  transition-duration: 300ms;
57
109
  }
58
110
 
59
-
60
111
  .btn:hover {
61
112
  opacity: 0.8;
62
113
  }
63
114
 
64
-
65
115
  .s-hidden {
66
116
  display: none;
67
117
  }
68
118
 
69
-
70
119
  .s-add-product-button-sr-only {
71
120
  position: absolute;
72
121
  width: 1px;
@@ -79,12 +128,10 @@ salla-add-product-button[width=wide] {
79
128
  border-width: 0;
80
129
  }
81
130
 
82
-
83
131
  .s-add-product-button-with-quick-buy {
84
132
  display: flex;
85
133
  }
86
134
 
87
-
88
135
  @media (min-width: 640px) {
89
136
 
90
137
  .s-add-product-button-with-quick-buy {
@@ -92,19 +139,16 @@ salla-add-product-button[width=wide] {
92
139
  }
93
140
  }
94
141
 
95
-
96
142
  .s-add-product-button-with-quick-buy:not(.s-add-product-button-with-sticky-bar) {
97
143
  flex-direction: column !important;
98
144
  }
99
145
 
100
-
101
146
  .s-add-product-button-main {
102
147
  display: flex;
103
148
  width: 66.666667%;
104
149
  column-gap: 0.375rem;
105
150
  }
106
151
 
107
-
108
152
  @media (min-width: 640px) {
109
153
 
110
154
  .s-add-product-button-main {
@@ -113,12 +157,10 @@ salla-add-product-button[width=wide] {
113
157
  }
114
158
  }
115
159
 
116
-
117
160
  .s-add-product-button-with-sticky-bar salla-quick-buy {
118
161
  width: 33.333333%;
119
162
  }
120
163
 
121
-
122
164
  @media (min-width: 640px) {
123
165
 
124
166
  .s-add-product-button-with-sticky-bar salla-quick-buy {
@@ -126,33 +168,27 @@ salla-add-product-button[width=wide] {
126
168
  }
127
169
  }
128
170
 
129
-
130
171
  .s-add-product-button-with-quick-buy:not(.s-add-product-button-with-sticky-bar) .s-add-product-button-main {
131
172
  width: 100%;
132
173
  }
133
174
 
134
-
135
175
  .s-add-product-button-with-quick-buy:not(.s-add-product-button-with-apple-pay) .s-add-product-button-main {
136
176
  width: 100%;
137
177
  }
138
178
 
139
-
140
179
  .s-add-product-button-main:not(.w-full) > salla-button {
141
180
  width: 50% !important;
142
181
  }
143
182
 
144
-
145
183
  .s-add-product-button-main .s-add-product-button-mini-checkout {
146
184
  --salla-fast-checkout-button-border-radius: .75rem;
147
185
  width: 50%;
148
186
  }
149
187
 
150
-
151
188
  .s-add-product-button-with-sticky-bar {
152
189
  width: 100% !important;
153
190
  }
154
191
 
155
-
156
192
  @media (min-width: 640px) {
157
193
 
158
194
  .s-add-product-button-with-sticky-bar {
@@ -160,12 +196,10 @@ salla-add-product-button[width=wide] {
160
196
  }
161
197
  }
162
198
 
163
-
164
199
  .s-add-product-button-with-apple-pay {
165
200
  column-gap: 0.375rem;
166
201
  }
167
202
 
168
-
169
203
  @media (min-width: 640px) {
170
204
 
171
205
  .s-add-product-button-with-apple-pay {
@@ -173,17 +207,14 @@ salla-add-product-button[width=wide] {
173
207
  }
174
208
  }
175
209
 
176
-
177
210
  .s-add-product-button-with-apple-pay:not(.s-add-product-button-with-sticky-bar) salla-quick-buy apple-pay-button {
178
211
  margin-top: 0.625rem;
179
212
  }
180
213
 
181
-
182
214
  .s-add-product-button-with-sticky-bar salla-quick-buy .s-quick-buy-button .s-button-text span {
183
215
  display: none;
184
216
  }
185
217
 
186
-
187
218
  @media (min-width: 768px) {
188
219
 
189
220
  .s-add-product-button-with-sticky-bar salla-quick-buy .s-quick-buy-button .s-button-text span {
@@ -191,7 +222,6 @@ salla-add-product-button[width=wide] {
191
222
  }
192
223
  }
193
224
 
194
-
195
225
  .s-add-product-button-mini-checkout-content {
196
226
  display: flex;
197
227
  flex-shrink: 0;
@@ -200,7 +230,6 @@ salla-add-product-button[width=wide] {
200
230
  font-size: .8rem;
201
231
  }
202
232
 
203
-
204
233
  @media (min-width: 640px) {
205
234
 
206
235
  .s-add-product-button-mini-checkout-content {
@@ -209,12 +238,10 @@ salla-add-product-button[width=wide] {
209
238
  }
210
239
  }
211
240
 
212
-
213
241
  .s-add-product-button-mini-checkout-content:where([dir="rtl"], [dir="rtl"] *) {
214
242
  flex-direction: row-reverse;
215
243
  }
216
244
 
217
-
218
245
  .s-add-product-button-mini-checkout-content svg {
219
246
  margin-right: 0.375rem;
220
247
  height: 1rem;
@@ -222,19 +249,16 @@ salla-add-product-button[width=wide] {
222
249
  fill: currentColor;
223
250
  }
224
251
 
225
-
226
252
  .s-add-product-button-mini-checkout-content svg:where([dir="rtl"], [dir="rtl"] *) {
227
253
  margin-right: 0px;
228
254
  margin-left: 0.375rem;
229
255
  }
230
256
 
231
-
232
257
  .s-add-product-button-busy {
233
258
  pointer-events: none;
234
259
  position: relative;
235
260
  }
236
261
 
237
-
238
262
  .s-add-product-button-busy::after {
239
263
  position: absolute;
240
264
  top: 50%;
@@ -248,7 +272,6 @@ salla-add-product-button[width=wide] {
248
272
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
249
273
  }
250
274
 
251
-
252
275
  @keyframes spin {
253
276
 
254
277
  to {
@@ -257,7 +280,6 @@ salla-add-product-button[width=wide] {
257
280
  }
258
281
  }
259
282
 
260
-
261
283
  .s-add-product-button-busy::after {
262
284
  animation: spin 1s linear infinite;
263
285
  border-radius: 9999px;
@@ -6,12 +6,19 @@ import Cart from "../../assets/svg/cart.svg";
6
6
  // import SallaIcon from '../../assets/svg/salla.svg';
7
7
  import WalletIcon from "../../assets/svg/full-wallet.svg";
8
8
  import Helper from "../../Helpers/Helper";
9
- import { canCompleteApplePay } from "@salla.sa/applepay/src/apple-pay-support";
9
+ import { canCompleteApplePay, isApplePayHostedRedirect } from "@salla.sa/applepay/src/apple-pay-support";
10
10
  import { OrderOptionsGate } from "../salla-order-options-modal/order-options-gate";
11
11
  import { FastCheckoutGate } from "../salla-bullet-delivery/fast-checkout-gate";
12
+ import { appendOrderOptionsToPayload, ensureOrderOptionsModal } from "../salla-order-options-modal/apple-pay-order-options";
13
+ import { injectFreeProductsIntoPayload } from "../salla-order-options-modal/free-product-payload";
12
14
  export class SallaAddProductButton {
13
15
  constructor() {
14
16
  this.hostAttributes = {};
17
+ this.buyNowBusy = false;
18
+ /** Latest buy-now click; an older click still waiting on Bullet Delivery drops out. */
19
+ this.buyNowToken = 0;
20
+ this.buyNowLastClick = 0;
21
+ this.buyNowLivePrice = 0;
15
22
  /**
16
23
  * Has Pre Order
17
24
  */
@@ -26,6 +33,7 @@ export class SallaAddProductButton {
26
33
  this.productType = 'product';
27
34
  this.selectedOptions = [];
28
35
  this.buyNowText = salla.lang.get('pages.products.buy_now');
36
+ this.buyNowLoading = false;
29
37
  /** Use matchMedia instead of window.innerWidth to avoid forced reflow (Lighthouse/PageSpeed) */
30
38
  this.isDesktopViewport = typeof window !== 'undefined' ? window.matchMedia('(min-width: 768px)').matches : true;
31
39
  this.viewportMediaQuery = null;
@@ -33,6 +41,9 @@ export class SallaAddProductButton {
33
41
  this.orderOptionsGateAttached = false;
34
42
  /** Guards one-time attachment of the fast-checkout Bullet Delivery gate (logic lives in FastCheckoutGate). */
35
43
  this.fastCheckoutGateAttached = false;
44
+ this.onBuyNowPriceUpdated = (response) => {
45
+ this.buyNowLivePrice = Number(response?.data?.price) || this.buyNowLivePrice;
46
+ };
36
47
  this.onViewportChange = (e) => {
37
48
  this.isDesktopViewport = e.matches;
38
49
  this.btn?.setText((e.matches && !!this.passedLabel) ? this.passedLabel : this.getLabel());
@@ -160,6 +171,105 @@ export class SallaAddProductButton {
160
171
  type: this.supportStickyBar && !this.isDesktopViewport ? 'plain' : this.productType == 'donating' ? 'donate' : 'buy'
161
172
  };
162
173
  }
174
+ // Store setting: quick-buy skips the mini-checkout popup and goes straight to the checkout page.
175
+ get redirectsToCheckout() {
176
+ return salla.config.get('store.settings.buy_now.redirect_to_checkout') === true;
177
+ }
178
+ /** The fast-checkout slot renders and the store redirects, so the buy-now button is on the page. */
179
+ get showsBuyNowButton() {
180
+ return this.showQuickBuy
181
+ && !!document.getElementById('fast-checkout-js')
182
+ && !['financial_support', 'donating'].includes(this.productType)
183
+ && this.redirectsToCheckout;
184
+ }
185
+ buyNowButton() {
186
+ return h("div", { class: "s-add-product-button-mini-checkout s-mini-checkout hide-scroll s-add-product-button-buy-now" }, h("button", { type: "button", class: `s-fast-checkout-button outline ${salla.lang.locale == 'ar' ? 'rtl' : 'ltr'}`, disabled: this.buyNowLoading, onClick: () => this.buyNowRedirect() }, h("div", { class: "s-add-product-button-mini-checkout-content" }, h("span", { innerHTML: WalletIcon }), this.buyNowText)));
187
+ }
188
+ async buyNowRedirect() {
189
+ // A double-click would reach Bullet Delivery twice, which stalls its guest gate.
190
+ const now = Date.now();
191
+ if (this.buyNowBusy || now - this.buyNowLastClick < 500) {
192
+ return;
193
+ }
194
+ this.buyNowLastClick = now;
195
+ const token = ++this.buyNowToken;
196
+ const optionsEl = document.querySelector(`salla-product-options[product-id="${this.productId}"]`);
197
+ if (optionsEl?.validateAndScroll && !(await optionsEl.validateAndScroll())) {
198
+ return;
199
+ }
200
+ // Bullet Delivery's address gate, as the widget runs it; stays pending if the shopper backs out.
201
+ await salla.cart.event.beforeStartFastCheckout();
202
+ if (token !== this.buyNowToken || this.buyNowBusy) {
203
+ return;
204
+ }
205
+ this.buyNowBusy = true;
206
+ let leaving = false;
207
+ try {
208
+ this.buyNowLoading = true;
209
+ const form = document.querySelector('form.product-form');
210
+ const data = form ? new FormData(form) : new FormData();
211
+ data.set('id', String(this.productId));
212
+ data.set('source', 'buy_now');
213
+ if (!(await this.collectOrderOptions(data))) {
214
+ return;
215
+ }
216
+ const resp = await salla.api.request('checkout/mini', data, 'post');
217
+ if (resp.data?.url) {
218
+ leaving = this.openCheckout(resp.data.url);
219
+ }
220
+ else if (resp.data?.to === 'login') {
221
+ salla.event.dispatch('login::open');
222
+ }
223
+ }
224
+ catch (error) {
225
+ this.failed.emit(error);
226
+ }
227
+ finally {
228
+ if (!leaving) {
229
+ this.buyNowBusy = false;
230
+ this.buyNowLoading = false;
231
+ }
232
+ }
233
+ }
234
+ /** Order options and free offer products, as the widget collects them; false when the modal is dismissed. */
235
+ async collectOrderOptions(data) {
236
+ let resp;
237
+ try {
238
+ resp = await salla.api.withoutNotifier(() => salla.product.api.getOrderOptions([{ id: this.productId, quantity: Number(data.get('quantity')) || 1 }]));
239
+ }
240
+ catch (error) {
241
+ salla?.logger?.warn?.('order-options: fetch failed', error);
242
+ return true;
243
+ }
244
+ const orderOptions = resp?.data?.order_options || [];
245
+ const freeProducts = (Array.isArray(resp?.data?.advance_free_product) ? resp.data.advance_free_product : [])
246
+ .filter((entry) => Array.isArray(entry?.options) && entry.options.length);
247
+ if (!orderOptions.length && !freeProducts.length) {
248
+ return true;
249
+ }
250
+ try {
251
+ const result = await ensureOrderOptionsModal().open({
252
+ orderOptions,
253
+ freeProducts,
254
+ basePrice: this.buyNowLivePrice || Number(resp?.data?.products?.[0]?.price?.amount) || 0,
255
+ });
256
+ appendOrderOptionsToPayload(data, result?.orderOptions || []);
257
+ injectFreeProductsIntoPayload(data, result?.freeProducts || []);
258
+ return true;
259
+ }
260
+ catch {
261
+ return false;
262
+ }
263
+ }
264
+ /** Native SPA webviews own the checkout screen; returns true when this page navigates away. */
265
+ openCheckout(url) {
266
+ if (salla.mobile?.isSpaWebview?.() && salla.mobile.openCheckout) {
267
+ salla.mobile.openCheckout(url);
268
+ return false;
269
+ }
270
+ window.location.href = url;
271
+ return true;
272
+ }
163
273
  miniCheckoutWidget() {
164
274
  let storeId = salla.config.get('store.id');
165
275
  if (!storeId) {
@@ -178,8 +288,11 @@ export class SallaAddProductButton {
178
288
  && this.productType !== 'booking';
179
289
  // Cross-browser Apple Pay: native (Safari) OR the Payment Request API
180
290
  // (non-Safari browsers / non-Apple devices via the QR-code fallback).
291
+ // Hosted (MyFatoorah, S2S off) Apple Pay has no native sheet and no buy-now redirect
292
+ // path, so the quick-buy button below must not render for it either.
181
293
  this.isApplePayActive = salla.config.get('store.settings.payments')?.includes('apple_pay')
182
294
  && salla.config.get('store.settings.is_salla_gateway', false)
295
+ && !isApplePayHostedRedirect()
183
296
  && await canCompleteApplePay();
184
297
  this.passedLabel = this.host.innerHTML.replace('<!---->', '').trim();
185
298
  if (!!this.passedLabel && this.isDesktopViewport) {
@@ -209,11 +322,14 @@ export class SallaAddProductButton {
209
322
  } }, h("div", { class: {
210
323
  's-add-product-button-main': this.showQuickBuy,
211
324
  'w-full': !document.getElementById('fast-checkout-js') || ['financial_support', 'donating'].includes(this.productType) // This is a temporary fix until all themes fully support the fast checkout -- To be removed later
212
- } }, h("salla-button", { color: this.productStatus === 'sale' ? 'primary' : 'light', type: "button", fill: this.productStatus === 'sale' ? 'solid' : 'outline', ref: el => this.btn = el, onClick: event => this.addProductToCart(event), disabled: this.productStatus !== 'sale', "aria-label": this.isIconOnlyLabel ? this.addToCartLabel : undefined, ...this.getBtnAttributes(), "loader-position": "center" }, h("slot", null)), this.showQuickBuy && !!document.getElementById('fast-checkout-js') && !['financial_support', 'donating'].includes(this.productType) ? this.miniCheckoutWidget() : ''), this.showQuickBuy && this.isApplePayActive ? h("salla-quick-buy", { ...this.getQuickBuyBtnAttributes() }) : '');
325
+ } }, h("salla-button", { color: this.productStatus === 'sale' ? 'primary' : 'light', type: "button", fill: this.productStatus === 'sale' ? 'solid' : 'outline', ref: el => this.btn = el, onClick: event => this.addProductToCart(event), disabled: this.productStatus !== 'sale', "aria-label": this.isIconOnlyLabel ? this.addToCartLabel : undefined, ...this.getBtnAttributes(), "loader-position": "center" }, h("slot", null)), this.showQuickBuy && !!document.getElementById('fast-checkout-js') && !['financial_support', 'donating'].includes(this.productType) ? (this.redirectsToCheckout ? this.buyNowButton() : this.miniCheckoutWidget()) : ''), this.showQuickBuy && this.isApplePayActive ? h("salla-quick-buy", { ...this.getQuickBuyBtnAttributes() }) : '');
213
326
  }
214
327
  async componentDidLoad() {
215
328
  // Register this component for hooks system, already on it logic to run componentDidLoad trigger
216
329
  await Salla.hooks.registerComponent('salla-add-product-button', this);
330
+ if (this.showsBuyNowButton) {
331
+ salla.product?.event?.onPriceUpdated?.(this.onBuyNowPriceUpdated);
332
+ }
217
333
  if (!this.notifyOptionsAvailability) {
218
334
  return;
219
335
  }
@@ -262,6 +378,7 @@ export class SallaAddProductButton {
262
378
  }
263
379
  disconnectedCallback() {
264
380
  this.viewportMediaQuery?.removeEventListener('change', this.onViewportChange);
381
+ salla.product?.event?.offPriceUpdated?.(this.onBuyNowPriceUpdated);
265
382
  }
266
383
  static get is() { return "salla-add-product-button"; }
267
384
  static get originalStyleUrls() {
@@ -498,6 +615,7 @@ export class SallaAddProductButton {
498
615
  "showQuickBuy": {},
499
616
  "isApplePayActive": {},
500
617
  "buyNowText": {},
618
+ "buyNowLoading": {},
501
619
  "isDesktopViewport": {}
502
620
  };
503
621
  }
@@ -38,7 +38,7 @@ export function findNearestBranch(branches, userLat, userLon) {
38
38
  for (const b of branches) {
39
39
  const lat = b.location?.lat != null ? Number(b.location.lat) : Number.NaN;
40
40
  const lng = b.location?.lng != null ? Number(b.location.lng) : Number.NaN;
41
- if (Number.isNaN(lat) || Number.isNaN(lng) || b.is_open === false)
41
+ if (Number.isNaN(lat) || Number.isNaN(lng) || !isBranchSelectable(b))
42
42
  continue;
43
43
  const d = calculateDistance(userLat, userLon, lat, lng);
44
44
  if (d < minD) {
@@ -446,10 +446,7 @@ export class SallaBulletDelivery {
446
446
  }
447
447
  // Auto-select preselected branch if provided
448
448
  if (this.preselectedBranchId) {
449
- const branch = this.branches.find((b) => b.id === this.preselectedBranchId);
450
- if (branch) {
451
- this.selectedBranch = branch;
452
- }
449
+ this.preselectBranch(this.preselectedBranchId);
453
450
  }
454
451
  }
455
452
  // Prefill form data from session storage
@@ -900,15 +897,30 @@ export class SallaBulletDelivery {
900
897
  async loadBranches() {
901
898
  this.loadingBranches = true;
902
899
  try {
903
- this.branches = await bulletDeliveryAPI.getBranches({
900
+ this.applyLoadedBranches(await bulletDeliveryAPI.getBranches({
904
901
  country_id: this.selectedCountry?.id,
905
- });
906
- this.filterBranches();
902
+ }));
907
903
  }
908
904
  finally {
909
905
  this.loadingBranches = false;
910
906
  }
911
907
  }
908
+ /**
909
+ * Store a freshly fetched branch list and reconcile the current selection with it.
910
+ * `selectedBranch` is a snapshot from selection time: when the refreshed list carries the
911
+ * same branch, swap in the fresh copy, and drop it if it is no longer selectable (INV-1407).
912
+ * A selection missing from the list (e.g. filtered out by a search) is left untouched.
913
+ */
914
+ applyLoadedBranches(branches) {
915
+ this.branches = branches;
916
+ if (this.selectedBranch) {
917
+ const fresh = branches.find((b) => b.id === this.selectedBranch?.id);
918
+ if (fresh) {
919
+ this.selectedBranch = isBranchSelectable(fresh) ? fresh : null;
920
+ }
921
+ }
922
+ this.filterBranches();
923
+ }
912
924
  filterBranches() {
913
925
  this.filteredBranches = filterBranches(this.branches, this.branchSearchQuery);
914
926
  }
@@ -935,13 +947,7 @@ export class SallaBulletDelivery {
935
947
  if (country) {
936
948
  this.selectedCountry = country;
937
949
  this.updateNewAddressForm({ country_id: Number(country.id) });
938
- const branchId = getIntentBranchId(intent);
939
- if (branchId != null && this.branches.length > 0) {
940
- const branch = this.branches.find((b) => b.id === branchId);
941
- if (branch) {
942
- this.selectedBranch = branch;
943
- }
944
- }
950
+ this.preselectBranch(getIntentBranchId(intent));
945
951
  }
946
952
  }
947
953
  }
@@ -1105,11 +1111,10 @@ export class SallaBulletDelivery {
1105
1111
  return;
1106
1112
  this.loadingBranches = true;
1107
1113
  try {
1108
- this.branches = await bulletDeliveryAPI.getBranches({
1114
+ this.applyLoadedBranches(await bulletDeliveryAPI.getBranches({
1109
1115
  country_id: this.selectedCountry?.id,
1110
1116
  query,
1111
- });
1112
- this.filterBranches();
1117
+ }));
1113
1118
  }
1114
1119
  finally {
1115
1120
  this.loadingBranches = false;
@@ -1142,12 +1147,11 @@ export class SallaBulletDelivery {
1142
1147
  async loadBranchesWithLocation(lat, lng) {
1143
1148
  this.loadingBranches = true;
1144
1149
  try {
1145
- this.branches = await bulletDeliveryAPI.getBranches({
1150
+ this.applyLoadedBranches(await bulletDeliveryAPI.getBranches({
1146
1151
  country_id: this.selectedCountry?.id,
1147
1152
  lat,
1148
1153
  lng,
1149
- });
1150
- this.filterBranches();
1154
+ }));
1151
1155
  // Auto-select country from first branch if no country is selected
1152
1156
  if (!this.selectedCountry && this.branches.length > 0) {
1153
1157
  const firstBranch = this.branches[0];
@@ -1204,6 +1208,18 @@ export class SallaBulletDelivery {
1204
1208
  this.selectedBranch = branch;
1205
1209
  this.allocationOutOfCoverageMessage = null;
1206
1210
  }
1211
+ /**
1212
+ * Restore a remembered / event-provided branch — but only one the list renders as selectable,
1213
+ * so a branch that has closed since it was remembered is never silently preselected (INV-1407).
1214
+ */
1215
+ preselectBranch(branchId) {
1216
+ if (branchId == null)
1217
+ return;
1218
+ const branch = this.branches.find((b) => b.id === branchId);
1219
+ if (branch && isBranchSelectable(branch)) {
1220
+ this.selectedBranch = branch;
1221
+ }
1222
+ }
1207
1223
  handleSavedAddressSelect(address) {
1208
1224
  if (address.is_in_coverage === false) {
1209
1225
  // Show toast notification for out of coverage address
@@ -1443,13 +1459,7 @@ export class SallaBulletDelivery {
1443
1459
  await this.loadBranches();
1444
1460
  }
1445
1461
  // Preselect branch from session storage if available
1446
- const branchId = getIntentBranchId(savedIntent);
1447
- if (branchId != null && this.branches.length > 0) {
1448
- const branch = this.branches.find((b) => b.id === branchId);
1449
- if (branch) {
1450
- this.selectedBranch = branch;
1451
- }
1452
- }
1462
+ this.preselectBranch(getIntentBranchId(savedIntent));
1453
1463
  }
1454
1464
  else if (tab === "address") {
1455
1465
  // Lazy-load saved addresses when switching to address tab (if not loaded yet).
@@ -1478,7 +1488,8 @@ export class SallaBulletDelivery {
1478
1488
  }
1479
1489
  isConfirmDisabled() {
1480
1490
  if (this.activeTab === "branch") {
1481
- return !this.selectedBranch;
1491
+ // Backstop for any selection path: the allocation API rejects non-selectable branches (INV-1407).
1492
+ return !isBranchSelectable(this.selectedBranch);
1482
1493
  }
1483
1494
  if (this.activeTab === "address") {
1484
1495
  if (this.isLoggedIn && this.selectedSessionAddress) {
@@ -7,7 +7,7 @@
7
7
  * the ApplePaySession and drives it via callbacks.
8
8
  */
9
9
  /** Get-or-create the singleton order-options modal on <body>. */
10
- function ensureOrderOptionsModal() {
10
+ export function ensureOrderOptionsModal() {
11
11
  let modal = document.querySelector('salla-order-options-modal');
12
12
  if (!modal) {
13
13
  modal = document.createElement('salla-order-options-modal');
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
5
5
  import "@salla.sa/applepay/src/index";
6
6
  import { resolveApplePayOrderOptions, appendOrderOptionsToPayload, reportProductOptionsValiditySync, } from "../salla-order-options-modal/apple-pay-order-options";
7
7
  import { injectFreeProductsIntoPayload } from "../salla-order-options-modal/free-product-payload";
8
- import { applePayMerchantId, canCompleteApplePay, ensureApplePaySdk, resolveApplePayNetworks } from "@salla.sa/applepay/src/apple-pay-support";
8
+ import { applePayMerchantId, canCompleteApplePay, ensureApplePaySdk, isApplePayHostedRedirect, resolveApplePayNetworks } from "@salla.sa/applepay/src/apple-pay-support";
9
9
  export class SallaQuickBuy {
10
10
  constructor() {
11
11
  /**
@@ -315,9 +315,12 @@ export class SallaQuickBuy {
315
315
  const canMakePayments = typeof window !== 'undefined' && !!window.ApplePaySession?.canMakePayments?.();
316
316
  const storeHasApplePay = salla?.config?.get?.('store.settings.payments')?.includes?.('apple_pay') ?? true;
317
317
  const isSallaGateway = salla?.config?.get?.('store.settings.is_salla_gateway', false) ?? true;
318
+ // Hosted (MyFatoorah, S2S off) Apple Pay has no native sheet and buy-now has no redirect
319
+ // path, so there is nothing this button could do — don't offer it.
320
+ const isHostedRedirect = isApplePayHostedRedirect();
318
321
  // No networks means nothing to charge with, so don't show the button — canMakePayments()
319
322
  // alone would light it up on Safari.
320
- this.isApplePayActive = canMakePayments && storeHasApplePay && isSallaGateway
323
+ this.isApplePayActive = canMakePayments && storeHasApplePay && isSallaGateway && !isHostedRedirect
321
324
  && !!this.resolveSupportedNetworks().length;
322
325
  const runInit = async () => {
323
326
  if (!this.productId && salla?.config?.get && salla.url?.is_page) {
@@ -346,7 +349,8 @@ export class SallaQuickBuy {
346
349
  salla.product.event.onPriceUpdated(response => { this.applyBaseCurrencyPrice(response?.data); });
347
350
  }
348
351
  const storeAllowsApplePay = (salla?.config?.get?.('store.settings.payments')?.includes?.('apple_pay') ?? storeHasApplePay)
349
- && (salla?.config?.get?.('store.settings.is_salla_gateway', false) ?? isSallaGateway);
352
+ && (salla?.config?.get?.('store.settings.is_salla_gateway', false) ?? isSallaGateway)
353
+ && !isApplePayHostedRedirect();
350
354
  // Preload Apple's JS SDK so the rendered <apple-pay-button> upgrades on
351
355
  // every flow (native Safari + QR). Fire-and-forget: the element upgrades
352
356
  // retroactively once the script defines it.
@@ -370,7 +374,16 @@ export class SallaQuickBuy {
370
374
  });
371
375
  }
372
376
  render() {
373
- return h(Host, { key: '8d1d37acada1f9cdbe6913d01a97fe881facc7af' }, this.quickBuyButton());
377
+ // Hosted (MyFatoorah, S2S off) Apple Pay has no native sheet and buy-now has no
378
+ // redirect path, so render nothing rather than an Apple Pay button that cannot
379
+ // do Apple Pay. Scoped to the hosted case on purpose: when a store simply has no
380
+ // Apple Pay, `isApplePayActive` is false too, but there the button is a deliberate
381
+ // generic buy-now that falls back to `checkout/mini` (see quickBuyHandler), and
382
+ // direct consumers rely on that.
383
+ if (isApplePayHostedRedirect()) {
384
+ return h(Host, null);
385
+ }
386
+ return h(Host, null, this.quickBuyButton());
374
387
  }
375
388
  quickBuyButton() {
376
389
  return h("apple-pay-button", { locale: salla?.config?.get?.('user.language_code') || 'ar', onClick: () => this.quickBuyHandler(), "data-quick-purchase": "applepay", class: "s-quick-buy-apple-pay", "data-is-applepay": "1", buttonstyle: "black", type: this.type });