@salla.sa/twilight-components 2.14.410 → 2.14.412

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 (315) hide show
  1. package/dist/cjs/{filepond-Apepuv0K.js → filepond-BO-XBD1i.js} +1 -1
  2. package/dist/cjs/{filepond-plugin-file-poster-iW6rBzvV.js → filepond-plugin-file-poster-DJIG7vOj.js} +1 -1
  3. package/dist/cjs/{filepond-plugin-file-validate-size-CnSaNZSz.js → filepond-plugin-file-validate-size-Bhtuy-Ar.js} +1 -1
  4. package/dist/cjs/{filepond-plugin-file-validate-type-Cd_N5-75.js → filepond-plugin-file-validate-type-BQhRvZvr.js} +1 -1
  5. package/dist/cjs/{filepond-plugin-image-edit-B-VgjvBB.js → filepond-plugin-image-edit-C4unOPfE.js} +1 -1
  6. package/dist/cjs/{filepond-plugin-image-exif-orientation-B7pvpLQQ.js → filepond-plugin-image-exif-orientation-QreJIoqS.js} +1 -1
  7. package/dist/cjs/{filepond-plugin-image-preview-CrwqE_eH.js → filepond-plugin-image-preview-aiURUVDo.js} +1 -1
  8. package/dist/cjs/{functions-BeVUNcRL.js → functions-qbO9xyMC.js} +1 -1
  9. package/dist/cjs/{index-HaF0YPfl.js → index-BtHm_lmK.js} +1 -1
  10. package/dist/cjs/{index-CvTXoznS.js → index-DR2nrv6V.js} +10 -10
  11. package/dist/cjs/loader.cjs.js +2 -2
  12. package/dist/cjs/salla-accordion-body_2.cjs.entry.js +1 -1
  13. package/dist/cjs/salla-accordion_6.cjs.entry.js +1 -1
  14. package/dist/cjs/{salla-add-product-button_4.cjs.entry.js → salla-add-product-button_5.cjs.entry.js} +130 -1
  15. package/dist/cjs/salla-advertisement.cjs.entry.js +1 -1
  16. package/dist/cjs/salla-alert_2.cjs.entry.js +1 -1
  17. package/dist/cjs/salla-app-install-alert.cjs.entry.js +1 -1
  18. package/dist/cjs/salla-apps-icons.cjs.entry.js +1 -1
  19. package/dist/cjs/salla-badge.cjs.entry.js +1 -1
  20. package/dist/cjs/salla-booking-field_7.cjs.entry.js +10 -10
  21. package/dist/cjs/salla-bullet-delivery.cjs.entry.js +2 -2
  22. package/dist/cjs/salla-cart-coupons.cjs.entry.js +1 -1
  23. package/dist/cjs/salla-cart-item-offers_2.cjs.entry.js +1 -1
  24. package/dist/cjs/salla-comment-form_8.cjs.entry.js +1 -1
  25. package/dist/cjs/salla-conditional-offer.cjs.entry.js +1 -1
  26. package/dist/cjs/salla-contacts.cjs.entry.js +1 -1
  27. package/dist/cjs/salla-cookies-bar.cjs.entry.js +1 -1
  28. package/dist/cjs/salla-count-down.cjs.entry.js +1 -1
  29. package/dist/cjs/salla-custom-fields.cjs.entry.js +1 -1
  30. package/dist/cjs/salla-delivery-promise.cjs.entry.js +294 -157
  31. package/dist/cjs/salla-edit-order-button.cjs.entry.js +1 -1
  32. package/dist/cjs/salla-filters-widget.cjs.entry.js +1 -1
  33. package/dist/cjs/salla-filters.cjs.entry.js +1 -1
  34. package/dist/cjs/salla-fulfillment-methods.cjs.entry.js +1 -1
  35. package/dist/cjs/salla-gifting.cjs.entry.js +1 -1
  36. package/dist/cjs/salla-hook.cjs.entry.js +1 -1
  37. package/dist/cjs/salla-infinite-scroll.cjs.entry.js +1 -1
  38. package/dist/cjs/salla-installment.cjs.entry.js +1 -1
  39. package/dist/cjs/salla-list-tile.cjs.entry.js +1 -1
  40. package/dist/cjs/salla-localization-modal.cjs.entry.js +1 -1
  41. package/dist/cjs/salla-login-modal.cjs.entry.js +1 -1
  42. package/dist/cjs/salla-loyalty-banner.cjs.entry.js +2 -2
  43. package/dist/cjs/salla-loyalty-hero_2.cjs.entry.js +2 -2
  44. package/dist/cjs/salla-loyalty-panel.cjs.entry.js +3 -3
  45. package/dist/cjs/salla-loyalty-prize-item.cjs.entry.js +1 -1
  46. package/dist/cjs/salla-loyalty-program.cjs.entry.js +3 -3
  47. package/dist/cjs/salla-loyalty-reward.cjs.entry.js +2 -2
  48. package/dist/cjs/salla-loyalty.cjs.entry.js +1 -1
  49. package/dist/cjs/salla-maintenance-alert.cjs.entry.js +1 -1
  50. package/dist/cjs/salla-map.cjs.entry.js +1 -1
  51. package/dist/cjs/salla-menu.cjs.entry.js +1 -1
  52. package/dist/cjs/salla-metadata.cjs.entry.js +1 -1
  53. package/dist/cjs/salla-multiple-bundle-product-cart_2.cjs.entry.js +1 -1
  54. package/dist/cjs/salla-multiple-bundle-product-options-modal_2.cjs.entry.js +1 -1
  55. package/dist/cjs/salla-multiple-bundle-product.cjs.entry.js +1 -1
  56. package/dist/cjs/salla-notification-item.cjs.entry.js +1 -1
  57. package/dist/cjs/salla-notifications.cjs.entry.js +1 -1
  58. package/dist/cjs/salla-offer-modal.cjs.entry.js +1 -1
  59. package/dist/cjs/salla-offer.cjs.entry.js +1 -1
  60. package/dist/cjs/salla-order-details-multiple-bundle-product.cjs.entry.js +1 -1
  61. package/dist/cjs/salla-order-details-options.cjs.entry.js +1 -1
  62. package/dist/cjs/salla-order-details.cjs.entry.js +1 -1
  63. package/dist/cjs/salla-order-edit-item.cjs.entry.js +1 -1
  64. package/dist/cjs/salla-order-edit.cjs.entry.js +1 -1
  65. package/dist/cjs/salla-order-summary.cjs.entry.js +1 -1
  66. package/dist/cjs/salla-order-totals-card.cjs.entry.js +1 -1
  67. package/dist/cjs/salla-orders.cjs.entry.js +1 -1
  68. package/dist/cjs/salla-payments.cjs.entry.js +1 -1
  69. package/dist/cjs/salla-placeholder.cjs.entry.js +1 -1
  70. package/dist/cjs/salla-price-range.cjs.entry.js +1 -1
  71. package/dist/cjs/salla-product-card_2.cjs.entry.js +1 -1
  72. package/dist/cjs/salla-product-size-guide.cjs.entry.js +1 -1
  73. package/dist/cjs/salla-products-list.cjs.entry.js +1 -1
  74. package/dist/cjs/salla-progress-bar.cjs.entry.js +1 -1
  75. package/dist/cjs/salla-quick-order.cjs.entry.js +1 -1
  76. package/dist/cjs/salla-rating-modal.cjs.entry.js +1 -1
  77. package/dist/cjs/salla-reward-action_4.cjs.entry.js +3 -3
  78. package/dist/cjs/salla-scopes.cjs.entry.js +1 -1
  79. package/dist/cjs/salla-search.cjs.entry.js +1 -1
  80. package/dist/cjs/salla-skeleton.cjs.entry.js +1 -1
  81. package/dist/cjs/salla-slider.cjs.entry.js +1 -1
  82. package/dist/cjs/salla-social-share.cjs.entry.js +1 -1
  83. package/dist/cjs/salla-social.cjs.entry.js +1 -1
  84. package/dist/cjs/salla-tab-content_3.cjs.entry.js +1 -1
  85. package/dist/cjs/salla-tiered-offer.cjs.entry.js +1 -1
  86. package/dist/cjs/salla-tooltip.cjs.entry.js +1 -1
  87. package/dist/cjs/salla-trust-badges.cjs.entry.js +1 -1
  88. package/dist/cjs/salla-user-menu.cjs.entry.js +1 -1
  89. package/dist/cjs/salla-user-profile.cjs.entry.js +1 -1
  90. package/dist/cjs/salla-user-settings.cjs.entry.js +1 -1
  91. package/dist/cjs/salla-verify.cjs.entry.js +1 -1
  92. package/dist/cjs/salla-wallet.cjs.entry.js +1 -1
  93. package/dist/cjs/{tracked-promise--fbeE9eN.js → tracked-promise-Dlrrx6bS.js} +1 -1
  94. package/dist/cjs/twilight.cjs.js +2 -2
  95. package/dist/cjs/{vanilla-picker-BFVuX93Y.js → vanilla-picker-BgvVWFWW.js} +1 -1
  96. package/dist/collection/collection-manifest.json +2 -0
  97. package/dist/collection/components/salla-bought-together/interfaces.js +1 -0
  98. package/dist/collection/components/salla-bought-together/salla-bought-together.css +18 -0
  99. package/dist/collection/components/salla-bought-together/salla-bought-together.js +174 -0
  100. package/dist/collection/components/salla-bullet-delivery/salla-bullet-delivery.js +1 -1
  101. package/dist/collection/components/salla-delivery-promise/delivery-promise-api.js +40 -0
  102. package/dist/collection/components/salla-delivery-promise/delivery-promise-city-filter.js +11 -0
  103. package/dist/collection/components/salla-delivery-promise/delivery-promise-intent.js +55 -0
  104. package/dist/collection/components/salla-delivery-promise/delivery-promise-labels.js +39 -0
  105. package/dist/collection/components/salla-delivery-promise/salla-delivery-promise.js +175 -167
  106. package/dist/components/index.js +2 -2
  107. package/dist/components/salla-bought-together.d.ts +11 -0
  108. package/dist/components/salla-bought-together.js +174 -0
  109. package/dist/components/salla-bullet-delivery.js +1 -1
  110. package/dist/components/salla-delivery-promise.js +324 -165
  111. package/dist/esm/{filepond-DPbkat7B.js → filepond-BdAJ1Q3U.js} +1 -1
  112. package/dist/esm/{filepond-plugin-file-poster-DgPt1KP-.js → filepond-plugin-file-poster-_P46glp3.js} +1 -1
  113. package/dist/esm/{filepond-plugin-file-validate-size-BV_54qp5.js → filepond-plugin-file-validate-size-Cs7iDcpm.js} +1 -1
  114. package/dist/esm/{filepond-plugin-file-validate-type-C_0YZnJv.js → filepond-plugin-file-validate-type-BokfkNG5.js} +1 -1
  115. package/dist/esm/{filepond-plugin-image-edit-BWL4OVdy.js → filepond-plugin-image-edit-DqujritR.js} +1 -1
  116. package/dist/esm/{filepond-plugin-image-exif-orientation-CteQgPe5.js → filepond-plugin-image-exif-orientation-CTqsgDyW.js} +1 -1
  117. package/dist/esm/{filepond-plugin-image-preview-CCPL4ZAz.js → filepond-plugin-image-preview-zoBFIa44.js} +1 -1
  118. package/dist/esm/{functions-BPhNXHAK.js → functions-CEdm6lBq.js} +1 -1
  119. package/dist/esm/{index-xzl1T3nS.js → index-DXkuZzsm.js} +1 -1
  120. package/dist/esm/{index--aLzvRrO.js → index-eYsXdqjv.js} +10 -10
  121. package/dist/esm/loader.js +3 -3
  122. package/dist/esm/salla-accordion-body_2.entry.js +1 -1
  123. package/dist/esm/salla-accordion_6.entry.js +1 -1
  124. package/dist/esm/{salla-add-product-button_4.entry.js → salla-add-product-button_5.entry.js} +130 -2
  125. package/dist/esm/salla-advertisement.entry.js +1 -1
  126. package/dist/esm/salla-alert_2.entry.js +1 -1
  127. package/dist/esm/salla-app-install-alert.entry.js +1 -1
  128. package/dist/esm/salla-apps-icons.entry.js +1 -1
  129. package/dist/esm/salla-badge.entry.js +1 -1
  130. package/dist/esm/salla-booking-field_7.entry.js +10 -10
  131. package/dist/esm/salla-bullet-delivery.entry.js +2 -2
  132. package/dist/esm/salla-cart-coupons.entry.js +1 -1
  133. package/dist/esm/salla-cart-item-offers_2.entry.js +1 -1
  134. package/dist/esm/salla-comment-form_8.entry.js +1 -1
  135. package/dist/esm/salla-conditional-offer.entry.js +1 -1
  136. package/dist/esm/salla-contacts.entry.js +1 -1
  137. package/dist/esm/salla-cookies-bar.entry.js +1 -1
  138. package/dist/esm/salla-count-down.entry.js +1 -1
  139. package/dist/esm/salla-custom-fields.entry.js +1 -1
  140. package/dist/esm/salla-delivery-promise.entry.js +294 -157
  141. package/dist/esm/salla-edit-order-button.entry.js +1 -1
  142. package/dist/esm/salla-filters-widget.entry.js +1 -1
  143. package/dist/esm/salla-filters.entry.js +1 -1
  144. package/dist/esm/salla-fulfillment-methods.entry.js +1 -1
  145. package/dist/esm/salla-gifting.entry.js +1 -1
  146. package/dist/esm/salla-hook.entry.js +1 -1
  147. package/dist/esm/salla-infinite-scroll.entry.js +1 -1
  148. package/dist/esm/salla-installment.entry.js +1 -1
  149. package/dist/esm/salla-list-tile.entry.js +1 -1
  150. package/dist/esm/salla-localization-modal.entry.js +1 -1
  151. package/dist/esm/salla-login-modal.entry.js +1 -1
  152. package/dist/esm/salla-loyalty-banner.entry.js +2 -2
  153. package/dist/esm/salla-loyalty-hero_2.entry.js +2 -2
  154. package/dist/esm/salla-loyalty-panel.entry.js +3 -3
  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-reward.entry.js +2 -2
  158. package/dist/esm/salla-loyalty.entry.js +1 -1
  159. package/dist/esm/salla-maintenance-alert.entry.js +1 -1
  160. package/dist/esm/salla-map.entry.js +1 -1
  161. package/dist/esm/salla-menu.entry.js +1 -1
  162. package/dist/esm/salla-metadata.entry.js +1 -1
  163. package/dist/esm/salla-multiple-bundle-product-cart_2.entry.js +1 -1
  164. package/dist/esm/salla-multiple-bundle-product-options-modal_2.entry.js +1 -1
  165. package/dist/esm/salla-multiple-bundle-product.entry.js +1 -1
  166. package/dist/esm/salla-notification-item.entry.js +1 -1
  167. package/dist/esm/salla-notifications.entry.js +1 -1
  168. package/dist/esm/salla-offer-modal.entry.js +1 -1
  169. package/dist/esm/salla-offer.entry.js +1 -1
  170. package/dist/esm/salla-order-details-multiple-bundle-product.entry.js +1 -1
  171. package/dist/esm/salla-order-details-options.entry.js +1 -1
  172. package/dist/esm/salla-order-details.entry.js +1 -1
  173. package/dist/esm/salla-order-edit-item.entry.js +1 -1
  174. package/dist/esm/salla-order-edit.entry.js +1 -1
  175. package/dist/esm/salla-order-summary.entry.js +1 -1
  176. package/dist/esm/salla-order-totals-card.entry.js +1 -1
  177. package/dist/esm/salla-orders.entry.js +1 -1
  178. package/dist/esm/salla-payments.entry.js +1 -1
  179. package/dist/esm/salla-placeholder.entry.js +1 -1
  180. package/dist/esm/salla-price-range.entry.js +1 -1
  181. package/dist/esm/salla-product-card_2.entry.js +1 -1
  182. package/dist/esm/salla-product-size-guide.entry.js +1 -1
  183. package/dist/esm/salla-products-list.entry.js +1 -1
  184. package/dist/esm/salla-progress-bar.entry.js +1 -1
  185. package/dist/esm/salla-quick-order.entry.js +1 -1
  186. package/dist/esm/salla-rating-modal.entry.js +1 -1
  187. package/dist/esm/salla-reward-action_4.entry.js +3 -3
  188. package/dist/esm/salla-scopes.entry.js +1 -1
  189. package/dist/esm/salla-search.entry.js +1 -1
  190. package/dist/esm/salla-skeleton.entry.js +1 -1
  191. package/dist/esm/salla-slider.entry.js +1 -1
  192. package/dist/esm/salla-social-share.entry.js +1 -1
  193. package/dist/esm/salla-social.entry.js +1 -1
  194. package/dist/esm/salla-tab-content_3.entry.js +1 -1
  195. package/dist/esm/salla-tiered-offer.entry.js +1 -1
  196. package/dist/esm/salla-tooltip.entry.js +1 -1
  197. package/dist/esm/salla-trust-badges.entry.js +1 -1
  198. package/dist/esm/salla-user-menu.entry.js +1 -1
  199. package/dist/esm/salla-user-profile.entry.js +1 -1
  200. package/dist/esm/salla-user-settings.entry.js +1 -1
  201. package/dist/esm/salla-verify.entry.js +1 -1
  202. package/dist/esm/salla-wallet.entry.js +1 -1
  203. package/dist/esm/{tracked-promise-DZU9tZyv.js → tracked-promise-DC9Saija.js} +1 -1
  204. package/dist/esm/twilight.js +3 -3
  205. package/dist/esm/{vanilla-picker-B2fiZJce.js → vanilla-picker-DdyyxtyV.js} +1 -1
  206. package/dist/twilight/{p-ba732bc9.entry.js → p-040057c7.entry.js} +1 -1
  207. package/dist/twilight/{p-1e9aaede.entry.js → p-046ef0cf.entry.js} +1 -1
  208. package/dist/twilight/{p-7d1b25c8.entry.js → p-04a3bd3a.entry.js} +1 -1
  209. package/dist/twilight/{p-5ed72df9.entry.js → p-083bfceb.entry.js} +1 -1
  210. package/dist/twilight/{p-f302049c.entry.js → p-0b6cfdc6.entry.js} +1 -1
  211. package/dist/twilight/{p-a9042935.entry.js → p-0c773a98.entry.js} +1 -1
  212. package/dist/twilight/{p-516b313b.entry.js → p-0fee8df2.entry.js} +1 -1
  213. package/dist/twilight/p-12e78aef.entry.js +4 -0
  214. package/dist/twilight/{p-b0381a65.entry.js → p-18046a80.entry.js} +1 -1
  215. package/dist/twilight/{p-53a365b6.entry.js → p-18428cad.entry.js} +1 -1
  216. package/dist/twilight/{p-a341cc6c.entry.js → p-18e4e822.entry.js} +1 -1
  217. package/dist/twilight/{p-1b74cdc9.entry.js → p-1c2c212f.entry.js} +1 -1
  218. package/dist/twilight/{p-7cb5b79e.entry.js → p-1d9e9e5e.entry.js} +1 -1
  219. package/dist/twilight/{p-5b731980.entry.js → p-1f18bb8c.entry.js} +1 -1
  220. package/dist/twilight/{p-ce24f47a.entry.js → p-24121404.entry.js} +1 -1
  221. package/dist/twilight/{p-3306a0e3.entry.js → p-28a276b7.entry.js} +1 -1
  222. package/dist/twilight/{p-b1a991a4.entry.js → p-2beb780e.entry.js} +1 -1
  223. package/dist/twilight/{p-74ca5db0.entry.js → p-2d29eae4.entry.js} +1 -1
  224. package/dist/twilight/{p-14430749.entry.js → p-2ea91f4d.entry.js} +1 -1
  225. package/dist/twilight/{p-ef51ee9c.entry.js → p-371ea2ac.entry.js} +1 -1
  226. package/dist/twilight/{p-a1551640.entry.js → p-38df842f.entry.js} +1 -1
  227. package/dist/twilight/{p-dcdaa403.entry.js → p-3a0482aa.entry.js} +1 -1
  228. package/dist/twilight/{p-6fbdfb32.entry.js → p-3dd609ff.entry.js} +1 -1
  229. package/dist/twilight/{p-efb25d45.entry.js → p-473e829b.entry.js} +1 -1
  230. package/dist/twilight/{p-63ca4a50.entry.js → p-4c7e5ca7.entry.js} +1 -1
  231. package/dist/twilight/p-4rGFyB1b.js +4 -0
  232. package/dist/twilight/{p-595ff7ae.entry.js → p-543482d0.entry.js} +1 -1
  233. package/dist/twilight/{p-c709eecf.entry.js → p-569db60a.entry.js} +1 -1
  234. package/dist/twilight/{p-6fcf797a.entry.js → p-63b091c3.entry.js} +1 -1
  235. package/dist/twilight/{p-0b3ab0c0.entry.js → p-67b3a063.entry.js} +1 -1
  236. package/dist/twilight/{p-33ed3cf6.entry.js → p-6a50e4ab.entry.js} +1 -1
  237. package/dist/twilight/{p-c4ddea92.entry.js → p-6ffe96cf.entry.js} +1 -1
  238. package/dist/twilight/{p-2864a914.entry.js → p-70e26072.entry.js} +1 -1
  239. package/dist/twilight/{p-c1e50801.entry.js → p-78b27b6f.entry.js} +1 -1
  240. package/dist/twilight/{p-2be849c0.entry.js → p-809d8765.entry.js} +1 -1
  241. package/dist/twilight/{p-4705328f.entry.js → p-82d315dc.entry.js} +1 -1
  242. package/dist/twilight/{p-ae739a30.entry.js → p-82fc9f8a.entry.js} +1 -1
  243. package/dist/twilight/{p-df3e785e.entry.js → p-86494434.entry.js} +1 -1
  244. package/dist/twilight/{p-62f5b9d2.entry.js → p-880974c0.entry.js} +1 -1
  245. package/dist/twilight/{p-cdb85c38.entry.js → p-914ef875.entry.js} +1 -1
  246. package/dist/twilight/{p-4cf14603.entry.js → p-92c3525a.entry.js} +1 -1
  247. package/dist/twilight/{p-a783f44e.entry.js → p-92ee979a.entry.js} +1 -1
  248. package/dist/twilight/{p-b9a3cd97.entry.js → p-98dfc58c.entry.js} +1 -1
  249. package/dist/twilight/{p-ae5a1e83.entry.js → p-9da33e90.entry.js} +1 -1
  250. package/dist/twilight/p-9f51245d.entry.js +4 -0
  251. package/dist/twilight/{p-9114ec15.entry.js → p-9fea03ff.entry.js} +1 -1
  252. package/dist/twilight/{p-gfF4Tkzf.js → p-B-gehnpX.js} +1 -1
  253. package/dist/twilight/{p-W0o3F-X6.js → p-BrL7ZFF-.js} +1 -1
  254. package/dist/twilight/{p-Dqn5ubGV.js → p-Bt5MNLrr.js} +1 -1
  255. package/dist/twilight/{p-CKKsiY6U.js → p-C4iKSe6r.js} +1 -1
  256. package/dist/twilight/{p-vMhKvihG.js → p-CZP8nF-D.js} +1 -1
  257. package/dist/twilight/{p-eA49HkVR.js → p-CdKOsdhF.js} +1 -1
  258. package/dist/twilight/{p-D8id_g5X.js → p-CdQPD_4N.js} +1 -1
  259. package/dist/twilight/{p-vdGuE3O6.js → p-CkMgy4QX.js} +1 -1
  260. package/dist/twilight/{p-MFOr6dmh.js → p-DgUXy-oM.js} +1 -1
  261. package/dist/twilight/{p-KGKLTJUI.js → p-VP7525fx.js} +1 -1
  262. package/dist/twilight/{p-638ff172.entry.js → p-a0792c90.entry.js} +1 -1
  263. package/dist/twilight/{p-90670ab5.entry.js → p-a74e2625.entry.js} +1 -1
  264. package/dist/twilight/{p-35084537.entry.js → p-a97da8bc.entry.js} +1 -1
  265. package/dist/twilight/p-aced00e2.entry.js +4 -0
  266. package/dist/twilight/{p-3c9c9316.entry.js → p-b04f3b37.entry.js} +1 -1
  267. package/dist/twilight/{p-5ea75d8d.entry.js → p-b258ef5c.entry.js} +1 -1
  268. package/dist/twilight/{p-984ab6ec.entry.js → p-ba81b8d6.entry.js} +1 -1
  269. package/dist/twilight/{p-6585c82b.entry.js → p-bab9b1ad.entry.js} +1 -1
  270. package/dist/twilight/{p-3953f0a0.entry.js → p-c00c26f4.entry.js} +1 -1
  271. package/dist/twilight/{p-81b43cf3.entry.js → p-c0ea9ff2.entry.js} +1 -1
  272. package/dist/twilight/{p-cc5aba4d.entry.js → p-c11f0af9.entry.js} +1 -1
  273. package/dist/twilight/{p-3646f57c.entry.js → p-c38311a2.entry.js} +1 -1
  274. package/dist/twilight/{p-7f5af809.entry.js → p-c6a56a0c.entry.js} +1 -1
  275. package/dist/twilight/{p-681c8fc0.entry.js → p-c8821c21.entry.js} +1 -1
  276. package/dist/twilight/{p-675f6c3f.entry.js → p-c8b8ea5c.entry.js} +1 -1
  277. package/dist/twilight/{p-3a643e3f.entry.js → p-c8f6bc81.entry.js} +1 -1
  278. package/dist/twilight/{p-e1054044.entry.js → p-cb5fbe10.entry.js} +1 -1
  279. package/dist/twilight/{p-c6bf0f70.entry.js → p-cf4c9420.entry.js} +1 -1
  280. package/dist/twilight/{p-e6fbc27e.entry.js → p-d400841e.entry.js} +1 -1
  281. package/dist/twilight/p-d49fd79d.entry.js +4 -0
  282. package/dist/twilight/{p-4828c47f.entry.js → p-d6a5df0d.entry.js} +1 -1
  283. package/dist/twilight/{p-f4d19537.entry.js → p-d6a86efa.entry.js} +1 -1
  284. package/dist/twilight/{p-02cb524a.entry.js → p-dbe6cc9c.entry.js} +1 -1
  285. package/dist/twilight/{p-30a0554b.entry.js → p-e2cec9f6.entry.js} +1 -1
  286. package/dist/twilight/{p-63250e42.entry.js → p-e5e1574f.entry.js} +1 -1
  287. package/dist/twilight/{p-6213a6b6.entry.js → p-e89e8a20.entry.js} +1 -1
  288. package/dist/twilight/{p--aLzvRrO.js → p-eYsXdqjv.js} +1 -1
  289. package/dist/twilight/{p-2ca1a6ef.entry.js → p-eadaf058.entry.js} +1 -1
  290. package/dist/twilight/{p-331bc274.entry.js → p-eae4b2c9.entry.js} +1 -1
  291. package/dist/twilight/p-ed6e8053.entry.js +4 -0
  292. package/dist/twilight/{p-6632849d.entry.js → p-f267b033.entry.js} +1 -1
  293. package/dist/twilight/{p-97d3ed79.entry.js → p-f3105e54.entry.js} +1 -1
  294. package/dist/twilight/{p-6773040a.entry.js → p-f3d76113.entry.js} +1 -1
  295. package/dist/twilight/{p-9bd8770c.entry.js → p-f91399b4.entry.js} +1 -1
  296. package/dist/twilight/{p-aa4d7e56.entry.js → p-faae4443.entry.js} +1 -1
  297. package/dist/twilight/{p-d3202fae.entry.js → p-fea8186b.entry.js} +1 -1
  298. package/dist/twilight/{p-614959f2.entry.js → p-ff972c8b.entry.js} +1 -1
  299. package/dist/twilight/twilight.esm.js +1 -1
  300. package/dist/types/components/salla-bought-together/interfaces.d.ts +15 -0
  301. package/dist/types/components/salla-bought-together/salla-bought-together.d.ts +23 -0
  302. package/dist/types/components/salla-delivery-promise/delivery-promise-api.d.ts +8 -0
  303. package/dist/types/components/salla-delivery-promise/delivery-promise-city-filter.d.ts +3 -0
  304. package/dist/types/components/salla-delivery-promise/delivery-promise-intent.d.ts +18 -0
  305. package/dist/types/components/salla-delivery-promise/delivery-promise-labels.d.ts +8 -0
  306. package/dist/types/components/salla-delivery-promise/interfaces.d.ts +16 -7
  307. package/dist/types/components/salla-delivery-promise/salla-delivery-promise.d.ts +31 -33
  308. package/dist/types/components.d.ts +23 -0
  309. package/package.json +5 -5
  310. package/dist/twilight/p-0598e48d.entry.js +0 -4
  311. package/dist/twilight/p-0d9e6f1b.entry.js +0 -4
  312. package/dist/twilight/p-264205d3.entry.js +0 -4
  313. package/dist/twilight/p-2e7c0235.entry.js +0 -4
  314. package/dist/twilight/p-CFQnlnSJ.js +0 -4
  315. package/dist/twilight/p-cace9063.entry.js +0 -4
