@salla.sa/twilight-components 2.14.439 → 2.14.441
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.
- package/dist/cjs/{filepond-DdDLuiM5.js → filepond-CR18WANU.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-poster-yMQqced-.js → filepond-plugin-file-poster-BgJLk2xE.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-validate-size-ySnuQivZ.js → filepond-plugin-file-validate-size-DdhORRaG.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-validate-type-DZR1JS8f.js → filepond-plugin-file-validate-type-Cub0X5ah.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-edit-D1I8S80L.js → filepond-plugin-image-edit-DgEsDjWT.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-exif-orientation-C9XMlwy1.js → filepond-plugin-image-exif-orientation-BTfUfEsw.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-preview-Bb0GALoo.js → filepond-plugin-image-preview-HZ3u1SlT.js} +1 -1
- package/dist/cjs/{functions-wi2J1iyx.js → functions-D9RJmmeE.js} +1 -1
- package/dist/cjs/{index-gyLHvjDh.js → index-BTssS-W3.js} +1 -1
- package/dist/cjs/{index-CzYs-dhm.js → index-ChjKTah1.js} +6 -6
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/salla-accordion-body_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-accordion_6.cjs.entry.js +1 -1
- package/dist/cjs/salla-add-product-button_5.cjs.entry.js +1 -1
- package/dist/cjs/salla-advertisement.cjs.entry.js +1 -1
- package/dist/cjs/salla-alert_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-app-install-alert.cjs.entry.js +1 -1
- package/dist/cjs/salla-apps-icons.cjs.entry.js +1 -1
- package/dist/cjs/salla-badge.cjs.entry.js +1 -1
- package/dist/cjs/salla-booking-field_7.cjs.entry.js +10 -10
- package/dist/cjs/salla-bullet-delivery_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-cart-coupons.cjs.entry.js +1 -1
- package/dist/cjs/salla-cart-item-offers_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-cashback-banner.cjs.entry.js +1 -1
- package/dist/cjs/salla-comment-form_8.cjs.entry.js +1 -1
- package/dist/cjs/salla-conditional-offer.cjs.entry.js +1 -1
- package/dist/cjs/salla-contacts.cjs.entry.js +1 -1
- package/dist/cjs/salla-cookies-bar.cjs.entry.js +1 -1
- package/dist/cjs/salla-count-down.cjs.entry.js +1 -1
- package/dist/cjs/salla-custom-fields.cjs.entry.js +1 -1
- package/dist/cjs/salla-delivery-promise.cjs.entry.js +41 -35
- package/dist/cjs/salla-edit-order-button.cjs.entry.js +1 -1
- package/dist/cjs/salla-filters-widget.cjs.entry.js +1 -1
- package/dist/cjs/salla-filters.cjs.entry.js +1 -1
- package/dist/cjs/salla-fulfillment-methods.cjs.entry.js +1 -1
- package/dist/cjs/salla-gifting.cjs.entry.js +1 -1
- package/dist/cjs/salla-hook.cjs.entry.js +1 -1
- package/dist/cjs/salla-infinite-scroll.cjs.entry.js +1 -1
- package/dist/cjs/salla-installment.cjs.entry.js +1 -1
- package/dist/cjs/salla-list-tile.cjs.entry.js +1 -1
- package/dist/cjs/salla-localization-modal.cjs.entry.js +1 -1
- package/dist/cjs/salla-login-modal.cjs.entry.js +1 -1
- package/dist/cjs/salla-loyalty-banner.cjs.entry.js +2 -2
- package/dist/cjs/salla-loyalty-hero_2.cjs.entry.js +2 -2
- package/dist/cjs/salla-loyalty-panel.cjs.entry.js +3 -3
- package/dist/cjs/salla-loyalty-points-banner.cjs.entry.js +1 -1
- package/dist/cjs/salla-loyalty-prize-item.cjs.entry.js +1 -1
- package/dist/cjs/salla-loyalty-program.cjs.entry.js +3 -3
- package/dist/cjs/salla-loyalty-reward.cjs.entry.js +2 -2
- package/dist/cjs/salla-loyalty.cjs.entry.js +1 -1
- package/dist/cjs/salla-maintenance-alert.cjs.entry.js +1 -1
- package/dist/cjs/salla-map.cjs.entry.js +1 -1
- package/dist/cjs/salla-menu.cjs.entry.js +1 -1
- package/dist/cjs/salla-metadata.cjs.entry.js +1 -1
- package/dist/cjs/salla-multiple-bundle-product-cart_2.cjs.entry.js +247 -42
- package/dist/cjs/salla-multiple-bundle-product-options-modal_2.cjs.entry.js +86 -25
- package/dist/cjs/salla-multiple-bundle-product.cjs.entry.js +1 -1
- package/dist/cjs/salla-next-order-coupon.cjs.entry.js +1 -1
- package/dist/cjs/salla-notification-item.cjs.entry.js +1 -1
- package/dist/cjs/salla-notifications.cjs.entry.js +1 -1
- package/dist/cjs/salla-offer-modal.cjs.entry.js +1 -1
- package/dist/cjs/salla-offer.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-details-multiple-bundle-product.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-details-options.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-details.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-edit-item.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-edit-product-card.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-edit.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-summary.cjs.entry.js +1 -1
- package/dist/cjs/salla-order-totals-card.cjs.entry.js +1 -1
- package/dist/cjs/salla-orders.cjs.entry.js +1 -1
- package/dist/cjs/salla-payments.cjs.entry.js +1 -1
- package/dist/cjs/salla-placeholder.cjs.entry.js +1 -1
- package/dist/cjs/salla-price-range.cjs.entry.js +1 -1
- package/dist/cjs/salla-product-card-embed.cjs.entry.js +2 -2
- package/dist/cjs/salla-product-card_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-product-size-guide.cjs.entry.js +1 -1
- package/dist/cjs/salla-products-list.cjs.entry.js +1 -1
- package/dist/cjs/salla-progress-bar.cjs.entry.js +1 -1
- package/dist/cjs/salla-quick-order.cjs.entry.js +1 -1
- package/dist/cjs/salla-rating-modal.cjs.entry.js +1 -1
- package/dist/cjs/salla-reward-action_4.cjs.entry.js +3 -3
- package/dist/cjs/salla-scopes.cjs.entry.js +1 -1
- package/dist/cjs/salla-search.cjs.entry.js +1 -1
- package/dist/cjs/salla-skeleton.cjs.entry.js +1 -1
- package/dist/cjs/salla-slider.cjs.entry.js +1 -1
- package/dist/cjs/salla-social-share.cjs.entry.js +1 -1
- package/dist/cjs/salla-social.cjs.entry.js +1 -1
- package/dist/cjs/salla-tab-content_3.cjs.entry.js +1 -1
- package/dist/cjs/salla-tiered-offer.cjs.entry.js +48 -31
- package/dist/cjs/salla-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/salla-trust-badges.cjs.entry.js +1 -1
- package/dist/cjs/salla-user-menu.cjs.entry.js +1 -1
- package/dist/cjs/salla-user-profile.cjs.entry.js +1 -1
- package/dist/cjs/salla-user-settings.cjs.entry.js +1 -1
- package/dist/cjs/salla-verify.cjs.entry.js +1 -1
- package/dist/cjs/salla-wallet.cjs.entry.js +1 -1
- package/dist/cjs/{tracked-promise-DT3W4yYx.js → tracked-promise-kKXrk2xR.js} +1 -1
- package/dist/cjs/twilight.cjs.js +2 -2
- package/dist/cjs/{vanilla-picker-BdKuUhUF.js → vanilla-picker-DchwguNU.js} +1 -1
- package/dist/collection/components/salla-delivery-promise/delivery-promise-api.js +4 -3
- package/dist/collection/components/salla-delivery-promise/salla-delivery-promise.js +38 -25
- package/dist/collection/components/salla-multiple-bundle-product/components/salla-multiple-bundle-product-details.js +278 -41
- package/dist/collection/components/salla-multiple-bundle-product/components/salla-multiple-bundle-product-options-modal.js +18 -4
- package/dist/collection/components/salla-multiple-bundle-product/components/salla-multiple-bundle-product-slider.js +107 -20
- package/dist/collection/components/salla-product-card-embed/salla-product-card-embed.css +32 -0
- package/dist/collection/components/salla-tiered-offer/salla-tiered-offer.js +47 -30
- package/dist/components/index.js +2 -2
- package/dist/components/salla-delivery-promise.js +54 -42
- package/dist/components/salla-multiple-bundle-product-details2.js +250 -42
- package/dist/components/salla-multiple-bundle-product-options-modal2.js +18 -4
- package/dist/components/salla-multiple-bundle-product-slider2.js +69 -20
- package/dist/components/salla-product-card-embed.js +1 -1
- package/dist/components/salla-tiered-offer.js +47 -30
- package/dist/esm/{filepond-CuxNx4T_.js → filepond-DKQDCbwV.js} +1 -1
- package/dist/esm/{filepond-plugin-file-poster-B0bm9HVP.js → filepond-plugin-file-poster-SawqMYzR.js} +1 -1
- package/dist/esm/{filepond-plugin-file-validate-size-Ndd8bi5G.js → filepond-plugin-file-validate-size-BmxmtaD4.js} +1 -1
- package/dist/esm/{filepond-plugin-file-validate-type-DrPPjEtZ.js → filepond-plugin-file-validate-type-CCuZxfqE.js} +1 -1
- package/dist/esm/{filepond-plugin-image-edit-C96YLlHm.js → filepond-plugin-image-edit-BW1mzub6.js} +1 -1
- package/dist/esm/{filepond-plugin-image-exif-orientation-BufhQyn4.js → filepond-plugin-image-exif-orientation-CN08NQm5.js} +1 -1
- package/dist/esm/{filepond-plugin-image-preview-xyGt-4PS.js → filepond-plugin-image-preview-HKD_HLA1.js} +1 -1
- package/dist/esm/{functions-BXvEy71U.js → functions-hYdCF4RE.js} +1 -1
- package/dist/esm/{index-D0jpoyIT.js → index-DMcU-3GG.js} +6 -6
- package/dist/esm/{index-BVmIkaqr.js → index-VfKYpHVb.js} +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/salla-accordion-body_2.entry.js +1 -1
- package/dist/esm/salla-accordion_6.entry.js +1 -1
- package/dist/esm/salla-add-product-button_5.entry.js +1 -1
- package/dist/esm/salla-advertisement.entry.js +1 -1
- package/dist/esm/salla-alert_2.entry.js +1 -1
- package/dist/esm/salla-app-install-alert.entry.js +1 -1
- package/dist/esm/salla-apps-icons.entry.js +1 -1
- package/dist/esm/salla-badge.entry.js +1 -1
- package/dist/esm/salla-booking-field_7.entry.js +10 -10
- package/dist/esm/salla-bullet-delivery_2.entry.js +1 -1
- package/dist/esm/salla-cart-coupons.entry.js +1 -1
- package/dist/esm/salla-cart-item-offers_2.entry.js +1 -1
- package/dist/esm/salla-cashback-banner.entry.js +1 -1
- package/dist/esm/salla-comment-form_8.entry.js +1 -1
- package/dist/esm/salla-conditional-offer.entry.js +1 -1
- package/dist/esm/salla-contacts.entry.js +1 -1
- package/dist/esm/salla-cookies-bar.entry.js +1 -1
- package/dist/esm/salla-count-down.entry.js +1 -1
- package/dist/esm/salla-custom-fields.entry.js +1 -1
- package/dist/esm/salla-delivery-promise.entry.js +41 -35
- package/dist/esm/salla-edit-order-button.entry.js +1 -1
- package/dist/esm/salla-filters-widget.entry.js +1 -1
- package/dist/esm/salla-filters.entry.js +1 -1
- package/dist/esm/salla-fulfillment-methods.entry.js +1 -1
- package/dist/esm/salla-gifting.entry.js +1 -1
- package/dist/esm/salla-hook.entry.js +1 -1
- package/dist/esm/salla-infinite-scroll.entry.js +1 -1
- package/dist/esm/salla-installment.entry.js +1 -1
- package/dist/esm/salla-list-tile.entry.js +1 -1
- package/dist/esm/salla-localization-modal.entry.js +1 -1
- package/dist/esm/salla-login-modal.entry.js +1 -1
- package/dist/esm/salla-loyalty-banner.entry.js +2 -2
- package/dist/esm/salla-loyalty-hero_2.entry.js +2 -2
- package/dist/esm/salla-loyalty-panel.entry.js +3 -3
- package/dist/esm/salla-loyalty-points-banner.entry.js +1 -1
- package/dist/esm/salla-loyalty-prize-item.entry.js +1 -1
- package/dist/esm/salla-loyalty-program.entry.js +3 -3
- package/dist/esm/salla-loyalty-reward.entry.js +2 -2
- package/dist/esm/salla-loyalty.entry.js +1 -1
- package/dist/esm/salla-maintenance-alert.entry.js +1 -1
- package/dist/esm/salla-map.entry.js +1 -1
- package/dist/esm/salla-menu.entry.js +1 -1
- package/dist/esm/salla-metadata.entry.js +1 -1
- package/dist/esm/salla-multiple-bundle-product-cart_2.entry.js +247 -42
- package/dist/esm/salla-multiple-bundle-product-options-modal_2.entry.js +86 -25
- package/dist/esm/salla-multiple-bundle-product.entry.js +1 -1
- package/dist/esm/salla-next-order-coupon.entry.js +1 -1
- package/dist/esm/salla-notification-item.entry.js +1 -1
- package/dist/esm/salla-notifications.entry.js +1 -1
- package/dist/esm/salla-offer-modal.entry.js +1 -1
- package/dist/esm/salla-offer.entry.js +1 -1
- package/dist/esm/salla-order-details-multiple-bundle-product.entry.js +1 -1
- package/dist/esm/salla-order-details-options.entry.js +1 -1
- package/dist/esm/salla-order-details.entry.js +1 -1
- package/dist/esm/salla-order-edit-item.entry.js +1 -1
- package/dist/esm/salla-order-edit-product-card.entry.js +1 -1
- package/dist/esm/salla-order-edit.entry.js +1 -1
- package/dist/esm/salla-order-summary.entry.js +1 -1
- package/dist/esm/salla-order-totals-card.entry.js +1 -1
- package/dist/esm/salla-orders.entry.js +1 -1
- package/dist/esm/salla-payments.entry.js +1 -1
- package/dist/esm/salla-placeholder.entry.js +1 -1
- package/dist/esm/salla-price-range.entry.js +1 -1
- package/dist/esm/salla-product-card-embed.entry.js +2 -2
- package/dist/esm/salla-product-card_2.entry.js +1 -1
- package/dist/esm/salla-product-size-guide.entry.js +1 -1
- package/dist/esm/salla-products-list.entry.js +1 -1
- package/dist/esm/salla-progress-bar.entry.js +1 -1
- package/dist/esm/salla-quick-order.entry.js +1 -1
- package/dist/esm/salla-rating-modal.entry.js +1 -1
- package/dist/esm/salla-reward-action_4.entry.js +3 -3
- package/dist/esm/salla-scopes.entry.js +1 -1
- package/dist/esm/salla-search.entry.js +1 -1
- package/dist/esm/salla-skeleton.entry.js +1 -1
- package/dist/esm/salla-slider.entry.js +1 -1
- package/dist/esm/salla-social-share.entry.js +1 -1
- package/dist/esm/salla-social.entry.js +1 -1
- package/dist/esm/salla-tab-content_3.entry.js +1 -1
- package/dist/esm/salla-tiered-offer.entry.js +48 -31
- package/dist/esm/salla-tooltip.entry.js +1 -1
- package/dist/esm/salla-trust-badges.entry.js +1 -1
- package/dist/esm/salla-user-menu.entry.js +1 -1
- package/dist/esm/salla-user-profile.entry.js +1 -1
- package/dist/esm/salla-user-settings.entry.js +1 -1
- package/dist/esm/salla-verify.entry.js +1 -1
- package/dist/esm/salla-wallet.entry.js +1 -1
- package/dist/esm/{tracked-promise-2BTc0cKI.js → tracked-promise-BSIJGUDO.js} +1 -1
- package/dist/esm/twilight.js +3 -3
- package/dist/esm/{vanilla-picker-DN-pQ4Fw.js → vanilla-picker-DKFizE1R.js} +1 -1
- package/dist/twilight/{p-eb352a06.entry.js → p-057303fc.entry.js} +1 -1
- package/dist/twilight/{p-bfe0be2b.entry.js → p-0da228bd.entry.js} +1 -1
- package/dist/twilight/{p-2ab53408.entry.js → p-0e7eded5.entry.js} +1 -1
- package/dist/twilight/p-1344cda3.entry.js +4 -0
- package/dist/twilight/{p-c207c587.entry.js → p-1694c751.entry.js} +1 -1
- package/dist/twilight/{p-5f7466cf.entry.js → p-169f09fe.entry.js} +1 -1
- package/dist/twilight/{p-228413fa.entry.js → p-180ecec6.entry.js} +1 -1
- package/dist/twilight/{p-f81452e9.entry.js → p-18788bb9.entry.js} +1 -1
- package/dist/twilight/{p-81985743.entry.js → p-21d225b0.entry.js} +1 -1
- package/dist/twilight/{p-fc3e6684.entry.js → p-255c1c94.entry.js} +1 -1
- package/dist/twilight/{p-378a7e72.entry.js → p-2813f52f.entry.js} +1 -1
- package/dist/twilight/{p-0fd165b9.entry.js → p-28312faf.entry.js} +1 -1
- package/dist/twilight/p-2a820928.entry.js +4 -0
- package/dist/twilight/{p-ef5d5f2a.entry.js → p-2da4174e.entry.js} +1 -1
- package/dist/twilight/{p-4a9379a1.entry.js → p-2fb7fda6.entry.js} +1 -1
- package/dist/twilight/{p-3c5b9e45.entry.js → p-31b6ab69.entry.js} +1 -1
- package/dist/twilight/{p-e2ebc898.entry.js → p-329e0ccf.entry.js} +1 -1
- package/dist/twilight/{p-3918f93c.entry.js → p-32b4986d.entry.js} +1 -1
- package/dist/twilight/{p-1567d3b0.entry.js → p-373ab9bb.entry.js} +1 -1
- package/dist/twilight/{p-c1823790.entry.js → p-37571489.entry.js} +1 -1
- package/dist/twilight/{p-79197700.entry.js → p-37871613.entry.js} +1 -1
- package/dist/twilight/p-399f5ab8.entry.js +4 -0
- package/dist/twilight/{p-adc138bc.entry.js → p-3f65d67b.entry.js} +1 -1
- package/dist/twilight/{p-4b6e6fb8.entry.js → p-4b837a59.entry.js} +1 -1
- package/dist/twilight/{p-083e5039.entry.js → p-52566485.entry.js} +1 -1
- package/dist/twilight/{p-ced32f4a.entry.js → p-53ff0bad.entry.js} +1 -1
- package/dist/twilight/{p-d9569632.entry.js → p-5afc64f0.entry.js} +1 -1
- package/dist/twilight/{p-0597375e.entry.js → p-5ee27511.entry.js} +1 -1
- package/dist/twilight/{p-3e5dbd96.entry.js → p-5f417c00.entry.js} +1 -1
- package/dist/twilight/{p-0831e5fc.entry.js → p-608cc0c1.entry.js} +1 -1
- package/dist/twilight/{p-0c174f16.entry.js → p-6bc527ce.entry.js} +1 -1
- package/dist/twilight/{p-078450b0.entry.js → p-6c3c2930.entry.js} +1 -1
- package/dist/twilight/{p-e59b3e07.entry.js → p-745a99a6.entry.js} +1 -1
- package/dist/twilight/{p-e58b7d20.entry.js → p-797fb657.entry.js} +1 -1
- package/dist/twilight/{p-12a6d03b.entry.js → p-81bc0869.entry.js} +1 -1
- package/dist/twilight/{p-5bd8ffe5.entry.js → p-85de11d2.entry.js} +1 -1
- package/dist/twilight/{p-3f52dc98.entry.js → p-8ad1aba2.entry.js} +1 -1
- package/dist/twilight/{p-68bcb0ba.entry.js → p-8d723a8b.entry.js} +1 -1
- package/dist/twilight/{p-631191d2.entry.js → p-8feebf4d.entry.js} +1 -1
- package/dist/twilight/{p-77f85461.entry.js → p-90e5db90.entry.js} +1 -1
- package/dist/twilight/{p-b73471d3.entry.js → p-939d986e.entry.js} +1 -1
- package/dist/twilight/{p-5b106fd4.entry.js → p-93f4a2b4.entry.js} +1 -1
- package/dist/twilight/{p-5eec5519.entry.js → p-94539039.entry.js} +1 -1
- package/dist/twilight/{p-567ba930.entry.js → p-9581bcc7.entry.js} +1 -1
- package/dist/twilight/{p-45708652.entry.js → p-9b3549cd.entry.js} +1 -1
- package/dist/twilight/{p-DIsyGRAw.js → p-B4668CGH.js} +1 -1
- package/dist/twilight/{p-B3k6Ab4H.js → p-BQ05LMoe.js} +1 -1
- package/dist/twilight/{p-DwV68ec-.js → p-BmFzQ6g-.js} +1 -1
- package/dist/twilight/{p-OK5pMKD1.js → p-BrqihLUh.js} +1 -1
- package/dist/twilight/{p-NBF3VaTJ.js → p-ByYVb96L.js} +1 -1
- package/dist/twilight/{p-KmhadCpx.js → p-CCQCS6cn.js} +1 -1
- package/dist/twilight/{p-xuGEmDhH.js → p-CI4TbxNl.js} +1 -1
- package/dist/twilight/{p-D0jpoyIT.js → p-DMcU-3GG.js} +1 -1
- package/dist/twilight/{p-DvcNoEfM.js → p-DwT-8WBr.js} +1 -1
- package/dist/twilight/{p-Cq8arVRH.js → p-Dz1v02Mc.js} +2 -2
- package/dist/twilight/{p-2dabb075.entry.js → p-a30cbec7.entry.js} +1 -1
- package/dist/twilight/{p-1ba82c7d.entry.js → p-abed2dbc.entry.js} +1 -1
- package/dist/twilight/{p-9c6752e6.entry.js → p-aca35083.entry.js} +1 -1
- package/dist/twilight/{p-d18400bb.entry.js → p-ad2a24ee.entry.js} +1 -1
- package/dist/twilight/{p-637168d2.entry.js → p-ad3e6082.entry.js} +1 -1
- package/dist/twilight/p-ad3ed8de.entry.js +4 -0
- package/dist/twilight/{p-b05ce2ee.entry.js → p-b0882f69.entry.js} +1 -1
- package/dist/twilight/{p-03718a72.entry.js → p-b0923292.entry.js} +1 -1
- package/dist/twilight/{p-2a511b8a.entry.js → p-b36b9c00.entry.js} +1 -1
- package/dist/twilight/{p-04e8106c.entry.js → p-b7aa5687.entry.js} +1 -1
- package/dist/twilight/{p-f42fa303.entry.js → p-b9064a54.entry.js} +1 -1
- package/dist/twilight/{p-e2ad8bc7.entry.js → p-b9fb7536.entry.js} +1 -1
- package/dist/twilight/{p-62c791c6.entry.js → p-bab4e280.entry.js} +1 -1
- package/dist/twilight/{p-eec8bdb1.entry.js → p-bd4140b1.entry.js} +1 -1
- package/dist/twilight/{p-d60ed03c.entry.js → p-bf500346.entry.js} +1 -1
- package/dist/twilight/{p-90afbf42.entry.js → p-c1ce3f7a.entry.js} +1 -1
- package/dist/twilight/{p-c05648b2.entry.js → p-c1e5b2f2.entry.js} +1 -1
- package/dist/twilight/{p-7bdb6aca.entry.js → p-c3c0ff5b.entry.js} +1 -1
- package/dist/twilight/{p-ebc0b840.entry.js → p-c7389707.entry.js} +1 -1
- package/dist/twilight/{p-1c53d114.entry.js → p-cbc8df12.entry.js} +1 -1
- package/dist/twilight/{p-fd7f2211.entry.js → p-d10bab5b.entry.js} +1 -1
- package/dist/twilight/{p-fadab0ac.entry.js → p-d65e45a0.entry.js} +1 -1
- package/dist/twilight/{p-ea80046d.entry.js → p-d7d262c3.entry.js} +1 -1
- package/dist/twilight/{p-33a52238.entry.js → p-da2f8e8b.entry.js} +1 -1
- package/dist/twilight/{p-b7e861b2.entry.js → p-da884485.entry.js} +1 -1
- package/dist/twilight/{p-5131149c.entry.js → p-db394617.entry.js} +1 -1
- package/dist/twilight/{p-2404e668.entry.js → p-dc2b82cb.entry.js} +1 -1
- package/dist/twilight/{p-afdddba9.entry.js → p-dd21610f.entry.js} +1 -1
- package/dist/twilight/{p-D-wessdE.js → p-dewEo579.js} +1 -1
- package/dist/twilight/{p-6073673e.entry.js → p-e1292b60.entry.js} +1 -1
- package/dist/twilight/{p-19ab0abc.entry.js → p-e3a7f1c8.entry.js} +1 -1
- package/dist/twilight/{p-9dc45b4d.entry.js → p-e7b5028b.entry.js} +1 -1
- package/dist/twilight/{p-baed03c3.entry.js → p-ec33a2ea.entry.js} +1 -1
- package/dist/twilight/{p-d44c5dcc.entry.js → p-ec8ddb7f.entry.js} +1 -1
- package/dist/twilight/{p-cd47fec2.entry.js → p-f0739410.entry.js} +1 -1
- package/dist/twilight/p-f39d6efd.entry.js +4 -0
- package/dist/twilight/{p-0adb148a.entry.js → p-f470779e.entry.js} +1 -1
- package/dist/twilight/{p-0bbf0061.entry.js → p-f4a6bf88.entry.js} +1 -1
- package/dist/twilight/{p-b0f25824.entry.js → p-f5019168.entry.js} +1 -1
- package/dist/twilight/{p-133aea32.entry.js → p-f59f94de.entry.js} +1 -1
- package/dist/twilight/{p-fa049325.entry.js → p-fc98c574.entry.js} +1 -1
- package/dist/twilight/{p-b44d2016.entry.js → p-fdf306f6.entry.js} +1 -1
- package/dist/twilight/p-ohGq8vKD.js +4 -0
- package/dist/twilight/twilight.esm.js +1 -1
- package/dist/types/components/salla-delivery-promise/delivery-promise-api.d.ts +1 -1
- package/dist/types/components/salla-delivery-promise/salla-delivery-promise.d.ts +6 -5
- package/dist/types/components/salla-multiple-bundle-product/components/salla-multiple-bundle-product-details.d.ts +20 -0
- package/dist/types/components/salla-multiple-bundle-product/components/salla-multiple-bundle-product-options-modal.d.ts +1 -0
- package/dist/types/components/salla-multiple-bundle-product/components/salla-multiple-bundle-product-slider.d.ts +9 -0
- package/dist/types/components/salla-multiple-bundle-product/interfaces.d.ts +1 -0
- package/dist/types/components/salla-tiered-offer/interfaces.d.ts +1 -0
- package/dist/types/components/salla-tiered-offer/salla-tiered-offer.d.ts +3 -0
- package/dist/types/components.d.ts +21 -0
- package/package.json +5 -5
- package/dist/twilight/p-4d21d259.entry.js +0 -4
- package/dist/twilight/p-COQaiMGv.js +0 -4
- package/dist/twilight/p-a0471050.entry.js +0 -4
- package/dist/twilight/p-b33c50dc.entry.js +0 -4
- package/dist/twilight/p-e4bb0633.entry.js +0 -4
- package/dist/twilight/p-eb53ef20.entry.js +0 -4
|
@@ -2,9 +2,10 @@
|
|
|
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$
|
|
6
|
-
import { d as defineCustomElement$
|
|
7
|
-
import { d as defineCustomElement$
|
|
5
|
+
import { d as defineCustomElement$6 } from './salla-button2.js';
|
|
6
|
+
import { d as defineCustomElement$5 } from './salla-loading2.js';
|
|
7
|
+
import { d as defineCustomElement$4 } from './salla-modal2.js';
|
|
8
|
+
import { d as defineCustomElement$3 } from './salla-searchable-dropdown2.js';
|
|
8
9
|
import { d as defineCustomElement$2 } from './salla-skeleton2.js';
|
|
9
10
|
|
|
10
11
|
const DEBUG_KEY = 'salla-delivery-promise-debug';
|
|
@@ -14,9 +15,10 @@ function log(message, data) {
|
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
/** Fetch available cities for a product's delivery promises. */
|
|
17
|
-
async function fetchCities(productId) {
|
|
18
|
-
log('fetchCities start', { productId });
|
|
19
|
-
const
|
|
18
|
+
async function fetchCities(productId, keyword) {
|
|
19
|
+
log('fetchCities start', { productId, keyword });
|
|
20
|
+
const queryString = keyword != null ? `?keyword=${encodeURIComponent(keyword)}` : '';
|
|
21
|
+
const response = await salla.api.request(salla.url.api(`products/${productId}/delivery-promises/cities${queryString}`));
|
|
20
22
|
if (!response.success || !Array.isArray(response.data) || response.data.length === 0) {
|
|
21
23
|
log('fetchCities: no data', { response });
|
|
22
24
|
return { cities: [] };
|
|
@@ -44,15 +46,6 @@ async function fetchDeliveryMessage(productId, id, optionType, isLoginCycleEnabl
|
|
|
44
46
|
return message || null;
|
|
45
47
|
}
|
|
46
48
|
|
|
47
|
-
/** Filters cities by Arabic/English name (used inside the city-change modal). */
|
|
48
|
-
function filterCitiesForModal(cities, query) {
|
|
49
|
-
const q = query.trim().toLowerCase();
|
|
50
|
-
if (!q) {
|
|
51
|
-
return [...cities];
|
|
52
|
-
}
|
|
53
|
-
return cities.filter(city => city.name.toLowerCase().includes(q) || (city.name_en || '').toLowerCase().includes(q));
|
|
54
|
-
}
|
|
55
|
-
|
|
56
49
|
const INTENT_KEY = 'bullet_delivery_intent';
|
|
57
50
|
function getIntentStorage() {
|
|
58
51
|
const rememberLastSession = Boolean(salla.config.get('store.settings.bullet_delivery.settings.remember_last_session'));
|
|
@@ -167,21 +160,24 @@ const SallaDeliveryPromise$1 = /*@__PURE__*/ proxyCustomElement(class SallaDeliv
|
|
|
167
160
|
this.selectedCity = null;
|
|
168
161
|
this.isLoadingCities = false;
|
|
169
162
|
// ── City-change modal state (non–login-cycle) ─────────────────────────
|
|
170
|
-
this.modalSearchQuery = '';
|
|
171
163
|
this.cityPendingSelection = null;
|
|
172
|
-
this.
|
|
164
|
+
this.modalCities = [];
|
|
165
|
+
this.isSearchingCities = false;
|
|
166
|
+
this.citySearchCounter = 0;
|
|
173
167
|
// ═══════════════════════════════════════════════════════════════════════
|
|
174
168
|
// Login-cycle (bullet delivery) integration
|
|
175
169
|
// ═══════════════════════════════════════════════════════════════════════
|
|
176
170
|
this.onBulletDeliveryConfirmed = () => {
|
|
177
171
|
this.applyBulletIntent();
|
|
178
172
|
};
|
|
179
|
-
this.
|
|
180
|
-
this.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
173
|
+
this.handleCitySearch = (keyword) => {
|
|
174
|
+
clearTimeout(this.citySearchTimer);
|
|
175
|
+
if (!keyword.trim()) {
|
|
176
|
+
this.modalCities = [...this.cities];
|
|
177
|
+
this.isSearchingCities = false;
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
this.citySearchTimer = setTimeout(() => this.searchCitiesRemote(keyword), 300);
|
|
185
181
|
};
|
|
186
182
|
// ═══════════════════════════════════════════════════════════════════════
|
|
187
183
|
// Header click (dispatches to correct flow)
|
|
@@ -290,7 +286,6 @@ const SallaDeliveryPromise$1 = /*@__PURE__*/ proxyCustomElement(class SallaDeliv
|
|
|
290
286
|
if (autoCity) {
|
|
291
287
|
log("delivery promise standard flow autoCity found", autoCity);
|
|
292
288
|
this.selectedCity = autoCity;
|
|
293
|
-
this.modalSearchQuery = getCityDisplayName(autoCity);
|
|
294
289
|
}
|
|
295
290
|
await this.loadDeliveryMessage(cityId, 'city');
|
|
296
291
|
}
|
|
@@ -329,14 +324,29 @@ const SallaDeliveryPromise$1 = /*@__PURE__*/ proxyCustomElement(class SallaDeliv
|
|
|
329
324
|
if (!this.cityModalRef)
|
|
330
325
|
return;
|
|
331
326
|
this.cityPendingSelection = null;
|
|
332
|
-
this.
|
|
327
|
+
this.modalCities = [...this.cities];
|
|
333
328
|
await this.cityModalRef.setTitle(this.labels.changeCityTitle);
|
|
334
329
|
await this.cityModalRef.open();
|
|
335
330
|
}
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
this.
|
|
339
|
-
|
|
331
|
+
async searchCitiesRemote(keyword) {
|
|
332
|
+
const requestId = ++this.citySearchCounter;
|
|
333
|
+
this.isSearchingCities = true;
|
|
334
|
+
try {
|
|
335
|
+
const { cities } = await fetchCities(this.productId, keyword);
|
|
336
|
+
if (requestId !== this.citySearchCounter)
|
|
337
|
+
return;
|
|
338
|
+
this.modalCities = cities;
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
if (requestId !== this.citySearchCounter)
|
|
342
|
+
return;
|
|
343
|
+
this.modalCities = [];
|
|
344
|
+
}
|
|
345
|
+
finally {
|
|
346
|
+
if (requestId === this.citySearchCounter) {
|
|
347
|
+
this.isSearchingCities = false;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
340
350
|
}
|
|
341
351
|
async handleConfirmCityModal() {
|
|
342
352
|
if (!this.cityPendingSelection) {
|
|
@@ -364,14 +374,11 @@ const SallaDeliveryPromise$1 = /*@__PURE__*/ proxyCustomElement(class SallaDeliv
|
|
|
364
374
|
return h("div", { class: "s-delivery-promise-message" }, this.deliveryMessage);
|
|
365
375
|
}
|
|
366
376
|
renderCityModalBody() {
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
}
|
|
372
|
-
e.stopPropagation();
|
|
373
|
-
this.handleModalSelectCity(city);
|
|
374
|
-
} }, 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)))))))));
|
|
377
|
+
return (h("div", { class: "s-delivery-promise-modal-body" }, h("salla-searchable-dropdown", { label: this.labels.cityFieldLabel, placeholder: this.labels.modalSearchPlaceholder, items: this.modalCities, selectedItem: this.cityPendingSelection, searching: this.isSearchingCities, required: true, noResultsText: this.labels.noResults, inputId: "s-delivery-promise-modal-search", onItemSelected: (e) => {
|
|
378
|
+
this.cityPendingSelection = e.detail;
|
|
379
|
+
}, onSearchInput: (e) => {
|
|
380
|
+
this.handleCitySearch(e.detail);
|
|
381
|
+
} })));
|
|
375
382
|
}
|
|
376
383
|
renderCityChangeModal() {
|
|
377
384
|
if (this.isLoginCycleEnabled)
|
|
@@ -406,15 +413,15 @@ const SallaDeliveryPromise$1 = /*@__PURE__*/ proxyCustomElement(class SallaDeliv
|
|
|
406
413
|
"cities": [32],
|
|
407
414
|
"selectedCity": [32],
|
|
408
415
|
"isLoadingCities": [32],
|
|
409
|
-
"modalSearchQuery": [32],
|
|
410
416
|
"cityPendingSelection": [32],
|
|
411
|
-
"
|
|
417
|
+
"modalCities": [32],
|
|
418
|
+
"isSearchingCities": [32]
|
|
412
419
|
}]);
|
|
413
420
|
function defineCustomElement$1() {
|
|
414
421
|
if (typeof customElements === "undefined") {
|
|
415
422
|
return;
|
|
416
423
|
}
|
|
417
|
-
const components = ["salla-delivery-promise", "salla-button", "salla-loading", "salla-modal", "salla-skeleton"];
|
|
424
|
+
const components = ["salla-delivery-promise", "salla-button", "salla-loading", "salla-modal", "salla-searchable-dropdown", "salla-skeleton"];
|
|
418
425
|
components.forEach(tagName => { switch (tagName) {
|
|
419
426
|
case "salla-delivery-promise":
|
|
420
427
|
if (!customElements.get(tagName)) {
|
|
@@ -423,15 +430,20 @@ function defineCustomElement$1() {
|
|
|
423
430
|
break;
|
|
424
431
|
case "salla-button":
|
|
425
432
|
if (!customElements.get(tagName)) {
|
|
426
|
-
defineCustomElement$
|
|
433
|
+
defineCustomElement$6();
|
|
427
434
|
}
|
|
428
435
|
break;
|
|
429
436
|
case "salla-loading":
|
|
430
437
|
if (!customElements.get(tagName)) {
|
|
431
|
-
defineCustomElement$
|
|
438
|
+
defineCustomElement$5();
|
|
432
439
|
}
|
|
433
440
|
break;
|
|
434
441
|
case "salla-modal":
|
|
442
|
+
if (!customElements.get(tagName)) {
|
|
443
|
+
defineCustomElement$4();
|
|
444
|
+
}
|
|
445
|
+
break;
|
|
446
|
+
case "salla-searchable-dropdown":
|
|
435
447
|
if (!customElements.get(tagName)) {
|
|
436
448
|
defineCustomElement$3();
|
|
437
449
|
}
|
|
@@ -35,22 +35,37 @@ const SallaMultipleBundleProductDetails = /*@__PURE__*/ proxyCustomElement(class
|
|
|
35
35
|
this.productSelectedHandler = null;
|
|
36
36
|
// handle selecting a product (toggle)
|
|
37
37
|
this.onSelectProduct = (sectionId, product) => {
|
|
38
|
+
const productId = product.id;
|
|
39
|
+
const wasSelected = this.selectedProducts[sectionId]?.has(productId) ?? false;
|
|
40
|
+
const section = this.sections.find(s => s.id == sectionId);
|
|
41
|
+
if (wasSelected && section && this.isProductSelectionLocked(section)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (!wasSelected) {
|
|
45
|
+
if (!section) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (this.getEffectiveMax(section) !== 1 && this.isAtSelectionLimit(section)) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
38
52
|
this.selectedProducts = {
|
|
39
53
|
...this.selectedProducts,
|
|
40
54
|
[sectionId]: new Set(this.selectedProducts[sectionId] || []),
|
|
41
55
|
};
|
|
42
|
-
const productId = product.id;
|
|
43
|
-
const wasSelected = this.selectedProducts[sectionId].has(productId);
|
|
44
56
|
if (wasSelected) {
|
|
45
|
-
// Product is being deselected
|
|
46
57
|
this.selectedProducts[sectionId].delete(productId);
|
|
47
|
-
// Clear form data and modal options for this product in this specific section
|
|
48
58
|
this.clearProductFormData(productId, sectionId);
|
|
49
59
|
this.clearProductModalOptions(productId, sectionId);
|
|
50
60
|
}
|
|
51
61
|
else {
|
|
52
|
-
|
|
53
|
-
|
|
62
|
+
const effectiveMax = this.getEffectiveMax(section);
|
|
63
|
+
if (effectiveMax === 1) {
|
|
64
|
+
this.syncSectionSelection(sectionId, productId);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this.selectedProducts[sectionId].add(productId);
|
|
68
|
+
}
|
|
54
69
|
}
|
|
55
70
|
// force re-render
|
|
56
71
|
this.selectedProducts = { ...this.selectedProducts };
|
|
@@ -70,31 +85,45 @@ const SallaMultipleBundleProductDetails = /*@__PURE__*/ proxyCustomElement(class
|
|
|
70
85
|
[sectionId]: new Set(this.selectedProducts[sectionId] || []),
|
|
71
86
|
};
|
|
72
87
|
const productId = product.id;
|
|
73
|
-
|
|
74
|
-
|
|
88
|
+
if (this.selectedProducts[sectionId].has(productId)) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const section = this.sections.find(s => s.id == sectionId);
|
|
92
|
+
if (!section) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const effectiveMax = this.getEffectiveMax(section);
|
|
96
|
+
if (effectiveMax === 1) {
|
|
97
|
+
this.syncSectionSelection(sectionId, productId);
|
|
98
|
+
}
|
|
99
|
+
else if (effectiveMax > 1 && this.isAtSelectionLimit(section)) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
75
103
|
this.selectedProducts[sectionId].add(productId);
|
|
76
|
-
// force re-render
|
|
77
|
-
this.selectedProducts = { ...this.selectedProducts };
|
|
78
|
-
// dispatch event
|
|
79
|
-
salla.event.dispatch('on-bundle-product-selected', {
|
|
80
|
-
id: product.id,
|
|
81
|
-
name: product.name,
|
|
82
|
-
options: product.options,
|
|
83
|
-
});
|
|
84
104
|
}
|
|
105
|
+
this.selectedProducts = { ...this.selectedProducts };
|
|
106
|
+
salla.event.dispatch('on-bundle-product-selected', {
|
|
107
|
+
id: product.id,
|
|
108
|
+
name: product.name,
|
|
109
|
+
options: product.options,
|
|
110
|
+
});
|
|
85
111
|
};
|
|
86
112
|
// open product options modal
|
|
87
113
|
this.onSelectProductOptions = (product, sectionId) => {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const
|
|
114
|
+
const section = this.sections.find(s => s.id == sectionId);
|
|
115
|
+
if (!section || !this.canSelectProductInSection(section, product.id)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const sectionIndex = this.sections.findIndex(s => s.id == sectionId);
|
|
119
|
+
const productIndex = section.products?.findIndex(p => p.id == product.id) ?? 0;
|
|
120
|
+
const isProductAlreadySelected = this.selectedProducts[sectionId]?.has(product.id) ?? false;
|
|
93
121
|
salla.event.dispatch('multiple-bundle-product-modal::open', {
|
|
94
122
|
product,
|
|
95
123
|
sectionId,
|
|
96
124
|
sectionIndex,
|
|
97
125
|
productIndex,
|
|
126
|
+
isProductAlreadySelected,
|
|
98
127
|
});
|
|
99
128
|
};
|
|
100
129
|
// Event handlers for bundle slider component
|
|
@@ -107,22 +136,164 @@ const SallaMultipleBundleProductDetails = /*@__PURE__*/ proxyCustomElement(class
|
|
|
107
136
|
this.onSelectProductOptions(product, sectionId);
|
|
108
137
|
};
|
|
109
138
|
}
|
|
139
|
+
isSingleProductSection(section) {
|
|
140
|
+
return (section.products?.length ?? 0) === 1;
|
|
141
|
+
}
|
|
142
|
+
getObligatoryMin(section) {
|
|
143
|
+
const min = section.obligatory_products;
|
|
144
|
+
if (min == null) {
|
|
145
|
+
return 0;
|
|
146
|
+
}
|
|
147
|
+
const numericMin = Number(min);
|
|
148
|
+
return Number.isNaN(numericMin) ? 0 : numericMin;
|
|
149
|
+
}
|
|
150
|
+
isProductSelectionLocked(section) {
|
|
151
|
+
return this.isSingleProductSection(section) && this.getObligatoryMin(section) === 1;
|
|
152
|
+
}
|
|
153
|
+
/** Empty max → cap is the number of products in the section. */
|
|
154
|
+
getEffectiveMax(section) {
|
|
155
|
+
const productCount = section.products?.length ?? 0;
|
|
156
|
+
const max = section.max_obligatory_products;
|
|
157
|
+
if (max != null && max > 0) {
|
|
158
|
+
return Math.min(max, productCount);
|
|
159
|
+
}
|
|
160
|
+
return productCount;
|
|
161
|
+
}
|
|
162
|
+
getSelectedCount(sectionId) {
|
|
163
|
+
return this.selectedProducts[sectionId]?.size ?? 0;
|
|
164
|
+
}
|
|
165
|
+
isAtSelectionLimit(section) {
|
|
166
|
+
return this.getSelectedCount(section.id) >= this.getEffectiveMax(section);
|
|
167
|
+
}
|
|
168
|
+
canSelectProductInSection(section, productId) {
|
|
169
|
+
if (this.selectedProducts[section.id]?.has(productId)) {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
if (this.getEffectiveMax(section) === 1) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
return !this.isAtSelectionLimit(section);
|
|
176
|
+
}
|
|
177
|
+
async canSelectBundleProduct(sectionId, productId) {
|
|
178
|
+
const section = this.sections.find(s => s.id == sectionId);
|
|
179
|
+
if (!section) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
return this.canSelectProductInSection(section, productId);
|
|
183
|
+
}
|
|
184
|
+
queryProductCheckbox(sectionId, productIndex) {
|
|
185
|
+
const selector = `input.s-multiple-bundle-product-checkbox[name="bundle[${sectionId}][${productIndex}][id]"]`;
|
|
186
|
+
const form = this.host.closest('form');
|
|
187
|
+
const fromForm = form?.querySelector(selector);
|
|
188
|
+
if (fromForm) {
|
|
189
|
+
return fromForm;
|
|
190
|
+
}
|
|
191
|
+
for (const slider of this.host.querySelectorAll('salla-multiple-bundle-product-slider')) {
|
|
192
|
+
const root = slider.shadowRoot ?? slider;
|
|
193
|
+
const input = root.querySelector(selector);
|
|
194
|
+
if (input) {
|
|
195
|
+
return input;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
dispatchBubblingChange(target) {
|
|
201
|
+
requestAnimationFrame(() => {
|
|
202
|
+
target.dispatchEvent(new window.Event('change', { bubbles: true }));
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/** Uncheck checkbox, remove form inputs, and reset modal state for one product slot. */
|
|
206
|
+
clearSectionProductSlot(sectionId, productId, productIndex) {
|
|
207
|
+
const checkbox = this.queryProductCheckbox(sectionId, productIndex);
|
|
208
|
+
if (checkbox) {
|
|
209
|
+
checkbox.checked = false;
|
|
210
|
+
}
|
|
211
|
+
const form = this.host.closest('form');
|
|
212
|
+
if (form) {
|
|
213
|
+
const slotPrefix = `bundle[${sectionId}][${productIndex}]`;
|
|
214
|
+
Array.from(form.querySelectorAll('input')).forEach((input) => {
|
|
215
|
+
const inSlot = input.name?.startsWith(slotPrefix) ?? false;
|
|
216
|
+
if (!inSlot) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (input.type === 'checkbox' && input.name?.endsWith('][id]')) {
|
|
220
|
+
input.checked = false;
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
input.remove();
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
this.clearProductModalOptions(productId, sectionId);
|
|
227
|
+
}
|
|
228
|
+
/** max=1: replace section selection and keep DOM/form in sync. */
|
|
229
|
+
syncSectionSelection(sectionId, productId) {
|
|
230
|
+
const section = this.sections.find(s => s.id == sectionId);
|
|
231
|
+
section?.products?.forEach((product, productIndex) => {
|
|
232
|
+
if (product.id != productId) {
|
|
233
|
+
this.clearSectionProductSlot(sectionId, product.id, productIndex);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
this.selectedProducts[sectionId] = new Set([productId]);
|
|
237
|
+
const selectedIndex = section?.products?.findIndex(p => p.id == productId) ?? -1;
|
|
238
|
+
const checkbox = selectedIndex >= 0 ? this.queryProductCheckbox(sectionId, selectedIndex) : null;
|
|
239
|
+
if (checkbox) {
|
|
240
|
+
checkbox.checked = true;
|
|
241
|
+
this.dispatchBubblingChange(checkbox);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
autoSelectSingleProductSections() {
|
|
245
|
+
if (!this.sections?.length) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const newSelectedProducts = { ...this.selectedProducts };
|
|
249
|
+
let updated = false;
|
|
250
|
+
const selectedEvents = [];
|
|
251
|
+
for (const section of this.sections) {
|
|
252
|
+
if (!this.isProductSelectionLocked(section)) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const product = section.products?.[0];
|
|
256
|
+
if (!product || (!product.unlimited_quantity && (product.quantity ?? 0) <= 0)) {
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
const sectionId = section.id;
|
|
260
|
+
const currentSet = new Set(newSelectedProducts[sectionId] || []);
|
|
261
|
+
if (currentSet.has(product.id)) {
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
currentSet.add(product.id);
|
|
265
|
+
newSelectedProducts[sectionId] = currentSet;
|
|
266
|
+
updated = true;
|
|
267
|
+
selectedEvents.push({ product });
|
|
268
|
+
}
|
|
269
|
+
if (!updated) {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
this.selectedProducts = newSelectedProducts;
|
|
273
|
+
selectedEvents.forEach(({ product }) => {
|
|
274
|
+
salla.event.dispatch('on-bundle-product-selected', {
|
|
275
|
+
id: product.id,
|
|
276
|
+
name: product.name,
|
|
277
|
+
options: product.options,
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
}
|
|
110
281
|
// Clear form data for a specific product in specific section
|
|
111
282
|
clearProductFormData(productId, sectionId) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
inputsToRemove.forEach(input => input.remove());
|
|
283
|
+
if (sectionId != null) {
|
|
284
|
+
const section = this.sections.find(s => s.id == sectionId);
|
|
285
|
+
const productIndex = section?.products?.findIndex(product => product.id == productId) ?? -1;
|
|
286
|
+
if (productIndex >= 0) {
|
|
287
|
+
this.clearSectionProductSlot(sectionId, productId, productIndex);
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
120
290
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
inputsToRemove.forEach(input => input.remove());
|
|
291
|
+
const form = this.host.closest('form');
|
|
292
|
+
if (!form) {
|
|
293
|
+
return;
|
|
125
294
|
}
|
|
295
|
+
const inputsToRemove = form.querySelectorAll(`[data-product-id="${productId}"]`);
|
|
296
|
+
inputsToRemove.forEach(input => input.remove());
|
|
126
297
|
}
|
|
127
298
|
// Clear modal options state for a specific product
|
|
128
299
|
clearProductModalOptions(productId, sectionId) {
|
|
@@ -146,10 +317,42 @@ const SallaMultipleBundleProductDetails = /*@__PURE__*/ proxyCustomElement(class
|
|
|
146
317
|
productIndex,
|
|
147
318
|
});
|
|
148
319
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
320
|
+
getProgressStatus(section) {
|
|
321
|
+
const selectedCount = this.getSelectedCount(section.id);
|
|
322
|
+
const effectiveMax = this.getEffectiveMax(section);
|
|
323
|
+
if (effectiveMax > 0) {
|
|
324
|
+
return `${selectedCount}/${effectiveMax}`;
|
|
325
|
+
}
|
|
326
|
+
return '0';
|
|
327
|
+
}
|
|
328
|
+
getSectionSelectionNote(section) {
|
|
329
|
+
const min = this.getObligatoryMin(section);
|
|
330
|
+
const max = Number(section.max_obligatory_products) || 0;
|
|
331
|
+
const hasMin = min > 0;
|
|
332
|
+
const hasMax = max > 0;
|
|
333
|
+
if (!hasMin && !hasMax) {
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
if (hasMin && hasMax) {
|
|
337
|
+
if (min === max) {
|
|
338
|
+
return salla.lang.getWithDefault('pages.products.bundle_select_exact', `اختر ${min} منتجات`, { count: min });
|
|
339
|
+
}
|
|
340
|
+
return salla.lang.getWithDefault('pages.products.bundle_select_range', `اختر من ${min} إلى ${max} منتجات`, { min, max });
|
|
341
|
+
}
|
|
342
|
+
if (hasMin) {
|
|
343
|
+
return salla.lang.getWithDefault('pages.products.bundle_select_min', `اختر على الأقل ${min} منتجات`, { min });
|
|
344
|
+
}
|
|
345
|
+
return salla.lang.getWithDefault('pages.products.bundle_select_max', `اختر حتى ${max} منتجات`, { max });
|
|
346
|
+
}
|
|
347
|
+
handleSectionsChange() {
|
|
348
|
+
this.autoSelectSingleProductSections();
|
|
349
|
+
}
|
|
350
|
+
componentWillLoad() {
|
|
351
|
+
this.autoSelectSingleProductSections();
|
|
352
|
+
}
|
|
353
|
+
renderAccordionHeader(section) {
|
|
354
|
+
const selectionNote = this.getSectionSelectionNote(section);
|
|
355
|
+
return (h(Fragment, null, h("h2", { slot: "title" }, section?.name), selectionNote ? h("span", { slot: "note" }, selectionNote) : null, h("span", { slot: "progress" }, this.getProgressStatus(section))));
|
|
153
356
|
}
|
|
154
357
|
componentDidLoad() {
|
|
155
358
|
// Listen for product selected event from modal
|
|
@@ -180,16 +383,21 @@ const SallaMultipleBundleProductDetails = /*@__PURE__*/ proxyCustomElement(class
|
|
|
180
383
|
}
|
|
181
384
|
}
|
|
182
385
|
render() {
|
|
183
|
-
return (h(Host, { key: '
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
})), h("salla-multiple-bundle-product-options-modal", { key: '6627ee4f67bcd775b16e470dd4735848e6087fd4' })));
|
|
386
|
+
return (h(Host, { key: '74b123c432e77263cf0ddcf20ab742885c54d5f4', class: "s-multiple-bundle-product-wrapper" }, h("div", { key: '24bef0958a2a7d29bb4485eac08c7e6b8614a00d', class: "s-multiple-bundle-product-wrapper-sections" }, this.sections.map((section, index) => {
|
|
387
|
+
return (h("salla-accordion", { key: section.id, collapsed: index === 0 ? false : true }, h("salla-accordion-head", null, this.renderAccordionHeader(section)), h("salla-accordion-body", null, h("salla-multiple-bundle-product-slider", { section: section, sectionIndex: index, selectedProducts: this.selectedProducts, selectionLimit: this.getEffectiveMax(section), isSelectionLocked: this.isProductSelectionLocked(section), onProductSelected: this.handleBundleSliderProductSelected, onProductOptionsSelected: this.handleBundleSliderProductOptionsSelected }))));
|
|
388
|
+
})), h("salla-multiple-bundle-product-options-modal", { key: '556b4e51a4b79dfc00371a07296556fb74111524' })));
|
|
187
389
|
}
|
|
188
390
|
get host() { return this; }
|
|
391
|
+
static get watchers() { return {
|
|
392
|
+
"sections": ["handleSectionsChange"]
|
|
393
|
+
}; }
|
|
189
394
|
static get style() { return sallaMultipleBundleProductDetailsCss; }
|
|
190
395
|
}, [0, "salla-multiple-bundle-product-details", {
|
|
191
396
|
"sections": [16],
|
|
192
|
-
"selectedProducts": [32]
|
|
397
|
+
"selectedProducts": [32],
|
|
398
|
+
"canSelectBundleProduct": [64]
|
|
399
|
+
}, undefined, {
|
|
400
|
+
"sections": ["handleSectionsChange"]
|
|
193
401
|
}]);
|
|
194
402
|
function defineCustomElement() {
|
|
195
403
|
if (typeof customElements === "undefined") {
|
|
@@ -34,6 +34,7 @@ const SallaMultipleBundleProductOptionsModal = /*@__PURE__*/ proxyCustomElement(
|
|
|
34
34
|
this.isLoading = false;
|
|
35
35
|
this.hasUnsavedChanges = false;
|
|
36
36
|
this.validationErrors = [];
|
|
37
|
+
this.isProductAlreadySelected = false;
|
|
37
38
|
}
|
|
38
39
|
/**
|
|
39
40
|
* Generate a unique cache key for selected options using section ID, product index, and product ID
|
|
@@ -95,6 +96,7 @@ const SallaMultipleBundleProductOptionsModal = /*@__PURE__*/ proxyCustomElement(
|
|
|
95
96
|
this.sectionId = data.sectionId || null;
|
|
96
97
|
this.sectionIndex = data.sectionIndex || 0;
|
|
97
98
|
this.productIndex = data.productIndex || 0;
|
|
99
|
+
this.isProductAlreadySelected = !!data.isProductAlreadySelected;
|
|
98
100
|
this.open();
|
|
99
101
|
};
|
|
100
102
|
salla.event.on('multiple-bundle-product-modal::open', this.modalOpenListener);
|
|
@@ -125,6 +127,10 @@ const SallaMultipleBundleProductOptionsModal = /*@__PURE__*/ proxyCustomElement(
|
|
|
125
127
|
// Extract section info from the checkbox name: bundle[sectionId][productIndex][id]
|
|
126
128
|
const nameMatch = target.name.match(/^bundle\[([^\]]+)\]\[([^\]]+)\]\[id\]$/);
|
|
127
129
|
if (nameMatch && !target.checked) {
|
|
130
|
+
if (target.getAttribute('data-selection-locked') === 'true') {
|
|
131
|
+
target.checked = true;
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
128
134
|
const [, sectionId, productIndex] = nameMatch;
|
|
129
135
|
const productId = target.value;
|
|
130
136
|
const form = this.host.closest('form');
|
|
@@ -363,6 +369,14 @@ const SallaMultipleBundleProductOptionsModal = /*@__PURE__*/ proxyCustomElement(
|
|
|
363
369
|
salla.notify.error(this.validationErrors.join(', '));
|
|
364
370
|
return;
|
|
365
371
|
}
|
|
372
|
+
if (!this.isProductAlreadySelected && this.sectionId != null) {
|
|
373
|
+
const details = this.host.closest('salla-multiple-bundle-product-details');
|
|
374
|
+
const canSelect = await details?.canSelectBundleProduct(this.sectionId, productId);
|
|
375
|
+
if (!canSelect) {
|
|
376
|
+
salla.notify.error(salla.lang.getWithDefault('pages.products.bundle_selection_limit_reached', 'لا يمكنك اختيار المزيد من المنتجات في هذا القسم'));
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
366
380
|
this.isLoading = true;
|
|
367
381
|
try {
|
|
368
382
|
// please don't change this with this.host.querySelector it will return null
|
|
@@ -479,7 +493,7 @@ const SallaMultipleBundleProductOptionsModal = /*@__PURE__*/ proxyCustomElement(
|
|
|
479
493
|
const cacheKey = this.generateCacheKey(this.sectionId, this.productIndex, productId);
|
|
480
494
|
const resetToken = this.optionsResetTokens[cacheKey] || 0;
|
|
481
495
|
const isDisabled = this.isLoading || optionsWithSelectedState.some(opt => opt.details.some(d => d.is_selected && d.is_out === true));
|
|
482
|
-
return (h(Host, { key: '
|
|
496
|
+
return (h(Host, { key: '6c1d1d3911867e30240676f3e2b7353e9ecf76c3' }, h("salla-modal", { key: 'b02110d80cd422d64962d78812ae0b0637c56237', isLoading: this.isLoading, ref: el => (this.modal = el), width: "md", centered: false, id: `s-multiple-bundle-product-options-modal-options-${productId}`, class: "s-multiple-bundle-product-options-modal-wrapper" }, h("div", { key: '20a52bbc732c6edfffde86577e99bbe300a1a4c8', slot: "loading" }, h("salla-skeleton", { key: '3a69fc75939d8b8f8639983d0f2f8dd8bf961152', height: "100%", width: "100%" })), this.product?.images && this.product?.images.length > 0 && (h("salla-slider", { key: '185639c54f79188093df98ac1cece1958879f71d', id: `details-slider-${this.product?.id}`, type: "thumbs", loop: false, "auto-height": true, "listen-to-thumbnails-option": true, showThumbsControls: false, controlsOuter: false, showControls: false, class: "s-multiple-bundle-product-options-modal-slider", verticalThumbs: true, thumbsConfig: {
|
|
483
497
|
centeredSlides: true,
|
|
484
498
|
centeredSlidesBounds: true,
|
|
485
499
|
slidesPerView: Math.min(5, Math.max(1, this.product?.images.length)),
|
|
@@ -487,13 +501,13 @@ const SallaMultipleBundleProductOptionsModal = /*@__PURE__*/ proxyCustomElement(
|
|
|
487
501
|
watchSlidesProgress: true,
|
|
488
502
|
direction: 'vertical',
|
|
489
503
|
spaceBetween: 10,
|
|
490
|
-
} }, h("div", { key: '
|
|
504
|
+
} }, h("div", { key: '3b6a88fe3862870d674dadc31967df6cc8fac365', slot: "items" }, this.product?.images &&
|
|
491
505
|
this.product?.images.map((image, index) => (h("div", { key: index, class: "swiper-slide" }, h("img", { src: image.url, alt: image.alt || `${this.product?.name} - Image ${index + 1}`, loading: "lazy", onError: e => {
|
|
492
506
|
e.target.style.display = 'none';
|
|
493
|
-
} }))))), this.product?.images && this.product?.images.length > 1 && (h("div", { key: '
|
|
507
|
+
} }))))), this.product?.images && this.product?.images.length > 1 && (h("div", { key: '6fce48b5b035cc61866aaf6c339866fa2314be87', slot: "thumbs" }, this.product?.images &&
|
|
494
508
|
this.product?.images.map((image, index) => (h("div", { key: index, "data-caption": `${this.product?.name} - Image ${index + 1}` }, h("img", { src: image.url, loading: "eager", class: "s-multiple-bundle-product-options-modal-slider-thumb", title: `${this.product?.name} - ${index + 1}`, alt: image.alt || `${this.product?.name} - ${index + 1}`, onError: e => {
|
|
495
509
|
e.target.style.display = 'none';
|
|
496
|
-
} })))))))), h("salla-product-options", { options: JSON.stringify(optionsWithSelectedState), key: `${cacheKey}-reset-${resetToken}`, "product-id": productId, "unique-key": `${cacheKey}-reset-${resetToken}` }), h("div", { key: '
|
|
510
|
+
} })))))))), h("salla-product-options", { options: JSON.stringify(optionsWithSelectedState), key: `${cacheKey}-reset-${resetToken}`, "product-id": productId, "unique-key": `${cacheKey}-reset-${resetToken}` }), h("div", { key: '3d555ea40fe5d9f3685fc6dafa4b6fad16732091', slot: "footer" }, h("div", { key: '1b4c6834899efbd09f3ea1db251999f50ec655b2', class: "s-multiple-bundle-product-options-modal-footer" }, h("salla-button", { key: '0818a75a444cca510c7f0cfea2ec53414c12db53', onClick: e => this.onSave(e), loading: this.isLoading, disabled: isDisabled }, this.isLoading
|
|
497
511
|
? salla.lang.get('common.elements.saving')
|
|
498
512
|
: salla.lang.get('common.elements.save')))))));
|
|
499
513
|
}
|