@salla.sa/twilight-components 2.14.467 → 2.14.468
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-Li5IcLEr.js → filepond-C1SAyrFq.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-poster-CXgEvsrj.js → filepond-plugin-file-poster-DAhQ7rGa.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-validate-size-DISjKBXN.js → filepond-plugin-file-validate-size-qfwxpApK.js} +1 -1
- package/dist/cjs/{filepond-plugin-file-validate-type-BeDqb2RU.js → filepond-plugin-file-validate-type-BbYanfPf.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-edit-CTKgasCY.js → filepond-plugin-image-edit-lWdFhMNt.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-exif-orientation-BqvyVbfM.js → filepond-plugin-image-exif-orientation-C2wUYBSb.js} +1 -1
- package/dist/cjs/{filepond-plugin-image-preview-DfX-wD-s.js → filepond-plugin-image-preview-B1ukjrjT.js} +1 -1
- package/dist/cjs/{functions-DXNacMtu.js → functions-DCSgyun2.js} +1 -1
- package/dist/cjs/{index-JuURs8Nc.js → index-CXr_39D8.js} +9 -5
- package/dist/cjs/{index-2n84VIdz.js → index-D3oJJZKW.js} +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{mail-Bgvt2hc9.js → mail-C9D8MHae.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 +29 -84
- 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 +11 -11
- package/dist/cjs/salla-bullet-delivery_2.cjs.entry.js +91 -7
- 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 +3 -3
- 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 +1 -1
- 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 +63 -28
- 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 +32 -2
- package/dist/cjs/salla-loyalty-banner.cjs.entry.js +2 -2
- package/dist/cjs/salla-loyalty-hero_2.cjs.entry.js +4 -4
- 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-points-history.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 +1 -1
- package/dist/cjs/salla-multiple-bundle-product-options-modal_2.cjs.entry.js +1 -1
- 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-branch.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 +1 -1
- 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 +259 -64
- package/dist/cjs/salla-progress-bar.cjs.entry.js +1 -1
- package/dist/cjs/salla-quick-order.cjs.entry.js +3 -3
- package/dist/cjs/salla-rating-modal.cjs.entry.js +3 -3
- 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 +252 -32
- package/dist/cjs/salla-social.cjs.entry.js +1 -1
- package/dist/cjs/salla-tab-content_3.cjs.entry.js +4 -4
- package/dist/cjs/salla-tiered-offer.cjs.entry.js +1 -1
- package/dist/cjs/salla-tooltip.cjs.entry.js +2 -2
- 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 +2 -2
- package/dist/cjs/salla-verify.cjs.entry.js +3 -3
- package/dist/cjs/salla-wallet.cjs.entry.js +1 -1
- package/dist/cjs/salla-wishlist-actions.cjs.entry.js +329 -0
- package/dist/cjs/{tracked-promise-BdbqBT_O.js → tracked-promise-BsYRgTGD.js} +1 -1
- package/dist/cjs/twilight.cjs.js +2 -2
- package/dist/cjs/{vanilla-picker-Cj5ogibZ.js → vanilla-picker-DkdzTjSC.js} +1 -1
- package/dist/collection/collection-manifest.json +2 -1
- package/dist/collection/components/salla-bullet-delivery/salla-bullet-delivery.js +90 -6
- package/dist/collection/components/salla-gifting/salla-gifting.js +69 -29
- package/dist/collection/components/salla-login-modal/salla-login-modal.js +31 -1
- package/dist/collection/components/salla-product-options/salla-product-options.css +0 -3
- package/dist/collection/components/salla-product-options/salla-product-options.js +28 -84
- package/dist/collection/components/salla-products-list/salla-products-list.css +76 -0
- package/dist/collection/components/salla-products-list/salla-products-list.js +387 -65
- package/dist/collection/components/salla-social-share/salla-social-share.css +161 -0
- package/dist/collection/components/salla-social-share/salla-social-share.js +316 -50
- package/dist/collection/components/salla-tabs/salla-tab-content.js +1 -1
- package/dist/collection/components/salla-tabs/salla-tab-header.js +1 -1
- package/dist/collection/components/salla-tabs/salla-tabs.js +1 -1
- package/dist/collection/components/salla-tel-input/salla-tel-input.js +1 -1
- package/dist/collection/components/salla-tooltip/salla-tooltip.js +1 -1
- package/dist/collection/components/salla-user-settings/salla-user-settings.js +1 -1
- package/dist/collection/components/salla-wishlist-actions/salla-wishlist-actions.css +65 -0
- package/dist/collection/components/salla-wishlist-actions/salla-wishlist-actions.js +432 -0
- package/dist/components/index.js +5 -5
- package/dist/components/salla-bullet-delivery.js +90 -6
- package/dist/components/salla-gifting.js +63 -27
- package/dist/components/salla-login-modal2.js +31 -1
- package/dist/components/salla-product-options2.js +28 -84
- package/dist/components/salla-products-list2.js +266 -64
- package/dist/components/salla-social-share.js +1 -189
- package/dist/components/salla-social-share2.js +420 -0
- package/dist/components/salla-tab-content2.js +1 -1
- package/dist/components/salla-tab-header2.js +1 -1
- package/dist/components/salla-tabs2.js +1 -1
- package/dist/components/salla-tel-input2.js +1 -1
- package/dist/components/salla-tooltip2.js +1 -1
- package/dist/components/salla-user-settings.js +1 -1
- package/dist/components/salla-wishlist-actions.d.ts +11 -0
- package/dist/components/salla-wishlist-actions.js +375 -0
- package/dist/esm/{filepond-Cpf2HNH9.js → filepond-C4pZr9nR.js} +1 -1
- package/dist/esm/{filepond-plugin-file-poster-CVurRtjC.js → filepond-plugin-file-poster-CXpAGxT4.js} +1 -1
- package/dist/esm/{filepond-plugin-file-validate-size-Dw2xFbfx.js → filepond-plugin-file-validate-size-Dk4M6ge1.js} +1 -1
- package/dist/esm/{filepond-plugin-file-validate-type-D6seJVa2.js → filepond-plugin-file-validate-type-DD7qvRsg.js} +1 -1
- package/dist/esm/{filepond-plugin-image-edit-CBikW78V.js → filepond-plugin-image-edit-DMllAEkg.js} +1 -1
- package/dist/esm/{filepond-plugin-image-exif-orientation-5yNhe9TO.js → filepond-plugin-image-exif-orientation-BRCbcu_E.js} +1 -1
- package/dist/esm/{filepond-plugin-image-preview-PlAAXB7f.js → filepond-plugin-image-preview-DgeylrwN.js} +1 -1
- package/dist/esm/{functions-Egzz8fEM.js → functions-DrS7by6t.js} +1 -1
- package/dist/esm/{index-Do4FV1UZ.js → index-9SnsJoYO.js} +1 -1
- package/dist/esm/{index-a4x9urdK.js → index-D2yBy7Jh.js} +9 -5
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{mail-DLNIOD9t.js → mail-DzAIgzdz.js} +2 -2
- 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 +29 -84
- 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 +11 -11
- package/dist/esm/salla-bullet-delivery_2.entry.js +91 -7
- 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 +3 -3
- 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 +1 -1
- 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 +63 -28
- 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 +32 -2
- package/dist/esm/salla-loyalty-banner.entry.js +2 -2
- package/dist/esm/salla-loyalty-hero_2.entry.js +4 -4
- 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-points-history.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 +1 -1
- package/dist/esm/salla-multiple-bundle-product-options-modal_2.entry.js +1 -1
- 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-branch.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 +1 -1
- 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 +259 -64
- package/dist/esm/salla-progress-bar.entry.js +1 -1
- package/dist/esm/salla-quick-order.entry.js +3 -3
- package/dist/esm/salla-rating-modal.entry.js +3 -3
- 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 +252 -32
- package/dist/esm/salla-social.entry.js +1 -1
- package/dist/esm/salla-tab-content_3.entry.js +4 -4
- package/dist/esm/salla-tiered-offer.entry.js +1 -1
- package/dist/esm/salla-tooltip.entry.js +2 -2
- 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 +2 -2
- package/dist/esm/salla-verify.entry.js +3 -3
- package/dist/esm/salla-wallet.entry.js +1 -1
- package/dist/esm/salla-wishlist-actions.entry.js +327 -0
- package/dist/esm/{tracked-promise-BX5clCDX.js → tracked-promise-CTcAqNfZ.js} +1 -1
- package/dist/esm/twilight.js +3 -3
- package/dist/esm/{vanilla-picker-DB0pDHa7.js → vanilla-picker-DfeK45Yv.js} +1 -1
- package/dist/twilight/{p-61b1fd3b.entry.js → p-07af3286.entry.js} +1 -1
- package/dist/twilight/{p-ee605cef.entry.js → p-08337b2b.entry.js} +1 -1
- package/dist/twilight/{p-74a61155.entry.js → p-08771dff.entry.js} +1 -1
- package/dist/twilight/{p-13a033fa.entry.js → p-0e1bab4f.entry.js} +1 -1
- package/dist/twilight/{p-b0bf7a5b.entry.js → p-0eadca17.entry.js} +1 -1
- package/dist/twilight/{p-92b02f3c.entry.js → p-12ccc1ab.entry.js} +1 -1
- package/dist/twilight/{p-52fe97c8.entry.js → p-1574176e.entry.js} +1 -1
- package/dist/twilight/{p-0957f323.entry.js → p-17015f9c.entry.js} +1 -1
- package/dist/twilight/{p-b8ab7da8.entry.js → p-1920b702.entry.js} +1 -1
- package/dist/twilight/{p-91363b7e.entry.js → p-1a1cebfa.entry.js} +1 -1
- package/dist/twilight/{p-1130d4b7.entry.js → p-1a844fda.entry.js} +1 -1
- package/dist/twilight/{p-42a0b54a.entry.js → p-1b7ebf47.entry.js} +1 -1
- package/dist/twilight/{p-e726123e.entry.js → p-223d7ceb.entry.js} +1 -1
- package/dist/twilight/{p-ff270706.entry.js → p-255f5d2a.entry.js} +1 -1
- package/dist/twilight/{p-0da78d4e.entry.js → p-266f57de.entry.js} +1 -1
- package/dist/twilight/p-28bdf8ec.entry.js +4 -0
- package/dist/twilight/{p-fbfacb11.entry.js → p-2c7086ec.entry.js} +1 -1
- package/dist/twilight/{p-d33203b7.entry.js → p-2c7f524a.entry.js} +1 -1
- package/dist/twilight/{p-c60c302f.entry.js → p-30ea9a82.entry.js} +1 -1
- package/dist/twilight/{p-b80adb19.entry.js → p-313d38cd.entry.js} +1 -1
- package/dist/twilight/{p-241bd42e.entry.js → p-315ce27b.entry.js} +1 -1
- package/dist/twilight/p-378d45e2.entry.js +4 -0
- package/dist/twilight/p-3c2fe8cd.entry.js +4 -0
- package/dist/twilight/{p-d905fbca.entry.js → p-3d1e7982.entry.js} +1 -1
- package/dist/twilight/{p-a068fff4.entry.js → p-3d7c0ac6.entry.js} +1 -1
- package/dist/twilight/{p-c0380d40.entry.js → p-3d8d289e.entry.js} +1 -1
- package/dist/twilight/{p-f6bb956c.entry.js → p-4144c908.entry.js} +1 -1
- package/dist/twilight/{p-5b365561.entry.js → p-453a7bb2.entry.js} +1 -1
- package/dist/twilight/{p-6d87b134.entry.js → p-4c457ba5.entry.js} +1 -1
- package/dist/twilight/{p-735fafef.entry.js → p-4d3bcacd.entry.js} +1 -1
- package/dist/twilight/{p-d9d4ea5b.entry.js → p-4dedb514.entry.js} +1 -1
- package/dist/twilight/{p-0b169d4e.entry.js → p-50dfec0a.entry.js} +1 -1
- package/dist/twilight/{p-1ce817c2.entry.js → p-53f83426.entry.js} +1 -1
- package/dist/twilight/{p-afcb0117.entry.js → p-54e9ac89.entry.js} +1 -1
- package/dist/twilight/{p-35ac1fc9.entry.js → p-571b8e00.entry.js} +1 -1
- package/dist/twilight/{p-9dc0fec4.entry.js → p-5a5057a8.entry.js} +1 -1
- package/dist/twilight/{p-ec073354.entry.js → p-5a9b94f8.entry.js} +1 -1
- package/dist/twilight/{p-9b639078.entry.js → p-5c1c520a.entry.js} +1 -1
- package/dist/twilight/{p-f170aff7.entry.js → p-5d06fe77.entry.js} +1 -1
- package/dist/twilight/{p-ec5ae058.entry.js → p-5e433652.entry.js} +1 -1
- package/dist/twilight/{p-b0ed6a9f.entry.js → p-6046666d.entry.js} +1 -1
- package/dist/twilight/{p-10e0936d.entry.js → p-67e23040.entry.js} +1 -1
- package/dist/twilight/{p-fa039238.entry.js → p-6c777951.entry.js} +1 -1
- package/dist/twilight/{p-53cbb271.entry.js → p-749dbf27.entry.js} +1 -1
- package/dist/twilight/p-7bd464f3.entry.js +4 -0
- package/dist/twilight/{p-c8fd03c0.entry.js → p-7ffc1711.entry.js} +1 -1
- package/dist/twilight/{p-89f11893.entry.js → p-83b6c374.entry.js} +1 -1
- package/dist/twilight/{p-bfbf8121.entry.js → p-8b5d26d3.entry.js} +1 -1
- package/dist/twilight/{p-92f3ea44.entry.js → p-9a0514dd.entry.js} +1 -1
- package/dist/twilight/{p-f5135cb5.entry.js → p-9ba953ab.entry.js} +1 -1
- package/dist/twilight/{p-BVqg7xd9.js → p-BGpAIcg-.js} +1 -1
- package/dist/twilight/{p-fCaOxwGH.js → p-BHkz1ssL.js} +1 -1
- package/dist/twilight/{p-CsMnvJkR.js → p-BZhp8a87.js} +1 -1
- package/dist/twilight/p-Bo1nXenO.js +4 -0
- package/dist/twilight/{p-D9ni3BuG.js → p-BojnM4VS.js} +1 -1
- package/dist/twilight/{p-B7KW0zhB.js → p-CBU9I-zy.js} +1 -1
- package/dist/twilight/{p-pOgjUtf9.js → p-CGd7EQZr.js} +1 -1
- package/dist/twilight/{p-EPfEwqOC.js → p-D01LipFK.js} +1 -1
- package/dist/twilight/{p-a4x9urdK.js → p-D2yBy7Jh.js} +2 -2
- package/dist/twilight/{p-DiWHgCMH.js → p-DSgSJMud.js} +1 -1
- package/dist/twilight/{p-DLNIOD9t.js → p-DzAIgzdz.js} +1 -1
- package/dist/twilight/{p-fe506679.entry.js → p-a0d88c4d.entry.js} +1 -1
- package/dist/twilight/{p-f684d7bf.entry.js → p-a2b53a52.entry.js} +1 -1
- package/dist/twilight/{p-78020271.entry.js → p-a3e1fafc.entry.js} +1 -1
- package/dist/twilight/{p-fdde8399.entry.js → p-a463d567.entry.js} +1 -1
- package/dist/twilight/{p-ba1199ba.entry.js → p-a6a9e398.entry.js} +1 -1
- package/dist/twilight/{p-0405f5e8.entry.js → p-a79f60e6.entry.js} +1 -1
- package/dist/twilight/{p-0bdf58a4.entry.js → p-aadfd70e.entry.js} +1 -1
- package/dist/twilight/{p-ad19661d.entry.js → p-ad0a27e2.entry.js} +1 -1
- package/dist/twilight/{p-e90d18b2.entry.js → p-ae8bd2e7.entry.js} +1 -1
- package/dist/twilight/{p-d17596ff.entry.js → p-af121bbf.entry.js} +1 -1
- package/dist/twilight/p-b0f28806.entry.js +4 -0
- package/dist/twilight/{p-0b1970c2.entry.js → p-b3f6b725.entry.js} +1 -1
- package/dist/twilight/{p-1a37b959.entry.js → p-b7e720e8.entry.js} +1 -1
- package/dist/twilight/{p-a53d5944.entry.js → p-b80016c8.entry.js} +1 -1
- package/dist/twilight/{p-635347c9.entry.js → p-c0f40eea.entry.js} +1 -1
- package/dist/twilight/p-c4bc10c1.entry.js +4 -0
- package/dist/twilight/p-c637b6bb.entry.js +4 -0
- package/dist/twilight/{p-127ee640.entry.js → p-c6e18746.entry.js} +1 -1
- package/dist/twilight/{p-5803c158.entry.js → p-cb855cb3.entry.js} +1 -1
- package/dist/twilight/{p-4d393389.entry.js → p-cbc44b3e.entry.js} +1 -1
- package/dist/twilight/{p-6d47892b.entry.js → p-cbf547f0.entry.js} +1 -1
- package/dist/twilight/{p-e27363dd.entry.js → p-cebad615.entry.js} +1 -1
- package/dist/twilight/{p-316135f8.entry.js → p-cfd910a8.entry.js} +1 -1
- package/dist/twilight/{p-d0340e11.entry.js → p-d0a8b9be.entry.js} +1 -1
- package/dist/twilight/{p-59f7f014.entry.js → p-d0cae7da.entry.js} +1 -1
- package/dist/twilight/{p-03d13b9f.entry.js → p-d861eea6.entry.js} +1 -1
- package/dist/twilight/p-daa9c0b3.entry.js +4 -0
- package/dist/twilight/{p-59f815bc.entry.js → p-db43fa93.entry.js} +1 -1
- package/dist/twilight/{p-e1205d19.entry.js → p-e06a7e19.entry.js} +1 -1
- package/dist/twilight/{p-0c748664.entry.js → p-e34f68e0.entry.js} +1 -1
- package/dist/twilight/{p-08b2c781.entry.js → p-e4cac2a9.entry.js} +1 -1
- package/dist/twilight/{p-056400a1.entry.js → p-e5de1833.entry.js} +1 -1
- package/dist/twilight/{p-fa1cc092.entry.js → p-e80ee5b0.entry.js} +6 -6
- package/dist/twilight/{p-16bcc5ab.entry.js → p-e8ffc069.entry.js} +1 -1
- package/dist/twilight/{p-2bcfb4f3.entry.js → p-ee8c7a5a.entry.js} +1 -1
- package/dist/twilight/p-f0dedf42.entry.js +4 -0
- package/dist/twilight/{p-37457147.entry.js → p-f3a01895.entry.js} +1 -1
- package/dist/twilight/{p-ef8fb222.entry.js → p-fb56a444.entry.js} +1 -1
- package/dist/twilight/{p-e8a82952.entry.js → p-fe1bced4.entry.js} +1 -1
- package/dist/twilight/{p-DSBkBAFI.js → p-paiaALkJ.js} +1 -1
- package/dist/twilight/{p-CkA6UKAD.js → p-xz8gqXL9.js} +1 -1
- package/dist/twilight/twilight.esm.js +1 -1
- package/dist/types/components/salla-bullet-delivery/salla-bullet-delivery.d.ts +16 -0
- package/dist/types/components/salla-gifting/gift-schema.d.ts +4 -0
- package/dist/types/components/salla-gifting/salla-gifting.d.ts +4 -1
- package/dist/types/components/salla-login-modal/salla-login-modal.d.ts +2 -0
- package/dist/types/components/salla-product-options/salla-product-options.d.ts +0 -11
- package/dist/types/components/salla-products-list/salla-products-list.d.ts +60 -6
- package/dist/types/components/salla-social-share/salla-social-share.d.ts +39 -2
- package/dist/types/components/salla-wishlist-actions/salla-wishlist-actions.d.ts +93 -0
- package/dist/types/components.d.ts +172 -18
- package/package.json +5 -5
- package/dist/twilight/p-234fdf72.entry.js +0 -4
- package/dist/twilight/p-3fbd88d0.entry.js +0 -4
- package/dist/twilight/p-7a1cfd65.entry.js +0 -4
- package/dist/twilight/p-865c602e.entry.js +0 -4
- package/dist/twilight/p-9df5c9a7.entry.js +0 -4
- package/dist/twilight/p-C4aFleDM.js +0 -4
- package/dist/twilight/p-e485d0b8.entry.js +0 -4
- package/dist/twilight/p-f5072671.entry.js +0 -4
- package/dist/twilight/p-fb7904e6.entry.js +0 -4
|
@@ -6,13 +6,14 @@ import { a as anime } from './anime.es.js';
|
|
|
6
6
|
import { S as ShoppingBag } from './shopping-bag.js';
|
|
7
7
|
import { H as Helper } from './Helper.js';
|
|
8
8
|
|
|
9
|
-
const sallaProductsListCss = "";
|
|
9
|
+
const sallaProductsListCss = ".s-products-list-selectable-item{position:relative;border-radius:0.5rem;transition:box-shadow 0.15s ease-in-out}.s-products-list-item-selected{box-shadow:0 0 0 2px var(--color-primary)}.s-products-list-select-control{position:absolute;top:10px;inset-inline-start:10px;z-index:5;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.s-products-list-select-checkbox{appearance:none;-webkit-appearance:none;-moz-appearance:none;position:relative;width:22px;height:22px;margin:0;cursor:pointer;color:var(--color-primary);border:1px solid rgba(0, 0, 0, 0.15);border-radius:6px;background-color:#fff;box-shadow:0 1px 3px rgba(0, 0, 0, 0.2);transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out}.s-products-list-select-checkbox:hover{border-color:var(--color-primary)}.s-products-list-select-checkbox:focus,.s-products-list-select-checkbox:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:0 1px 3px rgba(0, 0, 0, 0.2), 0 0 0 3px color-mix(in srgb, var(--color-primary) 30%, transparent)}.s-products-list-select-checkbox:checked,.s-products-list-select-checkbox:checked:hover,.s-products-list-select-checkbox:checked:focus{background-color:var(--color-primary);border-color:var(--color-primary)}.s-products-list-select-checkbox:checked::after{content:\"\";position:absolute;top:50%;left:50%;width:5px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:translate(-50%, -60%) rotate(45deg)}.s-products-list-row-cards .s-products-list-select-control{top:50%;inset-inline-start:14px;transform:translateY(-50%)}.s-products-list-row-cards .s-products-list-selectable-item>:not(.s-products-list-select-control){padding-inline-start:2.75rem}";
|
|
10
10
|
|
|
11
11
|
const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsList extends HTMLElement {
|
|
12
12
|
constructor() {
|
|
13
13
|
super();
|
|
14
14
|
this.__registerHost();
|
|
15
15
|
this.productsFetched = createEvent(this, "productsFetched", 7);
|
|
16
|
+
this.selectionChanged = createEvent(this, "selectionChanged", 7);
|
|
16
17
|
/**
|
|
17
18
|
* Autoload next page when scroll
|
|
18
19
|
*/
|
|
@@ -27,6 +28,18 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
27
28
|
* <salla-products-list product-card-component="my-custom-card-style2" ...
|
|
28
29
|
*/
|
|
29
30
|
this.productCardComponent = 'custom-salla-product-card';
|
|
31
|
+
/**
|
|
32
|
+
* Enables multi-selection of products. When enabled, a checkbox overlay is
|
|
33
|
+
* rendered on top of each product card and the selected products are exposed
|
|
34
|
+
* via the `selectionChanged` event, the `salla-products-list::selection.changed`
|
|
35
|
+
* global event and the `getSelected()` method.
|
|
36
|
+
*
|
|
37
|
+
* This is source-agnostic (works for any `source`) and defaults to `false`.
|
|
38
|
+
* On the wishlist page the `salla-wishlist-actions` panel turns it on at
|
|
39
|
+
* runtime (when the customer chooses "share specific items"), so no theme
|
|
40
|
+
* markup changes are required.
|
|
41
|
+
*/
|
|
42
|
+
this.selectable = false;
|
|
30
43
|
// State
|
|
31
44
|
this.page = 1;
|
|
32
45
|
this.placeholderText = salla.lang.get('pages.categories.no_products');
|
|
@@ -34,10 +47,12 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
34
47
|
this.failedLoadMore = salla.lang.get('common.elements.failed_to_load_more');
|
|
35
48
|
this.currentPage = salla.config.get('page');
|
|
36
49
|
this.filtersSnapshot = [];
|
|
37
|
-
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
40
|
-
this.
|
|
50
|
+
/** Map of selected products keyed by product id (preserves selection across pagination). */
|
|
51
|
+
this.selectedProducts = new Map();
|
|
52
|
+
this.lastViewedProductKey = 'lastViewedProductId';
|
|
53
|
+
this.filtersKey = 'filters';
|
|
54
|
+
this.infiniteScrollStateKey = 'infiniteScrollState';
|
|
55
|
+
this.prevCategoryIdKey = 'prevCategoryId';
|
|
41
56
|
this.isProcessing = false; // Tracks if we are processing data
|
|
42
57
|
this.scrollTimeout = null;
|
|
43
58
|
this.boundScrollToLastViewedProduct = () => this.scrollToLastViewedProduct();
|
|
@@ -46,7 +61,44 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
46
61
|
'product.index.latest': 'latest',
|
|
47
62
|
'product.index.offers': 'offers',
|
|
48
63
|
'product.index.search': 'search',
|
|
49
|
-
'product.index.sales': 'sales'
|
|
64
|
+
'product.index.sales': 'sales',
|
|
65
|
+
};
|
|
66
|
+
this.onWishlistItemRemoved = (_response, productId) => {
|
|
67
|
+
if (this.getSource() !== 'wishlist' || !this.wrapper) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const normalizedId = String(productId);
|
|
71
|
+
const cardTag = this.hasCustomComponent ? this.productCardComponent : 'salla-product-card';
|
|
72
|
+
for (const child of Array.from(this.wrapper.children)) {
|
|
73
|
+
const listItem = child;
|
|
74
|
+
const card = child.querySelector(cardTag);
|
|
75
|
+
const id = listItem.product?.id ?? card?.product?.id;
|
|
76
|
+
if (id != null && String(id) === normalizedId) {
|
|
77
|
+
child.remove();
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Theme may remove the card first and leave an empty selectable shell.
|
|
82
|
+
for (const child of Array.from(this.wrapper.children)) {
|
|
83
|
+
if (!child.classList.contains('s-products-list-selectable-item')) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const listItem = child;
|
|
87
|
+
if (listItem.product?.id != null &&
|
|
88
|
+
String(listItem.product.id) === normalizedId &&
|
|
89
|
+
!child.querySelector(cardTag)) {
|
|
90
|
+
child.remove();
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (this.selectable) {
|
|
95
|
+
for (const id of Array.from(this.selectedProducts.keys())) {
|
|
96
|
+
if (String(id) === normalizedId) {
|
|
97
|
+
this.selectedProducts.delete(id);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
this.emitSelection();
|
|
101
|
+
}
|
|
50
102
|
};
|
|
51
103
|
//TODO:: check why `this.includes` not working!!
|
|
52
104
|
this.includes = Helper.parseJson(this.includes || this.host.getAttribute('includes'));
|
|
@@ -63,15 +115,17 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
63
115
|
}
|
|
64
116
|
connectedCallback() {
|
|
65
117
|
//Override browser scroll restoration default behaviour
|
|
66
|
-
if (
|
|
67
|
-
history.scrollRestoration =
|
|
118
|
+
if ('scrollRestoration' in history)
|
|
119
|
+
history.scrollRestoration = 'manual';
|
|
68
120
|
// required for scroll restoration case when the component loads before DOM content is completed (slow internet bandwidth /low device specs)
|
|
69
121
|
window.addEventListener('DOMContentLoaded', this.boundScrollToLastViewedProduct);
|
|
70
122
|
salla.event.on('salla-filters::changed', filters => this.setFilters(filters));
|
|
123
|
+
salla.event.on('wishlist::removed', this.onWishlistItemRemoved);
|
|
71
124
|
}
|
|
72
125
|
disconnectedCallback() {
|
|
73
126
|
window.removeEventListener('DOMContentLoaded', this.boundScrollToLastViewedProduct);
|
|
74
127
|
window.removeEventListener('scroll', this.boundHandleScroll);
|
|
128
|
+
salla.event.off('wishlist::removed', this.onWishlistItemRemoved);
|
|
75
129
|
}
|
|
76
130
|
/**
|
|
77
131
|
* Set parsed filters data from URI
|
|
@@ -84,7 +138,9 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
84
138
|
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
85
139
|
// Create a deep copy of the filters object to avoid mutating the original object
|
|
86
140
|
this.parsedFilters = JSON.parse(JSON.stringify(filters));
|
|
87
|
-
if (this.currentPage?.slug ==
|
|
141
|
+
if (this.currentPage?.slug == 'product.index' &&
|
|
142
|
+
this.parsedFilters &&
|
|
143
|
+
this.parsedFilters.category_id) {
|
|
88
144
|
this.currentCategoryIdFilter = [this.parsedFilters.category_id];
|
|
89
145
|
}
|
|
90
146
|
return this.reload();
|
|
@@ -172,12 +228,12 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
172
228
|
}
|
|
173
229
|
this.nextPage += '&filterable=1';
|
|
174
230
|
for (const [key, value] of Object.entries(this.parsedFilters || {})) {
|
|
175
|
-
if ([
|
|
231
|
+
if (['string', 'number'].includes(typeof value)) {
|
|
176
232
|
// @ts-ignore
|
|
177
233
|
this.nextPage += `&filters[${encodeURIComponent(key)}]=${encodeURIComponent(value)}`;
|
|
178
234
|
}
|
|
179
235
|
else if (Array.isArray(value)) {
|
|
180
|
-
value.forEach(item => this.nextPage += `&filters[${encodeURIComponent(key)}][]=${encodeURIComponent(item)}`);
|
|
236
|
+
value.forEach(item => (this.nextPage += `&filters[${encodeURIComponent(key)}][]=${encodeURIComponent(item)}`));
|
|
181
237
|
}
|
|
182
238
|
else if (typeof value === 'object') {
|
|
183
239
|
for (const [k, v] of Object.entries(value)) {
|
|
@@ -231,7 +287,9 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
231
287
|
//as a request they don't want to let the user to open the product details
|
|
232
288
|
//todo:: find a better way to handle this request
|
|
233
289
|
this.getSource() === 'landing-page' && (product.url = '');
|
|
234
|
-
const customComponentTag = this.hasCustomComponent
|
|
290
|
+
const customComponentTag = this.hasCustomComponent
|
|
291
|
+
? this.productCardComponent
|
|
292
|
+
: 'salla-product-card';
|
|
235
293
|
const productCard = document.createElement(customComponentTag);
|
|
236
294
|
productCard.product = product;
|
|
237
295
|
// Apply compact layout if requested - set both property and attribute for compatibility
|
|
@@ -242,7 +300,7 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
242
300
|
this.applyLandingPageStyles(productCard);
|
|
243
301
|
this.applyHorizontalCardStyles(productCard);
|
|
244
302
|
// Attach click event listener to save the current products snapshot
|
|
245
|
-
productCard.addEventListener('click',
|
|
303
|
+
productCard.addEventListener('click', event => {
|
|
246
304
|
const target = event.target;
|
|
247
305
|
// Check if the clicked element is an anchor or inside an anchor
|
|
248
306
|
const anchor = target.closest('a');
|
|
@@ -254,8 +312,69 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
254
312
|
}
|
|
255
313
|
}
|
|
256
314
|
});
|
|
315
|
+
if (this.selectable) {
|
|
316
|
+
return this.wrapSelectableItem(productCard, product);
|
|
317
|
+
}
|
|
257
318
|
return productCard;
|
|
258
319
|
}
|
|
320
|
+
/**
|
|
321
|
+
* Wrap a product card with a selection control. The wrapper mirrors `product`
|
|
322
|
+
* so the scroll-restoration snapshot logic (which reads `child.product`) keeps
|
|
323
|
+
* working, and the card keeps its id for `scrollToLastViewedProduct`.
|
|
324
|
+
*/
|
|
325
|
+
wrapSelectableItem(productCard, product) {
|
|
326
|
+
const container = document.createElement('div');
|
|
327
|
+
container.className = 's-products-list-selectable-item';
|
|
328
|
+
container.product = product;
|
|
329
|
+
const isSelected = this.selectedProducts.has(product.id);
|
|
330
|
+
if (isSelected) {
|
|
331
|
+
container.classList.add('s-products-list-item-selected');
|
|
332
|
+
}
|
|
333
|
+
const control = document.createElement('label');
|
|
334
|
+
control.className = 's-products-list-select-control';
|
|
335
|
+
control.setAttribute('aria-label', salla.lang.get('common.elements.select', 'تحديد'));
|
|
336
|
+
const checkbox = document.createElement('input');
|
|
337
|
+
checkbox.type = 'checkbox';
|
|
338
|
+
checkbox.className = 's-products-list-select-checkbox';
|
|
339
|
+
checkbox.checked = isSelected;
|
|
340
|
+
checkbox.addEventListener('change', () => this.toggleSelection(product, container, checkbox.checked));
|
|
341
|
+
control.appendChild(checkbox);
|
|
342
|
+
container.appendChild(control);
|
|
343
|
+
container.appendChild(productCard);
|
|
344
|
+
return container;
|
|
345
|
+
}
|
|
346
|
+
toggleSelection(product, container, checked) {
|
|
347
|
+
if (checked) {
|
|
348
|
+
this.selectedProducts.set(product.id, product);
|
|
349
|
+
container?.classList.add('s-products-list-item-selected');
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
this.selectedProducts.delete(product.id);
|
|
353
|
+
container?.classList.remove('s-products-list-item-selected');
|
|
354
|
+
}
|
|
355
|
+
this.emitSelection();
|
|
356
|
+
}
|
|
357
|
+
emitSelection() {
|
|
358
|
+
const products = Array.from(this.selectedProducts.values());
|
|
359
|
+
const ids = Array.from(this.selectedProducts.keys());
|
|
360
|
+
const detail = { ids, products, count: ids.length };
|
|
361
|
+
this.selectionChanged.emit(detail);
|
|
362
|
+
salla.event.emit('salla-products-list::selection.changed', detail);
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Re-render the list when selection mode is toggled at runtime (e.g. enabled
|
|
366
|
+
* by the wishlist actions panel after the list already loaded).
|
|
367
|
+
*/
|
|
368
|
+
onSelectableChanged(newValue, oldValue) {
|
|
369
|
+
if (newValue === oldValue || !this.isReady || !this.wrapper) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
if (!newValue) {
|
|
373
|
+
this.selectedProducts.clear();
|
|
374
|
+
this.emitSelection();
|
|
375
|
+
}
|
|
376
|
+
this.reload();
|
|
377
|
+
}
|
|
259
378
|
applyLandingPageStyles(productCard) {
|
|
260
379
|
if (this.getSource() === 'landing-page' && !this.hasCustomComponent) {
|
|
261
380
|
productCard.toggleAttribute('hide-add-btn', true);
|
|
@@ -273,7 +392,7 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
273
392
|
}
|
|
274
393
|
waitForResizing(element) {
|
|
275
394
|
let timeout = null;
|
|
276
|
-
return new Promise(
|
|
395
|
+
return new Promise(resolve => {
|
|
277
396
|
const resizeObserver = new ResizeObserver(() => {
|
|
278
397
|
clearTimeout(timeout);
|
|
279
398
|
timeout = setTimeout(() => {
|
|
@@ -286,7 +405,7 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
286
405
|
}
|
|
287
406
|
waitForLayoutStable(element) {
|
|
288
407
|
let timeout = null;
|
|
289
|
-
return new Promise(
|
|
408
|
+
return new Promise(resolve => {
|
|
290
409
|
const observer = new MutationObserver(() => {
|
|
291
410
|
clearTimeout(timeout);
|
|
292
411
|
timeout = setTimeout(() => {
|
|
@@ -306,15 +425,14 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
306
425
|
// Wait for DOM mutations and layout shifts to stabilize
|
|
307
426
|
return await Promise.allSettled([
|
|
308
427
|
this.waitForResizing(element),
|
|
309
|
-
this.waitForLayoutStable(element)
|
|
428
|
+
this.waitForLayoutStable(element),
|
|
310
429
|
]);
|
|
311
430
|
}
|
|
312
431
|
scrollToLastViewedProduct() {
|
|
313
432
|
const lastViewedProductId = sessionStorage.getItem(this.lastViewedProductKey);
|
|
314
433
|
if (!lastViewedProductId || salla.url.is_page('product.single'))
|
|
315
434
|
return;
|
|
316
|
-
this.isElementLoaded(`[id*="${lastViewedProductId}"]`)
|
|
317
|
-
.then(() => {
|
|
435
|
+
this.isElementLoaded(`[id*="${lastViewedProductId}"]`).then(() => {
|
|
318
436
|
const productCard = this.wrapper?.querySelector(`[id*="${lastViewedProductId}"]`);
|
|
319
437
|
if (!productCard)
|
|
320
438
|
return;
|
|
@@ -322,8 +440,12 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
322
440
|
const scrollToProductCard = () => {
|
|
323
441
|
// calculations is located here for last second changes in the ui (ie. sticky header height)
|
|
324
442
|
productCard.scrollIntoView({ block: 'start', behavior: 'instant' });
|
|
325
|
-
const headerSelector = matchMedia('(max-width: 1024px)').matches
|
|
326
|
-
|
|
443
|
+
const headerSelector = matchMedia('(max-width: 1024px)').matches
|
|
444
|
+
? 'header .inner'
|
|
445
|
+
: 'ul.main-menu';
|
|
446
|
+
const headerHeight = window?.header_is_sticky
|
|
447
|
+
? (document.querySelector(headerSelector)?.getBoundingClientRect()?.height ?? 56)
|
|
448
|
+
: 0;
|
|
327
449
|
const cardsListRowGap = parseInt(getComputedStyle(this.wrapper).rowGap) ?? 16;
|
|
328
450
|
const productCardOffset = headerHeight + cardsListRowGap;
|
|
329
451
|
scrollBy({ top: productCardOffset * -1, behavior: 'instant' });
|
|
@@ -331,7 +453,7 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
331
453
|
//start scrolling to the product card position
|
|
332
454
|
requestAnimationFrame(scrollToProductCard);
|
|
333
455
|
const productImages = productCard.querySelectorAll('img.lazy');
|
|
334
|
-
productImages.forEach(
|
|
456
|
+
productImages.forEach(image => {
|
|
335
457
|
const productImage = image;
|
|
336
458
|
const handleImageEvent = () => {
|
|
337
459
|
requestAnimationFrame(scrollToProductCard);
|
|
@@ -348,16 +470,15 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
348
470
|
});
|
|
349
471
|
}
|
|
350
472
|
isElementLoaded(selector) {
|
|
351
|
-
return new Promise(
|
|
473
|
+
return new Promise(resolve => {
|
|
352
474
|
const interval = setInterval(() => {
|
|
353
475
|
if (document.querySelector(selector)) {
|
|
354
476
|
clearInterval(interval);
|
|
355
477
|
return resolve(document.querySelector(selector));
|
|
356
478
|
}
|
|
357
479
|
}, 50);
|
|
358
|
-
})
|
|
480
|
+
});
|
|
359
481
|
}
|
|
360
|
-
;
|
|
361
482
|
takeStateSnapshot() {
|
|
362
483
|
const currentPageData = [];
|
|
363
484
|
// Classic for-loop for performance
|
|
@@ -368,7 +489,7 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
368
489
|
const scrollState = {
|
|
369
490
|
pageIndex: Math.max((this.infiniteScroll?.pageIndex ?? 1) - 1, 1),
|
|
370
491
|
nextPage: this.nextPage,
|
|
371
|
-
currentPageData
|
|
492
|
+
currentPageData,
|
|
372
493
|
};
|
|
373
494
|
if (this.isFilterable()) {
|
|
374
495
|
const existingFilters = sessionStorage.getItem(this.filtersKey);
|
|
@@ -415,9 +536,8 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
415
536
|
const isDifferentCategory = currentPageSlug
|
|
416
537
|
? prevCategory !== currentPageSlug // Compare slugs for special pages
|
|
417
538
|
: prevCategory !== String(currentPageId); // Compare IDs otherwise
|
|
418
|
-
if ((prevCategory && isDifferentCategory && !isHomepage && !isProductPage)
|
|
419
|
-
|
|
420
|
-
(isHomepage && !this.hasInfiniteScroll)) {
|
|
539
|
+
if ((prevCategory && isDifferentCategory && !isHomepage && !isProductPage) ||
|
|
540
|
+
(isHomepage && !this.hasInfiniteScroll)) {
|
|
421
541
|
this.removeScrollRestorationSession();
|
|
422
542
|
this.switchToNormalBehavior = true;
|
|
423
543
|
return false;
|
|
@@ -461,7 +581,9 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
461
581
|
return ['json', 'selected', 'related', 'landing-page', 'recently'].includes(this.getSource());
|
|
462
582
|
}
|
|
463
583
|
getSourceValue() {
|
|
464
|
-
return this.currentCategoryIdFilter
|
|
584
|
+
return this.currentCategoryIdFilter
|
|
585
|
+
? this.currentCategoryIdFilter
|
|
586
|
+
: Helper.getProductsSourceValue(this.source, this.sourceValue);
|
|
465
587
|
}
|
|
466
588
|
logFetchError(errorPhase, error, fetchPath, http, response) {
|
|
467
589
|
try {
|
|
@@ -472,7 +594,9 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
472
594
|
source: this.getSource(),
|
|
473
595
|
sourceValue: typeof sourceValue === 'string' && sourceValue.length > 200
|
|
474
596
|
? `${sourceValue.slice(0, 200)}…`
|
|
475
|
-
: Array.isArray(sourceValue)
|
|
597
|
+
: Array.isArray(sourceValue)
|
|
598
|
+
? { length: sourceValue.length }
|
|
599
|
+
: sourceValue,
|
|
476
600
|
pageIndex: this.infiniteScroll?.pageIndex,
|
|
477
601
|
fetchPath,
|
|
478
602
|
httpStatus: http?.status,
|
|
@@ -489,7 +613,9 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
489
613
|
: {}),
|
|
490
614
|
});
|
|
491
615
|
}
|
|
492
|
-
catch {
|
|
616
|
+
catch {
|
|
617
|
+
/* analytics */
|
|
618
|
+
}
|
|
493
619
|
}
|
|
494
620
|
appendDataLayer(data) {
|
|
495
621
|
if (typeof dataLayer !== 'object' || !Array.isArray(dataLayer)) {
|
|
@@ -497,29 +623,29 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
497
623
|
return;
|
|
498
624
|
}
|
|
499
625
|
dataLayer.push({
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
626
|
+
event: 'impressions',
|
|
627
|
+
ecommerce: {
|
|
628
|
+
currencyCode: salla.config.currency().code,
|
|
503
629
|
// "event_id":"", // todo
|
|
504
|
-
|
|
630
|
+
impressions: data.map((product, index) => {
|
|
505
631
|
return {
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
632
|
+
id: product.id,
|
|
633
|
+
name: product.name,
|
|
634
|
+
price: product.price,
|
|
635
|
+
brand: product.brand?.name || '',
|
|
636
|
+
quantity: product.quantity,
|
|
511
637
|
// "variant": "",
|
|
512
|
-
|
|
638
|
+
categories: [
|
|
513
639
|
{
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
}
|
|
640
|
+
name: product.category?.name || salla.config.get('page.title'),
|
|
641
|
+
id: salla.config.get('page.id'),
|
|
642
|
+
},
|
|
517
643
|
],
|
|
518
|
-
|
|
519
|
-
|
|
644
|
+
category: product.category?.name || salla.config.get('page.title'),
|
|
645
|
+
position: index + 1,
|
|
520
646
|
};
|
|
521
|
-
})
|
|
522
|
-
}
|
|
647
|
+
}),
|
|
648
|
+
},
|
|
523
649
|
});
|
|
524
650
|
}
|
|
525
651
|
initiateInfiniteScroll() {
|
|
@@ -532,7 +658,7 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
532
658
|
history: false,
|
|
533
659
|
nextPage: this.nextPage,
|
|
534
660
|
scrollThreshold: shouldApplyManualLoad ? false : this.autoload ? 100 : false,
|
|
535
|
-
loadOnScroll: shouldApplyManualLoad ? false : this.autoload
|
|
661
|
+
loadOnScroll: shouldApplyManualLoad ? false : this.autoload,
|
|
536
662
|
}, true);
|
|
537
663
|
this.infiniteScroll.pageIndex = this.page;
|
|
538
664
|
this.infiniteScroll?.on('request', () => {
|
|
@@ -643,11 +769,13 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
643
769
|
}
|
|
644
770
|
getInitialData() {
|
|
645
771
|
this.loading();
|
|
646
|
-
return salla.api.withoutNotifier(() => salla.product.api
|
|
772
|
+
return salla.api.withoutNotifier(() => salla.product.api
|
|
773
|
+
.fetch({
|
|
647
774
|
source: Helper.getApiSource(this.getSource()),
|
|
648
775
|
source_value: this.getSourceValue(),
|
|
649
|
-
limit: this.limit
|
|
650
|
-
})
|
|
776
|
+
limit: this.limit,
|
|
777
|
+
})
|
|
778
|
+
.then(async (response) => {
|
|
651
779
|
if (!response.data.length) {
|
|
652
780
|
this.showPlaceholder = true;
|
|
653
781
|
this.placeholderLoader && this.placeholderLoader.remove();
|
|
@@ -671,9 +799,65 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
671
799
|
async loadMore() {
|
|
672
800
|
this.infiniteScroll?.loadNextPage();
|
|
673
801
|
}
|
|
802
|
+
/**
|
|
803
|
+
* Get the currently selected products.
|
|
804
|
+
*/
|
|
805
|
+
async getSelected() {
|
|
806
|
+
return {
|
|
807
|
+
ids: Array.from(this.selectedProducts.keys()),
|
|
808
|
+
products: Array.from(this.selectedProducts.values()),
|
|
809
|
+
};
|
|
810
|
+
}
|
|
811
|
+
/**
|
|
812
|
+
* Get all products currently rendered in the list (works whether selection
|
|
813
|
+
* is enabled or not). Useful to gather ids for "share all".
|
|
814
|
+
*/
|
|
815
|
+
async getLoadedProducts() {
|
|
816
|
+
const products = [];
|
|
817
|
+
if (!this.wrapper) {
|
|
818
|
+
return products;
|
|
819
|
+
}
|
|
820
|
+
for (let i = 0; i < this.wrapper.children.length; i++) {
|
|
821
|
+
const item = this.wrapper.children[i];
|
|
822
|
+
item?.product && products.push(item.product);
|
|
823
|
+
}
|
|
824
|
+
return products;
|
|
825
|
+
}
|
|
826
|
+
/**
|
|
827
|
+
* Select all currently rendered products.
|
|
828
|
+
*/
|
|
829
|
+
async selectAll() {
|
|
830
|
+
if (!this.selectable || !this.wrapper) {
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
833
|
+
for (let i = 0; i < this.wrapper.children.length; i++) {
|
|
834
|
+
const item = this.wrapper.children[i];
|
|
835
|
+
if (item?.product) {
|
|
836
|
+
this.selectedProducts.set(item.product.id, item.product);
|
|
837
|
+
item.classList.add('s-products-list-item-selected');
|
|
838
|
+
const checkbox = item.querySelector('.s-products-list-select-checkbox');
|
|
839
|
+
checkbox && (checkbox.checked = true);
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
this.emitSelection();
|
|
843
|
+
}
|
|
844
|
+
/**
|
|
845
|
+
* Clear the current selection.
|
|
846
|
+
*/
|
|
847
|
+
async clearSelection() {
|
|
848
|
+
this.selectedProducts.clear();
|
|
849
|
+
if (this.wrapper) {
|
|
850
|
+
this.wrapper
|
|
851
|
+
.querySelectorAll('.s-products-list-select-checkbox')
|
|
852
|
+
.forEach((checkbox) => (checkbox.checked = false));
|
|
853
|
+
this.wrapper
|
|
854
|
+
.querySelectorAll('.s-products-list-item-selected')
|
|
855
|
+
.forEach(item => item.classList.remove('s-products-list-item-selected'));
|
|
856
|
+
}
|
|
857
|
+
this.emitSelection();
|
|
858
|
+
}
|
|
674
859
|
componentWillLoad() {
|
|
675
|
-
return salla.onReady()
|
|
676
|
-
.then(async () => {
|
|
860
|
+
return salla.onReady().then(async () => {
|
|
677
861
|
this.hasCustomComponent = !!customElements.get(this.productCardComponent);
|
|
678
862
|
this.sourceValueIsValid = !!(this.getSourceValue() || this.isSourceWithoutValue());
|
|
679
863
|
this.hasInfiniteScroll = !this.isAuxiliaryProductsListSource() && !this.limit;
|
|
@@ -753,15 +937,16 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
753
937
|
});
|
|
754
938
|
}
|
|
755
939
|
else {
|
|
756
|
-
console.error(
|
|
940
|
+
console.error('No response received after getInitialData.');
|
|
757
941
|
}
|
|
758
942
|
})
|
|
759
943
|
.catch(error => {
|
|
760
|
-
console.error(
|
|
944
|
+
console.error('Error during initial data fetch:', error);
|
|
761
945
|
});
|
|
762
946
|
}
|
|
763
947
|
else {
|
|
764
|
-
this.firstPageResponse &&
|
|
948
|
+
this.firstPageResponse &&
|
|
949
|
+
(await this.handleResponse(this.firstPageResponse, false)).forEach(card => this.wrapper.append(card));
|
|
765
950
|
}
|
|
766
951
|
}
|
|
767
952
|
canRender() {
|
|
@@ -772,16 +957,18 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
772
957
|
return '';
|
|
773
958
|
}
|
|
774
959
|
if (this.showPlaceholder) {
|
|
775
|
-
return h("div", { class: "s-products-list-placeholder" }, h("span", { innerHTML: ShoppingBag }), h("p", null, this.placeholderText));
|
|
960
|
+
return (h("div", { class: "s-products-list-placeholder" }, h("span", { innerHTML: ShoppingBag }), h("p", null, this.placeholderText)));
|
|
776
961
|
}
|
|
777
962
|
return (h(Host, { class: "s-products-list" }, h("div", { class: {
|
|
778
|
-
|
|
963
|
+
's-products-list-wrapper': true,
|
|
779
964
|
's-products-list-horizontal-cards': this.horizontalCards && !this.filtersResults,
|
|
780
965
|
's-products-list-vertical-cards': !this.horizontalCards && !this.rowCards && !this.filtersResults,
|
|
781
966
|
's-products-list-row-cards': this.rowCards,
|
|
782
967
|
's-products-list-compact-cards': this.compactCards,
|
|
783
968
|
's-products-list-filters-results': this.filtersResults,
|
|
784
|
-
}, ref: wrapper => this.wrapper = wrapper }), h("div", { class: "s-infinite-scroll-status", ref: status => this.status = status }, h("p", { class: "s-infinite-scroll-last infinite-scroll-last s-hidden" }, this.endOfText), h("p", { class: "s-infinite-scroll-error infinite-scroll-error s-hidden" }, this.failedLoadMore)), this.autoload && h("div", { class: "s-products-list-loading-wrapper", style: {
|
|
969
|
+
}, ref: wrapper => (this.wrapper = wrapper) }), h("div", { class: "s-infinite-scroll-status", ref: status => (this.status = status) }, h("p", { class: "s-infinite-scroll-last infinite-scroll-last s-hidden" }, this.endOfText), h("p", { class: "s-infinite-scroll-error infinite-scroll-error s-hidden" }, this.failedLoadMore)), this.autoload && (h("div", { class: "s-products-list-loading-wrapper", style: { display: 'none' }, ref: loader => (this.loader = loader) }, h("span", { class: "s-button-loader s-button-loader-center s-infinite-scroll-btn-loader" }))), this.hasInfiniteScroll && this.nextPage && !this.autoload ? (h("div", { class: "s-infinite-scroll-wrapper", style: { display: 'none' }, ref: loadMoreWrapper => (this.loadMoreWrapper = loadMoreWrapper) }, h("button", { onClick: () => this.loadMore(), class: "s-infinite-scroll-btn s-button-btn s-button-primary" }, h("span", { class: "s-button-text s-infinite-scroll-btn-text" }, this.loadMoreText
|
|
970
|
+
? this.loadMoreText
|
|
971
|
+
: salla.lang.get('common.elements.load_more')), h("span", { class: "s-button-loader s-button-loader-center s-infinite-scroll-btn-loader", ref: btnLoader => (this.btnLoader = btnLoader), style: { display: 'none' } })))) : ('')));
|
|
785
972
|
}
|
|
786
973
|
init() {
|
|
787
974
|
this.initiateInfiniteScroll();
|
|
@@ -798,14 +985,19 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
798
985
|
let title = Helper.getPageTitleForSource(source);
|
|
799
986
|
try {
|
|
800
987
|
if (this.getSource() === 'search') {
|
|
801
|
-
title = salla.lang.get('common.elements.search_about', {
|
|
988
|
+
title = salla.lang.get('common.elements.search_about', { word: this.getSourceValue() });
|
|
802
989
|
}
|
|
803
990
|
else if (!title) {
|
|
804
991
|
let catId = this.parsedFilters.category_id || this.getSourceValue()[0];
|
|
805
992
|
// get the first filter that its key is category_id, then get the value when filter.value.*.key==catId
|
|
806
|
-
title =
|
|
993
|
+
title =
|
|
994
|
+
response.filters
|
|
995
|
+
?.find(filter => filter.key === 'category_id')
|
|
996
|
+
?.values?.find(cat => cat.key === catId)?.value ?? '';
|
|
807
997
|
}
|
|
808
|
-
title +=
|
|
998
|
+
title +=
|
|
999
|
+
(title ? ' - ' : '') +
|
|
1000
|
+
salla.lang.choice('blocks.header.products_count', response.data?.length);
|
|
809
1001
|
if (response.data.length === 15) {
|
|
810
1002
|
title = title.replace(response.data.length, salla.lang.get('common.elements.more_than') + ' ' + response.data.length);
|
|
811
1003
|
}
|
|
@@ -844,6 +1036,9 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
844
1036
|
return productCardsView;
|
|
845
1037
|
}
|
|
846
1038
|
get host() { return this; }
|
|
1039
|
+
static get watchers() { return {
|
|
1040
|
+
"selectable": ["onSelectableChanged"]
|
|
1041
|
+
}; }
|
|
847
1042
|
static get style() { return sallaProductsListCss; }
|
|
848
1043
|
}, [0, "salla-products-list", {
|
|
849
1044
|
"source": [1537],
|
|
@@ -858,6 +1053,7 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
858
1053
|
"loadMoreText": [1, "load-more-text"],
|
|
859
1054
|
"productCardComponent": [1, "product-card-component"],
|
|
860
1055
|
"includes": [1040],
|
|
1056
|
+
"selectable": [1540],
|
|
861
1057
|
"page": [32],
|
|
862
1058
|
"nextPage": [32],
|
|
863
1059
|
"hasInfiniteScroll": [32],
|
|
@@ -875,7 +1071,13 @@ const SallaProductsList = /*@__PURE__*/ proxyCustomElement(class SallaProductsLi
|
|
|
875
1071
|
"filtersSnapshot": [32],
|
|
876
1072
|
"setFilters": [64],
|
|
877
1073
|
"reload": [64],
|
|
878
|
-
"loadMore": [64]
|
|
1074
|
+
"loadMore": [64],
|
|
1075
|
+
"getSelected": [64],
|
|
1076
|
+
"getLoadedProducts": [64],
|
|
1077
|
+
"selectAll": [64],
|
|
1078
|
+
"clearSelection": [64]
|
|
1079
|
+
}, undefined, {
|
|
1080
|
+
"selectable": ["onSelectableChanged"]
|
|
879
1081
|
}]);
|
|
880
1082
|
function defineCustomElement() {
|
|
881
1083
|
if (typeof customElements === "undefined") {
|