@@ -2,112 +2,273 @@
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
4
  import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
5
+ import { d as defineCustomElement$5 } from './salla-button2.js';
6
+ import { d as defineCustomElement$4 } from './salla-loading2.js';
7
+ import { d as defineCustomElement$3 } from './salla-modal2.js';
5
8
  import { d as defineCustomElement$2 } from './salla-skeleton2.js';
6
9
 
10
+ const DEBUG_KEY = 'salla-delivery-promise-debug';
11
+ function log(message, data) {
12
+ if (localStorage.getItem(DEBUG_KEY)) {
13
+ data !== undefined ? console.log(message, data) : console.log(message);
14
+ }
15
+ }
16
+ /** Fetch available cities for a product's delivery promises. */
17
+ async function fetchCities(productId) {
18
+ log('fetchCities start', { productId });
19
+ const response = await salla.api.request(salla.url.api(`products/${productId}/delivery-promises/cities`));
20
+ if (!response.success || !Array.isArray(response.data) || response.data.length === 0) {
21
+ log('fetchCities: no data', { response });
22
+ return { cities: [], preselected: undefined };
23
+ }
24
+ const preselected = response.data.find((c) => c.is_selected);
25
+ log('fetchCities success', { count: response.data.length, preselected });
26
+ return { cities: response.data, preselected };
27
+ }
28
+ /** Fetch the delivery promise message for a given city or branch. */
29
+ async function fetchDeliveryMessage(productId, id, optionType, isLoginCycleEnabled) {
30
+ log('fetchDeliveryMessage start', { productId, id, optionType });
31
+ let queryString = '';
32
+ if (optionType === 'city' && !isLoginCycleEnabled) {
33
+ queryString = `?reference_id=${id}`;
34
+ }
35
+ else {
36
+ queryString = `?reference_id=${id}&reference_type=${optionType}`;
37
+ }
38
+ const response = (await salla.api.withoutNotifier(() => salla.api.request(salla.url.api(`products/${productId}/delivery-promises${queryString}`))));
39
+ if (!response.success) {
40
+ log('fetchDeliveryMessage error', { response });
41
+ throw new Error(response.error?.message || 'Failed to fetch delivery promise');
42
+ }
43
+ const message = response.data?.message?.trim();
44
+ log('fetchDeliveryMessage success', { message });
45
+ return message || null;
46
+ }
47
+
48
+ /** Filters cities by Arabic/English name (used inside the city-change modal). */
49
+ function filterCitiesForModal(cities, query) {
50
+ const q = query.trim().toLowerCase();
51
+ if (!q) {
52
+ return [...cities];
53
+ }
54
+ return cities.filter(city => city.name.toLowerCase().includes(q) || (city.name_en || '').toLowerCase().includes(q));
55
+ }
56
+
57
+ const INTENT_KEY = 'bullet_delivery_intent';
58
+ function getIntentStorage() {
59
+ const rememberLastSession = Boolean(salla.config.get('store.settings.bullet_delivery.settings.remember_last_session'));
60
+ return rememberLastSession ? salla.storage.store : salla.storage.session;
61
+ }
62
+ function getStoredIntent() {
63
+ const raw = getIntentStorage().get(INTENT_KEY);
64
+ return raw && typeof raw === 'object' ? raw : null;
65
+ }
66
+ /** Resolve the stored intent into a city or branch selection. Returns null when no usable intent. */
67
+ function resolveIntent() {
68
+ const intent = getStoredIntent();
69
+ if (!intent)
70
+ return null;
71
+ if (intent.type === 'address') {
72
+ const city = intent.address_details?.city;
73
+ const cityId = city?.id != null ? Number(city.id) : intent.city_id != null ? Number(intent.city_id) : null;
74
+ const cityName = city?.name?.trim() || '';
75
+ if (cityId != null) {
76
+ return { type: 'address', option: { id: cityId, name: cityName } };
77
+ }
78
+ return null;
79
+ }
80
+ if (intent.type === 'branch') {
81
+ const branchId = intent.branch_id != null
82
+ ? Number(intent.branch_id)
83
+ : intent.branch_details?.id != null
84
+ ? Number(intent.branch_details.id)
85
+ : null;
86
+ const branchName = intent.branch_details?.name?.trim() || '';
87
+ if (branchId != null) {
88
+ return { type: 'branch', option: { id: branchId, name: branchName } };
89
+ }
90
+ return null;
91
+ }
92
+ return null;
93
+ }
94
+ /** Build the payload for opening the bullet delivery modal with preselection. */
95
+ function buildBulletOpenPayload() {
96
+ const intent = getStoredIntent();
97
+ const payload = {};
98
+ if (intent?.type === 'address' && intent.address_id != null) {
99
+ payload.preselected_address_id = Number(intent.address_id);
100
+ }
101
+ if (intent?.type === 'branch') {
102
+ const branchId = intent.branch_id ?? intent.branch_details?.id;
103
+ if (branchId != null) {
104
+ payload.preselected_branch_id = Number(branchId);
105
+ }
106
+ }
107
+ return payload;
108
+ }
109
+
110
+ const DEFAULT_LABELS = {
111
+ deliveryTo: 'توصيل إلى',
112
+ pickupFromBranch: 'الاستلام من فرع',
113
+ noResults: 'لا توجد نتائج',
114
+ selectCity: 'اختر المدينة',
115
+ changeCityTitle: 'تغيير المدينة',
116
+ changeCitySubtitle: '',
117
+ cityFieldLabel: 'المدينة',
118
+ modalSearchPlaceholder: 'ابحث عن مدينة',
119
+ confirmAddress: 'تأكيد العنوان',
120
+ errorDeliveryPromise: 'لا يتوفر وعد تسليم لهذه المدينة',
121
+ errorPickupPromise: 'لا يتوفر وعد تسليم لهذا الفرع',
122
+ };
123
+ function loadLabels() {
124
+ return {
125
+ deliveryTo: salla.lang.getWithDefault('pages.products.promise_deliver_to', DEFAULT_LABELS.deliveryTo),
126
+ pickupFromBranch: salla.lang.getWithDefault('pages.products.promise_pickup_from_branch', DEFAULT_LABELS.pickupFromBranch),
127
+ noResults: salla.lang.getWithDefault('common.elements.no_options', DEFAULT_LABELS.noResults),
128
+ selectCity: salla.lang.getWithDefault('common.elements.select_city', DEFAULT_LABELS.selectCity),
129
+ changeCityTitle: salla.lang.getWithDefault('pages.products.promise_change_city_title', DEFAULT_LABELS.changeCityTitle),
130
+ changeCitySubtitle: salla.lang.getWithDefault('pages.products.promise_change_city_subtitle', 'قد تتغيّر مدة التوصيل حسب المدينة.'),
131
+ cityFieldLabel: salla.lang.getWithDefault('pages.products.promise_city_field', DEFAULT_LABELS.cityFieldLabel),
132
+ modalSearchPlaceholder: salla.lang.getWithDefault('pages.products.promise_search_city', DEFAULT_LABELS.modalSearchPlaceholder),
133
+ confirmAddress: salla.lang.getWithDefault('pages.checkout.confirm_address', DEFAULT_LABELS.confirmAddress),
134
+ errorDeliveryPromise: salla.lang.getWithDefault('pages.products.promise_delivery_not_available', DEFAULT_LABELS.errorDeliveryPromise),
135
+ errorPickupPromise: salla.lang.getWithDefault('pages.products.promise_pickup_not_available', DEFAULT_LABELS.errorPickupPromise),
136
+ };
137
+ }
138
+ /** Localized city display name (English when available and user language is not Arabic). */
139
+ function getCityDisplayName(city) {
140
+ const lang = salla.config.get('user.language_code');
141
+ if (lang && lang !== 'ar' && city.name_en?.trim()) {
142
+ return city.name_en.trim();
143
+ }
144
+ return city.name;
145
+ }
146
+
7
147
  const SallaDeliveryPromise$1 = /*@__PURE__*/ proxyCustomElement(class SallaDeliveryPromise extends HTMLElement {
8
148
  constructor() {
9
149
  super();
10
150
  this.__registerHost();
11
- this.cities = [];
12
- this.filteredCities = [];
13
- this.selectedCity = null;
151
+ // ── Feature flags & config ────────────────────────────────────────────
152
+ this.isDeliveryPromiseEnabled = false;
153
+ this.isLoginCycleEnabled = false;
154
+ this.canRender = false;
155
+ // ── Shared display state ──────────────────────────────────────────────
156
+ this.labels = DEFAULT_LABELS;
157
+ this.selectedLabel = null;
14
158
  this.deliveryMessage = null;
15
- this.isLoadingCities = false;
16
- this.isLoadingPromises = false;
17
- this.isDropdownOpen = false;
18
- this.searchQuery = '';
19
159
  this.hasError = false;
20
160
  this.errorMessage = '';
21
- /** i18n labels for city selector only; message comes from BE */
22
- this.labels = {
23
- deliveryTo: 'توصيل إلى',
24
- pickupFromBranch: 'الاستلام من فرع',
25
- searchPlaceholder: 'بحث...',
26
- noResults: 'لا توجد نتائج',
27
- selectCity: 'اختر المدينة',
161
+ this.isLoadingPromises = false;
162
+ // ── Login-cycle state (bullet delivery integration) ───────────────────
163
+ this.selectedCityLoginCycle = null;
164
+ this.selectedBranchLoginCycle = null;
165
+ // ── Standard flow state (city list) ───────────────────────────────────
166
+ this.cities = [];
167
+ this.selectedCity = null;
168
+ this.isLoadingCities = false;
169
+ // ── City-change modal state (non–login-cycle) ─────────────────────────
170
+ this.modalSearchQuery = '';
171
+ this.cityPendingSelection = null;
172
+ this.isCityPopoverOpen = false;
173
+ // ═══════════════════════════════════════════════════════════════════════
174
+ // Login-cycle (bullet delivery) integration
175
+ // ═══════════════════════════════════════════════════════════════════════
176
+ this.onBulletDeliveryConfirmed = () => {
177
+ this.applyBulletIntent();
28
178
  };
29
- this.canRender = false;
30
- this.requiresShipping = false;
31
- /** Used only for API calls, not rendered — no need for @State */
32
- this.productId = undefined;
33
- this.onClickOutside = (e) => {
34
- if (this.host.contains(e.target)) {
35
- return; // click inside component (e.g. search input, city list) — don't close
36
- }
37
- this.isDropdownOpen = false;
38
- window.removeEventListener('click', this.onClickOutside);
179
+ this.handleModalSearchInput = (event) => {
180
+ this.modalSearchQuery = event.target.value;
181
+ this.isCityPopoverOpen = true;
39
182
  };
40
- }
41
- setLabels() {
42
- this.labels = {
43
- deliveryTo: salla.lang.getWithDefault('pages.products.promise_deliver_to', 'توصيل إلى'),
44
- pickupFromBranch: salla.lang.getWithDefault('pages.products.promise_pickup_from_branch', 'الاستلام من فرع'),
45
- searchPlaceholder: salla.lang.getWithDefault('blocks.header.search_placeholder', 'بحث...'),
46
- noResults: salla.lang.getWithDefault('common.elements.no_options', 'لا توجد نتائج'),
47
- selectCity: salla.lang.getWithDefault('common.elements.select_city', 'اختر المدينة'),
183
+ this.handleModalComboboxActivate = () => {
184
+ this.isCityPopoverOpen = true;
48
185
  };
49
- }
50
- logger(message, data) {
51
- if (localStorage.getItem('salla-delivery-promise-debug')) {
52
- if (data) {
53
- console.log(message, data);
186
+ // ═══════════════════════════════════════════════════════════════════════
187
+ // Header click (dispatches to correct flow)
188
+ // ═══════════════════════════════════════════════════════════════════════
189
+ this.handleHeaderClick = (e) => {
190
+ e.stopPropagation();
191
+ if (this.isLoginCycleEnabled) {
192
+ this.openBulletDeliveryModal();
54
193
  }
55
194
  else {
56
- console.log(message);
195
+ void this.openCityChangeModal();
57
196
  }
58
- }
197
+ };
59
198
  }
199
+ // ═══════════════════════════════════════════════════════════════════════
200
+ // Lifecycle
201
+ // ═══════════════════════════════════════════════════════════════════════
60
202
  async componentDidLoad() {
61
203
  await salla.onReady();
62
204
  await salla.lang.onLoaded();
63
- this.setLabels();
64
- this.requiresShipping = salla.url.is_page('product.single') &&
65
- salla.config.get('store.features', []).includes('delivery-promises');
66
- if (this.requiresShipping) {
67
- this.logger('requiresShipping', this.requiresShipping);
68
- this.productId = salla.config.get('page.id');
69
- this.logger('productId', this.productId);
205
+ this.labels = loadLabels();
206
+ this.isDeliveryPromiseEnabled = salla.config.get('store.features', []).includes('delivery-promises');
207
+ this.isLoginCycleEnabled = salla.config.get('store.features', []).includes('bullet-delivery-v2');
208
+ this.productId = salla.config.get('page.id');
209
+ if (!this.isDeliveryPromiseEnabled) {
210
+ this.canRender = false;
211
+ return;
212
+ }
213
+ if (this.isLoginCycleEnabled) {
214
+ this.applyBulletIntent();
215
+ this.canRender = true;
216
+ window.addEventListener('bulletDeliveryConfirmed', this.onBulletDeliveryConfirmed);
70
217
  }
71
218
  else {
72
- this.canRender = false;
73
- this.logger('not requiresShipping', {
74
- is_product_single: salla.url.is_page('product.single'),
75
- includesDeliveryPromises: salla.config.get('store.features', []).includes('delivery-promises')
76
- });
219
+ this.selectedLabel = `${this.labels.deliveryTo} ${this.labels.selectCity}`;
220
+ await this.loadCities();
221
+ }
222
+ }
223
+ disconnectedCallback() {
224
+ window.removeEventListener('bulletDeliveryConfirmed', this.onBulletDeliveryConfirmed);
225
+ }
226
+ applyBulletIntent() {
227
+ const resolved = resolveIntent();
228
+ if (!resolved) {
229
+ this.selectedLabel = `${this.labels.deliveryTo} ${this.labels.selectCity}`;
230
+ this.selectedCityLoginCycle = null;
231
+ this.selectedBranchLoginCycle = null;
232
+ this.deliveryMessage = null;
77
233
  return;
78
234
  }
79
- await this.fetchCities();
235
+ if (resolved.type === 'address') {
236
+ this.selectedCityLoginCycle = resolved.option;
237
+ this.selectedBranchLoginCycle = null;
238
+ this.selectedLabel = `${this.labels.deliveryTo} ${resolved.option.name || this.labels.selectCity}`;
239
+ void this.loadDeliveryMessage(resolved.option.id, 'city');
240
+ }
241
+ else {
242
+ this.selectedBranchLoginCycle = resolved.option;
243
+ this.selectedCityLoginCycle = null;
244
+ this.selectedLabel = `${this.labels.pickupFromBranch} ${resolved.option.name}`;
245
+ void this.loadDeliveryMessage(resolved.option.id, 'branch');
246
+ }
247
+ }
248
+ openBulletDeliveryModal() {
249
+ salla.event.emit('bullet-delivery::open', buildBulletOpenPayload());
80
250
  }
81
- async fetchCities() {
82
- this.logger('start startfetchCities');
251
+ // ═══════════════════════════════════════════════════════════════════════
252
+ // Standard flow (city list, no login cycle)
253
+ // ═══════════════════════════════════════════════════════════════════════
254
+ async loadCities() {
83
255
  this.isLoadingCities = true;
84
256
  this.hasError = false;
85
257
  try {
86
- const response = await salla.api.request(salla.url.api(`products/${this.productId}/delivery-promises/cities`));
87
- if (response.success && Array.isArray(response.data) && response.data.length > 0) {
88
- this.logger('fetchCities success', { cities: response.data });
89
- // Sort cities: explicit cities first (id !== -1), then "Rest of cities" (id === -1)
90
- this.cities = this.sortCities(response.data);
91
- this.filteredCities = [...this.cities];
92
- // First, check if API returns a selected city (is_selected: true)
93
- let cityToSelect = this.cities.find(c => c.is_selected);
94
- if (!cityToSelect) {
95
- this.logger('no selectedCity from API response');
96
- }
97
- else {
98
- this.logger('selectedCity', cityToSelect);
99
- this.selectedCity = cityToSelect;
100
- await this.fetchDeliveryMessage(cityToSelect.id);
101
- }
102
- this.canRender = true;
103
- }
104
- else {
105
- this.logger('no data returned from fetchCities', { response: response });
258
+ const { cities, preselected } = await fetchCities(this.productId);
259
+ if (cities.length === 0) {
106
260
  this.canRender = false;
261
+ return;
262
+ }
263
+ this.cities = cities;
264
+ if (preselected) {
265
+ this.selectedCity = preselected;
266
+ this.selectedLabel = `${this.labels.deliveryTo} ${getCityDisplayName(preselected)}`;
267
+ await this.loadDeliveryMessage(preselected.id, 'city');
107
268
  }
269
+ this.canRender = true;
108
270
  }
109
271
  catch (error) {
110
- this.logger('fetchCities error', { error: error.message });
111
272
  this.hasError = true;
112
273
  this.errorMessage = error.message || 'Failed to load cities';
113
274
  this.canRender = false;
@@ -116,141 +277,139 @@ const SallaDeliveryPromise$1 = /*@__PURE__*/ proxyCustomElement(class SallaDeliv
116
277
  this.isLoadingCities = false;
117
278
  }
118
279
  }
119
- async fetchDeliveryMessage(cityId) {
120
- this.logger('start fetchDeliveryMessage', { cityId });
280
+ // ═══════════════════════════════════════════════════════════════════════
281
+ // Delivery message (shared by both flows)
282
+ // ═══════════════════════════════════════════════════════════════════════
283
+ async loadDeliveryMessage(id, optionType) {
121
284
  this.isLoadingPromises = true;
122
285
  this.hasError = false;
123
286
  this.deliveryMessage = null;
124
287
  try {
125
- const response = await salla.api.withoutNotifier(() => salla.api.request(salla.url.api(`products/${this.productId}/delivery-promises?city_id=${cityId}`)));
126
- if (response.success && response.data?.message) {
127
- const message = response.data.message.trim();
128
- this.logger('fetchDeliveryMessage success', { message });
129
- this.deliveryMessage = message || null;
130
- }
131
- else {
132
- this.logger('deliveryMessage not valid', { response });
133
- }
288
+ this.deliveryMessage = await fetchDeliveryMessage(this.productId, id, optionType, this.isLoginCycleEnabled);
134
289
  }
135
290
  catch (error) {
136
- this.logger('fetchDeliveryMessage error', { error: error.message });
137
291
  this.hasError = true;
138
- this.errorMessage = error.message || 'Failed to load delivery message';
292
+ this.errorMessage = optionType === 'city' ? this.labels.errorDeliveryPromise : this.labels.errorPickupPromise;
139
293
  }
140
294
  finally {
141
295
  this.isLoadingPromises = false;
142
296
  }
143
297
  }
144
- toggleDropdown(e) {
145
- e?.stopPropagation();
146
- this.isDropdownOpen = !this.isDropdownOpen;
147
- if (this.isDropdownOpen) {
148
- window.addEventListener('click', this.onClickOutside);
149
- if (this.searchInputRef) {
150
- setTimeout(() => this.searchInputRef.focus(), 100);
151
- }
152
- }
153
- else {
154
- window.removeEventListener('click', this.onClickOutside);
155
- }
156
- }
157
- disconnectedCallback() {
158
- window.removeEventListener('click', this.onClickOutside);
298
+ // ═══════════════════════════════════════════════════════════════════════
299
+ // City-change modal handlers (non–login-cycle)
300
+ // ═══════════════════════════════════════════════════════════════════════
301
+ async openCityChangeModal() {
302
+ if (!this.cityModalRef)
303
+ return;
304
+ this.cityPendingSelection = null;
305
+ this.modalSearchQuery = '';
306
+ this.isCityPopoverOpen = false;
307
+ await this.cityModalRef.setTitle(this.labels.changeCityTitle);
308
+ await this.cityModalRef.open();
159
309
  }
160
- /**
161
- * Sort cities: explicit cities first (id !== -1), then "Rest of cities" (id === -1) at the end
162
- */
163
- sortCities(cities) {
164
- return [...cities].sort((a, b) => {
165
- // "Rest of cities" (id === -1) should always be at the end
166
- if (a.id === -1)
167
- return 1;
168
- if (b.id === -1)
169
- return -1;
170
- return 0;
171
- });
310
+ handleModalSelectCity(city) {
311
+ this.cityPendingSelection = city;
312
+ this.modalSearchQuery = getCityDisplayName(city);
313
+ this.isCityPopoverOpen = false;
172
314
  }
173
- handleSearch(event) {
174
- const query = event.target.value.toLowerCase();
175
- this.searchQuery = query;
176
- if (query.length > 0) {
177
- this.filteredCities = this.cities.filter(city => city.name.toLowerCase()?.includes(query) ||
178
- (city.name_en || '').toLowerCase()?.includes(query));
179
- }
180
- else {
181
- this.filteredCities = [...this.cities];
315
+ async handleConfirmCityModal() {
316
+ if (!this.cityPendingSelection) {
317
+ await this.cityModalRef?.close();
318
+ return;
182
319
  }
183
- }
184
- async selectCity(city) {
185
- this.logger('selectCity', { city: city });
320
+ const city = this.cityPendingSelection;
186
321
  this.selectedCity = city;
187
- this.isDropdownOpen = false;
188
- window.removeEventListener('click', this.onClickOutside);
189
- this.searchQuery = '';
190
- this.filteredCities = [...this.cities];
191
- await this.fetchDeliveryMessage(city.id);
192
- }
193
- renderDropdown() {
194
- return (h("div", { class: "s-delivery-promise-dropdown" }, h("div", { class: "s-delivery-promise-dropdown-search" }, h("i", { class: "sicon-search" }), h("input", { type: "text", placeholder: this.labels.searchPlaceholder, value: this.searchQuery, onInput: (e) => this.handleSearch(e), ref: el => this.searchInputRef = el })), h("div", { class: "s-delivery-promise-dropdown-list" }, this.filteredCities.length === 0 ? (h("div", { class: "s-delivery-promise-dropdown-empty" }, this.labels.noResults)) : (this.filteredCities.map(city => (h("div", { key: city.id, class: `s-delivery-promise-dropdown-item ${this.selectedCity?.id === city.id ? 'selected' : ''}`, onClick: () => this.selectCity(city) }, h("span", { class: "s-delivery-promise-city-name" }, city.name), this.selectedCity?.id === city.id && (h("i", { class: "sicon-check" })))))))));
322
+ this.selectedLabel = `${this.labels.deliveryTo} ${getCityDisplayName(city)}`;
323
+ await this.loadDeliveryMessage(city.id, 'city');
324
+ await this.cityModalRef?.close();
195
325
  }
196
- /**
197
- * Skeleton shown during initial city fetch to avoid blank period and layout shift.
198
- * Matches the structure/size of the real content (header + message area).
199
- */
200
- renderInitialLoadingSkeleton() {
326
+ // ═══════════════════════════════════════════════════════════════════════
327
+ // Render helpers
328
+ // ═══════════════════════════════════════════════════════════════════════
329
+ renderLoadingSkeleton() {
201
330
  return (h(Host, { class: "s-delivery-promise-wrapper s-delivery-promise-skeleton" }, h("div", { class: "s-delivery-promise-container" }, h("div", { class: "s-delivery-promise-header s-delivery-promise-header-skeleton" }, h("div", { class: "s-delivery-promise-location" }, h("salla-skeleton", { height: "14px", width: "180px" })), h("salla-skeleton", { height: "18px", width: "18px" })), h("div", { class: "s-delivery-promise-loading" }, h("salla-skeleton", { height: "20px", width: "80%" })))));
202
331
  }
203
332
  renderDeliveryMessage() {
204
333
  if (this.isLoadingPromises) {
205
334
  return (h("div", { class: "s-delivery-promise-loading" }, h("salla-skeleton", { height: "20px", width: "80%" })));
206
335
  }
207
- if (!this.deliveryMessage) {
336
+ if (!this.deliveryMessage)
208
337
  return null;
209
- }
210
- return (h("div", { class: "s-delivery-promise-message" }, this.deliveryMessage));
338
+ return h("div", { class: "s-delivery-promise-message" }, this.deliveryMessage);
339
+ }
340
+ renderCityModalBody() {
341
+ const filtered = filterCitiesForModal(this.cities, this.modalSearchQuery);
342
+ return (h("div", { class: "s-delivery-promise-modal-body" }, h("label", { class: "s-delivery-promise-modal-field-label", htmlFor: "s-delivery-promise-modal-search" }, this.labels.cityFieldLabel, h("span", { class: "s-delivery-promise-required", "aria-hidden": "true" }, " *")), h("div", { class: "s-delivery-promise-modal-combobox" }, h("div", { class: "s-delivery-promise-modal-search", onClick: this.handleModalComboboxActivate }, h("i", { class: "sicon-search", "aria-hidden": "true" }), h("input", { id: "s-delivery-promise-modal-search", type: "text", class: "form-input", placeholder: this.labels.modalSearchPlaceholder, value: this.modalSearchQuery, onInput: this.handleModalSearchInput, autocomplete: "off", "aria-autocomplete": "list", "aria-expanded": this.isCityPopoverOpen ? 'true' : 'false', "aria-controls": "s-delivery-promise-modal-listbox" })), h("div", { id: "s-delivery-promise-modal-listbox", class: "s-delivery-promise-modal-popover", role: "listbox", hidden: !this.isCityPopoverOpen }, h("div", { class: "s-delivery-promise-modal-list s-scrollbar" }, filtered.length === 0 ? (h("div", { class: "s-delivery-promise-modal-empty" }, this.labels.noResults)) : (filtered.map(city => (h("button", { key: city.id, type: "button", role: "option", class: {
343
+ 's-delivery-promise-modal-item': true,
344
+ 's-delivery-promise-modal-item--selected': this.cityPendingSelection?.id === city.id,
345
+ }, "aria-selected": this.cityPendingSelection?.id === city.id ? 'true' : 'false', onClick: e => {
346
+ e.stopPropagation();
347
+ this.handleModalSelectCity(city);
348
+ } }, h("span", { class: "s-delivery-promise-modal-item-name" }, city.name), this.cityPendingSelection?.id === city.id ? h("i", { class: "sicon-check", "aria-hidden": "true" }) : null)))))))));
349
+ }
350
+ renderCityChangeModal() {
351
+ if (this.isLoginCycleEnabled)
352
+ return null;
353
+ return (h("salla-modal", { id: "s-delivery-promise-city-modal", ref: el => { this.cityModalRef = el; }, class: "s-delivery-promise-city-modal", isClosable: true, width: "md", "modal-title": this.labels.changeCityTitle, subTitle: this.labels.changeCitySubtitle }, this.renderCityModalBody(), h("salla-button", { slot: "footer", width: "wide", disabled: !this.cityPendingSelection, onClick: () => this.handleConfirmCityModal() }, !this.isLoadingPromises && this.labels.confirmAddress)));
211
354
  }
355
+ // ═══════════════════════════════════════════════════════════════════════
356
+ // Main render
357
+ // ═══════════════════════════════════════════════════════════════════════
212
358
  render() {
213
- // Not on product page or delivery-promises disabled — hide entirely
214
- if (!this.requiresShipping) {
359
+ if (!this.isDeliveryPromiseEnabled)
215
360
  return null;
216
- }
217
- // Initial city fetch: show skeleton to avoid blank period and layout shift
218
- if (this.isLoadingCities) {
219
- return this.renderInitialLoadingSkeleton();
220
- }
221
- // Fetch done but no cities / error — hide
222
- if (!this.canRender || this.cities.length === 0) {
361
+ if (this.isLoadingCities)
362
+ return this.renderLoadingSkeleton();
363
+ if (!this.canRender)
223
364
  return null;
224
- }
225
- return (h(Host, { class: "s-delivery-promise-wrapper" }, h("div", { class: "s-delivery-promise-container" }, h("div", { class: "s-delivery-promise-header", onClick: (e) => this.toggleDropdown(e) }, h("div", { class: "s-delivery-promise-location" }, h("span", { class: "s-delivery-promise-title" }, this.labels.deliveryTo, " ", this.selectedCity?.name || this.labels.selectCity)), h("i", { class: `sicon-keyboard_arrow_down s-delivery-promise-arrow ${this.isDropdownOpen ? 'open' : ''}` })), this.hasError && (h("div", { class: "s-delivery-promise-error" }, this.errorMessage)), this.isDropdownOpen && this.renderDropdown(), !this.hasError && this.renderDeliveryMessage())));
365
+ return (h(Host, { class: "s-delivery-promise-wrapper" }, h("div", { class: "s-delivery-promise-container" }, h("div", { class: "s-delivery-promise-header", onClick: this.handleHeaderClick }, h("div", { class: "s-delivery-promise-location" }, h("span", { class: "s-delivery-promise-title" }, this.selectedLabel)), h("i", { class: `sicon-keyboard_arrow_down s-delivery-promise-arrow` })), this.hasError && h("div", { class: "s-delivery-promise-error" }, this.errorMessage), !this.hasError && this.renderDeliveryMessage()), this.renderCityChangeModal()));
226
366
  }
227
367
  get host() { return this; }
228
368
  }, [0, "salla-delivery-promise", {
229
- "cities": [32],
230
- "filteredCities": [32],
231
- "selectedCity": [32],
369
+ "isDeliveryPromiseEnabled": [32],
370
+ "isLoginCycleEnabled": [32],
371
+ "canRender": [32],
372
+ "labels": [32],
373
+ "selectedLabel": [32],
232
374
  "deliveryMessage": [32],
233
- "isLoadingCities": [32],
234
- "isLoadingPromises": [32],
235
- "isDropdownOpen": [32],
236
- "searchQuery": [32],
237
375
  "hasError": [32],
238
376
  "errorMessage": [32],
239
- "labels": [32],
240
- "canRender": [32],
241
- "requiresShipping": [32]
377
+ "isLoadingPromises": [32],
378
+ "selectedCityLoginCycle": [32],
379
+ "selectedBranchLoginCycle": [32],
380
+ "cities": [32],
381
+ "selectedCity": [32],
382
+ "isLoadingCities": [32],
383
+ "modalSearchQuery": [32],
384
+ "cityPendingSelection": [32],
385
+ "isCityPopoverOpen": [32]
242
386
  }]);
243
387
  function defineCustomElement$1() {
244
388
  if (typeof customElements === "undefined") {
245
389
  return;
246
390
  }
247
- const components = ["salla-delivery-promise", "salla-skeleton"];
391
+ const components = ["salla-delivery-promise", "salla-button", "salla-loading", "salla-modal", "salla-skeleton"];
248
392
  components.forEach(tagName => { switch (tagName) {
249
393
  case "salla-delivery-promise":
250
394
  if (!customElements.get(tagName)) {
251
395
  customElements.define(tagName, SallaDeliveryPromise$1);
252
396
  }
253
397
  break;
398
+ case "salla-button":
399
+ if (!customElements.get(tagName)) {
400
+ defineCustomElement$5();
401
+ }
402
+ break;
403
+ case "salla-loading":
404
+ if (!customElements.get(tagName)) {
405
+ defineCustomElement$4();
406
+ }
407
+ break;
408
+ case "salla-modal":
409
+ if (!customElements.get(tagName)) {
410
+ defineCustomElement$3();
411
+ }
412
+ break;
254
413
  case "salla-skeleton":
255
414
  if (!customElements.get(tagName)) {
256
415
  defineCustomElement$2();
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index--aLzvRrO.js';
4
+ import { d as getDefaultExportFromCjs } from './index-eYsXdqjv.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index--aLzvRrO.js';
4
+ import { d as getDefaultExportFromCjs } from './index-eYsXdqjv.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index--aLzvRrO.js';
4
+ import { d as getDefaultExportFromCjs } from './index-eYsXdqjv.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index--aLzvRrO.js';
4
+ import { d as getDefaultExportFromCjs } from './index-eYsXdqjv.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index--aLzvRrO.js';
4
+ import { d as getDefaultExportFromCjs } from './index-eYsXdqjv.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
- import { d as getDefaultExportFromCjs } from './index--aLzvRrO.js';
4
+ import { d as getDefaultExportFromCjs } from './index-eYsXdqjv.js';
5
5
 
6
6
  function _mergeNamespaces(n, m) {
7
7
  m.forEach(function (e) {